@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 @@
|
|
|
1
|
+
{"version":3,"file":"scheduler.js","names":[],"sources":["../../../src/composition/queue/scheduler.ts"],"sourcesContent":["import type { ObservationBoundary, ObservationEvent } from '../../observation/index.ts'\nimport type { RuntimePlatform } from '../../platform/adapter.ts'\nimport { RuntimeResources } from '../../platform/resources.ts'\nimport { createDeliveryBatch, deliveryBatchItemsBytes } from '../delivery/batch.ts'\nimport { DeliveryCheckpoint, type BatchCheckpointReport } from '../delivery/checkpoint.ts'\nimport type { RuntimeObservationResource } from '../delivery/resource.ts'\nimport type { RunTerminalRecord } from '../exporter/delivery-types.ts'\nimport type { RuntimeObservationExporterRegistration } from '../exporter/types.ts'\nimport { DeliveryQueueStore } from './store.ts'\nimport type { DeliveryQueueEntry } from './types.ts'\nimport { saturatingCounterAdd } from '../common/counter.ts'\n\ninterface QueueTask {\n readonly entries: readonly DeliveryQueueEntry[]\n readonly checkpoint: DeliveryCheckpoint\n}\n\nexport interface QueueFlushReport {\n readonly status: 'complete' | 'required-complete' | 'incomplete' | 'timed-out' | 'aborted' | 'closed'\n readonly requiredComplete: boolean\n readonly complete: boolean\n readonly reachedBoundary: ObservationBoundary\n readonly targetItems: number\n readonly pendingRequired: number\n readonly pendingItems: number\n readonly batches: readonly BatchCheckpointReport[]\n}\n\nexport interface DeliverySchedulerHealth {\n readonly exported: number\n readonly exporterFailures: number\n readonly flushTimeouts: number\n readonly requiredFailure: boolean\n readonly lastExportAt?: string\n}\n\n/** Serial snapshot-drain scheduler. A required incomplete batch retains its exact identity for retry. */\nexport class DeliveryQueueScheduler {\n private readonly tasks = new Set<QueueTask>()\n private readonly assigned = new WeakSet<DeliveryQueueEntry>()\n private readonly pending = new WeakMap<DeliveryQueueEntry, Set<number>>()\n private readonly delivered = new WeakSet<DeliveryQueueEntry>()\n private readonly finished = new WeakSet<DeliveryQueueEntry>()\n private readonly failed = new WeakSet<DeliveryQueueEntry>()\n private tail: Promise<void> = Promise.resolve()\n private sealed = false\n private exported = 0\n private exporterFailures = 0\n private flushTimeouts = 0\n private requiredFailure = false\n private lastExportAt: string | undefined\n\n constructor(\n private readonly store: DeliveryQueueStore,\n private readonly resource: RuntimeObservationResource,\n private readonly registrations: readonly RuntimeObservationExporterRegistration[],\n private readonly platform: RuntimePlatform,\n private readonly resources: RuntimeResources,\n ) {}\n\n flush(deadlineAt: number, caller?: AbortSignal): Promise<QueueFlushReport> {\n return this.schedule(this.store.activeEntries(), deadlineAt, caller)\n }\n\n checkpointRun(runId: string, throughSequence: number | undefined, deadlineAt: number, caller?: AbortSignal): Promise<QueueFlushReport> {\n return this.schedule(this.store.runEntries(runId, throughSequence), deadlineAt, caller)\n }\n\n /** Stop new queue admission while preserving the already-captured final drain. */\n stopAdmission(): void { this.store.seal() }\n\n seal(): void {\n if (this.sealed) return\n this.sealed = true\n this.stopAdmission()\n for (const task of this.tasks) task.checkpoint.seal()\n }\n\n health(): DeliverySchedulerHealth {\n return Object.freeze({ exported: this.exported, exporterFailures: this.exporterFailures,\n flushTimeouts: this.flushTimeouts, requiredFailure: this.requiredFailure,\n ...(this.lastExportAt === undefined ? {} : { lastExportAt: this.lastExportAt }) })\n }\n\n private schedule(targets: readonly DeliveryQueueEntry[], deadlineAt: number, caller?: AbortSignal): Promise<QueueFlushReport> {\n const run = this.tail.then(() => this.flushOnce(targets, deadlineAt, caller))\n this.tail = run.then(() => undefined, () => undefined)\n return run\n }\n\n private async flushOnce(targets: readonly DeliveryQueueEntry[], deadlineAt: number, caller?: AbortSignal): Promise<QueueFlushReport> {\n if (this.sealed || this.resources.isClosed) return this.report('closed', targets, [])\n if (caller?.aborted) return this.report('aborted', targets, [])\n if (!Number.isFinite(deadlineAt) || this.platform.monotonicNow() >= deadlineAt) return this.report('timed-out', targets, [])\n const activeTargets = targets.filter(entry => this.store.contains(entry))\n this.createTasks(activeTargets.filter(entry => !this.assigned.has(entry)))\n const relevant = [...this.tasks].filter(task => task.entries.some(entry => targets.includes(entry)))\n const reports: BatchCheckpointReport[] = []\n for (const task of relevant) {\n const report = await task.checkpoint.run(deadlineAt, caller)\n reports.push(report)\n this.apply(task, report)\n }\n const state = this.sealed || this.resources.isClosed ? 'closed'\n : caller?.aborted ? 'aborted'\n : this.platform.monotonicNow() >= deadlineAt ? 'timed-out'\n : undefined\n if (state === 'timed-out') this.flushTimeouts = saturatingCounterAdd(this.flushTimeouts, 1)\n return this.report(state, targets, reports)\n }\n\n private createTasks(entries: readonly DeliveryQueueEntry[]): void {\n let cursor = 0\n while (cursor < entries.length) {\n const selected: DeliveryQueueEntry[] = []\n while (cursor < entries.length && selected.length < this.store.maxBatchEvents) {\n const candidate = entries[cursor]!\n if (selected.length > 0 && this.batchBytes([...selected, candidate]) > this.store.maxBatchBytes) break\n if (this.batchBytes([candidate]) > this.store.maxBatchBytes) throw new Error('Queue admitted an undeliverable item')\n selected.push(candidate)\n cursor++\n }\n const events = selected.filter(entry => entry.kind === 'event').map(entry => entry.item as ObservationEvent)\n const records = selected.filter(entry => entry.kind === 'run-record').map(entry => entry.item as RunTerminalRecord)\n const batch = createDeliveryBatch(this.resource, events, records, this.platform,\n { content: this.store.content, maxItems: this.store.maxBatchEvents, maxBytes: this.store.maxBatchBytes })\n const task: QueueTask = Object.freeze({ entries: Object.freeze(selected),\n checkpoint: new DeliveryCheckpoint(batch, this.registrations, this.resources) })\n for (const entry of selected) {\n this.assigned.add(entry)\n this.pending.set(entry, new Set(this.registrations.map((_value, index) => index)))\n }\n this.store.protect(selected)\n this.tasks.add(task)\n }\n }\n\n private batchBytes(entries: readonly DeliveryQueueEntry[]): number {\n return deliveryBatchItemsBytes(this.resource,\n entries.filter(entry => entry.kind === 'event').map(entry => entry.item as ObservationEvent),\n entries.filter(entry => entry.kind === 'run-record').map(entry => entry.item as RunTerminalRecord))\n }\n\n private apply(task: QueueTask, report: BatchCheckpointReport): void {\n for (const row of report.exporters) {\n if (row.delivery.status === 'failed' || row.delivery.status === 'timed-out') {\n this.exporterFailures = saturatingCounterAdd(this.exporterFailures, 1)\n if (row.requirement === 'required') this.requiredFailure = true\n }\n const acceptedEvents = new Set(row.delivery.acceptedEventIds), acceptedRuns = new Set(row.delivery.acceptedRunIds)\n const terminalBestEffort = row.requirement === 'best-effort'\n && ['failed', 'timed-out', 'aborted', 'closed'].includes(row.delivery.status)\n for (const entry of task.entries) {\n if (terminalBestEffort) this.failed.add(entry)\n if (terminalBestEffort || (entry.kind === 'event' ? acceptedEvents.has(entry.id) : acceptedRuns.has(entry.id))) {\n this.pending.get(entry)?.delete(row.exporterIndex)\n }\n }\n }\n const settled = task.entries.filter(entry => this.pending.get(entry)?.size === 0)\n for (const entry of settled) this.finished.add(entry)\n if (report.complete) {\n for (const entry of settled) this.delivered.add(entry)\n if (this.registrations.length > 0 && settled.length > 0) {\n this.exported = saturatingCounterAdd(this.exported, settled.length)\n this.lastExportAt = new Date(this.platform.wallNow()).toISOString()\n }\n }\n this.store.unprotect(settled)\n this.store.remove(settled)\n for (const entry of settled) this.assigned.delete(entry)\n if (settled.length === task.entries.length) this.tasks.delete(task)\n }\n\n private report(\n forced: QueueFlushReport['status'] | undefined, targets: readonly DeliveryQueueEntry[], batches: readonly BatchCheckpointReport[],\n ): QueueFlushReport {\n const requiredIndexes = new Set(this.registrations.map((value, index) => value.requirement === 'required' ? index : -1).filter(index => index >= 0))\n const outstanding = (entry: DeliveryQueueEntry): number => this.finished.has(entry) ? 0\n : this.pending.get(entry)?.size ?? (this.store.contains(entry) ? Math.max(1, this.registrations.length) : 1)\n const pendingItems = targets.filter(entry => outstanding(entry) > 0).length\n const pendingRequired = targets.filter(entry => {\n if (this.finished.has(entry)) return false\n const pending = this.pending.get(entry)\n if (pending !== undefined) return [...pending].some(index => requiredIndexes.has(index))\n return requiredIndexes.size > 0\n }).length\n const requiredComplete = forced !== 'closed' && forced !== 'aborted' && forced !== 'timed-out' && pendingRequired === 0\n const complete = requiredComplete && pendingItems === 0 && batches.every(batch => batch.complete)\n && targets.every(entry => !this.failed.has(entry))\n const reachedBoundary = requiredComplete && requiredIndexes.size > 0\n ? [...requiredIndexes].map(index => this.registrations[index]!.boundary).reduce(weakerBoundary)\n : 'none'\n const status = forced ?? (complete ? 'complete' : requiredComplete ? 'required-complete' : 'incomplete')\n return Object.freeze({ status, requiredComplete, complete, reachedBoundary,\n targetItems: targets.length, pendingRequired, pendingItems, batches: Object.freeze([...batches]) })\n }\n}\n\nfunction weakerBoundary(left: ObservationBoundary, right: ObservationBoundary): ObservationBoundary {\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":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{serializedEventBytes as e}from"../../observation/privacy.js";import{DeliveryDataError as t,bytes as n,count as r}from"../../agent/accounting/delivery/data.js";import{prepareDeliveryEvent as i}from"../delivery/event.js";import{saturatingCounterAdd as a}from"../common/counter.js";import{isPreparedTerminal as o}from"../../agent/accounting/delivery/terminal.js";import{deliveryBatchItemBytes as s}from"../delivery/batch.js";import{DELIVERY_QUEUE_DEFAULTS as c}from"./config.js";var l=class{resource;staging;onEvict;maxBatchEvents;maxBatchBytes;content;maxEvents;maxBytes;entries=[];active=new Set;protectedEntries=new WeakSet;eventIds=new Map;runIds=new Map;ordinal=0;queuedBytes=0;evictedVerbose=0;evictedNormal=0;evictedBytes=0;criticalRejected=0;accepted=0;closed=!1;constructor(e,n,r={},i){this.resource=e,this.staging=n,this.onEvict=i;try{if(this.content=r.content??`none`,this.content!==`none`&&this.content!==`metadata`)throw new t;this.maxEvents=u(r.maxEvents??c.maxEvents),this.maxBytes=u(r.maxBytes??c.maxBytes),this.maxBatchEvents=u(r.maxBatchEvents??c.maxBatchEvents),this.maxBatchBytes=u(r.maxBatchBytes??c.maxBatchBytes)}catch{throw new t}}admitEvent(t){if(this.closed)return d(`closed`,`closed`);let n=i(t,this.resource,this.content),r=this.eventIds.get(n.eventId);return r===void 0?this.admit({kind:`event`,id:n.eventId,runId:n.correlation.runId,sequence:n.sequence,priority:n.priority,bytes:e(n),item:n},s(this.resource,n),this.eventIds):d(`existing`,void 0,r)}admitRunRecord(e){if(this.closed)return d(`closed`,`closed`);if(!o(e))throw new t;let r=this.runIds.get(e.runId);return r===void 0?this.admit({kind:`run-record`,id:e.runId,runId:e.runId,priority:`critical`,bytes:n(e),item:e},s(this.resource,e),this.runIds):d(`existing`,void 0,r)}remove(e){for(let t of e)this.active.delete(t)&&(this.queuedBytes-=t.bytes,t.kind===`event`?this.eventIds.delete(t.id):this.runIds.delete(t.id));this.compact()}activeEntries(){return Object.freeze(this.entries.filter(e=>this.active.has(e)))}contains(e){return this.active.has(e)}protect(e){for(let t of e)this.active.has(t)&&this.protectedEntries.add(t)}unprotect(e){for(let t of e)this.protectedEntries.delete(t)}runEntries(e,t){return Object.freeze(this.entries.filter(n=>this.active.has(n)&&n.runId===e&&n.priority===`critical`&&(n.sequence===void 0||t===void 0||n.sequence<=t)))}snapshot(){let e=this.activeEntries();return Object.freeze({queuedItems:e.length,queuedBytes:this.queuedBytes,evictedVerbose:this.evictedVerbose,evictedNormal:this.evictedNormal,evictedBytes:this.evictedBytes,criticalRejected:this.criticalRejected,accepted:this.accepted,entries:e})}seal(){this.closed=!0,this.staging.seal()}admit(e,t,n){if(t>this.maxBatchBytes)return e.priority===`critical`&&(this.criticalRejected=a(this.criticalRejected,1)),d(`rejected`,`batch-capacity`);for(;this.active.size>=this.maxEvents||this.queuedBytes+e.bytes>this.maxBytes;){let t=this.evictionCandidate();if(t===void 0)return e.priority===`critical`&&(this.criticalRejected=a(this.criticalRejected,1)),d(`rejected`,`capacity`);this.evict(t)}let r=Object.freeze({ordinal:++this.ordinal,...e});return this.entries.push(r),this.active.add(r),n.set(r.id,r),this.queuedBytes+=r.bytes,this.accepted=a(this.accepted,1),this.staging.stage(r.item),d(`accepted`,void 0,r)}evictionCandidate(){return this.entries.find(e=>this.active.has(e)&&!this.protectedEntries.has(e)&&e.priority===`verbose`)??this.entries.find(e=>this.active.has(e)&&!this.protectedEntries.has(e)&&e.priority===`normal`)}evict(e){this.remove([e]),e.priority===`verbose`?this.evictedVerbose=a(this.evictedVerbose,1):this.evictedNormal=a(this.evictedNormal,1),this.evictedBytes=a(this.evictedBytes,e.bytes);try{this.onEvict?.(e)}catch{}}compact(){let e=this.entries.length-this.active.size;if(e<256||e*2<this.entries.length)return;let t=0;for(let e of this.entries)this.active.has(e)&&(this.entries[t++]=e);this.entries.length=t}};function u(e){let n=r(e);if(n===0)throw new t;return n}function d(e,t,n){return Object.freeze({status:e,...t===void 0?{}:{reason:t},...n===void 0?{}:{entry:n}})}export{l as DeliveryQueueStore};
|
|
2
|
+
//# sourceMappingURL=store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.js","names":[],"sources":["../../../src/composition/queue/store.ts"],"sourcesContent":["import type { ObservationEvent } from '../../observation/index.ts'\nimport { serializedEventBytes } from '../../observation/privacy.ts'\nimport type { RuntimeObservationResource } from '../delivery/resource.ts'\nimport { prepareDeliveryEvent } from '../delivery/event.ts'\nimport { bytes, count, DeliveryDataError } from '../delivery/data.ts'\nimport { isPreparedTerminal } from '../delivery/terminal.ts'\nimport { deliveryBatchItemBytes } from '../delivery/batch.ts'\nimport type { RunTerminalRecord } from '../exporter/delivery-types.ts'\nimport { DeliveryStaging } from '../delivery/staging.ts'\nimport { DELIVERY_QUEUE_DEFAULTS } from './config.ts'\nimport type { DeliveryQueueEntry, DeliveryQueueSnapshot, QueueAdmission } from './types.ts'\nimport { saturatingCounterAdd } from '../common/counter.ts'\n\nexport interface DeliveryQueueOptions {\n readonly content?: 'none' | 'metadata'\n readonly maxEvents?: number\n readonly maxBytes?: number\n readonly maxBatchEvents?: number\n readonly maxBatchBytes?: number\n}\n\n/** Bounded admission owner. Export/checkpoint scheduling is deliberately separate from storage policy. */\nexport class DeliveryQueueStore {\n readonly maxBatchEvents: number\n readonly maxBatchBytes: number\n readonly content: 'none' | 'metadata'\n private readonly maxEvents: number\n private readonly maxBytes: number\n private readonly entries: DeliveryQueueEntry[] = []\n private readonly active = new Set<DeliveryQueueEntry>()\n private readonly protectedEntries = new WeakSet<DeliveryQueueEntry>()\n private readonly eventIds = new Map<string, DeliveryQueueEntry>()\n private readonly runIds = new Map<string, DeliveryQueueEntry>()\n private ordinal = 0\n private queuedBytes = 0\n private evictedVerbose = 0\n private evictedNormal = 0\n private evictedBytes = 0\n private criticalRejected = 0\n private accepted = 0\n private closed = false\n\n constructor(\n private readonly resource: RuntimeObservationResource,\n private readonly staging: DeliveryStaging,\n options: DeliveryQueueOptions = {},\n private readonly onEvict?: (entry: DeliveryQueueEntry) => void,\n ) {\n try {\n this.content = options.content ?? 'none'\n if (this.content !== 'none' && this.content !== 'metadata') throw new DeliveryDataError()\n this.maxEvents = positive(options.maxEvents ?? DELIVERY_QUEUE_DEFAULTS.maxEvents)\n this.maxBytes = positive(options.maxBytes ?? DELIVERY_QUEUE_DEFAULTS.maxBytes)\n this.maxBatchEvents = positive(options.maxBatchEvents ?? DELIVERY_QUEUE_DEFAULTS.maxBatchEvents)\n this.maxBatchBytes = positive(options.maxBatchBytes ?? DELIVERY_QUEUE_DEFAULTS.maxBatchBytes)\n } catch { throw new DeliveryDataError() }\n }\n\n admitEvent(input: ObservationEvent): QueueAdmission {\n if (this.closed) return outcome('closed', 'closed')\n const event = prepareDeliveryEvent(input, this.resource, this.content)\n const previous = this.eventIds.get(event.eventId)\n if (previous !== undefined) return outcome('existing', undefined, previous)\n return this.admit({ kind: 'event', id: event.eventId, runId: event.correlation.runId,\n sequence: event.sequence, priority: event.priority, bytes: serializedEventBytes(event), item: event },\n deliveryBatchItemBytes(this.resource, event), this.eventIds)\n }\n\n admitRunRecord(record: RunTerminalRecord): QueueAdmission {\n if (this.closed) return outcome('closed', 'closed')\n if (!isPreparedTerminal(record)) throw new DeliveryDataError()\n const previous = this.runIds.get(record.runId)\n if (previous !== undefined) return outcome('existing', undefined, previous)\n return this.admit({ kind: 'run-record', id: record.runId, runId: record.runId,\n priority: 'critical', bytes: bytes(record), item: record }, deliveryBatchItemBytes(this.resource, record), this.runIds)\n }\n\n remove(entries: readonly DeliveryQueueEntry[]): void {\n for (const entry of entries) {\n if (!this.active.delete(entry)) continue\n this.queuedBytes -= entry.bytes\n if (entry.kind === 'event') this.eventIds.delete(entry.id)\n else this.runIds.delete(entry.id)\n }\n this.compact()\n }\n\n activeEntries(): readonly DeliveryQueueEntry[] {\n return Object.freeze(this.entries.filter(entry => this.active.has(entry)))\n }\n\n contains(entry: DeliveryQueueEntry): boolean { return this.active.has(entry) }\n\n protect(entries: readonly DeliveryQueueEntry[]): void {\n for (const entry of entries) if (this.active.has(entry)) this.protectedEntries.add(entry)\n }\n\n unprotect(entries: readonly DeliveryQueueEntry[]): void {\n for (const entry of entries) this.protectedEntries.delete(entry)\n }\n\n runEntries(runId: string, throughSequence?: number): readonly DeliveryQueueEntry[] {\n return Object.freeze(this.entries.filter(entry => this.active.has(entry) && entry.runId === runId\n && entry.priority === 'critical' && (entry.sequence === undefined || throughSequence === undefined || entry.sequence <= throughSequence)))\n }\n\n snapshot(): DeliveryQueueSnapshot {\n const entries = this.activeEntries()\n return Object.freeze({ queuedItems: entries.length, queuedBytes: this.queuedBytes,\n evictedVerbose: this.evictedVerbose, evictedNormal: this.evictedNormal,\n evictedBytes: this.evictedBytes, criticalRejected: this.criticalRejected, accepted: this.accepted, entries })\n }\n\n seal(): void { this.closed = true; this.staging.seal() }\n\n private admit(\n input: Omit<DeliveryQueueEntry, 'ordinal'>, wireBytes: number, identities: Map<string, DeliveryQueueEntry>,\n ): QueueAdmission {\n if (wireBytes > this.maxBatchBytes) {\n if (input.priority === 'critical') this.criticalRejected = saturatingCounterAdd(this.criticalRejected, 1)\n return outcome('rejected', 'batch-capacity')\n }\n while (this.active.size >= this.maxEvents || this.queuedBytes + input.bytes > this.maxBytes) {\n const candidate = this.evictionCandidate()\n if (candidate === undefined) {\n if (input.priority === 'critical') this.criticalRejected = saturatingCounterAdd(this.criticalRejected, 1)\n return outcome('rejected', 'capacity')\n }\n this.evict(candidate)\n }\n const entry: DeliveryQueueEntry = Object.freeze({ ordinal: ++this.ordinal, ...input })\n this.entries.push(entry)\n this.active.add(entry)\n identities.set(entry.id, entry)\n this.queuedBytes += entry.bytes\n this.accepted = saturatingCounterAdd(this.accepted, 1)\n this.staging.stage(entry.item)\n return outcome('accepted', undefined, entry)\n }\n\n private evictionCandidate(): DeliveryQueueEntry | undefined {\n return this.entries.find(entry => this.active.has(entry) && !this.protectedEntries.has(entry) && entry.priority === 'verbose')\n ?? this.entries.find(entry => this.active.has(entry) && !this.protectedEntries.has(entry) && entry.priority === 'normal')\n }\n\n private evict(entry: DeliveryQueueEntry): void {\n this.remove([entry])\n if (entry.priority === 'verbose') this.evictedVerbose = saturatingCounterAdd(this.evictedVerbose, 1)\n else this.evictedNormal = saturatingCounterAdd(this.evictedNormal, 1)\n this.evictedBytes = saturatingCounterAdd(this.evictedBytes, entry.bytes)\n try { this.onEvict?.(entry) } catch { /* Queue capacity must not depend on a health observer. */ }\n }\n\n private compact(): void {\n const dead = this.entries.length - this.active.size\n if (dead < 256 || dead * 2 < this.entries.length) return\n let target = 0\n for (const entry of this.entries) if (this.active.has(entry)) this.entries[target++] = entry\n this.entries.length = target\n }\n}\n\nfunction positive(value: number): number {\n const result = count(value)\n if (result === 0) throw new DeliveryDataError()\n return result\n}\n\nfunction outcome(status: QueueAdmission['status'], reason?: QueueAdmission['reason'], entry?: DeliveryQueueEntry): QueueAdmission {\n return Object.freeze({ status, ...(reason === undefined ? {} : { reason }), ...(entry === undefined ? {} : { entry }) })\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{timeoutValue as e}from"../../platform/config.js";import{objectValue as t,optionalAbortSignal as n,ownData as r}from"../../capability/common/data.js";import{captureOpenSpan as i,captureProcessors as a,captureRedactors as o}from"../observation/extensions.js";const s=Object.freeze({startupTimeoutMs:3e4,closeTimeoutMs:3e4}),c=new Set([`providers`,`defaultProvider`,`signal`,`resource`,`observability`,`closeTimeoutMs`,`startupTimeoutMs`,`diagnosticMaxEvents`,`diagnosticMaxBytes`]),l=new Set([`mode`,`content`,`minimumLogLevel`,`exporters`,`maxQueueEvents`,`maxQueueBytes`,`maxBatchEvents`,`maxBatchBytes`,`flushTimeoutMs`,`shutdownTimeoutMs`,`processors`,`redactors`,`includeErrorStacks`,`openSpan`]),u=new Set([`operational`,`reliable`,`audit`]),d=new Set([`trace`,`debug`,`info`,`warn`,`error`,`fatal`]);function f(e,t){return r(e,t,!1)}function p(e,t){if(Reflect.ownKeys(e).some(e=>typeof e!=`string`||!t.has(e)))throw TypeError(`Runtime options contain unsupported fields`)}function m(t,n){let r=f(t,n);return r===void 0?void 0:e(r)}function h(e){let h=t(e);p(h,c);let _=f(h,`observability`),v=_===void 0?{}:t(_);p(v,l);let y=f(v,`mode`)??`operational`,b=f(v,`content`),x=f(v,`minimumLogLevel`),S=f(v,`includeErrorStacks`);if(!u.has(y))throw TypeError(`Invalid observation delivery mode`);if(b!==void 0&&b!==`none`&&b!==`metadata`)throw TypeError(`Invalid observation content policy`);if(x!==void 0&&!d.has(x))throw TypeError(`Invalid minimum log level`);if(S!==void 0&&typeof S!=`boolean`)throw TypeError(`Invalid error-stack policy`);let C=f(v,`exporters`)??[],w=a(f(v,`processors`)),T=o(f(v,`redactors`)),E=i(v,f(v,`openSpan`)),D=f(h,`defaultProvider`),O=n(f(h,`signal`)),k=f(h,`resource`),A=Object.freeze({mode:y,exporters:C,...b===void 0?{}:{content:b},...x===void 0?{}:{minimumLogLevel:x},...w.length===0?{}:{processors:w},...T.length===0?{}:{redactors:T},...S===void 0?{}:{includeErrorStacks:S},...E===void 0?{}:{openSpan:E},...g(v,[`maxQueueEvents`,`maxQueueBytes`,`maxBatchEvents`,`maxBatchBytes`,`flushTimeoutMs`,`shutdownTimeoutMs`])});return Object.freeze({providers:r(h,`providers`),...D===void 0?{}:{defaultProvider:D},...O===void 0?{}:{signal:O},...k===void 0?{}:{resource:k},observability:A,closeTimeoutMs:m(h,`closeTimeoutMs`)??s.closeTimeoutMs,startupTimeoutMs:m(h,`startupTimeoutMs`)??s.startupTimeoutMs,...g(h,[`diagnosticMaxEvents`,`diagnosticMaxBytes`])})}function g(e,t){let n=Object.create(null);for(let r of t){let t=m(e,r);t!==void 0&&(n[r]=t)}return n}function _(e){if(e===void 0)return;let r=t(e);return p(r,new Set([`signal`])),n(f(r,`signal`))}export{s as RUNTIME_OWNER_DEFAULTS,_ as captureCloseSignal,h as captureRuntimeOwnerOptions};
|
|
2
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","names":[],"sources":["../../../src/composition/runtime/config.ts"],"sourcesContent":["import type { DeliveryMode } from '../../observation/index.ts'\nimport type { LogLevel } from '../../logging/types.ts'\nimport { timeoutValue } from '../../platform/config.ts'\nimport { objectValue, optionalAbortSignal, ownData } from '../common/data.ts'\nimport type { RuntimeObservationExporterRegistration } from '../exporter/types.ts'\nimport type { RuntimeObservationResourceInput, RuntimeOwnerObservabilityOptions, RuntimeOwnerOptions } from './types.ts'\nimport { captureOpenSpan, captureProcessors, captureRedactors } from '../observation/extensions.ts'\n\nexport const RUNTIME_OWNER_DEFAULTS = Object.freeze({ startupTimeoutMs: 30_000, closeTimeoutMs: 30_000 })\nconst ROOT_KEYS = new Set(['providers', 'defaultProvider', 'signal', 'resource', 'observability',\n 'closeTimeoutMs', 'startupTimeoutMs', 'diagnosticMaxEvents', 'diagnosticMaxBytes'])\nconst OBSERVABILITY_KEYS = new Set(['mode', 'content', 'minimumLogLevel', 'exporters', 'maxQueueEvents',\n 'maxQueueBytes', 'maxBatchEvents', 'maxBatchBytes', 'flushTimeoutMs', 'shutdownTimeoutMs',\n 'processors', 'redactors', 'includeErrorStacks', 'openSpan'])\nconst MODES = new Set<unknown>(['operational', 'reliable', 'audit'] satisfies DeliveryMode[])\nconst LEVELS = new Set<unknown>(['trace', 'debug', 'info', 'warn', 'error', 'fatal'] satisfies LogLevel[])\n\nexport interface CapturedRuntimeOwnerOptions extends RuntimeOwnerOptions {\n readonly closeTimeoutMs: number\n readonly startupTimeoutMs: number\n readonly observability: RuntimeOwnerObservabilityOptions & {\n readonly mode: DeliveryMode\n readonly exporters: readonly import('../exporter/types.ts').RuntimeObservationExporterRegistration[]\n }\n}\n\nfunction optional(source: object, key: string): unknown { return ownData(source, key, false) }\nfunction ownKeys(source: object, allowed: ReadonlySet<string>): void {\n if (Reflect.ownKeys(source).some(key => typeof key !== 'string' || !allowed.has(key))) {\n throw new TypeError('Runtime options contain unsupported fields')\n }\n}\nfunction optionalPositive(source: object, key: string): number | undefined {\n const value = optional(source, key)\n return value === undefined ? undefined : timeoutValue(value as number)\n}\n\n/** Capture option data once without invoking getters; executable capability capture follows identity preflight. */\nexport function captureRuntimeOwnerOptions(input: unknown): CapturedRuntimeOwnerOptions {\n const source = objectValue(input)\n ownKeys(source, ROOT_KEYS)\n const observabilityValue = optional(source, 'observability')\n const observation = observabilityValue === undefined ? {} : objectValue(observabilityValue)\n ownKeys(observation, OBSERVABILITY_KEYS)\n const mode = optional(observation, 'mode') ?? 'operational'\n const content = optional(observation, 'content')\n const minimumLogLevel = optional(observation, 'minimumLogLevel')\n const includeErrorStacks = optional(observation, 'includeErrorStacks')\n if (!MODES.has(mode)) throw new TypeError('Invalid observation delivery mode')\n if (content !== undefined && content !== 'none' && content !== 'metadata') throw new TypeError('Invalid observation content policy')\n if (minimumLogLevel !== undefined && !LEVELS.has(minimumLogLevel)) throw new TypeError('Invalid minimum log level')\n if (includeErrorStacks !== undefined && typeof includeErrorStacks !== 'boolean') throw new TypeError('Invalid error-stack policy')\n const exporters = (optional(observation, 'exporters') ?? []) as readonly RuntimeObservationExporterRegistration[]\n const processors = captureProcessors(optional(observation, 'processors'))\n const redactors = captureRedactors(optional(observation, 'redactors'))\n const openSpan = captureOpenSpan(observation, optional(observation, 'openSpan'))\n const defaultProvider = optional(source, 'defaultProvider')\n const signal = optionalAbortSignal(optional(source, 'signal'))\n const resource = optional(source, 'resource')\n const capturedObservation = Object.freeze({ mode: mode as DeliveryMode, exporters,\n ...(content === undefined ? {} : { content: content as 'none' | 'metadata' }),\n ...(minimumLogLevel === undefined ? {} : { minimumLogLevel: minimumLogLevel as LogLevel }),\n ...(processors.length === 0 ? {} : { processors }),\n ...(redactors.length === 0 ? {} : { redactors }),\n ...(includeErrorStacks === undefined ? {} : { includeErrorStacks }),\n ...(openSpan === undefined ? {} : { openSpan }),\n ...copyPositive(observation, ['maxQueueEvents', 'maxQueueBytes', 'maxBatchEvents', 'maxBatchBytes',\n 'flushTimeoutMs', 'shutdownTimeoutMs']),\n })\n return Object.freeze({ providers: ownData(source, 'providers') as RuntimeOwnerOptions['providers'],\n ...(defaultProvider === undefined ? {} : { defaultProvider: defaultProvider as string }),\n ...(signal === undefined ? {} : { signal: signal as AbortSignal }),\n ...(resource === undefined ? {} : { resource: resource as RuntimeObservationResourceInput }),\n observability: capturedObservation,\n closeTimeoutMs: optionalPositive(source, 'closeTimeoutMs') ?? RUNTIME_OWNER_DEFAULTS.closeTimeoutMs,\n startupTimeoutMs: optionalPositive(source, 'startupTimeoutMs') ?? RUNTIME_OWNER_DEFAULTS.startupTimeoutMs,\n ...copyPositive(source, ['diagnosticMaxEvents', 'diagnosticMaxBytes']),\n })\n}\n\nfunction copyPositive(source: object, keys: readonly string[]): Record<string, number> {\n const output: Record<string, number> = Object.create(null) as Record<string, number>\n for (const key of keys) {\n const value = optionalPositive(source, key)\n if (value !== undefined) output[key] = value\n }\n return output\n}\n\nexport function captureCloseSignal(input: unknown): AbortSignal | undefined {\n if (input === undefined) return undefined\n const source = objectValue(input)\n ownKeys(source, new Set(['signal']))\n return optionalAbortSignal(optional(source, 'signal'))\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{createRuntimePlatform as e}from"../../platform/adapter.js";import{ModelRegistry as t}from"../../runtime/registry.js";import{RuntimeResources as n}from"../../platform/resources.js";import{createRuntimeResource as r}from"../delivery/resource.js";import{RuntimeObservationPort as i}from"../observation/port.js";import{providerTopology as a}from"../provider/model-selection.js";import{preflightRuntimeCapabilities as o}from"../preflight.js";import{activateRuntimeCapabilities as s}from"../startup.js";import{RuntimeOperations as c}from"../lifecycle/operations.js";import{captureCloseSignal as l,captureRuntimeOwnerOptions as u}from"./config.js";import{bindRuntimeAgentDefinition as d}from"../agent/definition.js";import{createRuntimeAgent as f}from"../agent/session.js";import{RuntimeModelCatalog as p}from"../model-catalog/manager.js";import{createRuntimeAgentTeam as m}from"../team/runtime.js";var h=class{platform;resources;observation;resource;topology;selection;providersOwned;exporters;closeTimeoutMs;registry;operations;closing;catalogs;teams=[];closedTeams=[];constructor(e,t,n,r,i,a,o,s,c,l,u){this.platform=n,this.resources=r,this.observation=i,this.resource=a,this.topology=o,this.selection=s,this.providersOwned=c,this.exporters=l,this.closeTimeoutMs=u,this.registry=e,this.operations=t,this.catalogs=new p(e,t,r,o)}providers(){return this.topology}modelCatalog(e,t){return this.catalogs.get(e,t)}agent(e){return this.operations.assertActive(),f(this,d(e,this.selection))}team(e){let t=m(this,e,e=>this.retireTeam(e));return this.teams.push(t),t.view}logger(e){return this.observation.logger(e)}diagnostics(){return this.observation.diagnostics()}close(e){if(this.closing!==void 0)return this.closing;let t=l(e),n,r;this.closing=new Promise((e,t)=>{n=e,r=t});let i=this.closing;try{let e=this.operations.beginClose({timeoutMs:this.closeTimeoutMs,...t===void 0?{}:{signal:t}});return this.observation.stopAdmission(),this.finishClose(e).then(n,r),i}catch(e){throw this.closing=void 0,e}}async finishClose(e){let t=await e,n=this.operations.closeDeadlineAt(),r=[...this.closedTeams];for(let e of[...this.teams].reverse())r.push(await e.closeForRuntime(n));for(let[e,t]of[...this.providersOwned].reverse().entries()){let i=this.providersOwned.length-e-1;this.platform.monotonicNow()>=n?r.push(_(i)):r.push(t.close({at:n,now:()=>this.platform.monotonicNow()}))}let i=this.observation.observationDeadline(n);return await this.observation.flushUntil(i),this.observation.seal(),r.push(...await this.exporters.close(i)),this.operations.finishClose(),Object.freeze({state:`closed`,...t,components:Object.freeze(r),observationHealth:this.observation.health()})}retireTeam(e){let t=this.teams.indexOf(e);t<0||(this.teams.splice(t,1),this.closedTeams.push(Object.freeze({kind:`agent-team`,id:e.id,status:`closed`})),this.closedTeams.length>1024&&this.closedTeams.shift())}};async function g(l,d=globalThis){let f=e(d),p=u(l),m=o(p.providers,p.observability.exporters,p.defaultProvider,p.signal),g=new n(f),_;try{let e=r(p.resource,f);_=new i(e,m.exporters,f,g,{mode:p.observability.mode,...p.observability.content===void 0?{}:{content:p.observability.content},...p.observability.minimumLogLevel===void 0?{}:{minimumLogLevel:p.observability.minimumLogLevel},...p.observability.processors===void 0?{}:{processors:p.observability.processors},...p.observability.redactors===void 0?{}:{redactors:p.observability.redactors},...p.observability.includeErrorStacks===void 0?{}:{includeErrorStacks:p.observability.includeErrorStacks},...p.observability.openSpan===void 0?{}:{openSpan:p.observability.openSpan},...p.observability.maxQueueEvents===void 0?{}:{maxEvents:p.observability.maxQueueEvents},...p.observability.maxQueueBytes===void 0?{}:{maxBytes:p.observability.maxQueueBytes},...p.observability.maxBatchEvents===void 0?{}:{maxBatchEvents:p.observability.maxBatchEvents},...p.observability.maxBatchBytes===void 0?{}:{maxBatchBytes:p.observability.maxBatchBytes},...p.observability.flushTimeoutMs===void 0?{}:{flushTimeoutMs:p.observability.flushTimeoutMs},...p.observability.shutdownTimeoutMs===void 0?{}:{shutdownTimeoutMs:p.observability.shutdownTimeoutMs},...p.diagnosticMaxEvents===void 0?{}:{diagnosticMaxEvents:p.diagnosticMaxEvents},...p.diagnosticMaxBytes===void 0?{}:{diagnosticMaxBytes:p.diagnosticMaxBytes}});let n=new t({observation:_,observationResource:e}),o=await s(m,n,_.logger({scope:`sdk.provider.setup`}),g,{startupTimeoutMs:p.startupTimeoutMs,rollbackTimeoutMs:p.closeTimeoutMs,...p.signal===void 0?{}:{signal:p.signal}});return new h(n,new c(g),f,g,_,e,a(m.selection),m.selection,o.providers,o.exporters,p.closeTimeoutMs)}catch(e){throw _?.seal(),g.close(),e}}function _(e){return Object.freeze({kind:`provider-registration`,id:`provider-${e}`,status:`timed-out`,error:Object.freeze({code:`CAPABILITY_CLEANUP_TIMEOUT`,stage:`provider-cleanup`,message:`Provider cleanup did not start before the runtime close deadline`})})}export{h as RuntimeCompositionOwner,g as createRuntimeCompositionOwner};
|
|
2
|
+
//# sourceMappingURL=owner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"owner.js","names":[],"sources":["../../../src/composition/runtime/owner.ts"],"sourcesContent":["import { ModelRegistry } from '../../runtime/registry.ts'\nimport { createRuntimePlatform, type RuntimePlatform } from '../../platform/adapter.ts'\nimport { RuntimeResources } from '../../platform/resources.ts'\nimport { createRuntimeResource } from '../delivery/resource.ts'\nimport { RuntimeObservationPort, type RuntimeDiagnosticSnapshot } from '../observation/port.ts'\nimport { preflightRuntimeCapabilities } from '../preflight.ts'\nimport { providerTopology } from '../provider/model-selection.ts'\nimport type { ProviderRegistration } from '../provider/activation.ts'\nimport type { RuntimeProviderInfo } from '../provider/types.ts'\nimport { activateRuntimeCapabilities } from '../startup.ts'\nimport { RuntimeOperations } from '../lifecycle/operations.ts'\nimport type { QuiescenceReport } from '../lifecycle/types.ts'\nimport type { RuntimeComponentCloseReport } from '../common/errors.ts'\nimport type { SdkLogger } from '../../logging/types.ts'\nimport type { RuntimeLoggerContext } from '../logging/logger.ts'\nimport { captureCloseSignal, captureRuntimeOwnerOptions } from './config.ts'\nimport type { RuntimeCloseReport, RuntimeCompositionView, RuntimeOwnerOptions } from './types.ts'\nimport { bindRuntimeAgentDefinition } from '../agent/definition.ts'\nimport { createRuntimeAgent } from '../agent/session.ts'\nimport type { RuntimeAgent, RuntimeAgentBindingInput } from '../agent/types.ts'\nimport type { ProviderSelection } from '../provider/types.ts'\nimport { RuntimeModelCatalog } from '../model-catalog/manager.ts'\nimport type { ModelCatalogOptions } from '../../contract/model-info.ts'\nimport type { RuntimeModelCatalogSnapshot } from '../model-catalog/types.ts'\nimport { createRuntimeAgentTeam } from '../team/runtime.ts'\nimport type { RuntimeAgentTeam, RuntimeAgentTeamOptions, RuntimeTeamRegistration } from '../team/types.ts'\n\n/** Internal composition owner used to finish lifecycle semantics before the public agent surface is exported. */\nexport class RuntimeCompositionOwner implements RuntimeCompositionView {\n readonly registry: ModelRegistry\n readonly operations: RuntimeOperations\n private closing: Promise<RuntimeCloseReport> | undefined\n private readonly catalogs: RuntimeModelCatalog\n private readonly teams: RuntimeTeamRegistration[] = []\n private readonly closedTeams: RuntimeComponentCloseReport[] = []\n\n constructor(\n registry: ModelRegistry,\n operations: RuntimeOperations,\n private readonly platform: RuntimePlatform,\n readonly resources: RuntimeResources,\n readonly observation: RuntimeObservationPort,\n readonly resource: import('../delivery/resource.ts').RuntimeObservationResource,\n private readonly topology: readonly RuntimeProviderInfo[],\n private readonly selection: ProviderSelection,\n private readonly providersOwned: readonly ProviderRegistration[],\n private readonly exporters: Awaited<ReturnType<typeof activateRuntimeCapabilities>>['exporters'],\n private readonly closeTimeoutMs: number,\n ) {\n this.registry = registry\n this.operations = operations\n this.catalogs = new RuntimeModelCatalog(registry, operations, resources, topology)\n }\n\n providers(): readonly RuntimeProviderInfo[] { return this.topology }\n modelCatalog(route: string, options?: ModelCatalogOptions): Promise<RuntimeModelCatalogSnapshot> {\n return this.catalogs.get(route, options)\n }\n agent(input: RuntimeAgentBindingInput): RuntimeAgent {\n this.operations.assertActive()\n return createRuntimeAgent(this, bindRuntimeAgentDefinition(input, this.selection))\n }\n team(input: RuntimeAgentTeamOptions): RuntimeAgentTeam {\n const registration = createRuntimeAgentTeam(this, input, closed => this.retireTeam(closed))\n this.teams.push(registration)\n return registration.view\n }\n logger(context?: RuntimeLoggerContext): SdkLogger { return this.observation.logger(context) }\n diagnostics(): RuntimeDiagnosticSnapshot { return this.observation.diagnostics() }\n\n close(input?: { readonly signal?: AbortSignal }): Promise<RuntimeCloseReport> {\n if (this.closing !== undefined) return this.closing\n const signal = captureCloseSignal(input)\n let resolve!: (report: RuntimeCloseReport) => void\n let reject!: (error: unknown) => void\n this.closing = new Promise((done, fail) => { resolve = done; reject = fail })\n const shared = this.closing\n try {\n const quiescence = this.operations.beginClose({ timeoutMs: this.closeTimeoutMs, ...(signal === undefined ? {} : { signal }) })\n this.observation.stopAdmission()\n void this.finishClose(quiescence).then(resolve, reject)\n return shared\n } catch (error) {\n this.closing = undefined\n throw error\n }\n }\n\n private async finishClose(quiescenceTask: Promise<QuiescenceReport>): Promise<RuntimeCloseReport> {\n const quiescence = await quiescenceTask\n const deadlineAt = this.operations.closeDeadlineAt()\n const components: RuntimeComponentCloseReport[] = [...this.closedTeams]\n for (const team of [...this.teams].reverse()) components.push(await team.closeForRuntime(deadlineAt))\n for (const [reverseIndex, registration] of [...this.providersOwned].reverse().entries()) {\n const originalIndex = this.providersOwned.length - reverseIndex - 1\n if (this.platform.monotonicNow() >= deadlineAt) components.push(timedOutProvider(originalIndex))\n else components.push(registration.close({ at: deadlineAt, now: () => this.platform.monotonicNow() }))\n }\n const observationDeadline = this.observation.observationDeadline(deadlineAt)\n await this.observation.flushUntil(observationDeadline)\n this.observation.seal()\n components.push(...await this.exporters.close(observationDeadline))\n this.operations.finishClose()\n return Object.freeze({ state: 'closed', ...quiescence, components: Object.freeze(components),\n observationHealth: this.observation.health() })\n }\n\n private retireTeam(registration: RuntimeTeamRegistration): void {\n const index = this.teams.indexOf(registration)\n if (index < 0) return\n this.teams.splice(index, 1)\n this.closedTeams.push(Object.freeze({ kind: 'agent-team', id: registration.id, status: 'closed' }))\n // Reporting metadata is intentionally bounded independently of heavyweight\n // team state. Older tombstones can be omitted from a later runtime report.\n if (this.closedTeams.length > 1_024) this.closedTeams.shift()\n }\n}\n\n/** Web preflight and whole-input identity validation both precede runtime-owned allocations. */\nexport async function createRuntimeCompositionOwner(\n input: RuntimeOwnerOptions,\n host: typeof globalThis = globalThis,\n): Promise<RuntimeCompositionOwner> {\n const platform = createRuntimePlatform(host)\n const options = captureRuntimeOwnerOptions(input)\n const plan = preflightRuntimeCapabilities(options.providers, options.observability.exporters,\n options.defaultProvider, options.signal)\n const resources = new RuntimeResources(platform)\n let observation: RuntimeObservationPort | undefined\n try {\n const resource = createRuntimeResource(options.resource, platform)\n observation = new RuntimeObservationPort(resource, plan.exporters, platform, resources, {\n mode: options.observability.mode,\n ...(options.observability.content === undefined ? {} : { content: options.observability.content }),\n ...(options.observability.minimumLogLevel === undefined ? {} : { minimumLogLevel: options.observability.minimumLogLevel }),\n ...(options.observability.processors === undefined ? {} : { processors: options.observability.processors }),\n ...(options.observability.redactors === undefined ? {} : { redactors: options.observability.redactors }),\n ...(options.observability.includeErrorStacks === undefined ? {} : { includeErrorStacks: options.observability.includeErrorStacks }),\n ...(options.observability.openSpan === undefined ? {} : { openSpan: options.observability.openSpan }),\n ...(options.observability.maxQueueEvents === undefined ? {} : { maxEvents: options.observability.maxQueueEvents }),\n ...(options.observability.maxQueueBytes === undefined ? {} : { maxBytes: options.observability.maxQueueBytes }),\n ...(options.observability.maxBatchEvents === undefined ? {} : { maxBatchEvents: options.observability.maxBatchEvents }),\n ...(options.observability.maxBatchBytes === undefined ? {} : { maxBatchBytes: options.observability.maxBatchBytes }),\n ...(options.observability.flushTimeoutMs === undefined ? {} : { flushTimeoutMs: options.observability.flushTimeoutMs }),\n ...(options.observability.shutdownTimeoutMs === undefined ? {} : { shutdownTimeoutMs: options.observability.shutdownTimeoutMs }),\n ...(options.diagnosticMaxEvents === undefined ? {} : { diagnosticMaxEvents: options.diagnosticMaxEvents }),\n ...(options.diagnosticMaxBytes === undefined ? {} : { diagnosticMaxBytes: options.diagnosticMaxBytes }),\n })\n const registry = new ModelRegistry({ observation, observationResource: resource })\n const capabilities = await activateRuntimeCapabilities(plan, registry,\n observation.logger({ scope: 'sdk.provider.setup' }), resources, {\n startupTimeoutMs: options.startupTimeoutMs, rollbackTimeoutMs: options.closeTimeoutMs,\n ...(options.signal === undefined ? {} : { signal: options.signal }),\n })\n return new RuntimeCompositionOwner(registry, new RuntimeOperations(resources), platform, resources,\n observation, resource, providerTopology(plan.selection), plan.selection,\n capabilities.providers, capabilities.exporters, options.closeTimeoutMs)\n } catch (error) {\n observation?.seal()\n resources.close()\n throw error\n }\n}\n\nfunction timedOutProvider(index: number): RuntimeComponentCloseReport {\n return Object.freeze({ kind: 'provider-registration', id: `provider-${index}`, status: 'timed-out',\n error: Object.freeze({ code: 'CAPABILITY_CLEANUP_TIMEOUT', stage: 'provider-cleanup',\n message: 'Provider cleanup did not start before the runtime close deadline' }) })\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { AgentRuntime, AgentRuntimeOptions } from "./types.js";
|
|
2
|
+
//#region src/composition/runtime/public.d.ts
|
|
3
|
+
/** Construct the immutable public composition facade; mutable internals stay closure-owned. */
|
|
4
|
+
declare function createAgentRuntime(options: AgentRuntimeOptions): Promise<AgentRuntime>;
|
|
5
|
+
//#endregion
|
|
6
|
+
export { createAgentRuntime };
|
|
7
|
+
//# sourceMappingURL=public.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"public.d.ts","names":[],"sources":["../../../src/composition/runtime/public.ts"],"mappings":";;;iBAIsB,mBAAmB,SAAS,sBAAsB,QAAQ"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{createRuntimeCompositionOwner as e}from"./owner.js";async function t(t){let n=await e(t);return Object.freeze({providers:()=>n.providers(),modelCatalog:(e,t)=>n.modelCatalog(e,t),agent:e=>n.agent(e),team:e=>n.team(e),logger:e=>n.logger(e),diagnostics:()=>n.diagnostics(),close:e=>n.close(e)})}export{t as createAgentRuntime};
|
|
2
|
+
//# sourceMappingURL=public.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"public.js","names":[],"sources":["../../../src/composition/runtime/public.ts"],"sourcesContent":["import { createRuntimeCompositionOwner } from './owner.ts'\nimport type { AgentRuntime, AgentRuntimeOptions } from './types.ts'\n\n/** Construct the immutable public composition facade; mutable internals stay closure-owned. */\nexport async function createAgentRuntime(options: AgentRuntimeOptions): Promise<AgentRuntime> {\n const owner = await createRuntimeCompositionOwner(options)\n const facade: AgentRuntime = {\n providers: () => owner.providers(),\n modelCatalog: (route, catalogOptions) => owner.modelCatalog(route, catalogOptions),\n agent: definition => owner.agent(definition),\n team: teamOptions => owner.team(teamOptions),\n logger: context => owner.logger(context),\n diagnostics: () => owner.diagnostics(),\n close: closeOptions => owner.close(closeOptions),\n }\n return Object.freeze(facade)\n}\n"],"mappings":"2DAIA,eAAsB,EAAmB,EAAqD,CAC5F,IAAM,EAAQ,MAAM,EAA8B,CAAO,EAUzD,OAAO,OAAO,OAAO,CARnB,cAAiB,EAAM,UAAU,EACjC,cAAe,EAAO,IAAmB,EAAM,aAAa,EAAO,CAAc,EACjF,MAAO,GAAc,EAAM,MAAM,CAAU,EAC3C,KAAM,GAAe,EAAM,KAAK,CAAW,EAC3C,OAAQ,GAAW,EAAM,OAAO,CAAO,EACvC,gBAAmB,EAAM,YAAY,EACrC,MAAO,GAAgB,EAAM,MAAM,CAAY,CAEvB,CAAC,CAC7B"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { JsonObject } from "../../primitives/json.js";
|
|
2
|
+
import { ObservationResourceInput } from "../../observation/event.js";
|
|
3
|
+
import { DeliveryMode, ObservationSpan, OpenObservationSpanInput } from "../../observation/port.js";
|
|
4
|
+
import { LogLevel, SdkLogger } from "../../logging/types.js";
|
|
5
|
+
import { ModelCatalogOptions } from "../../contract/model-info.js";
|
|
6
|
+
import { ComposableModelProviderPlugin, RuntimeProviderInfo } from "../provider/types.js";
|
|
7
|
+
import { RuntimeObservationExporterRegistration } from "../exporter/types.js";
|
|
8
|
+
import { ContentRedactor, ObservationProcessor } from "../../observation/telemetry-types.js";
|
|
9
|
+
import { RuntimeObservationHealthSnapshot } from "../observation/health.js";
|
|
10
|
+
import { RuntimeDiagnosticSnapshot } from "../observation/port.js";
|
|
11
|
+
import { RuntimeAgent, RuntimeAgentBindingInput } from "../agent/types.js";
|
|
12
|
+
import { RuntimeComponentCloseReport } from "../common/errors.js";
|
|
13
|
+
import { RuntimeOperationCloseSummary } from "../lifecycle/types.js";
|
|
14
|
+
import { RuntimeModelCatalogSnapshot } from "../model-catalog/types.js";
|
|
15
|
+
import { RuntimeAgentTeam, RuntimeAgentTeamOptions } from "../team/types.js";
|
|
16
|
+
//#region src/composition/runtime/types.d.ts
|
|
17
|
+
interface RuntimeOwnerObservabilityOptions {
|
|
18
|
+
readonly mode?: DeliveryMode;
|
|
19
|
+
readonly content?: 'none' | 'metadata';
|
|
20
|
+
readonly minimumLogLevel?: LogLevel;
|
|
21
|
+
readonly exporters?: readonly RuntimeObservationExporterRegistration[];
|
|
22
|
+
readonly processors?: readonly ObservationProcessor[];
|
|
23
|
+
readonly redactors?: readonly ContentRedactor[];
|
|
24
|
+
readonly includeErrorStacks?: boolean;
|
|
25
|
+
readonly openSpan?: (input: OpenObservationSpanInput) => ObservationSpan;
|
|
26
|
+
readonly maxQueueEvents?: number;
|
|
27
|
+
readonly maxQueueBytes?: number;
|
|
28
|
+
readonly maxBatchEvents?: number;
|
|
29
|
+
readonly maxBatchBytes?: number;
|
|
30
|
+
readonly flushTimeoutMs?: number;
|
|
31
|
+
readonly shutdownTimeoutMs?: number;
|
|
32
|
+
}
|
|
33
|
+
interface RuntimeObservationResourceInput extends ObservationResourceInput {}
|
|
34
|
+
/** Internal I3 owner input. Remaining public agent/processor fields join at their composition layer. */
|
|
35
|
+
interface RuntimeOwnerOptions {
|
|
36
|
+
readonly providers: readonly ComposableModelProviderPlugin[];
|
|
37
|
+
readonly defaultProvider?: string;
|
|
38
|
+
readonly signal?: AbortSignal;
|
|
39
|
+
readonly resource?: RuntimeObservationResourceInput;
|
|
40
|
+
readonly observability?: RuntimeOwnerObservabilityOptions;
|
|
41
|
+
readonly closeTimeoutMs?: number;
|
|
42
|
+
readonly startupTimeoutMs?: number;
|
|
43
|
+
readonly diagnosticMaxEvents?: number;
|
|
44
|
+
readonly diagnosticMaxBytes?: number;
|
|
45
|
+
}
|
|
46
|
+
interface RuntimeCloseReport {
|
|
47
|
+
readonly state: 'closed';
|
|
48
|
+
readonly quiescenceEnd: 'settled' | 'timeout' | 'caller-abort';
|
|
49
|
+
readonly deadlineReached: boolean;
|
|
50
|
+
readonly activeRunsAtClose: number;
|
|
51
|
+
readonly abortedRuns: number;
|
|
52
|
+
readonly unsettledRuns: number;
|
|
53
|
+
readonly operations: readonly RuntimeOperationCloseSummary[];
|
|
54
|
+
readonly components: readonly RuntimeComponentCloseReport[];
|
|
55
|
+
readonly observationHealth: RuntimeObservationHealthSnapshot;
|
|
56
|
+
}
|
|
57
|
+
interface RuntimeCompositionView {
|
|
58
|
+
providers(): readonly RuntimeProviderInfo[];
|
|
59
|
+
modelCatalog(route: string, options?: ModelCatalogOptions): Promise<RuntimeModelCatalogSnapshot>;
|
|
60
|
+
agent(definition: RuntimeAgentBindingInput): RuntimeAgent;
|
|
61
|
+
team(options: RuntimeAgentTeamOptions): RuntimeAgentTeam;
|
|
62
|
+
logger(context?: {
|
|
63
|
+
readonly scope?: string;
|
|
64
|
+
readonly fields?: Readonly<JsonObject>;
|
|
65
|
+
}): SdkLogger;
|
|
66
|
+
diagnostics(): RuntimeDiagnosticSnapshot;
|
|
67
|
+
close(options?: {
|
|
68
|
+
readonly signal?: AbortSignal;
|
|
69
|
+
}): Promise<RuntimeCloseReport>;
|
|
70
|
+
}
|
|
71
|
+
interface AgentRuntime extends RuntimeCompositionView {}
|
|
72
|
+
interface AgentRuntimeOptions extends RuntimeOwnerOptions {}
|
|
73
|
+
type DiagnosticSnapshot = RuntimeDiagnosticSnapshot;
|
|
74
|
+
//#endregion
|
|
75
|
+
export { AgentRuntime, AgentRuntimeOptions, DiagnosticSnapshot, RuntimeCloseReport, RuntimeCompositionView, RuntimeObservationResourceInput, RuntimeOwnerObservabilityOptions, RuntimeOwnerOptions };
|
|
76
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","names":[],"sources":["../../../src/composition/runtime/types.ts"],"mappings":";;;;;;;;;;;;;;;;UAgBiB;WACN,OAAO;WACP;WACA,kBAAkB;WAClB,qBAAqB;WACrB,sBAAsB;WACtB,qBAAqB;WACrB;WACA,YAAY,OAAO,6BAA6B;WAChD;WACA;WACA;WACA;WACA;WACA;;UAGM,wCAAwC;;UAGxC;WACN,oBAAoB;WACpB;WACA,SAAS;WACT,WAAW;WACX,gBAAgB;WAChB;WACA;WACA;WACA;;UAGM;WACN;WACA;WACA;WACA;WACA;WACA;WACA,qBAAqB;WACrB,qBAAqB;WACrB,mBAAmB;;UAGb;EACf,sBAAsB;EACtB,aAAa,eAAe,UAAU,sBAAsB,QAAQ;EACpE,MAAM,YAAY,2BAA2B;EAC7C,KAAK,SAAS,0BAA0B;EACxC,OAAO;aAAqB;aAAyB,SAAS,SAAS;MAAgB;EACvF,eAAe;EACf,MAAM;aAAqB,SAAS;MAAgB,QAAQ;;UAG7C,qBAAqB;UACrB,4BAA4B;KACjC,qBAAqB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{timeoutValue as e}from"../platform/config.js";import{AgentRuntimeConstructionError as t,checkPreflightAbort as n}from"./common/errors.js";import{RuntimeExporters as r}from"./exporter/lifecycle.js";import{activateProviders as i}from"./provider/activation.js";async function a(a,o,s,c,l){let u=e(l.startupTimeoutMs),d=e(l.rollbackTimeoutMs),f=l.signal;n(f);let p=c.platform.monotonicNow()+u,m,h=()=>(m??=c.platform.monotonicNow()+d,{at:m,now:()=>c.platform.monotonicNow()}),g=new r(a.exporters,c),_=[];try{if(_=i(o,a.providers,s,f,{startup:{at:p,now:()=>c.platform.monotonicNow()},rollback:h}),await g.ready(p,f),f?.aborted)throw new t({failureCode:`CAPABILITY_STARTUP_ABORTED`,stage:`activation`,reason:`aborted`});if(c.platform.monotonicNow()>=p)throw new t({failureCode:`CAPABILITY_STARTUP_TIMEOUT`,stage:`activation`,reason:`timed-out`});return Object.freeze({providers:_,exporters:g})}catch(e){let n=e instanceof t?e:new t({failureCode:`CAPABILITY_STARTUP_FAILED`,stage:`activation`,reason:`failed`}),r=h(),i=[...n.cleanup,...[..._].reverse().map(e=>e.close(r)),...await g.close(r.at)];throw new t({failureCode:n.failureCode,stage:n.stage,reason:n.reason,...n.component===void 0?{}:{component:n.component},...n.conflict===void 0?{}:{conflict:n.conflict},cleanup:i})}}export{a as activateRuntimeCapabilities};
|
|
2
|
+
//# sourceMappingURL=startup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"startup.js","names":[],"sources":["../../src/composition/startup.ts"],"sourcesContent":["import type { SdkLogger } from '../logging/types.ts'\nimport { RuntimeResources } from '../platform/resources.ts'\nimport { timeoutValue } from '../platform/config.ts'\nimport type { ModelRegistry } from '../runtime/registry.ts'\nimport { AgentRuntimeConstructionError, checkPreflightAbort } from './common/errors.ts'\nimport { RuntimeExporters } from './exporter/lifecycle.ts'\nimport { activateProviders, type ProviderRegistration } from './provider/activation.ts'\nimport type { RuntimeCapabilityPlan } from './preflight.ts'\n\nexport interface CapabilityStartupOptions {\n readonly startupTimeoutMs: number\n readonly rollbackTimeoutMs: number\n readonly signal?: AbortSignal\n}\n\n/** Transactional inner startup; the composition root supplies its canonical registry, logger and resources. */\nexport async function activateRuntimeCapabilities(\n plan: RuntimeCapabilityPlan, registry: ModelRegistry, logger: SdkLogger,\n resources: RuntimeResources, options: CapabilityStartupOptions,\n): Promise<{ readonly providers: readonly ProviderRegistration[]; readonly exporters: RuntimeExporters }> {\n const startupTimeoutMs = timeoutValue(options.startupTimeoutMs)\n const rollbackTimeoutMs = timeoutValue(options.rollbackTimeoutMs)\n const signal = options.signal\n checkPreflightAbort(signal)\n const deadlineAt = resources.platform.monotonicNow() + startupTimeoutMs\n let rollbackDeadlineAt: number | undefined\n const rollbackDeadline = () => {\n rollbackDeadlineAt ??= resources.platform.monotonicNow() + rollbackTimeoutMs\n return { at: rollbackDeadlineAt, now: () => resources.platform.monotonicNow() }\n }\n const exporters = new RuntimeExporters(plan.exporters, resources)\n let providers: readonly ProviderRegistration[] = []\n try {\n providers = activateProviders(registry, plan.providers, logger, signal, {\n startup: { at: deadlineAt, now: () => resources.platform.monotonicNow() }, rollback: rollbackDeadline,\n })\n await exporters.ready(deadlineAt, signal)\n if (signal?.aborted) throw new AgentRuntimeConstructionError({\n failureCode: 'CAPABILITY_STARTUP_ABORTED', stage: 'activation', reason: 'aborted',\n })\n if (resources.platform.monotonicNow() >= deadlineAt) throw new AgentRuntimeConstructionError({\n failureCode: 'CAPABILITY_STARTUP_TIMEOUT', stage: 'activation', reason: 'timed-out',\n })\n return Object.freeze({ providers, exporters })\n } catch (error) {\n // Capture the primary classification before cleanup can abort the caller or throw.\n const failure = error instanceof AgentRuntimeConstructionError ? error : new AgentRuntimeConstructionError({\n failureCode: 'CAPABILITY_STARTUP_FAILED', stage: 'activation', reason: 'failed',\n })\n const deadline = rollbackDeadline()\n const cleanup = [...failure.cleanup, ...[...providers].reverse().map(provider => provider.close(deadline)),\n ...await exporters.close(deadline.at)]\n throw new AgentRuntimeConstructionError({\n failureCode: failure.failureCode, stage: failure.stage, reason: failure.reason,\n ...(failure.component === undefined ? {} : { component: failure.component }),\n ...(failure.conflict === undefined ? {} : { conflict: failure.conflict }), cleanup,\n })\n }\n}\n"],"mappings":"yQAgBA,eAAsB,EACpB,EAA6B,EAAyB,EACtD,EAA6B,EAC2E,CACxG,IAAM,EAAmB,EAAa,EAAQ,gBAAgB,EACxD,EAAoB,EAAa,EAAQ,iBAAiB,EAC1D,EAAS,EAAQ,OACvB,EAAoB,CAAM,EAC1B,IAAM,EAAa,EAAU,SAAS,aAAa,EAAI,EACnD,EACE,OACJ,IAAuB,EAAU,SAAS,aAAa,EAAI,EACpD,CAAE,GAAI,EAAoB,QAAW,EAAU,SAAS,aAAa,CAAE,GAE1E,EAAY,IAAI,EAAiB,EAAK,UAAW,CAAS,EAC5D,EAA6C,CAAC,EAClD,GAAI,CAKF,GAJA,EAAY,EAAkB,EAAU,EAAK,UAAW,EAAQ,EAAQ,CACtE,QAAS,CAAE,GAAI,EAAY,QAAW,EAAU,SAAS,aAAa,CAAE,EAAG,SAAU,CACvF,CAAC,EACD,MAAM,EAAU,MAAM,EAAY,CAAM,EACpC,GAAQ,QAAS,MAAM,IAAI,EAA8B,CAC3D,YAAa,6BAA8B,MAAO,aAAc,OAAQ,SAC1E,CAAC,EACD,GAAI,EAAU,SAAS,aAAa,GAAK,EAAY,MAAM,IAAI,EAA8B,CAC3F,YAAa,6BAA8B,MAAO,aAAc,OAAQ,WAC1E,CAAC,EACD,OAAO,OAAO,OAAO,CAAE,YAAW,WAAU,CAAC,CAC/C,OAAS,EAAO,CAEd,IAAM,EAAU,aAAiB,EAAgC,EAAQ,IAAI,EAA8B,CACzG,YAAa,4BAA6B,MAAO,aAAc,OAAQ,QACzE,CAAC,EACK,EAAW,EAAiB,EAC5B,EAAU,CAAC,GAAG,EAAQ,QAAS,GAAG,CAAC,GAAG,CAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,GAAY,EAAS,MAAM,CAAQ,CAAC,EACvG,GAAG,MAAM,EAAU,MAAM,EAAS,EAAE,CAAC,EACvC,MAAM,IAAI,EAA8B,CACtC,YAAa,EAAQ,YAAa,MAAO,EAAQ,MAAO,OAAQ,EAAQ,OACxE,GAAI,EAAQ,YAAc,IAAA,GAAY,CAAC,EAAI,CAAE,UAAW,EAAQ,SAAU,EAC1E,GAAI,EAAQ,WAAa,IAAA,GAAY,CAAC,EAAI,CAAE,SAAU,EAAQ,QAAS,EAAI,SAC7E,CAAC,CACH,CACF"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=Object.freeze({members:8,idBytes:1024,metadataBytes:8192,closeTimeoutMs:3e4}),t=Object.freeze({invalid:`TEAM_OPTIONS_INVALID`,memberConflict:`TEAM_MEMBER_CONFLICT`,ownership:`TEAM_AGENT_OWNERSHIP_INVALID`,closed:`TEAM_CLOSED`});export{t as RUNTIME_TEAM_ERROR_CODES,e as RUNTIME_TEAM_LIMITS};
|
|
2
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","names":[],"sources":["../../../src/composition/team/config.ts"],"sourcesContent":["export const RUNTIME_TEAM_LIMITS = Object.freeze({\n members: 8,\n idBytes: 1_024,\n metadataBytes: 8 * 1_024,\n closeTimeoutMs: 30_000,\n})\n\nexport const RUNTIME_TEAM_ERROR_CODES = Object.freeze({\n invalid: 'TEAM_OPTIONS_INVALID',\n memberConflict: 'TEAM_MEMBER_CONFLICT',\n ownership: 'TEAM_AGENT_OWNERSHIP_INVALID',\n closed: 'TEAM_CLOSED',\n})\n"],"mappings":"AAAA,MAAa,EAAsB,OAAO,OAAO,CAC/C,QAAS,EACT,QAAS,KACT,cAAe,KACf,eAAgB,GAClB,CAAC,EAEY,EAA2B,OAAO,OAAO,CACpD,QAAS,uBACT,eAAgB,uBAChB,UAAW,+BACX,OAAQ,aACV,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{arrayData as e,boundedText as t,objectValue as n,ownData as r}from"../../capability/common/data.js";import{capabilityIdentityError as i}from"../../errors/capability-identity.js";import{captureRuntimeSessionOptions as a}from"../agent/options.js";import{memberName as o}from"../../agent/team/common.js";import{RUNTIME_TEAM_LIMITS as s}from"./config.js";const c=new Set([`id`,`members`,`maxMessages`,`maxMessageBytes`,`operationTimeoutMs`,`observerTimeoutMs`,`onEvent`]),l=new Set([`name`,`agent`,`description`,`instructions`,`role`,`tools`,`session`]);function u(u){let m=n(u);p(m,c);let h=t(r(m,`id`),s.idBytes),g=e(r(m,`members`),s.members);if(g.length===0)throw TypeError(`Runtime team requires at least one member`);let _=new Map,v=0,y=g.map((e,t)=>{let s=n(e);p(s,l);let c=o(r(s,`name`)),u=_.get(c);if(u!==void 0)throw i(`TEAM_MEMBER_CONFLICT`,`team-member-name`,u,t);_.set(c,t);let f=r(s,`role`,!1)??(t===0?`lead`:`peer`);if(f!==`lead`&&f!==`peer`)throw TypeError(`Runtime team member role is invalid`);if(f===`lead`&&++v>1)throw TypeError(`Runtime team has more than one lead`);let m=d(s,`description`),h=d(s,`instructions`),g=r(s,`tools`,!1);if(g!==void 0&&typeof g!=`boolean`&&g!==`full`&&g!==`reporting`)throw TypeError(`Runtime team tools flag is invalid`);return Object.freeze({name:c,agent:r(s,`agent`),role:f,session:a(r(s,`session`,!1)),...m===void 0?{}:{description:m},...h===void 0?{}:{instructions:h},...g===void 0?{}:{tools:g}})}),b=r(m,`onEvent`,!1);if(b!==void 0&&typeof b!=`function`)throw TypeError(`Runtime team observer is invalid`);let x=b===void 0?void 0:e=>{Reflect.apply(b,m,[e])};return Object.freeze({id:h,members:Object.freeze(y),...f(m,[`maxMessages`,`maxMessageBytes`,`operationTimeoutMs`,`observerTimeoutMs`]),...x===void 0?{}:{onEvent:x}})}function d(e,n){let i=r(e,n,!1);return i===void 0?void 0:t(i,s.metadataBytes)}function f(e,t){let n=Object.create(null);for(let i of t){let t=r(e,i,!1);if(t!==void 0){if(!Number.isSafeInteger(t)||Number(t)<1)throw TypeError(`Runtime team ${i} is invalid`);n[i]=Number(t)}}return n}function p(e,t){if(Reflect.ownKeys(e).some(e=>typeof e!=`string`||!t.has(e)))throw TypeError(`Runtime team options contain unsupported fields`)}export{u as captureRuntimeTeamOptions};
|
|
2
|
+
//# sourceMappingURL=options.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options.js","names":[],"sources":["../../../src/composition/team/options.ts"],"sourcesContent":["import { memberName } from '../../agent/team/common.ts'\nimport { arrayData, boundedText, objectValue, ownData } from '../common/data.ts'\nimport { captureRuntimeSessionOptions } from '../agent/options.ts'\nimport { capabilityIdentityError } from '../identity/error.ts'\nimport type { AgentTeamMemberInput, RuntimeAgentTeamEvent, RuntimeAgentTeamOptions } from './types.ts'\nimport { RUNTIME_TEAM_LIMITS } from './config.ts'\n\nconst ROOT_KEYS = new Set(['id', 'members', 'maxMessages', 'maxMessageBytes', 'operationTimeoutMs',\n 'observerTimeoutMs', 'onEvent'])\nconst MEMBER_KEYS = new Set(['name', 'agent', 'description', 'instructions', 'role', 'tools', 'session'])\n\nexport interface CapturedTeamMember extends AgentTeamMemberInput {\n readonly role: 'lead' | 'peer'\n readonly session: NonNullable<AgentTeamMemberInput['session']>\n}\n\nexport interface CapturedRuntimeTeamOptions extends RuntimeAgentTeamOptions {\n readonly members: readonly CapturedTeamMember[]\n readonly onEvent?: (event: RuntimeAgentTeamEvent) => void\n}\n\nexport function captureRuntimeTeamOptions(value: unknown): CapturedRuntimeTeamOptions {\n const source = objectValue(value)\n rejectUnknown(source, ROOT_KEYS)\n const id = boundedText(ownData(source, 'id'), RUNTIME_TEAM_LIMITS.idBytes)\n const members = arrayData(ownData(source, 'members'), RUNTIME_TEAM_LIMITS.members)\n if (members.length === 0) throw new TypeError('Runtime team requires at least one member')\n const seen = new Map<string, number>()\n let leads = 0\n const captured = members.map((raw, index): CapturedTeamMember => {\n const member = objectValue(raw)\n rejectUnknown(member, MEMBER_KEYS)\n const name = memberName(ownData(member, 'name'))\n const first = seen.get(name)\n if (first !== undefined) throw capabilityIdentityError(\n 'TEAM_MEMBER_CONFLICT', 'team-member-name', first, index,\n )\n seen.set(name, index)\n const role = ownData(member, 'role', false) ?? (index === 0 ? 'lead' : 'peer')\n if (role !== 'lead' && role !== 'peer') throw new TypeError('Runtime team member role is invalid')\n if (role === 'lead' && ++leads > 1) throw new TypeError('Runtime team has more than one lead')\n const description = optionalBounded(member, 'description')\n const instructions = optionalBounded(member, 'instructions')\n const tools = ownData(member, 'tools', false)\n if (tools !== undefined && typeof tools !== 'boolean'\n && tools !== 'full' && tools !== 'reporting') {\n throw new TypeError('Runtime team tools flag is invalid')\n }\n return Object.freeze({ name, agent: ownData(member, 'agent') as AgentTeamMemberInput['agent'], role,\n session: captureRuntimeSessionOptions(ownData(member, 'session', false)),\n ...(description === undefined ? {} : { description }),\n ...(instructions === undefined ? {} : { instructions }),\n ...(tools === undefined ? {} : { tools }) })\n })\n const callback = ownData(source, 'onEvent', false)\n if (callback !== undefined && typeof callback !== 'function') throw new TypeError('Runtime team observer is invalid')\n const onEvent = callback === undefined ? undefined\n : (event: RuntimeAgentTeamEvent): void => { Reflect.apply(callback, source, [event]) }\n return Object.freeze({ id, members: Object.freeze(captured),\n ...copyPositive(source, ['maxMessages', 'maxMessageBytes', 'operationTimeoutMs', 'observerTimeoutMs']),\n ...(onEvent === undefined ? {} : { onEvent }) })\n}\n\nfunction optionalBounded(source: object, key: string): string | undefined {\n const value = ownData(source, key, false)\n return value === undefined ? undefined : boundedText(value, RUNTIME_TEAM_LIMITS.metadataBytes)\n}\n\nfunction copyPositive(source: object, keys: readonly string[]): Record<string, number> {\n const output: Record<string, number> = Object.create(null) as Record<string, number>\n for (const key of keys) {\n const value = ownData(source, key, false)\n if (value === undefined) continue\n if (!Number.isSafeInteger(value) || Number(value) < 1) throw new TypeError(`Runtime team ${key} is invalid`)\n output[key] = Number(value)\n }\n return output\n}\n\nfunction rejectUnknown(source: object, keys: ReadonlySet<string>): void {\n if (Reflect.ownKeys(source).some(key => typeof key !== 'string' || !keys.has(key))) {\n throw new TypeError('Runtime team options contain unsupported fields')\n }\n}\n"],"mappings":"sWAOA,MAAM,EAAY,IAAI,IAAI,CAAC,KAAM,UAAW,cAAe,kBAAmB,qBAC5E,oBAAqB,SAAS,CAAC,EAC3B,EAAc,IAAI,IAAI,CAAC,OAAQ,QAAS,cAAe,eAAgB,OAAQ,QAAS,SAAS,CAAC,EAYxG,SAAgB,EAA0B,EAA4C,CACpF,IAAM,EAAS,EAAY,CAAK,EAChC,EAAc,EAAQ,CAAS,EAC/B,IAAM,EAAK,EAAY,EAAQ,EAAQ,IAAI,EAAG,EAAoB,OAAO,EACnE,EAAU,EAAU,EAAQ,EAAQ,SAAS,EAAG,EAAoB,OAAO,EACjF,GAAI,EAAQ,SAAW,EAAG,MAAU,UAAU,2CAA2C,EACzF,IAAM,EAAO,IAAI,IACb,EAAQ,EACN,EAAW,EAAQ,KAAK,EAAK,IAA8B,CAC/D,IAAM,EAAS,EAAY,CAAG,EAC9B,EAAc,EAAQ,CAAW,EACjC,IAAM,EAAO,EAAW,EAAQ,EAAQ,MAAM,CAAC,EACzC,EAAQ,EAAK,IAAI,CAAI,EAC3B,GAAI,IAAU,IAAA,GAAW,MAAM,EAC7B,uBAAwB,mBAAoB,EAAO,CACrD,EACA,EAAK,IAAI,EAAM,CAAK,EACpB,IAAM,EAAO,EAAQ,EAAQ,OAAQ,EAAK,IAAM,IAAU,EAAI,OAAS,QACvE,GAAI,IAAS,QAAU,IAAS,OAAQ,MAAU,UAAU,qCAAqC,EACjG,GAAI,IAAS,QAAU,EAAE,EAAQ,EAAG,MAAU,UAAU,qCAAqC,EAC7F,IAAM,EAAc,EAAgB,EAAQ,aAAa,EACnD,EAAe,EAAgB,EAAQ,cAAc,EACrD,EAAQ,EAAQ,EAAQ,QAAS,EAAK,EAC5C,GAAI,IAAU,IAAA,IAAa,OAAO,GAAU,WACvC,IAAU,QAAU,IAAU,YACjC,MAAU,UAAU,oCAAoC,EAE1D,OAAO,OAAO,OAAO,CAAE,OAAM,MAAO,EAAQ,EAAQ,OAAO,EAAoC,OAC7F,QAAS,EAA6B,EAAQ,EAAQ,UAAW,EAAK,CAAC,EACvE,GAAI,IAAgB,IAAA,GAAY,CAAC,EAAI,CAAE,aAAY,EACnD,GAAI,IAAiB,IAAA,GAAY,CAAC,EAAI,CAAE,cAAa,EACrD,GAAI,IAAU,IAAA,GAAY,CAAC,EAAI,CAAE,OAAM,CAAG,CAAC,CAC/C,CAAC,EACK,EAAW,EAAQ,EAAQ,UAAW,EAAK,EACjD,GAAI,IAAa,IAAA,IAAa,OAAO,GAAa,WAAY,MAAU,UAAU,kCAAkC,EACpH,IAAM,EAAU,IAAa,IAAA,GAAY,IAAA,GACpC,GAAuC,CAAE,QAAQ,MAAM,EAAU,EAAQ,CAAC,CAAK,CAAC,CAAE,EACvF,OAAO,OAAO,OAAO,CAAE,KAAI,QAAS,OAAO,OAAO,CAAQ,EACxD,GAAG,EAAa,EAAQ,CAAC,cAAe,kBAAmB,qBAAsB,mBAAmB,CAAC,EACrG,GAAI,IAAY,IAAA,GAAY,CAAC,EAAI,CAAE,SAAQ,CAAG,CAAC,CACnD,CAEA,SAAS,EAAgB,EAAgB,EAAiC,CACxE,IAAM,EAAQ,EAAQ,EAAQ,EAAK,EAAK,EACxC,OAAO,IAAU,IAAA,GAAY,IAAA,GAAY,EAAY,EAAO,EAAoB,aAAa,CAC/F,CAEA,SAAS,EAAa,EAAgB,EAAiD,CACrF,IAAM,EAAiC,OAAO,OAAO,IAAI,EACzD,IAAK,IAAM,KAAO,EAAM,CACtB,IAAM,EAAQ,EAAQ,EAAQ,EAAK,EAAK,EACpC,OAAU,IAAA,GACd,IAAI,CAAC,OAAO,cAAc,CAAK,GAAK,OAAO,CAAK,EAAI,EAAG,MAAU,UAAU,gBAAgB,EAAI,YAAY,EAC3G,EAAO,GAAO,OAAO,CAAK,CADiF,CAE7G,CACA,OAAO,CACT,CAEA,SAAS,EAAc,EAAgB,EAAiC,CACtE,GAAI,QAAQ,QAAQ,CAAM,CAAC,CAAC,KAAK,GAAO,OAAO,GAAQ,UAAY,CAAC,EAAK,IAAI,CAAG,CAAC,EAC/E,MAAU,UAAU,iDAAiD,CAEzE"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{AgentSdkError as e}from"../../errors/agent-sdk-error.js";import{boundedText as t,capturedMethod as n,objectValue as r,optionalAbortSignal as i,ownData as a}from"../../capability/common/data.js";import{COMPOSITION_LIMITS as o}from"../../capability/common/config.js";import{BoundaryFailure as s,atDeadline as c}from"../lifecycle/bounded.js";import{captureCloseSignal as l}from"../runtime/config.js";import{captureInvocationOptions as u}from"../agent/options.js";import{createRuntimeTeamMemberSession as d,preflightRuntimeTeamMember as f}from"../agent/session.js";import{NOT_APPLICABLE_USAGE_COVERAGE as p}from"../../support-safe/error.js";import{TEAM_TOOL_NAMES as m,memberName as h}from"../../agent/team/common.js";import{AgentTeam as g}from"../../agent/team/team.js";import{RUNTIME_TEAM_ERROR_CODES as _,RUNTIME_TEAM_LIMITS as v}from"./config.js";import{captureRuntimeTeamOptions as y}from"./options.js";var b=class{host;team;sessions;onClosed;lifecycle;id;view;closing;draining;closed=!1;activeRuns=new Set;constructor(e,t,n,r,i,a){this.host=e,this.team=t,this.sessions=n,this.onClosed=i,this.lifecycle=a,this.id=t.id,this.view=Object.freeze({id:t.id,memberNames:r,linkAgent:e=>this.linkAgent(e),sendMessage:e=>this.sendMessage(e),session:e=>this.session(e),run:(e,t,n)=>this.run(e,t,n),close:e=>this.close(e)})}assertActive(){if(this.host.operations.assertActive(),this.closed)throw new e(`Runtime team is closed`,_.closed)}session(t){this.assertActive();let n=this.sessions.get(h(t));if(n===void 0)throw new e(`Runtime team member is unavailable`,_.invalid);return n}run(e,t,n){if(this.assertActive(),typeof t!=`string`)throw TypeError(`Runtime team input must be a string`);let r=u(n),i=this.session(e),a=r.signal===void 0?this.lifecycle.signal:AbortSignal.any([r.signal,this.lifecycle.signal]),o=this.host.operations.execute(`team-operation`,{signal:a},e=>i.run(t,{...r,signal:e.signal})),s=o.then(()=>void 0,()=>void 0);return this.activeRuns.add(s),s.finally(()=>this.activeRuns.delete(s)),o}sendMessage(e){this.assertActive();let t=S(e);return this.host.operations.execute(`team-operation`,{...t.signal===void 0?{}:{signal:t.signal}},e=>this.team.sendMessage({...t,signal:e.signal}))}linkAgent(e){this.assertActive();let t=C(e,this.host,this.team.id),n=this.team.linkAgent(t),r=!0;return()=>{r&&=(n(),!1)}}close(t){if(this.closing!==void 0)return this.closing;let n=l(t),r,i;this.closing=new Promise((e,t)=>{r=e,i=t});let a=this.closing;a.catch(()=>void 0),this.closed=!0;try{this.lifecycle.abort(Error(`Runtime agent team is closing`));let t=[...this.activeRuns],a=[...this.sessions.values()],o=Promise.all([this.team.dispose(Error(`Runtime agent team is closing`)),Promise.all(t),Promise.all(a.map(e=>e.whenIdle()))]).then(()=>void 0).finally(()=>{this.sessions.clear()});this.draining=o,o.then(()=>this.onClosed(this),()=>void 0),c(this.host.resources,this.host.resources.platform.monotonicNow()+v.closeTimeoutMs,()=>o,n).then(r,t=>{let n=t instanceof s&&t.reason===`aborted`;i(new e(n?`Runtime team close wait was aborted`:`Runtime team did not close within 30000ms`,n?`TEAM_CLOSE_ABORTED`:`TEAM_DISPOSE_TIMEOUT`))})}catch(e){i(e)}return a}async closeForRuntime(e){try{return this.close(),await c(this.host.resources,e,()=>this.draining),Object.freeze({kind:`agent-team`,id:this.team.id,status:`closed`})}catch{return Object.freeze({kind:`agent-team`,id:this.team.id,status:`timed-out`,error:Object.freeze({code:`CAPABILITY_CLEANUP_TIMEOUT`,stage:`team-cleanup`,message:`Runtime agent team did not close before the shared deadline`})})}}};function x(e,t,n=()=>void 0){e.operations.assertActive();let r=y(t);for(let t of r.members)f(e,t.agent,t.session,t.tools===!1?[]:Object.values(m));let i=[],a=new AbortController,o=e=>{i.push(e)},s=new g({id:r.id,maxMembers:v.members,...r.maxMessages===void 0?{}:{maxMessages:r.maxMessages},...r.maxMessageBytes===void 0?{}:{maxMessageBytes:r.maxMessageBytes},...r.operationTimeoutMs===void 0?{}:{operationTimeoutMs:r.operationTimeoutMs},...r.observerTimeoutMs===void 0?{}:{observerTimeoutMs:r.observerTimeoutMs},onEvent:e=>{e.type!==`team-disposed`&&o(w(e))}},t=>{let n=e.operations.acquire(`team-operation`,{signal:t});return()=>n.settle()}),c=new Map,l=new Map,u=[],p=Object.freeze({attach(e,t={}){u.push(t)},toolsFor:e=>s.toolsFor(e),instructionsFor:e=>s.instructionsFor(e)});try{for(let t of r.members){let n=d(e,t.agent,t.session,{team:p,name:t.name,role:t.role,...t.description===void 0?{}:{description:t.description},...t.instructions===void 0?{}:{instructions:t.instructions},...t.tools===void 0?{}:{tools:t.tools}},a.signal);c.set(t.name,n.view),l.set(t.name,n.port)}for(let e of u){let t=h(e.name),n=l.get(t);if(n===void 0)throw Error(`Runtime team session '${t}' was not staged`);s.attach(n,e)}}catch(e){throw a.abort(Error(`Runtime agent team construction failed`)),s.dispose().catch(()=>void 0),e}o=t=>{e.operations.status!==`closed`&&r.onEvent?.(t)};for(let e of i)o(e);return new b(e,s,c,Object.freeze([...c.keys()]),e=>{n(e);try{o(Object.freeze({type:`team-closed`,teamId:s.id}))}catch{}},a)}function S(e){let t=r(e),n=new Set([`from`,`target`,`message`,`delivery`,`signal`]);if(Reflect.ownKeys(t).some(e=>typeof e!=`string`||!n.has(e)))throw TypeError(`Runtime team message contains unsupported fields`);let o=i(a(t,`signal`,!1)),s=a(t,`delivery`,!1);return Object.freeze({from:h(a(t,`from`)),target:h(a(t,`target`)),message:a(t,`message`),...s===void 0?{}:{delivery:s},...o===void 0?{}:{signal:o}})}function C(e,i,s){let c=r(e),l=h(a(c,`name`)),u=a(c,`description`,!1),d=r(a(c,`transport`)),f=t(a(d,`protocol`),o.identityBytes),p=t(a(d,`agentId`),o.identityBytes),m=n(d,`send`),g=i.observation.logger({scope:`sdk.team.transport`,fields:{teamId:s,member:l}});return Object.freeze({name:l,...u===void 0?{}:{description:t(u,8192)},transport:Object.freeze({protocol:f,agentId:p,send:e=>m({...e,logger:g})})})}function w(e){return e.type===`member-attached`?Object.freeze({type:e.type,member:e.member.name}):e.type===`member-linked`?Object.freeze({type:e.type,member:e.member.name,protocol:e.member.protocol??`unknown`}):e.type===`message-accepted`?Object.freeze({type:e.type,messageId:e.message.id,target:e.message.target}):e.type===`member-run-start`||e.type===`member-run-end`?Object.freeze(e):e.type===`member-run-error`?Object.freeze({type:e.type,member:e.member,error:Object.freeze({code:`TEAM_MEMBER_RUN_FAILED`,stage:`team-operation`,message:`Runtime team member operation failed`,usageCoverage:p,possiblyBilledAttemptsWithoutUsage:0})}):e.type===`team-disposed`?Object.freeze({type:`team-closed`,teamId:e.teamId}):Object.freeze({type:`member-run-end`,member:e.member})}export{x as createRuntimeAgentTeam};
|
|
2
|
+
//# sourceMappingURL=runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.js","names":[],"sources":["../../../src/composition/team/runtime.ts"],"sourcesContent":["import { AgentTeam } from '../../agent/team/team.ts'\nimport type { AgentSessionTeamPort, AgentSessionTeamAttachmentOptions } from '../../agent/define/session/types.ts'\nimport type {\n AgentTeamEvent, LinkAgentOptions, LinkedAgentResult, LinkedAgentSendInput,\n SendAgentMessageRequest, SendAgentMessageResult,\n} from '../../agent/team/types.ts'\nimport { memberName } from '../../agent/team/common.ts'\nimport { AgentSdkError } from '../../errors/agent-sdk-error.ts'\nimport { NOT_APPLICABLE_USAGE_COVERAGE } from '../../support-safe/error.ts'\nimport { atDeadline, BoundaryFailure } from '../lifecycle/bounded.ts'\nimport type { RuntimeAgentHost } from '../agent/session.ts'\nimport { createRuntimeTeamMemberSession, preflightRuntimeTeamMember } from '../agent/session.ts'\nimport { captureInvocationOptions } from '../agent/options.ts'\nimport { boundedText, capturedMethod, objectValue, optionalAbortSignal, ownData } from '../common/data.ts'\nimport { COMPOSITION_LIMITS } from '../common/config.ts'\nimport { captureCloseSignal } from '../runtime/config.ts'\nimport { captureRuntimeTeamOptions } from './options.ts'\nimport { RUNTIME_TEAM_ERROR_CODES, RUNTIME_TEAM_LIMITS } from './config.ts'\nimport { TEAM_TOOL_NAMES } from '../../agent/team/common.ts'\nimport type {\n RuntimeAgentTeam, RuntimeAgentTeamEvent, RuntimeTeamRegistration,\n} from './types.ts'\nimport type { RuntimeAgentInvocationOptions } from '../agent/types.ts'\nimport type { RuntimeAgentSession } from '../agent/types.ts'\nimport type { TeamSessionPort } from '../../agent/team/contracts.ts'\n\nclass RuntimeTeamValue implements RuntimeTeamRegistration {\n readonly id: string\n readonly view: RuntimeAgentTeam\n private closing: Promise<void> | undefined\n private draining: Promise<void> | undefined\n private closed = false\n private readonly activeRuns = new Set<Promise<void>>()\n\n constructor(\n private readonly host: RuntimeAgentHost,\n private readonly team: AgentTeam,\n private readonly sessions: Map<string, RuntimeAgentSession>,\n memberNames: readonly string[],\n private readonly onClosed: (registration: RuntimeTeamRegistration) => void,\n private readonly lifecycle: AbortController,\n ) {\n this.id = team.id\n this.view = Object.freeze({\n id: team.id, memberNames,\n linkAgent: (options: LinkAgentOptions) => this.linkAgent(options),\n sendMessage: (request: SendAgentMessageRequest) => this.sendMessage(request),\n session: (name: string) => this.session(name),\n run: (name: string, input: string, options?: RuntimeAgentInvocationOptions) => this.run(name, input, options),\n close: (options?: { readonly signal?: AbortSignal }) => this.close(options),\n })\n }\n\n private assertActive(): void {\n this.host.operations.assertActive()\n if (this.closed) throw new AgentSdkError('Runtime team is closed', RUNTIME_TEAM_ERROR_CODES.closed)\n }\n\n private session(name: string) {\n this.assertActive()\n const value = this.sessions.get(memberName(name))\n if (value === undefined) throw new AgentSdkError('Runtime team member is unavailable', RUNTIME_TEAM_ERROR_CODES.invalid)\n return value\n }\n\n private run(name: string, input: string, rawOptions?: Parameters<RuntimeAgentTeam['run']>[2]) {\n this.assertActive()\n if (typeof input !== 'string') throw new TypeError('Runtime team input must be a string')\n const options = captureInvocationOptions(rawOptions)\n const session = this.session(name)\n const signal = options.signal === undefined\n ? this.lifecycle.signal\n : AbortSignal.any([options.signal, this.lifecycle.signal])\n const running = this.host.operations.execute('team-operation', {\n signal,\n }, lease => session.run(input, { ...options, signal: lease.signal }))\n const settled = running.then(() => undefined, () => undefined)\n this.activeRuns.add(settled)\n void settled.finally(() => this.activeRuns.delete(settled))\n return running\n }\n\n private sendMessage(raw: SendAgentMessageRequest): Promise<SendAgentMessageResult> {\n this.assertActive()\n const request = captureMessage(raw)\n return this.host.operations.execute('team-operation', {\n ...(request.signal === undefined ? {} : { signal: request.signal }),\n }, lease => this.team.sendMessage({ ...request, signal: lease.signal }))\n }\n\n private linkAgent(raw: LinkAgentOptions): () => void {\n this.assertActive()\n const options = captureLink(raw, this.host, this.team.id)\n const unlink = this.team.linkAgent(options)\n let active = true\n return () => {\n if (!active) return\n unlink()\n active = false\n }\n }\n\n private close(raw?: { readonly signal?: AbortSignal }): Promise<void> {\n if (this.closing !== undefined) return this.closing\n const signal = captureCloseSignal(raw)\n let resolve!: () => void\n let reject!: (error: unknown) => void\n this.closing = new Promise<void>((done, fail) => { resolve = done; reject = fail })\n const shared = this.closing\n void shared.catch(() => undefined)\n this.closed = true\n try {\n this.lifecycle.abort(new Error('Runtime agent team is closing'))\n const runs = [...this.activeRuns]\n const sessions = [...this.sessions.values()]\n const draining = Promise.all([\n this.team.dispose(new Error('Runtime agent team is closing')),\n Promise.all(runs),\n Promise.all(sessions.map(session => session.whenIdle())),\n ]).then(() => undefined).finally(() => {\n // The runtime retains this lightweight registration for close reporting.\n // Member sessions can contain full histories and must not remain reachable\n // from a long-lived runtime after the team has settled.\n this.sessions.clear()\n })\n this.draining = draining\n void draining.then(() => this.onClosed(this), () => undefined)\n void atDeadline(\n this.host.resources, this.host.resources.platform.monotonicNow() + RUNTIME_TEAM_LIMITS.closeTimeoutMs,\n () => draining, signal,\n ).then(resolve, error => {\n const aborted = error instanceof BoundaryFailure && error.reason === 'aborted'\n reject(new AgentSdkError(\n aborted ? 'Runtime team close wait was aborted' : 'Runtime team did not close within 30000ms',\n aborted ? 'TEAM_CLOSE_ABORTED' : 'TEAM_DISPOSE_TIMEOUT',\n ))\n })\n } catch (error) { reject(error) }\n return shared\n }\n\n async closeForRuntime(deadlineAt: number) {\n try {\n // Cancellation and disposal must start even when quiescence used the entire deadline.\n this.close()\n await atDeadline(this.host.resources, deadlineAt, () => this.draining)\n return Object.freeze({ kind: 'agent-team' as const, id: this.team.id, status: 'closed' as const })\n } catch {\n return Object.freeze({ kind: 'agent-team' as const, id: this.team.id, status: 'timed-out' as const,\n error: Object.freeze({ code: 'CAPABILITY_CLEANUP_TIMEOUT', stage: 'team-cleanup',\n message: 'Runtime agent team did not close before the shared deadline' }) })\n }\n }\n}\n\nexport function createRuntimeAgentTeam(\n host: RuntimeAgentHost,\n raw: unknown,\n onClosed: (registration: RuntimeTeamRegistration) => void = () => undefined,\n): RuntimeTeamRegistration {\n host.operations.assertActive()\n const options = captureRuntimeTeamOptions(raw)\n for (const member of options.members) {\n preflightRuntimeTeamMember(host, member.agent, member.session,\n member.tools === false ? [] : Object.values(TEAM_TOOL_NAMES))\n }\n const pendingEvents: RuntimeAgentTeamEvent[] = []\n const lifecycle = new AbortController()\n let emit = (event: RuntimeAgentTeamEvent): void => { pendingEvents.push(event) }\n const team = new AgentTeam({ id: options.id, maxMembers: RUNTIME_TEAM_LIMITS.members,\n ...(options.maxMessages === undefined ? {} : { maxMessages: options.maxMessages }),\n ...(options.maxMessageBytes === undefined ? {} : { maxMessageBytes: options.maxMessageBytes }),\n ...(options.operationTimeoutMs === undefined ? {} : { operationTimeoutMs: options.operationTimeoutMs }),\n ...(options.observerTimeoutMs === undefined ? {} : { observerTimeoutMs: options.observerTimeoutMs }),\n onEvent: event => {\n // The composition owns additional direct runs and compactions; its close\n // event must wait for those too, not just the control-plane wake tasks.\n if (event.type !== 'team-disposed') emit(projectEvent(event))\n },\n }, signal => {\n const lease = host.operations.acquire('team-operation', { signal })\n return () => lease.settle()\n })\n const sessions = new Map<string, RuntimeAgentSession>()\n const ports = new Map<string, TeamSessionPort>()\n const attachments: AgentSessionTeamAttachmentOptions[] = []\n const stagingTeam: AgentSessionTeamPort = Object.freeze({\n attach(_session: Parameters<AgentSessionTeamPort['attach']>[0], attachment: AgentSessionTeamAttachmentOptions = {}) {\n attachments.push(attachment)\n },\n toolsFor: (sender: string) => team.toolsFor(sender),\n instructionsFor: (name: string) => team.instructionsFor(name),\n })\n try {\n for (const member of options.members) {\n const created = createRuntimeTeamMemberSession(host, member.agent, member.session, {\n team: stagingTeam, name: member.name, role: member.role,\n ...(member.description === undefined ? {} : { description: member.description }),\n ...(member.instructions === undefined ? {} : { instructions: member.instructions }),\n ...(member.tools === undefined ? {} : { tools: member.tools }),\n }, lifecycle.signal)\n sessions.set(member.name, created.view)\n ports.set(member.name, created.port)\n }\n for (const attachment of attachments) {\n const name = memberName(attachment.name)\n const port = ports.get(name)\n if (port === undefined) throw new Error(`Runtime team session '${name}' was not staged`)\n team.attach(port, attachment)\n }\n } catch (error) {\n lifecycle.abort(new Error('Runtime agent team construction failed'))\n void team.dispose().catch(() => undefined)\n throw error\n }\n emit = event => {\n // Physical transport work can outlive bounded runtime shutdown.\n if (host.operations.status !== 'closed') options.onEvent?.(event)\n }\n for (const event of pendingEvents) emit(event)\n return new RuntimeTeamValue(\n host, team, sessions, Object.freeze([...sessions.keys()]), registration => {\n onClosed(registration)\n try { emit(Object.freeze({ type: 'team-closed', teamId: team.id })) }\n catch { /* Lifecycle observers cannot change cleanup results. */ }\n }, lifecycle,\n )\n}\n\nfunction captureMessage(raw: unknown): SendAgentMessageRequest {\n const source = objectValue(raw)\n const allowed = new Set(['from', 'target', 'message', 'delivery', 'signal'])\n if (Reflect.ownKeys(source).some(key => typeof key !== 'string' || !allowed.has(key))) {\n throw new TypeError('Runtime team message contains unsupported fields')\n }\n const signal = optionalAbortSignal(ownData(source, 'signal', false))\n const delivery = ownData(source, 'delivery', false)\n return Object.freeze({ from: memberName(ownData(source, 'from')), target: memberName(ownData(source, 'target')),\n message: ownData(source, 'message') as SendAgentMessageRequest['message'],\n ...(delivery === undefined ? {} : { delivery: delivery as NonNullable<SendAgentMessageRequest['delivery']> }),\n ...(signal === undefined ? {} : { signal }) })\n}\n\nfunction captureLink(raw: unknown, host: RuntimeAgentHost, teamId: string): LinkAgentOptions {\n const source = objectValue(raw)\n const name = memberName(ownData(source, 'name'))\n const descriptionValue = ownData(source, 'description', false)\n const transport = objectValue(ownData(source, 'transport'))\n const protocol = boundedText(ownData(transport, 'protocol'), COMPOSITION_LIMITS.identityBytes)\n const agentId = boundedText(ownData(transport, 'agentId'), COMPOSITION_LIMITS.identityBytes)\n const send = capturedMethod<[LinkedAgentSendInput], Promise<LinkedAgentResult>>(transport, 'send')\n const logger = host.observation.logger({ scope: 'sdk.team.transport', fields: { teamId, member: name } })\n return Object.freeze({ name,\n ...(descriptionValue === undefined ? {} : {\n description: boundedText(descriptionValue, 8 * 1_024),\n }),\n transport: Object.freeze({ protocol, agentId,\n send: (input: LinkedAgentSendInput) => send({ ...input, logger }) }),\n })\n}\n\nfunction projectEvent(event: AgentTeamEvent): RuntimeAgentTeamEvent {\n if (event.type === 'member-attached') return Object.freeze({ type: event.type, member: event.member.name })\n if (event.type === 'member-linked') return Object.freeze({ type: event.type, member: event.member.name,\n protocol: event.member.protocol ?? 'unknown' })\n if (event.type === 'message-accepted') return Object.freeze({ type: event.type,\n messageId: event.message.id, target: event.message.target })\n if (event.type === 'member-run-start' || event.type === 'member-run-end') return Object.freeze(event)\n if (event.type === 'member-run-error') return Object.freeze({ type: event.type, member: event.member,\n error: Object.freeze({ code: 'TEAM_MEMBER_RUN_FAILED', stage: 'team-operation',\n message: 'Runtime team member operation failed', usageCoverage: NOT_APPLICABLE_USAGE_COVERAGE,\n possiblyBilledAttemptsWithoutUsage: 0 }) })\n if (event.type === 'team-disposed') return Object.freeze({ type: 'team-closed', teamId: event.teamId })\n return Object.freeze({ type: 'member-run-end', member: event.member })\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { SupportSafeError } from "../../support-safe/error.js";
|
|
2
|
+
import { TeamToolAccess } from "../../agent/team/contracts.js";
|
|
3
|
+
import { LinkAgentOptions, SendAgentMessageRequest, SendAgentMessageResult } from "../../agent/team/types.js";
|
|
4
|
+
import { RuntimeAgent, RuntimeAgentInvocationOptions, RuntimeAgentResponse, RuntimeAgentSession, RuntimeAgentSessionOptions } from "../agent/types.js";
|
|
5
|
+
//#region src/composition/team/types.d.ts
|
|
6
|
+
interface AgentTeamMemberInput {
|
|
7
|
+
readonly name: string;
|
|
8
|
+
readonly agent: RuntimeAgent;
|
|
9
|
+
readonly description?: string;
|
|
10
|
+
readonly instructions?: string;
|
|
11
|
+
readonly role?: 'lead' | 'peer';
|
|
12
|
+
readonly tools?: boolean | TeamToolAccess;
|
|
13
|
+
readonly session?: RuntimeAgentSessionOptions;
|
|
14
|
+
}
|
|
15
|
+
type RuntimeAgentTeamEvent = {
|
|
16
|
+
readonly type: 'member-attached';
|
|
17
|
+
readonly member: string;
|
|
18
|
+
} | {
|
|
19
|
+
readonly type: 'member-linked';
|
|
20
|
+
readonly member: string;
|
|
21
|
+
readonly protocol: string;
|
|
22
|
+
} | {
|
|
23
|
+
readonly type: 'message-accepted';
|
|
24
|
+
readonly messageId: string;
|
|
25
|
+
readonly target: string;
|
|
26
|
+
} | {
|
|
27
|
+
readonly type: 'member-run-start';
|
|
28
|
+
readonly member: string;
|
|
29
|
+
} | {
|
|
30
|
+
readonly type: 'member-run-end';
|
|
31
|
+
readonly member: string;
|
|
32
|
+
} | {
|
|
33
|
+
readonly type: 'member-run-error';
|
|
34
|
+
readonly member: string;
|
|
35
|
+
readonly error: SupportSafeError;
|
|
36
|
+
} | {
|
|
37
|
+
readonly type: 'team-closed';
|
|
38
|
+
readonly teamId: string;
|
|
39
|
+
};
|
|
40
|
+
interface RuntimeAgentTeamOptions {
|
|
41
|
+
readonly id: string;
|
|
42
|
+
readonly members: readonly AgentTeamMemberInput[];
|
|
43
|
+
readonly maxMessages?: number;
|
|
44
|
+
readonly maxMessageBytes?: number;
|
|
45
|
+
readonly operationTimeoutMs?: number;
|
|
46
|
+
readonly observerTimeoutMs?: number;
|
|
47
|
+
readonly onEvent?: (event: RuntimeAgentTeamEvent) => void;
|
|
48
|
+
}
|
|
49
|
+
interface RuntimeAgentTeam {
|
|
50
|
+
readonly id: string;
|
|
51
|
+
readonly memberNames: readonly string[];
|
|
52
|
+
linkAgent(options: LinkAgentOptions): () => void;
|
|
53
|
+
sendMessage(request: SendAgentMessageRequest): Promise<SendAgentMessageResult>;
|
|
54
|
+
session(name: string): RuntimeAgentSession;
|
|
55
|
+
run(name: string, input: string, options?: RuntimeAgentInvocationOptions): Promise<RuntimeAgentResponse>;
|
|
56
|
+
/** Cancels owned work and waits up to 30 seconds. Aborting the wait does not stop cleanup. */
|
|
57
|
+
close(options?: {
|
|
58
|
+
readonly signal?: AbortSignal;
|
|
59
|
+
}): Promise<void>;
|
|
60
|
+
}
|
|
61
|
+
//#endregion
|
|
62
|
+
export { AgentTeamMemberInput, RuntimeAgentTeam, RuntimeAgentTeamEvent, RuntimeAgentTeamOptions };
|
|
63
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","names":[],"sources":["../../../src/composition/team/types.ts"],"mappings":";;;;;UASiB;WACN;WACA,OAAO;WACP;WACA;WACA;WACA,kBAAkB;WAClB,UAAU;;KAGT;WACG;WAAkC;;WAClC;WAAgC;WAAyB;;WACzD;WAAmC;WAA4B;;WAC/D;WAAmC;;WACnC;WAAiC;;WACjC;WAAmC;WAAyB,OAAO;;WACnE;WAA8B;;UAE5B;WACN;WACA,kBAAkB;WAClB;WACA;WACA;WACA;WACA,WAAW,OAAO;;UAGZ;WACN;WACA;EACT,UAAU,SAAS;EACnB,YAAY,SAAS,0BAA0B,QAAQ;EACvD,QAAQ,eAAe;EACvB,IAAI,cAAc,eAAe,UAAU,gCAAgC,QAAQ;;EAEnF,MAAM;aAAqB,SAAS;MAAgB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","names":[],"sources":["../../../src/composition/tool-source/config.ts"],"mappings":";cAAa"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=1,t=Object.freeze({sources:128,identityBytes:256,revisionBytes:256,catalogTools:1024,catalogBytes:16777216}),n=Object.freeze({KIND_MISMATCH:`TOOL_SOURCE_KIND_MISMATCH`,API_UNSUPPORTED:`TOOL_SOURCE_API_UNSUPPORTED`,ID_CONFLICT:`TOOL_SOURCE_ID_CONFLICT`,NAME_CONFLICT:`TOOL_NAME_CONFLICT`,SNAPSHOT_INVALID:`TOOL_SOURCE_SNAPSHOT_INVALID`,SNAPSHOT_FAILED:`TOOL_SOURCE_SNAPSHOT_FAILED`,ABORTED:`TOOL_SOURCE_SNAPSHOT_ABORTED`});export{e as TOOL_SOURCE_API_VERSION,n as TOOL_SOURCE_ERROR_CODES,t as TOOL_SOURCE_LIMITS};
|
|
2
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","names":[],"sources":["../../../src/composition/tool-source/config.ts"],"sourcesContent":["export const TOOL_SOURCE_API_VERSION = 1 as const\n\nexport const TOOL_SOURCE_LIMITS = Object.freeze({\n sources: 128,\n identityBytes: 256,\n revisionBytes: 256,\n catalogTools: 1_024,\n catalogBytes: 16 * 1024 * 1024,\n})\n\nexport const TOOL_SOURCE_ERROR_CODES = Object.freeze({\n KIND_MISMATCH: 'TOOL_SOURCE_KIND_MISMATCH',\n API_UNSUPPORTED: 'TOOL_SOURCE_API_UNSUPPORTED',\n ID_CONFLICT: 'TOOL_SOURCE_ID_CONFLICT',\n NAME_CONFLICT: 'TOOL_NAME_CONFLICT',\n SNAPSHOT_INVALID: 'TOOL_SOURCE_SNAPSHOT_INVALID',\n SNAPSHOT_FAILED: 'TOOL_SOURCE_SNAPSHOT_FAILED',\n ABORTED: 'TOOL_SOURCE_SNAPSHOT_ABORTED',\n} as const)\n"],"mappings":"AAAA,MAAa,EAA0B,EAE1B,EAAqB,OAAO,OAAO,CAC9C,QAAS,IACT,cAAe,IACf,cAAe,IACf,aAAc,KACd,aAAc,QAChB,CAAC,EAEY,EAA0B,OAAO,OAAO,CACnD,cAAe,4BACf,gBAAiB,8BACjB,YAAa,0BACb,cAAe,qBACf,iBAAkB,+BAClB,gBAAiB,8BACjB,QAAS,8BACX,CAAU"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ToolSource, ToolSourceDefinition } from "../../agent/tool/source-types.js";
|
|
2
|
+
//#region src/composition/tool-source/definition.d.ts
|
|
3
|
+
/** Side-effect-free author helper; the caller's source remains mutable and borrowed. */
|
|
4
|
+
declare function defineToolSource(definition: ToolSourceDefinition): ToolSource;
|
|
5
|
+
//#endregion
|
|
6
|
+
export { defineToolSource };
|
|
7
|
+
//# sourceMappingURL=definition.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"definition.d.ts","names":[],"sources":["../../../src/composition/tool-source/definition.ts"],"mappings":";;;iBAWgB,iBAAiB,YAAY,uBAAuB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{AgentSdkError as e}from"../../errors/agent-sdk-error.js";import{arrayData as t,boundedText as n,objectValue as r,ownData as i}from"../../capability/common/data.js";import{capabilityIdentityError as a}from"../../errors/capability-identity.js";import{TOOL_SOURCE_ERROR_CODES as o,TOOL_SOURCE_LIMITS as s}from"./config.js";function c(e){return u(e,!1)}function l(e){if(e===void 0)return Object.freeze([]);let n=t(e,s.sources).map(e=>u(e,!0)),r=new Map;return n.forEach((e,t)=>{let n=r.get(e.id);if(n!==void 0)throw a(o.ID_CONFLICT,`tool-source-id`,n,t);r.set(e.id,t)}),Object.freeze(n)}function u(t,a){try{let c=r(t);if(a){if(i(c,`kind`)!==`tool-source`)throw new e(`Tool source kind is unsupported`,o.KIND_MISMATCH);if(i(c,`apiVersion`)!==1)throw new e(`Tool source API version is unsupported`,o.API_UNSUPPORTED)}let l=n(i(c,`id`),s.identityBytes),u;try{u=Reflect.get(c,`snapshot`)}catch{throw new e(`Tool source snapshot method could not be captured`,o.SNAPSHOT_INVALID)}if(typeof u!=`function`)throw new e(`Tool source snapshot method is invalid`,o.SNAPSHOT_INVALID);return Object.freeze({kind:`tool-source`,apiVersion:1,id:l,snapshot:e=>Reflect.apply(u,c,[e])})}catch(t){throw t instanceof e?t:new e(`Tool source definition is invalid`,o.SNAPSHOT_INVALID)}}export{l as captureToolSources,c as defineToolSource};
|
|
2
|
+
//# sourceMappingURL=definition.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"definition.js","names":[],"sources":["../../../src/composition/tool-source/definition.ts"],"sourcesContent":["import { AgentSdkError } from '../../errors/agent-sdk-error.ts'\nimport { arrayData, boundedText, objectValue, ownData } from '../common/data.ts'\nimport { capabilityIdentityError } from '../identity/error.ts'\nimport {\n TOOL_SOURCE_API_VERSION, TOOL_SOURCE_ERROR_CODES, TOOL_SOURCE_LIMITS,\n} from './config.ts'\nimport type {\n CapturedToolSource, ToolCatalogSnapshot, ToolSource, ToolSourceDefinition, ToolSourceSnapshotOptions,\n} from './types.ts'\n\n/** Side-effect-free author helper; the caller's source remains mutable and borrowed. */\nexport function defineToolSource(definition: ToolSourceDefinition): ToolSource {\n return captureDefinition(definition, false)\n}\n\nexport function captureToolSources(value: unknown): readonly CapturedToolSource[] {\n if (value === undefined) return Object.freeze([])\n const entries = arrayData(value, TOOL_SOURCE_LIMITS.sources)\n const captured = entries.map(entry => captureDefinition(entry, true))\n const seen = new Map<string, number>()\n captured.forEach((source, index) => {\n const first = seen.get(source.id)\n if (first !== undefined) throw capabilityIdentityError(\n TOOL_SOURCE_ERROR_CODES.ID_CONFLICT, 'tool-source-id', first, index,\n )\n seen.set(source.id, index)\n })\n return Object.freeze(captured)\n}\n\nfunction captureDefinition(value: unknown, requireMarker: boolean): CapturedToolSource {\n try {\n const source = objectValue(value)\n if (requireMarker) {\n const kind = ownData(source, 'kind')\n if (kind !== 'tool-source') throw new AgentSdkError('Tool source kind is unsupported', TOOL_SOURCE_ERROR_CODES.KIND_MISMATCH)\n const version = ownData(source, 'apiVersion')\n if (version !== TOOL_SOURCE_API_VERSION) throw new AgentSdkError('Tool source API version is unsupported', TOOL_SOURCE_ERROR_CODES.API_UNSUPPORTED)\n }\n const id = boundedText(ownData(source, 'id'), TOOL_SOURCE_LIMITS.identityBytes)\n let snapshotMethod: unknown\n try { snapshotMethod = Reflect.get(source, 'snapshot') }\n catch { throw new AgentSdkError('Tool source snapshot method could not be captured', TOOL_SOURCE_ERROR_CODES.SNAPSHOT_INVALID) }\n if (typeof snapshotMethod !== 'function') throw new AgentSdkError('Tool source snapshot method is invalid', TOOL_SOURCE_ERROR_CODES.SNAPSHOT_INVALID)\n const snapshot = (options: ToolSourceSnapshotOptions): ToolCatalogSnapshot =>\n Reflect.apply(snapshotMethod, source, [options]) as ToolCatalogSnapshot\n return Object.freeze({ kind: 'tool-source', apiVersion: TOOL_SOURCE_API_VERSION, id, snapshot })\n } catch (error) {\n if (error instanceof AgentSdkError) throw error\n throw new AgentSdkError('Tool source definition is invalid', TOOL_SOURCE_ERROR_CODES.SNAPSHOT_INVALID)\n }\n}\n"],"mappings":"uUAWA,SAAgB,EAAiB,EAA8C,CAC7E,OAAO,EAAkB,EAAY,EAAK,CAC5C,CAEA,SAAgB,EAAmB,EAA+C,CAChF,GAAI,IAAU,IAAA,GAAW,OAAO,OAAO,OAAO,CAAC,CAAC,EAEhD,IAAM,EADU,EAAU,EAAO,EAAmB,OAC7B,CAAC,CAAC,IAAI,GAAS,EAAkB,EAAO,EAAI,CAAC,EAC9D,EAAO,IAAI,IAQjB,OAPA,EAAS,SAAS,EAAQ,IAAU,CAClC,IAAM,EAAQ,EAAK,IAAI,EAAO,EAAE,EAChC,GAAI,IAAU,IAAA,GAAW,MAAM,EAC7B,EAAwB,YAAa,iBAAkB,EAAO,CAChE,EACA,EAAK,IAAI,EAAO,GAAI,CAAK,CAC3B,CAAC,EACM,OAAO,OAAO,CAAQ,CAC/B,CAEA,SAAS,EAAkB,EAAgB,EAA4C,CACrF,GAAI,CACF,IAAM,EAAS,EAAY,CAAK,EAChC,GAAI,EAAe,CAEjB,GADa,EAAQ,EAAQ,MACtB,IAAM,cAAe,MAAM,IAAI,EAAc,kCAAmC,EAAwB,aAAa,EAE5H,GADgB,EAAQ,EAAQ,YACtB,IAAA,EAA+B,MAAM,IAAI,EAAc,yCAA0C,EAAwB,eAAe,CACpJ,CACA,IAAM,EAAK,EAAY,EAAQ,EAAQ,IAAI,EAAG,EAAmB,aAAa,EAC1E,EACJ,GAAI,CAAE,EAAiB,QAAQ,IAAI,EAAQ,UAAU,CAAE,MACjD,CAAE,MAAM,IAAI,EAAc,oDAAqD,EAAwB,gBAAgB,CAAE,CAC/H,GAAI,OAAO,GAAmB,WAAY,MAAM,IAAI,EAAc,yCAA0C,EAAwB,gBAAgB,EAGpJ,OAAO,OAAO,OAAO,CAAE,KAAM,cAAe,WAAA,EAAqC,KAAI,SAFnE,GAChB,QAAQ,MAAM,EAAgB,EAAQ,CAAC,CAAO,CAAC,CAC6C,CAAC,CACjG,OAAS,EAAO,CAEd,MADI,aAAiB,EAAqB,EACpC,IAAI,EAAc,oCAAqC,EAAwB,gBAAgB,CACvG,CACF"}
|
|
@@ -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{capabilityIdentityError as i,isCapabilityIdentityError as a}from"../../errors/capability-identity.js";import{beginCoreCapabilityOperation as o}from"../../platform/capability-operation.js";import{captureToolDefinitions as s}from"../../agent/tool/capture.js";import{TOOL_SOURCE_ERROR_CODES as c,TOOL_SOURCE_LIMITS as l}from"./config.js";function u(u,f,p,m=[]){let h=[],g=[],_=new Map(m.map((e,t)=>[e,t])),v=0;for(let y of u){let u=p.child({toolSourceId:y.id}),b=o(u,`core-tool-source`,`snapshot`);if(f.aborted)throw b.abort(),new e(`Tool source snapshot was aborted`,c.ABORTED);let x;try{x=y.snapshot({signal:f,logger:u})}catch(t){throw f.aborted?b.abort():b.fail(t),f.aborted?new e(`Tool source snapshot was aborted`,c.ABORTED,{cause:t}):new e(`Tool source snapshot failed`,c.SNAPSHOT_FAILED,{cause:t})}if(x instanceof Promise)throw x.catch(()=>void 0),b.fail(new e(`Tool source snapshot must be synchronous`,c.SNAPSHOT_INVALID)),new e(`Tool source snapshot must be synchronous`,c.SNAPSHOT_INVALID);try{let e=n(x),a=t(r(e,`revision`),l.revisionBytes),o=s(r(e,`tools`));if(h.length+o.length>l.catalogTools)throw TypeError(`Tool catalog count exceeds its bound`);if(v+=d(o),v>l.catalogBytes)throw TypeError(`Tool catalog bytes exceed their bound`);for(let e of o){let t=m.length+h.length,n=_.get(e.name);if(n!==void 0)throw i(c.NAME_CONFLICT,`tool-name`,n,t);_.set(e.name,t),h.push(e)}g.push(Object.freeze({sourceId:y.id,revision:a})),b.success()}catch(t){throw b.fail(t),a(t)?t:new e(`Tool source snapshot is invalid`,c.SNAPSHOT_INVALID)}}return Object.freeze({tools:Object.freeze(h),references:Object.freeze(g)})}function d(e){let t=e.map(e=>({name:e.name,description:e.description,parameters:e.parameters,...e.timeoutMs===void 0?{}:{timeoutMs:e.timeoutMs}}));return new TextEncoder().encode(JSON.stringify(t)).byteLength}export{u as snapshotToolSources};
|
|
2
|
+
//# sourceMappingURL=snapshot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snapshot.js","names":[],"sources":["../../../src/composition/tool-source/snapshot.ts"],"sourcesContent":["import { AgentSdkError } from '../../errors/agent-sdk-error.ts'\nimport type { SdkLogger } from '../../logging/types.ts'\nimport { captureToolDefinitions } from '../../agent/tool/capture.ts'\nimport type { ToolDefinition } from '../../agent/tool/definition.ts'\nimport { boundedText, objectValue, ownData } from '../common/data.ts'\nimport { capabilityIdentityError, isCapabilityIdentityError } from '../identity/error.ts'\nimport { TOOL_SOURCE_ERROR_CODES, TOOL_SOURCE_LIMITS } from './config.ts'\nimport { beginCoreCapabilityOperation } from '../logging/capability.ts'\nimport type { CapturedToolSource, ToolSourceRunReference, ToolSourceRunSnapshot } from './types.ts'\n\n/** Acquire one synchronous immutable generation from every source. */\nexport function snapshotToolSources(\n sources: readonly CapturedToolSource[],\n signal: AbortSignal,\n logger: SdkLogger,\n occupiedNames: readonly string[] = [],\n): ToolSourceRunSnapshot {\n const tools: ToolDefinition[] = []\n const references: ToolSourceRunReference[] = []\n const names = new Map(occupiedNames.map((name, index) => [name, index]))\n let catalogBytes = 0\n for (const source of sources) {\n const sourceLogger = logger.child({ toolSourceId: source.id })\n const operation = beginCoreCapabilityOperation(sourceLogger, 'core-tool-source', 'snapshot')\n if (signal.aborted) {\n operation.abort()\n throw new AgentSdkError('Tool source snapshot was aborted', TOOL_SOURCE_ERROR_CODES.ABORTED)\n }\n let raw: unknown\n try { raw = source.snapshot({ signal, logger: sourceLogger }) }\n catch (error) {\n if (signal.aborted) operation.abort(); else operation.fail(error)\n if (signal.aborted) throw new AgentSdkError('Tool source snapshot was aborted', TOOL_SOURCE_ERROR_CODES.ABORTED, { cause: error })\n throw new AgentSdkError('Tool source snapshot failed', TOOL_SOURCE_ERROR_CODES.SNAPSHOT_FAILED, { cause: error })\n }\n if (raw instanceof Promise) {\n void raw.catch(() => undefined)\n operation.fail(new AgentSdkError('Tool source snapshot must be synchronous', TOOL_SOURCE_ERROR_CODES.SNAPSHOT_INVALID))\n throw new AgentSdkError('Tool source snapshot must be synchronous', TOOL_SOURCE_ERROR_CODES.SNAPSHOT_INVALID)\n }\n try {\n const snapshot = objectValue(raw)\n const revision = boundedText(ownData(snapshot, 'revision'), TOOL_SOURCE_LIMITS.revisionBytes)\n const captured = captureToolDefinitions(ownData(snapshot, 'tools'))\n if (tools.length + captured.length > TOOL_SOURCE_LIMITS.catalogTools) throw new TypeError('Tool catalog count exceeds its bound')\n catalogBytes += publicCatalogBytes(captured)\n if (catalogBytes > TOOL_SOURCE_LIMITS.catalogBytes) throw new TypeError('Tool catalog bytes exceed their bound')\n for (const tool of captured) {\n const index = occupiedNames.length + tools.length\n const first = names.get(tool.name)\n if (first !== undefined) throw capabilityIdentityError(\n TOOL_SOURCE_ERROR_CODES.NAME_CONFLICT, 'tool-name', first, index,\n )\n names.set(tool.name, index)\n tools.push(tool)\n }\n references.push(Object.freeze({ sourceId: source.id, revision }))\n operation.success()\n } catch (error) {\n operation.fail(error)\n if (isCapabilityIdentityError(error)) throw error\n throw new AgentSdkError('Tool source snapshot is invalid', TOOL_SOURCE_ERROR_CODES.SNAPSHOT_INVALID)\n }\n }\n return Object.freeze({ tools: Object.freeze(tools), references: Object.freeze(references) })\n}\n\nfunction publicCatalogBytes(tools: readonly ToolDefinition[]): number {\n const value = tools.map(tool => ({\n name: tool.name, description: tool.description, parameters: tool.parameters,\n ...(tool.timeoutMs === undefined ? {} : { timeoutMs: tool.timeoutMs }),\n }))\n return new TextEncoder().encode(JSON.stringify(value)).byteLength\n}\n"],"mappings":"kfAWA,SAAgB,EACd,EACA,EACA,EACA,EAAmC,CAAC,EACb,CACvB,IAAM,EAA0B,CAAC,EAC3B,EAAuC,CAAC,EACxC,EAAQ,IAAI,IAAI,EAAc,KAAK,EAAM,IAAU,CAAC,EAAM,CAAK,CAAC,CAAC,EACnE,EAAe,EACnB,IAAK,IAAM,KAAU,EAAS,CAC5B,IAAM,EAAe,EAAO,MAAM,CAAE,aAAc,EAAO,EAAG,CAAC,EACvD,EAAY,EAA6B,EAAc,mBAAoB,UAAU,EAC3F,GAAI,EAAO,QAET,MADA,EAAU,MAAM,EACV,IAAI,EAAc,mCAAoC,EAAwB,OAAO,EAE7F,IAAI,EACJ,GAAI,CAAE,EAAM,EAAO,SAAS,CAAE,SAAQ,OAAQ,CAAa,CAAC,CAAE,OACvD,EAAO,CAGZ,MAFI,EAAO,QAAS,EAAU,MAAM,EAAQ,EAAU,KAAK,CAAK,EAC5D,EAAO,QAAe,IAAI,EAAc,mCAAoC,EAAwB,QAAS,CAAE,MAAO,CAAM,CAAC,EAC3H,IAAI,EAAc,8BAA+B,EAAwB,gBAAiB,CAAE,MAAO,CAAM,CAAC,CAClH,CACA,GAAI,aAAe,QAGjB,MAFA,EAAS,UAAY,IAAA,EAAS,EAC9B,EAAU,KAAK,IAAI,EAAc,2CAA4C,EAAwB,gBAAgB,CAAC,EAChH,IAAI,EAAc,2CAA4C,EAAwB,gBAAgB,EAE9G,GAAI,CACF,IAAM,EAAW,EAAY,CAAG,EAC1B,EAAW,EAAY,EAAQ,EAAU,UAAU,EAAG,EAAmB,aAAa,EACtF,EAAW,EAAuB,EAAQ,EAAU,OAAO,CAAC,EAClE,GAAI,EAAM,OAAS,EAAS,OAAS,EAAmB,aAAc,MAAU,UAAU,sCAAsC,EAEhI,GADA,GAAgB,EAAmB,CAAQ,EACvC,EAAe,EAAmB,aAAc,MAAU,UAAU,uCAAuC,EAC/G,IAAK,IAAM,KAAQ,EAAU,CAC3B,IAAM,EAAQ,EAAc,OAAS,EAAM,OACrC,EAAQ,EAAM,IAAI,EAAK,IAAI,EACjC,GAAI,IAAU,IAAA,GAAW,MAAM,EAC7B,EAAwB,cAAe,YAAa,EAAO,CAC7D,EACA,EAAM,IAAI,EAAK,KAAM,CAAK,EAC1B,EAAM,KAAK,CAAI,CACjB,CACA,EAAW,KAAK,OAAO,OAAO,CAAE,SAAU,EAAO,GAAI,UAAS,CAAC,CAAC,EAChE,EAAU,QAAQ,CACpB,OAAS,EAAO,CAGd,MAFA,EAAU,KAAK,CAAK,EAChB,EAA0B,CAAK,EAAS,EACtC,IAAI,EAAc,kCAAmC,EAAwB,gBAAgB,CACrG,CACF,CACA,OAAO,OAAO,OAAO,CAAE,MAAO,OAAO,OAAO,CAAK,EAAG,WAAY,OAAO,OAAO,CAAU,CAAE,CAAC,CAC7F,CAEA,SAAS,EAAmB,EAA0C,CACpE,IAAM,EAAQ,EAAM,IAAI,IAAS,CAC/B,KAAM,EAAK,KAAM,YAAa,EAAK,YAAa,WAAY,EAAK,WACjE,GAAI,EAAK,YAAc,IAAA,GAAY,CAAC,EAAI,CAAE,UAAW,EAAK,SAAU,CACtE,EAAE,EACF,OAAO,IAAI,YAAY,CAAC,CAAC,OAAO,KAAK,UAAU,CAAK,CAAC,CAAC,CAAC,UACzD"}
|