mirror of
https://github.com/zed-industries/zed.git
synced 2026-08-14 11:34:31 +00:00
39500 commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
b41505358f
|
Make terminal hyperlinks display correctly with changing content (#54884)
- Closes #31866 Currently, `Terminal::alacritty::make_content()` always carries over any existing hovered word. With this PR we now: - *Are more selective*: Only carry forward the hovered word if the terminal grid shape and visible lines have not changed - *Correctly handle a shifting viewport*: If the grid shape and visible lines have not changed, but new lines were added to the terminal we carry the hovered word forward, and adjust the lines of the `word_match` so that the original text remains hyperlinked. Also, this PR relaxes the test for displaying a hyperlink in `TerminalElement::prepaint`. We now display hyperlinks as long as the `hovered_word.id`s from terminal and terminal_view match. Previously we required all fields to be equal, which resulted in the hyperlink flickering when scrolled back with new lines being added. Release Notes: - Terminal: Made hyperlinks display correctly with changing content --------- Co-authored-by: Smit Barmase <heysmitbarmase@gmail.com> |
||
|
|
dd04a229dd
|
gpui: Allow setting max FPS for Animation (#62579)
title --- Release Notes: - N/A or Added/Fixed/Improved ... |
||
|
|
03e5ad8a63
|
helix: Add vim::HelixGotoLine action and bind it to G (#61581)
# Objective Make `G` keybinding in Helix mode work like in Helix and not like in Vim. Fixes https://github.com/zed-industries/zed/issues/61580 ## Solution Helix has two ways to jump to a line by line number. One is the `goto_file_start` command (bound to `gg`) that optionally takes a count to go to that line instead of the start of the file. Zed already supports it as `vim::StartOfDocument`. The other is the dedicated `goto_line` command (bound to `G`) that only does that and nothing else. Zed did not have it. What's worse, the default `"shift-g": "vim::EndOfDocument"` binding leaked from Vim keymap into Helix keymap, which previously made `<count>G` accidentally work in Helix mode for the wrong reason, until https://github.com/zed-industries/zed/pull/59449 fixed the behavior of `vim::StartOfDocument` and `vim::EndOfDocument` actions to match Helix exactly. This broke `<count>G` and exposed that `G` was bound to the wrong action in Helix mode, and the correct one didn't exist. This PR fixes that in the following way: - adds new`vim::HelixGotoLine` action - binds it to `shift-g` in `helix_normal` and `helix_select` modes in the default Vim keymap ## Testing - Unit tests - Manual testing ## 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 adheres to Zed's UI standards ([UX/UI](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) and [icon](https://github.com/zed-industries/zed/blob/main/crates/icons/README.md) guidelines) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable --- Release Notes: - Fixed the behavior of `G` binding in Helix mode and added new `vim::HelixGotoLine` action Signed-off-by: Oleksii Orlenko <alex@aqrln.net> |
||
|
|
7733b99226
|
Adjust language docs (#62551)
Some checks are pending
run_tests / run_tests_windows (push) Blocked by required conditions
run_tests / check_style (push) Waiting to run
run_tests / clippy_windows (push) Blocked by required conditions
run_tests / clippy_linux (push) Blocked by required conditions
run_tests / clippy_mac (push) Blocked by required conditions
run_tests / clippy_mac_x86_64 (push) Blocked by required conditions
run_tests / run_tests_linux (push) Blocked by required conditions
run_tests / run_tests_mac (push) Blocked by required conditions
run_tests / miri_scheduler (push) Blocked by required conditions
run_tests / doctests (push) Blocked by required conditions
run_tests / check_workspace_binaries (push) Blocked by required conditions
run_tests / build_visual_tests_binary (push) Blocked by required conditions
run_tests / check_wasm (push) Blocked by required conditions
run_tests / check_dependencies (push) Blocked by required conditions
run_tests / check_docs (push) Blocked by required conditions
run_tests / check_licenses (push) Blocked by required conditions
run_tests / check_scripts (push) Blocked by required conditions
Congratsbot / congrats (push) Blocked by required conditions
Congratsbot / check-author (push) Waiting to run
deploy_nightly_docs / deploy_docs (push) Waiting to run
run_tests / orchestrate (push) Waiting to run
run_tests / check_postgres_and_protobuf_migrations (push) Blocked by required conditions
run_tests / extension_tests (push) Blocked by required conditions
run_tests / tests_pass (push) Blocked by required conditions
Closes https://github.com/zed-industries/zed/issues/62548 Puts https://github.com/zed-industries/zed/issues/61908#issuecomment-5142104901 into docs. Release Notes: - N/A |
||
|
|
a8fafdd7ee
|
Pass routing headers to ChatGPT subscription API (#62556)
Some checks are pending
Congratsbot / check-author (push) Waiting to run
Congratsbot / congrats (push) Blocked by required conditions
deploy_nightly_docs / deploy_docs (push) Waiting to run
run_tests / orchestrate (push) Waiting to run
run_tests / check_style (push) Waiting to run
run_tests / clippy_windows (push) Blocked by required conditions
run_tests / clippy_linux (push) Blocked by required conditions
run_tests / clippy_mac (push) Blocked by required conditions
run_tests / clippy_mac_x86_64 (push) Blocked by required conditions
run_tests / run_tests_windows (push) Blocked by required conditions
run_tests / run_tests_linux (push) Blocked by required conditions
run_tests / run_tests_mac (push) Blocked by required conditions
run_tests / miri_scheduler (push) Blocked by required conditions
run_tests / doctests (push) Blocked by required conditions
run_tests / check_workspace_binaries (push) Blocked by required conditions
run_tests / build_visual_tests_binary (push) Blocked by required conditions
run_tests / check_wasm (push) Blocked by required conditions
run_tests / check_dependencies (push) Blocked by required conditions
run_tests / check_docs (push) Blocked by required conditions
run_tests / check_licenses (push) Blocked by required conditions
run_tests / check_scripts (push) Blocked by required conditions
run_tests / check_postgres_and_protobuf_migrations (push) Blocked by required conditions
run_tests / extension_tests (push) Blocked by required conditions
run_tests / tests_pass (push) Blocked by required conditions
## Objective Improve cache hit rate of LLM requests sent to ChatGPT subscription API. ## Solution Set headers that help route request to the correct servers. This is ChatGPT specific; plain OpenAI API doesn't require it. ## Testing I run a benchmark which imitates a thread that makes 20 sequential tool calls. I tried different cache route strategies. Results are below: | Configuration | Hit rate | |-------------------------------------------------|---------:| | No identity headers, no cache key | 22.2% | | `thread-id` only, no cache key | 44.4% | | `thread-id` + matching cache key | 42.1% | | Cache key only | 53.6% | | Turn state + cache key | 47.4% | | `session-id` + matching cache key | 100.0% | | `session-id` + `thread-id` + matching cache key | 97.4% | --- Release Notes: - Improved ChatGPT subscription caching |
||
|
|
c05e34637b
|
Fix ChatGPT subscription compaction (#62547)
ChatGPT Subscription compaction currently uses the legacy `POST /responses/compact` endpoint. The Codex backend now returns `404 Not Found` from that route, which causes manual and threshold-triggered compaction to fail even though ordinary model requests continue to work. Use the current Codex compaction contracts over the normal streamed `POST /responses` endpoint instead. Automatic compaction now advertises server-side support and sends `context_management`, while manual compaction appends the transient `compaction_trigger` input item used by Codex's remote compaction v2 flow. Both paths consume the standard encrypted `compaction` output item, preserving backend-owned state for subsequent requests. The manual action remains available through `supports_explicit_compaction`; only its transport changes. The shared Responses input type gains the `compaction_trigger` wire item and an append operation for provider-specific request construction. Testing performed: - `cargo nextest run -p open_ai -p openai_subscribed --lib` - `./script/clippy -p open_ai -p openai_subscribed` - `cargo fmt -p open_ai -p openai_subscribed -- --check` - Verified with ChatGPT OAuth against `gpt-5.6-sol`, `gpt-5.6-terra`, `gpt-5.6-luna`, `gpt-5.5`, `gpt-5.4`, and `gpt-5.4-mini`: `compaction_trigger` returned HTTP 200 with a streamed `compaction` item for every model; forced `context_management` compaction also returned HTTP 200 for every model. The legacy `/responses/compact` route returned HTTP 404 for every model. Release Notes: - Fixed ChatGPT Subscription context compaction failing with an API endpoint error. |
||
|
|
ba0e2a9429
|
openai_subscribed: Log compaction response errors (#62540)
ChatGPT subscription compaction failures currently flow through the generic HTTP status conversion before callers can inspect the provider response. A 404 therefore becomes `ApiEndpointNotFound`, which drops the response body and leaves logs with only the inferred endpoint-not-found message. Log the original `RequestError` at the subscription compaction call site before returning it unchanged. The log identifies the compact endpoint and preserves the HTTP status and response body for diagnosis, without logging credentials, request contents, or response headers. Error classification, retry behavior, and user-facing presentation remain unchanged. Testing: - `cargo fmt --all --check` - `cargo nextest run -p openai_subscribed --lib` Release Notes: - N/A --------- Co-authored-by: zed-zippy[bot] <234243425+zed-zippy[bot]@users.noreply.github.com> |
||
|
|
ff9f114cd3
|
gpui: Add binary data support to Svg element (#52319)
## Context Add support for binary SVG data in the `Svg` component in the `gpui` crate. The component now accepts raw SVG bytes via a new `.data()` method, in addition to the existing `.path()` and `.external_path()` methods. **Example usage:** ```rust svg().data(svg_bytes).color(colors::WHITE) ``` This solves the problem of unnecessary asset bundling and enables Rust's dead code elimination to optimize binary size. **Related issue:** Closes #52315 ## How to Review - Review `crates/gpui/src/elements/svg.rs` - the changes are localized to this file - Focus on: API design, caching strategy (hash-based virtual path), priority ordering in paint() - Verify the implementation properly integrates with existing `SvgRenderer` and `Window::paint_svg` ## Self-Review Checklist - [x] I've reviewed my own diff for quality, security, and reliability - [x] Unsafe blocks (none in this change) - [x] The content is consistent with the UI/UX checklist (trivial UI change) - [x] Tests cover the new/changed behavior (manual testing may be needed for SVG rendering) - [x] Performance impact has been considered (hash calculation is minimal; caching prevents redundant work) ## Technical Details The implementation: - Adds `data: Option<Arc<[u8]>>` and `data_path: Option<SharedString>` fields to `Svg` - Adds `pub fn data(mut self, data: &[u8]>) -> Self` builder method - Generates deterministic virtual path from SHA256-like hash: `__binary_svg__{hash}` - `paint()` checks sources in priority order: binary data > external_path > path - Uses existing `Window::paint_svg(..., data: Some(&bytes))` path This is a minimal, non-breaking change that leverages existing infrastructure. Release Notes: - Added `.data()` method to `Svg` element to accept raw SVG bytes Co-authored-by: Lukas Wirth <lukas@zed.dev> Co-authored-by: Kirill Bulatov <kirill@zed.dev> |
||
|
|
fc952d52da
|
gpui: Add track_caller to gpui_util::log_err (#62538)
# Objective Tiny annoyance, the standalone `gpui_util::log_err` was never annotated with `#[track_caller]` so whenever it was called, the source location would be `gpui_util::lib` instead of the appropriate location. I checked and this is actually used in Zed in exactly one place: `crates/extension_host/src/extension_host.rs:1095`. So *technically* this can be considered a bug. I use it quite frequently in my code, so this is more of a self-serving pr. ## Solution I added `#[track_caller]` to `gpui_util::log_err`. ## Testing I ran the tests just in case and they all passed. ## 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 adheres to Zed's UI standards ([UX/UI](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) and [icon](https://github.com/zed-industries/zed/blob/main/crates/icons/README.md) guidelines) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable Release Notes: - Added track_caller to gpui_util::log_err |
||
|
|
93f6b2e597
|
languages: Avoid probing unresolved macOS Python shim (#62534)
Some checks are pending
Congratsbot / check-author (push) Waiting to run
Congratsbot / congrats (push) Blocked by required conditions
deploy_nightly_docs / deploy_docs (push) Waiting to run
run_tests / orchestrate (push) Waiting to run
run_tests / check_style (push) Waiting to run
run_tests / clippy_windows (push) Blocked by required conditions
run_tests / clippy_linux (push) Blocked by required conditions
run_tests / clippy_mac (push) Blocked by required conditions
run_tests / clippy_mac_x86_64 (push) Blocked by required conditions
run_tests / run_tests_windows (push) Blocked by required conditions
run_tests / run_tests_linux (push) Blocked by required conditions
run_tests / run_tests_mac (push) Blocked by required conditions
run_tests / miri_scheduler (push) Blocked by required conditions
run_tests / doctests (push) Blocked by required conditions
run_tests / check_workspace_binaries (push) Blocked by required conditions
run_tests / build_visual_tests_binary (push) Blocked by required conditions
run_tests / check_wasm (push) Blocked by required conditions
run_tests / check_dependencies (push) Blocked by required conditions
run_tests / check_docs (push) Blocked by required conditions
run_tests / check_licenses (push) Blocked by required conditions
run_tests / check_scripts (push) Blocked by required conditions
run_tests / check_postgres_and_protobuf_migrations (push) Blocked by required conditions
run_tests / extension_tests (push) Blocked by required conditions
run_tests / tests_pass (push) Blocked by required conditions
# Objective Fixes #62529. Prevent Python toolchain discovery from executing Apple's `/usr/bin/python3` Command Line Tools shim when no active developer Python exists. Executing that unresolved shim causes macOS to repeatedly prompt users to install the Command Line Tools, even when Python is managed through Nix, uv, or pyenv. ## Solution Update Python Environment Tools (PET) to `bb8e046`, which includes microsoft/python-environment-tools#506. That upstream change resolves active Xcode and Command Line Tools Python executables from filesystem state and skips unresolved macOS system Python shims before generic process probing. Adapt Zed to the updated PET API by: - displaying the newly supported Hatch environment kind - passing no refresh identifier when running in-process environment discovery ## Testing - `cargo check -p languages --locked` - PET unit tests covering unresolved macOS system Python shims - The Zed compilation check was run on Linux; the original dialog reproduction was not manually tested on macOS. ## 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 adheres to Zed's UI standards ([UX/UI](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) and [icon](https://github.com/zed-industries/zed/blob/main/crates/icons/README.md) guidelines) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable --- Release Notes: - Fixed Python toolchain discovery prompting installation of Apple Command Line Tools when using a separately managed Python installation. |
||
|
|
bc463bc205
|
Send correct line endings to language servers (#59941)
# Objective
Zed normalizes all buffer text to `LF` internally, but was sending that
`LF`-normalized text to language servers even for `CRLF` files. This
caused servers such as ESLint (with a `linebreak-style` rule) to report
a false error on every line.
Fixes #38453
## Solution
Send the buffer's actual line endings to the language server instead:
- `didOpen` and full-document `didChange` now send
`text_with_line_endings()`, and incremental changes apply the buffer's
line ending to each edit.
- Normalize the line endings returning from the LSP before computing
changed regions
- This effectively incorporates the fix from #59151, which happens to be
the reason this change was [originally
reverted](
|
||
|
|
770a977c68
|
editor: Keep the cursor before text inserted by on-type formatting (#61823)
## Why `textDocument/onTypeFormatting` edits that insert or replace text at an empty cursor use its right bias and move it past the new text. In paired tags, pressing Enter can therefore leave the cursor on the closing tag instead of between the tags. ## What - Capture a left-biased pin for each empty cursor before requesting on-type formatting. - Skip cursor tracking unless a matching language server advertises the trigger. - Restore only unchanged empty cursors whose displacement is fully covered by formatting transaction ranges, so intervening user edits are preserved. - Reset vertical movement state when restoring a cursor. ## Testing - `cargo test -p editor test_on_type_formatting` (5 passed) - `./script/clippy -p editor` ## References - Fixes https://github.com/zed-industries/zed/issues/61574 Release Notes: - Fixed the cursor being moved past text inserted or replaced at its position during on-type formatting. --------- Co-authored-by: Kirill Bulatov <kirill@zed.dev> |
||
|
|
52894d3f48
|
Respect the filterText of LSP completion items during completion filtering (#62433)
# Objective
Closes #61646.
For code completions, Zed currently fuzzy-matches against
`CodeLabel::filter_text()`:
|
||
|
|
a034d87024
|
project: Don't let a canceled caller leak a loading worktree forever (#61009)
# Objective `WorktreeStore::find_or_create_worktree` inserts the shared worktree-creation task into `loading_worktrees` and relies on the task it returns to each caller to remove that entry once creation resolves. But the creation task keeps running through the clone the map itself holds, while the map cleanup lives only in the callers' returned tasks. If every caller is cancelled before creation resolves, the resolved task stays in `loading_worktrees` forever, retaining the `Entity<Worktree>` captured in its result (a `Shared` task memoizes its output). Such a worktree can never be released: `remove_worktree` only unlists it, so its background scan keeps running and its snapshot keeps growing for the lifetime of the window. The stale entry also keeps `initial_scan_complete` permanently `false` (that flag is `loading_worktrees.is_empty() && …`). Callers are cancelled routinely — worktree creation is async and can take seconds on a large tree, while the tasks awaiting it are owned by UI that the user can close at any time (a tab or pane, a debugger panel resolving a path, an agent session, or the whole window). See the existing note in `crates/zed/src/zed.rs` that external-file worktrees are "released on file close". Observed in the wild: a home-directory worktree removed from the project kept scanning for hours and grew Zed past 45 GB; neither removing the folder nor ending the agent session freed it — only quitting Zed. (The scan-amplification half of that incident is #60988.) ## Solution Spawn the map cleanup as its own detached task, next to the map insertion, so a loading entry always leaves `loading_worktrees` when loading resolves regardless of what happens to the callers. The returned per-caller task is unchanged apart from no longer owning that cleanup. ## Testing - Added `test_worktree_released_when_creation_caller_is_cancelled`: it requests a worktree, drops the returned task immediately (as a cancelled caller would), lets creation complete, removes the worktree, and asserts the entity is released. It fails on `main` and passes with this change. - Full worktree-related project integration suite is green (45/45). ## 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 adheres to Zed's UI standards ([UX/UI](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) and [icon](https://github.com/zed-industries/zed/blob/main/crates/icons/README.md) guidelines) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable Release Notes: - Fixed a memory leak where a worktree whose creation was requested by a since-cancelled task (e.g. a folder opened as its owning tab/panel/window closed) could never be released, leaving its background scan running and its snapshot growing for the lifetime of the window. --------- Co-authored-by: Kirill Bulatov <kirill@zed.dev> |
||
|
|
cdf33ac25e
|
markdown: Auto-size table columns to content width (#61773)
Closes https://github.com/zed-industries/zed/issues/62498 Fixes #50044: | before | after | | --- | --- | | <img width="1260" height="1449" alt="before" src="https://github.com/user-attachments/assets/84dfca5a-66da-4179-90f3-8408255346d4" /> | <img width="1260" height="1449" alt="after" src="https://github.com/user-attachments/assets/d63f9128-1397-4f1a-87a5-4e681e9b65f0" /> | ~Submitted as a draft PR because it relies on https://github.com/DioxusLabs/taffy/pull/1001. I temporarily pinned our `taffy` dependency to that particular branch to make the new tests pass.~ That fix got released! This fix is similar to the original fix in #50839 which got partially reverted by #52864 due to a regression, and `test_table_never_renders_past_its_available_width` ensures this doesn't regress again. ## 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 adheres to Zed's UI standards ([UX/UI](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) and [icon](https://github.com/zed-industries/zed/blob/main/crates/icons/README.md) guidelines) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable --- Release Notes: - Markdown table columns are now sized based on their content. |
||
|
|
b13f6c7114
|
Bump Zed to v1.17.0 (#62530)
Release Notes: - N/A Co-authored-by: zed-zippy[bot] <234243425+zed-zippy[bot]@users.noreply.github.com> |
||
|
|
fdf5de99c6
|
project: Keep the buffer associated after an LSP rename also renames the file (#61142)
# Objective `test_rename_that_also_renames_file` (added in #59104) is order-dependent: it passes at seed 0, which CI runs, but fails on many others (e.g. 11, 15, 17). Any unrelated change that schedules one extra task shifts the deterministic test scheduler enough to flip it at seed 0 too — which is how it surfaced, while working on #61009. The bug it exposes is real and pre-existing: #59104 stopped the content swap, but the open buffer still relied on the filesystem watcher to follow the file to its new path. Depending on the order the watcher reports the old path's deletion and the new path's creation, the entry id isn't carried over, and the buffer is stranded at the now-deleted old path (shown as saved) and never re-associates. ## Solution Move the worktree entry explicitly after the rename, preserving its id, the same way `rename_entry` (project panel renames) already does. ## Testing - `test_rename_that_also_renames_file` now runs 30 seeds to cover both orderings. ## 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 adheres to Zed's UI standards ([UX/UI](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) and [icon](https://github.com/zed-industries/zed/blob/main/crates/icons/README.md) guidelines) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable Release Notes: - Fixed a symbol rename that also renames the file leaving the open buffer on the old path |
||
|
|
897ba9adf2
|
markdown_preview: Fix images not rendering over remote (#62490)
Closes #39860 This PR resolves relative image paths from the Markdown source file's project path and load images through the project image store. SVG images over remote connections remain unsupported and are left for a follow-up. Release Notes: - Fixed images not rendering in Markdown Preview over remote. |
||
|
|
6ae52316be
|
proto: Bump to v0.3.3 (#62396)
Some checks failed
Congratsbot / check-author (push) Waiting to run
Congratsbot / congrats (push) Blocked by required conditions
deploy_nightly_docs / deploy_docs (push) Waiting to run
run_tests / orchestrate (push) Waiting to run
run_tests / doctests (push) Blocked by required conditions
run_tests / check_style (push) Waiting to run
run_tests / clippy_windows (push) Blocked by required conditions
run_tests / clippy_linux (push) Blocked by required conditions
run_tests / clippy_mac (push) Blocked by required conditions
run_tests / clippy_mac_x86_64 (push) Blocked by required conditions
run_tests / run_tests_windows (push) Blocked by required conditions
run_tests / run_tests_linux (push) Blocked by required conditions
run_tests / run_tests_mac (push) Blocked by required conditions
run_tests / miri_scheduler (push) Blocked by required conditions
run_tests / check_workspace_binaries (push) Blocked by required conditions
run_tests / build_visual_tests_binary (push) Blocked by required conditions
run_tests / check_wasm (push) Blocked by required conditions
run_tests / check_dependencies (push) Blocked by required conditions
run_tests / check_docs (push) Blocked by required conditions
run_tests / check_licenses (push) Blocked by required conditions
run_tests / check_scripts (push) Blocked by required conditions
run_tests / check_postgres_and_protobuf_migrations (push) Blocked by required conditions
run_tests / extension_tests (push) Blocked by required conditions
run_tests / tests_pass (push) Blocked by required conditions
extension_auto_bump / detect_changed_extensions (push) Has been cancelled
extension_auto_bump / bump_extension_versions (push) Has been cancelled
This PR bumps the version of the Proto extension to v0.3.3. Release Notes: - N/A Co-authored-by: zed-zippy[bot] <234243425+zed-zippy[bot]@users.noreply.github.com> |
||
|
|
1c9cbd3b24
|
Shrink agent terminals on clear (#62504)
Makes agent panel a bit more ergonomic: on terminal reset, user clear (demonstrated on videos), etc. shrink its size down. Before: https://github.com/user-attachments/assets/ce722f39-0ac7-4b86-9ff6-ecd8e327cc43 After: https://github.com/user-attachments/assets/f1825c9c-e52e-4d08-ac95-1403a6b0b1ea Release Notes: - Improved terminal behavior in agent panel on clear |
||
|
|
315ea37410
|
openai_subscribed: Restore Codex context limits (#62515)
PR #62502 changed the ChatGPT subscription models to report the corresponding public API context windows. That was based on a mistaken assumption: subscription requests go through the separate Codex backend, which still rejects requests around the previous context limit. Because the advertised context window also determines when Zed compacts a conversation, reporting 1.05M tokens delays compaction until after the Codex backend rejects the request. This reverts #62502 and restores the previous conservative limits. Longer term, we should load the account-specific model metadata from the Codex `/models` endpoint rather than maintaining this list by hand. Release Notes: - Fixed automatic context compaction for GPT models accessed through a ChatGPT subscription. |
||
|
|
a3d6515381
|
Factor out invalid encrypted content completion error (#62512)
Release Notes: - N/A |
||
|
|
6bd93fc319
|
openai_subscribed: Use full context windows for subscription models (#62502)
Some checks are pending
Congratsbot / congrats (push) Blocked by required conditions
Congratsbot / check-author (push) Waiting to run
deploy_nightly_docs / deploy_docs (push) Waiting to run
run_tests / run_tests_linux (push) Blocked by required conditions
run_tests / run_tests_mac (push) Blocked by required conditions
run_tests / miri_scheduler (push) Blocked by required conditions
run_tests / doctests (push) Blocked by required conditions
run_tests / check_workspace_binaries (push) Blocked by required conditions
run_tests / build_visual_tests_binary (push) Blocked by required conditions
run_tests / orchestrate (push) Waiting to run
run_tests / check_style (push) Waiting to run
run_tests / clippy_windows (push) Blocked by required conditions
run_tests / clippy_linux (push) Blocked by required conditions
run_tests / clippy_mac (push) Blocked by required conditions
run_tests / clippy_mac_x86_64 (push) Blocked by required conditions
run_tests / run_tests_windows (push) Blocked by required conditions
run_tests / check_wasm (push) Blocked by required conditions
run_tests / check_dependencies (push) Blocked by required conditions
run_tests / check_docs (push) Blocked by required conditions
run_tests / check_licenses (push) Blocked by required conditions
run_tests / check_scripts (push) Blocked by required conditions
run_tests / check_postgres_and_protobuf_migrations (push) Blocked by required conditions
run_tests / extension_tests (push) Blocked by required conditions
run_tests / tests_pass (push) Blocked by required conditions
ChatGPT subscription models currently report the short-context billing thresholds (272k or 372k tokens) as their maximum context windows. Those thresholds matter when Zed is paying metered API costs, but subscription requests are billed directly by OpenAI. This updates the subscribed models to report the full context windows supported by the corresponding public API models: 1.05M tokens for GPT-5.4, GPT-5.5, and GPT-5.6, and 400k tokens for GPT-5.4 Mini. It also reports the 128k output limit so context accounting reserves capacity for the response. Request serialization is unchanged; the unsupported `max_output_tokens` parameter is still omitted from requests to the Codex backend. Release Notes: - Improved context window usage for GPT models accessed through a ChatGPT subscription. |
||
|
|
daec37bdc5
|
remote: Fix missing path escaping in SFTP upload (#62239)
# Objective - Fixes #62238 - Properly escapes paths in the sftp PUT line ## Solution - 10-line wrapper function that escapes paths as sftp expects. Namely: paths in quotes with `\\` and `"` escaped. ## Testing - Did you test these changes? If so, how? `cargo check` - Are there any parts that need more testing? Up to you, this is a simple change and I dont think sftp with default install paths ever worked on MacOS - How can other people (reviewers) test your changes? Is there anything specific they need to know? Just connect to a remote on OSX and see if the logs had an sftp upload failure in there - If relevant, what platforms did you test these changes on, and are there any important ones you can't 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 adheres to Zed's UI standards ([UX/UI](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) and [icon](https://github.com/zed-industries/zed/blob/main/crates/icons/README.md) guidelines) - [ ] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable --- Release Notes: - Fix remote uploads over sftp where the paths contain spaces --------- Co-authored-by: Smit Barmase <heysmitbarmase@gmail.com> |
||
|
|
c7537bdf46
|
docs: Rename brand-voice to brand-writer skill (#62384)
Some checks are pending
Congratsbot / check-author (push) Waiting to run
Congratsbot / congrats (push) Blocked by required conditions
deploy_nightly_docs / deploy_docs (push) Waiting to run
run_tests / clippy_linux (push) Blocked by required conditions
run_tests / orchestrate (push) Waiting to run
run_tests / check_dependencies (push) Blocked by required conditions
run_tests / check_docs (push) Blocked by required conditions
run_tests / check_licenses (push) Blocked by required conditions
run_tests / check_scripts (push) Blocked by required conditions
run_tests / check_postgres_and_protobuf_migrations (push) Blocked by required conditions
run_tests / extension_tests (push) Blocked by required conditions
run_tests / tests_pass (push) Blocked by required conditions
run_tests / check_style (push) Waiting to run
run_tests / clippy_windows (push) Blocked by required conditions
run_tests / clippy_mac (push) Blocked by required conditions
run_tests / clippy_mac_x86_64 (push) Blocked by required conditions
run_tests / run_tests_windows (push) Blocked by required conditions
run_tests / run_tests_linux (push) Blocked by required conditions
run_tests / run_tests_mac (push) Blocked by required conditions
run_tests / miri_scheduler (push) Blocked by required conditions
run_tests / doctests (push) Blocked by required conditions
run_tests / check_workspace_binaries (push) Blocked by required conditions
run_tests / build_visual_tests_binary (push) Blocked by required conditions
run_tests / check_wasm (push) Blocked by required conditions
## What `docs/.conventions/brand-voice/SKILL.md` declares: ```yaml name: brand-writer ``` while sitting in a directory called `brand-voice`. The Agent Skills specification requires the two to be identical: > The required `name` field: … **Must match the parent directory name** > — <https://agentskills.io/specification#name-field> So this skill fails `skills-ref validate` today. ## Which side is wrong The directory — and this repository settles it three separate ways, with no outside context needed. **1. The sibling copy already uses the matching name.** `.factory/skills/brand-writer/` holds the same four files (`SKILL.md`, `rubric.md`, `taboo-phrases.md`, `voice-examples.md`) under `brand-writer`. **2. `crates/agent_skills/README.md` documents the skill system using this exact skill, and the name it documents is `brand-writer`:** ``` line 107: <name>brand-writer</name> line 149: the model … calls `skill { name: "brand-writer" }` line 151: when the user types `/brand-writer` line 158: <skill_content name="brand-writer"> ``` That name is load-bearing — it is what the skill tool invokes and what the slash command types. The directory name is referenced twice, both inside `docs/.conventions/CONVENTIONS.md`. **3. Six of the repository's seven skills already match their directory:** | skill | matches? | | --- | --- | | `.agents/skills/gpui-test` | ✅ | | `.agents/skills/lint-creator` | ✅ | | `.agents/skills/zed-cherry-pick` | ✅ | | `.factory/skills/brand-writer` | ✅ | | `.factory/skills/humanizer` | ✅ | | `crates/agent_skills/builtin/create-skill` | ✅ | | **`docs/.conventions/brand-voice`** | ❌ the only one | ## The change The frontmatter is untouched. Only the directory moves, plus the two references to it: - `docs/.conventions/brand-voice/` → `docs/.conventions/brand-writer/` (4 files, pure rename) - `CONVENTIONS.md:5` — `[brand-voice/](./brand-voice/)` → `[brand-writer/](./brand-writer/)` - `CONVENTIONS.md:368` — `` `brand-voice/rubric.md` `` → `` `brand-writer/rubric.md` `` `git grep brand-voice` returns nothing afterwards. If you would rather keep the directory name and rename the field to `brand-voice`, that is a one-line change instead and I am happy to switch it — but it would give the two copies of one skill two different names, and it would diverge from the name `crates/agent_skills/README.md` documents. ## One thing I noticed but did not touch The two copies have drifted. `.factory/skills/brand-writer/SKILL.md` is 279 lines and includes a *"Phase 4: Humanizer Pass"* section; `docs/.conventions/`'s copy is 265 lines, lacks that section, and renumbers Validation from Phase 5 to Phase 4. That is a separate question about which copy is canonical, so it is left alone here. --- Found with [AgentCompass](https://github.com/YoavLax/agent-compass), an offline static analyzer for AI-agent repo readiness. Verified by hand against the spec before opening. Release Notes: - N/A |
||
|
|
c0979ee084
|
language_models: Make GPT-5.6 Sol default for OpenAI subscribed (#62477)
Release Notes: - Make GPT-5.6 Sol default for OpenAI subscribed Signed-off-by: Neel <neel@zed.dev> |
||
|
|
83dc1967d0
|
worktree: Anchor ignore rules at the repository they belong to (#62325)
Since #60772, a worktree's ignore rules are also applied to the directories above its root. Because of this, an `info/exclude` pattern naming one of those parent directories marks it as ignored, and with it the whole worktree below. Stop the walk at the repository containing the worktree root. Also skip exclude rules for paths outside the work directory they are anchored at, as `.gitignore` and global gitignore rules already do. Release Notes: - Fixed a worktree being reported as entirely ignored when its repository's `info/exclude` named one of the worktree's parent directories |
||
|
|
992c7d469c
|
http_client: Bound GitHub release requests (#62175)
# Objective - Stop language-server update checks from waiting forever. **Note:** I tried to find any existing issue but no luck. ## Solution - Set one time limit for the full response body. If the GitHub, for example, release request stops responding, return an error. Do not let it block language-server update checks without limit. ## Testing - Did you test these changes? If so, how? 1. This is a flaky issue, reproducing it is not that trivial. 2. The easiest way I found is just restarting Zed until you get the notification in the status bar `Checking for updates <language_server_naem>` - Are there any parts that need more testing? No - How can other people (reviewers) test your changes? Is there anything specific they need to know? See above. - If relevant, what platforms did you test these changes on, and are there any important ones you can't test? - macOS - Linux ## 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 adheres to Zed's UI standards ([UX/UI](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) and [icon](https://github.com/zed-industries/zed/blob/main/crates/icons/README.md) guidelines) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable ## Showcase <img width="2624" height="2260" alt="CleanShot 2026-08-03 at 20 29 11@2x" src="https://github.com/user-attachments/assets/83e2781c-15bc-4924-be33-88c26f20387d" /> --- Release Notes: - Fixed language servers update checks |
||
|
|
d71f146104
|
Bump stacksafe (#62468)
Some checks are pending
run_tests / check_workspace_binaries (push) Blocked by required conditions
run_tests / orchestrate (push) Waiting to run
run_tests / check_style (push) Waiting to run
run_tests / clippy_windows (push) Blocked by required conditions
run_tests / clippy_linux (push) Blocked by required conditions
run_tests / clippy_mac (push) Blocked by required conditions
run_tests / clippy_mac_x86_64 (push) Blocked by required conditions
run_tests / run_tests_linux (push) Blocked by required conditions
run_tests / run_tests_mac (push) Blocked by required conditions
Congratsbot / check-author (push) Waiting to run
Congratsbot / congrats (push) Blocked by required conditions
deploy_nightly_docs / deploy_docs (push) Waiting to run
run_tests / run_tests_windows (push) Blocked by required conditions
run_tests / tests_pass (push) Blocked by required conditions
run_tests / miri_scheduler (push) Blocked by required conditions
run_tests / doctests (push) Blocked by required conditions
run_tests / build_visual_tests_binary (push) Blocked by required conditions
run_tests / check_wasm (push) Blocked by required conditions
run_tests / check_dependencies (push) Blocked by required conditions
run_tests / check_docs (push) Blocked by required conditions
run_tests / check_licenses (push) Blocked by required conditions
run_tests / check_scripts (push) Blocked by required conditions
run_tests / check_postgres_and_protobuf_migrations (push) Blocked by required conditions
run_tests / extension_tests (push) Blocked by required conditions
Spotted ``` The package `block v0.1.6` currently triggers the following future incompatibility lints: > warning: static of uninhabited type > --> .../block-0.1.6/src/lib.rs:64:5 > | > 64 | static _NSConcreteStackBlock: Class; > | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ > | > = note: uninhabited statics cannot be initialized, and any access would be an immediate error > = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! > = note: for more information, see issue #74840 <https://github.com/rust-lang/rust/issues/74840> The package `proc-macro-error2 v2.0.1` currently triggers the following future incompatibility lints: > warning[E0365]: extern crate `proc_macro` is private and cannot be re-exported > --> .../proc-macro-error2-2.0.1/src/lib.rs:494:13 > | > 494 | pub use proc_macro; > | ^^^^^^^^^^ > | > = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! > = note: for more information, see issue #127909 <https://github.com/rust-lang/rust/issues/127909> > help: consider making the `extern crate` item publicly accessible > | > 277 | pub extern crate proc_macro; > | +++ ``` warnings recently. The former is impossible to fix quickly as needs a migration to `objc2`, but the latter is easily fixed by a version bump, ergo this PR. Release Notes: - N/A |
||
|
|
c83adb3dbf
|
project: Fix SymbolKind serialization over RPC (#62458)
# Objective I noticed that in workspace symbol search, the function's symbol kind has become `Trait`. ## Solution Add `to_proto` and a macro to define the mapping instead of `as i32`. ## Testing Updated the 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 adheres to Zed's UI standards ([UX/UI](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) and [icon](https://github.com/zed-industries/zed/blob/main/crates/icons/README.md) guidelines) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable --- Release Notes: - Fixed `SymbolKind` mapping to LSP protocol values |
||
|
|
a49162656e
|
open_ai: Preserve separators between reasoning summaries (#62466)
OpenAI reasoning summaries are streamed as multiple indexed parts, and each new reasoning output item starts its indexes at zero. The Responses event mapper previously treated those indexes as global, so adjacent reasoning items could be concatenated without whitespace, producing text such as `**First item****Second item**`. Track the current summary part by both its item ID and summary index, and emit a separator whenever that pair changes. Text delta events now retain their summary index as a fallback when a separate part-added event is absent, while sharing the same boundary handling to avoid duplicate separators. Testing performed: - `cargo check -p open_ai` - `cargo nextest run -p open_ai` - `cargo fmt -p open_ai -- --check` - `./script/clippy -p open_ai` Release Notes: - Fixed missing separators between OpenAI reasoning summaries. |
||
|
|
7807e4b122
|
helix: Add missing code action menus navigation keymaps (#62356)
# Objective Helix uses tab/shift-tab to navigate code action menus. Currently, this will indent the code instead of navigating within the menu. ## Solution Add keymaps. ## Testing I tested it manually. ## 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 adheres to Zed's UI standards ([UX/UI](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) and [icon](https://github.com/zed-industries/zed/blob/main/crates/icons/README.md) guidelines) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable --- Release Notes: - Added support for using `tab` and `shift-tab` to navigate the code actions menu in Helix mode |
||
|
|
c6b01d8a20
|
Add optional message support to git stash (#62439)
Show a modal when invoking the stash action to allow users to provide an optional custom message for the stash entry. Closes #62430 # Image <img width="1622" height="1106" alt="Screenshot 2026-08-10 at 9 14 00 PM" src="https://github.com/user-attachments/assets/0d26dac2-919d-4bb1-b6a7-433ceff18955" /> <img width="1622" height="1106" alt="Screenshot 2026-08-10 at 9 14 11 PM" src="https://github.com/user-attachments/assets/896b68ff-999f-4ec9-a6a4-e0e7a6867286" /> # Objective Zed's stash action runs `git stash push --quiet --include-untracked --` with no `-m`, so every stash is labelled with git's auto-generated `WIP on <branch>: <sha> <subject>`. That text describes the commit you were sitting on, not what you stashed — so two stashes taken from the same commit are indistinguishable. This undercuts the stash picker (`git::ViewStash`), which lists entries as `#<index>: <message>` and fuzzy-searches over exactly that string. The search box already exists; there is just nothing meaningful to search, because every candidate is a variation of the same auto-generated line. ## Solution `git::StashAll` now opens a single-line modal ("Optionally provide a stash message") before stashing. - Confirming with text passes `--message <text>` to `git stash push`. - Confirming with the field empty omits the flag entirely, keeping git's default description — so the prompt is a one-keystroke pass-through and existing muscle memory still works. - Cancelling aborts the stash, so the prompt doubles as a confirmation step. Implementation: - `StashMessageModal` (`Editor::single_line`) in `git_panel.rs`, toggled from `GitPanel::stash_all`. `menu::Confirm` trims the input and maps empty to `None`. - `message: Option<String>` threaded through `Repository::stash_all` → `stash_entries` → `GitRepository::stash_paths`. The flag is appended before the `--` separator so a message is never parsed as a pathspec. - New `message` field on the `Stash` proto message, so remote and collab projects behave identically. One non-obvious detail: the modal is opened via `cx.defer_in` rather than inline. `git::StashAll` is registered on the workspace (`git_ui.rs`) as well as on the panel element, and `Workspace::register_action` dispatches while `Workspace` is leased — so opening the modal inline re-enters that update and hits GPUI's `double_lease_panic`. This only reproduces when focus is *outside* the Git Panel, which makes it easy to miss. `Option<String>` rather than `String` is deliberate: `--message ""` produces a blank stash description, which is strictly worse than git's default. ## Testing Manually verified the modal in a local build on macOS: the prompt appears on `git::StashAll`, accepts a message, and the named entry shows up in the stash picker. Also verified at the git level by replaying the exact argument vector `stash_paths` builds against a scratch repo with mixed staged / unstaged / untracked changes: | Case | Result | |---|---| | `stash push --quiet --include-untracked --message "my named stash" -- <paths>` | `stash@{0}: my named stash`; worktree clean, untracked file included | | same, without `--message` | `stash@{0}: <sha> <subject>` — git's default text | | `--message "x" --` with no paths (clean repo) | exit 0, no stash created — the empty pathspec does **not** stash everything | `cargo fmt --check` clean, `./script/clippy -p git -p fs -p project -p git_ui` passes with `--deny warnings`, and the existing suites pass (`cargo test -p project -p git_ui`, 436 tests). Worth a reviewer's attention: trigger `git::StashAll` with focus in the **editor** rather than the Git Panel. That routes through the workspace action registration and is the case the `cx.defer_in` deferral exists to keep from panicking. No new automated tests — the behavior is testable with the existing `git_panel.rs` harness (`init_test`, `GitPanel::new`) if reviewers would prefer coverage over a manual check. ## Self-Review Checklist: - [x] I've reviewed my own diff for quality, security, and reliability - [x] Unsafe blocks (if any) have justifying comments — n/a, no unsafe added - [x] The content adheres to Zed's UI standards ([UX/UI](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) and [icon](https://github.com/zed-industries/zed/blob/main/crates/icons/README.md) guidelines) - [ ] Tests cover the new/changed behavior — no new tests; see Testing - [x] Performance impact has been considered and is acceptable — one extra process argument; no new work on any hot path --- Release Notes: - Added an optional stash message prompt when stashing changes ` --------- Co-authored-by: Chris Biscardi <chris@christopherbiscardi.com> |
||
|
|
bd1b83a43a
|
git_panel: Add collapsable sections (#62441)
# Objective - Make Git Panel grouping sections collapsible so users can hide sections they are not currently interested in. - Support collapsible sections when grouping changes by tracking and by staging. - Provide a clear visual indicator showing whether each section is expanded or collapsed. ## Solution - Added per-section collapsed state to the Git Panel. - Made grouping headers clickable to toggle their section between expanded and collapsed. - Added chevron indicators that point down when expanded and right when collapsed. - Applied the behavior to both flat and tree views. - Kept the stage/unstage checkbox independent from the header collapse interaction. - Ensured a previously collapsed Tracked section does not hide files after switching to Group by None. ## Testing - Ran `rustfmt --edition 2024 crates/git_ui/src/git_panel.rs --check`. - Ran `cargo check -p git_ui`. - Ran `cargo test -p git_ui`: - 129 tests passed - 0 tests failed - Ran `git diff --check`. - Attempted `./script/clippy -p git_ui` twice. It produced no lint diagnostics but did not finish compiling the release, all-targets, all-features dependency graph within the available timeout. - Manually verify by selecting both grouping modes in the Git Panel and clicking each section header in flat and tree views. Confirm that: - The section contents are hidden and restored. - The chevron updates to reflect the current state. - Clicking the stage/unstage checkbox does not collapse the section. - Switching to Group by None does not leave tracked files hidden. ## 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 adheres to Zed's UI standards ([UX/UI](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) and [icon](https://github.com/zed-industries/zed/blob/main/crates/icons/README.md) guidelines) - [ ] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable ## Showcase https://github.com/user-attachments/assets/77ec4c88-4a6d-4e49-ac9f-ddbf80e724ca --- Release Notes: - Improved Git Panel organization by allowing grouped change sections to be collapsed |
||
|
|
6634c945d3
|
git_panel: Add copy path actions to the context menu (#62352)
Some checks are pending
Congratsbot / check-author (push) Waiting to run
Congratsbot / congrats (push) Blocked by required conditions
deploy_nightly_docs / deploy_docs (push) Waiting to run
run_tests / check_workspace_binaries (push) Blocked by required conditions
run_tests / clippy_mac (push) Blocked by required conditions
run_tests / clippy_mac_x86_64 (push) Blocked by required conditions
run_tests / run_tests_windows (push) Blocked by required conditions
run_tests / run_tests_mac (push) Blocked by required conditions
run_tests / doctests (push) Blocked by required conditions
run_tests / check_dependencies (push) Blocked by required conditions
run_tests / check_scripts (push) Blocked by required conditions
run_tests / check_postgres_and_protobuf_migrations (push) Blocked by required conditions
run_tests / extension_tests (push) Blocked by required conditions
run_tests / tests_pass (push) Blocked by required conditions
run_tests / orchestrate (push) Waiting to run
run_tests / check_style (push) Waiting to run
run_tests / clippy_windows (push) Blocked by required conditions
run_tests / clippy_linux (push) Blocked by required conditions
run_tests / run_tests_linux (push) Blocked by required conditions
run_tests / miri_scheduler (push) Blocked by required conditions
run_tests / build_visual_tests_binary (push) Blocked by required conditions
run_tests / check_wasm (push) Blocked by required conditions
run_tests / check_docs (push) Blocked by required conditions
run_tests / check_licenses (push) Blocked by required conditions
# Objective When developing remotely, when I close the uncommitted changes tab, I need some time to load before I can copy the path. Or have to switch to the project panel to find the specific file. All of this is annoying, so I added a copy path action to the git panel's context menu and key bindings consistent with the project panel. ## Solution Already described in the Objective section. ## Testing I wrote a unit test and tested it manually. ## 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 adheres to Zed's UI standards ([UX/UI](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) and [icon](https://github.com/zed-industries/zed/blob/main/crates/icons/README.md) guidelines) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable ## Showcase <img width="411" height="535" alt="showcase" src="https://github.com/user-attachments/assets/a17e7633-eb92-4737-aa30-958fe58bb99f" /> <img width="717" height="427" alt="showcase" src="https://github.com/user-attachments/assets/d067e892-17de-4527-ac20-16cad6f38015" /> --- Release Notes: - Added "Copy Path" and "Copy Relative Path" actions to the Git Panel's context menu |
||
|
|
a1860ac1c1
|
Document Claude Opus 5 hosted model pricing (#62450)
The hosted-model reference now includes Claude Opus 5. This closes the gap between the public documentation and the models that `cloud` currently offers to Zed Pro and Zed Business customers. The pricing table lists the provider price and Zed price for input, output, cache-write, and cache-read tokens. The context-window table lists the current 1M-token hosted limit. This change does not alter model access or billing behavior. Testing performed: - `cd docs && npx prettier --check src/account/zed-hosted-models.md` - `cd docs && mdbook build` Release Notes: - N/A |
||
|
|
9e236090b9
|
gpui: Add per-window frame-duration and present-interval histograms (#61871)
Some checks are pending
Congratsbot / check-author (push) Waiting to run
Congratsbot / congrats (push) Blocked by required conditions
deploy_nightly_docs / deploy_docs (push) Waiting to run
run_tests / orchestrate (push) Waiting to run
run_tests / doctests (push) Blocked by required conditions
run_tests / check_style (push) Waiting to run
run_tests / clippy_windows (push) Blocked by required conditions
run_tests / clippy_linux (push) Blocked by required conditions
run_tests / clippy_mac (push) Blocked by required conditions
run_tests / clippy_mac_x86_64 (push) Blocked by required conditions
run_tests / run_tests_windows (push) Blocked by required conditions
run_tests / run_tests_mac (push) Blocked by required conditions
run_tests / run_tests_linux (push) Blocked by required conditions
run_tests / check_wasm (push) Blocked by required conditions
run_tests / check_dependencies (push) Blocked by required conditions
run_tests / check_docs (push) Blocked by required conditions
run_tests / check_licenses (push) Blocked by required conditions
run_tests / tests_pass (push) Blocked by required conditions
run_tests / miri_scheduler (push) Blocked by required conditions
run_tests / check_workspace_binaries (push) Blocked by required conditions
run_tests / build_visual_tests_binary (push) Blocked by required conditions
run_tests / check_scripts (push) Blocked by required conditions
run_tests / check_postgres_and_protobuf_migrations (push) Blocked by required conditions
run_tests / extension_tests (push) Blocked by required conditions
GPUI's input-latency histograms only sample frames that were preceded by input, so a window that janks while animating or while streaming content (agent panel output, terminal scrollback) never shows up in the fleet's latency reports. Hang detection catches outright stalls, but frames that are merely late — stutters in the 30–100ms range during animation — currently aren't visible anywhere. This adds a `frame-duration-histogram` feature to GPUI with a per-window tracker recording two histograms: the duration of every `Window::draw`, and the interval between consecutively presented frames while the window is animating (a next-frame callback was already scheduled at the previous present, so frames are being produced back-to-back and a stretched interval means frames were missed). Intervals are only recorded for active windows, since inactive windows are deliberately throttled to a lower frame rate, and re-presents of unchanged frames (e.g. sustaining the display's refresh rate during high-rate input) are excluded. Zed enables the feature and reports both histograms every five minutes as a "Frame Duration Report" telemetry event alongside the existing "Latency Report", bucketed at roughly the 120Hz/60Hz/30Hz frame budgets so dropped-frame rates can be aggregated across the fleet. Release Notes: - Added frame rendering performance to the diagnostics Zed collects when telemetry is enabled, to help find and fix stutters and dropped frames. |
||
|
|
c65e08a83d
|
Fix the syntax layer panic (#62366)
While working on the project search on type PR and testing it, uncovered this bug and split off into a separate commit Release Notes: - N/A |
||
|
|
069449ab71
|
docs: Enable smart punctuation (#62440)
> “Smart quotes” are the ideal form of quotation marks and apostrophes,
and are commonly curly or sloped. "Dumb quotes," or straight quotes, are
a vestigial constraint from typewriters when using one key for two
different marks helped save space on a keyboard.
Also helps us be consistent. I’m going to make a PR to our marketing
site to fix these issues as well, to bring further consistency to our
copy (docs / marketing / otherwise). Starting with v0.5.0 and up,
[`smart-punctuation`](
|
||
|
|
e4671f71d5
|
Show error toast on startup for malformed tasks (#62387)
Closes https://github.com/zed-industries/zed/issues/61208 Before, Zed showed no toasts on startup when tasks.json contained malformed entries, also if there were two top-level arrays, the last one was silently discarded without any toasts too. The PR fixes both. Release Notes: - Fixed error toast not showing for malformed tasks.json |
||
|
|
4bd1993783
|
markdown: Support triple-tilde Mermaid fences (#62257)
# Objective Zed's Markdown parser accepts tilde-fenced code blocks, but Mermaid extraction only strips backtick fences. As a result, a block like this is parsed as Mermaid while the fence itself is still passed to the renderer: ```markdown ~~~mermaid graph TD; ~~~ ``` ## Solution Teach the Markdown code-block helpers to recognize triple-tilde fences alongside triple-backtick fences. The change stays in the existing parsing path, so Mermaid rendering does not need a separate special case. A regression test covers extraction from a tilde-fenced Mermaid block. ## Testing - `cargo fmt --all -- --check` - `cargo test -p markdown` (138 tests) - `./script/clippy -p markdown` - `cargo build -p zed` - Opened a `~~~mermaid` block in the built Zed Dev app on macOS and verified that Markdown Preview renders the diagram ## 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 adheres to Zed's UI standards ([UX/UI](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) and [icon](https://github.com/zed-industries/zed/blob/main/crates/icons/README.md) guidelines) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable --- Release Notes: - Fixed Mermaid diagrams in Markdown previews when they use triple-tilde fences. --------- Co-authored-by: Smit Barmase <heysmitbarmase@gmail.com> |
||
|
|
d4010e91cc
|
project_panel: Confirm before trashing unsaved file on undo (#62294)
# Objective Ensure that, when users undo project panel operations, we don't trash files with unsaved edits as that could lead to data loss, as outlined [here](https://github.com/zed-industries/zed/issues/62243#issuecomment-5203625087). Closes #62243 ## Solution Update `UndoManager::trash` to require confirmation before moving files to the trash. For files with unsaved edits, users can save, discard, or cancel the operation while clean files receive a standard trash confirmation, same as shown when trashing a file through the Project Panel. This helps avoid the issue where, if an user undoes a file creation for a file that has unsaved edits and then quits Zed, the edits that were saved in memory, as well as the Project Panel history, will now be gone and there's no way to recover the data. Batch operations have also been updated to now show a single confirmation before making filesystem changes, preventing partial execution when cancelled and warning about unsaved edits. Lastly, the trash/delete prompt building has been refactored in order for the Project Panel and Undo Manager to share the same wording, file-list truncation, and unsaved-change warnings. ## Testing Tested both manually as well as added the following tests: * `project_panel::tests::undo::undo_create_cancel_trash` * `project_panel::tests::undo::undo_create_dirty_file` * `project_panel::tests::undo::cancel_partial_trash_batch` * `project_panel::tests::undo::batch_trash_warns_about_unsaved_changes` ## Self-Review Checklist: - [x] I've reviewed my own diff for quality, security, and reliability - [ ] Unsafe blocks (if any) have justifying comments - [ ] The content adheres to Zed's UI standards ([UX/UI](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) and [icon](https://github.com/zed-industries/zed/blob/main/crates/icons/README.md) guidelines) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable ## Showcase The screen recording below shows the trash confirmation dialog on both a clean and dirty files, on both undo and redo flows. https://github.com/user-attachments/assets/0f9b96f5-0357-4e3f-8ec2-141486942c89 --- Release Notes: - Fixed issue with undoing or redoing project panel operations that could lead to a file with unsaved edits being trashed without confirmation. |
||
|
|
4e8057d74d
|
ci: Ensure assignees can be set for generated PRs (#62418)
Some checks are pending
run_tests / clippy_windows (push) Blocked by required conditions
run_tests / check_workspace_binaries (push) Blocked by required conditions
Congratsbot / check-author (push) Waiting to run
Congratsbot / congrats (push) Blocked by required conditions
deploy_nightly_docs / deploy_docs (push) Waiting to run
run_tests / orchestrate (push) Waiting to run
run_tests / check_style (push) Waiting to run
run_tests / clippy_linux (push) Blocked by required conditions
run_tests / clippy_mac (push) Blocked by required conditions
run_tests / clippy_mac_x86_64 (push) Blocked by required conditions
run_tests / run_tests_windows (push) Blocked by required conditions
run_tests / run_tests_linux (push) Blocked by required conditions
run_tests / run_tests_mac (push) Blocked by required conditions
run_tests / miri_scheduler (push) Blocked by required conditions
run_tests / doctests (push) Blocked by required conditions
run_tests / check_wasm (push) Blocked by required conditions
run_tests / build_visual_tests_binary (push) Blocked by required conditions
run_tests / check_dependencies (push) Blocked by required conditions
run_tests / check_docs (push) Blocked by required conditions
run_tests / check_licenses (push) Blocked by required conditions
run_tests / check_scripts (push) Blocked by required conditions
run_tests / check_postgres_and_protobuf_migrations (push) Blocked by required conditions
run_tests / extension_tests (push) Blocked by required conditions
run_tests / tests_pass (push) Blocked by required conditions
Now, this is one of these beautiful cases where GitHubs API ist just so pleasant to work with: Because PRs are treated as issues, assigning an assignee to a PR suddenly requires issue write permissions, despite the issue in question being a PR. Not having that permission resulted in some missing assignees on zed zippy bumps and failures of the workflows as seen in https://github.com/zed-industries/zed/actions/runs/31339736929/job/93311493258. In comparison, labelling PRs requires PR write permissions as seen in https://github.com/zed-industries/zed/pull/61525 🤡 Beautiful API and a pleasure to work with, 10/10 would recommend. Release Notes: - N/A |
||
|
|
0812d21017
|
open_ai: Recommend GPT-5.6 Sol (#62417)
Recommends GPT-5.6 Sol for both OpenAI BYOK and OpenAI subscription. Also unifies the naming so that we use the same OpenAI model names for the Zed/OpenAI BYOK and OpenAI subscription providers. Release Notes: - N/A |
||
|
|
492acd6c81
|
Revert "terminal: Actually close process groups when the terminal is closed (#61467)" (#62399)
This reverts commit
|
||
|
|
f99aad788b
|
Accept additional Guild role for guild labeling (#62411)
We added one more custom repository role that a Guild member can hold, therefore we need the labeler to accept it. Release Notes: - N/A |
||
|
|
1271f8b0e8
|
Bump rustc to 1.97 (#62395)
Some checks failed
extension_auto_bump / detect_changed_extensions (push) Has been cancelled
extension_auto_bump / bump_extension_versions (push) Has been cancelled
Congratsbot / check-author (push) Waiting to run
Congratsbot / congrats (push) Blocked by required conditions
deploy_nightly_docs / deploy_docs (push) Waiting to run
run_tests / check_workspace_binaries (push) Blocked by required conditions
run_tests / orchestrate (push) Waiting to run
run_tests / check_style (push) Waiting to run
run_tests / clippy_windows (push) Blocked by required conditions
run_tests / clippy_linux (push) Blocked by required conditions
run_tests / build_visual_tests_binary (push) Blocked by required conditions
run_tests / check_wasm (push) Blocked by required conditions
run_tests / check_dependencies (push) Blocked by required conditions
run_tests / check_scripts (push) Blocked by required conditions
run_tests / check_postgres_and_protobuf_migrations (push) Blocked by required conditions
run_tests / extension_tests (push) Blocked by required conditions
run_tests / tests_pass (push) Blocked by required conditions
run_tests / clippy_mac (push) Blocked by required conditions
run_tests / clippy_mac_x86_64 (push) Blocked by required conditions
run_tests / run_tests_windows (push) Blocked by required conditions
run_tests / run_tests_linux (push) Blocked by required conditions
run_tests / run_tests_mac (push) Blocked by required conditions
run_tests / miri_scheduler (push) Blocked by required conditions
run_tests / doctests (push) Blocked by required conditions
run_tests / check_docs (push) Blocked by required conditions
run_tests / check_licenses (push) Blocked by required conditions
Release Notes: - N/A |
||
|
|
371a7d4ba2
|
editor: Honor lsp_results_location in the cmd-click references fallback (#61187)
Some checks are pending
Congratsbot / check-author (push) Waiting to run
Congratsbot / congrats (push) Blocked by required conditions
deploy_nightly_docs / deploy_docs (push) Waiting to run
run_tests / orchestrate (push) Waiting to run
run_tests / run_tests_linux (push) Blocked by required conditions
run_tests / run_tests_mac (push) Blocked by required conditions
run_tests / miri_scheduler (push) Blocked by required conditions
run_tests / doctests (push) Blocked by required conditions
run_tests / check_workspace_binaries (push) Blocked by required conditions
run_tests / build_visual_tests_binary (push) Blocked by required conditions
run_tests / check_wasm (push) Blocked by required conditions
run_tests / check_dependencies (push) Blocked by required conditions
run_tests / check_docs (push) Blocked by required conditions
run_tests / check_licenses (push) Blocked by required conditions
run_tests / check_scripts (push) Blocked by required conditions
run_tests / check_postgres_and_protobuf_migrations (push) Blocked by required conditions
run_tests / extension_tests (push) Blocked by required conditions
run_tests / check_style (push) Waiting to run
run_tests / clippy_windows (push) Blocked by required conditions
run_tests / clippy_linux (push) Blocked by required conditions
run_tests / clippy_mac (push) Blocked by required conditions
run_tests / clippy_mac_x86_64 (push) Blocked by required conditions
run_tests / run_tests_windows (push) Blocked by required conditions
run_tests / tests_pass (push) Blocked by required conditions
Follow-up to #59838, implementing what was discussed at the end of #59829: cmd-click navigation now respects `lsp_results_location` when go-to-definition falls back to find-all-references (invited in https://github.com/zed-industries/zed/issues/59829#issuecomment-4989966493: "It would! Feel free to hook that up if you'd like to!"). ## Problem Cmd-clicking a symbol's definition falls back to find-all-references, but the results always open in a multibuffer even with `"lsp_results_location": "picker"`. The hover-link click path calls the editor navigation methods directly, so the action handlers registered by `lsp_locations` never get a chance to intercept. ## Solution - `handle_click_hovered_link`'s fallback now dispatches the `FindAllReferences` action (with `open_results_in: None`, deferring to the global setting) instead of calling the method, so the `lsp_locations` handler can intercept it, or propagate to the editor's built-in handler when the setting is `multi_buffer`, preserving today's behavior exactly. - The plain cmd-click arm of `cmd_click_reveal_task` now runs the definition query via `go_to_definition_of_kind` (no internal references fallback) instead of `go_to_definition`, so the click path has a single fallback decision point: the dispatching one. Without this, the method's baked-in fallback opened a multibuffer before the dispatch could run. - `go_to_definition_of_kind` visibility widened to `pub(crate)` for the call from `hover_links.rs`. Shift/alt click variants (type definition, splits) are untouched. Keyboard invocations were already intercepted and are unchanged. ## Testing - New test `test_cmd_click_fallback_honors_lsp_results_location` in `lsp_locations`, following the module's existing test patterns: fake LSP returning no definition and two references, `lsp_results_location: picker`, simulated cmd-click at the cursor's pixel position, asserts the picker opens. The test fails without this change. - `cargo nextest run -p lsp_locations`: 6/6. - `cargo nextest run -p editor -E 'test(hover) or test(fallback) or test(go_to_definition) or test(references)'`: 54/54. - `cargo fmt` and `./script/clippy` clean. - Verified manually in a release build: with the setting on, cmd-clicking a definition opens the picker; with it off, behavior is unchanged. Per the contributing guidelines' note on AI assistance: this change was developed with heavy AI assistance (Claude Code). I have reviewed and understand the full diff and the reasoning behind each hunk, and I'm the one answering review feedback. Release Notes: - Fixed cmd-click go-to-definition falling back to a references multibuffer even when `lsp_results_location` is set to `picker`. |
||
|
|
59b2ebf103
|
gpui: Fix img aspect ratio overriding existing value (#62367)
# Objective The `gpui::img` element always overrides the `aspect_ratio` field, so if you have an image element that applies its own `.aspect_ratio()` it just gets wiped out. ## Solution Only apply the aspect ratio default if one is not already set. ## Testing It's a very minor change but I did add a small test to ensure it actually gets overridden. ## 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 adheres to Zed's UI standards ([UX/UI](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) and [icon](https://github.com/zed-industries/zed/blob/main/crates/icons/README.md) guidelines) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable ## Showcase This came from an issue where vertical images inside an element (square in this case, as you'd see in an image gallery) do not behave correctly with `object_fit` values of `ObjectFit::Contain` or `ObjectFit::ScaleDown`. This was simply because despite the image element having a fixed square size (`img().size(px(200.))`), the aspect ratio would be forced to the ratio of the image itself, so vertical images weren't being properly fitted into their containers. Minimal repro for that issue: https://github.com/zaknesler/gpui-object-fit So with this change, you can set `.aspect_square()` and the object fit will behave as you'd expect: <img width="1237" height="986" alt="image" src="https://github.com/user-attachments/assets/5b1045a8-bd71-4b77-8bbd-c3b12112bcb0" /> --- Release Notes: - gpui: Fix image element's aspect ratio overriding existing value |
||
|
|
08827f9208
|
Add starts_open setting to terminal panel (#54373)
Some checks are pending
Congratsbot / check-author (push) Waiting to run
Congratsbot / congrats (push) Blocked by required conditions
deploy_nightly_docs / deploy_docs (push) Waiting to run
run_tests / orchestrate (push) Waiting to run
run_tests / check_style (push) Waiting to run
run_tests / clippy_windows (push) Blocked by required conditions
run_tests / clippy_linux (push) Blocked by required conditions
run_tests / clippy_mac (push) Blocked by required conditions
run_tests / clippy_mac_x86_64 (push) Blocked by required conditions
run_tests / run_tests_windows (push) Blocked by required conditions
run_tests / run_tests_linux (push) Blocked by required conditions
run_tests / run_tests_mac (push) Blocked by required conditions
run_tests / miri_scheduler (push) Blocked by required conditions
run_tests / doctests (push) Blocked by required conditions
run_tests / check_workspace_binaries (push) Blocked by required conditions
run_tests / build_visual_tests_binary (push) Blocked by required conditions
run_tests / check_wasm (push) Blocked by required conditions
run_tests / check_dependencies (push) Blocked by required conditions
run_tests / check_docs (push) Blocked by required conditions
run_tests / check_licenses (push) Blocked by required conditions
run_tests / check_scripts (push) Blocked by required conditions
run_tests / check_postgres_and_protobuf_migrations (push) Blocked by required conditions
run_tests / extension_tests (push) Blocked by required conditions
run_tests / tests_pass (push) Blocked by required conditions
## Summary - Add `terminal.starts_open` setting so the terminal panel can open automatically in new workspaces, like project and git panels already can - Expose the setting through terminal settings docs, default settings, Settings Editor metadata, and the terminal panel implementation - I also added a matching settings page item for the existing `git_panel.start_open` setting 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 behaviour - I decided not to add tests as the behaviour seems covered by the existing settings tests, and similar areas don't seem to have their own explicit tests. - [x] Performance impact has been considered and is acceptable Related to #51542 (issue mentions possibly adding for all panels, closed with implementation for `git_panel`) Release Notes: - Added `terminal.starts_open` to control whether the terminal panel opens automatically in new workspaces |