@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":"embedded-sdk.js","sourceRoot":"","sources":["../../src/core/embedded-sdk.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\ttype AgentCapabilityContractV1,\n\ttype AgentDefinitionSnapshotV1,\n\ttype AgentInstanceSnapshotV1,\n\tbuildAgentCapabilityContractV1,\n\tbuildAgentDefinitionSnapshotV1,\n\tbuildAgentInstanceSnapshotV1,\n\tbuildErrorEnvelopeV1,\n\tbuildEventEnvelopeV1,\n\tbuildOperationSnapshotV1,\n\tbuildSessionSnapshotV1,\n\ttype ErrorEnvelopeV1,\n\ttype EventEnvelopeV1,\n\ttype HostContextV1,\n\ttype JsonValue,\n\ttype OperationSnapshotV1,\n\ttype SessionRevisionV1,\n\ttype SessionSnapshotV1,\n} from \"./agent-capability-contract.ts\";\nimport { createAgentCompositionRuntime } from \"./extensions/agent-composition.ts\";\nimport {\n\tOPERATION_CANCEL_EVENT_ID,\n\tOPERATION_END_EVENT_ID,\n\tOPERATION_START_EVENT_ID,\n\tvalidateOperationCancelEventDataV1,\n\tvalidateOperationEndEventDataV1,\n\tvalidateOperationStartEventDataV1,\n} from \"./extensions/lifecycle-catalog.ts\";\nimport type {\n\tAgentCompositionAPI,\n\tAgentCompositionDefinitionBinding,\n\tAgentContextCommitRequestV1,\n\tAgentContextFacadeV1,\n\tAgentControllerLease,\n\tAgentDefinition,\n\tAgentInstance,\n\tAgentInstanceResult,\n\tOperationHandle,\n\tPromptOutcome,\n\tSessionAPI,\n} from \"./extensions/public-api.ts\";\n\n/**\n * An in-process binding over AgentComposition. It intentionally excludes the\n * transitional AgentSession command surface and every remote transport concern.\n */\nexport interface EmbeddedSdkBindingV1 {\n\treadonly version: 1;\n\treadonly contract: AgentCapabilityContractV1;\n\treadonly hostContext: HostContextV1;\n\t/** Optional session-backed facade supplied by an in-process host. */\n\treadonly session?: EmbeddedSessionBindingV1;\n\tdefine<TInput extends JsonValue, TResult extends JsonValue>(\n\t\tdefinition: AgentDefinition<TInput, TResult>,\n\t): EmbeddedAgentDefinitionV1<TInput, TResult>;\n\tcreate<TInput extends JsonValue, TResult extends JsonValue>(\n\t\tdefinition: EmbeddedAgentDefinitionV1<TInput, TResult> | { readonly id: string; readonly version: number },\n\t\toptions?: { readonly id?: string; readonly parentInstanceId?: string },\n\t): EmbeddedAgentInstanceV1<TInput, TResult>;\n\tlistInstances(): readonly AgentInstanceSnapshotV1[];\n\tsubscribe(listener: EmbeddedSdkEventListenerV1): EmbeddedSdkSubscriptionV1;\n\tdispose(): Promise<void>;\n}\n\nexport interface EmbeddedSdkOptionsV1 {\n\treadonly composition?: AgentCompositionAPI;\n\t/** Optional host session to expose through the stable in-process facade. */\n\treadonly session?: SessionAPI;\n\t/** Whether this binding owns and may remove definitions from the supplied composition. */\n\treadonly ownsComposition?: boolean;\n\treadonly mode?: HostContextV1[\"mode\"];\n\treadonly features?: readonly string[];\n\treadonly clock?: () => number;\n\treadonly idFactory?: (kind: \"event\" | \"delivery\", sequence: number) => string;\n}\n\n/** Stable, detached session projection used by embedded and future service bindings. */\nexport interface EmbeddedSessionBindingV1 {\n\treadonly version: 1;\n\tgetSessionId(): string;\n\tgetRevision(): SessionRevisionV1;\n\tsnapshot(): SessionSnapshotV1;\n\tgetMessages(): readonly unknown[];\n\tgetBranchEntries(): readonly unknown[];\n\tisIdle(): boolean;\n\tprompt(text: string): Promise<PromptOutcome>;\n\tsteer(text: string): Promise<void>;\n\tabort(): Promise<void>;\n\twaitForIdle(): Promise<void>;\n\treadonly context?: AgentContextFacadeV1;\n}\n\nexport interface EmbeddedAgentDefinitionV1<_TInput extends JsonValue, _TResult extends JsonValue> {\n\treadonly snapshot: AgentDefinitionSnapshotV1;\n}\n\nexport interface EmbeddedControllerLeaseV1 {\n\treadonly id: string;\n\treadonly instanceId: string;\n\treadonly owner: string;\n\treadonly revision: number;\n\tisActive(): boolean;\n\trelease(): Promise<void>;\n}\n\nexport interface EmbeddedOperationHandleV1<TResult extends JsonValue> {\n\treadonly id: string;\n\treadonly result: Promise<TResult>;\n\tsnapshot(): OperationSnapshotV1;\n\tcancel(reason?: string): Promise<void>;\n}\n\nexport interface EmbeddedAgentInstanceV1<TInput extends JsonValue, TResult extends JsonValue> {\n\treadonly id: string;\n\tsnapshot(): AgentInstanceSnapshotV1;\n\tacquireControllerLease(owner?: string): Promise<EmbeddedControllerLeaseV1>;\n\trun(\n\t\tinput: TInput,\n\t\toptions: { readonly lease: EmbeddedControllerLeaseV1; readonly signal?: AbortSignal },\n\t): EmbeddedOperationHandleV1<TResult>;\n\twait(): Promise<EmbeddedAgentResultV1<TResult>>;\n\tcancel(reason?: string): Promise<void>;\n\tdispose(): Promise<void>;\n}\n\nexport type EmbeddedAgentResultV1<TResult extends JsonValue> =\n\t| { readonly status: \"succeeded\"; readonly output: TResult; readonly revision: number }\n\t| {\n\t\t\treadonly status: \"failed\" | \"cancelled\" | \"disposed\";\n\t\t\treadonly error?: ErrorEnvelopeV1;\n\t\t\treadonly revision: number;\n\t };\n\nexport type EmbeddedSdkEventListenerV1 = (event: EventEnvelopeV1) => void;\n\nexport interface EmbeddedSdkSubscriptionV1 {\n\treadonly id: string;\n\tdispose(): void;\n}\n\nfunction detachedFreeze<T>(value: T, seen = new WeakMap<object, unknown>()): T {\n\tif (value === null || typeof value !== \"object\") return value;\n\tconst existing = seen.get(value);\n\tif (existing !== undefined) return existing as T;\n\tif (Array.isArray(value)) {\n\t\tconst copy: unknown[] = [];\n\t\tseen.set(value, copy);\n\t\tfor (const child of value) copy.push(detachedFreeze(child, seen));\n\t\treturn Object.freeze(copy) as T;\n\t}\n\tconst copy: Record<string, unknown> = Object.create(null) as Record<string, unknown>;\n\tseen.set(value, copy);\n\tfor (const [key, child] of Object.entries(value as Record<string, unknown>)) copy[key] = detachedFreeze(child, seen);\n\treturn Object.freeze(copy) as T;\n}\n\nfunction assertActive(disposed: boolean, label: string): void {\n\tif (disposed) throw new Error(`Embedded SDK binding is disposed: ${label}`);\n}\n\nfunction errorEnvelope(error: unknown, code: string): ErrorEnvelopeV1 {\n\tconst message = error instanceof Error ? error.message : String(error);\n\treturn buildErrorEnvelopeV1({\n\t\tversion: 1,\n\t\tcode,\n\t\tmessage,\n\t\tretryable: false,\n\t\t...(error instanceof Error ? { name: error.name } : {}),\n\t});\n}\n\nfunction agentDefinitionSnapshot<TInput extends JsonValue, TResult extends JsonValue>(\n\tdefinition: AgentDefinition<TInput, TResult>,\n): AgentDefinitionSnapshotV1 {\n\treturn buildAgentDefinitionSnapshotV1({\n\t\tversion: 1,\n\t\tid: definition.id,\n\t\tdefinitionVersion: definition.version,\n\t\trole: definition.role,\n\t\tcapabilities: [],\n\t\t...(definition.owner === undefined ? {} : { owner: definition.owner }),\n\t});\n}\n\nfunction agentInstanceSnapshot(\n\tsnapshot: ReturnType<AgentInstance<unknown, unknown>[\"snapshot\"]>,\n): AgentInstanceSnapshotV1 {\n\treturn buildAgentInstanceSnapshotV1({\n\t\tversion: 1,\n\t\tid: snapshot.id,\n\t\tdefinitionId: snapshot.definitionId,\n\t\tdefinitionVersion: snapshot.definitionVersion,\n\t\trole: snapshot.role,\n\t\tstatus: snapshot.status,\n\t\trevision: snapshot.revision,\n\t\t...(snapshot.parentInstanceId === undefined ? {} : { parentInstanceId: snapshot.parentInstanceId }),\n\t\t...(snapshot.leaseOwner === undefined ? {} : { leaseOwner: snapshot.leaseOwner }),\n\t});\n}\n\nfunction operationStatus(status: ReturnType<OperationHandle<unknown>[\"status\"]>): OperationSnapshotV1[\"status\"] {\n\treturn status;\n}\n\nfunction resultSnapshot<TResult extends JsonValue>(\n\tresult: AgentInstanceResult<TResult>,\n): EmbeddedAgentResultV1<TResult> {\n\tif (result.status === \"succeeded\") {\n\t\treturn detachedFreeze({\n\t\t\tstatus: \"succeeded\" as const,\n\t\t\toutput: canonicalOutput(result.output as TResult, `wait:${result.revision}`),\n\t\t\trevision: result.revision,\n\t\t});\n\t}\n\treturn detachedFreeze({\n\t\tstatus: result.status,\n\t\trevision: result.revision,\n\t\t...(result.error === undefined ? {} : { error: errorEnvelope(result.error, `agent_${result.status}`) }),\n\t});\n}\n\nfunction canonicalOutput<TResult extends JsonValue>(value: TResult, operationId: string): TResult {\n\tbuildOperationSnapshotV1({\n\t\tversion: 1,\n\t\toperationId,\n\t\tkind: \"agent.run\",\n\t\tstatus: \"succeeded\",\n\t\tterminal: { version: 1, status: \"succeeded\", result: value },\n\t});\n\treturn detachedFreeze(value);\n}\n\nfunction canonicalInput<TInput extends JsonValue>(value: TInput): TInput {\n\tif (value === undefined) throw new Error(\"Embedded SDK run input must be JSON-compatible\");\n\tbuildOperationSnapshotV1({\n\t\tversion: 1,\n\t\toperationId: \"embedded-sdk:input\",\n\t\tkind: \"agent.run\",\n\t\tstatus: \"succeeded\",\n\t\tterminal: { version: 1, status: \"succeeded\", result: value },\n\t});\n\treturn detachedFreeze(value);\n}\n\nfunction createEmbeddedSessionBindingV1(session: SessionAPI): EmbeddedSessionBindingV1 {\n\tif (!session.getRevision) throw new Error(\"Embedded SDK session requires revision support\");\n\tconst getRevision = (): SessionRevisionV1 => detachedFreeze(session.getRevision!());\n\tconst context =\n\t\tsession.getContextSnapshot && session.commitContext\n\t\t\t? Object.freeze({\n\t\t\t\t\tversion: 1 as const,\n\t\t\t\t\tget: <TValue = unknown>() => detachedFreeze(session.getContextSnapshot!<TValue>()),\n\t\t\t\t\tcommit: <TValue = unknown>(request: AgentContextCommitRequestV1<TValue>) =>\n\t\t\t\t\t\tsession.commitContext!(request),\n\t\t\t\t})\n\t\t\t: undefined;\n\treturn Object.freeze({\n\t\tversion: 1 as const,\n\t\tgetSessionId: () => session.getSessionId(),\n\t\tgetRevision,\n\t\tsnapshot: () =>\n\t\t\tbuildSessionSnapshotV1({ version: 1, sessionId: session.getSessionId(), revision: getRevision() }),\n\t\tgetMessages: () => detachedFreeze(session.getMessages()),\n\t\tgetBranchEntries: () => detachedFreeze(session.getBranchEntries()),\n\t\tisIdle: () => session.isIdle(),\n\t\tprompt: (text: string) => session.prompt(text),\n\t\tsteer: (text: string) =>\n\t\t\tsession.steer ? session.steer(text) : Promise.reject(new Error(\"Embedded SDK session does not support steer\")),\n\t\tabort: () => session.abort(),\n\t\twaitForIdle: () => session.waitForIdle(),\n\t\t...(context === undefined ? {} : { context }),\n\t});\n}\n\nexport function createEmbeddedSdkBindingV1(options: EmbeddedSdkOptionsV1 = {}): EmbeddedSdkBindingV1 {\n\tconst composition = options.composition ?? createAgentCompositionRuntime();\n\tconst ownsComposition = options.ownsComposition ?? options.composition === undefined;\n\tconst defaultFeatures = [\n\t\t\"agent-composition-v1\",\n\t\t...(options.session === undefined ? [] : [\"session\", \"session-revision-v1\", \"context\"]),\n\t];\n\tconst hostContext = detachedFreeze({\n\t\tmode: options.mode ?? \"full-control\",\n\t\tfeatures: [...(options.features ?? defaultFeatures)].sort(),\n\t\ttransports: [\"in-process\"] as const,\n\t}) as HostContextV1;\n\tconst session = options.session === undefined ? undefined : createEmbeddedSessionBindingV1(options.session);\n\tconst contract = buildAgentCapabilityContractV1({\n\t\tcontractId: \"agent-forge/agent-capability-contract\",\n\t\tcapabilities: [],\n\t\thostContext,\n\t});\n\tconst definitions = new Map<string, AgentDefinition<JsonValue, JsonValue>>();\n\tconst instances = new Map<string, EmbeddedAgentInstanceV1<JsonValue, JsonValue>>();\n\tconst listeners = new Map<string, EmbeddedSdkEventListenerV1>();\n\tlet sequence = 0;\n\tlet disposePromise: Promise<void> | undefined;\n\tlet disposed = false;\n\n\tconst nextId = (kind: \"event\" | \"delivery\"): string => {\n\t\tsequence += 1;\n\t\treturn options.idFactory?.(kind, sequence) ?? `embedded-sdk:${kind}:${sequence}`;\n\t};\n\tconst emit = (type: string, data: JsonValue, operationId?: string): void => {\n\t\tconst event = buildEventEnvelopeV1({\n\t\t\tid: nextId(\"event\"),\n\t\t\tdeliveryId: nextId(\"delivery\"),\n\t\t\ttype,\n\t\t\tsource: \"embedded-sdk\",\n\t\t\ttimestamp: options.clock?.() ?? 0,\n\t\t\tcategory:\n\t\t\t\ttype === OPERATION_START_EVENT_ID || type === OPERATION_CANCEL_EVENT_ID || type === OPERATION_END_EVENT_ID\n\t\t\t\t\t? \"authoritative\"\n\t\t\t\t\t: \"observation\",\n\t\t\tdeliveryGuarantee: \"best-effort\",\n\t\t\tdata,\n\t\t\t...(operationId === undefined ? {} : { operationId, correlationId: operationId }),\n\t\t});\n\t\tfor (const listener of listeners.values()) {\n\t\t\ttry {\n\t\t\t\tlistener(event);\n\t\t\t} catch {\n\t\t\t\t// Observers must not affect an Agent operation.\n\t\t\t}\n\t\t}\n\t};\n\tconst resolveDefinition = <TInput extends JsonValue, TResult extends JsonValue>(\n\t\tdefinition: EmbeddedAgentDefinitionV1<TInput, TResult> | { readonly id: string; readonly version: number },\n\t): AgentDefinition<TInput, TResult> => {\n\t\tconst snapshot = \"snapshot\" in definition ? definition.snapshot : definition;\n\t\tconst definitionVersion = (\n\t\t\t\"definitionVersion\" in snapshot ? snapshot.definitionVersion : snapshot.version\n\t\t) as number;\n\t\tconst resolved = definitions.get(`${snapshot.id}@${definitionVersion}`);\n\t\tif (resolved) return resolved as AgentDefinition<TInput, TResult>;\n\t\tif (options.composition !== undefined) {\n\t\t\treturn composition.get<TInput, TResult>(snapshot.id, definitionVersion);\n\t\t}\n\t\tthrow new Error(`Embedded SDK has no defined Agent: ${snapshot.id}@${definitionVersion}`);\n\t};\n\n\tconst binding: EmbeddedSdkBindingV1 = {\n\t\tversion: 1,\n\t\tcontract,\n\t\thostContext,\n\t\t...(session === undefined ? {} : { session }),\n\t\tdefine<TInput extends JsonValue, TResult extends JsonValue>(definition: AgentDefinition<TInput, TResult>) {\n\t\t\tassertActive(disposed, \"define\");\n\t\t\tconst registered = composition.define(definition);\n\t\t\tdefinitions.set(`${registered.id}@${registered.version}`, registered as AgentDefinition<JsonValue, JsonValue>);\n\t\t\treturn detachedFreeze({ snapshot: agentDefinitionSnapshot(registered) });\n\t\t},\n\t\tcreate<TInput extends JsonValue, TResult extends JsonValue>(\n\t\t\tdefinition: EmbeddedAgentDefinitionV1<TInput, TResult> | { readonly id: string; readonly version: number },\n\t\t\tinstanceOptions: { readonly id?: string; readonly parentInstanceId?: string } = {},\n\t\t) {\n\t\t\tassertActive(disposed, \"create\");\n\t\t\tconst raw = composition.create(resolveDefinition(definition), instanceOptions);\n\t\t\tlet instanceDisposed = false;\n\t\t\tlet instanceDisposePromise: Promise<void> | undefined;\n\t\t\tconst leases = new WeakMap<EmbeddedControllerLeaseV1, AgentControllerLease>();\n\t\t\tconst wrapper: EmbeddedAgentInstanceV1<TInput, TResult> = {\n\t\t\t\tid: raw.id,\n\t\t\t\tsnapshot: () => {\n\t\t\t\t\tassertActive(disposed || instanceDisposed, raw.id);\n\t\t\t\t\treturn agentInstanceSnapshot(raw.snapshot());\n\t\t\t\t},\n\t\t\t\tacquireControllerLease: async (owner?: string) => {\n\t\t\t\t\tassertActive(disposed || instanceDisposed, raw.id);\n\t\t\t\t\tconst lease = await raw.acquireControllerLease(owner);\n\t\t\t\t\tconst projected: EmbeddedControllerLeaseV1 = Object.freeze({\n\t\t\t\t\t\tid: lease.id,\n\t\t\t\t\t\tinstanceId: lease.instanceId,\n\t\t\t\t\t\towner: lease.owner,\n\t\t\t\t\t\trevision: lease.revision,\n\t\t\t\t\t\tisActive: () => !disposed && !instanceDisposed && lease.isActive(),\n\t\t\t\t\t\trelease: async () => {\n\t\t\t\t\t\t\tassertActive(disposed || instanceDisposed, raw.id);\n\t\t\t\t\t\t\tawait lease.release();\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t\tleases.set(projected, lease);\n\t\t\t\t\treturn projected;\n\t\t\t\t},\n\t\t\t\trun: (input, runOptions) => {\n\t\t\t\t\tassertActive(disposed || instanceDisposed, raw.id);\n\t\t\t\t\tconst lease = leases.get(runOptions.lease);\n\t\t\t\t\tif (!lease) throw new Error(`Embedded SDK lease does not belong to Agent instance: ${raw.id}`);\n\t\t\t\t\tconst operation = raw.run(canonicalInput(input), { lease, signal: runOptions.signal });\n\t\t\t\t\tlet terminal: OperationSnapshotV1[\"terminal\"];\n\t\t\t\t\tlet cancelEmitted = false;\n\t\t\t\t\tconst reportCancel = () => {\n\t\t\t\t\t\tif (cancelEmitted) return;\n\t\t\t\t\t\tcancelEmitted = true;\n\t\t\t\t\t\temit(\n\t\t\t\t\t\t\tOPERATION_CANCEL_EVENT_ID,\n\t\t\t\t\t\t\tvalidateOperationCancelEventDataV1({\n\t\t\t\t\t\t\t\tversion: 1,\n\t\t\t\t\t\t\t\toperationId: operation.id,\n\t\t\t\t\t\t\t\toperationKind: \"agent.run\",\n\t\t\t\t\t\t\t}) as unknown as JsonValue,\n\t\t\t\t\t\t\toperation.id,\n\t\t\t\t\t\t);\n\t\t\t\t\t};\n\t\t\t\t\toperation.signal.addEventListener(\"abort\", reportCancel, { once: true });\n\t\t\t\t\tif (operation.signal.aborted) reportCancel();\n\t\t\t\t\tif (!runOptions.signal?.aborted) {\n\t\t\t\t\t\temit(\n\t\t\t\t\t\t\tOPERATION_START_EVENT_ID,\n\t\t\t\t\t\t\tvalidateOperationStartEventDataV1({\n\t\t\t\t\t\t\t\tversion: 1,\n\t\t\t\t\t\t\t\toperationId: operation.id,\n\t\t\t\t\t\t\t\toperationKind: \"agent.run\",\n\t\t\t\t\t\t\t}) as unknown as JsonValue,\n\t\t\t\t\t\t\toperation.id,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tconst result = operation.result.then(\n\t\t\t\t\t\t(value: TResult) => {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tconst output = canonicalOutput(value, operation.id);\n\t\t\t\t\t\t\t\tterminal = { version: 1, status: \"succeeded\", result: output };\n\t\t\t\t\t\t\t\temit(\n\t\t\t\t\t\t\t\t\tOPERATION_END_EVENT_ID,\n\t\t\t\t\t\t\t\t\tvalidateOperationEndEventDataV1({\n\t\t\t\t\t\t\t\t\t\tversion: 1,\n\t\t\t\t\t\t\t\t\t\toperationId: operation.id,\n\t\t\t\t\t\t\t\t\t\toperationKind: \"agent.run\",\n\t\t\t\t\t\t\t\t\t\tstatus: \"succeeded\",\n\t\t\t\t\t\t\t\t\t}) as unknown as JsonValue,\n\t\t\t\t\t\t\t\t\toperation.id,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\treturn output;\n\t\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\t\tterminal = {\n\t\t\t\t\t\t\t\t\tversion: 1,\n\t\t\t\t\t\t\t\t\tstatus: \"failed\",\n\t\t\t\t\t\t\t\t\terror: errorEnvelope(error, \"agent_invalid_result\"),\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\temit(\n\t\t\t\t\t\t\t\t\tOPERATION_END_EVENT_ID,\n\t\t\t\t\t\t\t\t\tvalidateOperationEndEventDataV1({\n\t\t\t\t\t\t\t\t\t\tversion: 1,\n\t\t\t\t\t\t\t\t\t\toperationId: operation.id,\n\t\t\t\t\t\t\t\t\t\toperationKind: \"agent.run\",\n\t\t\t\t\t\t\t\t\t\tstatus: \"failed\",\n\t\t\t\t\t\t\t\t\t\terrorMessage: error instanceof Error ? error.message : String(error),\n\t\t\t\t\t\t\t\t\t}) as unknown as JsonValue,\n\t\t\t\t\t\t\t\t\toperation.id,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tthrow error;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t(error: unknown) => {\n\t\t\t\t\t\t\tconst status = operation.status() === \"cancelled\" ? \"cancelled\" : \"failed\";\n\t\t\t\t\t\t\tterminal = { version: 1, status, error: errorEnvelope(error, `agent_${status}`) };\n\t\t\t\t\t\t\temit(\n\t\t\t\t\t\t\t\tOPERATION_END_EVENT_ID,\n\t\t\t\t\t\t\t\tvalidateOperationEndEventDataV1({\n\t\t\t\t\t\t\t\t\tversion: 1,\n\t\t\t\t\t\t\t\t\toperationId: operation.id,\n\t\t\t\t\t\t\t\t\toperationKind: \"agent.run\",\n\t\t\t\t\t\t\t\t\tstatus,\n\t\t\t\t\t\t\t\t\terrorMessage: error instanceof Error ? error.message : String(error),\n\t\t\t\t\t\t\t\t}) as unknown as JsonValue,\n\t\t\t\t\t\t\t\toperation.id,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tthrow error;\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t\treturn Object.freeze({\n\t\t\t\t\t\tid: operation.id,\n\t\t\t\t\t\tresult,\n\t\t\t\t\t\tsnapshot: () =>\n\t\t\t\t\t\t\tbuildOperationSnapshotV1({\n\t\t\t\t\t\t\t\tversion: 1,\n\t\t\t\t\t\t\t\toperationId: operation.id,\n\t\t\t\t\t\t\t\tkind: \"agent.run\",\n\t\t\t\t\t\t\t\tstatus: terminal?.status ?? operationStatus(operation.status()),\n\t\t\t\t\t\t\t\t...(terminal === undefined && operation.status() === \"cancelled\"\n\t\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\t\tterminal: {\n\t\t\t\t\t\t\t\t\t\t\t\tversion: 1,\n\t\t\t\t\t\t\t\t\t\t\t\tstatus: \"cancelled\",\n\t\t\t\t\t\t\t\t\t\t\t\terror: errorEnvelope(new Error(\"Operation cancelled\"), \"agent_cancelled\"),\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t: terminal === undefined\n\t\t\t\t\t\t\t\t\t\t? {}\n\t\t\t\t\t\t\t\t\t\t: { terminal }),\n\t\t\t\t\t\t\t\tinstanceId: raw.id,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\tcancel: async (reason?: string) => {\n\t\t\t\t\t\t\tassertActive(disposed || instanceDisposed, raw.id);\n\t\t\t\t\t\t\tif (operation.status() !== \"queued\" && operation.status() !== \"running\") return;\n\t\t\t\t\t\t\tawait operation.cancel(reason);\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\twait: async () => detachedFreeze(resultSnapshot(await raw.wait())),\n\t\t\t\tcancel: async (reason?: string) => {\n\t\t\t\t\tassertActive(disposed || instanceDisposed, raw.id);\n\t\t\t\t\tawait raw.cancel(reason);\n\t\t\t\t},\n\t\t\t\tdispose: async () => {\n\t\t\t\t\tinstanceDisposePromise ??= (async () => {\n\t\t\t\t\t\tif (!instanceDisposed) {\n\t\t\t\t\t\t\tinstanceDisposed = true;\n\t\t\t\t\t\t\tawait raw.dispose();\n\t\t\t\t\t\t\tinstances.delete(raw.id);\n\t\t\t\t\t\t}\n\t\t\t\t\t})();\n\t\t\t\t\treturn instanceDisposePromise;\n\t\t\t\t},\n\t\t\t};\n\t\t\tinstances.set(raw.id, wrapper as EmbeddedAgentInstanceV1<JsonValue, JsonValue>);\n\t\t\treturn Object.freeze(wrapper);\n\t\t},\n\t\tlistInstances: () =>\n\t\t\tObject.freeze(\n\t\t\t\t[...instances.values()]\n\t\t\t\t\t.map((instance) => instance.snapshot())\n\t\t\t\t\t.sort((left, right) => left.id.localeCompare(right.id)),\n\t\t\t),\n\t\tsubscribe(listener: EmbeddedSdkEventListenerV1) {\n\t\t\tassertActive(disposed, \"subscribe\");\n\t\t\tconst id = `embedded-sdk:subscription:${++sequence}`;\n\t\t\tlet released = false;\n\t\t\tlisteners.set(id, listener);\n\t\t\treturn Object.freeze({\n\t\t\t\tid,\n\t\t\t\tdispose: () => {\n\t\t\t\t\tif (released) return;\n\t\t\t\t\treleased = true;\n\t\t\t\t\tlisteners.delete(id);\n\t\t\t\t},\n\t\t\t});\n\t\t},\n\t\tdispose: async () => {\n\t\t\tdisposePromise ??= (async () => {\n\t\t\t\tif (disposed) return;\n\t\t\t\tdisposed = true;\n\t\t\t\tconst failures: unknown[] = [];\n\t\t\t\tfor (const instance of [...instances.values()]) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait instance.dispose();\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tfailures.push(error);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tlisteners.clear();\n\t\t\t\tif (ownsComposition && \"disposeDefinitions\" in composition) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\t(composition as AgentCompositionDefinitionBinding).disposeDefinitions([...definitions.values()]);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tfailures.push(error);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tdefinitions.clear();\n\t\t\t\tif (failures.length === 1) throw failures[0];\n\t\t\t\tif (failures.length > 1) throw new AggregateError(failures, \"Embedded SDK disposal failed\");\n\t\t\t})();\n\t\t\treturn disposePromise;\n\t\t},\n\t};\n\treturn Object.freeze(binding);\n}\n\nexport const createEmbeddedSdkBinding = createEmbeddedSdkBindingV1;\n"]}
|
|
1
|
+
{"version":3,"file":"embedded-sdk.js","sourceRoot":"","sources":["../../src/core/embedded-sdk.ts"],"names":[],"mappings":"AAAA,OAAO,EAIN,8BAA8B,EAC9B,8BAA8B,EAC9B,4BAA4B,EAC5B,oBAAoB,EACpB,oBAAoB,EACpB,wBAAwB,EACxB,sBAAsB,GAQtB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,6BAA6B,EAAE,MAAM,mCAAmC,CAAC;AAClF,OAAO,EACN,yBAAyB,EACzB,sBAAsB,EACtB,wBAAwB,EACxB,kCAAkC,EAClC,+BAA+B,EAC/B,iCAAiC,GACjC,MAAM,mCAAmC,CAAC;AAc3C,OAAO,EAAE,CAAC,EAAE,MAAM,iBAAiB,CAAC;AAoGpC,SAAS,cAAc,CAAI,KAAQ,EAAE,IAAI,GAAG,IAAI,OAAO,EAAmB,EAAK;IAC9E,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC9D,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACjC,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,QAAa,CAAC;IACjD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAc,EAAE,CAAC;QAC3B,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACtB,KAAK,MAAM,KAAK,IAAI,KAAK;YAAE,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;QAClE,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAM,CAAC;IACjC,CAAC;IACD,MAAM,IAAI,GAA4B,MAAM,CAAC,MAAM,CAAC,IAAI,CAA4B,CAAC;IACrF,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACtB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC;QAAE,IAAI,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACrH,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAM,CAAC;AAAA,CAChC;AAED,SAAS,YAAY,CAAC,QAAiB,EAAE,KAAa,EAAQ;IAC7D,IAAI,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,2CAA2C,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AAAA,CACzF;AAED,SAAS,aAAa,CAAC,KAAc,EAAE,IAAY,EAAmB;IACrE,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvE,OAAO,oBAAoB,CAAC;QAC3B,OAAO,EAAE,CAAC;QACV,IAAI;QACJ,OAAO;QACP,SAAS,EAAE,KAAK;QAChB,GAAG,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACvD,CAAC,CAAC;AAAA,CACH;AAED,SAAS,uBAAuB,CAC/B,UAA4C,EAChB;IAC5B,OAAO,8BAA8B,CAAC;QACrC,OAAO,EAAE,CAAC;QACV,EAAE,EAAE,UAAU,CAAC,EAAE;QACjB,iBAAiB,EAAE,UAAU,CAAC,OAAO;QACrC,IAAI,EAAE,UAAU,CAAC,IAAI;QACrB,YAAY,EAAE,EAAE;QAChB,GAAG,CAAC,UAAU,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC;KACtE,CAAC,CAAC;AAAA,CACH;AAED,SAAS,qBAAqB,CAC7B,QAAiE,EACvC;IAC1B,OAAO,4BAA4B,CAAC;QACnC,OAAO,EAAE,CAAC;QACV,EAAE,EAAE,QAAQ,CAAC,EAAE;QACf,YAAY,EAAE,QAAQ,CAAC,YAAY;QACnC,iBAAiB,EAAE,QAAQ,CAAC,iBAAiB;QAC7C,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,GAAG,CAAC,QAAQ,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB,EAAE,CAAC;QACnG,GAAG,CAAC,QAAQ,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE,CAAC;KACjF,CAAC,CAAC;AAAA,CACH;AAED,SAAS,eAAe,CAAC,MAAsD,EAAiC;IAC/G,OAAO,MAAM,CAAC;AAAA,CACd;AAED,SAAS,cAAc,CACtB,MAAoC,EACH;IACjC,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;QACnC,OAAO,cAAc,CAAC;YACrB,MAAM,EAAE,WAAoB;YAC5B,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC,MAAiB,EAAE,QAAQ,MAAM,CAAC,QAAQ,EAAE,CAAC;YAC5E,QAAQ,EAAE,MAAM,CAAC,QAAQ;SACzB,CAAC,CAAC;IACJ,CAAC;IACD,OAAO,cAAc,CAAC;QACrB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,GAAG,CAAC,MAAM,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;KACvG,CAAC,CAAC;AAAA,CACH;AAED,SAAS,eAAe,CAA4B,KAAc,EAAE,WAAmB,EAAW;IACjG,wBAAwB,CAAC;QACxB,OAAO,EAAE,CAAC;QACV,WAAW;QACX,IAAI,EAAE,WAAW;QACjB,MAAM,EAAE,WAAW;QACnB,QAAQ,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE;KAC5D,CAAC,CAAC;IACH,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC;AAAA,CAC7B;AAED,SAAS,cAAc,CAA2B,KAAa,EAAU;IACxE,IAAI,KAAK,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,gDAAgD,CAAC,CAAC,CAAC;IAC9F,wBAAwB,CAAC;QACxB,OAAO,EAAE,CAAC;QACV,WAAW,EAAE,oBAAoB;QACjC,IAAI,EAAE,WAAW;QACjB,MAAM,EAAE,WAAW;QACnB,QAAQ,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE;KAC5D,CAAC,CAAC;IACH,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC;AAAA,CAC7B;AAED,SAAS,8BAA8B,CAAC,OAAmB,EAA4B;IACtF,IAAI,CAAC,OAAO,CAAC,WAAW;QAAE,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,gDAAgD,CAAC,CAAC,CAAC;IAC/F,MAAM,WAAW,GAAG,GAAsB,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC,WAAY,EAAE,CAAC,CAAC;IACpF,MAAM,OAAO,GACZ,OAAO,CAAC,kBAAkB,IAAI,OAAO,CAAC,aAAa;QAClD,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;YACd,OAAO,EAAE,CAAU;YACnB,GAAG,EAAE,GAAqB,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC,kBAAmB,EAAU,CAAC;YAClF,MAAM,EAAE,CAAmB,OAA4C,EAAE,EAAE,CAC1E,OAAO,CAAC,aAAc,CAAC,OAAO,CAAC;SAChC,CAAC;QACH,CAAC,CAAC,SAAS,CAAC;IACd,OAAO,MAAM,CAAC,MAAM,CAAC;QACpB,OAAO,EAAE,CAAU;QACnB,YAAY,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE;QAC1C,WAAW;QACX,QAAQ,EAAE,GAAG,EAAE,CACd,sBAAsB,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,YAAY,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,CAAC;QACnG,WAAW,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QACxD,gBAAgB,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC;QAClE,MAAM,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE;QAC9B,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;QAC9C,KAAK,EAAE,CAAC,IAAY,EAAE,EAAE,CACvB,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;QAC/G,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE;QAC5B,WAAW,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE;QACxC,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC;KAC7C,CAAC,CAAC;AAAA,CACH;AAED,MAAM,UAAU,0BAA0B,CAAC,OAAO,GAAyB,EAAE,EAAwB;IACpG,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,6BAA6B,EAAE,CAAC;IAC3E,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS,CAAC;IACrF,MAAM,eAAe,GAAG;QACvB,sBAAsB;QACtB,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,qBAAqB,EAAE,SAAS,CAAC,CAAC;KACvF,CAAC;IACF,MAAM,WAAW,GAAG,cAAc,CAAC;QAClC,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,cAAc;QACpC,QAAQ,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,IAAI,eAAe,CAAC,CAAC,CAAC,IAAI,EAAE;QAC3D,UAAU,EAAE,CAAC,YAAY,CAAU;KACnC,CAAkB,CAAC;IACpB,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,8BAA8B,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5G,MAAM,QAAQ,GAAG,8BAA8B,CAAC;QAC/C,UAAU,EAAE,uCAAuC;QACnD,YAAY,EAAE,EAAE;QAChB,WAAW;KACX,CAAC,CAAC;IACH,MAAM,WAAW,GAAG,IAAI,GAAG,EAAiD,CAAC;IAC7E,MAAM,SAAS,GAAG,IAAI,GAAG,EAAyD,CAAC;IACnF,MAAM,SAAS,GAAG,IAAI,GAAG,EAAsC,CAAC;IAChE,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,cAAyC,CAAC;IAC9C,IAAI,QAAQ,GAAG,KAAK,CAAC;IAErB,MAAM,MAAM,GAAG,CAAC,IAA0B,EAAU,EAAE,CAAC;QACtD,QAAQ,IAAI,CAAC,CAAC;QACd,OAAO,OAAO,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,gBAAgB,IAAI,IAAI,QAAQ,EAAE,CAAC;IAAA,CACjF,CAAC;IACF,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,IAAe,EAAE,WAAoB,EAAQ,EAAE,CAAC;QAC3E,MAAM,KAAK,GAAG,oBAAoB,CAAC;YAClC,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC;YACnB,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC;YAC9B,IAAI;YACJ,MAAM,EAAE,cAAc;YACtB,SAAS,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC;YACjC,QAAQ,EACP,IAAI,KAAK,wBAAwB,IAAI,IAAI,KAAK,yBAAyB,IAAI,IAAI,KAAK,sBAAsB;gBACzG,CAAC,CAAC,eAAe;gBACjB,CAAC,CAAC,aAAa;YACjB,iBAAiB,EAAE,aAAa;YAChC,IAAI;YACJ,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC;SACjF,CAAC,CAAC;QACH,KAAK,MAAM,QAAQ,IAAI,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC;YAC3C,IAAI,CAAC;gBACJ,QAAQ,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC;YAAC,MAAM,CAAC;gBACR,gDAAgD;YACjD,CAAC;QACF,CAAC;IAAA,CACD,CAAC;IACF,MAAM,iBAAiB,GAAG,CACzB,UAA0G,EACvE,EAAE,CAAC;QACtC,MAAM,QAAQ,GAAG,UAAU,IAAI,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC;QAC7E,MAAM,iBAAiB,GAAG,CACzB,mBAAmB,IAAI,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CACrE,CAAC;QACZ,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,EAAE,IAAI,iBAAiB,EAAE,CAAC,CAAC;QACxE,IAAI,QAAQ;YAAE,OAAO,QAA4C,CAAC;QAClE,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACvC,OAAO,WAAW,CAAC,GAAG,CAAkB,QAAQ,CAAC,EAAE,EAAE,iBAAiB,CAAC,CAAC;QACzE,CAAC;QACD,MAAM,IAAI,KAAK,CACd,CAAC,CAAC,mDAAmD,EAAE;YACtD,EAAE,EAAE,QAAQ,CAAC,EAAE;YACf,OAAO,EAAE,iBAAiB;SAC1B,CAAC,CACF,CAAC;IAAA,CACF,CAAC;IAEF,MAAM,OAAO,GAAyB;QACrC,OAAO,EAAE,CAAC;QACV,QAAQ;QACR,WAAW;QACX,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC;QAC7C,MAAM,CAAsD,UAA4C,EAAE;YACzG,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YACjC,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YAClD,WAAW,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,EAAE,IAAI,UAAU,CAAC,OAAO,EAAE,EAAE,UAAmD,CAAC,CAAC;YAC/G,OAAO,cAAc,CAAC,EAAE,QAAQ,EAAE,uBAAuB,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAAA,CACzE;QACD,MAAM,CACL,UAA0G,EAC1G,eAAe,GAAiE,EAAE,EACjF;YACD,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YACjC,MAAM,GAAG,GAAG,WAAW,CAAC,MAAM,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE,eAAe,CAAC,CAAC;YAC/E,IAAI,gBAAgB,GAAG,KAAK,CAAC;YAC7B,IAAI,sBAAiD,CAAC;YACtD,MAAM,MAAM,GAAG,IAAI,OAAO,EAAmD,CAAC;YAC9E,MAAM,OAAO,GAA6C;gBACzD,EAAE,EAAE,GAAG,CAAC,EAAE;gBACV,QAAQ,EAAE,GAAG,EAAE,CAAC;oBACf,YAAY,CAAC,QAAQ,IAAI,gBAAgB,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;oBACnD,OAAO,qBAAqB,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAAA,CAC7C;gBACD,sBAAsB,EAAE,KAAK,EAAE,KAAc,EAAE,EAAE,CAAC;oBACjD,YAAY,CAAC,QAAQ,IAAI,gBAAgB,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;oBACnD,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;oBACtD,MAAM,SAAS,GAA8B,MAAM,CAAC,MAAM,CAAC;wBAC1D,EAAE,EAAE,KAAK,CAAC,EAAE;wBACZ,UAAU,EAAE,KAAK,CAAC,UAAU;wBAC5B,KAAK,EAAE,KAAK,CAAC,KAAK;wBAClB,QAAQ,EAAE,KAAK,CAAC,QAAQ;wBACxB,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,QAAQ,IAAI,CAAC,gBAAgB,IAAI,KAAK,CAAC,QAAQ,EAAE;wBAClE,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC;4BACpB,YAAY,CAAC,QAAQ,IAAI,gBAAgB,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;4BACnD,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;wBAAA,CACtB;qBACD,CAAC,CAAC;oBACH,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;oBAC7B,OAAO,SAAS,CAAC;gBAAA,CACjB;gBACD,GAAG,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,CAAC;oBAC3B,YAAY,CAAC,QAAQ,IAAI,gBAAgB,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;oBACnD,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;oBAC3C,IAAI,CAAC,KAAK;wBACT,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,4DAA4D,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;oBAClG,MAAM,SAAS,GAAG,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;oBACvF,IAAI,QAAyC,CAAC;oBAC9C,IAAI,aAAa,GAAG,KAAK,CAAC;oBAC1B,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC;wBAC1B,IAAI,aAAa;4BAAE,OAAO;wBAC1B,aAAa,GAAG,IAAI,CAAC;wBACrB,IAAI,CACH,yBAAyB,EACzB,kCAAkC,CAAC;4BAClC,OAAO,EAAE,CAAC;4BACV,WAAW,EAAE,SAAS,CAAC,EAAE;4BACzB,aAAa,EAAE,WAAW;yBAC1B,CAAyB,EAC1B,SAAS,CAAC,EAAE,CACZ,CAAC;oBAAA,CACF,CAAC;oBACF,SAAS,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;oBACzE,IAAI,SAAS,CAAC,MAAM,CAAC,OAAO;wBAAE,YAAY,EAAE,CAAC;oBAC7C,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;wBACjC,IAAI,CACH,wBAAwB,EACxB,iCAAiC,CAAC;4BACjC,OAAO,EAAE,CAAC;4BACV,WAAW,EAAE,SAAS,CAAC,EAAE;4BACzB,aAAa,EAAE,WAAW;yBAC1B,CAAyB,EAC1B,SAAS,CAAC,EAAE,CACZ,CAAC;oBACH,CAAC;oBACD,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CACnC,CAAC,KAAc,EAAE,EAAE,CAAC;wBACnB,IAAI,CAAC;4BACJ,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;4BACpD,QAAQ,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;4BAC/D,IAAI,CACH,sBAAsB,EACtB,+BAA+B,CAAC;gCAC/B,OAAO,EAAE,CAAC;gCACV,WAAW,EAAE,SAAS,CAAC,EAAE;gCACzB,aAAa,EAAE,WAAW;gCAC1B,MAAM,EAAE,WAAW;6BACnB,CAAyB,EAC1B,SAAS,CAAC,EAAE,CACZ,CAAC;4BACF,OAAO,MAAM,CAAC;wBACf,CAAC;wBAAC,OAAO,KAAK,EAAE,CAAC;4BAChB,QAAQ,GAAG;gCACV,OAAO,EAAE,CAAC;gCACV,MAAM,EAAE,QAAQ;gCAChB,KAAK,EAAE,aAAa,CAAC,KAAK,EAAE,sBAAsB,CAAC;6BACnD,CAAC;4BACF,IAAI,CACH,sBAAsB,EACtB,+BAA+B,CAAC;gCAC/B,OAAO,EAAE,CAAC;gCACV,WAAW,EAAE,SAAS,CAAC,EAAE;gCACzB,aAAa,EAAE,WAAW;gCAC1B,MAAM,EAAE,QAAQ;gCAChB,YAAY,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;6BACpE,CAAyB,EAC1B,SAAS,CAAC,EAAE,CACZ,CAAC;4BACF,MAAM,KAAK,CAAC;wBACb,CAAC;oBAAA,CACD,EACD,CAAC,KAAc,EAAE,EAAE,CAAC;wBACnB,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC;wBAC3E,QAAQ,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC,EAAE,CAAC;wBAClF,IAAI,CACH,sBAAsB,EACtB,+BAA+B,CAAC;4BAC/B,OAAO,EAAE,CAAC;4BACV,WAAW,EAAE,SAAS,CAAC,EAAE;4BACzB,aAAa,EAAE,WAAW;4BAC1B,MAAM;4BACN,YAAY,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;yBACpE,CAAyB,EAC1B,SAAS,CAAC,EAAE,CACZ,CAAC;wBACF,MAAM,KAAK,CAAC;oBAAA,CACZ,CACD,CAAC;oBACF,OAAO,MAAM,CAAC,MAAM,CAAC;wBACpB,EAAE,EAAE,SAAS,CAAC,EAAE;wBAChB,MAAM;wBACN,QAAQ,EAAE,GAAG,EAAE,CACd,wBAAwB,CAAC;4BACxB,OAAO,EAAE,CAAC;4BACV,WAAW,EAAE,SAAS,CAAC,EAAE;4BACzB,IAAI,EAAE,WAAW;4BACjB,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,eAAe,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;4BAC/D,GAAG,CAAC,QAAQ,KAAK,SAAS,IAAI,SAAS,CAAC,MAAM,EAAE,KAAK,WAAW;gCAC/D,CAAC,CAAC;oCACA,QAAQ,EAAE;wCACT,OAAO,EAAE,CAAC;wCACV,MAAM,EAAE,WAAW;wCACnB,KAAK,EAAE,aAAa,CAAC,IAAI,KAAK,CAAC,qBAAqB,CAAC,EAAE,iBAAiB,CAAC;qCACzE;iCACD;gCACF,CAAC,CAAC,QAAQ,KAAK,SAAS;oCACvB,CAAC,CAAC,EAAE;oCACJ,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC;4BACjB,UAAU,EAAE,GAAG,CAAC,EAAE;yBAClB,CAAC;wBACH,MAAM,EAAE,KAAK,EAAE,MAAe,EAAE,EAAE,CAAC;4BAClC,YAAY,CAAC,QAAQ,IAAI,gBAAgB,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;4BACnD,IAAI,SAAS,CAAC,MAAM,EAAE,KAAK,QAAQ,IAAI,SAAS,CAAC,MAAM,EAAE,KAAK,SAAS;gCAAE,OAAO;4BAChF,MAAM,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;wBAAA,CAC/B;qBACD,CAAC,CAAC;gBAAA,CACH;gBACD,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,cAAc,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;gBAClE,MAAM,EAAE,KAAK,EAAE,MAAe,EAAE,EAAE,CAAC;oBAClC,YAAY,CAAC,QAAQ,IAAI,gBAAgB,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;oBACnD,MAAM,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAAA,CACzB;gBACD,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC;oBACpB,sBAAsB,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;wBACvC,IAAI,CAAC,gBAAgB,EAAE,CAAC;4BACvB,gBAAgB,GAAG,IAAI,CAAC;4BACxB,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;4BACpB,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;wBAC1B,CAAC;oBAAA,CACD,CAAC,EAAE,CAAC;oBACL,OAAO,sBAAsB,CAAC;gBAAA,CAC9B;aACD,CAAC;YACF,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,OAAwD,CAAC,CAAC;YAChF,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAAA,CAC9B;QACD,aAAa,EAAE,GAAG,EAAE,CACnB,MAAM,CAAC,MAAM,CACZ,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC;aACrB,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;aACtC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CACxD;QACF,SAAS,CAAC,QAAoC,EAAE;YAC/C,YAAY,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;YACpC,MAAM,EAAE,GAAG,6BAA6B,EAAE,QAAQ,EAAE,CAAC;YACrD,IAAI,QAAQ,GAAG,KAAK,CAAC;YACrB,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;YAC5B,OAAO,MAAM,CAAC,MAAM,CAAC;gBACpB,EAAE;gBACF,OAAO,EAAE,GAAG,EAAE,CAAC;oBACd,IAAI,QAAQ;wBAAE,OAAO;oBACrB,QAAQ,GAAG,IAAI,CAAC;oBAChB,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAAA,CACrB;aACD,CAAC,CAAC;QAAA,CACH;QACD,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC;YACpB,cAAc,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;gBAC/B,IAAI,QAAQ;oBAAE,OAAO;gBACrB,QAAQ,GAAG,IAAI,CAAC;gBAChB,MAAM,QAAQ,GAAc,EAAE,CAAC;gBAC/B,KAAK,MAAM,QAAQ,IAAI,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;oBAChD,IAAI,CAAC;wBACJ,MAAM,QAAQ,CAAC,OAAO,EAAE,CAAC;oBAC1B,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBAChB,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACtB,CAAC;gBACF,CAAC;gBACD,SAAS,CAAC,KAAK,EAAE,CAAC;gBAClB,IAAI,eAAe,IAAI,oBAAoB,IAAI,WAAW,EAAE,CAAC;oBAC5D,IAAI,CAAC;wBACH,WAAiD,CAAC,kBAAkB,CAAC,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;oBAClG,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBAChB,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACtB,CAAC;gBACF,CAAC;gBACD,WAAW,CAAC,KAAK,EAAE,CAAC;gBACpB,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;oBAAE,MAAM,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC7C,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;oBAAE,MAAM,IAAI,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC;YAAA,CAC/F,CAAC,EAAE,CAAC;YACL,OAAO,cAAc,CAAC;QAAA,CACtB;KACD,CAAC;IACF,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAAA,CAC9B;AAED,MAAM,CAAC,MAAM,wBAAwB,GAAG,0BAA0B,CAAC","sourcesContent":["import {\n\ttype AgentCapabilityContractV1,\n\ttype AgentDefinitionSnapshotV1,\n\ttype AgentInstanceSnapshotV1,\n\tbuildAgentCapabilityContractV1,\n\tbuildAgentDefinitionSnapshotV1,\n\tbuildAgentInstanceSnapshotV1,\n\tbuildErrorEnvelopeV1,\n\tbuildEventEnvelopeV1,\n\tbuildOperationSnapshotV1,\n\tbuildSessionSnapshotV1,\n\ttype ErrorEnvelopeV1,\n\ttype EventEnvelopeV1,\n\ttype HostContextV1,\n\ttype JsonValue,\n\ttype OperationSnapshotV1,\n\ttype SessionRevisionV1,\n\ttype SessionSnapshotV1,\n} from \"./agent-capability-contract.ts\";\nimport { createAgentCompositionRuntime } from \"./extensions/agent-composition.ts\";\nimport {\n\tOPERATION_CANCEL_EVENT_ID,\n\tOPERATION_END_EVENT_ID,\n\tOPERATION_START_EVENT_ID,\n\tvalidateOperationCancelEventDataV1,\n\tvalidateOperationEndEventDataV1,\n\tvalidateOperationStartEventDataV1,\n} from \"./extensions/lifecycle-catalog.ts\";\nimport type {\n\tAgentCompositionAPI,\n\tAgentCompositionDefinitionBinding,\n\tAgentContextCommitRequestV1,\n\tAgentContextFacadeV1,\n\tAgentControllerLease,\n\tAgentDefinition,\n\tAgentInstance,\n\tAgentInstanceResult,\n\tOperationHandle,\n\tPromptOutcome,\n\tSessionAPI,\n} from \"./extensions/public-api.ts\";\nimport { t } from \"./i18n/index.ts\";\n\n/**\n * An in-process binding over AgentComposition. It intentionally excludes the\n * transitional AgentSession command surface and every remote transport concern.\n */\nexport interface EmbeddedSdkBindingV1 {\n\treadonly version: 1;\n\treadonly contract: AgentCapabilityContractV1;\n\treadonly hostContext: HostContextV1;\n\t/** Optional session-backed facade supplied by an in-process host. */\n\treadonly session?: EmbeddedSessionBindingV1;\n\tdefine<TInput extends JsonValue, TResult extends JsonValue>(\n\t\tdefinition: AgentDefinition<TInput, TResult>,\n\t): EmbeddedAgentDefinitionV1<TInput, TResult>;\n\tcreate<TInput extends JsonValue, TResult extends JsonValue>(\n\t\tdefinition: EmbeddedAgentDefinitionV1<TInput, TResult> | { readonly id: string; readonly version: number },\n\t\toptions?: { readonly id?: string; readonly parentInstanceId?: string },\n\t): EmbeddedAgentInstanceV1<TInput, TResult>;\n\tlistInstances(): readonly AgentInstanceSnapshotV1[];\n\tsubscribe(listener: EmbeddedSdkEventListenerV1): EmbeddedSdkSubscriptionV1;\n\tdispose(): Promise<void>;\n}\n\nexport interface EmbeddedSdkOptionsV1 {\n\treadonly composition?: AgentCompositionAPI;\n\t/** Optional host session to expose through the stable in-process facade. */\n\treadonly session?: SessionAPI;\n\t/** Whether this binding owns and may remove definitions from the supplied composition. */\n\treadonly ownsComposition?: boolean;\n\treadonly mode?: HostContextV1[\"mode\"];\n\treadonly features?: readonly string[];\n\treadonly clock?: () => number;\n\treadonly idFactory?: (kind: \"event\" | \"delivery\", sequence: number) => string;\n}\n\n/** Stable, detached session projection used by embedded and future service bindings. */\nexport interface EmbeddedSessionBindingV1 {\n\treadonly version: 1;\n\tgetSessionId(): string;\n\tgetRevision(): SessionRevisionV1;\n\tsnapshot(): SessionSnapshotV1;\n\tgetMessages(): readonly unknown[];\n\tgetBranchEntries(): readonly unknown[];\n\tisIdle(): boolean;\n\tprompt(text: string): Promise<PromptOutcome>;\n\tsteer(text: string): Promise<void>;\n\tabort(): Promise<void>;\n\twaitForIdle(): Promise<void>;\n\treadonly context?: AgentContextFacadeV1;\n}\n\nexport interface EmbeddedAgentDefinitionV1<_TInput extends JsonValue, _TResult extends JsonValue> {\n\treadonly snapshot: AgentDefinitionSnapshotV1;\n}\n\nexport interface EmbeddedControllerLeaseV1 {\n\treadonly id: string;\n\treadonly instanceId: string;\n\treadonly owner: string;\n\treadonly revision: number;\n\tisActive(): boolean;\n\trelease(): Promise<void>;\n}\n\nexport interface EmbeddedOperationHandleV1<TResult extends JsonValue> {\n\treadonly id: string;\n\treadonly result: Promise<TResult>;\n\tsnapshot(): OperationSnapshotV1;\n\tcancel(reason?: string): Promise<void>;\n}\n\nexport interface EmbeddedAgentInstanceV1<TInput extends JsonValue, TResult extends JsonValue> {\n\treadonly id: string;\n\tsnapshot(): AgentInstanceSnapshotV1;\n\tacquireControllerLease(owner?: string): Promise<EmbeddedControllerLeaseV1>;\n\trun(\n\t\tinput: TInput,\n\t\toptions: { readonly lease: EmbeddedControllerLeaseV1; readonly signal?: AbortSignal },\n\t): EmbeddedOperationHandleV1<TResult>;\n\twait(): Promise<EmbeddedAgentResultV1<TResult>>;\n\tcancel(reason?: string): Promise<void>;\n\tdispose(): Promise<void>;\n}\n\nexport type EmbeddedAgentResultV1<TResult extends JsonValue> =\n\t| { readonly status: \"succeeded\"; readonly output: TResult; readonly revision: number }\n\t| {\n\t\t\treadonly status: \"failed\" | \"cancelled\" | \"disposed\";\n\t\t\treadonly error?: ErrorEnvelopeV1;\n\t\t\treadonly revision: number;\n\t };\n\nexport type EmbeddedSdkEventListenerV1 = (event: EventEnvelopeV1) => void;\n\nexport interface EmbeddedSdkSubscriptionV1 {\n\treadonly id: string;\n\tdispose(): void;\n}\n\nfunction detachedFreeze<T>(value: T, seen = new WeakMap<object, unknown>()): T {\n\tif (value === null || typeof value !== \"object\") return value;\n\tconst existing = seen.get(value);\n\tif (existing !== undefined) return existing as T;\n\tif (Array.isArray(value)) {\n\t\tconst copy: unknown[] = [];\n\t\tseen.set(value, copy);\n\t\tfor (const child of value) copy.push(detachedFreeze(child, seen));\n\t\treturn Object.freeze(copy) as T;\n\t}\n\tconst copy: Record<string, unknown> = Object.create(null) as Record<string, unknown>;\n\tseen.set(value, copy);\n\tfor (const [key, child] of Object.entries(value as Record<string, unknown>)) copy[key] = detachedFreeze(child, seen);\n\treturn Object.freeze(copy) as T;\n}\n\nfunction assertActive(disposed: boolean, label: string): void {\n\tif (disposed) throw new Error(t(\"Embedded SDK binding is disposed: {label}\", { label }));\n}\n\nfunction errorEnvelope(error: unknown, code: string): ErrorEnvelopeV1 {\n\tconst message = error instanceof Error ? error.message : String(error);\n\treturn buildErrorEnvelopeV1({\n\t\tversion: 1,\n\t\tcode,\n\t\tmessage,\n\t\tretryable: false,\n\t\t...(error instanceof Error ? { name: error.name } : {}),\n\t});\n}\n\nfunction agentDefinitionSnapshot<TInput extends JsonValue, TResult extends JsonValue>(\n\tdefinition: AgentDefinition<TInput, TResult>,\n): AgentDefinitionSnapshotV1 {\n\treturn buildAgentDefinitionSnapshotV1({\n\t\tversion: 1,\n\t\tid: definition.id,\n\t\tdefinitionVersion: definition.version,\n\t\trole: definition.role,\n\t\tcapabilities: [],\n\t\t...(definition.owner === undefined ? {} : { owner: definition.owner }),\n\t});\n}\n\nfunction agentInstanceSnapshot(\n\tsnapshot: ReturnType<AgentInstance<unknown, unknown>[\"snapshot\"]>,\n): AgentInstanceSnapshotV1 {\n\treturn buildAgentInstanceSnapshotV1({\n\t\tversion: 1,\n\t\tid: snapshot.id,\n\t\tdefinitionId: snapshot.definitionId,\n\t\tdefinitionVersion: snapshot.definitionVersion,\n\t\trole: snapshot.role,\n\t\tstatus: snapshot.status,\n\t\trevision: snapshot.revision,\n\t\t...(snapshot.parentInstanceId === undefined ? {} : { parentInstanceId: snapshot.parentInstanceId }),\n\t\t...(snapshot.leaseOwner === undefined ? {} : { leaseOwner: snapshot.leaseOwner }),\n\t});\n}\n\nfunction operationStatus(status: ReturnType<OperationHandle<unknown>[\"status\"]>): OperationSnapshotV1[\"status\"] {\n\treturn status;\n}\n\nfunction resultSnapshot<TResult extends JsonValue>(\n\tresult: AgentInstanceResult<TResult>,\n): EmbeddedAgentResultV1<TResult> {\n\tif (result.status === \"succeeded\") {\n\t\treturn detachedFreeze({\n\t\t\tstatus: \"succeeded\" as const,\n\t\t\toutput: canonicalOutput(result.output as TResult, `wait:${result.revision}`),\n\t\t\trevision: result.revision,\n\t\t});\n\t}\n\treturn detachedFreeze({\n\t\tstatus: result.status,\n\t\trevision: result.revision,\n\t\t...(result.error === undefined ? {} : { error: errorEnvelope(result.error, `agent_${result.status}`) }),\n\t});\n}\n\nfunction canonicalOutput<TResult extends JsonValue>(value: TResult, operationId: string): TResult {\n\tbuildOperationSnapshotV1({\n\t\tversion: 1,\n\t\toperationId,\n\t\tkind: \"agent.run\",\n\t\tstatus: \"succeeded\",\n\t\tterminal: { version: 1, status: \"succeeded\", result: value },\n\t});\n\treturn detachedFreeze(value);\n}\n\nfunction canonicalInput<TInput extends JsonValue>(value: TInput): TInput {\n\tif (value === undefined) throw new Error(t(\"Embedded SDK run input must be JSON-compatible\"));\n\tbuildOperationSnapshotV1({\n\t\tversion: 1,\n\t\toperationId: \"embedded-sdk:input\",\n\t\tkind: \"agent.run\",\n\t\tstatus: \"succeeded\",\n\t\tterminal: { version: 1, status: \"succeeded\", result: value },\n\t});\n\treturn detachedFreeze(value);\n}\n\nfunction createEmbeddedSessionBindingV1(session: SessionAPI): EmbeddedSessionBindingV1 {\n\tif (!session.getRevision) throw new Error(t(\"Embedded SDK session requires revision support\"));\n\tconst getRevision = (): SessionRevisionV1 => detachedFreeze(session.getRevision!());\n\tconst context =\n\t\tsession.getContextSnapshot && session.commitContext\n\t\t\t? Object.freeze({\n\t\t\t\t\tversion: 1 as const,\n\t\t\t\t\tget: <TValue = unknown>() => detachedFreeze(session.getContextSnapshot!<TValue>()),\n\t\t\t\t\tcommit: <TValue = unknown>(request: AgentContextCommitRequestV1<TValue>) =>\n\t\t\t\t\t\tsession.commitContext!(request),\n\t\t\t\t})\n\t\t\t: undefined;\n\treturn Object.freeze({\n\t\tversion: 1 as const,\n\t\tgetSessionId: () => session.getSessionId(),\n\t\tgetRevision,\n\t\tsnapshot: () =>\n\t\t\tbuildSessionSnapshotV1({ version: 1, sessionId: session.getSessionId(), revision: getRevision() }),\n\t\tgetMessages: () => detachedFreeze(session.getMessages()),\n\t\tgetBranchEntries: () => detachedFreeze(session.getBranchEntries()),\n\t\tisIdle: () => session.isIdle(),\n\t\tprompt: (text: string) => session.prompt(text),\n\t\tsteer: (text: string) =>\n\t\t\tsession.steer ? session.steer(text) : Promise.reject(new Error(\"Embedded SDK session does not support steer\")),\n\t\tabort: () => session.abort(),\n\t\twaitForIdle: () => session.waitForIdle(),\n\t\t...(context === undefined ? {} : { context }),\n\t});\n}\n\nexport function createEmbeddedSdkBindingV1(options: EmbeddedSdkOptionsV1 = {}): EmbeddedSdkBindingV1 {\n\tconst composition = options.composition ?? createAgentCompositionRuntime();\n\tconst ownsComposition = options.ownsComposition ?? options.composition === undefined;\n\tconst defaultFeatures = [\n\t\t\"agent-composition-v1\",\n\t\t...(options.session === undefined ? [] : [\"session\", \"session-revision-v1\", \"context\"]),\n\t];\n\tconst hostContext = detachedFreeze({\n\t\tmode: options.mode ?? \"full-control\",\n\t\tfeatures: [...(options.features ?? defaultFeatures)].sort(),\n\t\ttransports: [\"in-process\"] as const,\n\t}) as HostContextV1;\n\tconst session = options.session === undefined ? undefined : createEmbeddedSessionBindingV1(options.session);\n\tconst contract = buildAgentCapabilityContractV1({\n\t\tcontractId: \"agent-forge/agent-capability-contract\",\n\t\tcapabilities: [],\n\t\thostContext,\n\t});\n\tconst definitions = new Map<string, AgentDefinition<JsonValue, JsonValue>>();\n\tconst instances = new Map<string, EmbeddedAgentInstanceV1<JsonValue, JsonValue>>();\n\tconst listeners = new Map<string, EmbeddedSdkEventListenerV1>();\n\tlet sequence = 0;\n\tlet disposePromise: Promise<void> | undefined;\n\tlet disposed = false;\n\n\tconst nextId = (kind: \"event\" | \"delivery\"): string => {\n\t\tsequence += 1;\n\t\treturn options.idFactory?.(kind, sequence) ?? `embedded-sdk:${kind}:${sequence}`;\n\t};\n\tconst emit = (type: string, data: JsonValue, operationId?: string): void => {\n\t\tconst event = buildEventEnvelopeV1({\n\t\t\tid: nextId(\"event\"),\n\t\t\tdeliveryId: nextId(\"delivery\"),\n\t\t\ttype,\n\t\t\tsource: \"embedded-sdk\",\n\t\t\ttimestamp: options.clock?.() ?? 0,\n\t\t\tcategory:\n\t\t\t\ttype === OPERATION_START_EVENT_ID || type === OPERATION_CANCEL_EVENT_ID || type === OPERATION_END_EVENT_ID\n\t\t\t\t\t? \"authoritative\"\n\t\t\t\t\t: \"observation\",\n\t\t\tdeliveryGuarantee: \"best-effort\",\n\t\t\tdata,\n\t\t\t...(operationId === undefined ? {} : { operationId, correlationId: operationId }),\n\t\t});\n\t\tfor (const listener of listeners.values()) {\n\t\t\ttry {\n\t\t\t\tlistener(event);\n\t\t\t} catch {\n\t\t\t\t// Observers must not affect an Agent operation.\n\t\t\t}\n\t\t}\n\t};\n\tconst resolveDefinition = <TInput extends JsonValue, TResult extends JsonValue>(\n\t\tdefinition: EmbeddedAgentDefinitionV1<TInput, TResult> | { readonly id: string; readonly version: number },\n\t): AgentDefinition<TInput, TResult> => {\n\t\tconst snapshot = \"snapshot\" in definition ? definition.snapshot : definition;\n\t\tconst definitionVersion = (\n\t\t\t\"definitionVersion\" in snapshot ? snapshot.definitionVersion : snapshot.version\n\t\t) as number;\n\t\tconst resolved = definitions.get(`${snapshot.id}@${definitionVersion}`);\n\t\tif (resolved) return resolved as AgentDefinition<TInput, TResult>;\n\t\tif (options.composition !== undefined) {\n\t\t\treturn composition.get<TInput, TResult>(snapshot.id, definitionVersion);\n\t\t}\n\t\tthrow new Error(\n\t\t\tt(\"Embedded SDK has no defined Agent: {id}@{version}\", {\n\t\t\t\tid: snapshot.id,\n\t\t\t\tversion: definitionVersion,\n\t\t\t}),\n\t\t);\n\t};\n\n\tconst binding: EmbeddedSdkBindingV1 = {\n\t\tversion: 1,\n\t\tcontract,\n\t\thostContext,\n\t\t...(session === undefined ? {} : { session }),\n\t\tdefine<TInput extends JsonValue, TResult extends JsonValue>(definition: AgentDefinition<TInput, TResult>) {\n\t\t\tassertActive(disposed, \"define\");\n\t\t\tconst registered = composition.define(definition);\n\t\t\tdefinitions.set(`${registered.id}@${registered.version}`, registered as AgentDefinition<JsonValue, JsonValue>);\n\t\t\treturn detachedFreeze({ snapshot: agentDefinitionSnapshot(registered) });\n\t\t},\n\t\tcreate<TInput extends JsonValue, TResult extends JsonValue>(\n\t\t\tdefinition: EmbeddedAgentDefinitionV1<TInput, TResult> | { readonly id: string; readonly version: number },\n\t\t\tinstanceOptions: { readonly id?: string; readonly parentInstanceId?: string } = {},\n\t\t) {\n\t\t\tassertActive(disposed, \"create\");\n\t\t\tconst raw = composition.create(resolveDefinition(definition), instanceOptions);\n\t\t\tlet instanceDisposed = false;\n\t\t\tlet instanceDisposePromise: Promise<void> | undefined;\n\t\t\tconst leases = new WeakMap<EmbeddedControllerLeaseV1, AgentControllerLease>();\n\t\t\tconst wrapper: EmbeddedAgentInstanceV1<TInput, TResult> = {\n\t\t\t\tid: raw.id,\n\t\t\t\tsnapshot: () => {\n\t\t\t\t\tassertActive(disposed || instanceDisposed, raw.id);\n\t\t\t\t\treturn agentInstanceSnapshot(raw.snapshot());\n\t\t\t\t},\n\t\t\t\tacquireControllerLease: async (owner?: string) => {\n\t\t\t\t\tassertActive(disposed || instanceDisposed, raw.id);\n\t\t\t\t\tconst lease = await raw.acquireControllerLease(owner);\n\t\t\t\t\tconst projected: EmbeddedControllerLeaseV1 = Object.freeze({\n\t\t\t\t\t\tid: lease.id,\n\t\t\t\t\t\tinstanceId: lease.instanceId,\n\t\t\t\t\t\towner: lease.owner,\n\t\t\t\t\t\trevision: lease.revision,\n\t\t\t\t\t\tisActive: () => !disposed && !instanceDisposed && lease.isActive(),\n\t\t\t\t\t\trelease: async () => {\n\t\t\t\t\t\t\tassertActive(disposed || instanceDisposed, raw.id);\n\t\t\t\t\t\t\tawait lease.release();\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t\tleases.set(projected, lease);\n\t\t\t\t\treturn projected;\n\t\t\t\t},\n\t\t\t\trun: (input, runOptions) => {\n\t\t\t\t\tassertActive(disposed || instanceDisposed, raw.id);\n\t\t\t\t\tconst lease = leases.get(runOptions.lease);\n\t\t\t\t\tif (!lease)\n\t\t\t\t\t\tthrow new Error(t(\"Embedded SDK lease does not belong to Agent instance: {id}\", { id: raw.id }));\n\t\t\t\t\tconst operation = raw.run(canonicalInput(input), { lease, signal: runOptions.signal });\n\t\t\t\t\tlet terminal: OperationSnapshotV1[\"terminal\"];\n\t\t\t\t\tlet cancelEmitted = false;\n\t\t\t\t\tconst reportCancel = () => {\n\t\t\t\t\t\tif (cancelEmitted) return;\n\t\t\t\t\t\tcancelEmitted = true;\n\t\t\t\t\t\temit(\n\t\t\t\t\t\t\tOPERATION_CANCEL_EVENT_ID,\n\t\t\t\t\t\t\tvalidateOperationCancelEventDataV1({\n\t\t\t\t\t\t\t\tversion: 1,\n\t\t\t\t\t\t\t\toperationId: operation.id,\n\t\t\t\t\t\t\t\toperationKind: \"agent.run\",\n\t\t\t\t\t\t\t}) as unknown as JsonValue,\n\t\t\t\t\t\t\toperation.id,\n\t\t\t\t\t\t);\n\t\t\t\t\t};\n\t\t\t\t\toperation.signal.addEventListener(\"abort\", reportCancel, { once: true });\n\t\t\t\t\tif (operation.signal.aborted) reportCancel();\n\t\t\t\t\tif (!runOptions.signal?.aborted) {\n\t\t\t\t\t\temit(\n\t\t\t\t\t\t\tOPERATION_START_EVENT_ID,\n\t\t\t\t\t\t\tvalidateOperationStartEventDataV1({\n\t\t\t\t\t\t\t\tversion: 1,\n\t\t\t\t\t\t\t\toperationId: operation.id,\n\t\t\t\t\t\t\t\toperationKind: \"agent.run\",\n\t\t\t\t\t\t\t}) as unknown as JsonValue,\n\t\t\t\t\t\t\toperation.id,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tconst result = operation.result.then(\n\t\t\t\t\t\t(value: TResult) => {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tconst output = canonicalOutput(value, operation.id);\n\t\t\t\t\t\t\t\tterminal = { version: 1, status: \"succeeded\", result: output };\n\t\t\t\t\t\t\t\temit(\n\t\t\t\t\t\t\t\t\tOPERATION_END_EVENT_ID,\n\t\t\t\t\t\t\t\t\tvalidateOperationEndEventDataV1({\n\t\t\t\t\t\t\t\t\t\tversion: 1,\n\t\t\t\t\t\t\t\t\t\toperationId: operation.id,\n\t\t\t\t\t\t\t\t\t\toperationKind: \"agent.run\",\n\t\t\t\t\t\t\t\t\t\tstatus: \"succeeded\",\n\t\t\t\t\t\t\t\t\t}) as unknown as JsonValue,\n\t\t\t\t\t\t\t\t\toperation.id,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\treturn output;\n\t\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\t\tterminal = {\n\t\t\t\t\t\t\t\t\tversion: 1,\n\t\t\t\t\t\t\t\t\tstatus: \"failed\",\n\t\t\t\t\t\t\t\t\terror: errorEnvelope(error, \"agent_invalid_result\"),\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\temit(\n\t\t\t\t\t\t\t\t\tOPERATION_END_EVENT_ID,\n\t\t\t\t\t\t\t\t\tvalidateOperationEndEventDataV1({\n\t\t\t\t\t\t\t\t\t\tversion: 1,\n\t\t\t\t\t\t\t\t\t\toperationId: operation.id,\n\t\t\t\t\t\t\t\t\t\toperationKind: \"agent.run\",\n\t\t\t\t\t\t\t\t\t\tstatus: \"failed\",\n\t\t\t\t\t\t\t\t\t\terrorMessage: error instanceof Error ? error.message : String(error),\n\t\t\t\t\t\t\t\t\t}) as unknown as JsonValue,\n\t\t\t\t\t\t\t\t\toperation.id,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tthrow error;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t(error: unknown) => {\n\t\t\t\t\t\t\tconst status = operation.status() === \"cancelled\" ? \"cancelled\" : \"failed\";\n\t\t\t\t\t\t\tterminal = { version: 1, status, error: errorEnvelope(error, `agent_${status}`) };\n\t\t\t\t\t\t\temit(\n\t\t\t\t\t\t\t\tOPERATION_END_EVENT_ID,\n\t\t\t\t\t\t\t\tvalidateOperationEndEventDataV1({\n\t\t\t\t\t\t\t\t\tversion: 1,\n\t\t\t\t\t\t\t\t\toperationId: operation.id,\n\t\t\t\t\t\t\t\t\toperationKind: \"agent.run\",\n\t\t\t\t\t\t\t\t\tstatus,\n\t\t\t\t\t\t\t\t\terrorMessage: error instanceof Error ? error.message : String(error),\n\t\t\t\t\t\t\t\t}) as unknown as JsonValue,\n\t\t\t\t\t\t\t\toperation.id,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tthrow error;\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t\treturn Object.freeze({\n\t\t\t\t\t\tid: operation.id,\n\t\t\t\t\t\tresult,\n\t\t\t\t\t\tsnapshot: () =>\n\t\t\t\t\t\t\tbuildOperationSnapshotV1({\n\t\t\t\t\t\t\t\tversion: 1,\n\t\t\t\t\t\t\t\toperationId: operation.id,\n\t\t\t\t\t\t\t\tkind: \"agent.run\",\n\t\t\t\t\t\t\t\tstatus: terminal?.status ?? operationStatus(operation.status()),\n\t\t\t\t\t\t\t\t...(terminal === undefined && operation.status() === \"cancelled\"\n\t\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\t\tterminal: {\n\t\t\t\t\t\t\t\t\t\t\t\tversion: 1,\n\t\t\t\t\t\t\t\t\t\t\t\tstatus: \"cancelled\",\n\t\t\t\t\t\t\t\t\t\t\t\terror: errorEnvelope(new Error(\"Operation cancelled\"), \"agent_cancelled\"),\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t: terminal === undefined\n\t\t\t\t\t\t\t\t\t\t? {}\n\t\t\t\t\t\t\t\t\t\t: { terminal }),\n\t\t\t\t\t\t\t\tinstanceId: raw.id,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\tcancel: async (reason?: string) => {\n\t\t\t\t\t\t\tassertActive(disposed || instanceDisposed, raw.id);\n\t\t\t\t\t\t\tif (operation.status() !== \"queued\" && operation.status() !== \"running\") return;\n\t\t\t\t\t\t\tawait operation.cancel(reason);\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\twait: async () => detachedFreeze(resultSnapshot(await raw.wait())),\n\t\t\t\tcancel: async (reason?: string) => {\n\t\t\t\t\tassertActive(disposed || instanceDisposed, raw.id);\n\t\t\t\t\tawait raw.cancel(reason);\n\t\t\t\t},\n\t\t\t\tdispose: async () => {\n\t\t\t\t\tinstanceDisposePromise ??= (async () => {\n\t\t\t\t\t\tif (!instanceDisposed) {\n\t\t\t\t\t\t\tinstanceDisposed = true;\n\t\t\t\t\t\t\tawait raw.dispose();\n\t\t\t\t\t\t\tinstances.delete(raw.id);\n\t\t\t\t\t\t}\n\t\t\t\t\t})();\n\t\t\t\t\treturn instanceDisposePromise;\n\t\t\t\t},\n\t\t\t};\n\t\t\tinstances.set(raw.id, wrapper as EmbeddedAgentInstanceV1<JsonValue, JsonValue>);\n\t\t\treturn Object.freeze(wrapper);\n\t\t},\n\t\tlistInstances: () =>\n\t\t\tObject.freeze(\n\t\t\t\t[...instances.values()]\n\t\t\t\t\t.map((instance) => instance.snapshot())\n\t\t\t\t\t.sort((left, right) => left.id.localeCompare(right.id)),\n\t\t\t),\n\t\tsubscribe(listener: EmbeddedSdkEventListenerV1) {\n\t\t\tassertActive(disposed, \"subscribe\");\n\t\t\tconst id = `embedded-sdk:subscription:${++sequence}`;\n\t\t\tlet released = false;\n\t\t\tlisteners.set(id, listener);\n\t\t\treturn Object.freeze({\n\t\t\t\tid,\n\t\t\t\tdispose: () => {\n\t\t\t\t\tif (released) return;\n\t\t\t\t\treleased = true;\n\t\t\t\t\tlisteners.delete(id);\n\t\t\t\t},\n\t\t\t});\n\t\t},\n\t\tdispose: async () => {\n\t\t\tdisposePromise ??= (async () => {\n\t\t\t\tif (disposed) return;\n\t\t\t\tdisposed = true;\n\t\t\t\tconst failures: unknown[] = [];\n\t\t\t\tfor (const instance of [...instances.values()]) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait instance.dispose();\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tfailures.push(error);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tlisteners.clear();\n\t\t\t\tif (ownsComposition && \"disposeDefinitions\" in composition) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\t(composition as AgentCompositionDefinitionBinding).disposeDefinitions([...definitions.values()]);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tfailures.push(error);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tdefinitions.clear();\n\t\t\t\tif (failures.length === 1) throw failures[0];\n\t\t\t\tif (failures.length > 1) throw new AggregateError(failures, t(\"Embedded SDK disposal failed\"));\n\t\t\t})();\n\t\t\treturn disposePromise;\n\t\t},\n\t};\n\treturn Object.freeze(binding);\n}\n\nexport const createEmbeddedSdkBinding = createEmbeddedSdkBindingV1;\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/export-html/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAO1D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAGvD;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAChC,oFAAoF;IACpF,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;IACpF,4GAA4G;IAC5G,YAAY,CACX,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,EAChF,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,OAAO,GACd;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;CACzD;AASD,MAAM,WAAW,aAAa;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8CAA8C;IAC9C,YAAY,CAAC,EAAE,gBAAgB,CAAC;CAChC;AAgMD;;;GAGG;AACH,wBAAsB,mBAAmB,CACxC,EAAE,EAAE,cAAc,EAClB,KAAK,CAAC,EAAE,UAAU,EAClB,OAAO,CAAC,EAAE,aAAa,GAAG,MAAM,GAC9B,OAAO,CAAC,MAAM,CAAC,CA0CjB;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA4BzG","sourcesContent":["import type { AgentState } from \"@agent-forge/agent-core\";\nimport { existsSync, readFileSync, writeFileSync } from \"fs\";\nimport { basename, join } from \"path\";\nimport { APP_NAME, getExportTemplateDir } from \"../../config.ts\";\nimport { getResolvedThemeColors, getThemeExportColors } from \"../../modes/interactive/theme/theme.ts\";\nimport { normalizePath, resolvePath } from \"../../utils/paths.ts\";\nimport type { SessionEntry } from \"../session-manager.ts\";\nimport { SessionManager } from \"../session-manager.ts\";\nimport type { ToolDefinition } from \"../tools/tool-definition.ts\";\n\n/**\n * Interface for rendering custom tools to HTML.\n * Used by agent-session to pre-render extension tool output.\n */\nexport interface ToolHtmlRenderer {\n\t/** Render a tool call to HTML. Returns undefined if tool has no custom renderer. */\n\trenderCall(toolCallId: string, toolName: string, args: unknown): string | undefined;\n\t/** Render a tool result to HTML. Returns collapsed/expanded or undefined if tool has no custom renderer. */\n\trenderResult(\n\t\ttoolCallId: string,\n\t\ttoolName: string,\n\t\tresult: Array<{ type: string; text?: string; data?: string; mimeType?: string }>,\n\t\tdetails: unknown,\n\t\tisError: boolean,\n\t): { collapsed?: string; expanded?: string } | undefined;\n}\n\n/** Pre-rendered HTML for a custom tool call and result */\ninterface RenderedToolHtml {\n\tcallHtml?: string;\n\tresultHtmlCollapsed?: string;\n\tresultHtmlExpanded?: string;\n}\n\nexport interface ExportOptions {\n\toutputPath?: string;\n\tthemeName?: string;\n\t/** Optional tool renderer for custom tools */\n\ttoolRenderer?: ToolHtmlRenderer;\n}\n\n/** Parse a color string to RGB values. Supports hex (#RRGGBB) and rgb(r,g,b) formats. */\nfunction parseColor(color: string): { r: number; g: number; b: number } | undefined {\n\tconst hexMatch = color.match(/^#([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/);\n\tif (hexMatch) {\n\t\treturn {\n\t\t\tr: Number.parseInt(hexMatch[1], 16),\n\t\t\tg: Number.parseInt(hexMatch[2], 16),\n\t\t\tb: Number.parseInt(hexMatch[3], 16),\n\t\t};\n\t}\n\tconst rgbMatch = color.match(/^rgb\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)$/);\n\tif (rgbMatch) {\n\t\treturn {\n\t\t\tr: Number.parseInt(rgbMatch[1], 10),\n\t\t\tg: Number.parseInt(rgbMatch[2], 10),\n\t\t\tb: Number.parseInt(rgbMatch[3], 10),\n\t\t};\n\t}\n\treturn undefined;\n}\n\n/** Calculate relative luminance of a color (0-1, higher = lighter). */\nfunction getLuminance(r: number, g: number, b: number): number {\n\tconst toLinear = (c: number) => {\n\t\tconst s = c / 255;\n\t\treturn s <= 0.03928 ? s / 12.92 : ((s + 0.055) / 1.055) ** 2.4;\n\t};\n\treturn 0.2126 * toLinear(r) + 0.7152 * toLinear(g) + 0.0722 * toLinear(b);\n}\n\n/** Adjust color brightness. Factor > 1 lightens, < 1 darkens. */\nfunction adjustBrightness(color: string, factor: number): string {\n\tconst parsed = parseColor(color);\n\tif (!parsed) return color;\n\tconst adjust = (c: number) => Math.min(255, Math.max(0, Math.round(c * factor)));\n\treturn `rgb(${adjust(parsed.r)}, ${adjust(parsed.g)}, ${adjust(parsed.b)})`;\n}\n\n/** Derive export background colors from a base color (e.g., userMessageBg). */\nfunction deriveExportColors(baseColor: string): { pageBg: string; cardBg: string; infoBg: string } {\n\tconst parsed = parseColor(baseColor);\n\tif (!parsed) {\n\t\treturn {\n\t\t\tpageBg: \"rgb(24, 24, 30)\",\n\t\t\tcardBg: \"rgb(30, 30, 36)\",\n\t\t\tinfoBg: \"rgb(60, 55, 40)\",\n\t\t};\n\t}\n\n\tconst luminance = getLuminance(parsed.r, parsed.g, parsed.b);\n\tconst isLight = luminance > 0.5;\n\n\tif (isLight) {\n\t\treturn {\n\t\t\tpageBg: adjustBrightness(baseColor, 0.96),\n\t\t\tcardBg: baseColor,\n\t\t\tinfoBg: `rgb(${Math.min(255, parsed.r + 10)}, ${Math.min(255, parsed.g + 5)}, ${Math.max(0, parsed.b - 20)})`,\n\t\t};\n\t}\n\treturn {\n\t\tpageBg: adjustBrightness(baseColor, 0.7),\n\t\tcardBg: adjustBrightness(baseColor, 0.85),\n\t\tinfoBg: `rgb(${Math.min(255, parsed.r + 20)}, ${Math.min(255, parsed.g + 15)}, ${parsed.b})`,\n\t};\n}\n\n/**\n * Generate CSS custom property declarations from theme colors.\n */\nfunction generateThemeVars(themeName?: string): string {\n\tconst colors = getResolvedThemeColors(themeName);\n\tconst lines: string[] = [];\n\tfor (const [key, value] of Object.entries(colors)) {\n\t\tlines.push(`--${key}: ${value};`);\n\t}\n\n\t// Use explicit theme export colors if available, otherwise derive from userMessageBg\n\tconst themeExport = getThemeExportColors(themeName);\n\tconst userMessageBg = colors.userMessageBg || \"#343541\";\n\tconst derivedColors = deriveExportColors(userMessageBg);\n\n\tlines.push(`--exportPageBg: ${themeExport.pageBg ?? derivedColors.pageBg};`);\n\tlines.push(`--exportCardBg: ${themeExport.cardBg ?? derivedColors.cardBg};`);\n\tlines.push(`--exportInfoBg: ${themeExport.infoBg ?? derivedColors.infoBg};`);\n\n\treturn lines.join(\"\\n \");\n}\n\ninterface SessionData {\n\theader: ReturnType<SessionManager[\"getHeader\"]>;\n\tentries: ReturnType<SessionManager[\"getEntries\"]>;\n\tleafId: string | null;\n\tsystemPrompt?: string;\n\ttools?: Array<Pick<ToolDefinition, \"name\" | \"description\" | \"parameters\">>;\n\t/** Pre-rendered HTML for custom tool calls/results, keyed by tool call ID */\n\trenderedTools?: Record<string, RenderedToolHtml>;\n}\n\n/**\n * Core HTML generation logic shared by both export functions.\n */\nfunction generateHtml(sessionData: SessionData, themeName?: string): string {\n\tconst templateDir = getExportTemplateDir();\n\tconst template = readFileSync(join(templateDir, \"template.html\"), \"utf-8\");\n\tconst templateCss = readFileSync(join(templateDir, \"template.css\"), \"utf-8\");\n\tconst templateJs = readFileSync(join(templateDir, \"template.js\"), \"utf-8\");\n\tconst markedJs = readFileSync(join(templateDir, \"vendor\", \"marked.min.js\"), \"utf-8\");\n\tconst hljsJs = readFileSync(join(templateDir, \"vendor\", \"highlight.min.js\"), \"utf-8\");\n\n\tconst themeVars = generateThemeVars(themeName);\n\tconst colors = getResolvedThemeColors(themeName);\n\tconst themeExport = getThemeExportColors(themeName);\n\tconst derivedExportColors = deriveExportColors(colors.userMessageBg || \"#343541\");\n\tconst bodyBg = themeExport.pageBg ?? derivedExportColors.pageBg;\n\tconst containerBg = themeExport.cardBg ?? derivedExportColors.cardBg;\n\tconst infoBg = themeExport.infoBg ?? derivedExportColors.infoBg;\n\n\t// Base64 encode session data to avoid escaping issues\n\tconst sessionDataBase64 = Buffer.from(JSON.stringify(sessionData)).toString(\"base64\");\n\n\t// Build the CSS with theme variables injected\n\tconst css = templateCss\n\t\t.replace(\"{{THEME_VARS}}\", themeVars)\n\t\t.replace(\"{{BODY_BG}}\", bodyBg)\n\t\t.replace(\"{{CONTAINER_BG}}\", containerBg)\n\t\t.replace(\"{{INFO_BG}}\", infoBg);\n\n\treturn template\n\t\t.replace(\"{{CSS}}\", css)\n\t\t.replace(\"{{JS}}\", templateJs)\n\t\t.replace(\"{{SESSION_DATA}}\", sessionDataBase64)\n\t\t.replace(\"{{MARKED_JS}}\", markedJs)\n\t\t.replace(\"{{HIGHLIGHT_JS}}\", hljsJs);\n}\n\n/** Tools rendered directly by the HTML template (not pre-rendered via TUI→ANSI→HTML pipeline) */\nconst TEMPLATE_RENDERED_TOOLS = new Set([\"bash\", \"read\", \"write\", \"edit\", \"ls\"]);\n\n/**\n * Pre-render custom tools to HTML using their TUI renderers.\n */\nfunction preRenderCustomTools(\n\tentries: SessionEntry[],\n\ttoolRenderer: ToolHtmlRenderer,\n): Record<string, RenderedToolHtml> {\n\tconst renderedTools: Record<string, RenderedToolHtml> = {};\n\n\tfor (const entry of entries) {\n\t\tif (entry.type !== \"message\") continue;\n\t\tconst msg = entry.message;\n\n\t\t// Find tool calls in assistant messages\n\t\tif (msg.role === \"assistant\" && Array.isArray(msg.content)) {\n\t\t\tfor (const block of msg.content) {\n\t\t\t\tif (block.type === \"toolCall\" && !TEMPLATE_RENDERED_TOOLS.has(block.name)) {\n\t\t\t\t\tconst callHtml = toolRenderer.renderCall(block.id, block.name, block.arguments);\n\t\t\t\t\tif (callHtml) {\n\t\t\t\t\t\trenderedTools[block.id] = { callHtml };\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Find tool results\n\t\tif (msg.role === \"toolResult\" && msg.toolCallId) {\n\t\t\tconst toolName = msg.toolName || \"\";\n\t\t\t// Only render if we have a pre-rendered call OR it's not template-rendered\n\t\t\tconst existing = renderedTools[msg.toolCallId];\n\t\t\tif (existing || !TEMPLATE_RENDERED_TOOLS.has(toolName)) {\n\t\t\t\tconst rendered = toolRenderer.renderResult(\n\t\t\t\t\tmsg.toolCallId,\n\t\t\t\t\ttoolName,\n\t\t\t\t\tmsg.content,\n\t\t\t\t\tmsg.details,\n\t\t\t\t\tmsg.isError || false,\n\t\t\t\t);\n\t\t\t\tif (rendered) {\n\t\t\t\t\trenderedTools[msg.toolCallId] = {\n\t\t\t\t\t\t...existing,\n\t\t\t\t\t\tresultHtmlCollapsed: rendered.collapsed,\n\t\t\t\t\t\tresultHtmlExpanded: rendered.expanded,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn renderedTools;\n}\n\n/**\n * Export session to HTML using SessionManager and AgentState.\n * Used by TUI's /export command.\n */\nexport async function exportSessionToHtml(\n\tsm: SessionManager,\n\tstate?: AgentState,\n\toptions?: ExportOptions | string,\n): Promise<string> {\n\tconst opts: ExportOptions = typeof options === \"string\" ? { outputPath: options } : options || {};\n\n\tconst sessionFile = sm.getSessionFile();\n\tif (!sessionFile) {\n\t\tthrow new Error(\"Cannot export in-memory session to HTML\");\n\t}\n\tif (!existsSync(sessionFile)) {\n\t\tthrow new Error(\"Nothing to export yet - start a conversation first\");\n\t}\n\n\tconst entries = sm.getEntries();\n\n\t// Pre-render custom tools if a tool renderer is provided\n\tlet renderedTools: Record<string, RenderedToolHtml> | undefined;\n\tif (opts.toolRenderer) {\n\t\trenderedTools = preRenderCustomTools(entries, opts.toolRenderer);\n\t\t// Only include if we actually rendered something\n\t\tif (Object.keys(renderedTools).length === 0) {\n\t\t\trenderedTools = undefined;\n\t\t}\n\t}\n\n\tconst sessionData: SessionData = {\n\t\theader: sm.getHeader(),\n\t\tentries,\n\t\tleafId: sm.getLeafId(),\n\t\tsystemPrompt: state?.systemPrompt,\n\t\ttools: state?.tools?.map((t) => ({ name: t.name, description: t.description, parameters: t.parameters })),\n\t\trenderedTools,\n\t};\n\n\tconst html = generateHtml(sessionData, opts.themeName);\n\n\tlet outputPath = opts.outputPath ? normalizePath(opts.outputPath) : undefined;\n\tif (!outputPath) {\n\t\tconst sessionBasename = basename(sessionFile, \".jsonl\");\n\t\toutputPath = `${APP_NAME}-session-${sessionBasename}.html`;\n\t}\n\n\twriteFileSync(outputPath, html, \"utf8\");\n\treturn outputPath;\n}\n\n/**\n * Export session file to HTML (standalone, without AgentState).\n * Used by CLI for exporting arbitrary session files.\n */\nexport async function exportFromFile(inputPath: string, options?: ExportOptions | string): Promise<string> {\n\tconst opts: ExportOptions = typeof options === \"string\" ? { outputPath: options } : options || {};\n\tconst resolvedInputPath = resolvePath(inputPath);\n\n\tif (!existsSync(resolvedInputPath)) {\n\t\tthrow new Error(`File not found: ${resolvedInputPath}`);\n\t}\n\n\tconst sm = SessionManager.open(resolvedInputPath);\n\n\tconst sessionData: SessionData = {\n\t\theader: sm.getHeader(),\n\t\tentries: sm.getEntries(),\n\t\tleafId: sm.getLeafId(),\n\t\tsystemPrompt: undefined,\n\t\ttools: undefined,\n\t};\n\n\tconst html = generateHtml(sessionData, opts.themeName);\n\n\tlet outputPath = opts.outputPath ? normalizePath(opts.outputPath) : undefined;\n\tif (!outputPath) {\n\t\tconst inputBasename = basename(resolvedInputPath, \".jsonl\");\n\t\toutputPath = `${APP_NAME}-session-${inputBasename}.html`;\n\t}\n\n\twriteFileSync(outputPath, html, \"utf8\");\n\treturn outputPath;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/export-html/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAQ1D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAGvD;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAChC,oFAAoF;IACpF,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;IACpF,4GAA4G;IAC5G,YAAY,CACX,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,EAChF,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,OAAO,GACd;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;CACzD;AASD,MAAM,WAAW,aAAa;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8CAA8C;IAC9C,YAAY,CAAC,EAAE,gBAAgB,CAAC;CAChC;AAgMD;;;GAGG;AACH,wBAAsB,mBAAmB,CACxC,EAAE,EAAE,cAAc,EAClB,KAAK,CAAC,EAAE,UAAU,EAClB,OAAO,CAAC,EAAE,aAAa,GAAG,MAAM,GAC9B,OAAO,CAAC,MAAM,CAAC,CA8CjB;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA4BzG","sourcesContent":["import type { AgentState } from \"@agent-forge/agent-core\";\nimport { existsSync, readFileSync, writeFileSync } from \"fs\";\nimport { basename, join } from \"path\";\nimport { APP_NAME, getExportTemplateDir } from \"../../config.ts\";\nimport { getResolvedThemeColors, getThemeExportColors } from \"../../modes/interactive/theme/theme.ts\";\nimport { normalizePath, resolvePath } from \"../../utils/paths.ts\";\nimport { t } from \"../i18n/index.ts\";\nimport type { SessionEntry } from \"../session-manager.ts\";\nimport { SessionManager } from \"../session-manager.ts\";\nimport type { ToolDefinition } from \"../tools/tool-definition.ts\";\n\n/**\n * Interface for rendering custom tools to HTML.\n * Used by agent-session to pre-render extension tool output.\n */\nexport interface ToolHtmlRenderer {\n\t/** Render a tool call to HTML. Returns undefined if tool has no custom renderer. */\n\trenderCall(toolCallId: string, toolName: string, args: unknown): string | undefined;\n\t/** Render a tool result to HTML. Returns collapsed/expanded or undefined if tool has no custom renderer. */\n\trenderResult(\n\t\ttoolCallId: string,\n\t\ttoolName: string,\n\t\tresult: Array<{ type: string; text?: string; data?: string; mimeType?: string }>,\n\t\tdetails: unknown,\n\t\tisError: boolean,\n\t): { collapsed?: string; expanded?: string } | undefined;\n}\n\n/** Pre-rendered HTML for a custom tool call and result */\ninterface RenderedToolHtml {\n\tcallHtml?: string;\n\tresultHtmlCollapsed?: string;\n\tresultHtmlExpanded?: string;\n}\n\nexport interface ExportOptions {\n\toutputPath?: string;\n\tthemeName?: string;\n\t/** Optional tool renderer for custom tools */\n\ttoolRenderer?: ToolHtmlRenderer;\n}\n\n/** Parse a color string to RGB values. Supports hex (#RRGGBB) and rgb(r,g,b) formats. */\nfunction parseColor(color: string): { r: number; g: number; b: number } | undefined {\n\tconst hexMatch = color.match(/^#([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/);\n\tif (hexMatch) {\n\t\treturn {\n\t\t\tr: Number.parseInt(hexMatch[1], 16),\n\t\t\tg: Number.parseInt(hexMatch[2], 16),\n\t\t\tb: Number.parseInt(hexMatch[3], 16),\n\t\t};\n\t}\n\tconst rgbMatch = color.match(/^rgb\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)$/);\n\tif (rgbMatch) {\n\t\treturn {\n\t\t\tr: Number.parseInt(rgbMatch[1], 10),\n\t\t\tg: Number.parseInt(rgbMatch[2], 10),\n\t\t\tb: Number.parseInt(rgbMatch[3], 10),\n\t\t};\n\t}\n\treturn undefined;\n}\n\n/** Calculate relative luminance of a color (0-1, higher = lighter). */\nfunction getLuminance(r: number, g: number, b: number): number {\n\tconst toLinear = (c: number) => {\n\t\tconst s = c / 255;\n\t\treturn s <= 0.03928 ? s / 12.92 : ((s + 0.055) / 1.055) ** 2.4;\n\t};\n\treturn 0.2126 * toLinear(r) + 0.7152 * toLinear(g) + 0.0722 * toLinear(b);\n}\n\n/** Adjust color brightness. Factor > 1 lightens, < 1 darkens. */\nfunction adjustBrightness(color: string, factor: number): string {\n\tconst parsed = parseColor(color);\n\tif (!parsed) return color;\n\tconst adjust = (c: number) => Math.min(255, Math.max(0, Math.round(c * factor)));\n\treturn `rgb(${adjust(parsed.r)}, ${adjust(parsed.g)}, ${adjust(parsed.b)})`;\n}\n\n/** Derive export background colors from a base color (e.g., userMessageBg). */\nfunction deriveExportColors(baseColor: string): { pageBg: string; cardBg: string; infoBg: string } {\n\tconst parsed = parseColor(baseColor);\n\tif (!parsed) {\n\t\treturn {\n\t\t\tpageBg: \"rgb(24, 24, 30)\",\n\t\t\tcardBg: \"rgb(30, 30, 36)\",\n\t\t\tinfoBg: \"rgb(60, 55, 40)\",\n\t\t};\n\t}\n\n\tconst luminance = getLuminance(parsed.r, parsed.g, parsed.b);\n\tconst isLight = luminance > 0.5;\n\n\tif (isLight) {\n\t\treturn {\n\t\t\tpageBg: adjustBrightness(baseColor, 0.96),\n\t\t\tcardBg: baseColor,\n\t\t\tinfoBg: `rgb(${Math.min(255, parsed.r + 10)}, ${Math.min(255, parsed.g + 5)}, ${Math.max(0, parsed.b - 20)})`,\n\t\t};\n\t}\n\treturn {\n\t\tpageBg: adjustBrightness(baseColor, 0.7),\n\t\tcardBg: adjustBrightness(baseColor, 0.85),\n\t\tinfoBg: `rgb(${Math.min(255, parsed.r + 20)}, ${Math.min(255, parsed.g + 15)}, ${parsed.b})`,\n\t};\n}\n\n/**\n * Generate CSS custom property declarations from theme colors.\n */\nfunction generateThemeVars(themeName?: string): string {\n\tconst colors = getResolvedThemeColors(themeName);\n\tconst lines: string[] = [];\n\tfor (const [key, value] of Object.entries(colors)) {\n\t\tlines.push(`--${key}: ${value};`);\n\t}\n\n\t// Use explicit theme export colors if available, otherwise derive from userMessageBg\n\tconst themeExport = getThemeExportColors(themeName);\n\tconst userMessageBg = colors.userMessageBg || \"#343541\";\n\tconst derivedColors = deriveExportColors(userMessageBg);\n\n\tlines.push(`--exportPageBg: ${themeExport.pageBg ?? derivedColors.pageBg};`);\n\tlines.push(`--exportCardBg: ${themeExport.cardBg ?? derivedColors.cardBg};`);\n\tlines.push(`--exportInfoBg: ${themeExport.infoBg ?? derivedColors.infoBg};`);\n\n\treturn lines.join(\"\\n \");\n}\n\ninterface SessionData {\n\theader: ReturnType<SessionManager[\"getHeader\"]>;\n\tentries: ReturnType<SessionManager[\"getEntries\"]>;\n\tleafId: string | null;\n\tsystemPrompt?: string;\n\ttools?: Array<Pick<ToolDefinition, \"name\" | \"description\" | \"parameters\">>;\n\t/** Pre-rendered HTML for custom tool calls/results, keyed by tool call ID */\n\trenderedTools?: Record<string, RenderedToolHtml>;\n}\n\n/**\n * Core HTML generation logic shared by both export functions.\n */\nfunction generateHtml(sessionData: SessionData, themeName?: string): string {\n\tconst templateDir = getExportTemplateDir();\n\tconst template = readFileSync(join(templateDir, \"template.html\"), \"utf-8\");\n\tconst templateCss = readFileSync(join(templateDir, \"template.css\"), \"utf-8\");\n\tconst templateJs = readFileSync(join(templateDir, \"template.js\"), \"utf-8\");\n\tconst markedJs = readFileSync(join(templateDir, \"vendor\", \"marked.min.js\"), \"utf-8\");\n\tconst hljsJs = readFileSync(join(templateDir, \"vendor\", \"highlight.min.js\"), \"utf-8\");\n\n\tconst themeVars = generateThemeVars(themeName);\n\tconst colors = getResolvedThemeColors(themeName);\n\tconst themeExport = getThemeExportColors(themeName);\n\tconst derivedExportColors = deriveExportColors(colors.userMessageBg || \"#343541\");\n\tconst bodyBg = themeExport.pageBg ?? derivedExportColors.pageBg;\n\tconst containerBg = themeExport.cardBg ?? derivedExportColors.cardBg;\n\tconst infoBg = themeExport.infoBg ?? derivedExportColors.infoBg;\n\n\t// Base64 encode session data to avoid escaping issues\n\tconst sessionDataBase64 = Buffer.from(JSON.stringify(sessionData)).toString(\"base64\");\n\n\t// Build the CSS with theme variables injected\n\tconst css = templateCss\n\t\t.replace(\"{{THEME_VARS}}\", themeVars)\n\t\t.replace(\"{{BODY_BG}}\", bodyBg)\n\t\t.replace(\"{{CONTAINER_BG}}\", containerBg)\n\t\t.replace(\"{{INFO_BG}}\", infoBg);\n\n\treturn template\n\t\t.replace(\"{{CSS}}\", css)\n\t\t.replace(\"{{JS}}\", templateJs)\n\t\t.replace(\"{{SESSION_DATA}}\", sessionDataBase64)\n\t\t.replace(\"{{MARKED_JS}}\", markedJs)\n\t\t.replace(\"{{HIGHLIGHT_JS}}\", hljsJs);\n}\n\n/** Tools rendered directly by the HTML template (not pre-rendered via TUI→ANSI→HTML pipeline) */\nconst TEMPLATE_RENDERED_TOOLS = new Set([\"bash\", \"read\", \"write\", \"edit\", \"ls\"]);\n\n/**\n * Pre-render custom tools to HTML using their TUI renderers.\n */\nfunction preRenderCustomTools(\n\tentries: SessionEntry[],\n\ttoolRenderer: ToolHtmlRenderer,\n): Record<string, RenderedToolHtml> {\n\tconst renderedTools: Record<string, RenderedToolHtml> = {};\n\n\tfor (const entry of entries) {\n\t\tif (entry.type !== \"message\") continue;\n\t\tconst msg = entry.message;\n\n\t\t// Find tool calls in assistant messages\n\t\tif (msg.role === \"assistant\" && Array.isArray(msg.content)) {\n\t\t\tfor (const block of msg.content) {\n\t\t\t\tif (block.type === \"toolCall\" && !TEMPLATE_RENDERED_TOOLS.has(block.name)) {\n\t\t\t\t\tconst callHtml = toolRenderer.renderCall(block.id, block.name, block.arguments);\n\t\t\t\t\tif (callHtml) {\n\t\t\t\t\t\trenderedTools[block.id] = { callHtml };\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Find tool results\n\t\tif (msg.role === \"toolResult\" && msg.toolCallId) {\n\t\t\tconst toolName = msg.toolName || \"\";\n\t\t\t// Only render if we have a pre-rendered call OR it's not template-rendered\n\t\t\tconst existing = renderedTools[msg.toolCallId];\n\t\t\tif (existing || !TEMPLATE_RENDERED_TOOLS.has(toolName)) {\n\t\t\t\tconst rendered = toolRenderer.renderResult(\n\t\t\t\t\tmsg.toolCallId,\n\t\t\t\t\ttoolName,\n\t\t\t\t\tmsg.content,\n\t\t\t\t\tmsg.details,\n\t\t\t\t\tmsg.isError || false,\n\t\t\t\t);\n\t\t\t\tif (rendered) {\n\t\t\t\t\trenderedTools[msg.toolCallId] = {\n\t\t\t\t\t\t...existing,\n\t\t\t\t\t\tresultHtmlCollapsed: rendered.collapsed,\n\t\t\t\t\t\tresultHtmlExpanded: rendered.expanded,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn renderedTools;\n}\n\n/**\n * Export session to HTML using SessionManager and AgentState.\n * Used by TUI's /export command.\n */\nexport async function exportSessionToHtml(\n\tsm: SessionManager,\n\tstate?: AgentState,\n\toptions?: ExportOptions | string,\n): Promise<string> {\n\tconst opts: ExportOptions = typeof options === \"string\" ? { outputPath: options } : options || {};\n\n\tconst sessionFile = sm.getSessionFile();\n\tif (!sessionFile) {\n\t\tthrow new Error(t(\"Cannot export in-memory session to HTML\"));\n\t}\n\tif (!existsSync(sessionFile)) {\n\t\tthrow new Error(t(\"Nothing to export yet - start a conversation first\"));\n\t}\n\n\tconst entries = sm.getEntries();\n\n\t// Pre-render custom tools if a tool renderer is provided\n\tlet renderedTools: Record<string, RenderedToolHtml> | undefined;\n\tif (opts.toolRenderer) {\n\t\trenderedTools = preRenderCustomTools(entries, opts.toolRenderer);\n\t\t// Only include if we actually rendered something\n\t\tif (Object.keys(renderedTools).length === 0) {\n\t\t\trenderedTools = undefined;\n\t\t}\n\t}\n\n\tconst sessionData: SessionData = {\n\t\theader: sm.getHeader(),\n\t\tentries,\n\t\tleafId: sm.getLeafId(),\n\t\tsystemPrompt: state?.systemPrompt,\n\t\ttools: state?.tools?.map((tool) => ({\n\t\t\tname: tool.name,\n\t\t\tdescription: tool.description,\n\t\t\tparameters: tool.parameters,\n\t\t})),\n\t\trenderedTools,\n\t};\n\n\tconst html = generateHtml(sessionData, opts.themeName);\n\n\tlet outputPath = opts.outputPath ? normalizePath(opts.outputPath) : undefined;\n\tif (!outputPath) {\n\t\tconst sessionBasename = basename(sessionFile, \".jsonl\");\n\t\toutputPath = `${APP_NAME}-session-${sessionBasename}.html`;\n\t}\n\n\twriteFileSync(outputPath, html, \"utf8\");\n\treturn outputPath;\n}\n\n/**\n * Export session file to HTML (standalone, without AgentState).\n * Used by CLI for exporting arbitrary session files.\n */\nexport async function exportFromFile(inputPath: string, options?: ExportOptions | string): Promise<string> {\n\tconst opts: ExportOptions = typeof options === \"string\" ? { outputPath: options } : options || {};\n\tconst resolvedInputPath = resolvePath(inputPath);\n\n\tif (!existsSync(resolvedInputPath)) {\n\t\tthrow new Error(t(\"File not found: {path}\", { path: resolvedInputPath }));\n\t}\n\n\tconst sm = SessionManager.open(resolvedInputPath);\n\n\tconst sessionData: SessionData = {\n\t\theader: sm.getHeader(),\n\t\tentries: sm.getEntries(),\n\t\tleafId: sm.getLeafId(),\n\t\tsystemPrompt: undefined,\n\t\ttools: undefined,\n\t};\n\n\tconst html = generateHtml(sessionData, opts.themeName);\n\n\tlet outputPath = opts.outputPath ? normalizePath(opts.outputPath) : undefined;\n\tif (!outputPath) {\n\t\tconst inputBasename = basename(resolvedInputPath, \".jsonl\");\n\t\toutputPath = `${APP_NAME}-session-${inputBasename}.html`;\n\t}\n\n\twriteFileSync(outputPath, html, \"utf8\");\n\treturn outputPath;\n}\n"]}
|
|
@@ -3,6 +3,7 @@ import { basename, join } from "path";
|
|
|
3
3
|
import { APP_NAME, getExportTemplateDir } from "../../config.js";
|
|
4
4
|
import { getResolvedThemeColors, getThemeExportColors } from "../../modes/interactive/theme/theme.js";
|
|
5
5
|
import { normalizePath, resolvePath } from "../../utils/paths.js";
|
|
6
|
+
import { t } from "../i18n/index.js";
|
|
6
7
|
import { SessionManager } from "../session-manager.js";
|
|
7
8
|
/** Parse a color string to RGB values. Supports hex (#RRGGBB) and rgb(r,g,b) formats. */
|
|
8
9
|
function parseColor(color) {
|
|
@@ -164,10 +165,10 @@ export async function exportSessionToHtml(sm, state, options) {
|
|
|
164
165
|
const opts = typeof options === "string" ? { outputPath: options } : options || {};
|
|
165
166
|
const sessionFile = sm.getSessionFile();
|
|
166
167
|
if (!sessionFile) {
|
|
167
|
-
throw new Error("Cannot export in-memory session to HTML");
|
|
168
|
+
throw new Error(t("Cannot export in-memory session to HTML"));
|
|
168
169
|
}
|
|
169
170
|
if (!existsSync(sessionFile)) {
|
|
170
|
-
throw new Error("Nothing to export yet - start a conversation first");
|
|
171
|
+
throw new Error(t("Nothing to export yet - start a conversation first"));
|
|
171
172
|
}
|
|
172
173
|
const entries = sm.getEntries();
|
|
173
174
|
// Pre-render custom tools if a tool renderer is provided
|
|
@@ -184,7 +185,11 @@ export async function exportSessionToHtml(sm, state, options) {
|
|
|
184
185
|
entries,
|
|
185
186
|
leafId: sm.getLeafId(),
|
|
186
187
|
systemPrompt: state?.systemPrompt,
|
|
187
|
-
tools: state?.tools?.map((
|
|
188
|
+
tools: state?.tools?.map((tool) => ({
|
|
189
|
+
name: tool.name,
|
|
190
|
+
description: tool.description,
|
|
191
|
+
parameters: tool.parameters,
|
|
192
|
+
})),
|
|
188
193
|
renderedTools,
|
|
189
194
|
};
|
|
190
195
|
const html = generateHtml(sessionData, opts.themeName);
|
|
@@ -204,7 +209,7 @@ export async function exportFromFile(inputPath, options) {
|
|
|
204
209
|
const opts = typeof options === "string" ? { outputPath: options } : options || {};
|
|
205
210
|
const resolvedInputPath = resolvePath(inputPath);
|
|
206
211
|
if (!existsSync(resolvedInputPath)) {
|
|
207
|
-
throw new Error(
|
|
212
|
+
throw new Error(t("File not found: {path}", { path: resolvedInputPath }));
|
|
208
213
|
}
|
|
209
214
|
const sm = SessionManager.open(resolvedInputPath);
|
|
210
215
|
const sessionData = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/export-html/index.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AgentState } from \"@agent-forge/agent-core\";\nimport { existsSync, readFileSync, writeFileSync } from \"fs\";\nimport { basename, join } from \"path\";\nimport { APP_NAME, getExportTemplateDir } from \"../../config.ts\";\nimport { getResolvedThemeColors, getThemeExportColors } from \"../../modes/interactive/theme/theme.ts\";\nimport { normalizePath, resolvePath } from \"../../utils/paths.ts\";\nimport type { SessionEntry } from \"../session-manager.ts\";\nimport { SessionManager } from \"../session-manager.ts\";\nimport type { ToolDefinition } from \"../tools/tool-definition.ts\";\n\n/**\n * Interface for rendering custom tools to HTML.\n * Used by agent-session to pre-render extension tool output.\n */\nexport interface ToolHtmlRenderer {\n\t/** Render a tool call to HTML. Returns undefined if tool has no custom renderer. */\n\trenderCall(toolCallId: string, toolName: string, args: unknown): string | undefined;\n\t/** Render a tool result to HTML. Returns collapsed/expanded or undefined if tool has no custom renderer. */\n\trenderResult(\n\t\ttoolCallId: string,\n\t\ttoolName: string,\n\t\tresult: Array<{ type: string; text?: string; data?: string; mimeType?: string }>,\n\t\tdetails: unknown,\n\t\tisError: boolean,\n\t): { collapsed?: string; expanded?: string } | undefined;\n}\n\n/** Pre-rendered HTML for a custom tool call and result */\ninterface RenderedToolHtml {\n\tcallHtml?: string;\n\tresultHtmlCollapsed?: string;\n\tresultHtmlExpanded?: string;\n}\n\nexport interface ExportOptions {\n\toutputPath?: string;\n\tthemeName?: string;\n\t/** Optional tool renderer for custom tools */\n\ttoolRenderer?: ToolHtmlRenderer;\n}\n\n/** Parse a color string to RGB values. Supports hex (#RRGGBB) and rgb(r,g,b) formats. */\nfunction parseColor(color: string): { r: number; g: number; b: number } | undefined {\n\tconst hexMatch = color.match(/^#([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/);\n\tif (hexMatch) {\n\t\treturn {\n\t\t\tr: Number.parseInt(hexMatch[1], 16),\n\t\t\tg: Number.parseInt(hexMatch[2], 16),\n\t\t\tb: Number.parseInt(hexMatch[3], 16),\n\t\t};\n\t}\n\tconst rgbMatch = color.match(/^rgb\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)$/);\n\tif (rgbMatch) {\n\t\treturn {\n\t\t\tr: Number.parseInt(rgbMatch[1], 10),\n\t\t\tg: Number.parseInt(rgbMatch[2], 10),\n\t\t\tb: Number.parseInt(rgbMatch[3], 10),\n\t\t};\n\t}\n\treturn undefined;\n}\n\n/** Calculate relative luminance of a color (0-1, higher = lighter). */\nfunction getLuminance(r: number, g: number, b: number): number {\n\tconst toLinear = (c: number) => {\n\t\tconst s = c / 255;\n\t\treturn s <= 0.03928 ? s / 12.92 : ((s + 0.055) / 1.055) ** 2.4;\n\t};\n\treturn 0.2126 * toLinear(r) + 0.7152 * toLinear(g) + 0.0722 * toLinear(b);\n}\n\n/** Adjust color brightness. Factor > 1 lightens, < 1 darkens. */\nfunction adjustBrightness(color: string, factor: number): string {\n\tconst parsed = parseColor(color);\n\tif (!parsed) return color;\n\tconst adjust = (c: number) => Math.min(255, Math.max(0, Math.round(c * factor)));\n\treturn `rgb(${adjust(parsed.r)}, ${adjust(parsed.g)}, ${adjust(parsed.b)})`;\n}\n\n/** Derive export background colors from a base color (e.g., userMessageBg). */\nfunction deriveExportColors(baseColor: string): { pageBg: string; cardBg: string; infoBg: string } {\n\tconst parsed = parseColor(baseColor);\n\tif (!parsed) {\n\t\treturn {\n\t\t\tpageBg: \"rgb(24, 24, 30)\",\n\t\t\tcardBg: \"rgb(30, 30, 36)\",\n\t\t\tinfoBg: \"rgb(60, 55, 40)\",\n\t\t};\n\t}\n\n\tconst luminance = getLuminance(parsed.r, parsed.g, parsed.b);\n\tconst isLight = luminance > 0.5;\n\n\tif (isLight) {\n\t\treturn {\n\t\t\tpageBg: adjustBrightness(baseColor, 0.96),\n\t\t\tcardBg: baseColor,\n\t\t\tinfoBg: `rgb(${Math.min(255, parsed.r + 10)}, ${Math.min(255, parsed.g + 5)}, ${Math.max(0, parsed.b - 20)})`,\n\t\t};\n\t}\n\treturn {\n\t\tpageBg: adjustBrightness(baseColor, 0.7),\n\t\tcardBg: adjustBrightness(baseColor, 0.85),\n\t\tinfoBg: `rgb(${Math.min(255, parsed.r + 20)}, ${Math.min(255, parsed.g + 15)}, ${parsed.b})`,\n\t};\n}\n\n/**\n * Generate CSS custom property declarations from theme colors.\n */\nfunction generateThemeVars(themeName?: string): string {\n\tconst colors = getResolvedThemeColors(themeName);\n\tconst lines: string[] = [];\n\tfor (const [key, value] of Object.entries(colors)) {\n\t\tlines.push(`--${key}: ${value};`);\n\t}\n\n\t// Use explicit theme export colors if available, otherwise derive from userMessageBg\n\tconst themeExport = getThemeExportColors(themeName);\n\tconst userMessageBg = colors.userMessageBg || \"#343541\";\n\tconst derivedColors = deriveExportColors(userMessageBg);\n\n\tlines.push(`--exportPageBg: ${themeExport.pageBg ?? derivedColors.pageBg};`);\n\tlines.push(`--exportCardBg: ${themeExport.cardBg ?? derivedColors.cardBg};`);\n\tlines.push(`--exportInfoBg: ${themeExport.infoBg ?? derivedColors.infoBg};`);\n\n\treturn lines.join(\"\\n \");\n}\n\ninterface SessionData {\n\theader: ReturnType<SessionManager[\"getHeader\"]>;\n\tentries: ReturnType<SessionManager[\"getEntries\"]>;\n\tleafId: string | null;\n\tsystemPrompt?: string;\n\ttools?: Array<Pick<ToolDefinition, \"name\" | \"description\" | \"parameters\">>;\n\t/** Pre-rendered HTML for custom tool calls/results, keyed by tool call ID */\n\trenderedTools?: Record<string, RenderedToolHtml>;\n}\n\n/**\n * Core HTML generation logic shared by both export functions.\n */\nfunction generateHtml(sessionData: SessionData, themeName?: string): string {\n\tconst templateDir = getExportTemplateDir();\n\tconst template = readFileSync(join(templateDir, \"template.html\"), \"utf-8\");\n\tconst templateCss = readFileSync(join(templateDir, \"template.css\"), \"utf-8\");\n\tconst templateJs = readFileSync(join(templateDir, \"template.js\"), \"utf-8\");\n\tconst markedJs = readFileSync(join(templateDir, \"vendor\", \"marked.min.js\"), \"utf-8\");\n\tconst hljsJs = readFileSync(join(templateDir, \"vendor\", \"highlight.min.js\"), \"utf-8\");\n\n\tconst themeVars = generateThemeVars(themeName);\n\tconst colors = getResolvedThemeColors(themeName);\n\tconst themeExport = getThemeExportColors(themeName);\n\tconst derivedExportColors = deriveExportColors(colors.userMessageBg || \"#343541\");\n\tconst bodyBg = themeExport.pageBg ?? derivedExportColors.pageBg;\n\tconst containerBg = themeExport.cardBg ?? derivedExportColors.cardBg;\n\tconst infoBg = themeExport.infoBg ?? derivedExportColors.infoBg;\n\n\t// Base64 encode session data to avoid escaping issues\n\tconst sessionDataBase64 = Buffer.from(JSON.stringify(sessionData)).toString(\"base64\");\n\n\t// Build the CSS with theme variables injected\n\tconst css = templateCss\n\t\t.replace(\"{{THEME_VARS}}\", themeVars)\n\t\t.replace(\"{{BODY_BG}}\", bodyBg)\n\t\t.replace(\"{{CONTAINER_BG}}\", containerBg)\n\t\t.replace(\"{{INFO_BG}}\", infoBg);\n\n\treturn template\n\t\t.replace(\"{{CSS}}\", css)\n\t\t.replace(\"{{JS}}\", templateJs)\n\t\t.replace(\"{{SESSION_DATA}}\", sessionDataBase64)\n\t\t.replace(\"{{MARKED_JS}}\", markedJs)\n\t\t.replace(\"{{HIGHLIGHT_JS}}\", hljsJs);\n}\n\n/** Tools rendered directly by the HTML template (not pre-rendered via TUI→ANSI→HTML pipeline) */\nconst TEMPLATE_RENDERED_TOOLS = new Set([\"bash\", \"read\", \"write\", \"edit\", \"ls\"]);\n\n/**\n * Pre-render custom tools to HTML using their TUI renderers.\n */\nfunction preRenderCustomTools(\n\tentries: SessionEntry[],\n\ttoolRenderer: ToolHtmlRenderer,\n): Record<string, RenderedToolHtml> {\n\tconst renderedTools: Record<string, RenderedToolHtml> = {};\n\n\tfor (const entry of entries) {\n\t\tif (entry.type !== \"message\") continue;\n\t\tconst msg = entry.message;\n\n\t\t// Find tool calls in assistant messages\n\t\tif (msg.role === \"assistant\" && Array.isArray(msg.content)) {\n\t\t\tfor (const block of msg.content) {\n\t\t\t\tif (block.type === \"toolCall\" && !TEMPLATE_RENDERED_TOOLS.has(block.name)) {\n\t\t\t\t\tconst callHtml = toolRenderer.renderCall(block.id, block.name, block.arguments);\n\t\t\t\t\tif (callHtml) {\n\t\t\t\t\t\trenderedTools[block.id] = { callHtml };\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Find tool results\n\t\tif (msg.role === \"toolResult\" && msg.toolCallId) {\n\t\t\tconst toolName = msg.toolName || \"\";\n\t\t\t// Only render if we have a pre-rendered call OR it's not template-rendered\n\t\t\tconst existing = renderedTools[msg.toolCallId];\n\t\t\tif (existing || !TEMPLATE_RENDERED_TOOLS.has(toolName)) {\n\t\t\t\tconst rendered = toolRenderer.renderResult(\n\t\t\t\t\tmsg.toolCallId,\n\t\t\t\t\ttoolName,\n\t\t\t\t\tmsg.content,\n\t\t\t\t\tmsg.details,\n\t\t\t\t\tmsg.isError || false,\n\t\t\t\t);\n\t\t\t\tif (rendered) {\n\t\t\t\t\trenderedTools[msg.toolCallId] = {\n\t\t\t\t\t\t...existing,\n\t\t\t\t\t\tresultHtmlCollapsed: rendered.collapsed,\n\t\t\t\t\t\tresultHtmlExpanded: rendered.expanded,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn renderedTools;\n}\n\n/**\n * Export session to HTML using SessionManager and AgentState.\n * Used by TUI's /export command.\n */\nexport async function exportSessionToHtml(\n\tsm: SessionManager,\n\tstate?: AgentState,\n\toptions?: ExportOptions | string,\n): Promise<string> {\n\tconst opts: ExportOptions = typeof options === \"string\" ? { outputPath: options } : options || {};\n\n\tconst sessionFile = sm.getSessionFile();\n\tif (!sessionFile) {\n\t\tthrow new Error(\"Cannot export in-memory session to HTML\");\n\t}\n\tif (!existsSync(sessionFile)) {\n\t\tthrow new Error(\"Nothing to export yet - start a conversation first\");\n\t}\n\n\tconst entries = sm.getEntries();\n\n\t// Pre-render custom tools if a tool renderer is provided\n\tlet renderedTools: Record<string, RenderedToolHtml> | undefined;\n\tif (opts.toolRenderer) {\n\t\trenderedTools = preRenderCustomTools(entries, opts.toolRenderer);\n\t\t// Only include if we actually rendered something\n\t\tif (Object.keys(renderedTools).length === 0) {\n\t\t\trenderedTools = undefined;\n\t\t}\n\t}\n\n\tconst sessionData: SessionData = {\n\t\theader: sm.getHeader(),\n\t\tentries,\n\t\tleafId: sm.getLeafId(),\n\t\tsystemPrompt: state?.systemPrompt,\n\t\ttools: state?.tools?.map((t) => ({ name: t.name, description: t.description, parameters: t.parameters })),\n\t\trenderedTools,\n\t};\n\n\tconst html = generateHtml(sessionData, opts.themeName);\n\n\tlet outputPath = opts.outputPath ? normalizePath(opts.outputPath) : undefined;\n\tif (!outputPath) {\n\t\tconst sessionBasename = basename(sessionFile, \".jsonl\");\n\t\toutputPath = `${APP_NAME}-session-${sessionBasename}.html`;\n\t}\n\n\twriteFileSync(outputPath, html, \"utf8\");\n\treturn outputPath;\n}\n\n/**\n * Export session file to HTML (standalone, without AgentState).\n * Used by CLI for exporting arbitrary session files.\n */\nexport async function exportFromFile(inputPath: string, options?: ExportOptions | string): Promise<string> {\n\tconst opts: ExportOptions = typeof options === \"string\" ? { outputPath: options } : options || {};\n\tconst resolvedInputPath = resolvePath(inputPath);\n\n\tif (!existsSync(resolvedInputPath)) {\n\t\tthrow new Error(`File not found: ${resolvedInputPath}`);\n\t}\n\n\tconst sm = SessionManager.open(resolvedInputPath);\n\n\tconst sessionData: SessionData = {\n\t\theader: sm.getHeader(),\n\t\tentries: sm.getEntries(),\n\t\tleafId: sm.getLeafId(),\n\t\tsystemPrompt: undefined,\n\t\ttools: undefined,\n\t};\n\n\tconst html = generateHtml(sessionData, opts.themeName);\n\n\tlet outputPath = opts.outputPath ? normalizePath(opts.outputPath) : undefined;\n\tif (!outputPath) {\n\t\tconst inputBasename = basename(resolvedInputPath, \".jsonl\");\n\t\toutputPath = `${APP_NAME}-session-${inputBasename}.html`;\n\t}\n\n\twriteFileSync(outputPath, html, \"utf8\");\n\treturn outputPath;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/export-html/index.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AgentState } from \"@agent-forge/agent-core\";\nimport { existsSync, readFileSync, writeFileSync } from \"fs\";\nimport { basename, join } from \"path\";\nimport { APP_NAME, getExportTemplateDir } from \"../../config.ts\";\nimport { getResolvedThemeColors, getThemeExportColors } from \"../../modes/interactive/theme/theme.ts\";\nimport { normalizePath, resolvePath } from \"../../utils/paths.ts\";\nimport { t } from \"../i18n/index.ts\";\nimport type { SessionEntry } from \"../session-manager.ts\";\nimport { SessionManager } from \"../session-manager.ts\";\nimport type { ToolDefinition } from \"../tools/tool-definition.ts\";\n\n/**\n * Interface for rendering custom tools to HTML.\n * Used by agent-session to pre-render extension tool output.\n */\nexport interface ToolHtmlRenderer {\n\t/** Render a tool call to HTML. Returns undefined if tool has no custom renderer. */\n\trenderCall(toolCallId: string, toolName: string, args: unknown): string | undefined;\n\t/** Render a tool result to HTML. Returns collapsed/expanded or undefined if tool has no custom renderer. */\n\trenderResult(\n\t\ttoolCallId: string,\n\t\ttoolName: string,\n\t\tresult: Array<{ type: string; text?: string; data?: string; mimeType?: string }>,\n\t\tdetails: unknown,\n\t\tisError: boolean,\n\t): { collapsed?: string; expanded?: string } | undefined;\n}\n\n/** Pre-rendered HTML for a custom tool call and result */\ninterface RenderedToolHtml {\n\tcallHtml?: string;\n\tresultHtmlCollapsed?: string;\n\tresultHtmlExpanded?: string;\n}\n\nexport interface ExportOptions {\n\toutputPath?: string;\n\tthemeName?: string;\n\t/** Optional tool renderer for custom tools */\n\ttoolRenderer?: ToolHtmlRenderer;\n}\n\n/** Parse a color string to RGB values. Supports hex (#RRGGBB) and rgb(r,g,b) formats. */\nfunction parseColor(color: string): { r: number; g: number; b: number } | undefined {\n\tconst hexMatch = color.match(/^#([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/);\n\tif (hexMatch) {\n\t\treturn {\n\t\t\tr: Number.parseInt(hexMatch[1], 16),\n\t\t\tg: Number.parseInt(hexMatch[2], 16),\n\t\t\tb: Number.parseInt(hexMatch[3], 16),\n\t\t};\n\t}\n\tconst rgbMatch = color.match(/^rgb\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)$/);\n\tif (rgbMatch) {\n\t\treturn {\n\t\t\tr: Number.parseInt(rgbMatch[1], 10),\n\t\t\tg: Number.parseInt(rgbMatch[2], 10),\n\t\t\tb: Number.parseInt(rgbMatch[3], 10),\n\t\t};\n\t}\n\treturn undefined;\n}\n\n/** Calculate relative luminance of a color (0-1, higher = lighter). */\nfunction getLuminance(r: number, g: number, b: number): number {\n\tconst toLinear = (c: number) => {\n\t\tconst s = c / 255;\n\t\treturn s <= 0.03928 ? s / 12.92 : ((s + 0.055) / 1.055) ** 2.4;\n\t};\n\treturn 0.2126 * toLinear(r) + 0.7152 * toLinear(g) + 0.0722 * toLinear(b);\n}\n\n/** Adjust color brightness. Factor > 1 lightens, < 1 darkens. */\nfunction adjustBrightness(color: string, factor: number): string {\n\tconst parsed = parseColor(color);\n\tif (!parsed) return color;\n\tconst adjust = (c: number) => Math.min(255, Math.max(0, Math.round(c * factor)));\n\treturn `rgb(${adjust(parsed.r)}, ${adjust(parsed.g)}, ${adjust(parsed.b)})`;\n}\n\n/** Derive export background colors from a base color (e.g., userMessageBg). */\nfunction deriveExportColors(baseColor: string): { pageBg: string; cardBg: string; infoBg: string } {\n\tconst parsed = parseColor(baseColor);\n\tif (!parsed) {\n\t\treturn {\n\t\t\tpageBg: \"rgb(24, 24, 30)\",\n\t\t\tcardBg: \"rgb(30, 30, 36)\",\n\t\t\tinfoBg: \"rgb(60, 55, 40)\",\n\t\t};\n\t}\n\n\tconst luminance = getLuminance(parsed.r, parsed.g, parsed.b);\n\tconst isLight = luminance > 0.5;\n\n\tif (isLight) {\n\t\treturn {\n\t\t\tpageBg: adjustBrightness(baseColor, 0.96),\n\t\t\tcardBg: baseColor,\n\t\t\tinfoBg: `rgb(${Math.min(255, parsed.r + 10)}, ${Math.min(255, parsed.g + 5)}, ${Math.max(0, parsed.b - 20)})`,\n\t\t};\n\t}\n\treturn {\n\t\tpageBg: adjustBrightness(baseColor, 0.7),\n\t\tcardBg: adjustBrightness(baseColor, 0.85),\n\t\tinfoBg: `rgb(${Math.min(255, parsed.r + 20)}, ${Math.min(255, parsed.g + 15)}, ${parsed.b})`,\n\t};\n}\n\n/**\n * Generate CSS custom property declarations from theme colors.\n */\nfunction generateThemeVars(themeName?: string): string {\n\tconst colors = getResolvedThemeColors(themeName);\n\tconst lines: string[] = [];\n\tfor (const [key, value] of Object.entries(colors)) {\n\t\tlines.push(`--${key}: ${value};`);\n\t}\n\n\t// Use explicit theme export colors if available, otherwise derive from userMessageBg\n\tconst themeExport = getThemeExportColors(themeName);\n\tconst userMessageBg = colors.userMessageBg || \"#343541\";\n\tconst derivedColors = deriveExportColors(userMessageBg);\n\n\tlines.push(`--exportPageBg: ${themeExport.pageBg ?? derivedColors.pageBg};`);\n\tlines.push(`--exportCardBg: ${themeExport.cardBg ?? derivedColors.cardBg};`);\n\tlines.push(`--exportInfoBg: ${themeExport.infoBg ?? derivedColors.infoBg};`);\n\n\treturn lines.join(\"\\n \");\n}\n\ninterface SessionData {\n\theader: ReturnType<SessionManager[\"getHeader\"]>;\n\tentries: ReturnType<SessionManager[\"getEntries\"]>;\n\tleafId: string | null;\n\tsystemPrompt?: string;\n\ttools?: Array<Pick<ToolDefinition, \"name\" | \"description\" | \"parameters\">>;\n\t/** Pre-rendered HTML for custom tool calls/results, keyed by tool call ID */\n\trenderedTools?: Record<string, RenderedToolHtml>;\n}\n\n/**\n * Core HTML generation logic shared by both export functions.\n */\nfunction generateHtml(sessionData: SessionData, themeName?: string): string {\n\tconst templateDir = getExportTemplateDir();\n\tconst template = readFileSync(join(templateDir, \"template.html\"), \"utf-8\");\n\tconst templateCss = readFileSync(join(templateDir, \"template.css\"), \"utf-8\");\n\tconst templateJs = readFileSync(join(templateDir, \"template.js\"), \"utf-8\");\n\tconst markedJs = readFileSync(join(templateDir, \"vendor\", \"marked.min.js\"), \"utf-8\");\n\tconst hljsJs = readFileSync(join(templateDir, \"vendor\", \"highlight.min.js\"), \"utf-8\");\n\n\tconst themeVars = generateThemeVars(themeName);\n\tconst colors = getResolvedThemeColors(themeName);\n\tconst themeExport = getThemeExportColors(themeName);\n\tconst derivedExportColors = deriveExportColors(colors.userMessageBg || \"#343541\");\n\tconst bodyBg = themeExport.pageBg ?? derivedExportColors.pageBg;\n\tconst containerBg = themeExport.cardBg ?? derivedExportColors.cardBg;\n\tconst infoBg = themeExport.infoBg ?? derivedExportColors.infoBg;\n\n\t// Base64 encode session data to avoid escaping issues\n\tconst sessionDataBase64 = Buffer.from(JSON.stringify(sessionData)).toString(\"base64\");\n\n\t// Build the CSS with theme variables injected\n\tconst css = templateCss\n\t\t.replace(\"{{THEME_VARS}}\", themeVars)\n\t\t.replace(\"{{BODY_BG}}\", bodyBg)\n\t\t.replace(\"{{CONTAINER_BG}}\", containerBg)\n\t\t.replace(\"{{INFO_BG}}\", infoBg);\n\n\treturn template\n\t\t.replace(\"{{CSS}}\", css)\n\t\t.replace(\"{{JS}}\", templateJs)\n\t\t.replace(\"{{SESSION_DATA}}\", sessionDataBase64)\n\t\t.replace(\"{{MARKED_JS}}\", markedJs)\n\t\t.replace(\"{{HIGHLIGHT_JS}}\", hljsJs);\n}\n\n/** Tools rendered directly by the HTML template (not pre-rendered via TUI→ANSI→HTML pipeline) */\nconst TEMPLATE_RENDERED_TOOLS = new Set([\"bash\", \"read\", \"write\", \"edit\", \"ls\"]);\n\n/**\n * Pre-render custom tools to HTML using their TUI renderers.\n */\nfunction preRenderCustomTools(\n\tentries: SessionEntry[],\n\ttoolRenderer: ToolHtmlRenderer,\n): Record<string, RenderedToolHtml> {\n\tconst renderedTools: Record<string, RenderedToolHtml> = {};\n\n\tfor (const entry of entries) {\n\t\tif (entry.type !== \"message\") continue;\n\t\tconst msg = entry.message;\n\n\t\t// Find tool calls in assistant messages\n\t\tif (msg.role === \"assistant\" && Array.isArray(msg.content)) {\n\t\t\tfor (const block of msg.content) {\n\t\t\t\tif (block.type === \"toolCall\" && !TEMPLATE_RENDERED_TOOLS.has(block.name)) {\n\t\t\t\t\tconst callHtml = toolRenderer.renderCall(block.id, block.name, block.arguments);\n\t\t\t\t\tif (callHtml) {\n\t\t\t\t\t\trenderedTools[block.id] = { callHtml };\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Find tool results\n\t\tif (msg.role === \"toolResult\" && msg.toolCallId) {\n\t\t\tconst toolName = msg.toolName || \"\";\n\t\t\t// Only render if we have a pre-rendered call OR it's not template-rendered\n\t\t\tconst existing = renderedTools[msg.toolCallId];\n\t\t\tif (existing || !TEMPLATE_RENDERED_TOOLS.has(toolName)) {\n\t\t\t\tconst rendered = toolRenderer.renderResult(\n\t\t\t\t\tmsg.toolCallId,\n\t\t\t\t\ttoolName,\n\t\t\t\t\tmsg.content,\n\t\t\t\t\tmsg.details,\n\t\t\t\t\tmsg.isError || false,\n\t\t\t\t);\n\t\t\t\tif (rendered) {\n\t\t\t\t\trenderedTools[msg.toolCallId] = {\n\t\t\t\t\t\t...existing,\n\t\t\t\t\t\tresultHtmlCollapsed: rendered.collapsed,\n\t\t\t\t\t\tresultHtmlExpanded: rendered.expanded,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn renderedTools;\n}\n\n/**\n * Export session to HTML using SessionManager and AgentState.\n * Used by TUI's /export command.\n */\nexport async function exportSessionToHtml(\n\tsm: SessionManager,\n\tstate?: AgentState,\n\toptions?: ExportOptions | string,\n): Promise<string> {\n\tconst opts: ExportOptions = typeof options === \"string\" ? { outputPath: options } : options || {};\n\n\tconst sessionFile = sm.getSessionFile();\n\tif (!sessionFile) {\n\t\tthrow new Error(t(\"Cannot export in-memory session to HTML\"));\n\t}\n\tif (!existsSync(sessionFile)) {\n\t\tthrow new Error(t(\"Nothing to export yet - start a conversation first\"));\n\t}\n\n\tconst entries = sm.getEntries();\n\n\t// Pre-render custom tools if a tool renderer is provided\n\tlet renderedTools: Record<string, RenderedToolHtml> | undefined;\n\tif (opts.toolRenderer) {\n\t\trenderedTools = preRenderCustomTools(entries, opts.toolRenderer);\n\t\t// Only include if we actually rendered something\n\t\tif (Object.keys(renderedTools).length === 0) {\n\t\t\trenderedTools = undefined;\n\t\t}\n\t}\n\n\tconst sessionData: SessionData = {\n\t\theader: sm.getHeader(),\n\t\tentries,\n\t\tleafId: sm.getLeafId(),\n\t\tsystemPrompt: state?.systemPrompt,\n\t\ttools: state?.tools?.map((tool) => ({\n\t\t\tname: tool.name,\n\t\t\tdescription: tool.description,\n\t\t\tparameters: tool.parameters,\n\t\t})),\n\t\trenderedTools,\n\t};\n\n\tconst html = generateHtml(sessionData, opts.themeName);\n\n\tlet outputPath = opts.outputPath ? normalizePath(opts.outputPath) : undefined;\n\tif (!outputPath) {\n\t\tconst sessionBasename = basename(sessionFile, \".jsonl\");\n\t\toutputPath = `${APP_NAME}-session-${sessionBasename}.html`;\n\t}\n\n\twriteFileSync(outputPath, html, \"utf8\");\n\treturn outputPath;\n}\n\n/**\n * Export session file to HTML (standalone, without AgentState).\n * Used by CLI for exporting arbitrary session files.\n */\nexport async function exportFromFile(inputPath: string, options?: ExportOptions | string): Promise<string> {\n\tconst opts: ExportOptions = typeof options === \"string\" ? { outputPath: options } : options || {};\n\tconst resolvedInputPath = resolvePath(inputPath);\n\n\tif (!existsSync(resolvedInputPath)) {\n\t\tthrow new Error(t(\"File not found: {path}\", { path: resolvedInputPath }));\n\t}\n\n\tconst sm = SessionManager.open(resolvedInputPath);\n\n\tconst sessionData: SessionData = {\n\t\theader: sm.getHeader(),\n\t\tentries: sm.getEntries(),\n\t\tleafId: sm.getLeafId(),\n\t\tsystemPrompt: undefined,\n\t\ttools: undefined,\n\t};\n\n\tconst html = generateHtml(sessionData, opts.themeName);\n\n\tlet outputPath = opts.outputPath ? normalizePath(opts.outputPath) : undefined;\n\tif (!outputPath) {\n\t\tconst inputBasename = basename(resolvedInputPath, \".jsonl\");\n\t\toutputPath = `${APP_NAME}-session-${inputBasename}.html`;\n\t}\n\n\twriteFileSync(outputPath, html, \"utf8\");\n\treturn outputPath;\n}\n"]}
|