11.3s -> 10.0s for silly stuff like extracting actions from crates.
project panel still depends on git_ui though..
Release Notes:
- N/A
Piotr Osiewicz
created
bf0dd40
zeta2: Make `new_text`/`old_text` parsing more robust (#42997)
Click to expand commit body
Closes #ISSUE
The model often uses the wrong closing tag, or has spaces around the
closing tag name. This PR makes it so that opening tags are treated as
authoritative and any closing tag with the name `new_text` `old_text` or
`edits` is accepted based on depth. This has the additional benefit that
the parsing is more robust with contents that contain `new_text`
`old_text` or `edits. I.e. the following test passes
```rust
#[test]
fn test_extract_xml_edits_with_conflicting_content() {
let input = indoc! {r#"
<edits path="component.tsx">
<old_text>
<new_text></new_text>
</old_text>
<new_text>
<old_text></old_text>
</new_text>
</edits>
"#};
let result = extract_xml_replacements(input).unwrap();
assert_eq!(result.file_path, "component.tsx");
assert_eq!(result.replacements.len(), 1);
assert_eq!(result.replacements[0].0, "<new_text></new_text>");
assert_eq!(result.replacements[0].1, "<old_text></old_text>");
}
```
Release Notes:
- N/A *or* Added/Fixed/Improved ...
It's unclear how this would ever be useful
cc @probably-neb
Release Notes:
- N/A
Conrad Irwin
created
0313292
Add HTTP transport support for MCP servers (#39021)
Click to expand commit body
### What this solves
This PR adds support for HTTP and SSE (Server-Sent Events) transports to
Zed's context server implementation, enabling communication with remote
MCP servers. Currently, Zed only supports local MCP servers via stdio
transport. This limitation prevents users from:
- Connecting to cloud-hosted MCP servers
- Using MCP servers running in containers or on remote machines
- Leveraging MCP servers that are designed to work over HTTP/SSE
### Why it's important
The MCP (Model Context Protocol) specification includes HTTP/SSE as
standard transport options, and many MCP server implementations are
being built with these transports in mind. Without this support, Zed
users are limited to a subset of the MCP ecosystem. This is particularly
important for:
- Enterprise users who need to connect to centralized MCP services
- Developers working with MCP servers that require network isolation
- Users wanting to leverage cloud-based context providers (e.g.,
knowledge bases, API integrations)
### Implementation approach
The implementation follows Zed's existing architectural patterns:
- **Transports**: Added `HttpTransport` and `SseTransport` to the
`context_server` crate, built on top of the existing `http_client` crate
- **Async handling**: Uses `gpui::spawn` for network operations instead
of introducing a new Tokio runtime
- **Settings**: Extended `ContextServerSettings` enum with a `Remote`
variant to support URL-based configuration
- **UI**: Updated the agent configuration UI with an "Add Remote Server"
option and dedicated modal for remote server management
### Changes included
- [x] HTTP transport implementation with request/response handling
- [x] SSE transport for server-sent events streaming
- [x] `build_transport` function to construct appropriate transport
based on URL scheme
- [x] Settings system updates to support remote server configuration
- [x] UI updates for adding/editing remote servers
- [x] Unit tests using `FakeHttpClient` for both transports
- [x] Integration tests (WIP)
- [x] Documentation updates (WIP)
### Testing
- Unit tests for both `HttpTransport` and `SseTransport` using mocked
HTTP client
- Manual testing with example MCP servers over HTTP/SSE
- Settings validation and UI interaction testing
### Screenshots/Recordings
[TODO: Add screenshots of the new "Add Remote Server" UI and
configuration modal]
### Example configuration
Users can now configure remote MCP servers in their `settings.json`:
```json
{
"context_servers": {
"my-remote-server": {
"enabled": true,
"url": "http://localhost:3000/mcp"
}
}
}
```
### AI assistance disclosure
I used AI to help with:
- Understanding the MCP protocol specification and how HTTP/SSE
transports should work
- Reviewing Zed's existing patterns for async operations and suggesting
consistent approaches
- Generating boilerplate for test cases
- Debugging SSE streaming issues
All code has been manually reviewed, tested, and adapted to fit Zed's
architecture. The core logic, architectural decisions, and integration
with Zed's systems were done with human understanding of the codebase.
AI was primarily used as a reference tool and for getting unstuck on
specific technical issues.
Release notes:
* You can now configure MCP Servers that connect over HTTP in your
settings file. These are not yet available in the extensions API.
```
{
"context_servers": {
"my-remote-server": {
"enabled": true,
"url": "http://localhost:3000/mcp"
}
}
}
```
---------
Co-authored-by: Conrad Irwin <conrad.irwin@gmail.com>
c44d937
agent_ui: Improve the modal to add LLM providers (#42983)
Click to expand commit body
Closes https://github.com/zed-industries/zed/issues/42807
This PR makes the modal to add LLM providers a bit better to interact
with:
1. Added a scrollbar
2. Made the inputs navigable with tab
3. Added some responsiveness to ensure it resizes on shorter windows
https://github.com/user-attachments/assets/758ea5f0-6bcc-4a2b-87ea-114982f37caf
Release Notes:
- agent: Improved the modal to add LLM providers by making it responsive
and keyboard navigable.
f1c2afd
Update codex docs to include configuration for third-party providers (#42973)
Click to expand commit body
Release Notes:
- N/A
Ben Brandt
created
ea120df
Revert "git: Remove JobStatus from PendingOp in favour of in-flight p… (#42970)
Click to expand commit body
…runing (#42955)"
This reverts commit 696fdd8fed12da625357dc75939b0787c171b5d7.
Release Notes:
- N/A
Jakub Konka
created
d2988ff
vim: Fix snapshot out of bounds indexing (#42969)
Click to expand commit body
Fixes ZED-38X
Release Notes:
- N/A
Lukas Wirth
created
f17d2c9
terminal_view: Fix terminal opening in root directory when editing single file corktree (#42953)
Click to expand commit body
Fixes #42945
## Problem
When opening a single file via command line (e.g., `zed
~/Downloads/file.txt`), the terminal panel was opening in the root
directory (/) instead of the file's directory.
## Root Cause
The code only checked for active project directory, which returns None
when a single file is opened. Additionally, file worktrees weren't
handling parent directory lookup.
## Solution
Added fallback logic to use the first project directory when there's no
active entry, and made file worktrees return their parent directory
instead of None.
## Testing
- All existing tests pass
- Added test coverage for file worktree scenarios
- Manually tested with `zed ~/Downloads/file.txt` - terminal now opens
in correct directory
This improves the user experience for users who frequently open single
files from the command line.
## Release Notes
- Fixed terminal opening in root directory when editing single files
from the command line
Engin Açıkgöz
created
c1d9dc3
Try reducing flakiness of fs-event tests by bumping timeout to 4s on CI (#42960)
Click to expand commit body
Release Notes:
- N/A
Antonio Scandurra
created
696fdd8
git: Remove JobStatus from PendingOp in favour of in-flight pruning (#42955)
Click to expand commit body
The idea is that we only store running (`!self.finished`) or finished
(`self.finished`) pending ops, while everything else (skipped, errored)
jobs are pruned out immediately. We don't really need them in the grand
scheme of things anyway.
Release Notes:
- N/A
Jakub Konka
created
980f8bf
Add a github issue label to shoo the stalebot away (#42950)
Click to expand commit body
Labeling an issue with "never stale" will keep the stalebot away; the
bot can get annoying in some situations otherwise.
Release Notes:
- N/A
Lena
created
2a3bcbf
Properly check chunk version on lsp store update (#42951)
Closes #42922
Release Notes:
- Fixed Correctly highlighting the 'for' keyword in Rust as
keyword.control only in for loops.
- Fixed Highlighting the 'await' keyword in Rust as keyword.control
aleanon
created
5c70f83
Fix panic when using sweep AI without token env var (#42940)
Click to expand commit body
Release Notes:
- N/A
Max Brunsfeld
created
10efbd5
agent_ui: Show the "new thread" keybinding for the currently active agent (#42939)
Click to expand commit body
This PR's goal is to improve discoverability of how Zed "remembers" the
currently selected agent when hitting `cmd-n` (or `ctrl-n`). Hitting
that binding starts a new thread with whatever agent is currently
selected.
In the example below, I am in a Claude Code thread and if I hit `cmd-n`,
a new, fresh CC thread will be started:
<img width="500" height="822" alt="Screenshot 2025-11-18 at 1 13@2x"
src="https://github.com/user-attachments/assets/d3acd1aa-459d-4078-9b62-bbac3b8c1600"
/>
Release Notes:
- agent: Improved discoverability of the `cmd-n` keybinding to create a
new thread with the currently selected agent.
Only for staff
Release Notes:
- N/A
---------
Co-authored-by: Max Brunsfeld <maxbrunsfeld@gmail.com>
Co-authored-by: Ben Kunkle <ben@zed.dev>
Agus Zubiaga
,
Max Brunsfeld
, and
Ben Kunkle
created
a39ba03
Use metrics-id for sentry user id when we have it (#42931)
Click to expand commit body
This should make it easier to correlate Sentry reports with user reports
and
github issues (for users who have diagnostics enabled)
Release Notes:
- N/A
Conrad Irwin
created
2c7bcfc
multi_buffer: Work around another panic bug in path_key (#42920)
Click to expand commit body
Fixes ZED-346 for now until I find the time to dig into this bug
properly
Release Notes:
- Fixed a panic in the diagnostics pane
As discussed in the first responders meeting. We have collected a lot of
backtraces from these, but it's not quite clear yet what causes this.
Removing these should ideally make things a bit more stable even if we
may run into panics later one when the faulty anchor is used still.
Release Notes:
- N/A *or* Added/Fixed/Improved ...
Closes #40906
Closes #39729
SFTP uploads weren't quoting the install directory which was causing
extension syncing to fail. We were also only running `install_extension`
once per remote-connection instead of once per project (thx @feeiyu for
pointing this out) so extension weren't being loaded in subsequently
opened remote projects.
Release Notes:
- N/A
---------
Co-authored-by: Conrad Irwin <conrad.irwin@gmail.com>
Julia Ryan
and
Conrad Irwin
created
98a83b4
agent_ui: Make input fields in Bedrock settings keyboard navigable (#42916)
Click to expand commit body
Closes https://github.com/zed-industries/zed/issues/36587
This PR enables jumping from one input to the other, in the Bedrock
settings section, with tab.
Release Notes:
- N/A
Danilo Leal
created
5f356d0
agent_ui: Fix model name label truncation (#42921)
Click to expand commit body
Closes https://github.com/zed-industries/zed/issues/32739
Release Notes:
- agent: Fixed an issue where the label for model names wouldn't use all
the available space in the model picker.
Danilo Leal
created
73d3f96
collab: Add `external_id` column to `billing_customers` table (#42923)
Click to expand commit body
This PR adds an `external_id` column to the `billing_customers` table.
Release Notes:
- N/A
This fixes various issues where rustfmt failed to format code due to too
long strings, most of which I stumbled across over the last week and
some additonal ones I searched for whilst fixing the others.
Release Notes:
- N/A
The `Vim.exit_temporary_normal` method had been updated
(https://github.com/zed-industries/zed/pull/42742) to expect and
`Option<&Motion>` that would then be used to determine whether to move
the cursor right in case the motion was `Some(EndOfLine { ..})`.
Unfortunately this meant that all callers now had to provide this
argument, even if just `None`.
After merging those changes I remember that we could probably play
around with `clip_at_line_ends` so this commit removes those intial
changes in favor of updating the `vim::normal::Vim.move_cursor` method
so that, if vim is in temporary mode and `EndOfLine` is used, it
disables clipping at line ends so that the newline character can be
selected.
Closes [#42278](https://github.com/zed-industries/zed/issues/42278)
Release Notes:
- N/A
Dino
created
d801d09
Add @miguelraz to reviewers and support sections (#42904)
Closes #ISSUE
Makes it so that a file named `bucketed_analysis.md` is written to the
runs directory after an eval is ran with > 1 repetitions. This file
buckets the predictions made by the model by comparing the edits made so
that seeing how many times different failure modes were encountered
becomes much easier.
Release Notes:
- N/A *or* Added/Fixed/Improved ...
Ben Kunkle
created
599a217
workspace: Fix logging of errors in `prompt_err` (#42908)
b0a7def
Fix track file renames in git panel (#42352)
Click to expand commit body
Closes #30549
Release Notes:
- Fixed: Git renames now properly show as renamed files in the git panel
instead of appearing as deleted + untracked files
<img width="351" height="132" alt="Screenshot 2025-11-10 at 17 39 44"
src="https://github.com/user-attachments/assets/80e9c286-1abd-4498-a7d5-bd21633e6597"
/>
<img width="500" height="95" alt="Screenshot 2025-11-10 at 17 39 55"
src="https://github.com/user-attachments/assets/e4c59796-df3a-4d12-96f4-e6706b13a32f"
/>
ozzy
created
57e3bcf
Revise R documentation - about Air in particular (#42755)
Click to expand commit body
Returning the favor from @rgbkrk in
https://github.com/posit-dev/air/pull/445
I noticed the R docs around Air are a bit incorrect / out of date. I'll
make a few more comments inline. Feel free to take over for any other
edits.
Release Notes:
- Improved R language support documentation
Davis Vaughan
created
b2f5611
zeta2: Support qwen3-minimal prompt format (#42902)
Click to expand commit body
This prompt is for a fine-tuned model. It has the following changes,
compared to `minimal`:
- No instructions at all, except for one sentence at the beginning of
the prompt.
- Output is a simplified unified diff -- hunk headers have no line
counts (e.g., `@@ -20 +20 @@`)
- Qwen's FIM tokens are used where possible (`<|file_sep|>`,
`<|fim_prefix|>`, `<|fim_suffix|>`, etc.)
To evaluate this model:
```
ZED_ZETA2_MODEL=zeta2-exp [usual zeta-cli eval params ...] --prompt-format minimal-qwen
```
This will point to the most recent Baseten deployment of zeta2-exp
(which may change in the future, so the prompt-format may get out of
sync).
Release Notes:
- N/A
Oleksiy Syvokon
created
fd1494c
Fix remote server completions not being queried from all LSP servers (#42723)
Click to expand commit body
Closes #41294
Release Notes:
- Fixed remote LSPs not being queried
localcc
created
faa1136
agent_ui: Don't create a new terminal when hitting the new thread binding from the terminal (#42898)
Click to expand commit body
Closes https://github.com/zed-industries/zed/issues/32701
Release Notes:
- agent: Fixed a bug where hitting the `NewThread` keybinding when
focused inside a terminal within the agent panel would create a new
terminal tab instead of a new thread.
Danilo Leal
created
6bf5e92
Revert "Keep selection in `SwitchToHelixNormalMode` (#41583)" (#42892)
Click to expand commit body
Closes #ISSUE
Release Notes:
- Fixes vim "go to definition" making a selection
Follow up to https://github.com/zed-industries/zed/pull/42556
Release Notes:
- N/A *or* Added/Fixed/Improved ...
Lukas Wirth
created
671500d
agent_ui: Fix images copied from win explorer not being pastable (#42858)
Click to expand commit body
Closes https://github.com/zed-industries/zed/issues/41505
A bit adhoc but it gets the job done for now
Release Notes:
- Fixed images copied from windows explorer not being pastable in the
agent panel
Lukas Wirth
created
0519c64
Deduplicate inlays when getting those from multiple language servers (#42899)
Click to expand commit body
Part of https://github.com/zed-industries/zed/issues/42671
Release Notes:
- Deduplicate inlay hints from different language servers
Closes #34069
<img width="532" height="880" alt="Screenshot 2025-11-17 at 11 14 19 AM"
src="https://github.com/user-attachments/assets/abc50c32-d54d-4310-a6e6-83008db7ed81"
/>
<img width="525" height="863" alt="Screenshot 2025-11-17 at 12 22 50 PM"
src="https://github.com/user-attachments/assets/15a69792-c2c7-4727-add9-c1f9baa5e665"
/>
Release Notes:
- Agent file edits now error if the file has changed since last read
(allowing the agent to read changes and avoid overwriting changes made
outside Zed)
Richard Feldman
created
4b050b6
Support Agent Servers on remoting (#42683)
Click to expand commit body
<img width="348" height="359" alt="Screenshot 2025-11-13 at 6 53 39 PM"
src="https://github.com/user-attachments/assets/6fe75796-8ceb-4f98-9d35-005c90417fd4"
/>
Also added support for per-target env vars to Agent Server Extensions
Closes https://github.com/zed-industries/zed/issues/42291
Release Notes:
- Per-target env vars are now supported on Agent Server Extensions
- Agent Server Extensions are now available when doing SSH remoting
---------
Co-authored-by: Lukas Wirth <me@lukaswirth.dev>
Co-authored-by: Mikayla Maki <mikayla.c.maki@gmail.com>
Richard Feldman
,
Lukas Wirth
, and
Mikayla Maki
created
bb46bc1
settings_ui: Add "Edit in settings.json" button to subpage header (#42886)
Click to expand commit body
Closes https://github.com/zed-industries/zed/issues/42094
This will make it consistent with the regular/main page. Also ended up
fixing a bug along the way where this button wouldn't work for subpage
items.
Release Notes:
- settings ui: Fixed a bug where the "Edit in settings.json" wouldn't
work for subpages like all the Language pages.
Danilo Leal
created
b274f80
zeta2: Print average length of prompts and outputs (#42885)
Click to expand commit body
Release Notes:
- N/A
Oleksiy Syvokon
created
d77ab99
keymap_editor: Make "toggle exact match mode" the default for binding search (#42883)
Click to expand commit body
I think having the "exact mode" turned on by default is usually what
users will expect when searching for a specific keybinding. When it's
turned off, it's very odd to search for a super common binding like
"command-enter" and get no results. That happens because without that
mode, we're trying to match for subsequent matches, which I'm betting
it's an edge case. Hopefully, this change will make the keymap editor
feel more like it works well.
I'm also adding the toggle icon button inside the keystroke input for
consistency with the project search input.
Making this change very inspired by [Sam Rose's
feedback](https://bsky.app/profile/samwho.dev/post/3m5juszqyd22w).
Release Notes:
- keymap editor: Made the "toggle exact match mode" the default
keystroke search mode so that whatever you search for matches exactly to
results.