Commit log

6c9b813 Remove Executor::close() (#50970)

Click to expand commit body
Co-Authored-By: Eric Holk <eric@zed.dev>

In app drop we had been calling `.close()` on the executors. This caused
problems with the BackgroundExecutor on Linux because it raced with
concurrent work: If task A was running and about to poll task B, the
poll to task B would panic with "Task polled after completion". This
didn't really matter (because the app was shutting down anyway) but
inflated our panic metrics on Linux.

It turns out that the call to `.close()` is not needed. It was added to
prevent foreground tasks being scheduled after the app was dropped; but
on all platforms the App run method does not return until after the
ForegroundExecutor is stopped (so no further tasks will run anyway).

The background case is more interesting. In test code it didn't matter
(the background executor is simulated on the main thread so tests can't
leak tasks); in app code it also didn't really make a difference. When
`fn main` returns (which it does immediately after the app is dropped)
all the background threads will be cancelled anyway.

Further confounding debugging, it turns out that the App does not get
dropped on macOS and Windows due to a reference cycle; so this was only
happening on Linux where the app quit callback is dropped instead of
retained after being called. (Fix in #50985)

Release Notes:

- N/A

---------

Co-authored-by: Eric Holk <eric@zed.dev>

Conrad Irwin and Eric Holk created

c841b48 Fix OpenGL initialization on Intel HD 4000 (#50983)

Click to expand commit body
Almost there!

Release Notes:

- N/A

John Tur created

1dd80ac agent_ui: Add more refinements for v2 flag (#50968)

Click to expand commit body
- Fixes message editor in empty state not consuming the whole height of
the panel
- Remove duped focused method in the `ListItem`
- Remove duped "new thread" buttons when group is empty
- Add some UI adjustments like removing labels and fading out truncated
items

Release Notes:

- N/A

Danilo Leal created

1dd09c3 Add Zed Feature Process document (#50747)

Click to expand commit body
Release Notes:

- N/A

Mikayla Maki created

5b2d39e ep: Add captured example fetching (#50960)

Click to expand commit body
Closes #ISSUE

Before you mark this PR as ready for review, make sure that you have:
- [ ] Added a solid test coverage and/or screenshots from doing manual
testing
- [ ] Done a self-review taking into account security and performance
aspects
- [ ] Aligned any UI changes with the [UI
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)

Release Notes:

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

Ben Kunkle created

4b3660b ep: Unify code in `parse_output` and `zeta_prompt` (#50958)

Click to expand commit body
This also fixed `ep parse-output` for newer formats

Release Notes:

- N/A

Oleksiy Syvokon created

e784c92 zed: Clear the FORCE_CLI_MODE environment variable after reading (#46475)

Click to expand commit body
This prevents child processes (e.g. shells) from inheriting it. This
generally isn't an issue, since zed is the only thing that cares about
it, but if you're trying to run zed *from* zed, you would first need to
unset it manually.

Release Notes:

- N/A

Josh Robson Chase created

dc0e41f Refresh LLM API token on organization change (#50931)

Click to expand commit body
Emit client-side organization changed events through
`RefreshLlmTokenListener` so it produces the same `RefreshLlmTokenEvent`
used for server-pushed `UserUpdated` messages.

This keeps token refresh fan-out in one place.

Closes CLO-383.

Release Notes:

- N/A

---------

Co-authored-by: Tom Houlé <tom@tomhoule.com>

Neel and Tom Houlé created

21e202e repl: Switch to util::process::Child to rely on process groups (#48839)

Click to expand commit body
Follow up to https://github.com/zed-industries/zed/pull/48760 thanks to
@miguelraz and @reflectronic.

No new notes since #48760 did the same thing, only wasn't opting in to
process groups we already had in place.

Release Notes:

- N/A

Kyle Kelley created

a3d9269 ai: Add LMStudio API URL & API key support (#48309)

Click to expand commit body
Hello,

This pull request aims to improve usage of lmstudio ai provider for
remote lmstudio nodes and support api key authentication.

This has been tested on my local network from a headless lms node. See
attached demo vid

Release Notes:

- lmstudio: Added support for specifying an API key via the UI


https://github.com/user-attachments/assets/7594cf49-3198-4171-b3e9-c3264cf35b6e

---------

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

Antoine Mathie and Bennet Bo Fenner created

1418af6 sidebar: Improve keyboard navigation (#50938)

Click to expand commit body
We know outline the focus sidebar entry similar to the project panel.
This allows users to see what they have selected vs active

Before you mark this PR as ready for review, make sure that you have:
- [ ] Added a solid test coverage and/or screenshots from doing manual
testing
- [x] Done a self-review taking into account security and performance
aspects
- [x] Aligned any UI changes with the [UI
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)

Release Notes:

- N/A

Anthony Eid created

0e83147 markdown_preview: Fix slow checkbox check/uncheck UI updates (#48633)

Click to expand commit body
When checking a box in the markdown preview, it's generally very slow.

Preview updates when typing in the editor are debounced to be every
200ms, but when clicking an element in the preview, it feels sluggish to
wait that long.

In debugging, I found that the debounced task from the editor event
subscriptions replaced the non-debounced event on [line
605](https://github.com/zed-industries/zed/blob/263d8e58d809b493044160cb26fb690169007e4e/crates/markdown_preview/src/markdown_preview_view.rs#L600C49-L602C51),
and the UI took around 200 ms to update.

Therefore, I've changed the markdown parsing function to not replace the
task, unless another non-debounced task comes along. UI updates from the
editor are still debounced.

Before: 

[Screencast_20260206_145702.webm](https://github.com/user-attachments/assets/fed5f8fa-866e-4291-9ec3-f876bb6dc6ab)

After:

[Screencast_20260206_150124.webm](https://github.com/user-attachments/assets/e4e7dc2b-d899-42ff-bd28-ad1dc5a8d3d9)

Release Notes:

- Improved speed at which markdown lists update after checking or
unchecking items

Wesley Weisenberger created

a5525a8 ep: Refresh available experiments when opening ep button (#50949)

Click to expand commit body
Closes #ISSUE

Before you mark this PR as ready for review, make sure that you have:
- [ ] Added a solid test coverage and/or screenshots from doing manual
testing
- [ ] Done a self-review taking into account security and performance
aspects
- [ ] Aligned any UI changes with the [UI
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)

Release Notes:

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

Ben Kunkle created

ba3aea0 agent: Don't connect to MCP servers when AI is globally disabled (#47857)

Click to expand commit body
Closes #46846

When `disable_ai: true` is set in user settings, Zed was still
connecting to configured MCP (context) servers and sending
initialization requests. This change adds checks for `DisableAiSettings`
in `ContextServerStore` to:

- Skip server connections when AI is disabled
- Disconnect from running servers when AI becomes disabled
- Connect to servers when AI is re-enabled
- Prevent registry changes from triggering connections while AI is
disabled

The fix tracks `ai_disabled` state to detect transitions and properly
manage server connections when AI is toggled.

Release Notes:

- Fixed Zed connecting to MCP servers when AI is disabled.

---------

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

Oliver Azevedo Barnes and Bennet Bo Fenner created

a216f9d crashes: Bump minidumper crate to 0.9 (#50937)

Click to expand commit body
Release Notes:

- N/A

Jakub Konka created

2fd5c7b workspace: Fix dock/panel resizing (#50947)

Click to expand commit body
Before the panel resize wouldn't take into account the width of the
sidebar and the right dock could push the left dock on resize too.

Before you mark this PR as ready for review, make sure that you have:
- [ ] Added a solid test coverage and/or screenshots from doing manual
testing
- [x] Done a self-review taking into account security and performance
aspects
- [x] Aligned any UI changes with the [UI
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)


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

Release Notes:

- N/A

Anthony Eid created

2d0bd7c Add more verbosity for panic inside `summaries_for_anchors_with_payloads` (#50940)

Click to expand commit body
We are seeing the timestamp comparison fail in an unexpected way, e.g.
https://zed-dev.sentry.io/issues/7293482758/events/c7f7eab3f8f2463f879d4889a80d623e,
where it seems like `text::Anchor::is_max` should be returning true but
it apparently isn't. Add some more information when this panic happens
to understand what's going on.

Release Notes:

- N/A

Co-authored-by: Piotr Osiewicz <24362066+osiewicz@users.noreply.github.com>

Cole Miller and Piotr Osiewicz created

f69ab1d agent: Fail faster in case streaming tool call fails (#50834)

Click to expand commit body
If a streaming tool call (e.g. edit file) returns an error during
streaming, we would wait until we received the whole input.

Release Notes:

- N/A

---------

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

Bennet Bo Fenner and Ben Brandt created

db6b47a agent_ui: Fix agent panel focus stealing from modals (#50511)

Click to expand commit body
Closes #49336

Before you mark this PR as ready for review, make sure that you have:
- [x] Added a solid test coverage and/or screenshots from doing manual
testing
- [x] Done a self-review taking into account security and performance
aspects
- [ ] Aligned any UI changes with the [UI

checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)

### Video:

https://drive.google.com/file/d/1qAwAoDr4wr8cs1dosvLocU-a4pngJZvr/view?usp=sharing

Release Notes:

- Fixed agent panel stealing keyboard focus from modals during workspace
restoration

João Soares created

3fe3776 agent: Update `old_text` docs for `StreamingEditFileTool` (#50921)

Click to expand commit body
In the old edit agent tool we encouraged the LLM to respond with whole
lines, which we did not do in the new edit file tool.

Release Notes:

- N/A

Bennet Bo Fenner created

84daec5 agent_ui: Add safeguards for deep link prompt injections (#50936)

Click to expand commit body
- Show a warning asking users to review pre-filled prompts from external
links before sending.
- Strip control characters and bidi control characters from pre-filled
prompts.
- Collapse 3+ consecutive newlines in pre-filled prompts to prevent
newline padding attacks.
- API changes make it impossible to auto-submit pre-filled prompts from
external sources.

Release Notes:

- N/A

Smit Barmase created

09b4140 lsp: Use correct LSP adapter for completion labels in remote development (#50697)

Click to expand commit body
Closes #47917

Currently, during remote development, Zed uses the first available local
LSP adapter to handle all label computing. This isn't ideal and causes
bugs because different adapters may expect different label formats. By
leveraging the `all_capable_for_proto_request` method, we can now
retrieve the specific language server name and use it as a key to find
the correct LSP adapter for label population. Even if this lookup fails,
we can still fall back to the first adapter, so this PR should provide
more accurate label population than before.

This addresses the root cause of #47917, which stems from two main
issues. For example, in remote Python development, the `basedpyright`
adapter might incorrectly handle labels even when the remote server is
actually `ty`. The completion items returned by `ty` are slightly
different from `basedpyright`: `ty` stores labels in
`labelDetails.detail`, while basedpyright uses
`labelDetails.description`. By matching the correct adapter, we ensure
labels are populated properly for completion items.
```json
// RPC message returned by `ty`, label is in `labelDetails.detail`
{
  ...
  "labelDetails": { "detail": " (import pathlib)" },
  ...
}

// RPC message returned by `basedpyright`, label is in `labelDetails.description`
{
  ...
  "labelDetails": { "description": "pathlib" },
  ...
}
```
Additionally, adapters registered via `register_available_lsp_adapter`
are lazy-loaded into the `LanguageRegistry` (which is the case for `ty`
before). In remote scenarios, the adapter might be loaded on the remote
server but not on the local host, making it hard to find in
`lsp_adapters`. This is partially resolved in #50662, and combined with
this PR, we can fully address #47917.

There is still more to do, however. In some cases, we still can't find
the correct local LSP adapter if the local host lacks the registry that
the remote server has; this typically happens when the adapter is
registered via `register_available_lsp_adapter`. I've opened a feature
discussion #49178 to track this. If it's decided that this needs further
refinement, I'm happy to continue working on it.


Before you mark this PR as ready for review, make sure that you have:
- [ ] Added a solid test coverage and/or screenshots from doing manual
testing
- [x] Done a self-review taking into account security and performance
aspects
- [x] Aligned any UI changes with the [UI
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)

Release Notes:

- Fixed missing labels for `ty` completion items in remote development.

Xin Zhao created

33e5301 gpui: Add `property_test` macro (#50935)

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

Cameron Mcloughlin and Conrad Irwin created

66de3d9 repl: Treat WSL as a separate kernel type from SSH remote (#50721)

Click to expand commit body
Split WslRemote out of the remote_kernels bucket in the kernel picker,
giving it its own "WSL Kernels" section. Use the distro name and
kernelspec display name for WSL entries instead of the generic "WSL"
string.

In python_env_kernel_specifications, detect WSL projects via
RemoteConnectionOptions and return WslRemote instead of SshRemote. Stop
marking WSL worktrees as remote so global kernel specs load.

Fix ark kernel stdout pollution by building the wsl.exe bash command
with a quoted cd and inline env assignment, so exec replaces the shell
and doesn't echo input back.

Closes #50459 

Before you mark this PR as ready for review, make sure that you have:
- [x] Added a solid test coverage and/or screenshots from doing manual
testing
- [x] Done a self-review taking into account security and performance
aspects
- [x] Aligned any UI changes with the [UI
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)

Release Notes:

- N/A

MostlyK created

5db8d6d agent: Only use AgentSessionInfo in history (#50933)

Click to expand commit body
Previously we required AgentSessionInfo all over the place, which meant
there were lots of unnecessary fake ones created all over the place.

Made the methods and functions only take the data they need so we only
use these in history contexts now, as intended.

Release Notes:

- N/A

Ben Brandt created

8a38d2d agent_ui: Adjust empty state for the panel for v2 (#50932)

Click to expand commit body
Making the message editor take all the available space, and improving
the loading state for external agents a bit.

Release Notes:

- N/A

Danilo Leal created

e95b5c3 sidebar: Add some refinements (#50923)

Click to expand commit body
- Make clicking on the project header collapse/expand the group as
opposed to activating the workspace
- Added the "threads" label close to the sidebar toggle button
- Made the open folder icon button open the file finder directly as
opposed to the recent projects popover

Release Notes:

- N/A

Danilo Leal created

61e7032 agent_ui: Adjust panel toolbar design for v2 (#50927)

Click to expand commit body
Adding some adjustments so the toolbar looks more like the designs we've
been working on. All that changes here are only valid for the v2 feature
flag. Haven't changed anything for today's production version.

Release Notes:

- N/A

Danilo Leal created

77fa028 Ensure consistent newline behavior in auto-height editors with JetBrains keymap (#47595)

Click to expand commit body
Add an explicit `Editor && mode == auto_height` context block. This
ensures that `Shift+Enter` and `Ctrl+Enter` correctly insert a newline
at the cursor position in editors like the AI Agent Panel,
preventing them from inheriting conflicting overrides (e.g., JetBrains
mapping `Shift+Enter` to `editor::NewlineBelow`).

Closes #47269

Release Notes:

- Fixed an issue where `Shift+Enter` would insert a newline at the end
of the text instead of the cursor position in the Agent Panel when using
certain keymaps.

Daniel Strobusch created

2457e27 eval: Add eval_cli crate (#50922)

Click to expand commit body
Very much wip

Release Notes:

- N/A

Ben Brandt created

5289bea nix: Coerce rel path to cargo wrapper script into abs path (#50919)

Click to expand commit body
This allows you to now re-use our Zed flake in different side projects
with cargo wrapper script having its path correctly resolved.

Say you have this dir structure:

```
$HOME/dev/zed
$HOME/dev/something
```

Then this now works:

```
$ cd $HOME/dev/something
$ nix develop ../zed
$ cargo version
cargo 1.93.0 (083ac5135 2025-12-15)
```

Release Notes:

- N/A

Jakub Konka created

49ef205 terminal: Fix drag-and-drop in vertical terminal panels (#49825)

Click to expand commit body
Closes #49800

Adds `handle_drop` to Item & ItemHandle, which allows an active item in
a pane to consume drop events before the pane does.

Release Notes:

- terminal: Fix drag-and-drop not working in vertical terminal panels

claire created

e3d0a35 Fix `formatter: "auto"` to skip language servers that can't format (#50661)

Click to expand commit body
Closes #50631

Before you mark this PR as ready for review, make sure that you have:
- [x] Added a solid test coverage and/or screenshots from doing manual
testing
- [x] Done a self-review taking into account security and performance
aspects
- [ ] Aligned any UI changes with the [UI
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)

Release Notes:

- Fixed `formatter: "auto"` silently doing nothing when the first
language server for a language doesn't support formatting (e.g., Dependi
before Tombi for
TOML).

João Soares created

d2952be zed: Fix shared agent thread links not opening (#50915)

Click to expand commit body
Release Notes:

- Fixed an issue where shared agent thread URLs would not open.

Smit Barmase created

e9ffef0 editor: Hide hover links when mouse cursor is not visible (#50424)

Click to expand commit body
When I am in the middle of editing, pressing Ctrl would
counter-intuitively highlight links even when the mouse cursor is
hidden. This change considers the state of the mouse cursor before
painting links on hover.

Before: Modifier pressed, cursor hidden, link visible

<img width="506" height="518" alt="image"
src="https://github.com/user-attachments/assets/82a59e83-e3cb-490f-b292-148686ec569d"
/>

After: Modifier pressed, cursor hidden (red dot indicates current cursor
position)

<img width="408" height="298" alt="image"
src="https://github.com/user-attachments/assets/c19ed83c-4778-4890-97b9-5155cdcf658b"
/>

Before you mark this PR as ready for review, make sure that you have:
- [x] Added a solid test coverage and/or screenshots from doing manual
testing
- [x] Done a self-review taking into account security and performance
aspects
- [x] Aligned any UI changes with the [UI
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)

Release Notes:

- Fixed spurious link highlighting when mouse cursor is hidden

Fixes #50776

Karthik Nishanth created

a70c295 python: Fix conda environment not auto-activated in remote terminal (#50895)

Click to expand commit body
Closes #50619

In the conda activation script building procedure, Zed currently
performs a file check for the conda executable on the client side. When
in remote development, this check always fails because the file exists
on the remote host, not the local machine. Since `pet` already handles
existence checks, removing this redundant check allows the activation to
proceed. It is also better to let any potential issues (like
permissions) show up in the terminal rather than silently skipping the
activation.

This addresses the root cause for remote development, which is different
from the approach in #50715 that focuses on shell hooks.

**The video recording**


https://github.com/user-attachments/assets/62967351-e3c5-4814-aec4-b2332940e7e3

Before you mark this PR as ready for review, make sure that you have:
- [x] Added a solid test coverage and/or screenshots from doing manual
testing
- [x] Done a self-review taking into account security and performance
aspects
- [x] Aligned any UI changes with the [UI
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)

Release Notes:

- Fixed conda environment not auto-activating in the terminal during
remote development sessions.

Xin Zhao created

7040484 Fix sidebar selections (#50900)

Click to expand commit body
Release Notes:

- N/A

---------

Co-authored-by: Eric Holk <eric@zed.dev>

Mikayla Maki and Eric Holk created

a0ba509 Fix provisional thread title (#50905)

Click to expand commit body
Release Notes:

- N/A

Mikayla Maki created

9acb32f Linux: Handle device lost with wgpu (#50898)

Click to expand commit body
Release Notes:

- Linux: Handle GPU device loss gracefully

Conrad Irwin created

3b3ffc0 Add GPT-5.4 and GPT-5.4-pro BYOK models (#50858)

Click to expand commit body
Add GPT-5.4 and GPT-5.4-pro as Bring Your Own Key model options for the
OpenAI provider.

**GPT-5.4** (`gpt-5.4`):
- 1,050,000 token context window, 128K max output
- Supports chat completions, images, parallel tool calls
- Default reasoning effort: none

**GPT-5.4-pro** (`gpt-5.4-pro`):
- 1,050,000 token context window, 128K max output
- Responses API only (no chat completions)
- Default reasoning effort: medium (supports medium/high/xhigh)

Also fixes context window sizes for GPT-5 mini and GPT-5 nano (272K →
400K) to match current OpenAI docs.

Closes AI-78

Release Notes:

- Added GPT-5.4 and GPT-5.4-pro as available models when using your own
OpenAI API key.

Richard Feldman created

ab824a0 Use excerpt coordinates consistently in parse_zeta_model_output (#50894)

Click to expand commit body
Fixes a bug introduced in
https://github.com/zed-industries/zed/pull/50850, where we used
incorrect coordinates for the editable range.

Release Notes:

- N/A

Max Brunsfeld created

ca5027c Fix OpenGL initialization on Intel HD 4000 (#50891)

Click to expand commit body
I think we might just get it working this time

Release Notes:

- N/A

John Tur created

61d9696 zeta: Add variable edit format (#50850)

Click to expand commit body
Release Notes:

- N/A

---------

Co-authored-by: Jakub Konka <kubkon@jakubkonka.com>
Co-authored-by: Oleksiy Syvokon <oleksiy.syvokon@gmail.com>
Co-authored-by: Ben Kunkle <ben@zed.dev>

Max Brunsfeld , Jakub Konka , Oleksiy Syvokon , and Ben Kunkle created

da9d548 zeta2: Don't remove redundant excerpts on the client (#50886)

Click to expand commit body
Closes #ISSUE

Before you mark this PR as ready for review, make sure that you have:
- [ ] Added a solid test coverage and/or screenshots from doing manual
testing
- [ ] Done a self-review taking into account security and performance
aspects
- [ ] Aligned any UI changes with the [UI
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)

Release Notes:

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

Ben Kunkle created

a1d8c52 Separate the sidebar click targets (#50885)

Click to expand commit body
Release Notes:

- N/A

Mikayla Maki created

41cfb82 Fix crash in `start_display_link` (#50875)

Click to expand commit body
Fixes ZED-5G8

If `DisplayLink::new` fails, `frame_requests` is dropped . It is not
valid to destroy a DispatchSource that is not `resume()`d. So, ensure we
call `resume()` before there's a chance for anything to fail.

Release Notes:

- Fixed a crash that could occur on macOS when changing monitor
configurations

John Tur created

c5f3a1d ep: Indicate active experiment (#50870)

Click to expand commit body
Closes #ISSUE

Before you mark this PR as ready for review, make sure that you have:
- [ ] Added a solid test coverage and/or screenshots from doing manual
testing
- [ ] Done a self-review taking into account security and performance
aspects
- [ ] Aligned any UI changes with the [UI
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)

Release Notes:

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

Ben Kunkle created

90ae708 agent: Gate agent registry refresh behind Disable AI setting (#50868)

Click to expand commit body
Make sure we don't download this file if disable_ai is enabled

Release Notes:

- N/A

Ben Brandt created

0d90751 agent_ui: Always show smaller subagent preview (#50864)

Click to expand commit body
Remove the conditional fullscreen path for subagent tool calls so
expanded content consistently renders as a capped preview with the
overlay and fixed height. Also add a pointer cursor to the maximize
control to clarify clickability.

Release Notes:

- N/A

Ben Brandt created

a8caf07 agent_ui: Remove feature upsell banners from agent registry (#50862)

Click to expand commit body
These aren't built in anymore!

Release Notes:

- N/A

Ben Brandt created