7ab3910
wip
Click to expand commit body
Co-authored-by: Neel <neel@zed.dev>
Cole Miller and Neel created
7ab3910
wip
Co-authored-by: Neel <neel@zed.dev>
Cole Miller and Neel created
97f4c98
very basic per-line staging visualization
Co-authored-by: Smit Barmase <heysmitbarmase@gmail.com>
Cole Miller and Smit Barmase created
8c047d9
workspace: Remove layout shift from multibuffer toolbar (#48472)
The icons in the far left of the multibuffer toolbar were shifting a bit to the side when toggling the buffer search, so this PR fixes that. I'm also removing the labeled button for the expand/collapse all excerpts; relying only on the icon-button version of it, given it's simpler and similarly clear. https://github.com/user-attachments/assets/8ee44c9f-3082-4160-ac77-a3cf489b318a Release Notes: - N/A
Danilo Leal created
389f665
ep: Store cursor position in global coordinates (#48469)
This also fixes the isolated whitespace change metric, which is not takes cursor position into account (it's okay to insert a newline if it has a cursor on it) Release Notes: - N/A
Oleksiy Syvokon created
a3b36ae
ep: Fix trailing newlines parsing (#48473)
Release Notes: - N/A
Oleksiy Syvokon created
e5579cf
agent_settings: Fix Bedrock model catalog URL (#48382)
The previous URL pointed to the model access page which no longer exists (not a 404, tho). The model catalog page is the current location for selecting and requesting access to Bedrock models. | Before | After | |--------|--------| | <img width="1732" height="1125" alt="Screenshot 2026-02-04 at 12 50 13" src="https://github.com/user-attachments/assets/f513e7c9-aa70-439a-afd0-ef8177ada463" /> | <img width="1732" height="1125" alt="Screenshot 2026-02-04 at 12 52 11" src="https://github.com/user-attachments/assets/6609215e-1bbb-4ed1-b57d-422ed7893498" /> | Release Notes: - Fixed Bedrock model catalog URL in Agent Panel settings
Kunall Banerjee created
a8c3c1a
extension_api: Add `digest` to `GithubReleaseAsset` (#48413)
Round 2 of #46269 with conflicts properly resolved. This came up a few times across various extensions. With us about to ship a new API version soon, it might be worth to add. Release Notes: - N/A --------- Co-authored-by: Zed Zippy <234243425+zed-zippy[bot]@users.noreply.github.com>
Finn Evers and Zed Zippy created
ee41463
ci: Move more jobs to Namespace runners (#48228)
This moves some more of our CI jobs over to xtask and gh-workflow. This primarily originated from the current GitHub actions outage to move these actions over to Namespace runners. However, while I was at it I decided to move these over to gh_workflow, as we benefit from sharing more stuff across these files and less hacking around in YAML-files directly. Release Notes: - N/A
Finn Evers created
dedf390
ci: Use package name for contents of changed_pkgs (#48459)
Helps with #48413 Co-authored-by: Smit Barmase <heysmitbarmase@gmail.com> Release Notes: - N/A Co-authored-by: Smit Barmase <heysmitbarmase@gmail.com>
Piotr Osiewicz and Smit Barmase created
6e5e6cf
languages: Remove duplicate keywords in JS syntax highlighting (#48460)
Fixes an issue where syntax highlighting would be incorrect in certain cases for JS, because of duplicate keyword definitions. Release Notes: - Fixed issue where certain keywords were incorrectly highlighted in JS files
Gaauwe Rombouts created
7694ea2
gpui: Detect thermal state to help the system (#45638)
Apple recommends checking the system’s thermal state and adjusting behavior to reduce resource usage, giving the system a chance to cool down. While this API is macOS-specific, the same idea likely applies to other platforms - those are intentionally out of scope for this PR. As a first step, we cap the frame rate at 60 fps when the system reports a critical thermal state. In that situation, pushing higher frame rates doesn’t buy us anything and just adds more heat. This also gives us a hook for future improvements, like reducing other work when the system is under sustained thermal pressure. Ref: https://developer.apple.com/library/archive/documentation/Performance/Conceptual/power_efficiency_guidelines_osx/RespondToThermalStateChanges.html Release Notes: - Zed now reduces resource usage when the system is under high thermal stress --------- Signed-off-by: Marco Mihai Condrache <52580954+marcocondrache@users.noreply.github.com> Co-authored-by: Anthony Eid <anthony@zed.dev>
Marco Mihai Condrache and Anthony Eid created
92f8ae8
debugger: Wrap TaskContext in Arc to reduce cloning overhead (#47087)
Release Notes: - N/A --------- Signed-off-by: Xiaobo Liu <cppcoffee@gmail.com> Co-authored-by: Anthony Eid <anthony@zed.dev>
Xiaobo Liu and Anthony Eid created
1fe8004
debugger: Fix breakpoint color only updating when mouse moves (#46427)
The other day I was testing the debugging feature and I noticed a **very** small visual bug. When you click on the breakpoint circle to set a breakpoint, the breakpoint color remains in the wrong state until the mouse moves. After debugging for a while, I noticed that the issue was that the PhantomVariableIndicator variable attribute `collides_with_existing_breakpoint` was not being updated until the mouse moved. With the following change, the attribute is updated when the user clicks the breakpoint, toggleling tha attribute. ### Prior behaviour: https://github.com/user-attachments/assets/3dfa8e25-e970-49a3-8e87-0ecadabb3a3c As you can see in the video, prior to this change, the breakpoint would only change to the correct color when the mouse moved. ### New behaviour https://github.com/user-attachments/assets/356e84dc-42e5-4440-afab-0fbc4b3a1f0a With this new change, the breakpoint updates right after the user clicks, no need to move the mouse. ### Disclaimers - I'm new to this codebase, so any feedback is extremely welcomed! If you know of a better place where this could be handled, let me know and I'll explore further. https://github.com/user-attachments/assets/12d4b9df-e5d7-4955-b58d-dd63563c5c1b Release Notes: - N/A --------- Co-authored-by: Anthony Eid <anthony@zed.dev>
Iago Bermúdez and Anthony Eid created
87dff2a
JetBrains keymap: Add escape key binding to cancel in auto_height mode (#45306)
Closes [#45299](https://github.com/zed-industries/zed/issues/45299) Release Notes: - Fix Escape key does not cancel/dismiss inline assist with Jetbrains keymap Recording: https://github.com/user-attachments/assets/766a9954-2d32-4f43-b81d-acba1cb8e133
Rocky Shi created
9cd2343
editor: Put more syntax walking features on the background (#48450)
Currently we always compute breadcrumbs and sticky headers on every editor paint which is not cheap to do especially in bigger files, moving this off to be computed on event handling where they change and then caching them can save serveral milliseconds per render in bigger files. This also puts matching brackets refreshing and document highlights on a background task, as this tends to block the main task for prolonged time as well. Release Notes: - N/A *or* Added/Fixed/Improved ...
Lukas Wirth created
81562a3
Make middle click not mousedown close tabs (#44916)
Closes #44856 This PR also adds an `on_aux_click` interface to the div element that follows MDM standard https://developer.mozilla.org/en-US/docs/Web/API/Element/auxclick_event Release Notes: - fix bug where mouse down middle click would close tab instead of full middle click --------- Co-authored-by: Anthony Eid <anthony@zed.dev>
Zachiah Sawyer and Anthony Eid created
053a8fe
Handle soft wrap modes when computing wrap width (#46422)
Partially closes #44748 Release Notes: - Fixed the git side panel to respect soft wrap settings --------- Co-authored-by: Anthony Eid <anthony@zed.dev>
Matthew Chisolm and Anthony Eid created
1dca30e
languages: Remove unnecessary `unresolvedReference` semantic token rule (#48448)
This prevents ast based highlighting in unconfigured code Release Notes: - N/A *or* Added/Fixed/Improved ...
Lukas Wirth created
86f307e
project panel: Collapse All improvements (#47328)
Thanks to @jackTabsCode for the original commit that I based my work off of. See: #27703 Release Notes: - Fixed clicking "Collapse All" from context menu on a project root collapsing all project roots instead of that one. - Added new `project panel: collapse selected entry and children` action that collapses the selected directory and all its subdirectories. - Added "Collapse All" option to the context menu for all directories, not just project roots. --------- Co-authored-by: Jack T <jack@jackt.space> Co-authored-by: Smit Barmase <heysmitbarmase@gmail.com>
Austin Cummings , Jack T , and Smit Barmase created
12091a9
project_panel: Fix collapse_all_entries collapsing single worktree root completely (#48443)
For: https://github.com/zed-industries/zed/pull/47328 Release Notes: - Fixed an issue where selecting "Collapse All" on the root directory or triggering the collapse all action would sometimes collapse the entire root instead of keeping it expanded when there's a single worktree.
Smit Barmase created
23e8f13
agent_ui: Fix missing TerminalSelection match arm in mention_set (#48445)
Fix broken main. Release Notes: - N/A
Smit Barmase created
592d218
Parse and render markdown mention links from pasted text (#45426)
Closes [#ISSUE](https://github.com/zed-industries/zed/issues/45408) Release Notes: - Fixed mention links from pasted text. Recording: https://github.com/user-attachments/assets/e0d55562-c9a4-4798-be41-af8b8cd1f5d7
Rocky Shi created
804caba
git: Add toolbar buttons for `SplittableEditor` (#48323)
Release Notes: - N/A
Cole Miller created
323680f
Fix shell quote bypass in terminal permission system (#48436)
## Problem
Zed's terminal permission system validates commands using regex patterns
against string representations of parsed commands. The
`SimpleCommand::to_string()` method in brush-parser preserves the raw
lexical form including shell quotes, causing pattern matching to fail on
obfuscated commands.
For example, all of these are semantically equivalent to `rm -rf /` in
POSIX shells, but produced different strings from `to_string()` that
bypassed the hardcoded deny pattern `rm\s+(-[rf]+\s+)*/\s*$`:
| Input | `extract_commands()` returned | Matched deny pattern? |
|---|---|---|
| `rm -rf /` | `"rm -rf /"` | ✅ Yes |
| `rm -rf '/'` | `"rm -rf '/'"` | ❌ No |
| `'rm' -rf /` | `"'rm' -rf /"` | ❌ No |
| `r'm' -rf /` | `"r'm' -rf /"` | ❌ No |
| `rm -r'f' /` | `"rm -r'f' /"` | ❌ No |
| `rm -rf \/` | `"rm -rf \\/"` | ❌ No |
Both hardcoded deny patterns (Phase 2, which operates on extracted
sub-commands) and user-configured `always_deny` patterns were affected.
## Fix
Replace the `simple_command.to_string()` call in
`extract_commands_from_simple_command` with manual construction that:
1. Iterates the command name (`word_or_name`) and word arguments from
the suffix
2. Normalizes each word by parsing it into `WordPiece`s via
`brush_parser::word::parse`
3. Reconstructs the semantic (unquoted) value from each piece:
- `Text` — used as-is
- `SingleQuotedText` — used as-is (brush-parser already strips the
wrapping quotes)
- `EscapeSequence` — leading `\` stripped to produce the unescaped
character
- `AnsiCQuotedText` — used as-is (brush-parser already evaluates
`$'...'`)
- `DoubleQuotedSequence` / `GettextDoubleQuotedSequence` — inner pieces
recursively normalized
- `TildePrefix` — preserved as `~` + suffix
- `ParameterExpansion` / `CommandSubstitution` /
`BackquotedCommandSubstitution` / `ArithmeticExpression` — original
source text preserved so patterns like `\$HOME` and `\${HOME}` continue
to match
4. Joins normalized words with spaces
Falls back to the raw `word.value` if word parsing fails.
## Cross-shell safety
The normalization operates on POSIX-parsed ASTs (brush-parser uses POSIX
grammar), so it applies POSIX quoting rules. For non-POSIX shells
(Nushell, PowerShell, Xonsh, Elvish, etc.) where quoting semantics
differ, any mismatch results in false positives (overly cautious
denials), never false negatives. This is the correct error direction for
a security feature. When brush-parser fails to parse a non-POSIX
command, `extract_commands` returns `None` and the existing fallback
(raw-string matching with `allow_enabled=false`) handles it.
(No release notes because granular tool permissions are still
feautre-flagged.)
Release Notes:
- N/A
Richard Feldman created
0dd09b6
git: Render hunk gutter highlights for the side-by-side diff (#48433)
Relanding #48321 Release Notes: - N/A
Cole Miller created
49c7777
Add stacked and split diff icons (#48427)
N/A
Matt Miller created
2b5386b
Fix vim increment/decrement on Markdown list markers (#47978)
`find_target()` failed to match numbers followed by a dot and a non-digit (e.g. `1. item`), because the dot unconditionally reset the scan state, discarding the number. Additionally, numbers at the start of non-first lines were missed because the backward scan stopped on the preceding newline and the forward scan immediately broke on it. Closes #47761 Release Notes: - Fixed vim increment (`ctrl-a`) and decrement (`ctrl-x`) not working on Markdown ordered list markers like `1.`, `2.`, etc. --------- Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com> Co-authored-by: dino <dinojoaocosta@gmail.com>
lex00 , Claude Opus 4.5 , and dino created
7d4dd87
docs: Add missing AI features (Dec. 2025) (#48418)
- Update AI docs with missing features we shipped in December 2025 - Apply new brand voice to new docs Release Notes: - N/A *or* Added/Fixed/Improved ... --------- Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Katie Geer and Claude Opus 4.5 created
18a0103
vim: Add $ and = as subword motion boundaries (#48276)
These changes update subword motions in order to also take `$` and `=` into consideration as stopping punctuation, improving the subword motions for certain languages where `$` and `=` are commonly used, like PHP, for variables and assignments. Closes #48267 Release Notes: - Improved Vim's subword motions to stop at `$` and `=` characters
Dino created
ed3e18d
Reduce rewrapping when agent diffs are present (#48423)
Before this change any agent diff caused us to recompute the entire buffer's wraps, because we didn't handle the base text of diffs changing. Now, thanks to anchors, we can do that. Release Notes: - Fixed the editor rewrapping like crazy when agent edits were present
Conrad Irwin created
cfb4cef
Fix multibuffer to not mark everything as edited when buffer diffs don't change (#48424)
Co-authored-by: Cole Miller <cole@zed.dev> Release Notes: - N/A Co-authored-by: Cole Miller <cole@zed.dev>
Conrad Irwin and Cole Miller created
f4b715b
docs: Fix rules description in AI overview (#48420)
Release Notes: - N/A
Danilo Leal created
bae3eda
git: Shader for checkerboard pattern for side-by-side diff (#48417)
Adds `checkerboard` to `Background`, and use it for the side-by-side diff. Note that, since the blockmap can contain multiple `Spacer`s without any gaps in between, we ensure that the checkerboard pattern always shows an even integer number of squares per line, so there are no obvious discontinuities in the pattern when this happens. <img width="590" height="300" alt="image" src="https://github.com/user-attachments/assets/e8f75f90-b230-4078-bce0-cb3c15613fe7" /> Release Notes: - N/A *or* Added/Fixed/Improved ... --------- Co-authored-by: Cole Miller <cole@zed.dev>
Cameron Mcloughlin and Cole Miller created
307f537
Remove cmpl- prefix validation from Mercury feedback (#48410)
Release Notes: - Removes unnecessary prefix validation from Inception API's returned request ID.
Kenan Hasanaliyev created
4cb8591
Differentiate between explicit rejection and ignored in ep acceptance tracking (#48409)
Closes #ISSUE Release Notes: - N/A *or* Added/Fixed/Improved ...
Ben Kunkle created
6a71a60
lsp: Add schema support for LSP settings field (#48332)
This extends the LSP settings schema system to also provide autocomplete
for the `settings` field (used for `workspace/configuration` responses),
in addition to the existing `initialization_options` support (#).
Changes:
- Add `settings_schema` method to `LspAdapter` trait and
`CachedLspAdapter`
- Update schema URL paths to be more explicit:
- `lsp/{adapter}/initialization_options` for init options schema
- `lsp/{adapter}/settings` for settings schema
- Add schema resolution logic for the new settings path
- Update tests to verify both schema references
Release Notes:
- Added autocomplete support for the `settings` field in LSP
configuration, complementing the existing `initialization_options`
autocomplete.
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Shuhei Kadowaki and Claude Opus 4.5 created
dd6f327
Revert "git: Render hunk gutter highlights for side-by-side diff (#48321)" (#48416)
This reverts commit c390dda8241747e0b03dd18ccf0f2e4d7097ee0e. Release Notes: - N/A
Cole Miller created
f0dfb44
ci: Trigger tests on Cargo.toml and Cargo.lock changes (#48412)
Finn found out the hard way that the new cool tech does not quite work at times. Back to the drawing board we go (at least partially). Closes #ISSUE Release Notes: - N/A
Piotr Osiewicz created
0056bbe
editor: Use tabs bitmask when syncing (#48366)
Release Notes: - N/A
Marco Mihai Condrache created
4433d6d
docs: Apply brand voice standards to AI documentation (#48401)
## Summary
Reviewed and updated all 18 files in `docs/src/ai/` to meet Zed's brand
voice standards. Each file was scored against the 8-criterion rubric and
rewritten where needed to achieve 4+ on all criteria.
**Changes include:**
- Remove "Learn how to/about" patterns (8 instances)
- Replace vague phrases ("various types of tasks", "and more") with
specific examples
- Remove taboo words ("seamless", "naturally extends")
- Remove emotional language ("We're excited/thrilled/happy")
- Remove marketing patterns ("Stay tuned!", exclamation points)
- Remove unverifiable claims ("world's fastest")
- Replace hedging with direct statements
- Remove promotional emphasis (`_free_`, `**_for free_**`)
- Fix typo in external-agents.md ("servers" → "serves")
- Fix broken link syntax for Ollama Turbo
## Test plan
- [x] `mdbook build` succeeds
- [x] Grep for remaining taboo phrases (only one "seamless" in MCP
official quote, preserved intentionally)
- [x] All facts preserved (URLs, keybindings, settings keys, prices,
model names)
Fixes AI-8
🤖 Generated with [Claude Code](https://claude.com/claude-code)
---------
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
morgankrey and Claude Opus 4.5 created
4563b5a
lsp: Add `container_name` to `lsp::Symbol` (#46822)
Some language servers include local symbols (e.g., local variables, parameters) in workspace symbol results. Without the `containerName` information, these symbols lack context information, making it difficult to distinguish them from top-level definitions and hindering efficient symbol lookup. This change exposes the `container_name` field from LSP [`SymbolInformation`](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#symbolInformation) to the extension API, allowing language server extensions to access `symbol.container_name` in `label_for_symbol` and provide meaningful context when rendering symbol labels. Note: The `container_name `field is added to all extension API versions because they seem to share the same underlying Rust types via wasmtime bindgen. The field is optional, so existing extensions would remain compatible as far as I understand. Closes #ISSUE Release Notes: - Added `container_name` field to `lsp::Symbol`, accessible via the extension API's `label_for_symbol` function --------- Co-authored-by: MrSubidubi <finn@zed.dev>
Shuhei Kadowaki and MrSubidubi created
a71aa4e
Add telemetry for EP Menu Actions (#48229)
Closes #ISSUE Release Notes: - N/A *or* Added/Fixed/Improved ... --------- Co-authored-by: Ben Kunkle <ben@zed.dev>
Katie Geer and Ben Kunkle created
c82d104
Add telemetry for toolbar menu open events (#48225)
Closes #ISSUE Release Notes: - N/A *or* Added/Fixed/Improved ... --------- Co-authored-by: Ben Kunkle <ben@zed.dev> Co-authored-by: Zed Zippy <234243425+zed-zippy[bot]@users.noreply.github.com>
Katie Geer , Ben Kunkle , and Zed Zippy created
e39c190
edit_prediction: Add Mercury accept/reject tracking (#48306)
### Summary Adds accept/reject tracking for Mercury edit predictions. ### Changes Sends events to https://api-feedback.inceptionlabs.ai/feedback when: Accept — user presses Tab Reject — user presses Escape Ignore — prediction dismissed implicitly (typing, cursor move, etc.) Added `discard_explicit` method to the delegate trait to distinguish explicit vs implicit dismissal. Updated `reject_prediction` and `reject_current_prediction` methods with an `explicit` bool parameter to thread this through to the Mercury feedback logic. Other providers are unaffected—they use the default implementation. Feedback is fire-and-forget in a background thread, only sent for predictions that were shown. ### Data Collected - Request ID (returned from Inception API) - User action (either accept/reject/ignore) - Client Zed version (to track updates made to Zed client which could potentially affect nextedit implementation) Release Notes: - N/A --------- Co-authored-by: Ben Kunkle <ben@zed.dev>
Kenan Hasanaliyev and Ben Kunkle created
477bb89
Expand hardcoded agent terminal security rules (#48399)
Expands the hardcoded security rules that block dangerous `rm` commands
in the agent terminal tool.
### New blocked patterns
- `rm -rf $HOME` / `rm -rf $HOME/` / `rm -rf ${HOME}` / `rm -rf
${HOME}/`
- `rm -rf .` / `rm -rf ./`
- `rm -rf ..` / `rm -rf ../`
- `rm -rf ~/` (previously only `rm -rf ~` was blocked)
### Flag handling improvements
- Simplified the flag character class from `[rRfF]` to `[rf]` since the
regex is already compiled with case-insensitive mode — less confusing,
same behavior.
- Added tests verifying that reversed flags (`-fr`), uppercase (`RM
-RF`), split flags (`-r -f`), and chained commands all get caught.
### Safe commands still allowed
Paths like `rm -rf ./build`, `rm -rf ~/Documents`, `rm -rf
$HOME/Documents`, `rm -rf ../some_dir`, and `rm -rf .hidden_dir` are
**not** blocked.
Release Notes:
- Auto-block a wider range of agent terminal commands, e.g. `rm -rf
$HOME` in addition to `rm -rf ~`
Richard Feldman created
54588a1
Allow always_allow for nushell, elvish, and rc (#48395)
`brush-parser` handles `;` (sequential execution) and `|` (piping) which all these shells use, so we can safely parse their commands for `always_allow` pattern matching. (No release notes because granular tool permissions haven't been released yet.) Release Notes: - N/A
Richard Feldman created
825cf2d
ci: Parse Cargo.toml and Cargo.lock with Python script to determine affected packages (#48389)
Closes #ISSUE Release Notes: - N/A
Piotr Osiewicz created
fdc6282
git: Fix branch diff not updating when committing or changing branches (#48388)
This regressed in #47619 -- previously we would throw away and reopen the diffs used to construct the branch diff pretty eagerly, and as a result the branch diff would update itself when you committed or switched branches. We inadvertently lost that when we switched to retaining those diffs in the git store. Release Notes: - N/A
Cole Miller created
bb2ee34
project_search: Guard replace_next match lookup (#48327)
Release Notes: - N/A Signed-off-by: Xiaobo Liu <cppcoffee@gmail.com>
Xiaobo Liu created
13fbbae
Refer to devcontainer.js rather than devcontainer.cmd.js (#48387)
Closes #46947 When installed with `npm install -g`, devcontainer gets created as `devcontainer.cmd`. However, when invoked as a script from node, it's still `devcontainer.js`. This addresses that difference so that we don't accidentally invoke `devcontainer.cmd.js`. Release Notes: - Fixed devcontainer operation on Windows for when the devcontainer cli is not installed globally
KyleBarton created