e7de80c
ci: Improve Danger and ci.yml explicitness (#31979)
Click to expand commit body
Allow colons after issue links and for them to in ul.
Change ci references from [self-hosted, test] to more explicit
[self-hosted, macOS]
Release Notes:
- N/A
---------
Co-authored-by: Ben Kunkle <ben.kunkle@gmail.com>
Co-authored-by: Smit Barmase <heysmitbarmase@gmail.com>
Peter Tripp
,
Ben Kunkle
, and
Smit Barmase
created
ae210ec
Fix aggressive indent in shell scripts (#31973)
Click to expand commit body
Closes: https://github.com/zed-industries/zed/issues/31774
Release Notes:
- N/A
Co-authored-by: Ben Kunkle <ben.kunkle@gmail.com>
Peter Tripp
and
Ben Kunkle
created
a9d99d8
docs: Improve docs for debugger (around breakpoints and doc structure) (#31962)
# Fix Python Virtual Environment Detection in Zed
## Problem
Zed was not properly detecting Python virtual environments when a
project didn't contain a `pyrightconfig.json` file. This caused Pyright
(the Python language server) to report `reportMissingImports` errors for
packages installed in virtual environments, even though the virtual
environment was correctly set up and worked fine in other editors.
The issue was that while Zed's `PythonToolchainProvider` correctly
detected virtual environments, this information wasn't being
communicated to Pyright in a format it could understand.
## Root Cause
The main issue was in how Zed communicated virtual environment
configuration to Pyright through the Language Server Protocol (LSP).
When Pyright requests workspace configuration, it expects virtual
environment settings (`venvPath` and `venv`) at the root level of the
configuration object - the same format used in `pyrightconfig.json`
files. However, Zed was attempting to place these settings in various
nested locations that Pyright wasn't checking.
## Solution
The fix involves several coordinated changes to ensure Pyright receives
virtual environment configuration in all the ways it might expect:
### 1. Enhanced Workspace Configuration (`workspace_configuration`
method)
- When a virtual environment is detected, Zed now sets `venvPath` and
`venv` at the root level of the configuration object, matching the exact
format of a `pyrightconfig.json` file
- Uses relative path `"."` when the virtual environment is located in
the workspace root
- Also sets `python.pythonPath` and `python.defaultInterpreterPath` for
compatibility with different Pyright versions
### 2. Environment Variables for All Language Server Binaries
- Updated `check_if_user_installed`, `fetch_server_binary`,
`check_if_version_installed`, and `cached_server_binary` methods to
include shell environment variables
- This ensures environment variables like `VIRTUAL_ENV` are available to
Pyright, helping with automatic virtual environment detection
### 3. Initialization Options
- Added minimal initialization options to enable Pyright's automatic
path searching and import completion features
- Sets `autoSearchPaths: true` and `useLibraryCodeForTypes: true` to
improve Pyright's ability to find packages
## Key Changes
The workspace configuration now properly formats virtual environment
configuration:
- Root level: `venvPath` and `venv` (matches pyrightconfig.json format)
- Python section: `pythonPath` and `defaultInterpreterPath` for
interpreter paths
## Impact
- Users no longer need to create a `pyrightconfig.json` file for virtual
environment detection
- Python projects with virtual environments in standard locations
(`.venv`, `venv`, etc.) will work out of the box
- Import resolution for packages installed in virtual environments now
works correctly
- Maintains compatibility with manual `pyrightconfig.json` configuration
for complex setups
## Testing
The changes were tested with Python projects using virtual environments
without `pyrightconfig.json` files. Pyright now correctly resolves
imports from packages installed in the virtual environment, eliminating
the `reportMissingImports` errors.
## Release Notes
- Fixed Python virtual environment detection when no
`pyrightconfig.json` is present
- Pyright now correctly resolves imports from packages installed in
virtual environments (`.venv`, `venv`, etc.)
- Python projects with virtual environments no longer show false
`reportMissingImports` errors
- Improved Python development experience with automatic virtual
environment configuration
---------
Co-authored-by: Piotr Osiewicz <24362066+osiewicz@users.noreply.github.com>
Thiago Pacheco
and
Piotr Osiewicz
created
9e75871
agent: Make the sound notification play only if Zed is in the background (#31975)
Click to expand commit body
Users were giving feedback about the sound notification being
annoying/unnecessary if Zed is in the foreground, which I agree! So,
this PR changes it so that it only plays if that is not the case.
Release Notes:
- agent: Improved sound notification behavior by making it play only if
Zed is in the background.
It seems that this configuration option is no longer used and can be
removed.
Release Notes:
- Removed unused `agent.editor_model` setting
Ben Brandt
created
854076f
agent: Lower "no thread found" logging level to debug (#31972)
Click to expand commit body
This code path is not really an error, as it can happen due to normal,
albeit uncommon, actions. Like, for example, this scenario:
1. Create a thread X in Zed instance A
2. Open Zed instance B
3. Delete the thread X in instance A
4. Close instance B. This will write non-existing thread id X to
`agent-navigation-history.json`
5. Open Zed instance C. It won't be able to load the thread X.
Another way to get into this state is by running Zed with LMDB and
SQLite thread storages side-by-side.
In any case, this is not severe enough for an error.
Closes #ISSUE
Release Notes:
- N/A
Oleksiy Syvokon
created
cf93124
Add thinking budget for Gemini custom models (#31251)
Click to expand commit body
Closes #31243
As described in my issue, the [thinking
budget](https://ai.google.dev/gemini-api/docs/thinking) gets
automatically chosen by Gemini unless it is specifically set to
something. In order to have fast responses (inline assistant) I prefer
to set it to 0.
Release Notes:
- ai: Added `thinking` mode for custom Google models with configurable
token budget
---------
Co-authored-by: Ben Brandt <benjamin.j.brandt@gmail.com>
90aca
and
Ben Brandt
created
b74477d
Option to auto-close deleted files with no unsaved edits (#31920)
Click to expand commit body
Closes #27982
Release Notes:
- Added `close_on_file_delete` setting (off by default) to allow closing
open files after they have been deleted on disk
---------
Co-authored-by: Bennet Bo Fenner <bennetbo@gmx.de>
Ben Brandt
and
Bennet Bo Fenner
created
3077abf
google_ai: Parse thought parts in Gemini responses (#31925)
Click to expand commit body
Fixes thinking Gemini models.
Closes #31902
Release Notes:
- Updated Google Gemini client to match the latest API
Fernando Freire
created
07dab4e
multi_buffer: Merge adjacent matches into a single excerpt when separated by only one line (#31708)
Click to expand commit body
Closes #31252
Release Notes:
- Improved displaying of project search matches or diagnostics when the
excerpts are adjacent.
---------
Co-authored-by: Antonio Scandurra <me@as-cii.com>
Kiran_Peraka
and
Antonio Scandurra
created
59686f1
language_models: Add images support for Ollama vision models (#31883)
Click to expand commit body
Ollama supports vision to process input images. This PR adds support for
same. I have tested this with gemma3:4b and have attached the screenshot
of it working.
<img width="435" alt="image"
src="https://github.com/user-attachments/assets/5f17d742-0a37-4e6c-b4d8-05b750a0a158"
/>
Release Notes:
- Add image support for [Ollama vision models](https://ollama.com/search?c=vision)
Umesh Yadav
created
a60bea8
collab: Reconnect to channel notes (#31950)
Click to expand commit body
Closes #31758
Release Notes:
- Fixed channel notes not getting re-connected when a connection to Zed
servers is restored.
---------
Co-authored-by: Kirill Bulatov <mail4score@gmail.com>
[deepseek function call
api](https://api-docs.deepseek.com/guides/function_calling)
has been released and it is same as openai.
Release Notes:
- Added tool calling support for Deepseek Models
---------
Co-authored-by: Bennet Bo Fenner <bennetbo@gmx.de>
THELOSTSOUL
and
Bennet Bo Fenner
created
55d91bc
debugger: Add tooltips to the new process modal (#31953)
Click to expand commit body
Closes #ISSUE
Release Notes:
- N/A
Piotr Osiewicz
created
b798392
Expand tilde paths in edit prediction settings (#31235)
Click to expand commit body
Release Notes:
- edit_prediction: Handle `~` in paths in `disabled_globs` setting
clauses3
created
657c8b1
project_panel: Improve behavior for cut-pasting entries (#31931)
Click to expand commit body
Previously, we would move entries each time they were pasted. Thus, if
you were to cut some files and pasted them in folder `a` and then `b`,
they would only occur in folder `b` and not in folder `a`. This is
unintuitive - e.g. the same does not apply to text and does not happen
in other editors.
This PR improves this behavior - after the first paste of a cut
clipboard, we change the clipboard to a copy clipboard, ensuring that
for all folloing pastes, the entries are not moved again. In the above
example, the files would then also be found in folder `a`. This is also
reflected in the added test.
Release Notes:
- Ensured that cut project panel entries are cut-pasted only on the
first use, and copy-pasted on all subsequent pastes.
Finn Evers
created
2bb8aa2
go_to_line: Show position relative to current excerpt in a multi-buffer (#31947)
Click to expand commit body
Closes #31515
This PR explicitly leaves the behavior of go to line unspecified with
multi-buffer.
Release Notes:
- Fixed wrong line number being shown in the status bar when in
multi-buffer.
Piotr Osiewicz
created
beeb42d
snippets: Show completions on first range in tabstop instead of last (#31939)
Click to expand commit body
Release Notes:
- N/A
Michael Sloan
created
6d66ff1
Add Helix implementation for `Motion::FindForward` and `Motion::FindBackward` (#31547)
Click to expand commit body
Closes #30462
Release Notes:
- Added text selection for "vim::PushFindForward" and
"vim::PushFindBackward" keybinds in helix mode
thebasilisk
created
e0b818a
Fix duplicate prefixes when repeating completions in Vim mode (#31818)
Click to expand commit body
When text is completed, new_text contains the entire new completion
which replaces the old_text. In Vim mode, pressing . repeats the
completion; if InputHandled records the full text and no range to
replace, the entire completion gets appended; this happens after the
completion prefix typing repeats, and we get a duplicate prefix.
Using range to replace has some downsides when the completion is
repeated as a standalone action; in a common case, it should be
sufficient to record the new suffix. This is actually what used to
happen before #28586, which removed this code in a larger attempt to fix
completions at multiple cursors:
```rust
let text = &new_text[common_prefix_len..];
let utf16_range_to_replace = ...
cx.emit(EditorEvent::InputHandled {
utf16_range_to_replace,
text: text.into(),
});
```
Fixes #30758
Fixes #31759
Fixes #31779
Release Notes:
- Vim: Fix duplicate prefixes when repeating completions via `.`
Arseny Kapoulkine
created
58a400b
keymap: Fix subword navigation and selection on Sublime Text keymap (#31840)
8ab7d44
terminal: Match trait bounds with terminal input (#31441)
Click to expand commit body
The core change here is the following:
```rust
fn write_to_pty(&self, input: impl Into<Vec<u8>>);
// into
fn write_to_pty(&self, input: impl Into<Cow<'static, [u8]>>);
```
This matches the trait bounds that's used by the Alacritty crate. We are
now allowed to effectively pass `&'static str` instead of always needing
a `String`.
The main benefit comes from making the `to_esc_str` function return a
`Cow<'static, str>` instead of `String`. We save an allocation in the
following instances:
- When the user presses any special key that isn't alphanumerical (in
the terminal)
- When the uses presses any key while a modifier is active (in the
terminal)
- When focusing/un-focusing the terminal
- When completing or undoing a terminal transaction
- When starting a terminal assist
This basically saves us an allocation on **every key** press in the
terminal.
NOTE: This same optimization can be done for **nearly all** keypresses
in the entirety of Zed by changing the signature of the `Keystroke`
struct in gpui. If the Zed team is interested in a PR for it, let me
know.
Release Notes:
- N/A
tidely
created
56d4c0a
snippets: Preserve leading whitespace (#31933)
Click to expand commit body
Closes #18481
Release Notes:
- Snippet insertions now preserve leading whitespace instead of using
language-specific auto-indentation.
Michael Sloan
created
feeda7f
Add newlines between messages in LSP RPC logs for more navigability (#31863)
Click to expand commit body
Release Notes:
- N/A
Michael Sloan
created
4a5c55a
debugger: Use new icons for quick debug/spawn button (#31932)
Click to expand commit body
This PR wires up the new icons that were added in #31784.
Release Notes:
- N/A
Cole Miller
created
7c1ae9b
debugger: Go back to loading task contexts asynchronously for new session modal (#31908)
Click to expand commit body
Release Notes:
- N/A
Cole Miller
created
6f97da3
debugger: Align zoom behavior with other panels (#31901)
Click to expand commit body
Release Notes:
- Debugger Beta: `shift-escape` (`workspace::ToggleZoom`) now zooms the
entire debug panel; `alt-shift-escape` (`debugger::ToggleExpandItem`)
triggers the old behavior of zooming a specific item.
Cole Miller
created
63c1033
agent: Generate a notification when reaching tool use limit (#31894)
Click to expand commit body
When reaching the consecutive tool call limit, the agent gets blocked
and without a notification, you wouldn't know that. This PR adds the
ability to be notified when that happens, and you can use either sound
_and_ toast, or just one of them.
Release Notes:
- agent: Added support for getting notified (via toast and/or sound)
when reaching the consecutive tool call limit.
Danilo Leal
created
b16911e
debugger: Extend `f5` binding to contextually rerun the last session (#31753)
Click to expand commit body
Release Notes:
- Debugger Beta: if there is no stopped or running session, `f5` now
reruns the last session, or opens the new session modal if there is no
previously-run session.
Cole Miller
created
b14401f
Remove agent_diff key context when agent review ends for an editor (#31930)
Click to expand commit body
Release Notes:
- Fixed an issue that prevented `git::Restore` keybindings from working
in editors for buffers that had previously been modified by the agent.
Co-authored-by: Anthony Eid <hello@anthonyeid.me>
Cole Miller
and
Anthony Eid
created
17cf865
Avoid re-querying language server completions when possible (#31872)
Click to expand commit body
Also adds reuse of the markdown documentation cache even when
completions are re-queried, so that markdown documentation doesn't
flicker when `is_incomplete: true` (completions provided by rust
analyzer always set this)
Release Notes:
- Added support for filtering language server completions instead of
re-querying.
This PR updates the name of the `NewSessionModal` to `NewProcessModal`
(to reflect it's new purpose), changes the tabs in the modal to read
`Run | Debug | Attach | Launch` and changes the associated types in code
to match the tabs. In addition, this PR adds a few labels to the text
fields in the `Launch` tab, and adds a link to open the associated
settings file. In both debug.json files, added links to the zed.dev
debugger docs.
Release Notes:
- Debugger Beta: Improve the new process modal
Mikayla Maki
created
f1aab11
terminal: Persist pinned tabs in terminal (#31921)
Click to expand commit body
Closes #31098
Release Notes:
- Fixed terminal pinned tab state not persisting across restarts.
Piotr Osiewicz
created
3f90bc8
gpui: Filter out NoAction bindings from pending input (#30260)
Click to expand commit body
This prevents the 1 second delay happening on input when all of the
pending bindings are NoAction
Closes #30259
Release Notes:
- Fixed unnecessary delay when typing a multi-stroke binding that
doesn't match any non-null bindings
---------
Co-authored-by: Conrad Irwin <conrad.irwin@gmail.com>
Joe Polny
and
Conrad Irwin
created
9d5fb3c
Add `:delm[arks] {marks}` command to delete vim marks (#31140)
Click to expand commit body
Release Notes:
- Implements `:delm[arks] {marks}` specified
[here](https://vimhelp.org/motion.txt.html#%3Adelmarks)
- Adds `ArgumentRequired` action for vim commands that require arguments
---------
Co-authored-by: Conrad Irwin <conrad.irwin@gmail.com>
AidanV
and
Conrad Irwin
created
864767a
agent: Support vim-mode in the agent panel's editor (#31915)
Click to expand commit body
Closes #30081
Release Notes:
- Added vim-mode support in the agent panel's editor
---------
Co-authored-by: Ben Kunkle <ben.kunkle@gmail.com>
Co-authored-by: Conrad Irwin <conrad.irwin@gmail.com>
Oleksiy Syvokon
,
Ben Kunkle
, and
Conrad Irwin
created
ec69b68
indent guides: Fix issue with entirely-whitespace lines (#31916)
Click to expand commit body
Closes #26957
Release Notes:
- Fix an edge case where indent guides would be rendered incorrectly if
lines consisted of entirely whitespace
Co-authored-by: Ben Brandt <benjamin.j.brandt@gmail.com>
Bennet Bo Fenner
and
Ben Brandt
created
9dd18e5
python: Re-land usage of source file path in toolchain picker (#31893)
Click to expand commit body
This reverts commit 1e55e88c1822402566bdec8a893ec0429d8ee5e6.
Closes #ISSUE
Release Notes:
- Python toolchain selector now uses path to the closest pyproject.toml
as a basis for picking a toolchain. All files under the same
pyproject.toml (in filesystem hierarchy) will share a single virtual
environment. It is possible to have multiple Python virtual environments
selected for disjoint parts of the same project.
Piotr Osiewicz
created
2ebe16a
workspace: Fix empty pane becomes unresponsive to keybindings after commit via terminal (#31905)
Click to expand commit body
Closes #27579
This PR fixes issue where keybinding wouldn’t work in a pane after
focusing it from dock using the `ActivatePaneInDirection` action in
certain cases.
https://github.com/user-attachments/assets/9ceca580-a63f-4807-acff-29b61819f424
Release Notes:
- Fixed the issue where keybinding wouldn’t work in a pane after
focusing it from dock using the `ActivatePaneInDirection` action in
certain cases.
Smit Barmase
created
1ed4647
Add test for `pane: toggle pin tab` (#31906)
Click to expand commit body
Also adds the optimization to not move a tab being pinned when its
destination index is the same as its index.
Release Notes:
- N/A
Joseph T. Lyons
created
ebed567
vim: Handle paste in visual line mode when cursor is at newline (#30791)
Click to expand commit body
This Pull Request fixes the current paste behavior in vim mode, when in
visual mode, and the cursor is at a newline character. Currently this
joins the pasted contents with the line right below it, but in vim this
does not happen, so these changes make it so that Zed's vim mode behaves
the same as vim for this specific case.
Closes #29270
Release Notes:
- Fixed pasting in vim's visual line mode when cursor is on a newline
character
Fixes:
`] space` does not consume counts, and it gets applied to the next
action.
`] space` on an empty line causes cursor to move to the next line.
Release Notes:
- N/A
5brian
created
b363e1a
vim: Add support for `:e[dit] {file}` command to open files (#31227)
Click to expand commit body
Closes #17786
Release Notes:
- Adds `:e[dit] {file}` command to open files
AidanV
created
65e3e84
language_models: Add thinking support for ollama (#31665)
Click to expand commit body
This PR updates how we handle Ollama responses, leveraging the new
[v0.9.0](https://github.com/ollama/ollama/releases/tag/v0.9.0) release.
Previously, thinking text was embedded within the model's main content,
leading to it appearing directly in the agent's response. Now, thinking
content is provided as a separate parameter, allowing us to display it
correctly within the agent panel, similar to other providers. I have
tested this with qwen3:8b and works nicely. ~~We can release this once
the ollama is release is stable.~~ It's released now as stable.
<img width="433" alt="image"
src="https://github.com/user-attachments/assets/2983ef06-6679-4033-82c2-231ea9cd6434"
/>
Release Notes:
- Add thinking support for ollama
---------
Co-authored-by: Bennet Bo Fenner <bennetbo@gmx.de>
Umesh Yadav
and
Bennet Bo Fenner
created
1e1d443
Fixing 404 in AI Configuration Docs (#31899)
c874f1f
agent: Migrate thread storage to SQLite with zstd compression (#31741)
Click to expand commit body
Previously, LMDB was used for storing threads, but it consumed excessive
disk space and was capped at 1GB.
This change migrates thread storage to an SQLite database. Thread JSON
objects are now compressed using zstd.
I considered training a custom zstd dictionary and storing it in a
separate table. However, the additional complexity outweighed the modest
space savings (up to 20%). I ended up using the default dictionary
stored with data.
Threads can be exported relatively easily from outside the application:
```
$ sqlite3 threads.db "SELECT hex(data) FROM threads LIMIT 5;" |
xxd -r -p |
zstd -d |
fx
```
Benchmarks:
- Original heed database: 200MB
- Sqlite uncompressed: 51MB
- sqlite compressed (this PR): 4.0MB
- sqlite compressed with a trained dictionary: 3.8MB
Release Notes:
- Migrated thread storage to SQLite with compression
Closes #31806
Closes #28969
Not sure if a static value is best. Maybe it is better to somehow use
`count_lines` function here too.
### Before
<img width="871" alt="449463234-ab1a33a0-2331-4605-aaee-cae60ddd0f9d"
src="https://github.com/user-attachments/assets/1e3bec86-4cad-426c-9f59-5ad3d14fc9d7"
/>
### After
<img width="861" alt="Screenshot 2025-05-31 at 1 12 33 AM"
src="https://github.com/user-attachments/assets/0c8219a9-0812-45af-8125-1f4294fe2142"
/>
Release Notes:
- Fixed terminal inline assistant clipping when cursor is at bottom of
terminal.
Alisina Bahadori
created
8c46e29
docs: Add more details to the agent checkpoint section (#31898)
Click to expand commit body
Figured this was worth highlighting as part of the "Restore Checkpoint"
feature behavior.
Release Notes:
- N/A
Danilo Leal
created
aacbb9c
python: Respect picked toolchain (when it's not at the root) when running tests (#31150)
Click to expand commit body
# Fix Python venv Detection for Test Runner
## Problem
Zed’s Python test runner was not reliably detecting and activating the
project’s Python virtual environment (.venv or venv), causing it to
default to the system Python. This led to issues such as missing
dependencies (e.g., pytest) when running tests.
## Solution
Project Root Awareness: The Python context provider now receives the
project root path, ensuring venv detection always starts from the
project root rather than the test file’s directory.
Robust venv Activation: The test runner now correctly detects and
activates the Python interpreter from .venv or venv in the project root,
setting VIRTUAL_ENV and updating PATH as needed.
Minimal Impact: The change is limited in scope, affecting only the
necessary code paths for Python test runner venv detection. No broad
architectural changes were made.
## Additional Improvements
Updated trait and function signatures to thread the project root path
where needed.
Cleaned up linter warnings and unused code.
## Result
Python tests now reliably run using the project’s virtual environment,
matching the behavior of other IDEs and ensuring all dependencies are
available.
Release Notes:
- Fixed Python tasks always running with a toolchain selected for the
root of a workspace.
---------
Co-authored-by: Piotr Osiewicz <24362066+osiewicz@users.noreply.github.com>