Commit log

4084a5a ci: Restore mtime of source files to the git log time (#48607)

Click to expand commit body
Release Notes:

- N/A

Piotr Osiewicz created

61e5755 languages: Change syntax highlighting for C/C++ preprocessor directives (#48109)

Click to expand commit body
This changes the highlight capture for preprocessor directives from
`@keyword.directive` to `@preproc` in both C and C++.

PR #44043 changed C from `@keyword` to `@keyword.directive` for
consistency with C++, but `@keyword.directive` is still semantically
wrong. Preprocessor directives are not language keywords — they are
instructions to a separate preprocessing phase that runs before
compilation.

Using `@preproc` reflects this distinction and allows themes to style
them independently from actual language keywords like `const`,
`struct`,`if`, etc. This is consistent with how editors like CLion
handle preprocessor directives.

Before:
<img width="710" height="653" alt="before"
src="https://github.com/user-attachments/assets/5c02fc06-bc19-4112-ae53-ad72eb8044e3"
/>

After:
<img width="710" height="653" alt="after"
src="https://github.com/user-attachments/assets/2490e796-7286-4fbb-81b0-387f551cde8f"
/>

Release Notes:

- C/C++: Syntax highlighting for preprocessor directives can now be
tweaked with @preproc capture group.

Co-authored-by: ozacod <ozacod@users.noreply.github.com>

ozacod and ozacod created

7a6674d agent: Move subagent spawning to `ThreadEnvironment` (#48381)

Click to expand commit body
TODO
- [x] Cancellation
- [x] Show subagent card as soon as tool_name == "subagent"
- [x] Keybinding for closing subagent full screen view
- [x] Only fire subagent notifications when appropriate
- [x] Fix tests

Release Notes:

- N/A

---------

Co-authored-by: Cameron <cameron@zed.dev>
Co-authored-by: Tom Houlé <tom@tomhoule.com>
Co-authored-by: cameron <cameron.studdstreet@gmail.com>
Co-authored-by: Danilo Leal <daniloleal09@gmail.com>
Co-authored-by: Ben Brandt <benjamin.j.brandt@gmail.com>

Bennet Bo Fenner , Cameron , Tom Houlé , cameron , Danilo Leal , and Ben Brandt created

ad7b1f5 vim: Make end of line infallible (#48867)

Click to expand commit body
When using `$` to move to the end of line (`vim::EndOfLine`), the
`vim::motion::Motion.move_point` method checks whether the new point,
that is, the point after the motion is applied is different from the
point that was passed as a method argument. If the point is not
different, the point and selection goals are only updated if
`vim::motion::Motion.infallible` returns true for the motion in
question.

In short, this means that, if the cursor was already at the end of the
line, and it got there using `vim::Right`, for example, the selection
goal wouldn't actually be set to
`SelectionGoal::HorizontalPosition(f64::INFINITY)`, so when the cursor
was moved to a shorter line, it wouldn't be set at the end of that line,
even though `$` had been used.

This commit updates `vim::motion::Motion.infallible` to ensure that, for
`vim::motion::Motion::EndOfLine`, it returns `true`, so that the
selection goal is always updated, regardless of whether the cursor is
already at the end of the line.

Closes #48855 

- [X] Tests or screenshots needed?
- [X] Code Reviewed
- [X] Manual QA

Release Notes:

- vim: Fixed `$` not sticking to end-of-line on vertical motions
(`j`/`k`) when the cursor was already at the end of the line via `l` or
arrow keys

Dino created

64c3e8a languages: Exclude TestMain from Go runnables (#46575)

Click to expand commit body
Exclude special [TestMain](https://pkg.go.dev/testing#hdr-Main) function
from Go runnables.

Release Notes:

- Excluded `TestMain` function from Go runnables.

Lev Zakharov created

4177be4 git: Optimize `patch_for_range` functions (#48852)

Click to expand commit body
These are heavily used by the side-by-side diff. Previously, we were
iterating over all hunks for each call. Now we skip hunks that can't
affect the provided range.

Release Notes:

- N/A

Cole Miller created

da8a611 Expose the scheduler executor for ex (#48854)

Click to expand commit body
Release Notes:

- N/A

Conrad Irwin created

4ffaf64 repl: Bump jupyter-protocol to v1.1.1 (#48848)

Click to expand commit body
Bringing in the handling of the lack of execution count noticed while
testing other kernels. xref:
https://github.com/zed-industries/zed/pull/48837

Release Notes:

- N/A

Kyle Kelley created

303c1aa repl: Be more resilient with message parsing (#48837)

Click to expand commit body
Closes #21529

Show a toast when a message from a Jupyter kernel doesn't parse
properly.

Discovered that some kernels don't include their execution count in an
`ExecuteReply` which is required in the jupyter protocol. Upstream I'll
go make that field either be an `Option` or just stick
`#[serde(default)]` on it so it's not a change in the interface.

Release Notes:

- Show error when parsing a message from a Jupyter kernel fails

Kyle Kelley created

f81dfca collab: Remove unused `Config` fields (#48836)

Click to expand commit body
This PR removes the unused fields from the `Config` struct in Collab.

Release Notes:

- N/A

Marshall Bowers created

2efdd35 ui: Improve icon preview visualization (#48834)

Click to expand commit body
Just improving the visualization for all icons in the component preview;
I think this will make it easier to quickly skim for an existing icons.

Release Notes:

- N/A

Danilo Leal created

24d9c00 repl: Use split() on shell and control dealer sockets (#48823)

Click to expand commit body
Hot on the heels of https://github.com/zed-industries/zed/pull/48817 I'm
bringing the best improvement to the repl underneath: `split()`-able
sockets! Much more will be unlocked by having this.

This split the shell and control `DealerSocket` connections into
independent send/recv halves using the new `split()` API from zeromq
0.5.0 and runtimelib 1.x. This also nicely cleaned things up so we could
have a single `select!` loop over iopub, shell, and control recv halves.
That replaces three separate recv tasks.

This likely closes some issues for certain kernels that would get stuck
either during startup or other flows due to them not sending replies to
specific requests. I'll see if I can find issues around this and update
the release notes after.

This allows us to unlock some nifty new things we can do on the shell
socket, particularly autocompletion for in-memory values, stdin support,
and others. I _think_ it also help with sending and receving
`KernelInfo`, which not all kernels do properly at the start. This makes
us a bit more resilient to errant kernels.

Release Notes:

- N/A

Kyle Kelley created

2028f85 languages: Fix block comment indentation for C/C++ (#47810)

Click to expand commit body
Before:
<img width="426" height="128" alt="before"
src="https://github.com/user-attachments/assets/89f84f4b-4810-4d11-b8a2-c841d8506cef"
/>

After:
<img width="437" height="125" alt="after"
src="https://github.com/user-attachments/assets/a63c5265-8f1b-4926-a334-93effad22f2b"
/>

Release Notes:

- Fixed for block comment indentation problem for C/C++

ozacod created

5ba3d6a languages: Fix C/C++ outline for function definitions and declarations with mixed storage and type qualifiers (#47500)

Click to expand commit body
Before:
<img width="1002" height="228" alt="before"
src="https://github.com/user-attachments/assets/94c5d0b7-a467-4bfe-8eaf-5a2c4b3cb7ea"
/>

After:
<img width="1002" height="228" alt="after"
src="https://github.com/user-attachments/assets/73d049d2-4dd1-40a4-ac21-984ca3fd32ee"
/>

Release Notes:

- Fixed C/C++ outline for function definitions and declarations with
mixed storage and type qualifiers.

ozacod created

b2150a4 Fix incorrect first line detection for libstdc++ files (#48351)

Click to expand commit body
https://github.com/zed-industries/zed/pull/48250#issuecomment-3846774856

To ensure the fix covers all affected files, I have checked all C++
files without extensions using the following command:
```bash
find /usr/include/c++ -type f | grep -v '.h' | grep -v '.cpp' | grep -v '.tcc' | xargs head -1 | zed -
```

<details>
  <summary>Click to expand images</summary>
<img width="940" height="935" alt="image"
src="https://github.com/user-attachments/assets/d0346ad4-d9f7-47d5-a85e-cb574dacf290"
/>

<img width="956" height="939" alt="image"
src="https://github.com/user-attachments/assets/d9e872fc-f2b8-4fff-b5a9-99e8a4fc21a3"
/>

<img width="953" height="940" alt="image"
src="https://github.com/user-attachments/assets/dee53cd4-d598-4d65-918d-353b037cdf1b"
/>

<img width="956" height="938" alt="image"
src="https://github.com/user-attachments/assets/777b899c-db25-4dc8-b4a5-fafe28cc14a4"
/>

</details>

Release Notes:

- N/A

feeiyu created

28e743b languages: Add attribute highlighting in C++ (#47825)

Click to expand commit body
Before:
<img width="587" height="360" alt="before"
src="https://github.com/user-attachments/assets/85989888-2fc0-43aa-87ca-01d2c3101484"
/>

After:
<img width="591" height="357" alt="after"
src="https://github.com/user-attachments/assets/9e1ceccf-7890-43f7-a0b9-938daa161d13"
/>

Release Notes:

- Added attribute highlighting in C++

ozacod created

5af15f7 Fix panic in zeta1 prompt parsing (#48822)

Click to expand commit body
Closes #48712

- [ ] Tests or screenshots needed?
- [ ] Code Reviewed
- [ ] Manual QA

Release Notes:

- Fixed a panic when parsing predictions made by zeta1

Ben Kunkle created

3f53a3a Add a `Show All Channels` button to the collab panel (#48826)

Click to expand commit body
This makes it easy to see all the activity that is happening in a more
condensed view.
Helps you fend off endless scrolling in the collaboration panel when
trying to find the meeting room. ⚔️


https://github.com/user-attachments/assets/5b538636-5672-42a4-a831-ffe303051c84

- [X] Tests or screenshots needed?
- [ ] Code Reviewed
- [X] Manual QA

Release Notes:

- Added a `Show All Channels` button to the collab panel to filter down
to only channels with participants.

Joseph T. Lyons created

b97a6c3 extension_ci: Increase timeout for extension version bump job (#48828)

Click to expand commit body
This fixes another issue for the ruby extension where a cargo index
update can sometimes take quite some time. However, this will not change
anything for all other extensions, as they continue to bump within the
defined timeout.

Release Notes:

- N/A

Finn Evers created

0821d6f collab: Remove `GET /extensions` endpoint (#48827)

Click to expand commit body
This PR removes the `GET /extensions` endpoint from Collab, as it has
been moved to Cloud.

In #48717 we changed it to just proxy to Cloud, but we didn't end up
needing that.

Release Notes:

- N/A

Marshall Bowers created

d712963 git: Fix missing excerpts panic with side-by-side diff (#48755)

Click to expand commit body
When we update excerpts, pull the changes to the `Companion` excerpt
mappings into the multibuffer's update block, so that buffer
subscriptions don't get the chance to run and observe an invalid state
while attempting to snapshot the editor

Release Notes:

- N/A

---------

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

Cole Miller , cameron , and Jakub Konka created

3d327cf extension_ci: Be more precise with clippy targets (#48824)

Click to expand commit body
This fixes an issue where we would run into build errors during testing.

Release Notes:

- N/A

Finn Evers created

7a18c41 git: Side-by-side diff UX improvements (#48821)

Click to expand commit body
- No more "locked mode", it's on by default
- Only `ToggleDiffView` action
- Re-enable code actions on the RHS

Release Notes:

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

---------

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

Cameron Mcloughlin and Cole Miller created

81f9354 docs: Mention support for alternate LSP for Kotlin (#45650)

Click to expand commit body
Would believe https://github.com/zed-industries/zed/pull/40776 did
change the default lsp to official implementation.


Release Notes:

- N/A

---------

Co-authored-by: Kunall Banerjee <hey@kimchiii.space>

ilsubyeega and Kunall Banerjee created

29f2048 repl: Shutdown all kernels on app quit (#48760)

Click to expand commit body
Closes #17985
Closes #21911

Force the shutdown of the kernel by ensuring the kernel sessions are
dropped on app quit.

Release Notes:

- Fixed shutdown of kernels on app exit

Kyle Kelley created

7f2ee83 repl: Bump `runtimed` ecosystem packages to 1.x (#48817)

Click to expand commit body
Bump the runtimed ecosystem packages to their 1.0 releases:

- `jupyter-protocol`: 0.10.0 → 1.1.0
- `jupyter-websocket-client`: 0.15.0 → 1.0.0
- `nbformat`: 0.15.0 → 1.0.0
- `runtimelib`: 0.30.0 → 1.1.0

One breaking change: `MimeType::Json` now wraps `serde_json::Value`
directly instead of `serde_json::Map<String, Value>`, so the redundant
`Value::Object(...)` wrapping in `outputs.rs` was removed.

Closes #41649

More Quality of Life improvements and Bug Fixes are coming in new PRs
after this is merged.

Release Notes:

- Fixes startup for R kernels and Python kernels on windows.

Kyle Kelley created

2d1e211 Update community champions (#48818)

Click to expand commit body
Adding @rgbkrk so we have extra reminders in place to remain attentive.

Release Notes:

- N/A

Joseph T. Lyons created

c873440 docs: Suggest alternative to Vim tag navigation feature (#48735)

Click to expand commit body
Closes N/A

- [ ] Tests or screenshots needed? -- no
- [x] Code Reviewed 
- [x] Manual QA -- I ran `mdbook serve` and checked the output looks OK

Release Notes:

- N/A

---------

Co-authored-by: Kunall Banerjee <hey@kimchiii.space>

Martin Pool and Kunall Banerjee created

5e86a8d extension_rollout: Improve naming for PR titles (#48815)

Click to expand commit body
This PR updates the names for the PRs to roll out to the extensions, as
having the `zed@` prefix does not look too pretty.

It also increases the concurrency of matrix jobs run to 10, as the
rollout has matured by now and is safe to perform for more repositories
at once.

Release Notes:

- N/A

Finn Evers created

82dedcb extension_ci: Merge extension workflow files into one file (#48810)

Click to expand commit body
This PR consolidates the two workflow files shipped to extensions into
one, which stops us from requiring a separate runner for what can
actually be done in one workflow.

It also
- adds a check that version bumps will now only be created by zed-zippy
in separate commits.
- Makes the bumping of versions faster and more reliable.
- (Hopefully) fixes an issue we were seeing in some CI tests.

Release Notes:

- N/A

Finn Evers created

fb0af50 gpui: Allow OS caption/buttons for custom Windows titlebar (#48330)

Click to expand commit body
## Summary
Fixes an issue where GPUI's handling of `WM_NCLBUTTONDOWN` prevented
Windows from processing default titlebar interactions (dragging, caption
buttons, and border resize).

## Changes
- Allow OS to handle `WM_NCLBUTTONDOWN` events for `HTCAPTION`, caption
button areas, and resize border areas (`HTLEFT`, `HTRIGHT`, `HTTOP`,
`HTBOTTOM`, `HTTOPLEFT`, `HTTOPRIGHT`, `HTBOTTOMLEFT`, `HTBOTTOMRIGHT`)
- Use current cursor position in `WM_NCHITTEST` for accurate hit-testing

## Testing
- Manual testing on Windows: titlebar dragging works
- Manual testing on Windows: minimize/maximize/close buttons work
- Manual testing on Windows: window border resize works in all
directions

Release Notes:
- N/A

Conashimi created

aea984b visual_tests: Init agent UI globals in runner (#48076)

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

Release Notes:

- Fixed init agent UI globals in visual test runner

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

Xiaobo Liu created

196504f repl: Pluck project off editor directly (#48808)

Click to expand commit body
Clean up code by pulling the project off the editor directly.

Repeat of https://github.com/zed-industries/zed/pull/48762 since
reversion happened in https://github.com/zed-industries/zed/pull/48776.

Release Notes:

- N/A

Kyle Kelley created

495d966 repl: Pluck project off editor directly (#48808)

Click to expand commit body
Clean up code by pulling the project off the editor directly.

Repeat of https://github.com/zed-industries/zed/pull/48762 since
reversion happened in https://github.com/zed-industries/zed/pull/48776.

Release Notes:

- N/A

Kyle Kelley created

7390b44 git: Fix panic when folding ranges (#48809)

Click to expand commit body
Restore a call to `BlockMap::read` that went missing in #48747 

Release Notes:

- N/A

Cole Miller created

3b81feb devcontainer: Fix project search returning no results on single-CPU containers (#48798)

Click to expand commit body
Closes #47489

The search worker pool was sized as `num_cpus - 1`, which spawned zero
workers when a devcontainer exposed only 1 CPU. All search channels
closed immediately and the search yielded zero results, while file
finder and LSP symbols worked fine.

The fix ensures at least 1 worker is always spawned: `(num_cpus -
1).max(1)`. A `num_cpus` override on `TestDispatcher` and a new test
reproduce the bug with `server_cx.executor().set_num_cpus(1)`.

## Manual testing

Add a `.devcontainer/` directory to a new project with these files:

```
// docker-compose.yml
services:
  dev:
    image: debian:bookworm-slim
    cpuset: "0"
    volumes:
      - ..:/workspace:cached
    command: sleep infinity
```

```
// devcontainer.json
{
  "name": "zed-sandbox (1 CPU)",
  "dockerComposeFile": "docker-compose.yml",
  "service": "dev",
  "workspaceFolder": "/workspace"
}
```

Build zed and point it at the new project:

```
cargo run -p zed -- ~/Repos/zed-sandbox-project
```

Open the built-in terminal, confirm `nproc` prints `1`.

Finally, run a project search (`Cmd+Shift+F`) and search for contents
that exist in it.

Results should appear 🎉 

Release Notes:

- Fixed project search returning no results in devcontainers with a
single visible CPU.

Oliver Azevedo Barnes created

9120c96 git_ui: Dismiss modal when viewing stash (#48491)

Click to expand commit body
Ensure that `git_ui::stash_picker::StashList.handle_show_toast` emits a
`DismissEvent` so that, when the user confirms they wish to view a stash
entry, the modal is actually dismissed and does not block the user's
view.

Release Notes:

- Fixed issue where viewing a stash entry would not dismiss the modal

Dino created

f0287d6 ep: Compress EP requests (#48793)

Click to expand commit body
Benchmark results on 3,000 captured requests:

| Scenario          | Mean   | Savings | p95    | Savings |
|:------------------|-------:|--------:|-------:|--------:|
| Uncompressed      | 12,275 |       — | 35,896 |       — |
| zstd (no dict)    |  2,784 |  77.3%  |  7,193 |  80.0%  |
| zstd + global dict|  2,544 |  79.3%  |  6,862 |  80.9%  |
| brotli (no dict)  |  2,650 |  78.4%  |  6,857 |  80.9%  |

A trained zstd dictionary adds only 2% over plain zstd, which is not
worth added complexity.

Brotli compresses comparably but is 4 times slower.

Release Notes:

- N/A

Oleksiy Syvokon created

8582ca6 git: Fix a panic in `spacer_blocks` (#48753)

Click to expand commit body
Closes ZED-4X5

Release Notes:

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

Cole Miller created

165b404 Revert "New multi workspace (#47795)" (#48776)

Click to expand commit body
Preparing this just in case.

Release Notes:

- N/A

Finn Evers created

bf2171d project_panel: Improve file/folder creation behavior in folded paths (#46750)

Click to expand commit body
Closes #45550  

This fix, adds a new field to `EditState` to track and temporarily
unfold the given directory when creating files or directories in
collapsed paths.

Release Notes:

- Fixed the file and folder creation input appearing in the wrong
location when creating inside a collapsed folder path..

Recording:


https://github.com/user-attachments/assets/15e48863-26b9-4dc9-888a-b31fb3208d98

---------

Co-authored-by: Smit Barmase <heysmitbarmase@gmail.com>

André Eriksson and Smit Barmase created

a41bec8 agent_ui: Insert images at cursor position (#48779)

Click to expand commit body
With #47768, all image pills automatically got snapped to the end of the
prompt message. This behavior is unexpected as other pills (`@symbol`,
`@thread` et al) respect the cursor position.

Closes #48731.

- [ ] Tests or screenshots needed?
- [x] Code Reviewed
- [x] Manual QA

Release Notes:

- Insert images at cursor position in the Agent Panel

Kunall Banerjee created

e0a2561 Add format-on-save support to streaming edit file tool (#48663)

Click to expand commit body
When saving after a streaming edit, check if format-on-save is enabled
for the buffer's language and run formatting before saving.

(No release notes because we aren't using the streaming edit tool yet.)

Release Notes:

- N/A

Richard Feldman created

415b558 Extract shell_command_parser into shared crate (#48660)

Click to expand commit body
Move shell command parsing logic (`extract_commands` and supporting
code) from the agent crate into a new `shell_command_parser` crate so it
can be reused by `agent_servers` for ACP permission checking.

Release Notes:

- N/A

Richard Feldman created

a27304b agent_ui: Refine thinking effort selector (#48790)

Click to expand commit body
This PR adds some design refinements to the thinking effort selector (to
be generally rolled out soon):
- Improved split button UI styles and consistency with other dropdowns
in the message editor
- Stopped rendering the effort selector if thinking is turned off
- Added a keybinding to trigger the effort menu
- Added a keybinding to cycle through effort options

<img width="500" height="380" alt="Screenshot 2026-02-09 at 10  18@2x"
src="https://github.com/user-attachments/assets/48d5b65c-7256-4ceb-aab2-35869f8fbf4a"
/>

---

- [x] Code Reviewed
- [x] Manual QA

Release Notes:

- N/A

Danilo Leal created

44364eb extension_host: Add DAP methods dispatch for v0.8.0 (#48777)

Click to expand commit body
## Summary

When the v0.8.0 extension API was forked in #44025, the five DAP
dispatcher methods in `wit.rs` were not updated to handle
`Extension::V0_8_0`. Because `V0_8_0` is listed before `V0_6_0` in the
enum, the wildcard `_ =>` catch-all fires first, causing all DAP calls
to bail with `"not available prior to v0.6.0"` for any extension
targeting the v0.8.0 API.

The DAP WIT interface is identical between v0.6.0 and v0.8.0, so the
handler code is the same — this just adds the missing match arms for:

- `call_get_dap_binary`
- `call_dap_request_kind`
- `call_dap_config_to_scenario`
- `call_dap_locator_create_scenario`
- `call_run_dap_locator`

This follows the same pattern used by every other method in the
`Extension` impl block, which already handles both `V0_8_0` and
`V0_6_0`.

## Test plan

- Verified that an extension targeting `zed_extension_api` v0.8.0 with
DAP support can successfully start a debug session (previously failed
with `"dap_request_kind not available prior to v0.6.0"`)

Release Notes:

- Fixed DAP (Debug Adapter Protocol) methods failing for extensions
targeting the v0.8.0 extension API.

Brad Fullwood created

916b132 Fix cargo package metadata (#48778)

Click to expand commit body
Follow-up to
https://github.com/zed-industries/zed/pull/48525/changes#diff-315ed179e69e42c0a098166a7faa7899838376c2649c84fa8cb66643f3813a45
which changed this

Release Notes:

- N/A

Finn Evers created

404cb3e agent: Remove duplicate `line_hint` assignment in `StreamingFuzzyMatcher::push` (#48317)

Click to expand commit body
Release Notes:

- N/A

---------

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

Albab Hasan and MrSubidubi created

3d88c70 title_bar: Fix `ToggleProjects` panic (#48775)

Click to expand commit body
Another follow-up to the multi workspace PR

- [X] Code Reviewed
- [X] Manual QA

Release Notes:

- N/A

Finn Evers created

97835f9 agent_ui: Fix panic when resizing panel (#48772)

Click to expand commit body
- [X] Code Reviewed
- [X] Manual QA

Release Notes:

- N/A

Finn Evers created