71c5e14
Add `ep repair` command to address judge feedback (#47646)
Click to expand commit body
Release Notes: - N/A
Oleksiy Syvokon created
71c5e14
Add `ep repair` command to address judge feedback (#47646)
Release Notes: - N/A
Oleksiy Syvokon created
c31ad94
agent: Encourage more parallel tool use (#47644)
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)
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)
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)
Release Notes: - N/A
Max Brunsfeld created
9e183d9
project: Do not send `UpdateProject` message on remote server spawn (#47633)
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)
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)
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)
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`.
Xin Zhao created
b397bd0
remote: Add configurable remote server cache retention (default 5) (#47202)
Release Notes: - Zed now removes older cached remote server downloads --------- Signed-off-by: Xiaobo Liu <cppcoffee@gmail.com>
Xiaobo Liu created
9d7b659
git: Fix incorrect diff transforms being computed for side-by-side diff LHS (#47515)
`compare_hunks` was emitting an incorrectly small range for `base_text_byte_range` in some cases. Release Notes: - N/A
Cole Miller created
9e2c415
git: Fix incorrect spacers for added or deleted files at the end of the multibuffer (#47525)
Release Notes: - N/A --------- Co-authored-by: Zed Zippy <234243425+zed-zippy[bot]@users.noreply.github.com>
Cole Miller and Zed Zippy created
c8139fb
git: Fix missing spacers in side-by-side diff when editing inside an addition hunk (#47568)
Release Notes: - N/A
Cole Miller created
6ebcd84
git: Ensure folded buffers are synced when deploying side-by-side diff (#47498)
Release Notes: - N/A --------- Co-authored-by: Zed Zippy <234243425+zed-zippy[bot]@users.noreply.github.com>
Cole Miller and Zed Zippy created
aceff52
project: Move tests to integration layer (#47596)
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)
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)
## 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>
Anil Pai and Piotr Osiewicz created
e464905
build: Re-enable incremental compilation (#47586)
Marco Mihai Condrache created
b584192
terminal: Fix terminal freeze when child process is killed by signal (#47420)
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)
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)
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)
Release Notes: - N/A
Ben Brandt created
9931c6f
Add SSH remote server for Windows (#47460)
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)
- 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)
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)
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.
Jakub Konka created
19b4e43
agent: Add setting for controlling terminal tool stop button behavior (#47521)
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).
Danilo Leal created
2301c5f
Send EP trigger as part of zeta2 prediction request (#47523)
Release Notes: - N/A
Max Brunsfeld created
84b40d5
ep: Add `qa` subcommand to check predictions quality (#47520)
Release Notes: - N/A
Oleksiy Syvokon created
ff34f22
zeta2: Include context in captured examples (#47516)
Closes #ISSUE Release Notes: - N/A *or* Added/Fixed/Improved ... --------- Co-authored-by: Zed Zippy <234243425+zed-zippy[bot]@users.noreply.github.com>
Ben Kunkle and Zed Zippy created
e1076cd
languages: Add structs, unions and enums to outline in C (#46125)
Before: <img width="1179" height="739" alt="before" src="https://github.com/user-attachments/assets/de594de2-ac70-40cf-8813-bb8c02e95014" /> After: <img width="1009" height="696" alt="after" src="https://github.com/user-attachments/assets/b68b9f84-7f15-4baf-99ed-a259ca07e815" /> Release Notes: - Fixed struct union enum outline issues for c
ozacod created
56c10d5
git_graph: Add resizable columns (#47485)
Release Notes: - N/A Signed-off-by: Marco Mihai Condrache <52580954+marcocondrache@users.noreply.github.com> Co-authored-by: Anthony Eid <anthony@zed.dev> Co-authored-by: Remco Smits <djsmits12@gmail.com>
Marco Mihai Condrache , Anthony Eid , and Remco Smits created
2bfe0bf
git_graph: Add loading icon when loading initial commit chunk (#47514)
Release Notes: - N/A Co-authored-by: Remco Smits <djsmits12@gmail.com> Co-authored-by: Marco Mihai Condrache <52580954+marcocondrache@users.noreply.github.com>
Anthony Eid , Remco Smits , and Marco Mihai Condrache created
9569157
Clean up error handling for some edge cases to prevent panic (#47513)
Release Notes: - Improved error handling in the dev container crate to prevent panics
KyleBarton created
38821a6
Reduce intensity of refreshing pull diagnostics (#47510)
Before this change we'd spawn N tasks in parallel on every keystroke, afterwards we only allow 1 background diagnostic refresh in flight at a time. This also fixed a bug where we'd send O(n*2) pull diagnostic requests when re-opening a workspace with n editors. Co-authored-by: John Tur <john-tur@outlook.com> Closes #ISSUE Release Notes: - Improved performance when a large number of files were open by making background diagnostics more efficient --------- Co-authored-by: John Tur <john-tur@outlook.com>
Conrad Irwin and John Tur created
25904f6
Add support for refreshing outdated LLM tokens (#47512)
This PR adds support for refreshing LLM tokens that are "outdated"—that is, that are missing some required claims. Release Notes: - Fixed some instances of authentication errors with the Zed API that could be resolved automatically by refreshing the token.
Marshall Bowers created
fa534ae
Don't try to spawn conda if it's not there (#47261)
Closes #ISSUE Release Notes: - Fixed conda showing up in terminal windows
Conrad Irwin created
097cfae
Add helper method for checking if the LLM token needs to be refreshed (#47511)
This PR adds a new `needs_llm_token_refresh` helper method for checking if the LLM token needs to be refreshed. We were duplicating the check for the `x-zed-expired-token` header in a number of spots, and it will be gaining an additional case soon. Release Notes: - N/A
Marshall Bowers created
5d8fd87
editor: Fix bracket color change when system theme changes (#47505)
Closes #47503 I added an observer for `GlobalTheme` changes that check if the accent colors have changed or not. I thought this was closest to the patterns and style in the codebase. I also considered triggering a `SettingsStore` notification on theme reload but that seemed incorrect since the settings didn't really change, even if it would solve the problem (as the editor already observes `SettingsStore` to detect theme changes. Release Notes: - Fixed Bracket color not updating when system theme changes
Smit Chaudhary created
30f8841
editor: Fix inlay hint navigation for WSL/remote file paths (#46473)
Closes #46113 Release Notes: - N/A *or* Added/Fixed/Improved ...
Xin Zhao created
c474771
git_graph: Fix subject not wrapping (#47486)
Before: <img width="314" height="111" alt="image" src="https://github.com/user-attachments/assets/8e3b6ac9-81f5-4d21-aa51-9807afe4a732" /> After: <img width="314" height="111" alt="image" src="https://github.com/user-attachments/assets/d209c38a-9105-4c4f-908e-ca0e063c0cbc" /> Release Notes: - N/A Signed-off-by: Marco Mihai Condrache <52580954+marcocondrache@users.noreply.github.com>
Marco Mihai Condrache created
9201e1f
Don't always expose streaming edit tool (#47495)
Release Notes: - N/A
Michael Benfield created
6b0b95f
Show red X icon for interrupted subagents (#47499)
<img width="677" height="218" alt="Screenshot 2026-01-23 at 11 59 24 AM" src="https://github.com/user-attachments/assets/864c706f-6f9f-44dd-a18c-509f2bed164f" /> When a thread is interrupted while subagents are running, the subagent cards now show a red X icon instead of a green checkmark. This provides clearer visual feedback that the subagent was canceled rather than completed successfully. The icon logic now handles three states: - **Spinner**: when status is Pending or InProgress - **Red X**: when status is Canceled, Failed, or Rejected - **Green checkmark**: when status is Completed This matches the existing pattern used elsewhere in the codebase for showing error states on tool calls. (No release notes because subagents are still behind a feature flag.) Release Notes: - N/A
Richard Feldman created
01d72aa
editor: Fix panics that could occur when content mask had negative bounds (#47327)
Closes #47157 This panic happened because the editor was using `window.content_mask` to get the visible bounds, which had a negative value for its height in some cases. This happened for three reasons: 1. `Bounds::from_corners` returns a negative size if callers pass in corners where `bottom_right < top_left`. I originally wanted to add error checking to this function but didn't, because it might be better to move the error checking higher up. For now I'm going to push a fix and figure out a better solution later 2. `Bounds::intersect` could return negative-sized bounds when the two bounds didn't overlap, instead of returning a zero sized bounds. 3. `Style::paint` sometimes passed invalid corner values to `Bounds::from_corners` (where the computed bottom-right was above/left of the top-left). Release Notes: - editor: Fix a crash that could happen when editor visible line height is zero --------- Co-authored-by: Zed Zippy <234243425+zed-zippy[bot]@users.noreply.github.com>
Anthony Eid and Zed Zippy created
c999759
build: Simplify build graph (#47253)
- **title_bar: Extract platform_title_bar from title_bar** - **file_finder no longer depends on search and agent_servers no longer depend on language_models** Release Notes: - N/A --------- Co-authored-by: Zed Zippy <234243425+zed-zippy[bot]@users.noreply.github.com>
Piotr Osiewicz and Zed Zippy created
8419979
acp: Add one more registry ID to filter out (#47496)
Release Notes: - N/A
Ben Brandt created
29cf14e
Fix rate limiter holding permits during tool execution (#47494)
The rate limiter's semaphore guard was being held for the entire duration of a turn, including during tool execution. This caused deadlocks when subagents tried to acquire permits while parent requests were waiting for them to complete. ## The Problem In `run_turn_internal`, the stream (which contains the `RateLimitGuard` holding the semaphore permit) was kept alive throughout the entire loop iteration - including during **tool execution**: 1. Parent request acquires permit 2. Parent starts streaming, consumes response 3. Parent starts executing tools (subagents) 4. **Stream/guard still held** while tools execute 5. Subagents try to acquire permits → blocked because parent still holds permit 6. Deadlock if all permits are held by parents waiting for subagent children ## The Fix Two changes were made: 1. **Drop the stream early**: Added an explicit `drop(events)` after the stream is fully consumed but before tool execution begins. This releases the rate limit permit so subagents can acquire it. 2. **Removed the `bypass_rate_limit` workaround**: Since the root cause is now fixed, the bypass mechanism is no longer needed. Note: no release notes because subagents are still feature-flagged, and this rate limiting change isn't actually observable without them. Release Notes: - N/A
Richard Feldman created
9ef825d
docs: Improve Git documentation accuracy and structure (#47419)
This PR updates the Git documentation to accurately reflect the current UI and removes inaccuracies introduced in earlier drafts. **Changes:** - **Added Word Diff setting location**: The `word_diff_enabled` setting is accessible in the Settings Editor under **Languages & Tools > Miscellaneous**, which wasn't documented. - **Simplified Remotes section**: Removed claims about command palette actions for managing remotes that don't exist. The section now accurately describes the remote selector in the Git Panel. - **Added File History section**: Combined two paragraphs that said the same thing. Release Notes: - N/A --------- Co-authored-by: Zed Zippy <234243425+zed-zippy[bot]@users.noreply.github.com>
Katie Geer and Zed Zippy created
e6d8797
Allow specifying ZED_VERSION with fallback to latest in `install.sh` (#45522)
This PR updates the Linux install script to support installing a specific version of Zed via the ZED_VERSION environment variable. - If ZED_VERSION is set, that version will be downloaded. - If ZED_VERSION is not set, the script defaults to the latest stable version, preserving existing behavior. - Works for both Linux and macOS installs. - Maintains compatibility with ZED_CHANNEL for preview builds. This enhancement allows users to: - Pin a specific Zed version for reproducible setups or CI workflows. - Easily install older or known-good versions without manually downloading release assets. Usage examples: - Install latest stable (default): curl -f https://zed.dev/install.sh | sh - Install specific version: curl -f https://zed.dev/install.sh | ZED_VERSION=0.216.0 sh Use this — it’s correct, concise, and clearly user-facing: Release Notes * **Added:** Support for installing a specific Zed version via the `ZED_VERSION` environment variable in the install script (defaults to `latest` when unset).
Winner Edwin created
7c98f17
copilot: Decouple authentication from the lifetime of any single Copilot instance (#47473)
Users had trouble signing in due to us relying on the Copilot::global being set, which was never the case. We've decided to use a dedicated LSP instance just for handling auth of Copilot Chat and other goodies. That instance is subscribed to by local Copilot instances for projects. When the Auth instance changes it's state, local instances are prompted to re-check their own sign in status. Closes #47352 Co-authored-by: dino <dinojoaocosta@gmail.com> Release Notes: - Fixed authentication issues with Copilot. --------- Co-authored-by: dino <dinojoaocosta@gmail.com> Co-authored-by: Zed Zippy <234243425+zed-zippy[bot]@users.noreply.github.com>
Piotr Osiewicz , dino , and Zed Zippy created