Commit log

b53ff3b git: Disable some more expensive things for the split diff's left-hand side (#48953)

Click to expand commit body
- Conflict UI
- LSP data
- Runnables

Release Notes:

- Improved performance when opening the split diff view.

Cole Miller created

11d812c Fix sccache --show-stats not working sometimes on windows (#48974)

Click to expand commit body
Closes #ISSUE

- [ ] Tests or screenshots needed?
- [ ] Code Reviewed
- [ ] Manual QA

Release Notes:

- N/A

Conrad Irwin created

7ccd697 Remove thinking tool (#48952)

Click to expand commit body
Closes AI-10

The thinking tool is no longer needed. This removes it from the agent
codebase and updates all tests to use other tools instead.

Release Notes:

- Removed the thinking tool from the Agent, as models now have their own
first-class thinking APIs.

Richard Feldman created

718dc62 docs: Add AI SEO frontmatter (#48559)

Click to expand commit body
Closes #ISSUE

Release Notes:

- N/A *or* Added/Fixed/Improved ...

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>

Katie Geer and Claude Opus 4.6 created

56504fd Support LSP document symbols in breadcrumbs and outline UI (#48780)

Kirill Bulatov created

1e2874c Fix ACP agents not loading when not authenticated (#48959)

Click to expand commit body
Closes #48857

- [x] Code Reviewed
- [x] Manual QA

Release Notes:

- Fixed an issue where some ACP agents would not be loading correctly
when unauthenticated

---------

Co-authored-by: cameron <cameron.studdstreet@gmail.com>

Bennet Bo Fenner and cameron created

f233ae4 Add telemetry for user-facing notifications (#48558)

Click to expand commit body
## Summary

Adds a "Notification Shown" telemetry event that fires whenever a
user-facing notification is displayed in Zed. This helps the team
understand error patterns, notification frequency, and which parts of
the application generate the most notifications.

## Event Schema

| Property | Type | Description |
|----------|------|-------------|
| `notification_type` | `string` | `"error"` or `"notification"` |
| `source` | `string` | Origin category (e.g., `lsp`, `git`, `settings`,
`editor`) |
| `lsp_name` | `string?` | Language server name (only for LSP
notifications) |
| `level` | `string?` | Severity: `"critical"`, `"warning"`, or `"info"`
|
| `has_actions` | `bool` | Whether the notification has action buttons |
| `notification_id` | `string` | Debug string of the NotificationId |
| `is_auto_dismissing` | `bool` | Whether the notification
auto-dismisses |

## NotificationSource Categories

A new `NotificationSource` enum categorizes notifications by origin:

- `lsp` - Language server notifications
- `settings` - Settings/keymap parse errors
- `update` - App updates, release notes
- `extension` - Extension suggestions/errors
- `git` - Git operations, commit errors
- `project` - Project-level issues
- `collab` - Collaboration notifications
- `remote` - SSH/remote project errors
- `file` - File access errors
- `editor` - Editor operations (search, encoding)
- `agent` - AI assistant notifications
- `cli` - CLI installation
- `system` - Generic fallback

## Privacy

**Message content is intentionally not included** in telemetry because:
- LSP messages come from external servers and may contain file paths or
error chains
- Error messages may contain sensitive paths or API-related information
- The metadata alone provides sufficient insight for error tracking

## Implementation

Updated function signatures to include `NotificationSource`:
- `show_notification(id, source, cx, build_fn)`
- `show_toast(toast, source, cx)`
- `show_error(err, source, cx)`
- `show_app_notification(id, source, cx, build_fn)`
- `notify_err(workspace, source, cx)`
- `notify_async_err(source, cx)`
- `notify_app_err(source, cx)`
- `detach_and_notify_err(source, window, cx)`

Release Notes

- N/A (internal telemetry change)

---------

Co-authored-by: Zed Zippy <234243425+zed-zippy[bot]@users.noreply.github.com>

Katie Geer and Zed Zippy created

c778255 Fix error when loading ACP registry (#48957)

Click to expand commit body
This [change](https://github.com/agentclientprotocol/registry/pull/34)
broke the ACP registry in Zed, since we did not have `#[serde(default)]`
on the `_extensions` field.

- [x] Tests or screenshots needed?
- [x] Code Reviewed
- [x] Manual QA

Release Notes:

- Fixed an issue where the ACP registry would fail to load

Bennet Bo Fenner created

9648187 copilot: Fix Copilot not respecting `disable_ai` setting (#48495)

Click to expand commit body
Closes #48274

Previously, the Copilot language server would continue running even when
`disable_ai: true` was set in settings. This change ensures Copilot
properly responds to the `disable_ai` setting:

- Add `disable_ai` check in `start_copilot()` to prevent starting when
AI is disabled
- Modify the `SettingsStore` observer to shut down the running language
server when `disable_ai` changes from false to true
- Add tests for all scenarios:
  - Copilot doesn't start when `disable_ai` is true
  - Copilot stops when `disable_ai` becomes true
  - Copilot can start again when `disable_ai` becomes false

Release Notes:

- Fixed Copilot starting when disabled_ai: true

Oliver Azevedo Barnes created

f571fab Fix sccache on windows (#48943)

Click to expand commit body
Release Notes:

- N/A *or* Added/Fixed/Improved ...

Conrad Irwin created

8238f3b zed: Remove windows nightly channel toast (#48950)

Click to expand commit body
It served its job

Release Notes:

- N/A *or* Added/Fixed/Improved ...

Lukas Wirth created

770ff7c repl: Write test for JSON output (#48897)

Click to expand commit body
Tests for JSON output in the REPL.

Release Notes:

- N/A

Kyle Kelley created

de5fc22 repl: Test outputs and ExecutionView (#48892)

Click to expand commit body
More tests for outputs and the `ExecutionView`. Wanting to get more of
these in before we progress on Notebooks and Widgets.

Release Notes:

- N/A

Kyle Kelley created

5c6aa44 Bump Zed to v0.225 (#48941)

Click to expand commit body
Release Notes:

- N/A

Joseph T. Lyons created

4ed2b3d rope: Fix `point_utf16_to_offset` returning relative offset instead of absolute (#48862)

Click to expand commit body
`ChunkSlice::point_utf16_to_offset` returned `line.len()` (a relative
line byte length) instead of `row_offset_range.end` (the absolute byte
offset within the chunk) when clipping an out-of-range UTF-16 column on
a non-first row.

This caused incorrect position calculations in LSP coordinate
conversions whenever a UTF-16 point had a column beyond the line's
extent on any row after the first in a chunk.

Added a regression test covering clipping on both row 0 and row 1. Not
sure if it's the best place for a test like this one though.

Release Notes:

- N/A

Jordi Villar created

40b468e git: Fix another `WrapPointCursor` panic in `spacer_blocks` (#48932)

Click to expand commit body
Closes ZED-4ZH

Release Notes:

- N/A

Cole Miller created

3938403 Fix terminal pane showing welcome screen during loading (#48930)

Click to expand commit body
This fixes an issue where we would show the welcome screen when opening
the terminal panel.
The issue could technically occur in any panel, but was only occurred in
the terminal panel since we only render some content after the
`cx.spawn` inside `new_terminal_pane` completes. This caused the welcome
screen to show up for a single frame. This PR fixes this by showing a
blank panel instead.

Before


https://github.com/user-attachments/assets/4b805c42-5dc5-4742-b090-2f62e8839f3e

After 


https://github.com/user-attachments/assets/5da16b73-5999-461d-9057-438714d8d4ee

Screenshot from the videos:

Before

<img width="1164" height="579" alt="image"
src="https://github.com/user-attachments/assets/87ba2dff-d7c0-4104-b983-31bdd21cf0f9"
/>

After

<img width="1537" height="803" alt="image"
src="https://github.com/user-attachments/assets/359bc413-9794-4565-832d-83548b67cea5"
/>

- [x] Tests or screenshots needed?
- [x] Code Reviewed
- [x] Manual QA

Release Notes:

- Fixed an issue where the welcome screen would show up in the terminal
panel if the terminal was slow to load

Bennet Bo Fenner created

975d5ac ztracing: Annotate more callsites that invoke TreeSitter (#47522)

Click to expand commit body
Release Notes:

- N/A

Jakub Konka created

bf01a92 agent_ui: Fix editor not getting focused when adding selections (#48926)

Click to expand commit body
Fixes a regression that was introduced by the thread view refactor
(Nightly only).
Also fixed another minor focus issue: Dropping files into the agent
panel would not focus the message editor.

- [x] Code Reviewed
- [x] Manual QA

Release Notes:

- N/A

Bennet Bo Fenner created

8f70765 docs: Update the formatting section for Python (#48904)

Click to expand commit body
I have added the `code_actions_on_format` setting. I also temporarily
removed the mention of `"formatter": null`. Based on our findings in
#48600, its current behavior is inconsistent, so I've omitted it for now
to avoid confusing users. I will add it back once the underlying issue
is fixed (likely in a subsequent PR).

Closes #48600.

- [ ] Tests or screenshots needed?
- [x] Code Reviewed
- [x] Manual QA

Release Notes:

- N/A

---------

Co-authored-by: Kunall Banerjee <hey@kimchiii.space>

Xin Zhao and Kunall Banerjee created

3880090 gpui: Fix double-close of fd in read_fd on linux (#48850)

Click to expand commit body
`read_fd` calls `File::from_raw_fd(fd.as_raw_fd())`, which creates a new
`File` that assumes ownership of the raw fd, while the original
`FileDescriptor` also retains ownership. when both drop at the end of
the function, the same fd is closed twice. between the two closes
another thread can receive that fd number from the kernel for an
unrelated file/socket, and the second close silently kills it. this can
cause hard to diagnose data corruption or i/o failures.

fix: use `fd.into_raw_fd()` instead of `fd.as_raw_fd()` to transfer
ownership to the `File` without running `FileDescriptor`'s drop.

Release Notes:

- N/A

Albab Hasan created

f731497 git: Enable the split diff for everyone (#48912)

Click to expand commit body
Release Notes:

- Added support for viewing diffs in split ("side by side") mode

Cole Miller created

05e99da git: Standardize nomenclature for side-by-side diff (#48910)

Click to expand commit body
"Unified" for the old view, and "split" for the new one.

Release Notes:

- N/A

Cole Miller created

2b7b886 agent_ui: Fix keybinding display inside tooltips in the footer actions (#48909)

Click to expand commit body
- [x] Code Reviewed
- [x] Manual QA

Release Notes:

- Agent: Fixed an issue where keybindings inside tooltips in the message
editor footer actions weren't being displayed.

Danilo Leal created

6f09ead git: Add click with modifier to set default for side-by-side diff toolbar buttons (#48908)

Click to expand commit body
Release Notes:

- N/A

Cole Miller created

47cb1cf Use sccache in CI (#48895)

Click to expand commit body
Try sccache in CI to paper over cargo's abyssmal caching

Release Notes:

- N/A

Conrad Irwin created

74419f6 git: Correct logic for updating companion excerpt IDs mapping (#48906)

Click to expand commit body
We try to remove old excerpt IDs from the companion when mutating
excerpts for a path, but we were incorrectly doing this using the
excerpt IDs for the right-hand side multibuffer _after_ any excerpt
mutations had occurred, causing stale excerpt IDs to accumulate.

Release Notes:

- N/A

Cole Miller created

8e3e6b8 Fix path handling regressions on Windows (#48905)

Click to expand commit body
https://github.com/zed-industries/zed/pull/48891 changed `find_worktree`
to use `PathStyle::strip_prefix`, which exposed this bug.

- [ ] Tests or screenshots needed?
- [X] Code Reviewed
- [X] Manual QA

Release Notes:

- N/A

John Tur created

6cd7586 Switch to a Zed user-agent header for Copilot traffic (#48591)

Click to expand commit body
Follow-up to #48528

Release Notes:

- N/A

---------

Co-authored-by: Mikayla Maki <mikayla.c.maki@gmail.com>

Richard Feldman and Mikayla Maki created

de213ad Replace `always_allow_tool_actions` with `tool_permissions.default` (#48553)

Click to expand commit body
<img width="1275" height="154" alt="Screenshot 2026-02-10 at 6 55 03 PM"
src="https://github.com/user-attachments/assets/db87fe3f-274b-4bca-b342-b72e651ce57c"
/>
<img width="1275" height="176" alt="Screenshot 2026-02-10 at 6 55 15 PM"
src="https://github.com/user-attachments/assets/4b9a0e70-4897-4736-8cc1-8d1415508f58"
/>

Replaces the boolean `always_allow_tool_actions` setting with a
three-valued `tool_permissions.default` field (`"allow"` / `"confirm"` /
`"deny"`).

Release Notes:

- Introduced per-tool permission settings, including regexes for
controlling when tools may be auto-allowed, auto-denied, or always
require confirmation.
- Replaced the `always_allow_tool_actions` setting with
`tool_permissions.default`.

---------

Co-authored-by: Zed Zippy <234243425+zed-zippy[bot]@users.noreply.github.com>

Richard Feldman and Zed Zippy created

c8054ca git: Fix searching in the split diff (#48894)

Click to expand commit body
- Fix panics caused by reusing cached matches for the wrong side
- Highlight matches on the side that was searched only
- Clear matches in non-searched editor when initiating a new search

Release Notes:

- N/A

---------

Co-authored-by: Eric <eric@zed.dev>
Co-authored-by: Jakub <jakub@zed.dev>

Cole Miller , Eric , and Jakub created

d2c922b Reuse existing windows when opening files in remote workspaces (#48891)

Click to expand commit body
Closes https://github.com/zed-industries/zed/issues/42366

- [ ] Tests or screenshots needed?
- [X] Code Reviewed
- [X] Manual QA

Release Notes:

- Opening files with the Zed CLI will reuse existing windows for remote
workspaces.

John Tur created

aba74e6 git: Fewer buffer diff snapshots (#48886)

Click to expand commit body
Release Notes:

- N/A

---------

Co-authored-by: Jakub Konka <kubkon@jakubkonka.com>

Cole Miller and Jakub Konka created

aa37eda Don't run nix checks on PRs (#48849)

Click to expand commit body
Although this introduces a small possiblity that we will regress the nix
build,
the existing check is very slow and fails very rarely.

Release Notes:

- N/A

Conrad Irwin created

094122a devcontainer: Support `.devcontainer.json` in project root (#48814)

Click to expand commit body
Closes #48683

Per the devcontainer spec, `.devcontainer.json` in the project root is
a valid config location. It is only used when no configurations are
found inside `.devcontainer/`.

Extract `find_configs_in_snapshot` for testability and add tests.

Release Notes:

- Added support for `.devcontainer.json` in project root

Oliver Azevedo Barnes created

191b4cc workspace: Move the update Zed button to the title bar (#48467)

Click to expand commit body
Currently, whenever Zed has a new version available for download, the
update button shows up in the status bar. Problem is: that status bar
slot can also display other buttons/information, such as problems with
your language server or general errors. In case the two things exist (a
problem and a new version), just one of them would be displayed, which
is not great; you should be able to see both. Additionally, given we
ship new versions pretty often, I've frequently saw feedback about
wanting to hide away the new version button... at least temporarily
while there's no immediate interest in upgrading.

So, this PR tackles all of that. The button to update a new version is
moved up to the title bar, nearby your avatar, and you have the ability
to dismiss, which effectively just moves the button from the title bar
to inside your user menu.


https://github.com/user-attachments/assets/e3f1d76d-9b85-4bee-a70f-e22dd5e7fdb3

Release Notes:

- Moved the update Zed button to the title bar and allowed it to be
dismissed.

---------

Co-authored-by: Conrad Irwin <conrad.irwin@gmail.com>

Danilo Leal and Conrad Irwin created

695fcde Canonicalize extension paths (#48632)

Click to expand commit body
Release Notes:

- N/A

Mikayla Maki created

9e1fed3 ep_cli: Include `request_id` in rated events and tag rated examples with experiment name and prompt format (#48883)

Click to expand commit body
Closes #ISSUE

- [ ] Tests or screenshots needed?
- [ ] Code Reviewed
- [ ] Manual QA

Release Notes:

- N/A *or* Added/Fixed/Improved ...

Co-authored-by: Tom <tom@zed.dev>

Ben Kunkle and Tom created

8206521 ep_cli: Add sync deployments command (#48880)

Click to expand commit body
Closes #ISSUE

- [ ] Tests or screenshots needed?
- [ ] Code Reviewed
- [ ] Manual QA

Release Notes:

- N/A *or* Added/Fixed/Improved ...

---------

Co-authored-by: Tom <tom@zed.dev>

Ben Kunkle and Tom created

4b4fb67 Un-feature-flag granular tool permissions (#48881)

Click to expand commit body
The granular tool permissions feature is now generally available, and
this flag is no longer used anywhere.

Release Notes:

- N/A

Richard Feldman created

77df6bf Tool permissions settings UI improvements (#48796)

Click to expand commit body
Various improvements to settings UI for granular tool permissions,
extracted from a larger change:

- Add **copy_path** tool to the permissions configuration list
- Replace local `RuleType` enum with `ToolPermissionMode` from the
settings crate
- Improve rule summary display: singular "1 rule" instead of always "1
rules", show invalid pattern count
- Add **terminal command parsing preview** — uses `extract_commands` to
split chained commands (`&&`, `||`, `;`) so the preview matches the real
permission engine's behavior
- Add **verdict label** showing the authoritative permission decision
(Allow/Deny/Confirm)
- Log disagreements between the pattern preview and the engine's
authoritative verdict
- Display **invalid regex patterns section** with compilation error
details
- Add regex validation error banner (dismissible) on tool config pages
- Add **compile-time validated** `tool_index` for macro-generated render
functions (fails to compile if a tool ID is misspelled)
- Update move_path/copy_path regex explanations for multi-input tools
- Add test validating all tools have `ToolInfo` entries or are in the
exclusion list
- Add `clear_on_confirm()` — clears the input after confirming (used for
"add pattern" inputs)
- Add editor reconciliation fix — when settings change externally (e.g.
editing settings.json), syncs the cached editor text when not focused
- Rename "Configure Tool Rules" → "Tool Permissions" in the settings
sidebar
- Update description text
- Add `regex_validation_error` field to `SettingsWindow` (cleared on
page navigation)

(No release notes because granular tool permissions are behind a feature
flag.)

Release Notes:

- N/A

---------

Co-authored-by: Danilo Leal <daniloleal09@gmail.com>

Richard Feldman and Danilo Leal created

1176c39 ci: Fix builds on Windows following mtime finnickery (#48878)

Click to expand commit body
- **Revert "vim: Make `:bdelete` use new
`workspace::CloseItemInAllPanes` command (#48592)"**
- **Revert "linux: Forward env vars starting with ZED_ to flatpak-spawn
(#48118)"**
- **ci: Fix builds on hel1-windows-1**


- [x] Tests or screenshots needed?
- [x] Code Reviewed
- [x] Manual QA

Release Notes:

- N/A

Piotr Osiewicz created

de7f2f0 Improve performance when detecting JSX auto close (#48622)

Click to expand commit body
Helps #48601

<img width="1649" height="1071" alt="image"
src="https://github.com/user-attachments/assets/ff3dfee0-cc65-430f-a5fa-b4b4c36e8183"
/>


`syntax_layers` does some offset conversion that might require getting
some chunks from the rope, which is quite expensive. For detecting
autoclose, we only use the language from those syntax layers, so having
a short path that skips all the conversion should skip some sum_tree
traversals.
   
I'm pretty sure other places would benefit from this as well, but I
haven't searched them yet.

Release Notes:

- N/A

---------

Co-authored-by: Smit Barmase <heysmitbarmase@gmail.com>

Marco Mihai Condrache and Smit Barmase created

53a0075 terminal: Fix Spawn Task and Agent terminal hangs on macOS (#48877)

Click to expand commit body
Follow-up to #47420 and #44193.

#47420 fixed child-exit status handling via upstream alacritty change
(https://github.com/alacritty/alacritty/pull/8825). However,
stable/preview/nightly builds still reproduced hangs that dev builds did
not.

The root cause matches #44193: spawned children inherit crash-handler
Mach exception ports and hang. We already reset exception ports in
`util::command::new_smol_command` and
`util::set_pre_exec_to_start_new_session`, but PTY child spawning in
`alacritty_terminal` was not covered.

This PR updates `alacritty_terminal` to include PTY `pre_exec`
exception-port reset:

https://github.com/zed-industries/alacritty/commit/9d9640d4e56d67a09d049f9c0a300aae08d4f61e

Upstream:
- https://github.com/alacritty/alacritty/pull/8835

Release Notes:

- Fixed terminal tasks hanging on macOS when a spawned process is killed
by a signal.

Smit Barmase created

4911855 vim: Make `:bdelete` use new `workspace::CloseItemInAllPanes` command (#48592)

Click to expand commit body
Add `workspace::CloseItemInAllPanes` action that closes the active
item's buffer in every pane where it's open, matching Vim's `:bdelete`
semantics. Pane layout is preserved, only the buffer is removed.

`:bd` respects pinned tabs, `:bd!` overrides them and skips save.

Also refactors the tab switcher's close button to use the new
`close_items_with_project_path` method, removing duplicated logic.

Release Notes:

- Vim: `:bd` (`:bdelete`) now closes the file in all panes where it's
open
- Added `workspace::CloseItemInAllPanes` action to close a file across
all panes

---------

Co-authored-by: dino <dinojoaocosta@gmail.com>

David Baldwin and dino created

95890a9 Revert "ci: Restore mtime of source files to the git log time" (#48874)

Click to expand commit body
Reverts zed-industries/zed#48607

The problem we've ran into is that CI started reusing already-cached
runs from newer branches (that did not have that change pulled in).

Yet this unveiled another potential issue, which is that relying on
mtime might make it so that an artifact for a different (newer) commit
would be reused by an unrelated run of CI.

The answer is: checksum-based-freshness.

Release Notes:
- N/A

Piotr Osiewicz created

f7a4fb1 linux: Forward env vars starting with ZED_ to flatpak-spawn (#48118)

Click to expand commit body
Otherwise, it's not easily possible to set *any* of these variables when
running Zed.

Release Notes:

- Added forwarding of `ZED_*` environment variables when using the
Flatpak

refi64 created

7f45408 acp: Only use the resumed cwd if it is in the workspace (#48873)

Click to expand commit body
I think we may want to revisit in the future which history sessions we
show, but given the current setup and behavior, I think it makes sense
to only use the cwd if it matches in the worktrees to avoid issues with
reading and editing files outside of there.

- [x] Tests or screenshots needed?
- [x] Code Reviewed
- [x] Manual QA

Release Notes:

- N/A

Ben Brandt created

8b5328c Bump tree-sitter-go to v0.25.0 (#48870)

Click to expand commit body
Fixes #48357

## Summary

- Bumps `tree-sitter-go` from `0.23` to `0.25`
- This fixes wrong syntax highlighting with chained indexing in Go (e.g.
`a[b][c] = 0` being incorrectly parsed as a type instantiation
expression instead of an index expression)
- The upstream fix
([tree-sitter/tree-sitter-go#160](https://github.com/tree-sitter/tree-sitter-go/issues/160))
landed in v0.25.0, which gives index expressions a higher dynamic
precedence over type instantiation expressions
- Updated `runnables.scm` to account for the new `statement_list` node
that wraps statements inside blocks in tree-sitter-go 0.25

## Test plan

- [x] `cargo test -p languages` — all 47 tests pass
- Verified that existing Go runnables queries (table tests, subtests,
test detection) work with the updated grammar

Release Notes:

- Fixed wrong syntax highlighting with chained indexing in Go (e.g.
`a[b][c]`) by bumping tree-sitter-go to 0.25

MohibShaikh created

13154e1 gpui: Impl `Cow<'static, str>` to `IntoElement` (#48585)

Click to expand commit body
Release Notes:

- N/A

Make this change to let `div().child(...)` support any types that have
impl `Into<SharedString>`, for example: `Cow<'static, str>`.

```rs
// From somewhere get a `Cow<'static, str>` type.
let label = Cow::Borrowed("Hello");

div()
  .child(label);
```

Jason Lee created