Commit log

7300456 Pull server diagnostics without backtrace printing (#46383)

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

* Stops printing backtraces for server diagnostics pulls on error

<img width="1728" height="1084" alt="backtrace"
src="https://github.com/user-attachments/assets/b2e75e73-611a-428b-8056-f0757e51adf2"
/>

* Reduce one `.detach` codepath into `.await`

Release Notes:

- N/A

Kirill Bulatov created

ef4c1b3 Add '#' to word_characters in JSON/CSS config (#45400)

Dylan created

7311e3c Instruct users to use links rather than aliases for podman compatibility (#46387)

Click to expand commit body
Release Notes:
- Improved docs regarding podman compatibility with dev containers

KyleBarton created

0660d8e Make URL parsing less strict for agent generated URLs (#46330)

Click to expand commit body
Before this we failed to parse some file:/// links the agent would
generate causing it to open in the system default app and not zed.

Release Notes:

- N/A

Conrad Irwin created

b1316b0 component_preview: Fix license symlink (#46379)

Click to expand commit body
This PR fixes the symlink for the license in the `component_preview`
crate, as it was referencing itself after
https://github.com/zed-industries/zed/pull/45382.

Release Notes:

- N/A

Marshall Bowers created

3134356 Do not react on already observed buffer edits' versions (#46308)

Click to expand commit body
If I apply

```diff
diff --git a/crates/action_log/src/action_log.rs b/crates/action_log/src/action_log.rs
index 404fb3616d..ece063c34f 100644
--- a/crates/action_log/src/action_log.rs
+++ b/crates/action_log/src/action_log.rs
@@ -223,6 +223,7 @@ impl ActionLog {
             futures::select_biased! {
                 buffer_update = buffer_updates.next() => {
                     if let Some((author, buffer_snapshot)) = buffer_update {
+                        dbg!(&author);
                         Self::track_edits(&this, &buffer, author, buffer_snapshot, cx).await?;
                     } else {
                         break;
```

on top of `main`, `User` and `Agent` will always interleave.

This happens because `action_log` does updates on `Entity<Buffer>` which
is a current editor's buffer, tracked, and updated by agent output (acp
or regular threads) — those updates come back as `BufferEvent::Edited`
event after each agent's edit and forces unnecessary computations.

Instead, update tracked buffer's version after each agent update report
to only react on one, `Agent`-authored, edit events.

Release Notes:

- N/A

Kirill Bulatov created

8bbc3c3 Fix EP CLI output flicker (#46313)

Click to expand commit body
Release Notes:

- N/A

Max Brunsfeld created

00e3b2e vim: Fix bug where repeat operator could lead to unrecoverable replaying state (#46376)

Click to expand commit body
When a recorded action moves focus away from the editor (e.g.,
`buffer_search::Deploy`), the `EndRepeat` action handler is not invoked
because is node is no longer on the dispatch path. This left
`dot_replaying` set to `true`, causing subsequent repeats to malfunction
and the `VimGlobals.pre_count` value to never be reset.

Reset `dot_replaying` as a fail-safe when the replayer exhausts its
action queue, ensuring the state is always cleaned up regardless of
whether `EndRepeat` was handled.

Release Notes:

- Fixed vim repeat (`.`) breaking when the recorded action moves focus
away from the editor

Co-authored-by: neel <neel@chot.ai>

Dino and neel created

648d1de vim: Implement text-based matching bracket logic for Vim '%' motion to correctly find pairs within comments (#45559)

Click to expand commit body
Closes #25435

Release Notes:

- Improved vim's '%' motion to always fall back to text-based bracket
matching when language-aware matching fails

Rocky Shi created

9f8dd4c Improve LSP button error message (#46377)

Click to expand commit body
Greatly increases max width of the message we show, but truncates the
message to only ever show the first line

| LSP | OLD | NEW |
|-|-|-|
| JSON | <img width="720" height="199" alt="image"
src="https://github.com/user-attachments/assets/77c2299a-0fd7-4210-9e50-b99c60b07f54"
/> | <img width="1219" height="205" alt="Screenshot 2026-01-08 at 11 13
07 AM"
src="https://github.com/user-attachments/assets/dfdb53a6-56e4-483a-8abc-25d99f0a5ae6"
/> |
| PS1 | <img width="743" height="205" alt="image"
src="https://github.com/user-attachments/assets/378d5d41-a005-4205-b3fc-956e227321c5"
/> | <img width="1219" height="205" alt="Screenshot 2026-01-08 at 11 19
13 AM"
src="https://github.com/user-attachments/assets/b8d05fb1-20f8-4983-be94-cb5735d84faf"
/> |


Release Notes:

- N/A

Ben Kunkle created

7f64503 agent: Make reject/accept keybindings consistent with restore/stage (#46373)

Click to expand commit body
This primarily frees up, for example, `cmd-n` to create a new untitled
file if you're in the agent diff tab.

Release Notes:

- N/A

Danilo Leal created

e0f445d Enable test-support features for some dev dependencies (#46370)

Click to expand commit body
The `vim` crate's tests depend on `git_ui`, which transitively depends
on `recent_projects` with `test-support` enabled. This causes
`recent_projects` to include RemoteConnectionOptions::Mock` variant
handling. However, `git_ui` was not enabling its `test-support` feature,
causing compilation failures when the Mock variant was expected but not
available.

This commit enables the `test-support` feature for both `git_ui` and
`title_bar` dev-dependencies in the `vim` crate, ensuring the Mock
variant is consistently available during testing.

Release Notes:

- N/A

Dino created

9be436b Capture terminal output when thread is interrupted (#46306)

Click to expand commit body
<img width="707" height="778" alt="Screenshot 2026-01-07 at 8 34 00 PM"
src="https://github.com/user-attachments/assets/59842820-079b-4d47-9bdd-f77300f8a60e"
/>

When the user presses Esc or the Stop button to interrupt a thread,
terminal tools now capture their output and include it in the tool
result. This allows the model to see what was happening in the terminal
when the user interrupted, so it can answer questions about the output.

## Changes

- `Thread::cancel()` now returns a `Task` that waits for tools to
respond to cancellation before flushing pending messages
- Terminal tool uses `select!` to detect cancellation signal and
immediately kills the terminal and captures output
- `run_turn_internal` uses `select!` to break out of event loop on
cancel
- Added test for terminal tool cancellation output capture

This is a follow-up to #46218 which added similar functionality for the
"Stop" button on individual terminal tool cards.

Release Notes:

- Interrupting the agent now captures terminal output so the model can
see what was running when you stopped it

Richard Feldman created

1239ac5 Inline assistant tools: no more feature flag (#46107)

Click to expand commit body
Release Notes:

- The inline assistant now has the ability to display messages and will
be less likely to insert non-code text.

Michael Benfield created

11cfdb1 Add `ep split` subcommand for dataset splitting (#46364)

Click to expand commit body
Adds a new `ep split` command that splits JSONL datasets into multiple
output files with stratification by `repository_url` when present.

Example usage:

  ep split input.jsonl train.jsonl=80% valid.jsonl=rest

Release Notes:

- N/A

Oleksiy Syvokon created

1fa9dd6 lsp_button: Fix long LSP version label (#46359)

Click to expand commit body
If the LSP version label ends up being super long, we now truncate it
and add a tooltip so you can see the whole thing. This avoids the
submenu width from being extremely big:

<img width="500" height="310" alt="Screenshot 2026-01-08 at 9  10@2x"
src="https://github.com/user-attachments/assets/4729b3f8-000d-4bb5-8908-dc243a2d6e7b"
/>

Release Notes:

- Fixed a visual bug where long LSP version labels would increase the
LSP submenu width too much.

Danilo Leal created

f053aeb remote: Introduce a proper mock remote connection (#46337)

Click to expand commit body
Release Notes:

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

Lukas Wirth created

a87d4c8 ep: Allow matching patches against files without trailing newlines (#46357)

Click to expand commit body
A proper fix would be to add `\No trailing newline` marker and handle
it. For now, we do a simpler workaround

Release Notes:

- N/A

Oleksiy Syvokon created

464a550 docs: Update "Custom Keybindings for Extension-Based Agents section" to include a troubleshooting note for defining an agent name (#46144)

Click to expand commit body
## Description
When trying to setup the OpenCode external agent the other day, I was
having trouble setting the keybinding using the docs. The issue was that
it said to use the same name as the one written in the UI. While this
works when the external agent is defined using the `settings.json` file,
it didn't work when setting up the keybinding after installing the
extension through the extension marketplace.

Since the solution I found was to define the agent name as 'opencode'
instead of 'OpenCode' (which is the name that shows up in the UI) I
thought it would be appropiate to indicate that sometimes you might need
to set it up using a different name.

Release Notes:

- N/A

Iago Bermúdez created

f599864 Fail early if clangd is downloaded on aarch Linux (#46346)

Click to expand commit body
Part of https://github.com/zed-industries/zed/issues/46182

One caveat of this fix is that already downloaded clangd versions will
error with the old, "cannot start binary" error.
The new ones will be getting

<img width="1728" height="1084" alt="image"
src="https://github.com/user-attachments/assets/d2fdafed-6e60-4bc6-9eb2-b785fff65f3a"
/>

though.

Release Notes:

- N/A

Kirill Bulatov created

4c46872 ep: Handle errored requests in Anthropic batches (#46351)

Click to expand commit body
Also, save all requests in a single sqlite transaction -- much faster.

Release Notes:

- N/A

Oleksiy Syvokon created

5ae3cf0 settings_ui: Fix settings search missing results when BM25 finds partial matches (#46349)

Click to expand commit body
Closes #44038

BM25 results were fully replacing fuzzy results, which caused some items
to disappear from search. For example, "Show Menus" wouldn’t show up
when searching for "menu". This happened due to limitations in the
Porter stemmer used by the library. Fuzzy search matched correctly, but
its results were getting overwritten. We now merge both result sets
instead.

Release Notes:

- Fixed an issue where settings search missed some results, like "Show
Menus" when searching for "menu".

Smit Barmase created

28e7ee4 workspace: Unpreview active tab when closing other tabs (#46294)

Click to expand commit body
Un-preview the active tab when closing other tabs. 

In my mind the intent when clicking `Close Others` is to keep the
current tab around, so it should no longer be treated as a preview.
This also matches the VSCode behavior.


Release Notes:

- Make preview tab permanent after closing all other tabs

Alex Miller created

466c700 terminal: Skip SHLVL when loading login shell environment (#46273)

Click to expand commit body
Fixes #33958

## Problem

PR #44835 attempted to fix SHLVL starting at 2 by removing it from the
`env` HashMap passed to alacritty. However, that HashMap is only an
**overlay** — alacritty uses the parent process environment as a base
and applies the overlay on top. Since alacritty never calls
`env_remove("SHLVL")`, the terminal shell still inherits `SHLVL` from
Zed's process environment.

## Root Cause

The real issue is in `load_login_shell_environment()`:

1. `shell_env::capture()` spawns a login shell to capture environment
variables
2. That login shell increments `SHLVL` (from 0→1 or n→n+1)
3. The captured env (including the incremented `SHLVL`) is written to
Zed's **process environment** via `env::set_var`
4. When you open a terminal, the shell inherits Zed's `SHLVL` and
increments it again → starts at 2
5. On reload, `shell_env::capture()` runs again with the
already-elevated `SHLVL`, incrementing it further → +2 per reload

## Fix

Skip `SHLVL` when setting Zed's process environment in
`load_login_shell_environment()`. This prevents the login-shell capture
from polluting Zed's env, so terminals start fresh with the correct
`SHLVL`.

rari404 created

cfa478d windows: Improve error message for credential write failures (#46221)

Click to expand commit body
Release Notes:

- Improved Display the actual Windows error message when writing
credentials to Credential Manager fails, instead of the generic "Failed
to write API key to keychain" message. This helps users diagnose issues
like permission problems.

Signed-off-by: Xiaobo Liu <cppcoffee@gmail.com>

Xiaobo Liu created

7e39e15 editor: Don't paint hunk controls when the text area is too narrow to contain them (#46331)

Click to expand commit body
Release Notes:

- N/A

Cole Miller created

3835d40 git: Don't show binary files in past commit view (#46312)

Click to expand commit body
Also improves the commit view to use the same status-based buffer header
visual overrides as the project diff as a driveby.

Fixes https://github.com/zed-industries/zed/issues/45735

Release Notes:

- git: Binary files are no longer shown in garbled form when viewing an
old commit.

Cole Miller created

74c3608 Update pulldown-cmark to v0.13.0 to fix crash (#46267)

Click to expand commit body
Hi Zed team thank you for the awesome editor!

I recently stumbled upon a markdown sequence that seems to cause a crash

```md
-	[	] -
\
-
```

*easier to read escape characters below

```rust
let crash_input = "-\t[\t] -\r\\\n-"
println!("{}", crash_input)
```

## how to reproduce

1. copy the markdown above
2. save the file
3. `[shift]` + `[cmd]` + `p` to open the command palette
4. select `markdown: open preview`
5. crash

I've confirmed that the issue is a bug in pulldown-cmark version 12, and
has been resolved in version
[v0.13.0](https://github.com/pulldown-cmark/pulldown-cmark/releases/tag/v0.13.0)
and specifically fixed in
https://github.com/pulldown-cmark/pulldown-cmark/pull/1017

this PR simply bumps the pulldown-cmark version in zed which resolves
the crash on my local machine.


## recording 



https://github.com/user-attachments/assets/dc77132f-0d43-40f3-9841-0bf34fe714fb


Release Notes:

- Fixes crash due to markdown parsing via bumping pulldown-cmark

drbh created

42af91d ep cli: Resume from output file (#46293)

Agus Zubiaga created

fc770b6 Create project entries for entry ancestors when scanning is disabled (#46300)

Click to expand commit body
Release Notes:

- N/A

---------

Co-authored-by: Max Brunsfeld <maxbrunsfeld@gmail.com>

Agus Zubiaga and Max Brunsfeld created

e2cd9ac git: Fix base text in branch diff and text diff view not being highlighted (#46302)

Click to expand commit body
Release Notes:

- Fixed deleted portions of hunks in the branch diff and text diff views
not being syntax-highlighted.

Cole Miller created

05efa59 Add variable row height mode to table UI element (#46190)

Click to expand commit body
## Add variable row height mode to data table infrastructure

This PR introduces support for variable row heights in the data table
component, laying the groundwork for more flexible tabular data
rendering in Zed.

**Context:**  
This is the first in a series of infrastructure-focused PRs split out
from the [original CSV preview draft
PR](https://github.com/zed-industries/zed/pull/44344). The draft PR
remains open as a reference and will be incrementally decomposed into
smaller, reviewable pieces like this one.

**Details:**  
- Adds a variable row height mode to the data table, enabling future
features that require rows of differing heights (such as CSV preview
and, eventually, database table views).
- No user-facing changes; this is an internal refactor to support
upcoming functionality.

**Thanks:**  
Big thanks to @Anthony-Eid for pairing sessions and guidance on how to
best structure and land these changes incrementally.

---

Release Notes:

- N/A (internal infrastructure change, no user impact)

Oleksandr Kholiavko created

0e1ed18 docs: Add Tailwind CSS mode instructions (#46292)

Click to expand commit body
Now that https://github.com/zed-industries/zed/pull/45352 is in preview,
this updates the docs at https://zed.dev/docs/languages/tailwindcss with
instructions similar to
https://github.com/tailwindlabs/tailwindcss-intellisense?tab=readme-ov-file#filesassociations

Release Notes:

- N/A

Gaauwe Rombouts created

40a2c72 settings_ui: Organize page data (#46275)

Click to expand commit body
Closes #ISSUE

Organizes the giant list of settings UI items in `page_data.rs` a bit so
that sections are split out in sub functions that (for the most part)
return constant size arrays. Page items is also converted to a
`Box<[...]>` instead of a Vec.

The goal here is to have working breadcrumbs when in the settings UI
file (e.g. `fn general_page() > fn general_section()`), and to escape
the `vec![]` macro so that `rust-analyzer` works more consistently.

This should help both humans and LLMs know where they are in the file
and use the outline to navigate it instead of having to read the whole
thing to have an idea of what is going on.

Release Notes:

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

Ben Kunkle created

6758732 mercury: Fix spurious newline removal (#46289)

Click to expand commit body
Closes #ISSUE

Release Notes:

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

Ben Kunkle created

97c35c0 gpui: Actually remove the Result from AsyncApp (#45809)

Click to expand commit body
Depends on: https://github.com/zed-industries/zed/pull/45768

Refactor plan:
https://gist.github.com/mikayla-maki/6c4bf263fd80050715ba01f45478796e
Overall plan:
https://gist.github.com/mikayla-maki/7bb5078e4385a2e683e1e1eb40d17d38

This is the big one.

Release Notes:

- N/A

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>

Mikayla Maki and Claude Opus 4.5 created

4831e5c git: Fix project diff sorting not matching the git panel when tree view is in use (#46283)

Click to expand commit body
The tree view effectively always sorts by status, not by path.

Release Notes:

- Fixed incorrect ordering of paths in the project diff when using the
git panel's tree view.

Cole Miller created

a3733b8 Use transparent clear color for opaque windows on Linux (#46281)

Click to expand commit body
https://github.com/zed-industries/zed/pull/45423 changed the Blade
renderer to use a white clear color for "opaque" windows. This interacts
poorly with our client-side decorations, causing the shadows around the
window to be drawn over a white background.

Release Notes:

- N/A

John Tur created

19e7ee5 Remove BACKWARDS from buffer search settings

Click to expand commit body
This is only applicable to vim search.

Michael Benfield created

76fed22 ep: Add file deletion support in unified diff parsing (#46279)

Click to expand commit body
- Replace `is_new_file: bool` with `FileStatus` enum
(Created/Modified/Deleted) in udiff.rs to properly track file status
through diff operations
- Handle deleted files in `apply_diff` by calling
`project.delete_file()`
- Fix diff serialization in reorder_patch.rs to output `+++ /dev/null`
for file deletions and parse both `--- /dev/null` and `+++ /dev/null`
correctly
- Add bounds check for edit ranges exceeding buffer length

Also includes edit_prediction_cli improvements:
- Track `context_range` and `editable_range` in ExampleBuffer for more
precise prompt formatting
- Export MAX_CONTEXT_TOKENS and MAX_REWRITE_TOKENS from zeta2
- Wait for buffer parsing before computing ranges
- Respect NO_COLOR env var and enable info-level logging


Release Notes:

- N/A

Co-authored-by: Agus Zubiaga <agus@zed.dev>

Oleksiy Syvokon and Agus Zubiaga created

30dc8c5 ep cli: More substatus granularity (#46266)

Click to expand commit body
Helps narrow down steps that are taking too long

Release Notes:

- N/A

Agus Zubiaga created

3e8d013 Polish the Closed Bugs GH workflow (#46271)

Click to expand commit body
Remove the attempts to have these issues land in the same 'inbox' (the
existing project board for triage). Since they're closed, the automated
workflow of the project board will move them to the 'Closed'
column/status even with the API call specifically moving them to
'Incoming' instead. It is what it is, we'll have a separate project
board for this.

Also:
- don't look at comments on PRs
- don't freak out if the issue has no type
- add a permissions block as a defensive measure (in case someone adds
secrets.GITHUB_TOKEN later)
- add a timeout to avoid hanging out for six hours or whatever the
default is
- add some logging.

Release Notes:

- N/A

Lena created

49c4dcb ep: Fix code block extraction to require closing fence at line start (#46270)

Click to expand commit body
`extract_last_codeblock` was using `find()` to locate closing fences,
which would match backticks anywhere in the text. This caused incorrect
parsing when the content contained inline backticks or nested code
blocks, resulting in wrong diffs.

Fix by requiring the closing fence to be preceded by a newline.
Release Notes:

- N/A

Oleksiy Syvokon created

69acab7 Let agent see output of killed terminal tools (#46218)

Click to expand commit body
Previously, if you stopped the terminal prematurely, the agent would
assume the terminal process had timed out. Now it knows what happened
and can see the output:

<img width="718" height="885" alt="Screenshot 2026-01-07 at 12 40 23 AM"
src="https://github.com/user-attachments/assets/a5ea14b2-249c-4ada-9f20-d6b608f829e5"
/>


Release Notes:
- Stopping the terminal tool now allows the agent to see its output up
to that point.

Richard Feldman created

1ac2b97 Make tasks inherit their callers priority (#46179)

Click to expand commit body
Additionally this extracts more functionality into the RunnableVariant which is renamed to GpuiRunnable. 

Release Notes:

- N/A

---------

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

Yara 🏳️‍⚧️ , Lukas Wirth , and Cole Miller created

c56b225 Bump Zed to v0.220 (#46265)

Click to expand commit body
Release Notes:

- N/A

Joseph T. Lyons created

a2c233b Do not try to open PDF, zip and other binaries (#46262)

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

Stop doing this in more cases:

<img width="1728" height="2168" alt="image"
src="https://github.com/user-attachments/assets/a82f7217-3b7a-4ca9-bb12-c3098b3e9913"
/>

Release Notes:

- Do not try to open PDF, zip and other binaries as text

Kirill Bulatov created

f119b97 ep cli: Make the udiff parsing more resilient (#46264)

Click to expand commit body
We will now properly handle `\ No newline at the end of file` after
context lines and repeated occurrences. Also, when line numbers are
present in hunk headers, we will use them to disambiguate the location
when the context is not unique enough.

Release Notes:

- N/A

Agus Zubiaga created

7fa65ea Add action tracking to enable token healing for Sweep (#46212)

Click to expand commit body
Closes #ISSUE

Release Notes:

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

Ben Kunkle created

b41eb6e Add fallback message when preview changelog is empty (#46260)

Click to expand commit body
Avoid publishing preview releasing that say nothing in the release
notes:

<img width="947" height="258" alt="SCR-20260107-ioxx"
src="https://github.com/user-attachments/assets/97204551-8f55-43fb-8c9c-35491a4f1378"
/>

Release Notes:

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

Joseph T. Lyons created