@imdigitalashish/zpi 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +2801 -0
- package/README.md +95 -0
- package/dist/cli/args.d.ts +47 -0
- package/dist/cli/args.d.ts.map +1 -0
- package/dist/cli/args.js +293 -0
- package/dist/cli/args.js.map +1 -0
- package/dist/cli/config-selector.d.ts +14 -0
- package/dist/cli/config-selector.d.ts.map +1 -0
- package/dist/cli/config-selector.js +31 -0
- package/dist/cli/config-selector.js.map +1 -0
- package/dist/cli/file-processor.d.ts +15 -0
- package/dist/cli/file-processor.d.ts.map +1 -0
- package/dist/cli/file-processor.js +79 -0
- package/dist/cli/file-processor.js.map +1 -0
- package/dist/cli/list-models.d.ts +9 -0
- package/dist/cli/list-models.d.ts.map +1 -0
- package/dist/cli/list-models.js +92 -0
- package/dist/cli/list-models.js.map +1 -0
- package/dist/cli/session-picker.d.ts +9 -0
- package/dist/cli/session-picker.d.ts.map +1 -0
- package/dist/cli/session-picker.js +34 -0
- package/dist/cli/session-picker.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +11 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +68 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +203 -0
- package/dist/config.js.map +1 -0
- package/dist/core/agent-session.d.ts +571 -0
- package/dist/core/agent-session.d.ts.map +1 -0
- package/dist/core/agent-session.js +2353 -0
- package/dist/core/agent-session.js.map +1 -0
- package/dist/core/auth-storage.d.ts +129 -0
- package/dist/core/auth-storage.d.ts.map +1 -0
- package/dist/core/auth-storage.js +394 -0
- package/dist/core/auth-storage.js.map +1 -0
- package/dist/core/bash-executor.d.ts +47 -0
- package/dist/core/bash-executor.d.ts.map +1 -0
- package/dist/core/bash-executor.js +212 -0
- package/dist/core/bash-executor.js.map +1 -0
- package/dist/core/compaction/branch-summarization.d.ts +86 -0
- package/dist/core/compaction/branch-summarization.d.ts.map +1 -0
- package/dist/core/compaction/branch-summarization.js +242 -0
- package/dist/core/compaction/branch-summarization.js.map +1 -0
- package/dist/core/compaction/compaction.d.ts +121 -0
- package/dist/core/compaction/compaction.d.ts.map +1 -0
- package/dist/core/compaction/compaction.js +607 -0
- package/dist/core/compaction/compaction.js.map +1 -0
- package/dist/core/compaction/index.d.ts +7 -0
- package/dist/core/compaction/index.d.ts.map +1 -0
- package/dist/core/compaction/index.js +7 -0
- package/dist/core/compaction/index.js.map +1 -0
- package/dist/core/compaction/utils.d.ts +35 -0
- package/dist/core/compaction/utils.d.ts.map +1 -0
- package/dist/core/compaction/utils.js +138 -0
- package/dist/core/compaction/utils.js.map +1 -0
- package/dist/core/defaults.d.ts +3 -0
- package/dist/core/defaults.d.ts.map +1 -0
- package/dist/core/defaults.js +2 -0
- package/dist/core/defaults.js.map +1 -0
- package/dist/core/diagnostics.d.ts +15 -0
- package/dist/core/diagnostics.d.ts.map +1 -0
- package/dist/core/diagnostics.js +2 -0
- package/dist/core/diagnostics.js.map +1 -0
- package/dist/core/event-bus.d.ts +9 -0
- package/dist/core/event-bus.d.ts.map +1 -0
- package/dist/core/event-bus.js +25 -0
- package/dist/core/event-bus.js.map +1 -0
- package/dist/core/exec.d.ts +29 -0
- package/dist/core/exec.d.ts.map +1 -0
- package/dist/core/exec.js +71 -0
- package/dist/core/exec.js.map +1 -0
- package/dist/core/export-html/ansi-to-html.d.ts +22 -0
- package/dist/core/export-html/ansi-to-html.d.ts.map +1 -0
- package/dist/core/export-html/ansi-to-html.js +249 -0
- package/dist/core/export-html/ansi-to-html.js.map +1 -0
- package/dist/core/export-html/index.d.ts +34 -0
- package/dist/core/export-html/index.d.ts.map +1 -0
- package/dist/core/export-html/index.js +222 -0
- package/dist/core/export-html/index.js.map +1 -0
- package/dist/core/export-html/template.css +971 -0
- package/dist/core/export-html/template.html +54 -0
- package/dist/core/export-html/template.js +1586 -0
- package/dist/core/export-html/tool-renderer.d.ts +35 -0
- package/dist/core/export-html/tool-renderer.d.ts.map +1 -0
- package/dist/core/export-html/tool-renderer.js +57 -0
- package/dist/core/export-html/tool-renderer.js.map +1 -0
- package/dist/core/export-html/vendor/highlight.min.js +1213 -0
- package/dist/core/export-html/vendor/marked.min.js +6 -0
- package/dist/core/extensions/index.d.ts +11 -0
- package/dist/core/extensions/index.d.ts.map +1 -0
- package/dist/core/extensions/index.js +9 -0
- package/dist/core/extensions/index.js.map +1 -0
- package/dist/core/extensions/loader.d.ts +25 -0
- package/dist/core/extensions/loader.d.ts.map +1 -0
- package/dist/core/extensions/loader.js +402 -0
- package/dist/core/extensions/loader.js.map +1 -0
- package/dist/core/extensions/runner.d.ts +146 -0
- package/dist/core/extensions/runner.d.ts.map +1 -0
- package/dist/core/extensions/runner.js +626 -0
- package/dist/core/extensions/runner.js.map +1 -0
- package/dist/core/extensions/types.d.ts +984 -0
- package/dist/core/extensions/types.d.ts.map +1 -0
- package/dist/core/extensions/types.js +35 -0
- package/dist/core/extensions/types.js.map +1 -0
- package/dist/core/extensions/wrapper.d.ts +27 -0
- package/dist/core/extensions/wrapper.d.ts.map +1 -0
- package/dist/core/extensions/wrapper.js +102 -0
- package/dist/core/extensions/wrapper.js.map +1 -0
- package/dist/core/footer-data-provider.d.ts +32 -0
- package/dist/core/footer-data-provider.d.ts.map +1 -0
- package/dist/core/footer-data-provider.js +134 -0
- package/dist/core/footer-data-provider.js.map +1 -0
- package/dist/core/index.d.ts +9 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +9 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/keybindings.d.ts +55 -0
- package/dist/core/keybindings.d.ts.map +1 -0
- package/dist/core/keybindings.js +153 -0
- package/dist/core/keybindings.js.map +1 -0
- package/dist/core/memory.d.ts +64 -0
- package/dist/core/memory.d.ts.map +1 -0
- package/dist/core/memory.js +247 -0
- package/dist/core/memory.js.map +1 -0
- package/dist/core/messages.d.ts +77 -0
- package/dist/core/messages.d.ts.map +1 -0
- package/dist/core/messages.js +149 -0
- package/dist/core/messages.js.map +1 -0
- package/dist/core/model-registry.d.ts +102 -0
- package/dist/core/model-registry.d.ts.map +1 -0
- package/dist/core/model-registry.js +515 -0
- package/dist/core/model-registry.js.map +1 -0
- package/dist/core/model-resolver.d.ts +104 -0
- package/dist/core/model-resolver.d.ts.map +1 -0
- package/dist/core/model-resolver.js +403 -0
- package/dist/core/model-resolver.js.map +1 -0
- package/dist/core/package-manager.d.ts +151 -0
- package/dist/core/package-manager.d.ts.map +1 -0
- package/dist/core/package-manager.js +1426 -0
- package/dist/core/package-manager.js.map +1 -0
- package/dist/core/prompt-templates.d.ts +50 -0
- package/dist/core/prompt-templates.d.ts.map +1 -0
- package/dist/core/prompt-templates.js +251 -0
- package/dist/core/prompt-templates.js.map +1 -0
- package/dist/core/resolve-config-value.d.ts +17 -0
- package/dist/core/resolve-config-value.d.ts.map +1 -0
- package/dist/core/resolve-config-value.js +59 -0
- package/dist/core/resolve-config-value.js.map +1 -0
- package/dist/core/resource-loader.d.ts +184 -0
- package/dist/core/resource-loader.d.ts.map +1 -0
- package/dist/core/resource-loader.js +673 -0
- package/dist/core/resource-loader.js.map +1 -0
- package/dist/core/sdk.d.ts +90 -0
- package/dist/core/sdk.d.ts.map +1 -0
- package/dist/core/sdk.js +238 -0
- package/dist/core/sdk.js.map +1 -0
- package/dist/core/session-manager.d.ts +323 -0
- package/dist/core/session-manager.d.ts.map +1 -0
- package/dist/core/session-manager.js +1091 -0
- package/dist/core/session-manager.js.map +1 -0
- package/dist/core/settings-manager.d.ts +230 -0
- package/dist/core/settings-manager.d.ts.map +1 -0
- package/dist/core/settings-manager.js +656 -0
- package/dist/core/settings-manager.js.map +1 -0
- package/dist/core/skills.d.ts +58 -0
- package/dist/core/skills.d.ts.map +1 -0
- package/dist/core/skills.js +364 -0
- package/dist/core/skills.js.map +1 -0
- package/dist/core/slash-commands.d.ts +15 -0
- package/dist/core/slash-commands.d.ts.map +1 -0
- package/dist/core/slash-commands.js +23 -0
- package/dist/core/slash-commands.js.map +1 -0
- package/dist/core/system-prompt.d.ts +26 -0
- package/dist/core/system-prompt.d.ts.map +1 -0
- package/dist/core/system-prompt.js +150 -0
- package/dist/core/system-prompt.js.map +1 -0
- package/dist/core/timings.d.ts +7 -0
- package/dist/core/timings.d.ts.map +1 -0
- package/dist/core/timings.js +25 -0
- package/dist/core/timings.js.map +1 -0
- package/dist/core/tools/bash.d.ts +55 -0
- package/dist/core/tools/bash.d.ts.map +1 -0
- package/dist/core/tools/bash.js +242 -0
- package/dist/core/tools/bash.js.map +1 -0
- package/dist/core/tools/edit-diff.d.ts +63 -0
- package/dist/core/tools/edit-diff.d.ts.map +1 -0
- package/dist/core/tools/edit-diff.js +243 -0
- package/dist/core/tools/edit-diff.js.map +1 -0
- package/dist/core/tools/edit.d.ts +39 -0
- package/dist/core/tools/edit.d.ts.map +1 -0
- package/dist/core/tools/edit.js +146 -0
- package/dist/core/tools/edit.js.map +1 -0
- package/dist/core/tools/find.d.ts +39 -0
- package/dist/core/tools/find.d.ts.map +1 -0
- package/dist/core/tools/find.js +206 -0
- package/dist/core/tools/find.js.map +1 -0
- package/dist/core/tools/grep.d.ts +45 -0
- package/dist/core/tools/grep.d.ts.map +1 -0
- package/dist/core/tools/grep.js +239 -0
- package/dist/core/tools/grep.js.map +1 -0
- package/dist/core/tools/index.d.ts +102 -0
- package/dist/core/tools/index.d.ts.map +1 -0
- package/dist/core/tools/index.js +71 -0
- package/dist/core/tools/index.js.map +1 -0
- package/dist/core/tools/ls.d.ts +40 -0
- package/dist/core/tools/ls.d.ts.map +1 -0
- package/dist/core/tools/ls.js +118 -0
- package/dist/core/tools/ls.js.map +1 -0
- package/dist/core/tools/memory.d.ts +45 -0
- package/dist/core/tools/memory.d.ts.map +1 -0
- package/dist/core/tools/memory.js +346 -0
- package/dist/core/tools/memory.js.map +1 -0
- package/dist/core/tools/path-utils.d.ts +8 -0
- package/dist/core/tools/path-utils.d.ts.map +1 -0
- package/dist/core/tools/path-utils.js +81 -0
- package/dist/core/tools/path-utils.js.map +1 -0
- package/dist/core/tools/read.d.ts +39 -0
- package/dist/core/tools/read.d.ts.map +1 -0
- package/dist/core/tools/read.js +166 -0
- package/dist/core/tools/read.js.map +1 -0
- package/dist/core/tools/truncate.d.ts +70 -0
- package/dist/core/tools/truncate.d.ts.map +1 -0
- package/dist/core/tools/truncate.js +205 -0
- package/dist/core/tools/truncate.js.map +1 -0
- package/dist/core/tools/write.d.ts +29 -0
- package/dist/core/tools/write.d.ts.map +1 -0
- package/dist/core/tools/write.js +78 -0
- package/dist/core/tools/write.js.map +1 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +43 -0
- package/dist/index.js.map +1 -0
- package/dist/main.d.ts +8 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +651 -0
- package/dist/main.js.map +1 -0
- package/dist/migrations.d.ts +33 -0
- package/dist/migrations.d.ts.map +1 -0
- package/dist/migrations.js +261 -0
- package/dist/migrations.js.map +1 -0
- package/dist/modes/index.d.ts +9 -0
- package/dist/modes/index.d.ts.map +1 -0
- package/dist/modes/index.js +8 -0
- package/dist/modes/index.js.map +1 -0
- package/dist/modes/interactive/components/armin.d.ts +34 -0
- package/dist/modes/interactive/components/armin.d.ts.map +1 -0
- package/dist/modes/interactive/components/armin.js +333 -0
- package/dist/modes/interactive/components/armin.js.map +1 -0
- package/dist/modes/interactive/components/assistant-message.d.ts +16 -0
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/assistant-message.js +96 -0
- package/dist/modes/interactive/components/assistant-message.js.map +1 -0
- package/dist/modes/interactive/components/bash-execution.d.ts +35 -0
- package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -0
- package/dist/modes/interactive/components/bash-execution.js +162 -0
- package/dist/modes/interactive/components/bash-execution.js.map +1 -0
- package/dist/modes/interactive/components/bordered-loader.d.ts +16 -0
- package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -0
- package/dist/modes/interactive/components/bordered-loader.js +51 -0
- package/dist/modes/interactive/components/bordered-loader.js.map +1 -0
- package/dist/modes/interactive/components/branch-summary-message.d.ts +16 -0
- package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/branch-summary-message.js +44 -0
- package/dist/modes/interactive/components/branch-summary-message.js.map +1 -0
- package/dist/modes/interactive/components/compaction-summary-message.d.ts +16 -0
- package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/compaction-summary-message.js +45 -0
- package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -0
- package/dist/modes/interactive/components/config-selector.d.ts +71 -0
- package/dist/modes/interactive/components/config-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/config-selector.js +479 -0
- package/dist/modes/interactive/components/config-selector.js.map +1 -0
- package/dist/modes/interactive/components/countdown-timer.d.ts +14 -0
- package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -0
- package/dist/modes/interactive/components/countdown-timer.js +33 -0
- package/dist/modes/interactive/components/countdown-timer.js.map +1 -0
- package/dist/modes/interactive/components/custom-editor.d.ts +21 -0
- package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -0
- package/dist/modes/interactive/components/custom-editor.js +70 -0
- package/dist/modes/interactive/components/custom-editor.js.map +1 -0
- package/dist/modes/interactive/components/custom-message.d.ts +20 -0
- package/dist/modes/interactive/components/custom-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/custom-message.js +79 -0
- package/dist/modes/interactive/components/custom-message.js.map +1 -0
- package/dist/modes/interactive/components/daxnuts.d.ts +23 -0
- package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -0
- package/dist/modes/interactive/components/daxnuts.js +140 -0
- package/dist/modes/interactive/components/daxnuts.js.map +1 -0
- package/dist/modes/interactive/components/diff.d.ts +12 -0
- package/dist/modes/interactive/components/diff.d.ts.map +1 -0
- package/dist/modes/interactive/components/diff.js +133 -0
- package/dist/modes/interactive/components/diff.js.map +1 -0
- package/dist/modes/interactive/components/dynamic-border.d.ts +15 -0
- package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -0
- package/dist/modes/interactive/components/dynamic-border.js +21 -0
- package/dist/modes/interactive/components/dynamic-border.js.map +1 -0
- package/dist/modes/interactive/components/extension-editor.d.ts +17 -0
- package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -0
- package/dist/modes/interactive/components/extension-editor.js +102 -0
- package/dist/modes/interactive/components/extension-editor.js.map +1 -0
- package/dist/modes/interactive/components/extension-input.d.ts +23 -0
- package/dist/modes/interactive/components/extension-input.d.ts.map +1 -0
- package/dist/modes/interactive/components/extension-input.js +61 -0
- package/dist/modes/interactive/components/extension-input.js.map +1 -0
- package/dist/modes/interactive/components/extension-selector.d.ts +24 -0
- package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/extension-selector.js +78 -0
- package/dist/modes/interactive/components/extension-selector.js.map +1 -0
- package/dist/modes/interactive/components/footer.d.ts +26 -0
- package/dist/modes/interactive/components/footer.d.ts.map +1 -0
- package/dist/modes/interactive/components/footer.js +213 -0
- package/dist/modes/interactive/components/footer.js.map +1 -0
- package/dist/modes/interactive/components/index.d.ts +32 -0
- package/dist/modes/interactive/components/index.d.ts.map +1 -0
- package/dist/modes/interactive/components/index.js +33 -0
- package/dist/modes/interactive/components/index.js.map +1 -0
- package/dist/modes/interactive/components/keybinding-hints.d.ts +41 -0
- package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -0
- package/dist/modes/interactive/components/keybinding-hints.js +61 -0
- package/dist/modes/interactive/components/keybinding-hints.js.map +1 -0
- package/dist/modes/interactive/components/login-dialog.d.ts +42 -0
- package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -0
- package/dist/modes/interactive/components/login-dialog.js +145 -0
- package/dist/modes/interactive/components/login-dialog.js.map +1 -0
- package/dist/modes/interactive/components/model-selector.d.ts +47 -0
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/model-selector.js +271 -0
- package/dist/modes/interactive/components/model-selector.js.map +1 -0
- package/dist/modes/interactive/components/oauth-selector.d.ts +19 -0
- package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/oauth-selector.js +97 -0
- package/dist/modes/interactive/components/oauth-selector.js.map +1 -0
- package/dist/modes/interactive/components/scoped-models-selector.d.ts +49 -0
- package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/scoped-models-selector.js +275 -0
- package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -0
- package/dist/modes/interactive/components/session-selector-search.d.ts +23 -0
- package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -0
- package/dist/modes/interactive/components/session-selector-search.js +155 -0
- package/dist/modes/interactive/components/session-selector-search.js.map +1 -0
- package/dist/modes/interactive/components/session-selector.d.ts +95 -0
- package/dist/modes/interactive/components/session-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/session-selector.js +851 -0
- package/dist/modes/interactive/components/session-selector.js.map +1 -0
- package/dist/modes/interactive/components/settings-selector.d.ts +58 -0
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/settings-selector.js +299 -0
- package/dist/modes/interactive/components/settings-selector.js.map +1 -0
- package/dist/modes/interactive/components/show-images-selector.d.ts +10 -0
- package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/show-images-selector.js +35 -0
- package/dist/modes/interactive/components/show-images-selector.js.map +1 -0
- package/dist/modes/interactive/components/skill-invocation-message.d.ts +17 -0
- package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/skill-invocation-message.js +47 -0
- package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -0
- package/dist/modes/interactive/components/theme-selector.d.ts +11 -0
- package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/theme-selector.js +46 -0
- package/dist/modes/interactive/components/theme-selector.js.map +1 -0
- package/dist/modes/interactive/components/thinking-selector.d.ts +11 -0
- package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/thinking-selector.js +47 -0
- package/dist/modes/interactive/components/thinking-selector.js.map +1 -0
- package/dist/modes/interactive/components/tool-execution.d.ts +70 -0
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -0
- package/dist/modes/interactive/components/tool-execution.js +636 -0
- package/dist/modes/interactive/components/tool-execution.js.map +1 -0
- package/dist/modes/interactive/components/tree-selector.d.ts +68 -0
- package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/tree-selector.js +934 -0
- package/dist/modes/interactive/components/tree-selector.js.map +1 -0
- package/dist/modes/interactive/components/user-message-selector.d.ts +30 -0
- package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/user-message-selector.js +113 -0
- package/dist/modes/interactive/components/user-message-selector.js.map +1 -0
- package/dist/modes/interactive/components/user-message.d.ts +8 -0
- package/dist/modes/interactive/components/user-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/user-message.js +16 -0
- package/dist/modes/interactive/components/user-message.js.map +1 -0
- package/dist/modes/interactive/components/visual-truncate.d.ts +24 -0
- package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -0
- package/dist/modes/interactive/components/visual-truncate.js +33 -0
- package/dist/modes/interactive/components/visual-truncate.js.map +1 -0
- package/dist/modes/interactive/interactive-mode.d.ts +316 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-mode.js +3848 -0
- package/dist/modes/interactive/interactive-mode.js.map +1 -0
- package/dist/modes/interactive/theme/dark.json +85 -0
- package/dist/modes/interactive/theme/light.json +84 -0
- package/dist/modes/interactive/theme/theme-schema.json +335 -0
- package/dist/modes/interactive/theme/theme.d.ts +78 -0
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -0
- package/dist/modes/interactive/theme/theme.js +944 -0
- package/dist/modes/interactive/theme/theme.js.map +1 -0
- package/dist/modes/print-mode.d.ts +28 -0
- package/dist/modes/print-mode.d.ts.map +1 -0
- package/dist/modes/print-mode.js +101 -0
- package/dist/modes/print-mode.js.map +1 -0
- package/dist/modes/rpc/rpc-client.d.ts +217 -0
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -0
- package/dist/modes/rpc/rpc-client.js +405 -0
- package/dist/modes/rpc/rpc-client.js.map +1 -0
- package/dist/modes/rpc/rpc-mode.d.ts +20 -0
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -0
- package/dist/modes/rpc/rpc-mode.js +511 -0
- package/dist/modes/rpc/rpc-mode.js.map +1 -0
- package/dist/modes/rpc/rpc-types.d.ts +409 -0
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -0
- package/dist/modes/rpc/rpc-types.js +8 -0
- package/dist/modes/rpc/rpc-types.js.map +1 -0
- package/dist/utils/changelog.d.ts +21 -0
- package/dist/utils/changelog.d.ts.map +1 -0
- package/dist/utils/changelog.js +87 -0
- package/dist/utils/changelog.js.map +1 -0
- package/dist/utils/clipboard-image.d.ts +11 -0
- package/dist/utils/clipboard-image.d.ts.map +1 -0
- package/dist/utils/clipboard-image.js +162 -0
- package/dist/utils/clipboard-image.js.map +1 -0
- package/dist/utils/clipboard-native.d.ts +7 -0
- package/dist/utils/clipboard-native.d.ts.map +1 -0
- package/dist/utils/clipboard-native.js +14 -0
- package/dist/utils/clipboard-native.js.map +1 -0
- package/dist/utils/clipboard.d.ts +2 -0
- package/dist/utils/clipboard.d.ts.map +1 -0
- package/dist/utils/clipboard.js +67 -0
- package/dist/utils/clipboard.js.map +1 -0
- package/dist/utils/frontmatter.d.ts +8 -0
- package/dist/utils/frontmatter.d.ts.map +1 -0
- package/dist/utils/frontmatter.js +26 -0
- package/dist/utils/frontmatter.js.map +1 -0
- package/dist/utils/git.d.ts +26 -0
- package/dist/utils/git.d.ts.map +1 -0
- package/dist/utils/git.js +163 -0
- package/dist/utils/git.js.map +1 -0
- package/dist/utils/image-convert.d.ts +9 -0
- package/dist/utils/image-convert.d.ts.map +1 -0
- package/dist/utils/image-convert.js +35 -0
- package/dist/utils/image-convert.js.map +1 -0
- package/dist/utils/image-resize.d.ts +36 -0
- package/dist/utils/image-resize.d.ts.map +1 -0
- package/dist/utils/image-resize.js +181 -0
- package/dist/utils/image-resize.js.map +1 -0
- package/dist/utils/mime.d.ts +2 -0
- package/dist/utils/mime.d.ts.map +1 -0
- package/dist/utils/mime.js +26 -0
- package/dist/utils/mime.js.map +1 -0
- package/dist/utils/photon.d.ts +21 -0
- package/dist/utils/photon.d.ts.map +1 -0
- package/dist/utils/photon.js +121 -0
- package/dist/utils/photon.js.map +1 -0
- package/dist/utils/shell.d.ts +26 -0
- package/dist/utils/shell.d.ts.map +1 -0
- package/dist/utils/shell.js +186 -0
- package/dist/utils/shell.js.map +1 -0
- package/dist/utils/sleep.d.ts +5 -0
- package/dist/utils/sleep.d.ts.map +1 -0
- package/dist/utils/sleep.js +17 -0
- package/dist/utils/sleep.js.map +1 -0
- package/dist/utils/tools-manager.d.ts +3 -0
- package/dist/utils/tools-manager.d.ts.map +1 -0
- package/dist/utils/tools-manager.js +207 -0
- package/dist/utils/tools-manager.js.map +1 -0
- package/docs/compaction.md +390 -0
- package/docs/custom-provider.md +548 -0
- package/docs/development.md +69 -0
- package/docs/extensions.md +1935 -0
- package/docs/images/doom-extension.png +0 -0
- package/docs/images/exy.png +0 -0
- package/docs/images/interactive-mode.png +0 -0
- package/docs/images/tree-view.png +0 -0
- package/docs/json.md +79 -0
- package/docs/keybindings.md +174 -0
- package/docs/models.md +293 -0
- package/docs/packages.md +209 -0
- package/docs/prompt-templates.md +67 -0
- package/docs/providers.md +186 -0
- package/docs/rpc.md +1317 -0
- package/docs/sdk.md +968 -0
- package/docs/session.md +412 -0
- package/docs/settings.md +223 -0
- package/docs/shell-aliases.md +13 -0
- package/docs/skills.md +231 -0
- package/docs/terminal-setup.md +70 -0
- package/docs/termux.md +127 -0
- package/docs/themes.md +295 -0
- package/docs/tree.md +219 -0
- package/docs/tui.md +887 -0
- package/docs/windows.md +17 -0
- package/examples/README.md +25 -0
- package/examples/extensions/README.md +203 -0
- package/examples/extensions/antigravity-image-gen.ts +413 -0
- package/examples/extensions/auto-commit-on-exit.ts +49 -0
- package/examples/extensions/bash-spawn-hook.ts +30 -0
- package/examples/extensions/bookmark.ts +50 -0
- package/examples/extensions/claude-rules.ts +86 -0
- package/examples/extensions/commands.ts +72 -0
- package/examples/extensions/confirm-destructive.ts +59 -0
- package/examples/extensions/custom-compaction.ts +114 -0
- package/examples/extensions/custom-footer.ts +64 -0
- package/examples/extensions/custom-header.ts +73 -0
- package/examples/extensions/custom-provider-anthropic/index.ts +604 -0
- package/examples/extensions/custom-provider-anthropic/package-lock.json +24 -0
- package/examples/extensions/custom-provider-anthropic/package.json +19 -0
- package/examples/extensions/custom-provider-gitlab-duo/index.ts +349 -0
- package/examples/extensions/custom-provider-gitlab-duo/package.json +16 -0
- package/examples/extensions/custom-provider-gitlab-duo/test.ts +82 -0
- package/examples/extensions/custom-provider-qwen-cli/index.ts +345 -0
- package/examples/extensions/custom-provider-qwen-cli/package.json +16 -0
- package/examples/extensions/dirty-repo-guard.ts +56 -0
- package/examples/extensions/doom-overlay/README.md +46 -0
- package/examples/extensions/doom-overlay/doom/build/doom.js +21 -0
- package/examples/extensions/doom-overlay/doom/build/doom.wasm +0 -0
- package/examples/extensions/doom-overlay/doom/build.sh +152 -0
- package/examples/extensions/doom-overlay/doom/doomgeneric_pi.c +72 -0
- package/examples/extensions/doom-overlay/doom-component.ts +132 -0
- package/examples/extensions/doom-overlay/doom-engine.ts +173 -0
- package/examples/extensions/doom-overlay/doom-keys.ts +104 -0
- package/examples/extensions/doom-overlay/index.ts +74 -0
- package/examples/extensions/doom-overlay/wad-finder.ts +51 -0
- package/examples/extensions/dynamic-resources/SKILL.md +8 -0
- package/examples/extensions/dynamic-resources/dynamic.json +79 -0
- package/examples/extensions/dynamic-resources/dynamic.md +5 -0
- package/examples/extensions/dynamic-resources/index.ts +15 -0
- package/examples/extensions/event-bus.ts +43 -0
- package/examples/extensions/file-trigger.ts +41 -0
- package/examples/extensions/git-checkpoint.ts +53 -0
- package/examples/extensions/handoff.ts +150 -0
- package/examples/extensions/hello.ts +25 -0
- package/examples/extensions/inline-bash.ts +94 -0
- package/examples/extensions/input-transform.ts +43 -0
- package/examples/extensions/interactive-shell.ts +196 -0
- package/examples/extensions/mac-system-theme.ts +47 -0
- package/examples/extensions/message-renderer.ts +59 -0
- package/examples/extensions/minimal-mode.ts +426 -0
- package/examples/extensions/modal-editor.ts +85 -0
- package/examples/extensions/model-status.ts +31 -0
- package/examples/extensions/notify.ts +55 -0
- package/examples/extensions/overlay-qa-tests.ts +881 -0
- package/examples/extensions/overlay-test.ts +150 -0
- package/examples/extensions/permission-gate.ts +34 -0
- package/examples/extensions/pirate.ts +47 -0
- package/examples/extensions/plan-mode/README.md +65 -0
- package/examples/extensions/plan-mode/index.ts +340 -0
- package/examples/extensions/plan-mode/utils.ts +168 -0
- package/examples/extensions/preset.ts +398 -0
- package/examples/extensions/protected-paths.ts +30 -0
- package/examples/extensions/qna.ts +119 -0
- package/examples/extensions/question.ts +264 -0
- package/examples/extensions/questionnaire.ts +427 -0
- package/examples/extensions/rainbow-editor.ts +88 -0
- package/examples/extensions/reload-runtime.ts +37 -0
- package/examples/extensions/rpc-demo.ts +124 -0
- package/examples/extensions/sandbox/index.ts +318 -0
- package/examples/extensions/sandbox/package-lock.json +92 -0
- package/examples/extensions/sandbox/package.json +19 -0
- package/examples/extensions/send-user-message.ts +97 -0
- package/examples/extensions/session-name.ts +27 -0
- package/examples/extensions/shutdown-command.ts +63 -0
- package/examples/extensions/snake.ts +343 -0
- package/examples/extensions/space-invaders.ts +560 -0
- package/examples/extensions/ssh.ts +220 -0
- package/examples/extensions/status-line.ts +40 -0
- package/examples/extensions/subagent/README.md +172 -0
- package/examples/extensions/subagent/agents/planner.md +37 -0
- package/examples/extensions/subagent/agents/reviewer.md +35 -0
- package/examples/extensions/subagent/agents/scout.md +50 -0
- package/examples/extensions/subagent/agents/worker.md +24 -0
- package/examples/extensions/subagent/agents.ts +127 -0
- package/examples/extensions/subagent/index.ts +964 -0
- package/examples/extensions/subagent/prompts/implement-and-review.md +10 -0
- package/examples/extensions/subagent/prompts/implement.md +10 -0
- package/examples/extensions/subagent/prompts/scout-and-plan.md +9 -0
- package/examples/extensions/summarize.ts +195 -0
- package/examples/extensions/system-prompt-header.ts +17 -0
- package/examples/extensions/timed-confirm.ts +70 -0
- package/examples/extensions/titlebar-spinner.ts +58 -0
- package/examples/extensions/todo.ts +299 -0
- package/examples/extensions/tool-override.ts +143 -0
- package/examples/extensions/tools.ts +146 -0
- package/examples/extensions/trigger-compact.ts +40 -0
- package/examples/extensions/truncated-tool.ts +192 -0
- package/examples/extensions/widget-placement.ts +17 -0
- package/examples/extensions/with-deps/index.ts +36 -0
- package/examples/extensions/with-deps/package-lock.json +31 -0
- package/examples/extensions/with-deps/package.json +22 -0
- package/examples/rpc-extension-ui.ts +632 -0
- package/examples/sdk/01-minimal.ts +22 -0
- package/examples/sdk/02-custom-model.ts +49 -0
- package/examples/sdk/03-custom-prompt.ts +55 -0
- package/examples/sdk/04-skills.ts +46 -0
- package/examples/sdk/05-tools.ts +56 -0
- package/examples/sdk/06-extensions.ts +88 -0
- package/examples/sdk/07-context-files.ts +40 -0
- package/examples/sdk/08-prompt-templates.ts +47 -0
- package/examples/sdk/09-api-keys-and-oauth.ts +48 -0
- package/examples/sdk/10-settings.ts +51 -0
- package/examples/sdk/11-sessions.ts +48 -0
- package/examples/sdk/12-full-control.ts +82 -0
- package/examples/sdk/README.md +144 -0
- package/package.json +96 -0
package/README.md
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# zpi - Memory-Augmented Coding Agent
|
|
2
|
+
|
|
3
|
+
A terminal coding agent with persistent long-term memory that learns from your interactions across sessions.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install -g @imdigitalashish/zpi
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Setup
|
|
12
|
+
|
|
13
|
+
Authenticate with an API key:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
export ANTHROPIC_API_KEY=sk-ant-...
|
|
17
|
+
zpi
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Or use your existing subscription:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
zpi
|
|
24
|
+
/login # Then select provider
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Features
|
|
28
|
+
|
|
29
|
+
- **Persistent Memory System** — procedural, episodic, and semantic memories stored per-project in `.pi/memory/`
|
|
30
|
+
- **Automatic Learning** — the agent detects preferences, workflows, and facts from conversations and saves them automatically
|
|
31
|
+
- **Timestamp Awareness** — the LLM sees when each message was sent and can detect time gaps
|
|
32
|
+
- **Toggle On/Off** — memory system is on by default, disable via `/settings`
|
|
33
|
+
|
|
34
|
+
## Memory System
|
|
35
|
+
|
|
36
|
+
Memories are stored per-project in `.pi/memory/`:
|
|
37
|
+
|
|
38
|
+
| Type | File | What it stores |
|
|
39
|
+
|------|------|----------------|
|
|
40
|
+
| Procedural | `procedural.json` | Multi-step workflows the user teaches |
|
|
41
|
+
| Episodic | `episodic.json` | Session summaries, mistakes, lessons |
|
|
42
|
+
| Semantic | `semantic.json` | Preferences, rules, facts, conventions |
|
|
43
|
+
|
|
44
|
+
### Memory Tools (used by the LLM automatically)
|
|
45
|
+
|
|
46
|
+
- `memory_write` — save a new memory
|
|
47
|
+
- `memory_read` — recall memories by type, ID, or search
|
|
48
|
+
- `memory_update` — update an existing memory
|
|
49
|
+
- `memory_delete` — remove a memory
|
|
50
|
+
|
|
51
|
+
### Memory Commands
|
|
52
|
+
|
|
53
|
+
- `/memory` or `/memory list` — show all memories
|
|
54
|
+
- `/memory show <id>` — show a specific memory
|
|
55
|
+
- `/memory search <query>` — search memories
|
|
56
|
+
- `/memory delete <id>` — delete a memory
|
|
57
|
+
- `/memory compact` — deduplicate and consolidate memories
|
|
58
|
+
|
|
59
|
+
## Supported Providers
|
|
60
|
+
|
|
61
|
+
| Provider | Auth |
|
|
62
|
+
|----------|------|
|
|
63
|
+
| Anthropic | `ANTHROPIC_API_KEY` or `/login anthropic` |
|
|
64
|
+
| OpenAI | `OPENAI_API_KEY` |
|
|
65
|
+
| Google Gemini | `GOOGLE_GENERATIVE_AI_API_KEY` or `/login google` |
|
|
66
|
+
| AWS Bedrock | `AWS_ACCESS_KEY_ID` + `AWS_SECRET_ACCESS_KEY` |
|
|
67
|
+
| Azure OpenAI | `AZURE_OPENAI_API_KEY` + `AZURE_OPENAI_ENDPOINT` |
|
|
68
|
+
| GitHub Copilot | `/login copilot` |
|
|
69
|
+
| OpenAI-compatible | `OPENAI_API_KEY` + `OPENAI_BASE_URL` |
|
|
70
|
+
|
|
71
|
+
## Commands
|
|
72
|
+
|
|
73
|
+
| Command | Description |
|
|
74
|
+
|---------|-------------|
|
|
75
|
+
| `/model` | Switch model |
|
|
76
|
+
| `/login` | Authenticate with a provider |
|
|
77
|
+
| `/settings` | Toggle memory, theme, etc. |
|
|
78
|
+
| `/memory` | View/manage memories |
|
|
79
|
+
| `/sessions` | Browse sessions |
|
|
80
|
+
| `/compact` | Compact conversation |
|
|
81
|
+
| `/help` | Show all commands |
|
|
82
|
+
|
|
83
|
+
## Settings
|
|
84
|
+
|
|
85
|
+
Toggle memory system on/off:
|
|
86
|
+
- Use `/settings` in the TUI
|
|
87
|
+
- Or edit `.pi/settings.json`: `{ "memory": { "enabled": false } }`
|
|
88
|
+
|
|
89
|
+
## Author
|
|
90
|
+
|
|
91
|
+
[imdigitalashish](https://github.com/imdigitalashish)
|
|
92
|
+
|
|
93
|
+
## License
|
|
94
|
+
|
|
95
|
+
MIT
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI argument parsing and help display
|
|
3
|
+
*/
|
|
4
|
+
import type { ThinkingLevel } from "@mariozechner/pi-agent-core";
|
|
5
|
+
import { type ToolName } from "../core/tools/index.js";
|
|
6
|
+
export type Mode = "text" | "json" | "rpc";
|
|
7
|
+
export interface Args {
|
|
8
|
+
provider?: string;
|
|
9
|
+
model?: string;
|
|
10
|
+
apiKey?: string;
|
|
11
|
+
systemPrompt?: string;
|
|
12
|
+
appendSystemPrompt?: string;
|
|
13
|
+
thinking?: ThinkingLevel;
|
|
14
|
+
continue?: boolean;
|
|
15
|
+
resume?: boolean;
|
|
16
|
+
help?: boolean;
|
|
17
|
+
version?: boolean;
|
|
18
|
+
mode?: Mode;
|
|
19
|
+
noSession?: boolean;
|
|
20
|
+
session?: string;
|
|
21
|
+
sessionDir?: string;
|
|
22
|
+
models?: string[];
|
|
23
|
+
tools?: ToolName[];
|
|
24
|
+
noTools?: boolean;
|
|
25
|
+
extensions?: string[];
|
|
26
|
+
noExtensions?: boolean;
|
|
27
|
+
print?: boolean;
|
|
28
|
+
export?: string;
|
|
29
|
+
noSkills?: boolean;
|
|
30
|
+
skills?: string[];
|
|
31
|
+
promptTemplates?: string[];
|
|
32
|
+
noPromptTemplates?: boolean;
|
|
33
|
+
themes?: string[];
|
|
34
|
+
noThemes?: boolean;
|
|
35
|
+
listModels?: string | true;
|
|
36
|
+
verbose?: boolean;
|
|
37
|
+
messages: string[];
|
|
38
|
+
fileArgs: string[];
|
|
39
|
+
/** Unknown flags (potentially extension flags) - map of flag name to value */
|
|
40
|
+
unknownFlags: Map<string, boolean | string>;
|
|
41
|
+
}
|
|
42
|
+
export declare function isValidThinkingLevel(level: string): level is ThinkingLevel;
|
|
43
|
+
export declare function parseArgs(args: string[], extensionFlags?: Map<string, {
|
|
44
|
+
type: "boolean" | "string";
|
|
45
|
+
}>): Args;
|
|
46
|
+
export declare function printHelp(): void;
|
|
47
|
+
//# sourceMappingURL=args.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../../src/cli/args.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAGjE,OAAO,EAAY,KAAK,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAEjE,MAAM,MAAM,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;AAE3C,MAAM,WAAW,IAAI;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,8EAA8E;IAC9E,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC,CAAC;CAC5C;AAID,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,aAAa,CAE1E;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE;IAAE,IAAI,EAAE,SAAS,GAAG,QAAQ,CAAA;CAAE,CAAC,GAAG,IAAI,CAwH5G;AAED,wBAAgB,SAAS,IAAI,IAAI,CAsIhC","sourcesContent":["/**\r\n * CLI argument parsing and help display\r\n */\r\n\r\nimport type { ThinkingLevel } from \"@mariozechner/pi-agent-core\";\r\nimport chalk from \"chalk\";\r\nimport { APP_NAME, CONFIG_DIR_NAME, ENV_AGENT_DIR } from \"../config.js\";\r\nimport { allTools, type ToolName } from \"../core/tools/index.js\";\r\n\r\nexport type Mode = \"text\" | \"json\" | \"rpc\";\r\n\r\nexport interface Args {\r\n\tprovider?: string;\r\n\tmodel?: string;\r\n\tapiKey?: string;\r\n\tsystemPrompt?: string;\r\n\tappendSystemPrompt?: string;\r\n\tthinking?: ThinkingLevel;\r\n\tcontinue?: boolean;\r\n\tresume?: boolean;\r\n\thelp?: boolean;\r\n\tversion?: boolean;\r\n\tmode?: Mode;\r\n\tnoSession?: boolean;\r\n\tsession?: string;\r\n\tsessionDir?: string;\r\n\tmodels?: string[];\r\n\ttools?: ToolName[];\r\n\tnoTools?: boolean;\r\n\textensions?: string[];\r\n\tnoExtensions?: boolean;\r\n\tprint?: boolean;\r\n\texport?: string;\r\n\tnoSkills?: boolean;\r\n\tskills?: string[];\r\n\tpromptTemplates?: string[];\r\n\tnoPromptTemplates?: boolean;\r\n\tthemes?: string[];\r\n\tnoThemes?: boolean;\r\n\tlistModels?: string | true;\r\n\tverbose?: boolean;\r\n\tmessages: string[];\r\n\tfileArgs: string[];\r\n\t/** Unknown flags (potentially extension flags) - map of flag name to value */\r\n\tunknownFlags: Map<string, boolean | string>;\r\n}\r\n\r\nconst VALID_THINKING_LEVELS = [\"off\", \"minimal\", \"low\", \"medium\", \"high\", \"xhigh\"] as const;\r\n\r\nexport function isValidThinkingLevel(level: string): level is ThinkingLevel {\r\n\treturn VALID_THINKING_LEVELS.includes(level as ThinkingLevel);\r\n}\r\n\r\nexport function parseArgs(args: string[], extensionFlags?: Map<string, { type: \"boolean\" | \"string\" }>): Args {\r\n\tconst result: Args = {\r\n\t\tmessages: [],\r\n\t\tfileArgs: [],\r\n\t\tunknownFlags: new Map(),\r\n\t};\r\n\r\n\tfor (let i = 0; i < args.length; i++) {\r\n\t\tconst arg = args[i];\r\n\r\n\t\tif (arg === \"--help\" || arg === \"-h\") {\r\n\t\t\tresult.help = true;\r\n\t\t} else if (arg === \"--version\" || arg === \"-v\") {\r\n\t\t\tresult.version = true;\r\n\t\t} else if (arg === \"--mode\" && i + 1 < args.length) {\r\n\t\t\tconst mode = args[++i];\r\n\t\t\tif (mode === \"text\" || mode === \"json\" || mode === \"rpc\") {\r\n\t\t\t\tresult.mode = mode;\r\n\t\t\t}\r\n\t\t} else if (arg === \"--continue\" || arg === \"-c\") {\r\n\t\t\tresult.continue = true;\r\n\t\t} else if (arg === \"--resume\" || arg === \"-r\") {\r\n\t\t\tresult.resume = true;\r\n\t\t} else if (arg === \"--provider\" && i + 1 < args.length) {\r\n\t\t\tresult.provider = args[++i];\r\n\t\t} else if (arg === \"--model\" && i + 1 < args.length) {\r\n\t\t\tresult.model = args[++i];\r\n\t\t} else if (arg === \"--api-key\" && i + 1 < args.length) {\r\n\t\t\tresult.apiKey = args[++i];\r\n\t\t} else if (arg === \"--system-prompt\" && i + 1 < args.length) {\r\n\t\t\tresult.systemPrompt = args[++i];\r\n\t\t} else if (arg === \"--append-system-prompt\" && i + 1 < args.length) {\r\n\t\t\tresult.appendSystemPrompt = args[++i];\r\n\t\t} else if (arg === \"--no-session\") {\r\n\t\t\tresult.noSession = true;\r\n\t\t} else if (arg === \"--session\" && i + 1 < args.length) {\r\n\t\t\tresult.session = args[++i];\r\n\t\t} else if (arg === \"--session-dir\" && i + 1 < args.length) {\r\n\t\t\tresult.sessionDir = args[++i];\r\n\t\t} else if (arg === \"--models\" && i + 1 < args.length) {\r\n\t\t\tresult.models = args[++i].split(\",\").map((s) => s.trim());\r\n\t\t} else if (arg === \"--no-tools\") {\r\n\t\t\tresult.noTools = true;\r\n\t\t} else if (arg === \"--tools\" && i + 1 < args.length) {\r\n\t\t\tconst toolNames = args[++i].split(\",\").map((s) => s.trim());\r\n\t\t\tconst validTools: ToolName[] = [];\r\n\t\t\tfor (const name of toolNames) {\r\n\t\t\t\tif (name in allTools) {\r\n\t\t\t\t\tvalidTools.push(name as ToolName);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tconsole.error(\r\n\t\t\t\t\t\tchalk.yellow(`Warning: Unknown tool \"${name}\". Valid tools: ${Object.keys(allTools).join(\", \")}`),\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tresult.tools = validTools;\r\n\t\t} else if (arg === \"--thinking\" && i + 1 < args.length) {\r\n\t\t\tconst level = args[++i];\r\n\t\t\tif (isValidThinkingLevel(level)) {\r\n\t\t\t\tresult.thinking = level;\r\n\t\t\t} else {\r\n\t\t\t\tconsole.error(\r\n\t\t\t\t\tchalk.yellow(\r\n\t\t\t\t\t\t`Warning: Invalid thinking level \"${level}\". Valid values: ${VALID_THINKING_LEVELS.join(\", \")}`,\r\n\t\t\t\t\t),\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t} else if (arg === \"--print\" || arg === \"-p\") {\r\n\t\t\tresult.print = true;\r\n\t\t} else if (arg === \"--export\" && i + 1 < args.length) {\r\n\t\t\tresult.export = args[++i];\r\n\t\t} else if ((arg === \"--extension\" || arg === \"-e\") && i + 1 < args.length) {\r\n\t\t\tresult.extensions = result.extensions ?? [];\r\n\t\t\tresult.extensions.push(args[++i]);\r\n\t\t} else if (arg === \"--no-extensions\" || arg === \"-ne\") {\r\n\t\t\tresult.noExtensions = true;\r\n\t\t} else if (arg === \"--skill\" && i + 1 < args.length) {\r\n\t\t\tresult.skills = result.skills ?? [];\r\n\t\t\tresult.skills.push(args[++i]);\r\n\t\t} else if (arg === \"--prompt-template\" && i + 1 < args.length) {\r\n\t\t\tresult.promptTemplates = result.promptTemplates ?? [];\r\n\t\t\tresult.promptTemplates.push(args[++i]);\r\n\t\t} else if (arg === \"--theme\" && i + 1 < args.length) {\r\n\t\t\tresult.themes = result.themes ?? [];\r\n\t\t\tresult.themes.push(args[++i]);\r\n\t\t} else if (arg === \"--no-skills\" || arg === \"-ns\") {\r\n\t\t\tresult.noSkills = true;\r\n\t\t} else if (arg === \"--no-prompt-templates\" || arg === \"-np\") {\r\n\t\t\tresult.noPromptTemplates = true;\r\n\t\t} else if (arg === \"--no-themes\") {\r\n\t\t\tresult.noThemes = true;\r\n\t\t} else if (arg === \"--list-models\") {\r\n\t\t\t// Check if next arg is a search pattern (not a flag or file arg)\r\n\t\t\tif (i + 1 < args.length && !args[i + 1].startsWith(\"-\") && !args[i + 1].startsWith(\"@\")) {\r\n\t\t\t\tresult.listModels = args[++i];\r\n\t\t\t} else {\r\n\t\t\t\tresult.listModels = true;\r\n\t\t\t}\r\n\t\t} else if (arg === \"--verbose\") {\r\n\t\t\tresult.verbose = true;\r\n\t\t} else if (arg.startsWith(\"@\")) {\r\n\t\t\tresult.fileArgs.push(arg.slice(1)); // Remove @ prefix\r\n\t\t} else if (arg.startsWith(\"--\") && extensionFlags) {\r\n\t\t\t// Check if it's an extension-registered flag\r\n\t\t\tconst flagName = arg.slice(2);\r\n\t\t\tconst extFlag = extensionFlags.get(flagName);\r\n\t\t\tif (extFlag) {\r\n\t\t\t\tif (extFlag.type === \"boolean\") {\r\n\t\t\t\t\tresult.unknownFlags.set(flagName, true);\r\n\t\t\t\t} else if (extFlag.type === \"string\" && i + 1 < args.length) {\r\n\t\t\t\t\tresult.unknownFlags.set(flagName, args[++i]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t// Unknown flags without extensionFlags are silently ignored (first pass)\r\n\t\t} else if (!arg.startsWith(\"-\")) {\r\n\t\t\tresult.messages.push(arg);\r\n\t\t}\r\n\t}\r\n\r\n\treturn result;\r\n}\r\n\r\nexport function printHelp(): void {\r\n\tconsole.log(`${chalk.bold(APP_NAME)} - AI coding assistant with read, bash, edit, write tools\r\n\r\n${chalk.bold(\"Usage:\")}\r\n ${APP_NAME} [options] [@files...] [messages...]\r\n\r\n${chalk.bold(\"Commands:\")}\r\n ${APP_NAME} install <source> [-l] Install extension source and add to settings\r\n ${APP_NAME} remove <source> [-l] Remove extension source from settings\r\n ${APP_NAME} update [source] Update installed extensions (skips pinned sources)\r\n ${APP_NAME} list List installed extensions from settings\r\n ${APP_NAME} config Open TUI to enable/disable package resources\r\n ${APP_NAME} <command> --help Show help for install/remove/update/list\r\n\r\n${chalk.bold(\"Options:\")}\r\n --provider <name> Provider name (default: google)\r\n --model <pattern> Model pattern or ID (supports \"provider/id\" and optional \":<thinking>\")\r\n --api-key <key> API key (defaults to env vars)\r\n --system-prompt <text> System prompt (default: coding assistant prompt)\r\n --append-system-prompt <text> Append text or file contents to the system prompt\r\n --mode <mode> Output mode: text (default), json, or rpc\r\n --print, -p Non-interactive mode: process prompt and exit\r\n --continue, -c Continue previous session\r\n --resume, -r Select a session to resume\r\n --session <path> Use specific session file\r\n --session-dir <dir> Directory for session storage and lookup\r\n --no-session Don't save session (ephemeral)\r\n --models <patterns> Comma-separated model patterns for Ctrl+P cycling\r\n Supports globs (anthropic/*, *sonnet*) and fuzzy matching\r\n --no-tools Disable all built-in tools\r\n --tools <tools> Comma-separated list of tools to enable (default: read,bash,edit,write)\r\n Available: read, bash, edit, write, grep, find, ls\r\n --thinking <level> Set thinking level: off, minimal, low, medium, high, xhigh\r\n --extension, -e <path> Load an extension file (can be used multiple times)\r\n --no-extensions, -ne Disable extension discovery (explicit -e paths still work)\r\n --skill <path> Load a skill file or directory (can be used multiple times)\r\n --no-skills, -ns Disable skills discovery and loading\r\n --prompt-template <path> Load a prompt template file or directory (can be used multiple times)\r\n --no-prompt-templates, -np Disable prompt template discovery and loading\r\n --theme <path> Load a theme file or directory (can be used multiple times)\r\n --no-themes Disable theme discovery and loading\r\n --export <file> Export session file to HTML and exit\r\n --list-models [search] List available models (with optional fuzzy search)\r\n --verbose Force verbose startup (overrides quietStartup setting)\r\n --help, -h Show this help\r\n --version, -v Show version number\r\n\r\nExtensions can register additional flags (e.g., --plan from plan-mode extension).\r\n\r\n${chalk.bold(\"Examples:\")}\r\n # Interactive mode\r\n ${APP_NAME}\r\n\r\n # Interactive mode with initial prompt\r\n ${APP_NAME} \"List all .ts files in src/\"\r\n\r\n # Include files in initial message\r\n ${APP_NAME} @prompt.md @image.png \"What color is the sky?\"\r\n\r\n # Non-interactive mode (process and exit)\r\n ${APP_NAME} -p \"List all .ts files in src/\"\r\n\r\n # Multiple messages (interactive)\r\n ${APP_NAME} \"Read package.json\" \"What dependencies do we have?\"\r\n\r\n # Continue previous session\r\n ${APP_NAME} --continue \"What did we discuss?\"\r\n\r\n # Use different model\r\n ${APP_NAME} --provider openai --model gpt-4o-mini \"Help me refactor this code\"\r\n\r\n # Use model with provider prefix (no --provider needed)\r\n ${APP_NAME} --model openai/gpt-4o \"Help me refactor this code\"\r\n\r\n # Use model with thinking level shorthand\r\n ${APP_NAME} --model sonnet:high \"Solve this complex problem\"\r\n\r\n # Limit model cycling to specific models\r\n ${APP_NAME} --models claude-sonnet,claude-haiku,gpt-4o\r\n\r\n # Limit to a specific provider with glob pattern\r\n ${APP_NAME} --models \"github-copilot/*\"\r\n\r\n # Cycle models with fixed thinking levels\r\n ${APP_NAME} --models sonnet:high,haiku:low\r\n\r\n # Start with a specific thinking level\r\n ${APP_NAME} --thinking high \"Solve this complex problem\"\r\n\r\n # Read-only mode (no file modifications possible)\r\n ${APP_NAME} --tools read,grep,find,ls -p \"Review the code in src/\"\r\n\r\n # Export a session file to HTML\r\n ${APP_NAME} --export ~/${CONFIG_DIR_NAME}/agent/sessions/--path--/session.jsonl\r\n ${APP_NAME} --export session.jsonl output.html\r\n\r\n${chalk.bold(\"Environment Variables:\")}\r\n ANTHROPIC_API_KEY - Anthropic Claude API key\r\n ANTHROPIC_OAUTH_TOKEN - Anthropic OAuth token (alternative to API key)\r\n OPENAI_API_KEY - OpenAI GPT API key\r\n AZURE_OPENAI_API_KEY - Azure OpenAI API key\r\n AZURE_OPENAI_BASE_URL - Azure OpenAI base URL (https://{resource}.openai.azure.com/openai/v1)\r\n AZURE_OPENAI_RESOURCE_NAME - Azure OpenAI resource name (alternative to base URL)\r\n AZURE_OPENAI_API_VERSION - Azure OpenAI API version (default: v1)\r\n AZURE_OPENAI_DEPLOYMENT_NAME_MAP - Azure OpenAI model=deployment map (comma-separated)\r\n GEMINI_API_KEY - Google Gemini API key\r\n GROQ_API_KEY - Groq API key\r\n CEREBRAS_API_KEY - Cerebras API key\r\n XAI_API_KEY - xAI Grok API key\r\n OPENROUTER_API_KEY - OpenRouter API key\r\n AI_GATEWAY_API_KEY - Vercel AI Gateway API key\r\n ZAI_API_KEY - ZAI API key\r\n MISTRAL_API_KEY - Mistral API key\r\n MINIMAX_API_KEY - MiniMax API key\r\n KIMI_API_KEY - Kimi For Coding API key\r\n AWS_PROFILE - AWS profile for Amazon Bedrock\r\n AWS_ACCESS_KEY_ID - AWS access key for Amazon Bedrock\r\n AWS_SECRET_ACCESS_KEY - AWS secret key for Amazon Bedrock\r\n AWS_BEARER_TOKEN_BEDROCK - Bedrock API key (bearer token)\r\n AWS_REGION - AWS region for Amazon Bedrock (e.g., us-east-1)\r\n ${ENV_AGENT_DIR.padEnd(32)} - Session storage directory (default: ~/${CONFIG_DIR_NAME}/agent)\r\n PI_PACKAGE_DIR - Override package directory (for Nix/Guix store paths)\r\n PI_SHARE_VIEWER_URL - Base URL for /share command (default: https://pi.dev/session/)\r\n PI_AI_ANTIGRAVITY_VERSION - Override Antigravity User-Agent version (e.g., 1.23.0)\r\n\r\n${chalk.bold(\"Available Tools (default: read, bash, edit, write):\")}\r\n read - Read file contents\r\n bash - Execute bash commands\r\n edit - Edit files with find/replace\r\n write - Write files (creates/overwrites)\r\n grep - Search file contents (read-only, off by default)\r\n find - Find files by glob pattern (read-only, off by default)\r\n ls - List directory contents (read-only, off by default)\r\n`);\r\n}\r\n"]}
|
package/dist/cli/args.js
ADDED
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI argument parsing and help display
|
|
3
|
+
*/
|
|
4
|
+
import chalk from "chalk";
|
|
5
|
+
import { APP_NAME, CONFIG_DIR_NAME, ENV_AGENT_DIR } from "../config.js";
|
|
6
|
+
import { allTools } from "../core/tools/index.js";
|
|
7
|
+
const VALID_THINKING_LEVELS = ["off", "minimal", "low", "medium", "high", "xhigh"];
|
|
8
|
+
export function isValidThinkingLevel(level) {
|
|
9
|
+
return VALID_THINKING_LEVELS.includes(level);
|
|
10
|
+
}
|
|
11
|
+
export function parseArgs(args, extensionFlags) {
|
|
12
|
+
const result = {
|
|
13
|
+
messages: [],
|
|
14
|
+
fileArgs: [],
|
|
15
|
+
unknownFlags: new Map(),
|
|
16
|
+
};
|
|
17
|
+
for (let i = 0; i < args.length; i++) {
|
|
18
|
+
const arg = args[i];
|
|
19
|
+
if (arg === "--help" || arg === "-h") {
|
|
20
|
+
result.help = true;
|
|
21
|
+
}
|
|
22
|
+
else if (arg === "--version" || arg === "-v") {
|
|
23
|
+
result.version = true;
|
|
24
|
+
}
|
|
25
|
+
else if (arg === "--mode" && i + 1 < args.length) {
|
|
26
|
+
const mode = args[++i];
|
|
27
|
+
if (mode === "text" || mode === "json" || mode === "rpc") {
|
|
28
|
+
result.mode = mode;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
else if (arg === "--continue" || arg === "-c") {
|
|
32
|
+
result.continue = true;
|
|
33
|
+
}
|
|
34
|
+
else if (arg === "--resume" || arg === "-r") {
|
|
35
|
+
result.resume = true;
|
|
36
|
+
}
|
|
37
|
+
else if (arg === "--provider" && i + 1 < args.length) {
|
|
38
|
+
result.provider = args[++i];
|
|
39
|
+
}
|
|
40
|
+
else if (arg === "--model" && i + 1 < args.length) {
|
|
41
|
+
result.model = args[++i];
|
|
42
|
+
}
|
|
43
|
+
else if (arg === "--api-key" && i + 1 < args.length) {
|
|
44
|
+
result.apiKey = args[++i];
|
|
45
|
+
}
|
|
46
|
+
else if (arg === "--system-prompt" && i + 1 < args.length) {
|
|
47
|
+
result.systemPrompt = args[++i];
|
|
48
|
+
}
|
|
49
|
+
else if (arg === "--append-system-prompt" && i + 1 < args.length) {
|
|
50
|
+
result.appendSystemPrompt = args[++i];
|
|
51
|
+
}
|
|
52
|
+
else if (arg === "--no-session") {
|
|
53
|
+
result.noSession = true;
|
|
54
|
+
}
|
|
55
|
+
else if (arg === "--session" && i + 1 < args.length) {
|
|
56
|
+
result.session = args[++i];
|
|
57
|
+
}
|
|
58
|
+
else if (arg === "--session-dir" && i + 1 < args.length) {
|
|
59
|
+
result.sessionDir = args[++i];
|
|
60
|
+
}
|
|
61
|
+
else if (arg === "--models" && i + 1 < args.length) {
|
|
62
|
+
result.models = args[++i].split(",").map((s) => s.trim());
|
|
63
|
+
}
|
|
64
|
+
else if (arg === "--no-tools") {
|
|
65
|
+
result.noTools = true;
|
|
66
|
+
}
|
|
67
|
+
else if (arg === "--tools" && i + 1 < args.length) {
|
|
68
|
+
const toolNames = args[++i].split(",").map((s) => s.trim());
|
|
69
|
+
const validTools = [];
|
|
70
|
+
for (const name of toolNames) {
|
|
71
|
+
if (name in allTools) {
|
|
72
|
+
validTools.push(name);
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
console.error(chalk.yellow(`Warning: Unknown tool "${name}". Valid tools: ${Object.keys(allTools).join(", ")}`));
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
result.tools = validTools;
|
|
79
|
+
}
|
|
80
|
+
else if (arg === "--thinking" && i + 1 < args.length) {
|
|
81
|
+
const level = args[++i];
|
|
82
|
+
if (isValidThinkingLevel(level)) {
|
|
83
|
+
result.thinking = level;
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
console.error(chalk.yellow(`Warning: Invalid thinking level "${level}". Valid values: ${VALID_THINKING_LEVELS.join(", ")}`));
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
else if (arg === "--print" || arg === "-p") {
|
|
90
|
+
result.print = true;
|
|
91
|
+
}
|
|
92
|
+
else if (arg === "--export" && i + 1 < args.length) {
|
|
93
|
+
result.export = args[++i];
|
|
94
|
+
}
|
|
95
|
+
else if ((arg === "--extension" || arg === "-e") && i + 1 < args.length) {
|
|
96
|
+
result.extensions = result.extensions ?? [];
|
|
97
|
+
result.extensions.push(args[++i]);
|
|
98
|
+
}
|
|
99
|
+
else if (arg === "--no-extensions" || arg === "-ne") {
|
|
100
|
+
result.noExtensions = true;
|
|
101
|
+
}
|
|
102
|
+
else if (arg === "--skill" && i + 1 < args.length) {
|
|
103
|
+
result.skills = result.skills ?? [];
|
|
104
|
+
result.skills.push(args[++i]);
|
|
105
|
+
}
|
|
106
|
+
else if (arg === "--prompt-template" && i + 1 < args.length) {
|
|
107
|
+
result.promptTemplates = result.promptTemplates ?? [];
|
|
108
|
+
result.promptTemplates.push(args[++i]);
|
|
109
|
+
}
|
|
110
|
+
else if (arg === "--theme" && i + 1 < args.length) {
|
|
111
|
+
result.themes = result.themes ?? [];
|
|
112
|
+
result.themes.push(args[++i]);
|
|
113
|
+
}
|
|
114
|
+
else if (arg === "--no-skills" || arg === "-ns") {
|
|
115
|
+
result.noSkills = true;
|
|
116
|
+
}
|
|
117
|
+
else if (arg === "--no-prompt-templates" || arg === "-np") {
|
|
118
|
+
result.noPromptTemplates = true;
|
|
119
|
+
}
|
|
120
|
+
else if (arg === "--no-themes") {
|
|
121
|
+
result.noThemes = true;
|
|
122
|
+
}
|
|
123
|
+
else if (arg === "--list-models") {
|
|
124
|
+
// Check if next arg is a search pattern (not a flag or file arg)
|
|
125
|
+
if (i + 1 < args.length && !args[i + 1].startsWith("-") && !args[i + 1].startsWith("@")) {
|
|
126
|
+
result.listModels = args[++i];
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
result.listModels = true;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
else if (arg === "--verbose") {
|
|
133
|
+
result.verbose = true;
|
|
134
|
+
}
|
|
135
|
+
else if (arg.startsWith("@")) {
|
|
136
|
+
result.fileArgs.push(arg.slice(1)); // Remove @ prefix
|
|
137
|
+
}
|
|
138
|
+
else if (arg.startsWith("--") && extensionFlags) {
|
|
139
|
+
// Check if it's an extension-registered flag
|
|
140
|
+
const flagName = arg.slice(2);
|
|
141
|
+
const extFlag = extensionFlags.get(flagName);
|
|
142
|
+
if (extFlag) {
|
|
143
|
+
if (extFlag.type === "boolean") {
|
|
144
|
+
result.unknownFlags.set(flagName, true);
|
|
145
|
+
}
|
|
146
|
+
else if (extFlag.type === "string" && i + 1 < args.length) {
|
|
147
|
+
result.unknownFlags.set(flagName, args[++i]);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
// Unknown flags without extensionFlags are silently ignored (first pass)
|
|
151
|
+
}
|
|
152
|
+
else if (!arg.startsWith("-")) {
|
|
153
|
+
result.messages.push(arg);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
return result;
|
|
157
|
+
}
|
|
158
|
+
export function printHelp() {
|
|
159
|
+
console.log(`${chalk.bold(APP_NAME)} - AI coding assistant with read, bash, edit, write tools
|
|
160
|
+
|
|
161
|
+
${chalk.bold("Usage:")}
|
|
162
|
+
${APP_NAME} [options] [@files...] [messages...]
|
|
163
|
+
|
|
164
|
+
${chalk.bold("Commands:")}
|
|
165
|
+
${APP_NAME} install <source> [-l] Install extension source and add to settings
|
|
166
|
+
${APP_NAME} remove <source> [-l] Remove extension source from settings
|
|
167
|
+
${APP_NAME} update [source] Update installed extensions (skips pinned sources)
|
|
168
|
+
${APP_NAME} list List installed extensions from settings
|
|
169
|
+
${APP_NAME} config Open TUI to enable/disable package resources
|
|
170
|
+
${APP_NAME} <command> --help Show help for install/remove/update/list
|
|
171
|
+
|
|
172
|
+
${chalk.bold("Options:")}
|
|
173
|
+
--provider <name> Provider name (default: google)
|
|
174
|
+
--model <pattern> Model pattern or ID (supports "provider/id" and optional ":<thinking>")
|
|
175
|
+
--api-key <key> API key (defaults to env vars)
|
|
176
|
+
--system-prompt <text> System prompt (default: coding assistant prompt)
|
|
177
|
+
--append-system-prompt <text> Append text or file contents to the system prompt
|
|
178
|
+
--mode <mode> Output mode: text (default), json, or rpc
|
|
179
|
+
--print, -p Non-interactive mode: process prompt and exit
|
|
180
|
+
--continue, -c Continue previous session
|
|
181
|
+
--resume, -r Select a session to resume
|
|
182
|
+
--session <path> Use specific session file
|
|
183
|
+
--session-dir <dir> Directory for session storage and lookup
|
|
184
|
+
--no-session Don't save session (ephemeral)
|
|
185
|
+
--models <patterns> Comma-separated model patterns for Ctrl+P cycling
|
|
186
|
+
Supports globs (anthropic/*, *sonnet*) and fuzzy matching
|
|
187
|
+
--no-tools Disable all built-in tools
|
|
188
|
+
--tools <tools> Comma-separated list of tools to enable (default: read,bash,edit,write)
|
|
189
|
+
Available: read, bash, edit, write, grep, find, ls
|
|
190
|
+
--thinking <level> Set thinking level: off, minimal, low, medium, high, xhigh
|
|
191
|
+
--extension, -e <path> Load an extension file (can be used multiple times)
|
|
192
|
+
--no-extensions, -ne Disable extension discovery (explicit -e paths still work)
|
|
193
|
+
--skill <path> Load a skill file or directory (can be used multiple times)
|
|
194
|
+
--no-skills, -ns Disable skills discovery and loading
|
|
195
|
+
--prompt-template <path> Load a prompt template file or directory (can be used multiple times)
|
|
196
|
+
--no-prompt-templates, -np Disable prompt template discovery and loading
|
|
197
|
+
--theme <path> Load a theme file or directory (can be used multiple times)
|
|
198
|
+
--no-themes Disable theme discovery and loading
|
|
199
|
+
--export <file> Export session file to HTML and exit
|
|
200
|
+
--list-models [search] List available models (with optional fuzzy search)
|
|
201
|
+
--verbose Force verbose startup (overrides quietStartup setting)
|
|
202
|
+
--help, -h Show this help
|
|
203
|
+
--version, -v Show version number
|
|
204
|
+
|
|
205
|
+
Extensions can register additional flags (e.g., --plan from plan-mode extension).
|
|
206
|
+
|
|
207
|
+
${chalk.bold("Examples:")}
|
|
208
|
+
# Interactive mode
|
|
209
|
+
${APP_NAME}
|
|
210
|
+
|
|
211
|
+
# Interactive mode with initial prompt
|
|
212
|
+
${APP_NAME} "List all .ts files in src/"
|
|
213
|
+
|
|
214
|
+
# Include files in initial message
|
|
215
|
+
${APP_NAME} @prompt.md @image.png "What color is the sky?"
|
|
216
|
+
|
|
217
|
+
# Non-interactive mode (process and exit)
|
|
218
|
+
${APP_NAME} -p "List all .ts files in src/"
|
|
219
|
+
|
|
220
|
+
# Multiple messages (interactive)
|
|
221
|
+
${APP_NAME} "Read package.json" "What dependencies do we have?"
|
|
222
|
+
|
|
223
|
+
# Continue previous session
|
|
224
|
+
${APP_NAME} --continue "What did we discuss?"
|
|
225
|
+
|
|
226
|
+
# Use different model
|
|
227
|
+
${APP_NAME} --provider openai --model gpt-4o-mini "Help me refactor this code"
|
|
228
|
+
|
|
229
|
+
# Use model with provider prefix (no --provider needed)
|
|
230
|
+
${APP_NAME} --model openai/gpt-4o "Help me refactor this code"
|
|
231
|
+
|
|
232
|
+
# Use model with thinking level shorthand
|
|
233
|
+
${APP_NAME} --model sonnet:high "Solve this complex problem"
|
|
234
|
+
|
|
235
|
+
# Limit model cycling to specific models
|
|
236
|
+
${APP_NAME} --models claude-sonnet,claude-haiku,gpt-4o
|
|
237
|
+
|
|
238
|
+
# Limit to a specific provider with glob pattern
|
|
239
|
+
${APP_NAME} --models "github-copilot/*"
|
|
240
|
+
|
|
241
|
+
# Cycle models with fixed thinking levels
|
|
242
|
+
${APP_NAME} --models sonnet:high,haiku:low
|
|
243
|
+
|
|
244
|
+
# Start with a specific thinking level
|
|
245
|
+
${APP_NAME} --thinking high "Solve this complex problem"
|
|
246
|
+
|
|
247
|
+
# Read-only mode (no file modifications possible)
|
|
248
|
+
${APP_NAME} --tools read,grep,find,ls -p "Review the code in src/"
|
|
249
|
+
|
|
250
|
+
# Export a session file to HTML
|
|
251
|
+
${APP_NAME} --export ~/${CONFIG_DIR_NAME}/agent/sessions/--path--/session.jsonl
|
|
252
|
+
${APP_NAME} --export session.jsonl output.html
|
|
253
|
+
|
|
254
|
+
${chalk.bold("Environment Variables:")}
|
|
255
|
+
ANTHROPIC_API_KEY - Anthropic Claude API key
|
|
256
|
+
ANTHROPIC_OAUTH_TOKEN - Anthropic OAuth token (alternative to API key)
|
|
257
|
+
OPENAI_API_KEY - OpenAI GPT API key
|
|
258
|
+
AZURE_OPENAI_API_KEY - Azure OpenAI API key
|
|
259
|
+
AZURE_OPENAI_BASE_URL - Azure OpenAI base URL (https://{resource}.openai.azure.com/openai/v1)
|
|
260
|
+
AZURE_OPENAI_RESOURCE_NAME - Azure OpenAI resource name (alternative to base URL)
|
|
261
|
+
AZURE_OPENAI_API_VERSION - Azure OpenAI API version (default: v1)
|
|
262
|
+
AZURE_OPENAI_DEPLOYMENT_NAME_MAP - Azure OpenAI model=deployment map (comma-separated)
|
|
263
|
+
GEMINI_API_KEY - Google Gemini API key
|
|
264
|
+
GROQ_API_KEY - Groq API key
|
|
265
|
+
CEREBRAS_API_KEY - Cerebras API key
|
|
266
|
+
XAI_API_KEY - xAI Grok API key
|
|
267
|
+
OPENROUTER_API_KEY - OpenRouter API key
|
|
268
|
+
AI_GATEWAY_API_KEY - Vercel AI Gateway API key
|
|
269
|
+
ZAI_API_KEY - ZAI API key
|
|
270
|
+
MISTRAL_API_KEY - Mistral API key
|
|
271
|
+
MINIMAX_API_KEY - MiniMax API key
|
|
272
|
+
KIMI_API_KEY - Kimi For Coding API key
|
|
273
|
+
AWS_PROFILE - AWS profile for Amazon Bedrock
|
|
274
|
+
AWS_ACCESS_KEY_ID - AWS access key for Amazon Bedrock
|
|
275
|
+
AWS_SECRET_ACCESS_KEY - AWS secret key for Amazon Bedrock
|
|
276
|
+
AWS_BEARER_TOKEN_BEDROCK - Bedrock API key (bearer token)
|
|
277
|
+
AWS_REGION - AWS region for Amazon Bedrock (e.g., us-east-1)
|
|
278
|
+
${ENV_AGENT_DIR.padEnd(32)} - Session storage directory (default: ~/${CONFIG_DIR_NAME}/agent)
|
|
279
|
+
PI_PACKAGE_DIR - Override package directory (for Nix/Guix store paths)
|
|
280
|
+
PI_SHARE_VIEWER_URL - Base URL for /share command (default: https://pi.dev/session/)
|
|
281
|
+
PI_AI_ANTIGRAVITY_VERSION - Override Antigravity User-Agent version (e.g., 1.23.0)
|
|
282
|
+
|
|
283
|
+
${chalk.bold("Available Tools (default: read, bash, edit, write):")}
|
|
284
|
+
read - Read file contents
|
|
285
|
+
bash - Execute bash commands
|
|
286
|
+
edit - Edit files with find/replace
|
|
287
|
+
write - Write files (creates/overwrites)
|
|
288
|
+
grep - Search file contents (read-only, off by default)
|
|
289
|
+
find - Find files by glob pattern (read-only, off by default)
|
|
290
|
+
ls - List directory contents (read-only, off by default)
|
|
291
|
+
`);
|
|
292
|
+
}
|
|
293
|
+
//# sourceMappingURL=args.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"args.js","sourceRoot":"","sources":["../../src/cli/args.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * CLI argument parsing and help display\r\n */\r\n\r\nimport type { ThinkingLevel } from \"@mariozechner/pi-agent-core\";\r\nimport chalk from \"chalk\";\r\nimport { APP_NAME, CONFIG_DIR_NAME, ENV_AGENT_DIR } from \"../config.js\";\r\nimport { allTools, type ToolName } from \"../core/tools/index.js\";\r\n\r\nexport type Mode = \"text\" | \"json\" | \"rpc\";\r\n\r\nexport interface Args {\r\n\tprovider?: string;\r\n\tmodel?: string;\r\n\tapiKey?: string;\r\n\tsystemPrompt?: string;\r\n\tappendSystemPrompt?: string;\r\n\tthinking?: ThinkingLevel;\r\n\tcontinue?: boolean;\r\n\tresume?: boolean;\r\n\thelp?: boolean;\r\n\tversion?: boolean;\r\n\tmode?: Mode;\r\n\tnoSession?: boolean;\r\n\tsession?: string;\r\n\tsessionDir?: string;\r\n\tmodels?: string[];\r\n\ttools?: ToolName[];\r\n\tnoTools?: boolean;\r\n\textensions?: string[];\r\n\tnoExtensions?: boolean;\r\n\tprint?: boolean;\r\n\texport?: string;\r\n\tnoSkills?: boolean;\r\n\tskills?: string[];\r\n\tpromptTemplates?: string[];\r\n\tnoPromptTemplates?: boolean;\r\n\tthemes?: string[];\r\n\tnoThemes?: boolean;\r\n\tlistModels?: string | true;\r\n\tverbose?: boolean;\r\n\tmessages: string[];\r\n\tfileArgs: string[];\r\n\t/** Unknown flags (potentially extension flags) - map of flag name to value */\r\n\tunknownFlags: Map<string, boolean | string>;\r\n}\r\n\r\nconst VALID_THINKING_LEVELS = [\"off\", \"minimal\", \"low\", \"medium\", \"high\", \"xhigh\"] as const;\r\n\r\nexport function isValidThinkingLevel(level: string): level is ThinkingLevel {\r\n\treturn VALID_THINKING_LEVELS.includes(level as ThinkingLevel);\r\n}\r\n\r\nexport function parseArgs(args: string[], extensionFlags?: Map<string, { type: \"boolean\" | \"string\" }>): Args {\r\n\tconst result: Args = {\r\n\t\tmessages: [],\r\n\t\tfileArgs: [],\r\n\t\tunknownFlags: new Map(),\r\n\t};\r\n\r\n\tfor (let i = 0; i < args.length; i++) {\r\n\t\tconst arg = args[i];\r\n\r\n\t\tif (arg === \"--help\" || arg === \"-h\") {\r\n\t\t\tresult.help = true;\r\n\t\t} else if (arg === \"--version\" || arg === \"-v\") {\r\n\t\t\tresult.version = true;\r\n\t\t} else if (arg === \"--mode\" && i + 1 < args.length) {\r\n\t\t\tconst mode = args[++i];\r\n\t\t\tif (mode === \"text\" || mode === \"json\" || mode === \"rpc\") {\r\n\t\t\t\tresult.mode = mode;\r\n\t\t\t}\r\n\t\t} else if (arg === \"--continue\" || arg === \"-c\") {\r\n\t\t\tresult.continue = true;\r\n\t\t} else if (arg === \"--resume\" || arg === \"-r\") {\r\n\t\t\tresult.resume = true;\r\n\t\t} else if (arg === \"--provider\" && i + 1 < args.length) {\r\n\t\t\tresult.provider = args[++i];\r\n\t\t} else if (arg === \"--model\" && i + 1 < args.length) {\r\n\t\t\tresult.model = args[++i];\r\n\t\t} else if (arg === \"--api-key\" && i + 1 < args.length) {\r\n\t\t\tresult.apiKey = args[++i];\r\n\t\t} else if (arg === \"--system-prompt\" && i + 1 < args.length) {\r\n\t\t\tresult.systemPrompt = args[++i];\r\n\t\t} else if (arg === \"--append-system-prompt\" && i + 1 < args.length) {\r\n\t\t\tresult.appendSystemPrompt = args[++i];\r\n\t\t} else if (arg === \"--no-session\") {\r\n\t\t\tresult.noSession = true;\r\n\t\t} else if (arg === \"--session\" && i + 1 < args.length) {\r\n\t\t\tresult.session = args[++i];\r\n\t\t} else if (arg === \"--session-dir\" && i + 1 < args.length) {\r\n\t\t\tresult.sessionDir = args[++i];\r\n\t\t} else if (arg === \"--models\" && i + 1 < args.length) {\r\n\t\t\tresult.models = args[++i].split(\",\").map((s) => s.trim());\r\n\t\t} else if (arg === \"--no-tools\") {\r\n\t\t\tresult.noTools = true;\r\n\t\t} else if (arg === \"--tools\" && i + 1 < args.length) {\r\n\t\t\tconst toolNames = args[++i].split(\",\").map((s) => s.trim());\r\n\t\t\tconst validTools: ToolName[] = [];\r\n\t\t\tfor (const name of toolNames) {\r\n\t\t\t\tif (name in allTools) {\r\n\t\t\t\t\tvalidTools.push(name as ToolName);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tconsole.error(\r\n\t\t\t\t\t\tchalk.yellow(`Warning: Unknown tool \"${name}\". Valid tools: ${Object.keys(allTools).join(\", \")}`),\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tresult.tools = validTools;\r\n\t\t} else if (arg === \"--thinking\" && i + 1 < args.length) {\r\n\t\t\tconst level = args[++i];\r\n\t\t\tif (isValidThinkingLevel(level)) {\r\n\t\t\t\tresult.thinking = level;\r\n\t\t\t} else {\r\n\t\t\t\tconsole.error(\r\n\t\t\t\t\tchalk.yellow(\r\n\t\t\t\t\t\t`Warning: Invalid thinking level \"${level}\". Valid values: ${VALID_THINKING_LEVELS.join(\", \")}`,\r\n\t\t\t\t\t),\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t} else if (arg === \"--print\" || arg === \"-p\") {\r\n\t\t\tresult.print = true;\r\n\t\t} else if (arg === \"--export\" && i + 1 < args.length) {\r\n\t\t\tresult.export = args[++i];\r\n\t\t} else if ((arg === \"--extension\" || arg === \"-e\") && i + 1 < args.length) {\r\n\t\t\tresult.extensions = result.extensions ?? [];\r\n\t\t\tresult.extensions.push(args[++i]);\r\n\t\t} else if (arg === \"--no-extensions\" || arg === \"-ne\") {\r\n\t\t\tresult.noExtensions = true;\r\n\t\t} else if (arg === \"--skill\" && i + 1 < args.length) {\r\n\t\t\tresult.skills = result.skills ?? [];\r\n\t\t\tresult.skills.push(args[++i]);\r\n\t\t} else if (arg === \"--prompt-template\" && i + 1 < args.length) {\r\n\t\t\tresult.promptTemplates = result.promptTemplates ?? [];\r\n\t\t\tresult.promptTemplates.push(args[++i]);\r\n\t\t} else if (arg === \"--theme\" && i + 1 < args.length) {\r\n\t\t\tresult.themes = result.themes ?? [];\r\n\t\t\tresult.themes.push(args[++i]);\r\n\t\t} else if (arg === \"--no-skills\" || arg === \"-ns\") {\r\n\t\t\tresult.noSkills = true;\r\n\t\t} else if (arg === \"--no-prompt-templates\" || arg === \"-np\") {\r\n\t\t\tresult.noPromptTemplates = true;\r\n\t\t} else if (arg === \"--no-themes\") {\r\n\t\t\tresult.noThemes = true;\r\n\t\t} else if (arg === \"--list-models\") {\r\n\t\t\t// Check if next arg is a search pattern (not a flag or file arg)\r\n\t\t\tif (i + 1 < args.length && !args[i + 1].startsWith(\"-\") && !args[i + 1].startsWith(\"@\")) {\r\n\t\t\t\tresult.listModels = args[++i];\r\n\t\t\t} else {\r\n\t\t\t\tresult.listModels = true;\r\n\t\t\t}\r\n\t\t} else if (arg === \"--verbose\") {\r\n\t\t\tresult.verbose = true;\r\n\t\t} else if (arg.startsWith(\"@\")) {\r\n\t\t\tresult.fileArgs.push(arg.slice(1)); // Remove @ prefix\r\n\t\t} else if (arg.startsWith(\"--\") && extensionFlags) {\r\n\t\t\t// Check if it's an extension-registered flag\r\n\t\t\tconst flagName = arg.slice(2);\r\n\t\t\tconst extFlag = extensionFlags.get(flagName);\r\n\t\t\tif (extFlag) {\r\n\t\t\t\tif (extFlag.type === \"boolean\") {\r\n\t\t\t\t\tresult.unknownFlags.set(flagName, true);\r\n\t\t\t\t} else if (extFlag.type === \"string\" && i + 1 < args.length) {\r\n\t\t\t\t\tresult.unknownFlags.set(flagName, args[++i]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t// Unknown flags without extensionFlags are silently ignored (first pass)\r\n\t\t} else if (!arg.startsWith(\"-\")) {\r\n\t\t\tresult.messages.push(arg);\r\n\t\t}\r\n\t}\r\n\r\n\treturn result;\r\n}\r\n\r\nexport function printHelp(): void {\r\n\tconsole.log(`${chalk.bold(APP_NAME)} - AI coding assistant with read, bash, edit, write tools\r\n\r\n${chalk.bold(\"Usage:\")}\r\n ${APP_NAME} [options] [@files...] [messages...]\r\n\r\n${chalk.bold(\"Commands:\")}\r\n ${APP_NAME} install <source> [-l] Install extension source and add to settings\r\n ${APP_NAME} remove <source> [-l] Remove extension source from settings\r\n ${APP_NAME} update [source] Update installed extensions (skips pinned sources)\r\n ${APP_NAME} list List installed extensions from settings\r\n ${APP_NAME} config Open TUI to enable/disable package resources\r\n ${APP_NAME} <command> --help Show help for install/remove/update/list\r\n\r\n${chalk.bold(\"Options:\")}\r\n --provider <name> Provider name (default: google)\r\n --model <pattern> Model pattern or ID (supports \"provider/id\" and optional \":<thinking>\")\r\n --api-key <key> API key (defaults to env vars)\r\n --system-prompt <text> System prompt (default: coding assistant prompt)\r\n --append-system-prompt <text> Append text or file contents to the system prompt\r\n --mode <mode> Output mode: text (default), json, or rpc\r\n --print, -p Non-interactive mode: process prompt and exit\r\n --continue, -c Continue previous session\r\n --resume, -r Select a session to resume\r\n --session <path> Use specific session file\r\n --session-dir <dir> Directory for session storage and lookup\r\n --no-session Don't save session (ephemeral)\r\n --models <patterns> Comma-separated model patterns for Ctrl+P cycling\r\n Supports globs (anthropic/*, *sonnet*) and fuzzy matching\r\n --no-tools Disable all built-in tools\r\n --tools <tools> Comma-separated list of tools to enable (default: read,bash,edit,write)\r\n Available: read, bash, edit, write, grep, find, ls\r\n --thinking <level> Set thinking level: off, minimal, low, medium, high, xhigh\r\n --extension, -e <path> Load an extension file (can be used multiple times)\r\n --no-extensions, -ne Disable extension discovery (explicit -e paths still work)\r\n --skill <path> Load a skill file or directory (can be used multiple times)\r\n --no-skills, -ns Disable skills discovery and loading\r\n --prompt-template <path> Load a prompt template file or directory (can be used multiple times)\r\n --no-prompt-templates, -np Disable prompt template discovery and loading\r\n --theme <path> Load a theme file or directory (can be used multiple times)\r\n --no-themes Disable theme discovery and loading\r\n --export <file> Export session file to HTML and exit\r\n --list-models [search] List available models (with optional fuzzy search)\r\n --verbose Force verbose startup (overrides quietStartup setting)\r\n --help, -h Show this help\r\n --version, -v Show version number\r\n\r\nExtensions can register additional flags (e.g., --plan from plan-mode extension).\r\n\r\n${chalk.bold(\"Examples:\")}\r\n # Interactive mode\r\n ${APP_NAME}\r\n\r\n # Interactive mode with initial prompt\r\n ${APP_NAME} \"List all .ts files in src/\"\r\n\r\n # Include files in initial message\r\n ${APP_NAME} @prompt.md @image.png \"What color is the sky?\"\r\n\r\n # Non-interactive mode (process and exit)\r\n ${APP_NAME} -p \"List all .ts files in src/\"\r\n\r\n # Multiple messages (interactive)\r\n ${APP_NAME} \"Read package.json\" \"What dependencies do we have?\"\r\n\r\n # Continue previous session\r\n ${APP_NAME} --continue \"What did we discuss?\"\r\n\r\n # Use different model\r\n ${APP_NAME} --provider openai --model gpt-4o-mini \"Help me refactor this code\"\r\n\r\n # Use model with provider prefix (no --provider needed)\r\n ${APP_NAME} --model openai/gpt-4o \"Help me refactor this code\"\r\n\r\n # Use model with thinking level shorthand\r\n ${APP_NAME} --model sonnet:high \"Solve this complex problem\"\r\n\r\n # Limit model cycling to specific models\r\n ${APP_NAME} --models claude-sonnet,claude-haiku,gpt-4o\r\n\r\n # Limit to a specific provider with glob pattern\r\n ${APP_NAME} --models \"github-copilot/*\"\r\n\r\n # Cycle models with fixed thinking levels\r\n ${APP_NAME} --models sonnet:high,haiku:low\r\n\r\n # Start with a specific thinking level\r\n ${APP_NAME} --thinking high \"Solve this complex problem\"\r\n\r\n # Read-only mode (no file modifications possible)\r\n ${APP_NAME} --tools read,grep,find,ls -p \"Review the code in src/\"\r\n\r\n # Export a session file to HTML\r\n ${APP_NAME} --export ~/${CONFIG_DIR_NAME}/agent/sessions/--path--/session.jsonl\r\n ${APP_NAME} --export session.jsonl output.html\r\n\r\n${chalk.bold(\"Environment Variables:\")}\r\n ANTHROPIC_API_KEY - Anthropic Claude API key\r\n ANTHROPIC_OAUTH_TOKEN - Anthropic OAuth token (alternative to API key)\r\n OPENAI_API_KEY - OpenAI GPT API key\r\n AZURE_OPENAI_API_KEY - Azure OpenAI API key\r\n AZURE_OPENAI_BASE_URL - Azure OpenAI base URL (https://{resource}.openai.azure.com/openai/v1)\r\n AZURE_OPENAI_RESOURCE_NAME - Azure OpenAI resource name (alternative to base URL)\r\n AZURE_OPENAI_API_VERSION - Azure OpenAI API version (default: v1)\r\n AZURE_OPENAI_DEPLOYMENT_NAME_MAP - Azure OpenAI model=deployment map (comma-separated)\r\n GEMINI_API_KEY - Google Gemini API key\r\n GROQ_API_KEY - Groq API key\r\n CEREBRAS_API_KEY - Cerebras API key\r\n XAI_API_KEY - xAI Grok API key\r\n OPENROUTER_API_KEY - OpenRouter API key\r\n AI_GATEWAY_API_KEY - Vercel AI Gateway API key\r\n ZAI_API_KEY - ZAI API key\r\n MISTRAL_API_KEY - Mistral API key\r\n MINIMAX_API_KEY - MiniMax API key\r\n KIMI_API_KEY - Kimi For Coding API key\r\n AWS_PROFILE - AWS profile for Amazon Bedrock\r\n AWS_ACCESS_KEY_ID - AWS access key for Amazon Bedrock\r\n AWS_SECRET_ACCESS_KEY - AWS secret key for Amazon Bedrock\r\n AWS_BEARER_TOKEN_BEDROCK - Bedrock API key (bearer token)\r\n AWS_REGION - AWS region for Amazon Bedrock (e.g., us-east-1)\r\n ${ENV_AGENT_DIR.padEnd(32)} - Session storage directory (default: ~/${CONFIG_DIR_NAME}/agent)\r\n PI_PACKAGE_DIR - Override package directory (for Nix/Guix store paths)\r\n PI_SHARE_VIEWER_URL - Base URL for /share command (default: https://pi.dev/session/)\r\n PI_AI_ANTIGRAVITY_VERSION - Override Antigravity User-Agent version (e.g., 1.23.0)\r\n\r\n${chalk.bold(\"Available Tools (default: read, bash, edit, write):\")}\r\n read - Read file contents\r\n bash - Execute bash commands\r\n edit - Edit files with find/replace\r\n write - Write files (creates/overwrites)\r\n grep - Search file contents (read-only, off by default)\r\n find - Find files by glob pattern (read-only, off by default)\r\n ls - List directory contents (read-only, off by default)\r\n`);\r\n}\r\n"]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TUI config selector for `pi config` command
|
|
3
|
+
*/
|
|
4
|
+
import type { ResolvedPaths } from "../core/package-manager.js";
|
|
5
|
+
import type { SettingsManager } from "../core/settings-manager.js";
|
|
6
|
+
export interface ConfigSelectorOptions {
|
|
7
|
+
resolvedPaths: ResolvedPaths;
|
|
8
|
+
settingsManager: SettingsManager;
|
|
9
|
+
cwd: string;
|
|
10
|
+
agentDir: string;
|
|
11
|
+
}
|
|
12
|
+
/** Show TUI config selector and return when closed */
|
|
13
|
+
export declare function selectConfig(options: ConfigSelectorOptions): Promise<void>;
|
|
14
|
+
//# sourceMappingURL=config-selector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-selector.d.ts","sourceRoot":"","sources":["../../src/cli/config-selector.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAInE,MAAM,WAAW,qBAAqB;IACrC,aAAa,EAAE,aAAa,CAAC;IAC7B,eAAe,EAAE,eAAe,CAAC;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,sDAAsD;AACtD,wBAAsB,YAAY,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiChF","sourcesContent":["/**\r\n * TUI config selector for `pi config` command\r\n */\r\n\r\nimport { ProcessTerminal, TUI } from \"@mariozechner/pi-tui\";\r\nimport type { ResolvedPaths } from \"../core/package-manager.js\";\r\nimport type { SettingsManager } from \"../core/settings-manager.js\";\r\nimport { ConfigSelectorComponent } from \"../modes/interactive/components/config-selector.js\";\r\nimport { initTheme, stopThemeWatcher } from \"../modes/interactive/theme/theme.js\";\r\n\r\nexport interface ConfigSelectorOptions {\r\n\tresolvedPaths: ResolvedPaths;\r\n\tsettingsManager: SettingsManager;\r\n\tcwd: string;\r\n\tagentDir: string;\r\n}\r\n\r\n/** Show TUI config selector and return when closed */\r\nexport async function selectConfig(options: ConfigSelectorOptions): Promise<void> {\r\n\t// Initialize theme before showing TUI\r\n\tinitTheme(options.settingsManager.getTheme(), true);\r\n\r\n\treturn new Promise((resolve) => {\r\n\t\tconst ui = new TUI(new ProcessTerminal());\r\n\t\tlet resolved = false;\r\n\r\n\t\tconst selector = new ConfigSelectorComponent(\r\n\t\t\toptions.resolvedPaths,\r\n\t\t\toptions.settingsManager,\r\n\t\t\toptions.cwd,\r\n\t\t\toptions.agentDir,\r\n\t\t\t() => {\r\n\t\t\t\tif (!resolved) {\r\n\t\t\t\t\tresolved = true;\r\n\t\t\t\t\tui.stop();\r\n\t\t\t\t\tstopThemeWatcher();\r\n\t\t\t\t\tresolve();\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t() => {\r\n\t\t\t\tui.stop();\r\n\t\t\t\tstopThemeWatcher();\r\n\t\t\t\tprocess.exit(0);\r\n\t\t\t},\r\n\t\t\t() => ui.requestRender(),\r\n\t\t);\r\n\r\n\t\tui.addChild(selector);\r\n\t\tui.setFocus(selector.getResourceList());\r\n\t\tui.start();\r\n\t});\r\n}\r\n"]}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TUI config selector for `pi config` command
|
|
3
|
+
*/
|
|
4
|
+
import { ProcessTerminal, TUI } from "@mariozechner/pi-tui";
|
|
5
|
+
import { ConfigSelectorComponent } from "../modes/interactive/components/config-selector.js";
|
|
6
|
+
import { initTheme, stopThemeWatcher } from "../modes/interactive/theme/theme.js";
|
|
7
|
+
/** Show TUI config selector and return when closed */
|
|
8
|
+
export async function selectConfig(options) {
|
|
9
|
+
// Initialize theme before showing TUI
|
|
10
|
+
initTheme(options.settingsManager.getTheme(), true);
|
|
11
|
+
return new Promise((resolve) => {
|
|
12
|
+
const ui = new TUI(new ProcessTerminal());
|
|
13
|
+
let resolved = false;
|
|
14
|
+
const selector = new ConfigSelectorComponent(options.resolvedPaths, options.settingsManager, options.cwd, options.agentDir, () => {
|
|
15
|
+
if (!resolved) {
|
|
16
|
+
resolved = true;
|
|
17
|
+
ui.stop();
|
|
18
|
+
stopThemeWatcher();
|
|
19
|
+
resolve();
|
|
20
|
+
}
|
|
21
|
+
}, () => {
|
|
22
|
+
ui.stop();
|
|
23
|
+
stopThemeWatcher();
|
|
24
|
+
process.exit(0);
|
|
25
|
+
}, () => ui.requestRender());
|
|
26
|
+
ui.addChild(selector);
|
|
27
|
+
ui.setFocus(selector.getResourceList());
|
|
28
|
+
ui.start();
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=config-selector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-selector.js","sourceRoot":"","sources":["../../src/cli/config-selector.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAC;AAG5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,oDAAoD,CAAC;AAC7F,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AASlF,sDAAsD;AACtD,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAA8B,EAAiB;IACjF,sCAAsC;IACtC,SAAS,CAAC,OAAO,CAAC,eAAe,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,CAAC;IAEpD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;QAC/B,MAAM,EAAE,GAAG,IAAI,GAAG,CAAC,IAAI,eAAe,EAAE,CAAC,CAAC;QAC1C,IAAI,QAAQ,GAAG,KAAK,CAAC;QAErB,MAAM,QAAQ,GAAG,IAAI,uBAAuB,CAC3C,OAAO,CAAC,aAAa,EACrB,OAAO,CAAC,eAAe,EACvB,OAAO,CAAC,GAAG,EACX,OAAO,CAAC,QAAQ,EAChB,GAAG,EAAE,CAAC;YACL,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACf,QAAQ,GAAG,IAAI,CAAC;gBAChB,EAAE,CAAC,IAAI,EAAE,CAAC;gBACV,gBAAgB,EAAE,CAAC;gBACnB,OAAO,EAAE,CAAC;YACX,CAAC;QAAA,CACD,EACD,GAAG,EAAE,CAAC;YACL,EAAE,CAAC,IAAI,EAAE,CAAC;YACV,gBAAgB,EAAE,CAAC;YACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAAA,CAChB,EACD,GAAG,EAAE,CAAC,EAAE,CAAC,aAAa,EAAE,CACxB,CAAC;QAEF,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACtB,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC,CAAC;QACxC,EAAE,CAAC,KAAK,EAAE,CAAC;IAAA,CACX,CAAC,CAAC;AAAA,CACH","sourcesContent":["/**\r\n * TUI config selector for `pi config` command\r\n */\r\n\r\nimport { ProcessTerminal, TUI } from \"@mariozechner/pi-tui\";\r\nimport type { ResolvedPaths } from \"../core/package-manager.js\";\r\nimport type { SettingsManager } from \"../core/settings-manager.js\";\r\nimport { ConfigSelectorComponent } from \"../modes/interactive/components/config-selector.js\";\r\nimport { initTheme, stopThemeWatcher } from \"../modes/interactive/theme/theme.js\";\r\n\r\nexport interface ConfigSelectorOptions {\r\n\tresolvedPaths: ResolvedPaths;\r\n\tsettingsManager: SettingsManager;\r\n\tcwd: string;\r\n\tagentDir: string;\r\n}\r\n\r\n/** Show TUI config selector and return when closed */\r\nexport async function selectConfig(options: ConfigSelectorOptions): Promise<void> {\r\n\t// Initialize theme before showing TUI\r\n\tinitTheme(options.settingsManager.getTheme(), true);\r\n\r\n\treturn new Promise((resolve) => {\r\n\t\tconst ui = new TUI(new ProcessTerminal());\r\n\t\tlet resolved = false;\r\n\r\n\t\tconst selector = new ConfigSelectorComponent(\r\n\t\t\toptions.resolvedPaths,\r\n\t\t\toptions.settingsManager,\r\n\t\t\toptions.cwd,\r\n\t\t\toptions.agentDir,\r\n\t\t\t() => {\r\n\t\t\t\tif (!resolved) {\r\n\t\t\t\t\tresolved = true;\r\n\t\t\t\t\tui.stop();\r\n\t\t\t\t\tstopThemeWatcher();\r\n\t\t\t\t\tresolve();\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t() => {\r\n\t\t\t\tui.stop();\r\n\t\t\t\tstopThemeWatcher();\r\n\t\t\t\tprocess.exit(0);\r\n\t\t\t},\r\n\t\t\t() => ui.requestRender(),\r\n\t\t);\r\n\r\n\t\tui.addChild(selector);\r\n\t\tui.setFocus(selector.getResourceList());\r\n\t\tui.start();\r\n\t});\r\n}\r\n"]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Process @file CLI arguments into text content and image attachments
|
|
3
|
+
*/
|
|
4
|
+
import type { ImageContent } from "@mariozechner/pi-ai";
|
|
5
|
+
export interface ProcessedFiles {
|
|
6
|
+
text: string;
|
|
7
|
+
images: ImageContent[];
|
|
8
|
+
}
|
|
9
|
+
export interface ProcessFileOptions {
|
|
10
|
+
/** Whether to auto-resize images to 2000x2000 max. Default: true */
|
|
11
|
+
autoResizeImages?: boolean;
|
|
12
|
+
}
|
|
13
|
+
/** Process @file arguments into text content and image attachments */
|
|
14
|
+
export declare function processFileArguments(fileArgs: string[], options?: ProcessFileOptions): Promise<ProcessedFiles>;
|
|
15
|
+
//# sourceMappingURL=file-processor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-processor.d.ts","sourceRoot":"","sources":["../../src/cli/file-processor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAOxD,MAAM,WAAW,cAAc;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,YAAY,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB;IAClC,oEAAoE;IACpE,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,sEAAsE;AACtE,wBAAsB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,cAAc,CAAC,CAwEpH","sourcesContent":["/**\r\n * Process @file CLI arguments into text content and image attachments\r\n */\r\n\r\nimport { access, readFile, stat } from \"node:fs/promises\";\r\nimport type { ImageContent } from \"@mariozechner/pi-ai\";\r\nimport chalk from \"chalk\";\r\nimport { resolve } from \"path\";\r\nimport { resolveReadPath } from \"../core/tools/path-utils.js\";\r\nimport { formatDimensionNote, resizeImage } from \"../utils/image-resize.js\";\r\nimport { detectSupportedImageMimeTypeFromFile } from \"../utils/mime.js\";\r\n\r\nexport interface ProcessedFiles {\r\n\ttext: string;\r\n\timages: ImageContent[];\r\n}\r\n\r\nexport interface ProcessFileOptions {\r\n\t/** Whether to auto-resize images to 2000x2000 max. Default: true */\r\n\tautoResizeImages?: boolean;\r\n}\r\n\r\n/** Process @file arguments into text content and image attachments */\r\nexport async function processFileArguments(fileArgs: string[], options?: ProcessFileOptions): Promise<ProcessedFiles> {\r\n\tconst autoResizeImages = options?.autoResizeImages ?? true;\r\n\tlet text = \"\";\r\n\tconst images: ImageContent[] = [];\r\n\r\n\tfor (const fileArg of fileArgs) {\r\n\t\t// Expand and resolve path (handles ~ expansion and macOS screenshot Unicode spaces)\r\n\t\tconst absolutePath = resolve(resolveReadPath(fileArg, process.cwd()));\r\n\r\n\t\t// Check if file exists\r\n\t\ttry {\r\n\t\t\tawait access(absolutePath);\r\n\t\t} catch {\r\n\t\t\tconsole.error(chalk.red(`Error: File not found: ${absolutePath}`));\r\n\t\t\tprocess.exit(1);\r\n\t\t}\r\n\r\n\t\t// Check if file is empty\r\n\t\tconst stats = await stat(absolutePath);\r\n\t\tif (stats.size === 0) {\r\n\t\t\t// Skip empty files\r\n\t\t\tcontinue;\r\n\t\t}\r\n\r\n\t\tconst mimeType = await detectSupportedImageMimeTypeFromFile(absolutePath);\r\n\r\n\t\tif (mimeType) {\r\n\t\t\t// Handle image file\r\n\t\t\tconst content = await readFile(absolutePath);\r\n\t\t\tconst base64Content = content.toString(\"base64\");\r\n\r\n\t\t\tlet attachment: ImageContent;\r\n\t\t\tlet dimensionNote: string | undefined;\r\n\r\n\t\t\tif (autoResizeImages) {\r\n\t\t\t\tconst resized = await resizeImage({ type: \"image\", data: base64Content, mimeType });\r\n\t\t\t\tdimensionNote = formatDimensionNote(resized);\r\n\t\t\t\tattachment = {\r\n\t\t\t\t\ttype: \"image\",\r\n\t\t\t\t\tmimeType: resized.mimeType,\r\n\t\t\t\t\tdata: resized.data,\r\n\t\t\t\t};\r\n\t\t\t} else {\r\n\t\t\t\tattachment = {\r\n\t\t\t\t\ttype: \"image\",\r\n\t\t\t\t\tmimeType,\r\n\t\t\t\t\tdata: base64Content,\r\n\t\t\t\t};\r\n\t\t\t}\r\n\r\n\t\t\timages.push(attachment);\r\n\r\n\t\t\t// Add text reference to image with optional dimension note\r\n\t\t\tif (dimensionNote) {\r\n\t\t\t\ttext += `<file name=\"${absolutePath}\">${dimensionNote}</file>\\n`;\r\n\t\t\t} else {\r\n\t\t\t\ttext += `<file name=\"${absolutePath}\"></file>\\n`;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\t// Handle text file\r\n\t\t\ttry {\r\n\t\t\t\tconst content = await readFile(absolutePath, \"utf-8\");\r\n\t\t\t\ttext += `<file name=\"${absolutePath}\">\\n${content}\\n</file>\\n`;\r\n\t\t\t} catch (error: unknown) {\r\n\t\t\t\tconst message = error instanceof Error ? error.message : String(error);\r\n\t\t\t\tconsole.error(chalk.red(`Error: Could not read file ${absolutePath}: ${message}`));\r\n\t\t\t\tprocess.exit(1);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn { text, images };\r\n}\r\n"]}
|