iosm-cli 0.1.0
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 +55 -0
- package/LICENSE +21 -0
- package/README.md +650 -0
- package/dist/cli/args.d.ts +54 -0
- package/dist/cli/args.d.ts.map +1 -0
- package/dist/cli/args.js +331 -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 +15 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +88 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +262 -0
- package/dist/config.js.map +1 -0
- package/dist/core/agent-profiles.d.ts +29 -0
- package/dist/core/agent-profiles.d.ts.map +1 -0
- package/dist/core/agent-profiles.js +86 -0
- package/dist/core/agent-profiles.js.map +1 -0
- package/dist/core/agent-session.d.ts +688 -0
- package/dist/core/agent-session.d.ts.map +1 -0
- package/dist/core/agent-session.js +3112 -0
- package/dist/core/agent-session.js.map +1 -0
- package/dist/core/agent-teams.d.ts +41 -0
- package/dist/core/agent-teams.d.ts.map +1 -0
- package/dist/core/agent-teams.js +90 -0
- package/dist/core/agent-teams.js.map +1 -0
- package/dist/core/ask-user-tool.d.ts +22 -0
- package/dist/core/ask-user-tool.d.ts.map +1 -0
- package/dist/core/ask-user-tool.js +115 -0
- package/dist/core/ask-user-tool.js.map +1 -0
- package/dist/core/auth-storage.d.ts +133 -0
- package/dist/core/auth-storage.d.ts.map +1 -0
- package/dist/core/auth-storage.js +391 -0
- package/dist/core/auth-storage.js.map +1 -0
- package/dist/core/bash-executor.d.ts +49 -0
- package/dist/core/bash-executor.d.ts.map +1 -0
- package/dist/core/bash-executor.js +213 -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 +610 -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 +1590 -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 +63 -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 +447 -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 +652 -0
- package/dist/core/extensions/runner.js.map +1 -0
- package/dist/core/extensions/types.d.ts +1074 -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/hooks.d.ts +53 -0
- package/dist/core/hooks.d.ts.map +1 -0
- package/dist/core/hooks.js +332 -0
- package/dist/core/hooks.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 +157 -0
- package/dist/core/keybindings.js.map +1 -0
- package/dist/core/mcp/cli.d.ts +27 -0
- package/dist/core/mcp/cli.d.ts.map +1 -0
- package/dist/core/mcp/cli.js +275 -0
- package/dist/core/mcp/cli.js.map +1 -0
- package/dist/core/mcp/config.d.ts +11 -0
- package/dist/core/mcp/config.d.ts.map +1 -0
- package/dist/core/mcp/config.js +310 -0
- package/dist/core/mcp/config.js.map +1 -0
- package/dist/core/mcp/index.d.ts +5 -0
- package/dist/core/mcp/index.d.ts.map +1 -0
- package/dist/core/mcp/index.js +4 -0
- package/dist/core/mcp/index.js.map +1 -0
- package/dist/core/mcp/runtime.d.ts +42 -0
- package/dist/core/mcp/runtime.d.ts.map +1 -0
- package/dist/core/mcp/runtime.js +387 -0
- package/dist/core/mcp/runtime.js.map +1 -0
- package/dist/core/mcp/types.d.ts +76 -0
- package/dist/core/mcp/types.d.ts.map +1 -0
- package/dist/core/mcp/types.js +2 -0
- package/dist/core/mcp/types.js.map +1 -0
- package/dist/core/memory.d.ts +27 -0
- package/dist/core/memory.d.ts.map +1 -0
- package/dist/core/memory.js +203 -0
- package/dist/core/memory.js.map +1 -0
- package/dist/core/messages.d.ts +84 -0
- package/dist/core/messages.d.ts.map +1 -0
- package/dist/core/messages.js +141 -0
- package/dist/core/messages.js.map +1 -0
- package/dist/core/model-registry.d.ts +115 -0
- package/dist/core/model-registry.d.ts.map +1 -0
- package/dist/core/model-registry.js +549 -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 +448 -0
- package/dist/core/model-resolver.js.map +1 -0
- package/dist/core/package-manager.d.ts +156 -0
- package/dist/core/package-manager.d.ts.map +1 -0
- package/dist/core/package-manager.js +1465 -0
- package/dist/core/package-manager.js.map +1 -0
- package/dist/core/parallel-task-agent.d.ts +19 -0
- package/dist/core/parallel-task-agent.d.ts.map +1 -0
- package/dist/core/parallel-task-agent.js +482 -0
- package/dist/core/parallel-task-agent.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/qwen-cli-provider.d.ts +10 -0
- package/dist/core/qwen-cli-provider.d.ts.map +1 -0
- package/dist/core/qwen-cli-provider.js +271 -0
- package/dist/core/qwen-cli-provider.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 +60 -0
- package/dist/core/resolve-config-value.js.map +1 -0
- package/dist/core/resource-loader.d.ts +195 -0
- package/dist/core/resource-loader.d.ts.map +1 -0
- package/dist/core/resource-loader.js +820 -0
- package/dist/core/resource-loader.js.map +1 -0
- package/dist/core/sdk.d.ts +106 -0
- package/dist/core/sdk.d.ts.map +1 -0
- package/dist/core/sdk.js +460 -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 +1094 -0
- package/dist/core/session-manager.js.map +1 -0
- package/dist/core/settings-manager.d.ts +243 -0
- package/dist/core/settings-manager.d.ts.map +1 -0
- package/dist/core/settings-manager.js +691 -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 +64 -0
- package/dist/core/slash-commands.js.map +1 -0
- package/dist/core/subagent-runs.d.ts +16 -0
- package/dist/core/subagent-runs.d.ts.map +1 -0
- package/dist/core/subagent-runs.js +70 -0
- package/dist/core/subagent-runs.js.map +1 -0
- package/dist/core/subagents.d.ts +45 -0
- package/dist/core/subagents.d.ts.map +1 -0
- package/dist/core/subagents.js +467 -0
- package/dist/core/subagents.js.map +1 -0
- package/dist/core/system-prompt.d.ts +28 -0
- package/dist/core/system-prompt.d.ts.map +1 -0
- package/dist/core/system-prompt.js +196 -0
- package/dist/core/system-prompt.js.map +1 -0
- package/dist/core/task-plan.d.ts +32 -0
- package/dist/core/task-plan.d.ts.map +1 -0
- package/dist/core/task-plan.js +155 -0
- package/dist/core/task-plan.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 +26 -0
- package/dist/core/timings.js.map +1 -0
- package/dist/core/tools/bash.d.ts +58 -0
- package/dist/core/tools/bash.d.ts.map +1 -0
- package/dist/core/tools/bash.js +275 -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 +42 -0
- package/dist/core/tools/edit.d.ts.map +1 -0
- package/dist/core/tools/edit.js +158 -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 +219 -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 +254 -0
- package/dist/core/tools/grep.js.map +1 -0
- package/dist/core/tools/ignore-filter.d.ts +5 -0
- package/dist/core/tools/ignore-filter.d.ts.map +1 -0
- package/dist/core/tools/ignore-filter.js +97 -0
- package/dist/core/tools/ignore-filter.js.map +1 -0
- package/dist/core/tools/index.d.ts +97 -0
- package/dist/core/tools/index.d.ts.map +1 -0
- package/dist/core/tools/index.js +78 -0
- package/dist/core/tools/index.js.map +1 -0
- package/dist/core/tools/ls.d.ts +46 -0
- package/dist/core/tools/ls.d.ts.map +1 -0
- package/dist/core/tools/ls.js +136 -0
- package/dist/core/tools/ls.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/permissions.d.ts +8 -0
- package/dist/core/tools/permissions.d.ts.map +1 -0
- package/dist/core/tools/permissions.js +2 -0
- package/dist/core/tools/permissions.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/task.d.ts +109 -0
- package/dist/core/tools/task.d.ts.map +1 -0
- package/dist/core/tools/task.js +1065 -0
- package/dist/core/tools/task.js.map +1 -0
- package/dist/core/tools/todo.d.ts +42 -0
- package/dist/core/tools/todo.d.ts.map +1 -0
- package/dist/core/tools/todo.js +159 -0
- package/dist/core/tools/todo.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 +32 -0
- package/dist/core/tools/write.d.ts.map +1 -0
- package/dist/core/tools/write.js +90 -0
- package/dist/core/tools/write.js.map +1 -0
- package/dist/index.d.ts +30 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +45 -0
- package/dist/index.js.map +1 -0
- package/dist/iosm/agent-verification.d.ts +16 -0
- package/dist/iosm/agent-verification.d.ts.map +1 -0
- package/dist/iosm/agent-verification.js +138 -0
- package/dist/iosm/agent-verification.js.map +1 -0
- package/dist/iosm/automation.d.ts +40 -0
- package/dist/iosm/automation.d.ts.map +1 -0
- package/dist/iosm/automation.js +76 -0
- package/dist/iosm/automation.js.map +1 -0
- package/dist/iosm/config.d.ts +151 -0
- package/dist/iosm/config.d.ts.map +1 -0
- package/dist/iosm/config.js +323 -0
- package/dist/iosm/config.js.map +1 -0
- package/dist/iosm/context-loader.d.ts +12 -0
- package/dist/iosm/context-loader.d.ts.map +1 -0
- package/dist/iosm/context-loader.js +50 -0
- package/dist/iosm/context-loader.js.map +1 -0
- package/dist/iosm/cycle.d.ts +51 -0
- package/dist/iosm/cycle.d.ts.map +1 -0
- package/dist/iosm/cycle.js +861 -0
- package/dist/iosm/cycle.js.map +1 -0
- package/dist/iosm/guide.d.ts +31 -0
- package/dist/iosm/guide.d.ts.map +1 -0
- package/dist/iosm/guide.js +101 -0
- package/dist/iosm/guide.js.map +1 -0
- package/dist/iosm/index.d.ts +12 -0
- package/dist/iosm/index.d.ts.map +1 -0
- package/dist/iosm/index.js +11 -0
- package/dist/iosm/index.js.map +1 -0
- package/dist/iosm/init.d.ts +58 -0
- package/dist/iosm/init.d.ts.map +1 -0
- package/dist/iosm/init.js +1221 -0
- package/dist/iosm/init.js.map +1 -0
- package/dist/iosm/metrics.d.ts +23 -0
- package/dist/iosm/metrics.d.ts.map +1 -0
- package/dist/iosm/metrics.js +336 -0
- package/dist/iosm/metrics.js.map +1 -0
- package/dist/iosm/paths.d.ts +24 -0
- package/dist/iosm/paths.d.ts.map +1 -0
- package/dist/iosm/paths.js +77 -0
- package/dist/iosm/paths.js.map +1 -0
- package/dist/iosm/runtime-context.d.ts +20 -0
- package/dist/iosm/runtime-context.d.ts.map +1 -0
- package/dist/iosm/runtime-context.js +170 -0
- package/dist/iosm/runtime-context.js.map +1 -0
- package/dist/iosm/types.d.ts +151 -0
- package/dist/iosm/types.d.ts.map +1 -0
- package/dist/iosm/types.js +3 -0
- package/dist/iosm/types.js.map +1 -0
- package/dist/main.d.ts +8 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +1478 -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 +329 -0
- package/dist/modes/interactive/components/armin.js.map +1 -0
- package/dist/modes/interactive/components/ascii-logo.d.ts +11 -0
- package/dist/modes/interactive/components/ascii-logo.d.ts.map +1 -0
- package/dist/modes/interactive/components/ascii-logo.js +25 -0
- package/dist/modes/interactive/components/ascii-logo.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 +92 -0
- package/dist/modes/interactive/components/assistant-message.js.map +1 -0
- package/dist/modes/interactive/components/bash-execution.d.ts +36 -0
- package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -0
- package/dist/modes/interactive/components/bash-execution.js +170 -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 +48 -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 +42 -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 +43 -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 +470 -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 +28 -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 +63 -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 +74 -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 +138 -0
- package/dist/modes/interactive/components/daxnuts.js.map +1 -0
- package/dist/modes/interactive/components/decrypt-loader.d.ts +25 -0
- package/dist/modes/interactive/components/decrypt-loader.d.ts.map +1 -0
- package/dist/modes/interactive/components/decrypt-loader.js +102 -0
- package/dist/modes/interactive/components/decrypt-loader.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 +20 -0
- package/dist/modes/interactive/components/dynamic-border.js.map +1 -0
- package/dist/modes/interactive/components/extension-editor.d.ts +20 -0
- package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -0
- package/dist/modes/interactive/components/extension-editor.js +105 -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 +55 -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 +71 -0
- package/dist/modes/interactive/components/extension-selector.js.map +1 -0
- package/dist/modes/interactive/components/footer.d.ts +39 -0
- package/dist/modes/interactive/components/footer.d.ts.map +1 -0
- package/dist/modes/interactive/components/footer.js +285 -0
- package/dist/modes/interactive/components/footer.js.map +1 -0
- package/dist/modes/interactive/components/index.d.ts +33 -0
- package/dist/modes/interactive/components/index.d.ts.map +1 -0
- package/dist/modes/interactive/components/index.js +34 -0
- package/dist/modes/interactive/components/index.js.map +1 -0
- package/dist/modes/interactive/components/keybinding-hints.d.ts +50 -0
- package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -0
- package/dist/modes/interactive/components/keybinding-hints.js +85 -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 +139 -0
- package/dist/modes/interactive/components/login-dialog.js.map +1 -0
- package/dist/modes/interactive/components/mcp-selector.d.ts +31 -0
- package/dist/modes/interactive/components/mcp-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/mcp-selector.js +171 -0
- package/dist/modes/interactive/components/mcp-selector.js.map +1 -0
- package/dist/modes/interactive/components/model-selector.d.ts +51 -0
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/model-selector.js +292 -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 +134 -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 +271 -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 +839 -0
- package/dist/modes/interactive/components/session-selector.js.map +1 -0
- package/dist/modes/interactive/components/settings-selector.d.ts +60 -0
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/settings-selector.js +311 -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 +34 -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 +45 -0
- package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -0
- package/dist/modes/interactive/components/subagent-message.d.ts +91 -0
- package/dist/modes/interactive/components/subagent-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/subagent-message.js +306 -0
- package/dist/modes/interactive/components/subagent-message.js.map +1 -0
- package/dist/modes/interactive/components/task-plan-message.d.ts +12 -0
- package/dist/modes/interactive/components/task-plan-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/task-plan-message.js +61 -0
- package/dist/modes/interactive/components/task-plan-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 +44 -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 +46 -0
- package/dist/modes/interactive/components/thinking-selector.js.map +1 -0
- package/dist/modes/interactive/components/tool-execution.d.ts +78 -0
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -0
- package/dist/modes/interactive/components/tool-execution.js +880 -0
- package/dist/modes/interactive/components/tool-execution.js.map +1 -0
- package/dist/modes/interactive/components/tree-selector.d.ts +70 -0
- package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/tree-selector.js +921 -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 +110 -0
- package/dist/modes/interactive/components/user-message-selector.js.map +1 -0
- package/dist/modes/interactive/components/user-message.d.ts +9 -0
- package/dist/modes/interactive/components/user-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/user-message.js +27 -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 +453 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-mode.js +8669 -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 +404 -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 +580 -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 +251 -0
- package/dist/utils/tools-manager.js.map +1 -0
- package/docs/README.md +32 -0
- package/docs/cli-reference.md +342 -0
- package/docs/configuration.md +301 -0
- package/docs/development-and-testing.md +295 -0
- package/docs/extensions-packages-themes.md +415 -0
- package/docs/getting-started.md +246 -0
- package/docs/interactive-mode.md +272 -0
- package/docs/iosm-init-and-cycles.md +355 -0
- package/docs/orchestration-and-subagents.md +273 -0
- package/docs/rpc-json-sdk.md +353 -0
- package/docs/sessions-traces-export.md +260 -0
- package/examples/README.md +120 -0
- package/examples/extensions/README.md +306 -0
- package/examples/extensions/antigravity-image-gen.ts +415 -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/built-in-tool-renderer.ts +246 -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/dynamic-tools.ts +74 -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 +126 -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 +337 -0
- package/examples/tsconfig.json +3 -0
- package/package.json +107 -0
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Container, SelectList } from "@mariozechner/pi-tui";
|
|
2
|
+
import { getSelectListTheme } from "../theme/theme.js";
|
|
3
|
+
import { DynamicBorder } from "./dynamic-border.js";
|
|
4
|
+
/**
|
|
5
|
+
* Component that renders a show images selector with borders
|
|
6
|
+
*/
|
|
7
|
+
export class ShowImagesSelectorComponent extends Container {
|
|
8
|
+
constructor(currentValue, onSelect, onCancel) {
|
|
9
|
+
super();
|
|
10
|
+
const items = [
|
|
11
|
+
{ value: "yes", label: "Yes", description: "Show images inline in terminal" },
|
|
12
|
+
{ value: "no", label: "No", description: "Show text placeholder instead" },
|
|
13
|
+
];
|
|
14
|
+
// Add top border
|
|
15
|
+
this.addChild(new DynamicBorder());
|
|
16
|
+
// Create selector
|
|
17
|
+
this.selectList = new SelectList(items, 5, getSelectListTheme());
|
|
18
|
+
// Preselect current value
|
|
19
|
+
this.selectList.setSelectedIndex(currentValue ? 0 : 1);
|
|
20
|
+
this.selectList.onSelect = (item) => {
|
|
21
|
+
onSelect(item.value === "yes");
|
|
22
|
+
};
|
|
23
|
+
this.selectList.onCancel = () => {
|
|
24
|
+
onCancel();
|
|
25
|
+
};
|
|
26
|
+
this.addChild(this.selectList);
|
|
27
|
+
// Add bottom border
|
|
28
|
+
this.addChild(new DynamicBorder());
|
|
29
|
+
}
|
|
30
|
+
getSelectList() {
|
|
31
|
+
return this.selectList;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=show-images-selector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"show-images-selector.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/show-images-selector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAmB,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD;;GAEG;AACH,MAAM,OAAO,2BAA4B,SAAQ,SAAS;IAGzD,YAAY,YAAqB,EAAE,QAAiC,EAAE,QAAoB;QACzF,KAAK,EAAE,CAAC;QAER,MAAM,KAAK,GAAiB;YAC3B,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,gCAAgC,EAAE;YAC7E,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,+BAA+B,EAAE;SAC1E,CAAC;QAEF,iBAAiB;QACjB,IAAI,CAAC,QAAQ,CAAC,IAAI,aAAa,EAAE,CAAC,CAAC;QAEnC,kBAAkB;QAClB,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC,EAAE,kBAAkB,EAAE,CAAC,CAAC;QAEjE,0BAA0B;QAC1B,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEvD,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,CAAC,IAAI,EAAE,EAAE;YACnC,QAAQ,CAAC,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;QAChC,CAAC,CAAC;QAEF,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,GAAG,EAAE;YAC/B,QAAQ,EAAE,CAAC;QACZ,CAAC,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAE/B,oBAAoB;QACpB,IAAI,CAAC,QAAQ,CAAC,IAAI,aAAa,EAAE,CAAC,CAAC;IACpC,CAAC;IAED,aAAa;QACZ,OAAO,IAAI,CAAC,UAAU,CAAC;IACxB,CAAC;CACD","sourcesContent":["import { Container, type SelectItem, SelectList } from \"@mariozechner/pi-tui\";\nimport { getSelectListTheme } from \"../theme/theme.js\";\nimport { DynamicBorder } from \"./dynamic-border.js\";\n\n/**\n * Component that renders a show images selector with borders\n */\nexport class ShowImagesSelectorComponent extends Container {\n\tprivate selectList: SelectList;\n\n\tconstructor(currentValue: boolean, onSelect: (show: boolean) => void, onCancel: () => void) {\n\t\tsuper();\n\n\t\tconst items: SelectItem[] = [\n\t\t\t{ value: \"yes\", label: \"Yes\", description: \"Show images inline in terminal\" },\n\t\t\t{ value: \"no\", label: \"No\", description: \"Show text placeholder instead\" },\n\t\t];\n\n\t\t// Add top border\n\t\tthis.addChild(new DynamicBorder());\n\n\t\t// Create selector\n\t\tthis.selectList = new SelectList(items, 5, getSelectListTheme());\n\n\t\t// Preselect current value\n\t\tthis.selectList.setSelectedIndex(currentValue ? 0 : 1);\n\n\t\tthis.selectList.onSelect = (item) => {\n\t\t\tonSelect(item.value === \"yes\");\n\t\t};\n\n\t\tthis.selectList.onCancel = () => {\n\t\t\tonCancel();\n\t\t};\n\n\t\tthis.addChild(this.selectList);\n\n\t\t// Add bottom border\n\t\tthis.addChild(new DynamicBorder());\n\t}\n\n\tgetSelectList(): SelectList {\n\t\treturn this.selectList;\n\t}\n}\n"]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Box, type MarkdownTheme } from "@mariozechner/pi-tui";
|
|
2
|
+
import type { ParsedSkillBlock } from "../../../core/agent-session.js";
|
|
3
|
+
/**
|
|
4
|
+
* Component that renders a skill invocation message with collapsed/expanded state.
|
|
5
|
+
* Uses same background color as custom messages for visual consistency.
|
|
6
|
+
* Only renders the skill block itself - user message is rendered separately.
|
|
7
|
+
*/
|
|
8
|
+
export declare class SkillInvocationMessageComponent extends Box {
|
|
9
|
+
private expanded;
|
|
10
|
+
private skillBlock;
|
|
11
|
+
private markdownTheme;
|
|
12
|
+
constructor(skillBlock: ParsedSkillBlock, markdownTheme?: MarkdownTheme);
|
|
13
|
+
setExpanded(expanded: boolean): void;
|
|
14
|
+
invalidate(): void;
|
|
15
|
+
private updateDisplay;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=skill-invocation-message.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-invocation-message.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/skill-invocation-message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAY,KAAK,aAAa,EAAQ,MAAM,sBAAsB,CAAC;AAC/E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAIvE;;;;GAIG;AACH,qBAAa,+BAAgC,SAAQ,GAAG;IACvD,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,UAAU,CAAmB;IACrC,OAAO,CAAC,aAAa,CAAgB;gBAEzB,UAAU,EAAE,gBAAgB,EAAE,aAAa,GAAE,aAAkC;IAO3F,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI;IAK3B,UAAU,IAAI,IAAI;IAK3B,OAAO,CAAC,aAAa;CAsBrB"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { Box, Markdown, Text } from "@mariozechner/pi-tui";
|
|
2
|
+
import { getMarkdownTheme, theme } from "../theme/theme.js";
|
|
3
|
+
import { editorKey } from "./keybinding-hints.js";
|
|
4
|
+
/**
|
|
5
|
+
* Component that renders a skill invocation message with collapsed/expanded state.
|
|
6
|
+
* Uses same background color as custom messages for visual consistency.
|
|
7
|
+
* Only renders the skill block itself - user message is rendered separately.
|
|
8
|
+
*/
|
|
9
|
+
export class SkillInvocationMessageComponent extends Box {
|
|
10
|
+
constructor(skillBlock, markdownTheme = getMarkdownTheme()) {
|
|
11
|
+
super(1, 1, (t) => theme.bg("customMessageBg", t));
|
|
12
|
+
this.expanded = false;
|
|
13
|
+
this.skillBlock = skillBlock;
|
|
14
|
+
this.markdownTheme = markdownTheme;
|
|
15
|
+
this.updateDisplay();
|
|
16
|
+
}
|
|
17
|
+
setExpanded(expanded) {
|
|
18
|
+
this.expanded = expanded;
|
|
19
|
+
this.updateDisplay();
|
|
20
|
+
}
|
|
21
|
+
invalidate() {
|
|
22
|
+
super.invalidate();
|
|
23
|
+
this.updateDisplay();
|
|
24
|
+
}
|
|
25
|
+
updateDisplay() {
|
|
26
|
+
this.clear();
|
|
27
|
+
if (this.expanded) {
|
|
28
|
+
// Expanded: label + skill name header + full content
|
|
29
|
+
const label = theme.fg("customMessageLabel", `\x1b[1m[skill]\x1b[22m`);
|
|
30
|
+
this.addChild(new Text(label, 0, 0));
|
|
31
|
+
const header = `**${this.skillBlock.name}**\n\n`;
|
|
32
|
+
this.addChild(new Markdown(header + this.skillBlock.content, 0, 0, this.markdownTheme, {
|
|
33
|
+
color: (text) => theme.fg("customMessageText", text),
|
|
34
|
+
}));
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
// Collapsed: single line - [skill] name (hint to expand)
|
|
38
|
+
const line = theme.fg("customMessageLabel", `\x1b[1m[skill]\x1b[22m `) +
|
|
39
|
+
theme.fg("customMessageText", this.skillBlock.name) +
|
|
40
|
+
theme.fg("dim", ` (${editorKey("expandTools")} to expand)`);
|
|
41
|
+
this.addChild(new Text(line, 0, 0));
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=skill-invocation-message.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-invocation-message.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/skill-invocation-message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAsB,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAE/E,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD;;;;GAIG;AACH,MAAM,OAAO,+BAAgC,SAAQ,GAAG;IAKvD,YAAY,UAA4B,EAAE,gBAA+B,gBAAgB,EAAE;QAC1F,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,CAAC;QAL5C,aAAQ,GAAG,KAAK,CAAC;QAMxB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,aAAa,EAAE,CAAC;IACtB,CAAC;IAED,WAAW,CAAC,QAAiB;QAC5B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,aAAa,EAAE,CAAC;IACtB,CAAC;IAEQ,UAAU;QAClB,KAAK,CAAC,UAAU,EAAE,CAAC;QACnB,IAAI,CAAC,aAAa,EAAE,CAAC;IACtB,CAAC;IAEO,aAAa;QACpB,IAAI,CAAC,KAAK,EAAE,CAAC;QAEb,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,qDAAqD;YACrD,MAAM,KAAK,GAAG,KAAK,CAAC,EAAE,CAAC,oBAAoB,EAAE,wBAAwB,CAAC,CAAC;YACvE,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACrC,MAAM,MAAM,GAAG,KAAK,IAAI,CAAC,UAAU,CAAC,IAAI,QAAQ,CAAC;YACjD,IAAI,CAAC,QAAQ,CACZ,IAAI,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE;gBACxE,KAAK,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,mBAAmB,EAAE,IAAI,CAAC;aAC5D,CAAC,CACF,CAAC;QACH,CAAC;aAAM,CAAC;YACP,yDAAyD;YACzD,MAAM,IAAI,GACT,KAAK,CAAC,EAAE,CAAC,oBAAoB,EAAE,yBAAyB,CAAC;gBACzD,KAAK,CAAC,EAAE,CAAC,mBAAmB,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;gBACnD,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,SAAS,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;YAC7D,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACrC,CAAC;IACF,CAAC;CACD","sourcesContent":["import { Box, Markdown, type MarkdownTheme, Text } from \"@mariozechner/pi-tui\";\nimport type { ParsedSkillBlock } from \"../../../core/agent-session.js\";\nimport { getMarkdownTheme, theme } from \"../theme/theme.js\";\nimport { editorKey } from \"./keybinding-hints.js\";\n\n/**\n * Component that renders a skill invocation message with collapsed/expanded state.\n * Uses same background color as custom messages for visual consistency.\n * Only renders the skill block itself - user message is rendered separately.\n */\nexport class SkillInvocationMessageComponent extends Box {\n\tprivate expanded = false;\n\tprivate skillBlock: ParsedSkillBlock;\n\tprivate markdownTheme: MarkdownTheme;\n\n\tconstructor(skillBlock: ParsedSkillBlock, markdownTheme: MarkdownTheme = getMarkdownTheme()) {\n\t\tsuper(1, 1, (t) => theme.bg(\"customMessageBg\", t));\n\t\tthis.skillBlock = skillBlock;\n\t\tthis.markdownTheme = markdownTheme;\n\t\tthis.updateDisplay();\n\t}\n\n\tsetExpanded(expanded: boolean): void {\n\t\tthis.expanded = expanded;\n\t\tthis.updateDisplay();\n\t}\n\n\toverride invalidate(): void {\n\t\tsuper.invalidate();\n\t\tthis.updateDisplay();\n\t}\n\n\tprivate updateDisplay(): void {\n\t\tthis.clear();\n\n\t\tif (this.expanded) {\n\t\t\t// Expanded: label + skill name header + full content\n\t\t\tconst label = theme.fg(\"customMessageLabel\", `\\x1b[1m[skill]\\x1b[22m`);\n\t\t\tthis.addChild(new Text(label, 0, 0));\n\t\t\tconst header = `**${this.skillBlock.name}**\\n\\n`;\n\t\t\tthis.addChild(\n\t\t\t\tnew Markdown(header + this.skillBlock.content, 0, 0, this.markdownTheme, {\n\t\t\t\t\tcolor: (text: string) => theme.fg(\"customMessageText\", text),\n\t\t\t\t}),\n\t\t\t);\n\t\t} else {\n\t\t\t// Collapsed: single line - [skill] name (hint to expand)\n\t\t\tconst line =\n\t\t\t\ttheme.fg(\"customMessageLabel\", `\\x1b[1m[skill]\\x1b[22m `) +\n\t\t\t\ttheme.fg(\"customMessageText\", this.skillBlock.name) +\n\t\t\t\ttheme.fg(\"dim\", ` (${editorKey(\"expandTools\")} to expand)`);\n\t\t\tthis.addChild(new Text(line, 0, 0));\n\t\t}\n\t}\n}\n"]}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { Box } from "@mariozechner/pi-tui";
|
|
2
|
+
export type SubagentPhaseState = "queued" | "starting" | "running" | "responding";
|
|
3
|
+
export type SubagentDelegateStatus = "pending" | "running" | "done" | "failed";
|
|
4
|
+
export interface SubagentDelegateItem {
|
|
5
|
+
index: number;
|
|
6
|
+
description: string;
|
|
7
|
+
profile: string;
|
|
8
|
+
status: SubagentDelegateStatus;
|
|
9
|
+
}
|
|
10
|
+
export interface SubagentInfo {
|
|
11
|
+
/** Human-readable description of the subagent's task, e.g. "Exploring TypeScript files" */
|
|
12
|
+
description: string;
|
|
13
|
+
/** Profile name, e.g. "explore" | "plan" | "fix" */
|
|
14
|
+
profile: string;
|
|
15
|
+
/** Current lifecycle state of the subagent */
|
|
16
|
+
status: "running" | "done" | "error";
|
|
17
|
+
/** Byte length of the subagent's output, populated when status is "done" */
|
|
18
|
+
outputLength?: number;
|
|
19
|
+
/** Wall-clock elapsed time in milliseconds, populated when status is "done" */
|
|
20
|
+
durationMs?: number;
|
|
21
|
+
/** Error message, populated when status is "error" */
|
|
22
|
+
errorMessage?: string;
|
|
23
|
+
/** Current phase summary for in-progress work */
|
|
24
|
+
phase?: string;
|
|
25
|
+
/** Current phase state in the execution timeline */
|
|
26
|
+
phaseState?: SubagentPhaseState;
|
|
27
|
+
/** Effective working directory for the subagent */
|
|
28
|
+
cwd?: string;
|
|
29
|
+
/** Optional custom agent label */
|
|
30
|
+
agent?: string;
|
|
31
|
+
/** Optional lock domain key */
|
|
32
|
+
lockKey?: string;
|
|
33
|
+
/** Isolation mode for this run */
|
|
34
|
+
isolation?: "none" | "worktree";
|
|
35
|
+
/** Current active subagent tool (e.g. read, bash, write) */
|
|
36
|
+
activeTool?: string;
|
|
37
|
+
/** Number of subagent tool calls started */
|
|
38
|
+
toolCallsStarted?: number;
|
|
39
|
+
/** Number of subagent tool calls completed */
|
|
40
|
+
toolCallsCompleted?: number;
|
|
41
|
+
/** Number of assistant messages produced inside subagent */
|
|
42
|
+
assistantMessages?: number;
|
|
43
|
+
/** Queue delay before execution started (ms) */
|
|
44
|
+
waitMs?: number;
|
|
45
|
+
/** Number of delegated child subtasks launched by this subagent */
|
|
46
|
+
delegatedTasks?: number;
|
|
47
|
+
/** Number of delegated child subtasks finished successfully */
|
|
48
|
+
delegatedSucceeded?: number;
|
|
49
|
+
/** Number of delegated child subtasks that failed */
|
|
50
|
+
delegatedFailed?: number;
|
|
51
|
+
/** Currently active delegated subtask index (1-based) */
|
|
52
|
+
delegateIndex?: number;
|
|
53
|
+
/** Total delegated subtasks in the current batch */
|
|
54
|
+
delegateTotal?: number;
|
|
55
|
+
/** Currently active delegated subtask description */
|
|
56
|
+
delegateDescription?: string;
|
|
57
|
+
/** Currently active delegated subtask profile */
|
|
58
|
+
delegateProfile?: string;
|
|
59
|
+
/** Delegate task mini-list with per-item status */
|
|
60
|
+
delegateItems?: SubagentDelegateItem[];
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Component that surfaces a running or completed subagent (task tool invocation).
|
|
64
|
+
*
|
|
65
|
+
* Visual structure
|
|
66
|
+
* ----------------
|
|
67
|
+
* Line 1 (header): [subagent] <profile> · <description>
|
|
68
|
+
* Line 2 (status):
|
|
69
|
+
* running → ... <phase>
|
|
70
|
+
* @ <cwd> · tool <active> · tools <done>/<started>
|
|
71
|
+
* delegates <done>/<total> done, <failed> failed
|
|
72
|
+
* delegate <i>/<n> · <description> · (<profile>)
|
|
73
|
+
* delegates list with status markers (compact mode on large runs)
|
|
74
|
+
* flow [x] queued -> [>] running -> [ ] responding
|
|
75
|
+
* done → + <outputSize> output, <duration>, tools <done>/<started>, queue <wait>
|
|
76
|
+
* error → x <errorMessage or "error">
|
|
77
|
+
*
|
|
78
|
+
* Theming follows the customMessage palette so the block sits visually alongside
|
|
79
|
+
* other agent-injected messages (task plan, skill invocation, custom messages).
|
|
80
|
+
*/
|
|
81
|
+
export declare class SubagentMessageComponent extends Box {
|
|
82
|
+
constructor(info: SubagentInfo);
|
|
83
|
+
/**
|
|
84
|
+
* Replace the rendered content with updated subagent info.
|
|
85
|
+
* Call this whenever status, outputLength, durationMs, or errorMessage changes.
|
|
86
|
+
*/
|
|
87
|
+
update(info: SubagentInfo): void;
|
|
88
|
+
invalidate(): void;
|
|
89
|
+
private renderContent;
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=subagent-message.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subagent-message.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/subagent-message.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAgB,MAAM,sBAAsB,CAAC;AAGzD,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,YAAY,CAAC;AAClF,MAAM,MAAM,sBAAsB,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;AAE/E,MAAM,WAAW,oBAAoB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,sBAAsB,CAAC;CAC/B;AAED,MAAM,WAAW,YAAY;IAC5B,2FAA2F;IAC3F,WAAW,EAAE,MAAM,CAAC;IACpB,oDAAoD;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,8CAA8C;IAC9C,MAAM,EAAE,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;IACrC,4EAA4E;IAC5E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+EAA+E;IAC/E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sDAAsD;IACtD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iDAAiD;IACjD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC,mDAAmD;IACnD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,kCAAkC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kCAAkC;IAClC,SAAS,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;IAChC,4DAA4D;IAC5D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4CAA4C;IAC5C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,8CAA8C;IAC9C,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,4DAA4D;IAC5D,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gDAAgD;IAChD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mEAAmE;IACnE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,+DAA+D;IAC/D,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,qDAAqD;IACrD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,yDAAyD;IACzD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oDAAoD;IACpD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qDAAqD;IACrD,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,iDAAiD;IACjD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mDAAmD;IACnD,aAAa,CAAC,EAAE,oBAAoB,EAAE,CAAC;CACvC;AA4ID;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,wBAAyB,SAAQ,GAAG;gBACpC,IAAI,EAAE,YAAY;IAK9B;;;OAGG;IACH,MAAM,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;IAKvB,UAAU,IAAI,IAAI;IAI3B,OAAO,CAAC,aAAa;CAoJrB"}
|
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
import { homedir } from "node:os";
|
|
2
|
+
import { Box, Spacer, Text } from "@mariozechner/pi-tui";
|
|
3
|
+
import { theme } from "../theme/theme.js";
|
|
4
|
+
/**
|
|
5
|
+
* Format a byte count as a compact human-readable string.
|
|
6
|
+
* Mirrors the formatting conventions used elsewhere in the footer (k/M suffixes).
|
|
7
|
+
*/
|
|
8
|
+
function formatBytes(bytes) {
|
|
9
|
+
if (bytes < 1024)
|
|
10
|
+
return `${bytes}B`;
|
|
11
|
+
if (bytes < 1024 * 1024)
|
|
12
|
+
return `${(bytes / 1024).toFixed(1)}KB`;
|
|
13
|
+
return `${(bytes / (1024 * 1024)).toFixed(1)}MB`;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Format a millisecond duration as a compact human-readable string.
|
|
17
|
+
* Keeps the unit explicit so users can immediately scan the value at a glance.
|
|
18
|
+
*/
|
|
19
|
+
function formatDuration(ms) {
|
|
20
|
+
if (ms < 1000)
|
|
21
|
+
return `${ms}ms`;
|
|
22
|
+
if (ms < 60_000)
|
|
23
|
+
return `${(ms / 1000).toFixed(1)}s`;
|
|
24
|
+
const minutes = Math.floor(ms / 60_000);
|
|
25
|
+
const seconds = ((ms % 60_000) / 1000).toFixed(0);
|
|
26
|
+
return `${minutes}m ${seconds}s`;
|
|
27
|
+
}
|
|
28
|
+
function shortenPath(path) {
|
|
29
|
+
const home = homedir();
|
|
30
|
+
return path.startsWith(home) ? `~${path.slice(home.length)}` : path;
|
|
31
|
+
}
|
|
32
|
+
function formatToolProgress(started, completed) {
|
|
33
|
+
if (typeof started !== "number" || started < 0)
|
|
34
|
+
return undefined;
|
|
35
|
+
if (typeof completed === "number" && completed >= 0) {
|
|
36
|
+
return `tools ${completed}/${started}`;
|
|
37
|
+
}
|
|
38
|
+
return `tools ${started}`;
|
|
39
|
+
}
|
|
40
|
+
function formatSubagentBadge(agent) {
|
|
41
|
+
if (typeof agent !== "string")
|
|
42
|
+
return "[subagent]";
|
|
43
|
+
const normalized = agent.trim();
|
|
44
|
+
if (!normalized)
|
|
45
|
+
return "[subagent]";
|
|
46
|
+
return `[subagent:${normalized}]`;
|
|
47
|
+
}
|
|
48
|
+
function renderPhaseTimeline(phaseState) {
|
|
49
|
+
const phases = ["queued", "starting", "running", "responding"];
|
|
50
|
+
const currentIndex = phases.indexOf(phaseState);
|
|
51
|
+
if (currentIndex < 0)
|
|
52
|
+
return "";
|
|
53
|
+
const segments = phases.map((phase, index) => {
|
|
54
|
+
const marker = index < currentIndex ? "[x]" : index === currentIndex ? "[>]" : "[ ]";
|
|
55
|
+
const text = `${marker} ${phase}`;
|
|
56
|
+
if (index < currentIndex)
|
|
57
|
+
return theme.fg("success", text);
|
|
58
|
+
if (index === currentIndex)
|
|
59
|
+
return theme.fg("accent", text);
|
|
60
|
+
return theme.fg("muted", text);
|
|
61
|
+
});
|
|
62
|
+
return `${theme.fg("muted", "flow")} ${segments.join(theme.fg("dim", " -> "))}`;
|
|
63
|
+
}
|
|
64
|
+
function summarizeDelegates(info) {
|
|
65
|
+
if (Array.isArray(info.delegateItems) && info.delegateItems.length > 0) {
|
|
66
|
+
let done = 0;
|
|
67
|
+
let failed = 0;
|
|
68
|
+
let running = 0;
|
|
69
|
+
let pending = 0;
|
|
70
|
+
for (const item of info.delegateItems) {
|
|
71
|
+
switch (item.status) {
|
|
72
|
+
case "done":
|
|
73
|
+
done += 1;
|
|
74
|
+
break;
|
|
75
|
+
case "failed":
|
|
76
|
+
failed += 1;
|
|
77
|
+
break;
|
|
78
|
+
case "running":
|
|
79
|
+
running += 1;
|
|
80
|
+
break;
|
|
81
|
+
default:
|
|
82
|
+
pending += 1;
|
|
83
|
+
break;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return { total: info.delegateItems.length, done, failed, running, pending };
|
|
87
|
+
}
|
|
88
|
+
if (typeof info.delegatedTasks === "number" && info.delegatedTasks > 0) {
|
|
89
|
+
const total = info.delegatedTasks;
|
|
90
|
+
const done = typeof info.delegatedSucceeded === "number" ? Math.max(0, info.delegatedSucceeded) : 0;
|
|
91
|
+
const failed = typeof info.delegatedFailed === "number" ? Math.max(0, info.delegatedFailed) : 0;
|
|
92
|
+
const running = Math.max(0, total - done - failed);
|
|
93
|
+
const pending = 0;
|
|
94
|
+
return { total, done, failed, running, pending };
|
|
95
|
+
}
|
|
96
|
+
return undefined;
|
|
97
|
+
}
|
|
98
|
+
function formatDelegateSummary(summary) {
|
|
99
|
+
const parts = [`delegates ${summary.done}/${summary.total} done`];
|
|
100
|
+
if (summary.failed > 0) {
|
|
101
|
+
parts.push(`${summary.failed} failed`);
|
|
102
|
+
}
|
|
103
|
+
if (summary.running > 0) {
|
|
104
|
+
parts.push(`${summary.running} running`);
|
|
105
|
+
}
|
|
106
|
+
return parts.join(", ");
|
|
107
|
+
}
|
|
108
|
+
function selectDelegateItemsForDisplay(items) {
|
|
109
|
+
const compactThreshold = 6;
|
|
110
|
+
const maxRows = 5;
|
|
111
|
+
if (items.length > compactThreshold) {
|
|
112
|
+
const critical = items.filter((item) => item.status === "running" || item.status === "failed");
|
|
113
|
+
const visibleItems = critical.slice(0, maxRows);
|
|
114
|
+
return {
|
|
115
|
+
visibleItems,
|
|
116
|
+
compacted: true,
|
|
117
|
+
hiddenDonePending: Math.max(0, items.length - critical.length),
|
|
118
|
+
overflow: Math.max(0, critical.length - visibleItems.length),
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
const visibleItems = items.slice(0, maxRows);
|
|
122
|
+
return {
|
|
123
|
+
visibleItems,
|
|
124
|
+
compacted: false,
|
|
125
|
+
hiddenDonePending: 0,
|
|
126
|
+
overflow: Math.max(0, items.length - visibleItems.length),
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Component that surfaces a running or completed subagent (task tool invocation).
|
|
131
|
+
*
|
|
132
|
+
* Visual structure
|
|
133
|
+
* ----------------
|
|
134
|
+
* Line 1 (header): [subagent] <profile> · <description>
|
|
135
|
+
* Line 2 (status):
|
|
136
|
+
* running → ... <phase>
|
|
137
|
+
* @ <cwd> · tool <active> · tools <done>/<started>
|
|
138
|
+
* delegates <done>/<total> done, <failed> failed
|
|
139
|
+
* delegate <i>/<n> · <description> · (<profile>)
|
|
140
|
+
* delegates list with status markers (compact mode on large runs)
|
|
141
|
+
* flow [x] queued -> [>] running -> [ ] responding
|
|
142
|
+
* done → + <outputSize> output, <duration>, tools <done>/<started>, queue <wait>
|
|
143
|
+
* error → x <errorMessage or "error">
|
|
144
|
+
*
|
|
145
|
+
* Theming follows the customMessage palette so the block sits visually alongside
|
|
146
|
+
* other agent-injected messages (task plan, skill invocation, custom messages).
|
|
147
|
+
*/
|
|
148
|
+
export class SubagentMessageComponent extends Box {
|
|
149
|
+
constructor(info) {
|
|
150
|
+
super(1, 1, (text) => theme.bg("customMessageBg", text));
|
|
151
|
+
this.renderContent(info);
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Replace the rendered content with updated subagent info.
|
|
155
|
+
* Call this whenever status, outputLength, durationMs, or errorMessage changes.
|
|
156
|
+
*/
|
|
157
|
+
update(info) {
|
|
158
|
+
this.clear();
|
|
159
|
+
this.renderContent(info);
|
|
160
|
+
}
|
|
161
|
+
invalidate() {
|
|
162
|
+
super.invalidate();
|
|
163
|
+
}
|
|
164
|
+
renderContent(info) {
|
|
165
|
+
// --- Header line ---
|
|
166
|
+
// [subagent] or [subagent:<agent>] <profile> · <description>
|
|
167
|
+
const label = theme.fg("customMessageLabel", `\x1b[1m${formatSubagentBadge(info.agent)}\x1b[22m`);
|
|
168
|
+
const profileBadge = theme.fg("accent", info.profile);
|
|
169
|
+
const dot = theme.fg("dim", " \u00B7 "); // middle dot separator
|
|
170
|
+
const description = theme.fg("customMessageText", info.description);
|
|
171
|
+
this.addChild(new Text(`${label} ${profileBadge}${dot}${description}`, 0, 0));
|
|
172
|
+
this.addChild(new Spacer(1));
|
|
173
|
+
// --- Status line ---
|
|
174
|
+
switch (info.status) {
|
|
175
|
+
case "running": {
|
|
176
|
+
// Ellipsis prefix signals in-progress work without a spinner dependency
|
|
177
|
+
const indicator = theme.fg("accent", "...");
|
|
178
|
+
const phase = info.phase?.trim() ? info.phase.trim() : "running";
|
|
179
|
+
const statusText = theme.fg("muted", ` ${phase}`);
|
|
180
|
+
this.addChild(new Text(`${indicator}${statusText}`, 0, 0));
|
|
181
|
+
const metadata = [];
|
|
182
|
+
if (info.cwd) {
|
|
183
|
+
metadata.push(theme.fg("muted", `@ ${shortenPath(info.cwd)}`));
|
|
184
|
+
}
|
|
185
|
+
if (info.activeTool) {
|
|
186
|
+
metadata.push(theme.fg("customMessageText", `tool ${info.activeTool}`));
|
|
187
|
+
}
|
|
188
|
+
const toolProgress = formatToolProgress(info.toolCallsStarted, info.toolCallsCompleted);
|
|
189
|
+
if (toolProgress) {
|
|
190
|
+
metadata.push(theme.fg("muted", toolProgress));
|
|
191
|
+
}
|
|
192
|
+
if (typeof info.assistantMessages === "number" && info.assistantMessages > 0) {
|
|
193
|
+
metadata.push(theme.fg("muted", `msgs ${info.assistantMessages}`));
|
|
194
|
+
}
|
|
195
|
+
if (info.agent) {
|
|
196
|
+
metadata.push(theme.fg("muted", `agent ${info.agent}`));
|
|
197
|
+
}
|
|
198
|
+
if (info.isolation && info.isolation !== "none") {
|
|
199
|
+
metadata.push(theme.fg("muted", `iso ${info.isolation}`));
|
|
200
|
+
}
|
|
201
|
+
if (info.lockKey) {
|
|
202
|
+
metadata.push(theme.fg("muted", `lock ${info.lockKey}`));
|
|
203
|
+
}
|
|
204
|
+
if (metadata.length > 0) {
|
|
205
|
+
this.addChild(new Text(metadata.join(theme.fg("dim", " \u00B7 ")), 0, 0));
|
|
206
|
+
}
|
|
207
|
+
const delegateSummary = summarizeDelegates(info);
|
|
208
|
+
if (delegateSummary) {
|
|
209
|
+
this.addChild(new Text(theme.fg("accent", formatDelegateSummary(delegateSummary)), 0, 0));
|
|
210
|
+
}
|
|
211
|
+
if (typeof info.delegateIndex === "number" && info.delegateIndex > 0) {
|
|
212
|
+
const delegateTotal = typeof info.delegateTotal === "number" && info.delegateTotal > 0
|
|
213
|
+
? info.delegateTotal
|
|
214
|
+
: info.delegateIndex;
|
|
215
|
+
const delegateParts = [theme.fg("accent", `delegate ${info.delegateIndex}/${delegateTotal}`)];
|
|
216
|
+
if (typeof info.delegateDescription === "string" && info.delegateDescription.trim().length > 0) {
|
|
217
|
+
delegateParts.push(theme.fg("customMessageText", info.delegateDescription.trim()));
|
|
218
|
+
}
|
|
219
|
+
if (typeof info.delegateProfile === "string" && info.delegateProfile.trim().length > 0) {
|
|
220
|
+
delegateParts.push(theme.fg("muted", `(${info.delegateProfile.trim()})`));
|
|
221
|
+
}
|
|
222
|
+
this.addChild(new Text(delegateParts.join(theme.fg("dim", " \u00B7 ")), 0, 0));
|
|
223
|
+
}
|
|
224
|
+
if (Array.isArray(info.delegateItems) && info.delegateItems.length > 0) {
|
|
225
|
+
const selected = selectDelegateItemsForDisplay(info.delegateItems);
|
|
226
|
+
const headerParts = [theme.fg("muted", "delegates")];
|
|
227
|
+
if (selected.compacted) {
|
|
228
|
+
headerParts.push(theme.fg("accent", "compact"));
|
|
229
|
+
if (selected.hiddenDonePending > 0) {
|
|
230
|
+
headerParts.push(theme.fg("muted", `hidden ${selected.hiddenDonePending} done/pending`));
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
this.addChild(new Text(headerParts.join(theme.fg("dim", " \u00B7 ")), 0, 0));
|
|
234
|
+
if (selected.visibleItems.length === 0 && selected.compacted) {
|
|
235
|
+
this.addChild(new Text(theme.fg("muted", "no running/failed delegates"), 0, 0));
|
|
236
|
+
}
|
|
237
|
+
for (const item of selected.visibleItems) {
|
|
238
|
+
const marker = (() => {
|
|
239
|
+
switch (item.status) {
|
|
240
|
+
case "done":
|
|
241
|
+
return theme.fg("success", "[x]");
|
|
242
|
+
case "running":
|
|
243
|
+
return theme.fg("accent", "[>]");
|
|
244
|
+
case "failed":
|
|
245
|
+
return theme.fg("warning", "[!]");
|
|
246
|
+
default:
|
|
247
|
+
return theme.fg("muted", "[ ]");
|
|
248
|
+
}
|
|
249
|
+
})();
|
|
250
|
+
const label = `${item.index}. ${item.description} (${item.profile})`;
|
|
251
|
+
const textColor = item.status === "done"
|
|
252
|
+
? "muted"
|
|
253
|
+
: item.status === "running"
|
|
254
|
+
? "customMessageText"
|
|
255
|
+
: item.status === "failed"
|
|
256
|
+
? "warning"
|
|
257
|
+
: "muted";
|
|
258
|
+
this.addChild(new Text(`${marker} ${theme.fg(textColor, label)}`, 0, 0));
|
|
259
|
+
}
|
|
260
|
+
if (selected.overflow > 0) {
|
|
261
|
+
this.addChild(new Text(theme.fg("muted", `... +${selected.overflow} more`), 0, 0));
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
if (info.phaseState) {
|
|
265
|
+
this.addChild(new Text(renderPhaseTimeline(info.phaseState), 0, 0));
|
|
266
|
+
}
|
|
267
|
+
break;
|
|
268
|
+
}
|
|
269
|
+
case "done": {
|
|
270
|
+
const checkmark = theme.fg("success", "+");
|
|
271
|
+
const parts = [];
|
|
272
|
+
if (info.outputLength !== undefined) {
|
|
273
|
+
parts.push(theme.fg("customMessageText", formatBytes(info.outputLength)) + theme.fg("muted", " output"));
|
|
274
|
+
}
|
|
275
|
+
if (info.durationMs !== undefined) {
|
|
276
|
+
parts.push(theme.fg("muted", formatDuration(info.durationMs)));
|
|
277
|
+
}
|
|
278
|
+
const toolProgress = formatToolProgress(info.toolCallsStarted, info.toolCallsCompleted);
|
|
279
|
+
if (toolProgress) {
|
|
280
|
+
parts.push(theme.fg("muted", toolProgress));
|
|
281
|
+
}
|
|
282
|
+
const delegateSummary = summarizeDelegates(info);
|
|
283
|
+
if (delegateSummary) {
|
|
284
|
+
parts.push(theme.fg("muted", `delegates ${delegateSummary.done}/${delegateSummary.total} done`));
|
|
285
|
+
if (delegateSummary.failed > 0) {
|
|
286
|
+
parts.push(theme.fg("warning", `${delegateSummary.failed} failed`));
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
if (typeof info.waitMs === "number" && info.waitMs > 0) {
|
|
290
|
+
parts.push(theme.fg("muted", `queue ${formatDuration(info.waitMs)}`));
|
|
291
|
+
}
|
|
292
|
+
const detail = parts.length > 0 ? " " + parts.join(theme.fg("dim", ", ")) : "";
|
|
293
|
+
this.addChild(new Text(`${checkmark}${detail}`, 0, 0));
|
|
294
|
+
break;
|
|
295
|
+
}
|
|
296
|
+
case "error": {
|
|
297
|
+
const cross = theme.fg("error", "x");
|
|
298
|
+
const message = info.errorMessage ? info.errorMessage : "error";
|
|
299
|
+
const errorText = theme.fg("error", ` ${message}`);
|
|
300
|
+
this.addChild(new Text(`${cross}${errorText}`, 0, 0));
|
|
301
|
+
break;
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
//# sourceMappingURL=subagent-message.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subagent-message.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/subagent-message.ts"],"names":[],"mappings":"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","sourcesContent":["import { homedir } from \"node:os\";\nimport { Box, Spacer, Text } from \"@mariozechner/pi-tui\";\nimport { theme } from \"../theme/theme.js\";\n\nexport type SubagentPhaseState = \"queued\" | \"starting\" | \"running\" | \"responding\";\nexport type SubagentDelegateStatus = \"pending\" | \"running\" | \"done\" | \"failed\";\n\nexport interface SubagentDelegateItem {\n\tindex: number;\n\tdescription: string;\n\tprofile: string;\n\tstatus: SubagentDelegateStatus;\n}\n\nexport interface SubagentInfo {\n\t/** Human-readable description of the subagent's task, e.g. \"Exploring TypeScript files\" */\n\tdescription: string;\n\t/** Profile name, e.g. \"explore\" | \"plan\" | \"fix\" */\n\tprofile: string;\n\t/** Current lifecycle state of the subagent */\n\tstatus: \"running\" | \"done\" | \"error\";\n\t/** Byte length of the subagent's output, populated when status is \"done\" */\n\toutputLength?: number;\n\t/** Wall-clock elapsed time in milliseconds, populated when status is \"done\" */\n\tdurationMs?: number;\n\t/** Error message, populated when status is \"error\" */\n\terrorMessage?: string;\n\t/** Current phase summary for in-progress work */\n\tphase?: string;\n\t/** Current phase state in the execution timeline */\n\tphaseState?: SubagentPhaseState;\n\t/** Effective working directory for the subagent */\n\tcwd?: string;\n\t/** Optional custom agent label */\n\tagent?: string;\n\t/** Optional lock domain key */\n\tlockKey?: string;\n\t/** Isolation mode for this run */\n\tisolation?: \"none\" | \"worktree\";\n\t/** Current active subagent tool (e.g. read, bash, write) */\n\tactiveTool?: string;\n\t/** Number of subagent tool calls started */\n\ttoolCallsStarted?: number;\n\t/** Number of subagent tool calls completed */\n\ttoolCallsCompleted?: number;\n\t/** Number of assistant messages produced inside subagent */\n\tassistantMessages?: number;\n\t/** Queue delay before execution started (ms) */\n\twaitMs?: number;\n\t/** Number of delegated child subtasks launched by this subagent */\n\tdelegatedTasks?: number;\n\t/** Number of delegated child subtasks finished successfully */\n\tdelegatedSucceeded?: number;\n\t/** Number of delegated child subtasks that failed */\n\tdelegatedFailed?: number;\n\t/** Currently active delegated subtask index (1-based) */\n\tdelegateIndex?: number;\n\t/** Total delegated subtasks in the current batch */\n\tdelegateTotal?: number;\n\t/** Currently active delegated subtask description */\n\tdelegateDescription?: string;\n\t/** Currently active delegated subtask profile */\n\tdelegateProfile?: string;\n\t/** Delegate task mini-list with per-item status */\n\tdelegateItems?: SubagentDelegateItem[];\n}\n\ntype DelegateSummary = {\n\ttotal: number;\n\tdone: number;\n\tfailed: number;\n\trunning: number;\n\tpending: number;\n};\n\n/**\n * Format a byte count as a compact human-readable string.\n * Mirrors the formatting conventions used elsewhere in the footer (k/M suffixes).\n */\nfunction formatBytes(bytes: number): string {\n\tif (bytes < 1024) return `${bytes}B`;\n\tif (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)}KB`;\n\treturn `${(bytes / (1024 * 1024)).toFixed(1)}MB`;\n}\n\n/**\n * Format a millisecond duration as a compact human-readable string.\n * Keeps the unit explicit so users can immediately scan the value at a glance.\n */\nfunction formatDuration(ms: number): string {\n\tif (ms < 1000) return `${ms}ms`;\n\tif (ms < 60_000) return `${(ms / 1000).toFixed(1)}s`;\n\tconst minutes = Math.floor(ms / 60_000);\n\tconst seconds = ((ms % 60_000) / 1000).toFixed(0);\n\treturn `${minutes}m ${seconds}s`;\n}\n\nfunction shortenPath(path: string): string {\n\tconst home = homedir();\n\treturn path.startsWith(home) ? `~${path.slice(home.length)}` : path;\n}\n\nfunction formatToolProgress(started?: number, completed?: number): string | undefined {\n\tif (typeof started !== \"number\" || started < 0) return undefined;\n\tif (typeof completed === \"number\" && completed >= 0) {\n\t\treturn `tools ${completed}/${started}`;\n\t}\n\treturn `tools ${started}`;\n}\n\nfunction formatSubagentBadge(agent?: string): string {\n\tif (typeof agent !== \"string\") return \"[subagent]\";\n\tconst normalized = agent.trim();\n\tif (!normalized) return \"[subagent]\";\n\treturn `[subagent:${normalized}]`;\n}\n\nfunction renderPhaseTimeline(phaseState: SubagentPhaseState): string {\n\tconst phases: SubagentPhaseState[] = [\"queued\", \"starting\", \"running\", \"responding\"];\n\tconst currentIndex = phases.indexOf(phaseState);\n\tif (currentIndex < 0) return \"\";\n\n\tconst segments = phases.map((phase, index) => {\n\t\tconst marker = index < currentIndex ? \"[x]\" : index === currentIndex ? \"[>]\" : \"[ ]\";\n\t\tconst text = `${marker} ${phase}`;\n\t\tif (index < currentIndex) return theme.fg(\"success\", text);\n\t\tif (index === currentIndex) return theme.fg(\"accent\", text);\n\t\treturn theme.fg(\"muted\", text);\n\t});\n\treturn `${theme.fg(\"muted\", \"flow\")} ${segments.join(theme.fg(\"dim\", \" -> \"))}`;\n}\n\nfunction summarizeDelegates(info: SubagentInfo): DelegateSummary | undefined {\n\tif (Array.isArray(info.delegateItems) && info.delegateItems.length > 0) {\n\t\tlet done = 0;\n\t\tlet failed = 0;\n\t\tlet running = 0;\n\t\tlet pending = 0;\n\t\tfor (const item of info.delegateItems) {\n\t\t\tswitch (item.status) {\n\t\t\t\tcase \"done\":\n\t\t\t\t\tdone += 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"failed\":\n\t\t\t\t\tfailed += 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"running\":\n\t\t\t\t\trunning += 1;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tpending += 1;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn { total: info.delegateItems.length, done, failed, running, pending };\n\t}\n\tif (typeof info.delegatedTasks === \"number\" && info.delegatedTasks > 0) {\n\t\tconst total = info.delegatedTasks;\n\t\tconst done = typeof info.delegatedSucceeded === \"number\" ? Math.max(0, info.delegatedSucceeded) : 0;\n\t\tconst failed = typeof info.delegatedFailed === \"number\" ? Math.max(0, info.delegatedFailed) : 0;\n\t\tconst running = Math.max(0, total - done - failed);\n\t\tconst pending = 0;\n\t\treturn { total, done, failed, running, pending };\n\t}\n\treturn undefined;\n}\n\nfunction formatDelegateSummary(summary: DelegateSummary): string {\n\tconst parts: string[] = [`delegates ${summary.done}/${summary.total} done`];\n\tif (summary.failed > 0) {\n\t\tparts.push(`${summary.failed} failed`);\n\t}\n\tif (summary.running > 0) {\n\t\tparts.push(`${summary.running} running`);\n\t}\n\treturn parts.join(\", \");\n}\n\nfunction selectDelegateItemsForDisplay(items: SubagentDelegateItem[]): {\n\tvisibleItems: SubagentDelegateItem[];\n\tcompacted: boolean;\n\thiddenDonePending: number;\n\toverflow: number;\n} {\n\tconst compactThreshold = 6;\n\tconst maxRows = 5;\n\tif (items.length > compactThreshold) {\n\t\tconst critical = items.filter((item) => item.status === \"running\" || item.status === \"failed\");\n\t\tconst visibleItems = critical.slice(0, maxRows);\n\t\treturn {\n\t\t\tvisibleItems,\n\t\t\tcompacted: true,\n\t\t\thiddenDonePending: Math.max(0, items.length - critical.length),\n\t\t\toverflow: Math.max(0, critical.length - visibleItems.length),\n\t\t};\n\t}\n\tconst visibleItems = items.slice(0, maxRows);\n\treturn {\n\t\tvisibleItems,\n\t\tcompacted: false,\n\t\thiddenDonePending: 0,\n\t\toverflow: Math.max(0, items.length - visibleItems.length),\n\t};\n}\n\n/**\n * Component that surfaces a running or completed subagent (task tool invocation).\n *\n * Visual structure\n * ----------------\n * Line 1 (header): [subagent] <profile> · <description>\n * Line 2 (status):\n * running → ... <phase>\n * @ <cwd> · tool <active> · tools <done>/<started>\n * delegates <done>/<total> done, <failed> failed\n * delegate <i>/<n> · <description> · (<profile>)\n * delegates list with status markers (compact mode on large runs)\n * flow [x] queued -> [>] running -> [ ] responding\n * done → + <outputSize> output, <duration>, tools <done>/<started>, queue <wait>\n * error → x <errorMessage or \"error\">\n *\n * Theming follows the customMessage palette so the block sits visually alongside\n * other agent-injected messages (task plan, skill invocation, custom messages).\n */\nexport class SubagentMessageComponent extends Box {\n\tconstructor(info: SubagentInfo) {\n\t\tsuper(1, 1, (text) => theme.bg(\"customMessageBg\", text));\n\t\tthis.renderContent(info);\n\t}\n\n\t/**\n\t * Replace the rendered content with updated subagent info.\n\t * Call this whenever status, outputLength, durationMs, or errorMessage changes.\n\t */\n\tupdate(info: SubagentInfo): void {\n\t\tthis.clear();\n\t\tthis.renderContent(info);\n\t}\n\n\toverride invalidate(): void {\n\t\tsuper.invalidate();\n\t}\n\n\tprivate renderContent(info: SubagentInfo): void {\n\t\t// --- Header line ---\n\t\t// [subagent] or [subagent:<agent>] <profile> · <description>\n\t\tconst label = theme.fg(\"customMessageLabel\", `\\x1b[1m${formatSubagentBadge(info.agent)}\\x1b[22m`);\n\t\tconst profileBadge = theme.fg(\"accent\", info.profile);\n\t\tconst dot = theme.fg(\"dim\", \" \\u00B7 \"); // middle dot separator\n\t\tconst description = theme.fg(\"customMessageText\", info.description);\n\t\tthis.addChild(new Text(`${label} ${profileBadge}${dot}${description}`, 0, 0));\n\n\t\tthis.addChild(new Spacer(1));\n\n\t\t// --- Status line ---\n\t\tswitch (info.status) {\n\t\t\t\tcase \"running\": {\n\t\t\t\t// Ellipsis prefix signals in-progress work without a spinner dependency\n\t\t\t\tconst indicator = theme.fg(\"accent\", \"...\");\n\t\t\t\tconst phase = info.phase?.trim() ? info.phase.trim() : \"running\";\n\t\t\t\tconst statusText = theme.fg(\"muted\", ` ${phase}`);\n\t\t\t\tthis.addChild(new Text(`${indicator}${statusText}`, 0, 0));\n\n\t\t\t\tconst metadata: string[] = [];\n\t\t\t\tif (info.cwd) {\n\t\t\t\t\tmetadata.push(theme.fg(\"muted\", `@ ${shortenPath(info.cwd)}`));\n\t\t\t\t}\n\t\t\t\tif (info.activeTool) {\n\t\t\t\t\tmetadata.push(theme.fg(\"customMessageText\", `tool ${info.activeTool}`));\n\t\t\t\t}\n\t\t\t\tconst toolProgress = formatToolProgress(info.toolCallsStarted, info.toolCallsCompleted);\n\t\t\t\tif (toolProgress) {\n\t\t\t\t\tmetadata.push(theme.fg(\"muted\", toolProgress));\n\t\t\t\t}\n\t\t\t\tif (typeof info.assistantMessages === \"number\" && info.assistantMessages > 0) {\n\t\t\t\t\tmetadata.push(theme.fg(\"muted\", `msgs ${info.assistantMessages}`));\n\t\t\t\t}\n\t\t\t\tif (info.agent) {\n\t\t\t\t\tmetadata.push(theme.fg(\"muted\", `agent ${info.agent}`));\n\t\t\t\t}\n\t\t\t\tif (info.isolation && info.isolation !== \"none\") {\n\t\t\t\t\tmetadata.push(theme.fg(\"muted\", `iso ${info.isolation}`));\n\t\t\t\t}\n\t\t\t\t\tif (info.lockKey) {\n\t\t\t\t\t\tmetadata.push(theme.fg(\"muted\", `lock ${info.lockKey}`));\n\t\t\t\t\t}\n\t\t\t\t\tif (metadata.length > 0) {\n\t\t\t\t\t\tthis.addChild(new Text(metadata.join(theme.fg(\"dim\", \" \\u00B7 \")), 0, 0));\n\t\t\t\t\t}\n\t\t\t\t\tconst delegateSummary = summarizeDelegates(info);\n\t\t\t\t\tif (delegateSummary) {\n\t\t\t\t\t\tthis.addChild(new Text(theme.fg(\"accent\", formatDelegateSummary(delegateSummary)), 0, 0));\n\t\t\t\t\t}\n\t\t\t\t\tif (typeof info.delegateIndex === \"number\" && info.delegateIndex > 0) {\n\t\t\t\t\t\tconst delegateTotal =\n\t\t\t\t\t\t\ttypeof info.delegateTotal === \"number\" && info.delegateTotal > 0\n\t\t\t\t\t\t\t\t? info.delegateTotal\n\t\t\t\t\t\t\t\t: info.delegateIndex;\n\t\t\t\t\t\tconst delegateParts: string[] = [theme.fg(\"accent\", `delegate ${info.delegateIndex}/${delegateTotal}`)];\n\t\t\t\t\t\tif (typeof info.delegateDescription === \"string\" && info.delegateDescription.trim().length > 0) {\n\t\t\t\t\t\t\tdelegateParts.push(theme.fg(\"customMessageText\", info.delegateDescription.trim()));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (typeof info.delegateProfile === \"string\" && info.delegateProfile.trim().length > 0) {\n\t\t\t\t\t\t\tdelegateParts.push(theme.fg(\"muted\", `(${info.delegateProfile.trim()})`));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.addChild(new Text(delegateParts.join(theme.fg(\"dim\", \" \\u00B7 \")), 0, 0));\n\t\t\t\t\t}\n\t\t\t\t\tif (Array.isArray(info.delegateItems) && info.delegateItems.length > 0) {\n\t\t\t\t\t\tconst selected = selectDelegateItemsForDisplay(info.delegateItems);\n\t\t\t\t\t\tconst headerParts = [theme.fg(\"muted\", \"delegates\")];\n\t\t\t\t\t\tif (selected.compacted) {\n\t\t\t\t\t\t\theaderParts.push(theme.fg(\"accent\", \"compact\"));\n\t\t\t\t\t\t\tif (selected.hiddenDonePending > 0) {\n\t\t\t\t\t\t\t\theaderParts.push(theme.fg(\"muted\", `hidden ${selected.hiddenDonePending} done/pending`));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.addChild(new Text(headerParts.join(theme.fg(\"dim\", \" \\u00B7 \")), 0, 0));\n\t\t\t\t\t\tif (selected.visibleItems.length === 0 && selected.compacted) {\n\t\t\t\t\t\t\tthis.addChild(new Text(theme.fg(\"muted\", \"no running/failed delegates\"), 0, 0));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor (const item of selected.visibleItems) {\n\t\t\t\t\t\t\tconst marker = (() => {\n\t\t\t\t\t\t\t\tswitch (item.status) {\n\t\t\t\t\t\t\t\t\tcase \"done\":\n\t\t\t\t\t\t\t\t\t\treturn theme.fg(\"success\", \"[x]\");\n\t\t\t\t\t\t\t\t\tcase \"running\":\n\t\t\t\t\t\t\t\t\t\treturn theme.fg(\"accent\", \"[>]\");\n\t\t\t\t\t\t\t\t\tcase \"failed\":\n\t\t\t\t\t\t\t\t\t\treturn theme.fg(\"warning\", \"[!]\");\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\treturn theme.fg(\"muted\", \"[ ]\");\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t})();\n\t\t\t\t\t\t\tconst label = `${item.index}. ${item.description} (${item.profile})`;\n\t\t\t\t\t\t\tconst textColor =\n\t\t\t\t\t\t\t\titem.status === \"done\"\n\t\t\t\t\t\t\t\t\t? \"muted\"\n\t\t\t\t\t\t\t\t\t: item.status === \"running\"\n\t\t\t\t\t\t\t\t\t\t? \"customMessageText\"\n\t\t\t\t\t\t\t\t\t\t: item.status === \"failed\"\n\t\t\t\t\t\t\t\t\t\t\t? \"warning\"\n\t\t\t\t\t\t\t\t\t\t\t: \"muted\";\n\t\t\t\t\t\t\tthis.addChild(new Text(`${marker} ${theme.fg(textColor, label)}`, 0, 0));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (selected.overflow > 0) {\n\t\t\t\t\t\t\tthis.addChild(new Text(theme.fg(\"muted\", `... +${selected.overflow} more`), 0, 0));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (info.phaseState) {\n\t\t\t\t\t\tthis.addChild(new Text(renderPhaseTimeline(info.phaseState), 0, 0));\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\tcase \"done\": {\n\t\t\t\tconst checkmark = theme.fg(\"success\", \"+\");\n\t\t\t\tconst parts: string[] = [];\n\t\t\t\tif (info.outputLength !== undefined) {\n\t\t\t\t\tparts.push(theme.fg(\"customMessageText\", formatBytes(info.outputLength)) + theme.fg(\"muted\", \" output\"));\n\t\t\t\t}\n\t\t\t\tif (info.durationMs !== undefined) {\n\t\t\t\t\tparts.push(theme.fg(\"muted\", formatDuration(info.durationMs)));\n\t\t\t\t}\n\t\t\t\tconst toolProgress = formatToolProgress(info.toolCallsStarted, info.toolCallsCompleted);\n\t\t\t\tif (toolProgress) {\n\t\t\t\t\tparts.push(theme.fg(\"muted\", toolProgress));\n\t\t\t\t}\n\t\t\t\t\tconst delegateSummary = summarizeDelegates(info);\n\t\t\t\t\tif (delegateSummary) {\n\t\t\t\t\t\tparts.push(theme.fg(\"muted\", `delegates ${delegateSummary.done}/${delegateSummary.total} done`));\n\t\t\t\t\t\tif (delegateSummary.failed > 0) {\n\t\t\t\t\t\t\tparts.push(theme.fg(\"warning\", `${delegateSummary.failed} failed`));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\tif (typeof info.waitMs === \"number\" && info.waitMs > 0) {\n\t\t\t\t\tparts.push(theme.fg(\"muted\", `queue ${formatDuration(info.waitMs)}`));\n\t\t\t\t}\n\t\t\t\tconst detail = parts.length > 0 ? \" \" + parts.join(theme.fg(\"dim\", \", \")) : \"\";\n\t\t\t\tthis.addChild(new Text(`${checkmark}${detail}`, 0, 0));\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase \"error\": {\n\t\t\t\tconst cross = theme.fg(\"error\", \"x\");\n\t\t\t\tconst message = info.errorMessage ? info.errorMessage : \"error\";\n\t\t\t\tconst errorText = theme.fg(\"error\", ` ${message}`);\n\t\t\t\tthis.addChild(new Text(`${cross}${errorText}`, 0, 0));\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n}\n"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Box } from "@mariozechner/pi-tui";
|
|
2
|
+
import type { TaskPlanSnapshot } from "../../../core/task-plan.js";
|
|
3
|
+
export declare class TaskPlanMessageComponent extends Box {
|
|
4
|
+
private expanded;
|
|
5
|
+
private snapshot;
|
|
6
|
+
constructor(snapshot: TaskPlanSnapshot);
|
|
7
|
+
setExpanded(expanded: boolean): void;
|
|
8
|
+
invalidate(): void;
|
|
9
|
+
private statusLabel;
|
|
10
|
+
private renderContent;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=task-plan-message.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-plan-message.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/task-plan-message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAgB,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAInE,qBAAa,wBAAyB,SAAQ,GAAG;IAChD,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAmB;gBAEvB,QAAQ,EAAE,gBAAgB;IAMtC,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI;IAO3B,UAAU,IAAI,IAAI;IAK3B,OAAO,CAAC,WAAW;IAcnB,OAAO,CAAC,aAAa;CAsCrB"}
|