2e2fb0a21811ce2dbaca5bb738b0be8f94de051e
31385
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
70fd3c5774 |
acp: Handle acp message ids when we get them (#59927)
This separates the two user-message identities we currently need in agent threads: - `protocol_id`: the ACP `messageId` used to group or split streamed message chunks from ACP agents. - `client_id`: the Zed-generated user message ID used by the native agent for truncate, rewind, edit/regenerate, checkpoints, token usage, and persistence. The main behavior change is that ACP protocol message IDs now affect message merging/rendering without leaking Zed-native client IDs into ACP agents by default. Agents that can accept Zed-generated user message IDs opt into that path through `AgentSessionClientUserMessageIds`, which owns both ID generation and prompt submission. The native Zed agent implements that capability; normal ACP agents continue through the protocol-only `prompt` path. In ACP v2 we'll have a mechanism for getting user message replays that will allow the agent to adequately generate it's own opaque id that we can then use for these other capabilities. But for now, this split at least makes sure we keep the two concepts distinct. Release Notes: - N/A --------- Co-authored-by: Bennet Bo Fenner <bennetbo@gmx.de> |
||
|
|
f2006b20ac |
git: Allow showing inline blame in the status bar (#59696)
# Add status bar location for inline git blame ## Objective - Closes #12133 by implementing the VS Code-like behavior for status bar git blame ## Solution Adds a VS Code–style option to render the current-line git blame in the status bar instead of inline at the cursor. Whats new - A new location setting: Under the inline_blame configuration, you can now choose between two options: - `inline` (Default) — Keeps things exactly as they are, showing the blame details at the end of your current line. - `status_bar` — Moves the blame info down to the bottom status bar. - The Status Bar Item: When you choose the status bar option, a clean new button appears at the bottom left of your window. It features a Git icon, the author's name, how long ago the change was made, and the commit summary - Behaves as it does before, but displayed at a different location - Clicking the status bar item will instantly open up the full Git commit details like at vscode - Settings UI: - The "Location" control is now a `DynamicItem` nested under "Enabled", so it only appears when inline blame is enabled. - Registers a dropdown renderer for `InlineBlameLocation`. - Updates `all-settings.md` and `visual-customization.md` for the new option. ## Testing - Manually tested both modes by toggling `git.inline_blame.location` between `inline` and `status_bar`: - `inline` keeps the existing behavior unchanged. - `status_bar` shows the blame for the focused line in the status bar, hides the inline blame, updates on cursor movement, clears when no editor is focused, and opens the blame commit on click. - Verified the settings UI shows the "Location" dropdown only when inline blame is enabled. - Tested with `show_commit_summary` toggled when location is `status_bar` (for inline location, nothing is changed) Areas that could use more testing: - Remote (collab) editors ? Reviewers can test by setting the following in `settings.json` and moving the cursor across blamed lines: ```json { "git": { "inline_blame": { "enabled": true, "location": "status_bar" } } } ``` ## Showcase <details> <summary>Click to view showcase</summary> ### Video https://github.com/user-attachments/assets/6d9f490d-7bf3-473c-9562-8351546dfaf9 ### Screenshots <img width="894" height="749" alt="image" src="https://github.com/user-attachments/assets/c6a49008-899d-4a0c-9098-1ffb9e28252b" /> </details> Release Notes: - Added a `git.inline_blame.location` setting to render current-line git blame in the status bar instead of inline. |
||
|
|
cd7f1a0fb1 |
worktree: Avoid dropping git repositories during watcher rescans (#59976)
Related to #59610. # Objective When the filesystem watcher loses sync (common on macOS under heavy churn, e.g. a dev build constantly rewriting `target/` and `.git/`), it forces a recursive rescan of the worktree root. That rescan removes the whole subtree from the snapshot before re-scanning it, and `remove_path_from_snapshot` was unconditionally pruning the worktree's git repositories along with it. Because the scanner publishes intermediate snapshots while it works, a snapshot could be published in the window after the repository was pruned but before `.git` was re-scanned. The `GitStore` would see the repository as removed, tear it down, and then re-create it with a fresh `RepositoryId` once it reappeared — churning the id on every watcher overflow and spamming `RepositoryUpdated` events to all consumers (git panel, git graph, blame, etc.). Here some debug logs, **See** that the **repoId** inside the git graph event is different and is **8** now, even though I only have one repository and didn't do any git related updates. ``` 2026-06-26T18:38:44+02:00 WARN [fs::fs_watcher] filesystem watcher lost sync for Native; scheduling rescans for 11 registrations 2026-06-26T18:38:44+02:00 WARN [fs::fs_watcher] filesystem watcher lost sync for many files, not logging more 2026-06-26T18:38:44+02:00 WARN [fs::fs_watcher] filesystem watcher lost sync for many files, not logging more 2026-06-26T18:38:44+02:00 WARN [fs::fs_watcher] filesystem watcher lost sync for many files, not logging more 2026-06-26T18:38:44+02:00 WARN [fs::fs_watcher] filesystem watcher lost sync for many files, not logging more 2026-06-26T18:38:44+02:00 WARN [fs::fs_watcher] filesystem watcher lost sync for many files, not logging more 2026-06-26T18:38:44+02:00 WARN [fs::fs_watcher] filesystem watcher lost sync for many files, not logging more 2026-06-26T18:38:44+02:00 WARN [fs::fs_watcher] filesystem watcher lost sync for many files, not logging more 2026-06-26T18:38:44+02:00 WARN [fs::fs_watcher] filesystem watcher lost sync for many files, not logging more 2026-06-26T18:38:44+02:00 WARN [fs::fs_watcher] filesystem watcher lost sync for many files, not logging more 2026-06-26T18:38:44+02:00 WARN [fs::fs_watcher] filesystem watcher lost sync for many files, not logging more 2026-06-26T18:38:44+02:00 WARN [fs::fs_watcher] filesystem watcher lost sync for many files, not logging more 2026-06-26T18:38:44+02:00 INFO [git::repository] opening git repository at "/Users/remcosmits/Documents/code/zed/.git" using git binary "/opt/homebrew/bin/git" 2026-06-26T18:38:44+02:00 ERROR [crates/git_ui/src/git_panel.rs:3892] oneshot canceled 2026-06-26T18:38:44+02:00 ERROR [crates/git_ui/src/git_panel.rs:3892] oneshot canceled 2026-06-26T18:38:44+02:00 ERROR [crates/git_ui/src/git_panel.rs:3892] oneshot canceled 2026-06-26T18:38:44+02:00 ERROR [crates/git_ui/src/git_panel.rs:3892] oneshot canceled 2026-06-26T18:38:44+02:00 ERROR [crates/zed/src/main.rs:1991] Is a directory (os error 21) 2026-06-26T18:38:44+02:00 INFO [project::prettier_store] Prettier config file ".prettierrc" changed, reloading prettier instances for worktree 1 2026-06-26T18:38:45+02:00 INFO [project::prettier_store] Prettier config file ".prettierrc" changed, reloading prettier instances for worktree 1 2026-06-26T18:38:45+02:00 INFO [git::repository] opening git repository at "/Users/remcosmits/Documents/code/zed/.git" using git binary "/opt/homebrew/bin/git" 2026-06-26T18:38:45+02:00 ERROR [crates/git_ui/src/git_panel.rs:3892] oneshot canceled 2026-06-26T18:38:45+02:00 ERROR [crates/git_ui/src/git_panel.rs:3892] oneshot canceled [crates/git_ui/src/git_graph.rs:1468:21] &this.repo_id = RepositoryId( 1, ) [crates/git_ui/src/git_graph.rs:1468:21] "other repo id" = "other repo id" [crates/git_ui/src/git_graph.rs:1468:21] &updated_repo_id = RepositoryId( 8, ) [crates/git_ui/src/git_graph.rs:1468:21] &this.repo_id = RepositoryId( 1, ) [crates/git_ui/src/git_graph.rs:1468:21] "other repo id" = "other repo id" [crates/git_ui/src/git_graph.rs:1468:21] &updated_repo_id = RepositoryId( 8, ) [crates/git_ui/src/git_graph.rs:1468:21] &this.repo_id = RepositoryId( 1, ) [crates/git_ui/src/git_graph.rs:1468:21] "other repo id" = "other repo id" [crates/git_ui/src/git_graph.rs:1468:21] &updated_repo_id = RepositoryId( 8, ) [crates/git_ui/src/git_graph.rs:1468:21] &this.repo_id = RepositoryId( 1, ) ``` ## Solution This change makes `remove_path_from_snapshot` prune git repositories only when the path was genuinely removed (`metadata == Ok(None)`), not during a recursive refresh where the subtree is about to be re-scanned. Stale repositories are still reaped authoritatively against the filesystem in `update_git_repositories`. ## Testing It seems to be that I'm the only that can reproduce this issue @Anthony-Eid tried reproducing this but couldn't. **Note**: that I dindn't write a regression test since this is a async timing issue that I couldn't figure out to write a test for. Steps how I can reproduce this: 1. Run `cargo run` 2. Open `Zed` as only project 3. Open the git graph 4. Open a rust file e.g. `git_graph.rs` 5. CTRL-C inside the terminal to kill Zed 6. Run `cargo run` see that you have git graph open and a rust file, note that cargo check is doing it's thing. 7. See within a few seconds that Zed's UI flickers (especially the project panel & nav bar with the selected repo & branch) ## 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 adheres to Zed's UI standards ([UX/UI](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) and [icon](https://github.com/zed-industries/zed/blob/main/crates/icons/README.md) guidelines) - [ ] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable ## Showcase **Note**: This PR only fixes that we don't send as many git store events, so this results in not having to update the nav bar where the selected repo & branch on every event (that is duplicated in a way). Result of that we now also fixed a rare case that the git graph commit entries where gone, this was because we incremented the **repoId** and the graph couldn't find the repo anymore with the id that it has stored on the gitGraph struct itself. **Before** See that the nav bar with selected repo & branch flickers and the git graph commits are empty. https://github.com/user-attachments/assets/0957be7f-e732-4fd0-a950-29c496b6407d See that the git panel entries flicker and we have an temporary empty panel. https://github.com/user-attachments/assets/3b70e45c-c720-4009-aefa-696986d731b4 **After** See that the nav bar with selected repo & branch does not flicker anymore and that the git graph keeps showing the commits. https://github.com/user-attachments/assets/6e8a74f6-4a8e-4b28-ad30-574c2f33c6d9 See that the git panel does not show an empy state and does not flicker anymore. https://github.com/user-attachments/assets/1df7aacf-b337-4b81-b195-e67d8554d9da --- cc @Anthony-Eid Since we where debugging this yesterday. Release Notes: - Fixed git repositories being repeatedly torn down and re-created when the filesystem watcher forced a rescan, which caused redundant git status refreshes and UI churn. |
||
|
|
b40aa65d9e |
terminal: Require a drag threshold before starting a selection (#59918)
# Objective Fixes #58970. With `terminal.copy_on_select` enabled, a left click that isn't a deliberate selection can still overwrite the system clipboard. It happens most often on the window-focusing click (clicking into the terminal from another app), where the pointer jitters by a pixel or two during the click. A perfectly motionless click is already safe (it produces a zero-length selection and the copy is skipped), but the drag handler treats *any* movement as the start of a selection, so a 1px jitter creates a stray selection that `copy_on_select` then copies, clobbering whatever was on the clipboard. ## Solution Apply a small drag-distance threshold before a left click begins a selection, matching the threshold gpui's `div` element already uses (`DRAG_THRESHOLD = 2.0`). `mouse_down` records the press position, and `mouse_drag` ignores movement below the threshold until a selection has actually started. Once a selection is in progress it keeps extending as before. This is the same click-vs-drag handling other terminals use (kitty's `drag_threshold`, iTerm2). ## Testing Added two unit tests in `crates/terminal/src/terminal.rs`: - `test_terminal_click_jitter_does_not_start_selection` — a 1px drag after mouse-down enqueues no `UpdateSelection` and leaves the selection phase `Ended`. - `test_terminal_deliberate_drag_starts_selection` — a drag well past the threshold still starts a selection. The first test fails on `main` (the jitter starts a selection) and passes with this change. The rest of the `terminal` suite is green and `script/clippy -p terminal` is clean. I tested on Linux. The fix lives in the shared `Terminal` mouse handling, so it's platform-independent, but I haven't manually reproduced the macOS focusing-click scenario from the report on a Mac. ## Self-Review Checklist: - [x] I've reviewed my own diff for quality, security, and reliability - [x] Unsafe blocks (if any) have justifying comments - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable --- Release Notes: - Fixed `terminal.copy_on_select` overwriting the clipboard when a click jittered without an intentional drag. |
||
|
|
5fa184f8b6 |
solo_diff_view: Show changes only by default (#59958)
# Objective - Default the solo diff view to show changed hunks with excerpted context instead of expanding the entire file. - Closes https://github.com/zed-industries/zed/issues/59489 ## Solution - Initialize the solo diff editor with excerpts around changed hunks. - Add a header toggle for switching between the excerpted changes-only view and the full-file view. - Keep both sides of the split diff visually aligned when excerpts are collapsed. ## Testing - `cargo check -p git_ui` - `cargo test -p git_ui` ## 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 adheres to Zed's UI standards ([UX/UI](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) and [icon](https://github.com/zed-industries/zed/blob/main/crates/icons/README.md) guidelines) - [ ] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable ## Showcase <details> <summary>Click to view showcase</summary> Changes-only default view: <img width="1624" height="1030" alt="solo_diff_view_new_default_changes_only_view" src="https://github.com/user-attachments/assets/c6fb937e-8882-415c-8476-b9c3019c152e" /> Toggled full-file view: <img width="1624" height="1030" alt="solo_diff_view_toggled_to_full_file_view" src="https://github.com/user-attachments/assets/3d736d00-178a-4dfa-b1ff-d3d15e33b30e" /> </details> --- Release Notes: - Improved solo diff view to show changed hunks by default with a toggle for viewing the full file. --------- Co-authored-by: Christopher Biscardi <chris@christopherbiscardi.com> |
||
|
|
33473c1cd3 |
git_panel: Fix stale Git status entries for moved directories (#59934)
# Objective Fix stale Git status entries for moved directories ## Solution Coalesce changed paths before scanning and remove cached descendant statuses when a directory disappears from the current status set. ## 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 adheres to Zed's UI standards ([UX/UI](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) and [icon](https://github.com/zed-industries/zed/blob/main/crates/icons/README.md) guidelines) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable --- Release Notes: - Fixed stale Git status entries for moved directories |
||
|
|
7582bf7434 |
Allow empty values in .editorconfig (#60026)
Closes https://github.com/zed-industries/zed/pull/59559 Closes https://github.com/zed-industries/zed/issues/59466 Release Notes: - Fixed incorrect parsing of .editorconfig with empty values |
||
|
|
0deb6c0dea |
Fix code lens not being resolved in remote workflows (#59999)
Follow-up to https://github.com/zed-industries/zed/pull/54100 Closes https://github.com/zed-industries/zed/issues/59122 Original PR overlooked that the resolve was not handled from the remote hosts at all... Also, fixes the re-fetch of code lens not taking new language servers into account: before, it exit early whilst now it actually re-fetches the lens for the new servers. Before: <img width="1728" height="1084" alt="before" src="https://github.com/user-attachments/assets/9ee8205b-084b-4409-9abc-18c4ddb9c4e9" /> After: <img width="1728" height="1084" alt="after" src="https://github.com/user-attachments/assets/16ad76dc-25e1-4257-80dc-b5aeabc9a4ef" /> Release Notes: - Fixed code lens not being resolved in remote workflows |
||
|
|
2a93ca53fd |
Handle dynamic registration of semantic tokens capability (#60015)
In C# files nothing gets semantic highlighting — class fields and other identifiers are colored by tree-sitter only, so a private field looks the same as a plain local variable. The reason: Roslyn (the C# language server) doesn't declare `semanticTokensProvider` statically in its `initialize` response. It registers it **dynamically** (`client/registerCapability`), and only when the client advertises `textDocument.semanticTokens.dynamicRegistration = true`. Zed advertised `false` and didn't handle such a registration, so Roslyn never offered semantic tokens at all. (rust-analyzer/gopls are unaffected — they declare the capability statically.) This is the first of two PRs. This one makes Roslyn actually **send** semantic tokens. The companion PR (#60027) maps Roslyn's C#-specific token types to theme styles — without it the tokens arrive but most are dropped, since their types aren't in Zed's default rules. ## Solution - Advertise `textDocument.semanticTokens.dynamicRegistration = true`. - Handle the `textDocument/semanticTokens` registration and unregistration so the capability is stored, following the existing arms for `documentLink`, diagnostics, etc. ## Testing - Added a test that dynamically registers and unregisters `textDocument/semanticTokens` and checks the stored capability appears and is cleared. - Verified manually against Roslyn on a C# project: Zed now sends `textDocument/semanticTokens/full` and gets tokens back; before this change there was no semantic-token traffic at all. ## Self-Review Checklist: - [x] I've reviewed my own diff for quality, security, and reliability - [x] Unsafe blocks (if any) have justifying comments - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable --- Release Notes: - Support dynamic registration of the `textDocument/semanticTokens` capability. --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|
|
afaef857b9 |
languages: Fix Rust completion labels with fullFunctionSignatures enabled (#59125)
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 adheres to Zed's UI standards ([UX/UI](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) and [icon](https://github.com/zed-industries/zed/blob/main/crates/icons/README.md) guidelines) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable Closes #57030 When `fullFunctionSignatures` is enabled in `rust-analyzer`, some completion items returned by the language server have an unexpected `filterText`. For example: ```jsonc { "label": "sync_all(…)", "labelDetails": { "detail": "(alias fsync)", "description": "pub fn sync_all(&self) -> io::Result<()>" }, "kind": 2, "sortText": "7ffffffa", "filterText": "sync_allfsync", ... } ``` For such completion items, the rust-analyzer adapter falls back to an outer range passed into the `mk_label` closure to determine the display range: https://github.com/zed-industries/zed/blob/c32c037c6b2b582552edc8c6b9bda513412c3bf4/crates/languages/src/rust.rs#L362-L371 For functions or methods, this fallback range is calculated here: https://github.com/zed-industries/zed/blob/c32c037c6b2b582552edc8c6b9bda513412c3bf4/crates/languages/src/rust.rs#L424-L435 In this example, the `function_signature` is `"pub fn sync_all(&self) -> io::Result<()>"`, and the regex matches up to `fn sync_all(&self) -> io::Result<(`. Currently, the range passed to the `mk_label` closure mistakenly covers `"ub fn sync_all(&self) -> io::Result<"` (causing the first character 'p' to be truncated, as reported in #57030), whereas we only want `"sync_all"` itself This PR introduces two main changes to fix this behavior: - Adjust the range start: Skip the leading `fn` keyword so that the range starts exactly at the function or method name. - Update the regex pattern: The current pattern matches up to the last `(`, which causes incorrect slicing if the return type contains parentheses (e.g., `Result<()>`). This is changed to match up to the first `(`. Release Notes: - Fixed some rust completions has `ub fn ` as prefix when `fullFunctionSignatures` is enabled |
||
|
|
73b235aeb4 |
Refresh code lens after dynamic registration (#60009)
Follow-up to https://github.com/zed-industries/zed/pull/54100 Closes https://github.com/zed-industries/zed/issues/58864 Release Notes: - Fixed code lens not being refresh after the corresponding capability was dynamically registered --------- Co-authored-by: zed-zippy[bot] <234243425+zed-zippy[bot]@users.noreply.github.com> |
||
|
|
5837e7ef50 |
Hide code lens' blocks in folds (#60011)
Closes https://github.com/zed-industries/zed/issues/57053 Decided to be on a safest side and made only the code lens' blocks to hide in folds: let me know if that's not desired and we should hide all blocks (e.g. ctrl-enter for inline assist block is also not hiding and looks odd). Ran `ITERATIONS=100000 OPERATIONS=10 cargo test --profile release-fast -p editor --lib display_map::tests::test_random_display_map -- --nocapture` and it passes successfully. `SEED=770 OPERATIONS=50 cargo test --profile release-fast -p editor --lib display_map::tests::test_random_display_map` seems to fail even on `main` Before: <img width="392" height="155" alt="before" src="https://github.com/user-attachments/assets/44d1a500-7512-49de-a9bd-2837c33353a9" /> After: <img width="338" height="159" alt="after" src="https://github.com/user-attachments/assets/671791d8-a443-4ca2-abb2-8049fe8910a7" /> Release Notes: - Fixed code lens not hiding for folded regions |
||
|
|
bfe0d7c8f6 |
git_ui: Preserve in-progress commit message across reconnect (#58180)
Losing the connection on a remote project, or restarting Zed, while editing a git commit message cleared the in-progress text, because the Git panel rebuilds the commit buffer from the repository and discards unsent input. This persists the draft, scoped to the active repository's work directory, in the panel's serialized state and restores it when the panel is rebuilt from that state: at construction when the active repository already matches, and again in `reopen_commit_buffer` once the commit buffer loads. The restore only applies to an empty target buffer whose work directory matches the active repository, so it never replays committed or cleared text and never leaks a draft across repositories. The persisted draft is cleared after a successful commit. 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 #47864 Release Notes: - Fixed in-progress git commit messages being cleared when a remote project reconnects or Zed restarts --------- Co-authored-by: Cole Miller <cole@zed.dev> |
||
|
|
a8ffae4c00 |
Improve context menu experience in the markdown preview (#59993)
* removes useless "no items" pop-up and does not show any menu at all if no actions are applicable. This required adding `pub fn maybe_menu` into the * adds actions to copy rendered text and markdown text: in fact, `cmd/ctrl-c` work already but we did not expose it Before: https://github.com/user-attachments/assets/906f2bfd-bf19-48de-bbb5-85bb33431f60 After: https://github.com/user-attachments/assets/2c039c4d-2d42-4689-9ac1-12e3b10119cf Release Notes: - Improved context menu experience in the markdown preview |
||
|
|
632dcae287 |
Restore remote binary dev build output (#59997)
Follow-up of https://github.com/zed-industries/zed/pull/46695 cargo outputs to stderr, so if we do not inherit it, we do not see it, yet this can be useful to understand what broke and see the progress. I am not sure if there was a reason to remove it, hence creating the PR to discuss — want to add at least a comment there for the future if we decide to keep things as is. Before: <img width="1731" height="1022" alt="before" src="https://github.com/user-attachments/assets/92bb0969-e495-41b0-8cac-1f85a83440a0" /> After: <img width="1728" height="1086" alt="after" src="https://github.com/user-attachments/assets/c733fb8b-adbe-44dc-84a5-48e2c9e63a38" /> Release Notes: - N/A |
||
|
|
2c346f60a7 |
Use stable path keys for the project diff (#59984)
#59043 updated the project diff and git panel to improve the sorting options and make the order of files always match across the two. However, the approach relied on sorting the list of buffers first and then using an incrementing `PathKey.sort_prefix` to insert them into the multibuffer. This is a problem because path keys are intended to be stable, and any addition of removal of a buffer from the multibuffer would cause the path keys for all subsequent buffers to change, so `update_path_excerpts` would do unnecessary work. This PR fixes that by computing stable path keys for the buffers based on the ordering settings: - `PathKey.sort_prefix` is based on the git status if that setting is enabled, or a constant otherwise (the same way it worked before #59043) - when the tree view is disabled, `PathKey.path` is either the raw `RepoPath` (if sorting by path) or `{name}/{repo_path}` (if sorting by name). When the tree view is enabled, we get the path by inserting `\0` just before every directory component of the `RepoPath`, so that all directories sort before all files. Release Notes: - N/A |
||
|
|
184cf97ee9 |
Remove auto watch feature flag (#59619)
## 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 adheres to Zed's UI standards ([UX/UI](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) and [icon](https://github.com/zed-industries/zed/blob/main/crates/icons/README.md) guidelines) - [X] Tests cover the new/changed behavior - [X] Performance impact has been considered and is acceptable Release Notes: - Added an auto-watch button to the collab panel that automatically opens other participants' screen shares while you're in a call. |
||
|
|
af3f790762 |
Unify behavior of delete/cut to line boundary actions (#59627)
I noticed that our line deletion actions are inconsistent. For `DeleteToBeginningOfLine`: - `one «two threeˇ» four` -> ` four` ✅ - `one «ˇtwo three» four` -> ` four` ✅ Great, these have the same results, regardless of selection direction. For `DeleteToEndOfLine`: - `one «two threeˇ» four` -> ` one ` ✅ - `one «ˇtwo three» four` -> `one two three` ❌ Whoops, that second one should be the same, assuming that selection direction again shouldn't matter, as in the case of `DeleteToBeginningOfLine`. The same issue exists for `CutToEndOfLine`: - `The quick «brownˇ» fox` -> `The quick ` ✅ - `The quick «ˇbrown» fox` -> `The quick brown` ❌ I unified the end-of-line actions to match `DeleteToBeginningOfLine`: selection direction no longer matters, so the whole selection is always included. --- - [X] I've reviewed my own diff for quality, security, and reliability - [X] Unsafe blocks (if any) have justifying comments - [X] The content adheres to Zed's UI standards ([UX/UI](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) and [icon](https://github.com/zed-industries/zed/blob/main/crates/icons/README.md) guidelines) - [X] Tests cover the new/changed behavior - [X] Performance impact has been considered and is acceptable Release Notes: - Fixed `editor: delete to end of line` to behave consistently regardless of selection direction. - Fixed `editor: cut to end of line` to behave consistently regardless of selection direction. |
||
|
|
1fd93cbd34 |
Unship shared threads (#59981)
This PR unships shared threads. The feature is not used much and is getting in the way, at this point. These are only ever made available to staff. The corresponding database schema migration has been created in the Cloud repo and applied to the production database. Release Notes: - N/A |
||
|
|
adedf355d5 |
git: Use version control colors in diff hunk line numbers (#59973)
# Objective When diff hunks are expanded, reading the line numbers can be a little hard due to the contrast between `editor.line_number` and both `editor.diff_hunk.deleted.background` and `editor.diff_hunk.added.background`. In order to make it easier for these line numbers to stand out, the actual `version_control` colors, respective to each diff hunk, can be used to color the line number. ## Solution Luckily, the line numbers color was already dynamically decided on `EditorElement::layout_line_numbers` depending on whether the line had a breakpoint or it was active (part of a selection). The information on whether the row for which the line was being laid out belonged to a diff hunk is also already available on the `Gutter::row_infos`. As such, this change was easy to achieve by simply updating `EditorElement::layout_line_numbers` to take into consideration each row's `RowInfo::diff_status` and mapping each status to a `version_control` color, ignoring the `Modified` variant, as that should never happen. ## Testing Manually tested against a repository that has added, deleted and modified changes. Differences can be seen in the `Showcase` section. ## 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 adheres to Zed's UI standards ([UX/UI](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) and [icon](https://github.com/zed-industries/zed/blob/main/crates/icons/README.md) guidelines) - [ ] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable ## Showcase <details> <summary>Before</summary> <img width="2744" height="2994" alt="version_control_line_numbers_before" src="https://github.com/user-attachments/assets/75d160a7-e0cc-4c9d-8fdd-4cab5cc6eefb" /> </details> <details> <summary>After</summary> <img width="2744" height="2994" alt="version_control_line_numbers_after" src="https://github.com/user-attachments/assets/887fdb6a-34c6-4331-b750-4d3bea6fcd77" /> </details> --- Release Notes: - Improved line number colors in diff hunks to match the version control colors |
||
|
|
02aabb9cef |
project_panel: Add expand/collapse all to context menu (#59567)
Add `ExpandAllEntries` action, keybinding, and right-click context menu entries for expand/collapse all in the project panel. - Add `ExpandAllEntries` action + handler + `expand_all_entries()` method - Add `cmd-right` / `ctrl-right` keybinding for `ExpandAllEntries`, mirroring the existing `cmd-left` for `CollapseAllEntries` - Add "Expand All" to root-entry and folder right-click context menus - Add keybinding hint to root-entry "Collapse All" context menu entry - Per-worktree behavior: context menu actions affect only the selected worktree, subfolder "Expand All" expands from that folder down # Objective The project panel had no discoverable way to expand or collapse all entries. The only ways were keyboard shortcuts (`cmd-left` for collapse all) or the right-click context menu. The global `ExpandAllEntries` shortcut (`cmd-right`) was also missing. This PR adds that shortcut and exposes both actions in the context menu so users learn the keybindings while keeping the UI minimal. ## Solution - Add `ExpandAllEntries` action + handler + `expand_all_entries()` method - Add `cmd-right` / `ctrl-right` keybinding for `ExpandAllEntries` (global), mirroring the existing `cmd-left` for `CollapseAllEntries` - Add "Expand All" to the right-click context menu for both root entries and subfolder entries - Update root-entry "Collapse All" to show its keybinding hint via `.action(Box::new(CollapseAllEntries))` - **Per-worktree behavior**: each root entry's context menu actions affect only that worktree, subfolder "Expand All" expands from that folder down ## Testing - Added 6 GPUI tests in `project_panel_tests.rs`: - `test_expand_all_entries`: single worktree - `test_expand_all_entries_multiple_worktrees`: global expand across worktrees - `test_expand_all_entries_via_window_dispatch`: action dispatch path - `test_per_worktree_expand`: expand only the clicked worktree - `test_per_worktree_collapse`: collapse only the clicked worktree, keep root visible - `test_expand_all_entries_with_auto_fold`: expand with auto_fold_dirs - Ran `cargo test -p project_panel`: 106 pass **Manual testing for reviewers:** 1. Open a project with nested directories and open the Project Panel 2. Right-click a root entry, confirm "Expand All" and "Collapse All" appear with their keybinding hints (`⌘→` / `⌘←`) 3. Right-click a subfolder, confirm "Expand All" and "Collapse All" appear 4. Click "Expand All" on a subfolder, confirm only that folder's subtree expands 5. Click "Collapse All", confirm children collapse but the root stays visible 6. Open a multi-folder workspace. Right-click the second root and click "Expand All", confirm only that folder expands 7. Press `cmd-right` (or `ctrl-right`), confirm all worktrees expand globally Tested on macOS only. Linux and Windows should behave the same since there is no platform-specific code. ## 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 adheres to Zed's UI standards ([UX/UI](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) and [icon](https://github.com/zed-industries/zed/blob/main/crates/icons/README.md) guidelines) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable ## Showcase https://github.com/user-attachments/assets/adc501d7-8e3a-4687-aef0-dc00426d232d --- Release Notes: - Added `Expand All` and `Collapse All` to the project panel right-click context menu with keybinding hints. - Added `cmd-right` / `ctrl-right` keybinding to expand all entries. --------- Co-authored-by: Danilo Leal <daniloleal09@gmail.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> |
||
|
|
7854e4535d |
terminal: Fix procfs file descriptor leak in PTY process tracking (#58683)
Closes #58651 ## Problem On Linux, long-lived Zed sessions accumulate thousands of open procfs handles (`/proc/<pid>/stat`, `/proc/<pid>/task/<tid>/stat`). A degraded 6-hour session was measured holding **9,675 FDs, 97% of them never-closed procfs stat handles**, alongside system-wide clipboard breakage (Wayland clipboard `send()` stretching from 13 ms to ~17 s, which makes every other client abort the paste). The leak comes from `PtyProcessInfo` in `crates/terminal/src/pty_info.rs`, through three interacting sysinfo 0.37 behaviors: 1. **Hidden full-system snapshot per terminal.** `System::new_with_specifics(RefreshKind::nothing().with_processes(…))` immediately refreshes **all** processes. Each refreshed process gets a `Process` entry that caches an **open `/proc/<pid>/stat` file** for the lifetime of the entry (a documented sysinfo optimization). 2. **Task enumeration is opt-out.** `ProcessRefreshKind::nothing()` keeps `tasks: true`, so that constructor snapshot also creates one entry — and one open `/proc/<pid>/task/<tid>/stat` — **per thread on the machine**, per terminal. 3. **No eviction outside the refreshed set.** The recurring refresh uses `ProcessesToUpdate::Some(&[foreground_pid])`; sysinfo's dead-process sweep only visits pids in that list. Every former foreground process (one per command the user runs) therefore stays in the map forever, pinning its FD. sysinfo silently raises `RLIMIT_NOFILE` and budgets half of it (~262k) for this cache, so the process never hits `EMFILE` — it just degrades. Reproduction (standalone, sysinfo 0.37.2, Fedora 44): constructing one `System` the way `PtyProcessInfo::new` does instantly retains **3,566 FDs**; each simulated shell command leaks one more, unbounded. ## Fix All changes confined to `pty_info.rs`: - `.without_tasks()` on the `ProcessRefreshKind` — eliminates the per-thread handle class entirely. - Replace the constructor's implicit all-process scan with `System::new()` plus a refresh of just the spawned child, so `kill_child_process()` still works before the first foreground refresh. - Rebuild the `System` whenever the foreground pid changes, and refresh `[foreground, child]` so the dead-process sweep can actually evict stale entries. The map is now bounded at 2 entries per terminal. With the fix, the same repro stays flat at ~6 FDs across arbitrary command churn, and the foreground process info (name/cwd/argv for tab titles) keeps working. The regression test fails on `main` (3,747 retained entries on a desktop system) and passes with the fix (≤ 2). Note: the ~17 s clipboard `send()` on the degraded session is a coupled symptom; the FD/process-map bloat is the verified defect fixed here. The Wayland data-source lifecycle is tracked separately in #58446. Release Notes: - Fixed a file descriptor leak in terminal process tracking that degraded long-running sessions on Linux, including system-wide clipboard breakage ([#58651](https://github.com/zed-industries/zed/issues/58651)). Signed-off-by: Florentin Dubois <florentin.dubois@clever.cloud> |
||
|
|
5989a369d3 |
ep: Send V4 prediction requests (#59930)
# Objective - Describe the objective or issue this PR addresses. - If you're fixing a specific issue, use "Fixes #X" for each issue as [described in the GitHub docs](https://docs.github.com/en/issues/tracking-your-work-with-issues/using-issues/linking-a-pull-request-to-an-issue#linking-a-pull-request-to-an-issue-using-a-keyword). ## Solution - Describe the solution used to achieve the objective above. ## Testing - Did you test these changes? If so, how? - Are there any parts that need more testing? - How can other people (reviewers) test your changes? Is there anything specific they need to know? - If relevant, what platforms did you test these changes on, and are there any important ones you can't test? ## 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 adheres to Zed's UI standards ([UX/UI](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) and [icon](https://github.com/zed-industries/zed/blob/main/crates/icons/README.md) guidelines) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable ## Showcase > This section is optional. If this PR does not include a visual change or does not add a new user-facing feature, you can delete this section. - Help others understand the result of this PR by showcasing your awesome work! - If this PR includes a visual change, consider adding a screenshot, GIF, or video - A before/after comparison is very useful for changes to existing features! While a showcase should aim to be brief and digestible, you can use a toggleable section to save space on longer showcases: <details> <summary>Click to view showcase</summary> My super cool demos here </details> --- Release Notes: - N/A or Added/Fixed/Improved ... |
||
|
|
90587dd639 |
Keep inline code pipes inside markdown table cells (#57744)
## Summary Fixes markdown table rendering when inline code spans contain pipe characters. Code such as `` `a|b` `` and `` `a||b` `` now stays in one table cell instead of being split into extra columns. ## Why Agent output and markdown previews can include regexes, shell snippets, and other code spans with `|` characters inside tables. Before this change, those pipes could be parsed as table delimiters even though they were part of inline code. ## Changes - Masks raw pipes only inside matched inline code spans before `pulldown-cmark` parses tables. - Restores rendered code-span text from the original source range, including escaped table pipes. - Avoids masking unmatched backticks, fenced code blocks, indented code blocks, and invalid fence closers. - Adds parser and renderer coverage for raw pipes, escaped pipes, unmatched inline code, invalid fences, and code-span link callbacks. Manual check: generated agent responses across multiple models render tables containing `` `a|b` ``, `` `(a|b)` ``, and `` `a||b` `` as single code-span cells rather than split columns. ## Screenshots / Recordings | Before | After | | --- | --- | | <img width="702" height="532" alt="Before" src="https://github.com/user-attachments/assets/f9b7606f-15d5-41bc-980c-5e26337f9be4"> | <img width="846" height="536" alt="After" src="https://github.com/user-attachments/assets/60a7a9bf-8417-4146-ac37-0725dd8b4e3c"> | ## 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 #57683 Release Notes: - Fixed markdown table rendering for inline code spans that contain pipe characters. --------- Co-authored-by: Smit Barmase <heysmitbarmase@gmail.com> Co-authored-by: Tom Houlé <tom@tomhoule.com> |
||
|
|
db30c67ed2 |
project_panel: Add markdown preview context menu item (#57112)
Opening a markdown file from the project panel used to require four steps: - click the file (opens raw editor) - right-click the editor tab - select "Open Markdown Preview" - then close the raw editor tab This PR shortcuts that to a single right-click (or keypress) from the project panel. Right-clicking a markdown file in the project panel now shows an **Open Markdown Preview** option. Selecting it opens the rendered markdown preview directly — no raw editor tab is left behind. The same shortcut used in the editor (Cmd+Shift+V on macOS, Ctrl+Shift+V on Windows/Linux) also works when focus is in the project panel. ## How it works - **Context menu**: `OpenMarkdownPreview` action is registered and surfaced in the right-click menu only for `.md`/`.markdown` files. - **Keybinding**: `cmd-shift-v` / `ctrl-shift-v` bound to `project_panel::OpenMarkdownPreview` in the `ProjectPanel` context, mirroring the existing editor binding. - **Loading**: The file is opened via `open_path_preview` with `focus_item: false, activate: false`, so the raw editor is loaded into the buffer system but never becomes the visible tab. - **Preview construction**: `MarkdownPreviewView::create_markdown_view` is called directly (no `dispatch_action` indirection, which would have been deferred and caused a race). The preview is added to the active pane and the raw editor tab is removed atomically in one synchronous pane update. - **Pre-existing tabs**: Before loading, all panes are checked for an existing item at the file's project path. If the file is already open in raw mode, `remove_item` is skipped — the existing tab is left untouched. Release Notes: - Added "Open Markdown Preview" context menu item to Project Panel markdown entries. --------- Co-authored-by: Smit Barmase <heysmitbarmase@gmail.com> Co-authored-by: Tom Houlé <tom@tomhoule.com> |
||
|
|
eb87750323 |
gpui_windows: Add missing windows dependency feature (#59886)
https://github.com/zed-industries/zed/pull/59831 broke the crate from compiling standalone --- Release Notes: - N/A or Added/Fixed/Improved ... |
||
|
|
5c58d5c49a |
agent_ui: Refactor the queue feature and add steering ability (#59310)
Closes AI-367 This PR significantly refactors the queue feature so that we don't rely on indexes being counted and synced across various state points of the thread view. Instead, I'm introducing a dedicated message queue module where we control through a stable queue entry ID all the states of a given queued message. Additionally, it's relevant to note that I changed the default behavior of queued messages on this PR so that they get sent only at the end of the generation. This makes the out-of-the-box, default behavior of the feature consistent across the native and external agents, given we never could pull off the feature with the latter. I personally never liked that behavior anyway, but I do appreciate how some people do. Because of that, though, for the Zed agent, a "Steer" toggle button is available for whenever you'd like to signal that a queued message should be sent at the turn boundary. This is not a setting, though; decided to go simpler at this moment. It's something you can choose on a per-message basis. Ultimately, I think this implementation makes the overall shape of the feature much more stable and easier to maintain overtime. Release Notes: - Agent: Changed the default behavior of queued messages for the Zed agent so that they get send at the end of the generation. The ability to steer them (i.e., send the message at the end of a turn boundary) is still possible to be toggled. |
||
|
|
f0cb9fc8af |
editor: Fix grammar in comment (#59951)
This is less of an actual fix as more something to test some GitHub stuff with. Release Notes: - N/A |
||
|
|
0b61ce2039 |
language_models: Surface disabled cloud models (#59781)
Extends the support for disabled model state introduced in https://github.com/zed-industries/zed/pull/59606 to Zed Cloud hosted models. Release Notes: - N/A |
||
|
|
46ff888db8 |
markdown_preview: Add font size settings and actions (#55489)
Add support for scaling the Markdown preview's body text and headings with `cmd-=` / `cmd--` / `cmd-0`. Previously these shortcuts only resized code blocks because the preview's body used `ui_font_size` and headings used a rem-based scale anchored to it, while the keybindings only mutated `BufferFontSize`. The preview's scroll subtree is now wrapped in `WithRemSize(buffer_font_size)`, so `1rem` resolves to the buffer font size inside the preview. Body text, headings (`text_3xl`/`text_2xl`/...), and rem-based spacing all scale together. The outer focus root and scrollbar remain at the UI font size. 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 #55374 Release Notes: - Added `markdown_preview_font_size` setting and actions to scale Markdown preview font size separately from the editor. --------- Co-authored-by: Smit Barmase <heysmitbarmase@gmail.com> |
||
|
|
35eaeb94a7 |
gpui: Fix xdg_toplevel app_id set to None at first commit on Wayland (#55583)
This PR fixes the default behaviour of setting `app_id` to `None` which breaks the rules based management by KWin as the first commit doesn't have the actual `app_id` and apply initially setting stops checking for the window by when it updates. 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 #53962 Release Notes: - Fixed KWin not respecting Zed's rules due to mismatch of toplevel app_id at startup |
||
|
|
f36a008905 |
Fix navigating to Collab URLs not working when not connected (#59652)
# Objective - Fix collab channel links opened from URL actions or the CLI when Zed is signed in but not currently connected to the collab server. ## Solution - Connect to collab before handling channel joins or channel notes links. - Keep downstream errors visible if connecting or opening still fails. ## 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 adheres to Zed's UI standards ([UX/UI](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) and [icon](https://github.com/zed-industries/zed/blob/main/crates/icons/README.md) guidelines) - [ ] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable --- Release Notes: - Fixed opening collab links when Zed is not already connected to the collaboration server. |
||
|
|
ec7c11c65c |
Fix delayed titlebar clicks on macOS 27 Beta (#59836)
## Summary macOS 27 Beta delays clicks in titlebar regions while AppKit determines whether a gesture should become a drag, single click, or double click. Zed's main workspace windows render a custom titlebar that already handles window movement via `Window::start_window_move`, so they do not need AppKit's native movable-titlebar behavior. This sets `is_movable` to `false` for the main `MultiWorkspace` windows and documents the `WindowOptions::is_movable` caveat for GPUI users with custom titlebars. ## Background The previous fix for this, #58947, used AppKit's private `_opaqueRectForWindowMoveWhenInTitlebar` SPI to mark GPUI's full-size content view as app-owned titlebar content. That fixed delayed titlebar clicks, but was later reverted in #59214 because it also affected windows that rely on AppKit's native titlebar dragging, like the settings window. This PR takes a narrower approach by only changing Zed's main custom-titlebar windows. Those windows already implement dragging explicitly via `Window::start_window_move`, so disabling AppKit's native movable-titlebar behavior fixes the macOS 27 Beta click delay without affecting other window types. Release Notes: - Fixed delayed clicks in the custom titlebar on macOS 27 Beta. |
||
|
|
e0f77d16fb |
Update bundled JSON schemas (2026-04-29) (#58948)
./script/update-json-schemas 16c22767 - Improved `script/update-json-schemas` - Fix paths to match new locations of schemas - Add support for specifying an explicit commit - Use sed to replace `json.` links with `www.` in schemas - Updated JSON schemas to [SchemaStore/schemastore@16c2276](https://github.com/SchemaStore/schemastore/tree/16c227677c1cb71864593f63382705e8c7390810) (2026-04-29; last updated 2025-02-28) - [tsconfig.json](https://github.com/SchemaStore/schemastore/commits/master/src/schemas/json/tsconfig.json) @ [16c2276](https://raw.githubusercontent.com/SchemaStore/schemastore/16c227677c1cb71864593f63382705e8c7390810/src/schemas/json/tsconfig.json) - [changes](https://github.com/SchemaStore/schemastore/commits/16c227677c1cb71864593f63382705e8c7390810/src/schemas/json/tsconfig.json) - [package.json](https://github.com/SchemaStore/schemastore/commits/master/src/schemas/json/package.json) @ [16c2276](https://raw.githubusercontent.com/SchemaStore/schemastore/16c227677c1cb71864593f63382705e8c7390810/src/schemas/json/package.json) - [changes](https://github.com/SchemaStore/schemastore/commits/16c227677c1cb71864593f63382705e8c7390810/src/schemas/json/package.json) - Updates tsconfig.json to support ES2025 stuff. - Updates package.json to support `nodemonConfig` Note, this is pinned to an old commit (https://github.com/SchemaStore/schemastore/commit/16c22767) because anything after https://github.com/SchemaStore/schemastore/pull/5631 will result in errors for all referenced schemas in package.json. This occurs as they are all now relative links, which cannot be resolved for the schema injected via config. This is also a hint that the current method of bundling of package.json schema in practice triggers json-language fetching 8 other nested schemas. Probably worth revisiting that. CC: @probably-neb as someone who recently worked on the schemastore stuff. Self-Review Checklist: - [Yes] I've reviewed my own diff for quality, security, and reliability - [N/A] Unsafe blocks (if any) have justifying comments - [N/A] The content adheres to Zed's UI standards ([UX/UI](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) and [icon](https://github.com/zed-industries/zed/blob/main/crates/icons/README.md) guidelines) - [N/A] Tests cover the new/changed behavior - [N/A] Performance impact has been considered and is acceptable Release Notes: - Update bundled tsconfig.json and package.json schemas --------- Co-authored-by: Ben Kunkle <ben.kunkle@gmail.com> |
||
|
|
dae3e574e4 |
gpui_linux: Improve error message when X11 and Wayland feature flags are missing (#58685)
Improves `gpui_linux` error messages for missing feature flags. Currently, you'd need to look at the source & Rust backtrace to diagnose the error shown when the feature flags are missing. 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: - Improve `gpui_linux` error messages for missing feature flags --------- Co-authored-by: Tom Houlé <tom@tomhoule.com> |
||
|
|
eae0b583c0 |
markdown: Fix example crash on Linux (#58406)
markdown: Fix example crash on Linux by enabling wayland/x11 features The markdown example panics with `unreachable!()` on Linux because `gpui_platform`'s default features are empty, and the example doesn't explicitly enable `wayland` or `x11`. Release Notes: - N/A |
||
|
|
593ca12e3f |
ai: Add Max reasoning effort (#59806)
# Objective More and more models are supporting the `max` reasoning effort (DeepSeek V4, GLM 5.2, etc) and that was missing from Zed. ## Solution Added `ReasoningEffort::Max` level and implemented support for that across providers. For most providers this is a no-op as they don't support that (`max` is missing from `supported_reasoning_levels()`) but for some providers this required tiny changes: for OpenCode there is now a proper difference between `xhigh` and `max` (this bug was actually what triggered this whole PR) and for DeepSeek reasoning levels were migrated from a custom `deepseek::ReasoningEffort`. ## Testing Tested and confirmed working with a simple _"rename this variable for me. add a function. delete the function"_ test across a few providers (OpenCode, GitHub Copilot, and DeepSeek). ## 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 adheres to Zed's UI standards ([UX/UI](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) and [icon](https://github.com/zed-industries/zed/blob/main/crates/icons/README.md) guidelines) - [ ] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable ## Showcase N/A --- Release Notes: - OpenAI-compatible: added support for `max` reasoning levels - OpenCode: added support for `max` reasoning levels |
||
|
|
99129bb29e |
zeta_prompt: Add V4 edit prediction API types (#59869)
# Objective Part of EP-10 Closes EP-118 - Describe the objective or issue this PR addresses. - If you're fixing a specific issue, use "Fixes #X" for each issue as [described in the GitHub docs](https://docs.github.com/en/issues/tracking-your-work-with-issues/using-issues/linking-a-pull-request-to-an-issue#linking-a-pull-request-to-an-issue-using-a-keyword). ## Solution - Describe the solution used to achieve the objective above. ## Testing - Did you test these changes? If so, how? - Are there any parts that need more testing? - How can other people (reviewers) test your changes? Is there anything specific they need to know? - If relevant, what platforms did you test these changes on, and are there any important ones you can't test? ## 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 adheres to Zed's UI standards ([UX/UI](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) and [icon](https://github.com/zed-industries/zed/blob/main/crates/icons/README.md) guidelines) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable ## Showcase > This section is optional. If this PR does not include a visual change or does not add a new user-facing feature, you can delete this section. - Help others understand the result of this PR by showcasing your awesome work! - If this PR includes a visual change, consider adding a screenshot, GIF, or video - A before/after comparison is very useful for changes to existing features! While a showcase should aim to be brief and digestible, you can use a toggleable section to save space on longer showcases: <details> <summary>Click to view showcase</summary> My super cool demos here </details> --- Release Notes: - N/A or Added/Fixed/Improved ... Co-authored-by: Nbarry <nbarry@zed.dev> |
||
|
|
b6e1e27887 |
agent: Truncate display name using grapheme clusters in config option selector (#59898)
This pull request updates how long configuration option names are displayed in the UI to better handle Unicode characters, ensuring that names are truncated by grapheme clusters (user-perceived characters) rather than bytes or code points. This prevents visual glitches with multi-codepoint characters like emojis or accented letters. The main changes are: **Unicode handling improvements:** * Added the `unicode-segmentation` crate as a workspace dependency in `Cargo.toml` to support grapheme-aware string operations. * Updated import statements in `config_options.rs` to include `unicode_segmentation::UnicodeSegmentation`. **UI display logic:** * Changed the truncation logic for configuration option display names in `ConfigOptionSelector` to use `.graphemes(true).take(32)` instead of slicing bytes, ensuring proper handling of Unicode graphemes. --- Release Notes: - Agent: Made label truncation of configuration options in the agent panel more robust against non-single-byte characters like emojis and others. --------- Co-authored-by: Danilo Leal <daniloleal09@gmail.com> |
||
|
|
e6ea825ffa |
terminal: Swap right and middle mouse button mappings (#59844)
# Objective `MouseButton::Right` was mapped to `MouseButtonCode::MiddleButton` and vice versa, causing right-click and middle-click to behave as each other in the terminal. ## Solution Swapped the two arms of the match expression in `crates/terminal/src/mappings/mouse.rs`. ## Testing Tested manually: opened a terminal pane, verified that right-click and middle-click now produce the correct events. Tested on: Windows ## Self-Review Checklist: - [x] I've reviewed my own diff for quality, security, and reliability - [ ] Unsafe blocks (if any) have justifying comments - [ ] The content adheres to Zed's UI standards (UX/UI and icon guidelines) - [ ] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable --- Release Notes: - Fixed right-click and middle-click being swapped in the terminal. |
||
|
|
99c3d17da6 |
text_finder: Open match on the right column (#59840)
## Summary When opening a result from the text finder navigate to the exact match position the same way project search already does. Previously the text finder opened the file at the start of the matched line, while project search lands the cursor on the start of the match (correct line and column). ## Solution `go_to_singleton_buffer_point` now uses `SearchMatch::relative_range.start `as the column instead of 0. ## Testing - Manual: search in the text finder → open a result whose match starts mid-line → cursor lands on the start of the match. Verified for both opening in the current pane and opening in a split. Release Notes: - Improved text finder to open files at the matched column Co-authored-by: ozacod <ozacod@users.noreply.github.com> |
||
|
|
25ea339552 |
git_panel: Focus back on commit editor when expanded (#59901)
Update the focus handle returned by the `GitPanel::focus_handle` method in order to ensure that, if the commit editor is currently expanded, using the `git_panel::ToggleFocus` action will correctly focus back on the expanded editor, rather than on the panel. # Objective When using the expanded commit editor, if one focuses away from the panel and then uses the `git panel: toggle focus` action in order to focus back on the panel, the focus will land on the panel, which is now being rendered behind the commit editor. ## Solution Update the focus handle returned by the `GitPanel` to take into consideration whether the commit editor is expanded and, in that case, return the editor's focus handle instead. ## Testing Tested both manually as well as through a newly introduced test – `git_ui::git_panel::tests::test_focus_handle`. ## Self-Review Checklist: - [x] I've reviewed my own diff for quality, security, and reliability - [ ] Unsafe blocks (if any) have justifying comments - [ ] The content adheres to Zed's UI standards ([UX/UI](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) and [icon](https://github.com/zed-industries/zed/blob/main/crates/icons/README.md) guidelines) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable ## Showcase <details> <summary>Before</summary> https://github.com/user-attachments/assets/0e2647f3-2835-485f-8f01-2128d2de6b8e </details> <details> <summary>After</summary> https://github.com/user-attachments/assets/cc77fae7-e76c-4389-82b0-f4e7ec8258d7 </details> --- Release Notes: - Fixed `git panel: toggle focus` to focus back on the commit editor in case it is expanded. |
||
|
|
e7afe9fcf9 |
git_ui: Disable remote button during operations (#59874)
# Objective This change prevents users from starting multiple Git remote operations at the same time from the Git panel. Fetch, pull, and push can take time, may prompt for credentials, and can update shared repository state, so allowing repeated clicks can create duplicated work, confusing UI feedback, or overlapping Git commands. ## Solution The panel now records when a remote operation is in progress, disables the main remote action button, and shows a clear tooltip such as “Push in progress.” When the async task exits, the state is cleared and the button is re-enabled. This keeps the UI aligned with the operation lifecycle and makes repeated clicks harmless. --- Release Notes: - Git: Improved performance by not allowing multiple remote Git operation to start at the same time. --------- Signed-off-by: Xiaobo Liu <cppcoffee@gmail.com> Co-authored-by: Danilo Leal <daniloleal09@gmail.com> |
||
|
|
6e085b2fdc |
agent_ui: Show base name for duplicate file mentions in the Agent Panel (#59845)
# Objective - Fixes #59654 When the same file was added as a mention more than once in the Agent Panel, the label would expand to the full absolute path instead of staying at the base filename. Before <img width="734" height="438" alt="Screenshot 2026-06-24 at 11 19 30 AM" src="https://github.com/user-attachments/assets/94450eef-088a-49aa-97d3-80d6dd06925b" /> ## Solution The algorithm in `compute_disambiguation_details` treats two entries with the same URI as a "collision" and tries to resolve it by adding more parent path components. Since the paths are identical it can never succeed and keeps escalating to the full path. Fix by deduplicating URIs via a `HashSet` before passing them to `compute_disambiguation_details`, so identical mentions share a single entry and are never flagged as collisions. ## Testing Reproduced by opening the Agent Panel, adding the same file as a mention twice, and observing the label. Before: label showed the full absolute path. After: label stays at the base filename. Tested on macOS. After <img width="638" height="215" alt="Screenshot 2026-06-24 at 11 20 09 AM" src="https://github.com/user-attachments/assets/5acac2bd-d5a3-41c4-827c-84ccdc3a064d" /> ## Self-Review Checklist: - [x] I've reviewed my own diff for quality, security, and reliability --- Release Notes: - Fixed duplicate file mentions in the Agent Panel showing the full absolute path instead of the base filename. --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> Co-authored-by: Danilo Leal <daniloleal09@gmail.com> |
||
|
|
ced0d857fd |
go: Highlight predeclared types and built-in functions (#59780)
Tag Go's universe-scope identifiers as @type.builtin and @function.builtin, matching Rust, TypeScript, and Python grammars (and upstream tree-sitter-go / nvim-treesitter / Helix). Themes already style these captures, so Go was the only major language not distinguishing built-ins. # Objective Adds support for `@type.builtin` and `@function.builtin` targeted syntax highlighting. ## Solution Defined builtin functions and types in Go's highlights.scm. ## Testing All screenshots are with `"semantic_tokens": "off"`. Built with `--release` flag. Before <img width="591" height="619" alt="Screenshot_2026-06-24_03-15-56" src="https://github.com/user-attachments/assets/996e48a0-4e46-45fa-a8fd-ff64820e58ac" /> <img width="591" height="619" alt="Screenshot_2026-06-24_03-15-11" src="https://github.com/user-attachments/assets/b875c02b-80eb-4a4c-b9df-341ffd29ee5c" /> After <img width="591" height="650" alt="Screenshot_2026-06-24_03-17-08" src="https://github.com/user-attachments/assets/fca72a77-6359-4bb5-916e-a2e6e8b5c539" /> <img width="591" height="650" alt="Screenshot_2026-06-24_03-17-44" src="https://github.com/user-attachments/assets/48a983ec-743c-4edc-abf3-915a759b2b23" /> ## Self-Review Checklist: - [x] I've reviewed my own diff for quality, security, and reliability - [ ] Unsafe blocks (if any) have justifying comments - [ ] The content adheres to Zed's UI standards ([UX/UI](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) and [icon](https://github.com/zed-industries/zed/blob/main/crates/icons/README.md) guidelines) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable Release Notes: - go: Add support for highlighting builtin types and functions |
||
|
|
45a4d87eed |
Fix recent projects footer overflowing (#59891)
The width of the recent projects picker was set too small. When selecting an item that is already opened an additional action (remove current window) appears that overflows. This sets the width such that that no longer occurs. fixes: #59847 Release Notes: - N/A (bug on preview only) |
||
|
|
17c0ebb0f7 |
ep: Batch settled edit prediction telemetry (#59857)
# Objective Closes EP-78 - Describe the objective or issue this PR addresses. - If you're fixing a specific issue, use "Fixes #X" for each issue as [described in the GitHub docs](https://docs.github.com/en/issues/tracking-your-work-with-issues/using-issues/linking-a-pull-request-to-an-issue#linking-a-pull-request-to-an-issue-using-a-keyword). ## Solution - Describe the solution used to achieve the objective above. ## Testing - Did you test these changes? If so, how? - Are there any parts that need more testing? - How can other people (reviewers) test your changes? Is there anything specific they need to know? - If relevant, what platforms did you test these changes on, and are there any important ones you can't test? ## 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 adheres to Zed's UI standards ([UX/UI](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) and [icon](https://github.com/zed-industries/zed/blob/main/crates/icons/README.md) guidelines) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable ## Showcase > This section is optional. If this PR does not include a visual change or does not add a new user-facing feature, you can delete this section. - Help others understand the result of this PR by showcasing your awesome work! - If this PR includes a visual change, consider adding a screenshot, GIF, or video - A before/after comparison is very useful for changes to existing features! While a showcase should aim to be brief and digestible, you can use a toggleable section to save space on longer showcases: <details> <summary>Click to view showcase</summary> My super cool demos here </details> --- Release Notes: - N/A or Added/Fixed/Improved ... |
||
|
|
784b14e207 |
ep: Hashed region format (#59837)
# Objective Closes EP-9 - Describe the objective or issue this PR addresses. - If you're fixing a specific issue, use "Fixes #X" for each issue as [described in the GitHub docs](https://docs.github.com/en/issues/tracking-your-work-with-issues/using-issues/linking-a-pull-request-to-an-issue#linking-a-pull-request-to-an-issue-using-a-keyword). ## Solution - Describe the solution used to achieve the objective above. ## Testing - Did you test these changes? If so, how? - Are there any parts that need more testing? - How can other people (reviewers) test your changes? Is there anything specific they need to know? - If relevant, what platforms did you test these changes on, and are there any important ones you can't test? ## 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 adheres to Zed's UI standards ([UX/UI](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) and [icon](https://github.com/zed-industries/zed/blob/main/crates/icons/README.md) guidelines) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable ## Showcase > This section is optional. If this PR does not include a visual change or does not add a new user-facing feature, you can delete this section. - Help others understand the result of this PR by showcasing your awesome work! - If this PR includes a visual change, consider adding a screenshot, GIF, or video - A before/after comparison is very useful for changes to existing features! While a showcase should aim to be brief and digestible, you can use a toggleable section to save space on longer showcases: <details> <summary>Click to view showcase</summary> My super cool demos here </details> --- Release Notes: - N/A or Added/Fixed/Improved ... --------- Co-authored-by: Oleksiy Syvokon <oleksiy.syvokon@gmail.com> Co-authored-by: Oleksiy Syvokon <oleksiy@zed.dev> |
||
|
|
0346cc77ee |
solo_diff_view: Add git action to open file diff and other improvements (#59752)
# Objective - Polish the solo diff review UI by reducing redundant controls and hiding inactive fold controls in split diff views. ## Solution - Collapse the solo diff header's `Stage File` / `Unstage File` actions into one button that shows the action relevant to the file's current staging state. - Stop reserving fold gutter space and rendering fold crease toggles for editors with companion snapshots, matching the existing LHS split diff behavior. ## Testing - `cargo fmt --check` - `cargo check -p git_ui` ## 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 adheres to Zed's UI standards ([UX/UI](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) and [icon](https://github.com/zed-industries/zed/blob/main/crates/icons/README.md) guidelines) - [ ] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable ## Showcase Before, the solo diff header showed both file-level staging actions at once, and the RHS split diff gutter could show fold arrows that did not work in that view. After this change, the header shows the relevant file-level staging action and split companion panes no longer show inactive fold controls. Release Notes: - Improved solo diff controls by showing the relevant file staging action and hiding inactive fold toggles in split diffs. |
||
|
|
0b458e53a5 |
extension_host: Sync language extensions to remotes (#56487)
Resolves #56068 Remote extension sync previously only sent extensions that can run remotely: language servers, debug adapters, and debug locators. That excluded language-only extensions such as TOML, so a remote session could have Tombi synced and loaded while the remote language registry still lacked TOML's language definition. This diff keeps the remote sync set narrow: it starts from extensions that can run remotely, then adds the extension that defines each language referenced by those extensions' language servers. This installs the TOML language config alongside Tombi without syncing unrelated language-only extensions, allowing project settings schemas to recognize language names like TOML and allowing remote language servers to attach to buffers whose language is provided by a separate extension. Release Notes: - Fixed remote sessions failing to recognize languages provided by language-only extensions. --------- Co-authored-by: Finn Evers <finn.evers@outlook.de> |