@ai-agent-forge/agent-forge 0.86.7 → 0.88.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 +45 -0
- package/README.md +10 -11
- 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 +430 -413
- package/dist/bundle/chunks/{chunk-A7GUOX2H.js → chunk-6ZKDNZHA.js} +5 -1
- package/dist/bundle/chunks/chunk-HLJEVRWP.js +13 -0
- package/dist/bundle/chunks/chunk-YGHQME4V.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 +17 -4
- 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 +5 -3
- 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 +6 -10
- package/dist/core/agent-session-compaction.d.ts.map +1 -1
- package/dist/core/agent-session-compaction.js +35 -133
- 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-internal.d.ts +0 -6
- package/dist/core/agent-session-internal.d.ts.map +1 -1
- package/dist/core/agent-session-internal.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 -3
- 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 -22
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +147 -67
- 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-compaction-policy.d.ts.map +1 -1
- package/dist/core/extensions/bootstrap-compaction-policy.js +0 -34
- package/dist/core/extensions/bootstrap-compaction-policy.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 +4 -3
- 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/extensions/provider-failover.d.ts +7 -3
- package/dist/core/extensions/provider-failover.d.ts.map +1 -1
- package/dist/core/extensions/provider-failover.js +9 -8
- package/dist/core/extensions/provider-failover.js.map +1 -1
- package/dist/core/facade/coding-agent-facade.d.ts +6 -6
- package/dist/core/facade/coding-agent-facade.d.ts.map +1 -1
- package/dist/core/facade/coding-agent-facade.js +2 -3
- 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 +229 -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 +267 -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 +286 -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-config.d.ts +0 -1
- package/dist/core/model-config.d.ts.map +1 -1
- package/dist/core/model-config.js +9 -1
- package/dist/core/model-config.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 +11 -7
- 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 +2 -2
- package/dist/core/provider-composer.d.ts.map +1 -1
- package/dist/core/provider-composer.js +29 -21
- 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 +27 -5
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +80 -55
- 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 +20 -20
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +47 -59
- 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 +97 -60
- 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 +0 -2
- package/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/dist/modes/interactive/components/footer.js +8 -10
- 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 +4 -6
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +115 -120
- 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 -2
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +350 -279
- 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 +0 -8
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client.js +3 -14
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-mode.js +0 -9
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts +0 -19
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-types.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 +9 -2
- package/dist/plugins/ecosystem/node-plugin-bootstrap.d.ts.map +1 -1
- package/dist/plugins/ecosystem/node-plugin-bootstrap.js +44 -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/plugin-bootstrap.d.ts +9 -1
- package/dist/plugins/ecosystem/plugin-bootstrap.d.ts.map +1 -1
- package/dist/plugins/ecosystem/plugin-bootstrap.js +5 -0
- package/dist/plugins/ecosystem/plugin-bootstrap.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/photon.d.ts +2 -2
- package/dist/utils/photon.d.ts.map +1 -1
- package/dist/utils/photon.js +2 -2
- package/dist/utils/photon.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/compaction.md +1 -3
- package/docs/docs.json +4 -0
- package/docs/index.md +1 -0
- package/docs/keybindings.md +3 -0
- package/docs/mcp.md +103 -0
- package/docs/models.md +14 -22
- package/docs/providers.md +0 -1
- package/docs/quickstart.md +1 -1
- package/docs/rpc.md +1 -26
- package/docs/sdk.md +4 -6
- package/docs/settings.md +10 -12
- package/docs/skills.md +1 -9
- package/docs/terminal-setup.md +2 -3
- package/docs/usage.md +7 -6
- 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/examples/sdk/10-settings.ts +2 -4
- package/examples/sdk/12-full-control.ts +1 -2
- package/package.json +1 -3
- package/dist/bundle/chunks/chunk-EALJ5DDX.js +0 -1452
- package/dist/core/extensions/microcompact.d.ts +0 -80
- package/dist/core/extensions/microcompact.d.ts.map +0 -1
- package/dist/core/extensions/microcompact.js +0 -134
- package/dist/core/extensions/microcompact.js.map +0 -1
- package/dist/server/create-harness.d.ts +0 -26
- package/dist/server/create-harness.d.ts.map +0 -1
- package/dist/server/create-harness.js +0 -106
- package/dist/server/create-harness.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,51 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [0.88.0] - 2026-10-03
|
|
6
|
+
|
|
7
|
+
### Breaking Changes
|
|
8
|
+
|
|
9
|
+
- Compaction toggle retirement, batch 2 of the feature-switch removal program (user ruling 2026-10-03, 决策记录 D-060 裁决 15 / D-079): the settings key `compaction.enabled`, the RPC command `set_auto_compaction`, and the `autoCompactionEnabled` field of the `get_state` response are removed — automatic compaction now applies unconditionally, and manual `/compact` plus the RPC `compact` command are unchanged. Stale keys in settings files are silently ignored per the existing lenient settings contract. The session/facade members `setAutoCompactionEnabled`/`isAutoCompactionEnabled` (`AgentSession`, `CodingAgentFacadeV1`) and the TUI settings-selector "Auto-compact" row are removed with it.
|
|
10
|
+
- Feature-switch removal batch 2, block B (same user ruling, 决策记录 D-079): the settings keys `retry.enabled`, `enableSkillCommands`, and `failover.enabled` are removed and the features apply unconditionally — agent-level auto-retry always runs, skills always register as `/skill:name` completion commands, and the `failover` node installs whenever it has a valid candidate list. The RPC command `set_auto_retry` (rpc-types/rpc-mode/rpc-client), the facade member `setAutoRetryEnabled`, the session members `autoRetryEnabled`/`setAutoRetryEnabled`, and the TUI settings-selector "Skill commands" row are removed with `retry.enabled`/`enableSkillCommands`. Numeric retry keys (`maxRetries`/`baseDelayMs`/`maxAgentDelayMs`/`retry.provider.*`) and the RPC `abort_retry` command (aborting a running retry is not a switch) are unchanged. A stale `failover.enabled` key logs a removal warning and is then ignored — the node still parses and installs from its remaining fields; fail-fast was deliberately avoided because the sdk.ts install-site catch would degrade a throw into the whole failover not installing. Stale settings keys are silently ignored per the existing lenient settings contract; the legacy `skills` object migration drops the `enableSkillCommands` flag instead of promoting it. The pi-ai `RetryPolicy` shape and `AgentHarnessOptions.retry` (library-layer APIs, not product switches) are unchanged — the settings aggregate fills `enabled: true` to satisfy the required library field.
|
|
11
|
+
- Removed the `apiKey` field from models.json provider configs. Secrets now live exclusively in auth.json (via `/login`); loading a models.json containing an `apiKey` fails with guidance to migrate the key to auth.json (same value syntax: literal, `$ENV_VAR`, `!command`). Plugin runtime-provided API keys and CLI `--api-key` are unaffected. The `AuthStatus.source` values `models_json_key`/`models_json_command` are removed as well: extension-provided literal or command keys report `fallback` (env-backed ones keep reporting `environment`), visible through `getProviderAuthStatus` and the login selector.
|
|
12
|
+
- Feature-switch removal batch 2, block C (same user ruling, 决策记录 D-079): the `-name` removal syntax of the `defaultTools` setting is retired — the list supports plain-name whitelists (replace the inherited selection) and `+name` additions only. A stale `-name` entry is silently ignored per the lenient settings contract, and a project list containing one no longer layers as modifiers but replaces the global list. Two behavior changes are breaking: all-modifier lists lose their removal effect (`["-bash"]` previously removed bash from the defaults, now the entry is ignored and the defaults stay `[read,bash,edit,write]`; `["-bash","+powershell"]` was `[read,edit,write,powershell]`, now `[read,bash,edit,write,powershell]`), and a project list with a `-` entry (e.g. `["-codemode","+tool_search"]` over global `["read","bash","+codemode"]`) is now `[read,bash,edit,write,tool_search]` where it previously layered to `[read,bash,tool_search]`. Mixed lists like `["-bash","grep"]` resolve the same as before. Suite tool surfaces use an independent whitelist parser and are unaffected.
|
|
13
|
+
- Removed the `"fork"` value from the `doubleEscapeAction` setting (iron law: `/fork` keeps its command as the single entry point; value ruling 2026-10-03): the double-escape gesture now offers `"tree"` (default) and `"none"` only, and a stored `"fork"` value reads as `"tree"` per the lenient settings contract. Fork from a previous message stays available via the `/fork` command.
|
|
14
|
+
|
|
15
|
+
### Added
|
|
16
|
+
|
|
17
|
+
- MCP user documentation (2026-10-03): new [docs/mcp.md](docs/mcp.md) documents the `mcp.json` configuration surface end to end — project-level vs user-level files, suite `associations.mcp` filtering, stdio (`command`/`args`) and remote HTTP (`url`/`headers`) server entries, `deferredTools` with `tool_search` activation, the never-fatal startup diagnostics, and the JSON-response-only HTTP limitation (SSE-streamed responses are not consumed) — and is registered in the docs navigation; the README and `docs/usage.md` now link to it instead of leaving "No core MCP" without an entry point. Documentation only; no behavior change.
|
|
18
|
+
|
|
19
|
+
### Fixed
|
|
20
|
+
|
|
21
|
+
- The startup plugin bootstrap now respects the offline posture and announces first-run installs (设计 `插件独立分发与启动装配设计.md` §4.4, 2026-10-03, 0.87.0 release forensics): `AGENT_FORGE_OFFLINE` truthy skips the whole bootstrap immediately with one `bootstrap_skipped_offline` info diagnostic (`skipped: "offline"` on the result) — offline installs cannot succeed and previously burned 36 measured seconds walking the per-plugin failure chain on a fresh agent dir over a slow registry. And a fresh install's first network bootstrap now prints one stderr progress line (`First run: installing {count} factory plugins…`, i18n-wrapped, injected `onPendingInstalls` hook on the core loop) before the silent install window that users read as a hang. Online-posture bootstrap tests declare `AGENT_FORGE_OFFLINE=0` explicitly.
|
|
22
|
+
- Fixed the MCP `deferredTools: true` activation chain end to end (two broken links, both present since the feature landed, found during the MCP pool materializer forensics): `createAgentSession` dropped `deferredToolPluginIds` — the option was not declared on `CreateAgentSessionOptions`, so the MCP pool's deferred server ids passed by `createAgentSessionFromServices` reached nothing; and newly loaded capability plugins had all their tools merged into the active set on the explicit-activation path without consulting the deferred set. Deferred-server tools now register but stay out of the default prompt-visible set until `tool_search` or an explicit activation names them, as designed (docs/mcp.md).
|
|
23
|
+
- `agent-forge auth check --no-refresh --credentials` no longer prints a stored command-backed key (`!command`) as if it were the credential: the side-effect-free read path never executes the command, so the unresolved value is now reported as `credential_not_available` (exit 1, JSON reason on `--json`) instead of emitting the raw command string. Rerun without `--no-refresh` to execute the command and emit the resolved key; the stored command-backed key is also not executed in any other `--no-refresh` path.
|
|
24
|
+
- The Esc interrupt-grading status line now goes through `t()` (设计 `docs/design/国际化与本地化.md` 批次⑪, 2026-10-03): `{count} subagents still running · /stop-agents stops all (Esc only stops the current turn)` was the interactive mode's last runtime-hardcoded zh-CN string, so en users saw Chinese on interrupt while background subagents were still running. zh-CN wording is unchanged via the interactive-mode domain dictionary; en passes the key through; singular/plural split keys preserve English grammar per the batch-10 rule.
|
|
25
|
+
|
|
26
|
+
### Removed
|
|
27
|
+
|
|
28
|
+
- microcompact, the opt-in cheap tool-result elision relief before LLM summarization (2026-10-01 G/H seat verdict: net-negative — enabled group cache hit 30.6% vs 44.6% disabled, cache-miss input 548K vs 399K, no savings in full-compaction count, retrieval-detail loss): the `extensions/microcompact.ts` module, the `compaction.microcompactEnabled` setting, the per-model-request cooldown, and the host relief landing paths are deleted. The generic `SessionEntryProjection` public channel stays (third-party equivalence tests moved to `test/compaction-entry-projection.test.ts`).
|
|
29
|
+
- The compaction summary self-critique pass (`compaction.summarySelfCritique`, never proven worth double summary cost by seat data): the critique round and its prompt are deleted; summary generation is single-pass again (first draft is the final summary).
|
|
30
|
+
- Removed the zero-production-consumer legacy assembly layer `src/server/create-harness.ts` and its exports (`createCodingAgentHarness`, `buildCodingAgentHarnessSystemPrompt`, `CodingAgentHarnessTool`, related option types); the server/RPC production path does not go through it (kernel physical boundary declaration §3.2 migration gate M2, 2026-10-03).
|
|
31
|
+
|
|
32
|
+
## [0.87.0] - 2026-10-02
|
|
33
|
+
### Added
|
|
34
|
+
|
|
35
|
+
- i18n mechanism, batch 1 of the full-localization program (设计 `docs/design/国际化与本地化.md`, experimental): `t(key, params?)` in `src/core/i18n/` treats English source strings as dictionary keys — zh-CN looks up the aggregated domain dictionaries and falls back to the English key verbatim on miss; `en` passes through without lookup; `{name}` placeholders interpolate on all paths and missing params keep the placeholder instead of throwing. Language resolves as `AGENT_FORGE_I18N_LANG` env > injected value (`setI18nLanguage`) > default `zh-CN`; the new `ui.language` setting (`"zh-CN"` | `"en"`, default `"zh-CN"`, `getUiLanguage()`/`setUiLanguage()`) is the persistence face the host injects from. Vitest runs pin the language to `en` so the existing English-text assertions stay untouched.
|
|
36
|
+
- Full zh-CN localization of user-visible strings, batches 2-8 of the program: ~1,000 user-facing English strings across the interactive TUI (status hints, dialog titles/options, selector and component labels, `/help` `/hotkeys` `/session` tables, startup banner, footer), the CLI (`--help` and auth-command help, flag/option/environment descriptions, suite lifecycle and session errors, print-mode fallbacks), core-layer user-visible runtime errors (config/auth/network/file-IO/session-corruption throws, ~165 entries; plugin-developer contract errors deliberately excluded pending batch 9), and the 48 keybinding descriptions (translated at the agent-forge rendering channel — the tui registry data is untouched). The host wires the language through: interactive mode injects it at construction and on `/reload` (`applyRuntimeSettings`), the CLI bootstrap injects it before any output, and `/settings` gains an "Interface language" row that switches immediately without a restart. Wrapped strings degrade to the English key verbatim wherever a dictionary entry is missing, so upstream-synced new strings stay visible. tui-builtin copy (`Find transcript`/`No matches`/`Copied!`/`Copy failed`) moved to injectable labels (default English) instead of a reverse package dependency, and the tui-mirror harness gains an `i18n-zh-smoke` scenario asserting Chinese rendering fits the terminal width (CJK double-width aware); the mirror CLI runner pins `en` like vitest so existing scenario assertions are unaffected. Singular/plural message pairs stay split keys so English grammar holds for count=1 in every path (retry attempts, background subagents, compaction times, cache misses, queued messages). A final re-review sweep (batch 10) closed the batch-boundary gaps: the interactive-auth login/logout flow, /metrics and /doctor output labels, the plugin confirm dialog, external-editor handoff notice, theme-load fallback notice, serve-mode console lines, and the OAuth manual-code prompt are now wrapped too (61-entry tui-interactive-misc domain plus cli/core-errors additions); a full key-to-dictionary audit across all 1,032 t() call-site keys leaves only 9 deliberate fallbacks (argument-hint syntax tokens, data markers, a pure {title}/{message} skeleton). Batch 9 then wrapped the remaining ~1,200 developer-facing contract and internal throws across core/extensions (17 files), the core root layer, plugins/ecosystem, profile, durable, host, utils, and the remaining CLI diagnostics (about 1,160 new dictionary entries across four core-contract domains (a final sweep closed 35 stragglers the three parallel batches' self-checks missed); 2,152 total keys audited, same 9 fallbacks, translatable throws now zero). Machine-matched messages that behavior depends on (the installer plugin-installation series, cancelled/aborted/timeout prefixes, the authHeader sentinel, Unknown-option prefixes, snapshot-validation prefixes) stay English and are registered as explicit non-goals in the design doc, alongside all non-agent-forge workspace packages (plugin-sdk/ai/agent/server contract faces, 361 throws), ErrorEnvelope commandError payloads, and generated stdio-plugin source. The upstream-sync rulebook (docs/upgrade/README.md) gains principle 8: ported user-visible copy must realign t() keys, with dictionary misses falling back to English until backfilled.
|
|
37
|
+
- Suite custom orientation persona (设计 `docs/design/方案系统设计.md` §6.3): user suites can set `"orientation": "custom"` in suite.json and own their persona text via `<agentDir>/suites/<id>/persona.md` — read verbatim (BOM stripped, not trimmed) and injected exactly like the two builtin personas (missing file degrades to an empty prompt with a dangling diagnostic, never a silent fallback to a builtin persona; the context-budget `personaChars` accounting follows the resolved text). Builtin suites stay locked to `assistant`/`coding` and `FACTORY_CONTENTS_VERSION` is unchanged; schemaVersion stays 1.
|
|
38
|
+
- Queued-message management (D-078, 设计 `docs/design/决策记录.md` D-078 + `docs/design/稳定门面统一入口设计.md` §3.1 #90-91): the new `/queue-list` builtin command (single entry point, no keybinding) opens a queue manager listing the steering and follow-up queues — entries are reordered with alt+up / alt+down, deleted with delete, or recalled to the editor with enter; escape closes the selector (those three are in-component keys of the selector, not feature triggers). The backing public API is index-based and spans three layers: `Agent` gains `peekSteeringQueue()`/`peekFollowUpQueue()` (snapshot shallow copies) plus `reorderQueuedMessages()`/`removeQueuedMessage()` (stale indices during streaming drains return `false`/`null` instead of throwing); `AgentSession.reorderQueuedMessages()`/`removeQueuedMessageAt()` treat the `_steeringMessages`/`_followUpMessages` text copies as the source of truth, sync the agent queue at the same index on success, emit `queue_update`, and leave both layers untouched on failure; the facade forwards both members verbatim. `sendCustomMessage` with `deliverAs: "steer"`/`"followUp"` now also records the display text into the matching text copy, closing the gap where the agent queue held a message the text copy did not (the two layers stay isomorphic, which the index semantics rely on). The tui-mirror harness gains a `queue-manager` scenario for the selector.
|
|
39
|
+
|
|
40
|
+
### Changed
|
|
41
|
+
|
|
42
|
+
- Factory default suite flips from `assistant` to `coding` (user ruling 2026-10-02: the product is a coding agent — README "专注编写代码的 AI Agent", npm "Interactive coding agent CLI" — so the no-configuration default must not land on the companion-style assistant persona). A session with no explicit suite source (CLI `--suite` / `AGENT_FORGE_SUITE` / project settings / global settings) now resolves to the coding orientation persona (rigor-first engineering) with the `code` memory strategy; the assistant suite stays available as the explicit-switch fallback, both suites keep the identical 8-tool surface and capability set, and `FACTORY_CONTENTS_VERSION` is unchanged (declarations did not change — no `--suite-reset` upgrade proposal). Environments with an explicit suite configuration are unaffected; existing assistant-domain memories stay in the assistant domain (suiteId isolation is unchanged).
|
|
43
|
+
- Background delegation settlements are written back to the main session immediately as a persisted, TUI-visible custom message instead of the old request-time digest injection (user ruling 2026-10-02, D-060 ruling 12: delegated work must be accepted by the parent, no config switch). When a background subagent task settles, the host sink turns the settlement line into one `agent-task-settled` custom message (content: `Background subagent task <taskId> settled: <status>` plus guidance to read the full result with `subagent_result` and review it) delivered via `sendCustomMessage({ deliverAs: "followUp", triggerTurn: true })`: while the parent is streaming the message rides the follow-up queue (drained this turn, current turn not preempted), and when the parent is idle the same call atomically triggers an acceptance turn. The retired mechanism — the in-memory `backgroundDigest` buffer (20-entry cap, oldest dropped) plus the one-shot `transformContext` injection on the next model round — lost settlements across process restarts, was invisible in the TUI, and left an idle parent waiting forever. Multiple simultaneous settlements each get their own message (the first triggers the idle turn, the rest queue through the streaming branch); a write-back failure only logs a host warn and never affects the task; settlements after the session is disposed are skipped (no orphan turns); the `agent.task.settled@1` lifecycle dispatch is unchanged.
|
|
44
|
+
|
|
45
|
+
### Fixed
|
|
46
|
+
|
|
47
|
+
- Read-only tool surface no longer promises file editing in the system prompt (设计 `docs/design/提示词设计宪法.md` §6 2026-10-02): `buildSystemPrompt()` unconditionally opened with "…editing or creating files", contradicting sessions narrowed via `--tools read,grep,find,ls` — observed the model burning minutes improvising workarounds with read-only tools when asked to make changes. When no known mutating tool is active (`MUTATING_TOOL_NAMES`: write/edit/bash/powershell/process_exec/workspace_write/test_run/formatter_linter_check/desktop_execute/image_edit — extend the set when new mutating capability tools ship), the intro now states the non-mutating scope and a work rule reframes execution requests as change-plan requests (exact files/edits/verification; delivering the plan completes the task) — wording sourced from the prompt-reference baseline `OpenAI/Codex/plan_mode.md`. The `customPrompt` branch is untouched. Verified end-to-end: the same narrowed session asked to "fix it directly" now reads once and returns a concrete change plan instead of looping on read tools.
|
|
48
|
+
- Stale default keybindings in the English docs: `usage.md`/`README.md` claimed `Alt+Enter`/`Alt+Up` for follow-up queueing and dequeue, `terminal-setup.md` claimed `Ctrl+Q`/`Alt+Q`/`Alt+P`, and `quickstart.md`/`README.md` claimed `Ctrl+L`/`Ctrl+P`/`Shift+Tab` — all of these shipped defaults were cleared by the single-entry-point rulings (2026-10-01, cf. 0.86.7 `/queue`/`/dequeue` entry). The docs now describe the command entries (`/queue`, `/dequeue`, `/model`, `/thinking`, `/scoped-models`) and point at `keybindings.json` for rebinding.
|
|
49
|
+
|
|
5
50
|
## [0.86.7] - 2026-10-02
|
|
6
51
|
### Added
|
|
7
52
|
|
package/README.md
CHANGED
|
@@ -68,7 +68,7 @@ agent-forge
|
|
|
68
68
|
|
|
69
69
|
## Providers & Models
|
|
70
70
|
|
|
71
|
-
Agent Forge 为已配置 provider 维护可用模型目录;运行 `agent-forge update --models` 可手动刷新。通过订阅(`/login`)或 API key 认证后,可用 `/model
|
|
71
|
+
Agent Forge 为已配置 provider 维护可用模型目录;运行 `agent-forge update --models` 可手动刷新。通过订阅(`/login`)或 API key 认证后,可用 `/model` 选择模型;在模型选择器中按 Ctrl+S 可保存启动默认值。
|
|
72
72
|
|
|
73
73
|
**Subscriptions:**
|
|
74
74
|
- Anthropic Claude Pro/Max
|
|
@@ -152,7 +152,7 @@ Type `/` in the editor to trigger commands. [Extensions](#extensions) can regist
|
|
|
152
152
|
| [`/llama`](docs/llama-cpp.md) | Download, load, and unload llama.cpp router models |
|
|
153
153
|
| `/model` | Switch models; Ctrl+S in the picker saves the startup default |
|
|
154
154
|
| `/thinking` | Switch thinking level; Ctrl+S in the picker saves the startup default |
|
|
155
|
-
| `/scoped-models` | Enable/disable models for
|
|
155
|
+
| `/scoped-models` | Enable/disable models for model cycling (bindable, no default key) |
|
|
156
156
|
| `/settings` | Theme, message delivery, transport, and other preferences |
|
|
157
157
|
| `/resume` | Pick from previous sessions |
|
|
158
158
|
| `/new` | Start a new session |
|
|
@@ -183,23 +183,22 @@ See `/hotkeys` for the full list. Customize via `~/.agent-forge/agent/keybinding
|
|
|
183
183
|
| Ctrl+C twice | Quit |
|
|
184
184
|
| Escape | Cancel/abort |
|
|
185
185
|
| Escape twice | Open `/tree` |
|
|
186
|
-
| Ctrl+L | Open model selector |
|
|
187
|
-
| Ctrl+P / Shift+Ctrl+P | Cycle scoped models forward/backward |
|
|
188
|
-
| Shift+Tab | Cycle thinking level |
|
|
189
186
|
| Ctrl+O | Collapse/expand tool output |
|
|
190
187
|
| Ctrl+T | Collapse/expand thinking blocks |
|
|
191
188
|
| Ctrl+X | Copy the last assistant message; with fullscreen copy-on-select disabled, copy the active text selection |
|
|
192
189
|
|
|
190
|
+
Model selection, model cycling, and thinking-level cycling are command-only by default (`/model`, `/thinking`, `/scoped-models`); their shipped default keybindings were cleared per the single-entry-point rule and can be re-bound in `~/.agent-forge/agent/keybindings.json` (see [docs/keybindings.md](docs/keybindings.md)).
|
|
191
|
+
|
|
193
192
|
### Message Queue
|
|
194
193
|
|
|
195
194
|
Submit messages while the agent is working:
|
|
196
195
|
|
|
197
196
|
- **Enter** queues a *steering* message, delivered after the current assistant turn finishes executing its tool calls
|
|
198
|
-
-
|
|
197
|
+
- **`/queue <text>`** queues a *follow-up* message, delivered only after the agent finishes all work
|
|
199
198
|
- **Escape** aborts and restores queued messages to editor
|
|
200
|
-
-
|
|
199
|
+
- **`/dequeue`** restores queued messages back to editor
|
|
201
200
|
|
|
202
|
-
|
|
201
|
+
Follow-up queueing and dequeue are command-only by default (no shipped keybindings); bind `app.message.followUp` / `app.message.dequeue` in [docs/keybindings.md](docs/keybindings.md) if you want keys.
|
|
203
202
|
|
|
204
203
|
Configure delivery in [settings](docs/settings.md): `steeringMode` and `followUpMode` can be `"one-at-a-time"` (default, waits for response) or `"all"` (delivers all queued at once). `transport` selects provider transport preference (`"sse"`, `"websocket"`, or `"auto"`) for providers that support multiple transports.
|
|
205
204
|
|
|
@@ -327,7 +326,7 @@ Place in `~/.agent-forge/agent/themes/`, `.agent-forge/themes/`, or a plugin pac
|
|
|
327
326
|
|
|
328
327
|
### Plugins
|
|
329
328
|
|
|
330
|
-
Plugins bundle optional capabilities such as MCP bridges, CLI tools, Skills, Goal/Plan workflows and multi-Agent orchestration. A plugin is self-describing through `plugin.json` and can be installed, disabled, replaced or removed without modifying the core.
|
|
329
|
+
Plugins bundle optional capabilities such as MCP bridges, CLI tools, Skills, Goal/Plan workflows and multi-Agent orchestration. MCP servers themselves are configured in `mcp.json` and materialized as generated plugins; see [docs/mcp.md](docs/mcp.md). A plugin is self-describing through `plugin.json` and can be installed, disabled, replaced or removed without modifying the core.
|
|
331
330
|
|
|
332
331
|
> **Execution model:** Plugins run with the process capabilities available in `readonly` or `full-control`. The core does not provide approval or trust policy; install a policy plugin when that behavior is required.
|
|
333
332
|
|
|
@@ -419,7 +418,7 @@ await session.prompt("What files are in the current directory?");
|
|
|
419
418
|
|
|
420
419
|
Agent Forge 保持可扩展而不规定工作流。其它工具内置的能力都应通过 [插件](#plugins)、[Skills](#skills) 或外部工具接入;这样内核保持最小,工作流由用户塑造。
|
|
421
420
|
|
|
422
|
-
**No core MCP.** 通过
|
|
421
|
+
**No core MCP.** 通过 `mcp.json` 配置接入(项目级 `.agent-forge/mcp.json` 与用户级 agent dir,stdio 与 remote HTTP 两种 server 形态);每个 server 在会话启动时物化为生成的 capability 插件。见 [docs/mcp.md](docs/mcp.md)。
|
|
423
422
|
|
|
424
423
|
**No core multi-Agent workflow.** 通过插件实现编排与生命周期策略。
|
|
425
424
|
|
|
@@ -483,7 +482,7 @@ cat README.md | agent-forge -p "Summarize this text"
|
|
|
483
482
|
| `--model <pattern>` | Model pattern or ID (supports `provider/id` and optional `:<thinking>`) |
|
|
484
483
|
| `--api-key <key>` | API key (overrides env vars) |
|
|
485
484
|
| `--thinking <level>` | `off`, `minimal`, `low`, `medium`, `high`, `xhigh`, `max` |
|
|
486
|
-
| `--models <patterns>` | Comma-separated patterns for
|
|
485
|
+
| `--models <patterns>` | Comma-separated patterns for model cycling (bindable, no default key) |
|
|
487
486
|
| `--list-models [search]` | List available models |
|
|
488
487
|
|
|
489
488
|
### Session Options
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artifact-store.d.ts","sourceRoot":"","sources":["../../src/artifacts/artifact-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;
|
|
1
|
+
{"version":3,"file":"artifact-store.d.ts","sourceRoot":"","sources":["../../src/artifacts/artifact-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAG1E,YAAY,EAAE,aAAa,EAAE,CAAC;AAE9B,MAAM,WAAW,cAAc;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC;IACtC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,eAAe;IAC/B,KAAK,CAAC,KAAK,EAAE;QACZ,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;KAC3B,GAAG;QAAE,QAAQ,CAAC,GAAG,EAAE,aAAa,CAAA;KAAE,CAAC;IACpC,IAAI,CAAC,KAAK,EAAE;QAAE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG;QACzE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;KAC3B,CAAC;IACF,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAAC;IACrD,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,cAAc,EAAE,CAAC;IACnD,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE;QAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,cAAc,CAAC;CACrF;AAyBD,wBAAgB,mBAAmB,CAAC,OAAO,GAAE;IAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;CAAO,GAAG,eAAe,CAqElG","sourcesContent":["/**\n * Artifact store (2.6a) — session export artifacts with refs, a bounded\n * read boundary, and an explicit end-of-life.\n *\n * Writers store bytes once and hand out serializable refs (id, session,\n * operation, kind, media type, size). Readers get the bytes only through\n * `read`, which is scoped to the owning session; `stat` exposes metadata\n * only. `endLifecycle` terminates an artifact explicitly: later reads fail\n * with a structured `ended` error and stats report the terminal state —\n * nothing is silently deleted or silently kept alive. Renderers and share\n * transports belong to later slices (2.6b-d).\n */\nimport type { ArtifactRefV1 } from \"../core/agent-capability-contract.ts\";\nimport { t } from \"../core/i18n/index.ts\";\n\nexport type { ArtifactRefV1 };\n\nexport interface ArtifactStatV1 {\n\treadonly artifactId: string;\n\treadonly sessionId: string;\n\treadonly operationId: string;\n\treadonly kind: string;\n\treadonly mediaType: string;\n\treadonly sizeBytes?: number;\n\treadonly state: \"available\" | \"ended\";\n\treadonly endReason?: string;\n}\n\nexport interface ArtifactStoreV1 {\n\twrite(input: {\n\t\treadonly sessionId: string;\n\t\treadonly operationId: string;\n\t\treadonly kind: string;\n\t\treadonly mediaType: string;\n\t\treadonly bytes: Uint8Array;\n\t}): { readonly ref: ArtifactRefV1 };\n\tread(input: { readonly artifactId: string; readonly sessionId: string }): {\n\t\treadonly mediaType: string;\n\t\treadonly bytes: Uint8Array;\n\t};\n\tstat(artifactId: string): ArtifactStatV1 | undefined;\n\tlist(sessionId: string): readonly ArtifactStatV1[];\n\tendLifecycle(artifactId: string, input: { readonly reason: string }): ArtifactStatV1;\n}\n\n/** FNV-1a 32-bit over the artifact content — deterministic artifact ids. */\nfunction contentHash(bytes: Uint8Array): string {\n\tlet hash = 0x811c9dc5;\n\tfor (const byte of bytes) {\n\t\thash ^= byte;\n\t\thash = Math.imul(hash, 0x01000193);\n\t}\n\treturn (hash >>> 0).toString(36);\n}\n\nfunction toStat(entry: { ref: ArtifactRefV1; bytes: Uint8Array; ended: boolean; endReason?: string }): ArtifactStatV1 {\n\treturn {\n\t\tartifactId: entry.ref.artifactId,\n\t\tsessionId: entry.ref.sessionId,\n\t\toperationId: entry.ref.operationId,\n\t\tkind: entry.ref.kind,\n\t\tmediaType: entry.ref.mediaType,\n\t\tsizeBytes: entry.ref.sizeBytes,\n\t\tstate: entry.ended ? \"ended\" : \"available\",\n\t\t...(entry.ended ? { endReason: entry.endReason } : {}),\n\t};\n}\n\nexport function createArtifactStore(options: { readonly now?: () => number } = {}): ArtifactStoreV1 {\n\tconst now = options.now ?? (() => Date.now());\n\tconst artifacts = new Map<string, { ref: ArtifactRefV1; bytes: Uint8Array; ended: boolean; endReason?: string }>();\n\tconst sequenceByIdentity = new Map<string, number>();\n\t// Global write counter: guarantees artifact ids are unique across ALL\n\t// (session, operation) identities — identical bytes written by two\n\t// different identities must never collide into one id.\n\tlet globalWriteSequence = 0;\n\n\treturn {\n\t\twrite(input) {\n\t\t\tif (input.bytes.length === 0) throw new Error(\"Artifact bytes must not be empty\");\n\t\t\tconst identity = `${input.sessionId}\\u0000${input.operationId}`;\n\t\t\tconst sequence = (sequenceByIdentity.get(identity) ?? 0) + 1;\n\t\t\tsequenceByIdentity.set(identity, sequence);\n\t\t\tglobalWriteSequence += 1;\n\t\t\tconst artifactId = `art-${contentHash(input.bytes)}-${sequence}-${globalWriteSequence}`;\n\t\t\tconst ref: ArtifactRefV1 = {\n\t\t\t\tartifactId,\n\t\t\t\tsessionId: input.sessionId,\n\t\t\t\toperationId: input.operationId,\n\t\t\t\tkind: input.kind,\n\t\t\t\tmediaType: input.mediaType,\n\t\t\t\tsizeBytes: input.bytes.length,\n\t\t\t\ttruncated: false,\n\t\t\t\tcreatedAt: now(),\n\t\t\t};\n\t\t\tartifacts.set(artifactId, { ref, bytes: input.bytes, ended: false });\n\t\t\treturn { ref };\n\t\t},\n\t\tread(input) {\n\t\t\tconst entry = artifacts.get(input.artifactId);\n\t\t\tif (!entry) throw new Error(t(\"Artifact not found: {artifactId}\", { artifactId: input.artifactId }));\n\t\t\tif (entry.ref.sessionId !== input.sessionId) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tt(\"Artifact {artifactId} belongs to a different session\", { artifactId: input.artifactId }),\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (entry.ended) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tt(\"Artifact {artifactId} lifecycle has ended: {reason}\", {\n\t\t\t\t\t\tartifactId: input.artifactId,\n\t\t\t\t\t\treason: entry.endReason ?? \"ended\",\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn { mediaType: entry.ref.mediaType, bytes: entry.bytes };\n\t\t},\n\t\tstat(artifactId) {\n\t\t\tconst entry = artifacts.get(artifactId);\n\t\t\treturn entry === undefined ? undefined : toStat(entry);\n\t\t},\n\t\tlist(sessionId) {\n\t\t\treturn [...artifacts.values()]\n\t\t\t\t.filter((entry) => entry.ref.sessionId === sessionId)\n\t\t\t\t.map((entry) => toStat(entry));\n\t\t},\n\t\tendLifecycle(artifactId, input) {\n\t\t\tconst entry = artifacts.get(artifactId);\n\t\t\tif (!entry) throw new Error(t(\"Artifact not found: {artifactId}\", { artifactId }));\n\t\t\tif (entry.ended) {\n\t\t\t\tthrow new Error(t(\"Artifact {artifactId} lifecycle has already ended\", { artifactId }));\n\t\t\t}\n\t\t\tentry.ended = true;\n\t\t\tentry.endReason = input.reason;\n\t\t\tentry.bytes = new Uint8Array(0);\n\t\t\treturn toStat(entry);\n\t\t},\n\t};\n}\n"]}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { t } from "../core/i18n/index.js";
|
|
1
2
|
/** FNV-1a 32-bit over the artifact content — deterministic artifact ids. */
|
|
2
3
|
function contentHash(bytes) {
|
|
3
4
|
let hash = 0x811c9dc5;
|
|
@@ -52,12 +53,15 @@ export function createArtifactStore(options = {}) {
|
|
|
52
53
|
read(input) {
|
|
53
54
|
const entry = artifacts.get(input.artifactId);
|
|
54
55
|
if (!entry)
|
|
55
|
-
throw new Error(
|
|
56
|
+
throw new Error(t("Artifact not found: {artifactId}", { artifactId: input.artifactId }));
|
|
56
57
|
if (entry.ref.sessionId !== input.sessionId) {
|
|
57
|
-
throw new Error(
|
|
58
|
+
throw new Error(t("Artifact {artifactId} belongs to a different session", { artifactId: input.artifactId }));
|
|
58
59
|
}
|
|
59
60
|
if (entry.ended) {
|
|
60
|
-
throw new Error(
|
|
61
|
+
throw new Error(t("Artifact {artifactId} lifecycle has ended: {reason}", {
|
|
62
|
+
artifactId: input.artifactId,
|
|
63
|
+
reason: entry.endReason ?? "ended",
|
|
64
|
+
}));
|
|
61
65
|
}
|
|
62
66
|
return { mediaType: entry.ref.mediaType, bytes: entry.bytes };
|
|
63
67
|
},
|
|
@@ -73,9 +77,9 @@ export function createArtifactStore(options = {}) {
|
|
|
73
77
|
endLifecycle(artifactId, input) {
|
|
74
78
|
const entry = artifacts.get(artifactId);
|
|
75
79
|
if (!entry)
|
|
76
|
-
throw new Error(
|
|
80
|
+
throw new Error(t("Artifact not found: {artifactId}", { artifactId }));
|
|
77
81
|
if (entry.ended) {
|
|
78
|
-
throw new Error(
|
|
82
|
+
throw new Error(t("Artifact {artifactId} lifecycle has already ended", { artifactId }));
|
|
79
83
|
}
|
|
80
84
|
entry.ended = true;
|
|
81
85
|
entry.endReason = input.reason;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artifact-store.js","sourceRoot":"","sources":["../../src/artifacts/artifact-store.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"artifact-store.js","sourceRoot":"","sources":["../../src/artifacts/artifact-store.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,CAAC,EAAE,MAAM,uBAAuB,CAAC;AAgC1C,8EAA4E;AAC5E,SAAS,WAAW,CAAC,KAAiB,EAAU;IAC/C,IAAI,IAAI,GAAG,UAAU,CAAC;IACtB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC1B,IAAI,IAAI,IAAI,CAAC;QACb,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAAA,CACjC;AAED,SAAS,MAAM,CAAC,KAAoF,EAAkB;IACrH,OAAO;QACN,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC,UAAU;QAChC,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,SAAS;QAC9B,WAAW,EAAE,KAAK,CAAC,GAAG,CAAC,WAAW;QAClC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI;QACpB,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,SAAS;QAC9B,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,SAAS;QAC9B,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW;QAC1C,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACtD,CAAC;AAAA,CACF;AAED,MAAM,UAAU,mBAAmB,CAAC,OAAO,GAAoC,EAAE,EAAmB;IACnG,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAC9C,MAAM,SAAS,GAAG,IAAI,GAAG,EAAyF,CAAC;IACnH,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAkB,CAAC;IACrD,sEAAsE;IACtE,qEAAmE;IACnE,uDAAuD;IACvD,IAAI,mBAAmB,GAAG,CAAC,CAAC;IAE5B,OAAO;QACN,KAAK,CAAC,KAAK,EAAE;YACZ,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;YAClF,MAAM,QAAQ,GAAG,GAAG,KAAK,CAAC,SAAS,SAAS,KAAK,CAAC,WAAW,EAAE,CAAC;YAChE,MAAM,QAAQ,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YAC7D,kBAAkB,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAC3C,mBAAmB,IAAI,CAAC,CAAC;YACzB,MAAM,UAAU,GAAG,OAAO,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,QAAQ,IAAI,mBAAmB,EAAE,CAAC;YACxF,MAAM,GAAG,GAAkB;gBAC1B,UAAU;gBACV,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM;gBAC7B,SAAS,EAAE,KAAK;gBAChB,SAAS,EAAE,GAAG,EAAE;aAChB,CAAC;YACF,SAAS,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;YACrE,OAAO,EAAE,GAAG,EAAE,CAAC;QAAA,CACf;QACD,IAAI,CAAC,KAAK,EAAE;YACX,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAC9C,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,kCAAkC,EAAE,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;YACrG,IAAI,KAAK,CAAC,GAAG,CAAC,SAAS,KAAK,KAAK,CAAC,SAAS,EAAE,CAAC;gBAC7C,MAAM,IAAI,KAAK,CACd,CAAC,CAAC,sDAAsD,EAAE,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAC3F,CAAC;YACH,CAAC;YACD,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CACd,CAAC,CAAC,qDAAqD,EAAE;oBACxD,UAAU,EAAE,KAAK,CAAC,UAAU;oBAC5B,MAAM,EAAE,KAAK,CAAC,SAAS,IAAI,OAAO;iBAClC,CAAC,CACF,CAAC;YACH,CAAC;YACD,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;QAAA,CAC9D;QACD,IAAI,CAAC,UAAU,EAAE;YAChB,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACxC,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAAA,CACvD;QACD,IAAI,CAAC,SAAS,EAAE;YACf,OAAO,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC;iBAC5B,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC;iBACpD,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAAA,CAChC;QACD,YAAY,CAAC,UAAU,EAAE,KAAK,EAAE;YAC/B,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACxC,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,kCAAkC,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;YACnF,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,mDAAmD,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;YACzF,CAAC;YACD,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;YACnB,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC;YAC/B,KAAK,CAAC,KAAK,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;YAChC,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;QAAA,CACrB;KACD,CAAC;AAAA,CACF","sourcesContent":["/**\n * Artifact store (2.6a) — session export artifacts with refs, a bounded\n * read boundary, and an explicit end-of-life.\n *\n * Writers store bytes once and hand out serializable refs (id, session,\n * operation, kind, media type, size). Readers get the bytes only through\n * `read`, which is scoped to the owning session; `stat` exposes metadata\n * only. `endLifecycle` terminates an artifact explicitly: later reads fail\n * with a structured `ended` error and stats report the terminal state —\n * nothing is silently deleted or silently kept alive. Renderers and share\n * transports belong to later slices (2.6b-d).\n */\nimport type { ArtifactRefV1 } from \"../core/agent-capability-contract.ts\";\nimport { t } from \"../core/i18n/index.ts\";\n\nexport type { ArtifactRefV1 };\n\nexport interface ArtifactStatV1 {\n\treadonly artifactId: string;\n\treadonly sessionId: string;\n\treadonly operationId: string;\n\treadonly kind: string;\n\treadonly mediaType: string;\n\treadonly sizeBytes?: number;\n\treadonly state: \"available\" | \"ended\";\n\treadonly endReason?: string;\n}\n\nexport interface ArtifactStoreV1 {\n\twrite(input: {\n\t\treadonly sessionId: string;\n\t\treadonly operationId: string;\n\t\treadonly kind: string;\n\t\treadonly mediaType: string;\n\t\treadonly bytes: Uint8Array;\n\t}): { readonly ref: ArtifactRefV1 };\n\tread(input: { readonly artifactId: string; readonly sessionId: string }): {\n\t\treadonly mediaType: string;\n\t\treadonly bytes: Uint8Array;\n\t};\n\tstat(artifactId: string): ArtifactStatV1 | undefined;\n\tlist(sessionId: string): readonly ArtifactStatV1[];\n\tendLifecycle(artifactId: string, input: { readonly reason: string }): ArtifactStatV1;\n}\n\n/** FNV-1a 32-bit over the artifact content — deterministic artifact ids. */\nfunction contentHash(bytes: Uint8Array): string {\n\tlet hash = 0x811c9dc5;\n\tfor (const byte of bytes) {\n\t\thash ^= byte;\n\t\thash = Math.imul(hash, 0x01000193);\n\t}\n\treturn (hash >>> 0).toString(36);\n}\n\nfunction toStat(entry: { ref: ArtifactRefV1; bytes: Uint8Array; ended: boolean; endReason?: string }): ArtifactStatV1 {\n\treturn {\n\t\tartifactId: entry.ref.artifactId,\n\t\tsessionId: entry.ref.sessionId,\n\t\toperationId: entry.ref.operationId,\n\t\tkind: entry.ref.kind,\n\t\tmediaType: entry.ref.mediaType,\n\t\tsizeBytes: entry.ref.sizeBytes,\n\t\tstate: entry.ended ? \"ended\" : \"available\",\n\t\t...(entry.ended ? { endReason: entry.endReason } : {}),\n\t};\n}\n\nexport function createArtifactStore(options: { readonly now?: () => number } = {}): ArtifactStoreV1 {\n\tconst now = options.now ?? (() => Date.now());\n\tconst artifacts = new Map<string, { ref: ArtifactRefV1; bytes: Uint8Array; ended: boolean; endReason?: string }>();\n\tconst sequenceByIdentity = new Map<string, number>();\n\t// Global write counter: guarantees artifact ids are unique across ALL\n\t// (session, operation) identities — identical bytes written by two\n\t// different identities must never collide into one id.\n\tlet globalWriteSequence = 0;\n\n\treturn {\n\t\twrite(input) {\n\t\t\tif (input.bytes.length === 0) throw new Error(\"Artifact bytes must not be empty\");\n\t\t\tconst identity = `${input.sessionId}\\u0000${input.operationId}`;\n\t\t\tconst sequence = (sequenceByIdentity.get(identity) ?? 0) + 1;\n\t\t\tsequenceByIdentity.set(identity, sequence);\n\t\t\tglobalWriteSequence += 1;\n\t\t\tconst artifactId = `art-${contentHash(input.bytes)}-${sequence}-${globalWriteSequence}`;\n\t\t\tconst ref: ArtifactRefV1 = {\n\t\t\t\tartifactId,\n\t\t\t\tsessionId: input.sessionId,\n\t\t\t\toperationId: input.operationId,\n\t\t\t\tkind: input.kind,\n\t\t\t\tmediaType: input.mediaType,\n\t\t\t\tsizeBytes: input.bytes.length,\n\t\t\t\ttruncated: false,\n\t\t\t\tcreatedAt: now(),\n\t\t\t};\n\t\t\tartifacts.set(artifactId, { ref, bytes: input.bytes, ended: false });\n\t\t\treturn { ref };\n\t\t},\n\t\tread(input) {\n\t\t\tconst entry = artifacts.get(input.artifactId);\n\t\t\tif (!entry) throw new Error(t(\"Artifact not found: {artifactId}\", { artifactId: input.artifactId }));\n\t\t\tif (entry.ref.sessionId !== input.sessionId) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tt(\"Artifact {artifactId} belongs to a different session\", { artifactId: input.artifactId }),\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (entry.ended) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tt(\"Artifact {artifactId} lifecycle has ended: {reason}\", {\n\t\t\t\t\t\tartifactId: input.artifactId,\n\t\t\t\t\t\treason: entry.endReason ?? \"ended\",\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn { mediaType: entry.ref.mediaType, bytes: entry.bytes };\n\t\t},\n\t\tstat(artifactId) {\n\t\t\tconst entry = artifacts.get(artifactId);\n\t\t\treturn entry === undefined ? undefined : toStat(entry);\n\t\t},\n\t\tlist(sessionId) {\n\t\t\treturn [...artifacts.values()]\n\t\t\t\t.filter((entry) => entry.ref.sessionId === sessionId)\n\t\t\t\t.map((entry) => toStat(entry));\n\t\t},\n\t\tendLifecycle(artifactId, input) {\n\t\t\tconst entry = artifacts.get(artifactId);\n\t\t\tif (!entry) throw new Error(t(\"Artifact not found: {artifactId}\", { artifactId }));\n\t\t\tif (entry.ended) {\n\t\t\t\tthrow new Error(t(\"Artifact {artifactId} lifecycle has already ended\", { artifactId }));\n\t\t\t}\n\t\t\tentry.ended = true;\n\t\t\tentry.endReason = input.reason;\n\t\t\tentry.bytes = new Uint8Array(0);\n\t\t\treturn toStat(entry);\n\t\t},\n\t};\n}\n"]}
|