@ai-agent-forge/agent-forge 0.86.7 → 0.87.0
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 +18 -0
- package/README.md +8 -9
- package/dist/artifacts/artifact-store.d.ts.map +1 -1
- package/dist/artifacts/artifact-store.js +9 -5
- package/dist/artifacts/artifact-store.js.map +1 -1
- package/dist/bundle/.build-manifest.json +410 -371
- package/dist/bundle/chunks/{chunk-A7GUOX2H.js → chunk-6ZKDNZHA.js} +5 -1
- package/dist/bundle/chunks/chunk-BFC2BDVJ.js +13 -0
- package/dist/bundle/chunks/chunk-MOHOLL3F.js +1456 -0
- package/dist/bundle/chunks/image-resize-worker.js +12 -1
- package/dist/bundle/chunks/{virtual-modules-3IZ4MYSQ.js → virtual-modules-KZ5DRH7Q.js} +1 -1
- package/dist/bundle/cli.js +1 -1
- package/dist/bundle/client.js +1 -1
- package/dist/bundle/index.js +2 -2
- package/dist/bundle/rpc-entry.js +1 -1
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +231 -185
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/auth-check.d.ts.map +1 -1
- package/dist/cli/auth-check.js +3 -2
- package/dist/cli/auth-check.js.map +1 -1
- package/dist/cli/auth-command.d.ts.map +1 -1
- package/dist/cli/auth-command.js +15 -9
- package/dist/cli/auth-command.js.map +1 -1
- package/dist/cli/credential-print.d.ts.map +1 -1
- package/dist/cli/credential-print.js +14 -7
- package/dist/cli/credential-print.js.map +1 -1
- package/dist/cli/experimental/command.d.ts.map +1 -1
- package/dist/cli/experimental/command.js +6 -5
- package/dist/cli/experimental/command.js.map +1 -1
- package/dist/cli/list-models.d.ts.map +1 -1
- package/dist/cli/list-models.js +9 -8
- package/dist/cli/list-models.js.map +1 -1
- package/dist/cli/plugin-manager-controller.d.ts.map +1 -1
- package/dist/cli/plugin-manager-controller.js +2 -1
- package/dist/cli/plugin-manager-controller.js.map +1 -1
- package/dist/cli/serve.d.ts.map +1 -1
- package/dist/cli/serve.js +8 -5
- package/dist/cli/serve.js.map +1 -1
- package/dist/client/remote-session.d.ts.map +1 -1
- package/dist/client/remote-session.js +16 -9
- package/dist/client/remote-session.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +2 -1
- package/dist/config.js.map +1 -1
- package/dist/core/agent-capability-contract.d.ts +0 -7
- package/dist/core/agent-capability-contract.d.ts.map +1 -1
- package/dist/core/agent-capability-contract.js +72 -68
- package/dist/core/agent-capability-contract.js.map +1 -1
- package/dist/core/agent-session-bash.d.ts.map +1 -1
- package/dist/core/agent-session-bash.js +5 -4
- package/dist/core/agent-session-bash.js.map +1 -1
- package/dist/core/agent-session-compaction.d.ts.map +1 -1
- package/dist/core/agent-session-compaction.js +28 -22
- package/dist/core/agent-session-compaction.js.map +1 -1
- package/dist/core/agent-session-context.d.ts.map +1 -1
- package/dist/core/agent-session-context.js +18 -13
- package/dist/core/agent-session-context.js.map +1 -1
- package/dist/core/agent-session-model.d.ts.map +1 -1
- package/dist/core/agent-session-model.js +2 -1
- package/dist/core/agent-session-model.js.map +1 -1
- package/dist/core/agent-session-retry.d.ts.map +1 -1
- package/dist/core/agent-session-retry.js +3 -2
- package/dist/core/agent-session-retry.js.map +1 -1
- package/dist/core/agent-session-runtime.d.ts.map +1 -1
- package/dist/core/agent-session-runtime.js +7 -6
- package/dist/core/agent-session-runtime.js.map +1 -1
- package/dist/core/agent-session-services.d.ts +1 -1
- package/dist/core/agent-session-services.d.ts.map +1 -1
- package/dist/core/agent-session-services.js.map +1 -1
- package/dist/core/agent-session-tools.d.ts.map +1 -1
- package/dist/core/agent-session-tools.js +3 -2
- package/dist/core/agent-session-tools.js.map +1 -1
- package/dist/core/agent-session.d.ts +40 -2
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +142 -34
- 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 +11 -5
- package/dist/core/auth-guidance.js.map +1 -1
- package/dist/core/auth-storage.d.ts.map +1 -1
- package/dist/core/auth-storage.js +9 -6
- package/dist/core/auth-storage.js.map +1 -1
- package/dist/core/compaction/compaction.d.ts.map +1 -1
- package/dist/core/compaction/compaction.js +2 -1
- package/dist/core/compaction/compaction.js.map +1 -1
- package/dist/core/embedded-sdk.d.ts.map +1 -1
- package/dist/core/embedded-sdk.js +10 -6
- package/dist/core/embedded-sdk.js.map +1 -1
- package/dist/core/export-html/index.d.ts.map +1 -1
- package/dist/core/export-html/index.js +9 -4
- package/dist/core/export-html/index.js.map +1 -1
- package/dist/core/extensions/agent-composition.d.ts.map +1 -1
- package/dist/core/extensions/agent-composition.js +26 -19
- package/dist/core/extensions/agent-composition.js.map +1 -1
- package/dist/core/extensions/bootstrap-agent-loop.d.ts.map +1 -1
- package/dist/core/extensions/bootstrap-agent-loop.js +3 -2
- package/dist/core/extensions/bootstrap-agent-loop.js.map +1 -1
- package/dist/core/extensions/bootstrap-lifecycle.d.ts.map +1 -1
- package/dist/core/extensions/bootstrap-lifecycle.js +20 -17
- package/dist/core/extensions/bootstrap-lifecycle.js.map +1 -1
- package/dist/core/extensions/bootstrap-overflow-policy.d.ts.map +1 -1
- package/dist/core/extensions/bootstrap-overflow-policy.js +2 -1
- package/dist/core/extensions/bootstrap-overflow-policy.js.map +1 -1
- package/dist/core/extensions/bootstrap-retry-policy.d.ts.map +1 -1
- package/dist/core/extensions/bootstrap-retry-policy.js +2 -1
- package/dist/core/extensions/bootstrap-retry-policy.js.map +1 -1
- package/dist/core/extensions/bootstrap-skills.d.ts.map +1 -1
- package/dist/core/extensions/bootstrap-skills.js +7 -6
- package/dist/core/extensions/bootstrap-skills.js.map +1 -1
- package/dist/core/extensions/bootstrap-tools.d.ts.map +1 -1
- package/dist/core/extensions/bootstrap-tools.js +2 -1
- package/dist/core/extensions/bootstrap-tools.js.map +1 -1
- package/dist/core/extensions/capability-plugin.d.ts.map +1 -1
- package/dist/core/extensions/capability-plugin.js +37 -13
- package/dist/core/extensions/capability-plugin.js.map +1 -1
- package/dist/core/extensions/capability-runtime-events.d.ts.map +1 -1
- package/dist/core/extensions/capability-runtime-events.js +17 -13
- package/dist/core/extensions/capability-runtime-events.js.map +1 -1
- package/dist/core/extensions/capability-runtime-guards.d.ts.map +1 -1
- package/dist/core/extensions/capability-runtime-guards.js +16 -15
- package/dist/core/extensions/capability-runtime-guards.js.map +1 -1
- package/dist/core/extensions/capability-runtime-manifest.d.ts.map +1 -1
- package/dist/core/extensions/capability-runtime-manifest.js +52 -30
- package/dist/core/extensions/capability-runtime-manifest.js.map +1 -1
- package/dist/core/extensions/capability-runtime-validation.d.ts.map +1 -1
- package/dist/core/extensions/capability-runtime-validation.js +66 -65
- package/dist/core/extensions/capability-runtime-validation.js.map +1 -1
- package/dist/core/extensions/capability-runtime.d.ts.map +1 -1
- package/dist/core/extensions/capability-runtime.js +147 -127
- package/dist/core/extensions/capability-runtime.js.map +1 -1
- package/dist/core/extensions/compaction-memory-failure-mode.d.ts.map +1 -1
- package/dist/core/extensions/compaction-memory-failure-mode.js +3 -2
- package/dist/core/extensions/compaction-memory-failure-mode.js.map +1 -1
- package/dist/core/extensions/context-strategy-binding.d.ts.map +1 -1
- package/dist/core/extensions/context-strategy-binding.js +7 -4
- package/dist/core/extensions/context-strategy-binding.js.map +1 -1
- package/dist/core/extensions/lifecycle-catalog.d.ts.map +1 -1
- package/dist/core/extensions/lifecycle-catalog.js +290 -279
- package/dist/core/extensions/lifecycle-catalog.js.map +1 -1
- package/dist/core/extensions/lifecycle-delivery-queue.d.ts.map +1 -1
- package/dist/core/extensions/lifecycle-delivery-queue.js +3 -2
- package/dist/core/extensions/lifecycle-delivery-queue.js.map +1 -1
- package/dist/core/facade/coding-agent-facade.d.ts +6 -0
- package/dist/core/facade/coding-agent-facade.d.ts.map +1 -1
- package/dist/core/facade/coding-agent-facade.js +2 -0
- package/dist/core/facade/coding-agent-facade.js.map +1 -1
- package/dist/core/http-dispatcher.d.ts.map +1 -1
- package/dist/core/http-dispatcher.js +2 -1
- package/dist/core/http-dispatcher.js.map +1 -1
- package/dist/core/i18n/index.d.ts +14 -0
- package/dist/core/i18n/index.d.ts.map +1 -0
- package/dist/core/i18n/index.js +67 -0
- package/dist/core/i18n/index.js.map +1 -0
- package/dist/core/i18n/locales/en/example.d.ts +7 -0
- package/dist/core/i18n/locales/en/example.d.ts.map +1 -0
- package/dist/core/i18n/locales/en/example.js +7 -0
- package/dist/core/i18n/locales/en/example.js.map +1 -0
- package/dist/core/i18n/locales/zh-cn/cli.d.ts +8 -0
- package/dist/core/i18n/locales/zh-cn/cli.d.ts.map +1 -0
- package/dist/core/i18n/locales/zh-cn/cli.js +227 -0
- package/dist/core/i18n/locales/zh-cn/cli.js.map +1 -0
- package/dist/core/i18n/locales/zh-cn/common.d.ts +6 -0
- package/dist/core/i18n/locales/zh-cn/common.d.ts.map +1 -0
- package/dist/core/i18n/locales/zh-cn/common.js +6 -0
- package/dist/core/i18n/locales/zh-cn/common.js.map +1 -0
- package/dist/core/i18n/locales/zh-cn/core-contract-core.d.ts +13 -0
- package/dist/core/i18n/locales/zh-cn/core-contract-core.d.ts.map +1 -0
- package/dist/core/i18n/locales/zh-cn/core-contract-core.js +173 -0
- package/dist/core/i18n/locales/zh-cn/core-contract-core.js.map +1 -0
- package/dist/core/i18n/locales/zh-cn/core-contract-extensions.d.ts +12 -0
- package/dist/core/i18n/locales/zh-cn/core-contract-extensions.d.ts.map +1 -0
- package/dist/core/i18n/locales/zh-cn/core-contract-extensions.js +582 -0
- package/dist/core/i18n/locales/zh-cn/core-contract-extensions.js.map +1 -0
- package/dist/core/i18n/locales/zh-cn/core-contract-final.d.ts +9 -0
- package/dist/core/i18n/locales/zh-cn/core-contract-final.d.ts.map +1 -0
- package/dist/core/i18n/locales/zh-cn/core-contract-final.js +55 -0
- package/dist/core/i18n/locales/zh-cn/core-contract-final.js.map +1 -0
- package/dist/core/i18n/locales/zh-cn/core-contract-plugins.d.ts +11 -0
- package/dist/core/i18n/locales/zh-cn/core-contract-plugins.d.ts.map +1 -0
- package/dist/core/i18n/locales/zh-cn/core-contract-plugins.js +455 -0
- package/dist/core/i18n/locales/zh-cn/core-contract-plugins.js.map +1 -0
- package/dist/core/i18n/locales/zh-cn/core-errors.d.ts +9 -0
- package/dist/core/i18n/locales/zh-cn/core-errors.d.ts.map +1 -0
- package/dist/core/i18n/locales/zh-cn/core-errors.js +191 -0
- package/dist/core/i18n/locales/zh-cn/core-errors.js.map +1 -0
- package/dist/core/i18n/locales/zh-cn/example.d.ts +7 -0
- package/dist/core/i18n/locales/zh-cn/example.d.ts.map +1 -0
- package/dist/core/i18n/locales/zh-cn/example.js +10 -0
- package/dist/core/i18n/locales/zh-cn/example.js.map +1 -0
- package/dist/core/i18n/locales/zh-cn/index.d.ts +2 -0
- package/dist/core/i18n/locales/zh-cn/index.d.ts.map +1 -0
- package/dist/core/i18n/locales/zh-cn/index.js +41 -0
- package/dist/core/i18n/locales/zh-cn/index.js.map +1 -0
- package/dist/core/i18n/locales/zh-cn/interactive-mode.d.ts +10 -0
- package/dist/core/i18n/locales/zh-cn/interactive-mode.d.ts.map +1 -0
- package/dist/core/i18n/locales/zh-cn/interactive-mode.js +265 -0
- package/dist/core/i18n/locales/zh-cn/interactive-mode.js.map +1 -0
- package/dist/core/i18n/locales/zh-cn/keybindings.d.ts +11 -0
- package/dist/core/i18n/locales/zh-cn/keybindings.d.ts.map +1 -0
- package/dist/core/i18n/locales/zh-cn/keybindings.js +67 -0
- package/dist/core/i18n/locales/zh-cn/keybindings.js.map +1 -0
- package/dist/core/i18n/locales/zh-cn/slash-commands.d.ts +7 -0
- package/dist/core/i18n/locales/zh-cn/slash-commands.d.ts.map +1 -0
- package/dist/core/i18n/locales/zh-cn/slash-commands.js +39 -0
- package/dist/core/i18n/locales/zh-cn/slash-commands.js.map +1 -0
- package/dist/core/i18n/locales/zh-cn/tui-builtin.d.ts +10 -0
- package/dist/core/i18n/locales/zh-cn/tui-builtin.d.ts.map +1 -0
- package/dist/core/i18n/locales/zh-cn/tui-builtin.js +15 -0
- package/dist/core/i18n/locales/zh-cn/tui-builtin.js.map +1 -0
- package/dist/core/i18n/locales/zh-cn/tui-components-misc.d.ts +13 -0
- package/dist/core/i18n/locales/zh-cn/tui-components-misc.d.ts.map +1 -0
- package/dist/core/i18n/locales/zh-cn/tui-components-misc.js +102 -0
- package/dist/core/i18n/locales/zh-cn/tui-components-misc.js.map +1 -0
- package/dist/core/i18n/locales/zh-cn/tui-components-selectors.d.ts +12 -0
- package/dist/core/i18n/locales/zh-cn/tui-components-selectors.d.ts.map +1 -0
- package/dist/core/i18n/locales/zh-cn/tui-components-selectors.js +288 -0
- package/dist/core/i18n/locales/zh-cn/tui-components-selectors.js.map +1 -0
- package/dist/core/i18n/locales/zh-cn/tui-interactive-misc.d.ts +9 -0
- package/dist/core/i18n/locales/zh-cn/tui-interactive-misc.d.ts.map +1 -0
- package/dist/core/i18n/locales/zh-cn/tui-interactive-misc.js +79 -0
- package/dist/core/i18n/locales/zh-cn/tui-interactive-misc.js.map +1 -0
- package/dist/core/i18n/locales/zh-cn/tui-self-owned.d.ts +8 -0
- package/dist/core/i18n/locales/zh-cn/tui-self-owned.d.ts.map +1 -0
- package/dist/core/i18n/locales/zh-cn/tui-self-owned.js +72 -0
- package/dist/core/i18n/locales/zh-cn/tui-self-owned.js.map +1 -0
- package/dist/core/keybindings.d.ts +15 -0
- package/dist/core/keybindings.d.ts.map +1 -1
- package/dist/core/keybindings.js +18 -0
- package/dist/core/keybindings.js.map +1 -1
- package/dist/core/logger.d.ts.map +1 -1
- package/dist/core/logger.js +5 -1
- package/dist/core/logger.js.map +1 -1
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +2 -1
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-runtime.d.ts.map +1 -1
- package/dist/core/model-runtime.js +8 -4
- package/dist/core/model-runtime.js.map +1 -1
- package/dist/core/package-install-host.d.ts.map +1 -1
- package/dist/core/package-install-host.js +4 -3
- package/dist/core/package-install-host.js.map +1 -1
- package/dist/core/package-manager.d.ts.map +1 -1
- package/dist/core/package-manager.js +15 -10
- package/dist/core/package-manager.js.map +1 -1
- package/dist/core/package-resource-collection.d.ts.map +1 -1
- package/dist/core/package-resource-collection.js +2 -1
- package/dist/core/package-resource-collection.js.map +1 -1
- package/dist/core/package-source.d.ts.map +1 -1
- package/dist/core/package-source.js +3 -2
- package/dist/core/package-source.js.map +1 -1
- package/dist/core/provider-composer.d.ts.map +1 -1
- package/dist/core/provider-composer.js +22 -13
- package/dist/core/provider-composer.js.map +1 -1
- package/dist/core/remote-catalog-provider.d.ts.map +1 -1
- package/dist/core/remote-catalog-provider.js +6 -2
- package/dist/core/remote-catalog-provider.js.map +1 -1
- package/dist/core/resolve-config-value.d.ts.map +1 -1
- package/dist/core/resolve-config-value.js +15 -5
- package/dist/core/resolve-config-value.js.map +1 -1
- package/dist/core/sdk.d.ts +19 -5
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +74 -54
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-cwd.d.ts.map +1 -1
- package/dist/core/session-cwd.js +5 -2
- package/dist/core/session-cwd.js.map +1 -1
- package/dist/core/session-export.d.ts.map +1 -1
- package/dist/core/session-export.js +2 -1
- package/dist/core/session-export.js.map +1 -1
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +39 -29
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/session-storage.d.ts.map +1 -1
- package/dist/core/session-storage.js +3 -3
- package/dist/core/session-storage.js.map +1 -1
- package/dist/core/settings-manager.d.ts +11 -0
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +27 -5
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +53 -32
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +25 -2
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +11 -7
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/edit-diff.d.ts.map +1 -1
- package/dist/core/tools/edit-diff.js +9 -4
- package/dist/core/tools/edit-diff.js.map +1 -1
- package/dist/core/tools/edit.d.ts.map +1 -1
- package/dist/core/tools/edit.js +4 -3
- package/dist/core/tools/edit.js.map +1 -1
- package/dist/core/tools/index.d.ts.map +1 -1
- package/dist/core/tools/index.js +3 -2
- package/dist/core/tools/index.js.map +1 -1
- package/dist/core/tools/output-accumulator.d.ts.map +1 -1
- package/dist/core/tools/output-accumulator.js +2 -1
- package/dist/core/tools/output-accumulator.js.map +1 -1
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js +6 -2
- package/dist/core/tools/read.js.map +1 -1
- package/dist/core/tools/write.d.ts.map +1 -1
- package/dist/core/tools/write.js +2 -1
- package/dist/core/tools/write.js.map +1 -1
- package/dist/durable/durable-service.d.ts.map +1 -1
- package/dist/durable/durable-service.js +25 -18
- package/dist/durable/durable-service.js.map +1 -1
- package/dist/host/checkpoint-commit.d.ts.map +1 -1
- package/dist/host/checkpoint-commit.js +2 -1
- package/dist/host/checkpoint-commit.js.map +1 -1
- package/dist/host/manual-compaction.d.ts.map +1 -1
- package/dist/host/manual-compaction.js +2 -1
- package/dist/host/manual-compaction.js.map +1 -1
- package/dist/host/output-projection.d.ts +0 -13
- package/dist/host/output-projection.d.ts.map +1 -1
- package/dist/host/output-projection.js +16 -2
- package/dist/host/output-projection.js.map +1 -1
- package/dist/host/summary-retry.d.ts.map +1 -1
- package/dist/host/summary-retry.js +3 -2
- package/dist/host/summary-retry.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +94 -58
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/components/agents-view.d.ts.map +1 -1
- package/dist/modes/interactive/components/agents-view.js +18 -15
- package/dist/modes/interactive/components/agents-view.js.map +1 -1
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/assistant-message.js +6 -5
- package/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/bash-execution.js +12 -7
- package/dist/modes/interactive/components/bash-execution.js.map +1 -1
- package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -1
- package/dist/modes/interactive/components/bordered-loader.js +2 -1
- package/dist/modes/interactive/components/bordered-loader.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 +6 -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 +9 -5
- package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
- package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/config-selector.js +18 -15
- package/dist/modes/interactive/components/config-selector.js.map +1 -1
- package/dist/modes/interactive/components/custom-entry.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-entry.js +2 -1
- package/dist/modes/interactive/components/custom-entry.js.map +1 -1
- package/dist/modes/interactive/components/dialog-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/dialog-editor.js +5 -4
- package/dist/modes/interactive/components/dialog-editor.js.map +1 -1
- package/dist/modes/interactive/components/dialog-input.d.ts.map +1 -1
- package/dist/modes/interactive/components/dialog-input.js +2 -1
- package/dist/modes/interactive/components/dialog-input.js.map +1 -1
- package/dist/modes/interactive/components/dialog-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/dialog-selector.js +4 -3
- package/dist/modes/interactive/components/dialog-selector.js.map +1 -1
- package/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -1
- package/dist/modes/interactive/components/first-time-setup.js +11 -10
- package/dist/modes/interactive/components/first-time-setup.js.map +1 -1
- package/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/dist/modes/interactive/components/footer.js +7 -4
- package/dist/modes/interactive/components/footer.js.map +1 -1
- package/dist/modes/interactive/components/index.d.ts +1 -0
- package/dist/modes/interactive/components/index.d.ts.map +1 -1
- package/dist/modes/interactive/components/index.js +1 -0
- package/dist/modes/interactive/components/index.js.map +1 -1
- package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -1
- package/dist/modes/interactive/components/keybinding-hints.js +3 -2
- package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
- package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
- package/dist/modes/interactive/components/login-dialog.js +12 -11
- package/dist/modes/interactive/components/login-dialog.js.map +1 -1
- package/dist/modes/interactive/components/mermaid.d.ts.map +1 -1
- package/dist/modes/interactive/components/mermaid.js +6 -2
- package/dist/modes/interactive/components/mermaid.js.map +1 -1
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/model-selector.js +28 -16
- package/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.js +10 -9
- package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
- package/dist/modes/interactive/components/plugin-manager-entry.d.ts.map +1 -1
- package/dist/modes/interactive/components/plugin-manager-entry.js +22 -13
- package/dist/modes/interactive/components/plugin-manager-entry.js.map +1 -1
- package/dist/modes/interactive/components/plugin-selection-entry.d.ts.map +1 -1
- package/dist/modes/interactive/components/plugin-selection-entry.js +27 -12
- package/dist/modes/interactive/components/plugin-selection-entry.js.map +1 -1
- package/dist/modes/interactive/components/queue-manager-selector.d.ts +60 -0
- package/dist/modes/interactive/components/queue-manager-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/queue-manager-selector.js +166 -0
- package/dist/modes/interactive/components/queue-manager-selector.js.map +1 -0
- package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.js +16 -14
- package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
- package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector.js +43 -31
- package/dist/modes/interactive/components/session-selector.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.d.ts +2 -0
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +113 -96
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/components/settings-submenu.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-submenu.js +5 -4
- package/dist/modes/interactive/components/settings-submenu.js.map +1 -1
- package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/show-images-selector.js +3 -2
- package/dist/modes/interactive/components/show-images-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 +4 -3
- package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
- package/dist/modes/interactive/components/status-indicator.d.ts.map +1 -1
- package/dist/modes/interactive/components/status-indicator.js +14 -5
- package/dist/modes/interactive/components/status-indicator.js.map +1 -1
- package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/theme-selector.js +2 -1
- package/dist/modes/interactive/components/theme-selector.js.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.js +11 -4
- package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-execution.js +8 -3
- package/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/dist/modes/interactive/components/tree-list.d.ts.map +1 -1
- package/dist/modes/interactive/components/tree-list.js +7 -6
- package/dist/modes/interactive/components/tree-list.js.map +1 -1
- package/dist/modes/interactive/components/tree-render.d.ts.map +1 -1
- package/dist/modes/interactive/components/tree-render.js +28 -23
- package/dist/modes/interactive/components/tree-render.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 -7
- package/dist/modes/interactive/components/tree-selector.js.map +1 -1
- package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/user-message-selector.js +5 -4
- package/dist/modes/interactive/components/user-message-selector.js.map +1 -1
- package/dist/modes/interactive/components/workflow-view.d.ts.map +1 -1
- package/dist/modes/interactive/components/workflow-view.js +36 -21
- package/dist/modes/interactive/components/workflow-view.js.map +1 -1
- package/dist/modes/interactive/external-editor.d.ts.map +1 -1
- package/dist/modes/interactive/external-editor.js +2 -1
- package/dist/modes/interactive/external-editor.js.map +1 -1
- package/dist/modes/interactive/interactive-auth.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-auth.js +71 -40
- package/dist/modes/interactive/interactive-auth.js.map +1 -1
- package/dist/modes/interactive/interactive-commands.d.ts +1 -0
- package/dist/modes/interactive/interactive-commands.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-commands.js +3 -0
- package/dist/modes/interactive/interactive-commands.js.map +1 -1
- package/dist/modes/interactive/interactive-dialog-ui.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-dialog-ui.js +5 -5
- package/dist/modes/interactive/interactive-dialog-ui.js.map +1 -1
- package/dist/modes/interactive/interactive-format.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-format.js +34 -18
- package/dist/modes/interactive/interactive-format.js.map +1 -1
- package/dist/modes/interactive/interactive-helpers.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-helpers.js +7 -2
- package/dist/modes/interactive/interactive-helpers.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +4 -1
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +327 -243
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/interactive-selectors.d.ts +9 -0
- package/dist/modes/interactive/interactive-selectors.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-selectors.js +79 -25
- package/dist/modes/interactive/interactive-selectors.js.map +1 -1
- package/dist/modes/interactive/theme/theme-controller.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme-controller.js +5 -1
- package/dist/modes/interactive/theme/theme-controller.js.map +1 -1
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme.js +26 -23
- package/dist/modes/interactive/theme/theme.js.map +1 -1
- package/dist/modes/json-event.d.ts.map +1 -1
- package/dist/modes/json-event.js +3 -2
- package/dist/modes/json-event.js.map +1 -1
- package/dist/modes/print-mode.d.ts.map +1 -1
- package/dist/modes/print-mode.js +3 -2
- package/dist/modes/print-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client.js +3 -2
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/package-manager-cli.d.ts.map +1 -1
- package/dist/package-manager-cli.js +28 -13
- package/dist/package-manager-cli.js.map +1 -1
- package/dist/plugins/ecosystem/catalog.d.ts.map +1 -1
- package/dist/plugins/ecosystem/catalog.js +3 -2
- package/dist/plugins/ecosystem/catalog.js.map +1 -1
- package/dist/plugins/ecosystem/cli.d.ts.map +1 -1
- package/dist/plugins/ecosystem/cli.js +2 -1
- package/dist/plugins/ecosystem/cli.js.map +1 -1
- package/dist/plugins/ecosystem/default-plugin-market.d.ts.map +1 -1
- package/dist/plugins/ecosystem/default-plugin-market.js +3 -2
- package/dist/plugins/ecosystem/default-plugin-market.js.map +1 -1
- package/dist/plugins/ecosystem/distribution.d.ts.map +1 -1
- package/dist/plugins/ecosystem/distribution.js +2 -1
- package/dist/plugins/ecosystem/distribution.js.map +1 -1
- package/dist/plugins/ecosystem/installer.d.ts.map +1 -1
- package/dist/plugins/ecosystem/installer.js +3 -2
- package/dist/plugins/ecosystem/installer.js.map +1 -1
- package/dist/plugins/ecosystem/node-disk-registry-source.d.ts.map +1 -1
- package/dist/plugins/ecosystem/node-disk-registry-source.js +20 -17
- package/dist/plugins/ecosystem/node-disk-registry-source.js.map +1 -1
- package/dist/plugins/ecosystem/node-distribution-host.d.ts.map +1 -1
- package/dist/plugins/ecosystem/node-distribution-host.js +35 -34
- package/dist/plugins/ecosystem/node-distribution-host.js.map +1 -1
- package/dist/plugins/ecosystem/node-npm-registry-source.d.ts.map +1 -1
- package/dist/plugins/ecosystem/node-npm-registry-source.js +35 -34
- package/dist/plugins/ecosystem/node-npm-registry-source.js.map +1 -1
- package/dist/plugins/ecosystem/node-package-install-host.d.ts.map +1 -1
- package/dist/plugins/ecosystem/node-package-install-host.js +9 -8
- package/dist/plugins/ecosystem/node-package-install-host.js.map +1 -1
- package/dist/plugins/ecosystem/node-package-install-persistence.d.ts.map +1 -1
- package/dist/plugins/ecosystem/node-package-install-persistence.js +4 -3
- package/dist/plugins/ecosystem/node-package-install-persistence.js.map +1 -1
- package/dist/plugins/ecosystem/node-plugin-bootstrap.d.ts.map +1 -1
- package/dist/plugins/ecosystem/node-plugin-bootstrap.js +21 -5
- package/dist/plugins/ecosystem/node-plugin-bootstrap.js.map +1 -1
- package/dist/plugins/ecosystem/node-plugin-trust-root.d.ts.map +1 -1
- package/dist/plugins/ecosystem/node-plugin-trust-root.js +10 -9
- package/dist/plugins/ecosystem/node-plugin-trust-root.js.map +1 -1
- package/dist/plugins/ecosystem/node-registry-source.d.ts.map +1 -1
- package/dist/plugins/ecosystem/node-registry-source.js +31 -30
- package/dist/plugins/ecosystem/node-registry-source.js.map +1 -1
- package/dist/plugins/ecosystem/node-release-package-source.d.ts.map +1 -1
- package/dist/plugins/ecosystem/node-release-package-source.js +30 -29
- package/dist/plugins/ecosystem/node-release-package-source.js.map +1 -1
- package/dist/plugins/ecosystem/node-tar-writer.d.ts.map +1 -1
- package/dist/plugins/ecosystem/node-tar-writer.js +11 -10
- package/dist/plugins/ecosystem/node-tar-writer.js.map +1 -1
- package/dist/plugins/ecosystem/node-url-package-source.d.ts.map +1 -1
- package/dist/plugins/ecosystem/node-url-package-source.js +21 -20
- package/dist/plugins/ecosystem/node-url-package-source.js.map +1 -1
- package/dist/plugins/ecosystem/plugin-acquisition.d.ts.map +1 -1
- package/dist/plugins/ecosystem/plugin-acquisition.js +3 -2
- package/dist/plugins/ecosystem/plugin-acquisition.js.map +1 -1
- package/dist/plugins/ecosystem/registry-cli-adapter.d.ts.map +1 -1
- package/dist/plugins/ecosystem/registry-cli-adapter.js +2 -1
- package/dist/plugins/ecosystem/registry-cli-adapter.js.map +1 -1
- package/dist/plugins/ecosystem/registry.d.ts.map +1 -1
- package/dist/plugins/ecosystem/registry.js +35 -32
- package/dist/plugins/ecosystem/registry.js.map +1 -1
- package/dist/plugins/ecosystem/resolver.d.ts.map +1 -1
- package/dist/plugins/ecosystem/resolver.js +3 -2
- package/dist/plugins/ecosystem/resolver.js.map +1 -1
- package/dist/plugins/ecosystem/selection-store.d.ts.map +1 -1
- package/dist/plugins/ecosystem/selection-store.js +11 -10
- package/dist/plugins/ecosystem/selection-store.js.map +1 -1
- package/dist/plugins/ecosystem/selection.d.ts.map +1 -1
- package/dist/plugins/ecosystem/selection.js +8 -7
- package/dist/plugins/ecosystem/selection.js.map +1 -1
- package/dist/plugins/ecosystem/state.d.ts.map +1 -1
- package/dist/plugins/ecosystem/state.js +24 -23
- package/dist/plugins/ecosystem/state.js.map +1 -1
- package/dist/plugins/ecosystem/updates.d.ts.map +1 -1
- package/dist/plugins/ecosystem/updates.js +5 -4
- package/dist/plugins/ecosystem/updates.js.map +1 -1
- package/dist/plugins/mcp-http.d.ts +0 -17
- package/dist/plugins/mcp-http.d.ts.map +1 -1
- package/dist/plugins/mcp-http.js +30 -7
- package/dist/plugins/mcp-http.js.map +1 -1
- package/dist/plugins/plugin-supervisor.d.ts.map +1 -1
- package/dist/plugins/plugin-supervisor.js +19 -1
- package/dist/plugins/plugin-supervisor.js.map +1 -1
- package/dist/profile/first-roles.d.ts.map +1 -1
- package/dist/profile/first-roles.js +10 -1
- package/dist/profile/first-roles.js.map +1 -1
- package/dist/profile/goal-plugin.d.ts.map +1 -1
- package/dist/profile/goal-plugin.js +24 -5
- package/dist/profile/goal-plugin.js.map +1 -1
- package/dist/profile/identity.d.ts.map +1 -1
- package/dist/profile/identity.js +7 -6
- package/dist/profile/identity.js.map +1 -1
- package/dist/profile/lock.d.ts.map +1 -1
- package/dist/profile/lock.js +15 -1
- package/dist/profile/lock.js.map +1 -1
- package/dist/profile/plan-plugin.d.ts.map +1 -1
- package/dist/profile/plan-plugin.js +26 -13
- package/dist/profile/plan-plugin.js.map +1 -1
- package/dist/profile/plugin-profiles.d.ts.map +1 -1
- package/dist/profile/plugin-profiles.js +2 -1
- package/dist/profile/plugin-profiles.js.map +1 -1
- package/dist/profile/policy-manifest.d.ts.map +1 -1
- package/dist/profile/policy-manifest.js +5 -4
- package/dist/profile/policy-manifest.js.map +1 -1
- package/dist/profile/profile-registry.d.ts +0 -12
- package/dist/profile/profile-registry.d.ts.map +1 -1
- package/dist/profile/profile-registry.js +14 -1
- package/dist/profile/profile-registry.js.map +1 -1
- package/dist/profile/role-catalog.d.ts +0 -1
- package/dist/profile/role-catalog.d.ts.map +1 -1
- package/dist/profile/role-catalog.js +17 -15
- package/dist/profile/role-catalog.js.map +1 -1
- package/dist/profile/role-orchestrator.d.ts.map +1 -1
- package/dist/profile/role-orchestrator.js +8 -7
- package/dist/profile/role-orchestrator.js.map +1 -1
- package/dist/profile/role-runner.d.ts.map +1 -1
- package/dist/profile/role-runner.js +3 -2
- package/dist/profile/role-runner.js.map +1 -1
- package/dist/profile/root-facade.d.ts.map +1 -1
- package/dist/profile/root-facade.js +2 -1
- package/dist/profile/root-facade.js.map +1 -1
- package/dist/profile/skill-discovery-wiring.d.ts.map +1 -1
- package/dist/profile/skill-discovery-wiring.js +7 -2
- package/dist/profile/skill-discovery-wiring.js.map +1 -1
- package/dist/profile/state-store.d.ts.map +1 -1
- package/dist/profile/state-store.js +13 -9
- package/dist/profile/state-store.js.map +1 -1
- package/dist/profile/todo-plugin.d.ts.map +1 -1
- package/dist/profile/todo-plugin.js +9 -4
- package/dist/profile/todo-plugin.js.map +1 -1
- package/dist/profiles/builtin-suites.d.ts +13 -6
- package/dist/profiles/builtin-suites.d.ts.map +1 -1
- package/dist/profiles/builtin-suites.js +15 -6
- package/dist/profiles/builtin-suites.js.map +1 -1
- package/dist/profiles/suite-loader.d.ts +25 -1
- package/dist/profiles/suite-loader.d.ts.map +1 -1
- package/dist/profiles/suite-loader.js +34 -9
- package/dist/profiles/suite-loader.js.map +1 -1
- package/dist/remote/server-entry.d.ts.map +1 -1
- package/dist/remote/server-entry.js +3 -2
- package/dist/remote/server-entry.js.map +1 -1
- package/dist/remote/session-source.d.ts.map +1 -1
- package/dist/remote/session-source.js +8 -4
- package/dist/remote/session-source.js.map +1 -1
- package/dist/share/session-share.d.ts.map +1 -1
- package/dist/share/session-share.js +14 -2
- package/dist/share/session-share.js.map +1 -1
- package/dist/testing/plugin-testkit.d.ts.map +1 -1
- package/dist/testing/plugin-testkit.js +4 -3
- package/dist/testing/plugin-testkit.js.map +1 -1
- package/dist/testing/runtime-delivery-queue.d.ts.map +1 -1
- package/dist/testing/runtime-delivery-queue.js +2 -1
- package/dist/testing/runtime-delivery-queue.js.map +1 -1
- package/dist/testing/session-plugin-testkit.d.ts.map +1 -1
- package/dist/testing/session-plugin-testkit.js +10 -7
- package/dist/testing/session-plugin-testkit.js.map +1 -1
- package/dist/utils/ansi.d.ts.map +1 -1
- package/dist/utils/ansi.js +2 -1
- package/dist/utils/ansi.js.map +1 -1
- package/dist/utils/clipboard.d.ts.map +1 -1
- package/dist/utils/clipboard.js +7 -6
- package/dist/utils/clipboard.js.map +1 -1
- package/dist/utils/image-resize-worker.d.ts.map +1 -1
- package/dist/utils/image-resize-worker.js +3 -2
- package/dist/utils/image-resize-worker.js.map +1 -1
- package/dist/utils/shell.d.ts.map +1 -1
- package/dist/utils/shell.js +9 -8
- package/dist/utils/shell.js.map +1 -1
- package/dist/utils/tools-manager.d.ts.map +1 -1
- package/dist/utils/tools-manager.js +23 -13
- package/dist/utils/tools-manager.js.map +1 -1
- package/dist/utils/version-check.d.ts.map +1 -1
- package/dist/utils/version-check.js +5 -1
- package/dist/utils/version-check.js.map +1 -1
- package/docs/keybindings.md +3 -0
- package/docs/quickstart.md +1 -1
- package/docs/settings.md +1 -0
- package/docs/terminal-setup.md +2 -3
- package/docs/usage.md +6 -5
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/examples/extensions/with-deps/plugin.json +1 -1
- package/package.json +1 -1
- package/dist/bundle/chunks/chunk-EALJ5DDX.js +0 -1452
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-composition.js","sourceRoot":"","sources":["../../../src/core/extensions/agent-composition.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n\tAgentCompositionAPI,\n\tAgentCompositionDefinitionBinding,\n\tAgentCompositionHostBinding,\n\tAgentCompositionScopedHostBinding,\n\tAgentContextCommitRequestV1,\n\tAgentContextCommitResultV1,\n\tAgentContextFacadeV1,\n\tAgentControllerLease,\n\tAgentDefinition,\n\tAgentExecutionContext,\n\tAgentHostPrimitivesFactory,\n\tAgentHostPrimitivesV1,\n\tAgentInstance,\n\tAgentInstanceResult,\n\tAgentInstanceSnapshot,\n\tAgentInstanceStatus,\n\tAgentModelFacadeV1,\n\tAgentModelInvocationV1,\n\tAgentOperationFacadeV1,\n\tAgentSessionFacadeV1,\n\tAgentToolFacadeV1,\n\tDisposableRegistration,\n\tOperationHandle,\n\tOperationProgress,\n\tOperationStatus,\n\tOutputArtifactAPI,\n\tOutputArtifactChunk,\n\tOutputArtifactRef,\n\tStateAPI,\n\tStateChange,\n} from \"./public-api.ts\";\n\nexport interface AgentCompositionRuntimeOptions {\n\tidFactory?: (kind: string) => string;\n\tdefaultLeaseOwner?: string;\n\thostPrimitivesFactory?: AgentHostPrimitivesFactory;\n}\n\nexport type AgentCompositionLifecycleEventName = \"start\" | \"step\" | \"cancel\" | \"end\";\nexport type AgentCompositionLifecycleTerminalStatus = \"succeeded\" | \"failed\" | \"cancelled\";\n\nexport interface AgentCompositionLifecycleEvent {\n\treadonly event: AgentCompositionLifecycleEventName;\n\treadonly operationId: string;\n\treadonly operationKind: string;\n\treadonly owner?: string;\n\treadonly status?: AgentCompositionLifecycleTerminalStatus;\n\treadonly step?: number;\n\treadonly progress?: OperationProgress;\n}\n\nexport type AgentCompositionLifecycleDispatcher = (event: AgentCompositionLifecycleEvent) => void;\n\n/** Host-only binding used by CapabilityRuntime to observe composition operations. */\nexport interface AgentCompositionLifecycleBinding {\n\tsetLifecycleDispatcher(dispatcher?: AgentCompositionLifecycleDispatcher): void;\n}\n\n/**\n * Host-only binding used by CapabilityRuntime to clear instance-scoped state\n * when an instance is disposed. Instance ids are unique per composition\n * runtime, so every registered clearer is invoked on each disposal and\n * resolves by id whether the disposed instance belongs to it.\n */\nexport interface AgentCompositionInstanceStateBinding {\n\t/** Registers a clearer invoked after a disposed instance's execution drained. Returns an unsubscribe function. */\n\taddInstanceStateClearer(clearer: (instanceId: string) => void): () => void;\n}\n\ntype DefinitionRef = { id: string; version: number };\n\nconst terminalStatuses = new Set<AgentInstanceStatus>([\"succeeded\", \"failed\", \"cancelled\", \"disposed\"]);\n\nfunction abortError(reason?: unknown): Error {\n\tif (reason instanceof Error) return reason;\n\tconst error = new Error(reason === undefined ? \"Agent operation cancelled\" : String(reason));\n\terror.name = \"AbortError\";\n\treturn error;\n}\n\nfunction combinedAbortSignal(...signals: readonly (AbortSignal | undefined)[]): {\n\tsignal: AbortSignal;\n\tdispose(): void;\n} {\n\tconst controller = new AbortController();\n\tconst listeners: Array<{ signal: AbortSignal; listener: () => void }> = [];\n\tfor (const signal of new Set(signals.filter((signal): signal is AbortSignal => signal !== undefined))) {\n\t\tconst abort = () => {\n\t\t\tif (!controller.signal.aborted) controller.abort(signal.reason);\n\t\t};\n\t\tif (signal.aborted) {\n\t\t\tabort();\n\t\t\tbreak;\n\t\t}\n\t\tsignal.addEventListener(\"abort\", abort, { once: true });\n\t\tlisteners.push({ signal, listener: abort });\n\t}\n\treturn {\n\t\tsignal: controller.signal,\n\t\tdispose: () => {\n\t\t\tfor (const { signal, listener } of listeners) signal.removeEventListener(\"abort\", listener);\n\t\t},\n\t};\n}\n\nfunction freezeSnapshot(snapshot: AgentInstanceSnapshot): AgentInstanceSnapshot {\n\treturn Object.freeze({ ...snapshot });\n}\n\nfunction validateAgentDefinition<TInput, TResult>(\n\tdefinition: AgentDefinition<TInput, TResult>,\n): AgentDefinition<TInput, TResult> {\n\tif (!definition || typeof definition !== \"object\") {\n\t\tthrow new Error(\"Agent definition is required\");\n\t}\n\tif (typeof definition.id !== \"string\" || !definition.id.trim()) {\n\t\tthrow new Error(\"Agent definition requires a non-empty id\");\n\t}\n\tif (!Number.isSafeInteger(definition.version) || definition.version < 1) {\n\t\tthrow new Error(\"Agent definition version must be a positive safe integer\");\n\t}\n\tif (definition.role !== \"root-agent-controller\" && definition.role !== \"child-agent-controller\") {\n\t\tthrow new Error(\"Agent definition role must be root-agent-controller or child-agent-controller\");\n\t}\n\tif (typeof definition.run !== \"function\") {\n\t\tthrow new Error(\"Agent definition requires a run function\");\n\t}\n\tif (definition.owner !== undefined && (typeof definition.owner !== \"string\" || !definition.owner.trim())) {\n\t\tthrow new Error(\"Agent definition owner must be a non-empty string when provided\");\n\t}\n\treturn definition;\n}\n\nfunction detachedFreeze<T>(value: T, seen = new WeakMap<object, unknown>()): T {\n\tif (value === null || typeof value !== \"object\") return value;\n\tif (value instanceof Uint8Array) return new Uint8Array(value) as T;\n\tconst existing = seen.get(value);\n\tif (existing) return existing as T;\n\tconst result: Record<string, unknown> | unknown[] = Array.isArray(value) ? [] : {};\n\tseen.set(value, result);\n\tfor (const [key, item] of Object.entries(value as Record<string, unknown>)) {\n\t\t(result as Record<string, unknown>)[key] = detachedFreeze(item, seen);\n\t}\n\treturn Object.freeze(result) as T;\n}\n\nfunction disposable(dispose: () => void | Promise<void>): DisposableRegistration {\n\tlet disposed = false;\n\treturn {\n\t\tid: \"agent-host-registration\",\n\t\tkind: \"agent-host\",\n\t\tdispose: () => {\n\t\t\tif (disposed) return;\n\t\t\tdisposed = true;\n\t\t\treturn dispose();\n\t\t},\n\t};\n}\n\nfunction revokedError(instanceId: string): Error {\n\treturn new Error(`Agent host primitives are revoked: ${instanceId}`);\n}\n\ninterface RevocableHost {\n\treadonly value: AgentHostPrimitivesV1;\n\trevoke(): void;\n}\n\nfunction createOperationFacade<TResult>(\n\toperation: OperationRuntime<TResult>,\n\tinstanceId: string,\n\tactive: () => boolean,\n): AgentOperationFacadeV1 {\n\treturn Object.freeze({\n\t\tversion: 1 as const,\n\t\tid: operation.id,\n\t\tsignal: operation.signal,\n\t\tstatus: () => {\n\t\t\tif (!active()) return \"cancelled\" as OperationStatus;\n\t\t\treturn operation.status();\n\t\t},\n\t\tisActive: () => active() && operation.status() === \"running\",\n\t\treportProgress: (progress: OperationProgress) => active() && operation.reportProgress(progress),\n\t\tonCancel: (handler: (reason: unknown) => void | Promise<void>) => {\n\t\t\tif (!active()) throw revokedError(instanceId);\n\t\t\tconst listener = () => {\n\t\t\t\tvoid handler(operation.signal.reason);\n\t\t\t};\n\t\t\toperation.signal.addEventListener(\"abort\", listener, { once: true });\n\t\t\treturn disposable(() => operation.signal.removeEventListener(\"abort\", listener));\n\t\t},\n\t\tcancel: async (reason?: string) => {\n\t\t\tif (!active()) throw revokedError(instanceId);\n\t\t\tawait operation.cancel(reason);\n\t\t},\n\t});\n}\n\nfunction createRevocableHostPrimitives(\n\traw: AgentHostPrimitivesV1,\n\toperation: OperationRuntime<unknown>,\n\tinstance: AgentInstanceSnapshot,\n): RevocableHost {\n\tlet active = true;\n\tconst cleanups: Array<() => void | Promise<void>> = [];\n\tconst track = (registration: DisposableRegistration): DisposableRegistration => {\n\t\tlet released = false;\n\t\tconst dispose = async () => {\n\t\t\tif (released) return;\n\t\t\treleased = true;\n\t\t\tconst index = cleanups.indexOf(cleanup);\n\t\t\tif (index >= 0) cleanups.splice(index, 1);\n\t\t\tawait registration.dispose();\n\t\t};\n\t\tconst cleanup = dispose;\n\t\tcleanups.push(cleanup);\n\t\treturn {\n\t\t\tid: registration.id,\n\t\t\tkind: registration.kind,\n\t\t\tdispose,\n\t\t};\n\t};\n\tconst assertActive = () => {\n\t\tif (!active) throw revokedError(instance.id);\n\t\tif (operation.signal.aborted) throw abortError(operation.signal.reason);\n\t};\n\n\tconst session = raw.session\n\t\t? (Object.freeze({\n\t\t\t\tversion: 1 as const,\n\t\t\t\tgetSessionId: () => {\n\t\t\t\t\tassertActive();\n\t\t\t\t\treturn raw.session!.getSessionId();\n\t\t\t\t},\n\t\t\t\tgetRevision: raw.session.getRevision\n\t\t\t\t\t? () => {\n\t\t\t\t\t\t\tassertActive();\n\t\t\t\t\t\t\treturn detachedFreeze(raw.session!.getRevision!());\n\t\t\t\t\t\t}\n\t\t\t\t\t: undefined,\n\t\t\t\tgetMessages: () => {\n\t\t\t\t\tassertActive();\n\t\t\t\t\treturn detachedFreeze(raw.session!.getMessages());\n\t\t\t\t},\n\t\t\t\tgetBranchEntries: () => {\n\t\t\t\t\tassertActive();\n\t\t\t\t\treturn detachedFreeze(raw.session!.getBranchEntries());\n\t\t\t\t},\n\t\t\t\tisIdle: () => {\n\t\t\t\t\tassertActive();\n\t\t\t\t\treturn raw.session!.isIdle();\n\t\t\t\t},\n\t\t\t\twaitForIdle: async () => {\n\t\t\t\t\tassertActive();\n\t\t\t\t\tawait raw.session!.waitForIdle();\n\t\t\t\t\tassertActive();\n\t\t\t\t},\n\t\t\t\tappendEntry: (customType: string, data?: unknown) => {\n\t\t\t\t\tassertActive();\n\t\t\t\t\treturn raw.session!.appendEntry(customType, detachedFreeze(data));\n\t\t\t\t},\n\t\t\t}) as AgentSessionFacadeV1)\n\t\t: undefined;\n\n\tconst context = raw.context\n\t\t? (Object.freeze({\n\t\t\t\tversion: 1 as const,\n\t\t\t\tget: <TValue = unknown>() => {\n\t\t\t\t\tassertActive();\n\t\t\t\t\treturn detachedFreeze(raw.context!.get<TValue>());\n\t\t\t\t},\n\t\t\t\tcommit: async <TValue = unknown>(request: AgentContextCommitRequestV1<TValue>) => {\n\t\t\t\t\tassertActive();\n\t\t\t\t\tif (request.signal?.aborted) throw abortError(request.signal.reason);\n\t\t\t\t\tconst result = await raw.context!.commit({\n\t\t\t\t\t\t...request,\n\t\t\t\t\t\tvalue: detachedFreeze(request.value),\n\t\t\t\t\t});\n\t\t\t\t\tassertActive();\n\t\t\t\t\treturn detachedFreeze(result) as AgentContextCommitResultV1<TValue>;\n\t\t\t\t},\n\t\t\t}) as AgentContextFacadeV1)\n\t\t: undefined;\n\n\t// One guarded StateAPI facade shared by the owner namespace and the\n\t// instance-private namespace: same revocation gating and detached snapshots.\n\tconst guardedStateFacade = (source: StateAPI): StateAPI =>\n\t\tObject.freeze({\n\t\t\tget: (key: string) => {\n\t\t\t\tassertActive();\n\t\t\t\treturn detachedFreeze(source.get(key));\n\t\t\t},\n\t\t\tset: (key: string, value: Parameters<StateAPI[\"set\"]>[1], options?: Parameters<StateAPI[\"set\"]>[2]) => {\n\t\t\t\tassertActive();\n\t\t\t\treturn source.set(key, detachedFreeze(value), options);\n\t\t\t},\n\t\t\tdelete: (key: string, options?: Parameters<StateAPI[\"delete\"]>[1]) => {\n\t\t\t\tassertActive();\n\t\t\t\treturn source.delete(key, options);\n\t\t\t},\n\t\t\tlist: (prefix?: string) => {\n\t\t\t\tassertActive();\n\t\t\t\treturn detachedFreeze(source.list(prefix));\n\t\t\t},\n\t\t\twatch: (prefix: string | undefined, handler: (change: StateChange) => void | Promise<void>) => {\n\t\t\t\tassertActive();\n\t\t\t\treturn track(\n\t\t\t\t\tsource.watch(prefix, (change: StateChange) => {\n\t\t\t\t\t\tif (!active || operation.signal.aborted) return;\n\t\t\t\t\t\tvoid handler(detachedFreeze(change));\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t},\n\t\t}) as StateAPI;\n\n\tconst state = raw.state ? guardedStateFacade(raw.state) : undefined;\n\tconst instanceState = raw.instanceState ? guardedStateFacade(raw.instanceState) : undefined;\n\n\tconst artifact = raw.artifact\n\t\t? (Object.freeze({\n\t\t\t\tput: async (\n\t\t\t\t\tinput: Parameters<OutputArtifactAPI[\"put\"]>[0],\n\t\t\t\t\toptions?: Parameters<OutputArtifactAPI[\"put\"]>[1],\n\t\t\t\t) => {\n\t\t\t\t\tassertActive();\n\t\t\t\t\tconst data = input.data instanceof Uint8Array ? new Uint8Array(input.data) : input.data;\n\t\t\t\t\tconst abort = combinedAbortSignal(operation.signal, options?.signal);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst ref = await raw.artifact!.put({ ...input, data }, { ...options, signal: abort.signal });\n\t\t\t\t\t\tassertActive();\n\t\t\t\t\t\treturn detachedFreeze(ref) as OutputArtifactRef;\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tabort.dispose();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tstat: async (ref: OutputArtifactRef) => {\n\t\t\t\t\tassertActive();\n\t\t\t\t\tconst result = await raw.artifact!.stat(detachedFreeze(ref));\n\t\t\t\t\tassertActive();\n\t\t\t\t\treturn detachedFreeze(result);\n\t\t\t\t},\n\t\t\t\tread: async (ref: OutputArtifactRef, options?: Parameters<OutputArtifactAPI[\"read\"]>[1]) => {\n\t\t\t\t\tassertActive();\n\t\t\t\t\tconst chunk = await raw.artifact!.read(detachedFreeze(ref), options);\n\t\t\t\t\tassertActive();\n\t\t\t\t\treturn detachedFreeze({\n\t\t\t\t\t\t...chunk,\n\t\t\t\t\t\tdata: new Uint8Array(chunk.data),\n\t\t\t\t\t}) as OutputArtifactChunk;\n\t\t\t\t},\n\t\t\t}) as OutputArtifactAPI)\n\t\t: undefined;\n\n\tconst operationFacade = raw.operation\n\t\t? Object.freeze({\n\t\t\t\tversion: 1 as const,\n\t\t\t\tid: raw.operation.id,\n\t\t\t\tsignal: raw.operation.signal,\n\t\t\t\tstatus: () => {\n\t\t\t\t\tassertActive();\n\t\t\t\t\treturn raw.operation!.status();\n\t\t\t\t},\n\t\t\t\tisActive: () => active && raw.operation!.isActive(),\n\t\t\t\treportProgress: (progress: OperationProgress) => {\n\t\t\t\t\tassertActive();\n\t\t\t\t\treturn raw.operation!.reportProgress(progress);\n\t\t\t\t},\n\t\t\t\tonCancel: (handler: (reason: unknown) => void | Promise<void>) => {\n\t\t\t\t\tassertActive();\n\t\t\t\t\treturn track(raw.operation!.onCancel(handler));\n\t\t\t\t},\n\t\t\t\tcancel: async (reason?: string) => {\n\t\t\t\t\tassertActive();\n\t\t\t\t\tawait raw.operation!.cancel(reason);\n\t\t\t\t},\n\t\t\t})\n\t\t: createOperationFacade(operation, instance.id, () => active);\n\n\tconst value = Object.freeze({\n\t\tversion: 1 as const,\n\t\t...(session ? { session } : {}),\n\t\t...(context ? { context } : {}),\n\t\t...(state ? { state } : {}),\n\t\t...(instanceState ? { instanceState } : {}),\n\t\t...(artifact ? { artifact } : {}),\n\t\t...(operationFacade ? { operation: operationFacade } : {}),\n\t\t...(raw.model\n\t\t\t? {\n\t\t\t\t\tmodel: Object.freeze({\n\t\t\t\t\t\tversion: 1 as const,\n\t\t\t\t\t\tget facts() {\n\t\t\t\t\t\t\tassertActive();\n\t\t\t\t\t\t\treturn raw.model!.facts;\n\t\t\t\t\t\t},\n\t\t\t\t\t\tinvocation: {\n\t\t\t\t\t\t\tinvoke: async (input: Parameters<AgentModelInvocationV1[\"invoke\"]>[0], signal: AbortSignal) => {\n\t\t\t\t\t\t\t\tassertActive();\n\t\t\t\t\t\t\t\tconst result = await raw.model!.invocation.invoke(input, signal);\n\t\t\t\t\t\t\t\tassertActive();\n\t\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t}) satisfies AgentModelFacadeV1,\n\t\t\t\t}\n\t\t\t: {}),\n\t\t...(raw.tool\n\t\t\t? {\n\t\t\t\t\ttool: Object.freeze({\n\t\t\t\t\t\tversion: 1 as const,\n\t\t\t\t\t\tlistTools: () => {\n\t\t\t\t\t\t\tassertActive();\n\t\t\t\t\t\t\treturn raw.tool!.listTools();\n\t\t\t\t\t\t},\n\t\t\t\t\t\tinvokeTool: (name: string, input: unknown, invokeOptions?: { readonly signal?: AbortSignal }) => {\n\t\t\t\t\t\t\tassertActive();\n\t\t\t\t\t\t\treturn raw.tool!.invokeTool(name, input, invokeOptions);\n\t\t\t\t\t\t},\n\t\t\t\t\t}) satisfies AgentToolFacadeV1,\n\t\t\t\t}\n\t\t\t: {}),\n\t});\n\treturn {\n\t\tvalue,\n\t\trevoke: () => {\n\t\t\tif (!active) return;\n\t\t\tactive = false;\n\t\t\tfor (const cleanup of [...cleanups]) void cleanup();\n\t\t},\n\t};\n}\n\nclass AgentInstanceRuntime<TInput, TResult> implements AgentInstance<TInput, TResult> {\n\treadonly id: string;\n\treadonly definition: AgentDefinition<TInput, TResult>;\n\n\tprivate statusValue: AgentInstanceStatus = \"created\";\n\tprivate revisionValue = 0;\n\tprivate activeLease?: ControllerLeaseRuntime;\n\tprivate activeOperation?: OperationRuntime<TResult>;\n\tprivate activeExecution?: Promise<void>;\n\tprivate completion: Promise<AgentInstanceResult<TResult>>;\n\tprivate resolveCompletion!: (result: AgentInstanceResult<TResult>) => void;\n\tprivate completionResolved = false;\n\tprivate readonly parentInstanceId: string | undefined;\n\tprivate readonly nextId: (kind: string) => string;\n\tprivate readonly defaultLeaseOwner: string;\n\tprivate readonly hostPrimitivesFactory?: AgentHostPrimitivesFactory;\n\tprivate readonly lifecycleDispatcher?: AgentCompositionLifecycleDispatcher;\n\tprivate readonly clearInstanceState?: (instanceId: string) => void;\n\n\tconstructor(\n\t\tdefinition: AgentDefinition<TInput, TResult>,\n\t\tid: string,\n\t\tparentInstanceId: string | undefined,\n\t\tnextId: (kind: string) => string,\n\t\tdefaultLeaseOwner: string,\n\t\thostPrimitivesFactory: AgentHostPrimitivesFactory | undefined,\n\t\tlifecycleDispatcher: AgentCompositionLifecycleDispatcher | undefined,\n\t\tclearInstanceState: ((instanceId: string) => void) | undefined,\n\t) {\n\t\tthis.id = id;\n\t\tthis.definition = definition;\n\t\tthis.parentInstanceId = parentInstanceId;\n\t\tthis.nextId = nextId;\n\t\tthis.defaultLeaseOwner = defaultLeaseOwner;\n\t\tthis.hostPrimitivesFactory = hostPrimitivesFactory;\n\t\tthis.lifecycleDispatcher = lifecycleDispatcher;\n\t\tthis.clearInstanceState = clearInstanceState;\n\t\tthis.completion = new Promise<AgentInstanceResult<TResult>>((resolve) => {\n\t\t\tthis.resolveCompletion = resolve;\n\t\t});\n\t}\n\n\tsnapshot(): AgentInstanceSnapshot {\n\t\treturn freezeSnapshot({\n\t\t\tid: this.id,\n\t\t\tdefinitionId: this.definition.id,\n\t\t\tdefinitionVersion: this.definition.version,\n\t\t\trole: this.definition.role,\n\t\t\t...(this.parentInstanceId ? { parentInstanceId: this.parentInstanceId } : {}),\n\t\t\tstatus: this.statusValue,\n\t\t\trevision: this.revisionValue,\n\t\t\t...(this.activeLease?.isActive() ? { leaseOwner: this.activeLease.owner } : {}),\n\t\t});\n\t}\n\n\tasync acquireControllerLease(\n\t\towner = this.definition.owner ?? this.defaultLeaseOwner,\n\t): Promise<AgentControllerLease> {\n\t\tthis.assertNotDisposed();\n\t\tif (this.activeLease?.isActive())\n\t\t\tthrow new Error(`Agent instance already has an active controller lease: ${this.id}`);\n\t\tconst lease = new ControllerLeaseRuntime(this, this.nextId(\"agent-lease\"), owner, this.revisionValue + 1);\n\t\tthis.activeLease = lease;\n\t\treturn lease;\n\t}\n\n\trun(input: TInput, options: { lease?: AgentControllerLease; signal?: AbortSignal } = {}): OperationHandle<TResult> {\n\t\tthis.assertNotDisposed();\n\t\tif (this.statusValue !== \"created\")\n\t\t\tthrow new Error(`Agent instance cannot run from status ${this.statusValue}: ${this.id}`);\n\t\tconst lease = this.activeLease;\n\t\tif (!lease?.isActive()) throw new Error(`Agent instance requires an active controller lease: ${this.id}`);\n\t\tif (options.lease !== lease || !this.isLeaseUsable(options.lease)) {\n\t\t\tthrow new Error(`Agent controller lease is not valid for instance: ${this.id}`);\n\t\t}\n\n\t\tthis.statusValue = \"running\";\n\t\tconst controller = new AbortController();\n\t\tconst externalSignal = options.signal;\n\t\tlet externalAbortListener: (() => void) | undefined;\n\t\tif (externalSignal) {\n\t\t\texternalAbortListener = () => {\n\t\t\t\tcontroller.abort(externalSignal.reason);\n\t\t\t\tvoid this.cancel(externalSignal.reason === undefined ? undefined : String(externalSignal.reason));\n\t\t\t};\n\t\t\tif (!externalSignal.aborted) externalSignal.addEventListener(\"abort\", externalAbortListener, { once: true });\n\t\t}\n\n\t\tlet operation!: OperationRuntime<TResult>;\n\t\toperation = new OperationRuntime<TResult>(\n\t\t\tthis.nextId(\"agent-operation\"),\n\t\t\tcontroller,\n\t\t\t() => this.cancel(controller.signal.reason),\n\t\t\t(progress, step) => this.reportLifecycle(\"step\", operation, undefined, progress, step),\n\t\t);\n\t\tthis.activeOperation = operation;\n\t\tif (externalSignal?.aborted) {\n\t\t\tcontroller.abort(externalSignal.reason);\n\t\t} else {\n\t\t\tthis.reportLifecycle(\"start\", operation);\n\t\t}\n\t\tthis.activeExecution = this.execute(input, lease, operation, externalSignal, externalAbortListener);\n\t\tif (externalSignal?.aborted) {\n\t\t\t// Trigger cancellation only after the execution is tracked, so the\n\t\t\t// pre-aborted path drains like every other cancellation path instead\n\t\t\t// of resolving completion ahead of the execution body.\n\t\t\tvoid this.cancel(externalSignal.reason === undefined ? undefined : String(externalSignal.reason));\n\t\t}\n\t\treturn operation;\n\t}\n\n\tasync wait(): Promise<AgentInstanceResult<TResult>> {\n\t\treturn this.completion;\n\t}\n\n\tasync cancel(reason?: string): Promise<void> {\n\t\tif (this.statusValue === \"disposed\" || terminalStatuses.has(this.statusValue)) return;\n\t\tthis.statusValue = \"cancelled\";\n\t\tthis.revisionValue += 1;\n\t\tconst operation = this.activeOperation;\n\t\tif (operation) {\n\t\t\tthis.reportLifecycle(\"cancel\", operation);\n\t\t\tthis.reportLifecycle(\"end\", operation, \"cancelled\");\n\t\t\toperation.cancelFromInstance(reason);\n\t\t}\n\t\t// The run body must eventually observe the abort signal: cancellation only\n\t\t// settles after the execution drained, so wait() and lease disposal never\n\t\t// race side effects still in flight. There is deliberately no timeout. A run\n\t\t// body that awaits this cancel(), dispose(), or its own lease release\n\t\t// self-deadlocks by contract.\n\t\tawait this.drainExecution();\n\t\tthis.resolveCompletionOnce({ status: \"cancelled\", revision: this.revisionValue, error: abortError(reason) });\n\t}\n\n\tasync dispose(): Promise<void> {\n\t\tif (this.statusValue === \"disposed\") return;\n\t\tif (this.statusValue === \"created\") {\n\t\t\tawait this.activeLease?.release();\n\t\t\tthis.statusValue = \"disposed\";\n\t\t\tthis.revisionValue += 1;\n\t\t\tthis.clearInstanceState?.(this.id);\n\t\t\tthis.resolveCompletionOnce({ status: \"disposed\", revision: this.revisionValue });\n\t\t\treturn;\n\t\t}\n\t\tif (!terminalStatuses.has(this.statusValue)) await this.cancel(\"Agent instance disposed\");\n\t\t// A concurrent cancel() may still be draining; release the lease only after\n\t\t// the execution has settled.\n\t\tawait this.drainExecution();\n\t\tawait this.activeLease?.release();\n\t\tthis.statusValue = \"disposed\";\n\t\tthis.revisionValue += 1;\n\t\t// The instance-private state namespace (and its watchers) dies with the\n\t\t// instance, after every drain the run body could still rely on.\n\t\tthis.clearInstanceState?.(this.id);\n\t\tthis.resolveCompletionOnce({ status: \"disposed\", revision: this.revisionValue });\n\t}\n\n\tasync deactivateLease(lease: ControllerLeaseRuntime): Promise<void> {\n\t\tif (this.activeLease !== lease) return;\n\t\tthis.activeLease = undefined;\n\t\tif (this.statusValue === \"running\") {\n\t\t\tawait this.cancel(\"Controller lease released\");\n\t\t\treturn;\n\t\t}\n\t\t// A cancel() from another path may still be draining the execution.\n\t\tawait this.drainExecution();\n\t}\n\n\tisLeaseUsable(lease: AgentControllerLease | undefined): lease is ControllerLeaseRuntime {\n\t\treturn (\n\t\t\tlease instanceof ControllerLeaseRuntime &&\n\t\t\tlease.instanceId === this.id &&\n\t\t\tlease.isActive() &&\n\t\t\tthis.activeLease === lease\n\t\t);\n\t}\n\n\tprivate async execute(\n\t\tinput: TInput,\n\t\tlease: ControllerLeaseRuntime,\n\t\toperation: OperationRuntime<TResult>,\n\t\texternalSignal: AbortSignal | undefined,\n\t\texternalAbortListener: (() => void) | undefined,\n\t): Promise<void> {\n\t\tconst instanceSnapshot = this.snapshot();\n\t\tlet hostScope: RevocableHost | undefined;\n\t\tconst revokeHost = () => hostScope?.revoke();\n\t\toperation.signal.addEventListener(\"abort\", revokeHost, { once: true });\n\t\ttry {\n\t\t\tif (operation.signal.aborted) throw abortError(operation.signal.reason);\n\t\t\tif (this.hostPrimitivesFactory) {\n\t\t\t\tconst raw = await this.hostPrimitivesFactory({\n\t\t\t\t\tinstance: instanceSnapshot,\n\t\t\t\t\toperationId: operation.id,\n\t\t\t\t\tsignal: operation.signal,\n\t\t\t\t\tleaseOwner: lease.owner,\n\t\t\t\t});\n\t\t\t\tif (raw !== undefined) {\n\t\t\t\t\tif (raw.version !== 1) throw new Error(\"Unsupported Agent host primitives version\");\n\t\t\t\t\tif (raw.operation && (raw.operation.id !== operation.id || raw.operation.signal !== operation.signal))\n\t\t\t\t\t\tthrow new Error(`Agent host operation does not match active operation: ${operation.id}`);\n\t\t\t\t\thostScope = createRevocableHostPrimitives(\n\t\t\t\t\t\t{ ...raw, operation: raw.operation ?? createOperationFacade(operation, this.id, () => true) },\n\t\t\t\t\t\toperation as OperationRuntime<unknown>,\n\t\t\t\t\t\tinstanceSnapshot,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (operation.signal.aborted) throw abortError(operation.signal.reason);\n\t\t\tconst context: AgentExecutionContext = Object.freeze({\n\t\t\t\tinstance: instanceSnapshot,\n\t\t\t\tsignal: operation.signal,\n\t\t\t\tinputRevision: this.revisionValue,\n\t\t\t\t...(hostScope ? { host: hostScope.value } : {}),\n\t\t\t});\n\t\t\tconst output = await this.definition.run(input, context);\n\t\t\tif (operation.signal.aborted || !this.isLeaseUsable(lease) || this.statusValue !== \"running\") return;\n\t\t\tthis.statusValue = \"succeeded\";\n\t\t\tthis.revisionValue += 1;\n\t\t\toperation.resolve(output);\n\t\t\tthis.reportLifecycle(\"end\", operation, \"succeeded\");\n\t\t\tthis.resolveCompletionOnce({ status: \"succeeded\", revision: this.revisionValue, output });\n\t\t} catch (error) {\n\t\t\tif (operation.signal.aborted || this.statusValue === \"cancelled\" || this.statusValue === \"disposed\") {\n\t\t\t\t// Instance-level cancellation marks the handle cancelled before this\n\t\t\t\t// catch runs; the pre-aborted run() path gets here first, so settle\n\t\t\t\t// the handle as cancelled instead of failed.\n\t\t\t\toperation.cancelFromInstance(operation.signal.reason);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.statusValue = \"failed\";\n\t\t\tthis.revisionValue += 1;\n\t\t\toperation.reject(error);\n\t\t\tthis.reportLifecycle(\"end\", operation, \"failed\");\n\t\t\tthis.resolveCompletionOnce({ status: \"failed\", revision: this.revisionValue, error });\n\t\t} finally {\n\t\t\thostScope?.revoke();\n\t\t\toperation.signal.removeEventListener(\"abort\", revokeHost);\n\t\t\tif (externalSignal && externalAbortListener)\n\t\t\t\texternalSignal.removeEventListener(\"abort\", externalAbortListener);\n\t\t\tif (this.activeOperation === operation) this.activeOperation = undefined;\n\t\t\t// run() requires status \"created\", so at most one execution ever exists\n\t\t\t// per instance and clearing the field unconditionally is safe.\n\t\t\tthis.activeExecution = undefined;\n\t\t}\n\t}\n\n\tprivate async drainExecution(): Promise<void> {\n\t\t// Capture the reference before awaiting: execute()'s finally clears the\n\t\t// field while drainers still need the promise.\n\t\tconst execution = this.activeExecution;\n\t\tif (!execution) return;\n\t\tawait execution;\n\t}\n\n\tprivate assertNotDisposed(): void {\n\t\tif (this.statusValue === \"disposed\") throw new Error(`Agent instance is disposed: ${this.id}`);\n\t}\n\n\tprivate resolveCompletionOnce(result: AgentInstanceResult<TResult>): void {\n\t\tif (this.completionResolved) return;\n\t\tthis.completionResolved = true;\n\t\tthis.resolveCompletion(result);\n\t}\n\n\tprivate reportLifecycle(\n\t\tevent: AgentCompositionLifecycleEventName,\n\t\toperation: OperationRuntime<TResult>,\n\t\tstatus?: AgentCompositionLifecycleTerminalStatus,\n\t\tprogress?: OperationProgress,\n\t\tstep?: number,\n\t): void {\n\t\tif (!this.lifecycleDispatcher) return;\n\t\ttry {\n\t\t\tthis.lifecycleDispatcher({\n\t\t\t\tevent,\n\t\t\t\toperationId: operation.id,\n\t\t\t\toperationKind: `agent:${this.definition.id}@${this.definition.version}`,\n\t\t\t\t...(this.definition.owner === undefined ? {} : { owner: this.definition.owner }),\n\t\t\t\t...(status === undefined ? {} : { status }),\n\t\t\t\t...(progress === undefined ? {} : { progress }),\n\t\t\t\t...(step === undefined ? {} : { step }),\n\t\t\t});\n\t\t} catch {\n\t\t\t// Lifecycle delivery is observational and must not affect the operation.\n\t\t}\n\t}\n}\n\ninterface LeaseOwner {\n\tid: string;\n\tdeactivateLease(lease: ControllerLeaseRuntime): Promise<void>;\n}\n\nclass ControllerLeaseRuntime implements AgentControllerLease {\n\tprivate active = true;\n\tprivate readonly instance: LeaseOwner;\n\treadonly id: string;\n\treadonly owner: string;\n\treadonly revision: number;\n\n\tconstructor(instance: LeaseOwner, id: string, owner: string, revision: number) {\n\t\tthis.instance = instance;\n\t\tthis.id = id;\n\t\tthis.owner = owner;\n\t\tthis.revision = revision;\n\t}\n\n\tget instanceId(): string {\n\t\treturn this.instance.id;\n\t}\n\n\tisActive(): boolean {\n\t\treturn this.active;\n\t}\n\n\tasync release(): Promise<void> {\n\t\tif (!this.active) return;\n\t\tthis.active = false;\n\t\tawait this.instance.deactivateLease(this);\n\t}\n}\n\nclass OperationRuntime<TResult> implements OperationHandle<TResult> {\n\tprivate statusValue: OperationStatus = \"queued\";\n\tprivate resolveResult!: (result: TResult) => void;\n\tprivate rejectResult!: (error: unknown) => void;\n\treadonly result: Promise<TResult>;\n\treadonly id: string;\n\tprivate readonly controller: AbortController;\n\tprivate readonly cancelCallback: () => Promise<void>;\n\tprivate readonly reportProgressCallback: (progress: OperationProgress, step: number) => void;\n\tprivate progressSequence = 0;\n\n\tconstructor(\n\t\tid: string,\n\t\tcontroller: AbortController,\n\t\tcancelCallback: () => Promise<void>,\n\t\treportProgress: (progress: OperationProgress, step: number) => void,\n\t) {\n\t\tthis.id = id;\n\t\tthis.controller = controller;\n\t\tthis.cancelCallback = cancelCallback;\n\t\tthis.reportProgressCallback = reportProgress;\n\t\tthis.signal = controller.signal;\n\t\tthis.result = new Promise<TResult>((resolve, reject) => {\n\t\t\tthis.resolveResult = resolve;\n\t\t\tthis.rejectResult = reject;\n\t\t});\n\t\tthis.statusValue = \"running\";\n\t}\n\n\treadonly signal: AbortSignal;\n\n\tstatus(): OperationStatus {\n\t\treturn this.statusValue;\n\t}\n\n\treportProgress(progress: OperationProgress): boolean {\n\t\tif (this.statusValue !== \"running\" || this.signal.aborted) return false;\n\t\tthis.reportProgressCallback(progress, ++this.progressSequence);\n\t\treturn true;\n\t}\n\n\tasync cancel(reason?: string): Promise<void> {\n\t\tif (this.statusValue === \"succeeded\" || this.statusValue === \"failed\" || this.statusValue === \"cancelled\") return;\n\t\tthis.controller.abort(reason);\n\t\t// The handle must settle cancellation without waiting for an uncooperative\n\t\t// run body. AgentInstanceRuntime.cancel() still drains the body when the\n\t\t// caller explicitly cancels/releases the instance, but OperationHandle is\n\t\t// the non-blocking public fence used by callers that cannot coordinate the\n\t\t// plugin's private awaits. The callback synchronously marks the operation\n\t\t// cancelled before its first await; any later drain is best-effort here.\n\t\ttry {\n\t\t\tvoid this.cancelCallback().catch(() => undefined);\n\t\t} catch {\n\t\t\t// A cancellation request is already reflected by this operation's\n\t\t\t// aborted signal and terminal status; callback failures must not turn\n\t\t\t// cancel() into an unbounded or rejected wait.\n\t\t}\n\t}\n\n\tcancelFromInstance(reason?: string): void {\n\t\tif (this.statusValue === \"succeeded\" || this.statusValue === \"failed\" || this.statusValue === \"cancelled\") return;\n\t\tthis.statusValue = \"cancelled\";\n\t\tthis.controller.abort(reason);\n\t\tthis.rejectResult(abortError(reason));\n\t}\n\n\tresolve(value: TResult): void {\n\t\tif (this.statusValue === \"cancelled\" || this.statusValue === \"failed\") return;\n\t\tthis.statusValue = \"succeeded\";\n\t\tthis.resolveResult(value);\n\t}\n\n\treject(error: unknown): void {\n\t\tif (this.statusValue === \"cancelled\") return;\n\t\tthis.statusValue = \"failed\";\n\t\tthis.rejectResult(error);\n\t}\n}\n\nexport class AgentCompositionRuntime\n\timplements\n\t\tAgentCompositionAPI,\n\t\tAgentCompositionHostBinding,\n\t\tAgentCompositionDefinitionBinding,\n\t\tAgentCompositionScopedHostBinding,\n\t\tAgentCompositionInstanceStateBinding\n{\n\tprivate readonly definitions = new Map<string, AgentDefinition<unknown, unknown>>();\n\tprivate readonly instances = new Map<string, AgentInstanceRuntime<unknown, unknown>>();\n\tprivate readonly instanceStateClearers = new Set<(instanceId: string) => void>();\n\tprivate sequence = 0;\n\tprivate readonly nextId: (kind: string) => string;\n\tprivate readonly defaultLeaseOwner?: string;\n\tprivate hostPrimitivesFactory?: AgentHostPrimitivesFactory;\n\tprivate lifecycleDispatcher?: AgentCompositionLifecycleDispatcher;\n\n\tconstructor(options: AgentCompositionRuntimeOptions = {}) {\n\t\tthis.defaultLeaseOwner = options.defaultLeaseOwner;\n\t\tthis.hostPrimitivesFactory = options.hostPrimitivesFactory;\n\t\tthis.nextId = options.idFactory ?? ((kind: string) => `${kind}-${++this.sequence}`);\n\t}\n\n\tsetHostPrimitivesFactory(factory?: AgentHostPrimitivesFactory): void {\n\t\tthis.hostPrimitivesFactory = factory;\n\t}\n\n\tsetLifecycleDispatcher(dispatcher?: AgentCompositionLifecycleDispatcher): void {\n\t\tthis.lifecycleDispatcher = dispatcher;\n\t}\n\n\taddInstanceStateClearer(clearer: (instanceId: string) => void): () => void {\n\t\tthis.instanceStateClearers.add(clearer);\n\t\treturn () => {\n\t\t\tthis.instanceStateClearers.delete(clearer);\n\t\t};\n\t}\n\n\tdisposeDefinitions(definitions: readonly AgentDefinition[]): void {\n\t\tconst owned = new Set(definitions);\n\t\tfor (const [key, definition] of this.definitions) {\n\t\t\tif (owned.has(definition)) this.definitions.delete(key);\n\t\t}\n\t\tfor (const [id, instance] of this.instances) {\n\t\t\tif (!owned.has(instance.definition)) continue;\n\t\t\tthis.instances.delete(id);\n\t\t\tvoid instance.dispose();\n\t\t}\n\t}\n\n\tdefine<TInput = unknown, TResult = unknown>(\n\t\tdefinition: AgentDefinition<TInput, TResult>,\n\t): AgentDefinition<TInput, TResult> {\n\t\tvalidateAgentDefinition(definition);\n\t\tif (this.definitions.has(this.definitionKey(definition.id, definition.version))) {\n\t\t\tthrow new Error(`Agent definition already registered: ${definition.id}@${definition.version}`);\n\t\t}\n\t\tconst frozen = Object.freeze({ ...definition });\n\t\tthis.definitions.set(\n\t\t\tthis.definitionKey(definition.id, definition.version),\n\t\t\tfrozen as AgentDefinition<unknown, unknown>,\n\t\t);\n\t\treturn frozen;\n\t}\n\n\tget<TInput = unknown, TResult = unknown>(id: string, version: number): AgentDefinition<TInput, TResult> {\n\t\tconst definition = this.definitions.get(this.definitionKey(id, version));\n\t\tif (!definition) throw new Error(`Unknown Agent definition: ${id}@${version}`);\n\t\treturn definition as AgentDefinition<TInput, TResult>;\n\t}\n\n\tcreate<TInput = unknown, TResult = unknown>(\n\t\tdefinition: AgentDefinition<TInput, TResult> | DefinitionRef,\n\t\toptions: { id?: string; parentInstanceId?: string } = {},\n\t): AgentInstance<TInput, TResult> {\n\t\treturn this.createInternal(definition, options, this.hostPrimitivesFactory);\n\t}\n\n\tcreateWithHostPrimitives<TInput = unknown, TResult = unknown>(\n\t\tdefinition: AgentDefinition<TInput, TResult> | DefinitionRef,\n\t\toptions: { id?: string; parentInstanceId?: string } | undefined,\n\t\thostPrimitivesFactory: AgentHostPrimitivesFactory,\n\t\tlifecycleDispatcher?: AgentCompositionLifecycleDispatcher,\n\t): AgentInstance<TInput, TResult> {\n\t\t// A CapabilityRuntime supplies a complete, session-bound factory for this\n\t\t// plugin invocation. Do not merge the runtime-wide factory here: one\n\t\t// composition runtime may be shared by more than one AgentSession.\n\t\treturn this.createInternal(\n\t\t\tdefinition,\n\t\t\toptions ?? {},\n\t\t\thostPrimitivesFactory,\n\t\t\tlifecycleDispatcher ?? this.lifecycleDispatcher,\n\t\t);\n\t}\n\n\tprivate createInternal<TInput = unknown, TResult = unknown>(\n\t\tdefinition: AgentDefinition<TInput, TResult> | DefinitionRef,\n\t\toptions: { id?: string; parentInstanceId?: string },\n\t\thostPrimitivesFactory: AgentHostPrimitivesFactory | undefined,\n\t\tlifecycleDispatcher: AgentCompositionLifecycleDispatcher | undefined = this.lifecycleDispatcher,\n\t): AgentInstance<TInput, TResult> {\n\t\tif (!definition || typeof definition !== \"object\") throw new Error(\"Agent definition or reference is required\");\n\t\tconst resolved =\n\t\t\t\"run\" in definition\n\t\t\t\t? validateAgentDefinition(definition as AgentDefinition<TInput, TResult>)\n\t\t\t\t: this.get<TInput, TResult>(definition.id, definition.version);\n\t\tif (options.parentInstanceId !== undefined && !this.instances.has(options.parentInstanceId)) {\n\t\t\tthrow new Error(`Unknown parent Agent instance: ${options.parentInstanceId}`);\n\t\t}\n\t\tif (this.instances.has(options.id ?? \"\")) throw new Error(`Agent instance id already exists: ${options.id}`);\n\t\tconst id = options.id ?? this.nextId(\"agent-instance\");\n\t\tif (this.instances.has(id)) throw new Error(`Agent instance id already exists: ${id}`);\n\t\tconst instance = new AgentInstanceRuntime(\n\t\t\tresolved,\n\t\t\tid,\n\t\t\toptions.parentInstanceId,\n\t\t\tthis.nextId,\n\t\t\tthis.defaultLeaseOwner ?? resolved.owner ?? \"agent-composition\",\n\t\t\thostPrimitivesFactory,\n\t\t\tlifecycleDispatcher,\n\t\t\t(instanceId: string) => {\n\t\t\t\tfor (const clearer of this.instanceStateClearers) clearer(instanceId);\n\t\t\t},\n\t\t);\n\t\tthis.instances.set(id, instance as AgentInstanceRuntime<unknown, unknown>);\n\t\treturn instance;\n\t}\n\n\tlistInstances(): readonly AgentInstanceSnapshot[] {\n\t\treturn Object.freeze([...this.instances.values()].map((instance) => instance.snapshot()));\n\t}\n\n\tprivate definitionKey(id: string, version: number): string {\n\t\treturn `${id}@${version}`;\n\t}\n}\n\nexport function createAgentCompositionRuntime(options: AgentCompositionRuntimeOptions = {}): AgentCompositionRuntime {\n\treturn new AgentCompositionRuntime(options);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"agent-composition.js","sourceRoot":"","sources":["../../../src/core/extensions/agent-composition.ts"],"names":[],"mappings":"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","sourcesContent":["import { t } from \"../i18n/index.ts\";\nimport type {\n\tAgentCompositionAPI,\n\tAgentCompositionDefinitionBinding,\n\tAgentCompositionHostBinding,\n\tAgentCompositionScopedHostBinding,\n\tAgentContextCommitRequestV1,\n\tAgentContextCommitResultV1,\n\tAgentContextFacadeV1,\n\tAgentControllerLease,\n\tAgentDefinition,\n\tAgentExecutionContext,\n\tAgentHostPrimitivesFactory,\n\tAgentHostPrimitivesV1,\n\tAgentInstance,\n\tAgentInstanceResult,\n\tAgentInstanceSnapshot,\n\tAgentInstanceStatus,\n\tAgentModelFacadeV1,\n\tAgentModelInvocationV1,\n\tAgentOperationFacadeV1,\n\tAgentSessionFacadeV1,\n\tAgentToolFacadeV1,\n\tDisposableRegistration,\n\tOperationHandle,\n\tOperationProgress,\n\tOperationStatus,\n\tOutputArtifactAPI,\n\tOutputArtifactChunk,\n\tOutputArtifactRef,\n\tStateAPI,\n\tStateChange,\n} from \"./public-api.ts\";\n\nexport interface AgentCompositionRuntimeOptions {\n\tidFactory?: (kind: string) => string;\n\tdefaultLeaseOwner?: string;\n\thostPrimitivesFactory?: AgentHostPrimitivesFactory;\n}\n\nexport type AgentCompositionLifecycleEventName = \"start\" | \"step\" | \"cancel\" | \"end\";\nexport type AgentCompositionLifecycleTerminalStatus = \"succeeded\" | \"failed\" | \"cancelled\";\n\nexport interface AgentCompositionLifecycleEvent {\n\treadonly event: AgentCompositionLifecycleEventName;\n\treadonly operationId: string;\n\treadonly operationKind: string;\n\treadonly owner?: string;\n\treadonly status?: AgentCompositionLifecycleTerminalStatus;\n\treadonly step?: number;\n\treadonly progress?: OperationProgress;\n}\n\nexport type AgentCompositionLifecycleDispatcher = (event: AgentCompositionLifecycleEvent) => void;\n\n/** Host-only binding used by CapabilityRuntime to observe composition operations. */\nexport interface AgentCompositionLifecycleBinding {\n\tsetLifecycleDispatcher(dispatcher?: AgentCompositionLifecycleDispatcher): void;\n}\n\n/**\n * Host-only binding used by CapabilityRuntime to clear instance-scoped state\n * when an instance is disposed. Instance ids are unique per composition\n * runtime, so every registered clearer is invoked on each disposal and\n * resolves by id whether the disposed instance belongs to it.\n */\nexport interface AgentCompositionInstanceStateBinding {\n\t/** Registers a clearer invoked after a disposed instance's execution drained. Returns an unsubscribe function. */\n\taddInstanceStateClearer(clearer: (instanceId: string) => void): () => void;\n}\n\ntype DefinitionRef = { id: string; version: number };\n\nconst terminalStatuses = new Set<AgentInstanceStatus>([\"succeeded\", \"failed\", \"cancelled\", \"disposed\"]);\n\nfunction abortError(reason?: unknown): Error {\n\tif (reason instanceof Error) return reason;\n\tconst error = new Error(reason === undefined ? \"Agent operation cancelled\" : String(reason));\n\terror.name = \"AbortError\";\n\treturn error;\n}\n\nfunction combinedAbortSignal(...signals: readonly (AbortSignal | undefined)[]): {\n\tsignal: AbortSignal;\n\tdispose(): void;\n} {\n\tconst controller = new AbortController();\n\tconst listeners: Array<{ signal: AbortSignal; listener: () => void }> = [];\n\tfor (const signal of new Set(signals.filter((signal): signal is AbortSignal => signal !== undefined))) {\n\t\tconst abort = () => {\n\t\t\tif (!controller.signal.aborted) controller.abort(signal.reason);\n\t\t};\n\t\tif (signal.aborted) {\n\t\t\tabort();\n\t\t\tbreak;\n\t\t}\n\t\tsignal.addEventListener(\"abort\", abort, { once: true });\n\t\tlisteners.push({ signal, listener: abort });\n\t}\n\treturn {\n\t\tsignal: controller.signal,\n\t\tdispose: () => {\n\t\t\tfor (const { signal, listener } of listeners) signal.removeEventListener(\"abort\", listener);\n\t\t},\n\t};\n}\n\nfunction freezeSnapshot(snapshot: AgentInstanceSnapshot): AgentInstanceSnapshot {\n\treturn Object.freeze({ ...snapshot });\n}\n\nfunction validateAgentDefinition<TInput, TResult>(\n\tdefinition: AgentDefinition<TInput, TResult>,\n): AgentDefinition<TInput, TResult> {\n\tif (!definition || typeof definition !== \"object\") {\n\t\tthrow new Error(t(\"Agent definition is required\"));\n\t}\n\tif (typeof definition.id !== \"string\" || !definition.id.trim()) {\n\t\tthrow new Error(t(\"Agent definition requires a non-empty id\"));\n\t}\n\tif (!Number.isSafeInteger(definition.version) || definition.version < 1) {\n\t\tthrow new Error(t(\"Agent definition version must be a positive safe integer\"));\n\t}\n\tif (definition.role !== \"root-agent-controller\" && definition.role !== \"child-agent-controller\") {\n\t\tthrow new Error(t(\"Agent definition role must be root-agent-controller or child-agent-controller\"));\n\t}\n\tif (typeof definition.run !== \"function\") {\n\t\tthrow new Error(t(\"Agent definition requires a run function\"));\n\t}\n\tif (definition.owner !== undefined && (typeof definition.owner !== \"string\" || !definition.owner.trim())) {\n\t\tthrow new Error(t(\"Agent definition owner must be a non-empty string when provided\"));\n\t}\n\treturn definition;\n}\n\nfunction detachedFreeze<T>(value: T, seen = new WeakMap<object, unknown>()): T {\n\tif (value === null || typeof value !== \"object\") return value;\n\tif (value instanceof Uint8Array) return new Uint8Array(value) as T;\n\tconst existing = seen.get(value);\n\tif (existing) return existing as T;\n\tconst result: Record<string, unknown> | unknown[] = Array.isArray(value) ? [] : {};\n\tseen.set(value, result);\n\tfor (const [key, item] of Object.entries(value as Record<string, unknown>)) {\n\t\t(result as Record<string, unknown>)[key] = detachedFreeze(item, seen);\n\t}\n\treturn Object.freeze(result) as T;\n}\n\nfunction disposable(dispose: () => void | Promise<void>): DisposableRegistration {\n\tlet disposed = false;\n\treturn {\n\t\tid: \"agent-host-registration\",\n\t\tkind: \"agent-host\",\n\t\tdispose: () => {\n\t\t\tif (disposed) return;\n\t\t\tdisposed = true;\n\t\t\treturn dispose();\n\t\t},\n\t};\n}\n\nfunction revokedError(instanceId: string): Error {\n\treturn new Error(`Agent host primitives are revoked: ${instanceId}`);\n}\n\ninterface RevocableHost {\n\treadonly value: AgentHostPrimitivesV1;\n\trevoke(): void;\n}\n\nfunction createOperationFacade<TResult>(\n\toperation: OperationRuntime<TResult>,\n\tinstanceId: string,\n\tactive: () => boolean,\n): AgentOperationFacadeV1 {\n\treturn Object.freeze({\n\t\tversion: 1 as const,\n\t\tid: operation.id,\n\t\tsignal: operation.signal,\n\t\tstatus: () => {\n\t\t\tif (!active()) return \"cancelled\" as OperationStatus;\n\t\t\treturn operation.status();\n\t\t},\n\t\tisActive: () => active() && operation.status() === \"running\",\n\t\treportProgress: (progress: OperationProgress) => active() && operation.reportProgress(progress),\n\t\tonCancel: (handler: (reason: unknown) => void | Promise<void>) => {\n\t\t\tif (!active()) throw revokedError(instanceId);\n\t\t\tconst listener = () => {\n\t\t\t\tvoid handler(operation.signal.reason);\n\t\t\t};\n\t\t\toperation.signal.addEventListener(\"abort\", listener, { once: true });\n\t\t\treturn disposable(() => operation.signal.removeEventListener(\"abort\", listener));\n\t\t},\n\t\tcancel: async (reason?: string) => {\n\t\t\tif (!active()) throw revokedError(instanceId);\n\t\t\tawait operation.cancel(reason);\n\t\t},\n\t});\n}\n\nfunction createRevocableHostPrimitives(\n\traw: AgentHostPrimitivesV1,\n\toperation: OperationRuntime<unknown>,\n\tinstance: AgentInstanceSnapshot,\n): RevocableHost {\n\tlet active = true;\n\tconst cleanups: Array<() => void | Promise<void>> = [];\n\tconst track = (registration: DisposableRegistration): DisposableRegistration => {\n\t\tlet released = false;\n\t\tconst dispose = async () => {\n\t\t\tif (released) return;\n\t\t\treleased = true;\n\t\t\tconst index = cleanups.indexOf(cleanup);\n\t\t\tif (index >= 0) cleanups.splice(index, 1);\n\t\t\tawait registration.dispose();\n\t\t};\n\t\tconst cleanup = dispose;\n\t\tcleanups.push(cleanup);\n\t\treturn {\n\t\t\tid: registration.id,\n\t\t\tkind: registration.kind,\n\t\t\tdispose,\n\t\t};\n\t};\n\tconst assertActive = () => {\n\t\tif (!active) throw revokedError(instance.id);\n\t\tif (operation.signal.aborted) throw abortError(operation.signal.reason);\n\t};\n\n\tconst session = raw.session\n\t\t? (Object.freeze({\n\t\t\t\tversion: 1 as const,\n\t\t\t\tgetSessionId: () => {\n\t\t\t\t\tassertActive();\n\t\t\t\t\treturn raw.session!.getSessionId();\n\t\t\t\t},\n\t\t\t\tgetRevision: raw.session.getRevision\n\t\t\t\t\t? () => {\n\t\t\t\t\t\t\tassertActive();\n\t\t\t\t\t\t\treturn detachedFreeze(raw.session!.getRevision!());\n\t\t\t\t\t\t}\n\t\t\t\t\t: undefined,\n\t\t\t\tgetMessages: () => {\n\t\t\t\t\tassertActive();\n\t\t\t\t\treturn detachedFreeze(raw.session!.getMessages());\n\t\t\t\t},\n\t\t\t\tgetBranchEntries: () => {\n\t\t\t\t\tassertActive();\n\t\t\t\t\treturn detachedFreeze(raw.session!.getBranchEntries());\n\t\t\t\t},\n\t\t\t\tisIdle: () => {\n\t\t\t\t\tassertActive();\n\t\t\t\t\treturn raw.session!.isIdle();\n\t\t\t\t},\n\t\t\t\twaitForIdle: async () => {\n\t\t\t\t\tassertActive();\n\t\t\t\t\tawait raw.session!.waitForIdle();\n\t\t\t\t\tassertActive();\n\t\t\t\t},\n\t\t\t\tappendEntry: (customType: string, data?: unknown) => {\n\t\t\t\t\tassertActive();\n\t\t\t\t\treturn raw.session!.appendEntry(customType, detachedFreeze(data));\n\t\t\t\t},\n\t\t\t}) as AgentSessionFacadeV1)\n\t\t: undefined;\n\n\tconst context = raw.context\n\t\t? (Object.freeze({\n\t\t\t\tversion: 1 as const,\n\t\t\t\tget: <TValue = unknown>() => {\n\t\t\t\t\tassertActive();\n\t\t\t\t\treturn detachedFreeze(raw.context!.get<TValue>());\n\t\t\t\t},\n\t\t\t\tcommit: async <TValue = unknown>(request: AgentContextCommitRequestV1<TValue>) => {\n\t\t\t\t\tassertActive();\n\t\t\t\t\tif (request.signal?.aborted) throw abortError(request.signal.reason);\n\t\t\t\t\tconst result = await raw.context!.commit({\n\t\t\t\t\t\t...request,\n\t\t\t\t\t\tvalue: detachedFreeze(request.value),\n\t\t\t\t\t});\n\t\t\t\t\tassertActive();\n\t\t\t\t\treturn detachedFreeze(result) as AgentContextCommitResultV1<TValue>;\n\t\t\t\t},\n\t\t\t}) as AgentContextFacadeV1)\n\t\t: undefined;\n\n\t// One guarded StateAPI facade shared by the owner namespace and the\n\t// instance-private namespace: same revocation gating and detached snapshots.\n\tconst guardedStateFacade = (source: StateAPI): StateAPI =>\n\t\tObject.freeze({\n\t\t\tget: (key: string) => {\n\t\t\t\tassertActive();\n\t\t\t\treturn detachedFreeze(source.get(key));\n\t\t\t},\n\t\t\tset: (key: string, value: Parameters<StateAPI[\"set\"]>[1], options?: Parameters<StateAPI[\"set\"]>[2]) => {\n\t\t\t\tassertActive();\n\t\t\t\treturn source.set(key, detachedFreeze(value), options);\n\t\t\t},\n\t\t\tdelete: (key: string, options?: Parameters<StateAPI[\"delete\"]>[1]) => {\n\t\t\t\tassertActive();\n\t\t\t\treturn source.delete(key, options);\n\t\t\t},\n\t\t\tlist: (prefix?: string) => {\n\t\t\t\tassertActive();\n\t\t\t\treturn detachedFreeze(source.list(prefix));\n\t\t\t},\n\t\t\twatch: (prefix: string | undefined, handler: (change: StateChange) => void | Promise<void>) => {\n\t\t\t\tassertActive();\n\t\t\t\treturn track(\n\t\t\t\t\tsource.watch(prefix, (change: StateChange) => {\n\t\t\t\t\t\tif (!active || operation.signal.aborted) return;\n\t\t\t\t\t\tvoid handler(detachedFreeze(change));\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t},\n\t\t}) as StateAPI;\n\n\tconst state = raw.state ? guardedStateFacade(raw.state) : undefined;\n\tconst instanceState = raw.instanceState ? guardedStateFacade(raw.instanceState) : undefined;\n\n\tconst artifact = raw.artifact\n\t\t? (Object.freeze({\n\t\t\t\tput: async (\n\t\t\t\t\tinput: Parameters<OutputArtifactAPI[\"put\"]>[0],\n\t\t\t\t\toptions?: Parameters<OutputArtifactAPI[\"put\"]>[1],\n\t\t\t\t) => {\n\t\t\t\t\tassertActive();\n\t\t\t\t\tconst data = input.data instanceof Uint8Array ? new Uint8Array(input.data) : input.data;\n\t\t\t\t\tconst abort = combinedAbortSignal(operation.signal, options?.signal);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst ref = await raw.artifact!.put({ ...input, data }, { ...options, signal: abort.signal });\n\t\t\t\t\t\tassertActive();\n\t\t\t\t\t\treturn detachedFreeze(ref) as OutputArtifactRef;\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tabort.dispose();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tstat: async (ref: OutputArtifactRef) => {\n\t\t\t\t\tassertActive();\n\t\t\t\t\tconst result = await raw.artifact!.stat(detachedFreeze(ref));\n\t\t\t\t\tassertActive();\n\t\t\t\t\treturn detachedFreeze(result);\n\t\t\t\t},\n\t\t\t\tread: async (ref: OutputArtifactRef, options?: Parameters<OutputArtifactAPI[\"read\"]>[1]) => {\n\t\t\t\t\tassertActive();\n\t\t\t\t\tconst chunk = await raw.artifact!.read(detachedFreeze(ref), options);\n\t\t\t\t\tassertActive();\n\t\t\t\t\treturn detachedFreeze({\n\t\t\t\t\t\t...chunk,\n\t\t\t\t\t\tdata: new Uint8Array(chunk.data),\n\t\t\t\t\t}) as OutputArtifactChunk;\n\t\t\t\t},\n\t\t\t}) as OutputArtifactAPI)\n\t\t: undefined;\n\n\tconst operationFacade = raw.operation\n\t\t? Object.freeze({\n\t\t\t\tversion: 1 as const,\n\t\t\t\tid: raw.operation.id,\n\t\t\t\tsignal: raw.operation.signal,\n\t\t\t\tstatus: () => {\n\t\t\t\t\tassertActive();\n\t\t\t\t\treturn raw.operation!.status();\n\t\t\t\t},\n\t\t\t\tisActive: () => active && raw.operation!.isActive(),\n\t\t\t\treportProgress: (progress: OperationProgress) => {\n\t\t\t\t\tassertActive();\n\t\t\t\t\treturn raw.operation!.reportProgress(progress);\n\t\t\t\t},\n\t\t\t\tonCancel: (handler: (reason: unknown) => void | Promise<void>) => {\n\t\t\t\t\tassertActive();\n\t\t\t\t\treturn track(raw.operation!.onCancel(handler));\n\t\t\t\t},\n\t\t\t\tcancel: async (reason?: string) => {\n\t\t\t\t\tassertActive();\n\t\t\t\t\tawait raw.operation!.cancel(reason);\n\t\t\t\t},\n\t\t\t})\n\t\t: createOperationFacade(operation, instance.id, () => active);\n\n\tconst value = Object.freeze({\n\t\tversion: 1 as const,\n\t\t...(session ? { session } : {}),\n\t\t...(context ? { context } : {}),\n\t\t...(state ? { state } : {}),\n\t\t...(instanceState ? { instanceState } : {}),\n\t\t...(artifact ? { artifact } : {}),\n\t\t...(operationFacade ? { operation: operationFacade } : {}),\n\t\t...(raw.model\n\t\t\t? {\n\t\t\t\t\tmodel: Object.freeze({\n\t\t\t\t\t\tversion: 1 as const,\n\t\t\t\t\t\tget facts() {\n\t\t\t\t\t\t\tassertActive();\n\t\t\t\t\t\t\treturn raw.model!.facts;\n\t\t\t\t\t\t},\n\t\t\t\t\t\tinvocation: {\n\t\t\t\t\t\t\tinvoke: async (input: Parameters<AgentModelInvocationV1[\"invoke\"]>[0], signal: AbortSignal) => {\n\t\t\t\t\t\t\t\tassertActive();\n\t\t\t\t\t\t\t\tconst result = await raw.model!.invocation.invoke(input, signal);\n\t\t\t\t\t\t\t\tassertActive();\n\t\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t}) satisfies AgentModelFacadeV1,\n\t\t\t\t}\n\t\t\t: {}),\n\t\t...(raw.tool\n\t\t\t? {\n\t\t\t\t\ttool: Object.freeze({\n\t\t\t\t\t\tversion: 1 as const,\n\t\t\t\t\t\tlistTools: () => {\n\t\t\t\t\t\t\tassertActive();\n\t\t\t\t\t\t\treturn raw.tool!.listTools();\n\t\t\t\t\t\t},\n\t\t\t\t\t\tinvokeTool: (name: string, input: unknown, invokeOptions?: { readonly signal?: AbortSignal }) => {\n\t\t\t\t\t\t\tassertActive();\n\t\t\t\t\t\t\treturn raw.tool!.invokeTool(name, input, invokeOptions);\n\t\t\t\t\t\t},\n\t\t\t\t\t}) satisfies AgentToolFacadeV1,\n\t\t\t\t}\n\t\t\t: {}),\n\t});\n\treturn {\n\t\tvalue,\n\t\trevoke: () => {\n\t\t\tif (!active) return;\n\t\t\tactive = false;\n\t\t\tfor (const cleanup of [...cleanups]) void cleanup();\n\t\t},\n\t};\n}\n\nclass AgentInstanceRuntime<TInput, TResult> implements AgentInstance<TInput, TResult> {\n\treadonly id: string;\n\treadonly definition: AgentDefinition<TInput, TResult>;\n\n\tprivate statusValue: AgentInstanceStatus = \"created\";\n\tprivate revisionValue = 0;\n\tprivate activeLease?: ControllerLeaseRuntime;\n\tprivate activeOperation?: OperationRuntime<TResult>;\n\tprivate activeExecution?: Promise<void>;\n\tprivate completion: Promise<AgentInstanceResult<TResult>>;\n\tprivate resolveCompletion!: (result: AgentInstanceResult<TResult>) => void;\n\tprivate completionResolved = false;\n\tprivate readonly parentInstanceId: string | undefined;\n\tprivate readonly nextId: (kind: string) => string;\n\tprivate readonly defaultLeaseOwner: string;\n\tprivate readonly hostPrimitivesFactory?: AgentHostPrimitivesFactory;\n\tprivate readonly lifecycleDispatcher?: AgentCompositionLifecycleDispatcher;\n\tprivate readonly clearInstanceState?: (instanceId: string) => void;\n\n\tconstructor(\n\t\tdefinition: AgentDefinition<TInput, TResult>,\n\t\tid: string,\n\t\tparentInstanceId: string | undefined,\n\t\tnextId: (kind: string) => string,\n\t\tdefaultLeaseOwner: string,\n\t\thostPrimitivesFactory: AgentHostPrimitivesFactory | undefined,\n\t\tlifecycleDispatcher: AgentCompositionLifecycleDispatcher | undefined,\n\t\tclearInstanceState: ((instanceId: string) => void) | undefined,\n\t) {\n\t\tthis.id = id;\n\t\tthis.definition = definition;\n\t\tthis.parentInstanceId = parentInstanceId;\n\t\tthis.nextId = nextId;\n\t\tthis.defaultLeaseOwner = defaultLeaseOwner;\n\t\tthis.hostPrimitivesFactory = hostPrimitivesFactory;\n\t\tthis.lifecycleDispatcher = lifecycleDispatcher;\n\t\tthis.clearInstanceState = clearInstanceState;\n\t\tthis.completion = new Promise<AgentInstanceResult<TResult>>((resolve) => {\n\t\t\tthis.resolveCompletion = resolve;\n\t\t});\n\t}\n\n\tsnapshot(): AgentInstanceSnapshot {\n\t\treturn freezeSnapshot({\n\t\t\tid: this.id,\n\t\t\tdefinitionId: this.definition.id,\n\t\t\tdefinitionVersion: this.definition.version,\n\t\t\trole: this.definition.role,\n\t\t\t...(this.parentInstanceId ? { parentInstanceId: this.parentInstanceId } : {}),\n\t\t\tstatus: this.statusValue,\n\t\t\trevision: this.revisionValue,\n\t\t\t...(this.activeLease?.isActive() ? { leaseOwner: this.activeLease.owner } : {}),\n\t\t});\n\t}\n\n\tasync acquireControllerLease(\n\t\towner = this.definition.owner ?? this.defaultLeaseOwner,\n\t): Promise<AgentControllerLease> {\n\t\tthis.assertNotDisposed();\n\t\tif (this.activeLease?.isActive())\n\t\t\tthrow new Error(t(\"Agent instance already has an active controller lease: {id}\", { id: this.id }));\n\t\tconst lease = new ControllerLeaseRuntime(this, this.nextId(\"agent-lease\"), owner, this.revisionValue + 1);\n\t\tthis.activeLease = lease;\n\t\treturn lease;\n\t}\n\n\trun(input: TInput, options: { lease?: AgentControllerLease; signal?: AbortSignal } = {}): OperationHandle<TResult> {\n\t\tthis.assertNotDisposed();\n\t\tif (this.statusValue !== \"created\")\n\t\t\tthrow new Error(\n\t\t\t\tt(\"Agent instance cannot run from status {statusValue}: {id}\", {\n\t\t\t\t\tstatusValue: this.statusValue,\n\t\t\t\t\tid: this.id,\n\t\t\t\t}),\n\t\t\t);\n\t\tconst lease = this.activeLease;\n\t\tif (!lease?.isActive())\n\t\t\tthrow new Error(t(\"Agent instance requires an active controller lease: {id}\", { id: this.id }));\n\t\tif (options.lease !== lease || !this.isLeaseUsable(options.lease)) {\n\t\t\tthrow new Error(t(\"Agent controller lease is not valid for instance: {id}\", { id: this.id }));\n\t\t}\n\n\t\tthis.statusValue = \"running\";\n\t\tconst controller = new AbortController();\n\t\tconst externalSignal = options.signal;\n\t\tlet externalAbortListener: (() => void) | undefined;\n\t\tif (externalSignal) {\n\t\t\texternalAbortListener = () => {\n\t\t\t\tcontroller.abort(externalSignal.reason);\n\t\t\t\tvoid this.cancel(externalSignal.reason === undefined ? undefined : String(externalSignal.reason));\n\t\t\t};\n\t\t\tif (!externalSignal.aborted) externalSignal.addEventListener(\"abort\", externalAbortListener, { once: true });\n\t\t}\n\n\t\tlet operation!: OperationRuntime<TResult>;\n\t\toperation = new OperationRuntime<TResult>(\n\t\t\tthis.nextId(\"agent-operation\"),\n\t\t\tcontroller,\n\t\t\t() => this.cancel(controller.signal.reason),\n\t\t\t(progress, step) => this.reportLifecycle(\"step\", operation, undefined, progress, step),\n\t\t);\n\t\tthis.activeOperation = operation;\n\t\tif (externalSignal?.aborted) {\n\t\t\tcontroller.abort(externalSignal.reason);\n\t\t} else {\n\t\t\tthis.reportLifecycle(\"start\", operation);\n\t\t}\n\t\tthis.activeExecution = this.execute(input, lease, operation, externalSignal, externalAbortListener);\n\t\tif (externalSignal?.aborted) {\n\t\t\t// Trigger cancellation only after the execution is tracked, so the\n\t\t\t// pre-aborted path drains like every other cancellation path instead\n\t\t\t// of resolving completion ahead of the execution body.\n\t\t\tvoid this.cancel(externalSignal.reason === undefined ? undefined : String(externalSignal.reason));\n\t\t}\n\t\treturn operation;\n\t}\n\n\tasync wait(): Promise<AgentInstanceResult<TResult>> {\n\t\treturn this.completion;\n\t}\n\n\tasync cancel(reason?: string): Promise<void> {\n\t\tif (this.statusValue === \"disposed\" || terminalStatuses.has(this.statusValue)) return;\n\t\tthis.statusValue = \"cancelled\";\n\t\tthis.revisionValue += 1;\n\t\tconst operation = this.activeOperation;\n\t\tif (operation) {\n\t\t\tthis.reportLifecycle(\"cancel\", operation);\n\t\t\tthis.reportLifecycle(\"end\", operation, \"cancelled\");\n\t\t\toperation.cancelFromInstance(reason);\n\t\t}\n\t\t// The run body must eventually observe the abort signal: cancellation only\n\t\t// settles after the execution drained, so wait() and lease disposal never\n\t\t// race side effects still in flight. There is deliberately no timeout. A run\n\t\t// body that awaits this cancel(), dispose(), or its own lease release\n\t\t// self-deadlocks by contract.\n\t\tawait this.drainExecution();\n\t\tthis.resolveCompletionOnce({ status: \"cancelled\", revision: this.revisionValue, error: abortError(reason) });\n\t}\n\n\tasync dispose(): Promise<void> {\n\t\tif (this.statusValue === \"disposed\") return;\n\t\tif (this.statusValue === \"created\") {\n\t\t\tawait this.activeLease?.release();\n\t\t\tthis.statusValue = \"disposed\";\n\t\t\tthis.revisionValue += 1;\n\t\t\tthis.clearInstanceState?.(this.id);\n\t\t\tthis.resolveCompletionOnce({ status: \"disposed\", revision: this.revisionValue });\n\t\t\treturn;\n\t\t}\n\t\tif (!terminalStatuses.has(this.statusValue)) await this.cancel(\"Agent instance disposed\");\n\t\t// A concurrent cancel() may still be draining; release the lease only after\n\t\t// the execution has settled.\n\t\tawait this.drainExecution();\n\t\tawait this.activeLease?.release();\n\t\tthis.statusValue = \"disposed\";\n\t\tthis.revisionValue += 1;\n\t\t// The instance-private state namespace (and its watchers) dies with the\n\t\t// instance, after every drain the run body could still rely on.\n\t\tthis.clearInstanceState?.(this.id);\n\t\tthis.resolveCompletionOnce({ status: \"disposed\", revision: this.revisionValue });\n\t}\n\n\tasync deactivateLease(lease: ControllerLeaseRuntime): Promise<void> {\n\t\tif (this.activeLease !== lease) return;\n\t\tthis.activeLease = undefined;\n\t\tif (this.statusValue === \"running\") {\n\t\t\tawait this.cancel(\"Controller lease released\");\n\t\t\treturn;\n\t\t}\n\t\t// A cancel() from another path may still be draining the execution.\n\t\tawait this.drainExecution();\n\t}\n\n\tisLeaseUsable(lease: AgentControllerLease | undefined): lease is ControllerLeaseRuntime {\n\t\treturn (\n\t\t\tlease instanceof ControllerLeaseRuntime &&\n\t\t\tlease.instanceId === this.id &&\n\t\t\tlease.isActive() &&\n\t\t\tthis.activeLease === lease\n\t\t);\n\t}\n\n\tprivate async execute(\n\t\tinput: TInput,\n\t\tlease: ControllerLeaseRuntime,\n\t\toperation: OperationRuntime<TResult>,\n\t\texternalSignal: AbortSignal | undefined,\n\t\texternalAbortListener: (() => void) | undefined,\n\t): Promise<void> {\n\t\tconst instanceSnapshot = this.snapshot();\n\t\tlet hostScope: RevocableHost | undefined;\n\t\tconst revokeHost = () => hostScope?.revoke();\n\t\toperation.signal.addEventListener(\"abort\", revokeHost, { once: true });\n\t\ttry {\n\t\t\tif (operation.signal.aborted) throw abortError(operation.signal.reason);\n\t\t\tif (this.hostPrimitivesFactory) {\n\t\t\t\tconst raw = await this.hostPrimitivesFactory({\n\t\t\t\t\tinstance: instanceSnapshot,\n\t\t\t\t\toperationId: operation.id,\n\t\t\t\t\tsignal: operation.signal,\n\t\t\t\t\tleaseOwner: lease.owner,\n\t\t\t\t});\n\t\t\t\tif (raw !== undefined) {\n\t\t\t\t\tif (raw.version !== 1) throw new Error(t(\"Unsupported Agent host primitives version\"));\n\t\t\t\t\tif (raw.operation && (raw.operation.id !== operation.id || raw.operation.signal !== operation.signal))\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\tt(\"Agent host operation does not match active operation: {id}\", { id: operation.id }),\n\t\t\t\t\t\t);\n\t\t\t\t\thostScope = createRevocableHostPrimitives(\n\t\t\t\t\t\t{ ...raw, operation: raw.operation ?? createOperationFacade(operation, this.id, () => true) },\n\t\t\t\t\t\toperation as OperationRuntime<unknown>,\n\t\t\t\t\t\tinstanceSnapshot,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (operation.signal.aborted) throw abortError(operation.signal.reason);\n\t\t\tconst context: AgentExecutionContext = Object.freeze({\n\t\t\t\tinstance: instanceSnapshot,\n\t\t\t\tsignal: operation.signal,\n\t\t\t\tinputRevision: this.revisionValue,\n\t\t\t\t...(hostScope ? { host: hostScope.value } : {}),\n\t\t\t});\n\t\t\tconst output = await this.definition.run(input, context);\n\t\t\tif (operation.signal.aborted || !this.isLeaseUsable(lease) || this.statusValue !== \"running\") return;\n\t\t\tthis.statusValue = \"succeeded\";\n\t\t\tthis.revisionValue += 1;\n\t\t\toperation.resolve(output);\n\t\t\tthis.reportLifecycle(\"end\", operation, \"succeeded\");\n\t\t\tthis.resolveCompletionOnce({ status: \"succeeded\", revision: this.revisionValue, output });\n\t\t} catch (error) {\n\t\t\tif (operation.signal.aborted || this.statusValue === \"cancelled\" || this.statusValue === \"disposed\") {\n\t\t\t\t// Instance-level cancellation marks the handle cancelled before this\n\t\t\t\t// catch runs; the pre-aborted run() path gets here first, so settle\n\t\t\t\t// the handle as cancelled instead of failed.\n\t\t\t\toperation.cancelFromInstance(operation.signal.reason);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.statusValue = \"failed\";\n\t\t\tthis.revisionValue += 1;\n\t\t\toperation.reject(error);\n\t\t\tthis.reportLifecycle(\"end\", operation, \"failed\");\n\t\t\tthis.resolveCompletionOnce({ status: \"failed\", revision: this.revisionValue, error });\n\t\t} finally {\n\t\t\thostScope?.revoke();\n\t\t\toperation.signal.removeEventListener(\"abort\", revokeHost);\n\t\t\tif (externalSignal && externalAbortListener)\n\t\t\t\texternalSignal.removeEventListener(\"abort\", externalAbortListener);\n\t\t\tif (this.activeOperation === operation) this.activeOperation = undefined;\n\t\t\t// run() requires status \"created\", so at most one execution ever exists\n\t\t\t// per instance and clearing the field unconditionally is safe.\n\t\t\tthis.activeExecution = undefined;\n\t\t}\n\t}\n\n\tprivate async drainExecution(): Promise<void> {\n\t\t// Capture the reference before awaiting: execute()'s finally clears the\n\t\t// field while drainers still need the promise.\n\t\tconst execution = this.activeExecution;\n\t\tif (!execution) return;\n\t\tawait execution;\n\t}\n\n\tprivate assertNotDisposed(): void {\n\t\tif (this.statusValue === \"disposed\") throw new Error(t(\"Agent instance is disposed: {id}\", { id: this.id }));\n\t}\n\n\tprivate resolveCompletionOnce(result: AgentInstanceResult<TResult>): void {\n\t\tif (this.completionResolved) return;\n\t\tthis.completionResolved = true;\n\t\tthis.resolveCompletion(result);\n\t}\n\n\tprivate reportLifecycle(\n\t\tevent: AgentCompositionLifecycleEventName,\n\t\toperation: OperationRuntime<TResult>,\n\t\tstatus?: AgentCompositionLifecycleTerminalStatus,\n\t\tprogress?: OperationProgress,\n\t\tstep?: number,\n\t): void {\n\t\tif (!this.lifecycleDispatcher) return;\n\t\ttry {\n\t\t\tthis.lifecycleDispatcher({\n\t\t\t\tevent,\n\t\t\t\toperationId: operation.id,\n\t\t\t\toperationKind: `agent:${this.definition.id}@${this.definition.version}`,\n\t\t\t\t...(this.definition.owner === undefined ? {} : { owner: this.definition.owner }),\n\t\t\t\t...(status === undefined ? {} : { status }),\n\t\t\t\t...(progress === undefined ? {} : { progress }),\n\t\t\t\t...(step === undefined ? {} : { step }),\n\t\t\t});\n\t\t} catch {\n\t\t\t// Lifecycle delivery is observational and must not affect the operation.\n\t\t}\n\t}\n}\n\ninterface LeaseOwner {\n\tid: string;\n\tdeactivateLease(lease: ControllerLeaseRuntime): Promise<void>;\n}\n\nclass ControllerLeaseRuntime implements AgentControllerLease {\n\tprivate active = true;\n\tprivate readonly instance: LeaseOwner;\n\treadonly id: string;\n\treadonly owner: string;\n\treadonly revision: number;\n\n\tconstructor(instance: LeaseOwner, id: string, owner: string, revision: number) {\n\t\tthis.instance = instance;\n\t\tthis.id = id;\n\t\tthis.owner = owner;\n\t\tthis.revision = revision;\n\t}\n\n\tget instanceId(): string {\n\t\treturn this.instance.id;\n\t}\n\n\tisActive(): boolean {\n\t\treturn this.active;\n\t}\n\n\tasync release(): Promise<void> {\n\t\tif (!this.active) return;\n\t\tthis.active = false;\n\t\tawait this.instance.deactivateLease(this);\n\t}\n}\n\nclass OperationRuntime<TResult> implements OperationHandle<TResult> {\n\tprivate statusValue: OperationStatus = \"queued\";\n\tprivate resolveResult!: (result: TResult) => void;\n\tprivate rejectResult!: (error: unknown) => void;\n\treadonly result: Promise<TResult>;\n\treadonly id: string;\n\tprivate readonly controller: AbortController;\n\tprivate readonly cancelCallback: () => Promise<void>;\n\tprivate readonly reportProgressCallback: (progress: OperationProgress, step: number) => void;\n\tprivate progressSequence = 0;\n\n\tconstructor(\n\t\tid: string,\n\t\tcontroller: AbortController,\n\t\tcancelCallback: () => Promise<void>,\n\t\treportProgress: (progress: OperationProgress, step: number) => void,\n\t) {\n\t\tthis.id = id;\n\t\tthis.controller = controller;\n\t\tthis.cancelCallback = cancelCallback;\n\t\tthis.reportProgressCallback = reportProgress;\n\t\tthis.signal = controller.signal;\n\t\tthis.result = new Promise<TResult>((resolve, reject) => {\n\t\t\tthis.resolveResult = resolve;\n\t\t\tthis.rejectResult = reject;\n\t\t});\n\t\tthis.statusValue = \"running\";\n\t}\n\n\treadonly signal: AbortSignal;\n\n\tstatus(): OperationStatus {\n\t\treturn this.statusValue;\n\t}\n\n\treportProgress(progress: OperationProgress): boolean {\n\t\tif (this.statusValue !== \"running\" || this.signal.aborted) return false;\n\t\tthis.reportProgressCallback(progress, ++this.progressSequence);\n\t\treturn true;\n\t}\n\n\tasync cancel(reason?: string): Promise<void> {\n\t\tif (this.statusValue === \"succeeded\" || this.statusValue === \"failed\" || this.statusValue === \"cancelled\") return;\n\t\tthis.controller.abort(reason);\n\t\t// The handle must settle cancellation without waiting for an uncooperative\n\t\t// run body. AgentInstanceRuntime.cancel() still drains the body when the\n\t\t// caller explicitly cancels/releases the instance, but OperationHandle is\n\t\t// the non-blocking public fence used by callers that cannot coordinate the\n\t\t// plugin's private awaits. The callback synchronously marks the operation\n\t\t// cancelled before its first await; any later drain is best-effort here.\n\t\ttry {\n\t\t\tvoid this.cancelCallback().catch(() => undefined);\n\t\t} catch {\n\t\t\t// A cancellation request is already reflected by this operation's\n\t\t\t// aborted signal and terminal status; callback failures must not turn\n\t\t\t// cancel() into an unbounded or rejected wait.\n\t\t}\n\t}\n\n\tcancelFromInstance(reason?: string): void {\n\t\tif (this.statusValue === \"succeeded\" || this.statusValue === \"failed\" || this.statusValue === \"cancelled\") return;\n\t\tthis.statusValue = \"cancelled\";\n\t\tthis.controller.abort(reason);\n\t\tthis.rejectResult(abortError(reason));\n\t}\n\n\tresolve(value: TResult): void {\n\t\tif (this.statusValue === \"cancelled\" || this.statusValue === \"failed\") return;\n\t\tthis.statusValue = \"succeeded\";\n\t\tthis.resolveResult(value);\n\t}\n\n\treject(error: unknown): void {\n\t\tif (this.statusValue === \"cancelled\") return;\n\t\tthis.statusValue = \"failed\";\n\t\tthis.rejectResult(error);\n\t}\n}\n\nexport class AgentCompositionRuntime\n\timplements\n\t\tAgentCompositionAPI,\n\t\tAgentCompositionHostBinding,\n\t\tAgentCompositionDefinitionBinding,\n\t\tAgentCompositionScopedHostBinding,\n\t\tAgentCompositionInstanceStateBinding\n{\n\tprivate readonly definitions = new Map<string, AgentDefinition<unknown, unknown>>();\n\tprivate readonly instances = new Map<string, AgentInstanceRuntime<unknown, unknown>>();\n\tprivate readonly instanceStateClearers = new Set<(instanceId: string) => void>();\n\tprivate sequence = 0;\n\tprivate readonly nextId: (kind: string) => string;\n\tprivate readonly defaultLeaseOwner?: string;\n\tprivate hostPrimitivesFactory?: AgentHostPrimitivesFactory;\n\tprivate lifecycleDispatcher?: AgentCompositionLifecycleDispatcher;\n\n\tconstructor(options: AgentCompositionRuntimeOptions = {}) {\n\t\tthis.defaultLeaseOwner = options.defaultLeaseOwner;\n\t\tthis.hostPrimitivesFactory = options.hostPrimitivesFactory;\n\t\tthis.nextId = options.idFactory ?? ((kind: string) => `${kind}-${++this.sequence}`);\n\t}\n\n\tsetHostPrimitivesFactory(factory?: AgentHostPrimitivesFactory): void {\n\t\tthis.hostPrimitivesFactory = factory;\n\t}\n\n\tsetLifecycleDispatcher(dispatcher?: AgentCompositionLifecycleDispatcher): void {\n\t\tthis.lifecycleDispatcher = dispatcher;\n\t}\n\n\taddInstanceStateClearer(clearer: (instanceId: string) => void): () => void {\n\t\tthis.instanceStateClearers.add(clearer);\n\t\treturn () => {\n\t\t\tthis.instanceStateClearers.delete(clearer);\n\t\t};\n\t}\n\n\tdisposeDefinitions(definitions: readonly AgentDefinition[]): void {\n\t\tconst owned = new Set(definitions);\n\t\tfor (const [key, definition] of this.definitions) {\n\t\t\tif (owned.has(definition)) this.definitions.delete(key);\n\t\t}\n\t\tfor (const [id, instance] of this.instances) {\n\t\t\tif (!owned.has(instance.definition)) continue;\n\t\t\tthis.instances.delete(id);\n\t\t\tvoid instance.dispose();\n\t\t}\n\t}\n\n\tdefine<TInput = unknown, TResult = unknown>(\n\t\tdefinition: AgentDefinition<TInput, TResult>,\n\t): AgentDefinition<TInput, TResult> {\n\t\tvalidateAgentDefinition(definition);\n\t\tif (this.definitions.has(this.definitionKey(definition.id, definition.version))) {\n\t\t\tthrow new Error(\n\t\t\t\tt(\"Agent definition already registered: {id}@{version}\", {\n\t\t\t\t\tid: definition.id,\n\t\t\t\t\tversion: definition.version,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\tconst frozen = Object.freeze({ ...definition });\n\t\tthis.definitions.set(\n\t\t\tthis.definitionKey(definition.id, definition.version),\n\t\t\tfrozen as AgentDefinition<unknown, unknown>,\n\t\t);\n\t\treturn frozen;\n\t}\n\n\tget<TInput = unknown, TResult = unknown>(id: string, version: number): AgentDefinition<TInput, TResult> {\n\t\tconst definition = this.definitions.get(this.definitionKey(id, version));\n\t\tif (!definition) throw new Error(t(\"Unknown Agent definition: {id}@{version}\", { id, version }));\n\t\treturn definition as AgentDefinition<TInput, TResult>;\n\t}\n\n\tcreate<TInput = unknown, TResult = unknown>(\n\t\tdefinition: AgentDefinition<TInput, TResult> | DefinitionRef,\n\t\toptions: { id?: string; parentInstanceId?: string } = {},\n\t): AgentInstance<TInput, TResult> {\n\t\treturn this.createInternal(definition, options, this.hostPrimitivesFactory);\n\t}\n\n\tcreateWithHostPrimitives<TInput = unknown, TResult = unknown>(\n\t\tdefinition: AgentDefinition<TInput, TResult> | DefinitionRef,\n\t\toptions: { id?: string; parentInstanceId?: string } | undefined,\n\t\thostPrimitivesFactory: AgentHostPrimitivesFactory,\n\t\tlifecycleDispatcher?: AgentCompositionLifecycleDispatcher,\n\t): AgentInstance<TInput, TResult> {\n\t\t// A CapabilityRuntime supplies a complete, session-bound factory for this\n\t\t// plugin invocation. Do not merge the runtime-wide factory here: one\n\t\t// composition runtime may be shared by more than one AgentSession.\n\t\treturn this.createInternal(\n\t\t\tdefinition,\n\t\t\toptions ?? {},\n\t\t\thostPrimitivesFactory,\n\t\t\tlifecycleDispatcher ?? this.lifecycleDispatcher,\n\t\t);\n\t}\n\n\tprivate createInternal<TInput = unknown, TResult = unknown>(\n\t\tdefinition: AgentDefinition<TInput, TResult> | DefinitionRef,\n\t\toptions: { id?: string; parentInstanceId?: string },\n\t\thostPrimitivesFactory: AgentHostPrimitivesFactory | undefined,\n\t\tlifecycleDispatcher: AgentCompositionLifecycleDispatcher | undefined = this.lifecycleDispatcher,\n\t): AgentInstance<TInput, TResult> {\n\t\tif (!definition || typeof definition !== \"object\")\n\t\t\tthrow new Error(t(\"Agent definition or reference is required\"));\n\t\tconst resolved =\n\t\t\t\"run\" in definition\n\t\t\t\t? validateAgentDefinition(definition as AgentDefinition<TInput, TResult>)\n\t\t\t\t: this.get<TInput, TResult>(definition.id, definition.version);\n\t\tif (options.parentInstanceId !== undefined && !this.instances.has(options.parentInstanceId)) {\n\t\t\tthrow new Error(\n\t\t\t\tt(\"Unknown parent Agent instance: {parentInstanceId}\", { parentInstanceId: options.parentInstanceId }),\n\t\t\t);\n\t\t}\n\t\tif (this.instances.has(options.id ?? \"\"))\n\t\t\tthrow new Error(t(\"Agent instance id already exists: {id}\", { id: options.id ?? \"\" }));\n\t\tconst id = options.id ?? this.nextId(\"agent-instance\");\n\t\tif (this.instances.has(id)) throw new Error(t(\"Agent instance id already exists: {id}\", { id }));\n\t\tconst instance = new AgentInstanceRuntime(\n\t\t\tresolved,\n\t\t\tid,\n\t\t\toptions.parentInstanceId,\n\t\t\tthis.nextId,\n\t\t\tthis.defaultLeaseOwner ?? resolved.owner ?? \"agent-composition\",\n\t\t\thostPrimitivesFactory,\n\t\t\tlifecycleDispatcher,\n\t\t\t(instanceId: string) => {\n\t\t\t\tfor (const clearer of this.instanceStateClearers) clearer(instanceId);\n\t\t\t},\n\t\t);\n\t\tthis.instances.set(id, instance as AgentInstanceRuntime<unknown, unknown>);\n\t\treturn instance;\n\t}\n\n\tlistInstances(): readonly AgentInstanceSnapshot[] {\n\t\treturn Object.freeze([...this.instances.values()].map((instance) => instance.snapshot()));\n\t}\n\n\tprivate definitionKey(id: string, version: number): string {\n\t\treturn `${id}@${version}`;\n\t}\n}\n\nexport function createAgentCompositionRuntime(options: AgentCompositionRuntimeOptions = {}): AgentCompositionRuntime {\n\treturn new AgentCompositionRuntime(options);\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap-agent-loop.d.ts","sourceRoot":"","sources":["../../../src/core/extensions/bootstrap-agent-loop.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,KAAK,EACX,YAAY,EACZ,mBAAmB,EAEnB,SAAS,EACT,sBAAsB,EACtB,0BAA0B,EAC1B,aAAa,EACb,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAY,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,KAAK,EAAE,GAAG,EAAgB,KAAK,EAAsB,MAAM,wBAAwB,CAAC;AAE3F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,KAAK,sBAAsB,EAA4B,MAAM,wBAAwB,CAAC;AAC/F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAgBjE,OAAO,EAON,KAAK,iBAAiB,EACtB,MAAM,iBAAiB,CAAC;AAEzB,eAAO,MAAM,8BAA8B,qCAAqC,CAAC;AACjF,eAAO,MAAM,8BAA8B,YAAY,CAAC;AAExD,iGAAuC;AACvC,eAAO,MAAM,8BAA8B,IAAI,CAAC;AAChD,4HAA8C;AAC9C,eAAO,MAAM,iCAAiC,IAAI,CAAC;AACnD,gHAA0C;AAC1C,eAAO,MAAM,iCAAiC,IAAI,CAAC;AACnD,mGAA2D;AAC3D,eAAO,MAAM,mCAAmC,oBAAoB,CAAC;AACrE,6HAA+D;AAC/D,eAAO,MAAM,mCAAmC,oBAAoB,CAAC;AACrE,mHAA2C;AAC3C,eAAO,MAAM,wCAAwC,MAAM,CAAC;AAE5D,kHAAsE;AACtE,MAAM,WAAW,iCAAiC;IACjD,4EAAwD;IACxD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oGAAkE;IAClE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iJAAiF;IACjF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,wBAAwB,KAAK,IAAI,CAAC;IAClD;;;;OAIG;IACH,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,wBAAwB,KAAK,IAAI,CAAC;IAClD;;;;OAIG;IACH,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAC;IAC9C;;;;;OAKG;IACH,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAC;CAChD;AAED,+FAAqE;AACrE,MAAM,WAAW,wBAAwB;IACxC,8CAAoB;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,8GAA0E;IAC1E,WAAW,EAAE,MAAM,CAAC;IACpB,2CAAmB;IACnB,aAAa,EAAE,MAAM,CAAC;CACtB;AAED,+FAAqE;AACrE,MAAM,WAAW,wBAAwB;IACxC,8CAAoB;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,8GAA0E;IAC1E,WAAW,EAAE,MAAM,CAAC;IACpB,2CAAmB;IACnB,aAAa,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,GAAE,OAAO,CAAC,MAAM,CAAiB,GAAG,MAAM,CAiClG;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,iBAAiB,GAAG,SAAS,GAAG,MAAM,CAQ5E;AAED,kFAAoC;AACpC,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAErG;AASD,0IAA4E;AAC5E,wBAAgB,gCAAgC,CAC/C,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,GACnB,aAAa,CASf;AAED;;;;;GAKG;AACH,wBAAgB,gCAAgC,CAC/C,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,GACnB,aAAa,CASf;AAED;;;;;GAKG;AACH,wBAAgB,kCAAkC,CAAC,aAAa,EAAE,MAAM,GAAG,aAAa,CAQvF;AAED,qHAAuE;AACvE,MAAM,WAAW,qBAAqB;IACrC;;OAEG;IACH,mBAAmB,EAAE,CAAC,OAAO,EAAE,0BAA0B,KAAK,OAAO,CAAC;IACtE;;;OAGG;IACH,gBAAgB,EAAE,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,EAAE,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,SAAS,OAAO,EAAE,GAAG,SAAS,CAAC,CAAC;CAClH;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,gCAAgC,CAC/C,OAAO,GAAE,iCAAsC,GAC7C,qBAAqB,CAgFvB;AAED;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IACjC,mDAAmD;IACnD,YAAY,IAAI,MAAM,CAAC;IACvB,iEAAiE;IACjE,WAAW,IAAI,iBAAiB,CAAC;IACjC,wDAAwD;IACxD,oBAAoB,IAAI,MAAM,GAAG,SAAS,CAAC;IAC3C,iFAAiF;IACjF,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACzE,+DAA+D;IAC/D,kBAAkB,IAAI,OAAO,CAAC;IAC9B,6EAA6E;IAC7E,kCAAkC,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACvG,uFAAuF;IACvF,cAAc,IAAI;QACjB,YAAY,EAAE,MAAM,CAAC;QACrB,KAAK,EAAE,SAAS,EAAE,CAAC;QACnB,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;QAClB,aAAa,EAAE,aAAa,CAAC;KAC7B,CAAC;IACF,+EAA+E;IAC/E,yBAAyB,IACtB,CAAC,CACD,OAAO,EAAE,sBAAsB,EAC/B,MAAM,CAAC,EAAE,WAAW,KACf,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC,GAAG,mBAAmB,GAAG,SAAS,CAAC,GAChF,SAAS,CAAC;IACb,yDAAyD;IACzD,sBAAsB,IAAI,MAAM,GAAG,SAAS,CAAC;CAC7C;AAsTD;;;;GAIG;AACH,wBAAgB,yBAAyB,CACxC,OAAO,EAAE,iBAAiB,EAC1B,MAAM,EAAE,iBAAiB,GACvB,sBAAsB,CAkExB","sourcesContent":["/**\n * Default agent-loop bootstrap executor (W3).\n *\n/**\n * Registers the default main-loop capabilities through the public extension\n * face so the default loop stays a replaceable first-party plugin:\n * - the five default loop-hook links (capability lifecycle dispatch, image\n * normalization, context strategy, compaction + next-turn refresh, and the\n * repeated-tool-call guard: shouldStopAfterTurn decision + transformContext\n * warn-reminder injection), and\n * - the default post-run continuation strategy (the host's own candidate\n * decision).\n *\n * The default links need session-bound host state (session id, revision,\n * correlation id, error observation, settings). That state is injected as\n * {@link AgentLoopWiringV1} — host wiring, not a plugin capability. Third-party\n * plugins register additional links through `api.registerLoopHook`; they run\n * after the default links in registration order.\n */\n\nimport { createHash } from \"node:crypto\";\nimport type {\n\tAgentContext,\n\tAgentLoopTurnUpdate,\n\tAgentMessage,\n\tAgentTool,\n\tPrepareNextTurnContext,\n\tShouldStopAfterTurnContext,\n\tThinkingLevel,\n} from \"@agent-forge/agent-core\";\nimport type { ToolCall, ToolResultMessage } from \"@agent-forge/ai\";\nimport type { Api, ImageContent, Model, TextContent, Usage } from \"@agent-forge/ai/compat\";\nimport { normalizeToolResultImages } from \"../../utils/tool-result-images.ts\";\nimport type { CustomMessage } from \"../messages.ts\";\nimport { type CapabilityPluginHandle, loadCapabilityPluginSync } from \"./capability-plugin.ts\";\nimport type { CapabilityRuntime } from \"./capability-runtime.ts\";\nimport { applyCapabilityContextStrategy } from \"./context-strategy-binding.ts\";\nimport {\n\tTOOL_CALL_EVENT_ID,\n\tTOOL_CALL_EVENT_VERSION,\n\tTOOL_EXECUTE_EVENT_ID,\n\tTOOL_EXECUTE_EVENT_VERSION,\n\tTOOL_RESULT_RAW_EVENT_ID,\n\tTOOL_RESULT_RAW_EVENT_VERSION,\n\tTOOL_RESULT_TRANSFORM_EVENT_ID,\n\tTOOL_RESULT_TRANSFORM_EVENT_VERSION,\n\ttype ToolCallEventDataV1,\n\ttype ToolExecuteEventDataV1,\n\ttype ToolResultRawEventDataV1,\n\ttype ToolResultTransformEventDataV1,\n} from \"./lifecycle-catalog.ts\";\nimport {\n\ttype AgentLoopAfterToolCallHookV1,\n\ttype AgentLoopBeforeToolCallHookV1,\n\ttype AgentLoopPrepareNextTurnHookV1,\n\ttype AgentLoopTransformContextHookV1,\n\tdetachedSessionSnapshot,\n\tEXPERIMENTAL_PUBLIC_API_VERSION,\n\ttype SessionRevisionV1,\n} from \"./public-api.ts\";\n\nexport const BOOTSTRAP_AGENT_LOOP_PLUGIN_ID = \"agent-forge.bootstrap-agent-loop\";\nexport const DEFAULT_RUN_LOOP_STRATEGY_NAME = \"default\";\n\n/** 滑动窗口大小:护栏只回看最近 N 个工具调用签名(跨回合累计)。 */\nexport const REPEATED_TOOL_CALL_WINDOW_SIZE = 6;\n/** 提醒阈值:窗口尾部连续相同签名达到该次数时提醒模型(不停机,两级响应第一级)。 */\nexport const REPEATED_TOOL_CALL_WARN_THRESHOLD = 3;\n/** 停机阈值:提醒后仍连续相同达到该次数才请求停机(两级响应第二级兜底)。 */\nexport const REPEATED_TOOL_CALL_STOP_THRESHOLD = 5;\n/** 停机提示消息的 customType(用户可见面,随 agent_end 的 messages 带出)。 */\nexport const REPEATED_TOOL_CALL_STOP_CUSTOM_TYPE = \"loop_guard_stop\";\n/** 提醒消息的 customType(用户可见面经 sendMessage 持久化+渲染;模型面注入复用同一标记)。 */\nexport const REPEATED_TOOL_CALL_WARN_CUSTOM_TYPE = \"loop_guard_warn\";\n/** 提示消息中参数串的最大长度,超出截断(只影响提示文本,不影响检测签名)。 */\nexport const REPEATED_TOOL_CALL_NOTICE_MAX_ARGS_CHARS = 200;\n\n/** {@link createRepeatedToolCallStopPolicy} 的窗口与两级阈值参数(缺省用上方命名常量)。 */\nexport interface RepeatedToolCallStopPolicyOptions {\n\t/** 滑动窗口大小,缺省 {@link REPEATED_TOOL_CALL_WINDOW_SIZE}。 */\n\twindowSize?: number;\n\t/** 提醒阈值(第一级,不停机),缺省 {@link REPEATED_TOOL_CALL_WARN_THRESHOLD}。 */\n\twarnThreshold?: number;\n\t/** 停机阈值(第二级兜底),缺省 {@link REPEATED_TOOL_CALL_STOP_THRESHOLD}。显式设为不大于提醒阈值时停机优先。 */\n\tstopThreshold?: number;\n\t/**\n\t * 提醒时的日志面回调(与 {@link onStop} 同纪律:info 只携带脱敏后的事实——\n\t * 工具名、截断参数摘要、提醒阈值,不含完整工具参数)。只在第一级实际提醒的\n\t * 回合调用一次;缺省不接 = 行为不变。\n\t */\n\tonWarn?: (info: RepeatedToolCallWarnInfo) => void;\n\t/**\n\t * 停机时的日志面回调(D-072 治理纪律 6(a):用户可见 + 日志可见双通道)。\n\t * 只在策略实际请求停机的回合调用一次;缺省不接 = 行为不变。info 只携带\n\t * 脱敏后的事实(工具名、截断参数摘要、阈值),不含完整工具参数。\n\t */\n\tonStop?: (info: RepeatedToolCallStopInfo) => void;\n\t/**\n\t * 提醒通知投递缝:策略把提醒消息交给宿主选定的公共面。默认安装把它接到\n\t * `SessionAPI.sendMessage`(持久化 + message_start 实时渲染);缺席时提醒\n\t * 仍经 transformContext 注入模型请求(模型面不依赖该缝)。\n\t */\n\tdeliverWarn?: (notice: CustomMessage) => void;\n\t/**\n\t * 停机通知投递缝:策略把停机提示消息交给宿主选定的公共面。默认安装把它接到\n\t * `SessionAPI.sendMessage`(运行中排队、run 收尾 flush 落为 custom_message\n\t * 条目——持久化 + message_start 实时渲染);缺席时停机事实仅随 agent_end 的\n\t * newMessages 带出(行为不变)。\n\t */\n\tdeliverNotice?: (notice: CustomMessage) => void;\n}\n\n/** 提醒事实(脱敏):{@link RepeatedToolCallStopPolicyOptions.onWarn} 的载荷。 */\nexport interface RepeatedToolCallWarnInfo {\n\t/** 触发提醒的最后一个工具名。 */\n\ttoolName: string;\n\t/** 截断后的参数稳定序列化摘要(复用 {@link REPEATED_TOOL_CALL_NOTICE_MAX_ARGS_CHARS})。 */\n\targsSummary: string;\n\t/** 达到的连续重复提醒阈值。 */\n\twarnThreshold: number;\n}\n\n/** 停机事实(脱敏):{@link RepeatedToolCallStopPolicyOptions.onStop} 的载荷。 */\nexport interface RepeatedToolCallStopInfo {\n\t/** 触发停机的最后一个工具名。 */\n\ttoolName: string;\n\t/** 截断后的参数稳定序列化摘要(复用 {@link REPEATED_TOOL_CALL_NOTICE_MAX_ARGS_CHARS})。 */\n\targsSummary: string;\n\t/** 达到的连续重复停机阈值。 */\n\tstopThreshold: number;\n}\n\n/**\n * 参数稳定字符串化:对象键递归排序后逐层拼接(数组保持顺序),循环引用输出\n * 固定占位。只用于签名比较与提示文本,不是通用 JSON 序列化器。\n */\nexport function stableSerializeValue(value: unknown, seen: WeakSet<object> = new WeakSet()): string {\n\tif (value === null) return \"null\";\n\tswitch (typeof value) {\n\t\tcase \"string\":\n\t\t\treturn JSON.stringify(value);\n\t\tcase \"number\":\n\t\t\treturn String(value);\n\t\tcase \"boolean\":\n\t\t\treturn String(value);\n\t\tcase \"undefined\":\n\t\t\treturn \"undefined\";\n\t\tcase \"bigint\":\n\t\t\treturn `bigint:${String(value)}`;\n\t\tcase \"function\":\n\t\t\treturn \"function\";\n\t\tcase \"symbol\":\n\t\t\treturn \"symbol\";\n\t\tcase \"object\":\n\t\t\tbreak;\n\t\tdefault:\n\t\t\treturn \"unknown\";\n\t}\n\tif (seen.has(value)) return '\"[cycle]\"';\n\tseen.add(value);\n\tconst serialized = Array.isArray(value)\n\t\t? `[${value.map((item) => stableSerializeValue(item, seen)).join(\",\")}]`\n\t\t: (() => {\n\t\t\t\tconst record = value as Record<string, unknown>;\n\t\t\t\tconst keys = Object.keys(record).sort();\n\t\t\t\treturn `{${keys.map((key) => `${JSON.stringify(key)}:${stableSerializeValue(record[key], seen)}`).join(\",\")}}`;\n\t\t\t})();\n\tseen.delete(value);\n\treturn serialized;\n}\n\n/**\n * 工具结果哈希(签名第三要素):拼接结果的 text 内容后做全量 SHA-256(十六进制),\n * isError 一并纳入(同参同果且同错误状态才计重复)。任何字节差异都产生不同哈希,\n * 因此长结果(前缀稳定、尾部变化)的合法轮询不会被误判成\"同果\"——签名不受任何\n * 截断影响。无文本结果(纯图像等)与结果缺席都返回空串占位:签名退化为两要素\n * (工具名 + 参数),这是已知局限——无文本的同参结果彼此不可区分。\n * 调用与结果按 toolCallId 对应,正常流程中每个调用都有结果;无结果返回空串。\n */\nexport function toolResultHash(result: ToolResultMessage | undefined): string {\n\tif (!result) return \"\";\n\tconst text = result.content\n\t\t.filter((block): block is TextContent => block.type === \"text\")\n\t\t.map((block) => block.text)\n\t\t.join(\"\\n\");\n\tif (text === \"\") return \"\";\n\treturn `${result.isError ? \"error\" : \"ok\"}:${createHash(\"sha256\").update(text).digest(\"hex\")}`;\n}\n\n/** 工具调用签名:工具名 + 参数稳定字符串化 + 结果哈希。 */\nexport function repeatedToolCallSignature(toolName: string, args: unknown, resultHash: string): string {\n\treturn `${JSON.stringify(toolName)}:${stableSerializeValue(args)}:${resultHash}`;\n}\n\n/** 参数摘要截断:超出 {@link REPEATED_TOOL_CALL_NOTICE_MAX_ARGS_CHARS} 打截断标记(用户可见消息与日志通道共用)。 */\nfunction truncateNoticeArgs(argsText: string): string {\n\treturn argsText.length > REPEATED_TOOL_CALL_NOTICE_MAX_ARGS_CHARS\n\t\t? `${argsText.slice(0, REPEATED_TOOL_CALL_NOTICE_MAX_ARGS_CHARS)}...(truncated)`\n\t\t: argsText;\n}\n\n/** 停机提示消息:随停机回合的 newMessages 带出(agent_end 可见),并经 deliverNotice 投递到宿主公共面。 */\nexport function createRepeatedToolCallStopNotice(\n\ttoolName: string,\n\targsText: string,\n\tstopThreshold: number,\n): CustomMessage {\n\tconst truncated = truncateNoticeArgs(argsText);\n\treturn {\n\t\trole: \"custom\",\n\t\tcustomType: REPEATED_TOOL_CALL_STOP_CUSTOM_TYPE,\n\t\tcontent: `Loop guard: stopped after the same tool call (${toolName}) was repeated ${stopThreshold} times in a row. Args: ${truncated}`,\n\t\tdisplay: true,\n\t\ttimestamp: Date.now(),\n\t};\n}\n\n/**\n * 提醒通知消息(用户可见面,loop_guard_warn):经 deliverWarn 投递(默认安装接\n * `SessionAPI.sendMessage`,持久化 + 实时渲染),与停机通知(loop_guard_stop)\n * 的 customType 区分。提醒不进入 newMessages——模型面提醒由 transformContext\n * 注入承担,用户面提醒由本消息的持久化+渲染承担。\n */\nexport function createRepeatedToolCallWarnNotice(\n\ttoolName: string,\n\targsText: string,\n\twarnThreshold: number,\n): CustomMessage {\n\tconst truncated = truncateNoticeArgs(argsText);\n\treturn {\n\t\trole: \"custom\",\n\t\tcustomType: REPEATED_TOOL_CALL_WARN_CUSTOM_TYPE,\n\t\tcontent: `Loop guard: the same tool call (${toolName}) was repeated ${warnThreshold} times in a row with the same result. Args: ${truncated}`,\n\t\tdisplay: true,\n\t\ttimestamp: Date.now(),\n\t};\n}\n\n/**\n * 模型面提醒消息(transformContext 注入用):display:false 的 custom 消息,\n * 经 convertToLlm 转为 user 文本进入下一次模型请求。只存在于该次请求视图\n * (不写 context.messages、不进 newMessages,故不持久化);customType 复用\n * loop_guard_warn 标记来源。\n */\nexport function createRepeatedToolCallWarnReminder(warnThreshold: number): CustomMessage {\n\treturn {\n\t\trole: \"custom\",\n\t\tcustomType: REPEATED_TOOL_CALL_WARN_CUSTOM_TYPE,\n\t\tcontent: `You have repeated the identical tool call with an identical result ${warnThreshold} times. If you are waiting for external state to change, change your approach instead of retrying the same call.`,\n\t\tdisplay: false,\n\t\ttimestamp: Date.now(),\n\t};\n}\n\n/** {@link createRepeatedToolCallStopPolicy} 返回的两条链路(共享同一滑动窗口与两级状态)。 */\nexport interface RepeatedToolCallGuard {\n\t/**\n\t * \"shouldStopAfterTurn\" 链路:两级判定的决策面(返回 true 即请求停机)。\n\t */\n\tshouldStopAfterTurn: (context: ShouldStopAfterTurnContext) => boolean;\n\t/**\n\t * \"transformContext\" 链路:提醒注入面。有待注入提醒时返回追加了提醒消息的\n\t * 新数组(进入下一次模型请求视图),否则返回 undefined(保留输入)。\n\t */\n\ttransformContext: (messages: readonly unknown[], signal?: AbortSignal) => Promise<readonly unknown[] | undefined>;\n}\n\n/**\n * 默认重复工具调用护栏(主对话循环护栏切片A,两级响应)。\n *\n * 每个完成的回合从 assistant 消息中按序取出工具调用,签名(工具名 + 键序参数\n * + 本轮结果哈希,结果按 toolCallId 对应)追加进滑动窗口并裁剪到 windowSize;\n * 然后按窗口尾部连续相同签名段(含同一回合内多次相同调用)做两级响应:\n *\n * - 第一级(达到 warnThreshold,缺省 3):返回 false 不停机,改为提醒——内部\n * 标记 pendingWarn,由本工厂返回的 transformContext 链路在下一轮请求前把提醒\n * 消息追加到请求视图尾部(agent-loop 的 runLoop 在每次 shouldStopAfterTurn\n * 之后、下一次 streamAssistantResponse 之前消费 transformContext,故提醒必然\n * 进入下一次请求);同时把用户可见提醒经 deliverWarn 投递、事实经 onWarn 记\n * 日志。同一连续重复段只提醒一次(warnedForRun 闩);连续段断开(模型改变\n * 行为)即复位,后续新的连续段可再次提醒。\n * - 第二级(达到 stopThreshold,缺省 5):返回 true 请求停机——先向\n * {@link ShouldStopAfterTurnContext} 的 newMessages 追加一条用户可见的停机消\n * 息并交给 deliverNotice(禁止静默停机),再经 onStop 记日志。判据不可能完\n * 美,因此不可逆停机不是第一响应。\n *\n * 同参不同果(合法轮询,如等待外部状态就绪)不计重复:结果要素是全量哈希,\n * 任何字节差异(包括 >200 字符长结果仅尾部变化)都产生不同签名;无文本结果\n * 退化为两要素(见 {@link toolResultHash} 局限声明)。无工具调用或结果缺席的\n * 轮次不进窗口。\n *\n * 挂载点说明:两条链路都由 {@link installBootstrapAgentLoop} 经公共扩展面\n * `api.registerLoopHook` 注册为默认链路(transformContext 注入链注册在默认上\n * 下文策略链之后,提醒落到最终请求视图尾部);disabledBootstrapPlugins 跳过本\n * 插件时均不注册,护栏随之关闭。wireDefaultLoop 只消费链,不直接安装本策略。\n */\nexport function createRepeatedToolCallStopPolicy(\n\toptions: RepeatedToolCallStopPolicyOptions = {},\n): RepeatedToolCallGuard {\n\tconst windowSize = options.windowSize ?? REPEATED_TOOL_CALL_WINDOW_SIZE;\n\tconst warnThreshold = options.warnThreshold ?? REPEATED_TOOL_CALL_WARN_THRESHOLD;\n\tconst stopThreshold = options.stopThreshold ?? REPEATED_TOOL_CALL_STOP_THRESHOLD;\n\tconst window: string[] = [];\n\tlet lastToolName = \"\";\n\tlet lastArgsText = \"\";\n\t/** 待注入的提醒事实:warn 时置位,transformContext 消费即清除(只注入一次)。 */\n\tlet pendingWarn: RepeatedToolCallWarnInfo | undefined;\n\t/** 当前连续重复段已提醒闩:同段不重复提醒;段断开(尾部连续段短于提醒阈值)时复位。 */\n\tlet warnedForRun = false;\n\n\t/** 窗口尾部连续相同签名的段长。 */\n\tconst trailingRunLength = (): number => {\n\t\tconst last = window[window.length - 1];\n\t\tif (last === undefined) return 0;\n\t\tlet run = 0;\n\t\tfor (let i = window.length - 1; i >= 0 && window[i] === last; i -= 1) run += 1;\n\t\treturn run;\n\t};\n\n\tconst shouldStopAfterTurn = (context: ShouldStopAfterTurnContext): boolean => {\n\t\tconst toolCalls = context.message.content.filter((block): block is ToolCall => block.type === \"toolCall\");\n\t\t// 三要素签名需要本轮工具结果:结果缺席时无法判定\"同果\",该轮不进窗口,\n\t\t// 避免把合法轮询误判成重复。\n\t\tif (toolCalls.length > 0 && context.toolResults.length > 0) {\n\t\t\tconst resultById = new Map(context.toolResults.map((result) => [result.toolCallId, result]));\n\t\t\tfor (const call of toolCalls) {\n\t\t\t\twindow.push(repeatedToolCallSignature(call.name, call.arguments, toolResultHash(resultById.get(call.id))));\n\t\t\t\tlastToolName = call.name;\n\t\t\t\tlastArgsText = stableSerializeValue(call.arguments);\n\t\t\t}\n\t\t}\n\t\tif (window.length > windowSize) {\n\t\t\twindow.splice(0, window.length - windowSize);\n\t\t}\n\t\tconst run = trailingRunLength();\n\t\tif (run >= stopThreshold) {\n\t\t\t// 第二级兜底:硬停,走停机全通道(newMessages + deliverNotice + onStop)。\n\t\t\t// 先于提醒判定:stopThreshold 被显式覆盖到不大于 warnThreshold 时停机优先。\n\t\t\tpendingWarn = undefined;\n\t\t\tconst notice = createRepeatedToolCallStopNotice(lastToolName, lastArgsText, stopThreshold);\n\t\t\tcontext.newMessages.push(notice);\n\t\t\toptions.deliverNotice?.(notice);\n\t\t\t// 日志可见通道(D-072 6(a)):与用户可见提示成对发出;onStop 属宿主接线,\n\t\t\t// 策略本身不知道任何具体日志实现。\n\t\t\toptions.onStop?.({ toolName: lastToolName, argsSummary: truncateNoticeArgs(lastArgsText), stopThreshold });\n\t\t\treturn true;\n\t\t}\n\t\tif (run < warnThreshold) {\n\t\t\t// 连续段断开:模型改变行为。复位已提醒闩并丢弃未消费的待注入提醒\n\t\t\t// (正常流程中它已在下一轮请求前被消费;此处只兜底运行中断的残留)。\n\t\t\twarnedForRun = false;\n\t\t\tpendingWarn = undefined;\n\t\t\treturn false;\n\t\t}\n\t\t// 第一级:提醒不停机。标记待注入(transformContext 链路消费),经\n\t\t// deliverWarn/onWarn 双通道可见;同一连续段只提醒一次。\n\t\tif (!warnedForRun) {\n\t\t\twarnedForRun = true;\n\t\t\tpendingWarn = { toolName: lastToolName, argsSummary: truncateNoticeArgs(lastArgsText), warnThreshold };\n\t\t\toptions.deliverWarn?.(createRepeatedToolCallWarnNotice(lastToolName, lastArgsText, warnThreshold));\n\t\t\toptions.onWarn?.(pendingWarn);\n\t\t}\n\t\treturn false;\n\t};\n\n\tconst transformContext = async (\n\t\tmessages: readonly unknown[],\n\t\t_signal?: AbortSignal,\n\t): Promise<readonly unknown[] | undefined> => {\n\t\tconst info = pendingWarn;\n\t\tif (!info) return undefined;\n\t\t// 消费即清除:提醒只注入一次;重复继续发生不重复注入。非变异地追加到\n\t\t// 请求视图尾部(不写 context.messages,故不持久化、不进 newMessages)。\n\t\tpendingWarn = undefined;\n\t\treturn [...messages, createRepeatedToolCallWarnReminder(info.warnThreshold)];\n\t};\n\n\treturn { shouldStopAfterTurn, transformContext };\n}\n\n/**\n * Session-bound host state the default loop links read at execution time.\n * Host wiring injected into the bootstrap executor; not part of the plugin\n * capability surface.\n */\nexport interface AgentLoopWiringV1 {\n\t/** Canonical session id for lifecycle payloads. */\n\tgetSessionId(): string;\n\t/** Detached revision snapshot captured at payload build time. */\n\tgetRevision(): SessionRevisionV1;\n\t/** Correlation id of the current prompt run, if any. */\n\tgetTurnCorrelationId(): string | undefined;\n\t/** Non-fatal delivery error sink (same surface as session-level observation). */\n\tobserveError(error: unknown, extensionPath: string, event: string): void;\n\t/** Image auto-resize setting for tool-result normalization. */\n\tgetImageAutoResize(): boolean;\n\t/** Compaction hook chained first inside the default prepareNextTurn link. */\n\tcompactBeforeNextAssistantResponse(context: AgentContext, signal?: AbortSignal): Promise<AgentContext>;\n\t/** Next-turn refresh snapshot applied last inside the default prepareNextTurn link. */\n\tgetTurnRefresh(): {\n\t\tsystemPrompt: string;\n\t\ttools: AgentTool[];\n\t\tmodel: Model<Api>;\n\t\tthinkingLevel: ThinkingLevel;\n\t};\n\t/** The agent's construction-time prepare adapter, chained after compaction. */\n\tgetInitialPrepareNextTurn():\n\t\t| ((\n\t\t\t\tcontext: PrepareNextTurnContext,\n\t\t\t\tsignal?: AbortSignal,\n\t\t ) => Promise<AgentLoopTurnUpdate | undefined> | AgentLoopTurnUpdate | undefined)\n\t\t| undefined;\n\t/** Configured external context strategy name, if any. */\n\tgetContextStrategyName(): string | undefined;\n}\n\ninterface LifecycleFailureReport {\n\treport?: { failures?: readonly { error: unknown; pluginId: string; kind: string }[] };\n}\n\n/**\n * Default beforeToolCall link: the `tool.call@1` candidate dispatch with\n * identity/revision checks. Moved from the AgentSession tool-hook wiring.\n */\nfunction createDefaultBeforeToolCallLink(\n\truntime: CapabilityRuntime,\n\twiring: AgentLoopWiringV1,\n): AgentLoopBeforeToolCallHookV1 {\n\treturn async ({ toolCallId, toolName, args, signal }) => {\n\t\t// v8 ignore next -- bootstrap lifecycle 恒定义全部生命周期事件,其 token 在 dispose 前恒活跃,提前返回不可达\n\t\tif (!runtime.hasLifecycleEvent(TOOL_CALL_EVENT_ID, TOOL_CALL_EVENT_VERSION)) return undefined;\n\t\tconst data: ToolCallEventDataV1 = {\n\t\t\tversion: 1,\n\t\t\tsessionId: wiring.getSessionId(),\n\t\t\trevision: wiring.getRevision(),\n\t\t\ttoolCallId,\n\t\t\ttoolName,\n\t\t\tinput: detachedSessionSnapshot(args),\n\t\t};\n\t\ttry {\n\t\t\tconst delivery = await runtime.dispatchLifecycle({\n\t\t\t\ttype: TOOL_CALL_EVENT_ID,\n\t\t\t\tversion: TOOL_CALL_EVENT_VERSION,\n\t\t\t\tphase: \"candidate\",\n\t\t\t\tdata,\n\t\t\t\tsource: \"agent-session\",\n\t\t\t\tcorrelationId: wiring.getTurnCorrelationId(),\n\t\t\t\tsignal,\n\t\t\t});\n\t\t\tfor (const failure of delivery.report.failures) {\n\t\t\t\twiring.observeError(\n\t\t\t\t\tfailure.error,\n\t\t\t\t\tfailure.pluginId,\n\t\t\t\t\t`${TOOL_CALL_EVENT_ID}@${TOOL_CALL_EVENT_VERSION}/${failure.kind}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst transformed = delivery.data;\n\t\t\tconst revision = transformed.revision;\n\t\t\tif (\n\t\t\t\ttransformed.sessionId !== data.sessionId ||\n\t\t\t\ttransformed.toolCallId !== data.toolCallId ||\n\t\t\t\ttransformed.toolName !== data.toolName ||\n\t\t\t\trevision.version !== data.revision.version ||\n\t\t\t\trevision.sessionId !== data.revision.sessionId ||\n\t\t\t\trevision.sequence !== data.revision.sequence ||\n\t\t\t\trevision.leafId !== data.revision.leafId\n\t\t\t) {\n\t\t\t\tthrow new Error(`${TOOL_CALL_EVENT_ID} transform cannot change call identity or revision`);\n\t\t\t}\n\t\t\treturn { args: transformed.input };\n\t\t} catch (error) {\n\t\t\tconst report = (error as LifecycleFailureReport).report;\n\t\t\tif (report?.failures) {\n\t\t\t\tfor (const failure of report.failures) {\n\t\t\t\t\twiring.observeError(\n\t\t\t\t\t\tfailure.error,\n\t\t\t\t\t\tfailure.pluginId,\n\t\t\t\t\t\t`${TOOL_CALL_EVENT_ID}@${TOOL_CALL_EVENT_VERSION}/${failure.kind}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t};\n}\n\n/**\n * Default afterToolCall link: `tool.execute@1` committed, `tool.result.raw@1`\n * raw, the legacy `tool_result` extension hook (via wiring), image\n * normalization, and the `tool.result.transform@1` candidate dispatch — in the\n * exact order the previous single AgentSession hook used. Moved from the\n * AgentSession tool-hook wiring.\n */\nfunction createDefaultAfterToolCallLink(\n\truntime: CapabilityRuntime,\n\twiring: AgentLoopWiringV1,\n): AgentLoopAfterToolCallHookV1 {\n\treturn async ({ toolCallId, toolName, args, result, isError, signal }) => {\n\t\tconst toolResult = result as {\n\t\t\tcontent?: (TextContent | ImageContent)[];\n\t\t\tdetails?: unknown;\n\t\t\tisError?: boolean;\n\t\t\tusage?: Usage;\n\t\t};\n\t\tif (runtime.hasLifecycleEvent(TOOL_EXECUTE_EVENT_ID, TOOL_EXECUTE_EVENT_VERSION)) {\n\t\t\ttry {\n\t\t\t\tconst data: ToolExecuteEventDataV1 = {\n\t\t\t\t\tversion: 1,\n\t\t\t\t\tsessionId: wiring.getSessionId(),\n\t\t\t\t\trevision: wiring.getRevision(),\n\t\t\t\t\ttoolCallId,\n\t\t\t\t\ttoolName,\n\t\t\t\t\tinput: detachedSessionSnapshot(args),\n\t\t\t\t\tisError,\n\t\t\t\t\tcontent: detachedSessionSnapshot(toolResult.content ?? []),\n\t\t\t\t};\n\t\t\t\tconst delivery = await runtime.dispatchLifecycle({\n\t\t\t\t\ttype: TOOL_EXECUTE_EVENT_ID,\n\t\t\t\t\tversion: TOOL_EXECUTE_EVENT_VERSION,\n\t\t\t\t\tphase: \"committed\",\n\t\t\t\t\tdata,\n\t\t\t\t\tsource: \"agent-session\",\n\t\t\t\t\tcorrelationId: wiring.getTurnCorrelationId(),\n\t\t\t\t});\n\t\t\t\tfor (const failure of delivery.report.failures) {\n\t\t\t\t\twiring.observeError(\n\t\t\t\t\t\tfailure.error,\n\t\t\t\t\t\tfailure.pluginId,\n\t\t\t\t\t\t`${TOOL_EXECUTE_EVENT_ID}@${TOOL_EXECUTE_EVENT_VERSION}/${failure.kind}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tconst report = (error as LifecycleFailureReport).report;\n\t\t\t\tif (report?.failures) {\n\t\t\t\t\tfor (const failure of report.failures) {\n\t\t\t\t\t\twiring.observeError(\n\t\t\t\t\t\t\tfailure.error,\n\t\t\t\t\t\t\tfailure.pluginId,\n\t\t\t\t\t\t\t`${TOOL_EXECUTE_EVENT_ID}@${TOOL_EXECUTE_EVENT_VERSION}/${failure.kind}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\twiring.observeError(\n\t\t\t\t\t\terror,\n\t\t\t\t\t\t\"<capability-lifecycle>\",\n\t\t\t\t\t\t`${TOOL_EXECUTE_EVENT_ID}@${TOOL_EXECUTE_EVENT_VERSION}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (runtime.hasLifecycleEvent(TOOL_RESULT_RAW_EVENT_ID, TOOL_RESULT_RAW_EVENT_VERSION) && !signal?.aborted) {\n\t\t\ttry {\n\t\t\t\tconst data: ToolResultRawEventDataV1 = {\n\t\t\t\t\tversion: 1,\n\t\t\t\t\tsessionId: wiring.getSessionId(),\n\t\t\t\t\trevision: wiring.getRevision(),\n\t\t\t\t\ttoolCallId,\n\t\t\t\t\ttoolName,\n\t\t\t\t\tisError,\n\t\t\t\t\tcontent: detachedSessionSnapshot(toolResult.content ?? []),\n\t\t\t\t};\n\t\t\t\tconst delivery = await runtime.dispatchLifecycle({\n\t\t\t\t\ttype: TOOL_RESULT_RAW_EVENT_ID,\n\t\t\t\t\tversion: TOOL_RESULT_RAW_EVENT_VERSION,\n\t\t\t\t\tphase: \"raw\",\n\t\t\t\t\tdata,\n\t\t\t\t\tsource: \"agent-session\",\n\t\t\t\t\tcorrelationId: wiring.getTurnCorrelationId(),\n\t\t\t\t\tsignal,\n\t\t\t\t});\n\t\t\t\tfor (const failure of delivery.report.failures) {\n\t\t\t\t\twiring.observeError(\n\t\t\t\t\t\tfailure.error,\n\t\t\t\t\t\tfailure.pluginId,\n\t\t\t\t\t\t`${TOOL_RESULT_RAW_EVENT_ID}@${TOOL_RESULT_RAW_EVENT_VERSION}/${failure.kind}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tif (!signal?.aborted) {\n\t\t\t\t\twiring.observeError(\n\t\t\t\t\t\terror,\n\t\t\t\t\t\t\"host\",\n\t\t\t\t\t\t`${TOOL_RESULT_RAW_EVENT_ID}@${TOOL_RESULT_RAW_EVENT_VERSION}/dispatch`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst content = toolResult.content ?? [];\n\t\t// Images are normalized before the transform dispatch so injected or\n\t\t// replaced images are normalized too.\n\t\tconst normalizedContent = await normalizeToolResultImages(content, {\n\t\t\tautoResizeImages: wiring.getImageAutoResize(),\n\t\t});\n\t\tconst legacyIsError = isError;\n\n\t\t// Standard tool.result.transform@1 candidate dispatch runs on the\n\t\t// normalized result candidate, after the legacy tool_result hook and\n\t\t// before the result is returned for session commit. Transform output is\n\t\t// schema-validated and identity-checked; failures propagate to the\n\t\t// agent loop's existing afterToolCall error isolation.\n\t\tlet finalContent: (typeof normalizedContent)[number][] = normalizedContent;\n\t\tlet finalIsError = legacyIsError;\n\t\tif (\n\t\t\truntime.hasLifecycleEvent(TOOL_RESULT_TRANSFORM_EVENT_ID, TOOL_RESULT_TRANSFORM_EVENT_VERSION) &&\n\t\t\t!signal?.aborted\n\t\t) {\n\t\t\tconst data: ToolResultTransformEventDataV1 = {\n\t\t\t\tversion: 1,\n\t\t\t\tsessionId: wiring.getSessionId(),\n\t\t\t\trevision: wiring.getRevision(),\n\t\t\t\ttoolCallId,\n\t\t\t\ttoolName,\n\t\t\t\tisError: legacyIsError,\n\t\t\t\tcontent: detachedSessionSnapshot(normalizedContent),\n\t\t\t};\n\t\t\ttry {\n\t\t\t\tconst delivery = await runtime.dispatchLifecycle({\n\t\t\t\t\ttype: TOOL_RESULT_TRANSFORM_EVENT_ID,\n\t\t\t\t\tversion: TOOL_RESULT_TRANSFORM_EVENT_VERSION,\n\t\t\t\t\tphase: \"candidate\",\n\t\t\t\t\tdata,\n\t\t\t\t\tsource: \"agent-session\",\n\t\t\t\t\tcorrelationId: wiring.getTurnCorrelationId(),\n\t\t\t\t\tsignal,\n\t\t\t\t});\n\t\t\t\tfor (const failure of delivery.report.failures) {\n\t\t\t\t\twiring.observeError(\n\t\t\t\t\t\tfailure.error,\n\t\t\t\t\t\tfailure.pluginId,\n\t\t\t\t\t\t`${TOOL_RESULT_TRANSFORM_EVENT_ID}@${TOOL_RESULT_TRANSFORM_EVENT_VERSION}/${failure.kind}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tconst transformed = delivery.data;\n\t\t\t\tconst revision = transformed.revision;\n\t\t\t\tif (\n\t\t\t\t\ttransformed.sessionId !== data.sessionId ||\n\t\t\t\t\ttransformed.toolCallId !== data.toolCallId ||\n\t\t\t\t\ttransformed.toolName !== data.toolName ||\n\t\t\t\t\trevision.version !== data.revision.version ||\n\t\t\t\t\trevision.sessionId !== data.revision.sessionId ||\n\t\t\t\t\trevision.sequence !== data.revision.sequence ||\n\t\t\t\t\trevision.leafId !== data.revision.leafId\n\t\t\t\t) {\n\t\t\t\t\tthrow new Error(`${TOOL_RESULT_TRANSFORM_EVENT_ID} transform cannot change result identity or revision`);\n\t\t\t\t}\n\t\t\t\tfinalContent = transformed.content as (typeof normalizedContent)[number][];\n\t\t\t\tfinalIsError = transformed.isError;\n\t\t\t} catch (error) {\n\t\t\t\tconst report = (error as LifecycleFailureReport).report;\n\t\t\t\tif (report?.failures) {\n\t\t\t\t\tfor (const failure of report.failures) {\n\t\t\t\t\t\twiring.observeError(\n\t\t\t\t\t\t\tfailure.error,\n\t\t\t\t\t\t\tfailure.pluginId,\n\t\t\t\t\t\t\t`${TOOL_RESULT_TRANSFORM_EVENT_ID}@${TOOL_RESULT_TRANSFORM_EVENT_VERSION}/${failure.kind}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\n\t\tif (finalContent === content && finalIsError === isError) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn {\n\t\t\tcontent: finalContent,\n\t\t\tdetails: toolResult.details,\n\t\t\tisError: finalIsError,\n\t\t\tusage: toolResult.usage,\n\t\t};\n\t};\n}\n\n/**\n * Default transformContext link: the explicitly selected capability context\n * strategy. Moved from the AgentSession context-transform wiring (the legacy\n * chaining wrapper keeps composing it for the pre-chain path).\n */\nfunction createDefaultTransformContextLink(\n\truntime: CapabilityRuntime,\n\twiring: AgentLoopWiringV1,\n): AgentLoopTransformContextHookV1 {\n\treturn async (messages, signal) => {\n\t\tconst strategyName = wiring.getContextStrategyName();\n\t\tif (!strategyName) return undefined;\n\t\treturn applyCapabilityContextStrategy(\n\t\t\tmessages as AgentMessage[],\n\t\t\truntime,\n\t\t\tstrategyName,\n\t\t\twiring.getSessionId(),\n\t\t\tsignal,\n\t\t);\n\t};\n}\n\n/**\n * Default prepareNextTurn link: compaction first, then the agent's\n * construction-time prepare adapter, then the system-prompt/tools/model/\n * thinking-level refresh. Moved from the AgentSession next-turn wiring.\n */\nfunction createDefaultPrepareNextTurnLink(wiring: AgentLoopWiringV1): AgentLoopPrepareNextTurnHookV1 {\n\treturn async (turn, signal) => {\n\t\tconst turnContext = turn as PrepareNextTurnContext;\n\t\tconst context = await wiring.compactBeforeNextAssistantResponse(turnContext.context, signal);\n\t\tconst previousSnapshot = await wiring.getInitialPrepareNextTurn()?.({ ...turnContext, context }, signal);\n\t\tconst nextContext = previousSnapshot?.context ?? context;\n\t\tconst refresh = wiring.getTurnRefresh();\n\n\t\treturn {\n\t\t\t...previousSnapshot,\n\t\t\tcontext: {\n\t\t\t\t...nextContext,\n\t\t\t\tsystemPrompt: refresh.systemPrompt,\n\t\t\t\ttools: refresh.tools,\n\t\t\t},\n\t\t\tmodel: refresh.model,\n\t\t\tthinkingLevel: refresh.thinkingLevel,\n\t\t};\n\t};\n}\n\n/**\n * Install the default agent-loop executor as a first-party plugin. Default\n * links register first, so third-party links registered later chain after\n * them in registration order.\n */\nexport function installBootstrapAgentLoop(\n\truntime: CapabilityRuntime,\n\twiring: AgentLoopWiringV1,\n): CapabilityPluginHandle {\n\treturn loadCapabilityPluginSync(\n\t\truntime,\n\t\t{\n\t\t\tid: BOOTSTRAP_AGENT_LOOP_PLUGIN_ID,\n\t\t\tversion: \"0.0.0\",\n\t\t\tapiVersion: EXPERIMENTAL_PUBLIC_API_VERSION,\n\t\t\tentry: \"<embedded:bootstrap-agent-loop>\",\n\t\t},\n\t\t(api) => {\n\t\t\tapi.registerLoopHook(\"beforeToolCall\", createDefaultBeforeToolCallLink(runtime, wiring));\n\t\t\tapi.registerLoopHook(\"afterToolCall\", createDefaultAfterToolCallLink(runtime, wiring));\n\t\t\tapi.registerLoopHook(\"transformContext\", createDefaultTransformContextLink(runtime, wiring));\n\t\t\tapi.registerLoopHook(\"prepareNextTurn\", createDefaultPrepareNextTurnLink(wiring));\n\t\t\t// The default repeated-tool-call guard rides the public loop-hook\n\t\t\t// chains like any other first-party link; disabling this plugin\n\t\t\t// removes both of its links. It answers with two levels (judgments\n\t\t\t// can be wrong, so an irreversible stop is never the first response):\n\t\t\t// - warn (third identical call): the shouldStopAfterTurn link votes\n\t\t\t// false and the transformContext link below injects a reminder into\n\t\t\t// the next request view (runLoop consumes transformContext after\n\t\t\t// shouldStopAfterTurn and before the next model call); the user-\n\t\t\t// facing warn notice is delivered through the public SessionAPI\n\t\t\t// sendMessage face (persisted custom_message entry with live\n\t\t\t// message_start/message_end rendering), plus a warn log through\n\t\t\t// the public LoggerAPI.\n\t\t\t// - stop (fifth identical call): the shouldStopAfterTurn link votes\n\t\t\t// true; the stop notice rides agent_end newMessages, sendMessage\n\t\t\t// persistence + rendering, and a warn log — all channels on.\n\t\t\t// Absent host features (session/logger) degrade to the remaining\n\t\t\t// channels instead of blocking the guard.\n\t\t\tconst loopGuard = createRepeatedToolCallStopPolicy({\n\t\t\t\tdeliverWarn: (notice) => {\n\t\t\t\t\tvoid api.session?.sendMessage?.(notice, { triggerTurn: false });\n\t\t\t\t},\n\t\t\t\tonWarn: (info) => {\n\t\t\t\t\tapi.logger?.warn(\"Loop guard warned the model\", {\n\t\t\t\t\t\ttool: info.toolName,\n\t\t\t\t\t\trepeats: info.warnThreshold,\n\t\t\t\t\t\targsSummary: info.argsSummary,\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tdeliverNotice: (notice) => {\n\t\t\t\t\tvoid api.session?.sendMessage?.(notice, { triggerTurn: false });\n\t\t\t\t},\n\t\t\t\tonStop: (info) => {\n\t\t\t\t\tapi.logger?.warn(\"Loop guard stopped the turn\", {\n\t\t\t\t\t\ttool: info.toolName,\n\t\t\t\t\t\trepeats: info.stopThreshold,\n\t\t\t\t\t\targsSummary: info.argsSummary,\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t});\n\t\t\tapi.registerLoopHook(\"shouldStopAfterTurn\", loopGuard.shouldStopAfterTurn);\n\t\t\t// Registered after the default context-strategy link, so the reminder\n\t\t\t// is appended to the final post-strategy request view (survives any\n\t\t\t// strategy pruning) at its tail.\n\t\t\tapi.registerLoopHook(\"transformContext\", loopGuard.transformContext);\n\t\t\t// The default continuation strategy reproduces the host's own\n\t\t\t// post-run decision byte for byte; a replacement strategy overrides\n\t\t\t// the continue/stop call through registerRunLoopStrategy.\n\t\t\tapi.registerRunLoopStrategy(DEFAULT_RUN_LOOP_STRATEGY_NAME, {\n\t\t\t\tdecideNextCycle: (request) => ({ continueLoop: request.hostWillContinue }),\n\t\t\t});\n\t\t},\n\t);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"bootstrap-agent-loop.d.ts","sourceRoot":"","sources":["../../../src/core/extensions/bootstrap-agent-loop.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Default agent-loop bootstrap executor (W3).\n *\n/**\n * Registers the default main-loop capabilities through the public extension\n * face so the default loop stays a replaceable first-party plugin:\n * - the five default loop-hook links (capability lifecycle dispatch, image\n * normalization, context strategy, compaction + next-turn refresh, and the\n * repeated-tool-call guard: shouldStopAfterTurn decision + transformContext\n * warn-reminder injection), and\n * - the default post-run continuation strategy (the host's own candidate\n * decision).\n *\n * The default links need session-bound host state (session id, revision,\n * correlation id, error observation, settings). That state is injected as\n * {@link AgentLoopWiringV1} — host wiring, not a plugin capability. Third-party\n * plugins register additional links through `api.registerLoopHook`; they run\n * after the default links in registration order.\n */\n\nimport { createHash } from \"node:crypto\";\nimport type {\n\tAgentContext,\n\tAgentLoopTurnUpdate,\n\tAgentMessage,\n\tAgentTool,\n\tPrepareNextTurnContext,\n\tShouldStopAfterTurnContext,\n\tThinkingLevel,\n} from \"@agent-forge/agent-core\";\nimport type { ToolCall, ToolResultMessage } from \"@agent-forge/ai\";\nimport type { Api, ImageContent, Model, TextContent, Usage } from \"@agent-forge/ai/compat\";\nimport { normalizeToolResultImages } from \"../../utils/tool-result-images.ts\";\nimport { t } from \"../i18n/index.ts\";\nimport type { CustomMessage } from \"../messages.ts\";\nimport { type CapabilityPluginHandle, loadCapabilityPluginSync } from \"./capability-plugin.ts\";\nimport type { CapabilityRuntime } from \"./capability-runtime.ts\";\nimport { applyCapabilityContextStrategy } from \"./context-strategy-binding.ts\";\nimport {\n\tTOOL_CALL_EVENT_ID,\n\tTOOL_CALL_EVENT_VERSION,\n\tTOOL_EXECUTE_EVENT_ID,\n\tTOOL_EXECUTE_EVENT_VERSION,\n\tTOOL_RESULT_RAW_EVENT_ID,\n\tTOOL_RESULT_RAW_EVENT_VERSION,\n\tTOOL_RESULT_TRANSFORM_EVENT_ID,\n\tTOOL_RESULT_TRANSFORM_EVENT_VERSION,\n\ttype ToolCallEventDataV1,\n\ttype ToolExecuteEventDataV1,\n\ttype ToolResultRawEventDataV1,\n\ttype ToolResultTransformEventDataV1,\n} from \"./lifecycle-catalog.ts\";\nimport {\n\ttype AgentLoopAfterToolCallHookV1,\n\ttype AgentLoopBeforeToolCallHookV1,\n\ttype AgentLoopPrepareNextTurnHookV1,\n\ttype AgentLoopTransformContextHookV1,\n\tdetachedSessionSnapshot,\n\tEXPERIMENTAL_PUBLIC_API_VERSION,\n\ttype SessionRevisionV1,\n} from \"./public-api.ts\";\n\nexport const BOOTSTRAP_AGENT_LOOP_PLUGIN_ID = \"agent-forge.bootstrap-agent-loop\";\nexport const DEFAULT_RUN_LOOP_STRATEGY_NAME = \"default\";\n\n/** 滑动窗口大小:护栏只回看最近 N 个工具调用签名(跨回合累计)。 */\nexport const REPEATED_TOOL_CALL_WINDOW_SIZE = 6;\n/** 提醒阈值:窗口尾部连续相同签名达到该次数时提醒模型(不停机,两级响应第一级)。 */\nexport const REPEATED_TOOL_CALL_WARN_THRESHOLD = 3;\n/** 停机阈值:提醒后仍连续相同达到该次数才请求停机(两级响应第二级兜底)。 */\nexport const REPEATED_TOOL_CALL_STOP_THRESHOLD = 5;\n/** 停机提示消息的 customType(用户可见面,随 agent_end 的 messages 带出)。 */\nexport const REPEATED_TOOL_CALL_STOP_CUSTOM_TYPE = \"loop_guard_stop\";\n/** 提醒消息的 customType(用户可见面经 sendMessage 持久化+渲染;模型面注入复用同一标记)。 */\nexport const REPEATED_TOOL_CALL_WARN_CUSTOM_TYPE = \"loop_guard_warn\";\n/** 提示消息中参数串的最大长度,超出截断(只影响提示文本,不影响检测签名)。 */\nexport const REPEATED_TOOL_CALL_NOTICE_MAX_ARGS_CHARS = 200;\n\n/** {@link createRepeatedToolCallStopPolicy} 的窗口与两级阈值参数(缺省用上方命名常量)。 */\nexport interface RepeatedToolCallStopPolicyOptions {\n\t/** 滑动窗口大小,缺省 {@link REPEATED_TOOL_CALL_WINDOW_SIZE}。 */\n\twindowSize?: number;\n\t/** 提醒阈值(第一级,不停机),缺省 {@link REPEATED_TOOL_CALL_WARN_THRESHOLD}。 */\n\twarnThreshold?: number;\n\t/** 停机阈值(第二级兜底),缺省 {@link REPEATED_TOOL_CALL_STOP_THRESHOLD}。显式设为不大于提醒阈值时停机优先。 */\n\tstopThreshold?: number;\n\t/**\n\t * 提醒时的日志面回调(与 {@link onStop} 同纪律:info 只携带脱敏后的事实——\n\t * 工具名、截断参数摘要、提醒阈值,不含完整工具参数)。只在第一级实际提醒的\n\t * 回合调用一次;缺省不接 = 行为不变。\n\t */\n\tonWarn?: (info: RepeatedToolCallWarnInfo) => void;\n\t/**\n\t * 停机时的日志面回调(D-072 治理纪律 6(a):用户可见 + 日志可见双通道)。\n\t * 只在策略实际请求停机的回合调用一次;缺省不接 = 行为不变。info 只携带\n\t * 脱敏后的事实(工具名、截断参数摘要、阈值),不含完整工具参数。\n\t */\n\tonStop?: (info: RepeatedToolCallStopInfo) => void;\n\t/**\n\t * 提醒通知投递缝:策略把提醒消息交给宿主选定的公共面。默认安装把它接到\n\t * `SessionAPI.sendMessage`(持久化 + message_start 实时渲染);缺席时提醒\n\t * 仍经 transformContext 注入模型请求(模型面不依赖该缝)。\n\t */\n\tdeliverWarn?: (notice: CustomMessage) => void;\n\t/**\n\t * 停机通知投递缝:策略把停机提示消息交给宿主选定的公共面。默认安装把它接到\n\t * `SessionAPI.sendMessage`(运行中排队、run 收尾 flush 落为 custom_message\n\t * 条目——持久化 + message_start 实时渲染);缺席时停机事实仅随 agent_end 的\n\t * newMessages 带出(行为不变)。\n\t */\n\tdeliverNotice?: (notice: CustomMessage) => void;\n}\n\n/** 提醒事实(脱敏):{@link RepeatedToolCallStopPolicyOptions.onWarn} 的载荷。 */\nexport interface RepeatedToolCallWarnInfo {\n\t/** 触发提醒的最后一个工具名。 */\n\ttoolName: string;\n\t/** 截断后的参数稳定序列化摘要(复用 {@link REPEATED_TOOL_CALL_NOTICE_MAX_ARGS_CHARS})。 */\n\targsSummary: string;\n\t/** 达到的连续重复提醒阈值。 */\n\twarnThreshold: number;\n}\n\n/** 停机事实(脱敏):{@link RepeatedToolCallStopPolicyOptions.onStop} 的载荷。 */\nexport interface RepeatedToolCallStopInfo {\n\t/** 触发停机的最后一个工具名。 */\n\ttoolName: string;\n\t/** 截断后的参数稳定序列化摘要(复用 {@link REPEATED_TOOL_CALL_NOTICE_MAX_ARGS_CHARS})。 */\n\targsSummary: string;\n\t/** 达到的连续重复停机阈值。 */\n\tstopThreshold: number;\n}\n\n/**\n * 参数稳定字符串化:对象键递归排序后逐层拼接(数组保持顺序),循环引用输出\n * 固定占位。只用于签名比较与提示文本,不是通用 JSON 序列化器。\n */\nexport function stableSerializeValue(value: unknown, seen: WeakSet<object> = new WeakSet()): string {\n\tif (value === null) return \"null\";\n\tswitch (typeof value) {\n\t\tcase \"string\":\n\t\t\treturn JSON.stringify(value);\n\t\tcase \"number\":\n\t\t\treturn String(value);\n\t\tcase \"boolean\":\n\t\t\treturn String(value);\n\t\tcase \"undefined\":\n\t\t\treturn \"undefined\";\n\t\tcase \"bigint\":\n\t\t\treturn `bigint:${String(value)}`;\n\t\tcase \"function\":\n\t\t\treturn \"function\";\n\t\tcase \"symbol\":\n\t\t\treturn \"symbol\";\n\t\tcase \"object\":\n\t\t\tbreak;\n\t\tdefault:\n\t\t\treturn \"unknown\";\n\t}\n\tif (seen.has(value)) return '\"[cycle]\"';\n\tseen.add(value);\n\tconst serialized = Array.isArray(value)\n\t\t? `[${value.map((item) => stableSerializeValue(item, seen)).join(\",\")}]`\n\t\t: (() => {\n\t\t\t\tconst record = value as Record<string, unknown>;\n\t\t\t\tconst keys = Object.keys(record).sort();\n\t\t\t\treturn `{${keys.map((key) => `${JSON.stringify(key)}:${stableSerializeValue(record[key], seen)}`).join(\",\")}}`;\n\t\t\t})();\n\tseen.delete(value);\n\treturn serialized;\n}\n\n/**\n * 工具结果哈希(签名第三要素):拼接结果的 text 内容后做全量 SHA-256(十六进制),\n * isError 一并纳入(同参同果且同错误状态才计重复)。任何字节差异都产生不同哈希,\n * 因此长结果(前缀稳定、尾部变化)的合法轮询不会被误判成\"同果\"——签名不受任何\n * 截断影响。无文本结果(纯图像等)与结果缺席都返回空串占位:签名退化为两要素\n * (工具名 + 参数),这是已知局限——无文本的同参结果彼此不可区分。\n * 调用与结果按 toolCallId 对应,正常流程中每个调用都有结果;无结果返回空串。\n */\nexport function toolResultHash(result: ToolResultMessage | undefined): string {\n\tif (!result) return \"\";\n\tconst text = result.content\n\t\t.filter((block): block is TextContent => block.type === \"text\")\n\t\t.map((block) => block.text)\n\t\t.join(\"\\n\");\n\tif (text === \"\") return \"\";\n\treturn `${result.isError ? \"error\" : \"ok\"}:${createHash(\"sha256\").update(text).digest(\"hex\")}`;\n}\n\n/** 工具调用签名:工具名 + 参数稳定字符串化 + 结果哈希。 */\nexport function repeatedToolCallSignature(toolName: string, args: unknown, resultHash: string): string {\n\treturn `${JSON.stringify(toolName)}:${stableSerializeValue(args)}:${resultHash}`;\n}\n\n/** 参数摘要截断:超出 {@link REPEATED_TOOL_CALL_NOTICE_MAX_ARGS_CHARS} 打截断标记(用户可见消息与日志通道共用)。 */\nfunction truncateNoticeArgs(argsText: string): string {\n\treturn argsText.length > REPEATED_TOOL_CALL_NOTICE_MAX_ARGS_CHARS\n\t\t? `${argsText.slice(0, REPEATED_TOOL_CALL_NOTICE_MAX_ARGS_CHARS)}...(truncated)`\n\t\t: argsText;\n}\n\n/** 停机提示消息:随停机回合的 newMessages 带出(agent_end 可见),并经 deliverNotice 投递到宿主公共面。 */\nexport function createRepeatedToolCallStopNotice(\n\ttoolName: string,\n\targsText: string,\n\tstopThreshold: number,\n): CustomMessage {\n\tconst truncated = truncateNoticeArgs(argsText);\n\treturn {\n\t\trole: \"custom\",\n\t\tcustomType: REPEATED_TOOL_CALL_STOP_CUSTOM_TYPE,\n\t\tcontent: `Loop guard: stopped after the same tool call (${toolName}) was repeated ${stopThreshold} times in a row. Args: ${truncated}`,\n\t\tdisplay: true,\n\t\ttimestamp: Date.now(),\n\t};\n}\n\n/**\n * 提醒通知消息(用户可见面,loop_guard_warn):经 deliverWarn 投递(默认安装接\n * `SessionAPI.sendMessage`,持久化 + 实时渲染),与停机通知(loop_guard_stop)\n * 的 customType 区分。提醒不进入 newMessages——模型面提醒由 transformContext\n * 注入承担,用户面提醒由本消息的持久化+渲染承担。\n */\nexport function createRepeatedToolCallWarnNotice(\n\ttoolName: string,\n\targsText: string,\n\twarnThreshold: number,\n): CustomMessage {\n\tconst truncated = truncateNoticeArgs(argsText);\n\treturn {\n\t\trole: \"custom\",\n\t\tcustomType: REPEATED_TOOL_CALL_WARN_CUSTOM_TYPE,\n\t\tcontent: `Loop guard: the same tool call (${toolName}) was repeated ${warnThreshold} times in a row with the same result. Args: ${truncated}`,\n\t\tdisplay: true,\n\t\ttimestamp: Date.now(),\n\t};\n}\n\n/**\n * 模型面提醒消息(transformContext 注入用):display:false 的 custom 消息,\n * 经 convertToLlm 转为 user 文本进入下一次模型请求。只存在于该次请求视图\n * (不写 context.messages、不进 newMessages,故不持久化);customType 复用\n * loop_guard_warn 标记来源。\n */\nexport function createRepeatedToolCallWarnReminder(warnThreshold: number): CustomMessage {\n\treturn {\n\t\trole: \"custom\",\n\t\tcustomType: REPEATED_TOOL_CALL_WARN_CUSTOM_TYPE,\n\t\tcontent: `You have repeated the identical tool call with an identical result ${warnThreshold} times. If you are waiting for external state to change, change your approach instead of retrying the same call.`,\n\t\tdisplay: false,\n\t\ttimestamp: Date.now(),\n\t};\n}\n\n/** {@link createRepeatedToolCallStopPolicy} 返回的两条链路(共享同一滑动窗口与两级状态)。 */\nexport interface RepeatedToolCallGuard {\n\t/**\n\t * \"shouldStopAfterTurn\" 链路:两级判定的决策面(返回 true 即请求停机)。\n\t */\n\tshouldStopAfterTurn: (context: ShouldStopAfterTurnContext) => boolean;\n\t/**\n\t * \"transformContext\" 链路:提醒注入面。有待注入提醒时返回追加了提醒消息的\n\t * 新数组(进入下一次模型请求视图),否则返回 undefined(保留输入)。\n\t */\n\ttransformContext: (messages: readonly unknown[], signal?: AbortSignal) => Promise<readonly unknown[] | undefined>;\n}\n\n/**\n * 默认重复工具调用护栏(主对话循环护栏切片A,两级响应)。\n *\n * 每个完成的回合从 assistant 消息中按序取出工具调用,签名(工具名 + 键序参数\n * + 本轮结果哈希,结果按 toolCallId 对应)追加进滑动窗口并裁剪到 windowSize;\n * 然后按窗口尾部连续相同签名段(含同一回合内多次相同调用)做两级响应:\n *\n * - 第一级(达到 warnThreshold,缺省 3):返回 false 不停机,改为提醒——内部\n * 标记 pendingWarn,由本工厂返回的 transformContext 链路在下一轮请求前把提醒\n * 消息追加到请求视图尾部(agent-loop 的 runLoop 在每次 shouldStopAfterTurn\n * 之后、下一次 streamAssistantResponse 之前消费 transformContext,故提醒必然\n * 进入下一次请求);同时把用户可见提醒经 deliverWarn 投递、事实经 onWarn 记\n * 日志。同一连续重复段只提醒一次(warnedForRun 闩);连续段断开(模型改变\n * 行为)即复位,后续新的连续段可再次提醒。\n * - 第二级(达到 stopThreshold,缺省 5):返回 true 请求停机——先向\n * {@link ShouldStopAfterTurnContext} 的 newMessages 追加一条用户可见的停机消\n * 息并交给 deliverNotice(禁止静默停机),再经 onStop 记日志。判据不可能完\n * 美,因此不可逆停机不是第一响应。\n *\n * 同参不同果(合法轮询,如等待外部状态就绪)不计重复:结果要素是全量哈希,\n * 任何字节差异(包括 >200 字符长结果仅尾部变化)都产生不同签名;无文本结果\n * 退化为两要素(见 {@link toolResultHash} 局限声明)。无工具调用或结果缺席的\n * 轮次不进窗口。\n *\n * 挂载点说明:两条链路都由 {@link installBootstrapAgentLoop} 经公共扩展面\n * `api.registerLoopHook` 注册为默认链路(transformContext 注入链注册在默认上\n * 下文策略链之后,提醒落到最终请求视图尾部);disabledBootstrapPlugins 跳过本\n * 插件时均不注册,护栏随之关闭。wireDefaultLoop 只消费链,不直接安装本策略。\n */\nexport function createRepeatedToolCallStopPolicy(\n\toptions: RepeatedToolCallStopPolicyOptions = {},\n): RepeatedToolCallGuard {\n\tconst windowSize = options.windowSize ?? REPEATED_TOOL_CALL_WINDOW_SIZE;\n\tconst warnThreshold = options.warnThreshold ?? REPEATED_TOOL_CALL_WARN_THRESHOLD;\n\tconst stopThreshold = options.stopThreshold ?? REPEATED_TOOL_CALL_STOP_THRESHOLD;\n\tconst window: string[] = [];\n\tlet lastToolName = \"\";\n\tlet lastArgsText = \"\";\n\t/** 待注入的提醒事实:warn 时置位,transformContext 消费即清除(只注入一次)。 */\n\tlet pendingWarn: RepeatedToolCallWarnInfo | undefined;\n\t/** 当前连续重复段已提醒闩:同段不重复提醒;段断开(尾部连续段短于提醒阈值)时复位。 */\n\tlet warnedForRun = false;\n\n\t/** 窗口尾部连续相同签名的段长。 */\n\tconst trailingRunLength = (): number => {\n\t\tconst last = window[window.length - 1];\n\t\tif (last === undefined) return 0;\n\t\tlet run = 0;\n\t\tfor (let i = window.length - 1; i >= 0 && window[i] === last; i -= 1) run += 1;\n\t\treturn run;\n\t};\n\n\tconst shouldStopAfterTurn = (context: ShouldStopAfterTurnContext): boolean => {\n\t\tconst toolCalls = context.message.content.filter((block): block is ToolCall => block.type === \"toolCall\");\n\t\t// 三要素签名需要本轮工具结果:结果缺席时无法判定\"同果\",该轮不进窗口,\n\t\t// 避免把合法轮询误判成重复。\n\t\tif (toolCalls.length > 0 && context.toolResults.length > 0) {\n\t\t\tconst resultById = new Map(context.toolResults.map((result) => [result.toolCallId, result]));\n\t\t\tfor (const call of toolCalls) {\n\t\t\t\twindow.push(repeatedToolCallSignature(call.name, call.arguments, toolResultHash(resultById.get(call.id))));\n\t\t\t\tlastToolName = call.name;\n\t\t\t\tlastArgsText = stableSerializeValue(call.arguments);\n\t\t\t}\n\t\t}\n\t\tif (window.length > windowSize) {\n\t\t\twindow.splice(0, window.length - windowSize);\n\t\t}\n\t\tconst run = trailingRunLength();\n\t\tif (run >= stopThreshold) {\n\t\t\t// 第二级兜底:硬停,走停机全通道(newMessages + deliverNotice + onStop)。\n\t\t\t// 先于提醒判定:stopThreshold 被显式覆盖到不大于 warnThreshold 时停机优先。\n\t\t\tpendingWarn = undefined;\n\t\t\tconst notice = createRepeatedToolCallStopNotice(lastToolName, lastArgsText, stopThreshold);\n\t\t\tcontext.newMessages.push(notice);\n\t\t\toptions.deliverNotice?.(notice);\n\t\t\t// 日志可见通道(D-072 6(a)):与用户可见提示成对发出;onStop 属宿主接线,\n\t\t\t// 策略本身不知道任何具体日志实现。\n\t\t\toptions.onStop?.({ toolName: lastToolName, argsSummary: truncateNoticeArgs(lastArgsText), stopThreshold });\n\t\t\treturn true;\n\t\t}\n\t\tif (run < warnThreshold) {\n\t\t\t// 连续段断开:模型改变行为。复位已提醒闩并丢弃未消费的待注入提醒\n\t\t\t// (正常流程中它已在下一轮请求前被消费;此处只兜底运行中断的残留)。\n\t\t\twarnedForRun = false;\n\t\t\tpendingWarn = undefined;\n\t\t\treturn false;\n\t\t}\n\t\t// 第一级:提醒不停机。标记待注入(transformContext 链路消费),经\n\t\t// deliverWarn/onWarn 双通道可见;同一连续段只提醒一次。\n\t\tif (!warnedForRun) {\n\t\t\twarnedForRun = true;\n\t\t\tpendingWarn = { toolName: lastToolName, argsSummary: truncateNoticeArgs(lastArgsText), warnThreshold };\n\t\t\toptions.deliverWarn?.(createRepeatedToolCallWarnNotice(lastToolName, lastArgsText, warnThreshold));\n\t\t\toptions.onWarn?.(pendingWarn);\n\t\t}\n\t\treturn false;\n\t};\n\n\tconst transformContext = async (\n\t\tmessages: readonly unknown[],\n\t\t_signal?: AbortSignal,\n\t): Promise<readonly unknown[] | undefined> => {\n\t\tconst info = pendingWarn;\n\t\tif (!info) return undefined;\n\t\t// 消费即清除:提醒只注入一次;重复继续发生不重复注入。非变异地追加到\n\t\t// 请求视图尾部(不写 context.messages,故不持久化、不进 newMessages)。\n\t\tpendingWarn = undefined;\n\t\treturn [...messages, createRepeatedToolCallWarnReminder(info.warnThreshold)];\n\t};\n\n\treturn { shouldStopAfterTurn, transformContext };\n}\n\n/**\n * Session-bound host state the default loop links read at execution time.\n * Host wiring injected into the bootstrap executor; not part of the plugin\n * capability surface.\n */\nexport interface AgentLoopWiringV1 {\n\t/** Canonical session id for lifecycle payloads. */\n\tgetSessionId(): string;\n\t/** Detached revision snapshot captured at payload build time. */\n\tgetRevision(): SessionRevisionV1;\n\t/** Correlation id of the current prompt run, if any. */\n\tgetTurnCorrelationId(): string | undefined;\n\t/** Non-fatal delivery error sink (same surface as session-level observation). */\n\tobserveError(error: unknown, extensionPath: string, event: string): void;\n\t/** Image auto-resize setting for tool-result normalization. */\n\tgetImageAutoResize(): boolean;\n\t/** Compaction hook chained first inside the default prepareNextTurn link. */\n\tcompactBeforeNextAssistantResponse(context: AgentContext, signal?: AbortSignal): Promise<AgentContext>;\n\t/** Next-turn refresh snapshot applied last inside the default prepareNextTurn link. */\n\tgetTurnRefresh(): {\n\t\tsystemPrompt: string;\n\t\ttools: AgentTool[];\n\t\tmodel: Model<Api>;\n\t\tthinkingLevel: ThinkingLevel;\n\t};\n\t/** The agent's construction-time prepare adapter, chained after compaction. */\n\tgetInitialPrepareNextTurn():\n\t\t| ((\n\t\t\t\tcontext: PrepareNextTurnContext,\n\t\t\t\tsignal?: AbortSignal,\n\t\t ) => Promise<AgentLoopTurnUpdate | undefined> | AgentLoopTurnUpdate | undefined)\n\t\t| undefined;\n\t/** Configured external context strategy name, if any. */\n\tgetContextStrategyName(): string | undefined;\n}\n\ninterface LifecycleFailureReport {\n\treport?: { failures?: readonly { error: unknown; pluginId: string; kind: string }[] };\n}\n\n/**\n * Default beforeToolCall link: the `tool.call@1` candidate dispatch with\n * identity/revision checks. Moved from the AgentSession tool-hook wiring.\n */\nfunction createDefaultBeforeToolCallLink(\n\truntime: CapabilityRuntime,\n\twiring: AgentLoopWiringV1,\n): AgentLoopBeforeToolCallHookV1 {\n\treturn async ({ toolCallId, toolName, args, signal }) => {\n\t\t// v8 ignore next -- bootstrap lifecycle 恒定义全部生命周期事件,其 token 在 dispose 前恒活跃,提前返回不可达\n\t\tif (!runtime.hasLifecycleEvent(TOOL_CALL_EVENT_ID, TOOL_CALL_EVENT_VERSION)) return undefined;\n\t\tconst data: ToolCallEventDataV1 = {\n\t\t\tversion: 1,\n\t\t\tsessionId: wiring.getSessionId(),\n\t\t\trevision: wiring.getRevision(),\n\t\t\ttoolCallId,\n\t\t\ttoolName,\n\t\t\tinput: detachedSessionSnapshot(args),\n\t\t};\n\t\ttry {\n\t\t\tconst delivery = await runtime.dispatchLifecycle({\n\t\t\t\ttype: TOOL_CALL_EVENT_ID,\n\t\t\t\tversion: TOOL_CALL_EVENT_VERSION,\n\t\t\t\tphase: \"candidate\",\n\t\t\t\tdata,\n\t\t\t\tsource: \"agent-session\",\n\t\t\t\tcorrelationId: wiring.getTurnCorrelationId(),\n\t\t\t\tsignal,\n\t\t\t});\n\t\t\tfor (const failure of delivery.report.failures) {\n\t\t\t\twiring.observeError(\n\t\t\t\t\tfailure.error,\n\t\t\t\t\tfailure.pluginId,\n\t\t\t\t\t`${TOOL_CALL_EVENT_ID}@${TOOL_CALL_EVENT_VERSION}/${failure.kind}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst transformed = delivery.data;\n\t\t\tconst revision = transformed.revision;\n\t\t\tif (\n\t\t\t\ttransformed.sessionId !== data.sessionId ||\n\t\t\t\ttransformed.toolCallId !== data.toolCallId ||\n\t\t\t\ttransformed.toolName !== data.toolName ||\n\t\t\t\trevision.version !== data.revision.version ||\n\t\t\t\trevision.sessionId !== data.revision.sessionId ||\n\t\t\t\trevision.sequence !== data.revision.sequence ||\n\t\t\t\trevision.leafId !== data.revision.leafId\n\t\t\t) {\n\t\t\t\tthrow new Error(t(\"tool.call transform cannot change call identity or revision\"));\n\t\t\t}\n\t\t\treturn { args: transformed.input };\n\t\t} catch (error) {\n\t\t\tconst report = (error as LifecycleFailureReport).report;\n\t\t\tif (report?.failures) {\n\t\t\t\tfor (const failure of report.failures) {\n\t\t\t\t\twiring.observeError(\n\t\t\t\t\t\tfailure.error,\n\t\t\t\t\t\tfailure.pluginId,\n\t\t\t\t\t\t`${TOOL_CALL_EVENT_ID}@${TOOL_CALL_EVENT_VERSION}/${failure.kind}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t};\n}\n\n/**\n * Default afterToolCall link: `tool.execute@1` committed, `tool.result.raw@1`\n * raw, the legacy `tool_result` extension hook (via wiring), image\n * normalization, and the `tool.result.transform@1` candidate dispatch — in the\n * exact order the previous single AgentSession hook used. Moved from the\n * AgentSession tool-hook wiring.\n */\nfunction createDefaultAfterToolCallLink(\n\truntime: CapabilityRuntime,\n\twiring: AgentLoopWiringV1,\n): AgentLoopAfterToolCallHookV1 {\n\treturn async ({ toolCallId, toolName, args, result, isError, signal }) => {\n\t\tconst toolResult = result as {\n\t\t\tcontent?: (TextContent | ImageContent)[];\n\t\t\tdetails?: unknown;\n\t\t\tisError?: boolean;\n\t\t\tusage?: Usage;\n\t\t};\n\t\tif (runtime.hasLifecycleEvent(TOOL_EXECUTE_EVENT_ID, TOOL_EXECUTE_EVENT_VERSION)) {\n\t\t\ttry {\n\t\t\t\tconst data: ToolExecuteEventDataV1 = {\n\t\t\t\t\tversion: 1,\n\t\t\t\t\tsessionId: wiring.getSessionId(),\n\t\t\t\t\trevision: wiring.getRevision(),\n\t\t\t\t\ttoolCallId,\n\t\t\t\t\ttoolName,\n\t\t\t\t\tinput: detachedSessionSnapshot(args),\n\t\t\t\t\tisError,\n\t\t\t\t\tcontent: detachedSessionSnapshot(toolResult.content ?? []),\n\t\t\t\t};\n\t\t\t\tconst delivery = await runtime.dispatchLifecycle({\n\t\t\t\t\ttype: TOOL_EXECUTE_EVENT_ID,\n\t\t\t\t\tversion: TOOL_EXECUTE_EVENT_VERSION,\n\t\t\t\t\tphase: \"committed\",\n\t\t\t\t\tdata,\n\t\t\t\t\tsource: \"agent-session\",\n\t\t\t\t\tcorrelationId: wiring.getTurnCorrelationId(),\n\t\t\t\t});\n\t\t\t\tfor (const failure of delivery.report.failures) {\n\t\t\t\t\twiring.observeError(\n\t\t\t\t\t\tfailure.error,\n\t\t\t\t\t\tfailure.pluginId,\n\t\t\t\t\t\t`${TOOL_EXECUTE_EVENT_ID}@${TOOL_EXECUTE_EVENT_VERSION}/${failure.kind}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tconst report = (error as LifecycleFailureReport).report;\n\t\t\t\tif (report?.failures) {\n\t\t\t\t\tfor (const failure of report.failures) {\n\t\t\t\t\t\twiring.observeError(\n\t\t\t\t\t\t\tfailure.error,\n\t\t\t\t\t\t\tfailure.pluginId,\n\t\t\t\t\t\t\t`${TOOL_EXECUTE_EVENT_ID}@${TOOL_EXECUTE_EVENT_VERSION}/${failure.kind}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\twiring.observeError(\n\t\t\t\t\t\terror,\n\t\t\t\t\t\t\"<capability-lifecycle>\",\n\t\t\t\t\t\t`${TOOL_EXECUTE_EVENT_ID}@${TOOL_EXECUTE_EVENT_VERSION}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (runtime.hasLifecycleEvent(TOOL_RESULT_RAW_EVENT_ID, TOOL_RESULT_RAW_EVENT_VERSION) && !signal?.aborted) {\n\t\t\ttry {\n\t\t\t\tconst data: ToolResultRawEventDataV1 = {\n\t\t\t\t\tversion: 1,\n\t\t\t\t\tsessionId: wiring.getSessionId(),\n\t\t\t\t\trevision: wiring.getRevision(),\n\t\t\t\t\ttoolCallId,\n\t\t\t\t\ttoolName,\n\t\t\t\t\tisError,\n\t\t\t\t\tcontent: detachedSessionSnapshot(toolResult.content ?? []),\n\t\t\t\t};\n\t\t\t\tconst delivery = await runtime.dispatchLifecycle({\n\t\t\t\t\ttype: TOOL_RESULT_RAW_EVENT_ID,\n\t\t\t\t\tversion: TOOL_RESULT_RAW_EVENT_VERSION,\n\t\t\t\t\tphase: \"raw\",\n\t\t\t\t\tdata,\n\t\t\t\t\tsource: \"agent-session\",\n\t\t\t\t\tcorrelationId: wiring.getTurnCorrelationId(),\n\t\t\t\t\tsignal,\n\t\t\t\t});\n\t\t\t\tfor (const failure of delivery.report.failures) {\n\t\t\t\t\twiring.observeError(\n\t\t\t\t\t\tfailure.error,\n\t\t\t\t\t\tfailure.pluginId,\n\t\t\t\t\t\t`${TOOL_RESULT_RAW_EVENT_ID}@${TOOL_RESULT_RAW_EVENT_VERSION}/${failure.kind}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tif (!signal?.aborted) {\n\t\t\t\t\twiring.observeError(\n\t\t\t\t\t\terror,\n\t\t\t\t\t\t\"host\",\n\t\t\t\t\t\t`${TOOL_RESULT_RAW_EVENT_ID}@${TOOL_RESULT_RAW_EVENT_VERSION}/dispatch`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst content = toolResult.content ?? [];\n\t\t// Images are normalized before the transform dispatch so injected or\n\t\t// replaced images are normalized too.\n\t\tconst normalizedContent = await normalizeToolResultImages(content, {\n\t\t\tautoResizeImages: wiring.getImageAutoResize(),\n\t\t});\n\t\tconst legacyIsError = isError;\n\n\t\t// Standard tool.result.transform@1 candidate dispatch runs on the\n\t\t// normalized result candidate, after the legacy tool_result hook and\n\t\t// before the result is returned for session commit. Transform output is\n\t\t// schema-validated and identity-checked; failures propagate to the\n\t\t// agent loop's existing afterToolCall error isolation.\n\t\tlet finalContent: (typeof normalizedContent)[number][] = normalizedContent;\n\t\tlet finalIsError = legacyIsError;\n\t\tif (\n\t\t\truntime.hasLifecycleEvent(TOOL_RESULT_TRANSFORM_EVENT_ID, TOOL_RESULT_TRANSFORM_EVENT_VERSION) &&\n\t\t\t!signal?.aborted\n\t\t) {\n\t\t\tconst data: ToolResultTransformEventDataV1 = {\n\t\t\t\tversion: 1,\n\t\t\t\tsessionId: wiring.getSessionId(),\n\t\t\t\trevision: wiring.getRevision(),\n\t\t\t\ttoolCallId,\n\t\t\t\ttoolName,\n\t\t\t\tisError: legacyIsError,\n\t\t\t\tcontent: detachedSessionSnapshot(normalizedContent),\n\t\t\t};\n\t\t\ttry {\n\t\t\t\tconst delivery = await runtime.dispatchLifecycle({\n\t\t\t\t\ttype: TOOL_RESULT_TRANSFORM_EVENT_ID,\n\t\t\t\t\tversion: TOOL_RESULT_TRANSFORM_EVENT_VERSION,\n\t\t\t\t\tphase: \"candidate\",\n\t\t\t\t\tdata,\n\t\t\t\t\tsource: \"agent-session\",\n\t\t\t\t\tcorrelationId: wiring.getTurnCorrelationId(),\n\t\t\t\t\tsignal,\n\t\t\t\t});\n\t\t\t\tfor (const failure of delivery.report.failures) {\n\t\t\t\t\twiring.observeError(\n\t\t\t\t\t\tfailure.error,\n\t\t\t\t\t\tfailure.pluginId,\n\t\t\t\t\t\t`${TOOL_RESULT_TRANSFORM_EVENT_ID}@${TOOL_RESULT_TRANSFORM_EVENT_VERSION}/${failure.kind}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tconst transformed = delivery.data;\n\t\t\t\tconst revision = transformed.revision;\n\t\t\t\tif (\n\t\t\t\t\ttransformed.sessionId !== data.sessionId ||\n\t\t\t\t\ttransformed.toolCallId !== data.toolCallId ||\n\t\t\t\t\ttransformed.toolName !== data.toolName ||\n\t\t\t\t\trevision.version !== data.revision.version ||\n\t\t\t\t\trevision.sessionId !== data.revision.sessionId ||\n\t\t\t\t\trevision.sequence !== data.revision.sequence ||\n\t\t\t\t\trevision.leafId !== data.revision.leafId\n\t\t\t\t) {\n\t\t\t\t\tthrow new Error(t(\"tool.result.transform transform cannot change result identity or revision\"));\n\t\t\t\t}\n\t\t\t\tfinalContent = transformed.content as (typeof normalizedContent)[number][];\n\t\t\t\tfinalIsError = transformed.isError;\n\t\t\t} catch (error) {\n\t\t\t\tconst report = (error as LifecycleFailureReport).report;\n\t\t\t\tif (report?.failures) {\n\t\t\t\t\tfor (const failure of report.failures) {\n\t\t\t\t\t\twiring.observeError(\n\t\t\t\t\t\t\tfailure.error,\n\t\t\t\t\t\t\tfailure.pluginId,\n\t\t\t\t\t\t\t`${TOOL_RESULT_TRANSFORM_EVENT_ID}@${TOOL_RESULT_TRANSFORM_EVENT_VERSION}/${failure.kind}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\n\t\tif (finalContent === content && finalIsError === isError) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn {\n\t\t\tcontent: finalContent,\n\t\t\tdetails: toolResult.details,\n\t\t\tisError: finalIsError,\n\t\t\tusage: toolResult.usage,\n\t\t};\n\t};\n}\n\n/**\n * Default transformContext link: the explicitly selected capability context\n * strategy. Moved from the AgentSession context-transform wiring (the legacy\n * chaining wrapper keeps composing it for the pre-chain path).\n */\nfunction createDefaultTransformContextLink(\n\truntime: CapabilityRuntime,\n\twiring: AgentLoopWiringV1,\n): AgentLoopTransformContextHookV1 {\n\treturn async (messages, signal) => {\n\t\tconst strategyName = wiring.getContextStrategyName();\n\t\tif (!strategyName) return undefined;\n\t\treturn applyCapabilityContextStrategy(\n\t\t\tmessages as AgentMessage[],\n\t\t\truntime,\n\t\t\tstrategyName,\n\t\t\twiring.getSessionId(),\n\t\t\tsignal,\n\t\t);\n\t};\n}\n\n/**\n * Default prepareNextTurn link: compaction first, then the agent's\n * construction-time prepare adapter, then the system-prompt/tools/model/\n * thinking-level refresh. Moved from the AgentSession next-turn wiring.\n */\nfunction createDefaultPrepareNextTurnLink(wiring: AgentLoopWiringV1): AgentLoopPrepareNextTurnHookV1 {\n\treturn async (turn, signal) => {\n\t\tconst turnContext = turn as PrepareNextTurnContext;\n\t\tconst context = await wiring.compactBeforeNextAssistantResponse(turnContext.context, signal);\n\t\tconst previousSnapshot = await wiring.getInitialPrepareNextTurn()?.({ ...turnContext, context }, signal);\n\t\tconst nextContext = previousSnapshot?.context ?? context;\n\t\tconst refresh = wiring.getTurnRefresh();\n\n\t\treturn {\n\t\t\t...previousSnapshot,\n\t\t\tcontext: {\n\t\t\t\t...nextContext,\n\t\t\t\tsystemPrompt: refresh.systemPrompt,\n\t\t\t\ttools: refresh.tools,\n\t\t\t},\n\t\t\tmodel: refresh.model,\n\t\t\tthinkingLevel: refresh.thinkingLevel,\n\t\t};\n\t};\n}\n\n/**\n * Install the default agent-loop executor as a first-party plugin. Default\n * links register first, so third-party links registered later chain after\n * them in registration order.\n */\nexport function installBootstrapAgentLoop(\n\truntime: CapabilityRuntime,\n\twiring: AgentLoopWiringV1,\n): CapabilityPluginHandle {\n\treturn loadCapabilityPluginSync(\n\t\truntime,\n\t\t{\n\t\t\tid: BOOTSTRAP_AGENT_LOOP_PLUGIN_ID,\n\t\t\tversion: \"0.0.0\",\n\t\t\tapiVersion: EXPERIMENTAL_PUBLIC_API_VERSION,\n\t\t\tentry: \"<embedded:bootstrap-agent-loop>\",\n\t\t},\n\t\t(api) => {\n\t\t\tapi.registerLoopHook(\"beforeToolCall\", createDefaultBeforeToolCallLink(runtime, wiring));\n\t\t\tapi.registerLoopHook(\"afterToolCall\", createDefaultAfterToolCallLink(runtime, wiring));\n\t\t\tapi.registerLoopHook(\"transformContext\", createDefaultTransformContextLink(runtime, wiring));\n\t\t\tapi.registerLoopHook(\"prepareNextTurn\", createDefaultPrepareNextTurnLink(wiring));\n\t\t\t// The default repeated-tool-call guard rides the public loop-hook\n\t\t\t// chains like any other first-party link; disabling this plugin\n\t\t\t// removes both of its links. It answers with two levels (judgments\n\t\t\t// can be wrong, so an irreversible stop is never the first response):\n\t\t\t// - warn (third identical call): the shouldStopAfterTurn link votes\n\t\t\t// false and the transformContext link below injects a reminder into\n\t\t\t// the next request view (runLoop consumes transformContext after\n\t\t\t// shouldStopAfterTurn and before the next model call); the user-\n\t\t\t// facing warn notice is delivered through the public SessionAPI\n\t\t\t// sendMessage face (persisted custom_message entry with live\n\t\t\t// message_start/message_end rendering), plus a warn log through\n\t\t\t// the public LoggerAPI.\n\t\t\t// - stop (fifth identical call): the shouldStopAfterTurn link votes\n\t\t\t// true; the stop notice rides agent_end newMessages, sendMessage\n\t\t\t// persistence + rendering, and a warn log — all channels on.\n\t\t\t// Absent host features (session/logger) degrade to the remaining\n\t\t\t// channels instead of blocking the guard.\n\t\t\tconst loopGuard = createRepeatedToolCallStopPolicy({\n\t\t\t\tdeliverWarn: (notice) => {\n\t\t\t\t\tvoid api.session?.sendMessage?.(notice, { triggerTurn: false });\n\t\t\t\t},\n\t\t\t\tonWarn: (info) => {\n\t\t\t\t\tapi.logger?.warn(\"Loop guard warned the model\", {\n\t\t\t\t\t\ttool: info.toolName,\n\t\t\t\t\t\trepeats: info.warnThreshold,\n\t\t\t\t\t\targsSummary: info.argsSummary,\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tdeliverNotice: (notice) => {\n\t\t\t\t\tvoid api.session?.sendMessage?.(notice, { triggerTurn: false });\n\t\t\t\t},\n\t\t\t\tonStop: (info) => {\n\t\t\t\t\tapi.logger?.warn(\"Loop guard stopped the turn\", {\n\t\t\t\t\t\ttool: info.toolName,\n\t\t\t\t\t\trepeats: info.stopThreshold,\n\t\t\t\t\t\targsSummary: info.argsSummary,\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t});\n\t\t\tapi.registerLoopHook(\"shouldStopAfterTurn\", loopGuard.shouldStopAfterTurn);\n\t\t\t// Registered after the default context-strategy link, so the reminder\n\t\t\t// is appended to the final post-strategy request view (survives any\n\t\t\t// strategy pruning) at its tail.\n\t\t\tapi.registerLoopHook(\"transformContext\", loopGuard.transformContext);\n\t\t\t// The default continuation strategy reproduces the host's own\n\t\t\t// post-run decision byte for byte; a replacement strategy overrides\n\t\t\t// the continue/stop call through registerRunLoopStrategy.\n\t\t\tapi.registerRunLoopStrategy(DEFAULT_RUN_LOOP_STRATEGY_NAME, {\n\t\t\t\tdecideNextCycle: (request) => ({ continueLoop: request.hostWillContinue }),\n\t\t\t});\n\t\t},\n\t);\n}\n"]}
|
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
*/
|
|
20
20
|
import { createHash } from "node:crypto";
|
|
21
21
|
import { normalizeToolResultImages } from "../../utils/tool-result-images.js";
|
|
22
|
+
import { t } from "../i18n/index.js";
|
|
22
23
|
import { loadCapabilityPluginSync } from "./capability-plugin.js";
|
|
23
24
|
import { applyCapabilityContextStrategy } from "./context-strategy-binding.js";
|
|
24
25
|
import { TOOL_CALL_EVENT_ID, TOOL_CALL_EVENT_VERSION, TOOL_EXECUTE_EVENT_ID, TOOL_EXECUTE_EVENT_VERSION, TOOL_RESULT_RAW_EVENT_ID, TOOL_RESULT_RAW_EVENT_VERSION, TOOL_RESULT_TRANSFORM_EVENT_ID, TOOL_RESULT_TRANSFORM_EVENT_VERSION, } from "./lifecycle-catalog.js";
|
|
@@ -293,7 +294,7 @@ function createDefaultBeforeToolCallLink(runtime, wiring) {
|
|
|
293
294
|
revision.sessionId !== data.revision.sessionId ||
|
|
294
295
|
revision.sequence !== data.revision.sequence ||
|
|
295
296
|
revision.leafId !== data.revision.leafId) {
|
|
296
|
-
throw new Error(
|
|
297
|
+
throw new Error(t("tool.call transform cannot change call identity or revision"));
|
|
297
298
|
}
|
|
298
299
|
return { args: transformed.input };
|
|
299
300
|
}
|
|
@@ -431,7 +432,7 @@ function createDefaultAfterToolCallLink(runtime, wiring) {
|
|
|
431
432
|
revision.sessionId !== data.revision.sessionId ||
|
|
432
433
|
revision.sequence !== data.revision.sequence ||
|
|
433
434
|
revision.leafId !== data.revision.leafId) {
|
|
434
|
-
throw new Error(
|
|
435
|
+
throw new Error(t("tool.result.transform transform cannot change result identity or revision"));
|
|
435
436
|
}
|
|
436
437
|
finalContent = transformed.content;
|
|
437
438
|
finalIsError = transformed.isError;
|