4a8f114
Fix panic when collaborating with new multibuffers (#29245)
Click to expand commit body
Before this change, when syncing a multibuffer (such as
find-all-references) to a remote, we would renumber the excerpts from 1.
This did not matter in the past because the buffers' list of excerpts
could not change. In #27876, I added the ability for excerpts to merge,
which meant that the excerpt list could change. This manifested as
people seeing "invalid excerpt id" panics when syncing.
The initial fix to this (to re-use the excerpt ids from the host) ran
into problems because `insert_excerpts_with_ids_after` assumes that you
call it in excerpt-id order. This change de-optimizes that code to
insert the excerpts 1-by-1 in excerpt-id order, but with the
insert_after set to preserve the correct UI order.
I hope to soon remove this code path and use something more like
set-excerpts-for-path for syncing, but in the meantime we should not
panic.
Release Notes:
- Fix a panic when joining a project with a multibuffer with merged
excerpts
- Support programmatic examples
([example](https://github.com/zed-industries/zed/blob/17feb260a0919e102ae4e220669c467885bf4b57/crates/eval/src/examples/file_search.rs))
- Combine data-driven example declarations into a single `.toml` file
([example](https://github.com/zed-industries/zed/blob/17feb260a0919e102ae4e220669c467885bf4b57/crates/eval/src/examples/find_and_replace_diff_card.toml))
- Run judge on individual assertions (previously called "criteria")
- Report judge and programmatic assertions in one combined table
Note: We still need to work on concept naming
<img width=400
src="https://github.com/user-attachments/assets/fc719c93-467f-412b-8d47-68821bd8a5f5">
Release Notes:
- N/A
---------
Co-authored-by: Richard Feldman <oss@rtfeldman.com>
Co-authored-by: Max Brunsfeld <maxbrunsfeld@gmail.com>
Co-authored-by: Thomas Mickley-Doyle <tmickleydoyle@gmail.com>
Agus Zubiaga
,
Richard Feldman
,
Max Brunsfeld
, and
Thomas Mickley-Doyle
created
0d3fe47
editor: Use quantize score for code completions sort + Add code completions tests (#29182)
Click to expand commit body
Closes #27994, #29050, #27352, #27616
This PR implements new logic for code completions, which improve cases
where local variables, etc LSP based hints are not shown on top of code
completion menu. The new logic is explained in comment of code.
This new sort is similar to VSCode's completions sort where order of
sort is like:
Fuzzy > Snippet > LSP sort_key > LSP sort_text
whenever two items have same value, it proceeds to use next one as tie
breaker. Changing fuzzy score from float to int based makes it possible
for two items two have same fuzzy int score, making them get sorted by
next criteria.
Release Notes:
- Improved code completions to prioritize LSP hints, such as local
variables, so they appear at the top of the list.
Smit Barmase
created
6a009b4
debugger: Open debugger panel on session startup (#29186)
Click to expand commit body
Now all debug sessions are routed through the debug panel and are
started synchronously instead of by a task that returns a session once
the initialization process is finished. A session is `Mode::Booting`
while it's starting the debug adapter process and then transitions to
`Mode::Running` once this is completed.
This PR also added new tests for the dap logger, reverse start debugging
request, and debugging over SSH.
Release Notes:
- N/A
---------
Co-authored-by: Anthony Eid <hello@anthonyeid.me>
Co-authored-by: Anthony <anthony@zed.dev>
Co-authored-by: Cole Miller <m@cole-miller.net>
Co-authored-by: Cole Miller <cole@zed.dev>
Co-authored-by: Zed AI <ai@zed.dev>
Co-authored-by: Remco Smits <djsmits12@gmail.com>
Conrad Irwin
,
Anthony Eid
,
Anthony
,
Cole Miller
,
Cole Miller
,
Zed AI
, and
Remco Smits
created
Added default filters to `zlog`, a piece that was present in our
`simple_log` setup, but was missed when switching to `zlog`, resulting
in logspam primarily on linux.
also - more explicit precedence & precedence testing
Release Notes:
- N/A
Ben Kunkle
created
3705986
Adjust image cache APIs to enable ElementState based APIs (#29243)
Click to expand commit body
cc: @sunli829 @huacnlee @probably-neb
I really liked the earlier PR, but had an idea for how to utilize the
element state so that you don't need to construct the cache externally.
I've updated the APIs to introduce an `ImageCacheProvider` trait, and
added an example implementation of it to the image gallery :)
Release Notes:
- N/A
Mikayla Maki
created
aefb3aa
Fix handling of `--system-specs` argument so it happens before `Application::new` (#29240)
Click to expand commit body
Fixes issue described in [description of
#28683](https://github.com/zed-industries/zed/issues/28683#issue-2992849891)
Makes sure that the `--system-specs` arg is handled before
`Application::new` is called, so that it can be used even when Zed is
panicking during app initialization (e.g. Failing to create a Vulkan
context in blade)
Release Notes:
- Fixed an issue where the `--system-specs` arg wouldn't work if Zed
panicked during app initialization (e.g. When failing to create a Vulkan
context in blade)
Ben Kunkle
created
8e7c145
inline_completion_button: Show the usage limits returned from the API (#29239)
Click to expand commit body
This PR updates the usage meter for edit predictions to use the limits
returned from the API instead of basing it off the plan.
This will allow limits to be updated from the server rather than being
embedded in the client.
Release Notes:
- N/A
Closes #28533
Release Notes:
- Linux: Improved parsing of `ZED_DEVICE_ID` environment variable in an
attempt to fix some cases where it erroneously failed to parse. The
`ZED_DEVICE_ID` is now expected to always be a 4 digit hexadecimal
number (as it is in the output of `lcpci`) with an optional `0x` or `0X`
prefix.
Ben Kunkle
created
fcc6a86
agent: Show the usage limits returned from the API (#29236)
Click to expand commit body
This PR updates the usage banners in the Agent panel to use the limits
returned from the API instead of basing it off the plan.
This will allow limits to be updated from the server rather than being
embedded in the client.
Release Notes:
- N/A
Marshall Bowers
created
338a6a3
ci: Only run scheduled evals, not on main/release branch commits (#29238)
Click to expand commit body
Release Notes:
- N/A
Peter Tripp
created
a0eaede
collab: Limit customers to one free trial (#29232)
Click to expand commit body
This PR makes it so customers can only subscribe to the trial once.
Release Notes:
- N/A
Closes #27414
`ImageCache` is independent of the original image loader and can
actively release its cached images to solve the problem of images loaded
from the network or files not being released.
It has two constructors:
- `ImageCache::new`: Manually manage the cache.
- `ImageCache::max_items`: Remove the least recently used items when the
cache reaches the specified number.
When creating an `img` element, you can specify the cache object with
`Img::cache`, and the image cache will be managed by `ImageCache`.
In the example `crates\gpui\examples\image-gallery.rs`, the
`ImageCache::clear` method is actively called when switching a set of
images, and the memory will no longer continuously increase.
Release Notes:
- N/A
---------
Co-authored-by: Ben Kunkle <ben@zed.dev>
Sunli
and
Ben Kunkle
created
a50fbc9
language: Fix `language_scope_at` for markdown code comments (#29230)
Click to expand commit body
Closes #29176
This PR fix an issue where uncommenting a code block in Markdown would
add Markdown comments instead of removing the language-specific
comments.
Why?
`language_scope_at` for comments in a code block in Markdown would
result in the language being detected as Markdown. This happens because
the smallest range, such as `//` or `#` on the Markdown layer, is
preferred over `// whole comment line` for any other language. This
results in language detection as Markdown for that point.
To fix this, we also use a depth factor and try to prefer the layer with
greater depth over one with lesser depth. In this case, the code block's
language depth would be preferred over Markdown. The smallest range is
now used as a tiebreaker.
Added test for this case.
Release Notes:
- Fixed issue where uncommenting a code block in Markdown would add
Markdown comments instead of removing the language comments.
Smit Barmase
created
9bbc2e0
collab: Set `plan` in LLM token based on subscription (#29231)
Click to expand commit body
This PR updates the `plan` field in the LLM token to be based on the
subscription.
We weren't using this field anywhere outside of the new billing code, so
it is safe to change its meaning.
Release Notes:
- N/A
Marshall Bowers
created
6caf34a
gpui: Align image sprites to whole pixels (#29227)
Click to expand commit body
Similar to #15822, just applies the same fix to images as they are also
affected by the same issue.
Release Notes:
- N/A
Matin Aniss
created
8607c7d
docs: Fix mistake in `Initializing the remote server` section (#28641)
Click to expand commit body
Fix `Initializing the remote server` section.
Release Notes:
- N/A
Konstantin Podsvirov
created
e26bb05
docs: Update "checkOnSave" to "check" (#29212)
Click to expand commit body
As-salamu alaykum,
[I recently started suffering from the same issue as this
user](https://users.rust-lang.org/t/rust-analyzer-checkonsave-command-works-but-shows-invalid-config-warning/128652),
which is caused by something the docs of Zed promote, so I decided to
help fix it.
>[anutrix](https://users.rust-lang.org/u/anutrix)
> When I add "rust-analyzer.checkOnSave.command": "clippy" I get:
>
> invalid config value: /checkOnSave: invalid type: map, expected a
boolean;
> Extension Info: Version 0.3.2433, Server Version 0.3.2433-standalone
(66e3b5819e 2025-04-21)
> and in Language Server logs:
>
> [Error - 3:26:22 AM] Server process exited with code 0.
> Clippy works fine but these warnings stays and extensions shows
yellow/unstable in VSCode:
>
> Additionally, if I replace
>
> "rust-analyzer.checkOnSave.command": "clippy"
> with
>
> "rust-analyzer.checkOnSave": true,
> "rust-analyzer.checkOnSave.command": "clippy"
> [jplatte](https://users.rust-lang.org/u/jplatte)
> From the documentation, it seems like
rust-analyzer.checkOnSave.command does not exist. It should be
rust-analyzer.check.command.
Doods
created
b3b89c8
collab: Don't require payment method to start a trial (#29224)
Click to expand commit body
This PR makes it so a payment method is not required in order to start a
Zed Pro trial.
Release Notes:
- N/A
Marshall Bowers
created
962b024
agent: Improve the review changes UX (#29221)
Click to expand commit body
Release Notes:
- agent: Improved the AI-generated changes review UX by clearly exposing
the generating state in the multibuffer tab.
---------
Co-authored-by: Danilo Leal <daniloleal09@gmail.com>
Bennet Bo Fenner
and
Danilo Leal
created
833653a
collab: Transfer existing usage from trial to Pro (#28884)
Click to expand commit body
This PR adds support for transferring any existing usage from a trial
subscription to a Zed Pro subscription when the user upgrades.
Release Notes:
- N/A
---------
Co-authored-by: Mikayla <mikayla@zed.dev>
Nothing too serious over here, just spacing and other small-ish tweaks.
Release Notes:
- N/A
Danilo Leal
created
207fb04
Implement basic support for VS Code debug configurations (#29160)
Click to expand commit body
- [x] Basic implementation
- [x] Match common VSC debug extension names to Zed debug adapters
- [ ] ~~`preLaunchTask` support~~ descoped for this PR
Release Notes:
- N/A
Cole Miller
created
36d02de
Rework eval to support interpretable scores and efficient repetitions (#29197)
Click to expand commit body
### Problem
We want to start continuously tracking our progress on agent evals over
time. As part of this, we'd like the *score* to have a clear,
interpretable meaning. Right now, it's a number from 0 to 5, but it's
not clear what any particular number works. In addition, scores vary
widely from run to run, because the agent's output is deterministic. We
try to stabilize the score using a panel of judges, but the behavior of
the agent itself varies much more widely than the judges' scores for a
given run.
### Solution
* **explicit meanings of scores** - In this PR, we're prescribing the
diff and thread criteria files so that they *must* be unordered lists of
assertions. For both the thread and the diff, rather than providing an
abstract score, the judge's task is simply to count how many of these
assertions are satisfied. A percentage score can be derived from this
number, divided by the total number of assertions.
* **repetitions** - Rather than running each example once, and judging
it N times, we'll **run** the example N times. Right now, I'm just
judging the output once per run, because I believe that with these more
clear scoring criteria, the main source of non-determinism will be the
*agent's* behavior, not the judge's
### Questions
* **accounting for diagnostic errors** - Previously, the judge was asked
to incorporate diagnostics into their abstract scores. Now that the
"score" is determined directly from the criteria, the diagnostic will
not be captured in the score. How should the diagnostics be accounted
for in the eval? One thought is - let's simply count and report the
number of errors remaining after the agent finishes, as a separate field
of the run (along with diff score and thread score). We could consider
normalizing it using the total lines of added code (like errors per 100
lines of code added) in order to give it some semblance of stability
between examples.
* **repetitions** - How many repetitions should we run on CI? Each
repetition takes significant time, but I think running more than one
repetition will make the scores significantly less volatile.
### Todo
* [x] Fix `--concurrency` implementation so that only N tasks are
spawned
* [x] Support `--repetitions` efficiently (re-using the same worktree)
* [x] Restructure judge prompts to count passing criteria, not compute
abstract score
* [x] Report total number of diagnostics in some way
* [x] Format output nicely
Release Notes:
- N/A *or* Added/Fixed/Improved ...
---------
Co-authored-by: Antonio Scandurra <me@as-cii.com>
Max Brunsfeld
and
Antonio Scandurra
created
36da979
agent: Show project name in the Agent notification (#29211)
Click to expand commit body
Release Notes:
- agent: Added the project name in the Agent Panel notification.
Danilo Leal
created
19b5475
agent: Refine the web search tool call UI (#29190)
Click to expand commit body
This PR refines a bit the web search tool UI by introducing a component
(`ToolCallCardHeader`) that aims to standardize the heading element of
tool calls in the thread.
In terms of next steps, I plan to evolve this component further soon
(e.g., building a full-blown "tool call card" component), and even move
it to a place where I can re-use it in the active_thread as well without
making the `assistant_tools` a dependency of it.
Release Notes:
- N/A
Danilo Leal
created
109f1d4
agent: Simplify user message design (#29165)
Click to expand commit body
Mainly removing the "You" label, which didn't add a lot of value. Still
figuring out an issue with font size Markdown rendering before merging
this PR.
Release Notes:
- N/A
Danilo Leal
created
a5852d4
agent: Support inserting selections as context via `@selection` (#29045)
Click to expand commit body
WIP
Release Notes:
- N/A
Bennet Bo Fenner
created
10ded0a
agent: Add support for google gemini 2.5 flash preview (#29205)
Click to expand commit body
Adds support for the new gemini-2.5-flash-preview-04-17
Release Notes:
- agent: Added support for gemini-2.5-flash-preview
Stephan Seidt
created
b0b620a
gemini: Add support for passing images as part of the prompt (#29203)
Click to expand commit body
Release Notes:
- agent: Add support for adding images as context when using Google
Gemini
Bennet Bo Fenner
created
eca6d5a
agent: Support pasting images as context (#29177)
Click to expand commit body
https://github.com/user-attachments/assets/d6a27b05-3590-4f40-a820-f6f99f6bd581
Release Notes:
- agent: Added support for pasting images as context
---------
Co-authored-by: Danilo Leal <daniloleal09@gmail.com>
The old one wasn't linking, and
https://github.com/zed-industries/zed/pull/29081 has a bunch of merge
conflicts. Wanted to start simple/small.
## Todo
* [x] Remove low-signal examples
* [x] Make the eval run on a cron, on main, and on any PR with the
`run-eval` label
* [x] Noise in logs about failure to write settings
```
[2025-04-21T20:45:04Z ERROR settings] Failed to write settings to file
"/home/runner/.config/zed/settings.json"
Caused by:
No such file or directory (os error 2) at path
"/home/runner/.config/zed/.tmpLewFEs"
```
* [x] `Agentic loop stalled`
(https://github.com/zed-industries/zed/actions/runs/14581044243/job/40897622894)
* [x] Make sure that events are recorded in snowflake
* [ ] Change judge criteria to be more explicit about meanings of scores
Release Notes:
- N/A
---------
Co-authored-by: Antonio Scandurra <me@as-cii.com>
Co-authored-by: Agus Zubiaga <hi@aguz.me>
Co-authored-by: Max Brunsfeld <maxbrunsfeld@gmail.com>
Co-authored-by: Thomas Mickley-Doyle <tmickleydoyle@gmail.com>
Nathan Sobo
,
Antonio Scandurra
,
Agus Zubiaga
,
Max Brunsfeld
, and
Thomas Mickley-Doyle
created
b14356d
agent: Do not add `<using_tool>` placeholder (#29194)
Click to expand commit body
Our provider code in `language_models` filters out messages for which
`LanguageModelRequestMessage::contents_empty` returns `false`. This
doesn't seem wrong by itself, but `contents_empty` was returning `false`
for messages whose first segment didn't contain non-whitespace text even
if they contained other non-empty segments. This caused requests to fail
when a message with a tool call didn't contain any preceding text.
Release Notes:
- N/A
dfbd132
Update Split bindings in terminal (#29188)
Click to expand commit body
Closes #29087
Release Notes:
- Changed default bindings for splitting terminals from `ctrl-k
{up,down,left,right}` to `ctrl-alt-{up,down,left,right}`. `ctrl-k` is
used by Readline to cut to the end of the line.
Conrad Irwin
created
2e8ee9b
agent: Make directory context display update on rename (#29189)
Click to expand commit body
Release Notes:
- N/A
Michael Sloan
created
c15382c
vim: Add cursor shape settings for each vim mode (#28636)
Click to expand commit body
Closes #4495
Release Notes:
- vim: add cursor shape settings for each vim mode
---
Add cursor shape settings for each vim mode to enable users to specify
them.
Example of `settings.json`:
```json
{
"vim_mode": true,
"vim": {
"cursor_shape": {
"normal": "hollow",
"insert": "bar",
"replace": "block",
"visual": "underline"
}
}
}
```
After this change is applied,
- The cursor shape specified by the user for each mode is used.
- In insert mode, the `vim > cursor_shape > insert` setting takes
precedence over the primary `cursor_shape` setting.
- If `vim > cursor_shape > insert` is not set, the primary
`cursor_shape` will be used in insert mode.
- The cursor shape will remain unchanged before and after this update
when the user does not set the `vim > cursor_shape` setting.
Video:
[screen-record.webm](https://github.com/user-attachments/assets/b87461a1-6b3a-4a77-a607-a340f106def5)
Gaku Kanematsu
created
70c51b5
agent eval: Default to also running typescript examples (#29185)
Click to expand commit body
Release Notes:
- N/A
Michael Sloan
created
38afae8
Use buffer size for markdown preview (#29172)
Click to expand commit body
Note:
This is implemented in a very hacky and one-off manner. The primary
change is to pass a rem size through the markdown render tree, and scale
all sizing (rems & pixels) based on the passed in rem size manually.
This required copying in the `CheckBox` component from `ui::CheckBox` to
make it use the manual rem scaling without modifying the `CheckBox`
implementation directly as it is used elsewhere.
A better solution is required, likely involving `window.with_rem_size`
and/or _actual_ `em` units that allow text-size-relative scaling.
Release Notes:
- Made it so Markdown preview uses the _buffer_ font size instead of the
_ui_ font size.
---------
Co-authored-by: Ben Kunkle <ben@zed.dev>
Co-authored-by: Nate Butler <nate@zed.dev>
Mikayla Maki
,
Ben Kunkle
, and
Nate Butler
created
9249919
Write `{result_count}.diff` and `last.diff` eval run outputs (#29181)
Click to expand commit body
These are only written when the diff has changed. `patch.diff` has been
removed as its redundant with `last.diff`.
It can be convenient to open `last.diff` and use undo/redo to navigate
its history.
Release Notes:
- N/A
Michael Sloan
created
9fe4a14
Add a brief description of GPUI 2->GPUI 3 changes to `.rules` (#29180)
Click to expand commit body
Release Notes:
- N/A
Michael Sloan
created
7cc3c03
editor: Fix hang when scrolling over single line input fields (#28471)
Click to expand commit body
Closes #21684
Closes #28463
Closes #28264
This PR fixes Zed hanging when scrolling over single line input fields
with `scroll_beyond_last_line` set to `vertical_scroll_margin`. The
change here is to fix the calculations of available lines.
The issue only arises with the setting present because with all
overscroll settings and `max_row` being 1 for single-line editors, the
calculation would still return the correct value of available lines,
which is 1. However, with overscrolling set to `vertical_scroll_margin`
and that set to any value greater than 0, the calculation would return
that the single-line editor has more than one line, which caused the
issues described above (Actually, setting `vertical_scroll_margin` to 1
works for some reason, overscrolls "properly" and does not cause a
crash. But I really did not want to investigate this buggy behavior
further).
This PR fixes this by always reporting the number of available lines as
the line number value for single line editors, which will (mostly) be 1
(for more context see the discussion in this PR).
Release Notes:
- Fixed an issue where Zed would crash when scrolling over single line
input fields and `scroll_beyond_last_line` set to
`vertical_scroll_margin`.
https://github.com/user-attachments/assets/7854a737-ef83-414c-b397-45122e4f32e8
Release Notes:
- Create file and edit file tools now stream their tool descriptions, so
you can see what they're doing sooner.
---------
Co-authored-by: Marshall Bowers <git@maxdeviant.com>
Richard Feldman
and
Marshall Bowers
created
7aa0fa1
Add ability to attach rules as context (#29109)
Click to expand commit body
Release Notes:
- agent: Added support for adding rules as context.
Michael Sloan
created
3b31860
Add to `.rules`: Avoid creating `mod.rs` paths (#29174)
Click to expand commit body
Release Notes:
- N/A
Michael Sloan
created
733cd6b
agent: Remove non-rust examples from evals (#29139)
This fixes a bug where terminated child session failed to restart
because they were using the wrong configuration/binary to start a new
session
Release Notes:
- N/A
Anthony Eid
created
0f3ac38
Agent eval: Copy `.rules` file into eval worktree for examples based on Zed (#29116)
Click to expand commit body
Also reverts #29108, which cherry-picked the rules file for an eval
example.
Release Notes:
- N/A