Commit Graph

232 Commits

Author SHA1 Message Date
Harry Albert
6a3da8b95a [APP-4359] Fix remote-control chip text weight (#10172)
## Description
Fixes the remote-control toolbar chip text weight so it matches the
normal-weight agent footer display chips while preserving the shared
chip fill, border, and text color styling.

## Screenshots / Videos

<img width="414" height="66" alt="image"
src="https://github.com/user-attachments/assets/8ad5d08b-02e6-4137-9e0e-6dacd19e0a6d"
/>

## Agent Mode
- [x] Warp Agent Mode - This PR was created via Warp's AI Agent Mode

Co-authored-by: Oz <oz-agent@warp.dev>
2026-05-05 17:35:05 -04:00
Yunfan Yang
b9e2194096 Fix editor panic from overlapping V4A diff deltas (WARP-CLIENT-DEV-NYY) (#10186)
## Problem

Sentry issue `WARP-CLIENT-DEV-NYY`: `panic: Invalid edit range
4042..3982` in `Buffer::edit`.

When the AI agent produces a multi-hunk V4A diff where one hunk's
matched range subsumes another's (e.g. a large deletion whose context
window overlaps a nearby single-line edit), `fuzzy_match_v4a_diffs`
produces `DiffDelta`s with overlapping `replacement_line_range` values.
When `CodeEditorModel::apply_diffs` later converts these to char offsets
and feeds them to `insert_at_offsets`, the editor's `Buffer::edit`
panics on the invalid range.

Confirmed via MAA conversation `d71bf84b` (request `b621adb3`): a
17-hunk V4A diff against `mod.rs` produced overlapping deltas (lines
46..71 subsuming 64..65).

## Fix

**Diff layer** (`crates/ai/src/diff_validation/mod.rs`):
- Added `deduplicate_overlapping_deltas()` — after matching all hunks,
sort deltas by start line and drop any delta whose range overlaps with a
preceding one.

**Editor safeguard** (`crates/editor/src/content/core.rs`):
- In `apply_core_edit_actions()`, skip any action whose anchor-resolved
range has `start > end` instead of panicking. Returns
`EditResult::default()` if all actions are skipped.

## Tests

- `test_v4a_maa_crash_d71bf84b_no_overlapping_deltas` — uses the exact
V4A hunks from the crash to verify the subsumed delta is dropped (1
delta survives, not 2).
- `test_insert_at_offsets_overlapping_ranges_skipped` — passes inverted
char-offset range (`4042..3982`) to `insert_at_offsets` and verifies the
buffer is unchanged (edit gracefully skipped).

Fixes WARP-CLIENT-DEV-NYY
2026-05-05 17:34:15 -04:00
Yunfan Yang
a792340801 Fix proper sentry initialization (#10116)
## Description
Tech spec here:
70a0bed2f3/specs/daemon-sentry-initialization/TECH.md

## Testing
Tested locally and confirmed sentry event was produced:
https://warpdotdev.sentry.io/issues/7459771029/?project=5660375&query=is%3Aunresolved&referrer=issue-stream
2026-05-05 17:24:03 -04:00
Brad Reynolds
1d1c06db0f Fix file picker truncating paths within available width (#9885)
The file picker capped combined filename + path length at 55 characters,
leaving significant horizontal space unused in wider popovers. Drops
that cap for the command palette file picker and switches the path text
to render a leading `…` (instead of a fade) when overflow does happen.

Also fixes a latent paint bug in `Start + Ellipsis` text clipping: the
ellipsis-reservation shifted glyphs leftward without compensating their
origin, so the leftmost visible glyph overlapped the ellipsis at the
same x. Adds regression-protection unit tests for the start-clipping
paint path.

Fixes warpdotdev/warp#8709

## Description
<!-- Please remember to add your design buddy onto the PR for review, if
it contains any UI changes! -->
What is a design buddy?

## Linked Issue
<!--
Link the GitHub issue this PR addresses. Before opening this PR, please
confirm:
-->
- [ ] The linked issue is labeled `ready-to-spec` or
`ready-to-implement`.
- [X] Where appropriate, screenshots or a short video of the
implementation are included below (especially for user-visible or UI
changes).

## Screenshots / Videos
<img width="1774" height="1326" alt="Screenshot_redacted_2"
src="https://github.com/user-attachments/assets/596bb770-d64f-443c-9da9-30e4fe0bf727"
/>

## Testing
<!--
How did you test this change? What automated tests did you add? If you
didn't add any new tests, what's your justification for not adding any?
-->
Look at the PR.

## Agent Mode
- [ ] Warp Agent Mode - This PR was created via Warp's AI Agent Mode

Used claude code. 

<!--
## Changelog Entries for Stable

The entries below will be used when constructing a soft-copy of the
stable release changelog. Leave blank or remove the lines if no entry in
the stable changelog is needed. Entries should be on the same line,
without the `{{` `}}` brackets. You can use multiple lines, even of the
same type. The valid suffixes are:

* NEW-FEATURE: for new, relatively sizable features. Features listed
here will likely have docs / social media posts / marketing launches
associated with them, so use sparingly.
* IMPROVEMENT: for new functionality of existing features.
* BUG-FIX: for fixes related to known bugs or regressions.
* IMAGE: the image specified by the URL (hosted on GCP) will be added to
Dev & Preview releases. For Stable releases, see the pinned doc in the
#release Slack channel.
* OZ: Oz-related updates. Use `CHANGELOG-OZ`. At most 4 Oz updates are
shown in-app per release.

CHANGELOG-NEW-FEATURE: {{text goes here...}}
CHANGELOG-IMPROVEMENT: {{text goes here...}}
CHANGELOG-BUG-FIX: {{text goes here...}}
CHANGELOG-BUG-FIX: {{more text goes here...}}
CHANGELOG-IMAGE: {{GCP-hosted URL goes here...}}
CHANGELOG-OZ: {{text goes here...}}
-->
2026-05-05 17:10:15 -04:00
Lili Wilson
f95364ac21 Add harness availability model to the client. (#10135)
## Description
<!-- Please remember to add your design buddy onto the PR for review, if
it contains any UI changes! -->
This PR introduces a new `HarnessAvailabilityModel`, following
server-side changes to expose the list of available harnesses for use
with Oz in the `availableHarnesses` section of the `User` GraphQL query.

We model this new model (ha) after the existing models (ha) model, which
stores the list of available LLMs (`LLMPreferences`) that we get from
the server.

We also update the cloud mode UI, management view filter, and CLI so
that we check this model to determine the list of harnesses to display
(rather than hardcoding them), as well as to show enabled/disabled state
when triggering something from cloud mode.

## Screenshots / Videos
<!-- Attach screenshots or a short video demonstrating the change, where
appropriate. Remove this section if it is not relevant to your PR. -->
Example of disabled state for harnesses in cloud mode:
<img width="878" height="419" alt="image"
src="https://github.com/user-attachments/assets/a2b62e18-2a65-42aa-8b5b-c45b58d22855"
/>

No harnesses available state:
https://www.loom.com/share/65d9ed8f52be4a5ba4b1e320fdddff0b


## Testing
<!--
How did you test this change? What automated tests did you add? If you
didn't add any new tests, what's your justification for not adding any?
-->
Tested locally, ensuring that:
- Disabled harnesses show up correctly
- Non-feature-flag-enabled harnesses don't show up
- Different UI surfaces all reflect the list from the server

## Agent Mode
- [x] Warp Agent Mode - This PR was created via Warp's AI Agent Mode
2026-05-05 14:06:11 -07:00
Jason Keung
8be721d465 [REMOTE-1370] Phase 2a: taskGitCredentials schema, query, and AIClient (#10152)
## Description

First half of Phase 2 of REMOTE-1370. Adds the GraphQL plumbing for
\`taskGitCredentials\` so the driver can call it in the next PR.

**Changes:**
- Add \`taskGitCredentials\` types to \`schema.graphql\` and add to the
\`clientQueries\` allowlist in \`client-schema.ts\`
- New \`task_git_credentials.rs\` cynic query file, following the
\`task_secrets\` pattern
- Add \`GitCredential\` struct and \`get_task_git_credentials\` to
\`AIClient\` trait + \`ServerApi\` implementation

No behaviour change — nothing calls \`get_task_git_credentials\` yet;
that's in the follow-on PR.

**schema.graphql approach:** \`yarn generate -p staging\` was run to
verify the new types, but the output was not committed wholesale because
the current staging server also has other unrelated schema changes
(removed \`freeAvailableModels\`, new \`VOYAGE_4_512\` EmbeddingConfig
variant, etc.) that are out of scope and would break existing Rust
bindings. Instead, only the \`taskGitCredentials\` types were
cherry-picked — the field names, nullability, and doc comments were
verified to be identical to what the server generates.

Warp-server staging is deployed with the new query.

Followed by: #10153.

## Linked Issue

Linear: REMOTE-1370

## Testing

- \`cargo build -p warp\` clean
- \`cargo fmt\` and \`cargo clippy\` clean

## Agent Mode
- [x] Warp Agent Mode - This PR was created via Warp's AI Agent Mode

Conversation:
https://staging.warp.dev/conversation/e16dc3e2-8e2f-4499-8c9b-59b200e17c50

Co-Authored-By: Oz <oz-agent@warp.dev>

---------

Co-authored-by: Oz <oz-agent@warp.dev>
Co-authored-by: oz-for-oss[bot] <277970191+oz-for-oss[bot]@users.noreply.github.com>
2026-05-05 17:00:15 -04:00
Yunfan Yang
bd7202f308 Fix file tree refresh logic (#10184)
## Description

Fix local file tree blinking and reshuffling after connecting to an SSH
session.

**Root cause:** When a remote SSH session is active, the remote server
streams frequent
`FileTreeEntryUpdated { Remote }` events for every filesystem change on
the remote host.
The previous code called `rebuild_flattened_items()` on each such event,
which re-flattened
*all* roots (including local ones), causing the local file tree to
re-render on every remote
filesystem change — visible as constant blinking/reshuffling.

**Fix:** Add an optional `target_root` parameter to the core
`rebuild_flatten_items_impl`
method. When `Some`, only the specified root is re-flattened; all other
roots keep their
existing items untouched. Three thin wrappers provide the public API:

- `rebuild_flattened_items_for_root(path)` — single-root rebuild
- `rebuild_flattened_items()` — full rebuild (all roots)
- `rebuild_flattened_items_without(path)` — full rebuild excluding a
deleted path

Updated the following event handlers to use per-root rebuilds instead of
full rebuilds:

- `FileTreeEntryUpdated { Local }` — rebuilds only the affected local
root(s)
- `FileTreeEntryUpdated { Remote }` — rebuilds only the affected remote
root
- `RepositoryRemoved { Remote }` — no-op rebuild (root already removed),
avoids touching remaining roots

Skipping unchanged roots is safe because the rebuild is fully
deterministic given the same
`entry`, `expanded_folders`, and `item_states` — re-flattening an
unmodified root produces
an identical items list and selection index.

## Testing
- `cargo check -p warp --lib` passes cleanly
- Verified the three updated event handlers and the rename flow
(editing.rs) all route through `rebuild_flatten_items_impl` correctly

## Agent Mode
- [x] Warp Agent Mode - This PR was created via Warp's AI Agent Mode

<!--
CHANGELOG-BUG-FIX: Fixed local file tree blinking/reshuffling when
connected to an SSH session
-->
2026-05-05 16:54:20 -04:00
Harry Albert
74bdbd1d08 implement basic local cloud handoff UI (#9455)
## Description
<!-- Please remember to add your design buddy onto the PR for review, if
it contains any UI changes! -->

This PR implements the UI for the local -> cloud handoff flow in the
client. This is done levaraging the workspace-discovery and snapshotting
functionality added in the PRs below this one. On chip-click, we
snapshot the conversation's touched files and repos, and create a new
cloud mode pane to kick off a run. When the user submits a query, we
kick that run off.

Don't over-index on the UI too much — in a follow-up PR I'll add the
conversation into the cloud mode pane and also re-use the full cloud
mode setup v2 UI.

The associated server PR for this client PR is here:
https://github.com/warpdotdev/warp-server/pull/10777

## Testing
<!--
How did you test this change? What automated tests did you add? If you
didn't add any new tests, what's your justification for not adding any?

If you're not sure whether you should add a test, check our testing
policy:
https://www.notion.so/warpdev/How-We-Code-at-Warp-257fe43d556e4b3c8dfd42f70004cc72#1f97825450504baa9c5fd87a737daa09
-->

demo: https://www.loom.com/share/a6caa2c974e34b49b2b038a8019c062c

## Agent Mode
- [x] Warp Agent Mode - This PR was created via Warp's AI Agent Mode
2026-05-05 16:32:28 -04:00
Safia Abdalla
ce3296aa35 Fix feature flag cleanup API key (#10154)
Co-authored-by: Oz <oz-agent@warp.dev>
2026-05-05 12:55:50 -07:00
Harry Albert
34d311df65 use correct cloud agent icons for 3p conversation transcripts (#10148)
## Description
<!-- Please remember to add your design buddy onto the PR for review, if
it contains any UI changes! -->

We weren't properly checking/respecting 3p agent harness information for
cloud conversation transcripts when deciding which icon to display in
the conversation list, vertical tabs, and pane header.

## Screenshots / Videos
<!-- Attach screenshots or a short video demonstrating the change, where
appropriate. Remove this section if it is not relevant to your PR. -->


![image.png](https://app.graphite.com/user-attachments/assets/96a893c8-bee1-46f7-b2cf-643276e9c763.png)

## Agent Mode
- [x] Warp Agent Mode - This PR was created via Warp's AI Agent Mode
2026-05-05 15:32:43 -04:00
Matthew Albright
8e837a0ffd [QUALITY-569] Stage 2 Client: OrchestrationConfig on Plan Card + Auto-Launch + Disabled Card (#9927)
## Description

Adds the client-side orchestration config UI on plan cards, auto-launch
for matching `run_agents` tool calls, and per-conversation config
scoping. This builds on top of the Stage 1 confirmation card and shared
controls.

**Demo:** https://www.loom.com/share/18e96159e91641e3b6a78924ea1b9f76

### What

**Plan card config block** — An inline config block on plan cards with:
- Approval toggle (pill switch) controlling whether orchestration is
enabled
- "View details" expand/collapse for Cloud/Local picker, harness, host,
environment, and model dropdowns
- Vertical full-width layout matching the Figma mock
- Dirty-sync transport: config changes piggybacked onto the next
outbound request as `OrchestrationConfigUpdate`

**Auto-launch** — When the user approves a config and the agent sends a
matching `run_agents` tool call, the confirmation card is skipped and
agents spawn immediately. Deferred to stream completion via
`ActionBlockedOnUserConfirmation` to handle streaming timing.

**Per-conversation scoping** — Orchestration config moved from the
`AIDocumentModel` singleton to per-conversation `AIConversation` storage
(following the `todo_lists` pattern), preventing config from one
conversation leaking into another.

**Reactive config hydration** — `OrchestrationConfigSnapshot` messages
are processed inline in `apply_client_action()` as they arrive, rather
than scanning all messages on every streaming update. Scanning is only
used for conversation restore.

### Architecture

- `crates/ai/src/agent/orchestration_config.rs` — Rust-native types,
`matches_active_config()` with 15 unit tests
- `app/src/ai/blocklist/inline_action/orchestration_controls.rs` —
Shared controls (trait-based generic pickers) used by both the
confirmation card editor and the plan card config block
- `app/src/ai/document/orchestration_config_block.rs` — Plan card config
block view
- Config block and document view subscribe directly to
`BlocklistAIHistoryEvent::OrchestrationConfigUpdated` (no passthrough
relay)

## Testing

- 40 unit tests for `run_agents_card_view` (21 new covering
auto-launch/auto-deny decision logic)
- 15 unit tests for `orchestration_config` (matching, proto round-trips)
- 37 orchestration integration tests passing
- Manual validation against the [validation
checklist](https://staging.warp.dev/conversation/028e6a5d-0a9f-4e4d-84a6-b03f80a77331)
covering plan card UI, dirty sync, per-conversation scoping,
auto-launch, confirmation card, and edge cases

## Server API dependencies
- Relies on `OrchestrationConfigSnapshot` and
`OrchestrationConfigUpdate` proto messages (already deployed)

## Agent Mode
- [x] Warp Agent Mode - This PR was created via Warp's AI Agent Mode


[Conversation](https://staging.warp.dev/conversation/028e6a5d-0a9f-4e4d-84a6-b03f80a77331)
| [Plan](https://staging.warp.dev/drive/notebook/xxRB6SLGbQc23j2NGObZsq)

Co-Authored-By: Oz <oz-agent@warp.dev>

---------

Co-authored-by: Oz <oz-agent@warp.dev>
2026-05-05 15:31:55 -04:00
Yunfan Yang
ce9f2c507d Enrich SSH control master with remote server enablement (#10163)
## Description
Fixes APP-4385

We already have the SSH warpification open failed event. This enrich it
so we could track whether user has the remote server enabled when
running into this error
2026-05-05 15:15:53 -04:00
Roland Huang
b7dd0ef828 Fix terminal text selection not auto-scrolling when dragging beyond bounds (#9448)
## Description

Fix terminal text selection no longer auto-scrolling downward when drag
exits the scroll container (block list).

**Root cause:** `LeftMouseDragged` events were subject to z-index
coverage checks in `DispatchedEvent::at_z_index()`. When the user
dragged downward past the block list, the cursor entered the area of
higher-z-index UI elements (input/footer), causing `is_covered()` to
return true and the drag events to be filtered out. This prevented the
block list element from receiving drag events, so its auto-scroll logic
(`mouse_dragged()`) never executed.

**Fix:** Bypass z-index filtering for `LeftMouseDragged` events in the
blocklist element specifically when selecting.

Fixes APP-3952

## Testing

Manual testing:
https://www.loom.com/share/0e81bc86229a4e0085b52253ca846346

## Agent Mode
- [x] Warp Agent Mode - This PR was created via Warp's AI Agent Mode

## Changelog Entries for Stable

CHANGELOG-BUG-FIX: Fixed terminal text selection not auto-scrolling when
dragging beyond bounds

---------

Co-authored-by: Oz <oz-agent@warp.dev>
Co-authored-by: oz-for-oss[bot] <277970191+oz-for-oss[bot]@users.noreply.github.com>
2026-05-05 11:27:23 -07:00
Pei Li
3417e7d23a Update STAKEHOLDERS: add Andy to bootstrap, add command-signatures-v2 (#10161) 2026-05-05 14:09:40 -04:00
Petra Donka
814245a93d docs: restore Slack #oss-contributors references and add Oz credits sentence (#10138)
## Description
Restores the Slack `#oss-contributors` references that were
inadvertently dropped by #9580, and adds the Oz credits call-to-action
as a plain sentence (rather than a second TIP block).

## Linked Issue
N/A — fixes a regression from #9580.

## Testing
Visual inspection of the rendered README.

## Agent Mode
- [x] Warp Agent Mode - This PR was created via Warp's AI Agent Mode

Co-Authored-By: Oz <oz-agent@warp.dev>

Co-authored-by: Oz <oz-agent@warp.dev>
2026-05-05 20:00:35 +02:00
Sagar Dagdu
10b2540c1d fix(bootstrap): detect Xcode installs with non-default app names on macOS (#10130) 2026-05-05 10:23:48 -07:00
Harry Albert
3d7e074e65 [REMOTE-1486] Add cloud handoff snapshot upload (#10102)
## Description
<!-- Please remember to add your design buddy onto the PR for review, if
it contains any UI changes! -->

This is the second step to get local->client snapshotting working.

On the server, we have an endpoint to to prepare a snapshot (see [server
PR here](https://github.com/warpdotdev/warp-server/pull/10777),
providing pre-signed GCS endpoints to upload snapshot files. The same
server PR also adds fields on the `SpawnAgentRequest` to provide the
conversation id that we're forking from and the prep token that
identifies where we uploaded our snapshot files.

This PR adds the apparatus for us to use those endpoints, which we will
then use in the PR above this one to correctly snapshot and create our
local->cloud handoff run.

## Agent Mode
- [x] Warp Agent Mode - This PR was created via Warp's AI Agent Mode

Co-authored-by: Oz <oz-agent@warp.dev>
2026-05-05 13:22:37 -04:00
Advait Maybhate
dcc4cbac9e Orchestration pill bar updates: same-pane pills, 3-dot menu, hover card, breadcrumbs (#9680) 2026-05-05 10:20:27 -07:00
Safia Abdalla
716603a08f docs: replace warp-external with warp in local agent skills (#9990)
Co-authored-by: Oz <oz-agent@warp.dev>
2026-05-05 10:11:57 -07:00
Nihal Kumar
13b756f6d0 Fix: close CLI agent rich input with ctrl-g from editor (#10030) 2026-05-05 09:53:55 -07:00
Sebastian Szewczyk
957783b6f0 Drop unneeded fetch-depth: 0 from two workflows (#9489)
## Summary

Two workflow checkouts request the full repo history via `fetch-depth:
0` but never use it. Falling back to the default shallow clone speeds
them up at no behavioral cost.

## Analysis

I scanned every `fetch-depth: 0` site in `.github/`:

| Site | Why set | Needed? |
|---|---|---|
| `check_approvals.yml:19` | `git merge-base` + `git diff` between
base/head | **Yes** — merge-base across long-lived branches needs deep
history. Already mitigated with `filter: blob:none`. |
| `create_release.yml:1623` | Feeds `warpdotdev/generate-changelog` |
**Yes** — changelog walks tag history. |
| `feature_flag_cleanup.yml:30` (analyze) | Agent prompt instructs `git
blame` of `Cargo.toml` | **Yes** — blame needs full history. |
| `feature_flag_cleanup.yml:161` (cleanup) | None — agent prompt only
says "clean up references" / "remove from enum" / "modify code" | **No —
removed** |
| `feature_flag_cleanup.yml:218` (create_pr) | Applies a patch then runs
`peter-evans/create-pull-request` | Probably no, but kept conservative —
`peter-evans` only requires deep history when it must include prior
local commits. Worth a follow-up. |
| `delete_release.yml:95` | Job only does `git push
HEAD:refs/heads/<new>` then `git push --delete <old>` | **No — removed**
|

## Changes

- `feature_flag_cleanup.yml` — removed `fetch-depth: 0` from the cleanup
job. The Oz agent edits source files at HEAD; no git history operations
occur in the prompt.
- `delete_release.yml` — removed `fetch-depth: 0` from the delete job.
Renaming a branch is two server-side pushes; only the tip commit is
needed.

## Test plan

- [ ] CI passes on this PR.
- [ ] Next nightly run of `feature_flag_cleanup.yml` succeeds end-to-end
(analyze → cleanup → create_pr).
- [ ] Next manual `delete_release.yml` invocation succeeds (rename +
delete).
2026-05-05 12:42:46 -04:00
Harry Albert
71d61c7fdb Add touched-workspace discovery for cloud handoff (#10101)
## Description
<!-- Please remember to add your design buddy onto the PR for review, if
it contains any UI changes! -->

This PR is the first step in enabling local -> cloud handoff.

In order to do local->cloud handoff, we need to know which files and
repos to snapshot. Unlike with the cloud, we can't just check every repo
in the cloud agent's workspace because the agent isn't running in a
prepared VM in the local context.

Instead, we look back at the agent's most recent n tool calls (started
with 500 but we could easily change this) and extract out the file and
repo paths that the agent has touched from these tool calls (deduping
for files that are tracked in a repo). We specifically only check file
editing tool calls, as we don't want to snapshot a file that was just
read.

This is best-effort and is not guaranteed to capture everything we need,
but we can easily add more and better capturing as we need it.

## Agent Mode
- [x] Warp Agent Mode - This PR was created via Warp's AI Agent Mode

---------

Co-authored-by: Oz <oz-agent@warp.dev>
2026-05-05 12:27:33 -04:00
Lili Wilson
d09a90eafc Add editable keybinding for toggling the conversation details panel. (#9837)
## Description
<!-- Please remember to add your design buddy onto the PR for review, if
it contains any UI changes! -->
WISOTT. Follows precedent for defining keys in the keymap context and
uses existing function for determining whether this keybinding should be
active.

Defaults to unset - I wasn't sure of a good keybind for this and don't
think it warrants a default.

## Testing
<!--
How did you test this change? What automated tests did you add? If you
didn't add any new tests, what's your justification for not adding any?
-->
Ran locally, set a keybinding (cmd + alt + I), and then observed toggle
behavior.

## Agent Mode
- [x] Warp Agent Mode - This PR was created via Warp's AI Agent Mode


## Changelog Entries for Stable
<!--
The entries below will be used when constructing a soft-copy of the
stable release changelog. Leave blank or remove the lines if no entry in
the stable changelog is needed. Entries should be on the same line,
without the `{{` `}}` brackets. You can use multiple lines, even of the
same type. The valid suffixes are:

* NEW-FEATURE: for new, relatively sizable features. Features listed
here will likely have docs / social media posts / marketing launches
associated with them, so use sparingly.
* IMPROVEMENT: for new functionality of existing features.
* BUG-FIX: for fixes related to known bugs or regressions.
* IMAGE: the image specified by the URL (hosted on GCP) will be added to
Dev & Preview releases. For Stable releases, see the pinned doc in the
#release Slack channel.
* OZ: Oz-related updates. Use `CHANGELOG-OZ`. At most 4 Oz updates are
shown in-app per release.

CHANGELOG-NEW-FEATURE: {{text goes here...}}
CHANGELOG-IMPROVEMENT: {{text goes here...}}
CHANGELOG-BUG-FIX: {{text goes here...}}
CHANGELOG-BUG-FIX: {{more text goes here...}}
CHANGELOG-IMAGE: {{GCP-hosted URL goes here...}}
CHANGELOG-OZ: {{text goes here...}}
-->
CHANGELOG-IMPROVEMENT: The conversation details panelcan now be opened
and closed with a configurable keyboard shortcut.
v0.2026.05.05.08.57.dev_00
2026-05-04 23:53:25 -07:00
Andy
eed7e64a70 Input::maybe_backspace_ai_icon no longer resets convesation on backspace in the agent view (#10114) 2026-05-04 23:23:36 -07:00
Zach Bai
a171b17025 Use queued query UI instead of pending user query (#10113)
## Description
[Demo](https://www.loom.com/share/943140c634704c67b878b1815639aaaf)

1) Use the queued query UI for cloud mode initial query and follow-ups. Clean up old optimistic pending user query rich content machinery.
2) Properly hook setup commands for follow-up execution environment setup into the requested command-like setup command UI.
2026-05-05 01:40:51 -04:00
Andy
e7ff8afdf8 remove file path on path conversion error messages (#9511) 2026-05-04 18:38:57 -07:00
Moira Huang
5d8507e405 [Fix] Don't get a freshly cloned repo stuck in a loading state in project explorer (#9998)
## Description
Fixes https://github.com/warpdotdev/warp/issues/9846 by making sure we
don't overwrite with an empty entry if we have a lazy loaded index.

## Linked Issue
https://github.com/warpdotdev/warp/issues/9846
- [x] The linked issue is labeled `ready-to-spec` or
`ready-to-implement`.
- [x] Where appropriate, screenshots or a short video of the
implementation are included below (especially for user-visible or UI
changes).

## Screenshots / Videos
https://www.loom.com/share/0213603002f84250b6366d99cb938a5c

## Testing
Locally tested:
https://www.loom.com/share/0213603002f84250b6366d99cb938a5c

## Agent Mode
- [x] Warp Agent Mode - This PR was created via Warp's AI Agent Mode

<!--
## Changelog Entries for Stable

The entries below will be used when constructing a soft-copy of the
stable release changelog. Leave blank or remove the lines if no entry in
the stable changelog is needed. Entries should be on the same line,
without the `{{` `}}` brackets. You can use multiple lines, even of the
same type. The valid suffixes are:

* NEW-FEATURE: for new, relatively sizable features. Features listed
here will likely have docs / social media posts / marketing launches
associated with them, so use sparingly.
* IMPROVEMENT: for new functionality of existing features.
* BUG-FIX: for fixes related to known bugs or regressions.
* IMAGE: the image specified by the URL (hosted on GCP) will be added to
Dev & Preview releases. For Stable releases, see the pinned doc in the
#release Slack channel.
* OZ: Oz-related updates. Use `CHANGELOG-OZ`. At most 4 Oz updates are
shown in-app per release.

CHANGELOG-NEW-FEATURE: {{text goes here...}}
CHANGELOG-IMPROVEMENT: {{text goes here...}}
CHANGELOG-BUG-FIX: {{text goes here...}}
CHANGELOG-BUG-FIX: {{more text goes here...}}
CHANGELOG-IMAGE: {{GCP-hosted URL goes here...}}
CHANGELOG-OZ: {{text goes here...}}
-->
2026-05-04 17:08:56 -07:00
Anshul Garg
a057a1094f Fix diff button when Show code review button toggle is off (#9600)
Closes #9196.

### Description

Two `show_code_review_button` gates were dropping panel-open requests on
the floor when the user had hidden the toolbar button:

**1. Data-path gate at `Workspace::setup_code_review_panel`
(`view.rs:7982`)**

```rust
if !*TabSettings::as_ref(ctx).show_code_review_button {
    return;
}
```

`update_right_panel_open_state` calls into this whenever the right panel
is being opened (chip click, `Shift+Cmd+=` keybinding, etc.), so the
early return silently swallowed every explicit user action.

**2. Render-path gate at `Workspace::render_config_panel` and
`render_config_panel_maximized` (`view.rs:18981` / `19040`)**

```rust
if !item.is_available(app) || !item.is_panel() { return None; }
…
if !HeaderToolbarItemKind::CodeReview.is_available(app) { return None; }
```

`HeaderToolbarItemKind::is_available` for `CodeReview` returns
`*TabSettings::as_ref(app).show_code_review_button.value()`
(`header_toolbar_item.rs:89`). So even after fix #1 set
`pane_group.right_panel_open = true` and `setup_code_review_panel` ran,
the next render frame saw `is_available() == false` and returned `None`
— the `right_panel_view` was never added to the layout.

This second gate is what @moirahuang flagged when their local repro
still showed nothing happening after the first fix landed. The data was
correct; the panel was just never composed into the UI.

### Fix

1. **Drop the early return at `setup_code_review_panel`.** The setting
is meant to gate only the toolbar button's visibility (already enforced
correctly by `header_toolbar_item.rs::is_available`, which feeds
`render_header_toolbar_button` at `view.rs:17276`).
2. **Switch panel-render call sites from `is_available` →
`is_supported`.** `is_available`'s own doc-comment says it's
specifically *"Whether this item should be shown in the **toolbar** —
checks both `is_supported` and user show/hide preferences."* Using it to
gate panel rendering conflates two unrelated concerns. Panel rendering
should only care about whether the feature is compiled in
(`is_supported`), not whether the user has hidden the toolbar button.

For `CodeReview`, `is_supported` is `cfg!(feature = "local_fs")`. For
the other variants in the same match (`TabsPanel`, `ToolsPanel`),
`is_available` already equals `is_supported` (default `_ => true` arm in
the inner match), so behaviour is unchanged. `AgentManagement` and
`NotificationsMailbox` return `None` unconditionally inside
`render_config_panel`, so the change is moot for them too.

### Caller audit for `setup_code_review_panel`

5 call sites in `view.rs`:

1. `view.rs:3681` — `TransferredTab` flow, only runs when the source tab
already had `right_panel_open == true`.
2. `view.rs:8136` — `update_right_panel_open_state` with `should_open ==
true`. **The diff-button path** that #9196 is about.
3. `view.rs:13372` — `PaneFocused` event, gated on `right_panel_open`
already true.
4. `view.rs:13490` — `RepoChanged` event, gated on `right_panel_open`
already true.
5. `view.rs:14458` — session env update, gated on `right_panel_open`
already true.

None of these need the `show_code_review_button` gate — they're either
explicit user actions or gated on `right_panel_open` already being open.
The toolbar button toggle continues to do its job at
`render_header_toolbar_button` independently.

### Testing

Reproduced @moirahuang's test locally on macOS 26.4.1 (Apple Silicon)
against `WarpOss.app` built from this branch:

1. Settings → "Show code review button" → **OFF**
2. `echo "x" >> README.md` inside a git repo
3. Click the diff stats chip on the prompt (`+1 -0`)

**Result:** Code review panel opens on the right showing the diff, while
the toolbar button stays hidden — exactly the expected behaviour from
issue #9196. Inverse case (toggle ON) also verified: toolbar button
visible, panel still works the same.

- `cargo fmt -p warp -- --check` passes.
- `cargo nextest` skipped locally — Metal toolchain unavailable on my
machine, mirroring #9277. CI will exercise the change.

### Server API

No server changes.

### Agent Mode

Not applicable.

### Changelog Entries

`CHANGELOG-BUG-FIX`: The diff button on the terminal prompt now opens
the code review panel even when the toolbar's "Show code review button"
toggle is disabled (regression from a recent release).

Co-authored-by: anshul-garg27 <13553550+anshul-garg27@users.noreply.github.com>
2026-05-04 16:58:12 -07:00
Maggie Shan
16578b121f Update remote server logs (#10098) 2026-05-04 19:16:34 -04:00
Roland Huang
564ea2ae58 APP-3595: Show conversation details panel for local conversations (#9493)
## Description

Closes [APP-3595](https://linear.app/warpdotdev/issue/APP-3595).

The conversation details side panel was previously only visible for
cloud Oz runs (a `TerminalView` had to expose an `AmbientAgentTaskId`).
Local Warp Agent conversations had no way to surface the same metadata
even though `ConversationDetailsPanel` and
`ConversationDetailsData::from_conversation` already supported that case
on web.

This PR makes the pane-header info button and the side panel available
for **any active AI conversation in a `TerminalView`** (cloud Oz runs
continue to work unchanged). Task-only sections (Run ID, Environment
details, setup commands, error message, inference/compute credit split)
stay hidden when there's no backing `AmbientAgentTask`; everything else
(status, working directory, conversation ID when persisted, run time,
credits, source prompt, artifacts, harness, creator) renders from the
active `AIConversation`.

### Behavior summary

- **Cloud Oz runs**: unchanged. Info button in pane header, auto-open on
`SessionReady`, all existing fields rendered.
- **Cloud non-Oz runs (Claude / Gemini)**: unchanged. Task-mode panel as
today.
- **Local AI conversations (native)**: a new info-button toggle is
visible whenever there's an active conversation and AI is enabled.
Clicking opens the panel populated from the active `AIConversation`.
Task-only sections are hidden because the data isn't available.
- The panel does **not** auto-open for local conversations &mdash; it
only opens when the user clicks the toggle. Auto-open behavior on
`SessionReady` is still scoped to cloud mode.
- The panel refreshes on
`BlocklistAIControllerEvent::FinishedReceivingOutput` for any active AI
conversation (previously: only when the view was an ambient agent), and
on relevant `BlocklistAIHistoryEvent` updates so
streaming/status/artifact changes flow through while the panel is open.

### Key code changes

- `app/src/ai/conversation_details_panel.rs`: lifted the
`#[cfg(target_family = "wasm")]` gates on `from_conversation`,
`CreatorInfo::from_uid_fallback`, and the `UserUid` / `UserProfiles`
imports so the helper compiles on native.
- `app/src/terminal/view.rs`: added
`TerminalView::has_active_local_ai_conversation` and
`TerminalView::can_show_conversation_details_ui`, used the broader
predicate in the render gate, and broadened the refresh hooks.
- `app/src/terminal/view/ambient_agent/view_impl.rs`: generalized
`fetch_and_update_cloud_mode_details_panel` to fall back to the active
`AIConversation` when there's no task ID.
- `app/src/terminal/view/pane_impl.rs`: lifted the toggle button
rendering out from under the `FeatureFlag::CloudMode` arm in
`render_header_actions`.
- `app/src/ai/conversation_details_panel_tests.rs`: added a unit test
asserting that `from_conversation` populates the local-conversation
fields the details panel renders (working directory, title, source
prompt, `LocalConversation` credits, `Conversation` mode).

## Testing

Manually tested:
https://www.loom.com/share/1ca886583b3340ea94842ce7202a3c57

- Added `test_from_conversation_populates_local_conversation_fields` in
`app/src/ai/conversation_details_panel_tests.rs`. All 5 tests in the
`conversation_details_panel` module pass.
- `cargo check -p warp --lib` succeeds.
- `cargo clippy -p warp --lib --tests --no-deps -- -D warnings`
succeeds.
- `cargo fmt -p warp` applied.
- Manual smoke test (recommended for reviewers): start a local Warp
Agent conversation in a terminal pane and verify the info button appears
in the pane header, opens the side panel populated with the
conversation's title, status, initial query, run time, credits, working
directory, and conversation ID (when persisted). Compare to a cloud Oz
run for parity.

## Server API dependencies

This change is client-only and does not depend on any server API
changes.

## Agent Mode

- [x] Warp Agent Mode - This PR was created via Warp's AI Agent Mode

## Changelog Entries for Stable

CHANGELOG-IMPROVEMENT: Conversation details side panel is now available
for local Warp Agent conversations, not just cloud Oz runs. Click the
info button in the pane header to open it for any active AI
conversation.

_Conversation:
https://staging.warp.dev/conversation/c79b0062-c933-4c75-956d-b16f461656a9_
_Run:
https://oz.staging.warp.dev/runs/019ddaf6-a62a-7ef3-86f7-b80b8ac8b2c8_
_Plans_:
- _[APP-3595: Show conversation details panel for local
conversations](https://staging.warp.dev/drive/notebook/kId8vzGLitcHOj5IMwH4R8)_

_This PR was generated with [Oz](https://warp.dev/oz)._

---------

Co-authored-by: Oz <oz-agent@warp.dev>
2026-05-04 15:57:52 -07:00
Yunfan Yang
39ff0d25a6 Skip reconnect for unrecoverable transport disconnects (#10096)
## Description

We are seeing ~850 Sentry errors in 2 days
([WARP-CLIENT-BETA-STABLE-7JNH](https://warpdotdev.sentry.io/issues/7456268110/))
from doomed reconnect attempts after SSH disconnects caused by system
sleep / network loss.

When the Mac sleeps, the SSH TCP connection dies but the ControlMaster
process stays alive locally (no keepalives configured). The
`remote-server-proxy` reader task detects EOF and triggers reconnect,
but reconnecting through the same ControlMaster is futile since its TCP
connection is dead. Both attempts fail with "Response channel closed
before receiving a reply" and the errors get reported to Sentry.

**Root cause**: the reconnect flow had no way to distinguish a
recoverable disconnect (remote server process crashed, SSH connection
still alive) from an unrecoverable one (SSH connection itself is dead).

**Fix**: Add `is_reconnectable(exit_status)` to the `RemoteTransport`
trait so each transport can decide whether a reconnect is viable.
`SshTransport` returns `false` when the exit code is 255 (SSH
connection-level error) or the process was signal-killed, indicating the
ControlMaster connection is dead. `mark_session_disconnected` consults
the transport before entering the reconnect loop.

This is a required trait method (no default impl) so future transports
must explicitly consider reconnectability.

### Changes
- **`RemoteTransport` trait** (`transport.rs`): Added required
`is_reconnectable` method
- **`SshTransport`** (`ssh_transport.rs`): Implements `is_reconnectable`
— returns `false` for exit code 255 / signal kill
- **`RemoteServerManager`** (`manager.rs`): `mark_session_disconnected`
calls `transport.is_reconnectable()` before attempting reconnect;
extracted `finalize_disconnect` helper to deduplicate the
disconnect-and-emit pattern

## Linked Issue
- Sentry:
[WARP-CLIENT-BETA-STABLE-7JNH](https://warpdotdev.sentry.io/issues/7456268110/)

## Testing
- `cargo clippy` passes on both `remote_server` and `warp` crates
- All 48 `remote_server` tests pass

## Agent Mode
- [x] Warp Agent Mode - This PR was created via Warp's AI Agent Mode


[Conversation](https://staging.warp.dev/conversation/ead2a14e-5ddd-4fe6-9a04-5ce7f48ec84f)

<!--
CHANGELOG-BUG-FIX: Fixed unnecessary reconnect attempts for remote SSH
sessions after system sleep, reducing error noise
-->
2026-05-04 18:35:10 -04:00
Moira Huang
d19f72d6b1 [APP-3792] specs for remote codebase indexing (#9508)
## Description
Specs for remote codebase indexing based off of
https://docs.google.com/document/d/1G4sDjVwatYMQC-BHsR3OvtlX6De27HYel7H8SSJQyM8/edit?usp=sharing

## Testing
N/A spec only

## Agent Mode
- [x] Warp Agent Mode - This PR was created via Warp's AI Agent Mode

## Changelog Entries for Stable
<!--
The entries below will be used when constructing a soft-copy of the
stable release changelog. Leave blank or remove the lines if no entry in
the stable changelog is needed. Entries should be on the same line,
without the `{{` `}}` brackets. You can use multiple lines, even of the
same type. The valid suffixes are:

* NEW-FEATURE: for new, relatively sizable features. Features listed
here will likely have docs / social media posts / marketing launches
associated with them, so use sparingly.
* IMPROVEMENT: for new functionality of existing features.
* BUG-FIX: for fixes related to known bugs or regressions.
* IMAGE: the image specified by the URL (hosted on GCP) will be added to
Dev & Preview releases. For Stable releases, see the pinned doc in the
#release Slack channel.
* OZ: Oz-related updates. Use `CHANGELOG-OZ`. At most 4 Oz updates are
shown in-app per release.
-->

CHANGELOG-NEW-FEATURE: {{text goes here...}}
CHANGELOG-IMPROVEMENT: {{text goes here...}}
CHANGELOG-BUG-FIX: {{text goes here...}}
CHANGELOG-BUG-FIX: {{more text goes here...}}
CHANGELOG-IMAGE: {{GCP-hosted URL goes here...}}
CHANGELOG-OZ: {{text goes here...}}
2026-05-04 15:12:34 -07:00
Daniel Peng
3abc48b77b Select new default when a model is disabled (#10085)
We have some logic for selecting a new default model if the user's
current model is no longer available. However, this logic doesn't
account when a model is _disabled_, which is different from when a model
is _removed_.

This fixes our logic to account for model disablement.
2026-05-04 15:03:04 -07:00
Zach Bai
361c267a33 Implement full-frame clear for active block for CLI Agents. (#9877)
## Description
Fixes #9838 and fixes REMOTE-1423

Add a block-level flag for conditionally clearing output grid contents
in-place on ansi::ClearMode::All (`esc[2j`) rather than clearing by
'scrolling' + appending to block-level scrollback.

In a traditional terminal the sequence clears the entire screen - in
ghostty we see that frame-redrawing resizes for claude code, for
instance, clear the entire terminal display (not appending to
scrollback). This implements that behavior at a block-level for CLI
agent TUIs that Warp is 'aware' of.

Preserves existing behavior for other cases to limit blast radius of the
change - I think there are cases where the current block-level
clear-by-scrolling behavior might be preferable/intended

CHANGELOG-BUG-FIX: Fixes issue with repeated TUI redraws for CLI agents
on terminal pane resize.
2026-05-04 14:36:06 -07:00
Daniel Peng
b1cb96f984 Use feature flag in settings crate (#9507)
The `settings` crate previously couldn't depend on `warp_features`, so
we plumbed `FeatureFlag::SettingsFile.is_enabled()` into a
process-global `SETTINGS_FILE_ENABLED: AtomicBool` at startup and the
crate read that mirror instead. The dependency restriction is gone, so
this PR removes the indirection and calls the feature flag directly from
the settings crate.
2026-05-04 14:33:16 -07:00
David Stern
693cd58de7 Add server conversation ID to computer use telemetry events. (#10084)
## Description
Add `server_conversation_id` to the `ComputerUseApproved` and
`ComputerUseCancelled` telemetry events so that these events can be
cross-referenced with conversations in the prod debugger (which uses the
server/proto conversation ID as its lookup key).

Also rename the existing `conversation_id` field to
`client_conversation_id` for clarity, since it was ambiguous which ID
was being sent.

## Testing
`cargo check` passes.

## Agent Mode
- [x] Warp Agent Mode - This PR was created via Warp's AI Agent Mode

Co-Authored-By: Oz <oz-agent@warp.dev>
2026-05-04 17:18:31 -04:00
lucieleblanc
2258cd36f3 Handle agent management view updates based on event type (#9866)
Co-authored-by: Oz <oz-agent@warp.dev>
2026-05-04 16:43:38 -04:00
Tautik Agrahari
ce89a98b53 fix(bootstrap): warn before sudo and document install steps (#9501)
- new `script/warp_sudo`: echoes each privileged command, prompts
`[y/N]` from `/dev/tty`, shells to real `sudo` on confirm.
`WARP_BOOTSTRAP_YES=1` or non-tty stdin skips.
- `script/bootstrap`: static `--help` install list dropped. `-y`/`--yes`
exports `WARP_BOOTSTRAP_YES=1` for children.
- ten direct `sudo` call-sites in `script/{macos,linux}/bootstrap` +
`script/linux/install_{build,runtime,test}_deps` switched to
`warp_sudo`. windows unchanged.
- `README.md`: short "what `./script/bootstrap` does" subsection
pointing at the platform scripts as the source of truth.

closes #9421.
2026-05-04 16:36:47 -04:00
Matthew Jamison { WWJD }
59c6a48ece docs: attribute two more Alacritty-derived files (#9522) (#9707)
## Description

Refs #9522.

After #9513 and #9563 added attribution headers to the original set of
derivative files, two more files remain unattributed:

| File | Upstream origin |
| --- | --- |
| `app/src/terminal/model/grid/grid_storage/resize.rs` |
`alacritty_terminal/src/grid/resize.rs` — grid resize/reflow logic. The
parent `grid_storage.rs` was attributed in #9513; this child module was
missed. |
| `app/src/terminal/ref_tests/mod.rs` |
`alacritty_terminal/tests/ref.rs` — test harness, including the
`ref_tests!` macro, JSON fixture loading, and the `.alacritty.recording`
data format. |

Both files now carry the same two-line attribution comment that #9513
and #9563 introduced, pointing to the existing
`crates/warp_terminal/src/model/LICENSE-ALACRITTY` (Apache-2.0).

## Linked Issue

- [x] The linked issue is labeled `ready-to-spec` or
`ready-to-implement`.

## Screenshots / Videos

Not applicable — documentation/comments only.

## Testing

No code paths changed. `cargo clippy --workspace --all-targets
--all-features --tests -- -D warnings` clean.

Note: `cargo fmt --check` reports pre-existing import-ordering failures
in both files that are present on `master` before this change (confirmed
by checking `git stash` baseline). These are not introduced by this PR.

## Agent Mode
- [ ] Warp Agent Mode - This PR was created via Warp's AI Agent Mode
2026-05-04 16:36:27 -04:00
David Stern
a548a9ae7a Use a PAT for pushing new release branches and tags. (#10081)
## Description

This is intended to fix issues with creating new release branches/tags
when the release branch `.github/workflows` directory doesn't match the
`master` branch directory.

The PAT here is owned by our machine user, and has the `contents:write`
and `workflows:write` permissions.
2026-05-04 16:19:39 -04:00
Matthew Albright
888c30278e [QUALITY-569] Stage 1: orchestrate tool (client) (#9628)
## Description

Client-side implementation of the `RunAgents` orchestration tool, paired
with server PR https://github.com/warpdotdev/warp-server/pull/10809.

### What
- **RunAgentsCardView**: confirmation card UI with inline editor for
model, harness, environment, host, and execution mode (Local/Cloud)
- **RunAgentsExecutor**: executor that dispatches accepted requests,
spawning child agent conversations via `StartAgentExecutor`
- **Cancel handling**: card subscribes to `FinishedAction` events so
Ctrl+C (both card-level and terminal-level) shows the cancelled state
- **Harness support**: Oz, Claude, Gemini, Codex with brand icons;
local-dev host gated on `Channel::Local`
- **Spawning card**: in-flight "Spawning N agents..." status while
children are being launched
- **Proto adoption**: `RunAgents` request/result types, `Harness` oneof
shape, `StartAgentV2` advertised alongside `Orchestrate`

### Demo
https://www.loom.com/share/dacad55f436b42d29191bf54461ab3cf

## Testing
- Manual validation of accept, reject (Ctrl+C), edit/discard, picker
interactions, local and cloud execution modes
- Existing tests updated for new harness list and import ordering

## Server API dependencies
- [x] Does this change rely on a new server API?
  - Server PR: https://github.com/warpdotdev/warp-server/pull/10809

## Agent Mode
- [x] Warp Agent Mode - This PR was created via Warp's AI Agent Mode

Co-Authored-By: Oz <oz-agent@warp.dev>

Co-authored-by: Oz <oz-agent@warp.dev>
2026-05-04 16:16:34 -04:00
R3flector
6ea1a52af1 Fix new-session "+" dropdown alignment when Tabs Panel is on the right (#9492)
## Description

Fixes #9485.

The "+" (new session) dropdown next to the vertical-tabs panel was
hardcoded to anchor `BottomLeft → TopLeft` (`view.rs`), so when the user
moved the Tabs Panel to the right side of the toolbar via "Edit toolbar"
the menu tried to expand to the right of the "+" button — which sits at
the right edge of the window. With `WindowBySize` clamping, the menu was
squashed into a narrow vertical strip of icons hugging the right edge of
the window (see screenshots in #9485).

This change makes the dropdown's anchor mirror the side the tabs panel
is on, matching the same pattern already used for the per-tab kebab menu
later in this file (`Self::tabs_panel_side(...)` + `BottomLeft/TopLeft`
vs `BottomRight/TopRight`):

- Tabs Panel on **left**: `BottomLeft → TopLeft` (menu opens to the
right — original layout, unchanged).
- Tabs Panel on **right**: `BottomRight → TopRight` (menu opens to the
left — fixes the bug).

The mapping is extracted into
`Workspace::vertical_tabs_dropdown_anchors` next to the existing
`tabs_panel_side` helper to keep the call site readable and
unit-testable.

### Out of scope (follow-up)

In the same render method, the "tab config" chip near the "+" button is
anchored `MiddleRight → TopLeft` regardless of side and almost certainly
has the same overflow problem when the panel is on the right. Keeping
this PR focused on the menu reported in #9485 — happy to file a
follow-up issue once this lands.

## Testing

- New unit test `test_vertical_tabs_dropdown_anchors_match_panel_side`
in `app/src/workspace/view_test.rs` asserts the anchor pair for both
`PanelPosition::Left` and `PanelPosition::Right`.
- Manually verified on Linux (CachyOS) on a local build:
- Tabs Panel on **left**: "+" menu opens cleanly to the right of the
button (regression check — unchanged).
- Tabs Panel on **right**: "+" menu opens cleanly to the left of the
button and is fully visible (the fixed case from #9485).
- Local checks: `cargo fmt --all -- --check` clean, `cargo clippy -p
warp --all-targets --tests --features gui -- -D warnings` clean, `cargo
test -p warp --features gui --lib workspace::view` 104 passed including
the new test.

## Agent Mode
- [ ] Warp Agent Mode - This PR was created via Warp's AI Agent Mode

## Changelog Entries for Stable

CHANGELOG-BUG-FIX: Fix new-session "+" dropdown alignment when the Tabs
Panel is placed on the right side of the header toolbar.

---------

Co-authored-by: Oz <oz-agent@warp.dev>
Co-authored-by: harryalbert <65182701+harryalbert@users.noreply.github.com>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-authored-by: Harry <harryalbert364@gmail.com>
2026-05-04 15:38:04 -04:00
Yunfan Yang
eb613001db Gate remote server experiment enablement on windows (#10079)
WISOTT
2026-05-04 15:26:31 -04:00
Safia Abdalla
24a39aac36 Remove ready-to-implement from bug report template (#10064)
## Description
Removes the `ready-to-implement` default label from the bug report issue template while keeping the `bug` label. Also updates the `triage-issue-local` skill so the triage agent determines whether `ready-to-implement` should be applied based on reproducibility and fix scope.

## Linked Issue
N/A - requested from Slack.
- [ ] The linked issue is labeled `ready-to-spec` or `ready-to-implement`.
- [ ] Where appropriate, screenshots or a short video of the implementation are included below (especially for user-visible or UI changes).

## Screenshots / Videos
N/A - issue template and skill guidance changes only.

## Testing
- `python3` assertion that `.github/ISSUE_TEMPLATE/01_bug_report.yml` now uses only `labels: ["bug"]` and no longer includes `ready-to-implement` in the template metadata.
- `python3` assertion that `.agents/skills/triage-issue-local/SKILL.md` includes the new `ready-to-implement` triage guidance for reproducible, narrow-scope bugs.
- `git diff --check`

## Agent Mode
- [ ] Warp Agent Mode - This PR was created via Warp's AI Agent Mode

_This PR was created by [Oz](https://warp.dev/oz) (running Codex)._
2026-05-04 14:04:06 -05:00
seemeroland
5fe273543b Fix copy keybinding to prioritize input text over selected blocks (APP-4330) (#9491)
## Description
Fixes [APP-4330](https://linear.app/warp/issue/APP-4330): the global
Copy keybinding (Ctrl/Cmd-Shift-C) was copying selected block content
even when the user had text highlighted in the input editor.

You can have a block selected and text highlighted in the input editor
at the same time. In that case, the user almost always intends to copy
the actively-selected input text, not the block.

This change updates `TerminalView::copy` to check for selected text in
the input editor before falling back to copying selected blocks. The
priority is now:
1. Selected text in CLI subagent views (unchanged)
2. Selected text in the cloud mode error screen (unchanged)
3. Selected text in the terminal grid / block (unchanged)
4. **Selected text in the input editor (new)**
5. Selected blocks (unchanged)

## Testing
Manual testing:
- Select a block (block card is highlighted) AND highlight text in the
input editor.
- Press Ctrl/Cmd-Shift-C.
- Confirm the highlighted input text is copied to the clipboard, not the
block contents.
- Confirm copying still works as before when only a block is selected,
when only block grid text is selected, etc.

https://www.loom.com/share/573b5d4a75ca42a8ad6c40900363edbd

## Server API dependencies
N/A — client-only change.

## Agent Mode
- [x] Warp Agent Mode - This PR was created via Warp's AI Agent Mode

## Changelog Entries for Stable

CHANGELOG-BUG-FIX: Copy keybinding now prioritizes selected text in the
input over a selected block when both are active.

Co-authored-by: Oz <oz-agent@warp.dev>
2026-05-04 11:55:07 -07:00
Petra Donka
9d65653e01 docs: mention Oz OSS credits form in README (#9580)
## Description
Adds a brief TIP in the README's "Open Source & Contributing" section
pointing maintainers of other open source projects to the application
form for free Oz credits: https://tally.so/r/LZWxqG.

The mention is intentionally tiny — a single TIP block — and lives in
the contributing section since the audience is OSS maintainers landing
on this repo.

## Testing
Docs-only change. Verified the rendered TIP/link in the README preview
locally.

## Agent Mode
- [x] Warp Agent Mode - This PR was created via Warp's AI Agent Mode

[Agent
conversation](https://staging.warp.dev/conversation/88848789-7a8b-41ab-939d-d7fc66b632af)

Co-Authored-By: Oz <oz-agent@warp.dev>

---------

Co-authored-by: Oz <oz-agent@warp.dev>
2026-05-04 20:35:47 +02:00
Andy
64a0dfbe98 fix: update rand to 0.9.4 to resolve GHSA-cq8v-f236-94qc (#10060)
Co-authored-by: Oz <oz-agent@warp.dev>
2026-05-04 11:12:50 -07:00
Andy
c65ae255ae make sure Windows quake mode window is correctly sized and receives focus (#9891) 2026-05-04 10:51:38 -07:00
Andy
14e7216c5e add RedirectionGuard=no to windows-installer.iss (#9863) 2026-05-04 10:51:33 -07:00
Andy
a9a5b6af3a fix: disable reset grid checks for restored blocks on Windows (#9987) 2026-05-04 10:49:56 -07:00