@caupulican/pi-adaptative 0.85.3 → 0.85.8
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 +60 -0
- package/dist/bun/cli.d.ts +1 -1
- package/dist/bun/cli.d.ts.map +1 -1
- package/dist/bun/cli.js +1 -0
- package/dist/bun/cli.js.map +1 -1
- package/dist/core/agent-session-runtime.d.ts +1 -1
- package/dist/core/agent-session-runtime.d.ts.map +1 -1
- package/dist/core/agent-session-runtime.js +1 -1
- package/dist/core/agent-session-runtime.js.map +1 -1
- package/dist/core/agent-session-services.d.ts.map +1 -1
- package/dist/core/agent-session-services.js +2 -0
- package/dist/core/agent-session-services.js.map +1 -1
- package/dist/core/agent-session.d.ts +12 -8
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +82 -88
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/auth-guidance.d.ts.map +1 -1
- package/dist/core/auth-guidance.js +3 -0
- package/dist/core/auth-guidance.js.map +1 -1
- package/dist/core/auth-storage.d.ts +2 -2
- package/dist/core/auth-storage.d.ts.map +1 -1
- package/dist/core/auth-storage.js +2 -2
- package/dist/core/auth-storage.js.map +1 -1
- package/dist/core/autonomy/lane-tool-surface.d.ts +2 -0
- package/dist/core/autonomy/lane-tool-surface.d.ts.map +1 -1
- package/dist/core/autonomy/lane-tool-surface.js +4 -3
- package/dist/core/autonomy/lane-tool-surface.js.map +1 -1
- package/dist/core/background-lane-controller.d.ts +4 -0
- package/dist/core/background-lane-controller.d.ts.map +1 -1
- package/dist/core/background-lane-controller.js +2 -0
- package/dist/core/background-lane-controller.js.map +1 -1
- package/dist/core/background-tool-task-controller.d.ts +12 -7
- package/dist/core/background-tool-task-controller.d.ts.map +1 -1
- package/dist/core/background-tool-task-controller.js +55 -19
- package/dist/core/background-tool-task-controller.js.map +1 -1
- package/dist/core/bash-executor.js +2 -2
- package/dist/core/bash-executor.js.map +1 -1
- package/dist/core/bedrock-scope.d.ts +26 -0
- package/dist/core/bedrock-scope.d.ts.map +1 -0
- package/dist/core/bedrock-scope.js +178 -0
- package/dist/core/bedrock-scope.js.map +1 -0
- package/dist/core/billing-failover-controller.d.ts +2 -2
- package/dist/core/billing-failover-controller.d.ts.map +1 -1
- package/dist/core/billing-failover-controller.js +1 -1
- package/dist/core/billing-failover-controller.js.map +1 -1
- package/dist/core/compaction-controller.d.ts +8 -2
- package/dist/core/compaction-controller.d.ts.map +1 -1
- package/dist/core/compaction-controller.js +73 -3
- package/dist/core/compaction-controller.js.map +1 -1
- package/dist/core/compaction-support.d.ts +2 -2
- package/dist/core/compaction-support.d.ts.map +1 -1
- package/dist/core/compaction-support.js +9 -1
- package/dist/core/compaction-support.js.map +1 -1
- package/dist/core/context/artifact-retrieval.d.ts +1 -1
- package/dist/core/context/artifact-retrieval.d.ts.map +1 -1
- package/dist/core/context/artifact-retrieval.js +1 -1
- package/dist/core/context/artifact-retrieval.js.map +1 -1
- package/dist/core/context/context-artifacts.d.ts +6 -6
- package/dist/core/context/context-artifacts.d.ts.map +1 -1
- package/dist/core/context/context-artifacts.js +151 -63
- package/dist/core/context/context-artifacts.js.map +1 -1
- package/dist/core/context/context-composition.js +1 -1
- package/dist/core/context/context-composition.js.map +1 -1
- package/dist/core/context/context-store-retention.d.ts.map +1 -1
- package/dist/core/context/context-store-retention.js +5 -2
- package/dist/core/context/context-store-retention.js.map +1 -1
- package/dist/core/context/file-store-memory-provider.js +1 -1
- package/dist/core/context/file-store-memory-provider.js.map +1 -1
- package/dist/core/context/tool-output-packer.d.ts +1 -1
- package/dist/core/context/tool-output-packer.d.ts.map +1 -1
- package/dist/core/context/tool-output-packer.js +1 -1
- package/dist/core/context/tool-output-packer.js.map +1 -1
- package/dist/core/context-gc.d.ts.map +1 -1
- package/dist/core/context-gc.js +7 -5
- package/dist/core/context-gc.js.map +1 -1
- package/dist/core/context-pipeline.d.ts +2 -2
- package/dist/core/context-pipeline.d.ts.map +1 -1
- package/dist/core/context-pipeline.js +8 -4
- package/dist/core/context-pipeline.js.map +1 -1
- package/dist/core/cost/cost-summary.d.ts +1 -1
- package/dist/core/cost/cost-summary.d.ts.map +1 -1
- package/dist/core/cost/cost-summary.js +1 -1
- package/dist/core/cost/cost-summary.js.map +1 -1
- package/dist/core/cost/daily-usage.d.ts +1 -1
- package/dist/core/cost/daily-usage.d.ts.map +1 -1
- package/dist/core/cost/daily-usage.js +2 -2
- package/dist/core/cost/daily-usage.js.map +1 -1
- package/dist/core/cost/session-usage.d.ts +1 -1
- package/dist/core/cost/session-usage.d.ts.map +1 -1
- package/dist/core/cost/session-usage.js +1 -1
- package/dist/core/cost/session-usage.js.map +1 -1
- package/dist/core/delegation/worker-actions.js +1 -1
- package/dist/core/delegation/worker-actions.js.map +1 -1
- package/dist/core/delegation/worker-attempt-executor.d.ts +1 -1
- package/dist/core/delegation/worker-attempt-executor.d.ts.map +1 -1
- package/dist/core/delegation/worker-attempt-executor.js +3 -2
- package/dist/core/delegation/worker-attempt-executor.js.map +1 -1
- package/dist/core/delegation/worker-conversation-store.d.ts +2 -1
- package/dist/core/delegation/worker-conversation-store.d.ts.map +1 -1
- package/dist/core/delegation/worker-conversation-store.js +3 -2
- package/dist/core/delegation/worker-conversation-store.js.map +1 -1
- package/dist/core/delegation/worker-delegation-controller.d.ts.map +1 -1
- package/dist/core/delegation/worker-delegation-controller.js +6 -0
- package/dist/core/delegation/worker-delegation-controller.js.map +1 -1
- package/dist/core/extensions/builtin.d.ts +2 -2
- package/dist/core/extensions/builtin.d.ts.map +1 -1
- package/dist/core/extensions/builtin.js +2 -2
- package/dist/core/extensions/builtin.js.map +1 -1
- package/dist/core/extensions/bundled-virtual-modules.d.ts +2 -0
- package/dist/core/extensions/bundled-virtual-modules.d.ts.map +1 -0
- package/dist/core/extensions/bundled-virtual-modules.js +129 -0
- package/dist/core/extensions/bundled-virtual-modules.js.map +1 -0
- package/dist/core/extensions/factory-runtime.d.ts +22 -0
- package/dist/core/extensions/factory-runtime.d.ts.map +1 -0
- package/dist/core/extensions/factory-runtime.js +334 -0
- package/dist/core/extensions/factory-runtime.js.map +1 -0
- 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 +1 -1
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/extensions/lifecycle.d.ts +13 -0
- package/dist/core/extensions/lifecycle.d.ts.map +1 -0
- package/dist/core/extensions/lifecycle.js +52 -0
- package/dist/core/extensions/lifecycle.js.map +1 -0
- package/dist/core/extensions/loader.d.ts +3 -24
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js +21 -528
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/extensions/virtual-modules.d.ts +51 -0
- package/dist/core/extensions/virtual-modules.d.ts.map +1 -0
- package/dist/core/extensions/virtual-modules.js +59 -0
- package/dist/core/extensions/virtual-modules.js.map +1 -0
- package/dist/core/foreground-recovery-controller.d.ts +26 -2
- package/dist/core/foreground-recovery-controller.d.ts.map +1 -1
- package/dist/core/foreground-recovery-controller.js +112 -3
- package/dist/core/foreground-recovery-controller.js.map +1 -1
- package/dist/core/foreground-terminal-handoff-controller.d.ts +27 -0
- package/dist/core/foreground-terminal-handoff-controller.d.ts.map +1 -0
- package/dist/core/foreground-terminal-handoff-controller.js +56 -0
- package/dist/core/foreground-terminal-handoff-controller.js.map +1 -0
- package/dist/core/goal-loop-controller.d.ts.map +1 -1
- package/dist/core/goal-loop-controller.js +5 -0
- package/dist/core/goal-loop-controller.js.map +1 -1
- package/dist/core/goals/compact-goal-context.d.ts +1 -1
- package/dist/core/goals/compact-goal-context.d.ts.map +1 -1
- package/dist/core/goals/compact-goal-context.js +1 -1
- package/dist/core/goals/compact-goal-context.js.map +1 -1
- package/dist/core/goals/goal-auto-continue-controller.d.ts +3 -0
- package/dist/core/goals/goal-auto-continue-controller.d.ts.map +1 -1
- package/dist/core/goals/goal-auto-continue-controller.js +28 -7
- package/dist/core/goals/goal-auto-continue-controller.js.map +1 -1
- package/dist/core/goals/goal-session-controller.d.ts +1 -1
- package/dist/core/goals/goal-session-controller.d.ts.map +1 -1
- package/dist/core/goals/goal-session-controller.js +1 -1
- package/dist/core/goals/goal-session-controller.js.map +1 -1
- package/dist/core/http-dispatcher.d.ts +1 -1
- package/dist/core/http-dispatcher.d.ts.map +1 -1
- package/dist/core/http-dispatcher.js +1 -1
- package/dist/core/http-dispatcher.js.map +1 -1
- package/dist/core/human-input-controller.d.ts +9 -0
- package/dist/core/human-input-controller.d.ts.map +1 -1
- package/dist/core/human-input-controller.js +60 -5
- package/dist/core/human-input-controller.js.map +1 -1
- package/dist/core/human-input.d.ts +12 -0
- package/dist/core/human-input.d.ts.map +1 -1
- package/dist/core/human-input.js +59 -12
- package/dist/core/human-input.js.map +1 -1
- package/dist/core/index.d.ts +3 -2
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +2 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/local-runtime-controller.d.ts.map +1 -1
- package/dist/core/local-runtime-controller.js +15 -9
- package/dist/core/local-runtime-controller.js.map +1 -1
- package/dist/core/memory/providers/file-store.d.ts +1 -0
- package/dist/core/memory/providers/file-store.d.ts.map +1 -1
- package/dist/core/memory/providers/file-store.js +253 -126
- package/dist/core/memory/providers/file-store.js.map +1 -1
- package/dist/core/memory/providers/user-memory-archive.js +1 -1
- package/dist/core/memory/providers/user-memory-archive.js.map +1 -1
- package/dist/core/model-capability.d.ts +15 -1
- package/dist/core/model-capability.d.ts.map +1 -1
- package/dist/core/model-capability.js +24 -1
- package/dist/core/model-capability.js.map +1 -1
- package/dist/core/model-registry.d.ts +7 -1
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +22 -1
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-resolver.d.ts +1 -1
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +1 -1
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/model-router-controller.d.ts +6 -6
- package/dist/core/model-router-controller.d.ts.map +1 -1
- package/dist/core/model-router-controller.js +6 -6
- package/dist/core/model-router-controller.js.map +1 -1
- package/dist/core/model-selection-controller.js +1 -1
- package/dist/core/model-selection-controller.js.map +1 -1
- package/dist/core/model-tool-protocol.d.ts +1 -1
- package/dist/core/model-tool-protocol.d.ts.map +1 -1
- package/dist/core/model-tool-protocol.js +1 -1
- package/dist/core/model-tool-protocol.js.map +1 -1
- package/dist/core/models/context-sizing.d.ts +1 -0
- package/dist/core/models/context-sizing.d.ts.map +1 -1
- package/dist/core/models/context-sizing.js +4 -1
- package/dist/core/models/context-sizing.js.map +1 -1
- package/dist/core/models/default-model-suggestions.d.ts.map +1 -1
- package/dist/core/models/default-model-suggestions.js +20 -10
- package/dist/core/models/default-model-suggestions.js.map +1 -1
- package/dist/core/models/llamacpp-runtime.d.ts +39 -11
- package/dist/core/models/llamacpp-runtime.d.ts.map +1 -1
- package/dist/core/models/llamacpp-runtime.js +87 -31
- package/dist/core/models/llamacpp-runtime.js.map +1 -1
- package/dist/core/models/local-execution-planner.d.ts +24 -0
- package/dist/core/models/local-execution-planner.d.ts.map +1 -0
- package/dist/core/models/local-execution-planner.js +119 -0
- package/dist/core/models/local-execution-planner.js.map +1 -0
- package/dist/core/models/local-inference-profile.d.ts +34 -0
- package/dist/core/models/local-inference-profile.d.ts.map +1 -0
- package/dist/core/models/local-inference-profile.js +74 -0
- package/dist/core/models/local-inference-profile.js.map +1 -0
- package/dist/core/models/local-runtime.d.ts +23 -4
- package/dist/core/models/local-runtime.d.ts.map +1 -1
- package/dist/core/models/local-runtime.js +12 -9
- package/dist/core/models/local-runtime.js.map +1 -1
- package/dist/core/models/managed-ollama-model.d.ts +26 -0
- package/dist/core/models/managed-ollama-model.d.ts.map +1 -0
- package/dist/core/models/managed-ollama-model.js +59 -0
- package/dist/core/models/managed-ollama-model.js.map +1 -0
- package/dist/core/models/model-ref.js +11 -11
- package/dist/core/models/model-ref.js.map +1 -1
- package/dist/core/models/prism-llamacpp-lifecycle.d.ts +10 -20
- package/dist/core/models/prism-llamacpp-lifecycle.d.ts.map +1 -1
- package/dist/core/models/prism-llamacpp-lifecycle.js +11 -31
- package/dist/core/models/prism-llamacpp-lifecycle.js.map +1 -1
- package/dist/core/models/prism-llamacpp-server-probe.d.ts +10 -0
- package/dist/core/models/prism-llamacpp-server-probe.d.ts.map +1 -0
- package/dist/core/models/prism-llamacpp-server-probe.js +36 -0
- package/dist/core/models/prism-llamacpp-server-probe.js.map +1 -0
- package/dist/core/models/runtime-arbiter.d.ts +3 -0
- package/dist/core/models/runtime-arbiter.d.ts.map +1 -1
- package/dist/core/models/runtime-arbiter.js +2 -1
- package/dist/core/models/runtime-arbiter.js.map +1 -1
- package/dist/core/orchestration/model-binding.d.ts +1 -1
- package/dist/core/orchestration/model-binding.d.ts.map +1 -1
- package/dist/core/orchestration/model-binding.js +1 -1
- package/dist/core/orchestration/model-binding.js.map +1 -1
- package/dist/core/orchestration/task-profile-writer.js +1 -1
- package/dist/core/orchestration/task-profile-writer.js.map +1 -1
- package/dist/core/process-matrix/runtime.d.ts +15 -1
- package/dist/core/process-matrix/runtime.d.ts.map +1 -1
- package/dist/core/process-matrix/runtime.js +55 -34
- package/dist/core/process-matrix/runtime.js.map +1 -1
- package/dist/core/reflection-controller.d.ts +4 -3
- package/dist/core/reflection-controller.d.ts.map +1 -1
- package/dist/core/reflection-controller.js +2 -2
- package/dist/core/reflection-controller.js.map +1 -1
- package/dist/core/research/model-fitness-controller.js +1 -1
- package/dist/core/research/model-fitness-controller.js.map +1 -1
- package/dist/core/research/research-lane-controller.d.ts +2 -2
- package/dist/core/research/research-lane-controller.d.ts.map +1 -1
- package/dist/core/research/research-lane-controller.js +15 -6
- package/dist/core/research/research-lane-controller.js.map +1 -1
- package/dist/core/resource-loader.d.ts +10 -19
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +8 -70
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/runtime-builder.d.ts +5 -1
- package/dist/core/runtime-builder.d.ts.map +1 -1
- package/dist/core/runtime-builder.js +50 -7
- package/dist/core/runtime-builder.js.map +1 -1
- package/dist/core/scout-controller.d.ts +4 -3
- package/dist/core/scout-controller.d.ts.map +1 -1
- package/dist/core/scout-controller.js +2 -1
- package/dist/core/scout-controller.js.map +1 -1
- package/dist/core/sdk.d.ts +2 -2
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +13 -11
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/security/context-threat-scanner.d.ts +14 -0
- package/dist/core/security/context-threat-scanner.d.ts.map +1 -0
- package/dist/core/security/context-threat-scanner.js +71 -0
- package/dist/core/security/context-threat-scanner.js.map +1 -0
- package/dist/core/session-supervision-runtime.d.ts +4 -1
- package/dist/core/session-supervision-runtime.d.ts.map +1 -1
- package/dist/core/session-supervision-runtime.js +49 -11
- package/dist/core/session-supervision-runtime.js.map +1 -1
- package/dist/core/settings-manager.d.ts +13 -0
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +60 -1
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/system-prompt-builder.d.ts +5 -2
- package/dist/core/system-prompt-builder.d.ts.map +1 -1
- package/dist/core/system-prompt-builder.js +22 -10
- package/dist/core/system-prompt-builder.js.map +1 -1
- package/dist/core/system-prompt.d.ts +3 -0
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +181 -55
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/tool-protocol-controller.d.ts.map +1 -1
- package/dist/core/tool-protocol-controller.js +5 -3
- package/dist/core/tool-protocol-controller.js.map +1 -1
- package/dist/core/tool-recovery-logger.js +1 -1
- package/dist/core/tool-recovery-logger.js.map +1 -1
- package/dist/core/tools/artifact-retrieve.js +1 -1
- package/dist/core/tools/artifact-retrieve.js.map +1 -1
- package/dist/core/tools/bash.d.ts +2 -2
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +16 -4
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/edit-diff.d.ts +2 -0
- package/dist/core/tools/edit-diff.d.ts.map +1 -1
- package/dist/core/tools/edit-diff.js +9 -1
- package/dist/core/tools/edit-diff.js.map +1 -1
- package/dist/core/tools/edit.d.ts +5 -8
- package/dist/core/tools/edit.d.ts.map +1 -1
- package/dist/core/tools/edit.js +88 -55
- package/dist/core/tools/edit.js.map +1 -1
- package/dist/core/tools/extensionify-runtime.d.ts +44 -0
- package/dist/core/tools/extensionify-runtime.d.ts.map +1 -0
- package/dist/core/tools/extensionify-runtime.js +115 -0
- package/dist/core/tools/extensionify-runtime.js.map +1 -0
- package/dist/core/tools/extensionify.d.ts +9 -30
- package/dist/core/tools/extensionify.d.ts.map +1 -1
- package/dist/core/tools/extensionify.js +10 -140
- package/dist/core/tools/extensionify.js.map +1 -1
- package/dist/core/tools/file-mutation-intent.d.ts +42 -15
- package/dist/core/tools/file-mutation-intent.d.ts.map +1 -1
- package/dist/core/tools/file-mutation-intent.js +271 -77
- package/dist/core/tools/file-mutation-intent.js.map +1 -1
- package/dist/core/tools/find.d.ts +1 -1
- package/dist/core/tools/find.d.ts.map +1 -1
- package/dist/core/tools/find.js +1 -1
- package/dist/core/tools/find.js.map +1 -1
- package/dist/core/tools/index.d.ts +3 -5
- package/dist/core/tools/index.d.ts.map +1 -1
- package/dist/core/tools/index.js +8 -44
- package/dist/core/tools/index.js.map +1 -1
- package/dist/core/tools/ls.d.ts +1 -1
- package/dist/core/tools/ls.d.ts.map +1 -1
- package/dist/core/tools/ls.js +1 -1
- package/dist/core/tools/ls.js.map +1 -1
- package/dist/core/tools/output-accumulator.d.ts +1 -1
- package/dist/core/tools/output-accumulator.d.ts.map +1 -1
- package/dist/core/tools/output-accumulator.js +1 -1
- package/dist/core/tools/output-accumulator.js.map +1 -1
- package/dist/core/tools/render-utils.js +1 -1
- package/dist/core/tools/render-utils.js.map +1 -1
- package/dist/core/tools/search-command-guard.d.ts +8 -0
- package/dist/core/tools/search-command-guard.d.ts.map +1 -1
- package/dist/core/tools/search-command-guard.js +54 -0
- package/dist/core/tools/search-command-guard.js.map +1 -1
- package/dist/core/tools/shell-contract-router.d.ts.map +1 -1
- package/dist/core/tools/shell-contract-router.js +9 -4
- package/dist/core/tools/shell-contract-router.js.map +1 -1
- package/dist/core/tools/shell-session.d.ts.map +1 -1
- package/dist/core/tools/shell-session.js +6 -4
- package/dist/core/tools/shell-session.js.map +1 -1
- package/dist/core/tools/tool-definition-factory.d.ts +32 -0
- package/dist/core/tools/tool-definition-factory.d.ts.map +1 -0
- package/dist/core/tools/tool-definition-factory.js +55 -0
- package/dist/core/tools/tool-definition-factory.js.map +1 -0
- package/dist/core/tools/write.d.ts +5 -10
- package/dist/core/tools/write.d.ts.map +1 -1
- package/dist/core/tools/write.js +92 -73
- package/dist/core/tools/write.js.map +1 -1
- package/dist/core/util/atomic-file.d.ts.map +1 -1
- package/dist/core/util/atomic-file.js +79 -32
- package/dist/core/util/atomic-file.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts +2 -0
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +24 -18
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/auth-dialogs-controller.d.ts +6 -0
- package/dist/modes/interactive/auth-dialogs-controller.d.ts.map +1 -1
- package/dist/modes/interactive/auth-dialogs-controller.js +59 -12
- package/dist/modes/interactive/auth-dialogs-controller.js.map +1 -1
- package/dist/modes/interactive/auto-learn-controller.js +1 -1
- package/dist/modes/interactive/auto-learn-controller.js.map +1 -1
- package/dist/modes/interactive/components/tool-execution.js +1 -1
- package/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/dist/modes/interactive/interactive-event-controller.js +1 -1
- package/dist/modes/interactive/interactive-event-controller.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +1 -1
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/local-model-commands.d.ts +1 -1
- package/dist/modes/interactive/local-model-commands.d.ts.map +1 -1
- package/dist/modes/interactive/local-model-commands.js +51 -8
- package/dist/modes/interactive/local-model-commands.js.map +1 -1
- package/dist/utils/child-process.js +1 -1
- package/dist/utils/child-process.js.map +1 -1
- package/docs/providers.md +34 -10
- package/docs/tool-boundary-performance-roadmap-2026-08-02.md +21 -18
- package/examples/extensions/built-in-tool-renderer.ts +1 -1
- 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/package.json +1 -1
- package/examples/extensions/minimal-mode.ts +1 -1
- package/examples/extensions/prompt-customizer.ts +2 -2
- package/examples/extensions/sandbox/package-lock.json +2 -2
- package/examples/extensions/sandbox/package.json +1 -1
- package/examples/extensions/ssh.ts +17 -0
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/npm-shrinkwrap.json +240 -260
- package/package.json +9 -7
|
@@ -6,112 +6,17 @@ import * as fs from "node:fs";
|
|
|
6
6
|
import { createRequire } from "node:module";
|
|
7
7
|
import * as path from "node:path";
|
|
8
8
|
import { fileURLToPath } from "node:url";
|
|
9
|
-
import * as _bundledPiAgentCore from "@caupulican/pi-agent-core";
|
|
10
|
-
import * as _bundledPiAi from "@caupulican/pi-ai";
|
|
11
|
-
import * as _bundledPiAiAbortSignals from "@caupulican/pi-ai/abort-signals";
|
|
12
|
-
import * as _bundledPiAiEventStream from "@caupulican/pi-ai/event-stream";
|
|
13
|
-
import * as _bundledPiAiJsonParse from "@caupulican/pi-ai/json-parse";
|
|
14
|
-
import * as _bundledPiAiOauth from "@caupulican/pi-ai/oauth";
|
|
15
|
-
import * as _bundledPiAiOverflow from "@caupulican/pi-ai/overflow";
|
|
16
|
-
import * as _bundledPiAiProviderRetry from "@caupulican/pi-ai/provider-retry";
|
|
17
|
-
import * as _bundledPiAiStream from "@caupulican/pi-ai/stream";
|
|
18
|
-
import * as _bundledPiAiStreamingLines from "@caupulican/pi-ai/streaming-lines";
|
|
19
|
-
import * as _bundledPiAiTextToolProtocol from "@caupulican/pi-ai/text-tool-protocol";
|
|
20
|
-
import * as _bundledPiAiToolRepairRegistry from "@caupulican/pi-ai/tool-repair-registry";
|
|
21
|
-
import * as _bundledPiAiTypeboxHelpers from "@caupulican/pi-ai/typebox-helpers";
|
|
22
|
-
import * as _bundledPiAiTypes from "@caupulican/pi-ai/types";
|
|
23
|
-
import * as _bundledPiAiUsage from "@caupulican/pi-ai/usage";
|
|
24
|
-
import * as _bundledPiAiUuid from "@caupulican/pi-ai/uuid";
|
|
25
|
-
import * as _bundledPiAiValidation from "@caupulican/pi-ai/validation";
|
|
26
|
-
import * as _bundledPiAiValidationPath from "@caupulican/pi-ai/validation-path";
|
|
27
|
-
import * as _bundledPiTui from "@caupulican/pi-tui";
|
|
28
9
|
import { createJiti } from "jiti/static";
|
|
29
|
-
// Static imports of packages that extensions may use.
|
|
30
|
-
// These MUST be static so Bun bundles them into the compiled binary.
|
|
31
|
-
// The virtualModules option then makes them available to extensions.
|
|
32
|
-
import * as _bundledTypebox from "typebox";
|
|
33
|
-
import * as _bundledTypeboxCompile from "typebox/compile";
|
|
34
|
-
import * as _bundledTypeboxValue from "typebox/value";
|
|
35
10
|
import { CONFIG_DIR_NAME, getAgentDir, isBunBinary } from "../../config.js";
|
|
36
|
-
// NOTE: This import works because loader.ts exports are NOT re-exported from index.ts,
|
|
37
|
-
// avoiding a circular dependency. Extensions can import from @caupulican/pi-adaptative.
|
|
38
|
-
import * as _bundledPiCodingAgent from "../../index.js";
|
|
39
11
|
import { resolvePath } from "../../utils/paths.js";
|
|
40
12
|
import { cacheFile } from "../agent-paths.js";
|
|
41
13
|
import { createEventBus } from "../event-bus.js";
|
|
42
|
-
import { execCommand } from "../exec.js";
|
|
43
|
-
import { createSyntheticSourceInfo } from "../source-info.js";
|
|
44
14
|
import { resolveExtensionIndexEntry } from "./entry-resolution.js";
|
|
45
|
-
import {
|
|
46
|
-
import {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
class ExtensionFactoryTimeoutError extends Error {
|
|
51
|
-
}
|
|
52
|
-
const PI_AI_WORKSPACE_SUBPATHS = {
|
|
53
|
-
"abort-signals": "ai/src/utils/abort-signals.ts",
|
|
54
|
-
"event-stream": "ai/src/utils/event-stream.ts",
|
|
55
|
-
"json-parse": "ai/src/utils/json-parse.ts",
|
|
56
|
-
oauth: "ai/src/oauth.ts",
|
|
57
|
-
overflow: "ai/src/utils/overflow.ts",
|
|
58
|
-
"provider-retry": "ai/src/utils/provider-retry.ts",
|
|
59
|
-
stream: "ai/src/stream.ts",
|
|
60
|
-
"streaming-lines": "ai/src/utils/streaming-lines.ts",
|
|
61
|
-
"text-tool-protocol": "ai/src/utils/tool-repair/text-protocol.ts",
|
|
62
|
-
"tool-repair-registry": "ai/src/utils/tool-repair/registry.ts",
|
|
63
|
-
"typebox-helpers": "ai/src/utils/typebox-helpers.ts",
|
|
64
|
-
types: "ai/src/types.ts",
|
|
65
|
-
usage: "ai/src/usage.ts",
|
|
66
|
-
uuid: "ai/src/utils/uuid.ts",
|
|
67
|
-
validation: "ai/src/utils/validation.ts",
|
|
68
|
-
"validation-path": "ai/src/utils/validation-path.ts",
|
|
69
|
-
};
|
|
70
|
-
const PI_AI_VIRTUAL_SUBPATHS = {
|
|
71
|
-
"abort-signals": _bundledPiAiAbortSignals,
|
|
72
|
-
"event-stream": _bundledPiAiEventStream,
|
|
73
|
-
"json-parse": _bundledPiAiJsonParse,
|
|
74
|
-
oauth: _bundledPiAiOauth,
|
|
75
|
-
overflow: _bundledPiAiOverflow,
|
|
76
|
-
"provider-retry": _bundledPiAiProviderRetry,
|
|
77
|
-
stream: _bundledPiAiStream,
|
|
78
|
-
"streaming-lines": _bundledPiAiStreamingLines,
|
|
79
|
-
"text-tool-protocol": _bundledPiAiTextToolProtocol,
|
|
80
|
-
"tool-repair-registry": _bundledPiAiToolRepairRegistry,
|
|
81
|
-
"typebox-helpers": _bundledPiAiTypeboxHelpers,
|
|
82
|
-
types: _bundledPiAiTypes,
|
|
83
|
-
usage: _bundledPiAiUsage,
|
|
84
|
-
uuid: _bundledPiAiUuid,
|
|
85
|
-
validation: _bundledPiAiValidation,
|
|
86
|
-
"validation-path": _bundledPiAiValidationPath,
|
|
87
|
-
};
|
|
88
|
-
function piAiVirtualModules(packageName) {
|
|
89
|
-
return Object.fromEntries([
|
|
90
|
-
[packageName, _bundledPiAi],
|
|
91
|
-
...Object.entries(PI_AI_VIRTUAL_SUBPATHS).map(([subpath, module]) => [`${packageName}/${subpath}`, module]),
|
|
92
|
-
]);
|
|
93
|
-
}
|
|
94
|
-
/** Modules available to extensions via virtualModules (for compiled Bun binary) */
|
|
95
|
-
const VIRTUAL_MODULES = {
|
|
96
|
-
typebox: _bundledTypebox,
|
|
97
|
-
"typebox/compile": _bundledTypeboxCompile,
|
|
98
|
-
"typebox/value": _bundledTypeboxValue,
|
|
99
|
-
"@sinclair/typebox": _bundledTypebox,
|
|
100
|
-
"@sinclair/typebox/compile": _bundledTypeboxCompile,
|
|
101
|
-
"@sinclair/typebox/value": _bundledTypeboxValue,
|
|
102
|
-
"@caupulican/pi-agent-core": _bundledPiAgentCore,
|
|
103
|
-
"@caupulican/pi-tui": _bundledPiTui,
|
|
104
|
-
...piAiVirtualModules("@caupulican/pi-ai"),
|
|
105
|
-
"@caupulican/pi-adaptative": _bundledPiCodingAgent,
|
|
106
|
-
"@earendil-works/pi-agent-core": _bundledPiAgentCore,
|
|
107
|
-
"@earendil-works/pi-tui": _bundledPiTui,
|
|
108
|
-
...piAiVirtualModules("@earendil-works/pi-ai"),
|
|
109
|
-
"@earendil-works/pi-coding-agent": _bundledPiCodingAgent,
|
|
110
|
-
"@mariozechner/pi-agent-core": _bundledPiAgentCore,
|
|
111
|
-
"@mariozechner/pi-tui": _bundledPiTui,
|
|
112
|
-
...piAiVirtualModules("@mariozechner/pi-ai"),
|
|
113
|
-
"@mariozechner/pi-coding-agent": _bundledPiCodingAgent,
|
|
114
|
-
};
|
|
15
|
+
import { createExtension, createExtensionAPI, createExtensionRuntime, EXTENSION_FACTORY_TIMEOUT_MS, ExtensionFactoryTimeoutError, restoreExtensionLoadRuntime, runExtensionFactory, snapshotExtensionLoadRuntime, } from "./factory-runtime.js";
|
|
16
|
+
import { disposeExtensionEventSubscriptions, isExtensionGenerationInactive } from "./lifecycle.js";
|
|
17
|
+
import { getBundledExtensionVirtualModules, PI_AGENT_CORE_EXTENSION_SUBPATHS, PI_AI_EXTENSION_SUBPATHS, } from "./virtual-modules.js";
|
|
18
|
+
export { createExtensionRuntime, loadExtensionFromFactory } from "./factory-runtime.js";
|
|
19
|
+
export { disposeExtensionEventSubscriptions } from "./lifecycle.js";
|
|
115
20
|
function uniquePaths(paths) {
|
|
116
21
|
return [...new Set(paths)];
|
|
117
22
|
}
|
|
@@ -173,11 +78,13 @@ function getAliases() {
|
|
|
173
78
|
};
|
|
174
79
|
const piCodingAgentEntry = packageIndex;
|
|
175
80
|
const piAgentCoreEntry = resolveWorkspaceOrImport("agent/src/index.ts", "@caupulican/pi-agent-core");
|
|
176
|
-
const
|
|
177
|
-
|
|
81
|
+
const piAgentCoreSubpathEntries = Object.fromEntries(Object.entries(PI_AGENT_CORE_EXTENSION_SUBPATHS).map(([subpath, workspacePath]) => [
|
|
82
|
+
subpath,
|
|
83
|
+
resolveWorkspaceOrImport(workspacePath, `@caupulican/pi-agent-core/${subpath}`),
|
|
84
|
+
]));
|
|
178
85
|
const piTuiEntry = resolveWorkspaceOrImport("tui/src/index.ts", "@caupulican/pi-tui");
|
|
179
86
|
const piAiEntry = resolveWorkspaceOrImport("ai/src/index.ts", "@caupulican/pi-ai");
|
|
180
|
-
const piAiSubpathEntries = Object.fromEntries(Object.entries(
|
|
87
|
+
const piAiSubpathEntries = Object.fromEntries(Object.entries(PI_AI_EXTENSION_SUBPATHS).map(([subpath, workspacePath]) => [
|
|
181
88
|
subpath,
|
|
182
89
|
resolveWorkspaceOrImport(workspacePath, `@caupulican/pi-ai/${subpath}`),
|
|
183
90
|
]));
|
|
@@ -185,24 +92,22 @@ function getAliases() {
|
|
|
185
92
|
...Object.entries(piAiSubpathEntries).map(([subpath, entry]) => [`${packageName}/${subpath}`, entry]),
|
|
186
93
|
[packageName, piAiEntry],
|
|
187
94
|
]);
|
|
95
|
+
const piAgentCoreAliases = (packageName) => Object.fromEntries([
|
|
96
|
+
...Object.entries(piAgentCoreSubpathEntries).map(([subpath, entry]) => [`${packageName}/${subpath}`, entry]),
|
|
97
|
+
[packageName, piAgentCoreEntry],
|
|
98
|
+
]);
|
|
188
99
|
_aliases = {
|
|
189
|
-
"@caupulican/pi-agent-core
|
|
190
|
-
"@caupulican/pi-agent-core/paths": piAgentCorePathsEntry,
|
|
100
|
+
...piAgentCoreAliases("@caupulican/pi-agent-core"),
|
|
191
101
|
...piAiAliases("@caupulican/pi-ai"),
|
|
192
102
|
"@caupulican/pi-adaptative": piCodingAgentEntry,
|
|
193
|
-
"@caupulican/pi-agent-core": piAgentCoreEntry,
|
|
194
103
|
"@caupulican/pi-tui": piTuiEntry,
|
|
195
|
-
"@earendil-works/pi-agent-core
|
|
196
|
-
"@earendil-works/pi-agent-core/paths": piAgentCorePathsEntry,
|
|
104
|
+
...piAgentCoreAliases("@earendil-works/pi-agent-core"),
|
|
197
105
|
...piAiAliases("@earendil-works/pi-ai"),
|
|
198
106
|
"@earendil-works/pi-coding-agent": piCodingAgentEntry,
|
|
199
|
-
"@earendil-works/pi-agent-core": piAgentCoreEntry,
|
|
200
107
|
"@earendil-works/pi-tui": piTuiEntry,
|
|
201
|
-
"@mariozechner/pi-agent-core
|
|
202
|
-
"@mariozechner/pi-agent-core/paths": piAgentCorePathsEntry,
|
|
108
|
+
...piAgentCoreAliases("@mariozechner/pi-agent-core"),
|
|
203
109
|
...piAiAliases("@mariozechner/pi-ai"),
|
|
204
110
|
"@mariozechner/pi-coding-agent": piCodingAgentEntry,
|
|
205
|
-
"@mariozechner/pi-agent-core": piAgentCoreEntry,
|
|
206
111
|
"@mariozechner/pi-tui": piTuiEntry,
|
|
207
112
|
typebox: typeboxEntry,
|
|
208
113
|
"typebox/compile": typeboxCompileEntry,
|
|
@@ -216,294 +121,6 @@ function getAliases() {
|
|
|
216
121
|
function yieldToEventLoop() {
|
|
217
122
|
return new Promise((resolve) => setImmediate(resolve));
|
|
218
123
|
}
|
|
219
|
-
/**
|
|
220
|
-
* Create a runtime with throwing stubs for action methods.
|
|
221
|
-
* Runner.bindCore() replaces these with real implementations.
|
|
222
|
-
*/
|
|
223
|
-
export function createExtensionRuntime() {
|
|
224
|
-
const notInitialized = () => {
|
|
225
|
-
throw new Error("Extension runtime not initialized. Action methods cannot be called during extension loading.");
|
|
226
|
-
};
|
|
227
|
-
const state = {};
|
|
228
|
-
const assertActive = () => {
|
|
229
|
-
if (state.staleMessage) {
|
|
230
|
-
throw new Error(state.staleMessage);
|
|
231
|
-
}
|
|
232
|
-
};
|
|
233
|
-
const providersByExtension = new Map();
|
|
234
|
-
const providerRegistrations = new Map();
|
|
235
|
-
const memoryProvidersByExtension = new Map();
|
|
236
|
-
const contextMemoryProvidersByExtension = new Map();
|
|
237
|
-
const extensionStorageOwners = new Map();
|
|
238
|
-
const runtime = {
|
|
239
|
-
sendMessage: notInitialized,
|
|
240
|
-
sendUserMessage: notInitialized,
|
|
241
|
-
appendEntry: notInitialized,
|
|
242
|
-
setSessionName: notInitialized,
|
|
243
|
-
getSessionName: notInitialized,
|
|
244
|
-
setLabel: notInitialized,
|
|
245
|
-
getActiveTools: notInitialized,
|
|
246
|
-
getAllTools: notInitialized,
|
|
247
|
-
setActiveTools: notInitialized,
|
|
248
|
-
// registerTool() is valid during extension load; refresh is only needed post-bind.
|
|
249
|
-
refreshTools: () => { },
|
|
250
|
-
getCommands: notInitialized,
|
|
251
|
-
setModel: notInitialized,
|
|
252
|
-
getThinkingLevel: notInitialized,
|
|
253
|
-
setThinkingLevel: notInitialized,
|
|
254
|
-
getExternalResourceRoots: notInitialized,
|
|
255
|
-
registerMemoryProvider: notInitialized,
|
|
256
|
-
registerContextMemoryProvider: notInitialized,
|
|
257
|
-
reportSpawnedUsage: notInitialized,
|
|
258
|
-
reportManagedLane: notInitialized,
|
|
259
|
-
flagValues: new Map(),
|
|
260
|
-
pendingProviderRegistrations: [],
|
|
261
|
-
assertActive,
|
|
262
|
-
invalidate: (message) => {
|
|
263
|
-
state.staleMessage ??= message ?? DEFAULT_STALE_EXTENSION_CONTEXT_MESSAGE;
|
|
264
|
-
},
|
|
265
|
-
// Pre-bind: queue registrations so bindCore() can flush them once the
|
|
266
|
-
// model registry is available. bindCore() replaces both with direct calls.
|
|
267
|
-
registerProvider: (name, config, extensionPath = "<unknown>") => {
|
|
268
|
-
runtime.pendingProviderRegistrations.push({ name, config, extensionPath });
|
|
269
|
-
},
|
|
270
|
-
unregisterProvider: (name) => {
|
|
271
|
-
runtime.pendingProviderRegistrations = runtime.pendingProviderRegistrations.filter((r) => r.name !== name);
|
|
272
|
-
},
|
|
273
|
-
providersByExtension,
|
|
274
|
-
providerRegistrations,
|
|
275
|
-
getProvidersForExtension: (extensionPath) => {
|
|
276
|
-
return [...(providersByExtension.get(extensionPath) ?? [])];
|
|
277
|
-
},
|
|
278
|
-
memoryProvidersByExtension,
|
|
279
|
-
contextMemoryProvidersByExtension,
|
|
280
|
-
extensionStorageOwners,
|
|
281
|
-
};
|
|
282
|
-
return runtime;
|
|
283
|
-
}
|
|
284
|
-
/**
|
|
285
|
-
* Create the ExtensionAPI for an extension.
|
|
286
|
-
* Registration methods write to the extension object.
|
|
287
|
-
* Action methods delegate to the shared runtime.
|
|
288
|
-
*/
|
|
289
|
-
function createExtensionAPI(extension, runtime, cwd, eventBus, agentDir) {
|
|
290
|
-
// A factory can time out while its promise continues running. Route every later API call through
|
|
291
|
-
// an extension-generation guard so stale async work cannot register tools, handlers, or providers.
|
|
292
|
-
const sharedRuntime = runtime;
|
|
293
|
-
runtime = new Proxy(sharedRuntime, {
|
|
294
|
-
get(target, property, receiver) {
|
|
295
|
-
if (property === "assertActive") {
|
|
296
|
-
return () => {
|
|
297
|
-
target.assertActive();
|
|
298
|
-
if (inactiveExtensions.has(extension)) {
|
|
299
|
-
throw new Error(`Extension generation is no longer active: ${extension.path}`);
|
|
300
|
-
}
|
|
301
|
-
};
|
|
302
|
-
}
|
|
303
|
-
return Reflect.get(target, property, receiver);
|
|
304
|
-
},
|
|
305
|
-
});
|
|
306
|
-
const api = {
|
|
307
|
-
getStorage(namespace) {
|
|
308
|
-
runtime.assertActive();
|
|
309
|
-
if (extension.storage) {
|
|
310
|
-
if (extension.storage.namespace !== namespace) {
|
|
311
|
-
throw new Error(`Extension ${extension.path} already owns storage namespace ${extension.storage.namespace}; cannot also use ${namespace}`);
|
|
312
|
-
}
|
|
313
|
-
return extension.storage;
|
|
314
|
-
}
|
|
315
|
-
const storage = createExtensionStorage(agentDir, namespace, runtime.assertActive, (disposer) => extension.disposers.push(disposer));
|
|
316
|
-
const previousOwner = runtime.extensionStorageOwners.get(namespace);
|
|
317
|
-
if (previousOwner && previousOwner.path !== extension.path) {
|
|
318
|
-
throw new Error(`Extension storage namespace ${namespace} is already owned by ${previousOwner.path}; ${extension.path} cannot also use it`);
|
|
319
|
-
}
|
|
320
|
-
runtime.extensionStorageOwners.set(namespace, extension);
|
|
321
|
-
extension.disposers.push(() => {
|
|
322
|
-
if (runtime.extensionStorageOwners.get(namespace) !== extension)
|
|
323
|
-
return;
|
|
324
|
-
if (previousOwner && !inactiveExtensions.has(previousOwner)) {
|
|
325
|
-
runtime.extensionStorageOwners.set(namespace, previousOwner);
|
|
326
|
-
}
|
|
327
|
-
else {
|
|
328
|
-
runtime.extensionStorageOwners.delete(namespace);
|
|
329
|
-
}
|
|
330
|
-
});
|
|
331
|
-
extension.storage = storage;
|
|
332
|
-
return storage;
|
|
333
|
-
},
|
|
334
|
-
// Registration methods - write to extension
|
|
335
|
-
on(event, handler) {
|
|
336
|
-
runtime.assertActive();
|
|
337
|
-
const list = extension.handlers.get(event) ?? [];
|
|
338
|
-
list.push(handler);
|
|
339
|
-
extension.handlers.set(event, list);
|
|
340
|
-
},
|
|
341
|
-
registerTool(tool) {
|
|
342
|
-
runtime.assertActive();
|
|
343
|
-
extension.tools.set(tool.name, {
|
|
344
|
-
definition: tool,
|
|
345
|
-
sourceInfo: extension.sourceInfo,
|
|
346
|
-
});
|
|
347
|
-
runtime.refreshTools();
|
|
348
|
-
},
|
|
349
|
-
registerCommand(name, options) {
|
|
350
|
-
runtime.assertActive();
|
|
351
|
-
extension.commands.set(name, {
|
|
352
|
-
name,
|
|
353
|
-
sourceInfo: extension.sourceInfo,
|
|
354
|
-
...options,
|
|
355
|
-
});
|
|
356
|
-
},
|
|
357
|
-
registerShortcut(shortcut, options) {
|
|
358
|
-
runtime.assertActive();
|
|
359
|
-
extension.shortcuts.set(shortcut, { shortcut, extensionPath: extension.path, ...options });
|
|
360
|
-
},
|
|
361
|
-
registerFlag(name, options) {
|
|
362
|
-
runtime.assertActive();
|
|
363
|
-
extension.flags.set(name, { name, extensionPath: extension.path, ...options });
|
|
364
|
-
if (options.default !== undefined && !runtime.flagValues.has(name)) {
|
|
365
|
-
runtime.flagValues.set(name, options.default);
|
|
366
|
-
}
|
|
367
|
-
},
|
|
368
|
-
registerMessageRenderer(customType, renderer) {
|
|
369
|
-
runtime.assertActive();
|
|
370
|
-
extension.messageRenderers.set(customType, renderer);
|
|
371
|
-
},
|
|
372
|
-
// Flag access - checks extension registered it, reads from runtime
|
|
373
|
-
getFlag(name) {
|
|
374
|
-
runtime.assertActive();
|
|
375
|
-
if (!extension.flags.has(name))
|
|
376
|
-
return undefined;
|
|
377
|
-
return runtime.flagValues.get(name);
|
|
378
|
-
},
|
|
379
|
-
// Action methods - delegate to shared runtime
|
|
380
|
-
sendMessage(message, options) {
|
|
381
|
-
runtime.assertActive();
|
|
382
|
-
runtime.sendMessage(message, options);
|
|
383
|
-
},
|
|
384
|
-
sendUserMessage(content, options) {
|
|
385
|
-
runtime.assertActive();
|
|
386
|
-
runtime.sendUserMessage(content, options);
|
|
387
|
-
},
|
|
388
|
-
appendEntry(customType, data) {
|
|
389
|
-
runtime.assertActive();
|
|
390
|
-
runtime.appendEntry(customType, data);
|
|
391
|
-
},
|
|
392
|
-
setSessionName(name) {
|
|
393
|
-
runtime.assertActive();
|
|
394
|
-
runtime.setSessionName(name);
|
|
395
|
-
},
|
|
396
|
-
getSessionName() {
|
|
397
|
-
runtime.assertActive();
|
|
398
|
-
return runtime.getSessionName();
|
|
399
|
-
},
|
|
400
|
-
setLabel(entryId, label) {
|
|
401
|
-
runtime.assertActive();
|
|
402
|
-
runtime.setLabel(entryId, label);
|
|
403
|
-
},
|
|
404
|
-
exec(command, args, options) {
|
|
405
|
-
runtime.assertActive();
|
|
406
|
-
return execCommand(command, args, options?.cwd ?? cwd, options);
|
|
407
|
-
},
|
|
408
|
-
getActiveTools() {
|
|
409
|
-
runtime.assertActive();
|
|
410
|
-
return runtime.getActiveTools();
|
|
411
|
-
},
|
|
412
|
-
getAllTools() {
|
|
413
|
-
runtime.assertActive();
|
|
414
|
-
return runtime.getAllTools();
|
|
415
|
-
},
|
|
416
|
-
setActiveTools(toolNames) {
|
|
417
|
-
runtime.assertActive();
|
|
418
|
-
runtime.setActiveTools(toolNames);
|
|
419
|
-
},
|
|
420
|
-
getCommands() {
|
|
421
|
-
runtime.assertActive();
|
|
422
|
-
return runtime.getCommands();
|
|
423
|
-
},
|
|
424
|
-
getExternalResourceRoots() {
|
|
425
|
-
runtime.assertActive();
|
|
426
|
-
return runtime.getExternalResourceRoots();
|
|
427
|
-
},
|
|
428
|
-
registerMemoryProvider(provider) {
|
|
429
|
-
runtime.assertActive();
|
|
430
|
-
runtime.registerMemoryProvider(provider);
|
|
431
|
-
const providers = runtime.memoryProvidersByExtension.get(extension.path) ?? new Set();
|
|
432
|
-
providers.add(provider);
|
|
433
|
-
runtime.memoryProvidersByExtension.set(extension.path, providers);
|
|
434
|
-
},
|
|
435
|
-
registerContextMemoryProvider(provider) {
|
|
436
|
-
runtime.assertActive();
|
|
437
|
-
runtime.registerContextMemoryProvider(provider);
|
|
438
|
-
const providers = runtime.contextMemoryProvidersByExtension.get(extension.path) ?? new Set();
|
|
439
|
-
providers.add(provider);
|
|
440
|
-
runtime.contextMemoryProvidersByExtension.set(extension.path, providers);
|
|
441
|
-
},
|
|
442
|
-
reportSpawnedUsage(usage, opts) {
|
|
443
|
-
runtime.assertActive();
|
|
444
|
-
runtime.reportSpawnedUsage(usage, opts);
|
|
445
|
-
},
|
|
446
|
-
reportManagedLane(event) {
|
|
447
|
-
runtime.assertActive();
|
|
448
|
-
runtime.reportManagedLane(event);
|
|
449
|
-
},
|
|
450
|
-
setModel(model) {
|
|
451
|
-
runtime.assertActive();
|
|
452
|
-
return runtime.setModel(model);
|
|
453
|
-
},
|
|
454
|
-
getThinkingLevel() {
|
|
455
|
-
runtime.assertActive();
|
|
456
|
-
return runtime.getThinkingLevel();
|
|
457
|
-
},
|
|
458
|
-
setThinkingLevel(level) {
|
|
459
|
-
runtime.assertActive();
|
|
460
|
-
runtime.setThinkingLevel(level);
|
|
461
|
-
},
|
|
462
|
-
registerProvider(name, config) {
|
|
463
|
-
runtime.assertActive();
|
|
464
|
-
runtime.registerProvider(name, config, extension.path);
|
|
465
|
-
},
|
|
466
|
-
unregisterProvider(name) {
|
|
467
|
-
runtime.assertActive();
|
|
468
|
-
runtime.unregisterProvider(name, extension.path);
|
|
469
|
-
},
|
|
470
|
-
onDispose(fn) {
|
|
471
|
-
runtime.assertActive();
|
|
472
|
-
extension.disposers.push(fn);
|
|
473
|
-
},
|
|
474
|
-
// Track bus subscriptions per extension generation so hot reloads can
|
|
475
|
-
// unsubscribe replaced generations (see disposeExtensionEventSubscriptions).
|
|
476
|
-
events: {
|
|
477
|
-
emit: (channel, data) => {
|
|
478
|
-
runtime.assertActive();
|
|
479
|
-
eventBus.emit(channel, data);
|
|
480
|
-
},
|
|
481
|
-
on: (channel, handler) => {
|
|
482
|
-
runtime.assertActive();
|
|
483
|
-
const unsubscribe = eventBus.on(channel, handler);
|
|
484
|
-
extension.eventUnsubscribes.push(unsubscribe);
|
|
485
|
-
return unsubscribe;
|
|
486
|
-
},
|
|
487
|
-
},
|
|
488
|
-
};
|
|
489
|
-
return api;
|
|
490
|
-
}
|
|
491
|
-
async function runExtensionFactory(factory, api, timeoutMs = EXTENSION_FACTORY_TIMEOUT_MS) {
|
|
492
|
-
let timeout;
|
|
493
|
-
const completion = Promise.resolve().then(() => factory(api));
|
|
494
|
-
try {
|
|
495
|
-
await Promise.race([
|
|
496
|
-
completion,
|
|
497
|
-
new Promise((_resolve, reject) => {
|
|
498
|
-
timeout = setTimeout(() => reject(new ExtensionFactoryTimeoutError(`Extension factory timed out after ${timeoutMs}ms`)), Math.max(0, timeoutMs));
|
|
499
|
-
}),
|
|
500
|
-
]);
|
|
501
|
-
}
|
|
502
|
-
finally {
|
|
503
|
-
if (timeout)
|
|
504
|
-
clearTimeout(timeout);
|
|
505
|
-
}
|
|
506
|
-
}
|
|
507
124
|
async function loadExtensionModule(extensionPath, transformCacheAgentDir, opts) {
|
|
508
125
|
const jiti = createJiti(import.meta.url, {
|
|
509
126
|
// A fresh jiti instance is created on every call and moduleCache is disabled so each load
|
|
@@ -524,7 +141,9 @@ async function loadExtensionModule(extensionPath, transformCacheAgentDir, opts)
|
|
|
524
141
|
fsCache: transformCacheAgentDir ? cacheFile(transformCacheAgentDir, "jiti-transforms") : false,
|
|
525
142
|
// In Bun binary: use virtualModules for bundled packages (no filesystem resolution)
|
|
526
143
|
// In Node.js/dev: use aliases to resolve to node_modules paths
|
|
527
|
-
...(isBunBinary
|
|
144
|
+
...(isBunBinary
|
|
145
|
+
? { virtualModules: getBundledExtensionVirtualModules(), tryNative: false }
|
|
146
|
+
: { alias: getAliases() }),
|
|
528
147
|
});
|
|
529
148
|
// Every call gets a fresh jiti instance with moduleCache disabled. Do not append a query string:
|
|
530
149
|
// jiti's Windows path resolver treats it as part of the .ts filename.
|
|
@@ -545,113 +164,6 @@ async function loadExtensionModule(extensionPath, transformCacheAgentDir, opts)
|
|
|
545
164
|
clearTimeout(timeout);
|
|
546
165
|
}
|
|
547
166
|
}
|
|
548
|
-
/**
|
|
549
|
-
* Create an Extension object with empty collections.
|
|
550
|
-
*/
|
|
551
|
-
function createExtension(extensionPath, resolvedPath) {
|
|
552
|
-
const source = extensionPath.startsWith("<") && extensionPath.endsWith(">")
|
|
553
|
-
? extensionPath.slice(1, -1).split(":")[0] || "temporary"
|
|
554
|
-
: "local";
|
|
555
|
-
const baseDir = extensionPath.startsWith("<") ? undefined : path.dirname(resolvedPath);
|
|
556
|
-
return {
|
|
557
|
-
path: extensionPath,
|
|
558
|
-
resolvedPath,
|
|
559
|
-
sourceInfo: createSyntheticSourceInfo(extensionPath, { source, baseDir }),
|
|
560
|
-
handlers: new Map(),
|
|
561
|
-
tools: new Map(),
|
|
562
|
-
messageRenderers: new Map(),
|
|
563
|
-
commands: new Map(),
|
|
564
|
-
flags: new Map(),
|
|
565
|
-
shortcuts: new Map(),
|
|
566
|
-
eventUnsubscribes: [],
|
|
567
|
-
disposers: [],
|
|
568
|
-
};
|
|
569
|
-
}
|
|
570
|
-
/**
|
|
571
|
-
* Unsubscribe a replaced extension generation's pi.events handlers from the shared
|
|
572
|
-
* event bus and invoke cleanup callbacks. Without this, every hot reload leaves the
|
|
573
|
-
* previous generation's handlers subscribed, pinning the old module graph in memory
|
|
574
|
-
* and double-processing events.
|
|
575
|
-
*/
|
|
576
|
-
export async function disposeExtensionEventSubscriptions(extensions, options = {}) {
|
|
577
|
-
const deadline = Date.now() + (options.timeoutMs ?? EXTENSION_DISPOSAL_TIMEOUT_MS);
|
|
578
|
-
for (const extension of extensions) {
|
|
579
|
-
if (options.deactivate ?? true)
|
|
580
|
-
inactiveExtensions.add(extension);
|
|
581
|
-
// Unsubscribe event listeners
|
|
582
|
-
for (const unsubscribe of extension.eventUnsubscribes) {
|
|
583
|
-
try {
|
|
584
|
-
unsubscribe();
|
|
585
|
-
}
|
|
586
|
-
catch {
|
|
587
|
-
// Disposal must never break a reload.
|
|
588
|
-
}
|
|
589
|
-
}
|
|
590
|
-
extension.eventUnsubscribes.length = 0;
|
|
591
|
-
// Invoke every cleanup callback, but never let one unresolved async disposer block reload or
|
|
592
|
-
// shutdown indefinitely. Late continuations retain rejection handlers and the inactive API guard.
|
|
593
|
-
for (const disposer of extension.disposers) {
|
|
594
|
-
try {
|
|
595
|
-
const result = disposer();
|
|
596
|
-
if (result !== undefined) {
|
|
597
|
-
const completion = Promise.resolve(result).catch(() => undefined);
|
|
598
|
-
const remainingMs = Math.max(0, deadline - Date.now());
|
|
599
|
-
if (remainingMs > 0) {
|
|
600
|
-
let timeout;
|
|
601
|
-
await Promise.race([
|
|
602
|
-
completion,
|
|
603
|
-
new Promise((resolve) => {
|
|
604
|
-
timeout = setTimeout(resolve, remainingMs);
|
|
605
|
-
}),
|
|
606
|
-
]);
|
|
607
|
-
if (timeout)
|
|
608
|
-
clearTimeout(timeout);
|
|
609
|
-
}
|
|
610
|
-
}
|
|
611
|
-
}
|
|
612
|
-
catch {
|
|
613
|
-
// Disposal must never break a reload.
|
|
614
|
-
}
|
|
615
|
-
}
|
|
616
|
-
extension.disposers.length = 0;
|
|
617
|
-
}
|
|
618
|
-
}
|
|
619
|
-
function snapshotExtensionLoadRuntime(runtime) {
|
|
620
|
-
return {
|
|
621
|
-
pendingProviderRegistrations: [...runtime.pendingProviderRegistrations],
|
|
622
|
-
flagValues: new Map(runtime.flagValues),
|
|
623
|
-
providerRegistrations: new Map(runtime.providerRegistrations),
|
|
624
|
-
};
|
|
625
|
-
}
|
|
626
|
-
function restoreExtensionLoadRuntime(runtime, snapshot) {
|
|
627
|
-
for (const [name, current] of runtime.providerRegistrations) {
|
|
628
|
-
const previous = snapshot.providerRegistrations.get(name);
|
|
629
|
-
if (!previous || previous.config !== current.config || previous.extensionPath !== current.extensionPath) {
|
|
630
|
-
try {
|
|
631
|
-
runtime.unregisterProvider(name, current.extensionPath);
|
|
632
|
-
}
|
|
633
|
-
catch {
|
|
634
|
-
// Preserve the original factory failure; reload rollback remains the outer safety net.
|
|
635
|
-
}
|
|
636
|
-
}
|
|
637
|
-
}
|
|
638
|
-
for (const [name, previous] of snapshot.providerRegistrations) {
|
|
639
|
-
const current = runtime.providerRegistrations.get(name);
|
|
640
|
-
if (current?.config === previous.config && current.extensionPath === previous.extensionPath)
|
|
641
|
-
continue;
|
|
642
|
-
try {
|
|
643
|
-
runtime.registerProvider(name, previous.config, previous.extensionPath);
|
|
644
|
-
}
|
|
645
|
-
catch {
|
|
646
|
-
// Preserve the original factory failure; reload rollback remains the outer safety net.
|
|
647
|
-
}
|
|
648
|
-
}
|
|
649
|
-
runtime.pendingProviderRegistrations = snapshot.pendingProviderRegistrations;
|
|
650
|
-
runtime.flagValues.clear();
|
|
651
|
-
for (const [name, value] of snapshot.flagValues) {
|
|
652
|
-
runtime.flagValues.set(name, value);
|
|
653
|
-
}
|
|
654
|
-
}
|
|
655
167
|
export async function loadExtension(extensionPath, cwd, eventBus, runtime, opts) {
|
|
656
168
|
const resolvedPath = resolvePath(extensionPath, cwd, { normalizeUnicodeSpaces: true });
|
|
657
169
|
const resolvedAgentDir = resolvePath(opts?.agentDir ?? getAgentDir());
|
|
@@ -711,7 +223,7 @@ function createLazyExtension(extensionPath, resolvedPath, cwd, eventBus, runtime
|
|
|
711
223
|
const extension = createExtension(extensionPath, resolvedPath);
|
|
712
224
|
let restoreLazyToolPlaceholders = () => { };
|
|
713
225
|
const load = async () => {
|
|
714
|
-
if (
|
|
226
|
+
if (isExtensionGenerationInactive(extension)) {
|
|
715
227
|
throw new Error(`Lazy extension generation is no longer active: ${extension.path}`);
|
|
716
228
|
}
|
|
717
229
|
if (extension.lazy?.loaded)
|
|
@@ -772,25 +284,6 @@ function createLazyExtension(extensionPath, resolvedPath, cwd, eventBus, runtime
|
|
|
772
284
|
restoreLazyToolPlaceholders();
|
|
773
285
|
return extension;
|
|
774
286
|
}
|
|
775
|
-
/**
|
|
776
|
-
* Create an Extension from an inline factory function.
|
|
777
|
-
*/
|
|
778
|
-
export async function loadExtensionFromFactory(factory, cwd, eventBus, runtime, extensionPath = "<inline>", options = {}) {
|
|
779
|
-
const extension = createExtension(extensionPath, extensionPath);
|
|
780
|
-
const resolvedCwd = resolvePath(cwd);
|
|
781
|
-
const resolvedAgentDir = resolvePath(options.agentDir ?? getAgentDir());
|
|
782
|
-
const api = createExtensionAPI(extension, runtime, resolvedCwd, eventBus, resolvedAgentDir);
|
|
783
|
-
const runtimeSnapshot = snapshotExtensionLoadRuntime(runtime);
|
|
784
|
-
try {
|
|
785
|
-
await runExtensionFactory(factory, api, options.factoryTimeoutMs);
|
|
786
|
-
}
|
|
787
|
-
catch (err) {
|
|
788
|
-
await disposeExtensionEventSubscriptions([extension]);
|
|
789
|
-
restoreExtensionLoadRuntime(runtime, runtimeSnapshot);
|
|
790
|
-
throw err;
|
|
791
|
-
}
|
|
792
|
-
return extension;
|
|
793
|
-
}
|
|
794
287
|
/**
|
|
795
288
|
* Load extensions from paths.
|
|
796
289
|
*/
|