Closes #ISSUE
Measure the model reversing user edits programatically, for a more
robust and consistent measurement than LLM-as-judge
Release Notes:
- N/A *or* Added/Fixed/Improved ...
Ben Kunkle
created
21db564
ci: Cache Rust toolchains in Linux namespace cache (#47699)
18bc268
Fix extraction of Windows remote server (#47690)
Click to expand commit body
Release Notes:
- N/A
John Tur
created
b9233da
Cap number of saved hang traces at 3 (#47674)
Click to expand commit body
Prevents unbounded grown of the `hang_traces` directory.
Release Notes:
- Fixed excessive disk space usage from the `hang_traces` directory.
Cole Miller
created
f73242a
Return to Keep/Reject for agent edits (#47688)
Click to expand commit body
This essentially reverts 2a83c6907cf0850ad425f97b8debdd7bdf016a95 and
d35fee1cd131df90d1e14e06ec75f7d1c0a3bcf6
Release Notes:
- N/A
Michael Benfield
created
d1f7c24
helix: Fix normal-mode selection expansion during `vim::Scroll` commands (#47024)
Click to expand commit body
Fixes the `vim::ScrollUp/Down` commands when a normal-mode vim or helix
selection exists.
Pretty straightforward: make the `scroll_editor` function aware of the
current vim/helix mode, and only expand the selection if a visual mode
is active.
Closes #47022
Release Notes:
- Fixed bug causing normal-mode vim/helix selections to get expanded
during `vim::Scroll` commands
---------
Co-authored-by: dino <dinojoaocosta@gmail.com>
Josh Robson Chase
and
dino
created
d965856
extension_ci: Increase runners for tests job (#47686)
Click to expand commit body
We were hitting some timeout failures with some runners, hence bumping
the size here.
Release Notes:
- N/A
Finn Evers
created
9d5f0f5
tasks: Show error for unknown `ZED_` variables (#45621)
Click to expand commit body
Validate task variable names when the file is saved, immediately
displaying an error toast if any invalid `ZED_*` variables are found.
Valid tasks in the same file are still loaded and work normally.
- Add `task::task_template::TaskTemplate::unknown_variables()` to detect
invalid `ZED_` variable names
- Add `project::ToastLink` struct and optional `link` field to
`project::Event::Toast`
- Show documentation link in the error toast
Closes #23275
Release Notes:
- Fixed user-defined tasks with unresolved `ZED_*` variables being
silently omitted
---------
Co-authored-by: dino <dinojoaocosta@gmail.com>
Karl-Erik Enkelmann
and
dino
created
b74b197
collab: Extract tests into integration tests crate (#47668)
Click to expand commit body
Reduces time needed to build collab tests from 48s to 38s.
Release Notes:
- N/A
Piotr Osiewicz
created
9326d61
remote_server: Avoid panic when writing to stderr (#47683)
Was changed by mistake
Release Notes:
- N/A
Co-authored-by: Lukas Wirth <me@lukaswirth.dev>
John Tur
and
Lukas Wirth
created
e49dd8b
Fix Zed not entering disconnected state when remote proxy dies (#47659)
Click to expand commit body
When I kill the remote proxy, it seems like `ssh` exits with code -1.
Since that's less than or equal to 0, this means we don't try to restart
the connection. The proxy really shouldn't exit for any reason, so let's
get rid of this check altogether.
Release Notes:
- N/A
Co-authored-by: Lukas Wirth <me@lukaswirth.dev>
Improve syntax highlighting of keywords by creating groups for
declarations and import/export.
### Release Notes:
- Highlight declarations with `keyword.declaration`:
- const
- let
- var
- function
- class
- enum
- interface
- type
- Highlight imports and exports with `keyword.import`:
- export
- from
- import
---------
Co-authored-by: Gaauwe Rombouts <mail@grombouts.nl>
Andrew Currier
and
Gaauwe Rombouts
created
485e9b1
docs: Remove preview indicator for Tailwind CSS Mode (#47651)
Click to expand commit body
Removes the preview indicator from the docs, since this is available in
stable
Release Notes:
- N/A
3a94910
extension_cli: Validate that all snippets can be parsed (#47649)
Click to expand commit body
With this, we can now ensure that snippet extensions we publish actually
only contain valid snippets.
Release Notes:
- N/A
Finn Evers
created
1c113e7
project_panel: Fix alignment of folded directory path components (#47648)
Click to expand commit body
The padding on folded directory path components was causing the first
component to be misaligned with regular entry labels. This adds a
negative margin to the first component to compensate for the left
padding while preserving the hover background.
Before:
<img height="180" alt="before-1"
src="https://github.com/user-attachments/assets/5be234a6-4fca-4940-a979-4cfb767875bb"
/> <img height="180" alt="before-2"
src="https://github.com/user-attachments/assets/1825e12b-eb55-48fe-9b3c-ac52e552581b"
/>
After:
<img height="180" alt="after-1"
src="https://github.com/user-attachments/assets/03b1029d-6664-49bd-9371-680fc912c67c"
/> <img height="180" alt="after-2"
src="https://github.com/user-attachments/assets/fa4954d7-796c-48f3-8f77-6aaee7bfc35c"
/>
Release Notes:
- Fixed alignment of folded directory names in project panel.
Smit Barmase
created
0a338c3
Update nim entry with additional file suffixes (#47616)
Click to expand commit body
Expanded the nim entry to include `nims` and `nimble` files
- [nims](https://nim-lang.org/docs/nims.html) is a subscript of Nim that
runs in a VM
- [nimble](https://github.com/nim-lang/nimble) files are project files
for Nim that are written in Nim
Release Notes:
- Updated Nim file aliases so icon is shown for nims/nimble files
Jake Leahy
created
71c5e14
Add `ep repair` command to address judge feedback (#47646)
Click to expand commit body
Release Notes:
- N/A
Oleksiy Syvokon
created
c31ad94
agent: Encourage more parallel tool use (#47644)
Click to expand commit body
Also standardizes the list format in the prompt
Release Notes:
- N/A
Ben Brandt
created
fb928c8
acp: Check for claude login message in terminal-auth as well (#47642)
Click to expand commit body
Allows for the acp adapter to use terminal auth for this as well
Release Notes:
- N/A
Ben Brandt
created
3b5443b
syntax_tree_view: Fix highlights persisting after view was closed (#47638)
Click to expand commit body
Also ensured that we clear only the highlights of the current view
(which probably would have been the the case almost always anyway).
Release Notes:
- Fixed a small issue where highlights of the syntax tree view would
persist after the view was closed.
Finn Evers
created
a1df9ba
Allow EP cli to fetch rejections from snowflake (#47628)
Click to expand commit body
Release Notes:
- N/A
Max Brunsfeld
created
9e183d9
project: Do not send `UpdateProject` message on remote server spawn (#47633)
Click to expand commit body
The client has not yet setup its own side of things so the message will
always error as being unhandled anyways.
Release Notes:
- N/A *or* Added/Fixed/Improved ...
Lukas Wirth
created
0af2e84
Revert "Fix link for `Ownership and data flow` in GPUI's README.md" (#47630)
Click to expand commit body
Reverts zed-industries/zed#47599
The link here was intentional and linking to a file within GPUI, hence
reverting.
Release Notes:
- N/A
Finn Evers
created
95cf4ab
gpui: Add action_schema_by_name for O(1) action schema lookup (#47180)
Click to expand commit body
Release Notes:
- N/A
Avoids iterating through all registered actions when looking up a single
action's schema in json_schema_store.
---------
Signed-off-by: Xiaobo Liu <cppcoffee@gmail.com>
Xiaobo Liu
created
7af276a
terminal: Fix double quoting of commands on Windows cmd.exe (#47534)
Click to expand commit body
Closes #47303
The command quoting for `cmd` shell was first introduced (at least in
this case) in PR #41216 three months ago:
https://github.com/zed-industries/zed/blob/3d4582d4dc9145270650e12f9ce5a534b888f4a2/crates/project/src/terminals.rs#L202-L210
And a month ago, PR #42382 added command quoting for `cmd` in a
different place:
https://github.com/zed-industries/zed/blob/3d4582d4dc9145270650e12f9ce5a534b888f4a2/crates/util/src/shell.rs#L413-L434
As a result, the command is now quoted twice when using `cmd`. `cmd`
interprets the entire double-quoted string (e.g., ""command & args"") as
a single (invalid) executable name, and this would lead to an error like
“The system cannot find the path specified” in #47303 .
The solution is to remove the redundant manual quoting in `terminals.rs`
and rely on the centralized logic in `util/src/shell.rs`.
/cc @Veykril @reflectronic
Release Notes:
- Fixed a bug where terminal tasks failed to start on Windows when using
`cmd.exe`.
aceff52
project: Move tests to integration layer (#47596)
Click to expand commit body
Building project tests takes 6.5s instead of 18s that way.
Release Notes:
- N/A
---------
Co-authored-by: Zed Zippy <234243425+zed-zippy[bot]@users.noreply.github.com>
Piotr Osiewicz
and
Zed Zippy
created
dadb5ea
Fix link for `Ownership and data flow` in GPUI's README.md (#47599)
Click to expand commit body
old link redirects to a non-existing page showing '404 - page not
found', probably referring to `src/_ownership_and_data_flow.rs`. anyway
I put the official article link
Release Notes:
- N/A
Khalid
created
2f3c013
copilot_chat: Fix Anthropic models not appearing in model picker (#47549)
Click to expand commit body
## Summary
Fixes #47540 - Anthropic Claude models not appearing in GitHub Copilot
Chat model picker.
## Problem
Users reported that Anthropic Claude models (Claude Sonnet 4, Claude
Opus 4, etc.) were not appearing in the model picker when using GitHub
Copilot Chat, even though:
- The GitHub Copilot API returns these models
- The models have `model_picker_enabled: true`
- Users have valid Copilot subscriptions with access to these models
## Root Cause
The issue was in the `ModelSupportedEndpoint` enum deserialization. The
enum only defined two variants:
```rust
pub enum ModelSupportedEndpoint {
#[serde(rename = "/chat/completions")]
ChatCompletions,
#[serde(rename = "/responses")]
Responses,
}
```
Anthropic Claude models use the `/v1/messages` endpoint, which wasn't
defined. When deserializing the API response, serde failed with:
```
Error("unknown variant `/v1/messages`, expected `/chat/completions` or `/responses`")
```
Because the crate uses resilient deserialization via
`deserialize_models_skip_errors()`, the entire Claude model was silently
skipped rather than causing a hard failure. This meant users saw no
error - the models simply didn't appear.
## Solution
### 1. Added `/v1/messages` endpoint variant
```rust
pub enum ModelSupportedEndpoint {
#[serde(rename = "/chat/completions")]
ChatCompletions,
#[serde(rename = "/responses")]
Responses,
#[serde(rename = "/v1/messages")]
Messages, // NEW: Anthropic models use this endpoint
#[serde(other)]
Unknown, // NEW: Future-proofing for unknown endpoints
}
```
### 2. Removed incorrect `dedup_by()` call
The previous code deduplicated models by family:
```rust
.dedup_by(|a, b| a.capabilities.family == b.capabilities.family)
```
This incorrectly filtered out model variants that share the same family
(e.g., `claude-sonnet-4` and `claude-sonnet-4-thinking`). Removed this
call to preserve all model variants.
### 3. Removed unused import
Removed `use itertools::Itertools;` which was only used for the
now-removed `dedup_by()`.
## Changes
| File | Change |
|------|--------|
| `crates/copilot_chat/src/copilot_chat.rs` | Added `Messages` and
`Unknown` variants to `ModelSupportedEndpoint` enum |
| `crates/copilot_chat/src/copilot_chat.rs` | Removed `.dedup_by()` call
that incorrectly filtered models |
| `crates/copilot_chat/src/copilot_chat.rs` | Removed unused
`itertools::Itertools` import |
| `crates/copilot_chat/src/copilot_chat.rs` | Added 8 new unit tests |
## Test Coverage
Added 8 new unit tests to ensure the fix works and prevent regression:
| Test | Purpose |
|------|---------|
| `test_models_with_pending_policy_deserialize` | Verifies models with
non-"enabled" policy states deserialize correctly (they're filtered
later) |
| `test_multiple_anthropic_models_preserved` | Verifies multiple Claude
models are not incorrectly deduplicated |
| `test_models_with_same_family_both_preserved` | Verifies models
sharing the same family (e.g., thinking variants) are both preserved |
| `test_mixed_vendor_models_all_preserved` | Verifies models from
different vendors (OpenAI, Anthropic, Google) are all preserved |
| `test_model_with_messages_endpoint_deserializes` | **Critical test**:
Verifies `/v1/messages` endpoint deserializes correctly |
| `test_model_with_unknown_endpoint_deserializes` | Verifies unknown
future endpoints deserialize to `Unknown` variant |
| `test_model_with_multiple_endpoints` | Verifies models with multiple
endpoints deserialize correctly |
| `test_supports_response_method` | Verifies the `supports_response()`
method logic for endpoint routing |
### Test Results
```
running 10 tests
test tests::test_model_with_messages_endpoint_deserializes ... ok
test tests::test_model_with_multiple_endpoints ... ok
test tests::test_model_with_unknown_endpoint_deserializes ... ok
test tests::test_models_with_pending_policy_deserialize ... ok
test tests::test_models_with_same_family_both_preserved ... ok
test tests::test_mixed_vendor_models_all_preserved ... ok
test tests::test_multiple_anthropic_models_preserved ... ok
test tests::test_resilient_model_schema_deserialize ... ok
test tests::test_supports_response_method ... ok
test tests::test_unknown_vendor_resilience ... ok
test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
```
## How to Test Manually
1. Sign in to GitHub Copilot in Zed
2. Open the model picker (Agent panel → model selector dropdown)
3. Verify that Anthropic Claude models appear in the list:
- Claude Sonnet 4
- Claude Opus 4
- Other Claude variants (if enabled in your GitHub Copilot settings)
## Checklist
- [x] Code compiles without errors
- [x] `./script/clippy --package copilot_chat` passes with no warnings
- [x] All unit tests pass
- [x] Change is focused on a single bug fix
- [x] No unrelated refactoring or feature additions
<img width="320" height="400" alt="Screenshot 2026-01-24 at 11 57 21 PM"
src="https://github.com/user-attachments/assets/d5e17e1b-da80-4f4d-a218-d50d35114a21"
/>
Release Notes:
- Fixed Anthropic models not appearing in the Copilot Chat model picker
---------
Co-authored-by: Piotr Osiewicz <24362066+osiewicz@users.noreply.github.com>
b584192
terminal: Fix terminal freeze when child process is killed by signal (#47420)
Click to expand commit body
Closes #38168
Closes #42414
We were already using `ExitStatusExt::from_raw()` to construct an
`ExitStatus`, but we were passing in the exit code from
alacritty_terminal's `ChildExit` event. This worked fine on Windows
where `from_raw()` expects an exit code, but on Unix, `from_raw()`
([read
more](https://doc.rust-lang.org/std/os/unix/process/trait.ExitStatusExt.html#tymethod.from_raw))
expects a raw wait status from `waitpid()` and not an exit code.
When a child process was killed by a signal (e.g., SIGSEGV),
`ExitStatus::code()` returns `None` since only normal exits have an exit
code. This caused the terminal to hang because we weren't properly
detecting the exit.
One fix would have been to remove the dependency on `ExitStatus`
entirely, but using the raw wait status gives us more information, we
can now detect exit codes, signal terminations, and more.
The actual fix was upstream in `alacritty_terminal` to send the raw wait
status instead of just the exit code.
Currently using forked patch
https://github.com/zed-industries/alacritty/tree/v0.16-child-exit-patch
which is based on v0.25.1.
Upstream PR: https://github.com/alacritty/alacritty/pull/8825
Release Notes:
- Fixed terminal hanging when a child process is killed by a signal
(e.g., SIGSEGV from null pointer dereference).
Smit Barmase
created
6f090d3
acp: Skip setting language on secondary diff buffer (#47526)
Click to expand commit body
Mirrors
https://github.com/zed-industries/zed/commit/3d4582d4dc9145270650e12f9ce5a534b888f4a2.
We skip setting language on the secondary diff buffer which is not
needed and will improve performance and memory usage.
Release Notes:
- Improved memory usage of large ACP thread diff multibuffers.
Jakub Konka
created
bf19f03
Apply common prefix/suffix stripping to zeta2 and mercury (#47530)
Click to expand commit body
Fixes an issue where edits would be shown like this:
<img width="1262" height="1072" alt="image"
src="https://github.com/user-attachments/assets/f3ec865a-4bf2-423c-8465-62a54a21a882"
/>
When they should be like this:
<img width="1260" height="388" alt="image"
src="https://github.com/user-attachments/assets/ac555a25-f222-48aa-b922-0ae5b9f4e260"
/>
Release Notes:
- N/A *or* Added/Fixed/Improved ...
Max Brunsfeld
created
4e64180
acp: Use the official ACP registry URL (#47564)
Click to expand commit body
Release Notes:
- N/A
Ben Brandt
created
9931c6f
Add SSH remote server for Windows (#47460)
Click to expand commit body
Closes https://github.com/zed-industries/zed/issues/33748
Release Notes:
- Windows is now supported as a target platform for SSH remoting.
---------
Co-authored-by: Lukas Wirth <me@lukaswirth.dev>
John Tur
and
Lukas Wirth
created
e9d9474
gpui: Map diagonal resize cursor styles on Windows (#47477)
Click to expand commit body
- Adds missing diagonal resize cursor mappings (NWSE/NESW) on Windows.
- Fixes `CursorStyle::ResizeUpLeftDownRight` and `ResizeUpRightDownLeft`
falling back to Arrow.
Release Notes:
- N/A
Conashimi
created
f21a357
Hide block cursor text when the cursor is within a redacted range (#45549)
Click to expand commit body
Closes [#ISSUE](https://github.com/zed-industries/zed/issues/20696)
Release Notes:
- Hide block cursor text when the cursor is within a redacted range
Screenshot:
<img width="434" height="174" alt="image"
src="https://github.com/user-attachments/assets/5d9dc140-7abe-49a8-823a-58deb0e170dc"
/>
Rocky Shi
created
3d4582d
git: Skip setting language on git index buffer (#47524)
Click to expand commit body
Skipping setting the language on the git index text buffer improves
snappiness for (very) large git diff multibuffers and also significantly
lower peak and steady-state RSS. When tested on the chromium repo with
`git reset HEAD~1000` and *all* language extensions installed we notice:
* current `main`: peak RSS ~45GB, ss RSS ~39GB
* this patch: peak RSS ~30GB, ss RSS ~27GB
Release Notes:
- Improved memory usage of large git diff multibuffers.
Addressing the feedback left on a previous PR of mine:
https://github.com/zed-industries/zed/pull/46663. I feel like this is
worthy of a setting. Note, however, that this does not apply to typing
`ctrl-c` in the terminal from within the agent panel; this is purely
controlling what happens when you click on the "Stop" button in the
terminal tool call card.
Release Notes:
- Agent: Added a setting for controlling the behavior of the stop button
in the terminal tool call card (between cancelling the command to run
and the thread, or just the command).