@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,117 @@
|
|
|
1
|
+
import { StreamChunk } from "../stream/chunk.js";
|
|
2
|
+
import { AgentSdkError } from "../errors/agent-sdk-error.js";
|
|
3
|
+
import { CorrelationContext, ObservationRunScope, SpanId, TraceId } from "./context.js";
|
|
4
|
+
import { ObservationResource, OperationStatus, SafeErrorRecord } from "./event.js";
|
|
5
|
+
import { ObservationDeliverySummary, ObservationPort } from "./port.js";
|
|
6
|
+
import { AttemptUsageReport, DispatchState, UsageCounters, UsageCoverage } from "./usage.js";
|
|
7
|
+
import { SdkLogger } from "../logging/types.js";
|
|
8
|
+
//#region src/observation/report.d.ts
|
|
9
|
+
interface ModelCallReport {
|
|
10
|
+
readonly runId: string;
|
|
11
|
+
readonly traceId: TraceId;
|
|
12
|
+
readonly modelCallId: string;
|
|
13
|
+
readonly spanId: SpanId;
|
|
14
|
+
readonly provider: string;
|
|
15
|
+
/** Provider family independently of the selected route, when installed as a plugin. */
|
|
16
|
+
readonly providerFamily?: string;
|
|
17
|
+
/** Exact plugin installation that owned the selected route. */
|
|
18
|
+
readonly providerPluginId?: string;
|
|
19
|
+
readonly model: string;
|
|
20
|
+
readonly status: OperationStatus;
|
|
21
|
+
readonly startedAt: string;
|
|
22
|
+
readonly endedAt: string;
|
|
23
|
+
readonly durationMs: number;
|
|
24
|
+
readonly finishReason?: string;
|
|
25
|
+
/** Logical dispatch state, retained even when an adapter did not expose physical attempts. */
|
|
26
|
+
readonly dispatchState?: DispatchState;
|
|
27
|
+
readonly coverage: UsageCoverage;
|
|
28
|
+
readonly reported: UsageCounters;
|
|
29
|
+
readonly estimated?: UsageCounters;
|
|
30
|
+
readonly attempts: readonly AttemptUsageReport[];
|
|
31
|
+
readonly possiblyBilledAttemptsWithoutUsage: number;
|
|
32
|
+
readonly authoritative: boolean;
|
|
33
|
+
readonly delivery: ObservationDeliverySummary;
|
|
34
|
+
readonly error?: SafeErrorRecord;
|
|
35
|
+
}
|
|
36
|
+
interface ModelCallHandle extends AsyncIterable<StreamChunk> {
|
|
37
|
+
readonly runId: string;
|
|
38
|
+
readonly modelCallId: string;
|
|
39
|
+
readonly report: Promise<ModelCallReport>;
|
|
40
|
+
}
|
|
41
|
+
/** Safe facts known immediately before one physical provider dispatch. */
|
|
42
|
+
interface StartProviderAttemptInput {
|
|
43
|
+
readonly provider: string;
|
|
44
|
+
readonly model: string;
|
|
45
|
+
readonly method: string;
|
|
46
|
+
/** Scheme, host, and explicit non-default port only; never a path or query. */
|
|
47
|
+
readonly origin: string;
|
|
48
|
+
}
|
|
49
|
+
/** Terminal facts supplied by a transport after exactly one dispatch boundary. */
|
|
50
|
+
interface EndProviderAttemptInput {
|
|
51
|
+
readonly status: OperationStatus;
|
|
52
|
+
readonly dispatchState: DispatchState;
|
|
53
|
+
readonly reported?: UsageCounters;
|
|
54
|
+
readonly httpStatus?: number;
|
|
55
|
+
readonly providerRequestId?: string;
|
|
56
|
+
/** Must already be safe for support reports; raw response bodies are forbidden. */
|
|
57
|
+
readonly error?: SafeErrorRecord;
|
|
58
|
+
}
|
|
59
|
+
/** Safe scheduling facts between two physical provider attempts. */
|
|
60
|
+
interface ProviderRetryScheduledInput {
|
|
61
|
+
readonly nextAttemptNumber: number;
|
|
62
|
+
readonly delayMs: number;
|
|
63
|
+
readonly failureCode: string;
|
|
64
|
+
}
|
|
65
|
+
/** One physical provider-attempt lifecycle owned by the model-call handle. */
|
|
66
|
+
interface ProviderAttemptHandle {
|
|
67
|
+
readonly attemptId: string;
|
|
68
|
+
readonly attemptNumber: number;
|
|
69
|
+
readonly traceparent: string;
|
|
70
|
+
end(input: EndProviderAttemptInput): AttemptUsageReport;
|
|
71
|
+
}
|
|
72
|
+
interface ModelInvocationContext {
|
|
73
|
+
readonly observation?: ObservationPort;
|
|
74
|
+
/** Safe SDK/service/runtime identity copied onto nested provider operations. */
|
|
75
|
+
readonly resource?: ObservationResource;
|
|
76
|
+
readonly correlation?: Partial<CorrelationContext>;
|
|
77
|
+
readonly terminalCheckpointOwner?: 'model-call' | 'agent-run';
|
|
78
|
+
/** Shared sequence/monotonic scope when this call belongs to a larger agent run. */
|
|
79
|
+
readonly scope?: ObservationRunScope;
|
|
80
|
+
/** Always present on AgentRuntime calls; optional for preserved low-level callers. */
|
|
81
|
+
readonly logger?: SdkLogger;
|
|
82
|
+
/** Declares that the adapter will report the real network boundary itself. */
|
|
83
|
+
readonly declareProviderAttemptAccounting?: () => void;
|
|
84
|
+
/**
|
|
85
|
+
* Internal transport accounting boundary. HTTP providers call this immediately
|
|
86
|
+
* before dispatch; audit mode may reject before any network request is invoked.
|
|
87
|
+
*/
|
|
88
|
+
readonly startProviderAttempt?: (input: StartProviderAttemptInput, signal?: AbortSignal) => Promise<ProviderAttemptHandle>;
|
|
89
|
+
readonly recordProviderRetry?: (input: ProviderRetryScheduledInput) => void;
|
|
90
|
+
}
|
|
91
|
+
declare const OBSERVATION_ERROR_CODES: Readonly<{
|
|
92
|
+
readonly AUDIT_UNAVAILABLE: 'OBSERVABILITY_AUDIT_UNAVAILABLE';
|
|
93
|
+
readonly CAPTURE_REJECTED: 'OBSERVABILITY_CAPTURE_REJECTED';
|
|
94
|
+
readonly PROCESSOR_FAILED: 'OBSERVABILITY_PROCESSOR_FAILED';
|
|
95
|
+
readonly EXPORT_FAILED: 'OBSERVABILITY_EXPORT_FAILED';
|
|
96
|
+
readonly FLUSH_TIMEOUT: 'OBSERVABILITY_FLUSH_TIMEOUT';
|
|
97
|
+
readonly JOURNAL_CORRUPT: 'OBSERVABILITY_JOURNAL_CORRUPT';
|
|
98
|
+
readonly JOURNAL_IO: 'OBSERVABILITY_JOURNAL_IO';
|
|
99
|
+
readonly BROWSER_QUOTA: 'OBSERVABILITY_BROWSER_QUOTA';
|
|
100
|
+
readonly OTEL_PROVIDER_UNCONFIGURED: 'OTEL_PROVIDER_UNCONFIGURED';
|
|
101
|
+
readonly OPERATION_TERMINAL_MISSING: 'OPERATION_TERMINAL_MISSING';
|
|
102
|
+
readonly LEDGER_LIMIT_EXCEEDED: 'LEDGER_LIMIT_EXCEEDED';
|
|
103
|
+
readonly USAGE_MISSING: 'USAGE_MISSING';
|
|
104
|
+
readonly USAGE_REQUIRED: 'USAGE_REQUIRED';
|
|
105
|
+
readonly USAGE_INVALID: 'USAGE_INVALID';
|
|
106
|
+
readonly USAGE_COUNTER_OVERFLOW: 'USAGE_COUNTER_OVERFLOW';
|
|
107
|
+
}>;
|
|
108
|
+
declare class ModelCallObservationError extends AgentSdkError {
|
|
109
|
+
readonly runId: string;
|
|
110
|
+
readonly modelCallId: string;
|
|
111
|
+
readonly traceId: TraceId;
|
|
112
|
+
readonly report: ModelCallReport;
|
|
113
|
+
constructor(message: string, report: ModelCallReport, options?: ErrorOptions);
|
|
114
|
+
}
|
|
115
|
+
//#endregion
|
|
116
|
+
export { EndProviderAttemptInput, ModelCallHandle, ModelCallObservationError, ModelCallReport, ModelInvocationContext, OBSERVATION_ERROR_CODES, ProviderAttemptHandle, ProviderRetryScheduledInput, StartProviderAttemptInput };
|
|
117
|
+
//# sourceMappingURL=report.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report.d.ts","names":[],"sources":["../../src/observation/report.ts"],"mappings":";;;;;;;;UAQiB;WACN;WACA,SAAS;WACT;WACA,QAAQ;WACR;;WAEA;;WAEA;WACA;WACA,QAAQ;WACR;WACA;WACA;WACA;;WAEA,gBAAgB;WAChB,UAAU;WACV,UAAU;WACV,YAAY;WACZ,mBAAmB;WACnB;WACA;WACA,UAAU;WACV,QAAQ;;UAGF,wBAAwB,cAAc;WAC5C;WACA;WACA,QAAQ,QAAQ;;;UAIV;WACN;WACA;WACA;;WAEA;;;UAIM;WACN,QAAQ;WACR,eAAe;WACf,WAAW;WACX;WACA;;WAEA,QAAQ;;;UAIF;WACN;WACA;WACA;;;UAIM;WACN;WACA;WACA;EACT,IAAI,OAAO,0BAA0B;;UAGtB;WACN,cAAc;;WAEd,WAAW;WACX,cAAc,QAAQ;WACtB;;WAEA,QAAQ;;WAER,SAAS;;WAET;;;;;WAKA,wBACP,OAAO,2BACP,SAAS,gBACN,QAAQ;WACJ,uBAAuB,OAAO;;cAG5B,yBAAuB;WACf;WACD;WACA;WACH;WACA;WACE;WACL;WACG;WACa;WACA;WACL;WACR;WACC;WACD;WACS;;cAGb,kCAAkC;WACpC;WACA;WACA,SAAS;WACT,QAAQ;EAEjB,YAAY,iBAAiB,QAAQ,iBAAiB,UAAU"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{AgentSdkError as e}from"../errors/agent-sdk-error.js";const t=Object.freeze({AUDIT_UNAVAILABLE:`OBSERVABILITY_AUDIT_UNAVAILABLE`,CAPTURE_REJECTED:`OBSERVABILITY_CAPTURE_REJECTED`,PROCESSOR_FAILED:`OBSERVABILITY_PROCESSOR_FAILED`,EXPORT_FAILED:`OBSERVABILITY_EXPORT_FAILED`,FLUSH_TIMEOUT:`OBSERVABILITY_FLUSH_TIMEOUT`,JOURNAL_CORRUPT:`OBSERVABILITY_JOURNAL_CORRUPT`,JOURNAL_IO:`OBSERVABILITY_JOURNAL_IO`,BROWSER_QUOTA:`OBSERVABILITY_BROWSER_QUOTA`,OTEL_PROVIDER_UNCONFIGURED:`OTEL_PROVIDER_UNCONFIGURED`,OPERATION_TERMINAL_MISSING:`OPERATION_TERMINAL_MISSING`,LEDGER_LIMIT_EXCEEDED:`LEDGER_LIMIT_EXCEEDED`,USAGE_MISSING:`USAGE_MISSING`,USAGE_REQUIRED:`USAGE_REQUIRED`,USAGE_INVALID:`USAGE_INVALID`,USAGE_COUNTER_OVERFLOW:`USAGE_COUNTER_OVERFLOW`});var n=class extends e{runId;modelCallId;traceId;report;constructor(e,n,r){super(e,t.AUDIT_UNAVAILABLE,r),this.name=`ModelCallObservationError`,this.runId=n.runId,this.modelCallId=n.modelCallId,this.traceId=n.traceId,this.report=n}};export{n as ModelCallObservationError,t as OBSERVATION_ERROR_CODES};
|
|
2
|
+
//# sourceMappingURL=report.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report.js","names":[],"sources":["../../src/observation/report.ts"],"sourcesContent":["import type { StreamChunk } from '../stream/chunk.ts'\nimport { AgentSdkError } from '../errors/agent-sdk-error.ts'\nimport type { CorrelationContext, ObservationRunScope, SpanId, TraceId } from './context.ts'\nimport type { ObservationResource, OperationStatus, SafeErrorRecord } from './event.ts'\nimport type { ObservationDeliverySummary, ObservationPort } from './port.ts'\nimport type { AttemptUsageReport, DispatchState, UsageCounters, UsageCoverage } from './usage.ts'\nimport type { SdkLogger } from '../logging/types.ts'\n\nexport interface ModelCallReport {\n readonly runId: string\n readonly traceId: TraceId\n readonly modelCallId: string\n readonly spanId: SpanId\n readonly provider: string\n /** Provider family independently of the selected route, when installed as a plugin. */\n readonly providerFamily?: string\n /** Exact plugin installation that owned the selected route. */\n readonly providerPluginId?: string\n readonly model: string\n readonly status: OperationStatus\n readonly startedAt: string\n readonly endedAt: string\n readonly durationMs: number\n readonly finishReason?: string\n /** Logical dispatch state, retained even when an adapter did not expose physical attempts. */\n readonly dispatchState?: DispatchState\n readonly coverage: UsageCoverage\n readonly reported: UsageCounters\n readonly estimated?: UsageCounters\n readonly attempts: readonly AttemptUsageReport[]\n readonly possiblyBilledAttemptsWithoutUsage: number\n readonly authoritative: boolean\n readonly delivery: ObservationDeliverySummary\n readonly error?: SafeErrorRecord\n}\n\nexport interface ModelCallHandle extends AsyncIterable<StreamChunk> {\n readonly runId: string\n readonly modelCallId: string\n readonly report: Promise<ModelCallReport>\n}\n\n/** Safe facts known immediately before one physical provider dispatch. */\nexport interface StartProviderAttemptInput {\n readonly provider: string\n readonly model: string\n readonly method: string\n /** Scheme, host, and explicit non-default port only; never a path or query. */\n readonly origin: string\n}\n\n/** Terminal facts supplied by a transport after exactly one dispatch boundary. */\nexport interface EndProviderAttemptInput {\n readonly status: OperationStatus\n readonly dispatchState: DispatchState\n readonly reported?: UsageCounters\n readonly httpStatus?: number\n readonly providerRequestId?: string\n /** Must already be safe for support reports; raw response bodies are forbidden. */\n readonly error?: SafeErrorRecord\n}\n\n/** Safe scheduling facts between two physical provider attempts. */\nexport interface ProviderRetryScheduledInput {\n readonly nextAttemptNumber: number\n readonly delayMs: number\n readonly failureCode: string\n}\n\n/** One physical provider-attempt lifecycle owned by the model-call handle. */\nexport interface ProviderAttemptHandle {\n readonly attemptId: string\n readonly attemptNumber: number\n readonly traceparent: string\n end(input: EndProviderAttemptInput): AttemptUsageReport\n}\n\nexport interface ModelInvocationContext {\n readonly observation?: ObservationPort\n /** Safe SDK/service/runtime identity copied onto nested provider operations. */\n readonly resource?: ObservationResource\n readonly correlation?: Partial<CorrelationContext>\n readonly terminalCheckpointOwner?: 'model-call' | 'agent-run'\n /** Shared sequence/monotonic scope when this call belongs to a larger agent run. */\n readonly scope?: ObservationRunScope\n /** Always present on AgentRuntime calls; optional for preserved low-level callers. */\n readonly logger?: SdkLogger\n /** Declares that the adapter will report the real network boundary itself. */\n readonly declareProviderAttemptAccounting?: () => void\n /**\n * Internal transport accounting boundary. HTTP providers call this immediately\n * before dispatch; audit mode may reject before any network request is invoked.\n */\n readonly startProviderAttempt?: (\n input: StartProviderAttemptInput,\n signal?: AbortSignal,\n ) => Promise<ProviderAttemptHandle>\n readonly recordProviderRetry?: (input: ProviderRetryScheduledInput) => void\n}\n\nexport const OBSERVATION_ERROR_CODES = Object.freeze({\n AUDIT_UNAVAILABLE: 'OBSERVABILITY_AUDIT_UNAVAILABLE',\n CAPTURE_REJECTED: 'OBSERVABILITY_CAPTURE_REJECTED',\n PROCESSOR_FAILED: 'OBSERVABILITY_PROCESSOR_FAILED',\n EXPORT_FAILED: 'OBSERVABILITY_EXPORT_FAILED',\n FLUSH_TIMEOUT: 'OBSERVABILITY_FLUSH_TIMEOUT',\n JOURNAL_CORRUPT: 'OBSERVABILITY_JOURNAL_CORRUPT',\n JOURNAL_IO: 'OBSERVABILITY_JOURNAL_IO',\n BROWSER_QUOTA: 'OBSERVABILITY_BROWSER_QUOTA',\n OTEL_PROVIDER_UNCONFIGURED: 'OTEL_PROVIDER_UNCONFIGURED',\n OPERATION_TERMINAL_MISSING: 'OPERATION_TERMINAL_MISSING',\n LEDGER_LIMIT_EXCEEDED: 'LEDGER_LIMIT_EXCEEDED',\n USAGE_MISSING: 'USAGE_MISSING',\n USAGE_REQUIRED: 'USAGE_REQUIRED',\n USAGE_INVALID: 'USAGE_INVALID',\n USAGE_COUNTER_OVERFLOW: 'USAGE_COUNTER_OVERFLOW',\n} as const)\n\nexport class ModelCallObservationError extends AgentSdkError {\n readonly runId: string\n readonly modelCallId: string\n readonly traceId: TraceId\n readonly report: ModelCallReport\n\n constructor(message: string, report: ModelCallReport, options?: ErrorOptions) {\n super(message, OBSERVATION_ERROR_CODES.AUDIT_UNAVAILABLE, options)\n this.name = 'ModelCallObservationError'\n this.runId = report.runId\n this.modelCallId = report.modelCallId\n this.traceId = report.traceId\n this.report = report\n }\n}\n"],"mappings":"6DAoGA,MAAa,EAA0B,OAAO,OAAO,CACnD,kBAAmB,kCACnB,iBAAkB,iCAClB,iBAAkB,iCAClB,cAAe,8BACf,cAAe,8BACf,gBAAiB,gCACjB,WAAY,2BACZ,cAAe,8BACf,2BAA4B,6BAC5B,2BAA4B,6BAC5B,sBAAuB,wBACvB,cAAe,gBACf,eAAgB,iBAChB,cAAe,gBACf,uBAAwB,wBAC1B,CAAU,EAEV,IAAa,EAAb,cAA+C,CAAc,CAC3D,MACA,YACA,QACA,OAEA,YAAY,EAAiB,EAAyB,EAAwB,CAC5E,MAAM,EAAS,EAAwB,kBAAmB,CAAO,EACjE,KAAK,KAAO,4BACZ,KAAK,MAAQ,EAAO,MACpB,KAAK,YAAc,EAAO,YAC1B,KAAK,QAAU,EAAO,QACtB,KAAK,OAAS,CAChB,CACF"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { ObservationEvent, SafeErrorRecord } from "./event.js";
|
|
2
|
+
//#region src/observation/telemetry-types.d.ts
|
|
3
|
+
type ObservationContentPolicy = 'none' | 'metadata' | 'redacted' | 'full';
|
|
4
|
+
interface ObservationHealthSnapshot {
|
|
5
|
+
readonly state: 'disabled' | 'healthy' | 'degraded' | 'failed' | 'closed';
|
|
6
|
+
readonly queuedEvents: number;
|
|
7
|
+
readonly queuedBytes: number;
|
|
8
|
+
readonly accepted: number;
|
|
9
|
+
readonly exported: number;
|
|
10
|
+
readonly droppedVerbose: number;
|
|
11
|
+
readonly droppedNormal: number;
|
|
12
|
+
readonly criticalRejected: number;
|
|
13
|
+
readonly processorFailures: number;
|
|
14
|
+
readonly exporterFailures: number;
|
|
15
|
+
readonly flushTimeouts: number;
|
|
16
|
+
readonly lastExportAt?: string;
|
|
17
|
+
readonly lastFailure?: SafeErrorRecord;
|
|
18
|
+
}
|
|
19
|
+
interface ObservationProcessor {
|
|
20
|
+
readonly id: string;
|
|
21
|
+
transform(event: ObservationEvent): ObservationEvent | undefined;
|
|
22
|
+
}
|
|
23
|
+
interface ContentRedactor {
|
|
24
|
+
readonly id: string;
|
|
25
|
+
redact(value: string, path: readonly string[]): string;
|
|
26
|
+
}
|
|
27
|
+
//#endregion
|
|
28
|
+
export { ContentRedactor, ObservationContentPolicy, ObservationHealthSnapshot, ObservationProcessor };
|
|
29
|
+
//# sourceMappingURL=telemetry-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry-types.d.ts","names":[],"sources":["../../src/observation/telemetry-types.ts"],"mappings":";;KAEY;UAEK;WACN;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,cAAc;;UAGR;WACN;EACT,UAAU,OAAO,mBAAmB;;UAGrB;WACN;EACT,OAAO,eAAe"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { SpanId } from "./context.js";
|
|
2
|
+
import { OperationStatus, SafeErrorRecord } from "./event.js";
|
|
3
|
+
//#region src/observation/usage.d.ts
|
|
4
|
+
type UsageCoverage = 'complete' | 'partial' | 'estimated' | 'missing' | 'not-applicable';
|
|
5
|
+
type DispatchState = 'not-sent' | 'sent' | 'unknown';
|
|
6
|
+
interface UsageCounters {
|
|
7
|
+
readonly inputTokens?: number;
|
|
8
|
+
readonly outputTokens?: number;
|
|
9
|
+
readonly totalTokens?: number;
|
|
10
|
+
readonly cacheReadTokens?: number;
|
|
11
|
+
readonly cacheWriteTokens?: number;
|
|
12
|
+
readonly reasoningTokens?: number;
|
|
13
|
+
}
|
|
14
|
+
interface AttemptUsageReport {
|
|
15
|
+
readonly attemptId: string;
|
|
16
|
+
readonly spanId: SpanId;
|
|
17
|
+
readonly attemptNumber: number;
|
|
18
|
+
readonly status: OperationStatus;
|
|
19
|
+
readonly startedAt: string;
|
|
20
|
+
readonly endedAt: string;
|
|
21
|
+
readonly durationMs: number;
|
|
22
|
+
readonly dispatchState: DispatchState;
|
|
23
|
+
readonly coverage: UsageCoverage;
|
|
24
|
+
readonly reported: UsageCounters;
|
|
25
|
+
readonly estimated?: UsageCounters;
|
|
26
|
+
/** Scheme, host and explicit non-default port retained without path/query. */
|
|
27
|
+
readonly origin?: string;
|
|
28
|
+
readonly httpStatus?: number;
|
|
29
|
+
readonly providerRequestId?: string;
|
|
30
|
+
readonly error?: SafeErrorRecord;
|
|
31
|
+
}
|
|
32
|
+
declare const COUNTER_KEYS: readonly ['inputTokens', 'outputTokens', 'totalTokens', 'cacheReadTokens', 'cacheWriteTokens', 'reasoningTokens'];
|
|
33
|
+
type CounterKey = typeof COUNTER_KEYS[number];
|
|
34
|
+
interface UsageValidationResult {
|
|
35
|
+
readonly reported: UsageCounters;
|
|
36
|
+
readonly invalidFields: readonly CounterKey[];
|
|
37
|
+
readonly complete: boolean;
|
|
38
|
+
readonly overflow: boolean;
|
|
39
|
+
}
|
|
40
|
+
/** Rejects invalid fields individually and derives a total only from valid disjoint buckets. */
|
|
41
|
+
declare function validateUsageCounters(value: unknown, normalizedProviderReport?: boolean): UsageValidationResult;
|
|
42
|
+
interface UsageAdditionResult {
|
|
43
|
+
readonly counters: UsageCounters;
|
|
44
|
+
readonly overflow: boolean;
|
|
45
|
+
}
|
|
46
|
+
declare function addUsageCounters(values: readonly UsageCounters[]): UsageAdditionResult;
|
|
47
|
+
declare function hasUsageCounters(value: UsageCounters | undefined): boolean;
|
|
48
|
+
declare function classifyUsageCoverage(attempts: readonly Pick<AttemptUsageReport, 'dispatchState' | 'coverage' | 'reported'>[], estimated?: UsageCounters): UsageCoverage;
|
|
49
|
+
declare function possiblyBilledAttemptsWithoutUsage(attempts: readonly Pick<AttemptUsageReport, 'dispatchState' | 'reported'>[]): number;
|
|
50
|
+
//#endregion
|
|
51
|
+
export { AttemptUsageReport, DispatchState, UsageAdditionResult, UsageCounters, UsageCoverage, UsageValidationResult, addUsageCounters, classifyUsageCoverage, hasUsageCounters, possiblyBilledAttemptsWithoutUsage, validateUsageCounters };
|
|
52
|
+
//# sourceMappingURL=usage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usage.d.ts","names":[],"sources":["../../src/observation/usage.ts"],"mappings":";;;KAGY;KACA;UAEK;WACN;WACA;WACA;WACA;WACA;WACA;;UAGM;WACN;WACA,QAAQ;WACR;WACA,QAAQ;WACR;WACA;WACA;WACA,eAAe;WACf,UAAU;WACV,UAAU;WACV,YAAY;;WAEZ;WACA;WACA;WACA,QAAQ;;cAGb;KACD,oBAAoB;UAER;WACN,UAAU;WACV,wBAAwB;WACxB;WACA;;;iBAgBK,sBAAsB,gBAAgB,qCAAmC;UA6CxE;WACN,UAAU;WACV;;iBAGK,iBAAiB,iBAAiB,kBAAkB;iBAiCpD,iBAAiB,OAAO;iBAIxB,sBACd,mBAAmB,KAAK,kEACxB,YAAY,gBACX;iBASa,mCACd,mBAAmB,KAAK"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=[`inputTokens`,`outputTokens`,`totalTokens`,`cacheReadTokens`,`cacheWriteTokens`,`reasoningTokens`];function t(e){return typeof e==`number`&&Number.isSafeInteger(e)&&e>=0}function n(e,t){try{return{value:Reflect.get(e,t),unreadable:!1}}catch{return{unreadable:!0}}}function r(r,i=!1){let a=typeof r==`object`&&r?r:{},o={},s=[];for(let r of e){let e=n(a,r);if(e.unreadable){s.push(r);continue}let i=e.value;i!==void 0&&(t(i)?o[r]=i:s.push(r))}let c=0,l=!1;for(let e of[`inputTokens`,`cacheReadTokens`,`cacheWriteTokens`,`outputTokens`]){let t=c+(o[e]??0);Number.isSafeInteger(t)?c=t:(l=!0,c=2**53-1)}!l&&o.totalTokens!==void 0&&o.totalTokens<c&&(delete o.totalTokens,s.push(`totalTokens`)),o.reasoningTokens!==void 0&&o.outputTokens!==void 0&&o.reasoningTokens>o.outputTokens&&(delete o.reasoningTokens,s.push(`reasoningTokens`));let u=o.inputTokens!==void 0&&o.outputTokens!==void 0;return i&&u&&o.totalTokens===void 0&&!l&&s.length===0&&(o.totalTokens=c),Object.freeze({reported:Object.freeze({...o}),invalidFields:Object.freeze([...new Set(s)]),complete:u&&s.length===0&&!l,overflow:l})}function i(t){let n={},i=!1,o=!0;for(let s of t){let t=r(s);if(t.invalidFields.length>0)throw TypeError(`usage counters must be validated before aggregation`);i||=t.overflow,a(t.reported)&&t.reported.totalTokens===void 0&&(o=!1);for(let r of e){let e=t.reported[r];if(e===void 0)continue;let a=(n[r]??0)+e;!Number.isSafeInteger(a)||a>2**53-1?(n[r]=2**53-1,i=!0):n[r]=a}}o||delete n.totalTokens;let s=r(n);return i||=s.overflow,Object.freeze({counters:s.reported,overflow:i})}function a(t){return t!==void 0&&e.some(e=>t[e]!==void 0)}function o(e,t){if(e.length===0||e.every(e=>e.dispatchState===`not-sent`))return`not-applicable`;let n=e.filter(e=>e.dispatchState!==`not-sent`);return n.length>0&&n.every(e=>e.coverage===`complete`)?`complete`:n.some(e=>a(e.reported))?`partial`:a(t)?`estimated`:`missing`}function s(e){return e.filter(e=>e.dispatchState!==`not-sent`&&!a(e.reported)).length}export{i as addUsageCounters,o as classifyUsageCoverage,a as hasUsageCounters,s as possiblyBilledAttemptsWithoutUsage,r as validateUsageCounters};
|
|
2
|
+
//# sourceMappingURL=usage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usage.js","names":[],"sources":["../../src/observation/usage.ts"],"sourcesContent":["import type { SpanId } from './context.ts'\nimport type { OperationStatus, SafeErrorRecord } from './event.ts'\n\nexport type UsageCoverage = 'complete' | 'partial' | 'estimated' | 'missing' | 'not-applicable'\nexport type DispatchState = 'not-sent' | 'sent' | 'unknown'\n\nexport interface UsageCounters {\n readonly inputTokens?: number\n readonly outputTokens?: number\n readonly totalTokens?: number\n readonly cacheReadTokens?: number\n readonly cacheWriteTokens?: number\n readonly reasoningTokens?: number\n}\n\nexport interface AttemptUsageReport {\n readonly attemptId: string\n readonly spanId: SpanId\n readonly attemptNumber: number\n readonly status: OperationStatus\n readonly startedAt: string\n readonly endedAt: string\n readonly durationMs: number\n readonly dispatchState: DispatchState\n readonly coverage: UsageCoverage\n readonly reported: UsageCounters\n readonly estimated?: UsageCounters\n /** Scheme, host and explicit non-default port retained without path/query. */\n readonly origin?: string\n readonly httpStatus?: number\n readonly providerRequestId?: string\n readonly error?: SafeErrorRecord\n}\n\nconst COUNTER_KEYS = ['inputTokens', 'outputTokens', 'totalTokens', 'cacheReadTokens', 'cacheWriteTokens', 'reasoningTokens'] as const\ntype CounterKey = typeof COUNTER_KEYS[number]\n\nexport interface UsageValidationResult {\n readonly reported: UsageCounters\n readonly invalidFields: readonly CounterKey[]\n readonly complete: boolean\n readonly overflow: boolean\n}\n\nfunction validCounter(value: unknown): value is number {\n return typeof value === 'number' && Number.isSafeInteger(value) && value >= 0\n}\n\nfunction readCounter(source: Readonly<Record<string, unknown>>, key: CounterKey): { value?: unknown; unreadable: boolean } {\n try {\n return { value: Reflect.get(source, key), unreadable: false }\n } catch {\n return { unreadable: true }\n }\n}\n\n/** Rejects invalid fields individually and derives a total only from valid disjoint buckets. */\nexport function validateUsageCounters(value: unknown, normalizedProviderReport = false): UsageValidationResult {\n const source = typeof value === 'object' && value !== null ? value as Readonly<Record<string, unknown>> : {}\n const counters: Partial<Record<CounterKey, number>> = {}\n const invalid: CounterKey[] = []\n for (const key of COUNTER_KEYS) {\n const read = readCounter(source, key)\n if (read.unreadable) {\n invalid.push(key)\n continue\n }\n const field = read.value\n if (field === undefined) continue\n if (validCounter(field)) counters[key] = field\n else invalid.push(key)\n }\n let disjoint = 0\n let overflow = false\n for (const key of ['inputTokens', 'cacheReadTokens', 'cacheWriteTokens', 'outputTokens'] as const) {\n const next = disjoint + (counters[key] ?? 0)\n if (!Number.isSafeInteger(next)) {\n overflow = true\n disjoint = Number.MAX_SAFE_INTEGER\n } else disjoint = next\n }\n if (!overflow && counters.totalTokens !== undefined && counters.totalTokens < disjoint) {\n delete counters.totalTokens\n invalid.push('totalTokens')\n }\n if (counters.reasoningTokens !== undefined && counters.outputTokens !== undefined\n && counters.reasoningTokens > counters.outputTokens) {\n delete counters.reasoningTokens\n invalid.push('reasoningTokens')\n }\n const completeBuckets = counters.inputTokens !== undefined && counters.outputTokens !== undefined\n if (normalizedProviderReport && completeBuckets && counters.totalTokens === undefined && !overflow && invalid.length === 0) {\n counters.totalTokens = disjoint\n }\n return Object.freeze({\n reported: Object.freeze({ ...counters }),\n invalidFields: Object.freeze([...new Set(invalid)]),\n complete: completeBuckets && invalid.length === 0 && !overflow,\n overflow,\n })\n}\n\nexport interface UsageAdditionResult {\n readonly counters: UsageCounters\n readonly overflow: boolean\n}\n\nexport function addUsageCounters(values: readonly UsageCounters[]): UsageAdditionResult {\n const output: Partial<Record<CounterKey, number>> = {}\n let overflow = false\n let comparableTotal = true\n for (const value of values) {\n const validated = validateUsageCounters(value)\n if (validated.invalidFields.length > 0) {\n throw new TypeError('usage counters must be validated before aggregation')\n }\n // Individually valid buckets remain known even when their disjoint total\n // exceeds safe integer precision. Keep them and report loss of authority.\n overflow ||= validated.overflow\n if (hasUsageCounters(validated.reported) && validated.reported.totalTokens === undefined) {\n comparableTotal = false\n }\n for (const key of COUNTER_KEYS) {\n const addend = validated.reported[key]\n if (addend === undefined) continue\n const sum = (output[key] ?? 0) + addend\n if (!Number.isSafeInteger(sum) || sum > Number.MAX_SAFE_INTEGER) {\n output[key] = Number.MAX_SAFE_INTEGER\n overflow = true\n } else output[key] = sum\n }\n }\n // A subset's total cannot describe buckets summed over a wider scope.\n // Leaf reports retain the original evidence; do not invent missing buckets.\n if (!comparableTotal) delete output.totalTokens\n const validated = validateUsageCounters(output)\n overflow ||= validated.overflow\n return Object.freeze({ counters: validated.reported, overflow })\n}\n\nexport function hasUsageCounters(value: UsageCounters | undefined): boolean {\n return value !== undefined && COUNTER_KEYS.some(key => value[key] !== undefined)\n}\n\nexport function classifyUsageCoverage(\n attempts: readonly Pick<AttemptUsageReport, 'dispatchState' | 'coverage' | 'reported'>[],\n estimated?: UsageCounters,\n): UsageCoverage {\n if (attempts.length === 0 || attempts.every(attempt => attempt.dispatchState === 'not-sent')) return 'not-applicable'\n const dispatched = attempts.filter(attempt => attempt.dispatchState !== 'not-sent')\n if (dispatched.length > 0 && dispatched.every(attempt => attempt.coverage === 'complete')) return 'complete'\n if (dispatched.some(attempt => hasUsageCounters(attempt.reported))) return 'partial'\n if (hasUsageCounters(estimated)) return 'estimated'\n return 'missing'\n}\n\nexport function possiblyBilledAttemptsWithoutUsage(\n attempts: readonly Pick<AttemptUsageReport, 'dispatchState' | 'reported'>[],\n): number {\n return attempts.filter(attempt => attempt.dispatchState !== 'not-sent' && !hasUsageCounters(attempt.reported)).length\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{PLATFORM_LIMITS as e,timeoutValue as t}from"./config.js";var n=class extends Error{feature;code=`UNSUPPORTED_RUNTIME`;constructor(e){super(`Required Web Platform feature is unavailable: ${e}`),this.feature=e,this.name=`UnsupportedRuntimeError`}};function r(e,t){try{let e=t();if(typeof e!=`function`)throw Error(`not callable`);return e}catch{throw new n(e)}}function i(t,r){if(!Number.isSafeInteger(t)||t<1||t>e.maxRandomBytes)throw RangeError(`Random identifier size exceeds its bound`);for(let i=0;i<e.randomAttempts;i++){let e=new Uint8Array(t);try{r(e)}catch{throw new n(`crypto.getRandomValues`)}if(e.some(e=>e!==0))return[...e].map(e=>e.toString(16).padStart(2,`0`)).join(``)}throw new n(`crypto.getRandomValues`)}function a(e){let t,n=r(`crypto.getRandomValues`,()=>(t=globalThis.crypto,t.getRandomValues));return i(e,e=>Reflect.apply(n,t,[e]))}function o(){let e=a(16),t=(Number.parseInt(e[16],16)&3|8).toString(16);return`${e.slice(0,8)}-${e.slice(8,12)}-4${e.slice(13,16)}-${t}${e.slice(17,20)}-${e.slice(20)}`}function s(e,t){let r;try{r=Reflect.apply(t,e,[])}catch{throw new n(`performance.now`)}if(!Number.isFinite(r)||r<0)throw new n(`performance.now`);return r}function c(){let e,t=r(`performance.now`,()=>(e=globalThis.performance,e.now));return s(e,t)}function l(e=globalThis){let n=r(`AbortController`,()=>e.AbortController);r(`AbortSignal.any`,()=>e.AbortSignal.any),r(`AbortSignal.timeout`,()=>e.AbortSignal.timeout),r(`DOMException`,()=>e.DOMException),r(`ReadableStream`,()=>e.ReadableStream),r(`TextDecoder`,()=>e.TextDecoder),r(`TextEncoder`,()=>e.TextEncoder),r(`URL`,()=>e.URL);let a,o=r(`crypto.getRandomValues`,()=>(a=e.crypto,a.getRandomValues)),c,l=r(`performance.now`,()=>(c=e.performance,c.now));r(`structuredClone`,()=>e.structuredClone);let u=r(`timers`,()=>e.setTimeout),d=r(`timers`,()=>e.clearTimeout),f=Date.now;return Object.freeze({monotonicNow(){return s(c,l)},wallNow:()=>f(),randomHex:e=>i(e,e=>Reflect.apply(o,a,[e])),controller:()=>new n,after(n,r){t(n,!0);let i=!0,a=Reflect.apply(u,e,[()=>{i&&(i=!1,r())},n]);return()=>{i&&(i=!1,Reflect.apply(d,e,[a]))}}})}export{n as UnsupportedRuntimeError,l as createRuntimePlatform,c as systemMonotonicNow,a as systemRandomHex,o as systemRandomId};
|
|
2
|
+
//# sourceMappingURL=adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.js","names":[],"sources":["../../src/platform/adapter.ts"],"sourcesContent":["import { PLATFORM_LIMITS, timeoutValue, type UniversalFeature } from './config.ts'\n\nexport class UnsupportedRuntimeError extends Error {\n readonly code = 'UNSUPPORTED_RUNTIME' as const\n constructor(readonly feature: UniversalFeature) {\n super(`Required Web Platform feature is unavailable: ${feature}`)\n this.name = 'UnsupportedRuntimeError'\n }\n}\n\nexport interface RuntimePlatform {\n monotonicNow(): number\n wallNow(): number\n randomHex(bytes: number): string\n controller(): AbortController\n after(milliseconds: number, callback: () => void): () => void\n}\n\nfunction feature<T>(name: UniversalFeature, read: () => T): T {\n try {\n const value = read()\n if (typeof value !== 'function') throw new Error('not callable')\n return value\n } catch { throw new UnsupportedRuntimeError(name) }\n}\n\nfunction randomHex(bytes: number, fill: (data: Uint8Array) => Uint8Array): string {\n if (!Number.isSafeInteger(bytes) || bytes < 1 || bytes > PLATFORM_LIMITS.maxRandomBytes) {\n throw new RangeError('Random identifier size exceeds its bound')\n }\n for (let attempt = 0; attempt < PLATFORM_LIMITS.randomAttempts; attempt++) {\n const values = new Uint8Array(bytes)\n try { fill(values) } catch { throw new UnsupportedRuntimeError('crypto.getRandomValues') }\n if (values.some(value => value !== 0)) {\n return [...values].map(value => value.toString(16).padStart(2, '0')).join('')\n }\n }\n throw new UnsupportedRuntimeError('crypto.getRandomValues')\n}\n\n/** Advanced standalone entrypoints share ID generation without allocating a runtime. */\nexport function systemRandomHex(bytes: number): string {\n let receiver: Crypto\n const fill = feature('crypto.getRandomValues', () => {\n receiver = globalThis.crypto\n return receiver.getRandomValues\n })\n return randomHex(bytes, data => Reflect.apply(fill, receiver!, [data]) as Uint8Array)\n}\n\nexport function systemRandomId(): string {\n const hex = systemRandomHex(16)\n const variant = ((Number.parseInt(hex[16]!, 16) & 3) | 8).toString(16)\n return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-4${hex.slice(13, 16)}-${variant}${hex.slice(17, 20)}-${hex.slice(20)}`\n}\n\nfunction monotonicNow(receiver: Performance, now: Performance['now']): number {\n let value: number\n try { value = Reflect.apply(now, receiver, []) as number }\n catch { throw new UnsupportedRuntimeError('performance.now') }\n if (!Number.isFinite(value) || value < 0) throw new UnsupportedRuntimeError('performance.now')\n return value\n}\n\nexport function systemMonotonicNow(): number {\n let receiver: Performance\n const now = feature('performance.now', () => {\n receiver = globalThis.performance\n return receiver.now\n })\n return monotonicNow(receiver!, now)\n}\n\n/** Validate and capture the Universal baseline without constructing resources or reading plugins. */\nexport function createRuntimePlatform(host: typeof globalThis = globalThis): RuntimePlatform {\n const Controller = feature('AbortController', () => host.AbortController)\n feature('AbortSignal.any', () => host.AbortSignal.any)\n feature('AbortSignal.timeout', () => host.AbortSignal.timeout)\n feature('DOMException', () => host.DOMException)\n feature('ReadableStream', () => host.ReadableStream)\n feature('TextDecoder', () => host.TextDecoder)\n feature('TextEncoder', () => host.TextEncoder)\n feature('URL', () => host.URL)\n let randomReceiver: Crypto\n const fill = feature('crypto.getRandomValues', () => {\n randomReceiver = host.crypto\n return randomReceiver.getRandomValues\n })\n let clockReceiver: Performance\n const now = feature('performance.now', () => {\n clockReceiver = host.performance\n return clockReceiver.now\n })\n feature('structuredClone', () => host.structuredClone)\n const schedule = feature('timers', () => host.setTimeout)\n const cancel = feature('timers', () => host.clearTimeout)\n const wall = Date.now\n return Object.freeze({\n monotonicNow(): number {\n return monotonicNow(clockReceiver!, now)\n },\n wallNow: () => wall(),\n randomHex: (bytes: number) => randomHex(bytes, data => Reflect.apply(fill, randomReceiver!, [data]) as Uint8Array),\n controller: () => new Controller(),\n after(milliseconds: number, callback: () => void): () => void {\n timeoutValue(milliseconds, true)\n let active = true\n const handle = Reflect.apply(schedule, host, [() => {\n if (!active) return\n active = false\n callback()\n }, milliseconds]) as ReturnType<typeof setTimeout>\n return () => {\n if (!active) return\n active = false\n Reflect.apply(cancel, host, [handle])\n }\n },\n })\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{systemMonotonicNow as e,systemRandomHex as t}from"./adapter.js";import{runtimePlatformForLogger as n}from"./logger-platform.js";const r=Object.freeze({"core-provider":Object.freeze([`setup`]),"core-credential":Object.freeze([`resolve`,`read`,`commit`]),"core-tool-source":Object.freeze([`snapshot`]),"core-skill-provider":Object.freeze([`list`,`load`,`read-resource`]),"core-memory-store":Object.freeze([`load`,`commit`])});function i(e,t,n){d(t,n);let r=l(e),i=r.randomHex(16),a=r.monotonicNow();s(e,`info`,`SDK capability operation started`,{integrationSchemaVersion:1,integrationFamily:t,integrationOperation:n,operationId:i,kind:`logical-start`});let o=r.randomHex(16),f=r.monotonicNow();s(e,`info`,`SDK capability attempt started`,{integrationSchemaVersion:1,integrationFamily:t,integrationOperation:n,operationId:i,kind:`attempt-start`,attemptId:o,attemptNumber:1});let m=!1,h=(l,d)=>{if(m)return;m=!0;let h=l===`error`?c(d):void 0;s(e,l===`error`?`error`:`info`,p(l),{integrationSchemaVersion:1,integrationFamily:t,integrationOperation:n,operationId:i,kind:`attempt-terminal`,attemptId:o,attemptNumber:1,status:l,durationMs:u(r,f),...h===void 0?{}:{errorCode:h}}),s(e,l===`error`?`error`:`info`,p(l),{integrationSchemaVersion:1,integrationFamily:t,integrationOperation:n,operationId:i,kind:`logical-terminal`,status:l,durationMs:u(r,a),...h===void 0?{}:{errorCode:h}})};return Object.freeze({success:()=>h(`success`),fail:e=>h(`error`,e),abort:()=>h(`aborted`)})}async function a(e,t,n,r,a){let o=i(e,t,n);try{r?.throwIfAborted();let e=await a();return r?.throwIfAborted(),o.success(),e}catch(e){throw r?.aborted===!0?o.abort():o.fail(e),e}}function o(e,t,n,r,a){let o=i(e,t,n);try{r?.throwIfAborted();let e=a(),t=f(e);return t===void 0?(o.success(),e):t.then(e=>(r?.aborted===!0&&(o.abort(),r.throwIfAborted()),o.success(),e),e=>{throw r?.aborted===!0?o.abort():o.fail(e),e})}catch(e){throw r?.aborted===!0?o.abort():o.fail(e),e}}function s(e,t,n,r){try{e[t](n,r)}catch{}}function c(e){if(typeof e==`object`&&e)for(let t of[`code`,`name`]){let n=Object.getOwnPropertyDescriptor(e,t);if(n!==void 0&&`value`in n&&typeof n.value==`string`){let e=n.value.replace(/[^A-Za-z0-9_.:-]/g,`_`).slice(0,128);if(e.length>0)return e}}return`CAPABILITY_OPERATION_FAILED`}function l(r){return n(r)??Object.freeze({monotonicNow:e,randomHex:t})}function u(e,t){let n=e.monotonicNow()-t;return Number.isFinite(n)?Math.max(0,n):0}function d(e,t){let n=r[e];if(typeof e!=`string`||e.length<1||e.length>64||typeof t!=`string`||t.length<1||t.length>64||n===void 0||!n.includes(t))throw TypeError(`Invalid core capability operation`)}function f(e){if((typeof e!=`object`||!e)&&typeof e!=`function`)return;let t=Reflect.get(e,`then`);if(typeof t==`function`)return new Promise((n,r)=>{try{Reflect.apply(t,e,[n,r])}catch(e){r(e)}})}function p(e){return e===`success`?`SDK capability operation completed`:e===`error`?`SDK capability operation failed`:`SDK capability operation aborted`}export{r as CORE_CAPABILITY_OPERATIONS,i as beginCoreCapabilityOperation,a as runCoreCapabilityAsync,o as runCoreCapabilityMaybeAsync};
|
|
2
|
+
//# sourceMappingURL=capability-operation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capability-operation.js","names":[],"sources":["../../src/platform/capability-operation.ts"],"sourcesContent":["import type { IntegrationOperationEvidenceFields, SdkLogger } from '../logging/types.ts'\nimport { systemMonotonicNow, systemRandomHex, type RuntimePlatform } from './adapter.ts'\nimport { runtimePlatformForLogger } from './logger-platform.ts'\n\nexport const CORE_CAPABILITY_OPERATIONS = Object.freeze({\n 'core-provider': Object.freeze(['setup']),\n 'core-credential': Object.freeze(['resolve', 'read', 'commit']),\n 'core-tool-source': Object.freeze(['snapshot']),\n 'core-skill-provider': Object.freeze(['list', 'load', 'read-resource']),\n 'core-memory-store': Object.freeze(['load', 'commit']),\n} as const)\n\nexport type CoreCapabilityFamily = keyof typeof CORE_CAPABILITY_OPERATIONS\nexport type CoreCapabilityOperationName = (typeof CORE_CAPABILITY_OPERATIONS)[CoreCapabilityFamily][number]\ntype TerminalStatus = 'success' | 'error' | 'aborted'\n\nexport interface CoreCapabilityOperation {\n success(): void\n fail(error?: unknown): void\n abort(): void\n}\n\nexport function beginCoreCapabilityOperation(\n logger: SdkLogger,\n family: CoreCapabilityFamily,\n name: CoreCapabilityOperationName,\n): CoreCapabilityOperation {\n validateOperation(family, name)\n const platform = operationPlatform(logger)\n const operationId = platform.randomHex(16), startedAt = platform.monotonicNow()\n emit(logger, 'info', 'SDK capability operation started', {\n integrationSchemaVersion: 1, integrationFamily: family,\n integrationOperation: name, operationId, kind: 'logical-start',\n })\n const attemptId = platform.randomHex(16), attemptStartedAt = platform.monotonicNow()\n emit(logger, 'info', 'SDK capability attempt started', {\n integrationSchemaVersion: 1, integrationFamily: family,\n integrationOperation: name, operationId, kind: 'attempt-start', attemptId, attemptNumber: 1,\n })\n let terminal = false\n const finish = (status: TerminalStatus, error?: unknown): void => {\n if (terminal) return\n terminal = true\n const errorCode = status === 'error' ? safeErrorCode(error) : undefined\n emit(logger, status === 'error' ? 'error' : 'info', terminalMessage(status), {\n integrationSchemaVersion: 1, integrationFamily: family,\n integrationOperation: name, operationId, kind: 'attempt-terminal', attemptId, attemptNumber: 1,\n status, durationMs: duration(platform, attemptStartedAt),\n ...(errorCode === undefined ? {} : { errorCode }),\n })\n emit(logger, status === 'error' ? 'error' : 'info', terminalMessage(status), {\n integrationSchemaVersion: 1, integrationFamily: family,\n integrationOperation: name, operationId, kind: 'logical-terminal',\n status, durationMs: duration(platform, startedAt),\n ...(errorCode === undefined ? {} : { errorCode }),\n })\n }\n return Object.freeze({ success: () => finish('success'), fail: (error: unknown) => finish('error', error),\n abort: () => finish('aborted') })\n}\n\nexport function runCoreCapabilitySync<T>(\n logger: SdkLogger, family: CoreCapabilityFamily, name: CoreCapabilityOperationName,\n signal: AbortSignal | undefined, invoke: () => T,\n): T {\n const operation = beginCoreCapabilityOperation(logger, family, name)\n try {\n signal?.throwIfAborted()\n const value = invoke()\n operation.success()\n return value\n } catch (error: unknown) {\n if (signal?.aborted === true) operation.abort()\n else operation.fail(error)\n throw error\n }\n}\n\nexport async function runCoreCapabilityAsync<T>(\n logger: SdkLogger, family: CoreCapabilityFamily, name: CoreCapabilityOperationName,\n signal: AbortSignal | undefined, invoke: () => Promise<T>,\n): Promise<T> {\n const operation = beginCoreCapabilityOperation(logger, family, name)\n try {\n signal?.throwIfAborted()\n const value = await invoke()\n signal?.throwIfAborted()\n operation.success()\n return value\n } catch (error: unknown) {\n if (signal?.aborted === true) operation.abort()\n else operation.fail(error)\n throw error\n }\n}\n\nexport function runCoreCapabilityMaybeAsync<T>(\n logger: SdkLogger, family: CoreCapabilityFamily, name: CoreCapabilityOperationName,\n signal: AbortSignal | undefined, invoke: () => T,\n): T {\n const operation = beginCoreCapabilityOperation(logger, family, name)\n try {\n signal?.throwIfAborted()\n const value = invoke()\n const pending = captureThenable(value)\n if (pending !== undefined) {\n return pending.then(result => {\n if (signal?.aborted === true) {\n operation.abort()\n signal.throwIfAborted()\n }\n operation.success()\n return result\n }, error => {\n if (signal?.aborted === true) operation.abort(); else operation.fail(error)\n throw error\n }) as T\n }\n operation.success()\n return value\n } catch (error: unknown) {\n if (signal?.aborted === true) operation.abort(); else operation.fail(error)\n throw error\n }\n}\n\nfunction emit(logger: SdkLogger, level: 'info' | 'error', message: string,\n fields: IntegrationOperationEvidenceFields): void {\n try { logger[level](message, fields) } catch { /* diagnostics never replace capability results */ }\n}\n\nfunction safeErrorCode(error: unknown): string {\n if (typeof error === 'object' && error !== null) {\n for (const key of ['code', 'name']) {\n const descriptor = Object.getOwnPropertyDescriptor(error, key)\n if (descriptor !== undefined && 'value' in descriptor && typeof descriptor.value === 'string') {\n const clean = descriptor.value.replace(/[^A-Za-z0-9_.:-]/g, '_').slice(0, 128)\n if (clean.length > 0) return clean\n }\n }\n }\n return 'CAPABILITY_OPERATION_FAILED'\n}\n\nfunction operationPlatform(logger: SdkLogger): Pick<RuntimePlatform, 'monotonicNow' | 'randomHex'> {\n return runtimePlatformForLogger(logger) ?? Object.freeze({\n monotonicNow: systemMonotonicNow,\n randomHex: systemRandomHex,\n })\n}\n\nfunction duration(platform: Pick<RuntimePlatform, 'monotonicNow'>, startedAt: number): number {\n const value = platform.monotonicNow() - startedAt\n return Number.isFinite(value) ? Math.max(0, value) : 0\n}\n\nfunction validateOperation(family: CoreCapabilityFamily, name: CoreCapabilityOperationName): void {\n const operations = CORE_CAPABILITY_OPERATIONS[family] as readonly string[] | undefined\n if (typeof family !== 'string' || family.length < 1 || family.length > 64\n || typeof name !== 'string' || name.length < 1 || name.length > 64\n || operations === undefined || !operations.includes(name)) {\n throw new TypeError('Invalid core capability operation')\n }\n}\n\nfunction captureThenable<T>(value: T): Promise<Awaited<T>> | undefined {\n if ((typeof value !== 'object' || value === null) && typeof value !== 'function') return undefined\n const then = Reflect.get(value as object, 'then')\n if (typeof then !== 'function') return undefined\n return new Promise<Awaited<T>>((resolve, reject) => {\n try { Reflect.apply(then, value, [resolve, reject]) }\n catch (error) { reject(error) }\n })\n}\n\nfunction terminalMessage(status: TerminalStatus): string {\n return status === 'success' ? 'SDK capability operation completed'\n : status === 'error' ? 'SDK capability operation failed' : 'SDK capability operation aborted'\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=Object.freeze({maxTimeoutMs:2147483647,randomAttempts:8,maxRandomBytes:32});Object.freeze([`AbortController`,`AbortSignal.any`,`AbortSignal.timeout`,`DOMException`,`ReadableStream`,`TextDecoder`,`TextEncoder`,`URL`,`crypto.getRandomValues`,`performance.now`,`structuredClone`,`timers`]);function t(t,n=!1){if(!Number.isSafeInteger(t)||t<+!n||t>e.maxTimeoutMs)throw RangeError(`Timeout must be a bounded integer number of milliseconds`);return t}export{e as PLATFORM_LIMITS,t as timeoutValue};
|
|
2
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","names":[],"sources":["../../src/platform/config.ts"],"sourcesContent":["/** Internal Web Platform bounds. Runtime-owned deadlines never overflow host timers. */\nexport const PLATFORM_LIMITS = Object.freeze({\n maxTimeoutMs: 2_147_483_647,\n randomAttempts: 8,\n maxRandomBytes: 32,\n})\n\nexport const UNIVERSAL_FEATURES = Object.freeze([\n 'AbortController', 'AbortSignal.any', 'AbortSignal.timeout', 'DOMException',\n 'ReadableStream', 'TextDecoder', 'TextEncoder', 'URL', 'crypto.getRandomValues',\n 'performance.now', 'structuredClone', 'timers',\n] as const)\n\nexport type UniversalFeature = typeof UNIVERSAL_FEATURES[number]\n\nexport function timeoutValue(value: number, allowZero = false): number {\n if (!Number.isSafeInteger(value) || value < (allowZero ? 0 : 1) || value > PLATFORM_LIMITS.maxTimeoutMs) {\n throw new RangeError('Timeout must be a bounded integer number of milliseconds')\n }\n return value\n}\n"],"mappings":"AACA,MAAa,EAAkB,OAAO,OAAO,CAC3C,aAAc,WACd,eAAgB,EAChB,eAAgB,EAClB,CAAC,EAEiC,OAAO,OAAO,CAC9C,kBAAmB,kBAAmB,sBAAuB,eAC7D,iBAAkB,cAAe,cAAe,MAAO,yBACvD,kBAAmB,kBAAmB,QACxC,CAAU,EAIV,SAAgB,EAAa,EAAe,EAAY,GAAe,CACrE,GAAI,CAAC,OAAO,cAAc,CAAK,GAAK,EAAS,KAAsB,EAAQ,EAAgB,aACzF,MAAU,WAAW,0DAA0D,EAEjF,OAAO,CACT"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger-platform.js","names":[],"sources":["../../src/platform/logger-platform.ts"],"sourcesContent":["import type { SdkLogger } from '../logging/types.ts'\nimport type { RuntimePlatform } from './adapter.ts'\n\nconst LOGGER_PLATFORMS = new WeakMap<object, RuntimePlatform>()\n\nexport function bindRuntimeLoggerPlatform(logger: SdkLogger, platform: RuntimePlatform): void {\n LOGGER_PLATFORMS.set(logger, platform)\n}\n\nexport function runtimePlatformForLogger(logger: SdkLogger): RuntimePlatform | undefined {\n return LOGGER_PLATFORMS.get(logger)\n}\n"],"mappings":"AAGA,MAAM,EAAmB,IAAI,QAE7B,SAAgB,EAA0B,EAAmB,EAAiC,CAC5F,EAAiB,IAAI,EAAQ,CAAQ,CACvC,CAEA,SAAgB,EAAyB,EAAgD,CACvF,OAAO,EAAiB,IAAI,CAAM,CACpC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{timeoutValue as e}from"./config.js";var t=class{platform;closed=!1;timers=new Set;listeners=new Set;scopes=new Set;constructor(e){this.platform=e}get pendingTimers(){return this.timers.size}get isClosed(){return this.closed}get pendingListeners(){return this.listeners.size}assertOpen(){if(this.closed)throw Error(`Runtime resources are closed`)}after(t,n){this.assertOpen(),e(t,!0);let r=!0,i=()=>void 0,a=()=>{r&&(r=!1,this.timers.delete(a),i())};this.timers.add(a);try{i=this.platform.after(t,()=>{r&&(a(),n())})}catch(e){throw a(),e}return a}onAbort(e,t){this.assertOpen();let n=!0,r=()=>{n&&(n=!1,this.listeners.delete(r),e.removeEventListener(`abort`,i))},i=()=>{n&&(r(),t())};this.listeners.add(r);try{e.addEventListener(`abort`,i,{once:!0}),e.aborted&&i()}catch(e){throw r(),e}return r}cancellation(t,n){this.assertOpen(),n!==void 0&&e(n);let r=this.platform.controller(),i=[],a=!1,o=()=>{if(!a){a=!0,this.scopes.delete(c);for(let e of i.splice(0).reverse())e()}},s=()=>{r.abort(Error(`Runtime operation was cancelled`)),o()},c=()=>{s()};this.scopes.add(c);try{for(let e of t){if(a)break;let t=this.onAbort(e,s);a?t():i.push(t)}!a&&n!==void 0&&i.push(this.after(n,s))}catch(e){throw o(),e}return Object.freeze({signal:r.signal,cancel:s,dispose:o})}close(){if(!this.closed){this.closed=!0;for(let e of[...this.scopes])e();for(let e of[...this.timers])e();for(let e of[...this.listeners])e()}}};export{t as RuntimeResources};
|
|
2
|
+
//# sourceMappingURL=resources.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resources.js","names":[],"sources":["../../src/platform/resources.ts"],"sourcesContent":["import type { RuntimePlatform } from './adapter.ts'\nimport { timeoutValue } from './config.ts'\n\nexport interface CancellationScope {\n readonly signal: AbortSignal\n cancel(): void\n dispose(): void\n}\n\n/** One owner for cancelable timers/listeners. No interval or native timeout-signal can outlive it. */\nexport class RuntimeResources {\n private closed = false\n private readonly timers = new Set<() => void>()\n private readonly listeners = new Set<() => void>()\n private readonly scopes = new Set<() => void>()\n\n constructor(readonly platform: RuntimePlatform) {}\n\n get pendingTimers(): number { return this.timers.size }\n get isClosed(): boolean { return this.closed }\n get pendingListeners(): number { return this.listeners.size }\n\n private assertOpen(): void {\n if (this.closed) throw new Error('Runtime resources are closed')\n }\n\n after(milliseconds: number, callback: () => void): () => void {\n this.assertOpen()\n timeoutValue(milliseconds, true)\n let active = true\n let cancel = (): void => undefined\n const release = (): void => {\n if (!active) return\n active = false\n this.timers.delete(release)\n cancel()\n }\n this.timers.add(release)\n try {\n cancel = this.platform.after(milliseconds, () => {\n if (!active) return\n release()\n callback()\n })\n } catch (error) { release(); throw error }\n return release\n }\n\n onAbort(signal: AbortSignal, callback: () => void): () => void {\n this.assertOpen()\n let active = true\n const release = (): void => {\n if (!active) return\n active = false\n this.listeners.delete(release)\n signal.removeEventListener('abort', abort)\n }\n const abort = (): void => { if (active) { release(); callback() } }\n this.listeners.add(release)\n try {\n signal.addEventListener('abort', abort, { once: true })\n if (signal.aborted) abort()\n } catch (error) { release(); throw error }\n return release\n }\n\n cancellation(signals: readonly AbortSignal[], timeoutMs?: number): CancellationScope {\n this.assertOpen()\n if (timeoutMs !== undefined) timeoutValue(timeoutMs)\n const controller = this.platform.controller()\n const releases: (() => void)[] = []\n let disposed = false\n const dispose = (): void => {\n if (disposed) return\n disposed = true\n this.scopes.delete(shutdown)\n for (const release of releases.splice(0).reverse()) release()\n }\n const abort = (): void => {\n controller.abort(new Error('Runtime operation was cancelled'))\n dispose()\n }\n const shutdown = (): void => { abort() }\n this.scopes.add(shutdown)\n try {\n for (const signal of signals) {\n if (disposed) break\n const release = this.onAbort(signal, abort)\n if (disposed) release()\n else releases.push(release)\n }\n if (!disposed && timeoutMs !== undefined) releases.push(this.after(timeoutMs, abort))\n } catch (error) { dispose(); throw error }\n return Object.freeze({ signal: controller.signal, cancel: abort, dispose })\n }\n\n close(): void {\n if (this.closed) return\n this.closed = true\n for (const shutdown of [...this.scopes]) shutdown()\n for (const release of [...this.timers]) release()\n for (const release of [...this.listeners]) release()\n }\n}\n"],"mappings":"2CAUA,IAAa,EAAb,KAA8B,CAMP,SALrB,OAAiB,GACjB,OAA0B,IAAI,IAC9B,UAA6B,IAAI,IACjC,OAA0B,IAAI,IAE9B,YAAY,EAAoC,CAA3B,KAAA,SAAA,CAA4B,CAEjD,IAAI,eAAwB,CAAE,OAAO,KAAK,OAAO,IAAK,CACtD,IAAI,UAAoB,CAAE,OAAO,KAAK,MAAO,CAC7C,IAAI,kBAA2B,CAAE,OAAO,KAAK,UAAU,IAAK,CAE5D,YAA2B,CACzB,GAAI,KAAK,OAAQ,MAAU,MAAM,8BAA8B,CACjE,CAEA,MAAM,EAAsB,EAAkC,CAC5D,KAAK,WAAW,EAChB,EAAa,EAAc,EAAI,EAC/B,IAAI,EAAS,GACT,MAAqB,IAAA,GACnB,MAAsB,CACrB,IACL,EAAS,GACT,KAAK,OAAO,OAAO,CAAO,EAC1B,EAAO,EACT,EACA,KAAK,OAAO,IAAI,CAAO,EACvB,GAAI,CACF,EAAS,KAAK,SAAS,MAAM,MAAoB,CAC1C,IACL,EAAQ,EACR,EAAS,EACX,CAAC,CACH,OAAS,EAAO,CAAa,MAAX,EAAQ,EAAS,CAAM,CACzC,OAAO,CACT,CAEA,QAAQ,EAAqB,EAAkC,CAC7D,KAAK,WAAW,EAChB,IAAI,EAAS,GACP,MAAsB,CACrB,IACL,EAAS,GACT,KAAK,UAAU,OAAO,CAAO,EAC7B,EAAO,oBAAoB,QAAS,CAAK,EAC3C,EACM,MAAoB,CAAM,IAAU,EAAQ,EAAG,EAAS,EAAI,EAClE,KAAK,UAAU,IAAI,CAAO,EAC1B,GAAI,CACF,EAAO,iBAAiB,QAAS,EAAO,CAAE,KAAM,EAAK,CAAC,EAClD,EAAO,SAAS,EAAM,CAC5B,OAAS,EAAO,CAAa,MAAX,EAAQ,EAAS,CAAM,CACzC,OAAO,CACT,CAEA,aAAa,EAAiC,EAAuC,CACnF,KAAK,WAAW,EACZ,IAAc,IAAA,IAAW,EAAa,CAAS,EACnD,IAAM,EAAa,KAAK,SAAS,WAAW,EACtC,EAA2B,CAAC,EAC9B,EAAW,GACT,MAAsB,CACtB,MAEJ,CADA,EAAW,GACX,KAAK,OAAO,OAAO,CAAQ,EAC3B,IAAK,IAAM,KAAW,EAAS,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAG,EAAQ,CADjC,CAE7B,EACM,MAAoB,CACxB,EAAW,MAAU,MAAM,iCAAiC,CAAC,EAC7D,EAAQ,CACV,EACM,MAAuB,CAAE,EAAM,CAAE,EACvC,KAAK,OAAO,IAAI,CAAQ,EACxB,GAAI,CACF,IAAK,IAAM,KAAU,EAAS,CAC5B,GAAI,EAAU,MACd,IAAM,EAAU,KAAK,QAAQ,EAAQ,CAAK,EACtC,EAAU,EAAQ,EACjB,EAAS,KAAK,CAAO,CAC5B,CACI,CAAC,GAAY,IAAc,IAAA,IAAW,EAAS,KAAK,KAAK,MAAM,EAAW,CAAK,CAAC,CACtF,OAAS,EAAO,CAAa,MAAX,EAAQ,EAAS,CAAM,CACzC,OAAO,OAAO,OAAO,CAAE,OAAQ,EAAW,OAAQ,OAAQ,EAAO,SAAQ,CAAC,CAC5E,CAEA,OAAc,CACR,SAAK,OACT,MAAK,OAAS,GACd,IAAK,IAAM,IAAY,CAAC,GAAG,KAAK,MAAM,EAAG,EAAS,EAClD,IAAK,IAAM,IAAW,CAAC,GAAG,KAAK,MAAM,EAAG,EAAQ,EAChD,IAAK,IAAM,IAAW,CAAC,GAAG,KAAK,SAAS,EAAG,EAAQ,CAHrC,CAIhB,CACF"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { StreamChunk } from "../stream/chunk.js";
|
|
2
|
+
import { AgentSdkError } from "../errors/agent-sdk-error.js";
|
|
3
|
+
import { ModelInvocationContext } from "../observation/report.js";
|
|
4
|
+
import { GenerateOptions } from "../contract/generate-options.js";
|
|
5
|
+
import { ModelAdapter } from "../contract/adapter.js";
|
|
6
|
+
//#region src/plugin/provider-plugin.d.ts
|
|
7
|
+
type StreamMiddleware = (options: GenerateOptions, next: () => AsyncIterable<StreamChunk>, context: ModelInvocationContext) => AsyncIterable<StreamChunk>;
|
|
8
|
+
interface AdapterRegistrationHandle {
|
|
9
|
+
(): void;
|
|
10
|
+
replace(providers: readonly string[]): void;
|
|
11
|
+
}
|
|
12
|
+
interface ModelProviderRegistrar {
|
|
13
|
+
registerAdapter(routes: readonly string[], adapter: ModelAdapter): AdapterRegistrationHandle;
|
|
14
|
+
use(middleware: StreamMiddleware): () => void;
|
|
15
|
+
}
|
|
16
|
+
interface ModelProviderPlugin {
|
|
17
|
+
readonly id: string;
|
|
18
|
+
readonly displayName: string;
|
|
19
|
+
/** Stable provider family; legacy plugins default to their plugin id. */
|
|
20
|
+
readonly family?: string;
|
|
21
|
+
setup(registrar: ModelProviderRegistrar): void | (() => void);
|
|
22
|
+
}
|
|
23
|
+
interface PluginRegistrationHandle {
|
|
24
|
+
(): void;
|
|
25
|
+
readonly pluginId: string;
|
|
26
|
+
}
|
|
27
|
+
declare const PLUGIN_ERROR_CODES: Readonly<{
|
|
28
|
+
readonly INSTALL_FAILED: 'PLUGIN_INSTALL_FAILED';
|
|
29
|
+
readonly CLEANUP_FAILED: 'PLUGIN_CLEANUP_FAILED';
|
|
30
|
+
}>;
|
|
31
|
+
declare class PluginError extends AgentSdkError {
|
|
32
|
+
readonly pluginId: string;
|
|
33
|
+
constructor(message: string, code: string, pluginId: string, options?: ErrorOptions);
|
|
34
|
+
}
|
|
35
|
+
//#endregion
|
|
36
|
+
export { AdapterRegistrationHandle, ModelProviderPlugin, ModelProviderRegistrar, PLUGIN_ERROR_CODES, PluginError, PluginRegistrationHandle, StreamMiddleware };
|
|
37
|
+
//# sourceMappingURL=provider-plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-plugin.d.ts","names":[],"sources":["../../src/plugin/provider-plugin.ts"],"mappings":";;;;;;KAMY,oBACV,SAAS,iBACT,YAAY,cAAc,cAC1B,SAAS,2BACN,cAAc;UAEF;;EAEf,QAAQ;;UAGO;EACf,gBAAgB,2BAA2B,SAAS,eAAe;EACnE,IAAI,YAAY;;UAGD;WACN;WACA;;WAEA;EACT,MAAM,WAAW;;UAGF;;WAEN;;cAGE,oBAAkB;WACb;WACA;;cAGL,oBAAoB;WACtB;EAET,YAAY,iBAAiB,cAAc,kBAAkB,UAAU"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{AgentSdkError as e}from"../errors/agent-sdk-error.js";const t=Object.freeze({INSTALL_FAILED:`PLUGIN_INSTALL_FAILED`,CLEANUP_FAILED:`PLUGIN_CLEANUP_FAILED`});var n=class extends e{pluginId;constructor(e,t,n,r){super(e,t,r),this.name=`PluginError`,this.pluginId=n}};export{t as PLUGIN_ERROR_CODES,n as PluginError};
|
|
2
|
+
//# sourceMappingURL=provider-plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-plugin.js","names":[],"sources":["../../src/plugin/provider-plugin.ts"],"sourcesContent":["import type { ModelAdapter } from '../contract/adapter.ts'\nimport type { GenerateOptions } from '../contract/generate-options.ts'\nimport { AgentSdkError } from '../errors/agent-sdk-error.ts'\nimport type { ModelInvocationContext } from '../observation/report.ts'\nimport type { StreamChunk } from '../stream/chunk.ts'\n\nexport type StreamMiddleware = (\n options: GenerateOptions,\n next: () => AsyncIterable<StreamChunk>,\n context: ModelInvocationContext,\n) => AsyncIterable<StreamChunk>\n\nexport interface AdapterRegistrationHandle {\n (): void\n replace(providers: readonly string[]): void\n}\n\nexport interface ModelProviderRegistrar {\n registerAdapter(routes: readonly string[], adapter: ModelAdapter): AdapterRegistrationHandle\n use(middleware: StreamMiddleware): () => void\n}\n\nexport interface ModelProviderPlugin {\n readonly id: string\n readonly displayName: string\n /** Stable provider family; legacy plugins default to their plugin id. */\n readonly family?: string\n setup(registrar: ModelProviderRegistrar): void | (() => void)\n}\n\nexport interface PluginRegistrationHandle {\n (): void\n readonly pluginId: string\n}\n\nexport const PLUGIN_ERROR_CODES = Object.freeze({\n INSTALL_FAILED: 'PLUGIN_INSTALL_FAILED',\n CLEANUP_FAILED: 'PLUGIN_CLEANUP_FAILED',\n} as const)\n\nexport class PluginError extends AgentSdkError {\n readonly pluginId: string\n\n constructor(message: string, code: string, pluginId: string, options?: ErrorOptions) {\n super(message, code, options)\n this.name = 'PluginError'\n this.pluginId = pluginId\n }\n}\n"],"mappings":"6DAmCA,MAAa,EAAqB,OAAO,OAAO,CAC9C,eAAgB,wBAChB,eAAgB,uBAClB,CAAU,EAEV,IAAa,EAAb,cAAiC,CAAc,CAC7C,SAEA,YAAY,EAAiB,EAAc,EAAkB,EAAwB,CACnF,MAAM,EAAS,EAAM,CAAO,EAC5B,KAAK,KAAO,cACZ,KAAK,SAAW,CAClB,CACF"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
//#region src/primitives/brand.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Nominal typing over strings, at zero runtime cost.
|
|
4
|
+
*
|
|
5
|
+
* The point is to stop a value from silently crossing a boundary it does not
|
|
6
|
+
* belong to Epassing a model id where a tool-call id is expected is a real bug
|
|
7
|
+
* that plain `string` cannot catch. Each brand function is an identity cast and
|
|
8
|
+
* performs NO validation; it asserts intent, not well-formedness.
|
|
9
|
+
*
|
|
10
|
+
* @module ai-agent-sdk/core/primitives/brand
|
|
11
|
+
*/
|
|
12
|
+
declare const BRAND: unique symbol;
|
|
13
|
+
/** A string carrying a compile-time-only nominal tag `B`. */
|
|
14
|
+
type Branded<B extends string> = string & {
|
|
15
|
+
readonly [BRAND]: B;
|
|
16
|
+
};
|
|
17
|
+
/** Stable identity of one message across construction, history, and requests. */
|
|
18
|
+
type MessageId = Branded<'MessageId'>;
|
|
19
|
+
/**
|
|
20
|
+
* Brand a message identifier.
|
|
21
|
+
* @param id - the opaque message identifier.
|
|
22
|
+
* @returns the same string, branded; no validation is performed.
|
|
23
|
+
*/
|
|
24
|
+
declare function MessageId(id: string): MessageId;
|
|
25
|
+
/**
|
|
26
|
+
* Correlates a model-issued tool call with the result sent back for it.
|
|
27
|
+
* Provider-issued in real adapters; synthesized by assembler fallbacks.
|
|
28
|
+
*/
|
|
29
|
+
type ToolCallId = Branded<'ToolCallId'>;
|
|
30
|
+
/**
|
|
31
|
+
* Brand a tool-call identifier.
|
|
32
|
+
* @param id - the provider-issued (or synthesized) call id.
|
|
33
|
+
* @returns the same string, branded; no validation is performed.
|
|
34
|
+
*/
|
|
35
|
+
declare function ToolCallId(id: string): ToolCallId;
|
|
36
|
+
/** Provider-issued request identifier, retained only for diagnostics. */
|
|
37
|
+
type ProviderRequestId = Branded<'ProviderRequestId'>;
|
|
38
|
+
/**
|
|
39
|
+
* Brand a provider-issued request identifier.
|
|
40
|
+
* @param id - the opaque provider-issued string.
|
|
41
|
+
* @returns the same string, branded; no validation is performed.
|
|
42
|
+
*/
|
|
43
|
+
declare function ProviderRequestId(id: string): ProviderRequestId;
|
|
44
|
+
/**
|
|
45
|
+
* Adapter-owned identifier for one model's selectable reasoning effort.
|
|
46
|
+
*
|
|
47
|
+
* Deliberately opaque rather than a fixed union: "how hard should this model
|
|
48
|
+
* think" is spelled differently by every provider (OpenAI takes an effort
|
|
49
|
+
* level, Anthropic takes a thinking token budget), and freezing one vendor's
|
|
50
|
+
* vocabulary into the core would make the other one lie.
|
|
51
|
+
*/
|
|
52
|
+
type ReasoningEffortId = Branded<'ReasoningEffortId'>;
|
|
53
|
+
/**
|
|
54
|
+
* Brand a reasoning-effort identifier.
|
|
55
|
+
* @param id - the opaque identifier exposed by one model's capabilities.
|
|
56
|
+
* @returns the same string, branded; no validation is performed.
|
|
57
|
+
*/
|
|
58
|
+
declare function ReasoningEffortId(id: string): ReasoningEffortId;
|
|
59
|
+
//#endregion
|
|
60
|
+
export { Branded, MessageId, ProviderRequestId, ReasoningEffortId, ToolCallId };
|
|
61
|
+
//# sourceMappingURL=brand.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brand.d.ts","names":[],"sources":["../../src/primitives/brand.ts"],"mappings":";;;;;;;;;;;cAWc;;KAGF,QAAQ;YAAyC,QAAQ;;;KAGzD,YAAY;;;;;;iBAOR,UAAU,aAAa;;;;;KAQ3B,aAAa;;;;;;iBAOT,WAAW,aAAa;;KAK5B,oBAAoB;;;;;;iBAOhB,kBAAkB,aAAa;;;;;;;;;KAYnC,oBAAoB;;;;;;iBAOhB,kBAAkB,aAAa"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brand.js","names":[],"sources":["../../src/primitives/brand.ts"],"sourcesContent":["/**\n * Nominal typing over strings, at zero runtime cost.\n *\n * The point is to stop a value from silently crossing a boundary it does not\n * belong to Epassing a model id where a tool-call id is expected is a real bug\n * that plain `string` cannot catch. Each brand function is an identity cast and\n * performs NO validation; it asserts intent, not well-formedness.\n *\n * @module ai-agent-sdk/core/primitives/brand\n */\n\ndeclare const BRAND: unique symbol\n\n/** A string carrying a compile-time-only nominal tag `B`. */\nexport type Branded<B extends string> = string & { readonly [BRAND]: B }\n\n/** Stable identity of one message across construction, history, and requests. */\nexport type MessageId = Branded<'MessageId'>\n\n/**\n * Brand a message identifier.\n * @param id - the opaque message identifier.\n * @returns the same string, branded; no validation is performed.\n */\nexport function MessageId(id: string): MessageId {\n return id as MessageId\n}\n\n/**\n * Correlates a model-issued tool call with the result sent back for it.\n * Provider-issued in real adapters; synthesized by assembler fallbacks.\n */\nexport type ToolCallId = Branded<'ToolCallId'>\n\n/**\n * Brand a tool-call identifier.\n * @param id - the provider-issued (or synthesized) call id.\n * @returns the same string, branded; no validation is performed.\n */\nexport function ToolCallId(id: string): ToolCallId {\n return id as ToolCallId\n}\n\n/** Provider-issued request identifier, retained only for diagnostics. */\nexport type ProviderRequestId = Branded<'ProviderRequestId'>\n\n/**\n * Brand a provider-issued request identifier.\n * @param id - the opaque provider-issued string.\n * @returns the same string, branded; no validation is performed.\n */\nexport function ProviderRequestId(id: string): ProviderRequestId {\n return id as ProviderRequestId\n}\n\n/**\n * Adapter-owned identifier for one model's selectable reasoning effort.\n *\n * Deliberately opaque rather than a fixed union: \"how hard should this model\n * think\" is spelled differently by every provider (OpenAI takes an effort\n * level, Anthropic takes a thinking token budget), and freezing one vendor's\n * vocabulary into the core would make the other one lie.\n */\nexport type ReasoningEffortId = Branded<'ReasoningEffortId'>\n\n/**\n * Brand a reasoning-effort identifier.\n * @param id - the opaque identifier exposed by one model's capabilities.\n * @returns the same string, branded; no validation is performed.\n */\nexport function ReasoningEffortId(id: string): ReasoningEffortId {\n return id as ReasoningEffortId\n}\n"],"mappings":"AAwBA,SAAgB,EAAU,EAAuB,CAC/C,OAAO,CACT,CAaA,SAAgB,EAAW,EAAwB,CACjD,OAAO,CACT,CAUA,SAAgB,EAAkB,EAA+B,CAC/D,OAAO,CACT,CAiBA,SAAgB,EAAkB,EAA+B,CAC/D,OAAO,CACT"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
//#region src/primitives/freeze.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* In-place deep freeze used to publish immutable messages and configs.
|
|
4
|
+
*
|
|
5
|
+
* @module ai-agent-sdk/core/primitives/freeze
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Deep-freeze a value in place with an ITERATIVE traversal, guarding cycles.
|
|
9
|
+
*
|
|
10
|
+
* Iterative rather than recursive so that a deeply nested message (a long tool
|
|
11
|
+
* result chain, say) cannot blow the JavaScript call stack. {@link AbortSignal}
|
|
12
|
+
* is skipped deliberately: it is the request's live cancellation channel and
|
|
13
|
+
* freezing it breaks abort.
|
|
14
|
+
* @param value - the value to freeze in place.
|
|
15
|
+
* @returns the same value, frozen.
|
|
16
|
+
*/
|
|
17
|
+
declare function deepFreeze<T>(value: T): T;
|
|
18
|
+
//#endregion
|
|
19
|
+
export { deepFreeze };
|
|
20
|
+
//# sourceMappingURL=freeze.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"freeze.d.ts","names":[],"sources":["../../src/primitives/freeze.ts"],"mappings":";;;;;;;;;;;;;;;;iBAgBgB,WAAW,GAAG,OAAO,IAAI"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
function e(e){let t=new WeakSet,n=[{kind:`visit`,node:e}];for(;n.length>0;){let e=n.pop();if(e===void 0)continue;if(e.kind===`property`){n.push({kind:`visit`,node:e.source[e.key]});continue}let r=e.node;if(typeof r!=`object`||!r||r instanceof AbortSignal||t.has(r))continue;t.add(r),Object.freeze(r);let i=Object.keys(r);for(let e=i.length-1;e>=0;e--){let t=i[e];t!==void 0&&n.push({kind:`property`,source:r,key:t})}}return e}export{e as deepFreeze};
|
|
2
|
+
//# sourceMappingURL=freeze.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"freeze.js","names":[],"sources":["../../src/primitives/freeze.ts"],"sourcesContent":["/**\n * In-place deep freeze used to publish immutable messages and configs.\n *\n * @module ai-agent-sdk/core/primitives/freeze\n */\n\n/**\n * Deep-freeze a value in place with an ITERATIVE traversal, guarding cycles.\n *\n * Iterative rather than recursive so that a deeply nested message (a long tool\n * result chain, say) cannot blow the JavaScript call stack. {@link AbortSignal}\n * is skipped deliberately: it is the request's live cancellation channel and\n * freezing it breaks abort.\n * @param value - the value to freeze in place.\n * @returns the same value, frozen.\n */\nexport function deepFreeze<T>(value: T): T {\n const seen = new WeakSet<object>()\n const pending: (\n | { kind: 'visit'; node: unknown }\n | { kind: 'property'; source: Record<string, unknown>; key: string }\n )[] = [{ kind: 'visit', node: value }]\n while (pending.length > 0) {\n const task = pending.pop()\n if (task === undefined) continue\n if (task.kind === 'property') {\n pending.push({ kind: 'visit', node: task.source[task.key] })\n continue\n }\n const node = task.node\n if (node === null || typeof node !== 'object') continue\n if (node instanceof AbortSignal) continue\n if (seen.has(node)) continue\n seen.add(node)\n Object.freeze(node)\n const keys = Object.keys(node)\n for (let index = keys.length - 1; index >= 0; index--) {\n const key = keys[index]\n if (key === undefined) continue\n pending.push({ kind: 'property', source: node as Record<string, unknown>, key })\n }\n }\n return value\n}\n"],"mappings":"AAgBA,SAAgB,EAAc,EAAa,CACzC,IAAM,EAAO,IAAI,QACX,EAGA,CAAC,CAAE,KAAM,QAAS,KAAM,CAAM,CAAC,EACrC,KAAO,EAAQ,OAAS,GAAG,CACzB,IAAM,EAAO,EAAQ,IAAI,EACzB,GAAI,IAAS,IAAA,GAAW,SACxB,GAAI,EAAK,OAAS,WAAY,CAC5B,EAAQ,KAAK,CAAE,KAAM,QAAS,KAAM,EAAK,OAAO,EAAK,IAAK,CAAC,EAC3D,QACF,CACA,IAAM,EAAO,EAAK,KAGlB,GAFqB,OAAO,GAAS,WAAjC,GACA,aAAgB,aAChB,EAAK,IAAI,CAAI,EAAG,SACpB,EAAK,IAAI,CAAI,EACb,OAAO,OAAO,CAAI,EAClB,IAAM,EAAO,OAAO,KAAK,CAAI,EAC7B,IAAK,IAAI,EAAQ,EAAK,OAAS,EAAG,GAAS,EAAG,IAAS,CACrD,IAAM,EAAM,EAAK,GACb,IAAQ,IAAA,IACZ,EAAQ,KAAK,CAAE,KAAM,WAAY,OAAQ,EAAiC,KAAI,CAAC,CACjF,CACF,CACA,OAAO,CACT"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{deepFreeze as e}from"./freeze.js";function t(e,t){let r=n(e,t);if(r===null||Array.isArray(r)||typeof r!=`object`)throw TypeError(`Expected a JSON object`);return r}function n(t,n){let i=0,a=new Set,o=new TextEncoder,s=(e,t)=>{if(i++,i>n.maxNodes||t>n.maxDepth)throw TypeError(`JSON data exceeds its bound`);if(e===null||typeof e==`boolean`||typeof e==`string`)return e;if(typeof e==`number`){if(!Number.isFinite(e))throw TypeError(`JSON number must be finite`);return e}if(Array.isArray(e))return c(e,t);if(typeof e!=`object`||!e)throw TypeError(`JSON data contains an unsupported value`);return l(e,t)},c=(e,t)=>{if(a.has(e))throw TypeError(`JSON data is cyclic`);let i=r(e,`length`);if(!Number.isSafeInteger(i)||Number(i)<0||Number(i)>n.maxArrayItems)throw TypeError(`JSON array exceeds its bound`);a.add(e);try{let n=[];for(let a=0;a<Number(i);a++)n.push(s(r(e,String(a)),t+1));return Object.freeze(n)}finally{a.delete(e)}},l=(e,t)=>{let i=Object.getPrototypeOf(e);if(i!==Object.prototype&&i!==null)throw TypeError(`JSON object must be plain`);if(a.has(e))throw TypeError(`JSON data is cyclic`);let c=Reflect.ownKeys(e);if(c.some(e=>typeof e!=`string`)||c.length>n.maxObjectFields)throw TypeError(`JSON object fields exceed their bound`);a.add(e);try{let i=Object.create(null);for(let a of c){if(o.encode(a).byteLength>n.maxKeyBytes)throw TypeError(`JSON object key exceeds its bound`);i[a]=s(r(e,a),t+1)}return Object.freeze(i)}finally{a.delete(e)}},u=s(t,0);if(o.encode(JSON.stringify(u)).byteLength>n.maxBytes)throw TypeError(`JSON data exceeds its byte bound`);return e(u)}function r(e,t){let n=Object.getOwnPropertyDescriptor(e,t);if(n===void 0)throw TypeError(`JSON arrays must not be sparse`);if(!(`value`in n))throw TypeError(`JSON data must not use accessors`);return n.value}export{t as snapshotJsonObject,n as snapshotJsonValue};
|
|
2
|
+
//# sourceMappingURL=json-snapshot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-snapshot.js","names":[],"sources":["../../src/primitives/json-snapshot.ts"],"sourcesContent":["import { deepFreeze } from './freeze.ts'\nimport type { JsonObject, JsonValue } from './json.ts'\n\nexport interface JsonSnapshotLimits {\n readonly maxObjectFields: number\n readonly maxArrayItems: number\n readonly maxDepth: number\n readonly maxNodes: number\n readonly maxKeyBytes: number\n readonly maxBytes: number\n}\n\n/** Clone bounded lossless JSON without invoking accessors or serialization hooks. */\nexport function snapshotJsonObject(value: unknown, limits: JsonSnapshotLimits): Readonly<JsonObject> {\n const snapshot = snapshotJsonValue(value, limits)\n if (snapshot === null || Array.isArray(snapshot) || typeof snapshot !== 'object') {\n throw new TypeError('Expected a JSON object')\n }\n return snapshot as Readonly<JsonObject>\n}\n\n/** Clone any bounded lossless JSON value, including primitive and array locators. */\nexport function snapshotJsonValue(value: unknown, limits: JsonSnapshotLimits): JsonValue {\n let nodes = 0\n const seen = new Set<object>()\n const encoder = new TextEncoder()\n\n const clone = (input: unknown, depth: number): JsonValue => {\n nodes++\n if (nodes > limits.maxNodes || depth > limits.maxDepth) throw new TypeError('JSON data exceeds its bound')\n if (input === null || typeof input === 'boolean' || typeof input === 'string') return input\n if (typeof input === 'number') {\n if (!Number.isFinite(input)) throw new TypeError('JSON number must be finite')\n return input\n }\n if (Array.isArray(input)) return cloneArray(input, depth)\n if (typeof input !== 'object' || input === null) throw new TypeError('JSON data contains an unsupported value')\n return cloneObject(input, depth)\n }\n\n const cloneArray = (source: readonly unknown[], depth: number): readonly JsonValue[] => {\n if (seen.has(source)) throw new TypeError('JSON data is cyclic')\n const length = ownData(source, 'length')\n if (!Number.isSafeInteger(length) || Number(length) < 0 || Number(length) > limits.maxArrayItems) {\n throw new TypeError('JSON array exceeds its bound')\n }\n seen.add(source)\n try {\n const result: JsonValue[] = []\n for (let index = 0; index < Number(length); index++) result.push(clone(ownData(source, String(index)), depth + 1))\n return Object.freeze(result)\n } finally { seen.delete(source) }\n }\n\n const cloneObject = (source: object, depth: number): Readonly<JsonObject> => {\n const prototype: unknown = Object.getPrototypeOf(source)\n if (prototype !== Object.prototype && prototype !== null) throw new TypeError('JSON object must be plain')\n if (seen.has(source)) throw new TypeError('JSON data is cyclic')\n const keys = Reflect.ownKeys(source)\n if (keys.some(key => typeof key !== 'string') || keys.length > limits.maxObjectFields) {\n throw new TypeError('JSON object fields exceed their bound')\n }\n seen.add(source)\n try {\n const result: Record<string, JsonValue> = Object.create(null) as Record<string, JsonValue>\n for (const key of keys as string[]) {\n if (encoder.encode(key).byteLength > limits.maxKeyBytes) throw new TypeError('JSON object key exceeds its bound')\n result[key] = clone(ownData(source, key), depth + 1)\n }\n return Object.freeze(result)\n } finally { seen.delete(source) }\n }\n\n const snapshot = clone(value, 0)\n if (encoder.encode(JSON.stringify(snapshot)).byteLength > limits.maxBytes) {\n throw new TypeError('JSON data exceeds its byte bound')\n }\n return deepFreeze(snapshot)\n}\n\nfunction ownData(source: object, key: string): unknown {\n const descriptor = Object.getOwnPropertyDescriptor(source, key)\n if (descriptor === undefined) throw new TypeError('JSON arrays must not be sparse')\n if (!('value' in descriptor)) throw new TypeError('JSON data must not use accessors')\n return descriptor.value\n}\n"],"mappings":"yCAaA,SAAgB,EAAmB,EAAgB,EAAkD,CACnG,IAAM,EAAW,EAAkB,EAAO,CAAM,EAChD,GAAI,IAAa,MAAQ,MAAM,QAAQ,CAAQ,GAAK,OAAO,GAAa,SACtE,MAAU,UAAU,wBAAwB,EAE9C,OAAO,CACT,CAGA,SAAgB,EAAkB,EAAgB,EAAuC,CACvF,IAAI,EAAQ,EACN,EAAO,IAAI,IACX,EAAU,IAAI,YAEd,GAAS,EAAgB,IAA6B,CAE1D,GADA,IACI,EAAQ,EAAO,UAAY,EAAQ,EAAO,SAAU,MAAU,UAAU,6BAA6B,EACzG,GAAI,IAAU,MAAQ,OAAO,GAAU,WAAa,OAAO,GAAU,SAAU,OAAO,EACtF,GAAI,OAAO,GAAU,SAAU,CAC7B,GAAI,CAAC,OAAO,SAAS,CAAK,EAAG,MAAU,UAAU,4BAA4B,EAC7E,OAAO,CACT,CACA,GAAI,MAAM,QAAQ,CAAK,EAAG,OAAO,EAAW,EAAO,CAAK,EACxD,GAAI,OAAO,GAAU,WAAY,EAAgB,MAAU,UAAU,yCAAyC,EAC9G,OAAO,EAAY,EAAO,CAAK,CACjC,EAEM,GAAc,EAA4B,IAAwC,CACtF,GAAI,EAAK,IAAI,CAAM,EAAG,MAAU,UAAU,qBAAqB,EAC/D,IAAM,EAAS,EAAQ,EAAQ,QAAQ,EACvC,GAAI,CAAC,OAAO,cAAc,CAAM,GAAK,OAAO,CAAM,EAAI,GAAK,OAAO,CAAM,EAAI,EAAO,cACjF,MAAU,UAAU,8BAA8B,EAEpD,EAAK,IAAI,CAAM,EACf,GAAI,CACF,IAAM,EAAsB,CAAC,EAC7B,IAAK,IAAI,EAAQ,EAAG,EAAQ,OAAO,CAAM,EAAG,IAAS,EAAO,KAAK,EAAM,EAAQ,EAAQ,OAAO,CAAK,CAAC,EAAG,EAAQ,CAAC,CAAC,EACjH,OAAO,OAAO,OAAO,CAAM,CAC7B,QAAU,CAAE,EAAK,OAAO,CAAM,CAAE,CAClC,EAEM,GAAe,EAAgB,IAAwC,CAC3E,IAAM,EAAqB,OAAO,eAAe,CAAM,EACvD,GAAI,IAAc,OAAO,WAAa,IAAc,KAAM,MAAU,UAAU,2BAA2B,EACzG,GAAI,EAAK,IAAI,CAAM,EAAG,MAAU,UAAU,qBAAqB,EAC/D,IAAM,EAAO,QAAQ,QAAQ,CAAM,EACnC,GAAI,EAAK,KAAK,GAAO,OAAO,GAAQ,QAAQ,GAAK,EAAK,OAAS,EAAO,gBACpE,MAAU,UAAU,uCAAuC,EAE7D,EAAK,IAAI,CAAM,EACf,GAAI,CACF,IAAM,EAAoC,OAAO,OAAO,IAAI,EAC5D,IAAK,IAAM,KAAO,EAAkB,CAClC,GAAI,EAAQ,OAAO,CAAG,CAAC,CAAC,WAAa,EAAO,YAAa,MAAU,UAAU,mCAAmC,EAChH,EAAO,GAAO,EAAM,EAAQ,EAAQ,CAAG,EAAG,EAAQ,CAAC,CACrD,CACA,OAAO,OAAO,OAAO,CAAM,CAC7B,QAAU,CAAE,EAAK,OAAO,CAAM,CAAE,CAClC,EAEM,EAAW,EAAM,EAAO,CAAC,EAC/B,GAAI,EAAQ,OAAO,KAAK,UAAU,CAAQ,CAAC,CAAC,CAAC,WAAa,EAAO,SAC/D,MAAU,UAAU,kCAAkC,EAExD,OAAO,EAAW,CAAQ,CAC5B,CAEA,SAAS,EAAQ,EAAgB,EAAsB,CACrD,IAAM,EAAa,OAAO,yBAAyB,EAAQ,CAAG,EAC9D,GAAI,IAAe,IAAA,GAAW,MAAU,UAAU,gCAAgC,EAClF,GAAI,EAAE,UAAW,GAAa,MAAU,UAAU,kCAAkC,EACpF,OAAO,EAAW,KACpB"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
//#region src/primitives/json.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Lossless-JSON values.
|
|
4
|
+
*
|
|
5
|
+
* Used wherever a value has to survive being logged, persisted, replayed, or sent
|
|
6
|
+
* across a process boundary. Typing it explicitly rather than using `unknown`
|
|
7
|
+
* makes the constraint checkable: a tool that returns a `Map`, a `Date`, or a
|
|
8
|
+
* class instance cannot silently produce a log entry that fails to round-trip.
|
|
9
|
+
*
|
|
10
|
+
* @module ai-agent-sdk/core/primitives/json
|
|
11
|
+
*/
|
|
12
|
+
/** A value that survives `JSON.parse(JSON.stringify(x))` unchanged. */
|
|
13
|
+
type JsonValue = string | number | boolean | null | readonly JsonValue[] | {
|
|
14
|
+
readonly [key: string]: JsonValue;
|
|
15
|
+
};
|
|
16
|
+
/** A JSON object, when the top level must not be a primitive or array. */
|
|
17
|
+
type JsonObject = {
|
|
18
|
+
readonly [key: string]: JsonValue;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Whether a value round-trips through JSON unchanged.
|
|
22
|
+
*
|
|
23
|
+
* Rejects `undefined`, functions, symbols, and any non-plain object — including
|
|
24
|
+
* `Date` and `Map`, which `JSON.stringify` accepts but corrupts (a `Date` becomes
|
|
25
|
+
* a string, a `Map` becomes `{}`). Cycles are rejected rather than throwing.
|
|
26
|
+
* @param value - the value to check.
|
|
27
|
+
* @returns true when the value is losslessly JSON.
|
|
28
|
+
*/
|
|
29
|
+
declare function isJsonValue(value: unknown): value is JsonValue;
|
|
30
|
+
//#endregion
|
|
31
|
+
export { JsonObject, JsonValue, isJsonValue };
|
|
32
|
+
//# sourceMappingURL=json.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json.d.ts","names":[],"sources":["../../src/primitives/json.ts"],"mappings":";;;;;;;;;;;;KAYY,wDAKC;YACG,cAAc;;;KAGlB;YAAyB,cAAc;;;;;;;;;;;iBAWnC,YAAY,iBAAiB,SAAS"}
|