Commit Graph
52 Commits
Author SHA1 Message Date
Ryan WardandClaude Opus 4.6 940c3b5dff Clean build: remove all dead code and fix warnings
- Remove unused fields (trigger_offset on Requesting, is_incomplete)
- Remove unused methods (selected_item, has_actions, is_menu_open,
  close_menu, move_selection, confirm_code_action, apply_workspace_edit)
- Remove unused import (Shrinkable in signature_help)
- Remove all #[allow(dead_code)] annotations
- Add build standards to AGENTS.md: zero warnings, zero errors required

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-18 16:26:17 -05:00
Ryan WardandClaude Opus 4.6 6f7d4757a2 Add signature help (Phase 4): parameter hints on function calls
- SignatureHelpState: None → Loading → Showing
- Triggers on '(' and ',' characters, dismisses on ')'
- Renders tooltip above cursor with active parameter highlighted
- Active parameter shown in warning color (bold yellow/orange)
- Includes documentation display when available from LSP
- Dismissed on Escape along with other LSP overlays

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-18 16:18:50 -05:00
Ryan WardandClaude Opus 4.6 331fbeeb18 Add code actions (Phase 2): quick fixes and refactorings via LSP
- CodeActionsState machine: Idle → Requesting → Available (with menu)
- 200ms debounced fetch on cursor/selection change
- Cmd+. opens the code actions menu
- Menu renders as positioned overlay with action titles and kind labels
- apply_workspace_edit helper applies LSP WorkspaceEdits to the editor
- Wired into SelectionEnd event for automatic background fetching

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-18 16:16:34 -05:00
Ryan WardandClaude Opus 4.6 d421b9583f Wire up completion keyboard navigation and add AGENTS.md
- Tab/Enter confirms the selected completion item
- Up/Down arrows navigate the completion menu
- Escape dismisses the menu (via existing dismiss_lsp_overlays)
- Editor intercepts keys via completion_intercept_keys flag when menu is showing
- Add AGENTS.md with LLM-powered predictive autocomplete idea

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-18 16:08:48 -05:00
Ryan WardandClaude Opus 4.6 a75bc99852 Add LSP completion/code actions/rename/signature help infrastructure, fix TypeScript LSP, rebrand app identifiers
- LSP Layer: Add completion, completion_resolve, signature_help, code_action,
  prepare_rename, and rename methods to TextDocumentService and LspServerModel
- Types: Add CompletionItemData, CompletionResult, SignatureHelpResult,
  CodeActionData, PrepareRenameResult, RenameResult, FileEdits
- Feature Flags: Add LspCompletion, LspCodeActions, LspRename, LspSignatureHelp
- Client Capabilities: Declare completion, signature help, rename, and code
  action capabilities so servers advertise these features
- Completion UI: Add completion state machine with debounced triggers, fuzzy
  filtering, positioned overlay menu, and edit application
- TypeScript LSP: Switch to npx for running typescript-language-server (handles
  download/caching automatically, survives node version switches)
- PATH Resolution: Add interactive shell PATH fallback for LSP server discovery
  and spawning (fixes nvm/fnm/volta users)
- App Identity: Rebrand from com.samsung.Galaxy/dev.warp.WarpOss to
  samsung.galaxy.GalaxyOss across bundle IDs, URL schemes, and plists
- Add scripts/reset-galaxy.sh for clean slate testing
- Galaxy status messages and other in-progress work

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-18 15:57:47 -05:00
Ryan WardandClaude Opus 4.6 f37a744692 Fix Warping indicator stuck after Bedrock LLM finishes responding
Bedrock was calling suggest_next_prompt tool which created a SuggestPrompt
action that waited forever on a oneshot channel for UI interaction that
never fires in the Bedrock path, keeping the conversation permanently
InProgress. Fixed by filtering the tool from the Bedrock tool list and
skipping it at the stream level when the LLM calls it from context history.

Also includes: Bedrock cache token tracking, cost estimation, LSP
improvements, conversation usage view updates, and external config support.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-18 12:13:05 -05:00
Ryan Ward 95b4708e44 Fixing bug where canceled tool calls may cause terminal to freeze 2026-05-15 16:18:24 -05:00
Ryan Ward 57222e208e More cleanup on bedrock calls, adding dump file for errors 2026-05-13 16:21:40 -05:00
Ryan Ward b61d6bcbce Apply local updates and test/build fixes 2026-05-13 15:56:40 -05:00
Ryan Ward cee61e2af0 Wrapping up bedrock implementation 2026-05-13 10:04:59 -05:00
Ryan Ward ed53aa99eb Replace debug memory stats footer with AI request token count
When 'Show Memory Stats' debug mode is enabled, the block footer
now displays 'Request tokens: N' (or 'Request tokens: --') instead
of the old grid/flat storage size breakdown.

- Add last_block_token_usage_by_model to AIConversation, tracking
  token usage accumulated since the most recent user-initiated request
- Add last_block_total_tokens() accessor summing across all models
- BlockListElement reads this value per block and renders it in the
  debug footer text element
2026-05-13 09:55:04 -05:00
Ryan Ward 029e90be2b Remove auto model routing; default to Claude Opus 4.6 on Bedrock; strip Oz tips 2026-05-13 09:33:45 -05:00
Ryan Ward e1c33317d3 Fix macOS icon padding, Quit/Hide menu labels, OSS config dir, Bedrock tool_result pairing
- Icon now follows Apple HIG: artwork at 80% canvas with transparent padding
- Quit Warp -> Quit Galaxy, Hide Warp -> Hide Galaxy in macOS menus
- OSS channel uses ~/.galaxy (no -oss suffix)
- Robust ensure_tool_results_paired: positional adjacency validation for Bedrock API
2026-05-13 09:13:03 -05:00
Ryan Ward 11152f2f40 Galaxy v1.0.0: Remove warp-channel-config, rebrand bins/icons/settings, remove teams from Drive
- Remove warp-channel-config dependency; all bin targets hardcode ChannelConfig inline
- Rename bin targets: galaxy-oss, galaxy-local, galaxy-stable, galaxy-dev, galaxy-preview
- Rename config dir from .galaxy-ai to .galaxy
- Add Galaxy app icon (512x512 rounded PNG + SVG logo)
- Replace settings gear icon with Stars (sparkle) icon
- Remove lightbulb/resource center button from header toolbar
- Add Galaxy logo SVG to Settings > About page
- Rename Galaxify -> Galaxyize across all UI strings
- Remove Create Team / Join Team sections from Galaxy Drive
- Fix missing => in OpenRichInput match arms
- Clean up unused imports and warnings
- Update Cargo.toml bundle metadata with Samsung branding
- Re-enable code review, project explorer, global search in settings
2026-05-13 01:29:25 -05:00
Ryan Ward ebafd9322d Remove dead passive suggestion code, stub cloud listener, rename input placeholders to Galaxy, add future LSP plan to GALAXY.md 2026-05-12 16:16:16 -05:00
Ryan Ward ca1337ad7d Fix crash: remove server SSE fallback, return error when no Bedrock config available 2026-05-12 10:51:06 -05:00
Ryan Ward ee69403bdb Add suggest_next_prompt tool for Bedrock prompt suggestions 2026-05-12 10:43:25 -05:00
Ryan Ward e13ed355f6 Fix Bedrock not being used: enable by default, remove model_id gating, set fallback default model
- bedrock_enabled default: false -> true (was never routing to Bedrock)
- Remove is_bedrock_model check from bedrock_config_if_applicable (model_id
  could be 'auto' from server-populated prefs, causing Bedrock to be skipped)
- Default to claude-sonnet-4 when model_id is empty or 'auto'
- fallback_to_warp default: true -> false (no server exists)
- Smoke test: exit immediately on no-text with diagnostic info instead of
  polling forever
2026-05-12 10:10:00 -05:00
Ryan Ward 0009f1366a Fix tool results visibility, dynamic system prompt, rebrand Galaxy AI to Galaxy
- Rewrite extract_system_prompt to dynamically include CWD, OS, shell, git,
  project rules, and tool usage guidance from request context
- Fix extract_tool_result_content and format_tool_call_result to properly
  handle Grep, FileGlobV2, and ApplyFileDiffs results (were returning empty
  'Tool completed successfully' strings - model never saw file lists)
- Rename all 'Galaxy AI' references to just 'Galaxy' (menu, window title,
  bundle names, plist, welcome text, about)
- Update smoke test with file visibility test prompt
- Suppress dead_code warnings on unused smoke test functions
2026-05-12 09:42:00 -05:00
Ryan Ward c2c6b3bc8a Fix all 109 warnings: suppress dead code in removed feature files, clean unused imports 2026-05-12 09:05:47 -05:00
Ryan Ward 2c651f2085 Settings cleanup: remove Cloud Platform, Teams, Shared Blocks, Referrals from nav; disable autoupdate; stub Oz settings; rename Warpify to Galaxify 2026-05-12 08:42:54 -05:00
Ryan Ward 140da74f99 Significant progress. Performing cleanup now 2026-05-11 14:31:02 -05:00
Ryan Ward fe105e0369 Bedrock improvements. Getting back conversations, but losing context after tool calls 2026-05-08 15:24:14 -05:00
Ryan Ward 9e0af95953 Bedrock improvements 2026-05-07 16:19:39 -05:00
Ryan Ward 2d5bc55939 Fully removed auth 2026-05-07 14:51:04 -05:00
Ryan Ward 8c80d499b0 Missed file 2026-05-07 14:37:59 -05:00
Ryan Ward f8f2c6bff6 More progress, still a long way to go 2026-05-07 14:37:26 -05:00
Ryan Ward a41cbd8cc7 Rebrand to Galaxy, major improvements to Bedrock support, still needs some TLC though 2026-05-07 11:29:34 -05:00
Ryan Ward f4e2475c60 Rebasing, going about this another way 2026-05-06 07:02:12 -05:00
Ryan Ward d8d4ac9e5d Initial commit 2026-04-29 10:43:20 -05:00
Maggie Shan b7b327510d Fix ui jitter during remote server initialization (#9342)
## Description
* Fixes
[APP-4307](https://linear.app/warpdotdev/issue/APP-4307/fix-blocklist-ui-flicker-when-initializing-remote-server)
* The issue: during the initialization flow there would be significant
ui jitter where the entire blocklist is moving up and down - this is
because there is a gap between when the command/init shell finishes and
when we render the loading footer (which looks like the output grid
cursor appearing, then disappearing, then the loading footer appearing)
* The fix is to render the footer as we're checking for if the binary is
installed so that there is no gap for when the cursor disappears and the
loading footer appears
* The original reason this was done was to ensure that the loading
footer didn't appear before or with the choice block - I've updated it
to have an explicit check instead
* This also updates where we're handling `RemoteServerSetupStateChanged`
such that `session` is able to handle and update itself, and the
terminal view is only in charge of rerendering the footer

## Testing
https://www.loom.com/share/d4f157b4afd94f648f61ab1afbcee249

## Agent Mode
- [x] Warp Agent Mode - This PR was created via Warp's AI Agent Mode
2026-04-29 09:53:27 -04:00
Matthew AlbrightandOz a6d1ece15e Remove orchestration_event_push feature flag; rename poller to streamer (#9265)
## Description

Removes the `orchestration_event_push` feature flag and the polling
fallback in the orchestration event delivery path. SSE-based event push
has been on in dogfood and staging long enough that it's now the only
path; the dual-mode `OrchestrationEventPoller` is renamed to
`OrchestrationEventStreamer` and only opens persistent SSE connections.

- Removed `FeatureFlag::OrchestrationEventPush` and the matching Cargo
feature.
- Renamed `app/src/ai/blocklist/orchestration_event_poller.rs` (and its
tests) to `orchestration_event_streamer.rs`. Renamed the public type to
`OrchestrationEventStreamer`; renamed the shared event-injection sink
`handle_poll_result` → `handle_event_batch`.
- Removed polling-only state (`poll_backoff_index`, `poll_in_flight`),
methods (`poll_and_inject`, `start_idle_poll_timer`), and constants
(`POLL_BACKOFF_STEPS`, `EVENT_POLL_BATCH_LIMIT`). Kept `event_cursor`,
`pending_delivery`, and `conversation_statuses` since they are also used
by the SSE path.
- Removed the now-dead `AIClient::poll_agent_events` trait method and
its `ServerApi` implementation in `app/src/server/server_api/ai.rs`.

The `OrchestrationV2` flag continues to gate streamer instantiation and
watched-run registration; runtime behavior under v2 is unchanged.

Pairs with the warp-server PR that drops the flag server-side:
https://github.com/warpdotdev/warp-server/pull/10736 — that PR should
land first so the polling endpoint stays available for older clients
during rollout.

## Testing
- `cargo build -p warp` clean.
- `cargo clippy -p warp -p warp_features --all-targets -- -D warnings`
clean (after `cargo fmt`).
- `cargo test -p warp --lib ai::blocklist::orchestration_event_streamer`
— all 7 tests pass.

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

---

[Plan: Remove orchestration_event_push flag (server +
client)](https://staging.warp.dev/drive/notebook/yAlAxMAr4EO65A9LEy40cX)

[Conversation](https://staging.warp.dev/conversation/ff5e82cb-bba7-4cbf-ae0b-e51f2c542f4a)

---------

Co-authored-by: Oz <oz-agent@warp.dev>
2026-04-29 09:42:02 -04:00
IsaiahandOz d0f045c01b Auto oss vs cost efficient 50/50 A/B test (#9355)
I want to run an a/b test where 50% of free users get defaulted to auto
cost efficient, and other 50% to auto open weights.

## Tests
- 50% of the time when i open the app with a different WARP_DATA_DIR i
get the expected flip/flopping
- my default gets persisted throughout signup

---------

Co-authored-by: Oz <oz-agent@warp.dev>
2026-04-28 23:33:23 -04:00
Moira Huang f0c8b7f723 [APP-3801] implement remote environments auth (#9331) 2026-04-28 21:31:23 -05:00
Daniel Peng c325d146ab Update agent attribution setting (#9329) 2026-04-28 16:35:30 -07:00
Edward ShaoandOz ffe93a5e6d Fix git diff for first commit in commit message autogen (#9291)
## Description

What: Fix AI commit message diff generation for brand-new repositories
before the first commit.

Why: `git diff HEAD` fails when HEAD does not exist yet, which prevented
commit message autogen from seeing the changes that would be committed.

How: Use the normal `git diff HEAD` path when HEAD exists. Before the
first commit, combine staged changes with unstaged edits to staged
files, then rely on the existing untracked-file synthesis for files that
have not been staged.

fixes
[APP-4264](https://linear.app/warpdotdev/issue/APP-4264/commit-message-is-not-getting-auto-generated-for-the-first-commit-in-a)
## Server API dependencies

None.

## 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-04-28 19:19:25 -04:00
Faizan Qureshiandseemeroland c0feac21db Expand ~ in warp://action/new_tab?path= URLs (#9277)
## Description

Fixes #9178. `warp://action/new_tab?path=~/foo` was opening the current
directory instead of `~/foo`. The query value was being passed straight
into `PathBuf::from_str`, which doesn't expand `~`, so the resulting
literal `~/foo` couldn't be resolved by `open_file` and the new tab
silently fell back to the current location.

Routed the `path` query through `shellexpand::tilde` (already a
workspace dependency) before constructing the `PathBuf`. The same call
site serves both `/new_tab` and `/new_window`, so both URLs benefit.
Absolute and relative paths are unchanged.

## Testing

Added 6 unit tests in `app/src/uri/uri_test.rs`:

- `~/Projects` expands to `$HOME/Projects`
- URL-encoded `%7E%2FProjects` expands the same way
- absolute path `/tmp/foo` unchanged
- relative path `relative/dir` unchanged
- missing `path=` returns `None`
- bare `~` expands to `$HOME`

Also verified the helper in a standalone harness against extra edge
cases: empty value, non-leading `~` (unchanged, correct shell
semantics), `~user/path` (unchanged, a shellexpand limitation), and
URL-encoded spaces.

Couldn't run the in-tree test suite locally because the Metal toolchain
isn't installed, so relying on CI for the full clippy / nextest pass.

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

## Changelog Entries for Stable

CHANGELOG-BUG-FIX: `warp://action/new_tab?path=~/foo` (and
`/new_window`) now expand `~` to your home directory.

---------

Co-authored-by: seemeroland <roland@warp.dev>
2026-04-28 16:00:24 -07:00
lucieleblanc 389716a905 Add client-side user setting for agent commit attribution (#9323) 2026-04-28 18:33:15 -04:00
Aloke DesaiandOz 929944198c Shrink binary size for the standalone oz cli (#9301)
## Description
Reduces the `oz` CLI tarball size by adapting two techniques the WASM
build already uses for the standalone CLI artifact.

**Measured results**:

| Platform | Before (gzipped) | After (gzipped) | Reduction |
|---|---|---|---|
| macOS aarch64 | ~120 MiB | ~48 MiB | **~−60%** |
| Linux x86_64 | 121.5 MiB | ~49 MiB | **~−60%** |

There are two primary changes:
1. No longer bundle any of the async assets into the headless binary
(this drops ~57 MiB of incompressible PNG/JPG bytes from the binary)

2. Introduce a `release-ci` profile that uses `opt-level = s` and `lto =
fat`. This mirrors the release profile we use on wasm. For the CLI
specifically, this should be a no-op for user-perceived latency: `oz
agent run` is wall-clock-dominated by network round-trips to the LLM API
and file I/O, not by CPU-bound inner loops. The 5–15% slowdown that
`-Os` typically incurs on tight numeric loops is invisible next to a
multi-second model response, and a smaller binary actually loads faster
on cold start.


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

## Changelog Entries for Stable

CHANGELOG-OZ: Reduced the `oz` CLI tarball download size by ~60% on both
macOS and Linux.

---------

Co-authored-by: Oz <oz-agent@warp.dev>
2026-04-28 17:20:51 -05:00
João Soares 24a96d60c9 Sort tab configs alphabetically by name (#9258)
Closes #9132
Description
Tab configs loaded from ~/.warp/tab_configs/ appeared in
non-deterministic order in the + menu and the default session mode
dropdown in settings. The root cause is WalkDir returning directory
entries in filesystem order, which varies across platforms and runs.

Added a case-insensitive alphabetical sort by name in load_tab_configs()
(app/src/user_config/native.rs), so all consumers receive a stable,
predictable ordering without needing per-site sorting.
Testing
- cargo check -p warp passes with no errors.
- No new tests added. The change is a single sort_by call on an existing
Vec<TabConfig> — the sorting behavior is deterministic and trivially
correct. Manual verification: create multiple .toml files in
~/.warp/tab_configs/ with names like "Zebra", "alpha", "Beta" and
confirm they appear as alpha, Beta, Zebra in the + menu.
Agent Mode
- Warp Agent Mode - This PR was created via Warp's AI Agent Mode
Changelog Entries for Stable                 

CHANGELOG-BUG-FIX: Tab configs in the + menu and default session mode
dropdown are now sorted alphabetically by name instead of appearing in
random order.
2026-04-28 17:03:56 -05:00
Yunfan Yang 2d0d88fea6 Add reconnection logic to remote server (#9289)
Migrated from /Users/kevinyang/Documents/GitHub/warp-internal via
`script/migrate-private-to-public`.

## Commits

- 823458b Add reconnect logic to remote server
- 104aafb tech spec
- c4039c3 clippy
- c4e3a39 nit
2026-04-28 18:02:55 -04:00
Abhishek Pandya e3470ae088 @ context menu fixes. (#9237)
## Description
<!-- Please remember to add your design buddy onto the PR for review, if
it contains any UI changes! -->

WISOTT! Fixes:
- positioning of the menu in the new cloud mode input
- some sharp corners poking through rounded ones for the selected item

<img width="588" height="312" alt="Screenshot 2026-04-27 at 9 01 19 PM"
src="https://github.com/user-attachments/assets/03cd565a-e869-4a3a-9ae3-98dd3d86c068"
/>


## 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
-->

See image!

## Agent Mode
- [x] Warp Agent Mode - This PR was created via Warp's AI Agent Mode
2026-04-28 21:15:13 +00:00
seemeroland fc0ce9f8c0 Don't require login to open file from URI (#9300) 2026-04-28 20:42:23 +00:00
Varoon Kodithala bc3fffa7e5 [APP-4285] Send slash commands as follow-ups with active AI streams (#9243)
## Description

Running `/pr-comments` (or any other slash command that targets the currently-selected conversation) while an AI response stream is in-flight crashed in debug builds. `BlocklistAIController::send_request_input` hits its in-flight invariant and fires `safe_assert!(false, ...)` (panics in debug, returns `Err` in release).

The user-query path (`send_query`) avoids this because it pre-cancels any active stream on the target conversation with `CancellationReason::FollowUpSubmitted` before calling `send_request_input`. Slash commands bypass that path and dispatch directly via `SlashCommandRequest::send_request`, so the cancel never happens.

This PR makes `send_slash_command_request` mirror that cancel-and-resend: if the target conversation has an in-flight stream, cancel it before dispatching. All `SlashCommandRequest` variants are conceptually a fresh user turn (a follow-up), so this matches the semantics users already get from typing a follow-up message.

`send_queued_slash_command_request` is unchanged — it's only invoked from `Input::submit_queued_prompt` once the conversation is idle, so no pre-cancel is needed.

## Testing

Verified locally. Demo [here](https://www.loom.com/share/a9638ac9a53b48349ce21d03eaba516a)!

- Manually reproduced the crash on a dogfood debug build by triggering `/pr-comments` mid-stream; confirmed the panic at the `safe_assert!` in `BlocklistAIController::send_request_input`.
- After the fix: same repro cancels the in-flight turn and dispatches `/pr-comments` cleanly. Same behavior verified for `/skills` (InvokeSkill), `/compact` (Summarize), and `/create-environment`.

## Agent Mode

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

## Changelog Entries for Stable

CHANGELOG-BUG-FIX: Fixed an issue where slash commands sent while an agent was still responding were silently dropped. Now, slash commands like `/pr-comments` run as follow-ups, just like typed messages.

---

Run: https://staging.warp.dev/conversation/aeecfa2d-1456-440b-9961-c27295d82531
Plan: https://staging.warp.dev/drive/notebook/Ryj2w6xDSqDwNJYhpwwI0Vly
2026-04-28 14:51:29 -04:00
Matthew AlbrightandOz 57e8e3e9be Replay agent events on restore (#9251)
## Description

Restore orchestration event delivery on the client after a Warp restart
so that a parent conversation continues to receive lifecycle events and
inbox messages from its children — including terminal events that
arrived while Warp was not running.

See the full design in `specs/replay-agent-events-on-restore/PRODUCT.md`
and `specs/replay-agent-events-on-restore/TECH.md`.

This is a re-land of warpdotdev/warp-internal#24999, which was reverted
in warpdotdev/warp-internal#25055 due to a CI race. This version fixes
the test compilation issue (missing fields in `AmbientAgentTask` struct
literal in `conversation_ended_tombstone_view_tests.rs`).

### What

- Persists the per-conversation event cursor across restarts.
- Adds `last_event_sequence: Option<i64>` to `AgentConversationData`
(SQLite) and `AIConversation`.
- New `BlocklistAIHistoryModel::update_event_sequence` helper writes the
cursor through `write_updated_conversation_state` after each event
batch.
- Also persists the cursor to the server (fire-and-forget) so driver /
cloud restarts can resume without local SQLite state.
- Restores `OrchestrationEventPoller.watched_run_ids` and re-establishes
event delivery on `BlocklistAIHistoryEvent::RestoredConversations`.
- New `on_restored_conversations` handler issues `GET
/agent/runs/{run_id}` for each restored parent and uses the response
inline `children` and `last_event_sequence` to populate watched run ids
and merge the cursor (`max(SQLite, server)`).
- Fetch failures retry with exponential backoff (1s, 2s, 5s, 10s capped)
keyed off a per-conversation `restore_fetch_failures` counter; reset on
success and on conversation removal.
- Gated on `OrchestrationV2`. Shared-session viewers and conversations
without children are skipped.
- `Success` parents resume delivery immediately; `InProgress` parents
defer to the existing `on_conversation_status_updated` path.
- Restores V1 lifecycle subscriptions on restart by extending the
existing `RestoredConversations` handler in `OrchestrationEventService`
to re-register `lifecycle_subscription_routes` for restored child
conversations whose parents are present locally.

### Why

After a Warp restart, parent conversations were silently receiving no
further events from children. The `event_cursor` in
`OrchestrationEventPoller` was always initialized to 0, so even if
delivery had resumed, every event since the start of the conversation
would have replayed and produced duplicate messages. V1 lifecycle
subscription routes were also not restored, so V1 parents missed child
status transitions.

## Testing

- Added unit tests in
`app/src/ai/blocklist/orchestration_event_poller_tests.rs` covering:
cursor merge from server vs SQLite, retry on `get_ambient_agent_task`
failure, V2 gating, shared-session-viewer exclusion, cleanup on delete,
and `last_event_sequence` round-trip through
`AIConversation::new_restored`.
- Added unit test coverage in
`app/src/ai/blocklist/orchestration_events_tests.rs` for V1 lifecycle
re-registration on restore.
- Manual verification per
`specs/replay-agent-events-on-restore/TECH.md`.

## Server API dependencies

- [x] Does this change rely on a [new server
API](https://www.notion.so/warpdev/How-to-add-a-new-full-stack-feature-8412cede405a4ec194b32bdd4b951035?pvs=4#04da1e6a493542d68b3e998c7d339640)?
- [x] If so, is the use of this API restricted to client channels that
rely on the staging server (e.g. WarpDev)?

The companion server change adds:
- `last_event_sequence` on `Task` (`ai_tasks` column), surfaced inline
on `GET /agent/runs/:run_id`.
- `PATCH /agent/runs/:run_id/event-sequence` for client cursor writes.
- `children` inline on the `GET /agent/runs/:run_id` response.

## 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-04-28 14:24:54 -04:00
Yunfan Yang 6bd99eb8e4 Add no-op telemetry context provider for remote server (#9232)
## Description
Currently our preview remote server implementation could crash if we
tried to send a telemetry event because we never initialized our
telemetry context provider

We will migrate this soon to an actual telemetry provider once we have
auth syncing. But for now, we are going to use a noop telemetry provider

## Testing
Tested locally to confirm this is no longer panicking
2026-04-28 17:36:40 +00:00
harryalbertandOz d24408ff25 Pin conversation list kebab button to the right side of items (#9245)
## Description

Previously we were switching the kebab menu button to the left side of
conversation list items when the menu was on the right. This looked bad
(and isn't really necessary as long as we open the actual menu on the
left side of the button instead of the right), so we're changing it to
just stay on the right of the item.

## Testing
demo: https://www.loom.com/share/c6dee7c51c2b49228c4b44a9d590c7b0

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

_Conversation:
https://staging.warp.dev/conversation/29ec4431-61fe-4d20-91ec-2e841fc3f389_
_Run:
https://oz.staging.warp.dev/runs/019dd4d5-9798-7d71-af0b-8e0b15496f18_

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

Co-authored-by: Oz <oz-agent@warp.dev>
2026-04-28 16:51:30 +00:00
Edward ShaoandOz 7e189ead1a [APP-4260] Disable commit message editor during commit operation (#9235)
## Description
Disables the commit message editor while the async commit (and optional
push / create-PR chain) is in flight, so the user can't edit the message
text mid-operation.

Fixes APP-4260.

## Testing
Manually verified the editor is locked once "Confirm" is pressed and
stays locked through the async commit/push/PR flow.

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

CHANGELOG-BUG-FIX: Disabled the commit message editor while a git commit
is being performed in the git operations dialog.


[Conversation](https://staging.warp.dev/conversation/11795cb8-3dcc-4bcd-90c9-53f974585fe6)

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

Co-authored-by: Oz <oz-agent@warp.dev>
2026-04-28 12:32:15 -04:00
Varoon Kodithala c9a68ca71e [APP-4249] Set default cwd for project-scoped MCP servers (#9239)
## Description

### Motivation

File-based stdio MCP servers spawned from a project's `.mcp.json` (e.g. `pnpm run mcp:foo`, or anything using `./tooling_scripts/...`) fail with:

```
Transport creation error: No such file or directory (os error 2)
```

Root cause: when the user's `.mcp.json` doesn't include a `working_directory`, Warp's spawner inherits whatever cwd Warp was launched from rather than the directory the config was discovered in. Two failure modes share this same root cause:

- **Repo-relative commands/args** (e.g. `./tooling_scripts/foo`, `node ./src/server.js`) can't be resolved from outside the repo, so `execvp` returns `ENOENT`.
- **Workspace-aware launchers** like `pnpm`/`npm`/`yarn` walk up from cwd looking for `package.json` (and workspace manifests). When cwd isn't inside the repo, they bail out before launching the requested script — surfacing as `ENOENT` from the spawner's perspective.

`working_directory` is a Warp/VS-Code-style extension; the canonical Anthropic/Cursor MCP schemas don't include it, so most `.mcp.json` files in the wild don't set it.

### Implementation

- New helper `FileBasedMCPManager::spawn_root_for_installation(uuid)` returning the discovery root for any file-based install: the repo root for project-scoped configs, the home directory for global configs (Warp and third-party). Returns `None` for non-file-based installs (e.g. cloud-templated ones), leaving them unaffected. Global Warp installs are remapped from `~/.warp/` (Warp internal state) to `~` so all global installs share a consistent cwd.
- In `TemplatableMCPServerManager::spawn_server_impl`, default `cli_server.cwd_parameter` from this helper when unset. Single funnel — covers both auto-spawn and the manual UI opt-in path. User-supplied `working_directory` always wins.
- ENOENT-aware logging at the spawn site: when `TokioChildProcess::spawn()` fails with `NotFound`, the MCP log file now spells out the server name, the missing executable, the cwd we used, and a hint pointing the user at `working_directory`. The user-surfaced error string is unchanged.
- Documented the new defaulting behavior and `working_directory` override in `resources/bundled/skills/add-mcp-server/SKILL.md`.

## Testing

Verified spawn-site behavior manually. Demo [here](https://www.loom.com/share/ec01d98ae9114433b8ae87f5f17adfd4)!

- Added `test_parse_cli_server_preserves_explicit_working_directory` in `mod_test.rs` to lock in that an explicitly-set `working_directory` round-trips through parsing and won't be clobbered by the new defaulting logic.
- Skipped a unit test for the new helper itself — it's a thin lookup over `file_based_servers_by_root` and the sorted-pick policy is straightforward enough to validate manually.
- Spawn-site behavior (cwd actually applied, ENOENT log emission) verified manually against a `pnpm`\-based repro.

## Agent Mode

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

## Changelog Entries for Stable

CHANGELOG-BUG-FIX: Project-scoped file-based MCP servers now spawn from the repo root by default (and global ones from `~`), so configs with relative commands/args (and workspace launchers like `pnpm`/`npm`) work without an explicit `working_directory`.
2026-04-28 12:15:52 -04:00
Edward ShaoandOz 3f120e438d [WAR-7381] Move "Discard all" to end of code review overflow menu (#9236)
## Description

Moves the "Discard all" menu item to the last position in
`header_menu_items_new`, so it appears after the AI context and comment
items. This matches the intended UX ordering from
[WAR-7381](https://linear.app/warpdotdev/issue/WAR-7381/discard-all-should-be-the-last-item-in-the-list).

## Testing

Manually verified the ordering logic. No new tests needed — this is a
pure reordering of existing menu items with no behavioral changes.

## 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-04-28 12:13:46 -04:00