Commit Graph
36215 Commits
Author SHA1 Message Date
Suphachai Phetthamrong 7c21f5fa4f message_editor: Fix image file copied from external files paste inserting filepath text alongside image (#51575)
What
---
Fix pasting image files copied from Finder in the Agent Panel on macOS.
Previously, pasting an image file copied with `Cmd+C` in Finder would
insert the file path as plain text instead of attaching the image as
context.

Why
---
Two bugs combined to cause this:

1. **Wrong clipboard type priority in `pasteboard.rs` (fixed in
#49367):** ~~The macOS pasteboard reader checked
`public.utf8-plain-text` first. When Finder copies a file it places the
filename as a string, the file path in `NSFilenamesPboardType`, and a
TIFF of the file icon — all in the same clipboard event. Because strings
were checked first, Zed read the filename string and ignored the image
data entirely.~~

2. **Missing `cx.stop_propagation()` in `message_editor.rs`:** The
`paste()` handler is registered as a `capture_action`. In GPUI's capture
phase, `propagate_event` defaults to `true` — simply `return`ing does
not stop propagation. Without an explicit `cx.stop_propagation()`, the
inner `Editor`'s bubble-phase paste handler also fired, read
`ExternalPaths` from the clipboard, converted it to text via
`ClipboardItem::text()` (which returns the file path string), and
inserted it alongside the image.

Fix
---
gpui_macos/src/pasteboard.rs`: Change clipboard read priority to **file
paths → image data → string**. Added `read_external_paths()` which reads
`NSFilenamesPboardType` and returns a `ClipboardEntry::ExternalPaths`.
This lets the existing `paste_images_as_context` path load the actual
file content.

- `agent_ui/src/message_editor.rs`: Add `cx.stop_propagation()` before
`task.detach()` when the image paste task is accepted, preventing the
inner editor from also handling the event.

Closes #51574

Test Plan
---

- [x] `cargo fmt --all -- --check`
- [x] `cargo build -p gpui_macos agent_ui` compiles clean
- [x] Manual verification of:
- [x] Copy an image file in Finder (`Cmd+C`), paste into Agent Panel —
image attaches correctly
- [x] Copy image from browser ("Copy Image"), paste into Agent Panel —
image attaches correctly
   - [x] `Cmd+Shift+4` screenshot paste still works
   - [x] Regular text paste still works
   
Release Notes
- Fixed pasting image files copied from Finder inserting the file path
instead of attaching the image in the Agent Panel

Screenshots
---

https://github.com/user-attachments/assets/edf6ba5a-6ff7-478c-a9ed-7cb5e889ccb3

<img width="801" height="388" alt="image"
src="https://github.com/user-attachments/assets/32d9321b-b0f6-47ae-a6b3-ea343cb69757"
/>
2026-03-19 10:58:25 +00:00
Danilo Leal b9beb94d36 sidebar: Move toggle to the status bar instead (#51916)
- [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
2026-03-19 07:41:10 -03:00
Tom HouléandNeel a30e4d5228 language_model: Clear the LlmApiToken first on org switch (#51826)
When we switch organizations, we try and refresh the token. If the token
refresh fails, we are left with the old LlmApiToken, which is for the
wrong organization. In this commit, we make sure to clear the old token
before trying a refresh on organization switch.

Release Notes:

- N/A

---------

Co-authored-by: Neel <neel@zed.dev>
2026-03-19 11:09:55 +01:00
esthertrapadoux 8909ede328 Add two guild members to github action (#51914)
This PR is similar to this one:
https://github.com/zed-industries/zed/pull/51753

Release Notes:

- N/A
2026-03-19 09:58:37 +00:00
Jason Lee 5b104deacb gpui: Fix macOS font render clipped bug again (#47001)
Continue #45957 #46906 to fix font render issue again.

Release Notes:

- Fixed macOS font render clipped bug when use `.SystemUIFont`.

| .SystemUIFont | .ZedMono |
| --- | --- |
| <img width="1034" height="978" alt="image"
src="https://github.com/user-attachments/assets/96b815a1-9484-4a38-8391-a4af3db51a36"
/> | <img width="1034" height="978" alt="image"
src="https://github.com/user-attachments/assets/1aaece42-9acd-47b0-a0a0-3cb425f40301"
/> |

```bash
cargo run -p gpui --example text
```

Test in Zed with `.ZedMono` font:

<img width="815" height="844" alt="image"
src="https://github.com/user-attachments/assets/1e44d186-cee5-4f54-910a-4c4602ca010e"
/>

With `.ZedSans`:

<img width="815" height="844" alt="image"
src="https://github.com/user-attachments/assets/1e502f3e-794c-4082-9faf-5a920adc1214"
/>

`Monaco`:

<img width="815" height="844" alt="image"
src="https://github.com/user-attachments/assets/906a3fd2-715a-4f53-b6fe-4614f4c6edab"
/>

`Menlo`:

<img width="815" height="844" alt="image"
src="https://github.com/user-attachments/assets/a8f8c302-2083-477c-ae72-f6e5c7f91d00"
/>
2026-03-19 09:56:35 +00:00
Bennet Bo Fenner ec872cad00 Rename ThreadMetadataStore to SidebarThreadMetadataStore (#51913)
## Context

Renamed ThreadMetadataStore to SidebarThreadMetadataStore.
There was some confusion yesterday on what metadata should be stored in
`ThreadMetadataStore.
Only threads that should show up in the sidebar should be stored here
(effectively all non-archived ones). Hopefully the rename + doc comment
added makes this clearer.
Unfortunately we cannot move it into the sidebar crate since we need it
in the archived history view too.

## How to Review

This is purely a cosmetical change

## 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
2026-03-19 09:52:08 +00:00
Mikayla Maki 071c45d376 Tidy up sidebar implementation (#51904)
## Context

This PR cleans up all the sidebar impl, from the over use of agentic
tools, without regard for the sidebar's construction.

## How to Review

This PR fixes the following problems:
- Overuse of inter-event guards and state management around focus state.
Simplified to just `focused_thread `, a derived value from the current
active agent panel and thread. UI can optimistically set this value for
threads that haven't been loaded yet, and it won't be unset by
`update_entries`
- Mixing data fetching and re-derivation. `update_entries` should not be
fetching the list of threads. Rather, that list should be pulled from
the threads meta data, cached on the sidebar, and then used to compute
the new state
- Similarly, removed logical state mutation from `update_entries`. It's
job is to compile the new UI state from it's data sources, not to move
selection state around. Do that elsewhere.
- The Archive pointer should be stored in the active view enum, rather
than spread across two fields
- Finally, update_entries did several linear passes over the list of
threads in a row, I had claude consolidate these passes and am relying
on our extensive test coverage to keep it functioning. If this breaks
something you built, _put that in a test_.

## 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
2026-03-19 10:16:36 +01:00
Artemiy a9a85e572f Use -e instead of -c when getting environment from nushell (#51420)
Closes #38200

Applied
[suggestion](https://github.com/zed-industries/zed/issues/38200#issuecomment-3354159899)
from issue to use `-l -e` instead of `-l -i -c` when running on nushell
because of how it treats `-l` as implying interactive session. Using
`-e` also means that command needs to end with `exit` to terminate shell
manually. With this changes everything now works fine in my testing.

Before, zed fails to load environment variables and there is error in
logs:

<img width="367" height="92" alt="image"
src="https://github.com/user-attachments/assets/9ef08d06-a509-4c96-85fe-8291bfc95b39"
/>

<img width="1711" height="115" alt="image"
src="https://github.com/user-attachments/assets/fe3a6248-6f73-4773-a2c8-db55a95aaec1"
/>

With this patch everything works fine and all language servers and stuff
loads fine:

<img width="565" height="73" alt="image"
src="https://github.com/user-attachments/assets/7477913d-42f9-41b0-a7b6-92831f406be4"
/>

Tested on nixos unstable. Nushell version 0.110.0 and 0.111.0. Zed
version 0.223.3+stable and compiled from main fail. Zed from this branch
works.

Release Notes:

- Fixed loading environment variables when nushell is used as shell
2026-03-19 09:15:34 +00:00
Andrei BeneaandKirill Bulatov 0698eccebb Save edited buffers before running a task (#48861)
Save edited buffers before running a task

Introduces a new task field for configuring which buffers are saved. For
now, this defaults to saving all buffers, but in the future we could
have a global task template to configure this setting for dynamically
created tasks.

Needed for #10251.

Release Notes:

- Edited buffers are now saved before running a task. This can be
configured with the new "save" field in `tasks.json`.

---------

Co-authored-by: Kirill Bulatov <mail4score@gmail.com>
2026-03-19 08:42:28 +00:00
Danilo Leal 80bbeda586 sidebar: Enable archiving external agents threads (#51910)
## 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
2026-03-19 05:41:32 -03:00
AxXxB 22f3d06c0e gpui_wgpu: Release surface resources during destroy (#51561)
## Summary

Implements the fix proposed by @israelrios in
https://github.com/zed-industries/zed/issues/50269#issuecomment-4049006746.

The issue comment narrowed the hang down to X11 window teardown:

- when the Settings window is closed on X11, the UI thread can stall
while `WgpuRenderer` is dropped during final `X11WindowState` teardown
- at that point, the X11 window has already been destroyed
- the proposed fix is to make `WgpuRenderer::destroy()` release
surface-bound GPU resources eagerly so the native window is destroyed
only after the `wgpu::Surface` and related resources are gone

This PR applies that change in `crates/gpui_wgpu/src/wgpu_renderer.rs`
by calling `self.resources.take()` inside `destroy()`.

## Validation

I confirmed this fix locally on Linux Mint 21.3 Cinnamon by applying it
to the `v0.227.1` build:

- opening and closing Settings no longer causes the main window to hang

## References

- Refs #50269
- Original analysis and fix proposal by @israelrios:
https://github.com/zed-industries/zed/issues/50269#issuecomment-4049006746

Release Notes:

- Fixed a Linux/X11 issue where closing the Settings window could cause
Zed to hang.
2026-03-19 08:24:40 +00:00
feeiyu b165cd08ba editor: Fix documentation tooltip reappearing after editor regains focus (#48924)
Closes #48922

When the editor regains focus, it internally triggers the mouse_moved
logic again. This causes the hover documentation to be shown even if it
was previously dismissed due to user editing.

This change skips mouse_moved handling when the cursor is hidden,
preventing unintended tooltip popups.


[录屏 2026-02-11
19-04-14.webm](https://github.com/user-attachments/assets/ea9f9438-34bf-4771-bbc8-335e9ea59dd7)

- [x] Tests or screenshots needed?
- [x] Code Reviewed
- [x] Manual QA

Release Notes:

- Fixed documentation tooltip reappearing after editor regains focus
2026-03-19 08:07:29 +00:00
19c8363a8e editor: Fix crash from stale state after prepaint depth exhaustion (#49664)
Closes #49662

## Summary

Fixes an index-out-of-bounds crash in `EditorElement::prepaint` that
occurs when block decorations oscillate in size, exhausting the
recursive prepaint budget (`MAX_PREPAINT_DEPTH = 5`).

## Root cause

When block decorations resize during `render_blocks`, prepaint recurses
to rebuild layout state. Previously, both `resize_blocks()` and
`update_renderer_widths()` mutated the display map **before** checking
`can_prepaint()`. At max depth:

1. `resize_blocks()` mutated the block map, changing the display row
mapping
2. `can_prepaint()` returned false, skipping the recursive rebuild
3. All local state (`snapshot`, `start_row`, `end_row`, `line_layouts`,
`row_infos`) remained stale
4. Downstream code — particularly `layout_inline_diagnostics` which
takes a **fresh** `editor.snapshot()` — would see the new row mapping
but index into the stale `line_layouts`
5. `row.minus(start_row)` produced an index exceeding
`line_layouts.len()` → panic

The crash is most likely to occur when many block decorations appear or
resize simultaneously (e.g., unfolding a folder containing many git
repos, causing a burst of diff hunk blocks), or when `place_near` blocks
oscillate between inline (height=0) and block (height>=1) mode, burning
through all 5 recursion levels without converging.

## Fix

Guard both mutation sites with `can_prepaint()` so the display map is
NOT mutated when we cannot recurse to rebuild state:

- **Block resize**: move `resize_blocks()` inside the `can_prepaint()`
guard. At max depth, defer the resize to the next frame via
`cx.notify()`. The resize will be re-detected because the stored height
still mismatches the rendered height.


https://github.com/jean-humann/zed/blob/021978ecf939723a6ba4ab9843572b6bcefe7cb7/crates/editor/src/element.rs#L10207-L10239

- **Renderer widths**: short-circuit `update_renderer_widths()` with
`can_prepaint()` so fold widths are not updated at max depth.


https://github.com/jean-humann/zed/blob/021978ecf939723a6ba4ab9843572b6bcefe7cb7/crates/editor/src/element.rs#L10097-L10115

In both cases the next frame starts with a fresh recursion budget
(`EditorRequestLayoutState::default()` resets `prepaint_depth` to 0) and
applies the deferred changes normally. The worst case is one frame of
slightly wrong-sized blocks — vastly preferable to a crash.

## Test plan

- [x] `cargo check -p editor` passes
- [ ] Manual testing with many open files, inline diagnostics, hover
popovers, and git diff hunks

Release Notes:

- Fixed a crash (index out of bounds) during editor rendering when block
decorations repeatedly resize, exhausting the recursive prepaint budget.

🤖 Generated with [Claude Code](https://claude.ai/code)

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: Smit Barmase <heysmitbarmase@gmail.com>
2026-03-19 13:12:28 +05:30
Bing WangandSmit Barmase 927cc304a8 project_panel: Fix appending copy marker for directory at wrong position (#48845)
Closes #48765 


Release Notes:

- Fixed appends copy marker for copied file in the wrong position of
filename

---------

Co-authored-by: Smit Barmase <heysmitbarmase@gmail.com>
2026-03-19 12:44:37 +05:30
John Tur a7c9c24f40 Update to wgpu v29 (#51889)
This release includes the OpenGL fixes which were sent upstream.

Release Notes:

- N/A
2026-03-19 07:57:57 +01:00
Smit Barmase b3282d926c Fix PR size check failing on fork PRs (#51902)
Follow-up https://github.com/zed-industries/zed/pull/51876

Use `pull_request_target` for PR size check so the workflow has write
permissions to manage labels on fork PRs. Safe since we don't execute
any PR code here.

Failing example:
https://github.com/zed-industries/zed/actions/runs/23282504031/job/67698793729?pr=48845

Release Notes:

- N/A
2026-03-19 12:16:27 +05:30
Om Chillure 08d78101af gpui_linux: Set _NET_WM_NAME during X11 window creation (#51899)
#### Context

On X11, the Settings window title displayed as `"Zed â██ Settings"`
instead of "Zed — Settings"`. The em-dash (U+2014) was garbled because
the window creation path only set the legacy `WM_NAME` property (Latin-1
encoded), but never set `_NET_WM_NAME` (UTF-8). Modern taskbars prefer
`_NET_WM_NAME`, so without it they fell back to `WM_NAME` and
misinterpreted the UTF-8 bytes as Latin-1.

`set_title()` already sets both properties, which is why windows that
update their title after creation (like the main workspace) were
unaffected.

The fix adds `_NET_WM_NAME` during window creation, matching what
`set_title()` already does.

#### Closes #51871

#### How to Review

Single change in `crates/gpui_linux/src/linux/x11/window.rs` focus on
the new `_NET_WM_NAME` property being set alongside the existing
`WM_NAME` in `X11Window::new`.

#### Self-Review Checklist

- [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)
- [ ] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

#### Video

[Screencast from 2026-03-19
11-19-45.webm](https://github.com/user-attachments/assets/ff810e37-90ac-4ce2-a8f5-ad83e66aa3b8)


Release Notes:

- Fixed garbled characters in window titles on Linux X11 (e.g., Settings
window)
2026-03-19 06:19:28 +00:00
Ben Brandt 5089b3e147 agent: Clarify sub-agent delegation guidance (#51864)
This seems to work better outside of just Opus. Initial experiments look
promising, going to test internally for a bit as well.

Release Notes:

- N/A
2026-03-19 06:18:29 +01:00
John Tur 2aa3666063 Improve clipboard support on Windows (#51807)
- Simplify and improve Windows clipboard handler.
- Fixed components that weren't handling multiple formats on the
clipboard properly.

Closes https://github.com/zed-industries/zed/issues/51278

Release Notes:

- windows: Fixed an issue where text copied from Office applications
couldn't be pasted into Zed.
2026-03-18 22:09:26 -04:00
Danilo Leal 54ebf32062 sidebar: Add another round of UX refinements (#51884) 2026-03-18 23:04:54 -03:00
Nihal Kumar e0acae253f auto_update: Improve Linux rsync hinting (#50637)
Previously, automatic checks could fail quietly and return to idle. This
change ensures missing dependency errors are surfaced in the update UI
with install guidance.

What Changed:

- Added a dedicated `MissingDependencyError` for dependency-related
update failures.
- Updated auto-update polling behavior so:
  - automatic checks still stay quiet for transient/general errors,
- but missing dependency errors are surfaced as
`AutoUpdateStatus::Errored`.
- Improved Linux dependency hinting:
  - distro checks with `/etc/os-release`,
- returns distro-appropriate install hints where possible and falls back
to a generic package-manager message when distro parsing is
unavailable/unknown.

<img width="610" height="145" alt="image"
src="https://github.com/user-attachments/assets/8bef3970-38ba-4412-9ece-7b6bb6bf903b"
/>


Closes #47552

- [x] Done a self-review taking into account security and performance
aspects


Release Notes:

- Improved Linux auto-update failure issue caused by missing `rsync` by
surfacing actionable install guidance in the update UI.
2026-03-18 21:31:20 -04:00
Om ChillureandNathan Sobo 56daf917db picker: Fix mouse overrides selected item highlight in searchable dropdown (#50827)
### Fixes #31865

### Problem
When navigating a picker (command palette, file finder, etc.) with the
keyboard and then hovering with the mouse, two items would appear
highlighted at the same time - one from the keyboard selection
ghost_element_selected background and one from the CSS style
ghost_element_hover background. This happened because GPUI's CSS hover
is applied at paint time independently from the Rust selection state.

### Solution
Added a keyboard_navigated: bool flag to [Picker] to track whether the
last navigation was via keyboard or mouse.

When a keyboard navigation action fires (↑, ↓, Home, End, etc.),
`keyboard_navigated` is set to true. A transparent
`block_mouse_except_scroll` overlay div is added on top of each list
item, preventing the CSS style from firing on `ListItem` children.

When the mouse moves over any item, the overlay's `on_mouse_move`
handler fires, clears keyboard_navigated, moves the selection to that
item, and re-renders - removing all overlays and restoring normal mouse
hover behavior.
The `on_hover` handler also moves the selection to whichever item the
mouse enters, so mouse navigation is fully functional.
Clicks work through the overlay since `block_mouse_except_scroll` only
affects hover hit-testing, not click events on the parent div.

### Behavior
Matches VS Code / IntelliJ — keyboard navigation suppresses hover
highlights until the mouse moves, at which point normal hover resumes.
Only one item is ever highlighted at a time.

### Video

[Screencast from 2026-03-05
19-20-16.webm](https://github.com/user-attachments/assets/7a8a543a-95f3-481f-b59d-171604e5f883)

---------

Co-authored-by: Nathan Sobo <nathan@zed.dev>
2026-03-18 18:52:38 -06:00
Max BrunsfeldandEric Holk f0625add66 Show linked worktree names consistently in sidebar and titlebar (#51883)
This is a follow-up to https://github.com/zed-industries/zed/pull/51775,
making worktree names in the sidebar appear consistent with the
titlebar.

## Context

- [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

---------

Co-authored-by: Eric Holk <eric@zed.dev>
2026-03-19 00:32:13 +00:00
John D. Swanson 3fab76ced1 Fix pip hash verification in assign-reviewers workflow (#51881)
## Summary

Fix failing `assign-reviewers` workflow — pip's `--hash` syntax only
works in requirements files (`-r`), not constraint files (`-c`). The `-c
/dev/stdin` approach caused: `hashes are missing from some
requirements`.

Failing run:
https://github.com/zed-industries/zed/actions/runs/23272148116/job/67667106308

Coordinator PR:
https://github.com/zed-industries/codeowner-coordinator/pull/84

## Test plan

- [x] Verified locally: good hash installs cleanly, bad hash rejected
- [ ] After merge: verify assign-reviewers workflow passes on next PR

Release Notes:

- N/A
2026-03-18 19:45:19 -04:00
John D. Swanson 953d87d63b Use Search API for hotfix monitor to avoid job cancellation (#51880)
## Summary

- The Pulls API with `state=closed` paginates through all closed PRs in
the repo. On a repo as active as Zed, this exceeds the 5-minute job
limit ([failed
run](https://github.com/zed-industries/zed/actions/runs/23271617583)).
- Switch to the Search API which supports `merged:>DATE` natively, so
GitHub filters server-side and returns only matching hotfix PRs.
- Tested against the Zed repo — query completes in seconds.

Release Notes:

- N/A
2026-03-18 19:32:38 -04:00
Eric HolkandMax Brunsfeld 695382e078 Show worktree thread status in sidebar (#51879)
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: Max Brunsfeld <maxbrunsfeld@gmail.com>
2026-03-18 23:10:49 +00:00
John D. Swanson 10ddd9085d Update assign-reviewers workflow for fork PR support (#51876)
## Summary

Deploy updated `assign-reviewers.yml` from
[codeowner-coordinator#83](https://github.com/zed-industries/codeowner-coordinator/pull/83):

- Switch trigger from `pull_request` to `pull_request_target` to support
fork PRs and fix `author_association` misclassification bug (org members
reported as `COLLABORATOR`)
- Remove `author_association` filter and fork gate — reviewer
assignments are inherently scoped to org team members by the GitHub
Teams API
- Remove `--min-association member` from script invocation
- Add `SECURITY INVARIANTS` comment block documenting
`pull_request_target` safety requirements
- Add concurrency guard to prevent duplicate runs per PR
- Add `--require-hashes` + SHA256 pin for pyyaml install

## Test plan

- [ ] Verify a fork PR triggers the workflow and receives team
assignment
- [ ] Verify a draft→ready PR triggers correctly
- [ ] Verify org member PRs continue to work

Release Notes:

- N/A
2026-03-18 19:09:44 -04:00
Max BrunsfeldandRichard Feldman 2cc7d17f34 Fix usability issues with automatically-created git worktrees (#51775)
* [x] Display original project name as root folder in project panel,
titlebar
* [x] When manually creating worktrees, ensure final path component is
original project name
* [x] Display original project name, worktree name, and branch name in
titlebar
* [x] Only show main checkout in project switcher

Release Notes:

- N/A *or* Added/Fixed/Improved ...

---------

Co-authored-by: Richard Feldman <oss@rtfeldman.com>
2026-03-18 22:49:16 +00:00
Ben Brandt c932aa9f5b agent: Fix project context on first thread (#51868)
We seemed to have a regression where the worktrees weren't showing up in
the system prompt on first load.

Release Notes:

- N/A
2026-03-18 23:43:44 +01:00
7baf5dc04e Add basic undo in project panel (#47091)
- Add `project_panel::undo::UndoManager` with a bounded operation stack
  to track and revert project panel operations
- Support undoing file and directory creation, renaming, moving, pasting
  and drag-and-drop operations
- Revert batch operations sequentially in reverse order to handle
  dependencies between them
- Show an error notification when one or more undo operations fail
- Add "Undo" entry to the project panel context menu, disabled when
  there is nothing to undo
- Gate the feature behind the `project-panel-undo-redo` feature flag

Ref: #5039

Release Notes:

- N/A

---------

Signed-off-by: Marco Mihai Condrache <52580954+marcocondrache@users.noreply.github.com>
Co-authored-by: Cole Miller <cole@zed.dev>
Co-authored-by: dino <dinojoaocosta@gmail.com>
2026-03-18 22:37:21 +00:00
Danilo LealandBennet Bo Fenner 488f79a93d sidebar: Improve behavior of the "view more" action (#51872)
This PR makes sure that threads running, waiting for confirmation, or
with a notification remain visible even after you've collapsed the list,
in case they would be naturally hidden (if the list was collapsed).

Release Notes:

- N/A

Co-authored-by: Bennet Bo Fenner <bennetbo@gmx.de>
2026-03-18 18:06:07 -03:00
Sarmad GulzarandNathan Sobo 3dd2e80ec5 Filter common git hosting providers from SSH config hosts (#51528)
Fixes https://github.com/zed-industries/zed/issues/50218

- For every `Host` block: collect its host patterns (handling
continuations and filtering `!`/`*/\`), remember any `Hostname`.
- When the block ends: if `Hostname` is a git provider → discard
everything.
- Else if `Hostname` exists → keep all host aliases.
- Else → keep only the host aliases that are not git providers.

Added more extensive test coverage as well to cover the above!

Release Notes:

- Fixed SSH host picker showing git provider domains (e.g. github.com,
gitlab.com) from SSH config.

---------

Co-authored-by: Nathan Sobo <nathan@zed.dev>
2026-03-18 14:09:46 -06:00
Om Chillure 7340835769 Fix file rename on FUSE-based filesystems (#51779)
Fixes #51778

#### Fix

- Add `EINVAL` to the list of error codes that trigger the
metadata-based rename fallback in `crates/fs/src/fs.rs`
- FUSE filesystems (NTFS via ntfs-3g, exFAT, etc.) return `EINVAL` when
`renameat2` is called with `RENAME_NOREPLACE`, since they don't support
the flag.
- The existing fallback already handles `ENOSYS`, `ENOTSUP`, and
`EOPNOTSUPP` for similar unsupported-operation cases.

#### Video

[Screencast from 2026-03-17
23-37-35.webm](https://github.com/user-attachments/assets/77e35d97-a87c-4acf-99b8-0e74df667275)

Release Notes:

- Fixed file and directory renaming failing in the project panel on
FUSE-based filesystems (e.g. NTFS, exFAT drives on Linux).
2026-03-18 14:03:16 -06:00
224be87fc3 sidebar: Improve the archive view (#51863)
- Add the ability to archive a thread from the sidebar
- Add the ability to unarchive a thread from the archive view
- Improve keyboard navigation within the archive view
- Display project names associated with a thread in the archive view

Release Notes:

- N/A

---------

Co-authored-by: Bennet Bo Fenner <bennetbo@gmx.de>
Co-authored-by: cameron <cameron.studdstreet@gmail.com>
2026-03-18 17:00:40 -03:00
7b14c7be5c pane: Add "Reveal in Finder" to tab context menu (#51615)
The tab context menu has "Copy Path", "Open in Terminal", and "Reveal In
Project Panel" but no way to reveal the file in the system file manager.
This action already exists in three other context menus (editor
right-click, project panel, outline panel) but was missing from tab
right-click.

## Changes

Adds a platform-specific entry to the tab context menu:
- **macOS:** "Reveal in Finder"
- **Windows:** "Reveal in File Explorer"
- **Linux:** "Reveal in File Manager"

Placed after "Copy Relative Path" and before "Pin Tab". Gated behind
`is_local` (including WSL with host interop) to match the project
panel's behavior. Uses the existing `project.reveal_path()`
infrastructure, which handles platform-specific file manager invocation
and WSL path conversion.

## Prior art

Every major editor has this in the tab context menu:
- VS Code: "Reveal in Finder" (macOS) / "Reveal in File Explorer"
(Windows)
- JetBrains IDEs: Right-click tab -> "Open in" -> "Finder"
- Sublime Text: Right-click tab -> "Reveal in Finder"

Zed already has this in the editor body right-click menu (`Cmd-K R`),
project panel (`Alt-Cmd-R`), and outline panel. The tab context menu was
the only place it was missing.

This contribution was developed with AI assistance (Claude Code).

Release Notes:

- Added "Reveal in Finder" to the tab context menu

## Screenshot

![Reveal in Finder in tab context
menu](https://github.com/mvanhorn/zed/releases/download/untagged-02ded227b30e3bcce8db/IMG_8537.png)

---------

Co-authored-by: Matt Van Horn <455140+mvanhorn@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 19:36:23 +00:00
Finn Evers de4522ed8f title_bar: Fix share button being hidden when any modal is open (#51862)
This check was initially added in
https://github.com/zed-industries/zed/pull/19885/changes but has
regressed since. Making it explicit here again to stop this from
happening.

Release Notes:

- N/A
2026-03-18 19:29:58 +00:00
Oleksiy SyvokonandBen Kunkle 7cf7dcac51 ep: Fix e2e_latency tracking (#51852)
We were always sending zero before

Release Notes:

- N/A

---------

Co-authored-by: Ben Kunkle <ben@zed.dev>
2026-03-18 19:20:28 +00:00
DavidandSmit Barmase d265b32548 project_panel: Add support for pasting external files on macOS (#49367)
Part of #29026

## Summary

https://github.com/user-attachments/assets/35b4f969-1fcf-45f4-88cd-cbc27ad9696e

macOS Finder places file paths on the system pasteboard using
`NSFilenamesPboardType` when files are copied. Previously, the project
panel only supported its own internal clipboard for copy/cut/paste
operations and ignored system clipboard content entirely. This meant
that copying files in Finder and pasting them in Zed's project panel did
nothing.

This PR adds support for reading file paths from the macOS system
pasteboard, enabling a natural workflow where users can copy files in
Finder (or other file managers) and paste them directly into Zed's
project panel.

> **Note:** Pasting files from a system file manager currently only
works on macOS. The project panel changes are cross-platform, but the
clipboard reading of file paths (`ExternalPaths`) is only implemented in
the macOS pasteboard. Windows and Linux would need equivalent changes in
their respective platform clipboard implementations to support this.
Copying/cutting files from the project panel to the system clipboard as
plain text works on all platforms.

### Changes

**`crates/gpui/src/platform/mac/pasteboard.rs`**
- Read `NSFilenamesPboardType` from the system pasteboard and surface
file paths as `ClipboardEntry::ExternalPaths`
- Check for file paths before plain text, since Finder puts both types
on the pasteboard (without this priority, file paths would be returned
as plain text strings)
- Extract the string-reading logic into `read_string_from_pasteboard()`
to allow reuse

**`crates/project_panel/src/project_panel.rs`**
- On paste, check the system clipboard for external file paths and use
the existing `drop_external_files` mechanism to copy them into the
project
- On copy/cut, write the selected entries' absolute paths to the system
clipboard so other apps can consume them
- Update the "Paste" context menu item to also be enabled when the
system clipboard contains file paths, not just when the internal
clipboard has entries

## Test plan

- [ ] Copy one or more files in Finder, paste in the project panel —
files should be copied into the selected directory
- [ ] Copy files within the project panel, paste — existing internal
copy/paste behavior is preserved
- [ ] Cut files within the project panel, paste — existing internal
cut/paste behavior is preserved
- [ ] Copy files in the project panel, paste in Finder or another app —
paths are available as plain text
- [ ] Right-click context menu shows "Paste" enabled when system
clipboard has file paths
- [ ] Right-click context menu shows "Paste" disabled when both internal
and system clipboards are empty

Release Notes:

- Added support for pasting files from Finder (and other file managers)
into the project panel via the system clipboard (macOS only). Copying or
cutting files in the project panel now also writes their paths to the
system clipboard for use in other apps.

---------

Co-authored-by: Smit Barmase <heysmitbarmase@gmail.com>
2026-03-19 00:40:42 +05:30
67d7f99891 Fix shared database test isolation (#51809)
All of the important changes are in
[`db.rs`](https://github.com/zed-industries/zed/pull/51809/changes#diff-2f644eab943bfa58feec29256281a3d9e8d4d7784cd34783e845af8beb15b16d).
Consider reading the commit log in order to review this work.

The DB crate's macro and API was changed to fix flakiness observed in
the MultiWorkspace tests when run locally. This flakiness was caused by
a shared `static LazyLock`, that caused concurrent test runs to interact
with the same underlying in-memory database. This flakiness wasn't
possible on CI due to it's usage of `cargo nextest`, whose
process-per-test approach masked this problem.

Essentially, I've changed the `static_connection` macro to remove the
static database variable and redone the internal model. Now, all
database types are thin wrappers around a generic `AppDatabase`. The
`AppDatabase` collects all of the individual table's migrations via the
`inventory` crate, and so only runs the migrations once on startup,
rather than a dozen times on startup.

The new API requires a `cx` so that we can replace the database returned
at runtime, rather than relying exclusively on a process-global
thread-local. However, we are still using a `static LazyLock` so that we
only need to take an `&App`, instead of an `&mut App`. These databases
types are `Clone + Send + Sync`, so you can easily capture-and-move the
database into background tasks and other places that don't have a `cx`.

For tests that require database isolation, it is now possible to set
their own database in init. See
[`workspace::init_test`](https://github.com/zed-industries/zed/pull/51809/changes#diff-041673bbd1947a35d45945636c0055429dfc8b5985faf93f8a8a960c9ad31e28R13610),
for the flakiness fix.

Best part, this change should be entirely compiler driven, so the Zed
agent was able to make the app-wide refactor easily.

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: Anthony Eid <hello@anthonyeid.me>
Co-authored-by: Max Brunsfeld <maxbrunsfeld@gmail.com>
2026-03-18 12:05:57 -07:00
Albab Hasan 007aba89bf gpui: Call ack_configure on throttled Wayland resize events (#49906)
when a resizing configure event is throttled (skipped to limit redraws
to once per vblank) the xdg_surface serial was never acknowledged. the
early return bypassed the ack_configure call that follows the throttle
check, violating the xdg-shell protocol requirement that every configure
serial be acknowledged before the next surface commit.

fix by calling ack_configure before the early return so the compositor
always receives the acknowledgment, dosent matter whether the resize
itself is applied.

Release Notes:

- N/A
2026-03-19 00:14:37 +05:30
Pratik Karki 092cf0b3ca Bump fancy-regex to v0.17.0 (#51549)
This fixes "Error compiling regex: Look-behind assertion without
constant size" when using variable-length lookbehinds in search, such as
`(?<=^(?:\s{4})*)\s{4}`.

fancy-regex 0.17.0 adds support for variable-length lookbehinds using
regex-automata's DFA reverse search commit:
https://github.com/fancy-regex/fancy-regex/commit/b58fb31

Closes #50219 

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 the error message on compilation of regular expressions
containing variable length lookbehind assertions

Previously:
<img width="1582" height="1377" alt="image"
src="https://github.com/user-attachments/assets/3e275891-aef5-482e-87f0-c47b9eac3c2a"
/>


Now:
<img width="1323" height="1015" alt="image"
src="https://github.com/user-attachments/assets/8638cd08-fcd0-40f9-8749-32e6352e89b7"
/>


Thanks to @vorahardik7 for helping out with a test example and
@AmaanBilwar for suggesting a fix!

Signed-off-by: Pratik Karki <pratik@prertik.com>
2026-03-18 20:38:20 +02:00
Cameron Mcloughlin c842fb55dd sidebar: Keyboard nav improvements (and vim mode) (#51856) 2026-03-18 17:53:04 +00:00
Bennet Bo Fenner fdb769c132 sidebar: Fix date formatting (#51851)
Previously we were not showing days

Release Notes:

- N/A
2026-03-18 16:50:30 +00:00
Ben KunkleandZed Zippy 5f12c92924 Remove edit prediction conflict state (#51842)
Closes #ISSUE

Release Notes:

- N/A *or* Added/Fixed/Improved ...

---------

Co-authored-by: Zed Zippy <234243425+zed-zippy[bot]@users.noreply.github.com>
2026-03-18 12:47:46 -04:00
Lukas Wirth 062fca6eaf auto_update: Add better error context (#51850)
Release Notes:

- N/A *or* Added/Fixed/Improved ...
2026-03-18 16:38:49 +00:00
Oleksiy Syvokon 4ee0bc3ce3 ep: Fix prompt budget computation (#51843)
We now give some room for special tokens.

Release Notes:

- N/A
2026-03-18 15:45:27 +00:00
Rodrigo 84d70ced05 languages: Support more JSON configuration files (#50800)
Several widely used configuration files are JSON but have no `.json`
extension,
such as `.babelrc` or `.eslintrc`.

Editors like VS Code detect these as JSON automatically, but Zed
currently
treats them as plain text.

This change adds common JSON config suffixes so they get proper JSON
syntax
highlighting.

Added:
- [`.babelrc`](https://babeljs.io/docs/config-files)
-
[`.eslintrc`](https://archive.eslint.org/docs/user-guide/configuring/configuration-files)
- [`.stylelintrc`](https://stylelint.io/user-guide/configure/)
- [`.swcrc`](https://github.com/swc-project/swc/pull/4236)

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
- [ ] 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:

- Support more JSON configuration files
2026-03-18 15:45:03 +00:00
7ba5315329 collab_ui: Add call diagnostics (#51816)
Release Notes:

- Added call diagnostics when collaborating with other Zed users in
collab.

---------

Co-authored-by: Piotr Osiewicz <24362066+osiewicz@users.noreply.github.com>
Co-authored-by: Piotr Osiewicz <piotr@zed.dev>
Co-authored-by: Danilo Leal <danilo@zed.dev>
2026-03-18 16:25:06 +01:00
00bee4515e git_ui: Add starts_open setting to git panel (#51601)
Fixes #51542

Adds a `git_panel.starts_open` setting for parity with `project_panel`.
When set to `true`, the git panel opens automatically in new workspaces
that don't have saved panel state.

The default is `false`, matching current behavior (non-breaking).

### Usage

```json
{
  "git_panel": {
    "starts_open": true
  }
}
```

### Implementation

Follows the same pattern as `project_panel.starts_open`:

1. `GitPanelSettingsContent` - added `starts_open: Option<bool>` to the
settings schema
2. `GitPanelSettings` - added `starts_open: bool` field
3. `GitPanel` Panel impl - overrides `starts_open()` to read from
settings

Release Notes:

- Added `git_panel.starts_open` setting to control whether the git panel
opens automatically in new workspaces (default: false)

---------

Co-authored-by: Matt Van Horn <455140+mvanhorn@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 15:22:45 +00:00
Danilo Leal 96a9397c16 sidebar: Refine how we display status in the thread item (#51840)
Refine the decorated icon as well as adding tooltips for extra clarity.

Release Notes:

- N/A
2026-03-18 12:14:11 -03:00