Repository navigation
Continue a usage-limited chat with another account or agent - #31241
Conversation
…ore its next message A running chat's agent read its account only when it started, and nothing compared it with the account a start would use now, so open chats kept answering on the old account after a switch. The agent a chat runs now records the account its launch used, and the host's replace-before-the- next-send check replaces an idle one whose account is no longer what a start would use. A chat mid-reply finishes on the old account first. Claude chats follow; agents whose chats keep the account they were created on are never compared. A chat's model-list reads and saves now use the account it runs on, so a moved chat no longer writes its new account's list under its first account (STA-11281). Tracked in STA-11211.
…er that wires the host
|
A chat that reaches its usage limit should offer the ways to keep working beside the warning. This PR adds account actions on the chat's host and Hand Off to Another Agent. Continue Now appears only after the provider's reported reset time has passed; it stays hidden when no reset time is known. Switching accounts does not send anything: the next message you send uses the selected account. The account action reuses the existing switcher after the host verifies that this chat's saved history is available to every native account destination. With at most one signed-in account, a local chat opens Add Account…; a paired chat offers Hand Off only. Isolated or unverified history also offers Hand Off only. Add and Manage open the chat host's native account view without changing the saved Windows/WSL preference. Explicit location choices and ordinary Settings/sidebar navigation restore the normal preference. Hand Off excludes launch modes of the same CLI, uses the source workspace and opens the existing chooser. The final repair removes excluded source-family rows from the actual menu as well as its selection, search and terminal paths, tracked in STA-13138. Its new branch-only screenshot is recorded in the scoped picker evidence below. With no alternative available, Start is disabled. A Claude destination opens an editable draft that still requires Send. File-backed chats intentionally pass their existing live native file, with no export or snapshot file. Database-backed chats pass accurately labelled recent loaded messages; full saved history there remains a temporary limitation tracked in STA-11454. Older hosts safely omit the two optional read-only recovery fields and use the recent-message fallback. Nothing is saved for these fields and no minimum server version changes. Six source-review rounds are complete, including the reset timer fix verification. The review fixed account-destination proof, repeated filesystem discovery, stale hand-off preparation, paired roster updates, native Windows account navigation, same-CLI exclusion, missing native-file admission and source-directory ownership. Reset eligibility now uses current wall time and a capped boundary timer with cleanup. The shorter warning copy is intended, retaining the sentence removal in #33392 and the October 25 reset-time ruling; manual composer sends remain available. Final reviewed and pushed head is
Before integration, the reset delta passed56 focused renderer tests. No runtime latency claim is made by these count contracts. Current-head CI for Requested inline recovery row — Lead-in and rendered actions now share one wrapping row. A missing account action leaves no empty slot; the disabled account control keeps its width while loading. The screenshot run covers Claude with Switch Account, Claude without an account action, and Codex, with browser checks for narrow wrapping and the internally empty paired account menu. QA3815 passed this scoped renderer check on the exact head: three primary 1100×740 frames, five supporting frames and ten state/width geometry captures, with 54 DOM/geometry assertions passing and no production action attempts. The independent audit checked all listed production blobs, fixture bindings, raw geometry and eight images. This covers macOS, dark theme and English only; the pending state is supplied through props, with no real loading transition or RPC-delay claim. Report: These are declared renderer fixtures, with no agents, account operation, Start or send. Earlier real-agent and picker evidence below retains its original build and limits. The full carried screenshot table is unchanged. Final scoped picker evidence — ticket3789 Production Hand Off picker screenshot. Local image: The scoped picker evidence audit passed: exact The audited production imports/styles and declared inventory are limited to this CLI-only renderer fixture. The primary screenshot was directly inspected. The nonempty flow is unchanged through What was exercised and carried forward Real-agent evidence is carried from
Quota failures were declared success-bound replay fixtures, not natural account exhaustion. Agent replies, recorded file reads and UI actions were real. Raw JSONL reads sometimes truncated; successful follow-up extraction is identified separately. Empty nongit-workspace searches returned exit 1 while original-file reads succeeded. The initial long-history setup repeated its probe and did not establish beyond-tail coverage; the later fact-free source/tail measurements and real destination did. No extra agent rounds are claimed for UI/Settings, saved-unlisted choice or controlled-delay experiments: those use CI/renderer contracts under the QA classification. Controlled-delay seams were unavailable, native-picker interaction was not tested, and no live Windows/WSL run is claimed. Actual successful agents in these accepted records are Claude, Codex, OpenCode, OMP and Pi, with Pi's narrower scope above. Separately registered OpenCode2 was not exercised: only its installed Account sign-in completion and repeated switcher testing waived by Brennan (October 22): “Why do I need four claude sign ins??? Isn't this reusing this existing claude switcher? This doesn't need to be tested if reusing the same code”. That repeated batch was cancelled; it is not a new pass or a blanket waiver for other agents/flows. The earlier real managed 1->2->1 evidence remains accepted. Local Add/Manage, paired Accounts routing/parity and loading behavior use renderer/source contracts and the existing screenshots; earlier routing-only attempts established ordinary local Accounts but did not complete eligible quota-row routing or parity. A listed OMP model inspection did not prove saved-unlisted continuity. The later Stop-only attempt never reached a source request; its cleanup also left the disposable QA profile's OMP command at Deferred and inherited observations A failed Windows Account Location settings write can end the temporary native-account view even though the preference was not saved; reopen chat Add/Manage or retry the location choice. This low-impact failure case is deferred, tracked in STA-13139. The final repair removes repeated retained-chat tab scans by reusing the existing index. Account menus share one observed host stream and stable provider results, keeping unchanged Claude menus quiet during Codex/other-host updates; explicit reloads remain fresh. Operation and render contracts cover100/1000 retained chats and10/100 account readers, including real producer counts, meaningful updates and cleanup. No measured latency claim is made. Clicking Accounts in the Settings sidebar intentionally returns to the ordinary saved view, including when Accounts is already selected; it writes no preference. Source-family exclusion can leave misleading existing “No enabled Agents” copy when only excluded modes are detected. This copy-only P2 is assigned and parented as STA-13153, deferred without changing the settled exclusion policy. Genuinely empty-host feedback is separately fixed by Historical observations were tracked separately: STA-11573 recorded draft loss after restart on the old main build and is now Done; this review does not claim it remains on current main. STA-11589, STA-11590, and STA-11596 recorded missing-file wording, a generic OpenCode quota error and delayed dialog layout shift. Those historical QA reports are not current-head reproductions or newly asserted blockers. The separate socket-test flake was fixed in #31520. Intermittent History zero counts/previews, workspace labels, loading/connecting and renderer observations did not establish a PR cause or data loss; they are not silently promoted to passes or repaired here. All accepted selected packets retained independent exact-file/byte/hash checks and their original provenance limits. Cleanup records support recorded owned processes stopped and assigned ports clear; they are bounded inventories, not every machine process. Temporary trust-key restoration preserved the other checked data; genuine histories stayed. Real config hash changes during concurrent QA had unknown attribution, and no contents were read/copied/restored. The reset evidence audit accepts the two screenshots and 27 payload hashes, with runtime full-head/isolation details beyond receipts remaining lead attestations. Ticket2437's later check found six recorded PIDs absent/ports clear; the targeted retry2151 found 58 recorded identities absent. Earlier cleanup/setup failures remain historical limitations, not successful flow evidence. For Brennan's review The reset fixture before/after frames prove the reset control on their historical build; the new inline row evidence is above. Earlier UI captures below retain their original build labels. All carried screenshots are retained here with their original scope: Three code spots for judgment: reset-time shortcut, owning-host file and account proof, chat-owned Accounts visit. |
…split at-rest suites Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Main's keyed journal records deliver each change after an epoch's frozen prefix as an outcome sequence naming touched keys instead of typed rows. The receiving-account index now re-reads those keys at their current values: queue cards by id, a deleted submission retires its exact notice, and a deleted item drives the existing recovery rebuild, with Stop marks still excluded. The in-process read row exposes the already-persisted queue.cards keys and per-key deletion facts; itemIds and submissionIds keep listing every touched key. The mobile unknown-consumer test mocks MobileSwitch as main's picker test does. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…2025/usage-limit-actions # Conflicts: # src/main/claude-accounts/claude-profile-router.ts # src/main/claude/claude-structured-launch-home.ts # src/main/native-chat/agent-session-wire/structured-agent-session-options-read.test.ts # src/main/native-chat/agent-session-wire/structured-agent-session-options-read.ts # src/main/native-chat/structured-agent-cli-conversations.ts # src/main/opencode/opencode-transcript-import.ts # src/renderer/src/components/agent-session-continuation/AgentSessionContinuationDialog.test.tsx # src/renderer/src/components/agent-session-continuation/AgentSessionContinuationDialog.tsx # src/renderer/src/components/native-chat/NativeChatMessageList.turn-status.test.tsx # src/renderer/src/components/native-chat/NativeChatNoticeRow.test.tsx # src/renderer/src/components/native-chat/NativeChatNoticeRow.tsx # src/renderer/src/components/native-chat/NativeChatStructuredSession.tsx # src/renderer/src/components/native-chat/use-structured-agent-session-option-state.ts # src/renderer/src/components/native-chat/use-structured-agent-session-options.ts # src/renderer/src/components/settings/AccountsPane.owner-scope.test.tsx # src/renderer/src/components/settings/chat-settings-unsaved-guard.test.tsx # src/renderer/src/components/status-bar/ClaudeSwitcherMenu.tsx # src/renderer/src/i18n/locales/en.json # src/renderer/src/i18n/locales/es.json # src/renderer/src/i18n/locales/fr.json # src/renderer/src/i18n/locales/ja.json # src/renderer/src/i18n/locales/ko.json # src/renderer/src/i18n/locales/zh.json # src/renderer/src/lib/settings-navigation-types.ts
…mit-actions # Conflicts: # src/main/claude-accounts/claude-profile-router.ts # src/renderer/src/i18n/locales/en.json # src/renderer/src/i18n/locales/es.json # src/renderer/src/i18n/locales/fr.json # src/renderer/src/i18n/locales/ja.json # src/renderer/src/i18n/locales/ko.json # src/renderer/src/i18n/locales/zh.json
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
No actionable comments were generated in the recent review.
|
There was a problem hiding this comment.
Actionable comments posted: 2

Review info
-
Run configuration-
- Source mode: Auto
- Repository: Unavailable
- Branch: Unavailable
- File: No configuration file from this repository applied
- Commit: Unavailable
- Layers: Repository UI
- Review profile: CHILL
- Plan: Advanced
- Run ID:
76af7cb4-75af-4148-a0a7-c8ce9a8a8f87
Files selected for processing: 80-
src/main/claude-accounts/claude-launch-routing.test.tssrc/main/claude-accounts/claude-profile-router.tssrc/main/claude-accounts/claude-profile-selection-homes.tssrc/main/claude/claude-launch-destination-home.tssrc/main/claude/claude-structured-launch-account-routing.test.tssrc/main/claude/claude-structured-launch-home.tssrc/main/claude/claude-structured-launch-resolution.tssrc/main/claude/claude-structured-session-acquisition.tssrc/main/claude/claude-structured-session-publication.tssrc/main/native-chat/agent-model-catalog/agent-model-catalog-fingerprint.tssrc/main/native-chat/agent-model-catalog/agent-model-catalog-prewarm.test.tssrc/main/native-chat/agent-model-catalog/agent-model-catalog-running-account.tssrc/main/native-chat/agent-model-catalog/agent-model-catalog-service.tssrc/main/native-chat/agent-session-wire/structured-agent-session-acquisition.tssrc/main/native-chat/agent-session-wire/structured-agent-session-adapter.tssrc/main/native-chat/agent-session-wire/structured-agent-session-attach-flow.tssrc/main/native-chat/agent-session-wire/structured-agent-session-attach-orchestration.tssrc/main/native-chat/agent-session-wire/structured-agent-session-attach-publish.tssrc/main/native-chat/agent-session-wire/structured-agent-session-host-delivery.tssrc/main/native-chat/agent-session-wire/structured-agent-session-host-types.tssrc/main/native-chat/agent-session-wire/structured-agent-session-host.tssrc/main/native-chat/agent-session-wire/structured-agent-session-options-read.test.tssrc/main/native-chat/agent-session-wire/structured-agent-session-options-read.tssrc/main/native-chat/agent-session-wire/structured-agent-session-outgrown-child.test.tssrc/main/native-chat/agent-session-wire/structured-agent-session-outgrown-child.tssrc/main/native-chat/agent-session-wire/structured-agent-session-recovery-read.test.tssrc/main/native-chat/agent-session-wire/structured-agent-session-recovery-read.tssrc/main/native-chat/structured-agent-cli-conversations.tssrc/main/opencode/opencode-transcript-import.tssrc/main/runtime/rpc/methods/structured-agent-session-options-read.tssrc/main/runtime/session-tabs/structured-session-account-home.tssrc/main/runtime/structured-agent-model-catalog-wiring.tssrc/main/runtime/structured-agent-runtime-metadata.tssrc/main/runtime/structured-agent-runtime-registration-types.tssrc/main/runtime/structured-agent-session-runtime.tssrc/main/runtime/structured-session-recovery-options.test.tssrc/main/runtime/structured-session-recovery-options.tssrc/main/runtime/workspaces/workspace-process-listing-dependencies.tssrc/main/runtime/workspaces/workspace-process-listing.tssrc/renderer/src/components/agent-session-continuation/AgentSessionContinuationDialog.test.tsxsrc/renderer/src/components/agent-session-continuation/AgentSessionContinuationDialog.tsxsrc/renderer/src/components/agent-session-continuation/agent-session-continuation-selection.tssrc/renderer/src/components/native-chat/NativeChatInterruptedContinue.tsxsrc/renderer/src/components/native-chat/NativeChatMessageList.turn-status.test.tsxsrc/renderer/src/components/native-chat/NativeChatNoticeRow.test.tsxsrc/renderer/src/components/native-chat/NativeChatNoticeRow.tsxsrc/renderer/src/components/native-chat/NativeChatStructuredSession.tsxsrc/renderer/src/components/native-chat/NativeChatUsageLimitActions.test.tsxsrc/renderer/src/components/native-chat/NativeChatUsageLimitActions.tsxsrc/renderer/src/components/native-chat/use-structured-agent-session-option-state.tssrc/renderer/src/components/native-chat/use-structured-agent-session-options.tssrc/renderer/src/components/native-chat/use-structured-agent-session.tssrc/renderer/src/components/settings/AccountsPane.owner-scope.test.tsxsrc/renderer/src/components/settings/AccountsPane.tsxsrc/renderer/src/components/settings/accounts-pane-location-section.tsxsrc/renderer/src/components/settings/accounts-pane-types.tssrc/renderer/src/components/settings/chat-settings-unsaved-guard.test.tsxsrc/renderer/src/components/settings/settings-capability-section-renderers.tsxsrc/renderer/src/components/settings/settings-view-model.tssrc/renderer/src/components/settings/use-settings-host-navigation.tssrc/renderer/src/components/settings/use-settings-page-effects.tssrc/renderer/src/components/settings/use-settings-store-model.tssrc/renderer/src/components/status-bar/ClaudeSwitcherMenu.tsxsrc/renderer/src/components/status-bar/ProviderAccountChatButton.tsxsrc/renderer/src/components/status-bar/ProviderDetailsMenu.tsxsrc/renderer/src/components/status-bar/claude-status-sign-in.test.tsxsrc/renderer/src/components/status-bar/status-bar-claude-accounts.tssrc/renderer/src/components/status-bar/use-provider-account-list.tssrc/renderer/src/i18n/en-runtime-required.jsonsrc/renderer/src/i18n/locales/en.jsonsrc/renderer/src/i18n/locales/es.jsonsrc/renderer/src/i18n/locales/fr.jsonsrc/renderer/src/i18n/locales/ja.jsonsrc/renderer/src/i18n/locales/ko.jsonsrc/renderer/src/i18n/locales/zh.jsonsrc/renderer/src/lib/agent-session-continuation.tssrc/renderer/src/lib/settings-navigation-types.tssrc/shared/agent-session-account-home.tssrc/shared/agent-session-options-result.tssrc/shared/telemetry-property-schemas.ts
Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 5 remain after this review.
-
There was a problem hiding this comment.
Actionable comments posted: 2

Review info
-
Run configuration-
- Source mode: Auto
- Repository: Unavailable
- Branch: Unavailable
- File: No configuration file from this repository applied
- Commit: Unavailable
- Layers: Repository UI
- Review profile: CHILL
- Plan: Advanced
- Run ID:
a118121c-b7ee-46d8-a8c2-029c7aab7440
Files selected for processing: 41-
src/main/claude-accounts/claude-account-usage-preparation.tssrc/main/claude-accounts/claude-launch-routing.test.tssrc/main/claude-accounts/claude-profile-router.tssrc/main/native-chat/agent-session-wire/structured-agent-session-options-read.tssrc/main/native-chat/agent-session-wire/structured-agent-session-recovery-read.tssrc/main/native-chat/structured-agent-cli-conversations.tssrc/main/opencode/opencode-transcript-import.tssrc/main/runtime/rpc/methods/structured-agent-session-options-read.tssrc/renderer/src/components/agent-session-continuation/AgentSessionContinuationDialog.test.tsxsrc/renderer/src/components/agent-session-continuation/AgentSessionContinuationDialog.tsxsrc/renderer/src/components/agent-session-continuation/agent-session-continuation-selection.tssrc/renderer/src/components/native-chat/NativeChatInterruptedContinue.tsxsrc/renderer/src/components/native-chat/NativeChatMessageList.turn-status.test.tsxsrc/renderer/src/components/native-chat/NativeChatNoticeRow.test.tsxsrc/renderer/src/components/native-chat/NativeChatNoticeRow.tsxsrc/renderer/src/components/native-chat/NativeChatStructuredSession.tsxsrc/renderer/src/components/native-chat/NativeChatUsageLimitActions.tsxsrc/renderer/src/components/native-chat/use-structured-agent-session-option-state.tssrc/renderer/src/components/native-chat/use-structured-agent-session-options.tssrc/renderer/src/components/native-chat/use-structured-agent-session.tssrc/renderer/src/components/settings/AccountsPane.owner-scope.test.tsxsrc/renderer/src/components/settings/AccountsPane.tsxsrc/renderer/src/components/settings/settings-capability-section-renderers.tsxsrc/renderer/src/components/settings/settings-view-model.tssrc/renderer/src/components/settings/use-settings-page-effects.tssrc/renderer/src/components/settings/use-settings-store-model.tssrc/renderer/src/components/status-bar/ClaudeSwitcherMenu.tsxsrc/renderer/src/components/status-bar/ProviderDetailsMenu.tsxsrc/renderer/src/i18n/en-runtime-required.jsonsrc/renderer/src/i18n/locales/en.jsonsrc/renderer/src/i18n/locales/es.jsonsrc/renderer/src/i18n/locales/fr.jsonsrc/renderer/src/i18n/locales/ja.jsonsrc/renderer/src/i18n/locales/ko.jsonsrc/renderer/src/i18n/locales/zh.jsonsrc/renderer/src/lib/agent-session-continuation.tssrc/renderer/src/lib/settings-navigation-types.tssrc/renderer/src/lib/structured-agent-session-selection-lifetime.test.tsxsrc/shared/agent-session-options-result.tssrc/shared/structured-agent-session-options-read-owner.test.tssrc/shared/structured-agent-session-options-read-owner.ts
Files skipped from review as they are similar to previous changes: 7-
- src/renderer/src/i18n/en-runtime-required.json
- src/renderer/src/i18n/locales/en.json
- src/renderer/src/i18n/locales/zh.json
- src/renderer/src/i18n/locales/es.json
- src/renderer/src/i18n/locales/ja.json
- src/renderer/src/i18n/locales/fr.json
- src/renderer/src/i18n/locales/ko.json
Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 2 remain after this review.
-
There was a problem hiding this comment.
Actionable comments posted: 1

Review info
-
Run configuration-
- Source mode: Auto
- Repository: Unavailable
- Branch: Unavailable
- File: No configuration file from this repository applied
- Commit: Unavailable
- Layers: Repository UI
- Review profile: CHILL
- Plan: Advanced
- Run ID:
0090a89e-a5ac-4054-aad1-305bdcaca540
Files selected for processing: 18-
src/renderer/src/components/agent-session-continuation/AgentSessionContinuationDialog.test-fixture.tsxsrc/renderer/src/components/agent-session-continuation/AgentSessionContinuationDialog.test.tsxsrc/renderer/src/components/agent-session-continuation/AgentSessionContinuationDialog.tsxsrc/renderer/src/components/native-chat/NativeChatNoticeRow.test.tsxsrc/renderer/src/components/native-chat/NativeChatUsageLimitActions.scaling.test.tsxsrc/renderer/src/components/native-chat/NativeChatUsageLimitActions.test.tsxsrc/renderer/src/components/native-chat/NativeChatUsageLimitActions.tsxsrc/renderer/src/components/status-bar/ClaudeSwitcherForOwner.tsxsrc/renderer/src/components/status-bar/ClaudeSwitcherMenu.observation.test.tsxsrc/renderer/src/components/status-bar/ClaudeSwitcherMenu.owner-lifetime.test.tsxsrc/renderer/src/components/status-bar/ClaudeSwitcherMenu.tsxsrc/renderer/src/components/status-bar/provider-account-sync-key.tssrc/renderer/src/components/status-bar/status-bar-claude-accounts.tssrc/renderer/src/components/status-bar/use-claude-switcher-state.tssrc/renderer/src/components/status-bar/use-provider-account-list.tssrc/renderer/src/runtime/observed-provider-accounts.test.tsxsrc/renderer/src/runtime/observed-provider-accounts.tssrc/renderer/src/runtime/provider-account-observation.test-fixture.ts
Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 3 remain after this review.
-
There was a problem hiding this comment.
Actionable comments posted: 1

Review info
-
Run configuration-
- Source mode: Auto
- Repository: Unavailable
- Branch: Unavailable
- File: No configuration file from this repository applied
- Commit: Unavailable
- Layers: Repository UI
- Review profile: CHILL
- Plan: Advanced
- Run ID:
ccd6ddc6-22e5-441b-aedc-800094fd7a7c
Files selected for processing: 3-
src/renderer/src/components/status-bar/use-provider-account-list.tssrc/renderer/src/runtime/observed-provider-accounts.test.tsxsrc/renderer/src/runtime/provider-account-observation.test-fixture.ts
Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 4 remain after this review.
-
Resolved against 8fe9e7e (the old #31241 head) as the effective base, since main holds #31241 as a squash. Main wins everywhere it changed; the auto-continue delta is re-applied on top. Moves the chat Stop acceptance step beside its callees and the host's auto-continue wiring into the dependencies base so both files stay within the line limit.
v1.4.246 takes Chat UI out of Experimental (stablyai#36110). 1554 upstream commits over the fork's last sync (c98a2d6); 404 files conflicted. Resolution - Rebrand-only hunks (1393 in 195 files): upstream's text with the same Orca -> BrzA Studio rewrite the fork had applied there. - Locale catalogs: merged key by key; where both sides changed a key, upstream's text. The repo-wide rebrand of new upstream copy follows in its own commit. - Upstream-deleted files the fork had only rebranded: deleted. The coexistence cases of the deleted identity tests move to brza/ tests; the account-switch notice cases to native-chat/brza/. - stablyai#34824 (agent message card), cherry-picked earlier: upstream's version; the fork's Claude Code peer reader, hand-back heading and sender click ride on top of it. Fork features against new upstream - Continue in another account (P40) gives way to upstream's NativeChatUsageLimitActions (stablyai#31241); Resume automatically stays. - The per-chat account switch (P36) stays beside upstream's global switch (stablyai#30955): a pinned chat launches, and lists models, on its pinned account, and the switch drops the old account's acquisition receipt. - Match Terminal follows what the terminal shows, the chat theme when the terminal follows it; plugin terminal themes are offered as chat themes. - Islands Dark becomes useMonacoTheme's fallback for every surface. - New Orca identity copies: Windows protocol registration uses the brand scheme; brza-studio://plugins links are accepted beside orca://. - The Windows uninstaller no longer removes agent hooks: BrzA's app GUID hides an installed upstream Orca from ORCA_OTHER_INSTALL_STATE, and the hooks under ~/.orca are shared with it. - Files pushed past max-lines split into brza/ or sibling modules. Committed without the pre-commit hook: lint-staged over the merge's 18k files is killed. The lint and rebrand fixes follow in their own commits. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>





ELI5
When a chat hits its account's usage limit, its warning row only offers Continue. Using another account or handing the work to another agent requires leaving the conversation and finding those actions elsewhere. The row now offers an account action when this open chat can follow the selection and Hand Off to Another Agent, plus Continue Now once the limit's reported reset time has passed. Before the reset, or when the provider reports no reset time, Continue Now stays hidden because the same limit would refuse the message; after switching accounts, the next message the person sends continues on the new account.
Before / after
52f69604302beb5rendererClaude with no account action: Hand Off follows the text without an empty slot (
4302beb5renderer).Codex: Hand Off follows the text and wraps naturally in narrow panes (
4302beb5renderer).Switch Account opens the existing managed-account menu (historical integration
57a4934).For eligible local chats, Add Account opens this native Accounts view (historical
57a4934; image shows the destination, not completed row navigation).Hand Off lists other agents, with the source’s Claude modes excluded (
f0ab7bearenderer fixture).Continue Now appears after the reported reset (
323e395arenderer; timer evidence with the historical stacked layout).A real Claude destination replies after reading the handed-off OMP conversation (
8fe9e7e; explicit Send).The row and picker frames are declared renderer fixtures. The account menu, Accounts destination and completed reply come from the earlier real runs; the full evidence table and limits remain in the review status comment.
What Changed
The warning keeps its reset time and adds “Continue this chat without waiting:” followed by small outline buttons. Switch Account opens the existing account menu. With one signed-in account on this computer, Add Account… opens this chat’s native account settings. A paired host with at most one signed-in account offers Hand Off only; eligible paired hosts with two or more still offer Switch Account. Hand Off opens the existing dialog using this chat’s title and owning workspace, with a different available agent selected. File-backed sources pass their existing admitted native transcript; database-backed sources pass recent loaded chat messages. Full saved history for database-backed sources is a temporary limitation, tracked in STA-11454. No export files or retention mechanism are added. Without another available agent, Start is disabled. A Claude destination remains an editable draft that requires Send; other agents keep their existing submission behavior. The execution host resolves the file through the same account-scoped transcript importer used to open a chat in the command-line interface. The row reads the current options response on click so a newly created chat gets its saved transcript too. Older hosts or providers without a saved path use loaded chat context, labelled as chat messages. These controls disappear with Continue Now once another message is sent, and loading controls remain disabled.
Account eligibility comes from the chat's host: it verifies that launches follow account selection and that this conversation's projects store is shared with System default and every native account destination. An isolated or unverified store offers Hand Off only. Shared custom folders remain eligible. The options response carries optional canSwitchAccount and transcriptPath fields; neither is saved, and older peers safely omit or ignore them. A fresh eligibility read before each switch covers new roster destinations. Ordinary options reads outside a stopped usage-limit turn do no recovery discovery; lookup remains outside send/Stop serialization. Mounted paired rows observe their host’s account roster. A single current hand-off request prevents a late response reopening a cancelled or superseded dialog. Codex and OpenCode offer Hand Off only. The existing account menu, switching action and settings navigation target the chat’s host, including paired servers. Add and Manage open its native account view even when Windows Settings normally prefers WSL; explicit account-location choices and ordinary Settings visits retain their existing behavior and defaults. Chat-row switches skip terminal restart offers. The disabled account control keeps its width while loading. The lead-in and actions share one wrapping row, and settled chats with no account action leave no empty slot; switcher instances are keyed to their owner. The phone stays unchanged. No automatic continuation, saved field, new operation, or new runtime capability is added.
Why
Changing the selected account helps only if this exact conversation will use it. Reading the host's per-chat proof keeps the button honest for shared and isolated history, including with older servers. Reusing the existing account menu and hand-off dialog keeps their sign-in, switching, and launch behavior consistent. The common pattern derives recovery controls from the current stopped turn; the extra row entry points are an intended difference: the common pattern offers those workflows from a composer picker or plugin, while Orca's existing equivalents are the status-bar account switcher and hand-off dialog. Brennan chose the row to reach them. Account recovery keeps Orca's existing native resume and separate explicit hand-off, an intended mechanism difference from the common pattern that preserves the approved conversation behavior. Passing the saved transcript file is an intended transport difference that reuses the existing agent launch flow. Automatic retry and scheduled continuation are excluded by the approved product scope.
Linked Issue
Follow-up to the usage-limit warning introduced in #30396, tracked in #30955 for moving open chats to the selected account.
Visual Proof
The review status comment retains the accepted real-agent evidence from
8fe9e7e030ea, the separately identified private integration runs, their explicit agent limits, and the before/after reset screenshots on323e395a842. The reset images use the actual notice row in a declared hidden renderer fixture, with no provider or agent run.The final Hand Off picker uses the production dialog and menu in a scoped renderer fixture, with no agent launch: picker screenshot. Local image:
/Users/brennanbenson/orca-qa/usage-limit-actions/workers/pr-31241-final/qa3789-agent-menu-open.png. Evidence and limits:/Users/brennanbenson/orca-qa/usage-limit-actions/workers/pr-31241-final/qa3789-report.md. The independently audited and inspected capture is from exactf0ab7bea, using production imports/styles and a declared Claude/Claude Agent Teams/Codex/Gemini inventory on CLI surfaces only. Codex is visible and the source-family menu rows are absent. It proves no actual Start, agent launch, account operation or chat route. The five-minute stalled attempt and successful fresh-session retry remain recorded in the report. This unchanged nonempty flow carries through4302beb5.Testing
The integrated branch passed 160 tests across 12 named files covering account-history proof, source ownership, Settings routing, reset behavior, shared options reads, hand-off selection and cancellation. The subsequent repair passed 71 tests across 11 named files, including the actual picker rows, 100/1,000 retained chats, 10/100 account readers, provider/host isolation, equal serialized Settings replies, and pending account operations during an owner change. Tests count producer work separately from renders and verify that genuine account/name changes still update their consumers. The original implementations fail the corresponding regression controls.
The historical notice fixture correction passed 52 notice-row tests. The changed-code-quality correction passed its three affected files and 11 tests; it preserves the real account-controller producer and every operation/render assertion. The later type/config correction passed five focused files and 17 tests, preserving scheduled type coverage and the existing verification contracts. Restoring the existing empty-host explanation passed 13 rendered tests; its regression control first failed on the missing paragraph. The public-mock-type annotation passed the same 13 dialog tests, with runtime values and assertions unchanged. The existing feature-tip test adapter now follows the Settings navigation input, matching production host choice; all eight tests passed with every assertion unchanged. Normal pre-commit hooks passed. Current-head CI for
4302beb52d165f828db78ce8319c0e9896fe55ce: PR checks passed and Windows/WSL checks passed. The hosted Debian setup froze on the first attempt; the existing automatic retry passed in 10m47s, with no source change..Changed lifecycle and hand-off flows retain the accepted real-agent evidence and limits in the status comment. Later changes affect renderer/state contracts or verification only; they do not repeat agent QA. The final picker has its separate branch-only screenshot above. The owner-requested inline recovery layout is separately covered by 55 renderer tests, three primary screenshots, and supporting narrow, empty-menu and pending-control captures with geometry checks. The empty-host correction restores the existing localized paragraph from the same settled menu rows, without a new layout, control or interaction; rendered tests cover that state. The nonempty picker screenshot does not prove the empty flow, and no additional screenshot or agent run is claimed for the paragraph condition.
Integration and verification
The final reviewed and pushed head is
4302beb52d165f828db78ce8319c0e9896fe55ce. Correctness accepted onf0ab7beacarries through the accepted code-quality and type/config corrections and the restored empty-host feedback. The final independent mechanism comparison is complete ona1588114and carries through the test-only annotation at1dc20fa0and feature-tip adapter at476fb91d. The requested inline row layout is accepted on4302beb5, with the existing actions and reset behavior unchanged. Its CI result is listed above.2bdfcef56e87e104e95d8606e00b756a4ee883f0ab7bea8d00ba90029a833a15881141dc20fa0476fb91d4302beb5Agent skill upstream boundary
Notes
#30955 has landed, and this PR now targets main with its account-following behavior included. Merging this PR ships usable account recovery and hand-off actions.
Folder workspaces and git worktrees use the same owning-workspace hand-off path. Remote chats switch accounts only on their execution host, when that host verifies this conversation can move. Codex remains hand-off-only until the #30957 follow-up supplies account following. Older peers omit or ignore the optional response fields. The Session History list was considered for transcript lookup, but its scan roots omit isolated workspace account stores; the host importer already has the record-scoped lookup that covers them. Mobile behavior is unchanged.
Author: @BrennanKB5
Checklist