Commit Graph
31406 Commits
Author SHA1 Message Date
Danilo Leal f1cfd4fff3 agent_ui: Make stopping a running terminal cancel thread generation (#46663)
This makes stopping a terminal tool call in the agent panel also cancel
the thread generation:


https://github.com/user-attachments/assets/702ba078-53a8-4816-80f3-b6215e764365

Release Notes:

- Agent: Made the act of stopping a terminal tool call in the agent
panel also cancel the thread generation.
2026-01-13 11:43:45 +00:00
Max Brunsfeld e024c4de03 Fix a missing newline in the zeta prompt (#46677)
Release Notes:

- N/A
2026-01-12 23:27:06 -08:00
Max Malkin add7c0f346 terminal_view: Fix terminal opening in / when no project is open (#46582)
Closes #46574

The `default_working_directory()` function in
`crates/terminal_view/src/terminal_view.rs:1585` returned `None` when no
project directory was available. The code comment (now removed)
incorrectly claimed "None implies `~` on whichever machine we end up
on". However, when `None` is passed to `alacritty_terminal`, it uses the
process CWD, not the home directory. On macOS when Zed is launched from
a .`app` bundle, the CWD is `/`.
    
Added a fallback at the end of` default_working_directory()` that
explicitly returns the home directory when no project directory is
found: `directory.or_else(dirs::home_dir)`

  This ensures:
  1. `CurrentProjectDirectory` with no project open → home directory
  2. `FirstProjectDirectory `with no project open → home directory
3. `AlwaysHome `→ home directory (explicitly, not relying on shell
behavior)
  4. Always `{ directory }` with invalid directory → home directory



Release Notes:
- Fixed terminal opening in `/` instead of home directory when no
project is open.
2026-01-13 07:07:04 +00:00
Martin Pool 628ef804bc Fix Failed to load environment variables error message after self-update on Linux (#46367)
Closes #46365

The behavior I'm trying to handle here is documented in
https://man7.org/linux/man-pages/man5/proc_pid_exe.5.html.

[@merlinz01

](https://github.com/zed-industries/zed/issues/46365#issuecomment-3723996684)
points to some other alternatives but they don't seem necessary or
justified here.

# Testing

I've manually replaced the binary of a process running this build, to
simulate an update, and then opened a new tree and I don't see the error
message.

I don't know if there's a reasonable way to unit-test this? Let me know.
It seems like it would require using something like rusty-fork to spawn
a specific binary for the test, which I don't think I see already in the
Zed tree and perhaps it would be overkill to add just for this?


Release Notes:

- Fixed "Failed to load environment variables" after applying an update
2026-01-13 07:56:02 +01:00
Michael Benfield 95c8fb1e1a agent_ui: Remove Keep/Reject only with feature flag (#46656)
Release Notes:

- N/A
2026-01-12 20:39:51 -08:00
Max Brunsfeld dc11d6aaa5 Avoid expensive re-computation of sticky header lines (#46653)
Fixes a performance regression introduced in
https://github.com/zed-industries/zed/pull/45377

Release Notes:

- Fixed a performance regression that caused lag in large documents
2026-01-12 16:38:13 -08:00
Finn Evers 4d46d36590 ollama: Save API URL and key upon confirmation (#46665)
Closes #46626

Release Notes:

- Improved the settings configuration page for Ollama to store the
current URL value if changed when clicking on "Connect"
2026-01-13 00:25:42 +00:00
Agus ZubiagaandMax Brunsfeld 69497497a2 ep: Use FIM-like prompt for zeta2 (#46657)
Release Notes:

- N/A

---------

Co-authored-by: Max Brunsfeld <maxbrunsfeld@gmail.com>
2026-01-13 00:16:24 +00:00
Finn Evers 4b289cba31 editor: Fix regression with folds and relative counting (#46658)
Closes #46516

Release Notes:

- Fixed a regression with relative line numbering that would occur with
folds present (preview only)
2026-01-13 00:58:31 +01:00
Conrad Irwin cb333a3938 Revert scheduler update (#46659)
Reverts the new scheduler; it's destroyed our CI

Release Notes:

- N/A
2026-01-12 16:46:15 -07:00
Jakub Konka 5596e86a95 git: Annotate more functions and blocks with tracing spans (#46642)
Release Notes:

- N/A
2026-01-12 21:56:08 +00:00
Ben BrandtandZed Zippy 0c7f06e70d agent: Move thread history access behind AgentConnection trait (#46631)
This should move almost all access of the threadstore behind the trait,
which unlocks external agents supplying the list

Release Notes:

- N/A

---------

Co-authored-by: Zed Zippy <234243425+zed-zippy[bot]@users.noreply.github.com>
2026-01-12 21:42:12 +00:00
Finn Evers a9b30f9d06 gpui: Remove unused flume dependency (#46647)
Only the scheduler crate uses this currently, so we can remove this from
the long list of GPUI dependencies.

Release Notes:

- N/A
2026-01-12 20:19:13 +00:00
Shuhei KadowakiandMatt Miller f5f6e35370 project_symbols: Display line numbers in symbol picker (#46507)
Some language servers return local symbols in `workspace/symbol`
responses, and languages like Julia can have multiple overloads for the
same generic function name. In these cases, symbols may appear identical
in the symbol picker, making it hard to distinguish between them. Adding
line numbers helps users identify the correct symbol.

In the future, we may also want to consider using `containerName` from
the LSP response for additional context.

> Before
<img width="671" height="573" alt="Screenshot 2026-01-10 at 19 21 08"
src="https://github.com/user-attachments/assets/838c3eb7-0e1d-46ba-9076-286e971afc2c"
/>

> After
<img width="671" height="573" alt="Screenshot 2026-01-10 at 19 43 19"
src="https://github.com/user-attachments/assets/31979d79-0169-4202-afc2-24fc7492dd47"
/>


Closes #ISSUE

Release Notes:

- Added line numbers to the project symbols picker to help distinguish
between symbols with the same name

---------

Co-authored-by: Matt Miller <mattrx@gmail.com>
2026-01-12 18:33:39 +00:00
Richard Feldman 24b32207c2 Add diff review button in git diff views (#46326)
Adds a very simple diff review button behind a feature flag, which
appears in the gutter of people who have the flag (currently just me;
it's not even enabled for staff, since it doesn't do anything yet).

Mostly this PR just adds the feature flag, the button, and tests.

Release Notes:

- N/A
2026-01-12 13:09:47 -05:00
Richard FeldmanandAmp ccfbbf6513 Subagents PR 2: Thread spawning + execution (#46187)
This PR implements the behind-the-scenes subagent execution logic:

### Core subagent execution
- Add `Thread::new_subagent()` constructor for creating subagent threads
- Implement `SubagentTool::run()` to spawn and manage subagent lifecycle
- Add `SubagentContext` for parent-child thread relationship
- Implement `submit_user_message()`, `interrupt_for_summary()`,
`request_final_summary()`
- Add timeout support and context-low detection (25% threshold)
- Propagate cancellation from parent to child threads

### Thread management
- Add `MAX_SUBAGENT_DEPTH` (4) and `MAX_PARALLEL_SUBAGENTS` (8) limits
- Add `register/unregister_running_subagent()` for tracking
- Add `restrict_tools()` for allowed_tools filtering
- Add `is_subagent()`, `depth()`, `is_turn_complete()` accessors

### Thread changes
- Add `ToolCallContent::SubagentThread` variant
- Add `ToolCallUpdateSubagentThread` for UI updates
- Add `tool_name` field for subagent detection
- Add `is_subagent()` method on `ToolCall`
- Add image support in `ContentBlock`

Release Notes:

- N/A

---------

Co-authored-by: Amp <amp@ampcode.com>
2026-01-12 18:07:41 +00:00
Antonio Scandurra b7791f569e Fix panic when using RealtimeAudio priority (#46635)
The scheduler integration (#44810) removed the special handling for
realtime audio tasks that spawn them on a dedicated thread. This caused
a panic in the Mac dispatcher when RealtimeAudio priority was passed to
the regular dispatch path.

This restores the original behavior: RealtimeAudio tasks are spawned on
a dedicated thread via dispatcher.spawn_realtime(), using a bounded
channel to send runnables to it.

Release Notes:

- N/A
2026-01-12 17:55:51 +00:00
3d1ad4ddd7 ep: Use non-chat completions for /predict/raw (#46633)
Release Notes:

- N/A

---------

Co-authored-by: Max Brunsfeld <maxbrunsfeld@gmail.com>
Co-authored-by: Oleksiy Syvokon <oleksiy.syvokon@gmail.com>
2026-01-12 17:42:50 +00:00
Michael Benfield e97e4a6df0 agent_ui: Remove Keep/Reject buttons (#46456)
Release Notes:

- N/A
2026-01-12 09:09:24 -08:00
Richard FeldmanandAmp 54c942675c Add remaining tool permissions (#46164)
Add permission checking to the remaining 7 tools that require granular
permissions:
- `edit_file`: Checks path against permission rules  
- `delete_path`: Checks path against permission rules
- `move_path`: Checks both source and destination paths
- `create_directory`: Checks path against permission rules
- `save_file`: Checks all paths, denies if any are blocked
- `fetch`: Checks URL against permission rules
- `web_search`: Checks query against permission rules

Each tool follows the pattern established in PR #46155 (terminal tool):
- `Allow` = proceed without prompting
- `Deny` = return error immediately
- `Confirm` = prompt user for confirmation

The deny > confirm > allow precedence is enforced by the
`decide_permission_from_settings()` function.

Release Notes:

- N/A

---------

Co-authored-by: Amp <amp@ampcode.com>
2026-01-12 11:08:06 -05:00
Yuantian Ding b993e75cfc Add structured outline for Markdown (#45643)
Just make outline of markdown to be structured:

<img width="282" height="144" alt="image"
src="https://github.com/user-attachments/assets/6c7e5d5f-ae09-47a9-965a-6f9f9b731ce6"
/>

Release Notes:

- Added structured outline for Markdown.
- Also fixed the breadcrumb display in Issue
[#45663](https://github.com/zed-industries/zed/issues/45663).
2026-01-12 11:06:11 -05:00
Danilo Leal 57c5d00afb git_ui: Unify branch, worktree, and stash pickers in one (#46621)
This PR creates a unified picker for all the Git-related pickers:
branch, worktree and stash. The main motivation for this is to bring
awareness and ease of access for the worktree and stash pickers that
were previously (and arguably) hidden amidst the sea of commands in the
command palette. As worktrees in particular become more relevant for
AI-related flows, having an easier way to reach for its picker will be
beneficial.

Note that the actions/commands remain the same; you can still look for
`git: worktree` or `git: view stash`. The difference is that these
actions will take you to the unified picker with the correct
corresponding active view.


https://github.com/user-attachments/assets/99d1cd6f-a19d-47d3-9bca-d7257e7ed5b8

Release Notes:

- Git: Unify the branch, worktree, and stash pickers into one, making it
easier to find and access them from one another.
2026-01-12 12:48:57 -03:00
Kirill Bulatov 657d2f3d86 Fix worktree trust not applied on window reuse (#46623)
New workspace/window creates a different `WeakEntity<WorktreeStore>` for
the same path, which was not considered before.

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

Release Notes:

- Fixed worktree trust not applied in window reuse
2026-01-12 15:05:48 +00:00
Oleksiy SyvokonandAgus Zubiaga 47dc49254f ep: Fix applying patch to text without a trailing newline (#46471)
Release Notes:

- N/A

Co-authored-by: Agus Zubiaga <agus@zed.dev>
2026-01-12 14:59:25 +00:00
Lukas WirthandJohn Tur 482a78318d gpui(windows): Force a paint message when running out foreground budget (#46609)
Release Notes:

- Fixed zed no longer rendering on windows in a timely manner if it gets
overloaded with foreground work

Co-authored-by: John Tur <john-tur@outlook.com>
2026-01-12 14:17:21 +00:00
Piotr Osiewicz 189a0fbd3f copilot: Fix double lease panic when signing out (#46619)
Extracted out of #46618 as I wanna fast-track it to Preview.

Release Notes:

- Fixed a crash that occured when signing out of Copilot.
2026-01-12 14:09:16 +00:00
Antonio Scandurra 9a70ffdb08 Delete accidentally committed scheduler plan (#46601)
Release Notes:

- N/A
2026-01-12 13:33:29 +01:00
Kirill Bulatov 26d5cd52ac Properly notify all language server worktree trust listeners (#46613)
Closes https://github.com/zed-industries/zed/issues/46590


https://github.com/user-attachments/assets/8464a3b6-9258-4d15-9168-56178bf46437

`use smol::channel::{Receiver, Sender};` do not propagate the value
change to all receivers, hence only one language server received the
"worktree trusted" message.
The fix uses `watch` kind of channels instead, and cleans up its state
more eager to rely on the sender drop as another form of notification.

Release Notes:

- Fixed groups of language servers not starting after worktree trust
approval
2026-01-12 12:09:43 +00:00
Finn Evers 1896a93d94 editor: Remove unnecessary cloning of selections (#46598)
Stumbled across this upon a PR review - `unfold_ranges` takes a slice of
Ranges and already clones the ranges itself, so we do not need to clone
the selections prior to passing these.

Release Notes:

- N/A
2026-01-12 13:04:37 +01:00
Lukas Wirth bd09d1524c project_symbols: Support rust-analyzer path symbol search (#46511)
cc https://github.com/rust-lang/rust-analyzer/pull/21415

Release Notes:

- N/A *or* Added/Fixed/Improved ...
2026-01-12 11:41:13 +00:00
Kirill Bulatov 0919f774c5 Always show worktree trust, even if other title bar items are hidden with settings (#46606)
Closes https://github.com/zed-industries/zed/discussions/46595

Release Notes:

- Fixed "show project items" keeping worktree trust title bar element
hidden
2026-01-12 12:46:39 +02:00
koh-sh 8f166afe79 terminal: Fix IME position when cursor is hidden (#46592)
Closes https://github.com/zed-industries/zed/issues/45553

## Summary

When using applications that hide the terminal cursor (e.g., via ANSI
escape sequence `\e[?25l`), the IME candidate window appeared at the
bottom-left of the screen, and the composition text was not displayed at
all. This affects tools like Claude Code that hide the cursor during
operation.

The root cause was that cursor position calculation was skipped when the
cursor shape was `Hidden`. This fix separates cursor visibility from IME
position calculation by always computing cursor bounds for IME
positioning.

## Movies

### Zed 0.218.6


https://github.com/user-attachments/assets/a66d569a-178d-4bca-a577-fcc65e9fd2c4

### With this fix


https://github.com/user-attachments/assets/456323d1-6c18-45ea-88e8-fb5375c00f98

Release Notes:

- Fixed IME candidate window and composition text position in terminal
when cursor is hidden
2026-01-12 09:59:51 +00:00
Finn Evers fdc76ffb18 terminal_view: Remove intermediate vec allocation (#46600)
`grid_view` takes an iterator of `IndexedCell`s, so we don't have to
collect this into a vec prior to passing this.

Release Notes:

- N/A
2026-01-12 09:40:49 +00:00
ᴀᴍᴛᴏᴀᴇʀ f9bbea4deb terminal: Avoid overlapping IME marked text with terminal content (#46227)
Closes #33157

|Before|After|
|--|--|
|<img width="922" height="158" alt="CleanShot 2026-01-07 at 12 18 21@2x"
src="https://github.com/user-attachments/assets/2ba6020f-5159-4ed8-aa2e-374ea3ea4cf5"
/>|<img width="908" height="200" alt="CleanShot 2026-01-07 at 12 19
02@2x"
src="https://github.com/user-attachments/assets/ec946c4e-3220-4944-b34a-1d8d5dcc7ae2"
/>|

Many other terminals seem to do it this way as well.

|Ghostty|Windows Terminal| Visual Studio Code|
|--|--|--|
|<img width="930" height="186" alt="CleanShot 2026-01-07 at 12 23 30@2x"
src="https://github.com/user-attachments/assets/837189aa-2f4c-4a48-b060-f3576b8777e0"
/>|<img width="1414" height="128" alt="c89e03d2d92869d5ec1b8a05ade84df0"
src="https://github.com/user-attachments/assets/8b6d69fb-b34d-4ccd-8a3a-9332487cd427"
/>|<img width="978" height="180" alt="CleanShot 2026-01-07 at 12 27
01@2x"
src="https://github.com/user-attachments/assets/dbc0acc7-3c16-499f-ac32-35e3c0cd0d97"
/>|

Release Notes:

- Fixed UI overlap between IME marked text and terminal content.
2026-01-11 23:35:32 -05:00
Kirill Bulatov 6ebb819b06 Skip worktree trust checks on Zed invisible worktrees (#46563)
Follow-up of https://github.com/zed-industries/zed/pull/46256

Release Notes:

- Fixed worktree trust pop-up appearing on a keymap editor invication
2026-01-11 16:06:59 +00:00
Oscar Vargas Torres dac377f05a Improve snippet parse error context (#46277)
Release Notes:

- N/A


Description:
E.g. Instead of saying:
2026-01-07T09:08:42-06:00 ERROR [crates/snippet_provider/src/lib.rs:46]
failed to parse snippet
  Caused by:
      expected an integer

Now the logs give more valuable information like:
2026-01-07T10:47:39-06:00 ERROR [crates/snippet_provider/src/lib.rs:48]
invalid snippet in /Users/oscarvarto/Library/Application
Support/Zed/extensions/installed/django-snippets/./snippets/python.json
(re_path)
2026-01-11 15:08:34 +02:00
Ruben Fricke f8e18c3767 editor: Fix DeleteToPreviousSubwordStart and DeleteToNextSubwordEnd interaction with newlines (#46235)
Closes #40110

  Changes:
- `DeleteToPreviousSubwordStart` now deletes `\n` separately from
preceding subwords and whitespace.
- `DeleteToNextSubwordEnd` now deletes `\n` and any following whitespace
separately from subsequent subwords.
- Added an `ignore_newlines` flag to both actions to optionally retain
the old behavior.

These modifications align the subword commands with their word
counterparts and with other popular editors like VSCode and Sublime.

Related to: https://github.com/zed-industries/zed/pull/16848

  Release Notes:

- Improved `DeleteToPreviousSubwordStart` and `DeleteToNextSubwordEnd`
interactions around newlines. You can opt-in into the previous behavior
by adding `{"ignore_newlines": true}` to either action's binds in your
keymap.

  ---

This is my first contribution to Zed! If anything should be done
differently, please let me know. Happy to learn :)
2026-01-11 08:39:42 +00:00
Martin Pool 7f1b02a35d Use let chain to avoid clippy::unnecessary_unwrap (#46409)
No bug, just shows up running the tests on `clippy 0.1.92 (ded5c06cf2
2025-12-08)`

Release Notes:

- N/A
2026-01-11 10:20:08 +02:00
John Tur 6884f539f4 Fix Windows IME composition string being displayed incorrectly (#46545)
Previously, a new composition string was processed before a new
composition result. Thus, in the case that a keystroke creates a new
composition result and composition string, the processing of the new
result would overwrite the new string, even though they should both be
displayed. Processing them in the reverse order fixes this issue.
 
Fixes #42201

Additionally: while fixing this issue, I discovered that the Japanese
IME sometimes moves the cursor far away from the inserted text. WPF
works around this issue by only respecting the IME's requested cursor
position if it's adjacent to uncommitted text. So, we copy this
workaround.

Release Notes:

- N/A
2026-01-11 05:10:51 +00:00
Richard Feldman 622f29aaa9 Fix cancellation regression: make edit_file_tool handle cancellation (#46527)
PR #46306 changed cancellation to wait for tools to complete before
returning. This was correct behavior - it allows tools like terminal to
capture their output on cancellation. The real issue was that many tools
didn't check for cancellation, so they would continue running until they
finished.

## The Problem

When the user pressed Escape to cancel during a tool operation, tools
would continue running because they never checked for the cancellation
signal. The thread correctly waited for tools to complete (so terminal
could capture output), but tools like edit_file, grep, fetch, etc. would
just keep going.

## The Fix

Add cancellation handling to all tools using the same pattern as
`terminal_tool`: use `select!` to race between the tool's main work and
`event_stream.cancelled_by_user()`. When cancelled, tools break out of
their loops or return early.

## All Tools Now Cancellation-Aware

| Tool | Change |
|------|--------|
| `edit_file_tool` | Checks cancellation in edit event processing loop |
| `terminal_tool` | Already handled cancellation |
| `grep_tool` | Checks cancellation in search result iteration loop |
| `fetch_tool` | Checks cancellation during HTTP fetch |
| `web_search_tool` | Checks cancellation during web search |
| `find_path_tool` | Checks cancellation during path search |
| `read_file_tool` | Checks cancellation during buffer open |
| `copy_path_tool` | Checks cancellation during file copy |
| `move_path_tool` | Checks cancellation during file move/rename |
| `delete_path_tool` | Checks cancellation during delete operation |
| `create_directory_tool` | Checks cancellation during directory
creation |
| `save_file_tool` | Checks cancellation during buffer open and save |
| `restore_file_from_disk_tool` | Checks cancellation during buffer open
and reload |
| `open_tool` | Checks cancellation during authorization |
| `diagnostics_tool` | Checks cancellation during buffer open |
| `ContextServerTool` (MCP) | Checks cancellation during external server
calls |

**Synchronous tools (no async work, return immediately):**
- `list_directory_tool` - Reads worktree snapshot synchronously
- `now_tool` - Returns current time immediately
- `thinking_tool` - Returns immediately

## MCP Tools Automatically Handled

MCP tools (user-defined tools via context servers) are now automatically
cancellation-aware without any user action. The `ContextServerTool`
wrapper races the external server request against
`event_stream.cancelled_by_user()`.

## Testing

- Added `CancellationAwareTool` test helper that mirrors the
cancellation pattern
- Updated `test_cancellation_aware_tool_responds_to_cancellation` to
properly await the cancel task and verify the tool detected cancellation

Release Notes:

- Fixed a regression where pressing Escape wouldn't immediately cancel
in-progress tool operations
2026-01-11 00:30:25 +00:00
Marshall Bowers 87df6ba0b7 open_ai: Use proper type for Responses API input (#46526)
This PR makes it so we use a proper type for the Responses API `input`
rather than a `serde_json::Value`.

It should have never used `serde_json::Value` to begin with.

Release Notes:

- N/A
2026-01-10 17:40:20 +00:00
226741cf9d Integrate scheduler crate into GPUI (#44810)
## Motivation

This PR unifies the async execution infrastructure between GPUI and
other components that depend on the `scheduler` crate (such as our cloud
codebase). By having a scheduler that lives independently of GPUI, we
can enable deterministic testing across the entire stack - testing GPUI
applications alongside cloud services with a single, unified scheduler.

## Summary

This PR completes the integration of the `scheduler` crate into GPUI,
unifying async execution and enabling deterministic testing of GPUI
combined with other components that depend on the scheduler crate.

## Key Changes

### Scheduler Integration (Phases 1-5, previously completed)
- `TestDispatcher` now delegates to `TestScheduler` for timing, clock,
RNG, and task scheduling
- `PlatformScheduler` implements the `Scheduler` trait for production
use
- GPUI executors wrap scheduler executors, selecting `TestScheduler` or
`PlatformScheduler` based on environment
- Unified blocking logic via `Scheduler::block()`

### Dead Code Cleanup
- Deleted orphaned `crates/gpui/src/platform/platform_scheduler.rs`
(older incompatible version)

## Intentional Removals

### `spawn_labeled` and `deprioritize` removed
The `TaskLabel` system (`spawn_labeled`, `deprioritize`) was removed
during this integration. It was only used in a few places for test
ordering control.

cc @maxbrunsfeld @as-cii - The new priority-weighted scheduling in
`TestScheduler` provides similar functionality through
`Priority::High/Medium/Low`. If `deprioritize` is important for specific
test scenarios, we could add it back to the scheduler crate. Let me know
if this is blocking anything.

### `start_waiting` / `finish_waiting` debug methods removed
Replaced by `TracingWaker` in `TestScheduler` - run tests with
`PENDING_TRACES=1` to see backtraces of pending futures when parking is
forbidden.

### Realtime Priority removed
The realtime priority feature was unused in the codebase. I'd prefer to
reintroduce it when we have an actual use case, as the implementation
(bounded channel with capacity 1) could potentially block the main
thread. Having a real use case will help us validate the design.

## Testing
- All GPUI tests pass
- All scheduler tests pass
- Clippy clean

## Architecture

```
┌─────────────────────────────────────────────────────────────┐
│                          GPUI                                │
│  ┌──────────────────────┐    ┌────────────────────────────┐ │
│  │ gpui::Background-    │    │ gpui::ForegroundExecutor   │ │
│  │ Executor             │    │  - wraps scheduler::       │ │
│  │  - scheduler: Arc<   │    │    ForegroundExecutor      │ │
│  │    dyn Scheduler>    │    └────────────┬───────────────┘ │
│  └──────────┬───────────┘                 │                  │
│             │                             │                  │
│             └──────────┬──────────────────┘                  │
│                        ▼                                     │
│            ┌───────────────────────┐                         │
│            │  Arc<dyn Scheduler>   │                         │
│            └───────────┬───────────┘                         │
│         ┌──────────────┴──────────────┐                      │
│         ▼                             ▼                      │
│  ┌──────────────────┐      ┌────────────────────┐           │
│  │ PlatformScheduler│      │   TestScheduler    │           │
│  │   (production)   │      │ (deterministic)    │           │
│  └──────────────────┘      └────────────────────┘           │
└─────────────────────────────────────────────────────────────┘
```

Release Notes:

- N/A

---------

Co-authored-by: Antonio Scandurra <me@as-cii.com>
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Co-authored-by: Yara <git@yara.blue>
Co-authored-by: Zed Zippy <234243425+zed-zippy[bot]@users.noreply.github.com>
2026-01-10 15:41:49 +01:00
Danilo Leal 810f0bb7d2 Add right-click menu action to copy path in the breadcrumb button (#46483)
This PR adds a right-click action to the breadcrumb button to copy the
path, when there is some (i.e., untitled buffers and others won't have
this feature).


https://github.com/user-attachments/assets/94ece12c-3071-4a07-a04d-8d89e10fd59e

Release Notes:

- Added the ability to right-click the breadcrumb button when it's a
file path and copy the path.
2026-01-10 09:38:15 -03:00
Brandt WearyandHector 7f5f700354 Fix fold persistence corruption from external file changes (#46011)
## Summary

Fixes #33633 - folds corrupting after external file modifications.

The existing fold persistence stored raw byte offsets, which become
stale when files are modified externally (git operations, other editors,
sync tools). This caused folds to capture wrong content on restore -
users reported "wrong lines getting folded" with systematic offsets.

**Solution: Content fingerprinting**
- Store 32-byte content samples at fold boundaries
- On restore, validate fingerprints match; if not, search buffer for new
positions
- Handles edge cases: short folds (< 32 bytes), duplicate content,
boundary positioning

**Bonus fix: Ungraceful exit survival**
- Entity IDs change between sessions, but workspace cleanup's CASCADE
DELETE was wiping folds before new editors could save
- Now migrates folds to new entity_id immediately after restore

## Test plan

- [x] Unit test for fingerprint storage/retrieval
(`test_save_and_get_editor_folds_with_fingerprints`)
- [x] Manual test: fold sections, add content at file start externally,
reopen → folds restore at correct positions
- [x] Manual test: fold sections, Ctrl+C, reopen → folds survive
- [x] Existing fold tests pass (`cargo test -p editor`)

## Release Notes

- N/A

---------

Co-authored-by: Hector <hector@cyberneticwilderness.com>
2026-01-10 08:36:33 +00:00
Mikayla Maki 54d9dc4fcf Simplify networking tests even more (#46489)
Release Notes:

- N/A
2026-01-10 00:30:33 +00:00
Marshall Bowers 1b767295a3 Revert "lsp: Do not reuse disk-based diagnostics (#46437)" (#46487)
This reverts commit 577fe1c804.

This commit was causing issue with diagnostics:
https://zed-industries.slack.com/archives/C07NUKHLVUZ/p1767999287421729

Release Notes:

- Reverted #46437
2026-01-09 23:21:48 +00:00
Ben Brandt 3c486c1167 acp: Add keybindings for session config option categories (#46484)
Adds the normal mode/model keybindings for the first config option of a
given category

Release Notes:

- N/A
2026-01-09 23:04:31 +00:00
Marshall Bowers 48a2632e7a language_models: Add support for using OpenAI Responses API through Zed provider (#46482)
This PR adds support for using the OpenAI Responses API through the Zed
provider.

This is gated behind the `open-ai-responses-api` feature flag.

Part of CLO-34.

Release Notes:

- N/A
2026-01-09 22:10:11 +00:00
Max Brunsfeld 22104c1c92 Prepopulate empty patch in example capture (#46480)
This makes it a smoother workflow to capture an edit prediction example
from Zed and then write what you'd expect the patch to be.

Release Notes:

- N/A
2026-01-09 13:58:07 -08:00
Conrad Irwin 1215c2291b Fix vim mouse selections (#45177)
Closes #27720

Release Notes:

- vim: Fixed selection drifting slowly to the right when selecting
chaotically with the mouse.
2026-01-09 20:34:45 +00:00