@caupulican/pi-adaptative 0.95.0 → 0.96.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/dist/bundled-resources/extensions/tmux-agent-manager/index.d.ts.map +1 -1
  3. package/dist/bundled-resources/extensions/tmux-agent-manager/index.js +28 -0
  4. package/dist/bundled-resources/extensions/tmux-agent-manager/index.js.map +1 -1
  5. package/dist/bundled-resources/extensions/tmux-agent-manager/index.ts +25 -0
  6. package/dist/bundled-resources/extensions/tps/index.d.ts +3 -0
  7. package/dist/bundled-resources/extensions/tps/index.d.ts.map +1 -0
  8. package/dist/bundled-resources/extensions/tps/index.js +44 -0
  9. package/dist/bundled-resources/extensions/tps/index.js.map +1 -0
  10. package/dist/bundled-resources/extensions/tps/index.ts +48 -0
  11. package/dist/core/agent-session-services.d.ts.map +1 -1
  12. package/dist/core/agent-session-services.js +12 -3
  13. package/dist/core/agent-session-services.js.map +1 -1
  14. package/dist/core/agent-session.d.ts +3 -3
  15. package/dist/core/agent-session.d.ts.map +1 -1
  16. package/dist/core/agent-session.js +16 -6
  17. package/dist/core/agent-session.js.map +1 -1
  18. package/dist/core/compaction-controller.d.ts +3 -0
  19. package/dist/core/compaction-controller.d.ts.map +1 -1
  20. package/dist/core/compaction-controller.js +12 -1
  21. package/dist/core/compaction-controller.js.map +1 -1
  22. package/dist/core/extension-import-authority.d.ts +3 -1
  23. package/dist/core/extension-import-authority.d.ts.map +1 -1
  24. package/dist/core/extension-import-authority.js +15 -0
  25. package/dist/core/extension-import-authority.js.map +1 -1
  26. package/dist/core/goal-loop-controller.d.ts +2 -2
  27. package/dist/core/goal-loop-controller.js +2 -2
  28. package/dist/core/goal-loop-controller.js.map +1 -1
  29. package/dist/core/goals/compact-goal-context.d.ts.map +1 -1
  30. package/dist/core/goals/compact-goal-context.js +12 -8
  31. package/dist/core/goals/compact-goal-context.js.map +1 -1
  32. package/dist/core/goals/goal-continuation-controller.d.ts +3 -3
  33. package/dist/core/goals/goal-continuation-controller.js +14 -15
  34. package/dist/core/goals/goal-continuation-controller.js.map +1 -1
  35. package/dist/core/goals/goal-continuation-defaults.d.ts +3 -3
  36. package/dist/core/goals/goal-continuation-defaults.js +3 -3
  37. package/dist/core/goals/goal-continuation-defaults.js.map +1 -1
  38. package/dist/core/goals/goal-lifecycle.d.ts +2 -0
  39. package/dist/core/goals/goal-lifecycle.d.ts.map +1 -1
  40. package/dist/core/goals/goal-lifecycle.js +22 -0
  41. package/dist/core/goals/goal-lifecycle.js.map +1 -1
  42. package/dist/core/goals/goal-session-controller.d.ts +8 -2
  43. package/dist/core/goals/goal-session-controller.d.ts.map +1 -1
  44. package/dist/core/goals/goal-session-controller.js +22 -3
  45. package/dist/core/goals/goal-session-controller.js.map +1 -1
  46. package/dist/core/goals/goal-state.d.ts.map +1 -1
  47. package/dist/core/goals/goal-state.js +1 -7
  48. package/dist/core/goals/goal-state.js.map +1 -1
  49. package/dist/core/goals/goal-tool-core.js +1 -1
  50. package/dist/core/goals/goal-tool-core.js.map +1 -1
  51. package/dist/core/keybindings.d.ts +2 -2
  52. package/dist/core/keybindings.d.ts.map +1 -1
  53. package/dist/core/keybindings.js +2 -2
  54. package/dist/core/keybindings.js.map +1 -1
  55. package/dist/core/model-resolver.js +1 -1
  56. package/dist/core/model-resolver.js.map +1 -1
  57. package/dist/core/package-manager.d.ts +1 -1
  58. package/dist/core/package-manager.d.ts.map +1 -1
  59. package/dist/core/package-manager.js +2 -21
  60. package/dist/core/package-manager.js.map +1 -1
  61. package/dist/core/profile-filter-controller.d.ts.map +1 -1
  62. package/dist/core/profile-filter-controller.js +5 -2
  63. package/dist/core/profile-filter-controller.js.map +1 -1
  64. package/dist/core/provider-prompt-contracts.d.ts +5 -1
  65. package/dist/core/provider-prompt-contracts.d.ts.map +1 -1
  66. package/dist/core/provider-prompt-contracts.js +5 -1
  67. package/dist/core/provider-prompt-contracts.js.map +1 -1
  68. package/dist/core/resource-loader.d.ts.map +1 -1
  69. package/dist/core/resource-loader.js +6 -2
  70. package/dist/core/resource-loader.js.map +1 -1
  71. package/dist/core/risk-classifier.d.ts.map +1 -1
  72. package/dist/core/risk-classifier.js +22 -2
  73. package/dist/core/risk-classifier.js.map +1 -1
  74. package/dist/core/settings-manager.d.ts +9 -0
  75. package/dist/core/settings-manager.d.ts.map +1 -1
  76. package/dist/core/settings-manager.js +63 -9
  77. package/dist/core/settings-manager.js.map +1 -1
  78. package/dist/core/system-prompt-builder.d.ts +1 -0
  79. package/dist/core/system-prompt-builder.d.ts.map +1 -1
  80. package/dist/core/system-prompt-builder.js +21 -1
  81. package/dist/core/system-prompt-builder.js.map +1 -1
  82. package/dist/core/system-prompt.d.ts.map +1 -1
  83. package/dist/core/system-prompt.js +5 -1
  84. package/dist/core/system-prompt.js.map +1 -1
  85. package/dist/core/tools/goal.d.ts.map +1 -1
  86. package/dist/core/tools/goal.js +8 -18
  87. package/dist/core/tools/goal.js.map +1 -1
  88. package/dist/core/tools/orchestration-panel.d.ts +7 -0
  89. package/dist/core/tools/orchestration-panel.d.ts.map +1 -1
  90. package/dist/core/tools/orchestration-panel.js +58 -9
  91. package/dist/core/tools/orchestration-panel.js.map +1 -1
  92. package/dist/core/tools/task-steps.d.ts.map +1 -1
  93. package/dist/core/tools/task-steps.js +1 -0
  94. package/dist/core/tools/task-steps.js.map +1 -1
  95. package/dist/modes/interactive/components/agents-overlay.d.ts +16 -4
  96. package/dist/modes/interactive/components/agents-overlay.d.ts.map +1 -1
  97. package/dist/modes/interactive/components/agents-overlay.js +108 -29
  98. package/dist/modes/interactive/components/agents-overlay.js.map +1 -1
  99. package/dist/modes/interactive/components/custom-message.js +7 -2
  100. package/dist/modes/interactive/components/custom-message.js.map +1 -1
  101. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  102. package/dist/modes/interactive/components/settings-selector.js +2 -2
  103. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  104. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  105. package/dist/modes/interactive/interactive-mode.js +5 -4
  106. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  107. package/dist/modes/interactive/session-flow-commands.d.ts.map +1 -1
  108. package/dist/modes/interactive/session-flow-commands.js +9 -2
  109. package/dist/modes/interactive/session-flow-commands.js.map +1 -1
  110. package/docs/extensions.md +2 -0
  111. package/docs/index.md +1 -0
  112. package/docs/keybindings.md +2 -0
  113. package/docs/sessions.md +1 -1
  114. package/docs/task-steps.md +2 -0
  115. package/docs/tmux-agent-manager.md +1 -1
  116. package/docs/tool-repair.md +4 -3
  117. package/docs/work-lifecycle.md +137 -0
  118. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  119. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  120. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  121. package/examples/extensions/sandbox/package-lock.json +2 -2
  122. package/examples/extensions/sandbox/package.json +1 -1
  123. package/examples/extensions/with-deps/package-lock.json +2 -2
  124. package/examples/extensions/with-deps/package.json +1 -1
  125. package/npm-shrinkwrap.json +12 -12
  126. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"session-flow-commands.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive/session-flow-commands.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-flow-commands.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive/session-flow-commands.ts"],"names":[],"mappings":"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"}
@@ -13,7 +13,7 @@
13
13
  import { randomUUID } from "node:crypto";
14
14
  import { Loader, Spacer, Text } from "@caupulican/pi-tui";
15
15
  import { hasCostSummarySignal } from "../../core/cost/cost-summary.js";
16
- import { cancelPersistedGoal, clearPersistedGoal, editPersistedGoal, getGoalStateRevision, pausePersistedGoal, replaceGoal, resumeGoal, resumePersistedGoal, } from "../../core/goals/goal-lifecycle.js";
16
+ import { cancelPersistedGoal, clearPersistedGoal, editPersistedGoal, getGoalStateRevision, isSystemBlockedGoal, pausePersistedGoal, replaceGoal, resumeGoal, resumePersistedGoal, } from "../../core/goals/goal-lifecycle.js";
17
17
  import { isGoalExecutionActive } from "../../core/goals/goal-state.js";
18
18
  import { applyGoalAction, completeGoalManually } from "../../core/goals/goal-tool-core.js";
19
19
  import { findExactModelReferenceMatch, resolveModelScope, resolveModelScopeWithDiagnostics, } from "../../core/model-resolver.js";
@@ -334,6 +334,13 @@ async function switchSession(host, sessionPath, options, cwdOverride) {
334
334
  }
335
335
  async function offerRestoredGoalResume(host) {
336
336
  const state = host.session.getGoalStateSnapshot();
337
+ if (state && isSystemBlockedGoal(state)) {
338
+ const resumed = host.session.restoreGoalRuntimeAfterResume();
339
+ if (resumed) {
340
+ host.refreshAutonomyFooterStatus();
341
+ return true;
342
+ }
343
+ }
337
344
  if (!state || (state.status !== "paused" && state.status !== "blocked" && state.status !== "usage_limited")) {
338
345
  host.session.restoreGoalRuntimeAfterResume();
339
346
  return false;
@@ -680,7 +687,7 @@ export async function handleGoalContinueCommand(host, text) {
680
687
  host.showError(parsed.error);
681
688
  return;
682
689
  }
683
- host.showStatus(`Goal continuation started: ${parsed.maxTurns === 0 ? "unbounded turns" : `up to ${parsed.maxTurns} turn(s)`}, stall limit ${parsed.maxStallTurns}, wall-clock limit ${parsed.maxWallClockMinutes || "disabled"} minute(s).`);
690
+ host.showStatus(`Goal continuation started: ${parsed.maxTurns === 0 ? "unbounded turns" : `up to ${parsed.maxTurns} turn(s)`}, recovery threshold ${parsed.maxStallTurns}, wall-clock limit ${parsed.maxWallClockMinutes || "disabled"} minute(s).`);
684
691
  try {
685
692
  const result = await host.session.continueGoalLoop({
686
693
  maxTurns: parsed.maxTurns,
@@ -1 +1 @@
1
- {"version":3,"file":"session-flow-commands.js","sourceRoot":"","sources":["../../../src/modes/interactive/session-flow-commands.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Session-picker, tree/fork navigation, and model-selector flows extracted from\n * interactive-mode.\n *\n * Each entry opens a selector overlay (via `host.showSelector`) or renders a\n * session-info block, driving `AgentSession`/`AgentSessionRuntime` navigation and\n * the fork/resume/clone/goal-continuation paths. The interdependent selector\n * flows share one narrow `SessionFlowHost` seam; the three prototype-tested leaf\n * commands (`handleCloneCommand`, `handleGoalContinueCommand`,\n * `handleSessionCommand`) take their own minimal host shapes so their behaviour\n * tests keep exercising them through interactive-mode's thin wrappers unchanged.\n */\n\nimport { randomUUID } from \"node:crypto\";\nimport type { SessionManager } from \"@caupulican/pi-agent-core/node\";\nimport type { Api, Model } from \"@caupulican/pi-ai\";\nimport type { EditorComponent } from \"@caupulican/pi-tui\";\nimport { type Component, type Container, Loader, Spacer, Text, type TUI } from \"@caupulican/pi-tui\";\nimport type {\n\tAgentSession,\n\tGoalContinuationLoopOptions,\n\tGoalContinuationLoopResult,\n} from \"../../core/agent-session.ts\";\nimport type { AgentSessionRuntime } from \"../../core/agent-session-runtime.ts\";\nimport { hasCostSummarySignal } from \"../../core/cost/cost-summary.ts\";\nimport type { ExtensionCommandContext } from \"../../core/extensions/index.ts\";\nimport {\n\tcancelPersistedGoal,\n\tclearPersistedGoal,\n\teditPersistedGoal,\n\ttype GoalStateRevision,\n\tgetGoalStateRevision,\n\tpausePersistedGoal,\n\treplaceGoal,\n\tresumeGoal,\n\tresumePersistedGoal,\n} from \"../../core/goals/goal-lifecycle.ts\";\nimport { type GoalState, isGoalExecutionActive } from \"../../core/goals/goal-state.ts\";\nimport { applyGoalAction, completeGoalManually } from \"../../core/goals/goal-tool-core.ts\";\nimport type { KeybindingsManager } from \"../../core/keybindings.ts\";\nimport {\n\tfindExactModelReferenceMatch,\n\tresolveModelScope,\n\tresolveModelScopeWithDiagnostics,\n} from \"../../core/model-resolver.ts\";\nimport { MissingSessionCwdError } from \"../../core/session-cwd.ts\";\nimport { listAllSessions, listSessions, openSession } from \"../../core/session-manager-factory.ts\";\nimport type { SettingsManager } from \"../../core/settings-manager.ts\";\nimport { parseTaskCommand } from \"../../core/tasks/task-command.ts\";\nimport {\n\taddTaskStep,\n\tclearTaskSteps,\n\tcompactTaskSteps,\n\tcreateTaskStepsState,\n\tformatTaskSteps,\n\ttype TaskStepsState,\n\tupdateTaskStep,\n} from \"../../core/tasks/task-state.ts\";\nimport { ProjectTrustStore } from \"../../core/trust-manager.ts\";\nimport type { CustomEditor } from \"./components/custom-editor.ts\";\nimport type { FooterComponent } from \"./components/footer.ts\";\nimport { keyText } from \"./components/keybinding-hints.ts\";\nimport { ModelSelectorComponent } from \"./components/model-selector.ts\";\nimport { ScopedModelsSelectorComponent } from \"./components/scoped-models-selector.ts\";\nimport { SessionSelectorComponent } from \"./components/session-selector.ts\";\nimport { TreeSelectorComponent } from \"./components/tree-selector.ts\";\nimport { TrustSelectorComponent } from \"./components/trust-selector.ts\";\nimport { UserMessageSelectorComponent } from \"./components/user-message-selector.ts\";\nimport type { ExtensionUiHost } from \"./extension-ui-host.ts\";\nimport { formatCostReport } from \"./report-commands.ts\";\nimport { handleNonFatalSessionReplacementError } from \"./session-replacement-errors.ts\";\nimport { theme } from \"./theme/theme.ts\";\n\n/** Shared seam for the interdependent selector/navigation flows. */\nexport interface SessionFlowHost {\n\treadonly session: AgentSession;\n\treadonly sessionManager: SessionManager;\n\treadonly settingsManager: SettingsManager;\n\treadonly runtimeHost: AgentSessionRuntime;\n\treadonly ui: TUI;\n\treadonly chatContainer: Container;\n\treadonly statusContainer: Container;\n\treadonly editor: EditorComponent;\n\treadonly defaultEditor: CustomEditor;\n\treadonly footer: FooterComponent;\n\treadonly extensionUiHost: ExtensionUiHost;\n\treadonly keybindings: KeybindingsManager;\n\tloadingAnimation: Loader | undefined;\n\tshowSelector(create: (done: () => void) => { component: Component; focus: Component }): void;\n\tshowStatus(message: string): void;\n\tshowError(message: string): void;\n\trefreshAutonomyFooterStatus(): void;\n\trenderCurrentSessionState(): void;\n\trenderInitialMessages(options?: { forceHistoryLoad?: boolean }): Promise<void>;\n\tflushCompactionQueue(options?: { willRetry?: boolean }): Promise<void>;\n\thandleFatalRuntimeError(prefix: string, error: unknown): Promise<never>;\n\tpromptForMissingSessionCwd(error: MissingSessionCwdError): Promise<string | undefined>;\n\tupdateEditorBorderColor(): void;\n\tupdateAvailableProviderCount(): Promise<void>;\n\tmaybeWarnAboutAnthropicSubscriptionAuth(model?: Model<Api>): Promise<void>;\n\tcheckDaxnutsEasterEgg(model: { provider: string; id: string }): void;\n\tgetModelCandidates(): Promise<Model<Api>[]>;\n\tshutdown(options?: { fromSignal?: boolean }): Promise<void>;\n}\n\nfunction finishSelectorCancellation(host: Pick<SessionFlowHost, \"ui\">, done: () => void): void {\n\tdone();\n\thost.ui.requestRender();\n}\n\nfunction finishSelectorError(host: Pick<SessionFlowHost, \"showError\">, done: () => void, error: unknown): void {\n\tdone();\n\thost.showError(error instanceof Error ? error.message : String(error));\n}\n\nexport async function showModelSelector(host: SessionFlowHost, initialSearchInput?: string): Promise<void> {\n\ttry {\n\t\tawait host.session.extensionRunner.emit({\n\t\t\ttype: \"model_selector_open\",\n\t\t\tcurrentModel: host.session.model,\n\t\t\tscopedModels: host.session.scopedModels,\n\t\t\tinitialSearchInput,\n\t\t});\n\t} catch (error) {\n\t\thost.showError(error instanceof Error ? error.message : String(error));\n\t\treturn;\n\t}\n\n\thost.showSelector((done) => {\n\t\tconst selector = new ModelSelectorComponent(\n\t\t\thost.ui,\n\t\t\thost.session.model,\n\t\t\thost.settingsManager,\n\t\t\thost.session.modelRegistry,\n\t\t\thost.session.scopedModels,\n\t\t\tasync (model) => {\n\t\t\t\ttry {\n\t\t\t\t\tawait host.session.setModel(model);\n\t\t\t\t\thost.footer.invalidate();\n\t\t\t\t\thost.updateEditorBorderColor();\n\t\t\t\t\tdone();\n\t\t\t\t\thost.showStatus(`Model: ${model.id}`);\n\t\t\t\t\tvoid host.maybeWarnAboutAnthropicSubscriptionAuth(model);\n\t\t\t\t\thost.checkDaxnutsEasterEgg(model);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tfinishSelectorError(host, done, error);\n\t\t\t\t}\n\t\t\t},\n\t\t\t() => {\n\t\t\t\tfinishSelectorCancellation(host, done);\n\t\t\t},\n\t\t\tinitialSearchInput,\n\t\t);\n\t\treturn { component: selector, focus: selector };\n\t});\n}\n\nexport async function showModelsSelector(host: SessionFlowHost): Promise<void> {\n\t// Get all available models\n\thost.session.modelRegistry.refresh();\n\tconst allModels = host.session.modelRegistry.getAvailable();\n\tconst allModelIds = new Set(allModels.map((model) => `${model.provider}/${model.id}`));\n\tconst configuredPatterns = host.settingsManager.getEnabledModels();\n\tconst sessionScopedModels = host.session.scopedModels;\n\n\tif (allModels.length === 0 && !configuredPatterns?.length && sessionScopedModels.length === 0) {\n\t\thost.showStatus(\"No models available\");\n\t\treturn;\n\t}\n\tconst configuredScope = configuredPatterns?.length\n\t\t? await resolveModelScopeWithDiagnostics(configuredPatterns, host.session.modelRegistry)\n\t\t: undefined;\n\n\t// Check if session has scoped models (from previous session-only changes or CLI --models)\n\tconst hasSessionScope = sessionScopedModels.length > 0;\n\n\t// Build enabled model IDs from session state or settings\n\tlet currentEnabledIds: string[] | null = null;\n\n\tif (hasSessionScope) {\n\t\t// Use current session's scoped models\n\t\tcurrentEnabledIds = sessionScopedModels.map((scoped) => `${scoped.model.provider}/${scoped.model.id}`);\n\t} else if (configuredScope) {\n\t\tcurrentEnabledIds = configuredScope.scopedModels.map((scoped) => `${scoped.model.provider}/${scoped.model.id}`);\n\t}\n\n\tfor (const diagnostic of configuredScope?.diagnostics ?? []) {\n\t\tif (diagnostic.code !== \"no-match\") continue;\n\t\tcurrentEnabledIds ??= [];\n\t\tif (!currentEnabledIds.includes(diagnostic.pattern)) currentEnabledIds.push(diagnostic.pattern);\n\t}\n\n\t// Helper to update session's scoped models (session-only, no persist)\n\tconst updateSessionModels = async (enabledIds: string[] | null) => {\n\t\tcurrentEnabledIds = enabledIds === null ? null : [...enabledIds];\n\t\tconst hasEnabledAvailableModel = enabledIds?.some((id) => allModelIds.has(id)) ?? false;\n\t\tconst allAvailableModelsEnabled = enabledIds !== null && [...allModelIds].every((id) => enabledIds.includes(id));\n\t\tif (enabledIds && hasEnabledAvailableModel && !allAvailableModelsEnabled) {\n\t\t\tconst newScopedModels = await resolveModelScope(enabledIds, host.session.modelRegistry);\n\t\t\thost.session.setScopedModels(\n\t\t\t\tnewScopedModels.map((sm) => ({\n\t\t\t\t\tmodel: sm.model,\n\t\t\t\t\tthinkingLevel: sm.thinkingLevel,\n\t\t\t\t})),\n\t\t\t);\n\t\t} else {\n\t\t\t// All enabled or none enabled = no filter\n\t\t\thost.session.setScopedModels([]);\n\t\t}\n\t\tawait host.updateAvailableProviderCount();\n\t\thost.ui.requestRender();\n\t};\n\n\thost.showSelector((done) => {\n\t\tconst selector = new ScopedModelsSelectorComponent(\n\t\t\t{\n\t\t\t\tallModels,\n\t\t\t\tenabledModelIds: currentEnabledIds,\n\t\t\t},\n\t\t\t{\n\t\t\t\tonChange: async (enabledIds) => {\n\t\t\t\t\tawait updateSessionModels(enabledIds);\n\t\t\t\t},\n\t\t\t\tonPersist: (enabledIds) => {\n\t\t\t\t\t// Persist to settings\n\t\t\t\t\tconst allEnabled =\n\t\t\t\t\t\tenabledIds !== null &&\n\t\t\t\t\t\tenabledIds.length === allModels.length &&\n\t\t\t\t\t\tenabledIds.every((id) => allModelIds.has(id));\n\t\t\t\t\tconst newPatterns = enabledIds === null || allEnabled ? undefined : enabledIds;\n\t\t\t\t\thost.settingsManager.setEnabledModels(newPatterns ? [...newPatterns] : undefined);\n\t\t\t\t\thost.showStatus(\"Model selection saved to settings\");\n\t\t\t\t},\n\t\t\t\tonCancel: () => {\n\t\t\t\t\tfinishSelectorCancellation(host, done);\n\t\t\t\t},\n\t\t\t},\n\t\t);\n\t\treturn { component: selector, focus: selector };\n\t});\n}\n\nexport function showUserMessageSelector(host: SessionFlowHost, newSessionName?: string): void {\n\tconst userMessages = host.session.getUserMessagesForForking();\n\n\tif (userMessages.length === 0) {\n\t\thost.showStatus(\"No messages to fork from\");\n\t\treturn;\n\t}\n\n\tconst initialSelectedId = userMessages[userMessages.length - 1]?.entryId;\n\n\thost.showSelector((done) => {\n\t\tconst selector = new UserMessageSelectorComponent(\n\t\t\tuserMessages.map((m) => ({ id: m.entryId, text: m.text })),\n\t\t\tasync (entryId) => {\n\t\t\t\ttry {\n\t\t\t\t\tconst result = await host.runtimeHost.fork(entryId);\n\t\t\t\t\tif (result.cancelled) {\n\t\t\t\t\t\tfinishSelectorCancellation(host, done);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\thost.renderCurrentSessionState();\n\t\t\t\t\tif (newSessionName) {\n\t\t\t\t\t\thost.session.setSessionName(newSessionName);\n\t\t\t\t\t}\n\t\t\t\t\thost.editor.setText(result.selectedText ?? \"\");\n\t\t\t\t\tdone();\n\t\t\t\t\thost.showStatus(newSessionName ? `Forked to new session: ${newSessionName}` : \"Forked to new session\");\n\t\t\t\t} catch (error: unknown) {\n\t\t\t\t\tfinishSelectorError(host, done, error);\n\t\t\t\t}\n\t\t\t},\n\t\t\t() => {\n\t\t\t\tfinishSelectorCancellation(host, done);\n\t\t\t},\n\t\t\tinitialSelectedId,\n\t\t);\n\t\treturn { component: selector, focus: selector.getMessageList() };\n\t});\n}\n\nexport function showTreeSelector(host: SessionFlowHost, initialSelectedId?: string): void {\n\tconst tree = host.sessionManager.getTree();\n\tconst realLeafId = host.sessionManager.getLeafId();\n\tconst initialFilterMode = host.settingsManager.getTreeFilterMode();\n\n\tif (tree.length === 0) {\n\t\thost.showStatus(\"No entries in session\");\n\t\treturn;\n\t}\n\n\thost.showSelector((done) => {\n\t\tconst selector = new TreeSelectorComponent(\n\t\t\ttree,\n\t\t\trealLeafId,\n\t\t\thost.ui.terminal.rows,\n\t\t\tasync (entryId) => {\n\t\t\t\t// Selecting the current leaf is a no-op (already there)\n\t\t\t\tif (entryId === realLeafId) {\n\t\t\t\t\tdone();\n\t\t\t\t\thost.showStatus(\"Already at this point\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Ask about summarization\n\t\t\t\tdone(); // Close selector first\n\n\t\t\t\t// Loop until user makes a complete choice or cancels to tree\n\t\t\t\tlet wantsSummary = false;\n\t\t\t\tlet customInstructions: string | undefined;\n\n\t\t\t\t// Check if we should skip the prompt (user preference to always default to no summary)\n\t\t\t\tif (!host.settingsManager.getBranchSummarySkipPrompt()) {\n\t\t\t\t\twhile (true) {\n\t\t\t\t\t\tconst summaryChoice = await host.extensionUiHost.showExtensionSelector(\"Summarize branch?\", [\n\t\t\t\t\t\t\t\"No summary\",\n\t\t\t\t\t\t\t\"Summarize\",\n\t\t\t\t\t\t\t\"Summarize with custom prompt\",\n\t\t\t\t\t\t]);\n\n\t\t\t\t\t\tif (summaryChoice === undefined) {\n\t\t\t\t\t\t\t// User pressed escape - re-show tree selector with same selection\n\t\t\t\t\t\t\tshowTreeSelector(host, entryId);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\twantsSummary = summaryChoice !== \"No summary\";\n\n\t\t\t\t\t\tif (summaryChoice === \"Summarize with custom prompt\") {\n\t\t\t\t\t\t\tcustomInstructions = await host.extensionUiHost.showExtensionEditor(\n\t\t\t\t\t\t\t\t\"Custom summarization instructions\",\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (customInstructions === undefined) {\n\t\t\t\t\t\t\t\t// User cancelled - loop back to summary selector\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// User made a complete choice\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Set up escape handler and loader if summarizing\n\t\t\t\tlet summaryLoader: Loader | undefined;\n\t\t\t\tconst originalOnEscape = host.defaultEditor.onEscape;\n\n\t\t\t\tif (wantsSummary) {\n\t\t\t\t\thost.defaultEditor.onEscape = () => {\n\t\t\t\t\t\thost.session.abortBranchSummary();\n\t\t\t\t\t};\n\t\t\t\t\thost.chatContainer.addChild(new Spacer(1));\n\t\t\t\t\tsummaryLoader = new Loader(\n\t\t\t\t\t\thost.ui,\n\t\t\t\t\t\t(spinner) => theme.fg(\"accent\", spinner),\n\t\t\t\t\t\t(text) => theme.fg(\"muted\", text),\n\t\t\t\t\t\t`Summarizing branch... (${keyText(\"app.interrupt\")} to cancel)`,\n\t\t\t\t\t);\n\t\t\t\t\thost.statusContainer.addChild(summaryLoader);\n\t\t\t\t\thost.ui.requestRender();\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tconst result = await host.session.navigateTree(entryId, {\n\t\t\t\t\t\tsummarize: wantsSummary,\n\t\t\t\t\t\tcustomInstructions,\n\t\t\t\t\t});\n\n\t\t\t\t\tif (result.aborted) {\n\t\t\t\t\t\t// Summarization aborted - re-show tree selector with same selection\n\t\t\t\t\t\thost.showStatus(\"Branch summarization cancelled\");\n\t\t\t\t\t\tshowTreeSelector(host, entryId);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (result.cancelled) {\n\t\t\t\t\t\thost.showStatus(\"Navigation cancelled\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Update UI\n\t\t\t\t\tawait host.renderInitialMessages();\n\t\t\t\t\tif (result.editorText && !host.editor.getText().trim()) {\n\t\t\t\t\t\thost.editor.setText(result.editorText);\n\t\t\t\t\t}\n\t\t\t\t\thost.showStatus(\"Navigated to selected point\");\n\t\t\t\t\tvoid host.flushCompactionQueue({ willRetry: false });\n\t\t\t\t} catch (error) {\n\t\t\t\t\thost.showError(error instanceof Error ? error.message : String(error));\n\t\t\t\t} finally {\n\t\t\t\t\tif (summaryLoader) {\n\t\t\t\t\t\tsummaryLoader.stop();\n\t\t\t\t\t\thost.statusContainer.clear();\n\t\t\t\t\t}\n\t\t\t\t\thost.defaultEditor.onEscape = originalOnEscape;\n\t\t\t\t}\n\t\t\t},\n\t\t\t() => {\n\t\t\t\tfinishSelectorCancellation(host, done);\n\t\t\t},\n\t\t\t(entryId, label) => {\n\t\t\t\thost.sessionManager.appendLabelChange(entryId, label);\n\t\t\t\thost.ui.requestRender();\n\t\t\t},\n\t\t\tinitialSelectedId,\n\t\t\tinitialFilterMode,\n\t\t);\n\t\treturn { component: selector, focus: selector };\n\t});\n}\n\nexport function showTrustSelector(host: SessionFlowHost): void {\n\tconst cwd = host.sessionManager.getCwd();\n\tconst trustStore = new ProjectTrustStore(host.runtimeHost.services.agentDir);\n\tconst savedDecision = trustStore.get(cwd);\n\thost.showSelector((done) => {\n\t\tconst selector = new TrustSelectorComponent({\n\t\t\tcwd,\n\t\t\tsavedDecision,\n\t\t\tprojectTrusted: host.settingsManager.isProjectTrusted(),\n\t\t\tonSelect: (trusted) => {\n\t\t\t\ttrustStore.set(cwd, trusted);\n\t\t\t\tdone();\n\t\t\t\thost.showStatus(\n\t\t\t\t\t`Saved trust decision: ${trusted ? \"trusted\" : \"untrusted\"}. Restart pi for this to take effect.`,\n\t\t\t\t);\n\t\t\t},\n\t\t\tonCancel: () => {\n\t\t\t\tfinishSelectorCancellation(host, done);\n\t\t\t},\n\t\t});\n\t\treturn { component: selector, focus: selector };\n\t});\n}\n\nexport function showSessionSelector(host: SessionFlowHost): void {\n\thost.showSelector((done) => {\n\t\tconst selector = new SessionSelectorComponent(\n\t\t\t(onProgress) => listSessions(host.sessionManager.getCwd(), host.sessionManager.getSessionDir(), onProgress),\n\t\t\t(onProgress) =>\n\t\t\t\thost.sessionManager.usesDefaultSessionDir()\n\t\t\t\t\t? listAllSessions(onProgress)\n\t\t\t\t\t: listAllSessions(host.sessionManager.getSessionDir(), onProgress),\n\t\t\tasync (sessionPath) => {\n\t\t\t\tdone();\n\t\t\t\tawait handleResumeSession(host, sessionPath);\n\t\t\t},\n\t\t\t() => {\n\t\t\t\tfinishSelectorCancellation(host, done);\n\t\t\t},\n\t\t\t() => {\n\t\t\t\tvoid host.shutdown();\n\t\t\t},\n\t\t\t() => host.ui.requestRender(),\n\t\t\t{\n\t\t\t\trenameSession: async (sessionFilePath: string, nextName: string | undefined) => {\n\t\t\t\t\tconst next = (nextName ?? \"\").trim();\n\t\t\t\t\tif (!next) return;\n\t\t\t\t\tconst mgr = openSession(sessionFilePath);\n\t\t\t\t\tmgr.appendSessionInfo(next);\n\t\t\t\t},\n\t\t\t\tshowRenameHint: true,\n\t\t\t\tkeybindings: host.keybindings,\n\t\t\t},\n\n\t\t\thost.sessionManager.getSessionFile(),\n\t\t);\n\t\treturn { component: selector, focus: selector };\n\t});\n}\n\nasync function switchSession(\n\thost: SessionFlowHost,\n\tsessionPath: string,\n\toptions: Parameters<ExtensionCommandContext[\"switchSession\"]>[1] | undefined,\n\tcwdOverride?: string,\n): Promise<{ cancelled: boolean }> {\n\treturn host.runtimeHost.switchSession(sessionPath, {\n\t\tcwdOverride,\n\t\twithSession: options?.withSession,\n\t});\n}\n\nasync function offerRestoredGoalResume(host: SessionFlowHost): Promise<boolean> {\n\tconst state = host.session.getGoalStateSnapshot();\n\tif (!state || (state.status !== \"paused\" && state.status !== \"blocked\" && state.status !== \"usage_limited\")) {\n\t\thost.session.restoreGoalRuntimeAfterResume();\n\t\treturn false;\n\t}\n\tconst choice = await host.extensionUiHost?.showExtensionSelector(\"Resume stopped goal?\", [\n\t\t\"Resume goal\",\n\t\t\"Leave stopped\",\n\t]);\n\tif (choice !== \"Resume goal\") return false;\n\tconst resumed = resumePersistedGoal(host.session);\n\tif (!resumed.ok) throw new Error(`Goal resume failed: ${resumed.error}`);\n\thost.session.restoreGoalRuntimeAfterResume();\n\thost.refreshAutonomyFooterStatus();\n\treturn true;\n}\n\nexport async function handleResumeSession(\n\thost: SessionFlowHost,\n\tsessionPath: string,\n\toptions?: Parameters<ExtensionCommandContext[\"switchSession\"]>[1],\n): Promise<{ cancelled: boolean }> {\n\tif (host.loadingAnimation) {\n\t\thost.loadingAnimation.stop();\n\t\thost.loadingAnimation = undefined;\n\t}\n\thost.statusContainer.clear();\n\ttry {\n\t\tconst result = await switchSession(host, sessionPath, options);\n\t\tif (result.cancelled) {\n\t\t\treturn result;\n\t\t}\n\t\thost.renderCurrentSessionState();\n\t\tconst goalResumed = await offerRestoredGoalResume(host);\n\t\thost.showStatus(goalResumed ? \"Resumed session and goal\" : \"Resumed session; goal state preserved\");\n\t\treturn result;\n\t} catch (error: unknown) {\n\t\tconst disposition = handleNonFatalSessionReplacementError(host, error);\n\t\tif (disposition) return { cancelled: disposition === \"previous_restored\" };\n\t\tif (error instanceof MissingSessionCwdError) {\n\t\t\tconst selectedCwd = await host.promptForMissingSessionCwd(error);\n\t\t\tif (!selectedCwd) {\n\t\t\t\thost.showStatus(\"Resume cancelled\");\n\t\t\t\treturn { cancelled: true };\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tconst result = await switchSession(host, sessionPath, options, selectedCwd);\n\t\t\t\tif (result.cancelled) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t\thost.renderCurrentSessionState();\n\t\t\t\tconst goalResumed = await offerRestoredGoalResume(host);\n\t\t\t\thost.showStatus(\n\t\t\t\t\tgoalResumed\n\t\t\t\t\t\t? \"Resumed session and goal in current cwd\"\n\t\t\t\t\t\t: \"Resumed session in current cwd; goal state preserved\",\n\t\t\t\t);\n\t\t\t\treturn result;\n\t\t\t} catch (retryError: unknown) {\n\t\t\t\tconst retryDisposition = handleNonFatalSessionReplacementError(host, retryError);\n\t\t\t\tif (retryDisposition) return { cancelled: retryDisposition === \"previous_restored\" };\n\t\t\t\treturn host.handleFatalRuntimeError(\"Failed to resume session\", retryError);\n\t\t\t}\n\t\t}\n\t\treturn host.handleFatalRuntimeError(\"Failed to resume session\", error);\n\t}\n}\n\nexport async function handleModelCommand(host: SessionFlowHost, searchTerm?: string): Promise<void> {\n\tif (!searchTerm) {\n\t\tawait showModelSelector(host);\n\t\treturn;\n\t}\n\n\tconst model = await findExactModelMatch(host, searchTerm);\n\tif (model) {\n\t\ttry {\n\t\t\tawait host.session.setModel(model);\n\t\t\thost.footer.invalidate();\n\t\t\thost.updateEditorBorderColor();\n\t\t\thost.showStatus(`Model: ${model.id}`);\n\t\t\tvoid host.maybeWarnAboutAnthropicSubscriptionAuth(model);\n\t\t\thost.checkDaxnutsEasterEgg(model);\n\t\t} catch (error) {\n\t\t\thost.showError(error instanceof Error ? error.message : String(error));\n\t\t}\n\t\treturn;\n\t}\n\n\tawait showModelSelector(host, searchTerm);\n}\n\nexport async function findExactModelMatch(host: SessionFlowHost, searchTerm: string): Promise<Model<Api> | undefined> {\n\tconst models = await host.getModelCandidates();\n\treturn findExactModelReferenceMatch(searchTerm, models);\n}\n\n// ===========================================================================\n// Prototype-tested leaf commands — narrow host shapes matching their fakes.\n// ===========================================================================\n\nexport interface CloneCommandHost {\n\treadonly sessionManager: { getLeafId: () => string | null };\n\treadonly runtimeHost: {\n\t\tfork: (entryId: string, options?: { position?: \"before\" | \"at\" }) => Promise<{ cancelled: boolean }>;\n\t};\n\trenderCurrentSessionState(): void;\n\treadonly editor: { setText: (text: string) => void };\n\treadonly session: { setSessionName: (name: string) => void };\n\tshowStatus(message: string): void;\n\tshowError(message: string): void;\n\treadonly ui: { requestRender: () => void };\n}\n\nexport async function handleCloneCommand(host: CloneCommandHost, newSessionName?: string): Promise<void> {\n\tconst leafId = host.sessionManager.getLeafId();\n\tif (!leafId) {\n\t\thost.showStatus(\"Nothing to clone yet\");\n\t\treturn;\n\t}\n\n\ttry {\n\t\tconst result = await host.runtimeHost.fork(leafId, { position: \"at\" });\n\t\tif (result.cancelled) {\n\t\t\thost.ui.requestRender();\n\t\t\treturn;\n\t\t}\n\n\t\thost.renderCurrentSessionState();\n\t\tif (newSessionName) {\n\t\t\thost.session.setSessionName(newSessionName);\n\t\t}\n\t\thost.editor.setText(\"\");\n\t\thost.showStatus(newSessionName ? `Cloned to new session: ${newSessionName}` : \"Cloned to new session\");\n\t} catch (error: unknown) {\n\t\thost.showError(error instanceof Error ? error.message : String(error));\n\t}\n}\n\nexport type ParsedGoalContinueCommand =\n\t| { ok: true; maxTurns: number; maxStallTurns: number; maxWallClockMinutes: number }\n\t| { ok: false; error: string };\n\nexport interface GoalResumeHost {\n\treadonly session: {\n\t\tgetGoalStateSnapshot: () => GoalState | undefined;\n\t\tsaveGoalStateSnapshot: (state: GoalState, expected?: GoalStateRevision) => string;\n\t\tclearGoalStateSnapshot?: (state: GoalState, now: string) => string;\n\t\trestoreGoalRuntimeAfterResume: () => void;\n\t};\n\trefreshAutonomyFooterStatus(): void;\n}\n\nexport interface GoalCommandHost extends GoalResumeHost {\n\treadonly session: GoalResumeHost[\"session\"] & {\n\t\tcontinueGoalLoop: (options: GoalContinuationLoopOptions) => Promise<GoalContinuationLoopResult>;\n\t\tgetGoalRuntimeSnapshot: (settings: {\n\t\t\tmaxStallTurns: number;\n\t\t}) => ReturnType<AgentSession[\"getGoalRuntimeSnapshot\"]>;\n\t};\n\tpromptForGoalEdit?(currentObjective: string): Promise<string | undefined>;\n\tgetMaxStallTurns?(): number;\n\tshowStatus(message: string): void;\n\tshowError(message: string): void;\n}\n\nexport type GoalResumeResult = { ok: true; resumed: true; state: GoalState } | { ok: false; error: string };\n\n/** Canonical persisted transition used by both `/goal resume` and session `/resume`. */\nexport function resumeCurrentGoal(host: GoalResumeHost, now = new Date().toISOString()): GoalResumeResult {\n\tconst resumed = resumePersistedGoal(host.session, now);\n\tif (!resumed.ok) return resumed;\n\thost.session.restoreGoalRuntimeAfterResume();\n\thost.refreshAutonomyFooterStatus();\n\treturn { ok: true, resumed: true, state: resumed.state };\n}\n\nfunction formatGoalStatus(snapshot: ReturnType<AgentSession[\"getGoalRuntimeSnapshot\"]>): string {\n\tconst state = snapshot.goalState;\n\tif (!state) return `Goal: none (${snapshot.continuation.action}/${snapshot.continuation.reasonCode})`;\n\tconst requirements = state.requirements.map((requirement) => {\n\t\tconst blockedReason = requirement.blockedReason ? ` — ${requirement.blockedReason}` : \"\";\n\t\treturn `- ${requirement.id}: ${requirement.status}${blockedReason}`;\n\t});\n\tconst blockedReason = state.blockedReason ? `\\nBlocked reason: ${state.blockedReason}` : \"\";\n\tconst requirementDetails = requirements.length > 0 ? `\\n${requirements.join(\"\\n\")}` : \"\";\n\tconst tokenUsage =\n\t\tstate.tokenBudget !== undefined\n\t\t\t? `\\nTokens: ${state.tokensUsed ?? 0}/${state.tokenBudget}`\n\t\t\t: (state.tokensUsed ?? 0) > 0\n\t\t\t\t? `\\nTokens: ${state.tokensUsed ?? 0}`\n\t\t\t\t: \"\";\n\treturn `Goal: ${state.userGoal}\\nStatus: ${state.status}${blockedReason}${tokenUsage}\\nRequirements: open ${snapshot.continuation.openRequirementIds.length}, blocked ${snapshot.continuation.blockedRequirementIds.length}, satisfied ${snapshot.continuation.satisfiedRequirementIds.length}${requirementDetails}\\nContinuation: ${snapshot.continuation.action}/${snapshot.continuation.reasonCode}\\nControls: /goal edit | /goal pause | /goal resume | /goal reopen <requirement-id> | /goal complete | /goal clear | /goal override <text>`;\n}\n\nexport async function handleGoalCommand(host: GoalCommandHost, text: string): Promise<void> {\n\tconst input = text.replace(/^\\/goal\\s*/, \"\").trim();\n\tif (!input || input === \"status\") {\n\t\thost.showStatus(\n\t\t\tformatGoalStatus(host.session.getGoalRuntimeSnapshot({ maxStallTurns: host.getMaxStallTurns?.() ?? 20 })),\n\t\t);\n\t\treturn;\n\t}\n\n\tconst now = new Date().toISOString();\n\tconst current = host.session.getGoalStateSnapshot();\n\tif (input === \"resume\") {\n\t\tconst resumed = resumeCurrentGoal(host, now);\n\t\tif (!resumed.ok) {\n\t\t\thost.showError(resumed.error);\n\t\t\treturn;\n\t\t}\n\t\thost.showStatus(\"Goal resumed.\");\n\t\treturn;\n\t}\n\n\tif (input === \"pause\") {\n\t\tconst paused = pausePersistedGoal(host.session, now);\n\t\tif (!paused.ok) {\n\t\t\thost.showError(paused.error);\n\t\t\treturn;\n\t\t}\n\t\thost.showStatus(\"Goal paused.\");\n\t\thost.refreshAutonomyFooterStatus();\n\t\treturn;\n\t}\n\n\tif (input === \"edit\" || input.startsWith(\"edit \")) {\n\t\tconst inlineObjective = input.slice(\"edit\".length).trim();\n\t\tconst objective = inlineObjective || (current ? await host.promptForGoalEdit?.(current.userGoal) : undefined);\n\t\tif (!objective) {\n\t\t\thost.showError(current ? \"Usage: /goal edit <objective>\" : \"No goal exists to edit.\");\n\t\t\treturn;\n\t\t}\n\t\tconst edited = editPersistedGoal(host.session, { userGoal: objective }, now);\n\t\tif (!edited.ok) {\n\t\t\thost.showError(edited.error);\n\t\t\treturn;\n\t\t}\n\t\tif (isGoalExecutionActive(edited.state.status)) host.session.restoreGoalRuntimeAfterResume();\n\t\thost.showStatus(\"Goal updated.\");\n\t\thost.refreshAutonomyFooterStatus();\n\t\treturn;\n\t}\n\n\tif (input === \"complete\") {\n\t\tconst completed = completeGoalManually(current, now);\n\t\tif (!completed.ok) {\n\t\t\thost.showError(completed.error);\n\t\t\treturn;\n\t\t}\n\t\thost.session.saveGoalStateSnapshot(completed.state, current ? getGoalStateRevision(current) : undefined);\n\t\thost.showStatus(\"Goal completed manually.\");\n\t\thost.refreshAutonomyFooterStatus();\n\t\treturn;\n\t}\n\n\tif (input === \"clear\") {\n\t\tconst cleared = clearPersistedGoal(host.session, now);\n\t\tif (!cleared.ok) {\n\t\t\thost.showError(cleared.error);\n\t\t\treturn;\n\t\t}\n\t\thost.showStatus(cleared.cleared ? \"Goal cleared.\" : \"No goal exists to clear.\");\n\t\thost.refreshAutonomyFooterStatus();\n\t\treturn;\n\t}\n\n\tif (input === \"close\" || input === \"cancel\") {\n\t\tconst cancelled = cancelPersistedGoal(host.session, now);\n\t\tif (!cancelled.ok) {\n\t\t\thost.showError(cancelled.error);\n\t\t\treturn;\n\t\t}\n\t\thost.showStatus(\"Goal closed.\");\n\t\thost.refreshAutonomyFooterStatus();\n\t\treturn;\n\t}\n\n\tif (input === \"reopen\" || input.startsWith(\"reopen \")) {\n\t\tconst requirementId = input.slice(\"reopen\".length).trim();\n\t\tif (!requirementId) {\n\t\t\thost.showError(\"Usage: /goal reopen <requirement-id>\");\n\t\t\treturn;\n\t\t}\n\t\tif (!current) {\n\t\t\thost.showError(\"No goal exists to update.\");\n\t\t\treturn;\n\t\t}\n\t\tconst requirement = current.requirements.find((candidate) => candidate.id === requirementId);\n\t\tif (!requirement || requirement.status !== \"blocked\") {\n\t\t\thost.showError(\n\t\t\t\trequirement\n\t\t\t\t\t? `Requirement '${requirementId}' is ${requirement.status}; only blocked requirements can be reopened.`\n\t\t\t\t\t: `Unknown requirement '${requirementId}'.`,\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tlet active = current;\n\t\tif (active.status === \"blocked\") {\n\t\t\tconst resumed = resumeGoal(active, now);\n\t\t\tif (!resumed.ok) {\n\t\t\t\thost.showError(resumed.error);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tactive = resumed.state;\n\t\t}\n\t\tconst reopened = applyGoalAction(active, { action: \"reopen_requirement\", requirementId }, now);\n\t\tif (!reopened.ok) {\n\t\t\thost.showError(reopened.error);\n\t\t\treturn;\n\t\t}\n\t\thost.session.saveGoalStateSnapshot(reopened.state, getGoalStateRevision(current));\n\t\tif (isGoalExecutionActive(reopened.state.status)) host.session.restoreGoalRuntimeAfterResume();\n\t\thost.showStatus(\n\t\t\t`Requirement '${requirementId}' reopened${current.status === \"blocked\" ? \" and goal resumed\" : \"\"}.`,\n\t\t);\n\t\thost.refreshAutonomyFooterStatus();\n\t\treturn;\n\t}\n\n\tconst overriding = input === \"override\" || input.startsWith(\"override \");\n\tconst goalText = overriding ? input.slice(\"override\".length).trim() : input;\n\tif (!goalText) {\n\t\thost.showError(\"Usage: /goal override <text>\");\n\t\treturn;\n\t}\n\tconst goalId = `goal-${randomUUID()}`;\n\tconst started = overriding\n\t\t? replaceGoal({ goalId, userGoal: goalText }, now)\n\t\t: applyGoalAction(current, { action: \"start\", goalId, userGoal: goalText }, now);\n\tif (!started.ok) {\n\t\thost.showError(`${started.error} Use /goal override <text> to replace it explicitly.`);\n\t\treturn;\n\t}\n\thost.session.saveGoalStateSnapshot(started.state, current ? getGoalStateRevision(current) : undefined);\n\tconst verb = overriding ? \"overridden\" : \"started\";\n\ttry {\n\t\t// Submit one bootstrap pass, then yield to the event-driven idle scheduler. This is a scheduling\n\t\t// quantum, not a goal ceiling: an active goal is immediately rearmed and the configured goal turn\n\t\t// limit (unbounded by default) governs subsequent continuation.\n\t\tconst result = await host.session.continueGoalLoop({\n\t\t\tmaxTurns: 1,\n\t\t\tmaxStallTurns: host.getMaxStallTurns?.() ?? 20,\n\t\t\tmaxWallClockMinutes: 0,\n\t\t});\n\t\tif (result.stopReason === \"already_continuing\") {\n\t\t\thost.showStatus(`Goal ${verb}: the autonomy loop is already continuing this goal.`);\n\t\t} else if (result.stopReason === \"session_disposed\") {\n\t\t\thost.showStatus(`Goal ${verb}, but the session was disposed before continuation could run.`);\n\t\t} else {\n\t\t\tconst continuation = result.finalSnapshot.continuation;\n\t\t\thost.showStatus(`Goal ${verb}: ${continuation.action}/${continuation.reasonCode}.`);\n\t\t\tif (continuation.action === \"continue\") host.session.restoreGoalRuntimeAfterResume();\n\t\t}\n\t} catch (error) {\n\t\thost.showError(`Goal continuation failed: ${error instanceof Error ? error.message : String(error)}`);\n\t} finally {\n\t\thost.refreshAutonomyFooterStatus();\n\t}\n}\n\nexport interface TaskCommandHost {\n\treadonly session: {\n\t\tgetTaskStepsStateSnapshot: () => TaskStepsState | undefined;\n\t\tsaveTaskStepsStateSnapshot: (state: TaskStepsState) => string;\n\t};\n\tshowStatus(message: string): void;\n\tshowError(message: string): void;\n}\n\nexport function handleTaskCommand(host: TaskCommandHost, text: string): void {\n\tconst parsed = parseTaskCommand(text);\n\tif (!parsed.ok) {\n\t\thost.showError(parsed.error);\n\t\treturn;\n\t}\n\tif (parsed.command.type === \"retired_execution\") {\n\t\thost.showStatus(\n\t\t\t`/task ${parsed.command.operation} was retired with the detached extension runner. Ask Pi to use native delegate; session-owned worker lanes notify on completion without polling.`,\n\t\t);\n\t\treturn;\n\t}\n\n\tconst now = new Date().toISOString();\n\tlet state = host.session.getTaskStepsStateSnapshot() ?? createTaskStepsState(now);\n\ttry {\n\t\tswitch (parsed.command.type) {\n\t\t\tcase \"list\":\n\t\t\t\thost.showStatus(formatTaskSteps(state, { includeTerminal: parsed.command.includeTerminal }));\n\t\t\t\treturn;\n\t\t\tcase \"add\":\n\t\t\t\tstate = addTaskStep(state, { content: parsed.command.content }, now);\n\t\t\t\tbreak;\n\t\t\tcase \"update\":\n\t\t\t\tstate = updateTaskStep(\n\t\t\t\t\tstate,\n\t\t\t\t\tparsed.command.selector,\n\t\t\t\t\t{\n\t\t\t\t\t\tstatus: parsed.command.status,\n\t\t\t\t\t\tnote: parsed.command.note,\n\t\t\t\t\t\tevidence: parsed.command.evidence ? [parsed.command.evidence] : undefined,\n\t\t\t\t\t},\n\t\t\t\t\tnow,\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase \"clear\":\n\t\t\t\tstate = clearTaskSteps(state, now);\n\t\t\t\tbreak;\n\t\t\tcase \"compact\":\n\t\t\t\tstate = compactTaskSteps(state, now);\n\t\t\t\tbreak;\n\t\t}\n\t\thost.session.saveTaskStepsStateSnapshot(state);\n\t\thost.showStatus(formatTaskSteps(state));\n\t} catch (error) {\n\t\thost.showError(error instanceof Error ? error.message : String(error));\n\t}\n}\n\nexport interface GoalContinueCommandHost {\n\treadonly session: {\n\t\tcontinueGoalLoop: (options: GoalContinuationLoopOptions) => Promise<GoalContinuationLoopResult>;\n\t};\n\tparseGoalContinueCommand(text: string): ParsedGoalContinueCommand;\n\tshowStatus(message: string): void;\n\tshowError(message: string): void;\n\trefreshAutonomyFooterStatus(): void;\n}\n\nexport async function handleGoalContinueCommand(host: GoalContinueCommandHost, text: string): Promise<void> {\n\tconst parsed = host.parseGoalContinueCommand(text);\n\tif (!parsed.ok) {\n\t\thost.showError(parsed.error);\n\t\treturn;\n\t}\n\n\thost.showStatus(\n\t\t`Goal continuation started: ${parsed.maxTurns === 0 ? \"unbounded turns\" : `up to ${parsed.maxTurns} turn(s)`}, stall limit ${parsed.maxStallTurns}, wall-clock limit ${parsed.maxWallClockMinutes || \"disabled\"} minute(s).`,\n\t);\n\ttry {\n\t\tconst result = await host.session.continueGoalLoop({\n\t\t\tmaxTurns: parsed.maxTurns,\n\t\t\tmaxStallTurns: parsed.maxStallTurns,\n\t\t\tmaxWallClockMinutes: parsed.maxWallClockMinutes,\n\t\t});\n\t\tconst continuation = result.finalSnapshot.continuation;\n\t\thost.showStatus(\n\t\t\t`Goal continuation stopped: ${result.stopReason}; submitted ${result.turnsSubmitted} turn(s); latest decision ${continuation.action}/${continuation.reasonCode}.`,\n\t\t);\n\t} catch (error) {\n\t\thost.showError(`Goal continuation failed: ${error instanceof Error ? error.message : String(error)}`);\n\t} finally {\n\t\thost.refreshAutonomyFooterStatus();\n\t}\n}\n\nexport interface SessionInfoCommandHost {\n\treadonly session: {\n\t\tgetSessionStats: () => ReturnType<AgentSession[\"getSessionStats\"]>;\n\t\tgetCostSummary: () => ReturnType<AgentSession[\"getCostSummary\"]>;\n\t\tgetModelRouterStatus: (formatLabel: (label: string) => string) => string;\n\t};\n\treadonly sessionManager: { getSessionName: () => string | undefined };\n\treadonly chatContainer: Container;\n\treadonly ui: { requestRender: () => void };\n}\n\nexport function handleSessionCommand(host: SessionInfoCommandHost): void {\n\tconst stats = host.session.getSessionStats();\n\tconst sessionName = host.sessionManager.getSessionName();\n\n\tlet info = `${theme.bold(\"Session Info\")}\\n\\n`;\n\tif (sessionName) {\n\t\tinfo += `${theme.fg(\"dim\", \"Name:\")} ${sessionName}\\n`;\n\t}\n\tinfo += `${theme.fg(\"dim\", \"File:\")} ${stats.sessionFile ?? \"In-memory\"}\\n`;\n\tinfo += `${theme.fg(\"dim\", \"ID:\")} ${stats.sessionId}\\n\\n`;\n\tinfo += `${theme.bold(\"Messages\")}\\n`;\n\tinfo += `${theme.fg(\"dim\", \"User:\")} ${stats.userMessages}\\n`;\n\tinfo += `${theme.fg(\"dim\", \"Assistant:\")} ${stats.assistantMessages}\\n`;\n\tinfo += `${theme.fg(\"dim\", \"Tool Calls:\")} ${stats.toolCalls}\\n`;\n\tinfo += `${theme.fg(\"dim\", \"Tool Results:\")} ${stats.toolResults}\\n`;\n\tinfo += `${theme.fg(\"dim\", \"Total:\")} ${stats.totalMessages}\\n\\n`;\n\tinfo += `${theme.bold(\"Tokens\")}\\n`;\n\tinfo += `${theme.fg(\"dim\", \"Input:\")} ${stats.tokens.input.toLocaleString()}\\n`;\n\tinfo += `${theme.fg(\"dim\", \"Output:\")} ${stats.tokens.output.toLocaleString()}\\n`;\n\tif (stats.tokens.cacheRead > 0) {\n\t\tinfo += `${theme.fg(\"dim\", \"Cache Read:\")} ${stats.tokens.cacheRead.toLocaleString()}\\n`;\n\t}\n\tif (stats.tokens.cacheWrite > 0) {\n\t\tinfo += `${theme.fg(\"dim\", \"Cache Write:\")} ${stats.tokens.cacheWrite.toLocaleString()}\\n`;\n\t}\n\tinfo += `${theme.fg(\"dim\", \"Total:\")} ${stats.tokens.total.toLocaleString()}\\n`;\n\n\tconst costs = host.session.getCostSummary();\n\tif (hasCostSummarySignal(costs)) {\n\t\tinfo += `\\n${theme.bold(\"Cost\")}\\n`;\n\t\tinfo += formatCostReport(costs);\n\t}\n\n\tinfo += `\\n\\n${theme.bold(\"Model Router\")}\\n`;\n\tinfo += host.session.getModelRouterStatus((label) => theme.fg(\"dim\", label));\n\n\thost.chatContainer.addChild(new Spacer(1));\n\thost.chatContainer.addChild(new Text(info, 1, 0));\n\thost.ui.requestRender();\n}\n"]}
1
+ {"version":3,"file":"session-flow-commands.js","sourceRoot":"","sources":["../../../src/modes/interactive/session-flow-commands.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Session-picker, tree/fork navigation, and model-selector flows extracted from\n * interactive-mode.\n *\n * Each entry opens a selector overlay (via `host.showSelector`) or renders a\n * session-info block, driving `AgentSession`/`AgentSessionRuntime` navigation and\n * the fork/resume/clone/goal-continuation paths. The interdependent selector\n * flows share one narrow `SessionFlowHost` seam; the three prototype-tested leaf\n * commands (`handleCloneCommand`, `handleGoalContinueCommand`,\n * `handleSessionCommand`) take their own minimal host shapes so their behaviour\n * tests keep exercising them through interactive-mode's thin wrappers unchanged.\n */\n\nimport { randomUUID } from \"node:crypto\";\nimport type { SessionManager } from \"@caupulican/pi-agent-core/node\";\nimport type { Api, Model } from \"@caupulican/pi-ai\";\nimport type { EditorComponent } from \"@caupulican/pi-tui\";\nimport { type Component, type Container, Loader, Spacer, Text, type TUI } from \"@caupulican/pi-tui\";\nimport type {\n\tAgentSession,\n\tGoalContinuationLoopOptions,\n\tGoalContinuationLoopResult,\n} from \"../../core/agent-session.ts\";\nimport type { AgentSessionRuntime } from \"../../core/agent-session-runtime.ts\";\nimport { hasCostSummarySignal } from \"../../core/cost/cost-summary.ts\";\nimport type { ExtensionCommandContext } from \"../../core/extensions/index.ts\";\nimport {\n\tcancelPersistedGoal,\n\tclearPersistedGoal,\n\teditPersistedGoal,\n\ttype GoalStateRevision,\n\tgetGoalStateRevision,\n\tisSystemBlockedGoal,\n\tpausePersistedGoal,\n\treplaceGoal,\n\tresumeGoal,\n\tresumePersistedGoal,\n} from \"../../core/goals/goal-lifecycle.ts\";\nimport { type GoalState, isGoalExecutionActive } from \"../../core/goals/goal-state.ts\";\nimport { applyGoalAction, completeGoalManually } from \"../../core/goals/goal-tool-core.ts\";\nimport type { KeybindingsManager } from \"../../core/keybindings.ts\";\nimport {\n\tfindExactModelReferenceMatch,\n\tresolveModelScope,\n\tresolveModelScopeWithDiagnostics,\n} from \"../../core/model-resolver.ts\";\nimport { MissingSessionCwdError } from \"../../core/session-cwd.ts\";\nimport { listAllSessions, listSessions, openSession } from \"../../core/session-manager-factory.ts\";\nimport type { SettingsManager } from \"../../core/settings-manager.ts\";\nimport { parseTaskCommand } from \"../../core/tasks/task-command.ts\";\nimport {\n\taddTaskStep,\n\tclearTaskSteps,\n\tcompactTaskSteps,\n\tcreateTaskStepsState,\n\tformatTaskSteps,\n\ttype TaskStepsState,\n\tupdateTaskStep,\n} from \"../../core/tasks/task-state.ts\";\nimport { ProjectTrustStore } from \"../../core/trust-manager.ts\";\nimport type { CustomEditor } from \"./components/custom-editor.ts\";\nimport type { FooterComponent } from \"./components/footer.ts\";\nimport { keyText } from \"./components/keybinding-hints.ts\";\nimport { ModelSelectorComponent } from \"./components/model-selector.ts\";\nimport { ScopedModelsSelectorComponent } from \"./components/scoped-models-selector.ts\";\nimport { SessionSelectorComponent } from \"./components/session-selector.ts\";\nimport { TreeSelectorComponent } from \"./components/tree-selector.ts\";\nimport { TrustSelectorComponent } from \"./components/trust-selector.ts\";\nimport { UserMessageSelectorComponent } from \"./components/user-message-selector.ts\";\nimport type { ExtensionUiHost } from \"./extension-ui-host.ts\";\nimport { formatCostReport } from \"./report-commands.ts\";\nimport { handleNonFatalSessionReplacementError } from \"./session-replacement-errors.ts\";\nimport { theme } from \"./theme/theme.ts\";\n\n/** Shared seam for the interdependent selector/navigation flows. */\nexport interface SessionFlowHost {\n\treadonly session: AgentSession;\n\treadonly sessionManager: SessionManager;\n\treadonly settingsManager: SettingsManager;\n\treadonly runtimeHost: AgentSessionRuntime;\n\treadonly ui: TUI;\n\treadonly chatContainer: Container;\n\treadonly statusContainer: Container;\n\treadonly editor: EditorComponent;\n\treadonly defaultEditor: CustomEditor;\n\treadonly footer: FooterComponent;\n\treadonly extensionUiHost: ExtensionUiHost;\n\treadonly keybindings: KeybindingsManager;\n\tloadingAnimation: Loader | undefined;\n\tshowSelector(create: (done: () => void) => { component: Component; focus: Component }): void;\n\tshowStatus(message: string): void;\n\tshowError(message: string): void;\n\trefreshAutonomyFooterStatus(): void;\n\trenderCurrentSessionState(): void;\n\trenderInitialMessages(options?: { forceHistoryLoad?: boolean }): Promise<void>;\n\tflushCompactionQueue(options?: { willRetry?: boolean }): Promise<void>;\n\thandleFatalRuntimeError(prefix: string, error: unknown): Promise<never>;\n\tpromptForMissingSessionCwd(error: MissingSessionCwdError): Promise<string | undefined>;\n\tupdateEditorBorderColor(): void;\n\tupdateAvailableProviderCount(): Promise<void>;\n\tmaybeWarnAboutAnthropicSubscriptionAuth(model?: Model<Api>): Promise<void>;\n\tcheckDaxnutsEasterEgg(model: { provider: string; id: string }): void;\n\tgetModelCandidates(): Promise<Model<Api>[]>;\n\tshutdown(options?: { fromSignal?: boolean }): Promise<void>;\n}\n\nfunction finishSelectorCancellation(host: Pick<SessionFlowHost, \"ui\">, done: () => void): void {\n\tdone();\n\thost.ui.requestRender();\n}\n\nfunction finishSelectorError(host: Pick<SessionFlowHost, \"showError\">, done: () => void, error: unknown): void {\n\tdone();\n\thost.showError(error instanceof Error ? error.message : String(error));\n}\n\nexport async function showModelSelector(host: SessionFlowHost, initialSearchInput?: string): Promise<void> {\n\ttry {\n\t\tawait host.session.extensionRunner.emit({\n\t\t\ttype: \"model_selector_open\",\n\t\t\tcurrentModel: host.session.model,\n\t\t\tscopedModels: host.session.scopedModels,\n\t\t\tinitialSearchInput,\n\t\t});\n\t} catch (error) {\n\t\thost.showError(error instanceof Error ? error.message : String(error));\n\t\treturn;\n\t}\n\n\thost.showSelector((done) => {\n\t\tconst selector = new ModelSelectorComponent(\n\t\t\thost.ui,\n\t\t\thost.session.model,\n\t\t\thost.settingsManager,\n\t\t\thost.session.modelRegistry,\n\t\t\thost.session.scopedModels,\n\t\t\tasync (model) => {\n\t\t\t\ttry {\n\t\t\t\t\tawait host.session.setModel(model);\n\t\t\t\t\thost.footer.invalidate();\n\t\t\t\t\thost.updateEditorBorderColor();\n\t\t\t\t\tdone();\n\t\t\t\t\thost.showStatus(`Model: ${model.id}`);\n\t\t\t\t\tvoid host.maybeWarnAboutAnthropicSubscriptionAuth(model);\n\t\t\t\t\thost.checkDaxnutsEasterEgg(model);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tfinishSelectorError(host, done, error);\n\t\t\t\t}\n\t\t\t},\n\t\t\t() => {\n\t\t\t\tfinishSelectorCancellation(host, done);\n\t\t\t},\n\t\t\tinitialSearchInput,\n\t\t);\n\t\treturn { component: selector, focus: selector };\n\t});\n}\n\nexport async function showModelsSelector(host: SessionFlowHost): Promise<void> {\n\t// Get all available models\n\thost.session.modelRegistry.refresh();\n\tconst allModels = host.session.modelRegistry.getAvailable();\n\tconst allModelIds = new Set(allModels.map((model) => `${model.provider}/${model.id}`));\n\tconst configuredPatterns = host.settingsManager.getEnabledModels();\n\tconst sessionScopedModels = host.session.scopedModels;\n\n\tif (allModels.length === 0 && !configuredPatterns?.length && sessionScopedModels.length === 0) {\n\t\thost.showStatus(\"No models available\");\n\t\treturn;\n\t}\n\tconst configuredScope = configuredPatterns?.length\n\t\t? await resolveModelScopeWithDiagnostics(configuredPatterns, host.session.modelRegistry)\n\t\t: undefined;\n\n\t// Check if session has scoped models (from previous session-only changes or CLI --models)\n\tconst hasSessionScope = sessionScopedModels.length > 0;\n\n\t// Build enabled model IDs from session state or settings\n\tlet currentEnabledIds: string[] | null = null;\n\n\tif (hasSessionScope) {\n\t\t// Use current session's scoped models\n\t\tcurrentEnabledIds = sessionScopedModels.map((scoped) => `${scoped.model.provider}/${scoped.model.id}`);\n\t} else if (configuredScope) {\n\t\tcurrentEnabledIds = configuredScope.scopedModels.map((scoped) => `${scoped.model.provider}/${scoped.model.id}`);\n\t}\n\n\tfor (const diagnostic of configuredScope?.diagnostics ?? []) {\n\t\tif (diagnostic.code !== \"no-match\") continue;\n\t\tcurrentEnabledIds ??= [];\n\t\tif (!currentEnabledIds.includes(diagnostic.pattern)) currentEnabledIds.push(diagnostic.pattern);\n\t}\n\n\t// Helper to update session's scoped models (session-only, no persist)\n\tconst updateSessionModels = async (enabledIds: string[] | null) => {\n\t\tcurrentEnabledIds = enabledIds === null ? null : [...enabledIds];\n\t\tconst hasEnabledAvailableModel = enabledIds?.some((id) => allModelIds.has(id)) ?? false;\n\t\tconst allAvailableModelsEnabled = enabledIds !== null && [...allModelIds].every((id) => enabledIds.includes(id));\n\t\tif (enabledIds && hasEnabledAvailableModel && !allAvailableModelsEnabled) {\n\t\t\tconst newScopedModels = await resolveModelScope(enabledIds, host.session.modelRegistry);\n\t\t\thost.session.setScopedModels(\n\t\t\t\tnewScopedModels.map((sm) => ({\n\t\t\t\t\tmodel: sm.model,\n\t\t\t\t\tthinkingLevel: sm.thinkingLevel,\n\t\t\t\t})),\n\t\t\t);\n\t\t} else {\n\t\t\t// All enabled or none enabled = no filter\n\t\t\thost.session.setScopedModels([]);\n\t\t}\n\t\tawait host.updateAvailableProviderCount();\n\t\thost.ui.requestRender();\n\t};\n\n\thost.showSelector((done) => {\n\t\tconst selector = new ScopedModelsSelectorComponent(\n\t\t\t{\n\t\t\t\tallModels,\n\t\t\t\tenabledModelIds: currentEnabledIds,\n\t\t\t},\n\t\t\t{\n\t\t\t\tonChange: async (enabledIds) => {\n\t\t\t\t\tawait updateSessionModels(enabledIds);\n\t\t\t\t},\n\t\t\t\tonPersist: (enabledIds) => {\n\t\t\t\t\t// Persist to settings\n\t\t\t\t\tconst allEnabled =\n\t\t\t\t\t\tenabledIds !== null &&\n\t\t\t\t\t\tenabledIds.length === allModels.length &&\n\t\t\t\t\t\tenabledIds.every((id) => allModelIds.has(id));\n\t\t\t\t\tconst newPatterns = enabledIds === null || allEnabled ? undefined : enabledIds;\n\t\t\t\t\thost.settingsManager.setEnabledModels(newPatterns ? [...newPatterns] : undefined);\n\t\t\t\t\thost.showStatus(\"Model selection saved to settings\");\n\t\t\t\t},\n\t\t\t\tonCancel: () => {\n\t\t\t\t\tfinishSelectorCancellation(host, done);\n\t\t\t\t},\n\t\t\t},\n\t\t);\n\t\treturn { component: selector, focus: selector };\n\t});\n}\n\nexport function showUserMessageSelector(host: SessionFlowHost, newSessionName?: string): void {\n\tconst userMessages = host.session.getUserMessagesForForking();\n\n\tif (userMessages.length === 0) {\n\t\thost.showStatus(\"No messages to fork from\");\n\t\treturn;\n\t}\n\n\tconst initialSelectedId = userMessages[userMessages.length - 1]?.entryId;\n\n\thost.showSelector((done) => {\n\t\tconst selector = new UserMessageSelectorComponent(\n\t\t\tuserMessages.map((m) => ({ id: m.entryId, text: m.text })),\n\t\t\tasync (entryId) => {\n\t\t\t\ttry {\n\t\t\t\t\tconst result = await host.runtimeHost.fork(entryId);\n\t\t\t\t\tif (result.cancelled) {\n\t\t\t\t\t\tfinishSelectorCancellation(host, done);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\thost.renderCurrentSessionState();\n\t\t\t\t\tif (newSessionName) {\n\t\t\t\t\t\thost.session.setSessionName(newSessionName);\n\t\t\t\t\t}\n\t\t\t\t\thost.editor.setText(result.selectedText ?? \"\");\n\t\t\t\t\tdone();\n\t\t\t\t\thost.showStatus(newSessionName ? `Forked to new session: ${newSessionName}` : \"Forked to new session\");\n\t\t\t\t} catch (error: unknown) {\n\t\t\t\t\tfinishSelectorError(host, done, error);\n\t\t\t\t}\n\t\t\t},\n\t\t\t() => {\n\t\t\t\tfinishSelectorCancellation(host, done);\n\t\t\t},\n\t\t\tinitialSelectedId,\n\t\t);\n\t\treturn { component: selector, focus: selector.getMessageList() };\n\t});\n}\n\nexport function showTreeSelector(host: SessionFlowHost, initialSelectedId?: string): void {\n\tconst tree = host.sessionManager.getTree();\n\tconst realLeafId = host.sessionManager.getLeafId();\n\tconst initialFilterMode = host.settingsManager.getTreeFilterMode();\n\n\tif (tree.length === 0) {\n\t\thost.showStatus(\"No entries in session\");\n\t\treturn;\n\t}\n\n\thost.showSelector((done) => {\n\t\tconst selector = new TreeSelectorComponent(\n\t\t\ttree,\n\t\t\trealLeafId,\n\t\t\thost.ui.terminal.rows,\n\t\t\tasync (entryId) => {\n\t\t\t\t// Selecting the current leaf is a no-op (already there)\n\t\t\t\tif (entryId === realLeafId) {\n\t\t\t\t\tdone();\n\t\t\t\t\thost.showStatus(\"Already at this point\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Ask about summarization\n\t\t\t\tdone(); // Close selector first\n\n\t\t\t\t// Loop until user makes a complete choice or cancels to tree\n\t\t\t\tlet wantsSummary = false;\n\t\t\t\tlet customInstructions: string | undefined;\n\n\t\t\t\t// Check if we should skip the prompt (user preference to always default to no summary)\n\t\t\t\tif (!host.settingsManager.getBranchSummarySkipPrompt()) {\n\t\t\t\t\twhile (true) {\n\t\t\t\t\t\tconst summaryChoice = await host.extensionUiHost.showExtensionSelector(\"Summarize branch?\", [\n\t\t\t\t\t\t\t\"No summary\",\n\t\t\t\t\t\t\t\"Summarize\",\n\t\t\t\t\t\t\t\"Summarize with custom prompt\",\n\t\t\t\t\t\t]);\n\n\t\t\t\t\t\tif (summaryChoice === undefined) {\n\t\t\t\t\t\t\t// User pressed escape - re-show tree selector with same selection\n\t\t\t\t\t\t\tshowTreeSelector(host, entryId);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\twantsSummary = summaryChoice !== \"No summary\";\n\n\t\t\t\t\t\tif (summaryChoice === \"Summarize with custom prompt\") {\n\t\t\t\t\t\t\tcustomInstructions = await host.extensionUiHost.showExtensionEditor(\n\t\t\t\t\t\t\t\t\"Custom summarization instructions\",\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (customInstructions === undefined) {\n\t\t\t\t\t\t\t\t// User cancelled - loop back to summary selector\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// User made a complete choice\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Set up escape handler and loader if summarizing\n\t\t\t\tlet summaryLoader: Loader | undefined;\n\t\t\t\tconst originalOnEscape = host.defaultEditor.onEscape;\n\n\t\t\t\tif (wantsSummary) {\n\t\t\t\t\thost.defaultEditor.onEscape = () => {\n\t\t\t\t\t\thost.session.abortBranchSummary();\n\t\t\t\t\t};\n\t\t\t\t\thost.chatContainer.addChild(new Spacer(1));\n\t\t\t\t\tsummaryLoader = new Loader(\n\t\t\t\t\t\thost.ui,\n\t\t\t\t\t\t(spinner) => theme.fg(\"accent\", spinner),\n\t\t\t\t\t\t(text) => theme.fg(\"muted\", text),\n\t\t\t\t\t\t`Summarizing branch... (${keyText(\"app.interrupt\")} to cancel)`,\n\t\t\t\t\t);\n\t\t\t\t\thost.statusContainer.addChild(summaryLoader);\n\t\t\t\t\thost.ui.requestRender();\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tconst result = await host.session.navigateTree(entryId, {\n\t\t\t\t\t\tsummarize: wantsSummary,\n\t\t\t\t\t\tcustomInstructions,\n\t\t\t\t\t});\n\n\t\t\t\t\tif (result.aborted) {\n\t\t\t\t\t\t// Summarization aborted - re-show tree selector with same selection\n\t\t\t\t\t\thost.showStatus(\"Branch summarization cancelled\");\n\t\t\t\t\t\tshowTreeSelector(host, entryId);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (result.cancelled) {\n\t\t\t\t\t\thost.showStatus(\"Navigation cancelled\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Update UI\n\t\t\t\t\tawait host.renderInitialMessages();\n\t\t\t\t\tif (result.editorText && !host.editor.getText().trim()) {\n\t\t\t\t\t\thost.editor.setText(result.editorText);\n\t\t\t\t\t}\n\t\t\t\t\thost.showStatus(\"Navigated to selected point\");\n\t\t\t\t\tvoid host.flushCompactionQueue({ willRetry: false });\n\t\t\t\t} catch (error) {\n\t\t\t\t\thost.showError(error instanceof Error ? error.message : String(error));\n\t\t\t\t} finally {\n\t\t\t\t\tif (summaryLoader) {\n\t\t\t\t\t\tsummaryLoader.stop();\n\t\t\t\t\t\thost.statusContainer.clear();\n\t\t\t\t\t}\n\t\t\t\t\thost.defaultEditor.onEscape = originalOnEscape;\n\t\t\t\t}\n\t\t\t},\n\t\t\t() => {\n\t\t\t\tfinishSelectorCancellation(host, done);\n\t\t\t},\n\t\t\t(entryId, label) => {\n\t\t\t\thost.sessionManager.appendLabelChange(entryId, label);\n\t\t\t\thost.ui.requestRender();\n\t\t\t},\n\t\t\tinitialSelectedId,\n\t\t\tinitialFilterMode,\n\t\t);\n\t\treturn { component: selector, focus: selector };\n\t});\n}\n\nexport function showTrustSelector(host: SessionFlowHost): void {\n\tconst cwd = host.sessionManager.getCwd();\n\tconst trustStore = new ProjectTrustStore(host.runtimeHost.services.agentDir);\n\tconst savedDecision = trustStore.get(cwd);\n\thost.showSelector((done) => {\n\t\tconst selector = new TrustSelectorComponent({\n\t\t\tcwd,\n\t\t\tsavedDecision,\n\t\t\tprojectTrusted: host.settingsManager.isProjectTrusted(),\n\t\t\tonSelect: (trusted) => {\n\t\t\t\ttrustStore.set(cwd, trusted);\n\t\t\t\tdone();\n\t\t\t\thost.showStatus(\n\t\t\t\t\t`Saved trust decision: ${trusted ? \"trusted\" : \"untrusted\"}. Restart pi for this to take effect.`,\n\t\t\t\t);\n\t\t\t},\n\t\t\tonCancel: () => {\n\t\t\t\tfinishSelectorCancellation(host, done);\n\t\t\t},\n\t\t});\n\t\treturn { component: selector, focus: selector };\n\t});\n}\n\nexport function showSessionSelector(host: SessionFlowHost): void {\n\thost.showSelector((done) => {\n\t\tconst selector = new SessionSelectorComponent(\n\t\t\t(onProgress) => listSessions(host.sessionManager.getCwd(), host.sessionManager.getSessionDir(), onProgress),\n\t\t\t(onProgress) =>\n\t\t\t\thost.sessionManager.usesDefaultSessionDir()\n\t\t\t\t\t? listAllSessions(onProgress)\n\t\t\t\t\t: listAllSessions(host.sessionManager.getSessionDir(), onProgress),\n\t\t\tasync (sessionPath) => {\n\t\t\t\tdone();\n\t\t\t\tawait handleResumeSession(host, sessionPath);\n\t\t\t},\n\t\t\t() => {\n\t\t\t\tfinishSelectorCancellation(host, done);\n\t\t\t},\n\t\t\t() => {\n\t\t\t\tvoid host.shutdown();\n\t\t\t},\n\t\t\t() => host.ui.requestRender(),\n\t\t\t{\n\t\t\t\trenameSession: async (sessionFilePath: string, nextName: string | undefined) => {\n\t\t\t\t\tconst next = (nextName ?? \"\").trim();\n\t\t\t\t\tif (!next) return;\n\t\t\t\t\tconst mgr = openSession(sessionFilePath);\n\t\t\t\t\tmgr.appendSessionInfo(next);\n\t\t\t\t},\n\t\t\t\tshowRenameHint: true,\n\t\t\t\tkeybindings: host.keybindings,\n\t\t\t},\n\n\t\t\thost.sessionManager.getSessionFile(),\n\t\t);\n\t\treturn { component: selector, focus: selector };\n\t});\n}\n\nasync function switchSession(\n\thost: SessionFlowHost,\n\tsessionPath: string,\n\toptions: Parameters<ExtensionCommandContext[\"switchSession\"]>[1] | undefined,\n\tcwdOverride?: string,\n): Promise<{ cancelled: boolean }> {\n\treturn host.runtimeHost.switchSession(sessionPath, {\n\t\tcwdOverride,\n\t\twithSession: options?.withSession,\n\t});\n}\n\nasync function offerRestoredGoalResume(host: SessionFlowHost): Promise<boolean> {\n\tconst state = host.session.getGoalStateSnapshot();\n\tif (state && isSystemBlockedGoal(state)) {\n\t\tconst resumed = host.session.restoreGoalRuntimeAfterResume();\n\t\tif (resumed) {\n\t\t\thost.refreshAutonomyFooterStatus();\n\t\t\treturn true;\n\t\t}\n\t}\n\tif (!state || (state.status !== \"paused\" && state.status !== \"blocked\" && state.status !== \"usage_limited\")) {\n\t\thost.session.restoreGoalRuntimeAfterResume();\n\t\treturn false;\n\t}\n\tconst choice = await host.extensionUiHost?.showExtensionSelector(\"Resume stopped goal?\", [\n\t\t\"Resume goal\",\n\t\t\"Leave stopped\",\n\t]);\n\tif (choice !== \"Resume goal\") return false;\n\tconst resumed = resumePersistedGoal(host.session);\n\tif (!resumed.ok) throw new Error(`Goal resume failed: ${resumed.error}`);\n\thost.session.restoreGoalRuntimeAfterResume();\n\thost.refreshAutonomyFooterStatus();\n\treturn true;\n}\n\nexport async function handleResumeSession(\n\thost: SessionFlowHost,\n\tsessionPath: string,\n\toptions?: Parameters<ExtensionCommandContext[\"switchSession\"]>[1],\n): Promise<{ cancelled: boolean }> {\n\tif (host.loadingAnimation) {\n\t\thost.loadingAnimation.stop();\n\t\thost.loadingAnimation = undefined;\n\t}\n\thost.statusContainer.clear();\n\ttry {\n\t\tconst result = await switchSession(host, sessionPath, options);\n\t\tif (result.cancelled) {\n\t\t\treturn result;\n\t\t}\n\t\thost.renderCurrentSessionState();\n\t\tconst goalResumed = await offerRestoredGoalResume(host);\n\t\thost.showStatus(goalResumed ? \"Resumed session and goal\" : \"Resumed session; goal state preserved\");\n\t\treturn result;\n\t} catch (error: unknown) {\n\t\tconst disposition = handleNonFatalSessionReplacementError(host, error);\n\t\tif (disposition) return { cancelled: disposition === \"previous_restored\" };\n\t\tif (error instanceof MissingSessionCwdError) {\n\t\t\tconst selectedCwd = await host.promptForMissingSessionCwd(error);\n\t\t\tif (!selectedCwd) {\n\t\t\t\thost.showStatus(\"Resume cancelled\");\n\t\t\t\treturn { cancelled: true };\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tconst result = await switchSession(host, sessionPath, options, selectedCwd);\n\t\t\t\tif (result.cancelled) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t\thost.renderCurrentSessionState();\n\t\t\t\tconst goalResumed = await offerRestoredGoalResume(host);\n\t\t\t\thost.showStatus(\n\t\t\t\t\tgoalResumed\n\t\t\t\t\t\t? \"Resumed session and goal in current cwd\"\n\t\t\t\t\t\t: \"Resumed session in current cwd; goal state preserved\",\n\t\t\t\t);\n\t\t\t\treturn result;\n\t\t\t} catch (retryError: unknown) {\n\t\t\t\tconst retryDisposition = handleNonFatalSessionReplacementError(host, retryError);\n\t\t\t\tif (retryDisposition) return { cancelled: retryDisposition === \"previous_restored\" };\n\t\t\t\treturn host.handleFatalRuntimeError(\"Failed to resume session\", retryError);\n\t\t\t}\n\t\t}\n\t\treturn host.handleFatalRuntimeError(\"Failed to resume session\", error);\n\t}\n}\n\nexport async function handleModelCommand(host: SessionFlowHost, searchTerm?: string): Promise<void> {\n\tif (!searchTerm) {\n\t\tawait showModelSelector(host);\n\t\treturn;\n\t}\n\n\tconst model = await findExactModelMatch(host, searchTerm);\n\tif (model) {\n\t\ttry {\n\t\t\tawait host.session.setModel(model);\n\t\t\thost.footer.invalidate();\n\t\t\thost.updateEditorBorderColor();\n\t\t\thost.showStatus(`Model: ${model.id}`);\n\t\t\tvoid host.maybeWarnAboutAnthropicSubscriptionAuth(model);\n\t\t\thost.checkDaxnutsEasterEgg(model);\n\t\t} catch (error) {\n\t\t\thost.showError(error instanceof Error ? error.message : String(error));\n\t\t}\n\t\treturn;\n\t}\n\n\tawait showModelSelector(host, searchTerm);\n}\n\nexport async function findExactModelMatch(host: SessionFlowHost, searchTerm: string): Promise<Model<Api> | undefined> {\n\tconst models = await host.getModelCandidates();\n\treturn findExactModelReferenceMatch(searchTerm, models);\n}\n\n// ===========================================================================\n// Prototype-tested leaf commands — narrow host shapes matching their fakes.\n// ===========================================================================\n\nexport interface CloneCommandHost {\n\treadonly sessionManager: { getLeafId: () => string | null };\n\treadonly runtimeHost: {\n\t\tfork: (entryId: string, options?: { position?: \"before\" | \"at\" }) => Promise<{ cancelled: boolean }>;\n\t};\n\trenderCurrentSessionState(): void;\n\treadonly editor: { setText: (text: string) => void };\n\treadonly session: { setSessionName: (name: string) => void };\n\tshowStatus(message: string): void;\n\tshowError(message: string): void;\n\treadonly ui: { requestRender: () => void };\n}\n\nexport async function handleCloneCommand(host: CloneCommandHost, newSessionName?: string): Promise<void> {\n\tconst leafId = host.sessionManager.getLeafId();\n\tif (!leafId) {\n\t\thost.showStatus(\"Nothing to clone yet\");\n\t\treturn;\n\t}\n\n\ttry {\n\t\tconst result = await host.runtimeHost.fork(leafId, { position: \"at\" });\n\t\tif (result.cancelled) {\n\t\t\thost.ui.requestRender();\n\t\t\treturn;\n\t\t}\n\n\t\thost.renderCurrentSessionState();\n\t\tif (newSessionName) {\n\t\t\thost.session.setSessionName(newSessionName);\n\t\t}\n\t\thost.editor.setText(\"\");\n\t\thost.showStatus(newSessionName ? `Cloned to new session: ${newSessionName}` : \"Cloned to new session\");\n\t} catch (error: unknown) {\n\t\thost.showError(error instanceof Error ? error.message : String(error));\n\t}\n}\n\nexport type ParsedGoalContinueCommand =\n\t| { ok: true; maxTurns: number; maxStallTurns: number; maxWallClockMinutes: number }\n\t| { ok: false; error: string };\n\nexport interface GoalResumeHost {\n\treadonly session: {\n\t\tgetGoalStateSnapshot: () => GoalState | undefined;\n\t\tsaveGoalStateSnapshot: (state: GoalState, expected?: GoalStateRevision) => string;\n\t\tclearGoalStateSnapshot?: (state: GoalState, now: string) => string;\n\t\trestoreGoalRuntimeAfterResume: () => void;\n\t};\n\trefreshAutonomyFooterStatus(): void;\n}\n\nexport interface GoalCommandHost extends GoalResumeHost {\n\treadonly session: GoalResumeHost[\"session\"] & {\n\t\tcontinueGoalLoop: (options: GoalContinuationLoopOptions) => Promise<GoalContinuationLoopResult>;\n\t\tgetGoalRuntimeSnapshot: (settings: {\n\t\t\tmaxStallTurns: number;\n\t\t}) => ReturnType<AgentSession[\"getGoalRuntimeSnapshot\"]>;\n\t};\n\tpromptForGoalEdit?(currentObjective: string): Promise<string | undefined>;\n\tgetMaxStallTurns?(): number;\n\tshowStatus(message: string): void;\n\tshowError(message: string): void;\n}\n\nexport type GoalResumeResult = { ok: true; resumed: true; state: GoalState } | { ok: false; error: string };\n\n/** Canonical persisted transition used by both `/goal resume` and session `/resume`. */\nexport function resumeCurrentGoal(host: GoalResumeHost, now = new Date().toISOString()): GoalResumeResult {\n\tconst resumed = resumePersistedGoal(host.session, now);\n\tif (!resumed.ok) return resumed;\n\thost.session.restoreGoalRuntimeAfterResume();\n\thost.refreshAutonomyFooterStatus();\n\treturn { ok: true, resumed: true, state: resumed.state };\n}\n\nfunction formatGoalStatus(snapshot: ReturnType<AgentSession[\"getGoalRuntimeSnapshot\"]>): string {\n\tconst state = snapshot.goalState;\n\tif (!state) return `Goal: none (${snapshot.continuation.action}/${snapshot.continuation.reasonCode})`;\n\tconst requirements = state.requirements.map((requirement) => {\n\t\tconst blockedReason = requirement.blockedReason ? ` — ${requirement.blockedReason}` : \"\";\n\t\treturn `- ${requirement.id}: ${requirement.status}${blockedReason}`;\n\t});\n\tconst blockedReason = state.blockedReason ? `\\nBlocked reason: ${state.blockedReason}` : \"\";\n\tconst requirementDetails = requirements.length > 0 ? `\\n${requirements.join(\"\\n\")}` : \"\";\n\tconst tokenUsage =\n\t\tstate.tokenBudget !== undefined\n\t\t\t? `\\nTokens: ${state.tokensUsed ?? 0}/${state.tokenBudget}`\n\t\t\t: (state.tokensUsed ?? 0) > 0\n\t\t\t\t? `\\nTokens: ${state.tokensUsed ?? 0}`\n\t\t\t\t: \"\";\n\treturn `Goal: ${state.userGoal}\\nStatus: ${state.status}${blockedReason}${tokenUsage}\\nRequirements: open ${snapshot.continuation.openRequirementIds.length}, blocked ${snapshot.continuation.blockedRequirementIds.length}, satisfied ${snapshot.continuation.satisfiedRequirementIds.length}${requirementDetails}\\nContinuation: ${snapshot.continuation.action}/${snapshot.continuation.reasonCode}\\nControls: /goal edit | /goal pause | /goal resume | /goal reopen <requirement-id> | /goal complete | /goal clear | /goal override <text>`;\n}\n\nexport async function handleGoalCommand(host: GoalCommandHost, text: string): Promise<void> {\n\tconst input = text.replace(/^\\/goal\\s*/, \"\").trim();\n\tif (!input || input === \"status\") {\n\t\thost.showStatus(\n\t\t\tformatGoalStatus(host.session.getGoalRuntimeSnapshot({ maxStallTurns: host.getMaxStallTurns?.() ?? 20 })),\n\t\t);\n\t\treturn;\n\t}\n\n\tconst now = new Date().toISOString();\n\tconst current = host.session.getGoalStateSnapshot();\n\tif (input === \"resume\") {\n\t\tconst resumed = resumeCurrentGoal(host, now);\n\t\tif (!resumed.ok) {\n\t\t\thost.showError(resumed.error);\n\t\t\treturn;\n\t\t}\n\t\thost.showStatus(\"Goal resumed.\");\n\t\treturn;\n\t}\n\n\tif (input === \"pause\") {\n\t\tconst paused = pausePersistedGoal(host.session, now);\n\t\tif (!paused.ok) {\n\t\t\thost.showError(paused.error);\n\t\t\treturn;\n\t\t}\n\t\thost.showStatus(\"Goal paused.\");\n\t\thost.refreshAutonomyFooterStatus();\n\t\treturn;\n\t}\n\n\tif (input === \"edit\" || input.startsWith(\"edit \")) {\n\t\tconst inlineObjective = input.slice(\"edit\".length).trim();\n\t\tconst objective = inlineObjective || (current ? await host.promptForGoalEdit?.(current.userGoal) : undefined);\n\t\tif (!objective) {\n\t\t\thost.showError(current ? \"Usage: /goal edit <objective>\" : \"No goal exists to edit.\");\n\t\t\treturn;\n\t\t}\n\t\tconst edited = editPersistedGoal(host.session, { userGoal: objective }, now);\n\t\tif (!edited.ok) {\n\t\t\thost.showError(edited.error);\n\t\t\treturn;\n\t\t}\n\t\tif (isGoalExecutionActive(edited.state.status)) host.session.restoreGoalRuntimeAfterResume();\n\t\thost.showStatus(\"Goal updated.\");\n\t\thost.refreshAutonomyFooterStatus();\n\t\treturn;\n\t}\n\n\tif (input === \"complete\") {\n\t\tconst completed = completeGoalManually(current, now);\n\t\tif (!completed.ok) {\n\t\t\thost.showError(completed.error);\n\t\t\treturn;\n\t\t}\n\t\thost.session.saveGoalStateSnapshot(completed.state, current ? getGoalStateRevision(current) : undefined);\n\t\thost.showStatus(\"Goal completed manually.\");\n\t\thost.refreshAutonomyFooterStatus();\n\t\treturn;\n\t}\n\n\tif (input === \"clear\") {\n\t\tconst cleared = clearPersistedGoal(host.session, now);\n\t\tif (!cleared.ok) {\n\t\t\thost.showError(cleared.error);\n\t\t\treturn;\n\t\t}\n\t\thost.showStatus(cleared.cleared ? \"Goal cleared.\" : \"No goal exists to clear.\");\n\t\thost.refreshAutonomyFooterStatus();\n\t\treturn;\n\t}\n\n\tif (input === \"close\" || input === \"cancel\") {\n\t\tconst cancelled = cancelPersistedGoal(host.session, now);\n\t\tif (!cancelled.ok) {\n\t\t\thost.showError(cancelled.error);\n\t\t\treturn;\n\t\t}\n\t\thost.showStatus(\"Goal closed.\");\n\t\thost.refreshAutonomyFooterStatus();\n\t\treturn;\n\t}\n\n\tif (input === \"reopen\" || input.startsWith(\"reopen \")) {\n\t\tconst requirementId = input.slice(\"reopen\".length).trim();\n\t\tif (!requirementId) {\n\t\t\thost.showError(\"Usage: /goal reopen <requirement-id>\");\n\t\t\treturn;\n\t\t}\n\t\tif (!current) {\n\t\t\thost.showError(\"No goal exists to update.\");\n\t\t\treturn;\n\t\t}\n\t\tconst requirement = current.requirements.find((candidate) => candidate.id === requirementId);\n\t\tif (!requirement || requirement.status !== \"blocked\") {\n\t\t\thost.showError(\n\t\t\t\trequirement\n\t\t\t\t\t? `Requirement '${requirementId}' is ${requirement.status}; only blocked requirements can be reopened.`\n\t\t\t\t\t: `Unknown requirement '${requirementId}'.`,\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tlet active = current;\n\t\tif (active.status === \"blocked\") {\n\t\t\tconst resumed = resumeGoal(active, now);\n\t\t\tif (!resumed.ok) {\n\t\t\t\thost.showError(resumed.error);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tactive = resumed.state;\n\t\t}\n\t\tconst reopened = applyGoalAction(active, { action: \"reopen_requirement\", requirementId }, now);\n\t\tif (!reopened.ok) {\n\t\t\thost.showError(reopened.error);\n\t\t\treturn;\n\t\t}\n\t\thost.session.saveGoalStateSnapshot(reopened.state, getGoalStateRevision(current));\n\t\tif (isGoalExecutionActive(reopened.state.status)) host.session.restoreGoalRuntimeAfterResume();\n\t\thost.showStatus(\n\t\t\t`Requirement '${requirementId}' reopened${current.status === \"blocked\" ? \" and goal resumed\" : \"\"}.`,\n\t\t);\n\t\thost.refreshAutonomyFooterStatus();\n\t\treturn;\n\t}\n\n\tconst overriding = input === \"override\" || input.startsWith(\"override \");\n\tconst goalText = overriding ? input.slice(\"override\".length).trim() : input;\n\tif (!goalText) {\n\t\thost.showError(\"Usage: /goal override <text>\");\n\t\treturn;\n\t}\n\tconst goalId = `goal-${randomUUID()}`;\n\tconst started = overriding\n\t\t? replaceGoal({ goalId, userGoal: goalText }, now)\n\t\t: applyGoalAction(current, { action: \"start\", goalId, userGoal: goalText }, now);\n\tif (!started.ok) {\n\t\thost.showError(`${started.error} Use /goal override <text> to replace it explicitly.`);\n\t\treturn;\n\t}\n\thost.session.saveGoalStateSnapshot(started.state, current ? getGoalStateRevision(current) : undefined);\n\tconst verb = overriding ? \"overridden\" : \"started\";\n\ttry {\n\t\t// Submit one bootstrap pass, then yield to the event-driven idle scheduler. This is a scheduling\n\t\t// quantum, not a goal ceiling: an active goal is immediately rearmed and the configured goal turn\n\t\t// limit (unbounded by default) governs subsequent continuation.\n\t\tconst result = await host.session.continueGoalLoop({\n\t\t\tmaxTurns: 1,\n\t\t\tmaxStallTurns: host.getMaxStallTurns?.() ?? 20,\n\t\t\tmaxWallClockMinutes: 0,\n\t\t});\n\t\tif (result.stopReason === \"already_continuing\") {\n\t\t\thost.showStatus(`Goal ${verb}: the autonomy loop is already continuing this goal.`);\n\t\t} else if (result.stopReason === \"session_disposed\") {\n\t\t\thost.showStatus(`Goal ${verb}, but the session was disposed before continuation could run.`);\n\t\t} else {\n\t\t\tconst continuation = result.finalSnapshot.continuation;\n\t\t\thost.showStatus(`Goal ${verb}: ${continuation.action}/${continuation.reasonCode}.`);\n\t\t\tif (continuation.action === \"continue\") host.session.restoreGoalRuntimeAfterResume();\n\t\t}\n\t} catch (error) {\n\t\thost.showError(`Goal continuation failed: ${error instanceof Error ? error.message : String(error)}`);\n\t} finally {\n\t\thost.refreshAutonomyFooterStatus();\n\t}\n}\n\nexport interface TaskCommandHost {\n\treadonly session: {\n\t\tgetTaskStepsStateSnapshot: () => TaskStepsState | undefined;\n\t\tsaveTaskStepsStateSnapshot: (state: TaskStepsState) => string;\n\t};\n\tshowStatus(message: string): void;\n\tshowError(message: string): void;\n}\n\nexport function handleTaskCommand(host: TaskCommandHost, text: string): void {\n\tconst parsed = parseTaskCommand(text);\n\tif (!parsed.ok) {\n\t\thost.showError(parsed.error);\n\t\treturn;\n\t}\n\tif (parsed.command.type === \"retired_execution\") {\n\t\thost.showStatus(\n\t\t\t`/task ${parsed.command.operation} was retired with the detached extension runner. Ask Pi to use native delegate; session-owned worker lanes notify on completion without polling.`,\n\t\t);\n\t\treturn;\n\t}\n\n\tconst now = new Date().toISOString();\n\tlet state = host.session.getTaskStepsStateSnapshot() ?? createTaskStepsState(now);\n\ttry {\n\t\tswitch (parsed.command.type) {\n\t\t\tcase \"list\":\n\t\t\t\thost.showStatus(formatTaskSteps(state, { includeTerminal: parsed.command.includeTerminal }));\n\t\t\t\treturn;\n\t\t\tcase \"add\":\n\t\t\t\tstate = addTaskStep(state, { content: parsed.command.content }, now);\n\t\t\t\tbreak;\n\t\t\tcase \"update\":\n\t\t\t\tstate = updateTaskStep(\n\t\t\t\t\tstate,\n\t\t\t\t\tparsed.command.selector,\n\t\t\t\t\t{\n\t\t\t\t\t\tstatus: parsed.command.status,\n\t\t\t\t\t\tnote: parsed.command.note,\n\t\t\t\t\t\tevidence: parsed.command.evidence ? [parsed.command.evidence] : undefined,\n\t\t\t\t\t},\n\t\t\t\t\tnow,\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase \"clear\":\n\t\t\t\tstate = clearTaskSteps(state, now);\n\t\t\t\tbreak;\n\t\t\tcase \"compact\":\n\t\t\t\tstate = compactTaskSteps(state, now);\n\t\t\t\tbreak;\n\t\t}\n\t\thost.session.saveTaskStepsStateSnapshot(state);\n\t\thost.showStatus(formatTaskSteps(state));\n\t} catch (error) {\n\t\thost.showError(error instanceof Error ? error.message : String(error));\n\t}\n}\n\nexport interface GoalContinueCommandHost {\n\treadonly session: {\n\t\tcontinueGoalLoop: (options: GoalContinuationLoopOptions) => Promise<GoalContinuationLoopResult>;\n\t};\n\tparseGoalContinueCommand(text: string): ParsedGoalContinueCommand;\n\tshowStatus(message: string): void;\n\tshowError(message: string): void;\n\trefreshAutonomyFooterStatus(): void;\n}\n\nexport async function handleGoalContinueCommand(host: GoalContinueCommandHost, text: string): Promise<void> {\n\tconst parsed = host.parseGoalContinueCommand(text);\n\tif (!parsed.ok) {\n\t\thost.showError(parsed.error);\n\t\treturn;\n\t}\n\n\thost.showStatus(\n\t\t`Goal continuation started: ${parsed.maxTurns === 0 ? \"unbounded turns\" : `up to ${parsed.maxTurns} turn(s)`}, recovery threshold ${parsed.maxStallTurns}, wall-clock limit ${parsed.maxWallClockMinutes || \"disabled\"} minute(s).`,\n\t);\n\ttry {\n\t\tconst result = await host.session.continueGoalLoop({\n\t\t\tmaxTurns: parsed.maxTurns,\n\t\t\tmaxStallTurns: parsed.maxStallTurns,\n\t\t\tmaxWallClockMinutes: parsed.maxWallClockMinutes,\n\t\t});\n\t\tconst continuation = result.finalSnapshot.continuation;\n\t\thost.showStatus(\n\t\t\t`Goal continuation stopped: ${result.stopReason}; submitted ${result.turnsSubmitted} turn(s); latest decision ${continuation.action}/${continuation.reasonCode}.`,\n\t\t);\n\t} catch (error) {\n\t\thost.showError(`Goal continuation failed: ${error instanceof Error ? error.message : String(error)}`);\n\t} finally {\n\t\thost.refreshAutonomyFooterStatus();\n\t}\n}\n\nexport interface SessionInfoCommandHost {\n\treadonly session: {\n\t\tgetSessionStats: () => ReturnType<AgentSession[\"getSessionStats\"]>;\n\t\tgetCostSummary: () => ReturnType<AgentSession[\"getCostSummary\"]>;\n\t\tgetModelRouterStatus: (formatLabel: (label: string) => string) => string;\n\t};\n\treadonly sessionManager: { getSessionName: () => string | undefined };\n\treadonly chatContainer: Container;\n\treadonly ui: { requestRender: () => void };\n}\n\nexport function handleSessionCommand(host: SessionInfoCommandHost): void {\n\tconst stats = host.session.getSessionStats();\n\tconst sessionName = host.sessionManager.getSessionName();\n\n\tlet info = `${theme.bold(\"Session Info\")}\\n\\n`;\n\tif (sessionName) {\n\t\tinfo += `${theme.fg(\"dim\", \"Name:\")} ${sessionName}\\n`;\n\t}\n\tinfo += `${theme.fg(\"dim\", \"File:\")} ${stats.sessionFile ?? \"In-memory\"}\\n`;\n\tinfo += `${theme.fg(\"dim\", \"ID:\")} ${stats.sessionId}\\n\\n`;\n\tinfo += `${theme.bold(\"Messages\")}\\n`;\n\tinfo += `${theme.fg(\"dim\", \"User:\")} ${stats.userMessages}\\n`;\n\tinfo += `${theme.fg(\"dim\", \"Assistant:\")} ${stats.assistantMessages}\\n`;\n\tinfo += `${theme.fg(\"dim\", \"Tool Calls:\")} ${stats.toolCalls}\\n`;\n\tinfo += `${theme.fg(\"dim\", \"Tool Results:\")} ${stats.toolResults}\\n`;\n\tinfo += `${theme.fg(\"dim\", \"Total:\")} ${stats.totalMessages}\\n\\n`;\n\tinfo += `${theme.bold(\"Tokens\")}\\n`;\n\tinfo += `${theme.fg(\"dim\", \"Input:\")} ${stats.tokens.input.toLocaleString()}\\n`;\n\tinfo += `${theme.fg(\"dim\", \"Output:\")} ${stats.tokens.output.toLocaleString()}\\n`;\n\tif (stats.tokens.cacheRead > 0) {\n\t\tinfo += `${theme.fg(\"dim\", \"Cache Read:\")} ${stats.tokens.cacheRead.toLocaleString()}\\n`;\n\t}\n\tif (stats.tokens.cacheWrite > 0) {\n\t\tinfo += `${theme.fg(\"dim\", \"Cache Write:\")} ${stats.tokens.cacheWrite.toLocaleString()}\\n`;\n\t}\n\tinfo += `${theme.fg(\"dim\", \"Total:\")} ${stats.tokens.total.toLocaleString()}\\n`;\n\n\tconst costs = host.session.getCostSummary();\n\tif (hasCostSummarySignal(costs)) {\n\t\tinfo += `\\n${theme.bold(\"Cost\")}\\n`;\n\t\tinfo += formatCostReport(costs);\n\t}\n\n\tinfo += `\\n\\n${theme.bold(\"Model Router\")}\\n`;\n\tinfo += host.session.getModelRouterStatus((label) => theme.fg(\"dim\", label));\n\n\thost.chatContainer.addChild(new Spacer(1));\n\thost.chatContainer.addChild(new Text(info, 1, 0));\n\thost.ui.requestRender();\n}\n"]}
@@ -147,6 +147,8 @@ Additional paths and filters via `settings.json`:
147
147
 
148
148
  Resource arrays support include/exclude patterns: plain entries include local paths, `!pattern` excludes matching auto-discovered resources, `+path` force-includes an exact path, and `-path` force-excludes an exact path. `disabledResources.extensions` remains as the legacy explicit reversible unload form and is merged as a `resourceProfiles` block filter. Prefer `resourceProfiles` when you need focused per-session, per-repo, or subagent-specific loading.
149
149
 
150
+ Pi ships the passive `tps` status-line meter as a default-on bundled extension. It loads without an active resource profile, but explicit user authority remains final: add `"tps"` to `disabledResources.extensions`, block it in an active profile, or start with `--no-extensions` to disable it. Other bundled extensions still require an active profile allow rule.
151
+
150
152
  Extensions may carry profile blocks inside comments. Pi reads only matching `<resource-profile>` blocks as JSON config before filtering, and ignores the rest of the extension file for profile parsing:
151
153
 
152
154
  ```ts
package/docs/index.md CHANGED
@@ -48,6 +48,7 @@ For the full first-run flow, see [Quickstart](quickstart.md).
48
48
  - [FastContext scout](scout.md) - read-only repository scout setup and 10 GB local profile.
49
49
  - [Tool repair](tool-repair.md) - repaired tool-call arguments, health diagnostics, kill switches, and replay workflow.
50
50
  - [Task steps](task-steps.md) - native session checklist, slash commands, persistence, and delegation migration.
51
+ - [Work lifecycle](work-lifecycle.md) - canonical five-phase Survey-to-delivery contract, adaptive solo/team routing, verification, and checkpoint boundaries.
51
52
  - [Native Python](python.md) - uv-managed bounded Python execution, provisioning, output limits, and cross-platform file guidance.
52
53
  - [Managed data tools](managed-data-tools.md) - pinned rg, jq, and Rust jscpd provisioning without project files.
53
54
 
@@ -86,6 +86,8 @@ Modifier combinations: `ctrl+shift+x`, `alt+ctrl+x`, `ctrl+shift+alt+x`, `ctrl+1
86
86
  | `app.clear` | `ctrl+c` | Clear editor |
87
87
  | `app.exit` | `ctrl+d` | Exit (when editor empty) |
88
88
  | `app.suspend` | `ctrl+z` (none on Windows) | Suspend to background |
89
+ | `app.agents.open` | `ctrl+q` | Inspect the full goal, requirements, evidence, task plan, agents, and background work |
90
+ | `app.agents.close` | `escape` | Close the work inspector |
89
91
  | `app.editor.external` | `ctrl+g` | Open in external editor (`$VISUAL` or `$EDITOR`) |
90
92
  | `app.clipboard.pasteImage` | `ctrl+v` (Unix/macOS), `alt+v` (Windows), both (WSL) | Paste image or clipboard text |
91
93
 
package/docs/sessions.md CHANGED
@@ -71,7 +71,7 @@ to …`, or `I want to refactor/rewrite/rebuild/redesign …` create the same du
71
71
  Handover wording (`by the way`, `i'm handing over`, sub-agent or role assignment) is classification
72
72
  only; the previous user task is the objective. Pi deliberately does not infer persistence from an
73
73
  ordinary multi-step request, and it will not replace an unfinished goal implicitly. Active
74
- chat-created goals use the normal bounded, hidden continuation trigger and survive compaction
74
+ chat-created goals use the normal automatic hidden continuation trigger and survive compaction
75
75
  through one compact active-goal projection.
76
76
 
77
77
  Reading a session `.jsonl` with `read` returns a labeled transcript (user/assistant/compaction or
@@ -8,6 +8,8 @@ Task steps complement the native goal and delegation systems:
8
8
  - `goal` records durable outcome requirements and evidence.
9
9
  - `delegate` starts worker lanes, retrieves status, reviews claims, and coordinates them.
10
10
 
11
+ For the canonical Survey → Contract → Plan/Route → Execute → Prove/Deliver flow and the ownership boundary between these systems, see [Five-step work lifecycle](work-lifecycle.md).
12
+
11
13
  ## Statuses
12
14
 
13
15
  Each step has one of these statuses:
@@ -42,7 +42,7 @@ starts every provider with the initial prompt file as part of the same CLI comma
42
42
  On deadline, the watcher persists `timeout` first and then terminates its owned pane. A timed-out
43
43
  provider process therefore cannot remain live and continue spending resources.
44
44
 
45
- The parent Pi session watches result-file events. Once a turn's worker is terminal, it records a per-agent notification marker (`notifiedTurn`) and sends a bounded, source-labelled untrusted handoff with `triggerTurn: true`. Startup performs one reconciliation pass for terminal events produced while Pi was offline, and also reconciles tmux **sessions**: see [Persistence](#persistence-follow-ups-reconcile-dismiss) below.
45
+ The parent Pi session watches result-file events. Once a turn's worker is terminal, it records a per-agent notification marker (`notifiedTurn`) and sends a bounded, source-labelled untrusted handoff with `triggerTurn: true`. Startup reconciles every persisted terminal turn into host lane state, including turns whose user-facing handoff was already delivered, so a rehydrated running projection cannot outlive the worker. It also reconciles tmux **sessions**: see [Persistence](#persistence-follow-ups-reconcile-dismiss) below.
46
46
 
47
47
  Do not poll pane state, capture pane output, or inspect logs merely to detect completion. Use `job_status` or terminal artifacts after the handoff only when its bounded evidence is insufficient.
48
48
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  Pi validates every model-emitted tool call against its TypeBox schema before execution. Valid calls run unchanged. Invalid calls either pass through a named deterministic repair and then execute with the repaired arguments, or they bounce with schema feedback when no safe repair applies.
4
4
 
5
- Execution failures are not argument repairs. Pi removes their potentially large failed protocol turns from provider context and normally retains one bounded failure record: constant-size operation fingerprint, bounded operation preview, occurrence count, failure code, a cause-bearing diagnostic when available, and `next_action`. Every retained record carries `"MUST":true`; the provider receives one canonical `mandatory_tool_failure_recovery_protocol` template explaining that `repair` or `next_action` is an execution constraint, unchanged retries are gated, and unrelated argument changes are not recovery. A matching successful retry clears the record. Change-approach classes such as non-UTF-8 text edits are different: Pi discards the complete attempted operation, exposes one bounded reason/directive for the next assistant response, then expires it. A tool-owned guard can use the same one-turn path for an operation rejected before external execution; the runtime remains available, and compaction does not retain that rejected call as completed work or an open problem. Pi uses `repair` only for argument/protocol rejections with a concrete call correction; policy, preflight, abort, and execution failures use `next_action`. It never invents a deterministic repair from an unknown nonzero exit.
5
+ Execution failures are not argument repairs. Pi removes their potentially large failed protocol turns from provider context and normally retains one bounded failure record: constant-size operation fingerprint, bounded operation preview, occurrence count, failure code, a cause-bearing diagnostic when available, and `next_action`. Every retained record carries `"MUST":true`; the provider receives one canonical `mandatory_tool_failure_recovery_protocol` template explaining that `repair` or `next_action` is an execution constraint, unchanged retries are gated, and unrelated argument changes are not recovery. A successful exact retry clears its record. Any successful tool result or a new owner turn advances the recovery world and re-admits previously failed exact operations; an operation that fails again is refused again until the next advance. Change-approach classes such as non-UTF-8 text edits are different: Pi discards the complete attempted operation, exposes one bounded reason/directive for the next assistant response, then expires it. A tool-owned guard can use the same one-turn path for an operation rejected before external execution; the runtime remains available, and compaction does not retain that rejected call as completed work or an open problem. Pi uses `repair` only for argument/protocol rejections with a concrete call correction; policy, preflight, abort, and execution failures use `next_action`. It never invents a deterministic repair from an unknown nonzero exit.
6
6
 
7
7
  Canonical execution-failure template:
8
8
 
@@ -23,7 +23,7 @@ Canonical execution-failure template:
23
23
 
24
24
  - The shared validation choke point is `validateToolArguments` in `packages/ai/src/utils/validation.ts`.
25
25
  - Repair is validate-then-repair: schema-valid arguments are returned unchanged; only invalid arguments enter the repair layer.
26
- - Recovery exhaustion opens the run-scoped circuit, disables tools, and permits exactly one provider delivery turn. A tool call emitted despite that empty tool surface is paired with a rejected result without running hooks or tool code, followed by a deterministic blocker delivery.
26
+ - The execution gate refuses only the exact unchanged operation whose last run was unproductive. Unrelated tools and materially changed calls remain available. Any successful tool result or a new owner turn advances the world and re-admits it; internal custom continuation messages do not impersonate owner turns. Refused calls retain tool-result pairing but run no hooks or tool code. Only the bounded repeated-signature and provider-turn cost guards can stop a wedged run.
27
27
  - Repair is built-in and has no settings toggle. `PI_TOOL_REPAIR_DISABLED=1` is only an emergency diagnostic kill switch; normal configuration should leave repair on.
28
28
  - Teaching can be disabled independently with `toolRepair.teach: false` or `PI_TOOL_REPAIR_TEACH_DISABLED=1`. Repairs can still execute; the in-band "Tool argument repair note" is suppressed.
29
29
  - Tool-recovery logging can be disabled with `toolRepair.logging: false`. Repairs still run, but Pi does not enqueue recovery records or spawn the background recovery-log worker.
@@ -100,7 +100,8 @@ Confirmed against current source:
100
100
  - Repair mode names and standing-rule text: `packages/ai/src/utils/tool-repair/registry.ts`.
101
101
  - Agent repair event metadata and teach-note gate: `packages/agent/src/types.ts`, `packages/agent/src/agent-loop.ts`.
102
102
  - Bounded execution-failure assessment and retry memory: `packages/agent/src/tool-failure-memory.ts`.
103
- - Mandatory recovery template and terminal-delivery prompt: `packages/agent/src/tool-failure-recovery-protocol.ts`.
103
+ - Mandatory recovery template: `packages/agent/src/tool-failure-recovery-protocol.ts`.
104
+ - Operation-local replay admission and transcript restoration: `packages/agent/src/tool-failure-recovery-gate.ts`.
104
105
  - Interactive marker: `packages/coding-agent/src/modes/interactive/components/tool-execution.ts`.
105
106
  - Settings/env kill switches: `packages/coding-agent/src/core/settings-manager.ts`, `packages/coding-agent/src/core/tool-repair-settings.ts`.
106
107
  - Health, tool probing, rule removal, and protocol reset: `packages/coding-agent/src/core/tool-repair-health.ts`, `packages/coding-agent/src/core/models/adaptation-store.ts`, `packages/coding-agent/src/core/slash-commands.ts`, `packages/coding-agent/src/modes/interactive/interactive-mode.ts`, `packages/coding-agent/src/modes/rpc/rpc-mode.ts`.