Merge latest upstream Zed into Helix fork - #25
Merged
Conversation
Quick-and-dirty version as we're trying this out with the first cohort. Release Notes: - N/A
… when hide_root=true (zed-industries#51530) Closes zed-industries#45135 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: - Fixed project root name appearing in file paths while searching in file finder.
…tries#51587) #### Fixes zed-industries#51082 #### Description : When a user configures `default_config_options` (e.g. a specific model) for an ACP agent, the setting was only applied when creating a new session. Resuming or loading an existing session (e.g. from history) skipped this step, causing the model dropdown to revert to "Default (recommended)". #### Fix : Extract the config options defaulting logic into a shared helper apply_default_config_options and call it consistently across all three session entry points: new_session, resume_session, and load_session Release Notes: #### Release notes : Fixed model dropdown resetting to "Default (recommended)" when opening a previous conversation from history. Configured models (via default_config_options) are now correctly applied when resuming or loading existing sessions. #### Video : [Screencast from 2026-03-15 12-55-58.webm](https://github.com/user-attachments/assets/977747b9-390c-4f78-91fc-91feace444e1)
…ed-industries#50583) Closes zed-industries#47900 ## Root cause The current markdown preview only re-renders on `EditorEvent::Edited, DirtyChanged, ExcerptsEdited`, but agent edits are implemented via [`buffer.edit()`](https://github.com/dongdong867/zed/blob/eb3f92708b6dc67bb534c1c44a200c0cb5c4997b/crates/agent/src/edit_agent.rs#L375) which does not guaranty to emit the `EditorEvent::Edited` event. Causing the markdown preview stuck on the last received parsed markdown. ## Applied fix Subscribing to `EditorEvent::BufferEdited` when initializing the markdown preview view. This will cause the view to update when received `BufferEdited` event including agent edits to the file. ## As is/ To be As is | To be --- | --- <video src="https://github.com/user-attachments/assets/a0b13467-7758-4572-ae01-bcbc40beff6c" /> | <video src="https://github.com/user-attachments/assets/3b5463f3-46ad-4fe6-8563-ceb4347035db" /> --- 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 - [ ] Aligned any UI changes with the [UI checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) Release Notes: - Fixed markdown preview not re-rendering when edited by agent
…tries#51462) ## Summary Closes zed-industries#46126 Dim terminal colors in **Ayu Dark** and **Ayu Mirage** were defined as light pastels instead of muted/darker versions of the normal colors. On a dark background, the APCA minimum contrast algorithm boosted these already-light colors toward white, making "dimmed" text (e.g. zsh-autosuggestions) appear brighter than normal text. ### Root cause | Color | Ayu Dark (before) | Ayu Dark (after) | Pattern | |-------|-------------------|------------------|---------| | dim_foreground | `#0d1016` (= background!) | `#85847f` | Muted foreground | | dim_red | `#febab9` (light pink) | `#a74f53` | 70% of normal red | | dim_green | `#d8eca8` (light pastel) | `#769735` | 70% of normal green | | dim_yellow | `#ffd9aa` (light pastel) | `#b17d3a` | 70% of normal yellow | The fix follows the same convention as **Gruvbox** and **One Dark**, where dim = ~70% brightness of the normal color. **Ayu Light** was already correct (dim colors are darker, which is correct for light backgrounds). ## Test plan - [ ] Open terminal in Zed with Ayu Dark theme - [ ] Enable zsh-autosuggestions (or any tool that uses dim/faint ANSI colors) - [ ] Type a partial command to trigger autosuggestions - [ ] Verify suggested text appears as muted/dim, not bright white - [ ] Repeat with Ayu Mirage theme - [ ] Verify Ayu Light theme is unaffected --- Release Notes: - Improved some Ayu Dark/Mirage theme's terminal colors. Co-authored-by: Danilo Leal <daniloleal09@gmail.com>
) Closes zed-industries#49740 Adds optional file and folder icons to the Git panel so its file list is easier to scan, especially in larger repositories. - add folder icons for Git panel entries - add Git panel settings for file and folder icon visibility --- Release Notes: - Made the Git Panel aware of icon themes. - Added the ability to render file type icons in the Git panel. --------- Co-authored-by: Danilo Leal <daniloleal09@gmail.com>
…1674) Moving to the for here before the fix gets upstreamed. We might revisit this at a later point anyway. Release Notes: - N/A
This PR bumps the version of the HTML extension to v0.3.1. Release Notes: - N/A Co-authored-by: zed-zippy[bot] <234243425+zed-zippy[bot]@users.noreply.github.com>
…running (zed-industries#51498) This PR is motivated by internal feedback in which the notification that we show inviting to resolve merging conflicts with an agent also pops up if the agent itself ran `git merge`. In this case, the notification is unnecessary noise. So, what I'm doing here is simply _not_ showing it if there's a running agent. I want to note that this change is accepting a trade-off here, in which there could be cases that even if an agent is running, the notification can still be useful. There could be other ways to identify whether the agent is running `git merge`, but they all felt a bit too complex for the moment. And given this is reasonably an edge case, I'm favoring a simple approach for now. Release Notes: - N/A --------- Co-authored-by: Lukas Wirth <lukas@zed.dev>
Closes #ISSUE Before you mark this PR as ready for review, make sure that you have: - [ ] Added a solid test coverage and/or screenshots from doing manual testing - [ ] Done a self-review taking into account security and performance aspects - [ ] Aligned any UI changes with the [UI checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) Release Notes: - N/A *or* Added/Fixed/Improved ... Co-authored-by: Oleksiy <oleksiy@zed.dev>
Closes zed-industries#43329 ## Summary This fixes `path:line:column` navigation for files containing non-ASCII text. Before this change, open path flows were passing the external column directly into `go_to_singleton_buffer_point`. That happened to work for ASCII, but it was wrong for Unicode because external columns are user-visible character positions while the editor buffer stores columns as UTF-8 byte offsets. This PR adds a shared text layer conversion for external row/column coordinates and uses it in the affected open-path flows: - file finder navigation - recent project remote connection navigation - recent project remote server navigation It also adds regression coverage for the Unicode case that originally failed. As a small - necessary - prerequisite, this also adds `remote_connection` test support to `file_finder`'s dev-deps so the local regression test can build and run on this branch. That follows the same feature mismatch pattern previously fixed in zed-industries#48280. I wasn't able to locally verify the tests/etc. w/o the addition... so I've rolled it into this PR. Tests are green. The earlier attempt in zed-industries#47093 was headed in the right direction, but it did not land and did not include the final regression coverage requested in review. ## Verification - `cargo fmt --all -- --check` - `./script/clippy -p text` - `./script/clippy -p file_finder` - `./script/clippy -p recent_projects` - `cargo test -p file_finder --lib --no-run` - `cargo test -p file_finder file_finder_tests::test_row_column_numbers_query_inside_file -- --exact` - `cargo test -p file_finder file_finder_tests::test_row_column_numbers_query_inside_unicode_file -- --exact` - `cargo test -p text tests::test_point_for_row_and_column_from_external_source -- --exact` ## Manual I reproduced locally on my machine (macOS) w/ a stateless launch using a Unicode file (Cyrillic) Before: - `:1:5` landed too far left - `:1:10` landed around the 4th visible Cyrillic character After: - `:1:5` lands after 4 visible characters / before the 5th - `:1:10` lands after 9 visible characters / before the 10th Release Notes: - Fixed `path:line:column` navigation so non-ASCII columns land on the correct character. --------- Co-authored-by: Kirill Bulatov <kirill@zed.dev>
This should put us in a state where everything finally works in its entirety. Release Notes: - N/A
…ies#51581) Closes zed-industries#51576 Release Notes: - Select first entry in the language selector when matching a query https://github.com/user-attachments/assets/c824c024-d2f1-416e-a347-0eab7bc3ae0a Signed-off-by: Xiaobo Liu <cppcoffee@gmail.com>
…dustries#49624) ## Summary - Implements `icon_label` on `GitPanel` to return the total count of uncommitted changes (`new_count + changes_count`) when non-zero, capped at `"99+"` for large repos. - Updates `PanelButtons::render()` to render that label as a small green badge overlaid on the panel's sidebar icon, using absolute positioning within a `div().relative()` wrapper. - The badge uses `version_control_added` theme color and `LabelSize::XSmall` text with `LineHeightStyle::UiLabel` for accurate vertical centering, positioned at the top-right corner of the icon button. The `icon_label` method already existed on the `Panel`/`PanelHandle` traits with a default `None` impl, and was already implemented by `NotificationPanel` (unread notification count) and `TerminalPanel` (open terminal count) — but was never rendered. This wires it up for all three panels at once. ## Notes - Badge is positioned with non-negative offsets (`top(0)`, `right(0)`) to stay within the parent container's bounds. The status bar's `render_left_tools()` uses `.overflow_x_hidden()`, which in GPUI clips both axes (the `overflow_mask` returns a full content mask whenever any axis is non-`Visible`), so negative offsets would be clipped. - `LineHeightStyle::UiLabel` collapses line height to `relative(1.)` so flex centering aligns the visual glyph rather than a taller-than-necessary line box. - No new data tracking logic — `GitPanel` already maintains `new_count` and `changes_count` reactively. - No feature flag or settings added per YAGNI. ## Suggested .rules additions The following pattern came up repeatedly and would prevent future sessions from hitting the same issue: ``` ## GPUI overflow clipping `overflow_x_hidden()` (and any single-axis overflow setter) clips **both** axes in GPUI. The `overflow_mask()` implementation in `style.rs` returns a full `ContentMask` (bounding box) whenever any axis is non-`Visible`. Absolute-positioned children that extend outside the element bounds will be clipped even if only the X axis is set to Hidden. Avoid negative `top`/`right`/`bottom`/`left` offsets on absolute children of containers that have any overflow hidden — keep badge/overlay elements within the parent's bounds instead. ``` Release Notes: - Added a numeric badge to the git panel sidebar icon showing the count of uncommitted changes. --------- Co-authored-by: Danilo Leal <daniloleal09@gmail.com>
This PR adds the missing methods for the `align-self` css property. The `align_self` field existed on the `StyleRefinement` struct but was inaccessible using the `styled` trait. Release Notes: - Adds `self_start`, `self_end`, `self_center`, `self_flex_start`, `self_flex_end`, `self_baseline`, and `self_stretch` methods to the `trait Styled`
Mostly just a test to check whether everything works properly now. Release Notes: - N/A
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: - Updated our BYOK integration to support the new 1M context windows for Opus and Sonnet.
This PR bumps the version of the GLSL extension to v0.2.2. Release Notes: - N/A Co-authored-by: zed-zippy[bot] <234243425+zed-zippy[bot]@users.noreply.github.com>
Release Notes: - Fixed: echo's on experimental audio pipeline Some more context: - `EchoCanceller` was not implemented on the output side - removes the planned migration to a different sample rate (44100) and channel count (1) - de-duplicate the interleaved `#cfg[]`'s and centralized them in `echo_canceller.rs`
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: - N/A --------- Co-authored-by: cameron <cameron.studdstreet@gmail.com> Co-authored-by: Ben Brandt <benjamin.j.brandt@gmail.com>
…stries#50928) The Python (debugpy) and Go (delve-shim-dap) debug adapters unconditionally require network access on every debug session start — even when the adapter binary is already cached locally. This makes the debugger completely unusable offline. Python: fetch_debugpy_whl → maybe_fetch_new_wheel hits pypi; failure propagates as a fatal error. Go: install_shim → fetch_latest_adapter_version hits the GitHub API; failure propagates as a fatal error. CodeLLDB and JavaScript adapters already handle this correctly. Fix for Python and Go: Wrap the network fetch in each adapter with a fallback: if the request fails and a previously downloaded adapter exists on disk, log a warning and use the cached version. If no cache exists, the original error propagates unchanged. Logs after the fix: ``` 2026-03-06T16:31:51+05:30 WARN [dap_adapters::python] Failed to fetch latest debugpy, using cached version: getting latest release 2026-03-06T16:31:51+05:30 INFO [dap::transport] Debug adapter has connected to TCP server 127.0.0.1:45533 ``` Limitations: The debugger must be run at least once with internet connectivity to populate the cache on disk. This PR does not change that requirement. Closes zed-industries#45781 Before you mark this PR as ready for review, make sure that you have: - [ ] Added a solid test coverage and/or screenshots from doing manual testing - No automated tests are included. The existing MockDelegate stubs http_client() and fs() as unimplemented!(), so testing the fallback path would require new mock infrastructure. The fix was verified manually by running the debug build offline with and without cached adapters. The CodeLLDB adapter's equivalent fallback (lines 357-374) also has no dedicated test. - [x] Done a self-review taking into account security and performance aspects Release Notes: - Fixed debugger failing to start when offline if a debug adapter was previously downloaded.
…rpts (zed-industries#51685) Fixes ZED-5VQ Release Notes: - N/A *or* Added/Fixed/Improved ...
…es#51684) We now share connections across multiple "ConnectionView"s the naming does not make sense anymore Release Notes: - N/A
Closes discussion zed-industries#34890 This is similar to the vim prev/next method/section motion, but more flexible because this follows the items in editor's outline (Tree sitter or LSP provided). 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 actions `editor::GoToPreviousSymbol` and `editor::GoToNextSymbol` actions to go to the previous and next outline symbol. This is either the tree sitter outline, or the LSP provided outline depending on the configuration.
…#51683) Release Notes: - N/A *or* Added/Fixed/Improved ...
…es#51684) We now share connections across multiple "ConnectionView"s the naming does not make sense anymore Release Notes: - N/A
…d-industries#51695) ## Summary - Update the context window table in `models.md` to reflect that Claude Sonnet 4.6 and Opus 4.6 now support 1M token context windows (previously listed as 200k) - Remove Sonnet 4.5/4.6 from the "may increase in future releases" callout since the 4.6 models are now at 1M Release Notes: - N/A
…ustries#51628) When the user selected a custom agent (e.g. Codex) and chose "Start Thread in New Worktree", the new workspace's panel ignored the selection and defaulted to Zed Agent (NativeAgent). The fix captures `self.selected_agent()` in `handle_worktree_creation_requested` before the async task, passes it through to `setup_new_workspace`, and forwards it to `external_thread` instead of `None`. Closes AI-84 (No release notes because it's still feature-flagged.) Release Notes: - N/A
## Context The registry now distinguishes between websites and repos, so we can show either or both if available. ## Self-Review Checklist <!-- Check before requesting review: --> - [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
…ustries#52045) Previously, the sidebar toggle worked via an action, which is dependent on what is focused. I changed it to directly call a method. Release Notes: - N/A
## Context Adds a tool to utilize the UI we already expose to ACP agents. Behind a feature flag for now. ## How to Review Mostly a tool to hook up to all of the plan plumbing we already have in acp thread. ## 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
Release Notes: - Fixed a weird niche interaction between niri and nixos that broke screensharing --------- Co-authored-by: Jakub Konka <kubkon@jakubkonka.com>
Missed in zed-industries#52028. Release Notes: - N/A
Release Notes: - N/A --------- Co-authored-by: Finn Evers <finn@zed.dev> Co-authored-by: Jakub Konka <kubkon@jakubkonka.com>
…ries#47101) Swaps the `arrayvec` dependency for `heapless`, as the `heapless` library allows changing the type used for the `len` field, which `arrayvec` hard-codes to `usize`. This means that, for all the `ArrayVec`s in Zed, we can save 7 bytes on 64 bit platforms by just storing the length as a `u8`. I have not benchmarked this change locally, as I don't know what benchmarking tools are in this project. As a small bit of context, I wrote the PR to `heapless` to add this `LenT` generic after seeing a PR on the `arrayvec` crate that seems to be dead now. Once I saw some of Zed's blog posts about the `rope` crate and noticed the usage of `arrayvec`, I thought this might be a welcome change. Release Notes: - N/A --------- Co-authored-by: Piotr Osiewicz <24362066+osiewicz@users.noreply.github.com>
…ents (zed-industries#52080) ## Context We were seeing lots of pending title generation, which should only happen if we don't have a summarization model. `handle_models_updated_event` unconditionally overwrote the thread's summarization model on every registry event, even with `None`. We should only setting if explicitly changed by the user or we haven't set it yet, and only if we actually have one. It is hard to reproduce this issue.. but I don't think this code was right in the first place anyway. ## 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
## Context
This PR adds an `Unbind` action, as well as syntax sugar in the keymaps
for declaring it
```
{
"unbind": {
"tab: "editor::AcceptEditPrediction"
}
}
```
Is equivalent to
```
{
"bindings": {
"tab: ["zed::Unbind", "editor::AcceptEditPrediction"]
}
}
```
In the keymap, unbind is always parsed first, so that you can unbind and
rebind something in the same block.
The semantics of `Unbind` differ from `NoAction` in that `NoAction` is
treated _as an action_, `Unbind` is treated as a filter. In practice
this means that when resolving bindings, we stop searching when we hit a
`NoAction` (because we found a matching binding), but we keep looking
when we hit an `Unbind` and filter out keystroke:action pairs that match
previous unbindings. In essence `Unbind` is only an action so that it
fits cleanly in the existing logic. It is really just a storage of
deleted bindings.
The plan is to rework the edit predictions key bindings on top of this,
as well as use `Unbind` rather than `NoAction` in the keymap UI. Both
will be done in follow up PRs.
Additionally, in this initial implementation unbound actions are matched
by name only. The assumption is that actions with arguments are bound to
different keys in general. However, the current syntax allows providing
arguments to the unbound actions. Both so that copy-paste works, and so
that in the future if this functionality is added, keymaps will not
break.
## How to Review
- The dispatch logic in GPUI
- The parsing logic in `keymap_file.rs`
## Self-Review Checklist
<!-- Check before requesting review: -->
- [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:
- Added support for unbinding key bindings from the default keymaps. You
can now remove default bindings you don't want, without having to
re-declare default bindings that use the same keys. For instance, to
unbind `tab` from `editor::AcceptEditPrediction`, you can put the
following in your `keymap.json`
```
[
{
"context": "Editor && edit_prediction",
"unbind": {
"tab": "editor::AcceptEditPrediction"
}
}
]
```
- Change the branch button's tooltip to be more accurate given it displays more stuff than only branches - Hide the worktree dropdown menu when in a non-Git repo project - Improve provisioned title truncation - Remove the plus icon from the "view more" item to improve sidebar's overall feel - Remove the always visible "new thread" button but make it visible only when you're in an empty thread state - Add worktree icon in the thread item and tooltip with full path - Space out the worktree name from the branch name in the git picker in the title bar - Swap order of views in the git picker to "worktree | branches | stash" - Improve the "creating worktree" loading indicator --- <!-- Check before requesting review: --> - [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
) ## Context Fixes zed-industries#52022. Rainbow bracket matching could become incorrect when tree-sitter returned ambiguous bracket pairs for the same opening delimiter. The repair path rebuilt pairs using a shared stack across all bracket query patterns, which let excluded delimiters like Markdown single quotes interfere with parenthesis matching. This change scopes that repair logic to each bracket query pattern so ambiguous matches are rebuilt without mixing unrelated delimiter types. It also adds a regression test for the Markdown repro from the issue. <img width="104" height="137" alt="image" src="https://github.com/user-attachments/assets/4318bb4d-7072-4671-8fb5-c4478a179c07" /> <img width="104" height="137" alt="image" src="https://github.com/user-attachments/assets/07a8a0fc-7618-4edb-a14e-645358d8d307" /> ## How to Review Review `crates/language/src/buffer.rs` first, especially the fallback repair path for bogus tree-sitter bracket matches. Then review `crates/editor/src/bracket_colorization.rs`, which adds regression coverage for the issue repro. ## Self-Review Checklist <!-- Check before requesting review: --> - [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 rainbow brackets in Markdown when quotes caused parentheses to match incorrectly
…tle mode (zed-industries#51887) ## Context <!-- What does this PR do, and why? How is it expected to impact users? Not just what changed, but what motivated it and why this approach. Link to Linear issue (e.g., ENG-123) or GitHub issue (e.g., Closes zed-industries#456) if one exists — helps with traceability. --> Fixes some issues with zed-industries#51842 Namely that the tests were scattered and not well organized (this PR also makes them more thorough), and a regression where holding the modifiers for the accept prediction keybind would not cause an incoming prediction to be immediately previewed. ## How to Review <!-- Help reviewers focus their attention: - For small PRs: note what to focus on (e.g., "error handling in foo.rs") - For large PRs (>400 LOC): provide a guided tour — numbered list of files/commits to read in order. (The `large-pr` label is applied automatically.) - See the review process guidelines for comment conventions --> ## Self-Review Checklist <!-- Check before requesting review: --> - [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: - (Preview v0.229.x only) Fixed a regression where holding the modifiers for the accept edit prediction keybind would not immediately preview predictions as they arrived
Spec-Ref: helix-specs@960d53e86:001617_merge-latest-zed
…e-latest-zed Spec-Ref: helix-specs@eab61d5c4:001617_merge-latest-zed
Update Helix-specific code to match upstream's ACP consolidation: - `from_existing_thread` in `conversation_view.rs` (was `acp/thread_view.rs`) updated to match new upstream API: `EntryViewState::new` 7-param signature, `ThreadView::new` without `login`/`resume_thread_metadata`, and `ConnectedServerState` with `history`/`_connection_entry_subscription` fields. Added `connection_store` and `connection_key` parameters. Changed `history` parameter from `Entity<AcpThreadHistory>` to `Option<Entity<ThreadHistory>>`. - `agent_panel.rs`: replaced `crate::ExternalAgent::NativeAgent` with `crate::Agent::NativeAgent`, `crate::acp::AcpServerView::from_existing_thread` with `ConversationView::from_existing_thread`, and the old `acp_history` field access with `connection_store` lookup. Removed now-unused `set_session_list` call. - `thread_history.rs`: added `feature = "external_websocket_sync"` to `set_session_list` cfg so it remains callable from non-test builds. - `portingguide.md`: updated file paths, E2E phase count (4→10), added ACP Consolidation section documenting all renames. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Spec-Ref: helix-specs@2589326de:001617_merge-latest-zed
Spec-Ref: helix-specs@2589326de:001617_merge-latest-zed
GitHub requires elevated scopes to push changes to .github/workflows/. The internal git server rejects pushes that include workflow changes. Restore all workflow files to their state before the upstream merge. Spec-Ref: helix-specs@2fa840a1a:001617_merge-latest-zed
Spec-Ref: helix-specs@2fa840a1a:001617_merge-latest-zed
Spec-Ref: helix-specs@97de613b3:001617_merge-latest-zed
Spec-Ref: helix-specs@97de613b3:001617_merge-latest-zed
Spec-Ref: helix-specs@97de613b3:001617_merge-latest-zed
- AgentServerDelegate::new() dropped project and status_tx args - AgentServer::connect() now takes project as explicit arg - connect() returns Rc<dyn AgentConnection> directly (not a tuple) - new_session/load_session now take PathList instead of &PathBuf - load_session now takes SessionId + title args (not AgentSessionInfo) - AuthMethod::id is now a method not a field - Gemini/ClaudeCode servers replaced by CustomAgentServer with their ids - CustomAgentServer::new takes AgentId not SharedString Spec-Ref: helix-specs@97de613b3:001617_merge-latest-zed
- Rename ActiveView::AgentThread field server_view → conversation_view in three Helix-specific blocks in agent_panel.rs - Fix HeadlessConnection to implement new agent_id() method - Fix HeadlessConnection::new_session signature (PathList instead of &Path) - Fix is_resume flag to use load_session_id.is_some() (resume_thread removed) - Fix self.history to self.history() with Option handling Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Spec-Ref: helix-specs@97de613b3:001617_merge-latest-zed
The E2E test Docker container needs to reach the Helix API proxy for authentication when using hl-... tokens. Two fixes: 1. run_e2e.sh: Use ANTHROPIC_BASE_URL env var for the Zed settings.json api_url instead of hardcoding https://api.anthropic.com. Also make the default model configurable via AGENT_MODEL env var. 2. run_docker_e2e.sh: Inject ANTHROPIC_BASE_URL into the container and resolve the hostname for --add-host injection. Special-cases host.docker.internal (not in /etc/hosts on Linux) by looking up the Docker bridge gateway IP instead. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Spec-Ref: helix-specs@97de613b3:001617_merge-latest-zed
…content on Stopped The streaming text buffer (StreamingTextBuffer) in AcpThread accumulates text chunks and reveals them gradually via a 16ms timer task. The AcpThreadEvent::EntryUpdated fires BEFORE a new chunk is appended to the buffer, so throttled_send_message_added captures content that is one chunk behind. flush_streaming_text (called just before Stopped is emitted) flushes the buffer to the Markdown entity, but flush_streaming_throttle only sends stored pending messages — it does not re-read the now-complete content. For short AI responses (e.g. "4"), the entire content may arrive in one chunk that was never captured by the throttle, leaving the Go server with only the empty content from the initial NewEntry event. This caused validateStore() to fail with empty ResponseMessage/ResponseEntries for Phase 1 and Phase 3 interactions in the E2E test. Fix: in the Stopped handler, after flush_streaming_throttle, iterate all assistant/tool_call entries and send a fresh message_added with the current complete content from content_only(cx) / to_markdown(cx). The Go server accumulator uses per-messageID overwrite semantics, so these final events correctly replace any truncated or empty content sent during streaming. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Spec-Ref: helix-specs@97de613b3:001617_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
Merges 736 upstream commits from
zed-industries/zedmain into the Helix fork, resolving all conflicts and preserving Helix-specificexternal_websocket_syncchanges. Adapts Helix code to upstream's ACP consolidation (retirement of legacy non-ACP native agent).Changes
#[cfg(feature = "external_websocket_sync")]blocks intactfrom_existing_thread()inconversation_view.rs(previouslyacp/thread_view.rs) to match new upstream API:EntryViewState::new,ThreadView::new, andConnectedServerStatestruct changesagent_panel.rscfg-gated block:ExternalAgent::NativeAgent→Agent::NativeAgent,AcpServerView::from_existing_thread→ConversationView::from_existing_thread, history now fetched fromconnection_storeinstead of removedacp_historyfieldfeature = "external_websocket_sync"toset_session_listcfg inthread_history.rsso it's callable outside test builds.github/workflows/changes back to pre-merge state — the internal git server rejects pushes that modify this directory (no required GitHub scope)portingguide.md: ACP consolidation section,.github/workflows/revert rule, updated file paths, E2E phase count (4→10), full commit historyAll 4 critical fixes verified present
load_session()clonesEntity<NativeAgent>before async spawn (agent.rs)conversation_view.rsonly sendsUserCreatedThreadandThreadTitleChanged(no duplicates)AssistantMessage::content_only()exists (acp_thread.rs)notify_thread_display()before sending (thread_service.rs)Streaming content accumulation fix
Fixed a race condition where short AI responses (e.g. a single token) were
sent to the Go server with empty content, causing
validateStore()to fail.Root cause:
AcpThreadEvent::EntryUpdatedfires BEFOREbuffer_streaming_textappends the new chunk toStreamingTextBuffer.For the first (and possibly only) chunk,
throttled_send_message_addedcaptures empty content.
flush_streaming_throttleonStoppedonlyre-sends stored pending messages — it does not re-read the now-complete
content. So the Go server's
MessageAccumulatorends up with emptyResponseMessage/ResponseEntries.Fix (
crates/external_websocket_sync/src/thread_service.rs): in theAcpThreadEvent::Stoppedhandler, afterflush_streaming_throttle, iterateall assistant/tool_call entries and send a fresh
message_addedwithcontent_only(cx)/to_markdown(cx). AtStoppedtime,flush_streaming_texthas already been called, so all content is available.The Go server accumulator uses per-messageID overwrite semantics, so these
final events correctly replace any truncated content sent during streaming.
E2E test (
run_docker_e2e.sh) passes with bothzed-agentandclaudeagent types — all 10 phases pass including store validation.
Release Notes:
🔗 Open in Helix
📋 Spec:
🚀 Built with Helix