Commit log

0056bbe editor: Use tabs bitmask when syncing (#48366)

Click to expand commit body
Release Notes:

- N/A

Marco Mihai Condrache created

4433d6d docs: Apply brand voice standards to AI documentation (#48401)

Click to expand commit body
## 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)

Click to expand commit body
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)

Click to expand commit body
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)

Click to expand commit body
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)

Click to expand commit body
### 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)

Click to expand commit body
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)

Click to expand commit body
`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)

Click to expand commit body
Closes #ISSUE

Release Notes:

- N/A

Piotr Osiewicz created

fdc6282 git: Fix branch diff not updating when committing or changing branches (#48388)

Click to expand commit body
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)

Click to expand commit body
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)

Click to expand commit body
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

356fb94 ci: Run tests only for the changed packages and their dependants (#48380)

Click to expand commit body
We're still gonna run a full test suite on main and in non-PR workflows
exercising tests


Release Notes:

- N/A

Piotr Osiewicz created

c390dda git: Render hunk gutter highlights for side-by-side diff (#48321)

Click to expand commit body
Release Notes:

- N/A

Cole Miller created

ad339e3 docs: Update edit prediction providers (#48055)

Click to expand commit body
Closes #ISSUE

Release Notes:

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

---------

Co-authored-by: Danilo Leal <daniloleal09@gmail.com>

Katie Geer and Danilo Leal created

a5e6964 agent_ui: Refactor `AcpThreadView` (#48339)

Click to expand commit body
Release Notes:

- N/A

---------

Co-authored-by: cameron <cameron.studdstreet@gmail.com>
Co-authored-by: Ben Brandt <benjamin.j.brandt@gmail.com>
Co-authored-by: Smit Barmase <heysmitbarmase@gmail.com>

Bennet Bo Fenner , cameron , Ben Brandt , and Smit Barmase created

5d84932 Do not treat binary Doom WAD files as text (#48349)

Click to expand commit body
I primarily contribute to Doom source ports and related utilities. When
working with Doom WADs, the primary archive format for the game, Zed
will sometimes incorrectly assume that such files are plain text, due to
the nature of said container format not being compressed, some common
text files included in them will trigger a false positive in Zed's text
detection mode.

Considering some of these files can go from a couple dozen to a few
hundred megabytes, this usually makes Zed hang on my lower end machine,
until I manually terminate it :/ and has happened when I accidentally
clicked on one via the file explorer, or when viewing Git diffs.

Release Notes:

- Fixed Doom WAD files being erroneously treated as text

elf-alchemist created

5d2feaa editor: Implement semantic highlighting (#46356)

Click to expand commit body
Part of #7450

Big thanks to @macmv for pushing this forwards so much!

Rebased version of https://github.com/zed-industries/zed/pull/39539 as
working on an in-org branch simplifies a lot of things for us)

Release Notes:

- Added LSP semantic tokens highlighting support

---------

Co-authored-by: Neil Macneale V <neil.macneale.v@gmail.com>
Co-authored-by: Kirill Bulatov <kirill@zed.dev>
Co-authored-by: Zed Zippy <234243425+zed-zippy[bot]@users.noreply.github.com>

Lukas Wirth , Neil Macneale V , Kirill Bulatov , and Zed Zippy created

c43dba1 project: Make individual DAP settings optional (#43647)

Click to expand commit body
Currently, when overriding e.g a `binary` in dap settings, one have to
override all settings, including `args` as it otherwise set it to empty
string.

E.g this config will set `args` and `env` to their empty states, like
empty string and empty map:
```json
{
  "dap": {
    "Delve": {
      "binary": "/path/to/binary"
    }
  }
}
```

This PR changes so that it is instead possible to only override a single
field. This is useful e.g on nixos where you don't want (or cant let)
zed download binaries for you, but you want to use the default args,
such as in Delve, you want zed to configure it with a random listening
port.

Release Notes:

- Improved dap settings so that it is possible to override individual
fields, such as `binary`

Fredrik Enestad created

52c963d git: Ensure the sides of the side-by-side diff use the same hunk controls (#48376)

Click to expand commit body
Fixes hunk controls appearing on the LHS of the branch diff when they
should be disabled

Release Notes:

- N/A

Cole Miller created

e106117 Bump Zed to v0.224 (#48375)

Click to expand commit body
Release Notes:

- N/A

Joseph T. Lyons created

280295c Fix scroll in EP provider sub page when setting migration banner is showing (#48372)

Click to expand commit body
Closes #ISSUE

Release Notes:

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

Ben Kunkle created

3251f69 ep: Lower max_output_tokens default for Ollama (#48370)

Click to expand commit body
Zeta 1 should not be configurable, not by this setting.

Release Notes:

- N/A

---------

Co-authored-by: Ben Kunkle <ben@zed.dev>

Oleksiy Syvokon and Ben Kunkle created

86b9893 gpui(windows): Reduce timer resolution to 1ms (#48364)

Click to expand commit body
Otherwise block_with_timeout is effectively useless on windows as we
would block a minimum of 15ms which is our entire frame budget

Release Notes:

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

Lukas Wirth created

e54480b agent_ui: Fix regression that made edited files unclickable (#48362)

Click to expand commit body
There was a `when()` condition here looking at
`hovered_edited_file_buttons`, which is never turned to true when
hovering over the edited file button, and given we started to pass the
hover styles, tooltip, and on_click handler inside the condition, they
would never work. The solution here is to make these three things
unconditional, so edited files are always clickable.

Release Notes:

- N/A

Danilo Leal created

327cc60 docs: Add BSD 2-Clause as accepted extension license (#48363)

Click to expand commit body
Release Notes:

- N/A

Finn Evers created

d35ac6a acp: Bump agent-client-protocol sdk to 0.9.4 (#48356)

Click to expand commit body
Release Notes:

- N/A

Ben Brandt created

09fece9 languages: Do not show Zed keybinding context in language selector (#48354)

Click to expand commit body
This language is used for the keymap editor and should not be selectable
for normal files. Hence, removing it here from the language selector

Release Notes:

- Fixed an issue where the Zed keybinding context would show up as a
language in the language selector.

Finn Evers created

57e1681 acp: Cleanup unneeded cx from config state methods (#48353)

Click to expand commit body
Release Notes:

- N/A

Ben Brandt created

ab54a7e repl: Add quality of life changes in Jupyter view (#47533)

Click to expand commit body
- Keyboard navigation where you can traverse through cells using up and
down arrow
- Jupyter Logo added 
- Initialize kernel as shutdown for more predictable behavior
- Ability to create .ipynb files with bare essential metadata.
- Optimize editor initialization to avoid cloning the entire notebook
and shortcuts


Release Notes:

- N/A

---------

Co-authored-by: Danilo Leal <daniloleal09@gmail.com>

MostlyK and Danilo Leal created

78c121d docs: Update `git_hosting_providers` setting documentation (#42129)

Click to expand commit body
## Summary

Adds documentation for the `git_hosting_providers` setting that allows
users to configure custom self-hosted Git instances for clickable links.

## Description

This PR documents the previously undocumented `git_hosting_providers`
setting in the Git integration documentation. The setting allows users
to configure Zed to recognize and create clickable links to issues, pull
requests, and commits on self-hosted Git instances (like company GitLab
or GitHub Enterprise servers).

## Fixes

Closes #38433

## Test Plan

- Documentation follows the existing style and tone of `docs/src/git.md`
- Placement in the "Git Integrations" section makes logical sense
- Code example matches the format confirmed working by maintainers in
the issue

Release Notes:

- Improved: Documented the `git_hosting_providers` setting for
configuring custom self-hosted Git instances

---------

Co-authored-by: MrSubidubi <finn@zed.dev>

Roland Rodriguez and MrSubidubi created

fa37d87 ep: Meaure isolated whitespace change ratio (#48352)

Click to expand commit body
Release Notes:

- N/A

Oleksiy Syvokon created

8ff5290 acp: Remove feature flag for session config options (#48350)

Click to expand commit body
Release Notes:

- acp: Support ACP Session Config options for agents which provide them.

Ben Brandt created

3b8d003 ep: Heuristic for detecting wrong editable region (#48343)

Click to expand commit body
Release Notes:

- N/A

Oleksiy Syvokon created

e27924a Auto-detect Rust for CodeLLDB panic breakpoints (#48236)

Click to expand commit body
Fixes #48231

## Problem
When debugging Rust programs with CodeLLDB, panic breakpoints ("Rust: on
panic") don't work unless `sourceLanguages: ["rust"]` is explicitly set
in the debug configuration.

Without this setting, CodeLLDB doesn't return the `rust_panic` exception
filter, so the breakpoint shows `locations = 0 (pending)` and never
triggers.

## Root Cause
The Cargo locator correctly adds `sourceLanguages: ["rust"]`
([cargo.rs:97-100](https://github.com/zed-industries/zed/blob/main/crates/project/src/debugger/locators/cargo.rs#L97-L100)),
but other code paths may not:
- VSCode launch.json imports
- Manual debug configurations

## Solution
Auto-detect Rust binaries in `CodeLldbDebugAdapter::get_binary()` by
checking if the program path contains `/target/debug/` or
`/target/release/` (Cargo's standard output directories).

If detected and `sourceLanguages` isn't already set, we automatically
add `["rust"]`.

Release Notes:

- Fixed Rust panic breakpoints not working in debugger when using
CodeLLDB with non-Cargo debug configurations

little Kitchen created

99f80d7 remote: Fix build_remote_server_from_source compression on unix (#48319)

Click to expand commit body
When using gzip, the output path's extension becomes `.gz`.

Release Notes:

- N/A

Andres Suarez created

a74ad50 Disable `subagents` feature flag for staff (#48335)

Click to expand commit body
Release Notes:

- N/A

Bennet Bo Fenner created

21b3cfe docs(gpui): fix incomplete docs for function (#48333)

Click to expand commit body
Release Notes:

- N/A

---------

Co-authored-by: Kirill Bulatov <mail4score@gmail.com>

BlankWasThere and Kirill Bulatov created

d5e58b9 workspace: Close toasts on middle mouse click (#48208)

Click to expand commit body
Release Notes:

- Allow closing notification toasts via middle mouse clicks

Lukas Wirth created

203d03d Remove sweep and mercury feature flags (#48329)

Click to expand commit body
Release Notes:

- N/A

Max Brunsfeld created

fb40850 settings ui: Add page for AI tool permissions (#48277)

Click to expand commit body
This PR adds a page in the settings UI, under the AI section, that
allows to interact and customize permissions for tool calling for each
tool available to Zed's native agent.

Release Notes:

- AI: Added a settings page in the settings editor that allows to
customize tool call permissions for each tool.

---------

Co-authored-by: Richard Feldman <oss@rtfeldman.com>

Danilo Leal and Richard Feldman created

d1aab6a Show provider configuration in EP menu when signed out (#48325)

Click to expand commit body
This way, you can configure external EP providers from the EP menu.

Release Notes:

- N/A

Max Brunsfeld created

389a204 git: Add support for staging/unstaging/restoring to side-by-side diff LHS, and render hunk controls there (#48320)

Click to expand commit body
Release Notes:

- N/A

Cole Miller created

7c11b03 Eagerly connect to Ollama (#48318)

Click to expand commit body
Previously, Ollama would not show up as available until you opened some
UI that prompted connecting to Ollama, like the agent panel or the edit
prediction settings.

Release Notes:

- N/A

Max Brunsfeld created

3ae0da3 git: Use `WrapPointCursor` for spacer blocks calculation (#48315)

Click to expand commit body
`spacer_blocks` is an ideal place to drop `WrapPointCursor` since a
large part of what it does it to convert an increasing sequence of
`MultiBufferPoint` into `WrapPoint`.

Release Notes:

- N/A

Cole Miller created

5b08f4c Remove Postgres and `stripe-mock` from Docker Compose (#48313)

Click to expand commit body
This PR removes the Postgres and `stripe-mock` contains from the Docker
Compose cluster, as these now run in Cloud's Docker Compose cluster.

Release Notes:

- N/A

Marshall Bowers created

8b6bd20 Try to improve nix caching (#48297)

Click to expand commit body
Release Notes:

- N/A

Conrad Irwin created

8bf3b4f git: Refactor buffer_diff point translation APIs for more efficient side-by-side diff syncing (#48237)

Click to expand commit body
The side-by-side diff heavily relies on a primitive from `buffer_diff`
that converts a point on one side of the diff to a range of points on
the other side. The way this primitive is set up on main is pretty
naive--every time we call `points_to_base_text_points` (or
`base_text_points_to_points`), we need to iterate over all hunks in the
diff. That's particularly bad for the case of constructing a new
side-by-side diff starting from a multibuffer, because we call those
APIs once per excerpt, and the number of excerpts is ~equal to the
number of hunks.

This PR changes the point translation APIs exposed by `buffer_diff` to
make it easier to use them efficiently in `editor`. The new shape is a
pair of functions that return a patch that can be used to translate from
the main buffer to the base text or vice versa. When syncing edits
through the block map that touch several excerpts for the same buffer,
we can reuse this patch for excerpts after the first--so when building a
new side-by-side diff, we'll iterate over each hunk just once.

The shape of the new APIs also sets us up to scale down to cases like
editing on the right-hand side of the diff: we can pass in a point range
and give them permission to return an approximate patch that's only
guaranteed to give the correct results when used with points in that
range. For edits that only affect one excerpt, and given how the project
diff is set up, that should allow us to skip iterating over most of the
hunks in a buffer.

Release Notes:

- N/A

---------

Co-authored-by: cameron <cameron.studdstreet@gmail.com>

Cole Miller and cameron created

555c002 Add initial support for edit predictions via Ollama (#48233)

Click to expand commit body
Closes https://github.com/zed-industries/zed/issues/15968

Release Notes:

- Added the ability to use Ollama as an edit prediction provider

---------

Co-authored-by: Oleksiy Syvokon <oleksiy@zed.dev>
Co-authored-by: Ben Kunkle <ben@zed.dev>

Max Brunsfeld , Oleksiy Syvokon , and Ben Kunkle created

eff4b93 ci: Re-enable docs deployments (#48303)

Click to expand commit body
This PR re-enables docs deployments.

The upstream incident has been resolved:
https://www.cloudflarestatus.com/incidents/m1xvmqf37z97

Release Notes:

- N/A

Marshall Bowers created