@bastani/atomic 0.9.5-alpha.6 → 0.9.5-alpha.8
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.
- package/CHANGELOG.md +35 -2
- package/dist/builtin/cursor/package.json +2 -2
- package/dist/builtin/intercom/CHANGELOG.md +17 -0
- package/dist/builtin/intercom/README.md +27 -21
- package/dist/builtin/intercom/broker/broker.ts +3 -6
- package/dist/builtin/intercom/broker/paths.ts +42 -5
- package/dist/builtin/intercom/broker/spawn.ts +78 -10
- package/dist/builtin/intercom/config.ts +6 -3
- package/dist/builtin/intercom/contact-supervisor-tool.ts +6 -4
- package/dist/builtin/intercom/index-heavy.ts +1 -1
- package/dist/builtin/intercom/index.ts +162 -130
- package/dist/builtin/intercom/intercom-tool.ts +9 -3
- package/dist/builtin/intercom/package.json +10 -1
- package/dist/builtin/intercom/result-renderers.ts +1 -1
- package/dist/builtin/intercom/ui/compose.ts +2 -2
- package/dist/builtin/intercom/ui/inline-message.ts +2 -2
- package/dist/builtin/intercom/ui/session-list.ts +2 -2
- package/dist/builtin/mcp/package.json +1 -1
- package/dist/builtin/subagents/CHANGELOG.md +6 -0
- package/dist/builtin/subagents/package.json +1 -1
- package/dist/builtin/subagents/src/tui/render-event-formatting.ts +15 -48
- package/dist/builtin/subagents/src/tui/render-layout.ts +9 -0
- package/dist/builtin/subagents/src/tui/render-widget-graph.ts +27 -25
- package/dist/builtin/subagents/src/tui/render-widget.ts +46 -69
- package/dist/builtin/subagents/src/tui/render.ts +1 -1
- package/dist/builtin/web-access/package.json +1 -1
- package/dist/builtin/workflows/CHANGELOG.md +11 -0
- package/dist/builtin/workflows/README.md +3 -1
- package/dist/builtin/workflows/builtin/goal-artifacts.ts +3 -1
- package/dist/builtin/workflows/builtin/goal-prompts.ts +23 -2
- package/dist/builtin/workflows/builtin/goal-reducer.ts +21 -0
- package/dist/builtin/workflows/builtin/goal-review.ts +60 -6
- package/dist/builtin/workflows/builtin/goal-runner.ts +32 -21
- package/dist/builtin/workflows/builtin/goal-types.ts +7 -1
- package/dist/builtin/workflows/builtin/ralph-core.ts +52 -4
- package/dist/builtin/workflows/builtin/ralph-review-gate.ts +10 -3
- package/dist/builtin/workflows/builtin/ralph-reviewer-prompt.ts +23 -2
- package/dist/builtin/workflows/builtin/ralph-runner.ts +38 -16
- package/dist/builtin/workflows/builtin/review-convergence.ts +111 -0
- package/dist/builtin/workflows/package.json +1 -1
- package/dist/builtin/workflows/skills/create-spec/SKILL.md +2 -0
- package/dist/builtin/workflows/src/durable/child-primitive.ts +12 -8
- package/dist/builtin/workflows/src/durable/dbos-backend.ts +47 -2
- package/dist/builtin/workflows/src/durable/dbos-envelope.ts +28 -0
- package/dist/builtin/workflows/src/durable/stage-primitive.ts +165 -27
- package/dist/builtin/workflows/src/durable/types.ts +14 -1
- package/dist/builtin/workflows/src/engine/run.ts +12 -13
- package/dist/builtin/workflows/src/extension/workflow-prompts.ts +2 -0
- package/dist/builtin/workflows/src/runs/foreground/executor-continuation.ts +13 -3
- package/dist/builtin/workflows/src/runs/foreground/executor-stage-factory.ts +1 -1
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-controller.ts +18 -19
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-unresolved-overflow.ts +38 -0
- package/dist/builtin/workflows/src/shared/persistence-restore-helpers.ts +18 -1
- package/dist/builtin/workflows/src/shared/persistence-restore.ts +23 -5
- package/dist/builtin/workflows/src/shared/persistence-session-entries.ts +4 -0
- package/dist/bun/internal-intercom-broker.d.ts +6 -0
- package/dist/bun/internal-intercom-broker.d.ts.map +1 -0
- package/dist/bun/internal-intercom-broker.js +39 -0
- package/dist/bun/internal-intercom-broker.js.map +1 -0
- package/dist/bun/split-loader.d.ts +2 -0
- package/dist/bun/split-loader.d.ts.map +1 -0
- package/dist/bun/split-loader.js +50 -0
- package/dist/bun/split-loader.js.map +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +6 -4
- package/dist/config.js.map +1 -1
- package/dist/core/agent-session-auto-compaction.d.ts +7 -7
- package/dist/core/agent-session-auto-compaction.d.ts.map +1 -1
- package/dist/core/agent-session-auto-compaction.js +62 -16
- package/dist/core/agent-session-auto-compaction.js.map +1 -1
- package/dist/core/agent-session-events.d.ts.map +1 -1
- package/dist/core/agent-session-events.js +3 -1
- package/dist/core/agent-session-events.js.map +1 -1
- package/dist/core/agent-session-extension-bindings.d.ts.map +1 -1
- package/dist/core/agent-session-extension-bindings.js +1 -1
- package/dist/core/agent-session-extension-bindings.js.map +1 -1
- package/dist/core/agent-session-methods.d.ts +10 -4
- package/dist/core/agent-session-methods.d.ts.map +1 -1
- package/dist/core/agent-session-methods.js.map +1 -1
- package/dist/core/agent-session-models.d.ts +2 -2
- package/dist/core/agent-session-models.d.ts.map +1 -1
- package/dist/core/agent-session-models.js.map +1 -1
- package/dist/core/agent-session-prompt.d.ts.map +1 -1
- package/dist/core/agent-session-prompt.js +1 -0
- package/dist/core/agent-session-prompt.js.map +1 -1
- package/dist/core/agent-session-retry.d.ts +2 -0
- package/dist/core/agent-session-retry.d.ts.map +1 -1
- package/dist/core/agent-session-retry.js +152 -4
- package/dist/core/agent-session-retry.js.map +1 -1
- package/dist/core/agent-session-services.d.ts +1 -0
- package/dist/core/agent-session-services.d.ts.map +1 -1
- package/dist/core/agent-session-services.js +1 -0
- package/dist/core/agent-session-services.js.map +1 -1
- package/dist/core/agent-session-types.d.ts +15 -1
- package/dist/core/agent-session-types.d.ts.map +1 -1
- package/dist/core/agent-session-types.js.map +1 -1
- package/dist/core/agent-session.d.ts +4 -0
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +4 -0
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/builtin-packages.d.ts.map +1 -1
- package/dist/core/builtin-packages.js +8 -4
- package/dist/core/builtin-packages.js.map +1 -1
- package/dist/core/compaction/context-compaction-runner.d.ts.map +1 -1
- package/dist/core/compaction/context-compaction-runner.js +36 -20
- package/dist/core/compaction/context-compaction-runner.js.map +1 -1
- package/dist/core/copilot-anthropic-sse-repair.d.ts +23 -0
- package/dist/core/copilot-anthropic-sse-repair.d.ts.map +1 -0
- package/dist/core/copilot-anthropic-sse-repair.js +340 -0
- package/dist/core/copilot-anthropic-sse-repair.js.map +1 -0
- package/dist/core/copilot-gemini-reasoning.d.ts +16 -8
- package/dist/core/copilot-gemini-reasoning.d.ts.map +1 -1
- package/dist/core/copilot-gemini-reasoning.js +27 -22
- package/dist/core/copilot-gemini-reasoning.js.map +1 -1
- package/dist/core/copilot-hosts.d.ts +12 -0
- package/dist/core/copilot-hosts.d.ts.map +1 -0
- package/dist/core/copilot-hosts.js +33 -0
- package/dist/core/copilot-hosts.js.map +1 -0
- package/dist/core/copilot-model-catalog.d.ts.map +1 -1
- package/dist/core/copilot-model-catalog.js +3 -2
- package/dist/core/copilot-model-catalog.js.map +1 -1
- package/dist/core/extensions/agent-events.d.ts +1 -1
- package/dist/core/extensions/agent-events.d.ts.map +1 -1
- package/dist/core/extensions/agent-events.js.map +1 -1
- package/dist/core/extensions/loader-virtual-modules.d.ts.map +1 -1
- package/dist/core/extensions/loader-virtual-modules.js +8 -3
- package/dist/core/extensions/loader-virtual-modules.js.map +1 -1
- package/dist/core/http-dispatcher.d.ts.map +1 -1
- package/dist/core/http-dispatcher.js +5 -5
- package/dist/core/http-dispatcher.js.map +1 -1
- package/dist/core/openai-responses-payload-sanitizer.d.ts +6 -0
- package/dist/core/openai-responses-payload-sanitizer.d.ts.map +1 -0
- package/dist/core/openai-responses-payload-sanitizer.js +59 -0
- package/dist/core/openai-responses-payload-sanitizer.js.map +1 -0
- package/dist/core/package-manager-auto-resources.d.ts +2 -2
- package/dist/core/package-manager-auto-resources.d.ts.map +1 -1
- package/dist/core/package-manager-auto-resources.js +32 -52
- package/dist/core/package-manager-auto-resources.js.map +1 -1
- package/dist/core/package-manager-resolver.d.ts.map +1 -1
- package/dist/core/package-manager-resolver.js +23 -14
- package/dist/core/package-manager-resolver.js.map +1 -1
- package/dist/core/package-manager-resource-collector.d.ts +3 -3
- package/dist/core/package-manager-resource-collector.d.ts.map +1 -1
- package/dist/core/package-manager-resource-collector.js +76 -73
- package/dist/core/package-manager-resource-collector.js.map +1 -1
- package/dist/core/package-manager-resource-files.d.ts +9 -8
- package/dist/core/package-manager-resource-files.d.ts.map +1 -1
- package/dist/core/package-manager-resource-files.js +92 -81
- package/dist/core/package-manager-resource-files.js.map +1 -1
- package/dist/core/prompt-templates-async.d.ts +3 -0
- package/dist/core/prompt-templates-async.d.ts.map +1 -0
- package/dist/core/prompt-templates-async.js +118 -0
- package/dist/core/prompt-templates-async.js.map +1 -0
- package/dist/core/provider-context-usage.d.ts +11 -0
- package/dist/core/provider-context-usage.d.ts.map +1 -0
- package/dist/core/provider-context-usage.js +58 -0
- package/dist/core/provider-context-usage.js.map +1 -0
- package/dist/core/resource-loader-assets.d.ts +3 -3
- package/dist/core/resource-loader-assets.d.ts.map +1 -1
- package/dist/core/resource-loader-assets.js +66 -83
- package/dist/core/resource-loader-assets.js.map +1 -1
- package/dist/core/resource-loader-core.d.ts +1 -1
- package/dist/core/resource-loader-core.d.ts.map +1 -1
- package/dist/core/resource-loader-core.js +5 -5
- package/dist/core/resource-loader-core.js.map +1 -1
- package/dist/core/resource-loader-reload.d.ts.map +1 -1
- package/dist/core/resource-loader-reload.js +43 -7
- package/dist/core/resource-loader-reload.js.map +1 -1
- package/dist/core/resource-loader-types.d.ts +7 -1
- package/dist/core/resource-loader-types.d.ts.map +1 -1
- package/dist/core/resource-loader-types.js.map +1 -1
- package/dist/core/sdk-types.d.ts +2 -0
- package/dist/core/sdk-types.d.ts.map +1 -1
- package/dist/core/sdk-types.js.map +1 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +7 -4
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/settings-manager-basic-accessors.d.ts +1 -0
- package/dist/core/settings-manager-basic-accessors.d.ts.map +1 -1
- package/dist/core/settings-manager-basic-accessors.js +6 -0
- package/dist/core/settings-manager-basic-accessors.js.map +1 -1
- package/dist/core/settings-types.d.ts +1 -0
- package/dist/core/settings-types.d.ts.map +1 -1
- package/dist/core/settings-types.js.map +1 -1
- package/dist/core/skills-async.d.ts +3 -0
- package/dist/core/skills-async.d.ts.map +1 -0
- package/dist/core/skills-async.js +269 -0
- package/dist/core/skills-async.js.map +1 -0
- package/dist/index-extensions.d.ts +1 -1
- package/dist/index-extensions.d.ts.map +1 -1
- package/dist/index-extensions.js.map +1 -1
- package/dist/main-deferred-startup.d.ts +14 -0
- package/dist/main-deferred-startup.d.ts.map +1 -1
- package/dist/main-deferred-startup.js +23 -0
- package/dist/main-deferred-startup.js.map +1 -1
- package/dist/main-early-input.d.ts +41 -0
- package/dist/main-early-input.d.ts.map +1 -0
- package/dist/main-early-input.js +147 -0
- package/dist/main-early-input.js.map +1 -0
- package/dist/main.d.ts +0 -6
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +23 -17
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-events.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-events.js +15 -0
- package/dist/modes/interactive/components/chat-session-host-events.js.map +1 -1
- package/dist/modes/interactive/interactive-agent-events.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-agent-events.js +34 -1
- package/dist/modes/interactive/interactive-agent-events.js.map +1 -1
- package/dist/modes/interactive/interactive-deferred-startup.d.ts +6 -0
- package/dist/modes/interactive/interactive-deferred-startup.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-deferred-startup.js +27 -13
- package/dist/modes/interactive/interactive-deferred-startup.js.map +1 -1
- package/dist/modes/interactive/interactive-editor-actions.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-editor-actions.js +13 -13
- package/dist/modes/interactive/interactive-editor-actions.js.map +1 -1
- package/dist/modes/interactive/interactive-extension-runtime.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-extension-runtime.js +16 -0
- package/dist/modes/interactive/interactive-extension-runtime.js.map +1 -1
- package/dist/modes/interactive/interactive-input-handling.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-input-handling.js +324 -178
- package/dist/modes/interactive/interactive-input-handling.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-base.d.ts +14 -0
- package/dist/modes/interactive/interactive-mode-base.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode-base.js +41 -0
- package/dist/modes/interactive/interactive-mode-base.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-surface.d.ts +22 -6
- package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode-surface.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-types.d.ts +3 -0
- package/dist/modes/interactive/interactive-mode-types.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode-types.js.map +1 -1
- package/dist/modes/interactive/interactive-model-routing.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-model-routing.js +3 -3
- package/dist/modes/interactive/interactive-model-routing.js.map +1 -1
- package/dist/modes/interactive/interactive-onboarding.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-onboarding.js +1 -0
- package/dist/modes/interactive/interactive-onboarding.js.map +1 -1
- package/dist/modes/interactive/interactive-process-lifecycle.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-process-lifecycle.js +43 -6
- package/dist/modes/interactive/interactive-process-lifecycle.js.map +1 -1
- package/dist/modes/interactive/interactive-render-chat.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-render-chat.js +78 -9
- package/dist/modes/interactive/interactive-render-chat.js.map +1 -1
- package/dist/modes/interactive/interactive-resource-disclosure.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-resource-disclosure.js +3 -2
- package/dist/modes/interactive/interactive-resource-disclosure.js.map +1 -1
- package/dist/modes/interactive/interactive-resource-rendering.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-resource-rendering.js +10 -8
- package/dist/modes/interactive/interactive-resource-rendering.js.map +1 -1
- package/dist/modes/interactive/interactive-session-runtime.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-session-runtime.js +1 -1
- package/dist/modes/interactive/interactive-session-runtime.js.map +1 -1
- package/dist/modes/interactive/interactive-startup.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-startup.js +65 -53
- package/dist/modes/interactive/interactive-startup.js.map +1 -1
- package/dist/modes/interactive/theme/theme-loading.d.ts +1 -0
- package/dist/modes/interactive/theme/theme-loading.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme-loading.js +3 -0
- package/dist/modes/interactive/theme/theme-loading.js.map +1 -1
- package/dist/modes/interactive/theme/theme.d.ts +1 -1
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme.js +1 -1
- package/dist/modes/interactive/theme/theme.js.map +1 -1
- package/dist/utils/module-require.d.ts +11 -0
- package/dist/utils/module-require.d.ts.map +1 -1
- package/dist/utils/module-require.js +14 -1
- package/dist/utils/module-require.js.map +1 -1
- package/dist/utils/split-launcher.d.ts +38 -0
- package/dist/utils/split-launcher.d.ts.map +1 -0
- package/dist/utils/split-launcher.js +63 -0
- package/dist/utils/split-launcher.js.map +1 -0
- package/docs/compaction.md +7 -0
- package/docs/json.md +3 -1
- package/docs/keybindings.md +2 -2
- package/docs/providers.md +2 -1
- package/docs/rpc.md +3 -1
- package/docs/settings.md +28 -2
- package/docs/terminal-setup.md +4 -0
- package/docs/usage.md +3 -3
- package/docs/workflows.md +13 -3
- package/npm-shrinkwrap.json +513 -23
- package/package.json +5 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactive-input-handling.js","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-input-handling.ts"],"names":[],"mappings":"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","sourcesContent":["import { InteractiveModeBase } from \"./interactive-mode-base.ts\";\nimport { pasteClipboardImageToEditor } from \"./interactive-mode-deps.ts\";\n\nInteractiveModeBase.prototype.setupKeyHandlers = function(this: InteractiveModeBase): void {\n // Set up handlers on defaultEditor - they use this.editor for text access\n // so they work correctly regardless of which editor is active\n this.defaultEditor.onEscape = () => {\n if (this.session.isStreaming) {\n this.restoreQueuedMessagesToEditor({ abort: true });\n } else if (this.session.isBashRunning) {\n this.session.abortBash();\n } else if (this.isBashMode) {\n this.editor.setText(\"\");\n this.isBashMode = false;\n this.updateEditorBorderColor();\n } else if (!this.editor.getText().trim()) {\n // Double-escape with empty editor triggers /tree, /fork, or nothing based on setting\n const action = this.settingsManager.getDoubleEscapeAction();\n if (action !== \"none\") {\n const now = Date.now();\n if (now - this.lastEscapeTime < 500) {\n if (action === \"tree\") {\n this.showTreeSelector();\n } else {\n this.showUserMessageSelector();\n }\n this.lastEscapeTime = 0;\n } else {\n this.lastEscapeTime = now;\n }\n }\n }\n };\n\n // Register app action handlers\n this.defaultEditor.onAction(\"app.clear\", () => this.handleCtrlC());\n this.defaultEditor.onCtrlD = () => this.handleCtrlD();\n this.defaultEditor.onAction(\"app.suspend\", () => this.handleCtrlZ());\n this.defaultEditor.onAction(\"app.thinking.cycle\", () =>\n this.cycleThinkingLevel(),\n );\n this.defaultEditor.onAction(\"app.model.cycleForward\", () =>\n this.cycleModel(\"forward\"),\n );\n this.defaultEditor.onAction(\"app.model.cycleBackward\", () =>\n this.cycleModel(\"backward\"),\n );\n\n // Global debug handler on TUI (works regardless of focus)\n this.ui.onDebug = () => this.handleDebugCommand();\n this.defaultEditor.onAction(\"app.model.select\", () =>\n this.showModelSelector(),\n );\n this.defaultEditor.onAction(\"app.tools.expand\", () =>\n this.toggleToolOutputExpansion(),\n );\n this.defaultEditor.onAction(\"app.thinking.toggle\", () =>\n this.toggleThinkingBlockVisibility(),\n );\n this.defaultEditor.onAction(\"app.editor.external\", () =>\n this.openExternalEditor(),\n );\n this.defaultEditor.onAction(\"app.message.followUp\", () =>\n this.handleFollowUp(),\n );\n this.defaultEditor.onAction(\"app.message.dequeue\", () =>\n this.handleDequeue(),\n );\n this.defaultEditor.onAction(\"app.session.new\", () =>\n this.handleClearCommand(),\n );\n this.defaultEditor.onAction(\"app.session.tree\", () =>\n this.showTreeSelector(),\n );\n this.defaultEditor.onAction(\"app.session.fork\", () =>\n this.showUserMessageSelector(),\n );\n this.defaultEditor.onAction(\"app.session.resume\", () =>\n this.showSessionSelector(),\n );\n\n this.defaultEditor.onChange = (text: string) => {\n const wasBashMode = this.isBashMode;\n this.isBashMode = text.trimStart().startsWith(\"!\");\n if (wasBashMode !== this.isBashMode) {\n this.updateEditorBorderColor();\n }\n };\n\n // Handle clipboard image paste (triggered on Ctrl+V)\n this.defaultEditor.onPasteImage = () => {\n this.handleClipboardImagePaste();\n };\n };\n\nInteractiveModeBase.prototype.handleClipboardImagePaste = async function(this: InteractiveModeBase): Promise<void> {\n await pasteClipboardImageToEditor(this.editor, () => this.ui.requestRender(), {\n showWarning: (message) => this.showWarning(message),\n });\n };\n\nInteractiveModeBase.prototype.setupEditorSubmitHandler = function(this: InteractiveModeBase): void {\n this.defaultEditor.onSubmit = async (text: string) => {\n text = text.trim();\n if (!text) return;\n\n // Handle commands\n if (text === \"/settings\") {\n this.showSettingsSelector();\n this.editor.setText(\"\");\n return;\n }\n if (text === \"/fast\") {\n this.editor.setText(\"\");\n this.showFastModeSelector();\n return;\n }\n if (text === \"/scoped-models\") {\n this.editor.setText(\"\");\n await this.showModelsSelector();\n return;\n }\n if (text === \"/model\" || text.startsWith(\"/model \")) {\n const searchTerm = text.startsWith(\"/model \")\n ? text.slice(7).trim()\n : undefined;\n this.editor.setText(\"\");\n await this.handleModelCommand(searchTerm);\n return;\n }\n if (text === \"/export\" || text.startsWith(\"/export \")) {\n await this.handleExportCommand(text);\n this.editor.setText(\"\");\n return;\n }\n if (text === \"/import\" || text.startsWith(\"/import \")) {\n await this.handleImportCommand(text);\n this.editor.setText(\"\");\n return;\n }\n if (text === \"/share\") {\n await this.handleShareCommand();\n this.editor.setText(\"\");\n return;\n }\n if (text === \"/copy\") {\n await this.handleCopyCommand();\n this.editor.setText(\"\");\n return;\n }\n if (text === \"/name\" || text.startsWith(\"/name \")) {\n this.handleNameCommand(text);\n this.editor.setText(\"\");\n return;\n }\n if (text === \"/session\") {\n this.handleSessionCommand();\n this.editor.setText(\"\");\n return;\n }\n if (text === \"/changelog\") {\n this.handleChangelogCommand();\n this.editor.setText(\"\");\n return;\n }\n if (text === \"/atomic\" || text.startsWith(\"/atomic \")) {\n this.editor.setText(\"\");\n await this.session.prompt(text);\n return;\n }\n if (text === \"/hotkeys\") {\n this.handleHotkeysCommand();\n this.editor.setText(\"\");\n return;\n }\n if (text === \"/fork\") {\n this.showUserMessageSelector();\n this.editor.setText(\"\");\n return;\n }\n if (text === \"/clone\") {\n this.editor.setText(\"\");\n await this.handleCloneCommand();\n return;\n }\n if (text === \"/tree\") {\n this.showTreeSelector();\n this.editor.setText(\"\");\n return;\n }\n if (text === \"/trust\") {\n this.showTrustSelector();\n this.editor.setText(\"\");\n return;\n }\n if (text === \"/login\") {\n this.showOAuthSelector(\"login\");\n this.editor.setText(\"\");\n return;\n }\n if (text === \"/logout\") {\n this.showOAuthSelector(\"logout\");\n this.editor.setText(\"\");\n return;\n }\n if (text === \"/new\") {\n this.editor.setText(\"\");\n await this.handleClearCommand();\n return;\n }\n if (/^\\/compact(?:\\s|$)/.test(text)) {\n this.editor.setText(\"\");\n if (text !== \"/compact\") {\n this.showWarning(\"Usage: /compact\");\n return;\n }\n await this.handleCompactCommand();\n return;\n }\n if (text === \"/reload\") {\n this.editor.setText(\"\");\n await this.handleReloadCommand();\n return;\n }\n if (text === \"/debug\") {\n this.handleDebugCommand();\n this.editor.setText(\"\");\n return;\n }\n if (text === \"/arminsayshi\") {\n this.handleArminSaysHi();\n this.editor.setText(\"\");\n return;\n }\n if (text === \"/dementedelves\") {\n this.handleDementedDelves();\n this.editor.setText(\"\");\n return;\n }\n if (text === \"/resume\") {\n this.showSessionSelector();\n this.editor.setText(\"\");\n return;\n }\n if (text === \"/quit\" || text === \"/exit\") {\n this.editor.setText(\"\");\n await this.shutdown();\n return;\n }\n\n // Handle bash command (! for normal, !! for excluded from context)\n if (text.startsWith(\"!\")) {\n const isExcluded = text.startsWith(\"!!\");\n const command = isExcluded\n ? text.slice(2).trim()\n : text.slice(1).trim();\n if (command) {\n if (this.session.isBashRunning) {\n this.showWarning(\n \"A bash command is already running. esc cancel first.\",\n );\n this.editor.setText(text);\n return;\n }\n this.editor.addToHistory?.(text);\n await this.handleBashCommand(command, isExcluded);\n this.isBashMode = false;\n this.updateEditorBorderColor();\n return;\n }\n }\n\n // Queue input during compaction (extension commands execute immediately)\n if (this.session.isCompacting) {\n if (this.isExtensionCommand(text)) {\n this.editor.addToHistory?.(text);\n this.editor.setText(\"\");\n await this.session.prompt(text);\n } else {\n this.queueCompactionMessage(text, \"steer\");\n }\n return;\n }\n\n // If streaming, use prompt() with steer behavior\n // This handles extension commands (execute immediately), prompt template expansion, and queueing\n if (this.session.isStreaming) {\n this.editor.addToHistory?.(text);\n this.editor.setText(\"\");\n await this.session.prompt(text, { streamingBehavior: \"steer\" });\n this.updatePendingMessagesDisplay();\n this.ui.requestRender();\n return;\n }\n\n // Normal message submission\n // First, move any pending bash components to chat\n this.flushPendingBashComponents();\n\n if (this.onInputCallback) {\n this.onInputCallback(text);\n } else {\n this.pendingUserInputs.push(text);\n }\n this.editor.addToHistory?.(text);\n };\n };\n"]}
|
|
1
|
+
{"version":3,"file":"interactive-input-handling.js","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-input-handling.ts"],"names":[],"mappings":"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","sourcesContent":["import { InteractiveModeBase, seedStartupInput } from \"./interactive-mode-base.ts\";\nimport { pasteClipboardImageToEditor } from \"./interactive-mode-deps.ts\";\nimport { yieldToEventLoop } from \"../../utils/event-loop.ts\";\n\nInteractiveModeBase.prototype.runUserPromptTurn = async function(this: InteractiveModeBase, userInput: string): Promise<void> {\n // Show the working spinner immediately on submit so there is no visible gap\n // while prompt preflight runs before the agent emits `agent_start`.\n this.showWorkingLoaderNow();\n if (this.deferredStartupPending) {\n this.deferLoadedResourcesDisclosureUntilAgentEnd = true;\n }\n // Yield once so the freshly-mounted spinner paints before synchronous\n // preflight work can block the event loop.\n await yieldToEventLoop();\n try {\n await this.ensureDeferredStartupComplete();\n await this.session.prompt(userInput);\n this.deferLoadedResourcesDisclosureUntilAgentEnd = false;\n if (this.pendingLoadedResourcesDisclosure) {\n this.pendingLoadedResourcesDisclosure = false;\n this.showLoadedResources({ force: true, showDiagnosticsWhenQuiet: true, targetContainer: this.startupNoticesContainer });\n void this.maybeWarnAboutAnthropicSubscriptionAuth(undefined, this.startupNoticesContainer);\n }\n } catch (error: unknown) {\n this.deferLoadedResourcesDisclosureUntilAgentEnd = false;\n this.discardDeferredRenderedUserInput(userInput);\n const errorMessage =\n error instanceof Error ? error.message : \"Unknown error occurred\";\n this.showError(errorMessage);\n } finally {\n // A submission that resolves without starting an agent turn (e.g. an\n // extension slash-command) never emits `agent_end`, so clear the\n // pre-shown spinner here when idle to avoid a lingering indicator.\n if (!this.session.isStreaming) {\n this.stopWorkingLoader();\n }\n }\n };\n\nInteractiveModeBase.prototype.setupKeyHandlers = function(this: InteractiveModeBase): void {\n this.ui.addInputListener((data) => {\n if (!this.keybindings.matches(data, \"app.clear\")) return undefined;\n if (this.ui.hasOverlay()) return undefined;\n this.handleCtrlC();\n this.ui.requestRender();\n return { consume: true };\n });\n\n // Set up handlers on defaultEditor - they use this.editor for text access\n // so they work correctly regardless of which editor is active\n this.defaultEditor.onEscape = () => {\n if (this.session.isStreaming) {\n this.restoreQueuedMessagesToEditor({ abort: true });\n } else if (this.session.isBashRunning) {\n this.session.abortBash();\n } else if (this.isBashMode) {\n this.editor.setText(\"\");\n this.isBashMode = false;\n this.updateEditorBorderColor();\n } else if (!this.editor.getText().trim()) {\n // Double-escape with empty editor triggers /tree, /fork, or nothing based on setting\n const action = this.settingsManager.getDoubleEscapeAction();\n if (action !== \"none\") {\n const now = Date.now();\n if (now - this.lastEscapeTime < 500) {\n if (action === \"tree\") {\n this.showTreeSelector();\n } else {\n this.showUserMessageSelector();\n }\n this.lastEscapeTime = 0;\n } else {\n this.lastEscapeTime = now;\n }\n }\n }\n };\n\n // Register app action handlers\n this.defaultEditor.onAction(\"app.clear\", () => this.handleCtrlC());\n this.defaultEditor.onCtrlD = () => this.handleCtrlD();\n this.defaultEditor.onAction(\"app.suspend\", () => this.handleCtrlZ());\n this.defaultEditor.onAction(\"app.thinking.cycle\", () =>\n this.cycleThinkingLevel(),\n );\n this.defaultEditor.onAction(\"app.model.cycleForward\", () =>\n this.cycleModel(\"forward\"),\n );\n this.defaultEditor.onAction(\"app.model.cycleBackward\", () =>\n this.cycleModel(\"backward\"),\n );\n\n // Global debug handler on TUI (works regardless of focus)\n this.ui.onDebug = () => this.handleDebugCommand();\n this.defaultEditor.onAction(\"app.model.select\", () =>\n this.showModelSelector(),\n );\n this.defaultEditor.onAction(\"app.tools.expand\", () =>\n this.toggleToolOutputExpansion(),\n );\n this.defaultEditor.onAction(\"app.thinking.toggle\", () =>\n this.toggleThinkingBlockVisibility(),\n );\n this.defaultEditor.onAction(\"app.editor.external\", () =>\n this.openExternalEditor(),\n );\n this.defaultEditor.onAction(\"app.message.followUp\", () =>\n this.handleFollowUp(),\n );\n this.defaultEditor.onAction(\"app.message.dequeue\", () =>\n this.handleDequeue(),\n );\n this.defaultEditor.onAction(\"app.session.new\", () =>\n this.handleClearCommand(),\n );\n this.defaultEditor.onAction(\"app.session.tree\", () =>\n this.showTreeSelector(),\n );\n this.defaultEditor.onAction(\"app.session.fork\", () =>\n this.showUserMessageSelector(),\n );\n this.defaultEditor.onAction(\"app.session.resume\", () =>\n this.showSessionSelector(),\n );\n\n this.defaultEditor.onChange = (text: string) => {\n const wasBashMode = this.isBashMode;\n this.isBashMode = text.trimStart().startsWith(\"!\");\n if (wasBashMode !== this.isBashMode) {\n this.updateEditorBorderColor();\n }\n };\n\n // Handle clipboard image paste (triggered on Ctrl+V)\n this.defaultEditor.onPasteImage = () => {\n this.handleClipboardImagePaste();\n };\n };\n\nInteractiveModeBase.prototype.handleClipboardImagePaste = async function(this: InteractiveModeBase): Promise<void> {\n await pasteClipboardImageToEditor(this.editor, () => this.ui.requestRender(), {\n showWarning: (message) => this.showWarning(message),\n });\n };\n\nInteractiveModeBase.prototype.deliverStartupReplayPrompt = function(this: InteractiveModeBase, text: string): void {\n if (this.onInputCallback) {\n if (!text.startsWith(\"/\")) {\n this.renderDeferredUserInput(text);\n }\n const callback = this.onInputCallback;\n this.onInputCallback = undefined;\n callback(text);\n } else {\n this.pendingUserInputs.push(text);\n }\n };\n\nInteractiveModeBase.prototype.recoverCookedStartupInput = function(this: InteractiveModeBase): boolean {\n if (this.startupCookedInputRecovered || this.pendingUserInputs.length > 0) return true;\n const text = this.editor.getText();\n const cookedLines = text.split(/\\r?\\n/).map((line) => line.trim()).filter(Boolean);\n const isCommandLike = (line: string | undefined) =>\n line !== undefined && (line.startsWith(\"/\") || line.startsWith(\"!\"));\n const singleCommandLike = cookedLines.length === 1 && isCommandLike(cookedLines[0]);\n if (cookedLines.length < 2 && !singleCommandLike) return false;\n\n this.startupCookedInputRecovered = true;\n const activeInput = this.startupReplayActiveInput?.trim();\n let draftText = \"\";\n let submissions = cookedLines;\n if (\n activeInput === undefined &&\n cookedLines.length > 1 &&\n !isCommandLike(cookedLines[cookedLines.length - 1]) &&\n (!isCommandLike(cookedLines[0]) || cookedLines.length > 2)\n ) {\n draftText = cookedLines[cookedLines.length - 1] ?? \"\";\n submissions = cookedLines.slice(0, -1);\n } else if (activeInput && cookedLines.length > 1 && !isCommandLike(cookedLines[cookedLines.length - 1])) {\n draftText = cookedLines[cookedLines.length - 1] ?? \"\";\n submissions = cookedLines.slice(0, -1);\n }\n if (submissions.length === 0) return true;\n\n if (activeInput) {\n const queuedSubmissions =\n submissions[0] === activeInput ? submissions.slice(1) : submissions;\n this.editor.setText(draftText);\n this.startupReplayInputs.push(...queuedSubmissions);\n return true;\n }\n\n this.editor.setText(\"\");\n seedStartupInput(this.pendingUserInputs, this.editor, { text: draftText, submissions }, this.startupReplayInputs, (draft) => {\n this.startupDraftText = draft;\n }, (active) => {\n this.startupReplayActiveInput = active;\n });\n return true;\n };\n\nInteractiveModeBase.prototype.drainStartupReplayCommands = async function(this: InteractiveModeBase): Promise<void> {\n while (this.pendingUserInputs.length === 0 && this.startupReplayActiveInput) {\n const activeInput = this.startupReplayActiveInput;\n await this.defaultEditor.onSubmit?.(activeInput);\n if (this.editor.getText().trim() === activeInput.trim()) {\n this.editor.setText(\"\");\n }\n if (this.startupReplayActiveInput?.trim() === activeInput.trim()) break;\n }\n };\n\nInteractiveModeBase.prototype.advanceStartupInputReplay = function(this: InteractiveModeBase, submittedText: string): void {\n if (this.startupReplayActiveInput?.trim() !== submittedText.trim()) return;\n this.startupReplayActiveInput = undefined;\n\n while (this.startupReplayInputs.length > 0) {\n const nextInput = this.startupReplayInputs.shift();\n if (nextInput === undefined) break;\n const trimmed = nextInput.trimStart();\n if (trimmed.startsWith(\"/\") || trimmed.startsWith(\"!\")) {\n this.startupReplayActiveInput = nextInput.trim();\n this.editor.setText(this.startupReplayActiveInput);\n this.ui.requestRender();\n return;\n }\n this.deliverStartupReplayPrompt(nextInput);\n }\n\n if (this.startupDraftText !== undefined) {\n this.editor.setText(this.startupDraftText);\n this.startupDraftText = undefined;\n this.ui.requestRender();\n }\n };\n\nInteractiveModeBase.prototype.setupEditorSubmitHandler = function(this: InteractiveModeBase): void {\n this.defaultEditor.onSubmit = async (text: string) => {\n text = text.trim();\n if (!text) return;\n\n if (this.startupReplayActiveInput && this.startupReplayActiveInput.trim() !== text.trim()) {\n this.startupReplayInputs.push(text);\n this.editor.addToHistory?.(text);\n this.editor.setText(\"\");\n return;\n }\n try {\n\n // Handle commands\n if (text === \"/settings\") {\n this.showSettingsSelector();\n this.editor.setText(\"\");\n return;\n }\n if (text === \"/fast\") {\n this.editor.setText(\"\");\n this.showFastModeSelector();\n return;\n }\n if (text === \"/scoped-models\") {\n this.editor.setText(\"\");\n await this.showModelsSelector();\n return;\n }\n if (text === \"/model\" || text.startsWith(\"/model \")) {\n const searchTerm = text.startsWith(\"/model \")\n ? text.slice(7).trim()\n : undefined;\n this.editor.setText(\"\");\n await this.handleModelCommand(searchTerm);\n return;\n }\n if (text === \"/export\" || text.startsWith(\"/export \")) {\n await this.handleExportCommand(text);\n this.editor.setText(\"\");\n return;\n }\n if (text === \"/import\" || text.startsWith(\"/import \")) {\n await this.handleImportCommand(text);\n this.editor.setText(\"\");\n return;\n }\n if (text === \"/share\") {\n await this.handleShareCommand();\n this.editor.setText(\"\");\n return;\n }\n if (text === \"/copy\") {\n await this.handleCopyCommand();\n this.editor.setText(\"\");\n return;\n }\n if (text === \"/name\" || text.startsWith(\"/name \")) {\n this.handleNameCommand(text);\n this.editor.setText(\"\");\n return;\n }\n if (text === \"/session\") {\n this.handleSessionCommand();\n this.editor.setText(\"\");\n return;\n }\n if (text === \"/changelog\") {\n this.handleChangelogCommand();\n this.editor.setText(\"\");\n return;\n }\n if (text === \"/atomic\" || text.startsWith(\"/atomic \")) {\n this.editor.setText(\"\");\n await this.session.prompt(text);\n return;\n }\n if (text === \"/hotkeys\") {\n this.handleHotkeysCommand();\n this.editor.setText(\"\");\n return;\n }\n if (text === \"/fork\") {\n this.showUserMessageSelector();\n this.editor.setText(\"\");\n return;\n }\n if (text === \"/clone\") {\n this.editor.setText(\"\");\n await this.handleCloneCommand();\n return;\n }\n if (text === \"/tree\") {\n this.showTreeSelector();\n this.editor.setText(\"\");\n return;\n }\n if (text === \"/trust\") {\n this.showTrustSelector();\n this.editor.setText(\"\");\n return;\n }\n if (text === \"/login\") {\n this.showOAuthSelector(\"login\");\n this.editor.setText(\"\");\n return;\n }\n if (text === \"/logout\") {\n this.showOAuthSelector(\"logout\");\n this.editor.setText(\"\");\n return;\n }\n if (text === \"/new\") {\n this.editor.setText(\"\");\n await this.handleClearCommand();\n return;\n }\n if (/^\\/compact(?:\\s|$)/.test(text)) {\n this.editor.setText(\"\");\n if (text !== \"/compact\") {\n this.showWarning(\"Usage: /compact\");\n return;\n }\n await this.handleCompactCommand();\n return;\n }\n if (text === \"/reload\") {\n this.editor.setText(\"\");\n await this.handleReloadCommand();\n return;\n }\n if (text === \"/debug\") {\n this.handleDebugCommand();\n this.editor.setText(\"\");\n return;\n }\n if (text === \"/arminsayshi\") {\n this.handleArminSaysHi();\n this.editor.setText(\"\");\n return;\n }\n if (text === \"/dementedelves\") {\n this.handleDementedDelves();\n this.editor.setText(\"\");\n return;\n }\n if (text === \"/resume\") {\n this.showSessionSelector();\n this.editor.setText(\"\");\n return;\n }\n if (text === \"/quit\" || text === \"/exit\") {\n this.editor.setText(\"\");\n await this.shutdown();\n return;\n }\n\n // Handle bash command (! for normal, !! for excluded from context)\n if (text.startsWith(\"!\")) {\n const isExcluded = text.startsWith(\"!!\");\n const command = isExcluded\n ? text.slice(2).trim()\n : text.slice(1).trim();\n if (command) {\n if (this.session.isBashRunning) {\n this.showWarning(\n \"A bash command is already running. esc cancel first.\",\n );\n this.editor.setText(text);\n return;\n }\n this.editor.addToHistory?.(text);\n await this.handleBashCommand(command, isExcluded);\n this.isBashMode = false;\n this.updateEditorBorderColor();\n return;\n }\n }\n\n // Queue input during compaction (extension commands execute immediately)\n if (this.session.isCompacting) {\n if (this.isExtensionCommand(text)) {\n this.editor.addToHistory?.(text);\n this.editor.setText(\"\");\n await this.session.prompt(text);\n } else {\n this.queueCompactionMessage(text, \"steer\");\n }\n return;\n }\n\n // If streaming, use prompt() with steer behavior\n // This handles extension commands (execute immediately), prompt template expansion, and queueing\n if (this.session.isStreaming) {\n this.editor.addToHistory?.(text);\n this.editor.setText(\"\");\n await this.session.prompt(text, { streamingBehavior: \"steer\" });\n this.updatePendingMessagesDisplay();\n this.ui.requestRender();\n return;\n }\n\n // Normal message submission\n // First, move any pending bash components to chat\n this.flushPendingBashComponents();\n\n if (this.onInputCallback) {\n if (!text.startsWith(\"/\")) {\n this.renderDeferredUserInput(text);\n }\n this.onInputCallback(text);\n } else {\n this.pendingUserInputs.push(text);\n }\n this.editor.addToHistory?.(text);\n } finally {\n this.advanceStartupInputReplay?.(text);\n }\n };\n };\n"]}
|
|
@@ -5,10 +5,15 @@
|
|
|
5
5
|
import "./interactive-mode-surface.ts";
|
|
6
6
|
import { type AssistantMessage, type AutocompleteProvider, type EditorComponent, type Component, type LoaderIndicatorOptions, type AgentSession, type AgentSessionRuntime, type AutocompleteProviderFactory, type EditorFactory, type HostCustomUiStateListener, Container, Loader, Spacer, Text, TUI, FooterDataProvider, KeybindingsManager, AssistantMessageComponent, BashExecutionComponent, CountdownTimer, CustomEditor, ExtensionEditorComponent, ExtensionInputComponent, ExtensionSelectorComponent, FooterComponent, UsageMeterComponent, ToolExecutionComponent, InteractiveThemeController } from "./interactive-mode-deps.ts";
|
|
7
7
|
import type { CompactionQueuedMessage, InteractiveModeOptions } from "./interactive-mode-types.ts";
|
|
8
|
+
import type { EarlyInputSnapshot } from "../../main-early-input.ts";
|
|
9
|
+
export declare function seedStartupInput(pendingUserInputs: string[], editor: {
|
|
10
|
+
setText(text: string): void;
|
|
11
|
+
}, startupInput: EarlyInputSnapshot | undefined, startupReplayInputs?: string[], setStartupDraftText?: (text: string) => void, setStartupReplayActiveInput?: (text: string) => void): void;
|
|
8
12
|
export declare class InteractiveModeBase {
|
|
9
13
|
runtimeHost: AgentSessionRuntime;
|
|
10
14
|
ui: TUI;
|
|
11
15
|
chatContainer: Container;
|
|
16
|
+
startupNoticesContainer: Container;
|
|
12
17
|
pendingMessagesContainer: Container;
|
|
13
18
|
statusContainer: Container;
|
|
14
19
|
defaultEditor: CustomEditor;
|
|
@@ -28,6 +33,12 @@ export declare class InteractiveModeBase {
|
|
|
28
33
|
copilotCatalogInFlight?: Promise<void>;
|
|
29
34
|
onInputCallback?: (text: string) => void;
|
|
30
35
|
pendingUserInputs: string[];
|
|
36
|
+
startupReplayInputs: string[];
|
|
37
|
+
startupReplayActiveInput: string | undefined;
|
|
38
|
+
startupDraftText: string | undefined;
|
|
39
|
+
startupCookedInputRecovered: boolean;
|
|
40
|
+
deferredRenderedUserInputs: string[];
|
|
41
|
+
deferredRenderedUserInputComponents: Map<string, Component[][]>;
|
|
31
42
|
loadingAnimation: Loader | undefined;
|
|
32
43
|
workingMessage: string | undefined;
|
|
33
44
|
workingVisible: boolean;
|
|
@@ -61,11 +72,14 @@ export declare class InteractiveModeBase {
|
|
|
61
72
|
autoCompactionLoader: Loader | undefined;
|
|
62
73
|
autoCompactionEscapeHandler?: () => void;
|
|
63
74
|
retryLoader: Loader | undefined;
|
|
75
|
+
fallbackLoader: Loader | undefined;
|
|
64
76
|
retryCountdown: CountdownTimer | undefined;
|
|
65
77
|
retryEscapeHandler?: () => void;
|
|
66
78
|
compactionQueuedMessages: CompactionQueuedMessage[];
|
|
67
79
|
deferredStartupPending: boolean;
|
|
68
80
|
deferredStartupPromise: Promise<void> | undefined;
|
|
81
|
+
deferLoadedResourcesDisclosureUntilAgentEnd: boolean;
|
|
82
|
+
pendingLoadedResourcesDisclosure: boolean;
|
|
69
83
|
shutdownRequested: boolean;
|
|
70
84
|
extensionSelector: ExtensionSelectorComponent | undefined;
|
|
71
85
|
extensionInput: ExtensionInputComponent | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactive-mode-base.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-mode-base.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAoB,+BAA+B,CAAC;AACpD,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,oBAAoB,EAAE,KAAK,eAAe,EAAE,KAAK,SAAS,EAAE,KAAK,sBAAsB,EAAE,KAAK,YAAY,EAAE,KAAK,mBAAmB,EAAE,KAAK,2BAA2B,EAAE,KAAK,aAAa,EAAE,KAAK,yBAAyB,EAAE,SAAS,EAAE,MAAM,EAAmB,MAAM,EAAkB,IAAI,EAAE,GAAG,EAAW,kBAAkB,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,cAAc,EAAE,YAAY,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,0BAA0B,EAAE,eAAe,EAAE,mBAAmB,EAAE,sBAAsB,EAAuC,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AAC3rB,OAAO,KAAK,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAEnG,qBAAa,mBAAmB;IAE9B,WAAW,EAAE,mBAAmB,CAAC;IAGjC,EAAE,EAAE,GAAG,CAAC;IAGR,aAAa,EAAE,SAAS,CAAC;IAGzB,wBAAwB,EAAE,SAAS,CAAC;IAGpC,eAAe,EAAE,SAAS,CAAC;IAG3B,aAAa,EAAE,YAAY,CAAC;IAG5B,MAAM,EAAE,eAAe,CAAC;IAGxB,sBAAsB,EAAE,aAAa,GAAG,SAAS,CAAC;IAGlD,oBAAoB,EAAE,oBAAoB,GAAG,SAAS,CAAC;IAGvD,4BAA4B,EAAE,2BAA2B,EAAE,CAAM;IAGjE,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAG3B,eAAe,EAAE,SAAS,CAAC;IAG3B,MAAM,EAAE,eAAe,CAAC;IAGxB,UAAU,EAAE,mBAAmB,CAAC;IAGhC,kBAAkB,EAAE,kBAAkB,CAAC;IAIvC,WAAW,EAAE,kBAAkB,CAAC;IAGhC,OAAO,EAAE,MAAM,CAAC;IAGhB,aAAa,UAAS;IAItB,qBAAqB,UAAS;IAG9B,sBAAsB,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAGvC,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAGzC,iBAAiB,EAAE,MAAM,EAAE,CAAM;IAGjC,gBAAgB,EAAE,MAAM,GAAG,SAAS,CAAa;IAGjD,cAAc,EAAE,MAAM,GAAG,SAAS,CAAa;IAG/C,cAAc,UAAQ;IAGtB,uBAAuB,EAAE,sBAAsB,GAAG,SAAS,CAC/C;IAGZ,QAAQ,CAAC,qBAAqB,gBAAgB;IAG9C,QAAQ,CAAC,0BAA0B,iBAAiB;IAGpD,mBAAmB,SAAmC;IAItD,cAAc,SAAK;IAGnB,cAAc,SAAK;IAGnB,iBAAiB,EAAE,MAAM,GAAG,SAAS,CAAa;IAElD,mBAAmB,UAAS;IAE5B,iCAAiC,UAAS;IAE1C,qBAAqB,UAAS;IAE9B,gCAAgC,UAAS;IAEzC,kCAAkC,EAAE,SAAS,EAAE,CAAM;IAErD,oBAAoB,EAAE,MAAM,GAAG,SAAS,CAAC;IAKzC,gBAAgB,EAAE,MAAM,GAAG,SAAS,CAAa;IAGjD,cAAc,EAAE,IAAI,GAAG,SAAS,CAAa;IAK7C,kBAAkB,EAAE,yBAAyB,GAAG,SAAS,CAAa;IAGtE,gBAAgB,EAAE,gBAAgB,GAAG,SAAS,CAAa;IAK3D,YAAY,sCAA6C;IAKzD,kBAAkB,UAAS;IAK3B,iBAAiB,UAAS;IAC1B,SAAS,EAAE,CAAC,GAAG,CAAC,CAAK;IAKrB,aAAa,sBAA6B;IAK1C,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IAGzB,qBAAqB,EAAE,KAAK,CAAC,MAAM,IAAI,CAAC,CAAM;IAK9C,UAAU,UAAS;IAKnB,aAAa,EAAE,sBAAsB,GAAG,SAAS,CAAa;IAK9D,qBAAqB,EAAE,sBAAsB,EAAE,CAAM;IAKrD,oBAAoB,EAAE,MAAM,GAAG,SAAS,CAAa;IAGrD,2BAA2B,CAAC,EAAE,MAAM,IAAI,CAAC;IAKzC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAa;IAG5C,cAAc,EAAE,cAAc,GAAG,SAAS,CAAa;IAGvD,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAC;IAKhC,wBAAwB,EAAE,uBAAuB,EAAE,CAAM;IAKzD,sBAAsB,UAAS;IAG/B,sBAAsB,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS,CAAa;IAK9D,iBAAiB,UAAS;IAK1B,iBAAiB,EAAE,0BAA0B,GAAG,SAAS,CAAa;IAGtE,cAAc,EAAE,uBAAuB,GAAG,SAAS,CAAa;IAGhE,eAAe,EAAE,wBAAwB,GAAG,SAAS,CAAa;IAGlE,mCAAmC,YAAiB,IAAI,EAAI;IAG5D,2BAA2B,SAAK;IAGhC,gCAAgC,SAAK;IAGrC,0BAA0B,EAAE,SAAS,GAAG,SAAS,CAAa;IAG9D,0BAA0B,iCAAwC;IAGlE,eAAe,EAAE,0BAA0B,CAAC;IAK5C,qBAAqB;oBAEO,IAAI;OAC5B;IAGJ,qBAAqB;oBAEO,IAAI;OAC5B;IAGJ,oBAAoB,EAAG,SAAS,CAAC;IAGjC,oBAAoB,EAAG,SAAS,CAAC;IAKjC,YAAY,EAAE,CAAC,SAAS,GAAG;QAAE,OAAO,CAAC,IAAI,IAAI,CAAA;KAAE,CAAC,GAAG,SAAS,CAChD;IAKZ,eAAe,EAAE,SAAS,CAAC;IAK3B,aAAa,EAAE,SAAS,GAAG,SAAS,CAAa;IAKjD,YAAY,EAAE,CAAC,SAAS,GAAG;QAAE,OAAO,CAAC,IAAI,IAAI,CAAA;KAAE,CAAC,GAAG,SAAS,CAChD;IAKZ,IAAI,OAAO,IAAI,YAAY,CAE1B;IAGD,IAAI,KAAK,kDAER;IAGD,IAAI,cAAc,wDAEjB;IAGD,IAAI,eAAe,6CAElB;IAIO,OAAO,EAAE,sBAAsB,CAAC;IAIxC,YACE,WAAW,EAAE,mBAAmB,EAChC,OAAO,GAAE,sBAA2B,EA4DrC;IAKD,MAAM,CAAC,QAAQ,CAAC,gBAAgB,MAAM;IAItC;;;;OAIG;IACH,cAAc,UAAS;CACxB","sourcesContent":["/**\n * Shared state and constructor wiring for interactive mode.\n * Responsibility-specific behavior is installed by sibling modules.\n */\nimport type {} from \"./interactive-mode-surface.ts\";\nimport { type AssistantMessage, type AutocompleteProvider, type EditorComponent, type Component, type LoaderIndicatorOptions, type AgentSession, type AgentSessionRuntime, type AutocompleteProviderFactory, type EditorFactory, type HostCustomUiStateListener, Container, Loader, ProcessTerminal, Spacer, setKeybindings, Text, TUI, VERSION, FooterDataProvider, KeybindingsManager, AssistantMessageComponent, BashExecutionComponent, CountdownTimer, CustomEditor, ExtensionEditorComponent, ExtensionInputComponent, ExtensionSelectorComponent, FooterComponent, UsageMeterComponent, ToolExecutionComponent, getEditorTheme, setRegisteredThemes, InteractiveThemeController } from \"./interactive-mode-deps.ts\";\nimport type { CompactionQueuedMessage, InteractiveModeOptions } from \"./interactive-mode-types.ts\";\n\nexport class InteractiveModeBase {\n\n runtimeHost: AgentSessionRuntime;\n\n\n ui: TUI;\n\n\n chatContainer: Container;\n\n\n pendingMessagesContainer: Container;\n\n\n statusContainer: Container;\n\n\n defaultEditor: CustomEditor;\n\n\n editor: EditorComponent;\n\n\n editorComponentFactory: EditorFactory | undefined;\n\n\n autocompleteProvider: AutocompleteProvider | undefined;\n\n\n autocompleteProviderWrappers: AutocompleteProviderFactory[] = [];\n\n\n fdPath: string | undefined;\n\n\n editorContainer: Container;\n\n\n footer: FooterComponent;\n\n\n usageMeter: UsageMeterComponent;\n\n\n footerDataProvider: FooterDataProvider;\n\n\n // Stored so the same manager can be injected into custom editors, selectors, and extension UI.\n keybindings: KeybindingsManager;\n\n\n version: string;\n\n\n isInitialized = false;\n\n\n // GitHub Copilot CAPI context-window catalog load state (gated on the Copilot provider).\n copilotCatalogApplied = false;\n\n\n copilotCatalogInFlight?: Promise<void>;\n\n\n onInputCallback?: (text: string) => void;\n\n\n pendingUserInputs: string[] = [];\n\n\n loadingAnimation: Loader | undefined = undefined;\n\n\n workingMessage: string | undefined = undefined;\n\n\n workingVisible = true;\n\n\n workingIndicatorOptions: LoaderIndicatorOptions | undefined =\n undefined;\n\n\n readonly defaultWorkingMessage = \"Working...\";\n\n\n readonly defaultHiddenThinkingLabel = \"Thinking...\";\n\n\n hiddenThinkingLabel = this.defaultHiddenThinkingLabel;\n\n\n\n lastSigintTime = 0;\n\n\n lastEscapeTime = 0;\n\n\n changelogMarkdown: string | undefined = undefined;\n\n startupNoticesShown = false;\n\n anthropicSubscriptionWarningShown = false;\n\n firstRunNoticeVisible = false;\n\n hadLastChangelogVersionAtStartup = false;\n\n firstRunOnboardingNoticeComponents: Component[] = [];\n\n autoTrustOnReloadCwd: string | undefined;\n\n\n\n // Status line tracking (for mutating immediately-sequential status updates)\n lastStatusSpacer: Spacer | undefined = undefined;\n\n\n lastStatusText: Text | undefined = undefined;\n\n\n\n // Streaming message tracking\n streamingComponent: AssistantMessageComponent | undefined = undefined;\n\n\n streamingMessage: AssistantMessage | undefined = undefined;\n\n\n\n // Tool execution tracking: toolCallId -> component\n pendingTools = new Map<string, ToolExecutionComponent>();\n\n\n\n // Tool output expansion state\n toolOutputExpanded = false;\n\n\n\n // Thinking block visibility state\n hideThinkingBlock = false;\n outputPad: 0 | 1 = 1;\n\n\n\n // Skill commands: command name -> skill file path\n skillCommands = new Map<string, string>();\n\n\n\n // Agent subscription unsubscribe function\n unsubscribe?: () => void;\n\n\n signalCleanupHandlers: Array<() => void> = [];\n\n\n\n // Track if editor is in bash mode (text starts with !)\n isBashMode = false;\n\n\n\n // Track current bash execution component\n bashComponent: BashExecutionComponent | undefined = undefined;\n\n\n\n // Track pending bash components (shown in pending area, moved to chat on submit)\n pendingBashComponents: BashExecutionComponent[] = [];\n\n\n\n // Auto-compaction state\n autoCompactionLoader: Loader | undefined = undefined;\n\n\n autoCompactionEscapeHandler?: () => void;\n\n\n\n // Auto-retry state\n retryLoader: Loader | undefined = undefined;\n\n\n retryCountdown: CountdownTimer | undefined = undefined;\n\n\n retryEscapeHandler?: () => void;\n\n\n\n // Messages queued while compaction is running\n compactionQueuedMessages: CompactionQueuedMessage[] = [];\n\n\n\n // Deferred extension load state (first paint happens before extensions load)\n deferredStartupPending = false;\n\n\n deferredStartupPromise: Promise<void> | undefined = undefined;\n\n\n\n // Shutdown state\n shutdownRequested = false;\n\n\n\n // Extension UI state\n extensionSelector: ExtensionSelectorComponent | undefined = undefined;\n\n\n extensionInput: ExtensionInputComponent | undefined = undefined;\n\n\n extensionEditor: ExtensionEditorComponent | undefined = undefined;\n\n\n extensionTerminalInputUnsubscribers = new Set<() => void>();\n\n\n blockingInlineCustomUiDepth = 0;\n\n\n deferredInlineCustomUiFocusDepth = 0;\n\n\n pendingInlineCustomUiFocus: Component | undefined = undefined;\n\n\n hostCustomUiStateListeners = new Set<HostCustomUiStateListener>();\n\n\n themeController: InteractiveThemeController;\n\n\n\n // Extension widgets (components rendered above/below the editor)\n extensionWidgetsAbove = new Map<\n string,\n Component & { dispose?(): void }\n >();\n\n\n extensionWidgetsBelow = new Map<\n string,\n Component & { dispose?(): void }\n >();\n\n\n widgetContainerAbove!: Container;\n\n\n widgetContainerBelow!: Container;\n\n\n\n // Custom footer from extension (undefined = use built-in footer)\n customFooter: (Component & { dispose?(): void }) | undefined =\n undefined;\n\n\n\n // Header container that holds the built-in or custom header\n headerContainer: Container;\n\n\n\n // Built-in header (logo + keybinding hints + changelog)\n builtInHeader: Component | undefined = undefined;\n\n\n\n // Custom header from extension (undefined = use built-in header)\n customHeader: (Component & { dispose?(): void }) | undefined =\n undefined;\n\n\n\n // Convenience accessors\n get session(): AgentSession {\n return this.runtimeHost.session;\n }\n\n\n get agent() {\n return this.session.agent;\n }\n\n\n get sessionManager() {\n return this.session.sessionManager;\n }\n\n\n get settingsManager() {\n return this.session.settingsManager;\n }\n\n\n\n declare options: InteractiveModeOptions;\n\n\n\n constructor(\n runtimeHost: AgentSessionRuntime,\n options: InteractiveModeOptions = {},\n ) {\n this.options = options;\n this.deferredStartupPending = Boolean(options.deferredExtensionLoad);\n this.autoTrustOnReloadCwd = options.autoTrustOnReloadCwd;\n this.runtimeHost = runtimeHost;\n this.runtimeHost.setBeforeSessionInvalidate(() => {\n this.resetExtensionUI();\n });\n this.runtimeHost.setRebindSession(async () => {\n await this.rebindCurrentSession();\n });\n this.version = VERSION;\n this.ui = new TUI(\n new ProcessTerminal(),\n this.settingsManager.getShowHardwareCursor(),\n );\n this.ui.setClearOnShrink(this.settingsManager.getClearOnShrink());\n this.headerContainer = new Container();\n this.chatContainer = new Container();\n this.pendingMessagesContainer = new Container();\n this.statusContainer = new Container();\n this.widgetContainerAbove = new Container();\n this.widgetContainerBelow = new Container();\n this.keybindings = KeybindingsManager.create();\n setKeybindings(this.keybindings);\n const editorPaddingX = this.settingsManager.getEditorPaddingX();\n const autocompleteMaxVisible =\n this.settingsManager.getAutocompleteMaxVisible();\n this.defaultEditor = new CustomEditor(\n this.ui,\n getEditorTheme(),\n this.keybindings,\n {\n paddingX: editorPaddingX,\n autocompleteMaxVisible,\n },\n );\n this.editor = this.defaultEditor;\n this.editorContainer = new Container();\n this.editorContainer.addChild(this.editor as Component);\n this.footerDataProvider = new FooterDataProvider(\n this.sessionManager.getCwd(),\n );\n this.footer = new FooterComponent(this.session, this.footerDataProvider);\n this.usageMeter = new UsageMeterComponent(this.session);\n this.usageMeter.setAutoCompactEnabled(this.session.autoCompactionEnabled);\n\n // Load hide thinking block setting\n this.hideThinkingBlock = this.settingsManager.getHideThinkingBlock();\n this.outputPad = this.settingsManager.getOutputPad();\n\n // Register themes from resource loader and initialize\n setRegisteredThemes(this.session.resourceLoader.getThemes().themes);\n this.themeController = new InteractiveThemeController(\n this.ui,\n this.settingsManager,\n (message) => this.showError(message),\n () => this.updateEditorBorderColor(),\n );\n }\n\n\n\n // Maximum total widget lines to prevent viewport overflow\n static readonly MAX_WIDGET_LINES = 10;\n\n\n\n /**\n * Gracefully shutdown the agent.\n * Stops the TUI before emitting shutdown events so extension UI cleanup cannot\n * repaint the final frame while the process is exiting.\n */\n isShuttingDown = false;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"interactive-mode-base.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-mode-base.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Shared state and constructor wiring for interactive mode.\n * Responsibility-specific behavior is installed by sibling modules.\n */\nimport type {} from \"./interactive-mode-surface.ts\";\nimport { type AssistantMessage, type AutocompleteProvider, type EditorComponent, type Component, type LoaderIndicatorOptions, type AgentSession, type AgentSessionRuntime, type AutocompleteProviderFactory, type EditorFactory, type HostCustomUiStateListener, Container, Loader, ProcessTerminal, Spacer, setKeybindings, Text, TUI, VERSION, FooterDataProvider, KeybindingsManager, AssistantMessageComponent, BashExecutionComponent, CountdownTimer, CustomEditor, ExtensionEditorComponent, ExtensionInputComponent, ExtensionSelectorComponent, FooterComponent, UsageMeterComponent, ToolExecutionComponent, getEditorTheme, setRegisteredThemes, InteractiveThemeController } from \"./interactive-mode-deps.ts\";\nimport type { CompactionQueuedMessage, InteractiveModeOptions } from \"./interactive-mode-types.ts\";\nimport type { EarlyInputSnapshot } from \"../../main-early-input.ts\";\n\nfunction isCommandLikeStartupInput(text: string): boolean {\n const trimmed = text.trimStart();\n return trimmed.startsWith(\"/\") || trimmed.startsWith(\"!\");\n}\n\nexport function seedStartupInput(\n pendingUserInputs: string[],\n editor: { setText(text: string): void },\n startupInput: EarlyInputSnapshot | undefined,\n startupReplayInputs: string[] = [],\n setStartupDraftText?: (text: string) => void,\n setStartupReplayActiveInput?: (text: string) => void,\n): void {\n if (!startupInput) return;\n let commandReplayStarted = false;\n for (const submission of startupInput.submissions) {\n if (commandReplayStarted) {\n startupReplayInputs.push(submission);\n } else if (isCommandLikeStartupInput(submission)) {\n const commandText = submission.trim();\n commandReplayStarted = true;\n editor.setText(commandText);\n setStartupReplayActiveInput?.(commandText);\n } else {\n pendingUserInputs.push(submission);\n }\n }\n if (startupInput.text.length === 0) return;\n if (commandReplayStarted) {\n setStartupDraftText?.(startupInput.text);\n } else {\n editor.setText(startupInput.text);\n }\n}\n\nexport class InteractiveModeBase {\n\n runtimeHost: AgentSessionRuntime;\n\n\n ui: TUI;\n\n\n chatContainer: Container;\n\n startupNoticesContainer: Container;\n\n\n pendingMessagesContainer: Container;\n\n\n statusContainer: Container;\n\n\n defaultEditor: CustomEditor;\n\n\n editor: EditorComponent;\n\n\n editorComponentFactory: EditorFactory | undefined;\n\n\n autocompleteProvider: AutocompleteProvider | undefined;\n\n\n autocompleteProviderWrappers: AutocompleteProviderFactory[] = [];\n\n\n fdPath: string | undefined;\n\n\n editorContainer: Container;\n\n\n footer: FooterComponent;\n\n\n usageMeter: UsageMeterComponent;\n\n\n footerDataProvider: FooterDataProvider;\n\n\n // Stored so the same manager can be injected into custom editors, selectors, and extension UI.\n keybindings: KeybindingsManager;\n\n\n version: string;\n\n\n isInitialized = false;\n\n\n // GitHub Copilot CAPI context-window catalog load state (gated on the Copilot provider).\n copilotCatalogApplied = false;\n\n\n copilotCatalogInFlight?: Promise<void>;\n\n\n onInputCallback?: (text: string) => void;\n\n\n pendingUserInputs: string[] = [];\n\n startupReplayInputs: string[] = [];\n\n\n startupReplayActiveInput: string | undefined = undefined;\n\n\n startupDraftText: string | undefined = undefined;\n\n startupCookedInputRecovered = false;\n\n\n deferredRenderedUserInputs: string[] = [];\n\n\n deferredRenderedUserInputComponents = new Map<string, Component[][]>();\n\n\n loadingAnimation: Loader | undefined = undefined;\n\n\n workingMessage: string | undefined = undefined;\n\n\n workingVisible = true;\n\n\n workingIndicatorOptions: LoaderIndicatorOptions | undefined =\n undefined;\n\n\n readonly defaultWorkingMessage = \"Working...\";\n\n\n readonly defaultHiddenThinkingLabel = \"Thinking...\";\n\n\n hiddenThinkingLabel = this.defaultHiddenThinkingLabel;\n\n\n\n lastSigintTime = 0;\n\n\n lastEscapeTime = 0;\n\n\n changelogMarkdown: string | undefined = undefined;\n\n startupNoticesShown = false;\n\n anthropicSubscriptionWarningShown = false;\n\n firstRunNoticeVisible = false;\n\n hadLastChangelogVersionAtStartup = false;\n\n firstRunOnboardingNoticeComponents: Component[] = [];\n\n autoTrustOnReloadCwd: string | undefined;\n\n\n\n // Status line tracking (for mutating immediately-sequential status updates)\n lastStatusSpacer: Spacer | undefined = undefined;\n\n\n lastStatusText: Text | undefined = undefined;\n\n\n\n // Streaming message tracking\n streamingComponent: AssistantMessageComponent | undefined = undefined;\n\n\n streamingMessage: AssistantMessage | undefined = undefined;\n\n\n\n // Tool execution tracking: toolCallId -> component\n pendingTools = new Map<string, ToolExecutionComponent>();\n\n\n\n // Tool output expansion state\n toolOutputExpanded = false;\n\n\n\n // Thinking block visibility state\n hideThinkingBlock = false;\n outputPad: 0 | 1 = 1;\n\n\n\n // Skill commands: command name -> skill file path\n skillCommands = new Map<string, string>();\n\n\n\n // Agent subscription unsubscribe function\n unsubscribe?: () => void;\n\n\n signalCleanupHandlers: Array<() => void> = [];\n\n\n\n // Track if editor is in bash mode (text starts with !)\n isBashMode = false;\n\n\n\n // Track current bash execution component\n bashComponent: BashExecutionComponent | undefined = undefined;\n\n\n\n // Track pending bash components (shown in pending area, moved to chat on submit)\n pendingBashComponents: BashExecutionComponent[] = [];\n\n\n\n // Auto-compaction state\n autoCompactionLoader: Loader | undefined = undefined;\n\n\n autoCompactionEscapeHandler?: () => void;\n\n\n\n // Auto-retry state\n retryLoader: Loader | undefined = undefined;\n fallbackLoader: Loader | undefined = undefined;\n\n retryCountdown: CountdownTimer | undefined = undefined;\n\n\n retryEscapeHandler?: () => void;\n\n\n\n // Messages queued while compaction is running\n compactionQueuedMessages: CompactionQueuedMessage[] = [];\n\n\n\n // Deferred extension load state (first paint happens before extensions load)\n deferredStartupPending = false;\n\n\n deferredStartupPromise: Promise<void> | undefined = undefined;\n deferLoadedResourcesDisclosureUntilAgentEnd = false;\n\n\n pendingLoadedResourcesDisclosure = false;\n\n\n\n\n\n // Shutdown state\n shutdownRequested = false;\n\n\n\n // Extension UI state\n extensionSelector: ExtensionSelectorComponent | undefined = undefined;\n\n\n extensionInput: ExtensionInputComponent | undefined = undefined;\n\n\n extensionEditor: ExtensionEditorComponent | undefined = undefined;\n\n\n extensionTerminalInputUnsubscribers = new Set<() => void>();\n\n\n blockingInlineCustomUiDepth = 0;\n\n\n deferredInlineCustomUiFocusDepth = 0;\n\n\n pendingInlineCustomUiFocus: Component | undefined = undefined;\n\n\n hostCustomUiStateListeners = new Set<HostCustomUiStateListener>();\n\n\n themeController: InteractiveThemeController;\n\n\n\n // Extension widgets (components rendered above/below the editor)\n extensionWidgetsAbove = new Map<\n string,\n Component & { dispose?(): void }\n >();\n\n\n extensionWidgetsBelow = new Map<\n string,\n Component & { dispose?(): void }\n >();\n\n\n widgetContainerAbove!: Container;\n\n\n widgetContainerBelow!: Container;\n\n\n\n // Custom footer from extension (undefined = use built-in footer)\n customFooter: (Component & { dispose?(): void }) | undefined =\n undefined;\n\n\n\n // Header container that holds the built-in or custom header\n headerContainer: Container;\n\n\n\n // Built-in header (logo + keybinding hints + changelog)\n builtInHeader: Component | undefined = undefined;\n\n\n\n // Custom header from extension (undefined = use built-in header)\n customHeader: (Component & { dispose?(): void }) | undefined =\n undefined;\n\n\n\n // Convenience accessors\n get session(): AgentSession {\n return this.runtimeHost.session;\n }\n\n\n get agent() {\n return this.session.agent;\n }\n\n\n get sessionManager() {\n return this.session.sessionManager;\n }\n\n\n get settingsManager() {\n return this.session.settingsManager;\n }\n\n\n\n declare options: InteractiveModeOptions;\n\n\n\n constructor(\n runtimeHost: AgentSessionRuntime,\n options: InteractiveModeOptions = {},\n ) {\n this.options = options;\n this.deferredStartupPending = Boolean(options.deferredExtensionLoad);\n this.autoTrustOnReloadCwd = options.autoTrustOnReloadCwd;\n this.runtimeHost = runtimeHost;\n this.runtimeHost.setBeforeSessionInvalidate(() => {\n this.resetExtensionUI();\n });\n this.runtimeHost.setRebindSession(async () => {\n await this.rebindCurrentSession();\n });\n this.version = VERSION;\n this.ui = new TUI(\n new ProcessTerminal(),\n this.settingsManager.getShowHardwareCursor(),\n );\n this.ui.setClearOnShrink(this.settingsManager.getClearOnShrink());\n this.headerContainer = new Container();\n this.chatContainer = new Container();\n this.startupNoticesContainer = new Container();\n this.pendingMessagesContainer = new Container();\n this.statusContainer = new Container();\n this.widgetContainerAbove = new Container();\n this.widgetContainerBelow = new Container();\n this.keybindings = KeybindingsManager.create();\n setKeybindings(this.keybindings);\n const editorPaddingX = this.settingsManager.getEditorPaddingX();\n const autocompleteMaxVisible =\n this.settingsManager.getAutocompleteMaxVisible();\n this.defaultEditor = new CustomEditor(\n this.ui,\n getEditorTheme(),\n this.keybindings,\n {\n paddingX: editorPaddingX,\n autocompleteMaxVisible,\n },\n );\n\n this.editor = this.defaultEditor;\n this.editorContainer = new Container();\n this.editorContainer.addChild(this.editor as Component);\n this.footerDataProvider = new FooterDataProvider(\n this.sessionManager.getCwd(),\n );\n this.footer = new FooterComponent(this.session, this.footerDataProvider);\n this.usageMeter = new UsageMeterComponent(this.session);\n this.usageMeter.setAutoCompactEnabled(this.session.autoCompactionEnabled);\n\n // Load hide thinking block setting\n this.hideThinkingBlock = this.settingsManager.getHideThinkingBlock();\n this.outputPad = this.settingsManager.getOutputPad();\n\n // Register themes from resource loader and initialize\n setRegisteredThemes(this.session.resourceLoader.getThemes().themes);\n this.themeController = new InteractiveThemeController(\n this.ui,\n this.settingsManager,\n (message) => this.showError(message),\n () => this.updateEditorBorderColor(),\n );\n }\n\n\n\n // Maximum total widget lines to prevent viewport overflow\n static readonly MAX_WIDGET_LINES = 10;\n\n\n\n /**\n * Gracefully shutdown the agent.\n * Stops the TUI before emitting shutdown events so extension UI cleanup cannot\n * repaint the final frame while the process is exiting.\n */\n isShuttingDown = false;\n}\n"]}
|
|
@@ -1,4 +1,35 @@
|
|
|
1
1
|
import { Container, ProcessTerminal, setKeybindings, TUI, VERSION, FooterDataProvider, KeybindingsManager, CustomEditor, FooterComponent, UsageMeterComponent, getEditorTheme, setRegisteredThemes, InteractiveThemeController } from "./interactive-mode-deps.js";
|
|
2
|
+
function isCommandLikeStartupInput(text) {
|
|
3
|
+
const trimmed = text.trimStart();
|
|
4
|
+
return trimmed.startsWith("/") || trimmed.startsWith("!");
|
|
5
|
+
}
|
|
6
|
+
export function seedStartupInput(pendingUserInputs, editor, startupInput, startupReplayInputs = [], setStartupDraftText, setStartupReplayActiveInput) {
|
|
7
|
+
if (!startupInput)
|
|
8
|
+
return;
|
|
9
|
+
let commandReplayStarted = false;
|
|
10
|
+
for (const submission of startupInput.submissions) {
|
|
11
|
+
if (commandReplayStarted) {
|
|
12
|
+
startupReplayInputs.push(submission);
|
|
13
|
+
}
|
|
14
|
+
else if (isCommandLikeStartupInput(submission)) {
|
|
15
|
+
const commandText = submission.trim();
|
|
16
|
+
commandReplayStarted = true;
|
|
17
|
+
editor.setText(commandText);
|
|
18
|
+
setStartupReplayActiveInput?.(commandText);
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
pendingUserInputs.push(submission);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
if (startupInput.text.length === 0)
|
|
25
|
+
return;
|
|
26
|
+
if (commandReplayStarted) {
|
|
27
|
+
setStartupDraftText?.(startupInput.text);
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
editor.setText(startupInput.text);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
2
33
|
export class InteractiveModeBase {
|
|
3
34
|
// Convenience accessors
|
|
4
35
|
get session() {
|
|
@@ -19,6 +50,12 @@ export class InteractiveModeBase {
|
|
|
19
50
|
// GitHub Copilot CAPI context-window catalog load state (gated on the Copilot provider).
|
|
20
51
|
this.copilotCatalogApplied = false;
|
|
21
52
|
this.pendingUserInputs = [];
|
|
53
|
+
this.startupReplayInputs = [];
|
|
54
|
+
this.startupReplayActiveInput = undefined;
|
|
55
|
+
this.startupDraftText = undefined;
|
|
56
|
+
this.startupCookedInputRecovered = false;
|
|
57
|
+
this.deferredRenderedUserInputs = [];
|
|
58
|
+
this.deferredRenderedUserInputComponents = new Map();
|
|
22
59
|
this.loadingAnimation = undefined;
|
|
23
60
|
this.workingMessage = undefined;
|
|
24
61
|
this.workingVisible = true;
|
|
@@ -60,12 +97,15 @@ export class InteractiveModeBase {
|
|
|
60
97
|
this.autoCompactionLoader = undefined;
|
|
61
98
|
// Auto-retry state
|
|
62
99
|
this.retryLoader = undefined;
|
|
100
|
+
this.fallbackLoader = undefined;
|
|
63
101
|
this.retryCountdown = undefined;
|
|
64
102
|
// Messages queued while compaction is running
|
|
65
103
|
this.compactionQueuedMessages = [];
|
|
66
104
|
// Deferred extension load state (first paint happens before extensions load)
|
|
67
105
|
this.deferredStartupPending = false;
|
|
68
106
|
this.deferredStartupPromise = undefined;
|
|
107
|
+
this.deferLoadedResourcesDisclosureUntilAgentEnd = false;
|
|
108
|
+
this.pendingLoadedResourcesDisclosure = false;
|
|
69
109
|
// Shutdown state
|
|
70
110
|
this.shutdownRequested = false;
|
|
71
111
|
// Extension UI state
|
|
@@ -107,6 +147,7 @@ export class InteractiveModeBase {
|
|
|
107
147
|
this.ui.setClearOnShrink(this.settingsManager.getClearOnShrink());
|
|
108
148
|
this.headerContainer = new Container();
|
|
109
149
|
this.chatContainer = new Container();
|
|
150
|
+
this.startupNoticesContainer = new Container();
|
|
110
151
|
this.pendingMessagesContainer = new Container();
|
|
111
152
|
this.statusContainer = new Container();
|
|
112
153
|
this.widgetContainerAbove = new Container();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactive-mode-base.js","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-mode-base.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Shared state and constructor wiring for interactive mode.\n * Responsibility-specific behavior is installed by sibling modules.\n */\nimport type {} from \"./interactive-mode-surface.ts\";\nimport { type AssistantMessage, type AutocompleteProvider, type EditorComponent, type Component, type LoaderIndicatorOptions, type AgentSession, type AgentSessionRuntime, type AutocompleteProviderFactory, type EditorFactory, type HostCustomUiStateListener, Container, Loader, ProcessTerminal, Spacer, setKeybindings, Text, TUI, VERSION, FooterDataProvider, KeybindingsManager, AssistantMessageComponent, BashExecutionComponent, CountdownTimer, CustomEditor, ExtensionEditorComponent, ExtensionInputComponent, ExtensionSelectorComponent, FooterComponent, UsageMeterComponent, ToolExecutionComponent, getEditorTheme, setRegisteredThemes, InteractiveThemeController } from \"./interactive-mode-deps.ts\";\nimport type { CompactionQueuedMessage, InteractiveModeOptions } from \"./interactive-mode-types.ts\";\n\nexport class InteractiveModeBase {\n\n runtimeHost: AgentSessionRuntime;\n\n\n ui: TUI;\n\n\n chatContainer: Container;\n\n\n pendingMessagesContainer: Container;\n\n\n statusContainer: Container;\n\n\n defaultEditor: CustomEditor;\n\n\n editor: EditorComponent;\n\n\n editorComponentFactory: EditorFactory | undefined;\n\n\n autocompleteProvider: AutocompleteProvider | undefined;\n\n\n autocompleteProviderWrappers: AutocompleteProviderFactory[] = [];\n\n\n fdPath: string | undefined;\n\n\n editorContainer: Container;\n\n\n footer: FooterComponent;\n\n\n usageMeter: UsageMeterComponent;\n\n\n footerDataProvider: FooterDataProvider;\n\n\n // Stored so the same manager can be injected into custom editors, selectors, and extension UI.\n keybindings: KeybindingsManager;\n\n\n version: string;\n\n\n isInitialized = false;\n\n\n // GitHub Copilot CAPI context-window catalog load state (gated on the Copilot provider).\n copilotCatalogApplied = false;\n\n\n copilotCatalogInFlight?: Promise<void>;\n\n\n onInputCallback?: (text: string) => void;\n\n\n pendingUserInputs: string[] = [];\n\n\n loadingAnimation: Loader | undefined = undefined;\n\n\n workingMessage: string | undefined = undefined;\n\n\n workingVisible = true;\n\n\n workingIndicatorOptions: LoaderIndicatorOptions | undefined =\n undefined;\n\n\n readonly defaultWorkingMessage = \"Working...\";\n\n\n readonly defaultHiddenThinkingLabel = \"Thinking...\";\n\n\n hiddenThinkingLabel = this.defaultHiddenThinkingLabel;\n\n\n\n lastSigintTime = 0;\n\n\n lastEscapeTime = 0;\n\n\n changelogMarkdown: string | undefined = undefined;\n\n startupNoticesShown = false;\n\n anthropicSubscriptionWarningShown = false;\n\n firstRunNoticeVisible = false;\n\n hadLastChangelogVersionAtStartup = false;\n\n firstRunOnboardingNoticeComponents: Component[] = [];\n\n autoTrustOnReloadCwd: string | undefined;\n\n\n\n // Status line tracking (for mutating immediately-sequential status updates)\n lastStatusSpacer: Spacer | undefined = undefined;\n\n\n lastStatusText: Text | undefined = undefined;\n\n\n\n // Streaming message tracking\n streamingComponent: AssistantMessageComponent | undefined = undefined;\n\n\n streamingMessage: AssistantMessage | undefined = undefined;\n\n\n\n // Tool execution tracking: toolCallId -> component\n pendingTools = new Map<string, ToolExecutionComponent>();\n\n\n\n // Tool output expansion state\n toolOutputExpanded = false;\n\n\n\n // Thinking block visibility state\n hideThinkingBlock = false;\n outputPad: 0 | 1 = 1;\n\n\n\n // Skill commands: command name -> skill file path\n skillCommands = new Map<string, string>();\n\n\n\n // Agent subscription unsubscribe function\n unsubscribe?: () => void;\n\n\n signalCleanupHandlers: Array<() => void> = [];\n\n\n\n // Track if editor is in bash mode (text starts with !)\n isBashMode = false;\n\n\n\n // Track current bash execution component\n bashComponent: BashExecutionComponent | undefined = undefined;\n\n\n\n // Track pending bash components (shown in pending area, moved to chat on submit)\n pendingBashComponents: BashExecutionComponent[] = [];\n\n\n\n // Auto-compaction state\n autoCompactionLoader: Loader | undefined = undefined;\n\n\n autoCompactionEscapeHandler?: () => void;\n\n\n\n // Auto-retry state\n retryLoader: Loader | undefined = undefined;\n\n\n retryCountdown: CountdownTimer | undefined = undefined;\n\n\n retryEscapeHandler?: () => void;\n\n\n\n // Messages queued while compaction is running\n compactionQueuedMessages: CompactionQueuedMessage[] = [];\n\n\n\n // Deferred extension load state (first paint happens before extensions load)\n deferredStartupPending = false;\n\n\n deferredStartupPromise: Promise<void> | undefined = undefined;\n\n\n\n // Shutdown state\n shutdownRequested = false;\n\n\n\n // Extension UI state\n extensionSelector: ExtensionSelectorComponent | undefined = undefined;\n\n\n extensionInput: ExtensionInputComponent | undefined = undefined;\n\n\n extensionEditor: ExtensionEditorComponent | undefined = undefined;\n\n\n extensionTerminalInputUnsubscribers = new Set<() => void>();\n\n\n blockingInlineCustomUiDepth = 0;\n\n\n deferredInlineCustomUiFocusDepth = 0;\n\n\n pendingInlineCustomUiFocus: Component | undefined = undefined;\n\n\n hostCustomUiStateListeners = new Set<HostCustomUiStateListener>();\n\n\n themeController: InteractiveThemeController;\n\n\n\n // Extension widgets (components rendered above/below the editor)\n extensionWidgetsAbove = new Map<\n string,\n Component & { dispose?(): void }\n >();\n\n\n extensionWidgetsBelow = new Map<\n string,\n Component & { dispose?(): void }\n >();\n\n\n widgetContainerAbove!: Container;\n\n\n widgetContainerBelow!: Container;\n\n\n\n // Custom footer from extension (undefined = use built-in footer)\n customFooter: (Component & { dispose?(): void }) | undefined =\n undefined;\n\n\n\n // Header container that holds the built-in or custom header\n headerContainer: Container;\n\n\n\n // Built-in header (logo + keybinding hints + changelog)\n builtInHeader: Component | undefined = undefined;\n\n\n\n // Custom header from extension (undefined = use built-in header)\n customHeader: (Component & { dispose?(): void }) | undefined =\n undefined;\n\n\n\n // Convenience accessors\n get session(): AgentSession {\n return this.runtimeHost.session;\n }\n\n\n get agent() {\n return this.session.agent;\n }\n\n\n get sessionManager() {\n return this.session.sessionManager;\n }\n\n\n get settingsManager() {\n return this.session.settingsManager;\n }\n\n\n\n declare options: InteractiveModeOptions;\n\n\n\n constructor(\n runtimeHost: AgentSessionRuntime,\n options: InteractiveModeOptions = {},\n ) {\n this.options = options;\n this.deferredStartupPending = Boolean(options.deferredExtensionLoad);\n this.autoTrustOnReloadCwd = options.autoTrustOnReloadCwd;\n this.runtimeHost = runtimeHost;\n this.runtimeHost.setBeforeSessionInvalidate(() => {\n this.resetExtensionUI();\n });\n this.runtimeHost.setRebindSession(async () => {\n await this.rebindCurrentSession();\n });\n this.version = VERSION;\n this.ui = new TUI(\n new ProcessTerminal(),\n this.settingsManager.getShowHardwareCursor(),\n );\n this.ui.setClearOnShrink(this.settingsManager.getClearOnShrink());\n this.headerContainer = new Container();\n this.chatContainer = new Container();\n this.pendingMessagesContainer = new Container();\n this.statusContainer = new Container();\n this.widgetContainerAbove = new Container();\n this.widgetContainerBelow = new Container();\n this.keybindings = KeybindingsManager.create();\n setKeybindings(this.keybindings);\n const editorPaddingX = this.settingsManager.getEditorPaddingX();\n const autocompleteMaxVisible =\n this.settingsManager.getAutocompleteMaxVisible();\n this.defaultEditor = new CustomEditor(\n this.ui,\n getEditorTheme(),\n this.keybindings,\n {\n paddingX: editorPaddingX,\n autocompleteMaxVisible,\n },\n );\n this.editor = this.defaultEditor;\n this.editorContainer = new Container();\n this.editorContainer.addChild(this.editor as Component);\n this.footerDataProvider = new FooterDataProvider(\n this.sessionManager.getCwd(),\n );\n this.footer = new FooterComponent(this.session, this.footerDataProvider);\n this.usageMeter = new UsageMeterComponent(this.session);\n this.usageMeter.setAutoCompactEnabled(this.session.autoCompactionEnabled);\n\n // Load hide thinking block setting\n this.hideThinkingBlock = this.settingsManager.getHideThinkingBlock();\n this.outputPad = this.settingsManager.getOutputPad();\n\n // Register themes from resource loader and initialize\n setRegisteredThemes(this.session.resourceLoader.getThemes().themes);\n this.themeController = new InteractiveThemeController(\n this.ui,\n this.settingsManager,\n (message) => this.showError(message),\n () => this.updateEditorBorderColor(),\n );\n }\n\n\n\n // Maximum total widget lines to prevent viewport overflow\n static readonly MAX_WIDGET_LINES = 10;\n\n\n\n /**\n * Gracefully shutdown the agent.\n * Stops the TUI before emitting shutdown events so extension UI cleanup cannot\n * repaint the final frame while the process is exiting.\n */\n isShuttingDown = false;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"interactive-mode-base.js","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-mode-base.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Shared state and constructor wiring for interactive mode.\n * Responsibility-specific behavior is installed by sibling modules.\n */\nimport type {} from \"./interactive-mode-surface.ts\";\nimport { type AssistantMessage, type AutocompleteProvider, type EditorComponent, type Component, type LoaderIndicatorOptions, type AgentSession, type AgentSessionRuntime, type AutocompleteProviderFactory, type EditorFactory, type HostCustomUiStateListener, Container, Loader, ProcessTerminal, Spacer, setKeybindings, Text, TUI, VERSION, FooterDataProvider, KeybindingsManager, AssistantMessageComponent, BashExecutionComponent, CountdownTimer, CustomEditor, ExtensionEditorComponent, ExtensionInputComponent, ExtensionSelectorComponent, FooterComponent, UsageMeterComponent, ToolExecutionComponent, getEditorTheme, setRegisteredThemes, InteractiveThemeController } from \"./interactive-mode-deps.ts\";\nimport type { CompactionQueuedMessage, InteractiveModeOptions } from \"./interactive-mode-types.ts\";\nimport type { EarlyInputSnapshot } from \"../../main-early-input.ts\";\n\nfunction isCommandLikeStartupInput(text: string): boolean {\n const trimmed = text.trimStart();\n return trimmed.startsWith(\"/\") || trimmed.startsWith(\"!\");\n}\n\nexport function seedStartupInput(\n pendingUserInputs: string[],\n editor: { setText(text: string): void },\n startupInput: EarlyInputSnapshot | undefined,\n startupReplayInputs: string[] = [],\n setStartupDraftText?: (text: string) => void,\n setStartupReplayActiveInput?: (text: string) => void,\n): void {\n if (!startupInput) return;\n let commandReplayStarted = false;\n for (const submission of startupInput.submissions) {\n if (commandReplayStarted) {\n startupReplayInputs.push(submission);\n } else if (isCommandLikeStartupInput(submission)) {\n const commandText = submission.trim();\n commandReplayStarted = true;\n editor.setText(commandText);\n setStartupReplayActiveInput?.(commandText);\n } else {\n pendingUserInputs.push(submission);\n }\n }\n if (startupInput.text.length === 0) return;\n if (commandReplayStarted) {\n setStartupDraftText?.(startupInput.text);\n } else {\n editor.setText(startupInput.text);\n }\n}\n\nexport class InteractiveModeBase {\n\n runtimeHost: AgentSessionRuntime;\n\n\n ui: TUI;\n\n\n chatContainer: Container;\n\n startupNoticesContainer: Container;\n\n\n pendingMessagesContainer: Container;\n\n\n statusContainer: Container;\n\n\n defaultEditor: CustomEditor;\n\n\n editor: EditorComponent;\n\n\n editorComponentFactory: EditorFactory | undefined;\n\n\n autocompleteProvider: AutocompleteProvider | undefined;\n\n\n autocompleteProviderWrappers: AutocompleteProviderFactory[] = [];\n\n\n fdPath: string | undefined;\n\n\n editorContainer: Container;\n\n\n footer: FooterComponent;\n\n\n usageMeter: UsageMeterComponent;\n\n\n footerDataProvider: FooterDataProvider;\n\n\n // Stored so the same manager can be injected into custom editors, selectors, and extension UI.\n keybindings: KeybindingsManager;\n\n\n version: string;\n\n\n isInitialized = false;\n\n\n // GitHub Copilot CAPI context-window catalog load state (gated on the Copilot provider).\n copilotCatalogApplied = false;\n\n\n copilotCatalogInFlight?: Promise<void>;\n\n\n onInputCallback?: (text: string) => void;\n\n\n pendingUserInputs: string[] = [];\n\n startupReplayInputs: string[] = [];\n\n\n startupReplayActiveInput: string | undefined = undefined;\n\n\n startupDraftText: string | undefined = undefined;\n\n startupCookedInputRecovered = false;\n\n\n deferredRenderedUserInputs: string[] = [];\n\n\n deferredRenderedUserInputComponents = new Map<string, Component[][]>();\n\n\n loadingAnimation: Loader | undefined = undefined;\n\n\n workingMessage: string | undefined = undefined;\n\n\n workingVisible = true;\n\n\n workingIndicatorOptions: LoaderIndicatorOptions | undefined =\n undefined;\n\n\n readonly defaultWorkingMessage = \"Working...\";\n\n\n readonly defaultHiddenThinkingLabel = \"Thinking...\";\n\n\n hiddenThinkingLabel = this.defaultHiddenThinkingLabel;\n\n\n\n lastSigintTime = 0;\n\n\n lastEscapeTime = 0;\n\n\n changelogMarkdown: string | undefined = undefined;\n\n startupNoticesShown = false;\n\n anthropicSubscriptionWarningShown = false;\n\n firstRunNoticeVisible = false;\n\n hadLastChangelogVersionAtStartup = false;\n\n firstRunOnboardingNoticeComponents: Component[] = [];\n\n autoTrustOnReloadCwd: string | undefined;\n\n\n\n // Status line tracking (for mutating immediately-sequential status updates)\n lastStatusSpacer: Spacer | undefined = undefined;\n\n\n lastStatusText: Text | undefined = undefined;\n\n\n\n // Streaming message tracking\n streamingComponent: AssistantMessageComponent | undefined = undefined;\n\n\n streamingMessage: AssistantMessage | undefined = undefined;\n\n\n\n // Tool execution tracking: toolCallId -> component\n pendingTools = new Map<string, ToolExecutionComponent>();\n\n\n\n // Tool output expansion state\n toolOutputExpanded = false;\n\n\n\n // Thinking block visibility state\n hideThinkingBlock = false;\n outputPad: 0 | 1 = 1;\n\n\n\n // Skill commands: command name -> skill file path\n skillCommands = new Map<string, string>();\n\n\n\n // Agent subscription unsubscribe function\n unsubscribe?: () => void;\n\n\n signalCleanupHandlers: Array<() => void> = [];\n\n\n\n // Track if editor is in bash mode (text starts with !)\n isBashMode = false;\n\n\n\n // Track current bash execution component\n bashComponent: BashExecutionComponent | undefined = undefined;\n\n\n\n // Track pending bash components (shown in pending area, moved to chat on submit)\n pendingBashComponents: BashExecutionComponent[] = [];\n\n\n\n // Auto-compaction state\n autoCompactionLoader: Loader | undefined = undefined;\n\n\n autoCompactionEscapeHandler?: () => void;\n\n\n\n // Auto-retry state\n retryLoader: Loader | undefined = undefined;\n fallbackLoader: Loader | undefined = undefined;\n\n retryCountdown: CountdownTimer | undefined = undefined;\n\n\n retryEscapeHandler?: () => void;\n\n\n\n // Messages queued while compaction is running\n compactionQueuedMessages: CompactionQueuedMessage[] = [];\n\n\n\n // Deferred extension load state (first paint happens before extensions load)\n deferredStartupPending = false;\n\n\n deferredStartupPromise: Promise<void> | undefined = undefined;\n deferLoadedResourcesDisclosureUntilAgentEnd = false;\n\n\n pendingLoadedResourcesDisclosure = false;\n\n\n\n\n\n // Shutdown state\n shutdownRequested = false;\n\n\n\n // Extension UI state\n extensionSelector: ExtensionSelectorComponent | undefined = undefined;\n\n\n extensionInput: ExtensionInputComponent | undefined = undefined;\n\n\n extensionEditor: ExtensionEditorComponent | undefined = undefined;\n\n\n extensionTerminalInputUnsubscribers = new Set<() => void>();\n\n\n blockingInlineCustomUiDepth = 0;\n\n\n deferredInlineCustomUiFocusDepth = 0;\n\n\n pendingInlineCustomUiFocus: Component | undefined = undefined;\n\n\n hostCustomUiStateListeners = new Set<HostCustomUiStateListener>();\n\n\n themeController: InteractiveThemeController;\n\n\n\n // Extension widgets (components rendered above/below the editor)\n extensionWidgetsAbove = new Map<\n string,\n Component & { dispose?(): void }\n >();\n\n\n extensionWidgetsBelow = new Map<\n string,\n Component & { dispose?(): void }\n >();\n\n\n widgetContainerAbove!: Container;\n\n\n widgetContainerBelow!: Container;\n\n\n\n // Custom footer from extension (undefined = use built-in footer)\n customFooter: (Component & { dispose?(): void }) | undefined =\n undefined;\n\n\n\n // Header container that holds the built-in or custom header\n headerContainer: Container;\n\n\n\n // Built-in header (logo + keybinding hints + changelog)\n builtInHeader: Component | undefined = undefined;\n\n\n\n // Custom header from extension (undefined = use built-in header)\n customHeader: (Component & { dispose?(): void }) | undefined =\n undefined;\n\n\n\n // Convenience accessors\n get session(): AgentSession {\n return this.runtimeHost.session;\n }\n\n\n get agent() {\n return this.session.agent;\n }\n\n\n get sessionManager() {\n return this.session.sessionManager;\n }\n\n\n get settingsManager() {\n return this.session.settingsManager;\n }\n\n\n\n declare options: InteractiveModeOptions;\n\n\n\n constructor(\n runtimeHost: AgentSessionRuntime,\n options: InteractiveModeOptions = {},\n ) {\n this.options = options;\n this.deferredStartupPending = Boolean(options.deferredExtensionLoad);\n this.autoTrustOnReloadCwd = options.autoTrustOnReloadCwd;\n this.runtimeHost = runtimeHost;\n this.runtimeHost.setBeforeSessionInvalidate(() => {\n this.resetExtensionUI();\n });\n this.runtimeHost.setRebindSession(async () => {\n await this.rebindCurrentSession();\n });\n this.version = VERSION;\n this.ui = new TUI(\n new ProcessTerminal(),\n this.settingsManager.getShowHardwareCursor(),\n );\n this.ui.setClearOnShrink(this.settingsManager.getClearOnShrink());\n this.headerContainer = new Container();\n this.chatContainer = new Container();\n this.startupNoticesContainer = new Container();\n this.pendingMessagesContainer = new Container();\n this.statusContainer = new Container();\n this.widgetContainerAbove = new Container();\n this.widgetContainerBelow = new Container();\n this.keybindings = KeybindingsManager.create();\n setKeybindings(this.keybindings);\n const editorPaddingX = this.settingsManager.getEditorPaddingX();\n const autocompleteMaxVisible =\n this.settingsManager.getAutocompleteMaxVisible();\n this.defaultEditor = new CustomEditor(\n this.ui,\n getEditorTheme(),\n this.keybindings,\n {\n paddingX: editorPaddingX,\n autocompleteMaxVisible,\n },\n );\n\n this.editor = this.defaultEditor;\n this.editorContainer = new Container();\n this.editorContainer.addChild(this.editor as Component);\n this.footerDataProvider = new FooterDataProvider(\n this.sessionManager.getCwd(),\n );\n this.footer = new FooterComponent(this.session, this.footerDataProvider);\n this.usageMeter = new UsageMeterComponent(this.session);\n this.usageMeter.setAutoCompactEnabled(this.session.autoCompactionEnabled);\n\n // Load hide thinking block setting\n this.hideThinkingBlock = this.settingsManager.getHideThinkingBlock();\n this.outputPad = this.settingsManager.getOutputPad();\n\n // Register themes from resource loader and initialize\n setRegisteredThemes(this.session.resourceLoader.getThemes().themes);\n this.themeController = new InteractiveThemeController(\n this.ui,\n this.settingsManager,\n (message) => this.showError(message),\n () => this.updateEditorBorderColor(),\n );\n }\n\n\n\n // Maximum total widget lines to prevent viewport overflow\n static readonly MAX_WIDGET_LINES = 10;\n\n\n\n /**\n * Gracefully shutdown the agent.\n * Stops the TUI before emitting shutdown events so extension UI cleanup cannot\n * repaint the final frame while the process is exiting.\n */\n isShuttingDown = false;\n}\n"]}
|
|
@@ -9,7 +9,7 @@ declare module "./interactive-mode-base.ts" {
|
|
|
9
9
|
hasCodexFastModeSupportedModels(): boolean;
|
|
10
10
|
createBaseAutocompleteProvider(): AutocompleteProvider;
|
|
11
11
|
setupAutocompleteProvider(): void;
|
|
12
|
-
showStartupNoticesIfNeeded(): void;
|
|
12
|
+
showStartupNoticesIfNeeded(targetContainer?: Container): void;
|
|
13
13
|
hadLastChangelogVersionAtStartup: boolean;
|
|
14
14
|
firstRunNoticeVisible: boolean;
|
|
15
15
|
firstRunOnboardingNoticeComponents: Component[];
|
|
@@ -18,7 +18,7 @@ declare module "./interactive-mode-base.ts" {
|
|
|
18
18
|
clearFirstRunOnboardingUi(): void;
|
|
19
19
|
init(): Promise<void>;
|
|
20
20
|
completeDeferredStartup(): Promise<void>;
|
|
21
|
-
retryDeferredModelRestore(): Promise<void>;
|
|
21
|
+
retryDeferredModelRestore(targetContainer?: Container): Promise<void>;
|
|
22
22
|
updateTerminalTitle(): void;
|
|
23
23
|
run(): Promise<void>;
|
|
24
24
|
checkForPackageUpdates(): Promise<string[]>;
|
|
@@ -118,6 +118,7 @@ declare module "./interactive-mode-base.ts" {
|
|
|
118
118
|
}>;
|
|
119
119
|
diagnosticsTotal: number;
|
|
120
120
|
expandedBody: string;
|
|
121
|
+
targetContainer?: Container;
|
|
121
122
|
}): void;
|
|
122
123
|
showLoadedResources(options?: {
|
|
123
124
|
extensions?: Array<{
|
|
@@ -126,6 +127,7 @@ declare module "./interactive-mode-base.ts" {
|
|
|
126
127
|
}>;
|
|
127
128
|
force?: boolean;
|
|
128
129
|
showDiagnosticsWhenQuiet?: boolean;
|
|
130
|
+
targetContainer?: Container;
|
|
129
131
|
}): void;
|
|
130
132
|
bindCurrentSessionExtensions(): Promise<void>;
|
|
131
133
|
applyRuntimeSettings(): void;
|
|
@@ -138,6 +140,7 @@ declare module "./interactive-mode-base.ts" {
|
|
|
138
140
|
getWorkingLoaderMessage(): string;
|
|
139
141
|
createWorkingLoader(): Loader;
|
|
140
142
|
stopWorkingLoader(): void;
|
|
143
|
+
showWorkingLoaderNow(): void;
|
|
141
144
|
setWorkingVisible(visible: boolean): void;
|
|
142
145
|
setWorkingIndicator(options?: LoaderIndicatorOptions): void;
|
|
143
146
|
setHiddenThinkingLabel(label?: string): void;
|
|
@@ -195,6 +198,10 @@ declare module "./interactive-mode-base.ts" {
|
|
|
195
198
|
setupKeyHandlers(): void;
|
|
196
199
|
handleClipboardImagePaste(): Promise<void>;
|
|
197
200
|
setupEditorSubmitHandler(): void;
|
|
201
|
+
deliverStartupReplayPrompt(text: string): void;
|
|
202
|
+
recoverCookedStartupInput(): boolean;
|
|
203
|
+
drainStartupReplayCommands(): Promise<void>;
|
|
204
|
+
advanceStartupInputReplay(submittedText: string): void;
|
|
198
205
|
subscribeToAgent(): void;
|
|
199
206
|
handleEvent(event: AgentSessionEvent): Promise<void>;
|
|
200
207
|
getUserMessageText(message: Message): string;
|
|
@@ -210,9 +217,18 @@ declare module "./interactive-mode-base.ts" {
|
|
|
210
217
|
populateHistory?: boolean;
|
|
211
218
|
}): void;
|
|
212
219
|
renderInitialMessages(): void;
|
|
220
|
+
attachStartupNoticesContainer(options?: {
|
|
221
|
+
resetDetached?: boolean;
|
|
222
|
+
}): void;
|
|
213
223
|
getUserInput(): Promise<string>;
|
|
224
|
+
runUserPromptTurn(userInput: string): Promise<void>;
|
|
225
|
+
renderDeferredUserInput(text: string): void;
|
|
226
|
+
consumeDeferredRenderedUserInput(text: string): boolean;
|
|
227
|
+
discardDeferredRenderedUserInput(text: string): void;
|
|
228
|
+
ensureDeferredStartupComplete(): Promise<void>;
|
|
214
229
|
rebuildChatFromMessages(): void;
|
|
215
230
|
handleCtrlC(): void;
|
|
231
|
+
interruptActiveOperation(): boolean;
|
|
216
232
|
handleCtrlD(): void;
|
|
217
233
|
shutdown(options?: {
|
|
218
234
|
fromSignal?: boolean;
|
|
@@ -235,9 +251,9 @@ declare module "./interactive-mode-base.ts" {
|
|
|
235
251
|
openExternalEditor(): void;
|
|
236
252
|
clearEditor(): void;
|
|
237
253
|
showError(errorMessage: string): void;
|
|
238
|
-
showWarning(warningMessage: string): void;
|
|
239
|
-
showNewVersionNotification(newVersion: string): void;
|
|
240
|
-
showPackageUpdateNotification(packages: string[]): void;
|
|
254
|
+
showWarning(warningMessage: string, targetContainer?: Container): void;
|
|
255
|
+
showNewVersionNotification(newVersion: string, targetContainer?: Container): void;
|
|
256
|
+
showPackageUpdateNotification(packages: string[], targetContainer?: Container): void;
|
|
241
257
|
getAllQueuedMessages(): {
|
|
242
258
|
steering: string[];
|
|
243
259
|
followUp: string[];
|
|
@@ -269,7 +285,7 @@ declare module "./interactive-mode-base.ts" {
|
|
|
269
285
|
refreshCopilotModelCatalog(): Promise<void>;
|
|
270
286
|
loadCopilotModelCatalog(): Promise<void>;
|
|
271
287
|
updateAvailableProviderCount(): Promise<void>;
|
|
272
|
-
maybeWarnAboutAnthropicSubscriptionAuth(model?: Model<Api> | undefined): Promise<void>;
|
|
288
|
+
maybeWarnAboutAnthropicSubscriptionAuth(model?: Model<Api> | undefined, targetContainer?: Container): Promise<void>;
|
|
273
289
|
showModelSelector(initialSearchInput?: string): void;
|
|
274
290
|
showContextWindowSelector(model: Model<Api>): void;
|
|
275
291
|
showModelsSelector(): Promise<void>;
|