Commit log

7327ef6 terminal_view: Fix focusing of center-pane terminals (#37359)

Click to expand commit body
With `reveal_stragegy=always` + `reveal_target=center`,
`TerminalPanel::spawn_task` activates & focuses the pane of the task.
This works fine in the terminal pane but doesn't for
`reveal_target=center`.

Please note: I'm not verified familiar with the architecture and
internal APIs of zed. If there's a better way or if this fix is a bad
idea, I'm fine with adapting this 😃

Closes #35908

Release Notes:

- Fixed task focus when re-spawning a task with `reveal_target=center`

---------

Co-authored-by: Marshall Bowers <git@maxdeviant.com>

Moritz von Göwels and Marshall Bowers created

c1ca730 editor: Make blame and inline blame work for multibuffers (#37366)

Click to expand commit body
Release Notes:

- Added blame view and inline blame support for multi buffer editors

---------

Co-authored-by: Kirill Bulatov <kirill@zed.dev>

Lukas Wirth and Kirill Bulatov created

9228328 Fix rendering on devices that don't support MapOnDefaultTextures (#37456)

Click to expand commit body
Closes #37231

Release Notes:

- N/A

localcc created

d80f9dd languages: Fix python tasks failing when binary contains whitespaces (#37454)

Click to expand commit body
Fixes https://github.com/zed-industries/zed/issues/33459

Release Notes:

- Fixed python tasks failing when the python binary path contains
whitespaces

Lukas Wirth created

ebc22c2 gpui: Don't risk accidentally panicking during tests (#37457)

Click to expand commit body
See the failure in
https://github.com/zed-industries/zed/actions/runs/17413839503/job/49437345296

Release Notes:

- N/A

Nia created

7633bbf acp: Fix issue with claude code /logout command (#37452)

Click to expand commit body
### First issue

In the scenario where you have an API key configured in Zed and you run
`/logout`, clicking on `Use Anthropic API Key` would show `Method not
implemented`.

This happened because we were only intercepting the `Use Anthropic API
Key` click if the provider was NOT authenticated, which would not be the
case when the user has an API key set.

### Second issue

When clicking on `Reset API Key` the modal would be dismissed even
though you picked no Authentication Method (which means you still would
be unauthenticated)

---

This PR fixes both of these issues

Release Notes:

- N/A

Bennet Bo Fenner created

91cbb2e Add onboarding banner for claude code support (#37443)

Click to expand commit body
Release Notes:

- N/A

---------

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

Bennet Bo Fenner and Danilo Leal created

4019926 gpui: Fix overflow_hidden to support clip with border radius (#35083)

Click to expand commit body
Release Notes:

- N/A

---

Same case in HTML example:


https://developer.mozilla.org/en-US/play?id=p7FhB3JAhiVfLHAXnsbrn7JYYX%2Byq1gje%2B%2BTZarnXvvjmaAx3NlrXqMAoI35s4zeakShKee6lydHYeHr

```html
<div style="padding: 50px; text-align: center;">
  <div style="overflow: hidden; border-radius: 24px">
    <div style="background: #000; border: 3px solid red; color: #fff; padding: 8px 28px;">
      Let build applications with GPUI.
    </div>
    <div style="background: #333; border: 3px dashed black; color: #fff; padding: 8px 28px;">
      Let build applications with GPUI.
    </div>
  </div>

  <div style="margin-top: 20px; border-radius: 24px">
    <div style="background: #000; color: #fff; padding: 8px 28px;">
      This is not overflow: hidden.
    </div>
  </div>
</div>
```

<img width="610" height="213" alt="image"
src="https://github.com/user-attachments/assets/5f95e263-e52c-414f-8f0c-e6aa04ceb802"
/>

### Before

<img width="912" height="740" alt="image"
src="https://github.com/user-attachments/assets/f09c1936-52fc-4381-9a50-93977e9d64a6"
/>

### After 

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

<img width="912" height="740" alt="image"
src="https://github.com/user-attachments/assets/4bde58f3-c850-418d-9dc7-d2245852e7d7"
/> |


- [x] Metal
- [x] Blade
- [x] DirectX
- [x] ContentMask radius must reduce the container border widths.
- [x] The dash border render not correct, when not all side have
borders.

Jason Lee created

9a8c505 agent: Update message editor placeholder (#37441)

Click to expand commit body
Release Notes:

- N/A

Danilo Leal created

c446662 Fix font rendering at very large scales (#37440)

Click to expand commit body
Release Notes:

- Fixed fonts disappearing at very large scales on windows

localcc created

6feae92 rust: Improve highlighting in derive macros (#37439)

Click to expand commit body
Follow-up to https://github.com/zed-industries/zed/pull/37049

This fixes an issue where we would lose highlighting in derive macros if
one of the names was qualified.

| Before | After |
| --- | --- |
| <img width="886" height="398" alt="Bildschirmfoto 2025-09-03 um 10 39
25"
src="https://github.com/user-attachments/assets/dbc680e3-6ce3-4059-9934-9daa4c59d4a0"
/> | <img width="886" height="398" alt="Bildschirmfoto 2025-09-03 um 10
38 14"
src="https://github.com/user-attachments/assets/6e10df6f-5158-4bfd-81ab-8f2b384f1e99"
/> |


Release Notes:

- N/A

Finn Evers created

ae840c6 acp: Fix handling of single-file worktrees (#37412)

Click to expand commit body
When the first visible worktree is a single-file worktree, we would
previously try to use the absolute path of that file as the root
directory for external agents, causing an error. This PR changes how we
handle this situation: we'll use the root of the first non-single-file
visible worktree if there are any, and if there are none, the parent
directory of the first single-file visible worktree.

Related to #37213

Release Notes:

- acp: Fixed being unable to run external agents when a single file (not
part of a project) was opened in Zed.

Cole Miller created

d7fd591 Use slice from Rope chunk when possible while iterating lines (#37430)

Click to expand commit body
Release Notes:

- N/A

Michael Sloan created

8d58613 Allow wrapping markdown text into `*` by selecting text and writing the `*` (#37426)

Click to expand commit body
Release Notes:

- Allowed wrapping markdown text into `*` by selecting text and writing
the `*`

Kirill Bulatov created

5a9e186 gpui: Fix intra rustdoc links (#37320)

Click to expand commit body
The only warnings remaining are links to private modules/items, but I
lack knowledge to work out if the referenced modules/items should be
made public, or if the links should be rewritten into exposed
traits/items.

Links to associated items such as trait implementations have to be
written using full markdown format such as:

... [[ `App::update_global` ]](( BorrowAppContext::update_global ))

This is due to https://github.com/rust-lang/rust/issues/74563 which
sadly prohibits fully-qualified syntax:

... [[ `<App as BorrowAppContext>::update_global` ]]

Release Notes:

- N/A

Probably related to https://github.com/zed-industries/zed/pull/37072

Jakub Konka created

2a7761f Instruct macOS users to run `xcodebuild -downloadComponent MetalToolchain` (#37411)

Click to expand commit body
Co-authored-by: Conrad Irwin <conrad.irwin@gmail.com>

Closes #ISSUE

Release Notes:

- N/A

Co-authored-by: Conrad Irwin <conrad.irwin@gmail.com>

chris and Conrad Irwin created

f230960 Remove wsl command line args on non-windows platforms (#37422)

Click to expand commit body
Release Notes:

- N/A

Max Brunsfeld created

1ed17fd Bump Zed to v0.204 (#37415)

Click to expand commit body
Release Notes:

-N/A

Peter Tripp created

7ea7f4e reqwest_client: Remove example (#37410)

Click to expand commit body
This PR removes the example from the `reqwest_client` crate, as it
doesn't seem worth maintaining.

Release Notes:

- N/A

Marshall Bowers created

035d7dd ci: Skip Nix for commits on release branches and tags (#37407)

Click to expand commit body
When doing stable/preview releases simultaneously there are two tags and
two branches pushed. Previously nix was attempting 1 job for each. Our
current mac parallelism is 4.
 
Can't easily test this. 🤷 

Release Notes:

- N/A

Peter Tripp created

9d67276 agent: Fix cut off slash command descriptions (#37408)

Click to expand commit body
Release Notes:

- N/A

Danilo Leal created

161d128 Handle model refusal in ACP threads (#37383)

Click to expand commit body
If the model refuses a prompt, we now:
* Show an error if it was a user prompt (and truncate it out of the
history)
* Respond with a failed tool call if the refusal was for a tool call

<img width="607" height="260" alt="Screenshot 2025-09-02 at 5 11 45 PM"
src="https://github.com/user-attachments/assets/070b5ee7-6ad6-4a63-8395-f9a5093cc40e"
/>
<img width="607" height="265" alt="Screenshot 2025-09-02 at 5 11 38 PM"
src="https://github.com/user-attachments/assets/98862586-390b-494e-b1f8-71d8341c8d9d"
/>



Release Notes:

- Improve handling of model refusals in ACP threads

Richard Feldman created

e1b0a98 ci: Remove Windows crash analysis CI scripts (#36694)

Click to expand commit body
We'll just SSH into the Windows runners and look for crashes there.

Reverts #35926 

Release Notes:

- N/A

---------

Co-authored-by: Peter Tripp <petertripp@gmail.com>

Cole Miller and Peter Tripp created

ae0ee70 Add configurable timeout for context server tool calls (#33348)

Click to expand commit body
Closes: #32668

- Add
[tool_call_timeout_millis](https://github.com/cline/cline/pull/1904)
field to ContextServerCommand, like in Cline
- Update ModelContextServerBinary to include timeout configuration
- Modify Client to store and use configurable request timeout
- Replace hardcoded REQUEST_TIMEOUT with self.request_timeout
- Rename REQUEST_TIMEOUT to DEFAULT_REQUEST_TIMEOUT for clarity
- Maintain backward compatibility with 60-second default

Release Notes:

- context_server: Add support for configurable timeout for MCP tool
calls

---------

Co-authored-by: Ben Brandt <benjamin.j.brandt@gmail.com>

Rafał Krzyważnia and Ben Brandt created

893eb92 docs: Note edge case for macOS 26 (#37392)

Click to expand commit body
- I believe this is caused by metal not being found due to it being on
the XcodeBeta path, not sure if there's a better fix for this but it'll
work until 26 is the latest release

Release Notes:

- N/A

versecafe created

45fa6d8 tailwind: Add `HTML+ERB` to the list of supported languages (#36797)

Click to expand commit body
Hi! As part of https://github.com/zed-extensions/ruby/issues/162 we
would like to rename HTML/ERB to HTML+ERB since it is more syntactically
correct to treat such language as ERB on top of HTML rather than HTML or
ERB.

To keep the user experience intact, we outlined the prerequisites in the
linked issue. This is the first PR that adds the HTML+ERB language name
to the list of enabled languages for the Emmet extension. We will do the
same for the Tailwind configuration in the Zed codebase. Once the new
versions of Emmet and Zed are released, we will merge the pull request
in the Ruby extension repository and release the updated version. After
that, we will remove the old HTML/ERB and YAML/ERB languages. Let me
know if that sounds good. Thanks!

Release Notes:

- N/A

Co-authored-by: Marshall Bowers <git@maxdeviant.com>

Vitaly Slobodin and Marshall Bowers created

60ad82c Fix typo in clippy lint name (#37405)

Click to expand commit body
Release Notes:

- N/A

Ben Brandt created

564ded7 acp: Disable external agents over SSH (#37402)

Click to expand commit body
Follow-up to #37377 

Show a clearer error here until SSH support is implemented.

Release Notes:

- N/A

Cole Miller created

63b3839 language_models: Prevent sending the tools object to unsupported models for Ollama (#37221)

Click to expand commit body
Closes #32758

Release Notes:

- Resolved an issue with the Ollama provider that caused requests to
fail with a 400 error for models that don't support tools. The tools
object is now only sent to compatible models to ensure successful
requests.

Umesh Yadav created

9f74988 language_models: Fix tool_choice null issue for other providers (#34554)

Click to expand commit body
Follow up: #34532

Closes #35434 

Mostly fixes a issue were when the tool_choice is none it was getting
serialised as null. This was fixed for openrouter just wanted to follow
up and cleanup for other providers which might have this issue as this
is against the spec.

Release Notes:

- N/A

Umesh Yadav created

946efb0 Add option for code context menu items to have dynamic width (#37404)

Click to expand commit body
Follow up to https://github.com/zed-industries/zed/pull/30598

This PR introduces the `display_options` field in the
`CompletionResponse`, allowing a code context menu width to be
dynamically dictated based on its larger item. This will allow us to
have the @-mentions and slash commands completion menus in the agent
panel not be bigger than it needs to be. It may also be relevant/useful
in the future for other use cases.

For now, we set all instances of code context menus to use a fixed
width, as defined in the PR linked above, which means this PR shouldn't
cause any visual change.

Release Notes:

- N/A

Co-authored-by: Michael Sloan <mgsloan+github@gmail.com>

Danilo Leal and Michael Sloan created

4b96ad3 gpui: Remove `http_client` feature (#37401)

Click to expand commit body
This PR removes the `http_client` feature from the `gpui` crate, as it
wasn't really doing anything.

It only controlled whether we depend on the `http_client` crate, but
from what I can tell we always depended on it anyways.

Obviates https://github.com/zed-industries/zed/pull/36615.

Release Notes:

- N/A

Marshall Bowers created

4368c1b language_models: Add OpenRouterError and map OpenRouter errors to LanguageModelCompletionError (#34227)

Click to expand commit body
Improves the error handling for openrouter and adds automatic retry like
anthropic for few of the status codes.
Release Notes:

- Improves error messages for Openrouter provider
- Automatic retry when rate limited or Server error from Openrouter

Umesh Yadav created

e5a968b vim: Fix change surround with any brackets text object (#37386)

Click to expand commit body
This commit fixes an issue with how the `AnyBrackets` object was handled
with change surrounds (`cs`). With the keymap below, if one was to use
`csb{` with the text `(bracketed)` and the cursor inside the
parentheses, the text would not change.

```json
{
  "context": "vim_operator == a || vim_operator == i || vim_operator == cs",
  "bindings": {
    "b": "vim::AnyBrackets"
  }
}
```

Unfortunately there was no implementation for finding a corresponding
`BracketPair` for the `AnyBrackets` object, meaning that, when using
`cs` (change surrounds) the code would simply do nothing.

This commit updates this logic so as to try and find the nearest
surrounding bracket (parentheses, curly brackets, square brackets or
angle brackets), ensuring that `cs` also works with `AnyBrackets`.

Closes #24439

Release Notes:

- Fixed handling of `AnyBrackets` in vim's change surrounds (`cs`)

Dino created

7aecab8 agent2: Only setup real client for real models (#37403)

Click to expand commit body
Before we were setting up lots of test setup regardless of if we were
actually going to be making real requests or not.

This will hopefully help with intermittent test errors we're seeing on
Windows in CI.

Release Notes:

- N/A

Ben Brandt created

e4df866 editor: Do not show edit prediction during in-progress IME composition (#37400)

Click to expand commit body
Closes #37249

We no longer show edit prediction when composing IME since it isn't
useful for unfinished alphabet.

Release Notes:

- Fixed edit predictions showing up during partial IME composition.

Smit Barmase created

8770fcc acp: Enable claude code feature flag for everyone (#37390)

Click to expand commit body
Release Notes:

- N/A

Bennet Bo Fenner created

6dcae27 terminal: Fix not able to select text during continuous output (#37395)

Click to expand commit body
Closes #37211

Regressed in https://github.com/zed-industries/zed/pull/33305

Every time the terminal updates, we emit
`SearchEvent::MatchesInvalidated` to trigger a re-run of the buffer
search, which calls `clear_matches` to drop stale results.
https://github.com/zed-industries/zed/pull/33305 PR also cleared the
selection when clearing matches, which caused this issue. We could fix
it by only clearing matches and selection when they’re non-empty, but
it’s better to not clear the selection at all. This matches how the
editor behaves and keeps it consistent. This PR reverts that part of
code.


Release Notes:

- Fixed an issue where text selection was lost during continuous
terminal output.

Smit Barmase created

5e01fb8 Nice errors for unsupported ACP slash commands (#37393)

Click to expand commit body
If we get back slash-commands that aren't supported, tell the user that
this is the problem.

Release Notes:

- Improve error messages for unsupported ACP slash-commands

---------

Co-authored-by: Conrad Irwin <conrad.irwin@gmail.com>

Richard Feldman and Conrad Irwin created

88a7975 Disable external agents over collab (#37377)

Click to expand commit body
Release Notes:

- Disable UI to boot external agents in collab projects (as they don't
work)

Conrad Irwin created

4c411b9 language_models: Make `JsonSchemaSubset` the default `tool_input_format` for the OpenAI-compatible provider (#34921)

Click to expand commit body
Closes #30188
Closes #34911
Closes #34906

Many OpenAI-compatible providers do not automatically filter the tool
schema to comply with the underlying model's requirements; they simply
proxy the request. This creates issues, as models like **Gemini**,
**Grok**, and **Claude** (when accessed via LiteLLM on Bedrock) are
incompatible with Zed's default tool schema.

This PR addresses this by defaulting to a more compatible schema subset
instead of the full schema.

### Why this approach?

* **Avoids Poor User Experience:** One alternative was to add an option
for users to manually set the JSON schema for models that return a `400
Bad Request` due to an invalid tool schema. This was discarded as it
provides a poor user experience.
* **Simplifies Complex Logic:** Another option was to filter the schema
based on the model ID. However, as demonstrated in the attached issues,
this is unreliable. For instance, `claude-4-sonnet` fails when proxied
through LiteLLM on Bedrock. Reliably determining behavior would require
a non-trivial implementation to manage provider-and-model combinations.
* **Better Default Behavior:** The current approach ensures that tool
usage works out-of-the-box for the majority of cases by default,
providing the most robust and user-friendly solution.


Release Notes:

- Improved tool compatibility with OpenAI API-compatible providers

Signed-off-by: Umesh Yadav <git@umesh.dev>
Co-authored-by: Peter Tripp <peter@zed.dev>

Umesh Yadav and Peter Tripp created

5ac6ae5 docs: Link glossary (#37387)

Click to expand commit body
Follow-up to: https://github.com/zed-industries/zed/pull/37360

Add glossary.md to SUMMARY.md so it's linked to the public
documentation.

Release Notes:

- N/A

Peter Tripp created

c01f12b zeta: Small refactoring in license detection check - rfind instead of iterated ends_with (#37329)

Click to expand commit body
Release Notes:

- N/A

Michael Sloan created

dfa066d acp: Display slash command hints (#37376)

Click to expand commit body
Displays the slash command's argument hint while it hasn't been
provided:


https://github.com/user-attachments/assets/f3bb148c-247d-43bc-810d-92055a313514


Release Notes:

- N/A

---------

Co-authored-by: Bennet Bo Fenner <bennetbo@gmx.de>

Agus Zubiaga and Bennet Bo Fenner created

ac8c653 Fix race condition between feature flag and deserialization (#37381)

Click to expand commit body
Right now if you open Zed, and we deserialize an agent that's behind a
feature flag (e.g. CC), we don't restore it because the feature flag
check hasn't happened yet at the time we're deserializing (due to auth
not having finished yet).

This is a simple fix: assume that if you had serialized it in the first
place, you must have had the feature flag enabled, so go ahead and
reopen it for you.

Release Notes:

- N/A

Richard Feldman created

d2318be terminal view: Hide inline assist button if AI is disabled (#37378)

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

Release Notes:

- Fix the terminal inline assistant button showing despite `disable_ai`
being turned on.

---------

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

Danilo Leal and MrSubidubi created

a026163 inline assistant: Adjust completion menu item font size (#37375)

Click to expand commit body
Now the @ completion menu items font size respect/match the buffer's
font size, as opposed to being rendered a bit bigger.

| Before | After |
|--------|--------|
| <img width="1226" height="468" alt="Screenshot 2025-09-02 at 11 
09@2x"
src="https://github.com/user-attachments/assets/a6d37110-b544-40c3-bf7a-447ea003d4d7"
/> | <img width="1218" height="462" alt="Screenshot 2025-09-02 at 11  09
2@2x"
src="https://github.com/user-attachments/assets/19e58bf8-2db5-442e-8f60-02dd9ee1308f"
/> |

Release Notes:

- inline assistant: Improved @-mention menu item font size, better
matching the buffer's font size.

Danilo Leal created

ad3ddd3 Revert "gpui: Do not render ligatures between different styled text runs (#37175) (#37382)

Click to expand commit body
This reverts commit 62083fe7963dd5bed4579bb12abac1b7800cdbaa.

We're reverting this as it causes layout shift when typing/selecting
with ligatures:


https://github.com/user-attachments/assets/80b78909-62f5-404f-8cca-3535c5594ceb

Release Notes:

- Reverted #37175

Marshall Bowers created

7e3fbeb Add the Glossary from the channel into Zed (#37360)

Click to expand commit body
This should make it easier for contributors to learn all the terms used
in the Zed code base.

Release Notes:

- N/A

David Kleingeld created

8e7caa4 remove extra brace in rules template (#37356)

Click to expand commit body
Release Notes:

- Fixed: remove extra brace in rules template

Jonathan Camp created