Commit Graph
36102 Commits
Author SHA1 Message Date
Richard Feldman f3fb4e04aa Reject shell substitutions in terminal tool commands (#51689)
Harden the terminal tool's permission system to reject commands
containing shell substitutions and interpolations (`$VAR`, `${VAR}`,
`$(…)`, backticks, `$((…))`, `<(…)`, `>(…)`) before they reach terminal
creation.

## Changes

### Shell command parser (`shell_command_parser`)
- Added structured terminal command-prefix extraction with env-var
prefix support
- Added parser-backed validation that classifies commands as
Safe/Unsafe/Unknown
- Extended normalized command extraction to include scalar env-var
assignments in order
- Preserved quoted assignment values when they contain whitespace or
special characters

### Pattern extraction (`agent/pattern_extraction`)
- Updated terminal pattern extraction to use structured parser output
- Included env-var prefixes in generated allow patterns
- Normalized regex token boundaries to `\s+` while preserving display
whitespace

### Tool permissions (`agent/tool_permissions`)
- Added invalid-terminal-command rejection for forbidden
substitutions/interpolations
- Added unconditional allow-all bypass (global default Allow, or
terminal-specific Allow with empty patterns)
- Preserved hardcoded denial precedence over allow-all

### Terminal tool (`agent/tools/terminal_tool`)
- Updated tool description and input schema to explicitly prohibit shell
substitutions
- Added comprehensive SEC-264 regression test suite (20 new tests)
covering:
- All forbidden constructs (`${HOME}`, `$1`, `$?`, `$$`, `$@`,
`$(whoami)`, backticks, `$((1+1))`, `<(ls)`, `>(cat)`, env-prefix
variants, multiline, nested)
  - Allow-all exception paths (global and terminal-specific)
  - Hardcoded-denial precedence
- Env-prefix permission flow (matching, value mismatch rejection,
multiple assignments, quoted whitespace)

Closes SEC-264

Release Notes:

- Terminal tool permissions regexes can now match environment variables
(e.g. `FOO=bar cmd arg1 arg2`)
- If terminal tool permissions have active permissions regexes running
on them, then bare interpolations like `$FOO` are disallowed for
security, since regexes wouldn't be able to match on them.
2026-03-16 23:49:34 -04:00
Max Brunsfeld 977cd6ac7e Move sidebar back out of the panel (#51723)
Reverts https://github.com/zed-industries/zed/pull/51241

Release Notes:

- N/A
2026-03-17 03:48:20 +00:00
Ayush Kumar Anand 778878418d Fix "Show Edit Predictions For This Buffer" button (#50845)
Closes #48393

When switching the language of an unsaved buffer (e.g., from Plain Text
to JavaScript), the editor's edit_prediction_settings were not
recalculated. This caused the "This Buffer" toggle in the edit
prediction menu to show a stale state, making the first click a no-op. I
added a call to update_edit_prediction_settings in the LanguageChanged
event handler so the editor immediately reflects the correct edit
prediction state for the new language.

Before you mark this PR as ready for review, make sure that you have:
- [x] Added a solid test coverage and/or screenshots from doing manual
testing
- [x] Done a self-review taking into account security and performance
aspects
- [x] Aligned any UI changes with the [UI
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)

Release Notes:

- Fixed the "Show Edit Predictions For This Buffer" toggle being a no-op
in unsaved buffers after switching the buffer's language.
2026-03-17 02:52:03 +00:00
Lee ByeongJun f7ec53137d worktree: Fix binary files misdetected as UTF-16 (#50890)
Closes #50785

Opening a .wav file (PCM 16-bit) caused Zed to freeze because the binary
detection heuristic in `analyze_byte_contentmisidentified` it as
UTF-16LE text. The heuristic determines UTF-16 encoding solely by
checking whether null bytes are skewed toward even or odd positions. PCM
16-bit audio with small sample values produces bytes like `[sample,
0x00]`, creating an alternating null pattern at odd positions that is
indistinguishable from BOM-less UTF-16LE by position alone.

### Why not just add more binary headers?

The initial approach
(https://github.com/zed-industries/zed/commit/32d8bd700943ae7cb46231bc08d752d8b7987432)
was to add audio format signatures (RIFF, OGG, FLAC, MP3) to known
binary header. While this solved the reported `.wav` case, any binary
format containing small 16-bit values (audio, images, or arbitrary data)
would still be misclassified. Adding headers is an endless game that
cannot cover unknown or uncommon formats.

### Changes

* Adds `is_plausible_utf16_text` as a secondary validation: when the
null byte skew suggests UTF-16, decode the bytes and count code units
that fall in C0/C1 control character ranges (U+0000–U+001F,
U+007F–U+009F, excluding common whitespace) or form unpaired surrogates.
Real UTF-16 text has near-zero such characters. I've set the threshold
at 2% — note that this is an empirically derived value, not based on any
formal standard.

**Before fix**

<img width="1147" height="807" alt="스크린샷 2026-03-06 오후 9 00 07"
src="https://github.com/user-attachments/assets/2e6e47f9-f5e7-4cab-9d41-cc3dd20f9142"
/>

**After fix**
<img width="1280" height="783" alt="스크린샷 2026-03-06 오전 1 17 43"
src="https://github.com/user-attachments/assets/3fecea75-f061-4757-9972-220a34380d67"
/>


Before you mark this PR as ready for review, make sure that you have:
- [X] Added a solid test coverage and/or screenshots from doing manual
testing
- [ ] Done a self-review taking into account security and performance
aspects
- [ ] Aligned any UI changes with the [UI
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)

Release Notes:

- Fixed binary files (e.g. WAV) being misdetected as UTF-16 text,
causing Zed to freeze.
2026-03-17 02:51:44 +00:00
DongandBen Kunkle 74ad75843e keymap_editor: Remove redundant parentheses when displaying keymap context (#50906)
Closes #34976

## Root Cause

The current implementation of `fmt::Display` in
`KeyBindingContextPredicate` hardcodes a parentheses around `And` and
`Or` cases. Causing the text displayed on the keymap editor to have
nested parentheses.

This PR refactors the display logic and make the parentheses added only
when there's nested operator.

## As is/ To be

As is | To be
--- | ---	
<img width="800" height="1101" alt="Screenshot 2026-03-06 at 15 07 10"
src="https://github.com/user-attachments/assets/33b4366d-4d16-48db-9cc6-b79d6cc7ddc7"
/> | <img width="800" height="977" alt="Screenshot 2026-03-06 at 14 54
57"
src="https://github.com/user-attachments/assets/3d5ed38d-949d-4265-8fad-e29250c3a285"
/>

## Test coverage

<img width="800" height="916" alt="Screenshot 2026-03-06 at 15 00 42"
src="https://github.com/user-attachments/assets/5846b908-5c86-48a7-919e-a7ae198484a8"
/>



Before you mark this PR as ready for review, make sure that you have:
- [x] Added a solid test coverage and/or screenshots from doing manual
testing
- [x] Done a self-review taking into account security and performance
aspects
- [ ] Aligned any UI changes with the [UI
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)

Release Notes:

- keymap_editor: Remove redundant parentheses when displaying keymap
context

---------

Co-authored-by: Ben Kunkle <ben@zed.dev>
2026-03-17 02:44:12 +00:00
Alejandro Fernández Gómez 5aa037e4a0 Disable the tilt LSP by default for "Starlark" files (#51709)
This matches how the `buck2-lsp` works for that extension.

Fixes https://github.com/zaucy/zed-starlark/issues/18

Before you mark this PR as ready for review, make sure that you have:
- [ ] (n/a) Added a solid test coverage and/or screenshots from doing
manual testing
- [x] Done a self-review taking into account security and performance
aspects
- [x] Aligned any UI changes with the [UI
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)

Release Notes:

- N/A
2026-03-16 22:48:20 +00:00
Finn Evers 6a06f72f18 extension_ci: Bump update action and fix cache issues (#51716)
This PR bumps the update action again. It also fixes a bug where a cache
issue could occur during the extension auto bump and adds update
auto-merge for PRs from staff-members in zed-industries/extensions.

Release Notes:

- N/A
2026-03-16 22:26:56 +00:00
Ben Brandt 9c3aa4b9fa agent_ui: Remove special casing for previous built in agents (#51713)
Now that the migration has happened, we can stop making these ever
present

Release Notes:

- N/A
2026-03-16 22:25:04 +00:00
Ben Brandt 5bf6e571cb agent_ui: Fix non-compiling tests (#51715)
Release Notes:

- N/A
2026-03-16 22:12:30 +00:00
Richard Feldman bfa5e88b66 Simplify New Worktree to only restore active buffer or fullscreen agent panel (#51700)
Dramatically simplifies what "New Worktree" does when forking a
workspace.

Previously we captured the entire dock structure and all open file
paths, then restored them all in the new worktree workspace. Now the
behavior is:

- If you have an active buffer open, we reopen just that one file (no
other buffer state is carried over).
- If you do not have an active buffer open, we instead fullscreen (zoom)
the agent panel (equivalent to cmd-esc).

No other workspace state is carried over.

Implementation details:
- Replace `capture_dock_state` / `set_dock_structure` /
`open_item_abs_paths` with a single `active_file_path` lookup.
- Pass `None` for the `init` closure instead of restoring dock layout.
- Only reopen the single active file via `open_paths`, with proper error
logging (`detach_and_log_err`) instead of silent `.detach()`.
- Emit `PanelEvent::ZoomIn` on the agent panel when no active buffer
exists, after `focus_panel` to ensure the panel is properly activated
first.
- Warn when an active file exists but cannot be remapped to the new
worktree.

Closes AI-87

Release Notes:

- N/A
2026-03-16 17:22:11 -04:00
Richard Feldman c17bc26b3a Preserve selected agent when starting thread in new worktree (#51628)
When the user selected a custom agent (e.g. Codex) and chose "Start
Thread in New Worktree", the new workspace's panel ignored the selection
and defaulted to Zed Agent (NativeAgent).

The fix captures `self.selected_agent()` in
`handle_worktree_creation_requested` before the async task, passes it
through to `setup_new_workspace`, and forwards it to `external_thread`
instead of `None`.

Closes AI-84

(No release notes because it's still feature-flagged.)

Release Notes:

- N/A
2026-03-16 17:10:50 -04:00
morgankrey 9386e20505 docs: Update Claude Sonnet 4.6 and Opus 4.6 context windows to 1M (#51695)
## Summary

- Update the context window table in `models.md` to reflect that Claude
Sonnet 4.6 and Opus 4.6 now support 1M token context windows (previously
listed as 200k)
- Remove Sonnet 4.5/4.6 from the "may increase in future releases"
callout since the 4.6 models are now at 1M

Release Notes:

- N/A
2026-03-16 13:34:20 -05:00
Bennet Bo Fenner f1f61c8dae agent_ui: Rename ConnectionView to ConversationView (#51684)
We now share connections across multiple "ConnectionView"s the naming
does not make sense anymore

Release Notes:

- N/A
2026-03-16 18:34:21 +01:00
Lukas Wirth 44c73a8753 gpui: Fix hash collision panics in ProfilingCollector (#51683)
Release Notes:

- N/A *or* Added/Fixed/Improved ...
2026-03-16 18:10:31 +01:00
Karthik Nishanth 9b5d170eca editor: Go to previous and next symbol actions (#50777)
Closes discussion #34890 

This is similar to the vim prev/next method/section motion, but more
flexible because this follows the items in editor's outline (Tree sitter
or LSP provided).

Before you mark this PR as ready for review, make sure that you have:
- [x] Added a solid test coverage and/or screenshots from doing manual
testing
- [x] Done a self-review taking into account security and performance
aspects
- [x] Aligned any UI changes with the [UI
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)

Release Notes:

- Added actions `editor::GoToPreviousSymbol` and
`editor::GoToNextSymbol` actions to go to the previous and next outline
symbol. This is either the tree sitter outline, or the LSP provided
outline depending on the configuration.
2026-03-16 19:01:28 +02:00
Bennet Bo Fenner 30b7178f67 agent_ui: Rename ConnectionView to ConversationView (#51684)
We now share connections across multiple "ConnectionView"s the naming
does not make sense anymore

Release Notes:

- N/A
2026-03-16 16:33:12 +00:00
Lukas Wirth 74eb252d7e editor: Fix panic in refresh_inline_values when spanning cross excerpts (#51685)
Fixes ZED-5VQ

Release Notes:

- N/A *or* Added/Fixed/Improved ...
2026-03-16 16:30:27 +00:00
Nihal Kumar 74dbaeb2ad debugger: Fall back to cached adapter binaries when offline (#50928)
The Python (debugpy) and Go (delve-shim-dap) debug adapters
unconditionally require network access on every debug session start —
even when the adapter binary is already cached locally. This makes the
debugger completely unusable offline.

Python: fetch_debugpy_whl → maybe_fetch_new_wheel hits pypi; failure
propagates as a fatal error.
Go: install_shim → fetch_latest_adapter_version hits the GitHub API;
failure propagates as a fatal error.
CodeLLDB and JavaScript adapters already handle this correctly.

Fix for Python and Go:

Wrap the network fetch in each adapter with a fallback: if the request
fails and a previously downloaded adapter exists on disk, log a warning
and use the cached version. If no cache exists, the original error
propagates unchanged.

Logs after the fix:

```
2026-03-06T16:31:51+05:30 WARN  [dap_adapters::python] Failed to fetch latest debugpy, using cached version: getting latest release
2026-03-06T16:31:51+05:30 INFO  [dap::transport] Debug adapter has connected to TCP server 127.0.0.1:45533
```

Limitations: 

The debugger must be run at least once with internet connectivity to
populate the cache on disk. This PR does not change that requirement.


Closes #45781

Before you mark this PR as ready for review, make sure that you have:
- [ ] Added a solid test coverage and/or screenshots from doing manual
testing
- No automated tests are included. The existing MockDelegate stubs
http_client() and fs() as unimplemented!(), so testing the fallback path
would require new mock infrastructure. The fix was verified manually by
running the debug build offline with and without cached adapters. The
CodeLLDB adapter's equivalent fallback (lines 357-374) also has no
dedicated test.
- [x] Done a self-review taking into account security and performance
aspects

Release Notes:

- Fixed debugger failing to start when offline if a debug adapter was
previously downloaded.
2026-03-16 16:29:24 +00:00
015225196d Store ACP thread metadata (#51657)
Before you mark this PR as ready for review, make sure that you have:
- [x] Added a solid test coverage and/or screenshots from doing manual
testing
- [x] Done a self-review taking into account security and performance
aspects
- [x] Aligned any UI changes with the [UI
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)

Release Notes:

- N/A

---------

Co-authored-by: cameron <cameron.studdstreet@gmail.com>
Co-authored-by: Ben Brandt <benjamin.j.brandt@gmail.com>
2026-03-16 17:23:02 +01:00
Yara 🏳️‍⚧️ 6a9a7c0014 Fix echo canceller not working (#51673)
Release Notes:

- Fixed: echo's on experimental audio pipeline

Some more context:
- `EchoCanceller` was not implemented on the output side
- removes the planned migration to a different sample rate (44100) and
channel count (1)
- de-duplicate the interleaved `#cfg[]`'s and centralized them in
`echo_canceller.rs`
2026-03-16 17:20:31 +01:00
zed-zippy[bot] 8d79dd7688 glsl: Bump to v0.2.2 (#51682)
This PR bumps the version of the GLSL extension to v0.2.2.

Release Notes:

- N/A

Co-authored-by: zed-zippy[bot] <234243425+zed-zippy[bot]@users.noreply.github.com>
2026-03-16 16:17:56 +00:00
Mikayla Maki 662f2c7857 Update BYOK to 1m context windows (#51625)
Before you mark this PR as ready for review, make sure that you have:
- [x] Added a solid test coverage and/or screenshots from doing manual
testing
- [x] Done a self-review taking into account security and performance
aspects
- [x] Aligned any UI changes with the [UI
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)

Release Notes:

- Updated our BYOK integration to support the new 1M context windows for
Opus and Sonnet.
2026-03-16 09:10:01 -07:00
Finn Evers 7b35337b7d glsl: Highlight null as builtin constant (#51680)
Mostly just a test to check whether everything works properly now.

Release Notes:

- N/A
2026-03-16 16:05:55 +00:00
Sebastian Kootz fa7182b6ba gpui: Add align-self methods to Styled trait (#51652)
This PR adds the missing methods for the `align-self` css property. The
`align_self` field existed on the `StyleRefinement` struct but was
inaccessible using the `styled` trait.

Release Notes:

- Adds `self_start`, `self_end`, `self_center`, `self_flex_start`,
`self_flex_end`, `self_baseline`, and `self_stretch` methods to the
`trait Styled`
2026-03-16 12:58:53 -03:00
ISHIMWE VainqueurandDanilo Leal ae445634e0 git_ui: Show uncommitted change count badge on git panel icon (#49624)
## Summary

- Implements `icon_label` on `GitPanel` to return the total count of
uncommitted changes (`new_count + changes_count`) when non-zero, capped
at `"99+"` for large repos.
- Updates `PanelButtons::render()` to render that label as a small green
badge overlaid on the panel's sidebar icon, using absolute positioning
within a `div().relative()` wrapper.
- The badge uses `version_control_added` theme color and
`LabelSize::XSmall` text with `LineHeightStyle::UiLabel` for accurate
vertical centering, positioned at the top-right corner of the icon
button.

The `icon_label` method already existed on the `Panel`/`PanelHandle`
traits with a default `None` impl, and was already implemented by
`NotificationPanel` (unread notification count) and `TerminalPanel`
(open terminal count) — but was never rendered. This wires it up for all
three panels at once.

## Notes

- Badge is positioned with non-negative offsets (`top(0)`, `right(0)`)
to stay within the parent container's bounds. The status bar's
`render_left_tools()` uses `.overflow_x_hidden()`, which in GPUI clips
both axes (the `overflow_mask` returns a full content mask whenever any
axis is non-`Visible`), so negative offsets would be clipped.
- `LineHeightStyle::UiLabel` collapses line height to `relative(1.)` so
flex centering aligns the visual glyph rather than a
taller-than-necessary line box.
- No new data tracking logic — `GitPanel` already maintains `new_count`
and `changes_count` reactively.
- No feature flag or settings added per YAGNI.

## Suggested .rules additions

The following pattern came up repeatedly and would prevent future
sessions from hitting the same issue:

```
## GPUI overflow clipping

`overflow_x_hidden()` (and any single-axis overflow setter) clips **both** axes in GPUI.
The `overflow_mask()` implementation in `style.rs` returns a full `ContentMask` (bounding box)
whenever any axis is non-`Visible`. Absolute-positioned children that extend outside the element
bounds will be clipped even if only the X axis is set to Hidden.
Avoid negative `top`/`right`/`bottom`/`left` offsets on absolute children of containers
that have any overflow hidden — keep badge/overlay elements within the parent's bounds instead.
```

Release Notes:

- Added a numeric badge to the git panel sidebar icon showing the count
of uncommitted changes.

---------

Co-authored-by: Danilo Leal <daniloleal09@gmail.com>
2026-03-16 12:57:20 -03:00
Xiaobo Liu b338a69933 language_selector: Fix language selector query selection (#51581)
Closes https://github.com/zed-industries/zed/issues/51576

Release Notes:

- Select first entry in the language selector when matching a query



https://github.com/user-attachments/assets/c824c024-d2f1-416e-a347-0eab7bc3ae0a

Signed-off-by: Xiaobo Liu <cppcoffee@gmail.com>
2026-03-16 15:53:06 +00:00
Finn Evers 8022e9d8d1 extension_ci: Bump update action revision (#51679)
This should put us in a state where everything finally works in its
entirety.

Release Notes:

- N/A
2026-03-16 15:46:09 +00:00
loadingaliasandKirill Bulatov e5bb2c6790 Fix non-ASCII path:line:column navigation (#51238)
Closes #43329

## Summary
This fixes `path:line:column` navigation for files containing non-ASCII
text.

Before this change, open path flows were passing the external column
directly into `go_to_singleton_buffer_point`. That happened to work for
ASCII, but it was wrong for Unicode because external columns are
user-visible character positions while the editor buffer stores columns
as UTF-8 byte offsets.

This PR adds a shared text layer conversion for external row/column
coordinates and uses it in the affected open-path flows:
 - file finder navigation
 - recent project remote connection navigation
 - recent project remote server navigation

It also adds regression coverage for the Unicode case that originally
failed.

As a small - necessary - prerequisite, this also adds
`remote_connection` test support to `file_finder`'s dev-deps so the
local regression test can build and run on this branch. That follows the
same feature mismatch pattern previously fixed in #48280. I wasn't able
to locally verify the tests/etc. w/o the addition... so I've rolled it
into this PR. Tests are green.

The earlier attempt in #47093 was headed in the right direction, but it
did not land and did not include the final regression coverage requested
in review.

## Verification
 - `cargo fmt --all -- --check`
 - `./script/clippy -p text`
 - `./script/clippy -p file_finder`
 - `./script/clippy -p recent_projects`
 - `cargo test -p file_finder --lib --no-run`
- `cargo test -p file_finder
file_finder_tests::test_row_column_numbers_query_inside_file -- --exact`
- `cargo test -p file_finder
file_finder_tests::test_row_column_numbers_query_inside_unicode_file --
--exact`
- `cargo test -p text
tests::test_point_for_row_and_column_from_external_source -- --exact`

## Manual

I reproduced locally on my machine (macOS) w/ a stateless launch using a
Unicode file (Cyrillic)

Before:
 - `:1:5` landed too far left
 - `:1:10` landed around the 4th visible Cyrillic character

After:
 - `:1:5` lands after 4 visible characters / before the 5th
 - `:1:10` lands after 9 visible characters / before the 10th

Release Notes:
- Fixed `path:line:column` navigation so non-ASCII columns land on the
correct character.

---------

Co-authored-by: Kirill Bulatov <kirill@zed.dev>
2026-03-16 15:35:59 +00:00
Ben KunkleandOleksiy 52fb089258 ep: Track e2e latency (#51678)
Closes #ISSUE

Before you mark this PR as ready for review, make sure that you have:
- [ ] Added a solid test coverage and/or screenshots from doing manual
testing
- [ ] Done a self-review taking into account security and performance
aspects
- [ ] Aligned any UI changes with the [UI
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)

Release Notes:

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

Co-authored-by: Oleksiy <oleksiy@zed.dev>
2026-03-16 11:35:51 -04:00
Danilo LealandLukas Wirth 70a742eadc git_ui: Don't display the merge conflict notification if an agent is running (#51498)
This PR is motivated by internal feedback in which the notification that
we show inviting to resolve merging conflicts with an agent also pops up
if the agent itself ran `git merge`. In this case, the notification is
unnecessary noise. So, what I'm doing here is simply _not_ showing it if
there's a running agent.

I want to note that this change is accepting a trade-off here, in which
there could be cases that even if an agent is running, the notification
can still be useful. There could be other ways to identify whether the
agent is running `git merge`, but they all felt a bit too complex for
the moment. And given this is reasonably an edge case, I'm favoring a
simple approach for now.

Release Notes:

- N/A

---------

Co-authored-by: Lukas Wirth <lukas@zed.dev>
2026-03-16 16:30:32 +01:00
zed-zippy[bot] ee24bef3a1 html: Bump to v0.3.1 (#51518)
This PR bumps the version of the HTML extension to v0.3.1.

Release Notes:

- N/A

Co-authored-by: zed-zippy[bot] <234243425+zed-zippy[bot]@users.noreply.github.com>
2026-03-16 15:31:16 +01:00
Finn Evers 657edd38b0 extension_ci: Use temporary fork for release action (#51674)
Moving to the for here before the fix gets upstreamed. We might revisit
this at a later point anyway.

Release Notes:

- N/A
2026-03-16 14:30:01 +00:00
JongchanandDanilo Leal c54fe0f3e5 git_ui: Add file and folder icons to the Git panel (#51000)
Closes https://github.com/zed-industries/zed/discussions/49740

Adds optional file and folder icons to the Git panel so its file list is
easier to scan, especially in larger repositories.

- add folder icons for Git panel entries
- add Git panel settings for file and folder icon visibility

---

Release Notes:

  - Made the Git Panel aware of icon themes.
  - Added the ability to render file type icons in the Git panel.

---------

Co-authored-by: Danilo Leal <daniloleal09@gmail.com>
2026-03-16 11:06:37 -03:00
Smit Barmase 2cea93133a Revert "Fix window drags when dragging button/input on titlebar in macOS" (#51666)
Reverts zed-industries/zed#51400
2026-03-16 13:55:04 +00:00
tiwari91andDanilo Leal b6fec83e72 Fix Ayu Dark/Mirage dim terminal colors appearing as white (#51462)
## Summary

Closes #46126

Dim terminal colors in **Ayu Dark** and **Ayu Mirage** were defined as
light pastels instead of muted/darker versions of the normal colors. On
a dark background, the APCA minimum contrast algorithm boosted these
already-light colors toward white, making "dimmed" text (e.g.
zsh-autosuggestions) appear brighter than normal text.

### Root cause

| Color | Ayu Dark (before) | Ayu Dark (after) | Pattern |
|-------|-------------------|------------------|---------|
| dim_foreground | `#0d1016` (= background!) | `#85847f` | Muted
foreground |
| dim_red | `#febab9` (light pink) | `#a74f53` | 70% of normal red |
| dim_green | `#d8eca8` (light pastel) | `#769735` | 70% of normal green
|
| dim_yellow | `#ffd9aa` (light pastel) | `#b17d3a` | 70% of normal
yellow |

The fix follows the same convention as **Gruvbox** and **One Dark**,
where dim = ~70% brightness of the normal color.

**Ayu Light** was already correct (dim colors are darker, which is
correct for light backgrounds).

## Test plan

- [ ] Open terminal in Zed with Ayu Dark theme
- [ ] Enable zsh-autosuggestions (or any tool that uses dim/faint ANSI
colors)
- [ ] Type a partial command to trigger autosuggestions
- [ ] Verify suggested text appears as muted/dim, not bright white
- [ ] Repeat with Ayu Mirage theme
- [ ] Verify Ayu Light theme is unaffected

---

Release Notes:

- Improved some Ayu Dark/Mirage theme's terminal colors.

Co-authored-by: Danilo Leal <daniloleal09@gmail.com>
2026-03-16 10:48:05 -03:00
Dong 0e2ce49065 markdown_preview: Fix not re-rendering issue when editing by agent (#50583)
Closes #47900 

## Root cause

The current markdown preview only re-renders on `EditorEvent::Edited,
DirtyChanged, ExcerptsEdited`, but agent edits are implemented via
[`buffer.edit()`](https://github.com/dongdong867/zed/blob/eb3f92708b6dc67bb534c1c44a200c0cb5c4997b/crates/agent/src/edit_agent.rs#L375)
which does not guaranty to emit the `EditorEvent::Edited` event. Causing
the markdown preview stuck on the last received parsed markdown.

## Applied fix

Subscribing to `EditorEvent::BufferEdited` when initializing the
markdown preview view. This will cause the view to update when received
`BufferEdited` event including agent edits to the file.

## As is/ To be

As is | To be
--- | ---
<video
src="https://github.com/user-attachments/assets/a0b13467-7758-4572-ae01-bcbc40beff6c"
/> | <video
src="https://github.com/user-attachments/assets/3b5463f3-46ad-4fe6-8563-ceb4347035db"
/>

---

Before you mark this PR as ready for review, make sure that you have:
- [x] Added a solid test coverage and/or screenshots from doing manual
testing
- [x] Done a self-review taking into account security and performance
aspects
- [ ] Aligned any UI changes with the [UI
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)

Release Notes:

- Fixed markdown preview not re-rendering when edited by agent
2026-03-16 14:45:58 +01:00
Om Chillure 70a5669842 agent_servers: Fix Claude Agent model resetting to default (#51587)
#### Fixes #51082

#### Description :

When a user configures `default_config_options` (e.g. a specific model)
for an ACP agent, the setting was only applied when creating a new
session. Resuming or loading an existing session (e.g. from history)
skipped this step, causing the model dropdown to revert to "Default
(recommended)".

#### Fix : 

Extract the config options defaulting logic into a shared helper
apply_default_config_options and call it consistently across all three
session entry points: new_session, resume_session, and load_session
Release Notes:

#### Release notes :
Fixed model dropdown resetting to "Default (recommended)" when opening a
previous conversation from history. Configured models (via
default_config_options) are now correctly applied when resuming or
loading existing sessions.


#### Video :
[Screencast from 2026-03-15
12-55-58.webm](https://github.com/user-attachments/assets/977747b9-390c-4f78-91fc-91feace444e1)
2026-03-16 13:41:55 +00:00
Giorgi Merebashvili b0fd10134f file_finder: Fix project root appearing in file paths while searching when hide_root=true (#51530)
Closes #45135

Before you mark this PR as ready for review, make sure that you have:
- [x] Added a solid test coverage and/or screenshots from doing manual
testing
- [x] Done a self-review taking into account security and performance
aspects
- [x] Aligned any UI changes with the [UI
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)

Release Notes:

- Fixed project root name appearing in file paths while searching in
file finder.
2026-03-16 13:27:41 +00:00
Lena 3d7d2cac4b Add autolabeling the guild PRs (#51663)
Quick-and-dirty version as we're trying this out with the first cohort.

Release Notes:

- N/A
2026-03-16 13:21:27 +00:00
Cameron Mcloughlin 93f3286fae gpui: Add Unicode range for Bengali (#51659) 2026-03-16 13:03:33 +00:00
Om ChillureandKirill Bulatov 491ff012f7 Fix outline filtering always selecting last match (#50594)
Fixes #29774

When filtering the outline panel, matches with equal fuzzy scores
previously defaulted to the last item due to iterator `max_by_key`
semantics. This caused the bottommost match (e.g. `C::f`) to always be
pre-selected regardless of cursor position.

Changes:
- Select the match nearest to the cursor when scores are tied, using a
multi-criteria comparison: score -> cursor containment depth ->
proximity to cursor -> earlier index
- Move outline search off the UI thread (`smol::block_on` -> async
`cx.spawn_in`) to avoid blocking during filtering
- Wrap `Outline<Anchor>` in `Arc` for cheap cloning into the async task
- Add `match_update_count` to discard results from stale queries

Tests : 
Adds a regression test:
`test_outline_filtered_selection_prefers_cursor_proximity_over_last_tie`
which passes

Video : 
[Screencast from 2026-03-03
17-01-32.webm](https://github.com/user-attachments/assets/7a27eaed-82a0-4990-85af-08c5a781f269)


Release Notes:
Fixed the outline filtering always select last match

---------

Co-authored-by: Kirill Bulatov <kirill@zed.dev>
2026-03-16 12:56:29 +00:00
Ben Brandt 603e6d6742 agent_ui: Disable editing and regeneration for subagent messages (#51654)
We had inconsistent handling of this read-only behavior. Now subagents
should behave the same as agents that don't support editing

Release Notes:

- agent_ui: Fix inconsistent behavior for subagent views when focusing
on previous messages.
2026-03-16 12:13:23 +00:00
Piotr OsiewiczandJakub Konka 2a7bd8464b audio: Remove unbounded input queue in favor of 1-element queue (#51647)
Co-authored-by: Jakub Konka <kubkon@jakubkonka.com>

Closes #ISSUE

Before you mark this PR as ready for review, make sure that you have:
- [ ] Added a solid test coverage and/or screenshots from doing manual
testing
- [ ] Done a self-review taking into account security and performance
aspects
- [ ] Aligned any UI changes with the [UI
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)

Release Notes:

- Improve recovery of audio latency after CPU-intensive period.

Co-authored-by: Jakub Konka <kubkon@jakubkonka.com>
2026-03-16 11:50:44 +01:00
Lukas Wirth 357ee0fa3f vim: Fix helix select next match panic when search wraps around (#51642)
Fixes ZED-4YP

Sort and deduplicate anchor ranges in do_helix_select before passing
them to select_anchor_ranges. When the search wraps past the end of the
document back to the beginning, the new selection is at a lower offset
than the accumulated prior selections, producing unsorted anchors that
crash the rope cursor with 'cannot summarize backward'.


Release Notes:

- Fixed a panic in helix mode with search selecting wrapping around the
document end
2026-03-16 11:14:26 +01:00
Finn Eitreimanddino 923b5122af vim: Fix dot repeat ignoring recorded register (#50753)
When a command used an explicit register (e.g. `"_dd` or `"add`), the
subsequent dot repeat (`.`) was ignoring that register and using the
default instead.

Store the register at recording start in `recording_register_for_dot`,
persist it to `recorded_register_for_dot` when recording stops, and
restore it in `Vim::repeat` when no explicit register is supplied for
`.`. An explicit register on `.` (e.g. `"b.`) still takes precedence.

This commit also updates the dot-repeat logic to closely follow Neovim's
when using numbered registers, where each dot repeat increments the
register. For example, after using `"1p`, using `.` will repeat the
command using `"2p`, `"3p`, etc.

Closes #49867

Release Notes:

- Fixed vim's repeat . to preserve the register the recorded command
  used
- Updated vim's repeat . to increment the recorded register when using
  numbered registers

---------

Co-authored-by: dino <dinojoaocosta@gmail.com>
2026-03-16 10:05:14 +00:00
Atchyut Preetham Pulavarthi 949944acb4 editor: Fix jumbled auto-imports when completing with multiple cursors (#50320)
When accepting an autocomplete suggestion with multiple active cursors
using `CMD+D`, Zed applies the primary completion edit to all cursors.
However, the overlap check for LSP `additionalTextEdits` only verifies
the replace range of the newest cursor.

If user has a cursor inside an existing import statement at the top of
the file and another cursor further down, Zed fails to detect the
overlap at the top of the file. When the user auto-completes the import
statement ends up jumbled.

This fix updates the completion logic to calculate the commit ranges for
all active cursors and passes them to the LSP store. The overlap check
now iterates over all commit ranges to ensure auto-imports are correctly
discarded if they intersect with any of the user's multi-cursor edits.

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

### Before


https://github.com/user-attachments/assets/8d0f71ec-37ab-4714-a318-897d9ee5e56b

### After


https://github.com/user-attachments/assets/4c978167-3065-48c0-bc3c-547a2dd22ac3

Before you mark this PR as ready for review, make sure that you have:
- [x] Added a solid test coverage and/or screenshots from doing manual
testing
- [x] Done a self-review taking into account security and performance
aspects
- [x] Aligned any UI changes with the [UI
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)

Release Notes:

- Fixed an issue where accepting an autocomplete suggestion with
multiple cursors could result in duplicated or jumbled text in import
statements.
2026-03-16 09:52:57 +00:00
Jakub Konka be4d38a56e livekit: Use our build of libwebrtc.a (#51433)
Closes #51339

This should address issues with too new libstdc++.so on older/more
conservative distros such as RHEL9.

Release Notes:

- Relaxed requirement for libstdc++.so available on Linux distros.
2026-03-16 10:47:36 +01:00
Lukas Wirth ec2ab12a06 fs: Fix wrong windows cfg (#51644)
Causes releases on windows to fail due to unused imports

Release Notes:

- N/A *or* Added/Fixed/Improved ...
2026-03-16 09:03:22 +00:00
Lukas Wirth ebd80d7995 buffer_diff: Fix panic when staging hunks with stale buffer snapshot (#51641)
When the buffer is edited after the diff is computed but before staging,
anchor positions shift while diff_base_byte_range values don't. If the
primary (HEAD) hunk extends past the unstaged (index) hunk, an edit in
the extension region causes the overshoot calculation to produce an
index_end that exceeds index_text.len(), panicking in
rope::Cursor::suffix.

Fix by clamping index_end to index_text.len(). This is safe because the
computed index text is an optimistic approximation — the real staging
happens at the filesystem level via git add/git reset.

Closes ZED-5R2


Release Notes:

- Fixed a source of panics when staging diff hunks
2026-03-16 09:49:02 +01:00
Lukas Wirth a93c66e794 markdown_preview: Prevent stackoverflows in markdown parsing (#51637)
Fixes ZED-5TR

Release Notes:

- Fixed a stack overflow when parsing deeply nested html in markdown
files
2026-03-16 07:43:56 +00:00