578911d
terminal: Avoid overlapping IME marked text with terminal content (#46227)
Click to expand commit body
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.
Release Notes:
- N/A
TL;DR: There was a closed issue 7 hours ago that changed ashpd version,
it needed another bump.
A dependency of gpui called ashpd has a fix in v0.12.1, GPUI has the
0.12 version. After forking zed and patching the gpui source to be mine
with 0.12.1 it was able to use GPUI as a dependency and compile the
project. The error I was getting and the recomendation to do this PR can
be seen in this [closed issue from
ashpd](https://github.com/bilelmoussaoui/ashpd/issues/325).
After changing the dependecy I hit cargo check:
```bash
Finished `dev` profile [unoptimized + debuginfo] target(s) in 4m 24s
```
And cargo run:
```bash
Compiling zed v0.220.0 (/home/user/git/xaviduds/zed/crates/zed)
Finished `dev` profile [unoptimized + debuginfo] target(s) in 9m 44s
Running `target/debug/zed`
```
Zed compiled and opened:
<img width="1920" height="1042" alt="image"
src="https://github.com/user-attachments/assets/8bc524d1-bc4a-43f8-9da4-b02faecca30c"
/>
Eduardo de Melo Xavier
created
a87fed2
Skip worktree trust checks on Zed invisible worktrees (#46563)
Click to expand commit body
Follow-up of https://github.com/zed-industries/zed/pull/46256
Release Notes:
- Fixed worktree trust pop-up appearing on a keymap editor invication
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)
Oscar Vargas Torres
created
5ba6258
licenses: Verify validity of the symlink files (#46444)
e0b8969
editor: Fix DeleteToPreviousSubwordStart and DeleteToNextSubwordEnd interaction with newlines (#46235)
Click to expand commit body
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 :)
Ruben Fricke
created
43c252c
Fix `gpui` Linux build failure due to ashpd/zbus incompatibility (#46543)
Click to expand commit body
`ashpd` 0.11 is incompatible with recent zbus/zvariant releases, causing
a compilation error in Linux. Bumping to 0.12 fixes it.
See: https://github.com/bilelmoussaoui/ashpd/issues/323
To reproduce:
```toml
[package]
name = "test-gpui"
version = "0.1.0"
edition = "2021"
[dependencies]
gpui = { git = "https://github.com/zed-industries/zed" }
```
```bash
...
Compiling ashpd v0.11.0
error[E0277]: the trait bound `AppID: Basic` is not satisfied
--> /home/neulus/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ashpd-0.11.0/src/documents/mod.rs:391:16
|
391 | self.0.call("Info", &(doc_id.into())).await
| ^^^^ unsatisfied trait bound
|
help: the trait `Basic` is not implemented for `AppID`
--> /home/neulus/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ashpd-0.11.0/src/app_id.rs:10:1
|
10 | pub struct AppID(String);
| ^^^^^^^^^^^^^^^^
= help: the following other types implement trait `Basic`:
&B
BusName<'_>
ErrorName<'_>
InterfaceName<'_>
MemberName<'_>
NonZero<i16>
NonZero<i32>
NonZero<i64>
and 35 others
= note: required for `HashMap<AppID, Vec<Permission>>` to implement `zbus::zvariant::Type`
= note: 1 redundant requirement hidden
= note: required for `(file_path::FilePath, HashMap<AppID, Vec<Permission>>)` to implement `zbus::zvariant::Type`
note: required by a bound in `proxy::Proxy::<'a>::call`
--> /home/neulus/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ashpd-0.11.0/src/proxy.rs:172:40
|
166 | pub(crate) async fn call<R>(
| ---- required by a bound in this associated function
...
172 | R: for<'de> Deserialize<'de> + Type,
| ^^^^ required by this bound in `Proxy::<'a>::call`
error[E0277]: the trait bound `DocumentID: Basic` is not satisfied
--> /home/neulus/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ashpd-0.11.0/src/documents/mod.rs:500:16
|
500 | self.0.call_versioned("GetHostPaths", &(doc_ids,), 5).await
| ^^^^^^^^^^^^^^ unsatisfied trait bound
|
help: the trait `Basic` is not implemented for `DocumentID`
--> /home/neulus/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ashpd-0.11.0/src/app_id.rs:98:1
|
98 | pub struct DocumentID(String);
| ^^^^^^^^^^^^^^^^^^^^^
= help: the following other types implement trait `Basic`:
&B
BusName<'_>
ErrorName<'_>
InterfaceName<'_>
MemberName<'_>
NonZero<i16>
NonZero<i32>
NonZero<i64>
and 35 others
= note: required for `HashMap<DocumentID, file_path::FilePath>` to implement `zbus::zvariant::Type`
note: required by a bound in `proxy::Proxy::<'a>::call_versioned`
--> /home/neulus/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ashpd-0.11.0/src/proxy.rs:195:40
|
188 | pub(crate) async fn call_versioned<R>(
| -------------- required by a bound in this associated function
...
195 | R: for<'de> Deserialize<'de> + Type,
| ^^^^ required by this bound in `Proxy::<'a>::call_versioned`
For more information about this error, try `rustc --explain E0277`.
error: could not compile `ashpd` (lib) due to 2 previous errors
```
Release Notes:
- N/A
Neulus
created
3f2c7c6
Use let chain to avoid `clippy::unnecessary_unwrap` (#46409)
Click to expand commit body
No bug, just shows up running the tests on `clippy 0.1.92 (ded5c06cf2
2025-12-08)`
Release Notes:
- N/A
Martin Pool
created
af6385a
Fix Windows IME composition string being displayed incorrectly (#46545)
Click to expand commit body
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
John Tur
created
ecc3928
Fix cancellation regression: make edit_file_tool handle cancellation (#46527)
Click to expand commit body
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
Richard Feldman
created
c6a38f2
open_ai: Use proper type for Responses API `input` (#46526)
Click to expand commit body
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
Marshall Bowers
created
73d9353
Integrate scheduler crate into GPUI (#44810)
Click to expand commit body
## 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>
Nathan Sobo
,
Antonio Scandurra
,
Claude Opus 4.5
,
Yara
, and
Zed Zippy
created
17dbe8d
Add right-click menu action to copy path in the breadcrumb button (#46483)
Click to expand commit body
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.
Danilo Leal
created
e04d044
Fix fold persistence corruption from external file changes (#46011)
Click to expand commit body
## 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>
Brandt Weary
and
Hector
created
93e3a39
Simplify networking tests even more (#46489)
Click to expand commit body
Release Notes:
- N/A
Mikayla Maki
created
f5c924c
Revert "lsp: Do not reuse disk-based diagnostics (#46437)" (#46487)
Click to expand commit body
This reverts commit dd43891521484dc25d520e3c1551d9d211a1f2fa.
This commit was causing issue with diagnostics:
https://zed-industries.slack.com/archives/C07NUKHLVUZ/p1767999287421729
Release Notes:
- Reverted #46437
Marshall Bowers
created
dffed22
acp: Add keybindings for session config option categories (#46484)
Click to expand commit body
Adds the normal mode/model keybindings for the first config option of a
given category
Release Notes:
- N/A
Ben Brandt
created
451bf25
language_models: Add support for using OpenAI Responses API through Zed provider (#46482)
Click to expand commit body
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
Marshall Bowers
created
613183b
acp: Update agent-client-protocol Rust SDK to v0.9.3 (#46481)
Click to expand commit body
Release Notes:
- N/A
Ben Brandt
created
0afe91f
Prepopulate empty patch in example capture (#46480)
Click to expand commit body
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
- **project search: Stream result buffers sooner in remote scenarios**
- **Fix remote server build**
Closes #ISSUE
Release Notes:
- Improved performance of project search in remote projects.
---------
Co-authored-by: Smit <smit@zed.dev>
Co-authored-by: Zed Zippy <234243425+zed-zippy[bot]@users.noreply.github.com>
Co-authored-by: Smit Barmase <heysmitbarmase@gmail.com>
Co-authored-by: Conrad <conrad@zed.dev>
Piotr Osiewicz
,
Smit
,
Zed Zippy
,
Smit Barmase
, and
Conrad
created
442c236
languages: Fix Python venv auto-activation for PowerShell 7 (#46465)
Click to expand commit body
Summary
This PR fixes an issue where Python virtual environments (`venv`, `uv`,
etc.) were not automatically activated when opening a terminal using
PowerShell 7.
Details
`ShellKind` distinguishes between the legacy Windows PowerShell
(`ShellKind::PowerShell`) and the newer PowerShell 7
(`ShellKind::Pwsh`). Previously, the logic in
`resolve_venv_activation_scripts` only checked for
`ShellKind::PowerShell`, causing `activate.ps1` resolution to fail for
`Pwsh` users.
This change adds `ShellKind::Pwsh` to the resolution list, mapping it to
`activate.ps1` just like the legacy PowerShell.
Release Notes:
- Fixed Python virtual environments not automatically activating in
PowerShell 7
Xin Zhao
created
1062e2c
vim: Add `use_match_quotes` setting for % motion, default is `true` (#42615)
Click to expand commit body
Add a `match_quotes` parameter to the `vim::Matching` action that
controls whether the `%` motion should treat quote characters (', ", `)
as matching pairs.
In Neovim, `%` only matches bracket pairs (([{}])), not quotes. Zed's
existing behavior includes quote matching, which some users prefer. To
preserve backwards compatibility while allowing users to opt into
Neovim's behavior, this PR:
1. Adds an optional `match_quotes` boolean parameter to the
`vim::Matching` action
2. Updates the default vim keymap to use ["vim::Matching", {
"match_quotes": true }], preserving Zed's current behavior
3. Users who prefer Neovim's behavior can rebind `%` in their keymap:
```
{
"context": "VimControl && !menu",
"bindings": {
"%": ["vim::Matching", { "match_quotes": false }]
}
}
```
When `match_quotes` is `false`, the `%` motion will skip over quote
characters and only match brackets/parentheses, matching Neovim's
default behavior.
Release Notes:
- vim: Added match_quotes parameter to the vim::Matching action to control
whether % matches quote characters
---------
Co-authored-by: dino <dinojoaocosta@gmail.com>
Hans
and
dino
created
a941577
agent: Split up Agent and Text Thread History (#46457)
Click to expand commit body
Scopes the history to the individual panes and paves the way for history
per external agent.
Release Notes:
- N/A
Ben Brandt
created
ddf70bc
Fix incorrect usages of `Zeta2FeatureFlag` (#46462)
The visual test infrastructure changes in #46324 accidentally switched
from `settings::init(cx)` to `SettingsStore::test(cx)`, which uses
Courier font instead of the real Zed fonts (IBM Plex Sans / Lilex).
This restores the correct font loading:
1. Load embedded fonts with `Assets.load_fonts(cx)`
2. Use `settings::init(cx)` to get the real default settings with proper
fonts
Release Notes:
- N/A
Richard Feldman
created
e6467fc
ep: Fix editable region for teacher models (#46459)
Click to expand commit body
Editable region was different for Zeta2 and Teacher, leading to "Edits
outside of editable region" errors.
Release Notes:
- N/A
Co-authored-by: Agus Zubiaga <agus@zed.dev>
Oleksiy Syvokon
and
Agus Zubiaga
created
5deb4aa
remote: Pass `-q` on ssh remotes when running one shot commands (#46458)
Click to expand commit body
This pollutes tasks and similar with a `connection closed` message
otherwise.
Release Notes:
- Fixed terminal tool for agents ending with `connection closed` on
remote hosts polluting context
Lukas Wirth
created
5f92b31
git: Fix a bug where BranchDiff shows incorrect diffs (#46433)
Click to expand commit body
This happens when a user's default branch has different remote and local
versions on their system. Because we would get a diff using just a
branch name without including it's remote name as well
This is a better default because it's far less confusing from a user's
perspective to debug what's going on.
Release Notes:
- git: Fix BranchDiff showing incorrect diffs when default local branch
is out of sync with the remote default branch
Anthony Eid
created
dd43891
lsp: Do not reuse disk-based diagnostics (#46437)
Click to expand commit body
Fixes #41220
Co-authored-by: dino <dinojoaocosta@gmail.com>
Closes #41220
Release Notes:
- Rust: Fixed diagnostics being stale when working across path
dependencies
---------
Co-authored-by: dino <dinojoaocosta@gmail.com>
Piotr Osiewicz
and
dino
created
7142e6a
agent_ui: Add per-file and total number of lines added and removed (#46454)
Click to expand commit body
This PR adds the total and per-file number of lines added and removed
per thread, using the same logic to compute these as in the commit view.
Here's how they show up in the UI:
<img width="500" height="514" alt="Screenshot 2026-01-09 at 11β― 27@2x"
src="https://github.com/user-attachments/assets/e3a4a14f-a4ee-4e95-a77b-86d14914e9d6"
/>
Release Notes:
- Agent: Added the total and per-file number of lines added and removed
in a thread.
Danilo Leal
created
f42d714
Add `ep --failed=skip` to exclude errored examples from output (#46453)
Click to expand commit body
Release Notes:
- N/A
Oleksiy Syvokon
created
b550463
remote: Add build-remote-server-binary for use in benchmarks (#46451)
Click to expand commit body
Benchmarks that depend on remote server would not rebuild the remote
server binary outside of dev builds. Let dependants of remote opt into
building the binary even in release builds.
Release Notes:
- N/A
Piotr Osiewicz
created
30f776e
open_ai: Move `responses` module to its own file (#46450)
Click to expand commit body
This PR moves the `responses` module to its own module in the `open_ai`
crate.
Release Notes:
- N/A
I saw that this test is failing at head, with what turns out to be a
dependency on the test environment umask.
This removes the over-strict assertions about permissions from extracted
zips when permissions aren't preserved. I tested locally that it passes
with 022, 002, 077.
Also, some of the comments and variable names seemed to be out of date
for this test, in which the file is not executable, so I changed/removed
them.
cc @MrSubidubi
follows on from #45515
Before:
```
mbp@amorfati ~/s/zed> umask 002
mbp@amorfati ~/s/zed> cargo nextest run -p util archive::tests::test_extract_zip_sets_default_permissions
Finished `test` profile [unoptimized + debuginfo] target(s) in 0.21s
ββββββββββββ
Nextest run ID de9e0712-0db1-4e4e-8c9f-421bb68ed23c with nextest profile: default
Starting 1 test across 1 binary (71 tests skipped)
FAIL [ 0.003s] util archive::tests::test_extract_zip_sets_default_permissions
stdout βββ
running 1 test
test archive::tests::test_extract_zip_sets_default_permissions ... FAILED
failures:
failures:
archive::tests::test_extract_zip_sets_default_permissions
test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 71 filtered out; finished in 0.00s
stderr βββ
thread 'archive::tests::test_extract_zip_sets_default_permissions' (755934) panicked at crates/util/src/archive.rs:290:13:
assertion `left == right` failed: Expected default set of permissions for unzipped file with no permissions set.
left: 436
right: 420
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
```
Closes #ISSUE
Release Notes:
- N/A
a481bdd
Prevent diagnostic hover popover to scroll horizontally (#46438)
Click to expand commit body
Fixing a regression I introduced in
https://github.com/zed-industries/zed/pull/45625. Diagnostic hover
popovers should only scroll vertically, not horizontally, as the content
should wrap.
Release Notes:
- N/A
Danilo Leal
created
e90913c
Ensure we can triage non-templated issues (#46362)
Click to expand commit body
Sometimes github issues are created without following the template, and
if they don't receive the `state:needs triage` label from a template,
it's easy for us to miss them. Well, not anymore, thanks to this new
github workflow.
As an extra measure, the label is also added on reopened issues. All of
this only applies only to actions carried out by people outside of the
staff team.
Release Notes:
- N/A
This PR removes the `GET /contributors` and `POST /contributors`
endpoints.
The former was not in use anywhere, and the latter has been moved to
Cloud.
Part of CLO-33.
Release Notes:
- N/A
Marshall Bowers
created
feb04ff
Restrict icon paths to subdirectories of agent extensions (#44183)
Click to expand commit body
Right now agent extensions can specify icon paths that point anywhere.
This changes it so that they can only specify icon paths that are
subdirectories of the extension's root dir.
Release Notes:
- Restrict agent server extension icon paths to subdirectories of the
extension's root directory
Richard Feldman
created
1fb2922
Vim search */# without moving cursor initially (#46244)
Click to expand commit body
The default behavior for Vim search with `*` and `#` in normal mode is
to initiate a search and immediately jump to the next or previous match
respectively.
This behavior can be annoying, so Vim has many plugins to address this
specifically:
- [vim-asterisk](https://github.com/haya14busa/vim-asterisk)
-
[vim-SearchHighlighting](https://github.com/inkarkat/vim-SearchHighlighting)
- [vim-tranquille](https://github.com/RRethy/vim-tranquille)
This PR tries to emulate this behavior natively keeping up with Zed's
sane defaults and deviating from vanilla Vim when it makes sense.
Release Notes:
- Vim: `*` and `#` search doesn't jump immediately to next / previous
search.
abdellah hariti
created
295f9d6
Add guidance for terminal tool about being a pty (#46417)
Click to expand commit body
Release Notes:
- N/A
Richard Feldman
created
558a741
Visual test infrastructure improvements (#46324)
Click to expand commit body
This PR improves the visual test infrastructure:
- Adds controllable foreground executor for deterministic task
scheduling
- Adds tooltip hover testing capability
- Improves error handling in visual test runner
- Includes planning documentation for the approach
Release Notes:
- N/A
Richard Feldman
created
acbb32d
Subagents PR 1: Feature flag + tool skeleton (#46186)
Click to expand commit body
This PR adds the foundation for the subagents feature:
- Add `SubagentsFeatureFlag` with staff-disabled default
- Create `SubagentTool` struct with input schema for
task/summary/context-low prompts
- Register `SubagentTool` conditionally when feature flag is enabled
- Tool returns stub message 'not yet implemented' for now
Release Notes:
- N/A
---------
Co-authored-by: Amp <amp@ampcode.com>
Co-authored-by: Mikayla Maki <mikayla@zed.dev>
Co-authored-by: Yara <yara@zed.dev>
Richard Feldman
,
Amp
,
Mikayla Maki
, and
Yara
created
This builds on https://github.com/zed-industries/zed/pull/46112 (which
should be merged first) and adds the permission evaluation logic and
integrates it with the terminal tool as part of the tool permissions
feature. This is a separate PR for [stacked
diffs](https://newsletter.pragmaticengineer.com/p/stacked-diffs) to make
review easier.
## Changes
- **Add `tool_permissions.rs`** with `decide_permission()` function that
implements:
- `deny > confirm > allow` precedence hierarchy (security-critical)
- Case-sensitive and case-insensitive regex matching
- Integration with existing `always_allow_tool_actions` setting
- Comprehensive unit tests (15 tests)
- **Integrate with terminal tool**:
- Commands matching deny rules are blocked immediately with an error
- Commands matching allow rules proceed without confirmation dialog
- Commands requiring confirmation show the dialog as before
- Added integration tests for deny and allow rule scenarios
Co-Authored-By: Claude Opus 4.5
Release Notes:
- N/A
---------
Co-authored-by: Amp <amp@ampcode.com>
Richard Feldman
and
Amp
created
b4d69db
Allow Escape to interrupt agent thread from conversation focus (#46410)
Click to expand commit body
When focus is on the conversation part of the agent panel (not the
message editor), pressing Escape now interrupts the running thread.
Previously, Escape only worked when the message editor had focus.
Release Notes:
- Pressing Esc when the agent panel is focused now interrupts the
running thread even if the text input box is not specifically focused.