@sammorrowdrums/mcpi 0.70.8 → 0.85.0-bootstrap.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1621 -0
- package/LICENSE +21 -0
- package/README.md +196 -141
- package/dist/bun/cli.d.ts.map +1 -1
- package/dist/bun/cli.js +4 -0
- package/dist/bun/cli.js.map +1 -1
- package/dist/bun/register-bedrock.d.ts.map +1 -1
- package/dist/bun/register-bedrock.js +1 -1
- package/dist/bun/register-bedrock.js.map +1 -1
- package/dist/bun/restore-sandbox-env.d.ts +17 -0
- package/dist/bun/restore-sandbox-env.d.ts.map +1 -0
- package/dist/bun/restore-sandbox-env.js +36 -0
- package/dist/bun/restore-sandbox-env.js.map +1 -0
- package/dist/cli/args.d.ts +9 -2
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +116 -16
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/auth-check.d.ts +19 -0
- package/dist/cli/auth-check.d.ts.map +1 -0
- package/dist/cli/auth-check.js +50 -0
- package/dist/cli/auth-check.js.map +1 -0
- package/dist/cli/auth-command.d.ts +24 -0
- package/dist/cli/auth-command.d.ts.map +1 -0
- package/dist/cli/auth-command.js +103 -0
- package/dist/cli/auth-command.js.map +1 -0
- package/dist/cli/config-selector.d.ts +6 -4
- package/dist/cli/config-selector.d.ts.map +1 -1
- package/dist/cli/config-selector.js +4 -4
- package/dist/cli/config-selector.js.map +1 -1
- package/dist/cli/credential-print.d.ts +13 -0
- package/dist/cli/credential-print.d.ts.map +1 -0
- package/dist/cli/credential-print.js +76 -0
- package/dist/cli/credential-print.js.map +1 -0
- package/dist/cli/experimental/auth.d.ts +16 -0
- package/dist/cli/experimental/auth.d.ts.map +1 -0
- package/dist/cli/experimental/auth.js +13 -0
- package/dist/cli/experimental/auth.js.map +1 -0
- package/dist/cli/experimental/cli.d.ts +6 -0
- package/dist/cli/experimental/cli.d.ts.map +1 -0
- package/dist/cli/experimental/cli.js +5 -0
- package/dist/cli/experimental/cli.js.map +1 -0
- package/dist/cli/experimental/command-options.d.ts +17 -0
- package/dist/cli/experimental/command-options.d.ts.map +1 -0
- package/dist/cli/experimental/command-options.js +35 -0
- package/dist/cli/experimental/command-options.js.map +1 -0
- package/dist/cli/experimental/command.d.ts +63 -0
- package/dist/cli/experimental/command.d.ts.map +1 -0
- package/dist/cli/experimental/command.js +130 -0
- package/dist/cli/experimental/command.js.map +1 -0
- package/dist/cli/experimental/commands/client.d.ts +13 -0
- package/dist/cli/experimental/commands/client.d.ts.map +1 -0
- package/dist/cli/experimental/commands/client.js +25 -0
- package/dist/cli/experimental/commands/client.js.map +1 -0
- package/dist/cli/experimental/commands/mcpi.d.ts +15 -0
- package/dist/cli/experimental/commands/mcpi.d.ts.map +1 -0
- package/dist/cli/experimental/commands/mcpi.js +28 -0
- package/dist/cli/experimental/commands/mcpi.js.map +1 -0
- package/dist/cli/experimental/commands/server.d.ts +13 -0
- package/dist/cli/experimental/commands/server.d.ts.map +1 -0
- package/dist/cli/experimental/commands/server.js +25 -0
- package/dist/cli/experimental/commands/server.js.map +1 -0
- package/dist/cli/experimental/transport-address.d.ts +10 -0
- package/dist/cli/experimental/transport-address.d.ts.map +1 -0
- package/dist/cli/experimental/transport-address.js +38 -0
- package/dist/cli/experimental/transport-address.js.map +1 -0
- package/dist/cli/file-processor.d.ts.map +1 -1
- package/dist/cli/file-processor.js +13 -26
- package/dist/cli/file-processor.js.map +1 -1
- package/dist/cli/initial-message.d.ts +1 -1
- package/dist/cli/initial-message.d.ts.map +1 -1
- package/dist/cli/initial-message.js.map +1 -1
- package/dist/cli/list-models.d.ts +2 -2
- package/dist/cli/list-models.d.ts.map +1 -1
- package/dist/cli/list-models.js +4 -4
- package/dist/cli/list-models.js.map +1 -1
- package/dist/cli/project-trust.d.ts +10 -0
- package/dist/cli/project-trust.d.ts.map +1 -0
- package/dist/cli/project-trust.js +48 -0
- package/dist/cli/project-trust.js.map +1 -0
- package/dist/cli/session-picker.d.ts +3 -2
- package/dist/cli/session-picker.d.ts.map +1 -1
- package/dist/cli/session-picker.js +5 -4
- package/dist/cli/session-picker.js.map +1 -1
- package/dist/cli/startup-ui.d.ts +20 -0
- package/dist/cli/startup-ui.d.ts.map +1 -0
- package/dist/cli/startup-ui.js +184 -0
- package/dist/cli/startup-ui.js.map +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +6 -3
- package/dist/cli.js.map +1 -1
- package/dist/client/index.d.ts +3 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +3 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/remote-session.d.ts +53 -0
- package/dist/client/remote-session.d.ts.map +1 -0
- package/dist/client/remote-session.js +340 -0
- package/dist/client/remote-session.js.map +1 -0
- package/dist/client/transcript.d.ts +12 -0
- package/dist/client/transcript.d.ts.map +1 -0
- package/dist/client/transcript.js +98 -0
- package/dist/client/transcript.js.map +1 -0
- package/dist/config.d.ts +34 -12
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +312 -61
- package/dist/config.js.map +1 -1
- package/dist/core/agent-session-runtime.d.ts +11 -9
- package/dist/core/agent-session-runtime.d.ts.map +1 -1
- package/dist/core/agent-session-runtime.js +16 -7
- package/dist/core/agent-session-runtime.js.map +1 -1
- package/dist/core/agent-session-services.d.ts +13 -12
- package/dist/core/agent-session-services.d.ts.map +1 -1
- package/dist/core/agent-session-services.js +34 -14
- package/dist/core/agent-session-services.js.map +1 -1
- package/dist/core/agent-session.d.ts +110 -53
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +662 -488
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/auth-guidance.d.ts.map +1 -1
- package/dist/core/auth-guidance.js.map +1 -1
- package/dist/core/auth-storage.d.ts +35 -104
- package/dist/core/auth-storage.d.ts.map +1 -1
- package/dist/core/auth-storage.js +272 -286
- package/dist/core/auth-storage.js.map +1 -1
- package/dist/core/bash-executor.d.ts +1 -1
- package/dist/core/bash-executor.d.ts.map +1 -1
- package/dist/core/bash-executor.js +11 -8
- package/dist/core/bash-executor.js.map +1 -1
- package/dist/core/cache-stats.d.ts +49 -0
- package/dist/core/cache-stats.d.ts.map +1 -0
- package/dist/core/cache-stats.js +101 -0
- package/dist/core/cache-stats.js.map +1 -0
- package/dist/core/compaction/branch-summarization.d.ts +16 -6
- package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
- package/dist/core/compaction/branch-summarization.js +13 -10
- package/dist/core/compaction/branch-summarization.js.map +1 -1
- package/dist/core/compaction/compaction.d.ts +25 -9
- package/dist/core/compaction/compaction.d.ts.map +1 -1
- package/dist/core/compaction/compaction.js +163 -133
- package/dist/core/compaction/compaction.js.map +1 -1
- package/dist/core/compaction/index.d.ts +3 -3
- package/dist/core/compaction/index.d.ts.map +1 -1
- package/dist/core/compaction/index.js.map +1 -1
- package/dist/core/compaction/utils.d.ts +3 -3
- package/dist/core/compaction/utils.d.ts.map +1 -1
- package/dist/core/compaction/utils.js +7 -18
- package/dist/core/compaction/utils.js.map +1 -1
- package/dist/core/defaults.d.ts +1 -1
- package/dist/core/defaults.d.ts.map +1 -1
- package/dist/core/defaults.js.map +1 -1
- package/dist/core/env-overlay.d.ts +21 -0
- package/dist/core/env-overlay.d.ts.map +1 -0
- package/dist/core/env-overlay.js +25 -0
- package/dist/core/env-overlay.js.map +1 -0
- package/dist/core/exec.d.ts +8 -1
- package/dist/core/exec.d.ts.map +1 -1
- package/dist/core/exec.js +7 -1
- package/dist/core/exec.js.map +1 -1
- package/dist/core/experimental.d.ts +6 -0
- package/dist/core/experimental.d.ts.map +1 -0
- package/dist/core/experimental.js +8 -0
- package/dist/core/experimental.js.map +1 -0
- package/dist/core/export-html/ansi-to-html.d.ts.map +1 -1
- package/dist/core/export-html/ansi-to-html.js +1 -1
- package/dist/core/export-html/ansi-to-html.js.map +1 -1
- package/dist/core/export-html/index.d.ts +2 -2
- package/dist/core/export-html/index.d.ts.map +1 -1
- package/dist/core/export-html/index.js +8 -6
- package/dist/core/export-html/index.js.map +1 -1
- package/dist/core/export-html/template.css +53 -4
- package/dist/core/export-html/template.js +129 -35
- package/dist/core/export-html/tool-renderer.d.ts +2 -8
- package/dist/core/export-html/tool-renderer.d.ts.map +1 -1
- package/dist/core/export-html/tool-renderer.js +15 -2
- package/dist/core/export-html/tool-renderer.js.map +1 -1
- package/dist/core/export-html/vendor/marked.min.js +75 -3
- package/dist/core/extensions/index.d.ts +8 -8
- package/dist/core/extensions/index.d.ts.map +1 -1
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/extensions/loader.d.ts +5 -7
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js +161 -79
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +32 -12
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +194 -3
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/types.d.ts +217 -59
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/extensions/wrapper.d.ts +3 -3
- package/dist/core/extensions/wrapper.d.ts.map +1 -1
- package/dist/core/extensions/wrapper.js +22 -3
- package/dist/core/extensions/wrapper.js.map +1 -1
- package/dist/core/footer-data-provider.d.ts +12 -0
- package/dist/core/footer-data-provider.d.ts.map +1 -1
- package/dist/core/footer-data-provider.js +30 -2
- package/dist/core/footer-data-provider.js.map +1 -1
- package/dist/core/http-dispatcher.d.ts +22 -0
- package/dist/core/http-dispatcher.d.ts.map +1 -0
- package/dist/core/http-dispatcher.js +96 -0
- package/dist/core/http-dispatcher.js.map +1 -0
- package/dist/core/index.d.ts +9 -8
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +1 -0
- package/dist/core/index.js.map +1 -1
- package/dist/core/keybindings.d.ts +79 -10
- package/dist/core/keybindings.d.ts.map +1 -1
- package/dist/core/keybindings.js +11 -10
- package/dist/core/keybindings.js.map +1 -1
- package/dist/core/messages.d.ts +2 -2
- package/dist/core/messages.d.ts.map +1 -1
- package/dist/core/messages.js.map +1 -1
- package/dist/core/model-config.d.ts +571 -0
- package/dist/core/model-config.d.ts.map +1 -0
- package/dist/core/model-config.js +254 -0
- package/dist/core/model-config.js.map +1 -0
- package/dist/core/model-registry.d.ts +23 -110
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +65 -616
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-resolver.d.ts +20 -7
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +139 -43
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/model-runtime.d.ts +100 -0
- package/dist/core/model-runtime.d.ts.map +1 -0
- package/dist/core/model-runtime.js +602 -0
- package/dist/core/model-runtime.js.map +1 -0
- package/dist/core/models-store.d.ts +22 -0
- package/dist/core/models-store.d.ts.map +1 -0
- package/dist/core/models-store.js +113 -0
- package/dist/core/models-store.js.map +1 -0
- package/dist/core/output-guard.d.ts +1 -0
- package/dist/core/output-guard.d.ts.map +1 -1
- package/dist/core/output-guard.js +52 -22
- package/dist/core/output-guard.js.map +1 -1
- package/dist/core/package-manager.d.ts +21 -4
- package/dist/core/package-manager.d.ts.map +1 -1
- package/dist/core/package-manager.js +428 -191
- package/dist/core/package-manager.js.map +1 -1
- package/dist/core/pi-manifest.d.ts +8 -0
- package/dist/core/pi-manifest.d.ts.map +1 -0
- package/dist/core/pi-manifest.js +25 -0
- package/dist/core/pi-manifest.js.map +1 -0
- package/dist/core/project-trust.d.ts +15 -0
- package/dist/core/project-trust.d.ts.map +1 -0
- package/dist/core/project-trust.js +59 -0
- package/dist/core/project-trust.js.map +1 -0
- package/dist/core/prompt-templates.d.ts +4 -2
- package/dist/core/prompt-templates.d.ts.map +1 -1
- package/dist/core/prompt-templates.js +36 -50
- package/dist/core/prompt-templates.js.map +1 -1
- package/dist/core/provider-attribution.d.ts +4 -0
- package/dist/core/provider-attribution.d.ts.map +1 -0
- package/dist/core/provider-attribution.js +72 -0
- package/dist/core/provider-attribution.js.map +1 -0
- package/dist/core/provider-composer.d.ts +58 -0
- package/dist/core/provider-composer.d.ts.map +1 -0
- package/dist/core/provider-composer.js +396 -0
- package/dist/core/provider-composer.js.map +1 -0
- package/dist/core/radius.d.ts +2 -0
- package/dist/core/radius.d.ts.map +1 -0
- package/dist/core/radius.js +2 -0
- package/dist/core/radius.js.map +1 -0
- package/dist/core/remote-catalog-provider.d.ts +17 -0
- package/dist/core/remote-catalog-provider.d.ts.map +1 -0
- package/dist/core/remote-catalog-provider.js +137 -0
- package/dist/core/remote-catalog-provider.js.map +1 -0
- package/dist/core/resolve-config-value.d.ts +13 -6
- package/dist/core/resolve-config-value.d.ts.map +1 -1
- package/dist/core/resolve-config-value.js +143 -22
- package/dist/core/resolve-config-value.js.map +1 -1
- package/dist/core/resource-loader.d.ts +40 -12
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +236 -87
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/runtime-credentials.d.ts +15 -0
- package/dist/core/runtime-credentials.d.ts.map +1 -0
- package/dist/core/runtime-credentials.js +39 -0
- package/dist/core/runtime-credentials.js.map +1 -0
- package/dist/core/sdk.d.ts +26 -25
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +56 -49
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-manager.d.ts +42 -19
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +454 -223
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/settings-manager.d.ts +77 -8
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +255 -67
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/skills.d.ts +2 -2
- package/dist/core/skills.d.ts.map +1 -1
- package/dist/core/skills.js +12 -34
- package/dist/core/skills.js.map +1 -1
- package/dist/core/slash-commands.d.ts +2 -1
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +4 -3
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/source-info.d.ts +1 -1
- package/dist/core/source-info.d.ts.map +1 -1
- package/dist/core/source-info.js.map +1 -1
- package/dist/core/system-prompt.d.ts +1 -1
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +15 -25
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/telemetry.d.ts +7 -1
- package/dist/core/telemetry.d.ts.map +1 -1
- package/dist/core/telemetry.js +7 -1
- package/dist/core/telemetry.js.map +1 -1
- package/dist/core/timings.d.ts +5 -3
- package/dist/core/timings.d.ts.map +1 -1
- package/dist/core/timings.js +26 -16
- package/dist/core/timings.js.map +1 -1
- package/dist/core/tools/bash.d.ts +11 -5
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +224 -185
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/edit-diff.d.ts +26 -5
- package/dist/core/tools/edit-diff.d.ts.map +1 -1
- package/dist/core/tools/edit-diff.js +110 -23
- package/dist/core/tools/edit-diff.js.map +1 -1
- package/dist/core/tools/edit.d.ts +11 -5
- package/dist/core/tools/edit.d.ts.map +1 -1
- package/dist/core/tools/edit.js +67 -100
- package/dist/core/tools/edit.js.map +1 -1
- package/dist/core/tools/file-mutation-queue.d.ts.map +1 -1
- package/dist/core/tools/file-mutation-queue.js +27 -12
- package/dist/core/tools/file-mutation-queue.js.map +1 -1
- package/dist/core/tools/find.d.ts +10 -3
- package/dist/core/tools/find.d.ts.map +1 -1
- package/dist/core/tools/find.js +41 -37
- package/dist/core/tools/find.js.map +1 -1
- package/dist/core/tools/grep.d.ts +7 -3
- package/dist/core/tools/grep.d.ts.map +1 -1
- package/dist/core/tools/grep.js +12 -8
- package/dist/core/tools/grep.js.map +1 -1
- package/dist/core/tools/index.d.ts +18 -18
- package/dist/core/tools/index.d.ts.map +1 -1
- package/dist/core/tools/index.js.map +1 -1
- package/dist/core/tools/ls.d.ts +7 -3
- package/dist/core/tools/ls.d.ts.map +1 -1
- package/dist/core/tools/ls.js +17 -15
- package/dist/core/tools/ls.js.map +1 -1
- package/dist/core/tools/output-accumulator.d.ts +52 -0
- package/dist/core/tools/output-accumulator.d.ts.map +1 -0
- package/dist/core/tools/output-accumulator.js +184 -0
- package/dist/core/tools/output-accumulator.js.map +1 -0
- package/dist/core/tools/path-utils.d.ts +2 -0
- package/dist/core/tools/path-utils.d.ts.map +1 -1
- package/dist/core/tools/path-utils.js +39 -21
- package/dist/core/tools/path-utils.js.map +1 -1
- package/dist/core/tools/read.d.ts +7 -3
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js +101 -51
- package/dist/core/tools/read.js.map +1 -1
- package/dist/core/tools/render-utils.d.ts +5 -2
- package/dist/core/tools/render-utils.d.ts.map +1 -1
- package/dist/core/tools/render-utils.js +18 -2
- package/dist/core/tools/render-utils.js.map +1 -1
- package/dist/core/tools/tool-definition-wrapper.d.ts +2 -2
- package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
- package/dist/core/tools/tool-definition-wrapper.js +3 -3
- package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
- package/dist/core/tools/truncate.d.ts.map +1 -1
- package/dist/core/tools/truncate.js +12 -2
- package/dist/core/tools/truncate.js.map +1 -1
- package/dist/core/tools/write.d.ts +6 -2
- package/dist/core/tools/write.d.ts.map +1 -1
- package/dist/core/tools/write.js +35 -45
- package/dist/core/tools/write.js.map +1 -1
- package/dist/core/trust-manager.d.ts +36 -0
- package/dist/core/trust-manager.d.ts.map +1 -0
- package/dist/core/trust-manager.js +202 -0
- package/dist/core/trust-manager.js.map +1 -0
- package/dist/core/usage-totals.d.ts +19 -0
- package/dist/core/usage-totals.d.ts.map +1 -0
- package/dist/core/usage-totals.js +52 -0
- package/dist/core/usage-totals.js.map +1 -0
- package/dist/extensions/index.d.ts +3 -0
- package/dist/extensions/index.d.ts.map +1 -0
- package/dist/extensions/index.js +3 -0
- package/dist/extensions/index.js.map +1 -0
- package/dist/extensions/llama/client.d.ts +61 -0
- package/dist/extensions/llama/client.d.ts.map +1 -0
- package/dist/extensions/llama/client.js +302 -0
- package/dist/extensions/llama/client.js.map +1 -0
- package/dist/extensions/llama/huggingface.d.ts +23 -0
- package/dist/extensions/llama/huggingface.d.ts.map +1 -0
- package/dist/extensions/llama/huggingface.js +141 -0
- package/dist/extensions/llama/huggingface.js.map +1 -0
- package/dist/extensions/llama/index.d.ts +3 -0
- package/dist/extensions/llama/index.d.ts.map +1 -0
- package/dist/extensions/llama/index.js +217 -0
- package/dist/extensions/llama/index.js.map +1 -0
- package/dist/extensions/llama/provider.d.ts +10 -0
- package/dist/extensions/llama/provider.d.ts.map +1 -0
- package/dist/extensions/llama/provider.js +121 -0
- package/dist/extensions/llama/provider.js.map +1 -0
- package/dist/extensions/llama/ui.d.ts +42 -0
- package/dist/extensions/llama/ui.d.ts.map +1 -0
- package/dist/extensions/llama/ui.js +416 -0
- package/dist/extensions/llama/ui.js.map +1 -0
- package/dist/index.d.ts +34 -27
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -5
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts +2 -2
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +311 -101
- package/dist/main.js.map +1 -1
- package/dist/migrations.d.ts +5 -5
- package/dist/migrations.d.ts.map +1 -1
- package/dist/migrations.js +10 -10
- package/dist/migrations.js.map +1 -1
- package/dist/modes/index.d.ts +6 -5
- package/dist/modes/index.d.ts.map +1 -1
- package/dist/modes/index.js.map +1 -1
- package/dist/modes/interactive/components/armin.d.ts +1 -1
- package/dist/modes/interactive/components/armin.d.ts.map +1 -1
- package/dist/modes/interactive/components/armin.js.map +1 -1
- package/dist/modes/interactive/components/assistant-message.d.ts +8 -3
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/assistant-message.js +55 -26
- package/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/dist/modes/interactive/components/bash-execution.d.ts +2 -2
- package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/bash-execution.js +4 -4
- package/dist/modes/interactive/components/bash-execution.js.map +1 -1
- package/dist/modes/interactive/components/bordered-loader.d.ts +2 -2
- package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -1
- package/dist/modes/interactive/components/bordered-loader.js +1 -1
- package/dist/modes/interactive/components/bordered-loader.js.map +1 -1
- package/dist/modes/interactive/components/branch-summary-message.d.ts +2 -2
- package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/branch-summary-message.js +1 -1
- package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
- package/dist/modes/interactive/components/compaction-summary-message.d.ts +2 -2
- package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/compaction-summary-message.js +1 -1
- package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
- package/dist/modes/interactive/components/config-selector.d.ts +37 -6
- package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/config-selector.js +318 -34
- package/dist/modes/interactive/components/config-selector.js.map +1 -1
- package/dist/modes/interactive/components/countdown-timer.d.ts +3 -3
- package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -1
- package/dist/modes/interactive/components/countdown-timer.js +2 -2
- package/dist/modes/interactive/components/countdown-timer.js.map +1 -1
- package/dist/modes/interactive/components/custom-editor.d.ts +2 -2
- package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-editor.js +9 -2
- package/dist/modes/interactive/components/custom-editor.js.map +1 -1
- package/dist/modes/interactive/components/custom-entry.d.ts +19 -0
- package/dist/modes/interactive/components/custom-entry.d.ts.map +1 -0
- package/dist/modes/interactive/components/custom-entry.js +52 -0
- package/dist/modes/interactive/components/custom-entry.js.map +1 -0
- package/dist/modes/interactive/components/custom-message.d.ts +6 -4
- package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-message.js +11 -3
- package/dist/modes/interactive/components/custom-message.js.map +1 -1
- package/dist/modes/interactive/components/daxnuts.d.ts +1 -1
- package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -1
- package/dist/modes/interactive/components/daxnuts.js.map +1 -1
- package/dist/modes/interactive/components/diff.d.ts.map +1 -1
- package/dist/modes/interactive/components/diff.js.map +1 -1
- package/dist/modes/interactive/components/dynamic-border.d.ts +1 -1
- package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -1
- package/dist/modes/interactive/components/dynamic-border.js.map +1 -1
- package/dist/modes/interactive/components/extension-editor.d.ts +5 -4
- package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-editor.js +19 -32
- package/dist/modes/interactive/components/extension-editor.js.map +1 -1
- package/dist/modes/interactive/components/extension-input.d.ts +1 -1
- package/dist/modes/interactive/components/extension-input.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-input.js +1 -1
- package/dist/modes/interactive/components/extension-input.js.map +1 -1
- package/dist/modes/interactive/components/extension-selector.d.ts +3 -1
- package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-selector.js +7 -2
- package/dist/modes/interactive/components/extension-selector.js.map +1 -1
- package/dist/modes/interactive/components/first-time-setup.d.ts +25 -0
- package/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -0
- package/dist/modes/interactive/components/first-time-setup.js +103 -0
- package/dist/modes/interactive/components/first-time-setup.js.map +1 -0
- package/dist/modes/interactive/components/footer.d.ts +9 -4
- package/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/dist/modes/interactive/components/footer.js +52 -31
- package/dist/modes/interactive/components/footer.js.map +1 -1
- package/dist/modes/interactive/components/index.d.ts +33 -31
- package/dist/modes/interactive/components/index.d.ts.map +1 -1
- package/dist/modes/interactive/components/index.js +2 -0
- package/dist/modes/interactive/components/index.js.map +1 -1
- package/dist/modes/interactive/components/keybinding-hints.d.ts +6 -1
- package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -1
- package/dist/modes/interactive/components/keybinding-hints.js +20 -6
- package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
- package/dist/modes/interactive/components/login-dialog.d.ts +12 -6
- package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
- package/dist/modes/interactive/components/login-dialog.js +46 -17
- package/dist/modes/interactive/components/login-dialog.js.map +1 -1
- package/dist/modes/interactive/components/markdown-transform.d.ts +3 -0
- package/dist/modes/interactive/components/markdown-transform.d.ts.map +1 -0
- package/dist/modes/interactive/components/markdown-transform.js +19 -0
- package/dist/modes/interactive/components/markdown-transform.js.map +1 -0
- package/dist/modes/interactive/components/mermaid.d.ts +11 -0
- package/dist/modes/interactive/components/mermaid.d.ts.map +1 -0
- package/dist/modes/interactive/components/mermaid.js +75 -0
- package/dist/modes/interactive/components/mermaid.js.map +1 -0
- package/dist/modes/interactive/components/model-selector.d.ts +13 -6
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/model-selector.js +92 -44
- package/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.d.ts +7 -4
- package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.js +32 -28
- package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.d.ts +5 -1
- package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.js +52 -14
- package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
- package/dist/modes/interactive/components/session-selector-search.d.ts +1 -1
- package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector-search.js +1 -1
- package/dist/modes/interactive/components/session-selector-search.js.map +1 -1
- package/dist/modes/interactive/components/session-selector.d.ts +4 -5
- package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector.js +18 -16
- package/dist/modes/interactive/components/session-selector.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.d.ts +23 -2
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +322 -22
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/components/show-images-selector.d.ts +1 -1
- package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/show-images-selector.js +1 -1
- package/dist/modes/interactive/components/show-images-selector.js.map +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.d.ts +2 -2
- package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.js +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
- package/dist/modes/interactive/components/status-indicator.d.ts +28 -0
- package/dist/modes/interactive/components/status-indicator.d.ts.map +1 -0
- package/dist/modes/interactive/components/status-indicator.js +60 -0
- package/dist/modes/interactive/components/status-indicator.js.map +1 -0
- package/dist/modes/interactive/components/theme-selector.d.ts +1 -1
- package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/theme-selector.js +1 -1
- package/dist/modes/interactive/components/theme-selector.js.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.d.ts +2 -2
- package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.js +3 -2
- package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
- package/dist/modes/interactive/components/tool-execution.d.ts +2 -2
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-execution.js +33 -2
- package/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/dist/modes/interactive/components/tree-selector.d.ts +7 -2
- package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/tree-selector.js +179 -26
- package/dist/modes/interactive/components/tree-selector.js.map +1 -1
- package/dist/modes/interactive/components/trust-selector.d.ts +23 -0
- package/dist/modes/interactive/components/trust-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/trust-selector.js +91 -0
- package/dist/modes/interactive/components/trust-selector.js.map +1 -0
- package/dist/modes/interactive/components/user-message-selector.d.ts +1 -1
- package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/user-message-selector.js +1 -1
- package/dist/modes/interactive/components/user-message-selector.js.map +1 -1
- package/dist/modes/interactive/components/user-message.d.ts +9 -3
- package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/user-message.js +26 -6
- package/dist/modes/interactive/components/user-message.js.map +1 -1
- package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -1
- package/dist/modes/interactive/components/visual-truncate.js +1 -1
- package/dist/modes/interactive/components/visual-truncate.js.map +1 -1
- package/dist/modes/interactive/external-editor.d.ts +12 -0
- package/dist/modes/interactive/external-editor.d.ts.map +1 -0
- package/dist/modes/interactive/external-editor.js +37 -0
- package/dist/modes/interactive/external-editor.js.map +1 -0
- package/dist/modes/interactive/interactive-mode.d.ts +104 -26
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +1565 -692
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/model-catalog-refresh.d.ts +7 -0
- package/dist/modes/interactive/model-catalog-refresh.d.ts.map +1 -0
- package/dist/modes/interactive/model-catalog-refresh.js +34 -0
- package/dist/modes/interactive/model-catalog-refresh.js.map +1 -0
- package/dist/modes/interactive/model-search.d.ts +12 -0
- package/dist/modes/interactive/model-search.d.ts.map +1 -0
- package/dist/modes/interactive/model-search.js +15 -0
- package/dist/modes/interactive/model-search.js.map +1 -0
- package/dist/modes/interactive/theme/dark.json +10 -5
- package/dist/modes/interactive/theme/light.json +10 -5
- package/dist/modes/interactive/theme/theme-controller.d.ts +40 -0
- package/dist/modes/interactive/theme/theme-controller.d.ts.map +1 -0
- package/dist/modes/interactive/theme/theme-controller.js +125 -0
- package/dist/modes/interactive/theme/theme-controller.js.map +1 -0
- package/dist/modes/interactive/theme/theme-schema.json +22 -5
- package/dist/modes/interactive/theme/theme.d.ts +48 -7
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme.js +194 -76
- package/dist/modes/interactive/theme/theme.js.map +1 -1
- package/dist/modes/json-event.d.ts +31 -0
- package/dist/modes/json-event.d.ts.map +1 -0
- package/dist/modes/json-event.js +15 -0
- package/dist/modes/json-event.js.map +1 -0
- package/dist/modes/print-mode.d.ts +3 -3
- package/dist/modes/print-mode.d.ts.map +1 -1
- package/dist/modes/print-mode.js +16 -5
- package/dist/modes/print-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-client.d.ts +33 -10
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client.js +89 -11
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/modes/rpc/rpc-mode.d.ts +2 -2
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-mode.js +69 -9
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts +43 -5
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-types.js.map +1 -1
- package/dist/package-manager-cli.d.ts +6 -2
- package/dist/package-manager-cli.d.ts.map +1 -1
- package/dist/package-manager-cli.js +527 -25
- package/dist/package-manager-cli.js.map +1 -1
- package/dist/path-migration.d.ts +13 -0
- package/dist/path-migration.d.ts.map +1 -0
- package/dist/path-migration.js +52 -0
- package/dist/path-migration.js.map +1 -0
- package/dist/rpc-entry.d.ts +3 -0
- package/dist/rpc-entry.d.ts.map +1 -0
- package/dist/rpc-entry.js +11 -0
- package/dist/rpc-entry.js.map +1 -0
- package/dist/server/create-harness.d.ts +26 -0
- package/dist/server/create-harness.d.ts.map +1 -0
- package/dist/server/create-harness.js +106 -0
- package/dist/server/create-harness.js.map +1 -0
- package/dist/utils/abort.d.ts +5 -0
- package/dist/utils/abort.d.ts.map +1 -0
- package/dist/utils/abort.js +48 -0
- package/dist/utils/abort.js.map +1 -0
- package/dist/utils/ansi.d.ts +2 -0
- package/dist/utils/ansi.d.ts.map +1 -0
- package/dist/utils/ansi.js +52 -0
- package/dist/utils/ansi.js.map +1 -0
- package/dist/utils/changelog.d.ts +2 -1
- package/dist/utils/changelog.d.ts.map +1 -1
- package/dist/utils/changelog.js +85 -0
- package/dist/utils/changelog.js.map +1 -1
- package/dist/utils/child-process.d.ts +12 -5
- package/dist/utils/child-process.d.ts.map +1 -1
- package/dist/utils/child-process.js +33 -5
- package/dist/utils/child-process.js.map +1 -1
- package/dist/utils/clipboard-image.d.ts.map +1 -1
- package/dist/utils/clipboard-image.js +4 -4
- package/dist/utils/clipboard-image.js.map +1 -1
- package/dist/utils/clipboard-native.d.ts +4 -1
- package/dist/utils/clipboard-native.d.ts.map +1 -1
- package/dist/utils/clipboard-native.js +14 -8
- package/dist/utils/clipboard-native.js.map +1 -1
- package/dist/utils/clipboard.d.ts +2 -0
- package/dist/utils/clipboard.d.ts.map +1 -1
- package/dist/utils/clipboard.js +129 -46
- package/dist/utils/clipboard.js.map +1 -1
- package/dist/utils/deprecation.d.ts +4 -0
- package/dist/utils/deprecation.d.ts.map +1 -0
- package/dist/utils/deprecation.js +13 -0
- package/dist/utils/deprecation.js.map +1 -0
- package/dist/utils/exif-orientation.d.ts +1 -1
- package/dist/utils/exif-orientation.d.ts.map +1 -1
- package/dist/utils/exif-orientation.js.map +1 -1
- package/dist/utils/git.d.ts.map +1 -1
- package/dist/utils/git.js +54 -22
- package/dist/utils/git.js.map +1 -1
- package/dist/utils/html.d.ts +7 -0
- package/dist/utils/html.d.ts.map +1 -0
- package/dist/utils/html.js +40 -0
- package/dist/utils/html.js.map +1 -0
- package/dist/utils/image-convert.d.ts +1 -0
- package/dist/utils/image-convert.d.ts.map +1 -1
- package/dist/utils/image-convert.js +21 -15
- package/dist/utils/image-convert.js.map +1 -1
- package/dist/utils/image-process.d.ts +18 -0
- package/dist/utils/image-process.d.ts.map +1 -0
- package/dist/utils/image-process.js +83 -0
- package/dist/utils/image-process.js.map +1 -0
- package/dist/utils/image-resize-core.d.ts +30 -0
- package/dist/utils/image-resize-core.d.ts.map +1 -0
- package/dist/utils/image-resize-core.js +124 -0
- package/dist/utils/image-resize-core.js.map +1 -0
- package/dist/utils/image-resize-worker.d.ts +2 -0
- package/dist/utils/image-resize-worker.d.ts.map +1 -0
- package/dist/utils/image-resize-worker.js +31 -0
- package/dist/utils/image-resize-worker.js.map +1 -0
- package/dist/utils/image-resize.d.ts +7 -27
- package/dist/utils/image-resize.d.ts.map +1 -1
- package/dist/utils/image-resize.js +75 -115
- package/dist/utils/image-resize.js.map +1 -1
- package/dist/utils/json.d.ts +3 -0
- package/dist/utils/json.d.ts.map +1 -0
- package/dist/utils/json.js +7 -0
- package/dist/utils/json.js.map +1 -0
- package/dist/utils/management-http.d.ts +23 -0
- package/dist/utils/management-http.d.ts.map +1 -0
- package/dist/utils/management-http.js +50 -0
- package/dist/utils/management-http.js.map +1 -0
- package/dist/utils/mime.d.ts +1 -0
- package/dist/utils/mime.d.ts.map +1 -1
- package/dist/utils/mime.js +100 -16
- package/dist/utils/mime.js.map +1 -1
- package/dist/utils/open-browser.d.ts +9 -0
- package/dist/utils/open-browser.d.ts.map +1 -0
- package/dist/utils/open-browser.js +22 -0
- package/dist/utils/open-browser.js.map +1 -0
- package/dist/utils/paths.d.ts +28 -1
- package/dist/utils/paths.d.ts.map +1 -1
- package/dist/utils/paths.js +97 -2
- package/dist/utils/paths.js.map +1 -1
- package/dist/utils/pi-user-agent.d.ts +2 -0
- package/dist/utils/pi-user-agent.d.ts.map +1 -0
- package/dist/utils/pi-user-agent.js +5 -0
- package/dist/utils/pi-user-agent.js.map +1 -0
- package/dist/utils/shell.d.ts +1 -0
- package/dist/utils/shell.d.ts.map +1 -1
- package/dist/utils/shell.js +18 -6
- package/dist/utils/shell.js.map +1 -1
- package/dist/utils/syntax-highlight.d.ts +12 -0
- package/dist/utils/syntax-highlight.d.ts.map +1 -0
- package/dist/utils/syntax-highlight.js +118 -0
- package/dist/utils/syntax-highlight.js.map +1 -0
- package/dist/utils/tool-result-images.d.ts +19 -0
- package/dist/utils/tool-result-images.d.ts.map +1 -0
- package/dist/utils/tool-result-images.js +45 -0
- package/dist/utils/tool-result-images.js.map +1 -0
- package/dist/utils/tools-manager.d.ts +10 -1
- package/dist/utils/tools-manager.d.ts.map +1 -1
- package/dist/utils/tools-manager.js +105 -36
- package/dist/utils/tools-manager.js.map +1 -1
- package/dist/utils/version-check.d.ts +19 -0
- package/dist/utils/version-check.d.ts.map +1 -0
- package/dist/utils/version-check.js +85 -0
- package/dist/utils/version-check.js.map +1 -0
- package/dist/utils/windows-self-update.d.ts +3 -0
- package/dist/utils/windows-self-update.d.ts.map +1 -0
- package/dist/utils/windows-self-update.js +77 -0
- package/dist/utils/windows-self-update.js.map +1 -0
- package/docs/compaction.md +39 -32
- package/docs/containerization.md +113 -0
- package/docs/custom-provider.md +212 -75
- package/docs/development.md +9 -9
- package/docs/docs.json +156 -0
- package/docs/environment-variables.md +186 -0
- package/docs/extensions.md +652 -140
- package/docs/index.md +81 -0
- package/docs/json.md +26 -15
- package/docs/keybindings.md +60 -21
- package/docs/llama-cpp.md +99 -0
- package/docs/models.md +168 -34
- package/docs/packages.md +46 -36
- package/docs/prompt-templates.md +13 -5
- package/docs/providers.md +147 -26
- package/docs/quickstart.md +167 -0
- package/docs/rpc.md +218 -36
- package/docs/sdk.md +190 -125
- package/docs/security.md +59 -0
- package/docs/{session.md → session-format.md} +48 -22
- package/docs/sessions.md +145 -0
- package/docs/settings.md +130 -25
- package/docs/shell-aliases.md +2 -2
- package/docs/skills.md +13 -14
- package/docs/terminal-setup.md +73 -16
- package/docs/termux.md +10 -10
- package/docs/themes.md +41 -16
- package/docs/tmux.md +6 -4
- package/docs/tui.md +85 -61
- package/docs/usage.md +302 -0
- package/docs/windows.md +2 -2
- package/examples/README.md +1 -1
- package/examples/extensions/README.md +12 -9
- package/examples/extensions/bash-spawn-hook.ts +2 -2
- package/examples/extensions/border-status-editor.ts +145 -0
- package/examples/extensions/built-in-tool-renderer.ts +2 -2
- package/examples/extensions/claude-rules.ts +1 -1
- package/examples/extensions/commands.ts +1 -1
- package/examples/extensions/custom-compaction.ts +6 -16
- package/examples/extensions/custom-footer.ts +1 -1
- package/examples/extensions/custom-header.ts +7 -7
- package/examples/extensions/custom-provider-anthropic/index.ts +15 -8
- package/examples/extensions/custom-provider-anthropic/package-lock.json +4 -4
- package/examples/extensions/custom-provider-anthropic/package.json +3 -3
- package/examples/extensions/custom-provider-gitlab-duo/index.ts +65 -9
- package/examples/extensions/custom-provider-gitlab-duo/package.json +2 -2
- package/examples/extensions/custom-provider-gitlab-duo/test.ts +2 -2
- package/examples/extensions/doom-overlay/README.md +1 -1
- package/examples/extensions/doom-overlay/doom-component.ts +4 -4
- package/examples/extensions/doom-overlay/doom-keys.ts +1 -1
- package/examples/extensions/doom-overlay/index.ts +5 -5
- package/examples/extensions/doom-overlay/wad-finder.ts +7 -3
- package/examples/extensions/dynamic-resources/dynamic.json +1 -1
- package/examples/extensions/entry-renderer.ts +41 -0
- package/examples/extensions/git-merge-and-resolve.ts +115 -0
- package/examples/extensions/github-issue-autocomplete.ts +2 -2
- package/examples/extensions/gondolin/index.ts +531 -0
- package/examples/extensions/gondolin/package-lock.json +185 -0
- package/examples/extensions/gondolin/package.json +19 -0
- package/examples/extensions/handoff.ts +50 -14
- package/examples/extensions/hidden-thinking-label.ts +1 -1
- package/examples/extensions/inline-bash.ts +2 -2
- package/examples/extensions/input-transform-streaming.ts +39 -0
- package/examples/extensions/input-transform.ts +2 -2
- package/examples/extensions/interactive-shell.ts +2 -2
- package/examples/extensions/kimi-deferred-tools.ts +61 -0
- package/examples/extensions/mac-system-theme.ts +2 -2
- package/examples/extensions/message-renderer.ts +3 -3
- package/examples/extensions/minimal-mode.ts +2 -2
- package/examples/extensions/modal-editor.ts +2 -2
- package/examples/extensions/model-status.ts +1 -1
- package/examples/extensions/notify.ts +3 -3
- package/examples/extensions/overlay-qa-tests.ts +242 -140
- package/examples/extensions/overlay-test.ts +9 -6
- package/examples/extensions/pirate.ts +1 -1
- package/examples/extensions/plan-mode/README.md +3 -2
- package/examples/extensions/plan-mode/index.ts +90 -40
- package/examples/extensions/preset.ts +16 -10
- package/examples/extensions/project-trust.ts +64 -0
- package/examples/extensions/prompt-customizer.ts +1 -1
- package/examples/extensions/provider-payload.ts +5 -5
- package/examples/extensions/qna.ts +4 -8
- package/examples/extensions/question.ts +41 -19
- package/examples/extensions/questionnaire.ts +50 -29
- package/examples/extensions/rainbow-editor.ts +1 -1
- package/examples/extensions/reload-runtime.ts +2 -2
- package/examples/extensions/rpc-demo.ts +1 -1
- package/examples/extensions/sandbox/index.ts +9 -9
- package/examples/extensions/sandbox/package-lock.json +7 -7
- package/examples/extensions/sandbox/package.json +3 -3
- package/examples/extensions/shutdown-command.ts +5 -5
- package/examples/extensions/snake.ts +2 -2
- package/examples/extensions/space-invaders.ts +2 -2
- package/examples/extensions/ssh.ts +2 -2
- package/examples/extensions/structured-output.ts +1 -1
- package/examples/extensions/subagent/README.md +18 -13
- package/examples/extensions/subagent/agents.ts +42 -11
- package/examples/extensions/subagent/index.ts +76 -30
- package/examples/extensions/summarize.ts +12 -19
- package/examples/extensions/tic-tac-toe.ts +2 -2
- package/examples/extensions/titlebar-spinner.ts +3 -3
- package/examples/extensions/todo.ts +2 -2
- package/examples/extensions/tool-override.ts +1 -1
- package/examples/extensions/tools.ts +7 -2
- package/examples/extensions/truncated-tool.ts +2 -2
- package/examples/extensions/with-deps/package-lock.json +4 -4
- package/examples/extensions/with-deps/package.json +4 -4
- package/examples/extensions/working-indicator.ts +4 -4
- package/examples/extensions/working-message-test.ts +1 -1
- package/examples/rpc-extension-ui.ts +11 -2
- package/examples/sdk/01-minimal.ts +15 -11
- package/examples/sdk/02-custom-model.ts +18 -18
- package/examples/sdk/03-custom-prompt.ts +25 -17
- package/examples/sdk/04-skills.ts +3 -3
- package/examples/sdk/05-tools.ts +8 -4
- package/examples/sdk/06-extensions.ts +13 -9
- package/examples/sdk/07-context-files.ts +2 -2
- package/examples/sdk/08-prompt-templates.ts +3 -3
- package/examples/sdk/09-api-keys-and-oauth.ts +19 -33
- package/examples/sdk/10-settings.ts +4 -4
- package/examples/sdk/11-sessions.ts +4 -0
- package/examples/sdk/12-full-control.ts +22 -21
- package/examples/sdk/README.md +23 -30
- package/npm-shrinkwrap.json +1818 -0
- package/package.json +117 -99
- package/dist/modes/interactive/assets/clankolas.png +0 -0
- package/dist/modes/interactive/components/auth-selector-status.d.ts +0 -20
- package/dist/modes/interactive/components/auth-selector-status.d.ts.map +0 -1
- package/dist/modes/interactive/components/auth-selector-status.js +0 -23
- package/dist/modes/interactive/components/auth-selector-status.js.map +0 -1
- package/dist/modes/interactive/components/earendil-announcement.d.ts +0 -5
- package/dist/modes/interactive/components/earendil-announcement.d.ts.map +0 -1
- package/dist/modes/interactive/components/earendil-announcement.js +0 -40
- package/dist/modes/interactive/components/earendil-announcement.js.map +0 -1
- package/docs/images/exy.png +0 -0
- package/docs/tree.md +0 -233
- package/examples/extensions/antigravity-image-gen.ts +0 -418
- package/examples/extensions/custom-provider-qwen-cli/index.ts +0 -345
- package/examples/extensions/custom-provider-qwen-cli/package.json +0 -16
package/dist/main.js
CHANGED
|
@@ -4,35 +4,44 @@
|
|
|
4
4
|
* This file handles CLI argument parsing and translates them into
|
|
5
5
|
* createAgentSession() options. The SDK does the heavy lifting.
|
|
6
6
|
*/
|
|
7
|
-
import { resolve } from "node:path";
|
|
8
7
|
import { createInterface } from "node:readline";
|
|
9
|
-
import {
|
|
10
|
-
import { modelsAreEqual, supportsXhigh } from "@sammorrowdrums/mcpi-ai";
|
|
8
|
+
import { modelsAreEqual } from "@sammorrowdrums/mcpi-ai";
|
|
11
9
|
import chalk from "chalk";
|
|
12
10
|
import { parseArgs, printHelp } from "./cli/args.js";
|
|
11
|
+
import { checkProviderAuth, createAuthCheckModelRuntime, getProviderCredential, } from "./cli/auth-check.js";
|
|
12
|
+
import { AuthCommandError, getAuthCommandName, getAuthCommandUsage, isAuthCommandHelp, parseAuthCommand, printAuthCommandHelp, validateAuthCommandArgs, } from "./cli/auth-command.js";
|
|
13
|
+
import { resolveCredentialForPrint } from "./cli/credential-print.js";
|
|
13
14
|
import { processFileArguments } from "./cli/file-processor.js";
|
|
14
15
|
import { buildInitialMessage } from "./cli/initial-message.js";
|
|
15
16
|
import { listModels } from "./cli/list-models.js";
|
|
17
|
+
import { createProjectTrustContext } from "./cli/project-trust.js";
|
|
16
18
|
import { selectSession } from "./cli/session-picker.js";
|
|
17
|
-
import {
|
|
19
|
+
import { shouldRunFirstTimeSetup, showFirstTimeSetup, showStartupSelector } from "./cli/startup-ui.js";
|
|
20
|
+
import { APP_NAME, ENV_SESSION_DIR, expandTildePath, getAgentDir, getCacheDir, getPackageDir, VERSION, } from "./config.js";
|
|
18
21
|
import { createAgentSessionRuntime } from "./core/agent-session-runtime.js";
|
|
19
22
|
import { createAgentSessionFromServices, createAgentSessionServices, } from "./core/agent-session-services.js";
|
|
20
23
|
import { formatNoModelsAvailableMessage } from "./core/auth-guidance.js";
|
|
21
|
-
import { AuthStorage } from "./core/auth-storage.js";
|
|
24
|
+
import { AuthStorage, ReadOnlyAuthStorage } from "./core/auth-storage.js";
|
|
22
25
|
import { exportFromFile } from "./core/export-html/index.js";
|
|
23
|
-
import {
|
|
26
|
+
import { applyHttpProxySettings, configureHttpDispatcher } from "./core/http-dispatcher.js";
|
|
24
27
|
import { resolveCliModel, resolveModelScope } from "./core/model-resolver.js";
|
|
28
|
+
import { ModelRuntime } from "./core/model-runtime.js";
|
|
25
29
|
import { restoreStdout, takeOverStdout } from "./core/output-guard.js";
|
|
30
|
+
import { resolveProjectTrusted } from "./core/project-trust.js";
|
|
26
31
|
import { formatMissingSessionCwdPrompt, getMissingSessionCwdIssue, MissingSessionCwdError, } from "./core/session-cwd.js";
|
|
27
|
-
import { SessionManager } from "./core/session-manager.js";
|
|
32
|
+
import { assertValidSessionId, SessionManager } from "./core/session-manager.js";
|
|
28
33
|
import { SettingsManager } from "./core/settings-manager.js";
|
|
29
34
|
import { printTimings, resetTimings, time } from "./core/timings.js";
|
|
35
|
+
import { hasTrustRequiringProjectResources, ProjectTrustStore } from "./core/trust-manager.js";
|
|
36
|
+
import { builtInExtensions } from "./extensions/index.js";
|
|
30
37
|
import { runMigrations, showDeprecationWarnings } from "./migrations.js";
|
|
31
38
|
import { InteractiveMode, runPrintMode, runRpcMode } from "./modes/index.js";
|
|
32
|
-
import { ExtensionSelectorComponent } from "./modes/interactive/components/extension-selector.js";
|
|
33
39
|
import { initTheme, stopThemeWatcher } from "./modes/interactive/theme/theme.js";
|
|
34
40
|
import { handleConfigCommand, handlePackageCommand } from "./package-manager-cli.js";
|
|
35
|
-
import {
|
|
41
|
+
import { assertNoLegacyPaths } from "./path-migration.js";
|
|
42
|
+
import { isLocalPath, normalizePath, resolvePath } from "./utils/paths.js";
|
|
43
|
+
import { cleanupWindowsSelfUpdateQuarantine } from "./utils/windows-self-update.js";
|
|
44
|
+
const EXTENSION_LOAD_FAILURE_HINT = `Hint: Start without extensions using "${APP_NAME} -ne".`;
|
|
36
45
|
/**
|
|
37
46
|
* Read all content from piped stdin.
|
|
38
47
|
* Returns undefined if stdin is a TTY (interactive terminal).
|
|
@@ -72,14 +81,14 @@ function isTruthyEnvFlag(value) {
|
|
|
72
81
|
return false;
|
|
73
82
|
return value === "1" || value.toLowerCase() === "true" || value.toLowerCase() === "yes";
|
|
74
83
|
}
|
|
75
|
-
function resolveAppMode(parsed, stdinIsTTY) {
|
|
84
|
+
function resolveAppMode(parsed, stdinIsTTY, stdoutIsTTY) {
|
|
76
85
|
if (parsed.mode === "rpc") {
|
|
77
86
|
return "rpc";
|
|
78
87
|
}
|
|
79
88
|
if (parsed.mode === "json") {
|
|
80
89
|
return "json";
|
|
81
90
|
}
|
|
82
|
-
if (parsed.print || !stdinIsTTY) {
|
|
91
|
+
if (parsed.print || !stdinIsTTY || !stdoutIsTTY) {
|
|
83
92
|
return "print";
|
|
84
93
|
}
|
|
85
94
|
return "interactive";
|
|
@@ -87,6 +96,81 @@ function resolveAppMode(parsed, stdinIsTTY) {
|
|
|
87
96
|
function toPrintOutputMode(appMode) {
|
|
88
97
|
return appMode === "json" ? "json" : "text";
|
|
89
98
|
}
|
|
99
|
+
function isPlainRuntimeMetadataCommand(parsed) {
|
|
100
|
+
return !parsed.print && parsed.mode === undefined && (parsed.help === true || parsed.listModels !== undefined);
|
|
101
|
+
}
|
|
102
|
+
async function runAuthCommand(args) {
|
|
103
|
+
if (isAuthCommandHelp(args)) {
|
|
104
|
+
printAuthCommandHelp();
|
|
105
|
+
return true;
|
|
106
|
+
}
|
|
107
|
+
let command;
|
|
108
|
+
try {
|
|
109
|
+
command = parseAuthCommand(args);
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
const message = error instanceof AuthCommandError ? error.message : "Failed to parse auth command";
|
|
113
|
+
console.error(chalk.red(`Error: ${message}`));
|
|
114
|
+
process.exitCode = 1;
|
|
115
|
+
return true;
|
|
116
|
+
}
|
|
117
|
+
if (!command)
|
|
118
|
+
return false;
|
|
119
|
+
const parsed = parseArgs(command.args);
|
|
120
|
+
if (parsed.unknownFlags.size > 0) {
|
|
121
|
+
const option = parsed.unknownFlags.keys().next().value;
|
|
122
|
+
console.error(chalk.red(`Unknown option --${option} for "${getAuthCommandName(command.kind)}".`));
|
|
123
|
+
console.error(chalk.dim(`Use "${APP_NAME} --help" or "${getAuthCommandUsage(command.kind)}".`));
|
|
124
|
+
process.exitCode = 1;
|
|
125
|
+
return true;
|
|
126
|
+
}
|
|
127
|
+
try {
|
|
128
|
+
if (parsed.diagnostics.length > 0) {
|
|
129
|
+
throw new AuthCommandError(parsed.diagnostics.map((diagnostic) => diagnostic.message).join("\n"));
|
|
130
|
+
}
|
|
131
|
+
if (command.kind !== "check") {
|
|
132
|
+
const signal = AbortSignal.timeout(15_000);
|
|
133
|
+
const modelRuntime = await ModelRuntime.create({ allowModelNetwork: false, signal });
|
|
134
|
+
const credential = await resolveCredentialForPrint(parsed, modelRuntime, command.kind, command.minExpiryMs, signal);
|
|
135
|
+
process.stdout.write(`${credential}\n`);
|
|
136
|
+
return true;
|
|
137
|
+
}
|
|
138
|
+
const requestedAuth = validateAuthCommandArgs(parsed, command.kind);
|
|
139
|
+
let result;
|
|
140
|
+
let credential;
|
|
141
|
+
try {
|
|
142
|
+
const credentials = command.noRefresh ? new ReadOnlyAuthStorage() : AuthStorage.create();
|
|
143
|
+
const modelRuntime = await createAuthCheckModelRuntime(credentials);
|
|
144
|
+
result = await checkProviderAuth(parsed, modelRuntime, { refresh: !command.noRefresh });
|
|
145
|
+
if (command.credentials && result.status === "ready") {
|
|
146
|
+
credential = await getProviderCredential(result.provider, modelRuntime, credentials, {
|
|
147
|
+
refresh: !command.noRefresh,
|
|
148
|
+
});
|
|
149
|
+
if (!credential) {
|
|
150
|
+
result = { status: "not_ready", provider: result.provider, reason: "credential_not_available" };
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
catch {
|
|
155
|
+
result = {
|
|
156
|
+
status: "invalid",
|
|
157
|
+
provider: requestedAuth.provider ?? requestedAuth.model,
|
|
158
|
+
reason: "invalid_state",
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
const output = command.json
|
|
162
|
+
? JSON.stringify({ ...result, ...(credential ? { credentials: credential } : {}) })
|
|
163
|
+
: (credential ?? result.status);
|
|
164
|
+
process.stdout.write(`${output}\n`);
|
|
165
|
+
process.exitCode = result.status === "ready" ? 0 : result.status === "not_ready" ? 1 : 2;
|
|
166
|
+
}
|
|
167
|
+
catch (error) {
|
|
168
|
+
const message = error instanceof AuthCommandError ? error.message : "Failed to resolve credential";
|
|
169
|
+
console.error(chalk.red(`Error: ${message}`));
|
|
170
|
+
process.exitCode = command.kind === "check" ? 2 : 1;
|
|
171
|
+
}
|
|
172
|
+
return true;
|
|
173
|
+
}
|
|
90
174
|
async function prepareInitialMessage(parsed, autoResizeImages, stdinContent) {
|
|
91
175
|
if (parsed.fileArgs.length === 0) {
|
|
92
176
|
return buildInitialMessage({ parsed, stdinContent });
|
|
@@ -103,23 +187,27 @@ async function prepareInitialMessage(parsed, autoResizeImages, stdinContent) {
|
|
|
103
187
|
* Resolve a session argument to a file path.
|
|
104
188
|
* If it looks like a path, use as-is. Otherwise try to match as session ID prefix.
|
|
105
189
|
*/
|
|
190
|
+
async function findLocalSessionByExactId(sessionId, cwd, sessionDir) {
|
|
191
|
+
const localSessions = await SessionManager.list(cwd, sessionDir);
|
|
192
|
+
const localMatch = localSessions.find((s) => s.id === sessionId);
|
|
193
|
+
return localMatch ? { type: "local", path: localMatch.path } : undefined;
|
|
194
|
+
}
|
|
106
195
|
async function resolveSessionPath(sessionArg, cwd, sessionDir) {
|
|
107
|
-
// If it looks like a file path,
|
|
196
|
+
// If it looks like a file path, resolve it before handing it to the session manager.
|
|
108
197
|
if (sessionArg.includes("/") || sessionArg.includes("\\") || sessionArg.endsWith(".jsonl")) {
|
|
109
|
-
return { type: "path", path: sessionArg };
|
|
198
|
+
return { type: "path", path: resolvePath(sessionArg, cwd) };
|
|
110
199
|
}
|
|
111
200
|
// Try to match as session ID in current project first
|
|
112
201
|
const localSessions = await SessionManager.list(cwd, sessionDir);
|
|
113
|
-
const
|
|
114
|
-
if (
|
|
115
|
-
return { type: "local", path:
|
|
202
|
+
const localMatch = localSessions.find((s) => s.id === sessionArg) ?? localSessions.find((s) => s.id.startsWith(sessionArg));
|
|
203
|
+
if (localMatch) {
|
|
204
|
+
return { type: "local", path: localMatch.path };
|
|
116
205
|
}
|
|
117
206
|
// Try global search across all projects
|
|
118
|
-
const allSessions = await SessionManager.listAll();
|
|
119
|
-
const
|
|
120
|
-
if (
|
|
121
|
-
|
|
122
|
-
return { type: "global", path: match.path, cwd: match.cwd };
|
|
207
|
+
const allSessions = await SessionManager.listAll(sessionDir);
|
|
208
|
+
const globalMatch = allSessions.find((s) => s.id === sessionArg) ?? allSessions.find((s) => s.id.startsWith(sessionArg));
|
|
209
|
+
if (globalMatch) {
|
|
210
|
+
return { type: "global", path: globalMatch.path, cwd: globalMatch.cwd };
|
|
123
211
|
}
|
|
124
212
|
// Not found anywhere
|
|
125
213
|
return { type: "not_found", arg: sessionArg };
|
|
@@ -151,9 +239,40 @@ function validateForkFlags(parsed) {
|
|
|
151
239
|
process.exit(1);
|
|
152
240
|
}
|
|
153
241
|
}
|
|
154
|
-
function
|
|
242
|
+
function validateSessionIdFlags(parsed) {
|
|
243
|
+
if (parsed.sessionId === undefined)
|
|
244
|
+
return;
|
|
245
|
+
const conflictingFlags = [
|
|
246
|
+
parsed.session ? "--session" : undefined,
|
|
247
|
+
parsed.continue ? "--continue" : undefined,
|
|
248
|
+
parsed.resume ? "--resume" : undefined,
|
|
249
|
+
].filter((flag) => flag !== undefined);
|
|
250
|
+
if (conflictingFlags.length > 0) {
|
|
251
|
+
console.error(chalk.red(`Error: --session-id cannot be combined with ${conflictingFlags.join(", ")}`));
|
|
252
|
+
process.exit(1);
|
|
253
|
+
}
|
|
155
254
|
try {
|
|
156
|
-
|
|
255
|
+
assertValidSessionId(parsed.sessionId);
|
|
256
|
+
}
|
|
257
|
+
catch (error) {
|
|
258
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
259
|
+
console.error(chalk.red(`Error: ${message}`));
|
|
260
|
+
process.exit(1);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
function openSessionOrExit(path, sessionDir) {
|
|
264
|
+
try {
|
|
265
|
+
return SessionManager.open(path, sessionDir);
|
|
266
|
+
}
|
|
267
|
+
catch (error) {
|
|
268
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
269
|
+
console.error(chalk.red(`Error: ${message}`));
|
|
270
|
+
process.exit(1);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
function forkSessionOrExit(sourcePath, cwd, sessionDir, sessionId) {
|
|
274
|
+
try {
|
|
275
|
+
return SessionManager.forkFrom(sourcePath, cwd, sessionDir, { id: sessionId });
|
|
157
276
|
}
|
|
158
277
|
catch (error) {
|
|
159
278
|
const message = error instanceof Error ? error.message : String(error);
|
|
@@ -162,16 +281,23 @@ function forkSessionOrExit(sourcePath, cwd, sessionDir) {
|
|
|
162
281
|
}
|
|
163
282
|
}
|
|
164
283
|
async function createSessionManager(parsed, cwd, sessionDir, settingsManager) {
|
|
165
|
-
if (parsed.noSession) {
|
|
166
|
-
return SessionManager.inMemory();
|
|
284
|
+
if (parsed.noSession || parsed.help || parsed.listModels !== undefined) {
|
|
285
|
+
return SessionManager.inMemory(cwd, parsed.sessionId !== undefined ? { id: parsed.sessionId } : undefined);
|
|
167
286
|
}
|
|
168
287
|
if (parsed.fork) {
|
|
288
|
+
if (parsed.sessionId) {
|
|
289
|
+
const existingTarget = await findLocalSessionByExactId(parsed.sessionId, cwd, sessionDir);
|
|
290
|
+
if (existingTarget) {
|
|
291
|
+
console.error(chalk.red(`Session already exists with id '${parsed.sessionId}'`));
|
|
292
|
+
process.exit(1);
|
|
293
|
+
}
|
|
294
|
+
}
|
|
169
295
|
const resolved = await resolveSessionPath(parsed.fork, cwd, sessionDir);
|
|
170
296
|
switch (resolved.type) {
|
|
171
297
|
case "path":
|
|
172
298
|
case "local":
|
|
173
299
|
case "global":
|
|
174
|
-
return forkSessionOrExit(resolved.path, cwd, sessionDir);
|
|
300
|
+
return forkSessionOrExit(resolved.path, cwd, sessionDir, parsed.sessionId);
|
|
175
301
|
case "not_found":
|
|
176
302
|
console.error(chalk.red(`No session found matching '${resolved.arg}'`));
|
|
177
303
|
process.exit(1);
|
|
@@ -182,7 +308,7 @@ async function createSessionManager(parsed, cwd, sessionDir, settingsManager) {
|
|
|
182
308
|
switch (resolved.type) {
|
|
183
309
|
case "path":
|
|
184
310
|
case "local":
|
|
185
|
-
return
|
|
311
|
+
return openSessionOrExit(resolved.path, sessionDir);
|
|
186
312
|
case "global": {
|
|
187
313
|
console.log(chalk.yellow(`Session found in different project: ${resolved.cwd}`));
|
|
188
314
|
const shouldFork = await promptConfirm("Fork this session into current directory?");
|
|
@@ -198,9 +324,8 @@ async function createSessionManager(parsed, cwd, sessionDir, settingsManager) {
|
|
|
198
324
|
}
|
|
199
325
|
}
|
|
200
326
|
if (parsed.resume) {
|
|
201
|
-
initTheme(settingsManager.getTheme(), true);
|
|
202
327
|
try {
|
|
203
|
-
const selectedPath = await selectSession((onProgress) => SessionManager.list(cwd, sessionDir, onProgress), SessionManager.listAll);
|
|
328
|
+
const selectedPath = await selectSession((onProgress) => SessionManager.list(cwd, sessionDir, onProgress), (onProgress) => SessionManager.listAll(sessionDir, onProgress), settingsManager);
|
|
204
329
|
if (!selectedPath) {
|
|
205
330
|
console.log(chalk.dim("No session selected"));
|
|
206
331
|
process.exit(0);
|
|
@@ -214,9 +339,16 @@ async function createSessionManager(parsed, cwd, sessionDir, settingsManager) {
|
|
|
214
339
|
if (parsed.continue) {
|
|
215
340
|
return SessionManager.continueRecent(cwd, sessionDir);
|
|
216
341
|
}
|
|
217
|
-
|
|
342
|
+
if (parsed.sessionId) {
|
|
343
|
+
const existingSession = await findLocalSessionByExactId(parsed.sessionId, cwd, sessionDir);
|
|
344
|
+
if (existingSession) {
|
|
345
|
+
return SessionManager.open(existingSession.path, sessionDir);
|
|
346
|
+
}
|
|
347
|
+
console.error(chalk.yellow(`Warning: No project session found with id '${parsed.sessionId}'; creating a new session with that id.`));
|
|
348
|
+
}
|
|
349
|
+
return SessionManager.create(cwd, sessionDir, { id: parsed.sessionId });
|
|
218
350
|
}
|
|
219
|
-
function buildSessionOptions(parsed, scopedModels, hasExistingSession,
|
|
351
|
+
function buildSessionOptions(parsed, scopedModels, hasExistingSession, modelRuntime, settingsManager) {
|
|
220
352
|
const options = {};
|
|
221
353
|
const diagnostics = [];
|
|
222
354
|
let cliThinkingFromModel = false;
|
|
@@ -227,7 +359,8 @@ function buildSessionOptions(parsed, scopedModels, hasExistingSession, modelRegi
|
|
|
227
359
|
const resolved = resolveCliModel({
|
|
228
360
|
cliProvider: parsed.provider,
|
|
229
361
|
cliModel: parsed.model,
|
|
230
|
-
|
|
362
|
+
cliThinking: parsed.thinking,
|
|
363
|
+
modelRuntime,
|
|
231
364
|
});
|
|
232
365
|
if (resolved.warning) {
|
|
233
366
|
diagnostics.push({ type: "warning", message: resolved.warning });
|
|
@@ -249,7 +382,7 @@ function buildSessionOptions(parsed, scopedModels, hasExistingSession, modelRegi
|
|
|
249
382
|
// Check if saved default is in scoped models - use it if so, otherwise first scoped model
|
|
250
383
|
const savedProvider = settingsManager.getDefaultProvider();
|
|
251
384
|
const savedModelId = settingsManager.getDefaultModel();
|
|
252
|
-
const savedModel = savedProvider && savedModelId ?
|
|
385
|
+
const savedModel = savedProvider && savedModelId ? modelRuntime.getModel(savedProvider, savedModelId) : undefined;
|
|
253
386
|
const savedInScope = savedModel ? scopedModels.find((sm) => modelsAreEqual(sm.model, savedModel)) : undefined;
|
|
254
387
|
if (savedInScope) {
|
|
255
388
|
options.model = savedInScope.model;
|
|
@@ -279,7 +412,7 @@ function buildSessionOptions(parsed, scopedModels, hasExistingSession, modelRegi
|
|
|
279
412
|
thinkingLevel: sm.thinkingLevel,
|
|
280
413
|
}));
|
|
281
414
|
}
|
|
282
|
-
// API key from CLI - set
|
|
415
|
+
// API key from CLI - set as a non-persistent runtime override
|
|
283
416
|
// (handled by caller before createAgentSession)
|
|
284
417
|
// Tools
|
|
285
418
|
if (parsed.noTools) {
|
|
@@ -291,43 +424,53 @@ function buildSessionOptions(parsed, scopedModels, hasExistingSession, modelRegi
|
|
|
291
424
|
if (parsed.tools) {
|
|
292
425
|
options.tools = [...parsed.tools];
|
|
293
426
|
}
|
|
427
|
+
if (parsed.excludeTools) {
|
|
428
|
+
options.excludeTools = [...parsed.excludeTools];
|
|
429
|
+
}
|
|
294
430
|
return { options, cliThinkingFromModel, diagnostics };
|
|
295
431
|
}
|
|
296
432
|
function resolveCliPaths(cwd, paths) {
|
|
297
|
-
return paths?.map((value) => (isLocalPath(value) ?
|
|
433
|
+
return paths?.map((value) => (isLocalPath(value) ? resolvePath(value, cwd) : value));
|
|
298
434
|
}
|
|
299
435
|
async function promptForMissingSessionCwd(issue, settingsManager) {
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
ui.setClearOnShrink(settingsManager.getClearOnShrink());
|
|
305
|
-
let settled = false;
|
|
306
|
-
const finish = (result) => {
|
|
307
|
-
if (settled) {
|
|
308
|
-
return;
|
|
309
|
-
}
|
|
310
|
-
settled = true;
|
|
311
|
-
ui.stop();
|
|
312
|
-
resolve(result);
|
|
313
|
-
};
|
|
314
|
-
const selector = new ExtensionSelectorComponent(formatMissingSessionCwdPrompt(issue), ["Continue", "Cancel"], (option) => finish(option === "Continue" ? issue.fallbackCwd : undefined), () => finish(undefined), { tui: ui });
|
|
315
|
-
ui.addChild(selector);
|
|
316
|
-
ui.setFocus(selector);
|
|
317
|
-
ui.start();
|
|
318
|
-
});
|
|
436
|
+
return showStartupSelector(settingsManager, formatMissingSessionCwdPrompt(issue), [
|
|
437
|
+
{ label: "Continue", value: issue.fallbackCwd },
|
|
438
|
+
{ label: "Cancel", value: undefined },
|
|
439
|
+
]);
|
|
319
440
|
}
|
|
320
441
|
export async function main(args, options) {
|
|
321
442
|
resetTimings();
|
|
322
|
-
const
|
|
443
|
+
const extensionFactories = [...builtInExtensions, ...(options?.extensionFactories ?? [])];
|
|
444
|
+
const cwd = process.cwd();
|
|
445
|
+
assertNoLegacyPaths(cwd);
|
|
446
|
+
const offlineMode = args.includes("--offline") || isTruthyEnvFlag(process.env.MCPI_OFFLINE);
|
|
323
447
|
if (offlineMode) {
|
|
324
|
-
process.env.
|
|
325
|
-
process.env.
|
|
448
|
+
process.env.MCPI_OFFLINE = "1";
|
|
449
|
+
process.env.MCPI_SKIP_VERSION_CHECK = "1";
|
|
326
450
|
}
|
|
327
|
-
if (await
|
|
451
|
+
if (await runAuthCommand(args)) {
|
|
452
|
+
return;
|
|
453
|
+
}
|
|
454
|
+
if (process.platform === "win32") {
|
|
455
|
+
cleanupWindowsSelfUpdateQuarantine(getPackageDir());
|
|
456
|
+
}
|
|
457
|
+
const agentDir = getAgentDir();
|
|
458
|
+
const bootstrapSettingsManager = SettingsManager.create(cwd, agentDir, { projectTrusted: false });
|
|
459
|
+
applyHttpProxySettings(bootstrapSettingsManager.getGlobalSettings().httpProxy);
|
|
460
|
+
configureHttpDispatcher();
|
|
461
|
+
if (await handlePackageCommand(args, { extensionFactories })) {
|
|
462
|
+
const exitCode = process.exitCode ?? 0;
|
|
463
|
+
if (process.platform === "win32" && exitCode === 0 && args[0] === "update") {
|
|
464
|
+
// We normally prefer process.exit(0) for package commands so bad extensions cannot keep
|
|
465
|
+
// one-shot commands alive. On Windows, Node can assert after fetch() if process.exit(0)
|
|
466
|
+
// runs during teardown; let successful `mcpi update` drain naturally instead.
|
|
467
|
+
// https://github.com/nodejs/node/issues/56645
|
|
468
|
+
return;
|
|
469
|
+
}
|
|
470
|
+
process.exit(exitCode);
|
|
328
471
|
return;
|
|
329
472
|
}
|
|
330
|
-
if (await handleConfigCommand(args)) {
|
|
473
|
+
if (await handleConfigCommand(args, { extensionFactories })) {
|
|
331
474
|
return;
|
|
332
475
|
}
|
|
333
476
|
const parsed = parseArgs(args);
|
|
@@ -341,11 +484,6 @@ export async function main(args, options) {
|
|
|
341
484
|
}
|
|
342
485
|
}
|
|
343
486
|
time("parseArgs");
|
|
344
|
-
let appMode = resolveAppMode(parsed, process.stdin.isTTY);
|
|
345
|
-
const shouldTakeOverStdout = appMode !== "interactive";
|
|
346
|
-
if (shouldTakeOverStdout) {
|
|
347
|
-
takeOverStdout();
|
|
348
|
-
}
|
|
349
487
|
if (parsed.version) {
|
|
350
488
|
console.log(VERSION);
|
|
351
489
|
process.exit(0);
|
|
@@ -364,24 +502,40 @@ export async function main(args, options) {
|
|
|
364
502
|
console.log(`Exported to: ${result}`);
|
|
365
503
|
process.exit(0);
|
|
366
504
|
}
|
|
505
|
+
let appMode = resolveAppMode(parsed, process.stdin.isTTY, process.stdout.isTTY);
|
|
506
|
+
const shouldTakeOverStdout = appMode !== "interactive" && !isPlainRuntimeMetadataCommand(parsed);
|
|
507
|
+
if (shouldTakeOverStdout) {
|
|
508
|
+
takeOverStdout();
|
|
509
|
+
}
|
|
367
510
|
if (parsed.mode === "rpc" && parsed.fileArgs.length > 0) {
|
|
368
511
|
console.error(chalk.red("Error: @file arguments are not supported in RPC mode"));
|
|
369
512
|
process.exit(1);
|
|
370
513
|
}
|
|
371
514
|
validateForkFlags(parsed);
|
|
515
|
+
validateSessionIdFlags(parsed);
|
|
372
516
|
// Run migrations (pass cwd for project-local migrations)
|
|
373
|
-
const { migratedAuthProviders: migratedProviders, deprecationWarnings } = runMigrations(
|
|
517
|
+
const { migratedAuthProviders: migratedProviders, deprecationWarnings } = runMigrations(cwd);
|
|
374
518
|
time("runMigrations");
|
|
375
|
-
const cwd = process.cwd();
|
|
376
|
-
const agentDir = getAgentDir();
|
|
377
519
|
const startupSettingsManager = SettingsManager.create(cwd, agentDir);
|
|
378
520
|
reportDiagnostics(collectSettingsDiagnostics(startupSettingsManager, "startup session lookup"));
|
|
521
|
+
// Experimental first-time setup: theme choice and analytics opt-in.
|
|
522
|
+
// Runs before any runtime services are created so the chosen settings apply everywhere.
|
|
523
|
+
if (appMode === "interactive" && !parsed.help && parsed.listModels === undefined && shouldRunFirstTimeSetup()) {
|
|
524
|
+
await showFirstTimeSetup(startupSettingsManager);
|
|
525
|
+
time("firstTimeSetup");
|
|
526
|
+
}
|
|
527
|
+
if (appMode === "interactive" && parsed.useTheme !== undefined) {
|
|
528
|
+
startupSettingsManager.applyOverrides({ theme: parsed.useTheme });
|
|
529
|
+
}
|
|
379
530
|
// Decide the final runtime cwd before creating cwd-bound runtime services.
|
|
380
531
|
// --session and --resume may select a session from another project, so project-local
|
|
381
532
|
// settings, resources, provider registrations, and models must be resolved only after
|
|
382
533
|
// the target session cwd is known. The startup-cwd settings manager is used only for
|
|
383
534
|
// sessionDir lookup during session selection.
|
|
384
|
-
const
|
|
535
|
+
const envSessionDir = process.env[ENV_SESSION_DIR];
|
|
536
|
+
const sessionDir = (parsed.sessionDir ? normalizePath(parsed.sessionDir) : undefined) ??
|
|
537
|
+
(envSessionDir ? expandTildePath(envSessionDir) : undefined) ??
|
|
538
|
+
startupSettingsManager.getSessionDir();
|
|
385
539
|
let sessionManager = await createSessionManager(parsed, cwd, sessionDir, startupSettingsManager);
|
|
386
540
|
const missingSessionCwdIssue = getMissingSessionCwdIssue(sessionManager, cwd);
|
|
387
541
|
if (missingSessionCwdIssue) {
|
|
@@ -397,18 +551,68 @@ export async function main(args, options) {
|
|
|
397
551
|
process.exit(1);
|
|
398
552
|
}
|
|
399
553
|
}
|
|
554
|
+
if (parsed.name !== undefined) {
|
|
555
|
+
const name = parsed.name.trim();
|
|
556
|
+
if (!name) {
|
|
557
|
+
console.error(chalk.red("Error: --name requires a non-empty value"));
|
|
558
|
+
process.exit(1);
|
|
559
|
+
}
|
|
560
|
+
sessionManager.appendSessionInfo(name);
|
|
561
|
+
}
|
|
400
562
|
time("createSessionManager");
|
|
563
|
+
const trustStore = new ProjectTrustStore(agentDir);
|
|
564
|
+
const sessionCwd = sessionManager.getCwd();
|
|
565
|
+
const autoTrustOnReloadCwd = parsed.projectTrustOverride === undefined && !hasTrustRequiringProjectResources(sessionCwd)
|
|
566
|
+
? sessionCwd
|
|
567
|
+
: undefined;
|
|
568
|
+
const trustPromptMode = parsed.help || parsed.listModels !== undefined ? "print" : appMode;
|
|
569
|
+
const projectTrustByCwd = new Map();
|
|
401
570
|
const resolvedExtensionPaths = resolveCliPaths(cwd, parsed.extensions);
|
|
402
571
|
const resolvedSkillPaths = resolveCliPaths(cwd, parsed.skills);
|
|
403
572
|
const resolvedPromptTemplatePaths = resolveCliPaths(cwd, parsed.promptTemplates);
|
|
404
573
|
const resolvedThemePaths = resolveCliPaths(cwd, parsed.themes);
|
|
405
|
-
const
|
|
406
|
-
|
|
574
|
+
const createRuntime = async ({ cwd, agentDir, sessionManager, sessionStartEvent, projectTrustContext, }) => {
|
|
575
|
+
const isInitialRuntime = sessionStartEvent === undefined;
|
|
576
|
+
const projectTrustDiagnostics = [];
|
|
577
|
+
const cachedProjectTrust = projectTrustByCwd.get(cwd);
|
|
578
|
+
const hasTrustRequiringResources = hasTrustRequiringProjectResources(cwd);
|
|
579
|
+
const shouldResolveProjectTrust = parsed.projectTrustOverride === undefined && cachedProjectTrust === undefined && hasTrustRequiringResources;
|
|
580
|
+
const projectTrusted = shouldResolveProjectTrust
|
|
581
|
+
? false
|
|
582
|
+
: (cachedProjectTrust ??
|
|
583
|
+
parsed.projectTrustOverride ??
|
|
584
|
+
(!hasTrustRequiringResources || trustStore.get(cwd) === true));
|
|
585
|
+
const runtimeSettingsManager = SettingsManager.create(cwd, agentDir, { projectTrusted });
|
|
407
586
|
const services = await createAgentSessionServices({
|
|
408
587
|
cwd,
|
|
409
588
|
agentDir,
|
|
410
|
-
|
|
589
|
+
cacheDir: getCacheDir(),
|
|
590
|
+
settingsManager: runtimeSettingsManager,
|
|
591
|
+
modelRuntimeSignal: AbortSignal.timeout(15_000),
|
|
411
592
|
extensionFlagValues: parsed.unknownFlags,
|
|
593
|
+
resourceLoaderReloadOptions: shouldResolveProjectTrust
|
|
594
|
+
? {
|
|
595
|
+
resolveProjectTrust: async ({ extensionsResult }) => {
|
|
596
|
+
const trusted = await resolveProjectTrusted({
|
|
597
|
+
cwd,
|
|
598
|
+
trustStore,
|
|
599
|
+
trustOverride: parsed.projectTrustOverride,
|
|
600
|
+
defaultProjectTrust: startupSettingsManager.getDefaultProjectTrust(),
|
|
601
|
+
extensionsResult,
|
|
602
|
+
projectTrustContext: projectTrustContext ??
|
|
603
|
+
createProjectTrustContext({
|
|
604
|
+
cwd,
|
|
605
|
+
mode: isInitialRuntime ? trustPromptMode : appMode,
|
|
606
|
+
settingsManager: startupSettingsManager,
|
|
607
|
+
hasUI: isInitialRuntime && trustPromptMode === "interactive",
|
|
608
|
+
}),
|
|
609
|
+
onExtensionError: (message) => projectTrustDiagnostics.push({ type: "warning", message }),
|
|
610
|
+
});
|
|
611
|
+
projectTrustByCwd.set(cwd, trusted);
|
|
612
|
+
return trusted;
|
|
613
|
+
},
|
|
614
|
+
}
|
|
615
|
+
: undefined,
|
|
412
616
|
resourceLoaderOptions: {
|
|
413
617
|
additionalExtensionPaths: resolvedExtensionPaths,
|
|
414
618
|
additionalSkillPaths: resolvedSkillPaths,
|
|
@@ -421,11 +625,12 @@ export async function main(args, options) {
|
|
|
421
625
|
noContextFiles: parsed.noContextFiles,
|
|
422
626
|
systemPrompt: parsed.systemPrompt,
|
|
423
627
|
appendSystemPrompt: parsed.appendSystemPrompt,
|
|
424
|
-
extensionFactories
|
|
628
|
+
extensionFactories,
|
|
425
629
|
},
|
|
426
630
|
});
|
|
427
|
-
const { settingsManager,
|
|
631
|
+
const { settingsManager, modelRuntime, resourceLoader } = services;
|
|
428
632
|
const diagnostics = [
|
|
633
|
+
...projectTrustDiagnostics,
|
|
429
634
|
...services.diagnostics,
|
|
430
635
|
...collectSettingsDiagnostics(settingsManager, "runtime creation"),
|
|
431
636
|
...resourceLoader.getExtensions().errors.map(({ path, error }) => ({
|
|
@@ -434,8 +639,10 @@ export async function main(args, options) {
|
|
|
434
639
|
})),
|
|
435
640
|
];
|
|
436
641
|
const modelPatterns = parsed.models ?? settingsManager.getEnabledModels();
|
|
437
|
-
const scopedModels = modelPatterns && modelPatterns.length > 0
|
|
438
|
-
|
|
642
|
+
const scopedModels = modelPatterns && modelPatterns.length > 0
|
|
643
|
+
? await resolveModelScope(modelPatterns, modelRuntime, { signal: AbortSignal.timeout(15_000) })
|
|
644
|
+
: [];
|
|
645
|
+
const { options: sessionOptions, cliThinkingFromModel, diagnostics: sessionOptionDiagnostics, } = buildSessionOptions(parsed, scopedModels, sessionManager.buildSessionContext().messages.length > 0, modelRuntime, settingsManager);
|
|
439
646
|
diagnostics.push(...sessionOptionDiagnostics);
|
|
440
647
|
if (parsed.apiKey) {
|
|
441
648
|
if (!sessionOptions.model) {
|
|
@@ -445,7 +652,7 @@ export async function main(args, options) {
|
|
|
445
652
|
});
|
|
446
653
|
}
|
|
447
654
|
else {
|
|
448
|
-
|
|
655
|
+
await modelRuntime.setRuntimeApiKey(sessionOptions.model.provider, parsed.apiKey);
|
|
449
656
|
}
|
|
450
657
|
}
|
|
451
658
|
const created = await createAgentSessionFromServices({
|
|
@@ -456,21 +663,13 @@ export async function main(args, options) {
|
|
|
456
663
|
thinkingLevel: sessionOptions.thinkingLevel,
|
|
457
664
|
scopedModels: sessionOptions.scopedModels,
|
|
458
665
|
tools: sessionOptions.tools,
|
|
666
|
+
excludeTools: sessionOptions.excludeTools,
|
|
459
667
|
noTools: sessionOptions.noTools,
|
|
460
668
|
customTools: sessionOptions.customTools,
|
|
461
669
|
});
|
|
462
670
|
const cliThinkingOverride = parsed.thinking !== undefined || cliThinkingFromModel;
|
|
463
671
|
if (created.session.model && cliThinkingOverride) {
|
|
464
|
-
|
|
465
|
-
if (!created.session.model.reasoning) {
|
|
466
|
-
effectiveThinking = "off";
|
|
467
|
-
}
|
|
468
|
-
else if (effectiveThinking === "xhigh" && !supportsXhigh(created.session.model)) {
|
|
469
|
-
effectiveThinking = "high";
|
|
470
|
-
}
|
|
471
|
-
if (effectiveThinking !== created.session.thinkingLevel) {
|
|
472
|
-
created.session.setThinkingLevel(effectiveThinking);
|
|
473
|
-
}
|
|
672
|
+
created.session.setThinkingLevel(created.session.thinkingLevel);
|
|
474
673
|
}
|
|
475
674
|
return {
|
|
476
675
|
...created,
|
|
@@ -484,8 +683,11 @@ export async function main(args, options) {
|
|
|
484
683
|
agentDir,
|
|
485
684
|
sessionManager,
|
|
486
685
|
});
|
|
686
|
+
time("createAgentSessionRuntime");
|
|
487
687
|
const { services, session, modelFallbackMessage } = runtime;
|
|
488
|
-
const { settingsManager,
|
|
688
|
+
const { settingsManager, modelRuntime, resourceLoader } = services;
|
|
689
|
+
applyHttpProxySettings(settingsManager.getGlobalSettings().httpProxy);
|
|
690
|
+
configureHttpDispatcher(settingsManager.getHttpIdleTimeoutMs());
|
|
489
691
|
if (parsed.help) {
|
|
490
692
|
const extensionFlags = resourceLoader
|
|
491
693
|
.getExtensions()
|
|
@@ -495,7 +697,7 @@ export async function main(args, options) {
|
|
|
495
697
|
}
|
|
496
698
|
if (parsed.listModels !== undefined) {
|
|
497
699
|
const searchPattern = typeof parsed.listModels === "string" ? parsed.listModels : undefined;
|
|
498
|
-
await listModels(
|
|
700
|
+
await listModels(modelRuntime, searchPattern, AbortSignal.timeout(15_000));
|
|
499
701
|
process.exit(0);
|
|
500
702
|
}
|
|
501
703
|
// Read piped stdin content (if any) - skip for RPC mode which uses stdin for JSON-RPC
|
|
@@ -515,10 +717,12 @@ export async function main(args, options) {
|
|
|
515
717
|
if (appMode === "interactive" && deprecationWarnings.length > 0) {
|
|
516
718
|
await showDeprecationWarnings(deprecationWarnings);
|
|
517
719
|
}
|
|
518
|
-
const scopedModels = [...session.scopedModels];
|
|
519
720
|
time("resolveModelScope");
|
|
520
721
|
reportDiagnostics(runtime.diagnostics);
|
|
521
722
|
if (runtime.diagnostics.some((diagnostic) => diagnostic.type === "error")) {
|
|
723
|
+
if (runtime.diagnostics.some((diagnostic) => diagnostic.message.includes("Failed to load extension"))) {
|
|
724
|
+
console.error(chalk.yellow(EXTENSION_LOAD_FAILURE_HINT));
|
|
725
|
+
}
|
|
522
726
|
process.exit(1);
|
|
523
727
|
}
|
|
524
728
|
time("createAgentSession");
|
|
@@ -526,39 +730,45 @@ export async function main(args, options) {
|
|
|
526
730
|
console.error(chalk.red(formatNoModelsAvailableMessage()));
|
|
527
731
|
process.exit(1);
|
|
528
732
|
}
|
|
529
|
-
const startupBenchmark = isTruthyEnvFlag(process.env.
|
|
733
|
+
const startupBenchmark = isTruthyEnvFlag(process.env.MCPI_STARTUP_BENCHMARK);
|
|
530
734
|
if (startupBenchmark && appMode !== "interactive") {
|
|
531
|
-
console.error(chalk.red("Error:
|
|
735
|
+
console.error(chalk.red("Error: MCPI_STARTUP_BENCHMARK only supports interactive mode"));
|
|
532
736
|
process.exit(1);
|
|
533
737
|
}
|
|
738
|
+
// RPC refreshes catalogs here in the background; interactive mode starts its refresh after TUI initialization.
|
|
739
|
+
if (!offlineMode && appMode === "rpc") {
|
|
740
|
+
const controller = new AbortController();
|
|
741
|
+
const timeout = setTimeout(() => controller.abort(), 15_000);
|
|
742
|
+
void modelRuntime
|
|
743
|
+
.refresh({ signal: controller.signal })
|
|
744
|
+
.catch(() => { })
|
|
745
|
+
.finally(() => clearTimeout(timeout));
|
|
746
|
+
}
|
|
534
747
|
if (appMode === "rpc") {
|
|
535
748
|
printTimings();
|
|
536
749
|
await runRpcMode(runtime);
|
|
537
750
|
}
|
|
538
751
|
else if (appMode === "interactive") {
|
|
539
|
-
if (scopedModels.length > 0 && (parsed.verbose || !settingsManager.getQuietStartup())) {
|
|
540
|
-
const modelList = scopedModels
|
|
541
|
-
.map((sm) => {
|
|
542
|
-
const thinkingStr = sm.thinkingLevel ? `:${sm.thinkingLevel}` : "";
|
|
543
|
-
return `${sm.model.id}${thinkingStr}`;
|
|
544
|
-
})
|
|
545
|
-
.join(", ");
|
|
546
|
-
console.log(chalk.dim(`Model scope: ${modelList} ${chalk.gray("(Ctrl+P to cycle)")}`));
|
|
547
|
-
}
|
|
548
752
|
const interactiveMode = new InteractiveMode(runtime, {
|
|
549
753
|
migratedProviders,
|
|
550
754
|
modelFallbackMessage,
|
|
755
|
+
autoTrustOnReloadCwd,
|
|
551
756
|
initialMessage,
|
|
552
757
|
initialImages,
|
|
553
758
|
initialMessages: parsed.messages,
|
|
554
759
|
verbose: parsed.verbose,
|
|
760
|
+
tuiMode: parsed.tuiMode,
|
|
761
|
+
initialThemeSetting: parsed.useTheme,
|
|
555
762
|
});
|
|
556
763
|
if (startupBenchmark) {
|
|
557
764
|
await interactiveMode.init();
|
|
558
765
|
time("interactiveMode.init");
|
|
559
|
-
|
|
766
|
+
// Give the TUI's stdin handler a brief chance to consume terminal query replies
|
|
767
|
+
// (Kitty keyboard protocol, device attributes, cell size) before restoring the terminal.
|
|
768
|
+
await new Promise((resolve) => setTimeout(resolve, 150));
|
|
560
769
|
interactiveMode.stop();
|
|
561
770
|
stopThemeWatcher();
|
|
771
|
+
printTimings();
|
|
562
772
|
if (process.stdout.writableLength > 0) {
|
|
563
773
|
await new Promise((resolve) => process.stdout.once("drain", resolve));
|
|
564
774
|
}
|