fd1d5fc
settings_ui: Fix Ollama icon and other small UI details in EP subpage (#48612)
Click to expand commit body
Taking out unnecessary icons and description text, too!
Release Notes:
- N/A
Danilo Leal
created
6c253a7
Add `textDocument/foldingRange` LSP support (#48611)
Click to expand commit body
Closes https://github.com/zed-industries/zed/issues/28091
Off in language settings by default: ` "lsp_folding_ranges": "off",`,
when enabled, disables tree-sitter indent-based folding and enables
fetching of LSP ones instead.
Falls back to tree-sitter if LSP-based one brings no results.
Release Notes:
- Added `textDocument/foldingRange` LSP support, use `
"lsp_folding_ranges": "on",` language settings to fetch and prefer the
LSP folds
Kirill Bulatov
created
101a53d
Respect workspace override in `git: diff` (#48535)
Click to expand commit body
Closes #ISSUE
Release Notes:
- Fixed an issue where the `git: diff` action would not respect the
active worktree
* split more logic away into its own modules for document colors, code
lens and inlay hints
* remove unnecessary cache_version for document colors
Release Notes:
- N/A
Kirill Bulatov
created
4f8ff64
Fix settings migrations for nested platform/channel/profile keys (#48550)
Click to expand commit body
Previously, some settings migrations only operated on root-level keys
and missed settings nested under platform keys (`macos`, `linux`, etc.),
channel keys (`nightly`, `stable`, etc.), or profile blocks. This fixes
migrations to recurse into those nested locations.
Also fixes `m_2026_02_02` to gracefully skip when `edit_predictions` is
not an object (e.g. `true`) instead of bailing and aborting the entire
migration chain.
Release Notes:
- Fixed settings migrations to correctly handle settings nested under
platform, channel, or profile keys.
Richard Feldman
created
aa33a50
language_models: Enable setting reasoning effort for OpenAI models through Zed provider (#48605)
Click to expand commit body
This PR adds support for setting the reasoning effort for OpenAI models
through the Zed provider.
This is gated behind the `cloud-thinking-effort` feature flag.
Release Notes:
- N/A
Co-authored-by: Tom Houlé <tom@tomhoule.com>
Marshall Bowers
and
Tom Houlé
created
35459f0
Detect and reject overlapping edit ranges in streaming_edit_file_tool (#48547)
Click to expand commit body
In `streaming_edit_file_tool.rs`, edits are sorted in reverse order and
applied sequentially. If the LLM produces overlapping edit ranges, the
first applied edit shifts the buffer, and the second edit's range
targets stale offsets, leading to incorrect results.
This adds a `windows(2)` check on the sorted (descending by start) edits
that verifies each earlier-in-file range's end does not exceed the next
later-in-file range's start. The validation is done before entering the
buffer update closure so the error can propagate cleanly via
`anyhow::bail!`.
Release Notes:
- Fixed bug where streaming edits could apply edits incorrectly if the
model requested overlapping edit regions.
Richard Feldman
created
3d57951
feature_flags: Rename `cloud-thinking-toggle` feature flag (#48598)
Click to expand commit body
This PR renames the `cloud-thinking-toggle` feature flag to
`cloud-thinking-effort`.
This feature flag has expanded slightly in scope, so we want the name to
be more representative of what it gates.
Release Notes:
- N/A
Co-authored-by: Tom Houlé <tom@tomhoule.com>
Marshall Bowers
and
Tom Houlé
created
8e56667
git: Implement `OpenExcerpts` for the left side of the side-by-side diff (#48438)
Click to expand commit body
By opening the corresponding positions in the corresponding main
buffers.
Release Notes:
- N/A
Cole Miller
created
e2267ab
Fix text_threads_dir() non-compliance with XDG spec (#45771)
Click to expand commit body
Closes #41373
Release Notes:
- Ensures that XDG specs are followed on MacOS and Linux with backwards
compatibility.
Changes
-Added ```state_dir``` to get XDG_STATE_HOME on macos and linux, no
change to windows.
-Changed ```text_threads_dir``` to a fallback,
```text_threads_dir_fallback```
-Re-implemented ```text_threads_dir``` to use ```state_dir```
---------
Co-authored-by: AdamJedl <100023363+AdamJedl@users.noreply.github.com>
Marcus Mäkilä
and
AdamJedl
created
7377cb6
Canonicalize --user-data-dir path to match file watcher events (#48470)
Click to expand commit body
This commit updates the `paths::set_custom_data_dir` implementation so
as to always canonicalize the provided `dir`, even when dealing with an
absolute path.
This ensures that we correctly deal with symlinks and don't end up not
reacting to filesystem watcher events in this specific case. For
example, when using `--user-data-dir /tmp/zed` on macOS, since `/tmp` is
a symlink to `/private/tmp`, if any setting was changed, the application
would not react, as the event would be using
`/private/tmp/zed/config/settings.json`, while the watcher would be
looking out for `/tmp/zed/config/settings.json`.
Lastly, the canonicalization of the path is now done after
`std::fs::create_dir_all` is called, in order to guarantee that the
directory already exists at that point.
Release Notes:
- N/A
Dino
created
4167f17
SplittableEditor: Sync custom blocks between RHS and LHS editors (#48575)
Click to expand commit body
Release Notes:
- Added handling of custom blocks in the RHS editor by creating matching
dummy custom blocks rendered as spacer blocks in the LHS editor when in
split view.
Jakub Konka
created
669f8cc
project_panel: Refactor selection state ownership (#48586)
Click to expand commit body
This PR moves `selection` from `State` to `ProjectPanel`.
In async `update_visible_entries`, the `old.selection` copied into
`new_state` was never read or updated. After async completion, we
already either set the new selection (when provided) or keep the current
selection value. So storing `selection` in `State` was redundant.
This simplifies a confusing code path without changing behavior.
Release Notes:
- N/A
Smit Barmase
created
7667fd3
Tidy up semantic tokens settings ui (#48581)
fe0f7f3
project_panel: Fix previous selection not restoring when filename editor blurs (#48578)
Click to expand commit body
Prep for: https://github.com/zed-industries/zed/pull/46750
Edit-state cleanup in the Project Panel was inconsistent between Escape
cancel and blur. Blurring the filename editor during file/folder
creation could clear edit state without restoring the previous
selection.
This routes both paths through the same discard flow and adds test
coverage for the blur case.
Release Notes:
- Fixed an issue where blurring the filename editor in the Project Panel
could lose the previous selection while creating a file or folder.
In combination with auto-labeling staff PRs, this makes it possible to
see the community PRs with `-label:staff -label:bot` in the search query
on https://github.com/zed-industries/zed/pulls
Release Notes:
- N/A
Modifying the existing github workflow here instead of adding a new one
because we're already triggering on the same thing (new PR opened) and
checking the same thing (staff team membership) but throwing away the
result. Another CI job doing largely the same checks seemed unnecessary.
Release Notes:
- N/A
Lena
created
c430681
Do not pass zeta prompt format in production endpoint (#48541)
Click to expand commit body
This allows us to switch the prompt format without client-side changes.
If we want to experiment with prompt formats or models other than the
currently-deployed one, we can use the raw endpoint, and do prompt
construction and output processing on the client.
This also adds an optional environment parameter to the raw endpoint, so
that we can use that endpoint in the new scheme where we're deploying to
separate environments for different zeta prompt versions.
Release Notes:
- N/A
Max Brunsfeld
created
2cecdab
Don't watch parent directory of global gitexcludes file (#48408)
Click to expand commit body
Closes: #48560
Release Notes:
- Fixed an issue where Zed would try to open all edited files in ~ if
your git config had a globalexludes in ~ that did not exist.
---------
Co-authored-by: Cole Miller <cole@zed.dev>
Conrad Irwin
and
Cole Miller
created
7cb4d75
Housekeeping: Improve error handling and small fixes (#48552)
Click to expand commit body
A collection of small independent fixes:
- **Visual test runner**: Replace ~20 instances of `.ok()` and `let _ =`
with `.log_err()` to avoid silently discarding errors per project
guidelines.
- **recent_projects**: Add missing `remote_connection/test-support` to
the `test-support` feature gate.
- **util/shell.rs**: Add doc comment on `supports_posix_chaining()`
explaining its relationship to tool permission pattern matching.
Release Notes:
- N/A
Richard Feldman
created
ff4489f
Revert "Remove VS Code references from Copilot integration" (#48555)
9860106
agent: Add support for setting thinking effort for Zed provider (#48545)
Click to expand commit body
This PR adds the ability to set the thinking effort of a model.
Right now this only applies to Opus 4.6 through the Zed provider.
This is gated behind the `cloud-thinking-toggle` feature flag.
UI is still rough; needs a design pass:
<img width="639" height="163" alt="Screenshot 2026-02-05 at 7 45 54 PM"
src="https://github.com/user-attachments/assets/2b5a9ef8-74cd-498e-9c81-b92666572409"
/>
<img width="263" height="148" alt="Screenshot 2026-02-05 at 7 45 58 PM"
src="https://github.com/user-attachments/assets/40232cb0-1743-443b-b04c-5cd33065513d"
/>
Release Notes:
- N/A
Searching (and related vim stuff like `*`/`n`/`N`) now work in the LHS
of a
split diff.
Also fixes the bug with indent guides being visible through the spacer
checkerboard pattern.
Release Notes:
- N/A
This PR adds a new `enable_thinking` setting for the default model,
which controls whether the model uses thinking or not.
Release Notes:
- N/A
Marshall Bowers
created
0d9bcf0
Fix Codestral API key credentials URL mismatch (#48513)
Click to expand commit body
Closes #46506
Release Notes:
- Fixed an issue where the codestral URL used for credentials would be
different than the one used for requests causing authentication errors
Ben Kunkle
created
e4d8209
agent_ui: Add additional telemetry for thread errors (#47971)
Click to expand commit body
This PR extends error telemetry coverage in the agent panel, building on
#46836 which added telemetry for thread errors.
`"Agent Panel Error Shown"` (extended)
Now also fires for:
- **Load errors** - when an agent fails to start
- **Configuration errors** - when LLM provider setup is incomplete
`"Agent Token Limit Warning"` (new event)
Fires when a thread approaches or exceeds its token/context limit. This
is tracked separately from errors because it's an informational warning,
not a failure.
## Implementation Notes
- All telemetry fires **once per error occurrence**, not on every render
- Load error telemetry fires in `handle_load_error()` when the error is
first received
- Token limit telemetry uses a flag to track state transitions (Normal →
Warning → Exceeded)
- Configuration error telemetry tracks the last emitted error kind to
avoid duplicates
Release Notes:
- N/A *or* Added/Fixed/Improved ...
---------
Co-authored-by: Michael Benfield <mbenfield@zed.dev>
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Katie Geer
,
Michael Benfield
, and
Claude Opus 4.5
created
a2ca075
language_model: Add `supported_effort_levels` method to `LanguageModel` (#48523)
Click to expand commit body
This PR adds a new `supported_effort_levels` method to the
`LanguageModel` trait.
This can be used to retrieve the list of effort levels that the model
supports, which will eventually be used to drive the UI for selecting
the thinking effort.
Right now this list will only be populated for Cloud models.
Release Notes:
- N/A
Marshall Bowers
created
5259b24
settings_ui: Fix tab navigation in edit predictions settings (#48530)
Click to expand commit body
The provider dropdown and GitHub Copilot sign-in button were not
tab-navigable because they lacked tab_index. The copilot button
conditionally sets tab_index only when edit_prediction is true, since
it's also used in the agent configuration panel where tab navigation
isn't used.
Closes #48391
Release Notes:
- Fixed focus skipping provider dropdown and GitHub Copilot button in
edit prediction settings
Release Notes:
- N/A
Co-authored-by: Max <max@zed.dev>
Co-authored-by: Piotr <piotr@zed.dev>
Mikayla Maki
,
Max
, and
Piotr
created
4144422
ep: Fix `parse-output` for repaired outputs (#48529)
Click to expand commit body
Release Notes:
- N/A
Oleksiy Syvokon
created
72a12eb
Remove VS Code references from Copilot integration (#48528)
Click to expand commit body
Release Notes:
- N/A
Mikayla Maki
created
a22092c
settings_content: Remove unused methods from `AgentSettingsContent` (#48526)
Click to expand commit body
This PR removes some unused methods from the `AgentSettingsContent`
type.
Release Notes:
- N/A
Marshall Bowers
created
0e29766
Update `cosmic-text` to v0.17 to fix font ligatures on Linux (#48504)
Click to expand commit body
Closes https://github.com/zed-industries/zed/issues/12176
rebased https://github.com/zed-industries/zed/pull/48161
Release Notes:
- Updated text rendering dependency to fix and improve font ligature
support
0xADB
created
46017f9
Add tab switcher mode similar to vim/helix buffer picker (#47079)
Click to expand commit body
Implements the enhancement requested in #24655 - enables tab switcher to
show all open files across all panes deduped. It's called "follow mode"
because whichever is the active pane is ALWAYS where the file, terminal,
etc will be opened from the tab switcher (not married to this mode
name).
Adds `follow_mode: true` option to `tab_switcher::ToggleAll`. When
enabled:
- **Shows all tabs across panes** - Same file in multiple panes appears
once (deduped by path)
- **Opens in active pane** - Selecting a file opens it in current pane,
creating independent editor instances
- **Moves terminals** - Non-file items (terminals, multibuffers) move to
current pane instead of duplicating
- **Preview & restore** - Navigate with arrow keys / tab to preview,
Escape restores original state
Intended for vim/helix `:buffers` command workflow while respecting
Zed's tab-based paradigm.
### Usage
```json
["tab_switcher::ToggleAll", {"follow_mode": true}]
```
### Implementation
**Preview pattern:** Clone item handles during navigation, clean up on
dismiss
- **Files**: Preview with cloned handle, confirm closes preview and
opens fresh (independent editors)
- **Terminals**: Preview with cloned handle, confirm removes from source
(moves to current pane)
**Key technical details:**
- Ignore workspace events during follow mode to prevent list re-sorting
from preview operations
- Preserve preview tab status on confirm
- Close operations remove from all panes in follow mode
- Remove from source before activating to ensure correct focus
management
### Test Coverage
21 tests total (14 new follow mode tests):
- File behavior: deduplication, independent editors, preview status
preservation, close behavior
- Non-file behavior: terminal movement, focus management, single pane
scenarios
- General: MRU stability, restore on dismiss
### Release Notes
- Added `follow_mode` option to `tab_switcher::ToggleAll` for vim-style
buffer list showing all deduped open files across panes opening in
active pane
## Q&A
**Q: Why not tie this to vim mode?**
A: This feature is different enough from vim/helix buffer behavior that
I opted not to couple them. It is an approximation using Zed's tab
switcher/picker and would take architectural changes to implement real
vim/helix buffers. Additionally, both follow mode and regular tab
switcher mode are useful window/tab management workflows that vim or
non-vim users may want regardless of their editing mode preference.
**Q: How to use this?**
A: For a vim/helix-like workflow:
1. **Bind the follow mode tab switcher** - Add to your keymap:
```json
{
"context": "Workspace",
"bindings": {
"cmd-i": ["tab_switcher::ToggleAll", {"follow_mode": true}]
}
}
```
2. **Hide the tab bar (optional)** - Add to settings:
```json
{
"tab_bar": {
"show": false
}
}
```
3. **Move tabs to other pane on close (optional)** - Add to your keymap
to join tabs into next pane when closing:
```json
{
"context": "Pane",
"bindings": {
"cmd-w": "pane::JoinIntoNext"
}
}
```
This makes closing a tab behave more like vim's split closure - items
move to the adjacent pane instead of being closed.
If you find that you'd rather have the tab bar visible, there's a pretty
good chance you don't need/want this feature. Vim/helix don't have
visible tab bars, so this feature is primarily for users who want that
sort of experience where buffers are not tied to a specific split/pane
and closing a split does not impact the available buffers.
## Future Work
A few additional features could make for more complete vim/helix-like
buffer workflow:
**`:bd` (buffer delete) improvements:**
- Should close the buffer from ALL panes, not just the current one
- Current implementation: `workspace::CloseActiveItem` only closes in
current pane
- Needed: New action like `workspace::CloseActiveItemAcrossPanes` and/or
update vim command mapping
**`:q` (quit) improvements:**
- Should close the split/pane while preserving its tabs
- Behavior: merge tabs into next pane (like `pane::JoinIntoNext`),
unless it's the last pane
- Last pane: close the pane and all its items
- Current implementation: `workspace::CloseActiveItem` closes active
item, not the pane
- Needed: New action or pane closure logic that moves tabs before
closing
These are complementary to this feature and can be done as separate PRs.
Release Notes:
- Add `tab_switcher::ToggleUnique` to allow a more vim-like tab
switching experience.
David Baldwin
created
74746aa
multi_buffer: Optimize a bunch of things (#48519)
7dcff21
anthropic: Update types for adaptive thinking (#48517)
Click to expand commit body
This PR updates the Anthropic types with support for [adaptive
thinking](https://platform.claude.com/docs/en/build-with-claude/adaptive-thinking).
We're not actually using adaptive thinking yet.
Release Notes:
- N/A
Marshall Bowers
created
65da2c2
Use AgentTool::NAME const instead of name() method and hardcoded strings (#48506)
Click to expand commit body
This PR removes the `fn name()` default method from the `AgentTool`
trait (which just returned `Self::NAME`) and replaces all call sites
with direct use of the `NAME` associated constant. This lets us use it
as a single source of truth in macros that want to access it at compile
time.
This PR also replaces hardcoded tool name string literals throughout the
codebase with the corresponding `NAME` constants, so tool name
references stay in sync if a tool is renamed.
Intentionally not changed:
- **Display strings** like `"Thinking"` and `"Subagent"` (user-facing UI
labels)
- **Serde attributes** like `#[serde(rename = "thinking")]` (wire
format)
- **The test assertion** `assert_eq!(SubagentTool::NAME, "subagent")`
(replacing the literal would make it tautological)
- **MCP server names** like `"mcp:srv:terminal"` (not tool identifiers)
Release Notes:
- N/A
Richard Feldman
created
24b6cbf
Add Claude Opus 4.6 and 1M context window model variants (#48508)
Click to expand commit body
<img width="588" height="485" alt="Screenshot 2026-02-05 at 1 29 10 PM"
src="https://github.com/user-attachments/assets/f3d36c8b-b371-4226-af60-bdc2c6b34009"
/>
<img width="586" height="468" alt="Screenshot 2026-02-05 at 1 30 15 PM"
src="https://github.com/user-attachments/assets/878e91ad-948c-4b35-a37b-f5a8db7e0b3f"
/>
This adds Claude Opus 4.6 as a new Anthropic model, along with 1M
context window variants for both Opus 4.6 and Sonnet 4.5.
## Opus 4.6
Adds `ClaudeOpus4_6` and `ClaudeOpus4_6Thinking` with the same
properties as other Claude 4+ models (200k context, 8192 max output
tokens, fine-grained tool streaming beta header).
## 1M context variants
Adds 1M context window variants for Sonnet 4.5 and Opus 4.6. These are
identical to their base models except:
- Context window is 1,000,000 tokens instead of 200,000
- They send the `context-1m-2025-08-07` beta header
Release Notes:
- Added Claude Opus 4.6
- Now Claude Opus 4.6 and Sonnet 4.5 BYOK models support variations that
have context windows of 1 million tokens (and have different pricing)
Richard Feldman
created
c47430d
helix: Fix line select with empty first line (#48026)
Click to expand commit body
Release Notes:
- Fixed `HelixSelectLine` with an empty first line and a pre-existing
selection.
---------
Co-authored-by: Jakub Konka <kubkon@jakubkonka.com>
Co-authored-by: Lena Falk <lena@zed.dev>
Josh Robson Chase
,
Jakub Konka
, and
Lena Falk
created
8bb69dc
Properly discard tokens on language server stop (#48490)
Click to expand commit body
Follow-up of https://github.com/zed-industries/zed/pull/46356
Release Notes:
- N/A
Kirill Bulatov
created
723f683
text: Actually short circuit anchored_edits_since_in_range (#48486)
Click to expand commit body
When the version is the same we used to still seek through the
underlying fragment sumtree despite having nothing to return. This has a
lot of unnecessary overhead.
Release Notes:
- N/A *or* Added/Fixed/Improved ...
Follow-up of https://github.com/zed-industries/zed/pull/46356
* better selection in highlights panel to show the color of the active
item
* no `DiffbaselessAnchor` entity to cause flickering and highlighting
issues
* react on theme and theme settings change and refresh semantic tokens
* do not eagerly flicker when refreshing the tokens
* do not show semantic tokens in the editor menu for non-applicable
buffers
Release Notes:
- N/A
Kirill Bulatov
created
de17358
language: Use TreeMap for `language::BufferSnapshot::diagnostics` (#48482)
Click to expand commit body
Otherwise cloning the snapshot is more expensive than it should be.
Release Notes:
- N/A *or* Added/Fixed/Improved ...
Co-authored-by: Cole Miller <cole@zed.dev>
Lukas Wirth
and
Cole Miller
created
044dca1
ep: Use programmatic scores as a signal for repair (#48478)
Click to expand commit body
Also, lots of updates to the repair prompt and the ability to keep
previous predictions without having to rewrite them.
Release Notes:
- N/A
Oleksiy Syvokon
created
8c047d9
workspace: Remove layout shift from multibuffer toolbar (#48472)
Click to expand commit body
The icons in the far left of the multibuffer toolbar were shifting a bit
to the side when toggling the buffer search, so this PR fixes that. I'm
also removing the labeled button for the expand/collapse all excerpts;
relying only on the icon-button version of it, given it's simpler and
similarly clear.
https://github.com/user-attachments/assets/8ee44c9f-3082-4160-ac77-a3cf489b318a
Release Notes:
- N/A
Danilo Leal
created
389f665
ep: Store cursor position in global coordinates (#48469)
Click to expand commit body
This also fixes the isolated whitespace change metric, which is not
takes cursor position into account (it's okay to insert a newline if it
has a cursor on it)
Release Notes:
- N/A
e5579cf
agent_settings: Fix Bedrock model catalog URL (#48382)
Click to expand commit body
The previous URL pointed to the model access page which no longer exists
(not a 404, tho). The model catalog page is the current location for
selecting and requesting access to Bedrock models.
| Before | After |
|--------|--------|
| <img width="1732" height="1125" alt="Screenshot 2026-02-04 at 12 50
13"
src="https://github.com/user-attachments/assets/f513e7c9-aa70-439a-afd0-ef8177ada463"
/> | <img width="1732" height="1125" alt="Screenshot 2026-02-04 at 12 52
11"
src="https://github.com/user-attachments/assets/6609215e-1bbb-4ed1-b57d-422ed7893498"
/> |
Release Notes:
- Fixed Bedrock model catalog URL in Agent Panel settings
Kunall Banerjee
created
a8c3c1a
extension_api: Add `digest` to `GithubReleaseAsset` (#48413)
Click to expand commit body
Round 2 of #46269 with conflicts properly resolved.
This came up a few times across various extensions. With us about to
ship a new API version soon, it might be worth to add.
Release Notes:
- N/A
---------
Co-authored-by: Zed Zippy <234243425+zed-zippy[bot]@users.noreply.github.com>