@alvin0/ai-agent-sdk-core 0.1.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/LICENSE +21 -0
- package/README.md +52 -0
- package/dist/agent/accounting/common.js +2 -0
- package/dist/agent/accounting/common.js.map +1 -0
- package/dist/agent/accounting/config.js +2 -0
- package/dist/agent/accounting/config.js.map +1 -0
- package/dist/agent/accounting/contracts.d.ts +36 -0
- package/dist/agent/accounting/contracts.d.ts.map +1 -0
- package/dist/agent/accounting/delivery/accounting-data.js +2 -0
- package/dist/agent/accounting/delivery/accounting-data.js.map +1 -0
- package/dist/agent/accounting/delivery/config.js +2 -0
- package/dist/agent/accounting/delivery/config.js.map +1 -0
- package/dist/agent/accounting/delivery/data.js +2 -0
- package/dist/agent/accounting/delivery/data.js.map +1 -0
- package/dist/agent/accounting/delivery/support-errors.js +2 -0
- package/dist/agent/accounting/delivery/support-errors.js.map +1 -0
- package/dist/agent/accounting/delivery/terminal.js +2 -0
- package/dist/agent/accounting/delivery/terminal.js.map +1 -0
- package/dist/agent/accounting/delivery-types.d.ts +43 -0
- package/dist/agent/accounting/delivery-types.d.ts.map +1 -0
- package/dist/agent/accounting/error.d.ts +18 -0
- package/dist/agent/accounting/error.d.ts.map +1 -0
- package/dist/agent/accounting/error.js +2 -0
- package/dist/agent/accounting/error.js.map +1 -0
- package/dist/agent/accounting/estimate.js +2 -0
- package/dist/agent/accounting/estimate.js.map +1 -0
- package/dist/agent/accounting/event-buffer.js +2 -0
- package/dist/agent/accounting/event-buffer.js.map +1 -0
- package/dist/agent/accounting/ledger.js +2 -0
- package/dist/agent/accounting/ledger.js.map +1 -0
- package/dist/agent/accounting/report.d.ts +70 -0
- package/dist/agent/accounting/report.d.ts.map +1 -0
- package/dist/agent/accounting/usage.d.ts +13 -0
- package/dist/agent/accounting/usage.d.ts.map +1 -0
- package/dist/agent/accounting/usage.js +2 -0
- package/dist/agent/accounting/usage.js.map +1 -0
- package/dist/agent/context/section.d.ts +15 -0
- package/dist/agent/context/section.d.ts.map +1 -0
- package/dist/agent/context/section.js +2 -0
- package/dist/agent/context/section.js.map +1 -0
- package/dist/agent/context/types.d.ts +98 -0
- package/dist/agent/context/types.d.ts.map +1 -0
- package/dist/agent/define/definition.d.ts +110 -0
- package/dist/agent/define/definition.d.ts.map +1 -0
- package/dist/agent/define/definition.js +2 -0
- package/dist/agent/define/definition.js.map +1 -0
- package/dist/agent/define/instructions.js +2 -0
- package/dist/agent/define/instructions.js.map +1 -0
- package/dist/agent/define/output-format.js +2 -0
- package/dist/agent/define/output-format.js.map +1 -0
- package/dist/agent/define/session/accounting.js +2 -0
- package/dist/agent/define/session/accounting.js.map +1 -0
- package/dist/agent/define/session/common.js +2 -0
- package/dist/agent/define/session/common.js.map +1 -0
- package/dist/agent/define/session/config.js +2 -0
- package/dist/agent/define/session/config.js.map +1 -0
- package/dist/agent/define/session/model-config.js +2 -0
- package/dist/agent/define/session/model-config.js.map +1 -0
- package/dist/agent/define/session/observer.js +2 -0
- package/dist/agent/define/session/observer.js.map +1 -0
- package/dist/agent/define/session/run-seal.js +2 -0
- package/dist/agent/define/session/run-seal.js.map +1 -0
- package/dist/agent/define/session/runtime-binding.js +2 -0
- package/dist/agent/define/session/runtime-binding.js.map +1 -0
- package/dist/agent/define/session/runtime-compaction.js +2 -0
- package/dist/agent/define/session/runtime-compaction.js.map +1 -0
- package/dist/agent/define/session/runtime-memory.js +2 -0
- package/dist/agent/define/session/runtime-memory.js.map +1 -0
- package/dist/agent/define/session/skills.js +2 -0
- package/dist/agent/define/session/skills.js.map +1 -0
- package/dist/agent/define/session/trace-accounting.js +2 -0
- package/dist/agent/define/session/trace-accounting.js.map +1 -0
- package/dist/agent/define/session/types.d.ts +217 -0
- package/dist/agent/define/session/types.d.ts.map +1 -0
- package/dist/agent/define/session/validation.js +2 -0
- package/dist/agent/define/session/validation.js.map +1 -0
- package/dist/agent/define/session.d.ts +77 -0
- package/dist/agent/define/session.d.ts.map +1 -0
- package/dist/agent/define/session.js +2 -0
- package/dist/agent/define/session.js.map +1 -0
- package/dist/agent/history/config.js +2 -0
- package/dist/agent/history/config.js.map +1 -0
- package/dist/agent/history/history.d.ts +33 -0
- package/dist/agent/history/history.d.ts.map +1 -0
- package/dist/agent/history/history.js +2 -0
- package/dist/agent/history/history.js.map +1 -0
- package/dist/agent/history/normalize.d.ts +7 -0
- package/dist/agent/history/normalize.d.ts.map +1 -0
- package/dist/agent/history/normalize.js +2 -0
- package/dist/agent/history/normalize.js.map +1 -0
- package/dist/agent/history/project.d.ts +14 -0
- package/dist/agent/history/project.d.ts.map +1 -0
- package/dist/agent/history/project.js +2 -0
- package/dist/agent/history/project.js.map +1 -0
- package/dist/agent/history/types.d.ts +85 -0
- package/dist/agent/history/types.d.ts.map +1 -0
- package/dist/agent/history/validation.js +2 -0
- package/dist/agent/history/validation.js.map +1 -0
- package/dist/agent/loop/events.d.ts +213 -0
- package/dist/agent/loop/events.d.ts.map +1 -0
- package/dist/agent/loop/queue.js +2 -0
- package/dist/agent/loop/queue.js.map +1 -0
- package/dist/agent/loop/run-turn.d.ts +8 -0
- package/dist/agent/loop/run-turn.d.ts.map +1 -0
- package/dist/agent/loop/run-turn.js +2 -0
- package/dist/agent/loop/run-turn.js.map +1 -0
- package/dist/agent/loop/schedule.d.ts +62 -0
- package/dist/agent/loop/schedule.d.ts.map +1 -0
- package/dist/agent/loop/schedule.js +3 -0
- package/dist/agent/loop/schedule.js.map +1 -0
- package/dist/agent/loop/turn/cancellation.js +2 -0
- package/dist/agent/loop/turn/cancellation.js.map +1 -0
- package/dist/agent/loop/turn/common.js +2 -0
- package/dist/agent/loop/turn/common.js.map +1 -0
- package/dist/agent/loop/turn/config.js +2 -0
- package/dist/agent/loop/turn/config.js.map +1 -0
- package/dist/agent/loop/turn/content.js +4 -0
- package/dist/agent/loop/turn/content.js.map +1 -0
- package/dist/agent/loop/turn/hooks.js +2 -0
- package/dist/agent/loop/turn/hooks.js.map +1 -0
- package/dist/agent/loop/turn/model-round.js +2 -0
- package/dist/agent/loop/turn/model-round.js.map +1 -0
- package/dist/agent/loop/turn/repetition.js +2 -0
- package/dist/agent/loop/turn/repetition.js.map +1 -0
- package/dist/agent/loop/turn/types.d.ts +82 -0
- package/dist/agent/loop/turn/types.d.ts.map +1 -0
- package/dist/agent/loop/turn/usage-stop.js +2 -0
- package/dist/agent/loop/turn/usage-stop.js.map +1 -0
- package/dist/agent/loop/turn/validation.js +2 -0
- package/dist/agent/loop/turn/validation.js.map +1 -0
- package/dist/agent/loop/types.d.ts +82 -0
- package/dist/agent/loop/types.d.ts.map +1 -0
- package/dist/agent/memory/accounting-binding.js +2 -0
- package/dist/agent/memory/accounting-binding.js.map +1 -0
- package/dist/agent/memory/compaction-config.d.ts +63 -0
- package/dist/agent/memory/compaction-config.d.ts.map +1 -0
- package/dist/agent/memory/compaction-config.js +2 -0
- package/dist/agent/memory/compaction-config.js.map +1 -0
- package/dist/agent/memory/compaction.d.ts +62 -0
- package/dist/agent/memory/compaction.d.ts.map +1 -0
- package/dist/agent/memory/compaction.js +6 -0
- package/dist/agent/memory/compaction.js.map +1 -0
- package/dist/agent/memory/memory.d.ts +61 -0
- package/dist/agent/memory/memory.d.ts.map +1 -0
- package/dist/agent/memory/memory.js +5 -0
- package/dist/agent/memory/memory.js.map +1 -0
- package/dist/agent/memory/persistence-types.d.ts +44 -0
- package/dist/agent/memory/persistence-types.d.ts.map +1 -0
- package/dist/agent/memory/surface-compaction.d.ts +6 -0
- package/dist/agent/memory/surface-compaction.d.ts.map +1 -0
- package/dist/agent/memory/surface-compaction.js +4 -0
- package/dist/agent/memory/surface-compaction.js.map +1 -0
- package/dist/agent/memory/token-estimator.d.ts +12 -0
- package/dist/agent/memory/token-estimator.d.ts.map +1 -0
- package/dist/agent/memory/token-estimator.js +2 -0
- package/dist/agent/memory/token-estimator.js.map +1 -0
- package/dist/agent/mode/run-agent.d.ts +79 -0
- package/dist/agent/mode/run-agent.d.ts.map +1 -0
- package/dist/agent/mode/run-agent.js +4 -0
- package/dist/agent/mode/run-agent.js.map +1 -0
- package/dist/agent/mode/user-input.d.ts +61 -0
- package/dist/agent/mode/user-input.d.ts.map +1 -0
- package/dist/agent/mode/user-input.js +2 -0
- package/dist/agent/mode/user-input.js.map +1 -0
- package/dist/agent/skill/catalog.d.ts +53 -0
- package/dist/agent/skill/catalog.d.ts.map +1 -0
- package/dist/agent/skill/catalog.js +2 -0
- package/dist/agent/skill/catalog.js.map +1 -0
- package/dist/agent/skill/definition.d.ts +106 -0
- package/dist/agent/skill/definition.d.ts.map +1 -0
- package/dist/agent/skill/definition.js +2 -0
- package/dist/agent/skill/definition.js.map +1 -0
- package/dist/agent/skill/provider/config.d.ts +11 -0
- package/dist/agent/skill/provider/config.d.ts.map +1 -0
- package/dist/agent/skill/provider/config.js +2 -0
- package/dist/agent/skill/provider/config.js.map +1 -0
- package/dist/agent/skill/provider/context.js +2 -0
- package/dist/agent/skill/provider/context.js.map +1 -0
- package/dist/agent/skill/provider/definition.d.ts +6 -0
- package/dist/agent/skill/provider/definition.d.ts.map +1 -0
- package/dist/agent/skill/provider/definition.js +2 -0
- package/dist/agent/skill/provider/definition.js.map +1 -0
- package/dist/agent/skill/provider/snapshot.js +2 -0
- package/dist/agent/skill/provider/snapshot.js.map +1 -0
- package/dist/agent/skill/provider/types.d.ts +49 -0
- package/dist/agent/skill/provider/types.d.ts.map +1 -0
- package/dist/agent/skill/tools.d.ts +45 -0
- package/dist/agent/skill/tools.d.ts.map +1 -0
- package/dist/agent/skill/tools.js +14 -0
- package/dist/agent/skill/tools.js.map +1 -0
- package/dist/agent/team/common.d.ts +26 -0
- package/dist/agent/team/common.d.ts.map +1 -0
- package/dist/agent/team/common.js +2 -0
- package/dist/agent/team/common.js.map +1 -0
- package/dist/agent/team/composed.d.ts +45 -0
- package/dist/agent/team/composed.d.ts.map +1 -0
- package/dist/agent/team/composed.js +2 -0
- package/dist/agent/team/composed.js.map +1 -0
- package/dist/agent/team/contracts.d.ts +54 -0
- package/dist/agent/team/contracts.d.ts.map +1 -0
- package/dist/agent/team/managed.d.ts +527 -0
- package/dist/agent/team/managed.d.ts.map +1 -0
- package/dist/agent/team/managed.js +4 -0
- package/dist/agent/team/managed.js.map +1 -0
- package/dist/agent/team/team.d.ts +142 -0
- package/dist/agent/team/team.d.ts.map +1 -0
- package/dist/agent/team/team.js +2 -0
- package/dist/agent/team/team.js.map +1 -0
- package/dist/agent/team/types.d.ts +170 -0
- package/dist/agent/team/types.d.ts.map +1 -0
- package/dist/agent/tool/approval.d.ts +106 -0
- package/dist/agent/tool/approval.d.ts.map +1 -0
- package/dist/agent/tool/approval.js +2 -0
- package/dist/agent/tool/approval.js.map +1 -0
- package/dist/agent/tool/capture.js +2 -0
- package/dist/agent/tool/capture.js.map +1 -0
- package/dist/agent/tool/config.js +2 -0
- package/dist/agent/tool/config.js.map +1 -0
- package/dist/agent/tool/definition.d.ts +227 -0
- package/dist/agent/tool/definition.d.ts.map +1 -0
- package/dist/agent/tool/definition.js +2 -0
- package/dist/agent/tool/definition.js.map +1 -0
- package/dist/agent/tool/errors.d.ts +82 -0
- package/dist/agent/tool/errors.d.ts.map +1 -0
- package/dist/agent/tool/errors.js +2 -0
- package/dist/agent/tool/errors.js.map +1 -0
- package/dist/agent/tool/execution.d.ts +60 -0
- package/dist/agent/tool/execution.d.ts.map +1 -0
- package/dist/agent/tool/execution.js +2 -0
- package/dist/agent/tool/execution.js.map +1 -0
- package/dist/agent/tool/output-budget.d.ts +159 -0
- package/dist/agent/tool/output-budget.d.ts.map +1 -0
- package/dist/agent/tool/output-budget.js +3 -0
- package/dist/agent/tool/output-budget.js.map +1 -0
- package/dist/agent/tool/pipeline.d.ts +98 -0
- package/dist/agent/tool/pipeline.d.ts.map +1 -0
- package/dist/agent/tool/pipeline.js +4 -0
- package/dist/agent/tool/pipeline.js.map +1 -0
- package/dist/agent/tool/registry.d.ts +70 -0
- package/dist/agent/tool/registry.d.ts.map +1 -0
- package/dist/agent/tool/registry.js +2 -0
- package/dist/agent/tool/registry.js.map +1 -0
- package/dist/agent/tool/schema.d.ts +12 -0
- package/dist/agent/tool/schema.d.ts.map +1 -0
- package/dist/agent/tool/schema.js +2 -0
- package/dist/agent/tool/schema.js.map +1 -0
- package/dist/agent/tool/source-types.d.ts +25 -0
- package/dist/agent/tool/source-types.d.ts.map +1 -0
- package/dist/agent/trace/trace.d.ts +63 -0
- package/dist/agent/trace/trace.d.ts.map +1 -0
- package/dist/agent/trace/trace.js +2 -0
- package/dist/agent/trace/trace.js.map +1 -0
- package/dist/agent.d.ts +52 -0
- package/dist/agent.js +1 -0
- package/dist/async/settlement.d.ts +6 -0
- package/dist/async/settlement.d.ts.map +1 -0
- package/dist/async/settlement.js +2 -0
- package/dist/async/settlement.js.map +1 -0
- package/dist/capability/common/config.js +2 -0
- package/dist/capability/common/config.js.map +1 -0
- package/dist/capability/common/data.js +2 -0
- package/dist/capability/common/data.js.map +1 -0
- package/dist/composition/agent/author.d.ts +12 -0
- package/dist/composition/agent/author.d.ts.map +1 -0
- package/dist/composition/agent/author.js +2 -0
- package/dist/composition/agent/author.js.map +1 -0
- package/dist/composition/agent/definition.js +2 -0
- package/dist/composition/agent/definition.js.map +1 -0
- package/dist/composition/agent/native-event.js +2 -0
- package/dist/composition/agent/native-event.js.map +1 -0
- package/dist/composition/agent/native-tools.js +2 -0
- package/dist/composition/agent/native-tools.js.map +1 -0
- package/dist/composition/agent/options.js +2 -0
- package/dist/composition/agent/options.js.map +1 -0
- package/dist/composition/agent/policy.js +2 -0
- package/dist/composition/agent/policy.js.map +1 -0
- package/dist/composition/agent/public-message.js +2 -0
- package/dist/composition/agent/public-message.js.map +1 -0
- package/dist/composition/agent/session.js +2 -0
- package/dist/composition/agent/session.js.map +1 -0
- package/dist/composition/agent/types.d.ts +218 -0
- package/dist/composition/agent/types.d.ts.map +1 -0
- package/dist/composition/common/counter.js +2 -0
- package/dist/composition/common/counter.js.map +1 -0
- package/dist/composition/common/errors.d.ts +15 -0
- package/dist/composition/common/errors.d.ts.map +1 -0
- package/dist/composition/common/errors.js +2 -0
- package/dist/composition/common/errors.js.map +1 -0
- package/dist/composition/common/json-data.js +2 -0
- package/dist/composition/common/json-data.js.map +1 -0
- package/dist/composition/credential/config.d.ts +5 -0
- package/dist/composition/credential/config.d.ts.map +1 -0
- package/dist/composition/credential/config.js +2 -0
- package/dist/composition/credential/config.js.map +1 -0
- package/dist/composition/credential/definition.d.ts +9 -0
- package/dist/composition/credential/definition.d.ts.map +1 -0
- package/dist/composition/credential/definition.js +2 -0
- package/dist/composition/credential/definition.js.map +1 -0
- package/dist/composition/credential/types.d.ts +38 -0
- package/dist/composition/credential/types.d.ts.map +1 -0
- package/dist/composition/delivery/ack.js +2 -0
- package/dist/composition/delivery/ack.js.map +1 -0
- package/dist/composition/delivery/attempt.js +2 -0
- package/dist/composition/delivery/attempt.js.map +1 -0
- package/dist/composition/delivery/batch.js +2 -0
- package/dist/composition/delivery/batch.js.map +1 -0
- package/dist/composition/delivery/checkpoint.js +2 -0
- package/dist/composition/delivery/checkpoint.js.map +1 -0
- package/dist/composition/delivery/event.js +2 -0
- package/dist/composition/delivery/event.js.map +1 -0
- package/dist/composition/delivery/resource.d.ts +11 -0
- package/dist/composition/delivery/resource.d.ts.map +1 -0
- package/dist/composition/delivery/resource.js +2 -0
- package/dist/composition/delivery/resource.js.map +1 -0
- package/dist/composition/delivery/staging.js +2 -0
- package/dist/composition/delivery/staging.js.map +1 -0
- package/dist/composition/diagnostics/config.js +2 -0
- package/dist/composition/diagnostics/config.js.map +1 -0
- package/dist/composition/diagnostics/ring.d.ts +12 -0
- package/dist/composition/diagnostics/ring.d.ts.map +1 -0
- package/dist/composition/diagnostics/ring.js +2 -0
- package/dist/composition/diagnostics/ring.js.map +1 -0
- package/dist/composition/exporter/definition.d.ts +7 -0
- package/dist/composition/exporter/definition.d.ts.map +1 -0
- package/dist/composition/exporter/definition.js +2 -0
- package/dist/composition/exporter/definition.js.map +1 -0
- package/dist/composition/exporter/lifecycle.js +2 -0
- package/dist/composition/exporter/lifecycle.js.map +1 -0
- package/dist/composition/exporter/preflight.js +2 -0
- package/dist/composition/exporter/preflight.js.map +1 -0
- package/dist/composition/exporter/types.d.ts +25 -0
- package/dist/composition/exporter/types.d.ts.map +1 -0
- package/dist/composition/exporter/types.js +2 -0
- package/dist/composition/exporter/types.js.map +1 -0
- package/dist/composition/identity/agent.js +2 -0
- package/dist/composition/identity/agent.js.map +1 -0
- package/dist/composition/lifecycle/bounded.js +2 -0
- package/dist/composition/lifecycle/bounded.js.map +1 -0
- package/dist/composition/lifecycle/operations.js +2 -0
- package/dist/composition/lifecycle/operations.js.map +1 -0
- package/dist/composition/lifecycle/types.d.ts +13 -0
- package/dist/composition/lifecycle/types.d.ts.map +1 -0
- package/dist/composition/lifecycle/types.js +2 -0
- package/dist/composition/lifecycle/types.js.map +1 -0
- package/dist/composition/logging/config.js +2 -0
- package/dist/composition/logging/config.js.map +1 -0
- package/dist/composition/logging/integration.js +2 -0
- package/dist/composition/logging/integration.js.map +1 -0
- package/dist/composition/logging/logger.d.ts +9 -0
- package/dist/composition/logging/logger.d.ts.map +1 -0
- package/dist/composition/logging/logger.js +2 -0
- package/dist/composition/logging/logger.js.map +1 -0
- package/dist/composition/memory/config.d.ts +10 -0
- package/dist/composition/memory/config.d.ts.map +1 -0
- package/dist/composition/memory/config.js +2 -0
- package/dist/composition/memory/config.js.map +1 -0
- package/dist/composition/memory/definition.d.ts +7 -0
- package/dist/composition/memory/definition.d.ts.map +1 -0
- package/dist/composition/memory/definition.js +2 -0
- package/dist/composition/memory/definition.js.map +1 -0
- package/dist/composition/memory/key.js +2 -0
- package/dist/composition/memory/key.js.map +1 -0
- package/dist/composition/memory/resume.js +2 -0
- package/dist/composition/memory/resume.js.map +1 -0
- package/dist/composition/memory/run.js +2 -0
- package/dist/composition/memory/run.js.map +1 -0
- package/dist/composition/model-catalog/config.js +2 -0
- package/dist/composition/model-catalog/config.js.map +1 -0
- package/dist/composition/model-catalog/manager.js +2 -0
- package/dist/composition/model-catalog/manager.js.map +1 -0
- package/dist/composition/model-catalog/options.js +2 -0
- package/dist/composition/model-catalog/options.js.map +1 -0
- package/dist/composition/model-catalog/types.d.ts +9 -0
- package/dist/composition/model-catalog/types.d.ts.map +1 -0
- package/dist/composition/observation/config.js +2 -0
- package/dist/composition/observation/config.js.map +1 -0
- package/dist/composition/observation/extensions.js +2 -0
- package/dist/composition/observation/extensions.js.map +1 -0
- package/dist/composition/observation/final-report.d.ts +6 -0
- package/dist/composition/observation/final-report.d.ts.map +1 -0
- package/dist/composition/observation/final-report.js +2 -0
- package/dist/composition/observation/final-report.js.map +1 -0
- package/dist/composition/observation/health.d.ts +13 -0
- package/dist/composition/observation/health.d.ts.map +1 -0
- package/dist/composition/observation/port.d.ts +11 -0
- package/dist/composition/observation/port.d.ts.map +1 -0
- package/dist/composition/observation/port.js +2 -0
- package/dist/composition/observation/port.js.map +1 -0
- package/dist/composition/preflight.js +2 -0
- package/dist/composition/preflight.js.map +1 -0
- package/dist/composition/provider/activation.js +2 -0
- package/dist/composition/provider/activation.js.map +1 -0
- package/dist/composition/provider/definition.d.ts +7 -0
- package/dist/composition/provider/definition.d.ts.map +1 -0
- package/dist/composition/provider/definition.js +2 -0
- package/dist/composition/provider/definition.js.map +1 -0
- package/dist/composition/provider/model-selection.js +2 -0
- package/dist/composition/provider/model-selection.js.map +1 -0
- package/dist/composition/provider/preflight.js +2 -0
- package/dist/composition/provider/preflight.js.map +1 -0
- package/dist/composition/provider/types.d.ts +38 -0
- package/dist/composition/provider/types.d.ts.map +1 -0
- package/dist/composition/provider/types.js +2 -0
- package/dist/composition/provider/types.js.map +1 -0
- package/dist/composition/queue/config.js +2 -0
- package/dist/composition/queue/config.js.map +1 -0
- package/dist/composition/queue/scheduler.js +2 -0
- package/dist/composition/queue/scheduler.js.map +1 -0
- package/dist/composition/queue/store.js +2 -0
- package/dist/composition/queue/store.js.map +1 -0
- package/dist/composition/runtime/config.js +2 -0
- package/dist/composition/runtime/config.js.map +1 -0
- package/dist/composition/runtime/owner.js +2 -0
- package/dist/composition/runtime/owner.js.map +1 -0
- package/dist/composition/runtime/public.d.ts +7 -0
- package/dist/composition/runtime/public.d.ts.map +1 -0
- package/dist/composition/runtime/public.js +2 -0
- package/dist/composition/runtime/public.js.map +1 -0
- package/dist/composition/runtime/types.d.ts +76 -0
- package/dist/composition/runtime/types.d.ts.map +1 -0
- package/dist/composition/startup.js +2 -0
- package/dist/composition/startup.js.map +1 -0
- package/dist/composition/team/config.js +2 -0
- package/dist/composition/team/config.js.map +1 -0
- package/dist/composition/team/options.js +2 -0
- package/dist/composition/team/options.js.map +1 -0
- package/dist/composition/team/runtime.js +2 -0
- package/dist/composition/team/runtime.js.map +1 -0
- package/dist/composition/team/types.d.ts +63 -0
- package/dist/composition/team/types.d.ts.map +1 -0
- package/dist/composition/tool-source/config.d.ts +5 -0
- package/dist/composition/tool-source/config.d.ts.map +1 -0
- package/dist/composition/tool-source/config.js +2 -0
- package/dist/composition/tool-source/config.js.map +1 -0
- package/dist/composition/tool-source/definition.d.ts +7 -0
- package/dist/composition/tool-source/definition.d.ts.map +1 -0
- package/dist/composition/tool-source/definition.js +2 -0
- package/dist/composition/tool-source/definition.js.map +1 -0
- package/dist/composition/tool-source/snapshot.js +2 -0
- package/dist/composition/tool-source/snapshot.js.map +1 -0
- package/dist/contract/adapter.d.ts +91 -0
- package/dist/contract/adapter.d.ts.map +1 -0
- package/dist/contract/adapter.js +2 -0
- package/dist/contract/adapter.js.map +1 -0
- package/dist/contract/call-config.d.ts +36 -0
- package/dist/contract/call-config.d.ts.map +1 -0
- package/dist/contract/call-config.js +2 -0
- package/dist/contract/call-config.js.map +1 -0
- package/dist/contract/generate-options.d.ts +41 -0
- package/dist/contract/generate-options.d.ts.map +1 -0
- package/dist/contract/model-info.d.ts +99 -0
- package/dist/contract/model-info.d.ts.map +1 -0
- package/dist/contract/output-format.d.ts +18 -0
- package/dist/contract/output-format.d.ts.map +1 -0
- package/dist/contract/retry-policy.d.ts +104 -0
- package/dist/contract/retry-policy.d.ts.map +1 -0
- package/dist/contract/retry-policy.js +2 -0
- package/dist/contract/retry-policy.js.map +1 -0
- package/dist/contract/tool.d.ts +65 -0
- package/dist/contract/tool.d.ts.map +1 -0
- package/dist/contract/tool.js +2 -0
- package/dist/contract/tool.js.map +1 -0
- package/dist/errors/agent-sdk-error.d.ts +88 -0
- package/dist/errors/agent-sdk-error.d.ts.map +1 -0
- package/dist/errors/agent-sdk-error.js +2 -0
- package/dist/errors/agent-sdk-error.js.map +1 -0
- package/dist/errors/capability-identity.d.ts +10 -0
- package/dist/errors/capability-identity.d.ts.map +1 -0
- package/dist/errors/capability-identity.js +2 -0
- package/dist/errors/capability-identity.js.map +1 -0
- package/dist/errors/failure.d.ts +33 -0
- package/dist/errors/failure.d.ts.map +1 -0
- package/dist/errors/failure.js +2 -0
- package/dist/errors/failure.js.map +1 -0
- package/dist/errors/model-error.d.ts +83 -0
- package/dist/errors/model-error.d.ts.map +1 -0
- package/dist/errors/model-error.js +2 -0
- package/dist/errors/model-error.js.map +1 -0
- package/dist/http/api-key.d.ts +47 -0
- package/dist/http/api-key.d.ts.map +1 -0
- package/dist/http/api-key.js +2 -0
- package/dist/http/api-key.js.map +1 -0
- package/dist/http/attribution.d.ts +51 -0
- package/dist/http/attribution.d.ts.map +1 -0
- package/dist/http/attribution.js +2 -0
- package/dist/http/attribution.js.map +1 -0
- package/dist/index.d.ts +70 -0
- package/dist/index.js +1 -0
- package/dist/logging/types.d.ts +53 -0
- package/dist/logging/types.d.ts.map +1 -0
- package/dist/logging/types.js +2 -0
- package/dist/logging/types.js.map +1 -0
- package/dist/memory.d.ts +10 -0
- package/dist/memory.js +1 -0
- package/dist/message/content.d.ts +125 -0
- package/dist/message/content.d.ts.map +1 -0
- package/dist/message/message.d.ts +154 -0
- package/dist/message/message.d.ts.map +1 -0
- package/dist/message/message.js +2 -0
- package/dist/message/message.js.map +1 -0
- package/dist/message/projection.d.ts +34 -0
- package/dist/message/projection.d.ts.map +1 -0
- package/dist/message/projection.js +2 -0
- package/dist/message/projection.js.map +1 -0
- package/dist/observability/bus.d.ts +7 -0
- package/dist/observability/bus.d.ts.map +1 -0
- package/dist/observability/bus.js +2 -0
- package/dist/observability/bus.js.map +1 -0
- package/dist/observability/exporters.d.ts +39 -0
- package/dist/observability/exporters.d.ts.map +1 -0
- package/dist/observability/exporters.js +2 -0
- package/dist/observability/exporters.js.map +1 -0
- package/dist/observability/logger.js +2 -0
- package/dist/observability/logger.js.map +1 -0
- package/dist/observability/projections.d.ts +12 -0
- package/dist/observability/projections.d.ts.map +1 -0
- package/dist/observability/projections.js +2 -0
- package/dist/observability/projections.js.map +1 -0
- package/dist/observability/types.d.ts +103 -0
- package/dist/observability/types.d.ts.map +1 -0
- package/dist/observability.d.ts +20 -0
- package/dist/observability.js +1 -0
- package/dist/observation/boundaries.js +2 -0
- package/dist/observation/boundaries.js.map +1 -0
- package/dist/observation/context.d.ts +39 -0
- package/dist/observation/context.d.ts.map +1 -0
- package/dist/observation/context.js +2 -0
- package/dist/observation/context.js.map +1 -0
- package/dist/observation/event.d.ts +50 -0
- package/dist/observation/event.d.ts.map +1 -0
- package/dist/observation/event.js +2 -0
- package/dist/observation/event.js.map +1 -0
- package/dist/observation/port.d.ts +56 -0
- package/dist/observation/port.d.ts.map +1 -0
- package/dist/observation/port.js +2 -0
- package/dist/observation/port.js.map +1 -0
- package/dist/observation/privacy.js +2 -0
- package/dist/observation/privacy.js.map +1 -0
- package/dist/observation/report.d.ts +117 -0
- package/dist/observation/report.d.ts.map +1 -0
- package/dist/observation/report.js +2 -0
- package/dist/observation/report.js.map +1 -0
- package/dist/observation/telemetry-types.d.ts +29 -0
- package/dist/observation/telemetry-types.d.ts.map +1 -0
- package/dist/observation/usage.d.ts +52 -0
- package/dist/observation/usage.d.ts.map +1 -0
- package/dist/observation/usage.js +2 -0
- package/dist/observation/usage.js.map +1 -0
- package/dist/platform/adapter.js +2 -0
- package/dist/platform/adapter.js.map +1 -0
- package/dist/platform/capability-operation.js +2 -0
- package/dist/platform/capability-operation.js.map +1 -0
- package/dist/platform/config.js +2 -0
- package/dist/platform/config.js.map +1 -0
- package/dist/platform/logger-platform.js +2 -0
- package/dist/platform/logger-platform.js.map +1 -0
- package/dist/platform/resources.js +2 -0
- package/dist/platform/resources.js.map +1 -0
- package/dist/plugin/provider-plugin.d.ts +37 -0
- package/dist/plugin/provider-plugin.d.ts.map +1 -0
- package/dist/plugin/provider-plugin.js +2 -0
- package/dist/plugin/provider-plugin.js.map +1 -0
- package/dist/primitives/brand.d.ts +61 -0
- package/dist/primitives/brand.d.ts.map +1 -0
- package/dist/primitives/brand.js +2 -0
- package/dist/primitives/brand.js.map +1 -0
- package/dist/primitives/freeze.d.ts +20 -0
- package/dist/primitives/freeze.d.ts.map +1 -0
- package/dist/primitives/freeze.js +2 -0
- package/dist/primitives/freeze.js.map +1 -0
- package/dist/primitives/json-snapshot.js +2 -0
- package/dist/primitives/json-snapshot.js.map +1 -0
- package/dist/primitives/json.d.ts +32 -0
- package/dist/primitives/json.d.ts.map +1 -0
- package/dist/primitives/json.js +2 -0
- package/dist/primitives/json.js.map +1 -0
- package/dist/primitives/never.d.ts +22 -0
- package/dist/primitives/never.d.ts.map +1 -0
- package/dist/primitives/never.js +2 -0
- package/dist/primitives/never.js.map +1 -0
- package/dist/primitives/snapshot.d.ts +10 -0
- package/dist/primitives/snapshot.d.ts.map +1 -0
- package/dist/primitives/snapshot.js +2 -0
- package/dist/primitives/snapshot.js.map +1 -0
- package/dist/primitives/version.d.ts +6 -0
- package/dist/primitives/version.d.ts.map +1 -0
- package/dist/primitives/version.js +2 -0
- package/dist/primitives/version.js.map +1 -0
- package/dist/provider.d.ts +19 -0
- package/dist/provider.js +1 -0
- package/dist/runtime/model-call-handle.js +2 -0
- package/dist/runtime/model-call-handle.js.map +1 -0
- package/dist/runtime/model-metadata.js +2 -0
- package/dist/runtime/model-metadata.js.map +1 -0
- package/dist/runtime/model-stream.js +2 -0
- package/dist/runtime/model-stream.js.map +1 -0
- package/dist/runtime/registry.d.ts +171 -0
- package/dist/runtime/registry.d.ts.map +1 -0
- package/dist/runtime/registry.js +2 -0
- package/dist/runtime/registry.js.map +1 -0
- package/dist/runtime/with-retry.d.ts +45 -0
- package/dist/runtime/with-retry.d.ts.map +1 -0
- package/dist/runtime/with-retry.js +2 -0
- package/dist/runtime/with-retry.js.map +1 -0
- package/dist/skills.d.ts +8 -0
- package/dist/skills.js +1 -0
- package/dist/stream/assembler.d.ts +86 -0
- package/dist/stream/assembler.d.ts.map +1 -0
- package/dist/stream/assembler.js +2 -0
- package/dist/stream/assembler.js.map +1 -0
- package/dist/stream/chunk.d.ts +135 -0
- package/dist/stream/chunk.d.ts.map +1 -0
- package/dist/stream/idle-timeout.d.ts +30 -0
- package/dist/stream/idle-timeout.d.ts.map +1 -0
- package/dist/stream/idle-timeout.js +2 -0
- package/dist/stream/idle-timeout.js.map +1 -0
- package/dist/support-safe/error.d.ts +29 -0
- package/dist/support-safe/error.d.ts.map +1 -0
- package/dist/support-safe/error.js +2 -0
- package/dist/support-safe/error.js.map +1 -0
- package/dist/tools.d.ts +15 -0
- package/dist/tools.js +1 -0
- package/package.json +96 -0
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{AgentSdkError as e}from"../../errors/agent-sdk-error.js";import{AgentMemory as t}from"../../agent/memory/memory.js";import{MEMORY_LIMITS as n,MEMORY_OPERATION_ERROR_CODES as r}from"./config.js";import{boundedText as i,objectValue as a,ownData as o}from"../../capability/common/data.js";import{beginCoreCapabilityOperation as s}from"../../platform/capability-operation.js";import{memoryStoreKey as c}from"./key.js";function l(e,t,n=3e4){return Object.freeze({bindingId:e.bindingId,load:(r,i,a)=>u(e,t,r,i,a,n),commit:(r,i,a,o,s)=>d(e,t,r,i,a,o,s,n)})}async function u(e,r,l,u,d,_){let v=f(e,`load`),y=s(d,`core-memory-store`,`load`),b=u,x=()=>void 0;try{p(u);let s=h(u,_);b=s.signal,x=s.dispose,d.info(`Memory load started`,v);let f=await g(Promise.resolve().then(()=>(p(b),e.store.load(c(e,r,l),{signal:b,logger:d}))),b);if(p(b,u,`load`),f===void 0)return d.info(`Memory load completed`,{...v,outcome:`not-found`}),y.success(),Object.freeze({status:`not-found`,revision:null});let m=a(f);if(Reflect.ownKeys(m).some(e=>typeof e!=`string`||e!==`snapshot`&&e!==`revision`))throw TypeError(`Invalid load result`);let S=i(o(m,`revision`),n.revisionBytes),C=t.fromSnapshot(o(m,`snapshot`)).snapshot();return d.info(`Memory load completed`,{...v,outcome:`loaded`}),y.success(),Object.freeze({status:`loaded`,snapshot:C,revision:S})}catch{let t=m(u,b,`load`);if(u.aborted?y.abort():y.fail(t),d.error(`Memory load failed`,{...v,code:t.code}),u.aborted||e.requirement===`required`)throw t;return Object.freeze({status:`disabled`,error:t})}finally{x()}}async function d(e,t,r,l,u,d,_,v){let y=f(e,`commit`),b=s(_,`core-memory-store`,`commit`),x=d,S=!1,C=()=>void 0;try{p(d);let s=h(d,v);x=s.signal,C=s.dispose,_.info(`Memory commit started`,y);let f=await g(Promise.resolve().then(()=>(p(x),S=!0,e.store.commit(Object.freeze({key:c(e,t,r),snapshot:l,expectedRevision:u}),{signal:x,logger:_}))),x),m=a(f);if(Reflect.ownKeys(m).some(e=>typeof e!=`string`||e!==`revision`))throw TypeError(`Invalid commit result`);let w=i(o(m,`revision`),n.revisionBytes);return _.info(`Memory commit completed`,y),b.success(),Object.freeze({status:`committed`,revision:w})}catch{let t=m(d,x,`commit`,S);if(d.aborted?b.abort():b.fail(t),_.error(`Memory commit failed`,{...y,code:t.code}),d.aborted||e.requirement===`required`)throw t;return Object.freeze({status:`disabled`,error:t})}finally{C()}}function f(e,t){return Object.freeze({memoryStoreId:e.store.id,memoryBindingId:e.bindingId,action:t})}function p(t,n=t,i){if(t.aborted)throw n.aborted?new e(i===`commit`?`Memory commit outcome is unknown after cancellation`:`Memory operation was aborted`,i===`commit`?r.COMMIT_OUTCOME_UNKNOWN:r.ABORTED):new e(i===`commit`?`Memory commit outcome is unknown after its deadline`:`Memory load exceeded its deadline`,i===`commit`?r.COMMIT_OUTCOME_UNKNOWN:r.LOAD_TIMEOUT)}function m(t,n,i,a=!1){return n.aborted?i===`commit`&&a?new e(`Memory commit outcome is unknown after cancellation or deadline`,r.COMMIT_OUTCOME_UNKNOWN):t.aborted?new e(`Memory operation was aborted`,r.ABORTED):new e(`Memory ${i} exceeded its deadline${i===`commit`?` before dispatch`:``}`,i===`load`?r.LOAD_TIMEOUT:r.COMMIT_TIMEOUT):new e(`Memory ${i} did not complete`,i===`load`?r.LOAD_FAILED:r.COMMIT_FAILED)}function h(e,t){let n=new AbortController,r=setTimeout(()=>n.abort(Error(`Memory callback deadline exceeded`)),t);return Object.freeze({signal:AbortSignal.any([e,n.signal]),dispose:()=>clearTimeout(r)})}function g(e,t){return t.aborted?(e.catch(()=>void 0),Promise.reject(t.reason)):new Promise((n,r)=>{let i=()=>{a(),r(t.reason)},a=()=>t.removeEventListener(`abort`,i);t.addEventListener(`abort`,i,{once:!0}),e.then(e=>{a(),n(e)},e=>{a(),r(e)})})}export{l as createRuntimeMemoryPersistence};
|
|
2
|
+
//# sourceMappingURL=run.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.js","names":[],"sources":["../../../src/composition/memory/run.ts"],"sourcesContent":["import { AgentMemory, type AgentMemorySnapshot } from '../../agent/memory/memory.ts'\nimport { AgentSdkError } from '../../errors/agent-sdk-error.ts'\nimport type { SdkLogger } from '../../logging/types.ts'\nimport { boundedText, objectValue, ownData } from '../common/data.ts'\nimport { MEMORY_LIMITS, MEMORY_OPERATION_ERROR_CODES } from './config.ts'\nimport { memoryStoreKey } from './key.ts'\nimport { beginCoreCapabilityOperation } from '../logging/capability.ts'\nimport type {\n CapturedMemoryBinding, MemoryCommitState, MemoryLoadState, RuntimeMemoryPersistence,\n} from './types.ts'\n\nexport function createRuntimeMemoryPersistence(\n binding: CapturedMemoryBinding,\n agentId: string,\n timeoutMs = 30_000,\n): RuntimeMemoryPersistence {\n return Object.freeze({\n bindingId: binding.bindingId,\n load: (conversationId: string, signal: AbortSignal, logger: SdkLogger) =>\n loadMemory(binding, agentId, conversationId, signal, logger, timeoutMs),\n commit: (\n conversationId: string, snapshot: AgentMemorySnapshot, expectedRevision: string | null,\n signal: AbortSignal, logger: SdkLogger,\n ) =>\n commitMemory(binding, agentId, conversationId, snapshot, expectedRevision, signal, logger, timeoutMs),\n })\n}\n\nasync function loadMemory(\n binding: CapturedMemoryBinding,\n agentId: string,\n conversationId: string,\n signal: AbortSignal,\n logger: SdkLogger,\n timeoutMs: number,\n): Promise<MemoryLoadState> {\n const fields = fieldsFor(binding, 'load')\n const operation = beginCoreCapabilityOperation(logger, 'core-memory-store', 'load')\n let operationSignal = signal\n let disposeDeadline = (): void => undefined\n try {\n abortIfNeeded(signal)\n const scope = callbackScope(signal, timeoutMs)\n operationSignal = scope.signal\n disposeDeadline = scope.dispose\n logger.info('Memory load started', fields)\n const pending = Promise.resolve().then(() => {\n abortIfNeeded(operationSignal)\n return binding.store.load(\n memoryStoreKey(binding, agentId, conversationId), { signal: operationSignal, logger },\n )\n })\n const value = await raceSignal(pending, operationSignal)\n abortIfNeeded(operationSignal, signal, 'load')\n if (value === undefined) {\n logger.info('Memory load completed', { ...fields, outcome: 'not-found' })\n operation.success()\n return Object.freeze({ status: 'not-found', revision: null })\n }\n const source = objectValue(value)\n if (Reflect.ownKeys(source).some(key => typeof key !== 'string' || (key !== 'snapshot' && key !== 'revision'))) {\n throw new TypeError('Invalid load result')\n }\n const revision = boundedText(ownData(source, 'revision'), MEMORY_LIMITS.revisionBytes)\n const snapshot = AgentMemory.fromSnapshot(ownData(source, 'snapshot') as AgentMemorySnapshot).snapshot()\n logger.info('Memory load completed', { ...fields, outcome: 'loaded' })\n operation.success()\n return Object.freeze({ status: 'loaded', snapshot, revision })\n } catch {\n const safe = memoryFailure(signal, operationSignal, 'load')\n if (signal.aborted) operation.abort(); else operation.fail(safe)\n logger.error('Memory load failed', { ...fields, code: safe.code })\n if (signal.aborted || binding.requirement === 'required') throw safe\n return Object.freeze({ status: 'disabled', error: safe })\n } finally { disposeDeadline() }\n}\n\nasync function commitMemory(\n binding: CapturedMemoryBinding,\n agentId: string,\n conversationId: string,\n snapshot: AgentMemorySnapshot,\n expectedRevision: string | null,\n signal: AbortSignal,\n logger: SdkLogger,\n timeoutMs: number,\n): Promise<MemoryCommitState> {\n const fields = fieldsFor(binding, 'commit')\n const operation = beginCoreCapabilityOperation(logger, 'core-memory-store', 'commit')\n let operationSignal = signal\n let dispatched = false\n let disposeDeadline = (): void => undefined\n try {\n abortIfNeeded(signal)\n const scope = callbackScope(signal, timeoutMs)\n operationSignal = scope.signal\n disposeDeadline = scope.dispose\n logger.info('Memory commit started', fields)\n const pending = Promise.resolve().then(() => {\n abortIfNeeded(operationSignal)\n dispatched = true\n return binding.store.commit(Object.freeze({\n key: memoryStoreKey(binding, agentId, conversationId), snapshot, expectedRevision,\n }), { signal: operationSignal, logger })\n })\n const value = await raceSignal(pending, operationSignal)\n const source = objectValue(value)\n if (Reflect.ownKeys(source).some(key => typeof key !== 'string' || key !== 'revision')) {\n throw new TypeError('Invalid commit result')\n }\n const revision = boundedText(ownData(source, 'revision'), MEMORY_LIMITS.revisionBytes)\n logger.info('Memory commit completed', fields)\n operation.success()\n return Object.freeze({ status: 'committed', revision })\n } catch {\n const safe = memoryFailure(signal, operationSignal, 'commit', dispatched)\n if (signal.aborted) operation.abort(); else operation.fail(safe)\n logger.error('Memory commit failed', { ...fields, code: safe.code })\n if (signal.aborted || binding.requirement === 'required') throw safe\n return Object.freeze({ status: 'disabled', error: safe })\n } finally { disposeDeadline() }\n}\n\nfunction fieldsFor(binding: CapturedMemoryBinding, action: 'load' | 'commit') {\n return Object.freeze({ memoryStoreId: binding.store.id, memoryBindingId: binding.bindingId, action })\n}\n\nfunction abortIfNeeded(signal: AbortSignal, caller = signal, stage?: 'load' | 'commit'): void {\n if (!signal.aborted) return\n if (caller.aborted) throw new AgentSdkError(\n stage === 'commit' ? 'Memory commit outcome is unknown after cancellation' : 'Memory operation was aborted',\n stage === 'commit' ? MEMORY_OPERATION_ERROR_CODES.COMMIT_OUTCOME_UNKNOWN : MEMORY_OPERATION_ERROR_CODES.ABORTED,\n )\n throw new AgentSdkError(\n stage === 'commit' ? 'Memory commit outcome is unknown after its deadline' : 'Memory load exceeded its deadline',\n stage === 'commit' ? MEMORY_OPERATION_ERROR_CODES.COMMIT_OUTCOME_UNKNOWN : MEMORY_OPERATION_ERROR_CODES.LOAD_TIMEOUT,\n )\n}\n\nfunction memoryFailure(\n signal: AbortSignal,\n operationSignal: AbortSignal,\n stage: 'load' | 'commit',\n commitDispatched = false,\n): AgentSdkError {\n if (!operationSignal.aborted) return new AgentSdkError(\n `Memory ${stage} did not complete`,\n stage === 'load' ? MEMORY_OPERATION_ERROR_CODES.LOAD_FAILED : MEMORY_OPERATION_ERROR_CODES.COMMIT_FAILED,\n )\n if (stage === 'commit' && commitDispatched) return new AgentSdkError(\n 'Memory commit outcome is unknown after cancellation or deadline',\n MEMORY_OPERATION_ERROR_CODES.COMMIT_OUTCOME_UNKNOWN,\n )\n if (signal.aborted) return new AgentSdkError(\n 'Memory operation was aborted', MEMORY_OPERATION_ERROR_CODES.ABORTED,\n )\n return new AgentSdkError(\n `Memory ${stage} exceeded its deadline${stage === 'commit' ? ' before dispatch' : ''}`,\n stage === 'load' ? MEMORY_OPERATION_ERROR_CODES.LOAD_TIMEOUT : MEMORY_OPERATION_ERROR_CODES.COMMIT_TIMEOUT,\n )\n}\n\nfunction callbackScope(caller: AbortSignal, timeoutMs: number): {\n readonly signal: AbortSignal\n readonly dispose: () => void\n} {\n const deadline = new AbortController()\n const timer = setTimeout(() => deadline.abort(new Error('Memory callback deadline exceeded')), timeoutMs)\n return Object.freeze({\n signal: AbortSignal.any([caller, deadline.signal]),\n dispose: () => clearTimeout(timer),\n })\n}\n\nfunction raceSignal<T>(pending: Promise<T>, signal: AbortSignal): Promise<T> {\n if (signal.aborted) {\n void pending.catch(() => undefined)\n return Promise.reject(signal.reason)\n }\n return new Promise<T>((resolve, reject) => {\n const abort = (): void => { release(); reject(signal.reason) }\n const release = (): void => signal.removeEventListener('abort', abort)\n signal.addEventListener('abort', abort, { once: true })\n void pending.then(\n value => { release(); resolve(value) },\n error => { release(); reject(error) },\n )\n })\n}\n"],"mappings":"qaAWA,SAAgB,EACd,EACA,EACA,EAAY,IACc,CAC1B,OAAO,OAAO,OAAO,CACnB,UAAW,EAAQ,UACnB,MAAO,EAAwB,EAAqB,IAClD,EAAW,EAAS,EAAS,EAAgB,EAAQ,EAAQ,CAAS,EACxE,QACE,EAAwB,EAA+B,EACvD,EAAqB,IAErB,EAAa,EAAS,EAAS,EAAgB,EAAU,EAAkB,EAAQ,EAAQ,CAAS,CACxG,CAAC,CACH,CAEA,eAAe,EACb,EACA,EACA,EACA,EACA,EACA,EAC0B,CAC1B,IAAM,EAAS,EAAU,EAAS,MAAM,EAClC,EAAY,EAA6B,EAAQ,oBAAqB,MAAM,EAC9E,EAAkB,EAClB,MAA8B,IAAA,GAClC,GAAI,CACF,EAAc,CAAM,EACpB,IAAM,EAAQ,EAAc,EAAQ,CAAS,EAC7C,EAAkB,EAAM,OACxB,EAAkB,EAAM,QACxB,EAAO,KAAK,sBAAuB,CAAM,EAOzC,IAAM,EAAQ,MAAM,EANJ,QAAQ,QAAQ,CAAC,CAAC,UAChC,EAAc,CAAe,EACtB,EAAQ,MAAM,KACnB,EAAe,EAAS,EAAS,CAAc,EAAG,CAAE,OAAQ,EAAiB,QAAO,CACtF,EAEmC,EAAG,CAAe,EAEvD,GADA,EAAc,EAAiB,EAAQ,MAAM,EACzC,IAAU,IAAA,GAGZ,OAFA,EAAO,KAAK,wBAAyB,CAAE,GAAG,EAAQ,QAAS,WAAY,CAAC,EACxE,EAAU,QAAQ,EACX,OAAO,OAAO,CAAE,OAAQ,YAAa,SAAU,IAAK,CAAC,EAE9D,IAAM,EAAS,EAAY,CAAK,EAChC,GAAI,QAAQ,QAAQ,CAAM,CAAC,CAAC,KAAK,GAAO,OAAO,GAAQ,UAAa,IAAQ,YAAc,IAAQ,UAAW,EAC3G,MAAU,UAAU,qBAAqB,EAE3C,IAAM,EAAW,EAAY,EAAQ,EAAQ,UAAU,EAAG,EAAc,aAAa,EAC/E,EAAW,EAAY,aAAa,EAAQ,EAAQ,UAAU,CAAwB,CAAC,CAAC,SAAS,EAGvG,OAFA,EAAO,KAAK,wBAAyB,CAAE,GAAG,EAAQ,QAAS,QAAS,CAAC,EACrE,EAAU,QAAQ,EACX,OAAO,OAAO,CAAE,OAAQ,SAAU,WAAU,UAAS,CAAC,CAC/D,MAAQ,CACN,IAAM,EAAO,EAAc,EAAQ,EAAiB,MAAM,EAG1D,GAFI,EAAO,QAAS,EAAU,MAAM,EAAQ,EAAU,KAAK,CAAI,EAC/D,EAAO,MAAM,qBAAsB,CAAE,GAAG,EAAQ,KAAM,EAAK,IAAK,CAAC,EAC7D,EAAO,SAAW,EAAQ,cAAgB,WAAY,MAAM,EAChE,OAAO,OAAO,OAAO,CAAE,OAAQ,WAAY,MAAO,CAAK,CAAC,CAC1D,QAAU,CAAE,EAAgB,CAAE,CAChC,CAEA,eAAe,EACb,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EAC4B,CAC5B,IAAM,EAAS,EAAU,EAAS,QAAQ,EACpC,EAAY,EAA6B,EAAQ,oBAAqB,QAAQ,EAChF,EAAkB,EAClB,EAAa,GACb,MAA8B,IAAA,GAClC,GAAI,CACF,EAAc,CAAM,EACpB,IAAM,EAAQ,EAAc,EAAQ,CAAS,EAC7C,EAAkB,EAAM,OACxB,EAAkB,EAAM,QACxB,EAAO,KAAK,wBAAyB,CAAM,EAQ3C,IAAM,EAAQ,MAAM,EAPJ,QAAQ,QAAQ,CAAC,CAAC,UAChC,EAAc,CAAe,EAC7B,EAAa,GACN,EAAQ,MAAM,OAAO,OAAO,OAAO,CACxC,IAAK,EAAe,EAAS,EAAS,CAAc,EAAG,WAAU,kBACnE,CAAC,EAAG,CAAE,OAAQ,EAAiB,QAAO,CAAC,EAEJ,EAAG,CAAe,EACjD,EAAS,EAAY,CAAK,EAChC,GAAI,QAAQ,QAAQ,CAAM,CAAC,CAAC,KAAK,GAAO,OAAO,GAAQ,UAAY,IAAQ,UAAU,EACnF,MAAU,UAAU,uBAAuB,EAE7C,IAAM,EAAW,EAAY,EAAQ,EAAQ,UAAU,EAAG,EAAc,aAAa,EAGrF,OAFA,EAAO,KAAK,0BAA2B,CAAM,EAC7C,EAAU,QAAQ,EACX,OAAO,OAAO,CAAE,OAAQ,YAAa,UAAS,CAAC,CACxD,MAAQ,CACN,IAAM,EAAO,EAAc,EAAQ,EAAiB,SAAU,CAAU,EAGxE,GAFI,EAAO,QAAS,EAAU,MAAM,EAAQ,EAAU,KAAK,CAAI,EAC/D,EAAO,MAAM,uBAAwB,CAAE,GAAG,EAAQ,KAAM,EAAK,IAAK,CAAC,EAC/D,EAAO,SAAW,EAAQ,cAAgB,WAAY,MAAM,EAChE,OAAO,OAAO,OAAO,CAAE,OAAQ,WAAY,MAAO,CAAK,CAAC,CAC1D,QAAU,CAAE,EAAgB,CAAE,CAChC,CAEA,SAAS,EAAU,EAAgC,EAA2B,CAC5E,OAAO,OAAO,OAAO,CAAE,cAAe,EAAQ,MAAM,GAAI,gBAAiB,EAAQ,UAAW,QAAO,CAAC,CACtG,CAEA,SAAS,EAAc,EAAqB,EAAS,EAAQ,EAAiC,CACvF,KAAO,QAKZ,MAJI,EAAO,QAAe,IAAI,EAC5B,IAAU,SAAW,sDAAwD,+BAC7E,IAAU,SAAW,EAA6B,uBAAyB,EAA6B,OAC1G,EACM,IAAI,EACR,IAAU,SAAW,sDAAwD,oCAC7E,IAAU,SAAW,EAA6B,uBAAyB,EAA6B,YAC1G,CACF,CAEA,SAAS,EACP,EACA,EACA,EACA,EAAmB,GACJ,CAYf,OAXK,EAAgB,QAIjB,IAAU,UAAY,EAAyB,IAAI,EACrD,kEACA,EAA6B,sBAC/B,EACI,EAAO,QAAgB,IAAI,EAC7B,+BAAgC,EAA6B,OAC/D,EACO,IAAI,EACT,UAAU,EAAM,wBAAwB,IAAU,SAAW,mBAAqB,KAClF,IAAU,OAAS,EAA6B,aAAe,EAA6B,cAC9F,EAdqC,IAAI,EACvC,UAAU,EAAM,mBAChB,IAAU,OAAS,EAA6B,YAAc,EAA6B,aAC7F,CAYF,CAEA,SAAS,EAAc,EAAqB,EAG1C,CACA,IAAM,EAAW,IAAI,gBACf,EAAQ,eAAiB,EAAS,MAAU,MAAM,mCAAmC,CAAC,EAAG,CAAS,EACxG,OAAO,OAAO,OAAO,CACnB,OAAQ,YAAY,IAAI,CAAC,EAAQ,EAAS,MAAM,CAAC,EACjD,YAAe,aAAa,CAAK,CACnC,CAAC,CACH,CAEA,SAAS,EAAc,EAAqB,EAAiC,CAK3E,OAJI,EAAO,SACT,EAAa,UAAY,IAAA,EAAS,EAC3B,QAAQ,OAAO,EAAO,MAAM,GAE9B,IAAI,SAAY,EAAS,IAAW,CACzC,IAAM,MAAoB,CAAE,EAAQ,EAAG,EAAO,EAAO,MAAM,CAAE,EACvD,MAAsB,EAAO,oBAAoB,QAAS,CAAK,EACrE,EAAO,iBAAiB,QAAS,EAAO,CAAE,KAAM,EAAK,CAAC,EACtD,EAAa,KACX,GAAS,CAAE,EAAQ,EAAG,EAAQ,CAAK,CAAE,EACrC,GAAS,CAAE,EAAQ,EAAG,EAAO,CAAK,CAAE,CACtC,CACF,CAAC,CACH"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=Object.freeze({freshTtlMs:3e5,staleTtlMs:0,failureRetryMs:5e3,maxFailureRetryMs:6e4}),t=Object.freeze({routeUnavailable:`MODEL_CATALOG_ROUTE_UNAVAILABLE`,refreshUnavailable:`MODEL_CATALOG_UNAVAILABLE`,invalidOptions:`MODEL_CATALOG_OPTIONS_INVALID`});export{e as MODEL_CATALOG_DEFAULTS,t as MODEL_CATALOG_ERROR_CODES};
|
|
2
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","names":[],"sources":["../../../src/composition/model-catalog/config.ts"],"sourcesContent":["export const MODEL_CATALOG_DEFAULTS = Object.freeze({\n freshTtlMs: 5 * 60_000,\n staleTtlMs: 0,\n failureRetryMs: 5_000,\n maxFailureRetryMs: 60_000,\n})\n\nexport const MODEL_CATALOG_ERROR_CODES = Object.freeze({\n routeUnavailable: 'MODEL_CATALOG_ROUTE_UNAVAILABLE',\n refreshUnavailable: 'MODEL_CATALOG_UNAVAILABLE',\n invalidOptions: 'MODEL_CATALOG_OPTIONS_INVALID',\n})\n"],"mappings":"AAAA,MAAa,EAAyB,OAAO,OAAO,CAClD,WAAY,IACZ,WAAY,EACZ,eAAgB,IAChB,kBAAmB,GACrB,CAAC,EAEY,EAA4B,OAAO,OAAO,CACrD,iBAAkB,kCAClB,mBAAoB,4BACpB,eAAgB,+BAClB,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{deepFreeze as e}from"../../primitives/freeze.js";import{AgentSdkError as t}from"../../errors/agent-sdk-error.js";import{NOT_APPLICABLE_USAGE_COVERAGE as n}from"../../support-safe/error.js";import{MODEL_CATALOG_ERROR_CODES as r}from"./config.js";import{captureCatalogOptions as i,captureCatalogRoute as a,resolveCatalogPolicy as o}from"./options.js";var s=class{registry;operations;resources;topology;entries=new Map;policy;constructor(e,t,n,r,i){this.registry=e,this.operations=t,this.resources=n,this.topology=r,this.policy=o(i)}get(e,n){let o=a(e),s=i(n),c=this.topology.find(e=>e.route===o);if(c===void 0)return Promise.reject(new t(`Model catalog route is unavailable`,r.routeUnavailable));if(s.signal?.aborted)return Promise.reject(d());let l=`${c.pluginId}\u0000${c.route}`,u=this.entries.get(l)??this.createEntry(l),f=u.flight;if(f!==void 0)return this.join(f,s.signal);let p=this.resources.platform.wallNow();if(u.lastGood?.snapshot.state===`static`)return Promise.resolve(u.lastGood.snapshot);if(s.refresh!==`force`){let e=this.cached(u,p);if(e!==void 0)return Promise.resolve(e)}let m=this.start(u,c);return this.join(m,s.signal)}createEntry(e){let t={key:e,revision:0,failures:0,retryAtMs:0,flight:void 0};return this.entries.set(e,t),t}cached(e,t){let n=e.lastGood;if(n?.snapshot.state===`static`||n?.expiresMs!==void 0&&t<n.expiresMs)return n.snapshot;if(e.retryAtMs>t)return e.latest}start(e,t){let n=this.resources.platform.controller(),r={controller:n,waiters:0,settled:!1},i=this.operations.execute(`model-catalog`,{signal:n.signal},async n=>{try{let r=await this.registry.modelCatalog(t.route,{signal:n.signal,refresh:`force`});if(n.signal.aborted)throw d();let i=c(r),a=this.resources.platform.wallNow(),o;if(!n.publish(()=>{o=this.publishSuccess(e,t,i,a)}))throw d();return o}catch{if(n.signal.aborted)throw d();let r=this.resources.platform.wallNow(),i;if(!n.publish(()=>{i=this.publishFailure(e,t,r)}))throw d();return i}});return Object.defineProperty(r,"task",{value:i,enumerable:!0}),e.flight=r,i.finally(()=>{r.settled=!0,e.flight===r&&(e.flight=void 0)}).catch(()=>void 0),i.catch(()=>void 0),r}join(e,t){return e.waiters++,new Promise((n,r)=>{let i=!1,a=()=>void 0,o=t=>{i||(i=!0,a(),e.waiters--,e.waiters===0&&!e.settled&&e.controller.abort(),t())};t!==void 0&&(a=this.resources.onAbort(t,()=>o(()=>r(d())))),e.task.then(e=>o(()=>n(e)),e=>o(()=>r(e)))})}publishSuccess(t,n,r,i){t.failures=0,t.retryAtMs=0;let a=r.state===`static`?void 0:i+this.policy.freshTtlMs,o=e({provider:n,state:r.state,revision:l(t),models:r.models,observedAt:u(i),...a===void 0?{}:{expiresAt:u(a)}});return t.lastGood={snapshot:o,observedMs:i,...a===void 0?{}:{expiresMs:a}},t.latest=o,o}publishFailure(t,i,a){t.failures++,t.retryAtMs=a+Math.min(this.policy.maxFailureRetryMs,this.policy.failureRetryMs*2**Math.max(0,t.failures-1));let o=t.lastGood,s=o!==void 0&&(o.expiresMs===void 0||a<=o.expiresMs+this.policy.staleTtlMs),c=e({code:r.refreshUnavailable,stage:`model-catalog`,message:`Model catalog refresh did not complete`,usageCoverage:n,possiblyBilledAttemptsWithoutUsage:0}),d=e({provider:i,state:s?`stale`:`unavailable`,revision:l(t),models:s?o.snapshot.models:[],observedAt:u(a),retryAt:u(t.retryAtMs),error:c});return t.latest=d,d}};function c(n){if(n.state!==`static`&&n.state!==`fresh`&&n.state!==`empty`)throw new t(`Adapter catalog is unavailable`,r.refreshUnavailable);return Object.freeze({state:n.state,models:e(structuredClone(n.models))})}function l(e){return`catalog-${++e.revision}`}function u(e){return new Date(e).toISOString()}function d(){return new t(`Model catalog request was cancelled`,`RUNTIME_OPERATION_ABORTED`)}export{s as RuntimeModelCatalog};
|
|
2
|
+
//# sourceMappingURL=manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.js","names":[],"sources":["../../../src/composition/model-catalog/manager.ts"],"sourcesContent":["import type { ModelCatalogSnapshot } from '../../contract/model-info.ts'\nimport { AgentSdkError } from '../../errors/agent-sdk-error.ts'\nimport { deepFreeze } from '../../primitives/freeze.ts'\nimport type { ModelRegistry } from '../../runtime/registry.ts'\nimport type { RuntimeResources } from '../../platform/resources.ts'\nimport { NOT_APPLICABLE_USAGE_COVERAGE } from '../../support-safe/error.ts'\nimport type { RuntimeOperations } from '../lifecycle/operations.ts'\nimport type { RuntimeProviderInfo } from '../provider/types.ts'\nimport { MODEL_CATALOG_ERROR_CODES } from './config.ts'\nimport { captureCatalogOptions, captureCatalogRoute, resolveCatalogPolicy } from './options.ts'\nimport type {\n CatalogGeneration, ModelCatalogPolicy, PublishedCatalog, RuntimeModelCatalogSnapshot,\n} from './types.ts'\n\ninterface CacheEntry {\n readonly key: string\n revision: number\n failures: number\n retryAtMs: number\n lastGood?: PublishedCatalog\n latest?: RuntimeModelCatalogSnapshot\n flight: CatalogFlight | undefined\n}\n\ninterface CatalogFlight {\n readonly controller: AbortController\n readonly task: Promise<RuntimeModelCatalogSnapshot>\n waiters: number\n settled: boolean\n}\n\n/** Runtime-owned dynamic catalog cache with per-waiter cancellation. */\nexport class RuntimeModelCatalog {\n private readonly entries = new Map<string, CacheEntry>()\n private readonly policy: Required<ModelCatalogPolicy>\n\n constructor(\n private readonly registry: ModelRegistry,\n private readonly operations: RuntimeOperations,\n private readonly resources: RuntimeResources,\n private readonly topology: readonly RuntimeProviderInfo[],\n policy?: ModelCatalogPolicy,\n ) { this.policy = resolveCatalogPolicy(policy) }\n\n get(routeValue: unknown, optionsValue?: unknown): Promise<RuntimeModelCatalogSnapshot> {\n const route = captureCatalogRoute(routeValue)\n const options = captureCatalogOptions(optionsValue)\n const provider = this.topology.find(row => row.route === route)\n if (provider === undefined) return Promise.reject(new AgentSdkError(\n 'Model catalog route is unavailable', MODEL_CATALOG_ERROR_CODES.routeUnavailable,\n ))\n if (options.signal?.aborted) return Promise.reject(cancelled())\n const key = `${provider.pluginId}\\u0000${provider.route}`\n const entry = this.entries.get(key) ?? this.createEntry(key)\n const active = entry.flight\n if (active !== undefined) return this.join(active, options.signal)\n const now = this.resources.platform.wallNow()\n if (entry.lastGood?.snapshot.state === 'static') return Promise.resolve(entry.lastGood.snapshot)\n if (options.refresh !== 'force') {\n const cached = this.cached(entry, now)\n if (cached !== undefined) return Promise.resolve(cached)\n }\n const flight = this.start(entry, provider)\n return this.join(flight, options.signal)\n }\n\n private createEntry(key: string): CacheEntry {\n const entry: CacheEntry = { key, revision: 0, failures: 0, retryAtMs: 0, flight: undefined }\n this.entries.set(key, entry)\n return entry\n }\n\n private cached(entry: CacheEntry, now: number): RuntimeModelCatalogSnapshot | undefined {\n const good = entry.lastGood\n if (good?.snapshot.state === 'static') return good.snapshot\n if (good?.expiresMs !== undefined && now < good.expiresMs) return good.snapshot\n if (entry.retryAtMs > now) return entry.latest\n return undefined\n }\n\n private start(entry: CacheEntry, provider: RuntimeProviderInfo): CatalogFlight {\n const controller = this.resources.platform.controller()\n const flight = { controller, waiters: 0, settled: false } as CatalogFlight\n const task = this.operations.execute('model-catalog', { signal: controller.signal }, async lease => {\n try {\n const source = await this.registry.modelCatalog(provider.route, { signal: lease.signal, refresh: 'force' })\n if (lease.signal.aborted) throw cancelled()\n const generation = successfulGeneration(source)\n const now = this.resources.platform.wallNow()\n let published!: RuntimeModelCatalogSnapshot\n if (!lease.publish(() => { published = this.publishSuccess(entry, provider, generation, now) })) throw cancelled()\n return published\n } catch (error) {\n if (lease.signal.aborted) throw cancelled()\n const now = this.resources.platform.wallNow()\n let published!: RuntimeModelCatalogSnapshot\n if (!lease.publish(() => { published = this.publishFailure(entry, provider, now) })) throw cancelled()\n void error\n return published\n }\n })\n Object.defineProperty(flight, 'task', { value: task, enumerable: true })\n entry.flight = flight\n void task.finally(() => {\n flight.settled = true\n if (entry.flight === flight) entry.flight = undefined\n }).catch(() => undefined)\n void task.catch(() => undefined)\n return flight\n }\n\n private join(flight: CatalogFlight, signal?: AbortSignal): Promise<RuntimeModelCatalogSnapshot> {\n flight.waiters++\n return new Promise((resolve, reject) => {\n let done = false\n let release = (): void => undefined\n const finish = (action: () => void): void => {\n if (done) return\n done = true\n release()\n flight.waiters--\n if (flight.waiters === 0 && !flight.settled) flight.controller.abort()\n action()\n }\n if (signal !== undefined) release = this.resources.onAbort(signal, () => finish(() => reject(cancelled())))\n flight.task.then(value => finish(() => resolve(value)), error => finish(() => reject(error)))\n })\n }\n\n private publishSuccess(\n entry: CacheEntry, provider: RuntimeProviderInfo, source: CatalogGeneration, now: number,\n ): RuntimeModelCatalogSnapshot {\n entry.failures = 0\n entry.retryAtMs = 0\n const staticCatalog = source.state === 'static'\n const expiresMs = staticCatalog ? undefined : now + this.policy.freshTtlMs\n const snapshot = deepFreeze({ provider, state: source.state, revision: revision(entry),\n models: source.models, observedAt: iso(now),\n ...(expiresMs === undefined ? {} : { expiresAt: iso(expiresMs) }) })\n entry.lastGood = { snapshot, observedMs: now, ...(expiresMs === undefined ? {} : { expiresMs }) }\n entry.latest = snapshot\n return snapshot\n }\n\n private publishFailure(\n entry: CacheEntry, provider: RuntimeProviderInfo, now: number,\n ): RuntimeModelCatalogSnapshot {\n entry.failures++\n const delay = Math.min(this.policy.maxFailureRetryMs,\n this.policy.failureRetryMs * 2 ** Math.max(0, entry.failures - 1))\n entry.retryAtMs = now + delay\n const good = entry.lastGood\n const usable = good !== undefined && (good.expiresMs === undefined\n || now <= good.expiresMs + this.policy.staleTtlMs)\n const error = deepFreeze({ code: MODEL_CATALOG_ERROR_CODES.refreshUnavailable,\n stage: 'model-catalog', message: 'Model catalog refresh did not complete',\n usageCoverage: NOT_APPLICABLE_USAGE_COVERAGE, possiblyBilledAttemptsWithoutUsage: 0 })\n const snapshot: RuntimeModelCatalogSnapshot = deepFreeze({\n provider, state: usable ? 'stale' as const : 'unavailable' as const, revision: revision(entry),\n models: usable ? good.snapshot.models : [], observedAt: iso(now), retryAt: iso(entry.retryAtMs), error })\n entry.latest = snapshot\n return snapshot\n }\n}\n\nfunction successfulGeneration(source: ModelCatalogSnapshot): CatalogGeneration {\n if (source.state !== 'static' && source.state !== 'fresh' && source.state !== 'empty') {\n throw new AgentSdkError('Adapter catalog is unavailable', MODEL_CATALOG_ERROR_CODES.refreshUnavailable)\n }\n return Object.freeze({ state: source.state, models: deepFreeze(structuredClone(source.models)) })\n}\n\nfunction revision(entry: CacheEntry): string { return `catalog-${++entry.revision}` }\nfunction iso(value: number): string { return new Date(value).toISOString() }\nfunction cancelled(): AgentSdkError {\n return new AgentSdkError('Model catalog request was cancelled', 'RUNTIME_OPERATION_ABORTED')\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{timeoutValue as e}from"../../platform/config.js";import{boundedText as t,objectValue as n,optionalAbortSignal as r,ownData as i}from"../../capability/common/data.js";import{COMPOSITION_LIMITS as a}from"../../capability/common/config.js";import{MODEL_CATALOG_DEFAULTS as o,MODEL_CATALOG_ERROR_CODES as s}from"./config.js";const c=new Set([`signal`,`refresh`]);function l(e){try{return t(e,a.identityBytes)}catch{throw TypeError(s.routeUnavailable)}}function u(e){if(e===void 0)return Object.freeze({refresh:`if-stale`});try{let t=n(e);if(Reflect.ownKeys(t).some(e=>typeof e!=`string`||!c.has(e)))throw Error();let a=r(i(t,`signal`,!1)),o=i(t,`refresh`,!1)??`if-stale`;if(o!==`if-stale`&&o!==`force`)throw Error();return Object.freeze({refresh:o,...a===void 0?{}:{signal:a}})}catch{throw TypeError(s.invalidOptions)}}function d(t={}){let n=e(t.freshTtlMs??o.freshTtlMs,!0),r=e(t.staleTtlMs??o.staleTtlMs,!0),i=e(t.failureRetryMs??o.failureRetryMs),a=e(t.maxFailureRetryMs??o.maxFailureRetryMs);if(i>a)throw RangeError(`Model catalog retry base exceeds its cap`);return Object.freeze({freshTtlMs:n,staleTtlMs:r,failureRetryMs:i,maxFailureRetryMs:a})}export{u as captureCatalogOptions,l as captureCatalogRoute,d as resolveCatalogPolicy};
|
|
2
|
+
//# sourceMappingURL=options.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options.js","names":[],"sources":["../../../src/composition/model-catalog/options.ts"],"sourcesContent":["import { timeoutValue } from '../../platform/config.ts'\nimport { COMPOSITION_LIMITS } from '../common/config.ts'\nimport { boundedText, objectValue, optionalAbortSignal, ownData } from '../common/data.ts'\nimport { MODEL_CATALOG_DEFAULTS, MODEL_CATALOG_ERROR_CODES } from './config.ts'\nimport type { CapturedModelCatalogOptions, ModelCatalogPolicy } from './types.ts'\n\nconst OPTION_KEYS = new Set(['signal', 'refresh'])\n\nexport function captureCatalogRoute(value: unknown): string {\n try { return boundedText(value, COMPOSITION_LIMITS.identityBytes) }\n catch { throw new TypeError(MODEL_CATALOG_ERROR_CODES.routeUnavailable) }\n}\n\nexport function captureCatalogOptions(value: unknown): CapturedModelCatalogOptions {\n if (value === undefined) return Object.freeze({ refresh: 'if-stale' })\n try {\n const source = objectValue(value)\n if (Reflect.ownKeys(source).some(key => typeof key !== 'string' || !OPTION_KEYS.has(key))) throw new Error()\n const signal = optionalAbortSignal(ownData(source, 'signal', false))\n const refresh = ownData(source, 'refresh', false) ?? 'if-stale'\n if (refresh !== 'if-stale' && refresh !== 'force') throw new Error()\n return Object.freeze({ refresh, ...(signal === undefined ? {} : { signal }) })\n } catch { throw new TypeError(MODEL_CATALOG_ERROR_CODES.invalidOptions) }\n}\n\nexport function resolveCatalogPolicy(input: ModelCatalogPolicy = {}): Required<ModelCatalogPolicy> {\n const freshTtlMs = timeoutValue(input.freshTtlMs ?? MODEL_CATALOG_DEFAULTS.freshTtlMs, true)\n const staleTtlMs = timeoutValue(input.staleTtlMs ?? MODEL_CATALOG_DEFAULTS.staleTtlMs, true)\n const failureRetryMs = timeoutValue(input.failureRetryMs ?? MODEL_CATALOG_DEFAULTS.failureRetryMs)\n const maxFailureRetryMs = timeoutValue(input.maxFailureRetryMs ?? MODEL_CATALOG_DEFAULTS.maxFailureRetryMs)\n if (failureRetryMs > maxFailureRetryMs) throw new RangeError('Model catalog retry base exceeds its cap')\n return Object.freeze({ freshTtlMs, staleTtlMs, failureRetryMs, maxFailureRetryMs })\n}\n"],"mappings":"wUAMA,MAAM,EAAc,IAAI,IAAI,CAAC,SAAU,SAAS,CAAC,EAEjD,SAAgB,EAAoB,EAAwB,CAC1D,GAAI,CAAE,OAAO,EAAY,EAAO,EAAmB,aAAa,CAAE,MAC5D,CAAE,MAAU,UAAU,EAA0B,gBAAgB,CAAE,CAC1E,CAEA,SAAgB,EAAsB,EAA6C,CACjF,GAAI,IAAU,IAAA,GAAW,OAAO,OAAO,OAAO,CAAE,QAAS,UAAW,CAAC,EACrE,GAAI,CACF,IAAM,EAAS,EAAY,CAAK,EAChC,GAAI,QAAQ,QAAQ,CAAM,CAAC,CAAC,KAAK,GAAO,OAAO,GAAQ,UAAY,CAAC,EAAY,IAAI,CAAG,CAAC,EAAG,MAAU,MAAM,EAC3G,IAAM,EAAS,EAAoB,EAAQ,EAAQ,SAAU,EAAK,CAAC,EAC7D,EAAU,EAAQ,EAAQ,UAAW,EAAK,GAAK,WACrD,GAAI,IAAY,YAAc,IAAY,QAAS,MAAU,MAAM,EACnE,OAAO,OAAO,OAAO,CAAE,UAAS,GAAI,IAAW,IAAA,GAAY,CAAC,EAAI,CAAE,QAAO,CAAG,CAAC,CAC/E,MAAQ,CAAE,MAAU,UAAU,EAA0B,cAAc,CAAE,CAC1E,CAEA,SAAgB,EAAqB,EAA4B,CAAC,EAAiC,CACjG,IAAM,EAAa,EAAa,EAAM,YAAc,EAAuB,WAAY,EAAI,EACrF,EAAa,EAAa,EAAM,YAAc,EAAuB,WAAY,EAAI,EACrF,EAAiB,EAAa,EAAM,gBAAkB,EAAuB,cAAc,EAC3F,EAAoB,EAAa,EAAM,mBAAqB,EAAuB,iBAAiB,EAC1G,GAAI,EAAiB,EAAmB,MAAU,WAAW,0CAA0C,EACvG,OAAO,OAAO,OAAO,CAAE,aAAY,aAAY,iBAAgB,mBAAkB,CAAC,CACpF"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ModelCatalogSnapshot } from "../../contract/model-info.js";
|
|
2
|
+
import { RuntimeProviderInfo } from "../provider/types.js";
|
|
3
|
+
//#region src/composition/model-catalog/types.d.ts
|
|
4
|
+
interface RuntimeModelCatalogSnapshot extends Omit<ModelCatalogSnapshot, 'provider'> {
|
|
5
|
+
readonly provider: RuntimeProviderInfo;
|
|
6
|
+
}
|
|
7
|
+
//#endregion
|
|
8
|
+
export { RuntimeModelCatalogSnapshot };
|
|
9
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","names":[],"sources":["../../../src/composition/model-catalog/types.ts"],"mappings":";;;UAKiB,oCAAoC,KAAK;WAC/C,UAAU"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","names":[],"sources":["../../../src/composition/observation/config.ts"],"sourcesContent":["export const RUNTIME_OBSERVATION_DEFAULTS = Object.freeze({\n flushTimeoutMs: 10_000,\n shutdownTimeoutMs: 30_000,\n stagingFailures: 64,\n})\n"],"mappings":"AAAA,MAAa,EAA+B,OAAO,OAAO,CACxD,eAAgB,IAChB,kBAAmB,IACnB,gBAAiB,EACnB,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{arrayData as e,capturedMethod as t,objectValue as n,ownData as r}from"../../capability/common/data.js";const i=/^[A-Za-z0-9](?:[A-Za-z0-9._-]{0,63})$/;function a(t,a){if(t===void 0)return Object.freeze([]);let o=e(t,64).map(e=>{let t=n(e),o=r(t,`id`);if(typeof o!=`string`||!i.test(o))throw TypeError(`Invalid observation ${a} identity`);return{source:t,id:o}});if(new Set(o.map(e=>e.id)).size!==o.length)throw TypeError(`Duplicate observation ${a} identity`);return o}function o(e){let n=a(e,`processor`);try{return Object.freeze(n.map(({source:e,id:n})=>Object.freeze({id:n,transform:t(e,`transform`)})))}catch{throw TypeError(`Invalid observation processor method`)}}function s(e){let n=a(e,`redactor`);try{return Object.freeze(n.map(({source:e,id:n})=>Object.freeze({id:n,redact:t(e,`redact`)})))}catch{throw TypeError(`Invalid observation redactor method`)}}function c(e,t){if(t!==void 0){if(typeof t!=`function`)throw TypeError(`Invalid observation span backend`);return n=>Reflect.apply(t,e,[n])}}export{c as captureOpenSpan,o as captureProcessors,s as captureRedactors};
|
|
2
|
+
//# sourceMappingURL=extensions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extensions.js","names":[],"sources":["../../../src/composition/observation/extensions.ts"],"sourcesContent":["import type { ContentRedactor, ObservationProcessor } from '../../observation/telemetry-types.ts'\nimport type { ObservationSpan, OpenObservationSpanInput } from '../../observation/index.ts'\nimport { arrayData, capturedMethod, objectValue, ownData } from '../common/data.ts'\n\nconst COMPONENT_ID = /^[A-Za-z0-9](?:[A-Za-z0-9._-]{0,63})$/\nconst MAX_COMPONENTS = 64\n\nfunction components(value: unknown, kind: 'processor' | 'redactor'): readonly { source: object; id: string }[] {\n if (value === undefined) return Object.freeze([])\n const entries = arrayData(value, MAX_COMPONENTS).map(item => {\n const source = objectValue(item)\n const id = ownData(source, 'id')\n if (typeof id !== 'string' || !COMPONENT_ID.test(id)) throw new TypeError(`Invalid observation ${kind} identity`)\n return { source, id }\n })\n if (new Set(entries.map(entry => entry.id)).size !== entries.length) {\n throw new TypeError(`Duplicate observation ${kind} identity`)\n }\n return entries\n}\n\nexport function captureProcessors(value: unknown): readonly ObservationProcessor[] {\n const entries = components(value, 'processor')\n try { return Object.freeze(entries.map(({ source, id }) => Object.freeze({\n id,\n transform: capturedMethod<Parameters<ObservationProcessor['transform']>, ReturnType<ObservationProcessor['transform']>>(\n source,\n 'transform',\n ),\n }))) } catch { throw new TypeError('Invalid observation processor method') }\n}\n\nexport function captureRedactors(value: unknown): readonly ContentRedactor[] {\n const entries = components(value, 'redactor')\n try { return Object.freeze(entries.map(({ source, id }) => Object.freeze({\n id,\n redact: capturedMethod<Parameters<ContentRedactor['redact']>, ReturnType<ContentRedactor['redact']>>(\n source,\n 'redact',\n ),\n }))) } catch { throw new TypeError('Invalid observation redactor method') }\n}\n\nexport function captureOpenSpan(\n receiver: object,\n value: unknown,\n): ((input: OpenObservationSpanInput) => ObservationSpan) | undefined {\n if (value === undefined) return undefined\n if (typeof value !== 'function') throw new TypeError('Invalid observation span backend')\n return (input): ObservationSpan => Reflect.apply(value, receiver, [input]) as ObservationSpan\n}\n"],"mappings":"8GAIA,MAAM,EAAe,wCAGrB,SAAS,EAAW,EAAgB,EAA2E,CAC7G,GAAI,IAAU,IAAA,GAAW,OAAO,OAAO,OAAO,CAAC,CAAC,EAChD,IAAM,EAAU,EAAU,EAAO,EAAc,CAAC,CAAC,IAAI,GAAQ,CAC3D,IAAM,EAAS,EAAY,CAAI,EACzB,EAAK,EAAQ,EAAQ,IAAI,EAC/B,GAAI,OAAO,GAAO,UAAY,CAAC,EAAa,KAAK,CAAE,EAAG,MAAU,UAAU,uBAAuB,EAAK,UAAU,EAChH,MAAO,CAAE,SAAQ,IAAG,CACtB,CAAC,EACD,GAAI,IAAI,IAAI,EAAQ,IAAI,GAAS,EAAM,EAAE,CAAC,CAAC,CAAC,OAAS,EAAQ,OAC3D,MAAU,UAAU,yBAAyB,EAAK,UAAU,EAE9D,OAAO,CACT,CAEA,SAAgB,EAAkB,EAAiD,CACjF,IAAM,EAAU,EAAW,EAAO,WAAW,EAC7C,GAAI,CAAE,OAAO,OAAO,OAAO,EAAQ,KAAK,CAAE,SAAQ,QAAS,OAAO,OAAO,CACvE,KACA,UAAW,EACT,EACA,WACF,CACF,CAAC,CAAC,CAAC,CAAE,MAAQ,CAAE,MAAU,UAAU,sCAAsC,CAAE,CAC7E,CAEA,SAAgB,EAAiB,EAA4C,CAC3E,IAAM,EAAU,EAAW,EAAO,UAAU,EAC5C,GAAI,CAAE,OAAO,OAAO,OAAO,EAAQ,KAAK,CAAE,SAAQ,QAAS,OAAO,OAAO,CACvE,KACA,OAAQ,EACN,EACA,QACF,CACF,CAAC,CAAC,CAAC,CAAE,MAAQ,CAAE,MAAU,UAAU,qCAAqC,CAAE,CAC5E,CAEA,SAAgB,EACd,EACA,EACoE,CAChE,OAAU,IAAA,GACd,IAAI,OAAO,GAAU,WAAY,MAAU,UAAU,kCAAkC,EACvF,MAAQ,IAA2B,QAAQ,MAAM,EAAO,EAAU,CAAC,CAAK,CAAC,CADc,CAEzF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"final-report.d.ts","names":[],"sources":["../../../src/composition/observation/final-report.ts"],"mappings":";;KAUY,mBAAmB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{OBSERVATION_ERROR_CODES as e}from"../../observation/report.js";import{DeliveryDataError as t}from"../../agent/accounting/delivery/data.js";import{saturatingCounterAdd as n}from"../common/counter.js";import{deliverySummary as r}from"../../agent/accounting/delivery/accounting-data.js";import{withTerminalDelivery as i}from"../../agent/accounting/delivery/terminal.js";function a(a,c,l,u,d){try{let f=r(c),p=l.status===`accepted`&&(u===`operational`?!l.durable&&l.boundary===`none`:l.durable&&s(l.boundary)>=s(d)),m=l.status!==`accepted`&&!l.durable&&l.boundary===`none`;if(f.mode!==u||f.requiredBoundary!==d||l.runId!==a.runId||u===`operational`!=(d===`none`)||!p&&!m)throw new t;let h=l.status===`accepted`,g=n(f.pendingCritical,l.delivery?.pendingRequired??0),_=u===`operational`?f.reachedBoundary:h&&l.durable?o(f.reachedBoundary,l.boundary):`none`,v=f.complete&&h&&g===0&&(u===`operational`||l.durable),y=Object.freeze({mode:u,requiredBoundary:d,reachedBoundary:_,complete:v,acceptedCritical:n(f.acceptedCritical,+!!h),rejectedCritical:n(f.rejectedCritical,+!h),pendingCritical:g,...h?f.lastFailure===void 0?{}:{lastFailure:f.lastFailure}:{lastFailure:Object.freeze({type:`Error`,message:`Run terminal delivery did not complete`,code:l.reason===`capacity`?e.CAPTURE_REJECTED:e.EXPORT_FAILED})}});return i(a,y)}catch{throw new t}}function o(e,t){return e===`none`?t:t===`none`||s(e)<=s(t)?e:t}function s(e){return e===`remote-acknowledged`?2:+(e===`local-durable`)}export{a as finalizeRuntimeRunReport};
|
|
2
|
+
//# sourceMappingURL=final-report.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"final-report.js","names":[],"sources":["../../../src/composition/observation/final-report.ts"],"sourcesContent":["import {\n OBSERVATION_ERROR_CODES, type DeliveryMode, type ObservationBoundary, type ObservationDeliverySummary,\n} from '../../observation/index.ts'\nimport type { RunReport, RunTerminalRecord } from '../exporter/delivery-types.ts'\nimport { deliverySummary } from '../delivery/accounting-data.ts'\nimport { DeliveryDataError } from '../delivery/data.ts'\nimport { withTerminalDelivery } from '../delivery/terminal.ts'\nimport type { TerminalCheckpointResult } from './port.ts'\nimport { saturatingCounterAdd } from '../common/counter.ts'\n\nexport type RuntimeRunReport = RunReport\n\n/** Final immutable target-schema projection; the staged record and legacy ledger report stay unchanged. */\nexport function finalizeRuntimeRunReport(\n record: RunTerminalRecord,\n previous: ObservationDeliverySummary,\n terminal: TerminalCheckpointResult,\n mode: DeliveryMode,\n requiredBoundary: ObservationBoundary,\n): RuntimeRunReport {\n try {\n const prior = deliverySummary(previous)\n const acceptedReceipt = terminal.status === 'accepted'\n && (mode === 'operational'\n ? !terminal.durable && terminal.boundary === 'none'\n : terminal.durable && rank(terminal.boundary) >= rank(requiredBoundary))\n const rejectedReceipt = terminal.status !== 'accepted' && !terminal.durable && terminal.boundary === 'none'\n if (prior.mode !== mode || prior.requiredBoundary !== requiredBoundary || terminal.runId !== record.runId\n || (mode === 'operational') !== (requiredBoundary === 'none')\n || (!acceptedReceipt && !rejectedReceipt)) throw new DeliveryDataError()\n const accepted = terminal.status === 'accepted'\n const pending = saturatingCounterAdd(prior.pendingCritical, terminal.delivery?.pendingRequired ?? 0)\n const reached = mode === 'operational' ? prior.reachedBoundary\n : accepted && terminal.durable ? weaker(prior.reachedBoundary, terminal.boundary) : 'none'\n const complete = prior.complete && accepted && pending === 0 && (mode === 'operational' || terminal.durable)\n const summary: ObservationDeliverySummary = Object.freeze({ mode, requiredBoundary,\n reachedBoundary: reached, complete,\n acceptedCritical: saturatingCounterAdd(prior.acceptedCritical, accepted ? 1 : 0),\n rejectedCritical: saturatingCounterAdd(prior.rejectedCritical, accepted ? 0 : 1),\n pendingCritical: pending,\n ...(accepted ? prior.lastFailure === undefined ? {} : { lastFailure: prior.lastFailure } : {\n lastFailure: Object.freeze({ type: 'Error', message: 'Run terminal delivery did not complete',\n code: terminal.reason === 'capacity' ? OBSERVATION_ERROR_CODES.CAPTURE_REJECTED : OBSERVATION_ERROR_CODES.EXPORT_FAILED }),\n }),\n })\n return withTerminalDelivery(record, summary)\n } catch { throw new DeliveryDataError() }\n}\n\nfunction weaker(left: ObservationBoundary, right: ObservationBoundary): ObservationBoundary {\n if (left === 'none') return right\n if (right === 'none') return left\n return rank(left) <= rank(right) ? left : right\n}\nfunction rank(value: ObservationBoundary): number { return value === 'remote-acknowledged' ? 2 : value === 'local-durable' ? 1 : 0 }\n"],"mappings":"sXAaA,SAAgB,EACd,EACA,EACA,EACA,EACA,EACkB,CAClB,GAAI,CACF,IAAM,EAAQ,EAAgB,CAAQ,EAChC,EAAkB,EAAS,SAAW,aACtC,IAAS,cACT,CAAC,EAAS,SAAW,EAAS,WAAa,OAC3C,EAAS,SAAW,EAAK,EAAS,QAAQ,GAAK,EAAK,CAAgB,GACpE,EAAkB,EAAS,SAAW,YAAc,CAAC,EAAS,SAAW,EAAS,WAAa,OACrG,GAAI,EAAM,OAAS,GAAQ,EAAM,mBAAqB,GAAoB,EAAS,QAAU,EAAO,OAC9F,IAAS,gBAAoB,IAAqB,SAClD,CAAC,GAAmB,CAAC,EAAkB,MAAM,IAAI,EACvD,IAAM,EAAW,EAAS,SAAW,WAC/B,EAAU,EAAqB,EAAM,gBAAiB,EAAS,UAAU,iBAAmB,CAAC,EAC7F,EAAU,IAAS,cAAgB,EAAM,gBAC3C,GAAY,EAAS,QAAU,EAAO,EAAM,gBAAiB,EAAS,QAAQ,EAAI,OAChF,EAAW,EAAM,UAAY,GAAY,IAAY,IAAM,IAAS,eAAiB,EAAS,SAC9F,EAAsC,OAAO,OAAO,CAAE,OAAM,mBAChE,gBAAiB,EAAS,WAC1B,iBAAkB,EAAqB,EAAM,iBAAkB,IAAgB,EAC/E,iBAAkB,EAAqB,EAAM,iBAAkB,GAAgB,EAC/E,gBAAiB,EACjB,GAAI,EAAW,EAAM,cAAgB,IAAA,GAAY,CAAC,EAAI,CAAE,YAAa,EAAM,WAAY,EAAI,CACzF,YAAa,OAAO,OAAO,CAAE,KAAM,QAAS,QAAS,yCACnD,KAAM,EAAS,SAAW,WAAa,EAAwB,iBAAmB,EAAwB,aAAc,CAAC,CAC7H,CACF,CAAC,EACD,OAAO,EAAqB,EAAQ,CAAO,CAC7C,MAAQ,CAAE,MAAM,IAAI,CAAoB,CAC1C,CAEA,SAAS,EAAO,EAA2B,EAAiD,CAG1F,OAFI,IAAS,OAAe,EACxB,IAAU,QACP,EAAK,CAAI,GAAK,EAAK,CAAK,EADF,EACa,CAC5C,CACA,SAAS,EAAK,EAAoC,CAAE,OAAO,IAAU,sBAAwB,EAAI,MAAU,gBAAwB"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ObservationHealthSnapshot } from "../../observation/telemetry-types.js";
|
|
2
|
+
//#region src/composition/observation/health.d.ts
|
|
3
|
+
interface RuntimeObservationHealthSnapshot extends ObservationHealthSnapshot {
|
|
4
|
+
readonly integrationEvidence: {
|
|
5
|
+
readonly accepted: number;
|
|
6
|
+
readonly filtered: number;
|
|
7
|
+
readonly dropped: number;
|
|
8
|
+
readonly rejected: number;
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
//#endregion
|
|
12
|
+
export { RuntimeObservationHealthSnapshot };
|
|
13
|
+
//# sourceMappingURL=health.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health.d.ts","names":[],"sources":["../../../src/composition/observation/health.ts"],"mappings":";;UAEiB,yCAAyC;WAC/C;aACE;aACA;aACA;aACA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { DiagnosticRingSnapshot } from "../diagnostics/ring.js";
|
|
2
|
+
import { RuntimeObservationResource } from "../delivery/resource.js";
|
|
3
|
+
import { RuntimeObservationHealthSnapshot } from "./health.js";
|
|
4
|
+
//#region src/composition/observation/port.d.ts
|
|
5
|
+
interface RuntimeDiagnosticSnapshot extends DiagnosticRingSnapshot {
|
|
6
|
+
readonly resource: RuntimeObservationResource;
|
|
7
|
+
readonly observationHealth: RuntimeObservationHealthSnapshot;
|
|
8
|
+
}
|
|
9
|
+
//#endregion
|
|
10
|
+
export { RuntimeDiagnosticSnapshot };
|
|
11
|
+
//# sourceMappingURL=port.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"port.d.ts","names":[],"sources":["../../../src/composition/observation/port.ts"],"mappings":";;;;UA+CiB,kCAAkC;WACxC,UAAU;WACV,mBAAmB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{timeoutValue as e}from"../../platform/config.js";import{createCoreSpan as t,snapshotObservationSpan as n}from"../../observation/port.js";import{CLOSED_RUNTIME_LOGGER as r}from"../../logging/types.js";import{sanitizeObservationEvent as i}from"../../observation/privacy.js";import{saturatingCounterAdd as a}from"../common/counter.js";import{DiagnosticRing as o}from"../diagnostics/ring.js";import{DeliveryStaging as s}from"../delivery/staging.js";import{DeliveryQueueStore as c}from"../queue/store.js";import{DeliveryQueueScheduler as l}from"../queue/scheduler.js";import{LOG_LEVEL_RANK as u}from"../logging/config.js";import{eventHasIntegrationEvidence as d}from"../logging/integration.js";import{createCorrelatedRuntimeLogger as f,createRuntimeLogger as p}from"../logging/logger.js";import{RUNTIME_OBSERVATION_DEFAULTS as m}from"./config.js";var h=class{resource;platform;mode;store;scheduler;diagnosticsRing;flushTimeoutMs;stagingFailures=[];stagingFailureCount=0;integrationEvidence={accepted:0,filtered:0,dropped:0,rejected:0};minimumLogLevel;processors;redactors;includeErrorStacks;spanBackend;shutdownTimeoutMs;processorFailures=0;requiredBoundary;admissionClosed=!1;sealed=!1;constructor(t,n,r,i,f={}){if(this.resource=t,this.platform=r,this.mode=f.mode??`operational`,g(this.mode,n),this.requiredBoundary=this.mode===`operational`?`none`:_(n),this.flushTimeoutMs=e(f.flushTimeoutMs??m.flushTimeoutMs),this.minimumLogLevel=f.minimumLogLevel??`info`,!(this.minimumLogLevel in u))throw TypeError(`Invalid minimum log level`);this.processors=Object.freeze([...f.processors??[]]),this.redactors=Object.freeze([...f.redactors??[]]),this.includeErrorStacks=f.includeErrorStacks??!1,this.spanBackend=f.openSpan,this.shutdownTimeoutMs=e(f.shutdownTimeoutMs??m.shutdownTimeoutMs);let p=new s(n,e=>{this.stagingFailureCount=a(this.stagingFailureCount,1),this.stagingFailures.length===m.stagingFailures&&this.stagingFailures.splice(0,1),this.stagingFailures.push(e)});this.store=new c(t,p,f,e=>{e.kind===`event`&&d(e.item)&&this.integration(`dropped`)}),this.scheduler=new l(this.store,t,n,r,i),this.diagnosticsRing=new o({...f.diagnosticMaxEvents===void 0?{}:{maxEvents:f.diagnosticMaxEvents},...f.diagnosticMaxBytes===void 0?{}:{maxBytes:f.diagnosticMaxBytes}})}openSpan(e){if(this.spanBackend===void 0)return t(e);try{let t=n(this.spanBackend(e));if(t!==void 0&&t.correlation.runId===e.runId)return t}catch{}return this.processorFailures=a(this.processorFailures,1),t(e)}capture(e){let t=this.admitEvent(e);return y(e.eventId,t)}async checkpoint(e,t){let n=this.admitEvent(e),r=y(e.eventId,n);if(r.status!==`accepted`||this.mode===`operational`)return r;let i=n.entry;if(i===void 0)return x(e.eventId,`exporter-unavailable`);let a=await this.scheduler.checkpointRun(i.runId,i.sequence,this.deadline(),t);return a.requiredComplete&&a.reachedBoundary!==`none`?b(e.eventId,a.reachedBoundary):x(e.eventId,this.sealed?`closed`:`exporter-unavailable`)}admitTerminal(e){return this.store.admitRunRecord(e)}async checkpointTerminal(e,t){let n=this.admitTerminal(e);if(n.status===`closed`)return C(e.runId,`closed`,`none`,`closed`);if(n.status===`rejected`)return C(e.runId,`rejected`,`none`,`capacity`);if(this.mode===`operational`)return C(e.runId,`accepted`,`none`);let r=await this.scheduler.checkpointRun(e.runId,void 0,this.deadline(),t);return r.requiredComplete&&r.reachedBoundary!==`none`?C(e.runId,`accepted`,r.reachedBoundary,void 0,r):C(e.runId,this.sealed?`closed`:`rejected`,`none`,this.sealed?`closed`:`exporter-unavailable`,r)}flush(e){return this.scheduler.flush(this.deadline(),e)}flushUntil(e){return this.scheduler.flush(e)}diagnostics(){return Object.freeze({resource:this.resource,...this.diagnosticsRing.snapshot(),observationHealth:this.health()})}health(){let e=this.store.snapshot(),t=this.scheduler.health(),n=e.criticalRejected>0||t.requiredFailure||t.flushTimeouts>0,r=e.evictedVerbose>0||e.evictedNormal>0||this.processorFailures>0||t.exporterFailures>0||this.stagingFailureCount>0,i=this.sealed?`closed`:n?`failed`:r?`degraded`:`healthy`,o=e.criticalRejected>0?Object.freeze({type:`Error`,message:`Observation queue capacity exhausted`,code:`OBSERVABILITY_CAPTURE_REJECTED`}):t.flushTimeouts>0?Object.freeze({type:`Error`,message:`Observation flush timed out`,code:`OBSERVABILITY_FLUSH_TIMEOUT`}):this.processorFailures>0?Object.freeze({type:`Error`,message:`Observation processor did not complete`,code:`OBSERVATION_PROCESSOR_FAILED`}):t.exporterFailures>0||this.stagingFailureCount>0?Object.freeze({type:`Error`,message:`Observation exporter did not complete`,code:`OBSERVABILITY_EXPORT_FAILED`}):void 0;return Object.freeze({state:i,queuedEvents:e.queuedItems,queuedBytes:e.queuedBytes,accepted:e.accepted,exported:t.exported,droppedVerbose:e.evictedVerbose,droppedNormal:e.evictedNormal,criticalRejected:e.criticalRejected,processorFailures:this.processorFailures,exporterFailures:a(t.exporterFailures,this.stagingFailureCount),flushTimeouts:t.flushTimeouts,...t.lastExportAt===void 0?{}:{lastExportAt:t.lastExportAt},...o===void 0?{}:{lastFailure:o},integrationEvidence:Object.freeze({...this.integrationEvidence})})}logger(e){return this.admissionClosed?r:p({resource:this.resource,platform:this.platform,content:this.store.content,redactors:this.redactors,includeErrorStacks:this.includeErrorStacks,minimumLevel:this.minimumLogLevel,isClosed:()=>this.admissionClosed,capture:e=>this.capture(e),integration:e=>this.integration(e)},e)}correlatedLogger(e,t){return this.admissionClosed?r:f({resource:this.resource,platform:this.platform,content:this.store.content,redactors:this.redactors,includeErrorStacks:this.includeErrorStacks,minimumLevel:this.minimumLogLevel,isClosed:()=>this.admissionClosed,capture:e=>this.capture(e),integration:e=>this.integration(e)},e,t)}integrationEvidenceSnapshot(){return Object.freeze({...this.integrationEvidence})}stagingFailureSnapshot(){return Object.freeze([...this.stagingFailures])}observationDeadline(e){return Math.min(e,this.platform.monotonicNow()+this.shutdownTimeoutMs)}stopAdmission(){this.admissionClosed||(this.admissionClosed=!0,this.scheduler.stopAdmission())}seal(){this.sealed||(this.stopAdmission(),this.sealed=!0,this.scheduler.seal())}admitEvent(e){let t;try{let n={content:this.store.content,redactors:this.redactors,includeErrorStacks:this.includeErrorStacks};t=i(e,n);for(let e of this.processors){let r=e.transform(t);if(r===void 0)throw TypeError(`Observation processor returned no event`);let a=i(r,n);if(!S(t,a))throw TypeError(`Observation processor changed the event envelope`);t=a}}catch{return this.processorFailures=a(this.processorFailures,1),Object.freeze({status:`rejected`,reason:`processor-failed`})}let n=this.store.admitEvent(t);return n.status===`accepted`&&n.entry?.kind===`event`&&this.diagnosticsRing.record(n.entry.item),n}deadline(){return this.platform.monotonicNow()+this.flushTimeoutMs}integration(e){this.integrationEvidence[e]=a(this.integrationEvidence[e],1)}};function g(e,t){if(e!==`operational`&&e!==`reliable`&&e!==`audit`)throw TypeError(`Invalid observation delivery mode`);if(e===`operational`&&t.some(e=>e.requirement===`required`))throw TypeError(`Operational observation exporters must be best-effort`);if(e!==`operational`&&!t.some(e=>e.requirement===`required`&&e.boundary!==`none`))throw TypeError(`${e} observation requires a durable required exporter`)}function _(e){return e.filter(e=>e.requirement===`required`).map(e=>e.boundary).reduce((e,t)=>v(e)<=v(t)?e:t)}function v(e){return e===`remote-acknowledged`?2:+(e===`local-durable`)}function y(e,t){return t.status===`accepted`||t.status===`existing`?b(e,`none`):x(e,t.status===`closed`?`closed`:t.reason===`processor-failed`?`processor-failed`:`capacity`)}function b(e,t){return Object.freeze({eventId:e,status:`accepted`,durable:t!==`none`,boundary:t})}function x(e,t){return Object.freeze({eventId:e,status:`rejected`,durable:!1,boundary:`none`,reason:t})}function S(e,t){return e.eventId===t.eventId&&e.sequence===t.sequence&&e.name===t.name&&e.phase===t.phase&&e.occurredAt===t.occurredAt&&e.monotonicMs===t.monotonicMs&&e.priority===t.priority&&JSON.stringify(e.resource)===JSON.stringify(t.resource)&&JSON.stringify(e.correlation)===JSON.stringify(t.correlation)}function C(e,t,n,r,i){return Object.freeze({runId:e,status:t,durable:t===`accepted`&&n!==`none`,boundary:n,...r===void 0?{}:{reason:r},...i===void 0?{}:{delivery:i}})}export{h as RuntimeObservationPort};
|
|
2
|
+
//# sourceMappingURL=port.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"port.js","names":[],"sources":["../../../src/composition/observation/port.ts"],"sourcesContent":["import {\n createCoreSpan, snapshotObservationSpan, type CaptureReceipt, type DeliveryMode, type ObservationBoundary,\n type ObservationEvent, type ObservationPort, type ObservationSpan, type OpenObservationSpanInput,\n} from '../../observation/index.ts'\nimport type { RuntimePlatform } from '../../platform/adapter.ts'\nimport { timeoutValue } from '../../platform/config.ts'\nimport { RuntimeResources } from '../../platform/resources.ts'\nimport { DiagnosticRing, type DiagnosticRingOptions, type DiagnosticRingSnapshot } from '../diagnostics/ring.ts'\nimport type { RunTerminalRecord } from '../exporter/delivery-types.ts'\nimport type { RuntimeObservationExporterRegistration } from '../exporter/types.ts'\nimport { DeliveryStaging, type StagingFailure } from '../delivery/staging.ts'\nimport type { RuntimeObservationResource } from '../delivery/resource.ts'\nimport { DeliveryQueueScheduler, type QueueFlushReport } from '../queue/scheduler.ts'\nimport { DeliveryQueueStore, type DeliveryQueueOptions } from '../queue/store.ts'\nimport type { QueueAdmission } from '../queue/types.ts'\nimport { CLOSED_RUNTIME_LOGGER, createCorrelatedRuntimeLogger, createRuntimeLogger, type RuntimeLoggerContext } from '../logging/logger.ts'\nimport type { CorrelationContext } from '../../observation/context.ts'\nimport { eventHasIntegrationEvidence } from '../logging/integration.ts'\nimport { LOG_LEVEL_RANK } from '../logging/config.ts'\nimport type { LogLevel, SdkLogger } from '../../logging/types.ts'\nimport type { ContentRedactor, ObservationProcessor } from '../../observation/telemetry-types.ts'\nimport { sanitizeObservationEvent } from '../../observation/privacy.ts'\nimport { RUNTIME_OBSERVATION_DEFAULTS } from './config.ts'\nimport type { RuntimeObservationHealthSnapshot } from './health.ts'\nimport { saturatingCounterAdd } from '../common/counter.ts'\n\nexport interface RuntimeObservationPortOptions extends DeliveryQueueOptions {\n readonly mode?: DeliveryMode\n readonly flushTimeoutMs?: number\n readonly diagnosticMaxEvents?: DiagnosticRingOptions['maxEvents']\n readonly diagnosticMaxBytes?: DiagnosticRingOptions['maxBytes']\n readonly minimumLogLevel?: LogLevel\n readonly processors?: readonly ObservationProcessor[]\n readonly redactors?: readonly ContentRedactor[]\n readonly includeErrorStacks?: boolean\n readonly openSpan?: (input: OpenObservationSpanInput) => ObservationSpan\n readonly shutdownTimeoutMs?: number\n}\n\nexport interface TerminalCheckpointResult {\n readonly runId: string\n readonly status: 'accepted' | 'rejected' | 'closed'\n readonly durable: boolean\n readonly boundary: ObservationBoundary\n readonly reason?: 'capacity' | 'closed' | 'exporter-unavailable'\n readonly delivery?: QueueFlushReport\n}\nexport interface RuntimeDiagnosticSnapshot extends DiagnosticRingSnapshot {\n readonly resource: RuntimeObservationResource\n readonly observationHealth: RuntimeObservationHealthSnapshot\n}\n\n/** Internal canonical port; public runtime wiring owns option grammar and terminal report projection. */\nexport class RuntimeObservationPort implements ObservationPort {\n readonly mode: DeliveryMode\n private readonly store: DeliveryQueueStore\n private readonly scheduler: DeliveryQueueScheduler\n private readonly diagnosticsRing: DiagnosticRing\n private readonly flushTimeoutMs: number\n private readonly stagingFailures: StagingFailure[] = []\n private stagingFailureCount = 0\n private readonly integrationEvidence = { accepted: 0, filtered: 0, dropped: 0, rejected: 0 }\n private readonly minimumLogLevel: LogLevel\n private readonly processors: readonly ObservationProcessor[]\n private readonly redactors: readonly ContentRedactor[]\n private readonly includeErrorStacks: boolean\n private readonly spanBackend: ((input: OpenObservationSpanInput) => ObservationSpan) | undefined\n private readonly shutdownTimeoutMs: number\n private processorFailures = 0\n readonly requiredBoundary: ObservationBoundary\n private admissionClosed = false\n private sealed = false\n\n constructor(\n readonly resource: RuntimeObservationResource,\n registrations: readonly RuntimeObservationExporterRegistration[],\n private readonly platform: RuntimePlatform,\n resources: RuntimeResources,\n options: RuntimeObservationPortOptions = {},\n ) {\n this.mode = options.mode ?? 'operational'\n validateMode(this.mode, registrations)\n this.requiredBoundary = this.mode === 'operational' ? 'none' : requiredBoundary(registrations)\n this.flushTimeoutMs = timeoutValue(options.flushTimeoutMs ?? RUNTIME_OBSERVATION_DEFAULTS.flushTimeoutMs)\n this.minimumLogLevel = options.minimumLogLevel ?? 'info'\n if (!(this.minimumLogLevel in LOG_LEVEL_RANK)) throw new TypeError('Invalid minimum log level')\n this.processors = Object.freeze([...(options.processors ?? [])])\n this.redactors = Object.freeze([...(options.redactors ?? [])])\n this.includeErrorStacks = options.includeErrorStacks ?? false\n this.spanBackend = options.openSpan\n this.shutdownTimeoutMs = timeoutValue(options.shutdownTimeoutMs ?? RUNTIME_OBSERVATION_DEFAULTS.shutdownTimeoutMs)\n const staging = new DeliveryStaging(registrations, failure => {\n this.stagingFailureCount = saturatingCounterAdd(this.stagingFailureCount, 1)\n if (this.stagingFailures.length === RUNTIME_OBSERVATION_DEFAULTS.stagingFailures) this.stagingFailures.splice(0, 1)\n this.stagingFailures.push(failure)\n })\n this.store = new DeliveryQueueStore(resource, staging, options, entry => {\n if (entry.kind === 'event' && eventHasIntegrationEvidence(entry.item as ObservationEvent)) this.integration('dropped')\n })\n this.scheduler = new DeliveryQueueScheduler(this.store, resource, registrations, platform, resources)\n this.diagnosticsRing = new DiagnosticRing({\n ...(options.diagnosticMaxEvents === undefined ? {} : { maxEvents: options.diagnosticMaxEvents }),\n ...(options.diagnosticMaxBytes === undefined ? {} : { maxBytes: options.diagnosticMaxBytes }),\n })\n }\n\n openSpan(input: OpenObservationSpanInput): ObservationSpan {\n if (this.spanBackend === undefined) return createCoreSpan(input)\n try {\n const span = snapshotObservationSpan(this.spanBackend(input))\n if (span !== undefined && span.correlation.runId === input.runId) return span\n } catch { /* Contained as observation health below. */ }\n this.processorFailures = saturatingCounterAdd(this.processorFailures, 1)\n return createCoreSpan(input)\n }\n\n capture(event: ObservationEvent): CaptureReceipt {\n const admission = this.admitEvent(event)\n return eventReceipt(event.eventId, admission)\n }\n\n async checkpoint(event: ObservationEvent, signal?: AbortSignal): Promise<CaptureReceipt> {\n const admission = this.admitEvent(event)\n const captured = eventReceipt(event.eventId, admission)\n if (captured.status !== 'accepted' || this.mode === 'operational') return captured\n const entry = admission.entry\n if (entry === undefined) return rejectedEvent(event.eventId, 'exporter-unavailable')\n const delivery = await this.scheduler.checkpointRun(entry.runId, entry.sequence,\n this.deadline(), signal)\n return delivery.requiredComplete && delivery.reachedBoundary !== 'none'\n ? acceptedEvent(event.eventId, delivery.reachedBoundary)\n : rejectedEvent(event.eventId, this.sealed ? 'closed' : 'exporter-unavailable')\n }\n\n admitTerminal(record: RunTerminalRecord): QueueAdmission { return this.store.admitRunRecord(record) }\n\n async checkpointTerminal(record: RunTerminalRecord, signal?: AbortSignal): Promise<TerminalCheckpointResult> {\n const admission = this.admitTerminal(record)\n if (admission.status === 'closed') return terminalResult(record.runId, 'closed', 'none', 'closed')\n if (admission.status === 'rejected') return terminalResult(record.runId, 'rejected', 'none', 'capacity')\n if (this.mode === 'operational') return terminalResult(record.runId, 'accepted', 'none')\n const delivery = await this.scheduler.checkpointRun(record.runId, undefined,\n this.deadline(), signal)\n return delivery.requiredComplete && delivery.reachedBoundary !== 'none'\n ? terminalResult(record.runId, 'accepted', delivery.reachedBoundary, undefined, delivery)\n : terminalResult(record.runId, this.sealed ? 'closed' : 'rejected', 'none',\n this.sealed ? 'closed' : 'exporter-unavailable', delivery)\n }\n\n flush(signal?: AbortSignal): Promise<QueueFlushReport> {\n return this.scheduler.flush(this.deadline(), signal)\n }\n\n /** Runtime close supplies its one shared absolute deadline rather than a fresh flush budget. */\n flushUntil(deadlineAt: number): Promise<QueueFlushReport> {\n return this.scheduler.flush(deadlineAt)\n }\n\n diagnostics(): RuntimeDiagnosticSnapshot {\n return Object.freeze({ resource: this.resource, ...this.diagnosticsRing.snapshot(), observationHealth: this.health() })\n }\n\n health(): RuntimeObservationHealthSnapshot {\n const queue = this.store.snapshot(), delivery = this.scheduler.health()\n const failed = queue.criticalRejected > 0 || delivery.requiredFailure || delivery.flushTimeouts > 0\n const degraded = queue.evictedVerbose > 0 || queue.evictedNormal > 0 || this.processorFailures > 0\n || delivery.exporterFailures > 0 || this.stagingFailureCount > 0\n const state: RuntimeObservationHealthSnapshot['state'] = this.sealed ? 'closed' : failed ? 'failed' : degraded ? 'degraded' : 'healthy'\n const lastFailure = queue.criticalRejected > 0\n ? Object.freeze({ type: 'Error', message: 'Observation queue capacity exhausted', code: 'OBSERVABILITY_CAPTURE_REJECTED' })\n : delivery.flushTimeouts > 0\n ? Object.freeze({ type: 'Error', message: 'Observation flush timed out', code: 'OBSERVABILITY_FLUSH_TIMEOUT' })\n : this.processorFailures > 0\n ? Object.freeze({ type: 'Error', message: 'Observation processor did not complete', code: 'OBSERVATION_PROCESSOR_FAILED' })\n : delivery.exporterFailures > 0 || this.stagingFailureCount > 0\n ? Object.freeze({ type: 'Error', message: 'Observation exporter did not complete', code: 'OBSERVABILITY_EXPORT_FAILED' })\n : undefined\n return Object.freeze({ state, queuedEvents: queue.queuedItems, queuedBytes: queue.queuedBytes,\n accepted: queue.accepted, exported: delivery.exported,\n droppedVerbose: queue.evictedVerbose, droppedNormal: queue.evictedNormal,\n criticalRejected: queue.criticalRejected, processorFailures: this.processorFailures,\n exporterFailures: saturatingCounterAdd(delivery.exporterFailures, this.stagingFailureCount),\n flushTimeouts: delivery.flushTimeouts,\n ...(delivery.lastExportAt === undefined ? {} : { lastExportAt: delivery.lastExportAt }),\n ...(lastFailure === undefined ? {} : { lastFailure }),\n integrationEvidence: Object.freeze({ ...this.integrationEvidence }) })\n }\n\n logger(context?: RuntimeLoggerContext): SdkLogger {\n if (this.admissionClosed) return CLOSED_RUNTIME_LOGGER\n return createRuntimeLogger({ resource: this.resource, platform: this.platform, content: this.store.content,\n redactors: this.redactors, includeErrorStacks: this.includeErrorStacks,\n minimumLevel: this.minimumLogLevel, isClosed: () => this.admissionClosed,\n capture: event => this.capture(event), integration: outcome => this.integration(outcome) }, context)\n }\n\n /** Internal active-run view; callers cannot supply or replace correlation IDs. */\n correlatedLogger(correlation: CorrelationContext, context?: RuntimeLoggerContext): SdkLogger {\n if (this.admissionClosed) return CLOSED_RUNTIME_LOGGER\n return createCorrelatedRuntimeLogger({ resource: this.resource, platform: this.platform, content: this.store.content,\n redactors: this.redactors, includeErrorStacks: this.includeErrorStacks,\n minimumLevel: this.minimumLogLevel, isClosed: () => this.admissionClosed,\n capture: event => this.capture(event), integration: outcome => this.integration(outcome) }, correlation, context)\n }\n\n integrationEvidenceSnapshot(): Readonly<typeof this.integrationEvidence> {\n return Object.freeze({ ...this.integrationEvidence })\n }\n\n stagingFailureSnapshot(): readonly StagingFailure[] { return Object.freeze([...this.stagingFailures]) }\n\n observationDeadline(sharedDeadlineAt: number): number {\n return Math.min(sharedDeadlineAt, this.platform.monotonicNow() + this.shutdownTimeoutMs)\n }\n\n /** Reject capture and make every retained bound logger a no-op before the final drain. */\n stopAdmission(): void {\n if (this.admissionClosed) return\n this.admissionClosed = true\n this.scheduler.stopAdmission()\n }\n\n /** Final terminal transition after the close drain has settled or reached its deadline. */\n seal(): void {\n if (this.sealed) return\n this.stopAdmission()\n this.sealed = true\n this.scheduler.seal()\n }\n\n private admitEvent(event: ObservationEvent): QueueAdmission {\n let current: ObservationEvent\n try {\n const privacy = { content: this.store.content, redactors: this.redactors,\n includeErrorStacks: this.includeErrorStacks }\n current = sanitizeObservationEvent(event, privacy)\n for (const processor of this.processors) {\n const next = processor.transform(current)\n if (next === undefined) throw new TypeError('Observation processor returned no event')\n const safe = sanitizeObservationEvent(next, privacy)\n if (!sameEnvelope(current, safe)) throw new TypeError('Observation processor changed the event envelope')\n current = safe\n }\n } catch {\n this.processorFailures = saturatingCounterAdd(this.processorFailures, 1)\n return Object.freeze({ status: 'rejected', reason: 'processor-failed' })\n }\n const admission = this.store.admitEvent(current)\n if (admission.status === 'accepted' && admission.entry?.kind === 'event') {\n this.diagnosticsRing.record(admission.entry.item as ObservationEvent)\n }\n return admission\n }\n\n private deadline(): number { return this.platform.monotonicNow() + this.flushTimeoutMs }\n\n private integration(outcome: keyof typeof this.integrationEvidence): void {\n this.integrationEvidence[outcome] = saturatingCounterAdd(this.integrationEvidence[outcome], 1)\n }\n}\n\nfunction validateMode(mode: DeliveryMode, registrations: readonly RuntimeObservationExporterRegistration[]): void {\n if (mode !== 'operational' && mode !== 'reliable' && mode !== 'audit') throw new TypeError('Invalid observation delivery mode')\n if (mode === 'operational' && registrations.some(value => value.requirement === 'required')) {\n throw new TypeError('Operational observation exporters must be best-effort')\n }\n if (mode !== 'operational' && !registrations.some(value => value.requirement === 'required' && value.boundary !== 'none')) {\n throw new TypeError(`${mode} observation requires a durable required exporter`)\n }\n}\n\nfunction requiredBoundary(registrations: readonly RuntimeObservationExporterRegistration[]): ObservationBoundary {\n const values = registrations.filter(value => value.requirement === 'required').map(value => value.boundary)\n return values.reduce((left, right) => boundaryRank(left) <= boundaryRank(right) ? left : right)\n}\nfunction boundaryRank(value: ObservationBoundary): number { return value === 'remote-acknowledged' ? 2 : value === 'local-durable' ? 1 : 0 }\nfunction eventReceipt(eventId: string, admission: QueueAdmission): CaptureReceipt {\n if (admission.status === 'accepted' || admission.status === 'existing') return acceptedEvent(eventId, 'none')\n return rejectedEvent(eventId, admission.status === 'closed' ? 'closed'\n : admission.reason === 'processor-failed' ? 'processor-failed' : 'capacity')\n}\nfunction acceptedEvent(eventId: string, boundary: ObservationBoundary): CaptureReceipt {\n return Object.freeze({ eventId, status: 'accepted', durable: boundary !== 'none', boundary })\n}\nfunction rejectedEvent(\n eventId: string,\n reason: 'capacity' | 'closed' | 'processor-failed' | 'exporter-unavailable',\n): CaptureReceipt {\n return Object.freeze({ eventId, status: 'rejected', durable: false, boundary: 'none', reason })\n}\n\nfunction sameEnvelope(left: ObservationEvent, right: ObservationEvent): boolean {\n return left.eventId === right.eventId && left.sequence === right.sequence\n && left.name === right.name && left.phase === right.phase\n && left.occurredAt === right.occurredAt && left.monotonicMs === right.monotonicMs\n && left.priority === right.priority\n && JSON.stringify(left.resource) === JSON.stringify(right.resource)\n && JSON.stringify(left.correlation) === JSON.stringify(right.correlation)\n}\nfunction terminalResult(\n runId: string, status: TerminalCheckpointResult['status'], boundary: ObservationBoundary,\n reason?: TerminalCheckpointResult['reason'], delivery?: QueueFlushReport,\n): TerminalCheckpointResult {\n return Object.freeze({ runId, status, durable: status === 'accepted' && boundary !== 'none', boundary,\n ...(reason === undefined ? {} : { reason }), ...(delivery === undefined ? {} : { delivery }) })\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{checkPreflightAbort as e}from"./common/errors.js";import{captureExporterMethods as t,preflightExporterIdentities as n}from"./exporter/preflight.js";import{captureProviderMethods as r,preflightProviderIdentities as i}from"./provider/preflight.js";function a(a,o,s,c){e(c);let l=i(a,s,c),u=n(o,c),d=r(l,c),f=t(u,c);return Object.freeze({selection:l,providers:d,exporters:f})}export{a as preflightRuntimeCapabilities};
|
|
2
|
+
//# sourceMappingURL=preflight.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preflight.js","names":[],"sources":["../../src/composition/preflight.ts"],"sourcesContent":["import { checkPreflightAbort } from './common/errors.ts'\nimport { captureExporterMethods, preflightExporterIdentities } from './exporter/preflight.ts'\nimport type { RuntimeObservationExporterRegistration } from './exporter/types.ts'\nimport { captureProviderMethods, preflightProviderIdentities } from './provider/preflight.ts'\nimport type { CapturedProvider, ProviderSelection } from './provider/types.ts'\n\nexport interface RuntimeCapabilityPlan {\n readonly selection: ProviderSelection\n readonly providers: readonly CapturedProvider[]\n readonly exporters: readonly RuntimeObservationExporterRegistration[]\n}\n\n/** The whole runtime identity pass must finish before the first executable property is read. */\nexport function preflightRuntimeCapabilities(\n providers: unknown, exporters: unknown, defaultProvider?: unknown, signal?: AbortSignal,\n): RuntimeCapabilityPlan {\n checkPreflightAbort(signal)\n const providerPlan = preflightProviderIdentities(providers, defaultProvider, signal)\n const exporterPlan = preflightExporterIdentities(exporters, signal)\n const capturedProviders = captureProviderMethods(providerPlan, signal)\n const capturedExporters = captureExporterMethods(exporterPlan, signal)\n return Object.freeze({ selection: providerPlan, providers: capturedProviders, exporters: capturedExporters })\n}\n"],"mappings":"6PAaA,SAAgB,EACd,EAAoB,EAAoB,EAA2B,EAC5C,CACvB,EAAoB,CAAM,EAC1B,IAAM,EAAe,EAA4B,EAAW,EAAiB,CAAM,EAC7E,EAAe,EAA4B,EAAW,CAAM,EAC5D,EAAoB,EAAuB,EAAc,CAAM,EAC/D,EAAoB,EAAuB,EAAc,CAAM,EACrE,OAAO,OAAO,OAAO,CAAE,UAAW,EAAc,UAAW,EAAmB,UAAW,CAAkB,CAAC,CAC9G"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{AgentSdkError as e}from"../../errors/agent-sdk-error.js";import{arrayData as t,boundedText as n}from"../../capability/common/data.js";import{beginCoreCapabilityOperation as r}from"../../platform/capability-operation.js";import{COMPOSITION_LIMITS as i}from"../../capability/common/config.js";import{AgentRuntimeConstructionError as a,checkPreflightAbort as o}from"../common/errors.js";const s=()=>new e(`Provider registration is outside setup or cleanup`,`PROVIDER_REGISTRAR_SEALED`),c=()=>new e(`Provider registration must cover its declared routes exactly once`,`PROVIDER_CLAIMS_INVALID`);function l(e){if((typeof e!=`object`||!e)&&typeof e!=`function`)return!1;let t;try{t=Reflect.get(e,`then`)}catch{return!0}return typeof t==`function`&&(new Promise((n,r)=>{Reflect.apply(t,e,[n,r])}).catch(()=>void 0),!0)}function u(e,t){return Object.freeze({kind:`provider-registration`,id:e,status:t===void 0?`closed`:t===`CAPABILITY_CLEANUP_TIMEOUT`?`timed-out`:`failed`,...t===void 0?{}:{error:Object.freeze({code:t,stage:`provider-cleanup`,message:`Provider cleanup did not complete synchronously`})}})}function d(e,d,f,p,m){o(p);let h=[];for(let[g,_]of d.entries()){let d=r(f.child({providerIndex:g}),`core-provider`,`setup`),v=`setup`,y=`CAPABILITY_STARTUP_FAILED`,b,x,S=!1,C=!1,w,T,E=`provider-${g}`,D=()=>{if(S)return b??u(E);C||(T??=p?.aborted===!0),S=!0,v=`cleanup`;let e;try{C||(w??=m?.rollback()),x!==void 0&&(w!==void 0&&w.now()>=w.at?e=`CAPABILITY_CLEANUP_TIMEOUT`:l(x())&&(e=`PROVIDER_CLEANUP_ASYNC_UNSUPPORTED`))}catch{e=`CAPABILITY_CLEANUP_FAILED`}finally{v=`closed`}let t=u(E,e);return b=t,t};try{if(o(p),m!==void 0&&m.startup.now()>=m.startup.at)throw y=`CAPABILITY_STARTUP_TIMEOUT`,Error(`Provider startup deadline exhausted`);let r=e.install({id:_.id,displayName:_.displayName,family:_.family,setup(e){let r=[],a=()=>{if(v!==`setup`)throw s();o(p)},u=()=>{if(v!==`setup`&&v!==`cleanup`&&v!==`closed`)throw s()},m=(e,o)=>{a();let s=t(e,i.routesPerProvider).map(e=>n(e,i.identityBytes)),l=new Set(r.filter(e=>e.active&&e!==o).flatMap(e=>e.routes));for(let e of s){if(!_.routes.includes(e)||l.has(e))throw c();l.add(e)}return Object.freeze(s)},h=Object.freeze({logger:f,registerAdapter(t,n){let i=m(t);if(i.length===0)throw c();let a=e.registerAdapter(i,n),o={active:!0,routes:i};r.push(o);let l=(()=>{u(),o.active&&=(a(),!1)});return l.replace=e=>{if(!o.active)throw s();let t=m(e,o);a.replace(t),o.routes=t},Object.freeze(l)},use(t){a();let n=e.use(t),r=!1;return()=>{u(),!r&&(r=!0,n())}}});try{let e=_.setup(h);if(v=`sealed`,x=typeof e==`function`?e:void 0,l(e))throw y=`PROVIDER_SETUP_ASYNC_UNSUPPORTED`,Error(`Asynchronous provider setup is unsupported`);if(e!==void 0&&typeof e!=`function`)throw Error(`Invalid provider setup result`);o(p);let t=r.filter(e=>e.active).flatMap(e=>e.routes);if(t.length!==_.routes.length||_.routes.some(e=>!t.includes(e)))throw c();return d.success(),()=>{if(D().status!==`closed`)throw Error(`Provider cleanup did not complete`)}}catch(e){throw p?.aborted===!0?d.abort():d.fail(e),T=p?.aborted===!0,v=`sealed`,x!==void 0&&(b=D()),e}finally{v===`setup`&&(v=`sealed`)}}});C=!0;let a;h.push(Object.freeze({id:_.id,close(e){if(a!==void 0)return a;w=e,a=u(E);try{r()}catch{a=b??u(E,`CAPABILITY_CLEANUP_FAILED`)}return a}})),o(p)}catch(e){let t=T??p?.aborted===!0;t?d.abort():d.fail(e);let n=[];b!==void 0&&n.push(b);let r=m?.rollback();for(let e of[...h].reverse())n.push(e.close(r));throw new a({failureCode:t?`CAPABILITY_STARTUP_ABORTED`:y,stage:`provider-setup`,reason:t?`aborted`:y===`CAPABILITY_STARTUP_TIMEOUT`?`timed-out`:`failed`,component:{kind:`provider-plugin`,id:E},cleanup:n})}}return Object.freeze(h)}export{d as activateProviders};
|
|
2
|
+
//# sourceMappingURL=activation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"activation.js","names":[],"sources":["../../../src/composition/provider/activation.ts"],"sourcesContent":["import { AgentSdkError } from '../../errors/agent-sdk-error.ts'\nimport type { ModelAdapter } from '../../contract/adapter.ts'\nimport type { SdkLogger } from '../../logging/types.ts'\nimport type { AdapterRegistrationHandle, ModelProviderRegistrar, StreamMiddleware } from '../../plugin/provider-plugin.ts'\nimport type { ModelRegistry } from '../../runtime/registry.ts'\nimport { COMPOSITION_LIMITS } from '../common/config.ts'\nimport { arrayData, boundedText } from '../common/data.ts'\nimport { AgentRuntimeConstructionError, checkPreflightAbort } from '../common/errors.ts'\nimport type { RuntimeComponentCloseReport, RuntimeConstructionFailureCode } from '../common/errors.ts'\nimport type { CapturedProvider } from './types.ts'\nimport { beginCoreCapabilityOperation } from '../logging/capability.ts'\n\ninterface RouteRegistration {\n active: boolean\n routes: readonly string[]\n}\n\nexport interface RuntimeProviderRegistrar extends ModelProviderRegistrar {\n readonly logger: SdkLogger\n}\n\nexport interface ProviderRegistration {\n readonly id: string\n close(deadline?: ProviderCleanupDeadline): RuntimeComponentCloseReport\n}\n\nexport interface ProviderCleanupDeadline {\n readonly at: number\n readonly now: () => number\n}\n\nexport interface ProviderActivationDeadlines {\n readonly startup: ProviderCleanupDeadline\n readonly rollback: () => ProviderCleanupDeadline\n}\n\nconst lifecycleError = () => new AgentSdkError('Provider registration is outside setup or cleanup', 'PROVIDER_REGISTRAR_SEALED')\nconst claimError = () => new AgentSdkError('Provider registration must cover its declared routes exactly once', 'PROVIDER_CLAIMS_INVALID')\n\n/** Reject and observe asynchronous returns without reading a then property a second time. */\nfunction asynchronous(value: unknown): boolean {\n if ((typeof value !== 'object' || value === null) && typeof value !== 'function') return false\n let then: unknown\n try { then = Reflect.get(value, 'then') } catch { return true }\n if (typeof then !== 'function') return false\n void new Promise((resolve, reject) => { Reflect.apply(then, value, [resolve, reject]) }).catch(() => undefined)\n return true\n}\n\ntype CleanupCode = 'CAPABILITY_CLEANUP_FAILED' | 'PROVIDER_CLEANUP_ASYNC_UNSUPPORTED' | 'CAPABILITY_CLEANUP_TIMEOUT'\n\nfunction closeRow(id: string, code?: CleanupCode): RuntimeComponentCloseReport {\n return Object.freeze({\n kind: 'provider-registration', id,\n status: code === undefined ? 'closed' : code === 'CAPABILITY_CLEANUP_TIMEOUT' ? 'timed-out' : 'failed',\n ...(code !== undefined ? { error: Object.freeze({\n code, stage: 'provider-cleanup', message: 'Provider cleanup did not complete synchronously',\n }) } : {}),\n })\n}\n\n/** Activate already-captured providers. The caller owns bus/exporter startup and the overall deadline. */\nexport function activateProviders(\n registry: ModelRegistry,\n providers: readonly CapturedProvider[],\n logger: SdkLogger,\n signal?: AbortSignal,\n deadlines?: ProviderActivationDeadlines,\n): readonly ProviderRegistration[] {\n checkPreflightAbort(signal)\n const installed: ProviderRegistration[] = []\n for (const [index, provider] of providers.entries()) {\n const setupOperation = beginCoreCapabilityOperation(\n logger.child({ providerIndex: index }), 'core-provider', 'setup',\n )\n let phase: 'setup' | 'sealed' | 'cleanup' | 'closed' = 'setup'\n let failureCode: RuntimeConstructionFailureCode = 'CAPABILITY_STARTUP_FAILED'\n let failureCleanup: RuntimeComponentCloseReport | undefined\n let cleanup: (() => void) | undefined\n let cleaned = false\n let committed = false\n let cleanupDeadline: ProviderCleanupDeadline | undefined\n let failureWasAbort: boolean | undefined\n // Support reports do not echo an arbitrary user-supplied identity.\n const reportId = `provider-${index}`\n const finishCleanup = (): RuntimeComponentCloseReport => {\n if (cleaned) return failureCleanup ?? closeRow(reportId)\n if (!committed) failureWasAbort ??= signal?.aborted === true\n cleaned = true\n phase = 'cleanup'\n let code: CleanupCode | undefined\n try {\n if (!committed) cleanupDeadline ??= deadlines?.rollback()\n if (cleanup !== undefined) {\n if (cleanupDeadline !== undefined && cleanupDeadline.now() >= cleanupDeadline.at) code = 'CAPABILITY_CLEANUP_TIMEOUT'\n else if (asynchronous(cleanup())) code = 'PROVIDER_CLEANUP_ASYNC_UNSUPPORTED'\n }\n } catch { code = 'CAPABILITY_CLEANUP_FAILED' }\n finally { phase = 'closed' }\n const row = closeRow(reportId, code)\n failureCleanup = row\n return row\n }\n try {\n checkPreflightAbort(signal)\n if (deadlines !== undefined && deadlines.startup.now() >= deadlines.startup.at) {\n failureCode = 'CAPABILITY_STARTUP_TIMEOUT'\n throw new Error('Provider startup deadline exhausted')\n }\n const dispose = registry.install({\n id: provider.id, displayName: provider.displayName, family: provider.family,\n setup(upstream) {\n const registrations: RouteRegistration[] = []\n const setupOnly = (): void => {\n if (phase !== 'setup') throw lifecycleError()\n checkPreflightAbort(signal)\n }\n const disposeOnly = (): void => {\n if (phase !== 'setup' && phase !== 'cleanup' && phase !== 'closed') throw lifecycleError()\n }\n const routesFor = (input: unknown, current?: RouteRegistration): readonly string[] => {\n setupOnly()\n const routes = arrayData(input, COMPOSITION_LIMITS.routesPerProvider)\n .map(route => boundedText(route, COMPOSITION_LIMITS.identityBytes))\n const occupied = new Set(registrations.filter(row => row.active && row !== current).flatMap(row => row.routes))\n for (const route of routes) {\n if (!provider.routes.includes(route) || occupied.has(route)) throw claimError()\n occupied.add(route)\n }\n return Object.freeze(routes)\n }\n const registrar: RuntimeProviderRegistrar = Object.freeze({\n logger,\n registerAdapter(input: readonly string[], adapter: ModelAdapter) {\n const routes = routesFor(input)\n if (routes.length === 0) throw claimError()\n const handle = upstream.registerAdapter(routes, adapter)\n const row: RouteRegistration = { active: true, routes }\n registrations.push(row)\n const release = (() => {\n disposeOnly()\n if (!row.active) return\n handle()\n row.active = false\n }) as AdapterRegistrationHandle\n release.replace = next => {\n if (!row.active) throw lifecycleError()\n const replacement = routesFor(next, row)\n handle.replace(replacement)\n row.routes = replacement\n }\n return Object.freeze(release)\n },\n use(middleware: StreamMiddleware) {\n setupOnly()\n const release = upstream.use(middleware)\n let released = false\n return () => {\n disposeOnly()\n if (released) return\n released = true\n release()\n }\n },\n })\n try {\n const result = provider.setup(registrar)\n phase = 'sealed'\n cleanup = typeof result === 'function' ? result : undefined\n if (asynchronous(result)) {\n failureCode = 'PROVIDER_SETUP_ASYNC_UNSUPPORTED'\n throw new Error('Asynchronous provider setup is unsupported')\n }\n if (result !== undefined && typeof result !== 'function') throw new Error('Invalid provider setup result')\n checkPreflightAbort(signal)\n const routes = registrations.filter(row => row.active).flatMap(row => row.routes)\n if (routes.length !== provider.routes.length || provider.routes.some(route => !routes.includes(route))) {\n throw claimError()\n }\n setupOperation.success()\n return () => {\n const row = finishCleanup()\n if (row.status !== 'closed') throw new Error('Provider cleanup did not complete')\n }\n } catch (error) {\n if (signal?.aborted === true) setupOperation.abort(); else setupOperation.fail(error)\n failureWasAbort = signal?.aborted === true\n phase = 'sealed'\n if (cleanup !== undefined) failureCleanup = finishCleanup()\n throw error\n } finally {\n if (phase === 'setup') phase = 'sealed'\n }\n },\n })\n committed = true\n let report: RuntimeComponentCloseReport | undefined\n installed.push(Object.freeze({\n id: provider.id,\n close(deadline?: ProviderCleanupDeadline) {\n if (report !== undefined) return report\n cleanupDeadline = deadline\n // Prevent recursive disposal while user cleanup is executing.\n report = closeRow(reportId)\n try { dispose() } catch { report = failureCleanup ?? closeRow(reportId, 'CAPABILITY_CLEANUP_FAILED') }\n return report\n },\n }))\n checkPreflightAbort(signal)\n } catch (error: unknown) {\n const aborted = failureWasAbort ?? signal?.aborted === true\n if (aborted) setupOperation.abort(); else setupOperation.fail(error)\n const cleanupRows: RuntimeComponentCloseReport[] = []\n if (failureCleanup !== undefined) cleanupRows.push(failureCleanup)\n const deadline = deadlines?.rollback()\n for (const registration of [...installed].reverse()) cleanupRows.push(registration.close(deadline))\n throw new AgentRuntimeConstructionError({\n failureCode: aborted ? 'CAPABILITY_STARTUP_ABORTED' : failureCode,\n stage: 'provider-setup', reason: aborted ? 'aborted' : failureCode === 'CAPABILITY_STARTUP_TIMEOUT' ? 'timed-out' : 'failed',\n component: { kind: 'provider-plugin', id: reportId }, cleanup: cleanupRows,\n })\n }\n }\n return Object.freeze(installed)\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ComposableModelProviderPlugin, ModelProviderPluginDefinition } from "./types.js";
|
|
2
|
+
//#region src/composition/provider/definition.d.ts
|
|
3
|
+
/** Create an inert plugin wrapper; setup and cleanup remain deferred to runtime activation. */
|
|
4
|
+
declare function defineModelProviderPlugin(definition: ModelProviderPluginDefinition): ComposableModelProviderPlugin;
|
|
5
|
+
//#endregion
|
|
6
|
+
export { defineModelProviderPlugin };
|
|
7
|
+
//# sourceMappingURL=definition.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"definition.d.ts","names":[],"sources":["../../../src/composition/provider/definition.ts"],"mappings":";;;iBAagB,0BACd,YAAY,gCACX"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{arrayData as e,boundedText as t,capturedMethod as n,objectValue as r,ownData as i}from"../../capability/common/data.js";import{COMPOSITION_LIMITS as a}from"../../capability/common/config.js";import{captureModelTarget as o}from"./model-selection.js";import"./types.js";function s(s){let l=r(s),u=t(i(l,`id`),a.identityBytes),d=t(i(l,`displayName`),a.displayNameBytes),f=i(l,`family`,!1),p=f===void 0?void 0:t(f,a.identityBytes),m=e(i(l,`routes`),a.routesPerProvider).map(e=>t(e,a.identityBytes));if(m.length===0||new Set(m).size!==m.length)throw TypeError(`Provider route claims must be non-empty and unique`);let h=i(l,`defaultModel`,!1),g=h===void 0?void 0:o(h,!1);if(g!==void 0&&!m.includes(g.provider))throw TypeError(`Provider default model route is not claimed`);let _=n(l,`setup`),v=Object.freeze(m),y=e=>{let t=c(e),n=Object.freeze({logger:t,registerAdapter(t,n=v){return e.registerAdapter(n,t)},use(t){return e.use(t)}}),r=_(n);if(r!==void 0)return typeof r==`function`?()=>{r()}:r};return Object.freeze({kind:`model-provider-plugin`,apiVersion:1,id:u,displayName:d,routes:v,...p===void 0?{}:{family:p},...g===void 0?{}:{defaultModel:g},setup:y})}function c(e){let t=Reflect.get(e,`logger`);if(t===void 0||typeof t.child!=`function`||typeof t.info!=`function`||typeof t.error!=`function`)throw TypeError(`Composable provider setup requires a runtime-bound logger`);return t}export{s as defineModelProviderPlugin};
|
|
2
|
+
//# sourceMappingURL=definition.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"definition.js","names":[],"sources":["../../../src/composition/provider/definition.ts"],"sourcesContent":["import type { ModelAdapter } from '../../contract/adapter.ts'\nimport type { SdkLogger } from '../../logging/types.ts'\nimport type { ModelProviderRegistrar, StreamMiddleware } from '../../plugin/provider-plugin.ts'\nimport { COMPOSITION_LIMITS } from '../common/config.ts'\nimport { arrayData, boundedText, capturedMethod, objectValue, ownData } from '../common/data.ts'\nimport { captureModelTarget } from './model-selection.ts'\nimport {\n PROVIDER_PLUGIN_API_VERSION, type ComposableModelProviderPlugin,\n type ComposableModelProviderRegistrar, type ModelProviderPluginDefinition,\n type ProviderPluginCleanupDefinition,\n} from './types.ts'\n\n/** Create an inert plugin wrapper; setup and cleanup remain deferred to runtime activation. */\nexport function defineModelProviderPlugin(\n definition: ModelProviderPluginDefinition,\n): ComposableModelProviderPlugin {\n const source = objectValue(definition)\n const id = boundedText(ownData(source, 'id'), COMPOSITION_LIMITS.identityBytes)\n const displayName = boundedText(ownData(source, 'displayName'), COMPOSITION_LIMITS.displayNameBytes)\n const familyValue = ownData(source, 'family', false)\n const family = familyValue === undefined ? undefined\n : boundedText(familyValue, COMPOSITION_LIMITS.identityBytes)\n const routes = arrayData(ownData(source, 'routes'), COMPOSITION_LIMITS.routesPerProvider)\n .map(route => boundedText(route, COMPOSITION_LIMITS.identityBytes))\n if (routes.length === 0 || new Set(routes).size !== routes.length) {\n throw new TypeError('Provider route claims must be non-empty and unique')\n }\n const defaultValue = ownData(source, 'defaultModel', false)\n const defaultModel = defaultValue === undefined ? undefined : captureModelTarget(defaultValue, false)\n if (defaultModel !== undefined && !routes.includes(defaultModel.provider)) {\n throw new TypeError('Provider default model route is not claimed')\n }\n const authorSetup = capturedMethod<\n [ComposableModelProviderRegistrar], undefined | ProviderPluginCleanupDefinition\n >(source, 'setup')\n const claims = Object.freeze(routes)\n const setup = (registrar: ModelProviderRegistrar): void | (() => void) => {\n const logger = boundLogger(registrar)\n const scoped: ComposableModelProviderRegistrar = Object.freeze({\n logger,\n registerAdapter(adapter: ModelAdapter, selected: readonly string[] = claims) {\n return registrar.registerAdapter(selected, adapter)\n },\n use(middleware: StreamMiddleware) { return registrar.use(middleware) },\n })\n const cleanup = authorSetup(scoped)\n if (cleanup === undefined) return\n if (typeof cleanup !== 'function') return cleanup as never\n return () => { cleanup() }\n }\n return Object.freeze({\n kind: 'model-provider-plugin', apiVersion: PROVIDER_PLUGIN_API_VERSION,\n id, displayName, routes: claims, ...(family === undefined ? {} : { family }),\n ...(defaultModel === undefined ? {} : { defaultModel }), setup,\n })\n}\n\nfunction boundLogger(registrar: ModelProviderRegistrar): SdkLogger {\n const logger = Reflect.get(registrar, 'logger') as Partial<SdkLogger> | undefined\n if (logger === undefined || typeof logger.child !== 'function'\n || typeof logger.info !== 'function' || typeof logger.error !== 'function') {\n throw new TypeError('Composable provider setup requires a runtime-bound logger')\n }\n return logger as SdkLogger\n}\n"],"mappings":"mRAaA,SAAgB,EACd,EAC+B,CAC/B,IAAM,EAAS,EAAY,CAAU,EAC/B,EAAK,EAAY,EAAQ,EAAQ,IAAI,EAAG,EAAmB,aAAa,EACxE,EAAc,EAAY,EAAQ,EAAQ,aAAa,EAAG,EAAmB,gBAAgB,EAC7F,EAAc,EAAQ,EAAQ,SAAU,EAAK,EAC7C,EAAS,IAAgB,IAAA,GAAY,IAAA,GACvC,EAAY,EAAa,EAAmB,aAAa,EACvD,EAAS,EAAU,EAAQ,EAAQ,QAAQ,EAAG,EAAmB,iBAAiB,CAAC,CACtF,IAAI,GAAS,EAAY,EAAO,EAAmB,aAAa,CAAC,EACpE,GAAI,EAAO,SAAW,GAAK,IAAI,IAAI,CAAM,CAAC,CAAC,OAAS,EAAO,OACzD,MAAU,UAAU,oDAAoD,EAE1E,IAAM,EAAe,EAAQ,EAAQ,eAAgB,EAAK,EACpD,EAAe,IAAiB,IAAA,GAAY,IAAA,GAAY,EAAmB,EAAc,EAAK,EACpG,GAAI,IAAiB,IAAA,IAAa,CAAC,EAAO,SAAS,EAAa,QAAQ,EACtE,MAAU,UAAU,6CAA6C,EAEnE,IAAM,EAAc,EAElB,EAAQ,OAAO,EACX,EAAS,OAAO,OAAO,CAAM,EAC7B,EAAS,GAA2D,CACxE,IAAM,EAAS,EAAY,CAAS,EAC9B,EAA2C,OAAO,OAAO,CAC7D,SACA,gBAAgB,EAAuB,EAA8B,EAAQ,CAC3E,OAAO,EAAU,gBAAgB,EAAU,CAAO,CACpD,EACA,IAAI,EAA8B,CAAE,OAAO,EAAU,IAAI,CAAU,CAAE,CACvE,CAAC,EACK,EAAU,EAAY,CAAM,EAC9B,OAAY,IAAA,GAEhB,OADI,OAAO,GAAY,eACV,CAAE,EAAQ,CAAE,EADiB,CAE5C,EACA,OAAO,OAAO,OAAO,CACnB,KAAM,wBAAyB,WAAA,EAC/B,KAAI,cAAa,OAAQ,EAAQ,GAAI,IAAW,IAAA,GAAY,CAAC,EAAI,CAAE,QAAO,EAC1E,GAAI,IAAiB,IAAA,GAAY,CAAC,EAAI,CAAE,cAAa,EAAI,OAC3D,CAAC,CACH,CAEA,SAAS,EAAY,EAA8C,CACjE,IAAM,EAAS,QAAQ,IAAI,EAAW,QAAQ,EAC9C,GAAI,IAAW,IAAA,IAAa,OAAO,EAAO,OAAU,YAC/C,OAAO,EAAO,MAAS,YAAc,OAAO,EAAO,OAAU,WAChE,MAAU,UAAU,2DAA2D,EAEjF,OAAO,CACT"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{AgentSdkError as e}from"../../errors/agent-sdk-error.js";import{boundedText as t,objectValue as n,ownData as r}from"../../capability/common/data.js";import{COMPOSITION_LIMITS as i,MODEL_BINDING_ERROR_CODES as a}from"../../capability/common/config.js";function o(e,a){let o=n(e);if(Reflect.ownKeys(o).some(e=>e!==`provider`&&e!==`id`))throw TypeError(`Model target contains unsupported fields`);let s=t(r(o,`provider`),i.identityBytes),c=Object.getOwnPropertyDescriptor(o,`id`);if(c!==void 0&&!(`value`in c))throw TypeError(`Model ID must be data`);let l=c===void 0&&a?void 0:t(c?.value,i.modelIdBytes);return Object.freeze({provider:s,...l===void 0?{}:{id:l}})}function s(t,n){let r;try{r=n===void 0?void 0:o(n,!0)}catch{throw new e(`Agent model target is invalid`,a.INVALID)}let i=r?.provider??t.defaultProvider;if(i!==void 0){let n=t.providers.find(e=>e.routes.includes(i));if(n===void 0)throw new e(`Agent model route is unavailable`,a.UNKNOWN_ROUTE);if(r?.id!==void 0)return Object.freeze({provider:i,id:r.id});if(n.defaultModel?.provider===i)return Object.freeze({...n.defaultModel});throw new e(`Selected route has no configured model default`,a.MISSING_DEFAULT)}let s=t.providers.flatMap(e=>e.defaultModel===void 0?[]:[e.defaultModel]);if(s.length===0)throw new e(`Agent model requires an explicit target or default`,a.MISSING_DEFAULT);if(s.length!==1)throw new e(`Agent model defaults are ambiguous`,a.AMBIGUOUS_DEFAULT);return Object.freeze({...s[0]})}function c(e){return Object.freeze(e.providers.flatMap(e=>e.routes.map(t=>Object.freeze({id:t,route:t,name:e.displayName,pluginId:e.id,family:e.family,...e.defaultModel?.provider===t?{defaultModel:Object.freeze({...e.defaultModel})}:{}}))))}export{o as captureModelTarget,c as providerTopology,s as resolveAgentModel};
|
|
2
|
+
//# sourceMappingURL=model-selection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-selection.js","names":[],"sources":["../../../src/composition/provider/model-selection.ts"],"sourcesContent":["import { AgentSdkError } from '../../errors/agent-sdk-error.ts'\nimport { COMPOSITION_LIMITS, MODEL_BINDING_ERROR_CODES } from '../common/config.ts'\nimport { boundedText, objectValue, ownData } from '../common/data.ts'\nimport type { ModelTarget, ProviderSelection, RuntimeProviderInfo } from './types.ts'\n\nexport function captureModelTarget(value: unknown, allowRouteOnly: false): ModelTarget\nexport function captureModelTarget(value: unknown, allowRouteOnly: true): { readonly provider: string; readonly id?: string }\nexport function captureModelTarget(value: unknown, allowRouteOnly: boolean) {\n const input = objectValue(value)\n if (Reflect.ownKeys(input).some(key => key !== 'provider' && key !== 'id')) {\n throw new TypeError('Model target contains unsupported fields')\n }\n const provider = boundedText(ownData(input, 'provider'), COMPOSITION_LIMITS.identityBytes)\n const descriptor = Object.getOwnPropertyDescriptor(input, 'id')\n if (descriptor !== undefined && !('value' in descriptor)) throw new TypeError('Model ID must be data')\n const id = descriptor === undefined && allowRouteOnly\n ? undefined : boundedText(descriptor?.value, COMPOSITION_LIMITS.modelIdBytes)\n return Object.freeze({ provider, ...(id === undefined ? {} : { id }) })\n}\n\n/** No discovery or error-time failover: only explicit targets and captured omission defaults. */\nexport function resolveAgentModel(selection: ProviderSelection, input?: unknown): ModelTarget {\n let target: { readonly provider: string; readonly id?: string } | undefined\n try { target = input === undefined ? undefined : captureModelTarget(input, true) }\n catch { throw new AgentSdkError('Agent model target is invalid', MODEL_BINDING_ERROR_CODES.INVALID) }\n const route = target?.provider ?? selection.defaultProvider\n if (route !== undefined) {\n const owner = selection.providers.find(provider => provider.routes.includes(route))\n if (owner === undefined) throw new AgentSdkError('Agent model route is unavailable', MODEL_BINDING_ERROR_CODES.UNKNOWN_ROUTE)\n if (target?.id !== undefined) return Object.freeze({ provider: route, id: target.id })\n if (owner.defaultModel?.provider === route) return Object.freeze({ ...owner.defaultModel })\n throw new AgentSdkError('Selected route has no configured model default', MODEL_BINDING_ERROR_CODES.MISSING_DEFAULT)\n }\n const defaults = selection.providers.flatMap(provider => provider.defaultModel === undefined ? [] : [provider.defaultModel])\n if (defaults.length === 0) throw new AgentSdkError('Agent model requires an explicit target or default', MODEL_BINDING_ERROR_CODES.MISSING_DEFAULT)\n if (defaults.length !== 1) throw new AgentSdkError('Agent model defaults are ambiguous', MODEL_BINDING_ERROR_CODES.AMBIGUOUS_DEFAULT)\n return Object.freeze({ ...defaults[0]! })\n}\n\nexport function providerTopology(selection: ProviderSelection): readonly RuntimeProviderInfo[] {\n return Object.freeze(selection.providers.flatMap(provider => provider.routes.map(route => Object.freeze({\n id: route, route, name: provider.displayName, pluginId: provider.id, family: provider.family,\n ...(provider.defaultModel?.provider === route ? { defaultModel: Object.freeze({ ...provider.defaultModel }) } : {}),\n }))))\n}\n"],"mappings":"kQAOA,SAAgB,EAAmB,EAAgB,EAAyB,CAC1E,IAAM,EAAQ,EAAY,CAAK,EAC/B,GAAI,QAAQ,QAAQ,CAAK,CAAC,CAAC,KAAK,GAAO,IAAQ,YAAc,IAAQ,IAAI,EACvE,MAAU,UAAU,0CAA0C,EAEhE,IAAM,EAAW,EAAY,EAAQ,EAAO,UAAU,EAAG,EAAmB,aAAa,EACnF,EAAa,OAAO,yBAAyB,EAAO,IAAI,EAC9D,GAAI,IAAe,IAAA,IAAa,EAAE,UAAW,GAAa,MAAU,UAAU,uBAAuB,EACrG,IAAM,EAAK,IAAe,IAAA,IAAa,EACnC,IAAA,GAAY,EAAY,GAAY,MAAO,EAAmB,YAAY,EAC9E,OAAO,OAAO,OAAO,CAAE,WAAU,GAAI,IAAO,IAAA,GAAY,CAAC,EAAI,CAAE,IAAG,CAAG,CAAC,CACxE,CAGA,SAAgB,EAAkB,EAA8B,EAA8B,CAC5F,IAAI,EACJ,GAAI,CAAE,EAAS,IAAU,IAAA,GAAY,IAAA,GAAY,EAAmB,EAAO,EAAI,CAAE,MAC3E,CAAE,MAAM,IAAI,EAAc,gCAAiC,EAA0B,OAAO,CAAE,CACpG,IAAM,EAAQ,GAAQ,UAAY,EAAU,gBAC5C,GAAI,IAAU,IAAA,GAAW,CACvB,IAAM,EAAQ,EAAU,UAAU,KAAK,GAAY,EAAS,OAAO,SAAS,CAAK,CAAC,EAClF,GAAI,IAAU,IAAA,GAAW,MAAM,IAAI,EAAc,mCAAoC,EAA0B,aAAa,EAC5H,GAAI,GAAQ,KAAO,IAAA,GAAW,OAAO,OAAO,OAAO,CAAE,SAAU,EAAO,GAAI,EAAO,EAAG,CAAC,EACrF,GAAI,EAAM,cAAc,WAAa,EAAO,OAAO,OAAO,OAAO,CAAE,GAAG,EAAM,YAAa,CAAC,EAC1F,MAAM,IAAI,EAAc,iDAAkD,EAA0B,eAAe,CACrH,CACA,IAAM,EAAW,EAAU,UAAU,QAAQ,GAAY,EAAS,eAAiB,IAAA,GAAY,CAAC,EAAI,CAAC,EAAS,YAAY,CAAC,EAC3H,GAAI,EAAS,SAAW,EAAG,MAAM,IAAI,EAAc,qDAAsD,EAA0B,eAAe,EAClJ,GAAI,EAAS,SAAW,EAAG,MAAM,IAAI,EAAc,qCAAsC,EAA0B,iBAAiB,EACpI,OAAO,OAAO,OAAO,CAAE,GAAG,EAAS,EAAI,CAAC,CAC1C,CAEA,SAAgB,EAAiB,EAA8D,CAC7F,OAAO,OAAO,OAAO,EAAU,UAAU,QAAQ,GAAY,EAAS,OAAO,IAAI,GAAS,OAAO,OAAO,CACtG,GAAI,EAAO,QAAO,KAAM,EAAS,YAAa,SAAU,EAAS,GAAI,OAAQ,EAAS,OACtF,GAAI,EAAS,cAAc,WAAa,EAAQ,CAAE,aAAc,OAAO,OAAO,CAAE,GAAG,EAAS,YAAa,CAAC,CAAE,EAAI,CAAC,CACnH,CAAC,CAAC,CAAC,CAAC,CACN"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{arrayData as e,boundedText as t,capturedMethod as n,objectValue as r,ownData as i}from"../../capability/common/data.js";import{capabilityIdentityConflict as a}from"../../errors/capability-identity.js";import{COMPOSITION_LIMITS as o}from"../../capability/common/config.js";import{checkPreflightAbort as s,invalidPreflight as c}from"../common/errors.js";import{captureModelTarget as l}from"./model-selection.js";import"./types.js";const u=new WeakMap,d=new WeakMap;function f(e,t,n){return c(e===`provider-route`?`PROVIDER_ROUTE_CONFLICT`:`CAPABILITY_ID_CONFLICT`,a(e,t,n))}function p(n){let r=t(i(n,`id`),o.identityBytes),a=t(i(n,`displayName`),o.displayNameBytes),s=i(n,`family`,!1),u=s===void 0?r:t(s,o.identityBytes),d=e(i(n,`routes`),o.routesPerProvider).map(e=>t(e,o.identityBytes));if(d.length===0)throw c();let f=i(n,`defaultModel`,!1),p=f===void 0?void 0:l(f,!1);if(p!==void 0&&!d.includes(p.provider))throw c();return Object.freeze({id:r,displayName:a,family:u,routes:Object.freeze(d),...p===void 0?{}:{defaultModel:p}})}function m(n,a,l){s(l);let d=new Set,m=e=>{throw d.add(e),e};try{let d=e(n,o.providers).map(r),h=[],g=new Map,_=new Map;for(let[e,t]of d.entries()){s(l),i(t,`kind`,!1)!==`model-provider-plugin`&&m(c(`CAPABILITY_KIND_MISMATCH`)),i(t,`apiVersion`,!1)!==1&&m(c(`CAPABILITY_API_UNSUPPORTED`));let n=p(t),r=g.get(n.id);r!==void 0&&m(f(`provider-plugin-id`,r,e)),g.set(n.id,e);for(let t of n.routes){let n=_.get(t);n!==void 0&&m(f(`provider-route`,n,e)),_.set(t,e)}h.push(n)}let v=a===void 0?void 0:t(a,o.identityBytes);v!==void 0&&!h.some(e=>e.defaultModel?.provider===v)&&m(c()),s(l);let y=Object.freeze({providers:Object.freeze(h),...v===void 0?{}:{defaultProvider:v}});return u.set(y,Object.freeze(d)),y}catch(e){throw l?.aborted&&s(l),d.has(e)?e:c()}}function h(e,t){s(t);let r=d.get(e);if(r!==void 0)return r;let i=u.get(e);if(i===void 0)throw c();u.delete(e);try{let r=e.providers.map((e,r)=>{s(t);let a=n(i[r],`setup`);return Object.freeze({...e,setup:a})});s(t);let a=Object.freeze(r);return d.set(e,a),a}catch{throw s(t),c()}}export{h as captureProviderMethods,m as preflightProviderIdentities};
|
|
2
|
+
//# sourceMappingURL=preflight.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preflight.js","names":[],"sources":["../../../src/composition/provider/preflight.ts"],"sourcesContent":["import type { ModelProviderRegistrar } from '../../plugin/provider-plugin.ts'\nimport { COMPOSITION_LIMITS } from '../common/config.ts'\nimport { arrayData, boundedText, capturedMethod, objectValue, ownData } from '../common/data.ts'\nimport { checkPreflightAbort, invalidPreflight } from '../common/errors.ts'\nimport type { CapabilityIdentityConflict } from '../common/errors.ts'\nimport { capabilityIdentityConflict } from '../identity/error.ts'\nimport { captureModelTarget } from './model-selection.ts'\nimport { PROVIDER_PLUGIN_API_VERSION, type CapturedProvider, type ProviderMetadata, type ProviderSelection } from './types.ts'\n\n/** Internal phase token: identity validation is separate from executable method capture. */\nexport interface ProviderIdentityPlan extends ProviderSelection {}\nconst sourcesByPlan = new WeakMap<ProviderIdentityPlan, readonly object[]>()\nconst methodsByPlan = new WeakMap<ProviderIdentityPlan, readonly CapturedProvider[]>()\n\nfunction conflict(namespace: CapabilityIdentityConflict['namespace'], firstIndex: number, secondIndex: number) {\n return invalidPreflight(namespace === 'provider-route' ? 'PROVIDER_ROUTE_CONFLICT' : 'CAPABILITY_ID_CONFLICT',\n capabilityIdentityConflict(namespace, firstIndex, secondIndex))\n}\n\nfunction metadata(source: object): ProviderMetadata {\n const id = boundedText(ownData(source, 'id'), COMPOSITION_LIMITS.identityBytes)\n const displayName = boundedText(ownData(source, 'displayName'), COMPOSITION_LIMITS.displayNameBytes)\n const rawFamily = ownData(source, 'family', false)\n const family = rawFamily === undefined ? id : boundedText(rawFamily, COMPOSITION_LIMITS.identityBytes)\n const routes = arrayData(ownData(source, 'routes'), COMPOSITION_LIMITS.routesPerProvider)\n .map(route => boundedText(route, COMPOSITION_LIMITS.identityBytes))\n if (routes.length === 0) throw invalidPreflight()\n const rawDefault = ownData(source, 'defaultModel', false)\n const defaultModel = rawDefault === undefined ? undefined : captureModelTarget(rawDefault, false)\n if (defaultModel !== undefined && !routes.includes(defaultModel.provider)) throw invalidPreflight()\n return Object.freeze({\n id, displayName, family, routes: Object.freeze(routes),\n ...(defaultModel === undefined ? {} : { defaultModel }),\n })\n}\n\n/** No setup lookup, allocation, registration, discovery, or ownership transfer in this phase. */\nexport function preflightProviderIdentities(\n input: unknown,\n defaultProvider?: unknown,\n signal?: AbortSignal,\n): ProviderIdentityPlan {\n checkPreflightAbort(signal)\n const failures = new Set<unknown>()\n // Retain only errors we created; never trust a foreign exception's shape/code/message.\n const fail = (error: Error): never => { failures.add(error); throw error }\n try {\n const sources = arrayData(input, COMPOSITION_LIMITS.providers).map(objectValue)\n const providers: ProviderMetadata[] = []\n const ids = new Map<string, number>()\n const routes = new Map<string, number>()\n for (const [index, source] of sources.entries()) {\n checkPreflightAbort(signal)\n // Marker comparisons are done here so foreign property-access exceptions are never passed through.\n if (ownData(source, 'kind', false) !== 'model-provider-plugin') fail(invalidPreflight('CAPABILITY_KIND_MISMATCH'))\n if (ownData(source, 'apiVersion', false) !== PROVIDER_PLUGIN_API_VERSION) fail(invalidPreflight('CAPABILITY_API_UNSUPPORTED'))\n const provider = metadata(source)\n const previous = ids.get(provider.id)\n if (previous !== undefined) fail(conflict('provider-plugin-id', previous, index))\n ids.set(provider.id, index)\n for (const route of provider.routes) {\n const first = routes.get(route)\n if (first !== undefined) fail(conflict('provider-route', first, index))\n routes.set(route, index)\n }\n providers.push(provider)\n }\n const selected = defaultProvider === undefined ? undefined\n : boundedText(defaultProvider, COMPOSITION_LIMITS.identityBytes)\n if (selected !== undefined && !providers.some(provider => provider.defaultModel?.provider === selected)) {\n fail(invalidPreflight())\n }\n checkPreflightAbort(signal)\n const plan: ProviderIdentityPlan = Object.freeze({\n providers: Object.freeze(providers), ...(selected === undefined ? {} : { defaultProvider: selected }),\n })\n sourcesByPlan.set(plan, Object.freeze(sources))\n return plan\n } catch (error) {\n if (signal?.aborted) checkPreflightAbort(signal)\n if (failures.has(error)) throw error\n throw invalidPreflight()\n }\n}\n\n/** Call only after ALL runtime identity namespaces (including exporters) have passed preflight. */\nexport function captureProviderMethods(plan: ProviderIdentityPlan, signal?: AbortSignal): readonly CapturedProvider[] {\n checkPreflightAbort(signal)\n const captured = methodsByPlan.get(plan)\n if (captured !== undefined) return captured\n const sources = sourcesByPlan.get(plan)\n if (sources === undefined) throw invalidPreflight()\n // A failed capture is terminal too: never reread a partially observed method table.\n sourcesByPlan.delete(plan)\n try {\n const result = plan.providers.map((provider, index) => {\n checkPreflightAbort(signal)\n const setup = capturedMethod<[ModelProviderRegistrar], void | (() => void)>(sources[index]!, 'setup')\n return Object.freeze({ ...provider, setup })\n })\n checkPreflightAbort(signal)\n const captured = Object.freeze(result)\n methodsByPlan.set(plan, captured)\n return captured\n } catch {\n checkPreflightAbort(signal)\n throw invalidPreflight()\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { SdkLogger } from "../../logging/types.js";
|
|
2
|
+
import { ModelAdapter } from "../../contract/adapter.js";
|
|
3
|
+
import { AdapterRegistrationHandle, ModelProviderPlugin, ModelProviderRegistrar, StreamMiddleware } from "../../plugin/provider-plugin.js";
|
|
4
|
+
//#region src/composition/provider/types.d.ts
|
|
5
|
+
declare const PROVIDER_PLUGIN_API_VERSION: 1;
|
|
6
|
+
interface ModelTarget {
|
|
7
|
+
readonly provider: string;
|
|
8
|
+
readonly id: string;
|
|
9
|
+
}
|
|
10
|
+
interface RuntimeProviderInfo {
|
|
11
|
+
readonly id: string;
|
|
12
|
+
readonly name: string;
|
|
13
|
+
readonly route: string;
|
|
14
|
+
readonly pluginId: string;
|
|
15
|
+
readonly family: string;
|
|
16
|
+
readonly defaultModel?: ModelTarget;
|
|
17
|
+
}
|
|
18
|
+
interface ComposableModelProviderPlugin extends ModelProviderPlugin {
|
|
19
|
+
readonly kind: 'model-provider-plugin';
|
|
20
|
+
readonly apiVersion: typeof PROVIDER_PLUGIN_API_VERSION;
|
|
21
|
+
readonly family?: string;
|
|
22
|
+
readonly routes: readonly string[];
|
|
23
|
+
readonly defaultModel?: ModelTarget;
|
|
24
|
+
readonly setup: (registrar: ModelProviderRegistrar) => void | (() => void);
|
|
25
|
+
}
|
|
26
|
+
/** Helper-only view whose adapter registrations cannot escape predeclared route claims. */
|
|
27
|
+
interface ComposableModelProviderRegistrar {
|
|
28
|
+
readonly logger: SdkLogger;
|
|
29
|
+
registerAdapter(adapter: ModelAdapter, routes?: readonly string[]): AdapterRegistrationHandle;
|
|
30
|
+
use(middleware: StreamMiddleware): () => void;
|
|
31
|
+
}
|
|
32
|
+
type ProviderPluginCleanupDefinition = () => undefined;
|
|
33
|
+
type ModelProviderPluginDefinition = Omit<ComposableModelProviderPlugin, 'kind' | 'apiVersion' | 'setup'> & {
|
|
34
|
+
readonly setup: (registrar: ComposableModelProviderRegistrar) => undefined | ProviderPluginCleanupDefinition;
|
|
35
|
+
};
|
|
36
|
+
//#endregion
|
|
37
|
+
export { ComposableModelProviderPlugin, ComposableModelProviderRegistrar, ModelProviderPluginDefinition, ModelTarget, PROVIDER_PLUGIN_API_VERSION, ProviderPluginCleanupDefinition, RuntimeProviderInfo };
|
|
38
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","names":[],"sources":["../../../src/composition/provider/types.ts"],"mappings":";;;;cAMa;UAEI;WACN;WACA;;UAGM;WACN;WACA;WACA;WACA;WACA;WACA,eAAe;;UAGT,sCAAsC;WAC5C;WACA,mBAAmB;WACnB;WACA;WACA,eAAe;WACf,QAAQ,WAAW;;;UAIb;WACN,QAAQ;EACjB,gBAAgB,SAAS,cAAc,6BAA6B;EACpE,IAAI,YAAY;;KAGN;KACA,gCAAgC,KAC1C;WAGS,QACP,WAAW,iDACI"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","names":[],"sources":["../../../src/composition/provider/types.ts"],"sourcesContent":["import type { ModelAdapter } from '../../contract/adapter.ts'\nimport type { SdkLogger } from '../../logging/types.ts'\nimport type {\n AdapterRegistrationHandle, ModelProviderPlugin, ModelProviderRegistrar, StreamMiddleware,\n} from '../../plugin/provider-plugin.ts'\n\nexport const PROVIDER_PLUGIN_API_VERSION = 1 as const\n\nexport interface ModelTarget {\n readonly provider: string\n readonly id: string\n}\n\nexport interface RuntimeProviderInfo {\n readonly id: string\n readonly name: string\n readonly route: string\n readonly pluginId: string\n readonly family: string\n readonly defaultModel?: ModelTarget\n}\n\nexport interface ComposableModelProviderPlugin extends ModelProviderPlugin {\n readonly kind: 'model-provider-plugin'\n readonly apiVersion: typeof PROVIDER_PLUGIN_API_VERSION\n readonly family?: string\n readonly routes: readonly string[]\n readonly defaultModel?: ModelTarget\n readonly setup: (registrar: ModelProviderRegistrar) => void | (() => void)\n}\n\n/** Helper-only view whose adapter registrations cannot escape predeclared route claims. */\nexport interface ComposableModelProviderRegistrar {\n readonly logger: SdkLogger\n registerAdapter(adapter: ModelAdapter, routes?: readonly string[]): AdapterRegistrationHandle\n use(middleware: StreamMiddleware): () => void\n}\n\nexport type ProviderPluginCleanupDefinition = () => undefined\nexport type ModelProviderPluginDefinition = Omit<\n ComposableModelProviderPlugin,\n 'kind' | 'apiVersion' | 'setup'\n> & {\n readonly setup: (\n registrar: ComposableModelProviderRegistrar,\n ) => undefined | ProviderPluginCleanupDefinition\n}\n\nexport interface ProviderMetadata {\n readonly id: string\n readonly displayName: string\n readonly family: string\n readonly routes: readonly string[]\n readonly defaultModel?: ModelTarget\n}\n\nexport interface CapturedProvider extends ProviderMetadata {\n readonly setup: ComposableModelProviderPlugin['setup']\n}\n\nexport interface ProviderSelection {\n readonly providers: readonly ProviderMetadata[]\n readonly defaultProvider?: string\n}\n"],"mappings":"AAMA,MAAa,EAA8B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","names":[],"sources":["../../../src/composition/queue/config.ts"],"sourcesContent":["export const DELIVERY_QUEUE_DEFAULTS = Object.freeze({\n maxEvents: 10_000,\n maxBytes: 16 * 1024 * 1024,\n maxBatchEvents: 256,\n maxBatchBytes: 512 * 1024,\n})\n"],"mappings":"AAAA,MAAa,EAA0B,OAAO,OAAO,CACnD,UAAW,IACX,SAAU,SACV,eAAgB,IAChB,cAAe,MACjB,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{saturatingCounterAdd as e}from"../common/counter.js";import{createDeliveryBatch as t,deliveryBatchItemsBytes as n}from"../delivery/batch.js";import{DeliveryCheckpoint as r}from"../delivery/checkpoint.js";var i=class{store;resource;registrations;platform;resources;tasks=new Set;assigned=new WeakSet;pending=new WeakMap;delivered=new WeakSet;finished=new WeakSet;failed=new WeakSet;tail=Promise.resolve();sealed=!1;exported=0;exporterFailures=0;flushTimeouts=0;requiredFailure=!1;lastExportAt;constructor(e,t,n,r,i){this.store=e,this.resource=t,this.registrations=n,this.platform=r,this.resources=i}flush(e,t){return this.schedule(this.store.activeEntries(),e,t)}checkpointRun(e,t,n,r){return this.schedule(this.store.runEntries(e,t),n,r)}stopAdmission(){this.store.seal()}seal(){if(!this.sealed){this.sealed=!0,this.stopAdmission();for(let e of this.tasks)e.checkpoint.seal()}}health(){return Object.freeze({exported:this.exported,exporterFailures:this.exporterFailures,flushTimeouts:this.flushTimeouts,requiredFailure:this.requiredFailure,...this.lastExportAt===void 0?{}:{lastExportAt:this.lastExportAt}})}schedule(e,t,n){let r=this.tail.then(()=>this.flushOnce(e,t,n));return this.tail=r.then(()=>void 0,()=>void 0),r}async flushOnce(t,n,r){if(this.sealed||this.resources.isClosed)return this.report(`closed`,t,[]);if(r?.aborted)return this.report(`aborted`,t,[]);if(!Number.isFinite(n)||this.platform.monotonicNow()>=n)return this.report(`timed-out`,t,[]);let i=t.filter(e=>this.store.contains(e));this.createTasks(i.filter(e=>!this.assigned.has(e)));let a=[...this.tasks].filter(e=>e.entries.some(e=>t.includes(e))),o=[];for(let e of a){let t=await e.checkpoint.run(n,r);o.push(t),this.apply(e,t)}let s=this.sealed||this.resources.isClosed?`closed`:r?.aborted?`aborted`:this.platform.monotonicNow()>=n?`timed-out`:void 0;return s===`timed-out`&&(this.flushTimeouts=e(this.flushTimeouts,1)),this.report(s,t,o)}createTasks(e){let n=0;for(;n<e.length;){let i=[];for(;n<e.length&&i.length<this.store.maxBatchEvents;){let t=e[n];if(i.length>0&&this.batchBytes([...i,t])>this.store.maxBatchBytes)break;if(this.batchBytes([t])>this.store.maxBatchBytes)throw Error(`Queue admitted an undeliverable item`);i.push(t),n++}let a=i.filter(e=>e.kind===`event`).map(e=>e.item),o=i.filter(e=>e.kind===`run-record`).map(e=>e.item),s=t(this.resource,a,o,this.platform,{content:this.store.content,maxItems:this.store.maxBatchEvents,maxBytes:this.store.maxBatchBytes}),c=Object.freeze({entries:Object.freeze(i),checkpoint:new r(s,this.registrations,this.resources)});for(let e of i)this.assigned.add(e),this.pending.set(e,new Set(this.registrations.map((e,t)=>t)));this.store.protect(i),this.tasks.add(c)}}batchBytes(e){return n(this.resource,e.filter(e=>e.kind===`event`).map(e=>e.item),e.filter(e=>e.kind===`run-record`).map(e=>e.item))}apply(t,n){for(let r of n.exporters){(r.delivery.status===`failed`||r.delivery.status===`timed-out`)&&(this.exporterFailures=e(this.exporterFailures,1),r.requirement===`required`&&(this.requiredFailure=!0));let n=new Set(r.delivery.acceptedEventIds),i=new Set(r.delivery.acceptedRunIds),a=r.requirement===`best-effort`&&[`failed`,`timed-out`,`aborted`,`closed`].includes(r.delivery.status);for(let e of t.entries)a&&this.failed.add(e),(a||(e.kind===`event`?n.has(e.id):i.has(e.id)))&&this.pending.get(e)?.delete(r.exporterIndex)}let r=t.entries.filter(e=>this.pending.get(e)?.size===0);for(let e of r)this.finished.add(e);if(n.complete){for(let e of r)this.delivered.add(e);this.registrations.length>0&&r.length>0&&(this.exported=e(this.exported,r.length),this.lastExportAt=new Date(this.platform.wallNow()).toISOString())}this.store.unprotect(r),this.store.remove(r);for(let e of r)this.assigned.delete(e);r.length===t.entries.length&&this.tasks.delete(t)}report(e,t,n){let r=new Set(this.registrations.map((e,t)=>e.requirement===`required`?t:-1).filter(e=>e>=0)),i=e=>this.finished.has(e)?0:this.pending.get(e)?.size??(this.store.contains(e)?Math.max(1,this.registrations.length):1),o=t.filter(e=>i(e)>0).length,s=t.filter(e=>{if(this.finished.has(e))return!1;let t=this.pending.get(e);return t===void 0?r.size>0:[...t].some(e=>r.has(e))}).length,c=e!==`closed`&&e!==`aborted`&&e!==`timed-out`&&s===0,l=c&&o===0&&n.every(e=>e.complete)&&t.every(e=>!this.failed.has(e)),u=c&&r.size>0?[...r].map(e=>this.registrations[e].boundary).reduce(a):`none`;return Object.freeze({status:e??(l?`complete`:c?`required-complete`:`incomplete`),requiredComplete:c,complete:l,reachedBoundary:u,targetItems:t.length,pendingRequired:s,pendingItems:o,batches:Object.freeze([...n])})}};function a(e,t){return o(e)<=o(t)?e:t}function o(e){return e===`remote-acknowledged`?2:+(e===`local-durable`)}export{i as DeliveryQueueScheduler};
|
|
2
|
+
//# sourceMappingURL=scheduler.js.map
|