fa56504
Add cancel button and restore spinner for worktree restores
Click to expand commit body
- worktree_restore_tasks HashMap on Sidebar tracks in-flight restore
operations keyed by SessionId
- Restore task is now stored (not detached) so it can be tracked and
the pending state cleaned up when it completes
- cancel_worktree_restore drops the task from the map and notifies
- ThreadItem wired up with pending_worktree_restore bool and
on_cancel_restore callback from the Sidebar's render_thread
- Action slot (archive/stop buttons) hidden while a restore is pending
- Reconciled with existing PR4 restore spinner in worktree labels
Richard Feldman
created
99ea3b4
Add cancel button and spinner for pending worktree restores
Click to expand commit body
Track in-flight worktree restores in the Sidebar via a
HashSet<SessionId>. While a restore is pending, the thread item shows
a spinning 'Restoring worktreeβ¦' indicator with a cancel button that
appears on hover. Clicking cancel clears the pending state.
This is purely UI β the restore itself still runs to completion in the
background; cancel just hides the spinner.
Richard Feldman
created
aa031fb
Wire up original_commit_hash in archive and restore flows
Click to expand commit body
persist_worktree_state:
- Read HEAD SHA before creating WIP commits as original_commit_hash
- Pass it to create_archived_worktree
restore_worktree_via_git:
- Pre-restore: verify original_commit_hash exists via resolve_commit;
abort with user-facing error if the git history is gone
- Worktree-already-exists: check for .git file to detect if path is a
real git worktree; if not, call repair_worktrees to adopt it
- Resilient WIP resets: track success of mixed and soft resets
independently; if either fails, fall back to mixed reset directly to
original_commit_hash
- Post-reset HEAD verification: confirm HEAD landed at
original_commit_hash after all resets
- Branch restoration: after switching, verify branch points at
original_commit_hash; if it doesn't, reset and create a fresh branch
Richard Feldman
created
93f382f
Wire up original_commit_hash in archive and restore flows
Click to expand commit body
persist_worktree_state:
- Read HEAD SHA before creating WIP commits as original_commit_hash
- Pass it to create_archived_worktree
restore_worktree_via_git:
- Pre-restore: verify original_commit_hash exists via resolve_commit;
abort with user-facing error if the git history is gone
- Worktree-already-exists: check for .git file to detect if path is a
real git worktree; if not, call repair_worktrees to adopt it
- Resilient WIP resets: track success of mixed and soft resets
independently; if either fails, fall back to mixed reset directly to
original_commit_hash
- Post-reset HEAD verification: confirm HEAD landed at
original_commit_hash after all resets
- Branch restoration: after switching, verify branch points at
original_commit_hash; if it doesn't, reset and create a fresh branch
Richard Feldman
created
2b463da
Wire up original_commit_hash in archive and restore flows
Click to expand commit body
persist_worktree_state:
- Read HEAD SHA before creating WIP commits as original_commit_hash
- Pass it to create_archived_worktree
restore_worktree_via_git:
- Pre-restore: verify original_commit_hash exists via resolve_commit;
abort with user-facing error if the git history is gone
- Worktree-already-exists: check for .git file to detect if path is a
real git worktree; if not, call repair_worktrees to adopt it
- Resilient WIP resets: track success of mixed and soft resets
independently; if either fails, fall back to mixed reset directly to
original_commit_hash
- Post-reset HEAD verification: confirm HEAD landed at
original_commit_hash after all resets
- Branch restoration: after switching, verify branch points at
original_commit_hash; if it doesn't, reset and create a fresh branch
Richard Feldman
created
4759add
Wire up original_commit_hash in archive and restore flows
Click to expand commit body
persist_worktree_state:
- Read HEAD SHA before creating WIP commits as original_commit_hash
- Pass it to create_archived_worktree
restore_worktree_via_git:
- Pre-restore: verify original_commit_hash exists via resolve_commit;
abort with user-facing error if the git history is gone
- Worktree-already-exists: check for .git file to detect if path is a
real git worktree; if not, call repair_worktrees to adopt it
- Resilient WIP resets: track success of mixed and soft resets
independently; if either fails, fall back to mixed reset directly to
original_commit_hash
- Post-reset HEAD verification: confirm HEAD landed at
original_commit_hash after all resets
- Branch restoration: after switching, verify branch points at
original_commit_hash; if it doesn't, reset and create a fresh branch
Richard Feldman
created
76fa06b
Wire up original_commit_hash in archive and restore flows
Click to expand commit body
persist_worktree_state:
- Read HEAD SHA before creating WIP commits as original_commit_hash
- Pass it to create_archived_worktree
restore_worktree_via_git:
- Pre-restore: verify original_commit_hash exists via resolve_commit;
abort with user-facing error if the git history is gone
- Worktree-already-exists: check for .git file to detect if path is a
real git worktree; if not, call repair_worktrees to adopt it
- Resilient WIP resets: track success of mixed and soft resets
independently; if either fails, fall back to mixed reset directly to
original_commit_hash
- Post-reset HEAD verification: confirm HEAD landed at
original_commit_hash after all resets
- Branch restoration: after switching, verify branch points at
original_commit_hash; if it doesn't, reset and create a fresh branch
Richard Feldman
created
210657c
Wire up original_commit_hash in archive and restore flows
Click to expand commit body
persist_worktree_state:
- Read HEAD SHA before creating WIP commits as original_commit_hash
- Pass it to create_archived_worktree
restore_worktree_via_git:
- Pre-restore: verify original_commit_hash exists via resolve_commit;
abort with user-facing error if the git history is gone
- Worktree-already-exists: check for .git file to detect if path is a
real git worktree; if not, call repair_worktrees to adopt it
- Resilient WIP resets: track success of mixed and soft resets
independently; if either fails, fall back to mixed reset directly to
original_commit_hash
- Post-reset HEAD verification: confirm HEAD landed at
original_commit_hash after all resets
- Branch restoration: after switching, verify branch points at
original_commit_hash; if it doesn't, reset and create a fresh branch
Richard Feldman
created
e9783e6
Wire up original_commit_hash in archive and restore flows
Click to expand commit body
persist_worktree_state:
- Read HEAD SHA before creating WIP commits as original_commit_hash
- Pass it to create_archived_worktree
restore_worktree_via_git:
- Pre-restore: verify original_commit_hash exists via resolve_commit;
abort with user-facing error if the git history is gone
- Worktree-already-exists: check for .git file to detect if path is a
real git worktree; if not, call repair_worktrees to adopt it
- Resilient WIP resets: track success of mixed and soft resets
independently; if either fails, fall back to mixed reset directly to
original_commit_hash
- Post-reset HEAD verification: confirm HEAD landed at
original_commit_hash after all resets
- Branch restoration: after switching, verify branch points at
original_commit_hash; if it doesn't, reset and create a fresh branch
Richard Feldman
created
40cadcb
Wire up worktree archival on thread archive and restoration on unarchive
Click to expand commit body
Connect the git API and archived worktree data model to the sidebar's
archive/unarchive flow:
- Add thread_worktree_archive module: orchestrates the full archive
cycle (WIP commits, DB records, git refs, worktree deletion) and
restore cycle (detached worktree creation, reset to recover
staged/unstaged state, branch restoration)
- Integrate into sidebar: archive_thread now persists worktree state
before cleanup; activate_archived_thread restores worktrees via git
with targeted path replacement for multi-root threads
- Show toast on restore failure instead of silent log
- Deserialize persisted project_group_keys on window restore
- Guard cleanup_empty_workspaces against dropped entities
- Await rollback DB operations instead of fire-and-forget
- If worktree already exists on disk when unarchiving, reuse it as-is
instead of auto-generating a new path
Richard Feldman
created
e2f2e38
Add original_commit_hash to ArchivedGitWorktree
Click to expand commit body
- New field on ArchivedGitWorktree struct storing the HEAD SHA from
before WIP commits were created during archival. Used as a
pre-restore sanity check, fallback reset target, and post-restore
verification.
- DB migration adding original_commit_hash column, backfilled from
the legacy commit_hash column for existing rows.
- Updated create_archived_worktree signature, SQL INSERT, and bindings
on both ThreadMetadataDb and ThreadMetadataStore.
- Updated SELECT query and Column impl to read the new field.
- Updated all 4 archived worktree tests.
Richard Feldman
created
8774038
Add ArchivedGitWorktree data model and DB operations
Click to expand commit body
Add the persistence layer for tracking archived git worktrees:
- ArchivedGitWorktree struct with staged_commit_hash and
unstaged_commit_hash fields to precisely identify WIP commits
- DB migrations for archived_git_worktrees and thread_archived_worktrees
(join table) tables
- CRUD operations: create, link to thread, query by thread, delete
- Column impl for deserializing ArchivedGitWorktree from DB rows
- Tests for create/retrieve with distinct SHAs, delete cascading
through join table, multi-thread linking, and multiple worktrees
per thread
8edcdbd
Add resolve_commit and repair_worktrees to git layer
Click to expand commit body
- resolve_commit on Repository entity: wraps revparse_batch to check
if a commit SHA exists in the repo. Used during restore to verify
original_commit_hash is present before attempting recovery.
- repair_worktrees on GitRepository trait + RealGitRepository (runs
git worktree repair) and FakeGitRepository (no-op). Used during
restore when a worktree directory exists on disk but may not be in
git's worktree metadata.
- repair_worktrees wrapper on Repository entity.
3061d32
Add resolve_commit and repair_worktrees to git layer
Click to expand commit body
- resolve_commit on Repository entity: wraps revparse_batch to check
if a commit SHA exists in the repo. Used during restore to verify
original_commit_hash is present before attempting recovery.
- repair_worktrees on GitRepository trait + RealGitRepository (runs
git worktree repair) and FakeGitRepository (no-op). Used during
restore when a worktree directory exists on disk but may not be in
git's worktree metadata.
- repair_worktrees wrapper on Repository entity.
GitStore::stage_all already does everything this method does and updates
pending_ops as well. So I'm removing this method to avoid a potential
foot gun in our codebase
Anthony Eid
created
301e5e3
Don't update HEAD ref in fake repo when creating detached worktree
Click to expand commit body
This goes against what git does internally and could cause testing bugs
in the future
Anthony Eid
created
b8d8b73
Support HEAD^ in fake repo reset implementation
Anthony Eid
created
f9a0239
Add remote support for repository::head_sha
ace8b89
Remove redundent --no-optional-locks argument in new git commands
Click to expand commit body
This argument already gets added when calling git_binary.run()
Anthony Eid
created
136e91a
Fix a bug where legacy threads would be spuriously opened in a main workspace (#53260)
Click to expand commit body
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
Mikayla Maki
created
d1b1f25
git_graph: Fix commit hover misalignment after fractional scrolling (#53218)
Click to expand commit body
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 #53199
Mathematically, `floor(A) + floor(B) != floor(A + B)`. The original code
calculated the hovered row by applying `.floor()` to the scrolled offset
and local offset separately before adding them together, which
incorrectly dropped fractional sub-pixels and caused an off-by-one
targeting error.
Release Notes:
- N/A
---------
Co-authored-by: Anthony Eid <anthony@zed.dev>
Closes #52586
## Summary
- cap the restricted project list height inside the security modal and
make it scroll
- cap the modal body content height so the action buttons stay reachable
on smaller screens
- add a regression test that reproduces the overflow scenario with many
restricted projects in a constrained window
## Validation
- manually reproduced the overflow by opening 60 untrusted projects in a
720x620 window before the fix
- cargo test -p workspace
test_security_modal_project_list_scrolls_when_many_projects_are_restricted
- cargo check -p workspace
Release Notes:
- Fixed restricted mode dialogs overflowing past the window when many
unrecognized projects are open.
---------
Co-authored-by: Danilo Leal <daniloleal09@gmail.com>
Saketh
and
Danilo Leal
created
909f6d1
dev_container: Make volumes key and source key in volume mounts optional (#53137)
Click to expand commit body
Fixes some issues concerning volume mounts in the `dev_container`
integration:
1. Docker Compose services that don't define a volumes key cause
deserialization to fail because the field was required. This field is
not strictly necessary, i.e. for other services in a docker compose
devcontainer configuration which the editor is not attached to.
1. Volume mounts where source or target is absent (e.g. `tmpfs` mounts
that only need a target) also fail to parse because both fields were
required. This makes the source key optional, matching the Docker
Compose spec.
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 devcontainer initialization erroneously requiring each service
to have a volumes key.
- Fixed devcontainer initialization erroneously requiring source keys
for all volume mounts.
---------
Co-authored-by: KyleBarton <kjb@initialcapacity.io>
Peter Siegel
and
KyleBarton
created
d22f8bf
Make `zed foo/` add to active window and open sidebar (#53254)
Click to expand commit body
Changes the default CLI behavior when opening directories:
- `zed foo/` now adds `foo/` as a new workspace in the active window's
MultiWorkspace and opens the sidebar, instead of creating a new window.
If `bar/` was previously open, both `foo/` and `bar/` are retained as
separate workspaces in the sidebar.
- `zed -n foo/` continues to open a new window without the sidebar
(unchanged behavior).
- `zed -a foo/` continues to add to the existing workspace (unchanged
behavior).
The new behavior is gated on `multi_workspace_enabled` (the `agent-v2`
feature flag). Without the flag, directories open in a new window as
before, avoiding a situation where the workspace gets replaced with no
sidebar to switch back.
The change is contained to `open_paths()` in
`crates/workspace/src/workspace.rs`. When no CLI flag is specified and
no existing workspace matches the paths, we now look for the active
window and set `requesting_window` so that `Workspace::new_local` adds
the new workspace to it rather than creating a new window.
Release Notes:
- N/A
Eric Holk
created
7748047
git_graph: Refresh UI when stash/branch list has changed (#53094)
Click to expand commit body
### Summary
This PR fixes an issue where the git graph wouldn't refresh its state
correctly unless HEAD changed. Now repository emits events when the
branch list has changed, and invalidates the graph data cache when the
stash or branch list has changed.
I also renamed the event `Repository::BranchedChanged` to
`Repository::HeadChanged` as well.
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 #53080
Release Notes:
- N/A or Added/Fixed/Improved ...
Anthony Eid
created
4b1e0a3
dev_container: Parse env vars and docker labels with `=` in values correctly (#53134)
Click to expand commit body
Fixes a parsing issue where docker env var key/value pairs can contain
an "=" character in the value. This is pretty common and present in all
[nvidia/cuda](https://hub.docker.com/r/nvidia/cuda) docker images. Also
adds some tests for env var parsing.
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 a parsing failure where docker env var key/value pairs can
contain an "=" character in the value.
Semantic merge conflict due to multibuffer API changes
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
Cole Miller
created
f3c034e
Prevent dev container modal dismissal during creation (#52506)
Click to expand commit body
## Context
When the dev container creation modal is showing "Creating Dev
Container", clicking anywhere on the workspace backdrop dismisses the
dialog. The container creation continues in the background, but the user
loses visual feedback and the subsequent `open_remote_project` call may
fail because the modal entity is gone.
This adds an `allow_dismissal` flag to `RemoteServerProjects` that
blocks accidental dismissal (backdrop clicks, focus loss) while a dev
container is being created, but allows explicit dismissal on success or
error.
## How to Review
Small PR β two files changed:
1. **`remote_servers.rs`** (the fix): `allow_dismissal` bool field
added, set to `false` when entering Creating state, set to `true` before
emitting `DismissEvent` on success/error. `on_before_dismiss` override
checks the flag.
2. **`recent_projects.rs`** (the test): Regression test that opens a dev
container modal, simulates a backdrop click, and asserts the modal stays
open.
## 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 dev container creation modal being dismissed when clicking
outside it
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Toni Alatalo
and
Claude Opus 4.6
created
a92b242
keymaps: Add Ctrl+R open recent binding for macOS and Linux (#52893)
Click to expand commit body
Closes #52879
## Summary
VS Code binds `Ctrl+R` to open recent workspaces/folders on all
platforms (Windows, macOS, and Linux). Zed already had this binding in
`default-windows.json`, but it was missing from `default-macos.json` and
`default-linux.json`.
Since `BaseKeymap::VSCode` returns no supplemental keymap file and
relies entirely on the platform default keymaps, users who selected VS
Code keybindings on macOS or Linux would not get the expected `Ctrl+R`
behavior β instead getting nothing, or having to use the non-VSCode
binding (`Alt+Cmd+O` / `Alt+Ctrl+O`).
This adds the missing binding to both platform defaults, consistent with
what Windows already had.
## Screenshot
The default keybinding in VS Code:
<img width="1512" height="319" alt="Screenshot 2026-04-01 at 07 38 09"
src="https://github.com/user-attachments/assets/12d483a3-3c52-4649-a00f-ee2b8e40bc8c"
/>
Release Notes:
- Added `Ctrl+R` keybinding for opening recent projects on macOS and
Linux, matching VS Code's default behavior on all platforms.
David Alecrim
created
9eab76d
sidebar: Adjust "Add Local Project" button behavior (#53248)
Click to expand commit body
This PR makes it so using that button from the sidebar's recent projects
picker _does not_ add a new window with that project, but rather, add it
to the current multi-workspace/sidebar. Previously, the `Open` action
was defaulting to true even if `false` was passed to its
`create_new_window` condition.
Release Notes:
- N/A
Danilo Leal
created
810822b
Use multibuffer to fix symbol search when diff is present (#52268)
Click to expand commit body
## 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 #456)
if one exists β helps with traceability. -->
Fixes a bug where project symbol search navigates to the wrong position
when diff hunks are expanded. The cursor would land offset by the number
of lines added by the expanded diffs (Closes #51331). Now, users
navigating to symbols via project symbol search will land on the correct
position even when diff hunks are expanded in the editor.
The fix converts the buffer position to a `multi_buffer::Anchor` before
passing it to `select_ranges`, so it resolves correctly through the diff
transform layer instead of being interpreted as a literal MultiBuffer
coordinate.
Previously, the symbol's position was passed as a raw coordinate to the
editor, which interpreted it relative to what's displayed on screen
(including expanded diff lines). The fix converts the position to an
anchor, which is tied to the actual content in the file rather than a
screen position.
## 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 -->
- All changes are in `crates/project_symbols/src/project_symbols.rs`.
Most of the changes are in `confirm()` method (Lines 142-154).
- There's also one change on the first line of the file.
## Self-Review Checklist
<!-- Check before requesting review: -->
- [x] I've reviewed my own diff for quality, security, and reliability
- [ ] 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 a bug where project symbols did not take you to the correct
location when diffs are expanded.
Steven
created
fd4d844
markdown_preview: Add search support to markdown preview (#52502)
Click to expand commit body
Context
The markdown preview had no search functionality β pressing Ctrl+F did
nothing. This PR implements the SearchableItem trait for
MarkdownPreviewView, enabling in-pane text search with match
highlighting and navigation.
Changes span four crates:
- project: Added SearchQuery::search_str() β a synchronous method to
search plain &str text, since the existing search() only works on
BufferSnapshot.
- markdown: Added search highlight storage to the Markdown entity and
paint_search_highlights to MarkdownElement. Extracted the existing
selection painting into a reusable paint_highlight_range helper to avoid
duplicating quad-painting logic.
- markdown_preview: Implemented SearchableItem with full match
navigation, active match tracking, and proper SearchEvent emission
matching Editor behavior.
- Keymaps: Added buffer_search::Deploy bindings to the MarkdownPreview
context on all three platforms.
The PR hopefully Closes
https://github.com/zed-industries/zed/issues/27154
How to Review
1. crates/project/src/search.rs β search_str method at the end of impl
SearchQuery. Handles both Text (AhoCorasick) and Regex variants with
whole-word and multiline support.
2. crates/markdown/src/markdown.rs β Three areas:
- New fields and methods on Markdown struct (~line 264, 512-548)
- paint_highlight_range extraction and paint_search_highlights (~line
1059-1170)
- The single-line addition in Element::paint (~line 2003)
3. crates/markdown_preview/src/markdown_preview_view.rs β The main
change. Focus on:
- SearchEvent::MatchesInvalidated emission in schedule_markdown_update
(line 384)
- EventEmitter<SearchEvent> and as_searchable (lines 723, 748-754)
- The SearchableItem impl (lines 779-927), especially active_match_index
which computes position from old highlights to handle query changes
correctly
4. Keymap files β Two lines each for Linux/Windows, one for macOS.
Self-Review Checklist
- [ x ] I've reviewed my own diff for quality, security, and reliability
- [ x ] Unsafe blocks (if any) have justifying comments (no unsafe)
- [ x ] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
(should be :smile: )
- [ - ] Tests cover the new/changed behavior (not sure)
- [ - ] Performance impact has been considered and is acceptable (I'm
not sure about it and it would be nice to see experienced people to
test)
Release Notes:
- Added search support (Ctrl+F / Cmd+F) to the markdown preview
---------
Co-authored-by: Conrad Irwin <conrad.irwin@gmail.com>
Ahmet Kaan GΓΌmΓΌΕ
and
Conrad Irwin
created
c9d799e
Ensure updateUID gets run for docker-compose and plain images (#53106)
Click to expand commit body
Dev Containers should run a script which updates the remote UID of the
image user, so that files are still accessible. This was being run
incorrectly (on the Docker-compose side) or not at all (in the case of a
plain dev container image). This change fixes this
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 #53081
Release Notes:
- Fixed dev container behavior for configs which use images without a
dockerfile
KyleBarton
created
91fc544
Display agent-powered merge conflict resolution in the status bar (#53033)
Click to expand commit body
Follow up to https://github.com/zed-industries/zed/pull/49807
Previously, when there were multiple conflicts across the codebase, we
would pop a toast at the bottom right corner of the UI. A toast seemed
like a functional idea because it'd be visible from any state of the app
and thus it'd be a good place to expose the button that allows you to
quickly prompt the agent to resolve all conflicts, as opposed to
creating a thread for each individual one. However, the toast was met
with some negative (and correct) feedback, mostly because it is
interruptive, and thus can sometimes block very relevant surfaces, like
either the agent panel itself or the Git commit area.
Therefore, in this PR, I'm removing the toast and adding a button in the
status bar instead; a bit more minimal, not interruptive, and a common
place for other items that might require your attention. The status bar
can be quite busy these days, though; we can display diagnostics, LSP
status, and file names in there; conscious of that. But it felt like it
could work given this button is such a transient one that you can either
easily manually dismiss or wait for it to be auto-dismissed as you or
the agent resolves the merge conflicts.
<img width="500" height="864" alt="Screenshot 2026-04-02 at 9β― 15@2x"
src="https://github.com/user-attachments/assets/4412a05c-77d0-4391-8ea1-25d1749b5e20"
/>
Release Notes:
- Git: Improved how we surface the affordance to resolve codebase-wide
merge conflicts with the agent in the UI.
- Agent: Added a setting to control whether or not the button to resolve
merge conflicts with the agent should be displayed.
Danilo Leal
created
733857b
repl: Use uv to install ipykernel for uv-managed venv (#51897)
Click to expand commit body
## Context
Closes #51874
the repl is able to recognize that the venv is managed by uv, but still
runs `python -m pip install ipykernel`, despite this not working. this
PR fixes that behavior and uses uv to install ipkernel.
## How to Review
Added a path that uses uv to install ipykernel in repl_editor.rs
Added a function to repl_store.rs that allows updating the venv as
having ipykernel installed after installing it.
## Videos
Old Behavior:
https://github.com/user-attachments/assets/9de81cc9-cd78-4570-ad57-550f5ecabffa
New Behavior:
https://github.com/user-attachments/assets/391f54c7-ae67-4d85-8f4f-9d87ddc8db63
## 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:
- repl: Fixed installing ipykernel with uv managed environements
Finn Eitreim
created
7e27171
agent_ui: Fix label for image mentions (#52995)
Click to expand commit body
This PR fixes an issue where an image mention would have its label reset
to just "Image", instead of persisting the original label, when the
prompt got submitted.
Closes #48564
Release Notes:
- agent: Fixed image mention labels by persisting the file name after
submitting the prompt
- agent: Fixed directory mentions being incorrectly parsed as files when
pasting into prompt editor
---------
Co-authored-by: Bennet Bo Fenner <bennetbo@gmx.de>
This PR bumps the version of the Proto extension to v0.3.2.
Release Notes:
- N/A
Co-authored-by: zed-zippy[bot] <234243425+zed-zippy[bot]@users.noreply.github.com>
This PR bumps the version of the GLSL extension to v0.2.3.
Release Notes:
- N/A
Co-authored-by: zed-zippy[bot] <234243425+zed-zippy[bot]@users.noreply.github.com>
zed-zippy[bot]
and
zed-zippy[bot]
created
24b041d
Add comment injections for GLSL and Proto (#53058)
Click to expand commit body
Release Notes:
- N/A
AltCode
created
a48bab7
markdown: Fix horizontal rules and blockquotes not visible (#53223)
Click to expand commit body
Closes #53167
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:
- Fixed horizontal rules and blockquotes not being visible in the
Markdown preview.
Smit Barmase
created
ea5a572
Explicitly restore multi-workspace's project groups and active workspace when restoring a window (#53217)
Click to expand commit body
This PR stops us from eagerly restoring multiple workspaces when
re-opening a window. It also should make us reliably return to the right
workspace, with the right groups in the sidebar.
There is still more work needed on our workspace persistence, especially
making remote workspaces behave more consistently with local workspaces
with respect to the sidebar. We can tackle that in follow-up PRs.
Release Notes:
- N/A
Max Brunsfeld
created
25ff899
Add allow_empty commits, detached worktree creation, and new git operations
Click to expand commit body
Extend the git API with several new capabilities needed for worktree
archival and restoration:
- Add allow_empty flag to CommitOptions for creating WIP marker commits
- Change create_worktree to accept Option<String> branch, enabling
detached worktree creation when None is passed
- Add head_sha() to read the current HEAD commit hash
- Add update_ref() and delete_ref() for managing git references
- Add stage_all_including_untracked() to stage everything before a
WIP commit
- Implement all new operations in FakeGitRepository with functional
commit history tracking, reset support, and ref management
- Update existing call sites for the new CommitOptions field and
create_worktree signature
As part of the work that is being developed for the Project Panel's Undo
& Redo system, in
https://github.com/zed-industries/zed/tree/5039-create-redo , we're
implementing an asynchronous task queue which simply receives a message
with the operation/change that is meant to be carried out, in order to
ensure these run in a sequential fashion.
While trying to use `futures_channel::mpsc::Receiver`, it was noted that
`recv` method was not available so this Pull Request updates the
`futures` crate to `0.3.32`, where it is available.
This version also deprecates `try_next` in favor of `try_recv` so this
Pull Request updates existing callers of `try_next` to use `try_recv`,
which was mostly updating the expected return type from
`Result<Option<T>>` to `Result<T>`.
Co-authored-by: Yara <git@yara.blue>
Dino
and
Yara
created
1ebcde8
Update more sidebar interactions to use the MultiWorkspace's explicit project groups (#53174)
Click to expand commit body
* Don't require a workspace to be loaded in order to render the group
header menu.
* When adding or removing root folders, do it to *every* workspace in
the group.
* When activating a thread, never open a different window, and never
open it in a workspace that's part of a different groupw with a superset
of the thread's worktrees. Find or create a workspace with the exact
right group of root folders.
Release Notes:
- N/A