Commit log

508b604 project: Try to make git tests less flaky (#32234)

Click to expand commit body
Closes #ISSUE

Release Notes:

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

Ben Kunkle created

3da1de2 Add JSDoc scope (#29476)

Click to expand commit body
This is a small PR that adds a `.jsdoc` scope to JSDoc tokens, just like
[JSX](https://github.com/zed-industries/zed/blob/3fdbc3090d2cc5c2e24014009cccbe5e7c55d217/crates/languages/src/javascript/highlights.scm#L239)
has a specific scope.
This effectively allows differentiating between JavaScript keywords and
JSDoc tags in comments.

Release Notes:

  - Add scope for JSDoc

chbk created

8837e55 Add new terminal hyperlink tests (#28525)

Click to expand commit body
Part of #28238

This PR refactors `FindHyperlink` handling and associated code in
`terminal.rs` into its own file for improved testability, and adds
tests.

Release Notes:

- N/A

Dave Waggoner created

709523b Store profile per thread (#31907)

Click to expand commit body
This allows storing the profile per thread, as well as moving the logic
of which tools are enabled or not to the profile itself.

This makes it much easier to switch between profiles, means there is
less global state being changed on every profile change.

Release Notes:

- agent panel: allow saving the profile per thread

---------

Co-authored-by: Ben Kunkle <ben.kunkle@gmail.com>

Ben Brandt and Ben Kunkle created

7afee64 multi_buffer: Refactor diff_transforms field into a separate struct (#32237)

Click to expand commit body
A minor refactor ~needed to unblock #22546; it's pretty hard to add an
extra field to `diff_transforms` dimension, as it is a 2-tuple (which
uses a blanket impl)

Release Notes:

- N/A

Piotr Osiewicz created

cd0ef4b docs: Add more troubleshooting steps for Windows (#31500)

Click to expand commit body
Release Notes:

- N/A

---------

Co-authored-by: 张小白 <364772080@qq.com>

shenjack and 张小白 created

be6f29c terminal: Use conventional XTerm indexed color values (#32200)

Click to expand commit body
Fixes rendering of colors in the terminal to use XTerm's idiosyncratic standard steps instead of the range that was previously in use. Matches the behavior of Alacritty, Ghostty, iTerm2, and every other terminal emulator I've looked at.

Release Notes:

- Fixed rendering of terminal colors for the XTerm 256-color indexed color palette.

Roland Crosby created

38b8e65 ci: Check for broken links (#30844)

Click to expand commit body
This PR fixes some broken links that where found using
[lychee](https://github.com/lycheeverse/lychee/) as discussed today with
@JosephTLyons and @nathansobo at the RustNL hackathon. Using
[lychee-action](https://github.com/lycheeverse/lychee-action/) we can
scan for broken links daily to prevent issues in the future.
There are still 6 broken links that I didn't know how to fix myself.
See https://github.com/thomas-zahner/zed/actions/runs/15075808232 for
details.

## Missing images

```
Errors in ./docs/src/channels.md

    [ERROR] file:///home/runner/work/zed/zed/docs/.gitbook/assets/channels-3.png | Cannot find file
    [ERROR] file:///home/runner/work/zed/zed/docs/.gitbook/assets/channels-1.png | Cannot find file
    [ERROR] file:///home/runner/work/zed/zed/docs/.gitbook/assets/channels-2.png | Cannot find file
```

These errors are showing up as missing images on
https://zed.dev/docs/channels
I tried to search the git history to see when or why they were deleted
but didn't find anything.

## ./crates/assistant_tools/src/edit_agent/evals/fixtures/zode/prompt.md

There are three errors in that file. I don't fully understand how these
issues were caused historically. Technically it would be possible to
ignore the files but of course if possible we should address the issues.
 
Release Notes:

- N/A

---------

Co-authored-by: Marshall Bowers <git@maxdeviant.com>
Co-authored-by: Ben Kunkle <ben@zed.dev>

Thomas Zahner , Marshall Bowers , and Ben Kunkle created

b8c1b54 language_models: Fix Mistral tool->user message sequence handling (#31736)

Click to expand commit body
Closes #31491

### Problem
Mistral API enforces strict conversation flow requirements that other
providers don't. Specifically, after a `tool` message, the next message
**must** be from the `assistant` role, not `user`. This causes the
error:
```
"Unexpected role 'user' after role 'tool'"
```
This can also occur in normal conversation flow where mistral doesn't
return the assistant message but that is something which can't be
reproduce reliably.

### Root Cause
When users interrupt an ongoing tool call sequence by sending a new
message, we insert a `user` message directly after a `tool` message,
violating Mistral's protocol.

**Expected Mistral flow:**
```
user → assistant (with tool_calls) → tool (results) → assistant (processes results) → user (next input)
```

**What we were doing:**
```
user → assistant (with tool_calls) → tool (results) → user (interruption) ❌
```

### Solution
Insert an empty `assistant` message between any `tool` → `user` sequence
in the Mistral provider's request construction. This satisfies Mistral's
API requirements without affecting other providers or requiring UX
changes.

### Testing
To reproduce the original error:
1. Start agent chat with `codestral-latest`
2. Send: "Describe this project using tool call only"
3. Once tool calls begin, send: "stop this"
4. Main branch: API error
5. This fix: Works correctly

Release Notes:

- Fixed Mistral tool calling in some cases

Umesh Yadav created

c304e96 Display the first keystroke instead of an error for multi-keystroke binding (#31456)

Click to expand commit body
Ideally we would show multi-keystroke binding, but I'd say this improves
over the status quo.

A partial solution to #27334

Release Notes:

- Fixed spurious warning for lack of edit prediction on multi-keystroke
binding

Co-authored-by: Ben Kunkle <ben@zed.dev>

Jakub Sygnowski and Ben Kunkle created

53abad5 Fixed more bugs around moving pinned tabs (#32228)

Click to expand commit body
Closes https://github.com/zed-industries/zed/issues/32199
https://github.com/zed-industries/zed/issues/32229
https://github.com/zed-industries/zed/issues/32230
https://github.com/zed-industries/zed/issues/32232

Release Notes:

- Fixed a bug where if the last tab was a pinned tab and it was dragged
to the right, resulting in a no-op, it would become unpinned
- Fixed a bug where a pinned tab dragged just to the right of the end of
the pinned tab region would become unpinned
- Fixed a bug where dragging a pinned tab from one pane to another
pane's pinned region could result in an existing pinned tab becoming
unpinned when `max_tabs` was reached
- Fixed a bug where moving an unpinned tab to the left, just to the end
of the pinned region, would cause the pinned tabs to become unpinned.

Joseph T. Lyons created

54e64b2 windows: Refactor the current ime implementation (#32224)

Click to expand commit body
Release Notes:

- N/A

张小白 created

ce88540 Add `crates/assistant_tools/src/evals/fixtures` to file_scan_exclusions (#32211)

Click to expand commit body
Particularly got tired of `disable_cursor_blinking/before.rs` (an old
copy of `editor.rs`) showing up in tons of searches

Release Notes:

- N/A

Michael Sloan created

3e8565a Initialize zlog default filters on init rather than waiting for settings load (#32209)

Click to expand commit body
Now immediately initializes the zlog filter even when there isn't an env
config. Before this change the default filters were applied after
settings load - I was seeing some `zbus` logs on init.

Also defaults to allowing warnings and errors from the suppressed log
sources. If these turn out to be chatty (they don't seem to be so far),
can bring back more suppression.

Release Notes:

- N/A

Michael Sloan created

d801b7b Fix `bindings_for_action` handling of shadowed key bindings (#32220)

Click to expand commit body
Fixes two things:

* ~3 months ago [in PR
#26420](https://github.com/zed-industries/zed/pull/26420/files#diff-33b58aa2da03d791c2c4761af6012851b7400e348922d64babe5fd48ac2a8e60)
`bindings_for_action` was changed to return bindings even when they are
shadowed (when the keystrokes would actually do something else).

* For edit prediction keybindings there was some odd behavior where
bindings for `edit_prediction_conflict` were taking precedence over
bindings for `edit_prediction` even when the `edit_prediction_conflict`
predicate didn't match. The workaround for this was #24812. The way it
worked was:

    - List all bindings for the action

- For each binding, get the highest precedence binding with the same
input sequence

- If the highest precedence binding has the same action, include this
binding. This was the bug - this meant that if a binding in the keymap
has the same keystrokes and action it can incorrectly take display
precedence even if its context predicate does not pass.

- Fix is to check that the highest precedence binding is a full match.
To do this efficiently, it's based on an index within the keymap
bindings.

Also adds `highest_precedence_binding_*` variants which avoid the
inefficiency of building lists of bindings just to use the last.

Release Notes:

- Fixed display of keybindings to skip bindings that are shadowed by a
binding that uses the same keystrokes.
- Fixed display of `editor::AcceptEditPrediction` bindings to use the
normal precedence that prioritizes user bindings.

Michael Sloan created

37fa42d windows: Fix a typo in function name (#32223)

Click to expand commit body
Release Notes:

- N/A

张小白 created

5c9b8e8 Move workspace::toast_layer::RunAction to zed_actions::toast::RunAction (#32222)

Click to expand commit body
Cleaner to have references to this be `toast::RunAction` matching how it
appears in the keymap, instead of `workspace::RunAction`.

Release Notes:

- N/A

Michael Sloan created

9660915 Fix typo in assistant_tool.rs (#32207)

Click to expand commit body
Release Notes:

- N/A

Lucas created

e37c78b Refactor some logic in `handle_tab_drop` (#32213)

Click to expand commit body
Tiny little clean up PR after #32184 

Release Notes:

- N/A

Joseph T. Lyons created

920ca68 Display subtle-mode prediction preview when partial accept modifiers held (#32212)

Click to expand commit body
Closes #27567

Release notes covered by the notes for #32193

Release Notes:

- N/A

Michael Sloan created

f62d761 Fix matching braces in jsx/tsx tags (#32196)

Click to expand commit body
Closes #27998

Also fixed an issue where jumping back from closing to opening tags
didn't work in javascript due to missing brackets in our tree-sitter
query.

Release Notes:

- N/A

---------

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

Julia Ryan and Conrad Irwin created

6a8fdbf editor: Add multi cursor support for `AddSelectionAbove`/`AddSelectionBelow` (#32204)

Click to expand commit body
Closes #31648

This PR adds support for:
- Expanding multiple cursors above/below
- Expanding multiple selections above/below
- Adding new cursors/selections when expansion has already been done.
Existing expansions preserve their state and expand/shrink according to
the action, while new cursors/selections act like freshly created ones.

Tests for both cursor and selections:
- below/above cases
- undo/redo cases
- adding new cursors/selections with existing expansion

Before/After:


https://github.com/user-attachments/assets/d2fd556b-8972-4719-bd86-e633d42a1aa3


Release Notes:

- Improved `AddSelectionAbove` and `AddSelectionBelow` to extend
multiple cursors/selections.

Smit Barmase created

711a9e5 x11: Remove logs for mac-os specific `set_edited` and `show_character_palette` (#32203)

Click to expand commit body
Release Notes:

- N/A

Michael Sloan created

6de5d29 Fix caching of Node.js runtime paths and improve error messages (#32198)

Click to expand commit body
* `state.last_options` was never being updated, so the caching wasn't
working.

* If node on the PATH was too old it was logging errors on every
invocation even though managed node is being used.

Release Notes:

- Fixed caching of Node.js runtime paths and improved error messages.

Michael Sloan created

d7015e5 Fix bugs around tab state loss when moving pinned tabs across panes (#32184)

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

In the screenshots: left = nightly, right = dev

Fix 1: A pinned tab dragged into a new split should remain pinned


https://github.com/user-attachments/assets/608a7e10-4ccb-4219-ba81-624298c960b0

Fix 2: Moving a pinned tab from one pane to another should not cause
other pinned tabs to be unpinned


https://github.com/user-attachments/assets/ccc05913-591d-4a43-85bb-3a7164a4d6a8

I also added tests for moving both pinned tabs and unpinned tabs into
existing panes, both into the "pinned" region and the "unpinned" region.

Release Notes:

- Fixed a bug where dragging a pinned tab into a new split would lose
its pinned tab state.
- Fixed a bug where pinned tabs in one pane could be lost when moving
one of the pinned tabs to another pane.

Joseph T. Lyons created

ddf70b3 Add mismatched tag threshold parameter to eval function (#32190)

Click to expand commit body
Replace hardcoded 0.10 threshold with configurable parameter and set
0.05 default for most tests, with 0.2 for from_pixels_constructor
eval that produces more mismatched tags.

Release Notes:

- N/A

Ben Brandt created

8bd8435 Fix default keybindings for `AcceptPartialEditPrediction` to work in subtle mode (#32193)

Click to expand commit body
Closes #27567

Release Notes:

- Fixed default keybindings for `editor::AcceptPartialEditPrediction` to
work with subtle mode.

Co-authored-by: Richard <richard@zed.dev>

Michael Sloan and Richard created

4b297a9 Fix innermost brackets panic (#32120)

Click to expand commit body
Release Notes:

- Fixed a few rare panics that could happen when a multibuffer excerpt
started with expanded deleted content.

Conrad Irwin created

7aa70a4 lsp: Implement support for the `textDocument/diagnostic` command (#19230)

Click to expand commit body
Closes [#13107](https://github.com/zed-industries/zed/issues/13107)

Enabled pull diagnostics by default, for the language servers that
declare support in the corresponding capabilities.

```
"diagnostics": {
    "lsp_pull_diagnostics_debounce_ms": null
}
```
settings can be used to disable the pulling.

Release Notes:

- Added support for the LSP `textDocument/diagnostic` command.

# Brief

This is draft PR that implements the LSP `textDocument/diagnostic`
command. The goal is to receive your feedback and establish further
steps towards fully implementing this command. I tried to re-use
existing method and structures to ensure:

1. The existing functionality works as before
2. There is no interference between the diagnostics sent by a server and
the diagnostics requested by a client.

The current implementation is done via a new LSP command
`GetDocumentDiagnostics` that is sent when a buffer is saved and when a
buffer is edited. There is a new method called `pull_diagnostic` that is
called for such events. It has debounce to ensure we don't spam a server
with commands every time the buffer is edited. Probably, we don't need
the debounce when the buffer is saved.

All in all, the goal is basically to get your feedback and ensure I am
on the right track. Thanks!


## References

1.
https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_pullDiagnostics

## In action

You can clone any Ruby repo since the `ruby-lsp` supports the pull
diagnostics only.

Steps to reproduce:

1. Clone this repo https://github.com/vitallium/stimulus-lsp-error-zed
2. Install Ruby (via `asdf` or `mise).
4. Install Ruby gems via `bundle install`
5. Install Ruby LSP with `gem install ruby-lsp`
6. Check out this PR and build Zed
7. Open any file and start editing to see diagnostics in realtime.



https://github.com/user-attachments/assets/0ef6ec41-e4fa-4539-8f2c-6be0d8be4129

---------

Co-authored-by: Kirill Bulatov <mail4score@gmail.com>
Co-authored-by: Kirill Bulatov <kirill@zed.dev>

Vitaly Slobodin , Kirill Bulatov , and Kirill Bulatov created

04cd3fc google: Add latest versions of Gemini 2.5 Pro and Flash Preview (#32183)

Click to expand commit body
Release Notes:

- Added the latest versions of Gemini 2.5 Pro and Flash Preview

Oleksiy Syvokon created

d15d858 snippets: Fix tabstop completion choices (#31955)

Click to expand commit body
I'm not sure when snippet tabstop choices broke, I checked the parent of
#31872 and they also don't work before that.

Release Notes:

- N/A

Michael Sloan created

ccc173e Fix "j" key latency in vim mode with "j k" keymap (#31163)

Click to expand commit body
Problem:
Initial keymap has "j k" keymap, which if uncommented will add +-1s
delay to every "j" key press
This workaround was taken from
https://github.com/zed-industries/zed/discussions/6661

Release Notes:

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

---------

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

VladKopylets and Michael Sloan created

03a030f Add default method for `CompletionProvider::resolve_completions` (#32045)

Click to expand commit body
Release Notes:

- N/A

Michael Sloan created

894f3b9 Make a test no longer `pub` (#32177)

Click to expand commit body
I spotted this while working on something else. Very quick fix!

Release Notes:

- N/A

Richard Feldman created

f36143a debugger: Run locators on LSP tasks for the new process modal (#32097)

Click to expand commit body
- [x] pass LSP tasks into list_debug_scenarios
- [x] load LSP tasks only once for both modals
- [x] align ordering
- [x] improve appearance of LSP debug task icons
- [ ] reconsider how `add_current_language_tasks` works
- [ ] add a test

Release Notes:

- Debugger Beta: Added debuggable LSP tasks to the "Debug" tab of the
new process modal.

---------

Co-authored-by: Anthony Eid <hello@anthonyeid.me>

Cole Miller and Anthony Eid created

8730d31 themes: Swap ANSI white with ANSI black (#32175)

Click to expand commit body
Here’s how it looks after the fix:
![colors](https://github.com/user-attachments/assets/11c78ad6-da50-4aad-b133-9be5e3844878).
White is white and black is black, as intended.

In some cases, dimmed colors were poorly defined, so I took
`text.dimmed` values.

Note that white is defined exactly as the background color for light
themes. Similarly, black is the exact background color for dark themes.
I didn’t change this, but many themes intentionally make white and black
slightly different from the background color. This prevents issues where
programs assume, say, a dark background and set the foreground to white,
making text invisible. I'm not sure if we want to adjust these themes to
address this; just noting it here.


Closes #29379 

Release Notes:

- Fixed ANSI black and ANSI white colors in built-in themes

Oleksiy Syvokon created

783b33b git: Rewrap commit messages just before committing instead of interactively (#32114)

Click to expand commit body
Closes #27508 

Release Notes:

- Fixed unintuitive wrapping behavior when editing Git commit messages.

Cole Miller created

28da99c anthropic: Fix error when attaching multiple images (#32092)

Click to expand commit body
Closes #31438

Release Notes:

- agent: Fixed an edge case were the request would fail when using
Claude and multiple images were attached

---------

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

Bennet Bo Fenner and Richard Feldman created

d2c265c debugger: Change some text in the launch tab (#32170)

Click to expand commit body
I think using `Debugger Program` and `~/bin/debugger` here makes it seem
like that field is for specifying the path to the debugger itself, and
not the program being debugged.

Release Notes:

- N/A

Cole Miller created

bbd431a Build `zed-remote-server` on FreeBSD (#29561)

Click to expand commit body
Builds freebsd-remote-server under qemu working on linux runners.

Release Notes:

- Initial support for ssh remotes running FreeBSD x86_64

Peter Tripp created

5b9d3ea windows: Only call `TranslateMessage` when we can't handle the event (#32166)

Click to expand commit body
This PR improves key handling on Windows by moving the
`TranslateMessage` call from the message loop to after we handled
`WM_KEYDOWN`. This brings Windows behavior more in line with macOS and
gives us finer control over key events. As a result, Vim keybindings now
work properly even when an IME is active. The trade-off is that it might
introduce a slight delay in text input.


Release Notes:

- N/A

张小白 created

738cfdf gpui: Simplify u8 to u32 conversion (#32099)

Click to expand commit body
Removes an allocation when converting four u8 into a u32.
Makes some functions const compatible.

Release Notes:

- N/A

tidely created

32d5a2c debugger: Fix wrong variant of new process modal deployed (#32168)

Click to expand commit body
I think this was added back when the `Launch` variant meant what we now
call `Debug`

Release Notes:

- N/A

Cole Miller created

dda6140 eval: Add eval unit tests as a CI job (#32152)

Click to expand commit body
We run the unit evals once a day in the middle of the night, and trigger
a Slack post if it fails.


Release Notes:

- N/A

---------

Co-authored-by: Oleksiy Syvokon <oleksiy.syvokon@gmail.com>

Ben Brandt and Oleksiy Syvokon created

fa9da6a Fix typo (#32160)

Click to expand commit body
Release Notes:

- N/A

Hans created

d082cfd lsp: Fix language servers not starting up on save (#32156)

Click to expand commit body
Closes #24349

Release Notes:

- Fixed language servers not starting up when a buffer is saved.

---------

Co-authored-by: 张小白 <364772080@qq.com>

Piotr Osiewicz and 张小白 created

c71791d windows: Fix Japanese IME (#32153)

Click to expand commit body
Fixed an issue where pressing `Escape` wouldn’t clear all pre-edit text
when using Japanese IME.


Release Notes:

- N/A

张小白 created

244d851 Fix Unexpected Console Window When Running Zed Release Build (#32144)

Click to expand commit body
The commit #31073 had introduced `zed-main.rs`, which replaced the
previous `main.rs` to be the "true" entry of the whole program. But as
the macro `#![cfg_attr(not(debug_assertions), windows_subsystem =
"windows")]` only works in the "true" entry, the release build will also
arise the console window if this macro doesn't move to the new entry
(the `zed-main.rs` here).


Release Notes:

- N/A

InfyniteHeap created

3884de9 assistant: Partial fix for HTML entities in tools params (#32148)

Click to expand commit body
This problem seems to be specific to Opus 4. Eval shows improvement from
89% to 97%.

Closes: https://github.com/zed-industries/zed/issues/32060

Release Notes:

- N/A

Co-authored-by: Ben Brandt <benjamin.j.brandt@gmail.com>

Oleksiy Syvokon and Ben Brandt created

8af984a Have tools respect private and excluded file settings (#32036)

Click to expand commit body
Based on a Slack conversation with @notpeter - this prevents secrets in
private/excluded files from being sent by the agent to third parties for
tools that don't require confirmation.

Of course, the agent can still use the terminal tool or MCP to access
these, but those require confirmation before they run (unlike these
tools).

This change doesn't seem to cause any trouble for evals:

<img width="730" alt="Screenshot 2025-06-03 at 8 48 33 PM"
src="https://github.com/user-attachments/assets/d90221be-f946-4af2-b57b-4aa047e86853"
/>


Release Notes:

- N/A

Richard Feldman created