apex-code 0.5.0 → 0.5.2
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 +263 -5
- package/README.md +624 -0
- package/dist/bun/cli.d.ts +3 -1
- package/dist/bun/cli.d.ts.map +1 -1
- package/dist/bun/cli.js +3 -9
- package/dist/bun/cli.js.map +1 -1
- package/dist/bun/runtime-setup.d.ts +2 -0
- package/dist/bun/runtime-setup.d.ts.map +1 -0
- package/dist/bun/runtime-setup.js +9 -0
- package/dist/bun/runtime-setup.js.map +1 -0
- package/dist/bun/sandbox-env-setup.d.ts +2 -0
- package/dist/bun/sandbox-env-setup.d.ts.map +1 -0
- package/dist/bun/sandbox-env-setup.js +4 -0
- package/dist/bun/sandbox-env-setup.js.map +1 -0
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +16 -5
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/config-selector.d.ts.map +1 -1
- package/dist/cli/config-selector.js +2 -1
- package/dist/cli/config-selector.js.map +1 -1
- package/dist/cli/file-processor.d.ts +1 -1
- package/dist/cli/file-processor.d.ts.map +1 -1
- package/dist/cli/file-processor.js.map +1 -1
- package/dist/cli/session-picker.d.ts +1 -1
- package/dist/cli/session-picker.d.ts.map +1 -1
- package/dist/cli/session-picker.js.map +1 -1
- package/dist/cli/setup.d.ts +2 -0
- package/dist/cli/setup.d.ts.map +1 -0
- package/dist/cli/setup.js +13 -0
- package/dist/cli/setup.js.map +1 -0
- package/dist/config.d.ts +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +1 -0
- package/dist/config.js.map +1 -1
- package/dist/core/agent-session-runtime.d.ts.map +1 -1
- package/dist/core/agent-session-runtime.js +16 -8
- package/dist/core/agent-session-runtime.js.map +1 -1
- package/dist/core/agent-session.d.ts +85 -15
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +685 -266
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/auth-storage.d.ts +4 -0
- package/dist/core/auth-storage.d.ts.map +1 -1
- package/dist/core/auth-storage.js +55 -0
- package/dist/core/auth-storage.js.map +1 -1
- package/dist/core/bug-report.d.ts +176 -0
- package/dist/core/bug-report.d.ts.map +1 -0
- package/dist/core/bug-report.js +291 -0
- package/dist/core/bug-report.js.map +1 -0
- package/dist/core/cache-stats.d.ts.map +1 -1
- package/dist/core/cache-stats.js +12 -1
- package/dist/core/cache-stats.js.map +1 -1
- package/dist/core/cache-warmer.d.ts +103 -0
- package/dist/core/cache-warmer.d.ts.map +1 -0
- package/dist/core/cache-warmer.js +356 -0
- package/dist/core/cache-warmer.js.map +1 -0
- package/dist/core/compaction/branch-summarization.d.ts +1 -1
- package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
- package/dist/core/compaction/branch-summarization.js +4 -3
- package/dist/core/compaction/branch-summarization.js.map +1 -1
- package/dist/core/compaction/compaction.d.ts +5 -3
- package/dist/core/compaction/compaction.d.ts.map +1 -1
- package/dist/core/compaction/compaction.js +163 -66
- package/dist/core/compaction/compaction.js.map +1 -1
- package/dist/core/context/pipeline.d.ts +8 -8
- package/dist/core/context/pipeline.d.ts.map +1 -1
- package/dist/core/context/pipeline.js +21 -12
- package/dist/core/context/pipeline.js.map +1 -1
- package/dist/core/crash-log.d.ts +27 -0
- package/dist/core/crash-log.d.ts.map +1 -0
- package/dist/core/crash-log.js +139 -0
- package/dist/core/crash-log.js.map +1 -0
- package/dist/core/export-html/template.js +6 -1
- package/dist/core/extensions/index.d.ts +1 -1
- package/dist/core/extensions/index.d.ts.map +1 -1
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/extensions/jiti-loader.d.ts +2 -0
- package/dist/core/extensions/jiti-loader.d.ts.map +1 -0
- package/dist/core/extensions/jiti-loader.js +4 -0
- package/dist/core/extensions/jiti-loader.js.map +1 -0
- package/dist/core/extensions/jiti-static-loader.d.ts +2 -0
- package/dist/core/extensions/jiti-static-loader.d.ts.map +1 -0
- package/dist/core/extensions/jiti-static-loader.js +4 -0
- package/dist/core/extensions/jiti-static-loader.js.map +1 -0
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js +40 -59
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +24 -8
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +195 -72
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/types.d.ts +142 -55
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/extensions/virtual-modules.d.ts +3 -0
- package/dist/core/extensions/virtual-modules.d.ts.map +1 -0
- package/dist/core/extensions/virtual-modules.js +41 -0
- package/dist/core/extensions/virtual-modules.js.map +1 -0
- package/dist/core/extensions/wrapper.d.ts.map +1 -1
- package/dist/core/extensions/wrapper.js +1 -20
- package/dist/core/extensions/wrapper.js.map +1 -1
- package/dist/core/http-dispatcher.d.ts.map +1 -1
- package/dist/core/http-dispatcher.js +2 -0
- package/dist/core/http-dispatcher.js.map +1 -1
- package/dist/core/index.d.ts +2 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/keybindings.d.ts +6 -1
- package/dist/core/keybindings.d.ts.map +1 -1
- package/dist/core/keybindings.js +5 -1
- package/dist/core/keybindings.js.map +1 -1
- package/dist/core/messages.d.ts +1 -1
- package/dist/core/messages.d.ts.map +1 -1
- package/dist/core/messages.js +1 -0
- package/dist/core/messages.js.map +1 -1
- package/dist/core/model-config.d.ts +168 -20
- package/dist/core/model-config.d.ts.map +1 -1
- package/dist/core/model-config.js +44 -18
- package/dist/core/model-config.js.map +1 -1
- package/dist/core/model-registry.d.ts +5 -1
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +8 -0
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +4 -3
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/model-runtime.d.ts +1 -0
- package/dist/core/model-runtime.d.ts.map +1 -1
- package/dist/core/model-runtime.js +12 -6
- package/dist/core/model-runtime.js.map +1 -1
- package/dist/core/permissions/store.d.ts.map +1 -1
- package/dist/core/permissions/store.js +11 -8
- package/dist/core/permissions/store.js.map +1 -1
- package/dist/core/prompt-templates.d.ts +6 -1
- package/dist/core/prompt-templates.d.ts.map +1 -1
- package/dist/core/prompt-templates.js +61 -35
- package/dist/core/prompt-templates.js.map +1 -1
- package/dist/core/provider-composer.d.ts +4 -2
- package/dist/core/provider-composer.d.ts.map +1 -1
- package/dist/core/provider-composer.js +29 -2
- package/dist/core/provider-composer.js.map +1 -1
- package/dist/core/radius.d.ts +3 -0
- package/dist/core/radius.d.ts.map +1 -1
- package/dist/core/radius.js +6 -0
- package/dist/core/radius.js.map +1 -1
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +6 -2
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +63 -42
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-export.d.ts +6 -2
- package/dist/core/session-export.d.ts.map +1 -1
- package/dist/core/session-export.js +14 -13
- package/dist/core/session-export.js.map +1 -1
- package/dist/core/session-manager.d.ts +66 -15
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +295 -115
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/settings-manager.d.ts +27 -4
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +55 -7
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/skills.d.ts +1 -1
- package/dist/core/skills.d.ts.map +1 -1
- package/dist/core/skills.js +5 -4
- package/dist/core/skills.js.map +1 -1
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +1 -0
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/system-prompt.d.ts +49 -6
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +140 -79
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/tools/bash.d.ts +7 -8
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +20 -115
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/edit.d.ts +1 -12
- package/dist/core/tools/edit.d.ts.map +1 -1
- package/dist/core/tools/edit.js +6 -204
- package/dist/core/tools/edit.js.map +1 -1
- package/dist/core/tools/find.d.ts.map +1 -1
- package/dist/core/tools/find.js +4 -55
- package/dist/core/tools/find.js.map +1 -1
- package/dist/core/tools/grep.d.ts.map +1 -1
- package/dist/core/tools/grep.js +4 -60
- package/dist/core/tools/grep.js.map +1 -1
- package/dist/core/tools/ls.d.ts.map +1 -1
- package/dist/core/tools/ls.js +4 -49
- package/dist/core/tools/ls.js.map +1 -1
- package/dist/core/tools/read.d.ts +4 -1
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js +10 -125
- package/dist/core/tools/read.js.map +1 -1
- package/dist/core/tools/renderers/bash.d.ts +18 -0
- package/dist/core/tools/renderers/bash.d.ts.map +1 -0
- package/dist/core/tools/renderers/bash.js +126 -0
- package/dist/core/tools/renderers/bash.js.map +1 -0
- package/dist/core/tools/renderers/edit.d.ts +23 -0
- package/dist/core/tools/renderers/edit.d.ts.map +1 -0
- package/dist/core/tools/renderers/edit.js +207 -0
- package/dist/core/tools/renderers/edit.js.map +1 -0
- package/dist/core/tools/renderers/find.d.ts +10 -0
- package/dist/core/tools/renderers/find.d.ts.map +1 -0
- package/dist/core/tools/renderers/find.js +64 -0
- package/dist/core/tools/renderers/find.js.map +1 -0
- package/dist/core/tools/renderers/grep.d.ts +10 -0
- package/dist/core/tools/renderers/grep.d.ts.map +1 -0
- package/dist/core/tools/renderers/grep.js +69 -0
- package/dist/core/tools/renderers/grep.js.map +1 -0
- package/dist/core/tools/renderers/index.d.ts +34 -0
- package/dist/core/tools/renderers/index.d.ts.map +1 -0
- package/dist/core/tools/renderers/index.js +47 -0
- package/dist/core/tools/renderers/index.js.map +1 -0
- package/dist/core/tools/renderers/ls.d.ts +10 -0
- package/dist/core/tools/renderers/ls.d.ts.map +1 -0
- package/dist/core/tools/renderers/ls.js +58 -0
- package/dist/core/tools/renderers/ls.js.map +1 -0
- package/dist/core/tools/renderers/read.d.ts +11 -0
- package/dist/core/tools/renderers/read.d.ts.map +1 -0
- package/dist/core/tools/renderers/read.js +132 -0
- package/dist/core/tools/renderers/read.js.map +1 -0
- package/dist/core/tools/renderers/write.d.ts +10 -0
- package/dist/core/tools/renderers/write.d.ts.map +1 -0
- package/dist/core/tools/renderers/write.js +152 -0
- package/dist/core/tools/renderers/write.js.map +1 -0
- package/dist/core/tools/write.d.ts.map +1 -1
- package/dist/core/tools/write.js +6 -146
- package/dist/core/tools/write.js.map +1 -1
- package/dist/core/usage-totals.d.ts +1 -1
- package/dist/core/usage-totals.d.ts.map +1 -1
- package/dist/core/usage-totals.js +5 -1
- package/dist/core/usage-totals.js.map +1 -1
- package/dist/extensions/llama/client.d.ts +2 -0
- package/dist/extensions/llama/client.d.ts.map +1 -1
- package/dist/extensions/llama/client.js +7 -3
- package/dist/extensions/llama/client.js.map +1 -1
- package/dist/extensions/llama/provider.d.ts.map +1 -1
- package/dist/extensions/llama/provider.js +20 -5
- package/dist/extensions/llama/provider.js.map +1 -1
- package/dist/index.d.ts +5 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +21 -13
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/bug-report.d.ts +16 -0
- package/dist/modes/interactive/bug-report.d.ts.map +1 -0
- package/dist/modes/interactive/bug-report.js +167 -0
- package/dist/modes/interactive/bug-report.js.map +1 -0
- package/dist/modes/interactive/chat-viewport.d.ts +20 -0
- package/dist/modes/interactive/chat-viewport.d.ts.map +1 -0
- package/dist/modes/interactive/chat-viewport.js +28 -0
- package/dist/modes/interactive/chat-viewport.js.map +1 -0
- package/dist/modes/interactive/components/assistant-message.d.ts +7 -0
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/assistant-message.js +63 -17
- package/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/branch-summary-message.js +12 -5
- package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
- package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/compaction-summary-message.js +12 -5
- package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
- package/dist/modes/interactive/components/custom-editor.d.ts +12 -0
- package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-editor.js +38 -0
- package/dist/modes/interactive/components/custom-editor.js.map +1 -1
- package/dist/modes/interactive/components/error-summary.d.ts +11 -0
- package/dist/modes/interactive/components/error-summary.d.ts.map +1 -0
- package/dist/modes/interactive/components/error-summary.js +31 -0
- package/dist/modes/interactive/components/error-summary.js.map +1 -0
- package/dist/modes/interactive/components/extension-editor.d.ts +4 -1
- package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-editor.js +6 -1
- package/dist/modes/interactive/components/extension-editor.js.map +1 -1
- package/dist/modes/interactive/components/extension-input.d.ts +2 -0
- package/dist/modes/interactive/components/extension-input.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-input.js +6 -0
- package/dist/modes/interactive/components/extension-input.js.map +1 -1
- package/dist/modes/interactive/components/extension-selector.d.ts +2 -0
- package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-selector.js +4 -0
- package/dist/modes/interactive/components/extension-selector.js.map +1 -1
- package/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/dist/modes/interactive/components/footer.js +4 -1
- package/dist/modes/interactive/components/footer.js.map +1 -1
- package/dist/modes/interactive/components/index.d.ts +1 -1
- package/dist/modes/interactive/components/index.d.ts.map +1 -1
- package/dist/modes/interactive/components/index.js.map +1 -1
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/model-selector.js +3 -3
- package/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.js +13 -15
- package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
- package/dist/modes/interactive/components/session-selector.d.ts +5 -5
- package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector.js +74 -48
- package/dist/modes/interactive/components/session-selector.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.d.ts +5 -1
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +35 -10
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.js +11 -4
- package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
- package/dist/modes/interactive/components/status-indicator.d.ts +3 -1
- package/dist/modes/interactive/components/status-indicator.d.ts.map +1 -1
- package/dist/modes/interactive/components/status-indicator.js +10 -3
- package/dist/modes/interactive/components/status-indicator.js.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.js +6 -6
- package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
- package/dist/modes/interactive/components/tool-execution.d.ts +27 -5
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-execution.js +64 -42
- package/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/tree-selector.js +9 -0
- package/dist/modes/interactive/components/tree-selector.js.map +1 -1
- package/dist/modes/interactive/components/trust-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/trust-selector.js +2 -2
- package/dist/modes/interactive/components/trust-selector.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +43 -29
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +431 -166
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/theme/dark.json +2 -1
- package/dist/modes/interactive/theme/light.json +2 -1
- package/dist/modes/interactive/theme/theme-controller.d.ts +1 -0
- package/dist/modes/interactive/theme/theme-controller.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme-controller.js +5 -0
- package/dist/modes/interactive/theme/theme-controller.js.map +1 -1
- package/dist/modes/interactive/theme/theme-json.d.ts +84 -0
- package/dist/modes/interactive/theme/theme-json.d.ts.map +1 -0
- package/dist/modes/interactive/theme/theme-json.js +130 -0
- package/dist/modes/interactive/theme/theme-json.js.map +1 -0
- package/dist/modes/interactive/theme/theme-schema.json +6 -2
- package/dist/modes/interactive/theme/theme.d.ts +14 -5
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme.js +18 -119
- package/dist/modes/interactive/theme/theme.js.map +1 -1
- package/dist/modes/interactive/tui-renderer.d.ts +21 -0
- package/dist/modes/interactive/tui-renderer.d.ts.map +1 -0
- package/dist/modes/interactive/tui-renderer.js +66 -0
- package/dist/modes/interactive/tui-renderer.js.map +1 -0
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-mode.js +2 -2
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/dist/package-manager-cli.d.ts.map +1 -1
- package/dist/package-manager-cli.js +31 -72
- package/dist/package-manager-cli.js.map +1 -1
- package/dist/testing/replay/recorded-provider.d.ts +2 -2
- package/dist/testing/replay/recorded-provider.d.ts.map +1 -1
- package/dist/testing/replay/recorded-provider.js +2 -5
- package/dist/testing/replay/recorded-provider.js.map +1 -1
- package/dist/testing/replay/runner.d.ts.map +1 -1
- package/dist/testing/replay/runner.js +0 -1
- package/dist/testing/replay/runner.js.map +1 -1
- package/dist/utils/clipboard-command.d.ts +7 -0
- package/dist/utils/clipboard-command.d.ts.map +1 -0
- package/dist/utils/clipboard-command.js +45 -0
- package/dist/utils/clipboard-command.js.map +1 -0
- package/dist/utils/clipboard-image.d.ts.map +1 -1
- package/dist/utils/clipboard-image.js +53 -81
- package/dist/utils/clipboard-image.js.map +1 -1
- package/dist/utils/clipboard.d.ts.map +1 -1
- package/dist/utils/clipboard.js +111 -121
- package/dist/utils/clipboard.js.map +1 -1
- package/dist/utils/exif-orientation.d.ts.map +1 -1
- package/dist/utils/exif-orientation.js +2 -3
- package/dist/utils/exif-orientation.js.map +1 -1
- package/dist/utils/mime.d.ts.map +1 -1
- package/dist/utils/mime.js +1 -1
- package/dist/utils/mime.js.map +1 -1
- package/dist/utils/syntax-highlight.d.ts.map +1 -1
- package/dist/utils/syntax-highlight.js +21 -21
- package/dist/utils/syntax-highlight.js.map +1 -1
- package/dist/utils/tool-result-images.d.ts +3 -1
- package/dist/utils/tool-result-images.d.ts.map +1 -1
- package/dist/utils/tool-result-images.js +4 -1
- package/dist/utils/tool-result-images.js.map +1 -1
- package/dist/utils/tools-manager.d.ts.map +1 -1
- package/dist/utils/tools-manager.js +11 -2
- package/dist/utils/tools-manager.js.map +1 -1
- package/dist/utils/wsl.d.ts +3 -0
- package/dist/utils/wsl.d.ts.map +1 -0
- package/dist/utils/wsl.js +15 -0
- package/dist/utils/wsl.js.map +1 -0
- package/dist/utils/zip.d.ts +7 -0
- package/dist/utils/zip.d.ts.map +1 -0
- package/dist/utils/zip.js +60 -0
- package/dist/utils/zip.js.map +1 -0
- package/docs/cli-integration.md +107 -0
- package/docs/cli.md +269 -0
- package/docs/compaction.md +73 -24
- package/docs/configuration.md +45 -0
- package/docs/containerization.md +22 -21
- package/docs/custom-provider.md +21 -12
- package/docs/development.md +19 -0
- package/docs/docs.json +139 -95
- package/docs/extensions.md +243 -371
- package/docs/how-pi-works.md +49 -0
- package/docs/images/interactive-mode.png +0 -0
- package/docs/index.md +3 -3
- package/docs/json.md +7 -3
- package/docs/keybindings.md +57 -54
- package/docs/llama-cpp.md +2 -2
- package/docs/message-types.md +261 -0
- package/docs/models.md +103 -49
- package/docs/packages.md +49 -47
- package/docs/prompt-templates.md +29 -56
- package/docs/providers.md +91 -139
- package/docs/quickstart.md +42 -14
- package/docs/rpc-commands.md +854 -0
- package/docs/rpc-extension-ui.md +200 -0
- package/docs/rpc.md +121 -223
- package/docs/sdk.md +99 -124
- package/docs/security.md +7 -7
- package/docs/session-format.md +85 -82
- package/docs/sessions.md +41 -57
- package/docs/settings.md +94 -87
- package/docs/shell-aliases.md +68 -3
- package/docs/skills.md +62 -49
- package/docs/slash-commands.md +60 -0
- package/docs/terminal-setup.md +86 -55
- package/docs/termux.md +65 -75
- package/docs/themes.md +64 -86
- package/docs/tmux.md +29 -7
- package/docs/tui.md +67 -122
- package/docs/usage.md +31 -42
- package/docs/windows.md +41 -13
- package/examples/README.md +16 -2
- package/examples/extensions/README.md +0 -1
- package/examples/extensions/custom-provider-anthropic/index.ts +18 -12
- package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
- package/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/index.ts +2 -2
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/dynamic-resources/dynamic.json +2 -0
- package/examples/extensions/gondolin/package-lock.json +2 -2
- package/examples/extensions/gondolin/package.json +1 -1
- package/examples/extensions/prompt-customizer.ts +19 -67
- package/examples/extensions/sandbox/package-lock.json +2 -2
- package/examples/extensions/sandbox/package.json +1 -1
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/examples/plugins/pi-example-plugin/README.md +38 -0
- package/examples/plugins/pi-example-plugin/package.json +10 -0
- package/examples/plugins/pi-example-plugin/src/contract.ts +13 -0
- package/examples/plugins/pi-example-plugin/src/session.ts +24 -0
- package/examples/plugins/pi-example-plugin/src/tui.ts +31 -0
- package/examples/rpc-client.ts +35 -0
- package/examples/rpc-extension-ui.ts +25 -5
- package/examples/sdk/README.md +1 -1
- package/npm-shrinkwrap.json +861 -513
- package/package.json +27 -18
- package/dist/bun/register-bedrock.d.ts +0 -2
- package/dist/bun/register-bedrock.d.ts.map +0 -1
- package/dist/bun/register-bedrock.js +0 -4
- package/dist/bun/register-bedrock.js.map +0 -1
- package/dist/cli/experimental/auth.d.ts +0 -16
- package/dist/cli/experimental/auth.d.ts.map +0 -1
- package/dist/cli/experimental/auth.js +0 -13
- package/dist/cli/experimental/auth.js.map +0 -1
- package/dist/cli/experimental/cli.d.ts +0 -6
- package/dist/cli/experimental/cli.d.ts.map +0 -1
- package/dist/cli/experimental/cli.js +0 -5
- package/dist/cli/experimental/cli.js.map +0 -1
- package/dist/cli/experimental/command-options.d.ts +0 -17
- package/dist/cli/experimental/command-options.d.ts.map +0 -1
- package/dist/cli/experimental/command-options.js +0 -35
- package/dist/cli/experimental/command-options.js.map +0 -1
- package/dist/cli/experimental/command.d.ts +0 -63
- package/dist/cli/experimental/command.d.ts.map +0 -1
- package/dist/cli/experimental/command.js +0 -130
- package/dist/cli/experimental/command.js.map +0 -1
- package/dist/cli/experimental/commands/client.d.ts +0 -13
- package/dist/cli/experimental/commands/client.d.ts.map +0 -1
- package/dist/cli/experimental/commands/client.js +0 -25
- package/dist/cli/experimental/commands/client.js.map +0 -1
- package/dist/cli/experimental/commands/pi.d.ts +0 -15
- package/dist/cli/experimental/commands/pi.d.ts.map +0 -1
- package/dist/cli/experimental/commands/pi.js +0 -28
- package/dist/cli/experimental/commands/pi.js.map +0 -1
- package/dist/cli/experimental/commands/server.d.ts +0 -13
- package/dist/cli/experimental/commands/server.d.ts.map +0 -1
- package/dist/cli/experimental/commands/server.js +0 -25
- package/dist/cli/experimental/commands/server.js.map +0 -1
- package/dist/cli/experimental/transport-address.d.ts +0 -10
- package/dist/cli/experimental/transport-address.d.ts.map +0 -1
- package/dist/cli/experimental/transport-address.js +0 -38
- package/dist/cli/experimental/transport-address.js.map +0 -1
- package/dist/client/index.d.ts +0 -3
- package/dist/client/index.d.ts.map +0 -1
- package/dist/client/index.js +0 -3
- package/dist/client/index.js.map +0 -1
- package/dist/client/remote-session.d.ts +0 -53
- package/dist/client/remote-session.d.ts.map +0 -1
- package/dist/client/remote-session.js +0 -340
- package/dist/client/remote-session.js.map +0 -1
- package/dist/client/transcript.d.ts +0 -12
- package/dist/client/transcript.d.ts.map +0 -1
- package/dist/client/transcript.js +0 -98
- package/dist/client/transcript.js.map +0 -1
- package/dist/utils/clipboard-native.d.ts +0 -11
- package/dist/utils/clipboard-native.d.ts.map +0 -1
- package/dist/utils/clipboard-native.js +0 -20
- package/dist/utils/clipboard-native.js.map +0 -1
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
# RPC Extension UI
|
|
2
|
+
|
|
3
|
+
Extensions can request user interaction through `ctx.ui`. In RPC mode, supported calls become a request/response subprotocol alongside normal [RPC commands](rpc-commands.md) and [session events](json.md).
|
|
4
|
+
|
|
5
|
+
There are two categories of extension UI methods:
|
|
6
|
+
|
|
7
|
+
- **Dialog methods** (`select`, `confirm`, `input`, `editor`): emit an `extension_ui_request` on stdout and block until the client sends back an `extension_ui_response` on stdin with the matching `id`.
|
|
8
|
+
- **Fire-and-forget methods** (`notify`, `setStatus`, `setWidget`, `setTitle`, `set_editor_text`): emit an `extension_ui_request` on stdout but do not expect a response. The client can display the information or ignore it.
|
|
9
|
+
|
|
10
|
+
If a dialog method includes a `timeout` field, the agent-side will auto-resolve with a default value when the timeout expires. The client does not need to track timeouts.
|
|
11
|
+
|
|
12
|
+
## Limitations
|
|
13
|
+
|
|
14
|
+
Some `ExtensionUIContext` methods are not supported or degraded in RPC mode because they require direct terminal UI access:
|
|
15
|
+
|
|
16
|
+
- `custom()` returns `undefined`.
|
|
17
|
+
- `onTerminalInput()` returns a no-op unsubscribe function.
|
|
18
|
+
- `setWorkingMessage()`, `setWorkingVisible()`, `setWorkingIndicator()`, `setHiddenThinkingLabel()`, `setFooter()`, `setHeader()`, `addAutocompleteProvider()`, `setEditorComponent()`, and `setToolsExpanded()` are no-ops.
|
|
19
|
+
- `getEditorText()` returns `""` and `getEditorComponent()` returns `undefined`.
|
|
20
|
+
- `getToolsExpanded()` returns `false`.
|
|
21
|
+
- `pasteToEditor()` delegates to `setEditorText()` without terminal paste handling.
|
|
22
|
+
- `getAllThemes()` returns `[]`, and `getTheme()` returns `undefined`.
|
|
23
|
+
- `setTheme()` returns `{ success: false, error: "Theme switching not supported in RPC mode" }`.
|
|
24
|
+
|
|
25
|
+
Note: `ctx.mode` is `"rpc"` and `ctx.hasUI` is `true` in RPC mode because the dialog and fire-and-forget methods are functional via the extension UI sub-protocol. Use `ctx.mode === "tui"` to guard TUI-specific features like `custom()` that require a real terminal.
|
|
26
|
+
|
|
27
|
+
## Requests from Apex Code
|
|
28
|
+
|
|
29
|
+
All requests have `type: "extension_ui_request"`, a unique `id`, and a `method` field.
|
|
30
|
+
|
|
31
|
+
### select
|
|
32
|
+
|
|
33
|
+
Prompt the user to choose from a list. Dialog methods with a `timeout` field include the timeout in milliseconds; the agent auto-resolves with `undefined` if the client doesn't respond in time.
|
|
34
|
+
|
|
35
|
+
```json
|
|
36
|
+
{
|
|
37
|
+
"type": "extension_ui_request",
|
|
38
|
+
"id": "uuid-1",
|
|
39
|
+
"method": "select",
|
|
40
|
+
"title": "Allow dangerous command?",
|
|
41
|
+
"options": ["Allow", "Block"],
|
|
42
|
+
"timeout": 10000
|
|
43
|
+
}
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Expected response: `extension_ui_response` with `value` (the selected option string) or `cancelled: true`.
|
|
47
|
+
|
|
48
|
+
### confirm
|
|
49
|
+
|
|
50
|
+
Prompt the user for yes/no confirmation.
|
|
51
|
+
|
|
52
|
+
```json
|
|
53
|
+
{
|
|
54
|
+
"type": "extension_ui_request",
|
|
55
|
+
"id": "uuid-2",
|
|
56
|
+
"method": "confirm",
|
|
57
|
+
"title": "Clear session?",
|
|
58
|
+
"message": "All messages will be lost.",
|
|
59
|
+
"timeout": 5000
|
|
60
|
+
}
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Expected response: `extension_ui_response` with `confirmed: true/false` or `cancelled: true`.
|
|
64
|
+
|
|
65
|
+
### input
|
|
66
|
+
|
|
67
|
+
Prompt the user for free-form text.
|
|
68
|
+
|
|
69
|
+
```json
|
|
70
|
+
{
|
|
71
|
+
"type": "extension_ui_request",
|
|
72
|
+
"id": "uuid-3",
|
|
73
|
+
"method": "input",
|
|
74
|
+
"title": "Enter a value",
|
|
75
|
+
"placeholder": "type something..."
|
|
76
|
+
}
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Expected response: `extension_ui_response` with `value` (the entered text) or `cancelled: true`.
|
|
80
|
+
|
|
81
|
+
### editor
|
|
82
|
+
|
|
83
|
+
Open a multi-line text editor with optional prefilled content.
|
|
84
|
+
|
|
85
|
+
```json
|
|
86
|
+
{
|
|
87
|
+
"type": "extension_ui_request",
|
|
88
|
+
"id": "uuid-4",
|
|
89
|
+
"method": "editor",
|
|
90
|
+
"title": "Edit some text",
|
|
91
|
+
"prefill": "Line 1\nLine 2\nLine 3"
|
|
92
|
+
}
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
Expected response: `extension_ui_response` with `value` (the edited text) or `cancelled: true`.
|
|
96
|
+
|
|
97
|
+
### notify
|
|
98
|
+
|
|
99
|
+
Display a notification. Fire-and-forget, no response expected.
|
|
100
|
+
|
|
101
|
+
```json
|
|
102
|
+
{
|
|
103
|
+
"type": "extension_ui_request",
|
|
104
|
+
"id": "uuid-5",
|
|
105
|
+
"method": "notify",
|
|
106
|
+
"message": "Command blocked by user",
|
|
107
|
+
"notifyType": "warning"
|
|
108
|
+
}
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
The `notifyType` field is `"info"`, `"warning"`, or `"error"`. Defaults to `"info"` if omitted.
|
|
112
|
+
|
|
113
|
+
### setStatus
|
|
114
|
+
|
|
115
|
+
Set or clear a status entry in the footer/status bar. Fire-and-forget.
|
|
116
|
+
|
|
117
|
+
```json
|
|
118
|
+
{
|
|
119
|
+
"type": "extension_ui_request",
|
|
120
|
+
"id": "uuid-6",
|
|
121
|
+
"method": "setStatus",
|
|
122
|
+
"statusKey": "my-ext",
|
|
123
|
+
"statusText": "Turn 3 running..."
|
|
124
|
+
}
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
Send `statusText: undefined` (or omit it) to clear the status entry for that key.
|
|
128
|
+
|
|
129
|
+
### setWidget
|
|
130
|
+
|
|
131
|
+
Set or clear a widget (block of text lines) displayed above or below the editor. Fire-and-forget.
|
|
132
|
+
|
|
133
|
+
```json
|
|
134
|
+
{
|
|
135
|
+
"type": "extension_ui_request",
|
|
136
|
+
"id": "uuid-7",
|
|
137
|
+
"method": "setWidget",
|
|
138
|
+
"widgetKey": "my-ext",
|
|
139
|
+
"widgetLines": ["--- My Widget ---", "Line 1", "Line 2"],
|
|
140
|
+
"widgetPlacement": "aboveEditor"
|
|
141
|
+
}
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
Send `widgetLines: undefined` (or omit it) to clear the widget. The `widgetPlacement` field is `"aboveEditor"` (default) or `"belowEditor"`. Only string arrays are supported in RPC mode; component factories are ignored.
|
|
145
|
+
|
|
146
|
+
### setTitle
|
|
147
|
+
|
|
148
|
+
Set the terminal window/tab title. Fire-and-forget.
|
|
149
|
+
|
|
150
|
+
```json
|
|
151
|
+
{
|
|
152
|
+
"type": "extension_ui_request",
|
|
153
|
+
"id": "uuid-8",
|
|
154
|
+
"method": "setTitle",
|
|
155
|
+
"title": "Apex Code - my project"
|
|
156
|
+
}
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
### set_editor_text
|
|
160
|
+
|
|
161
|
+
Set the text in the input editor. Fire-and-forget.
|
|
162
|
+
|
|
163
|
+
```json
|
|
164
|
+
{
|
|
165
|
+
"type": "extension_ui_request",
|
|
166
|
+
"id": "uuid-9",
|
|
167
|
+
"method": "set_editor_text",
|
|
168
|
+
"text": "prefilled text for the user"
|
|
169
|
+
}
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
## Responses to Apex Code
|
|
173
|
+
|
|
174
|
+
Responses are sent for dialog methods only (`select`, `confirm`, `input`, `editor`). The `id` must match the request.
|
|
175
|
+
|
|
176
|
+
### Value response (select, input, editor)
|
|
177
|
+
|
|
178
|
+
```json
|
|
179
|
+
{"type": "extension_ui_response", "id": "uuid-1", "value": "Allow"}
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
### Confirmation response (confirm)
|
|
183
|
+
|
|
184
|
+
```json
|
|
185
|
+
{"type": "extension_ui_response", "id": "uuid-2", "confirmed": true}
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
### Cancellation response (any dialog)
|
|
189
|
+
|
|
190
|
+
Dismiss any dialog method. The extension receives `undefined` (for select/input/editor) or `false` (for confirm).
|
|
191
|
+
|
|
192
|
+
```json
|
|
193
|
+
{"type": "extension_ui_response", "id": "uuid-3", "cancelled": true}
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
## Example
|
|
197
|
+
|
|
198
|
+
See the checked [RPC extension UI client](../examples/rpc-extension-ui.ts) and its [demo extension](../examples/extensions/rpc-demo.ts).
|
|
199
|
+
|
|
200
|
+
The exported request and response unions are defined in [`rpc-types.ts`](https://github.com/Fchery87/apex-code/blob/main/packages/coding-agent/src/modes/rpc/rpc-types.ts). See [Extensions](extensions.md#ui-and-modes) for mode-independent extension guidance.
|
package/docs/rpc.md
CHANGED
|
@@ -1,38 +1,38 @@
|
|
|
1
1
|
# RPC Mode
|
|
2
2
|
|
|
3
|
-
RPC mode
|
|
3
|
+
RPC mode runs Pi as a long-lived subprocess controlled through JSON records on stdin and stdout. Use it for language-independent integrations, process isolation, IDEs, and custom user interfaces.
|
|
4
4
|
|
|
5
5
|
**Note for Node.js/TypeScript users**: If you're building a Node.js application, consider using `AgentSession` directly from `apex-code` instead of spawning a subprocess. See [`src/core/agent-session.ts`](../src/core/agent-session.ts) for the API. For a subprocess-based TypeScript client, see [`src/modes/rpc/rpc-client.ts`](../src/modes/rpc/rpc-client.ts).
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
| Interface | Process boundary | Control model | Best fit |
|
|
8
|
+
|---|---|---|---|
|
|
9
|
+
| [SDK](sdk.md) | In process | Direct TypeScript methods and events | Node.js or Bun hosts that want complete API access |
|
|
10
|
+
| RPC | Child process | JSONL commands, responses, and events | Other languages, isolated processes, IDEs, or custom clients |
|
|
11
|
+
|
|
12
|
+
## Start RPC mode
|
|
8
13
|
|
|
9
14
|
```bash
|
|
10
15
|
apex-code --mode rpc [options]
|
|
11
16
|
```
|
|
12
17
|
|
|
13
|
-
Common
|
|
14
|
-
- `--provider <name>`: Set the LLM provider (anthropic, openai, google, etc.)
|
|
15
|
-
- `--model <pattern>`: Model pattern or ID (supports `provider/id` and optional `:<thinking>`)
|
|
16
|
-
- `--name <name>` / `-n <name>`: Set the session display name at startup
|
|
17
|
-
- `--no-session`: Disable session persistence
|
|
18
|
-
- `--session-dir <path>`: Custom session storage directory
|
|
18
|
+
Normal CLI options still select the working folder, model, tools, resources, and session behavior. Common choices include `--provider`, `--model`, `--name`, `--no-session`, and `--session-dir`. See [Command Line](cli.md) for the complete, version-specific interface; `apex-code --help` is authoritative for the installed version.
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
RPC mode rejects `@file` prompt arguments. Send prompts through the [`prompt`](rpc-commands.md#prompt) command instead.
|
|
21
21
|
|
|
22
|
-
|
|
23
|
-
- **Responses**: JSON objects with `type: "response"` indicating command success/failure
|
|
24
|
-
- **Events**: Agent events streamed to stdout as JSON lines
|
|
22
|
+
## Protocol records
|
|
25
23
|
|
|
26
|
-
|
|
24
|
+
The protocol has four record families:
|
|
27
25
|
|
|
28
|
-
|
|
26
|
+
| Direction | Record | Purpose |
|
|
27
|
+
|---|---|---|
|
|
28
|
+
| stdin | Command | Ask Pi to prompt, inspect state, change configuration, or manage the session |
|
|
29
|
+
| stdout | `response` | Report whether one command succeeded and return any command data |
|
|
30
|
+
| stdout | Session event | Stream run, message, tool, queue, compaction, and retry activity |
|
|
31
|
+
| Both | Extension UI record | Forward supported extension interactions between Pi and the client |
|
|
29
32
|
|
|
30
|
-
RPC
|
|
33
|
+
See [RPC Commands](rpc-commands.md), [JSON Event Stream](json.md), and [RPC Extension UI](rpc-extension-ui.md) for the canonical record definitions.
|
|
31
34
|
|
|
32
|
-
|
|
33
|
-
- Split records on `\n` only
|
|
34
|
-
- Accept optional `\r\n` input by stripping a trailing `\r`
|
|
35
|
-
- Do not use generic line readers that treat Unicode separators as newlines
|
|
35
|
+
### Correlate commands and responses
|
|
36
36
|
|
|
37
37
|
In particular, Node `readline` is not protocol-compliant for RPC mode because it also splits on `U+2028` and `U+2029`, which are valid inside JSON strings.
|
|
38
38
|
|
|
@@ -123,7 +123,7 @@ See [set_follow_up_mode](#set_follow_up_mode) for controlling how follow-up mess
|
|
|
123
123
|
|
|
124
124
|
#### abort
|
|
125
125
|
|
|
126
|
-
Abort the current
|
|
126
|
+
Abort the current operation and wait for the session to become idle before responding.
|
|
127
127
|
|
|
128
128
|
```json
|
|
129
129
|
{"type": "abort"}
|
|
@@ -1362,257 +1362,155 @@ Responses are sent for dialog methods only (`select`, `confirm`, `input`, `edito
|
|
|
1362
1362
|
#### Confirmation response (confirm)
|
|
1363
1363
|
|
|
1364
1364
|
```json
|
|
1365
|
-
{"
|
|
1365
|
+
{"id":"req-1","type":"get_state"}
|
|
1366
|
+
{"id":"req-1","type":"response","command":"get_state","success":true,"data":{"...":"..."}}
|
|
1366
1367
|
```
|
|
1367
1368
|
|
|
1368
|
-
|
|
1369
|
+
Use unique IDs whenever more than one command can be outstanding. Command handling is asynchronous, so clients should correlate by ID rather than response order.
|
|
1369
1370
|
|
|
1370
|
-
|
|
1371
|
+
Session events generally have no command ID because they describe session activity. `bash_execution_update` is the exception: when the originating [`bash`](rpc-commands.md#bash) command has an ID, its output events repeat that ID.
|
|
1371
1372
|
|
|
1372
|
-
|
|
1373
|
-
{"type": "extension_ui_response", "id": "uuid-3", "cancelled": true}
|
|
1374
|
-
```
|
|
1373
|
+
An `extension_ui_response` uses the ID supplied by its `extension_ui_request`. It does not produce a normal command response.
|
|
1375
1374
|
|
|
1376
|
-
##
|
|
1375
|
+
## Framing
|
|
1377
1376
|
|
|
1378
|
-
|
|
1377
|
+
RPC uses strict JSONL framing. Write one complete JSON object per record and terminate it with LF (`\n`). Read stdout as a byte or UTF-8 stream and split records only on LF. Strip an optional preceding carriage return to accept CRLF input.
|
|
1379
1378
|
|
|
1380
|
-
|
|
1381
|
-
{
|
|
1382
|
-
"type": "response",
|
|
1383
|
-
"command": "set_model",
|
|
1384
|
-
"success": false,
|
|
1385
|
-
"error": "Model not found: invalid/model"
|
|
1386
|
-
}
|
|
1387
|
-
```
|
|
1379
|
+
Do not use a generic line reader that treats Unicode line or paragraph separators as record boundaries. In particular, Node.js `readline` also splits on `U+2028` and `U+2029`, which are valid inside JSON strings.
|
|
1388
1380
|
|
|
1389
|
-
|
|
1381
|
+
Read stdout continuously. Pi honors stdout backpressure, but a client that stops reading can stall the process. Honor stdin backpressure when writing commands. Stdout is reserved for protocol records; diagnostics and application logging go to stderr.
|
|
1390
1382
|
|
|
1391
|
-
|
|
1392
|
-
{
|
|
1393
|
-
"type": "response",
|
|
1394
|
-
"command": "parse",
|
|
1395
|
-
"success": false,
|
|
1396
|
-
"error": "Failed to parse command: Unexpected token..."
|
|
1397
|
-
}
|
|
1398
|
-
```
|
|
1383
|
+
## Run lifecycle
|
|
1399
1384
|
|
|
1400
|
-
|
|
1401
|
-
|
|
1402
|
-
Source files:
|
|
1403
|
-
- [`packages/ai/src/types.ts`](../../ai/src/types.ts) - `Model`, `UserMessage`, `AssistantMessage`, `ToolResultMessage`
|
|
1404
|
-
- [`packages/agent/src/types.ts`](../../agent/src/types.ts) - `AgentMessage`, `AgentEvent`
|
|
1405
|
-
- [`src/core/messages.ts`](../src/core/messages.ts) - `BashExecutionMessage`
|
|
1406
|
-
- [`src/modes/json-event.ts`](../src/modes/json-event.ts) - `JsonAgentSessionEvent`
|
|
1407
|
-
- [`src/modes/rpc/rpc-types.ts`](../src/modes/rpc/rpc-types.ts) - RPC command/response types, extension UI request/response types
|
|
1408
|
-
|
|
1409
|
-
### Model
|
|
1385
|
+
A successful `prompt` response means the prompt was accepted, queued, or handled. It does not mean model work completed:
|
|
1410
1386
|
|
|
1411
1387
|
```json
|
|
1412
|
-
{
|
|
1413
|
-
|
|
1414
|
-
"name": "Claude Sonnet 4",
|
|
1415
|
-
"api": "anthropic-messages",
|
|
1416
|
-
"provider": "anthropic",
|
|
1417
|
-
"baseUrl": "https://api.anthropic.com",
|
|
1418
|
-
"reasoning": true,
|
|
1419
|
-
"input": ["text", "image"],
|
|
1420
|
-
"contextWindow": 200000,
|
|
1421
|
-
"maxTokens": 16384,
|
|
1422
|
-
"cost": {
|
|
1423
|
-
"input": 3.0,
|
|
1424
|
-
"output": 15.0,
|
|
1425
|
-
"cacheRead": 0.3,
|
|
1426
|
-
"cacheWrite": 3.75
|
|
1427
|
-
}
|
|
1428
|
-
}
|
|
1388
|
+
{"id":"req-2","type":"prompt","message":"Review this repository"}
|
|
1389
|
+
{"id":"req-2","type":"response","command":"prompt","success":true}
|
|
1429
1390
|
```
|
|
1430
1391
|
|
|
1431
|
-
|
|
1392
|
+
Continue consuming [events](json.md) after that response. `agent_end` marks the end of one low-level agent run, but retries, overflow recovery, compaction, steering, or follow-up work can still follow. Wait for `agent_settled` when the client needs to know Pi will not continue automatically.
|
|
1432
1393
|
|
|
1433
|
-
|
|
1434
|
-
{
|
|
1435
|
-
"role": "user",
|
|
1436
|
-
"content": "Hello!",
|
|
1437
|
-
"timestamp": 1733234567890,
|
|
1438
|
-
"attachments": []
|
|
1439
|
-
}
|
|
1440
|
-
```
|
|
1394
|
+
Subscribe before sending a prompt to avoid missing a fast completion. `RpcClient.promptAndWait()` does this internally. If using separate `RpcClient` calls, install the event listener before `prompt()` and call `waitForIdle()` only while a run is active.
|
|
1441
1395
|
|
|
1442
|
-
|
|
1396
|
+
## Errors
|
|
1443
1397
|
|
|
1444
|
-
|
|
1398
|
+
A failed command returns one response with `success: false`:
|
|
1445
1399
|
|
|
1446
1400
|
```json
|
|
1447
|
-
{
|
|
1448
|
-
"role": "assistant",
|
|
1449
|
-
"content": [
|
|
1450
|
-
{"type": "text", "text": "Hello! How can I help?"},
|
|
1451
|
-
{"type": "thinking", "thinking": "User is greeting me..."},
|
|
1452
|
-
{"type": "toolCall", "id": "call_123", "name": "bash", "arguments": {"command": "ls"}}
|
|
1453
|
-
],
|
|
1454
|
-
"api": "anthropic-messages",
|
|
1455
|
-
"provider": "anthropic",
|
|
1456
|
-
"model": "claude-sonnet-4-20250514",
|
|
1457
|
-
"usage": {
|
|
1458
|
-
"input": 100,
|
|
1459
|
-
"output": 50,
|
|
1460
|
-
"cacheRead": 0,
|
|
1461
|
-
"cacheWrite": 0,
|
|
1462
|
-
"cost": {"input": 0.0003, "output": 0.00075, "cacheRead": 0, "cacheWrite": 0, "total": 0.00105}
|
|
1463
|
-
},
|
|
1464
|
-
"stopReason": "stop",
|
|
1465
|
-
"timestamp": 1733234567890
|
|
1466
|
-
}
|
|
1401
|
+
{"id":"req-3","type":"response","command":"set_model","success":false,"error":"Model not found: invalid/model"}
|
|
1467
1402
|
```
|
|
1468
1403
|
|
|
1469
|
-
|
|
1470
|
-
|
|
1471
|
-
### ToolResultMessage
|
|
1404
|
+
Malformed JSON produces a parse response without a request ID:
|
|
1472
1405
|
|
|
1473
1406
|
```json
|
|
1474
|
-
{
|
|
1475
|
-
"role": "toolResult",
|
|
1476
|
-
"toolCallId": "call_123",
|
|
1477
|
-
"toolName": "bash",
|
|
1478
|
-
"content": [{"type": "text", "text": "total 48\ndrwxr-xr-x ..."}],
|
|
1479
|
-
"usage": {
|
|
1480
|
-
"input": 100,
|
|
1481
|
-
"output": 50,
|
|
1482
|
-
"cacheRead": 0,
|
|
1483
|
-
"cacheWrite": 0,
|
|
1484
|
-
"totalTokens": 150,
|
|
1485
|
-
"cost": {"input": 0.0003, "output": 0.00075, "cacheRead": 0, "cacheWrite": 0, "total": 0.00105}
|
|
1486
|
-
},
|
|
1487
|
-
"isError": false,
|
|
1488
|
-
"timestamp": 1733234567890
|
|
1489
|
-
}
|
|
1407
|
+
{"type":"response","command":"parse","success":false,"error":"Failed to parse command: Unexpected token..."}
|
|
1490
1408
|
```
|
|
1491
1409
|
|
|
1492
|
-
|
|
1410
|
+
A success response only covers command handling. Provider failures and aborts after a prompt is accepted appear in the message and event stream.
|
|
1493
1411
|
|
|
1494
|
-
|
|
1412
|
+
Clients must also handle child-process startup failures, unexpected exits, stderr diagnostics, cancellation, and their own deadlines. Do not parse stderr as protocol data.
|
|
1495
1413
|
|
|
1496
|
-
|
|
1414
|
+
## Shutdown
|
|
1497
1415
|
|
|
1498
|
-
|
|
1499
|
-
{
|
|
1500
|
-
"role": "bashExecution",
|
|
1501
|
-
"command": "ls -la",
|
|
1502
|
-
"output": "total 48\ndrwxr-xr-x ...",
|
|
1503
|
-
"exitCode": 0,
|
|
1504
|
-
"cancelled": false,
|
|
1505
|
-
"truncated": false,
|
|
1506
|
-
"fullOutputPath": null,
|
|
1507
|
-
"timestamp": 1733234567890
|
|
1508
|
-
}
|
|
1509
|
-
```
|
|
1416
|
+
Close the child's stdin to request an orderly shutdown. Pi disposes the active runtime before exiting. Clients should still handle process signals and unexpected exits.
|
|
1510
1417
|
|
|
1511
|
-
|
|
1418
|
+
An extension can also request shutdown through its extension context. Pi completes shutdown after the current command or after the active run emits `agent_settled`.
|
|
1512
1419
|
|
|
1513
|
-
|
|
1514
|
-
{
|
|
1515
|
-
"id": "img1",
|
|
1516
|
-
"type": "image",
|
|
1517
|
-
"fileName": "photo.jpg",
|
|
1518
|
-
"mimeType": "image/jpeg",
|
|
1519
|
-
"size": 102400,
|
|
1520
|
-
"content": "base64-encoded-data...",
|
|
1521
|
-
"extractedText": null,
|
|
1522
|
-
"preview": null
|
|
1523
|
-
}
|
|
1524
|
-
```
|
|
1420
|
+
## Minimal client
|
|
1525
1421
|
|
|
1526
|
-
|
|
1422
|
+
This Python example uses a binary pipe reader, which splits on LF without treating Unicode separators as protocol boundaries:
|
|
1527
1423
|
|
|
1528
1424
|
```python
|
|
1529
|
-
import subprocess
|
|
1530
1425
|
import json
|
|
1426
|
+
import subprocess
|
|
1531
1427
|
|
|
1532
1428
|
proc = subprocess.Popen(
|
|
1533
1429
|
["apex-code", "--mode", "rpc", "--no-session"],
|
|
1534
1430
|
stdin=subprocess.PIPE,
|
|
1535
1431
|
stdout=subprocess.PIPE,
|
|
1536
|
-
text=True
|
|
1537
1432
|
)
|
|
1538
1433
|
|
|
1539
|
-
|
|
1540
|
-
|
|
1541
|
-
|
|
1542
|
-
|
|
1543
|
-
|
|
1544
|
-
|
|
1545
|
-
|
|
1546
|
-
|
|
1547
|
-
|
|
1548
|
-
|
|
1549
|
-
|
|
1550
|
-
|
|
1551
|
-
|
|
1552
|
-
|
|
1553
|
-
delta = event.get("assistantMessageEvent", {})
|
|
1554
|
-
if delta.get("type") == "text_delta":
|
|
1555
|
-
print(delta["delta"], end="", flush=True)
|
|
1556
|
-
|
|
1557
|
-
if event.get("type") == "agent_end":
|
|
1434
|
+
assert process.stdin is not None
|
|
1435
|
+
assert process.stdout is not None
|
|
1436
|
+
|
|
1437
|
+
command = {"id": "prompt-1", "type": "prompt", "message": "Hello"}
|
|
1438
|
+
process.stdin.write(json.dumps(command).encode("utf-8") + b"\n")
|
|
1439
|
+
process.stdin.flush()
|
|
1440
|
+
|
|
1441
|
+
while line := process.stdout.readline():
|
|
1442
|
+
record = json.loads(line)
|
|
1443
|
+
if record.get("type") == "message_update":
|
|
1444
|
+
update = record["assistantMessageEvent"]
|
|
1445
|
+
if update["type"] == "text_delta":
|
|
1446
|
+
print(update["delta"], end="", flush=True)
|
|
1447
|
+
elif record.get("type") == "agent_settled":
|
|
1558
1448
|
print()
|
|
1559
1449
|
break
|
|
1450
|
+
|
|
1451
|
+
process.stdin.close()
|
|
1452
|
+
process.wait()
|
|
1560
1453
|
```
|
|
1561
1454
|
|
|
1562
|
-
|
|
1455
|
+
For maintained TypeScript clients, use the checked [RPC client example](../examples/rpc-client.ts). It requires a built Pi CLI because the repository example points to `dist/cli.js`.
|
|
1563
1456
|
|
|
1564
|
-
|
|
1457
|
+
## Reference
|
|
1565
1458
|
|
|
1566
|
-
|
|
1459
|
+
- [RPC Commands](rpc-commands.md): every stdin command and response
|
|
1460
|
+
- [JSON Event Stream](json.md): shared stdout session events and streaming reconstruction
|
|
1461
|
+
- [RPC Extension UI](rpc-extension-ui.md): dialogs, notifications, responses, and limitations
|
|
1462
|
+
- [Message Types](message-types.md): messages and content blocks used by responses and events
|
|
1463
|
+
- [Session File Format](session-format.md): entries returned by session commands
|
|
1464
|
+
- [`rpc-types.ts`](https://github.com/earendil-works/pi/blob/main/packages/coding-agent/src/modes/rpc/rpc-types.ts): exported TypeScript protocol definitions
|
|
1465
|
+
- [`RpcClient`](https://github.com/earendil-works/pi/blob/main/packages/coding-agent/src/modes/rpc/rpc-client.ts): subprocess client implementation
|
|
1567
1466
|
|
|
1568
|
-
|
|
1569
|
-
const { spawn } = require("child_process");
|
|
1570
|
-
const { StringDecoder } = require("string_decoder");
|
|
1467
|
+
## Moved reference anchors
|
|
1571
1468
|
|
|
1572
1469
|
const agent = spawn("apex-code", ["--mode", "rpc", "--no-session"]);
|
|
1573
1470
|
|
|
1574
|
-
|
|
1575
|
-
|
|
1576
|
-
|
|
1577
|
-
|
|
1578
|
-
|
|
1579
|
-
|
|
1580
|
-
|
|
1581
|
-
|
|
1582
|
-
|
|
1583
|
-
|
|
1584
|
-
|
|
1585
|
-
|
|
1586
|
-
|
|
1587
|
-
|
|
1588
|
-
|
|
1589
|
-
|
|
1590
|
-
|
|
1591
|
-
|
|
1592
|
-
|
|
1593
|
-
|
|
1594
|
-
|
|
1595
|
-
|
|
1596
|
-
|
|
1597
|
-
|
|
1598
|
-
|
|
1599
|
-
|
|
1600
|
-
|
|
1601
|
-
|
|
1602
|
-
|
|
1603
|
-
|
|
1604
|
-
|
|
1605
|
-
|
|
1606
|
-
|
|
1607
|
-
|
|
1608
|
-
|
|
1609
|
-
|
|
1610
|
-
|
|
1611
|
-
|
|
1612
|
-
|
|
1613
|
-
|
|
1614
|
-
|
|
1615
|
-
|
|
1616
|
-
|
|
1617
|
-
|
|
1618
|
-
|
|
1471
|
+
<a id="prompt"></a>
|
|
1472
|
+
<a id="steer"></a>
|
|
1473
|
+
<a id="follow_up"></a>
|
|
1474
|
+
<a id="abort"></a>
|
|
1475
|
+
<a id="clear_queue"></a>
|
|
1476
|
+
<a id="new_session"></a>
|
|
1477
|
+
<a id="get_state"></a>
|
|
1478
|
+
<a id="get_messages"></a>
|
|
1479
|
+
<a id="set_model"></a>
|
|
1480
|
+
<a id="cycle_model"></a>
|
|
1481
|
+
<a id="get_available_models"></a>
|
|
1482
|
+
<a id="set_thinking_level"></a>
|
|
1483
|
+
<a id="cycle_thinking_level"></a>
|
|
1484
|
+
<a id="get_available_thinking_levels"></a>
|
|
1485
|
+
<a id="set_steering_mode"></a>
|
|
1486
|
+
<a id="set_follow_up_mode"></a>
|
|
1487
|
+
<a id="compact"></a>
|
|
1488
|
+
<a id="set_auto_compaction"></a>
|
|
1489
|
+
<a id="set_auto_retry"></a>
|
|
1490
|
+
<a id="abort_retry"></a>
|
|
1491
|
+
<a id="bash"></a>
|
|
1492
|
+
<a id="abort_bash"></a>
|
|
1493
|
+
<a id="get_session_stats"></a>
|
|
1494
|
+
<a id="export_html"></a>
|
|
1495
|
+
<a id="switch_session"></a>
|
|
1496
|
+
<a id="fork"></a>
|
|
1497
|
+
<a id="clone"></a>
|
|
1498
|
+
<a id="get_fork_messages"></a>
|
|
1499
|
+
<a id="get_entries"></a>
|
|
1500
|
+
<a id="get_tree"></a>
|
|
1501
|
+
<a id="get_last_assistant_text"></a>
|
|
1502
|
+
<a id="set_session_name"></a>
|
|
1503
|
+
<a id="get_commands"></a>
|
|
1504
|
+
|
|
1505
|
+
Command details moved to [RPC Commands](rpc-commands.md).
|
|
1506
|
+
|
|
1507
|
+
<a id="message_update-streaming"></a>
|
|
1508
|
+
<a id="bash_execution_update"></a>
|
|
1509
|
+
<a id="compaction_start--compaction_end"></a>
|
|
1510
|
+
<a id="summarization_retry_scheduled--summarization_retry_attempt_start--summarization_retry_finished"></a>
|
|
1511
|
+
|
|
1512
|
+
Event details moved to [JSON Event Stream](json.md).
|
|
1513
|
+
|
|
1514
|
+
<a id="extension-ui-protocol"></a>
|
|
1515
|
+
|
|
1516
|
+
Extension interaction details moved to [RPC Extension UI](rpc-extension-ui.md).
|