0e6f44d
wip - vim syntax node objects
Ben Kunkle created
0e6f44d
wip - vim syntax node objects
Ben Kunkle created
707a4c7
Remove unused editor_model configuration option (#31492)
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)
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)
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)
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)
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)
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)
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)
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>
Piotr Osiewicz and Kirill Bulatov created
b820aa1
Add tool support for DeepSeek (#30223)
[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)
Closes #ISSUE Release Notes: - N/A
Piotr Osiewicz created
b798392
Expand tilde paths in edit prediction settings (#31235)
Release Notes: - edit_prediction: Handle `~` in paths in `disabled_globs` setting
clauses3 created
657c8b1
project_panel: Improve behavior for cut-pasting entries (#31931)
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)
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)
Release Notes: - N/A
Michael Sloan created
6d66ff1
Add Helix implementation for `Motion::FindForward` and `Motion::FindBackward` (#31547)
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)
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)
On Linux, the correct modifier key for this action is `alt`, not `ctrl`.
I mistakenly set it to `ctrl` on #30268.
From Sublime's keymap:
```json
{ "keys": ["ctrl+left"], "command": "move", "args": {"by": "words", "forward": false} },
{ "keys": ["ctrl+right"], "command": "move", "args": {"by": "word_ends", "forward": true} },
{ "keys": ["ctrl+shift+left"], "command": "move", "args": {"by": "words", "forward": false, "extend": true} },
{ "keys": ["ctrl+shift+right"], "command": "move", "args": {"by": "word_ends", "forward": true, "extend": true} },
{ "keys": ["alt+left"], "command": "move", "args": {"by": "subwords", "forward": false} },
{ "keys": ["alt+right"], "command": "move", "args": {"by": "subword_ends", "forward": true} },
{ "keys": ["alt+shift+left"], "command": "move", "args": {"by": "subwords", "forward": false, "extend": true} },
{ "keys": ["alt+shift+right"], "command": "move", "args": {"by": "subword_ends", "forward": true, "extend": true} },
```
Release Notes:
- N/A
Fernando Carletti created
8ab7d44
terminal: Match trait bounds with terminal input (#31441)
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)
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)
Release Notes: - N/A
Michael Sloan created
4a5c55a
debugger: Use new icons for quick debug/spawn button (#31932)
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)
Release Notes: - N/A
Cole Miller created
6f97da3
debugger: Align zoom behavior with other panels (#31901)
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)
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)
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)
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)
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.
Michael Sloan created
b7ec437
Simplify debug launcher UI (#31928)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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
Dino created
a6544c7
vim: Fix add empty line (#30987)
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)
Closes #17786
Release Notes:
- Adds `:e[dit] {file}` command to open files
AidanV created
65e3e84
language_models: Add thinking support for ollama (#31665)
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)
Closes #ISSUE Release Notes: - N/A *or* Added/Fixed/Improved ...
morgankrey created
c874f1f
agent: Migrate thread storage to SQLite with zstd compression (#31741)
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
Oleksiy Syvokon created
9a9e96e
Increase terminal inline assistant block height (#31807)
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)
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)
# 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>
Thiago Pacheco and Piotr Osiewicz created
f90333f
zlog: Check crate name against filters if scope empty (#31892)
Fixes https://github.com/zed-industries/zed/discussions/29541#discussioncomment-13243073 Release Notes: - N/A *or* Added/Fixed/Improved ...
Ben Kunkle created
b24f614
docs: Improve documentation around Vulkan/GPU issues on Linux (#31895)
Closes #ISSUE Release Notes: - N/A *or* Added/Fixed/Improved ...
Ben Kunkle created
cefa0cb
Improve the file finder picker footer design (#31777)
The current filter icon button in the file finder picker footer confused me because it is a really a toggleable button that adds a specific filter. From the icon used, I was expecting more configuration options rather than just one. Also, I was really wanting a way to trigger it with the keyboard, even if I need my mouse to initially learn about the keybinding. So, this PR transforms that icon button into an actual popover trigger, in which (for now) there's only one filter option. However, being a menu is cool because it allows to accomodate more items like, for example, "Include Git Submodule Files" and others, in the future. Also, there's now a keybinding that you can hit to open that popover, as well as an indicator that pops in to communicate that a certain item inside it has been toggled. Lastly, also added a keybinding to the "Split" menu in the spirit of making everything more keyboard accessible! | Before | After | |--------|--------| |  |  | Release Notes: - Improved the keyboard navigability of the file finder filtering options.
Danilo Leal created
3fb1023
editor: Fix columnar selection incorrectly uses cursor to start selection instead of mouse position (#31888)
Closes #13905 This PR fixes columnar selection to originate from mouse position instead of current cursor position. Now columnar selection behaves as same as Sublime Text. 1. Columnar selection from click-and-drag on text (New): https://github.com/user-attachments/assets/f2e721f4-109f-4d81-a25b-8534065bfb37 2. Columnar selection from click-and-drag on empty space (New): https://github.com/user-attachments/assets/c2bb02e9-c006-4193-8d76-097233a47a3c 3. Multi cursors at end of line when no interecting text found (New): https://github.com/user-attachments/assets/e47d5ab3-0b5f-4e55-81b3-dfe450f149b5 4. Converting normal selection to columnar selection (Existing): https://github.com/user-attachments/assets/e5715679-ebae-4f5a-ad17-d29864e14e1e Release Notes: - Fixed the issue where the columnar selection (`opt+shift`) incorrectly used the cursor to start the selection instead of the mouse position.
Smit Barmase created