@imdigitalashish/zpi 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +2801 -0
- package/README.md +95 -0
- package/dist/cli/args.d.ts +47 -0
- package/dist/cli/args.d.ts.map +1 -0
- package/dist/cli/args.js +293 -0
- package/dist/cli/args.js.map +1 -0
- package/dist/cli/config-selector.d.ts +14 -0
- package/dist/cli/config-selector.d.ts.map +1 -0
- package/dist/cli/config-selector.js +31 -0
- package/dist/cli/config-selector.js.map +1 -0
- package/dist/cli/file-processor.d.ts +15 -0
- package/dist/cli/file-processor.d.ts.map +1 -0
- package/dist/cli/file-processor.js +79 -0
- package/dist/cli/file-processor.js.map +1 -0
- package/dist/cli/list-models.d.ts +9 -0
- package/dist/cli/list-models.d.ts.map +1 -0
- package/dist/cli/list-models.js +92 -0
- package/dist/cli/list-models.js.map +1 -0
- package/dist/cli/session-picker.d.ts +9 -0
- package/dist/cli/session-picker.d.ts.map +1 -0
- package/dist/cli/session-picker.js +34 -0
- package/dist/cli/session-picker.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +11 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +68 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +203 -0
- package/dist/config.js.map +1 -0
- package/dist/core/agent-session.d.ts +571 -0
- package/dist/core/agent-session.d.ts.map +1 -0
- package/dist/core/agent-session.js +2353 -0
- package/dist/core/agent-session.js.map +1 -0
- package/dist/core/auth-storage.d.ts +129 -0
- package/dist/core/auth-storage.d.ts.map +1 -0
- package/dist/core/auth-storage.js +394 -0
- package/dist/core/auth-storage.js.map +1 -0
- package/dist/core/bash-executor.d.ts +47 -0
- package/dist/core/bash-executor.d.ts.map +1 -0
- package/dist/core/bash-executor.js +212 -0
- package/dist/core/bash-executor.js.map +1 -0
- package/dist/core/compaction/branch-summarization.d.ts +86 -0
- package/dist/core/compaction/branch-summarization.d.ts.map +1 -0
- package/dist/core/compaction/branch-summarization.js +242 -0
- package/dist/core/compaction/branch-summarization.js.map +1 -0
- package/dist/core/compaction/compaction.d.ts +121 -0
- package/dist/core/compaction/compaction.d.ts.map +1 -0
- package/dist/core/compaction/compaction.js +607 -0
- package/dist/core/compaction/compaction.js.map +1 -0
- package/dist/core/compaction/index.d.ts +7 -0
- package/dist/core/compaction/index.d.ts.map +1 -0
- package/dist/core/compaction/index.js +7 -0
- package/dist/core/compaction/index.js.map +1 -0
- package/dist/core/compaction/utils.d.ts +35 -0
- package/dist/core/compaction/utils.d.ts.map +1 -0
- package/dist/core/compaction/utils.js +138 -0
- package/dist/core/compaction/utils.js.map +1 -0
- package/dist/core/defaults.d.ts +3 -0
- package/dist/core/defaults.d.ts.map +1 -0
- package/dist/core/defaults.js +2 -0
- package/dist/core/defaults.js.map +1 -0
- package/dist/core/diagnostics.d.ts +15 -0
- package/dist/core/diagnostics.d.ts.map +1 -0
- package/dist/core/diagnostics.js +2 -0
- package/dist/core/diagnostics.js.map +1 -0
- package/dist/core/event-bus.d.ts +9 -0
- package/dist/core/event-bus.d.ts.map +1 -0
- package/dist/core/event-bus.js +25 -0
- package/dist/core/event-bus.js.map +1 -0
- package/dist/core/exec.d.ts +29 -0
- package/dist/core/exec.d.ts.map +1 -0
- package/dist/core/exec.js +71 -0
- package/dist/core/exec.js.map +1 -0
- package/dist/core/export-html/ansi-to-html.d.ts +22 -0
- package/dist/core/export-html/ansi-to-html.d.ts.map +1 -0
- package/dist/core/export-html/ansi-to-html.js +249 -0
- package/dist/core/export-html/ansi-to-html.js.map +1 -0
- package/dist/core/export-html/index.d.ts +34 -0
- package/dist/core/export-html/index.d.ts.map +1 -0
- package/dist/core/export-html/index.js +222 -0
- package/dist/core/export-html/index.js.map +1 -0
- package/dist/core/export-html/template.css +971 -0
- package/dist/core/export-html/template.html +54 -0
- package/dist/core/export-html/template.js +1586 -0
- package/dist/core/export-html/tool-renderer.d.ts +35 -0
- package/dist/core/export-html/tool-renderer.d.ts.map +1 -0
- package/dist/core/export-html/tool-renderer.js +57 -0
- package/dist/core/export-html/tool-renderer.js.map +1 -0
- package/dist/core/export-html/vendor/highlight.min.js +1213 -0
- package/dist/core/export-html/vendor/marked.min.js +6 -0
- package/dist/core/extensions/index.d.ts +11 -0
- package/dist/core/extensions/index.d.ts.map +1 -0
- package/dist/core/extensions/index.js +9 -0
- package/dist/core/extensions/index.js.map +1 -0
- package/dist/core/extensions/loader.d.ts +25 -0
- package/dist/core/extensions/loader.d.ts.map +1 -0
- package/dist/core/extensions/loader.js +402 -0
- package/dist/core/extensions/loader.js.map +1 -0
- package/dist/core/extensions/runner.d.ts +146 -0
- package/dist/core/extensions/runner.d.ts.map +1 -0
- package/dist/core/extensions/runner.js +626 -0
- package/dist/core/extensions/runner.js.map +1 -0
- package/dist/core/extensions/types.d.ts +984 -0
- package/dist/core/extensions/types.d.ts.map +1 -0
- package/dist/core/extensions/types.js +35 -0
- package/dist/core/extensions/types.js.map +1 -0
- package/dist/core/extensions/wrapper.d.ts +27 -0
- package/dist/core/extensions/wrapper.d.ts.map +1 -0
- package/dist/core/extensions/wrapper.js +102 -0
- package/dist/core/extensions/wrapper.js.map +1 -0
- package/dist/core/footer-data-provider.d.ts +32 -0
- package/dist/core/footer-data-provider.d.ts.map +1 -0
- package/dist/core/footer-data-provider.js +134 -0
- package/dist/core/footer-data-provider.js.map +1 -0
- package/dist/core/index.d.ts +9 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +9 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/keybindings.d.ts +55 -0
- package/dist/core/keybindings.d.ts.map +1 -0
- package/dist/core/keybindings.js +153 -0
- package/dist/core/keybindings.js.map +1 -0
- package/dist/core/memory.d.ts +64 -0
- package/dist/core/memory.d.ts.map +1 -0
- package/dist/core/memory.js +247 -0
- package/dist/core/memory.js.map +1 -0
- package/dist/core/messages.d.ts +77 -0
- package/dist/core/messages.d.ts.map +1 -0
- package/dist/core/messages.js +149 -0
- package/dist/core/messages.js.map +1 -0
- package/dist/core/model-registry.d.ts +102 -0
- package/dist/core/model-registry.d.ts.map +1 -0
- package/dist/core/model-registry.js +515 -0
- package/dist/core/model-registry.js.map +1 -0
- package/dist/core/model-resolver.d.ts +104 -0
- package/dist/core/model-resolver.d.ts.map +1 -0
- package/dist/core/model-resolver.js +403 -0
- package/dist/core/model-resolver.js.map +1 -0
- package/dist/core/package-manager.d.ts +151 -0
- package/dist/core/package-manager.d.ts.map +1 -0
- package/dist/core/package-manager.js +1426 -0
- package/dist/core/package-manager.js.map +1 -0
- package/dist/core/prompt-templates.d.ts +50 -0
- package/dist/core/prompt-templates.d.ts.map +1 -0
- package/dist/core/prompt-templates.js +251 -0
- package/dist/core/prompt-templates.js.map +1 -0
- package/dist/core/resolve-config-value.d.ts +17 -0
- package/dist/core/resolve-config-value.d.ts.map +1 -0
- package/dist/core/resolve-config-value.js +59 -0
- package/dist/core/resolve-config-value.js.map +1 -0
- package/dist/core/resource-loader.d.ts +184 -0
- package/dist/core/resource-loader.d.ts.map +1 -0
- package/dist/core/resource-loader.js +673 -0
- package/dist/core/resource-loader.js.map +1 -0
- package/dist/core/sdk.d.ts +90 -0
- package/dist/core/sdk.d.ts.map +1 -0
- package/dist/core/sdk.js +238 -0
- package/dist/core/sdk.js.map +1 -0
- package/dist/core/session-manager.d.ts +323 -0
- package/dist/core/session-manager.d.ts.map +1 -0
- package/dist/core/session-manager.js +1091 -0
- package/dist/core/session-manager.js.map +1 -0
- package/dist/core/settings-manager.d.ts +230 -0
- package/dist/core/settings-manager.d.ts.map +1 -0
- package/dist/core/settings-manager.js +656 -0
- package/dist/core/settings-manager.js.map +1 -0
- package/dist/core/skills.d.ts +58 -0
- package/dist/core/skills.d.ts.map +1 -0
- package/dist/core/skills.js +364 -0
- package/dist/core/skills.js.map +1 -0
- package/dist/core/slash-commands.d.ts +15 -0
- package/dist/core/slash-commands.d.ts.map +1 -0
- package/dist/core/slash-commands.js +23 -0
- package/dist/core/slash-commands.js.map +1 -0
- package/dist/core/system-prompt.d.ts +26 -0
- package/dist/core/system-prompt.d.ts.map +1 -0
- package/dist/core/system-prompt.js +150 -0
- package/dist/core/system-prompt.js.map +1 -0
- package/dist/core/timings.d.ts +7 -0
- package/dist/core/timings.d.ts.map +1 -0
- package/dist/core/timings.js +25 -0
- package/dist/core/timings.js.map +1 -0
- package/dist/core/tools/bash.d.ts +55 -0
- package/dist/core/tools/bash.d.ts.map +1 -0
- package/dist/core/tools/bash.js +242 -0
- package/dist/core/tools/bash.js.map +1 -0
- package/dist/core/tools/edit-diff.d.ts +63 -0
- package/dist/core/tools/edit-diff.d.ts.map +1 -0
- package/dist/core/tools/edit-diff.js +243 -0
- package/dist/core/tools/edit-diff.js.map +1 -0
- package/dist/core/tools/edit.d.ts +39 -0
- package/dist/core/tools/edit.d.ts.map +1 -0
- package/dist/core/tools/edit.js +146 -0
- package/dist/core/tools/edit.js.map +1 -0
- package/dist/core/tools/find.d.ts +39 -0
- package/dist/core/tools/find.d.ts.map +1 -0
- package/dist/core/tools/find.js +206 -0
- package/dist/core/tools/find.js.map +1 -0
- package/dist/core/tools/grep.d.ts +45 -0
- package/dist/core/tools/grep.d.ts.map +1 -0
- package/dist/core/tools/grep.js +239 -0
- package/dist/core/tools/grep.js.map +1 -0
- package/dist/core/tools/index.d.ts +102 -0
- package/dist/core/tools/index.d.ts.map +1 -0
- package/dist/core/tools/index.js +71 -0
- package/dist/core/tools/index.js.map +1 -0
- package/dist/core/tools/ls.d.ts +40 -0
- package/dist/core/tools/ls.d.ts.map +1 -0
- package/dist/core/tools/ls.js +118 -0
- package/dist/core/tools/ls.js.map +1 -0
- package/dist/core/tools/memory.d.ts +45 -0
- package/dist/core/tools/memory.d.ts.map +1 -0
- package/dist/core/tools/memory.js +346 -0
- package/dist/core/tools/memory.js.map +1 -0
- package/dist/core/tools/path-utils.d.ts +8 -0
- package/dist/core/tools/path-utils.d.ts.map +1 -0
- package/dist/core/tools/path-utils.js +81 -0
- package/dist/core/tools/path-utils.js.map +1 -0
- package/dist/core/tools/read.d.ts +39 -0
- package/dist/core/tools/read.d.ts.map +1 -0
- package/dist/core/tools/read.js +166 -0
- package/dist/core/tools/read.js.map +1 -0
- package/dist/core/tools/truncate.d.ts +70 -0
- package/dist/core/tools/truncate.d.ts.map +1 -0
- package/dist/core/tools/truncate.js +205 -0
- package/dist/core/tools/truncate.js.map +1 -0
- package/dist/core/tools/write.d.ts +29 -0
- package/dist/core/tools/write.d.ts.map +1 -0
- package/dist/core/tools/write.js +78 -0
- package/dist/core/tools/write.js.map +1 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +43 -0
- package/dist/index.js.map +1 -0
- package/dist/main.d.ts +8 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +651 -0
- package/dist/main.js.map +1 -0
- package/dist/migrations.d.ts +33 -0
- package/dist/migrations.d.ts.map +1 -0
- package/dist/migrations.js +261 -0
- package/dist/migrations.js.map +1 -0
- package/dist/modes/index.d.ts +9 -0
- package/dist/modes/index.d.ts.map +1 -0
- package/dist/modes/index.js +8 -0
- package/dist/modes/index.js.map +1 -0
- package/dist/modes/interactive/components/armin.d.ts +34 -0
- package/dist/modes/interactive/components/armin.d.ts.map +1 -0
- package/dist/modes/interactive/components/armin.js +333 -0
- package/dist/modes/interactive/components/armin.js.map +1 -0
- package/dist/modes/interactive/components/assistant-message.d.ts +16 -0
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/assistant-message.js +96 -0
- package/dist/modes/interactive/components/assistant-message.js.map +1 -0
- package/dist/modes/interactive/components/bash-execution.d.ts +35 -0
- package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -0
- package/dist/modes/interactive/components/bash-execution.js +162 -0
- package/dist/modes/interactive/components/bash-execution.js.map +1 -0
- package/dist/modes/interactive/components/bordered-loader.d.ts +16 -0
- package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -0
- package/dist/modes/interactive/components/bordered-loader.js +51 -0
- package/dist/modes/interactive/components/bordered-loader.js.map +1 -0
- package/dist/modes/interactive/components/branch-summary-message.d.ts +16 -0
- package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/branch-summary-message.js +44 -0
- package/dist/modes/interactive/components/branch-summary-message.js.map +1 -0
- package/dist/modes/interactive/components/compaction-summary-message.d.ts +16 -0
- package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/compaction-summary-message.js +45 -0
- package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -0
- package/dist/modes/interactive/components/config-selector.d.ts +71 -0
- package/dist/modes/interactive/components/config-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/config-selector.js +479 -0
- package/dist/modes/interactive/components/config-selector.js.map +1 -0
- package/dist/modes/interactive/components/countdown-timer.d.ts +14 -0
- package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -0
- package/dist/modes/interactive/components/countdown-timer.js +33 -0
- package/dist/modes/interactive/components/countdown-timer.js.map +1 -0
- package/dist/modes/interactive/components/custom-editor.d.ts +21 -0
- package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -0
- package/dist/modes/interactive/components/custom-editor.js +70 -0
- package/dist/modes/interactive/components/custom-editor.js.map +1 -0
- package/dist/modes/interactive/components/custom-message.d.ts +20 -0
- package/dist/modes/interactive/components/custom-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/custom-message.js +79 -0
- package/dist/modes/interactive/components/custom-message.js.map +1 -0
- package/dist/modes/interactive/components/daxnuts.d.ts +23 -0
- package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -0
- package/dist/modes/interactive/components/daxnuts.js +140 -0
- package/dist/modes/interactive/components/daxnuts.js.map +1 -0
- package/dist/modes/interactive/components/diff.d.ts +12 -0
- package/dist/modes/interactive/components/diff.d.ts.map +1 -0
- package/dist/modes/interactive/components/diff.js +133 -0
- package/dist/modes/interactive/components/diff.js.map +1 -0
- package/dist/modes/interactive/components/dynamic-border.d.ts +15 -0
- package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -0
- package/dist/modes/interactive/components/dynamic-border.js +21 -0
- package/dist/modes/interactive/components/dynamic-border.js.map +1 -0
- package/dist/modes/interactive/components/extension-editor.d.ts +17 -0
- package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -0
- package/dist/modes/interactive/components/extension-editor.js +102 -0
- package/dist/modes/interactive/components/extension-editor.js.map +1 -0
- package/dist/modes/interactive/components/extension-input.d.ts +23 -0
- package/dist/modes/interactive/components/extension-input.d.ts.map +1 -0
- package/dist/modes/interactive/components/extension-input.js +61 -0
- package/dist/modes/interactive/components/extension-input.js.map +1 -0
- package/dist/modes/interactive/components/extension-selector.d.ts +24 -0
- package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/extension-selector.js +78 -0
- package/dist/modes/interactive/components/extension-selector.js.map +1 -0
- package/dist/modes/interactive/components/footer.d.ts +26 -0
- package/dist/modes/interactive/components/footer.d.ts.map +1 -0
- package/dist/modes/interactive/components/footer.js +213 -0
- package/dist/modes/interactive/components/footer.js.map +1 -0
- package/dist/modes/interactive/components/index.d.ts +32 -0
- package/dist/modes/interactive/components/index.d.ts.map +1 -0
- package/dist/modes/interactive/components/index.js +33 -0
- package/dist/modes/interactive/components/index.js.map +1 -0
- package/dist/modes/interactive/components/keybinding-hints.d.ts +41 -0
- package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -0
- package/dist/modes/interactive/components/keybinding-hints.js +61 -0
- package/dist/modes/interactive/components/keybinding-hints.js.map +1 -0
- package/dist/modes/interactive/components/login-dialog.d.ts +42 -0
- package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -0
- package/dist/modes/interactive/components/login-dialog.js +145 -0
- package/dist/modes/interactive/components/login-dialog.js.map +1 -0
- package/dist/modes/interactive/components/model-selector.d.ts +47 -0
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/model-selector.js +271 -0
- package/dist/modes/interactive/components/model-selector.js.map +1 -0
- package/dist/modes/interactive/components/oauth-selector.d.ts +19 -0
- package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/oauth-selector.js +97 -0
- package/dist/modes/interactive/components/oauth-selector.js.map +1 -0
- package/dist/modes/interactive/components/scoped-models-selector.d.ts +49 -0
- package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/scoped-models-selector.js +275 -0
- package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -0
- package/dist/modes/interactive/components/session-selector-search.d.ts +23 -0
- package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -0
- package/dist/modes/interactive/components/session-selector-search.js +155 -0
- package/dist/modes/interactive/components/session-selector-search.js.map +1 -0
- package/dist/modes/interactive/components/session-selector.d.ts +95 -0
- package/dist/modes/interactive/components/session-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/session-selector.js +851 -0
- package/dist/modes/interactive/components/session-selector.js.map +1 -0
- package/dist/modes/interactive/components/settings-selector.d.ts +58 -0
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/settings-selector.js +299 -0
- package/dist/modes/interactive/components/settings-selector.js.map +1 -0
- package/dist/modes/interactive/components/show-images-selector.d.ts +10 -0
- package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/show-images-selector.js +35 -0
- package/dist/modes/interactive/components/show-images-selector.js.map +1 -0
- package/dist/modes/interactive/components/skill-invocation-message.d.ts +17 -0
- package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/skill-invocation-message.js +47 -0
- package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -0
- package/dist/modes/interactive/components/theme-selector.d.ts +11 -0
- package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/theme-selector.js +46 -0
- package/dist/modes/interactive/components/theme-selector.js.map +1 -0
- package/dist/modes/interactive/components/thinking-selector.d.ts +11 -0
- package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/thinking-selector.js +47 -0
- package/dist/modes/interactive/components/thinking-selector.js.map +1 -0
- package/dist/modes/interactive/components/tool-execution.d.ts +70 -0
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -0
- package/dist/modes/interactive/components/tool-execution.js +636 -0
- package/dist/modes/interactive/components/tool-execution.js.map +1 -0
- package/dist/modes/interactive/components/tree-selector.d.ts +68 -0
- package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/tree-selector.js +934 -0
- package/dist/modes/interactive/components/tree-selector.js.map +1 -0
- package/dist/modes/interactive/components/user-message-selector.d.ts +30 -0
- package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/user-message-selector.js +113 -0
- package/dist/modes/interactive/components/user-message-selector.js.map +1 -0
- package/dist/modes/interactive/components/user-message.d.ts +8 -0
- package/dist/modes/interactive/components/user-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/user-message.js +16 -0
- package/dist/modes/interactive/components/user-message.js.map +1 -0
- package/dist/modes/interactive/components/visual-truncate.d.ts +24 -0
- package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -0
- package/dist/modes/interactive/components/visual-truncate.js +33 -0
- package/dist/modes/interactive/components/visual-truncate.js.map +1 -0
- package/dist/modes/interactive/interactive-mode.d.ts +316 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-mode.js +3848 -0
- package/dist/modes/interactive/interactive-mode.js.map +1 -0
- package/dist/modes/interactive/theme/dark.json +85 -0
- package/dist/modes/interactive/theme/light.json +84 -0
- package/dist/modes/interactive/theme/theme-schema.json +335 -0
- package/dist/modes/interactive/theme/theme.d.ts +78 -0
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -0
- package/dist/modes/interactive/theme/theme.js +944 -0
- package/dist/modes/interactive/theme/theme.js.map +1 -0
- package/dist/modes/print-mode.d.ts +28 -0
- package/dist/modes/print-mode.d.ts.map +1 -0
- package/dist/modes/print-mode.js +101 -0
- package/dist/modes/print-mode.js.map +1 -0
- package/dist/modes/rpc/rpc-client.d.ts +217 -0
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -0
- package/dist/modes/rpc/rpc-client.js +405 -0
- package/dist/modes/rpc/rpc-client.js.map +1 -0
- package/dist/modes/rpc/rpc-mode.d.ts +20 -0
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -0
- package/dist/modes/rpc/rpc-mode.js +511 -0
- package/dist/modes/rpc/rpc-mode.js.map +1 -0
- package/dist/modes/rpc/rpc-types.d.ts +409 -0
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -0
- package/dist/modes/rpc/rpc-types.js +8 -0
- package/dist/modes/rpc/rpc-types.js.map +1 -0
- package/dist/utils/changelog.d.ts +21 -0
- package/dist/utils/changelog.d.ts.map +1 -0
- package/dist/utils/changelog.js +87 -0
- package/dist/utils/changelog.js.map +1 -0
- package/dist/utils/clipboard-image.d.ts +11 -0
- package/dist/utils/clipboard-image.d.ts.map +1 -0
- package/dist/utils/clipboard-image.js +162 -0
- package/dist/utils/clipboard-image.js.map +1 -0
- package/dist/utils/clipboard-native.d.ts +7 -0
- package/dist/utils/clipboard-native.d.ts.map +1 -0
- package/dist/utils/clipboard-native.js +14 -0
- package/dist/utils/clipboard-native.js.map +1 -0
- package/dist/utils/clipboard.d.ts +2 -0
- package/dist/utils/clipboard.d.ts.map +1 -0
- package/dist/utils/clipboard.js +67 -0
- package/dist/utils/clipboard.js.map +1 -0
- package/dist/utils/frontmatter.d.ts +8 -0
- package/dist/utils/frontmatter.d.ts.map +1 -0
- package/dist/utils/frontmatter.js +26 -0
- package/dist/utils/frontmatter.js.map +1 -0
- package/dist/utils/git.d.ts +26 -0
- package/dist/utils/git.d.ts.map +1 -0
- package/dist/utils/git.js +163 -0
- package/dist/utils/git.js.map +1 -0
- package/dist/utils/image-convert.d.ts +9 -0
- package/dist/utils/image-convert.d.ts.map +1 -0
- package/dist/utils/image-convert.js +35 -0
- package/dist/utils/image-convert.js.map +1 -0
- package/dist/utils/image-resize.d.ts +36 -0
- package/dist/utils/image-resize.d.ts.map +1 -0
- package/dist/utils/image-resize.js +181 -0
- package/dist/utils/image-resize.js.map +1 -0
- package/dist/utils/mime.d.ts +2 -0
- package/dist/utils/mime.d.ts.map +1 -0
- package/dist/utils/mime.js +26 -0
- package/dist/utils/mime.js.map +1 -0
- package/dist/utils/photon.d.ts +21 -0
- package/dist/utils/photon.d.ts.map +1 -0
- package/dist/utils/photon.js +121 -0
- package/dist/utils/photon.js.map +1 -0
- package/dist/utils/shell.d.ts +26 -0
- package/dist/utils/shell.d.ts.map +1 -0
- package/dist/utils/shell.js +186 -0
- package/dist/utils/shell.js.map +1 -0
- package/dist/utils/sleep.d.ts +5 -0
- package/dist/utils/sleep.d.ts.map +1 -0
- package/dist/utils/sleep.js +17 -0
- package/dist/utils/sleep.js.map +1 -0
- package/dist/utils/tools-manager.d.ts +3 -0
- package/dist/utils/tools-manager.d.ts.map +1 -0
- package/dist/utils/tools-manager.js +207 -0
- package/dist/utils/tools-manager.js.map +1 -0
- package/docs/compaction.md +390 -0
- package/docs/custom-provider.md +548 -0
- package/docs/development.md +69 -0
- package/docs/extensions.md +1935 -0
- package/docs/images/doom-extension.png +0 -0
- package/docs/images/exy.png +0 -0
- package/docs/images/interactive-mode.png +0 -0
- package/docs/images/tree-view.png +0 -0
- package/docs/json.md +79 -0
- package/docs/keybindings.md +174 -0
- package/docs/models.md +293 -0
- package/docs/packages.md +209 -0
- package/docs/prompt-templates.md +67 -0
- package/docs/providers.md +186 -0
- package/docs/rpc.md +1317 -0
- package/docs/sdk.md +968 -0
- package/docs/session.md +412 -0
- package/docs/settings.md +223 -0
- package/docs/shell-aliases.md +13 -0
- package/docs/skills.md +231 -0
- package/docs/terminal-setup.md +70 -0
- package/docs/termux.md +127 -0
- package/docs/themes.md +295 -0
- package/docs/tree.md +219 -0
- package/docs/tui.md +887 -0
- package/docs/windows.md +17 -0
- package/examples/README.md +25 -0
- package/examples/extensions/README.md +203 -0
- package/examples/extensions/antigravity-image-gen.ts +413 -0
- package/examples/extensions/auto-commit-on-exit.ts +49 -0
- package/examples/extensions/bash-spawn-hook.ts +30 -0
- package/examples/extensions/bookmark.ts +50 -0
- package/examples/extensions/claude-rules.ts +86 -0
- package/examples/extensions/commands.ts +72 -0
- package/examples/extensions/confirm-destructive.ts +59 -0
- package/examples/extensions/custom-compaction.ts +114 -0
- package/examples/extensions/custom-footer.ts +64 -0
- package/examples/extensions/custom-header.ts +73 -0
- package/examples/extensions/custom-provider-anthropic/index.ts +604 -0
- package/examples/extensions/custom-provider-anthropic/package-lock.json +24 -0
- package/examples/extensions/custom-provider-anthropic/package.json +19 -0
- package/examples/extensions/custom-provider-gitlab-duo/index.ts +349 -0
- package/examples/extensions/custom-provider-gitlab-duo/package.json +16 -0
- package/examples/extensions/custom-provider-gitlab-duo/test.ts +82 -0
- package/examples/extensions/custom-provider-qwen-cli/index.ts +345 -0
- package/examples/extensions/custom-provider-qwen-cli/package.json +16 -0
- package/examples/extensions/dirty-repo-guard.ts +56 -0
- package/examples/extensions/doom-overlay/README.md +46 -0
- package/examples/extensions/doom-overlay/doom/build/doom.js +21 -0
- package/examples/extensions/doom-overlay/doom/build/doom.wasm +0 -0
- package/examples/extensions/doom-overlay/doom/build.sh +152 -0
- package/examples/extensions/doom-overlay/doom/doomgeneric_pi.c +72 -0
- package/examples/extensions/doom-overlay/doom-component.ts +132 -0
- package/examples/extensions/doom-overlay/doom-engine.ts +173 -0
- package/examples/extensions/doom-overlay/doom-keys.ts +104 -0
- package/examples/extensions/doom-overlay/index.ts +74 -0
- package/examples/extensions/doom-overlay/wad-finder.ts +51 -0
- package/examples/extensions/dynamic-resources/SKILL.md +8 -0
- package/examples/extensions/dynamic-resources/dynamic.json +79 -0
- package/examples/extensions/dynamic-resources/dynamic.md +5 -0
- package/examples/extensions/dynamic-resources/index.ts +15 -0
- package/examples/extensions/event-bus.ts +43 -0
- package/examples/extensions/file-trigger.ts +41 -0
- package/examples/extensions/git-checkpoint.ts +53 -0
- package/examples/extensions/handoff.ts +150 -0
- package/examples/extensions/hello.ts +25 -0
- package/examples/extensions/inline-bash.ts +94 -0
- package/examples/extensions/input-transform.ts +43 -0
- package/examples/extensions/interactive-shell.ts +196 -0
- package/examples/extensions/mac-system-theme.ts +47 -0
- package/examples/extensions/message-renderer.ts +59 -0
- package/examples/extensions/minimal-mode.ts +426 -0
- package/examples/extensions/modal-editor.ts +85 -0
- package/examples/extensions/model-status.ts +31 -0
- package/examples/extensions/notify.ts +55 -0
- package/examples/extensions/overlay-qa-tests.ts +881 -0
- package/examples/extensions/overlay-test.ts +150 -0
- package/examples/extensions/permission-gate.ts +34 -0
- package/examples/extensions/pirate.ts +47 -0
- package/examples/extensions/plan-mode/README.md +65 -0
- package/examples/extensions/plan-mode/index.ts +340 -0
- package/examples/extensions/plan-mode/utils.ts +168 -0
- package/examples/extensions/preset.ts +398 -0
- package/examples/extensions/protected-paths.ts +30 -0
- package/examples/extensions/qna.ts +119 -0
- package/examples/extensions/question.ts +264 -0
- package/examples/extensions/questionnaire.ts +427 -0
- package/examples/extensions/rainbow-editor.ts +88 -0
- package/examples/extensions/reload-runtime.ts +37 -0
- package/examples/extensions/rpc-demo.ts +124 -0
- package/examples/extensions/sandbox/index.ts +318 -0
- package/examples/extensions/sandbox/package-lock.json +92 -0
- package/examples/extensions/sandbox/package.json +19 -0
- package/examples/extensions/send-user-message.ts +97 -0
- package/examples/extensions/session-name.ts +27 -0
- package/examples/extensions/shutdown-command.ts +63 -0
- package/examples/extensions/snake.ts +343 -0
- package/examples/extensions/space-invaders.ts +560 -0
- package/examples/extensions/ssh.ts +220 -0
- package/examples/extensions/status-line.ts +40 -0
- package/examples/extensions/subagent/README.md +172 -0
- package/examples/extensions/subagent/agents/planner.md +37 -0
- package/examples/extensions/subagent/agents/reviewer.md +35 -0
- package/examples/extensions/subagent/agents/scout.md +50 -0
- package/examples/extensions/subagent/agents/worker.md +24 -0
- package/examples/extensions/subagent/agents.ts +127 -0
- package/examples/extensions/subagent/index.ts +964 -0
- package/examples/extensions/subagent/prompts/implement-and-review.md +10 -0
- package/examples/extensions/subagent/prompts/implement.md +10 -0
- package/examples/extensions/subagent/prompts/scout-and-plan.md +9 -0
- package/examples/extensions/summarize.ts +195 -0
- package/examples/extensions/system-prompt-header.ts +17 -0
- package/examples/extensions/timed-confirm.ts +70 -0
- package/examples/extensions/titlebar-spinner.ts +58 -0
- package/examples/extensions/todo.ts +299 -0
- package/examples/extensions/tool-override.ts +143 -0
- package/examples/extensions/tools.ts +146 -0
- package/examples/extensions/trigger-compact.ts +40 -0
- package/examples/extensions/truncated-tool.ts +192 -0
- package/examples/extensions/widget-placement.ts +17 -0
- package/examples/extensions/with-deps/index.ts +36 -0
- package/examples/extensions/with-deps/package-lock.json +31 -0
- package/examples/extensions/with-deps/package.json +22 -0
- package/examples/rpc-extension-ui.ts +632 -0
- package/examples/sdk/01-minimal.ts +22 -0
- package/examples/sdk/02-custom-model.ts +49 -0
- package/examples/sdk/03-custom-prompt.ts +55 -0
- package/examples/sdk/04-skills.ts +46 -0
- package/examples/sdk/05-tools.ts +56 -0
- package/examples/sdk/06-extensions.ts +88 -0
- package/examples/sdk/07-context-files.ts +40 -0
- package/examples/sdk/08-prompt-templates.ts +47 -0
- package/examples/sdk/09-api-keys-and-oauth.ts +48 -0
- package/examples/sdk/10-settings.ts +51 -0
- package/examples/sdk/11-sessions.ts +48 -0
- package/examples/sdk/12-full-control.ts +82 -0
- package/examples/sdk/README.md +144 -0
- package/package.json +96 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interactive-mode.js","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-mode.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Interactive mode for the coding agent.\r\n * Handles TUI rendering and user interaction, delegating business logic to AgentSession.\r\n */\r\n\r\nimport * as crypto from \"node:crypto\";\r\nimport * as fs from \"node:fs\";\r\nimport * as os from \"node:os\";\r\nimport * as path from \"node:path\";\r\nimport type { AgentMessage } from \"@mariozechner/pi-agent-core\";\r\nimport {\r\n\ttype AssistantMessage,\r\n\tgetOAuthProviders,\r\n\ttype ImageContent,\r\n\ttype Message,\r\n\ttype Model,\r\n\ttype OAuthProvider,\r\n} from \"@mariozechner/pi-ai\";\r\nimport type {\r\n\tAutocompleteItem,\r\n\tEditorAction,\r\n\tEditorComponent,\r\n\tEditorTheme,\r\n\tKeyId,\r\n\tMarkdownTheme,\r\n\tOverlayHandle,\r\n\tOverlayOptions,\r\n\tSlashCommand,\r\n} from \"@mariozechner/pi-tui\";\r\nimport {\r\n\tCombinedAutocompleteProvider,\r\n\ttype Component,\r\n\tContainer,\r\n\tfuzzyFilter,\r\n\tLoader,\r\n\tMarkdown,\r\n\tmatchesKey,\r\n\tProcessTerminal,\r\n\tSpacer,\r\n\tText,\r\n\tTruncatedText,\r\n\tTUI,\r\n\tvisibleWidth,\r\n} from \"@mariozechner/pi-tui\";\r\nimport { spawn, spawnSync } from \"child_process\";\r\nimport {\r\n\tAPP_NAME,\r\n\tgetAuthPath,\r\n\tgetDebugLogPath,\r\n\tgetShareViewerUrl,\r\n\tgetUpdateInstruction,\r\n\tVERSION,\r\n} from \"../../config.js\";\r\nimport { type AgentSession, type AgentSessionEvent, parseSkillBlock } from \"../../core/agent-session.js\";\r\nimport type { CompactionResult } from \"../../core/compaction/index.js\";\r\nimport type {\r\n\tExtensionContext,\r\n\tExtensionRunner,\r\n\tExtensionUIContext,\r\n\tExtensionUIDialogOptions,\r\n\tExtensionWidgetOptions,\r\n} from \"../../core/extensions/index.js\";\r\nimport { FooterDataProvider, type ReadonlyFooterDataProvider } from \"../../core/footer-data-provider.js\";\r\nimport { type AppAction, KeybindingsManager } from \"../../core/keybindings.js\";\r\nimport {\r\n\tcompactEpisodicMemories,\r\n\ttype EpisodicMemory,\r\n\tformatEpisodicForDisplay,\r\n\tformatProceduralForDisplay,\r\n\tformatSemanticForDisplay,\r\n\tloadStore,\r\n\ttype ProceduralMemory,\r\n\ttype SemanticMemory,\r\n\tsaveStore,\r\n\tsearchMemories,\r\n} from \"../../core/memory.js\";\r\nimport { createCompactionSummaryMessage } from \"../../core/messages.js\";\r\nimport { resolveModelScope } from \"../../core/model-resolver.js\";\r\nimport type { ResourceDiagnostic } from \"../../core/resource-loader.js\";\r\nimport { type SessionContext, SessionManager } from \"../../core/session-manager.js\";\r\nimport { BUILTIN_SLASH_COMMANDS } from \"../../core/slash-commands.js\";\r\nimport type { TruncationResult } from \"../../core/tools/truncate.js\";\r\nimport { getChangelogPath, getNewEntries, parseChangelog } from \"../../utils/changelog.js\";\r\nimport { copyToClipboard } from \"../../utils/clipboard.js\";\r\nimport { extensionForImageMimeType, readClipboardImage } from \"../../utils/clipboard-image.js\";\r\nimport { ensureTool } from \"../../utils/tools-manager.js\";\r\nimport { ArminComponent } from \"./components/armin.js\";\r\nimport { AssistantMessageComponent } from \"./components/assistant-message.js\";\r\nimport { BashExecutionComponent } from \"./components/bash-execution.js\";\r\nimport { BorderedLoader } from \"./components/bordered-loader.js\";\r\nimport { BranchSummaryMessageComponent } from \"./components/branch-summary-message.js\";\r\nimport { CompactionSummaryMessageComponent } from \"./components/compaction-summary-message.js\";\r\nimport { CustomEditor } from \"./components/custom-editor.js\";\r\nimport { CustomMessageComponent } from \"./components/custom-message.js\";\r\nimport { DaxnutsComponent } from \"./components/daxnuts.js\";\r\nimport { DynamicBorder } from \"./components/dynamic-border.js\";\r\nimport { ExtensionEditorComponent } from \"./components/extension-editor.js\";\r\nimport { ExtensionInputComponent } from \"./components/extension-input.js\";\r\nimport { ExtensionSelectorComponent } from \"./components/extension-selector.js\";\r\nimport { FooterComponent } from \"./components/footer.js\";\r\nimport { appKey, appKeyHint, editorKey, keyHint, rawKeyHint } from \"./components/keybinding-hints.js\";\r\nimport { LoginDialogComponent } from \"./components/login-dialog.js\";\r\nimport { ModelSelectorComponent } from \"./components/model-selector.js\";\r\nimport { OAuthSelectorComponent } from \"./components/oauth-selector.js\";\r\nimport { ScopedModelsSelectorComponent } from \"./components/scoped-models-selector.js\";\r\nimport { SessionSelectorComponent } from \"./components/session-selector.js\";\r\nimport { SettingsSelectorComponent } from \"./components/settings-selector.js\";\r\nimport { SkillInvocationMessageComponent } from \"./components/skill-invocation-message.js\";\r\nimport { ToolExecutionComponent } from \"./components/tool-execution.js\";\r\nimport { TreeSelectorComponent } from \"./components/tree-selector.js\";\r\nimport { UserMessageComponent } from \"./components/user-message.js\";\r\nimport { UserMessageSelectorComponent } from \"./components/user-message-selector.js\";\r\nimport {\r\n\tgetAvailableThemes,\r\n\tgetAvailableThemesWithPaths,\r\n\tgetEditorTheme,\r\n\tgetMarkdownTheme,\r\n\tgetThemeByName,\r\n\tinitTheme,\r\n\tonThemeChange,\r\n\tsetRegisteredThemes,\r\n\tsetTheme,\r\n\tsetThemeInstance,\r\n\tTheme,\r\n\ttype ThemeColor,\r\n\ttheme,\r\n} from \"./theme/theme.js\";\r\n\r\n/** Interface for components that can be expanded/collapsed */\r\ninterface Expandable {\r\n\tsetExpanded(expanded: boolean): void;\r\n}\r\n\r\nfunction isExpandable(obj: unknown): obj is Expandable {\r\n\treturn typeof obj === \"object\" && obj !== null && \"setExpanded\" in obj && typeof obj.setExpanded === \"function\";\r\n}\r\n\r\ntype CompactionQueuedMessage = {\r\n\ttext: string;\r\n\tmode: \"steer\" | \"followUp\";\r\n};\r\n\r\n/**\r\n * Options for InteractiveMode initialization.\r\n */\r\nexport interface InteractiveModeOptions {\r\n\t/** Providers that were migrated to auth.json (shows warning) */\r\n\tmigratedProviders?: string[];\r\n\t/** Warning message if session model couldn't be restored */\r\n\tmodelFallbackMessage?: string;\r\n\t/** Initial message to send on startup (can include @file content) */\r\n\tinitialMessage?: string;\r\n\t/** Images to attach to the initial message */\r\n\tinitialImages?: ImageContent[];\r\n\t/** Additional messages to send after the initial message */\r\n\tinitialMessages?: string[];\r\n\t/** Force verbose startup (overrides quietStartup setting) */\r\n\tverbose?: boolean;\r\n}\r\n\r\nexport class InteractiveMode {\r\n\tprivate session: AgentSession;\r\n\tprivate ui: TUI;\r\n\tprivate chatContainer: Container;\r\n\tprivate pendingMessagesContainer: Container;\r\n\tprivate statusContainer: Container;\r\n\tprivate defaultEditor: CustomEditor;\r\n\tprivate editor: EditorComponent;\r\n\tprivate autocompleteProvider: CombinedAutocompleteProvider | undefined;\r\n\tprivate fdPath: string | undefined;\r\n\tprivate editorContainer: Container;\r\n\tprivate footer: FooterComponent;\r\n\tprivate footerDataProvider: FooterDataProvider;\r\n\tprivate keybindings: KeybindingsManager;\r\n\tprivate version: string;\r\n\tprivate isInitialized = false;\r\n\tprivate onInputCallback?: (text: string) => void;\r\n\tprivate loadingAnimation: Loader | undefined = undefined;\r\n\tprivate pendingWorkingMessage: string | undefined = undefined;\r\n\tprivate readonly defaultWorkingMessage = \"Working...\";\r\n\r\n\tprivate lastSigintTime = 0;\r\n\tprivate lastEscapeTime = 0;\r\n\tprivate changelogMarkdown: string | undefined = undefined;\r\n\r\n\t// Status line tracking (for mutating immediately-sequential status updates)\r\n\tprivate lastStatusSpacer: Spacer | undefined = undefined;\r\n\tprivate lastStatusText: Text | undefined = undefined;\r\n\r\n\t// Streaming message tracking\r\n\tprivate streamingComponent: AssistantMessageComponent | undefined = undefined;\r\n\tprivate streamingMessage: AssistantMessage | undefined = undefined;\r\n\r\n\t// Tool execution tracking: toolCallId -> component\r\n\tprivate pendingTools = new Map<string, ToolExecutionComponent>();\r\n\r\n\t// Tool output expansion state\r\n\tprivate toolOutputExpanded = false;\r\n\r\n\t// Thinking block visibility state\r\n\tprivate hideThinkingBlock = false;\r\n\r\n\t// Skill commands: command name -> skill file path\r\n\tprivate skillCommands = new Map<string, string>();\r\n\r\n\t// Agent subscription unsubscribe function\r\n\tprivate unsubscribe?: () => void;\r\n\r\n\t// Track if editor is in bash mode (text starts with !)\r\n\tprivate isBashMode = false;\r\n\r\n\t// Track current bash execution component\r\n\tprivate bashComponent: BashExecutionComponent | undefined = undefined;\r\n\r\n\t// Track pending bash components (shown in pending area, moved to chat on submit)\r\n\tprivate pendingBashComponents: BashExecutionComponent[] = [];\r\n\r\n\t// Auto-compaction state\r\n\tprivate autoCompactionLoader: Loader | undefined = undefined;\r\n\tprivate autoCompactionEscapeHandler?: () => void;\r\n\r\n\t// Auto-retry state\r\n\tprivate retryLoader: Loader | undefined = undefined;\r\n\tprivate retryEscapeHandler?: () => void;\r\n\r\n\t// Messages queued while compaction is running\r\n\tprivate compactionQueuedMessages: CompactionQueuedMessage[] = [];\r\n\r\n\t// Shutdown state\r\n\tprivate shutdownRequested = false;\r\n\r\n\t// Extension UI state\r\n\tprivate extensionSelector: ExtensionSelectorComponent | undefined = undefined;\r\n\tprivate extensionInput: ExtensionInputComponent | undefined = undefined;\r\n\tprivate extensionEditor: ExtensionEditorComponent | undefined = undefined;\r\n\tprivate extensionTerminalInputUnsubscribers = new Set<() => void>();\r\n\r\n\t// Extension widgets (components rendered above/below the editor)\r\n\tprivate extensionWidgetsAbove = new Map<string, Component & { dispose?(): void }>();\r\n\tprivate extensionWidgetsBelow = new Map<string, Component & { dispose?(): void }>();\r\n\tprivate widgetContainerAbove!: Container;\r\n\tprivate widgetContainerBelow!: Container;\r\n\r\n\t// Custom footer from extension (undefined = use built-in footer)\r\n\tprivate customFooter: (Component & { dispose?(): void }) | undefined = undefined;\r\n\r\n\t// Header container that holds the built-in or custom header\r\n\tprivate headerContainer: Container;\r\n\r\n\t// Built-in header (logo + keybinding hints + changelog)\r\n\tprivate builtInHeader: Component | undefined = undefined;\r\n\r\n\t// Custom header from extension (undefined = use built-in header)\r\n\tprivate customHeader: (Component & { dispose?(): void }) | undefined = undefined;\r\n\r\n\t// Convenience accessors\r\n\tprivate get agent() {\r\n\t\treturn this.session.agent;\r\n\t}\r\n\tprivate get sessionManager() {\r\n\t\treturn this.session.sessionManager;\r\n\t}\r\n\tprivate get settingsManager() {\r\n\t\treturn this.session.settingsManager;\r\n\t}\r\n\r\n\tconstructor(\r\n\t\tsession: AgentSession,\r\n\t\tprivate options: InteractiveModeOptions = {},\r\n\t) {\r\n\t\tthis.session = session;\r\n\t\tthis.version = VERSION;\r\n\t\tthis.ui = new TUI(new ProcessTerminal(), this.settingsManager.getShowHardwareCursor());\r\n\t\tthis.ui.setClearOnShrink(this.settingsManager.getClearOnShrink());\r\n\t\tthis.headerContainer = new Container();\r\n\t\tthis.chatContainer = new Container();\r\n\t\tthis.pendingMessagesContainer = new Container();\r\n\t\tthis.statusContainer = new Container();\r\n\t\tthis.widgetContainerAbove = new Container();\r\n\t\tthis.widgetContainerBelow = new Container();\r\n\t\tthis.keybindings = KeybindingsManager.create();\r\n\t\tconst editorPaddingX = this.settingsManager.getEditorPaddingX();\r\n\t\tconst autocompleteMaxVisible = this.settingsManager.getAutocompleteMaxVisible();\r\n\t\tthis.defaultEditor = new CustomEditor(this.ui, getEditorTheme(), this.keybindings, {\r\n\t\t\tpaddingX: editorPaddingX,\r\n\t\t\tautocompleteMaxVisible,\r\n\t\t});\r\n\t\tthis.editor = this.defaultEditor;\r\n\t\tthis.editorContainer = new Container();\r\n\t\tthis.editorContainer.addChild(this.editor as Component);\r\n\t\tthis.footerDataProvider = new FooterDataProvider();\r\n\t\tthis.footer = new FooterComponent(session, this.footerDataProvider);\r\n\t\tthis.footer.setAutoCompactEnabled(session.autoCompactionEnabled);\r\n\r\n\t\t// Load hide thinking block setting\r\n\t\tthis.hideThinkingBlock = this.settingsManager.getHideThinkingBlock();\r\n\r\n\t\t// Register themes from resource loader and initialize\r\n\t\tsetRegisteredThemes(this.session.resourceLoader.getThemes().themes);\r\n\t\tinitTheme(this.settingsManager.getTheme(), true);\r\n\t}\r\n\r\n\tprivate setupAutocomplete(fdPath: string | undefined): void {\r\n\t\t// Define commands for autocomplete\r\n\t\tconst slashCommands: SlashCommand[] = BUILTIN_SLASH_COMMANDS.map((command) => ({\r\n\t\t\tname: command.name,\r\n\t\t\tdescription: command.description,\r\n\t\t}));\r\n\r\n\t\tconst modelCommand = slashCommands.find((command) => command.name === \"model\");\r\n\t\tif (modelCommand) {\r\n\t\t\tmodelCommand.getArgumentCompletions = (prefix: string): AutocompleteItem[] | null => {\r\n\t\t\t\t// Get available models (scoped or from registry)\r\n\t\t\t\tconst models =\r\n\t\t\t\t\tthis.session.scopedModels.length > 0\r\n\t\t\t\t\t\t? this.session.scopedModels.map((s) => s.model)\r\n\t\t\t\t\t\t: this.session.modelRegistry.getAvailable();\r\n\r\n\t\t\t\tif (models.length === 0) return null;\r\n\r\n\t\t\t\t// Create items with provider/id format\r\n\t\t\t\tconst items = models.map((m) => ({\r\n\t\t\t\t\tid: m.id,\r\n\t\t\t\t\tprovider: m.provider,\r\n\t\t\t\t\tlabel: `${m.provider}/${m.id}`,\r\n\t\t\t\t}));\r\n\r\n\t\t\t\t// Fuzzy filter by model ID + provider (allows \"opus anthropic\" to match)\r\n\t\t\t\tconst filtered = fuzzyFilter(items, prefix, (item) => `${item.id} ${item.provider}`);\r\n\r\n\t\t\t\tif (filtered.length === 0) return null;\r\n\r\n\t\t\t\treturn filtered.map((item) => ({\r\n\t\t\t\t\tvalue: item.label,\r\n\t\t\t\t\tlabel: item.id,\r\n\t\t\t\t\tdescription: item.provider,\r\n\t\t\t\t}));\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\t// Convert prompt templates to SlashCommand format for autocomplete\r\n\t\tconst templateCommands: SlashCommand[] = this.session.promptTemplates.map((cmd) => ({\r\n\t\t\tname: cmd.name,\r\n\t\t\tdescription: cmd.description,\r\n\t\t}));\r\n\r\n\t\t// Convert extension commands to SlashCommand format\r\n\t\tconst builtinCommandNames = new Set(slashCommands.map((c) => c.name));\r\n\t\tconst extensionCommands: SlashCommand[] = (\r\n\t\t\tthis.session.extensionRunner?.getRegisteredCommands(builtinCommandNames) ?? []\r\n\t\t).map((cmd) => ({\r\n\t\t\tname: cmd.name,\r\n\t\t\tdescription: cmd.description ?? \"(extension command)\",\r\n\t\t\tgetArgumentCompletions: cmd.getArgumentCompletions,\r\n\t\t}));\r\n\r\n\t\t// Build skill commands from session.skills (if enabled)\r\n\t\tthis.skillCommands.clear();\r\n\t\tconst skillCommandList: SlashCommand[] = [];\r\n\t\tif (this.settingsManager.getEnableSkillCommands()) {\r\n\t\t\tfor (const skill of this.session.resourceLoader.getSkills().skills) {\r\n\t\t\t\tconst commandName = `skill:${skill.name}`;\r\n\t\t\t\tthis.skillCommands.set(commandName, skill.filePath);\r\n\t\t\t\tskillCommandList.push({ name: commandName, description: skill.description });\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Setup autocomplete\r\n\t\tthis.autocompleteProvider = new CombinedAutocompleteProvider(\r\n\t\t\t[...slashCommands, ...templateCommands, ...extensionCommands, ...skillCommandList],\r\n\t\t\tprocess.cwd(),\r\n\t\t\tfdPath,\r\n\t\t);\r\n\t\tthis.defaultEditor.setAutocompleteProvider(this.autocompleteProvider);\r\n\t\tif (this.editor !== this.defaultEditor) {\r\n\t\t\tthis.editor.setAutocompleteProvider?.(this.autocompleteProvider);\r\n\t\t}\r\n\t}\r\n\r\n\tasync init(): Promise<void> {\r\n\t\tif (this.isInitialized) return;\r\n\r\n\t\t// Load changelog (only show new entries, skip for resumed sessions)\r\n\t\tthis.changelogMarkdown = this.getChangelogForDisplay();\r\n\r\n\t\t// Ensure fd and rg are available (downloads if missing, adds to PATH via getBinDir)\r\n\t\t// Both are needed: fd for autocomplete, rg for grep tool and bash commands\r\n\t\tconst [fdPath] = await Promise.all([ensureTool(\"fd\"), ensureTool(\"rg\")]);\r\n\t\tthis.fdPath = fdPath;\r\n\r\n\t\t// Add header container as first child\r\n\t\tthis.ui.addChild(this.headerContainer);\r\n\r\n\t\t// Add header with keybindings from config (unless silenced)\r\n\t\tif (this.options.verbose || !this.settingsManager.getQuietStartup()) {\r\n\t\t\tconst logo = theme.bold(theme.fg(\"accent\", APP_NAME)) + theme.fg(\"dim\", ` v${this.version}`);\r\n\r\n\t\t\t// Build startup instructions using keybinding hint helpers\r\n\t\t\tconst kb = this.keybindings;\r\n\t\t\tconst hint = (action: AppAction, desc: string) => appKeyHint(kb, action, desc);\r\n\r\n\t\t\tconst instructions = [\r\n\t\t\t\thint(\"interrupt\", \"to interrupt\"),\r\n\t\t\t\thint(\"clear\", \"to clear\"),\r\n\t\t\t\trawKeyHint(`${appKey(kb, \"clear\")} twice`, \"to exit\"),\r\n\t\t\t\thint(\"exit\", \"to exit (empty)\"),\r\n\t\t\t\thint(\"suspend\", \"to suspend\"),\r\n\t\t\t\tkeyHint(\"deleteToLineEnd\", \"to delete to end\"),\r\n\t\t\t\thint(\"cycleThinkingLevel\", \"to cycle thinking level\"),\r\n\t\t\t\trawKeyHint(`${appKey(kb, \"cycleModelForward\")}/${appKey(kb, \"cycleModelBackward\")}`, \"to cycle models\"),\r\n\t\t\t\thint(\"selectModel\", \"to select model\"),\r\n\t\t\t\thint(\"expandTools\", \"to expand tools\"),\r\n\t\t\t\thint(\"toggleThinking\", \"to expand thinking\"),\r\n\t\t\t\thint(\"externalEditor\", \"for external editor\"),\r\n\t\t\t\trawKeyHint(\"/\", \"for commands\"),\r\n\t\t\t\trawKeyHint(\"!\", \"to run bash\"),\r\n\t\t\t\trawKeyHint(\"!!\", \"to run bash (no context)\"),\r\n\t\t\t\thint(\"followUp\", \"to queue follow-up\"),\r\n\t\t\t\thint(\"dequeue\", \"to edit all queued messages\"),\r\n\t\t\t\thint(\"pasteImage\", \"to paste image\"),\r\n\t\t\t\trawKeyHint(\"drop files\", \"to attach\"),\r\n\t\t\t].join(\"\\n\");\r\n\t\t\tthis.builtInHeader = new Text(`${logo}\\n${instructions}`, 1, 0);\r\n\r\n\t\t\t// Setup UI layout\r\n\t\t\tthis.headerContainer.addChild(new Spacer(1));\r\n\t\t\tthis.headerContainer.addChild(this.builtInHeader);\r\n\t\t\tthis.headerContainer.addChild(new Spacer(1));\r\n\r\n\t\t\t// Add changelog if provided\r\n\t\t\tif (this.changelogMarkdown) {\r\n\t\t\t\tthis.headerContainer.addChild(new DynamicBorder());\r\n\t\t\t\tif (this.settingsManager.getCollapseChangelog()) {\r\n\t\t\t\t\tconst versionMatch = this.changelogMarkdown.match(/##\\s+\\[?(\\d+\\.\\d+\\.\\d+)\\]?/);\r\n\t\t\t\t\tconst latestVersion = versionMatch ? versionMatch[1] : this.version;\r\n\t\t\t\t\tconst condensedText = `Updated to v${latestVersion}. Use ${theme.bold(\"/changelog\")} to view full changelog.`;\r\n\t\t\t\t\tthis.headerContainer.addChild(new Text(condensedText, 1, 0));\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.headerContainer.addChild(new Text(theme.bold(theme.fg(\"accent\", \"What's New\")), 1, 0));\r\n\t\t\t\t\tthis.headerContainer.addChild(new Spacer(1));\r\n\t\t\t\t\tthis.headerContainer.addChild(\r\n\t\t\t\t\t\tnew Markdown(this.changelogMarkdown.trim(), 1, 0, this.getMarkdownThemeWithSettings()),\r\n\t\t\t\t\t);\r\n\t\t\t\t\tthis.headerContainer.addChild(new Spacer(1));\r\n\t\t\t\t}\r\n\t\t\t\tthis.headerContainer.addChild(new DynamicBorder());\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\t// Minimal header when silenced\r\n\t\t\tthis.builtInHeader = new Text(\"\", 0, 0);\r\n\t\t\tthis.headerContainer.addChild(this.builtInHeader);\r\n\t\t\tif (this.changelogMarkdown) {\r\n\t\t\t\t// Still show changelog notification even in silent mode\r\n\t\t\t\tthis.headerContainer.addChild(new Spacer(1));\r\n\t\t\t\tconst versionMatch = this.changelogMarkdown.match(/##\\s+\\[?(\\d+\\.\\d+\\.\\d+)\\]?/);\r\n\t\t\t\tconst latestVersion = versionMatch ? versionMatch[1] : this.version;\r\n\t\t\t\tconst condensedText = `Updated to v${latestVersion}. Use ${theme.bold(\"/changelog\")} to view full changelog.`;\r\n\t\t\t\tthis.headerContainer.addChild(new Text(condensedText, 1, 0));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.ui.addChild(this.chatContainer);\r\n\t\tthis.ui.addChild(this.pendingMessagesContainer);\r\n\t\tthis.ui.addChild(this.statusContainer);\r\n\t\tthis.renderWidgets(); // Initialize with default spacer\r\n\t\tthis.ui.addChild(this.widgetContainerAbove);\r\n\t\tthis.ui.addChild(this.editorContainer);\r\n\t\tthis.ui.addChild(this.widgetContainerBelow);\r\n\t\tthis.ui.addChild(this.footer);\r\n\t\tthis.ui.setFocus(this.editor);\r\n\r\n\t\tthis.setupKeyHandlers();\r\n\t\tthis.setupEditorSubmitHandler();\r\n\r\n\t\t// Initialize extensions first so resources are shown before messages\r\n\t\tawait this.initExtensions();\r\n\r\n\t\t// Render initial messages AFTER showing loaded resources\r\n\t\tthis.renderInitialMessages();\r\n\r\n\t\t// Start the UI\r\n\t\tthis.ui.start();\r\n\t\tthis.isInitialized = true;\r\n\r\n\t\t// Set terminal title\r\n\t\tthis.updateTerminalTitle();\r\n\r\n\t\t// Subscribe to agent events\r\n\t\tthis.subscribeToAgent();\r\n\r\n\t\t// Set up theme file watcher\r\n\t\tonThemeChange(() => {\r\n\t\t\tthis.ui.invalidate();\r\n\t\t\tthis.updateEditorBorderColor();\r\n\t\t\tthis.ui.requestRender();\r\n\t\t});\r\n\r\n\t\t// Set up git branch watcher (uses provider instead of footer)\r\n\t\tthis.footerDataProvider.onBranchChange(() => {\r\n\t\t\tthis.ui.requestRender();\r\n\t\t});\r\n\r\n\t\t// Initialize available provider count for footer display\r\n\t\tawait this.updateAvailableProviderCount();\r\n\t}\r\n\r\n\t/**\r\n\t * Update terminal title with session name and cwd.\r\n\t */\r\n\tprivate updateTerminalTitle(): void {\r\n\t\tconst cwdBasename = path.basename(process.cwd());\r\n\t\tconst sessionName = this.sessionManager.getSessionName();\r\n\t\tif (sessionName) {\r\n\t\t\tthis.ui.terminal.setTitle(`π - ${sessionName} - ${cwdBasename}`);\r\n\t\t} else {\r\n\t\t\tthis.ui.terminal.setTitle(`π - ${cwdBasename}`);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Run the interactive mode. This is the main entry point.\r\n\t * Initializes the UI, shows warnings, processes initial messages, and starts the interactive loop.\r\n\t */\r\n\tasync run(): Promise<void> {\r\n\t\tawait this.init();\r\n\r\n\t\t// Start version check asynchronously\r\n\t\tthis.checkForNewVersion().then((newVersion) => {\r\n\t\t\tif (newVersion) {\r\n\t\t\t\tthis.showNewVersionNotification(newVersion);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t// Show startup warnings\r\n\t\tconst { migratedProviders, modelFallbackMessage, initialMessage, initialImages, initialMessages } = this.options;\r\n\r\n\t\tif (migratedProviders && migratedProviders.length > 0) {\r\n\t\t\tthis.showWarning(`Migrated credentials to auth.json: ${migratedProviders.join(\", \")}`);\r\n\t\t}\r\n\r\n\t\tconst modelsJsonError = this.session.modelRegistry.getError();\r\n\t\tif (modelsJsonError) {\r\n\t\t\tthis.showError(`models.json error: ${modelsJsonError}`);\r\n\t\t}\r\n\r\n\t\tif (modelFallbackMessage) {\r\n\t\t\tthis.showWarning(modelFallbackMessage);\r\n\t\t}\r\n\r\n\t\t// Process initial messages\r\n\t\tif (initialMessage) {\r\n\t\t\ttry {\r\n\t\t\t\tawait this.session.prompt(initialMessage, { images: initialImages });\r\n\t\t\t} catch (error: unknown) {\r\n\t\t\t\tconst errorMessage = error instanceof Error ? error.message : \"Unknown error occurred\";\r\n\t\t\t\tthis.showError(errorMessage);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (initialMessages) {\r\n\t\t\tfor (const message of initialMessages) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tawait this.session.prompt(message);\r\n\t\t\t\t} catch (error: unknown) {\r\n\t\t\t\t\tconst errorMessage = error instanceof Error ? error.message : \"Unknown error occurred\";\r\n\t\t\t\t\tthis.showError(errorMessage);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Main interactive loop\r\n\t\twhile (true) {\r\n\t\t\tconst userInput = await this.getUserInput();\r\n\t\t\ttry {\r\n\t\t\t\tawait this.session.prompt(userInput);\r\n\t\t\t} catch (error: unknown) {\r\n\t\t\t\tconst errorMessage = error instanceof Error ? error.message : \"Unknown error occurred\";\r\n\t\t\t\tthis.showError(errorMessage);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Check npm registry for a newer version.\r\n\t */\r\n\tprivate async checkForNewVersion(): Promise<string | undefined> {\r\n\t\tif (process.env.PI_SKIP_VERSION_CHECK) return undefined;\r\n\r\n\t\ttry {\r\n\t\t\tconst response = await fetch(\"https://registry.npmjs.org/@imdigitalashish/zpi/latest\");\r\n\t\t\tif (!response.ok) return undefined;\r\n\r\n\t\t\tconst data = (await response.json()) as { version?: string };\r\n\t\t\tconst latestVersion = data.version;\r\n\r\n\t\t\tif (latestVersion && latestVersion !== this.version) {\r\n\t\t\t\treturn latestVersion;\r\n\t\t\t}\r\n\r\n\t\t\treturn undefined;\r\n\t\t} catch {\r\n\t\t\treturn undefined;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Get changelog entries to display on startup.\r\n\t * Only shows new entries since last seen version, skips for resumed sessions.\r\n\t */\r\n\tprivate getChangelogForDisplay(): string | undefined {\r\n\t\t// Skip changelog for resumed/continued sessions (already have messages)\r\n\t\tif (this.session.state.messages.length > 0) {\r\n\t\t\treturn undefined;\r\n\t\t}\r\n\r\n\t\tconst lastVersion = this.settingsManager.getLastChangelogVersion();\r\n\t\tconst changelogPath = getChangelogPath();\r\n\t\tconst entries = parseChangelog(changelogPath);\r\n\r\n\t\tif (!lastVersion) {\r\n\t\t\t// Fresh install - just record the version, don't show changelog\r\n\t\t\tthis.settingsManager.setLastChangelogVersion(VERSION);\r\n\t\t\treturn undefined;\r\n\t\t} else {\r\n\t\t\tconst newEntries = getNewEntries(entries, lastVersion);\r\n\t\t\tif (newEntries.length > 0) {\r\n\t\t\t\tthis.settingsManager.setLastChangelogVersion(VERSION);\r\n\t\t\t\treturn newEntries.map((e) => e.content).join(\"\\n\\n\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn undefined;\r\n\t}\r\n\r\n\tprivate getMarkdownThemeWithSettings(): MarkdownTheme {\r\n\t\treturn {\r\n\t\t\t...getMarkdownTheme(),\r\n\t\t\tcodeBlockIndent: this.settingsManager.getCodeBlockIndent(),\r\n\t\t};\r\n\t}\r\n\r\n\t// =========================================================================\r\n\t// Extension System\r\n\t// =========================================================================\r\n\r\n\tprivate formatDisplayPath(p: string): string {\r\n\t\tconst home = os.homedir();\r\n\t\tlet result = p;\r\n\r\n\t\t// Replace home directory with ~\r\n\t\tif (result.startsWith(home)) {\r\n\t\t\tresult = `~${result.slice(home.length)}`;\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\t/**\r\n\t * Get a short path relative to the package root for display.\r\n\t */\r\n\tprivate getShortPath(fullPath: string, source: string): string {\r\n\t\t// For npm packages, show path relative to node_modules/pkg/\r\n\t\tconst npmMatch = fullPath.match(/node_modules\\/(@?[^/]+(?:\\/[^/]+)?)\\/(.*)/);\r\n\t\tif (npmMatch && source.startsWith(\"npm:\")) {\r\n\t\t\treturn npmMatch[2];\r\n\t\t}\r\n\r\n\t\t// For git packages, show path relative to repo root\r\n\t\tconst gitMatch = fullPath.match(/git\\/[^/]+\\/[^/]+\\/(.*)/);\r\n\t\tif (gitMatch && source.startsWith(\"git:\")) {\r\n\t\t\treturn gitMatch[1];\r\n\t\t}\r\n\r\n\t\t// For local/auto, just use formatDisplayPath\r\n\t\treturn this.formatDisplayPath(fullPath);\r\n\t}\r\n\r\n\tprivate getDisplaySourceInfo(\r\n\t\tsource: string,\r\n\t\tscope: string,\r\n\t): { label: string; scopeLabel?: string; color: \"accent\" | \"muted\" } {\r\n\t\tif (source === \"local\") {\r\n\t\t\tif (scope === \"user\") {\r\n\t\t\t\treturn { label: \"user\", color: \"muted\" };\r\n\t\t\t}\r\n\t\t\tif (scope === \"project\") {\r\n\t\t\t\treturn { label: \"project\", color: \"muted\" };\r\n\t\t\t}\r\n\t\t\tif (scope === \"temporary\") {\r\n\t\t\t\treturn { label: \"path\", scopeLabel: \"temp\", color: \"muted\" };\r\n\t\t\t}\r\n\t\t\treturn { label: \"path\", color: \"muted\" };\r\n\t\t}\r\n\r\n\t\tif (source === \"cli\") {\r\n\t\t\treturn { label: \"path\", scopeLabel: scope === \"temporary\" ? \"temp\" : undefined, color: \"muted\" };\r\n\t\t}\r\n\r\n\t\tconst scopeLabel =\r\n\t\t\tscope === \"user\" ? \"user\" : scope === \"project\" ? \"project\" : scope === \"temporary\" ? \"temp\" : undefined;\r\n\t\treturn { label: source, scopeLabel, color: \"accent\" };\r\n\t}\r\n\r\n\tprivate getScopeGroup(source: string, scope: string): \"user\" | \"project\" | \"path\" {\r\n\t\tif (source === \"cli\" || scope === \"temporary\") return \"path\";\r\n\t\tif (scope === \"user\") return \"user\";\r\n\t\tif (scope === \"project\") return \"project\";\r\n\t\treturn \"path\";\r\n\t}\r\n\r\n\tprivate isPackageSource(source: string): boolean {\r\n\t\treturn source.startsWith(\"npm:\") || source.startsWith(\"git:\");\r\n\t}\r\n\r\n\tprivate buildScopeGroups(\r\n\t\tpaths: string[],\r\n\t\tmetadata: Map<string, { source: string; scope: string; origin: string }>,\r\n\t): Array<{ scope: \"user\" | \"project\" | \"path\"; paths: string[]; packages: Map<string, string[]> }> {\r\n\t\tconst groups: Record<\r\n\t\t\t\"user\" | \"project\" | \"path\",\r\n\t\t\t{ scope: \"user\" | \"project\" | \"path\"; paths: string[]; packages: Map<string, string[]> }\r\n\t\t> = {\r\n\t\t\tuser: { scope: \"user\", paths: [], packages: new Map() },\r\n\t\t\tproject: { scope: \"project\", paths: [], packages: new Map() },\r\n\t\t\tpath: { scope: \"path\", paths: [], packages: new Map() },\r\n\t\t};\r\n\r\n\t\tfor (const p of paths) {\r\n\t\t\tconst meta = this.findMetadata(p, metadata);\r\n\t\t\tconst source = meta?.source ?? \"local\";\r\n\t\t\tconst scope = meta?.scope ?? \"project\";\r\n\t\t\tconst groupKey = this.getScopeGroup(source, scope);\r\n\t\t\tconst group = groups[groupKey];\r\n\r\n\t\t\tif (this.isPackageSource(source)) {\r\n\t\t\t\tconst list = group.packages.get(source) ?? [];\r\n\t\t\t\tlist.push(p);\r\n\t\t\t\tgroup.packages.set(source, list);\r\n\t\t\t} else {\r\n\t\t\t\tgroup.paths.push(p);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn [groups.user, groups.project, groups.path].filter(\r\n\t\t\t(group) => group.paths.length > 0 || group.packages.size > 0,\r\n\t\t);\r\n\t}\r\n\r\n\tprivate formatScopeGroups(\r\n\t\tgroups: Array<{ scope: \"user\" | \"project\" | \"path\"; paths: string[]; packages: Map<string, string[]> }>,\r\n\t\toptions: {\r\n\t\t\tformatPath: (p: string) => string;\r\n\t\t\tformatPackagePath: (p: string, source: string) => string;\r\n\t\t},\r\n\t): string {\r\n\t\tconst lines: string[] = [];\r\n\r\n\t\tfor (const group of groups) {\r\n\t\t\tlines.push(` ${theme.fg(\"accent\", group.scope)}`);\r\n\r\n\t\t\tconst sortedPaths = [...group.paths].sort((a, b) => a.localeCompare(b));\r\n\t\t\tfor (const p of sortedPaths) {\r\n\t\t\t\tlines.push(theme.fg(\"dim\", ` ${options.formatPath(p)}`));\r\n\t\t\t}\r\n\r\n\t\t\tconst sortedPackages = Array.from(group.packages.entries()).sort(([a], [b]) => a.localeCompare(b));\r\n\t\t\tfor (const [source, paths] of sortedPackages) {\r\n\t\t\t\tlines.push(` ${theme.fg(\"mdLink\", source)}`);\r\n\t\t\t\tconst sortedPackagePaths = [...paths].sort((a, b) => a.localeCompare(b));\r\n\t\t\t\tfor (const p of sortedPackagePaths) {\r\n\t\t\t\t\tlines.push(theme.fg(\"dim\", ` ${options.formatPackagePath(p, source)}`));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn lines.join(\"\\n\");\r\n\t}\r\n\r\n\t/**\r\n\t * Find metadata for a path, checking parent directories if exact match fails.\r\n\t * Package manager stores metadata for directories, but we display file paths.\r\n\t */\r\n\tprivate findMetadata(\r\n\t\tp: string,\r\n\t\tmetadata: Map<string, { source: string; scope: string; origin: string }>,\r\n\t): { source: string; scope: string; origin: string } | undefined {\r\n\t\t// Try exact match first\r\n\t\tconst exact = metadata.get(p);\r\n\t\tif (exact) return exact;\r\n\r\n\t\t// Try parent directories (package manager stores directory paths)\r\n\t\tlet current = p;\r\n\t\twhile (current.includes(\"/\")) {\r\n\t\t\tcurrent = current.substring(0, current.lastIndexOf(\"/\"));\r\n\t\t\tconst parent = metadata.get(current);\r\n\t\t\tif (parent) return parent;\r\n\t\t}\r\n\r\n\t\treturn undefined;\r\n\t}\r\n\r\n\t/**\r\n\t * Format a path with its source/scope info from metadata.\r\n\t */\r\n\tprivate formatPathWithSource(\r\n\t\tp: string,\r\n\t\tmetadata: Map<string, { source: string; scope: string; origin: string }>,\r\n\t): string {\r\n\t\tconst meta = this.findMetadata(p, metadata);\r\n\t\tif (meta) {\r\n\t\t\tconst shortPath = this.getShortPath(p, meta.source);\r\n\t\t\tconst { label, scopeLabel } = this.getDisplaySourceInfo(meta.source, meta.scope);\r\n\t\t\tconst labelText = scopeLabel ? `${label} (${scopeLabel})` : label;\r\n\t\t\treturn `${labelText} ${shortPath}`;\r\n\t\t}\r\n\t\treturn this.formatDisplayPath(p);\r\n\t}\r\n\r\n\t/**\r\n\t * Format resource diagnostics with nice collision display using metadata.\r\n\t */\r\n\tprivate formatDiagnostics(\r\n\t\tdiagnostics: readonly ResourceDiagnostic[],\r\n\t\tmetadata: Map<string, { source: string; scope: string; origin: string }>,\r\n\t): string {\r\n\t\tconst lines: string[] = [];\r\n\r\n\t\t// Group collision diagnostics by name\r\n\t\tconst collisions = new Map<string, ResourceDiagnostic[]>();\r\n\t\tconst otherDiagnostics: ResourceDiagnostic[] = [];\r\n\r\n\t\tfor (const d of diagnostics) {\r\n\t\t\tif (d.type === \"collision\" && d.collision) {\r\n\t\t\t\tconst list = collisions.get(d.collision.name) ?? [];\r\n\t\t\t\tlist.push(d);\r\n\t\t\t\tcollisions.set(d.collision.name, list);\r\n\t\t\t} else {\r\n\t\t\t\totherDiagnostics.push(d);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Format collision diagnostics grouped by name\r\n\t\tfor (const [name, collisionList] of collisions) {\r\n\t\t\tconst first = collisionList[0]?.collision;\r\n\t\t\tif (!first) continue;\r\n\t\t\tlines.push(theme.fg(\"warning\", ` \"${name}\" collision:`));\r\n\t\t\t// Show winner\r\n\t\t\tlines.push(\r\n\t\t\t\ttheme.fg(\"dim\", ` ${theme.fg(\"success\", \"✓\")} ${this.formatPathWithSource(first.winnerPath, metadata)}`),\r\n\t\t\t);\r\n\t\t\t// Show all losers\r\n\t\t\tfor (const d of collisionList) {\r\n\t\t\t\tif (d.collision) {\r\n\t\t\t\t\tlines.push(\r\n\t\t\t\t\t\ttheme.fg(\r\n\t\t\t\t\t\t\t\"dim\",\r\n\t\t\t\t\t\t\t` ${theme.fg(\"warning\", \"✗\")} ${this.formatPathWithSource(d.collision.loserPath, metadata)} (skipped)`,\r\n\t\t\t\t\t\t),\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Format other diagnostics (skill name collisions, parse errors, etc.)\r\n\t\tfor (const d of otherDiagnostics) {\r\n\t\t\tif (d.path) {\r\n\t\t\t\t// Use metadata-aware formatting for paths\r\n\t\t\t\tconst sourceInfo = this.formatPathWithSource(d.path, metadata);\r\n\t\t\t\tlines.push(theme.fg(d.type === \"error\" ? \"error\" : \"warning\", ` ${sourceInfo}`));\r\n\t\t\t\tlines.push(theme.fg(d.type === \"error\" ? \"error\" : \"warning\", ` ${d.message}`));\r\n\t\t\t} else {\r\n\t\t\t\tlines.push(theme.fg(d.type === \"error\" ? \"error\" : \"warning\", ` ${d.message}`));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn lines.join(\"\\n\");\r\n\t}\r\n\r\n\tprivate showLoadedResources(options?: {\r\n\t\textensionPaths?: string[];\r\n\t\tforce?: boolean;\r\n\t\tshowDiagnosticsWhenQuiet?: boolean;\r\n\t}): void {\r\n\t\tconst showListing = options?.force || this.options.verbose || !this.settingsManager.getQuietStartup();\r\n\t\tconst showDiagnostics = showListing || options?.showDiagnosticsWhenQuiet === true;\r\n\t\tif (!showListing && !showDiagnostics) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst metadata = this.session.resourceLoader.getPathMetadata();\r\n\t\tconst sectionHeader = (name: string, color: ThemeColor = \"mdHeading\") => theme.fg(color, `[${name}]`);\r\n\r\n\t\tconst skillsResult = this.session.resourceLoader.getSkills();\r\n\t\tconst promptsResult = this.session.resourceLoader.getPrompts();\r\n\t\tconst themesResult = this.session.resourceLoader.getThemes();\r\n\r\n\t\tif (showListing) {\r\n\t\t\tconst contextFiles = this.session.resourceLoader.getAgentsFiles().agentsFiles;\r\n\t\t\tif (contextFiles.length > 0) {\r\n\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\r\n\t\t\t\tconst contextList = contextFiles\r\n\t\t\t\t\t.map((f) => theme.fg(\"dim\", ` ${this.formatDisplayPath(f.path)}`))\r\n\t\t\t\t\t.join(\"\\n\");\r\n\t\t\t\tthis.chatContainer.addChild(new Text(`${sectionHeader(\"Context\")}\\n${contextList}`, 0, 0));\r\n\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\r\n\t\t\t}\r\n\r\n\t\t\tconst skills = skillsResult.skills;\r\n\t\t\tif (skills.length > 0) {\r\n\t\t\t\tconst skillPaths = skills.map((s) => s.filePath);\r\n\t\t\t\tconst groups = this.buildScopeGroups(skillPaths, metadata);\r\n\t\t\t\tconst skillList = this.formatScopeGroups(groups, {\r\n\t\t\t\t\tformatPath: (p) => this.formatDisplayPath(p),\r\n\t\t\t\t\tformatPackagePath: (p, source) => this.getShortPath(p, source),\r\n\t\t\t\t});\r\n\t\t\t\tthis.chatContainer.addChild(new Text(`${sectionHeader(\"Skills\")}\\n${skillList}`, 0, 0));\r\n\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\r\n\t\t\t}\r\n\r\n\t\t\tconst templates = this.session.promptTemplates;\r\n\t\t\tif (templates.length > 0) {\r\n\t\t\t\tconst templatePaths = templates.map((t) => t.filePath);\r\n\t\t\t\tconst groups = this.buildScopeGroups(templatePaths, metadata);\r\n\t\t\t\tconst templateByPath = new Map(templates.map((t) => [t.filePath, t]));\r\n\t\t\t\tconst templateList = this.formatScopeGroups(groups, {\r\n\t\t\t\t\tformatPath: (p) => {\r\n\t\t\t\t\t\tconst template = templateByPath.get(p);\r\n\t\t\t\t\t\treturn template ? `/${template.name}` : this.formatDisplayPath(p);\r\n\t\t\t\t\t},\r\n\t\t\t\t\tformatPackagePath: (p) => {\r\n\t\t\t\t\t\tconst template = templateByPath.get(p);\r\n\t\t\t\t\t\treturn template ? `/${template.name}` : this.formatDisplayPath(p);\r\n\t\t\t\t\t},\r\n\t\t\t\t});\r\n\t\t\t\tthis.chatContainer.addChild(new Text(`${sectionHeader(\"Prompts\")}\\n${templateList}`, 0, 0));\r\n\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\r\n\t\t\t}\r\n\r\n\t\t\tconst extensionPaths = options?.extensionPaths ?? [];\r\n\t\t\tif (extensionPaths.length > 0) {\r\n\t\t\t\tconst groups = this.buildScopeGroups(extensionPaths, metadata);\r\n\t\t\t\tconst extList = this.formatScopeGroups(groups, {\r\n\t\t\t\t\tformatPath: (p) => this.formatDisplayPath(p),\r\n\t\t\t\t\tformatPackagePath: (p, source) => this.getShortPath(p, source),\r\n\t\t\t\t});\r\n\t\t\t\tthis.chatContainer.addChild(new Text(`${sectionHeader(\"Extensions\", \"mdHeading\")}\\n${extList}`, 0, 0));\r\n\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\r\n\t\t\t}\r\n\r\n\t\t\t// Show loaded themes (excluding built-in)\r\n\t\t\tconst loadedThemes = themesResult.themes;\r\n\t\t\tconst customThemes = loadedThemes.filter((t) => t.sourcePath);\r\n\t\t\tif (customThemes.length > 0) {\r\n\t\t\t\tconst themePaths = customThemes.map((t) => t.sourcePath!);\r\n\t\t\t\tconst groups = this.buildScopeGroups(themePaths, metadata);\r\n\t\t\t\tconst themeList = this.formatScopeGroups(groups, {\r\n\t\t\t\t\tformatPath: (p) => this.formatDisplayPath(p),\r\n\t\t\t\t\tformatPackagePath: (p, source) => this.getShortPath(p, source),\r\n\t\t\t\t});\r\n\t\t\t\tthis.chatContainer.addChild(new Text(`${sectionHeader(\"Themes\")}\\n${themeList}`, 0, 0));\r\n\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (showDiagnostics) {\r\n\t\t\tconst skillDiagnostics = skillsResult.diagnostics;\r\n\t\t\tif (skillDiagnostics.length > 0) {\r\n\t\t\t\tconst warningLines = this.formatDiagnostics(skillDiagnostics, metadata);\r\n\t\t\t\tthis.chatContainer.addChild(new Text(`${theme.fg(\"warning\", \"[Skill conflicts]\")}\\n${warningLines}`, 0, 0));\r\n\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\r\n\t\t\t}\r\n\r\n\t\t\tconst promptDiagnostics = promptsResult.diagnostics;\r\n\t\t\tif (promptDiagnostics.length > 0) {\r\n\t\t\t\tconst warningLines = this.formatDiagnostics(promptDiagnostics, metadata);\r\n\t\t\t\tthis.chatContainer.addChild(\r\n\t\t\t\t\tnew Text(`${theme.fg(\"warning\", \"[Prompt conflicts]\")}\\n${warningLines}`, 0, 0),\r\n\t\t\t\t);\r\n\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\r\n\t\t\t}\r\n\r\n\t\t\tconst extensionDiagnostics: ResourceDiagnostic[] = [];\r\n\t\t\tconst extensionErrors = this.session.resourceLoader.getExtensions().errors;\r\n\t\t\tif (extensionErrors.length > 0) {\r\n\t\t\t\tfor (const error of extensionErrors) {\r\n\t\t\t\t\textensionDiagnostics.push({ type: \"error\", message: error.error, path: error.path });\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tconst commandDiagnostics = this.session.extensionRunner?.getCommandDiagnostics() ?? [];\r\n\t\t\textensionDiagnostics.push(...commandDiagnostics);\r\n\r\n\t\t\tconst shortcutDiagnostics = this.session.extensionRunner?.getShortcutDiagnostics() ?? [];\r\n\t\t\textensionDiagnostics.push(...shortcutDiagnostics);\r\n\r\n\t\t\tif (extensionDiagnostics.length > 0) {\r\n\t\t\t\tconst warningLines = this.formatDiagnostics(extensionDiagnostics, metadata);\r\n\t\t\t\tthis.chatContainer.addChild(\r\n\t\t\t\t\tnew Text(`${theme.fg(\"warning\", \"[Extension issues]\")}\\n${warningLines}`, 0, 0),\r\n\t\t\t\t);\r\n\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\r\n\t\t\t}\r\n\r\n\t\t\tconst themeDiagnostics = themesResult.diagnostics;\r\n\t\t\tif (themeDiagnostics.length > 0) {\r\n\t\t\t\tconst warningLines = this.formatDiagnostics(themeDiagnostics, metadata);\r\n\t\t\t\tthis.chatContainer.addChild(new Text(`${theme.fg(\"warning\", \"[Theme conflicts]\")}\\n${warningLines}`, 0, 0));\r\n\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Initialize the extension system with TUI-based UI context.\r\n\t */\r\n\tprivate async initExtensions(): Promise<void> {\r\n\t\tconst uiContext = this.createExtensionUIContext();\r\n\t\tawait this.session.bindExtensions({\r\n\t\t\tuiContext,\r\n\t\t\tcommandContextActions: {\r\n\t\t\t\twaitForIdle: () => this.session.agent.waitForIdle(),\r\n\t\t\t\tnewSession: async (options) => {\r\n\t\t\t\t\tif (this.loadingAnimation) {\r\n\t\t\t\t\t\tthis.loadingAnimation.stop();\r\n\t\t\t\t\t\tthis.loadingAnimation = undefined;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis.statusContainer.clear();\r\n\r\n\t\t\t\t\t// Delegate to AgentSession (handles setup + agent state sync)\r\n\t\t\t\t\tconst success = await this.session.newSession(options);\r\n\t\t\t\t\tif (!success) {\r\n\t\t\t\t\t\treturn { cancelled: true };\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Clear UI state\r\n\t\t\t\t\tthis.chatContainer.clear();\r\n\t\t\t\t\tthis.pendingMessagesContainer.clear();\r\n\t\t\t\t\tthis.compactionQueuedMessages = [];\r\n\t\t\t\t\tthis.streamingComponent = undefined;\r\n\t\t\t\t\tthis.streamingMessage = undefined;\r\n\t\t\t\t\tthis.pendingTools.clear();\r\n\r\n\t\t\t\t\t// Render any messages added via setup, or show empty session\r\n\t\t\t\t\tthis.renderInitialMessages();\r\n\t\t\t\t\tthis.ui.requestRender();\r\n\r\n\t\t\t\t\treturn { cancelled: false };\r\n\t\t\t\t},\r\n\t\t\t\tfork: async (entryId) => {\r\n\t\t\t\t\tconst result = await this.session.fork(entryId);\r\n\t\t\t\t\tif (result.cancelled) {\r\n\t\t\t\t\t\treturn { cancelled: true };\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.chatContainer.clear();\r\n\t\t\t\t\tthis.renderInitialMessages();\r\n\t\t\t\t\tthis.editor.setText(result.selectedText);\r\n\t\t\t\t\tthis.showStatus(\"Forked to new session\");\r\n\r\n\t\t\t\t\treturn { cancelled: false };\r\n\t\t\t\t},\r\n\t\t\t\tnavigateTree: async (targetId, options) => {\r\n\t\t\t\t\tconst result = await this.session.navigateTree(targetId, {\r\n\t\t\t\t\t\tsummarize: options?.summarize,\r\n\t\t\t\t\t\tcustomInstructions: options?.customInstructions,\r\n\t\t\t\t\t\treplaceInstructions: options?.replaceInstructions,\r\n\t\t\t\t\t\tlabel: options?.label,\r\n\t\t\t\t\t});\r\n\t\t\t\t\tif (result.cancelled) {\r\n\t\t\t\t\t\treturn { cancelled: true };\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.chatContainer.clear();\r\n\t\t\t\t\tthis.renderInitialMessages();\r\n\t\t\t\t\tif (result.editorText && !this.editor.getText().trim()) {\r\n\t\t\t\t\t\tthis.editor.setText(result.editorText);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis.showStatus(\"Navigated to selected point\");\r\n\r\n\t\t\t\t\treturn { cancelled: false };\r\n\t\t\t\t},\r\n\t\t\t\tswitchSession: async (sessionPath) => {\r\n\t\t\t\t\tawait this.handleResumeSession(sessionPath);\r\n\t\t\t\t\treturn { cancelled: false };\r\n\t\t\t\t},\r\n\t\t\t\treload: async () => {\r\n\t\t\t\t\tawait this.handleReloadCommand();\r\n\t\t\t\t},\r\n\t\t\t},\r\n\t\t\tshutdownHandler: () => {\r\n\t\t\t\tthis.shutdownRequested = true;\r\n\t\t\t\tif (!this.session.isStreaming) {\r\n\t\t\t\t\tvoid this.shutdown();\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tonError: (error) => {\r\n\t\t\t\tthis.showExtensionError(error.extensionPath, error.error, error.stack);\r\n\t\t\t},\r\n\t\t});\r\n\r\n\t\tsetRegisteredThemes(this.session.resourceLoader.getThemes().themes);\r\n\t\tthis.setupAutocomplete(this.fdPath);\r\n\r\n\t\tconst extensionRunner = this.session.extensionRunner;\r\n\t\tif (!extensionRunner) {\r\n\t\t\tthis.showLoadedResources({ extensionPaths: [], force: false });\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.setupExtensionShortcuts(extensionRunner);\r\n\t\tthis.showLoadedResources({ extensionPaths: extensionRunner.getExtensionPaths(), force: false });\r\n\t}\r\n\r\n\t/**\r\n\t * Get a registered tool definition by name (for custom rendering).\r\n\t */\r\n\tprivate getRegisteredToolDefinition(toolName: string) {\r\n\t\tconst tools = this.session.extensionRunner?.getAllRegisteredTools() ?? [];\r\n\t\tconst registeredTool = tools.find((t) => t.definition.name === toolName);\r\n\t\treturn registeredTool?.definition;\r\n\t}\r\n\r\n\t/**\r\n\t * Set up keyboard shortcuts registered by extensions.\r\n\t */\r\n\tprivate setupExtensionShortcuts(extensionRunner: ExtensionRunner): void {\r\n\t\tconst shortcuts = extensionRunner.getShortcuts(this.keybindings.getEffectiveConfig());\r\n\t\tif (shortcuts.size === 0) return;\r\n\r\n\t\t// Create a context for shortcut handlers\r\n\t\tconst createContext = (): ExtensionContext => ({\r\n\t\t\tui: this.createExtensionUIContext(),\r\n\t\t\thasUI: true,\r\n\t\t\tcwd: process.cwd(),\r\n\t\t\tsessionManager: this.sessionManager,\r\n\t\t\tmodelRegistry: this.session.modelRegistry,\r\n\t\t\tmodel: this.session.model,\r\n\t\t\tisIdle: () => !this.session.isStreaming,\r\n\t\t\tabort: () => this.session.abort(),\r\n\t\t\thasPendingMessages: () => this.session.pendingMessageCount > 0,\r\n\t\t\tshutdown: () => {\r\n\t\t\t\tthis.shutdownRequested = true;\r\n\t\t\t},\r\n\t\t\tgetContextUsage: () => this.session.getContextUsage(),\r\n\t\t\tcompact: (options) => {\r\n\t\t\t\tvoid (async () => {\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tconst result = await this.executeCompaction(options?.customInstructions, false);\r\n\t\t\t\t\t\tif (result) {\r\n\t\t\t\t\t\t\toptions?.onComplete?.(result);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} catch (error) {\r\n\t\t\t\t\t\tconst err = error instanceof Error ? error : new Error(String(error));\r\n\t\t\t\t\t\toptions?.onError?.(err);\r\n\t\t\t\t\t}\r\n\t\t\t\t})();\r\n\t\t\t},\r\n\t\t\tgetSystemPrompt: () => this.session.systemPrompt,\r\n\t\t});\r\n\r\n\t\t// Set up the extension shortcut handler on the default editor\r\n\t\tthis.defaultEditor.onExtensionShortcut = (data: string) => {\r\n\t\t\tfor (const [shortcutStr, shortcut] of shortcuts) {\r\n\t\t\t\t// Cast to KeyId - extension shortcuts use the same format\r\n\t\t\t\tif (matchesKey(data, shortcutStr as KeyId)) {\r\n\t\t\t\t\t// Run handler async, don't block input\r\n\t\t\t\t\tPromise.resolve(shortcut.handler(createContext())).catch((err) => {\r\n\t\t\t\t\t\tthis.showError(`Shortcut handler error: ${err instanceof Error ? err.message : String(err)}`);\r\n\t\t\t\t\t});\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t};\r\n\t}\r\n\r\n\t/**\r\n\t * Set extension status text in the footer.\r\n\t */\r\n\tprivate setExtensionStatus(key: string, text: string | undefined): void {\r\n\t\tthis.footerDataProvider.setExtensionStatus(key, text);\r\n\t\tthis.ui.requestRender();\r\n\t}\r\n\r\n\t/**\r\n\t * Set an extension widget (string array or custom component).\r\n\t */\r\n\tprivate setExtensionWidget(\r\n\t\tkey: string,\r\n\t\tcontent: string[] | ((tui: TUI, thm: Theme) => Component & { dispose?(): void }) | undefined,\r\n\t\toptions?: ExtensionWidgetOptions,\r\n\t): void {\r\n\t\tconst placement = options?.placement ?? \"aboveEditor\";\r\n\t\tconst removeExisting = (map: Map<string, Component & { dispose?(): void }>) => {\r\n\t\t\tconst existing = map.get(key);\r\n\t\t\tif (existing?.dispose) existing.dispose();\r\n\t\t\tmap.delete(key);\r\n\t\t};\r\n\r\n\t\tremoveExisting(this.extensionWidgetsAbove);\r\n\t\tremoveExisting(this.extensionWidgetsBelow);\r\n\r\n\t\tif (content === undefined) {\r\n\t\t\tthis.renderWidgets();\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlet component: Component & { dispose?(): void };\r\n\r\n\t\tif (Array.isArray(content)) {\r\n\t\t\t// Wrap string array in a Container with Text components\r\n\t\t\tconst container = new Container();\r\n\t\t\tfor (const line of content.slice(0, InteractiveMode.MAX_WIDGET_LINES)) {\r\n\t\t\t\tcontainer.addChild(new Text(line, 1, 0));\r\n\t\t\t}\r\n\t\t\tif (content.length > InteractiveMode.MAX_WIDGET_LINES) {\r\n\t\t\t\tcontainer.addChild(new Text(theme.fg(\"muted\", \"... (widget truncated)\"), 1, 0));\r\n\t\t\t}\r\n\t\t\tcomponent = container;\r\n\t\t} else {\r\n\t\t\t// Factory function - create component\r\n\t\t\tcomponent = content(this.ui, theme);\r\n\t\t}\r\n\r\n\t\tconst targetMap = placement === \"belowEditor\" ? this.extensionWidgetsBelow : this.extensionWidgetsAbove;\r\n\t\ttargetMap.set(key, component);\r\n\t\tthis.renderWidgets();\r\n\t}\r\n\r\n\tprivate clearExtensionWidgets(): void {\r\n\t\tfor (const widget of this.extensionWidgetsAbove.values()) {\r\n\t\t\twidget.dispose?.();\r\n\t\t}\r\n\t\tfor (const widget of this.extensionWidgetsBelow.values()) {\r\n\t\t\twidget.dispose?.();\r\n\t\t}\r\n\t\tthis.extensionWidgetsAbove.clear();\r\n\t\tthis.extensionWidgetsBelow.clear();\r\n\t\tthis.renderWidgets();\r\n\t}\r\n\r\n\tprivate resetExtensionUI(): void {\r\n\t\tif (this.extensionSelector) {\r\n\t\t\tthis.hideExtensionSelector();\r\n\t\t}\r\n\t\tif (this.extensionInput) {\r\n\t\t\tthis.hideExtensionInput();\r\n\t\t}\r\n\t\tif (this.extensionEditor) {\r\n\t\t\tthis.hideExtensionEditor();\r\n\t\t}\r\n\t\tthis.ui.hideOverlay();\r\n\t\tthis.clearExtensionTerminalInputListeners();\r\n\t\tthis.setExtensionFooter(undefined);\r\n\t\tthis.setExtensionHeader(undefined);\r\n\t\tthis.clearExtensionWidgets();\r\n\t\tthis.footerDataProvider.clearExtensionStatuses();\r\n\t\tthis.footer.invalidate();\r\n\t\tthis.setCustomEditorComponent(undefined);\r\n\t\tthis.defaultEditor.onExtensionShortcut = undefined;\r\n\t\tthis.updateTerminalTitle();\r\n\t\tif (this.loadingAnimation) {\r\n\t\t\tthis.loadingAnimation.setMessage(\r\n\t\t\t\t`${this.defaultWorkingMessage} (${appKey(this.keybindings, \"interrupt\")} to interrupt)`,\r\n\t\t\t);\r\n\t\t}\r\n\t}\r\n\r\n\t// Maximum total widget lines to prevent viewport overflow\r\n\tprivate static readonly MAX_WIDGET_LINES = 10;\r\n\r\n\t/**\r\n\t * Render all extension widgets to the widget container.\r\n\t */\r\n\tprivate renderWidgets(): void {\r\n\t\tif (!this.widgetContainerAbove || !this.widgetContainerBelow) return;\r\n\t\tthis.renderWidgetContainer(this.widgetContainerAbove, this.extensionWidgetsAbove, true, true);\r\n\t\tthis.renderWidgetContainer(this.widgetContainerBelow, this.extensionWidgetsBelow, false, false);\r\n\t\tthis.ui.requestRender();\r\n\t}\r\n\r\n\tprivate renderWidgetContainer(\r\n\t\tcontainer: Container,\r\n\t\twidgets: Map<string, Component & { dispose?(): void }>,\r\n\t\tspacerWhenEmpty: boolean,\r\n\t\tleadingSpacer: boolean,\r\n\t): void {\r\n\t\tcontainer.clear();\r\n\r\n\t\tif (widgets.size === 0) {\r\n\t\t\tif (spacerWhenEmpty) {\r\n\t\t\t\tcontainer.addChild(new Spacer(1));\r\n\t\t\t}\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (leadingSpacer) {\r\n\t\t\tcontainer.addChild(new Spacer(1));\r\n\t\t}\r\n\t\tfor (const component of widgets.values()) {\r\n\t\t\tcontainer.addChild(component);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Set a custom footer component, or restore the built-in footer.\r\n\t */\r\n\tprivate setExtensionFooter(\r\n\t\tfactory:\r\n\t\t\t| ((tui: TUI, thm: Theme, footerData: ReadonlyFooterDataProvider) => Component & { dispose?(): void })\r\n\t\t\t| undefined,\r\n\t): void {\r\n\t\t// Dispose existing custom footer\r\n\t\tif (this.customFooter?.dispose) {\r\n\t\t\tthis.customFooter.dispose();\r\n\t\t}\r\n\r\n\t\t// Remove current footer from UI\r\n\t\tif (this.customFooter) {\r\n\t\t\tthis.ui.removeChild(this.customFooter);\r\n\t\t} else {\r\n\t\t\tthis.ui.removeChild(this.footer);\r\n\t\t}\r\n\r\n\t\tif (factory) {\r\n\t\t\t// Create and add custom footer, passing the data provider\r\n\t\t\tthis.customFooter = factory(this.ui, theme, this.footerDataProvider);\r\n\t\t\tthis.ui.addChild(this.customFooter);\r\n\t\t} else {\r\n\t\t\t// Restore built-in footer\r\n\t\t\tthis.customFooter = undefined;\r\n\t\t\tthis.ui.addChild(this.footer);\r\n\t\t}\r\n\r\n\t\tthis.ui.requestRender();\r\n\t}\r\n\r\n\t/**\r\n\t * Set a custom header component, or restore the built-in header.\r\n\t */\r\n\tprivate setExtensionHeader(factory: ((tui: TUI, thm: Theme) => Component & { dispose?(): void }) | undefined): void {\r\n\t\t// Header may not be initialized yet if called during early initialization\r\n\t\tif (!this.builtInHeader) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Dispose existing custom header\r\n\t\tif (this.customHeader?.dispose) {\r\n\t\t\tthis.customHeader.dispose();\r\n\t\t}\r\n\r\n\t\t// Find the index of the current header in the header container\r\n\t\tconst currentHeader = this.customHeader || this.builtInHeader;\r\n\t\tconst index = this.headerContainer.children.indexOf(currentHeader);\r\n\r\n\t\tif (factory) {\r\n\t\t\t// Create and add custom header\r\n\t\t\tthis.customHeader = factory(this.ui, theme);\r\n\t\t\tif (index !== -1) {\r\n\t\t\t\tthis.headerContainer.children[index] = this.customHeader;\r\n\t\t\t} else {\r\n\t\t\t\t// If not found (e.g. builtInHeader was never added), add at the top\r\n\t\t\t\tthis.headerContainer.children.unshift(this.customHeader);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\t// Restore built-in header\r\n\t\t\tthis.customHeader = undefined;\r\n\t\t\tif (index !== -1) {\r\n\t\t\t\tthis.headerContainer.children[index] = this.builtInHeader;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.ui.requestRender();\r\n\t}\r\n\r\n\tprivate addExtensionTerminalInputListener(\r\n\t\thandler: (data: string) => { consume?: boolean; data?: string } | undefined,\r\n\t): () => void {\r\n\t\tconst unsubscribe = this.ui.addInputListener(handler);\r\n\t\tthis.extensionTerminalInputUnsubscribers.add(unsubscribe);\r\n\t\treturn () => {\r\n\t\t\tunsubscribe();\r\n\t\t\tthis.extensionTerminalInputUnsubscribers.delete(unsubscribe);\r\n\t\t};\r\n\t}\r\n\r\n\tprivate clearExtensionTerminalInputListeners(): void {\r\n\t\tfor (const unsubscribe of this.extensionTerminalInputUnsubscribers) {\r\n\t\t\tunsubscribe();\r\n\t\t}\r\n\t\tthis.extensionTerminalInputUnsubscribers.clear();\r\n\t}\r\n\r\n\t/**\r\n\t * Create the ExtensionUIContext for extensions.\r\n\t */\r\n\tprivate createExtensionUIContext(): ExtensionUIContext {\r\n\t\treturn {\r\n\t\t\tselect: (title, options, opts) => this.showExtensionSelector(title, options, opts),\r\n\t\t\tconfirm: (title, message, opts) => this.showExtensionConfirm(title, message, opts),\r\n\t\t\tinput: (title, placeholder, opts) => this.showExtensionInput(title, placeholder, opts),\r\n\t\t\tnotify: (message, type) => this.showExtensionNotify(message, type),\r\n\t\t\tonTerminalInput: (handler) => this.addExtensionTerminalInputListener(handler),\r\n\t\t\tsetStatus: (key, text) => this.setExtensionStatus(key, text),\r\n\t\t\tsetWorkingMessage: (message) => {\r\n\t\t\t\tif (this.loadingAnimation) {\r\n\t\t\t\t\tif (message) {\r\n\t\t\t\t\t\tthis.loadingAnimation.setMessage(message);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthis.loadingAnimation.setMessage(\r\n\t\t\t\t\t\t\t`${this.defaultWorkingMessage} (${appKey(this.keybindings, \"interrupt\")} to interrupt)`,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// Queue message for when loadingAnimation is created (handles agent_start race)\r\n\t\t\t\t\tthis.pendingWorkingMessage = message;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tsetWidget: (key, content, options) => this.setExtensionWidget(key, content, options),\r\n\t\t\tsetFooter: (factory) => this.setExtensionFooter(factory),\r\n\t\t\tsetHeader: (factory) => this.setExtensionHeader(factory),\r\n\t\t\tsetTitle: (title) => this.ui.terminal.setTitle(title),\r\n\t\t\tcustom: (factory, options) => this.showExtensionCustom(factory, options),\r\n\t\t\tpasteToEditor: (text) => this.editor.handleInput(`\\x1b[200~${text}\\x1b[201~`),\r\n\t\t\tsetEditorText: (text) => this.editor.setText(text),\r\n\t\t\tgetEditorText: () => this.editor.getText(),\r\n\t\t\teditor: (title, prefill) => this.showExtensionEditor(title, prefill),\r\n\t\t\tsetEditorComponent: (factory) => this.setCustomEditorComponent(factory),\r\n\t\t\tget theme() {\r\n\t\t\t\treturn theme;\r\n\t\t\t},\r\n\t\t\tgetAllThemes: () => getAvailableThemesWithPaths(),\r\n\t\t\tgetTheme: (name) => getThemeByName(name),\r\n\t\t\tsetTheme: (themeOrName) => {\r\n\t\t\t\tif (themeOrName instanceof Theme) {\r\n\t\t\t\t\tsetThemeInstance(themeOrName);\r\n\t\t\t\t\tthis.ui.requestRender();\r\n\t\t\t\t\treturn { success: true };\r\n\t\t\t\t}\r\n\t\t\t\tconst result = setTheme(themeOrName, true);\r\n\t\t\t\tif (result.success) {\r\n\t\t\t\t\tthis.ui.requestRender();\r\n\t\t\t\t}\r\n\t\t\t\treturn result;\r\n\t\t\t},\r\n\t\t\tgetToolsExpanded: () => this.toolOutputExpanded,\r\n\t\t\tsetToolsExpanded: (expanded) => this.setToolsExpanded(expanded),\r\n\t\t};\r\n\t}\r\n\r\n\t/**\r\n\t * Show a selector for extensions.\r\n\t */\r\n\tprivate showExtensionSelector(\r\n\t\ttitle: string,\r\n\t\toptions: string[],\r\n\t\topts?: ExtensionUIDialogOptions,\r\n\t): Promise<string | undefined> {\r\n\t\treturn new Promise((resolve) => {\r\n\t\t\tif (opts?.signal?.aborted) {\r\n\t\t\t\tresolve(undefined);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tconst onAbort = () => {\r\n\t\t\t\tthis.hideExtensionSelector();\r\n\t\t\t\tresolve(undefined);\r\n\t\t\t};\r\n\t\t\topts?.signal?.addEventListener(\"abort\", onAbort, { once: true });\r\n\r\n\t\t\tthis.extensionSelector = new ExtensionSelectorComponent(\r\n\t\t\t\ttitle,\r\n\t\t\t\toptions,\r\n\t\t\t\t(option) => {\r\n\t\t\t\t\topts?.signal?.removeEventListener(\"abort\", onAbort);\r\n\t\t\t\t\tthis.hideExtensionSelector();\r\n\t\t\t\t\tresolve(option);\r\n\t\t\t\t},\r\n\t\t\t\t() => {\r\n\t\t\t\t\topts?.signal?.removeEventListener(\"abort\", onAbort);\r\n\t\t\t\t\tthis.hideExtensionSelector();\r\n\t\t\t\t\tresolve(undefined);\r\n\t\t\t\t},\r\n\t\t\t\t{ tui: this.ui, timeout: opts?.timeout },\r\n\t\t\t);\r\n\r\n\t\t\tthis.editorContainer.clear();\r\n\t\t\tthis.editorContainer.addChild(this.extensionSelector);\r\n\t\t\tthis.ui.setFocus(this.extensionSelector);\r\n\t\t\tthis.ui.requestRender();\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Hide the extension selector.\r\n\t */\r\n\tprivate hideExtensionSelector(): void {\r\n\t\tthis.extensionSelector?.dispose();\r\n\t\tthis.editorContainer.clear();\r\n\t\tthis.editorContainer.addChild(this.editor);\r\n\t\tthis.extensionSelector = undefined;\r\n\t\tthis.ui.setFocus(this.editor);\r\n\t\tthis.ui.requestRender();\r\n\t}\r\n\r\n\t/**\r\n\t * Show a confirmation dialog for extensions.\r\n\t */\r\n\tprivate async showExtensionConfirm(\r\n\t\ttitle: string,\r\n\t\tmessage: string,\r\n\t\topts?: ExtensionUIDialogOptions,\r\n\t): Promise<boolean> {\r\n\t\tconst result = await this.showExtensionSelector(`${title}\\n${message}`, [\"Yes\", \"No\"], opts);\r\n\t\treturn result === \"Yes\";\r\n\t}\r\n\r\n\t/**\r\n\t * Show a text input for extensions.\r\n\t */\r\n\tprivate showExtensionInput(\r\n\t\ttitle: string,\r\n\t\tplaceholder?: string,\r\n\t\topts?: ExtensionUIDialogOptions,\r\n\t): Promise<string | undefined> {\r\n\t\treturn new Promise((resolve) => {\r\n\t\t\tif (opts?.signal?.aborted) {\r\n\t\t\t\tresolve(undefined);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tconst onAbort = () => {\r\n\t\t\t\tthis.hideExtensionInput();\r\n\t\t\t\tresolve(undefined);\r\n\t\t\t};\r\n\t\t\topts?.signal?.addEventListener(\"abort\", onAbort, { once: true });\r\n\r\n\t\t\tthis.extensionInput = new ExtensionInputComponent(\r\n\t\t\t\ttitle,\r\n\t\t\t\tplaceholder,\r\n\t\t\t\t(value) => {\r\n\t\t\t\t\topts?.signal?.removeEventListener(\"abort\", onAbort);\r\n\t\t\t\t\tthis.hideExtensionInput();\r\n\t\t\t\t\tresolve(value);\r\n\t\t\t\t},\r\n\t\t\t\t() => {\r\n\t\t\t\t\topts?.signal?.removeEventListener(\"abort\", onAbort);\r\n\t\t\t\t\tthis.hideExtensionInput();\r\n\t\t\t\t\tresolve(undefined);\r\n\t\t\t\t},\r\n\t\t\t\t{ tui: this.ui, timeout: opts?.timeout },\r\n\t\t\t);\r\n\r\n\t\t\tthis.editorContainer.clear();\r\n\t\t\tthis.editorContainer.addChild(this.extensionInput);\r\n\t\t\tthis.ui.setFocus(this.extensionInput);\r\n\t\t\tthis.ui.requestRender();\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Hide the extension input.\r\n\t */\r\n\tprivate hideExtensionInput(): void {\r\n\t\tthis.extensionInput?.dispose();\r\n\t\tthis.editorContainer.clear();\r\n\t\tthis.editorContainer.addChild(this.editor);\r\n\t\tthis.extensionInput = undefined;\r\n\t\tthis.ui.setFocus(this.editor);\r\n\t\tthis.ui.requestRender();\r\n\t}\r\n\r\n\t/**\r\n\t * Show a multi-line editor for extensions (with Ctrl+G support).\r\n\t */\r\n\tprivate showExtensionEditor(title: string, prefill?: string): Promise<string | undefined> {\r\n\t\treturn new Promise((resolve) => {\r\n\t\t\tthis.extensionEditor = new ExtensionEditorComponent(\r\n\t\t\t\tthis.ui,\r\n\t\t\t\tthis.keybindings,\r\n\t\t\t\ttitle,\r\n\t\t\t\tprefill,\r\n\t\t\t\t(value) => {\r\n\t\t\t\t\tthis.hideExtensionEditor();\r\n\t\t\t\t\tresolve(value);\r\n\t\t\t\t},\r\n\t\t\t\t() => {\r\n\t\t\t\t\tthis.hideExtensionEditor();\r\n\t\t\t\t\tresolve(undefined);\r\n\t\t\t\t},\r\n\t\t\t);\r\n\r\n\t\t\tthis.editorContainer.clear();\r\n\t\t\tthis.editorContainer.addChild(this.extensionEditor);\r\n\t\t\tthis.ui.setFocus(this.extensionEditor);\r\n\t\t\tthis.ui.requestRender();\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Hide the extension editor.\r\n\t */\r\n\tprivate hideExtensionEditor(): void {\r\n\t\tthis.editorContainer.clear();\r\n\t\tthis.editorContainer.addChild(this.editor);\r\n\t\tthis.extensionEditor = undefined;\r\n\t\tthis.ui.setFocus(this.editor);\r\n\t\tthis.ui.requestRender();\r\n\t}\r\n\r\n\t/**\r\n\t * Set a custom editor component from an extension.\r\n\t * Pass undefined to restore the default editor.\r\n\t */\r\n\tprivate setCustomEditorComponent(\r\n\t\tfactory: ((tui: TUI, theme: EditorTheme, keybindings: KeybindingsManager) => EditorComponent) | undefined,\r\n\t): void {\r\n\t\t// Save text from current editor before switching\r\n\t\tconst currentText = this.editor.getText();\r\n\r\n\t\tthis.editorContainer.clear();\r\n\r\n\t\tif (factory) {\r\n\t\t\t// Create the custom editor with tui, theme, and keybindings\r\n\t\t\tconst newEditor = factory(this.ui, getEditorTheme(), this.keybindings);\r\n\r\n\t\t\t// Wire up callbacks from the default editor\r\n\t\t\tnewEditor.onSubmit = this.defaultEditor.onSubmit;\r\n\t\t\tnewEditor.onChange = this.defaultEditor.onChange;\r\n\r\n\t\t\t// Copy text from previous editor\r\n\t\t\tnewEditor.setText(currentText);\r\n\r\n\t\t\t// Copy appearance settings if supported\r\n\t\t\tif (newEditor.borderColor !== undefined) {\r\n\t\t\t\tnewEditor.borderColor = this.defaultEditor.borderColor;\r\n\t\t\t}\r\n\t\t\tif (newEditor.setPaddingX !== undefined) {\r\n\t\t\t\tnewEditor.setPaddingX(this.defaultEditor.getPaddingX());\r\n\t\t\t}\r\n\r\n\t\t\t// Set autocomplete if supported\r\n\t\t\tif (newEditor.setAutocompleteProvider && this.autocompleteProvider) {\r\n\t\t\t\tnewEditor.setAutocompleteProvider(this.autocompleteProvider);\r\n\t\t\t}\r\n\r\n\t\t\t// If extending CustomEditor, copy app-level handlers\r\n\t\t\t// Use duck typing since instanceof fails across jiti module boundaries\r\n\t\t\tconst customEditor = newEditor as unknown as Record<string, unknown>;\r\n\t\t\tif (\"actionHandlers\" in customEditor && customEditor.actionHandlers instanceof Map) {\r\n\t\t\t\tcustomEditor.onEscape = () => this.defaultEditor.onEscape?.();\r\n\t\t\t\tcustomEditor.onCtrlD = () => this.defaultEditor.onCtrlD?.();\r\n\t\t\t\tcustomEditor.onPasteImage = () => this.defaultEditor.onPasteImage?.();\r\n\t\t\t\tcustomEditor.onExtensionShortcut = (data: string) => this.defaultEditor.onExtensionShortcut?.(data);\r\n\t\t\t\t// Copy action handlers (clear, suspend, model switching, etc.)\r\n\t\t\t\tfor (const [action, handler] of this.defaultEditor.actionHandlers) {\r\n\t\t\t\t\t(customEditor.actionHandlers as Map<string, () => void>).set(action, handler);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.editor = newEditor;\r\n\t\t} else {\r\n\t\t\t// Restore default editor with text from custom editor\r\n\t\t\tthis.defaultEditor.setText(currentText);\r\n\t\t\tthis.editor = this.defaultEditor;\r\n\t\t}\r\n\r\n\t\tthis.editorContainer.addChild(this.editor as Component);\r\n\t\tthis.ui.setFocus(this.editor as Component);\r\n\t\tthis.ui.requestRender();\r\n\t}\r\n\r\n\t/**\r\n\t * Show a notification for extensions.\r\n\t */\r\n\tprivate showExtensionNotify(message: string, type?: \"info\" | \"warning\" | \"error\"): void {\r\n\t\tif (type === \"error\") {\r\n\t\t\tthis.showError(message);\r\n\t\t} else if (type === \"warning\") {\r\n\t\t\tthis.showWarning(message);\r\n\t\t} else {\r\n\t\t\tthis.showStatus(message);\r\n\t\t}\r\n\t}\r\n\r\n\t/** Show a custom component with keyboard focus. Overlay mode renders on top of existing content. */\r\n\tprivate async showExtensionCustom<T>(\r\n\t\tfactory: (\r\n\t\t\ttui: TUI,\r\n\t\t\ttheme: Theme,\r\n\t\t\tkeybindings: KeybindingsManager,\r\n\t\t\tdone: (result: T) => void,\r\n\t\t) => (Component & { dispose?(): void }) | Promise<Component & { dispose?(): void }>,\r\n\t\toptions?: {\r\n\t\t\toverlay?: boolean;\r\n\t\t\toverlayOptions?: OverlayOptions | (() => OverlayOptions);\r\n\t\t\tonHandle?: (handle: OverlayHandle) => void;\r\n\t\t},\r\n\t): Promise<T> {\r\n\t\tconst savedText = this.editor.getText();\r\n\t\tconst isOverlay = options?.overlay ?? false;\r\n\r\n\t\tconst restoreEditor = () => {\r\n\t\t\tthis.editorContainer.clear();\r\n\t\t\tthis.editorContainer.addChild(this.editor);\r\n\t\t\tthis.editor.setText(savedText);\r\n\t\t\tthis.ui.setFocus(this.editor);\r\n\t\t\tthis.ui.requestRender();\r\n\t\t};\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tlet component: Component & { dispose?(): void };\r\n\t\t\tlet closed = false;\r\n\r\n\t\t\tconst close = (result: T) => {\r\n\t\t\t\tif (closed) return;\r\n\t\t\t\tclosed = true;\r\n\t\t\t\tif (isOverlay) this.ui.hideOverlay();\r\n\t\t\t\telse restoreEditor();\r\n\t\t\t\t// Note: both branches above already call requestRender\r\n\t\t\t\tresolve(result);\r\n\t\t\t\ttry {\r\n\t\t\t\t\tcomponent?.dispose?.();\r\n\t\t\t\t} catch {\r\n\t\t\t\t\t/* ignore dispose errors */\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tPromise.resolve(factory(this.ui, theme, this.keybindings, close))\r\n\t\t\t\t.then((c) => {\r\n\t\t\t\t\tif (closed) return;\r\n\t\t\t\t\tcomponent = c;\r\n\t\t\t\t\tif (isOverlay) {\r\n\t\t\t\t\t\t// Resolve overlay options - can be static or dynamic function\r\n\t\t\t\t\t\tconst resolveOptions = (): OverlayOptions | undefined => {\r\n\t\t\t\t\t\t\tif (options?.overlayOptions) {\r\n\t\t\t\t\t\t\t\tconst opts =\r\n\t\t\t\t\t\t\t\t\ttypeof options.overlayOptions === \"function\"\r\n\t\t\t\t\t\t\t\t\t\t? options.overlayOptions()\r\n\t\t\t\t\t\t\t\t\t\t: options.overlayOptions;\r\n\t\t\t\t\t\t\t\treturn opts;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t// Fallback: use component's width property if available\r\n\t\t\t\t\t\t\tconst w = (component as { width?: number }).width;\r\n\t\t\t\t\t\t\treturn w ? { width: w } : undefined;\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t\tconst handle = this.ui.showOverlay(component, resolveOptions());\r\n\t\t\t\t\t\t// Expose handle to caller for visibility control\r\n\t\t\t\t\t\toptions?.onHandle?.(handle);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthis.editorContainer.clear();\r\n\t\t\t\t\t\tthis.editorContainer.addChild(component);\r\n\t\t\t\t\t\tthis.ui.setFocus(component);\r\n\t\t\t\t\t\tthis.ui.requestRender();\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t\t.catch((err) => {\r\n\t\t\t\t\tif (closed) return;\r\n\t\t\t\t\tif (!isOverlay) restoreEditor();\r\n\t\t\t\t\treject(err);\r\n\t\t\t\t});\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Show an extension error in the UI.\r\n\t */\r\n\tprivate showExtensionError(extensionPath: string, error: string, stack?: string): void {\r\n\t\tconst errorMsg = `Extension \"${extensionPath}\" error: ${error}`;\r\n\t\tconst errorText = new Text(theme.fg(\"error\", errorMsg), 1, 0);\r\n\t\tthis.chatContainer.addChild(errorText);\r\n\t\tif (stack) {\r\n\t\t\t// Show stack trace in dim color, indented\r\n\t\t\tconst stackLines = stack\r\n\t\t\t\t.split(\"\\n\")\r\n\t\t\t\t.slice(1) // Skip first line (duplicates error message)\r\n\t\t\t\t.map((line) => theme.fg(\"dim\", ` ${line.trim()}`))\r\n\t\t\t\t.join(\"\\n\");\r\n\t\t\tif (stackLines) {\r\n\t\t\t\tthis.chatContainer.addChild(new Text(stackLines, 1, 0));\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.ui.requestRender();\r\n\t}\r\n\r\n\t// =========================================================================\r\n\t// Key Handlers\r\n\t// =========================================================================\r\n\r\n\tprivate setupKeyHandlers(): void {\r\n\t\t// Set up handlers on defaultEditor - they use this.editor for text access\r\n\t\t// so they work correctly regardless of which editor is active\r\n\t\tthis.defaultEditor.onEscape = () => {\r\n\t\t\tif (this.loadingAnimation) {\r\n\t\t\t\tthis.restoreQueuedMessagesToEditor({ abort: true });\r\n\t\t\t} else if (this.session.isBashRunning) {\r\n\t\t\t\tthis.session.abortBash();\r\n\t\t\t} else if (this.isBashMode) {\r\n\t\t\t\tthis.editor.setText(\"\");\r\n\t\t\t\tthis.isBashMode = false;\r\n\t\t\t\tthis.updateEditorBorderColor();\r\n\t\t\t} else if (!this.editor.getText().trim()) {\r\n\t\t\t\t// Double-escape with empty editor triggers /tree, /fork, or nothing based on setting\r\n\t\t\t\tconst action = this.settingsManager.getDoubleEscapeAction();\r\n\t\t\t\tif (action !== \"none\") {\r\n\t\t\t\t\tconst now = Date.now();\r\n\t\t\t\t\tif (now - this.lastEscapeTime < 500) {\r\n\t\t\t\t\t\tif (action === \"tree\") {\r\n\t\t\t\t\t\t\tthis.showTreeSelector();\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tthis.showUserMessageSelector();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tthis.lastEscapeTime = 0;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthis.lastEscapeTime = now;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Register app action handlers\r\n\t\tthis.defaultEditor.onAction(\"clear\", () => this.handleCtrlC());\r\n\t\tthis.defaultEditor.onCtrlD = () => this.handleCtrlD();\r\n\t\tthis.defaultEditor.onAction(\"suspend\", () => this.handleCtrlZ());\r\n\t\tthis.defaultEditor.onAction(\"cycleThinkingLevel\", () => this.cycleThinkingLevel());\r\n\t\tthis.defaultEditor.onAction(\"cycleModelForward\", () => this.cycleModel(\"forward\"));\r\n\t\tthis.defaultEditor.onAction(\"cycleModelBackward\", () => this.cycleModel(\"backward\"));\r\n\r\n\t\t// Global debug handler on TUI (works regardless of focus)\r\n\t\tthis.ui.onDebug = () => this.handleDebugCommand();\r\n\t\tthis.defaultEditor.onAction(\"selectModel\", () => this.showModelSelector());\r\n\t\tthis.defaultEditor.onAction(\"expandTools\", () => this.toggleToolOutputExpansion());\r\n\t\tthis.defaultEditor.onAction(\"toggleThinking\", () => this.toggleThinkingBlockVisibility());\r\n\t\tthis.defaultEditor.onAction(\"externalEditor\", () => this.openExternalEditor());\r\n\t\tthis.defaultEditor.onAction(\"followUp\", () => this.handleFollowUp());\r\n\t\tthis.defaultEditor.onAction(\"dequeue\", () => this.handleDequeue());\r\n\t\tthis.defaultEditor.onAction(\"newSession\", () => this.handleClearCommand());\r\n\t\tthis.defaultEditor.onAction(\"tree\", () => this.showTreeSelector());\r\n\t\tthis.defaultEditor.onAction(\"fork\", () => this.showUserMessageSelector());\r\n\t\tthis.defaultEditor.onAction(\"resume\", () => this.showSessionSelector());\r\n\r\n\t\tthis.defaultEditor.onChange = (text: string) => {\r\n\t\t\tconst wasBashMode = this.isBashMode;\r\n\t\t\tthis.isBashMode = text.trimStart().startsWith(\"!\");\r\n\t\t\tif (wasBashMode !== this.isBashMode) {\r\n\t\t\t\tthis.updateEditorBorderColor();\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Handle clipboard image paste (triggered on Ctrl+V)\r\n\t\tthis.defaultEditor.onPasteImage = () => {\r\n\t\t\tthis.handleClipboardImagePaste();\r\n\t\t};\r\n\t}\r\n\r\n\tprivate async handleClipboardImagePaste(): Promise<void> {\r\n\t\ttry {\r\n\t\t\tconst image = await readClipboardImage();\r\n\t\t\tif (!image) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// Write to temp file\r\n\t\t\tconst tmpDir = os.tmpdir();\r\n\t\t\tconst ext = extensionForImageMimeType(image.mimeType) ?? \"png\";\r\n\t\t\tconst fileName = `pi-clipboard-${crypto.randomUUID()}.${ext}`;\r\n\t\t\tconst filePath = path.join(tmpDir, fileName);\r\n\t\t\tfs.writeFileSync(filePath, Buffer.from(image.bytes));\r\n\r\n\t\t\t// Insert file path directly\r\n\t\t\tthis.editor.insertTextAtCursor?.(filePath);\r\n\t\t\tthis.ui.requestRender();\r\n\t\t} catch {\r\n\t\t\t// Silently ignore clipboard errors (may not have permission, etc.)\r\n\t\t}\r\n\t}\r\n\r\n\tprivate setupEditorSubmitHandler(): void {\r\n\t\tthis.defaultEditor.onSubmit = async (text: string) => {\r\n\t\t\ttext = text.trim();\r\n\t\t\tif (!text) return;\r\n\r\n\t\t\t// Handle commands\r\n\t\t\tif (text === \"/settings\") {\r\n\t\t\t\tthis.showSettingsSelector();\r\n\t\t\t\tthis.editor.setText(\"\");\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (text === \"/scoped-models\") {\r\n\t\t\t\tthis.editor.setText(\"\");\r\n\t\t\t\tawait this.showModelsSelector();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (text === \"/model\" || text.startsWith(\"/model \")) {\r\n\t\t\t\tconst searchTerm = text.startsWith(\"/model \") ? text.slice(7).trim() : undefined;\r\n\t\t\t\tthis.editor.setText(\"\");\r\n\t\t\t\tawait this.handleModelCommand(searchTerm);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (text.startsWith(\"/export\")) {\r\n\t\t\t\tawait this.handleExportCommand(text);\r\n\t\t\t\tthis.editor.setText(\"\");\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (text === \"/share\") {\r\n\t\t\t\tawait this.handleShareCommand();\r\n\t\t\t\tthis.editor.setText(\"\");\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (text === \"/copy\") {\r\n\t\t\t\tthis.handleCopyCommand();\r\n\t\t\t\tthis.editor.setText(\"\");\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (text === \"/name\" || text.startsWith(\"/name \")) {\r\n\t\t\t\tthis.handleNameCommand(text);\r\n\t\t\t\tthis.editor.setText(\"\");\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (text === \"/session\") {\r\n\t\t\t\tthis.handleSessionCommand();\r\n\t\t\t\tthis.editor.setText(\"\");\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (text === \"/changelog\") {\r\n\t\t\t\tthis.handleChangelogCommand();\r\n\t\t\t\tthis.editor.setText(\"\");\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (text === \"/hotkeys\") {\r\n\t\t\t\tthis.handleHotkeysCommand();\r\n\t\t\t\tthis.editor.setText(\"\");\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (text === \"/fork\") {\r\n\t\t\t\tthis.showUserMessageSelector();\r\n\t\t\t\tthis.editor.setText(\"\");\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (text === \"/tree\") {\r\n\t\t\t\tthis.showTreeSelector();\r\n\t\t\t\tthis.editor.setText(\"\");\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (text === \"/login\") {\r\n\t\t\t\tthis.showOAuthSelector(\"login\");\r\n\t\t\t\tthis.editor.setText(\"\");\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (text === \"/logout\") {\r\n\t\t\t\tthis.showOAuthSelector(\"logout\");\r\n\t\t\t\tthis.editor.setText(\"\");\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (text === \"/new\") {\r\n\t\t\t\tthis.editor.setText(\"\");\r\n\t\t\t\tawait this.handleClearCommand();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (text === \"/compact\" || text.startsWith(\"/compact \")) {\r\n\t\t\t\tconst customInstructions = text.startsWith(\"/compact \") ? text.slice(9).trim() : undefined;\r\n\t\t\t\tthis.editor.setText(\"\");\r\n\t\t\t\tawait this.handleCompactCommand(customInstructions);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (text === \"/reload\") {\r\n\t\t\t\tthis.editor.setText(\"\");\r\n\t\t\t\tawait this.handleReloadCommand();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (text === \"/memory\" || text.startsWith(\"/memory \")) {\r\n\t\t\t\tif (!this.session.settingsManager.getMemoryEnabled()) {\r\n\t\t\t\t\tthis.showWarning(\r\n\t\t\t\t\t\t\"Memory system is disabled. Enable it in /settings or set memory.enabled: true in settings.json.\",\r\n\t\t\t\t\t);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tconst args = text.startsWith(\"/memory \") ? text.slice(8).trim() : \"\";\r\n\t\t\t\t\tthis.editor.setText(\"\");\r\n\t\t\t\t\tawait this.handleMemoryCommand(args);\r\n\t\t\t\t}\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (text === \"/debug\") {\r\n\t\t\t\tthis.handleDebugCommand();\r\n\t\t\t\tthis.editor.setText(\"\");\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (text === \"/arminsayshi\") {\r\n\t\t\t\tthis.handleArminSaysHi();\r\n\t\t\t\tthis.editor.setText(\"\");\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (text === \"/resume\") {\r\n\t\t\t\tthis.showSessionSelector();\r\n\t\t\t\tthis.editor.setText(\"\");\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (text === \"/quit\") {\r\n\t\t\t\tthis.editor.setText(\"\");\r\n\t\t\t\tawait this.shutdown();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// Handle bash command (! for normal, !! for excluded from context)\r\n\t\t\tif (text.startsWith(\"!\")) {\r\n\t\t\t\tconst isExcluded = text.startsWith(\"!!\");\r\n\t\t\t\tconst command = isExcluded ? text.slice(2).trim() : text.slice(1).trim();\r\n\t\t\t\tif (command) {\r\n\t\t\t\t\tif (this.session.isBashRunning) {\r\n\t\t\t\t\t\tthis.showWarning(\"A bash command is already running. Press Esc to cancel it first.\");\r\n\t\t\t\t\t\tthis.editor.setText(text);\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis.editor.addToHistory?.(text);\r\n\t\t\t\t\tawait this.handleBashCommand(command, isExcluded);\r\n\t\t\t\t\tthis.isBashMode = false;\r\n\t\t\t\t\tthis.updateEditorBorderColor();\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Queue input during compaction (extension commands execute immediately)\r\n\t\t\tif (this.session.isCompacting) {\r\n\t\t\t\tif (this.isExtensionCommand(text)) {\r\n\t\t\t\t\tthis.editor.addToHistory?.(text);\r\n\t\t\t\t\tthis.editor.setText(\"\");\r\n\t\t\t\t\tawait this.session.prompt(text);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.queueCompactionMessage(text, \"steer\");\r\n\t\t\t\t}\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// If streaming, use prompt() with steer behavior\r\n\t\t\t// This handles extension commands (execute immediately), prompt template expansion, and queueing\r\n\t\t\tif (this.session.isStreaming) {\r\n\t\t\t\tthis.editor.addToHistory?.(text);\r\n\t\t\t\tthis.editor.setText(\"\");\r\n\t\t\t\tawait this.session.prompt(text, { streamingBehavior: \"steer\" });\r\n\t\t\t\tthis.updatePendingMessagesDisplay();\r\n\t\t\t\tthis.ui.requestRender();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// Normal message submission\r\n\t\t\t// First, move any pending bash components to chat\r\n\t\t\tthis.flushPendingBashComponents();\r\n\r\n\t\t\tif (this.onInputCallback) {\r\n\t\t\t\tthis.onInputCallback(text);\r\n\t\t\t}\r\n\t\t\tthis.editor.addToHistory?.(text);\r\n\t\t};\r\n\t}\r\n\r\n\tprivate subscribeToAgent(): void {\r\n\t\tthis.unsubscribe = this.session.subscribe(async (event) => {\r\n\t\t\tawait this.handleEvent(event);\r\n\t\t});\r\n\t}\r\n\r\n\tprivate async handleEvent(event: AgentSessionEvent): Promise<void> {\r\n\t\tif (!this.isInitialized) {\r\n\t\t\tawait this.init();\r\n\t\t}\r\n\r\n\t\tthis.footer.invalidate();\r\n\r\n\t\tswitch (event.type) {\r\n\t\t\tcase \"agent_start\":\r\n\t\t\t\t// Restore main escape handler if retry handler is still active\r\n\t\t\t\t// (retry success event fires later, but we need main handler now)\r\n\t\t\t\tif (this.retryEscapeHandler) {\r\n\t\t\t\t\tthis.defaultEditor.onEscape = this.retryEscapeHandler;\r\n\t\t\t\t\tthis.retryEscapeHandler = undefined;\r\n\t\t\t\t}\r\n\t\t\t\tif (this.retryLoader) {\r\n\t\t\t\t\tthis.retryLoader.stop();\r\n\t\t\t\t\tthis.retryLoader = undefined;\r\n\t\t\t\t}\r\n\t\t\t\tif (this.loadingAnimation) {\r\n\t\t\t\t\tthis.loadingAnimation.stop();\r\n\t\t\t\t}\r\n\t\t\t\tthis.statusContainer.clear();\r\n\t\t\t\tthis.loadingAnimation = new Loader(\r\n\t\t\t\t\tthis.ui,\r\n\t\t\t\t\t(spinner) => theme.fg(\"accent\", spinner),\r\n\t\t\t\t\t(text) => theme.fg(\"muted\", text),\r\n\t\t\t\t\tthis.defaultWorkingMessage,\r\n\t\t\t\t);\r\n\t\t\t\tthis.statusContainer.addChild(this.loadingAnimation);\r\n\t\t\t\t// Apply any pending working message queued before loader existed\r\n\t\t\t\tif (this.pendingWorkingMessage !== undefined) {\r\n\t\t\t\t\tif (this.pendingWorkingMessage) {\r\n\t\t\t\t\t\tthis.loadingAnimation.setMessage(this.pendingWorkingMessage);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis.pendingWorkingMessage = undefined;\r\n\t\t\t\t}\r\n\t\t\t\tthis.ui.requestRender();\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"message_start\":\r\n\t\t\t\tif (event.message.role === \"custom\") {\r\n\t\t\t\t\tthis.addMessageToChat(event.message);\r\n\t\t\t\t\tthis.ui.requestRender();\r\n\t\t\t\t} else if (event.message.role === \"user\") {\r\n\t\t\t\t\tthis.addMessageToChat(event.message);\r\n\t\t\t\t\tthis.updatePendingMessagesDisplay();\r\n\t\t\t\t\tthis.ui.requestRender();\r\n\t\t\t\t} else if (event.message.role === \"assistant\") {\r\n\t\t\t\t\tthis.streamingComponent = new AssistantMessageComponent(\r\n\t\t\t\t\t\tundefined,\r\n\t\t\t\t\t\tthis.hideThinkingBlock,\r\n\t\t\t\t\t\tthis.getMarkdownThemeWithSettings(),\r\n\t\t\t\t\t);\r\n\t\t\t\t\tthis.streamingMessage = event.message;\r\n\t\t\t\t\tthis.chatContainer.addChild(this.streamingComponent);\r\n\t\t\t\t\tthis.streamingComponent.updateContent(this.streamingMessage);\r\n\t\t\t\t\tthis.ui.requestRender();\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"message_update\":\r\n\t\t\t\tif (this.streamingComponent && event.message.role === \"assistant\") {\r\n\t\t\t\t\tthis.streamingMessage = event.message;\r\n\t\t\t\t\tthis.streamingComponent.updateContent(this.streamingMessage);\r\n\r\n\t\t\t\t\tfor (const content of this.streamingMessage.content) {\r\n\t\t\t\t\t\tif (content.type === \"toolCall\") {\r\n\t\t\t\t\t\t\tif (!this.pendingTools.has(content.id)) {\r\n\t\t\t\t\t\t\t\tthis.chatContainer.addChild(new Text(\"\", 0, 0));\r\n\t\t\t\t\t\t\t\tconst component = new ToolExecutionComponent(\r\n\t\t\t\t\t\t\t\t\tcontent.name,\r\n\t\t\t\t\t\t\t\t\tcontent.arguments,\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tshowImages: this.settingsManager.getShowImages(),\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\tthis.getRegisteredToolDefinition(content.name),\r\n\t\t\t\t\t\t\t\t\tthis.ui,\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\tcomponent.setExpanded(this.toolOutputExpanded);\r\n\t\t\t\t\t\t\t\tthis.chatContainer.addChild(component);\r\n\t\t\t\t\t\t\t\tthis.pendingTools.set(content.id, component);\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tconst component = this.pendingTools.get(content.id);\r\n\t\t\t\t\t\t\t\tif (component) {\r\n\t\t\t\t\t\t\t\t\tcomponent.updateArgs(content.arguments);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis.ui.requestRender();\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"message_end\":\r\n\t\t\t\tif (event.message.role === \"user\") break;\r\n\t\t\t\tif (this.streamingComponent && event.message.role === \"assistant\") {\r\n\t\t\t\t\tthis.streamingMessage = event.message;\r\n\t\t\t\t\tlet errorMessage: string | undefined;\r\n\t\t\t\t\tif (this.streamingMessage.stopReason === \"aborted\") {\r\n\t\t\t\t\t\tconst retryAttempt = this.session.retryAttempt;\r\n\t\t\t\t\t\terrorMessage =\r\n\t\t\t\t\t\t\tretryAttempt > 0\r\n\t\t\t\t\t\t\t\t? `Aborted after ${retryAttempt} retry attempt${retryAttempt > 1 ? \"s\" : \"\"}`\r\n\t\t\t\t\t\t\t\t: \"Operation aborted\";\r\n\t\t\t\t\t\tthis.streamingMessage.errorMessage = errorMessage;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis.streamingComponent.updateContent(this.streamingMessage);\r\n\r\n\t\t\t\t\tif (this.streamingMessage.stopReason === \"aborted\" || this.streamingMessage.stopReason === \"error\") {\r\n\t\t\t\t\t\tif (!errorMessage) {\r\n\t\t\t\t\t\t\terrorMessage = this.streamingMessage.errorMessage || \"Error\";\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tfor (const [, component] of this.pendingTools.entries()) {\r\n\t\t\t\t\t\t\tcomponent.updateResult({\r\n\t\t\t\t\t\t\t\tcontent: [{ type: \"text\", text: errorMessage }],\r\n\t\t\t\t\t\t\t\tisError: true,\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tthis.pendingTools.clear();\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t// Args are now complete - trigger diff computation for edit tools\r\n\t\t\t\t\t\tfor (const [, component] of this.pendingTools.entries()) {\r\n\t\t\t\t\t\t\tcomponent.setArgsComplete();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis.streamingComponent = undefined;\r\n\t\t\t\t\tthis.streamingMessage = undefined;\r\n\t\t\t\t\tthis.footer.invalidate();\r\n\t\t\t\t}\r\n\t\t\t\tthis.ui.requestRender();\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"tool_execution_start\": {\r\n\t\t\t\tif (!this.pendingTools.has(event.toolCallId)) {\r\n\t\t\t\t\tconst component = new ToolExecutionComponent(\r\n\t\t\t\t\t\tevent.toolName,\r\n\t\t\t\t\t\tevent.args,\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tshowImages: this.settingsManager.getShowImages(),\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tthis.getRegisteredToolDefinition(event.toolName),\r\n\t\t\t\t\t\tthis.ui,\r\n\t\t\t\t\t);\r\n\t\t\t\t\tcomponent.setExpanded(this.toolOutputExpanded);\r\n\t\t\t\t\tthis.chatContainer.addChild(component);\r\n\t\t\t\t\tthis.pendingTools.set(event.toolCallId, component);\r\n\t\t\t\t\tthis.ui.requestRender();\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tcase \"tool_execution_update\": {\r\n\t\t\t\tconst component = this.pendingTools.get(event.toolCallId);\r\n\t\t\t\tif (component) {\r\n\t\t\t\t\tcomponent.updateResult({ ...event.partialResult, isError: false }, true);\r\n\t\t\t\t\tthis.ui.requestRender();\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tcase \"tool_execution_end\": {\r\n\t\t\t\tconst component = this.pendingTools.get(event.toolCallId);\r\n\t\t\t\tif (component) {\r\n\t\t\t\t\tcomponent.updateResult({ ...event.result, isError: event.isError });\r\n\t\t\t\t\tthis.pendingTools.delete(event.toolCallId);\r\n\t\t\t\t\tthis.ui.requestRender();\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tcase \"agent_end\":\r\n\t\t\t\tif (this.loadingAnimation) {\r\n\t\t\t\t\tthis.loadingAnimation.stop();\r\n\t\t\t\t\tthis.loadingAnimation = undefined;\r\n\t\t\t\t\tthis.statusContainer.clear();\r\n\t\t\t\t}\r\n\t\t\t\tif (this.streamingComponent) {\r\n\t\t\t\t\tthis.chatContainer.removeChild(this.streamingComponent);\r\n\t\t\t\t\tthis.streamingComponent = undefined;\r\n\t\t\t\t\tthis.streamingMessage = undefined;\r\n\t\t\t\t}\r\n\t\t\t\tthis.pendingTools.clear();\r\n\r\n\t\t\t\tawait this.checkShutdownRequested();\r\n\r\n\t\t\t\tthis.ui.requestRender();\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"auto_compaction_start\": {\r\n\t\t\t\t// Keep editor active; submissions are queued during compaction.\r\n\t\t\t\t// Set up escape to abort auto-compaction\r\n\t\t\t\tthis.autoCompactionEscapeHandler = this.defaultEditor.onEscape;\r\n\t\t\t\tthis.defaultEditor.onEscape = () => {\r\n\t\t\t\t\tthis.session.abortCompaction();\r\n\t\t\t\t};\r\n\t\t\t\t// Show compacting indicator with reason\r\n\t\t\t\tthis.statusContainer.clear();\r\n\t\t\t\tconst reasonText = event.reason === \"overflow\" ? \"Context overflow detected, \" : \"\";\r\n\t\t\t\tthis.autoCompactionLoader = new Loader(\r\n\t\t\t\t\tthis.ui,\r\n\t\t\t\t\t(spinner) => theme.fg(\"accent\", spinner),\r\n\t\t\t\t\t(text) => theme.fg(\"muted\", text),\r\n\t\t\t\t\t`${reasonText}Auto-compacting... (${appKey(this.keybindings, \"interrupt\")} to cancel)`,\r\n\t\t\t\t);\r\n\t\t\t\tthis.statusContainer.addChild(this.autoCompactionLoader);\r\n\t\t\t\tthis.ui.requestRender();\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tcase \"auto_compaction_end\": {\r\n\t\t\t\t// Restore escape handler\r\n\t\t\t\tif (this.autoCompactionEscapeHandler) {\r\n\t\t\t\t\tthis.defaultEditor.onEscape = this.autoCompactionEscapeHandler;\r\n\t\t\t\t\tthis.autoCompactionEscapeHandler = undefined;\r\n\t\t\t\t}\r\n\t\t\t\t// Stop loader\r\n\t\t\t\tif (this.autoCompactionLoader) {\r\n\t\t\t\t\tthis.autoCompactionLoader.stop();\r\n\t\t\t\t\tthis.autoCompactionLoader = undefined;\r\n\t\t\t\t\tthis.statusContainer.clear();\r\n\t\t\t\t}\r\n\t\t\t\t// Handle result\r\n\t\t\t\tif (event.aborted) {\r\n\t\t\t\t\tthis.showStatus(\"Auto-compaction cancelled\");\r\n\t\t\t\t} else if (event.result) {\r\n\t\t\t\t\t// Rebuild chat to show compacted state\r\n\t\t\t\t\tthis.chatContainer.clear();\r\n\t\t\t\t\tthis.rebuildChatFromMessages();\r\n\t\t\t\t\t// Add compaction component at bottom so user sees it without scrolling\r\n\t\t\t\t\tthis.addMessageToChat({\r\n\t\t\t\t\t\trole: \"compactionSummary\",\r\n\t\t\t\t\t\ttokensBefore: event.result.tokensBefore,\r\n\t\t\t\t\t\tsummary: event.result.summary,\r\n\t\t\t\t\t\ttimestamp: Date.now(),\r\n\t\t\t\t\t});\r\n\t\t\t\t\tthis.footer.invalidate();\r\n\t\t\t\t} else if (event.errorMessage) {\r\n\t\t\t\t\t// Compaction failed (e.g., quota exceeded, API error)\r\n\t\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\r\n\t\t\t\t\tthis.chatContainer.addChild(new Text(theme.fg(\"error\", event.errorMessage), 1, 0));\r\n\t\t\t\t}\r\n\t\t\t\tvoid this.flushCompactionQueue({ willRetry: event.willRetry });\r\n\t\t\t\tthis.ui.requestRender();\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tcase \"auto_retry_start\": {\r\n\t\t\t\t// Set up escape to abort retry\r\n\t\t\t\tthis.retryEscapeHandler = this.defaultEditor.onEscape;\r\n\t\t\t\tthis.defaultEditor.onEscape = () => {\r\n\t\t\t\t\tthis.session.abortRetry();\r\n\t\t\t\t};\r\n\t\t\t\t// Show retry indicator\r\n\t\t\t\tthis.statusContainer.clear();\r\n\t\t\t\tconst delaySeconds = Math.round(event.delayMs / 1000);\r\n\t\t\t\tthis.retryLoader = new Loader(\r\n\t\t\t\t\tthis.ui,\r\n\t\t\t\t\t(spinner) => theme.fg(\"warning\", spinner),\r\n\t\t\t\t\t(text) => theme.fg(\"muted\", text),\r\n\t\t\t\t\t`Retrying (${event.attempt}/${event.maxAttempts}) in ${delaySeconds}s... (${appKey(this.keybindings, \"interrupt\")} to cancel)`,\r\n\t\t\t\t);\r\n\t\t\t\tthis.statusContainer.addChild(this.retryLoader);\r\n\t\t\t\tthis.ui.requestRender();\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tcase \"auto_retry_end\": {\r\n\t\t\t\t// Restore escape handler\r\n\t\t\t\tif (this.retryEscapeHandler) {\r\n\t\t\t\t\tthis.defaultEditor.onEscape = this.retryEscapeHandler;\r\n\t\t\t\t\tthis.retryEscapeHandler = undefined;\r\n\t\t\t\t}\r\n\t\t\t\t// Stop loader\r\n\t\t\t\tif (this.retryLoader) {\r\n\t\t\t\t\tthis.retryLoader.stop();\r\n\t\t\t\t\tthis.retryLoader = undefined;\r\n\t\t\t\t\tthis.statusContainer.clear();\r\n\t\t\t\t}\r\n\t\t\t\t// Show error only on final failure (success shows normal response)\r\n\t\t\t\tif (!event.success) {\r\n\t\t\t\t\tthis.showError(`Retry failed after ${event.attempt} attempts: ${event.finalError || \"Unknown error\"}`);\r\n\t\t\t\t}\r\n\t\t\t\tthis.ui.requestRender();\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/** Extract text content from a user message */\r\n\tprivate getUserMessageText(message: Message): string {\r\n\t\tif (message.role !== \"user\") return \"\";\r\n\t\tconst textBlocks =\r\n\t\t\ttypeof message.content === \"string\"\r\n\t\t\t\t? [{ type: \"text\", text: message.content }]\r\n\t\t\t\t: message.content.filter((c: { type: string }) => c.type === \"text\");\r\n\t\treturn textBlocks.map((c) => (c as { text: string }).text).join(\"\");\r\n\t}\r\n\r\n\t/**\r\n\t * Show a status message in the chat.\r\n\t *\r\n\t * If multiple status messages are emitted back-to-back (without anything else being added to the chat),\r\n\t * we update the previous status line instead of appending new ones to avoid log spam.\r\n\t */\r\n\tprivate showStatus(message: string): void {\r\n\t\tconst children = this.chatContainer.children;\r\n\t\tconst last = children.length > 0 ? children[children.length - 1] : undefined;\r\n\t\tconst secondLast = children.length > 1 ? children[children.length - 2] : undefined;\r\n\r\n\t\tif (last && secondLast && last === this.lastStatusText && secondLast === this.lastStatusSpacer) {\r\n\t\t\tthis.lastStatusText.setText(theme.fg(\"dim\", message));\r\n\t\t\tthis.ui.requestRender();\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst spacer = new Spacer(1);\r\n\t\tconst text = new Text(theme.fg(\"dim\", message), 1, 0);\r\n\t\tthis.chatContainer.addChild(spacer);\r\n\t\tthis.chatContainer.addChild(text);\r\n\t\tthis.lastStatusSpacer = spacer;\r\n\t\tthis.lastStatusText = text;\r\n\t\tthis.ui.requestRender();\r\n\t}\r\n\r\n\tprivate addMessageToChat(message: AgentMessage, options?: { populateHistory?: boolean }): void {\r\n\t\tswitch (message.role) {\r\n\t\t\tcase \"bashExecution\": {\r\n\t\t\t\tconst component = new BashExecutionComponent(message.command, this.ui, message.excludeFromContext);\r\n\t\t\t\tif (message.output) {\r\n\t\t\t\t\tcomponent.appendOutput(message.output);\r\n\t\t\t\t}\r\n\t\t\t\tcomponent.setComplete(\r\n\t\t\t\t\tmessage.exitCode,\r\n\t\t\t\t\tmessage.cancelled,\r\n\t\t\t\t\tmessage.truncated ? ({ truncated: true } as TruncationResult) : undefined,\r\n\t\t\t\t\tmessage.fullOutputPath,\r\n\t\t\t\t);\r\n\t\t\t\tthis.chatContainer.addChild(component);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tcase \"custom\": {\r\n\t\t\t\tif (message.display) {\r\n\t\t\t\t\tconst renderer = this.session.extensionRunner?.getMessageRenderer(message.customType);\r\n\t\t\t\t\tconst component = new CustomMessageComponent(message, renderer, this.getMarkdownThemeWithSettings());\r\n\t\t\t\t\tcomponent.setExpanded(this.toolOutputExpanded);\r\n\t\t\t\t\tthis.chatContainer.addChild(component);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tcase \"compactionSummary\": {\r\n\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\r\n\t\t\t\tconst component = new CompactionSummaryMessageComponent(message, this.getMarkdownThemeWithSettings());\r\n\t\t\t\tcomponent.setExpanded(this.toolOutputExpanded);\r\n\t\t\t\tthis.chatContainer.addChild(component);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tcase \"branchSummary\": {\r\n\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\r\n\t\t\t\tconst component = new BranchSummaryMessageComponent(message, this.getMarkdownThemeWithSettings());\r\n\t\t\t\tcomponent.setExpanded(this.toolOutputExpanded);\r\n\t\t\t\tthis.chatContainer.addChild(component);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tcase \"user\": {\r\n\t\t\t\tconst textContent = this.getUserMessageText(message);\r\n\t\t\t\tif (textContent) {\r\n\t\t\t\t\tconst skillBlock = parseSkillBlock(textContent);\r\n\t\t\t\t\tif (skillBlock) {\r\n\t\t\t\t\t\t// Render skill block (collapsible)\r\n\t\t\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\r\n\t\t\t\t\t\tconst component = new SkillInvocationMessageComponent(\r\n\t\t\t\t\t\t\tskillBlock,\r\n\t\t\t\t\t\t\tthis.getMarkdownThemeWithSettings(),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tcomponent.setExpanded(this.toolOutputExpanded);\r\n\t\t\t\t\t\tthis.chatContainer.addChild(component);\r\n\t\t\t\t\t\t// Render user message separately if present\r\n\t\t\t\t\t\tif (skillBlock.userMessage) {\r\n\t\t\t\t\t\t\tconst userComponent = new UserMessageComponent(\r\n\t\t\t\t\t\t\t\tskillBlock.userMessage,\r\n\t\t\t\t\t\t\t\tthis.getMarkdownThemeWithSettings(),\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\tthis.chatContainer.addChild(userComponent);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tconst userComponent = new UserMessageComponent(textContent, this.getMarkdownThemeWithSettings());\r\n\t\t\t\t\t\tthis.chatContainer.addChild(userComponent);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (options?.populateHistory) {\r\n\t\t\t\t\t\tthis.editor.addToHistory?.(textContent);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tcase \"assistant\": {\r\n\t\t\t\tconst assistantComponent = new AssistantMessageComponent(\r\n\t\t\t\t\tmessage,\r\n\t\t\t\t\tthis.hideThinkingBlock,\r\n\t\t\t\t\tthis.getMarkdownThemeWithSettings(),\r\n\t\t\t\t);\r\n\t\t\t\tthis.chatContainer.addChild(assistantComponent);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tcase \"toolResult\": {\r\n\t\t\t\t// Tool results are rendered inline with tool calls, handled separately\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tdefault: {\r\n\t\t\t\tconst _exhaustive: never = message;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Render session context to chat. Used for initial load and rebuild after compaction.\r\n\t * @param sessionContext Session context to render\r\n\t * @param options.updateFooter Update footer state\r\n\t * @param options.populateHistory Add user messages to editor history\r\n\t */\r\n\tprivate renderSessionContext(\r\n\t\tsessionContext: SessionContext,\r\n\t\toptions: { updateFooter?: boolean; populateHistory?: boolean } = {},\r\n\t): void {\r\n\t\tthis.pendingTools.clear();\r\n\r\n\t\tif (options.updateFooter) {\r\n\t\t\tthis.footer.invalidate();\r\n\t\t\tthis.updateEditorBorderColor();\r\n\t\t}\r\n\r\n\t\tfor (const message of sessionContext.messages) {\r\n\t\t\t// Assistant messages need special handling for tool calls\r\n\t\t\tif (message.role === \"assistant\") {\r\n\t\t\t\tthis.addMessageToChat(message);\r\n\t\t\t\t// Render tool call components\r\n\t\t\t\tfor (const content of message.content) {\r\n\t\t\t\t\tif (content.type === \"toolCall\") {\r\n\t\t\t\t\t\tconst component = new ToolExecutionComponent(\r\n\t\t\t\t\t\t\tcontent.name,\r\n\t\t\t\t\t\t\tcontent.arguments,\r\n\t\t\t\t\t\t\t{ showImages: this.settingsManager.getShowImages() },\r\n\t\t\t\t\t\t\tthis.getRegisteredToolDefinition(content.name),\r\n\t\t\t\t\t\t\tthis.ui,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tcomponent.setExpanded(this.toolOutputExpanded);\r\n\t\t\t\t\t\tthis.chatContainer.addChild(component);\r\n\r\n\t\t\t\t\t\tif (message.stopReason === \"aborted\" || message.stopReason === \"error\") {\r\n\t\t\t\t\t\t\tlet errorMessage: string;\r\n\t\t\t\t\t\t\tif (message.stopReason === \"aborted\") {\r\n\t\t\t\t\t\t\t\tconst retryAttempt = this.session.retryAttempt;\r\n\t\t\t\t\t\t\t\terrorMessage =\r\n\t\t\t\t\t\t\t\t\tretryAttempt > 0\r\n\t\t\t\t\t\t\t\t\t\t? `Aborted after ${retryAttempt} retry attempt${retryAttempt > 1 ? \"s\" : \"\"}`\r\n\t\t\t\t\t\t\t\t\t\t: \"Operation aborted\";\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\terrorMessage = message.errorMessage || \"Error\";\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tcomponent.updateResult({ content: [{ type: \"text\", text: errorMessage }], isError: true });\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tthis.pendingTools.set(content.id, component);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else if (message.role === \"toolResult\") {\r\n\t\t\t\t// Match tool results to pending tool components\r\n\t\t\t\tconst component = this.pendingTools.get(message.toolCallId);\r\n\t\t\t\tif (component) {\r\n\t\t\t\t\tcomponent.updateResult(message);\r\n\t\t\t\t\tthis.pendingTools.delete(message.toolCallId);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\t// All other messages use standard rendering\r\n\t\t\t\tthis.addMessageToChat(message, options);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.pendingTools.clear();\r\n\t\tthis.ui.requestRender();\r\n\t}\r\n\r\n\trenderInitialMessages(): void {\r\n\t\t// Get aligned messages and entries from session context\r\n\t\tconst context = this.sessionManager.buildSessionContext();\r\n\t\tthis.renderSessionContext(context, {\r\n\t\t\tupdateFooter: true,\r\n\t\t\tpopulateHistory: true,\r\n\t\t});\r\n\r\n\t\t// Show compaction info if session was compacted\r\n\t\tconst allEntries = this.sessionManager.getEntries();\r\n\t\tconst compactionCount = allEntries.filter((e) => e.type === \"compaction\").length;\r\n\t\tif (compactionCount > 0) {\r\n\t\t\tconst times = compactionCount === 1 ? \"1 time\" : `${compactionCount} times`;\r\n\t\t\tthis.showStatus(`Session compacted ${times}`);\r\n\t\t}\r\n\t}\r\n\r\n\tasync getUserInput(): Promise<string> {\r\n\t\treturn new Promise((resolve) => {\r\n\t\t\tthis.onInputCallback = (text: string) => {\r\n\t\t\t\tthis.onInputCallback = undefined;\r\n\t\t\t\tresolve(text);\r\n\t\t\t};\r\n\t\t});\r\n\t}\r\n\r\n\tprivate rebuildChatFromMessages(): void {\r\n\t\tthis.chatContainer.clear();\r\n\t\tconst context = this.sessionManager.buildSessionContext();\r\n\t\tthis.renderSessionContext(context);\r\n\t}\r\n\r\n\t// =========================================================================\r\n\t// Key handlers\r\n\t// =========================================================================\r\n\r\n\tprivate handleCtrlC(): void {\r\n\t\tconst now = Date.now();\r\n\t\tif (now - this.lastSigintTime < 500) {\r\n\t\t\tvoid this.shutdown();\r\n\t\t} else {\r\n\t\t\tthis.clearEditor();\r\n\t\t\tthis.lastSigintTime = now;\r\n\t\t}\r\n\t}\r\n\r\n\tprivate handleCtrlD(): void {\r\n\t\t// Only called when editor is empty (enforced by CustomEditor)\r\n\t\tvoid this.shutdown();\r\n\t}\r\n\r\n\t/**\r\n\t * Gracefully shutdown the agent.\r\n\t * Emits shutdown event to extensions, then exits.\r\n\t */\r\n\tprivate isShuttingDown = false;\r\n\r\n\tprivate async shutdown(): Promise<void> {\r\n\t\tif (this.isShuttingDown) return;\r\n\t\tthis.isShuttingDown = true;\r\n\r\n\t\t// Emit shutdown event to extensions\r\n\t\tconst extensionRunner = this.session.extensionRunner;\r\n\t\tif (extensionRunner?.hasHandlers(\"session_shutdown\")) {\r\n\t\t\tawait extensionRunner.emit({\r\n\t\t\t\ttype: \"session_shutdown\",\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t// Wait for any pending renders to complete\r\n\t\t// requestRender() uses process.nextTick(), so we wait one tick\r\n\t\tawait new Promise((resolve) => process.nextTick(resolve));\r\n\r\n\t\t// Drain any in-flight Kitty key release events before stopping.\r\n\t\t// This prevents escape sequences from leaking to the parent shell over slow SSH.\r\n\t\tawait this.ui.terminal.drainInput(1000);\r\n\r\n\t\tthis.stop();\r\n\t\tprocess.exit(0);\r\n\t}\r\n\r\n\t/**\r\n\t * Check if shutdown was requested and perform shutdown if so.\r\n\t */\r\n\tprivate async checkShutdownRequested(): Promise<void> {\r\n\t\tif (!this.shutdownRequested) return;\r\n\t\tawait this.shutdown();\r\n\t}\r\n\r\n\tprivate handleCtrlZ(): void {\r\n\t\t// Set up handler to restore TUI when resumed\r\n\t\tprocess.once(\"SIGCONT\", () => {\r\n\t\t\tthis.ui.start();\r\n\t\t\tthis.ui.requestRender(true);\r\n\t\t});\r\n\r\n\t\t// Stop the TUI (restore terminal to normal mode)\r\n\t\tthis.ui.stop();\r\n\r\n\t\t// Send SIGTSTP to process group (pid=0 means all processes in group)\r\n\t\tprocess.kill(0, \"SIGTSTP\");\r\n\t}\r\n\r\n\tprivate async handleFollowUp(): Promise<void> {\r\n\t\tconst text = (this.editor.getExpandedText?.() ?? this.editor.getText()).trim();\r\n\t\tif (!text) return;\r\n\r\n\t\t// Queue input during compaction (extension commands execute immediately)\r\n\t\tif (this.session.isCompacting) {\r\n\t\t\tif (this.isExtensionCommand(text)) {\r\n\t\t\t\tthis.editor.addToHistory?.(text);\r\n\t\t\t\tthis.editor.setText(\"\");\r\n\t\t\t\tawait this.session.prompt(text);\r\n\t\t\t} else {\r\n\t\t\t\tthis.queueCompactionMessage(text, \"followUp\");\r\n\t\t\t}\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Alt+Enter queues a follow-up message (waits until agent finishes)\r\n\t\t// This handles extension commands (execute immediately), prompt template expansion, and queueing\r\n\t\tif (this.session.isStreaming) {\r\n\t\t\tthis.editor.addToHistory?.(text);\r\n\t\t\tthis.editor.setText(\"\");\r\n\t\t\tawait this.session.prompt(text, { streamingBehavior: \"followUp\" });\r\n\t\t\tthis.updatePendingMessagesDisplay();\r\n\t\t\tthis.ui.requestRender();\r\n\t\t}\r\n\t\t// If not streaming, Alt+Enter acts like regular Enter (trigger onSubmit)\r\n\t\telse if (this.editor.onSubmit) {\r\n\t\t\tthis.editor.onSubmit(text);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate handleDequeue(): void {\r\n\t\tconst restored = this.restoreQueuedMessagesToEditor();\r\n\t\tif (restored === 0) {\r\n\t\t\tthis.showStatus(\"No queued messages to restore\");\r\n\t\t} else {\r\n\t\t\tthis.showStatus(`Restored ${restored} queued message${restored > 1 ? \"s\" : \"\"} to editor`);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate updateEditorBorderColor(): void {\r\n\t\tif (this.isBashMode) {\r\n\t\t\tthis.editor.borderColor = theme.getBashModeBorderColor();\r\n\t\t} else {\r\n\t\t\tconst level = this.session.thinkingLevel || \"off\";\r\n\t\t\tthis.editor.borderColor = theme.getThinkingBorderColor(level);\r\n\t\t}\r\n\t\tthis.ui.requestRender();\r\n\t}\r\n\r\n\tprivate cycleThinkingLevel(): void {\r\n\t\tconst newLevel = this.session.cycleThinkingLevel();\r\n\t\tif (newLevel === undefined) {\r\n\t\t\tthis.showStatus(\"Current model does not support thinking\");\r\n\t\t} else {\r\n\t\t\tthis.footer.invalidate();\r\n\t\t\tthis.updateEditorBorderColor();\r\n\t\t\tthis.showStatus(`Thinking level: ${newLevel}`);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate async cycleModel(direction: \"forward\" | \"backward\"): Promise<void> {\r\n\t\ttry {\r\n\t\t\tconst result = await this.session.cycleModel(direction);\r\n\t\t\tif (result === undefined) {\r\n\t\t\t\tconst msg = this.session.scopedModels.length > 0 ? \"Only one model in scope\" : \"Only one model available\";\r\n\t\t\t\tthis.showStatus(msg);\r\n\t\t\t} else {\r\n\t\t\t\tthis.footer.invalidate();\r\n\t\t\t\tthis.updateEditorBorderColor();\r\n\t\t\t\tconst thinkingStr =\r\n\t\t\t\t\tresult.model.reasoning && result.thinkingLevel !== \"off\" ? ` (thinking: ${result.thinkingLevel})` : \"\";\r\n\t\t\t\tthis.showStatus(`Switched to ${result.model.name || result.model.id}${thinkingStr}`);\r\n\t\t\t}\r\n\t\t} catch (error) {\r\n\t\t\tthis.showError(error instanceof Error ? error.message : String(error));\r\n\t\t}\r\n\t}\r\n\r\n\tprivate toggleToolOutputExpansion(): void {\r\n\t\tthis.setToolsExpanded(!this.toolOutputExpanded);\r\n\t}\r\n\r\n\tprivate setToolsExpanded(expanded: boolean): void {\r\n\t\tthis.toolOutputExpanded = expanded;\r\n\t\tfor (const child of this.chatContainer.children) {\r\n\t\t\tif (isExpandable(child)) {\r\n\t\t\t\tchild.setExpanded(expanded);\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.ui.requestRender();\r\n\t}\r\n\r\n\tprivate toggleThinkingBlockVisibility(): void {\r\n\t\tthis.hideThinkingBlock = !this.hideThinkingBlock;\r\n\t\tthis.settingsManager.setHideThinkingBlock(this.hideThinkingBlock);\r\n\r\n\t\t// Rebuild chat from session messages\r\n\t\tthis.chatContainer.clear();\r\n\t\tthis.rebuildChatFromMessages();\r\n\r\n\t\t// If streaming, re-add the streaming component with updated visibility and re-render\r\n\t\tif (this.streamingComponent && this.streamingMessage) {\r\n\t\t\tthis.streamingComponent.setHideThinkingBlock(this.hideThinkingBlock);\r\n\t\t\tthis.streamingComponent.updateContent(this.streamingMessage);\r\n\t\t\tthis.chatContainer.addChild(this.streamingComponent);\r\n\t\t}\r\n\r\n\t\tthis.showStatus(`Thinking blocks: ${this.hideThinkingBlock ? \"hidden\" : \"visible\"}`);\r\n\t}\r\n\r\n\tprivate openExternalEditor(): void {\r\n\t\t// Determine editor (respect $VISUAL, then $EDITOR)\r\n\t\tconst editorCmd = process.env.VISUAL || process.env.EDITOR;\r\n\t\tif (!editorCmd) {\r\n\t\t\tthis.showWarning(\"No editor configured. Set $VISUAL or $EDITOR environment variable.\");\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst currentText = this.editor.getExpandedText?.() ?? this.editor.getText();\r\n\t\tconst tmpFile = path.join(os.tmpdir(), `pi-editor-${Date.now()}.pi.md`);\r\n\r\n\t\ttry {\r\n\t\t\t// Write current content to temp file\r\n\t\t\tfs.writeFileSync(tmpFile, currentText, \"utf-8\");\r\n\r\n\t\t\t// Stop TUI to release terminal\r\n\t\t\tthis.ui.stop();\r\n\r\n\t\t\t// Split by space to support editor arguments (e.g., \"code --wait\")\r\n\t\t\tconst [editor, ...editorArgs] = editorCmd.split(\" \");\r\n\r\n\t\t\t// Spawn editor synchronously with inherited stdio for interactive editing\r\n\t\t\tconst result = spawnSync(editor, [...editorArgs, tmpFile], {\r\n\t\t\t\tstdio: \"inherit\",\r\n\t\t\t});\r\n\r\n\t\t\t// On successful exit (status 0), replace editor content\r\n\t\t\tif (result.status === 0) {\r\n\t\t\t\tconst newContent = fs.readFileSync(tmpFile, \"utf-8\").replace(/\\n$/, \"\");\r\n\t\t\t\tthis.editor.setText(newContent);\r\n\t\t\t}\r\n\t\t\t// On non-zero exit, keep original text (no action needed)\r\n\t\t} finally {\r\n\t\t\t// Clean up temp file\r\n\t\t\ttry {\r\n\t\t\t\tfs.unlinkSync(tmpFile);\r\n\t\t\t} catch {\r\n\t\t\t\t// Ignore cleanup errors\r\n\t\t\t}\r\n\r\n\t\t\t// Restart TUI\r\n\t\t\tthis.ui.start();\r\n\t\t\t// Force full re-render since external editor uses alternate screen\r\n\t\t\tthis.ui.requestRender(true);\r\n\t\t}\r\n\t}\r\n\r\n\t// =========================================================================\r\n\t// UI helpers\r\n\t// =========================================================================\r\n\r\n\tclearEditor(): void {\r\n\t\tthis.editor.setText(\"\");\r\n\t\tthis.ui.requestRender();\r\n\t}\r\n\r\n\tshowError(errorMessage: string): void {\r\n\t\tthis.chatContainer.addChild(new Spacer(1));\r\n\t\tthis.chatContainer.addChild(new Text(theme.fg(\"error\", `Error: ${errorMessage}`), 1, 0));\r\n\t\tthis.ui.requestRender();\r\n\t}\r\n\r\n\tshowWarning(warningMessage: string): void {\r\n\t\tthis.chatContainer.addChild(new Spacer(1));\r\n\t\tthis.chatContainer.addChild(new Text(theme.fg(\"warning\", `Warning: ${warningMessage}`), 1, 0));\r\n\t\tthis.ui.requestRender();\r\n\t}\r\n\r\n\tshowNewVersionNotification(newVersion: string): void {\r\n\t\tconst action = theme.fg(\"accent\", getUpdateInstruction(\"@imdigitalashish/zpi\"));\r\n\t\tconst updateInstruction = theme.fg(\"muted\", `New version ${newVersion} is available. `) + action;\r\n\t\tconst changelogUrl = theme.fg(\r\n\t\t\t\"accent\",\r\n\t\t\t\"https://github.com/imdigitalashish/zpi/blob/main/packages/coding-agent/CHANGELOG.md\",\r\n\t\t);\r\n\t\tconst changelogLine = theme.fg(\"muted\", \"Changelog: \") + changelogUrl;\r\n\r\n\t\tthis.chatContainer.addChild(new Spacer(1));\r\n\t\tthis.chatContainer.addChild(new DynamicBorder((text) => theme.fg(\"warning\", text)));\r\n\t\tthis.chatContainer.addChild(\r\n\t\t\tnew Text(\r\n\t\t\t\t`${theme.bold(theme.fg(\"warning\", \"Update Available\"))}\\n${updateInstruction}\\n${changelogLine}`,\r\n\t\t\t\t1,\r\n\t\t\t\t0,\r\n\t\t\t),\r\n\t\t);\r\n\t\tthis.chatContainer.addChild(new DynamicBorder((text) => theme.fg(\"warning\", text)));\r\n\t\tthis.ui.requestRender();\r\n\t}\r\n\r\n\t/**\r\n\t * Get all queued messages (read-only).\r\n\t * Combines session queue and compaction queue.\r\n\t */\r\n\tprivate getAllQueuedMessages(): { steering: string[]; followUp: string[] } {\r\n\t\treturn {\r\n\t\t\tsteering: [\r\n\t\t\t\t...this.session.getSteeringMessages(),\r\n\t\t\t\t...this.compactionQueuedMessages.filter((msg) => msg.mode === \"steer\").map((msg) => msg.text),\r\n\t\t\t],\r\n\t\t\tfollowUp: [\r\n\t\t\t\t...this.session.getFollowUpMessages(),\r\n\t\t\t\t...this.compactionQueuedMessages.filter((msg) => msg.mode === \"followUp\").map((msg) => msg.text),\r\n\t\t\t],\r\n\t\t};\r\n\t}\r\n\r\n\t/**\r\n\t * Clear all queued messages and return their contents.\r\n\t * Clears both session queue and compaction queue.\r\n\t */\r\n\tprivate clearAllQueues(): { steering: string[]; followUp: string[] } {\r\n\t\tconst { steering, followUp } = this.session.clearQueue();\r\n\t\tconst compactionSteering = this.compactionQueuedMessages\r\n\t\t\t.filter((msg) => msg.mode === \"steer\")\r\n\t\t\t.map((msg) => msg.text);\r\n\t\tconst compactionFollowUp = this.compactionQueuedMessages\r\n\t\t\t.filter((msg) => msg.mode === \"followUp\")\r\n\t\t\t.map((msg) => msg.text);\r\n\t\tthis.compactionQueuedMessages = [];\r\n\t\treturn {\r\n\t\t\tsteering: [...steering, ...compactionSteering],\r\n\t\t\tfollowUp: [...followUp, ...compactionFollowUp],\r\n\t\t};\r\n\t}\r\n\r\n\tprivate updatePendingMessagesDisplay(): void {\r\n\t\tthis.pendingMessagesContainer.clear();\r\n\t\tconst { steering: steeringMessages, followUp: followUpMessages } = this.getAllQueuedMessages();\r\n\t\tif (steeringMessages.length > 0 || followUpMessages.length > 0) {\r\n\t\t\tthis.pendingMessagesContainer.addChild(new Spacer(1));\r\n\t\t\tfor (const message of steeringMessages) {\r\n\t\t\t\tconst text = theme.fg(\"dim\", `Steering: ${message}`);\r\n\t\t\t\tthis.pendingMessagesContainer.addChild(new TruncatedText(text, 1, 0));\r\n\t\t\t}\r\n\t\t\tfor (const message of followUpMessages) {\r\n\t\t\t\tconst text = theme.fg(\"dim\", `Follow-up: ${message}`);\r\n\t\t\t\tthis.pendingMessagesContainer.addChild(new TruncatedText(text, 1, 0));\r\n\t\t\t}\r\n\t\t\tconst dequeueHint = this.getAppKeyDisplay(\"dequeue\");\r\n\t\t\tconst hintText = theme.fg(\"dim\", `↳ ${dequeueHint} to edit all queued messages`);\r\n\t\t\tthis.pendingMessagesContainer.addChild(new TruncatedText(hintText, 1, 0));\r\n\t\t}\r\n\t}\r\n\r\n\tprivate restoreQueuedMessagesToEditor(options?: { abort?: boolean; currentText?: string }): number {\r\n\t\tconst { steering, followUp } = this.clearAllQueues();\r\n\t\tconst allQueued = [...steering, ...followUp];\r\n\t\tif (allQueued.length === 0) {\r\n\t\t\tthis.updatePendingMessagesDisplay();\r\n\t\t\tif (options?.abort) {\r\n\t\t\t\tthis.agent.abort();\r\n\t\t\t}\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t\tconst queuedText = allQueued.join(\"\\n\\n\");\r\n\t\tconst currentText = options?.currentText ?? this.editor.getText();\r\n\t\tconst combinedText = [queuedText, currentText].filter((t) => t.trim()).join(\"\\n\\n\");\r\n\t\tthis.editor.setText(combinedText);\r\n\t\tthis.updatePendingMessagesDisplay();\r\n\t\tif (options?.abort) {\r\n\t\t\tthis.agent.abort();\r\n\t\t}\r\n\t\treturn allQueued.length;\r\n\t}\r\n\r\n\tprivate queueCompactionMessage(text: string, mode: \"steer\" | \"followUp\"): void {\r\n\t\tthis.compactionQueuedMessages.push({ text, mode });\r\n\t\tthis.editor.addToHistory?.(text);\r\n\t\tthis.editor.setText(\"\");\r\n\t\tthis.updatePendingMessagesDisplay();\r\n\t\tthis.showStatus(\"Queued message for after compaction\");\r\n\t}\r\n\r\n\tprivate isExtensionCommand(text: string): boolean {\r\n\t\tif (!text.startsWith(\"/\")) return false;\r\n\r\n\t\tconst extensionRunner = this.session.extensionRunner;\r\n\t\tif (!extensionRunner) return false;\r\n\r\n\t\tconst spaceIndex = text.indexOf(\" \");\r\n\t\tconst commandName = spaceIndex === -1 ? text.slice(1) : text.slice(1, spaceIndex);\r\n\t\treturn !!extensionRunner.getCommand(commandName);\r\n\t}\r\n\r\n\tprivate async flushCompactionQueue(options?: { willRetry?: boolean }): Promise<void> {\r\n\t\tif (this.compactionQueuedMessages.length === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst queuedMessages = [...this.compactionQueuedMessages];\r\n\t\tthis.compactionQueuedMessages = [];\r\n\t\tthis.updatePendingMessagesDisplay();\r\n\r\n\t\tconst restoreQueue = (error: unknown) => {\r\n\t\t\tthis.session.clearQueue();\r\n\t\t\tthis.compactionQueuedMessages = queuedMessages;\r\n\t\t\tthis.updatePendingMessagesDisplay();\r\n\t\t\tthis.showError(\r\n\t\t\t\t`Failed to send queued message${queuedMessages.length > 1 ? \"s\" : \"\"}: ${\r\n\t\t\t\t\terror instanceof Error ? error.message : String(error)\r\n\t\t\t\t}`,\r\n\t\t\t);\r\n\t\t};\r\n\r\n\t\ttry {\r\n\t\t\tif (options?.willRetry) {\r\n\t\t\t\t// When retry is pending, queue messages for the retry turn\r\n\t\t\t\tfor (const message of queuedMessages) {\r\n\t\t\t\t\tif (this.isExtensionCommand(message.text)) {\r\n\t\t\t\t\t\tawait this.session.prompt(message.text);\r\n\t\t\t\t\t} else if (message.mode === \"followUp\") {\r\n\t\t\t\t\t\tawait this.session.followUp(message.text);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tawait this.session.steer(message.text);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tthis.updatePendingMessagesDisplay();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// Find first non-extension-command message to use as prompt\r\n\t\t\tconst firstPromptIndex = queuedMessages.findIndex((message) => !this.isExtensionCommand(message.text));\r\n\t\t\tif (firstPromptIndex === -1) {\r\n\t\t\t\t// All extension commands - execute them all\r\n\t\t\t\tfor (const message of queuedMessages) {\r\n\t\t\t\t\tawait this.session.prompt(message.text);\r\n\t\t\t\t}\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// Execute any extension commands before the first prompt\r\n\t\t\tconst preCommands = queuedMessages.slice(0, firstPromptIndex);\r\n\t\t\tconst firstPrompt = queuedMessages[firstPromptIndex];\r\n\t\t\tconst rest = queuedMessages.slice(firstPromptIndex + 1);\r\n\r\n\t\t\tfor (const message of preCommands) {\r\n\t\t\t\tawait this.session.prompt(message.text);\r\n\t\t\t}\r\n\r\n\t\t\t// Send first prompt (starts streaming)\r\n\t\t\tconst promptPromise = this.session.prompt(firstPrompt.text).catch((error) => {\r\n\t\t\t\trestoreQueue(error);\r\n\t\t\t});\r\n\r\n\t\t\t// Queue remaining messages\r\n\t\t\tfor (const message of rest) {\r\n\t\t\t\tif (this.isExtensionCommand(message.text)) {\r\n\t\t\t\t\tawait this.session.prompt(message.text);\r\n\t\t\t\t} else if (message.mode === \"followUp\") {\r\n\t\t\t\t\tawait this.session.followUp(message.text);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tawait this.session.steer(message.text);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthis.updatePendingMessagesDisplay();\r\n\t\t\tvoid promptPromise;\r\n\t\t} catch (error) {\r\n\t\t\trestoreQueue(error);\r\n\t\t}\r\n\t}\r\n\r\n\t/** Move pending bash components from pending area to chat */\r\n\tprivate flushPendingBashComponents(): void {\r\n\t\tfor (const component of this.pendingBashComponents) {\r\n\t\t\tthis.pendingMessagesContainer.removeChild(component);\r\n\t\t\tthis.chatContainer.addChild(component);\r\n\t\t}\r\n\t\tthis.pendingBashComponents = [];\r\n\t}\r\n\r\n\t// =========================================================================\r\n\t// Selectors\r\n\t// =========================================================================\r\n\r\n\t/**\r\n\t * Shows a selector component in place of the editor.\r\n\t * @param create Factory that receives a `done` callback and returns the component and focus target\r\n\t */\r\n\tprivate showSelector(create: (done: () => void) => { component: Component; focus: Component }): void {\r\n\t\tconst done = () => {\r\n\t\t\tthis.editorContainer.clear();\r\n\t\t\tthis.editorContainer.addChild(this.editor);\r\n\t\t\tthis.ui.setFocus(this.editor);\r\n\t\t};\r\n\t\tconst { component, focus } = create(done);\r\n\t\tthis.editorContainer.clear();\r\n\t\tthis.editorContainer.addChild(component);\r\n\t\tthis.ui.setFocus(focus);\r\n\t\tthis.ui.requestRender();\r\n\t}\r\n\r\n\tprivate showSettingsSelector(): void {\r\n\t\tthis.showSelector((done) => {\r\n\t\t\tconst selector = new SettingsSelectorComponent(\r\n\t\t\t\t{\r\n\t\t\t\t\tautoCompact: this.session.autoCompactionEnabled,\r\n\t\t\t\t\tshowImages: this.settingsManager.getShowImages(),\r\n\t\t\t\t\tautoResizeImages: this.settingsManager.getImageAutoResize(),\r\n\t\t\t\t\tblockImages: this.settingsManager.getBlockImages(),\r\n\t\t\t\t\tenableSkillCommands: this.settingsManager.getEnableSkillCommands(),\r\n\t\t\t\t\tsteeringMode: this.session.steeringMode,\r\n\t\t\t\t\tfollowUpMode: this.session.followUpMode,\r\n\t\t\t\t\ttransport: this.settingsManager.getTransport(),\r\n\t\t\t\t\tthinkingLevel: this.session.thinkingLevel,\r\n\t\t\t\t\tavailableThinkingLevels: this.session.getAvailableThinkingLevels(),\r\n\t\t\t\t\tcurrentTheme: this.settingsManager.getTheme() || \"dark\",\r\n\t\t\t\t\tavailableThemes: getAvailableThemes(),\r\n\t\t\t\t\thideThinkingBlock: this.hideThinkingBlock,\r\n\t\t\t\t\tcollapseChangelog: this.settingsManager.getCollapseChangelog(),\r\n\t\t\t\t\tdoubleEscapeAction: this.settingsManager.getDoubleEscapeAction(),\r\n\t\t\t\t\tshowHardwareCursor: this.settingsManager.getShowHardwareCursor(),\r\n\t\t\t\t\teditorPaddingX: this.settingsManager.getEditorPaddingX(),\r\n\t\t\t\t\tautocompleteMaxVisible: this.settingsManager.getAutocompleteMaxVisible(),\r\n\t\t\t\t\tquietStartup: this.settingsManager.getQuietStartup(),\r\n\t\t\t\t\tclearOnShrink: this.settingsManager.getClearOnShrink(),\r\n\t\t\t\t\tmemoryEnabled: this.settingsManager.getMemoryEnabled(),\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tonAutoCompactChange: (enabled) => {\r\n\t\t\t\t\t\tthis.session.setAutoCompactionEnabled(enabled);\r\n\t\t\t\t\t\tthis.footer.setAutoCompactEnabled(enabled);\r\n\t\t\t\t\t},\r\n\t\t\t\t\tonShowImagesChange: (enabled) => {\r\n\t\t\t\t\t\tthis.settingsManager.setShowImages(enabled);\r\n\t\t\t\t\t\tfor (const child of this.chatContainer.children) {\r\n\t\t\t\t\t\t\tif (child instanceof ToolExecutionComponent) {\r\n\t\t\t\t\t\t\t\tchild.setShowImages(enabled);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\tonAutoResizeImagesChange: (enabled) => {\r\n\t\t\t\t\t\tthis.settingsManager.setImageAutoResize(enabled);\r\n\t\t\t\t\t},\r\n\t\t\t\t\tonBlockImagesChange: (blocked) => {\r\n\t\t\t\t\t\tthis.settingsManager.setBlockImages(blocked);\r\n\t\t\t\t\t},\r\n\t\t\t\t\tonEnableSkillCommandsChange: (enabled) => {\r\n\t\t\t\t\t\tthis.settingsManager.setEnableSkillCommands(enabled);\r\n\t\t\t\t\t\tthis.setupAutocomplete(this.fdPath);\r\n\t\t\t\t\t},\r\n\t\t\t\t\tonSteeringModeChange: (mode) => {\r\n\t\t\t\t\t\tthis.session.setSteeringMode(mode);\r\n\t\t\t\t\t},\r\n\t\t\t\t\tonFollowUpModeChange: (mode) => {\r\n\t\t\t\t\t\tthis.session.setFollowUpMode(mode);\r\n\t\t\t\t\t},\r\n\t\t\t\t\tonTransportChange: (transport) => {\r\n\t\t\t\t\t\tthis.settingsManager.setTransport(transport);\r\n\t\t\t\t\t\tthis.session.agent.setTransport(transport);\r\n\t\t\t\t\t},\r\n\t\t\t\t\tonThinkingLevelChange: (level) => {\r\n\t\t\t\t\t\tthis.session.setThinkingLevel(level);\r\n\t\t\t\t\t\tthis.footer.invalidate();\r\n\t\t\t\t\t\tthis.updateEditorBorderColor();\r\n\t\t\t\t\t},\r\n\t\t\t\t\tonThemeChange: (themeName) => {\r\n\t\t\t\t\t\tconst result = setTheme(themeName, true);\r\n\t\t\t\t\t\tthis.settingsManager.setTheme(themeName);\r\n\t\t\t\t\t\tthis.ui.invalidate();\r\n\t\t\t\t\t\tif (!result.success) {\r\n\t\t\t\t\t\t\tthis.showError(`Failed to load theme \"${themeName}\": ${result.error}\\nFell back to dark theme.`);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\tonThemePreview: (themeName) => {\r\n\t\t\t\t\t\tconst result = setTheme(themeName, true);\r\n\t\t\t\t\t\tif (result.success) {\r\n\t\t\t\t\t\t\tthis.ui.invalidate();\r\n\t\t\t\t\t\t\tthis.ui.requestRender();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\tonHideThinkingBlockChange: (hidden) => {\r\n\t\t\t\t\t\tthis.hideThinkingBlock = hidden;\r\n\t\t\t\t\t\tthis.settingsManager.setHideThinkingBlock(hidden);\r\n\t\t\t\t\t\tfor (const child of this.chatContainer.children) {\r\n\t\t\t\t\t\t\tif (child instanceof AssistantMessageComponent) {\r\n\t\t\t\t\t\t\t\tchild.setHideThinkingBlock(hidden);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tthis.chatContainer.clear();\r\n\t\t\t\t\t\tthis.rebuildChatFromMessages();\r\n\t\t\t\t\t},\r\n\t\t\t\t\tonCollapseChangelogChange: (collapsed) => {\r\n\t\t\t\t\t\tthis.settingsManager.setCollapseChangelog(collapsed);\r\n\t\t\t\t\t},\r\n\t\t\t\t\tonQuietStartupChange: (enabled) => {\r\n\t\t\t\t\t\tthis.settingsManager.setQuietStartup(enabled);\r\n\t\t\t\t\t},\r\n\t\t\t\t\tonDoubleEscapeActionChange: (action) => {\r\n\t\t\t\t\t\tthis.settingsManager.setDoubleEscapeAction(action);\r\n\t\t\t\t\t},\r\n\t\t\t\t\tonShowHardwareCursorChange: (enabled) => {\r\n\t\t\t\t\t\tthis.settingsManager.setShowHardwareCursor(enabled);\r\n\t\t\t\t\t\tthis.ui.setShowHardwareCursor(enabled);\r\n\t\t\t\t\t},\r\n\t\t\t\t\tonEditorPaddingXChange: (padding) => {\r\n\t\t\t\t\t\tthis.settingsManager.setEditorPaddingX(padding);\r\n\t\t\t\t\t\tthis.defaultEditor.setPaddingX(padding);\r\n\t\t\t\t\t\tif (this.editor !== this.defaultEditor && this.editor.setPaddingX !== undefined) {\r\n\t\t\t\t\t\t\tthis.editor.setPaddingX(padding);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\tonAutocompleteMaxVisibleChange: (maxVisible) => {\r\n\t\t\t\t\t\tthis.settingsManager.setAutocompleteMaxVisible(maxVisible);\r\n\t\t\t\t\t\tthis.defaultEditor.setAutocompleteMaxVisible(maxVisible);\r\n\t\t\t\t\t\tif (this.editor !== this.defaultEditor && this.editor.setAutocompleteMaxVisible !== undefined) {\r\n\t\t\t\t\t\t\tthis.editor.setAutocompleteMaxVisible(maxVisible);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\tonClearOnShrinkChange: (enabled) => {\r\n\t\t\t\t\t\tthis.settingsManager.setClearOnShrink(enabled);\r\n\t\t\t\t\t\tthis.ui.setClearOnShrink(enabled);\r\n\t\t\t\t\t},\r\n\t\t\t\t\tonMemoryEnabledChange: (enabled) => {\r\n\t\t\t\t\t\tthis.settingsManager.setMemoryEnabled(enabled);\r\n\t\t\t\t\t},\r\n\t\t\t\t\tonCancel: () => {\r\n\t\t\t\t\t\tdone();\r\n\t\t\t\t\t\tthis.ui.requestRender();\r\n\t\t\t\t\t},\r\n\t\t\t\t},\r\n\t\t\t);\r\n\t\t\treturn { component: selector, focus: selector.getSettingsList() };\r\n\t\t});\r\n\t}\r\n\r\n\tprivate async handleModelCommand(searchTerm?: string): Promise<void> {\r\n\t\tif (!searchTerm) {\r\n\t\t\tthis.showModelSelector();\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst model = await this.findExactModelMatch(searchTerm);\r\n\t\tif (model) {\r\n\t\t\ttry {\r\n\t\t\t\tawait this.session.setModel(model);\r\n\t\t\t\tthis.footer.invalidate();\r\n\t\t\t\tthis.updateEditorBorderColor();\r\n\t\t\t\tthis.showStatus(`Model: ${model.id}`);\r\n\t\t\t\tthis.checkDaxnutsEasterEgg(model);\r\n\t\t\t} catch (error) {\r\n\t\t\t\tthis.showError(error instanceof Error ? error.message : String(error));\r\n\t\t\t}\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.showModelSelector(searchTerm);\r\n\t}\r\n\r\n\tprivate async findExactModelMatch(searchTerm: string): Promise<Model<any> | undefined> {\r\n\t\tconst term = searchTerm.trim();\r\n\t\tif (!term) return undefined;\r\n\r\n\t\tlet targetProvider: string | undefined;\r\n\t\tlet targetModelId = \"\";\r\n\r\n\t\tif (term.includes(\"/\")) {\r\n\t\t\tconst parts = term.split(\"/\", 2);\r\n\t\t\ttargetProvider = parts[0]?.trim().toLowerCase();\r\n\t\t\ttargetModelId = parts[1]?.trim().toLowerCase() ?? \"\";\r\n\t\t} else {\r\n\t\t\ttargetModelId = term.toLowerCase();\r\n\t\t}\r\n\r\n\t\tif (!targetModelId) return undefined;\r\n\r\n\t\tconst models = await this.getModelCandidates();\r\n\t\tconst exactMatches = models.filter((item) => {\r\n\t\t\tconst idMatch = item.id.toLowerCase() === targetModelId;\r\n\t\t\tconst providerMatch = !targetProvider || item.provider.toLowerCase() === targetProvider;\r\n\t\t\treturn idMatch && providerMatch;\r\n\t\t});\r\n\r\n\t\treturn exactMatches.length === 1 ? exactMatches[0] : undefined;\r\n\t}\r\n\r\n\tprivate async getModelCandidates(): Promise<Model<any>[]> {\r\n\t\tif (this.session.scopedModels.length > 0) {\r\n\t\t\treturn this.session.scopedModels.map((scoped) => scoped.model);\r\n\t\t}\r\n\r\n\t\tthis.session.modelRegistry.refresh();\r\n\t\ttry {\r\n\t\t\treturn await this.session.modelRegistry.getAvailable();\r\n\t\t} catch {\r\n\t\t\treturn [];\r\n\t\t}\r\n\t}\r\n\r\n\t/** Update the footer's available provider count from current model candidates */\r\n\tprivate async updateAvailableProviderCount(): Promise<void> {\r\n\t\tconst models = await this.getModelCandidates();\r\n\t\tconst uniqueProviders = new Set(models.map((m) => m.provider));\r\n\t\tthis.footerDataProvider.setAvailableProviderCount(uniqueProviders.size);\r\n\t}\r\n\r\n\tprivate showModelSelector(initialSearchInput?: string): void {\r\n\t\tthis.showSelector((done) => {\r\n\t\t\tconst selector = new ModelSelectorComponent(\r\n\t\t\t\tthis.ui,\r\n\t\t\t\tthis.session.model,\r\n\t\t\t\tthis.settingsManager,\r\n\t\t\t\tthis.session.modelRegistry,\r\n\t\t\t\tthis.session.scopedModels,\r\n\t\t\t\tasync (model) => {\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tawait this.session.setModel(model);\r\n\t\t\t\t\t\tthis.footer.invalidate();\r\n\t\t\t\t\t\tthis.updateEditorBorderColor();\r\n\t\t\t\t\t\tdone();\r\n\t\t\t\t\t\tthis.showStatus(`Model: ${model.id}`);\r\n\t\t\t\t\t\tthis.checkDaxnutsEasterEgg(model);\r\n\t\t\t\t\t} catch (error) {\r\n\t\t\t\t\t\tdone();\r\n\t\t\t\t\t\tthis.showError(error instanceof Error ? error.message : String(error));\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t() => {\r\n\t\t\t\t\tdone();\r\n\t\t\t\t\tthis.ui.requestRender();\r\n\t\t\t\t},\r\n\t\t\t\tinitialSearchInput,\r\n\t\t\t);\r\n\t\t\treturn { component: selector, focus: selector };\r\n\t\t});\r\n\t}\r\n\r\n\tprivate async showModelsSelector(): Promise<void> {\r\n\t\t// Get all available models\r\n\t\tthis.session.modelRegistry.refresh();\r\n\t\tconst allModels = this.session.modelRegistry.getAvailable();\r\n\r\n\t\tif (allModels.length === 0) {\r\n\t\t\tthis.showStatus(\"No models available\");\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Check if session has scoped models (from previous session-only changes or CLI --models)\r\n\t\tconst sessionScopedModels = this.session.scopedModels;\r\n\t\tconst hasSessionScope = sessionScopedModels.length > 0;\r\n\r\n\t\t// Build enabled model IDs from session state or settings\r\n\t\tconst enabledModelIds = new Set<string>();\r\n\t\tlet hasFilter = false;\r\n\r\n\t\tif (hasSessionScope) {\r\n\t\t\t// Use current session's scoped models\r\n\t\t\tfor (const sm of sessionScopedModels) {\r\n\t\t\t\tenabledModelIds.add(`${sm.model.provider}/${sm.model.id}`);\r\n\t\t\t}\r\n\t\t\thasFilter = true;\r\n\t\t} else {\r\n\t\t\t// Fall back to settings\r\n\t\t\tconst patterns = this.settingsManager.getEnabledModels();\r\n\t\t\tif (patterns !== undefined && patterns.length > 0) {\r\n\t\t\t\thasFilter = true;\r\n\t\t\t\tconst scopedModels = await resolveModelScope(patterns, this.session.modelRegistry);\r\n\t\t\t\tfor (const sm of scopedModels) {\r\n\t\t\t\t\tenabledModelIds.add(`${sm.model.provider}/${sm.model.id}`);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Track current enabled state (session-only until persisted)\r\n\t\tconst currentEnabledIds = new Set(enabledModelIds);\r\n\t\tlet currentHasFilter = hasFilter;\r\n\r\n\t\t// Helper to update session's scoped models (session-only, no persist)\r\n\t\tconst updateSessionModels = async (enabledIds: Set<string>) => {\r\n\t\t\tif (enabledIds.size > 0 && enabledIds.size < allModels.length) {\r\n\t\t\t\t// Use current session thinking level, not settings default\r\n\t\t\t\tconst currentThinkingLevel = this.session.thinkingLevel;\r\n\t\t\t\tconst newScopedModels = await resolveModelScope(Array.from(enabledIds), this.session.modelRegistry);\r\n\t\t\t\tthis.session.setScopedModels(\r\n\t\t\t\t\tnewScopedModels.map((sm) => ({\r\n\t\t\t\t\t\tmodel: sm.model,\r\n\t\t\t\t\t\tthinkingLevel: sm.thinkingLevel ?? currentThinkingLevel,\r\n\t\t\t\t\t})),\r\n\t\t\t\t);\r\n\t\t\t} else {\r\n\t\t\t\t// All enabled or none enabled = no filter\r\n\t\t\t\tthis.session.setScopedModels([]);\r\n\t\t\t}\r\n\t\t\tawait this.updateAvailableProviderCount();\r\n\t\t\tthis.ui.requestRender();\r\n\t\t};\r\n\r\n\t\tthis.showSelector((done) => {\r\n\t\t\tconst selector = new ScopedModelsSelectorComponent(\r\n\t\t\t\t{\r\n\t\t\t\t\tallModels,\r\n\t\t\t\t\tenabledModelIds: currentEnabledIds,\r\n\t\t\t\t\thasEnabledModelsFilter: currentHasFilter,\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tonModelToggle: async (modelId, enabled) => {\r\n\t\t\t\t\t\tif (enabled) {\r\n\t\t\t\t\t\t\tcurrentEnabledIds.add(modelId);\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tcurrentEnabledIds.delete(modelId);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tcurrentHasFilter = true;\r\n\t\t\t\t\t\tawait updateSessionModels(currentEnabledIds);\r\n\t\t\t\t\t},\r\n\t\t\t\t\tonEnableAll: async (allModelIds) => {\r\n\t\t\t\t\t\tcurrentEnabledIds.clear();\r\n\t\t\t\t\t\tfor (const id of allModelIds) {\r\n\t\t\t\t\t\t\tcurrentEnabledIds.add(id);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tcurrentHasFilter = false;\r\n\t\t\t\t\t\tawait updateSessionModels(currentEnabledIds);\r\n\t\t\t\t\t},\r\n\t\t\t\t\tonClearAll: async () => {\r\n\t\t\t\t\t\tcurrentEnabledIds.clear();\r\n\t\t\t\t\t\tcurrentHasFilter = true;\r\n\t\t\t\t\t\tawait updateSessionModels(currentEnabledIds);\r\n\t\t\t\t\t},\r\n\t\t\t\t\tonToggleProvider: async (_provider, modelIds, enabled) => {\r\n\t\t\t\t\t\tfor (const id of modelIds) {\r\n\t\t\t\t\t\t\tif (enabled) {\r\n\t\t\t\t\t\t\t\tcurrentEnabledIds.add(id);\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tcurrentEnabledIds.delete(id);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tcurrentHasFilter = true;\r\n\t\t\t\t\t\tawait updateSessionModels(currentEnabledIds);\r\n\t\t\t\t\t},\r\n\t\t\t\t\tonPersist: (enabledIds) => {\r\n\t\t\t\t\t\t// Persist to settings\r\n\t\t\t\t\t\tconst newPatterns =\r\n\t\t\t\t\t\t\tenabledIds.length === allModels.length\r\n\t\t\t\t\t\t\t\t? undefined // All enabled = clear filter\r\n\t\t\t\t\t\t\t\t: enabledIds;\r\n\t\t\t\t\t\tthis.settingsManager.setEnabledModels(newPatterns);\r\n\t\t\t\t\t\tthis.showStatus(\"Model selection saved to settings\");\r\n\t\t\t\t\t},\r\n\t\t\t\t\tonCancel: () => {\r\n\t\t\t\t\t\tdone();\r\n\t\t\t\t\t\tthis.ui.requestRender();\r\n\t\t\t\t\t},\r\n\t\t\t\t},\r\n\t\t\t);\r\n\t\t\treturn { component: selector, focus: selector };\r\n\t\t});\r\n\t}\r\n\r\n\tprivate showUserMessageSelector(): void {\r\n\t\tconst userMessages = this.session.getUserMessagesForForking();\r\n\r\n\t\tif (userMessages.length === 0) {\r\n\t\t\tthis.showStatus(\"No messages to fork from\");\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.showSelector((done) => {\r\n\t\t\tconst selector = new UserMessageSelectorComponent(\r\n\t\t\t\tuserMessages.map((m) => ({ id: m.entryId, text: m.text })),\r\n\t\t\t\tasync (entryId) => {\r\n\t\t\t\t\tconst result = await this.session.fork(entryId);\r\n\t\t\t\t\tif (result.cancelled) {\r\n\t\t\t\t\t\t// Extension cancelled the fork\r\n\t\t\t\t\t\tdone();\r\n\t\t\t\t\t\tthis.ui.requestRender();\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.chatContainer.clear();\r\n\t\t\t\t\tthis.renderInitialMessages();\r\n\t\t\t\t\tthis.editor.setText(result.selectedText);\r\n\t\t\t\t\tdone();\r\n\t\t\t\t\tthis.showStatus(\"Branched to new session\");\r\n\t\t\t\t},\r\n\t\t\t\t() => {\r\n\t\t\t\t\tdone();\r\n\t\t\t\t\tthis.ui.requestRender();\r\n\t\t\t\t},\r\n\t\t\t);\r\n\t\t\treturn { component: selector, focus: selector.getMessageList() };\r\n\t\t});\r\n\t}\r\n\r\n\tprivate showTreeSelector(initialSelectedId?: string): void {\r\n\t\tconst tree = this.sessionManager.getTree();\r\n\t\tconst realLeafId = this.sessionManager.getLeafId();\r\n\r\n\t\tif (tree.length === 0) {\r\n\t\t\tthis.showStatus(\"No entries in session\");\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.showSelector((done) => {\r\n\t\t\tconst selector = new TreeSelectorComponent(\r\n\t\t\t\ttree,\r\n\t\t\t\trealLeafId,\r\n\t\t\t\tthis.ui.terminal.rows,\r\n\t\t\t\tasync (entryId) => {\r\n\t\t\t\t\t// Selecting the current leaf is a no-op (already there)\r\n\t\t\t\t\tif (entryId === realLeafId) {\r\n\t\t\t\t\t\tdone();\r\n\t\t\t\t\t\tthis.showStatus(\"Already at this point\");\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Ask about summarization\r\n\t\t\t\t\tdone(); // Close selector first\r\n\r\n\t\t\t\t\t// Loop until user makes a complete choice or cancels to tree\r\n\t\t\t\t\tlet wantsSummary = false;\r\n\t\t\t\t\tlet customInstructions: string | undefined;\r\n\r\n\t\t\t\t\twhile (true) {\r\n\t\t\t\t\t\tconst summaryChoice = await this.showExtensionSelector(\"Summarize branch?\", [\r\n\t\t\t\t\t\t\t\"No summary\",\r\n\t\t\t\t\t\t\t\"Summarize\",\r\n\t\t\t\t\t\t\t\"Summarize with custom prompt\",\r\n\t\t\t\t\t\t]);\r\n\r\n\t\t\t\t\t\tif (summaryChoice === undefined) {\r\n\t\t\t\t\t\t\t// User pressed escape - re-show tree selector with same selection\r\n\t\t\t\t\t\t\tthis.showTreeSelector(entryId);\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\twantsSummary = summaryChoice !== \"No summary\";\r\n\r\n\t\t\t\t\t\tif (summaryChoice === \"Summarize with custom prompt\") {\r\n\t\t\t\t\t\t\tcustomInstructions = await this.showExtensionEditor(\"Custom summarization instructions\");\r\n\t\t\t\t\t\t\tif (customInstructions === undefined) {\r\n\t\t\t\t\t\t\t\t// User cancelled - loop back to summary selector\r\n\t\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// User made a complete choice\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Set up escape handler and loader if summarizing\r\n\t\t\t\t\tlet summaryLoader: Loader | undefined;\r\n\t\t\t\t\tconst originalOnEscape = this.defaultEditor.onEscape;\r\n\r\n\t\t\t\t\tif (wantsSummary) {\r\n\t\t\t\t\t\tthis.defaultEditor.onEscape = () => {\r\n\t\t\t\t\t\t\tthis.session.abortBranchSummary();\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\r\n\t\t\t\t\t\tsummaryLoader = new Loader(\r\n\t\t\t\t\t\t\tthis.ui,\r\n\t\t\t\t\t\t\t(spinner) => theme.fg(\"accent\", spinner),\r\n\t\t\t\t\t\t\t(text) => theme.fg(\"muted\", text),\r\n\t\t\t\t\t\t\t`Summarizing branch... (${appKey(this.keybindings, \"interrupt\")} to cancel)`,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tthis.statusContainer.addChild(summaryLoader);\r\n\t\t\t\t\t\tthis.ui.requestRender();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tconst result = await this.session.navigateTree(entryId, {\r\n\t\t\t\t\t\t\tsummarize: wantsSummary,\r\n\t\t\t\t\t\t\tcustomInstructions,\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\tif (result.aborted) {\r\n\t\t\t\t\t\t\t// Summarization aborted - re-show tree selector with same selection\r\n\t\t\t\t\t\t\tthis.showStatus(\"Branch summarization cancelled\");\r\n\t\t\t\t\t\t\tthis.showTreeSelector(entryId);\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (result.cancelled) {\r\n\t\t\t\t\t\t\tthis.showStatus(\"Navigation cancelled\");\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// Update UI\r\n\t\t\t\t\t\tthis.chatContainer.clear();\r\n\t\t\t\t\t\tthis.renderInitialMessages();\r\n\t\t\t\t\t\tif (result.editorText && !this.editor.getText().trim()) {\r\n\t\t\t\t\t\t\tthis.editor.setText(result.editorText);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tthis.showStatus(\"Navigated to selected point\");\r\n\t\t\t\t\t} catch (error) {\r\n\t\t\t\t\t\tthis.showError(error instanceof Error ? error.message : String(error));\r\n\t\t\t\t\t} finally {\r\n\t\t\t\t\t\tif (summaryLoader) {\r\n\t\t\t\t\t\t\tsummaryLoader.stop();\r\n\t\t\t\t\t\t\tthis.statusContainer.clear();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tthis.defaultEditor.onEscape = originalOnEscape;\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t() => {\r\n\t\t\t\t\tdone();\r\n\t\t\t\t\tthis.ui.requestRender();\r\n\t\t\t\t},\r\n\t\t\t\t(entryId, label) => {\r\n\t\t\t\t\tthis.sessionManager.appendLabelChange(entryId, label);\r\n\t\t\t\t\tthis.ui.requestRender();\r\n\t\t\t\t},\r\n\t\t\t\tinitialSelectedId,\r\n\t\t\t);\r\n\t\t\treturn { component: selector, focus: selector };\r\n\t\t});\r\n\t}\r\n\r\n\tprivate showSessionSelector(): void {\r\n\t\tthis.showSelector((done) => {\r\n\t\t\tconst selector = new SessionSelectorComponent(\r\n\t\t\t\t(onProgress) =>\r\n\t\t\t\t\tSessionManager.list(this.sessionManager.getCwd(), this.sessionManager.getSessionDir(), onProgress),\r\n\t\t\t\tSessionManager.listAll,\r\n\t\t\t\tasync (sessionPath) => {\r\n\t\t\t\t\tdone();\r\n\t\t\t\t\tawait this.handleResumeSession(sessionPath);\r\n\t\t\t\t},\r\n\t\t\t\t() => {\r\n\t\t\t\t\tdone();\r\n\t\t\t\t\tthis.ui.requestRender();\r\n\t\t\t\t},\r\n\t\t\t\t() => {\r\n\t\t\t\t\tvoid this.shutdown();\r\n\t\t\t\t},\r\n\t\t\t\t() => this.ui.requestRender(),\r\n\t\t\t\t{\r\n\t\t\t\t\trenameSession: async (sessionFilePath: string, nextName: string | undefined) => {\r\n\t\t\t\t\t\tconst next = (nextName ?? \"\").trim();\r\n\t\t\t\t\t\tif (!next) return;\r\n\t\t\t\t\t\tconst mgr = SessionManager.open(sessionFilePath);\r\n\t\t\t\t\t\tmgr.appendSessionInfo(next);\r\n\t\t\t\t\t},\r\n\t\t\t\t\tshowRenameHint: true,\r\n\t\t\t\t\tkeybindings: this.keybindings,\r\n\t\t\t\t},\r\n\r\n\t\t\t\tthis.sessionManager.getSessionFile(),\r\n\t\t\t);\r\n\t\t\treturn { component: selector, focus: selector };\r\n\t\t});\r\n\t}\r\n\r\n\tprivate async handleResumeSession(sessionPath: string): Promise<void> {\r\n\t\t// Stop loading animation\r\n\t\tif (this.loadingAnimation) {\r\n\t\t\tthis.loadingAnimation.stop();\r\n\t\t\tthis.loadingAnimation = undefined;\r\n\t\t}\r\n\t\tthis.statusContainer.clear();\r\n\r\n\t\t// Clear UI state\r\n\t\tthis.pendingMessagesContainer.clear();\r\n\t\tthis.compactionQueuedMessages = [];\r\n\t\tthis.streamingComponent = undefined;\r\n\t\tthis.streamingMessage = undefined;\r\n\t\tthis.pendingTools.clear();\r\n\r\n\t\t// Switch session via AgentSession (emits extension session events)\r\n\t\tawait this.session.switchSession(sessionPath);\r\n\r\n\t\t// Clear and re-render the chat\r\n\t\tthis.chatContainer.clear();\r\n\t\tthis.renderInitialMessages();\r\n\t\tthis.showStatus(\"Resumed session\");\r\n\t}\r\n\r\n\tprivate async showOAuthSelector(mode: \"login\" | \"logout\"): Promise<void> {\r\n\t\tif (mode === \"logout\") {\r\n\t\t\tconst providers = this.session.modelRegistry.authStorage.list();\r\n\t\t\tconst loggedInProviders = providers.filter(\r\n\t\t\t\t(p) => this.session.modelRegistry.authStorage.get(p)?.type === \"oauth\",\r\n\t\t\t);\r\n\t\t\tif (loggedInProviders.length === 0) {\r\n\t\t\t\tthis.showStatus(\"No OAuth providers logged in. Use /login first.\");\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.showSelector((done) => {\r\n\t\t\tconst selector = new OAuthSelectorComponent(\r\n\t\t\t\tmode,\r\n\t\t\t\tthis.session.modelRegistry.authStorage,\r\n\t\t\t\tasync (providerId: string) => {\r\n\t\t\t\t\tdone();\r\n\r\n\t\t\t\t\tif (mode === \"login\") {\r\n\t\t\t\t\t\tawait this.showLoginDialog(providerId);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t// Logout flow\r\n\t\t\t\t\t\tconst providerInfo = getOAuthProviders().find((p) => p.id === providerId);\r\n\t\t\t\t\t\tconst providerName = providerInfo?.name || providerId;\r\n\r\n\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\tthis.session.modelRegistry.authStorage.logout(providerId);\r\n\t\t\t\t\t\t\tthis.session.modelRegistry.refresh();\r\n\t\t\t\t\t\t\tawait this.updateAvailableProviderCount();\r\n\t\t\t\t\t\t\tthis.showStatus(`Logged out of ${providerName}`);\r\n\t\t\t\t\t\t} catch (error: unknown) {\r\n\t\t\t\t\t\t\tthis.showError(`Logout failed: ${error instanceof Error ? error.message : String(error)}`);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t() => {\r\n\t\t\t\t\tdone();\r\n\t\t\t\t\tthis.ui.requestRender();\r\n\t\t\t\t},\r\n\t\t\t);\r\n\t\t\treturn { component: selector, focus: selector };\r\n\t\t});\r\n\t}\r\n\r\n\tprivate async showLoginDialog(providerId: string): Promise<void> {\r\n\t\tconst providerInfo = getOAuthProviders().find((p) => p.id === providerId);\r\n\t\tconst providerName = providerInfo?.name || providerId;\r\n\r\n\t\t// Providers that use callback servers (can paste redirect URL)\r\n\t\tconst usesCallbackServer = providerInfo?.usesCallbackServer ?? false;\r\n\r\n\t\t// Create login dialog component\r\n\t\tconst dialog = new LoginDialogComponent(this.ui, providerId, (_success, _message) => {\r\n\t\t\t// Completion handled below\r\n\t\t});\r\n\r\n\t\t// Show dialog in editor container\r\n\t\tthis.editorContainer.clear();\r\n\t\tthis.editorContainer.addChild(dialog);\r\n\t\tthis.ui.setFocus(dialog);\r\n\t\tthis.ui.requestRender();\r\n\r\n\t\t// Promise for manual code input (racing with callback server)\r\n\t\tlet manualCodeResolve: ((code: string) => void) | undefined;\r\n\t\tlet manualCodeReject: ((err: Error) => void) | undefined;\r\n\t\tconst manualCodePromise = new Promise<string>((resolve, reject) => {\r\n\t\t\tmanualCodeResolve = resolve;\r\n\t\t\tmanualCodeReject = reject;\r\n\t\t});\r\n\r\n\t\t// Restore editor helper\r\n\t\tconst restoreEditor = () => {\r\n\t\t\tthis.editorContainer.clear();\r\n\t\t\tthis.editorContainer.addChild(this.editor);\r\n\t\t\tthis.ui.setFocus(this.editor);\r\n\t\t\tthis.ui.requestRender();\r\n\t\t};\r\n\r\n\t\ttry {\r\n\t\t\tawait this.session.modelRegistry.authStorage.login(providerId as OAuthProvider, {\r\n\t\t\t\tonAuth: (info: { url: string; instructions?: string }) => {\r\n\t\t\t\t\tdialog.showAuth(info.url, info.instructions);\r\n\r\n\t\t\t\t\tif (usesCallbackServer) {\r\n\t\t\t\t\t\t// Show input for manual paste, racing with callback\r\n\t\t\t\t\t\tdialog\r\n\t\t\t\t\t\t\t.showManualInput(\"Paste redirect URL below, or complete login in browser:\")\r\n\t\t\t\t\t\t\t.then((value) => {\r\n\t\t\t\t\t\t\t\tif (value && manualCodeResolve) {\r\n\t\t\t\t\t\t\t\t\tmanualCodeResolve(value);\r\n\t\t\t\t\t\t\t\t\tmanualCodeResolve = undefined;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t.catch(() => {\r\n\t\t\t\t\t\t\t\tif (manualCodeReject) {\r\n\t\t\t\t\t\t\t\t\tmanualCodeReject(new Error(\"Login cancelled\"));\r\n\t\t\t\t\t\t\t\t\tmanualCodeReject = undefined;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t} else if (providerId === \"github-copilot\") {\r\n\t\t\t\t\t\t// GitHub Copilot polls after onAuth\r\n\t\t\t\t\t\tdialog.showWaiting(\"Waiting for browser authentication...\");\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// For Anthropic: onPrompt is called immediately after\r\n\t\t\t\t},\r\n\r\n\t\t\t\tonPrompt: async (prompt: { message: string; placeholder?: string }) => {\r\n\t\t\t\t\treturn dialog.showPrompt(prompt.message, prompt.placeholder);\r\n\t\t\t\t},\r\n\r\n\t\t\t\tonProgress: (message: string) => {\r\n\t\t\t\t\tdialog.showProgress(message);\r\n\t\t\t\t},\r\n\r\n\t\t\t\tonManualCodeInput: () => manualCodePromise,\r\n\r\n\t\t\t\tsignal: dialog.signal,\r\n\t\t\t});\r\n\r\n\t\t\t// Success\r\n\t\t\trestoreEditor();\r\n\t\t\tthis.session.modelRegistry.refresh();\r\n\t\t\tawait this.updateAvailableProviderCount();\r\n\t\t\tthis.showStatus(`Logged in to ${providerName}. Credentials saved to ${getAuthPath()}`);\r\n\t\t} catch (error: unknown) {\r\n\t\t\trestoreEditor();\r\n\t\t\tconst errorMsg = error instanceof Error ? error.message : String(error);\r\n\t\t\tif (errorMsg !== \"Login cancelled\") {\r\n\t\t\t\tthis.showError(`Failed to login to ${providerName}: ${errorMsg}`);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// =========================================================================\r\n\t// Command handlers\r\n\t// =========================================================================\r\n\r\n\tprivate async handleReloadCommand(): Promise<void> {\r\n\t\tif (this.session.isStreaming) {\r\n\t\t\tthis.showWarning(\"Wait for the current response to finish before reloading.\");\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (this.session.isCompacting) {\r\n\t\t\tthis.showWarning(\"Wait for compaction to finish before reloading.\");\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.resetExtensionUI();\r\n\r\n\t\tconst loader = new BorderedLoader(this.ui, theme, \"Reloading extensions, skills, prompts, themes...\", {\r\n\t\t\tcancellable: false,\r\n\t\t});\r\n\t\tconst previousEditor = this.editor;\r\n\t\tthis.editorContainer.clear();\r\n\t\tthis.editorContainer.addChild(loader);\r\n\t\tthis.ui.setFocus(loader);\r\n\t\tthis.ui.requestRender();\r\n\r\n\t\tconst dismissLoader = (editor: Component) => {\r\n\t\t\tloader.dispose();\r\n\t\t\tthis.editorContainer.clear();\r\n\t\t\tthis.editorContainer.addChild(editor);\r\n\t\t\tthis.ui.setFocus(editor);\r\n\t\t\tthis.ui.requestRender();\r\n\t\t};\r\n\r\n\t\ttry {\r\n\t\t\tawait this.session.reload();\r\n\t\t\tsetRegisteredThemes(this.session.resourceLoader.getThemes().themes);\r\n\t\t\tthis.hideThinkingBlock = this.settingsManager.getHideThinkingBlock();\r\n\t\t\tconst themeName = this.settingsManager.getTheme();\r\n\t\t\tconst themeResult = themeName ? setTheme(themeName, true) : { success: true };\r\n\t\t\tif (!themeResult.success) {\r\n\t\t\t\tthis.showError(`Failed to load theme \"${themeName}\": ${themeResult.error}\\nFell back to dark theme.`);\r\n\t\t\t}\r\n\t\t\tconst editorPaddingX = this.settingsManager.getEditorPaddingX();\r\n\t\t\tconst autocompleteMaxVisible = this.settingsManager.getAutocompleteMaxVisible();\r\n\t\t\tthis.defaultEditor.setPaddingX(editorPaddingX);\r\n\t\t\tthis.defaultEditor.setAutocompleteMaxVisible(autocompleteMaxVisible);\r\n\t\t\tif (this.editor !== this.defaultEditor) {\r\n\t\t\t\tthis.editor.setPaddingX?.(editorPaddingX);\r\n\t\t\t\tthis.editor.setAutocompleteMaxVisible?.(autocompleteMaxVisible);\r\n\t\t\t}\r\n\t\t\tthis.ui.setShowHardwareCursor(this.settingsManager.getShowHardwareCursor());\r\n\t\t\tthis.ui.setClearOnShrink(this.settingsManager.getClearOnShrink());\r\n\t\t\tthis.setupAutocomplete(this.fdPath);\r\n\t\t\tconst runner = this.session.extensionRunner;\r\n\t\t\tif (runner) {\r\n\t\t\t\tthis.setupExtensionShortcuts(runner);\r\n\t\t\t}\r\n\t\t\tthis.rebuildChatFromMessages();\r\n\t\t\tdismissLoader(this.editor as Component);\r\n\t\t\tthis.showLoadedResources({\r\n\t\t\t\textensionPaths: runner?.getExtensionPaths() ?? [],\r\n\t\t\t\tforce: false,\r\n\t\t\t\tshowDiagnosticsWhenQuiet: true,\r\n\t\t\t});\r\n\t\t\tconst modelsJsonError = this.session.modelRegistry.getError();\r\n\t\t\tif (modelsJsonError) {\r\n\t\t\t\tthis.showError(`models.json error: ${modelsJsonError}`);\r\n\t\t\t}\r\n\t\t\tthis.showStatus(\"Reloaded extensions, skills, prompts, themes\");\r\n\t\t} catch (error) {\r\n\t\t\tdismissLoader(previousEditor as Component);\r\n\t\t\tthis.showError(`Reload failed: ${error instanceof Error ? error.message : String(error)}`);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate async handleExportCommand(text: string): Promise<void> {\r\n\t\tconst parts = text.split(/\\s+/);\r\n\t\tconst outputPath = parts.length > 1 ? parts[1] : undefined;\r\n\r\n\t\ttry {\r\n\t\t\tconst filePath = await this.session.exportToHtml(outputPath);\r\n\t\t\tthis.showStatus(`Session exported to: ${filePath}`);\r\n\t\t} catch (error: unknown) {\r\n\t\t\tthis.showError(`Failed to export session: ${error instanceof Error ? error.message : \"Unknown error\"}`);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate async handleShareCommand(): Promise<void> {\r\n\t\t// Check if gh is available and logged in\r\n\t\ttry {\r\n\t\t\tconst authResult = spawnSync(\"gh\", [\"auth\", \"status\"], { encoding: \"utf-8\" });\r\n\t\t\tif (authResult.status !== 0) {\r\n\t\t\t\tthis.showError(\"GitHub CLI is not logged in. Run 'gh auth login' first.\");\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t} catch {\r\n\t\t\tthis.showError(\"GitHub CLI (gh) is not installed. Install it from https://cli.github.com/\");\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Export to a temp file\r\n\t\tconst tmpFile = path.join(os.tmpdir(), \"session.html\");\r\n\t\ttry {\r\n\t\t\tawait this.session.exportToHtml(tmpFile);\r\n\t\t} catch (error: unknown) {\r\n\t\t\tthis.showError(`Failed to export session: ${error instanceof Error ? error.message : \"Unknown error\"}`);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Show cancellable loader, replacing the editor\r\n\t\tconst loader = new BorderedLoader(this.ui, theme, \"Creating gist...\");\r\n\t\tthis.editorContainer.clear();\r\n\t\tthis.editorContainer.addChild(loader);\r\n\t\tthis.ui.setFocus(loader);\r\n\t\tthis.ui.requestRender();\r\n\r\n\t\tconst restoreEditor = () => {\r\n\t\t\tloader.dispose();\r\n\t\t\tthis.editorContainer.clear();\r\n\t\t\tthis.editorContainer.addChild(this.editor);\r\n\t\t\tthis.ui.setFocus(this.editor);\r\n\t\t\ttry {\r\n\t\t\t\tfs.unlinkSync(tmpFile);\r\n\t\t\t} catch {\r\n\t\t\t\t// Ignore cleanup errors\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Create a secret gist asynchronously\r\n\t\tlet proc: ReturnType<typeof spawn> | null = null;\r\n\r\n\t\tloader.onAbort = () => {\r\n\t\t\tproc?.kill();\r\n\t\t\trestoreEditor();\r\n\t\t\tthis.showStatus(\"Share cancelled\");\r\n\t\t};\r\n\r\n\t\ttry {\r\n\t\t\tconst result = await new Promise<{ stdout: string; stderr: string; code: number | null }>((resolve) => {\r\n\t\t\t\tproc = spawn(\"gh\", [\"gist\", \"create\", \"--public=false\", tmpFile]);\r\n\t\t\t\tlet stdout = \"\";\r\n\t\t\t\tlet stderr = \"\";\r\n\t\t\t\tproc.stdout?.on(\"data\", (data) => {\r\n\t\t\t\t\tstdout += data.toString();\r\n\t\t\t\t});\r\n\t\t\t\tproc.stderr?.on(\"data\", (data) => {\r\n\t\t\t\t\tstderr += data.toString();\r\n\t\t\t\t});\r\n\t\t\t\tproc.on(\"close\", (code) => resolve({ stdout, stderr, code }));\r\n\t\t\t});\r\n\r\n\t\t\tif (loader.signal.aborted) return;\r\n\r\n\t\t\trestoreEditor();\r\n\r\n\t\t\tif (result.code !== 0) {\r\n\t\t\t\tconst errorMsg = result.stderr?.trim() || \"Unknown error\";\r\n\t\t\t\tthis.showError(`Failed to create gist: ${errorMsg}`);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// Extract gist ID from the URL returned by gh\r\n\t\t\t// gh returns something like: https://gist.github.com/username/GIST_ID\r\n\t\t\tconst gistUrl = result.stdout?.trim();\r\n\t\t\tconst gistId = gistUrl?.split(\"/\").pop();\r\n\t\t\tif (!gistId) {\r\n\t\t\t\tthis.showError(\"Failed to parse gist ID from gh output\");\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// Create the preview URL\r\n\t\t\tconst previewUrl = getShareViewerUrl(gistId);\r\n\t\t\tthis.showStatus(`Share URL: ${previewUrl}\\nGist: ${gistUrl}`);\r\n\t\t} catch (error: unknown) {\r\n\t\t\tif (!loader.signal.aborted) {\r\n\t\t\t\trestoreEditor();\r\n\t\t\t\tthis.showError(`Failed to create gist: ${error instanceof Error ? error.message : \"Unknown error\"}`);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tprivate handleCopyCommand(): void {\r\n\t\tconst text = this.session.getLastAssistantText();\r\n\t\tif (!text) {\r\n\t\t\tthis.showError(\"No agent messages to copy yet.\");\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\ttry {\r\n\t\t\tcopyToClipboard(text);\r\n\t\t\tthis.showStatus(\"Copied last agent message to clipboard\");\r\n\t\t} catch (error) {\r\n\t\t\tthis.showError(error instanceof Error ? error.message : String(error));\r\n\t\t}\r\n\t}\r\n\r\n\tprivate handleNameCommand(text: string): void {\r\n\t\tconst name = text.replace(/^\\/name\\s*/, \"\").trim();\r\n\t\tif (!name) {\r\n\t\t\tconst currentName = this.sessionManager.getSessionName();\r\n\t\t\tif (currentName) {\r\n\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\r\n\t\t\t\tthis.chatContainer.addChild(new Text(theme.fg(\"dim\", `Session name: ${currentName}`), 1, 0));\r\n\t\t\t} else {\r\n\t\t\t\tthis.showWarning(\"Usage: /name <name>\");\r\n\t\t\t}\r\n\t\t\tthis.ui.requestRender();\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.sessionManager.appendSessionInfo(name);\r\n\t\tthis.updateTerminalTitle();\r\n\t\tthis.chatContainer.addChild(new Spacer(1));\r\n\t\tthis.chatContainer.addChild(new Text(theme.fg(\"dim\", `Session name set: ${name}`), 1, 0));\r\n\t\tthis.ui.requestRender();\r\n\t}\r\n\r\n\tprivate handleSessionCommand(): void {\r\n\t\tconst stats = this.session.getSessionStats();\r\n\t\tconst sessionName = this.sessionManager.getSessionName();\r\n\r\n\t\tlet info = `${theme.bold(\"Session Info\")}\\n\\n`;\r\n\t\tif (sessionName) {\r\n\t\t\tinfo += `${theme.fg(\"dim\", \"Name:\")} ${sessionName}\\n`;\r\n\t\t}\r\n\t\tinfo += `${theme.fg(\"dim\", \"File:\")} ${stats.sessionFile ?? \"In-memory\"}\\n`;\r\n\t\tinfo += `${theme.fg(\"dim\", \"ID:\")} ${stats.sessionId}\\n\\n`;\r\n\t\tinfo += `${theme.bold(\"Messages\")}\\n`;\r\n\t\tinfo += `${theme.fg(\"dim\", \"User:\")} ${stats.userMessages}\\n`;\r\n\t\tinfo += `${theme.fg(\"dim\", \"Assistant:\")} ${stats.assistantMessages}\\n`;\r\n\t\tinfo += `${theme.fg(\"dim\", \"Tool Calls:\")} ${stats.toolCalls}\\n`;\r\n\t\tinfo += `${theme.fg(\"dim\", \"Tool Results:\")} ${stats.toolResults}\\n`;\r\n\t\tinfo += `${theme.fg(\"dim\", \"Total:\")} ${stats.totalMessages}\\n\\n`;\r\n\t\tinfo += `${theme.bold(\"Tokens\")}\\n`;\r\n\t\tinfo += `${theme.fg(\"dim\", \"Input:\")} ${stats.tokens.input.toLocaleString()}\\n`;\r\n\t\tinfo += `${theme.fg(\"dim\", \"Output:\")} ${stats.tokens.output.toLocaleString()}\\n`;\r\n\t\tif (stats.tokens.cacheRead > 0) {\r\n\t\t\tinfo += `${theme.fg(\"dim\", \"Cache Read:\")} ${stats.tokens.cacheRead.toLocaleString()}\\n`;\r\n\t\t}\r\n\t\tif (stats.tokens.cacheWrite > 0) {\r\n\t\t\tinfo += `${theme.fg(\"dim\", \"Cache Write:\")} ${stats.tokens.cacheWrite.toLocaleString()}\\n`;\r\n\t\t}\r\n\t\tinfo += `${theme.fg(\"dim\", \"Total:\")} ${stats.tokens.total.toLocaleString()}\\n`;\r\n\r\n\t\tif (stats.cost > 0) {\r\n\t\t\tinfo += `\\n${theme.bold(\"Cost\")}\\n`;\r\n\t\t\tinfo += `${theme.fg(\"dim\", \"Total:\")} ${stats.cost.toFixed(4)}`;\r\n\t\t}\r\n\r\n\t\tthis.chatContainer.addChild(new Spacer(1));\r\n\t\tthis.chatContainer.addChild(new Text(info, 1, 0));\r\n\t\tthis.ui.requestRender();\r\n\t}\r\n\r\n\tprivate handleChangelogCommand(): void {\r\n\t\tconst changelogPath = getChangelogPath();\r\n\t\tconst allEntries = parseChangelog(changelogPath);\r\n\r\n\t\tconst changelogMarkdown =\r\n\t\t\tallEntries.length > 0\r\n\t\t\t\t? allEntries\r\n\t\t\t\t\t\t.reverse()\r\n\t\t\t\t\t\t.map((e) => e.content)\r\n\t\t\t\t\t\t.join(\"\\n\\n\")\r\n\t\t\t\t: \"No changelog entries found.\";\r\n\r\n\t\tthis.chatContainer.addChild(new Spacer(1));\r\n\t\tthis.chatContainer.addChild(new DynamicBorder());\r\n\t\tthis.chatContainer.addChild(new Text(theme.bold(theme.fg(\"accent\", \"What's New\")), 1, 0));\r\n\t\tthis.chatContainer.addChild(new Spacer(1));\r\n\t\tthis.chatContainer.addChild(new Markdown(changelogMarkdown, 1, 1, this.getMarkdownThemeWithSettings()));\r\n\t\tthis.chatContainer.addChild(new DynamicBorder());\r\n\t\tthis.ui.requestRender();\r\n\t}\r\n\r\n\t/**\r\n\t * Capitalize keybinding for display (e.g., \"ctrl+c\" -> \"Ctrl+C\").\r\n\t */\r\n\tprivate capitalizeKey(key: string): string {\r\n\t\treturn key\r\n\t\t\t.split(\"/\")\r\n\t\t\t.map((k) =>\r\n\t\t\t\tk\r\n\t\t\t\t\t.split(\"+\")\r\n\t\t\t\t\t.map((part) => part.charAt(0).toUpperCase() + part.slice(1))\r\n\t\t\t\t\t.join(\"+\"),\r\n\t\t\t)\r\n\t\t\t.join(\"/\");\r\n\t}\r\n\r\n\t/**\r\n\t * Get capitalized display string for an app keybinding action.\r\n\t */\r\n\tprivate getAppKeyDisplay(action: AppAction): string {\r\n\t\treturn this.capitalizeKey(appKey(this.keybindings, action));\r\n\t}\r\n\r\n\t/**\r\n\t * Get capitalized display string for an editor keybinding action.\r\n\t */\r\n\tprivate getEditorKeyDisplay(action: EditorAction): string {\r\n\t\treturn this.capitalizeKey(editorKey(action));\r\n\t}\r\n\r\n\tprivate handleHotkeysCommand(): void {\r\n\t\t// Navigation keybindings\r\n\t\tconst cursorWordLeft = this.getEditorKeyDisplay(\"cursorWordLeft\");\r\n\t\tconst cursorWordRight = this.getEditorKeyDisplay(\"cursorWordRight\");\r\n\t\tconst cursorLineStart = this.getEditorKeyDisplay(\"cursorLineStart\");\r\n\t\tconst cursorLineEnd = this.getEditorKeyDisplay(\"cursorLineEnd\");\r\n\t\tconst jumpForward = this.getEditorKeyDisplay(\"jumpForward\");\r\n\t\tconst jumpBackward = this.getEditorKeyDisplay(\"jumpBackward\");\r\n\t\tconst pageUp = this.getEditorKeyDisplay(\"pageUp\");\r\n\t\tconst pageDown = this.getEditorKeyDisplay(\"pageDown\");\r\n\r\n\t\t// Editing keybindings\r\n\t\tconst submit = this.getEditorKeyDisplay(\"submit\");\r\n\t\tconst newLine = this.getEditorKeyDisplay(\"newLine\");\r\n\t\tconst deleteWordBackward = this.getEditorKeyDisplay(\"deleteWordBackward\");\r\n\t\tconst deleteWordForward = this.getEditorKeyDisplay(\"deleteWordForward\");\r\n\t\tconst deleteToLineStart = this.getEditorKeyDisplay(\"deleteToLineStart\");\r\n\t\tconst deleteToLineEnd = this.getEditorKeyDisplay(\"deleteToLineEnd\");\r\n\t\tconst yank = this.getEditorKeyDisplay(\"yank\");\r\n\t\tconst yankPop = this.getEditorKeyDisplay(\"yankPop\");\r\n\t\tconst undo = this.getEditorKeyDisplay(\"undo\");\r\n\t\tconst tab = this.getEditorKeyDisplay(\"tab\");\r\n\r\n\t\t// App keybindings\r\n\t\tconst interrupt = this.getAppKeyDisplay(\"interrupt\");\r\n\t\tconst clear = this.getAppKeyDisplay(\"clear\");\r\n\t\tconst exit = this.getAppKeyDisplay(\"exit\");\r\n\t\tconst suspend = this.getAppKeyDisplay(\"suspend\");\r\n\t\tconst cycleThinkingLevel = this.getAppKeyDisplay(\"cycleThinkingLevel\");\r\n\t\tconst cycleModelForward = this.getAppKeyDisplay(\"cycleModelForward\");\r\n\t\tconst selectModel = this.getAppKeyDisplay(\"selectModel\");\r\n\t\tconst expandTools = this.getAppKeyDisplay(\"expandTools\");\r\n\t\tconst toggleThinking = this.getAppKeyDisplay(\"toggleThinking\");\r\n\t\tconst externalEditor = this.getAppKeyDisplay(\"externalEditor\");\r\n\t\tconst followUp = this.getAppKeyDisplay(\"followUp\");\r\n\t\tconst dequeue = this.getAppKeyDisplay(\"dequeue\");\r\n\r\n\t\tlet hotkeys = `\r\n**Navigation**\r\n| Key | Action |\r\n|-----|--------|\r\n| \\`Arrow keys\\` | Move cursor / browse history (Up when empty) |\r\n| \\`${cursorWordLeft}\\` / \\`${cursorWordRight}\\` | Move by word |\r\n| \\`${cursorLineStart}\\` | Start of line |\r\n| \\`${cursorLineEnd}\\` | End of line |\r\n| \\`${jumpForward}\\` | Jump forward to character |\r\n| \\`${jumpBackward}\\` | Jump backward to character |\r\n| \\`${pageUp}\\` / \\`${pageDown}\\` | Scroll by page |\r\n\r\n**Editing**\r\n| Key | Action |\r\n|-----|--------|\r\n| \\`${submit}\\` | Send message |\r\n| \\`${newLine}\\` | New line${process.platform === \"win32\" ? \" (Ctrl+Enter on Windows Terminal)\" : \"\"} |\r\n| \\`${deleteWordBackward}\\` | Delete word backwards |\r\n| \\`${deleteWordForward}\\` | Delete word forwards |\r\n| \\`${deleteToLineStart}\\` | Delete to start of line |\r\n| \\`${deleteToLineEnd}\\` | Delete to end of line |\r\n| \\`${yank}\\` | Paste the most-recently-deleted text |\r\n| \\`${yankPop}\\` | Cycle through the deleted text after pasting |\r\n| \\`${undo}\\` | Undo |\r\n\r\n**Other**\r\n| Key | Action |\r\n|-----|--------|\r\n| \\`${tab}\\` | Path completion / accept autocomplete |\r\n| \\`${interrupt}\\` | Cancel autocomplete / abort streaming |\r\n| \\`${clear}\\` | Clear editor (first) / exit (second) |\r\n| \\`${exit}\\` | Exit (when editor is empty) |\r\n| \\`${suspend}\\` | Suspend to background |\r\n| \\`${cycleThinkingLevel}\\` | Cycle thinking level |\r\n| \\`${cycleModelForward}\\` | Cycle models |\r\n| \\`${selectModel}\\` | Open model selector |\r\n| \\`${expandTools}\\` | Toggle tool output expansion |\r\n| \\`${toggleThinking}\\` | Toggle thinking block visibility |\r\n| \\`${externalEditor}\\` | Edit message in external editor |\r\n| \\`${followUp}\\` | Queue follow-up message |\r\n| \\`${dequeue}\\` | Restore queued messages |\r\n| \\`Ctrl+V\\` | Paste image from clipboard |\r\n| \\`/\\` | Slash commands |\r\n| \\`!\\` | Run bash command |\r\n| \\`!!\\` | Run bash command (excluded from context) |\r\n`;\r\n\r\n\t\t// Add extension-registered shortcuts\r\n\t\tconst extensionRunner = this.session.extensionRunner;\r\n\t\tif (extensionRunner) {\r\n\t\t\tconst shortcuts = extensionRunner.getShortcuts(this.keybindings.getEffectiveConfig());\r\n\t\t\tif (shortcuts.size > 0) {\r\n\t\t\t\thotkeys += `\r\n**Extensions**\r\n| Key | Action |\r\n|-----|--------|\r\n`;\r\n\t\t\t\tfor (const [key, shortcut] of shortcuts) {\r\n\t\t\t\t\tconst description = shortcut.description ?? shortcut.extensionPath;\r\n\t\t\t\t\tconst keyDisplay = key.replace(/\\b\\w/g, (c) => c.toUpperCase());\r\n\t\t\t\t\thotkeys += `| \\`${keyDisplay}\\` | ${description} |\\n`;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.chatContainer.addChild(new Spacer(1));\r\n\t\tthis.chatContainer.addChild(new DynamicBorder());\r\n\t\tthis.chatContainer.addChild(new Text(theme.bold(theme.fg(\"accent\", \"Keyboard Shortcuts\")), 1, 0));\r\n\t\tthis.chatContainer.addChild(new Spacer(1));\r\n\t\tthis.chatContainer.addChild(new Markdown(hotkeys.trim(), 1, 1, this.getMarkdownThemeWithSettings()));\r\n\t\tthis.chatContainer.addChild(new DynamicBorder());\r\n\t\tthis.ui.requestRender();\r\n\t}\r\n\r\n\tprivate async handleClearCommand(): Promise<void> {\r\n\t\t// Stop loading animation\r\n\t\tif (this.loadingAnimation) {\r\n\t\t\tthis.loadingAnimation.stop();\r\n\t\t\tthis.loadingAnimation = undefined;\r\n\t\t}\r\n\t\tthis.statusContainer.clear();\r\n\r\n\t\t// New session via session (emits extension session events)\r\n\t\tawait this.session.newSession();\r\n\r\n\t\t// Clear UI state\r\n\t\tthis.chatContainer.clear();\r\n\t\tthis.pendingMessagesContainer.clear();\r\n\t\tthis.compactionQueuedMessages = [];\r\n\t\tthis.streamingComponent = undefined;\r\n\t\tthis.streamingMessage = undefined;\r\n\t\tthis.pendingTools.clear();\r\n\r\n\t\tthis.chatContainer.addChild(new Spacer(1));\r\n\t\tthis.chatContainer.addChild(new Text(`${theme.fg(\"accent\", \"✓ New session started\")}`, 1, 1));\r\n\t\tthis.ui.requestRender();\r\n\t}\r\n\r\n\tprivate handleDebugCommand(): void {\r\n\t\tconst width = this.ui.terminal.columns;\r\n\t\tconst height = this.ui.terminal.rows;\r\n\t\tconst allLines = this.ui.render(width);\r\n\r\n\t\tconst debugLogPath = getDebugLogPath();\r\n\t\tconst debugData = [\r\n\t\t\t`Debug output at ${new Date().toISOString()}`,\r\n\t\t\t`Terminal: ${width}x${height}`,\r\n\t\t\t`Total lines: ${allLines.length}`,\r\n\t\t\t\"\",\r\n\t\t\t\"=== All rendered lines with visible widths ===\",\r\n\t\t\t...allLines.map((line, idx) => {\r\n\t\t\t\tconst vw = visibleWidth(line);\r\n\t\t\t\tconst escaped = JSON.stringify(line);\r\n\t\t\t\treturn `[${idx}] (w=${vw}) ${escaped}`;\r\n\t\t\t}),\r\n\t\t\t\"\",\r\n\t\t\t\"=== Agent messages (JSONL) ===\",\r\n\t\t\t...this.session.messages.map((msg) => JSON.stringify(msg)),\r\n\t\t\t\"\",\r\n\t\t].join(\"\\n\");\r\n\r\n\t\tfs.mkdirSync(path.dirname(debugLogPath), { recursive: true });\r\n\t\tfs.writeFileSync(debugLogPath, debugData);\r\n\r\n\t\tthis.chatContainer.addChild(new Spacer(1));\r\n\t\tthis.chatContainer.addChild(\r\n\t\t\tnew Text(`${theme.fg(\"accent\", \"✓ Debug log written\")}\\n${theme.fg(\"muted\", debugLogPath)}`, 1, 1),\r\n\t\t);\r\n\t\tthis.ui.requestRender();\r\n\t}\r\n\r\n\tprivate async handleMemoryCommand(args: string): Promise<void> {\r\n\t\tconst cwd = process.cwd();\r\n\t\tconst parts = args.trim().split(/\\s+/);\r\n\t\tconst subcommand = parts[0] || \"\";\r\n\r\n\t\tif (subcommand === \"\" || subcommand === \"list\") {\r\n\t\t\tconst semantic = loadStore<SemanticMemory>(cwd, \"semantic.json\");\r\n\t\t\tconst procedural = loadStore<ProceduralMemory>(cwd, \"procedural.json\");\r\n\t\t\tconst episodic = loadStore<EpisodicMemory>(cwd, \"episodic.json\");\r\n\r\n\t\t\tconst lines: string[] = [\r\n\t\t\t\t`Procedural: ${procedural.memories.length} memories`,\r\n\t\t\t\t`Episodic: ${episodic.memories.length} memories`,\r\n\t\t\t\t`Semantic: ${semantic.memories.length} memories`,\r\n\t\t\t];\r\n\r\n\t\t\tif (procedural.memories.length > 0) {\r\n\t\t\t\tlines.push(\"\", \"Procedures:\");\r\n\t\t\t\tfor (const m of procedural.memories) {\r\n\t\t\t\t\tlines.push(` [${m.id}] ${m.name} -- ${m.trigger}`);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (semantic.memories.length > 0) {\r\n\t\t\t\tlines.push(\"\", \"Facts & Preferences:\");\r\n\t\t\t\tfor (const m of semantic.memories) {\r\n\t\t\t\t\tlines.push(` [${m.id}] (${m.category}) ${m.text}`);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (episodic.memories.length > 0) {\r\n\t\t\t\tlines.push(\"\", \"Recent Episodes:\");\r\n\t\t\t\tfor (const m of episodic.memories.slice(-5)) {\r\n\t\t\t\t\tlines.push(` [${m.id}] ${m.date} -- ${m.summary}`);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.showStatus(lines.join(\"\\n\"));\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (subcommand === \"show\") {\r\n\t\t\tconst id = parts[1];\r\n\t\t\tif (!id) {\r\n\t\t\t\tthis.showWarning(\"Usage: /memory show <id>\");\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tconst allStores: Array<{ file: string; format: (m: any) => string }> = [\r\n\t\t\t\t{ file: \"procedural.json\", format: formatProceduralForDisplay },\r\n\t\t\t\t{ file: \"episodic.json\", format: formatEpisodicForDisplay },\r\n\t\t\t\t{ file: \"semantic.json\", format: formatSemanticForDisplay },\r\n\t\t\t];\r\n\t\t\tfor (const { file, format } of allStores) {\r\n\t\t\t\tconst store = loadStore<any>(cwd, file);\r\n\t\t\t\tconst found = store.memories.find((m: any) => m.id === id);\r\n\t\t\t\tif (found) {\r\n\t\t\t\t\tthis.showStatus(format(found));\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthis.showWarning(`No memory found with ID \"${id}\".`);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (subcommand === \"search\") {\r\n\t\t\tconst query = parts.slice(1).join(\" \");\r\n\t\t\tif (!query) {\r\n\t\t\t\tthis.showWarning(\"Usage: /memory search <query>\");\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tconst results: string[] = [];\r\n\r\n\t\t\tconst procStore = loadStore<ProceduralMemory>(cwd, \"procedural.json\");\r\n\t\t\tconst procMatches = searchMemories(\r\n\t\t\t\tprocStore.memories,\r\n\t\t\t\tquery,\r\n\t\t\t\t(m) => `${m.name} ${m.trigger} ${m.steps.join(\" \")}`,\r\n\t\t\t);\r\n\t\t\tresults.push(...procMatches.map(formatProceduralForDisplay));\r\n\r\n\t\t\tconst epStore = loadStore<EpisodicMemory>(cwd, \"episodic.json\");\r\n\t\t\tconst epMatches = searchMemories(epStore.memories, query, (m) => `${m.summary} ${m.details.join(\" \")}`);\r\n\t\t\tresults.push(...epMatches.map(formatEpisodicForDisplay));\r\n\r\n\t\t\tconst semStore = loadStore<SemanticMemory>(cwd, \"semantic.json\");\r\n\t\t\tconst semMatches = searchMemories(semStore.memories, query, (m) => `${m.category} ${m.text}`);\r\n\t\t\tresults.push(...semMatches.map(formatSemanticForDisplay));\r\n\r\n\t\t\tif (results.length === 0) {\r\n\t\t\t\tthis.showStatus(`No memories matching \"${query}\".`);\r\n\t\t\t} else {\r\n\t\t\t\tthis.showStatus(results.join(\"\\n\\n\"));\r\n\t\t\t}\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (subcommand === \"delete\") {\r\n\t\t\tconst id = parts[1];\r\n\t\t\tif (!id) {\r\n\t\t\t\tthis.showWarning(\"Usage: /memory delete <id>\");\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tconst files = [\"procedural.json\", \"episodic.json\", \"semantic.json\"] as const;\r\n\t\t\tfor (const file of files) {\r\n\t\t\t\tconst store = loadStore<{ id: string }>(cwd, file);\r\n\t\t\t\tconst idx = store.memories.findIndex((m) => m.id === id);\r\n\t\t\t\tif (idx !== -1) {\r\n\t\t\t\t\tstore.memories.splice(idx, 1);\r\n\t\t\t\t\tsaveStore(cwd, file, store);\r\n\t\t\t\t\tthis.showStatus(`Deleted [${id}] from ${file.replace(\".json\", \"\")}.`);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthis.showWarning(`No memory found with ID \"${id}\".`);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (subcommand === \"compact\") {\r\n\t\t\tconst epStore = loadStore<EpisodicMemory>(cwd, \"episodic.json\");\r\n\t\t\tconst before = epStore.memories.length;\r\n\t\t\tepStore.memories = compactEpisodicMemories(epStore.memories);\r\n\t\t\tconst after = epStore.memories.length;\r\n\t\t\tsaveStore(cwd, \"episodic.json\", epStore);\r\n\r\n\t\t\tconst semStore = loadStore<SemanticMemory>(cwd, \"semantic.json\");\r\n\t\t\tconst semBefore = semStore.memories.length;\r\n\t\t\tconst seen = new Set<string>();\r\n\t\t\tsemStore.memories = semStore.memories.filter((m) => {\r\n\t\t\t\tconst key = `${m.category}:${m.text.toLowerCase()}`;\r\n\t\t\t\tif (seen.has(key)) return false;\r\n\t\t\t\tseen.add(key);\r\n\t\t\t\treturn true;\r\n\t\t\t});\r\n\t\t\tconst semAfter = semStore.memories.length;\r\n\t\t\tsaveStore(cwd, \"semantic.json\", semStore);\r\n\r\n\t\t\tthis.showStatus(`Compacted: episodic ${before} -> ${after}, semantic ${semBefore} -> ${semAfter}`);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.showWarning(\"Usage: /memory [list|show <id>|search <query>|delete <id>|compact]\");\r\n\t}\r\n\r\n\tprivate handleArminSaysHi(): void {\r\n\t\tthis.chatContainer.addChild(new Spacer(1));\r\n\t\tthis.chatContainer.addChild(new ArminComponent(this.ui));\r\n\t\tthis.ui.requestRender();\r\n\t}\r\n\r\n\tprivate handleDaxnuts(): void {\r\n\t\tthis.chatContainer.addChild(new Spacer(1));\r\n\t\tthis.chatContainer.addChild(new DaxnutsComponent(this.ui));\r\n\t\tthis.ui.requestRender();\r\n\t}\r\n\r\n\tprivate checkDaxnutsEasterEgg(model: { provider: string; id: string }): void {\r\n\t\tif (model.provider === \"opencode\" && model.id.toLowerCase().includes(\"kimi-k2.5\")) {\r\n\t\t\tthis.handleDaxnuts();\r\n\t\t}\r\n\t}\r\n\r\n\tprivate async handleBashCommand(command: string, excludeFromContext = false): Promise<void> {\r\n\t\tconst extensionRunner = this.session.extensionRunner;\r\n\r\n\t\t// Emit user_bash event to let extensions intercept\r\n\t\tconst eventResult = extensionRunner\r\n\t\t\t? await extensionRunner.emitUserBash({\r\n\t\t\t\t\ttype: \"user_bash\",\r\n\t\t\t\t\tcommand,\r\n\t\t\t\t\texcludeFromContext,\r\n\t\t\t\t\tcwd: process.cwd(),\r\n\t\t\t\t})\r\n\t\t\t: undefined;\r\n\r\n\t\t// If extension returned a full result, use it directly\r\n\t\tif (eventResult?.result) {\r\n\t\t\tconst result = eventResult.result;\r\n\r\n\t\t\t// Create UI component for display\r\n\t\t\tthis.bashComponent = new BashExecutionComponent(command, this.ui, excludeFromContext);\r\n\t\t\tif (this.session.isStreaming) {\r\n\t\t\t\tthis.pendingMessagesContainer.addChild(this.bashComponent);\r\n\t\t\t\tthis.pendingBashComponents.push(this.bashComponent);\r\n\t\t\t} else {\r\n\t\t\t\tthis.chatContainer.addChild(this.bashComponent);\r\n\t\t\t}\r\n\r\n\t\t\t// Show output and complete\r\n\t\t\tif (result.output) {\r\n\t\t\t\tthis.bashComponent.appendOutput(result.output);\r\n\t\t\t}\r\n\t\t\tthis.bashComponent.setComplete(\r\n\t\t\t\tresult.exitCode,\r\n\t\t\t\tresult.cancelled,\r\n\t\t\t\tresult.truncated ? ({ truncated: true, content: result.output } as TruncationResult) : undefined,\r\n\t\t\t\tresult.fullOutputPath,\r\n\t\t\t);\r\n\r\n\t\t\t// Record the result in session\r\n\t\t\tthis.session.recordBashResult(command, result, { excludeFromContext });\r\n\t\t\tthis.bashComponent = undefined;\r\n\t\t\tthis.ui.requestRender();\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Normal execution path (possibly with custom operations)\r\n\t\tconst isDeferred = this.session.isStreaming;\r\n\t\tthis.bashComponent = new BashExecutionComponent(command, this.ui, excludeFromContext);\r\n\r\n\t\tif (isDeferred) {\r\n\t\t\t// Show in pending area when agent is streaming\r\n\t\t\tthis.pendingMessagesContainer.addChild(this.bashComponent);\r\n\t\t\tthis.pendingBashComponents.push(this.bashComponent);\r\n\t\t} else {\r\n\t\t\t// Show in chat immediately when agent is idle\r\n\t\t\tthis.chatContainer.addChild(this.bashComponent);\r\n\t\t}\r\n\t\tthis.ui.requestRender();\r\n\r\n\t\ttry {\r\n\t\t\tconst result = await this.session.executeBash(\r\n\t\t\t\tcommand,\r\n\t\t\t\t(chunk) => {\r\n\t\t\t\t\tif (this.bashComponent) {\r\n\t\t\t\t\t\tthis.bashComponent.appendOutput(chunk);\r\n\t\t\t\t\t\tthis.ui.requestRender();\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t{ excludeFromContext, operations: eventResult?.operations },\r\n\t\t\t);\r\n\r\n\t\t\tif (this.bashComponent) {\r\n\t\t\t\tthis.bashComponent.setComplete(\r\n\t\t\t\t\tresult.exitCode,\r\n\t\t\t\t\tresult.cancelled,\r\n\t\t\t\t\tresult.truncated ? ({ truncated: true, content: result.output } as TruncationResult) : undefined,\r\n\t\t\t\t\tresult.fullOutputPath,\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t} catch (error) {\r\n\t\t\tif (this.bashComponent) {\r\n\t\t\t\tthis.bashComponent.setComplete(undefined, false);\r\n\t\t\t}\r\n\t\t\tthis.showError(`Bash command failed: ${error instanceof Error ? error.message : \"Unknown error\"}`);\r\n\t\t}\r\n\r\n\t\tthis.bashComponent = undefined;\r\n\t\tthis.ui.requestRender();\r\n\t}\r\n\r\n\tprivate async handleCompactCommand(customInstructions?: string): Promise<void> {\r\n\t\tconst entries = this.sessionManager.getEntries();\r\n\t\tconst messageCount = entries.filter((e) => e.type === \"message\").length;\r\n\r\n\t\tif (messageCount < 2) {\r\n\t\t\tthis.showWarning(\"Nothing to compact (no messages yet)\");\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tawait this.executeCompaction(customInstructions, false);\r\n\t}\r\n\r\n\tprivate async executeCompaction(customInstructions?: string, isAuto = false): Promise<CompactionResult | undefined> {\r\n\t\t// Stop loading animation\r\n\t\tif (this.loadingAnimation) {\r\n\t\t\tthis.loadingAnimation.stop();\r\n\t\t\tthis.loadingAnimation = undefined;\r\n\t\t}\r\n\t\tthis.statusContainer.clear();\r\n\r\n\t\t// Set up escape handler during compaction\r\n\t\tconst originalOnEscape = this.defaultEditor.onEscape;\r\n\t\tthis.defaultEditor.onEscape = () => {\r\n\t\t\tthis.session.abortCompaction();\r\n\t\t};\r\n\r\n\t\t// Show compacting status\r\n\t\tthis.chatContainer.addChild(new Spacer(1));\r\n\t\tconst cancelHint = `(${appKey(this.keybindings, \"interrupt\")} to cancel)`;\r\n\t\tconst label = isAuto ? `Auto-compacting context... ${cancelHint}` : `Compacting context... ${cancelHint}`;\r\n\t\tconst compactingLoader = new Loader(\r\n\t\t\tthis.ui,\r\n\t\t\t(spinner) => theme.fg(\"accent\", spinner),\r\n\t\t\t(text) => theme.fg(\"muted\", text),\r\n\t\t\tlabel,\r\n\t\t);\r\n\t\tthis.statusContainer.addChild(compactingLoader);\r\n\t\tthis.ui.requestRender();\r\n\r\n\t\tlet result: CompactionResult | undefined;\r\n\r\n\t\ttry {\r\n\t\t\tresult = await this.session.compact(customInstructions);\r\n\r\n\t\t\t// Rebuild UI\r\n\t\t\tthis.rebuildChatFromMessages();\r\n\r\n\t\t\t// Add compaction component at bottom so user sees it without scrolling\r\n\t\t\tconst msg = createCompactionSummaryMessage(result.summary, result.tokensBefore, new Date().toISOString());\r\n\t\t\tthis.addMessageToChat(msg);\r\n\r\n\t\t\tthis.footer.invalidate();\r\n\t\t} catch (error) {\r\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\r\n\t\t\tif (message === \"Compaction cancelled\" || (error instanceof Error && error.name === \"AbortError\")) {\r\n\t\t\t\tthis.showError(\"Compaction cancelled\");\r\n\t\t\t} else {\r\n\t\t\t\tthis.showError(`Compaction failed: ${message}`);\r\n\t\t\t}\r\n\t\t} finally {\r\n\t\t\tcompactingLoader.stop();\r\n\t\t\tthis.statusContainer.clear();\r\n\t\t\tthis.defaultEditor.onEscape = originalOnEscape;\r\n\t\t}\r\n\t\tvoid this.flushCompactionQueue({ willRetry: false });\r\n\t\treturn result;\r\n\t}\r\n\r\n\tstop(): void {\r\n\t\tif (this.loadingAnimation) {\r\n\t\t\tthis.loadingAnimation.stop();\r\n\t\t\tthis.loadingAnimation = undefined;\r\n\t\t}\r\n\t\tthis.clearExtensionTerminalInputListeners();\r\n\t\tthis.footer.dispose();\r\n\t\tthis.footerDataProvider.dispose();\r\n\t\tif (this.unsubscribe) {\r\n\t\t\tthis.unsubscribe();\r\n\t\t}\r\n\t\tif (this.isInitialized) {\r\n\t\t\tthis.ui.stop();\r\n\t\t\tthis.isInitialized = false;\r\n\t\t}\r\n\t}\r\n}\r\n"]}
|