Commit log

46b5a6f Reset extensions dir to origin/main

Richard Feldman created

c4c2a0a Merge remote-tracking branch 'origin/main' into register-language-model-extensions

Richard Feldman created

6976208 Move autofix stuff to zippy (#45304)

Click to expand commit body
Although I wanted to avoid the dependency, it's hard to get github to do
what we want.

Release Notes:

- N/A

Conrad Irwin created

9d23e57 Remove AgentModelIcon

Richard Feldman created

3a6e91a Merge remote-tracking branch 'origin/main' into provider-extensions

Richard Feldman created

6055b45 Add support for provider extensions (but no extensions yet) (#45277)

Click to expand commit body
This adds support for provider extensions but doesn't actually add any
yet.

Release Notes:

- N/A

Richard Feldman created

88f90c1 Add language server version in a tooltip on language server hover (#45302)

Click to expand commit body
I wanted a way to make it easy to figure out which version of a language
server Zed is running. Now, you get a tooltip when hovering on a
language server in the Language Servers popover.

<img width="498" height="168" alt="SCR-20251218-ovln"
src="https://github.com/user-attachments/assets/1ced4214-b868-4405-8881-eb7c0b75a53e"
/>

This PR also fixes a bug. We had existing code to open a tooltip on
these language server entrees and display the language server message,
which was never fully wired up for `CustomEntry`s. Now, in this PR, we
will show show either version, message, or both, in the documentation
aside, depending on what the server has given us.

Mostly done with Droid (using GPT-5.2), with manual review and multiple
follow ups to guide it into using existing patterns in the codebase,
when it did something abnormal.

Release Notes:

- Added language server version in a tooltip on language server hover

---------

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>

Joseph T. Lyons and factory-droid[bot] created

0d74f98 danger: Upgrade `danger-plugin-pr-hygiene` to v0.7.1 (#45303)

Click to expand commit body
This PR upgrades `danger-plugin-pr-hygiene` to v0.7.1.

Release Notes:

- N/A

Marshall Bowers created

ca90b85 docs: Remove local collaboration docs (#45301)

Click to expand commit body
This PR removes the docs for running Collab locally, as they are
outdated and don't reflect the current state of affairs.

Release Notes:

- N/A

Marshall Bowers created

8516d81 Fix display name for Ollama models (#45287)

Click to expand commit body
Closes #43646

Release Notes:

- Fixed display name for Ollama models

Richard Feldman created

af589ff agent_ui: Simplify timestamp display (#45296)

Click to expand commit body
This PR simplifies how we display thread timestamps in the agent panel's
history view. For threads that are older-than-yesterday, we just show
how many days ago that thread was had in. Hovering over the thread item
shows you both the title and the full date, if needed (time and date).

<img width="450" height="786" alt="Screenshot 2025-12-18 at 5  24@2x"
src="https://github.com/user-attachments/assets/11416e9b-f1b0-4307-9db0-988a95a316a1"
/>


Release Notes:

- N/A

Danilo Leal created

d2bbfbb lsp: Broadcast our capability for `MessageActionItem`s (#45047)

Click to expand commit body
Closes #37902

Release Notes:

- Enable LSP Message action items for more language servers. These are interactive prompts, often for things like downloading build inputs for a project.

Julia Ryan created

413f4ea Redact environment variables from language server spawn errors (#44783)

Click to expand commit body
Redact environment variables from zed logs when lsp fails to spawn.

Release Notes:

- N/A

Peter Tripp created

1b6d588 danger: Deny conventional commits in PR titles (#45283)

Click to expand commit body
This PR upgrades `danger-plugin-pr-hygiene` to v0.7.0 so that we can
have Danger deny conventional commits in PR titles.

Release Notes:

- N/A

Marshall Bowers created

334ca21 Truncate code actions with a long label and show full label aside (#45268)

Click to expand commit body
Closes #43355

Fixes the issue were code actions with long labels would get cut off
without being able to see the full description. We now properly truncate
those labels with an ellipsis and show the full description in an aside.

Release Notes:

- Added ellipsis to truncated code actions and an aside showing the full
action description.

Gaauwe Rombouts created

f58278a glossary: Fix grammar and typo (#45267)

Click to expand commit body
Fixes grammar and a typo in `Picker` description.

Release Notes:

- N/A

Emmanuel Amoah created

e10b9b7 git: Add global git integration enable/disable setting (#43326)

Click to expand commit body
Closes #13304

Release Notes:

- Add global `git status` and `git diff` on/off in one place instead of
control everywhere

We can first review to ensure this change meets both `Zed` and user
requirements, as well as code rules. Currently, we only support
user-level settings. We can wait for this PR:
https://github.com/zed-industries/zed/pull/43173 to be merged, then
modify it to support both user and project levels.

Leo created

098adf3 gpui: Enable direct-to-display optimization for metal (#44334)

Click to expand commit body
When profiling Zed with Instruments, a warning appears indicating that
surfaces cannot be pushed directly to the display as they are
non-opaque. This happens because the metal layer is currently marked as
non-opaque by default, even though the window itself is not transparent.

<img width="590" height="55" alt="image"
src="https://github.com/user-attachments/assets/2647733e-c75b-4aec-aa19-e8b2ffd6194b"
/>

Metal on macOS can bypass compositing and present frames directly to the
display when several conditions are met. One of those conditions is that
the backing layer must be declared opaque. Apple’s documentation notes
that marking layers as opaque allows the system to avoid unnecessary
compositing work, reducing GPU load and improving frame pacing

Ref:
https://developer.apple.com/documentation/metal/managing-your-game-window-for-metal-in-macos

This PR updates the Metal renderer to mark the layer as opaque whenever
the window does not use transparency. This makes Zed eligible for
macOS’s direct-to-display optimization in scenarios where the system can
apply it.

Release Notes:

- gpui: Mark metal layers opaque for non-transparent windows to allow
direct-to-display when supported

---------

Signed-off-by: Marco Mihai Condrache <52580954+marcocondrache@users.noreply.github.com>

Marco Mihai Condrache created

a85c508 Fix self-referential symbolic link (#45265)

Click to expand commit body
Release Notes:

- N/A

Jakub Konka created

2a713c5 gpui: Small tab group performance improvements (#41885)

Click to expand commit body
Closes #ISSUE

Removes a few eager container clones and iterations.

Added a todo to `get_prev_tab_group_window` and
`get_next_tab_group_window`. They seem to use `HashMap::keys()` for
choosing the previous tab group, however `.keys()` returns an arbitrary
order, so I'm not sure if previous actually means anything here. Conrad
seems to have worked on this part previously, maybe he has some
insights. That can possibly be a follow-up PR, but I'd be willing to
work on it here as well since the other changes are so simple.

Release Notes:

- N/A

tidely created

f937c19 rules_library: Only store built-in prompts when they are customized (#45112)

Click to expand commit body
Follow up to #45004

Release Notes:

- N/A

Bennet Bo Fenner created

7a62f01 agent_ui: Use display name for the message editor placeholder (#45264)

Click to expand commit body
Follow up to a regression that happened when we introduced agent servers
that made everywhere displaying agent names use the extension name
instead of the display name. This has been since fixed in other places
and this PR now updates the agent panel's message editor, too:

| Before | After |
|--------|--------|
| <img width="1154" height="254" alt="Screenshot 2025-12-18 at 12  54
2@2x"
src="https://github.com/user-attachments/assets/5f3de9f9-4e11-42f6-90c2-56fc8cdff32e"
/> | <img width="1154" height="254" alt="Screenshot 2025-12-18 at 12 
54@2x"
src="https://github.com/user-attachments/assets/46ed5c45-7e1d-4cc6-b219-b6cc19206d1b"
/> |

Release Notes:

- N/A

Danilo Leal created

2d071b0 editor: Fix git-hunk toggling for adjacent hunks (#43187)

Click to expand commit body
Closes #42934 

Release Notes:

- Fix toggling adjacent git-diff hunks based on the reported behaviour
in #42934

---------

Co-authored-by: Jakub Konka <kubkon@jakubkonka.com>

Sean Hagstrom and Jakub Konka created

bd2b0de gpui: Add modal dialog window kind (#40291)

Click to expand commit body
Closes #ISSUE

A [modal dialog](https://en.wikipedia.org/wiki/Modal_window) window is a
window that demands the user's immediate attention and blocks
interaction with other parts of the application until it's closed.

- On Windows this is done by disabling the parent window when the dialog
window is created and re-enabling the parent window when closed.
- On Wayland this is done using the
[`XdgDialog`](https://wayland.app/protocols/xdg-dialog-v1) protocol,
which hints to the compositor that the dialog should be modal. While
compositors like GNOME and KDE block parent interaction automatically,
the XDG specification does not guarantee this behavior, compositors may
deliver events to the parent window unfiltered. Since the specification
explicitly requires clients to implement event filtering logic
themselves, this PR implements client-side blocking in GPUI to ensure
consistent modal behavior across all Wayland compositors, including
those like Hyprland that don't block parent interaction.
- On X11 this is done by enabling the application window property
[`_NET_WM_STATE_MODAL`](https://specifications.freedesktop.org/wm/latest/ar01s05.html#id-1.6.8)
state.

I'm unable to implement this on MacOS as I lack the experience and the
hardware to test it. If anyone is interested on implementing this let me
know.

|Window|Linux (wayland)| Linux (x11) |MacOS|
|-|-|-|-|
|<video
src="https://github.com/user-attachments/assets/bfd0733a-445d-4b63-ac6b-ebe098a7dc74"></video>|<video
src="https://github.com/user-attachments/assets/024cd6ec-ff81-4250-a5be-5d207a023f8c"></video>|
N/A | <video
src="https://github.com/user-attachments/assets/656e60a5-26b2-4ee2-8368-1fbbe872453c"></video>|

TODO:

- [x] Block parent interaction client-side on X11

Release Notes:

- Added modal dialog window kind on GPUI

---------

Co-authored-by: Jason Lee <huacnlee@gmail.com>
Co-authored-by: Anthony Eid <anthony@zed.dev>
Co-authored-by: Anthony Eid <hello@anthonyeid.me>

Alvaro Parker , Jason Lee , Anthony Eid , and Anthony Eid created

886de8f agent_ui: Improve UX when pasting code into message editor (#45254)

Click to expand commit body
Follow up to #42982

Release Notes:

- agent: Allow pasting code without formatting via ctrl/cmd-shift-v.
- agent: Fixed an issue where pasting a single line of code would always
insert an @mention

Bennet Bo Fenner created

7a783a9 acp: Update to agent-client-protocol rust sdk v0.9.2 (#45255)

Click to expand commit body
Release Notes:

- N/A

Ben Brandt created

f9462da terminal: Fix pane re-entrancy panic when splitting terminal tabs (#45231)

Click to expand commit body
## Summary
Fix panic "cannot update workspace::pane::Pane while it is already being
updated" when dragging terminal tabs to split the pane.

## Problem
When dragging a terminal tab to create a split, the app panics due to
re-entrancy: the drop handler calls `terminal_panel.center.split()`
synchronously, which invokes `mark_positions()` that tries to update all
panes in the group. When the pane being updated is part of the terminal
panel's center group, this causes a re-entrancy panic.

## Solution
Defer the split operation using `cx.spawn_in()`, similar to how
`move_item` was already deferred in the same handler. This ensures the
split (and subsequent `mark_positions()` call) runs after the current
pane update completes.

## Test plan
- Open terminal panel
- Create a terminal tab
- Drag the terminal tab to split the pane
- Verify no panic occurs and split works correctly

Ahmed M. Ammar created

61dd6a8 agent_ui: Add some fixes to tool calling display (#45252)

Click to expand commit body
- Follow up to https://github.com/zed-industries/zed/pull/45097 — not
showing raw inputs for edit and terminal calls
- Removing the display of empty Markdown if the model outputs it

Release Notes:

- N/A

---------

Co-authored-by: Agus Zubiaga <hi@aguz.me>
Co-authored-by: Ben Brandt <benjamin.j.brandt@gmail.com>

Danilo Leal , Agus Zubiaga , and Ben Brandt created

4f22272 Alphabetize auto_install_extensions

Richard Feldman created

20d7513 Re-add html to auto_install_extensions

Richard Feldman created

493f8d5 Merge remote-tracking branch 'origin/main' into provider-extensions

Richard Feldman created

abb199c thread_view: Clearer authentication states (#45230)

Click to expand commit body
Closes #44717

Sometimes, we show the user the agent's auth methods because we got an
AuthRequired error.

However, there are also several ways a user can choose to re-enter the
authentication flow even though they are still logged in.

This has caused some confusion with several users, where after logging
in, they type /login again to see if anything changed, and they saw an
"Authentication Required" warning.

So, I made a distinction in the UI if we go to this flow from a concrete
error, or if not, made the language less error-like to help avoid
confusion.

| Before | After |
|--------|--------|
| <img width="1154" height="446" alt="Screenshot 2025-12-18 at 10 
54@2x"
src="https://github.com/user-attachments/assets/9df0d59a-2d45-4bfc-ba85-359dd1a4c8ae"
/> | <img width="1154" height="446" alt="Screenshot 2025-12-18 at 10 
53@2x"
src="https://github.com/user-attachments/assets/73a9fb45-4e6f-4594-8795-aaade35b2a72"
/> |


Release Notes:

- N/A

---------

Co-authored-by: Danilo Leal <daniloleal09@gmail.com>
Co-authored-by: Miguel Raz Guzmán Macedo <miguel@zed.dev>

Ben Brandt , Danilo Leal , and Miguel Raz Guzmán Macedo created

cebbf77 gpui(windows): Fix clicks to inactive windows not dispatching to the clicked window (#45237)

Click to expand commit body
Release Notes:

- Fixed an issue on windows where clicking buttons on windows in the
background would not register as being clicked on that window

Lukas Wirth created

0180f3e deepseek: Fix for max output tokens blocking completions (#45236)

Click to expand commit body
They count the requested max_output_tokens against the prompt total.
Seems like a bug on their end as most other providers don't do this, but
now we just default to None for the main models and let the API use its
default behavior which works just fine.

Closes: #45134

Release Notes:

- deepseek: Fix issue with Deepseek API that was causing the token limit
to be reached sooner than necessary

Ben Brandt created

5488a19 terminal: Respect RevealStrategy::NoFocus and Never focus settings (#45180)

Click to expand commit body
Closes #45179

## Summary

Fixes the focus behavior when creating terminals with
`RevealStrategy::NoFocus` or `RevealStrategy::Never`. Previously,
terminals would still receive focus if the terminal pane already had
focus, contradicting the documented behavior.

## Changes

- **`add_terminal_task()`**: Changed focus logic to only focus when
`RevealStrategy::Always`
- **`add_terminal_shell()`**: Same fix

The fix changes:
```rust
// Before
let focus = pane.has_focus(window, cx)
    || matches!(reveal_strategy, RevealStrategy::Always);

// After  
let focus = matches!(reveal_strategy, RevealStrategy::Always);
```

## Impact

This affects:
- Vim users running `:!command` (uses `NoFocus`)
- Debugger terminal spawning (uses `NoFocus`)
- Any programmatic terminal creation requesting background behavior

Release Notes:

- Fixed terminal focus behavior to respect `RevealStrategy::NoFocus` and
`RevealStrategy::Never` settings when the terminal pane already has
focus.

rabsef-bicrym created

bb1198e languages: Allow using locally installed `ty` for Python (#45193)

Click to expand commit body
Release Notes:

- Allow using locally installed `ty` for Python

Henry Chu created

69fe27f Keep tab stop-less snippets in completion list (#45227)

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

cc @agu-z 

Release Notes:

- Fixed certain rust-analyzer snippets not shown

Kirill Bulatov created

469da2f gpui: Fix Windows credential lookup returning error instead of `None` when credentials don't exist (#45228)

Click to expand commit body
This spams the log with amazon bedrock otherwise

Release Notes:

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

Lukas Wirth created

4f87822 gpui: Persist window bounds and display when detaching a workspace session (#45201)

Click to expand commit body
Closes #41246 #45092

Release Notes:

- N/A

**Root Cause**:
Empty local workspaces returned `DetachFromSession` from 
`serialize_workspace_location()`, and the `DetachFromSession` handler
only cleared the session_id **without saving window bounds**.

**Fix Applied**:
Modified the `DetachFromSession` handler to save window bounds via
`set_window_open_status()`:
```rust
WorkspaceLocation::DetachFromSession => {
    let window_bounds = SerializedWindowBounds(window.window_bounds());
    let display = window.display(cx).and_then(|d| d.uuid().ok());
    window.spawn(cx, async move |_| {
        persistence::DB
            .set_window_open_status(database_id, window_bounds, display.unwrap_or_default())
            .await.log_err();
        persistence::DB.set_session_id(database_id, None).await.log_err();
    })
}
```

**Recording**:


https://github.com/user-attachments/assets/2b6564d4-4e1b-40fe-943b-147296340aa7

shibang created

9a69d89 thread_view: Remove unused acp auth method (#45221)

Click to expand commit body
This was from an early iteration and this code path isn't used anymore

Release Notes:

- N/A

Ben Brandt created

54f360a Add a test to ensure we invalidate brackets not only on edits (#45219)

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

Release Notes:

- N/A

Kirill Bulatov created

b2a0b78 acp: Change default for gemini back to managed version (#45218)

Click to expand commit body
It seems we unintentionally changed the default behavior of if we use
the gemini on the path in #40663

Changing this back so by default we use a managed version of the CLI so
we can better control min versions and the like, but still allow people
to override if they need to.

Release Notes:

- N/A

Ben Brandt created

f1ca2f9 workspace: Fix new projects opening with default window size (#45204)

Click to expand commit body
Previously, when opening a new project (one that was never opened
before), the window bounds restoration logic would fall through to
GPUI's default window sizing instead of using the last known window
bounds.

This change consolidates the window bounds restoration logic so that
both empty workspaces and new projects use the stored default window
bounds, making the behavior consistent: any new window will use the last
resized window's size and position.

Closes #45092 

Release Notes:

- Fixed new files and projects opening with default window size instead
of the last used window size.

MostlyK created

4b34ade Update Mistral models context length to their recommended values (#45194)

Click to expand commit body
I noticed some of mistral models context lenghts were outdated, they
were updated accordingly to mistral documentation.

The following models had their context lenght changed:

[mistral-large-latest](https://docs.mistral.ai/models/mistral-large-3-25-12)

[magistral-medium-latest](https://docs.mistral.ai/models/magistral-medium-1-2-25-09)

[magistral-small-latest](https://docs.mistral.ai/models/magistral-small-1-2-25-09)

[devstral-medium-latest](https://docs.mistral.ai/models/devstral-2-25-12)

[devstral-small-latest](https://docs.mistral.ai/models/devstral-small-2-25-12)

Guilherme do Amaral Alves created

df48294 agent_ui: Remove unnecessary Arc allocation (#45172)

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

Initial implementation in ce884443f1c38ca8da9edf9fbbb8e7fd579452cb used
`Arc` to store the reference to the hash map inside the iterator while
keeping the lifetime static. The code was later simplified in
5151b22e2ea37fb457cf4f88b88fe4f315306074 to build the list eagerly but
the Arc was forgotten, although it became unnecessary.

cc @bennetbo

Release Notes:

- N/A

Oleksii Orlenko created

cdc5cc3 Return back the eager snapshot update (#45210)

Click to expand commit body
Based on
https://github.com/zed-industries/zed/pull/45187#discussion_r2630140112

Release Notes:

- N/A

Co-authored-by: Lukas Wirth <lukas@zed.dev>

Kirill Bulatov and Lukas Wirth created

0f7f540 Always invalidate tree-sitter data on buffer reparse end (#45187)

Click to expand commit body
Also do not eagerly invalidate this data on buffer reparse start

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

Release Notes:

- Fixed bracket colorization not applied on initial file open

Kirill Bulatov created

184001b docs: Add note about conflicting global macOS shortcut (#45186)

Click to expand commit body
This is already noted in our `default-macos.json`, but was never
surfaced in our docs for some reason. A user noted their LSP completions
were not working because they were not aware of the conflicting global
shortcut.

Ref:
https://github.com/zed-industries/zed/issues/44970#issuecomment-3664118523

Release Notes:

- N/A

Kunall Banerjee created

225a2a8 google_ai: Refactor token count methods in Google AI (#45184)

Click to expand commit body
The change simplifies the `max_token_count` and `max_output_tokens`
methods by grouping Gemini models with identical token limits.

Release Notes:

- N/A

Xiaobo Liu created

ea37057 Restore generic modal closing on mouse click (#45183)

Click to expand commit body
Was removed in
https://github.com/zed-industries/zed/pull/44887/changes#diff-1de872be76a27a9d574a0b0acec4581797446e60743d23b3e7a5f15088fa7e61

Release Notes:

- (Preview only) Fixed certain modals not being dismissed on mouse click
outside

Kirill Bulatov created