@vandeepunk/pi-coding-agent 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +2564 -0
- package/README.md +555 -0
- package/dist/cli/args.d.ts +47 -0
- package/dist/cli/args.d.ts.map +1 -0
- package/dist/cli/args.js +286 -0
- package/dist/cli/args.js.map +1 -0
- package/dist/cli/config-selector.d.ts +14 -0
- package/dist/cli/config-selector.d.ts.map +1 -0
- package/dist/cli/config-selector.js +31 -0
- package/dist/cli/config-selector.js.map +1 -0
- package/dist/cli/file-processor.d.ts +15 -0
- package/dist/cli/file-processor.d.ts.map +1 -0
- package/dist/cli/file-processor.js +79 -0
- package/dist/cli/file-processor.js.map +1 -0
- package/dist/cli/list-models.d.ts +9 -0
- package/dist/cli/list-models.d.ts.map +1 -0
- package/dist/cli/list-models.js +92 -0
- package/dist/cli/list-models.js.map +1 -0
- package/dist/cli/session-picker.d.ts +9 -0
- package/dist/cli/session-picker.d.ts.map +1 -0
- package/dist/cli/session-picker.js +34 -0
- package/dist/cli/session-picker.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +11 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +68 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +203 -0
- package/dist/config.js.map +1 -0
- package/dist/core/agent-session.d.ts +574 -0
- package/dist/core/agent-session.d.ts.map +1 -0
- package/dist/core/agent-session.js +2260 -0
- package/dist/core/agent-session.js.map +1 -0
- package/dist/core/auth-storage.d.ts +102 -0
- package/dist/core/auth-storage.d.ts.map +1 -0
- package/dist/core/auth-storage.js +282 -0
- package/dist/core/auth-storage.js.map +1 -0
- package/dist/core/bash-executor.d.ts +47 -0
- package/dist/core/bash-executor.d.ts.map +1 -0
- package/dist/core/bash-executor.js +212 -0
- package/dist/core/bash-executor.js.map +1 -0
- package/dist/core/compaction/branch-summarization.d.ts +86 -0
- package/dist/core/compaction/branch-summarization.d.ts.map +1 -0
- package/dist/core/compaction/branch-summarization.js +242 -0
- package/dist/core/compaction/branch-summarization.js.map +1 -0
- package/dist/core/compaction/compaction.d.ts +121 -0
- package/dist/core/compaction/compaction.d.ts.map +1 -0
- package/dist/core/compaction/compaction.js +607 -0
- package/dist/core/compaction/compaction.js.map +1 -0
- package/dist/core/compaction/index.d.ts +7 -0
- package/dist/core/compaction/index.d.ts.map +1 -0
- package/dist/core/compaction/index.js +7 -0
- package/dist/core/compaction/index.js.map +1 -0
- package/dist/core/compaction/utils.d.ts +35 -0
- package/dist/core/compaction/utils.d.ts.map +1 -0
- package/dist/core/compaction/utils.js +138 -0
- package/dist/core/compaction/utils.js.map +1 -0
- package/dist/core/defaults.d.ts +3 -0
- package/dist/core/defaults.d.ts.map +1 -0
- package/dist/core/defaults.js +2 -0
- package/dist/core/defaults.js.map +1 -0
- package/dist/core/diagnostics.d.ts +15 -0
- package/dist/core/diagnostics.d.ts.map +1 -0
- package/dist/core/diagnostics.js +2 -0
- package/dist/core/diagnostics.js.map +1 -0
- package/dist/core/event-bus.d.ts +9 -0
- package/dist/core/event-bus.d.ts.map +1 -0
- package/dist/core/event-bus.js +25 -0
- package/dist/core/event-bus.js.map +1 -0
- package/dist/core/exec.d.ts +29 -0
- package/dist/core/exec.d.ts.map +1 -0
- package/dist/core/exec.js +71 -0
- package/dist/core/exec.js.map +1 -0
- package/dist/core/export-html/ansi-to-html.d.ts +22 -0
- package/dist/core/export-html/ansi-to-html.d.ts.map +1 -0
- package/dist/core/export-html/ansi-to-html.js +249 -0
- package/dist/core/export-html/ansi-to-html.js.map +1 -0
- package/dist/core/export-html/index.d.ts +34 -0
- package/dist/core/export-html/index.d.ts.map +1 -0
- package/dist/core/export-html/index.js +222 -0
- package/dist/core/export-html/index.js.map +1 -0
- package/dist/core/export-html/template.css +909 -0
- package/dist/core/export-html/template.html +54 -0
- package/dist/core/export-html/template.js +1549 -0
- package/dist/core/export-html/tool-renderer.d.ts +35 -0
- package/dist/core/export-html/tool-renderer.d.ts.map +1 -0
- package/dist/core/export-html/tool-renderer.js +57 -0
- package/dist/core/export-html/tool-renderer.js.map +1 -0
- package/dist/core/export-html/vendor/highlight.min.js +1213 -0
- package/dist/core/export-html/vendor/marked.min.js +6 -0
- package/dist/core/extensions/index.d.ts +11 -0
- package/dist/core/extensions/index.d.ts.map +1 -0
- package/dist/core/extensions/index.js +9 -0
- package/dist/core/extensions/index.js.map +1 -0
- package/dist/core/extensions/loader.d.ts +25 -0
- package/dist/core/extensions/loader.d.ts.map +1 -0
- package/dist/core/extensions/loader.js +400 -0
- package/dist/core/extensions/loader.js.map +1 -0
- package/dist/core/extensions/runner.d.ts +129 -0
- package/dist/core/extensions/runner.d.ts.map +1 -0
- package/dist/core/extensions/runner.js +576 -0
- package/dist/core/extensions/runner.js.map +1 -0
- package/dist/core/extensions/types.d.ts +928 -0
- package/dist/core/extensions/types.d.ts.map +1 -0
- package/dist/core/extensions/types.js +35 -0
- package/dist/core/extensions/types.js.map +1 -0
- package/dist/core/extensions/wrapper.d.ts +27 -0
- package/dist/core/extensions/wrapper.d.ts.map +1 -0
- package/dist/core/extensions/wrapper.js +102 -0
- package/dist/core/extensions/wrapper.js.map +1 -0
- package/dist/core/footer-data-provider.d.ts +32 -0
- package/dist/core/footer-data-provider.d.ts.map +1 -0
- package/dist/core/footer-data-provider.js +134 -0
- package/dist/core/footer-data-provider.js.map +1 -0
- package/dist/core/index.d.ts +9 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +9 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/keybindings.d.ts +55 -0
- package/dist/core/keybindings.d.ts.map +1 -0
- package/dist/core/keybindings.js +153 -0
- package/dist/core/keybindings.js.map +1 -0
- package/dist/core/messages.d.ts +77 -0
- package/dist/core/messages.d.ts.map +1 -0
- package/dist/core/messages.js +123 -0
- package/dist/core/messages.js.map +1 -0
- package/dist/core/model-registry.d.ts +100 -0
- package/dist/core/model-registry.d.ts.map +1 -0
- package/dist/core/model-registry.js +419 -0
- package/dist/core/model-registry.js.map +1 -0
- package/dist/core/model-resolver.d.ts +76 -0
- package/dist/core/model-resolver.d.ts.map +1 -0
- package/dist/core/model-resolver.js +313 -0
- package/dist/core/model-resolver.js.map +1 -0
- package/dist/core/package-manager.d.ts +131 -0
- package/dist/core/package-manager.d.ts.map +1 -0
- package/dist/core/package-manager.js +1290 -0
- package/dist/core/package-manager.js.map +1 -0
- package/dist/core/prompt-templates.d.ts +50 -0
- package/dist/core/prompt-templates.d.ts.map +1 -0
- package/dist/core/prompt-templates.js +251 -0
- package/dist/core/prompt-templates.js.map +1 -0
- package/dist/core/resolve-config-value.d.ts +17 -0
- package/dist/core/resolve-config-value.d.ts.map +1 -0
- package/dist/core/resolve-config-value.js +59 -0
- package/dist/core/resolve-config-value.js.map +1 -0
- package/dist/core/resource-loader.d.ts +184 -0
- package/dist/core/resource-loader.d.ts.map +1 -0
- package/dist/core/resource-loader.js +673 -0
- package/dist/core/resource-loader.js.map +1 -0
- package/dist/core/sdk.d.ts +90 -0
- package/dist/core/sdk.d.ts.map +1 -0
- package/dist/core/sdk.js +234 -0
- package/dist/core/sdk.js.map +1 -0
- package/dist/core/session-manager.d.ts +323 -0
- package/dist/core/session-manager.d.ts.map +1 -0
- package/dist/core/session-manager.js +1091 -0
- package/dist/core/session-manager.js.map +1 -0
- package/dist/core/settings-manager.d.ts +187 -0
- package/dist/core/settings-manager.d.ts.map +1 -0
- package/dist/core/settings-manager.js +552 -0
- package/dist/core/settings-manager.js.map +1 -0
- package/dist/core/skills.d.ts +58 -0
- package/dist/core/skills.d.ts.map +1 -0
- package/dist/core/skills.js +310 -0
- package/dist/core/skills.js.map +1 -0
- package/dist/core/slash-commands.d.ts +15 -0
- package/dist/core/slash-commands.d.ts.map +1 -0
- package/dist/core/slash-commands.js +21 -0
- package/dist/core/slash-commands.js.map +1 -0
- package/dist/core/system-prompt.d.ts +24 -0
- package/dist/core/system-prompt.d.ts.map +1 -0
- package/dist/core/system-prompt.js +137 -0
- package/dist/core/system-prompt.js.map +1 -0
- package/dist/core/timings.d.ts +7 -0
- package/dist/core/timings.d.ts.map +1 -0
- package/dist/core/timings.js +25 -0
- package/dist/core/timings.js.map +1 -0
- package/dist/core/tools/bash.d.ts +55 -0
- package/dist/core/tools/bash.d.ts.map +1 -0
- package/dist/core/tools/bash.js +242 -0
- package/dist/core/tools/bash.js.map +1 -0
- package/dist/core/tools/edit-diff.d.ts +63 -0
- package/dist/core/tools/edit-diff.d.ts.map +1 -0
- package/dist/core/tools/edit-diff.js +243 -0
- package/dist/core/tools/edit-diff.js.map +1 -0
- package/dist/core/tools/edit.d.ts +39 -0
- package/dist/core/tools/edit.d.ts.map +1 -0
- package/dist/core/tools/edit.js +146 -0
- package/dist/core/tools/edit.js.map +1 -0
- package/dist/core/tools/find.d.ts +39 -0
- package/dist/core/tools/find.d.ts.map +1 -0
- package/dist/core/tools/find.js +206 -0
- package/dist/core/tools/find.js.map +1 -0
- package/dist/core/tools/grep.d.ts +45 -0
- package/dist/core/tools/grep.d.ts.map +1 -0
- package/dist/core/tools/grep.js +239 -0
- package/dist/core/tools/grep.js.map +1 -0
- package/dist/core/tools/index.d.ts +73 -0
- package/dist/core/tools/index.d.ts.map +1 -0
- package/dist/core/tools/index.js +61 -0
- package/dist/core/tools/index.js.map +1 -0
- package/dist/core/tools/ls.d.ts +40 -0
- package/dist/core/tools/ls.d.ts.map +1 -0
- package/dist/core/tools/ls.js +118 -0
- package/dist/core/tools/ls.js.map +1 -0
- package/dist/core/tools/path-utils.d.ts +8 -0
- package/dist/core/tools/path-utils.d.ts.map +1 -0
- package/dist/core/tools/path-utils.js +81 -0
- package/dist/core/tools/path-utils.js.map +1 -0
- package/dist/core/tools/read.d.ts +39 -0
- package/dist/core/tools/read.d.ts.map +1 -0
- package/dist/core/tools/read.js +166 -0
- package/dist/core/tools/read.js.map +1 -0
- package/dist/core/tools/truncate.d.ts +70 -0
- package/dist/core/tools/truncate.d.ts.map +1 -0
- package/dist/core/tools/truncate.js +205 -0
- package/dist/core/tools/truncate.js.map +1 -0
- package/dist/core/tools/write.d.ts +29 -0
- package/dist/core/tools/write.d.ts.map +1 -0
- package/dist/core/tools/write.js +78 -0
- package/dist/core/tools/write.js.map +1 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +42 -0
- package/dist/index.js.map +1 -0
- package/dist/main.d.ts +8 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +623 -0
- package/dist/main.js.map +1 -0
- package/dist/migrations.d.ts +33 -0
- package/dist/migrations.d.ts.map +1 -0
- package/dist/migrations.js +261 -0
- package/dist/migrations.js.map +1 -0
- package/dist/modes/index.d.ts +9 -0
- package/dist/modes/index.d.ts.map +1 -0
- package/dist/modes/index.js +8 -0
- package/dist/modes/index.js.map +1 -0
- package/dist/modes/interactive/components/armin.d.ts +34 -0
- package/dist/modes/interactive/components/armin.d.ts.map +1 -0
- package/dist/modes/interactive/components/armin.js +333 -0
- package/dist/modes/interactive/components/armin.js.map +1 -0
- package/dist/modes/interactive/components/assistant-message.d.ts +16 -0
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/assistant-message.js +91 -0
- package/dist/modes/interactive/components/assistant-message.js.map +1 -0
- package/dist/modes/interactive/components/bash-execution.d.ts +35 -0
- package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -0
- package/dist/modes/interactive/components/bash-execution.js +162 -0
- package/dist/modes/interactive/components/bash-execution.js.map +1 -0
- package/dist/modes/interactive/components/bordered-loader.d.ts +16 -0
- package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -0
- package/dist/modes/interactive/components/bordered-loader.js +51 -0
- package/dist/modes/interactive/components/bordered-loader.js.map +1 -0
- package/dist/modes/interactive/components/branch-summary-message.d.ts +16 -0
- package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/branch-summary-message.js +44 -0
- package/dist/modes/interactive/components/branch-summary-message.js.map +1 -0
- package/dist/modes/interactive/components/compaction-summary-message.d.ts +16 -0
- package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/compaction-summary-message.js +45 -0
- package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -0
- package/dist/modes/interactive/components/config-selector.d.ts +71 -0
- package/dist/modes/interactive/components/config-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/config-selector.js +479 -0
- package/dist/modes/interactive/components/config-selector.js.map +1 -0
- package/dist/modes/interactive/components/countdown-timer.d.ts +14 -0
- package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -0
- package/dist/modes/interactive/components/countdown-timer.js +33 -0
- package/dist/modes/interactive/components/countdown-timer.js.map +1 -0
- package/dist/modes/interactive/components/custom-editor.d.ts +21 -0
- package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -0
- package/dist/modes/interactive/components/custom-editor.js +70 -0
- package/dist/modes/interactive/components/custom-editor.js.map +1 -0
- package/dist/modes/interactive/components/custom-message.d.ts +20 -0
- package/dist/modes/interactive/components/custom-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/custom-message.js +79 -0
- package/dist/modes/interactive/components/custom-message.js.map +1 -0
- package/dist/modes/interactive/components/daxnuts.d.ts +23 -0
- package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -0
- package/dist/modes/interactive/components/daxnuts.js +140 -0
- package/dist/modes/interactive/components/daxnuts.js.map +1 -0
- package/dist/modes/interactive/components/diff.d.ts +12 -0
- package/dist/modes/interactive/components/diff.d.ts.map +1 -0
- package/dist/modes/interactive/components/diff.js +133 -0
- package/dist/modes/interactive/components/diff.js.map +1 -0
- package/dist/modes/interactive/components/dynamic-border.d.ts +15 -0
- package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -0
- package/dist/modes/interactive/components/dynamic-border.js +21 -0
- package/dist/modes/interactive/components/dynamic-border.js.map +1 -0
- package/dist/modes/interactive/components/extension-editor.d.ts +17 -0
- package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -0
- package/dist/modes/interactive/components/extension-editor.js +102 -0
- package/dist/modes/interactive/components/extension-editor.js.map +1 -0
- package/dist/modes/interactive/components/extension-input.d.ts +23 -0
- package/dist/modes/interactive/components/extension-input.d.ts.map +1 -0
- package/dist/modes/interactive/components/extension-input.js +61 -0
- package/dist/modes/interactive/components/extension-input.js.map +1 -0
- package/dist/modes/interactive/components/extension-selector.d.ts +24 -0
- package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/extension-selector.js +78 -0
- package/dist/modes/interactive/components/extension-selector.js.map +1 -0
- package/dist/modes/interactive/components/footer.d.ts +26 -0
- package/dist/modes/interactive/components/footer.d.ts.map +1 -0
- package/dist/modes/interactive/components/footer.js +220 -0
- package/dist/modes/interactive/components/footer.js.map +1 -0
- package/dist/modes/interactive/components/index.d.ts +32 -0
- package/dist/modes/interactive/components/index.d.ts.map +1 -0
- package/dist/modes/interactive/components/index.js +33 -0
- package/dist/modes/interactive/components/index.js.map +1 -0
- package/dist/modes/interactive/components/keybinding-hints.d.ts +41 -0
- package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -0
- package/dist/modes/interactive/components/keybinding-hints.js +61 -0
- package/dist/modes/interactive/components/keybinding-hints.js.map +1 -0
- package/dist/modes/interactive/components/login-dialog.d.ts +42 -0
- package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -0
- package/dist/modes/interactive/components/login-dialog.js +145 -0
- package/dist/modes/interactive/components/login-dialog.js.map +1 -0
- package/dist/modes/interactive/components/model-selector.d.ts +47 -0
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/model-selector.js +266 -0
- package/dist/modes/interactive/components/model-selector.js.map +1 -0
- package/dist/modes/interactive/components/oauth-selector.d.ts +19 -0
- package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/oauth-selector.js +97 -0
- package/dist/modes/interactive/components/oauth-selector.js.map +1 -0
- package/dist/modes/interactive/components/scoped-models-selector.d.ts +49 -0
- package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/scoped-models-selector.js +270 -0
- package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -0
- package/dist/modes/interactive/components/session-selector-search.d.ts +23 -0
- package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -0
- package/dist/modes/interactive/components/session-selector-search.js +155 -0
- package/dist/modes/interactive/components/session-selector-search.js.map +1 -0
- package/dist/modes/interactive/components/session-selector.d.ts +95 -0
- package/dist/modes/interactive/components/session-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/session-selector.js +851 -0
- package/dist/modes/interactive/components/session-selector.js.map +1 -0
- package/dist/modes/interactive/components/settings-selector.d.ts +53 -0
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/settings-selector.js +277 -0
- package/dist/modes/interactive/components/settings-selector.js.map +1 -0
- package/dist/modes/interactive/components/show-images-selector.d.ts +10 -0
- package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/show-images-selector.js +35 -0
- package/dist/modes/interactive/components/show-images-selector.js.map +1 -0
- package/dist/modes/interactive/components/skill-invocation-message.d.ts +17 -0
- package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/skill-invocation-message.js +47 -0
- package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -0
- package/dist/modes/interactive/components/theme-selector.d.ts +11 -0
- package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/theme-selector.js +46 -0
- package/dist/modes/interactive/components/theme-selector.js.map +1 -0
- package/dist/modes/interactive/components/thinking-selector.d.ts +11 -0
- package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/thinking-selector.js +47 -0
- package/dist/modes/interactive/components/thinking-selector.js.map +1 -0
- package/dist/modes/interactive/components/tool-execution.d.ts +70 -0
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -0
- package/dist/modes/interactive/components/tool-execution.js +621 -0
- package/dist/modes/interactive/components/tool-execution.js.map +1 -0
- package/dist/modes/interactive/components/tree-selector.d.ts +68 -0
- package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/tree-selector.js +934 -0
- package/dist/modes/interactive/components/tree-selector.js.map +1 -0
- package/dist/modes/interactive/components/user-message-selector.d.ts +30 -0
- package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/user-message-selector.js +113 -0
- package/dist/modes/interactive/components/user-message-selector.js.map +1 -0
- package/dist/modes/interactive/components/user-message.d.ts +8 -0
- package/dist/modes/interactive/components/user-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/user-message.js +16 -0
- package/dist/modes/interactive/components/user-message.js.map +1 -0
- package/dist/modes/interactive/components/visual-truncate.d.ts +24 -0
- package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -0
- package/dist/modes/interactive/components/visual-truncate.js +33 -0
- package/dist/modes/interactive/components/visual-truncate.js.map +1 -0
- package/dist/modes/interactive/interactive-mode.d.ts +313 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-mode.js +3664 -0
- package/dist/modes/interactive/interactive-mode.js.map +1 -0
- package/dist/modes/interactive/theme/dark.json +85 -0
- package/dist/modes/interactive/theme/light.json +84 -0
- package/dist/modes/interactive/theme/theme-schema.json +335 -0
- package/dist/modes/interactive/theme/theme.d.ts +78 -0
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -0
- package/dist/modes/interactive/theme/theme.js +944 -0
- package/dist/modes/interactive/theme/theme.js.map +1 -0
- package/dist/modes/print-mode.d.ts +28 -0
- package/dist/modes/print-mode.d.ts.map +1 -0
- package/dist/modes/print-mode.js +98 -0
- package/dist/modes/print-mode.js.map +1 -0
- package/dist/modes/rpc/rpc-client.d.ts +217 -0
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -0
- package/dist/modes/rpc/rpc-client.js +405 -0
- package/dist/modes/rpc/rpc-client.js.map +1 -0
- package/dist/modes/rpc/rpc-mode.d.ts +20 -0
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -0
- package/dist/modes/rpc/rpc-mode.js +500 -0
- package/dist/modes/rpc/rpc-mode.js.map +1 -0
- package/dist/modes/rpc/rpc-types.d.ts +409 -0
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -0
- package/dist/modes/rpc/rpc-types.js +8 -0
- package/dist/modes/rpc/rpc-types.js.map +1 -0
- package/dist/utils/changelog.d.ts +21 -0
- package/dist/utils/changelog.d.ts.map +1 -0
- package/dist/utils/changelog.js +87 -0
- package/dist/utils/changelog.js.map +1 -0
- package/dist/utils/clipboard-image.d.ts +11 -0
- package/dist/utils/clipboard-image.d.ts.map +1 -0
- package/dist/utils/clipboard-image.js +162 -0
- package/dist/utils/clipboard-image.js.map +1 -0
- package/dist/utils/clipboard-native.d.ts +7 -0
- package/dist/utils/clipboard-native.d.ts.map +1 -0
- package/dist/utils/clipboard-native.js +14 -0
- package/dist/utils/clipboard-native.js.map +1 -0
- package/dist/utils/clipboard.d.ts +2 -0
- package/dist/utils/clipboard.d.ts.map +1 -0
- package/dist/utils/clipboard.js +67 -0
- package/dist/utils/clipboard.js.map +1 -0
- package/dist/utils/frontmatter.d.ts +8 -0
- package/dist/utils/frontmatter.d.ts.map +1 -0
- package/dist/utils/frontmatter.js +26 -0
- package/dist/utils/frontmatter.js.map +1 -0
- package/dist/utils/git.d.ts +2 -0
- package/dist/utils/git.d.ts.map +1 -0
- package/dist/utils/git.js +6 -0
- package/dist/utils/git.js.map +1 -0
- package/dist/utils/image-convert.d.ts +9 -0
- package/dist/utils/image-convert.d.ts.map +1 -0
- package/dist/utils/image-convert.js +35 -0
- package/dist/utils/image-convert.js.map +1 -0
- package/dist/utils/image-resize.d.ts +36 -0
- package/dist/utils/image-resize.d.ts.map +1 -0
- package/dist/utils/image-resize.js +181 -0
- package/dist/utils/image-resize.js.map +1 -0
- package/dist/utils/mime.d.ts +2 -0
- package/dist/utils/mime.d.ts.map +1 -0
- package/dist/utils/mime.js +26 -0
- package/dist/utils/mime.js.map +1 -0
- package/dist/utils/photon.d.ts +21 -0
- package/dist/utils/photon.d.ts.map +1 -0
- package/dist/utils/photon.js +121 -0
- package/dist/utils/photon.js.map +1 -0
- package/dist/utils/shell.d.ts +26 -0
- package/dist/utils/shell.d.ts.map +1 -0
- package/dist/utils/shell.js +186 -0
- package/dist/utils/shell.js.map +1 -0
- package/dist/utils/sleep.d.ts +5 -0
- package/dist/utils/sleep.d.ts.map +1 -0
- package/dist/utils/sleep.js +17 -0
- package/dist/utils/sleep.js.map +1 -0
- package/dist/utils/tools-manager.d.ts +3 -0
- package/dist/utils/tools-manager.d.ts.map +1 -0
- package/dist/utils/tools-manager.js +201 -0
- package/dist/utils/tools-manager.js.map +1 -0
- package/docs/compaction.md +390 -0
- package/docs/custom-provider.md +539 -0
- package/docs/development.md +69 -0
- package/docs/extensions.md +1827 -0
- package/docs/images/doom-extension.png +0 -0
- package/docs/images/exy.png +0 -0
- package/docs/images/interactive-mode.png +0 -0
- package/docs/images/tree-view.png +0 -0
- package/docs/json.md +79 -0
- package/docs/keybindings.md +174 -0
- package/docs/models.md +254 -0
- package/docs/packages.md +191 -0
- package/docs/prompt-templates.md +67 -0
- package/docs/providers.md +168 -0
- package/docs/rpc.md +1311 -0
- package/docs/sdk.md +957 -0
- package/docs/session.md +412 -0
- package/docs/settings.md +221 -0
- package/docs/shell-aliases.md +13 -0
- package/docs/skills.md +227 -0
- package/docs/terminal-setup.md +70 -0
- package/docs/termux.md +127 -0
- package/docs/themes.md +295 -0
- package/docs/tree.md +219 -0
- package/docs/tui.md +887 -0
- package/docs/windows.md +17 -0
- package/examples/README.md +25 -0
- package/examples/extensions/README.md +202 -0
- package/examples/extensions/antigravity-image-gen.ts +413 -0
- package/examples/extensions/auto-commit-on-exit.ts +49 -0
- package/examples/extensions/bash-spawn-hook.ts +30 -0
- package/examples/extensions/bookmark.ts +50 -0
- package/examples/extensions/claude-rules.ts +86 -0
- package/examples/extensions/commands.ts +72 -0
- package/examples/extensions/confirm-destructive.ts +59 -0
- package/examples/extensions/custom-compaction.ts +114 -0
- package/examples/extensions/custom-footer.ts +64 -0
- package/examples/extensions/custom-header.ts +73 -0
- package/examples/extensions/custom-provider-anthropic/index.ts +604 -0
- package/examples/extensions/custom-provider-anthropic/package-lock.json +24 -0
- package/examples/extensions/custom-provider-anthropic/package.json +19 -0
- package/examples/extensions/custom-provider-gitlab-duo/index.ts +349 -0
- package/examples/extensions/custom-provider-gitlab-duo/package.json +16 -0
- package/examples/extensions/custom-provider-gitlab-duo/test.ts +82 -0
- package/examples/extensions/custom-provider-qwen-cli/index.ts +345 -0
- package/examples/extensions/custom-provider-qwen-cli/package.json +16 -0
- package/examples/extensions/dirty-repo-guard.ts +56 -0
- package/examples/extensions/doom-overlay/README.md +46 -0
- package/examples/extensions/doom-overlay/doom/build/doom.js +21 -0
- package/examples/extensions/doom-overlay/doom/build/doom.wasm +0 -0
- package/examples/extensions/doom-overlay/doom/build.sh +152 -0
- package/examples/extensions/doom-overlay/doom/doomgeneric_pi.c +72 -0
- package/examples/extensions/doom-overlay/doom-component.ts +132 -0
- package/examples/extensions/doom-overlay/doom-engine.ts +173 -0
- package/examples/extensions/doom-overlay/doom-keys.ts +104 -0
- package/examples/extensions/doom-overlay/index.ts +74 -0
- package/examples/extensions/doom-overlay/wad-finder.ts +51 -0
- package/examples/extensions/dynamic-resources/SKILL.md +8 -0
- package/examples/extensions/dynamic-resources/dynamic.json +79 -0
- package/examples/extensions/dynamic-resources/dynamic.md +5 -0
- package/examples/extensions/dynamic-resources/index.ts +15 -0
- package/examples/extensions/event-bus.ts +43 -0
- package/examples/extensions/file-trigger.ts +41 -0
- package/examples/extensions/git-checkpoint.ts +53 -0
- package/examples/extensions/handoff.ts +150 -0
- package/examples/extensions/hello.ts +25 -0
- package/examples/extensions/inline-bash.ts +94 -0
- package/examples/extensions/input-transform.ts +43 -0
- package/examples/extensions/interactive-shell.ts +196 -0
- package/examples/extensions/mac-system-theme.ts +47 -0
- package/examples/extensions/message-renderer.ts +59 -0
- package/examples/extensions/minimal-mode.ts +426 -0
- package/examples/extensions/modal-editor.ts +85 -0
- package/examples/extensions/model-status.ts +31 -0
- package/examples/extensions/notify.ts +55 -0
- package/examples/extensions/overlay-qa-tests.ts +881 -0
- package/examples/extensions/overlay-test.ts +150 -0
- package/examples/extensions/permission-gate.ts +34 -0
- package/examples/extensions/pirate.ts +47 -0
- package/examples/extensions/plan-mode/README.md +65 -0
- package/examples/extensions/plan-mode/index.ts +340 -0
- package/examples/extensions/plan-mode/utils.ts +168 -0
- package/examples/extensions/preset.ts +398 -0
- package/examples/extensions/protected-paths.ts +30 -0
- package/examples/extensions/qna.ts +119 -0
- package/examples/extensions/question.ts +264 -0
- package/examples/extensions/questionnaire.ts +427 -0
- package/examples/extensions/rainbow-editor.ts +88 -0
- package/examples/extensions/rpc-demo.ts +124 -0
- package/examples/extensions/sandbox/index.ts +318 -0
- package/examples/extensions/sandbox/package-lock.json +92 -0
- package/examples/extensions/sandbox/package.json +19 -0
- package/examples/extensions/send-user-message.ts +97 -0
- package/examples/extensions/session-name.ts +27 -0
- package/examples/extensions/shutdown-command.ts +63 -0
- package/examples/extensions/snake.ts +343 -0
- package/examples/extensions/space-invaders.ts +560 -0
- package/examples/extensions/ssh.ts +220 -0
- package/examples/extensions/status-line.ts +40 -0
- package/examples/extensions/subagent/README.md +172 -0
- package/examples/extensions/subagent/agents/planner.md +37 -0
- package/examples/extensions/subagent/agents/reviewer.md +35 -0
- package/examples/extensions/subagent/agents/scout.md +50 -0
- package/examples/extensions/subagent/agents/worker.md +24 -0
- package/examples/extensions/subagent/agents.ts +127 -0
- package/examples/extensions/subagent/index.ts +963 -0
- package/examples/extensions/subagent/prompts/implement-and-review.md +10 -0
- package/examples/extensions/subagent/prompts/implement.md +10 -0
- package/examples/extensions/subagent/prompts/scout-and-plan.md +9 -0
- package/examples/extensions/summarize.ts +195 -0
- package/examples/extensions/system-prompt-header.ts +17 -0
- package/examples/extensions/timed-confirm.ts +70 -0
- package/examples/extensions/titlebar-spinner.ts +58 -0
- package/examples/extensions/todo.ts +299 -0
- package/examples/extensions/tool-override.ts +143 -0
- package/examples/extensions/tools.ts +146 -0
- package/examples/extensions/trigger-compact.ts +40 -0
- package/examples/extensions/truncated-tool.ts +192 -0
- package/examples/extensions/widget-placement.ts +17 -0
- package/examples/extensions/with-deps/index.ts +36 -0
- package/examples/extensions/with-deps/package-lock.json +31 -0
- package/examples/extensions/with-deps/package.json +22 -0
- package/examples/rpc-extension-ui.ts +632 -0
- package/examples/sdk/01-minimal.ts +22 -0
- package/examples/sdk/02-custom-model.ts +49 -0
- package/examples/sdk/03-custom-prompt.ts +55 -0
- package/examples/sdk/04-skills.ts +46 -0
- package/examples/sdk/05-tools.ts +56 -0
- package/examples/sdk/06-extensions.ts +88 -0
- package/examples/sdk/07-context-files.ts +40 -0
- package/examples/sdk/08-prompt-templates.ts +47 -0
- package/examples/sdk/09-api-keys-and-oauth.ts +48 -0
- package/examples/sdk/10-settings.ts +38 -0
- package/examples/sdk/11-sessions.ts +48 -0
- package/examples/sdk/12-full-control.ts +82 -0
- package/examples/sdk/README.md +144 -0
- package/package.json +97 -0
package/docs/sdk.md
ADDED
|
@@ -0,0 +1,957 @@
|
|
|
1
|
+
> pi can help you use the SDK. Ask it to build an integration for your use case.
|
|
2
|
+
|
|
3
|
+
# SDK
|
|
4
|
+
|
|
5
|
+
The SDK provides programmatic access to pi's agent capabilities. Use it to embed pi in other applications, build custom interfaces, or integrate with automated workflows.
|
|
6
|
+
|
|
7
|
+
**Example use cases:**
|
|
8
|
+
- Build a custom UI (web, desktop, mobile)
|
|
9
|
+
- Integrate agent capabilities into existing applications
|
|
10
|
+
- Create automated pipelines with agent reasoning
|
|
11
|
+
- Build custom tools that spawn sub-agents
|
|
12
|
+
- Test agent behavior programmatically
|
|
13
|
+
|
|
14
|
+
See [examples/sdk/](../examples/sdk/) for working examples from minimal to full control.
|
|
15
|
+
|
|
16
|
+
## Quick Start
|
|
17
|
+
|
|
18
|
+
```typescript
|
|
19
|
+
import { AuthStorage, createAgentSession, ModelRegistry, SessionManager } from "@mariozechner/pi-coding-agent";
|
|
20
|
+
|
|
21
|
+
// Set up credential storage and model registry
|
|
22
|
+
const authStorage = new AuthStorage();
|
|
23
|
+
const modelRegistry = new ModelRegistry(authStorage);
|
|
24
|
+
|
|
25
|
+
const { session } = await createAgentSession({
|
|
26
|
+
sessionManager: SessionManager.inMemory(),
|
|
27
|
+
authStorage,
|
|
28
|
+
modelRegistry,
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
session.subscribe((event) => {
|
|
32
|
+
if (event.type === "message_update" && event.assistantMessageEvent.type === "text_delta") {
|
|
33
|
+
process.stdout.write(event.assistantMessageEvent.delta);
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
await session.prompt("What files are in the current directory?");
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Installation
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
npm install @mariozechner/pi-coding-agent
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
The SDK is included in the main package. No separate installation needed.
|
|
47
|
+
|
|
48
|
+
## Core Concepts
|
|
49
|
+
|
|
50
|
+
### createAgentSession()
|
|
51
|
+
|
|
52
|
+
The main factory function. Creates an `AgentSession` with configurable options.
|
|
53
|
+
|
|
54
|
+
`createAgentSession()` uses a `ResourceLoader` to supply extensions, skills, prompt templates, themes, and context files. If you do not provide one, it uses `DefaultResourceLoader` with standard discovery.
|
|
55
|
+
|
|
56
|
+
```typescript
|
|
57
|
+
import { createAgentSession } from "@mariozechner/pi-coding-agent";
|
|
58
|
+
|
|
59
|
+
// Minimal: defaults with DefaultResourceLoader
|
|
60
|
+
const { session } = await createAgentSession();
|
|
61
|
+
|
|
62
|
+
// Custom: override specific options
|
|
63
|
+
const { session } = await createAgentSession({
|
|
64
|
+
model: myModel,
|
|
65
|
+
tools: [readTool, bashTool],
|
|
66
|
+
sessionManager: SessionManager.inMemory(),
|
|
67
|
+
});
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### AgentSession
|
|
71
|
+
|
|
72
|
+
The session manages the agent lifecycle, message history, and event streaming.
|
|
73
|
+
|
|
74
|
+
```typescript
|
|
75
|
+
interface AgentSession {
|
|
76
|
+
// Send a prompt and wait for completion
|
|
77
|
+
// If streaming, requires streamingBehavior option to queue the message
|
|
78
|
+
prompt(text: string, options?: PromptOptions): Promise<void>;
|
|
79
|
+
|
|
80
|
+
// Queue messages during streaming
|
|
81
|
+
steer(text: string): Promise<void>; // Interrupt: delivered after current tool, skips remaining
|
|
82
|
+
followUp(text: string): Promise<void>; // Wait: delivered only when agent finishes
|
|
83
|
+
|
|
84
|
+
// Subscribe to events (returns unsubscribe function)
|
|
85
|
+
subscribe(listener: (event: AgentSessionEvent) => void): () => void;
|
|
86
|
+
|
|
87
|
+
// Session info
|
|
88
|
+
sessionFile: string | undefined; // undefined for in-memory
|
|
89
|
+
sessionId: string;
|
|
90
|
+
|
|
91
|
+
// Model control
|
|
92
|
+
setModel(model: Model): Promise<void>;
|
|
93
|
+
setThinkingLevel(level: ThinkingLevel): void;
|
|
94
|
+
cycleModel(): Promise<ModelCycleResult | undefined>;
|
|
95
|
+
cycleThinkingLevel(): ThinkingLevel | undefined;
|
|
96
|
+
|
|
97
|
+
// State access
|
|
98
|
+
agent: Agent;
|
|
99
|
+
model: Model | undefined;
|
|
100
|
+
thinkingLevel: ThinkingLevel;
|
|
101
|
+
messages: AgentMessage[];
|
|
102
|
+
isStreaming: boolean;
|
|
103
|
+
|
|
104
|
+
// Session management
|
|
105
|
+
newSession(options?: { parentSession?: string }): Promise<boolean>; // Returns false if cancelled by hook
|
|
106
|
+
switchSession(sessionPath: string): Promise<boolean>;
|
|
107
|
+
|
|
108
|
+
// Forking
|
|
109
|
+
fork(entryId: string): Promise<{ selectedText: string; cancelled: boolean }>; // Creates new session file
|
|
110
|
+
navigateTree(targetId: string, options?: { summarize?: boolean; customInstructions?: string; replaceInstructions?: boolean; label?: string }): Promise<{ editorText?: string; cancelled: boolean }>; // In-place navigation
|
|
111
|
+
|
|
112
|
+
// Hook message injection
|
|
113
|
+
sendHookMessage(message: HookMessage, triggerTurn?: boolean): Promise<void>;
|
|
114
|
+
|
|
115
|
+
// Compaction
|
|
116
|
+
compact(customInstructions?: string): Promise<CompactionResult>;
|
|
117
|
+
abortCompaction(): void;
|
|
118
|
+
|
|
119
|
+
// Abort current operation
|
|
120
|
+
abort(): Promise<void>;
|
|
121
|
+
|
|
122
|
+
// Cleanup
|
|
123
|
+
dispose(): void;
|
|
124
|
+
}
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### Prompting and Message Queueing
|
|
128
|
+
|
|
129
|
+
The `prompt()` method handles prompt templates, extension commands, and message sending:
|
|
130
|
+
|
|
131
|
+
```typescript
|
|
132
|
+
// Basic prompt (when not streaming)
|
|
133
|
+
await session.prompt("What files are here?");
|
|
134
|
+
|
|
135
|
+
// With images
|
|
136
|
+
await session.prompt("What's in this image?", {
|
|
137
|
+
images: [{ type: "image", source: { type: "base64", mediaType: "image/png", data: "..." } }]
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
// During streaming: must specify how to queue the message
|
|
141
|
+
await session.prompt("Stop and do this instead", { streamingBehavior: "steer" });
|
|
142
|
+
await session.prompt("After you're done, also check X", { streamingBehavior: "followUp" });
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
**Behavior:**
|
|
146
|
+
- **Extension commands** (e.g., `/mycommand`): Execute immediately, even during streaming. They manage their own LLM interaction via `pi.sendMessage()`.
|
|
147
|
+
- **File-based prompt templates** (from `.md` files): Expanded to their content before sending/queueing.
|
|
148
|
+
- **During streaming without `streamingBehavior`**: Throws an error. Use `steer()` or `followUp()` directly, or specify the option.
|
|
149
|
+
|
|
150
|
+
For explicit queueing during streaming:
|
|
151
|
+
|
|
152
|
+
```typescript
|
|
153
|
+
// Interrupt the agent (delivered after current tool, skips remaining tools)
|
|
154
|
+
await session.steer("New instruction");
|
|
155
|
+
|
|
156
|
+
// Wait for agent to finish (delivered only when agent stops)
|
|
157
|
+
await session.followUp("After you're done, also do this");
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
Both `steer()` and `followUp()` expand file-based prompt templates but error on extension commands (extension commands cannot be queued).
|
|
161
|
+
|
|
162
|
+
### Agent and AgentState
|
|
163
|
+
|
|
164
|
+
The `Agent` class (from `@mariozechner/pi-agent-core`) handles the core LLM interaction. Access it via `session.agent`.
|
|
165
|
+
|
|
166
|
+
```typescript
|
|
167
|
+
// Access current state
|
|
168
|
+
const state = session.agent.state;
|
|
169
|
+
|
|
170
|
+
// state.messages: AgentMessage[] - conversation history
|
|
171
|
+
// state.model: Model - current model
|
|
172
|
+
// state.thinkingLevel: ThinkingLevel - current thinking level
|
|
173
|
+
// state.systemPrompt: string - system prompt
|
|
174
|
+
// state.tools: Tool[] - available tools
|
|
175
|
+
|
|
176
|
+
// Replace messages (useful for branching, restoration)
|
|
177
|
+
session.agent.replaceMessages(messages);
|
|
178
|
+
|
|
179
|
+
// Wait for agent to finish processing
|
|
180
|
+
await session.agent.waitForIdle();
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
### Events
|
|
184
|
+
|
|
185
|
+
Subscribe to events to receive streaming output and lifecycle notifications.
|
|
186
|
+
|
|
187
|
+
```typescript
|
|
188
|
+
session.subscribe((event) => {
|
|
189
|
+
switch (event.type) {
|
|
190
|
+
// Streaming text from assistant
|
|
191
|
+
case "message_update":
|
|
192
|
+
if (event.assistantMessageEvent.type === "text_delta") {
|
|
193
|
+
process.stdout.write(event.assistantMessageEvent.delta);
|
|
194
|
+
}
|
|
195
|
+
if (event.assistantMessageEvent.type === "thinking_delta") {
|
|
196
|
+
// Thinking output (if thinking enabled)
|
|
197
|
+
}
|
|
198
|
+
break;
|
|
199
|
+
|
|
200
|
+
// Tool execution
|
|
201
|
+
case "tool_execution_start":
|
|
202
|
+
console.log(`Tool: ${event.toolName}`);
|
|
203
|
+
break;
|
|
204
|
+
case "tool_execution_update":
|
|
205
|
+
// Streaming tool output
|
|
206
|
+
break;
|
|
207
|
+
case "tool_execution_end":
|
|
208
|
+
console.log(`Result: ${event.isError ? "error" : "success"}`);
|
|
209
|
+
break;
|
|
210
|
+
|
|
211
|
+
// Message lifecycle
|
|
212
|
+
case "message_start":
|
|
213
|
+
// New message starting
|
|
214
|
+
break;
|
|
215
|
+
case "message_end":
|
|
216
|
+
// Message complete
|
|
217
|
+
break;
|
|
218
|
+
|
|
219
|
+
// Agent lifecycle
|
|
220
|
+
case "agent_start":
|
|
221
|
+
// Agent started processing prompt
|
|
222
|
+
break;
|
|
223
|
+
case "agent_end":
|
|
224
|
+
// Agent finished (event.messages contains new messages)
|
|
225
|
+
break;
|
|
226
|
+
|
|
227
|
+
// Turn lifecycle (one LLM response + tool calls)
|
|
228
|
+
case "turn_start":
|
|
229
|
+
break;
|
|
230
|
+
case "turn_end":
|
|
231
|
+
// event.message: assistant response
|
|
232
|
+
// event.toolResults: tool results from this turn
|
|
233
|
+
break;
|
|
234
|
+
|
|
235
|
+
// Session events (auto-compaction, retry)
|
|
236
|
+
case "auto_compaction_start":
|
|
237
|
+
case "auto_compaction_end":
|
|
238
|
+
case "auto_retry_start":
|
|
239
|
+
case "auto_retry_end":
|
|
240
|
+
break;
|
|
241
|
+
}
|
|
242
|
+
});
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
## Options Reference
|
|
246
|
+
|
|
247
|
+
### Directories
|
|
248
|
+
|
|
249
|
+
```typescript
|
|
250
|
+
const { session } = await createAgentSession({
|
|
251
|
+
// Working directory for DefaultResourceLoader discovery
|
|
252
|
+
cwd: process.cwd(), // default
|
|
253
|
+
|
|
254
|
+
// Global config directory
|
|
255
|
+
agentDir: "~/.pi/agent", // default (expands ~)
|
|
256
|
+
});
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
`cwd` is used by `DefaultResourceLoader` for:
|
|
260
|
+
- Project extensions (`.pi/extensions/`)
|
|
261
|
+
- Project skills (`.pi/skills/`)
|
|
262
|
+
- Project prompts (`.pi/prompts/`)
|
|
263
|
+
- Context files (`AGENTS.md` walking up from cwd)
|
|
264
|
+
- Session directory naming
|
|
265
|
+
|
|
266
|
+
`agentDir` is used by `DefaultResourceLoader` for:
|
|
267
|
+
- Global extensions (`extensions/`)
|
|
268
|
+
- Global skills (`skills/`)
|
|
269
|
+
- Global prompts (`prompts/`)
|
|
270
|
+
- Global context file (`AGENTS.md`)
|
|
271
|
+
- Settings (`settings.json`)
|
|
272
|
+
- Custom models (`models.json`)
|
|
273
|
+
- Credentials (`auth.json`)
|
|
274
|
+
- Sessions (`sessions/`)
|
|
275
|
+
|
|
276
|
+
When you pass a custom `ResourceLoader`, `cwd` and `agentDir` no longer control resource discovery. They still influence session naming and tool path resolution.
|
|
277
|
+
|
|
278
|
+
### Model
|
|
279
|
+
|
|
280
|
+
```typescript
|
|
281
|
+
import { getModel } from "@mariozechner/pi-ai";
|
|
282
|
+
import { AuthStorage, ModelRegistry } from "@mariozechner/pi-coding-agent";
|
|
283
|
+
|
|
284
|
+
const authStorage = new AuthStorage();
|
|
285
|
+
const modelRegistry = new ModelRegistry(authStorage);
|
|
286
|
+
|
|
287
|
+
// Find specific built-in model (doesn't check if API key exists)
|
|
288
|
+
const opus = getModel("anthropic", "claude-opus-4-5");
|
|
289
|
+
if (!opus) throw new Error("Model not found");
|
|
290
|
+
|
|
291
|
+
// Find any model by provider/id, including custom models from models.json
|
|
292
|
+
// (doesn't check if API key exists)
|
|
293
|
+
const customModel = modelRegistry.find("my-provider", "my-model");
|
|
294
|
+
|
|
295
|
+
// Get only models that have valid API keys configured
|
|
296
|
+
const available = await modelRegistry.getAvailable();
|
|
297
|
+
|
|
298
|
+
const { session } = await createAgentSession({
|
|
299
|
+
model: opus,
|
|
300
|
+
thinkingLevel: "medium", // off, minimal, low, medium, high, xhigh
|
|
301
|
+
|
|
302
|
+
// Models for cycling (Ctrl+P in interactive mode)
|
|
303
|
+
scopedModels: [
|
|
304
|
+
{ model: opus, thinkingLevel: "high" },
|
|
305
|
+
{ model: haiku, thinkingLevel: "off" },
|
|
306
|
+
],
|
|
307
|
+
|
|
308
|
+
authStorage,
|
|
309
|
+
modelRegistry,
|
|
310
|
+
});
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
If no model is provided:
|
|
314
|
+
1. Tries to restore from session (if continuing)
|
|
315
|
+
2. Uses default from settings
|
|
316
|
+
3. Falls back to first available model
|
|
317
|
+
|
|
318
|
+
> See [examples/sdk/02-custom-model.ts](../examples/sdk/02-custom-model.ts)
|
|
319
|
+
|
|
320
|
+
### API Keys and OAuth
|
|
321
|
+
|
|
322
|
+
API key resolution priority (handled by AuthStorage):
|
|
323
|
+
1. Runtime overrides (via `setRuntimeApiKey`, not persisted)
|
|
324
|
+
2. Stored credentials in `auth.json` (API keys or OAuth tokens)
|
|
325
|
+
3. Environment variables (`ANTHROPIC_API_KEY`, `OPENAI_API_KEY`, etc.)
|
|
326
|
+
4. Fallback resolver (for custom provider keys from `models.json`)
|
|
327
|
+
|
|
328
|
+
```typescript
|
|
329
|
+
import { AuthStorage, ModelRegistry } from "@mariozechner/pi-coding-agent";
|
|
330
|
+
|
|
331
|
+
// Default: uses ~/.pi/agent/auth.json and ~/.pi/agent/models.json
|
|
332
|
+
const authStorage = new AuthStorage();
|
|
333
|
+
const modelRegistry = new ModelRegistry(authStorage);
|
|
334
|
+
|
|
335
|
+
const { session } = await createAgentSession({
|
|
336
|
+
sessionManager: SessionManager.inMemory(),
|
|
337
|
+
authStorage,
|
|
338
|
+
modelRegistry,
|
|
339
|
+
});
|
|
340
|
+
|
|
341
|
+
// Runtime API key override (not persisted to disk)
|
|
342
|
+
authStorage.setRuntimeApiKey("anthropic", "sk-my-temp-key");
|
|
343
|
+
|
|
344
|
+
// Custom auth storage location
|
|
345
|
+
const customAuth = new AuthStorage("/my/app/auth.json");
|
|
346
|
+
const customRegistry = new ModelRegistry(customAuth, "/my/app/models.json");
|
|
347
|
+
|
|
348
|
+
const { session } = await createAgentSession({
|
|
349
|
+
sessionManager: SessionManager.inMemory(),
|
|
350
|
+
authStorage: customAuth,
|
|
351
|
+
modelRegistry: customRegistry,
|
|
352
|
+
});
|
|
353
|
+
|
|
354
|
+
// No custom models.json (built-in models only)
|
|
355
|
+
const simpleRegistry = new ModelRegistry(authStorage);
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
> See [examples/sdk/09-api-keys-and-oauth.ts](../examples/sdk/09-api-keys-and-oauth.ts)
|
|
359
|
+
|
|
360
|
+
### System Prompt
|
|
361
|
+
|
|
362
|
+
Use a `ResourceLoader` to override the system prompt:
|
|
363
|
+
|
|
364
|
+
```typescript
|
|
365
|
+
import { createAgentSession, DefaultResourceLoader } from "@mariozechner/pi-coding-agent";
|
|
366
|
+
|
|
367
|
+
const loader = new DefaultResourceLoader({
|
|
368
|
+
systemPromptOverride: () => "You are a helpful assistant.",
|
|
369
|
+
});
|
|
370
|
+
await loader.reload();
|
|
371
|
+
|
|
372
|
+
const { session } = await createAgentSession({ resourceLoader: loader });
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
> See [examples/sdk/03-custom-prompt.ts](../examples/sdk/03-custom-prompt.ts)
|
|
376
|
+
|
|
377
|
+
### Tools
|
|
378
|
+
|
|
379
|
+
```typescript
|
|
380
|
+
import {
|
|
381
|
+
codingTools, // read, bash, edit, write (default)
|
|
382
|
+
readOnlyTools, // read, grep, find, ls
|
|
383
|
+
readTool, bashTool, editTool, writeTool,
|
|
384
|
+
grepTool, findTool, lsTool,
|
|
385
|
+
} from "@mariozechner/pi-coding-agent";
|
|
386
|
+
|
|
387
|
+
// Use built-in tool set
|
|
388
|
+
const { session } = await createAgentSession({
|
|
389
|
+
tools: readOnlyTools,
|
|
390
|
+
});
|
|
391
|
+
|
|
392
|
+
// Pick specific tools
|
|
393
|
+
const { session } = await createAgentSession({
|
|
394
|
+
tools: [readTool, bashTool, grepTool],
|
|
395
|
+
});
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
#### Tools with Custom cwd
|
|
399
|
+
|
|
400
|
+
**Important:** The pre-built tool instances (`readTool`, `bashTool`, etc.) use `process.cwd()` for path resolution. When you specify a custom `cwd` AND provide explicit `tools`, you must use the tool factory functions to ensure paths resolve correctly:
|
|
401
|
+
|
|
402
|
+
```typescript
|
|
403
|
+
import {
|
|
404
|
+
createCodingTools, // Creates [read, bash, edit, write] for specific cwd
|
|
405
|
+
createReadOnlyTools, // Creates [read, grep, find, ls] for specific cwd
|
|
406
|
+
createReadTool,
|
|
407
|
+
createBashTool,
|
|
408
|
+
createEditTool,
|
|
409
|
+
createWriteTool,
|
|
410
|
+
createGrepTool,
|
|
411
|
+
createFindTool,
|
|
412
|
+
createLsTool,
|
|
413
|
+
} from "@mariozechner/pi-coding-agent";
|
|
414
|
+
|
|
415
|
+
const cwd = "/path/to/project";
|
|
416
|
+
|
|
417
|
+
// Use factory for tool sets
|
|
418
|
+
const { session } = await createAgentSession({
|
|
419
|
+
cwd,
|
|
420
|
+
tools: createCodingTools(cwd), // Tools resolve paths relative to cwd
|
|
421
|
+
});
|
|
422
|
+
|
|
423
|
+
// Or pick specific tools
|
|
424
|
+
const { session } = await createAgentSession({
|
|
425
|
+
cwd,
|
|
426
|
+
tools: [createReadTool(cwd), createBashTool(cwd), createGrepTool(cwd)],
|
|
427
|
+
});
|
|
428
|
+
```
|
|
429
|
+
|
|
430
|
+
**When you don't need factories:**
|
|
431
|
+
- If you omit `tools`, pi automatically creates them with the correct `cwd`
|
|
432
|
+
- If you use `process.cwd()` as your `cwd`, the pre-built instances work fine
|
|
433
|
+
|
|
434
|
+
**When you must use factories:**
|
|
435
|
+
- When you specify both `cwd` (different from `process.cwd()`) AND `tools`
|
|
436
|
+
|
|
437
|
+
> See [examples/sdk/05-tools.ts](../examples/sdk/05-tools.ts)
|
|
438
|
+
|
|
439
|
+
### Custom Tools
|
|
440
|
+
|
|
441
|
+
```typescript
|
|
442
|
+
import { Type } from "@sinclair/typebox";
|
|
443
|
+
import { createAgentSession, type ToolDefinition } from "@mariozechner/pi-coding-agent";
|
|
444
|
+
|
|
445
|
+
// Inline custom tool
|
|
446
|
+
const myTool: ToolDefinition = {
|
|
447
|
+
name: "my_tool",
|
|
448
|
+
label: "My Tool",
|
|
449
|
+
description: "Does something useful",
|
|
450
|
+
parameters: Type.Object({
|
|
451
|
+
input: Type.String({ description: "Input value" }),
|
|
452
|
+
}),
|
|
453
|
+
execute: async (toolCallId, params, onUpdate, ctx, signal) => ({
|
|
454
|
+
content: [{ type: "text", text: `Result: ${params.input}` }],
|
|
455
|
+
details: {},
|
|
456
|
+
}),
|
|
457
|
+
};
|
|
458
|
+
|
|
459
|
+
// Pass custom tools directly
|
|
460
|
+
const { session } = await createAgentSession({
|
|
461
|
+
customTools: [myTool],
|
|
462
|
+
});
|
|
463
|
+
```
|
|
464
|
+
|
|
465
|
+
Custom tools passed via `customTools` are combined with extension-registered tools. Extensions loaded by the ResourceLoader can also register tools via `pi.registerTool()`.
|
|
466
|
+
|
|
467
|
+
> See [examples/sdk/05-tools.ts](../examples/sdk/05-tools.ts)
|
|
468
|
+
|
|
469
|
+
### Extensions
|
|
470
|
+
|
|
471
|
+
Extensions are loaded by the `ResourceLoader`. `DefaultResourceLoader` discovers extensions from `~/.pi/agent/extensions/`, `.pi/extensions/`, and settings.json extension sources.
|
|
472
|
+
|
|
473
|
+
```typescript
|
|
474
|
+
import { createAgentSession, DefaultResourceLoader } from "@mariozechner/pi-coding-agent";
|
|
475
|
+
|
|
476
|
+
const loader = new DefaultResourceLoader({
|
|
477
|
+
additionalExtensionPaths: ["/path/to/my-extension.ts"],
|
|
478
|
+
extensionFactories: [
|
|
479
|
+
(pi) => {
|
|
480
|
+
pi.on("agent_start", () => {
|
|
481
|
+
console.log("[Inline Extension] Agent starting");
|
|
482
|
+
});
|
|
483
|
+
},
|
|
484
|
+
],
|
|
485
|
+
});
|
|
486
|
+
await loader.reload();
|
|
487
|
+
|
|
488
|
+
const { session } = await createAgentSession({ resourceLoader: loader });
|
|
489
|
+
```
|
|
490
|
+
|
|
491
|
+
Extensions can register tools, subscribe to events, add commands, and more. See [extensions.md](extensions.md) for the full API.
|
|
492
|
+
|
|
493
|
+
**Event Bus:** Extensions can communicate via `pi.events`. Pass a shared `eventBus` to `DefaultResourceLoader` if you need to emit or listen from outside:
|
|
494
|
+
|
|
495
|
+
```typescript
|
|
496
|
+
import { createEventBus, DefaultResourceLoader } from "@mariozechner/pi-coding-agent";
|
|
497
|
+
|
|
498
|
+
const eventBus = createEventBus();
|
|
499
|
+
const loader = new DefaultResourceLoader({
|
|
500
|
+
eventBus,
|
|
501
|
+
});
|
|
502
|
+
await loader.reload();
|
|
503
|
+
|
|
504
|
+
eventBus.on("my-extension:status", (data) => console.log(data));
|
|
505
|
+
```
|
|
506
|
+
|
|
507
|
+
> See [examples/sdk/06-extensions.ts](../examples/sdk/06-extensions.ts) and [docs/extensions.md](extensions.md)
|
|
508
|
+
|
|
509
|
+
### Skills
|
|
510
|
+
|
|
511
|
+
```typescript
|
|
512
|
+
import {
|
|
513
|
+
createAgentSession,
|
|
514
|
+
DefaultResourceLoader,
|
|
515
|
+
type Skill,
|
|
516
|
+
} from "@mariozechner/pi-coding-agent";
|
|
517
|
+
|
|
518
|
+
const customSkill: Skill = {
|
|
519
|
+
name: "my-skill",
|
|
520
|
+
description: "Custom instructions",
|
|
521
|
+
filePath: "/path/to/SKILL.md",
|
|
522
|
+
baseDir: "/path/to",
|
|
523
|
+
source: "custom",
|
|
524
|
+
};
|
|
525
|
+
|
|
526
|
+
const loader = new DefaultResourceLoader({
|
|
527
|
+
skillsOverride: (current) => ({
|
|
528
|
+
skills: [...current.skills, customSkill],
|
|
529
|
+
diagnostics: current.diagnostics,
|
|
530
|
+
}),
|
|
531
|
+
});
|
|
532
|
+
await loader.reload();
|
|
533
|
+
|
|
534
|
+
const { session } = await createAgentSession({ resourceLoader: loader });
|
|
535
|
+
```
|
|
536
|
+
|
|
537
|
+
> See [examples/sdk/04-skills.ts](../examples/sdk/04-skills.ts)
|
|
538
|
+
|
|
539
|
+
### Context Files
|
|
540
|
+
|
|
541
|
+
```typescript
|
|
542
|
+
import { createAgentSession, DefaultResourceLoader } from "@mariozechner/pi-coding-agent";
|
|
543
|
+
|
|
544
|
+
const loader = new DefaultResourceLoader({
|
|
545
|
+
agentsFilesOverride: (current) => ({
|
|
546
|
+
agentsFiles: [
|
|
547
|
+
...current.agentsFiles,
|
|
548
|
+
{ path: "/virtual/AGENTS.md", content: "# Guidelines\n\n- Be concise" },
|
|
549
|
+
],
|
|
550
|
+
}),
|
|
551
|
+
});
|
|
552
|
+
await loader.reload();
|
|
553
|
+
|
|
554
|
+
const { session } = await createAgentSession({ resourceLoader: loader });
|
|
555
|
+
```
|
|
556
|
+
|
|
557
|
+
> See [examples/sdk/07-context-files.ts](../examples/sdk/07-context-files.ts)
|
|
558
|
+
|
|
559
|
+
### Slash Commands
|
|
560
|
+
|
|
561
|
+
```typescript
|
|
562
|
+
import {
|
|
563
|
+
createAgentSession,
|
|
564
|
+
DefaultResourceLoader,
|
|
565
|
+
type PromptTemplate,
|
|
566
|
+
} from "@mariozechner/pi-coding-agent";
|
|
567
|
+
|
|
568
|
+
const customCommand: PromptTemplate = {
|
|
569
|
+
name: "deploy",
|
|
570
|
+
description: "Deploy the application",
|
|
571
|
+
source: "(custom)",
|
|
572
|
+
content: "# Deploy\n\n1. Build\n2. Test\n3. Deploy",
|
|
573
|
+
};
|
|
574
|
+
|
|
575
|
+
const loader = new DefaultResourceLoader({
|
|
576
|
+
promptsOverride: (current) => ({
|
|
577
|
+
prompts: [...current.prompts, customCommand],
|
|
578
|
+
diagnostics: current.diagnostics,
|
|
579
|
+
}),
|
|
580
|
+
});
|
|
581
|
+
await loader.reload();
|
|
582
|
+
|
|
583
|
+
const { session } = await createAgentSession({ resourceLoader: loader });
|
|
584
|
+
```
|
|
585
|
+
|
|
586
|
+
> See [examples/sdk/08-prompt-templates.ts](../examples/sdk/08-prompt-templates.ts)
|
|
587
|
+
|
|
588
|
+
### Session Management
|
|
589
|
+
|
|
590
|
+
Sessions use a tree structure with `id`/`parentId` linking, enabling in-place branching.
|
|
591
|
+
|
|
592
|
+
```typescript
|
|
593
|
+
import { createAgentSession, SessionManager } from "@mariozechner/pi-coding-agent";
|
|
594
|
+
|
|
595
|
+
// In-memory (no persistence)
|
|
596
|
+
const { session } = await createAgentSession({
|
|
597
|
+
sessionManager: SessionManager.inMemory(),
|
|
598
|
+
});
|
|
599
|
+
|
|
600
|
+
// New persistent session
|
|
601
|
+
const { session } = await createAgentSession({
|
|
602
|
+
sessionManager: SessionManager.create(process.cwd()),
|
|
603
|
+
});
|
|
604
|
+
|
|
605
|
+
// Continue most recent
|
|
606
|
+
const { session, modelFallbackMessage } = await createAgentSession({
|
|
607
|
+
sessionManager: SessionManager.continueRecent(process.cwd()),
|
|
608
|
+
});
|
|
609
|
+
if (modelFallbackMessage) {
|
|
610
|
+
console.log("Note:", modelFallbackMessage);
|
|
611
|
+
}
|
|
612
|
+
|
|
613
|
+
// Open specific file
|
|
614
|
+
const { session } = await createAgentSession({
|
|
615
|
+
sessionManager: SessionManager.open("/path/to/session.jsonl"),
|
|
616
|
+
});
|
|
617
|
+
|
|
618
|
+
// List available sessions (async with optional progress callback)
|
|
619
|
+
const sessions = await SessionManager.list(process.cwd());
|
|
620
|
+
for (const info of sessions) {
|
|
621
|
+
console.log(`${info.id}: ${info.firstMessage} (${info.messageCount} messages, cwd: ${info.cwd})`);
|
|
622
|
+
}
|
|
623
|
+
|
|
624
|
+
// List all sessions across all projects
|
|
625
|
+
const allSessions = await SessionManager.listAll((loaded, total) => {
|
|
626
|
+
console.log(`Loading ${loaded}/${total}...`);
|
|
627
|
+
});
|
|
628
|
+
|
|
629
|
+
// Custom session directory (no cwd encoding)
|
|
630
|
+
const customDir = "/path/to/my-sessions";
|
|
631
|
+
const { session } = await createAgentSession({
|
|
632
|
+
sessionManager: SessionManager.create(process.cwd(), customDir),
|
|
633
|
+
});
|
|
634
|
+
```
|
|
635
|
+
|
|
636
|
+
**SessionManager tree API:**
|
|
637
|
+
|
|
638
|
+
```typescript
|
|
639
|
+
const sm = SessionManager.open("/path/to/session.jsonl");
|
|
640
|
+
|
|
641
|
+
// Tree traversal
|
|
642
|
+
const entries = sm.getEntries(); // All entries (excludes header)
|
|
643
|
+
const tree = sm.getTree(); // Full tree structure
|
|
644
|
+
const path = sm.getPath(); // Path from root to current leaf
|
|
645
|
+
const leaf = sm.getLeafEntry(); // Current leaf entry
|
|
646
|
+
const entry = sm.getEntry(id); // Get entry by ID
|
|
647
|
+
const children = sm.getChildren(id); // Direct children of entry
|
|
648
|
+
|
|
649
|
+
// Labels
|
|
650
|
+
const label = sm.getLabel(id); // Get label for entry
|
|
651
|
+
sm.appendLabelChange(id, "checkpoint"); // Set label
|
|
652
|
+
|
|
653
|
+
// Branching
|
|
654
|
+
sm.branch(entryId); // Move leaf to earlier entry
|
|
655
|
+
sm.branchWithSummary(id, "Summary..."); // Branch with context summary
|
|
656
|
+
sm.createBranchedSession(leafId); // Extract path to new file
|
|
657
|
+
```
|
|
658
|
+
|
|
659
|
+
> See [examples/sdk/11-sessions.ts](../examples/sdk/11-sessions.ts) and [docs/session.md](session.md)
|
|
660
|
+
|
|
661
|
+
### Settings Management
|
|
662
|
+
|
|
663
|
+
```typescript
|
|
664
|
+
import { createAgentSession, SettingsManager, SessionManager } from "@mariozechner/pi-coding-agent";
|
|
665
|
+
|
|
666
|
+
// Default: loads from files (global + project merged)
|
|
667
|
+
const { session } = await createAgentSession({
|
|
668
|
+
settingsManager: SettingsManager.create(),
|
|
669
|
+
});
|
|
670
|
+
|
|
671
|
+
// With overrides
|
|
672
|
+
const settingsManager = SettingsManager.create();
|
|
673
|
+
settingsManager.applyOverrides({
|
|
674
|
+
compaction: { enabled: false },
|
|
675
|
+
retry: { enabled: true, maxRetries: 5 },
|
|
676
|
+
});
|
|
677
|
+
const { session } = await createAgentSession({ settingsManager });
|
|
678
|
+
|
|
679
|
+
// In-memory (no file I/O, for testing)
|
|
680
|
+
const { session } = await createAgentSession({
|
|
681
|
+
settingsManager: SettingsManager.inMemory({ compaction: { enabled: false } }),
|
|
682
|
+
sessionManager: SessionManager.inMemory(),
|
|
683
|
+
});
|
|
684
|
+
|
|
685
|
+
// Custom directories
|
|
686
|
+
const { session } = await createAgentSession({
|
|
687
|
+
settingsManager: SettingsManager.create("/custom/cwd", "/custom/agent"),
|
|
688
|
+
});
|
|
689
|
+
```
|
|
690
|
+
|
|
691
|
+
**Static factories:**
|
|
692
|
+
- `SettingsManager.create(cwd?, agentDir?)` - Load from files
|
|
693
|
+
- `SettingsManager.inMemory(settings?)` - No file I/O
|
|
694
|
+
|
|
695
|
+
**Project-specific settings:**
|
|
696
|
+
|
|
697
|
+
Settings load from two locations and merge:
|
|
698
|
+
1. Global: `~/.pi/agent/settings.json`
|
|
699
|
+
2. Project: `<cwd>/.pi/settings.json`
|
|
700
|
+
|
|
701
|
+
Project overrides global. Nested objects merge keys. Setters modify global settings by default.
|
|
702
|
+
|
|
703
|
+
> See [examples/sdk/10-settings.ts](../examples/sdk/10-settings.ts)
|
|
704
|
+
|
|
705
|
+
## ResourceLoader
|
|
706
|
+
|
|
707
|
+
Use `DefaultResourceLoader` to discover extensions, skills, prompts, themes, and context files.
|
|
708
|
+
|
|
709
|
+
```typescript
|
|
710
|
+
import {
|
|
711
|
+
DefaultResourceLoader,
|
|
712
|
+
getAgentDir,
|
|
713
|
+
} from "@mariozechner/pi-coding-agent";
|
|
714
|
+
|
|
715
|
+
const loader = new DefaultResourceLoader({
|
|
716
|
+
cwd,
|
|
717
|
+
agentDir: getAgentDir(),
|
|
718
|
+
});
|
|
719
|
+
await loader.reload();
|
|
720
|
+
|
|
721
|
+
const extensions = loader.getExtensions();
|
|
722
|
+
const skills = loader.getSkills();
|
|
723
|
+
const prompts = loader.getPrompts();
|
|
724
|
+
const themes = loader.getThemes();
|
|
725
|
+
const contextFiles = loader.getAgentsFiles().agentsFiles;
|
|
726
|
+
```
|
|
727
|
+
|
|
728
|
+
## Return Value
|
|
729
|
+
|
|
730
|
+
`createAgentSession()` returns:
|
|
731
|
+
|
|
732
|
+
```typescript
|
|
733
|
+
interface CreateAgentSessionResult {
|
|
734
|
+
// The session
|
|
735
|
+
session: AgentSession;
|
|
736
|
+
|
|
737
|
+
// Extensions result (for runner setup)
|
|
738
|
+
extensionsResult: LoadExtensionsResult;
|
|
739
|
+
|
|
740
|
+
// Warning if session model couldn't be restored
|
|
741
|
+
modelFallbackMessage?: string;
|
|
742
|
+
}
|
|
743
|
+
|
|
744
|
+
interface LoadExtensionsResult {
|
|
745
|
+
extensions: Extension[];
|
|
746
|
+
errors: Array<{ path: string; error: string }>;
|
|
747
|
+
runtime: ExtensionRuntime;
|
|
748
|
+
}
|
|
749
|
+
```
|
|
750
|
+
|
|
751
|
+
## Complete Example
|
|
752
|
+
|
|
753
|
+
```typescript
|
|
754
|
+
import { getModel } from "@mariozechner/pi-ai";
|
|
755
|
+
import { Type } from "@sinclair/typebox";
|
|
756
|
+
import {
|
|
757
|
+
AuthStorage,
|
|
758
|
+
createAgentSession,
|
|
759
|
+
DefaultResourceLoader,
|
|
760
|
+
ModelRegistry,
|
|
761
|
+
SessionManager,
|
|
762
|
+
SettingsManager,
|
|
763
|
+
readTool,
|
|
764
|
+
bashTool,
|
|
765
|
+
type ToolDefinition,
|
|
766
|
+
} from "@mariozechner/pi-coding-agent";
|
|
767
|
+
|
|
768
|
+
// Set up auth storage (custom location)
|
|
769
|
+
const authStorage = new AuthStorage("/custom/agent/auth.json");
|
|
770
|
+
|
|
771
|
+
// Runtime API key override (not persisted)
|
|
772
|
+
if (process.env.MY_KEY) {
|
|
773
|
+
authStorage.setRuntimeApiKey("anthropic", process.env.MY_KEY);
|
|
774
|
+
}
|
|
775
|
+
|
|
776
|
+
// Model registry (no custom models.json)
|
|
777
|
+
const modelRegistry = new ModelRegistry(authStorage);
|
|
778
|
+
|
|
779
|
+
// Inline tool
|
|
780
|
+
const statusTool: ToolDefinition = {
|
|
781
|
+
name: "status",
|
|
782
|
+
label: "Status",
|
|
783
|
+
description: "Get system status",
|
|
784
|
+
parameters: Type.Object({}),
|
|
785
|
+
execute: async () => ({
|
|
786
|
+
content: [{ type: "text", text: `Uptime: ${process.uptime()}s` }],
|
|
787
|
+
details: {},
|
|
788
|
+
}),
|
|
789
|
+
};
|
|
790
|
+
|
|
791
|
+
const model = getModel("anthropic", "claude-opus-4-5");
|
|
792
|
+
if (!model) throw new Error("Model not found");
|
|
793
|
+
|
|
794
|
+
// In-memory settings with overrides
|
|
795
|
+
const settingsManager = SettingsManager.inMemory({
|
|
796
|
+
compaction: { enabled: false },
|
|
797
|
+
retry: { enabled: true, maxRetries: 2 },
|
|
798
|
+
});
|
|
799
|
+
|
|
800
|
+
const loader = new DefaultResourceLoader({
|
|
801
|
+
cwd: process.cwd(),
|
|
802
|
+
agentDir: "/custom/agent",
|
|
803
|
+
settingsManager,
|
|
804
|
+
systemPromptOverride: () => "You are a minimal assistant. Be concise.",
|
|
805
|
+
});
|
|
806
|
+
await loader.reload();
|
|
807
|
+
|
|
808
|
+
const { session } = await createAgentSession({
|
|
809
|
+
cwd: process.cwd(),
|
|
810
|
+
agentDir: "/custom/agent",
|
|
811
|
+
|
|
812
|
+
model,
|
|
813
|
+
thinkingLevel: "off",
|
|
814
|
+
authStorage,
|
|
815
|
+
modelRegistry,
|
|
816
|
+
|
|
817
|
+
tools: [readTool, bashTool],
|
|
818
|
+
customTools: [statusTool],
|
|
819
|
+
resourceLoader: loader,
|
|
820
|
+
|
|
821
|
+
sessionManager: SessionManager.inMemory(),
|
|
822
|
+
settingsManager,
|
|
823
|
+
});
|
|
824
|
+
|
|
825
|
+
session.subscribe((event) => {
|
|
826
|
+
if (event.type === "message_update" && event.assistantMessageEvent.type === "text_delta") {
|
|
827
|
+
process.stdout.write(event.assistantMessageEvent.delta);
|
|
828
|
+
}
|
|
829
|
+
});
|
|
830
|
+
|
|
831
|
+
await session.prompt("Get status and list files.");
|
|
832
|
+
```
|
|
833
|
+
|
|
834
|
+
## Run Modes
|
|
835
|
+
|
|
836
|
+
The SDK exports run mode utilities for building custom interfaces on top of `createAgentSession()`:
|
|
837
|
+
|
|
838
|
+
### InteractiveMode
|
|
839
|
+
|
|
840
|
+
Full TUI interactive mode with editor, chat history, and all built-in commands:
|
|
841
|
+
|
|
842
|
+
```typescript
|
|
843
|
+
import { createAgentSession, InteractiveMode } from "@mariozechner/pi-coding-agent";
|
|
844
|
+
|
|
845
|
+
const { session } = await createAgentSession({ /* ... */ });
|
|
846
|
+
|
|
847
|
+
const mode = new InteractiveMode(session, {
|
|
848
|
+
// All optional
|
|
849
|
+
migratedProviders: [], // Show migration warnings
|
|
850
|
+
modelFallbackMessage: undefined, // Show model restore warning
|
|
851
|
+
initialMessage: "Hello", // Send on startup
|
|
852
|
+
initialImages: [], // Images with initial message
|
|
853
|
+
initialMessages: [], // Additional startup prompts
|
|
854
|
+
});
|
|
855
|
+
|
|
856
|
+
await mode.run(); // Blocks until exit
|
|
857
|
+
```
|
|
858
|
+
|
|
859
|
+
### runPrintMode
|
|
860
|
+
|
|
861
|
+
Single-shot mode: send prompts, output result, exit:
|
|
862
|
+
|
|
863
|
+
```typescript
|
|
864
|
+
import { createAgentSession, runPrintMode } from "@mariozechner/pi-coding-agent";
|
|
865
|
+
|
|
866
|
+
const { session } = await createAgentSession({ /* ... */ });
|
|
867
|
+
|
|
868
|
+
await runPrintMode(session, {
|
|
869
|
+
mode: "text", // "text" for final response, "json" for all events
|
|
870
|
+
initialMessage: "Hello", // First message (can include @file content)
|
|
871
|
+
initialImages: [], // Images with initial message
|
|
872
|
+
messages: ["Follow up"], // Additional prompts
|
|
873
|
+
});
|
|
874
|
+
```
|
|
875
|
+
|
|
876
|
+
### runRpcMode
|
|
877
|
+
|
|
878
|
+
JSON-RPC mode for subprocess integration:
|
|
879
|
+
|
|
880
|
+
```typescript
|
|
881
|
+
import { createAgentSession, runRpcMode } from "@mariozechner/pi-coding-agent";
|
|
882
|
+
|
|
883
|
+
const { session } = await createAgentSession({ /* ... */ });
|
|
884
|
+
|
|
885
|
+
await runRpcMode(session); // Reads JSON commands from stdin, writes to stdout
|
|
886
|
+
```
|
|
887
|
+
|
|
888
|
+
See [RPC documentation](rpc.md) for the JSON protocol.
|
|
889
|
+
|
|
890
|
+
## RPC Mode Alternative
|
|
891
|
+
|
|
892
|
+
For subprocess-based integration without building with the SDK, use the CLI directly:
|
|
893
|
+
|
|
894
|
+
```bash
|
|
895
|
+
pi --mode rpc --no-session
|
|
896
|
+
```
|
|
897
|
+
|
|
898
|
+
See [RPC documentation](rpc.md) for the JSON protocol.
|
|
899
|
+
|
|
900
|
+
The SDK is preferred when:
|
|
901
|
+
- You want type safety
|
|
902
|
+
- You're in the same Node.js process
|
|
903
|
+
- You need direct access to agent state
|
|
904
|
+
- You want to customize tools/extensions programmatically
|
|
905
|
+
|
|
906
|
+
RPC mode is preferred when:
|
|
907
|
+
- You're integrating from another language
|
|
908
|
+
- You want process isolation
|
|
909
|
+
- You're building a language-agnostic client
|
|
910
|
+
|
|
911
|
+
## Exports
|
|
912
|
+
|
|
913
|
+
The main entry point exports:
|
|
914
|
+
|
|
915
|
+
```typescript
|
|
916
|
+
// Factory
|
|
917
|
+
createAgentSession
|
|
918
|
+
|
|
919
|
+
// Auth and Models
|
|
920
|
+
AuthStorage
|
|
921
|
+
ModelRegistry
|
|
922
|
+
|
|
923
|
+
// Resource loading
|
|
924
|
+
DefaultResourceLoader
|
|
925
|
+
type ResourceLoader
|
|
926
|
+
createEventBus
|
|
927
|
+
|
|
928
|
+
// Helpers
|
|
929
|
+
|
|
930
|
+
// Session management
|
|
931
|
+
SessionManager
|
|
932
|
+
SettingsManager
|
|
933
|
+
|
|
934
|
+
// Built-in tools (use process.cwd())
|
|
935
|
+
codingTools
|
|
936
|
+
readOnlyTools
|
|
937
|
+
readTool, bashTool, editTool, writeTool
|
|
938
|
+
grepTool, findTool, lsTool
|
|
939
|
+
|
|
940
|
+
// Tool factories (for custom cwd)
|
|
941
|
+
createCodingTools
|
|
942
|
+
createReadOnlyTools
|
|
943
|
+
createReadTool, createBashTool, createEditTool, createWriteTool
|
|
944
|
+
createGrepTool, createFindTool, createLsTool
|
|
945
|
+
|
|
946
|
+
// Types
|
|
947
|
+
type CreateAgentSessionOptions
|
|
948
|
+
type CreateAgentSessionResult
|
|
949
|
+
type ExtensionFactory
|
|
950
|
+
type ExtensionAPI
|
|
951
|
+
type ToolDefinition
|
|
952
|
+
type Skill
|
|
953
|
+
type PromptTemplate
|
|
954
|
+
type Tool
|
|
955
|
+
```
|
|
956
|
+
|
|
957
|
+
For extension types, see [extensions.md](extensions.md) for the full API.
|