Commit log

1c56ecd Run QA for all predictions

Oleksiy Syvokon created

c1f0df1 ep: Add the repaired-teacher provider

Click to expand commit body
This is a regular teacher, followed by the QA call, followed by a repair
pass if needed.

For now, this doesn't support batching (too many stages to orchestrate)

Oleksiy Syvokon created

c3c7304 Prompt update

Click to expand commit body
sonnet45: 97.90
gpt52:    81.14

Oleksiy Syvokon created

0dd427a upd

Oleksiy Syvokon created

f1edfd9 Expand editable region line-wise, then syntactically, then line-wise again

Max Brunsfeld created

fb8ae30 Have teacher output the full excerpt, including the editable region tags

Max Brunsfeld created

c64d4d1 Add support for pulling all requested prediction inputs

Click to expand commit body
Co-authored-by: Ben Kunkle <ben@zed.dev>

Max Brunsfeld and Ben Kunkle created

e1e356d Make --repetions flag work for teacher

Max Brunsfeld created

a43dfee Add another example to teacher prompt

Click to expand commit body
Co-authored-by: Oleksiy Syvokon <oleksiy.syvokon@gmail.com>
Co-authored-by: Ben Kunkle <ben@zed.dev>

Max Brunsfeld , Oleksiy Syvokon , and Ben Kunkle created

1bc9edf Add --markdown flag to output examples as md

Click to expand commit body
Co-authored-by: Oleksiy Syvokon <oleksiy.syvokon@gmail.com>
Co-authored-by: Ben Kunkle <ben@zed.dev>

Max Brunsfeld , Oleksiy Syvokon , and Ben Kunkle created

797ad8c Fix language injections sticking after language comment removed (#46134)

Click to expand commit body
Closes #46104

Release Notes: 

- Fixed language injections sticking after language comment removed

---

This is working well for the Python SQL comments

![comment_sync_demo](https://github.com/user-attachments/assets/ba5160ce-4867-4b49-9f44-141ddc2730a1)

```python
from pyspark.sql import SparkSession
spark = SparkSession.builder.getOrCreate()

# sql
cmd = "SELECT col1, col2 FROM tbl"

df = spark.sql(  # sql
    """
    WITH cte AS (
        SELECT col1, col2, COUNT(*) AS n
        FROM tbl
        GROUP BY ALL
    )
    SELECT * FROM cte
    """
)
```


And go comments

![comment_sync_demo_go_updated](https://github.com/user-attachments/assets/73e81a94-e8fc-4dc3-82f8-09e966d35bc9)


```go
package main

func test() {
    var _ = /* sql */ `SELECT id, name FROM products`
    var _ = /* sql */ "SELECT id, name FROM products"

    var _ = /* sql */ `SELECT id, name FROM products`

    var _ = /* sql*/ "SELECT id, name FROM products"
}
```

Note: `f04b252dd9` was a simpler implementation that worked for
non-inline comments in Python, but produced the following Go behavior

![comment_sync_demo_go](https://github.com/user-attachments/assets/40336705-9799-4b0a-b457-4974d172e1c8)

---------

Co-authored-by: Joseph T. Lyons <JosephTLyons@gmail.com>

Jeff Brennan and Joseph T. Lyons created

a9fdd07 cloud_api_types: Rework `Plan` type (#47784)

Click to expand commit body
This PR reworks the `Plan` type, now that we don't need to be concerned
about the legacy plan versions.

We've also made the deserialization layer more robust, which should make
it easier to add new plan variants in the future without needing to go
through this same song and dance.

Release Notes:

- N/A

Marshall Bowers created

07e675d zeta2: Remove `experimental_edit_prediction_context_retrieval` setting (#47783)

Click to expand commit body
Closes #ISSUE

Release Notes:

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

Ben Kunkle created

41ce23f vim: Add `gdefault` setting to set `/g` as a default substitution flag (#47664)

Click to expand commit body
Add support for Vim's `gdefault` option which makes the `:substitute`
command replace all matches in a line by default, instead of just the
first match. When enabled, the `/g` flag inverts this behavior.

- Add `vim.gdefault` setting
- Add `:set gdefault`, `:set nogdefault` (and short forms `:set gd`, `:set nogd`)
- Fix handling of multiple `/g` flags so that each one inverts the one before

Closes #36209

Release Notes:

- vim: Add `vim.gdefault` setting to make `/g` (replace all matches in a line) the default for substitutions, along with `:set gdefault` and `:set nogdefault` commands (short forms: `gd`, `nogd`)

---------

Co-authored-by: dino <dinojoaocosta@gmail.com>

Ran Benita and dino created

e77c528 Update notify dependency version to include the flag watch root fix (#47782)

Click to expand commit body
This is in preparation of merging
https://github.com/zed-industries/zed/pull/47322, because our MacWatcher
implementation was able to watch root directories, and I wanted to
maintain that behavior to decrease the chance of any bugs occurring from
a merge

Note: Release candidate 9 for Notify was created two days ago which
means that a new version is coming out soon. We should update to v9 once
it's released to include bug fixes from upstream.

Release Notes:

- N/A

Anthony Eid created

cc1d3af Use faster brotli compression for sweep requests (#47776)

Click to expand commit body
Closes #ISSUE

Release Notes:

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

Ben Kunkle created

26381fe More permissions to GitHub duplicates bot (#47780)

Click to expand commit body
The claude code action insists on needing `id-token: write` despite us
using `github_token`, so maybe I misread the 
[FAQ](https://github.com/anthropics/claude-code-action/blob/main/docs/faq.md#why-am-i-getting-oidc-authentication-errors)
earlier. Pinning the sha of the currently-used version of the action for
safety's sake.

Release Notes:

- N/A

Lena created

4723dbe cloud_llm_client: Move `Plan` type into `cloud_api_types` (#47778)

Click to expand commit body
This PR moves the `Plan` type out of `cloud_llm_client` and into
`cloud_api_types`.

Release Notes:

- N/A

Marshall Bowers created

73bb119 Use semibold (#47725)

Click to expand commit body
New on the left, old on the right:

<img width="1612" height="1047" alt="Screenshot 2026-01-26 at 20 31 04"
src="https://github.com/user-attachments/assets/3e0d01b6-05e9-4c9c-8c15-6c525ce9fa9f"
/>
<img width="1604" height="915" alt="Screenshot 2026-01-26 at 20 30 49"
src="https://github.com/user-attachments/assets/77d0f9e0-778b-45df-a8e1-ade63ee9e798"
/>


Release Notes:

- Bold UI text will now render using Plex SemiBold instead of Bold.

Conrad Irwin created

8a89042 Fix getting token in a GitHub bot (#47777)

Click to expand commit body
Release Notes:

- N/A

Lena created

39b34f8 cloud_llm_client: Remove unused code (#47774)

Click to expand commit body
This PR removes some unused code around the plan types from the
`cloud_llm_client`.

Release Notes:

- N/A

Marshall Bowers created

f324c3e Add a test version of 'find duplicates' bot (#47773)

Click to expand commit body
Release Notes:

- N/A

Lena created

01409a2 extensions_ui: Fix duplicated button element IDs preventing uninstall (#47745)

Click to expand commit body
Closes #47656

Release Notes:

- Fixed extension uninstall button not working when an upgrade is
available.

---------

Co-authored-by: Marshall Bowers <git@maxdeviant.com>

Dream and Marshall Bowers created

a07b08f Show QA metrics in the `ep eval` report (#47766)

Click to expand commit body
Release Notes:

- N/A

Oleksiy Syvokon created

be314db Tidy up signature help delays (#47762)

Click to expand commit body
Follow-up of https://github.com/zed-industries/zed/pull/46745

Release Notes:

- N/A

Kirill Bulatov created

9ecafe1 vim: Ensure paragraph motions use empty and not blank lines (#47734)

Click to expand commit body
The `}` and `{` paragraph motions now correctly treat only truly empty
lines (zero characters) as paragraph boundaries, matching vim's
documented behavior. Whitespace-only lines are no longer treated as
boundaries.

Changed `start_of_paragraph()` and `end_of_paragraph()` in
`editor/src/movement.rs` to check `line_len() == 0` instead of
`is_line_blank()`.

Note: This change does NOT affect the `ap`/`ip` text objects. Per vim's
`:help ap`, those DO treat whitespace-only lines as boundaries, which is
the existing (correct) behavior in `vim/src/object.rs`.

Closes #36171

Release Notes:

- Fixed vim mode paragraph motions (`}` and `{`) to correctly ignore
whitespace-only lines

---------

Co-authored-by: dino <dinojoaocosta@gmail.com>

lex00 and dino created

757ee05 ep: Use rejected_output for DPO training + OpenAI support (#47697)

Click to expand commit body
Release Notes:

- N/A

---------

Co-authored-by: Zed Zippy <234243425+zed-zippy[bot]@users.noreply.github.com>

Oleksiy Syvokon and Zed Zippy created

4866861 xtask: Remove transitive GPUI dependency (#47748)

Click to expand commit body
Release Notes:

- N/A

Finn Evers created

8fb7108 askpass: Fix ssh auth not updating entered password on windows (#47755)

Click to expand commit body
Release Notes:

- Fixed mistyping the ssh password in the askpass prompt on windows
locking you out of retyping the correct one

Lukas Wirth created

aa6afca terminal_view: Fix new flaky terminal tests (#47753)

Click to expand commit body
Release Notes:

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

Lukas Wirth created

7e8ced2 Remove cron schedule for unit evals (#47743)

Click to expand commit body
Release Notes:

- N/A

Ben Brandt created

e4dff26 extension_ci: Use different target for nextest (#47738)

Click to expand commit body
Release Notes:

- N/A

Finn Evers created

969fb8f Fix native agent thread history notify refresh (#47733)

Click to expand commit body
Release Notes:

- N/A

Joseph T. Lyons created

58a4a84 terminal_view: Add ability to rename terminal tabs (#45800)

Click to expand commit body
Closes [#ISSUE](https://github.com/zed-industries/zed/issues/11023)

Release Notes:

- Added ability to rename terminal tabs by right-click context menu and
double-click

Recording:


https://github.com/user-attachments/assets/be81a95b-1f64-4ebd-94e4-7cfe6a1e9ddb

Rocky Shi created

b6ff556 go: Add support for running sub-tests in table tests without explicit variables for test cases (#46645)

Click to expand commit body
This PR extends support to run Go table-test subtests (#35657), handling
tests without explicitly declaring variables for test scenarios.

<img width="611" height="318" alt="go-table-tests"
src="https://github.com/user-attachments/assets/e001b661-b512-4183-b6df-6c25f3af4f27"
/>

Release Notes:

- Improved support to run Go table-test subtests, handling tests without
explicitly declaring variables for test scenarios.

Co-authored-by: Conrad Irwin <conrad.irwin@gmail.com>

Lev Zakharov and Conrad Irwin created

e64985e Add optional relative line jumps to go-to-line action (#46932)

Click to expand commit body
Implements relative line jumping, a common feature i missed from
Vim/Neovim where you can jump to lines relative to your current cursor
position.

- New `{"relative": true}` flag for `go_to_line::Toggle` action 
- Supports both `-5` (5 lines up) and `b5` (backward 5 lines) syntax
- Full lines only (no column support in relative mode, wasnt sure if
that would be necessary)
- Unbound by default - users can add e.g. `"ctrl-j":
["go_to_line::Toggle", {"relative": true}]` to their keymap

Example usage:
- `5` β†’ jump 5 lines down
- `-3` or `b3` β†’ jump 3 lines up  
- `0` β†’ stay on current line


[Screencast_20260115_191312.webm](https://github.com/user-attachments/assets/395c0e7b-8ac1-48c8-a39e-5ade4f9206ec)

Release Notes:

- Added relative line jump support to go-to-line action via
`+/-/f/b/F/B`

Kalaay created

8e291ec encoding: Add "reopen with encoding" (#46553)

Click to expand commit body
# Add "Reopen with Encoding" feature (Local/Single user)

## Summary

This PR adds a "Reopen with Encoding" feature to allow users to manually
specify an encoding and reload the active buffer.

This feature allows users to explicitly specify the encoding and reload
the file to resolve garbled text caused by incorrect detection.

## Changes

1.  Added encoding picker logic to `encoding_selector`

- Implemented a modal UI accessible via the command palette, shortcuts,
or by clicking the encoding status in the status bar.
- Allows users to select from a list of supported encodings (Shift JIS,
EUC-JP, UTF-16LE, etc.).

2.  Updated Buffer logic (crates/language)

- Added a `force_encoding_on_next_reload` flag to the Buffer struct.
- Updated the `reload` method to check this flag and apply the following
logic:
- **Non-Unicode (e.g., Shift JIS):** Bypasses heuristics (like BOM
checks) to force the specified encoding.
- **Unicode (e.g., UTF-8):** Performs standard BOM detection. This
ensures that the BOM is correctly handled/consumed when switching back
to UTF-8.

3.  UI / Keymap

- Made the encoding status in the status bar (ActiveBufferEncoding)
clickable.
- Added default keybindings:
  - macOS: cmd-k n
  - Linux/Windows: ctrl-k n
  - Windows: ctrl-k n

## Limitations & Scope

To ensure stability and keep the PR focused, the following scenarios are
intentionally out of scope:

1. **Collaboration and Remote Connections**

- Encoding changes are disabled when collaboration (is_shared) or SSH
remote connections (is_via_remote_server) are active.
- **Reason:** Synchronizing encoding state changes between host/guest or
handling remote reloads involves complex synchronization logic. This PR
focuses on local files only.

`Remote Connection (SSH/WSL)`

|Via status bar|Via shortcut/command|
|:---:|:---:|
|<img width="767" height="136" alt="remote_tooltip"
src="https://github.com/user-attachments/assets/6c7cb293-2486-4f6d-a3ff-2086d939398e"
width="400" />|<img width="742" height="219" alt="remote_shortcut"
src="https://github.com/user-attachments/assets/5448f199-2066-4baf-b349-a983ab2fa77a"
width="400" />|

`Collaboration Session `

|Via status bar|Via shortcut/command|
|:---:|:---:|
|<img width="734" height="86" alt="collab_tooltip"
src="https://github.com/user-attachments/assets/37de99a9-dd33-4c78-98bf-20654d41fdd0"
/>|<img width="720" height="182" alt="collab_pop"
src="https://github.com/user-attachments/assets/91d03ea7-f029-442a-8236-55234576f7ed"
/>|

2. Dirty State

- The feature is disabled if the buffer has unsaved changes to prevent
data loss during reload.

|Via status bar|Via shortcut/command|
|:---:|:---:|
|<img width="545" height="103" alt="local_dirty_tooltip"
src="https://github.com/user-attachments/assets/d9ae658e-52b3-4ecd-9873-d0ec8bd51b5d"
/>|<img width="707" height="178" alt="local_dirty_pop"
src="https://github.com/user-attachments/assets/d170ea1e-9fcb-42e7-aa3e-0555b4a19d86"
/>|

3. Files detected as Binary

Files that worktree detects as "binary" (e.g., UTF-16 files without BOM
containing non-ASCII characters) are not opened in the editor, so this
feature cannot be triggered.
**Future Work**: Fixing this would require modifying crates/worktree
heuristics or exposing a "Force Open as Text" action for InvalidItemView
to trigger. Given the scope and impact, this is deferred to a future PR.

## Test Plan

I verified the feature and BOM handling using the following scenarios:

### Preparation

Used the following test files:

-
[**test_utf8.txt**](https://github.com/user-attachments/files/24548803/test_utf8.txt):
English-only text file. No BOM.
-
[**test_utf8_bom.txt**](https://github.com/user-attachments/files/24548822/test_utf8_bom.txt):
English-only text file. With BOM.
-
[**test_utf8_jp_bom.txt**](https://github.com/user-attachments/files/24548825/test_utf8_jp_bom.txt):
UTF-8 with BOM file containing Japanese characters.
-
[**test_shiftjis_jp.txt**](https://github.com/user-attachments/files/24548827/test_shiftjis_jp.txt):
Shift-JIS file containing Japanese characters (content designed to
trigger misdetection, e.g., using only half-width katakana).

Used an external editor (VS Code or Notepad) for verification.

### Case 1: English-only file behavior

1.  Open an English-only UTF-8 file (test_utf8.txt).
2.  Reopen as Shift JIS.
3.  **Result:**

- Text appearance remains unchanged (since ASCII is compatible).
- Status bar updates to "Shift JIS".

### Case 2: Fixing Mojibake

1. Open a Shift-JIS file (test_shiftjis_jp.txt) that causes detection
failure.
    β€»Confirm it opens with mojibake
2.  Select Shift JIS from the status bar selector.
3.  **Result:**

- Mojibake is resolved, and Japanese text is displayed correctly.
- Status bar updates to "Shift JIS".

### Case 3: Unicode file with BOM behavior

1.  Open an English-only UTF-8 with BOM file (test_utf8_bom.txt).
2.  Reopen as `Shift JIS`.
3.  **Result:**

- The BOM bytes are displayed as mojibake at the beginning of the file.
- The rest of the English text is displayed normally (ASCII
compatibility).
- Status bar updates to "Shift JIS".

### Case 4: Non-Unicode file with BOM behavior

1. Open a UTF-8 with BOM file containing Japanese
(test_utf8_jp_bom.txt).
2.  Reopen as Shift JIS.
3.  **Result:**

- The BOM bytes at the start are displayed as mojibake.
- The Japanese text body is displayed as mojibake (UTF-8 bytes
interpreted as Shift JIS).
- Status bar updates to "Shift JIS" (no BOM indicator).

### Case 5: Revert to Unicode

1.  From the state in Case 4 (Shift JIS with mojibake), reopen as UTF-8.
2.  **Result:**

- The BOM mojibake at the start disappears (consumed).
- The text returns to normal.
- Status bar updates to "UTF-8 (BOM)".

### Case 6: External BOM removal (State sync)

1.  Open a UTF-8 with BOM file in Zed (test_utf8_bom.txt).
2. Open the same file in an external editor and save it as UTF-8 (No
BOM).
3.  Refocus Zed.
4.  **Result:**

- Text appearance remains unchanged.
- The (BOM) indicator disappears from the status bar.
- Saving in Zed and checking externally confirms the BOM is gone.

### Case 7: External BOM addition

1. From the state in Case 6 (UTF-8 No BOM), save as UTF-8 with BOM in
the external editor.
2.  Refocus Zed.
3.  **Result:**

- The (BOM) indicator appears in the status bar.
- Saving in Zed and checking externally confirms the BOM is present.

### Case 8: External Encoding Change (Auto-detect sync)

1.  Open an English-only UTF-8 file in Zed (`test_utf8.txt`).
    * *Status bar shows: "UTF-8".*
2. Open the same file in an external editor and save it as **UTF-16LE
with BOM**.
3.  Refocus Zed.
4.  **Result:**
    * The text remains readable (no mojibake).
* **Status bar automatically updates to "UTF-16LE (BOM)".** (Verifies
that `buffer.encoding` is correctly updated during reload).

Release Notes:

- Added "Reopen with Encoding" feature (currently supported for local
files).

---------

Co-authored-by: Conrad Irwin <conrad.irwin@gmail.com>

Ichimura Tomoo and Conrad Irwin created

e868446 Reapply "Try namespace mac runners (#47675)" (#47721) (#47727)

Click to expand commit body
This reverts commit c50120199f4211d6bcbd3fb191b710166e34d9c7.

Closes #ISSUE

Release Notes:

- N/A

Conrad Irwin created

d0c3b33 git: Don't rebuild the project diff when the active repository changes (#47718)

Click to expand commit body
Release Notes:

- N/A

Cole Miller created

786b17d git: Retain "since" diffs in the `GitStore` (#47619)

Click to expand commit body
This PR makes it so that `open_diff_since`, as used by the branch diff,
is able to return a stable diff entity instead of creating a new one
every time this is called. In particular, the base text buffer for this
diff is now stable across branch diff refreshes, making it usable with
the side-by-side view. The strategy for keeping the diff entities alive
is the same one that we use for the uncommitted and unstaged diffs--the
`GitStore` only holds a weak pointer to each "since" diff, so when these
diffs are no longer in use by the branch diff multibuffer they can be
cleaned up.

Release Notes:

- N/A

---------

Co-authored-by: Zed Zippy <234243425+zed-zippy[bot]@users.noreply.github.com>

Cole Miller and Zed Zippy created

00ba24a git: Avoid unwrapping active repository in panel rendering (#47700)

Click to expand commit body
Closes ZED-43V
Closes ZED-3VK

Release Notes:

- N/A

Cole Miller created

c93773c Make `workspace::SendKeystrokes` not use layout key equivalents (#47061)

Click to expand commit body
Closes #46509

Release Notes:

- Fixed: `workspace::SendKeystrokes` would not allow remapping keys in
different keyboard layouts

---------

Co-authored-by: Conrad Irwin <conrad.irwin@gmail.com>

everdrone and Conrad Irwin created

c501201 Revert "Try namespace mac runners (#47675)" (#47721)

Click to expand commit body
This broke the libgit2 bundling silently

Release Notes:

- N/A

Conrad Irwin created

d27fa3b extension_ci: Ensure specified target is installed (#47717)

Click to expand commit body
Follow up to #47714 because it is still broken for the extension
workflows post #47699 cache introduction. Keeping the cache around
though in the hopes that it will now finally work.

Release Notes:

- N/A

Finn Evers created

e7e8f0b extension_ci: Set default toolchain for all jobs (#47714)

Click to expand commit body
Follow-up to #47712 ..

Release Notes:

- N/A

Finn Evers created

bdb8481 Send some traffic to zeta2 for testing (#47710)

Click to expand commit body
Release Notes:

- N/A

Max Brunsfeld created

7a0a26d extension_ci: Set default target for all jobs (#47712)

Click to expand commit body
Following the changes to the namespace caching, CI in the extensions
broke because cache conflicts arose there seemingly. Trying to set the
target here more explicitly in an effort to fix this.

Release Notes:

- N/A

Finn Evers created

f601880 project: Add spinner while search is underway (#47620)

Click to expand commit body
When there are no search results, it's clear that a search is still
ongoing because the landing page says "Searching...". However, once
there's at least one result found, it becomes completely unclear when
search is actually finished. This adds a spinner immediately to the
right of the result counter that stops once the search is finished.


https://github.com/user-attachments/assets/a0ca4e2a-c506-42a4-bc4b-c1eb32d69e79

Release Notes:

- Added spinner to project search, indicating that a search is still
ongoing.

---------

Co-authored-by: Danilo Leal <daniloleal09@gmail.com>

Andres Suarez and Danilo Leal created

0db0cc6 Handle removed `IconName` variants in text thread deserialization (#47624)

Click to expand commit body
Fixes #41776

## Problem

Old AI Text Thread sessions fail to open from History because the
deserializer fails on unknown icon variants. When icons are removed or
renamed in refactors, old saved threads become unloadable with errors
like:

```
unknown variant `AtSign`, expected one of `Ai`, `AiAnthropic`...
```

## Solution

Added a lenient deserializer for the `icon` field in
`SlashCommandOutputSection` that falls back to `IconName::Code` for
unknown variants.

This ensures old saved threads remain loadable even as icons are
added/removed from the codebase.

## Test Plan

- Added unit test for valid icon deserialization
- Added unit test for unknown icon fallback to `Code`
- Added unit test for various unknown icon variants
- Added unit test confirming serialization unchanged
- All tests pass: `cargo test -p assistant_slash_command`

Release Notes:

- Fixed old AI text thread sessions failing to open from History when
they contain icons that were removed in previous updates.

πŸ€– Generated with [Claude Code](https://claude.ai/code)

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Co-authored-by: MrSubidubi <finn@zed.dev>

lex00 , Claude Opus 4.5 , and MrSubidubi created

40e7b10 extension_ci: Bump timeout for extension bundling test (#47708)

Click to expand commit body
Similar to the last bump, bumps the timeout here so that jobs have a bit
more time to complete

Release Notes:

- N/A

Finn Evers created