cf09993
Enable 'Add to Agent Thread' in worktree-less windows (#49084)
Click to expand commit body
Fixes #49062
Updates `crates/agent_ui/src/inline_assistant.rs` to ensure the
TerminalPanel correctly syncs the assistant_enabled
state on initialization. This fixes the issue where "Add to Agent
Thread" was missing in worktree-less windows.
## Video:
[Screencast from 2026-02-13
10-31-43.webm](https://github.com/user-attachments/assets/bee0df67-0ecf-460c-8123-a72c4790c719)
## Release Notes
- Fixed an issue where "Add to Agent Thread" was missing from the
terminal context menu in windows without open folders.
Om Chillure
created
cbf03f5
acp_thread: Await Tree-sitter parsing before building agent panel diffs (#49101)
Click to expand commit body
## Summary
Fixes https://github.com/zed-industries/zed/issues/48684
- Await `parsing_idle()` after `set_language()` in both
`Diff::finalized()` and `PendingDiff::finalize()` so that tree-sitter
parsing completes before buffer snapshots are taken for excerpts
- Without this, the 1ms sync parse timeout almost always expires for
non-trivial files, causing excerpts to be created with empty syntax
trees and missing syntax highlighting
## Root Cause
When the agent panel creates or finalizes a diff, it creates a new
`Buffer`, calls `set_language()` (which triggers async tree-sitter
parsing), then immediately proceeds to take buffer snapshots and create
excerpts **without waiting for parsing to complete**. The sync parse
timeout is only 1ms in production (`buffer.rs:1138`), so large files
almost always fail the sync parse and fall back to async parsing — but
no one awaits the async parse before building the diff.
## Fix
Add `buffer.update(cx, |buffer, _| buffer.parsing_idle()).await` after
`set_language()` in both code paths (`Diff::finalized()` and
`PendingDiff::finalize()`). This is the same pattern already used in
`buffer_diff.rs:1728-1731`.
## Test plan
- [x] `cargo test -p acp_thread` — all relevant tests pass
- [x] `./script/clippy` — no warnings
- [x] Manual test: open agent panel, ask it to generate a Python file
with multiline strings (`"""`), verify syntax highlighting is correct
after diff is finalized
Release Notes:
- Fixed missing syntax highlighting for multiline strings in agent panel
diffs
chenwuji2000-cyber
created
93ead96
cloud_llm_client: Add StreamEnded and Unknown variants to CompletionRequestStatus (#49121)
Click to expand commit body
Add StreamEnded variant so the client can distinguish between a stream
that the cloud ran to completion versus one that was interrupted (see
CLO-258). **That logic is to be added in a follow up PR**.
Add an Unknown fallback with #[serde(other)] for forward-compatible
deserialization of future variants.
The client advertises support via a new
x-zed-client-supports-stream-ended-request-completion-status header. The
server will only send the new variant if that header is passed. Both
StreamEnded and Unknown are silently ignored at the event mapping layer
(from_completion_request_status returns Ok(None)).
Part of CLO-264 and CLO-266; cloud-side changes to follow.
Release Notes:
- N/A
---------
Co-authored-by: Marshall Bowers <git@maxdeviant.com>
Changes the AcpThreadHistory behavior to only load the full paginated
list if we are in the history view, and only reloads the first page
otherwise. And it also updates the first page in way fewer cases to
reduce load on the agents.
Release Notes:
- N/A
Ben Brandt
created
2c5a3c0
Tone down color for invisible characters in One themes (#46247)
Click to expand commit body
Related: https://github.com/zed-industries/zed/issues/5592
Coming from vscode, the first thing I noticed (after the amazing speed
that zed started) was the boldness of the whitespace characters.
This mutes the whitespace "invisible" character color in the one theme
so that they are less aggressive. This more closely (but not perfectly)
aligns with the one theme for vscode. In order to avoid adding a new
color to the theme, I reused the `editor.line_number` value in both
cases which worked well.
# Dark
## original:
<img width="858" height="506" alt="before_dark"
src="https://github.com/user-attachments/assets/fe5f1d11-90a5-4fa1-acf6-0d1a25c137f2"
/>
## editor.line_number `#4e5a5f`
<img width="867" height="466" alt="after_dark"
src="https://github.com/user-attachments/assets/5f95f602-43c6-4a1a-9c7d-74b0ea8cf1c9"
/>
## border.variant (alternative) `#363c46ff`
<img width="818" height="489" alt="dark_border_variant"
src="https://github.com/user-attachments/assets/7d44d2f6-e2a4-437e-99d1-ebdf58aab94c"
/>
# Light
## original
<img width="838" height="488" alt="before_light"
src="https://github.com/user-attachments/assets/61e48ba6-487c-468b-b099-4ab0f9ffbc9b"
/>
## editor.line_number `#b4b4bb`
<img width="868" height="493" alt="after_light"
src="https://github.com/user-attachments/assets/d88b74dc-debe-4105-a217-7ca6c4b6ff20"
/>
# Release Notes:
- Improved: Muted the invisible character color in the one themes.
Co-authored-by: Danilo Leal <daniloleal09@gmail.com>
Michael Johnson
and
Danilo Leal
created
d0c0c33
Fix missing right border on pinned tabs in two-row layout (#46952)
Click to expand commit body
Closes https://github.com/zed-industries/zed/issues/46926
## Description:
- Fixes the missing right border on pinned tabs when
`show_pinned_tabs_in_separate_row` is enabled.
The two-row tab bar layout was missing the border element that visually
separates the pinned tabs row. This border was present in the single-row
layout but was not added when implementing the two-row layout.
## Steps to reproduce
1. Enable `"tab_bar": { "show_pinned_tabs_in_separate_row": true }` in
settings
2. Open multiple files
3. Pin at least one tab (right-click → Pin Tab)
4. Notice pinned tabs are missing right-hand side border
**Before (bug):**
<img width="1060" height="186" alt="image"
src="https://github.com/user-attachments/assets/7d18f24d-a51b-4f13-8410-a15fa92e1bb3"
/>
**After (fixed):**
<img width="863" height="69" alt="image"
src="https://github.com/user-attachments/assets/3354e809-b298-49a1-b16a-871caef67176"
/>
## Test plan
- [x] Follow reproduction steps above and verify the border now appears
- [x] Verify border appears immediately (not just after drag-and-drop)
- [x] Verify single-row layout still works correctly when setting is
disabled
- [x] Added automated test `test_separate_pinned_row_has_right_border`
### Additional fix: Drag-and-drop to pinned tabs bar
During implementation, discovered that we couldn't drag tabs to the end
of the pinned tabs bar. This PR also adds:
- A drop target at the end of the pinned tabs row
- Proper pinning behavior when dropping unpinned tabs to the pinned area
- Keeps the dragged tab active after drop
Release Notes:
- Fixed the missing right border on pinned tabs when
`show_pinned_tabs_in_separate_row` is enabled.
- Fixed drop target at the end of the pinned tabs row
- Fixed pinning behavior when dropping unpinned tabs to the pinned area
- Fixed case when the dragged tab was not active after drop (when enable
`"tab_bar": { "show_pinned_tabs_in_separate_row": true }` in settings)
---------
Co-authored-by: Joseph T. Lyons <JosephTLyons@gmail.com>
Co-authored-by: Danilo Leal <daniloleal09@gmail.com>
Yaroslav Yenkala
,
Joseph T. Lyons
, and
Danilo Leal
created
27ab898
project_panel: Fix mixed sort with incorrect ordering when same file and dir name (#47863)
Click to expand commit body
Closes #47678
When using mixed sort mode in the project panel, a folder and file with
the same name but different case (e.g., `hello` folder and `Hello.txt`
file) would sort incorrectly. The file could appear between an expanded
folder and its contents.
The issue was in `compare_rel_paths_mixed`: the tie-breaker logic used
case-sensitive comparison (`a == b`) to decide directory-before-file
ordering, but `natural_sort_no_tiebreak` already considers entries equal
case-insensitively. Changed to use `eq_ignore_ascii_case` to match.
Release Notes:
- Fixed project panel mixed sort mode ordering incorrectly when a file
and folder share the same name with different casing.
Luis
created
909c147
git_ui: Add git init button to empty repository state (#49203)
Click to expand commit body
Release Notes:
- Git: Added `git init` button that quickly allows to turn an empty
repository into a Git repository.
https://github.com/user-attachments/assets/58b0d49f-b813-4d1c-a086-4bd21d226916
Signed-off-by: Xiaobo Liu <cppcoffee@gmail.com>
Xiaobo Liu
created
506570a
git_graph: Add resizable commit view support (#49171)
Click to expand commit body
This PR add support for resizable commit view, so you can increase the
commit view width by hand.
https://github.com/user-attachments/assets/47b3d165-1d5b-4c5c-b36d-dc007d62fd43
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 (no release notes since it's behind a feature flag)
Brought the Markdown notification rendering up to date with how Markdown
is used in the Agent panel and REPL.
Removed async parsing overhead and simplified the code by using the
markdown crate API directly.
This is preparatory work, my ultimate goal is to make markdown_preview
use markdown to parse and render md to [fix not being able to select and
copy content](https://github.com/zed-industries/zed/issues/16727)
|Current|Now|
|-|-|
|<img width="469" height="258" alt="Capture d’écran du 2026-02-01
22-39-39"
src="https://github.com/user-attachments/assets/6e416b9d-aef8-4202-b3ce-8c22602d0fbd"
/>|<img width="458" height="200" alt="Capture d’écran du 2026-02-01
22-37-16"
src="https://github.com/user-attachments/assets/bd590f17-0448-4cbc-a6df-9aecfa0754e8"
/>|
Release Notes:
- N/A
Nicolas Le Cam
created
2c097ef
Add automatic syntax highlighting for GeoJSON files (#49261)
Click to expand commit body
GeoJSON is a popular geospatial data interchange format, standardised as
[RFC 7946](https://datatracker.ietf.org/doc/html/rfc7946). Because all
GeoJSON files are valid JSON files, they can be highlighted using Zed's
existing JSON language support.
This change adds `geojson` as a recognised path suffix, so GeoJSON files
automatically open as JSON and get the standard JSON syntax
highlighting.
Before and after screenshots:
<img width="1748" height="755" alt="geojson"
src="https://github.com/user-attachments/assets/40199248-1ce5-451e-9200-5b2f012b865f"
/>
Release notes:
- Added automatic syntax highlighting for GeoJSON files
Matt Riggott
created
01ac5a8
workspace: Use FolderOpen icon for active workspace project (#49180)
Click to expand commit body
Differentiate the active workspace in the sidebar project list by using
IconName::FolderOpen instead of IconName::Folder
Before:
<img width="1761" height="1196" alt="Image"
src="https://github.com/user-attachments/assets/1a6d3708-9e3b-4ebc-b8e5-7b68194e55b7"
/>
After:
<img width="1717" height="1152" alt="image"
src="https://github.com/user-attachments/assets/1784dc83-b38a-4f6a-8984-ccd3b877b100"
/>
Closes #49179
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:
- Improved active project in the workspace by changing the icon from
Folder to FolderOpen
Release Notes:
- Diff hunk controls now stick to the top of the editor viewport if the
top part of the hunk is outside the viewport
Lukas Wirth
created
b6c48b6
search: Fix collapse/expand all button sync (#48773)
Click to expand commit body
Derive collapsed state from `Editor.has_any_buffer_folded` instead of
tracking it separately, removing redundant `ResultsCollapsedChanged` event
and stale `is_collapsed`/`results_collapsed` fields.
Closes #48734
Release Notes:
- Fixed collapse/expand all button in buffer search and project search
not syncing correctly when toggling individual file sections
---------
Signed-off-by: Benjamin <5719034+bnjjj@users.noreply.github.com>
Co-authored-by: dino <dinojoaocosta@gmail.com>
Coenen Benjamin
and
dino
created
24dbd21
agent: Prompt for permission for symlinks outside the project (#49255)
Click to expand commit body
It's possible that a given project/workspace has symlinks that go
outside the current directories. In order to alert the user of some
potential files the agent is accessing they may not be expecting, we ask
for permission first.
Release Notes:
- agent: Prompt for permission if the agent tries to access files whose
symlinks resolve outside the current workspace
Ben Brandt
created
2f439e5
Stop notifying first responders for closed bugs (#49253)
Click to expand commit body
Release Notes:
- N/A
Lena
created
d83d9d3
Fix API errors where tool_result blocks are sent without their corresponding tool_use blocks in the assistant message (#48002)
Click to expand commit body
When a tool's JSON response fails to parse, the system would:
1. Create a `LanguageModelToolResult` with the error
2. Add it to `pending_message.tool_results`
3. **Never add the corresponding `ToolUse` to
`pending_message.content`**
This left an orphaned `tool_result` that would be sent to the LLM API
without a matching `tool_use` block, causing the provider to reject the
entire request with an error like:
```
messages: Assistant message must contain at least one content block, if
immediately followed by a user message with tool_result
```
The issue was in `handle_tool_use_json_parse_error_event()`. It created
and returned a `LanguageModelToolResult` (which gets added to
`tool_results`), but **failed to add the corresponding `ToolUse` to the
message `content`**.
This asymmetry meant:
- `pending_message.content`: [] (empty - no ToolUse!)
- `pending_message.tool_results`: {id: result}
When `AgentMessage::to_request()` converted this to API messages, it
would create:
- Assistant message: no tool_use blocks ❌
- User message: tool_result block ✅
APIs require tool_use and tool_result to be paired, so this would fail.
**Without this fix, the conversation becomes permanently broken** -
every subsequent message in the thread fails with the same API error
because the orphaned tool_result remains in the message history. The
only recovery is to start a completely new conversation, making this a
particularly annoying bug for users.
Modified `handle_tool_use_json_parse_error_event()` to:
1. **Add the `ToolUse` to `pending_message.content`** before returning
the result
2. Parse the raw_input JSON (falling back to `{}` if invalid, as the API
requires an object)
3. Send the `tool_call` event to update the UI
4. Check for duplicates to avoid adding the same `tool_use` twice
This ensures `tool_use` and `tool_result` are always properly paired.
Added comprehensive test coverage for
`handle_tool_use_json_parse_error_event()`:
- ✅ Verifies tool_use is added to message content
- ✅ Confirms tool_use has correct metadata and JSON fallback
- ✅ Tests deduplication logic to prevent duplicates
- ✅ Validates JSON parsing for valid input
## Manual Testing
To reproduce and test the fix:
1. Install the test MCP server:
```bash
cargo install --git https://github.com/dastrobu/mcp-fail-server
```
3. Add to Zed settings to enable the server:
```json
{
"context_servers": {
"mcp-fail-server": {
"command": "mcp-fail-server",
"args":[]
}
}
}
```
4. Open the assistant panel and ask it to use the `fail` tool
5. Without the fix: The conversation breaks permanently - every
subsequent message fails with the same API error, forcing you to start a
new thread
<img width="399" height="531" alt="image"
src="https://github.com/user-attachments/assets/533bdf40-80d3-4726-a9d9-dbabbe7379e5"
/>
7. With the fix: The error is handled gracefully, displayed in the UI,
and the conversation remains usable
<img width="391" height="512" alt="image"
src="https://github.com/user-attachments/assets/73aa6767-eeac-4d5d-bf6f-1beccca1d5cb"
/>
The mcp-fail-server always returns an error, triggering the JSON parse
error path that previously caused orphaned tool_result blocks.
Release Notes:
- Fixed an issue where errors could occur in the agent panel if an LLM
emitted a tool call with an invalid JSON payload
---------
Co-authored-by: Bennet Bo Fenner <bennetbo@gmx.de>
Daniel Strobusch
and
Bennet Bo Fenner
created
c4f9868
Revert "gpui: Defer thermal/keyboard state updates when app is borrowed" (#49251)
Click to expand commit body
Reverts #49189
Reverts #49187
#49189 introduces a panic
(https://github.com/zed-industries/zed/pull/49189#issuecomment-3904914597,
https://github.com/zed-industries/zed/issues/49181#issuecomment-3906639392)
#49187 It's wrong since it leads to missing updates
The original crash should be fixed with #49086
cc: @bennetbo
Release Notes:
- N/A
Marco Mihai Condrache
created
7f982ca
Simplify calculation of Windows client area size (#49249)
Click to expand commit body
Delete all the hacks and do things properly instead.
Closes https://github.com/zed-industries/zed/issues/45574
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
Release Notes:
- N/A
Release Notes:
- Fixed SVG preview always opening a new tab instead of reusing an
existing one for the same file.
Smit Barmase
created
2c59293
gpui: Fix thermal state notifications on intel macOS (#49086)
Click to expand commit body
Fixes
https://github.com/zed-industries/zed/pull/45638#issuecomment-3893732034
Closes #49005
The issue was similar to the one we already had with the quit method
https://github.com/zed-industries/zed/blob/8249ef56187b966c33f6667d0d3a35d88d8f2dc0/crates/gpui/src/platform/mac/platform.rs#L491
@notpeter Could you please test this branch to confirm it resolves the
issue?
- [ ] Tests or screenshots needed?
- [x] Code Reviewed
- [ ] Manual QA
Release Notes:
- Fixed an issue where Zed would randomly crash on macOS intel
Marco Mihai Condrache
created
f3c6dcf
extensions_ui: Apply category filter to dev extensions (#48954)
Click to expand commit body
Following up on #49183 which fixed the category filter for remote
extensions.
This PR applies the same category filter logic to **dev extensions**.
Previously, dev extensions were always shown regardless of the selected
category filter (e.g., "Themes", "Languages").
Changes:
- Add `filtered_dev_extension_indices` to track which dev extensions
match the active `provides_filter`
- Add `dev_extension_matches_provides()` helper to map
`ExtensionManifest` fields to `ExtensionProvides` variants
- Update `render_extensions()` and list count to use filtered dev
extension indices
Release Notes:
- Fixed extension category filter not applying to dev extensions in the
extensions panel.
---------
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Marshall Bowers <git@maxdeviant.com>
chenwuji2000-cyber
,
Claude
, and
Marshall Bowers
created
e2f3d5e
collab: Update test database schema (#49242)
Click to expand commit body
This PR updates the database schema for Collab tests.
Release Notes:
- N/A
Marshall Bowers
created
982e716
docs: Simplify Deno test task example (#49235)
Click to expand commit body
Closes #48537
**Explanation:**
The Deno test task example wasn't appearing because the undefined
ZED_CUSTOM_DENO_TEST_NAME variable made the filter invalid. Instead of
adding a default value, simplify the example to run all tests in the
file, which is the most common use case and works out of the box.
Before you mark this PR as ready for review, make sure that you have:
Screenshots:
Before:
<img width="3434" height="1349" alt="image"
src="https://github.com/user-attachments/assets/bc514103-9b33-489f-a69e-84257ea82acf"
/>
After:
<img width="3438" height="1376" alt="image"
src="https://github.com/user-attachments/assets/47674dde-ede8-4a9d-b365-d2df8e128e18"
/>
Release Notes:
- N/A
This reverts commit 0f84a366d94ed53af05517938d34b199cb650b5a.
We're reverting #49047, as it has led to different kinds of panics.
Release Notes:
- Reverted #49047.
Marshall Bowers
created
ae5abf0
Remove dependency on bm25. Use exact prefix match in settings UI search instead (#49231)
Click to expand commit body
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: Zed Zippy <234243425+zed-zippy[bot]@users.noreply.github.com>
Ben Kunkle
and
Zed Zippy
created
2ccbed0
extension: Make `provides` a method on `ExtensionManifest` (#49234)
Click to expand commit body
This PR takes the `extension_provides` method from the `extension_cli`
and makes it a method on `ExtensionManifest`.
Release Notes:
- N/A
Marshall Bowers
created
28c82ec
docs: Add content about the theme builder (#49229)
Click to expand commit body
Release Notes:
- N/A
Danilo Leal
created
9dd3f3a
docs: Add some adjustments to the AI pages (#49227)
Click to expand commit body
Updating content with more detailed information, cross-linking pages
when useful (primarily the new docs for tool permissions), rearranging
information architecture a bit (e.g., putting examples last and
guidelines first, putting text threads vs. threads disclaimer above
everything, etc.), removing outdated images, etc.
Release Notes:
- N/A
---------
Co-authored-by: Zed Zippy <234243425+zed-zippy[bot]@users.noreply.github.com>
Just some styling house-keeping in the docs; simple stuff.
Release Notes:
- N/A
Danilo Leal
created
87ff3eb
editor: Fix to remove non-functional folding creases from the gutter (#49200)
Click to expand commit body
Lsp-based folding disables indentation-based folding. Even though
indentation-based folding is non-functional, the crease icon is still
displayed in the gutter. This PR fixes this mismatch.
Before:
<img width="651" height="199" alt="before"
src="https://github.com/user-attachments/assets/ebd202e8-9eda-43c9-adbd-767e9802e590"
/>
After:
<img width="666" height="197" alt="after"
src="https://github.com/user-attachments/assets/b498e325-cd06-4c51-afdb-fcda4f1a25e6"
/>
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:
- Removed non-functional folding creases from the gutter.
Co-authored-by: ozacod <ozacod@users.noreply.github.com>
ozacod
and
ozacod
created
99a558f
gpui: Defer thermal/keyboard state updates when app is borrowed (#49189)
Click to expand commit body
Follow-up to #49187.
Instead of silently skipping updates when `try_borrow_mut` fails, this
PR defers the update by spawning it on the foreground executor. This
ensures the state change is eventually processed after the current
borrow completes.
Release Notes:
- N/A
## Summary
This PR establishes the foundation for documentation quality and
automation.
## Documentation Conventions (`docs/.conventions/`)
**CONVENTIONS.md** - Structural guidelines covering:
- What needs documentation vs what to skip
- Page vs section decisions (with examples)
- Document structure and section ordering
- Formatting conventions (code, JSON, tables, callouts)
- Anchor ID patterns for stable deep-linking
- Settings documentation pattern (UI first, then JSON)
- Terminology standards (aligned with docs/AGENTS.md)
- Prettier formatting requirements
**brand-voice/** - Zed's writing style:
- `SKILL.md` - Core voice principles
- `rubric.md` - 8-point scoring criteria (must score 4+ on all)
- `taboo-phrases.md` - Patterns to avoid (exclamation points, hype
words)
- `voice-examples.md` - Before/after transformations
## Gold Standard Examples (`docs/.doc-examples/`)
Four templates demonstrating best practices:
- `simple-feature.md` - Overview/navigation docs
- `complex-feature.md` - Comprehensive feature docs
- `configuration.md` - Settings documentation
- `reference.md` - API/tool reference
## Related
Follow-up PR #49177 applies these conventions to existing documentation.
Release Notes:
- N/A
morgankrey
created
9eb6fc0
gpui: Fix RefCell panic in thermal/keyboard state callbacks (#49187)
Click to expand commit body
The `on_thermal_state_change` and `on_keyboard_layout_change` callbacks
in `App::new_app()` called `borrow_mut()` unconditionally. These
callbacks are invoked asynchronously by macOS via dispatch queues when
the system's thermal or keyboard state changes, which can happen while
the app's RefCell is already borrowed during an update cycle, causing a
panic.
This change uses `try_borrow_mut()` instead. If the borrow fails
(because the app is already borrowed), the callback silently skips the
update - the state can be queried on the next frame.
Fixes [ZED-4WM](https://zed-dev.sentry.io/issues/ZED-4WM)
Closes #49181
Release Notes:
- Fixed a crash on macOS caused by thermal or keyboard layout state
changes occurring during UI updates.
morgankrey
created
d89ee32
extensions_ui: Respect category filter for installed extensions when searching (#49183)
Click to expand commit body
This PR updates the extensions UI to respect the category filter for
already-installed extensions when searching for extensions.
Closes #48628.
Release Notes:
- The extension search will now properly respect the category filter for
extensions that are already installed
([#48628](https://github.com/zed-industries/zed/issues/48628)).
Marshall Bowers
created
e4f2492
debugger: Fix panic at non-UTF-8 character in paths on Linux (#49103)
Click to expand commit body
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
cui
created
180d320
auto_update_ui: Set a title when viewing release notes locally (#49153)
Click to expand commit body
| before | after |
| - | - |
| <img width="447" height="177" alt="image"
src="https://github.com/user-attachments/assets/bf030e11-5c03-43c6-8a7b-ff7057bada5f"
/> | <img width="463" height="176" alt="image"
src="https://github.com/user-attachments/assets/e6f6a3d5-e454-469f-adb4-62a38181cb6f"
/> |
Title for markdown preview is still the same:
<img width="463" height="176" alt="image"
src="https://github.com/user-attachments/assets/b83fdf54-804f-4f98-8d3b-0c7b93f44b83"
/>
Closes https://github.com/zed-industries/zed/issues/47385
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 title of the release notes local preview
Reverts the whole "project search on type" set of PRs until we figure
out better ways to deal with flickering between search results
appearing.
Release Notes:
- N/A
Kirill Bulatov
created
0f84a36
multi_buffer: Fix "cannot seek backward" crash in summaries_for_anchors (#49047)
Click to expand commit body
## Bug
**Sentry:**
[ZED-3W3](https://sentry.io/organizations/zed-dev/issues/7085300207/)
(13 events, first seen 2025-12-03)
`summaries_for_anchors` panics with "cannot seek backward" when
iterating selection anchors whose excerpt locators are no longer in
ascending order after an `update_path_excerpts` call.
### Root cause
`update_path_excerpts` merges new excerpt ranges with existing ones.
When an existing excerpt has no overlap with any new range (e.g.
`existing_range.end < new.context.start`), it is removed from the
excerpts tree but is **not** recorded in `replaced_excerpts`. Its stale
locator persists in the `excerpt_ids` tree.
Later, when a new excerpt is inserted for a different path whose locator
falls between the stale locator and another surviving excerpt,
`summaries_for_anchors` can encounter anchors in an order where it needs
to seek the cursor *backward* — violating the forward-only cursor
invariant.
Concretely, the scenario requires:
1. A path with ≥3 excerpts (E_B1, E_B2, E_B3) with anchors in E_B2 and
E_B3.
2. An `update_path_excerpts` call that keeps E_B1, **removes E_B2** (no
overlap → no `replaced_excerpts` entry), and replaces E_B3 with a new
excerpt N.
3. A new path D inserted between paths B and C, whose excerpt E_D gets a
locator between N and E_B2's stale locator.
4. Resolving the old anchors: E_B2's stale locator seeks past E_D, then
E_B3→N tries to seek backward to N — **panic**.
## Fix
In the two branches of `update_path_excerpts` where existing excerpts
are removed without being absorbed into a new range, map the removed
excerpt to the nearest surviving neighbor (the last kept or inserted
excerpt) in `replaced_excerpts`. This ensures stale anchors always remap
to a valid, correctly-ordered locator.
The two branches are:
- `existing_range.end < new.context.start` — existing excerpt falls
entirely before the next new range
- `(None, Some(...))` — no more new ranges for remaining existing
excerpts
## Verification
- A reproduction test
(`test_cannot_seek_backward_after_excerpt_replacement`) that constructs
the exact crash scenario now passes.
- Full `multi_buffer` test suite (48 tests) passes with no regressions.
- Clippy is clean.
Release Notes:
- Fixed a possible crash when updating excerpts in multibuffers
Eric Holk
created
3023cf3
chore: remove no-longer needed search_on_input=false toggle before tests (#49161)
Click to expand commit body
Just cleaning up after myself.
When search_on_input was toggled default [in this
PR](https://github.com/zed-industries/zed/pull/42889/changes/1f831e028d4de9e872a78b0af8b9d24e33f7d3c7)
I toggled it to false before a few tests that weren't expecting it.
Then [this PR changed](https://github.com/zed-industries/zed/pull/49150)
it to be false by default and the extra toggle before the tests slipped
through.
Think it's a good idea to remove this to avoid any confusion in the
future.
@SomeoneToIgnore
Release Notes:
- N/A
holoflash
created
c932dd1
recent_projects: Check for WSL paths in OpenFolderInWsl (#49156)
Click to expand commit body
Closes #42842
Previously, OpenFolderInWsl action assumed a valid path is on the host
and failed to open paths inside the WSL filesystem (accessed through
UNC)
Now the action checks for a WSL path and opens it with the appropriate
distro (skipping the choice modal)
This was manually confirmed to not regress as well as work with WSL
paths.
Code was written by hand, with extra checking by OpenAI Codex.
Release Notes:
- Fixed paths inside the WSL filesystem failing to open when using "open
folder in wsl"
Release Notes:
- Fixed prevent shell command injection in conda environment activation
The conda environment name was directly interpolated into the shell
command without proper escaping, which could allow command injection
if the environment name contained malicious shell metacharacters.
Signed-off-by: Xiaobo Liu <cppcoffee@gmail.com>
Document how to configure the Tailwind CSS language server for the
following languages:
- Astro
- Elixir
- HTML
- PHP
- Svelte
- Vue
Refs: #43969
Release Notes:
- N/A
---------
Co-authored-by: Kunall Banerjee <hey@kimchiii.space>
Follow-up of https://github.com/zed-industries/zed/pull/48611
Despite Zed not declaring such support in its capabilities,
https://github.com/zed-industries/zed/blob/a0eb63d1affb6e7b7991e477c7e05824d0250255/crates/lsp/src/lsp.rs#L1010-L1016
`json-language-server` returns `object` as a folding range kind:
<img width="1728" height="720" alt="bad"
src="https://github.com/user-attachments/assets/ee574879-8657-41c8-ab12-562f3882f057"
/>
The spec, even 3.18, does not really seem to allow it explicitly:
https://microsoft.github.io/language-server-protocol/specifications/lsp/3.18/specification/#foldingRangeKind
but mentions that the real type
> The type is a string since the value set is extensible
The PR adds a capture enum variant for such cases, to get the folds in
instead of failing on deserialization.
See also: https://github.com/zed-industries/lsp-types/pull/10
Release Notes:
- Fixed `json-language-server` document folds not being parsed correctly
Follow-up of https://github.com/zed-industries/zed/pull/42889
* disable by default
* add a configurable debounce, 200ms default
Release Notes:
- N/A
Kirill Bulatov
created
63ea242
docs: Add rules hygiene guidance for AI agents (#49143)
Click to expand commit body
## Summary
- Adds a "Rules Hygiene" section to `.rules` after the existing Build
Guidelines section
- Establishes clear guidelines for when/how AI agents should propose
`.rules` changes
- Adds a "Crash Investigation" section with reference to
`script/crash-to-prompt` and other crash tooling
## What's in the Rules Hygiene section
**After any agentic session:** Agents should include a "Suggested .rules
additions" heading in their PR description if they discover non-obvious
patterns. Reviewers decide what gets merged.
**High bar for new rules:** Editing existing rules is always welcome.
New rules must be (1) non-obvious, (2) repeatedly encountered, and (3)
specific enough to act on. Single-crate rules go in that crate's
`.rules`.
**No drive-by additions:** Rules emerge from validated patterns through
a 3-step workflow: agent notes pattern → team validates → dedicated
commit.
## Context
Part of the Background Agent Pipeline initiative (BIZOPS-801). As we
scale automated crash investigation, we need guardrails to prevent
`.rules` bloat from agent sessions.
## Test plan
- [ ] Open a test agent session and confirm it sees the Rules Hygiene
guidance
- [ ] Verify the guidance is clear enough to follow without additional
context
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
morgankrey
and
factory-droid[bot]
created
6db4a25
Don’t foreground minimized windows when changing displays (#48902)
Click to expand commit body
on windows 10, When a laptop is plugged into or unplugged from a
monitor, Zed and my using GPUI app will restore from minimized state to
the foreground.
Closes #ISSUE
- [ ] Tests or screenshots needed?
- [ ] Code Reviewed
- [ ] Manual QA
Release Notes:
- N/A *or* Added/Fixed/Improved ...
---------
Co-authored-by: John Tur <john-tur@outlook.com>
Jary
and
John Tur
created
39063ab
agent_ui: Use circular progress component for displaying context window use (#49138)
Click to expand commit body
This PR uses the recently introduced `CircularProgress` component to
display context window use information. It creates more space for the
message editor controls as well as simplifies the UI a little bit.
Through a tooltip, we communicate the same things we communicated before
(and more, actually, because rules use will be displayed there, too).
Note that this doesn't touch the display of split token use (for models
like GPT and whatnot).
<img width="500" height="484" alt="Screenshot 2026-02-13 at 6 16@2x"
src="https://github.com/user-attachments/assets/831cdfbf-fddd-4a11-8ac6-e9a25609aae9"
/>
Release Notes:
- Agent: Simplified context window use display by using a circular
progress component.
Danilo Leal
created
ed9150f
docs: SEO content improvements for AI section (#49128)
Click to expand commit body
## Summary
- **Add category-claiming keywords** to 4 key AI doc intros (overview,
agent panel, edit prediction, configuration) so Google associates these
pages with "AI code editor" search terms
- **Expand AI overview into a pillar page** with substantive feature
summaries and a "How Zed approaches AI" differentiation section (open
source, native performance, multi-model, external agents, privacy)
- **Improve internal linking** across 11 files to strengthen the AI
topic cluster
## Internal linking changes
**Inbound links (non-AI docs → AI section):**
- `editing-code.md` → AI overview
- `terminal.md` → Inline Assistant + Agent Panel
- `configuring-zed.md` → AI Configuration
- `remote-development.md` → AI overview
**Fix orphans within AI section:**
- `billing.md` linked to subscription + plans (was orphaned with zero
internal links)
- `tools.md`, `rules.md`, `llm-providers.md`, `tool-permissions.md`,
`models.md` all now cross-link to related AI pages
**Outbound:**
- `overview.md` → `zed.dev/ai` and `getting-started.md`
## Test plan
- [ ] `mdbook build docs` succeeds
- [ ] Spot-check links resolve correctly in built output
- [ ] Review overview.md content for docs voice fit
🤖 Generated with [Claude Code](https://claude.com/claude-code)
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>