@bastani/atomic 0.9.45 → 0.9.46

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 (214) hide show
  1. package/CHANGELOG.md +79 -0
  2. package/dist/builtin/intercom/CHANGELOG.md +22 -0
  3. package/dist/builtin/intercom/broker/broker.ts +124 -10
  4. package/dist/builtin/intercom/broker/client.ts +177 -25
  5. package/dist/builtin/intercom/broker/multinode-router.ts +228 -27
  6. package/dist/builtin/intercom/broker/multinode-state-store.ts +10 -0
  7. package/dist/builtin/intercom/broker/recipient-receipts.ts +38 -4
  8. package/dist/builtin/intercom/broker/send-handler.ts +9 -2
  9. package/dist/builtin/intercom/broker/sql-outbox-store.ts +29 -4
  10. package/dist/builtin/intercom/group.ts +25 -0
  11. package/dist/builtin/intercom/index.bundle.mjs +177 -35
  12. package/dist/builtin/intercom/package.json +1 -1
  13. package/dist/builtin/intercom/retry-policy.ts +7 -0
  14. package/dist/builtin/intercom/types.ts +21 -0
  15. package/dist/builtin/mcp/package.json +1 -1
  16. package/dist/builtin/subagents/CHANGELOG.md +21 -0
  17. package/dist/builtin/subagents/package.json +1 -1
  18. package/dist/builtin/subagents/src/extension/index.bundle.mjs +152 -56
  19. package/dist/builtin/web-access/package.json +1 -1
  20. package/dist/builtin/workflows/CHANGELOG.md +79 -0
  21. package/dist/builtin/workflows/builtin/{chunk-6901nsd6.js → chunk-6jpwc09k.js} +1 -1
  22. package/dist/builtin/workflows/builtin/{chunk-vwx023ge.js → chunk-qhm35ntx.js} +1 -1
  23. package/dist/builtin/workflows/builtin/{chunk-jvna28mq.js → chunk-zhyqnf5g.js} +331 -68
  24. package/dist/builtin/workflows/builtin/goal.js +2 -2
  25. package/dist/builtin/workflows/builtin/index.js +3 -3
  26. package/dist/builtin/workflows/builtin/ralph.js +2 -2
  27. package/dist/builtin/workflows/package.json +1 -1
  28. package/dist/builtin/workflows/skills/prompt-engineer/SKILL.md +1 -0
  29. package/dist/builtin/workflows/skills/prompt-engineer/references/gpt_6.md +2 -2
  30. package/dist/builtin/workflows/skills/prompt-engineer/references/gpt_6_1_sol.md +2 -2
  31. package/dist/builtin/workflows/skills/prompt-engineer/references/gpt_6_1_terra.md +77 -0
  32. package/dist/builtin/workflows/src/authoring.d.ts +1 -1
  33. package/dist/builtin/workflows/src/durable/journal/internal.d.ts +2 -0
  34. package/dist/builtin/workflows/src/extension/index.bundle.mjs +7104 -3387
  35. package/dist/builtin/workflows/src/extension/local-worker-entry.mjs +11105 -7264
  36. package/dist/builtin/workflows/src/index.js +6796 -3606
  37. package/dist/builtin/workflows/src/local-worker-entry.mjs +11105 -7264
  38. package/dist/builtin/workflows/src/shared/authoring-contract-ui.d.ts +19 -0
  39. package/dist/core/agent-session-boundaries.d.ts.map +1 -1
  40. package/dist/core/agent-session-boundaries.js +1 -0
  41. package/dist/core/agent-session-boundaries.js.map +1 -1
  42. package/dist/core/agent-session-events.d.ts.map +1 -1
  43. package/dist/core/agent-session-events.js +2 -1
  44. package/dist/core/agent-session-events.js.map +1 -1
  45. package/dist/core/agent-session-extension-bindings.d.ts.map +1 -1
  46. package/dist/core/agent-session-extension-bindings.js +15 -2
  47. package/dist/core/agent-session-extension-bindings.js.map +1 -1
  48. package/dist/core/agent-session-methods.d.ts +3 -2
  49. package/dist/core/agent-session-methods.d.ts.map +1 -1
  50. package/dist/core/agent-session-methods.js.map +1 -1
  51. package/dist/core/agent-session-prompt.d.ts +4 -2
  52. package/dist/core/agent-session-prompt.d.ts.map +1 -1
  53. package/dist/core/agent-session-prompt.js +13 -8
  54. package/dist/core/agent-session-prompt.js.map +1 -1
  55. package/dist/core/agent-session-recovery.d.ts.map +1 -1
  56. package/dist/core/agent-session-recovery.js +92 -1
  57. package/dist/core/agent-session-recovery.js.map +1 -1
  58. package/dist/core/agent-session-tasks.d.ts.map +1 -1
  59. package/dist/core/agent-session-tasks.js +8 -1
  60. package/dist/core/agent-session-tasks.js.map +1 -1
  61. package/dist/core/agent-session-transfer.d.ts.map +1 -1
  62. package/dist/core/agent-session-transfer.js +5 -0
  63. package/dist/core/agent-session-transfer.js.map +1 -1
  64. package/dist/core/agent-session.d.ts +2 -0
  65. package/dist/core/agent-session.d.ts.map +1 -1
  66. package/dist/core/agent-session.js +2 -0
  67. package/dist/core/agent-session.js.map +1 -1
  68. package/dist/core/copilot-errors.d.ts +6 -0
  69. package/dist/core/copilot-errors.d.ts.map +1 -0
  70. package/dist/core/copilot-errors.js +17 -0
  71. package/dist/core/copilot-errors.js.map +1 -0
  72. package/dist/core/execution-model-router.d.ts.map +1 -1
  73. package/dist/core/execution-model-router.js +12 -2
  74. package/dist/core/execution-model-router.js.map +1 -1
  75. package/dist/core/extensions/context-types.d.ts +7 -0
  76. package/dist/core/extensions/context-types.d.ts.map +1 -1
  77. package/dist/core/extensions/context-types.js.map +1 -1
  78. package/dist/core/extensions/runner-context.d.ts.map +1 -1
  79. package/dist/core/extensions/runner-context.js +6 -0
  80. package/dist/core/extensions/runner-context.js.map +1 -1
  81. package/dist/core/extensions/ui-types.d.ts +9 -1
  82. package/dist/core/extensions/ui-types.d.ts.map +1 -1
  83. package/dist/core/extensions/ui-types.js.map +1 -1
  84. package/dist/core/extensions/workflow-activity-hub.d.ts +4 -0
  85. package/dist/core/extensions/workflow-activity-hub.d.ts.map +1 -1
  86. package/dist/core/extensions/workflow-activity-hub.js +26 -5
  87. package/dist/core/extensions/workflow-activity-hub.js.map +1 -1
  88. package/dist/core/extensions/workflow-events.d.ts +5 -0
  89. package/dist/core/extensions/workflow-events.d.ts.map +1 -1
  90. package/dist/core/extensions/workflow-events.js.map +1 -1
  91. package/dist/core/messages.d.ts +5 -0
  92. package/dist/core/messages.d.ts.map +1 -1
  93. package/dist/core/messages.js +1 -1
  94. package/dist/core/messages.js.map +1 -1
  95. package/dist/core/model-fallback-failures.d.ts +1 -1
  96. package/dist/core/model-fallback-failures.d.ts.map +1 -1
  97. package/dist/core/model-fallback-failures.js +37 -3
  98. package/dist/core/model-fallback-failures.js.map +1 -1
  99. package/dist/core/model-resolver-defaults.js +2 -2
  100. package/dist/core/model-resolver-defaults.js.map +1 -1
  101. package/dist/core/model-runtime-streaming.js +2 -2
  102. package/dist/core/model-runtime-streaming.js.map +1 -1
  103. package/dist/core/package-manager-npm.d.ts.map +1 -1
  104. package/dist/core/package-manager-npm.js +7 -3
  105. package/dist/core/package-manager-npm.js.map +1 -1
  106. package/dist/core/provider-composer.d.ts.map +1 -1
  107. package/dist/core/provider-composer.js +19 -11
  108. package/dist/core/provider-composer.js.map +1 -1
  109. package/dist/core/provider-rate-limits.d.ts +55 -6
  110. package/dist/core/provider-rate-limits.d.ts.map +1 -1
  111. package/dist/core/provider-rate-limits.js +182 -29
  112. package/dist/core/provider-rate-limits.js.map +1 -1
  113. package/dist/core/provider-request-admission.d.ts.map +1 -1
  114. package/dist/core/provider-request-admission.js +42 -18
  115. package/dist/core/provider-request-admission.js.map +1 -1
  116. package/dist/core/storage/node-sqlite.d.ts.map +1 -1
  117. package/dist/core/storage/node-sqlite.js +176 -19
  118. package/dist/core/storage/node-sqlite.js.map +1 -1
  119. package/dist/core/storage/provider.d.ts +4 -2
  120. package/dist/core/storage/provider.d.ts.map +1 -1
  121. package/dist/core/storage/provider.js +94 -5
  122. package/dist/core/storage/provider.js.map +1 -1
  123. package/dist/core/structured-output/index.d.ts.map +1 -1
  124. package/dist/core/structured-output/index.js +15 -8
  125. package/dist/core/structured-output/index.js.map +1 -1
  126. package/dist/core/structured-output/provider-failure.d.ts +17 -0
  127. package/dist/core/structured-output/provider-failure.d.ts.map +1 -0
  128. package/dist/core/structured-output/provider-failure.js +28 -0
  129. package/dist/core/structured-output/provider-failure.js.map +1 -0
  130. package/dist/core/tasks/completion.d.ts +6 -1
  131. package/dist/core/tasks/completion.d.ts.map +1 -1
  132. package/dist/core/tasks/completion.js +33 -18
  133. package/dist/core/tasks/completion.js.map +1 -1
  134. package/dist/core/tasks/pause.d.ts +2 -1
  135. package/dist/core/tasks/pause.d.ts.map +1 -1
  136. package/dist/core/tasks/pause.js +3 -2
  137. package/dist/core/tasks/pause.js.map +1 -1
  138. package/dist/core/tools/bash.d.ts.map +1 -1
  139. package/dist/core/tools/bash.js +13 -7
  140. package/dist/core/tools/bash.js.map +1 -1
  141. package/dist/core/tools/grep.d.ts.map +1 -1
  142. package/dist/core/tools/grep.js +6 -4
  143. package/dist/core/tools/grep.js.map +1 -1
  144. package/dist/core/tools/shell-task-render.d.ts +1 -0
  145. package/dist/core/tools/shell-task-render.d.ts.map +1 -1
  146. package/dist/core/tools/shell-task-render.js +7 -2
  147. package/dist/core/tools/shell-task-render.js.map +1 -1
  148. package/dist/core/tools/shell-task-status.d.ts.map +1 -1
  149. package/dist/core/tools/shell-task-status.js +2 -1
  150. package/dist/core/tools/shell-task-status.js.map +1 -1
  151. package/dist/extensions/tool-search/tool.d.ts +5 -0
  152. package/dist/extensions/tool-search/tool.d.ts.map +1 -1
  153. package/dist/extensions/tool-search/tool.js +38 -5
  154. package/dist/extensions/tool-search/tool.js.map +1 -1
  155. package/dist/index.d.ts +1 -1
  156. package/dist/index.d.ts.map +1 -1
  157. package/dist/index.js +1 -1
  158. package/dist/index.js.map +1 -1
  159. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  160. package/dist/modes/interactive/components/assistant-message.js +20 -12
  161. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  162. package/dist/modes/interactive/components/chat-session-host-actions.js +3 -2
  163. package/dist/modes/interactive/components/chat-session-host-actions.js.map +1 -1
  164. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  165. package/dist/modes/interactive/components/login-dialog.js +42 -14
  166. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  167. package/dist/modes/interactive/interactive-extension-context.js +2 -1
  168. package/dist/modes/interactive/interactive-extension-context.js.map +1 -1
  169. package/dist/modes/interactive/interactive-extension-custom-ui.js +1 -1
  170. package/dist/modes/interactive/interactive-extension-custom-ui.js.map +1 -1
  171. package/dist/modes/interactive/interactive-extension-dialogs.js +10 -4
  172. package/dist/modes/interactive/interactive-extension-dialogs.js.map +1 -1
  173. package/dist/modes/interactive/interactive-mode-surface.d.ts +1 -0
  174. package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -1
  175. package/dist/modes/interactive/interactive-mode-surface.js.map +1 -1
  176. package/dist/modes/interactive/interactive-startup.d.ts.map +1 -1
  177. package/dist/modes/interactive/interactive-startup.js +5 -6
  178. package/dist/modes/interactive/interactive-startup.js.map +1 -1
  179. package/dist/modes/interactive-engine/engine-custom-ui.d.ts +3 -0
  180. package/dist/modes/interactive-engine/engine-custom-ui.d.ts.map +1 -1
  181. package/dist/modes/interactive-engine/engine-custom-ui.js +1 -0
  182. package/dist/modes/interactive-engine/engine-custom-ui.js.map +1 -1
  183. package/dist/modes/interactive-engine/protocol.d.ts +6 -0
  184. package/dist/modes/interactive-engine/protocol.d.ts.map +1 -1
  185. package/dist/modes/interactive-engine/protocol.js +9 -0
  186. package/dist/modes/interactive-engine/protocol.js.map +1 -1
  187. package/dist/modes/interactive-engine/remote-component.d.ts.map +1 -1
  188. package/dist/modes/interactive-engine/remote-component.js +3 -2
  189. package/dist/modes/interactive-engine/remote-component.js.map +1 -1
  190. package/dist/modes/rpc/rpc-client-process.d.ts.map +1 -1
  191. package/dist/modes/rpc/rpc-client-process.js +8 -1
  192. package/dist/modes/rpc/rpc-client-process.js.map +1 -1
  193. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  194. package/dist/modes/rpc/rpc-client.js +7 -1
  195. package/dist/modes/rpc/rpc-client.js.map +1 -1
  196. package/dist/utils/ansi.d.ts +2 -0
  197. package/dist/utils/ansi.d.ts.map +1 -1
  198. package/dist/utils/ansi.js +5 -0
  199. package/dist/utils/ansi.js.map +1 -1
  200. package/docs/codemode.md +1 -1
  201. package/docs/intercom/reference.md +3 -3
  202. package/docs/llama-cpp.md +25 -14
  203. package/docs/models/evals.md +31 -12
  204. package/docs/models/reference.md +23 -51
  205. package/docs/models.md +3 -4
  206. package/docs/providers.md +5 -15
  207. package/docs/settings.md +1 -1
  208. package/docs/storage.md +2 -2
  209. package/docs/tools.md +1 -1
  210. package/docs/tui.md +2 -0
  211. package/docs/workflows/api-reference.md +20 -1
  212. package/docs/workflows/operations.md +17 -4
  213. package/npm-shrinkwrap.json +64 -44
  214. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"chat-session-host-actions.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/chat-session-host-actions.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AgentSessionQueuePauseControl } from \"../../../core/agent-session-methods.ts\";\nimport type { BashExecutionMessage } from \"../../../core/messages.ts\";\nimport { combineQueuedMessagesForEditor } from \"../chat-input-actions.ts\";\nimport { classifyChatCommand } from \"../skill-command-autocomplete.ts\";\nimport type { ChatMessageEntry } from \"./chat-message-renderer.ts\";\nimport { setChatSessionEditorText } from \"./chat-session-host-editor.ts\";\nimport {\n\tdecrementOptimisticUserSignature,\n\tincrementOptimisticUserSignature,\n\tisChatSessionBashRunning,\n\tisChatSessionStreaming,\n\tnotifyChatSessionStatus,\n\tnotifyChatSessionWarning,\n\trequiredChatSessionCommand,\n\trequiredChatSessionPromptCommand,\n\tsettleChatSessionPromptLifecycle,\n\tstartChatSessionWorkingLifecycle,\n\tstopChatSessionWorkingLifecycle,\n\tsyncChatSessionAnimationTick,\n} from \"./chat-session-host-runtime.ts\";\nimport type { ChatSessionHostState } from \"./chat-session-host-state.ts\";\nimport type { ChatSessionSubmitMode } from \"./chat-session-host-types.ts\";\nimport { errorMessage, parseBashInput, userMessageSignature } from \"./chat-session-host-utils.ts\";\nimport type { ChatTranscriptEntryLike } from \"./chat-transcript.js\";\n\nfunction supportsQueuedMessagePause(\n\tsession: AgentSessionQueuePauseControl | undefined,\n): session is AgentSessionQueuePauseControl {\n\treturn typeof session?.pauseQueuedMessages === \"function\" && typeof session.resumeQueuedMessages === \"function\";\n}\n\nexport function interruptChatSession<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n\toptions?: { restoreQueuedMessages?: boolean },\n): Promise<void> {\n\tconst active = state.interruptSettlement;\n\tif (active !== undefined) return active;\n\tstate.interruptFailureMessage = undefined;\n\tconst settlement = (async (): Promise<void> => {\n\t\ttry {\n\t\t\tconst session = state.getAgentSession?.();\n\t\t\tif (supportsQueuedMessagePause(session)) session.pauseQueuedMessages();\n\t\t\tif (options?.restoreQueuedMessages) {\n\t\t\t\trestoreQueuedMessagesToEditor(state, {\n\t\t\t\t\tsuppressEmptyNotice: true,\n\t\t\t\t\tpreserveUnprotectedCustomMessages: true,\n\t\t\t\t});\n\t\t\t}\n\t\t\tstate.sdkBusy = false;\n\t\t\tstate.workingMessage = undefined;\n\t\t\tstopChatSessionWorkingLifecycle(state, false);\n\t\t\tawait state.commands.interrupt?.();\n\t\t} catch (err) {\n\t\t\tstate.interruptFailureMessage = errorMessage(err);\n\t\t\tstate.statusMessage = state.interruptFailureMessage;\n\t\t\tthrow err;\n\t\t} finally {\n\t\t\tsyncChatSessionAnimationTick(state);\n\t\t\tstate.requestRender?.();\n\t\t}\n\t})();\n\tstate.interruptSettlement = settlement;\n\tvoid settlement\n\t\t.finally(() => {\n\t\t\tif (state.interruptSettlement === settlement) state.interruptSettlement = undefined;\n\t\t})\n\t\t.catch(() => {});\n\treturn settlement;\n}\n\nasync function submitAfterInterruptSettlement<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n\tsettlement: Promise<void>,\n\ttext: string,\n\tmode: ChatSessionSubmitMode,\n): Promise<void> {\n\tconst editorText = state.inputBuffer;\n\ttry {\n\t\tstate.sdkBusy = true;\n\t\tstate.statusMessage = \"resuming…\";\n\t\tsyncChatSessionAnimationTick(state);\n\t\tstate.requestRender?.();\n\t\tawait settlement;\n\t\tawait requiredChatSessionCommand(state, \"resume\")(text, mode);\n\t\tif (state.inputBuffer === editorText) setChatSessionEditorText(state, \"\");\n\t\tstate.sdkBusy = false;\n\t\tif (state.statusMessage === \"resuming…\") state.statusMessage = \"\";\n\t} catch (err) {\n\t\tstate.sdkBusy = false;\n\t\tstate.statusMessage = errorMessage(err);\n\t\tstate.interruptFailureMessage = undefined;\n\t} finally {\n\t\tsyncChatSessionAnimationTick(state);\n\t\tstate.requestRender?.();\n\t}\n}\n\nexport async function submitChatSession<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n\tmode: ChatSessionSubmitMode = \"auto\",\n\tsubmittedText?: string,\n): Promise<void> {\n\tif (state.disposed) return;\n\tconst text = (submittedText ?? state.inputBuffer).trim();\n\tif (!text) return;\n\tif (state.statusMessage === state.lastWarningMessage) state.statusMessage = \"\";\n\tstate.lastWarningMessage = undefined;\n\t// Task inspection is local even while Escape is settling. It must never release\n\t// the pause or fall through to model delivery; other slash commands keep their order.\n\tif (classifyChatCommand(text) === \"tasks\") {\n\t\ttry {\n\t\t\tif (!(await state.commands.handleSlashCommand?.(text))) {\n\t\t\t\tnotifyChatSessionWarning(state, \"Task inspection is unavailable in this host.\");\n\t\t\t}\n\t\t\tsetChatSessionEditorText(state, \"\");\n\t\t} catch (err) {\n\t\t\tnotifyChatSessionWarning(state, errorMessage(err));\n\t\t} finally {\n\t\t\tstate.requestRender?.();\n\t\t}\n\t\treturn;\n\t}\n\tconst interruptSettlement = state.interruptSettlement;\n\tif (interruptSettlement !== undefined) {\n\t\tawait submitAfterInterruptSettlement(state, interruptSettlement, text, mode);\n\t\treturn;\n\t}\n\tif (state.interruptFailureMessage !== undefined) {\n\t\tstate.statusMessage = state.interruptFailureMessage;\n\t\tstate.interruptFailureMessage = undefined;\n\t\tsyncChatSessionAnimationTick(state);\n\t\tstate.requestRender?.();\n\t\treturn;\n\t}\n\tif (text.startsWith(\"/\") && state.commands.handleSlashCommand) {\n\t\tconst handled = await state.commands.handleSlashCommand(text);\n\t\tif (handled) {\n\t\t\tsetChatSessionEditorText(state, \"\");\n\t\t\tstate.requestRender?.();\n\t\t\treturn;\n\t\t}\n\t}\n\tif (state.compacting) {\n\t\tsetChatSessionEditorText(state, \"\");\n\t\tstate.compactionQueuedMessages = [...state.compactionQueuedMessages, { text, mode }];\n\t\tnotifyChatSessionStatus(state, \"Queued message until compaction completes\");\n\t\treturn;\n\t}\n\tconst bash = parseBashInput(text);\n\tif (bash?.command) {\n\t\tif (isChatSessionBashRunning(state)) {\n\t\t\tnotifyChatSessionWarning(state, \"A bash command is already running. esc cancel first.\");\n\t\t\tsetChatSessionEditorText(state, text);\n\t\t\treturn;\n\t\t}\n\t\tsetChatSessionEditorText(state, \"\");\n\t\tawait runChatSessionBashCommand(state, bash.command, bash.excludeFromContext);\n\t\treturn;\n\t}\n\tsetChatSessionEditorText(state, \"\");\n\tconst isPaused = state.isPaused?.() === true;\n\tconst agentSession = state.getAgentSession?.();\n\tconst nativeQueuePaused = supportsQueuedMessagePause(agentSession) && agentSession.queuedMessagesPaused;\n\tconst heldBehindCompactionQueue = state.compactionFlushPending || state.compactionQueuedMessages.length > 0;\n\tif (heldBehindCompactionQueue && !isPaused && !nativeQueuePaused) {\n\t\tstate.compactionQueuedMessages = [...state.compactionQueuedMessages, { text, mode }];\n\t\tstate.requestRender?.();\n\t\tif (!state.compactionFlushPending) await flushChatSessionCompactionQueue(state);\n\t\treturn;\n\t}\n\t// Resuming a pause sends one message. Send the oldest held one; the rest, then this\n\t// submission, follow in order when that turn ends.\n\tconst resumeHeld = heldBehindCompactionQueue && !state.compactionFlushPending;\n\tif (resumeHeld) state.compactionQueuedMessages = [...state.compactionQueuedMessages, { text, mode }];\n\tconst submission = resumeHeld ? takeNextCompactionMessage(state) : undefined;\n\tconst submitText = submission?.text ?? text;\n\tconst submitMode = submission?.mode ?? mode;\n\tlet submissionStarted = false;\n\tif (submission) {\n\t\tstate.compactionPromptStarted = () => {\n\t\t\tsubmissionStarted = true;\n\t\t};\n\t}\n\tconst isStreaming = isChatSessionStreaming(state);\n\t// The session publishes the expanded skill block; a raw optimistic signature cannot reconcile with it.\n\tconst shouldAppendOptimisticUser =\n\t\tsubmitMode === \"auto\" && !isStreaming && classifyChatCommand(submitText) !== \"skill\";\n\tconst optimisticSignature = shouldAppendOptimisticUser ? userMessageSignature(submitText) : undefined;\n\tif (optimisticSignature !== undefined) {\n\t\tstate.liveChat.appendUserText(submitText);\n\t\tstate.bodyViewport.scrollToBottom();\n\t\tincrementOptimisticUserSignature(state, optimisticSignature);\n\t}\n\tstate.requestRender?.();\n\tlet submittedPromptLifecycleGeneration: number | undefined;\n\ttry {\n\t\tif (isPaused) {\n\t\t\tstate.sdkBusy = true;\n\t\t\tstate.statusMessage = \"resuming…\";\n\t\t\tsyncChatSessionAnimationTick(state);\n\t\t\tstate.requestRender?.();\n\t\t\tawait requiredChatSessionCommand(state, \"resume\")(submitText, submitMode);\n\t\t\tstate.sdkBusy = false;\n\t\t\tif (state.statusMessage === \"resuming…\") state.statusMessage = \"\";\n\t\t\tsyncChatSessionAnimationTick(state);\n\t\t\treturn;\n\t\t}\n\t\tif (nativeQueuePaused) {\n\t\t\tstate.sdkBusy = true;\n\t\t\tstate.statusMessage = \"resuming…\";\n\t\t\tsyncChatSessionAnimationTick(state);\n\t\t\tstate.requestRender?.();\n\t\t\tawait agentSession.resumeQueuedMessages();\n\t\t\tawait state.commands.ensureAttached?.();\n\t\t\tawait requiredChatSessionPromptCommand(state)(submitText, submitMode);\n\t\t\tstate.sdkBusy = false;\n\t\t\tif (state.statusMessage === \"resuming…\") state.statusMessage = \"\";\n\t\t\tsyncChatSessionAnimationTick(state);\n\t\t\treturn;\n\t\t}\n\t\tif (submitMode === \"followUp\" && isStreaming) {\n\t\t\tawait queueChatSessionFollowUp(state, submitText);\n\t\t\treturn;\n\t\t}\n\t\tif (isStreaming) {\n\t\t\tawait queueChatSessionSteer(state, submitText);\n\t\t} else {\n\t\t\tstate.statusMessage = \"\";\n\t\t\tstate.sdkBusy = true;\n\t\t\tstartChatSessionWorkingLifecycle(state);\n\t\t\tsubmittedPromptLifecycleGeneration = state.workingLifecycleGeneration;\n\t\t\tsyncChatSessionAnimationTick(state);\n\t\t\tstate.requestRender?.();\n\t\t\tawait state.commands.ensureAttached?.();\n\t\t\tawait requiredChatSessionPromptCommand(state)(submitText, submitMode);\n\t\t\tsettleSubmittedPromptLifecycle(state, submittedPromptLifecycleGeneration);\n\t\t\tsyncChatSessionAnimationTick(state);\n\t\t\tstate.requestRender?.();\n\t\t}\n\t} catch (err) {\n\t\tif (optimisticSignature !== undefined) {\n\t\t\tdecrementOptimisticUserSignature(state, optimisticSignature);\n\t\t}\n\t\tif (submission && !submissionStarted) {\n\t\t\tstate.compactionQueuedMessages = [submission, ...state.compactionQueuedMessages];\n\t\t}\n\t\tsettleSubmittedPromptLifecycle(state, submittedPromptLifecycleGeneration);\n\t\tstate.statusMessage = errorMessage(err);\n\t\tsyncChatSessionAnimationTick(state);\n\t\tstate.requestRender?.();\n\t} finally {\n\t\tif (submission) state.compactionPromptStarted = undefined;\n\t}\n}\n\nconst settleSubmittedPromptLifecycle = settleChatSessionPromptLifecycle;\n\nexport async function abortChatSessionCompaction<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n): Promise<void> {\n\ttry {\n\t\tif (state.commands.abortCompaction === undefined) {\n\t\t\t// A host without an abort command also has no engine completion to clear\n\t\t\t// this local indicator.\n\t\t\tstate.compacting = false;\n\t\t\tstate.sdkBusy = false;\n\t\t} else {\n\t\t\tawait state.commands.abortCompaction();\n\t\t\t// Keep new input behind prompts already queued for this compaction. The\n\t\t\t// matching compaction_end event owns the release and the state reset.\n\t\t}\n\t\tnotifyChatSessionStatus(state, \"Compaction cancelled\");\n\t} catch (err) {\n\t\tnotifyChatSessionWarning(state, errorMessage(err));\n\t} finally {\n\t\tsyncChatSessionAnimationTick(state);\n\t\tstate.requestRender?.();\n\t}\n}\n\nexport async function abortChatSessionBash<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n): Promise<void> {\n\ttry {\n\t\tawait state.commands.abortBash?.();\n\t\tstate.localBashRunning = false;\n\t\tnotifyChatSessionStatus(state, \"Bash command cancelled\");\n\t} catch (err) {\n\t\tnotifyChatSessionWarning(state, errorMessage(err));\n\t} finally {\n\t\tstate.requestRender?.();\n\t}\n}\n\ntype CompactionQueuedMessage = ChatSessionHostState<never>[\"compactionQueuedMessages\"][number];\n\n/**\n * Send compaction-queued messages one at a time from the front of the queue. Input submitted\n * meanwhile joins the back, so a failed message returns to the front ahead of everything after it.\n */\nexport async function flushChatSessionCompactionQueue<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n): Promise<void> {\n\tif (state.compactionFlushPending || state.compactionQueuedMessages.length === 0) return;\n\tstate.compactionFlushPending = true;\n\ttry {\n\t\tconst agentSession = state.getAgentSession?.();\n\t\tconst queueOnly =\n\t\t\tisChatSessionStreaming(state) || state.isPaused?.() === true || agentSession?.queuedMessagesPaused;\n\t\tif (!queueOnly && !(await startChatSessionCompactionPrompt(state))) return;\n\t\tfor (let message = takeNextCompactionMessage(state); message; message = takeNextCompactionMessage(state)) {\n\t\t\ttry {\n\t\t\t\tif (message.mode === \"followUp\") await queueChatSessionFollowUp(state, message.text);\n\t\t\t\telse await queueChatSessionSteer(state, message.text);\n\t\t\t} catch (err) {\n\t\t\t\treturnCompactionMessage(state, message, err);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t} finally {\n\t\tstate.compactionFlushPending = false;\n\t\tstate.requestRender?.();\n\t}\n}\n\nfunction takeNextCompactionMessage<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n): CompactionQueuedMessage | undefined {\n\tconst [next, ...rest] = state.compactionQueuedMessages;\n\tstate.compactionQueuedMessages = rest;\n\tstate.requestRender?.();\n\treturn next;\n}\n\nfunction returnCompactionMessage<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n\tmessage: CompactionQueuedMessage,\n\terr: unknown,\n): void {\n\tstate.compactionQueuedMessages = [message, ...state.compactionQueuedMessages];\n\tnotifyChatSessionWarning(state, errorMessage(err));\n\tstate.requestRender?.();\n}\n\n/**\n * Start the first queued prompt. The rest of the batch stays queued until the prompt is accepted,\n * which the host observes as its run starting or the command settling, so a rejected prompt is\n * restored ahead of it.\n */\nasync function startChatSessionCompactionPrompt<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n): Promise<boolean> {\n\tconst first = takeNextCompactionMessage(state);\n\tif (!first) return false;\n\tlet accept!: (accepted: boolean) => void;\n\tconst accepted = new Promise<boolean>((resolve) => {\n\t\taccept = resolve;\n\t});\n\tstate.compactionPromptStarted = () => accept(true);\n\tconst prompt = requiredChatSessionPromptCommand(state)(first.text, first.mode);\n\tprompt.then(\n\t\t() => accept(true),\n\t\t() => accept(false),\n\t);\n\ttry {\n\t\tif (await accepted) {\n\t\t\tprompt.catch((err) => notifyChatSessionWarning(state, errorMessage(err)));\n\t\t\treturn true;\n\t\t}\n\t\treturnCompactionMessage(\n\t\t\tstate,\n\t\t\tfirst,\n\t\t\tawait prompt.then(\n\t\t\t\t() => undefined,\n\t\t\t\t(err: unknown) => err,\n\t\t\t),\n\t\t);\n\t\treturn false;\n\t} finally {\n\t\tstate.compactionPromptStarted = undefined;\n\t}\n}\n\nexport function restoreQueuedMessagesToEditor<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n\toptions?: { suppressEmptyNotice?: boolean; preserveUnprotectedCustomMessages?: boolean },\n): boolean {\n\tconst queuedMessages = [\n\t\t...state.pendingSteeringMessages,\n\t\t...state.pendingFollowUpMessages,\n\t\t...state.compactionQueuedMessages.map((message) => message.text),\n\t];\n\tif (queuedMessages.length === 0) {\n\t\tif (!options?.suppressEmptyNotice) notifyChatSessionStatus(state, \"No queued messages to restore\");\n\t\treturn false;\n\t}\n\tconst restoredText = combineQueuedMessagesForEditor(queuedMessages, state.inputBuffer);\n\tstate.pendingSteeringMessages = [];\n\tstate.pendingFollowUpMessages = [];\n\tstate.compactionQueuedMessages = [];\n\tsetChatSessionEditorText(state, restoredText);\n\tstate\n\t\t.getAgentSession?.()\n\t\t?.clearQueue(\n\t\t\toptions?.preserveUnprotectedCustomMessages ? { preserveUnprotectedCustomMessages: true } : undefined,\n\t\t);\n\tstate.requestRender?.();\n\treturn true;\n}\n\nasync function runChatSessionBashCommand<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n\tcommand: string,\n\texcludeFromContext: boolean,\n): Promise<void> {\n\tconst runBash = state.commands.runBash;\n\tif (!runBash) {\n\t\tnotifyChatSessionWarning(state, \"no bash command configured for this chat session\");\n\t\treturn;\n\t}\n\tconst bashMessage: BashExecutionMessage = {\n\t\trole: \"bashExecution\",\n\t\tcommand,\n\t\toutput: \"\",\n\t\texitCode: undefined,\n\t\tcancelled: false,\n\t\ttruncated: false,\n\t\ttimestamp: Date.now(),\n\t\t...(excludeFromContext ? { excludeFromContext: true } : {}),\n\t};\n\tconst bashEntry: ChatMessageEntry = {\n\t\trole: \"tool\",\n\t\tkind: \"bashExecution\",\n\t\tmessage: bashMessage,\n\t\tisPartial: true,\n\t};\n\tstate.transcript.push(bashEntry);\n\tstate.localBashRunning = true;\n\tstate.bodyViewport.scrollToBottom();\n\tstate.requestRender?.();\n\ttry {\n\t\tconst result = await runBash({\n\t\t\tcommand,\n\t\t\texcludeFromContext,\n\t\t\tonChunk: (chunk) => {\n\t\t\t\tbashMessage.output += chunk;\n\t\t\t\tstate.requestRender?.();\n\t\t\t},\n\t\t});\n\t\tbashMessage.output = result.output;\n\t\tbashMessage.exitCode = result.exitCode;\n\t\tbashMessage.cancelled = result.cancelled;\n\t\tbashMessage.truncated = result.truncated;\n\t\tif (result.fullOutputPath !== undefined) {\n\t\t\tbashMessage.fullOutputPath = result.fullOutputPath;\n\t\t}\n\t} catch (err) {\n\t\tbashMessage.output = errorMessage(err);\n\t\tbashMessage.exitCode = undefined;\n\t\tbashMessage.cancelled = false;\n\t\tbashMessage.truncated = false;\n\t} finally {\n\t\tbashEntry.isPartial = false;\n\t\tstate.localBashRunning = false;\n\t\tstate.requestRender?.();\n\t}\n}\n\nasync function queueChatSessionSteer<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n\ttext: string,\n): Promise<void> {\n\tif (classifyChatCommand(text) === \"skill\" && state.commands.submitUserMessage) {\n\t\tawait state.commands.submitUserMessage(text, \"auto\");\n\t\treturn;\n\t}\n\tconst agentSession = state.getAgentSession?.();\n\tif (agentSession?.isStreaming || agentSession?.queuedMessagesPaused) {\n\t\tawait agentSession.prompt(text, { streamingBehavior: \"steer\" });\n\t\treturn;\n\t}\n\tawait requiredChatSessionCommand(state, \"steer\")(text);\n}\n\nasync function queueChatSessionFollowUp<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n\ttext: string,\n): Promise<void> {\n\tif (classifyChatCommand(text) === \"skill\" && state.commands.submitUserMessage) {\n\t\tawait state.commands.submitUserMessage(text, \"followUp\");\n\t\treturn;\n\t}\n\tconst agentSession = state.getAgentSession?.();\n\tif (agentSession?.isStreaming || agentSession?.queuedMessagesPaused) {\n\t\tawait agentSession.prompt(text, { streamingBehavior: \"followUp\" });\n\t\treturn;\n\t}\n\tawait requiredChatSessionCommand(state, \"followUp\")(text);\n}\n"]}
1
+ {"version":3,"file":"chat-session-host-actions.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/chat-session-host-actions.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AgentSessionQueuePauseControl } from \"../../../core/agent-session-methods.ts\";\nimport type { BashExecutionMessage } from \"../../../core/messages.ts\";\nimport { combineQueuedMessagesForEditor } from \"../chat-input-actions.ts\";\nimport { classifyChatCommand } from \"../skill-command-autocomplete.ts\";\nimport type { ChatMessageEntry } from \"./chat-message-renderer.ts\";\nimport { setChatSessionEditorText } from \"./chat-session-host-editor.ts\";\nimport {\n\tdecrementOptimisticUserSignature,\n\tincrementOptimisticUserSignature,\n\tisChatSessionBashRunning,\n\tisChatSessionStreaming,\n\tnotifyChatSessionStatus,\n\tnotifyChatSessionWarning,\n\trequiredChatSessionCommand,\n\trequiredChatSessionPromptCommand,\n\tsettleChatSessionPromptLifecycle,\n\tstartChatSessionWorkingLifecycle,\n\tstopChatSessionWorkingLifecycle,\n\tsyncChatSessionAnimationTick,\n} from \"./chat-session-host-runtime.ts\";\nimport type { ChatSessionHostState } from \"./chat-session-host-state.ts\";\nimport type { ChatSessionSubmitMode } from \"./chat-session-host-types.ts\";\nimport { errorMessage, parseBashInput, userMessageSignature } from \"./chat-session-host-utils.ts\";\nimport type { ChatTranscriptEntryLike } from \"./chat-transcript.js\";\n\nfunction supportsQueuedMessagePause(\n\tsession: AgentSessionQueuePauseControl | undefined,\n): session is AgentSessionQueuePauseControl {\n\treturn typeof session?.pauseQueuedMessages === \"function\" && typeof session.resumeQueuedMessages === \"function\";\n}\n\nexport function interruptChatSession<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n\toptions?: { restoreQueuedMessages?: boolean },\n): Promise<void> {\n\tconst active = state.interruptSettlement;\n\tif (active !== undefined) return active;\n\tstate.interruptFailureMessage = undefined;\n\tconst settlement = (async (): Promise<void> => {\n\t\ttry {\n\t\t\tconst session = state.getAgentSession?.();\n\t\t\tif (supportsQueuedMessagePause(session)) session.pauseQueuedMessages();\n\t\t\tif (options?.restoreQueuedMessages) {\n\t\t\t\trestoreQueuedMessagesToEditor(state, {\n\t\t\t\t\tsuppressEmptyNotice: true,\n\t\t\t\t\tpreserveUnprotectedCustomMessages: true,\n\t\t\t\t});\n\t\t\t}\n\t\t\tstate.sdkBusy = false;\n\t\t\tstate.workingMessage = undefined;\n\t\t\tstopChatSessionWorkingLifecycle(state, false);\n\t\t\tawait state.commands.interrupt?.();\n\t\t} catch (err) {\n\t\t\tstate.interruptFailureMessage = errorMessage(err);\n\t\t\tstate.statusMessage = state.interruptFailureMessage;\n\t\t\tthrow err;\n\t\t} finally {\n\t\t\tsyncChatSessionAnimationTick(state);\n\t\t\tstate.requestRender?.();\n\t\t}\n\t})();\n\tstate.interruptSettlement = settlement;\n\tvoid settlement\n\t\t.finally(() => {\n\t\t\tif (state.interruptSettlement === settlement) state.interruptSettlement = undefined;\n\t\t})\n\t\t.catch(() => {});\n\treturn settlement;\n}\n\nasync function submitAfterInterruptSettlement<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n\tsettlement: Promise<void>,\n\ttext: string,\n\tmode: ChatSessionSubmitMode,\n): Promise<void> {\n\tconst editorText = state.inputBuffer;\n\ttry {\n\t\tstate.sdkBusy = true;\n\t\tstate.statusMessage = \"resuming…\";\n\t\tsyncChatSessionAnimationTick(state);\n\t\tstate.requestRender?.();\n\t\tawait settlement;\n\t\tawait requiredChatSessionCommand(state, \"resume\")(text, mode);\n\t\tif (state.inputBuffer === editorText) setChatSessionEditorText(state, \"\");\n\t\tstate.sdkBusy = false;\n\t\tif (state.statusMessage === \"resuming…\") state.statusMessage = \"\";\n\t} catch (err) {\n\t\tstate.sdkBusy = false;\n\t\tstate.statusMessage = errorMessage(err);\n\t\tstate.interruptFailureMessage = undefined;\n\t} finally {\n\t\tsyncChatSessionAnimationTick(state);\n\t\tstate.requestRender?.();\n\t}\n}\n\nexport async function submitChatSession<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n\tmode: ChatSessionSubmitMode = \"auto\",\n\tsubmittedText?: string,\n): Promise<void> {\n\tif (state.disposed) return;\n\tconst text = (submittedText ?? state.inputBuffer).trim();\n\tif (!text) return;\n\tif (state.statusMessage === state.lastWarningMessage) state.statusMessage = \"\";\n\tstate.lastWarningMessage = undefined;\n\t// Task inspection is local even while Escape is settling. It must never release\n\t// the pause or fall through to model delivery; other slash commands keep their order.\n\tif (classifyChatCommand(text) === \"tasks\") {\n\t\ttry {\n\t\t\tif (!(await state.commands.handleSlashCommand?.(text))) {\n\t\t\t\tnotifyChatSessionWarning(state, \"Task inspection is unavailable in this host.\");\n\t\t\t}\n\t\t\tsetChatSessionEditorText(state, \"\");\n\t\t} catch (err) {\n\t\t\tnotifyChatSessionWarning(state, errorMessage(err));\n\t\t} finally {\n\t\t\tstate.requestRender?.();\n\t\t}\n\t\treturn;\n\t}\n\tconst interruptSettlement = state.interruptSettlement;\n\tif (interruptSettlement !== undefined) {\n\t\tawait submitAfterInterruptSettlement(state, interruptSettlement, text, mode);\n\t\treturn;\n\t}\n\tif (state.interruptFailureMessage !== undefined) {\n\t\tstate.statusMessage = state.interruptFailureMessage;\n\t\tstate.interruptFailureMessage = undefined;\n\t\tsyncChatSessionAnimationTick(state);\n\t\tstate.requestRender?.();\n\t\treturn;\n\t}\n\tif (text.startsWith(\"/\") && state.commands.handleSlashCommand) {\n\t\tconst handled = await state.commands.handleSlashCommand(text);\n\t\tif (handled) {\n\t\t\tsetChatSessionEditorText(state, \"\");\n\t\t\tstate.requestRender?.();\n\t\t\treturn;\n\t\t}\n\t}\n\tif (state.compacting) {\n\t\tsetChatSessionEditorText(state, \"\");\n\t\tstate.compactionQueuedMessages = [...state.compactionQueuedMessages, { text, mode }];\n\t\tnotifyChatSessionStatus(state, \"Queued message until compaction completes\");\n\t\treturn;\n\t}\n\tconst bash = parseBashInput(text);\n\tif (bash?.command) {\n\t\tif (isChatSessionBashRunning(state)) {\n\t\t\tnotifyChatSessionWarning(state, \"A bash command is already running. esc cancel first.\");\n\t\t\tsetChatSessionEditorText(state, text);\n\t\t\treturn;\n\t\t}\n\t\tsetChatSessionEditorText(state, \"\");\n\t\tawait runChatSessionBashCommand(state, bash.command, bash.excludeFromContext);\n\t\treturn;\n\t}\n\tsetChatSessionEditorText(state, \"\");\n\tconst isPaused = state.isPaused?.() === true;\n\tconst agentSession = state.getAgentSession?.();\n\tconst nativeQueuePaused = supportsQueuedMessagePause(agentSession) && agentSession.queuedMessagesPaused;\n\tconst heldBehindCompactionQueue = state.compactionFlushPending || state.compactionQueuedMessages.length > 0;\n\tif (heldBehindCompactionQueue && !isPaused && !nativeQueuePaused) {\n\t\tstate.compactionQueuedMessages = [...state.compactionQueuedMessages, { text, mode }];\n\t\tstate.requestRender?.();\n\t\tif (!state.compactionFlushPending) await flushChatSessionCompactionQueue(state);\n\t\treturn;\n\t}\n\t// Resuming a pause sends one message. Send the oldest held one; the rest, then this\n\t// submission, follow in order when that turn ends.\n\tconst resumeHeld = heldBehindCompactionQueue && !state.compactionFlushPending;\n\tif (resumeHeld) state.compactionQueuedMessages = [...state.compactionQueuedMessages, { text, mode }];\n\tconst submission = resumeHeld ? takeNextCompactionMessage(state) : undefined;\n\tconst submitText = submission?.text ?? text;\n\tconst submitMode = submission?.mode ?? mode;\n\tlet submissionStarted = false;\n\tif (submission) {\n\t\tstate.compactionPromptStarted = () => {\n\t\t\tsubmissionStarted = true;\n\t\t};\n\t}\n\tconst isStreaming = isChatSessionStreaming(state);\n\t// The session publishes the expanded skill block; a raw optimistic signature cannot reconcile with it.\n\tconst shouldAppendOptimisticUser =\n\t\tsubmitMode === \"auto\" && !isStreaming && classifyChatCommand(submitText) !== \"skill\";\n\tconst optimisticSignature = shouldAppendOptimisticUser ? userMessageSignature(submitText) : undefined;\n\tif (optimisticSignature !== undefined) {\n\t\tstate.liveChat.appendUserText(submitText);\n\t\tstate.bodyViewport.scrollToBottom();\n\t\tincrementOptimisticUserSignature(state, optimisticSignature);\n\t}\n\tstate.requestRender?.();\n\tlet submittedPromptLifecycleGeneration: number | undefined;\n\ttry {\n\t\tif (isPaused) {\n\t\t\tstate.sdkBusy = true;\n\t\t\tstate.statusMessage = \"resuming…\";\n\t\t\tsyncChatSessionAnimationTick(state);\n\t\t\tstate.requestRender?.();\n\t\t\tawait requiredChatSessionCommand(state, \"resume\")(submitText, submitMode);\n\t\t\tstate.sdkBusy = false;\n\t\t\tif (state.statusMessage === \"resuming…\") state.statusMessage = \"\";\n\t\t\tsyncChatSessionAnimationTick(state);\n\t\t\treturn;\n\t\t}\n\t\tif (nativeQueuePaused) {\n\t\t\tstate.sdkBusy = true;\n\t\t\tstate.statusMessage = \"resuming…\";\n\t\t\tsyncChatSessionAnimationTick(state);\n\t\t\tstate.requestRender?.();\n\t\t\tawait agentSession.resumeQueuedMessages();\n\t\t\tawait state.commands.ensureAttached?.();\n\t\t\tawait requiredChatSessionPromptCommand(state)(submitText, submitMode);\n\t\t\tstate.sdkBusy = false;\n\t\t\tif (state.statusMessage === \"resuming…\") state.statusMessage = \"\";\n\t\t\tsyncChatSessionAnimationTick(state);\n\t\t\treturn;\n\t\t}\n\t\tif (submitMode === \"followUp\" && isStreaming) {\n\t\t\tawait queueChatSessionFollowUp(state, submitText);\n\t\t\treturn;\n\t\t}\n\t\tif (isStreaming) {\n\t\t\tawait queueChatSessionSteer(state, submitText);\n\t\t} else {\n\t\t\tstate.statusMessage = \"\";\n\t\t\tstate.sdkBusy = true;\n\t\t\tstartChatSessionWorkingLifecycle(state);\n\t\t\tsubmittedPromptLifecycleGeneration = state.workingLifecycleGeneration;\n\t\t\tsyncChatSessionAnimationTick(state);\n\t\t\tstate.requestRender?.();\n\t\t\tawait state.commands.ensureAttached?.();\n\t\t\tawait requiredChatSessionPromptCommand(state)(submitText, submitMode);\n\t\t\tsettleSubmittedPromptLifecycle(state, submittedPromptLifecycleGeneration);\n\t\t\tsyncChatSessionAnimationTick(state);\n\t\t\tstate.requestRender?.();\n\t\t}\n\t} catch (err) {\n\t\tif (optimisticSignature !== undefined) {\n\t\t\tdecrementOptimisticUserSignature(state, optimisticSignature);\n\t\t}\n\t\tif (submission && !submissionStarted) {\n\t\t\tstate.compactionQueuedMessages = [submission, ...state.compactionQueuedMessages];\n\t\t}\n\t\tsettleSubmittedPromptLifecycle(state, submittedPromptLifecycleGeneration);\n\t\tstate.statusMessage = errorMessage(err);\n\t\tsyncChatSessionAnimationTick(state);\n\t\tstate.requestRender?.();\n\t} finally {\n\t\tif (submission) state.compactionPromptStarted = undefined;\n\t}\n}\n\nconst settleSubmittedPromptLifecycle = settleChatSessionPromptLifecycle;\n\nexport async function abortChatSessionCompaction<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n): Promise<void> {\n\ttry {\n\t\tif (state.commands.abortCompaction === undefined) {\n\t\t\t// A host without an abort command also has no engine completion to clear\n\t\t\t// this local indicator.\n\t\t\tstate.compacting = false;\n\t\t\tstate.sdkBusy = false;\n\t\t} else {\n\t\t\tawait state.commands.abortCompaction();\n\t\t\t// Keep new input behind prompts already queued for this compaction. The\n\t\t\t// matching compaction_end event owns the release and the state reset.\n\t\t}\n\t\tnotifyChatSessionStatus(state, \"Compaction cancelled\");\n\t} catch (err) {\n\t\tnotifyChatSessionWarning(state, errorMessage(err));\n\t} finally {\n\t\tsyncChatSessionAnimationTick(state);\n\t\tstate.requestRender?.();\n\t}\n}\n\nexport async function abortChatSessionBash<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n): Promise<void> {\n\ttry {\n\t\tawait state.commands.abortBash?.();\n\t\tstate.localBashRunning = false;\n\t\tnotifyChatSessionStatus(state, \"Bash command cancelled\");\n\t} catch (err) {\n\t\tnotifyChatSessionWarning(state, errorMessage(err));\n\t} finally {\n\t\tstate.requestRender?.();\n\t}\n}\n\ntype CompactionQueuedMessage = ChatSessionHostState<never>[\"compactionQueuedMessages\"][number];\n\n/**\n * Send compaction-queued messages one at a time from the front of the queue. Input submitted\n * meanwhile joins the back, so a failed message returns to the front ahead of everything after it.\n */\nexport async function flushChatSessionCompactionQueue<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n): Promise<void> {\n\tif (state.compactionFlushPending || state.compactionQueuedMessages.length === 0) return;\n\tstate.compactionFlushPending = true;\n\ttry {\n\t\tconst agentSession = state.getAgentSession?.();\n\t\tconst queueOnly =\n\t\t\tisChatSessionStreaming(state) || state.isPaused?.() === true || agentSession?.queuedMessagesPaused;\n\t\tif (!queueOnly && !(await startChatSessionCompactionPrompt(state))) return;\n\t\tfor (let message = takeNextCompactionMessage(state); message; message = takeNextCompactionMessage(state)) {\n\t\t\ttry {\n\t\t\t\tif (message.mode === \"followUp\") await queueChatSessionFollowUp(state, message.text);\n\t\t\t\telse await queueChatSessionSteer(state, message.text);\n\t\t\t} catch (err) {\n\t\t\t\treturnCompactionMessage(state, message, err);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t} finally {\n\t\tstate.compactionFlushPending = false;\n\t\tstate.requestRender?.();\n\t}\n}\n\nfunction takeNextCompactionMessage<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n): CompactionQueuedMessage | undefined {\n\tconst [next, ...rest] = state.compactionQueuedMessages;\n\tstate.compactionQueuedMessages = rest;\n\tstate.requestRender?.();\n\treturn next;\n}\n\nfunction returnCompactionMessage<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n\tmessage: CompactionQueuedMessage,\n\terr: unknown,\n): void {\n\tstate.compactionQueuedMessages = [message, ...state.compactionQueuedMessages];\n\tnotifyChatSessionWarning(state, errorMessage(err));\n\tstate.requestRender?.();\n}\n\n/**\n * Start the first queued prompt. The rest of the batch stays queued until the prompt is accepted,\n * which the host observes as its run starting or the command settling, so a rejected prompt is\n * restored ahead of it.\n */\nasync function startChatSessionCompactionPrompt<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n): Promise<boolean> {\n\tconst first = takeNextCompactionMessage(state);\n\tif (!first) return false;\n\tlet accept!: (accepted: boolean) => void;\n\tconst accepted = new Promise<boolean>((resolve) => {\n\t\taccept = resolve;\n\t});\n\tstate.compactionPromptStarted = () => accept(true);\n\tconst prompt = requiredChatSessionPromptCommand(state)(first.text, first.mode);\n\tprompt.then(\n\t\t() => accept(true),\n\t\t() => accept(false),\n\t);\n\ttry {\n\t\tif (await accepted) {\n\t\t\tprompt.catch((err) => notifyChatSessionWarning(state, errorMessage(err)));\n\t\t\treturn true;\n\t\t}\n\t\treturnCompactionMessage(\n\t\t\tstate,\n\t\t\tfirst,\n\t\t\tawait prompt.then(\n\t\t\t\t() => undefined,\n\t\t\t\t(err: unknown) => err,\n\t\t\t),\n\t\t);\n\t\treturn false;\n\t} finally {\n\t\tstate.compactionPromptStarted = undefined;\n\t}\n}\n\nexport function restoreQueuedMessagesToEditor<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n\toptions?: { suppressEmptyNotice?: boolean; preserveUnprotectedCustomMessages?: boolean },\n): boolean {\n\tconst queuedMessages = [\n\t\t...state.pendingSteeringMessages,\n\t\t...state.pendingFollowUpMessages,\n\t\t...state.compactionQueuedMessages.map((message) => message.text),\n\t];\n\tif (queuedMessages.length === 0) {\n\t\tif (!options?.suppressEmptyNotice) notifyChatSessionStatus(state, \"No queued messages to restore\");\n\t\treturn false;\n\t}\n\tconst restoredText = combineQueuedMessagesForEditor(queuedMessages, state.inputBuffer);\n\tstate.pendingSteeringMessages = [];\n\tstate.pendingFollowUpMessages = [];\n\tstate.compactionQueuedMessages = [];\n\tsetChatSessionEditorText(state, restoredText);\n\tstate\n\t\t.getAgentSession?.()\n\t\t?.clearQueue(\n\t\t\toptions?.preserveUnprotectedCustomMessages ? { preserveUnprotectedCustomMessages: true } : undefined,\n\t\t);\n\tstate.requestRender?.();\n\treturn true;\n}\n\nasync function runChatSessionBashCommand<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n\tcommand: string,\n\texcludeFromContext: boolean,\n): Promise<void> {\n\tconst runBash = state.commands.runBash;\n\tif (!runBash) {\n\t\tnotifyChatSessionWarning(state, \"no bash command configured for this chat session\");\n\t\treturn;\n\t}\n\tconst bashMessage: BashExecutionMessage = {\n\t\trole: \"bashExecution\",\n\t\tcommand,\n\t\toutput: \"\",\n\t\texitCode: undefined,\n\t\tcancelled: false,\n\t\ttruncated: false,\n\t\ttimestamp: Date.now(),\n\t\t...(excludeFromContext ? { excludeFromContext: true } : {}),\n\t};\n\tconst bashEntry: ChatMessageEntry = {\n\t\trole: \"tool\",\n\t\tkind: \"bashExecution\",\n\t\tmessage: bashMessage,\n\t\tisPartial: true,\n\t};\n\tstate.transcript.push(bashEntry);\n\tstate.localBashRunning = true;\n\tstate.bodyViewport.scrollToBottom();\n\tstate.requestRender?.();\n\ttry {\n\t\tconst result = await runBash({\n\t\t\tcommand,\n\t\t\texcludeFromContext,\n\t\t\tonChunk: (chunk) => {\n\t\t\t\tbashMessage.output += chunk;\n\t\t\t\tstate.requestRender?.();\n\t\t\t},\n\t\t});\n\t\tbashMessage.output = result.output;\n\t\tbashMessage.exitCode = result.exitCode;\n\t\tbashMessage.cancelled = result.cancelled;\n\t\tbashMessage.truncated = result.truncated;\n\t\tif (result.fullOutputPath !== undefined) {\n\t\t\tbashMessage.fullOutputPath = result.fullOutputPath;\n\t\t}\n\t} catch (err) {\n\t\tbashMessage.output = errorMessage(err);\n\t\tbashMessage.exitCode = undefined;\n\t\tbashMessage.cancelled = false;\n\t\tbashMessage.truncated = false;\n\t} finally {\n\t\tbashEntry.isPartial = false;\n\t\tstate.localBashRunning = false;\n\t\tstate.requestRender?.();\n\t}\n}\n\nasync function queueChatSessionSteer<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n\ttext: string,\n): Promise<void> {\n\tif (classifyChatCommand(text) === \"skill\" && state.commands.submitUserMessage) {\n\t\tawait state.commands.submitUserMessage(text, \"auto\");\n\t\treturn;\n\t}\n\tconst agentSession = state.getAgentSession?.();\n\tif (agentSession?.isStreaming || agentSession?.queuedMessagesPaused) {\n\t\t// Only `/skill:` expands (above); other text queues literally, as an idle submission is sent.\n\t\tawait agentSession.prompt(text, { streamingBehavior: \"steer\", expandPromptTemplates: false });\n\t\treturn;\n\t}\n\tawait requiredChatSessionCommand(state, \"steer\")(text);\n}\n\nasync function queueChatSessionFollowUp<TExtraEntry extends ChatTranscriptEntryLike>(\n\tstate: ChatSessionHostState<TExtraEntry>,\n\ttext: string,\n): Promise<void> {\n\tif (classifyChatCommand(text) === \"skill\" && state.commands.submitUserMessage) {\n\t\tawait state.commands.submitUserMessage(text, \"followUp\");\n\t\treturn;\n\t}\n\tconst agentSession = state.getAgentSession?.();\n\tif (agentSession?.isStreaming || agentSession?.queuedMessagesPaused) {\n\t\tawait agentSession.prompt(text, { streamingBehavior: \"followUp\", expandPromptTemplates: false });\n\t\treturn;\n\t}\n\tawait requiredChatSessionCommand(state, \"followUp\")(text);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"login-dialog.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/login-dialog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,EACN,SAAS,EACT,KAAK,SAAS,EAMd,KAAK,GAAG,EACR,MAAM,wBAAwB,CAAC;AAQhC;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,SAAU,YAAW,SAAS;IACvE,OAAO,CAAC,gBAAgB,CAAY;IACpC,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,OAAO,CAAC,CAAmB;IACnC,OAAO,CAAC,eAAe,CAAyB;IAChD,OAAO,CAAC,aAAa,CAAC,CAA0B;IAChD,OAAO,CAAC,aAAa,CAAC,CAAyB;IAC/C,OAAO,CAAC,cAAc,CAAC,CAAO;IAC9B,OAAO,CAAC,gBAAgB,CAAC,CAAiD;IAC1E,OAAO,CAAC,cAAc,CAAC,CAAY;IAGnC,OAAO,CAAC,QAAQ,CAAS;IACzB,IAAI,OAAO,IAAI,OAAO,CAErB;IACD,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,EAGzB;IAED,QAAgB,UAAU,CAA+C;IAEzE,YACC,GAAG,EAAE,GAAG,EACR,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI,EACxD,oBAAoB,CAAC,EAAE,MAAM,EAC7B,aAAa,CAAC,EAAE,MAAM,EAoCtB;IAED,IAAI,MAAM,IAAI,WAAW,CAExB;IAED,OAAO,CAAC,qBAAqB;IAQ7B,OAAO,CAAC,MAAM;IAWd;;OAEG;IACH,QAAQ,CACP,GAAG,EAAE,MAAM,EACX,YAAY,CAAC,EAAE,MAAM,EACrB,OAAO,GAAE;QAAE,eAAe,CAAC,EAAE,OAAO,CAAC;QAAC,cAAc,CAAC,EAAE,OAAO,CAAA;KAAO,GACnE,IAAI,CAsBN;IAED;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI,CAiC9C;IAED,OAAO,CAAC,mBAAmB;IAM3B,OAAO,CAAC,kBAAkB;IAiB1B,OAAO,CAAC,6BAA6B;IAMrC,OAAO,CAAC,oBAAoB;IAM5B;;OAEG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAc/C;IAED,wFAAwF;IACxF,mBAAmB,IAAI,IAAI,CAI1B;IAED;;;OAGG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAoBjE;IAED,0DAA0D;IAC1D,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAUjC;IAED,+DAA+D;IAC/D,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,GAAE,SAAS,YAAY,EAAO,GAAG,IAAI,CASnE;IAED;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAMjC;IAED;;OAEG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAGlC;IAED,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CA6BjC;CACD"}
1
+ {"version":3,"file":"login-dialog.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/login-dialog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,EACN,SAAS,EACT,KAAK,SAAS,EAMd,KAAK,GAAG,EACR,MAAM,wBAAwB,CAAC;AAsChC;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,SAAU,YAAW,SAAS;IACvE,OAAO,CAAC,gBAAgB,CAAY;IACpC,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,OAAO,CAAC,CAAmB;IACnC,OAAO,CAAC,eAAe,CAAyB;IAChD,OAAO,CAAC,aAAa,CAAC,CAA0B;IAChD,OAAO,CAAC,aAAa,CAAC,CAAyB;IAC/C,OAAO,CAAC,cAAc,CAAC,CAAO;IAC9B,OAAO,CAAC,gBAAgB,CAAC,CAAiD;IAC1E,OAAO,CAAC,cAAc,CAAC,CAAY;IAGnC,OAAO,CAAC,QAAQ,CAAS;IACzB,IAAI,OAAO,IAAI,OAAO,CAErB;IACD,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,EAGzB;IAED,QAAgB,UAAU,CAA+C;IAEzE,YACC,GAAG,EAAE,GAAG,EACR,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI,EACxD,oBAAoB,CAAC,EAAE,MAAM,EAC7B,aAAa,CAAC,EAAE,MAAM,EAoCtB;IAED,IAAI,MAAM,IAAI,WAAW,CAExB;IAED,OAAO,CAAC,qBAAqB;IAQ7B,OAAO,CAAC,MAAM;IAWd;;OAEG;IACH,QAAQ,CACP,GAAG,EAAE,MAAM,EACX,YAAY,CAAC,EAAE,MAAM,EACrB,OAAO,GAAE;QAAE,eAAe,CAAC,EAAE,OAAO,CAAC;QAAC,cAAc,CAAC,EAAE,OAAO,CAAA;KAAO,GACnE,IAAI,CAuBN;IAED;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI,CAgC9C;IAED,OAAO,CAAC,mBAAmB;IAM3B,OAAO,CAAC,kBAAkB;IAiB1B,OAAO,CAAC,6BAA6B;IAMrC,OAAO,CAAC,oBAAoB;IAM5B;;OAEG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAc/C;IAED,wFAAwF;IACxF,mBAAmB,IAAI,IAAI,CAI1B;IAED;;;OAGG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAoBjE;IAED,0DAA0D;IAC1D,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAUjC;IAED,+DAA+D;IAC/D,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,GAAE,SAAS,YAAY,EAAO,GAAG,IAAI,CASnE;IAED;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAMjC;IAED;;OAEG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAGlC;IAED,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CA6BjC;CACD"}
@@ -1,10 +1,38 @@
1
1
  import { Container, getKeybindings, Input, Spacer, Text, TruncatedText, } from "@earendil-works/pi-tui";
2
+ import { replaceControlCharacters } from "../../../utils/ansi.js";
2
3
  import { copyToClipboard } from "../../../utils/clipboard.js";
3
4
  import { openBrowser } from "../../../utils/open-browser.js";
4
5
  import { theme } from "../theme/theme.js";
5
6
  import { AuthUrlComponent } from "./auth-url.js";
6
7
  import { DynamicBorder } from "./dynamic-border.js";
7
8
  import { keyHint } from "./keybinding-hints.js";
9
+ /**
10
+ * The `http:` or `https:` URL `value` names, normalized, or undefined. The shared launcher also opens files and custom
11
+ * protocols, so login only opens web URLs. Normalizing percent-encodes control characters, which would otherwise end a
12
+ * terminal hyperlink early.
13
+ */
14
+ function webUrl(value) {
15
+ if (!URL.canParse(value))
16
+ return undefined;
17
+ const url = new URL(value);
18
+ return url.protocol === "https:" || url.protocol === "http:" ? url.href : undefined;
19
+ }
20
+ /**
21
+ * `value` normalized as a web URL, else with control characters replaced: an untrusted string printed as is could end a
22
+ * hyperlink early or send its own escape sequences to the terminal.
23
+ */
24
+ function displayUrl(value) {
25
+ return webUrl(value) ?? replaceControlCharacters(value);
26
+ }
27
+ /**
28
+ * `text` as an OSC 8 terminal hyperlink to `url` when that is a web URL, else plain `text`. Control characters in `text`
29
+ * are replaced so it cannot end the hyperlink or send its own escape sequences; the normalized target has none.
30
+ */
31
+ function webLink(text, url) {
32
+ const safeText = replaceControlCharacters(text);
33
+ const target = webUrl(url);
34
+ return target === undefined ? safeText : `\x1b]8;;${target}\x07${safeText}\x1b]8;;\x07`;
35
+ }
8
36
  /**
9
37
  * Login dialog component - replaces editor during OAuth login flow
10
38
  */
@@ -86,7 +114,8 @@ export class LoginDialogComponent extends Container {
86
114
  this.contentContainer.clear();
87
115
  this.authCancelHint = undefined;
88
116
  this.contentContainer.addChild(new Spacer(1));
89
- this.authUrl = new AuthUrlComponent(this.tui, url);
117
+ const target = webUrl(url);
118
+ this.authUrl = new AuthUrlComponent(this.tui, target ?? replaceControlCharacters(url));
90
119
  this.contentContainer.addChild(this.authUrl);
91
120
  if (instructions) {
92
121
  this.contentContainer.addChild(new Spacer(1));
@@ -96,8 +125,8 @@ export class LoginDialogComponent extends Container {
96
125
  this.authCancelHint = new Text(`(${keyHint("tui.select.cancel", "Cancel")})`, 1, 0);
97
126
  this.contentContainer.addChild(this.authCancelHint);
98
127
  }
99
- if (options.autoOpenBrowser ?? true) {
100
- openBrowser(url);
128
+ if ((options.autoOpenBrowser ?? true) && target !== undefined) {
129
+ openBrowser(target);
101
130
  }
102
131
  this.tui.requestRender();
103
132
  }
@@ -115,11 +144,10 @@ export class LoginDialogComponent extends Container {
115
144
  this.contentContainer.clear();
116
145
  this.authCancelHint = undefined;
117
146
  this.contentContainer.addChild(new Spacer(1));
118
- const linkedUrl = `\x1b]8;;${info.verificationUri}\x07${info.verificationUri}\x1b]8;;\x07`;
119
- this.contentContainer.addChild(new Text(theme.fg("accent", linkedUrl), 1, 0));
147
+ const shownUrl = displayUrl(info.verificationUri);
148
+ this.contentContainer.addChild(new Text(theme.fg("accent", webLink(shownUrl, shownUrl)), 1, 0));
120
149
  const clickHint = process.platform === "darwin" ? "Cmd+click to open" : "Ctrl+click to open";
121
- const hyperlink = `\x1b]8;;${info.verificationUri}\x07${clickHint}\x1b]8;;\x07`;
122
- this.contentContainer.addChild(new Text(theme.fg("dim", hyperlink), 1, 0));
150
+ this.contentContainer.addChild(new Text(theme.fg("dim", webLink(clickHint, info.verificationUri)), 1, 0));
123
151
  this.contentContainer.addChild(new Spacer(1));
124
152
  this.contentContainer.addChild(new Text(theme.fg("warning", `Enter code: ${info.userCode}`), 1, 0));
125
153
  if (!this.signal.aborted && (info.openBrowserOnConfirm || info.copyCodeOnConfirm)) {
@@ -151,12 +179,12 @@ export class LoginDialogComponent extends Container {
151
179
  }
152
180
  if (info.openBrowserOnConfirm) {
153
181
  try {
154
- const url = new URL(info.verificationUri);
155
- if (url.protocol === "https:" || url.protocol === "http:")
156
- openBrowser(url.href);
182
+ const target = webUrl(info.verificationUri);
183
+ if (target !== undefined)
184
+ openBrowser(target);
157
185
  }
158
186
  catch {
159
- // Invalid URLs or launcher failures must not interrupt login.
187
+ // Launcher failures must not interrupt login.
160
188
  }
161
189
  }
162
190
  }
@@ -231,9 +259,9 @@ export class LoginDialogComponent extends Container {
231
259
  this.contentContainer.addChild(new Spacer(1));
232
260
  this.contentContainer.addChild(new Text(theme.fg("text", message), 1, 0));
233
261
  for (const link of links) {
234
- const text = link.label ? `${link.label}: ${link.url}` : link.url;
235
- const hyperlink = `\x1b]8;;${link.url}\x07${text}\x1b]8;;\x07`;
236
- this.contentContainer.addChild(new Text(theme.fg("accent", hyperlink), 1, 0));
262
+ const url = displayUrl(link.url);
263
+ const text = link.label ? `${link.label}: ${url}` : url;
264
+ this.contentContainer.addChild(new Text(theme.fg("accent", webLink(text, url)), 1, 0));
237
265
  }
238
266
  this.tui.requestRender();
239
267
  }
@@ -1 +1 @@
1
- {"version":3,"file":"login-dialog.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/login-dialog.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AuthInfoLink, OAuthDeviceCodeInfo } from \"@bastani/pi-ai\";\nimport {\n\tContainer,\n\ttype Focusable,\n\tgetKeybindings,\n\tInput,\n\tSpacer,\n\tText,\n\tTruncatedText,\n\ttype TUI,\n} from \"@earendil-works/pi-tui\";\nimport { copyToClipboard } from \"../../../utils/clipboard.js\";\nimport { openBrowser } from \"../../../utils/open-browser.ts\";\nimport { theme } from \"../theme/theme.js\";\nimport { AuthUrlComponent } from \"./auth-url.js\";\nimport { DynamicBorder } from \"./dynamic-border.ts\";\nimport { keyHint } from \"./keybinding-hints.js\";\n\n/**\n * Login dialog component - replaces editor during OAuth login flow\n */\nexport class LoginDialogComponent extends Container implements Focusable {\n\tprivate contentContainer: Container;\n\tprivate input: Input;\n\tprivate tui: TUI;\n\tprivate authUrl?: AuthUrlComponent;\n\tprivate abortController = new AbortController();\n\tprivate inputResolver?: (value: string) => void;\n\tprivate inputRejecter?: (error: Error) => void;\n\tprivate authCancelHint?: Text;\n\tprivate deviceCodeAction?: { info: OAuthDeviceCodeInfo; hint: Container };\n\tprivate deviceCodeHint?: Container;\n\n\t// Focusable implementation - propagate to input for IME cursor positioning\n\tprivate _focused = false;\n\tget focused(): boolean {\n\t\treturn this._focused;\n\t}\n\tset focused(value: boolean) {\n\t\tthis._focused = value;\n\t\tthis.input.focused = value;\n\t}\n\n\tprivate declare onComplete: (success: boolean, message?: string) => void;\n\n\tconstructor(\n\t\ttui: TUI,\n\t\tproviderId: string,\n\t\tonComplete: (success: boolean, message?: string) => void,\n\t\tproviderNameOverride?: string,\n\t\ttitleOverride?: string,\n\t) {\n\t\tsuper();\n\t\tthis.onComplete = onComplete;\n\t\tthis.tui = tui;\n\n\t\tconst providerName = providerNameOverride || providerId;\n\t\tconst title = titleOverride ?? `Login to ${providerName}`;\n\n\t\t// Top border\n\t\tthis.addChild(new DynamicBorder());\n\n\t\t// Title\n\t\tthis.addChild(new Text(theme.fg(\"accent\", theme.bold(title)), 1, 0));\n\n\t\t// Dynamic content area\n\t\tthis.contentContainer = new Container();\n\t\tthis.addChild(this.contentContainer);\n\n\t\t// Input (always present, used when needed)\n\t\tthis.input = new Input();\n\t\tthis.input.onSubmit = () => {\n\t\t\tif (this.inputResolver) {\n\t\t\t\tconst value = this.input.getValue();\n\t\t\t\tthis.replaceInputWithSubmittedText(value);\n\t\t\t\tthis.inputResolver(value);\n\t\t\t\tthis.inputResolver = undefined;\n\t\t\t\tthis.inputRejecter = undefined;\n\t\t\t}\n\t\t};\n\t\tthis.input.onEscape = () => {\n\t\t\tthis.cancel();\n\t\t};\n\n\t\t// Bottom border\n\t\tthis.addChild(new DynamicBorder());\n\t}\n\n\tget signal(): AbortSignal {\n\t\treturn this.abortController.signal;\n\t}\n\n\tprivate clearDeviceCodeAction(): void {\n\t\tif (this.deviceCodeHint) {\n\t\t\tthis.contentContainer.removeChild(this.deviceCodeHint);\n\t\t}\n\t\tthis.deviceCodeHint = undefined;\n\t\tthis.deviceCodeAction = undefined;\n\t}\n\n\tprivate cancel(): void {\n\t\tthis.clearDeviceCodeAction();\n\t\tthis.abortController.abort();\n\t\tif (this.inputRejecter) {\n\t\t\tthis.inputRejecter(new Error(\"Login cancelled\"));\n\t\t\tthis.inputResolver = undefined;\n\t\t\tthis.inputRejecter = undefined;\n\t\t}\n\t\tthis.onComplete(false, \"Login cancelled\");\n\t}\n\n\t/**\n\t * Called by onAuth callback - show URL and optional instructions\n\t */\n\tshowAuth(\n\t\turl: string,\n\t\tinstructions?: string,\n\t\toptions: { autoOpenBrowser?: boolean; showCancelHint?: boolean } = {},\n\t): void {\n\t\tthis.clearDeviceCodeAction();\n\t\tthis.contentContainer.clear();\n\t\tthis.authCancelHint = undefined;\n\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\tthis.authUrl = new AuthUrlComponent(this.tui, url);\n\t\tthis.contentContainer.addChild(this.authUrl);\n\n\t\tif (instructions) {\n\t\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\t\tthis.contentContainer.addChild(new Text(theme.fg(\"warning\", instructions), 1, 0));\n\t\t}\n\n\t\tif (options.showCancelHint) {\n\t\t\tthis.authCancelHint = new Text(`(${keyHint(\"tui.select.cancel\", \"Cancel\")})`, 1, 0);\n\t\t\tthis.contentContainer.addChild(this.authCancelHint);\n\t\t}\n\n\t\tif (options.autoOpenBrowser ?? true) {\n\t\t\topenBrowser(url);\n\t\t}\n\t\tthis.tui.requestRender();\n\t}\n\n\t/**\n\t * Called by onDeviceCode callback - show URL and user code.\n\t */\n\tshowDeviceCode(info: OAuthDeviceCodeInfo): void {\n\t\tthis.authUrl = undefined;\n\t\tinfo = {\n\t\t\t...info,\n\t\t\topenBrowserOnConfirm: info.openBrowserOnConfirm ?? true,\n\t\t\tcopyCodeOnConfirm: info.copyCodeOnConfirm ?? true,\n\t\t};\n\t\tthis.clearDeviceCodeAction();\n\t\tthis.contentContainer.clear();\n\t\tthis.authCancelHint = undefined;\n\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\tconst linkedUrl = `\\x1b]8;;${info.verificationUri}\\x07${info.verificationUri}\\x1b]8;;\\x07`;\n\t\tthis.contentContainer.addChild(new Text(theme.fg(\"accent\", linkedUrl), 1, 0));\n\n\t\tconst clickHint = process.platform === \"darwin\" ? \"Cmd+click to open\" : \"Ctrl+click to open\";\n\t\tconst hyperlink = `\\x1b]8;;${info.verificationUri}\\x07${clickHint}\\x1b]8;;\\x07`;\n\t\tthis.contentContainer.addChild(new Text(theme.fg(\"dim\", hyperlink), 1, 0));\n\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\tthis.contentContainer.addChild(new Text(theme.fg(\"warning\", `Enter code: ${info.userCode}`), 1, 0));\n\n\t\tif (!this.signal.aborted && (info.openBrowserOnConfirm || info.copyCodeOnConfirm)) {\n\t\t\tconst actionLabel = info.openBrowserOnConfirm\n\t\t\t\t? info.copyCodeOnConfirm\n\t\t\t\t\t? \"to open browser and copy code\"\n\t\t\t\t\t: \"to open browser\"\n\t\t\t\t: \"to copy code\";\n\t\t\tconst hint = new Container();\n\t\t\thint.addChild(new TruncatedText(`(${keyHint(\"tui.select.confirm\", actionLabel)})`, 1, 0));\n\t\t\tthis.contentContainer.addChild(hint);\n\t\t\tthis.deviceCodeHint = hint;\n\t\t\tthis.deviceCodeAction = { info, hint };\n\t\t}\n\t\tthis.tui.requestRender();\n\t}\n\n\tprivate setDeviceCodeStatus(hint: Container, message: string): void {\n\t\tif (this.signal.aborted || !this.focused || !this.contentContainer.children.includes(hint)) return;\n\t\thint.children = [new TruncatedText(theme.fg(\"dim\", message), 1, 0)];\n\t\tthis.tui.requestRender();\n\t}\n\n\tprivate activateDeviceCode(info: OAuthDeviceCodeInfo, hint: Container): void {\n\t\tthis.setDeviceCodeStatus(hint, info.copyCodeOnConfirm ? \"Copying code...\" : \"Browser open requested\");\n\t\tif (info.copyCodeOnConfirm) {\n\t\t\tvoid copyToClipboard(info.userCode)\n\t\t\t\t.then(() => this.setDeviceCodeStatus(hint, \"Code copied to clipboard\"))\n\t\t\t\t.catch(() => this.setDeviceCodeStatus(hint, \"Copy code manually\"));\n\t\t}\n\t\tif (info.openBrowserOnConfirm) {\n\t\t\ttry {\n\t\t\t\tconst url = new URL(info.verificationUri);\n\t\t\t\tif (url.protocol === \"https:\" || url.protocol === \"http:\") openBrowser(url.href);\n\t\t\t} catch {\n\t\t\t\t// Invalid URLs or launcher failures must not interrupt login.\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate replaceInputWithSubmittedText(value: string): void {\n\t\tthis.contentContainer.children = this.contentContainer.children.map((child) =>\n\t\t\tchild === this.input ? new Text(`> ${value}`, 0, 0) : child,\n\t\t);\n\t}\n\n\tprivate removeAuthCancelHint(): void {\n\t\tif (!this.authCancelHint) return;\n\t\tthis.contentContainer.children = this.contentContainer.children.filter((child) => child !== this.authCancelHint);\n\t\tthis.authCancelHint = undefined;\n\t}\n\n\t/**\n\t * Show input for manual code/URL entry (for callback server providers)\n\t */\n\tshowManualInput(prompt: string): Promise<string> {\n\t\tthis.clearDeviceCodeAction();\n\t\tthis.removeAuthCancelHint();\n\t\tthis.input.setValue(\"\");\n\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\tthis.contentContainer.addChild(new Text(theme.fg(\"dim\", prompt), 1, 0));\n\t\tthis.contentContainer.addChild(this.input);\n\t\tthis.contentContainer.addChild(new Text(`(${keyHint(\"tui.select.cancel\", \"Cancel\")})`, 1, 0));\n\t\tthis.tui.requestRender();\n\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.inputResolver = resolve;\n\t\t\tthis.inputRejecter = reject;\n\t\t});\n\t}\n\n\t/** Resolve and release a manual input prompt after an out-of-band callback succeeds. */\n\tdismissPendingInput(): void {\n\t\tthis.inputResolver?.(\"\");\n\t\tthis.inputResolver = undefined;\n\t\tthis.inputRejecter = undefined;\n\t}\n\n\t/**\n\t * Called by onPrompt callback - show prompt and wait for input\n\t * Note: Does NOT clear content, appends to existing (preserves URL from showAuth)\n\t */\n\tshowPrompt(message: string, placeholder?: string): Promise<string> {\n\t\tthis.clearDeviceCodeAction();\n\t\tthis.removeAuthCancelHint();\n\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\tthis.contentContainer.addChild(new Text(theme.fg(\"text\", message), 1, 0));\n\t\tif (placeholder) {\n\t\t\tthis.contentContainer.addChild(new Text(theme.fg(\"dim\", `e.g., ${placeholder}`), 1, 0));\n\t\t}\n\t\tthis.contentContainer.addChild(this.input);\n\t\tthis.contentContainer.addChild(\n\t\t\tnew Text(`(${keyHint(\"tui.select.cancel\", \"Cancel,\")} ${keyHint(\"tui.select.confirm\", \"Submit\")})`, 1, 0),\n\t\t);\n\n\t\tthis.input.setValue(\"\");\n\t\tthis.tui.requestRender();\n\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.inputResolver = resolve;\n\t\t\tthis.inputRejecter = reject;\n\t\t});\n\t}\n\n\t/** Show static informational details and a close hint. */\n\tshowDetails(lines: string[]): void {\n\t\tthis.authUrl = undefined;\n\t\tthis.clearDeviceCodeAction();\n\t\tthis.contentContainer.clear();\n\t\tthis.authCancelHint = undefined;\n\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\tfor (const line of lines) this.contentContainer.addChild(new Text(line, 1, 0));\n\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\tthis.contentContainer.addChild(new Text(`(${keyHint(\"tui.select.cancel\", \"Close\")})`, 1, 0));\n\t\tthis.tui.requestRender();\n\t}\n\n\t/** Show provider-owned information and terminal hyperlinks. */\n\tshowInfo(message: string, links: readonly AuthInfoLink[] = []): void {\n\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\tthis.contentContainer.addChild(new Text(theme.fg(\"text\", message), 1, 0));\n\t\tfor (const link of links) {\n\t\t\tconst text = link.label ? `${link.label}: ${link.url}` : link.url;\n\t\t\tconst hyperlink = `\\x1b]8;;${link.url}\\x07${text}\\x1b]8;;\\x07`;\n\t\t\tthis.contentContainer.addChild(new Text(theme.fg(\"accent\", hyperlink), 1, 0));\n\t\t}\n\t\tthis.tui.requestRender();\n\t}\n\n\t/**\n\t * Show waiting message (for polling flows like GitHub Copilot)\n\t */\n\tshowWaiting(message: string): void {\n\t\tthis.removeAuthCancelHint();\n\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\tthis.contentContainer.addChild(new Text(theme.fg(\"dim\", message), 1, 0));\n\t\tthis.contentContainer.addChild(new Text(`(${keyHint(\"tui.select.cancel\", \"Cancel\")})`, 1, 0));\n\t\tthis.tui.requestRender();\n\t}\n\n\t/**\n\t * Called by onProgress callback\n\t */\n\tshowProgress(message: string): void {\n\t\tthis.contentContainer.addChild(new Text(theme.fg(\"dim\", message), 1, 0));\n\t\tthis.tui.requestRender();\n\t}\n\n\thandleInput(data: string): boolean {\n\t\tconst kb = getKeybindings();\n\n\t\tif (kb.matches(data, \"tui.select.cancel\")) {\n\t\t\tthis.cancel();\n\t\t\treturn true;\n\t\t}\n\t\tif (this.authUrl && kb.matches(data, \"app.auth.copyUrl\")) {\n\t\t\tvoid this.authUrl.copy();\n\t\t\treturn true;\n\t\t}\n\n\t\tif (\n\t\t\tthis.deviceCodeAction &&\n\t\t\t!this.inputResolver &&\n\t\t\t!this.signal.aborted &&\n\t\t\tthis.focused &&\n\t\t\tkb.matches(data, \"tui.select.confirm\")\n\t\t) {\n\t\t\tconst action = this.deviceCodeAction;\n\t\t\tthis.deviceCodeAction = undefined;\n\t\t\tthis.activateDeviceCode(action.info, action.hint);\n\t\t\tthis.tui.requestRender();\n\t\t\treturn true;\n\t\t}\n\n\t\t// Pass to input\n\t\tthis.input.handleInput(data);\n\t\treturn true;\n\t}\n}\n"]}
1
+ {"version":3,"file":"login-dialog.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/login-dialog.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AuthInfoLink, OAuthDeviceCodeInfo } from \"@bastani/pi-ai\";\nimport {\n\tContainer,\n\ttype Focusable,\n\tgetKeybindings,\n\tInput,\n\tSpacer,\n\tText,\n\tTruncatedText,\n\ttype TUI,\n} from \"@earendil-works/pi-tui\";\nimport { replaceControlCharacters } from \"../../../utils/ansi.js\";\nimport { copyToClipboard } from \"../../../utils/clipboard.js\";\nimport { openBrowser } from \"../../../utils/open-browser.ts\";\nimport { theme } from \"../theme/theme.js\";\nimport { AuthUrlComponent } from \"./auth-url.js\";\nimport { DynamicBorder } from \"./dynamic-border.ts\";\nimport { keyHint } from \"./keybinding-hints.js\";\n\n/**\n * The `http:` or `https:` URL `value` names, normalized, or undefined. The shared launcher also opens files and custom\n * protocols, so login only opens web URLs. Normalizing percent-encodes control characters, which would otherwise end a\n * terminal hyperlink early.\n */\nfunction webUrl(value: string): string | undefined {\n\tif (!URL.canParse(value)) return undefined;\n\tconst url = new URL(value);\n\treturn url.protocol === \"https:\" || url.protocol === \"http:\" ? url.href : undefined;\n}\n\n/**\n * `value` normalized as a web URL, else with control characters replaced: an untrusted string printed as is could end a\n * hyperlink early or send its own escape sequences to the terminal.\n */\nfunction displayUrl(value: string): string {\n\treturn webUrl(value) ?? replaceControlCharacters(value);\n}\n\n/**\n * `text` as an OSC 8 terminal hyperlink to `url` when that is a web URL, else plain `text`. Control characters in `text`\n * are replaced so it cannot end the hyperlink or send its own escape sequences; the normalized target has none.\n */\nfunction webLink(text: string, url: string): string {\n\tconst safeText = replaceControlCharacters(text);\n\tconst target = webUrl(url);\n\treturn target === undefined ? safeText : `\\x1b]8;;${target}\\x07${safeText}\\x1b]8;;\\x07`;\n}\n\n/**\n * Login dialog component - replaces editor during OAuth login flow\n */\nexport class LoginDialogComponent extends Container implements Focusable {\n\tprivate contentContainer: Container;\n\tprivate input: Input;\n\tprivate tui: TUI;\n\tprivate authUrl?: AuthUrlComponent;\n\tprivate abortController = new AbortController();\n\tprivate inputResolver?: (value: string) => void;\n\tprivate inputRejecter?: (error: Error) => void;\n\tprivate authCancelHint?: Text;\n\tprivate deviceCodeAction?: { info: OAuthDeviceCodeInfo; hint: Container };\n\tprivate deviceCodeHint?: Container;\n\n\t// Focusable implementation - propagate to input for IME cursor positioning\n\tprivate _focused = false;\n\tget focused(): boolean {\n\t\treturn this._focused;\n\t}\n\tset focused(value: boolean) {\n\t\tthis._focused = value;\n\t\tthis.input.focused = value;\n\t}\n\n\tprivate declare onComplete: (success: boolean, message?: string) => void;\n\n\tconstructor(\n\t\ttui: TUI,\n\t\tproviderId: string,\n\t\tonComplete: (success: boolean, message?: string) => void,\n\t\tproviderNameOverride?: string,\n\t\ttitleOverride?: string,\n\t) {\n\t\tsuper();\n\t\tthis.onComplete = onComplete;\n\t\tthis.tui = tui;\n\n\t\tconst providerName = providerNameOverride || providerId;\n\t\tconst title = titleOverride ?? `Login to ${providerName}`;\n\n\t\t// Top border\n\t\tthis.addChild(new DynamicBorder());\n\n\t\t// Title\n\t\tthis.addChild(new Text(theme.fg(\"accent\", theme.bold(title)), 1, 0));\n\n\t\t// Dynamic content area\n\t\tthis.contentContainer = new Container();\n\t\tthis.addChild(this.contentContainer);\n\n\t\t// Input (always present, used when needed)\n\t\tthis.input = new Input();\n\t\tthis.input.onSubmit = () => {\n\t\t\tif (this.inputResolver) {\n\t\t\t\tconst value = this.input.getValue();\n\t\t\t\tthis.replaceInputWithSubmittedText(value);\n\t\t\t\tthis.inputResolver(value);\n\t\t\t\tthis.inputResolver = undefined;\n\t\t\t\tthis.inputRejecter = undefined;\n\t\t\t}\n\t\t};\n\t\tthis.input.onEscape = () => {\n\t\t\tthis.cancel();\n\t\t};\n\n\t\t// Bottom border\n\t\tthis.addChild(new DynamicBorder());\n\t}\n\n\tget signal(): AbortSignal {\n\t\treturn this.abortController.signal;\n\t}\n\n\tprivate clearDeviceCodeAction(): void {\n\t\tif (this.deviceCodeHint) {\n\t\t\tthis.contentContainer.removeChild(this.deviceCodeHint);\n\t\t}\n\t\tthis.deviceCodeHint = undefined;\n\t\tthis.deviceCodeAction = undefined;\n\t}\n\n\tprivate cancel(): void {\n\t\tthis.clearDeviceCodeAction();\n\t\tthis.abortController.abort();\n\t\tif (this.inputRejecter) {\n\t\t\tthis.inputRejecter(new Error(\"Login cancelled\"));\n\t\t\tthis.inputResolver = undefined;\n\t\t\tthis.inputRejecter = undefined;\n\t\t}\n\t\tthis.onComplete(false, \"Login cancelled\");\n\t}\n\n\t/**\n\t * Called by onAuth callback - show URL and optional instructions\n\t */\n\tshowAuth(\n\t\turl: string,\n\t\tinstructions?: string,\n\t\toptions: { autoOpenBrowser?: boolean; showCancelHint?: boolean } = {},\n\t): void {\n\t\tthis.clearDeviceCodeAction();\n\t\tthis.contentContainer.clear();\n\t\tthis.authCancelHint = undefined;\n\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\tconst target = webUrl(url);\n\t\tthis.authUrl = new AuthUrlComponent(this.tui, target ?? replaceControlCharacters(url));\n\t\tthis.contentContainer.addChild(this.authUrl);\n\n\t\tif (instructions) {\n\t\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\t\tthis.contentContainer.addChild(new Text(theme.fg(\"warning\", instructions), 1, 0));\n\t\t}\n\n\t\tif (options.showCancelHint) {\n\t\t\tthis.authCancelHint = new Text(`(${keyHint(\"tui.select.cancel\", \"Cancel\")})`, 1, 0);\n\t\t\tthis.contentContainer.addChild(this.authCancelHint);\n\t\t}\n\n\t\tif ((options.autoOpenBrowser ?? true) && target !== undefined) {\n\t\t\topenBrowser(target);\n\t\t}\n\t\tthis.tui.requestRender();\n\t}\n\n\t/**\n\t * Called by onDeviceCode callback - show URL and user code.\n\t */\n\tshowDeviceCode(info: OAuthDeviceCodeInfo): void {\n\t\tthis.authUrl = undefined;\n\t\tinfo = {\n\t\t\t...info,\n\t\t\topenBrowserOnConfirm: info.openBrowserOnConfirm ?? true,\n\t\t\tcopyCodeOnConfirm: info.copyCodeOnConfirm ?? true,\n\t\t};\n\t\tthis.clearDeviceCodeAction();\n\t\tthis.contentContainer.clear();\n\t\tthis.authCancelHint = undefined;\n\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\tconst shownUrl = displayUrl(info.verificationUri);\n\t\tthis.contentContainer.addChild(new Text(theme.fg(\"accent\", webLink(shownUrl, shownUrl)), 1, 0));\n\n\t\tconst clickHint = process.platform === \"darwin\" ? \"Cmd+click to open\" : \"Ctrl+click to open\";\n\t\tthis.contentContainer.addChild(new Text(theme.fg(\"dim\", webLink(clickHint, info.verificationUri)), 1, 0));\n\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\tthis.contentContainer.addChild(new Text(theme.fg(\"warning\", `Enter code: ${info.userCode}`), 1, 0));\n\n\t\tif (!this.signal.aborted && (info.openBrowserOnConfirm || info.copyCodeOnConfirm)) {\n\t\t\tconst actionLabel = info.openBrowserOnConfirm\n\t\t\t\t? info.copyCodeOnConfirm\n\t\t\t\t\t? \"to open browser and copy code\"\n\t\t\t\t\t: \"to open browser\"\n\t\t\t\t: \"to copy code\";\n\t\t\tconst hint = new Container();\n\t\t\thint.addChild(new TruncatedText(`(${keyHint(\"tui.select.confirm\", actionLabel)})`, 1, 0));\n\t\t\tthis.contentContainer.addChild(hint);\n\t\t\tthis.deviceCodeHint = hint;\n\t\t\tthis.deviceCodeAction = { info, hint };\n\t\t}\n\t\tthis.tui.requestRender();\n\t}\n\n\tprivate setDeviceCodeStatus(hint: Container, message: string): void {\n\t\tif (this.signal.aborted || !this.focused || !this.contentContainer.children.includes(hint)) return;\n\t\thint.children = [new TruncatedText(theme.fg(\"dim\", message), 1, 0)];\n\t\tthis.tui.requestRender();\n\t}\n\n\tprivate activateDeviceCode(info: OAuthDeviceCodeInfo, hint: Container): void {\n\t\tthis.setDeviceCodeStatus(hint, info.copyCodeOnConfirm ? \"Copying code...\" : \"Browser open requested\");\n\t\tif (info.copyCodeOnConfirm) {\n\t\t\tvoid copyToClipboard(info.userCode)\n\t\t\t\t.then(() => this.setDeviceCodeStatus(hint, \"Code copied to clipboard\"))\n\t\t\t\t.catch(() => this.setDeviceCodeStatus(hint, \"Copy code manually\"));\n\t\t}\n\t\tif (info.openBrowserOnConfirm) {\n\t\t\ttry {\n\t\t\t\tconst target = webUrl(info.verificationUri);\n\t\t\t\tif (target !== undefined) openBrowser(target);\n\t\t\t} catch {\n\t\t\t\t// Launcher failures must not interrupt login.\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate replaceInputWithSubmittedText(value: string): void {\n\t\tthis.contentContainer.children = this.contentContainer.children.map((child) =>\n\t\t\tchild === this.input ? new Text(`> ${value}`, 0, 0) : child,\n\t\t);\n\t}\n\n\tprivate removeAuthCancelHint(): void {\n\t\tif (!this.authCancelHint) return;\n\t\tthis.contentContainer.children = this.contentContainer.children.filter((child) => child !== this.authCancelHint);\n\t\tthis.authCancelHint = undefined;\n\t}\n\n\t/**\n\t * Show input for manual code/URL entry (for callback server providers)\n\t */\n\tshowManualInput(prompt: string): Promise<string> {\n\t\tthis.clearDeviceCodeAction();\n\t\tthis.removeAuthCancelHint();\n\t\tthis.input.setValue(\"\");\n\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\tthis.contentContainer.addChild(new Text(theme.fg(\"dim\", prompt), 1, 0));\n\t\tthis.contentContainer.addChild(this.input);\n\t\tthis.contentContainer.addChild(new Text(`(${keyHint(\"tui.select.cancel\", \"Cancel\")})`, 1, 0));\n\t\tthis.tui.requestRender();\n\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.inputResolver = resolve;\n\t\t\tthis.inputRejecter = reject;\n\t\t});\n\t}\n\n\t/** Resolve and release a manual input prompt after an out-of-band callback succeeds. */\n\tdismissPendingInput(): void {\n\t\tthis.inputResolver?.(\"\");\n\t\tthis.inputResolver = undefined;\n\t\tthis.inputRejecter = undefined;\n\t}\n\n\t/**\n\t * Called by onPrompt callback - show prompt and wait for input\n\t * Note: Does NOT clear content, appends to existing (preserves URL from showAuth)\n\t */\n\tshowPrompt(message: string, placeholder?: string): Promise<string> {\n\t\tthis.clearDeviceCodeAction();\n\t\tthis.removeAuthCancelHint();\n\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\tthis.contentContainer.addChild(new Text(theme.fg(\"text\", message), 1, 0));\n\t\tif (placeholder) {\n\t\t\tthis.contentContainer.addChild(new Text(theme.fg(\"dim\", `e.g., ${placeholder}`), 1, 0));\n\t\t}\n\t\tthis.contentContainer.addChild(this.input);\n\t\tthis.contentContainer.addChild(\n\t\t\tnew Text(`(${keyHint(\"tui.select.cancel\", \"Cancel,\")} ${keyHint(\"tui.select.confirm\", \"Submit\")})`, 1, 0),\n\t\t);\n\n\t\tthis.input.setValue(\"\");\n\t\tthis.tui.requestRender();\n\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.inputResolver = resolve;\n\t\t\tthis.inputRejecter = reject;\n\t\t});\n\t}\n\n\t/** Show static informational details and a close hint. */\n\tshowDetails(lines: string[]): void {\n\t\tthis.authUrl = undefined;\n\t\tthis.clearDeviceCodeAction();\n\t\tthis.contentContainer.clear();\n\t\tthis.authCancelHint = undefined;\n\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\tfor (const line of lines) this.contentContainer.addChild(new Text(line, 1, 0));\n\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\tthis.contentContainer.addChild(new Text(`(${keyHint(\"tui.select.cancel\", \"Close\")})`, 1, 0));\n\t\tthis.tui.requestRender();\n\t}\n\n\t/** Show provider-owned information and terminal hyperlinks. */\n\tshowInfo(message: string, links: readonly AuthInfoLink[] = []): void {\n\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\tthis.contentContainer.addChild(new Text(theme.fg(\"text\", message), 1, 0));\n\t\tfor (const link of links) {\n\t\t\tconst url = displayUrl(link.url);\n\t\t\tconst text = link.label ? `${link.label}: ${url}` : url;\n\t\t\tthis.contentContainer.addChild(new Text(theme.fg(\"accent\", webLink(text, url)), 1, 0));\n\t\t}\n\t\tthis.tui.requestRender();\n\t}\n\n\t/**\n\t * Show waiting message (for polling flows like GitHub Copilot)\n\t */\n\tshowWaiting(message: string): void {\n\t\tthis.removeAuthCancelHint();\n\t\tthis.contentContainer.addChild(new Spacer(1));\n\t\tthis.contentContainer.addChild(new Text(theme.fg(\"dim\", message), 1, 0));\n\t\tthis.contentContainer.addChild(new Text(`(${keyHint(\"tui.select.cancel\", \"Cancel\")})`, 1, 0));\n\t\tthis.tui.requestRender();\n\t}\n\n\t/**\n\t * Called by onProgress callback\n\t */\n\tshowProgress(message: string): void {\n\t\tthis.contentContainer.addChild(new Text(theme.fg(\"dim\", message), 1, 0));\n\t\tthis.tui.requestRender();\n\t}\n\n\thandleInput(data: string): boolean {\n\t\tconst kb = getKeybindings();\n\n\t\tif (kb.matches(data, \"tui.select.cancel\")) {\n\t\t\tthis.cancel();\n\t\t\treturn true;\n\t\t}\n\t\tif (this.authUrl && kb.matches(data, \"app.auth.copyUrl\")) {\n\t\t\tvoid this.authUrl.copy();\n\t\t\treturn true;\n\t\t}\n\n\t\tif (\n\t\t\tthis.deviceCodeAction &&\n\t\t\t!this.inputResolver &&\n\t\t\t!this.signal.aborted &&\n\t\t\tthis.focused &&\n\t\t\tkb.matches(data, \"tui.select.confirm\")\n\t\t) {\n\t\t\tconst action = this.deviceCodeAction;\n\t\t\tthis.deviceCodeAction = undefined;\n\t\t\tthis.activateDeviceCode(action.info, action.hint);\n\t\t\tthis.tui.requestRender();\n\t\t\treturn true;\n\t\t}\n\n\t\t// Pass to input\n\t\tthis.input.handleInput(data);\n\t\treturn true;\n\t}\n}\n"]}
@@ -1,3 +1,4 @@
1
+ import { replaceControlCharacters } from "../../utils/ansi.js";
1
2
  import { openLocalHostInputForm } from "./components/host-input-form-mount.js";
2
3
  import { openLocalHostSessionPicker } from "./components/host-session-picker.js";
3
4
  import { InteractiveModeBase } from "./interactive-mode-base.js";
@@ -156,7 +157,7 @@ InteractiveModeBase.prototype.createExtensionUIContext = function () {
156
157
  setFooter: (factory) => this.setExtensionFooter(factory),
157
158
  onWidgetRelease: (key, listener) => this.onExtensionWidgetRelease(key, listener),
158
159
  setHeader: (factory) => this.setExtensionHeader(factory),
159
- setTitle: (title) => this.ui.terminal.setTitle(title),
160
+ setTitle: (title) => this.ui.terminal.setTitle(replaceControlCharacters(title)),
160
161
  custom: (factory, options) => this.showExtensionCustom(factory, options),
161
162
  // In-process host session picker: extensions already run in the terminal
162
163
  // process here, so the selector mounts directly with no IPC. Isolated
@@ -1 +1 @@
1
- {"version":3,"file":"interactive-extension-context.js","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-extension-context.ts"],"names":[],"mappings":"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","sourcesContent":["import { openLocalHostInputForm } from \"./components/host-input-form-mount.ts\";\nimport { openLocalHostSessionPicker } from \"./components/host-session-picker.ts\";\nimport { InteractiveModeBase } from \"./interactive-mode-base.ts\";\nimport {\n\ttype ExtensionUIContext,\n\tgetAvailableThemesWithPaths,\n\tgetThemeByName,\n\ttype HostCustomUiState,\n\ttype HostCustomUiStateListener,\n\ttype ProjectTrustContext,\n\tTheme,\n\ttheme,\n} from \"./interactive-mode-deps.ts\";\n\nInteractiveModeBase.prototype.addExtensionTerminalInputListener = function (\n\tthis: InteractiveModeBase,\n\thandler: (data: string) => { consume?: boolean; data?: string } | undefined,\n): () => void {\n\tconst subscription = { handler, unsubscribe: this.ui.addInputListener(handler) };\n\tthis.tuiInputSubscriptions.add(subscription);\n\tthis.extensionTerminalInputSubscriptions.add(subscription);\n\treturn () => {\n\t\tsubscription.unsubscribe();\n\t\tthis.extensionTerminalInputSubscriptions.delete(subscription);\n\t\tthis.tuiInputSubscriptions.delete(subscription);\n\t};\n};\n\nInteractiveModeBase.prototype.clearExtensionTerminalInputListeners = function (this: InteractiveModeBase): void {\n\tfor (const subscription of this.extensionTerminalInputSubscriptions) {\n\t\tsubscription.unsubscribe();\n\t\tthis.tuiInputSubscriptions.delete(subscription);\n\t}\n\tthis.extensionTerminalInputSubscriptions.clear();\n};\n\nInteractiveModeBase.prototype.getHostCustomUiState = function (this: InteractiveModeBase): HostCustomUiState {\n\tconst focusDeferred = this.blockingInlineCustomUiDepth > 0 && this.pendingInlineCustomUiFocus !== undefined;\n\treturn {\n\t\tblockingInlineCustomUiDepth: this.blockingInlineCustomUiDepth,\n\t\tblockingInlineCustomUiActive: this.blockingInlineCustomUiDepth > 0,\n\t\t...(focusDeferred ? { blockingInlineCustomUiFocusDeferred: true } : {}),\n\t\t...(this.navigationInlineCustomUiDepth > 0\n\t\t\t? { blockingInlineCustomUiNeedsInput: this.blockingInlineCustomUiDepth > this.navigationInlineCustomUiDepth }\n\t\t\t: {}),\n\t};\n};\n\nInteractiveModeBase.prototype.notifyHostCustomUiStateListeners = function (this: InteractiveModeBase): void {\n\tconst state = this.getHostCustomUiState();\n\tfor (const listener of this.hostCustomUiStateListeners) {\n\t\ttry {\n\t\t\tlistener(state);\n\t\t} catch {\n\t\t\t/* ignore observer errors */\n\t\t}\n\t}\n};\n\nInteractiveModeBase.prototype.beginHostInlineCustomUi = function (\n\tthis: InteractiveModeBase,\n\tpurpose?: \"prompt\" | \"navigation\",\n): () => void {\n\tlet released = false;\n\tthis.blockingInlineCustomUiDepth++;\n\tif (purpose === \"navigation\") this.navigationInlineCustomUiDepth = (this.navigationInlineCustomUiDepth ?? 0) + 1;\n\tthis.notifyHostCustomUiStateListeners();\n\treturn () => {\n\t\tif (released) return;\n\t\treleased = true;\n\t\tthis.blockingInlineCustomUiDepth = Math.max(0, this.blockingInlineCustomUiDepth - 1);\n\t\tif (purpose === \"navigation\")\n\t\t\tthis.navigationInlineCustomUiDepth = Math.max(0, this.navigationInlineCustomUiDepth - 1);\n\t\tthis.notifyHostCustomUiStateListeners();\n\t};\n};\n\nInteractiveModeBase.prototype.beginInlineCustomUiFocusDeferral = function (this: InteractiveModeBase): () => void {\n\tlet released = false;\n\tthis.deferredInlineCustomUiFocusDepth++;\n\tthis.notifyHostCustomUiStateListeners();\n\treturn () => {\n\t\tif (released) return;\n\t\treleased = true;\n\t\tthis.deferredInlineCustomUiFocusDepth = Math.max(0, this.deferredInlineCustomUiFocusDepth - 1);\n\t\tif (this.deferredInlineCustomUiFocusDepth === 0) {\n\t\t\tthis.focusHostInlineCustomUi();\n\t\t}\n\t\tthis.notifyHostCustomUiStateListeners();\n\t};\n};\n\nInteractiveModeBase.prototype.shouldDeferInlineCustomUiFocus = function (this: InteractiveModeBase): boolean {\n\treturn this.deferredInlineCustomUiFocusDepth > 0;\n};\n\nInteractiveModeBase.prototype.focusHostInlineCustomUi = function (this: InteractiveModeBase): boolean {\n\tconst component = this.pendingInlineCustomUiFocus;\n\tif (component === undefined) return false;\n\tthis.pendingInlineCustomUiFocus = undefined;\n\tthis.ui.setFocus(component);\n\tthis.ui.requestRender();\n\tthis.notifyHostCustomUiStateListeners();\n\treturn true;\n};\n\nInteractiveModeBase.prototype.onHostCustomUiStateChange = function (\n\tthis: InteractiveModeBase,\n\tlistener: HostCustomUiStateListener,\n): () => void {\n\tthis.hostCustomUiStateListeners.add(listener);\n\treturn () => {\n\t\tthis.hostCustomUiStateListeners.delete(listener);\n\t};\n};\n\nInteractiveModeBase.prototype.onExtensionWidgetRelease = function (\n\tthis: InteractiveModeBase,\n\tkey: string,\n\tlistener: () => void,\n): () => void {\n\tlet widgetReleaseListeners = this.widgetReleaseListeners;\n\tif (!widgetReleaseListeners) {\n\t\twidgetReleaseListeners = new Map();\n\t\tthis.widgetReleaseListeners = widgetReleaseListeners;\n\t}\n\tconst listeners = widgetReleaseListeners.get(key) ?? new Set<() => void>();\n\tlisteners.add(listener);\n\twidgetReleaseListeners.set(key, listeners);\n\treturn () => {\n\t\tlisteners.delete(listener);\n\t\tif (listeners.size === 0) widgetReleaseListeners.delete(key);\n\t};\n};\n\nInteractiveModeBase.prototype.notifyExtensionWidgetRelease = function (this: InteractiveModeBase, key: string): void {\n\tfor (const listener of this.widgetReleaseListeners?.get(key) ?? []) {\n\t\ttry {\n\t\t\tlistener();\n\t\t} catch {\n\t\t\t/* ignore observer errors */\n\t\t}\n\t}\n};\n\nInteractiveModeBase.prototype.createProjectTrustContext = function (\n\tthis: InteractiveModeBase,\n\tcwd: string,\n): ProjectTrustContext {\n\tconst ui = this.createExtensionUIContext();\n\tconst runner = this.session.extensionRunner;\n\treturn {\n\t\tcwd,\n\t\tmode: \"tui\",\n\t\thasUI: true,\n\t\tui: {\n\t\t\tselect: (title, options, opts) =>\n\t\t\t\trunner.withProjectTrustPrompt(\"select\", title, () => ui.select(title, options, opts)),\n\t\t\tconfirm: (title, message, opts) =>\n\t\t\t\trunner.withProjectTrustPrompt(\"confirm\", title, () => ui.confirm(title, message, opts)),\n\t\t\tinput: (title, placeholder, opts) =>\n\t\t\t\trunner.withProjectTrustPrompt(\"input\", title, () => ui.input(title, placeholder, opts)),\n\t\t\tnotify: ui.notify,\n\t\t},\n\t};\n};\n\nInteractiveModeBase.prototype.createExtensionUIContext = function (this: InteractiveModeBase): ExtensionUIContext {\n\treturn {\n\t\tselect: (title, options, opts) => this.showExtensionSelector(title, options, opts),\n\t\tconfirm: (title, message, opts) => this.showExtensionConfirm(title, message, opts),\n\t\tinput: (title, placeholder, opts) => this.showExtensionInput(title, placeholder, opts),\n\t\tnotify: (message, type) => this.showExtensionNotify(message, type),\n\t\trequestRender: () => this.ui.requestRender(),\n\t\tgetHostCustomUiState: () => this.getHostCustomUiState(),\n\t\tonHostCustomUiStateChange: (listener) => this.onHostCustomUiStateChange(listener),\n\t\tfocusHostInlineCustomUi: () => this.focusHostInlineCustomUi(),\n\t\tonTerminalInput: (handler) => this.addExtensionTerminalInputListener(handler),\n\t\tsetStatus: (key, text) => this.setExtensionStatus(key, text),\n\t\tsetWorkingMessage: (message) => {\n\t\t\tthis.workingMessage = message;\n\t\t\tif (this.loadingAnimation) {\n\t\t\t\tthis.loadingAnimation.setMessage(message ?? this.defaultWorkingMessage);\n\t\t\t}\n\t\t},\n\t\tsetWorkingVisible: (visible) => this.setWorkingVisible(visible),\n\t\tsetWorkingIndicator: (options) => this.setWorkingIndicator(options),\n\t\tsetHiddenThinkingLabel: (label) => this.setHiddenThinkingLabel(label),\n\t\tsetWidget: (key, content, options) => this.setExtensionWidget(key, content, options),\n\t\tsetFooter: (factory) => this.setExtensionFooter(factory),\n\t\tonWidgetRelease: (key, listener) => this.onExtensionWidgetRelease(key, listener),\n\t\tsetHeader: (factory) => this.setExtensionHeader(factory),\n\t\tsetTitle: (title) => this.ui.terminal.setTitle(title),\n\t\tcustom: (factory, options) => this.showExtensionCustom(factory, options),\n\t\t// In-process host session picker: extensions already run in the terminal\n\t\t// process here, so the selector mounts directly with no IPC. Isolated\n\t\t// mode exposes the same capability from the engine child over the\n\t\t// session-picker protocol channel; callers never branch.\n\t\thostSessionPicker: (request) =>\n\t\t\topenLocalHostSessionPicker(\n\t\t\t\t{\n\t\t\t\t\tcustom: (factory, options) => this.showExtensionCustom(factory, options),\n\t\t\t\t\trequestRender: () => this.ui.requestRender(),\n\t\t\t\t},\n\t\t\t\trequest,\n\t\t\t),\n\t\thostInputForm: (request) =>\n\t\t\topenLocalHostInputForm(\n\t\t\t\t{\n\t\t\t\t\tcustom: (factory, options) => this.showExtensionCustom(factory, options),\n\t\t\t\t\tsetWorkingVisible: (visible) => this.setWorkingVisible(visible),\n\t\t\t\t},\n\t\t\t\trequest,\n\t\t\t),\n\t\tpasteToEditor: (text) => this.editor.handleInput(`\\x1b[200~${text}\\x1b[201~`),\n\t\tsetEditorText: (text) => this.editor.setText(text),\n\t\tgetEditorText: () => this.editor.getExpandedText?.() ?? this.editor.getText(),\n\t\teditor: (title, prefill, opts) => this.showExtensionEditor(title, prefill, opts),\n\t\taddAutocompleteProvider: (factory) => {\n\t\t\tthis.autocompleteProviderWrappers.push(factory);\n\t\t\tthis.setupAutocompleteProvider();\n\t\t},\n\t\tsetEditorComponent: (factory) => this.setCustomEditorComponent(factory),\n\t\tgetEditorComponent: () => this.editorComponentFactory,\n\t\tgetFooterDataProvider: () => this.footerDataProvider,\n\t\tget theme() {\n\t\t\treturn theme;\n\t\t},\n\t\tgetAllThemes: () => getAvailableThemesWithPaths(),\n\t\tgetTheme: (name) => getThemeByName(name),\n\t\tsetTheme: (themeOrName) => {\n\t\t\tif (themeOrName instanceof Theme) {\n\t\t\t\treturn this.themeController.setThemeInstance(themeOrName);\n\t\t\t}\n\t\t\tconst result = this.themeController.setThemeName(themeOrName);\n\t\t\tif (result.success && this.settingsManager.getThemeSetting() !== themeOrName) {\n\t\t\t\tthis.settingsManager.setTheme(themeOrName);\n\t\t\t}\n\t\t\treturn result;\n\t\t},\n\t\tgetToolsExpanded: () => this.toolOutputExpanded,\n\t\tsetToolsExpanded: (expanded) => this.setToolsExpanded(expanded),\n\t\tgetChatRenderSettings: () => ({\n\t\t\thideThinkingBlock: this.hideThinkingBlock,\n\t\t\thiddenThinkingLabel: this.hiddenThinkingLabel,\n\t\t\ttoolOutputExpanded: this.toolOutputExpanded,\n\t\t\tshowImages: this.settingsManager.getShowImages(),\n\t\t\timageWidthCells: this.settingsManager.getImageWidthCells(),\n\t\t\toutputPad: this.outputPad,\n\t\t\trenderLatex: this.settingsManager.getLatexRenderingEnabled(),\n\t\t\tmarkdownTransformers: this.getMarkdownTransformers(),\n\t\t\tgetToolDefinition: (toolName: string) => this.getRegisteredToolDefinition(toolName),\n\t\t\tgetCustomMessageRenderer: (customType: string) => this.session.extensionRunner.getMessageRenderer(customType),\n\t\t}),\n\t};\n};\n"]}
1
+ {"version":3,"file":"interactive-extension-context.js","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-extension-context.ts"],"names":[],"mappings":"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","sourcesContent":["import { replaceControlCharacters } from \"../../utils/ansi.js\";\nimport { openLocalHostInputForm } from \"./components/host-input-form-mount.ts\";\nimport { openLocalHostSessionPicker } from \"./components/host-session-picker.ts\";\nimport { InteractiveModeBase } from \"./interactive-mode-base.ts\";\nimport {\n\ttype ExtensionUIContext,\n\tgetAvailableThemesWithPaths,\n\tgetThemeByName,\n\ttype HostCustomUiState,\n\ttype HostCustomUiStateListener,\n\ttype ProjectTrustContext,\n\tTheme,\n\ttheme,\n} from \"./interactive-mode-deps.ts\";\n\nInteractiveModeBase.prototype.addExtensionTerminalInputListener = function (\n\tthis: InteractiveModeBase,\n\thandler: (data: string) => { consume?: boolean; data?: string } | undefined,\n): () => void {\n\tconst subscription = { handler, unsubscribe: this.ui.addInputListener(handler) };\n\tthis.tuiInputSubscriptions.add(subscription);\n\tthis.extensionTerminalInputSubscriptions.add(subscription);\n\treturn () => {\n\t\tsubscription.unsubscribe();\n\t\tthis.extensionTerminalInputSubscriptions.delete(subscription);\n\t\tthis.tuiInputSubscriptions.delete(subscription);\n\t};\n};\n\nInteractiveModeBase.prototype.clearExtensionTerminalInputListeners = function (this: InteractiveModeBase): void {\n\tfor (const subscription of this.extensionTerminalInputSubscriptions) {\n\t\tsubscription.unsubscribe();\n\t\tthis.tuiInputSubscriptions.delete(subscription);\n\t}\n\tthis.extensionTerminalInputSubscriptions.clear();\n};\n\nInteractiveModeBase.prototype.getHostCustomUiState = function (this: InteractiveModeBase): HostCustomUiState {\n\tconst focusDeferred = this.blockingInlineCustomUiDepth > 0 && this.pendingInlineCustomUiFocus !== undefined;\n\treturn {\n\t\tblockingInlineCustomUiDepth: this.blockingInlineCustomUiDepth,\n\t\tblockingInlineCustomUiActive: this.blockingInlineCustomUiDepth > 0,\n\t\t...(focusDeferred ? { blockingInlineCustomUiFocusDeferred: true } : {}),\n\t\t...(this.navigationInlineCustomUiDepth > 0\n\t\t\t? { blockingInlineCustomUiNeedsInput: this.blockingInlineCustomUiDepth > this.navigationInlineCustomUiDepth }\n\t\t\t: {}),\n\t};\n};\n\nInteractiveModeBase.prototype.notifyHostCustomUiStateListeners = function (this: InteractiveModeBase): void {\n\tconst state = this.getHostCustomUiState();\n\tfor (const listener of this.hostCustomUiStateListeners) {\n\t\ttry {\n\t\t\tlistener(state);\n\t\t} catch {\n\t\t\t/* ignore observer errors */\n\t\t}\n\t}\n};\n\nInteractiveModeBase.prototype.beginHostInlineCustomUi = function (\n\tthis: InteractiveModeBase,\n\tpurpose?: \"prompt\" | \"navigation\",\n): () => void {\n\tlet released = false;\n\tthis.blockingInlineCustomUiDepth++;\n\tif (purpose === \"navigation\") this.navigationInlineCustomUiDepth = (this.navigationInlineCustomUiDepth ?? 0) + 1;\n\tthis.notifyHostCustomUiStateListeners();\n\treturn () => {\n\t\tif (released) return;\n\t\treleased = true;\n\t\tthis.blockingInlineCustomUiDepth = Math.max(0, this.blockingInlineCustomUiDepth - 1);\n\t\tif (purpose === \"navigation\")\n\t\t\tthis.navigationInlineCustomUiDepth = Math.max(0, this.navigationInlineCustomUiDepth - 1);\n\t\tthis.notifyHostCustomUiStateListeners();\n\t};\n};\n\nInteractiveModeBase.prototype.beginInlineCustomUiFocusDeferral = function (this: InteractiveModeBase): () => void {\n\tlet released = false;\n\tthis.deferredInlineCustomUiFocusDepth++;\n\tthis.notifyHostCustomUiStateListeners();\n\treturn () => {\n\t\tif (released) return;\n\t\treleased = true;\n\t\tthis.deferredInlineCustomUiFocusDepth = Math.max(0, this.deferredInlineCustomUiFocusDepth - 1);\n\t\tif (this.deferredInlineCustomUiFocusDepth === 0) {\n\t\t\tthis.focusHostInlineCustomUi();\n\t\t}\n\t\tthis.notifyHostCustomUiStateListeners();\n\t};\n};\n\nInteractiveModeBase.prototype.shouldDeferInlineCustomUiFocus = function (this: InteractiveModeBase): boolean {\n\treturn this.deferredInlineCustomUiFocusDepth > 0;\n};\n\nInteractiveModeBase.prototype.focusHostInlineCustomUi = function (this: InteractiveModeBase): boolean {\n\tconst component = this.pendingInlineCustomUiFocus;\n\tif (component === undefined) return false;\n\tthis.pendingInlineCustomUiFocus = undefined;\n\tthis.ui.setFocus(component);\n\tthis.ui.requestRender();\n\tthis.notifyHostCustomUiStateListeners();\n\treturn true;\n};\n\nInteractiveModeBase.prototype.onHostCustomUiStateChange = function (\n\tthis: InteractiveModeBase,\n\tlistener: HostCustomUiStateListener,\n): () => void {\n\tthis.hostCustomUiStateListeners.add(listener);\n\treturn () => {\n\t\tthis.hostCustomUiStateListeners.delete(listener);\n\t};\n};\n\nInteractiveModeBase.prototype.onExtensionWidgetRelease = function (\n\tthis: InteractiveModeBase,\n\tkey: string,\n\tlistener: () => void,\n): () => void {\n\tlet widgetReleaseListeners = this.widgetReleaseListeners;\n\tif (!widgetReleaseListeners) {\n\t\twidgetReleaseListeners = new Map();\n\t\tthis.widgetReleaseListeners = widgetReleaseListeners;\n\t}\n\tconst listeners = widgetReleaseListeners.get(key) ?? new Set<() => void>();\n\tlisteners.add(listener);\n\twidgetReleaseListeners.set(key, listeners);\n\treturn () => {\n\t\tlisteners.delete(listener);\n\t\tif (listeners.size === 0) widgetReleaseListeners.delete(key);\n\t};\n};\n\nInteractiveModeBase.prototype.notifyExtensionWidgetRelease = function (this: InteractiveModeBase, key: string): void {\n\tfor (const listener of this.widgetReleaseListeners?.get(key) ?? []) {\n\t\ttry {\n\t\t\tlistener();\n\t\t} catch {\n\t\t\t/* ignore observer errors */\n\t\t}\n\t}\n};\n\nInteractiveModeBase.prototype.createProjectTrustContext = function (\n\tthis: InteractiveModeBase,\n\tcwd: string,\n): ProjectTrustContext {\n\tconst ui = this.createExtensionUIContext();\n\tconst runner = this.session.extensionRunner;\n\treturn {\n\t\tcwd,\n\t\tmode: \"tui\",\n\t\thasUI: true,\n\t\tui: {\n\t\t\tselect: (title, options, opts) =>\n\t\t\t\trunner.withProjectTrustPrompt(\"select\", title, () => ui.select(title, options, opts)),\n\t\t\tconfirm: (title, message, opts) =>\n\t\t\t\trunner.withProjectTrustPrompt(\"confirm\", title, () => ui.confirm(title, message, opts)),\n\t\t\tinput: (title, placeholder, opts) =>\n\t\t\t\trunner.withProjectTrustPrompt(\"input\", title, () => ui.input(title, placeholder, opts)),\n\t\t\tnotify: ui.notify,\n\t\t},\n\t};\n};\n\nInteractiveModeBase.prototype.createExtensionUIContext = function (this: InteractiveModeBase): ExtensionUIContext {\n\treturn {\n\t\tselect: (title, options, opts) => this.showExtensionSelector(title, options, opts),\n\t\tconfirm: (title, message, opts) => this.showExtensionConfirm(title, message, opts),\n\t\tinput: (title, placeholder, opts) => this.showExtensionInput(title, placeholder, opts),\n\t\tnotify: (message, type) => this.showExtensionNotify(message, type),\n\t\trequestRender: () => this.ui.requestRender(),\n\t\tgetHostCustomUiState: () => this.getHostCustomUiState(),\n\t\tonHostCustomUiStateChange: (listener) => this.onHostCustomUiStateChange(listener),\n\t\tfocusHostInlineCustomUi: () => this.focusHostInlineCustomUi(),\n\t\tonTerminalInput: (handler) => this.addExtensionTerminalInputListener(handler),\n\t\tsetStatus: (key, text) => this.setExtensionStatus(key, text),\n\t\tsetWorkingMessage: (message) => {\n\t\t\tthis.workingMessage = message;\n\t\t\tif (this.loadingAnimation) {\n\t\t\t\tthis.loadingAnimation.setMessage(message ?? this.defaultWorkingMessage);\n\t\t\t}\n\t\t},\n\t\tsetWorkingVisible: (visible) => this.setWorkingVisible(visible),\n\t\tsetWorkingIndicator: (options) => this.setWorkingIndicator(options),\n\t\tsetHiddenThinkingLabel: (label) => this.setHiddenThinkingLabel(label),\n\t\tsetWidget: (key, content, options) => this.setExtensionWidget(key, content, options),\n\t\tsetFooter: (factory) => this.setExtensionFooter(factory),\n\t\tonWidgetRelease: (key, listener) => this.onExtensionWidgetRelease(key, listener),\n\t\tsetHeader: (factory) => this.setExtensionHeader(factory),\n\t\tsetTitle: (title) => this.ui.terminal.setTitle(replaceControlCharacters(title)),\n\t\tcustom: (factory, options) => this.showExtensionCustom(factory, options),\n\t\t// In-process host session picker: extensions already run in the terminal\n\t\t// process here, so the selector mounts directly with no IPC. Isolated\n\t\t// mode exposes the same capability from the engine child over the\n\t\t// session-picker protocol channel; callers never branch.\n\t\thostSessionPicker: (request) =>\n\t\t\topenLocalHostSessionPicker(\n\t\t\t\t{\n\t\t\t\t\tcustom: (factory, options) => this.showExtensionCustom(factory, options),\n\t\t\t\t\trequestRender: () => this.ui.requestRender(),\n\t\t\t\t},\n\t\t\t\trequest,\n\t\t\t),\n\t\thostInputForm: (request) =>\n\t\t\topenLocalHostInputForm(\n\t\t\t\t{\n\t\t\t\t\tcustom: (factory, options) => this.showExtensionCustom(factory, options),\n\t\t\t\t\tsetWorkingVisible: (visible) => this.setWorkingVisible(visible),\n\t\t\t\t},\n\t\t\t\trequest,\n\t\t\t),\n\t\tpasteToEditor: (text) => this.editor.handleInput(`\\x1b[200~${text}\\x1b[201~`),\n\t\tsetEditorText: (text) => this.editor.setText(text),\n\t\tgetEditorText: () => this.editor.getExpandedText?.() ?? this.editor.getText(),\n\t\teditor: (title, prefill, opts) => this.showExtensionEditor(title, prefill, opts),\n\t\taddAutocompleteProvider: (factory) => {\n\t\t\tthis.autocompleteProviderWrappers.push(factory);\n\t\t\tthis.setupAutocompleteProvider();\n\t\t},\n\t\tsetEditorComponent: (factory) => this.setCustomEditorComponent(factory),\n\t\tgetEditorComponent: () => this.editorComponentFactory,\n\t\tgetFooterDataProvider: () => this.footerDataProvider,\n\t\tget theme() {\n\t\t\treturn theme;\n\t\t},\n\t\tgetAllThemes: () => getAvailableThemesWithPaths(),\n\t\tgetTheme: (name) => getThemeByName(name),\n\t\tsetTheme: (themeOrName) => {\n\t\t\tif (themeOrName instanceof Theme) {\n\t\t\t\treturn this.themeController.setThemeInstance(themeOrName);\n\t\t\t}\n\t\t\tconst result = this.themeController.setThemeName(themeOrName);\n\t\t\tif (result.success && this.settingsManager.getThemeSetting() !== themeOrName) {\n\t\t\t\tthis.settingsManager.setTheme(themeOrName);\n\t\t\t}\n\t\t\treturn result;\n\t\t},\n\t\tgetToolsExpanded: () => this.toolOutputExpanded,\n\t\tsetToolsExpanded: (expanded) => this.setToolsExpanded(expanded),\n\t\tgetChatRenderSettings: () => ({\n\t\t\thideThinkingBlock: this.hideThinkingBlock,\n\t\t\thiddenThinkingLabel: this.hiddenThinkingLabel,\n\t\t\ttoolOutputExpanded: this.toolOutputExpanded,\n\t\t\tshowImages: this.settingsManager.getShowImages(),\n\t\t\timageWidthCells: this.settingsManager.getImageWidthCells(),\n\t\t\toutputPad: this.outputPad,\n\t\t\trenderLatex: this.settingsManager.getLatexRenderingEnabled(),\n\t\t\tmarkdownTransformers: this.getMarkdownTransformers(),\n\t\t\tgetToolDefinition: (toolName: string) => this.getRegisteredToolDefinition(toolName),\n\t\t\tgetCustomMessageRenderer: (customType: string) => this.session.extensionRunner.getMessageRenderer(customType),\n\t\t}),\n\t};\n};\n"]}
@@ -313,7 +313,7 @@ InteractiveModeBase.prototype.showExtensionCustom = async function (factory, opt
313
313
  else {
314
314
  inlineMount = component;
315
315
  const deferFocus = this.shouldDeferInlineCustomUiFocus();
316
- this.pushExtensionDialog(component, undefined, !deferFocus);
316
+ this.pushExtensionDialog(component, options?.blocked, !deferFocus);
317
317
  if (deferFocus) {
318
318
  this.pendingInlineCustomUiFocus = component;
319
319
  this.notifyHostCustomUiStateListeners();