Merge upstream Zed (172 commits) — task 001980 - #49
Merged
Conversation
Closes zed-industries#49186 <img width="403" height="136" alt="first" src="https://github.com/user-attachments/assets/dafaa681-b921-4411-a453-8857681e50f8" /> Closes zed-industries#45775 <img width="405" height="104" alt="second" src="https://github.com/user-attachments/assets/17e3b5df-0d61-47f3-88ff-8aeeafae1425" /> Release Notes: - Fixed whitespace rendering in Zed
Closes zed-industries#54042 Part of zed-industries#9789 This binary was not found when Zed first downloads the release, and then rerun offline on the same project. Using a `clangd-windows-21.1.0.zip ` archive from https://github.com/clangd/clangd/releases/tag/21.1.0 ``` ~/Downloads ❯ unzip -l clangd-windows-21.1.0.zip|rg clangd.exe 46908928 08-27-2025 01:40 clangd_21.1.0/bin/clangd.exe ``` Similarly, delve releases are in https://github.com/go-delve/delve/releases and codelldb are in https://github.com/vadimcn/codelldb/releases ``` ~/Downloads ❯ unzip -l codelldb-win32-x64.vsix|rg exe 1014272 04-21-2026 03:05 extension/bin/codelldb-launch.exe 4400128 04-21-2026 03:05 extension/adapter/codelldb.exe 242176 04-14-2026 04:14 extension/lldb/bin/lldb.exe 6272000 04-14-2026 04:14 extension/lldb/bin/lldb-server.exe 96768 04-14-2026 01:42 extension/lldb/bin/lldb-argdumper.exe 96768 04-14-2026 04:13 extension/lldb/lib/lldb-python/lldb/lldb-argdumper.exe 35284 04-14-2026 01:36 extension/lldb/lib/site-packages/pip/_vendor/pygments/lexer.py 101888 04-14-2026 01:36 extension/lldb/lib/site-packages/pip/_vendor/distlib/w64.exe 168448 04-14-2026 01:36 extension/lldb/lib/site-packages/pip/_vendor/distlib/w64-arm.exe 91648 04-14-2026 01:36 extension/lldb/lib/site-packages/pip/_vendor/distlib/w32.exe 108032 04-14-2026 01:36 extension/lldb/lib/site-packages/pip/_vendor/distlib/t64.exe 182784 04-14-2026 01:36 extension/lldb/lib/site-packages/pip/_vendor/distlib/t64-arm.exe 97792 04-14-2026 01:36 extension/lldb/lib/site-packages/pip/_vendor/distlib/t32.exe 12161 04-14-2026 01:36 extension/lldb/lib/site-packages/pip/_vendor/pygments/lexers/__init__.py 74926 04-14-2026 01:36 extension/lldb/lib/site-packages/pip/_vendor/pygments/lexers/_mapping.py 53448 04-14-2026 01:36 extension/lldb/lib/site-packages/pip/_vendor/pygments/lexers/python.py ``` Release Notes: - Fixed offline lookup of clangd on Windows
Follow-up to zed-industries#54100 Instead of relying on "line number" that could have overlapped depending on the range we query, use hierarchical IDset: `block id -> lens #` to ensure no clashes happen anymore. Release Notes: - N/A
…ed-industries#54717) Expand all excerpts had a doc comment describing it as expanding all excerpts, but in practice it only expanded the excerpt that was the most relevant. I fixed that to make it expand all excerpts. video: https://github.com/user-attachments/assets/9858ebda-199c-4f72-8a2f-3cd606b0eff4 Self-Review Checklist: - [x] I've reviewed my own diff for quality, security, and reliability - [x] Unsafe blocks (if any) have justifying comments - [x] The content is consistent with the [UI/UX checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable Closes zed-industries#54651 Release Notes: - editor: `expand excerpts` now has correct documentation explaining its function.
Skip PTY resizes for pixel-only changes and coalesce pending resize events. Snap standalone terminal layout to whole device pixels to avoid subpixel jitter. before: https://github.com/user-attachments/assets/0ad0db83-0099-44c8-b8d1-3dc8146b25ef after: https://github.com/user-attachments/assets/86278014-1c87-4263-a9e5-b58bcc1fa2ea Release Notes: - Fixed: Reduce terminal flicker on resize --------- Signed-off-by: pigletfly <wangbing.adam@gmail.com> Co-authored-by: Ben Kunkle <ben@zed.dev>
Self-Review Checklist: - [x] I've reviewed my own diff for quality, security, and reliability - [x] Unsafe blocks (if any) have justifying comments - [x] The content is consistent with the [UI/UX checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable Release Notes: - Fixed accidental duplication of words in themes.md
…mmands (zed-industries#54011) Found this bug while investigating why configuring nextest based on the instructions at rust-lang/rust-analyzer#21137 (comment) wasn't working within Zed. Previously, we'd use `serde(untagged)`, preferring cargo over shell commands. The problem is that every instance of a shell command is a valid instance of a cargo command. For example, the shell command: ```json { "label": "test my_test", "kind": "shell", "args": { "environment": {"RUSTC_TOOLCHAIN": "/path/to/toolchain"}, "cwd": "/project", "program": "cargo", "args": ["nextest", "run", "--package", "my-crate", "--lib", "--", "my_test", "--exact", "--include-ignored"] } } ``` would end up getting deserialized as a Cargo command, silently dropping `program` and `args`. With this fix, we now use the provided `kind` as a tag. We do have to introduce a `#[serde(flatten)]` unfortunately, which has a few side effects due to internal buffering, but `#[serde(untagged)]` also does internal buffering so this doesn't make things worse. I've manually tested this by configuring: ```json { "lsp": { "rust-analyzer": { "initialization_options": { "runnables": { "test": { "overrideCommand": [ "cargo", "nextest", "run", "--package", "${package}", "${target_arg}", "${target}", "--", "${test_name}", "${exact}", "${include_ignored}" ] } } } } } } ``` and ensuring that nextest is correctly invoked. Self-Review Checklist: - [x] I've reviewed my own diff for quality, security, and reliability - [x] Unsafe blocks (if any) have justifying comments - [x] The content is consistent with the [UI/UX checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable Release Notes: - Fixed deserialization of rust-analyzer shell runnables. --------- Co-authored-by: Kirill Bulatov <kirill@zed.dev>
Quick fix for a little regression I introduced in zed-industries#54791 accidentally removing the rotating spinner icon in the activity indicator. Release Notes: - N/A
…ain set in Zed (zed-industries#48262) Closes zed-industries#46754 Release Notes: - python: User settings now take precedence over toolchain set in Zed for pyright/basedpyright
The DAP TCP transport layer was hardcoded to `Ipv4Addr`, so IPv6 addresses like `fd00::a` in a debug config's `connect.host` always failed with `hostname must be IPv4: invalid IPv4 address syntax`. Replaced `Ipv4Addr` with `IpAddr` and `SocketAddrV4` with `SocketAddr` across the `task`, `dap`, `dap_adapters`, and `project` crates. The WASM extension API still uses `u32` for the host field to avoid a breaking WIT interface change; IPv4 round-trips through extensions as before. Fixes zed-industries#52237 Release Notes: - Fixed DAP TCP transport rejecting IPv6 addresses when connecting to remote debug adapters. --------- Co-authored-by: moktamd <moktamd@users.noreply.github.com>
…ries#53236) Changes Made: - Adding the `Item::can_save()`, `save()`, `save_as()`, `can_save_as()` functions to help the Editor save when a checkbox is toggled - Small refactor to seperate checkbox toggle and refreshing preview - Adding support for both `/...` and `\\...` for windows users. [NOTE: I no longer own a window's machine and I am unsure if this is correct, and will fix it immediately if this is wrong] - Resolving preview paths, strips out the fragment, and image paths are coalesced to None if they don't exist - Adding Tests for the added behaviour [NOTE: would love feedback since this is the first time I am writing tests, and had a bit of assistance from an AI, but manually reviewed the code and ran the application and it seemed fine] Self-Review Checklist: - [X] I've reviewed my own diff for quality, security, and reliability - [X] Unsafe blocks (if any) have justifying comments - [X] The content is consistent with the [UI/UX checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) - [X] Tests cover the new/changed behavior - [X] Performance impact has been considered and is acceptable Closes zed-industries#46901 Release Notes: - Fixed Crtl+S saving while toggling checkbox in preview mode
I might turn this into a big PR with multiple fixes. So no, this is not going stale. I’m updating this as and when I find broken refs or stale content. Release Notes: - N/A --------- Co-authored-by: Marshall Bowers <git@maxdeviant.com>
Self-Review Checklist: - [x] I've reviewed my own diff for quality, security, and reliability - [x] Unsafe blocks (if any) have justifying comments - [x] The content is consistent with the [UI/UX checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable Closes zed-industries#54737. zed-industries#48752 added empty-prefix `block_comment` entries to several language configs (Go, C, C++, JSONC, Python, JSX inner) to support the new toggle-block-comments action. In `Editor::rewrap_impl`, the comment-format matcher used `buffer.contains_str_at(indent_end, &config.prefix)` to decide whether the current line is a continuation of a block comment. When the language is configured with an empty prefix, this is true on every line. `//` (and `#`) line comments inside a `comment` override scope were classified as `BlockLine("")` and never reached the line-comment fallback. The result was that the line-comment prefix was not stripped before wrapping and not re-prepended after, embedding `//` markers as text in the wrapped paragraph. Skip the BlockLine arm when the configured prefix is empty so the matcher falls through to `line_comment_prefixes`. I've included regression tests for both golang (which adds a new treesitter dep to the editor package) and C/C++. Release Notes: - Fixed line comment rewrapping in golang and C/C++
Self-Review Checklist: - [x] I've reviewed my own diff for quality, security, and reliability - [x] Unsafe blocks (if any) have justifying comments - [x] The content is consistent with the [UI/UX checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable Closes #zed-industries#42292 The text inserted in the search ('\$SEARCH') and replace ('$$OTHER') inputs of the top-panel is a little anti-aesthetic, but that seems out of scope for this issue. Release Notes: - '$' in the second clause of vim-style '%s/find/replace/g' actions is correctly escaped. Co-authored-by: Conrad Irwin <conrad.irwin@gmail.com>
…-industries#54899) Hi! 👋 When `base_keymap` is set to `None`, it disables all the keybindings, even if `vim_mode` or `helix_mode` is enabled. However, I think the Vim/Helix keybindings should be applied on top of the empty base keymap. My use case for this is to start with the minimal set of Vim/Helix key shortcuts and add other bindings on top of that, instead of flooding the keymap with hundreds of predefined shortcuts from some base keymap.
…-industries#54826) This PR fixes an issue introduced in zed-industries#54397 where the Zed Cloud provider would not be reflected as "authenticated" if a connection to Collab was attempted, but could not be established. This was especially noticable when running Zed against a local version of Cloud and not having Collab running. This restores the original logic prior to that change. Release Notes: - N/A
…ustries#53091) Closes zed-industries#52774 ## Summary - Bind Windows `Alt+F4` to `workspace::CloseWindow` in the `Terminal` keymap context - Add a regression test covering the built-in Windows terminal keymap entry ## Why When the integrated terminal is focused, `Alt+F4` should close the window instead of falling through to terminal keystroke handling. Handling this in the Windows `Terminal` keymap keeps the fix aligned with the rest of the terminal shortcut overrides. ## Validation - `cargo test -p settings windows_terminal_keymap_closes_window_on_alt_f4` Release Notes: - Fixed Alt+F4 on Windows so Zed closes even when the integrated terminal is focused. --------- Co-authored-by: Jakub Konka <kubkon@jakubkonka.com>
…es#45764) Closes [zed-industries#45631](zed-industries#45631) Recording: https://github.com/user-attachments/assets/a5143eb4-fae3-42a7-9d64-fb7c42ee97c2 Release Notes: - copilot: Edit predictions now work in temporary files --------- Co-authored-by: Piotr Osiewicz <24362066+osiewicz@users.noreply.github.com>
…ays selecting the dark theme (zed-industries#54647) Self-Review Checklist: - [x] I've reviewed my own diff for quality, security, and reliability - [x] Unsafe blocks (if any) have justifying comments - [x] The content is consistent with the [UI/UX checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable Closes zed-industries#54646 Release Notes: - Fixed settings behavior where switching Icon Theme from "Dynamic" (System mode) to "Static" now selects the icon theme that matches the current OS appearance (light or dark), instead of always defaulting to the dark variant. --------- Co-authored-by: Marshall Bowers <git@maxdeviant.com>
…ries#52692) ### Description: Previously, formatting was only applied after manually saving the file, once it had already been created and saved. After the fix, when creating a new file from the editor and saving it for the first time with a filename, formatting is automatically applied if “format on save” is enabled. ### Self-Review Checklist: - [X] I've reviewed my own diff for quality, security, and reliability - [X] Unsafe blocks (if any) have justifying comments - [X] The content is consistent with the [UI/UX checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) - [X] Tests cover the new/changed behavior - [X] Performance impact has been considered and is acceptable Closes zed-industries#22534 Release Notes: - Fixed apply formatting when a new file is first created
From the [docs](https://developers.openai.com/api/docs/guides/migrate-to-responses#responses-benefits): > Better performance: Using reasoning models, like GPT-5, with Responses will result in better model intelligence when compared to Chat Completions. Our internal evals reveal a 3% improvement in SWE-bench with same prompt and setup. Agentic by default: The Responses API is an agentic loop, allowing the model to call multiple tools, like web_search, image_generation, file_search, code_interpreter, remote MCP servers, as well as your own custom functions, within the span of one API request. Lower costs: Results in lower costs due to improved cache utilization (40% to 80% improvement when compared to Chat Completions in internal tests). Stateful context: Use store: true to maintain state from turn to turn, preserving reasoning and tool context from turn-to-turn. Flexible inputs: Pass a string with input or a list of messages; use instructions for system-level guidance. Encrypted reasoning: Opt-out of statefulness while still benefiting from advanced reasoning. Future-proof: Future-proofed for upcoming models. Self-Review Checklist: - [x] I've reviewed my own diff for quality, security, and reliability - [x] Unsafe blocks (if any) have justifying comments - [x] The content is consistent with the [UI/UX checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) - [ ] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable Closes #ISSUE Release Notes: - Always use Responses API for OpenAI models
zed-industries#49540) When a model produces poor output during commit message generation, there was no way to cancel it. This replaces the non-interactive spinner with a Stop button that cancels the generation task. Partial generated text is kept in the editor. Partially addresses zed-industries#33556 <img width="1200" height="900" alt="2026-02-18-160103_hyprshot" src="https://github.com/user-attachments/assets/760e9681-b374-4f40-a4b1-0bb6775db17c" /> --- 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: - Added a button to stop commit message generation in the git panel --------- Co-authored-by: Danilo Leal <daniloleal09@gmail.com> Co-authored-by: Danilo Leal <67129314+danilo-leal@users.noreply.github.com>
…roups (zed-industries#53098) Fixes a bug in the split diff spacer calculation when a patch group starts mid-row, sometimes causing extra spacers to be inserted. `spacer_blocks` already explicitly handles the case where `first_point` isn't at the start of `edit_for_first_point.old`, but the `while let Some(source_point) = source_points.next()` loop that follows implicitly assumes that `source_point` is at the start of `current_range`, which in turn seems to be based on the assumption that `current_range` starts at the beginning of a row. As it turns out, `current_range` isn't guaranteed to start at the beginning of a row, which can sometimes lead to incorrect spacer blocks being inserted. This addresses that by moving the existing `if edit_for_first_point.old.start < first_point` logic into the loop body as `if current_edit.old.start < current_boundary` in order to handle any non-row-aligned patch groups, not just the first one. Here's an example of how this bug could manifest: https://github.com/user-attachments/assets/1d3a5b4c-e4ad-4d87-804b-c4390d25f408 After: https://github.com/user-attachments/assets/b15acc62-33fe-4154-82e5-5cdf1806ffa7 Self-Review Checklist: - [x] I've reviewed my own diff for quality, security, and reliability - [x] Unsafe blocks (if any) have justifying comments - [x] The content is consistent with the [UI/UX checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable Release Notes: - Fixed incorrect spacer blocks sometimes appearing in the split diff view when editing the file.
Self-Review Checklist: - [x] I've reviewed my own diff for quality, security, and reliability - [x] Unsafe blocks (if any) have justifying comments - [x] The content is consistent with the [UI/UX checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable Closes zed-industries#54093 (at least the os error 123 in the comments of that bug)/zed-industries#54901 (although the diagnosis in that bug is totally wrong) Used process monitor to work out what that issue was: <img width="1573" height="94" alt="image" src="https://github.com/user-attachments/assets/2f82ad1a-8532-465d-9dcd-ba0bd092e9e7" /> There's actually a '\n' after node_modules there so it's an invalid directory. Add trim() to fix. After adding that change locally, eslint loaded fine Release Notes: - Fixed bug where eslint didn't start on Windows
Added Vim mode navigation (`j`, `k`, `gg`, `G`) to the Git Graph view. [gitgraph-vim.webm](https://github.com/user-attachments/assets/b2dd31a5-deb0-48ab-a48d-8721ee500dad) Self-Review Checklist: - [x] I've reviewed my own diff for quality, security, and reliability - [x] Unsafe blocks (if any) have justifying comments - [x] The content is consistent with the [UI/UX checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable Closes zed-industries#53525 Release Notes: - Added vim mode navigation to git graph --------- Co-authored-by: Anthony Eid <anthony@zed.dev>
…ing (zed-industries#54998) Release Notes: - N/A
…4518) Self-Review Checklist: - [x] I've reviewed my own diff for quality, security, and reliability - [x] Unsafe blocks (if any) have justifying comments - [x] The content is consistent with the [UI/UX checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable Closes #ISSUE Release Notes: - N/A
) Self-Review Checklist: - [x] I've reviewed my own diff for quality, security, and reliability - [x] Unsafe blocks (if any) have justifying comments - [x] The content is consistent with the [UI/UX checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable Release Notes: - N/A
We need this nowaways outside of the octocrab feature too Release Notes: - N/A
reference: https://api-docs.deepseek.com/ Release Notes: - Added deepseek-v4-pro and deepseek-v4-flash models --------- Signed-off-by: Xiaobo Liu <cppcoffee@gmail.com> Co-authored-by: Ben Brandt <benjamin.j.brandt@gmail.com> Co-authored-by: MrSubidubi <dev@bahn.sh>
Use `future::join` when loading index and committed text for buffer diff bases, while keeping skipped loads as ready None futures. Release Notes: - N/A Signed-off-by: Xiaobo Liu <cppcoffee@gmail.com>
Self-Review Checklist: - [ ] I've reviewed my own diff for quality, security, and reliability - [ ] Unsafe blocks (if any) have justifying comments - [ ] The content is consistent with the [UI/UX checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) - [ ] Tests cover the new/changed behavior - [ ] Performance impact has been considered and is acceptable Release Notes: - Added a prompt to move Zed to /Applications on macOS when run from within the .dmg
The [Parallel Agents release](https://zed.dev/blog/parallel-agents) introduced a new default layout: the agent panel now docks on the left, while the project, git, outline, and collaboration panels now dock on the right. The rustdoc comments in `crates/settings_content` were not updated to reflect this change. This PR corrects the `Default:` values in the following structs: - `ProjectPanelSettingsContent.dock`: `left` → `right` - `GitPanelSettingsContent.dock`: `left` → `right` - `PanelSettingsContent.dock` (collaboration panel): `left` → `right` - `OutlinePanelSettingsContent.dock`: `left` → `right` - `AgentSettingsContent.dock`: `right` → `left` Self-Review Checklist: - [x] I've reviewed my own diff for quality, security, and reliability - [x] Unsafe blocks (if any) have justifying comments - [x] The content is consistent with the [UI/UX checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable Release Notes: - N/A
Self-Review Checklist: - [x] I've reviewed my own diff for quality, security, and reliability - [x] Unsafe blocks (if any) have justifying comments - [x] The content is consistent with the [UI/UX checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable Adds `editor: convert to base64` and `editor: convert from base64` to the command palette. Both commands operate on the current selection, or the word under the cursor when nothing is selected. The decode command silently no-ops on invalid base64 input or non-UTF-8 decoded bytes, consistent with how other convert commands handle untransformable input. Release Notes: - Added `editor: convert to base64` and `editor: convert from base64` commands to the command palette --------- Co-authored-by: Christopher Biscardi <chris@christopherbiscardi.com>
…es#55674) Fixes ZED-687 Release Notes: - N/A or Added/Fixed/Improved ...
Release Notes: - N/A or Added/Fixed/Improved ...
…ies#55715) * Perform grouping even for repositories that have no main worktree * Enable grouping for remote projects * Delete entire project groups when deleting via the recent project picker Release Notes: - Fixed a bug where each linked worktree appeared as its own entry in recent projects for repositories without main worktrees - Fixed a bug where deleting projects from the recent projects sometimes appeared to have no effect.
Adds 4 (technically 5) new tools to the zed agent, corresponding to LSP actions: - `find_references` - `goto_definition` - `rename_symbol` - `get_code_actions` and `apply_code_actions` Notes: - `rename_symbol` skips doing a `prepare_rename`. If there is nothing to rename at the position, it will forward the error to the agent - The code action tools are stateful. The state is stored in the `get_code_actions` tool itself as a `PendingCodeActions`. It is not passed into/out of subagents. Calling `apply_code_actions` without calling `get_code_actions` first is an error, but I've never seen an agent do this Symbols are identified by: - file name - line number - symbol If there is no substring match on that line for the symbol text, it is an error. If there are multiple, it chooses the first. This may not be great if you have a line like: `fn convert(x: foo::Something) -> bar::Something` - the second `Something` is a different symbol, but is inacessible to these tools. Probably fine for now, but we can look into improving Release Notes: - Added: New tools for the Zed Agent for interacting with language servers --------- Co-authored-by: Lukas Wirth <me@lukaswirth.dev>
- Rename `streaming_edit_file` to `edit_file` - Remove workaround for replacing old edit tool with streaming edit file tool Release Notes: - N/A
Release Notes: - N/A
Previously schemars generated oneOf variants for these enums (because we
added inline comments), making the schemas more complicated than they
had to be.
E.g. `edit_file` `mode`
Before:
```json
{
"mode": {
"description": "The mode of operation on the file. Possible values:\n- 'write': Replace the entire contents of the file. If the file doesn't exist, it will be created. Requires 'content' field.\n- 'edit': Make granular edits to an existing file. Requires 'edits' field.\n\nWhen a file already exists or you just created it, prefer editing it as opposed to recreating it from scratch.",
"oneOf": [
{
"description": "Overwrite the file with new content (replacing any existing content).\nIf the file does not exist, it will be created.",
"type": "string",
"const": "write"
},
{
"description": "Make granular edits to an existing file",
"type": "string",
"const": "edit"
}
]
}
}
```
After:
```json
{
"mode": {
"description": "The mode of operation on the file. Possible values:\n- 'write': Replace the entire contents of the file. If the file doesn't exist, it will be created. Requires 'content' field.\n- 'edit': Make granular edits to an existing file. Requires 'edits' field.\n\nWhen a file already exists or you just created it, prefer editing it as opposed to recreating it from scratch.",
"type": "string",
"enum": ["write", "edit"]
}
}
```
Release Notes:
- N/A
…ies#55757) Previously, we weren't waiting on the status future early enough so we would just hang if we weren't able to start the agent process. I also added the recent stderr logs in there to help the user debug the issue, since it is likely relevant in these cases. <img width="902" height="226" alt="image" src="https://github.com/user-attachments/assets/204e42ff-4c9b-49e7-8a6d-ecf7b022fbd0" /> Self-Review Checklist: - [x] I've reviewed my own diff for quality, security, and reliability - [x] Unsafe blocks (if any) have justifying comments - [x] The content is consistent with the [UI/UX checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable Release Notes: - acp: Improve error messages if the ACP agent fails to start.
Make this only pub(crate) in preparation for zed-industries#44827 Release Notes: - N/A
Lots of people are using `min-release-age` in their .npmrc files these days. I saw two options: 1. Force min-release-age=0 so we can always install the latest 2. Be more lenient in what we allow I opted for 2, which means we convert `package@0.1.2` to `package@<=0.1.2`. This means npm can find the latest version we can that meets the user's requirements. The downside is, the registry args/env may or may not work with the resolved version, but that should at least surface better thanks to zed-industries#55757 There is also the issue that npm will cache package metadata and an older version it has cached would still resolve. However, once the metadata is updated, npm does use the newer tarball at least, so it will update eventually. It's a tradeoff, but I'd rather start with this until we have a better solution on the ACP registry, rather than have users be upset becaue we installed packages in a way they didn't want. Self-Review Checklist: - [x] I've reviewed my own diff for quality, security, and reliability - [x] Unsafe blocks (if any) have justifying comments - [x] The content is consistent with the [UI/UX checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable Closes agentclientprotocol/claude-agent-acp#516 Release Notes: - acp: Better support min-release-age settings for npx-based agents from the registry
…55720) This PR adds an initial context menu to the git graph entries. There are a bunch of commit-specific actions we will likely want to add here over time (e.g. create a branch at this commit, revert, etc.), but for this PR, it only exposes the actions that were already available from the commit details panel: `Copy SHA` and `View Commit`. We will also need a context menu to land a future want of mine: custom git command support in the git graph. This was a bit trickier than a normal context menu addition because the git graph uses the selected entry to drive the commit details panel. If right-clicking a row went through the normal selection path, it would also pop open the commit details panel if it was closed, or change the commit currently being shown if it was already open. I don’t think right-clicking to open a context menu should do either of those things. The context menu target and the commit details panel should be independent of one another. To support that, this PR introduces `GitGraphContextMenu`. Most of this state was already present as a tuple for rendering a context menu, but it wasn’t wired up to graph rows. I pulled that state into its own type and added an `entry_idx` field to track which row the context menu was opened on. This lets the row highlight while the menu is open without changing the selected commit or opening the details panel. This also suppresses the commit subject tooltip while the context menu is open, matching the pattern used elsewhere to avoid tooltips appearing on top of context menus. Self-Review Checklist: - [x] I've reviewed my own diff for quality, security, and reliability - [x] Unsafe blocks (if any) have justifying comments - [x] The content is consistent with the [UI/UX checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) - [ ] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable Release Notes: - Added a context menu the git graph entrees
…ies#55574) OpenCode API endpoints for DeepSeek were [moved from Anthropic-compatible to OpenAI-compatible](anomalyco/opencode#24500) and DeepSeek requires interleaved reasoning enabled to work. I ran a _"rename this variable to potato"_ test and I can confirm DeepSeek V4 Flash and Pro both work now 🎉 Some other OpenCode Go models were marked [on models.dev](https://github.com/anomalyco/models.dev/tree/dev/providers/opencode-go/models) as supporting `interleaved_reasoning` so they too got that enabled. Kimi K2.5 and Kimi K2.6 continue to fail with zed-industries#51743 (zed-industries#55085 seems to hint at this being [an OpenCode issue](zed-industries#51743 (comment))?), but all other models seem to work fine both with `interleaved_reasoning` and without it 🤷 I assume it's better to have that turned on? Again, the intersection of OpenAI Chat Completions API, different models, different inference providers, how they all work together is something I know nothing about! Self-Review Checklist: - [X] I've reviewed my own diff for quality, security, and reliability - [X] Unsafe blocks (if any) have justifying comments - [X] The content is consistent with the [UI/UX checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) - [ ] Tests cover the new/changed behavior - [X] Performance impact has been considered and is acceptable Release Notes: - OpenCode Go: use correct DeepSeek endpoints - OpenCode: add support for interleaved_reasoning
…ed-industries#55776) See zed-industries#55186 (comment) I think the recent changes to the tool schema in zed-industries#55763 will make this more unlikely, but does not hurt to allow the model to provide `"utc"`. Release Notes: - N/A
This adds the functionality to support pasting the file path of an item when the copied item supports it. This mirrors the behavior of `Terminal.app` on macOS. This only implements the functionality on macOS but could be extended to other platforms. I find this convenient when I'm using Finder to navigate around the file system and I want to copy a directory or file path and put it in the terminal. You can copy the item from Finder and paste it into the terminal and it will write out the full path of the item, making it easy to change directories or provide path parameters to commands. Release Notes: - Added path pasting functionality in terminal
Pasting text or an image into a queued-message editor used to be a silent no-op for text and a panic for images. This change makes pasting into a queued message behave like typing into one: the queued message is promoted into the main editor at the cursor position, and the paste is then applied there. Self-Review Checklist: - [x] I've reviewed my own diff for quality, security, and reliability - [x] Unsafe blocks (if any) have justifying comments - [x] The content is consistent with the [UI/UX checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable Closes zed-industries#55521 Release Notes: - Fixed a crash when pasting an image into a queued message
…55783) We had a regression where the labels were being rendered as markdown, which is usually not what you want on a command Self-Review Checklist: - [x] I've reviewed my own diff for quality, security, and reliability - [x] Unsafe blocks (if any) have justifying comments - [x] The content is consistent with the [UI/UX checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) - [ ] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable Release Notes: - N/A
…d-industries#55053) ## Summary Fixes the `git: worktree` popup showing no worktrees when a project is opened at the parent of a `.bare` directory (the common bare-clone-with-sibling-worktrees layout). ## What's fixed - `crates/git/src/repository.rs` - New `git_binary_for_worktree_list` helper that uses `repository.path()` as the working directory when `workdir()` is `None`. - `worktrees()` switched to the new helper. - `parse_worktrees_from_str` accepts bare entries without a `HEAD` line. - Tests - Unit test: parser handles a bare entry with no `HEAD` followed by a normal worktree entry. - Integration test: full `.git`-file → `.bare` + sibling worktrees layout (`main`, `feature-a`, `feature-b`) is listed correctly via the real `git` binary. UI rendering already gates on empty sha (`worktree_picker.rs` uses `.when(!sha.is_empty(), ...)`), so the bare entry's empty sha renders without artifacts. ## Self-Review Checklist: - [x] I've reviewed my own diff for quality, security, and reliability - [x] Unsafe blocks (if any) have justifying comments — N/A, no `unsafe` - [x] The content is consistent with the [UI/UX checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable — same single `git worktree list --porcelain` invocation, no extra work #### Closes zed-industries#54824 Video [Screencast from 2026-04-28 09-43-45.webm](https://github.com/user-attachments/assets/e414d546-eb61-4cb2-857e-3c392f416f96) Release Notes: - Fixed the `git: worktree` popup listing no worktrees when a project was opened at the parent of a `.bare` directory (bare-clone-with-sibling-worktrees layout). --------- Co-authored-by: Max Brunsfeld <maxbrunsfeld@gmail.com>
…5747) cc @SomeoneToIgnore ## Summary Follow-up to zed-industries#55352, where the conclusion was to split `editor.rs` incrementally by topic instead of all at once. This mechanically extracts diagnostics-related editor code into `crates/editor/src/editor/diagnostics.rs` while preserving the existing public API via re-exports. ## Testing - `cargo check -p editor --lib` - `cargo check -p diagnostics --lib` - `cargo check -p diagnostics --tests` Self-Review Checklist: - [x] I've reviewed my own diff for quality, security, and reliability - [x] Unsafe blocks (if any) have justifying comments - [x] The content is consistent with the [UI/UX checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable Release Notes: - N/A
…e-latest-zed # Conflicts: # .github/workflows/deploy_cloudflare.yml # Cargo.lock # crates/agent_settings/src/agent_settings.rs # crates/gpui_wgpu/src/wgpu_renderer.rs Spec-Ref: helix-specs@71cf4251b:001980_merge-latest-zed
AcpThreadEvent::Stopped became a tuple variant Stopped(StopReason) in the 001864 merge, but two matches!() calls in test code at acp_thread.rs:5357 and 5429 still used the unit-variant pattern AcpThreadEvent::Stopped. This silently broke test_second_send_during_active_turn_emits_stopped_for_both_turns (Critical Fix #6 verification) and test_dropped_send_task_clears_running_turn. Updated both to AcpThreadEvent::Stopped(_). Spec-Ref: helix-specs@9ece04a3c:001980_merge-latest-zed
Helix repo has bumped kodit (v1.3.6 → v1.3.7) and dropped go-tika since this go.mod was last regenerated. The e2e runner doesn't run 'go mod tidy' itself, so it failed to build the test server. Also extends portingguide.md with the Stopped(_) test-pattern fix and a new rebase checklist item 41a for the same trap. Spec-Ref: helix-specs@301e71dbb:001980_merge-latest-zed
Spec-Ref: helix-specs@8edc30758:001980_merge-latest-zed
…latest-zed Spec-Ref: helix-specs@7b7e62f85:001980_merge-latest-zed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Brings the Helix fork up to date with
zed-industries/zedHEAD1da60a8518("editor: Extract Diagnostics code out ofeditor.rs"). 172 upstream commits over 10 days, plus 4 carry-overs needed locally to keep the WebSocket sync layer compiling and the test suite green.Conflicts and resolutions
.github/workflows/deploy_cloudflare.ymlCargo.lock--theirs(regenerated on next build)crates/agent_settings/src/agent_settings.rsshow_onboarding/auto_open_panelfields; droppednew_thread_locationto match upstream removal in zed-industries#55575crates/gpui_wgpu/src/wgpu_renderer.rsPer-conflict context, rationale, and risk are recorded inline in
portingguide.md§"Merge 001980" — written as each conflict was resolved, not retrospectively.Carry-over fixes
acp_thread.rs:5357,5429:matches!(event, AcpThreadEvent::Stopped)→Stopped(_). The Helix-addedtest_second_send_during_active_turn_emits_stopped_for_both_turns(Critical Fix Default to follow mode when using agent #6 verification) andtest_dropped_send_task_clears_running_turnwere silently broken sinceStoppedbecame a tuple variant in 001864 — never noticed because production builds skip#[cfg(test)]. Added new rebase-checklist item 41a so the next merger checks for this trap.crates/external_websocket_sync/e2e-test/helix-ws-test-server/go.mod+go.sum:go mod tidyregen because helix Go deps had drifted (kodit v1.3.6 → v1.3.7, droppedgo-tika). The e2e runner doesn't tidy itself.Verification
./stack build-zed dev— clean (warnings only, 6m 35s)portingguide.md§"Rebase Checklist" walkedActiveView,set_active_view,draft_threads,selected_agent_type,smol::Timerall 0)--allow-multiple-instances,debug-embed,cx.background_executor().timer())E2E (the hard gate)
Both rounds passed end-to-end against a real Anthropic API:
zed-agentclaude(Claude Code)Phase 1 took 15.1s for
wait_for_tools_ready, confirming thecx.background_executor().timer()fix from 001909 still works. Phase 8 ordering correct, Phase 9 recovered from rapid cancel, Phase 12 reconnect succeeded.Helix-Specific Surface (preserved)
external_websocket_synccrate intact,agent_panel.rscallbacks/accessors intact,from_existing_thread()intact (6-fieldConnectedServerStateunchanged),AcpBetaFeatureFlag::enabled_for_all() -> true, built-in agent hiding, enterprise TLS skip,--allow-multiple-instances,debug-embed, feature propagation chain.PRs #44–#47 all baked into the base — no regressions.
Pairing
The companion Helix repo PR bumps
ZED_COMMITto42b8107379.Release Notes:
🔗 Open in Helix
📋 Spec:
🚀 Built with Helix