Skip to content

fix(agents): describe continuation drafts and link to the new session - #25989

Open
nwparker wants to merge 4 commits into
mainfrom
nwparker/fix-claude-continuation-toast
Open

nwparker wants to merge 4 commits into
mainfrom
nwparker/fix-claude-continuation-toast

Conversation

@nwparker

@nwparker nwparker commented Oct 6, 2026 •

Copy link
Copy Markdown
Contributor
Files Added Deleted Net
Test 4 $\color{#1a7f37}{\Huge{\mathbf{+}}}$​259 $\color{#cf222e}{\Huge{\mathbf{−}}}$​7 $\color{#1a7f37}{\Huge{\mathbf{+}}}$​252
Prod 9 $\color{#1a7f37}{\Huge{\mathbf{+}}}$​114 $\color{#cf222e}{\Huge{\mathbf{−}}}$​22 $\color{#1a7f37}{\Huge{\mathbf{+}}}$​92

ELI5

Continuing a Claude session loads a draft for you to review. The message now says it still needs Enter, and an Open session button takes you straight to the session that was created.

What Changed

Before, confirmed Claude continuations said their context had been sent even though it remained a draft, and the message gave no way to return to that new session. The success toast now follows the launcher's delivery mode and offers Open session. Other agents retain the sent wording.

The button captures the exact new tab and execution host, then validates its current workspace and group before revealing it through existing navigation. Paired terminal launches pass their host-returned identity through an optional renderer callback; paired structured launches resolve the admitted session's tab. This adds no wire fields. Closed or missing targets cannot select an unrelated tab. Older hosts that supply no identity omit the button. Failed and unconfirmed deliveries retain their Copy prompt action.

Why

Reusing delivery mode and existing host-aware navigation keeps wording accurate and avoids a parallel navigation path. Choosing the active or newest tab could open a different session after another launch or workspace switch. This replaces #21966 on current main; kana001-bit remains credited as co-author.

Linked Issue

Follows up #21896; supersedes #21966.

Visual Proof

Before and after were captured from a freshly built hidden Electron app using the actual continuation launcher and Claude prefilled draft. For the button check, another tab was selected before clicking Open session; the click restored the exact newly created tab.

Before:
before-toast.png

After:
button-toast.png

Testing

  • Before the original wording fix, confirmed-Claude delivery fails because it claims the context was sent.
  • 85 tests pass across nine focused continuation, terminal launch, paired terminal authority, structured activation, and workspace navigation suites, using the current locked dependencies.
  • Coverage includes synchronous delivery callbacks, a callback followed by a thrown launch, failed launches, unconfirmed delivery, removed tabs, moved groups, folder workspaces, captured SSH host/workspace targets, exact paired host-returned tab identity, legacy hosts without identity, and structured activation through the existing host-aware helper.
  • Renderer typecheck, localization verification and changed-code quality pass. After the runtime-catalog CI gate identified two omitted continuation messages, regenerated the required English boot catalog; pnpm run verify:localization-catalogs and pnpm run verify:localization-runtime-catalog pass. The catalog update adds only those two English values; existing values are unchanged. Refreshed onto current main to include the upstream fix(test): drop the duplicate resolveLaunchArgs that breaks main's lint #25997 correction for the unrelated duplicate test property that failed the earlier CI merge.
  • CI also exposed an unrelated main max-lines failure in the failure-copy translation table. Refreshed onto upstream fix(native-chat): split the attachment failure words out so Lint passes on main #26079, which fixes that baseline failure; no separate failure-copy change remains in this PR. Post-refresh continuation/navigation tests, renderer typecheck and exact localization catalog gate pass.
  • Actual macOS Electron launch and Open session button exercised via CDP; exact destination asserted and rendered state inspected. All validation windows remained hidden.
  • Manually checked the rendered behavior locally.
  • Automated tests added.

Review

Independent review caught a structured-navigation gap during implementation; the final code reuses the existing session activation helper, including active surface selection and paired-host activation. Exact workspace, execution host, group and tab ownership are checked by existing navigation before revealing a target.

Agent skill upstream boundary

  • Not applicable; no skill-installer source copied.

Notes

Merge risk: low. Physical Windows/Linux and paired SSH acceptance were not rerun; the shared renderer paths and paired authority behavior have focused automated coverage. New text uses the existing English fallback policy until translated. Structured drafts retain their existing delivery behavior; this change does not invent a new delivery event.

Checklist

  • Focused change; before/after, mechanism and alternatives explained.
  • Before/after screenshots attached.
  • Security, platform and SSH ownership reviewed.
  • Focused tests, renderer typecheck, localization and changed-code checks pass.

@nwparker
nwparker requested a review from brennanb2025 as a code owner October 6, 2026 22:15
@coderabbitai

coderabbitai Bot commented Oct 6, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: Repository UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: fbef3a56-8bf6-47f9-81dd-bd16190d4632
📥 Commits

Reviewing files that changed from the base of the PR and between aaae5f6 and 1a5da2a.

📒 Files selected for processing (2)
  • src/renderer/src/i18n/en-runtime-required.json
  • src/renderer/src/i18n/locales/en.json
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/renderer/src/i18n/locales/en.json

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 7 remain after this review.


📝 Walkthrough

Walkthrough

Launch paths now report created tab IDs. Workspace palette activation can activate structured agent-session tabs. Continuation feedback distinguishes draft-loaded prompts from sent prompts and can include an action to open the created session. English strings were added or updated for these messages and for several runtime-required failure and retry messages.

Priority: ⬇️ Low

Merge Risk: 🔵 Low · up to 1a5da

In some multi-host workspaces, Open session may fail to reveal the session it just created when worktree IDs repeat. The session delivery is unaffected, so the merge risk is bounded.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 44.44% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 9 functions across 11 files. (2 skipped: … Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Title check ✅ Passed The title clearly summarizes the main change: describing continuation drafts and linking users to the new session.
Description check ✅ Passed The description covers the required sections, explains the user-facing change and approach, links related issues, includes visual proof and testing details, and completes the relevant checklist items.
Full details: Docstring Coverage

Explanation

Docstring coverage is 44.44% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 9 functions across 11 files. (2 skipped: 2 unsupported.)

  • Fix all pre-merge checks with AI
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

✨ Finishing Touches 💡 1
🛠️ Fix failing CI checks 💡
  • Commit to this branch
  • Create a new PR

@nwparker nwparker changed the title fix(agents): say Claude continuation context is a draft fix(agents): describe continuation drafts and link to the new session Oct 6, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1


ℹ️ Review info
⚙️ Run configuration
  • Configuration used: Repository UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 30e298a7-8720-48ab-81d5-62bff9dfd9e8
📥 Commits

Reviewing files that changed from the base of the PR and between c893048 and 67971d1.

📒 Files selected for processing (12)
  • src/renderer/src/i18n/locales/en.json
  • src/renderer/src/lib/launch-agent-in-new-tab-structured-route.test.ts
  • src/renderer/src/lib/launch-agent-in-new-tab-structured-route.ts
  • src/renderer/src/lib/launch-agent-in-new-tab.ts
  • src/renderer/src/lib/launch-agent-session-continuation.test.ts
  • src/renderer/src/lib/launch-agent-session-continuation.ts
  • src/renderer/src/lib/launch-agent-web-host-tab.ts
  • src/renderer/src/lib/workspace-tab-palette-activation.test.ts
  • src/renderer/src/lib/workspace-tab-palette-activation.ts
  • src/renderer/src/runtime/web-runtime-session-terminal-host-authority.test.ts
  • src/renderer/src/runtime/web-runtime-session-types.ts
  • src/renderer/src/runtime/web-runtime-terminal-creation.ts

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 1 remain after this review.

...tab,
tabId: tab.id,
contentType: tab.contentType,
executionHostId

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

🔎 Supported by static analysis

🏁 Script executed:

sed -n '68,180p' src/renderer/src/lib/launch-agent-session-continuation.ts
sed -n '30,155p' src/renderer/src/lib/workspace-tab-palette-activation.ts
rg -n 'getKnownWorktreeById|executionHostId' src/renderer/src/store/slices/worktrees/listing/detected-worktree-meta.ts src/renderer/src/lib/launch-agent-session-continuation.test.ts

Repository: stablyai/orca

Length of output: 10846


🏁 Script executed:

rg -n -F -- 'function launchAgentInNewTab' src/renderer/src
rg -n -F -- 'getKnownWorktreeById:' src/renderer/src
rg -n -F -- 'getKnownWorktreeById = ' src/renderer/src
rg -n -F -- 'isUnifiedTabOwnedByWorktree' src/renderer/src
rg -n -F -- 'executionHostId' src/renderer/src/lib/launch-agent-in-new-tab.ts src/renderer/src/lib/launch-agent-session-continuation.ts src/renderer/src/store/slices/worktrees/listing/detected-worktree-meta.ts
rg --files src/renderer/src | rg 'launch-agent-in-new-tab|unified-tab|worktree.*listing|tab.*type'

Repository: stablyai/orca

Length of output: 19171


🏁 Script executed:

sed -n '100,220p' src/renderer/src/lib/launch-agent-in-new-tab.ts
sed -n '320,385p' src/renderer/src/lib/launch-agent-in-new-tab.ts
sed -n '330,380p' src/renderer/src/store/slices/worktree-helpers.ts
sed -n '1,115p' src/renderer/src/lib/unified-tab-host-ownership.ts
sed -n '1,190p' src/renderer/src/lib/launch-agent-in-new-tab-host-resolution.test.ts
rg -n 'interface UnifiedTab|type UnifiedTab|executionHostId.*UnifiedTab|executionHostId\\??:' src/renderer/src/lib src/renderer/src/store | head -100
rg -n 'findAmbiguousWorktreeIds|getPaletteOwnershipWorktreeIds' src/renderer/src/lib/workspace-tab-palette-activation.ts src/renderer/src/lib/unified-tab-host-ownership.ts src/renderer/src/lib

Repository: stablyai/orca

Length of output: 33637


🏁 Script executed:

rg -n -F -- 'createGetKnownWorktreeById' src/renderer/src/store
sed -n '380,455p' src/renderer/src/store/slices/worktree-helpers.ts
sed -n '190,325p' src/renderer/src/lib/launch-agent-in-new-tab.ts
sed -n '1,230p' src/renderer/src/lib/launch-agent-in-new-tab-structured.ts
sed -n '1,115p' src/renderer/src/lib/launch-agent-in-new-tab-structured-route.ts
rg -n 'export (interface|type) Tab|executionHostId' src/shared/tab-types.ts src/shared/tab-types
rg -n 'function resolveAgentLaunchExecutionContext|resolveAgentLaunchExecutionContext' src/renderer/src/lib

Repository: stablyai/orca

Length of output: 13275


🏁 Script executed:

sed -n '115,185p' src/renderer/src/store/slices/worktrees/session/worktree-slice-lookups.ts
rg -n 'createTab:' src/renderer/src/store
rg -n 'createTab\\s*\\(' src/renderer/src/store/slices src/renderer/src/store | head -80
rg -n 'beginStructuredAgentSessionProvisionalLaunch|executionHostId:' src/renderer/src/lib/structured-agent-session-provisional-tab.ts src/renderer/src/lib/structured-agent-session-provisional-tab*
sed -n '1,250p' src/renderer/src/lib/structured-agent-session-provisional-tab.ts
sed -n '1,95p' src/shared/tab-types.ts
sed -n '1,110p' src/renderer/src/lib/launch-agent-execution-context.ts
rg -n 'createTab' src/renderer/src/store/slices/worktrees src/renderer/src/store/slices/terminals src/renderer/src/store/slices/editor

Repository: stablyai/orca

Length of output: 17334


🏁 Script executed:

rg -n -F -- 'function findKnownWorktreeById' src/renderer/src
rg -n -F -- 'findKnownWorktreeById(' src/renderer/src/store
sed -n '1,145p' src/renderer/src/store/terminals/terminal-tab-creation.ts
sed -n '1,120p' src/renderer/src/store/terminals/terminal-actions.ts
rg -n 'executionHostId|activeWorkspaceExecutionHostId|createTab' src/renderer/src/store/terminals/terminal-tab-creation.ts src/renderer/src/store/terminals/terminal-actions.ts src/renderer/src/store/slices/worktrees/session/worktree-slice-lookups.ts

Repository: stablyai/orca

Length of output: 14902


🏁 Script executed:

sed -n '75,155p' src/renderer/src/store/slices/worktrees/listing/detected-worktree-meta.ts
sed -n '125,235p' src/renderer/src/store/terminals/terminal-tab-creation.ts
rg -n 'unifiedTabsByWorktree' src/renderer/src/store | head -80
rg -n 'getUnifiedTabPaletteExecutionHostId|executionHostId:.*hostId|executionHostId.*tab' src/renderer/src
rg -n 'ambiguous|executionHostId|Open session' src/renderer/src/lib/launch-agent-session-continuation.test.ts src/renderer/src/lib/workspace-tab-palette-activation.test.ts

Repository: stablyai/orca

Length of output: 33497


🏁 Script executed:

rg -n 'function planAgentSessionLaunch|export function planAgentSessionLaunch|executionHostId' src/renderer/src/lib/agent-session-launch-plan.ts
sed -n '1,180p' src/renderer/src/lib/agent-session-launch-plan.ts
sed -n '1,110p' src/renderer/src/lib/worktree-palette-runtime-owner-identity.test.ts
sed -n '1,115p' src/renderer/src/lib/worktree-execution-host-alias.ts
nl -ba src/renderer/src/lib/launch-agent-session-continuation.ts | sed -n '84,160p'
nl -ba src/renderer/src/lib/workspace-tab-palette-activation.ts | sed -n '54,89p'
nl -ba src/renderer/src/lib/unified-tab-host-ownership.ts | sed -n '30,75p'

Repository: stablyai/orca

Length of output: 19051


🏁 Script executed:

sed -n '1,220p' src/renderer/src/lib/agent-launch-route-input.ts
sed -n '165,195p' src/renderer/src/lib/agent-session-launch-plan.ts
rg -n 'activeWorkspaceExecutionHostId|executionHostId' src/renderer/src/lib/agent-launch-route-input.ts src/renderer/src/lib/agent-launch-routing.ts

Repository: stablyai/orca

Length of output: 10620


🏁 Script executed:

sed -n '1,120p' src/renderer/src/runtime/structured-agent-session-owner.ts
sed -n '1,130p' src/renderer/src/lib/worktree-runtime-owner.ts
rg -n 'resolveStructuredAgentSessionOwner|getActiveExecutionHostIdForWorktree' src/renderer/src/runtime src/renderer/src/lib/worktree-runtime-owner.ts src/renderer/src/lib/agent-launch-route-input.ts

Repository: stablyai/orca

Length of output: 9020


🏁 Script executed:

rg -n 'export function getExecutionHostIdForWorktree|function getExecutionHostIdForWorktree' src/renderer/src/lib/worktree-runtime-owner.ts
sed -n '285,385p' src/renderer/src/lib/worktree-runtime-owner.ts
rg -n 'function resolveActiveWorkspaceRoute|export function resolveActiveWorkspaceRoute' src/renderer/src/lib/worktree-operation-route.ts
sed -n '1,105p' src/renderer/src/lib/worktree-operation-route.ts

Repository: stablyai/orca

Length of output: 4271


🏁 Script executed:

sed -n '215,265p' src/renderer/src/lib/worktree-runtime-owner.ts
rg -n 'function resolveSelectedHostRoute|resolveSelectedHostRoute' src/renderer/src/lib/worktree-operation-route.ts
sed -n '105,175p' src/renderer/src/lib/worktree-operation-route.ts

Repository: stablyai/orca

Length of output: 4475


🏁 Script executed:

rg -n 'getKnownExecutionHostIdForWorktree' src/renderer/src/lib/worktree-runtime-owner.ts
sed -n '155,235p' src/renderer/src/lib/worktree-runtime-owner.ts

Repository: stablyai/orca

Length of output: 3726


🏁 Script executed:

rg -n -F -- 'launchAgentSessionContinuation(' src/renderer/src
rg -n -F -- 'launchAgentSessionContinuation' src/renderer/src --glob '!**/launch-agent-session-continuation.ts' --glob '!**/launch-agent-session-continuation.test.ts'

Repository: stablyai/orca

Length of output: 5588


🏁 Script executed:

sed -n '85,155p' src/renderer/src/components/agent-session-continuation/AgentSessionContinuationDialog.tsx
rg -n 'AgentSessionContinuationDialog' src/renderer/src

Repository: stablyai/orca

Length of output: 3883


🏁 Script executed:

sed -n '275,315p' src/renderer/src/components/terminal-pane/TerminalPaneSurface.tsx
sed -n '390,430p' src/renderer/src/components/right-sidebar/AiVaultPanel.tsx

Repository: stablyai/orca

Length of output: 2606


Use the created structured tab’s execution host for Open session.

When a continuation launches a structured session on an active host that differs from the first row for a duplicate worktree ID, the unqualified lookup can capture that row’s hostId. Open session passes that host to palette validation, which can reject the tab’s recorded owner. Pass the tab’s execution host instead:

Suggested fix
-                        executionHostId
+                        executionHostId: tab.executionHostId ?? executionHostId
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
executionHostId
executionHostId: tab.executionHostId ?? executionHostId

@nwparker
nwparker force-pushed the nwparker/fix-claude-continuation-toast branch 2 times, most recently from c1a84e4 to 2a1220e Compare October 7, 2026 05:47
@nwparker
nwparker force-pushed the nwparker/fix-claude-continuation-toast branch from 6494f79 to 1a5da2a Compare October 7, 2026 05:54

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant