Commit log

1b91f3d acp: Fix accidentally reverted thread view changes (#36825)

Click to expand commit body
Merge conflict resolution for #36741 accidentally reverted the changes
in #36670 to allow expanding terminals individually and in #36675 to
allow collapsing edit cards. This PR re-applies those changes, fixing
the regression.

Release Notes:

- N/A

Cole Miller created

1976479 acp: Animate loading context creases (#36814)

Click to expand commit body
- Add pulsating animation for context creases while they're loading
- Add spinner in message editors (replacing send button) during the
window where sending has been requested, but we haven't finished loading
the message contents to send to the model
- During the same window, ignore further send requests, so we don't end
up sending the same message twice if you mash enter while loading is in
progress
- Wait for context to load before rewinding the thread when sending an
edited past message, avoiding an empty-looking state during the same
window

Release Notes:

- N/A

Cole Miller created

d49409c docs: Update settings in diagnostics.md (#36806)

Click to expand commit body
For project_panel, the diagnostics key seems to be `show_diagnostics`
not `diagnostics`
([source](https://github.com/zed-industries/zed/blob/main/crates/project_panel/src/project_panel_settings.rs#L149-L152)).
Updating the docs accordingly

Release Notes:

- N/A

itsaphel created

60ea475 project: Fix dynamic registration for textDocument/documentColor (#36807)

Click to expand commit body
From:
https://github.com/microsoft/vscode-languageserver-node/blob/d90a87f9557a0df9142cfb33e251cfa6fe27d970/protocol/src/common/protocol.colorProvider.ts#L50

Release Notes:

- N/A

Smit Barmase created

61bc1cc acp: Support launching custom agent servers (#36805)

Click to expand commit body
It's enough to add this to your settings:

```json
{
    "agent_servers": {
        "Name Of Your Agent": {
            "command": "/path/to/custom/agent",
            "args": ["arguments", "that", "you", "want"],
        }
    }
}
```

Release Notes:

- N/A

Antonio Scandurra created

70575d1 Remove redundant Cargo diagnostics settings (#36795)

Click to expand commit body
Removes `diagnostics.cargo.fetch_cargo_diagnostics` settings as those
are not needed for the flycheck diagnostics to run.
This setting disabled `checkOnSave` in rust-analyzer and allowed to
update diagnostics via flycheck in the project diagnostics editor with
the "refresh" button.

Instead, `"checkOnSave": false,` can be set manually as
https://zed.dev/docs/languages/rust#more-server-configuration example
shows and flycheck commands can be called manually from anywhere,
including the diagnostics panel, to refresh the diagnostics.

Release Notes:

- Removed redundant `diagnostics.cargo.fetch_cargo_diagnostics` settings

Kirill Bulatov created

ea42013 acp: Eagerly load all kinds of mentions (#36741)

Click to expand commit body
This PR makes it so that all kinds of @-mentions start loading their
context as soon as they are confirmed. Previously, we were waiting to
load the context for file, symbol, selection, and rule mentions until
the user's message was sent. By kicking off loading immediately for
these kinds of context, we can support adding selections from unsaved
buffers, and we make the semantics of @-mentions more consistent.

Loading all kinds of context eagerly also makes it possible to simplify
the structure of the MentionSet and the code around it. Now MentionSet
is just a single hash map, all the management of creases happens in a
uniform way in `MessageEditor::confirm_completion`, and the helper
methods for loading different kinds of context are much more focused and
orthogonal.

Release Notes:

- N/A

---------

Co-authored-by: Conrad <conrad@zed.dev>

Cole Miller and Conrad created

5da31fd acp: Remove ACP v0 (#36785)

Click to expand commit body
We had a few people confused about why some features weren't working due
to the fallback logic.

It's gone.

Release Notes:

- N/A

Conrad Irwin created

f48a8f2 thread view: Simplify tool call & improve required auth state UIs (#36783)

Click to expand commit body
Release Notes:

- N/A

Danilo Leal created

d24cad3 Be more lenient when dealing with rust-analyzer's flycheck commands (#36782)

Click to expand commit body
Flycheck commands are global and makes sense to fall back to looking up
project's rust-analyzer even if the commands are run on a non-rust
buffer. If multiple rust-analyzers are found in the project, avoid
ambiguous commands and bail (as before).

Closes #ISSUE

Release Notes:

- Made it possible to run rust-analyzer's flycheck actions from anywhere
in the project

Kirill Bulatov created

153724a Clean up handling of serialized ssh connection ids (#36781)

Click to expand commit body
Small follow-up to #36714

Release Notes:

- N/A

Max Brunsfeld created

bc566fe agent2: Tweak usage callout border (#36777)

Click to expand commit body
Release Notes:

- N/A

Bennet Bo Fenner created

91b2a84 Add a few more testing features (#36778)

Click to expand commit body
Release Notes:

- N/A

---------

Co-authored-by: Marshall <marshall@zed.dev>

Mikayla Maki and Marshall created

e6267c4 Ensure `pane: swap item right` does not panic (#36765)

Click to expand commit body
This fixes a panic I randomly ran into whilst mistyping in the command
palette: I accidentally ran `pane: swap item right`in a state where no
items were opened in my active pane. We were checking for `index + 1 ==
self.items.len()` there when it really should be `>=`, as otherwise in
the case of no items this panics.

This PR fixes the bug, adds a test for both the panic as well as the
actions themselves (they were untested previously). Lastly (and mostly),
this also cleans up a bit around existing actions to update them with
how we generally handle actions now.

Release Notes:

- Fixed a panic that could occur with the `pane: swap item right`
action.

Finn Evers created

f649c31 Restructure persistence of remote workspaces to make room for WSL and other non-ssh remote projects (#36714)

Click to expand commit body
This is another pure refactor, to prepare for adding direct WSL support.

###  Todo

* [x] Represent `paths` in the same way for all workspaces, instead of
having a completely separate SSH representation
* [x] Adjust sqlite tables
    * [x] `ssh_projects` -> `ssh_connections` (drop paths)
    * [x] `workspaces.local_paths` -> `paths`
    * [x] remove duplicate path columns on `workspaces`
* [x] Add migrations for backward-compatibility

Release Notes:

- N/A

---------

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

Max Brunsfeld and Mikayla Maki created

639417c thread_view: Adjust empty state and error displays (#36774)

Click to expand commit body
Also changes the message editor placeholder depending on the agent.

Release Notes:

- N/A

---------

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

Danilo Leal and Conrad Irwin created

896a35f Capture `shorthand_field_initializer` and modules in Rust highlights (#35842)

Click to expand commit body
Currently shorthand field initializers are not captured the same way as
the full initializers, leading to awkward and mismatching highlighting.
This PR addresses this fact, in addition to capturing new highlights:
- Tags the `!` as part of a macro invocation.
- Tags the identifier part of a lifetime as `@lifetime`.
- Tag module definitions as a new capture group, `@module`.
- Shorthand initializers are now properly tagged as `@property`.

Here's what the current version of Zed looks like:

<img width="596" height="683" alt="image"
src="https://github.com/user-attachments/assets/c9e52d8e-03dc-426b-8545-4fe872b803e0"
/>

With the new highlighting applied:

<img width="596" height="683" alt="image"
src="https://github.com/user-attachments/assets/b7bd9391-9910-456b-8198-6871174d0f4f"
/>

Release Notes:

- Improved highlighting of Rust files, including new highlight groups
for modules and shorthand initializers.

Jonathan Andersson created

4560d1e Use a better message for the InvalidBufferView (#36770)

Click to expand commit body
Follow-up of https://github.com/zed-industries/zed/pull/36764

Release Notes:

- N/A

Kirill Bulatov created

18ac4ac ACP debug tools pane (#36768)

Click to expand commit body
Adds a new "acp: open debug tools" action that opens a new workspace
item with a log of ACP messages for the active connection.

Release Notes:

- N/A

Agus Zubiaga created

72bd248 editor: Fix multi buffer header context menu not handling absolute paths (#36769)

Click to expand commit body
Release Notes:

- N/A

Lukas Wirth created

42ae330 Show file open error view instead of the modal (#36764)

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

Before:
either 
<img width="966" height="642" alt="image"
src="https://github.com/user-attachments/assets/7263ea3c-3d48-4f4d-be9e-16b24ca6f60b"
/>
(when opening from the project panel)

or

<img width="959" height="1019" alt="image"
src="https://github.com/user-attachments/assets/834041d4-f4d6-46db-b333-803169ec4803"
/>

(for the rest of the cases)

After:

<img width="2032" height="1167" alt="Screenshot 2025-08-22 at 19 34 10"
src="https://github.com/user-attachments/assets/1aa4530b-69f6-4c3a-8ea1-d4035dbb28da"
/>

(the unified error view)

Release Notes:

- Improved unsupported file opening in Zed

---------

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

Kirill Bulatov and Conrad Irwin created

eb0f9dd themes: Implement Bright Black and Bright White colors (#36761)

Click to expand commit body
Before:
<img width="356" height="50" alt="image"
src="https://github.com/user-attachments/assets/c4f4ae53-8820-4f22-b306-2e5062cfe552"
/>

After:
<img width="340" height="41" alt="image"
src="https://github.com/user-attachments/assets/8e69d9dc-5640-4e41-845d-f299fc5954e3"
/>


Release Notes:

- Fixed ANSI Bright Black and Bright White colors

Oleksiy Syvokon created

ac9fdaa onboarding: Improve Windows/Linux keyboard shortcuts; example ligature (#36712)

Click to expand commit body
Small fixes to onboarding.
Correct ligature example.
Replace`ctrl-escape` and `alt-tab` since they are reserved on windows
(and often on linux) and so are caught by the OS.

Release Notes:

- N/A

Peter Tripp created

8204ef1 onboarding: Remove accept AI ToS from within Zed (#36612)

Click to expand commit body
Users now accept ToS from Zed's website when they sign in to Zed the
first time. So it's no longer possible that a signed in account could
not have accepted the ToS.


Release Notes:

- N/A

---------

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

Anthony Eid and Mikayla Maki created

3d2fa72 Make word completions less intrusive (#36745)

Click to expand commit body
Introduce `min_words_query_len` threshold for automatic word completion
display, and set it to 3 by default.

Re-enable word completions in Markdown and Plaintext.

Release Notes:

- Introduced `min_words_query_len` threshold for automatic word
completion display, and set it to 3 by default to make them less
intrusive

Kirill Bulatov created

92bbcde workspace: Do not prompt for hanging up current call when replacing last visible project (#36697)

Click to expand commit body
This fixes a bug where in order to open a new project in a call (even if
it's not shared), you need to hang up.


Release Notes:

- N/A

Piotr Osiewicz created

54df43e Fix cursor movement in protected files on backspace/delete (#36753)

Click to expand commit body
## Summary

Fixes cursor movement behavior in protected files (like Default
Settings) when pressing backspace or delete keys.

Previously, these keys would cause unwanted cursor movement instead of
being ignored as expected in read-only files.

## Changes

- Added read-only checks to `backspace()` and `delete()` methods in the
editor
- Consistent with existing pattern used by other editing methods
(`indent()`, `outdent()`, `undo()`, etc.)

## Test Plan

1. Open Default Settings in Zed
2. Place cursor at arbitrary position (not at start/end of file)  
3. Press backspace - cursor should remain in place (no movement)
4. Press delete - cursor should remain in place (no movement)

Fixes #36302

Release Notes:

- Fixed backspace and delete keys moving caret in protected files

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

Sarah Price and Claude created

4f0fad6 acp: Support calling tools provided by MCP servers (#36752)

Click to expand commit body
Release Notes:

- N/A

Antonio Scandurra created

3b7c174 thread view: Add more UI improvements (#36750)

Click to expand commit body
Release Notes:

- N/A

Danilo Leal created

27a26d5 thread view: Inform when editing previous messages is unavailable (#36727)

Click to expand commit body
Release Notes:

- N/A

Danilo Leal created

d88fd00 acp: Fix panic with edit file tool (#36732)

Click to expand commit body
We had a frequent panic when the agent was using our edit file tool. The
root cause was that we were constructing a `BufferDiff` with
`BufferDiff::new`, then calling `set_base_text`, but not waiting for
that asynchronous operation to finish. This means there was a window of
time where the diff's base text was set to the initial value of
`""`--that's not a problem in itself, but it was possible for us to call
`PendingDiff::update` during that window, which calls
`BufferDiff::update_diff`, which calls
`BufferDiffSnapshot::new_with_base_buffer`, which takes two arguments
`base_text` and `base_text_snapshot` that are supposed to represent the
same text. We were getting the first of those arguments from the
`base_text` field of `PendingDiff`, which is set immediately to the
target base text without waiting for `BufferDiff::set_base_text` to run
to completion; and the second from the `BufferDiff` itself, which still
has the empty base text during that window.

As a result of that mismatch, we could end up adding `DeletedHunk` diff
transforms to the multibuffer for the diff card even though the
multibuffer's base text was empty, ultimately leading to a panic very
far away in rendering code.

I've fixed this by adding a new `BufferDiff` constructor for the case
where the buffer contents and the base text are (initially) the same,
like for the diff cards, and so we don't need an async diff calculation.
I also added a debug assertion to catch the basic issue here earlier,
when `BufferDiffSnapshot::new_with_base_buffer` is called with two base
texts that don't match.

Release Notes:

- N/A

---------

Co-authored-by: Conrad <conrad@zed.dev>

Cole Miller and Conrad created

f4ba799 acp: Fix history search (#36734)

Click to expand commit body
Release Notes:

- N/A

Conrad Irwin created

e360691 telemetry: Add panel button clicked event (#36735)

Click to expand commit body
The event has two fields

1. name: The name of the panel being clicked
2. toggle_state: true if clicking to open, otherwise false

cc @katie-z-geer 

Release Notes:

- N/A

Anthony Eid created

b349a8f ai: Auto select user model when there's no default (#36722)

Click to expand commit body
This PR identifies automatic configuration options that users can select
from the agent panel. If no default provider is set in their settings,
the PR defaults to the first recommended option. Additionally, it
updates the selected provider for a thread when a user changes the
default provider through the settings file, if the thread hasn't had any
queries yet.

Release Notes:

- agent: automatically select a language model provider if there's no
user set provider.

---------

Co-authored-by: Michael Sloan <michael@zed.dev>

Anthony Eid and Michael Sloan created

e15856a Move APCA contrast from terminal_view to ui utils (#36731)

Click to expand commit body
In prep for using this in the editor search/select highlighting. 

Release Notes:

- N/A

Smit Barmase created

8524394 vim: Fix cursor jumping past empty lines with inlay hints in visual mode (#35757)

Click to expand commit body
**Summary**

Fixes #29134 - Visual mode cursor incorrectly jumps past empty lines
that contain inlay hints (type hints).

**Problem**

When in VIM visual mode, pressing j to move down from a longer line to
an empty line that contains an inlay hint would cause the cursor to skip
the empty line entirely and jump to the next line. This only occurred
when moving down (not up) and only in visual mode.

**Root Cause**

The issue was introduced by commit f9ee28db5e which added bias-based
navigation for handling multi-line inlay hints. When using Bias::Right
while moving down, the clipping logic would place the cursor past the
inlay hint, causing it to jump to the next line.

**Solution**
Added logic in up_down_buffer_rows to detect when clipping would place
the cursor within an inlay hint position. When detected, it uses the
buffer column position instead of the display column to avoid jumping
past the hint.

**Testing**

- Added comprehensive test case
test_visual_mode_with_inlay_hints_on_empty_line that reproduces the
exact scenario
- Manually verified the fix with the reproduction case from the issue
- All 356 tests pass with `cargo test -p vim`

**Release Notes:**
- Fixed VIM visual mode cursor jumping past empty lines with type hints
when navigating down

Adam Mulvany created

f5fd4ac vim: Implement partial increment/decrement for visual selection (#36553)

Click to expand commit body
This change adds the ability to increment / decrement numbers that are
part of a visual selection. Previously Zed would resolve to the entire
number under visual selection for increment as oppposed to only
incrementing the part of the number that is selected

Release Notes: 

- vim: Fixed increment/decrement in visual mode

Kaem created

e1a96b6 acp: Tool name prep (#36726)

Click to expand commit body
Prep work for deduping tool names

Release Notes:

- N/A

Ben Brandt created

ca139b7 keymap_ui: Improve conflict resolution for semantically equal contexts (#36204)

Click to expand commit body
Closes #ISSUE

Creates a function named `normalized_ctx_eq` that compares
`gpui::KeybindContextPredicate`'s while taking into account the
associativity of the binary operators. This function is now used to
compare context predicates in the keymap editor, greatly improving the
number of cases caught by our overloading and conflict detection

Release Notes:

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

Ben Kunkle created

eeaadc0 Add GPU info to Sentry crashes (#36624)

Click to expand commit body
Closes #ISSUE

Adds system GPU collection to crash reporting. Currently this is Linux
only.

The system GPUs are determined by reading the `/sys/class/drm` directory
structure, rather than using the exisiting `gpui::Window::gpu_specs()`
method in order to gather more information, and so that the GPU context
is not dependent on Vulkan context initialization (i.e. we still get GPU
info when Zed fails to start because Vulkan failed to initialize).

Unfortunately, the `blade` APIs do not support querying which GPU _will_
be used, so we do not know which GPU was attempted to be used when
Vulkan context initialization fails, however, when Vulkan initialization
succeeds, we send a message to the crash handler containing the result
of `gpui::Window::gpu_specs()` to include the "Active" gpu in any crash
report that may occur

Release Notes:

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

Ben Kunkle created

18fe68d thread view: Add small refinements to tool call UI (#36723)

Click to expand commit body
Release Notes:

- N/A

Danilo Leal created

a977fbc Document project_panel.sticky_scroll (#36721)

Click to expand commit body
Hat tip to: @watercubz in
https://github.com/zed-industries/zed/issues/22869#issuecomment-3183850576

Release Notes:

- N/A

Peter Tripp created

06c0e59 Make tab switcher show preview of selected tab (#36718)

Click to expand commit body
Similar to nvim's telescope this makes it easier to find the right tab
in the list.

The preview takes place in the pane where the tab resides.
- on dismiss: We restore all panes.
- on confirm: We restore all panes except the one where the selected tab
resides. For this reason we collect the active item for each pane before
the tabswither starts.

Release Notes:

- Improved tab switcher, it now shows a preview of the selected tab

Co-authored-by: Julia Ryan <juliaryan3.14@gmail.com>

David Kleingeld and Julia Ryan created

0beb919 acp: Fix `MessageEditor::set_message` for sent messages (#36715)

Click to expand commit body
The `PromptCapabilities` introduced in previous PRs were only getting
set on the main message editor and not for the editors in user messages.
This caused a bug where mentions would disappear after resending the
message, and for the completion provider to be limited to files.

Release Notes:

- N/A

Agus Zubiaga created

20a0c3e Disable minidump generation on dev builds (again) (#36716)

Click to expand commit body
We accidentally deleted this in #36267

Release Notes:

- N/A

Julia Ryan created

731b5d0 acp: Allow editing of thread titles in agent2 (#36706)

Click to expand commit body
Release Notes:

- N/A

---------

Co-authored-by: Richard Feldman <oss@rtfeldman.com>

Antonio Scandurra and Richard Feldman created

555692f thread view: Add improvements to the UI (#36680)

Click to expand commit body
Release Notes:

- N/A

Danilo Leal created

2234f91 acp: Remove invalid creases on edit (#36708)

Click to expand commit body
Release Notes:

- N/A

Co-authored-by: Bennet Bo Fenner <bennetbo@gmx.de>

Agus Zubiaga and Bennet Bo Fenner created

725ed5d acp: Hide loading diff animation for external agents and update in place (#36699)

Click to expand commit body
The loading diff animation can be jarring for external agents because
they stream the diff at the same time the tool call is pushed, so it's
only displayed while we're asynchronously calculating the diff. We'll
now only show it for the native agent.

Also, we'll now only update the diff when it changes, which avoids
unnecessarily hiding it for a few frames.

Release Notes:

- N/A

Co-authored-by: Bennet Bo Fenner <bennetbo@gmx.de>

Agus Zubiaga and Bennet Bo Fenner created

d0583ed acp: Move ignored integration tests behind e2e flag (#36711)

Click to expand commit body
Release Notes:

- N/A

Ben Brandt created