apex-code 0.5.0 → 0.5.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 +257 -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/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
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Extension runner - executes extensions and manages their lifecycle.
|
|
3
3
|
*/
|
|
4
|
+
import { getCurrentSystemMessage, } from "@earendil-works/pi-ai";
|
|
4
5
|
import { theme } from "../../modes/interactive/theme/theme.js";
|
|
6
|
+
import { buildSystemPrompt, normalizeBuildSystemPromptOptions, } from "../system-prompt.js";
|
|
5
7
|
// Extension shortcuts compete with canonical keybinding ids from keybindings.json.
|
|
6
8
|
// Only editor-global shortcuts are reserved here. Picker-specific bindings are not.
|
|
7
9
|
const RESERVED_KEYBINDINGS_FOR_EXTENSION_CONFLICTS = [
|
|
@@ -46,6 +48,31 @@ const buildBuiltinKeybindings = (resolvedKeybindings) => {
|
|
|
46
48
|
}
|
|
47
49
|
return builtinKeybindings;
|
|
48
50
|
};
|
|
51
|
+
function isUserBashEventResult(value) {
|
|
52
|
+
if (typeof value !== "object" || value === null)
|
|
53
|
+
return false;
|
|
54
|
+
const candidate = value;
|
|
55
|
+
const hasOperations = candidate.operations !== undefined;
|
|
56
|
+
const hasResult = candidate.result !== undefined;
|
|
57
|
+
if (hasOperations === hasResult)
|
|
58
|
+
return false;
|
|
59
|
+
if (hasOperations) {
|
|
60
|
+
const operations = candidate.operations;
|
|
61
|
+
if (typeof operations !== "object" || operations === null)
|
|
62
|
+
return false;
|
|
63
|
+
return typeof operations.exec === "function";
|
|
64
|
+
}
|
|
65
|
+
const result = candidate.result;
|
|
66
|
+
if (typeof result !== "object" || result === null)
|
|
67
|
+
return false;
|
|
68
|
+
const resultRecord = result;
|
|
69
|
+
return (typeof resultRecord.output === "string" &&
|
|
70
|
+
"exitCode" in resultRecord &&
|
|
71
|
+
(resultRecord.exitCode === undefined || typeof resultRecord.exitCode === "number") &&
|
|
72
|
+
typeof resultRecord.cancelled === "boolean" &&
|
|
73
|
+
typeof resultRecord.truncated === "boolean" &&
|
|
74
|
+
(resultRecord.fullOutputPath === undefined || typeof resultRecord.fullOutputPath === "string"));
|
|
75
|
+
}
|
|
49
76
|
/**
|
|
50
77
|
* Helper function to emit session_shutdown event to extensions.
|
|
51
78
|
* Returns true if the event was emitted, false if there were no handlers.
|
|
@@ -57,14 +84,31 @@ export async function emitSessionShutdownEvent(extensionRunner, event) {
|
|
|
57
84
|
}
|
|
58
85
|
return false;
|
|
59
86
|
}
|
|
87
|
+
function snapshotEventHandlers(extensions, event) {
|
|
88
|
+
return extensions.map((ext) => ({ ext, handlers: ext.handlers.get(event)?.slice() ?? [] }));
|
|
89
|
+
}
|
|
90
|
+
function sameMessages(left, right) {
|
|
91
|
+
return left.length === right.length && left.every((message, index) => message === right[index]);
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Re-attach the prompt and tool state after a `context` handler. Handlers only see the
|
|
95
|
+
* conversation; the system messages belong to Pi. An unchanged conversation keeps every
|
|
96
|
+
* system message in place, so models with mid-conversation support keep their cached
|
|
97
|
+
* prefix. A changed one gets the replayed prompt sections and tool declarations as one
|
|
98
|
+
* leading system message, so pruning, windowing, or slicing from a compaction summary
|
|
99
|
+
* cannot drop them.
|
|
100
|
+
*/
|
|
101
|
+
function restoreSystemMessages(current, visible, returned) {
|
|
102
|
+
if (sameMessages(returned, visible))
|
|
103
|
+
return current;
|
|
104
|
+
const head = getCurrentSystemMessage(current);
|
|
105
|
+
return head ? [head, ...returned] : returned;
|
|
106
|
+
}
|
|
60
107
|
export async function emitProjectTrustEvent(extensionsResult, event, ctx) {
|
|
61
108
|
const errors = [];
|
|
62
|
-
for (const ext of extensionsResult.extensions) {
|
|
109
|
+
for (const { ext, handlers } of snapshotEventHandlers(extensionsResult.extensions, "project_trust")) {
|
|
63
110
|
// A single extension may register multiple handlers for the same event.
|
|
64
111
|
// The first project_trust handler that returns yes/no wins; undecided falls through.
|
|
65
|
-
const handlers = ext.handlers.get("project_trust");
|
|
66
|
-
if (!handlers || handlers.length === 0)
|
|
67
|
-
continue;
|
|
68
112
|
for (const handler of handlers) {
|
|
69
113
|
try {
|
|
70
114
|
const handlerResult = (await handler(event, ctx));
|
|
@@ -137,7 +181,7 @@ export class ExtensionRunner {
|
|
|
137
181
|
getContextUsageFn = () => undefined;
|
|
138
182
|
compactFn = () => { };
|
|
139
183
|
getSystemPromptFn = () => "";
|
|
140
|
-
getSystemPromptOptionsFn = () => ({ cwd: this.cwd });
|
|
184
|
+
getSystemPromptOptionsFn = () => normalizeBuildSystemPromptOptions({ cwd: this.cwd });
|
|
141
185
|
newSessionHandler = async () => ({ cancelled: false });
|
|
142
186
|
forkHandler = async () => ({ cancelled: false });
|
|
143
187
|
navigateTreeHandler = async () => ({ cancelled: false });
|
|
@@ -185,7 +229,8 @@ export class ExtensionRunner {
|
|
|
185
229
|
this.getContextUsageFn = contextActions.getContextUsage;
|
|
186
230
|
this.compactFn = contextActions.compact;
|
|
187
231
|
this.getSystemPromptFn = contextActions.getSystemPrompt;
|
|
188
|
-
this.getSystemPromptOptionsFn =
|
|
232
|
+
this.getSystemPromptOptionsFn =
|
|
233
|
+
contextActions.getSystemPromptOptions ?? (() => normalizeBuildSystemPromptOptions({ cwd: this.cwd }));
|
|
189
234
|
// Flush provider registrations queued during extension loading
|
|
190
235
|
for (const { name, config, extensionPath } of this.runtime.pendingProviderRegistrations) {
|
|
191
236
|
try {
|
|
@@ -614,6 +659,54 @@ export class ExtensionRunner {
|
|
|
614
659
|
};
|
|
615
660
|
return context;
|
|
616
661
|
}
|
|
662
|
+
async emitBoundary(baseEvent, buildContext) {
|
|
663
|
+
const ctx = this.createContext();
|
|
664
|
+
let entries = [];
|
|
665
|
+
let shouldContinue = false;
|
|
666
|
+
let context = await buildContext(entries);
|
|
667
|
+
let valid = true;
|
|
668
|
+
for (const { ext, handlers } of snapshotEventHandlers(this.extensions, baseEvent.type)) {
|
|
669
|
+
for (const handler of handlers) {
|
|
670
|
+
const event = {
|
|
671
|
+
...baseEvent,
|
|
672
|
+
entries,
|
|
673
|
+
continue: shouldContinue,
|
|
674
|
+
context,
|
|
675
|
+
};
|
|
676
|
+
try {
|
|
677
|
+
const handlerResult = (await handler(event, ctx));
|
|
678
|
+
if (handlerResult?.entries !== undefined)
|
|
679
|
+
entries = handlerResult.entries;
|
|
680
|
+
if (handlerResult?.continue !== undefined)
|
|
681
|
+
shouldContinue = handlerResult.continue;
|
|
682
|
+
}
|
|
683
|
+
catch (err) {
|
|
684
|
+
this.emitError({
|
|
685
|
+
extensionPath: ext.path,
|
|
686
|
+
event: baseEvent.type,
|
|
687
|
+
error: err instanceof Error ? err.message : String(err),
|
|
688
|
+
stack: err instanceof Error ? err.stack : undefined,
|
|
689
|
+
});
|
|
690
|
+
}
|
|
691
|
+
try {
|
|
692
|
+
context = await buildContext(entries);
|
|
693
|
+
valid = true;
|
|
694
|
+
}
|
|
695
|
+
catch (err) {
|
|
696
|
+
valid = false;
|
|
697
|
+
this.emitError({
|
|
698
|
+
extensionPath: ext.path,
|
|
699
|
+
event: baseEvent.type,
|
|
700
|
+
error: `Invalid boundary entries: ${err instanceof Error ? err.message : String(err)}`,
|
|
701
|
+
stack: err instanceof Error ? err.stack : undefined,
|
|
702
|
+
});
|
|
703
|
+
}
|
|
704
|
+
}
|
|
705
|
+
}
|
|
706
|
+
return valid
|
|
707
|
+
? { entries, continue: shouldContinue, context, valid: true }
|
|
708
|
+
: { entries: [], continue: false, context, valid: false };
|
|
709
|
+
}
|
|
617
710
|
isSessionBeforeEvent(event) {
|
|
618
711
|
return (event.type === "session_before_switch" ||
|
|
619
712
|
event.type === "session_before_fork" ||
|
|
@@ -623,10 +716,7 @@ export class ExtensionRunner {
|
|
|
623
716
|
async emit(event) {
|
|
624
717
|
const ctx = this.createContext();
|
|
625
718
|
let result;
|
|
626
|
-
for (const ext of this.extensions) {
|
|
627
|
-
const handlers = ext.handlers.get(event.type);
|
|
628
|
-
if (!handlers || handlers.length === 0)
|
|
629
|
-
continue;
|
|
719
|
+
for (const { ext, handlers } of snapshotEventHandlers(this.extensions, event.type)) {
|
|
630
720
|
for (const handler of handlers) {
|
|
631
721
|
try {
|
|
632
722
|
const handlerResult = await handler(event, ctx);
|
|
@@ -651,14 +741,34 @@ export class ExtensionRunner {
|
|
|
651
741
|
}
|
|
652
742
|
return result;
|
|
653
743
|
}
|
|
744
|
+
/** Returns the event's own action unless a handler overrides it; the last override wins. */
|
|
745
|
+
async emitCacheWarmingDecision(event) {
|
|
746
|
+
const ctx = this.createContext();
|
|
747
|
+
let action = event.action;
|
|
748
|
+
for (const { ext, handlers } of snapshotEventHandlers(this.extensions, event.type)) {
|
|
749
|
+
for (const handler of handlers) {
|
|
750
|
+
try {
|
|
751
|
+
const result = (await handler(event, ctx));
|
|
752
|
+
if (result?.action !== undefined)
|
|
753
|
+
action = result.action;
|
|
754
|
+
}
|
|
755
|
+
catch (err) {
|
|
756
|
+
this.emitError({
|
|
757
|
+
extensionPath: ext.path,
|
|
758
|
+
event: event.type,
|
|
759
|
+
error: err instanceof Error ? err.message : String(err),
|
|
760
|
+
stack: err instanceof Error ? err.stack : undefined,
|
|
761
|
+
});
|
|
762
|
+
}
|
|
763
|
+
}
|
|
764
|
+
}
|
|
765
|
+
return action;
|
|
766
|
+
}
|
|
654
767
|
async emitMessageEnd(event) {
|
|
655
768
|
const ctx = this.createContext();
|
|
656
769
|
let currentMessage = event.message;
|
|
657
770
|
let modified = false;
|
|
658
|
-
for (const ext of this.extensions) {
|
|
659
|
-
const handlers = ext.handlers.get("message_end");
|
|
660
|
-
if (!handlers || handlers.length === 0)
|
|
661
|
-
continue;
|
|
771
|
+
for (const { ext, handlers } of snapshotEventHandlers(this.extensions, "message_end")) {
|
|
662
772
|
for (const handler of handlers) {
|
|
663
773
|
try {
|
|
664
774
|
const currentEvent = { ...event, message: currentMessage };
|
|
@@ -694,10 +804,7 @@ export class ExtensionRunner {
|
|
|
694
804
|
const ctx = this.createContext();
|
|
695
805
|
const currentEvent = { ...event };
|
|
696
806
|
let modified = false;
|
|
697
|
-
for (const ext of this.extensions) {
|
|
698
|
-
const handlers = ext.handlers.get("tool_result");
|
|
699
|
-
if (!handlers || handlers.length === 0)
|
|
700
|
-
continue;
|
|
807
|
+
for (const { ext, handlers } of snapshotEventHandlers(this.extensions, "tool_result")) {
|
|
701
808
|
for (const handler of handlers) {
|
|
702
809
|
try {
|
|
703
810
|
const handlerResult = (await handler(currentEvent, ctx));
|
|
@@ -745,10 +852,7 @@ export class ExtensionRunner {
|
|
|
745
852
|
async emitToolCall(event) {
|
|
746
853
|
const ctx = this.createContext();
|
|
747
854
|
let result;
|
|
748
|
-
for (const
|
|
749
|
-
const handlers = ext.handlers.get("tool_call");
|
|
750
|
-
if (!handlers || handlers.length === 0)
|
|
751
|
-
continue;
|
|
855
|
+
for (const { handlers } of snapshotEventHandlers(this.extensions, "tool_call")) {
|
|
752
856
|
for (const handler of handlers) {
|
|
753
857
|
const handlerResult = await handler(event, ctx);
|
|
754
858
|
if (handlerResult) {
|
|
@@ -763,16 +867,16 @@ export class ExtensionRunner {
|
|
|
763
867
|
}
|
|
764
868
|
async emitUserBash(event) {
|
|
765
869
|
const ctx = this.createContext();
|
|
766
|
-
for (const ext of this.extensions) {
|
|
767
|
-
const handlers = ext.handlers.get("user_bash");
|
|
768
|
-
if (!handlers || handlers.length === 0)
|
|
769
|
-
continue;
|
|
870
|
+
for (const { ext, handlers } of snapshotEventHandlers(this.extensions, "user_bash")) {
|
|
770
871
|
for (const handler of handlers) {
|
|
771
872
|
try {
|
|
772
873
|
const handlerResult = await handler(event, ctx);
|
|
773
|
-
if (handlerResult)
|
|
774
|
-
|
|
874
|
+
if (handlerResult === undefined)
|
|
875
|
+
continue;
|
|
876
|
+
if (!isUserBashEventResult(handlerResult)) {
|
|
877
|
+
throw new Error("Invalid user_bash handler result: return undefined for local execution or exactly one valid { operations } or { result } object");
|
|
775
878
|
}
|
|
879
|
+
return handlerResult;
|
|
776
880
|
}
|
|
777
881
|
catch (err) {
|
|
778
882
|
const message = err instanceof Error ? err.message : String(err);
|
|
@@ -783,25 +887,33 @@ export class ExtensionRunner {
|
|
|
783
887
|
error: message,
|
|
784
888
|
stack,
|
|
785
889
|
});
|
|
890
|
+
throw err;
|
|
786
891
|
}
|
|
787
892
|
}
|
|
788
893
|
}
|
|
789
894
|
return undefined;
|
|
790
895
|
}
|
|
896
|
+
/**
|
|
897
|
+
* Run the request-time transforms in two phases. `context` handlers see the conversation
|
|
898
|
+
* only and Pi restores the prompt and tool state after each; `context_with_system`
|
|
899
|
+
* handlers then see the full transcript and their output is used as returned.
|
|
900
|
+
*/
|
|
791
901
|
async emitContext(messages) {
|
|
792
902
|
const ctx = this.createContext();
|
|
793
903
|
let currentMessages = structuredClone(messages);
|
|
794
|
-
for (const ext of this.extensions) {
|
|
795
|
-
const handlers = ext.handlers.get("context");
|
|
796
|
-
if (!handlers || handlers.length === 0)
|
|
797
|
-
continue;
|
|
904
|
+
for (const { ext, handlers } of snapshotEventHandlers(this.extensions, "context")) {
|
|
798
905
|
for (const handler of handlers) {
|
|
799
906
|
try {
|
|
800
|
-
const
|
|
801
|
-
const
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
907
|
+
const visibleMessages = currentMessages.filter((message) => message.role !== "system");
|
|
908
|
+
const visibleSnapshot = visibleMessages.slice();
|
|
909
|
+
const event = { type: "context", messages: visibleMessages };
|
|
910
|
+
const handlerResult = (await handler(event, ctx));
|
|
911
|
+
// Handlers may return a new list or edit event.messages in place.
|
|
912
|
+
const returned = handlerResult?.messages ??
|
|
913
|
+
(sameMessages(visibleMessages, visibleSnapshot) ? undefined : visibleMessages);
|
|
914
|
+
if (!returned)
|
|
915
|
+
continue;
|
|
916
|
+
currentMessages = restoreSystemMessages(currentMessages, visibleSnapshot, returned);
|
|
805
917
|
}
|
|
806
918
|
catch (err) {
|
|
807
919
|
const message = err instanceof Error ? err.message : String(err);
|
|
@@ -815,15 +927,41 @@ export class ExtensionRunner {
|
|
|
815
927
|
}
|
|
816
928
|
}
|
|
817
929
|
}
|
|
930
|
+
for (const { ext, handlers } of snapshotEventHandlers(this.extensions, "context_with_system")) {
|
|
931
|
+
for (const handler of handlers) {
|
|
932
|
+
try {
|
|
933
|
+
const hadLeadingSystemMessage = currentMessages[0]?.role === "system";
|
|
934
|
+
const event = { type: "context_with_system", messages: currentMessages };
|
|
935
|
+
const handlerResult = (await handler(event, ctx));
|
|
936
|
+
currentMessages = handlerResult?.messages ?? currentMessages;
|
|
937
|
+
// Providers read the prompt and initial tools from the leading system message.
|
|
938
|
+
// Losing it is never intended; report it but honor the handler's output.
|
|
939
|
+
if (hadLeadingSystemMessage && currentMessages[0]?.role !== "system") {
|
|
940
|
+
this.emitError({
|
|
941
|
+
extensionPath: ext.path,
|
|
942
|
+
event: "context_with_system",
|
|
943
|
+
error: "Handler removed the leading system message; the request has no prompt or initial tool declarations. Keep it at index 0 or replace a dropped prefix with getCurrentSystemMessage().",
|
|
944
|
+
});
|
|
945
|
+
}
|
|
946
|
+
}
|
|
947
|
+
catch (err) {
|
|
948
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
949
|
+
const stack = err instanceof Error ? err.stack : undefined;
|
|
950
|
+
this.emitError({
|
|
951
|
+
extensionPath: ext.path,
|
|
952
|
+
event: "context_with_system",
|
|
953
|
+
error: message,
|
|
954
|
+
stack,
|
|
955
|
+
});
|
|
956
|
+
}
|
|
957
|
+
}
|
|
958
|
+
}
|
|
818
959
|
return currentMessages;
|
|
819
960
|
}
|
|
820
961
|
async emitBeforeProviderRequest(payload) {
|
|
821
962
|
const ctx = this.createContext();
|
|
822
963
|
let currentPayload = payload;
|
|
823
|
-
for (const ext of this.extensions) {
|
|
824
|
-
const handlers = ext.handlers.get("before_provider_request");
|
|
825
|
-
if (!handlers || handlers.length === 0)
|
|
826
|
-
continue;
|
|
964
|
+
for (const { ext, handlers } of snapshotEventHandlers(this.extensions, "before_provider_request")) {
|
|
827
965
|
for (const handler of handlers) {
|
|
828
966
|
try {
|
|
829
967
|
const event = {
|
|
@@ -851,10 +989,7 @@ export class ExtensionRunner {
|
|
|
851
989
|
}
|
|
852
990
|
async emitBeforeProviderHeaders(headers) {
|
|
853
991
|
const ctx = this.createContext();
|
|
854
|
-
for (const ext of this.extensions) {
|
|
855
|
-
const handlers = ext.handlers.get("before_provider_headers");
|
|
856
|
-
if (!handlers || handlers.length === 0)
|
|
857
|
-
continue;
|
|
992
|
+
for (const { ext, handlers } of snapshotEventHandlers(this.extensions, "before_provider_headers")) {
|
|
858
993
|
for (const handler of handlers) {
|
|
859
994
|
try {
|
|
860
995
|
// Handlers mutate `headers` in place; the return value is ignored.
|
|
@@ -878,37 +1013,34 @@ export class ExtensionRunner {
|
|
|
878
1013
|
}
|
|
879
1014
|
return headers;
|
|
880
1015
|
}
|
|
881
|
-
async emitBeforeAgentStart(prompt, images,
|
|
882
|
-
|
|
1016
|
+
async emitBeforeAgentStart(prompt, images, systemPromptOptions) {
|
|
1017
|
+
const currentOptions = normalizeBuildSystemPromptOptions(systemPromptOptions);
|
|
1018
|
+
const renderCurrentSystemPrompt = () => buildSystemPrompt(currentOptions);
|
|
883
1019
|
const ctx = Object.defineProperties({}, Object.getOwnPropertyDescriptors(this.createContext()));
|
|
884
1020
|
ctx.getSystemPrompt = () => {
|
|
885
1021
|
this.assertActive();
|
|
886
|
-
return
|
|
1022
|
+
return renderCurrentSystemPrompt();
|
|
887
1023
|
};
|
|
888
1024
|
const messages = [];
|
|
889
|
-
|
|
890
|
-
for (const ext of this.extensions) {
|
|
891
|
-
const handlers = ext.handlers.get("before_agent_start");
|
|
892
|
-
if (!handlers || handlers.length === 0)
|
|
893
|
-
continue;
|
|
1025
|
+
for (const { ext, handlers } of snapshotEventHandlers(this.extensions, "before_agent_start")) {
|
|
894
1026
|
for (const handler of handlers) {
|
|
895
1027
|
try {
|
|
896
1028
|
const event = {
|
|
897
1029
|
type: "before_agent_start",
|
|
898
1030
|
prompt,
|
|
899
1031
|
images,
|
|
900
|
-
systemPrompt
|
|
901
|
-
|
|
1032
|
+
get systemPrompt() {
|
|
1033
|
+
return renderCurrentSystemPrompt();
|
|
1034
|
+
},
|
|
1035
|
+
systemPromptOptions: currentOptions,
|
|
902
1036
|
};
|
|
903
1037
|
const handlerResult = await handler(event, ctx);
|
|
904
1038
|
if (handlerResult) {
|
|
905
1039
|
const result = handlerResult;
|
|
906
|
-
if (result.message)
|
|
1040
|
+
if (result.message)
|
|
907
1041
|
messages.push(result.message);
|
|
908
|
-
}
|
|
909
1042
|
if (result.systemPrompt !== undefined) {
|
|
910
|
-
|
|
911
|
-
systemPromptModified = true;
|
|
1043
|
+
currentOptions.forceSystemPrompt = result.systemPrompt;
|
|
912
1044
|
}
|
|
913
1045
|
}
|
|
914
1046
|
}
|
|
@@ -924,23 +1056,14 @@ export class ExtensionRunner {
|
|
|
924
1056
|
}
|
|
925
1057
|
}
|
|
926
1058
|
}
|
|
927
|
-
|
|
928
|
-
return {
|
|
929
|
-
messages: messages.length > 0 ? messages : undefined,
|
|
930
|
-
systemPrompt: systemPromptModified ? currentSystemPrompt : undefined,
|
|
931
|
-
};
|
|
932
|
-
}
|
|
933
|
-
return undefined;
|
|
1059
|
+
return { messages, systemPromptOptions: currentOptions };
|
|
934
1060
|
}
|
|
935
1061
|
async emitResourcesDiscover(cwd, reason) {
|
|
936
1062
|
const ctx = this.createContext();
|
|
937
1063
|
const skillPaths = [];
|
|
938
1064
|
const promptPaths = [];
|
|
939
1065
|
const themePaths = [];
|
|
940
|
-
for (const ext of this.extensions) {
|
|
941
|
-
const handlers = ext.handlers.get("resources_discover");
|
|
942
|
-
if (!handlers || handlers.length === 0)
|
|
943
|
-
continue;
|
|
1066
|
+
for (const { ext, handlers } of snapshotEventHandlers(this.extensions, "resources_discover")) {
|
|
944
1067
|
for (const handler of handlers) {
|
|
945
1068
|
try {
|
|
946
1069
|
const event = { type: "resources_discover", cwd, reason };
|
|
@@ -975,8 +1098,8 @@ export class ExtensionRunner {
|
|
|
975
1098
|
const ctx = this.createContext();
|
|
976
1099
|
let currentText = text;
|
|
977
1100
|
let currentImages = images;
|
|
978
|
-
for (const ext of this.extensions) {
|
|
979
|
-
for (const handler of
|
|
1101
|
+
for (const { ext, handlers } of snapshotEventHandlers(this.extensions, "input")) {
|
|
1102
|
+
for (const handler of handlers) {
|
|
980
1103
|
try {
|
|
981
1104
|
const event = {
|
|
982
1105
|
type: "input",
|