Commit Graph
38069 Commits
Author SHA1 Message Date
Jakub Konka 84c29531d2 ci: Remove garnix substitutor (#58033)
Release Notes:

- N/A
2026-05-29 05:56:42 +00:00
Yauhen a1fbe1f893 dev_container: Respect runServices for Docker Compose (#56293)
This PR fixes Docker Compose dev containers starting every service in
the compose project, even when `devcontainer.json` specifies
`runServices`.

Previously, Zed deserialized `runServices` but did not use it when
invoking Docker Compose. The startup command was:

```sh
docker compose ... up -d
```

With no service operands, Compose starts every enabled service in the
project. This means unrelated services are started even when the
devcontainer config asks to run only the primary service and its
dependencies.

The fix propagates `runServices` into the Docker Compose build/start
path so Zed invokes Compose with the requested services:

```sh
docker compose ... up -d devcontainer
```

Compose will still start services required by `depends_on`, but
unrelated services are left untouched.

**Reproduction**

`.devcontainer/devcontainer.json`:

```json
{
  "name": "Run Services",
  "dockerComposeFile": "../compose.yml",
  "service": "devcontainer",
  "runServices": ["devcontainer"],
  "workspaceFolder": "/workspace"
}
```

`compose.yml`:

```yaml
services:
  devcontainer:
    image: ubuntu:24.04
    command: sleep infinity
    volumes:
      - .:/workspace
    depends_on:
      - database

  database:
    image: postgres:16-alpine
    environment:
      POSTGRES_PASSWORD: postgres

  unrelated:
    image: nginx:alpine
```

**Expected**: Zed starts `devcontainer` and `database`.

**Before this fix**: Zed also starts `unrelated`.

**After this fix**: `unrelated` remains stopped.

Closes: https://github.com/zed-industries/zed/issues/57279

Self-Review Checklist:

- [x] I've reviewed my own diff for quality, security, and reliability
- [x] Unsafe blocks (if any) have justifying comments
- [x] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [x] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

Release Notes:

- Fixed Docker Compose dev containers starting services not listed in
`runServices`.
2026-05-29 05:12:28 +00:00
Richard Feldman c1f7752f1b Preserve terminal spinners in thread titles (#57983)
Summary:

- Preserve spinner/logo prefixes from live terminal titles when terminal
threads have custom titles.
- Store raw terminal titles and custom user titles separately,
recomposing display titles on demand.
- Keep spinner prefixes out of the title editor while preserving
sidebar/search display behavior.

Tests:

- cargo test -p agent_ui
test_terminal_custom_title_recomposes_with_live_spinner -- --nocapture
- cargo test -p agent_ui
test_terminal_title_editor_excludes_spinner_prefix -- --nocapture
- cargo test -p sidebar
test_agent_panel_terminals_appear_in_sidebar_and_search -- --nocapture

Closes AI-304

Release Notes:

- Fixed terminal thread titles to preserve animated spinner and logo
prefixes after renaming.
2026-05-29 03:47:05 +00:00
Mikayla Maki 2c111d3c90 Add skill share linking (#58009)
Added because I'd like to get this skill Danilo made without having to
upload a gist

Self-Review Checklist:

- [x] I've reviewed my own diff for quality, security, and reliability
- [x] Unsafe blocks (if any) have justifying comments
- [x] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [x] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

Release Notes:

- N/A
2026-05-28 23:04:44 +00:00
Anthony Eid 4de63c7c51 terminal: Move PTY spawning to the background thread and retain exit status (#58004)
This PR does two things 

1. Move PTY child spawning to the background executor. Forking to spawn
the terminal child was taking between 10-70ms on profiles I was looking
at, which caused frames to be dropped because it was on the foreground
thread. This should fix issues such as #57574 where the miniprof from
this comment showed terminal creation blocking the foreground thread as
well.
https://github.com/zed-industries/zed/issues/57574#issuecomment-4546858817

2. Stopped overwriting alacrities exit status with `9` on
`AlacTermEvent::Exit` event handling. Before we get the exit event,
alacritty emits `ChildExit(status)` with the real status, which we used
to overwrite with exit status 9 when handling the AlacTermEvent::Exit.
This was an easy fix so I added it in this PR when I noticed the bug.


Self-Review Checklist:

- [x] I've reviewed my own diff for quality, security, and reliability
- [x] Unsafe blocks (if any) have justifying comments
- [x] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [x] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

Closes #ISSUE

Release Notes:

- fixed dropped frames caused by agents or users creating new terminals
2026-05-28 22:24:22 +00:00
MartinYe1234 3120336f1c Show progress when deleting worktrees (#57751)
Adds a progress indicator to the worktree picker so users get visual
feedback while a worktree deletion is in progress, which can take
several seconds.

Closes AI-239

Release Notes:

- Added progress feedback in the worktree picker while deleting a
worktree
2026-05-28 21:52:53 +00:00
morgankrey 0dd62c6b41 Relicense Zed source code under GPL (#57948)
## Summary

This moves the remaining first-party AGPL surface to GPL, a less
restrictive license for these components. Apache-2.0 components are
unchanged.

Changes:
- Updates the `collab` crate from `AGPL-3.0-or-later` to
`GPL-3.0-or-later`
- Removes the root AGPL license file and first-party crate AGPL symlinks
- Updates web, documentation, Flatpak, README, and terms references to
reflect the GPL/Apache licensing split
- Updates the open-source component example list in the terms and
regenerates the RTF copy; no other terms changes are intended
- Adds guardrails so first-party crates cannot declare AGPL licensing or
carry `LICENSE-AGPL` files

Release timing: preview during the week of June 1, 2026; stable during
the week of June 8, 2026.

## Residual AGPL/Affero references

- `LICENSE-GPL`: GPLv3's own compatibility clause; unchanged official
license text.
- `crates/json_schema_store/src/schemas/package.json`: generic npm
package-license schema value, not Zed licensing.
- `script/check-licenses`, `script/new-crate`,
`script/licenses/zed-licenses.toml`: guardrails that reject or warn
against reintroducing AGPL.

## Verification

- `script/check-licenses`
- `script/generate-licenses`
- `script/generate-terms-rtf`
- `script/new-crate license_probe_for_gpl`, then discarded generated
crate
- `script/new-crate license_probe_for_agpl agpl` fails as expected
- `mdbook build docs`
- `./script/clippy`
- `git grep -n -I -E "AGPL|Affero"`
- `git diff --check`

Release Notes:

- The `collab` crate, used to implement Zed's collaboration backend, is
now licensed under the GPL instead of the AGPL. The AGPL license is no
longer used in the zed repository.
2026-05-28 20:19:17 +00:00
JannikRosendahl cb88f72757 Make notebook cells follow global font and markdown styling (#57567)
Notebook cells are currently not responding to changes in font-family
(`zed://settings/buffer_font_family`) and font-size
(`zed://settings/buffer_font_size`).

Currently, `MarkdownCell` and `CodeCell` create and set a
`TextStyleRefinement` on their `Editor`, creating copies of font-family
and font-size in the process. As a result, these do not get updated when
the global font-family or font-size change.
By not setting the refinement manually and letting the editor handle
these value instead, these values get updated when the global settings
change.

This behaviour is consistent with how the inline repl already behaves
and in my opinion is according to the users expectations.


After Review: this PR changes the rendered preview of MarkdownCells to
use the themed MarkdownStyle instead of an empty Markdown Style



Before:


https://github.com/user-attachments/assets/e70b9346-8fa1-4d66-aa85-07e987c56ff2

After:


https://github.com/user-attachments/assets/4957e20e-9b5b-4cb9-a9df-3b33538bc686



Self-Review Checklist:

- [x] I've reviewed my own diff for quality, security, and reliability
- [x] Unsafe blocks (if any) have justifying comments
- [x] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [ ] Tests cover the new/changed behavior
  - not sure if this needs test or how they should look like...
- [x] Performance impact has been considered and is acceptable

~~Closes #ISSUE~~

Release Notes:

- Fixed notebook cells not responding to appearance settings changes
2026-05-28 20:14:34 +00:00
Lee ByeongJun 075d55f655 time_format: Show compound "N years, M months ago" for blame entries (#57973)
The relative date format introduced in #47687 floors to whole years, so
a commit from 22 months ago is shown as "1 year ago". It would be better
to align with `git blame`'s own behavior so it can display timestamps
like "1 year, 10 months ago".

reference:
https://github.com/git/git/blob/c69baaf57ba26cf117c2b6793802877f19738b0d/date.c#L189-L205

Self-Review Checklist:

- [X] I've reviewed my own diff for quality, security, and reliability
- [ ] Unsafe blocks (if any) have justifying comments
- [ ] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [X] Tests cover the new/changed behavior
- [ ] Performance impact has been considered and is acceptable

Closes #57907

Release Notes:

- Fixed inaccurate humanized date in git blame, e.g. a commit from 22
months ago no longer shows as "1 year ago"
2026-05-28 19:43:30 +00:00
Marshall Bowers 59b7620c20 anthropic: Fix serialized representation of Effort::XHigh (#57985)
This PR fixes the serialized representation of the `Effort::XHigh`
variant, as it should be `xhigh`, not `x_high`.


https://platform.claude.com/docs/en/build-with-claude/adaptive-thinking#adaptive-thinking-with-the-effort-parameter

Release Notes:

- Fixed using `xhigh` thinking effort with Anthropic models.
2026-05-28 18:20:11 +00:00
Richard Feldman ab59e61f3e Add Claude Opus 4.8 support (#57984)
<img width="627" height="752" alt="Screenshot 2026-05-28 at 1 20 22 PM"
src="https://github.com/user-attachments/assets/0a7825f0-73c5-49e9-b59a-83924a45de98"
/>

Adds Claude Opus 4.8 for BYOK providers, including Anthropic fast-mode
handling and Bedrock/OpenCode model definitions.

Closes AI-336

Release Notes:

- Added Claude Opus 4.8 BYOK support
2026-05-28 17:45:54 +00:00
nullstalgiaanddino b81ce2f276 diagnostics: Prefer activating diagnostic under cursor (#52957)
Update the behavior of both `editor: go to diagnostic` and `editor: go
to previous diagnostic` in order to ensure that, if there's a diagnostic
under the user's cursor that isn't active, it is first activated, with a
subsequent call jumping to the next or previous diagnostic,
respectively.

These changes also update how diagnostic activation handles the
situation when the global diagnostic renderer is not registered, as we
used to not update the active diagnostic group in that situation.
However, we now rely on it to determine whether the user's cursor is
already in the active diagnostic, with some tests now failing, so we now
default to an empty set of blocks for the active diagnostic group when
no global renderer is registered.

Release Notes:

- Update both `editor: go to diagnostic` and `editor: go to previous
diagnostic` to prefer activating the diagnostic under the cursor before
jumping to the next or previous diagnostic, respectively

---------

Co-authored-by: dino <dinojoaocosta@gmail.com>
2026-05-28 17:30:36 +00:00
Joseph T. Lyons 41a23ca08d Sort guild members case insensitively (#57977)
Aligns list sorting with the community champions list.

Self-Review Checklist:

- [X] I've reviewed my own diff for quality, security, and reliability
- [ ] Unsafe blocks (if any) have justifying comments
- [ ] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [ ] Tests cover the new/changed behavior
- [ ] Performance impact has been considered and is acceptable

Release Notes:

- N/A
2026-05-28 16:55:35 +00:00
morgankrey f87a8ca82f Improve ChatGPT subscription response resilience (#57891)
## Summary

This started from #57636, after we saw ChatGPT subscription/Codex
requests stall over the past week. OpenCode v1.15.11 shipped related
resilience fixes for the same class of Codex subscription endpoint
issues, so this ports the relevant pieces into Zed's native ChatGPT
subscription provider.

When Zed asks ChatGPT/Codex for a response, sometimes the server
connection can get stuck before it even sends the first response
headers. Before this PR, Zed could wait indefinitely, which looks like
OpenCode/Zed “stalling.”

This PR makes Zed:

- Wait up to 10 seconds for the server to start responding.
- If nothing comes back in that window, treat it as a temporary
network/API failure.
- Let the existing retry logic try again instead of leaving the user
stuck.
- Send a stable session-id header so OpenAI’s Codex backend can
associate requests with the same Zed agent thread.
- Add tests to make sure:
  - stuck-before-response requests time out,
  - normal slow streaming responses are not cut off,
  - ChatGPT subscription requests send the right session header,
  - the agent retries this kind of failure.

intended user-facing result is: fewer “the assistant is just sitting
there forever” failures when using ChatGPT subscription models.

## Verification

- cargo test -p open_ai responses
- cargo test -p language_models openai_subscribed
- cargo test -p agent test_send_retry_on_http_send_error
- cargo check -p open_ai
- cargo check -p language_models
- cargo check -p agent

Release Notes:

- Fixed ChatGPT subscription requests stalling indefinitely before
response headers arrive.
2026-05-28 16:41:26 +00:00
Joseph T. Lyons a917868eab Merge community_champion_auto_labeler into pr_labeler (#57898)
Self-Review Checklist:

- [X] I've reviewed my own diff for quality, security, and reliability
- [n/a] Unsafe blocks (if any) have justifying comments
- [n/a] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [n/a] Tests cover the new/changed behavior
- [n/a] Performance impact has been considered and is acceptable

Release Notes:

- N/A
2026-05-28 15:56:02 +00:00
Bennet Bo Fennerandcameron 118f369b9e copilot_chat: Fix error when using GPT models (#57958)
We were including reasoning blocks twice. This matches what the Copilot
API does (that is only including the reasoning items in
`output_item.done`).

Before:

```
    {
      "type": "message",
      "role": "user",
      "content": [{ "type": "input_text", "text": "Run ls" }]
    },
    {
      "type": "reasoning",
      "id": "khgBW2vnLWOFgjxAybXdEtL47dY9XaqKW6yvy2JHSaWVeONUkhuQXcDTWwmnbpKKzlzYuaZsO2YUyvieidwC+RbAfD0e2ZjipDSLTdF7DZM6yLUpAwSgV+09d234G93pdg2VRW7dlgcllPCbVeor9V7bZQUOifDp/vU0VIrKVNFjDgigPYojwSZ476o/rTLvTBSlKt1IbkqyLLiix2gokE1lR+DpmG54UiynMFX2WtOVtZP+BriKGfbw3QQF+gz5HQDZuU/Pc7L2CzHTwQVsmTXljeJI9BTZjuiDBVaDZf4ILQiuQ33wVvh3jC5la47lC8jbqlYpmRirsxgBb/vcAFWnUKxcJh/Bgs3tnNk4TKXTeoYhZ+71YGSv2jFnK0JzJ9iZB8w4bkZvHE6136HnSg==",
      "summary": [],
      "encrypted_content": "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"
    },
    {
      "type": "reasoning",
      "id": "Vj0QJZMbDF6p5SHwQfzk3FCBzFmXvd6ERARDR68BTo93WJpORDWhnaR2CPiPRIMhbvt9fI5VjqR5O5mUXtciw+V74B9petxJMcM1OtsoQqeQr0Go2QjQAYquGV/Q+1n/+x1HjWXRGTzHkwplhZ1KYL9juwFF8PZke8wnl6wQRyUUTjLFxdxNMfl6kTBYAU4RBjnJiz16dSrvzaRLbHc0ZgezT7IqJOIA8paZvwncwY6ftXEcdYTKYUDGChK7aUcVt+RyCGtSl81ayzmoCdv0SGCJBsnX5BuG1GmINkDHEpwTNHteYXmSDxLKgzNIwIBJxR1Z5WMBEZDI4OQWNzLTuKppCOYv0E7UxCclSwkGKEof8yDBVvgdFfwfoFIvFJKJiy/niUDuzKbqW14CtodaLg==",
      "summary": [],
      "encrypted_content": "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"
    },
    {
      "type": "function_call",
      "call_id": "call_kYosdPp77arTCMT4vxKotORr",
      "name": "update_title",
      "arguments": "{\"title\":\"List project files\"}"
    },
    {
      "type": "function_call_output",
      "call_id": "call_kYosdPp77arTCMT4vxKotORr",
      "output": "Session title updated"
    }
```

After:

```
 {
      "type": "message",
      "role": "user",
      "content": [{ "type": "input_text", "text": "Run ls" }]
    },
    {
      "type": "function_call",
      "call_id": "call_JAUQ6fRiJGBC2WxHjMuG3opI",
      "name": "update_title",
      "arguments": "{\"title\":\"List project files\"}"
    },
    {
      "type": "function_call",
      "call_id": "call_lMZRlqGeJ8sSiITJ4xesgMwt",
      "name": "terminal",
      "arguments": "{\"command\":\"ls\",\"cd\":\"calculator\",\"timeout_ms\":5000,\"allow_network\":false,\"allow_fs_write\":false,\"unsandboxed\":false}"
    },
    {
      "type": "reasoning",
      "summary": [],
      "encrypted_content": "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"
    },
    {
      "type": "function_call_output",
      "call_id": "call_JAUQ6fRiJGBC2WxHjMuG3opI",
      "output": "Session title updated"
    },
    {
      "type": "function_call_output",
      "call_id": "call_lMZRlqGeJ8sSiITJ4xesgMwt",
      "output": "```\nCargo.lock\tCargo.toml\tCLAUDE.md\tsrc\t\ttarget\n```"
    }
```

Closes #57776

Release Notes:

- copilot: Fixed an issue where using GPT models would return an error
in `invalid_request_body`

Co-authored-by: cameron <cameron.studdstreet@gmail.com>
2026-05-28 15:28:26 +00:00
Xiaobo Liu 1ae9e78200 settings: Apply VS Code minimap default when importing settings (#56483)
When importing settings from VS Code, the minimap is now enabled by
default (matching VS Code's behavior) even if the user hasn't explicitly
set minimap-related options in their VS Code settings.json.

Previously, if `editor.minimap.enabled` and `editor.minimap.autohide`
were absent from the VS Code config, Zed would leave minimap at its own
default ("never"). Since VS Code defaults to minimap on, this caused a
mismatch for users expecting their VS Code experience to carry over.

Closes #56297

Release Notes:

- Fixed apply VS Code minimap default when importing settings

Signed-off-by: Xiaobo Liu <cppcoffee@gmail.com>
2026-05-28 15:25:54 +00:00
83a46af64f copilot: Fix auth db fallback (#57764)
This PR uses https://github.com/zed-industries/zed/pull/57758 as a base
and adds tests, cleans up the comments, and checks changes the database
query used in auth.db to include oauth key.

Self-Review Checklist:

- [x] I've reviewed my own diff for quality, security, and reliability
- [x] Unsafe blocks (if any) have justifying comments
- [x] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [x] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

Closes #ISSUE

Release Notes:

- Fixed GitHub Copilot Chat showing an empty model dropdown for users on
newer Copilot SDK builds

---------

Co-authored-by: Alexander Shlemov <eodus@users.noreply.github.com>
Co-authored-by: cameron <cameron.studdstreet@gmail.com>
2026-05-28 15:00:31 +00:00
Bennet Bo Fenner 313f39993c git_ui: Fix creating worktree not possible if default branch unavailable (#57918)
Follow up to #57704

This makes sure that we offer a worktree creation option in case
resolving the default branch fails

Release Notes:

- git: Fixed an issue where worktree creation would not be possible if
resolving default branch fails
2026-05-28 14:15:40 +00:00
Smit Barmase 44fd8c7924 markdown: Add frontmatter metadata block rendering (#57845)
Adds opt-in rendering for Markdown frontmatter metadata blocks in
Markdown Preview and agent markdown.

- Simple `key: value` metadata blocks now render as a two-column table,
while more complex metadata falls back to a code-style block.
- Metadata block content and key/value rows are parsed in the parser
step, and the request layout simply takes over rendering.

<img width="1288" height="436" alt="image"
src="https://github.com/user-attachments/assets/b35b949a-8bc4-47db-82ef-ed835e9ac06f"
/>

Release Notes:

- Added support for rendering Markdown frontmatter metadata blocks in
Markdown Preview and Agent Panel.
2026-05-28 13:47:58 +00:00
KyleBarton fb6b3ff533 Update dev-containers.md (#57901)
Self-Review Checklist:

- [x] I've reviewed my own diff for quality, security, and reliability
- [x] Unsafe blocks (if any) have justifying comments
- [x] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [x] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

Closes N/A

Release Notes:

- Improved docs for dev containers
2026-05-28 13:36:39 +00:00
Cameron Mcloughlin 6be766ddf5 gpui: Application::inaccessible() (#57954)
Provide a way to prevent GPUI from creating AccessKit adapters, and
enable this in Zed.

This will allow us to test AccessKit support in Zed without rolling it
out more broadly, while we gain confidence in the implementation in
GPUI.

I've also added a log statement

## Motivation (i.e. a mini post-mortem about the #56065 panics)

Merging #56065 caused some nasty panics in nightly. This was caused by a
bug in the logic for selecting a focus node for a `TreeUpdate`.
AccessKit panics when an invalid `TreeUpdate` is provided.

My assumption was that, since Zed uses no a11y APIs, and also that
essentially 0 zed users would have AT apps running, that merging this PR
would have no effect on the behaviour of Zed itself. However, two issues
combined to cause the panics:
- It seems like many people (everyone?) on mac gets the activation
callback called by accesskit_macos. A quick search suggests this might
be due to password managers searching for password fields, but not sure
how true that is.
- The bug in question related to *forgetting to check* whether a node
used a11y APIs, so we *were* pushing non-empty `TreeUpdate`s

As a (probably temporary) defensive measure, I added a function to try
to detect the bad cases and fix them. But it would be lovely if this
could live in AccessKit itself, since it would mean we wouldn't have to
do the check twice (once in GPUI, once in AccessKit). This would also
help prevent drift when updating accesskit versions if new invariants
are added.

We also cannot protect against this with `catch_unwind`, since we use
`panic=abort`. So our only option unfortunately is to temporarily
disable AccessKit until we know our implementation is stable.

Release Notes:

- N/A or Added/Fixed/Improved ...
2026-05-28 13:36:24 +00:00
Ben Kunkleandzed-zippy[bot] bf9255e53a ep: Fix agent edits triggering edit predictions due to diagnostic refresh (#57832)
Self-Review Checklist:

- [x] I've reviewed my own diff for quality, security, and reliability
- [x] Unsafe blocks (if any) have justifying comments
- [x] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [x] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

Closes #ISSUE

Release Notes:

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

---------

Co-authored-by: zed-zippy[bot] <234243425+zed-zippy[bot]@users.noreply.github.com>
2026-05-28 13:27:55 +00:00
Ben Kunkle a71b94002e ep: Collect data for staff in Zed Industries repos (#57733)
Self-Review Checklist:

- [x] I've reviewed my own diff for quality, security, and reliability
- [x] Unsafe blocks (if any) have justifying comments
- [x] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [x] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

Closes #ISSUE

Release Notes:

- N/A or Added/Fixed/Improved ...
2026-05-28 12:59:56 +00:00
KyleBarton 4a8d10acc1 Respect override command in devcontainer (#57204)
Self-Review Checklist:

- [x] I've reviewed my own diff for quality, security, and reliability
- [x] Unsafe blocks (if any) have justifying comments
- [x] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [x] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

Closes #56357

Release Notes:

- Fixed bug where devcontainers were not respecting override_command
2026-05-28 11:22:41 +00:00
Daniel Martín e43bdbcae0 Auto-scroll hover popup while selecting text (#57518)
Selecting text inside the hover documentation or git popups did not
scroll the popup when the drag passed the visible area, so any text
below the area could not be selected with the mouse.

The popup's container already had a `ScrollHandle` wired to its
scrollbar and wheel scrolling, but the inner `MarkdownElement` was
constructed without one. That left it in the default
`AutoscrollBehavior::Propagate` mode, which routes drag-autoscroll
requests to the editor-wide autoscroll listener, which is a listener
that does not exist inside a floating popover, so the requests were
silently dropped.

Passing the popup's existing `ScrollHandle` into the `MarkdownElement`
switches it to `AutoscrollBehavior::Controlled`, which scrolls the
popup's own container directly during a drag. The markdown preview view
already uses this same pattern.

Release Notes:

- Fixed hover documentation and git popups not scrolling while selecting
text with the mouse

Self-Review Checklist:

- [x] I've reviewed my own diff for quality, security, and reliability
- [x] Unsafe blocks (if any) have justifying comments
- [x] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [x] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable
2026-05-28 09:55:14 +00:00
Smit BarmaseandJohn Tur 8a6bf0cc3c terminal: Forward Shift navigation keys to alternate-screen programs (#57479)
I ran into this while using lazygit: the Shift navigation keys were
being captured by Zed to scroll the terminal buffer instead of being
passed through to the program.

Capturing them makes sense in the normal terminal case, where the user
wants to scroll and Shift has no other meaning. But in alternate-screen
TUIs like lazygit, less, or neovim, terminal scrollback isn't relevant,
so we can forward these keys to the program while it's open.

Release Notes:
- Fixed Shift+Up, Shift+Down, Shift+Home, and Shift+End in terminal TUIs
like lazygit, less, and neovim.

---------

Co-authored-by: John Tur <john-tur@outlook.com>
2026-05-28 09:34:57 +00:00
Ben Brandt c407b4bdd3 agent_ui: Clarify multi-root agent warning text (#57874)
Self-Review Checklist:

- [x] I've reviewed my own diff for quality, security, and reliability
- [x] Unsafe blocks (if any) have justifying comments
- [x] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [x] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

Release Notes:

- N/A
2026-05-28 08:19:11 +00:00
Ben Brandtandmorgankrey f1089d2e66 agent_ui: Basic terminal agent telemetry (#57259)
Some best-effort tracking of an allowed-list of agents (to avoid
grabbing sensitive data) just to get basic data on general usage
patterns.

Self-Review Checklist:

- [x] I've reviewed my own diff for quality, security, and reliability
- [x] Unsafe blocks (if any) have justifying comments
- [x] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [x] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

Release Notes:

- N/A

---------

Co-authored-by: morgankrey <morgan@zed.dev>
2026-05-28 04:49:12 +00:00
Pulkit SarafandSmit Barmase 808eceb5a8 helix: Fix a cursor position in helix_select mode` (#57610)
Closes #56493

In Helix select mode, pressing `a` after a selection (e.g. `v a`) placed
the cursor one column too far to the right.

Bound `a` to `vim::HelixAppend` in the `helix_select` keymap so it
matches the behavior in `helix_normal`, and added a regression test for
the `v a` case.

Release Notes:

- Fixed cursor placement after pressing `a` in Helix select mode.

---------

Co-authored-by: Smit Barmase <heysmitbarmase@gmail.com>
2026-05-28 02:36:38 +00:00
5226db6eae Persist terminal tempdirs by thread (#57878)
Summary:
- Store a lazily-created sandboxed terminal temp directory on each agent
thread.
- Persist the tempdir path and remove it when deleting archived threads.
- Update sandbox prompt wording to describe per-thread tempdir reuse.

Tests:
- cargo fmt --package agent --package agent_ui --package zed
- cargo test -p agent db::tests::test_sandboxed_terminal_temp_dir --
--nocapture
- cargo test -p agent
db::tests::test_delete_thread_removes_sandboxed_terminal_temp_dir --
--nocapture
- cargo check -p agent_ui -p zed

Release Notes:

- Improved agent terminal sandboxing to preserve temporary files across
commands in the same thread

---------

Co-authored-by: MartinYe1234 <52641447+MartinYe1234@users.noreply.github.com>
Co-authored-by: Martin Ye <martin@zed.dev>
2026-05-28 00:58:56 +00:00
Cameron Mcloughlin 10cc0febe3 gpui: Fix panic with invalid focus IDs (#57885)
We were missing a check when setting the focused node ID, causing a
panic in accesskit's internal validation logic. Fixes the bug, and adds
some defensive logic to help mitigate potential future issues.

You can reproduce the panic by:
- turning on a screenreader
- launching zed
- opening a menu and pressing tab

This change fixes it.

Release Notes:

- N/A or Added/Fixed/Improved ...
2026-05-28 00:02:37 +00:00
Richard FeldmanandMartinYe1234 356c8cae07 Wrap agent terminal commands in macOS Seatbelt sandbox (#57431)
Stacked on top of #57430.

When the `sandboxing` feature flag is on (macOS only), agent-run
terminal commands are launched under `/usr/bin/sandbox-exec` with a
per-command Seatbelt policy:

- **Reads:** any path on the filesystem.
- **Writes:** each project worktree plus a per-command `$TMPDIR`.
- **Network:** blocked.

The model can request relaxations on individual calls via three new
input flags on the `terminal` tool:

- `allow_network: true`
- `allow_fs_write: true`
- `unsandboxed: true`

Each one triggers a separate always-prompt user approval (bypassing any
`always_allow` rules, since escalation is a stronger trust boundary than
the baseline command approval). The flags are silently ignored when
sandboxing is off, so the model can't surreptitiously change runtime
behavior by setting them in the no-op case.

The per-command tempdir is provisioned regardless of sandbox state so
the model can't infer whether the sandbox is in effect by looking at
`$TMPDIR`.

The Seatbelt config file's lifetime is tied to the `Terminal` entity via
an opaque RAII handle (`SandboxConfigHandle = Box<dyn Any + Send>`), so
cancellation paths drop it automatically.

### Notes for review

- The writable scope passed to the sandbox is the project's worktree
paths plus the per-command tempdir, **not** the resolved `cd` working
directory — `cd` is model-controlled, and using it as the writable scope
would let the model widen its own write permissions outside the project.
- The new tool flags are always present in the JSON schema (with
`#[serde(default)]`), even when the sandbox prompt section isn't
rendered. The system prompt only documents them when the section is
present, so the model shouldn't try to use them when it's not — but the
schema doesn't actively reject them, just ignores them.
- I opted not to add an end-to-end test for the escalation prompt path:
the existing `FakeThreadEnvironment` ignores the new params and toggling
the feature flag in tests is more wiring than felt worth it for a first
cut. The pure-function pieces (`sandbox_approval_title`, schema,
deserialization) are covered, and the sandbox crate itself has
end-to-end tests that actually invoke `sandbox-exec`.

Release Notes:

- N/A

---------

Co-authored-by: MartinYe1234 <52641447+MartinYe1234@users.noreply.github.com>
2026-05-27 21:38:17 +00:00
18c70a73a6 Render terminal sandbox section in system prompt behind feature flag (#57430)
Stacked on top of #57429.

Adds a new `sandboxing` feature flag (off for staff by default) and a
single source-of-truth helper `sandboxing_enabled(cx) = cfg!(target_os =
"macos") && cx.has_flag::<SandboxingFeatureFlag>()`. When the helper
returns true, the agent's system prompt gains a new `## Terminal
sandbox` section that:

- Lists each worktree's absolute path as a writable directory.
- Describes the per-command `$TMPDIR` scratch directory.
- States that outbound network access is blocked.
- Documents the three per-command flags (`allow_network`,
`allow_fs_write`, `unsandboxed`) the model can request to relax the
sandbox.
- Tells the model the section is stable for the duration of the
conversation.

When the flag is off, the section is omitted entirely — no mention of
sandboxing at all.

No behavior change to terminal execution yet; that's the next PR in the
stack.

Three new tests cover: section omitted when `sandboxing: false`, section
rendered with all worktrees + flag docs when `sandboxing: true`, and the
zero-worktrees case.

Release Notes:

- N/A

---------

Co-authored-by: MartinYe1234 <52641447+MartinYe1234@users.noreply.github.com>
Co-authored-by: Martin Ye <martin@zed.dev>
2026-05-27 21:11:27 +00:00
Albert Bogusz 9c70888039 Update git2 to 0.21.0 and add support for SHA-256 object formatted repos (#57587)
Self-Review Checklist:

- [x] I've reviewed my own diff for quality, security, and reliability
- [ ] ~Unsafe blocks (if any) have justifying comments~ (N/A)
- [x] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [ ] Tests cover the new/changed behavior (didn't add new test for
parsing SHA-256 - not sure if would be desired)
- [x] Performance impact has been considered and is acceptable

Closes #24070

Upgrades git2 from 0.20.1 to 0.21.0 with the `unstable-sha256` feature -
adds ability to open and work with git repositories using the SHA-256
object format. `Oid::from_str` now detects 64-char hex strings to parse
SHA-256 OIDs correctly.

Also adapts to breaking API changes in 0.21.0:
`Remote::url()` and `Commit::message()` both now return `Result`.

Release Notes:
- Added support for opening SHA-256 object format git repositories
2026-05-27 20:59:01 +00:00
Richard Feldman 542b7a4a70 Add sandbox crate with macOS Seatbelt integration (#57429)
Adds a new `sandbox` crate that wraps shell invocations under macOS's
`sandbox-exec(1)` with a Seatbelt policy built from per-command
permissions:

- Reads are unrestricted.
- Writes are restricted to a caller-provided list of directories (plus
the standard `/dev/*` write targets).
- Network access and unrestricted filesystem writes must be opted into
per command.

`wrap_invocation(program, args, writable_dirs, permissions)` returns the
new program/args plus a `SeatbeltConfigFile` RAII handle that deletes
the on-disk policy file when dropped — callers hold it for the lifetime
of the spawned command.

No callers yet — this is the first of three stacked PRs. The second
wires the sandbox state into the agent's system prompt behind a feature
flag; the third wires the actual wrapping into the agent terminal tool.

The macOS-only dependencies (`tempfile`, `anyhow`) are gated by
`target.'cfg(target_os = "macos")'` so the crate is empty on other
platforms.

Includes 14 tests covering both the generated Seatbelt policy text and
end-to-end behavior (actually invoking `sandbox-exec` and asserting
reads/writes succeed or fail per policy).

Release Notes:

- N/A
2026-05-27 20:35:32 +00:00
Martín Gaitán 2304b3754e Fix typo in command palette reference (#57869)
Self-Review Checklist:

- [x] I've reviewed my own diff for quality, security, and reliability
- [x] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [x] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable
2026-05-27 20:03:27 +00:00
Agus Zubiaga 628c83919f Remove leftover test a11y label (#57868)
Removes a leftover test label added by #56065 

Self-Review Checklist:

- [x] I've reviewed my own diff for quality, security, and reliability
- [x] Unsafe blocks (if any) have justifying comments
- [x] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [ ] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

Release Notes:

- N/A
2026-05-27 20:02:48 +00:00
morgankrey 9ab81a6b3a Document Gemini caching behavior (#57864)
## Summary

- Document that Zed-hosted Gemini models do not use Google context
caching
- Clarify that Gemini usage is billed only as input and output tokens,
with no cached-input price
- Link to Google's Vertex AI context caching and zero-data-retention
documentation for background

## Validation

- `script/generate-action-metadata`
- `mdbook build docs`

Release Notes:

- N/A
2026-05-27 20:01:57 +00:00
61d067d5d2 Add zed-cherry-pick agent skill (#57833)
Adds a project-scoped agent skill at
`.agents/skills/zed-cherry-pick/SKILL.md` that walks an agent through
cherry-picking a merged PR into Zed's `preview` or `stable` release
branch — including the case where the automated `cherry_pick` GitHub
Actions workflow failed due to a merge conflict.

Captures the conventions enforced by `script/cherry-pick` (branch
naming, PR title/body format) and the gotchas around discovering the
current channel→branch mapping, non-interactive git in agent
environments, and worktree index locks.

Release Notes:

- N/A

---------

Co-authored-by: Martin Ye <martin@zed.dev>
Co-authored-by: Ben Kunkle <ben.kunkle@gmail.com>
2026-05-27 19:46:15 +00:00
Anthony Eid 35fd2dd9fc Speed up StreamingDiff::push_new part two (#57849)
Follow-up to #57772.

While comparing the `edit_file_tool_streaming/medium_insertions`
benchmark in Criterion and xctrace, I noticed the DP scoring loop was
spending most of its time on inlined `Matrix::get`/`Matrix::set` access
in `StreamingDiff::push_new`.

This changes the loop to split the previous and current score columns
once per DP column and then index those column slices directly. This
keeps the scoring algorithm the same, but hoists the column offset
calculation out of the inner loop and gives the compiler clearer
aliasing information between the immutable previous column and mutable
current column.

In xctrace, the hottest DP scoring line dropped from 10,407 samples
before to 9,409 samples after on
`edit_file_tool_streaming/medium_insertions`, and total
`StreamingDiff::push_new` leaf samples dropped from 10,800 to 9,822.

This is consistently faster in the end-to-end `edit_file_tool`
benchmark, and gives a small speed-up for the targeted workload without
changing the scoring algorithm.

### Results

Benchmarked with `release-fast` against a clean baseline using
Criterion’s `before_slice` baseline.

#### `streaming_diff_push_new`

| Fixture | Before median | After median | Change |
| --- | ---: | ---: | ---: |
| `tiny_function_rewrite` | `7.6317 ms` | `6.4951 ms` | 10.8% faster |
| `small_function_rewrite` | `45.961 ms` | `44.839 ms` | No significant
change |
| `medium_many_small_changes` | `99.694 ms` | `104.83 ms` | 5.2% slower
|
| `medium_insertions` | `95.909 ms` | `83.093 ms` | 13.5% faster |

#### `edit_file_tool_streaming`

| Fixture | Before median | After median | Change |
| --- | ---: | ---: | ---: |
| `tiny_function_rewrite` | `1.1110 ms` | `1.0617 ms` | 7.1% faster |
| `small_function_rewrite` | `2.4554 ms` | `2.2751 ms` | 7.1% faster |
| `medium_many_small_changes` | `87.272 ms` | `77.065 ms` | 11.5% faster
|
| `medium_insertions` | `92.469 ms` | `87.478 ms` | 5.9% faster |

The lower-level `streaming_diff_push_new` benchmark is mixed, but the
end-to-end `edit_file_tool_streaming` workload improves across all
fixtures.

Self-Review Checklist:

- [x] I've reviewed my own diff for quality, security, and reliability
- [x] Unsafe blocks (if any) have justifying comments
- [x] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [x] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

Release Notes:

- N/A or Added/Fixed/Improved ...
2026-05-27 19:33:04 +00:00
Vlad Ionescu cddc2cf27c opencode: Model updates (#57792)
Two model updates:
- **Free**: Big Pickle now has a max output tokens of 32k as per
https://github.com/anomalyco/models.dev/commit/49991c8f8f98eacb0ad66c7fad0e3b12a7465246
- **Go**: added Qwen3.7 Max as per
https://github.com/anomalyco/models.dev/commit/4f1d5c511ae983024385e03f089b8e21e1eb4548
and
https://github.com/anomalyco/opencode/commit/1554a5a82e32c30d2665ed6b59ebd33f79f9b9e3#diff-a7ee7cf35b40335095a44cfaac16041313c36322cd14544ddad0289ce69131ab.
Tested this successfully by running a simple "_rename this variable for
me. add a function. delete the function_" test

Self-Review Checklist:

- [x] I've reviewed my own diff for quality, security, and reliability
- [x] Unsafe blocks (if any) have justifying comments
- [x] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [ ] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

Release Notes:

- OpenCode: updated models (added Qwen3.7 Max, updated Big Pickle token
counts)
2026-05-27 18:55:23 +00:00
761fda75cd gpui: Accesskit support (#56065)
GPUI AccessKit integration

This PR is replacing #51097 , and is much more limited in scope. This PR
*ONLY* adds AccessKit support to GPUI, and doesn't touch Zed. Once this
lands, we can start adding aria attributes to Zed's components.

This PR is the first step to addressing #41138 .

Release Notes:

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

---------

Co-authored-by: John Tur <john-tur@outlook.com>
Co-authored-by: Zed Zippy <234243425+zed-zippy[bot]@users.noreply.github.com>
Co-authored-by: Bennet Bo Fenner <bennetbo@gmx.de>
Co-authored-by: Agus Zubiaga <agus@zed.dev>
2026-05-27 18:17:59 +00:00
Marshall Bowers e7c753affd feature_flags: Only respect feature flag overrides for Zed staff (#57860)
This PR is a follow-up to #54206 to make it so we only respect the
feature flag overrides for Zed staff (or when running a development
build).

Previously just the UI portion of the feature flags was disabled for
non-staff, but manipulating the settings file by hand would still allow
setting overrides that would be respected.

The only other setting on the "Developer" page of the settings UI was
the performance profiler. This was previously only available for staff,
as the entire "Developer" page was limited to staff, but it seems
reasonable to allow non-staff to see this.

Release Notes:

- N/A
2026-05-27 18:16:04 +00:00
Danilo LealandMartin Ye 646198a50d skill_creator: Use the status toast for confirming creation (#57855)
This PR uses the status toast for the Skill Creator confirming action as
opposed the regular message notification. Aside from it looking a bit
better, it's also auto-dismissed, which is preferred in this case.

Release Notes:

- Improved skill creation toast confirmation by making it
auto-dismissed.

---------

Co-authored-by: Martin Ye <martin@zed.dev>
2026-05-27 18:09:52 +00:00
Oleksiy Syvokon 56a932dc78 Fix multibuffer chunk splitting at UTF-8 boundaries (#57641)
Don't panic when a diff transform boundary falls inside a multi-byte
UTF-8 character. Round split points up to the next char boundary and
advance past any transform boundaries skipped by that adjustment.

Closes FR-16

Release Notes:

- Fixed a crash when deleting words near inline diff boundaries
containing multi-byte characters
2026-05-27 17:57:15 +00:00
zed-zippy[bot] 57ae4da7d4 Bump Zed to v1.6.0 (#57858)
Release Notes:

- N/A

Co-authored-by: zed-zippy[bot] <234243425+zed-zippy[bot]@users.noreply.github.com>
2026-05-27 17:43:55 +00:00
Anthony Eid f3a56d1953 Speed up StreamingDiff::push_new by 30-36% (#57772)
## Motivation

Miniprofs of Zed dropping frames showed foreground thread stalls of
711.56 ms, 641.01 ms, and 221.99 ms from the `edit_file_tool`. The new
benchmark isolated `StreamingDiff::push_new` as one of the expensive
phases so this PR aims to speed it up so we can avoid dropping more
frames in the future.

## Benchmark methodology

I had an agent create a Criterion suite with four deterministic Rust
edit fixtures: tiny localized rewrite, small localized rewrite, many
small changes, and helper block insertions.

Benchmarked with:

```sh
cargo bench -p streaming_diff --bench streaming_diff --profile release-fast -- --warm-up-time 1 --measurement-time 2
```

The benchmark binary was also recorded under `xctrace` CPU Counters to
inspect CPU samples before and after the change.

## Results

`StreamingDiff::push_new` improved across all fixtures:

| Benchmark | Before | After | Improvement |
|---|---:|---:|---:|
| `tiny_function_rewrite` | ~10.81 ms | ~6.91 ms | ~36% faster |
| `small_function_rewrite` | ~51.02 ms | ~35.39 ms | ~31% faster |
| `medium_many_small_changes` | ~130.71 ms | ~83.83 ms | ~36% faster |
| `medium_insertions` | ~120.52 ms | ~79.90 ms | ~34% faster |

The `xctrace` baseline showed samples in `Hash::hash`,
`RandomState::hash_one`, `HashMap::insert`, and
`RawTable::reserve_rehash`. After replacing the map with two `Vec<u32>`
row buffers, the hash table frames disappeared from the top samples.

The speedup comes from removing hash work from the DP inner loop and
replacing scattered hash table probes with contiguous row buffer access
(better cache hits 🏎️). The trace did not include direct cache miss
counts, but this layout is likely more cache friendly because it
replaces hash table access with a continuous line of memory (the
`Vec`s).

Release Notes:

- N/A
2026-05-27 17:41:11 +00:00
Lukas Wirth 1731f47515 Introduce a skill for #[gpui::test] (#57806)
Release Notes:

- N/A or Added/Fixed/Improved ...
2026-05-27 17:06:30 +00:00
Thomas Boom 005bec5068 docs: Update tracking issue link to discussion in README (#57793)
Self-Review Checklist:

- [x] I've reviewed my own diff for quality, security, and reliability
- [x] Unsafe blocks (if any) have justifying comments
- [x] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [x] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

Release Notes:

- N/A
2026-05-27 16:56:21 +00:00