8c8639f
git: Fix buffer diff crash that could occur during the stage all operation (#47265)
Click to expand commit body
Closes https://github.com/zed-industries/zed/issues/46519
This crash happened because we were incorrectly merging pending and
unstaged hunks together by always using the pending hunk end offset as
the merged hunk bound instead of the max of both hunks.
The fix is to use `max()` when updating `buffer_offset_range.end` during
pending hunk merging, matching the behavior used for unstaged hunk
merging.
Release Notes:
- N/A
Anthony Eid
created
a191444
gpui: Preserve rem_size context for deferred draws (#47263)
Click to expand commit body
Closes #46328
Release Notes:
- Fixed agent model selector cutting off models at the end of the list.
## Problem
When subagents use the `edit_file` tool, it creates an `EditAgent` that
makes its own model request to get the edit instructions. These "nested"
requests compete with the parent subagent conversation requests for rate
limiter permits.
The rate limiter uses a semaphore with a limit of 4 concurrent requests
per model instance. When multiple subagents run in parallel:
1. 3 subagents each hold 1 permit for their ongoing conversation streams
(3 permits used)
2. When all 3 try to use `edit_file` simultaneously, their edit agents
need permits too
3. Only 1 edit agent can get the 4th permit; the other 2 block waiting
4. The blocked edit agents can't complete, so their parent subagent
conversations can't complete
5. The parent conversations hold their permits, so the blocked edit
agents stay blocked
6. **Deadlock**
## Solution
Added a `bypass_rate_limit` field to `LanguageModelRequest`. When set to
`true`, the request skips the rate limiter semaphore entirely. The
`EditAgent` sets this flag because its requests are already "part of" a
rate-limited parent request.
(No release notes because subagents are still feature-flagged.)
Release Notes:
- N/A
---------
Co-authored-by: Zed Zippy <234243425+zed-zippy[bot]@users.noreply.github.com>
Richard Feldman
and
Zed Zippy
created
ff35da2
agent_ui: Fix keybinding conflict with action to clean up the queue (#47254)
Click to expand commit body
This PR frees up `shift-backspace` to work as it did before. Now, the
action to remove the first queued message is now assigned to the
`cmd-shfit-backspace` keybinding, whereas the action to clear the entire
message queue is assigned to `cmd-alt-backspace`.
Release Notes:
- N/A
Danilo Leal
created
aa4e94f
docs: Replace ellipsis with proper character (#47250)
Click to expand commit body
Ultra nit PR to test some end-to-end PR creation workflow with AI.
Release Notes:
- N/A
Co-authored-by: Claude Haiku 4.5 <noreply@anthropic.com>
Release Notes:
- N/A
Overview
Restructures the documentation navigation to be organized by user goals
rather than feature lists. Introduces a new "Working with Code" section
and reorganizes existing content into clearer groupings.
### Navigation Changes
**New top-level sections:**
- **Working with Code** — Groups editing, navigation, and execution
features by workflow
- **Reference** — Dedicated section for lookup-only content (settings,
actions, CLI)
- **Coming From...** — Migration guides grouped together
**Reorganized sections:**
- **Customization** — Renamed from "Configuration," focused on
appearance and keybindings
- **Account & Privacy** — Consolidated auth, privacy, and telemetry
pages
New Files
| File | Purpose |
|------|---------|
| `editing-code.md` | Overview page for editing features |
| `finding-navigating.md` | Overview page for navigation tools with
quick reference |
| `running-testing.md` | Overview page for tasks, debugger, and REPL |
| `reference/all-settings.md` | Settings reference (moved/renamed) |
| `reference/cli.md` | CLI reference (moved) |
### Content Moves
| Page | From | To |
|------|------|-----|
| Snippets | Customization | Working with Code → Editing Code |
| Code Completions | (flat) | Working with Code → Editing Code |
| Diagnostics | (flat) | Working with Code → Editing Code |
| Multibuffers | (flat) | Working with Code → Editing Code |
| Command Palette | (flat) | Working with Code → Finding & Navigating |
| Outline Panel | (flat) | Working with Code → Finding & Navigating |
| Tab Switcher | (flat) | Working with Code → Finding & Navigating |
| Tasks | (flat) | Working with Code → Running & Testing |
| Debugger | (flat) | Working with Code → Running & Testing |
| REPL | (flat) | Working with Code → Running & Testing |
| All Settings | Configuration | Reference |
| CLI | (various) | Reference
---------
Co-authored-by: Marshall Bowers <git@maxdeviant.com>
Co-authored-by: Zed Zippy <234243425+zed-zippy[bot]@users.noreply.github.com>
Katie Geer
,
Marshall Bowers
, and
Zed Zippy
created
9c3dc21
Use `anyOf` instead of `oneOf` in keymap schema (#47248)
Click to expand commit body
Closes #ISSUE
Resolves some spurious warnings we were seeing in the keymap file due to
keybind declarations matching multiple possible shapes which is not
allowed with `oneOf` per the json-schema spec
Release Notes:
- N/A *or* Added/Fixed/Improved ...
Ben Kunkle
created
cd0b373
ep_cli: Add filter languages subcommand (#47242)
Follow-Up-For: #47243
Previously, we would detach tasks spawned to watch config files.
However, the task blocked on receiving a file event before checking if
the receiver for the updates channel was dropped, causing the task to
never exit. The fix here was to return the task explicitly, so that it
can be dropped instead of calling `.detach()` on it. There is definitely
a way to `select!` between the receiver being dropped and the next file
system event, but I couldn't figure it out in a reasonable amount of
time and decided it wasn't worth it.
Release Notes:
- Fixed an issue where a few file descriptors would be leaked each time
a project was closed
Ben Kunkle
created
37185ea
ep_cli: Fix "Too many open files" errors (#47243)
2ccca66
agent_ui: Add support for editing queued messages (#47234)
Click to expand commit body
This PR adds the ability to edit a queued message, which you can now do
by hitting `cmd-e` from the message editor, which will focus the first
queued message. To pull that off, I'm also making the queued messages
render as an editor, the same way we do with regular user messages. That
way, we ensure less layout shift when focusing in and out of the queued
message for editing and gain the ability to render context
buttons/creases the same way we do in the main message editor.
https://github.com/user-attachments/assets/fb68fd48-c0cd-491f-a7d9-5065a9151b0b
Note that in the video, I show the state in which you're still editing
in the moment in which the queued message would be sent. If that
happens, your queued message won't be sent even if you unfocus the
queued message editor. In this case, you need to explicitly hit "Send
Now".
Release Notes:
- Agent: Added the ability to edit queued messages.
Danilo Leal
created
4731000
settings_ui: Remote project setting files support (#45292)
Click to expand commit body
Closes #ISSUE
Release Notes:
- settings_ui: Added support for viewing and updating project settings
files in remote projects
---------
Co-authored-by: Mikayla <mikayla@zed.dev>
Release Notes:
- N/A
---------
Co-authored-by: Ben Kunkle <ben@zed.dev>
Max Brunsfeld
and
Ben Kunkle
created
a8bf82c
debugger: Fix crash when dragging pane items to split view (#46806)
Click to expand commit body
## Summary
Fixes crash when dragging debugger panel items
(terminal/console/variables/frames) to another pane as split view.
**Root causes:**
1. Double borrow panic - `pane_group.split()` was called synchronously
inside a `Context<Pane>` update, causing "cannot update Pane while it is
already being updated"
2. `unwrap()` calls that panic when items are in transition during drag
operations
3. `debug_assert!` in `pane_at_pixel_position` fails when `members` and
`bounding_boxes` are temporarily out of sync after deferred split
**Fixes:**
- Defer entire split+move operation via `cx.spawn_in()` to avoid double
borrow
- Replace `unwrap()` with graceful early returns in `activate_item` and
`run_in_terminal`
- Handle `members.len() != bounding_boxes.len()` gracefully in
`pane_at_pixel_position`
Closes #46784
Closes #ISSUE
Release Notes:
- N/A *or* Added/Fixed/Improved ...
---------
Co-authored-by: Anthony Eid <anthony@zed.dev>
xcb3d
and
Anthony Eid
created
9fce075
ep: Make --provider optional, skip prediction when results exist (#47225)
Click to expand commit body
When --provider is not provided, `ep` will now use whatever provider is
recorded in the data.
Release Notes:
- N/A
This command takes raw LLM outputs (`predictions.actual_output`) that
could be generated elsewhere and parses them into a canonical unified
diff (`predictions.actual_patch`).
This is useful for simplifying the evaluation pipeline and for rerunning
the parser without having to generate LLM outputs.
Release Notes:
- N/A
Oleksiy Syvokon
created
8870bd9
acp: Allow installing ACP agents from the registry (#47218)
Click to expand commit body
This is still behind a feature flag as the registry is still WIP, but
allows downloading binary agents from the registry on github.
Release Notes:
- N/A
Ben Brandt
created
9a97c5c
ep: Add a prompt with git-style merge markers (#47215)
Click to expand commit body
Release Notes:
- N/A
Oleksiy Syvokon
created
d71fe4c
agent_ui: Add `@diagnostics` mention to the thread (#42270)
Click to expand commit body
Closes #31351
# Diagnostics Mention in New Threads
## Overview
Adds the `@diagnostics` mention to the new Agent Panel threads so users
can inject current LSP diagnostics (errors by default) without switching
to a text thread. The diagnostics mention is fully integrated into ACP
mention parsing, the context picker, and the message-editor pipeline so
it round-trips cleanly and shows up in the standard `@` menu.
## Context
- **Request:** bring `/diagnostics` parity to the “New Thread” assistant
experience.
- **Scope:** diagnostics only; `/terminal` mention would be implemented
in a separate PR.
- **Docs:** updated Agent Panel docs + changelog.
## Implementation Details
1. **Mention plumbing**
- Added `MentionUri::Diagnostics` to `acp_thread`, including parsing
(`zed:///agent/diagnostics?include_warnings=true`) and icon/name
metadata.
- Tests ensure diagnostics links round-trip via Markdown mention
serialization.
2. **Context picker / completion**
- New `ContextPickerMode::Diagnostics` exposes an `@diagnostics` entry
in the mention menu.
- Completions turn `@diagnostics` into a fully fledged mention, reusing
the existing confirmation pipeline.
3. **Message editor + thread serialization**
- Resolving the mention calls the existing diagnostics collector from
`assistant_slash_commands`, embedding the tool output inline with other
context blocks (`<diagnostics>…</diagnostics>`).
- Thread-link handling ignores diagnostics backlinks so clicking them
doesn’t try to reopen nonexistent resources.
# How it looks
<img width="800" height="480" alt="image"
src="https://cf5gpe8lxo.ufs.sh/f/EmJ5Xl877qJO1mzC9Zrn8AmJZHeShC4RoUwvTMlF2tfPzj06"
/>
Release Notes:
- Allow mentioning diagnostics in the agent panel via `@diagnostics`
---------
Co-authored-by: Bennet Bo Fenner <bennet@zed.dev>
Mikhail Pertsev
and
Bennet Bo Fenner
created
58051d6
languages: Fix symbol label for enum variants (#47210)
Avoids the panic in #46974
But should be solved by using `saturating_sub` on the `start_overshoot`
calculation, ref:
https://github.com/zed-industries/zed/pull/47046#issuecomment-3762855786
https://github.com/zed-industries/zed/blob/37715d5a50666baaa824eafec2131ee6d80f8e0b/crates/rope/src/chunk.rs#L403C5-L415C6
This function gets called with PANIC = false from `slice`. But if the
offset is outside the text, `log_err_char_boundary` will still panic,
because the first `if` doesn’t bail out early.
Release Notes:
- N/A
Signed-off-by: Marco Mihai Condrache <52580954+marcocondrache@users.noreply.github.com>
Marco Mihai Condrache
created
164e37e
remote: Bring back docker exit status mapping (#47206)
Click to expand commit body
cc https://github.com/zed-industries/zed/pull/45584, was removed in
#47200 fully due to breaking ssh
Also makes ZED_BUILD_REMOTE_SERVER a bit easier to use
Release Notes:
- N/A *or* Added/Fixed/Improved ...
Lukas Wirth
created
8d55527
remote: Fix connecting to remote with running server failing (#47203)
Click to expand commit body
Follow up to https://github.com/zed-industries/zed/pull/47200, fixing an
edge case where if the heartbeat failure disconnects us we get stuck in
an unconnectable state
Release Notes:
- N/A *or* Added/Fixed/Improved ...
Lukas Wirth
created
02a19f7
remote: Fix being unable to reconnect when the remote server dies (#47200)
Click to expand commit body
Closes https://github.com/zed-industries/zed/issues/38522
Release Notes:
- Fixed remote connections getting stuck in limbo when the server side
dies unexpectedly
Lukas Wirth
created
89e9ab9
project: Implement range formatting for remoting (#47194)
Click to expand commit body
Closes https://github.com/zed-industries/zed/issues/42859
Release Notes:
- Added support for language range formatting in remoting setups
Lukas Wirth
created
46b275b
rope: Add missing early return in `log_err_char_boundary` (#47191)
09ceec0
settings_ui: Prevent panic when trying to configure edit prediction providers for language (#47162)
Click to expand commit body
Closes #46502
The issue here was that we were not looking into the sub page stack when
looking headers up, resulting in an out of bounds index. This PR fixes
this.
Due to me also fixing another small bug in the UI (and adding proper
support for the breadcrumbs), I had to move quite some stuff around here
to get this to work. Namely, I made the `sub_page_stack` a field on the
`SettingsWindow` and now only store the `active_language` in a global to
ensure that we store scroll positions properly for all sub pages. For
that to work with the edit prediction provider page, I had to remove the
struct there and could just move that into a method, which was a nice
side effect there I suppose.
Release Notes:
- Fixed a crash that could occur when trying to edit edit prediction
providers in the settings UI.
Finn Evers
created
4e06656
docs: Update some AI-related content (#47178)
Click to expand commit body
Clean up some writing and add content about newer features.
Release Notes:
- N/A
6265305
extension_host: Fix extension rebuild building in release mode (#47165)
Click to expand commit body
Release Notes:
- Fixed an issue where rebuilding a dev extension would compile the
extension in release and not debug mode.
Finn Evers
created
6718320
agent_ui: Use `.w_full()` instead of `.size_full()` when rendering markdown tables in lists (#46783)
Click to expand commit body
This way, the table:
- Determines its height by the grid’s content
- Still keeps `width: 100%` so it fills its container horizontally
| Before | After |
|--------|--------|
| <img width="1732" height="1125" alt="image"
src="https://github.com/user-attachments/assets/5d739664-5793-4c16-a765-dc373c7cb10f"
/> | <img width="1732" height="1125" alt="image"
src="https://github.com/user-attachments/assets/c857d28b-67c2-4ba1-b4a6-869a154b050b"
/> |
Closes #46768
Release Notes:
- Fixed issue where markdown tables rendered within lists would overlap
items above/below it
Kunall Banerjee
created
384c8e6
git_picker: Make the unified version of it available through the title bar (#47151)
Click to expand commit body
The recently-introduced unified Git picker was previously only available
if you reached for the branch, worktree or stash pickers through the
keybinding. Now, if you click on the title bar's branch button, you'll
also be able to quickly view the worktree and stash pickers.
Release Notes:
- N/A
Danilo Leal
created
f98acf4
Make `ep split-commit` respect `--failed=skip` (#47150)
Click to expand commit body
Release Notes:
- N/A
Oleksiy Syvokon
created
adc1594
agent_ui: Don't fold terminal tool command lines into a disclosure (#47148)
Click to expand commit body
Follow up to https://github.com/zed-industries/zed/pull/40570.
This PR removes the UI treatment where we collapse a terminal command
into a disclosure component if it spans more than three lines. I
initially thought having this fancy treatment in the UI would make it
sleeker but it actually feels like a counter-productive move to
arbitrarily hide command lines; they're arguably always important to see
in full, even when they're super long. I'm happy to get some feedback
here, but I think for now, I'd feel better if users could see them all
without having to manually expand/collapse them.
Release Notes:
- N/A
Closes #41832
Extends https://github.com/zed-industries/zed/pull/19455
When an internal `.editorconfig` is detected in the worktree, we
traverse parent directories up to the filesystem root looking for
additional `.editorconfig` files. All discovered external configs are
loaded and cached (shared when multiple worktrees reference the same
parent directories). When computing settings for a file, external
configs are applied first (from furthest to closest), then internal
configs.
For local projects, file watchers are set up for each external config so
changes are applied immediately. When a project is shared via collab,
external configs are sent to guests through the existing
`UpdateWorktreeSettings` proto message (with a new `outside_worktree`
field). SSH remoting works similarly.
Limitations: We don't currently take creation of new external editor
config files into account since they are loaded once on worktree add.
Release Notes:
- Added support for `.editorconfig` files outside the project directory.
Zed now traverses parent directories to find and apply EditorConfig
settings. Use `root = true` in any `.editorconfig` to stop inheriting
settings from parent directories.
Smit Barmase
created
ad7c30e
ep: Missing newlines in teacher prompt (#47143)
Click to expand commit body
Release Notes:
- N/A
Oleksiy Syvokon
created
099226e
ai: Symlink an `AGENTS.md` file to `.rules` (#45939)
Click to expand commit body
Release Notes:
- N/A
versecafe
created
a4ebfa0
ui: Adjust BoxShadow offset for elevation styles (#47010)
Click to expand commit body
Changed the offset of shadow to improve shadow appearance. There was a
1px horizontal offset on all elevated surfaces — barely perceptible, but
once you see it, it's all you see
|Before|After|
|-|-|
|<img width="586" height="884" alt="before"
src="https://github.com/user-attachments/assets/63fa36a7-7845-4c6f-9e73-36ad5056194b"
/>|<img width="586" height="884" alt="after"
src="https://github.com/user-attachments/assets/41a032d3-e7d6-4188-9394-656d5caf822e"
/>|
Release Notes:
- N/A
Ike
created
5e2e917
workspace: Improve the welcome and launchpad pages UI (#47072)
Click to expand commit body
Closes #47069
Release Notes:
- N/A
We can add something like `pb_40()` if the launchpad is supposed to be
up a bit rather centered
Qichen Liu 刘启辰
created
3687366
agent: Make sure ACP still gets classic tool permission UI (#47142)
Click to expand commit body
This makes sure all of the new granular permission logic and ui only
applies to the zed agent and doesn't affect the UI of external agents.
Release Notes:
- N/A
Ben Brandt
created
6c712d8
terminal: Fix fast scrolling during mouse mode (#45600)
Click to expand commit body
Closes #18930
### Summary
- Fix fast Macbook trackpad/mouse scrolling in terminal applications
with mouse mode enabled
### The Problem
Scrolling with a trackpad in tmux, neovim, or any terminal app that
enables mouse mode was too fast. A gentle swipe would send me through
hundreds of lines, making these apps practically unusable in Zed's
terminal.
### Root Cause
When the terminal is in mouse mode, we send escape sequences to report
scroll events to the application. The bug was in `scroll_report()`:
https://github.com/zed-industries/zed/blob/ca478226677e5f7190a5d8933277522780faaaf7/crates/terminal/src/terminal.rs#L1983-L1988
That `max(scroll_lines, 1)` meant we'd send **at least 1 scroll event
even when `scroll_lines` was 0**.
https://github.com/zed-industries/zed/blob/ca478226677e5f7190a5d8933277522780faaaf7/crates/terminal/src/mappings/mouse.rs#L96
On macOS, trackpad gestures fire many small pixel deltas due to scroll
acceleration. Each tiny movement triggered a scroll event, even though
we hadn't accumulated enough pixels for a full line yet. This is a known
issue alacritty/alacritty#2869 - macOS sends fractional line deltas
(like 0.1) instead of whole lines.
### The Fix
Don't send mouse reports when no full line has accumulated
This aligns with Alacritty's approach - accumulate partial scroll
amounts and only report when complete lines are ready.
https://github.com/alacritty/alacritty/blob/6ee6e53ee3457c24137f117237b0ff1d84f6f836/alacritty/src/input/mod.rs#L700-L730
### Testing
Tested trackpad scrolling in:
- tmux (pane navigation, scrollback)
- neovim (buffer scrolling)
- opencode (TUI navigation)
All scroll smoothly now.
### Demo
The demo shows the behavior of the scrolling. I can go fast or I can go
slow
https://github.com/user-attachments/assets/14bfc2f4-f286-4341-bf55-4ced894d63f9
Release Notes:
- Fixed trackpad scrolling being too fast in terminal applications with
mouse mode enabled (tmux, neovim, opencode, etc.)
Emamul Andalib
created
5492901
Add action listener to workspace for pane::CloseActiveItem (#46421)
Click to expand commit body
When focus is on a dock panel that doesn't contain a pane (e.g., project
panel), `pane::CloseActiveItem` will now close the active item in the center
pane instead of doing nothing.
This allows users to bind, for example, `cmd-w` to `pane::CloseActiveItem`
and have it work consistently regardless of whether focus is on a dock
panel or the editor.
Closes #45261
Release Notes:
- Improved `pane::CloseActiveItem` to close center pane items even when
focus is on a dock panel like the project panel or outline panel
---------
Co-authored-by: dino <dinojoaocosta@gmail.com>
Josh P.
and
dino
created
1e2392e
ci: Move clippy off of run_platform_tests and into a separate job (#47139)
Click to expand commit body
This should slash our CI times a bit (1 minute or so)
Closes #ISSUE
Release Notes:
- N/A
Piotr Osiewicz
created
56b8be8
docs: Explain how git commit message prompt can be customized (#47136)
Click to expand commit body
Release Notes:
- N/A
Bennet Bo Fenner
created
2321178
languages: Apply JSX fixes to JavaScript highlights (#47130)
Click to expand commit body
Closes #46701
This ports the fixes from #46442 over to the JavaScript highlights,
which we forgot to do in that PR since the highlights are not shareable
and the fix was only applied to TSX... Hence, porting the fixes here
manually to solve the issue for good.
Release Notes:
- Fixed an issue where JSX components were highlighted too broadly,
causing normal HTML tags to be highlighted as such
The logic in `anchor_at_offset` and `to_offset` seems inverted when
checking character boundaries. `assert_char_boundary` returns `true`
when the offset IS valid, but the code was adjusting offsets when the
function returned `true` (valid) instead of `false` (invalid).
Release Notes:
- N/A
Jordi Villar
created
50a90d3
Add a 'rejected patch' field to example specs, for DPO examples (#47043)
Click to expand commit body
The `capture example` action now populates the markdown file with a noop
"Rejected Patch", so that you can easily specify the good and bad
output.
Release Notes:
- N/A