Commit log

61175fc ep: Always collect for staff (#46176)

Click to expand commit body
Release Notes:

- N/A

Co-authored-by: Max Brunsfeld <maxbrunsfeld@gmail.com>
Co-authored-by: Oleksiy Syvokon <oleksiy.syvokon@gmail.com>

Agus Zubiaga , Max Brunsfeld , and Oleksiy Syvokon created

b196831 vim: Maintain end-of-line intent after $ with vertical motions (#45375)

Click to expand commit body
Closes #45340

Release Notes:

- Fixed $ motion in vim mode to stay at end of the line when moving
vertically

---------

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

Mayank Verma and dino created

f057d46 Remove implicit dependency on Node env for data_dir devcontainer CLI (#45589)

Click to expand commit body
Closes #45058

Release Notes:

- Fixed implicit dependency on a system `node` for running
devcontainers.

KyleBarton created

d3c836d agent_ui: Show parameters when agent asks for permission to run tool (#45931)

Click to expand commit body
Closes #37307
Follow up to #40042

This will allow users to see the tool input before accepting a tool
call.

<img width="616" height="99" alt="image"
src="https://github.com/user-attachments/assets/3bcfda1e-bf84-4810-859d-ea53b3b33349"
/>

After clicking on "View Raw Input":
<img width="606" height="199" alt="image"
src="https://github.com/user-attachments/assets/cd89344a-80c4-41c7-a9d9-61c8671a6355"
/>


Release Notes:

- agent: Show tool call parameters when agent asks for confirmation to
run tool

---------

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

Bennet Bo Fenner and Danilo Leal created

efeea79 Edit prediction changes (#46169)

Click to expand commit body
1. Handle diffs with no trailing new lines 
2. ep: Don't assume workdir name in edit history paths
3. Fix `imitate_human_edits()` for pure insertions

Release Notes:

- N/A

---------

Co-authored-by: Agus Zubiaga <agus@zed.dev>

Oleksiy Syvokon and Agus Zubiaga created

9d05577 auto_update_ui: Add error fallback for viewing release notes locally (#45900)

Click to expand commit body
Closes https://github.com/zed-industries/zed/issues/42140

Changes:

- Add show_view_release_notes_locally_error to prompt users when the
operation fails.

<img width="1536" height="864" alt="image"
src="https://github.com/user-attachments/assets/265bbf7e-6931-4559-99b2-7c1d8fbcd6cc"
/>

Release Notes:

- Added a notification with a link to view release notes online when Zed
can’t load them locally.

---------

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

CodingDoll and Smit Barmase created

44b6995 signature_help: Fix crash when typing CJK in debug mode (#45785)

Click to expand commit body
in release mode: found many log error as `ERROR [rope::chunk] byte index
48 is not a char boundary; it is inside ',' (bytes 46..49)`

This is easy testing,
- enable signature help
- typing any CJK character
- crash in debug mode

Release Notes:

- N/A

CharlesChen0823 created

4f59ec0 Prevent app naps during audio playback on macOS (#46128)

Click to expand commit body
Release Notes:

- Fixed an issue on macOS where audio playback would become temporarily
scrambled when doing lots of IO operations, such as when running `git
pull` or `git checkout` while in a call.

Max Brunsfeld created

61eed8c Fix nightly bundle (#46163)

Click to expand commit body
The visual_test_runner binary (added in #45259) has `required-features =
["visual-tests"]`, so it doesn't get built in release builds. However,
`cargo bundle` was trying to bundle all binaries defined in the zed
crate's Cargo.toml, causing it to fail when visual_test_runner doesn't
exist.

Adding `--bin zed` tells cargo bundle to only bundle the main zed
binary.

**Note:** The `cli` binary is unaffected by this change - it's a
separate package (`crates/cli`) that's built separately via `cargo build
--package cli` and manually copied into the app bundle afterward (line
337). It was never part of `cargo bundle`'s scope.

Fixes the nightly build failure:
https://github.com/zed-industries/zed/actions/runs/20740971838

Release Notes:

- N/A

Richard Feldman created

c32abbd vim: Fix `:g/pattern/norm commands` applying on all matches (#43352)

Click to expand commit body
Closes #36359

Release Notes:

- Fixes bug where `:g/pattern/norm commands` would only apply on the
last match

---------

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

AidanV and dino created

9a50bd4 Add helix match surround operations (#44317)

Click to expand commit body
Partially addresses #38151

Release Notes:

- Added Helix match surround operations

Leon Qadirie created

dc40f21 editor: Fix ctrl+drag/drop to duplicate selected text (#45611)

Click to expand commit body
Holding control while dragging text to copy it was being blocked by link
handling stopping the propogation of the mouse event; solution: don't
handle link clicks when selection_drag_state is Dragging.

Issue found & fix tested on Linux (since the modifier key on mac is
apparently different, the issue likely doesn't occur there, but I'm
assuming it does apply to Windows).

I didn't see an issue open for it, and since I fixed it myself I'm
unsure whether it needs one or if the PR is enough.

Release Notes:

- Fix an issue where Ctrl+drag to duplicate selected text on Linux and
Windows when the selection is inside a link.

David Budke created

92b0f14 Changes to make `ep split-commits` work (#46160)

Click to expand commit body
1. `apply_diff` will create a file if the diff says so (by starting with
`--- /dev/null`)
2. Update examples format to match recent changes
3. `ep split-commits` can work with a stream of inputs and generate `n`
samples per input
4. Unicode handling fixes

Release Notes:

- N/A

Oleksiy Syvokon created

8829f1d lsp: Add `detail` to completion resolvable properties (#45985)

Click to expand commit body
Previously, `detail` was not included in resolvable properties, which
prevented LSP-compliant servers from lazily resolving it.

In relation to this, I also investigated vtsls issues:
- https://github.com/yioneko/vtsls/issues/213
- https://github.com/zed-industries/zed/pull/21521

My conclusion is that regardless of whether Zed registers `detail` in
resolvable properties, vtsls always lazily resolves `detail`. However, I
understand that Zed's `resolve_completions` has been improved to handle
such "misbehaving" servers gracefully already, so I expect that adding
`detail` to resolvable properties will not cause any issues.

In fact, since Zed can lazy update all properties of completion items,
it might be appropriate to include all properties as resolvable except
for `label` (which is explicitly tested for consistency) and `data`
(which is used for resolution itself once).
However, since I'm uncertain if this is entirely correct, this commit
only adds `detail` to resolvable properties, as it was required to be
supported by LSP clients up to version 3.16.

Closes #ISSUE

Release Notes:

- N/A

Shuhei Kadowaki created

07f9d9d git: Respect upstream branch name when pushing (#46158)

Click to expand commit body
Closes #46119

Release Notes:

- Fixed git push to respect the upstream branch name instead of defaulting to the local branch name.

ᴀᴍᴛᴏᴀᴇʀ created

6e21fa9 project: Fix LSP requests failing for remotes for builtin servers (#46156)

Click to expand commit body
Closes https://github.com/zed-industries/zed/issues/45928

Release Notes:

- Fixed builtin python language servers not correctly working on ssh
remotes

Lukas Wirth created

583a479 ep cli: Load captured examples from Snowflake (#46102)

Click to expand commit body
Release Notes:

- N/A

Agus Zubiaga created

216933f Multibuffer breadcrumbs toolbar redesign (#45547)

Click to expand commit body
Breadcrumb visual reorchestration which makes a couple of key changes:
- Breadcrumbs are now displayed in file headers for multibuffer views.
Singleton buffers are unchanged.
- Multibuffer views now have collapse/expand all buttons available in
the toolbar
- Search in multibuffer views now takes up less space, by occupying the
primary toolbar location erstwhile taken up by breadcrumbs

<img width="1721" height="823" alt="Screenshot 2025-12-22 at 4 15 41 PM"
src="https://github.com/user-attachments/assets/38e924f7-fe9e-4c83-84fb-2eee98137f43"
/>

<img width="1722" height="762" alt="Screenshot 2025-12-22 at 4 15 51 PM"
src="https://github.com/user-attachments/assets/ccc98ca3-75ce-4aca-bceb-890817b0f04d"
/>


Release Notes:

- Moved breadcrumbs to file headers in multibuffer views
- Added collapse/expand all options for multibuffer views
- Improved use of space for multibuffer search by taking the place of
the former breadcrumb toolbar location

---------

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

KyleBarton , Danilo Leal , and Zed Zippy created

9fcb36a docs: Fix Vim documentation for `toggle_relative_line_numbers` (#46152)

Click to expand commit body
As reported in
https://github.com/zed-industries/zed/pull/44749#issuecomment-3712881279

Release Notes:

- N/A

Finn Evers created

bbb3d51 settings_ui: Fix scrollbar breaking when UI font size changes (#45099)

Click to expand commit body
When the UI font size changes, the settings window's scrollbar would
break because list item measurements were cached and not invalidated.

We're using `ListState.measure_all()` to pre-measure all items for an
accurate scrollbar. When font size changes, these cached measurements
become stale but weren't being refreshed.

This commit fixes the issue by calling `ListState.measure_all()` when
settings change, ensuring items are re-measured on the next layout
without affecting scroll position.

Closes #43683

Release Notes:

- Fixed bug where changing the UI Font Size in the Settings UI would
break the scrollbar for the "Appearance" page

---------

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

Dino and Zed Zippy created

d105331 project_panel: Fix file missing or duplicated when copying/moving multiple items using drag-n-drop (#45567)

Click to expand commit body
Closes https://github.com/zed-industries/zed/issues/45555

Refer https://github.com/zed-industries/zed/pull/20859 for more.

Release Notes:

- Fixed a project panel drag-and-drop issue where selecting both a
folder and its children could result in files being silently lost in
some cases.

---------

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

Rocky Shi and Smit Barmase created

b4fb8ff recent_projects: Improve remote picker UX with long paths (#46151)

Click to expand commit body
Closes #36503

Release Notes:

- Improved readability of long paths in remote project picker

Lukas Wirth created

2c7bfec project_panel: Fix right-click target for folded directories (#45876)

Click to expand commit body
Closes #45635

Release Notes:

- Fixed context menu in project panel targeting the wrong folder when
right-clicking on folded directory paths.
- Added hover feedback to folded path folders to indicate which folder
will be targeted.

Recording:


https://github.com/user-attachments/assets/3209921a-b791-4eef-8eb7-1b5dc68374da

---------

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

André Eriksson and Smit Barmase created

fb06aa9 project: Properly set up the terminal env in remote shells (#46149)

Click to expand commit body
Closes https://github.com/zed-industries/zed/issues/35698

Release Notes:

- Fixed default zed terminal environment vars not being set in remote
terminal shells

Lukas Wirth created

87fe1af remote: Fix naming inconsistencies (#46146)

Click to expand commit body
Renames a bunch of ssh things to remote when its actually about remotes
in general

Release Notes:

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

Lukas Wirth created

47d2694 Add support for subpixel text rendering (#45423)

Click to expand commit body
Subpixel text rendering is now implemented on Windows and Linux.

Comparison screenshots:

|Before|After|
| ------------- | ------------- |
| <img width="400"
src="https://github.com/user-attachments/assets/9d720d2c-2ec4-4adf-a83f-7c2d81d30025"
/> | <img width="400"
src="https://github.com/user-attachments/assets/8fd7dc2a-8ca0-4f71-86cd-55460f568f7a"
/> |


Release Notes:

- Added support for subpixel (ClearType-style) text rendering. This
improves the legibility of text on standard DPI displays. Subpixel
rendering is enabled by default on Windows and Linux and can be
configured using the `text_rendering_mode` setting.

---------

Co-authored-by: Max Brunsfeld <maxbrunsfeld@gmail.com>

John Tur and Max Brunsfeld created

797276b smol: Use `Unblock` instead of `Async` for stdin, stdout and stderr handles (#46141)

Click to expand commit body
as per its documentation:

`Async` supports all networking types, as well as some OS-specific file
descriptors like timerfd and inotify.

However, do not use `Async` with types like File, Stdin, Stdout, or
Stderr because all operating systems have issues with them when put in
non-blocking mode.

Release Notes:

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

Lukas Wirth created

c7c0f56 languages: Capture escape sequences in C and C++ (#46116)

Click to expand commit body
Before:
<img width="901" height="247" alt="before"
src="https://github.com/user-attachments/assets/95467f0a-e464-44ea-a8f3-bedccf57c6a9"
/>

After:
<img width="967" height="256" alt="after"
src="https://github.com/user-attachments/assets/5eb43918-4348-42d2-9174-3fafd82919d0"
/>

Release Notes:

- Added highlighting for escape sequences for C and C++.

ozacod created

ec41d39 git: Add basic vim motions to git file history view (#45412)

Click to expand commit body
Closes #ISSUE

Related discussion #44629 

Release Notes:

- Added simple `g g`, `G`, `j` and `k` motions for the file history view
on vim mode.

Alvaro Parker created

75dde03 Ensure language is set on diffs from `ActionLog` and `AcpThread` (#46129)

Click to expand commit body
Release Notes:

- N/A

Cole Miller created

f35e678 editor: Use less memory when replacing literal strings (#46092)

Click to expand commit body
Found while profiling #38927

When the query is not a regex, the same replacement can be applied to
all matches. Previously, `replacement_for` allocated a new String on
every call, while `replacement` returns a reference.

Release Notes:

- N/A

---------

Signed-off-by: Marco Mihai Condrache <52580954+marcocondrache@users.noreply.github.com>

Marco Mihai Condrache created

778609f extension_host: Add error context to add_extension_to_index (#45913)

Click to expand commit body
Missing required extension files or directories currently result in
opaque "Directory not found" errors being logged during the update index
phase. This can be frustrating to those developing extensions. Add some
context so folks know where to start looking.

Release Notes:

- N/A

---------

Co-authored-by: Kirill Bulatov <mail4score@gmail.com>
Co-authored-by: Kirill Bulatov <kirill@zed.dev>

Aru Sahni , Kirill Bulatov , and Kirill Bulatov created

8c0b088 Screenshot testing (#45259)

Click to expand commit body
## Screenshot testing

Adds visual testing infrastructure for GPUI that captures screenshots by
rendering directly to Metal textures. The

The screenshots end up in `target/visual_tests/` and look like this:

<img width="2560" height="1600" alt="workspace_with_editor2"
src="https://github.com/user-attachments/assets/54112343-4af1-4347-9bab-f099de97dd29"
/>
<img width="2560" height="1600" alt="project_panel2"
src="https://github.com/user-attachments/assets/0cd54b61-dace-4398-a28e-0b4d7c2968f6"
/>


### Key Features

- **Direct texture capture**: Screenshots are captured by rendering the
scene to a Metal texture and reading pixels directly from GPU memory,
rather than using ScreenCaptureKit
- **No visibility requirements**: Windows don't need to be visible on
screen since we read directly from the render pipeline
- **Deterministic output**: Captures exactly what GPUI renders, not what
the OS compositor displays
- **No permissions needed**: Doesn't require Screen Recording permission
like ScreenCaptureKit would

### Running the Visual Tests

```bash
# Run visual tests (compares against baselines)
cargo run -p zed --bin visual_test_runner --features visual-tests

# Update baseline images (when UI intentionally changes)
UPDATE_BASELINE=1 cargo run -p zed --bin visual_test_runner --features visual-tests

# View the captured screenshots
open target/visual_tests/
```

### Implementation

- `Window::render_to_image()` - Renders the current scene to a texture
and returns an `RgbaImage`
- `MetalRenderer::render_to_image()` - Core implementation that renders
to a non-framebuffer-only texture
- `VisualTestAppContext` - Test context that uses real macOS platform
rendering
- `VisualTestAppContext::capture_screenshot()` - Synchronous screenshot
capture using direct texture rendering

### Usage

```rust
let mut cx = VisualTestAppContext::new();
let window = cx.open_window(...)?;
let screenshot: RgbaImage = cx.capture_screenshot(window.into())?;
```

Release Notes:

- N/A

---------

Co-authored-by: Amp <amp@ampcode.com>

Richard Feldman and Amp created

8ba030a Delete pulled diagnostics when the source registration is unregistered (#46105)

Click to expand commit body
Additionally, fix a race condition where we'd still insert diagnostics
from a document or workspace pull even if the registration had been
unregistered in the time since the request was issued.

And, as a bonus: when a new pull diagnostics registration is added,
issue document pulls immediately.

This should fix regressions with basedpyright caused by
https://github.com/zed-industries/zed/pull/43703.

Release Notes:

- N/A

John Tur created

6625997 languages: Include namespace in the outline for C++ (#45794)

Click to expand commit body
Before: 

<img width="389" height="147" alt="image"
src="https://github.com/user-attachments/assets/5412bde6-2f1b-4bb4-a06f-111724597372"
/>

After:
<img width="404" height="139" alt="image"
src="https://github.com/user-attachments/assets/8f906245-4c6e-4cf0-bb32-1b47048f46c0"
/>


Release Notes:

- Include namespace symbol in the outline view for C++.

Haojian Wu created

0e5b6a5 outline: Fix nesting issue for variable declarations (#45797)

Click to expand commit body
Before:

<img width="665" height="116" alt="image"
src="https://github.com/user-attachments/assets/3c0b6ea4-f030-4fef-a0eb-8251ce16a651"
/>

After:

<img width="601" height="104" alt="image"
src="https://github.com/user-attachments/assets/31659c75-6f73-40e7-9d3b-c4ae99357b12"
/>

The fix is similar to https://github.com/zed-industries/zed/pull/36076.

Release Notes:

- Fix outline nesting issue for variable declarations in C++

Haojian Wu created

e07a304 ci: Use `zed-zippy` identity for `bump_patch_version.yml` (#46099)

Click to expand commit body
This PR updates the `bump_patch_version.yml` to also be generated by
`cargo xtask workflows` and updates this to use the `zed-zippy` identity
instead of the `ConradIrwin` identity.

Release Notes:

- N/A

Finn Evers created

72c7a31 Fix minidump upload request (#46091)

Click to expand commit body
Release Notes:

- N/A

---------

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

Julia Ryan and Zed Zippy created

93c447e zeta2: Fix double lease panic in event capture (#46096)

Click to expand commit body
Closes #ISSUE

Release Notes:

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

Ben Kunkle created

62ae7fb Add global and HTTP context server timeout settings (#45378)

Click to expand commit body
### Closes 
- Maybe https://github.com/zed-industries/zed/issues/38252 (there might
be something going on with NPX too)
- Also addresses
https://github.com/zed-industries/zed/pull/39021#issuecomment-3644818347



### Why
Some more involved MCP servers timeout often, especially on first setup.
I got tired of having to set timeouts manually per server. I also
noticed a timeout could not be set for http context servers, which
causes Context7 or GitHub's remote servers to timeout at 60s sometimes.

### Overview

MCP Timeout Configuration Feature

This PR adds additional configurable timeout settings for Model Context
Protocol servers including a global timeout and the addition of timeouts
for http servers, addressing issues where servers were timing out after
a fixed 60 seconds regardless of user needs.

**Key Features:**
- **Global timeout setting** (`context_server_timeout`) - default
timeout for all MCP servers (default: 60s, max: 10min)
- **Per-server timeout overrides** - individual servers can specify
custom timeouts via `timeout` field
- **Precedence hierarchy** - per-server timeout > global timeout >
default (60s)
- **Automatic bounds checking** - enforces 10-minute maximum to prevent
resource exhaustion
- **Support for both transports** - works with stdio and HTTP-based
context servers
- **Comprehensive test coverage** - 3 new tests validating global,
override, and stdio timeout behavior
- **Full backward compatibility** - existing configurations work
unchanged with sensible defaults


### Release Notes:

- Added the ability to configure timeouts for context server tool calls.
The new global `context_server_timeout` setting controls the default
timeout (default is 60s, max: 10min). Additionally, per-server timeouts
can be configured using the `timeout` field within servers defined in
the `"context_servers" setting

---------

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

John D. Swanson and Ben Kunkle created

beece46 language: Remove embeds support (#46076)

Click to expand commit body
Embeddings have neither been used nor maintained in over a year and
there are currently no plans to use these again any time soon. Hence,
remove support for these here to more clearly indicate that these are
actually not used.

Release Notes:

- N/A

Finn Evers created

dd0d51b Sync the winget repo before publishing (#46093)

Click to expand commit body
This seemed to fix a bug where our winget release was not automatically
published.

Release Notes:

- N/A

Conrad Irwin created

84017bc Add OpenAI Responses API support with chat_completions capability flag (#39989)

Click to expand commit body
Add support for OpenAI's /responses endpoint for models that don't
support /chat/completions API. This enables compatibility with newer
model variants (`gpt-5-codex`, `gpt-5-pro`, `o3-pro`, etc) while
maintaining compatibility with existing configs

Changes:
- Add `supports_chat_completions` flag to model capabilities that
defaults to true for existing behavior
- Implement responses API client with streaming support as per [OpenAI
documentation](https://app.stainless.com/api/spec/documented/openai/openapi.documented.yml).
- Add `ResponseEventMapper` to convert responses events to completion
events for maintainer simplicity
- Update UI to allow toggling `chat_completions` capability
- Add `gpt-5-codex` model

Closes #38858

Release Notes:
- Added support for `gpt-5-codex` model

---------

Co-authored-by: Bennet Bo Fenner <bennet@zed.dev>

Matt Stallone and Bennet Bo Fenner created

e70d252 agent_ui: Fix agent UI stealing focus on start up (#46088)

Click to expand commit body
Release Notes:

- Fixed Zed stealing element focus away briefly after startup,
interrupting user workflows

Lukas Wirth created

06a623e git_ui: Add `CreatePullRequest` action (#42959)

Click to expand commit body
Closes #42217 

Release Notes:
- Added/Fixed/Improved ...
added "Create Pull Request" Command when searching on the command
Palette

For more details, please refer to the issue, thank you.

---------

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

Tommy Han and dino created

4dd54c6 vim: Fix word object count multiplier (2aw, 2iw) (#45686)

Click to expand commit body
Closes #44251

## Context

Commands like `2daw` or `c2iw` were ignoring the count multiplier
because the word text object functions (`in_word`, `around_word`)
weren't using the `times` parameter. This fix propagates the count
through these functions so all operators correctly handle multiple
words.

## Before


https://github.com/user-attachments/assets/d5effa8a-4c04-4d70-a6b5-389cba730ca9

## After


https://github.com/user-attachments/assets/c50e4c0c-ea5c-4673-9c98-3d924b448025


Release Notes:

- Fixed vim mode count multiplier for word text objects (`2aw`, `2iw`,
`2aW`, `2iW`)

Mateo Kruk created

32f71af agent_ui: Fix hangs when accepting agent file deletions (#46086)

Click to expand commit body
Closes https://github.com/zed-industries/zed/issues/44160

Release Notes:

- Fixed a hang when accepting file deletions made by the agent while the
deleted buffer was still open

Lukas Wirth created

075454f settings_ui: Add proxy edit box (#45684)

Click to expand commit body
Release Notes:

- settings_ui: Added a field to configure the network proxy.

Signed-off-by: Xiaobo Liu <cppcoffee@gmail.com>

Xiaobo Liu created

4e0e7cf windows: Fix IME candidate window not appearing at cursor position (#46079)

Click to expand commit body
Release Notes:

- Fixed some IME popups and the emoji picker not appearing at the cursor
position on windows

Lukas Wirth created

8813abe Enable terminal activation for uv-managed environments (#45949)

Click to expand commit body
Currently, the Python toolchain can identify `uv` and `uv-workspace`
environments (showing the correct labels in the UI), but it fails to
activate them when opening a new terminal. This is because the
activation script resolution and command generation logic were missing
for these environment kinds.

This PR adds `uv` and `uv-workspace` to the standard virtual environment
activation flow. Since `uv` creates environments with a standard `venv`
structure, we can reuse the existing `resolve_venv_activation_scripts`
logic to find and execute the appropriate `activate` scripts for
different shells.

Release Notes:

- Fixed terminal activation for `uv` and `uv-workspace` Python
environments.

Xin Zhao created