Commit log

122af4f agent: Show nav dropdown close button only on hover (#29732)

Danilo Leal created

e07ffe7 Allow to fetch cargo diagnostics separately (#29706)

Click to expand commit body
Adjusts the way `cargo` and `rust-analyzer` diagnostics are fetched into
Zed.

Nothing is changed for defaults: in this mode, Zed does nothing but
reports file updates, which trigger rust-analyzers'
mechanisms:

* generating internal diagnostics, which it is able to produce on the
fly, without blocking cargo lock.
Unfortunately, there are not that many diagnostics in r-a, and some of
them have false-positives compared to rustc ones

* running `cargo check --workspace --all-targets` on each file save,
taking the cargo lock
For large projects like Zed, this might take a while, reducing the
ability to choose how to work with the project: e.g. it's impossible to
save multiple times without long diagnostics refreshes (may happen
automatically on e.g. focus loss), save the project and run it instantly
without waiting for cargo check to finish, etc.

In addition, it's relatively tricky to reconfigure r-a to run a
different command, with different arguments and maybe different env
vars: that would require a language server restart (and a large project
reindex) and fiddling with multiple JSON fields.

The new mode aims to separate out cargo diagnostics into its own loop so
that all Zed diagnostics features are supported still.


For that, an extra mode was introduced:

```jsonc
"rust": {
  // When enabled, Zed runs `cargo check --message-format=json`-based commands and
  // collect cargo diagnostics instead of rust-analyzer.
  "fetch_cargo_diagnostics": false,
  // A command override for fetching the cargo diagnostics.
  // First argument is the command, followed by the arguments.
  "diagnostics_fetch_command": [
    "cargo",
    "check",
    "--quiet",
    "--workspace",
    "--message-format=json",
    "--all-targets",
    "--keep-going"
  ],
  // Extra environment variables to pass to the diagnostics fetch command.
  "env": {}
}
```

which calls to cargo, parses its output and mixes in with the existing
diagnostics:




https://github.com/user-attachments/assets/e986f955-b452-4995-8aac-3049683dd22c




Release Notes:

- Added a way to get diagnostics from cargo and rust-analyzer without
mutually locking each other
- Added `ctrl-r` binding to refresh diagnostics in the project
diagnostics editor context

Kirill Bulatov created

5e4be01 zed: Fix application menu capitalization (#29722)

Click to expand commit body
This PR is a quick follow-up to #29717 to ensure that the action within
the app menu has the same capitalization as in the context menu.

Release Notes:

- N/A

Finn Evers created

f055dca editor: Fix context menu capitalization (#29717)

Click to expand commit body
Fixes context menu capitalization for consistency.

Release Notes:

- N/A

Aaron Feickert created

5872276 Re-enable `open` tool (#29707)

Click to expand commit body
Release Notes:

- Added `open` tool for opening files or URLs.

Richard Feldman created

1bf9e15 agent: Allow adding/removing context when editing existing messages (#29698)

Click to expand commit body
Release Notes:

- agent: Support adding/removing context when editing existing message

---------

Co-authored-by: Cole Miller <m@cole-miller.net>
Co-authored-by: Cole Miller <cole@zed.dev>

Bennet Bo Fenner , Cole Miller , and Cole Miller created

f046d70 collab: Look up Stripe prices with lookup keys (#29715)

Click to expand commit body
This PR makes it so we look up Stripe prices via lookup keys instead of
passing in the price IDs as environment variables.

Release Notes:

- N/A

Marshall Bowers created

afeb3d4 Make eval more resilient to bad input from LLM (#29703)

Click to expand commit body
I saw a slice panic (for begin > end) in a debug build of the eval. This
should just be a failed assertion, not a panic that takes out the whole
eval run!

Release Notes:

- N/A

Richard Feldman created

92dd6b6 Fix potential subtraction overflow (#29697)

Click to expand commit body
I saw this come up in an eval, where the LLM provided a start line of 0.

Release Notes:

- N/A

Richard Feldman created

38ede4b Fix parsing of author name in git show output (#29704)

Click to expand commit body
Closes #ISSUE

Release Notes:

- Fixed a bug causing incorrect formatting of git commit tooltips

Cole Miller created

fc920bf Improve behavior around word-based brackets in bash (#29700)

Click to expand commit body
Closes #28414

Makes it so that `do`, `then`, `done`, `else`, etc are treated as
brackets in bash. They are not auto-closed *yet* as that requires
additional work to function properly, however they can now be toggled
between using `%` in vim. Additionally, newlines are inserted like they
are with regular brackets (`{}()[]""''`) when hitting enter between
them.

While `if <-> fi` `while/for <-> done` and `case <-> esac` are the
*logical* matching pairs, I've opted to instead match between `then <->
else/elif/fi` `do <-> done` and `in <-> esac` as these are the pairs
that delimit the sub-scope, and are more similar to the `{}` style
bracket pairs than `if <-> }` in a c-like syntax. This does cause some
wierd behavior with `else` in `if` expressions as it matches both with
the previous `then` as well as the following `fi`, so in this case

```bash
if true; then
   foo
else
   bar
f|i
```

after hitting `%` twice times (where cursor is `|`), the cursor will end
up on the `then` instead of back on the `fi` as hitting `%` on the else
will *always* navigate up to the `then`

Release Notes:

- vim: Improved behavior around word-based delimiters in bash (`do <->
done`, `then <-> fi`, etc) so they can be toggled between using `%`

Ben Kunkle created

04c68dc Make the default repetitions be 8, and concurrency 4 (#29576)

Click to expand commit body
This is based on having observed that there is a lot of variation
between runs on `n=1` and `n=3`.

* With `n=8` two runs on the same branch give answers that seem close
enough to be reasonably consistent.
* With higher concurrency, trying to run this many repetitions seems to
lead language servers to time out a lot, causing evals to fail.

Release Notes:

- N/A

Richard Feldman created

399eced collab: Return current usage by model from `GET /billing/usage` (#29693)

Click to expand commit body
This PR updates the `GET /billing/usage` endpoint to return the number
of requests made to each model and mode.

Release Notes:

- N/A

Marshall Bowers created

50f705e Use outline (#29687)

Click to expand commit body
## Before

![Screenshot 2025-04-30 at 10 56
36 AM](https://github.com/user-attachments/assets/3a435f4c-ad45-4f26-a847-2d5c9d03648e)

## After

![Screenshot 2025-04-30 at 10 55
27 AM](https://github.com/user-attachments/assets/cc3a8144-b6fe-4a15-8a47-b2487ce4f66e)

Release Notes:

- Context picker and `@`-mentions now work with very large files.

Richard Feldman created

8173534 zed: Reinstate default `file_scan_exclusions` in Zed repo project settings (#29690)

Click to expand commit body
Closes #ISSUE

Re-adds default `file_scan_exclusions` to [project
settings](https://github.com/zed-industries/zed/blob/84e4891d544f14e7e22348b89ecaf261b44ca611/.zed/settings.json)
that were overridden in #29106

Release Notes:

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

Ben Kunkle created

8c03934 welcome: Theme preview tile (#29689)

Click to expand commit body
![CleanShot 2025-04-30 at 13 26
44@2x](https://github.com/user-attachments/assets/f68fefe2-84a1-48b7-b9a2-47c2547cd06b)


- Adds the ThemePreviewTile component, used for upcoming onboarding UI
- Adds the CornerSolver utility for resolving correct nested corner
radii

Release Notes:

- N/A

Nate Butler created

84e4891 file_finder: Add `skip_focus_for_active_in_search` setting (#27624)

Click to expand commit body
Closes #27073

Currently, when searching for a file with Ctrl+P, and the first file
found is the active one, file_finder skips focus to the second file
automatically. This PR adds a setting to disable this and make the first
file always the focused one.

Default setting is still skipping the active file.

Release Notes: 

- Added the `skip_focus_for_active_in_search` setting for the file
finder, which allows turning off the default behavior of skipping focus
on the active file while searching in the file finder.

---------

Co-authored-by: Smit Barmase <heysmitbarmase@gmail.com>

Patrick and Smit Barmase created

d03d8cc python: Fix identification of runnable tests within decorated test classes (#29688)

Click to expand commit body
Closes #29486

Release Notes:

- python: Fixed identification of runnable test functions within
decorated pytest classes

Ben Kunkle created

4d934f2 Bump Zed to v0.186 (#29680)

Click to expand commit body
Release Notes:

-N/A

Joseph T. Lyons created

e697cf9 editor: Fix edit range for linked edits on do completion (#29650)

Click to expand commit body
Closes #29544

Fixes an issue where accepting an HTML completion would correctly edit
the start tag but incorrectly update the end tag due to incorrect linked
edit ranges.

I want to handle multi cursor case (as it barely works now), but seems
like this should go first. As, it might need whole `do_completions`
overhaul.

Todo:
- [x] Tests for completion aceept on linked edits

Before:


https://github.com/user-attachments/assets/917f8d2a-4a0f-46e8-a004-675fde55fe3d

After:


https://github.com/user-attachments/assets/84b760b6-a5b9-45c4-85d8-b5dccf97775f

Release Notes:

- Fixes an issue where accepting an HTML completion would correctly edit
the start tag but incorrectly update the end tag.

Smit Barmase created

e4e455a Fix duplicate thread entries in agent navigation menu (#29672)

Click to expand commit body
Closes #ISSUE

Release Notes:

- N/A

Cole Miller created

ff4900c Mitigate panic in merge conflict resolution (#29678)

Click to expand commit body
We have a report of a panic when indexing into
`BufferConflicts.block_ids` using the `old_range` from the
`ConflictsUpdated` event, indicating that the `block_ids` array can get
out of sync with the underlying `ConflictSet`. This PR adds a mitigation
so that we won't panic in this situation, as a stopgap until the bug can
be reproduced in a test and fixed at the root.

Release Notes:

- N/A

Cole Miller created

632f08d project: Check path extension first, then worktree's (#29671)

Click to expand commit body
This fixes a bug with opening images on worktrees that contain
"extension" in the dir name, like `zed.dev`


Release Notes:

- N/A

Oleksiy Syvokon created

5589e78 python: Do not look up venv path from source file path (#29676)

Click to expand commit body
Closes #ISSUE

Release Notes:

- N/A

Piotr Osiewicz created

128b7d2 agent: Improve edit file tool card (#29448)

Click to expand commit body
⚠️ Work in progress until all of the to-dos are knocked out:

- [x] Disable soft-wrapping
- [x] Make it foldable only after a certain number of lines
- [x] Display tool status errors
- [x] Fix horizontal scroll now that we've disabled soft-wrap
- [ ] Don't render unnecessary extra lines (will be added later, on a
follow-up PR)

Release Notes:

- N/A

---------

Co-authored-by: Agus Zubiaga <hi@aguz.me>
Co-authored-by: Michael Sloan <mgsloan@gmail.com>

Danilo Leal , Agus Zubiaga , and Michael Sloan created

fbb0fe4 agent: Add small design tweaks (#29674)

Click to expand commit body
Mostly spacing and whatnot; tiny stuff here.

Release Notes:

- N/A

Danilo Leal created

7587340 Fix a bug that interfered with sorting of conflicted paths in the git panel (#29534)

Click to expand commit body
This PR updates the git store to not register a change in a repository's
merge heads until conflicted paths are seen.

We currently use the repository's merge heads only to decide when the
list of conflicted paths should be refreshed. Previously, the logic
looked like this:

- Whenever we see a change in the merge heads, set the list of
conflicted paths by filtering the output of `git status`.

It turns out that when a conflicting merge takes a while, we can see
this sequence of events:

1. We get an event in .git and reload statuses and merge heads.
Previously there were no merge heads, and now we have some, but git
hasn't finished figuring out which paths have conflicts, so we set the
list of conflicted paths to `[]`.
2. Git finishes computing the list of conflicted paths, and we run
another scan that picks these up from `git status`, but then we throw
them away because the merge heads are the same as in (1).

By not updating our stored merge heads until we see some conflicts in
`git status`, we delay this step until (2), and so the conflicted paths
show up in the git panel as intended.

This means that our merge heads state no longer matches what's on disk
(in particular, during a clean merge we'll never update them at all),
but that's okay because we only keep this state for the purpose of
organizing conflicts.

Release Notes:

- Fixed a bug that could cause conflicted paths to not appear in their
own section in the git panel.

Cole Miller created

5073cba agent: Add keybindings to open the panel's extra menu (#29663)

Click to expand commit body
Maybe "extra" isn't the best word, but I'm referring to the ellipsis
menu on the far right of the panel that holds "extra" or "additional
options". There is a known issue with context menus, at least if
implemented this way, that makes hitting enter to select an option not
work. Will leave this fix to a later PR.

Release Notes:

- N/A

Danilo Leal created

0a02869 agent: Add new "Manual" profile (#29636)

Click to expand commit body
This new default profile is one that doesn't use any tools; it's
completely "naked" and it shouldn't lean into trying to read things from
the current project at hand. Better suited for general topic chats with
the LLM.

PS: Still expecting some wordsmithing here before merging.

Release Notes:

- agent: Added a new default profile called "Manual" that doesn't
include any tools, for general topic chats with the LLM.

Danilo Leal created

854c554 agent: Update panel navigation dropdown keybindings (#29660)

Click to expand commit body
Release Notes:

- N/A

Danilo Leal created

59708ef Revert "python: Enable subroot detection for pylsp and pyright (#27364)" (#29658)

Click to expand commit body
This reverts commit e661a0afd64e3e6e1e51c981cb7bda4e0af724fd.

Closes #ISSUE

Release Notes:

- Reverted changes to Python subroot detection which could have caused
multiple python processes to be spawned when working in projects with
multiple `pyproject.toml` files.

Piotr Osiewicz created

152ea04 chore: Move Windows dependencies to windows section (#29649)

Click to expand commit body
Release Notes:

- N/A

Avoid install on macOS:

<img width="752" alt="image"
src="https://github.com/user-attachments/assets/9b13d1c5-1734-49b7-b1f0-cffbc49a3820"
/>

Jason Lee created

074b696 gpui: Refactor `PlatformKeyboardLayout` (#29653)

Click to expand commit body
Release Notes:

- N/A

张小白 created

edda386 windows: Remove `allow(deadcode)` (#29651)

Click to expand commit body
Release Notes:

- N/A

张小白 created

9767033 debugger: Extract running state from DebugSession mode and remove mode field (#29646)

Click to expand commit body
DebugSession.mode is no longer needed because project::debugger::Session
manages its own state now (booting, running, terminated), and removing
mode simplifies a lot of the code that uses running state.

I used Zed AI to do a good chunk of the refactor, but I doubled-checked
everything it did and changed a good amount of its updates.

Release Notes:

- N/A

Co-authored-by: Zed AI <ai@zed.dev>

Anthony Eid and Zed AI created

edf78e7 Fix token counting requests in Gemini (#29643)

Click to expand commit body
Release Notes:

- N/A

Michael Sloan created

8d77efa extensions_ui: Fix scroll to top only on refetch (#29640)

Click to expand commit body
Closes #29604

Release Notes:

- Fixes case where extension page scrolls up to the top when installing
an extension.

Smit Barmase created

747a029 Split diagnostics markdown style out (#29637)

Click to expand commit body
Closes #29572

Release Notes:

- Fixed paragraph spacing in git commit messages

Conrad Irwin created

c8685dc Fix eval judging missing final response (#29638)

Click to expand commit body
Fixed issue where eval thread judges were not considering the last
response in the thread.

The problem was that they were getting the full list of messages from
`last_request`, which (being a request!) did not have the response yet.

Release Notes:

- N/A

Richard Feldman created

d566864 Make code block eval resilient to indentation (#29633)

Click to expand commit body
This reduces spurious failures in the eval.

Release Notes:

- N/A

Richard Feldman created

75a9ed1 vim: Fix incorrect escaping parenthesis of replacement string (#29555)

Click to expand commit body
Closes #29356

![Screenshot 2025-04-28
233018](https://github.com/user-attachments/assets/22998e70-8430-45fc-8d51-14e862e585eb)


Release Notes:

- vim: Fixed a bug when escaping `(` and `)` in command-palette find and
replace

Hilda24 created

e364e48 Tidy up diagnostics more (#29629)

Click to expand commit body
- Stop merging same row diagnostics
- (for Rust) show code fragments surrounded by `'s in monospace

Co-authored-by: Serge Radinovich <sergeradinovich@gmail.com>

Closes #29362

Release Notes:

- diagnostics: Diagnostics are no longer merged when they're on the same
line
- rust: Diagnostics now show code snippets in monospace font:

<img width="551" alt="Screenshot 2025-04-29 at 16 13 45"
src="https://github.com/user-attachments/assets/d289be31-717d-404f-a76a-a0cda3e96fbe"
/>

Co-authored-by: Serge Radinovich <sergeradinovich@gmail.com>

Conrad Irwin and Serge Radinovich created

b473223 Skip serializing `None` fields in Gemini API (#29632)

Click to expand commit body
Release Notes:

- N/A

Michael Sloan created

b1395c5 agent: Add new panel navigation dropdown (#29539)

Click to expand commit body
- [x] Ensure what appears in the dropdown is really what is accurate
- [x] Ensure keyboard navigation works:
  - [x] Switching tabs with `enter`
  - [x] Closing items from the menu item
  - [x] Opening the dropdown
  - [x] Focus assistant panel on dismiss
- [x] Add ability to close items from the dropdown menu
- [x] Persistence
- [x] Correct behavior when opening a text thread

Release Notes:

- agent: Added a navigation menu that shows the recently opened threads.
The button to see the full history view has been changed inside this
menu.

---------

Co-authored-by: Bennet Bo Fenner <bennetbo@gmx.de>
Co-authored-by: Cole Miller <m@cole-miller.net>
Co-authored-by: Bennet Bo Fenner <bennet@zed.dev>
Co-authored-by: Cole Miller <cole@zed.dev>

Danilo Leal , Bennet Bo Fenner , Cole Miller , Bennet Bo Fenner , and Cole Miller created

1a4d724 agent: Make token indicator not flash if last count tokens request failed (#29628)

Click to expand commit body
Release Notes:

- N/A

Michael Sloan created

d700403 Code block evals (#29619)

Click to expand commit body
Add a targeted eval for code block formatting, and revise the system
prompt accordingly.

### Eval before, n=8

<img width="728" alt="eval before"
src="https://github.com/user-attachments/assets/552b6146-3d26-4eaa-86f9-9fc36c0cadf2"
/>

### Eval after prompt change, n=8 (excluding the new evals, so just
testing the prompt change)

<img width="717" alt="eval after"
src="https://github.com/user-attachments/assets/c78c7a54-4c65-470c-b135-8691584cd73e"
/>

Release Notes:

- N/A

Richard Feldman created

2508e49 agent: Discourage long-running commands (#29627)

Click to expand commit body
Adds popular examples of long-running commands to system prompt. 

Unfortunately, I couldn't add an eval example as the new terminal tool
no longer works in `eval`. We can look into that tomorrow, but I'm
seeing improvements when manually testing this, so I'd like to merge it.

<img
src="https://github.com/user-attachments/assets/ac24e617-e068-466f-875d-c30e1f2465c4"
width=400></img>


Release Notes:

- agent: Discourage long-running commands

Agus Zubiaga created

a09e5d2 vim: Create anyquotes, anybrackets, miniquotes, and minibrackets text objects (#26748)

Click to expand commit body
## Why?
Some users expressed a preference for the AnyQuotes and AnyBrackets text
objects to align more closely with traditional Vim behavior, rather than
the mini.ai plugin's approach. To address this, I’ve introduced two new
text objects: MiniQuotes and MiniBrackets. These retain the mini.ai
plugin behavior, while the updated AnyQuotes and AnyBrackets now follow
the logic described in [this bug
report](https://github.com/zed-industries/zed/issues/25563) and [this
bug report](https://github.com/zed-industries/zed/issues/25562).

## Behavior Overview:
### AnyQuotes and AnyBrackets:
These now prioritize the innermost range first (e.g., the closest quotes
or brackets). If none are found, they fall back to searching the current
line. This aligns with the behavior requested in the issue.

### MiniQuotes and MiniBrackets:
These maintain the mini.ai plugin behavior, prioritizing the current
line before expanding the search outward.

### Usage Examples:
AnyQuotes: Works like ```ci', ci", ci` , ca', ca", ca` , etc.```

AnyBrackets: Works like ```ci(, ci[, ci{, ci<, ca(, ca[, ca{, ca<,
etc.```

Please give these changes a try and let me know your thoughts!

### Release Notes:

- vim: Add AnyQuotes, AnyBrackets, MiniQuotes and MiniBrackets text
objects

---------

Co-authored-by: Ben Kunkle <ben@zed.dev>

Osvaldo and Ben Kunkle created

33abf1e agent: Log errors from token counting APIs (#29626)

Click to expand commit body
Release Notes:

- N/A

Michael Sloan created

f7a3e00 Disable nix nightly builds (#29624)

Click to expand commit body
Until we land #28128, we're disabling the nightly nix builds so they're
not constantly failing.

Release Notes:

- N/A

Julia Ryan created