catui-agent 1.0.0-beta.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/LICENSE +674 -0
- package/README.md +267 -0
- package/dist/build-meta.json +6 -0
- package/dist/builtin-extensions.d.ts +47 -0
- package/dist/builtin-extensions.js +1 -0
- package/dist/catui-defaults.d.ts +555 -0
- package/dist/catui-defaults.js +22 -0
- package/dist/cli/args.d.ts +70 -0
- package/dist/cli/args.js +158 -0
- package/dist/cli/config-selector.d.ts +10 -0
- package/dist/cli/config-selector.js +1 -0
- package/dist/cli/file-processor.d.ts +11 -0
- package/dist/cli/file-processor.js +6 -0
- package/dist/cli/list-models.d.ts +12 -0
- package/dist/cli/list-models.js +2 -0
- package/dist/cli/session-picker.d.ts +5 -0
- package/dist/cli/session-picker.js +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +2 -0
- package/dist/config.d.ts +103 -0
- package/dist/config.js +1 -0
- package/dist/core/agent-dir/agent-dir-context.d.ts +60 -0
- package/dist/core/agent-dir/agent-dir-context.js +1 -0
- package/dist/core/agent-dir/agent-metadata.d.ts +48 -0
- package/dist/core/agent-dir/agent-metadata.js +1 -0
- package/dist/core/agent-dir/migration-tool.d.ts +40 -0
- package/dist/core/agent-dir/migration-tool.js +7 -0
- package/dist/core/export-html/AGENT.md +12 -0
- package/dist/core/export-html/ansi-to-html.d.ts +9 -0
- package/dist/core/export-html/ansi-to-html.js +2 -0
- package/dist/core/export-html/index.d.ts +39 -0
- package/dist/core/export-html/index.js +2 -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 +66 -0
- package/dist/core/export-html/tool-renderer.d.ts +28 -0
- package/dist/core/export-html/tool-renderer.js +1 -0
- package/dist/core/export-html/vendor/highlight.min.js +4 -0
- package/dist/core/export-html/vendor/marked.min.js +56 -0
- package/dist/core/extensions-host/index.d.ts +13 -0
- package/dist/core/extensions-host/index.js +1 -0
- package/dist/core/extensions-host/loader.d.ts +21 -0
- package/dist/core/extensions-host/loader.js +1 -0
- package/dist/core/extensions-host/runner.d.ts +233 -0
- package/dist/core/extensions-host/runner.js +3 -0
- package/dist/core/extensions-host/types.d.ts +1079 -0
- package/dist/core/extensions-host/types.js +1 -0
- package/dist/core/extensions-host/wrapper.d.ts +29 -0
- package/dist/core/extensions-host/wrapper.js +2 -0
- package/dist/core/index.d.ts +17 -0
- package/dist/core/index.js +1 -0
- package/dist/core/lib/agent-core/src/agent-loop-continuations.d.ts +17 -0
- package/dist/core/lib/agent-core/src/agent-loop-continuations.js +1 -0
- package/dist/core/lib/agent-core/src/agent-loop-stream-events.d.ts +19 -0
- package/dist/core/lib/agent-core/src/agent-loop-stream-events.js +1 -0
- package/dist/core/lib/agent-core/src/agent-loop-tool-results.d.ts +10 -0
- package/dist/core/lib/agent-core/src/agent-loop-tool-results.js +3 -0
- package/dist/core/lib/agent-core/src/agent-loop-tool-summaries.d.ts +22 -0
- package/dist/core/lib/agent-core/src/agent-loop-tool-summaries.js +1 -0
- package/dist/core/lib/agent-core/src/agent-loop.d.ts +26 -0
- package/dist/core/lib/agent-core/src/agent-loop.js +4 -0
- package/dist/core/lib/agent-core/src/agent-run-result.d.ts +9 -0
- package/dist/core/lib/agent-core/src/agent-run-result.js +1 -0
- package/dist/core/lib/agent-core/src/agent.d.ts +215 -0
- package/dist/core/lib/agent-core/src/agent.js +1 -0
- package/dist/core/lib/agent-core/src/errors.d.ts +62 -0
- package/dist/core/lib/agent-core/src/errors.js +1 -0
- package/dist/core/lib/agent-core/src/index.d.ts +14 -0
- package/dist/core/lib/agent-core/src/index.js +1 -0
- package/dist/core/lib/agent-core/src/proxy.d.ts +91 -0
- package/dist/core/lib/agent-core/src/proxy.js +2 -0
- package/dist/core/lib/agent-core/src/structured-adaptive-agent-loop.d.ts +15 -0
- package/dist/core/lib/agent-core/src/structured-adaptive-agent-loop.js +2 -0
- package/dist/core/lib/agent-core/src/structured-adaptive-streaming-tool-executor.d.ts +33 -0
- package/dist/core/lib/agent-core/src/structured-adaptive-streaming-tool-executor.js +1 -0
- package/dist/core/lib/agent-core/src/structured-adaptive-tool-orchestration.d.ts +35 -0
- package/dist/core/lib/agent-core/src/structured-adaptive-tool-orchestration.js +3 -0
- package/dist/core/lib/agent-core/src/types.d.ts +417 -0
- package/dist/core/lib/agent-core/src/types.js +1 -0
- package/dist/core/lib/ai/src/api-registry.d.ts +27 -0
- package/dist/core/lib/ai/src/api-registry.js +1 -0
- package/dist/core/lib/ai/src/config-path.d.ts +1 -0
- package/dist/core/lib/ai/src/config-path.js +1 -0
- package/dist/core/lib/ai/src/debug-logger.d.ts +94 -0
- package/dist/core/lib/ai/src/debug-logger.js +4 -0
- package/dist/core/lib/ai/src/env-api-keys.d.ts +8 -0
- package/dist/core/lib/ai/src/env-api-keys.js +1 -0
- package/dist/core/lib/ai/src/env.d.ts +7 -0
- package/dist/core/lib/ai/src/env.js +1 -0
- package/dist/core/lib/ai/src/events.d.ts +8 -0
- package/dist/core/lib/ai/src/events.js +1 -0
- package/dist/core/lib/ai/src/index.d.ts +27 -0
- package/dist/core/lib/ai/src/index.js +1 -0
- package/dist/core/lib/ai/src/json.d.ts +7 -0
- package/dist/core/lib/ai/src/json.js +1 -0
- package/dist/core/lib/ai/src/models.d.ts +31 -0
- package/dist/core/lib/ai/src/models.generated.d.ts +15315 -0
- package/dist/core/lib/ai/src/models.generated.js +1 -0
- package/dist/core/lib/ai/src/models.js +1 -0
- package/dist/core/lib/ai/src/overflow.d.ts +7 -0
- package/dist/core/lib/ai/src/overflow.js +1 -0
- package/dist/core/lib/ai/src/providers/amazon-bedrock.d.ts +20 -0
- package/dist/core/lib/ai/src/providers/amazon-bedrock.js +1 -0
- package/dist/core/lib/ai/src/providers/anthropic.d.ts +38 -0
- package/dist/core/lib/ai/src/providers/anthropic.js +2 -0
- package/dist/core/lib/ai/src/providers/azure-openai-responses.d.ts +21 -0
- package/dist/core/lib/ai/src/providers/azure-openai-responses.js +1 -0
- package/dist/core/lib/ai/src/providers/github-copilot-headers.d.ts +13 -0
- package/dist/core/lib/ai/src/providers/github-copilot-headers.js +1 -0
- package/dist/core/lib/ai/src/providers/google-gemini-cli.d.ts +79 -0
- package/dist/core/lib/ai/src/providers/google-gemini-cli.js +2 -0
- package/dist/core/lib/ai/src/providers/google-shared.d.ts +70 -0
- package/dist/core/lib/ai/src/providers/google-shared.js +2 -0
- package/dist/core/lib/ai/src/providers/google-vertex.d.ts +20 -0
- package/dist/core/lib/ai/src/providers/google-vertex.js +1 -0
- package/dist/core/lib/ai/src/providers/google.d.ts +18 -0
- package/dist/core/lib/ai/src/providers/google.js +1 -0
- package/dist/core/lib/ai/src/providers/openai-codex-responses.d.ts +8 -0
- package/dist/core/lib/ai/src/providers/openai-codex-responses.js +7 -0
- package/dist/core/lib/ai/src/providers/openai-completions.d.ts +20 -0
- package/dist/core/lib/ai/src/providers/openai-completions.js +6 -0
- package/dist/core/lib/ai/src/providers/openai-responses-shared.d.ts +22 -0
- package/dist/core/lib/ai/src/providers/openai-responses-shared.js +10 -0
- package/dist/core/lib/ai/src/providers/openai-responses.d.ts +19 -0
- package/dist/core/lib/ai/src/providers/openai-responses.js +1 -0
- package/dist/core/lib/ai/src/providers/register-builtins.d.ts +8 -0
- package/dist/core/lib/ai/src/providers/register-builtins.js +1 -0
- package/dist/core/lib/ai/src/providers/simple-options.d.ts +13 -0
- package/dist/core/lib/ai/src/providers/simple-options.js +1 -0
- package/dist/core/lib/ai/src/providers/transform-messages.d.ts +13 -0
- package/dist/core/lib/ai/src/providers/transform-messages.js +1 -0
- package/dist/core/lib/ai/src/registry.d.ts +8 -0
- package/dist/core/lib/ai/src/registry.js +1 -0
- package/dist/core/lib/ai/src/schema.d.ts +10 -0
- package/dist/core/lib/ai/src/schema.js +1 -0
- package/dist/core/lib/ai/src/stream.d.ts +33 -0
- package/dist/core/lib/ai/src/stream.js +1 -0
- package/dist/core/lib/ai/src/types.d.ts +331 -0
- package/dist/core/lib/ai/src/types.js +0 -0
- package/dist/core/lib/ai/src/utils/event-stream-types.d.ts +12 -0
- package/dist/core/lib/ai/src/utils/event-stream-types.js +0 -0
- package/dist/core/lib/ai/src/utils/event-stream.d.ts +31 -0
- package/dist/core/lib/ai/src/utils/event-stream.js +1 -0
- package/dist/core/lib/ai/src/utils/http-proxy.d.ts +13 -0
- package/dist/core/lib/ai/src/utils/http-proxy.js +1 -0
- package/dist/core/lib/ai/src/utils/json-parse.d.ts +14 -0
- package/dist/core/lib/ai/src/utils/json-parse.js +1 -0
- package/dist/core/lib/ai/src/utils/oauth/anthropic.d.ts +22 -0
- package/dist/core/lib/ai/src/utils/oauth/anthropic.js +1 -0
- package/dist/core/lib/ai/src/utils/oauth/decode-credential.d.ts +12 -0
- package/dist/core/lib/ai/src/utils/oauth/decode-credential.js +1 -0
- package/dist/core/lib/ai/src/utils/oauth/github-copilot.d.ts +35 -0
- package/dist/core/lib/ai/src/utils/oauth/github-copilot.js +1 -0
- package/dist/core/lib/ai/src/utils/oauth/google-antigravity.d.ts +31 -0
- package/dist/core/lib/ai/src/utils/oauth/google-antigravity.js +1 -0
- package/dist/core/lib/ai/src/utils/oauth/google-gemini-cli.d.ts +31 -0
- package/dist/core/lib/ai/src/utils/oauth/google-gemini-cli.js +1 -0
- package/dist/core/lib/ai/src/utils/oauth/index.d.ts +60 -0
- package/dist/core/lib/ai/src/utils/oauth/index.js +1 -0
- package/dist/core/lib/ai/src/utils/oauth/openai-codex.d.ts +39 -0
- package/dist/core/lib/ai/src/utils/oauth/openai-codex.js +11 -0
- package/dist/core/lib/ai/src/utils/oauth/pkce.d.ts +18 -0
- package/dist/core/lib/ai/src/utils/oauth/pkce.js +1 -0
- package/dist/core/lib/ai/src/utils/oauth/types.d.ts +52 -0
- package/dist/core/lib/ai/src/utils/oauth/types.js +0 -0
- package/dist/core/lib/ai/src/utils/overflow.d.ts +57 -0
- package/dist/core/lib/ai/src/utils/overflow.js +1 -0
- package/dist/core/lib/ai/src/utils/sanitize-unicode.d.ts +16 -0
- package/dist/core/lib/ai/src/utils/sanitize-unicode.js +1 -0
- package/dist/core/lib/ai/src/utils/typebox-helpers.d.ts +22 -0
- package/dist/core/lib/ai/src/utils/typebox-helpers.js +1 -0
- package/dist/core/lib/ai/src/utils/validation.d.ts +23 -0
- package/dist/core/lib/ai/src/utils/validation.js +6 -0
- package/dist/core/lib/tui/src/autocomplete.d.ts +62 -0
- package/dist/core/lib/tui/src/autocomplete.js +2 -0
- package/dist/core/lib/tui/src/components/box.d.ts +27 -0
- package/dist/core/lib/tui/src/components/box.js +1 -0
- package/dist/core/lib/tui/src/components/cached-container.d.ts +42 -0
- package/dist/core/lib/tui/src/components/cached-container.js +1 -0
- package/dist/core/lib/tui/src/components/cancellable-loader.d.ts +27 -0
- package/dist/core/lib/tui/src/components/cancellable-loader.js +1 -0
- package/dist/core/lib/tui/src/components/editor.d.ts +222 -0
- package/dist/core/lib/tui/src/components/editor.js +21 -0
- package/dist/core/lib/tui/src/components/image.d.ts +33 -0
- package/dist/core/lib/tui/src/components/image.js +1 -0
- package/dist/core/lib/tui/src/components/input.d.ts +42 -0
- package/dist/core/lib/tui/src/components/input.js +2 -0
- package/dist/core/lib/tui/src/components/loader.d.ts +26 -0
- package/dist/core/lib/tui/src/components/loader.js +1 -0
- package/dist/core/lib/tui/src/components/markdown.d.ts +100 -0
- package/dist/core/lib/tui/src/components/markdown.js +7 -0
- package/dist/core/lib/tui/src/components/select-list.d.ts +37 -0
- package/dist/core/lib/tui/src/components/select-list.js +1 -0
- package/dist/core/lib/tui/src/components/settings-list.d.ts +55 -0
- package/dist/core/lib/tui/src/components/settings-list.js +1 -0
- package/dist/core/lib/tui/src/components/spacer.d.ts +17 -0
- package/dist/core/lib/tui/src/components/spacer.js +1 -0
- package/dist/core/lib/tui/src/components/text.d.ts +24 -0
- package/dist/core/lib/tui/src/components/text.js +1 -0
- package/dist/core/lib/tui/src/components/truncated-text.d.ts +18 -0
- package/dist/core/lib/tui/src/components/truncated-text.js +2 -0
- package/dist/core/lib/tui/src/editor-component.d.ts +51 -0
- package/dist/core/lib/tui/src/editor-component.js +0 -0
- package/dist/core/lib/tui/src/fuzzy.d.ts +32 -0
- package/dist/core/lib/tui/src/fuzzy.js +1 -0
- package/dist/core/lib/tui/src/index.d.ts +29 -0
- package/dist/core/lib/tui/src/index.js +1 -0
- package/dist/core/lib/tui/src/keybindings.d.ts +44 -0
- package/dist/core/lib/tui/src/keybindings.js +1 -0
- package/dist/core/lib/tui/src/keys.d.ts +149 -0
- package/dist/core/lib/tui/src/keys.js +5 -0
- package/dist/core/lib/tui/src/kill-ring.d.ts +33 -0
- package/dist/core/lib/tui/src/kill-ring.js +1 -0
- package/dist/core/lib/tui/src/stdin-buffer.d.ts +38 -0
- package/dist/core/lib/tui/src/stdin-buffer.js +1 -0
- package/dist/core/lib/tui/src/terminal-image.d.ts +73 -0
- package/dist/core/lib/tui/src/terminal-image.js +1 -0
- package/dist/core/lib/tui/src/terminal.d.ts +86 -0
- package/dist/core/lib/tui/src/terminal.js +1 -0
- package/dist/core/lib/tui/src/tui.d.ts +220 -0
- package/dist/core/lib/tui/src/tui.js +12 -0
- package/dist/core/lib/tui/src/undo-stack.d.ts +22 -0
- package/dist/core/lib/tui/src/undo-stack.js +1 -0
- package/dist/core/lib/tui/src/utils.d.ts +83 -0
- package/dist/core/lib/tui/src/utils.js +2 -0
- package/dist/core/mcp/figma-auth.d.ts +21 -0
- package/dist/core/mcp/figma-auth.js +22 -0
- package/dist/core/mcp/index.d.ts +11 -0
- package/dist/core/mcp/index.js +1 -0
- package/dist/core/mcp/mcp-adapter.d.ts +21 -0
- package/dist/core/mcp/mcp-adapter.js +3 -0
- package/dist/core/mcp/mcp-client.d.ts +91 -0
- package/dist/core/mcp/mcp-client.js +6 -0
- package/dist/core/mcp/mcp-config.d.ts +55 -0
- package/dist/core/mcp/mcp-config.js +1 -0
- package/dist/core/mcp/mcp-guidance.d.ts +52 -0
- package/dist/core/mcp/mcp-guidance.js +54 -0
- package/dist/core/mcp/mcp-manager.d.ts +51 -0
- package/dist/core/mcp/mcp-manager.js +1 -0
- package/dist/core/mcp/mcp-types.d.ts +62 -0
- package/dist/core/mcp/mcp-types.js +0 -0
- package/dist/core/messages.d.ts +77 -0
- package/dist/core/messages.js +17 -0
- package/dist/core/model/custom-providers.d.ts +34 -0
- package/dist/core/model/custom-providers.js +1 -0
- package/dist/core/model/discovery-cache.d.ts +65 -0
- package/dist/core/model/discovery-cache.js +1 -0
- package/dist/core/model/discovery-cache.test.d.ts +7 -0
- package/dist/core/model/discovery-cache.test.js +1 -0
- package/dist/core/model/discovery.d.ts +79 -0
- package/dist/core/model/discovery.js +1 -0
- package/dist/core/model/discovery.test.d.ts +7 -0
- package/dist/core/model/discovery.test.js +1 -0
- package/dist/core/model/index.d.ts +10 -0
- package/dist/core/model/index.js +1 -0
- package/dist/core/model/known-models.d.ts +65 -0
- package/dist/core/model/known-models.generated.d.ts +2 -0
- package/dist/core/model/known-models.generated.js +1 -0
- package/dist/core/model/known-models.js +1 -0
- package/dist/core/model/switcher.d.ts +80 -0
- package/dist/core/model/switcher.js +1 -0
- package/dist/core/model-registry.d.ts +186 -0
- package/dist/core/model-registry.js +9 -0
- package/dist/core/model-resolver.d.ts +106 -0
- package/dist/core/model-resolver.js +1 -0
- package/dist/core/package-manager.d.ts +156 -0
- package/dist/core/package-manager.js +3 -0
- package/dist/core/persona/persona-manager.d.ts +35 -0
- package/dist/core/persona/persona-manager.js +5 -0
- package/dist/core/platform/abort-slot.d.ts +26 -0
- package/dist/core/platform/abort-slot.js +1 -0
- package/dist/core/platform/config/auth-storage.d.ts +126 -0
- package/dist/core/platform/config/auth-storage.js +1 -0
- package/dist/core/platform/config/defaults.d.ts +8 -0
- package/dist/core/platform/config/defaults.js +1 -0
- package/dist/core/platform/config/diagnostics.d.ts +20 -0
- package/dist/core/platform/config/diagnostics.js +0 -0
- package/dist/core/platform/config/resolve-config-value.d.ts +12 -0
- package/dist/core/platform/config/resolve-config-value.js +1 -0
- package/dist/core/platform/config/resource-loader.d.ts +188 -0
- package/dist/core/platform/config/resource-loader.js +2 -0
- package/dist/core/platform/config/settings-manager.d.ts +314 -0
- package/dist/core/platform/config/settings-manager.js +1 -0
- package/dist/core/platform/exec/bash-executor.d.ts +41 -0
- package/dist/core/platform/exec/bash-executor.js +1 -0
- package/dist/core/platform/exec/exec.d.ts +25 -0
- package/dist/core/platform/exec/exec.js +1 -0
- package/dist/core/platform/i18n/index.d.ts +26 -0
- package/dist/core/platform/i18n/index.js +1 -0
- package/dist/core/platform/i18n/messages.d.ts +56 -0
- package/dist/core/platform/i18n/messages.js +1 -0
- package/dist/core/platform/i18n/messages.zh.d.ts +56 -0
- package/dist/core/platform/i18n/messages.zh.js +1 -0
- package/dist/core/platform/i18n/slash-commands.d.ts +53 -0
- package/dist/core/platform/i18n/slash-commands.js +1 -0
- package/dist/core/platform/i18n/slash-commands.zh.d.ts +53 -0
- package/dist/core/platform/i18n/slash-commands.zh.js +1 -0
- package/dist/core/platform/i18n/themes.d.ts +11 -0
- package/dist/core/platform/i18n/themes.js +1 -0
- package/dist/core/platform/i18n/themes.zh.d.ts +11 -0
- package/dist/core/platform/i18n/themes.zh.js +1 -0
- package/dist/core/platform/keybindings.d.ts +61 -0
- package/dist/core/platform/keybindings.js +1 -0
- package/dist/core/platform/listeners.d.ts +21 -0
- package/dist/core/platform/listeners.js +1 -0
- package/dist/core/platform/telemetry/batching-dispatcher.d.ts +41 -0
- package/dist/core/platform/telemetry/batching-dispatcher.js +1 -0
- package/dist/core/platform/telemetry/build-meta.d.ts +12 -0
- package/dist/core/platform/telemetry/build-meta.js +1 -0
- package/dist/core/platform/telemetry/caller-context.d.ts +32 -0
- package/dist/core/platform/telemetry/caller-context.js +1 -0
- package/dist/core/platform/telemetry/credentials.d.ts +27 -0
- package/dist/core/platform/telemetry/credentials.js +1 -0
- package/dist/core/platform/telemetry/ext-events.d.ts +89 -0
- package/dist/core/platform/telemetry/ext-events.js +1 -0
- package/dist/core/platform/telemetry/index.d.ts +13 -0
- package/dist/core/platform/telemetry/index.js +1 -0
- package/dist/core/platform/telemetry/insforge-base.d.ts +37 -0
- package/dist/core/platform/telemetry/insforge-base.js +1 -0
- package/dist/core/platform/telemetry/types.d.ts +33 -0
- package/dist/core/platform/telemetry/types.js +0 -0
- package/dist/core/platform/timings.d.ts +2 -0
- package/dist/core/platform/timings.js +3 -0
- package/dist/core/platform/utils/logger.d.ts +75 -0
- package/dist/core/platform/utils/logger.js +1 -0
- package/dist/core/platform/utils/shell.d.ts +25 -0
- package/dist/core/platform/utils/shell.js +9 -0
- package/dist/core/platform/utils/sleep.d.ts +7 -0
- package/dist/core/platform/utils/sleep.js +1 -0
- package/dist/core/platform/utils/tools-manager.d.ts +19 -0
- package/dist/core/platform/utils/tools-manager.js +1 -0
- package/dist/core/prompt/prompt-templates.d.ts +49 -0
- package/dist/core/prompt/prompt-templates.js +2 -0
- package/dist/core/prompt/system-prompt.d.ts +24 -0
- package/dist/core/prompt/system-prompt.js +139 -0
- package/dist/core/runtime/agent-session.d.ts +676 -0
- package/dist/core/runtime/agent-session.js +15 -0
- package/dist/core/runtime/bash-runner.d.ts +56 -0
- package/dist/core/runtime/bash-runner.js +2 -0
- package/dist/core/runtime/catui-agent.d.ts +182 -0
- package/dist/core/runtime/catui-agent.js +1 -0
- package/dist/core/runtime/compaction-controller.d.ts +43 -0
- package/dist/core/runtime/compaction-controller.js +1 -0
- package/dist/core/runtime/default-tools.d.ts +9 -0
- package/dist/core/runtime/default-tools.js +1 -0
- package/dist/core/runtime/event-bridge.d.ts +21 -0
- package/dist/core/runtime/event-bridge.js +1 -0
- package/dist/core/runtime/event-bus.d.ts +8 -0
- package/dist/core/runtime/event-bus.js +1 -0
- package/dist/core/runtime/export-bridge.d.ts +23 -0
- package/dist/core/runtime/export-bridge.js +1 -0
- package/dist/core/runtime/extension-core-bindings.d.ts +46 -0
- package/dist/core/runtime/extension-core-bindings.js +3 -0
- package/dist/core/runtime/model-controller.d.ts +84 -0
- package/dist/core/runtime/model-controller.js +1 -0
- package/dist/core/runtime/model-cycle.d.ts +20 -0
- package/dist/core/runtime/model-cycle.js +1 -0
- package/dist/core/runtime/prompt-assembly.d.ts +20 -0
- package/dist/core/runtime/prompt-assembly.js +3 -0
- package/dist/core/runtime/retry-coordinator.d.ts +84 -0
- package/dist/core/runtime/retry-coordinator.js +1 -0
- package/dist/core/runtime/sdk.d.ts +163 -0
- package/dist/core/runtime/sdk.js +1 -0
- package/dist/core/runtime/session-context.d.ts +155 -0
- package/dist/core/runtime/session-context.js +0 -0
- package/dist/core/runtime/session-lifecycle-controller.d.ts +42 -0
- package/dist/core/runtime/session-lifecycle-controller.js +1 -0
- package/dist/core/runtime/session-tree-controller.d.ts +40 -0
- package/dist/core/runtime/session-tree-controller.js +1 -0
- package/dist/core/runtime/slash-command-catalog.d.ts +27 -0
- package/dist/core/runtime/slash-command-catalog.js +1 -0
- package/dist/core/runtime/thinking-levels.d.ts +31 -0
- package/dist/core/runtime/thinking-levels.js +1 -0
- package/dist/core/runtime/tool-runtime-controller.d.ts +35 -0
- package/dist/core/runtime/tool-runtime-controller.js +1 -0
- package/dist/core/runtime/turn-context.d.ts +52 -0
- package/dist/core/runtime/turn-context.js +1 -0
- package/dist/core/session/compaction/branch-summarization.d.ts +85 -0
- package/dist/core/session/compaction/branch-summarization.js +38 -0
- package/dist/core/session/compaction/compaction.d.ts +120 -0
- package/dist/core/session/compaction/compaction.js +104 -0
- package/dist/core/session/compaction/index.d.ts +9 -0
- package/dist/core/session/compaction/index.js +1 -0
- package/dist/core/session/compaction/utils.d.ts +37 -0
- package/dist/core/session/compaction/utils.js +17 -0
- package/dist/core/session/session-manager.d.ts +359 -0
- package/dist/core/session/session-manager.js +14 -0
- package/dist/core/skills.d.ts +57 -0
- package/dist/core/skills.js +4 -0
- package/dist/core/slash-commands.d.ts +36 -0
- package/dist/core/slash-commands.js +1 -0
- package/dist/core/soul-integration.d.ts +77 -0
- package/dist/core/soul-integration.js +1 -0
- package/dist/core/soul-options-contract.d.ts +10 -0
- package/dist/core/soul-options-contract.js +0 -0
- package/dist/core/sub-agent/agent-definition-loader.d.ts +96 -0
- package/dist/core/sub-agent/agent-definition-loader.js +2 -0
- package/dist/core/sub-agent/agent-definition.d.ts +162 -0
- package/dist/core/sub-agent/agent-definition.js +6 -0
- package/dist/core/sub-agent/agent-handoff-safety.d.ts +39 -0
- package/dist/core/sub-agent/agent-handoff-safety.js +1 -0
- package/dist/core/sub-agent/agent-input-output.d.ts +143 -0
- package/dist/core/sub-agent/agent-input-output.js +1 -0
- package/dist/core/sub-agent/agent-output-persistence.d.ts +43 -0
- package/dist/core/sub-agent/agent-output-persistence.js +3 -0
- package/dist/core/sub-agent/agent-prompt-builder.d.ts +37 -0
- package/dist/core/sub-agent/agent-prompt-builder.js +2 -0
- package/dist/core/sub-agent/agent-registry.d.ts +145 -0
- package/dist/core/sub-agent/agent-registry.js +1 -0
- package/dist/core/sub-agent/agent-result-extractor.d.ts +28 -0
- package/dist/core/sub-agent/agent-result-extractor.js +3 -0
- package/dist/core/sub-agent/agent-telemetry.d.ts +71 -0
- package/dist/core/sub-agent/agent-telemetry.js +1 -0
- package/dist/core/sub-agent/agent-tool-filter.d.ts +89 -0
- package/dist/core/sub-agent/agent-tool-filter.js +2 -0
- package/dist/core/sub-agent/agent-tool.d.ts +69 -0
- package/dist/core/sub-agent/agent-tool.js +11 -0
- package/dist/core/sub-agent/index.d.ts +26 -0
- package/dist/core/sub-agent/index.js +1 -0
- package/dist/core/sub-agent/send-message-tool.d.ts +33 -0
- package/dist/core/sub-agent/send-message-tool.js +2 -0
- package/dist/core/sub-agent/sub-agent-backend.d.ts +26 -0
- package/dist/core/sub-agent/sub-agent-backend.js +7 -0
- package/dist/core/sub-agent/sub-agent-runtime.d.ts +34 -0
- package/dist/core/sub-agent/sub-agent-runtime.js +1 -0
- package/dist/core/sub-agent/sub-agent-types.d.ts +138 -0
- package/dist/core/sub-agent/sub-agent-types.js +0 -0
- package/dist/core/sub-agent/subprocess-backend.d.ts +35 -0
- package/dist/core/sub-agent/subprocess-backend.js +1 -0
- package/dist/core/sub-agent/subprocess-worker.d.ts +12 -0
- package/dist/core/sub-agent/subprocess-worker.js +1 -0
- package/dist/core/theme-contract.d.ts +32 -0
- package/dist/core/theme-contract.js +0 -0
- package/dist/core/tools/bash.d.ts +73 -0
- package/dist/core/tools/bash.js +21 -0
- package/dist/core/tools/edit-diff.d.ts +58 -0
- package/dist/core/tools/edit-diff.js +16 -0
- package/dist/core/tools/edit.d.ts +46 -0
- package/dist/core/tools/edit.js +1 -0
- package/dist/core/tools/file-state-cache.d.ts +30 -0
- package/dist/core/tools/file-state-cache.js +1 -0
- package/dist/core/tools/find.d.ts +46 -0
- package/dist/core/tools/find.js +8 -0
- package/dist/core/tools/grep.d.ts +58 -0
- package/dist/core/tools/grep.js +13 -0
- package/dist/core/tools/index.d.ts +116 -0
- package/dist/core/tools/index.js +1 -0
- package/dist/core/tools/input-validation.d.ts +13 -0
- package/dist/core/tools/input-validation.js +1 -0
- package/dist/core/tools/ls.d.ts +45 -0
- package/dist/core/tools/ls.js +4 -0
- package/dist/core/tools/orchestrator.d.ts +76 -0
- package/dist/core/tools/orchestrator.js +1 -0
- package/dist/core/tools/path-utils.d.ts +7 -0
- package/dist/core/tools/path-utils.js +1 -0
- package/dist/core/tools/pdf-extract.d.ts +11 -0
- package/dist/core/tools/pdf-extract.js +1 -0
- package/dist/core/tools/read.d.ts +46 -0
- package/dist/core/tools/read.js +11 -0
- package/dist/core/tools/source.d.ts +78 -0
- package/dist/core/tools/source.js +1 -0
- package/dist/core/tools/time.d.ts +19 -0
- package/dist/core/tools/time.js +2 -0
- package/dist/core/tools/truncate.d.ts +66 -0
- package/dist/core/tools/truncate.js +5 -0
- package/dist/core/tools/write-guard.d.ts +2 -0
- package/dist/core/tools/write-guard.js +1 -0
- package/dist/core/tools/write.d.ts +36 -0
- package/dist/core/tools/write.js +1 -0
- package/dist/core/workspace/index.d.ts +8 -0
- package/dist/core/workspace/index.js +1 -0
- package/dist/core/workspace/worktree-manager.d.ts +73 -0
- package/dist/core/workspace/worktree-manager.js +3 -0
- package/dist/extensions/builtin/AGENT.md +115 -0
- package/dist/extensions/builtin/ask-user-question/ask-user-question-tool.d.ts +9 -0
- package/dist/extensions/builtin/ask-user-question/ask-user-question-tool.js +4 -0
- package/dist/extensions/builtin/ask-user-question/index.d.ts +8 -0
- package/dist/extensions/builtin/ask-user-question/index.js +1 -0
- package/dist/extensions/builtin/ask-user-question/prompt.d.ts +14 -0
- package/dist/extensions/builtin/ask-user-question/prompt.js +30 -0
- package/dist/extensions/builtin/ask-user-question/types.d.ts +69 -0
- package/dist/extensions/builtin/ask-user-question/types.js +1 -0
- package/dist/extensions/builtin/browser/AGENT.md +17 -0
- package/dist/extensions/builtin/browser/agent-workspace/agent_helpers.py +12 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/amazon/product-search.md +198 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/archive-org/scraping.md +341 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/arxiv/scraping.md +311 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/arxiv-bulk/scraping.md +333 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/atlas/overview.md +70 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/booking-com/scraping.md +578 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/capterra/scraping.md +440 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/centilebrain/generate-estimates.md +110 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/coingecko/scraping.md +325 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/coinmarketcap/scraping.md +463 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/coursera/scraping.md +360 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/craigslist/scraping.md +390 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/crossref/scraping.md +568 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/dev-to/scraping.md +323 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/duckduckgo/scraping.md +349 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/ebay/scraping.md +435 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/etsy/scraping.md +506 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/eventbrite/scraping.md +363 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/expedia/automation.md +168 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/facebook/groups.md +236 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/facebook/pages.md +295 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/framer/editor.md +108 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/fred/scraping.md +493 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/g2/scraping.md +580 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/genius/scraping.md +511 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/github/repo-actions.md +65 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/github/scraping.md +184 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/glassdoor/scraping.md +543 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/gmail/compose.md +122 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/goodreads/scraping.md +461 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/gutenberg/scraping.md +383 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/hackernews/scraping.md +243 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/howlongtobeat/scraping.md +473 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/imdb/scraping.md +271 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/itch-io/scraping.md +436 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/job-boards/indeed-glassdoor.md +1021 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/letterboxd/scraping.md +349 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/linkedin/invitation-manager.md +109 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/loom/folder-enumeration.md +170 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/macrotrends/scraping.md +537 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/medium/article-hydration.md +120 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/medium/scraping.md +414 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/metacritic/scraping.md +477 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/musicbrainz/scraping.md +478 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/nasa/scraping.md +339 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/news-aggregation/multi-source.md +205 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/open-library/scraping.md +472 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/openalex/scraping.md +470 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/openstreetmap/scraping.md +490 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/package-registries/npm-pypi.md +478 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/polymarket/scraping.md +234 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/producthunt/scraping.md +307 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/pubmed/scraping.md +421 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/quora/scraping.md +364 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/rawg/scraping.md +352 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/reddit/scraping.md +124 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/rest-countries/scraping.md +233 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/sec-edgar/scraping.md +361 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/shopify-admin/README.md +36 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/shopify-admin/embedded-apps.md +72 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/shopify-admin/knowledge-base.md +109 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/shopify-admin/polaris-inputs.md +137 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/soundcloud/scraping.md +362 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/spotify/scraping.md +339 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/stackoverflow/scraping.md +435 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/steam/scraping.md +575 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/substack/scraping.md +338 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/thetechgeeks/pricing.md +52 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/tiktok/upload.md +107 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/tradingview/scraping.md +309 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/trello/boards-and-lists.md +88 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/trustpilot/scraping.md +375 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/walmart/scraping.md +444 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/wayback-machine/scraping.md +306 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/weather/scraping.md +398 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/wellfound/scraping.md +596 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/world-bank/scraping.md +356 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/xiaohongshu/scraping.md +84 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/youtube/scraping.md +418 -0
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/zillow/scraping.md +433 -0
- package/dist/extensions/builtin/browser/browser.md +73 -0
- package/dist/extensions/builtin/browser/index.d.ts +8 -0
- package/dist/extensions/builtin/browser/index.js +15 -0
- package/dist/extensions/builtin/browser/install.md +142 -0
- package/dist/extensions/builtin/browser/interaction-skills/connection.md +48 -0
- package/dist/extensions/builtin/browser/interaction-skills/cookies.md +3 -0
- package/dist/extensions/builtin/browser/interaction-skills/cross-origin-iframes.md +3 -0
- package/dist/extensions/builtin/browser/interaction-skills/dialogs.md +64 -0
- package/dist/extensions/builtin/browser/interaction-skills/downloads.md +3 -0
- package/dist/extensions/builtin/browser/interaction-skills/drag-and-drop.md +3 -0
- package/dist/extensions/builtin/browser/interaction-skills/dropdowns.md +3 -0
- package/dist/extensions/builtin/browser/interaction-skills/iframes.md +3 -0
- package/dist/extensions/builtin/browser/interaction-skills/network-requests.md +3 -0
- package/dist/extensions/builtin/browser/interaction-skills/print-as-pdf.md +3 -0
- package/dist/extensions/builtin/browser/interaction-skills/profile-sync.md +90 -0
- package/dist/extensions/builtin/browser/interaction-skills/screenshots.md +17 -0
- package/dist/extensions/builtin/browser/interaction-skills/scrolling.md +3 -0
- package/dist/extensions/builtin/browser/interaction-skills/shadow-dom.md +3 -0
- package/dist/extensions/builtin/browser/interaction-skills/tabs.md +69 -0
- package/dist/extensions/builtin/browser/interaction-skills/uploads.md +1 -0
- package/dist/extensions/builtin/browser/interaction-skills/viewport.md +3 -0
- package/dist/extensions/builtin/browser/src/browser_harness/AGENT.md +15 -0
- package/dist/extensions/builtin/browser/src/browser_harness/__init__.py +8 -0
- package/dist/extensions/builtin/browser/src/browser_harness/_ipc.py +90 -0
- package/dist/extensions/builtin/browser/src/browser_harness/admin.py +722 -0
- package/dist/extensions/builtin/browser/src/browser_harness/daemon.py +328 -0
- package/dist/extensions/builtin/browser/src/browser_harness/helpers.py +396 -0
- package/dist/extensions/builtin/browser/src/browser_harness/run.py +103 -0
- package/dist/extensions/builtin/btw/index.d.ts +8 -0
- package/dist/extensions/builtin/btw/index.js +15 -0
- package/dist/extensions/builtin/debug/collectors.d.ts +96 -0
- package/dist/extensions/builtin/debug/collectors.js +7 -0
- package/dist/extensions/builtin/debug/index.d.ts +8 -0
- package/dist/extensions/builtin/debug/index.js +49 -0
- package/dist/extensions/builtin/diagnostics/diagnostic-buffer.d.ts +19 -0
- package/dist/extensions/builtin/diagnostics/diagnostic-buffer.js +1 -0
- package/dist/extensions/builtin/diagnostics/index.d.ts +8 -0
- package/dist/extensions/builtin/diagnostics/index.js +1 -0
- package/dist/extensions/builtin/diagnostics/redaction.d.ts +8 -0
- package/dist/extensions/builtin/diagnostics/redaction.js +1 -0
- package/dist/extensions/builtin/diagnostics/reporter.d.ts +17 -0
- package/dist/extensions/builtin/diagnostics/reporter.js +1 -0
- package/dist/extensions/builtin/diagnostics/types.d.ts +62 -0
- package/dist/extensions/builtin/diagnostics/types.js +1 -0
- package/dist/extensions/builtin/discipline/index.d.ts +8 -0
- package/dist/extensions/builtin/discipline/index.js +7 -0
- package/dist/extensions/builtin/discipline/skills/brainstorming/SKILL.md +33 -0
- package/dist/extensions/builtin/discipline/skills/executing-plans/SKILL.md +25 -0
- package/dist/extensions/builtin/discipline/skills/finishing-development-branch/SKILL.md +25 -0
- package/dist/extensions/builtin/discipline/skills/receiving-code-review/SKILL.md +22 -0
- package/dist/extensions/builtin/discipline/skills/requesting-code-review/SKILL.md +31 -0
- package/dist/extensions/builtin/discipline/skills/systematic-debugging/SKILL.md +28 -0
- package/dist/extensions/builtin/discipline/skills/test-driven-development/SKILL.md +32 -0
- package/dist/extensions/builtin/discipline/skills/using-git-worktrees/SKILL.md +25 -0
- package/dist/extensions/builtin/discipline/skills/verification-before-completion/SKILL.md +27 -0
- package/dist/extensions/builtin/discipline/skills/writing-plans/SKILL.md +26 -0
- package/dist/extensions/builtin/goal/README.md +67 -0
- package/dist/extensions/builtin/goal/goal-command.d.ts +13 -0
- package/dist/extensions/builtin/goal/goal-command.js +9 -0
- package/dist/extensions/builtin/goal/goal-controller.d.ts +143 -0
- package/dist/extensions/builtin/goal/goal-controller.js +1 -0
- package/dist/extensions/builtin/goal/goal-format.d.ts +52 -0
- package/dist/extensions/builtin/goal/goal-format.js +1 -0
- package/dist/extensions/builtin/goal/goal-parser.d.ts +27 -0
- package/dist/extensions/builtin/goal/goal-parser.js +2 -0
- package/dist/extensions/builtin/goal/goal-prompts.d.ts +15 -0
- package/dist/extensions/builtin/goal/goal-prompts.js +5 -0
- package/dist/extensions/builtin/goal/goal-store.d.ts +28 -0
- package/dist/extensions/builtin/goal/goal-store.js +1 -0
- package/dist/extensions/builtin/goal/goal-tools.d.ts +26 -0
- package/dist/extensions/builtin/goal/goal-tools.js +3 -0
- package/dist/extensions/builtin/goal/goal-types.d.ts +87 -0
- package/dist/extensions/builtin/goal/goal-types.js +1 -0
- package/dist/extensions/builtin/goal/index.d.ts +8 -0
- package/dist/extensions/builtin/goal/index.js +10 -0
- package/dist/extensions/builtin/grub/README.md +112 -0
- package/dist/extensions/builtin/grub/grub-controller.d.ts +67 -0
- package/dist/extensions/builtin/grub/grub-controller.js +1 -0
- package/dist/extensions/builtin/grub/grub-decision.d.ts +8 -0
- package/dist/extensions/builtin/grub/grub-decision.js +1 -0
- package/dist/extensions/builtin/grub/grub-feature-list.d.ts +54 -0
- package/dist/extensions/builtin/grub/grub-feature-list.js +2 -0
- package/dist/extensions/builtin/grub/grub-format.d.ts +13 -0
- package/dist/extensions/builtin/grub/grub-format.js +4 -0
- package/dist/extensions/builtin/grub/grub-harness.d.ts +9 -0
- package/dist/extensions/builtin/grub/grub-harness.js +3 -0
- package/dist/extensions/builtin/grub/grub-i18n.d.ts +166 -0
- package/dist/extensions/builtin/grub/grub-i18n.js +1 -0
- package/dist/extensions/builtin/grub/grub-parser.d.ts +24 -0
- package/dist/extensions/builtin/grub/grub-parser.js +2 -0
- package/dist/extensions/builtin/grub/grub-persistence.d.ts +17 -0
- package/dist/extensions/builtin/grub/grub-persistence.js +2 -0
- package/dist/extensions/builtin/grub/grub-prompts.d.ts +12 -0
- package/dist/extensions/builtin/grub/grub-prompts.js +97 -0
- package/dist/extensions/builtin/grub/grub-turn.d.ts +16 -0
- package/dist/extensions/builtin/grub/grub-turn.js +1 -0
- package/dist/extensions/builtin/grub/grub-types.d.ts +110 -0
- package/dist/extensions/builtin/grub/grub-types.js +1 -0
- package/dist/extensions/builtin/grub/index.d.ts +8 -0
- package/dist/extensions/builtin/grub/index.js +6 -0
- package/dist/extensions/builtin/idle-think/curiosity.d.ts +46 -0
- package/dist/extensions/builtin/idle-think/curiosity.js +2 -0
- package/dist/extensions/builtin/idle-think/idle-think-runtime.d.ts +46 -0
- package/dist/extensions/builtin/idle-think/idle-think-runtime.js +1 -0
- package/dist/extensions/builtin/idle-think/index.d.ts +15 -0
- package/dist/extensions/builtin/idle-think/index.js +1 -0
- package/dist/extensions/builtin/idle-think/insights.d.ts +27 -0
- package/dist/extensions/builtin/idle-think/insights.js +5 -0
- package/dist/extensions/builtin/idle-think/thinker.d.ts +26 -0
- package/dist/extensions/builtin/idle-think/thinker.js +9 -0
- package/dist/extensions/builtin/insights/html-report.d.ts +21 -0
- package/dist/extensions/builtin/insights/html-report.js +463 -0
- package/dist/extensions/builtin/insights/index.d.ts +24 -0
- package/dist/extensions/builtin/insights/index.js +2 -0
- package/dist/extensions/builtin/insights/insights-engine.d.ts +18 -0
- package/dist/extensions/builtin/insights/insights-engine.js +39 -0
- package/dist/extensions/builtin/insights/prompts.d.ts +17 -0
- package/dist/extensions/builtin/insights/prompts.js +180 -0
- package/dist/extensions/builtin/insights/session-scanner.d.ts +27 -0
- package/dist/extensions/builtin/insights/session-scanner.js +19 -0
- package/dist/extensions/builtin/insights/stats.d.ts +13 -0
- package/dist/extensions/builtin/insights/stats.js +1 -0
- package/dist/extensions/builtin/insights/types.d.ts +199 -0
- package/dist/extensions/builtin/insights/types.js +0 -0
- package/dist/extensions/builtin/link-world/agent-workspace/README.md +16 -0
- package/dist/extensions/builtin/link-world/index.d.ts +8 -0
- package/dist/extensions/builtin/link-world/index.js +19 -0
- package/dist/extensions/builtin/link-world/internet-search/internet-search.md +65 -0
- package/dist/extensions/builtin/link-world/link-world-agent.md +82 -0
- package/dist/extensions/builtin/link-world/linkworld.md +313 -0
- package/dist/extensions/builtin/link-world/network-routing/network-routing.md +67 -0
- package/dist/extensions/builtin/loop/README.md +92 -0
- package/dist/extensions/builtin/loop/cron/cron-parser.d.ts +56 -0
- package/dist/extensions/builtin/loop/cron/cron-parser.js +1 -0
- package/dist/extensions/builtin/loop/cron/cron-scheduler.d.ts +85 -0
- package/dist/extensions/builtin/loop/cron/cron-scheduler.js +10 -0
- package/dist/extensions/builtin/loop/cron/cron-tasks-lock.d.ts +42 -0
- package/dist/extensions/builtin/loop/cron/cron-tasks-lock.js +1 -0
- package/dist/extensions/builtin/loop/cron/cron-tasks.d.ts +200 -0
- package/dist/extensions/builtin/loop/cron/cron-tasks.js +2 -0
- package/dist/extensions/builtin/loop/cron/index.d.ts +18 -0
- package/dist/extensions/builtin/loop/cron/index.js +1 -0
- package/dist/extensions/builtin/loop/cron-tools/cron-create-tool.d.ts +35 -0
- package/dist/extensions/builtin/loop/cron-tools/cron-create-tool.js +1 -0
- package/dist/extensions/builtin/loop/cron-tools/cron-delete-tool.d.ts +29 -0
- package/dist/extensions/builtin/loop/cron-tools/cron-delete-tool.js +1 -0
- package/dist/extensions/builtin/loop/cron-tools/cron-list-tool.d.ts +25 -0
- package/dist/extensions/builtin/loop/cron-tools/cron-list-tool.js +2 -0
- package/dist/extensions/builtin/loop/cron-tools/index.d.ts +16 -0
- package/dist/extensions/builtin/loop/cron-tools/index.js +1 -0
- package/dist/extensions/builtin/loop/cron-tools/prompt.d.ts +35 -0
- package/dist/extensions/builtin/loop/cron-tools/prompt.js +38 -0
- package/dist/extensions/builtin/loop/index.d.ts +19 -0
- package/dist/extensions/builtin/loop/index.js +2 -0
- package/dist/extensions/builtin/loop/loop-skill.d.ts +18 -0
- package/dist/extensions/builtin/loop/loop-skill.js +58 -0
- package/dist/extensions/builtin/lsp/index.d.ts +8 -0
- package/dist/extensions/builtin/lsp/index.js +1 -0
- package/dist/extensions/builtin/lsp/lsp-client.d.ts +22 -0
- package/dist/extensions/builtin/lsp/lsp-client.js +1 -0
- package/dist/extensions/builtin/lsp/lsp-config.d.ts +8 -0
- package/dist/extensions/builtin/lsp/lsp-config.js +1 -0
- package/dist/extensions/builtin/lsp/lsp-formatters.d.ts +15 -0
- package/dist/extensions/builtin/lsp/lsp-formatters.js +18 -0
- package/dist/extensions/builtin/lsp/lsp-server-instance.d.ts +24 -0
- package/dist/extensions/builtin/lsp/lsp-server-instance.js +1 -0
- package/dist/extensions/builtin/lsp/lsp-server-manager.d.ts +21 -0
- package/dist/extensions/builtin/lsp/lsp-server-manager.js +1 -0
- package/dist/extensions/builtin/lsp/lsp-tool.d.ts +33 -0
- package/dist/extensions/builtin/lsp/lsp-tool.js +2 -0
- package/dist/extensions/builtin/lsp/types.d.ts +31 -0
- package/dist/extensions/builtin/lsp/types.js +1 -0
- package/dist/extensions/builtin/mcp/figma-design.md +68 -0
- package/dist/extensions/builtin/mcp/index.d.ts +14 -0
- package/dist/extensions/builtin/mcp/index.js +25 -0
- package/dist/extensions/builtin/mcp/mcp-management.md +85 -0
- package/dist/extensions/builtin/plan/clear-context-state.d.ts +8 -0
- package/dist/extensions/builtin/plan/clear-context-state.js +1 -0
- package/dist/extensions/builtin/plan/enter-plan-mode-tool.d.ts +11 -0
- package/dist/extensions/builtin/plan/enter-plan-mode-tool.js +2 -0
- package/dist/extensions/builtin/plan/exit-plan-mode-tool.d.ts +18 -0
- package/dist/extensions/builtin/plan/exit-plan-mode-tool.js +13 -0
- package/dist/extensions/builtin/plan/index.d.ts +8 -0
- package/dist/extensions/builtin/plan/index.js +24 -0
- package/dist/extensions/builtin/plan/plan-agents.d.ts +23 -0
- package/dist/extensions/builtin/plan/plan-agents.js +43 -0
- package/dist/extensions/builtin/plan/plan-file-manager.d.ts +26 -0
- package/dist/extensions/builtin/plan/plan-file-manager.js +1 -0
- package/dist/extensions/builtin/plan/plan-permissions.d.ts +15 -0
- package/dist/extensions/builtin/plan/plan-permissions.js +12 -0
- package/dist/extensions/builtin/plan/plan-validation.d.ts +18 -0
- package/dist/extensions/builtin/plan/plan-validation.js +5 -0
- package/dist/extensions/builtin/plan/plan-workflow-prompt.d.ts +18 -0
- package/dist/extensions/builtin/plan/plan-workflow-prompt.js +102 -0
- package/dist/extensions/builtin/plan/teammate-approval.d.ts +49 -0
- package/dist/extensions/builtin/plan/teammate-approval.js +3 -0
- package/dist/extensions/builtin/plan/types.d.ts +133 -0
- package/dist/extensions/builtin/plan/types.js +1 -0
- package/dist/extensions/builtin/presence/index.d.ts +40 -0
- package/dist/extensions/builtin/presence/index.js +15 -0
- package/dist/extensions/builtin/presence/presence-memory.d.ts +47 -0
- package/dist/extensions/builtin/presence/presence-memory.js +1 -0
- package/dist/extensions/builtin/recap/AGENT.md +15 -0
- package/dist/extensions/builtin/recap/index.d.ts +8 -0
- package/dist/extensions/builtin/recap/index.js +1 -0
- package/dist/extensions/builtin/recap/recap-budget.d.ts +24 -0
- package/dist/extensions/builtin/recap/recap-budget.js +1 -0
- package/dist/extensions/builtin/recap/recap-extractor.d.ts +34 -0
- package/dist/extensions/builtin/recap/recap-extractor.js +3 -0
- package/dist/extensions/builtin/recap/recap-renderer.d.ts +19 -0
- package/dist/extensions/builtin/recap/recap-renderer.js +2 -0
- package/dist/extensions/builtin/recap/recap-synthesizer.d.ts +51 -0
- package/dist/extensions/builtin/recap/recap-synthesizer.js +19 -0
- package/dist/extensions/builtin/recap/recap-types.d.ts +40 -0
- package/dist/extensions/builtin/recap/recap-types.js +1 -0
- package/dist/extensions/builtin/sal/README.md +72 -0
- package/dist/extensions/builtin/sal/anchors.d.ts +46 -0
- package/dist/extensions/builtin/sal/anchors.js +1 -0
- package/dist/extensions/builtin/sal/eval/index.d.ts +18 -0
- package/dist/extensions/builtin/sal/eval/index.js +1 -0
- package/dist/extensions/builtin/sal/eval/insforge-sink.d.ts +30 -0
- package/dist/extensions/builtin/sal/eval/insforge-sink.js +1 -0
- package/dist/extensions/builtin/sal/eval/jsonl-sink.d.ts +27 -0
- package/dist/extensions/builtin/sal/eval/jsonl-sink.js +3 -0
- package/dist/extensions/builtin/sal/eval/noop-sink.d.ts +8 -0
- package/dist/extensions/builtin/sal/eval/noop-sink.js +1 -0
- package/dist/extensions/builtin/sal/eval/types.d.ts +60 -0
- package/dist/extensions/builtin/sal/eval/types.js +1 -0
- package/dist/extensions/builtin/sal/index.d.ts +12 -0
- package/dist/extensions/builtin/sal/index.js +7 -0
- package/dist/extensions/builtin/sal/sal-config.d.ts +46 -0
- package/dist/extensions/builtin/sal/sal-config.js +1 -0
- package/dist/extensions/builtin/sal/sal-context.d.ts +11 -0
- package/dist/extensions/builtin/sal/sal-context.js +2 -0
- package/dist/extensions/builtin/sal/sal-runtime.d.ts +72 -0
- package/dist/extensions/builtin/sal/sal-runtime.js +0 -0
- package/dist/extensions/builtin/sal/sal-trace.d.ts +11 -0
- package/dist/extensions/builtin/sal/sal-trace.js +1 -0
- package/dist/extensions/builtin/sal/terrain.d.ts +73 -0
- package/dist/extensions/builtin/sal/terrain.js +3 -0
- package/dist/extensions/builtin/sal/weights.d.ts +28 -0
- package/dist/extensions/builtin/sal/weights.js +1 -0
- package/dist/extensions/builtin/security-audit/README.md +289 -0
- package/dist/extensions/builtin/security-audit/engine/detector.d.ts +44 -0
- package/dist/extensions/builtin/security-audit/engine/detector.js +1 -0
- package/dist/extensions/builtin/security-audit/engine/interceptor.d.ts +61 -0
- package/dist/extensions/builtin/security-audit/engine/interceptor.js +27 -0
- package/dist/extensions/builtin/security-audit/engine/logger.d.ts +65 -0
- package/dist/extensions/builtin/security-audit/engine/logger.js +65 -0
- package/dist/extensions/builtin/security-audit/index.d.ts +13 -0
- package/dist/extensions/builtin/security-audit/index.js +49 -0
- package/dist/extensions/builtin/security-audit/interface.d.ts +167 -0
- package/dist/extensions/builtin/security-audit/interface.js +1 -0
- package/dist/extensions/builtin/soul/index.d.ts +13 -0
- package/dist/extensions/builtin/soul/index.js +1 -0
- package/dist/extensions/builtin/subagent/index.d.ts +8 -0
- package/dist/extensions/builtin/subagent/index.js +8 -0
- package/dist/extensions/builtin/subagent/subagent-parser.d.ts +30 -0
- package/dist/extensions/builtin/subagent/subagent-parser.js +15 -0
- package/dist/extensions/builtin/subagent/subagent-runner.d.ts +49 -0
- package/dist/extensions/builtin/subagent/subagent-runner.js +8 -0
- package/dist/extensions/builtin/subagent/subagent-types.d.ts +57 -0
- package/dist/extensions/builtin/subagent/subagent-types.js +0 -0
- package/dist/extensions/builtin/task/index.d.ts +8 -0
- package/dist/extensions/builtin/task/index.js +1 -0
- package/dist/extensions/builtin/task/task-store.d.ts +42 -0
- package/dist/extensions/builtin/task/task-store.js +1 -0
- package/dist/extensions/builtin/task/task-tools/task-create-tool.d.ts +37 -0
- package/dist/extensions/builtin/task/task-tools/task-create-tool.js +40 -0
- package/dist/extensions/builtin/task/task-tools/task-get-tool.d.ts +31 -0
- package/dist/extensions/builtin/task/task-tools/task-get-tool.js +23 -0
- package/dist/extensions/builtin/task/task-tools/task-list-tool.d.ts +27 -0
- package/dist/extensions/builtin/task/task-tools/task-list-tool.js +22 -0
- package/dist/extensions/builtin/task/task-tools/task-output-tool.d.ts +32 -0
- package/dist/extensions/builtin/task/task-tools/task-output-tool.js +10 -0
- package/dist/extensions/builtin/task/task-tools/task-stop-tool.d.ts +31 -0
- package/dist/extensions/builtin/task/task-tools/task-stop-tool.js +5 -0
- package/dist/extensions/builtin/task/task-tools/task-update-tool.d.ts +47 -0
- package/dist/extensions/builtin/task/task-tools/task-update-tool.js +77 -0
- package/dist/extensions/builtin/task/task-tools/tool-search-tool.d.ts +34 -0
- package/dist/extensions/builtin/task/task-tools/tool-search-tool.js +14 -0
- package/dist/extensions/builtin/task/task-types.d.ts +30 -0
- package/dist/extensions/builtin/task/task-types.js +1 -0
- package/dist/extensions/builtin/teach/README.md +197 -0
- package/dist/extensions/builtin/teach/index.d.ts +12 -0
- package/dist/extensions/builtin/teach/index.js +6 -0
- package/dist/extensions/builtin/teach/references/analogy-library.md +153 -0
- package/dist/extensions/builtin/teach/references/learning-paths.md +214 -0
- package/dist/extensions/builtin/teach/references/source-verification.md +268 -0
- package/dist/extensions/builtin/teach/references/teaching-template.md +237 -0
- package/dist/extensions/builtin/teach/teach-format.d.ts +35 -0
- package/dist/extensions/builtin/teach/teach-format.js +6 -0
- package/dist/extensions/builtin/teach/teach-i18n.d.ts +47 -0
- package/dist/extensions/builtin/teach/teach-i18n.js +1 -0
- package/dist/extensions/builtin/teach/teach-persistence.d.ts +36 -0
- package/dist/extensions/builtin/teach/teach-persistence.js +35 -0
- package/dist/extensions/builtin/teach/teach-prompts.d.ts +52 -0
- package/dist/extensions/builtin/teach/teach-prompts.js +35 -0
- package/dist/extensions/builtin/teach/teach-runtime.d.ts +93 -0
- package/dist/extensions/builtin/teach/teach-runtime.js +9 -0
- package/dist/extensions/builtin/teach/teach-types.d.ts +81 -0
- package/dist/extensions/builtin/teach/teach-types.js +0 -0
- package/dist/extensions/builtin/team/AGENT.md +112 -0
- package/dist/extensions/builtin/team/TESTING.md +299 -0
- package/dist/extensions/builtin/team/index.d.ts +26 -0
- package/dist/extensions/builtin/team/index.js +11 -0
- package/dist/extensions/builtin/team/team-dashboard.d.ts +13 -0
- package/dist/extensions/builtin/team/team-dashboard.js +1 -0
- package/dist/extensions/builtin/team/team-harness.d.ts +35 -0
- package/dist/extensions/builtin/team/team-harness.js +18 -0
- package/dist/extensions/builtin/team/team-mailbox.d.ts +50 -0
- package/dist/extensions/builtin/team/team-mailbox.js +4 -0
- package/dist/extensions/builtin/team/team-orchestrator.d.ts +39 -0
- package/dist/extensions/builtin/team/team-orchestrator.js +5 -0
- package/dist/extensions/builtin/team/team-parser.d.ts +84 -0
- package/dist/extensions/builtin/team/team-parser.js +38 -0
- package/dist/extensions/builtin/team/team-permissions.d.ts +63 -0
- package/dist/extensions/builtin/team/team-permissions.js +1 -0
- package/dist/extensions/builtin/team/team-presets.d.ts +45 -0
- package/dist/extensions/builtin/team/team-presets.js +2 -0
- package/dist/extensions/builtin/team/team-psyche.d.ts +14 -0
- package/dist/extensions/builtin/team/team-psyche.js +5 -0
- package/dist/extensions/builtin/team/team-runtime-helpers.d.ts +48 -0
- package/dist/extensions/builtin/team/team-runtime-helpers.js +2 -0
- package/dist/extensions/builtin/team/team-runtime.d.ts +91 -0
- package/dist/extensions/builtin/team/team-runtime.js +3 -0
- package/dist/extensions/builtin/team/team-state-store.d.ts +29 -0
- package/dist/extensions/builtin/team/team-state-store.js +2 -0
- package/dist/extensions/builtin/team/team-task-store.d.ts +35 -0
- package/dist/extensions/builtin/team/team-task-store.js +2 -0
- package/dist/extensions/builtin/team/team-transcript.d.ts +31 -0
- package/dist/extensions/builtin/team/team-transcript.js +2 -0
- package/dist/extensions/builtin/team/team-types.d.ts +250 -0
- package/dist/extensions/builtin/team/team-types.js +0 -0
- package/dist/extensions/builtin/team/team-ui.d.ts +50 -0
- package/dist/extensions/builtin/team/team-ui.js +2 -0
- package/dist/extensions/builtin/token-save/README.md +56 -0
- package/dist/extensions/builtin/token-save/config.d.ts +8 -0
- package/dist/extensions/builtin/token-save/config.js +1 -0
- package/dist/extensions/builtin/token-save/filters.d.ts +14 -0
- package/dist/extensions/builtin/token-save/filters.js +24 -0
- package/dist/extensions/builtin/token-save/index.d.ts +8 -0
- package/dist/extensions/builtin/token-save/index.js +4 -0
- package/dist/extensions/builtin/token-save/lexer.d.ts +11 -0
- package/dist/extensions/builtin/token-save/lexer.js +1 -0
- package/dist/extensions/builtin/token-save/recovery.d.ts +1 -0
- package/dist/extensions/builtin/token-save/recovery.js +1 -0
- package/dist/extensions/builtin/token-save/rewrite.d.ts +19 -0
- package/dist/extensions/builtin/token-save/rewrite.js +1 -0
- package/dist/extensions/builtin/token-save/runner.d.ts +14 -0
- package/dist/extensions/builtin/token-save/runner.js +3 -0
- package/dist/extensions/builtin/token-save/stream.d.ts +20 -0
- package/dist/extensions/builtin/token-save/stream.js +1 -0
- package/dist/extensions/builtin/token-save/toml-dsl.d.ts +25 -0
- package/dist/extensions/builtin/token-save/toml-dsl.js +3 -0
- package/dist/extensions/builtin/token-save/tracking.d.ts +24 -0
- package/dist/extensions/builtin/token-save/tracking.js +8 -0
- package/dist/extensions/optional/AGENT.md +11 -0
- package/dist/extensions/optional/export-html/index.d.ts +41 -0
- package/dist/extensions/optional/export-html/index.js +2 -0
- package/dist/extensions/optional/simplify/index.d.ts +35 -0
- package/dist/extensions/optional/simplify/index.js +77 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.js +1 -0
- package/dist/main.d.ts +7 -0
- package/dist/main.js +41 -0
- package/dist/migrations.d.ts +30 -0
- package/dist/migrations.js +4 -0
- package/dist/models.d.ts +7 -0
- package/dist/models.js +1 -0
- package/dist/modes/acp/acp-mode.d.ts +30 -0
- package/dist/modes/acp/acp-mode.js +25 -0
- package/dist/modes/index.d.ts +14 -0
- package/dist/modes/index.js +1 -0
- package/dist/modes/interactive/agent-loop-status.d.ts +8 -0
- package/dist/modes/interactive/agent-loop-status.js +1 -0
- package/dist/modes/interactive/components/apikey-input.d.ts +10 -0
- package/dist/modes/interactive/components/apikey-input.js +3 -0
- package/dist/modes/interactive/components/armin.d.ts +39 -0
- package/dist/modes/interactive/components/armin.js +1 -0
- package/dist/modes/interactive/components/assistant-message.d.ts +21 -0
- package/dist/modes/interactive/components/assistant-message.js +1 -0
- package/dist/modes/interactive/components/attachments-bar.d.ts +37 -0
- package/dist/modes/interactive/components/attachments-bar.js +1 -0
- package/dist/modes/interactive/components/bash-execution.d.ts +40 -0
- package/dist/modes/interactive/components/bash-execution.js +13 -0
- package/dist/modes/interactive/components/bordered-loader.d.ts +21 -0
- package/dist/modes/interactive/components/bordered-loader.js +1 -0
- package/dist/modes/interactive/components/branch-summary-message.d.ts +21 -0
- package/dist/modes/interactive/components/branch-summary-message.js +3 -0
- package/dist/modes/interactive/components/buddy/pet-sprites.d.ts +31 -0
- package/dist/modes/interactive/components/buddy/pet-sprites.js +1 -0
- package/dist/modes/interactive/components/catui-loader.d.ts +55 -0
- package/dist/modes/interactive/components/catui-loader.js +1 -0
- package/dist/modes/interactive/components/compaction-summary-message.d.ts +21 -0
- package/dist/modes/interactive/components/compaction-summary-message.js +3 -0
- package/dist/modes/interactive/components/config-selector.d.ts +76 -0
- package/dist/modes/interactive/components/config-selector.js +1 -0
- package/dist/modes/interactive/components/countdown-timer.d.ts +19 -0
- package/dist/modes/interactive/components/countdown-timer.js +1 -0
- package/dist/modes/interactive/components/custom-editor.d.ts +37 -0
- package/dist/modes/interactive/components/custom-editor.js +1 -0
- package/dist/modes/interactive/components/custom-message.d.ts +26 -0
- package/dist/modes/interactive/components/custom-message.js +2 -0
- package/dist/modes/interactive/components/daxnuts.d.ts +28 -0
- package/dist/modes/interactive/components/daxnuts.js +1 -0
- package/dist/modes/interactive/components/diff.d.ts +17 -0
- package/dist/modes/interactive/components/diff.js +3 -0
- package/dist/modes/interactive/components/dynamic-border.d.ts +20 -0
- package/dist/modes/interactive/components/dynamic-border.js +1 -0
- package/dist/modes/interactive/components/editor-buddy-layout.d.ts +17 -0
- package/dist/modes/interactive/components/editor-buddy-layout.js +1 -0
- package/dist/modes/interactive/components/extension-editor.d.ts +25 -0
- package/dist/modes/interactive/components/extension-editor.js +1 -0
- package/dist/modes/interactive/components/extension-input.d.ts +29 -0
- package/dist/modes/interactive/components/extension-input.js +2 -0
- package/dist/modes/interactive/components/extension-selector.d.ts +32 -0
- package/dist/modes/interactive/components/extension-selector.js +2 -0
- package/dist/modes/interactive/components/footer.d.ts +34 -0
- package/dist/modes/interactive/components/footer.js +1 -0
- package/dist/modes/interactive/components/index.d.ts +44 -0
- package/dist/modes/interactive/components/index.js +1 -0
- package/dist/modes/interactive/components/keybinding-hints.d.ts +46 -0
- package/dist/modes/interactive/components/keybinding-hints.js +1 -0
- package/dist/modes/interactive/components/login-dialog.d.ts +47 -0
- package/dist/modes/interactive/components/login-dialog.js +1 -0
- package/dist/modes/interactive/components/memory-stats.d.ts +14 -0
- package/dist/modes/interactive/components/memory-stats.js +2 -0
- package/dist/modes/interactive/components/model-selector.d.ts +59 -0
- package/dist/modes/interactive/components/model-selector.js +2 -0
- package/dist/modes/interactive/components/notification-queue.d.ts +49 -0
- package/dist/modes/interactive/components/notification-queue.js +1 -0
- package/dist/modes/interactive/components/oauth-selector.d.ts +30 -0
- package/dist/modes/interactive/components/oauth-selector.js +1 -0
- package/dist/modes/interactive/components/persona-selector.d.ts +24 -0
- package/dist/modes/interactive/components/persona-selector.js +1 -0
- package/dist/modes/interactive/components/plan-progress-panel.d.ts +24 -0
- package/dist/modes/interactive/components/plan-progress-panel.js +1 -0
- package/dist/modes/interactive/components/provider-selector.d.ts +25 -0
- package/dist/modes/interactive/components/provider-selector.js +1 -0
- package/dist/modes/interactive/components/raw-text.d.ts +19 -0
- package/dist/modes/interactive/components/raw-text.js +3 -0
- package/dist/modes/interactive/components/scoped-models-selector.d.ts +54 -0
- package/dist/modes/interactive/components/scoped-models-selector.js +1 -0
- package/dist/modes/interactive/components/session-selector-search.d.ts +28 -0
- package/dist/modes/interactive/components/session-selector-search.js +1 -0
- package/dist/modes/interactive/components/session-selector.d.ts +100 -0
- package/dist/modes/interactive/components/session-selector.js +2 -0
- package/dist/modes/interactive/components/settings-selector.d.ts +77 -0
- package/dist/modes/interactive/components/settings-selector.js +1 -0
- package/dist/modes/interactive/components/show-images-selector.d.ts +15 -0
- package/dist/modes/interactive/components/show-images-selector.js +1 -0
- package/dist/modes/interactive/components/skill-invocation-message.d.ts +22 -0
- package/dist/modes/interactive/components/skill-invocation-message.js +3 -0
- package/dist/modes/interactive/components/soul-stats.d.ts +15 -0
- package/dist/modes/interactive/components/soul-stats.js +2 -0
- package/dist/modes/interactive/components/sub-agent-panel.d.ts +24 -0
- package/dist/modes/interactive/components/sub-agent-panel.js +1 -0
- package/dist/modes/interactive/components/task-status-panel.d.ts +36 -0
- package/dist/modes/interactive/components/task-status-panel.js +1 -0
- package/dist/modes/interactive/components/theme-selector.d.ts +16 -0
- package/dist/modes/interactive/components/theme-selector.js +1 -0
- package/dist/modes/interactive/components/thinking-selector.d.ts +16 -0
- package/dist/modes/interactive/components/thinking-selector.js +1 -0
- package/dist/modes/interactive/components/tool-execution.d.ts +80 -0
- package/dist/modes/interactive/components/tool-execution.js +58 -0
- package/dist/modes/interactive/components/tree-selector.d.ts +73 -0
- package/dist/modes/interactive/components/tree-selector.js +1 -0
- package/dist/modes/interactive/components/user-message-selector.d.ts +35 -0
- package/dist/modes/interactive/components/user-message-selector.js +1 -0
- package/dist/modes/interactive/components/user-message.d.ts +13 -0
- package/dist/modes/interactive/components/user-message.js +1 -0
- package/dist/modes/interactive/components/visual-truncate.d.ts +29 -0
- package/dist/modes/interactive/components/visual-truncate.js +1 -0
- package/dist/modes/interactive/controllers/auth-provider-config-controller.d.ts +64 -0
- package/dist/modes/interactive/controllers/auth-provider-config-controller.js +1 -0
- package/dist/modes/interactive/controllers/extension-ui/custom-overlay-host.d.ts +38 -0
- package/dist/modes/interactive/controllers/extension-ui/custom-overlay-host.js +1 -0
- package/dist/modes/interactive/controllers/extension-ui/editor-component-adapter.d.ts +37 -0
- package/dist/modes/interactive/controllers/extension-ui/editor-component-adapter.js +1 -0
- package/dist/modes/interactive/controllers/extension-ui/persistent-surface-registry.d.ts +53 -0
- package/dist/modes/interactive/controllers/extension-ui/persistent-surface-registry.js +1 -0
- package/dist/modes/interactive/controllers/extension-ui/prompt-host.d.ts +52 -0
- package/dist/modes/interactive/controllers/extension-ui/prompt-host.js +2 -0
- package/dist/modes/interactive/controllers/image-pipeline-controller.d.ts +106 -0
- package/dist/modes/interactive/controllers/image-pipeline-controller.js +1 -0
- package/dist/modes/interactive/controllers/input-submit-controller.d.ts +80 -0
- package/dist/modes/interactive/controllers/input-submit-controller.js +2 -0
- package/dist/modes/interactive/controllers/interrupt-controller.d.ts +75 -0
- package/dist/modes/interactive/controllers/interrupt-controller.js +1 -0
- package/dist/modes/interactive/controllers/model-overlay-controller.d.ts +127 -0
- package/dist/modes/interactive/controllers/model-overlay-controller.js +3 -0
- package/dist/modes/interactive/controllers/self-update-controller.d.ts +71 -0
- package/dist/modes/interactive/controllers/self-update-controller.js +24 -0
- package/dist/modes/interactive/controllers/settings-overlay-controller.d.ts +56 -0
- package/dist/modes/interactive/controllers/settings-overlay-controller.js +2 -0
- package/dist/modes/interactive/controllers/slash-dispatcher-controller.d.ts +74 -0
- package/dist/modes/interactive/controllers/slash-dispatcher-controller.js +1 -0
- package/dist/modes/interactive/controllers/stream-render-controller.d.ts +110 -0
- package/dist/modes/interactive/controllers/stream-render-controller.js +2 -0
- package/dist/modes/interactive/controllers/tree-overlay-controller.d.ts +55 -0
- package/dist/modes/interactive/controllers/tree-overlay-controller.js +1 -0
- package/dist/modes/interactive/footer-data-provider.d.ts +32 -0
- package/dist/modes/interactive/footer-data-provider.js +1 -0
- package/dist/modes/interactive/interactive-mode.d.ts +303 -0
- package/dist/modes/interactive/interactive-mode.js +119 -0
- package/dist/modes/interactive/services/tips.d.ts +20 -0
- package/dist/modes/interactive/services/tips.js +1 -0
- package/dist/modes/interactive/slash-command-arguments.d.ts +28 -0
- package/dist/modes/interactive/slash-command-arguments.js +1 -0
- package/dist/modes/interactive/state/interactive-state.d.ts +74 -0
- package/dist/modes/interactive/state/interactive-state.js +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 +81 -0
- package/dist/modes/interactive/theme/theme.js +16 -0
- package/dist/modes/interactive/theme/warm.json +81 -0
- package/dist/modes/print-mode.d.ts +38 -0
- package/dist/modes/print-mode.js +2 -0
- package/dist/modes/rpc/rpc-client.d.ts +221 -0
- package/dist/modes/rpc/rpc-client.js +2 -0
- package/dist/modes/rpc/rpc-mode.d.ts +14 -0
- package/dist/modes/rpc/rpc-mode.js +1 -0
- package/dist/modes/rpc/rpc-types.d.ts +449 -0
- package/dist/modes/rpc/rpc-types.js +0 -0
- package/dist/modes/utils/agent-loop-result-format.d.ts +10 -0
- package/dist/modes/utils/agent-loop-result-format.js +1 -0
- package/dist/modes/utils/clipboard-image.d.ts +10 -0
- package/dist/modes/utils/clipboard-image.js +1 -0
- package/dist/modes/utils/clipboard-native.d.ts +11 -0
- package/dist/modes/utils/clipboard-native.js +1 -0
- package/dist/modes/utils/clipboard.d.ts +1 -0
- package/dist/modes/utils/clipboard.js +1 -0
- package/dist/modes/utils/image-convert.d.ts +8 -0
- package/dist/modes/utils/image-convert.js +1 -0
- package/dist/modes/utils/image-resize.d.ts +41 -0
- package/dist/modes/utils/image-resize.js +1 -0
- package/dist/node_modules/@catui/agent-core/dist/agent-loop-continuations.js +1 -0
- package/dist/node_modules/@catui/agent-core/dist/agent-loop-stream-events.js +1 -0
- package/dist/node_modules/@catui/agent-core/dist/agent-loop-tool-results.js +3 -0
- package/dist/node_modules/@catui/agent-core/dist/agent-loop-tool-summaries.js +1 -0
- package/dist/node_modules/@catui/agent-core/dist/agent-loop.js +4 -0
- package/dist/node_modules/@catui/agent-core/dist/agent-run-result.js +1 -0
- package/dist/node_modules/@catui/agent-core/dist/agent.js +1 -0
- package/dist/node_modules/@catui/agent-core/dist/errors.js +1 -0
- package/dist/node_modules/@catui/agent-core/dist/index.js +1 -0
- package/dist/node_modules/@catui/agent-core/dist/proxy.js +2 -0
- package/dist/node_modules/@catui/agent-core/dist/structured-adaptive-agent-loop.js +2 -0
- package/dist/node_modules/@catui/agent-core/dist/structured-adaptive-streaming-tool-executor.js +1 -0
- package/dist/node_modules/@catui/agent-core/dist/structured-adaptive-tool-orchestration.js +3 -0
- package/dist/node_modules/@catui/agent-core/dist/types.js +1 -0
- package/dist/node_modules/@catui/agent-core/package.json +28 -0
- package/dist/node_modules/@catui/ai/dist/api-registry.js +1 -0
- package/dist/node_modules/@catui/ai/dist/cli.js +21 -0
- package/dist/node_modules/@catui/ai/dist/config-path.js +1 -0
- package/dist/node_modules/@catui/ai/dist/debug-logger.js +4 -0
- package/dist/node_modules/@catui/ai/dist/env-api-keys.js +1 -0
- package/dist/node_modules/@catui/ai/dist/env.js +1 -0
- package/dist/node_modules/@catui/ai/dist/events.js +1 -0
- package/dist/node_modules/@catui/ai/dist/index.js +1 -0
- package/dist/node_modules/@catui/ai/dist/json.js +1 -0
- package/dist/node_modules/@catui/ai/dist/models.generated.js +1 -0
- package/dist/node_modules/@catui/ai/dist/models.js +1 -0
- package/dist/node_modules/@catui/ai/dist/overflow.js +1 -0
- package/dist/node_modules/@catui/ai/dist/providers/amazon-bedrock.js +1 -0
- package/dist/node_modules/@catui/ai/dist/providers/anthropic.js +2 -0
- package/dist/node_modules/@catui/ai/dist/providers/azure-openai-responses.js +1 -0
- package/dist/node_modules/@catui/ai/dist/providers/github-copilot-headers.js +1 -0
- package/dist/node_modules/@catui/ai/dist/providers/google-gemini-cli.js +2 -0
- package/dist/node_modules/@catui/ai/dist/providers/google-shared.js +2 -0
- package/dist/node_modules/@catui/ai/dist/providers/google-vertex.js +1 -0
- package/dist/node_modules/@catui/ai/dist/providers/google.js +1 -0
- package/dist/node_modules/@catui/ai/dist/providers/openai-codex-responses.js +7 -0
- package/dist/node_modules/@catui/ai/dist/providers/openai-completions.js +6 -0
- package/dist/node_modules/@catui/ai/dist/providers/openai-responses-shared.js +10 -0
- package/dist/node_modules/@catui/ai/dist/providers/openai-responses.js +1 -0
- package/dist/node_modules/@catui/ai/dist/providers/register-builtins.js +1 -0
- package/dist/node_modules/@catui/ai/dist/providers/simple-options.js +1 -0
- package/dist/node_modules/@catui/ai/dist/providers/transform-messages.js +1 -0
- package/dist/node_modules/@catui/ai/dist/registry.js +1 -0
- package/dist/node_modules/@catui/ai/dist/schema.js +1 -0
- package/dist/node_modules/@catui/ai/dist/stream.js +1 -0
- package/dist/node_modules/@catui/ai/dist/types.js +0 -0
- package/dist/node_modules/@catui/ai/dist/utils/event-stream-types.js +0 -0
- package/dist/node_modules/@catui/ai/dist/utils/event-stream.js +1 -0
- package/dist/node_modules/@catui/ai/dist/utils/http-proxy.js +1 -0
- package/dist/node_modules/@catui/ai/dist/utils/json-parse.js +1 -0
- package/dist/node_modules/@catui/ai/dist/utils/oauth/anthropic.js +1 -0
- package/dist/node_modules/@catui/ai/dist/utils/oauth/decode-credential.js +1 -0
- package/dist/node_modules/@catui/ai/dist/utils/oauth/github-copilot.js +1 -0
- package/dist/node_modules/@catui/ai/dist/utils/oauth/google-antigravity.js +1 -0
- package/dist/node_modules/@catui/ai/dist/utils/oauth/google-gemini-cli.js +1 -0
- package/dist/node_modules/@catui/ai/dist/utils/oauth/index.js +1 -0
- package/dist/node_modules/@catui/ai/dist/utils/oauth/openai-codex.js +11 -0
- package/dist/node_modules/@catui/ai/dist/utils/oauth/pkce.js +1 -0
- package/dist/node_modules/@catui/ai/dist/utils/oauth/types.js +0 -0
- package/dist/node_modules/@catui/ai/dist/utils/overflow.js +1 -0
- package/dist/node_modules/@catui/ai/dist/utils/sanitize-unicode.js +1 -0
- package/dist/node_modules/@catui/ai/dist/utils/typebox-helpers.js +1 -0
- package/dist/node_modules/@catui/ai/dist/utils/validation.js +6 -0
- package/dist/node_modules/@catui/ai/package.json +106 -0
- package/dist/node_modules/@catui/tui/dist/autocomplete.js +2 -0
- package/dist/node_modules/@catui/tui/dist/components/box.js +1 -0
- package/dist/node_modules/@catui/tui/dist/components/cached-container.js +1 -0
- package/dist/node_modules/@catui/tui/dist/components/cancellable-loader.js +1 -0
- package/dist/node_modules/@catui/tui/dist/components/editor.js +21 -0
- package/dist/node_modules/@catui/tui/dist/components/image.js +1 -0
- package/dist/node_modules/@catui/tui/dist/components/input.js +2 -0
- package/dist/node_modules/@catui/tui/dist/components/loader.js +1 -0
- package/dist/node_modules/@catui/tui/dist/components/markdown.js +7 -0
- package/dist/node_modules/@catui/tui/dist/components/select-list.js +1 -0
- package/dist/node_modules/@catui/tui/dist/components/settings-list.js +1 -0
- package/dist/node_modules/@catui/tui/dist/components/spacer.js +1 -0
- package/dist/node_modules/@catui/tui/dist/components/text.js +1 -0
- package/dist/node_modules/@catui/tui/dist/components/truncated-text.js +2 -0
- package/dist/node_modules/@catui/tui/dist/editor-component.js +0 -0
- package/dist/node_modules/@catui/tui/dist/fuzzy.js +1 -0
- package/dist/node_modules/@catui/tui/dist/index.js +1 -0
- package/dist/node_modules/@catui/tui/dist/keybindings.js +1 -0
- package/dist/node_modules/@catui/tui/dist/keys.js +5 -0
- package/dist/node_modules/@catui/tui/dist/kill-ring.js +1 -0
- package/dist/node_modules/@catui/tui/dist/stdin-buffer.js +1 -0
- package/dist/node_modules/@catui/tui/dist/terminal-image.js +1 -0
- package/dist/node_modules/@catui/tui/dist/terminal.js +1 -0
- package/dist/node_modules/@catui/tui/dist/tui.js +12 -0
- package/dist/node_modules/@catui/tui/dist/undo-stack.js +1 -0
- package/dist/node_modules/@catui/tui/dist/utils.js +2 -0
- package/dist/node_modules/@catui/tui/package.json +37 -0
- package/dist/packages/mem-core/src/store.d.ts +21 -0
- package/dist/packages/mem-core/src/store.js +1 -0
- package/dist/packages/mem-core/src/types.d.ts +329 -0
- package/dist/packages/mem-core/src/types.js +0 -0
- package/dist/packages/protocol/src/commands.d.ts +33 -0
- package/dist/packages/protocol/src/commands.js +0 -0
- package/dist/packages/protocol/src/flags.d.ts +20 -0
- package/dist/packages/protocol/src/flags.js +0 -0
- package/dist/packages/protocol/src/hooks.d.ts +17 -0
- package/dist/packages/protocol/src/hooks.js +0 -0
- package/dist/packages/protocol/src/index.d.ts +15 -0
- package/dist/packages/protocol/src/index.js +1 -0
- package/dist/packages/protocol/src/lifecycle.d.ts +61 -0
- package/dist/packages/protocol/src/lifecycle.js +0 -0
- package/dist/packages/protocol/src/tools.d.ts +77 -0
- package/dist/packages/protocol/src/tools.js +0 -0
- package/dist/packages/soul-core/src/config.d.ts +20 -0
- package/dist/packages/soul-core/src/config.js +1 -0
- package/dist/packages/soul-core/src/diagnostics.d.ts +23 -0
- package/dist/packages/soul-core/src/diagnostics.js +1 -0
- package/dist/packages/soul-core/src/evolution.d.ts +75 -0
- package/dist/packages/soul-core/src/evolution.js +1 -0
- package/dist/packages/soul-core/src/index.d.ts +13 -0
- package/dist/packages/soul-core/src/index.js +1 -0
- package/dist/packages/soul-core/src/injection.d.ts +35 -0
- package/dist/packages/soul-core/src/injection.js +8 -0
- package/dist/packages/soul-core/src/manager.d.ts +101 -0
- package/dist/packages/soul-core/src/manager.js +1 -0
- package/dist/packages/soul-core/src/store.d.ts +62 -0
- package/dist/packages/soul-core/src/store.js +1 -0
- package/dist/packages/soul-core/src/types.d.ts +317 -0
- package/dist/packages/soul-core/src/types.js +0 -0
- package/dist/public-config.d.ts +12 -0
- package/dist/public-config.js +1 -0
- package/dist/runtime.d.ts +9 -0
- package/dist/runtime.js +1 -0
- package/dist/session-compaction.d.ts +7 -0
- package/dist/session-compaction.js +1 -0
- package/dist/session.d.ts +7 -0
- package/dist/session.js +1 -0
- package/dist/skills.d.ts +7 -0
- package/dist/skills.js +1 -0
- package/dist/tools.d.ts +7 -0
- package/dist/tools.js +1 -0
- package/dist/utils/changelog.d.ts +20 -0
- package/dist/utils/changelog.js +4 -0
- package/dist/utils/diagnostics.d.ts +37 -0
- package/dist/utils/diagnostics.js +1 -0
- package/dist/utils/frontmatter.d.ts +7 -0
- package/dist/utils/frontmatter.js +4 -0
- package/dist/utils/git.d.ts +25 -0
- package/dist/utils/git.js +1 -0
- package/dist/utils/mime.d.ts +1 -0
- package/dist/utils/mime.js +1 -0
- package/dist/utils/photon.d.ts +6 -0
- package/dist/utils/photon.js +1 -0
- package/dist/utils/startup-profiler.d.ts +87 -0
- package/dist/utils/startup-profiler.js +2 -0
- package/docs/codex-goal-command-impl.md +1055 -0
- package/docs/codex-goal-vs-grub.md +500 -0
- package/docs/custom-provider.md +27 -0
- package/docs/extensions.md +27 -0
- package/docs/keybindings.md +27 -0
- package/docs/loop /351/207/215/346/236/204/345/256/214/346/210/220/346/200/273/347/273/223.md" +251 -0
- package/docs/loop /351/207/215/346/236/204/345/256/214/346/210/220/346/212/245/345/221/212.md" +123 -0
- package/docs/loop /351/207/215/346/236/204/346/226/271/346/241/210.md" +1222 -0
- package/docs/loop /351/207/215/346/236/204/346/226/271/346/241/210/345/256/236/347/216/260/346/212/245/345/221/212.md" +158 -0
- package/docs/loop /351/207/215/346/236/204/346/226/271/346/241/210/345/257/271/346/257/224/345/210/206/346/236/220.md" +128 -0
- package/docs/loop /351/207/215/346/236/204/350/256/241/345/210/222.md" +321 -0
- package/docs/loop-usage-examples.md +215 -0
- package/docs/models.md +27 -0
- package/docs/packages.md +27 -0
- package/docs/pi-design-philosophy.md +457 -0
- package/docs/planmode.md +1987 -0
- package/docs/prompt-templates.md +27 -0
- package/docs/providers.md +27 -0
- package/docs/sdk.md +27 -0
- package/docs/skills.md +27 -0
- package/docs/themes.md +27 -0
- package/docs/tui.md +27 -0
- package/package.json +191 -0
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
var Le=Object.defineProperty;var s=(k,e)=>Le(k,"name",{value:e,configurable:!0});import*as P from"node:fs";import*as J from"node:os";import*as D from"node:path";import{CombinedAutocompleteProvider as Be,CachedContainer as Ue,Container as v,Markdown as me,matchesKey as Oe,ProcessTerminal as qe,Spacer as u,Text as g,TruncatedText as ae,TUI as We,visibleWidth as pe}from"@catui/tui";import{spawn as Fe,spawnSync as re}from"child_process";import{APP_NAME as O,getDebugLogPath as He,getShareViewerUrl as Ne,VERSION as Ke}from"../../config.js";import{parseSkillBlock as _e}from"../../core/runtime/agent-session.js";import{FooterDataProvider as je}from"./footer-data-provider.js";import{KeybindingsManager as Qe}from"../../core/platform/keybindings.js";import{createCompactionSummaryMessage as Ge}from"../../core/messages.js";import{listMCPServers as fe,setMCPServerEnabled as Ve}from"../../core/mcp/mcp-config.js";import{getExtensionBackedBuiltinCommandNames as ze,formatSlashCommandDescription as Y,getLocalizedCommands as Xe,inferSlashCommandCategory as he}from"../../core/slash-commands.js";import{t as H}from"../../core/platform/i18n/index.js";import{getActivePersonaId as de,getPersonaDescription as Je,getPersonaDir as le,getPersonaMcpConfigPath as Ce,getPersonaMemoryDir as we,getPersonaSoulDir as ye,listPersonas as Se,setActivePersonaId as be,toAbsolutePath as I}from"../../core/persona/persona-manager.js";import{CATUI_WHATS_NEW as Ye}from"../../catui-defaults.js";import{getChangelogPath as Ze,parseChangelog as et}from"../../utils/changelog.js";import{copyToClipboard as tt}from"../utils/clipboard.js";import{ensureTool as Me,getToolPath as Te,prewarmTool as Ee}from"../../core/platform/utils/tools-manager.js";import{printTimings as st,time as N}from"../../core/platform/timings.js";import{ArminComponent as it}from"./components/armin.js";import{ImagePipelineController as nt}from"./controllers/image-pipeline-controller.js";import{SelfUpdateController as ot}from"./controllers/self-update-controller.js";import{InteractiveState as at}from"./state/interactive-state.js";import{PersistentSurfaceRegistry as rt}from"./controllers/extension-ui/persistent-surface-registry.js";import{PromptHost as ht}from"./controllers/extension-ui/prompt-host.js";import{CustomOverlayHost as dt}from"./controllers/extension-ui/custom-overlay-host.js";import{EditorComponentAdapter as lt}from"./controllers/extension-ui/editor-component-adapter.js";import{ModelOverlayController as ct}from"./controllers/model-overlay-controller.js";import{AuthProviderConfigController as ut}from"./controllers/auth-provider-config-controller.js";import{TreeOverlayController as gt}from"./controllers/tree-overlay-controller.js";import{SettingsOverlayController as mt}from"./controllers/settings-overlay-controller.js";import{SlashDispatcherController as pt}from"./controllers/slash-dispatcher-controller.js";import{InputSubmitController as ft}from"./controllers/input-submit-controller.js";import{InterruptController as Ct}from"./controllers/interrupt-controller.js";import{StreamRenderController as wt}from"./controllers/stream-render-controller.js";import{AssistantMessageComponent as xe}from"./components/assistant-message.js";import{BashExecutionComponent as ce}from"./components/bash-execution.js";import{BorderedLoader as Pe}from"./components/bordered-loader.js";import{BuddyPetComponent as yt}from"./components/buddy/pet-sprites.js";import{EditorBuddyLayout as St}from"./components/editor-buddy-layout.js";import{BranchSummaryMessageComponent as bt}from"./components/branch-summary-message.js";import{CatuiLoader as Mt}from"./components/catui-loader.js";import{NotificationQueue as Tt}from"./components/notification-queue.js";import{PersonaSelectorComponent as Et}from"./components/persona-selector.js";import{CompactionSummaryMessageComponent as xt}from"./components/compaction-summary-message.js";import{CustomEditor as Pt}from"./components/custom-editor.js";import{CustomMessageComponent as kt}from"./components/custom-message.js";import{DaxnutsComponent as $t}from"./components/daxnuts.js";import{DynamicBorder as Z}from"./components/dynamic-border.js";import{FooterComponent as At,renderContextProgressBar as Rt}from"./components/footer.js";import{appKey as L,appKeyHint as vt,editorKey as It,keyHint as Dt,rawKeyHint as q}from"./components/keybinding-hints.js";import{formatSoulStats as Lt}from"./components/soul-stats.js";import{SkillInvocationMessageComponent as Bt}from"./components/skill-invocation-message.js";import{ToolExecutionComponent as ke}from"./components/tool-execution.js";import{UserMessageComponent as $e}from"./components/user-message.js";import{RawText as Ut}from"./components/raw-text.js";import{getAvailableThemesWithPaths as Ot,getEditorTheme as qt,getMarkdownTheme as Wt,getThemeByName as Ft,initTheme as Ht,onThemeChange as Nt,setRegisteredThemes as ue,setTheme as Ae,setThemeInstance as Kt,theme as r}from"./theme/theme.js";import{getAgentLoopArgumentCompletions as _t,getLanguageArgumentCompletions as jt,getLoginArgumentCompletions as Qt,getMcpArgumentCompletions as Gt,getModelArgumentCompletions as Vt,getPersonaArgumentCompletions as zt,getThinkingArgumentCompletions as Xt}from"./slash-command-arguments.js";import{formatAgentLoopStatusLines as Jt}from"./agent-loop-status.js";function Yt(k){return typeof k=="object"&&k!==null&&"setExpanded"in k&&typeof k.setExpanded=="function"}s(Yt,"isExpandable");const Zt=process.env.CATUI_DEBUG==="1",Re=D.join(J.homedir(),".catui","agent","catui-debug.log");function ee(k){if(Zt)try{P.mkdirSync(D.dirname(Re),{recursive:!0}),P.appendFileSync(Re,`[${new Date().toISOString()}] [imode] ${k}
|
|
2
|
+
`)}catch{}}s(ee,"_dbg");class ni{static{s(this,"InteractiveMode")}options;session;ui;chatContainer;pendingMessagesContainer;statusContainer;defaultEditor;editor;autocompleteProvider;fdPath;startupToolsPrewarmed=!1;editorContainer;footer;buddyPet=null;buddyPetSpecies=null;buddyPetResetTimer;footerDataProvider;keybindings;version;isInitialized=!1;onInputCallback;catWorkingMessages=["Purring\u2026","Meowing\u2026","Napping\u2026","Stretching\u2026","Zooming\u2026","Sneaking\u2026","Pouncing\u2026","Scratching\u2026","Yawning\u2026","Blinking\u2026","Kneading\u2026","Crouching\u2026","Spinning\u2026","Twitching\u2026","Hiding\u2026"];catMessageIndex=Math.floor(Math.random()*15);catMessageLastSwitch=0;state=new at;skillCommands=new Map;unsubscribe;isBashMode=!1;bashComponent=void 0;pendingBashComponents=[];shutdownRequested=!1;statusTimers=new Set;notificationQueue;extensionTerminalInputUnsubscribers=new Set;widgetContainerAbove;widgetContainerBelow;buddySlot;editorBuddyLayout;headerContainer;builtInHeader=void 0;attachmentsContainer=void 0;imagePipeline;selfUpdate;authProviderConfig;modelOverlay;treeOverlay;settingsOverlay;slashDispatcher;inputSubmit;interrupt;streamRender;surfaces;promptHost;customOverlay;editorAdapter;get agent(){return this.session.agent}get sessionManager(){return this.session.sessionManager}get settingsManager(){return this.session.settingsManager}constructor(e,n={}){this.options=n,this.session=e,this.version=Ke,this.ui=new We(new qe,this.settingsManager.getShowHardwareCursor()),this.ui.setClearOnShrink(this.settingsManager.getClearOnShrink()),this.headerContainer=new v,this.chatContainer=new Ue,this.pendingMessagesContainer=new v,this.statusContainer=new v,this.widgetContainerAbove=new v,this.widgetContainerBelow=new v,this.notificationQueue=new Tt(this.ui,r),this.keybindings=Qe.create();const i=this.settingsManager.getEditorPaddingX(),o=this.settingsManager.getAutocompleteMaxVisible();this.defaultEditor=new Pt(this.ui,qt(),this.keybindings,{paddingX:i,autocompleteMaxVisible:o}),this.editor=this.defaultEditor,this.editorContainer=new v,this.attachmentsContainer=new v,this.buddySlot=new v,this.editorBuddyLayout=new St(()=>this.editor,this.buddySlot),this.editorContainer.addChild(this.attachmentsContainer),this.editorContainer.addChild(this.editorBuddyLayout),this.imagePipeline=new nt({getCwd:s(()=>this.session.cwd,"getCwd"),requestRender:s(()=>this.ui.requestRender(),"requestRender"),showStatus:s(t=>this.showStatus(t),"showStatus"),getThemeName:s(()=>this.settingsManager.getTheme(),"getThemeName"),isEditorCursorAtTop:s(()=>this.editor.isCursorOnFirstVisualLine?.()??!this.editor.getText().includes(`
|
|
3
|
+
`),"isEditorCursorAtTop"),getEditorContainer:s(()=>this.editorContainer,"getEditorContainer"),getAttachmentsContainer:s(()=>this.attachmentsContainer,"getAttachmentsContainer"),getEditorBuddyLayout:s(()=>this.editorBuddyLayout,"getEditorBuddyLayout")}),this.selfUpdate=new ot({getChatContainer:s(()=>this.chatContainer,"getChatContainer"),requestRender:s(()=>this.ui.requestRender(),"requestRender"),getAutoUpdate:s(()=>this.settingsManager.getAutoUpdate(),"getAutoUpdate"),getSkippedVersion:s(()=>this.settingsManager.getSkippedVersion(),"getSkippedVersion"),setSkippedVersion:s(t=>this.settingsManager.setSkippedVersion(t),"setSkippedVersion"),setAutoUpdate:s(t=>this.settingsManager.setAutoUpdate(t),"setAutoUpdate"),showSelector:s((t,a)=>this.promptHost.selector(t,a),"showSelector")}),this.surfaces=new rt({requestRender:s(()=>this.ui.requestRender(),"requestRender"),getUi:s(()=>this.ui,"getUi"),getWidgetContainerAbove:s(()=>this.widgetContainerAbove,"getWidgetContainerAbove"),getWidgetContainerBelow:s(()=>this.widgetContainerBelow,"getWidgetContainerBelow"),getHeaderContainer:s(()=>this.headerContainer,"getHeaderContainer"),getBuiltInHeader:s(()=>this.builtInHeader,"getBuiltInHeader"),getFooter:s(()=>this.footer,"getFooter"),getFooterDataProvider:s(()=>this.footerDataProvider,"getFooterDataProvider")}),this.promptHost=new ht({getEditorContainer:s(()=>this.editorContainer,"getEditorContainer"),getUi:s(()=>this.ui,"getUi"),getEditor:s(()=>this.editor,"getEditor"),getEditorBuddyLayout:s(()=>this.editorBuddyLayout,"getEditorBuddyLayout"),getKeybindings:s(()=>this.keybindings,"getKeybindings"),remountEditorShell:s(()=>this.remountEditorShell(),"remountEditorShell")}),this.customOverlay=new dt({getEditor:s(()=>this.editor,"getEditor"),getUi:s(()=>this.ui,"getUi"),getEditorContainer:s(()=>this.editorContainer,"getEditorContainer"),getKeybindings:s(()=>this.keybindings,"getKeybindings"),remountEditorShell:s(()=>this.remountEditorShell(),"remountEditorShell")}),this.editorAdapter=new lt({getEditor:s(()=>this.editor,"getEditor"),setEditor:s(t=>{this.editor=t},"setEditor"),getDefaultEditor:s(()=>this.defaultEditor,"getDefaultEditor"),getEditorContainer:s(()=>this.editorContainer,"getEditorContainer"),getUi:s(()=>this.ui,"getUi"),getKeybindings:s(()=>this.keybindings,"getKeybindings"),getAutocompleteProvider:s(()=>this.autocompleteProvider,"getAutocompleteProvider"),remountEditorShell:s(()=>this.remountEditorShell(),"remountEditorShell")}),this.footerDataProvider=new je(e.cwd),this.footer=new At(e,this.footerDataProvider,this.settingsManager.getShowTokenStats()),this.footer.setAutoCompactEnabled(e.autoCompactionEnabled),this.authProviderConfig=new ut({modelRegistry:this.session.modelRegistry,surface:{showSelector:s(t=>this.showSelector(t),"showSelector"),showStatus:s(t=>this.showStatus(t),"showStatus"),showError:s(t=>this.showError(t),"showError"),promptInput:s((t,a,h)=>this.promptHost.input(t,a,h),"promptInput"),requestRender:s(()=>this.ui.requestRender(),"requestRender"),getUi:s(()=>this.ui,"getUi"),getEditorContainer:s(()=>this.editorContainer,"getEditorContainer"),getEditor:s(()=>this.editor,"getEditor"),remountEditorShell:s(()=>this.remountEditorShell(),"remountEditorShell")},modelBridge:{getCurrentModel:s(()=>this.session.model,"getCurrentModel"),setCurrentModel:s(async t=>{await this.session.setModel(t),this.footer.invalidate(),this.updateEditorBorderColor()},"setCurrentModel"),showModelSelector:s((t,a)=>this.modelOverlay.showModelSelector(t,a),"showModelSelector"),applySelectedModel:s(t=>this.modelOverlay.applySelectedModel(t),"applySelectedModel"),updateAvailableProviderCount:s(()=>this.modelOverlay.updateAvailableProviderCount(),"updateAvailableProviderCount")}}),this.modelOverlay=new ct({modelSession:{getModel:s(()=>this.session.model,"getModel"),setModel:s(t=>this.session.setModel(t),"setModel"),cycleModel:s(t=>this.session.cycleModel(t),"cycleModel"),getThinkingLevel:s(()=>this.session.thinkingLevel,"getThinkingLevel"),setThinkingLevel:s(t=>this.session.setThinkingLevel(t),"setThinkingLevel"),cycleThinkingLevel:s(()=>this.session.cycleThinkingLevel(),"cycleThinkingLevel"),getAvailableThinkingLevels:s(()=>this.session.getAvailableThinkingLevels(),"getAvailableThinkingLevels"),getScopedModels:s(()=>this.session.scopedModels,"getScopedModels"),setScopedModels:s(t=>this.session.setScopedModels(t),"setScopedModels")},modelCatalog:{refresh:s(()=>this.session.modelRegistry.refresh(),"refresh"),getAvailable:s(()=>this.session.modelRegistry.getAvailable(),"getAvailable"),getAll:s(()=>this.session.modelRegistry.getAll(),"getAll"),find:s((t,a)=>this.session.modelRegistry.find(t,a),"find"),appendOpenRouterModel:s((t,a)=>this.session.modelRegistry.appendOpenRouterModel(t,a),"appendOpenRouterModel"),getCredentialType:s(t=>this.session.modelRegistry.authStorage.get(t)?.type,"getCredentialType"),getRegistry:s(()=>this.session.modelRegistry,"getRegistry")},modelSettings:{getEnabledModels:s(()=>this.settingsManager.getEnabledModels(),"getEnabledModels"),setEnabledModels:s(t=>this.settingsManager.setEnabledModels(t),"setEnabledModels"),setDefaultModelAndProvider:s((t,a)=>this.settingsManager.setDefaultModelAndProvider(t,a),"setDefaultModelAndProvider")},providerConfig:{ensureProviderConfiguredForSelection:s(t=>this.authProviderConfig.ensureProviderConfiguredForSelection(t),"ensureProviderConfiguredForSelection"),handleProviderSelectionFromSelector:s((t,a)=>this.authProviderConfig.handleProviderSelectionFromSelector(t,a),"handleProviderSelectionFromSelector"),promptForProviderApiKey:s((t,a)=>this.authProviderConfig.promptForProviderApiKey(t,a),"promptForProviderApiKey")},surface:{showSelector:s(t=>this.showSelector(t),"showSelector"),showStatus:s(t=>this.showStatus(t),"showStatus"),showError:s(t=>this.showError(t),"showError"),promptInput:s((t,a,h)=>this.promptHost.input(t,a,h),"promptInput"),getUi:s(()=>this.ui,"getUi")},footer:{invalidate:s(()=>this.footer.invalidate(),"invalidate"),setAvailableProviderCount:s(t=>this.footerDataProvider.setAvailableProviderCount(t),"setAvailableProviderCount"),updateEditorBorderColor:s(()=>this.updateEditorBorderColor(),"updateEditorBorderColor")},playDaxnuts:s(()=>this.handleDaxnuts(),"playDaxnuts")}),this.treeOverlay=new gt({session:this.session,getSessionManager:s(()=>this.sessionManager,"getSessionManager"),surface:{showSelector:s(t=>this.showSelector(t),"showSelector"),showStatus:s(t=>this.showStatus(t),"showStatus"),showError:s(t=>this.showError(t),"showError"),requestRender:s(()=>this.ui.requestRender(),"requestRender"),getUi:s(()=>this.ui,"getUi"),getChatContainer:s(()=>this.chatContainer,"getChatContainer"),getStatusContainer:s(()=>this.statusContainer,"getStatusContainer"),clearChat:s(()=>{this.clearStatusTimers(),this.chatContainer.clear()},"clearChat"),clearTransientSessionUi:s(()=>{this.state.loadingAnimation&&(this.state.loadingAnimation.stop(),this.state.loadingAnimation=void 0),this.statusContainer.clear(),this.pendingMessagesContainer.clear(),this.state.compactionQueuedMessages=[],this.state.streamingComponent=void 0,this.state.streamingMessage=void 0,this.state.pendingTools.clear(),this.imagePipeline.clearAttachments()},"clearTransientSessionUi"),addSessionNavigationBanner:s(t=>this.addSessionNavigationBanner(t),"addSessionNavigationBanner"),renderInitialMessages:s(()=>this.renderInitialMessages(),"renderInitialMessages"),getEditorText:s(()=>this.editor.getText(),"getEditorText"),setEditorText:s(t=>this.editor.setText(t),"setEditorText"),getEscapeHandler:s(()=>this.defaultEditor.onEscape,"getEscapeHandler"),setEscapeHandler:s(t=>{this.defaultEditor.onEscape=t},"setEscapeHandler")},promptHost:{selector:s((t,a)=>this.promptHost.selector(t,a),"selector"),editor:s((t,a)=>this.promptHost.editor(t,a),"editor")},keybindings:this.keybindings,shutdown:s(()=>this.shutdown(),"shutdown")}),this.settingsOverlay=new mt({session:this.session,settingsManager:this.settingsManager,surface:{showSelector:s(t=>this.showSelector(t),"showSelector"),showStatus:s(t=>this.showStatus(t),"showStatus"),showError:s(t=>this.showError(t),"showError"),invalidateUi:s(()=>this.ui.invalidate(),"invalidateUi"),requestRender:s(()=>this.ui.requestRender(),"requestRender"),setShowHardwareCursor:s(t=>this.ui.setShowHardwareCursor(t),"setShowHardwareCursor"),setClearOnShrink:s(t=>this.ui.setClearOnShrink(t),"setClearOnShrink")},footer:{setAutoCompactEnabled:s(t=>this.footer.setAutoCompactEnabled(t),"setAutoCompactEnabled"),setShowTokenStats:s(t=>this.footer.setShowTokenStats(t),"setShowTokenStats"),invalidate:s(()=>this.footer.invalidate(),"invalidate")},editor:{setPaddingX:s(t=>{this.defaultEditor.setPaddingX(t),this.editor!==this.defaultEditor&&this.editor.setPaddingX!==void 0&&this.editor.setPaddingX(t)},"setPaddingX"),setAutocompleteMaxVisible:s(t=>{this.defaultEditor.setAutocompleteMaxVisible(t),this.editor!==this.defaultEditor&&this.editor.setAutocompleteMaxVisible!==void 0&&this.editor.setAutocompleteMaxVisible(t)},"setAutocompleteMaxVisible"),updateBorderColor:s(()=>this.updateEditorBorderColor(),"updateBorderColor")},render:{setToolImagesEnabled:s(t=>{for(const a of this.chatContainer.children)a instanceof ke&&a.setShowImages(t)},"setToolImagesEnabled"),setAssistantThinkingHidden:s(t=>{for(const a of this.chatContainer.children)a instanceof xe&&a.setHideThinkingBlock(t);this.clearStatusTimers(),this.chatContainer.clear()},"setAssistantThinkingHidden"),rebuildChatFromMessages:s(()=>this.rebuildChatFromMessages(),"rebuildChatFromMessages")},getHideThinkingBlock:s(()=>this.state.hideThinkingBlock,"getHideThinkingBlock"),setHideThinkingBlock:s(t=>{this.state.hideThinkingBlock=t},"setHideThinkingBlock"),rebuildAutocomplete:s(()=>this.setupAutocomplete(this.fdPath),"rebuildAutocomplete"),syncBuddyPet:s(()=>this.syncBuddyPet(),"syncBuddyPet")}),this.slashDispatcher=new pt({clearEditor:s(()=>this.editor.setText(""),"clearEditor"),settings:{showSettingsSelector:s(()=>this.settingsOverlay.showSettingsSelector(),"showSettingsSelector")},model:{showScopedModelsSelector:s(()=>this.modelOverlay.showModelsSelector(),"showScopedModelsSelector"),handleModelCommand:s(t=>this.modelOverlay.handleModelCommand(t),"handleModelCommand"),handleThinkingCommand:s(t=>this.modelOverlay.handleThinkingCommand(t),"handleThinkingCommand")},auth:{handleApiKeyCommand:s(()=>this.authProviderConfig.handleApiKeyCommand(),"handleApiKeyCommand"),handleLoginCommand:s(t=>this.authProviderConfig.handleLoginCommand(t),"handleLoginCommand"),showLogoutSelector:s(()=>this.authProviderConfig.showOAuthSelector("logout"),"showLogoutSelector")},tree:{showForkSelector:s(()=>this.treeOverlay.showForkSelector(),"showForkSelector"),showTreeSelector:s(()=>this.treeOverlay.showTreeSelector(),"showTreeSelector"),showSessionSelector:s(()=>this.treeOverlay.showSessionSelector(),"showSessionSelector")},selfUpdate:{handleUpdateCommand:s(()=>this.selfUpdate.handleUpdateCommand(),"handleUpdateCommand"),handleReinstallCommand:s(()=>this.selfUpdate.handleReinstallCommand(),"handleReinstallCommand")},commands:{isExtensionCommand:s(t=>this.isExtensionCommand(t),"isExtensionCommand"),handleAgentLoopCommand:s(t=>this.handleAgentLoopCommand(t),"handleAgentLoopCommand"),handleMcpCommand:s(t=>this.handleMcpCommand(t),"handleMcpCommand"),handleExportCommand:s(t=>this.handleExportCommand(t),"handleExportCommand"),handleShareCommand:s(()=>this.handleShareCommand(),"handleShareCommand"),handleCopyCommand:s(()=>this.handleCopyCommand(),"handleCopyCommand"),handleStatusCommand:s(()=>this.handleStatusCommand(),"handleStatusCommand"),handleUsageCommand:s(()=>this.handleUsageCommand(),"handleUsageCommand"),handleNameCommand:s(t=>this.handleNameCommand(t),"handleNameCommand"),handleSessionCommand:s(()=>this.handleSessionCommand(),"handleSessionCommand"),handleChangelogCommand:s(()=>this.handleChangelogCommand(),"handleChangelogCommand"),handleHotkeysCommand:s(()=>this.handleHotkeysCommand(),"handleHotkeysCommand"),handleShowResourcesCommand:s(()=>this.handleShowResourcesCommand(),"handleShowResourcesCommand"),handleClearCommand:s(()=>this.handleClearCommand(),"handleClearCommand"),handleCompactCommand:s(t=>this.handleCompactCommand(t),"handleCompactCommand"),handleReloadCommand:s(()=>this.handleReloadCommand(),"handleReloadCommand"),handleLanguageCommand:s(t=>this.handleLanguageCommand(t),"handleLanguageCommand"),handleSoulCommand:s(()=>this.handleSoulCommand(),"handleSoulCommand"),handlePersonaCommand:s(t=>this.handlePersonaCommand(t),"handlePersonaCommand"),handleMemoryCommand:s(()=>this.handleMemoryCommand(),"handleMemoryCommand"),handleArminSaysHi:s(()=>this.handleArminSaysHi(),"handleArminSaysHi"),handleBrowserOptInCommand:s(()=>this.handleBrowserOptInCommand(),"handleBrowserOptInCommand"),shutdown:s(()=>this.shutdown(),"shutdown")}}),this.inputSubmit=new ft({editor:{setText:s(t=>this.editor.setText(t),"setText"),addToHistory:s(t=>this.editor.addToHistory?.(t),"addToHistory"),handleExternalInput:s(t=>this.onInputCallback?(this.onInputCallback(t),this.editor.addToHistory?.(t),!0):!1,"handleExternalInput"),setBashMode:s(t=>{this.isBashMode=t},"setBashMode"),updateBorderColor:s(()=>this.updateEditorBorderColor(),"updateBorderColor")},slash:{execute:s(t=>this.slashDispatcher.execute(t),"execute")},image:{awaitPendingPaste:s(()=>this.imagePipeline.awaitPendingPaste(),"awaitPendingPaste"),extractImagesFromText:s(t=>this.imagePipeline.extractImagesFromText(t),"extractImagesFromText"),takePendingAttachments:s(()=>this.imagePipeline.takePendingAttachments(),"takePendingAttachments"),processAttachmentFiles:s(t=>this.imagePipeline.processAttachmentFiles(t),"processAttachmentFiles"),cleanupClipboardImages:s(()=>this.imagePipeline.cleanupClipboardImages(),"cleanupClipboardImages")},session:{isBashRunning:s(()=>this.session.isBashRunning,"isBashRunning"),isCompacting:s(()=>this.session.isCompacting,"isCompacting"),isStreaming:s(()=>this.session.isStreaming,"isStreaming"),getModel:s(()=>this.session.model,"getModel"),getCwd:s(()=>this.session.cwd,"getCwd"),promptAfterRender:s((t,a)=>this.promptAfterRender(t,a),"promptAfterRender"),queueCompactionMessage:s((t,a)=>this.queueCompactionMessage(t,a),"queueCompactionMessage")},commands:{isExtensionCommand:s(t=>this.isExtensionCommand(t),"isExtensionCommand"),handlePersonaCommand:s(t=>this.handlePersonaCommand(t),"handlePersonaCommand"),handleBashCommand:s((t,a)=>this.handleBashCommand(t,a),"handleBashCommand")},render:{showStatus:s(t=>this.showStatus(t),"showStatus"),showWarning:s(t=>this.showWarning(t),"showWarning"),showError:s(t=>this.showError(t),"showError"),notify:s((t,a)=>this.notify(t,a),"notify"),requestRender:s(()=>this.ui.requestRender(),"requestRender"),flushPendingBashComponents:s(()=>this.flushPendingBashComponents(),"flushPendingBashComponents"),updatePendingMessagesDisplay:s(()=>this.updatePendingMessagesDisplay(),"updatePendingMessagesDisplay"),addOptimisticUserMessage:s((t,a)=>{this.state.optimisticUserMessages.push({text:t}),this.addMessageToChat({role:"user",content:a,timestamp:Date.now()})},"addOptimisticUserMessage"),rollbackFirstOptimisticUserMessageIfMatches:s(t=>{this.state.optimisticUserMessages.length>0&&this.state.optimisticUserMessages[0]?.text===t&&this.state.optimisticUserMessages.shift()},"rollbackFirstOptimisticUserMessageIfMatches")}}),this.interrupt=new Ct({queue:{isLoadingAnimationActive:s(()=>!!this.state.loadingAnimation,"isLoadingAnimationActive"),restoreQueuedMessagesWithAbort:s(()=>{this.restoreQueuedMessagesToEditor({abort:!0})},"restoreQueuedMessagesWithAbort")},runtime:{isStreaming:s(()=>this.session.isStreaming,"isStreaming"),isBashRunning:s(()=>this.session.isBashRunning,"isBashRunning"),abortAgent:s(()=>this.agent.abort(),"abortAgent"),abortBash:s(()=>this.session.abortBash(),"abortBash")},bash:{isBashMode:s(()=>this.isBashMode,"isBashMode"),exitBashMode:s(()=>{this.editor.setText(""),this.isBashMode=!1,this.updateEditorBorderColor()},"exitBashMode")},editor:{getText:s(()=>this.editor.getText(),"getText"),clearEditor:s(()=>this.clearEditor(),"clearEditor")},tree:{getDoubleEscapeAction:s(()=>this.settingsManager.getDoubleEscapeAction(),"getDoubleEscapeAction"),showTreeSelector:s(()=>this.treeOverlay.showTreeSelector(),"showTreeSelector"),showForkSelector:s(()=>this.treeOverlay.showForkSelector(),"showForkSelector")},lifecycle:{requestShutdown:s(()=>{this.shutdown()},"requestShutdown"),suspend:s(()=>this.suspend(),"suspend")}}),this.streamRender=new wt({state:{get:s(()=>this.state,"get")},layout:{getUi:s(()=>this.ui,"getUi"),getChatContainer:s(()=>this.chatContainer,"getChatContainer"),getStatusContainer:s(()=>this.statusContainer,"getStatusContainer"),addMessageToChat:s(t=>this.addMessageToChat(t),"addMessageToChat"),updatePendingMessagesDisplay:s(()=>this.updatePendingMessagesDisplay(),"updatePendingMessagesDisplay"),rebuildChatFromMessages:s(()=>this.rebuildChatFromMessages(),"rebuildChatFromMessages"),requestRender:s(()=>this.ui.requestRender(),"requestRender"),invalidateFooter:s(()=>this.footer.invalidate(),"invalidateFooter")},loaders:{getSessionId:s(()=>this.sessionManager.getSessionId(),"getSessionId"),getDefaultWorkingMessage:s(()=>this.getNextCatMessage(),"getDefaultWorkingMessage"),getInterruptKeyHint:s(()=>L(this.keybindings,"interrupt"),"getInterruptKeyHint"),setBuddyPetState:s((t,a,h)=>this.setBuddyPetState(t,a,h),"setBuddyPetState"),startAgentRunTimer:s(()=>this.startAgentRunTimer(),"startAgentRunTimer"),stopAgentRunTimer:s(()=>this.stopAgentRunTimer(),"stopAgentRunTimer"),updateWorkingMessage:s(t=>this.updateWorkingMessage(t),"updateWorkingMessage"),formatElapsedSeconds:s(t=>this.formatElapsedSeconds(t),"formatElapsedSeconds"),isInPlanMode:s(()=>this.footerDataProvider.getExtensionStatuses().has("plan"),"isInPlanMode")},toolTrace:{shouldRenderToolTrace:s(t=>this.shouldRenderToolTrace(t),"shouldRenderToolTrace"),getRegisteredToolDefinition:s(t=>this.getRegisteredToolDefinition(t),"getRegisteredToolDefinition"),getShowImages:s(()=>this.settingsManager.getShowImages(),"getShowImages")},runtime:{getRetryAttempt:s(()=>this.session.retryAttempt,"getRetryAttempt"),abortCompaction:s(()=>this.session.abortCompaction(),"abortCompaction"),abortRetry:s(()=>this.session.abortRetry(),"abortRetry"),flushCompactionQueue:s(t=>{this.flushCompactionQueue(t)},"flushCompactionQueue"),checkShutdownRequested:s(()=>this.checkShutdownRequested(),"checkShutdownRequested"),clearAttachments:s(()=>this.imagePipeline.clearAttachments(),"clearAttachments"),getAgentDir:s(()=>this.session.agentDir,"getAgentDir")},escape:{getHandler:s(()=>this.defaultEditor.onEscape,"getHandler"),setHandler:s(t=>{this.defaultEditor.onEscape=t},"setHandler")},surface:{ensureInitialized:s(async()=>{this.isInitialized||await this.init()},"ensureInitialized"),restoreEditorFocusIfPossible:s(()=>this.promptHost.restoreEditorFocusIfPossible(),"restoreEditorFocusIfPossible"),getUserMessageText:s(t=>this.getUserMessageText(t),"getUserMessageText"),getMarkdownThemeWithSettings:s(()=>this.getMarkdownThemeWithSettings(),"getMarkdownThemeWithSettings"),showStatus:s(t=>this.showStatus(t),"showStatus"),showError:s(t=>this.showError(t),"showError")}}),this.syncBuddyPet(),this.state.hideThinkingBlock=this.settingsManager.getHideThinkingBlock(),ue(this.session.resourceLoader.getThemes().themes),Ht(this.settingsManager.getTheme(),!0),this.session.setSlashCommandExecutor(t=>this.slashDispatcher.execute(t,{clearEditor:!1}))}setupAutocomplete(e){const i=Xe(H).map(l=>({name:l.name,description:Y(l.description,l.category,H)})),o=i.find(l=>l.name==="model");o&&(o.getArgumentCompletions=(l,T)=>{const $=this.session.scopedModels.length>0?this.session.scopedModels.map(A=>A.model):this.session.modelRegistry.getAvailable();return Vt(l,T,$)});const t=i.find(l=>l.name==="thinking");t&&(t.getArgumentCompletions=(l,T)=>Xt(l,T,this.session.getAvailableThinkingLevels()));const a=i.find(l=>l.name==="agent-loop");a&&(a.getArgumentCompletions=_t);const h=i.find(l=>l.name==="mcp");h&&(h.getArgumentCompletions=(l,T)=>Gt(l,T,fe()));const c=i.find(l=>l.name==="language");c&&(c.getArgumentCompletions=jt);const d=i.find(l=>l.name==="persona");d&&(d.getArgumentCompletions=(l,T)=>zt(l,T,Se(),de()));const m=i.find(l=>l.name==="login");m&&(m.getArgumentCompletions=(l,T)=>Qt(l,T,this.authProviderConfig.getLoginSelectorProviders("login")));const f=this.session.promptTemplates.map(l=>({name:l.name,description:Y(l.description,he(l.name,"prompt"),H)})),M=new Set(i.map(l=>l.name)),w=ze(),E=new Set([...M].filter(l=>!w.has(l))),S=this.session.extensionRunner?.getRegisteredCommands(E)??[],C=new Map(S.map(l=>[l.name,l]));for(const l of i){if(!w.has(l.name))continue;const T=C.get(l.name);T?.getArgumentCompletions&&(l.getArgumentCompletions=T.getArgumentCompletions)}const p=S.filter(l=>!M.has(l.name)).map(l=>({name:l.name,description:Y(l.description??"(extension command)",he(l.name,"extension"),H),getArgumentCompletions:l.getArgumentCompletions}));this.skillCommands.clear();const y=[];if(this.settingsManager.getEnableSkillCommands())for(const l of this.session.resourceLoader.getSkills().skills){const T=`skill:${l.name}`;this.skillCommands.set(T,l.filePath),y.push({name:T,description:Y(l.description,he(l.name,"skill"),H)})}this.autocompleteProvider=new Be([...i,...f,...p,...y],this.session.cwd,e),this.defaultEditor.setAutocompleteProvider(this.autocompleteProvider),this.editor!==this.defaultEditor&&this.editor.setAutocompleteProvider?.(this.autocompleteProvider);const b=new Set([...i,...f,...p,...y].map(l=>l.name));this.defaultEditor.enableSlashHighlight(()=>b,r)}prewarmStartupTools(){this.startupToolsPrewarmed||(this.startupToolsPrewarmed=!0,N("interactive.tools.prewarm.start"),Ee("fd"),Ee("rg"),Promise.all([Me("fd",!0),Me("rg",!0)]).then(([e])=>{const n=e??Te("fd")??void 0;!n||n===this.fdPath||(this.fdPath=n,this.setupAutocomplete(this.fdPath))}).finally(()=>{N("interactive.tools.prewarm.end")}))}async init(){if(!this.isInitialized){if(N("interactive.init.start"),this.imagePipeline.cleanupStaleClipboardFiles(),this.fdPath=Te("fd")??void 0,this.ui.addChild(this.headerContainer),this.options.verbose||!this.settingsManager.getQuietStartup()){const e=r.bold(r.fg("accent",O))+r.fg("dim",` v${this.version}`),n=O==="catui"||O==="catui"?`${r.fg("dim",Ye)}
|
|
4
|
+
`:"",i=this.keybindings,o=s((a,h)=>vt(i,a,h),"hint"),t=[o("interrupt","to interrupt"),o("clear","to clear"),q(`${L(i,"clear")} twice`,"to exit"),o("exit","to exit (empty)"),o("suspend","to suspend"),Dt("deleteToLineEnd","to delete to end"),o("cycleThinkingLevel","to cycle thinking level"),q(`${L(i,"cycleModelForward")}/${L(i,"cycleModelBackward")}`,"to cycle models"),o("selectModel","to select model"),o("selectProviderThenModel","to select provider then model"),o("expandTools","to expand tools"),o("toggleThinking","to expand thinking"),o("externalEditor","for external editor"),q("/","for commands"),q("!","to run bash"),q("!!","to run bash (no context)"),o("followUp","to queue follow-up"),o("dequeue","to edit all queued messages"),o("pasteImage","to paste image"),q("drop files","to attach")].join(`
|
|
5
|
+
`);this.builtInHeader=new g(`${e}
|
|
6
|
+
${n}${t}`,1,0),this.headerContainer.addChild(new u(1)),this.headerContainer.addChild(this.builtInHeader),this.headerContainer.addChild(new u(1))}else this.builtInHeader=new g("",0,0),this.headerContainer.addChild(this.builtInHeader);this.ui.addChild(this.notificationQueue),this.ui.addChild(this.chatContainer),this.ui.addChild(this.pendingMessagesContainer),this.ui.addChild(this.statusContainer),this.surfaces.renderWidgets(),this.ui.addChild(this.widgetContainerAbove),this.ui.addChild(this.editorContainer),this.ui.addChild(this.widgetContainerBelow),this.ui.addChild(this.footer),this.ui.setFocus(this.editor),this.setupKeyHandlers(),this.setupEditorSubmitHandler(),await this.applyPersonaFromSessionIfAny(),await this.initExtensions(),this.renderInitialMessages(),this.ui.start(),N("interactive.ui.start"),this.isInitialized=!0,this.prewarmStartupTools(),this.updateTerminalTitle(),this.subscribeToAgent(),this.chatContainer.clear(),this.renderInitialMessages(),await this.session.extensionRunner?.emit({type:"session_ready"}),Nt(()=>{this.ui.invalidate(),this.updateEditorBorderColor(),this.ui.requestRender()}),this.footerDataProvider.onBranchChange(()=>{this.ui.requestRender()}),await this.modelOverlay.updateAvailableProviderCount(),N("interactive.firstInput.ready"),st(),this.session.warmupMcpTools()}}updateTerminalTitle(){const e=D.basename(this.session.cwd),n=this.sessionManager.getSessionName();n?this.ui.terminal.setTitle(`\u270E - ${n} - ${e}`):this.ui.terminal.setTitle(`\u270E - ${e}`)}async run(){await this.init();const e=s(()=>{this.shutdown()},"signalShutdown");process.once("SIGHUP",e),process.once("SIGTERM",e),await this.selfUpdate.checkAutoUpdateOnStartup(),this.settingsManager.getAutoUpdate()!=="always"&&this.selfUpdate.checkForNewVersion().then(d=>{d&&this.selfUpdate.showNewVersionNotification(d)});const{migratedProviders:i,modelFallbackMessage:o,initialMessage:t,initialImages:a,initialMessages:h}=this.options;i&&i.length>0&&this.showWarning(`Migrated credentials to auth.json: ${i.join(", ")}`);const c=this.session.modelRegistry.getError();if(c&&this.showError(`models.json error: ${c}`),o&&this.showWarning(o),t)try{await this.session.prompt(t,{images:a})}catch(d){const m=d instanceof Error?d.message:"Unknown error occurred";this.showError(m)}if(h)for(const d of h)try{await this.session.prompt(d)}catch(m){const f=m instanceof Error?m.message:"Unknown error occurred";this.showError(f)}for(;;){const d=await this.getUserInput(),m=performance.now();ee(`main loop: got input "${d.slice(0,80)}"`);try{await this.session.prompt(d),ee(`main loop: prompt returned normally (${(performance.now()-m).toFixed(0)}ms)`)}catch(f){ee(`main loop: prompt threw: ${f} (${(performance.now()-m).toFixed(0)}ms)`);const M=f instanceof Error?f.message:"Unknown error occurred";this.showError(M)}}}getMarkdownThemeWithSettings(){return{...Wt(),codeBlockIndent:this.settingsManager.getCodeBlockIndent()}}formatDisplayPath(e){const n=J.homedir();let i=e;return i.startsWith(n)&&(i=`~${i.slice(n.length)}`),i}getShortPath(e,n){const i=e.match(/node_modules\/(@?[^/]+(?:\/[^/]+)?)\/(.*)/);if(i&&n.startsWith("npm:"))return i[2];const o=e.match(/git\/[^/]+\/[^/]+\/(.*)/);return o&&n.startsWith("git:")?o[1]:this.formatDisplayPath(e)}getDisplaySourceInfo(e,n){return e==="local"?n==="user"?{label:"user",color:"muted"}:n==="project"?{label:"project",color:"muted"}:n==="temporary"?{label:"path",scopeLabel:"temp",color:"muted"}:{label:"path",color:"muted"}:e==="cli"?{label:"path",scopeLabel:n==="temporary"?"temp":void 0,color:"muted"}:{label:e,scopeLabel:n==="user"?"user":n==="project"?"project":n==="temporary"?"temp":void 0,color:"accent"}}getScopeGroup(e,n){return e==="cli"||n==="temporary"?"path":n==="user"?"user":n==="project"?"project":"path"}isPackageSource(e){return e.startsWith("npm:")||e.startsWith("git:")}buildScopeGroups(e,n){const i={user:{scope:"user",paths:[],packages:new Map},project:{scope:"project",paths:[],packages:new Map},path:{scope:"path",paths:[],packages:new Map}};for(const o of e){const t=this.findMetadata(o,n),a=t?.source??"local",h=t?.scope??"project",c=this.getScopeGroup(a,h),d=i[c];if(this.isPackageSource(a)){const m=d.packages.get(a)??[];m.push(o),d.packages.set(a,m)}else d.paths.push(o)}return[i.project,i.user,i.path].filter(o=>o.paths.length>0||o.packages.size>0)}formatScopeGroups(e,n){const i=[];for(const o of e){i.push(` ${r.fg("accent",o.scope)}`);const t=[...o.paths].sort((h,c)=>h.localeCompare(c));for(const h of t)i.push(r.fg("dim",` ${n.formatPath(h)}`));const a=Array.from(o.packages.entries()).sort(([h],[c])=>h.localeCompare(c));for(const[h,c]of a){i.push(` ${r.fg("mdLink",h)}`);const d=[...c].sort((m,f)=>m.localeCompare(f));for(const m of d)i.push(r.fg("dim",` ${n.formatPackagePath(m,h)}`))}}return i.join(`
|
|
7
|
+
`)}findMetadata(e,n){const i=n.get(e);if(i)return i;let o=e;for(;o.includes("/");){o=o.substring(0,o.lastIndexOf("/"));const t=n.get(o);if(t)return t}}formatPathWithSource(e,n){const i=this.findMetadata(e,n);if(i){const o=this.getShortPath(e,i.source),{label:t,scopeLabel:a}=this.getDisplaySourceInfo(i.source,i.scope);return`${a?`${t} (${a})`:t} ${o}`}return this.formatDisplayPath(e)}formatDiagnostics(e,n){const i=[],o=new Map,t=[];for(const a of e)if(a.type==="collision"&&a.collision){const h=o.get(a.collision.name)??[];h.push(a),o.set(a.collision.name,h)}else t.push(a);for(const[a,h]of o){const c=h[0]?.collision;if(c){i.push(r.fg("warning",` "${a}" collision:`)),i.push(r.fg("dim",` ${r.fg("success","\u2713")} ${this.formatPathWithSource(c.winnerPath,n)}`));for(const d of h)d.collision&&i.push(r.fg("dim",` ${r.fg("warning","\u2717")} ${this.formatPathWithSource(d.collision.loserPath,n)} (skipped)`))}}for(const a of t)if(a.path){const h=this.formatPathWithSource(a.path,n);i.push(r.fg(a.type==="error"?"error":"warning",` ${h}`)),i.push(r.fg(a.type==="error"?"error":"warning",` ${a.message}`))}else i.push(r.fg(a.type==="error"?"error":"warning",` ${a.message}`));return i.join(`
|
|
8
|
+
`)}showLoadedResources(e){const n=e?.force||this.options.verbose||!this.settingsManager.getQuietStartup(),i=n||e?.showDiagnosticsWhenQuiet===!0;if(!n&&!i)return;const o=this.session.resourceLoader.getPathMetadata(),t=s((d,m="mdHeading")=>r.fg(m,`[${d}]`),"sectionHeader"),a=this.session.resourceLoader.getSkills(),h=this.session.resourceLoader.getPrompts(),c=this.session.resourceLoader.getThemes();if(n){const d=this.session.resourceLoader.getAgentsFiles().agentsFiles;if(d.length>0){this.chatContainer.addChild(new u(1));const S=d.map(C=>r.fg("dim",` ${this.formatDisplayPath(C.path)}`)).join(`
|
|
9
|
+
`);this.chatContainer.addChild(new g(`${t("Context")}
|
|
10
|
+
${S}`,0,0)),this.chatContainer.addChild(new u(1))}const m=a.skills;if(m.length>0){const S=m.map(y=>y.filePath),C=this.buildScopeGroups(S,o),p=this.formatScopeGroups(C,{formatPath:s(y=>this.formatDisplayPath(y),"formatPath"),formatPackagePath:s((y,b)=>this.getShortPath(y,b),"formatPackagePath")});this.chatContainer.addChild(new g(`${t("Skills")}
|
|
11
|
+
${p}`,0,0)),this.chatContainer.addChild(new u(1))}const f=this.session.promptTemplates;if(f.length>0){const S=f.map(b=>b.filePath),C=this.buildScopeGroups(S,o),p=new Map(f.map(b=>[b.filePath,b])),y=this.formatScopeGroups(C,{formatPath:s(b=>{const l=p.get(b);return l?`/${l.name}`:this.formatDisplayPath(b)},"formatPath"),formatPackagePath:s(b=>{const l=p.get(b);return l?`/${l.name}`:this.formatDisplayPath(b)},"formatPackagePath")});this.chatContainer.addChild(new g(`${t("Prompts")}
|
|
12
|
+
${y}`,0,0)),this.chatContainer.addChild(new u(1))}const M=e?.extensionPaths??[];if(M.length>0){const S=this.buildScopeGroups(M,o),C=this.formatScopeGroups(S,{formatPath:s(p=>this.formatDisplayPath(p),"formatPath"),formatPackagePath:s((p,y)=>this.getShortPath(p,y),"formatPackagePath")});this.chatContainer.addChild(new g(`${t("Extensions","mdHeading")}
|
|
13
|
+
${C}`,0,0)),this.chatContainer.addChild(new u(1))}const E=c.themes.filter(S=>S.sourcePath);if(E.length>0){const S=E.map(y=>y.sourcePath),C=this.buildScopeGroups(S,o),p=this.formatScopeGroups(C,{formatPath:s(y=>this.formatDisplayPath(y),"formatPath"),formatPackagePath:s((y,b)=>this.getShortPath(y,b),"formatPackagePath")});this.chatContainer.addChild(new g(`${t("Themes")}
|
|
14
|
+
${p}`,0,0)),this.chatContainer.addChild(new u(1))}}if(i){const d=a.diagnostics;if(d.length>0){const C=this.formatDiagnostics(d,o);this.chatContainer.addChild(new g(`${r.fg("warning","[Skill conflicts]")}
|
|
15
|
+
${C}`,0,0)),this.chatContainer.addChild(new u(1))}const m=h.diagnostics;if(m.length>0){const C=this.formatDiagnostics(m,o);this.chatContainer.addChild(new g(`${r.fg("warning","[Prompt conflicts]")}
|
|
16
|
+
${C}`,0,0)),this.chatContainer.addChild(new u(1))}const f=[],M=this.session.resourceLoader.getExtensions().errors;if(M.length>0)for(const C of M)f.push({type:"error",message:C.error,path:C.path});const w=this.session.extensionRunner?.getCommandDiagnostics()??[];f.push(...w);const E=this.session.extensionRunner?.getShortcutDiagnostics()??[];if(f.push(...E),f.length>0){const C=this.formatDiagnostics(f,o);this.chatContainer.addChild(new g(`${r.fg("warning","[Extension issues]")}
|
|
17
|
+
${C}`,0,0)),this.chatContainer.addChild(new u(1))}const S=c.diagnostics;if(S.length>0){const C=this.formatDiagnostics(S,o);this.chatContainer.addChild(new g(`${r.fg("warning","[Theme conflicts]")}
|
|
18
|
+
${C}`,0,0)),this.chatContainer.addChild(new u(1))}}}async initExtensions(){const e=this.createExtensionUIContext();await this.session.bindExtensions({uiContext:e,commandContextActions:{waitForIdle:s(()=>this.session.agent.waitForIdle(),"waitForIdle"),newSession:s(async i=>(this.state.loadingAnimation&&(this.state.loadingAnimation.stop(),this.state.loadingAnimation=void 0),this.statusContainer.clear(),await this.session.newSession(i)?(this.clearStatusTimers(),this.chatContainer.clear(),this.pendingMessagesContainer.clear(),this.state.compactionQueuedMessages=[],this.state.streamingComponent=void 0,this.state.streamingMessage=void 0,this.state.pendingTools.clear(),this.imagePipeline.clearAttachments(),this.renderInitialMessages(),{cancelled:!1}):{cancelled:!0}),"newSession"),fork:s(async i=>{const o=await this.session.fork(i);return o.cancelled?{cancelled:!0}:(this.clearStatusTimers(),this.chatContainer.clear(),this.imagePipeline.clearAttachments(),this.addSessionNavigationBanner("Forked session"),this.renderInitialMessages(),this.editor.setText(o.selectedText),this.showStatus("Forked to new session"),{cancelled:!1})},"fork"),navigateTree:s(async(i,o)=>{const t=await this.session.navigateTree(i,{summarize:o?.summarize,customInstructions:o?.customInstructions,replaceInstructions:o?.replaceInstructions,label:o?.label});return t.cancelled?{cancelled:!0}:(this.clearStatusTimers(),this.chatContainer.clear(),this.imagePipeline.clearAttachments(),this.addSessionNavigationBanner("Navigated session tree"),this.renderInitialMessages(),t.editorText&&!this.editor.getText().trim()&&this.editor.setText(t.editorText),this.showStatus("Navigated to selected point"),{cancelled:!1})},"navigateTree"),switchSession:s(async i=>(await this.treeOverlay.resumeSession(i),{cancelled:!1}),"switchSession"),reload:s(async()=>{await this.handleReloadCommand()},"reload")},shutdownHandler:s(()=>{this.shutdownRequested=!0,this.session.isStreaming||this.shutdown()},"shutdownHandler"),onError:s(i=>{this.showExtensionError(i.extensionPath,i.error,i.stack)},"onError")}),ue(this.session.resourceLoader.getThemes().themes),this.setupAutocomplete(this.fdPath);const n=this.session.extensionRunner;if(!n){this.showLoadedResources({extensionPaths:[],force:!1});return}this.setupExtensionShortcuts(n),this.showLoadedResources({extensionPaths:n.getExtensionPaths(),force:!1})}getRegisteredToolDefinition(e){return(this.session.extensionRunner?.getAllRegisteredTools()??[]).find(o=>o.definition.name===e)?.definition}setupExtensionShortcuts(e){const n=e.getShortcuts(this.keybindings.getEffectiveConfig());n.size!==0&&(this.defaultEditor.onExtensionShortcut=i=>{for(const[o,t]of n)if(Oe(i,o))return Promise.resolve(t.handler(e.createContext())).catch(a=>{this.showError(`Shortcut handler error: ${a instanceof Error?a.message:String(a)}`)}),!0;return!1})}formatElapsedSeconds(e){return`${(Math.max(0,e)/1e3).toFixed(1)}s`}getNextCatMessage(){const e=Date.now();return e-this.catMessageLastSwitch>=3e3&&(this.catMessageIndex++,this.catMessageLastSwitch=e),this.catWorkingMessages[this.catMessageIndex%this.catWorkingMessages.length]}buildWorkingMessage(){const e=this.state.workingMessageOverride||this.getNextCatMessage(),n=`${L(this.keybindings,"interrupt")} to interrupt`,i=this.state.agentRunStartMs!==void 0?this.formatElapsedSeconds(Date.now()-this.state.agentRunStartMs):void 0,o=i?`(${i}, ${n})`:`(${n})`;return{base:e,suffix:o}}updateWorkingMessage(e){if(!this.state.loadingAnimation)return;const{base:n,suffix:i}=this.buildWorkingMessage();this.state.loadingAnimation.setMessage(n,{...e,suffix:i})}stopAgentRunTimer(){this.state.agentRunTimer&&(clearInterval(this.state.agentRunTimer),this.state.agentRunTimer=void 0)}stopWelcomeBannerTimer(){this.state.welcomeBannerTimer&&(clearInterval(this.state.welcomeBannerTimer),this.state.welcomeBannerTimer=void 0)}startAgentRunTimer(){this.stopAgentRunTimer(),this.state.agentRunStartMs=Date.now(),this.state.agentRunTimer=setInterval(()=>{if(!this.state.loadingAnimation||this.state.agentRunStartMs===void 0){this.stopAgentRunTimer();return}this.updateWorkingMessage({resetStallTimer:!1})},100)}resetExtensionUI(){this.promptHost.dismiss(),this.ui.hideOverlay(),this.clearExtensionTerminalInputListeners(),this.surfaces.setFooter(void 0),this.surfaces.setHeader(void 0),this.surfaces.clearWidgets(),this.footerDataProvider.clearExtensionStatuses(),this.footer.invalidate(),this.editorAdapter.setComponent(void 0),this.defaultEditor.onExtensionShortcut=void 0,this.updateTerminalTitle(),this.state.loadingAnimation&&(this.state.workingMessageOverride=void 0,this.updateWorkingMessage())}clearBuddyPetResetTimer(){this.buddyPetResetTimer&&(clearTimeout(this.buddyPetResetTimer),this.buddyPetResetTimer=void 0)}syncBuddyPet(){const e=this.settingsManager.getBuddyEnabled(),n=this.settingsManager.getBuddySpecies();if(!e){this.clearBuddyPetResetTimer(),this.buddyPet?.dispose(),this.buddyPet=null,this.buddyPetSpecies=null,this.buddySlot.clear(),this.surfaces.renderWidgets();return}(!this.buddyPet||this.buddyPetSpecies!==n)&&(this.clearBuddyPetResetTimer(),this.buddyPet?.dispose(),this.buddyPet=new yt(this.ui,n),this.buddyPetSpecies=n,this.buddyPet.setState("idle"),this.buddyPet.setSpeechBubble("")),this.buddySlot.clear(),this.buddySlot.addChild(this.buddyPet),this.surfaces.renderWidgets()}remountEditorShell(){this.editorContainer.clear(),this.imagePipeline.hasAttachments()&&this.attachmentsContainer&&this.editorContainer.addChild(this.attachmentsContainer),this.editorContainer.addChild(this.editorBuddyLayout)}setBuddyPetState(e,n="",i){this.buddyPet&&(this.clearBuddyPetResetTimer(),this.buddyPet.setState(e),this.buddyPet.setSpeechBubble(n),i?.resetTo&&(this.buddyPetResetTimer=setTimeout(()=>{this.buddyPet&&(this.buddyPet.setState(i.resetTo??"idle"),this.buddyPet.setSpeechBubble(""),this.buddyPetResetTimer=void 0,this.ui.requestRender())},i.afterMs??1500)),this.ui.requestRender())}addExtensionTerminalInputListener(e){const n=this.ui.addInputListener(e);return this.extensionTerminalInputUnsubscribers.add(n),()=>{n(),this.extensionTerminalInputUnsubscribers.delete(n)}}clearExtensionTerminalInputListeners(){for(const e of this.extensionTerminalInputUnsubscribers)e();this.extensionTerminalInputUnsubscribers.clear()}createExtensionUIContext(){return{select:s((e,n,i)=>this.promptHost.selector(e,n,i),"select"),confirm:s((e,n,i)=>this.promptHost.confirm(e,n,i),"confirm"),input:s((e,n,i)=>this.promptHost.input(e,n,i),"input"),notify:s((e,n)=>this.showExtensionNotify(e,n),"notify"),onTerminalInput:s(e=>this.addExtensionTerminalInputListener(e),"onTerminalInput"),setStatus:s((e,n)=>this.surfaces.setStatus(e,n),"setStatus"),setWorkingMessage:s(e=>{this.state.workingMessageOverride=e||void 0,this.state.loadingAnimation?this.updateWorkingMessage():this.state.pendingWorkingMessage=e},"setWorkingMessage"),setWidget:s((e,n,i)=>this.surfaces.setWidget(e,n,i),"setWidget"),setFooter:s(e=>this.surfaces.setFooter(e),"setFooter"),setHeader:s(e=>this.surfaces.setHeader(e),"setHeader"),setTitle:s(e=>this.ui.terminal.setTitle(e),"setTitle"),custom:s((e,n)=>this.customOverlay.show(e,n),"custom"),pasteToEditor:s(e=>this.editor.handleInput(`\x1B[200~${e}\x1B[201~`),"pasteToEditor"),setEditorText:s(e=>this.editor.setText(e),"setEditorText"),getEditorText:s(()=>this.editor.getText(),"getEditorText"),editor:s((e,n)=>this.promptHost.editor(e,n),"editor"),openExternalEditor:s(e=>this.openExistingFileInExternalEditor(e),"openExternalEditor"),setEditorComponent:s(e=>this.editorAdapter.setComponent(e),"setEditorComponent"),get theme(){return r},getAllThemes:s(()=>Ot(),"getAllThemes"),getTheme:s(e=>Ft(e),"getTheme"),setTheme:s(e=>{if(typeof e!="string")return Kt(e),this.ui.requestRender(),{success:!0};const n=Ae(e,!0);return n.success&&(this.settingsManager.getTheme()!==e&&this.settingsManager.setTheme(e),this.ui.requestRender()),n},"setTheme"),getToolsExpanded:s(()=>this.state.toolOutputExpanded,"getToolsExpanded"),setToolsExpanded:s(e=>this.setToolsExpanded(e),"setToolsExpanded")}}showExtensionNotify(e,n){n==="error"?this.showError(e):n==="warning"?this.showWarning(e):this.showStatus(e)}shouldRenderToolTrace(e){return e.startsWith("nanomem_")?this.settingsManager.getShowMemoryTrace():this.settingsManager.getShowWorkingTrace()}showExtensionError(e,n,i){const o=`Extension "${e}" error: ${n}`,t=new g(r.fg("error",o),1,0);if(this.chatContainer.addChild(t),i){const a=i.split(`
|
|
19
|
+
`).slice(1).map(h=>r.fg("dim",` ${h.trim()}`)).join(`
|
|
20
|
+
`);a&&this.chatContainer.addChild(new g(a,1,0))}this.ui.requestRender()}setupKeyHandlers(){this.defaultEditor.onEscape=()=>this.interrupt.dispatchEscape(),this.defaultEditor.onAction("clear",()=>this.interrupt.handleCtrlC()),this.defaultEditor.onAction("showResources",()=>this.handleShowResourcesCommand()),this.defaultEditor.onCtrlD=()=>this.interrupt.handleCtrlD(),this.defaultEditor.onAction("suspend",()=>this.interrupt.handleCtrlZ()),this.defaultEditor.onAction("cycleThinkingLevel",()=>this.modelOverlay.cycleThinkingLevel()),this.defaultEditor.onAction("cycleModelForward",()=>this.modelOverlay.cycleModel("forward")),this.defaultEditor.onAction("cycleModelBackward",()=>this.modelOverlay.cycleModel("backward")),this.ui.onDebug=()=>this.handleRenderDebugCommand(),this.defaultEditor.onAction("selectModel",()=>this.modelOverlay.showProviderThenModelSelector()),this.defaultEditor.onAction("selectProviderThenModel",()=>this.modelOverlay.showProviderThenModelSelector()),this.defaultEditor.onAction("expandTools",()=>this.toggleToolOutputExpansion()),this.defaultEditor.onAction("toggleThinking",()=>this.toggleThinkingBlockVisibility()),this.defaultEditor.onAction("externalEditor",()=>this.openExternalEditor()),this.defaultEditor.onAction("followUp",()=>this.handleFollowUp()),this.defaultEditor.onAction("dequeue",()=>this.handleDequeue()),this.defaultEditor.onAction("newSession",()=>this.handleClearCommand()),this.defaultEditor.onAction("tree",()=>this.treeOverlay.showTreeSelector()),this.defaultEditor.onAction("fork",()=>this.treeOverlay.showForkSelector()),this.defaultEditor.onAction("resume",()=>this.treeOverlay.showSessionSelector()),this.defaultEditor.onChange=e=>{const n=this.isBashMode;this.isBashMode=e.trimStart().startsWith("!"),n!==this.isBashMode&&this.updateEditorBorderColor()},this.defaultEditor.onPasteImage=()=>{this.imagePipeline.handleClipboardImagePaste()},this.defaultEditor.onAttachmentKey=e=>this.imagePipeline.handleAttachmentKeyNavigation(e)}setupEditorSubmitHandler(){this.defaultEditor.onSubmit=async e=>{await this.inputSubmit.handleSubmit(e)}}subscribeToAgent(){this.unsubscribe=this.session.subscribe(async e=>{await this.handleEvent(e)})}addSessionNavigationBanner(e){const n=this.sessionManager.getSessionName(),i=this.sessionManager.getSessionId(),o=n?` "${n}"`:"",t=r.fg("dim",`\u21AA ${e} \u2192 session${o} (${i})`);this.chatContainer.addChild(new u(1)),this.chatContainer.addChild(new g(t,1,1)),this.chatContainer.addChild(new u(1))}async handleEvent(e){if(ee(`handleEvent: ${e.type}`),e.type==="sdk:mcp_ready"){e.toolCount>0&&this.showStatus(`MCP: ${e.toolCount} tool(s) ready`);return}await this.streamRender.handle(e)}getUserMessageText(e){return e.role!=="user"?"":(typeof e.content=="string"?[{type:"text",text:e.content}]:e.content.filter(i=>i.type==="text")).map(i=>i.text).join("")}showStatus(e){const n=this.chatContainer.children,i=n.length>0?n[n.length-1]:void 0,o=n.length>1?n[n.length-2]:void 0;if(i&&o&&i===this.state.lastStatusText&&o===this.state.lastStatusSpacer){this.state.lastStatusText.setText(r.fg("dim",e)),this.scheduleStatusDismiss(this.state.lastStatusSpacer,this.state.lastStatusText),this.ui.requestRender();return}const t=new u(1),a=new g(r.fg("dim",e),1,0);this.chatContainer.addChild(t),this.chatContainer.addChild(a),this.state.lastStatusSpacer=t,this.state.lastStatusText=a,this.scheduleStatusDismiss(t,a),this.ui.requestRender()}addMessageToChat(e,n){switch(e.role){case"bashExecution":{const i=new ce(e.command,this.ui,e.excludeFromContext);e.output&&i.appendOutput(e.output),i.setComplete(e.exitCode,e.cancelled,e.truncated?{truncated:!0}:void 0,e.fullOutputPath),this.chatContainer.addChild(i);break}case"custom":{if(e.display){const i=typeof e.details=="object"&&e.details!==null?e.details:void 0;if(i?.replace&&i.streamKey){const a=this.state.customStreamComponents.get(i.streamKey);if(a){a.updateMessage(e),this.ui.requestRender();break}}const o=this.session.extensionRunner?.getMessageRenderer(e.customType),t=new kt(e,o,this.getMarkdownThemeWithSettings());t.setExpanded(this.state.toolOutputExpanded),this.chatContainer.addChild(t),i?.streamKey&&this.state.customStreamComponents.set(i.streamKey,t)}break}case"compactionSummary":{this.chatContainer.addChild(new u(1));const i=new xt(e,this.getMarkdownThemeWithSettings());i.setExpanded(this.state.toolOutputExpanded),this.chatContainer.addChild(i);break}case"branchSummary":{this.chatContainer.addChild(new u(1));const i=new bt(e,this.getMarkdownThemeWithSettings());i.setExpanded(this.state.toolOutputExpanded),this.chatContainer.addChild(i);break}case"user":{const i=this.getUserMessageText(e);if(i){const o=_e(i);if(o){this.chatContainer.addChild(new u(1));const t=new Bt(o,this.getMarkdownThemeWithSettings());if(t.setExpanded(this.state.toolOutputExpanded),this.chatContainer.addChild(t),o.userMessage){const a=new $e(o.userMessage,this.getMarkdownThemeWithSettings());this.chatContainer.addChild(a)}}else{const t=new $e(i,this.getMarkdownThemeWithSettings());this.chatContainer.addChild(t)}n?.populateHistory&&this.editor.addToHistory?.(i)}break}case"assistant":{const i=new xe(e,this.state.hideThinkingBlock,this.getMarkdownThemeWithSettings());this.chatContainer.addChild(i);break}case"toolResult":break;default:{const i=e}}}renderSessionContext(e,n={}){this.state.pendingTools.clear(),this.state.customStreamComponents.clear(),n.updateFooter&&(this.footer.invalidate(),this.updateEditorBorderColor());for(const i of e.messages)if(i.role==="assistant"){this.addMessageToChat(i);for(const o of i.content)if(o.type==="toolCall"){const t=new ke(o.name,o.arguments,{showImages:this.settingsManager.getShowImages()},this.getRegisteredToolDefinition(o.name),this.ui);if(t.setExpanded(this.state.toolOutputExpanded),this.chatContainer.addChild(t),i.stopReason==="aborted"||i.stopReason==="error"){let a;if(i.stopReason==="aborted"){const h=this.session.retryAttempt;a=h>0?`Aborted after ${h} retry attempt${h>1?"s":""}`:"Operation aborted"}else a=i.errorMessage||"Error";t.updateResult({content:[{type:"text",text:a}],isError:!0})}else this.state.pendingTools.set(o.id,t)}}else if(i.role==="toolResult"){const o=this.state.pendingTools.get(i.toolCallId);o&&(o.updateResult(i),this.state.pendingTools.delete(i.toolCallId))}else this.addMessageToChat(i,n);this.state.pendingTools.clear(),this.ui.requestRender()}renderInitialMessages(){this.stopWelcomeBannerTimer();const e=this.sessionManager.buildSessionContext();if(this.renderSessionContext(e,{updateFooter:!0,populateHistory:!0}),e.messages.length===0){if(this.chatContainer.addChild(new u(1)),O==="catui"||O==="catui"){const o=this.session.cwd,t=this.session.model,a=t?.name??(t?.provider?`${t.provider}`:"DashScope \xB7 Ollama"),h=s(l=>{const $=[" __..--''``\\--....___ _..,_",""," //// _.-' .-/\"; ` ``<._ ``-+'~=. ////",""," ///_.-' _..--.' \\ `(^) ) //",""," // ((..-' // (< - ;_..__ ; `' //",""," ////////////// `-._,_)'//////``--...____..-' /////"," //////////////////////////////////////////////////","",l%8===5?"///CATU I///////////////////////////////////////////":"///CATUI////////////////////////////////////////////","","---------------------------------------------------"],A=Math.max(...$.map(R=>R.length));return $.map(R=>R.padEnd(A))},"buildAsciiLines"),c=s(l=>h(l).map(T=>r.fg("accent",T.slice(0,Math.max(1,this.ui.terminal.columns||80)))).join(`
|
|
21
|
+
`),"renderAscii"),d=r.bold(r.fg("accent",`catui-agent v${this.version}`)),m=r.fg("dim",a),f=r.fg("dim",o),M=r.fg("dim"," /model to switch model"),w=this.getAppKeyDisplay("showResources"),E=this.settingsManager.getQuietStartup()?r.fg("dim",` ${w} to show context/skills/extensions`):"",S=r.fg("borderMuted","\u2500".repeat(Math.max(40,this.ui.terminal.columns||80))),C=r.fg("accent",'\u276F Try "refactor <filepath>" or type below'),p=[c(0),"",` ${d}`,` ${m}`,` ${f}`,"",M,...E?["",E]:[],"",S,C].join(`
|
|
22
|
+
`),y=new g(p,0,0);this.chatContainer.addChild(y);let b=0;this.state.welcomeBannerTimer=setInterval(()=>{b+=1,y.setText([c(b),"",` ${d}`,` ${m}`,` ${f}`,"",M,...E?["",E]:[],"",S,C].join(`
|
|
23
|
+
`)),this.ui.requestRender(),b>=16&&this.stopWelcomeBannerTimer()},220)}else{const t=[" \u270E"," +---------------+",` | ${O.padEnd(14).slice(0,14)} |`," +---------------+"].join(`
|
|
24
|
+
`),a=` ${r.fg("dim","AI coding agent. Type below to start.")}`;this.chatContainer.addChild(new g(`${r.fg("accent",t)}
|
|
25
|
+
${a}`,0,0))}this.chatContainer.addChild(new u(1))}const i=this.sessionManager.getEntries().filter(o=>o.type==="compaction").length;if(i>0){const o=i===1?"1 time":`${i} times`;this.showStatus(`Session compacted ${o}`)}this.ui.requestRender(!0)}async getUserInput(){return new Promise(e=>{this.onInputCallback=n=>{this.onInputCallback=void 0,e(n)}})}rebuildChatFromMessages(){this.clearStatusTimers(),this.chatContainer.clear();const e=this.sessionManager.buildSessionContext();this.renderSessionContext(e);for(const n of this.state.optimisticUserMessages)this.addMessageToChat({role:"user",content:[{type:"text",text:n.text}],timestamp:Date.now()});this.ui.requestRender(!0)}isShuttingDown=!1;async shutdown(){if(this.isShuttingDown)return;this.isShuttingDown=!0;const e=this.session.extensionRunner;e?.hasHandlers("session_shutdown")&&await Promise.race([e.emit({type:"session_shutdown"}),new Promise(t=>setTimeout(t,5e3))]),this.imagePipeline.cleanupClipboardImages(),await new Promise(o=>process.nextTick(o)),await this.ui.terminal.drainInput(1e3),this.stop();const n=this.sessionManager.getSessionId(),i=this.session.cwd;console.log(`
|
|
26
|
+
Resume this session with: catui --session ${n} --cwd "${i}"`),process.exit(0)}async checkShutdownRequested(){this.shutdownRequested&&await this.shutdown()}suspend(){process.once("SIGCONT",()=>{this.ui.start(),this.ui.requestRender(!0)}),this.ui.stop(),process.kill(0,"SIGTSTP")}async handleFollowUp(){const e=(this.editor.getExpandedText?.()??this.editor.getText()).trim();if(e){if(this.session.isCompacting){this.isExtensionCommand(e)?(this.editor.addToHistory?.(e),this.editor.setText(""),await this.promptAfterRender(e)):this.queueCompactionMessage(e,"followUp");return}this.session.isStreaming?(this.editor.addToHistory?.(e),this.editor.setText(""),await this.promptAfterRender(e,{streamingBehavior:"followUp"}),this.updatePendingMessagesDisplay(),this.ui.requestRender()):this.editor.onSubmit&&this.editor.onSubmit(e)}}handleDequeue(){const e=this.restoreQueuedMessagesToEditor();e===0?this.showStatus("No queued messages to restore"):this.showStatus(`Restored ${e} queued message${e>1?"s":""} to editor`)}async promptAfterRender(e,n){const i=this.ui;typeof i.awaitRender=="function"?await i.awaitRender():await new Promise(o=>process.nextTick(o)),await this.session.prompt(e,n)}updateEditorBorderColor(){if(this.isBashMode)this.editor.borderColor=r.getBashModeBorderColor();else{const e=this.session.thinkingLevel||"off";this.editor.borderColor=r.getThinkingBorderColor(e)}this.ui.requestRender()}handleAgentLoopCommand(e){const n=e.slice(11).trim().toLowerCase(),i=["standard","weak-model-compatible"],o=n==="high-intelligence"?"standard":n==="low-intelligence"||n==="structured-adaptive"?"weak-model-compatible":n;if(!n){this.showStatus(`Agent loop: ${this.session.agentLoopFramework} (available: ${i.join(", ")})`);return}if(!i.includes(o)){this.showError(`Unknown agent loop framework: ${n}
|
|
27
|
+
Available: ${i.join(", ")}`);return}this.session.setAgentLoopFramework(o),this.footer.invalidate(),this.showStatus(`Agent loop framework: ${this.session.agentLoopFramework}`)}toggleToolOutputExpansion(){this.setToolsExpanded(!this.state.toolOutputExpanded)}setToolsExpanded(e){this.state.toolOutputExpanded=e;for(const n of this.chatContainer.children)Yt(n)&&n.setExpanded(e);this.ui.requestRender()}toggleThinkingBlockVisibility(){this.state.hideThinkingBlock=!this.state.hideThinkingBlock,this.settingsManager.setHideThinkingBlock(this.state.hideThinkingBlock),this.chatContainer.clear(),this.rebuildChatFromMessages(),this.state.streamingComponent&&this.state.streamingMessage&&(this.state.streamingComponent.setHideThinkingBlock(this.state.hideThinkingBlock),this.state.streamingComponent.updateContent(this.state.streamingMessage),this.chatContainer.addChild(this.state.streamingComponent)),this.showStatus(`Thinking blocks: ${this.state.hideThinkingBlock?"hidden":"visible"}`)}openExternalEditor(){const e=process.env.VISUAL||process.env.EDITOR;if(!e){this.showWarning("No editor configured. Set $VISUAL or $EDITOR environment variable.");return}const n=this.editor.getExpandedText?.()??this.editor.getText(),i=D.join(J.tmpdir(),`catui-editor-${Date.now()}.catui.md`);try{P.writeFileSync(i,n,"utf-8"),this.ui.stop();const[o,...t]=e.split(" ");if(re(o,[...t,i],{stdio:"inherit"}).status===0){const h=P.readFileSync(i,"utf-8").replace(/\n$/,"");this.editor.setText(h)}}finally{try{P.unlinkSync(i)}catch{}this.ui.start(),this.ui.requestRender(!0)}}async openExistingFileInExternalEditor(e){const n=process.env.VISUAL||process.env.EDITOR;if(!n)return this.showWarning("No editor configured. Set $VISUAL or $EDITOR environment variable."),!1;try{this.ui.stop();const[i,...o]=n.split(" ");return re(i,[...o,e],{stdio:"inherit"}).status===0}finally{this.ui.start(),this.ui.requestRender(!0)}}clearEditor(){this.editor.setText(""),this.ui.requestRender()}showError(e){this.chatContainer.addChild(new u(1)),this.chatContainer.addChild(new g(r.fg("error",`Error: ${e}`),1,0)),this.setBuddyPetState("error","Oops...",{resetTo:"idle",afterMs:2200}),this.ui.requestRender()}showWarning(e){const n=new u(1),i=new g(r.fg("warning",`Warning: ${e}`),1,0);this.chatContainer.addChild(n),this.chatContainer.addChild(i),this.scheduleStatusDismiss(n,i),this.setBuddyPetState("error","Careful.",{resetTo:"idle",afterMs:1800}),this.ui.requestRender()}scheduleStatusDismiss(e,n){const i=setTimeout(()=>{this.statusTimers.delete(i),this.chatContainer.removeChild(e),this.chatContainer.removeChild(n),this.state.lastStatusText===n&&(this.state.lastStatusText=void 0,this.state.lastStatusSpacer=void 0),this.ui.requestRender()},5e3);this.statusTimers.add(i)}clearStatusTimers(){for(const e of this.statusTimers)clearTimeout(e);this.statusTimers.clear(),this.notificationQueue.clearAll()}notify(e,n){this.notificationQueue.notify(e,n)}getAllQueuedMessages(){return{steering:[...this.session.getSteeringMessages(),...this.state.compactionQueuedMessages.filter(e=>e.mode==="steer").map(e=>e.text)],followUp:[...this.session.getFollowUpMessages(),...this.state.compactionQueuedMessages.filter(e=>e.mode==="followUp").map(e=>e.text)]}}clearAllQueues(){const{steering:e,followUp:n}=this.session.clearQueue(),i=this.state.compactionQueuedMessages.filter(t=>t.mode==="steer").map(t=>t.text),o=this.state.compactionQueuedMessages.filter(t=>t.mode==="followUp").map(t=>t.text);return this.state.compactionQueuedMessages=[],{steering:[...e,...i],followUp:[...n,...o]}}updatePendingMessagesDisplay(){this.pendingMessagesContainer.clear();const{steering:e,followUp:n}=this.getAllQueuedMessages();if(e.length>0||n.length>0){this.pendingMessagesContainer.addChild(new u(1));for(const t of e){const a=r.fg("dim",`Steering: ${t}`);this.pendingMessagesContainer.addChild(new ae(a,1,0))}for(const t of n){const a=r.fg("dim",`Follow-up: ${t}`);this.pendingMessagesContainer.addChild(new ae(a,1,0))}const i=this.getAppKeyDisplay("dequeue"),o=r.fg("dim",`\u21B3 ${i} to edit all queued messages`);this.pendingMessagesContainer.addChild(new ae(o,1,0))}}restoreQueuedMessagesToEditor(e){const{steering:n,followUp:i}=this.clearAllQueues(),o=[...n,...i];if(o.length===0)return this.updatePendingMessagesDisplay(),e?.abort&&this.agent.abort(),0;const t=o.join(`
|
|
28
|
+
|
|
29
|
+
`),a=e?.currentText??this.editor.getText(),h=[t,a].filter(c=>c.trim()).join(`
|
|
30
|
+
|
|
31
|
+
`);return this.editor.setText(h),this.updatePendingMessagesDisplay(),e?.abort&&this.agent.abort(),o.length}queueCompactionMessage(e,n){this.state.compactionQueuedMessages.push({text:e,mode:n}),this.editor.addToHistory?.(e),this.editor.setText(""),this.updatePendingMessagesDisplay(),this.showStatus("Queued message for after compaction")}isExtensionCommand(e){if(!e.startsWith("/"))return!1;const n=this.session.extensionRunner;if(!n)return!1;const i=e.indexOf(" "),o=i===-1?e.slice(1):e.slice(1,i);return!!n.getCommand(o)}async flushCompactionQueue(e){if(this.state.compactionQueuedMessages.length===0)return;const n=[...this.state.compactionQueuedMessages];this.state.compactionQueuedMessages=[],this.updatePendingMessagesDisplay();const i=s(o=>{this.session.clearQueue(),this.state.compactionQueuedMessages=n,this.updatePendingMessagesDisplay(),this.showError(`Failed to send queued message${n.length>1?"s":""}: ${o instanceof Error?o.message:String(o)}`)},"restoreQueue");try{if(e?.willRetry){for(const d of n)this.isExtensionCommand(d.text)?await this.promptAfterRender(d.text):d.mode==="followUp"?await this.session.followUp(d.text):await this.session.steer(d.text);this.updatePendingMessagesDisplay();return}const o=n.findIndex(d=>!this.isExtensionCommand(d.text));if(o===-1){for(const d of n)await this.promptAfterRender(d.text);return}const t=n.slice(0,o),a=n[o],h=n.slice(o+1);for(const d of t)await this.promptAfterRender(d.text);const c=this.promptAfterRender(a.text).catch(d=>{i(d)});for(const d of h)this.isExtensionCommand(d.text)?await this.promptAfterRender(d.text):d.mode==="followUp"?await this.session.followUp(d.text):await this.session.steer(d.text);this.updatePendingMessagesDisplay()}catch(o){i(o)}}flushPendingBashComponents(){for(const e of this.pendingBashComponents)this.pendingMessagesContainer.removeChild(e),this.chatContainer.addChild(e);this.pendingBashComponents=[]}showSelector(e){const n=s(()=>{this.remountEditorShell(),this.ui.setFocus(this.editor)},"done"),{component:i,focus:o}=e(n);this.editorContainer.clear(),this.editorContainer.addChild(i),this.ui.setFocus(o),this.ui.requestRender()}async handleReloadCommand(){if(this.session.isStreaming){this.showWarning("Wait for the current response to finish before reloading.");return}if(this.session.isCompacting){this.showWarning("Wait for compaction to finish before reloading.");return}this.resetExtensionUI();const e=new Pe(this.ui,r,"Reloading extensions, skills, prompts, themes...",{cancellable:!1}),n=this.editor;this.editorContainer.clear(),this.editorContainer.addChild(e),this.ui.setFocus(e),this.ui.requestRender();const i=s(o=>{e.dispose(),this.remountEditorShell(),this.ui.setFocus(this.editor),this.ui.requestRender()},"dismissLoader");try{await this.session.reload(),ue(this.session.resourceLoader.getThemes().themes),this.state.hideThinkingBlock=this.settingsManager.getHideThinkingBlock();const o=this.settingsManager.getTheme(),t=o?Ae(o,!0):{success:!0};t.success||this.showError(`Failed to load theme "${o}": ${t.error}
|
|
32
|
+
Fell back to dark theme.`);const a=this.settingsManager.getEditorPaddingX(),h=this.settingsManager.getAutocompleteMaxVisible();this.defaultEditor.setPaddingX(a),this.defaultEditor.setAutocompleteMaxVisible(h),this.editor!==this.defaultEditor&&(this.editor.setPaddingX?.(a),this.editor.setAutocompleteMaxVisible?.(h)),this.ui.setShowHardwareCursor(this.settingsManager.getShowHardwareCursor()),this.ui.setClearOnShrink(this.settingsManager.getClearOnShrink()),this.setupAutocomplete(this.fdPath);const c=this.session.extensionRunner;c&&this.setupExtensionShortcuts(c),this.rebuildChatFromMessages(),i(this.editor),this.showLoadedResources({extensionPaths:c?.getExtensionPaths()??[],force:!1,showDiagnosticsWhenQuiet:!0});const d=this.session.modelRegistry.getError();d&&this.showError(`models.json error: ${d}`),this.showStatus("Reloaded extensions, skills, prompts, themes")}catch(o){i(n),this.showError(`Reload failed: ${o instanceof Error?o.message:String(o)}`)}}async handleExportCommand(e){const n=e.split(/\s+/),i=n.length>1?n[1]:void 0;try{const o=await this.session.exportToHtml(i);this.showStatus(`Session exported to: ${o}`)}catch(o){this.showError(`Failed to export session: ${o instanceof Error?o.message:"Unknown error"}`)}}async handleShareCommand(){try{if(re("gh",["auth","status"],{encoding:"utf-8"}).status!==0){this.showError("GitHub CLI is not logged in. Run 'gh auth login' first.");return}}catch{this.showError("GitHub CLI (gh) is not installed. Install it from https://cli.github.com/");return}const e=D.join(J.tmpdir(),"session.html");try{await this.session.exportToHtml(e)}catch(t){this.showError(`Failed to export session: ${t instanceof Error?t.message:"Unknown error"}`);return}const n=new Pe(this.ui,r,"Creating gist...");this.editorContainer.clear(),this.editorContainer.addChild(n),this.ui.setFocus(n),this.ui.requestRender();const i=s(()=>{n.dispose(),this.remountEditorShell(),this.ui.setFocus(this.editor);try{P.unlinkSync(e)}catch{}},"restoreEditor");let o=null;n.onAbort=()=>{o?.kill(),i(),this.showStatus("Share cancelled")};try{const t=await new Promise(d=>{o=Fe("gh",["gist","create","--public=false",e]);let m="",f="";o.stdout?.on("data",M=>{m+=M.toString()}),o.stderr?.on("data",M=>{f+=M.toString()}),o.on("close",M=>d({stdout:m,stderr:f,code:M}))});if(n.signal.aborted)return;if(i(),t.code!==0){const d=t.stderr?.trim()||"Unknown error";this.showError(`Failed to create gist: ${d}`);return}const a=t.stdout?.trim(),h=a?.split("/").pop();if(!h){this.showError("Failed to parse gist ID from gh output");return}const c=Ne(h);this.showStatus(`Share URL: ${c}
|
|
33
|
+
Gist: ${a}`)}catch(t){n.signal.aborted||(i(),this.showError(`Failed to create gist: ${t instanceof Error?t.message:"Unknown error"}`))}}handleCopyCommand(){const e=this.session.getLastAssistantText();if(!e){this.showError("No agent messages to copy yet.");return}try{tt(e),this.showStatus("Copied last agent message to clipboard")}catch(n){this.showError(n instanceof Error?n.message:String(n))}}async handleStatusCommand(){const e=this.session.state,n=this.sessionManager,i=s((x,F)=>{const ge=F-2,Ie=pe(x),De=Math.max(0,ge-Ie);return x+" ".repeat(De)},"padLine"),o=[],t=Math.min(this.ui.terminal.columns||80,73),a=` >_ Catui (v${this.version}) `,h=Math.max(0,t-a.length-1);o.push(r.fg("border",`\u256D${"\u2500".repeat(Math.max(1,t-2))}\u256E`)),o.push(r.fg("border","\u2502")+r.bold(a)+" ".repeat(h)+r.fg("border","\u2502")),o.push(r.fg("border","\u2502")+" ".repeat(Math.max(1,t-2))+r.fg("border","\u2502"));const c=e.model?.id||"no-model",d=e.thinkingLevel||"off",m=e.model?.reasoning?`reasoning ${d}`:"",f=` Model: ${c}${m?` (${m})`:""}`;o.push(r.fg("border","\u2502")+i(f,t)+r.fg("border","\u2502"));const M=` Agent loop: ${this.session.agentLoopFramework}`;o.push(r.fg("border","\u2502")+i(M,t)+r.fg("border","\u2502"));for(const x of Jt(e.lastResult))o.push(r.fg("border","\u2502")+i(` ${x}`,t)+r.fg("border","\u2502"));let w=this.session.cwd;const E=process.env.HOME||process.env.USERPROFILE;E&&w.startsWith(E)&&(w=`~${w.slice(E.length)}`);const S=this.footerDataProvider.getGitBranch(),C=` Directory: ${w}${S?` (${S})`:""}`;o.push(r.fg("border","\u2502")+i(C,t)+r.fg("border","\u2502"));const p=D.join(this.session.cwd,"AGENTS.md"),b=` AGENTS.md: ${P.existsSync(p)?"AGENTS.md":"not found"}`;o.push(r.fg("border","\u2502")+i(b,t)+r.fg("border","\u2502"));const l=n.getSessionId(),$=` Session: ${n.getSessionName()||l.slice(0,8)}...`;o.push(r.fg("border","\u2502")+i($,t)+r.fg("border","\u2502"));const A=this.session.modelRegistry.authStorage,R=A.list();let K="Not logged in";R.length>0&&(K=R.map(F=>A.get(F)?.type==="oauth"?`${F} (OAuth)`:`${F} (API key)`).join(", "));const te=` Account: ${K}`;o.push(r.fg("border","\u2502")+i(te,t)+r.fg("border","\u2502")),o.push(r.fg("border","\u2502")+" ".repeat(Math.max(1,t-2))+r.fg("border","\u2502"));let _=0,j=0,Q=0,G=0;for(const x of n.getBranch())x.type==="message"&&x.message.role==="assistant"&&(_+=x.message.usage.input,j+=x.message.usage.output,Q+=x.message.usage.cost.total,G++);const B=s(x=>x.toLocaleString(),"fmt"),se=s(x=>`$${x.toFixed(4)}`,"fmtCost");o.push(r.fg("border","\u2502")+r.bold(r.fg("accent"," \u2550\u2550\u2550 Session Usage \u2550\u2550\u2550"))+" ".repeat(Math.max(1,t-23))+r.fg("border","\u2502")),o.push(r.fg("border","\u2502")+" ".repeat(Math.max(1,t-2))+r.fg("border","\u2502"));const W=` Requests: ${G}`;o.push(r.fg("border","\u2502")+i(W,t)+r.fg("border","\u2502"));const V=` Input tokens: ${B(_)}`;o.push(r.fg("border","\u2502")+i(V,t)+r.fg("border","\u2502"));const z=` Output tokens: ${B(j)}`;o.push(r.fg("border","\u2502")+i(z,t)+r.fg("border","\u2502"));const ie=` Cost: ${se(Q)}`;o.push(r.fg("border","\u2502")+i(ie,t)+r.fg("border","\u2502"));const U=this.session.getContextUsage(),ne=U?.contextWindow??e.model?.contextWindow??0,X=U?.percent??0,oe=U?.tokens??0,ve=` Context: ${Rt(X)} ${X.toFixed(1)}% (${B(oe)}/${B(ne)})`;o.push(r.fg("border","\u2502")+i(ve,t)+r.fg("border","\u2502")),o.push(r.fg("border",`\u2570${"\u2500".repeat(Math.max(1,t-2))}\u256F`)),this.chatContainer.addChild(new u(1)),this.chatContainer.addChild(new Ut(o.join(`
|
|
34
|
+
`))),this.ui.requestRender()}async handleUsageCommand(){const e=new Map;let n=0,i=0,o=0,t=0,a=0,h=0,c=0;for(const C of this.sessionManager.getBranch())if(C.type==="message"&&C.message.role==="assistant"){const p=C.message,y=p.model||"unknown",b=p.usage.totalTokens||p.usage.input+p.usage.output+p.usage.cacheRead+p.usage.cacheWrite;e.has(y)||e.set(y,{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:0,requestCount:0});const l=e.get(y);l.input+=p.usage.input,l.output+=p.usage.output,l.cacheRead+=p.usage.cacheRead,l.cacheWrite+=p.usage.cacheWrite,l.totalTokens+=b,l.cost+=p.usage.cost.total,l.requestCount++,n+=p.usage.input,i+=p.usage.output,o+=p.usage.cacheRead,t+=p.usage.cacheWrite,h+=b,a+=p.usage.cost.total,c++}const d=this.session.getContextUsage(),m=d?.contextWindow??0,f=s(C=>C.toLocaleString(),"fmt"),M=s(C=>`$${C.toFixed(4)}`,"fmtCost"),w=[];if(w.push(r.bold(r.fg("accent","\u2550\u2550\u2550 Token Usage \u2550\u2550\u2550"))),w.push(""),e.size>0)for(const[C,p]of e)w.push(r.fg("accent",`\u250C\u2500 ${C} \u2500`)),w.push(""),w.push(`\u2502 Requests: ${p.requestCount}`),w.push(`\u2502 Input: ${f(p.input)} tokens`),w.push(`\u2502 Output: ${f(p.output)} tokens`),w.push(`\u2502 Cache: ${f(p.cacheRead+p.cacheWrite)} tokens`),w.push(`\u2502 Total: ${f(p.totalTokens)} tokens`),w.push(`\u2502 Cost: ${M(p.cost)}`),w.push(r.fg("accent",`\u2514${"\u2500".repeat(Math.min(50,C.length+4))}`)),w.push("");w.push(r.bold(" \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Total \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500")),w.push(` Requests: ${c}`),w.push(` Input: ${f(n)} tokens`),w.push(` Output: ${f(i)} tokens`),w.push(` Cache: ${f(o+t)} tokens`),w.push(` Total: ${f(h)} tokens`),w.push(` Cost: ${M(a)}`),w.push("");const E=d?.percent!=null?`${d.percent.toFixed(1)}%`:"?";w.push(` Context: ${E} / ${f(m)} tokens`);const S=this.session.state;S.model&&w.push(` Current: ${S.model.id}`),w.push(""),w.push(r.fg("dim"," Tip: Use /settings \u2192 Terminal \u2192 Show token stats to toggle footer display"));for(const C of w)this.chatContainer.addChild(new u(1)),this.chatContainer.addChild(new g(C,1,0))}handleNameCommand(e){const n=e.replace(/^\/name\s*/,"").trim();if(!n){const i=this.sessionManager.getSessionName();i?(this.chatContainer.addChild(new u(1)),this.chatContainer.addChild(new g(r.fg("dim",`Session name: ${i}`),1,0))):this.showWarning("Usage: /name <name>"),this.ui.requestRender();return}this.sessionManager.appendSessionInfo(n),this.updateTerminalTitle(),this.chatContainer.addChild(new u(1)),this.chatContainer.addChild(new g(r.fg("dim",`Session name set: ${n}`),1,0)),this.ui.requestRender()}handleSessionCommand(){const e=this.session.getSessionStats(),n=this.sessionManager.getSessionName();let i=`${r.bold("Session Info")}
|
|
35
|
+
|
|
36
|
+
`;n&&(i+=`${r.fg("dim","Name:")} ${n}
|
|
37
|
+
`),i+=`${r.fg("dim","File:")} ${e.sessionFile??"In-memory"}
|
|
38
|
+
`,i+=`${r.fg("dim","ID:")} ${e.sessionId}
|
|
39
|
+
|
|
40
|
+
`,i+=`${r.bold("Messages")}
|
|
41
|
+
`,i+=`${r.fg("dim","User:")} ${e.userMessages}
|
|
42
|
+
`,i+=`${r.fg("dim","Assistant:")} ${e.assistantMessages}
|
|
43
|
+
`,i+=`${r.fg("dim","Tool Calls:")} ${e.toolCalls}
|
|
44
|
+
`,i+=`${r.fg("dim","Tool Results:")} ${e.toolResults}
|
|
45
|
+
`,i+=`${r.fg("dim","Total:")} ${e.totalMessages}
|
|
46
|
+
|
|
47
|
+
`,i+=`${r.bold("Tokens")}
|
|
48
|
+
`,i+=`${r.fg("dim","Input:")} ${e.tokens.input.toLocaleString()}
|
|
49
|
+
`,i+=`${r.fg("dim","Output:")} ${e.tokens.output.toLocaleString()}
|
|
50
|
+
`,e.tokens.cacheRead>0&&(i+=`${r.fg("dim","Cache Read:")} ${e.tokens.cacheRead.toLocaleString()}
|
|
51
|
+
`),e.tokens.cacheWrite>0&&(i+=`${r.fg("dim","Cache Write:")} ${e.tokens.cacheWrite.toLocaleString()}
|
|
52
|
+
`),i+=`${r.fg("dim","Total:")} ${e.tokens.total.toLocaleString()}
|
|
53
|
+
`,e.cost>0&&(i+=`
|
|
54
|
+
${r.bold("Cost")}
|
|
55
|
+
`,i+=`${r.fg("dim","Total:")} ${e.cost.toFixed(4)}`),this.chatContainer.addChild(new u(1)),this.chatContainer.addChild(new g(i,1,0)),this.ui.requestRender()}handleChangelogCommand(){const e=Ze(),n=et(e),i=n.length>0?n.reverse().map(o=>o.content).join(`
|
|
56
|
+
|
|
57
|
+
`):"No changelog entries found.";this.chatContainer.addChild(new u(1)),this.chatContainer.addChild(new Z),this.chatContainer.addChild(new g(r.bold(r.fg("accent","What's New")),1,0)),this.chatContainer.addChild(new u(1)),this.chatContainer.addChild(new me(i,1,1,this.getMarkdownThemeWithSettings())),this.chatContainer.addChild(new Z),this.ui.requestRender()}capitalizeKey(e){return e.split("/").map(n=>n.split("+").map(i=>i.charAt(0).toUpperCase()+i.slice(1)).join("+")).join("/")}getAppKeyDisplay(e){return this.capitalizeKey(L(this.keybindings,e))}getEditorKeyDisplay(e){return this.capitalizeKey(It(e))}handleHotkeysCommand(){const e=this.getEditorKeyDisplay("cursorWordLeft"),n=this.getEditorKeyDisplay("cursorWordRight"),i=this.getEditorKeyDisplay("cursorLineStart"),o=this.getEditorKeyDisplay("cursorLineEnd"),t=this.getEditorKeyDisplay("jumpForward"),a=this.getEditorKeyDisplay("jumpBackward"),h=this.getEditorKeyDisplay("pageUp"),c=this.getEditorKeyDisplay("pageDown"),d=this.getEditorKeyDisplay("submit"),m=this.getEditorKeyDisplay("newLine"),f=this.getEditorKeyDisplay("deleteWordBackward"),M=this.getEditorKeyDisplay("deleteWordForward"),w=this.getEditorKeyDisplay("deleteToLineStart"),E=this.getEditorKeyDisplay("deleteToLineEnd"),S=this.getEditorKeyDisplay("yank"),C=this.getEditorKeyDisplay("yankPop"),p=this.getEditorKeyDisplay("undo"),y=this.getEditorKeyDisplay("tab"),b=this.getAppKeyDisplay("interrupt"),l=this.getAppKeyDisplay("showResources"),T=this.getAppKeyDisplay("clear"),$=this.getAppKeyDisplay("exit"),A=this.getAppKeyDisplay("suspend"),R=this.getAppKeyDisplay("cycleThinkingLevel"),K=this.getAppKeyDisplay("cycleModelForward"),te=this.getAppKeyDisplay("selectModel"),_=this.getAppKeyDisplay("selectProviderThenModel"),j=this.getAppKeyDisplay("expandTools"),Q=this.getAppKeyDisplay("toggleThinking"),G=this.getAppKeyDisplay("externalEditor"),B=this.getAppKeyDisplay("followUp"),se=this.getAppKeyDisplay("dequeue");let W=`
|
|
58
|
+
**Navigation**
|
|
59
|
+
| Key | Action |
|
|
60
|
+
|-----|--------|
|
|
61
|
+
| \`Arrow keys\` | Move cursor / browse history (Up when empty) |
|
|
62
|
+
| \`${e}\` / \`${n}\` | Move by word |
|
|
63
|
+
| \`${i}\` | Start of line |
|
|
64
|
+
| \`${o}\` | End of line |
|
|
65
|
+
| \`${t}\` | Jump forward to character |
|
|
66
|
+
| \`${a}\` | Jump backward to character |
|
|
67
|
+
| \`${h}\` / \`${c}\` | Scroll by page |
|
|
68
|
+
|
|
69
|
+
**Editing**
|
|
70
|
+
| Key | Action |
|
|
71
|
+
|-----|--------|
|
|
72
|
+
| \`${d}\` | Send message |
|
|
73
|
+
| \`${m}\` | New line${process.platform==="win32"?" (Ctrl+Enter on Windows Terminal)":""} |
|
|
74
|
+
| \`${f}\` | Delete word backwards |
|
|
75
|
+
| \`${M}\` | Delete word forwards |
|
|
76
|
+
| \`${w}\` | Delete to start of line |
|
|
77
|
+
| \`${E}\` | Delete to end of line |
|
|
78
|
+
| \`${S}\` | Paste the most-recently-deleted text |
|
|
79
|
+
| \`${C}\` | Cycle through the deleted text after pasting |
|
|
80
|
+
| \`${p}\` | Undo |
|
|
81
|
+
|
|
82
|
+
**Other**
|
|
83
|
+
| Key | Action |
|
|
84
|
+
|-----|--------|
|
|
85
|
+
| \`${y}\` | Path completion / accept autocomplete |
|
|
86
|
+
| \`${b}\` | Cancel autocomplete / abort streaming |
|
|
87
|
+
| \`${l}\` | Show context/skills/extensions |
|
|
88
|
+
| \`${T}\` | Clear editor (first) / exit (second) |
|
|
89
|
+
| \`${$}\` | Exit (when editor is empty) |
|
|
90
|
+
| \`${A}\` | Suspend to background |
|
|
91
|
+
| \`${R}\` | Cycle thinking level |
|
|
92
|
+
| \`${K}\` | Cycle models |
|
|
93
|
+
| \`${te}\` | Open model selector |
|
|
94
|
+
| \`${_}\` | Select provider then model |
|
|
95
|
+
| \`${j}\` | Toggle tool output expansion |
|
|
96
|
+
| \`${Q}\` | Toggle thinking block visibility |
|
|
97
|
+
| \`${G}\` | Edit message in external editor |
|
|
98
|
+
| \`${B}\` | Queue follow-up message |
|
|
99
|
+
| \`${se}\` | Restore queued messages |
|
|
100
|
+
| \`Ctrl+V\` | Paste image from clipboard |
|
|
101
|
+
| \`/\` | Slash commands |
|
|
102
|
+
| \`!\` | Run bash command |
|
|
103
|
+
| \`!!\` | Run bash command (excluded from context) |
|
|
104
|
+
`;const V=this.session.extensionRunner;if(V){const z=V.getShortcuts(this.keybindings.getEffectiveConfig());if(z.size>0){W+=`
|
|
105
|
+
**Extensions**
|
|
106
|
+
| Key | Action |
|
|
107
|
+
|-----|--------|
|
|
108
|
+
`;for(const[ie,U]of z){const ne=U.description??U.extensionPath,X=ie.replace(/\b\w/g,oe=>oe.toUpperCase());W+=`| \`${X}\` | ${ne} |
|
|
109
|
+
`}}}this.chatContainer.addChild(new u(1)),this.chatContainer.addChild(new Z),this.chatContainer.addChild(new g(r.bold(r.fg("accent","Keyboard Shortcuts")),1,0)),this.chatContainer.addChild(new u(1)),this.chatContainer.addChild(new me(W.trim(),1,1,this.getMarkdownThemeWithSettings())),this.chatContainer.addChild(new Z),this.ui.requestRender()}async handleClearCommand(){this.state.loadingAnimation&&(this.state.loadingAnimation.stop(),this.state.loadingAnimation=void 0),this.statusContainer.clear(),await this.session.newSession(),this.clearStatusTimers(),this.chatContainer.clear(),this.pendingMessagesContainer.clear(),this.state.compactionQueuedMessages=[],this.state.streamingComponent=void 0,this.state.streamingMessage=void 0,this.state.pendingTools.clear(),this.imagePipeline.clearAttachments(),this.chatContainer.addChild(new u(1)),this.chatContainer.addChild(new g(`${r.fg("accent","\u2713 New session started")}`,1,1)),this.ui.requestRender()}handleRenderDebugCommand(){const e=this.ui.terminal.columns,n=this.ui.terminal.rows,i=this.ui.render(e),o=He(),t=[`Debug output at ${new Date().toISOString()}`,`Terminal: ${e}x${n}`,`Total lines: ${i.length}`,"","=== All rendered lines with visible widths ===",...i.map((a,h)=>{const c=pe(a),d=JSON.stringify(a);return`[${h}] (w=${c}) ${d}`}),"","=== Agent messages (JSONL) ===",...this.session.messages.map(a=>JSON.stringify(a)),""].join(`
|
|
110
|
+
`);P.mkdirSync(D.dirname(o),{recursive:!0}),P.writeFileSync(o,t),this.chatContainer.addChild(new u(1)),this.chatContainer.addChild(new g(`${r.fg("accent","\u2713 Debug log written")}
|
|
111
|
+
${r.fg("muted",o)}`,1,1)),this.ui.requestRender()}handleArminSaysHi(){this.chatContainer.addChild(new u(1)),this.chatContainer.addChild(new it(this.ui)),this.ui.requestRender()}handleShowResourcesCommand(){const e=this.session.extensionRunner;this.showLoadedResources({extensionPaths:e?.getExtensionPaths()??[],force:!0,showDiagnosticsWhenQuiet:!0}),this.ui.requestRender()}handleDaxnuts(){this.chatContainer.addChild(new u(1)),this.chatContainer.addChild(new $t(this.ui)),this.ui.requestRender()}async handleBashCommand(e,n=!1){const i=this.session.extensionRunner,o=i?await i.emitUserBash({type:"user_bash",command:e,excludeFromContext:n,cwd:this.session.cwd}):void 0;if(o?.result){const a=o.result;this.bashComponent=new ce(e,this.ui,n),this.session.isStreaming?(this.pendingMessagesContainer.addChild(this.bashComponent),this.pendingBashComponents.push(this.bashComponent)):this.chatContainer.addChild(this.bashComponent),a.output&&this.bashComponent.appendOutput(a.output),this.bashComponent.setComplete(a.exitCode,a.cancelled,a.truncated?{truncated:!0,content:a.output}:void 0,a.fullOutputPath),this.session.recordBashResult(e,a,{excludeFromContext:n}),this.bashComponent=void 0,this.ui.requestRender();return}const t=this.session.isStreaming;this.bashComponent=new ce(e,this.ui,n),t?(this.pendingMessagesContainer.addChild(this.bashComponent),this.pendingBashComponents.push(this.bashComponent)):this.chatContainer.addChild(this.bashComponent),this.ui.requestRender();try{const a=await this.session.executeBash(e,h=>{this.bashComponent&&(this.bashComponent.appendOutput(h),this.ui.requestRender())},{excludeFromContext:n,operations:o?.operations});this.bashComponent&&this.bashComponent.setComplete(a.exitCode,a.cancelled,a.truncated?{truncated:!0,content:a.output}:void 0,a.fullOutputPath)}catch(a){this.bashComponent&&this.bashComponent.setComplete(void 0,!1),this.showError(`Bash command failed: ${a instanceof Error?a.message:"Unknown error"}`)}this.bashComponent=void 0,this.ui.requestRender()}async handleCompactCommand(e){if(this.sessionManager.getEntries().filter(o=>o.type==="message").length<2){this.showWarning("Nothing to compact (no messages yet)");return}await this.executeCompaction(e,!1)}async executeCompaction(e,n=!1){this.state.loadingAnimation&&(this.state.loadingAnimation.stop(),this.state.loadingAnimation=void 0),this.statusContainer.clear();const i=this.defaultEditor.onEscape;this.defaultEditor.onEscape=()=>{this.session.abortCompaction()},this.chatContainer.addChild(new u(1));const o=`(${L(this.keybindings,"interrupt")} to cancel)`,t=n?`Auto-compacting context... ${o}`:`Compacting context... ${o}`,a=new Mt(this.ui,r,t);this.statusContainer.addChild(a),this.ui.requestRender();let h;try{h=await this.session.compact(e),this.rebuildChatFromMessages();const c=Ge(h.summary,h.tokensBefore,new Date().toISOString());this.addMessageToChat(c),this.footer.invalidate()}catch(c){const d=c instanceof Error?c.message:String(c);d==="Compaction cancelled"||c instanceof Error&&c.name==="AbortError"?this.showError("Compaction cancelled"):this.showError(`Compaction failed: ${d}`)}finally{a.stop(),this.statusContainer.clear(),this.defaultEditor.onEscape=i}return this.flushCompactionQueue({willRetry:!1}),h}stop(){this.stopWelcomeBannerTimer(),this.clearBuddyPetResetTimer(),this.buddyPet?.dispose(),this.buddyPet=null,this.state.loadingAnimation&&(this.state.loadingAnimation.stop(),this.state.loadingAnimation=void 0),this.clearExtensionTerminalInputListeners(),this.footer.dispose(),this.footerDataProvider.dispose(),this.unsubscribe&&this.unsubscribe(),this.isInitialized&&(this.ui.stop(),this.isInitialized=!1)}async applyPersonaFromSessionIfAny(){const n=this.session.sessionManager.getEntries().filter(o=>o.type==="custom"&&o.customType==="persona");let i;if(n.length>0){const o=n[n.length-1],t=o?.data?.personaId??o?.data?.id;typeof t=="string"&&t.trim()&&(i=t)}i=i??de(),i&&(process.env.NANOMEM_MEMORY_DIR=I(we(i)),process.env.SOUL_DIR=I(ye(i)),process.env.MCP_CONFIG_PATH=I(Ce(i)),process.env.NANO_PERSONA_DIR=I(le(i)),n.length>0&&be(i),!this.session.isStreaming&&!this.session.isCompacting&&await this.session.reload())}handleSoulCommand(){const e=this.session._soulManager;if(!e){this.chatContainer.addChild(new u(1)),this.chatContainer.addChild(new g(r.fg("warning","\u26A0\uFE0F Soul Not Enabled"),1,0)),this.chatContainer.addChild(new g(r.fg("dim","Soul (AI personality system) is not enabled. Please use Catui 1.3.0 or later."),1,0)),this.ui.requestRender();return}const n=Lt(e,{compact:!1});this.chatContainer.addChild(new u(1)),this.chatContainer.addChild(new g(n,1,0)),this.ui.requestRender()}async handlePersonaCommand(e){const n=e.trim().split(/\s+/),i=(n[1]??"list").toLowerCase(),o=n[2];if(i==="list"||i==="use"&&!o){const a=Se(),h=de();this.showSelector(c=>{const d=new Et(this.ui,a,h,Je,m=>{c(),this.switchPersona(m)},()=>{c(),this.ui.requestRender()});return{component:d,focus:d}});return}if(i!=="use"){this.chatContainer.addChild(new u(1)),this.chatContainer.addChild(new g(r.fg("dim",`Usage:
|
|
112
|
+
- /persona (open selector)
|
|
113
|
+
- /persona use <personaId>`),1,0)),this.ui.requestRender();return}const t=o?o.trim():"";if(!t){this.showError("Missing personaId. Use: /persona use <personaId>");return}await this.switchPersona(t)}async switchPersona(e){const n=le(e);if(!P.existsSync(n)){this.showError(`Persona not found: ${e}
|
|
114
|
+
Expected: ${n}`);return}const i=this.session.sessionManager.getBranch();let o;for(let t=i.length-1;t>=0;t--){const a=i[t];if(a?.type==="message"&&a?.message?.role==="user"){o=a.id;break}}o&&(await this.session.fork(o)).cancelled||(this.session.sessionManager.appendCustomEntry("persona",{personaId:e}),be(e),process.env.NANOMEM_MEMORY_DIR=I(we(e)),process.env.SOUL_DIR=I(ye(e)),process.env.MCP_CONFIG_PATH=I(Ce(e)),process.env.NANO_PERSONA_DIR=I(le(e)),process.env.CATUI_JUST_SWITCHED_PERSONA="true",await this.handleReloadCommand(),this.showStatus(`Persona switched to: ${e}`))}handleMemoryCommand(){const e=[];e.push(r.fg("accent","\u{1F4DA} Project Memory - NanoMem")),e.push(""),e.push(r.fg("dim",`Storage: ${this.session.agentDir}/memory/`)),e.push(r.fg("dim"," - knowledge.json (project knowledge)")),e.push(r.fg("dim"," - lessons.json (lessons learned)")),e.push(r.fg("dim"," - preferences.json (user preferences)")),e.push(r.fg("dim"," - patterns.json (behavior patterns)")),e.push(r.fg("dim"," - facets.json (patterns/struggles)")),e.push(""),e.push(r.fg("dim","\u{1F4A1} Tip: NanoMem automatically extracts and remembers project knowledge from conversations")),e.push(r.fg("dim"," - Remembers API endpoints, configuration options")),e.push(r.fg("dim"," - Learns error patterns and solutions")),e.push(r.fg("dim"," - Recognizes user preferences and coding style")),this.chatContainer.addChild(new u(1)),this.chatContainer.addChild(new g(e.join(`
|
|
115
|
+
`),1,0)),this.ui.requestRender()}handleBrowserOptInCommand(){this.showStatus(["Browser automation is opt-in.","","Enable it by starting Catui with:"," --extension extensions/builtin/browser","","Or add that path to your extensions config, then run /browser status."].join(`
|
|
116
|
+
`))}async handleMcpCommand(e){const n=e.trim().split(/\s+/),i=(n[1]||"list").toLowerCase(),o=n[2];if(i==="list"){const t=fe();if(this.chatContainer.addChild(new u(1)),t.length===0)this.chatContainer.addChild(new g(r.fg("dim","No MCP servers configured."),1,0));else{const a=[r.bold("MCP Servers"),"",...t.map(h=>{const c=h.enabled===!1?"disabled":"enabled";return`- ${h.id} (${h.name}) [${c}]`}),"",r.fg("dim","Use: /mcp enable <id> or /mcp disable <id>")];this.chatContainer.addChild(new g(a.join(`
|
|
117
|
+
`),1,0))}this.ui.requestRender();return}if(i==="status"||i==="tools"){const t=this.session.getAllTools().filter(a=>a.name.startsWith("mcp_"));if(this.chatContainer.addChild(new u(1)),t.length===0)this.chatContainer.addChild(new g([r.bold("MCP Runtime Status"),"","No MCP tools are currently registered in this session.",r.fg("dim","Tip: run /reload and check startup logs for MCP errors.")].join(`
|
|
118
|
+
`),1,0));else{const a=[r.bold("MCP Runtime Status"),"",`Registered MCP tools: ${t.length}`,...t.slice(0,30).map(h=>`- ${h.name}`)];t.length>30&&a.push(r.fg("dim",`...and ${t.length-30} more`)),this.chatContainer.addChild(new g(a.join(`
|
|
119
|
+
`),1,0))}this.ui.requestRender();return}if((i==="enable"||i==="disable")&&o){Ve(o,i==="enable"),this.chatContainer.addChild(new u(1)),this.chatContainer.addChild(new g(`${o} ${i==="enable"?"enabled":"disabled"}. Run /reload to apply changes.`,1,0)),this.ui.requestRender();return}this.chatContainer.addChild(new u(1)),this.chatContainer.addChild(new g("Usage: /mcp [list|status|tools|enable <id>|disable <id>]",1,0)),this.ui.requestRender()}async handleLanguageCommand(e){const{setLocale:n,getLocale:i,AVAILABLE_LOCALES:o,LOCALE_NAMES:t}=await import("../../core/platform/i18n/index.js"),a=i(),c=e.split(" ")[1]?.toLowerCase();if(!c){this.chatContainer.addChild(new u(1)),this.chatContainer.addChild(new g(r.fg("accent",`Current language: ${t[a]}`),1,0)),this.chatContainer.addChild(new g("Available languages:",1,0));for(const m of o){const f=m===a?" \u25CF":"";this.chatContainer.addChild(new g(` /language ${m} - ${t[m]}${f}`,1,0))}this.ui.requestRender();return}const d=c;if(!o.includes(d)){this.chatContainer.addChild(new u(1)),this.chatContainer.addChild(new g(r.fg("error",`Unknown language: ${c}`),1,0)),this.chatContainer.addChild(new g("Available: "+o.join(", "),1,0)),this.ui.requestRender();return}n(d),this.chatContainer.addChild(new u(1)),this.chatContainer.addChild(new g(r.fg("success",`Language changed to: ${t[d]}`),1,0)),this.chatContainer.addChild(new g("Restart Catui for full effect.",1,0)),this.ui.requestRender()}}export{ni as InteractiveMode};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* [WHO]: Tip, getTipToShow, resetTipCooldown
|
|
3
|
+
* [FROM]: No external dependencies
|
|
4
|
+
* [TO]: Consumed by catui-loader.ts
|
|
5
|
+
* [HERE]: modes/interactive/services/tips.ts - spinner tips registry and scheduling
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Get the next relevant tip to show on the spinner.
|
|
9
|
+
* Returns null if no tip should be shown (cooldown not expired or no relevant tips).
|
|
10
|
+
*/
|
|
11
|
+
export declare function getTipToShow(sessionId: string): string | null;
|
|
12
|
+
/**
|
|
13
|
+
* Reset tip cooldown when session count increments.
|
|
14
|
+
* Call this when starting a new session.
|
|
15
|
+
*/
|
|
16
|
+
export declare function onSessionIncrement(sessionId: string): void;
|
|
17
|
+
/**
|
|
18
|
+
* Clear cooldown tracking for a session (e.g., on session reset).
|
|
19
|
+
*/
|
|
20
|
+
export declare function resetTipsForSession(sessionId: string): void;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var g=Object.defineProperty;var e=(t,n)=>g(t,"name",{value:n,configurable:!0});const S=[{id:"btw-hint",content:"Use /btw <question> to ask quick questions without interrupting the current task",cooldownSessions:5,isRelevant:e(()=>!0,"isRelevant")},{id:"loop-hint",content:"Use /loop <interval> to schedule recurring reminders",cooldownSessions:3,isRelevant:e(()=>!0,"isRelevant")},{id:"plan-hint",content:"Use /plan to enter plan mode before making changes",cooldownSessions:3,isRelevant:e(()=>!0,"isRelevant")},{id:"branch-hint",content:"Use /branch to create a side branch and explore different approaches",cooldownSessions:3,isRelevant:e(()=>!0,"isRelevant")},{id:"compact-hint",content:"Context window getting full? The agent will compact automatically",cooldownSessions:5,isRelevant:e(()=>!0,"isRelevant")}],m=8e3,u=new Map,r=new Map,l=new Map;function T(t){const n=Date.now(),p=l.get(t)??0,a=r.get(t);if(a&&n<a.expiresAt)return a.content;let s=u.get(t);s||(s=new Map,u.set(t,s));const d=S.filter(i=>{if(i.isRelevant&&!i.isRelevant())return!1;const c=i.cooldownSessions??3,h=s.get(i.id);return!(h!==void 0&&p-h<c)});if(d.length===0)return null;let o=null,f=1/0;for(const i of d){const c=s.get(i.id)??-1/0;c<f&&(f=c,o=i)}if(!o)return null;s.set(o.id,p);const w=typeof o.content=="function"?o.content():o.content;return r.set(t,{tipId:o.id,content:w,shownAt:n,expiresAt:n+m}),w}e(T,"getTipToShow");function y(t){const n=l.get(t)??0;l.set(t,n+1),r.delete(t)}e(y,"onSessionIncrement");function x(t){l.delete(t),u.delete(t),r.delete(t)}e(x,"resetTipsForSession");export{T as getTipToShow,y as onSessionIncrement,x as resetTipsForSession};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* [WHO]: getModelArgumentCompletions(), getAgentLoopArgumentCompletions(), getThinkingArgumentCompletions(), getMcpArgumentCompletions(), getLanguageArgumentCompletions(), getPersonaArgumentCompletions(), getLoginArgumentCompletions()
|
|
3
|
+
* [FROM]: Depends on @catui/agent-core, @catui/tui, core/platform/i18n, core/mcp/mcp-client
|
|
4
|
+
* [TO]: Consumed by modes/interactive/interactive-mode.ts
|
|
5
|
+
* [HERE]: modes/interactive/slash-command-arguments.ts - pure argument completion helpers for built-in TUI slash commands
|
|
6
|
+
*/
|
|
7
|
+
import type { ThinkingLevel } from "@catui/agent-core";
|
|
8
|
+
import type { ArgumentCompletionContext, AutocompleteItem } from "@catui/tui";
|
|
9
|
+
import type { MCPServerConfig } from "../../core/mcp/mcp-types.js";
|
|
10
|
+
type McpCompletionServer = Pick<MCPServerConfig, "id" | "name" | "enabled">;
|
|
11
|
+
type LoginCompletionProvider = {
|
|
12
|
+
id: string;
|
|
13
|
+
name: string;
|
|
14
|
+
authType: "oauth" | "api_key";
|
|
15
|
+
};
|
|
16
|
+
type ModelCompletionEntry = {
|
|
17
|
+
id: string;
|
|
18
|
+
name: string;
|
|
19
|
+
provider: string;
|
|
20
|
+
};
|
|
21
|
+
export declare function getModelArgumentCompletions(argumentPrefix: string, context: Pick<ArgumentCompletionContext, "tokenIndex"> | undefined, models: readonly ModelCompletionEntry[]): AutocompleteItem[] | null;
|
|
22
|
+
export declare function getThinkingArgumentCompletions(argumentPrefix: string, context: Pick<ArgumentCompletionContext, "tokenIndex"> | undefined, levels: readonly ThinkingLevel[]): AutocompleteItem[] | null;
|
|
23
|
+
export declare function getAgentLoopArgumentCompletions(argumentPrefix: string, context?: Pick<ArgumentCompletionContext, "tokenIndex">): AutocompleteItem[] | null;
|
|
24
|
+
export declare function getMcpArgumentCompletions(argumentPrefix: string, context?: Pick<ArgumentCompletionContext, "tokenIndex" | "previousTokens">, servers?: readonly McpCompletionServer[]): AutocompleteItem[] | null;
|
|
25
|
+
export declare function getLanguageArgumentCompletions(argumentPrefix: string, context?: Pick<ArgumentCompletionContext, "tokenIndex">): AutocompleteItem[] | null;
|
|
26
|
+
export declare function getPersonaArgumentCompletions(argumentPrefix: string, context?: Pick<ArgumentCompletionContext, "tokenIndex" | "previousTokens">, personas?: readonly string[], activePersonaId?: string): AutocompleteItem[] | null;
|
|
27
|
+
export declare function getLoginArgumentCompletions(argumentPrefix: string, context?: Pick<ArgumentCompletionContext, "tokenIndex">, providers?: readonly LoginCompletionProvider[]): AutocompleteItem[] | null;
|
|
28
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var m=Object.defineProperty;var a=(t,n)=>m(t,"name",{value:n,configurable:!0});import{AVAILABLE_LOCALES as d,LOCALE_NAMES as p}from"../../core/platform/i18n/index.js";const c={off:"Skip extra reasoning",minimal:"Very small reasoning budget",low:"Light reasoning for simple tasks",medium:"Balanced reasoning for everyday coding",high:"Deeper reasoning for complex work",xhigh:"Maximum reasoning when the model supports it"},f=[{value:"standard",label:"standard",description:"Use the normal agent loop"},{value:"weak-model-compatible",label:"weak-model-compatible",description:"Keep working with simpler models"}],g=[{value:"list",label:"list",description:"Show configured MCP servers"},{value:"status",label:"status",description:"Show loaded MCP tools and runtime status"},{value:"tools",label:"tools",description:"Show loaded MCP tools and runtime status"},{value:"enable",label:"enable",description:"Turn on an MCP server"},{value:"disable",label:"disable",description:"Turn off an MCP server"}],b=[{value:"list",label:"list",description:"Show available personas"},{value:"use",label:"use",description:"Switch to a persona"}];function s(t,n){const o=n.trim().toLowerCase(),e=t.filter(r=>r.value.toLowerCase().startsWith(o));return e.length>0?e.map(r=>({...r})):null}a(s,"matchCompletions");function u(t,n){const o=n.trim().toLowerCase(),e=t.filter(r=>r.value.toLowerCase().startsWith(o)?!0:r.label.toLowerCase().split(/[\s-]+/).some(i=>i.startsWith(o)));return e.length>0?e.map(r=>({...r})):null}a(u,"matchCompletionsByValueOrLabelWord");function l(t){return!t||t.tokenIndex===0}a(l,"isFirstToken");function w(t,n,o){return l(n)?u(o.map(e=>({value:`${e.provider}/${e.id}`,label:e.name,description:`${e.provider}/${e.id}`})),t):null}a(w,"getModelArgumentCompletions");function L(t,n,o){return l(n)?s(o.map(e=>({value:e,label:e,description:c[e]})),t):null}a(L,"getThinkingArgumentCompletions");function A(t,n){return l(n)?s(f,t):null}a(A,"getAgentLoopArgumentCompletions");function v(t,n,o=[]){if(l(n))return s(g,t);if(n?.tokenIndex!==1)return null;const e=n.previousTokens[0]?.toLowerCase();if(e!=="enable"&&e!=="disable")return null;const r=e==="disable";return u(o.filter(i=>i.enabled!==!1===r).map(i=>({value:i.id,label:i.name,description:`${i.name} (${i.enabled===!1?"disabled":"enabled"})`})),t)}a(v,"getMcpArgumentCompletions");function S(t,n){return l(n)?u(d.map(o=>({value:o,label:p[o],description:p[o]})),t):null}a(S,"getLanguageArgumentCompletions");function O(t,n,o=[],e){return l(n)?s(b,t):n?.tokenIndex!==1||n.previousTokens[0]?.toLowerCase()!=="use"?null:s(o.map(r=>({value:r,label:r,description:r===e?"Current persona":`Switch to ${r}`})),t)}a(O,"getPersonaArgumentCompletions");function T(t,n,o=[]){return l(n)?u(o.map(e=>({value:e.id,label:e.name,description:e.authType==="oauth"?`Sign in with browser for ${e.name}`:`Set API key for ${e.name}`})),t):null}a(T,"getLoginArgumentCompletions");export{A as getAgentLoopArgumentCompletions,S as getLanguageArgumentCompletions,T as getLoginArgumentCompletions,v as getMcpArgumentCompletions,w as getModelArgumentCompletions,O as getPersonaArgumentCompletions,L as getThinkingArgumentCompletions};
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* [WHO]: Provides InteractiveState, CompactionQueuedMessage — the shared render/turn UI state container
|
|
3
|
+
* [FROM]: Depends on @catui/ai (AssistantMessage), @catui/tui (Component/Spacer/Text),
|
|
4
|
+
* components (AssistantMessageComponent/CustomMessageComponent/ToolExecutionComponent) — types only
|
|
5
|
+
* [TO]: Consumed by modes/interactive/interactive-mode.ts (holds one as `this.state`); will be read by the
|
|
6
|
+
* render-layer controller when handleEvent is sliced (UI04)
|
|
7
|
+
* [HERE]: modes/interactive/state/interactive-state.ts — P5 state 合一 (UI02)
|
|
8
|
+
*
|
|
9
|
+
* Consolidates the ~20 scattered `this._` fields that describe the *current/streaming turn's render
|
|
10
|
+
* state* (streaming message, tool components, loaders, run timers, status line, optimistic + compaction
|
|
11
|
+
* queues). Plain field holder — no behavior; relocated verbatim from InteractiveMode so behavior is
|
|
12
|
+
* identical. Concern-local state (bash, extension widgets, cancellation, skill, buddy) stays with its
|
|
13
|
+
* own owner and is not consolidated here.
|
|
14
|
+
*/
|
|
15
|
+
import type { AssistantMessage } from "@catui/ai/types";
|
|
16
|
+
import type { Component, Spacer, Text } from "@catui/tui";
|
|
17
|
+
import type { AssistantMessageComponent } from "../components/assistant-message.js";
|
|
18
|
+
import type { CustomMessageComponent } from "../components/custom-message.js";
|
|
19
|
+
import type { PlanProgressPanelComponent } from "../components/plan-progress-panel.js";
|
|
20
|
+
import type { TaskStatusPanelComponent } from "../components/task-status-panel.js";
|
|
21
|
+
import type { ToolExecutionComponent } from "../components/tool-execution.js";
|
|
22
|
+
export type CompactionQueuedMessage = {
|
|
23
|
+
text: string;
|
|
24
|
+
mode: "steer" | "followUp";
|
|
25
|
+
};
|
|
26
|
+
/** Per-sub-agent state tracked for TUI display. */
|
|
27
|
+
export interface SubAgentState {
|
|
28
|
+
id: string;
|
|
29
|
+
agentType: string;
|
|
30
|
+
description: string;
|
|
31
|
+
isAsync: boolean;
|
|
32
|
+
isResolved: boolean;
|
|
33
|
+
isError: boolean;
|
|
34
|
+
toolUseCount: number;
|
|
35
|
+
lastToolName: string | null;
|
|
36
|
+
startTime: number;
|
|
37
|
+
}
|
|
38
|
+
/** Per-phase state for plan execution progress display. */
|
|
39
|
+
export interface PlanPhaseState {
|
|
40
|
+
label: string;
|
|
41
|
+
status: "pending" | "in_progress" | "completed";
|
|
42
|
+
}
|
|
43
|
+
/** Overall plan progress state for TUI rendering. */
|
|
44
|
+
export interface PlanProgressState {
|
|
45
|
+
phases: PlanPhaseState[];
|
|
46
|
+
currentPhaseIndex: number;
|
|
47
|
+
startTime: number;
|
|
48
|
+
tokenCount?: number;
|
|
49
|
+
}
|
|
50
|
+
export declare class InteractiveState {
|
|
51
|
+
loadingAnimation: Component | undefined;
|
|
52
|
+
pendingWorkingMessage: string | undefined;
|
|
53
|
+
workingMessageOverride: string | undefined;
|
|
54
|
+
agentRunStartMs: number | undefined;
|
|
55
|
+
agentRunTimer: ReturnType<typeof setInterval> | undefined;
|
|
56
|
+
welcomeBannerTimer: ReturnType<typeof setInterval> | undefined;
|
|
57
|
+
lastStatusSpacer: Spacer | undefined;
|
|
58
|
+
lastStatusText: Text | undefined;
|
|
59
|
+
streamingComponent: AssistantMessageComponent | undefined;
|
|
60
|
+
streamingMessage: AssistantMessage | undefined;
|
|
61
|
+
customStreamComponents: Map<string, CustomMessageComponent>;
|
|
62
|
+
pendingTools: Map<string, ToolExecutionComponent>;
|
|
63
|
+
subAgentStates: Map<string, SubAgentState>;
|
|
64
|
+
subAgentPanelComponent: Component | undefined;
|
|
65
|
+
planProgress: PlanProgressState | undefined;
|
|
66
|
+
planProgressPanel: PlanProgressPanelComponent | undefined;
|
|
67
|
+
taskStatusPanel: TaskStatusPanelComponent | undefined;
|
|
68
|
+
toolOutputExpanded: boolean;
|
|
69
|
+
hideThinkingBlock: boolean;
|
|
70
|
+
compactionQueuedMessages: CompactionQueuedMessage[];
|
|
71
|
+
optimisticUserMessages: Array<{
|
|
72
|
+
text: string;
|
|
73
|
+
}>;
|
|
74
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var s=Object.defineProperty;var n=(e,a)=>s(e,"name",{value:a,configurable:!0});class d{static{n(this,"InteractiveState")}loadingAnimation=void 0;pendingWorkingMessage=void 0;workingMessageOverride=void 0;agentRunStartMs=void 0;agentRunTimer=void 0;welcomeBannerTimer=void 0;lastStatusSpacer=void 0;lastStatusText=void 0;streamingComponent=void 0;streamingMessage=void 0;customStreamComponents=new Map;pendingTools=new Map;subAgentStates=new Map;subAgentPanelComponent=void 0;planProgress=void 0;planProgressPanel=void 0;taskStatusPanel=void 0;toolOutputExpanded=!1;hideThinkingBlock=!1;compactionQueuedMessages=[];optimisticUserMessages=[]}export{d as InteractiveState};
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://raw.githubusercontent.com/O-Catui/Catui/main/packages/coding-agent/src/modes/interactive/theme/theme-schema.json",
|
|
3
|
+
"name": "dark",
|
|
4
|
+
"vars": {
|
|
5
|
+
"cyan": "#00d7ff",
|
|
6
|
+
"blue": "#5f87ff",
|
|
7
|
+
"green": "#b5bd68",
|
|
8
|
+
"red": "#cc6666",
|
|
9
|
+
"yellow": "#ffff00",
|
|
10
|
+
"gray": "#808080",
|
|
11
|
+
"dimGray": "#666666",
|
|
12
|
+
"darkGray": "#505050",
|
|
13
|
+
"accent": "#8abeb7",
|
|
14
|
+
"selectedBg": "#3a3a4a",
|
|
15
|
+
"userMsgBg": "#343541",
|
|
16
|
+
"toolPendingBg": "#282832",
|
|
17
|
+
"toolSuccessBg": "#283228",
|
|
18
|
+
"toolErrorBg": "#3c2828",
|
|
19
|
+
"customMsgBg": "#2d2838"
|
|
20
|
+
},
|
|
21
|
+
"colors": {
|
|
22
|
+
"accent": "accent",
|
|
23
|
+
"border": "blue",
|
|
24
|
+
"borderAccent": "cyan",
|
|
25
|
+
"borderMuted": "darkGray",
|
|
26
|
+
"success": "green",
|
|
27
|
+
"error": "red",
|
|
28
|
+
"warning": "yellow",
|
|
29
|
+
"muted": "gray",
|
|
30
|
+
"dim": "dimGray",
|
|
31
|
+
"text": "",
|
|
32
|
+
"thinkingText": "gray",
|
|
33
|
+
|
|
34
|
+
"selectedBg": "selectedBg",
|
|
35
|
+
"userMessageBg": "userMsgBg",
|
|
36
|
+
"userMessageText": "",
|
|
37
|
+
"customMessageBg": "customMsgBg",
|
|
38
|
+
"customMessageText": "",
|
|
39
|
+
"customMessageLabel": "#9575cd",
|
|
40
|
+
"toolPendingBg": "toolPendingBg",
|
|
41
|
+
"toolSuccessBg": "toolSuccessBg",
|
|
42
|
+
"toolErrorBg": "toolErrorBg",
|
|
43
|
+
"toolTitle": "",
|
|
44
|
+
"toolOutput": "gray",
|
|
45
|
+
|
|
46
|
+
"mdHeading": "#f0c674",
|
|
47
|
+
"mdLink": "#81a2be",
|
|
48
|
+
"mdLinkUrl": "dimGray",
|
|
49
|
+
"mdCode": "accent",
|
|
50
|
+
"mdCodeBlock": "green",
|
|
51
|
+
"mdCodeBlockBorder": "gray",
|
|
52
|
+
"mdQuote": "gray",
|
|
53
|
+
"mdQuoteBorder": "gray",
|
|
54
|
+
"mdHr": "gray",
|
|
55
|
+
"mdListBullet": "accent",
|
|
56
|
+
|
|
57
|
+
"toolDiffAdded": "green",
|
|
58
|
+
"toolDiffRemoved": "red",
|
|
59
|
+
"toolDiffContext": "gray",
|
|
60
|
+
|
|
61
|
+
"syntaxComment": "#6A9955",
|
|
62
|
+
"syntaxKeyword": "#569CD6",
|
|
63
|
+
"syntaxFunction": "#DCDCAA",
|
|
64
|
+
"syntaxVariable": "#9CDCFE",
|
|
65
|
+
"syntaxString": "#CE9178",
|
|
66
|
+
"syntaxNumber": "#B5CEA8",
|
|
67
|
+
"syntaxType": "#4EC9B0",
|
|
68
|
+
"syntaxOperator": "#D4D4D4",
|
|
69
|
+
"syntaxPunctuation": "#D4D4D4",
|
|
70
|
+
|
|
71
|
+
"thinkingOff": "darkGray",
|
|
72
|
+
"thinkingMinimal": "#6e6e6e",
|
|
73
|
+
"thinkingLow": "#5f87af",
|
|
74
|
+
"thinkingMedium": "#81a2be",
|
|
75
|
+
"thinkingHigh": "#b294bb",
|
|
76
|
+
"thinkingXhigh": "#d183e8",
|
|
77
|
+
|
|
78
|
+
"bashMode": "green"
|
|
79
|
+
},
|
|
80
|
+
"export": {
|
|
81
|
+
"pageBg": "#18181e",
|
|
82
|
+
"cardBg": "#1e1e24",
|
|
83
|
+
"infoBg": "#3c3728"
|
|
84
|
+
}
|
|
85
|
+
}
|