252 Commits

Author SHA1 Message Date
Shubhankar Tripathy
d2f26ae9bd feat: register Rename Active Pane as a keyboard-bindable action (#9351) (#9712)
## Description

Resolves the keyboard-binding portion of #9351.

The Rename Pane action shipped only via the right-click context menu on
a pane title bar (\`WorkspaceAction::RenamePane(PaneViewLocator)\`).
Because that variant requires an explicit locator, it can't be wired
into the keybinding registry, the Command Palette, or Settings →
Keyboard shortcuts — keyboard-driven users had no path to the action.

This PR mirrors the existing \`RenameActiveTab\` pattern by adding a
parameterless \`RenameActivePane\` variant that resolves the active pane
at dispatch time and delegates to the existing \`rename_pane\`
infrastructure.

## Linked Issue

- [x] The linked issue is labeled \`ready-to-spec\` or
\`ready-to-implement\`. (#9351 is \`ready-to-implement\`.)

Resolves #9351 (binding-registry portion).

## Changes

| File | Change |
|---|---|
| \`app/src/workspace/action.rs\` | New \`RenameActivePane\` variant on
\`WorkspaceAction\`; added to \`should_save_app_state_on_action\`
(mutates \`pane_configuration\`, parallel to \`RenamePane(locator)\`). |
| \`app/src/workspace/view.rs\` | Handler resolves the active tab's pane
group, looks up its focused pane id, builds a \`PaneViewLocator\`, and
delegates to the existing \`self.rename_pane(locator, ctx)\` path. No
new render or persistence code. |
| \`app/src/workspace/mod.rs\` | Register
\`workspace:rename_active_pane\` (\"Rename the current pane\") as an
\`EditableBinding\` under the Settings group, with no default keystroke.
Surfaces the action in Settings → Keyboard shortcuts as remappable. |
| \`app/src/workspace/action_tests.rs\` | Unit test confirms the new
variant participates in \`should_save_app_state_on_action\` alongside
\`RenamePane(locator)\`. |

## Scope

The issue's three asks are:
1. **Binding registry / Settings → Keyboard shortcuts** — addressed
here. 
2. **Command Palette** — out of scope for this PR; \`EditableBinding\`
registration alone may already surface it via the existing
\`from_editable_lens\` path, but I haven't verified.
3. **Optional \`/rename-pane\` slash command** — out of scope for this
PR.

(2) and (3) can be follow-ups once (1) lands; keeps the PR atomic.

## Testing

- \`action_tests.rs\` covers the persistence contract for the new
variant.
- I have **not** exercised the binding through Settings → Keyboard
shortcuts on a running Warp — this build environment cannot run Warp (no
Metal toolchain). CI's MacOS/Linux/Windows lanes will validate
compilation, and a maintainer with a working dev build can confirm the
new \`workspace:rename_active_pane\` row appears in Settings → Keyboard
shortcuts when searching \"rename\". Flagging this honestly so it
doesn't get assumed.

Once verified, follow-up keysets-manifest registration in
[warpdotdev/keysets](https://github.com/warpdotdev/keysets) (out of
scope for this repo) would let the action also surface as a
default-keyset entry.

## Agent Mode

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

CHANGELOG-IMPROVEMENT: Rename Pane is now reachable from Settings →
Keyboard shortcuts as a remappable binding
(\`workspace:rename_active_pane\`), in addition to the existing
right-click context menu. Thanks @lonexreb!
2026-05-06 09:46:22 -05:00
Axel L.
27f4933b81 feat(uri): add warposs://pane/{uuid} deep link for pane focus (#9655)
## Description

Adds a `warposs://pane/{uuid_hex}` deep link that focuses a specific
terminal pane by its persistent session UUID. This enables external
tools to programmatically switch to a given pane/tab/window in Warp.

### What
- **`PaneGroup::find_pane_by_session_uuid`** — new method that iterates
terminal panes and matches by persistent UUID bytes, returning the
`PaneId`
- **`UriHost::Pane`** — new URI host variant with full handler: decodes
32-char hex UUID, walks all workspaces/windows via
`WorkspaceRegistry::all_workspaces()`, dispatches
`handle_pane_navigation_event` to focus the tab, and calls
`show_window_and_focus_app` to bring the window forward
- **5 unit tests** — host parsing, full URI validation, empty path
safety, invalid hex safety, case-insensitive hex decoding

### Why
External tools (e.g. orchestration UIs) that know a pane's UUID need a
way to switch focus to that pane without user interaction. The pane UUID
is already persisted in SQLite and is stable across sessions.

### How
- Handler parses hex from URL path, converts to `[u8; 16]` via
`u8::from_str_radix` (no new crate dependency)
- Cross-window lookup via existing `WorkspaceRegistry::all_workspaces()`
+ `tab_views()` pattern (matches `focus_terminal_view_in_other_window`)
- `WindowBehaviorHint::Nothing` since handler explicitly manages window
focus
- O(n) pane iteration — deep links are rare, no cache needed

## Testing

- [x] Unit tests for URI parsing and validation (5 tests in
`uri_test.rs`)
- [x] Manual testing: `open "warposs://pane/{uuid}"` correctly focuses
the target pane across tabs and windows

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

---------

Co-authored-by: Warp <agent@warp.dev>
v0.2026.05.06.09.12.dev_00 v0.2026.05.06.09.12.stable_00 v0.2026.05.06.09.13.preview_00
2026-05-06 04:25:17 +00:00
Sagar Dagdu
d7206a5d36 Resolve Warp version via helper script in /feedback skill (#10219) 2026-05-06 04:19:34 +00:00
Alex Mazansky
69638b8f20 Fix find focus drifting when output streams into active block (#10057)
## Description

When using cmd+f to search a block whose output is still streaming, the
currently selected match jumps to a different piece of text as new
matches are appended. This happens because
`BlockListFindRun::rerun_on_block()` preserves the raw focused-match
index when splicing updated matches for the active block — as new
matches stream in, the same numeric index points to a different span.

**Fix:** Before splicing, snapshot the currently focused
`BlockListMatch`. After splicing, relocate it in the updated vector by
comparing span identity (`block_index`, `grid_type`, `range`) via a new
`same_span()` helper. If the focused match was outside the rerun block's
slice, shift the index by the delta in match count. Also handles the "no
old matches" (new block) case by shifting the index forward.

## Linked Issue

Closes #9542

- [x] The linked issue is labeled `ready-to-implement` (triaged bug —
implicitly ready-to-implement per CONTRIBUTING.md).
- [ ] Where appropriate, screenshots or a short video of the
implementation are included below (especially for user-visible or UI
changes).

## Testing

Added two regression tests in `block_list_test.rs`:
- `test_rerun_on_block_preserves_focused_match_in_active_block` —
focuses the prompt match inside a streaming block, appends new output
with additional matches, verifies focus stays on the same span.
- `test_rerun_on_block_preserves_focused_match_in_older_block` — focuses
a match in an older finished block, appends output to the active block,
verifies the focused match and its UI index shift correctly.

All 10 terminal find tests pass. `cargo fmt` and `cargo clippy -p warp
--tests` pass clean.

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

[Conversation
link](https://app.warp.dev/conversation/1129ea71-41d4-4f5c-a0c7-771b3bc714e4)

CHANGELOG-BUG-FIX: Fixed find (cmd+f) selection jumping to a different
match when new output streams into the active block.
-->

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

Co-authored-by: Oz <oz-agent@warp.dev>
2026-05-06 04:16:14 +00:00
Safia Abdalla
9696bc0319 Assign feedback skill stakeholder (#10220)
## Description
Assigns `@captainsafia` as the stakeholder for the bundled `feedback` skill by adding a specific `.github/STAKEHOLDERS` mapping for `/resources/bundled/skills/feedback/`.

## Linked Issue
No linked issue. This is a stakeholder metadata update 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
Not applicable.

## Testing
Validated `.github/STAKEHOLDERS` entries have path-plus-owner format with `awk`. No automated tests were added because this is a triage metadata-only change.

## Agent Mode
- [x] 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-05 23:08:56 -05:00
Zach Bai
143ec08022 Migrate conversation list to AgentConversationEntry (#10197)
## Description
Migrates the conversation list UI/model plumbing to consume the new
`AgentConversationEntry` abstraction introduced downstack.

This keeps active agent, conversation, and task entries represented
through a shared entry layer so the list view can rely on entry-provided
labels, icons, timestamps, and selection state instead of duplicating
that logic in the view model.

## Linked Issue
None.

## Screenshots / Videos
Not included; refactor of existing conversation list behavior.

## Testing
- `cargo fmt --check`
- Skipped `cargo clippy --workspace --all-targets --all-features --tests
-- -D warnings` at user request.

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

Co-Authored-By: Oz <oz-agent@warp.dev>:wq
2026-05-05 19:36:17 -07:00
Safia Abdalla
27c838b191 docs: add README badges (#10204)
## Description
Adds the new Built with Warp and Powered by Oz badge images to the top
badge row in the README.

## Linked Issue
N/A
- [ ] 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 — README-only change.

## Testing
- `cargo fmt -- --check`
- `cargo clippy --workspace --exclude warp_completer --all-targets
--tests -- -D warnings`
- `cargo clippy -p warp_completer --all-targets --tests -- -D warnings`

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

Conversation:
https://staging.warp.dev/conversation/0819cd3b-0dfa-457f-aa38-f0bb1ad01c6d

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

---------

Co-authored-by: Oz <oz-agent@warp.dev>
Co-authored-by: Safia Abdalla <captainsafia@users.noreply.github.com>
2026-05-06 01:41:49 +00:00
Matthew Albright
fe5a2edef5 Add verify-ui-change-in-cloud and test-warp-ui bundled skills (dogfood-gated) (#10203)
## Description
Add two new bundled skills gated to dogfood (Local/Dev) builds via
`resources/channel-gated-skills/dogfood/`:

- **verify-ui-change-in-cloud**: After a user-facing client change,
spawns a cloud agent with computer use via `run_agents` to verify the
change visually. Detects the current repo (warp-internal or
warp-external) and selects the correct environment.
- **test-warp-ui**: Guides a cloud agent through launching Warp with
`cargo run` and testing UI behavior using the `computer_use` tool. Used
by the cloud agent spawned by verify-ui-change-in-cloud.

No Rust code changes — both skills are auto-discovered by the
channel-gated build system.

## Testing
- `cargo test -p ai` passes (skill parsing tests)

## 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-06 01:26:38 +00:00
Advait Maybhate
fc1fb22b09 Keep empty child agent pills visible after exiting agent view (#10206) 2026-05-06 01:05:50 +00:00
Katarina Jankov
fd0a9d109d Add Codex local child harness support (#10176)
## Description
Add Codex as a supported local child-agent harness in the Warp client.
This updates local harness normalization and launch command
construction, and wires the CLI parsing and test coverage needed for
local child launches.
This is the client-side counterpart to
https://github.com/warpdotdev/warp-server/pull/10880.

## Linked Issue

https://linear.app/warpdotdev/issue/QUALITY-578/codex-support-for-orchestration
- [ ] 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).

## Testing
- `cargo +1.92.0 fmt --all`
- `MACOSX_DEPLOYMENT_TARGET=10.14 cargo +1.92.0 clippy --workspace
--exclude warp_completer --all-targets --tests -- -D warnings`
- `MACOSX_DEPLOYMENT_TARGET=10.14 cargo +1.92.0 clippy -p warp_completer
--all-targets --tests -- -D warnings`
- `MACOSX_DEPLOYMENT_TARGET=10.14 cargo +1.92.0 test -p warp_cli`
- `MACOSX_DEPLOYMENT_TARGET=10.14 cargo +1.92.0 test -p warp
local_child_task_config_records_supported_third_party_harnesses`
- `MACOSX_DEPLOYMENT_TARGET=10.14 cargo +1.92.0 test -p warp
execute_returns_error_when_local_harness_child_requires_orchestration_v2`
- `MACOSX_DEPLOYMENT_TARGET=10.14 cargo +1.92.0 test -p warp
execute_rejects_invalid_local_harness_names_before_pane_creation`

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

## Artifacts
- Conversation:
https://app.warp.dev/conversation/e4346560-106f-4bfc-a931-b705a9906799
- Plan: https://app.warp.dev/drive/notebook/BiU3vIJVoZ4jALRYFtNzdz

CHANGELOG-OZ: Add Codex as a supported harness for local child agents.

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

---------

Co-authored-by: Oz <oz-agent@warp.dev>
2026-05-05 20:54:07 -04:00
Zach Lloyd
69b6343161 Add tab context metadata copy actions (#10120)
## Description
Adds copy actions to the attached tab context menu so users can copy
tab/session metadata directly from the same UI surface where that
metadata is shown.

The menu now includes copy actions for available, non-empty metadata
when it makes sense for the current tab layout:
- Horizontal tabs show `Copy tab title` only, matching the metadata
visible in the horizontal tab strip.
- Vertical tabs grouped by tabs show copy actions for the tab title plus
available focused-session metadata such as branch, working directory,
and pull request link.
- Vertical tabs grouped by panes show copy actions sourced from the
active pane, including `Copy pane title` instead of `Copy tab title`.

All new copy actions use sentence casing, and unavailable metadata is
omitted from the menu rather than shown disabled.

## Linked Issue
- [ ] 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
- Loom demo: https://www.loom.com/share/b57f7bfebea44a15b2703140db88c758

## Testing
Added integration coverage for the main layout variants:
- `test_tab_context_menu_copies_metadata` covers horizontal tabs. It
verifies that only the tab title copy action is present, and that
selecting it copies the tab title.
- `test_vertical_tab_context_menu_copies_metadata` covers vertical tabs
grouped by tabs. It verifies that the context menu can copy the branch,
tab title, and working directory for the tab/focused session.
- `test_vertical_pane_context_menu_copies_metadata` covers vertical tabs
grouped by panes. It creates a split pane with different metadata and
verifies that the menu copies the active pane branch, pane title, and
working directory.

Validation run:
- `./script/run` (bundled and launched WarpLocal.app)
- `./script/run` (bundled and launched WarpLocal.app)
- `PATH=/tmp/warp-corepack-bin:$PATH
/Users/zach/Projects/warp_3/target/debug/integration
test_tab_context_menu_copies_metadata`
- `PATH=/tmp/warp-corepack-bin:$PATH
/Users/zach/Projects/warp_3/target/debug/integration
test_vertical_tab_context_menu_copies_metadata`
- `PATH=/tmp/warp-corepack-bin:$PATH
/Users/zach/Projects/warp_3/target/debug/integration
test_vertical_pane_context_menu_copies_metadata`
- `cargo fmt --manifest-path /Users/zach/Projects/warp_3/Cargo.toml
--all --check`
- `PATH=/tmp/warp-corepack-bin:$PATH cargo nextest run --manifest-path
/Users/zach/Projects/warp_3/Cargo.toml --no-fail-fast --workspace
test_tab_context_menu_copies_metadata
test_vertical_tab_context_menu_copies_metadata
test_vertical_pane_context_menu_copies_metadata`
- `PATH=/tmp/warp-corepack-bin:$PATH cargo clippy --manifest-path
/Users/zach/Projects/warp_3/Cargo.toml --workspace --all-targets
--all-features --tests -- -D warnings`

Note: initial nextest/clippy attempts without temporary Corepack shims
failed in `command-signatures-v2` because the global Yarn version is
1.22.22 while that crate requires Corepack/Yarn 4.0.1. Rerunning with
temporary Corepack shims passed.

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

CHANGELOG-IMPROVEMENT: Added tab context menu actions to copy visible
tab and pane metadata when available.

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

---------

Co-authored-by: Oz <oz-agent@warp.dev>
2026-05-06 00:03:36 +00:00
Zach Bai
27d8ef677e Add AgentConversationEntry and friends. (#10167)
Adds a new AgentConversationEntry abstraction designed to replace
ConversationOrTask.

ConversationOrTask requires a bifurcation between local and cloud
conversations that is prone to skew. Downstream of ConversationOrTask,
navigation policy (e.g. should clicking this item open a cloud mode
pane? or open a cloud transcript view?) and other behaviors are computed
and cached. With cloud conversation continuation and local->cloud
handoff, it makes less sense to do this bifurcation up front, and
instead introduce a unified abstraction that broadly represents an AI
conversation, whether its a local conversation started by the user, a
cloud ambient agent conversation, or a conversation for which we only
currently have server metadata (e.g. have not actually fetched
transcript contents from storage).

This refactor will make it easier to implement correct behavior for UI
that depends on a conversation's provenance.

This is the first PR in a 4 pr stack, introducing the abstraction itself
- but does not hook it into anythinganything. There is 1 master tech
spec and 4 more granular specs for each incremental PR.
2026-05-05 16:51:13 -07:00
Zach Lloyd
4be9ec100d Update mermaid_to_svg dependency (#10199)
## Description
Updates the workspace `mermaid_to_svg` git dependency to the latest
upstream commit.

- Old rev: `f7233f69965c59760fad98d684c786569814d821`
- New rev: `4761588218f747c07d72fd324efcd2032d873aaf`

This also refreshes the corresponding `Cargo.lock` entries for
`mermaid_to_svg` and its in-repo `dagre_rust` dependency.

## Linked Issue
N/A

## Screenshots / Videos
N/A — dependency bump only.

## Testing
- `cargo fmt`
- `cargo clippy --workspace --all-targets --all-features --tests -- -D
warnings`

Note: clippy completed successfully. During the run,
`command-signatures-v2` logged a non-fatal build-script warning that it
proceeded with stale generated command signatures JS.

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

Agent artifacts:
- Conversation:
https://staging.warp.dev/conversation/7967da60-8ae2-4747-9db4-3bb49f727a32

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

Co-authored-by: Oz <oz-agent@warp.dev>
2026-05-05 16:45:48 -07:00
Harry Albert
71fd2143b9 Disable harness selector for local -> cloud handoff (#10183)
## Description
<!-- Please remember to add your design buddy onto the PR for review, if
it contains any UI changes! -->

For local -> cloud handoff, we should disable the harness selector (as
you can't go from a local warp conversation to a cloud claude
conversation, using the same conversation).

This PR just locks the selector to Warp, but if/when we implement
local->cloud for non-warp-harnesses we'll have to make the code respect
the harness that's kicking off the cloud run.

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

https://www.loom.com/share/845bedb3e7e040dca0bb1413f8364b45

## Agent Mode
- [x] Warp Agent Mode - This PR was created via Warp's AI Agent Mode
2026-05-05 19:27:56 -04:00
Edward Shao
ba40a024df Update Git Operations AI client billing policy (#9840)
## Description

Adds the client-side follow-up for the Git Operations AI enterprise/tier
policy:

- Adds `isGitOperationsAiEnabled` to the client GraphQL schema and
`WarpAiPolicy` fragments/models.
- Converts the new policy into the app-level workspace billing model.
- Gates Git Operations AI requests and the “Commit & Pull Request
Generation” setting on the billing policy instead of the previous
hardcoded enterprise client gate.
- Removes the stale TODO that asked for this client-side gate.

This is intended to pair with the server-side schema/policy change in
warpdotdev/warp-server#10798. Keeping this PR as draft until the server
field is available to clients.

## Linked Issue

N/A — client follow-up for the server GraphQL schema/policy PR.

## Screenshots / Videos

N/A — this is policy/schema wiring. The existing setting is hidden when
the new billing policy disables Git Operations AI.

## Testing

- `cargo fmt --manifest-path
/Users/edward/Repos/edward-update-git-ops-ai-schema/Cargo.toml --all --
--check`
- `cargo clippy --manifest-path
/Users/edward/Repos/edward-update-git-ops-ai-schema/Cargo.toml -p
warp_graphql_schema -p warp_graphql -p warp --all-targets --all-features
--tests -- -D warnings`
- `git --no-pager diff --check`

No new integration test added; this is a small billing-policy plumbing
change that reuses existing settings/request gates.

## Agent Mode

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

Agent conversation:
https://staging.warp.dev/conversation/281d784d-6c87-414f-89db-1b29f771f571

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

---------

Co-authored-by: Oz <oz-agent@warp.dev>
Co-authored-by: MaggieShan <sshan.maggie@gmail.com>
2026-05-05 19:25:30 -04:00
Harry Albert
4e600af4ab open local->cloud mode conversation in the same pane (#9988)
## Description
<!-- Please remember to add your design buddy onto the PR for review, if
it contains any UI changes! -->

After posting a demo of local -> cloud handoff, I get some feedback
(from peter, varoon, and ZL) that it would be better to just open the
cloud mode session in the same pane as the local conversation. This
makes sense to me, and we're still forking the conversation and opening
up a new cloud mode pane so it's not like this is a destructive action
(someone can just close the cloud mode view and re-open the local
conversation view).

Implements REMOTE-1557

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

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

## Agent Mode
- [x] Warp Agent Mode - This PR was created via Warp's AI Agent Mode
2026-05-05 19:04:47 -04:00
Edward Shao
e6df31bb6d APP-4263 Fix git ops flicker bug (#9452)
## Description

Fixes APP-4263: the code review git operations header briefly showed
incorrect PR-related actions while PR info for the current branch was
still being refreshed.

`load_metadata_for_repo` returns `pr_info: None` because PR info is
fetched separately via `refresh_pr_info` (`gh pr view`). That made the
UI treat unknown PR state as "no PR" while the async lookup was in
flight, which could briefly show `Create PR`. With the handle-only
version, switching between two branches that both have PRs could also
briefly fall back from `PR #N` to disabled `Commit` before resolving to
`PR #M`.

### Fix

In `app/src/code_review/diff_state.rs`:

1. Track an in-flight PR lookup with `refreshing_pr_info_handle:
Option<SpawnedFutureHandle>` instead of storing PR staleness in
metadata.
2. Abort any previous PR lookup before starting a new one.
3. Carry forward cached `pr_info` through metadata refreshes so the
header does not clear to disabled `Commit` while the next branch's PR
lookup is pending.

In `app/src/code_review/code_review_view.rs`:

1. Gate `Create PR` on `!is_pr_info_refreshing()` so an unknown/pending
PR lookup is not treated as "no PR".
2. If cached PR info is being carried while a new lookup is pending,
keep the previous `PR #N` label visible but disable the button/menu item
with a "Refreshing PR info" tooltip so it cannot open a stale PR.
3. Once the lookup resolves, update the header to the new branch's `PR
#M`, `Create PR`, or disabled `Commit` state as appropriate.

## Testing

Not run in this update per request.

Expected/manual behavior:
- Main/master → feature branch: no `Create PR` flicker while `gh pr
view` is pending.
- Branch with PR → branch with PR: no disabled `Commit` interstitial;
previous PR label remains disabled until the new PR info resolves.
- Branch with PR → branch without PR: previous PR label remains disabled
briefly, then transitions to `Create PR` if the branch is eligible.
- Dropdown `Create PR` and commit-dialog create-PR intent remain
unavailable while PR info is refreshing.

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


UPDATED LOOM:
https://www.loom.com/share/4c94527c09914af9b295e49b4719159a
2026-05-05 18:53:34 -04:00
Harry Albert
c1b1d4bf75 Fork conversation into local->cloud pane on-pane-creation (#9653)
## Description

We want to use the same new cloud mode setup UI for local -> cloud
handoff that we have for regular cloud mode setup. We also want to
immediately fork the entire conversation into the new cloud pane before
you've actually starting the cloud run.

The main change required to do this was to fork the conversation
on-chip-click instead of on-prompt-send (see the corresponding server PR
for this issue), as we don't want the forked conversation to get stale
if new prompts are sent to the old conversation between clicking the
chip and sending a prompt in the cloud mode window.

## Screenshots / Videos

https://www.loom.com/share/580624a891d64bec81f9642dda766583

## Agent Mode

- [x] Warp Agent Mode - This PR was created via Warp's AI Agent Mode
2026-05-05 18:33:22 -04:00
s-zaizen
3ff78d29b5 fix(macos/ime): don't submit form when Enter confirms Japanese IME conversion (#9730)
## Description
                                                              
On macOS, some Japanese IMEs (built-in macOS Japanese, Google Japanese
Input, etc.) commit a phrase mid-typing via a single
`interpretKeyEvents:` pass that fires `insertText:` (the just-committed
phrase) and then `setMarkedText:` (the next in-progress character). The
trailing `[self unmarkText]` in `keyDownImpl` was unconditionally
clobbering that freshly-set marked text in our state.
After that, the IME's internal state still held the queued character but
`WarpHostView`'s `markedText` was empty and `warp_marked_text_cleared`
had been dispatched. On the next keystroke (typically Enter
to commit), `wasComposing` was therefore `false`, so
`warp_handle_view_event` ran without the composing flag and the
keybinding system handled Enter as a command submission. The IME's
`insertText:` of the queued character arrived at the post-dispatch
insert path with `handled=YES` and was silently dropped.
                                                              
The fix tracks whether the IME modified marked text via `setMarkedText:`
or `unmarkText` during the current `interpretKeyEvents:` pass, and skips
the trailing `unmarkText` if the IME has already touched
marked text in that pass — the IME has either cleared it (so our call
would have been a redundant `ClearMarkedText`) or replaced it with new
in-progress text we must preserve.
This change is contained to the macOS Objective-C IME plumbing in
`host_view.m`. The Linux/Windows IME path (winit `Ime::Preedit` /
`Ime::Commit` in `crates/warpui/src/windowing/winit/event_loop/mod.rs`)
is structurally different and not affected by this PR.
## Linked Issue                                                 

Fixes #7261

> Note: the issue body explicitly reports `Operating system (OS): macOS`
(`15.6(24G84)`), so the `os:linux` label appears to have been applied in
error during automated triage. This PR addresses the
macOS path only; please drop the `os:linux` label or relabel as `os:mac`
during review.
- [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
          
### Before Fix

https://github.com/user-attachments/assets/f3acf468-2860-4326-b8ab-f8ff4990d5a0

### After Fix

https://github.com/user-attachments/assets/a45d9c18-8619-4422-9406-e3cb66cc380e
                                             
## Testing
                                                              
Manual verification on macOS 15.x with the macOS built-in Japanese IME
(Hiragana / Romaji mode):

1. Reproduced the bug on `master` with the steps from #7261 — typing
`漢字の入力(変換)が、` and pressing Enter dropped the trailing `、` and submitted
the buffer immediately.
2. Verified the fix on this branch with `cargo run --bin warp-oss` (with
`FeatureFlag::ImeMarkedText` enabled locally so inline preedit could be
observed). After the fix the queued `、` is preserved across
the split-commit, the next Enter commits it via the IME, and a
subsequent Enter submits the buffer as expected.
3. Sanity-checked dead-key composition (`⌥e` then `a` → `á`) on a US
keyboard layout to confirm the dead-key suppression branch in
`keyDownImpl` is unaffected.
4. Ran the presubmit checks locally:
 - `cargo fmt --check` — pass                                 
- `cargo clippy --workspace --exclude warp_completer --all-targets
--tests -- -D warnings` — pass
- `cargo clippy -p warp_completer --all-targets --tests -- -D warnings`
— pass
- `./script/run-clang-format.py -r --extensions 'c,h,cpp,m'
./crates/warpui/src/ ./app/src/` — pass
- `cargo nextest run --no-fail-fast --workspace --exclude
command-signatures-v2` — passes for the IME-relevant suites; the only
failures observed locally

(`settings::init::tests::test_migration_does_not_rerun_when_marker_present`
and the SSH-IAP integration suite) reproduce identically on `master` and
are unrelated to this change.
- `cargo test --doc` — pass
                                                              
## Agent Mode
- [ ] Warp Agent Mode - This PR was created via Warp's AI Agent Mode
<!--
CHANGELOG-BUG-FIX: Fix Japanese IME losing the last character of a
phrase that ends right before a punctuation mark on macOS.
-->
2026-05-05 17:07:50 -05:00
Yunfan Yang
0f28bcb333 Avoid parallel precheck execution (#10188)
## Description
We were running three steps in parallel with `futures::join!`
1. Check binary
2. Check old binary for autoupdate
3. Detect platform

This will end up using 3 control master connections. Since each
connection is a limited resource, this could cause these open failed
issues.

For now I am moving these to be sequential. I considered combining them
into one command and have some client side parsing to reconstruct the
results but I am not confident about that change with different shells
and potential error states. We could observe if latency with sequential
execution becomes a problem and decide if we want to further optimize
2026-05-05 17:42:40 -04:00
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