Commit log

7ba0bda git: Add graph support (#44434)

Click to expand commit body
Closes #26866

### Summary
Adds a git graph to Zed, accessible via the `git_graph::Open` action if
a project has an active repository. There's still more to do, but this
is a solid foundation to expand upon. The code structure is in line with
Zed's codebase and shouldn't require architectural changes to add
missing features.

The git graph can be opened via the command palette (`git graph: open`)
or by binding a key to `git_graph::Open`. It's available when the
project has an active git repository.

### Architecture

Similar to the Debugger, the git graph is split between a data layer and
a view/UI layer. When the view layer is rendering, it queries the data
layer for its active state. This setup allows the data layer to lazily
request graph data (only when needed for rendering), abstracts collab
from the view layer, allows most of the data loading to happen on a
background thread, and makes caching easy to implement.

#### Graph Loading

The graph data is loaded in two phases:
1. `Repository::graph_data()` streams commit structure (SHA, parents,
refs) in chunks of 1000 via `git log`
2. `CommitDataReader` lazily fetches full commit details (author,
timestamp, subject) on-demand using a persistent `git cat-file --batch`
process

This two-phase approach makes the initial loading of the graph as fast
as possible, because `git log` takes significantly longer when all the
needed graph data is queried through it. Zed then lazily loads commits
in the user's viewport through `cat-file --batch`. This makes scrolling
to any place in the graph extremely snappy and benefits the
collaborative architecture by only fetching data needed to render the
graph. It also allows Zed to share commit data between different graph
visualizations (e.g., date order vs. topological order).

#### Performance

Tested on both the Zed and LLVM repositories with good performance in
both cases. The two-phase loading approach and lazy fetching keep the UI
responsive even with large commit histories.

#### Testing 

I added property testing that builds randomized commit graphs and
verifies that the graph is constructed correctly. This also works as an
integration test and will be expanded in the future to test collab graph
visualization, graph filtering, commit actions, etc.

### New Crate
- `git_graph` (GPL-licensed) β€” contains UI and graph computation logic

### Not Yet Implemented
- Remote repository support (collab)
- Filtering by branch
- Commit actions (checkout, cherry-pick, etc.)
- Search
- Open commit view for selected commit
- Resizable columns 
- Column filtering

#### Reference
<img width="1624" height="976" alt="Screenshot 2025-01-22 at 8 15 39 PM"
src="https://github.com/user-attachments/assets/0f10924a-3964-462f-b320-42d84d02f7bf"
/>

Special thanks to [Alberto Slavica](https://github.com/pyundev) for
submitting #44405, which was a good base to work off of.

Release Notes:

- git: Add initial version of git graph

---------

Co-authored-by: pyundev <pyundev@users.noreply.github.com>
Co-authored-by: Cole Miller <cole@zed.dev>
Co-authored-by: Zed Zippy <234243425+zed-zippy[bot]@users.noreply.github.com>

Anthony Eid , pyundev , Cole Miller , and Zed Zippy created

5418c91 Make auto-signature help respect popover delay (#46745)

Click to expand commit body
Closes #46191

Release Notes:

- Make the auto signature popover β€” `"auto_signature_help": true` β€”
respect `hover_popover_delay`.

Muhammad Salar Khan created

a5eb666 git: Fix panic when committing from side-by-side view (#47425)

Click to expand commit body
When committing, it was possible for the left-hand side multibuffer to
get the updated base text (via the `buffer_changed_since_sync`
mechanism) without updating its diff snapshot for that buffer (via the
diff subscription), causing a mismatch between that multibuffer's diff
state and its buffer state. The fix is to ensure for inverted diffs that
we always update pull an updated diff snapshot as part of
`sync_from_buffer_changes`.

This also removes some code that we added in #44838 to sync the
left-hand side multibuffer when edits on the right-hand side invalided
diff hunks. Instead, the left-hand side will just sync the next time the
diff recalculates when this happens, and will always consider hunks from
the last diff calculation as valid--so there will be a short window
where the diff transforms and `diff_hunks_in_range` don't match between
the two sides. That's okay because we don't rely on this in the display
map--the code that translates positions between the two sides accesses
the diff's `InternalDiffHunk`s directly rather than going through a
multibuffer API.

Release Notes:

- N/A

Cole Miller created

ad8f41a git: Fix double-lease panic when syncing selections in side-by-side diff (#47430)

Click to expand commit body
Release Notes:

- N/A

Cole Miller created

398da33 terminal: Fix `test_terminal_eof` test failing on fish shell (#47410)

Click to expand commit body
It turns out Alacritty sends `AlacTermEvent::ColorRequest` when using
the fish shell. That path relies on `cx.theme`, so this change is needed
for it to pass.

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

Release Notes:

- N/A

Smit Barmase created

13e130b Update .mailmap (#47413)

Click to expand commit body
This PR updates the .mailmap file to merge some more commit authors.

Release Notes:

- N/A

Smit Barmase created

ec981b8 agent: Add thinking toggle for Zed provider (#47407)

Click to expand commit body
This PR adds a thinking toggle for controlling whether to use thinking
for a model in the Zed provider:

<img width="645" height="142" alt="Screenshot 2026-01-22 at 12 34 01β€―PM"
src="https://github.com/user-attachments/assets/9aa543fe-e708-4840-8b38-1a6fbcb78388"
/>

Previously we would create separate "Thinking" variants of the models
that supported thinking in the model selector.

This only applies to Anthropic models in the Zed provider, currently.

This is gated behind the `cloud-thinking-toggle` feature flag.

Release Notes:

- N/A

---------

Co-authored-by: Neel <neel@zed.dev>

Marshall Bowers and Neel created

76c8857 terminal: Give child processes time to exit on their own (#47408)

Click to expand commit body
Closes #44003

Supersedes https://github.com/zed-industries/zed/pull/45777

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

Release Notes:

- Fixed an issue where the terminal would sometimes fail to write shell
history.

---------

Co-authored-by: Lukas Wirth <me@lukaswirth.dev>

Smit Barmase and Lukas Wirth created

1791125 ep: Option to save evaluation report in JSON (#47409)

Click to expand commit body
Release Notes:

- N/A

Oleksiy Syvokon created

ff73838 Add "Agent Panel Error Shown" telemetry with ACP error details (#46848)

Click to expand commit body
Adds a new "Agent Panel Error Shown" telemetry event that fires when
users see errors in the agent panel. For errors from external ACP agents
(like Claude Code), we capture additional details.

Previously, we had no visibility into what errors users were
encountering in the agent panel. This made it difficult to diagnose
issues, especially with external agents.

The new telemetry event includes:
- `agent` β€” The agent telemetry ID
- `session_id` β€” The session ID
- `kind` β€” Error category (payment_required, authentication_required,
refusal, other, etc.)
- `acp_error_code` β€” The ACP error code when available (e.g.,
"InternalError")
- `acp_error_message` β€” The ACP error message when available

Release Notes:

- N/A

---------

Co-authored-by: Michael Benfield <mbenfield@zed.dev>

Katie Geer and Michael Benfield created

a3fd8e6 ep: Don't fail on lines with inference errors (#47406)

Click to expand commit body
Release Notes:

- N/A

Oleksiy Syvokon created

c63a0bc Parse output from older version of the devcontainer CLI by looking for a JSON object in plaintext (#47403)

Click to expand commit body
Closes #46852

The devcontainer CLI which ships with VS Code can be added to the user's
`PATH` with the VS Code command `Dev Containers: Install devcontainer
CLI`. This version of the CLI is older than what Zed was developed with,
and as a result, it doesn't separate its json-formatted output and its
plaintext metadata into distinct output streams. This broke parsing in
the CLI adapter in Zed. This fix accounts for that, and if parsing
fails, attempts to find a relevant JSON object in plaintext and tries to
parse that.

Tested with VSCode's version of the devcontainer CLI (`0.80.1`) as well
as the up-to-date version (`0.81.1`)

Release Notes:

- Improved parsing of devcontainer CLI output when using earlier
versions

KyleBarton created

d6bd366 workspace: Persist dock state for empty workspaces (#45966)

Click to expand commit body
Closes #4568

Release Notes:

- Fixed project-less workspaces not persisting their dock state

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

Pedro Paulo Magno and Kirill Bulatov created

5e9ca9c Support Insider variants of Code and VSCodium for settings.json import (#47247)

Click to expand commit body
Release Notes: 

- Import VS Code Insiders and VSCodium Insiders user settings
(`settings.json`).

Note:
- If multiple VS Code-family installs have a `settings.json`, Zed
selects the last matching path in its search order (so Insiders is
preferred over stable when both exist).

Maj Soklič created

66e8889 terminal: Clear hovered link when no target found (#47134)

Click to expand commit body
Release Notes:

- Fixed clear hovered link when no target found

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

Xiaobo Liu created

4eff897 Revert "Make apostrophes not brackets in markdown (#46414)" (#47396)

Click to expand commit body
This reverts commit 8842cc696f55097de54a5cd7228afdd8f8acb883.


https://github.com/zed-industries/zed/commit/1062e2c5a9e9764b58c5c3fdec6a5b9bddd1dd2e
was landed interim which has a test that's broken now.

Something-something build queue.

Closes #ISSUE

Release Notes:

- N/A

Kirill Bulatov created

d207097 ep: Add line-level exact match metric (#47383)

Click to expand commit body
Release Notes:

- N/A

Oleksiy Syvokon created

8842cc6 Make apostrophes not brackets in markdown (#46414)

Click to expand commit body
Closes #45912

Release Notes:

- Made apostrophes not brackets in markdown

Zachiah Sawyer created

94e60a0 zeta2: Cut oldest events to maintain prompt size budget (#47394)

Click to expand commit body
Closes #ISSUE

Release Notes:

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

Ben Kunkle created

4bc3b71 Enable configurable dismissal of language server notifications that do not require user interaction (#46708)

Click to expand commit body
Closes #38769

Release Notes:

- Dismiss server notifications automatically with
`"global_lsp_settings": { "notifications": { "dismiss_timeout_ms": 5000
} }` settings defaults.

---------

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

Jens Kouros and Kirill Bulatov created

e9aadaf repl: Add initial notebook execution + KernelSession abstraction (#43553)

Click to expand commit body
Coming from discussion on #25936 and
https://github.com/zed-industries/zed/pull/19756 .
This PR introduces the KernelSession abstraction and adds basic notebook
cell execution inside NotebookEditor.

The following provides a base starter for the development on Notebooks.

What this PR includes today:

Release Notes:

- KernelSession trait extracted. Both REPL and NotebookEditor now share
the same routing mechanism.
- NotebookEditor can launch kernels, execute code cells, and display
outputs.
- Basic cell operations: run current cell, run all, move up/down, add
code/markdown blocks. Keybindings follow Jupyter defaults.


Next Steps:

- [x] Editing support for markdown and code blocks.
- Buffer integration instead of temporary cell text.
- [x] Proper focus behavior when executing or adding cells.
- Kernel control UI.

A little far fetched steps:

- Vim Support
- Cell Handling Improvement and other convenient features and design
from other editors
- Ability to have better parsing for AI Support. 


I have attached a video of showcasing some of the features:


https://github.com/user-attachments/assets/37e6f3e5-2022-45f0-a73d-2dd01ebc2932

MostlyK created

a09aeb1 settings_ui: Fix font weight number field rendering (#47384)

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

Release Notes:

- Settings Editor: Fixed a bug with the number field rendering of the
font weight setting.

Danilo Leal created

192ea0d agent: Don't show inline assistant feedback buttons if setting is disabled (#47382)

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

Release Notes:

- Agent: Fixed a bug where the inline assistant feedback buttons where
being displayed despite the setting "Enable Feedback" was turned off.

Danilo Leal created

da53a2b lsp: Skip serializing of params if unit type (#46027)

Click to expand commit body
Closes #45994 

Per the JSON-RPC specification, `params` "MUST be provided as a
Structured value" or the member "MAY be omitted." See specification
here: https://www.jsonrpc.org/specification#request_object

The code was passing in unit `()` for params which serde_json was
serializing to `null` which is not valid.

This pulls request adds an `is_unit` function and annotates the `params`
fields in the `Request` and `Notification` structs with the following:
 ```rs
#[serde(default, skip_serializing_if = "is_unit")]
```

so that the field will be omitted if the type is unit. This does also introduce a `'static` bound to these structs.

> [!WARNING]
> While this seems to me like a simple change, I am not super familiar with Rust, please look at this PR with extra scrutiny. The last thing I want to do is break everyone's LSP integration.


Release Notes:
- LSP integrations: send language server shutdown requests with correct parameters

Michael Barth created

ccedb24 agent: Clearer distinction that we are in Text Thread history (#47295)

Click to expand commit body
Some users were a bit confused that the history between zed agent + text
threads is split up now. Making it a bit clearer for the users still
using text threads which history they are currently looking at.

Release Notes:

- N/A

Ben Brandt created

a85142e ep: Don't log steps that took <500ms (#47371)

Click to expand commit body
Release Notes:

- N/A

Oleksiy Syvokon created

e603173 Bump alacritty-terminal (#47372)

Click to expand commit body
Release Notes:

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

Lukas Wirth created

73515d9 rust: Highlight enum variants as types (#45546)

Click to expand commit body
Closes [#ISSUE](https://github.com/zed-industries/zed/issues/14489)

Release Notes:

- Fix Rust enum variants with no lower-case highlighted as constants

Screenshot:

<img width="401" height="280" alt="image"
src="https://github.com/user-attachments/assets/cd67a576-3c41-452d-9c6b-b3c259cee556"
/>

Rocky Shi created

f1e8702 Add missing #elifdef, #elifndef directives to C/C++ highlights (#45672)

Click to expand commit body
Release Notes:

- Add missing #elifdef, #elifndef directives to C/C++ highlights.

Haojian Wu created

e0212b8 acp: Add beta label to ACP registry (#47369)

Click to expand commit body
Release Notes:

- N/A

Ben Brandt created

03a5f7b acp_thread: Rename resume to retry (#47370)

Click to expand commit body
Changing the name to better capture what this message does and also
avoid confusion with the actual session/resume method in ACP

Release Notes:

- N/A

Ben Brandt created

29b9174 Add `ep import-batch` to download finsihed Anthropic batches (#47364)

Click to expand commit body
Release Notes:

- N/A

Oleksiy Syvokon created

b082481 project_panel: Show Reveal in File Manager on wsl (#47288)

Click to expand commit body
Assimilates https://github.com/zed-industries/zed/pull/46856 and adds
support for reveal file manager in the project panel on wsl. Closes
https://github.com/zed-industries/zed/pull/46856

Release Notes:

- Fixed "Reveal in File Manager" not working for WSL remote connections
on Windows.
- Show "Reveal in File Manager" in the project panel context menu on WSL

---------

Co-authored-by: Max Malkin <maxim_malkin@outlook.com>

Lukas Wirth and Max Malkin created

071b3d9 acp: Optimize registry refresh (#47367)

Click to expand commit body
Before we were checking it even if you weren't using registry agents.
Now happens less frfrequently, and only when you are actually using
registry agents.

Release Notes:

- N/A

Ben Brandt created

21fbceb workspace: Add close project menu item (#47365)

Click to expand commit body
cc https://github.com/zed-industries/zed/discussions/42163

Release Notes:

- Added a menu item to close the current project, going back to a clean
window state

Lukas Wirth created

c35d1da acp: Support the session_info_update notification (#47363)

Click to expand commit body
Release Notes:

- N/A

Ben Brandt created

8db954a agent_ui: Defer spawning agents until the agent panel has been opened (#47355)

Click to expand commit body
Release Notes:

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

Lukas Wirth created

2be94ce fs: Use public-api-only tests (#47149)

Click to expand commit body
This reduces time needed to build tests for fs from 1.2s to 0.6s.
Release Notes:

- N/A

Piotr Osiewicz created

1f4741c worktree: Use public-api-only tests (#47152)

Click to expand commit body
- **settings: Do not leak type serialization into downstream crates**
- **worktree: Separate integration tests into separate target**

Release Notes:

- N/A

Piotr Osiewicz created

67e0cec agent_ui: Fix message editor stealing focus from other panels (#47321)

Click to expand commit body
Closes https://github.com/zed-industries/zed/issues/41278,
https://github.com/zed-industries/zed/issues/45576,
https://github.com/zed-industries/zed/issues/46513

Release Notes:

- Fixed message editor stealing focus (so the "Open Recent Project"
modal stays open)

This issue has been driving me insane haha.


_Note: This is my first code contribution to this project. Please be
kind and let me know if I have missed something. I tested this fix on my
machine and it works. Tests are passing on my device. I have agreed to
the Zed Contributor License and Feedback Agreement with my Zed Account
that's linked to the same email as this GitHub account._

Fabian Szabo created

618f848 git: Side-by-side diff UI (#47349)

Click to expand commit body
This PR implements a UI for the side-by-side diff, using blocks to align
the two sides and adding a coherent `SplitEditorElement`.

Release Notes:

- N/A

---------

Co-authored-by: cameron <cameron.studdstreet@gmail.com>
Co-authored-by: Anthony Eid <hello@anthonyeid.me>
Co-authored-by: Zed Zippy <234243425+zed-zippy[bot]@users.noreply.github.com>

Cole Miller , cameron , Anthony Eid , and Zed Zippy created

7adb97a User-defined slash commands (#46815)

Click to expand commit body
## Summary

Implements user-defined slash commands for the agent panel. Users can
create markdown files in `~/.config/zed/commands/` (user-wide) or
`.zed/commands/` (project-specific) that expand into templated text when
invoked via `/command_name` in the chat interface.

## Features

- **File-based commands**: Create `.md` files that become slash commands
- **Template expansion**: Use `$1`, `$2`, etc. for positional arguments,
or `$ARGUMENTS` for all args
- **Namespacing**: Subdirectories create namespaced commands (e.g.,
`frontend/component.md` β†’ `/frontend:component`)
- **Project & user scopes**: Project commands in `.zed/commands/`, user
commands in config dir
- **Claude compatibility**: Can symlink `~/.claude/commands/` for
compatibility
- **Caching**: Commands are cached and watched for file changes
- **Error handling**: Graceful degradation with error display in UI

## Feature Flag

Behind `user-slash-commands` feature flag.

## Testing

52 unit/integration tests covering parsing, validation, expansion, file
loading, symlinks, and error handling.

---

Release Notes:

- N/A (behind feature flag)

---------

Co-authored-by: Zed Zippy <234243425+zed-zippy[bot]@users.noreply.github.com>

Richard Feldman and Zed Zippy created

9ac94ce extension_rollout: Add support for renaming and deleting files (#47329)

Click to expand commit body
This is in preparation for removing one of the files in favor of having
just one larger one (and perhaps renaming that in the future).

Release Notes:

- N/A

Finn Evers created

d42fe0b Fix Visual mode flip on project search (#44284)

Click to expand commit body
Previously, when project search results first appeared, vim would
incorrectly switch to Visual mode. This happened because vim settings
(including `collapse_matches`) weren't synced to an editor until it
received focus. Since the results editor wasn't focused when the first
match was selected, the selection wasn't collapsed, causing vim to
interpret it as a visual selection.

Now vim settings are synced immediately when vim activates on an editor,
ensuring `collapse_matches` is set before any selections are made.

Closes #43878

Release Notes:

- Fixed vim mode incorrectly switching to Visual mode on first project
search

---------

Co-authored-by: dino <dinojoaocosta@gmail.com>

MostlyK and dino created

59738a7 Support zooming and panning in the image viewer (#43944)

Click to expand commit body
Implemented Pan and Zoom on the Image Viewer.

Demo:



https://github.com/user-attachments/assets/855bafe8-fdc2-4945-9bfb-e48382264806





Closes #9584



Release Notes:

- Add zoom in/out, reset, fit-to-view and zoom-to-actual actions 
- Support scroll-wheel zoom with modifier, click-and-drag panning 
- Renders a zoom percentage overlay. 
- ImageView Toolbar Added to control zoom in/out and fit view.

---------

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

MostlyK and MrSubidubi created

01160a7 extension_ci: Remove rollout exclusion list (#47315)

Click to expand commit body
The last extension has now been migrated to the new workflows and with
that, the entire zed-extensions org now uses the centralized workflows πŸŽ‰

Given this, we can now remove the exclusion list and - as a little bonus
- also rollout changes automatically to the repository hosting the
shared workflows.

Release Notes:

- N/A

Finn Evers created

e24c819 prompt_store: Fix deleted rules from the rules library being restored after restart (#47323)

Click to expand commit body
Closes #40648

When deleting a prompt from the rules library, we now also delete it
from the legacy V1 database tables (if they exist). Previously, the V1
data would persist and get re-migrated on the next startup.

Release Notes:

- Fixed an issue where deleted rules from the rules library were getting
restored after a restart.

Smit Barmase created

54114d2 ep_cli: Chunk teacher prediction requests to Anthropic batch API (#47318)

Click to expand commit body
Closes #ISSUE

We're hitting request size limits on the new larger dataset, so we need
to do pre-batching. A 16k chunk size was chosen arbitrarily but seems to
be a good tradeoff between number of chunks / within request size limit

Release Notes:

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

Ben Kunkle created

6354334 language_models: Remove `open-ai-reponses-api` feature flag (#47317)

Click to expand commit body
This PR removes the `open-ai-responses-api` feature flag and makes it so
all OpenAI requests to the Zed provider use the Responses API.

We've been running this in Nightly/Preview for a week now without any
issues.

Closes CLO-104.

Release Notes:

- N/A

Marshall Bowers created

901fe23 Pop end row if the end is equal to the starting sticky row (#47314)

Click to expand commit body
Closes #47307

In markdown, the outline item for a heading actually ends on the same
row as the next outline item (see #47307 for the visual glitch). This
change makes it so that the end row calculation accounts for that, and
you don't have two different display points where content is potentially
scrolling out of view. Fixed visually:



https://github.com/user-attachments/assets/e0a7e57a-fd41-4484-87e9-ac3e51d0b927


Release Notes:

- Fixed a visual glitch with sticky scroll headers in markdown

KyleBarton created