Commit Graph
38289 Commits
Author SHA1 Message Date
Lukas Wirthandsaberoueslati 84ebc5be71 Correctly handle file links in markdown and agent threads (#56024)
Closes https://github.com/zed-industries/zed/issues/54840

There are likely more places we can use this new workspace function in,
but these are the known ones to me right now

Release Notes:

- Fixed file hyperlinks in the agent panel not opening files when
clicked

Co-authored-by: saberoueslati <saberoueslati12@gmail.com>
2026-06-05 11:17:44 +00:00
Liigo Zhuang b7b5d0c1a0 Agent: Improved auto scroll location when using read-file tool (#58640)
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
- [ ] Performance impact has been considered and is acceptable

Closes #58612

Release Notes:

- Agent: Improved auto scroll location when using read-file tool.
2026-06-05 11:01:48 +00:00
Lukas Wirth f18a0e6fe4 Restore the focused workspace after quitting (#58392)
On quit, the handler activates every workspace in each window to surface
save prompts. Activating re-serializes the multi-workspace state, so the
persisted active_workspace_id ended up pointing at whichever workspace
was iterated last rather than the one the user had focused. On the next
launch the wrong (or empty) workspace was restored as active, even
though all projects still appeared in Open Recent.

Re-activate the originally-focused workspace after the close-prompt loop
(and on the cancel-quit path) so it is the one serialized as active.
Also harden read_serialized_multi_workspaces to prefer a workspace with
paths over a scratch/empty one when the persisted active workspace can't
be matched.

Release Notes:

- Fixed a workspace restoration issue where zed would restore a window
with none of its projects opened by default
2026-06-05 10:44:39 +00:00
Lukas Wirth 6ca46fcf2c project: Normalize line endings in textual project search (#58628)
Release Notes:

- Fixed an issue with project search on windows where multiline string
searches would not work correctly due to newline differences
2026-06-05 10:44:29 +00:00
Lukas Wirth 2d18262735 Prevent auto-restart of language servers after Stop All Servers (#51468)
Release Notes:

- When stopping all language servers, Zed will now no longer restart
language servers when language files change until the user restarts all
language servers explicitly
2026-06-05 10:36:03 +00:00
Lukas Wirthandzed-zippy[bot] 6e471ec777 Use no-op hasher for TypeId hashing (#58629)
TypeId is effectively already a hash, so re-hashing it with fxhash is
unnecessary.

Release Notes:

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

---------

Co-authored-by: zed-zippy[bot] <234243425+zed-zippy[bot]@users.noreply.github.com>
2026-06-05 10:32:57 +00:00
Lena 0db7bf3941 Add meta signals to the community PR board (#58635)
For the ease of finding something that fits the time that reviewers have
and for making it mechanically easier to prioritize the PRs from the
community champions, surface some meta information on the PR board (and
make it updatable). Meta information here means things like size and
whether there's an issue linked to the PR (and what is its type if there
is).

Release Notes:

- N/A
2026-06-05 10:16:52 +00:00
Ben Brandt 21df82d5a4 acp: Support raw agent registry binaries (#58579)
It is valid to have raw binary paths in the registry but we didn't
handle them.

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: Fix for certain ACP Registry agent downloads not starting
2026-06-05 09:26:19 +00:00
Justin SuandYara 🏳️‍⚧️ b45344df51 Add envrc to Shell Script path_suffixes (#58573)
direnv's .envrc files are just Bash scripts.

---

Self-Review Checklist:

- [x] 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:

- Detect .envrc files as Shell Script

Co-authored-by: Yara 🏳️‍⚧️ <git@yara.blue>
2026-06-05 09:17:31 +00:00
Chintan 6687ddac65 project_panel: Do not ignore first focus clicks on items (#58562)
When handling click events on entries in project panel, we were
returning early if the click was the one that brought the Zed window
into focus. This effectively ignored the click action on the item. This
leads to two clicks being required to act on an item in the project
panel if the Zed window is out of focus. The existing behaviour is also
inconsistent with other UI controls, where clicking on them when the
window is out of focus actually acts upon them.

This behaviour was introduced in
https://github.com/zed-industries/zed/pull/9553.

This PR fixes the click handler on the entries so that events with
`first_focus() == true` are no longer ignored.

Before:


https://github.com/user-attachments/assets/d51ec11d-c47a-4ea3-af6d-63bf6daf3c44

After:


https://github.com/user-attachments/assets/87b9e6a8-9ef0-463f-8557-e15d25b519ca

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
- [ ] Performance impact has been considered and is acceptable

Closes #58261 

Release Notes:

- Fixed project panel needing a second click to change the file if the
window is not in focus
2026-06-05 09:03:35 +00:00
Shuhei KadowakiandOleksiy Syvokon 552b6a5dc4 editor: Don't bypass show_edit_predictions when navigating diagnostics (#56055)
`go_to_diagnostic_impl` was calling `refresh_edit_prediction(false,
true)` with `user_requested = true`, which skips the
`should_show_edit_predictions` check inside `refresh_edit_prediction`
(`crates/editor/src/editor.rs`).

As a result, navigating between diagnostics in a buffer where the user
has set `show_edit_predictions: false` would still trigger
`EditPredictionProvider::refresh`. With the Zed provider this fans out
into many `textDocument/definition` and `textDocument/typeDefinition`
LSP requests for every identifier near the cursor
(`RelatedExcerptStore::fetch_excerpts`), which is surprising for users
who have explicitly disabled edit predictions for that language.

Jumping to a diagnostic is a navigation action, not a request for an
edit prediction, so pass `user_requested = false` and enable debouncing
here.

Release Notes:

- Fixed diagnostic navigation triggering unnecessary LSP requests when
edit predictions are disabled.

Co-authored-by: Oleksiy Syvokon <oleksiy@zed.dev>
2026-06-05 08:50:44 +00:00
Tianze Zhao 439d0bf281 Fix symlinked root rename event handling (#58624)
Fixes #58619.

When a worktree is opened through a symlinked root, filesystem events
can arrive rooted at either the opened symlink path or the canonical
target path. The worktree event processing path already handled
canonical target paths, but dropped events reported under the opened
symlink root because it only derived relative paths from the canonical
root.

This PR adds a regression test that opens `/link -> /target`, renames
`/link/subdir-a` to `/link/subdir-aa`, and verifies
`subdir-aa/config.ini` remains visible in the worktree. The production
fix accepts event paths under the opened worktree root as a fallback
when deriving relative paths.

Testing:

- Verified the new regression test fails with only the test commit
applied.
- `cargo test -p worktree --test integration
test_renaming_subdir_under_symlinked_root_keeps_children`
- `cargo test -p worktree --test integration
test_symlinks_pointing_outside`
2026-06-05 08:23:17 +00:00
Dino 27cdd42f8a editor: Reduce number of language server requests in go to definition (#58429)
These changes are a follow-up to #58244. That PR changed how Zed sends
`textDocument/definition` requests so that, once the language server has
answered for a given position, Zed doesn't re-query that same position
as the mouse jiggles within the same character, avoiding spamming the
server on every tiny mouse movement.

This PR adds two more cases on top of that:

**1. Preserve the deduplication state when the server returns an empty
response**

* Previously, an empty response called `Editor::hide_hovered_link`,
which sets `Editor::hovered_link_state` to `None`, discarding the
recorded `HoveredLinkState::last_trigger_point`.
* We now clear `HoveredLinkState::links` instead, resetting the links
while keeping `last_trigger_point`, so we don't re-query the same
position when the response was empty.

**2. Fall back to the surrounding word as the symbol range for no-origin
servers**

* The `editor::hover_links::show_link_definition` function already used
`surrounding_word` to pick the highlight range when the server returned
no symbol range.
* For servers that return a link (or links) but no
`originSelectionRange`, we now also treat that `surrounding_word` range
as the symbol range, so moving across characters of the same symbol will
not re-query the language server.
* There's caveat to this approach, for a language where something like
`run_function` is not a single symbol/node, if the server returns a
response for one character, we won't re-query for the others in
`run_function`, even if the server would have returned something
different for `_` or `function`. I believe this should be rare, can't
think of a language where this would be an issue, but I'm happy to
revisit or drop this part if we decide it's not worth it.

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:

- Improve go to definition in order to avoid repeatedly querying the
language server while moving the mouse over the same symbol or an
unresolved position
2026-06-05 07:37:56 +00:00
Bennet Bo FennerandDanilo Leal a5046c3c8f agent_ui: Improve thread import UX (#57791)
<img width="439" height="292" alt="image"
src="https://github.com/user-attachments/assets/90a39458-1ec5-4c73-922e-21cab8aa5a51"
/>

Release Notes:

- agent: Improved UX of agent import flow

---------

Co-authored-by: Danilo Leal <daniloleal09@gmail.com>
2026-06-05 07:18:05 +00:00
Lukas Wirth d1c2d42518 Speed up collab test a bit by doing less repeated work in multi iteration tests (#53490)
Release Notes:

- N/A or Added/Fixed/Improved ...
2026-06-05 07:14:12 +00:00
Richard Feldman a1667ee81a Handle bracketed ellipsis title prefixes (#58269)
Terminal thread title prefixes now strip surrounding brackets before
condensing leading dots, so bracketed ellipsis prefixes render with the
same ellipsis icon as unbracketed prefixes.

Release Notes:

- Improved terminal thread icons for bracketed ellipsis title prefixes
2026-06-05 05:14:28 +00:00
Joseph T. Lyons 4d4890012c Add auto-surround support for tilde in Markdown (#58614)
This enables you to easily add strikethroughs to text you have selected
by typing `~` twice.
This matches VS Code's behavior.

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 support for surrounding selected Markdown text with `~` by
typing `~`
2026-06-05 03:26:15 +00:00
Joseph T. Lyons 24f4b66fa6 Add action to toggle block quotes in Markdown (#58383)
This PR adds an action to toggle block quotes on and off for the
selected lines while in Markdown. I'm using my own binding in the demo
video, this PR does not bind it to anything.


https://github.com/user-attachments/assets/5c1f4121-e863-459d-8a9b-8eefdbfb888e

When there's a mixture of quoted and "unquoted" lines, we normalize to
quoted:


https://github.com/user-attachments/assets/ca003844-0c4f-4cae-a7d0-a9d355258f2d

While adding this, I noticed that `editor.rs` had been through some
refactoring in order to reduce its size. Because of this, I introduced
`markdown_actions.rs`, as I intend to follow up with some other markdown
toggling actions (eg: `markdown: toggle bold`, `markdown: toggle
italic`, etc.)

The implementation reuses the existing `manipulate_mutable_lines` code
that all line manipulating actions run through.

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:

- Added a `markdown: toggle block quote` action
2026-06-04 23:34:13 +00:00
Chris Biscardi fb8da5b73d Remove double-click handling from git panel filenames (#58594)
Previously in the git panel, double clicking a filename would trigger
both the first-click action *and* the second-click action.

This PR removes the second click handling since we don't have a good
pattern for single-and-double-click handling.

### Before



https://github.com/user-attachments/assets/f03e53ae-a330-4f60-812d-a45a2d3f5f30

### After



https://github.com/user-attachments/assets/e09493a1-6477-4d43-80ea-26322dd1f083




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-06-04 22:59:00 +00:00
Ben Kunkle acdef5d09b ep: Improve trigger granularity (#58561)
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 #ISSUE

Release Notes:

- N/A or Added/Fixed/Improved ...
2026-06-04 22:52:29 +00:00
Cole Miller 252b52e83f Fix some overcomputation in the project diff (#57859)
- Don't emit unnecessary edited events from the multibuffer when setting
excerpts is a no-op
- Limit excerpt recomputation in the project diff when diffs or
conflicts change to just the affected buffer
- Ignore diff events in the project diff that can't affect excerpt
boundaries

Also includes some drive-by improvements to the handling of merge
conflicts:
- Await initial conflicts parse when opening a conflict set (like
diffs), so we don't see an initial incorrect "no conflicts" state
- Make the project diff subscribe to conflicts directly instead of
indirecting through the editor (also like diffs)
- Instead of saving the affected buffer when resolving a conflict, just
avoid re-registering dirty buffers with the project diff, so that
excerpts for conflicts don't disappear quite so eagerly (once more: like
diffs)

The combination of these changes greatly cuts down the amount of time
spent syncing the `DisplayMap`, which is especially bad for the split
view.

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:

- Improved the performance of the project diff, especially in the
presence of merge conflicts
- Fixed conflicts disappearing too quickly from the project diff when
editing
- Fixed conflicts sometimes taking a while to appear in the project diff
during large merges
2026-06-04 21:54:03 +00:00
Kunall Banerjee 5b864275f2 grammars: Stop treating fish modelines as Shell Script (#58550)
Bash listed `fish` in `modeline_aliases`, so a `filetype=fish` modeline
resolved to Shell Script before the real [Fish
language](https://zed.dev/extensions/fish) could match by name or
grammar. Fish is intentionally non-POSIX, so the Bash grammar is the
wrong fit here.

| Header | After |
|--------|--------|
| <img width="1912" height="1237" alt="image"
src="https://github.com/user-attachments/assets/ed212a24-92aa-4ede-a432-47c6c6724f08"
/> | <img width="1732" height="1125" alt="image"
src="https://github.com/user-attachments/assets/934140b3-9473-4cca-a3e5-84aa3c4d827a"
/> |

Self-Review Checklist:

- [x] 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

Closes #58532.

Release Notes:

- Dropped `fish` from `modeline_aliases` which forced the file to be
detected as Shell Script instead of Fish
2026-06-04 21:48:52 +00:00
raptorandKunall Banerjee 6c631bc5e1 docs: Clarify Project Search runs on Enter (#58545)
This PR fixes the Project Search documentation to clarify that search is
triggered upon pressing Enter.

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/zed-industries/zed/issues/58509

Release Notes:

- N/A

---------

Co-authored-by: Kunall Banerjee <hey@kimchiii.space>
2026-06-04 21:25:58 +00:00
Finn Evers 2af91f782f Add note about extension API changes to the contributing guidelines (#58369)
Release Notes:

- N/A
2026-06-04 20:50:01 +00:00
Oleksiy Syvokon dbe17e6360 ep: Minor changes to evaluate context retrieval (#58572)
- Track average size of the retrieved context
- Support comma-separated values for `ep context --type`
- Exclude oracle from `editable` preset


Release Notes:

- N/A
2026-06-04 18:22:46 +00:00
MartinYe1234 cfa58e5a8c Restore access to old threads that mention rules (#58560)
Removing the `Rule` variant from `MentionUri` in #58080 broke
deserialization of any thread saved before the rules-to-skills
migration. Loading one failed with `unknown variant `Rule``, making
those threads inaccessible.

This restores access without bringing back the rules feature:

- Reintroduce a backward-compatible `Rule` mention variant so legacy
threads deserialize again.
- Preserve the original rule `id` through save/load so a thread re-saved
by a newer build still loads on older Zed versions (and synthesize a
valid placeholder when the id is missing).
- Clicking a legacy rule mention now opens the skill the rule was
migrated into, and shows a notification linking the Skills docs. On
remote/collab projects the migrated file lives on the local machine, so
it opens as a read-only buffer. If no matching skill exists, it does
nothing.

Closes https://github.com/zed-industries/zed/issues/58498
Closes AI-371

Release Notes:

- Fixed old threads that mention Rules being inaccessible after Rules
were migrated to Skills
2026-06-04 16:53:09 +00:00
Danilo Leal aec2574706 worktree_picker: Add section for open in this window (#58555)
This PR adds a "This Window" section to the worktree picker that's
similar to the one that exists in the recent projects modal. This is
particularly helpful when, for a given project group/repository, you
have more than one worktree loaded, allowing you to more easily switch
between them.

<img width="600" alt="Screenshot 2026-06-04 at 12  53@2x"
src="https://github.com/user-attachments/assets/53a8fcdb-9c34-4b2a-b34e-9bdcad6c040e"
/>

Release Notes:

- Improved worktree navigation UX when a given project has more than one
loaded.
2026-06-04 16:16:38 +00:00
Zhiwei Liang 23decdeebf Refresh OpenRouter models after setting API key (#58551)
Self-Review Checklist:

- [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)
- [ ] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

## Summary

Adding an OpenRouter API key did not populate the model list until the
app was
restarted. `set_api_key` stored the credential but never triggered a
model
fetch, so until re-authentication happened (on restart or a settings
change)
the picker showed only the user-configured `settings.available_models`,
not the
models returned by the OpenRouter API.

This makes `set_api_key` refresh the models right after the key is
stored,
mirroring how `authenticate` already does it.

## Changes

- `set_api_key` awaits the credential store and then calls
`restart_fetch_models_task`, so the API model list loads immediately
after a
  key is entered (and is cleared when the key is removed).
- `fetch_models` now maps `list_models` errors via
`LanguageModelCompletionError::from`, preserving the real OpenRouter
error
  message instead of wrapping it in a generic `Other(...)`.

Release Notes:

- Fixed OpenRouter models not appearing until restart after adding an
API key

Signed-off-by: Zhiwei Liang <zhiwei.liang@zliang.me>
2026-06-04 16:03:35 +00:00
morgankrey 3d700c5042 Restructure AI docs (#57614)
## Summary

- Restructures the AI docs around quick routing, agent paths, provider
access, and company-specific entry points.
- Moves account-owned AI billing/model pages into Account & Billing
while preserving legacy AI redirects.
- Adds focused pages for Zed Agent, external agents, terminal threads,
agent profiles, skills, instructions, API access, subscriptions,
gateways, and local models.
- Updates related links across Git, authentication, business, migration,
and settings reference docs.

## Validation

- `pnpm dlx prettier@3.5.0 . --write`
- `pnpm dlx prettier@3.5.0 . --check`
- `git diff --check -- docs/src`
- Changed-doc local markdown link sanity check
- `mdbook build docs` was attempted; it is currently blocked by an
unrelated existing `docs/src/vim.md:542` action schema error for
`vim::HelixJumpToWord`.

## Follow-up

- Create a ticket to align Zed's in-app AI configuration surfaces with
this documentation model, including Agent Settings, Configure buttons,
Tools, Profiles, MCP, Skills/Instructions, and plain settings.

## Suggested .rules additions

N/A

Release Notes:

- N/A
2026-06-04 15:55:21 +00:00
Marshall Bowers ca91e34701 collab: Remove writes to github_user_id and github_login (#58474)
This PR removes writes to the `github_user_id` and `github_login`
columns on the `users` table.

These writes were only being done in tests, as the production codepaths
that referenced these columns have already been removed.

Depends on https://github.com/zed-industries/cloud/pull/2743 to make the
`github_user_id` column nullable.

The corresponding database schema migration has been created in the
Cloud repo and applied to the production database.

Closes CLO-831.

Release Notes:

- N/A
2026-06-04 15:43:03 +00:00
Smit Barmase 93b08ef699 editor: Fix panic on newline below with a cursor on deleted diff hunk (#58542)
Closes FR-62

Release Notes:

- Fixed crash on newline below with a cursor on a deleted line of a
diff.
2026-06-04 15:39:18 +00:00
MartinYe1234 da7945aeae Hide Always Allow option for agent skills edits (#58463)
Edits targeting the agent skills directory (project `.agents/skills/`
and global `~/.agents/skills/`) always prompt regardless of permission
settings, because they route through `authorize_always_prompt` which
never consults the persisted `always_allow` rules.

The permission prompt still rendered an "Always allow" button, though.
Clicking it wrote an `always_allow` rule into settings that was then
silently ignored on the next skills edit, so users were re-prompted
every time despite having chosen "always allow" — exactly the confusion
reported in AI-346.

This keeps the always-prompt behavior intact and just hides the
misleading "Always allow" / "Always deny" options for skills, leaving
once-only Allow/Deny. Applies to all mutating skills tools: `edit_file`,
`write_file`, `copy_path`, `move_path`, `delete_path`, and
`create_directory`.

Implementation:
- New `ToolPermissionScope::AgentSkills`, set via
`ToolPermissionContext::for_agent_skills()`.
- `build_permission_options` returns flat once-only Allow/Deny for that
scope (mirrors the existing `SymlinkTarget` handling).
- Wired into both authorization entry points (`authorize_file_edit` and
`authorize_with_sensitive_settings`).
- Tests assert no `AllowAlways` option is offered for each affected
tool.

Settings-file prompts (`.zed/settings.json`, global config) are
intentionally left unchanged.

Closes AI-346

Release Notes:

- Removed the misleading "Always allow" button from agent permission
prompts for edits to the agent skills directory, since those edits
always require confirmation.
2026-06-04 15:39:02 +00:00
Joseph T. Lyons 4f844b5684 Rename Stash tab to Stashes (#58505)
This PR unifies the naming of the tabs in the branch selector by
updating `stash` to `stashes` (to match `branches`). Also updates the
enum variant to match the label.

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-06-04 15:29:35 +00:00
Oleksiy Syvokon cb4d052d38 ep: Add BM25 context retriever (#58526)
Release Notes:

- N/A
2026-06-04 15:26:06 +00:00
Anant GoelandBen Brandt 5f2eba257d agent: Accumulate and persist cumulative token usage for threads (#58378)
`Thread::cumulative_token_usage` has been dead code since the agent2
rewrite: the field was added as a persistence placeholder in #36483 with
`#[allow(unused)]`, and the accumulation logic was deleted along with
agent1 in #40495. Since then, every saved thread persists
`cumulative_token_usage` as `{}` in `threads.db`, breaking offline
token-usage analysis and silently degrading eval reporting (`eval_cli`
prefers this value and was always falling back to the last request's
snapshot, undercounting multi-step turns).

This PR restores the accumulation, mirroring the original agent1
implementation:

- Providers emit multiple cumulative-per-request `UsageUpdate` snapshots
during a single request, so naive `+=` would double-count. We track the
previous snapshot for the in-flight request
(`current_request_token_usage`) and accumulate only the delta, resetting
the tracker each time a new completion request is built in
`run_turn_internal`. This counts each request exactly once, including
tool-call rounds and retries within a turn.
- Unlike agent1, the delta uses per-field `saturating_sub` instead of
the panicking `Sub` impl, so a provider reporting a smaller snapshot
can't crash Zed.
- Removed the `#[allow(unused)]`; the value now round-trips through
`to_db`/`from_db`, surviving restarts and continuing to grow when a
thread is reopened.
- Added a `cumulative_token_usage()` accessor following the
`latest_request_token_usage` convention.

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: Ben Brandt <benjamin.j.brandt@gmail.com>
2026-06-04 15:24:02 +00:00
Oleksiy Syvokon 05f6f164a3 ep: Cap identifiers for LSP context retriever (#58539)
Release Notes:

- N/A
2026-06-04 14:30:21 +00:00
Sathwik ChirivelliandYara 🏳️‍⚧️ 3306edbfe9 git_ui: Disable CommitView diff hunk controls (#58514)
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 #ISSUE

Release Notes:

- Fixed a bug where diff hunk controls were being displayed in the
non-editable commit view multibuffer.

Co-authored-by: Yara 🏳️‍⚧️ <git@yara.blue>
2026-06-04 12:55:44 +00:00
Oleksiy Syvokon df06ea0ad1 Fix infinite loop when inferring outline body range (#58536)
This test would cause an infinite loop without the fix.

Closes #53298 and #54069

Release Notes:

- Fixed high CPU usage when using Zeta in some cases (thanks
@clupprich!)
2026-06-04 12:26:03 +00:00
Smit Barmase 618be0d8f0 agent_ui: Fix panic when restoring an agent terminal in a remote project (#58533)
Closes FR-61

To reproduce:
- you should be on a remote project
- terminal’s working directory is set to home

Release Notes:

- Fixed a crash that could occur when restoring an agent terminal in a
remote project.
2026-06-04 12:11:17 +00:00
Zhiwei Liang 806adec3b8 Fix lost error messages when listing OpenRouter models (#58502)
Self-Review Checklist:

- [x] 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

`list_models` reads the response body once up front, then the error
branch read it
*again* into a shadowing `body`. Since the stream was already drained,
the second read
returned `""`, so error parsing always failed and we surfaced an empty
message instead
of the real API error.

This removes the redundant second read so the error branch uses the body
we already have.

Release Notes:

- Fixed OpenRouter API errors showing empty messages when fetching the
model list

Signed-off-by: Zhiwei Liang <zhiwei.liang@zliang.me>
2026-06-04 11:18:14 +00:00
Finn Evers 87a767c60a extension_api: Remove x86 support (#58259)
This PR drops the `Architecture::x86` variant within the extension API. 

Reason for this being that 
- Zed itself is not shipped for 32 bit and thus this variant is never
actually constructed
- we don't support a Node runtime in 32 bit environments
- basically all language and context servers do not ship 32 bit variants

Thus, this PR removes support for this variant, as currently, extension
authors always have to return an error for the missing 32 bit support of
their binaries. With this, this will no longer be needed.

Lastly, this removes one space of too much indentation I found whilst
doing these changes. Very visible in the GitHub UI luckily.

Release Notes:

- Removed support for extensions downloading language servers, debuggers
and MCP servers on 32-bit architecture. Extensions may still work if you
manually specify a path to an appropriate binary, but will not succeed
when attempting to download a binary based on the current systems 32-bit
architecture.
2026-06-04 11:01:48 +00:00
Oleksiy Syvokon c849e580b4 ep: Add an option to filter context by type when evaluating (#58523)
This allows us to collect all context once, and evaluate subsets of it
later.

Closes #ISSUE

Release Notes:

- N/A
2026-06-04 10:02:05 +00:00
Oleksiy Syvokon c8ec0f834c ep: Skip commits containing submodules / gitlinks (#58519)
We were not resolving them, so doing anything with such commit failed.


Release Notes:

- N/A
2026-06-04 09:05:19 +00:00
Albert BoguszandMrSubidubi 9aa0082ff6 Hide markdown code block scrollbar when wrapped (#58472)
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

Follow up of #57312. Hides the scrollbar (which does not do anything)
when markdown code blocks are wrapped.

Release Notes:

- Fixed the scrollbar on wrapped code blocks in the agent chat.

(As far as I can see the wrap button only exists in the agent chat and
not regular markdown previews.)

---------

Co-authored-by: MrSubidubi <finn@zed.dev>
2026-06-04 08:01:09 +00:00
Finn Evers 4e03fa51f2 Disable csharp-ls by default (#58507)
In preparation for https://github.com/zed-extensions/csharp/pull/77

Release Notes:

- N/A
2026-06-04 07:31:41 +00:00
saberoueslati 81687c98ae tab_switcher: Show full file names without truncation (#58483)
## Context

The tab switcher was truncating file names at the same 24-character
limit (`MAX_TAB_TITLE_LEN`) used by the narrow tab bar. This made files
that share a long common prefix, like `test_cpp_file_long_name.h` and
`test_cpp_file_long_name.cpp`, render identically, with both becoming
`test_cpp_file_long_name.…`.

The fix adds a `max_title_len: Option<usize>` field to
`TabContentParams`. When `None` (the default, used by the tab bar),
`Editor::tab_content` falls back to `MAX_TAB_TITLE_LEN` as before. The
tab switcher passes `Some(usize::MAX)`, which skips truncation entirely
and lets the UI container constrain the displayed text naturally.

Closes #58461

## How to Review

- **`crates/workspace/src/item.rs`** : Adds `max_title_len:
Option<usize>` to `TabContentParams`. Derives `Default` so `None` is the
zero-cost default; two existing struct literals in `pane.rs` that
couldn't use `..Default::default()` were updated to be explicit.
- **`crates/editor/src/items.rs`** : In `Editor::tab_content`, both the
title label and the description path now use
`params.max_title_len.unwrap_or(MAX_TAB_TITLE_LEN)` instead of the
hardcoded constant.
- **`crates/workspace/src/pane.rs`** : Two `TabContentParams` struct
literals updated to include `max_title_len: None`, preserving the
existing 24-char tab bar behaviour.
- **`crates/tab_switcher/src/tab_switcher.rs`** : Sets `max_title_len:
Some(usize::MAX)` in `render_match`, opting the tab switcher out of
truncation.

Video of the manual test below :
Used the same names of the files in the issue but also longer ones to
showcase the behavior in different file lengths :

[Screencast from 2026-06-04
00-08-02.webm](https://github.com/user-attachments/assets/5f388257-2f3d-494c-ab50-bf46496dbd38)

I'm obviously open to discussing this further specially the new
truncation behavior of the file with the longest name in the manual
test.

## 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
- [ ] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

Release Notes:

- Fixed tab switcher truncating long file names, making files with a
shared prefix indistinguishable
2026-06-04 05:21:56 +00:00
Floyd Wang 32d512acdb gpui: Fix cursor styles not applying to panel-backed windows (#58493)
`set_active_window_cursor_style` only matched `WINDOW_CLASS` (used by
`WindowKind::Normal`). Panel-backed windows
(`Floating`/`Dialog`/`PopUp`) use the sibling `PANEL_CLASS`, so the
check failed for them: a focused panel fell through to `mainWindow`,
applying the cursor to the wrong window and leaving `cursor_pointer()`
with no visible effect.

Add an `is_gpui_window` helper that accepts both classes (both carry
`WINDOW_STATE_IVAR`) and use it to resolve the active window.

### Before


https://github.com/user-attachments/assets/f1bf820e-7af8-44f2-bfcd-d51e60706454

### After


https://github.com/user-attachments/assets/d4fa319d-029d-4516-922e-70ed753fa90a

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)
- [x] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable
2026-06-04 03:37:52 +00:00
Mayank Verma fcc4a6aaa3 gpui: Make tooltip show delay configurable (#58291)
Self-Review Checklist:

- [x] 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)
- [x] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

Release Notes:

- N/A

This adds a `tooltip_show_delay(Duration)` API so callers can override
the default 500ms delay.
2026-06-04 03:15:36 +00:00
Roméo Maignal 7d250ab2e5 tab_switcher: Select first buffer in the list when a query is enabled (#58424)
…tered (#58420)

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 #58420

Release Notes:
- Reset `selected_index` to 0 whenever the query goes from empty to
non-empty, ensuring the first (best) fuzzy match is always highlighted
when the user starts typing.
- This is handled in `update_matches()` and `update_all_pane_matches()`
by checking whether the query is empty before applying the reset.
2026-06-04 03:05:21 +00:00
Danilo Leal db1be11a42 sidebar: Ensure plus icon button stays visible when menu is open (#58482)
Similar treatment to the ellipsis menu, where we keep the icon button
that triggers the menu visible, so we know where the menu is anchored
to. This was missing from a recent PR where we improved the drafts UX.

Release Notes:

- N/A
2026-06-03 23:23:01 +00:00