9c737d2
ep: Add new prompt format and fix token budget rounding
Click to expand commit body
Add V0316SeedMultiRegions, a variant of V0306 that:
1. Doesn't have an explicit NO_EDITS token
2. Doesn't use git conflict markers
3. Writes all intermediate markers
(<|marker_3|>...<|marker_4_|>...<|marker_5|>)
This makes it simpler and hopefully more speculative decoding friendly.
[WIP] The agent found a bug that has to be validated:
The new format exposed an existing bug in prompt budget tracking:
estimate_tokens (floor division by 3) was applied independently to each
component, and the accumulated rounding errors could cause the assembled
prompt to exceed max_tokens. V0316's marker tags made the cursor section
just large enough to push the total over the 4096-token limit.
Fix the budget tracking in format_edit_history_within_budget,
format_related_files_within_budget, and assemble_fim_prompt to use
byte-level accounting internally, eliminating the rounding accumulation.
The same fix is applied to the non-seed-coder budget path in
format_prompt_with_budget_for_format.
Oleksiy Syvokon
created
2a7bd84
audio: Remove unbounded input queue in favor of 1-element queue (#51647)
Click to expand commit body
Co-authored-by: Jakub Konka <kubkon@jakubkonka.com>
Closes #ISSUE
Before you mark this PR as ready for review, make sure that you have:
- [ ] Added a solid test coverage and/or screenshots from doing manual
testing
- [ ] Done a self-review taking into account security and performance
aspects
- [ ] Aligned any UI changes with the [UI
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
Release Notes:
- Improve recovery of audio latency after CPU-intensive period.
Co-authored-by: Jakub Konka <kubkon@jakubkonka.com>
Piotr Osiewicz
and
Jakub Konka
created
357ee0f
vim: Fix helix select next match panic when search wraps around (#51642)
Click to expand commit body
Fixes ZED-4YP
Sort and deduplicate anchor ranges in do_helix_select before passing
them to select_anchor_ranges. When the search wraps past the end of the
document back to the beginning, the new selection is at a lower offset
than the accumulated prior selections, producing unsorted anchors that
crash the rope cursor with 'cannot summarize backward'.
Release Notes:
- Fixed a panic in helix mode with search selecting wrapping around the
document end
Lukas Wirth
created
923b512
vim: Fix dot repeat ignoring recorded register (#50753)
Click to expand commit body
When a command used an explicit register (e.g. `"_dd` or `"add`), the
subsequent dot repeat (`.`) was ignoring that register and using the
default instead.
Store the register at recording start in `recording_register_for_dot`,
persist it to `recorded_register_for_dot` when recording stops, and
restore it in `Vim::repeat` when no explicit register is supplied for
`.`. An explicit register on `.` (e.g. `"b.`) still takes precedence.
This commit also updates the dot-repeat logic to closely follow Neovim's
when using numbered registers, where each dot repeat increments the
register. For example, after using `"1p`, using `.` will repeat the
command using `"2p`, `"3p`, etc.
Closes #49867
Release Notes:
- Fixed vim's repeat . to preserve the register the recorded command
used
- Updated vim's repeat . to increment the recorded register when using
numbered registers
---------
Co-authored-by: dino <dinojoaocosta@gmail.com>
Finn Eitreim
and
dino
created
949944a
editor: Fix jumbled auto-imports when completing with multiple cursors (#50320)
Click to expand commit body
When accepting an autocomplete suggestion with multiple active cursors
using `CMD+D`, Zed applies the primary completion edit to all cursors.
However, the overlap check for LSP `additionalTextEdits` only verifies
the replace range of the newest cursor.
If user has a cursor inside an existing import statement at the top of
the file and another cursor further down, Zed fails to detect the
overlap at the top of the file. When the user auto-completes the import
statement ends up jumbled.
This fix updates the completion logic to calculate the commit ranges for
all active cursors and passes them to the LSP store. The overlap check
now iterates over all commit ranges to ensure auto-imports are correctly
discarded if they intersect with any of the user's multi-cursor edits.
Closes https://github.com/zed-industries/zed/issues/50314
### Before
https://github.com/user-attachments/assets/8d0f71ec-37ab-4714-a318-897d9ee5e56b
### After
https://github.com/user-attachments/assets/4c978167-3065-48c0-bc3c-547a2dd22ac3
Before you mark this PR as ready for review, make sure that you have:
- [x] Added a solid test coverage and/or screenshots from doing manual
testing
- [x] Done a self-review taking into account security and performance
aspects
- [x] Aligned any UI changes with the [UI
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
Release Notes:
- Fixed an issue where accepting an autocomplete suggestion with
multiple cursors could result in duplicated or jumbled text in import
statements.
Atchyut Preetham Pulavarthi
created
be4d38a
livekit: Use our build of libwebrtc.a (#51433)
Click to expand commit body
Closes #51339
This should address issues with too new libstdc++.so on older/more
conservative distros such as RHEL9.
Release Notes:
- Relaxed requirement for libstdc++.so available on Linux distros.
Causes releases on windows to fail due to unused imports
Release Notes:
- N/A *or* Added/Fixed/Improved ...
Lukas Wirth
created
ebd80d7
buffer_diff: Fix panic when staging hunks with stale buffer snapshot (#51641)
Click to expand commit body
When the buffer is edited after the diff is computed but before staging,
anchor positions shift while diff_base_byte_range values don't. If the
primary (HEAD) hunk extends past the unstaged (index) hunk, an edit in
the extension region causes the overshoot calculation to produce an
index_end that exceeds index_text.len(), panicking in
rope::Cursor::suffix.
Fix by clamping index_end to index_text.len(). This is safe because the
computed index text is an optimistic approximation — the real staging
happens at the filesystem level via git add/git reset.
Closes ZED-5R2
Release Notes:
- Fixed a source of panics when staging diff hunks
Lukas Wirth
created
a93c66e
markdown_preview: Prevent stackoverflows in markdown parsing (#51637)
Click to expand commit body
Fixes ZED-5TR
Release Notes:
- Fixed a stack overflow when parsing deeply nested html in markdown
files
Lukas Wirth
created
e5a69d8
lsp: Add clangd readonly token modifier to semantic token rules to highlight constant variables as constant (#49065)
Click to expand commit body
Clangd uses the "readonly" token modifier instead of "constant".
Therefore, "readonly" should be mapped to highlight constant variables
as constants.
Before:
<img width="706" height="48" alt="before"
src="https://github.com/user-attachments/assets/8cc2a310-7825-490b-b868-58ea231612fa"
/>
After:
<img width="762" height="46" alt="after"
src="https://github.com/user-attachments/assets/e271d4cd-cc59-45f9-a8b4-2885857915db"
/>
- [x] Code Reviewed
- [x] Manual QA
Release Notes:
- Added clangd readonly token modifier to semantic token rules to
highlight constant variables as constant.
Co-authored-by: ozacod <ozacod@users.noreply.github.com>
Closes #46307
Before you mark this PR as ready for review, make sure that you have:
- [ ] Added a solid test coverage and/or screenshots from doing manual
testing
- [X] Done a self-review taking into account security and performance
aspects
- [ ] Aligned any UI changes with the [UI
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
Release Notes:
- Improved compatibility with mounted VHDs on Windows.
---------
Co-authored-by: John Tur <john-tur@outlook.com>
Alex Mihaiuc
and
John Tur
created
8a7daea
ep: Ensure prompt is always within token limit (#51529)
e482301
http_client: Fix GitHub downloads failing if the destination path exists (#51548)
Click to expand commit body
cc
https://github.com/zed-industries/zed/pull/45428#issuecomment-4060334728
Release Notes:
- N/A *or* Added/Fixed/Improved ...
Lukas Wirth
created
e79429b
agent_ui: Add more UI refinements to sidebar (#51545)
Click to expand commit body
- Move archive button to the header for simplicity
- Hook up the delete button in the archive view
- Improve how titles are displayed before summary is generated
- Hook up keybinding for deleting threads in both the sidebar and
archive view
Release Notes:
- N/A
Danilo Leal
created
80acfff
which-key: Removed some keys from the filter list that were wrongly filtered (#51543)
Click to expand commit body
Closes #49845
Follow up on #50992
Really simple, just removing some vim commands from the filter list that
are useful enough to justify not being filtered out.
tested to make sure the changes work:
<img width="944" height="1123" alt="Screenshot 2026-03-13 at 11 23
52 PM"
src="https://github.com/user-attachments/assets/23b2db73-d0e7-413b-aef7-efe62e84b542"
/>
Before you mark this PR as ready for review, make sure that you have:
- [x] Added a solid test coverage and/or screenshots from doing manual
testing
- [x] Done a self-review taking into account security and performance
aspects
- [x] Aligned any UI changes with the [UI
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
Release Notes:
- which-key: fixed filter list for some vim commands
There is no highlight for block quotes continued on multiple lines
Currently, the ">" on lines 2 and 3 are not highlighted in the same way
as line 1
<img width="291" height="73" alt="image"
src="https://github.com/user-attachments/assets/7a2f2e25-6ee1-40a6-8833-f06ca7ee6ba9"
/>
After this PR,
<img width="249" height="75" alt="image"
src="https://github.com/user-attachments/assets/34a2971f-8061-4d92-ac45-a8043d5d0566"
/>
for this input
```md
> abcd
>
> abcd
```
tree-sitter produces this
```
(document [0, 0] - [3, 0]
(section [0, 0] - [3, 0]
(block_quote [0, 0] - [3, 0]
(block_quote_marker [0, 0] - [0, 2])
(paragraph [0, 2] - [1, 1]
(inline [0, 2] - [0, 6])
(block_continuation [1, 0] - [1, 1]))
(block_continuation [2, 0] - [2, 2])
(paragraph [2, 2] - [3, 0]
(inline [2, 2] - [2, 6])))))
```
the screenshots in #43043 also show this issue
Release Notes:
- Fixed highlighting of block quotes continued over multiple lines in
markdown files
Kurian Jojo
created
2b39fba
agent_ui: Mask API key input in Add LLM provider modal (#50379)
ee8ecfa
language_models: Make subscription text exhaustive (#51524)
Click to expand commit body
Closes CLO-493.
Release Notes:
- N/A
Neel
created
8fc880e
ep: Ensure predictions are not refreshed while following (#51489)
Click to expand commit body
Release Notes:
- N/A
Ben Kunkle
created
0ccdd9b
agent_ui: Auto-expand and then collapse thinking blocks (#51525)
Click to expand commit body
With these newer models that come with different thinking levels, it's
become more frequent to want to see what the thinking is outputting.
Thus far in Zed, the thinking block would show up automatically
collapsed and every time you wanted to see it, you had to expand it
manually. This PR changes that by making the thinking block
automatically _expanded_ instead, but as soon as it's done, it collapses
again.
Release Notes:
- Agent: Improved visibility of thinking blocks by making them
auto-expanded while in progress.
Danilo Leal
created
b63a2ab
agent_ui: Fix new thread in location setting renderer and flag (#51527)
Click to expand commit body
Follow up to https://github.com/zed-industries/zed/pull/51384
This PR fixes the settings UI rendering of this setting by adding a
default value and also wraps it in the feature flag (only the settings
UI rendering), given it's not widely available just yet.
Release Notes:
- N/A
Danilo Leal
created
165c033
seo: Expand /docs/ai/tools examples + cross-link from external-agents (#49758)
Click to expand commit body
Two changes to support pushing `/docs/ai/tools` into the top 10 for
"agent tools" (8,900 monthly volume, currently position 11).
**`docs/src/ai/tools.md`** — adds a concrete usage example to 7 tools:
`diagnostics`, `grep`, `fetch`, `edit_file`, `terminal`, `web_search`,
and `subagent`. Each example shows a realistic scenario rather than
restating the description.
**`docs/src/ai/external-agents.md`** — adds a single sentence
cross-linking to `tools.md` after the supported-agents intro paragraph,
for users who land on that page looking for what the built-in agent can
do.
Katie Geer
created
db362f5
extension_ci: Use proper PR description for main repository (#51519)
This PR bumps the version of the GLSL extension to v0.2.1.
Release Notes:
- N/A
Co-authored-by: zed-zippy[bot] <234243425+zed-zippy[bot]@users.noreply.github.com>
zed-zippy[bot]
and
zed-zippy[bot]
created
fe7fa37
gpui_macos: Skip IME for Cmd+key events on non-QWERTY layouts (#51394)
Click to expand commit body
Closes #51297
On non-QWERTY layouts, all Cmd+key events are routed through the macOS
IME because `key_char` is always `None` when Cmd is held. For certain
characters (dead keys like backtick, and non-dead keys like ç), the IME
calls `insertText:` instead of `doCommandBySelector:`, consuming the
event before it reaches GPUI's keybinding system or macOS system
shortcuts.
This adds `!platform` to the IME-path condition in `handle_key_event` so
Cmd+key events bypass the IME (except when composing). GPUI handles them
if a binding matches, otherwise `performKeyEquivalent:` returns `NO` and
macOS handles them.
**This won't fully fix Cmd+backtick window cycling by itself** because
Zed's key_equivalents system maps default keybindings onto the physical
backtick key on various layouts. For example, `cmd-'`
(ToggleSelectedDiffHunks) maps to the backtick key on Spanish, `cmd-=`
(IncreaseBufferFontSize) on Scandinavian layouts, `cmd-"`
(ExpandAllDiffHunks) on German/Portuguese/Swiss, and `cmd-}`
(ActivateNextItem) on Spanish-ISO. These Zed bindings shadow the
backtick key and consume the event before macOS can cycle windows. I'd
appreciate guidance on the preferred approach to resolve these
keybinding conflicts -- IMO, Zed's default shortcuts should not be
interfering with Cmd+backtick for any layout.
Release Notes:
- Fixed Cmd+key shortcuts being consumed by the IME on non-QWERTY
keyboard layouts, preventing Zed keybindings and macOS system shortcuts
from working with special characters.
Add new page detailing the roles available for users in their
organizations.
Release Notes:
- N/A *or* Added/Fixed/Improved ...
Katie Geer
created
231b0cc
glsl: Add `task` and `mesh` path suffixes (#50605)
Click to expand commit body
The GLSL language extension was missing the "task" and "mesh" path
suffixes for task and mesh shaders.
"task" and "mesh" are the official suffixes used in glslang.
Release Notes:
- N/A
Co-authored-by: MrSubidubi <finn@zed.dev>
Sigh.. The missing flag caused the wrong output to be used, resulting in
an error in the process.
Release Notes:
- N/A
Finn Evers
created
ccb2674
extension_ci: Add infrastructure for this repository (#51493)
Click to expand commit body
This will allow us to also use the workflows for this repository, which
will especially come in handy once we revisit provider extensions.
Not perfect, as we will trigger some failed workflows for extensions
that were just added
Release Notes:
- N/A
Finn Evers
created
4e8937b
ui: Refactor the `Button` component icon methods (#51496)
Click to expand commit body
Previously, if you wanted to have a button that contains icons on both
edges, you'd need to use a `ButtonLike` component, which takes any
children. Meanwhile, the `Button` would only take one icon, where you
could control its position through the `IconPosition` enum. This has
always felt unnecessarily limiting. So, this PR removes this limitation
by adding two new methods to the button: `start_icon` and `end_icon`.
In the meantime, I have also been bothered by the unnecessary
indirection in the `IconButton` due to the existence of the `ButtonIcon`
component. So I figured I could also completely eliminate that by adding
some of its methods directly to the `IconButton` and in the Button, just
using a regular `Icon` component.
---
## Before
```rust
Button::new("id", "Label")
.icon(IconName::Plus)
.icon_position(IconPosition::Start)
.icon_size(IconSize::Small)
.icon_color(Color::Muted)
```
## After
```rust
Button::new("id", "Label")
.start_icon(Icon::new(IconName::Check))
.end_icon(Icon::new(IconName::ChevronDown).size(IconSize::XSmall))
```
This should have no visual impact to the UI.
Release Notes:
- N/A
Danilo Leal
created
a623dc3
agent_ui: Insert branch diff crease when clicking on menu item (#51509)
Click to expand commit body
Follow up to https://github.com/zed-industries/zed/pull/51487
The PR above added the item to the menu, and this one makes the menu
item actually insert a mention crease with the branch diff. That was
missing in the previous one.
Release Notes:
- N/A
Danilo Leal
created
f04b4e0
file_finder: Put collab channel inclusion behind a setting (#51505)
e29206b
Do not overly eagerly invalidate the runnables (#51500)
Click to expand commit body
Follow-up of https://github.com/zed-industries/zed/pull/51299
Release Notes:
- N/A
Kirill Bulatov
created
e6f571c
gpui: Fix busyloop on X disconnect (#41986)
Click to expand commit body
When the connection to X is broken zed will go into an infinite loop and
eat up 100% (of one core) of CPU; this change causes it to exit with an
error instead.
I encountered this behavior while running zed in
[Xephyr](https://freedesktop.org/wiki/Software/Xephyr/) for testing,
though I do sometimes terminate my X server as a way to log out or
attempt to recover from a (very) broken state, and I appreciate a
graceful exit in those situations!
Exiting in case of X server disconnect is common practice in my
observations, likely as the difficulty of recreating state stored
server-side outweighs the potential utility in attempting to recover (if
"reconnecting" to an X server is ever desired in regular usage,
[Xpra](https://xpra.org/index.html) might be able to help!).
Release Notes:
- N/A
This PR introduces the `project_panel.scrollbar.horizontal_scroll`
setting to allow users to toggle the horizontal scroll bar in the
project panel. This was Zed's design before PR #18513, and the default
behavior of VSCode (`workbench.list.horizontalScrolling`).
https://github.com/user-attachments/assets/f633f4e4-a585-4494-8f48-df77c6aca418
## Rationale
Zed's design used to be the same as the default behavior of VSCode.
I.e., no horizontal scrolling, and the view is always snapped to the
left, with long file names clipped of. If you want to see the content
that is out-of-frame, you'll need to drag the handle and expand the
project panel. This could be problematic, especially for large repos
with multiple levels of nested directories, as pointed out by issues
#5550 and #7001.
<img width="1398" height="992" alt="image"
src="https://github.com/user-attachments/assets/d86563f2-0f06-4e9e-818c-155ac45f0f56"
/>\
*VSCode's default setup, for reference.*
Then came PR #18513, which added horizontal scroll and addressed this
pain point, but users didn't have a choice. They're stuck with
horizontal scrolling always turned on. I, for instance, personally
prefer the old, VSCode-default behavior, for most projects I open are
small and don't need horizontal scrolling in the project panel. With
horizontal scrolling always turned on, I find it annoying to have my
project panel view accidentally scrolled to the middle, and I'll have to
grab my mouse and scroll it back. It's also visually redundant.
Thus, why not add an option like VSCode's
`workbench.list.horizontalScrolling` and let users choose? I'd love to
be able to, say, set a per-project override for the projects that need
horizontal scrolling, while having it disabled by default.
## Extra Notes
- I was originally thinking about using `ScrollbarAxes` from
`src/editor_settings.rs` and make the option
`project_panel.scrollbar.axes.horizontal` similar to the global editor
scrollbar settings, but this option is specific to the project panel and
it doesn't quite make sense to allow disabling vertical scrolling on the
project panel, so I added a standalone option for it instead, similar to
VSCode's `workbench.list.horizontalScrolling`.
- I went the conservative route and set horizontal scrolling to enabled
(current behavior) by default. Imo it might make more sense to disable
it by default instead, similar to VSCode, but I'll leave this for the
Zed team to decide.
- I named it `horizontal_scroll` instead of `horizontal_scrolling` to be
consistent with the adjacent setting `sticky_scroll`.
- As for tests, I don't see tests for the scrollbar, so I didn't add
any.
I'd be glad to update the PR if anything is not inline with the
project's requirements or conventions.
---
Release Notes:
- Added `project_panel.scrollbar.horizontal_scroll` setting to allow
toggling horizontal scrolling in the project panel
Signed-off-by: k4yt3x <i@k4yt3x.com>
K4YT3X
created
bde0834
git: Log some more information when opening a git repository and when `git show` fails (#51495)
Click to expand commit body
Release Notes:
- N/A
Cole Miller
created
697e5be
git: Fix commit message generation in untrusted projects and block external diff (#51323)
Click to expand commit body
When on a untrusted project, if one was to try and use the commit
generation functionality, the command would fail because of the `-c
diff.external` configuration provided in `GitBinary::build_command`, as
git would interpret this as `""` and try to run that command.
This `-c diff.external` is a good safeguard to have on untrusted
repositories because it prevents random commands, configured in
`.git/config` from being run. For example, if one uses `git config
diff.external "touch bananas.txt"` and then run `git diff`, a new
`bananas.txt` file would be created.
However, it was still possible to bypass this safeguard using the
following strategy:
1. Specify a custom diff for a specific file format. For example, for
markdown files, with `printf '*.md diff=pwned\n' > .gitattributes`
2. Update the command run by the `pwned` diff, for example, `git config
diff.pwned.command "touch bananas.txt"`
3. Open Zed and attempt to generate a commit message in an untrusted
repository and check that a new `bananas.txt` file was created
This is only prevented by using the `--no-ext-diff` flag on the `diff`
command, so a new `GitBinary::build_diff_command` has been introduced
which simply wraps `GitBinary::build_command` and adds the
`--no-ext-diff` flag, if necessary.
As a side-effect, this also makes it so that generating a commit message
in an untrusted repository works again, which was accidentally broken on
https://github.com/zed-industries/zed/pull/50649 .
Before you mark this PR as ready for review, make sure that you have:
- [X] Added a solid test coverage and/or screenshots from doing manual
testing
- [X] Done a self-review taking into account security and performance
aspects
- [X] Aligned any UI changes with the [UI
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
Release Notes:
- Fixed commit message generation in untrusted repositories
Dino
created
3e7f2e3
agent_ui: Add branch diff menu item to context menu (#51487)
Click to expand commit body
This PR adds the recently introduced "branch diff" mention option to the
"Add Context" menu in the message editor:
<img width="450" height="582" alt="Screenshot 2026-03-13 at 9 58@2x"
src="https://github.com/user-attachments/assets/1f5102e7-9018-4a5b-992d-43befa55dcbe"
/>
Release Notes:
- N/A
Release Notes:
- Added an error indicator in the edit prediction menu with an error
message when the free tier limit is exceeded
Ben Kunkle
created
7d566e0
extension_ci: Add initial support for extensions in a subdirectory (#51173)
Click to expand commit body
This wil help with releases for extensions living this repository, which
will become more relevant once agent provider extensions are back on the
table.
Release Notes:
- N/A
Finn Evers
created
46f16c7
docs: Introduce fresh documentation for snippets in extensions (#50874)
Click to expand commit body
Add documentation for snippets in extensions.
Feel free to change the wording or add more content.
Before you mark this PR as ready for review, make sure that you have:
- [ ] Added a solid test coverage and/or screenshots from doing manual
testing
- [ ] Done a self-review taking into account security and performance
aspects
- [ ] Aligned any UI changes with the [UI
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
Release Notes:
- N/A
---------
Co-authored-by: Finn Evers <finn.evers@outlook.de>
LBF38
and
Finn Evers
created
0674324
agent: Fix session close capability check (#51479)
Click to expand commit body
Release Notes:
- agent: Fixed an issue where external agents would return an error
because unsupported ACP method was called
Bennet Bo Fenner
created
6fb9680
agent_ui: Wire up archive entry loading (#51475)