@vandeepunk/pi-coding-agent 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +2564 -0
- package/README.md +555 -0
- package/dist/cli/args.d.ts +47 -0
- package/dist/cli/args.d.ts.map +1 -0
- package/dist/cli/args.js +286 -0
- package/dist/cli/args.js.map +1 -0
- package/dist/cli/config-selector.d.ts +14 -0
- package/dist/cli/config-selector.d.ts.map +1 -0
- package/dist/cli/config-selector.js +31 -0
- package/dist/cli/config-selector.js.map +1 -0
- package/dist/cli/file-processor.d.ts +15 -0
- package/dist/cli/file-processor.d.ts.map +1 -0
- package/dist/cli/file-processor.js +79 -0
- package/dist/cli/file-processor.js.map +1 -0
- package/dist/cli/list-models.d.ts +9 -0
- package/dist/cli/list-models.d.ts.map +1 -0
- package/dist/cli/list-models.js +92 -0
- package/dist/cli/list-models.js.map +1 -0
- package/dist/cli/session-picker.d.ts +9 -0
- package/dist/cli/session-picker.d.ts.map +1 -0
- package/dist/cli/session-picker.js +34 -0
- package/dist/cli/session-picker.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +11 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +68 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +203 -0
- package/dist/config.js.map +1 -0
- package/dist/core/agent-session.d.ts +574 -0
- package/dist/core/agent-session.d.ts.map +1 -0
- package/dist/core/agent-session.js +2260 -0
- package/dist/core/agent-session.js.map +1 -0
- package/dist/core/auth-storage.d.ts +102 -0
- package/dist/core/auth-storage.d.ts.map +1 -0
- package/dist/core/auth-storage.js +282 -0
- package/dist/core/auth-storage.js.map +1 -0
- package/dist/core/bash-executor.d.ts +47 -0
- package/dist/core/bash-executor.d.ts.map +1 -0
- package/dist/core/bash-executor.js +212 -0
- package/dist/core/bash-executor.js.map +1 -0
- package/dist/core/compaction/branch-summarization.d.ts +86 -0
- package/dist/core/compaction/branch-summarization.d.ts.map +1 -0
- package/dist/core/compaction/branch-summarization.js +242 -0
- package/dist/core/compaction/branch-summarization.js.map +1 -0
- package/dist/core/compaction/compaction.d.ts +121 -0
- package/dist/core/compaction/compaction.d.ts.map +1 -0
- package/dist/core/compaction/compaction.js +607 -0
- package/dist/core/compaction/compaction.js.map +1 -0
- package/dist/core/compaction/index.d.ts +7 -0
- package/dist/core/compaction/index.d.ts.map +1 -0
- package/dist/core/compaction/index.js +7 -0
- package/dist/core/compaction/index.js.map +1 -0
- package/dist/core/compaction/utils.d.ts +35 -0
- package/dist/core/compaction/utils.d.ts.map +1 -0
- package/dist/core/compaction/utils.js +138 -0
- package/dist/core/compaction/utils.js.map +1 -0
- package/dist/core/defaults.d.ts +3 -0
- package/dist/core/defaults.d.ts.map +1 -0
- package/dist/core/defaults.js +2 -0
- package/dist/core/defaults.js.map +1 -0
- package/dist/core/diagnostics.d.ts +15 -0
- package/dist/core/diagnostics.d.ts.map +1 -0
- package/dist/core/diagnostics.js +2 -0
- package/dist/core/diagnostics.js.map +1 -0
- package/dist/core/event-bus.d.ts +9 -0
- package/dist/core/event-bus.d.ts.map +1 -0
- package/dist/core/event-bus.js +25 -0
- package/dist/core/event-bus.js.map +1 -0
- package/dist/core/exec.d.ts +29 -0
- package/dist/core/exec.d.ts.map +1 -0
- package/dist/core/exec.js +71 -0
- package/dist/core/exec.js.map +1 -0
- package/dist/core/export-html/ansi-to-html.d.ts +22 -0
- package/dist/core/export-html/ansi-to-html.d.ts.map +1 -0
- package/dist/core/export-html/ansi-to-html.js +249 -0
- package/dist/core/export-html/ansi-to-html.js.map +1 -0
- package/dist/core/export-html/index.d.ts +34 -0
- package/dist/core/export-html/index.d.ts.map +1 -0
- package/dist/core/export-html/index.js +222 -0
- package/dist/core/export-html/index.js.map +1 -0
- package/dist/core/export-html/template.css +909 -0
- package/dist/core/export-html/template.html +54 -0
- package/dist/core/export-html/template.js +1549 -0
- package/dist/core/export-html/tool-renderer.d.ts +35 -0
- package/dist/core/export-html/tool-renderer.d.ts.map +1 -0
- package/dist/core/export-html/tool-renderer.js +57 -0
- package/dist/core/export-html/tool-renderer.js.map +1 -0
- package/dist/core/export-html/vendor/highlight.min.js +1213 -0
- package/dist/core/export-html/vendor/marked.min.js +6 -0
- package/dist/core/extensions/index.d.ts +11 -0
- package/dist/core/extensions/index.d.ts.map +1 -0
- package/dist/core/extensions/index.js +9 -0
- package/dist/core/extensions/index.js.map +1 -0
- package/dist/core/extensions/loader.d.ts +25 -0
- package/dist/core/extensions/loader.d.ts.map +1 -0
- package/dist/core/extensions/loader.js +400 -0
- package/dist/core/extensions/loader.js.map +1 -0
- package/dist/core/extensions/runner.d.ts +129 -0
- package/dist/core/extensions/runner.d.ts.map +1 -0
- package/dist/core/extensions/runner.js +576 -0
- package/dist/core/extensions/runner.js.map +1 -0
- package/dist/core/extensions/types.d.ts +928 -0
- package/dist/core/extensions/types.d.ts.map +1 -0
- package/dist/core/extensions/types.js +35 -0
- package/dist/core/extensions/types.js.map +1 -0
- package/dist/core/extensions/wrapper.d.ts +27 -0
- package/dist/core/extensions/wrapper.d.ts.map +1 -0
- package/dist/core/extensions/wrapper.js +102 -0
- package/dist/core/extensions/wrapper.js.map +1 -0
- package/dist/core/footer-data-provider.d.ts +32 -0
- package/dist/core/footer-data-provider.d.ts.map +1 -0
- package/dist/core/footer-data-provider.js +134 -0
- package/dist/core/footer-data-provider.js.map +1 -0
- package/dist/core/index.d.ts +9 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +9 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/keybindings.d.ts +55 -0
- package/dist/core/keybindings.d.ts.map +1 -0
- package/dist/core/keybindings.js +153 -0
- package/dist/core/keybindings.js.map +1 -0
- package/dist/core/messages.d.ts +77 -0
- package/dist/core/messages.d.ts.map +1 -0
- package/dist/core/messages.js +123 -0
- package/dist/core/messages.js.map +1 -0
- package/dist/core/model-registry.d.ts +100 -0
- package/dist/core/model-registry.d.ts.map +1 -0
- package/dist/core/model-registry.js +419 -0
- package/dist/core/model-registry.js.map +1 -0
- package/dist/core/model-resolver.d.ts +76 -0
- package/dist/core/model-resolver.d.ts.map +1 -0
- package/dist/core/model-resolver.js +313 -0
- package/dist/core/model-resolver.js.map +1 -0
- package/dist/core/package-manager.d.ts +131 -0
- package/dist/core/package-manager.d.ts.map +1 -0
- package/dist/core/package-manager.js +1290 -0
- package/dist/core/package-manager.js.map +1 -0
- package/dist/core/prompt-templates.d.ts +50 -0
- package/dist/core/prompt-templates.d.ts.map +1 -0
- package/dist/core/prompt-templates.js +251 -0
- package/dist/core/prompt-templates.js.map +1 -0
- package/dist/core/resolve-config-value.d.ts +17 -0
- package/dist/core/resolve-config-value.d.ts.map +1 -0
- package/dist/core/resolve-config-value.js +59 -0
- package/dist/core/resolve-config-value.js.map +1 -0
- package/dist/core/resource-loader.d.ts +184 -0
- package/dist/core/resource-loader.d.ts.map +1 -0
- package/dist/core/resource-loader.js +673 -0
- package/dist/core/resource-loader.js.map +1 -0
- package/dist/core/sdk.d.ts +90 -0
- package/dist/core/sdk.d.ts.map +1 -0
- package/dist/core/sdk.js +234 -0
- package/dist/core/sdk.js.map +1 -0
- package/dist/core/session-manager.d.ts +323 -0
- package/dist/core/session-manager.d.ts.map +1 -0
- package/dist/core/session-manager.js +1091 -0
- package/dist/core/session-manager.js.map +1 -0
- package/dist/core/settings-manager.d.ts +187 -0
- package/dist/core/settings-manager.d.ts.map +1 -0
- package/dist/core/settings-manager.js +552 -0
- package/dist/core/settings-manager.js.map +1 -0
- package/dist/core/skills.d.ts +58 -0
- package/dist/core/skills.d.ts.map +1 -0
- package/dist/core/skills.js +310 -0
- package/dist/core/skills.js.map +1 -0
- package/dist/core/slash-commands.d.ts +15 -0
- package/dist/core/slash-commands.d.ts.map +1 -0
- package/dist/core/slash-commands.js +21 -0
- package/dist/core/slash-commands.js.map +1 -0
- package/dist/core/system-prompt.d.ts +24 -0
- package/dist/core/system-prompt.d.ts.map +1 -0
- package/dist/core/system-prompt.js +137 -0
- package/dist/core/system-prompt.js.map +1 -0
- package/dist/core/timings.d.ts +7 -0
- package/dist/core/timings.d.ts.map +1 -0
- package/dist/core/timings.js +25 -0
- package/dist/core/timings.js.map +1 -0
- package/dist/core/tools/bash.d.ts +55 -0
- package/dist/core/tools/bash.d.ts.map +1 -0
- package/dist/core/tools/bash.js +242 -0
- package/dist/core/tools/bash.js.map +1 -0
- package/dist/core/tools/edit-diff.d.ts +63 -0
- package/dist/core/tools/edit-diff.d.ts.map +1 -0
- package/dist/core/tools/edit-diff.js +243 -0
- package/dist/core/tools/edit-diff.js.map +1 -0
- package/dist/core/tools/edit.d.ts +39 -0
- package/dist/core/tools/edit.d.ts.map +1 -0
- package/dist/core/tools/edit.js +146 -0
- package/dist/core/tools/edit.js.map +1 -0
- package/dist/core/tools/find.d.ts +39 -0
- package/dist/core/tools/find.d.ts.map +1 -0
- package/dist/core/tools/find.js +206 -0
- package/dist/core/tools/find.js.map +1 -0
- package/dist/core/tools/grep.d.ts +45 -0
- package/dist/core/tools/grep.d.ts.map +1 -0
- package/dist/core/tools/grep.js +239 -0
- package/dist/core/tools/grep.js.map +1 -0
- package/dist/core/tools/index.d.ts +73 -0
- package/dist/core/tools/index.d.ts.map +1 -0
- package/dist/core/tools/index.js +61 -0
- package/dist/core/tools/index.js.map +1 -0
- package/dist/core/tools/ls.d.ts +40 -0
- package/dist/core/tools/ls.d.ts.map +1 -0
- package/dist/core/tools/ls.js +118 -0
- package/dist/core/tools/ls.js.map +1 -0
- package/dist/core/tools/path-utils.d.ts +8 -0
- package/dist/core/tools/path-utils.d.ts.map +1 -0
- package/dist/core/tools/path-utils.js +81 -0
- package/dist/core/tools/path-utils.js.map +1 -0
- package/dist/core/tools/read.d.ts +39 -0
- package/dist/core/tools/read.d.ts.map +1 -0
- package/dist/core/tools/read.js +166 -0
- package/dist/core/tools/read.js.map +1 -0
- package/dist/core/tools/truncate.d.ts +70 -0
- package/dist/core/tools/truncate.d.ts.map +1 -0
- package/dist/core/tools/truncate.js +205 -0
- package/dist/core/tools/truncate.js.map +1 -0
- package/dist/core/tools/write.d.ts +29 -0
- package/dist/core/tools/write.d.ts.map +1 -0
- package/dist/core/tools/write.js +78 -0
- package/dist/core/tools/write.js.map +1 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +42 -0
- package/dist/index.js.map +1 -0
- package/dist/main.d.ts +8 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +623 -0
- package/dist/main.js.map +1 -0
- package/dist/migrations.d.ts +33 -0
- package/dist/migrations.d.ts.map +1 -0
- package/dist/migrations.js +261 -0
- package/dist/migrations.js.map +1 -0
- package/dist/modes/index.d.ts +9 -0
- package/dist/modes/index.d.ts.map +1 -0
- package/dist/modes/index.js +8 -0
- package/dist/modes/index.js.map +1 -0
- package/dist/modes/interactive/components/armin.d.ts +34 -0
- package/dist/modes/interactive/components/armin.d.ts.map +1 -0
- package/dist/modes/interactive/components/armin.js +333 -0
- package/dist/modes/interactive/components/armin.js.map +1 -0
- package/dist/modes/interactive/components/assistant-message.d.ts +16 -0
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/assistant-message.js +91 -0
- package/dist/modes/interactive/components/assistant-message.js.map +1 -0
- package/dist/modes/interactive/components/bash-execution.d.ts +35 -0
- package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -0
- package/dist/modes/interactive/components/bash-execution.js +162 -0
- package/dist/modes/interactive/components/bash-execution.js.map +1 -0
- package/dist/modes/interactive/components/bordered-loader.d.ts +16 -0
- package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -0
- package/dist/modes/interactive/components/bordered-loader.js +51 -0
- package/dist/modes/interactive/components/bordered-loader.js.map +1 -0
- package/dist/modes/interactive/components/branch-summary-message.d.ts +16 -0
- package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/branch-summary-message.js +44 -0
- package/dist/modes/interactive/components/branch-summary-message.js.map +1 -0
- package/dist/modes/interactive/components/compaction-summary-message.d.ts +16 -0
- package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/compaction-summary-message.js +45 -0
- package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -0
- package/dist/modes/interactive/components/config-selector.d.ts +71 -0
- package/dist/modes/interactive/components/config-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/config-selector.js +479 -0
- package/dist/modes/interactive/components/config-selector.js.map +1 -0
- package/dist/modes/interactive/components/countdown-timer.d.ts +14 -0
- package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -0
- package/dist/modes/interactive/components/countdown-timer.js +33 -0
- package/dist/modes/interactive/components/countdown-timer.js.map +1 -0
- package/dist/modes/interactive/components/custom-editor.d.ts +21 -0
- package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -0
- package/dist/modes/interactive/components/custom-editor.js +70 -0
- package/dist/modes/interactive/components/custom-editor.js.map +1 -0
- package/dist/modes/interactive/components/custom-message.d.ts +20 -0
- package/dist/modes/interactive/components/custom-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/custom-message.js +79 -0
- package/dist/modes/interactive/components/custom-message.js.map +1 -0
- package/dist/modes/interactive/components/daxnuts.d.ts +23 -0
- package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -0
- package/dist/modes/interactive/components/daxnuts.js +140 -0
- package/dist/modes/interactive/components/daxnuts.js.map +1 -0
- package/dist/modes/interactive/components/diff.d.ts +12 -0
- package/dist/modes/interactive/components/diff.d.ts.map +1 -0
- package/dist/modes/interactive/components/diff.js +133 -0
- package/dist/modes/interactive/components/diff.js.map +1 -0
- package/dist/modes/interactive/components/dynamic-border.d.ts +15 -0
- package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -0
- package/dist/modes/interactive/components/dynamic-border.js +21 -0
- package/dist/modes/interactive/components/dynamic-border.js.map +1 -0
- package/dist/modes/interactive/components/extension-editor.d.ts +17 -0
- package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -0
- package/dist/modes/interactive/components/extension-editor.js +102 -0
- package/dist/modes/interactive/components/extension-editor.js.map +1 -0
- package/dist/modes/interactive/components/extension-input.d.ts +23 -0
- package/dist/modes/interactive/components/extension-input.d.ts.map +1 -0
- package/dist/modes/interactive/components/extension-input.js +61 -0
- package/dist/modes/interactive/components/extension-input.js.map +1 -0
- package/dist/modes/interactive/components/extension-selector.d.ts +24 -0
- package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/extension-selector.js +78 -0
- package/dist/modes/interactive/components/extension-selector.js.map +1 -0
- package/dist/modes/interactive/components/footer.d.ts +26 -0
- package/dist/modes/interactive/components/footer.d.ts.map +1 -0
- package/dist/modes/interactive/components/footer.js +220 -0
- package/dist/modes/interactive/components/footer.js.map +1 -0
- package/dist/modes/interactive/components/index.d.ts +32 -0
- package/dist/modes/interactive/components/index.d.ts.map +1 -0
- package/dist/modes/interactive/components/index.js +33 -0
- package/dist/modes/interactive/components/index.js.map +1 -0
- package/dist/modes/interactive/components/keybinding-hints.d.ts +41 -0
- package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -0
- package/dist/modes/interactive/components/keybinding-hints.js +61 -0
- package/dist/modes/interactive/components/keybinding-hints.js.map +1 -0
- package/dist/modes/interactive/components/login-dialog.d.ts +42 -0
- package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -0
- package/dist/modes/interactive/components/login-dialog.js +145 -0
- package/dist/modes/interactive/components/login-dialog.js.map +1 -0
- package/dist/modes/interactive/components/model-selector.d.ts +47 -0
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/model-selector.js +266 -0
- package/dist/modes/interactive/components/model-selector.js.map +1 -0
- package/dist/modes/interactive/components/oauth-selector.d.ts +19 -0
- package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/oauth-selector.js +97 -0
- package/dist/modes/interactive/components/oauth-selector.js.map +1 -0
- package/dist/modes/interactive/components/scoped-models-selector.d.ts +49 -0
- package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/scoped-models-selector.js +270 -0
- package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -0
- package/dist/modes/interactive/components/session-selector-search.d.ts +23 -0
- package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -0
- package/dist/modes/interactive/components/session-selector-search.js +155 -0
- package/dist/modes/interactive/components/session-selector-search.js.map +1 -0
- package/dist/modes/interactive/components/session-selector.d.ts +95 -0
- package/dist/modes/interactive/components/session-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/session-selector.js +851 -0
- package/dist/modes/interactive/components/session-selector.js.map +1 -0
- package/dist/modes/interactive/components/settings-selector.d.ts +53 -0
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/settings-selector.js +277 -0
- package/dist/modes/interactive/components/settings-selector.js.map +1 -0
- package/dist/modes/interactive/components/show-images-selector.d.ts +10 -0
- package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/show-images-selector.js +35 -0
- package/dist/modes/interactive/components/show-images-selector.js.map +1 -0
- package/dist/modes/interactive/components/skill-invocation-message.d.ts +17 -0
- package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/skill-invocation-message.js +47 -0
- package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -0
- package/dist/modes/interactive/components/theme-selector.d.ts +11 -0
- package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/theme-selector.js +46 -0
- package/dist/modes/interactive/components/theme-selector.js.map +1 -0
- package/dist/modes/interactive/components/thinking-selector.d.ts +11 -0
- package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/thinking-selector.js +47 -0
- package/dist/modes/interactive/components/thinking-selector.js.map +1 -0
- package/dist/modes/interactive/components/tool-execution.d.ts +70 -0
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -0
- package/dist/modes/interactive/components/tool-execution.js +621 -0
- package/dist/modes/interactive/components/tool-execution.js.map +1 -0
- package/dist/modes/interactive/components/tree-selector.d.ts +68 -0
- package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/tree-selector.js +934 -0
- package/dist/modes/interactive/components/tree-selector.js.map +1 -0
- package/dist/modes/interactive/components/user-message-selector.d.ts +30 -0
- package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/user-message-selector.js +113 -0
- package/dist/modes/interactive/components/user-message-selector.js.map +1 -0
- package/dist/modes/interactive/components/user-message.d.ts +8 -0
- package/dist/modes/interactive/components/user-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/user-message.js +16 -0
- package/dist/modes/interactive/components/user-message.js.map +1 -0
- package/dist/modes/interactive/components/visual-truncate.d.ts +24 -0
- package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -0
- package/dist/modes/interactive/components/visual-truncate.js +33 -0
- package/dist/modes/interactive/components/visual-truncate.js.map +1 -0
- package/dist/modes/interactive/interactive-mode.d.ts +313 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-mode.js +3664 -0
- package/dist/modes/interactive/interactive-mode.js.map +1 -0
- package/dist/modes/interactive/theme/dark.json +85 -0
- package/dist/modes/interactive/theme/light.json +84 -0
- package/dist/modes/interactive/theme/theme-schema.json +335 -0
- package/dist/modes/interactive/theme/theme.d.ts +78 -0
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -0
- package/dist/modes/interactive/theme/theme.js +944 -0
- package/dist/modes/interactive/theme/theme.js.map +1 -0
- package/dist/modes/print-mode.d.ts +28 -0
- package/dist/modes/print-mode.d.ts.map +1 -0
- package/dist/modes/print-mode.js +98 -0
- package/dist/modes/print-mode.js.map +1 -0
- package/dist/modes/rpc/rpc-client.d.ts +217 -0
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -0
- package/dist/modes/rpc/rpc-client.js +405 -0
- package/dist/modes/rpc/rpc-client.js.map +1 -0
- package/dist/modes/rpc/rpc-mode.d.ts +20 -0
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -0
- package/dist/modes/rpc/rpc-mode.js +500 -0
- package/dist/modes/rpc/rpc-mode.js.map +1 -0
- package/dist/modes/rpc/rpc-types.d.ts +409 -0
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -0
- package/dist/modes/rpc/rpc-types.js +8 -0
- package/dist/modes/rpc/rpc-types.js.map +1 -0
- package/dist/utils/changelog.d.ts +21 -0
- package/dist/utils/changelog.d.ts.map +1 -0
- package/dist/utils/changelog.js +87 -0
- package/dist/utils/changelog.js.map +1 -0
- package/dist/utils/clipboard-image.d.ts +11 -0
- package/dist/utils/clipboard-image.d.ts.map +1 -0
- package/dist/utils/clipboard-image.js +162 -0
- package/dist/utils/clipboard-image.js.map +1 -0
- package/dist/utils/clipboard-native.d.ts +7 -0
- package/dist/utils/clipboard-native.d.ts.map +1 -0
- package/dist/utils/clipboard-native.js +14 -0
- package/dist/utils/clipboard-native.js.map +1 -0
- package/dist/utils/clipboard.d.ts +2 -0
- package/dist/utils/clipboard.d.ts.map +1 -0
- package/dist/utils/clipboard.js +67 -0
- package/dist/utils/clipboard.js.map +1 -0
- package/dist/utils/frontmatter.d.ts +8 -0
- package/dist/utils/frontmatter.d.ts.map +1 -0
- package/dist/utils/frontmatter.js +26 -0
- package/dist/utils/frontmatter.js.map +1 -0
- package/dist/utils/git.d.ts +2 -0
- package/dist/utils/git.d.ts.map +1 -0
- package/dist/utils/git.js +6 -0
- package/dist/utils/git.js.map +1 -0
- package/dist/utils/image-convert.d.ts +9 -0
- package/dist/utils/image-convert.d.ts.map +1 -0
- package/dist/utils/image-convert.js +35 -0
- package/dist/utils/image-convert.js.map +1 -0
- package/dist/utils/image-resize.d.ts +36 -0
- package/dist/utils/image-resize.d.ts.map +1 -0
- package/dist/utils/image-resize.js +181 -0
- package/dist/utils/image-resize.js.map +1 -0
- package/dist/utils/mime.d.ts +2 -0
- package/dist/utils/mime.d.ts.map +1 -0
- package/dist/utils/mime.js +26 -0
- package/dist/utils/mime.js.map +1 -0
- package/dist/utils/photon.d.ts +21 -0
- package/dist/utils/photon.d.ts.map +1 -0
- package/dist/utils/photon.js +121 -0
- package/dist/utils/photon.js.map +1 -0
- package/dist/utils/shell.d.ts +26 -0
- package/dist/utils/shell.d.ts.map +1 -0
- package/dist/utils/shell.js +186 -0
- package/dist/utils/shell.js.map +1 -0
- package/dist/utils/sleep.d.ts +5 -0
- package/dist/utils/sleep.d.ts.map +1 -0
- package/dist/utils/sleep.js +17 -0
- package/dist/utils/sleep.js.map +1 -0
- package/dist/utils/tools-manager.d.ts +3 -0
- package/dist/utils/tools-manager.d.ts.map +1 -0
- package/dist/utils/tools-manager.js +201 -0
- package/dist/utils/tools-manager.js.map +1 -0
- package/docs/compaction.md +390 -0
- package/docs/custom-provider.md +539 -0
- package/docs/development.md +69 -0
- package/docs/extensions.md +1827 -0
- package/docs/images/doom-extension.png +0 -0
- package/docs/images/exy.png +0 -0
- package/docs/images/interactive-mode.png +0 -0
- package/docs/images/tree-view.png +0 -0
- package/docs/json.md +79 -0
- package/docs/keybindings.md +174 -0
- package/docs/models.md +254 -0
- package/docs/packages.md +191 -0
- package/docs/prompt-templates.md +67 -0
- package/docs/providers.md +168 -0
- package/docs/rpc.md +1311 -0
- package/docs/sdk.md +957 -0
- package/docs/session.md +412 -0
- package/docs/settings.md +221 -0
- package/docs/shell-aliases.md +13 -0
- package/docs/skills.md +227 -0
- package/docs/terminal-setup.md +70 -0
- package/docs/termux.md +127 -0
- package/docs/themes.md +295 -0
- package/docs/tree.md +219 -0
- package/docs/tui.md +887 -0
- package/docs/windows.md +17 -0
- package/examples/README.md +25 -0
- package/examples/extensions/README.md +202 -0
- package/examples/extensions/antigravity-image-gen.ts +413 -0
- package/examples/extensions/auto-commit-on-exit.ts +49 -0
- package/examples/extensions/bash-spawn-hook.ts +30 -0
- package/examples/extensions/bookmark.ts +50 -0
- package/examples/extensions/claude-rules.ts +86 -0
- package/examples/extensions/commands.ts +72 -0
- package/examples/extensions/confirm-destructive.ts +59 -0
- package/examples/extensions/custom-compaction.ts +114 -0
- package/examples/extensions/custom-footer.ts +64 -0
- package/examples/extensions/custom-header.ts +73 -0
- package/examples/extensions/custom-provider-anthropic/index.ts +604 -0
- package/examples/extensions/custom-provider-anthropic/package-lock.json +24 -0
- package/examples/extensions/custom-provider-anthropic/package.json +19 -0
- package/examples/extensions/custom-provider-gitlab-duo/index.ts +349 -0
- package/examples/extensions/custom-provider-gitlab-duo/package.json +16 -0
- package/examples/extensions/custom-provider-gitlab-duo/test.ts +82 -0
- package/examples/extensions/custom-provider-qwen-cli/index.ts +345 -0
- package/examples/extensions/custom-provider-qwen-cli/package.json +16 -0
- package/examples/extensions/dirty-repo-guard.ts +56 -0
- package/examples/extensions/doom-overlay/README.md +46 -0
- package/examples/extensions/doom-overlay/doom/build/doom.js +21 -0
- package/examples/extensions/doom-overlay/doom/build/doom.wasm +0 -0
- package/examples/extensions/doom-overlay/doom/build.sh +152 -0
- package/examples/extensions/doom-overlay/doom/doomgeneric_pi.c +72 -0
- package/examples/extensions/doom-overlay/doom-component.ts +132 -0
- package/examples/extensions/doom-overlay/doom-engine.ts +173 -0
- package/examples/extensions/doom-overlay/doom-keys.ts +104 -0
- package/examples/extensions/doom-overlay/index.ts +74 -0
- package/examples/extensions/doom-overlay/wad-finder.ts +51 -0
- package/examples/extensions/dynamic-resources/SKILL.md +8 -0
- package/examples/extensions/dynamic-resources/dynamic.json +79 -0
- package/examples/extensions/dynamic-resources/dynamic.md +5 -0
- package/examples/extensions/dynamic-resources/index.ts +15 -0
- package/examples/extensions/event-bus.ts +43 -0
- package/examples/extensions/file-trigger.ts +41 -0
- package/examples/extensions/git-checkpoint.ts +53 -0
- package/examples/extensions/handoff.ts +150 -0
- package/examples/extensions/hello.ts +25 -0
- package/examples/extensions/inline-bash.ts +94 -0
- package/examples/extensions/input-transform.ts +43 -0
- package/examples/extensions/interactive-shell.ts +196 -0
- package/examples/extensions/mac-system-theme.ts +47 -0
- package/examples/extensions/message-renderer.ts +59 -0
- package/examples/extensions/minimal-mode.ts +426 -0
- package/examples/extensions/modal-editor.ts +85 -0
- package/examples/extensions/model-status.ts +31 -0
- package/examples/extensions/notify.ts +55 -0
- package/examples/extensions/overlay-qa-tests.ts +881 -0
- package/examples/extensions/overlay-test.ts +150 -0
- package/examples/extensions/permission-gate.ts +34 -0
- package/examples/extensions/pirate.ts +47 -0
- package/examples/extensions/plan-mode/README.md +65 -0
- package/examples/extensions/plan-mode/index.ts +340 -0
- package/examples/extensions/plan-mode/utils.ts +168 -0
- package/examples/extensions/preset.ts +398 -0
- package/examples/extensions/protected-paths.ts +30 -0
- package/examples/extensions/qna.ts +119 -0
- package/examples/extensions/question.ts +264 -0
- package/examples/extensions/questionnaire.ts +427 -0
- package/examples/extensions/rainbow-editor.ts +88 -0
- package/examples/extensions/rpc-demo.ts +124 -0
- package/examples/extensions/sandbox/index.ts +318 -0
- package/examples/extensions/sandbox/package-lock.json +92 -0
- package/examples/extensions/sandbox/package.json +19 -0
- package/examples/extensions/send-user-message.ts +97 -0
- package/examples/extensions/session-name.ts +27 -0
- package/examples/extensions/shutdown-command.ts +63 -0
- package/examples/extensions/snake.ts +343 -0
- package/examples/extensions/space-invaders.ts +560 -0
- package/examples/extensions/ssh.ts +220 -0
- package/examples/extensions/status-line.ts +40 -0
- package/examples/extensions/subagent/README.md +172 -0
- package/examples/extensions/subagent/agents/planner.md +37 -0
- package/examples/extensions/subagent/agents/reviewer.md +35 -0
- package/examples/extensions/subagent/agents/scout.md +50 -0
- package/examples/extensions/subagent/agents/worker.md +24 -0
- package/examples/extensions/subagent/agents.ts +127 -0
- package/examples/extensions/subagent/index.ts +963 -0
- package/examples/extensions/subagent/prompts/implement-and-review.md +10 -0
- package/examples/extensions/subagent/prompts/implement.md +10 -0
- package/examples/extensions/subagent/prompts/scout-and-plan.md +9 -0
- package/examples/extensions/summarize.ts +195 -0
- package/examples/extensions/system-prompt-header.ts +17 -0
- package/examples/extensions/timed-confirm.ts +70 -0
- package/examples/extensions/titlebar-spinner.ts +58 -0
- package/examples/extensions/todo.ts +299 -0
- package/examples/extensions/tool-override.ts +143 -0
- package/examples/extensions/tools.ts +146 -0
- package/examples/extensions/trigger-compact.ts +40 -0
- package/examples/extensions/truncated-tool.ts +192 -0
- package/examples/extensions/widget-placement.ts +17 -0
- package/examples/extensions/with-deps/index.ts +36 -0
- package/examples/extensions/with-deps/package-lock.json +31 -0
- package/examples/extensions/with-deps/package.json +22 -0
- package/examples/rpc-extension-ui.ts +632 -0
- package/examples/sdk/01-minimal.ts +22 -0
- package/examples/sdk/02-custom-model.ts +49 -0
- package/examples/sdk/03-custom-prompt.ts +55 -0
- package/examples/sdk/04-skills.ts +46 -0
- package/examples/sdk/05-tools.ts +56 -0
- package/examples/sdk/06-extensions.ts +88 -0
- package/examples/sdk/07-context-files.ts +40 -0
- package/examples/sdk/08-prompt-templates.ts +47 -0
- package/examples/sdk/09-api-keys-and-oauth.ts +48 -0
- package/examples/sdk/10-settings.ts +38 -0
- package/examples/sdk/11-sessions.ts +48 -0
- package/examples/sdk/12-full-control.ts +82 -0
- package/examples/sdk/README.md +144 -0
- package/package.json +97 -0
package/dist/main.js
ADDED
|
@@ -0,0 +1,623 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Main entry point for the coding agent CLI.
|
|
3
|
+
*
|
|
4
|
+
* This file handles CLI argument parsing and translates them into
|
|
5
|
+
* createAgentSession() options. The SDK does the heavy lifting.
|
|
6
|
+
*/
|
|
7
|
+
import { homedir } from "node:os";
|
|
8
|
+
import { isAbsolute, join, relative, resolve } from "node:path";
|
|
9
|
+
import { modelsAreEqual, supportsXhigh } from "@mariozechner/pi-ai";
|
|
10
|
+
import chalk from "chalk";
|
|
11
|
+
import { createInterface } from "readline";
|
|
12
|
+
import { parseArgs, printHelp } from "./cli/args.js";
|
|
13
|
+
import { selectConfig } from "./cli/config-selector.js";
|
|
14
|
+
import { processFileArguments } from "./cli/file-processor.js";
|
|
15
|
+
import { listModels } from "./cli/list-models.js";
|
|
16
|
+
import { selectSession } from "./cli/session-picker.js";
|
|
17
|
+
import { CONFIG_DIR_NAME, getAgentDir, getModelsPath, VERSION } from "./config.js";
|
|
18
|
+
import { AuthStorage } from "./core/auth-storage.js";
|
|
19
|
+
import { DEFAULT_THINKING_LEVEL } from "./core/defaults.js";
|
|
20
|
+
import { exportFromFile } from "./core/export-html/index.js";
|
|
21
|
+
import { KeybindingsManager } from "./core/keybindings.js";
|
|
22
|
+
import { ModelRegistry } from "./core/model-registry.js";
|
|
23
|
+
import { resolveModelScope } from "./core/model-resolver.js";
|
|
24
|
+
import { DefaultPackageManager } from "./core/package-manager.js";
|
|
25
|
+
import { DefaultResourceLoader } from "./core/resource-loader.js";
|
|
26
|
+
import { createAgentSession } from "./core/sdk.js";
|
|
27
|
+
import { SessionManager } from "./core/session-manager.js";
|
|
28
|
+
import { SettingsManager } from "./core/settings-manager.js";
|
|
29
|
+
import { printTimings, time } from "./core/timings.js";
|
|
30
|
+
import { allTools } from "./core/tools/index.js";
|
|
31
|
+
import { runMigrations, showDeprecationWarnings } from "./migrations.js";
|
|
32
|
+
import { InteractiveMode, runPrintMode, runRpcMode } from "./modes/index.js";
|
|
33
|
+
import { initTheme, stopThemeWatcher } from "./modes/interactive/theme/theme.js";
|
|
34
|
+
/**
|
|
35
|
+
* Read all content from piped stdin.
|
|
36
|
+
* Returns undefined if stdin is a TTY (interactive terminal).
|
|
37
|
+
*/
|
|
38
|
+
async function readPipedStdin() {
|
|
39
|
+
// If stdin is a TTY, we're running interactively - don't read stdin
|
|
40
|
+
if (process.stdin.isTTY) {
|
|
41
|
+
return undefined;
|
|
42
|
+
}
|
|
43
|
+
return new Promise((resolve) => {
|
|
44
|
+
let data = "";
|
|
45
|
+
process.stdin.setEncoding("utf8");
|
|
46
|
+
process.stdin.on("data", (chunk) => {
|
|
47
|
+
data += chunk;
|
|
48
|
+
});
|
|
49
|
+
process.stdin.on("end", () => {
|
|
50
|
+
resolve(data.trim() || undefined);
|
|
51
|
+
});
|
|
52
|
+
process.stdin.resume();
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
function parsePackageCommand(args) {
|
|
56
|
+
const [command, ...rest] = args;
|
|
57
|
+
if (command !== "install" && command !== "remove" && command !== "update" && command !== "list") {
|
|
58
|
+
return undefined;
|
|
59
|
+
}
|
|
60
|
+
let local = false;
|
|
61
|
+
const sources = [];
|
|
62
|
+
for (const arg of rest) {
|
|
63
|
+
if (arg === "-l" || arg === "--local") {
|
|
64
|
+
local = true;
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
sources.push(arg);
|
|
68
|
+
}
|
|
69
|
+
return { command, source: sources[0], local };
|
|
70
|
+
}
|
|
71
|
+
function expandTildePath(input) {
|
|
72
|
+
const trimmed = input.trim();
|
|
73
|
+
if (trimmed === "~")
|
|
74
|
+
return homedir();
|
|
75
|
+
if (trimmed.startsWith("~/"))
|
|
76
|
+
return resolve(homedir(), trimmed.slice(2));
|
|
77
|
+
if (trimmed.startsWith("~"))
|
|
78
|
+
return resolve(homedir(), trimmed.slice(1));
|
|
79
|
+
return trimmed;
|
|
80
|
+
}
|
|
81
|
+
function resolveLocalSourceFromInput(source, cwd) {
|
|
82
|
+
const expanded = expandTildePath(source);
|
|
83
|
+
return isAbsolute(expanded) ? resolve(expanded) : resolve(cwd, expanded);
|
|
84
|
+
}
|
|
85
|
+
function resolveLocalSourceFromSettings(source, baseDir) {
|
|
86
|
+
const expanded = expandTildePath(source);
|
|
87
|
+
return isAbsolute(expanded) ? expanded : resolve(baseDir, expanded);
|
|
88
|
+
}
|
|
89
|
+
function normalizeLocalSourceForSettings(source, baseDir, cwd) {
|
|
90
|
+
const resolved = resolveLocalSourceFromInput(source, cwd);
|
|
91
|
+
const rel = relative(baseDir, resolved);
|
|
92
|
+
return rel || ".";
|
|
93
|
+
}
|
|
94
|
+
function normalizePackageSourceForSettings(source, baseDir, cwd) {
|
|
95
|
+
const normalized = normalizeExtensionSource(source);
|
|
96
|
+
if (normalized.type !== "local") {
|
|
97
|
+
return source;
|
|
98
|
+
}
|
|
99
|
+
return normalizeLocalSourceForSettings(source, baseDir, cwd);
|
|
100
|
+
}
|
|
101
|
+
function normalizeExtensionSource(source) {
|
|
102
|
+
if (source.startsWith("npm:")) {
|
|
103
|
+
const spec = source.slice("npm:".length).trim();
|
|
104
|
+
const match = spec.match(/^(@?[^@]+(?:\/[^@]+)?)(?:@.+)?$/);
|
|
105
|
+
return { type: "npm", key: match?.[1] ?? spec };
|
|
106
|
+
}
|
|
107
|
+
if (source.startsWith("git:")) {
|
|
108
|
+
const repo = source.slice("git:".length).trim().split("@")[0] ?? "";
|
|
109
|
+
return { type: "git", key: repo.replace(/^https?:\/\//, "").replace(/\.git$/, "") };
|
|
110
|
+
}
|
|
111
|
+
// Raw git URLs
|
|
112
|
+
if (source.startsWith("https://") || source.startsWith("http://")) {
|
|
113
|
+
const repo = source.split("@")[0] ?? "";
|
|
114
|
+
return { type: "git", key: repo.replace(/^https?:\/\//, "").replace(/\.git$/, "") };
|
|
115
|
+
}
|
|
116
|
+
return { type: "local", key: source };
|
|
117
|
+
}
|
|
118
|
+
function normalizeSourceForInput(source, cwd) {
|
|
119
|
+
const normalized = normalizeExtensionSource(source);
|
|
120
|
+
if (normalized.type !== "local") {
|
|
121
|
+
return normalized;
|
|
122
|
+
}
|
|
123
|
+
return { type: "local", key: resolveLocalSourceFromInput(source, cwd) };
|
|
124
|
+
}
|
|
125
|
+
function normalizeSourceForSettings(source, baseDir) {
|
|
126
|
+
const normalized = normalizeExtensionSource(source);
|
|
127
|
+
if (normalized.type !== "local") {
|
|
128
|
+
return normalized;
|
|
129
|
+
}
|
|
130
|
+
return { type: "local", key: resolveLocalSourceFromSettings(source, baseDir) };
|
|
131
|
+
}
|
|
132
|
+
function sourcesMatch(a, b, baseDir, cwd) {
|
|
133
|
+
const left = normalizeSourceForSettings(a, baseDir);
|
|
134
|
+
const right = normalizeSourceForInput(b, cwd);
|
|
135
|
+
return left.type === right.type && left.key === right.key;
|
|
136
|
+
}
|
|
137
|
+
function getPackageSourceString(pkg) {
|
|
138
|
+
return typeof pkg === "string" ? pkg : pkg.source;
|
|
139
|
+
}
|
|
140
|
+
function packageSourcesMatch(a, b, baseDir, cwd) {
|
|
141
|
+
const aSource = getPackageSourceString(a);
|
|
142
|
+
return sourcesMatch(aSource, b, baseDir, cwd);
|
|
143
|
+
}
|
|
144
|
+
function updatePackageSources(settingsManager, source, local, cwd, agentDir, action) {
|
|
145
|
+
const currentSettings = local ? settingsManager.getProjectSettings() : settingsManager.getGlobalSettings();
|
|
146
|
+
const currentPackages = currentSettings.packages ?? [];
|
|
147
|
+
const baseDir = local ? join(cwd, CONFIG_DIR_NAME) : agentDir;
|
|
148
|
+
const normalizedSource = normalizePackageSourceForSettings(source, baseDir, cwd);
|
|
149
|
+
let nextPackages;
|
|
150
|
+
let changed = false;
|
|
151
|
+
if (action === "add") {
|
|
152
|
+
const exists = currentPackages.some((existing) => packageSourcesMatch(existing, source, baseDir, cwd));
|
|
153
|
+
nextPackages = exists ? currentPackages : [...currentPackages, normalizedSource];
|
|
154
|
+
changed = !exists;
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
nextPackages = currentPackages.filter((existing) => !packageSourcesMatch(existing, source, baseDir, cwd));
|
|
158
|
+
changed = nextPackages.length !== currentPackages.length;
|
|
159
|
+
}
|
|
160
|
+
if (local) {
|
|
161
|
+
settingsManager.setProjectPackages(nextPackages);
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
settingsManager.setPackages(nextPackages);
|
|
165
|
+
}
|
|
166
|
+
return changed;
|
|
167
|
+
}
|
|
168
|
+
async function handlePackageCommand(args) {
|
|
169
|
+
const options = parsePackageCommand(args);
|
|
170
|
+
if (!options) {
|
|
171
|
+
return false;
|
|
172
|
+
}
|
|
173
|
+
const cwd = process.cwd();
|
|
174
|
+
const agentDir = getAgentDir();
|
|
175
|
+
const settingsManager = SettingsManager.create(cwd, agentDir);
|
|
176
|
+
const packageManager = new DefaultPackageManager({ cwd, agentDir, settingsManager });
|
|
177
|
+
// Set up progress callback for CLI feedback
|
|
178
|
+
packageManager.setProgressCallback((event) => {
|
|
179
|
+
if (event.type === "start") {
|
|
180
|
+
process.stdout.write(chalk.dim(`${event.message}\n`));
|
|
181
|
+
}
|
|
182
|
+
else if (event.type === "error") {
|
|
183
|
+
console.error(chalk.red(`Error: ${event.message}`));
|
|
184
|
+
}
|
|
185
|
+
});
|
|
186
|
+
if (options.command === "install") {
|
|
187
|
+
if (!options.source) {
|
|
188
|
+
console.error(chalk.red("Missing install source."));
|
|
189
|
+
process.exit(1);
|
|
190
|
+
}
|
|
191
|
+
await packageManager.install(options.source, { local: options.local });
|
|
192
|
+
updatePackageSources(settingsManager, options.source, options.local, cwd, agentDir, "add");
|
|
193
|
+
console.log(chalk.green(`Installed ${options.source}`));
|
|
194
|
+
return true;
|
|
195
|
+
}
|
|
196
|
+
if (options.command === "remove") {
|
|
197
|
+
if (!options.source) {
|
|
198
|
+
console.error(chalk.red("Missing remove source."));
|
|
199
|
+
process.exit(1);
|
|
200
|
+
}
|
|
201
|
+
await packageManager.remove(options.source, { local: options.local });
|
|
202
|
+
const removed = updatePackageSources(settingsManager, options.source, options.local, cwd, agentDir, "remove");
|
|
203
|
+
if (!removed) {
|
|
204
|
+
console.error(chalk.red(`No matching package found for ${options.source}`));
|
|
205
|
+
process.exit(1);
|
|
206
|
+
}
|
|
207
|
+
console.log(chalk.green(`Removed ${options.source}`));
|
|
208
|
+
return true;
|
|
209
|
+
}
|
|
210
|
+
if (options.command === "list") {
|
|
211
|
+
const globalSettings = settingsManager.getGlobalSettings();
|
|
212
|
+
const projectSettings = settingsManager.getProjectSettings();
|
|
213
|
+
const globalPackages = globalSettings.packages ?? [];
|
|
214
|
+
const projectPackages = projectSettings.packages ?? [];
|
|
215
|
+
if (globalPackages.length === 0 && projectPackages.length === 0) {
|
|
216
|
+
console.log(chalk.dim("No packages installed."));
|
|
217
|
+
return true;
|
|
218
|
+
}
|
|
219
|
+
const formatPackage = (pkg, scope) => {
|
|
220
|
+
const source = typeof pkg === "string" ? pkg : pkg.source;
|
|
221
|
+
const filtered = typeof pkg === "object";
|
|
222
|
+
const display = filtered ? `${source} (filtered)` : source;
|
|
223
|
+
console.log(` ${display}`);
|
|
224
|
+
// Show resolved path
|
|
225
|
+
const path = packageManager.getInstalledPath(source, scope);
|
|
226
|
+
if (path) {
|
|
227
|
+
console.log(chalk.dim(` ${path}`));
|
|
228
|
+
}
|
|
229
|
+
};
|
|
230
|
+
if (globalPackages.length > 0) {
|
|
231
|
+
console.log(chalk.bold("User packages:"));
|
|
232
|
+
for (const pkg of globalPackages) {
|
|
233
|
+
formatPackage(pkg, "user");
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
if (projectPackages.length > 0) {
|
|
237
|
+
if (globalPackages.length > 0)
|
|
238
|
+
console.log();
|
|
239
|
+
console.log(chalk.bold("Project packages:"));
|
|
240
|
+
for (const pkg of projectPackages) {
|
|
241
|
+
formatPackage(pkg, "project");
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
return true;
|
|
245
|
+
}
|
|
246
|
+
await packageManager.update(options.source);
|
|
247
|
+
if (options.source) {
|
|
248
|
+
console.log(chalk.green(`Updated ${options.source}`));
|
|
249
|
+
}
|
|
250
|
+
else {
|
|
251
|
+
console.log(chalk.green("Updated packages"));
|
|
252
|
+
}
|
|
253
|
+
return true;
|
|
254
|
+
}
|
|
255
|
+
async function prepareInitialMessage(parsed, autoResizeImages) {
|
|
256
|
+
if (parsed.fileArgs.length === 0) {
|
|
257
|
+
return {};
|
|
258
|
+
}
|
|
259
|
+
const { text, images } = await processFileArguments(parsed.fileArgs, { autoResizeImages });
|
|
260
|
+
let initialMessage;
|
|
261
|
+
if (parsed.messages.length > 0) {
|
|
262
|
+
initialMessage = text + parsed.messages[0];
|
|
263
|
+
parsed.messages.shift();
|
|
264
|
+
}
|
|
265
|
+
else {
|
|
266
|
+
initialMessage = text;
|
|
267
|
+
}
|
|
268
|
+
return {
|
|
269
|
+
initialMessage,
|
|
270
|
+
initialImages: images.length > 0 ? images : undefined,
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Resolve a session argument to a file path.
|
|
275
|
+
* If it looks like a path, use as-is. Otherwise try to match as session ID prefix.
|
|
276
|
+
*/
|
|
277
|
+
async function resolveSessionPath(sessionArg, cwd, sessionDir) {
|
|
278
|
+
// If it looks like a file path, use as-is
|
|
279
|
+
if (sessionArg.includes("/") || sessionArg.includes("\\") || sessionArg.endsWith(".jsonl")) {
|
|
280
|
+
return { type: "path", path: sessionArg };
|
|
281
|
+
}
|
|
282
|
+
// Try to match as session ID in current project first
|
|
283
|
+
const localSessions = await SessionManager.list(cwd, sessionDir);
|
|
284
|
+
const localMatches = localSessions.filter((s) => s.id.startsWith(sessionArg));
|
|
285
|
+
if (localMatches.length >= 1) {
|
|
286
|
+
return { type: "local", path: localMatches[0].path };
|
|
287
|
+
}
|
|
288
|
+
// Try global search across all projects
|
|
289
|
+
const allSessions = await SessionManager.listAll();
|
|
290
|
+
const globalMatches = allSessions.filter((s) => s.id.startsWith(sessionArg));
|
|
291
|
+
if (globalMatches.length >= 1) {
|
|
292
|
+
const match = globalMatches[0];
|
|
293
|
+
return { type: "global", path: match.path, cwd: match.cwd };
|
|
294
|
+
}
|
|
295
|
+
// Not found anywhere
|
|
296
|
+
return { type: "not_found", arg: sessionArg };
|
|
297
|
+
}
|
|
298
|
+
/** Prompt user for yes/no confirmation */
|
|
299
|
+
async function promptConfirm(message) {
|
|
300
|
+
return new Promise((resolve) => {
|
|
301
|
+
const rl = createInterface({
|
|
302
|
+
input: process.stdin,
|
|
303
|
+
output: process.stdout,
|
|
304
|
+
});
|
|
305
|
+
rl.question(`${message} [y/N] `, (answer) => {
|
|
306
|
+
rl.close();
|
|
307
|
+
resolve(answer.toLowerCase() === "y" || answer.toLowerCase() === "yes");
|
|
308
|
+
});
|
|
309
|
+
});
|
|
310
|
+
}
|
|
311
|
+
async function createSessionManager(parsed, cwd) {
|
|
312
|
+
if (parsed.noSession) {
|
|
313
|
+
return SessionManager.inMemory();
|
|
314
|
+
}
|
|
315
|
+
if (parsed.session) {
|
|
316
|
+
const resolved = await resolveSessionPath(parsed.session, cwd, parsed.sessionDir);
|
|
317
|
+
switch (resolved.type) {
|
|
318
|
+
case "path":
|
|
319
|
+
case "local":
|
|
320
|
+
return SessionManager.open(resolved.path, parsed.sessionDir);
|
|
321
|
+
case "global": {
|
|
322
|
+
// Session found in different project - ask user if they want to fork
|
|
323
|
+
console.log(chalk.yellow(`Session found in different project: ${resolved.cwd}`));
|
|
324
|
+
const shouldFork = await promptConfirm("Fork this session into current directory?");
|
|
325
|
+
if (!shouldFork) {
|
|
326
|
+
console.log(chalk.dim("Aborted."));
|
|
327
|
+
process.exit(0);
|
|
328
|
+
}
|
|
329
|
+
return SessionManager.forkFrom(resolved.path, cwd, parsed.sessionDir);
|
|
330
|
+
}
|
|
331
|
+
case "not_found":
|
|
332
|
+
console.error(chalk.red(`No session found matching '${resolved.arg}'`));
|
|
333
|
+
process.exit(1);
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
if (parsed.continue) {
|
|
337
|
+
return SessionManager.continueRecent(cwd, parsed.sessionDir);
|
|
338
|
+
}
|
|
339
|
+
// --resume is handled separately (needs picker UI)
|
|
340
|
+
// If --session-dir provided without --continue/--resume, create new session there
|
|
341
|
+
if (parsed.sessionDir) {
|
|
342
|
+
return SessionManager.create(cwd, parsed.sessionDir);
|
|
343
|
+
}
|
|
344
|
+
// Default case (new session) returns undefined, SDK will create one
|
|
345
|
+
return undefined;
|
|
346
|
+
}
|
|
347
|
+
function buildSessionOptions(parsed, scopedModels, sessionManager, modelRegistry, settingsManager) {
|
|
348
|
+
const options = {};
|
|
349
|
+
if (sessionManager) {
|
|
350
|
+
options.sessionManager = sessionManager;
|
|
351
|
+
}
|
|
352
|
+
// Model from CLI
|
|
353
|
+
if (parsed.provider && parsed.model) {
|
|
354
|
+
const model = modelRegistry.find(parsed.provider, parsed.model);
|
|
355
|
+
if (!model) {
|
|
356
|
+
console.error(chalk.red(`Model ${parsed.provider}/${parsed.model} not found`));
|
|
357
|
+
process.exit(1);
|
|
358
|
+
}
|
|
359
|
+
options.model = model;
|
|
360
|
+
}
|
|
361
|
+
else if (scopedModels.length > 0 && !parsed.continue && !parsed.resume) {
|
|
362
|
+
// Check if saved default is in scoped models - use it if so, otherwise first scoped model
|
|
363
|
+
const savedProvider = settingsManager.getDefaultProvider();
|
|
364
|
+
const savedModelId = settingsManager.getDefaultModel();
|
|
365
|
+
const savedModel = savedProvider && savedModelId ? modelRegistry.find(savedProvider, savedModelId) : undefined;
|
|
366
|
+
const savedInScope = savedModel ? scopedModels.find((sm) => modelsAreEqual(sm.model, savedModel)) : undefined;
|
|
367
|
+
if (savedInScope) {
|
|
368
|
+
options.model = savedInScope.model;
|
|
369
|
+
// Use thinking level from scoped model config if explicitly set
|
|
370
|
+
if (!parsed.thinking && savedInScope.thinkingLevel) {
|
|
371
|
+
options.thinkingLevel = savedInScope.thinkingLevel;
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
else {
|
|
375
|
+
options.model = scopedModels[0].model;
|
|
376
|
+
// Use thinking level from first scoped model if explicitly set
|
|
377
|
+
if (!parsed.thinking && scopedModels[0].thinkingLevel) {
|
|
378
|
+
options.thinkingLevel = scopedModels[0].thinkingLevel;
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
// Thinking level from CLI (takes precedence over scoped model thinking levels set above)
|
|
383
|
+
if (parsed.thinking) {
|
|
384
|
+
options.thinkingLevel = parsed.thinking;
|
|
385
|
+
}
|
|
386
|
+
// Scoped models for Ctrl+P cycling - fill in default thinking level for models without explicit level
|
|
387
|
+
if (scopedModels.length > 0) {
|
|
388
|
+
const defaultThinkingLevel = settingsManager.getDefaultThinkingLevel() ?? DEFAULT_THINKING_LEVEL;
|
|
389
|
+
options.scopedModels = scopedModels.map((sm) => ({
|
|
390
|
+
model: sm.model,
|
|
391
|
+
thinkingLevel: sm.thinkingLevel ?? defaultThinkingLevel,
|
|
392
|
+
}));
|
|
393
|
+
}
|
|
394
|
+
// API key from CLI - set in authStorage
|
|
395
|
+
// (handled by caller before createAgentSession)
|
|
396
|
+
// Tools
|
|
397
|
+
if (parsed.noTools) {
|
|
398
|
+
// --no-tools: start with no built-in tools
|
|
399
|
+
// --tools can still add specific ones back
|
|
400
|
+
if (parsed.tools && parsed.tools.length > 0) {
|
|
401
|
+
options.tools = parsed.tools.map((name) => allTools[name]);
|
|
402
|
+
}
|
|
403
|
+
else {
|
|
404
|
+
options.tools = [];
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
else if (parsed.tools) {
|
|
408
|
+
options.tools = parsed.tools.map((name) => allTools[name]);
|
|
409
|
+
}
|
|
410
|
+
return options;
|
|
411
|
+
}
|
|
412
|
+
async function handleConfigCommand(args) {
|
|
413
|
+
if (args[0] !== "config") {
|
|
414
|
+
return false;
|
|
415
|
+
}
|
|
416
|
+
const cwd = process.cwd();
|
|
417
|
+
const agentDir = getAgentDir();
|
|
418
|
+
const settingsManager = SettingsManager.create(cwd, agentDir);
|
|
419
|
+
const packageManager = new DefaultPackageManager({ cwd, agentDir, settingsManager });
|
|
420
|
+
const resolvedPaths = await packageManager.resolve();
|
|
421
|
+
await selectConfig({
|
|
422
|
+
resolvedPaths,
|
|
423
|
+
settingsManager,
|
|
424
|
+
cwd,
|
|
425
|
+
agentDir,
|
|
426
|
+
});
|
|
427
|
+
process.exit(0);
|
|
428
|
+
}
|
|
429
|
+
export async function main(args) {
|
|
430
|
+
if (await handlePackageCommand(args)) {
|
|
431
|
+
return;
|
|
432
|
+
}
|
|
433
|
+
if (await handleConfigCommand(args)) {
|
|
434
|
+
return;
|
|
435
|
+
}
|
|
436
|
+
// Run migrations (pass cwd for project-local migrations)
|
|
437
|
+
const { migratedAuthProviders: migratedProviders, deprecationWarnings } = runMigrations(process.cwd());
|
|
438
|
+
// First pass: parse args to get --extension paths
|
|
439
|
+
const firstPass = parseArgs(args);
|
|
440
|
+
// Early load extensions to discover their CLI flags
|
|
441
|
+
const cwd = process.cwd();
|
|
442
|
+
const agentDir = getAgentDir();
|
|
443
|
+
const settingsManager = SettingsManager.create(cwd, agentDir);
|
|
444
|
+
const authStorage = new AuthStorage();
|
|
445
|
+
const modelRegistry = new ModelRegistry(authStorage, getModelsPath());
|
|
446
|
+
const resourceLoader = new DefaultResourceLoader({
|
|
447
|
+
cwd,
|
|
448
|
+
agentDir,
|
|
449
|
+
settingsManager,
|
|
450
|
+
additionalExtensionPaths: firstPass.extensions,
|
|
451
|
+
additionalSkillPaths: firstPass.skills,
|
|
452
|
+
additionalPromptTemplatePaths: firstPass.promptTemplates,
|
|
453
|
+
additionalThemePaths: firstPass.themes,
|
|
454
|
+
noExtensions: firstPass.noExtensions,
|
|
455
|
+
noSkills: firstPass.noSkills,
|
|
456
|
+
noPromptTemplates: firstPass.noPromptTemplates,
|
|
457
|
+
noThemes: firstPass.noThemes,
|
|
458
|
+
systemPrompt: firstPass.systemPrompt,
|
|
459
|
+
appendSystemPrompt: firstPass.appendSystemPrompt,
|
|
460
|
+
});
|
|
461
|
+
await resourceLoader.reload();
|
|
462
|
+
time("resourceLoader.reload");
|
|
463
|
+
const extensionsResult = resourceLoader.getExtensions();
|
|
464
|
+
for (const { path, error } of extensionsResult.errors) {
|
|
465
|
+
console.error(chalk.red(`Failed to load extension "${path}": ${error}`));
|
|
466
|
+
}
|
|
467
|
+
// Apply pending provider registrations from extensions immediately
|
|
468
|
+
// so they're available for model resolution before AgentSession is created
|
|
469
|
+
for (const { name, config } of extensionsResult.runtime.pendingProviderRegistrations) {
|
|
470
|
+
modelRegistry.registerProvider(name, config);
|
|
471
|
+
}
|
|
472
|
+
extensionsResult.runtime.pendingProviderRegistrations = [];
|
|
473
|
+
const extensionFlags = new Map();
|
|
474
|
+
for (const ext of extensionsResult.extensions) {
|
|
475
|
+
for (const [name, flag] of ext.flags) {
|
|
476
|
+
extensionFlags.set(name, { type: flag.type });
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
// Second pass: parse args with extension flags
|
|
480
|
+
const parsed = parseArgs(args, extensionFlags);
|
|
481
|
+
// Pass flag values to extensions via runtime
|
|
482
|
+
for (const [name, value] of parsed.unknownFlags) {
|
|
483
|
+
extensionsResult.runtime.flagValues.set(name, value);
|
|
484
|
+
}
|
|
485
|
+
if (parsed.version) {
|
|
486
|
+
console.log(VERSION);
|
|
487
|
+
return;
|
|
488
|
+
}
|
|
489
|
+
if (parsed.help) {
|
|
490
|
+
printHelp();
|
|
491
|
+
return;
|
|
492
|
+
}
|
|
493
|
+
if (parsed.listModels !== undefined) {
|
|
494
|
+
const searchPattern = typeof parsed.listModels === "string" ? parsed.listModels : undefined;
|
|
495
|
+
await listModels(modelRegistry, searchPattern);
|
|
496
|
+
return;
|
|
497
|
+
}
|
|
498
|
+
// Read piped stdin content (if any) - skip for RPC mode which uses stdin for JSON-RPC
|
|
499
|
+
if (parsed.mode !== "rpc") {
|
|
500
|
+
const stdinContent = await readPipedStdin();
|
|
501
|
+
if (stdinContent !== undefined) {
|
|
502
|
+
// Force print mode since interactive mode requires a TTY for keyboard input
|
|
503
|
+
parsed.print = true;
|
|
504
|
+
// Prepend stdin content to messages
|
|
505
|
+
parsed.messages.unshift(stdinContent);
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
if (parsed.export) {
|
|
509
|
+
try {
|
|
510
|
+
const outputPath = parsed.messages.length > 0 ? parsed.messages[0] : undefined;
|
|
511
|
+
const result = await exportFromFile(parsed.export, outputPath);
|
|
512
|
+
console.log(`Exported to: ${result}`);
|
|
513
|
+
return;
|
|
514
|
+
}
|
|
515
|
+
catch (error) {
|
|
516
|
+
const message = error instanceof Error ? error.message : "Failed to export session";
|
|
517
|
+
console.error(chalk.red(`Error: ${message}`));
|
|
518
|
+
process.exit(1);
|
|
519
|
+
}
|
|
520
|
+
}
|
|
521
|
+
if (parsed.mode === "rpc" && parsed.fileArgs.length > 0) {
|
|
522
|
+
console.error(chalk.red("Error: @file arguments are not supported in RPC mode"));
|
|
523
|
+
process.exit(1);
|
|
524
|
+
}
|
|
525
|
+
const { initialMessage, initialImages } = await prepareInitialMessage(parsed, settingsManager.getImageAutoResize());
|
|
526
|
+
const isInteractive = !parsed.print && parsed.mode === undefined;
|
|
527
|
+
const mode = parsed.mode || "text";
|
|
528
|
+
initTheme(settingsManager.getTheme(), isInteractive);
|
|
529
|
+
// Show deprecation warnings in interactive mode
|
|
530
|
+
if (isInteractive && deprecationWarnings.length > 0) {
|
|
531
|
+
await showDeprecationWarnings(deprecationWarnings);
|
|
532
|
+
}
|
|
533
|
+
let scopedModels = [];
|
|
534
|
+
const modelPatterns = parsed.models ?? settingsManager.getEnabledModels();
|
|
535
|
+
if (modelPatterns && modelPatterns.length > 0) {
|
|
536
|
+
scopedModels = await resolveModelScope(modelPatterns, modelRegistry);
|
|
537
|
+
}
|
|
538
|
+
// Create session manager based on CLI flags
|
|
539
|
+
let sessionManager = await createSessionManager(parsed, cwd);
|
|
540
|
+
// Handle --resume: show session picker
|
|
541
|
+
if (parsed.resume) {
|
|
542
|
+
// Initialize keybindings so session picker respects user config
|
|
543
|
+
KeybindingsManager.create();
|
|
544
|
+
const selectedPath = await selectSession((onProgress) => SessionManager.list(cwd, parsed.sessionDir, onProgress), SessionManager.listAll);
|
|
545
|
+
if (!selectedPath) {
|
|
546
|
+
console.log(chalk.dim("No session selected"));
|
|
547
|
+
stopThemeWatcher();
|
|
548
|
+
process.exit(0);
|
|
549
|
+
}
|
|
550
|
+
sessionManager = SessionManager.open(selectedPath);
|
|
551
|
+
}
|
|
552
|
+
const sessionOptions = buildSessionOptions(parsed, scopedModels, sessionManager, modelRegistry, settingsManager);
|
|
553
|
+
sessionOptions.authStorage = authStorage;
|
|
554
|
+
sessionOptions.modelRegistry = modelRegistry;
|
|
555
|
+
sessionOptions.resourceLoader = resourceLoader;
|
|
556
|
+
// Handle CLI --api-key as runtime override (not persisted)
|
|
557
|
+
if (parsed.apiKey) {
|
|
558
|
+
if (!sessionOptions.model) {
|
|
559
|
+
console.error(chalk.red("--api-key requires a model to be specified via --provider/--model or -m/--models"));
|
|
560
|
+
process.exit(1);
|
|
561
|
+
}
|
|
562
|
+
authStorage.setRuntimeApiKey(sessionOptions.model.provider, parsed.apiKey);
|
|
563
|
+
}
|
|
564
|
+
const { session, modelFallbackMessage } = await createAgentSession(sessionOptions);
|
|
565
|
+
if (!isInteractive && !session.model) {
|
|
566
|
+
console.error(chalk.red("No models available."));
|
|
567
|
+
console.error(chalk.yellow("\nSet an API key environment variable:"));
|
|
568
|
+
console.error(" ANTHROPIC_API_KEY, OPENAI_API_KEY, GEMINI_API_KEY, etc.");
|
|
569
|
+
console.error(chalk.yellow(`\nOr create ${getModelsPath()}`));
|
|
570
|
+
process.exit(1);
|
|
571
|
+
}
|
|
572
|
+
// Clamp thinking level to model capabilities (for CLI override case)
|
|
573
|
+
if (session.model && parsed.thinking) {
|
|
574
|
+
let effectiveThinking = parsed.thinking;
|
|
575
|
+
if (!session.model.reasoning) {
|
|
576
|
+
effectiveThinking = "off";
|
|
577
|
+
}
|
|
578
|
+
else if (effectiveThinking === "xhigh" && !supportsXhigh(session.model)) {
|
|
579
|
+
effectiveThinking = "high";
|
|
580
|
+
}
|
|
581
|
+
if (effectiveThinking !== session.thinkingLevel) {
|
|
582
|
+
session.setThinkingLevel(effectiveThinking);
|
|
583
|
+
}
|
|
584
|
+
}
|
|
585
|
+
if (mode === "rpc") {
|
|
586
|
+
await runRpcMode(session);
|
|
587
|
+
}
|
|
588
|
+
else if (isInteractive) {
|
|
589
|
+
if (scopedModels.length > 0 && (parsed.verbose || !settingsManager.getQuietStartup())) {
|
|
590
|
+
const modelList = scopedModels
|
|
591
|
+
.map((sm) => {
|
|
592
|
+
const thinkingStr = sm.thinkingLevel ? `:${sm.thinkingLevel}` : "";
|
|
593
|
+
return `${sm.model.id}${thinkingStr}`;
|
|
594
|
+
})
|
|
595
|
+
.join(", ");
|
|
596
|
+
console.log(chalk.dim(`Model scope: ${modelList} ${chalk.gray("(Ctrl+P to cycle)")}`));
|
|
597
|
+
}
|
|
598
|
+
printTimings();
|
|
599
|
+
const mode = new InteractiveMode(session, {
|
|
600
|
+
migratedProviders,
|
|
601
|
+
modelFallbackMessage,
|
|
602
|
+
initialMessage,
|
|
603
|
+
initialImages,
|
|
604
|
+
initialMessages: parsed.messages,
|
|
605
|
+
verbose: parsed.verbose,
|
|
606
|
+
});
|
|
607
|
+
await mode.run();
|
|
608
|
+
}
|
|
609
|
+
else {
|
|
610
|
+
await runPrintMode(session, {
|
|
611
|
+
mode,
|
|
612
|
+
messages: parsed.messages,
|
|
613
|
+
initialMessage,
|
|
614
|
+
initialImages,
|
|
615
|
+
});
|
|
616
|
+
stopThemeWatcher();
|
|
617
|
+
if (process.stdout.writableLength > 0) {
|
|
618
|
+
await new Promise((resolve) => process.stdout.once("drain", resolve));
|
|
619
|
+
}
|
|
620
|
+
process.exit(0);
|
|
621
|
+
}
|
|
622
|
+
}
|
|
623
|
+
//# sourceMappingURL=main.js.map
|