@vauban-org/agent-sdk 0.17.4 → 1.2.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/CONTRACT.md +6401 -813
- package/dist/adapters/llm/anthropic-direct.d.ts +1 -0
- package/dist/adapters/llm/anthropic-direct.d.ts.map +1 -1
- package/dist/adapters/llm/anthropic-direct.js +43 -0
- package/dist/adapters/llm/anthropic-direct.js.map +1 -1
- package/dist/adapters/llm/cascade.d.ts.map +1 -1
- package/dist/adapters/llm/cascade.js +57 -14
- package/dist/adapters/llm/cascade.js.map +1 -1
- package/dist/adapters/llm/litellm.d.ts +2 -0
- package/dist/adapters/llm/litellm.d.ts.map +1 -1
- package/dist/adapters/llm/litellm.js +44 -0
- package/dist/adapters/llm/litellm.js.map +1 -1
- package/dist/compute/difficulty-estimator.d.ts +53 -0
- package/dist/compute/difficulty-estimator.d.ts.map +1 -0
- package/dist/compute/difficulty-estimator.js +82 -0
- package/dist/compute/difficulty-estimator.js.map +1 -0
- package/dist/compute/strategies/mixture-of-agents.d.ts +40 -0
- package/dist/compute/strategies/mixture-of-agents.d.ts.map +1 -0
- package/dist/compute/strategies/mixture-of-agents.js +110 -0
- package/dist/compute/strategies/mixture-of-agents.js.map +1 -0
- package/dist/compute/strategies/tree-of-thoughts.d.ts +48 -0
- package/dist/compute/strategies/tree-of-thoughts.d.ts.map +1 -0
- package/dist/compute/strategies/tree-of-thoughts.js +242 -0
- package/dist/compute/strategies/tree-of-thoughts.js.map +1 -0
- package/dist/compute/strategies/two-phase-orient.d.ts +72 -0
- package/dist/compute/strategies/two-phase-orient.d.ts.map +1 -0
- package/dist/compute/strategies/two-phase-orient.js +85 -0
- package/dist/compute/strategies/two-phase-orient.js.map +1 -0
- package/dist/constitution/types.d.ts +10 -10
- package/dist/container/protocol.d.ts +134 -0
- package/dist/container/protocol.d.ts.map +1 -0
- package/dist/container/protocol.js +157 -0
- package/dist/container/protocol.js.map +1 -0
- package/dist/container/runtime.d.ts +140 -0
- package/dist/container/runtime.d.ts.map +1 -0
- package/dist/container/runtime.js +256 -0
- package/dist/container/runtime.js.map +1 -0
- package/dist/events/catalogue.d.ts +327 -30
- package/dist/events/catalogue.d.ts.map +1 -1
- package/dist/events/catalogue.js +18 -0
- package/dist/events/catalogue.js.map +1 -1
- package/dist/events/index.d.ts +9 -0
- package/dist/events/index.d.ts.map +1 -1
- package/dist/events/index.js +9 -0
- package/dist/events/index.js.map +1 -1
- package/dist/events/schemas/agent.completed.v1.d.ts +4 -4
- package/dist/events/schemas/agent.failed.v1.d.ts +2 -2
- package/dist/events/schemas/agent.hitl_resolved.v1.d.ts +2 -2
- package/dist/events/schemas/agent.started.v1.d.ts +2 -2
- package/dist/events/schemas/brain.skill.extracted.v1.d.ts +4 -4
- package/dist/events/schemas/cc.cost.anomaly_detected.v1.d.ts +2 -2
- package/dist/events/schemas/cc.cost.recorded.v1.d.ts +4 -4
- package/dist/events/schemas/citadel.sprint.analyzed.v1.d.ts +55 -0
- package/dist/events/schemas/citadel.sprint.analyzed.v1.d.ts.map +1 -0
- package/dist/events/schemas/citadel.sprint.analyzed.v1.js +22 -0
- package/dist/events/schemas/citadel.sprint.analyzed.v1.js.map +1 -0
- package/dist/events/schemas/citadel.sprint.closed.v1.d.ts +2 -2
- package/dist/events/schemas/forge.inbox.reply_classified.v1.d.ts +33 -0
- package/dist/events/schemas/forge.inbox.reply_classified.v1.d.ts.map +1 -0
- package/dist/events/schemas/forge.inbox.reply_classified.v1.js +15 -0
- package/dist/events/schemas/forge.inbox.reply_classified.v1.js.map +1 -0
- package/dist/events/schemas/forge.lead.qualified.v1.d.ts +2 -2
- package/dist/events/schemas/forge.outreach.sent.v1.d.ts +4 -4
- package/dist/events/schemas/incident.detected.v1.d.ts +2 -2
- package/dist/events/schemas/vauban-finance.forecast.generated.v1.d.ts +21 -0
- package/dist/events/schemas/vauban-finance.forecast.generated.v1.d.ts.map +1 -0
- package/dist/events/schemas/vauban-finance.forecast.generated.v1.js +11 -0
- package/dist/events/schemas/vauban-finance.forecast.generated.v1.js.map +1 -0
- package/dist/events/schemas/vauban-finance.trade.executed.v1.d.ts +24 -0
- package/dist/events/schemas/vauban-finance.trade.executed.v1.d.ts.map +1 -0
- package/dist/events/schemas/vauban-finance.trade.executed.v1.js +12 -0
- package/dist/events/schemas/vauban-finance.trade.executed.v1.js.map +1 -0
- package/dist/events/schemas/vauban.goal.checked.v1.d.ts +21 -0
- package/dist/events/schemas/vauban.goal.checked.v1.d.ts.map +1 -0
- package/dist/events/schemas/vauban.goal.checked.v1.js +11 -0
- package/dist/events/schemas/vauban.goal.checked.v1.js.map +1 -0
- package/dist/events/schemas/vauban.rebalancing.checked.v1.d.ts +21 -0
- package/dist/events/schemas/vauban.rebalancing.checked.v1.d.ts.map +1 -0
- package/dist/events/schemas/vauban.rebalancing.checked.v1.js +11 -0
- package/dist/events/schemas/vauban.rebalancing.checked.v1.js.map +1 -0
- package/dist/events/schemas/vauban.tax.checked.v1.d.ts +21 -0
- package/dist/events/schemas/vauban.tax.checked.v1.d.ts.map +1 -0
- package/dist/events/schemas/vauban.tax.checked.v1.js +11 -0
- package/dist/events/schemas/vauban.tax.checked.v1.js.map +1 -0
- package/dist/events/schemas/vauban.vault.analyzed.v1.d.ts +59 -0
- package/dist/events/schemas/vauban.vault.analyzed.v1.d.ts.map +1 -0
- package/dist/events/schemas/vauban.vault.analyzed.v1.js +19 -0
- package/dist/events/schemas/vauban.vault.analyzed.v1.js.map +1 -0
- package/dist/events/schemas/vauban.vault.compounded.v1.d.ts +24 -0
- package/dist/events/schemas/vauban.vault.compounded.v1.d.ts.map +1 -0
- package/dist/events/schemas/vauban.vault.compounded.v1.js +12 -0
- package/dist/events/schemas/vauban.vault.compounded.v1.js.map +1 -0
- package/dist/identity/agent-persona.d.ts +73 -0
- package/dist/identity/agent-persona.d.ts.map +1 -0
- package/dist/identity/agent-persona.js +165 -0
- package/dist/identity/agent-persona.js.map +1 -0
- package/dist/identity/persona-prompt.d.ts +25 -0
- package/dist/identity/persona-prompt.d.ts.map +1 -0
- package/dist/identity/persona-prompt.js +71 -0
- package/dist/identity/persona-prompt.js.map +1 -0
- package/dist/identity/persona-schema.d.ts +120 -0
- package/dist/identity/persona-schema.d.ts.map +1 -0
- package/dist/identity/persona-schema.js +103 -0
- package/dist/identity/persona-schema.js.map +1 -0
- package/dist/index.d.ts +37 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +29 -1
- package/dist/index.js.map +1 -1
- package/dist/loop/index.d.ts +1 -1
- package/dist/loop/index.d.ts.map +1 -1
- package/dist/loop/index.js.map +1 -1
- package/dist/loop/minimal-loop.js +293 -287
- package/dist/loop/sdk-loop.d.ts +1 -3
- package/dist/loop/sdk-loop.d.ts.map +1 -1
- package/dist/loop/sdk-loop.js +1 -1
- package/dist/loop/sdk-loop.js.map +1 -1
- package/dist/memory/episodic-rrf.d.ts +114 -0
- package/dist/memory/episodic-rrf.d.ts.map +1 -0
- package/dist/memory/episodic-rrf.js +148 -0
- package/dist/memory/episodic-rrf.js.map +1 -0
- package/dist/mesh/attenuation.d.ts +78 -0
- package/dist/mesh/attenuation.d.ts.map +1 -0
- package/dist/mesh/attenuation.js +141 -0
- package/dist/mesh/attenuation.js.map +1 -0
- package/dist/mesh/delegate.d.ts +96 -0
- package/dist/mesh/delegate.d.ts.map +1 -0
- package/dist/mesh/delegate.js +172 -0
- package/dist/mesh/delegate.js.map +1 -0
- package/dist/mesh/dispatcher.d.ts +119 -0
- package/dist/mesh/dispatcher.d.ts.map +1 -0
- package/dist/mesh/dispatcher.js +207 -0
- package/dist/mesh/dispatcher.js.map +1 -0
- package/dist/mesh/index.d.ts +12 -0
- package/dist/mesh/index.d.ts.map +1 -0
- package/dist/mesh/index.js +11 -0
- package/dist/mesh/index.js.map +1 -0
- package/dist/mesh/types.d.ts +30 -0
- package/dist/mesh/types.d.ts.map +1 -0
- package/dist/mesh/types.js +11 -0
- package/dist/mesh/types.js.map +1 -0
- package/dist/orchestration/ooda/skills.d.ts +104 -0
- package/dist/orchestration/ooda/skills.d.ts.map +1 -1
- package/dist/orchestration/ooda/skills.js +106 -0
- package/dist/orchestration/ooda/skills.js.map +1 -1
- package/dist/orchestration/ooda/types.d.ts +3 -8
- package/dist/orchestration/ooda/types.d.ts.map +1 -1
- package/dist/ports/bastion-action.contract.test.d.ts +11 -0
- package/dist/ports/bastion-action.contract.test.d.ts.map +1 -0
- package/dist/ports/bastion-action.contract.test.js +238 -0
- package/dist/ports/bastion-action.contract.test.js.map +1 -0
- package/dist/ports/bastion-action.d.ts +133 -0
- package/dist/ports/bastion-action.d.ts.map +1 -0
- package/dist/ports/bastion-action.js +73 -0
- package/dist/ports/bastion-action.js.map +1 -0
- package/dist/ports/brain.d.ts +31 -0
- package/dist/ports/brain.d.ts.map +1 -1
- package/dist/ports/brain.js +115 -1
- package/dist/ports/brain.js.map +1 -1
- package/dist/ports/citadel-action.contract.test.d.ts +11 -0
- package/dist/ports/citadel-action.contract.test.d.ts.map +1 -0
- package/dist/ports/citadel-action.contract.test.js +317 -0
- package/dist/ports/citadel-action.contract.test.js.map +1 -0
- package/dist/ports/citadel-action.d.ts +111 -0
- package/dist/ports/citadel-action.d.ts.map +1 -0
- package/dist/ports/citadel-action.js +62 -0
- package/dist/ports/citadel-action.js.map +1 -0
- package/dist/ports/compliance-contract.d.ts +123 -0
- package/dist/ports/compliance-contract.d.ts.map +1 -0
- package/dist/ports/compliance-contract.js +35 -0
- package/dist/ports/compliance-contract.js.map +1 -0
- package/dist/ports/db.d.ts +38 -0
- package/dist/ports/db.d.ts.map +1 -1
- package/dist/ports/db.js +88 -1
- package/dist/ports/db.js.map +1 -1
- package/dist/ports/delegation.contract.test.d.ts +9 -0
- package/dist/ports/delegation.contract.test.d.ts.map +1 -0
- package/dist/ports/delegation.contract.test.js +337 -0
- package/dist/ports/delegation.contract.test.js.map +1 -0
- package/dist/ports/delegation.d.ts +134 -0
- package/dist/ports/delegation.d.ts.map +1 -0
- package/dist/ports/delegation.js +105 -0
- package/dist/ports/delegation.js.map +1 -0
- package/dist/ports/event-bus.d.ts +29 -13
- package/dist/ports/event-bus.d.ts.map +1 -1
- package/dist/ports/event-bus.js +106 -1
- package/dist/ports/event-bus.js.map +1 -1
- package/dist/ports/federation.contract.test.d.ts +9 -0
- package/dist/ports/federation.contract.test.d.ts.map +1 -0
- package/dist/ports/federation.contract.test.js +279 -0
- package/dist/ports/federation.contract.test.js.map +1 -0
- package/dist/ports/federation.d.ts +140 -0
- package/dist/ports/federation.d.ts.map +1 -0
- package/dist/ports/federation.js +57 -0
- package/dist/ports/federation.js.map +1 -0
- package/dist/ports/index.d.ts +28 -2
- package/dist/ports/index.d.ts.map +1 -1
- package/dist/ports/index.js +17 -2
- package/dist/ports/index.js.map +1 -1
- package/dist/ports/llm-provider.d.ts +37 -0
- package/dist/ports/llm-provider.d.ts.map +1 -1
- package/dist/ports/llm-provider.js +99 -1
- package/dist/ports/llm-provider.js.map +1 -1
- package/dist/ports/logger.d.ts +27 -0
- package/dist/ports/logger.d.ts.map +1 -1
- package/dist/ports/logger.js +87 -0
- package/dist/ports/logger.js.map +1 -1
- package/dist/ports/manifest-registry.contract.test.d.ts +9 -0
- package/dist/ports/manifest-registry.contract.test.d.ts.map +1 -0
- package/dist/ports/manifest-registry.contract.test.js +246 -0
- package/dist/ports/manifest-registry.contract.test.js.map +1 -0
- package/dist/ports/manifest-registry.d.ts +116 -0
- package/dist/ports/manifest-registry.d.ts.map +1 -0
- package/dist/ports/manifest-registry.js +79 -0
- package/dist/ports/manifest-registry.js.map +1 -0
- package/dist/ports/observability.contract.test.d.ts +12 -0
- package/dist/ports/observability.contract.test.d.ts.map +1 -0
- package/dist/ports/observability.contract.test.js +260 -0
- package/dist/ports/observability.contract.test.js.map +1 -0
- package/dist/ports/observability.d.ts +98 -0
- package/dist/ports/observability.d.ts.map +1 -0
- package/dist/ports/observability.js +59 -0
- package/dist/ports/observability.js.map +1 -0
- package/dist/ports/outcome.d.ts +26 -0
- package/dist/ports/outcome.d.ts.map +1 -1
- package/dist/ports/outcome.js +62 -1
- package/dist/ports/outcome.js.map +1 -1
- package/dist/ports/privacy.contract.test.d.ts +12 -0
- package/dist/ports/privacy.contract.test.d.ts.map +1 -0
- package/dist/ports/privacy.contract.test.js +325 -0
- package/dist/ports/privacy.contract.test.js.map +1 -0
- package/dist/ports/privacy.d.ts +132 -0
- package/dist/ports/privacy.d.ts.map +1 -0
- package/dist/ports/privacy.js +83 -0
- package/dist/ports/privacy.js.map +1 -0
- package/dist/ports/tenant-context.contract.test.d.ts +14 -0
- package/dist/ports/tenant-context.contract.test.d.ts.map +1 -0
- package/dist/ports/tenant-context.contract.test.js +352 -0
- package/dist/ports/tenant-context.contract.test.js.map +1 -0
- package/dist/ports/tenant-context.d.ts +103 -0
- package/dist/ports/tenant-context.d.ts.map +1 -0
- package/dist/ports/tenant-context.js +48 -0
- package/dist/ports/tenant-context.js.map +1 -0
- package/dist/ports/vauban-finance-action.contract.test.d.ts +11 -0
- package/dist/ports/vauban-finance-action.contract.test.d.ts.map +1 -0
- package/dist/ports/vauban-finance-action.contract.test.js +260 -0
- package/dist/ports/vauban-finance-action.contract.test.js.map +1 -0
- package/dist/ports/vauban-finance-action.d.ts +106 -0
- package/dist/ports/vauban-finance-action.d.ts.map +1 -0
- package/dist/ports/vauban-finance-action.js +60 -0
- package/dist/ports/vauban-finance-action.js.map +1 -0
- package/dist/ports/workflow-runtime.d.ts +204 -0
- package/dist/ports/workflow-runtime.d.ts.map +1 -0
- package/dist/ports/workflow-runtime.js +72 -0
- package/dist/ports/workflow-runtime.js.map +1 -0
- package/dist/proof/cert-verify.d.ts +80 -0
- package/dist/proof/cert-verify.d.ts.map +1 -0
- package/dist/proof/cert-verify.js +178 -0
- package/dist/proof/cert-verify.js.map +1 -0
- package/dist/replay/replay.d.ts.map +1 -1
- package/dist/replay/replay.js +5 -1
- package/dist/replay/replay.js.map +1 -1
- package/dist/retry/index.d.ts +129 -0
- package/dist/retry/index.d.ts.map +1 -0
- package/dist/retry/index.js +156 -0
- package/dist/retry/index.js.map +1 -0
- package/dist/retry/presets.d.ts +39 -0
- package/dist/retry/presets.d.ts.map +1 -0
- package/dist/retry/presets.js +69 -0
- package/dist/retry/presets.js.map +1 -0
- package/dist/skill-loop/ab-runner.d.ts +67 -0
- package/dist/skill-loop/ab-runner.d.ts.map +1 -0
- package/dist/skill-loop/ab-runner.js +160 -0
- package/dist/skill-loop/ab-runner.js.map +1 -0
- package/dist/skill-loop/adoption.d.ts +67 -0
- package/dist/skill-loop/adoption.d.ts.map +1 -0
- package/dist/skill-loop/adoption.js +126 -0
- package/dist/skill-loop/adoption.js.map +1 -0
- package/dist/skill-loop/candidate.d.ts +45 -0
- package/dist/skill-loop/candidate.d.ts.map +1 -0
- package/dist/skill-loop/candidate.js +43 -0
- package/dist/skill-loop/candidate.js.map +1 -0
- package/dist/skill-loop/evaluator.d.ts +42 -0
- package/dist/skill-loop/evaluator.d.ts.map +1 -0
- package/dist/skill-loop/evaluator.js +184 -0
- package/dist/skill-loop/evaluator.js.map +1 -0
- package/dist/skill-loop/index.d.ts +27 -0
- package/dist/skill-loop/index.d.ts.map +1 -0
- package/dist/skill-loop/index.js +27 -0
- package/dist/skill-loop/index.js.map +1 -0
- package/dist/skill-loop/reflexion-replay.d.ts +87 -0
- package/dist/skill-loop/reflexion-replay.d.ts.map +1 -0
- package/dist/skill-loop/reflexion-replay.js +110 -0
- package/dist/skill-loop/reflexion-replay.js.map +1 -0
- package/dist/skill-loop/sign-off.d.ts +88 -0
- package/dist/skill-loop/sign-off.d.ts.map +1 -0
- package/dist/skill-loop/sign-off.js +146 -0
- package/dist/skill-loop/sign-off.js.map +1 -0
- package/dist/skill-loop/value-metric.d.ts +55 -0
- package/dist/skill-loop/value-metric.d.ts.map +1 -0
- package/dist/skill-loop/value-metric.js +69 -0
- package/dist/skill-loop/value-metric.js.map +1 -0
- package/dist/skill-loop/versioning.d.ts +36 -0
- package/dist/skill-loop/versioning.d.ts.map +1 -0
- package/dist/skill-loop/versioning.js +47 -0
- package/dist/skill-loop/versioning.js.map +1 -0
- package/dist/skill-manifest/anchor.d.ts +91 -0
- package/dist/skill-manifest/anchor.d.ts.map +1 -0
- package/dist/skill-manifest/anchor.js +331 -0
- package/dist/skill-manifest/anchor.js.map +1 -0
- package/dist/skill-manifest/builder.d.ts +47 -0
- package/dist/skill-manifest/builder.d.ts.map +1 -0
- package/dist/skill-manifest/builder.js +93 -0
- package/dist/skill-manifest/builder.js.map +1 -0
- package/dist/skill-manifest/index.d.ts +13 -0
- package/dist/skill-manifest/index.d.ts.map +1 -0
- package/dist/skill-manifest/index.js +9 -0
- package/dist/skill-manifest/index.js.map +1 -0
- package/dist/skill-manifest/types.d.ts +67 -0
- package/dist/skill-manifest/types.d.ts.map +1 -0
- package/dist/skill-manifest/types.js +16 -0
- package/dist/skill-manifest/types.js.map +1 -0
- package/dist/skill-manifest/verifier.d.ts +42 -0
- package/dist/skill-manifest/verifier.d.ts.map +1 -0
- package/dist/skill-manifest/verifier.js +136 -0
- package/dist/skill-manifest/verifier.js.map +1 -0
- package/dist/skills/brain-query.d.ts +4 -4
- package/dist/skills/brain-store.d.ts +6 -6
- package/dist/skills/errors.d.ts +15 -0
- package/dist/skills/errors.d.ts.map +1 -1
- package/dist/skills/errors.js +21 -0
- package/dist/skills/errors.js.map +1 -1
- package/dist/skills/hitl-request.d.ts +2 -2
- package/dist/skills/index.d.ts +3 -1
- package/dist/skills/index.d.ts.map +1 -1
- package/dist/skills/index.js +4 -1
- package/dist/skills/index.js.map +1 -1
- package/dist/skills/markdown/loader.d.ts +52 -0
- package/dist/skills/markdown/loader.d.ts.map +1 -0
- package/dist/skills/markdown/loader.js +93 -0
- package/dist/skills/markdown/loader.js.map +1 -0
- package/dist/skills/markdown/schema.d.ts +432 -0
- package/dist/skills/markdown/schema.d.ts.map +1 -0
- package/dist/skills/markdown/schema.js +121 -0
- package/dist/skills/markdown/schema.js.map +1 -0
- package/dist/skills/poc-md-loader/markdown-loader.d.ts +77 -0
- package/dist/skills/poc-md-loader/markdown-loader.d.ts.map +1 -0
- package/dist/skills/poc-md-loader/markdown-loader.js +125 -0
- package/dist/skills/poc-md-loader/markdown-loader.js.map +1 -0
- package/dist/skills/poc-md-loader/runner.d.ts +24 -0
- package/dist/skills/poc-md-loader/runner.d.ts.map +1 -0
- package/dist/skills/poc-md-loader/runner.js +57 -0
- package/dist/skills/poc-md-loader/runner.js.map +1 -0
- package/dist/skills/poc-md-loader/vitest.poc.config.d.ts +3 -0
- package/dist/skills/poc-md-loader/vitest.poc.config.d.ts.map +1 -0
- package/dist/skills/poc-md-loader/vitest.poc.config.js +13 -0
- package/dist/skills/poc-md-loader/vitest.poc.config.js.map +1 -0
- package/dist/skills/poc-md-loader/web-search/script.d.ts +33 -0
- package/dist/skills/poc-md-loader/web-search/script.d.ts.map +1 -0
- package/dist/skills/poc-md-loader/web-search/script.js +75 -0
- package/dist/skills/poc-md-loader/web-search/script.js.map +1 -0
- package/dist/skills/record-outcome.d.ts +4 -4
- package/dist/skills/send-email.d.ts.map +1 -1
- package/dist/skills/send-email.js +15 -3
- package/dist/skills/send-email.js.map +1 -1
- package/dist/skills/slack-notify.d.ts +4 -4
- package/dist/skills/starknet-balance.d.ts +1 -1
- package/dist/skills/telegram-notify.d.ts +4 -4
- package/dist/skills/web-search.d.ts +1 -1
- package/dist/testing/contracts/event-bus.contract.d.ts.map +1 -1
- package/dist/testing/contracts/event-bus.contract.js +14 -12
- package/dist/testing/contracts/event-bus.contract.js.map +1 -1
- package/dist/testing/index.d.ts +3 -0
- package/dist/testing/test-brain-port.d.ts +4 -0
- package/dist/testing/test-brain-port.d.ts.map +1 -1
- package/dist/testing/test-brain-port.js +75 -20
- package/dist/testing/test-brain-port.js.map +1 -1
- package/dist/testing/test-event-bus.d.ts.map +1 -1
- package/dist/testing/test-event-bus.js +89 -36
- package/dist/testing/test-event-bus.js.map +1 -1
- package/dist/trace/schema.d.ts +1 -1
- package/dist/trace/schema.d.ts.map +1 -1
- package/dist/trace/schema.js +1 -1
- package/dist/trace/schema.js.map +1 -1
- package/dist/verify/formal/index.d.ts +44 -0
- package/dist/verify/formal/index.d.ts.map +1 -0
- package/dist/verify/formal/index.js +98 -0
- package/dist/verify/formal/index.js.map +1 -0
- package/dist/verify/formal/policy.d.ts +105 -0
- package/dist/verify/formal/policy.d.ts.map +1 -0
- package/dist/verify/formal/policy.js +159 -0
- package/dist/verify/formal/policy.js.map +1 -0
- package/dist/verify/formal/result.d.ts +50 -0
- package/dist/verify/formal/result.d.ts.map +1 -0
- package/dist/verify/formal/result.js +21 -0
- package/dist/verify/formal/result.js.map +1 -0
- package/dist/verify/formal/solver.d.ts +67 -0
- package/dist/verify/formal/solver.d.ts.map +1 -0
- package/dist/verify/formal/solver.js +184 -0
- package/dist/verify/formal/solver.js.map +1 -0
- package/dist/verify/formal/spec-language.d.ts +80 -0
- package/dist/verify/formal/spec-language.d.ts.map +1 -0
- package/dist/verify/formal/spec-language.js +219 -0
- package/dist/verify/formal/spec-language.js.map +1 -0
- package/docs/attestation.md +199 -0
- package/docs/identity.md +193 -0
- package/package.json +22 -1
- package/src/adapters/llm/anthropic-direct.ts +51 -0
- package/src/adapters/llm/cascade.ts +64 -19
- package/src/adapters/llm/litellm.ts +49 -0
- package/src/compute/difficulty-estimator.ts +111 -0
- package/src/compute/strategies/mixture-of-agents.ts +150 -0
- package/src/compute/strategies/tree-of-thoughts.ts +293 -0
- package/src/compute/strategies/two-phase-orient.ts +147 -0
- package/src/container/protocol.ts +243 -0
- package/src/container/runtime.ts +424 -0
- package/src/db/migrations/026_formal_verify_results.sql +30 -0
- package/src/events/catalogue.ts +54 -0
- package/src/events/index.ts +9 -0
- package/src/events/schemas/citadel.sprint.analyzed.v1.ts +23 -0
- package/src/events/schemas/forge.inbox.reply_classified.v1.ts +15 -0
- package/src/events/schemas/vauban-finance.forecast.generated.v1.ts +11 -0
- package/src/events/schemas/vauban-finance.trade.executed.v1.ts +12 -0
- package/src/events/schemas/vauban.goal.checked.v1.ts +11 -0
- package/src/events/schemas/vauban.rebalancing.checked.v1.ts +11 -0
- package/src/events/schemas/vauban.tax.checked.v1.ts +11 -0
- package/src/events/schemas/vauban.vault.analyzed.v1.ts +21 -0
- package/src/events/schemas/vauban.vault.compounded.v1.ts +12 -0
- package/src/identity/agent-persona.ts +203 -0
- package/src/identity/persona-prompt.ts +84 -0
- package/src/identity/persona-schema.ts +127 -0
- package/src/index.ts +338 -1
- package/src/loop/index.ts +0 -1
- package/src/loop/sdk-loop.ts +5 -8
- package/src/memory/episodic-rrf.ts +224 -0
- package/src/mesh/attenuation.ts +190 -0
- package/src/mesh/delegate.ts +254 -0
- package/src/mesh/dispatcher.ts +301 -0
- package/src/mesh/index.ts +39 -0
- package/src/mesh/types.ts +31 -0
- package/src/orchestration/ooda/skills.ts +177 -0
- package/src/orchestration/ooda/types.ts +3 -9
- package/src/ports/bastion-action.contract.test.ts +355 -0
- package/src/ports/bastion-action.ts +198 -0
- package/src/ports/brain.ts +177 -15
- package/src/ports/citadel-action.contract.test.ts +430 -0
- package/src/ports/citadel-action.ts +174 -0
- package/src/ports/compliance-contract.ts +191 -0
- package/src/ports/db.ts +98 -0
- package/src/ports/delegation.contract.test.ts +428 -0
- package/src/ports/delegation.ts +211 -0
- package/src/ports/event-bus.ts +133 -18
- package/src/ports/federation.contract.test.ts +355 -0
- package/src/ports/federation.ts +190 -0
- package/src/ports/index.ts +186 -1
- package/src/ports/llm-provider.ts +123 -0
- package/src/ports/logger.ts +104 -0
- package/src/ports/manifest-registry.contract.test.ts +324 -0
- package/src/ports/manifest-registry.ts +188 -0
- package/src/ports/observability.contract.test.ts +315 -0
- package/src/ports/observability.ts +150 -0
- package/src/ports/outcome.ts +69 -0
- package/src/ports/privacy.contract.test.ts +413 -0
- package/src/ports/privacy.ts +207 -0
- package/src/ports/tenant-context.contract.test.ts +454 -0
- package/src/ports/tenant-context.ts +150 -0
- package/src/ports/vauban-finance-action.contract.test.ts +335 -0
- package/src/ports/vauban-finance-action.ts +166 -0
- package/src/ports/workflow-runtime.ts +327 -0
- package/src/proof/cert-verify.ts +249 -0
- package/src/replay/replay.ts +11 -8
- package/src/retry/index.ts +227 -0
- package/src/retry/presets.ts +75 -0
- package/src/skill-loop/ab-runner.ts +196 -0
- package/src/skill-loop/adoption.ts +188 -0
- package/src/skill-loop/candidate.ts +75 -0
- package/src/skill-loop/evaluator.ts +238 -0
- package/src/skill-loop/index.ts +51 -0
- package/src/skill-loop/reflexion-replay.ts +173 -0
- package/src/skill-loop/sign-off.ts +247 -0
- package/src/skill-loop/value-metric.ts +120 -0
- package/src/skill-loop/versioning.ts +75 -0
- package/src/skill-manifest/anchor.ts +401 -0
- package/src/skill-manifest/builder.ts +129 -0
- package/src/skill-manifest/index.ts +18 -0
- package/src/skill-manifest/types.ts +72 -0
- package/src/skill-manifest/verifier.ts +198 -0
- package/src/skills/errors.ts +30 -2
- package/src/skills/index.ts +19 -0
- package/src/skills/markdown/loader.ts +129 -0
- package/src/skills/markdown/schema.ts +144 -0
- package/src/skills/poc-md-loader/e2e-parity.test.ts +237 -0
- package/src/skills/poc-md-loader/markdown-loader.ts +161 -0
- package/src/skills/poc-md-loader/runner.ts +82 -0
- package/src/skills/poc-md-loader/vitest.poc.config.ts +13 -0
- package/src/skills/poc-md-loader/web-search/SKILL.md +42 -0
- package/src/skills/poc-md-loader/web-search/script.ts +109 -0
- package/src/skills/send-email.ts +15 -3
- package/src/testing/contracts/event-bus.contract.ts +16 -14
- package/src/testing/test-brain-port.ts +98 -24
- package/src/testing/test-event-bus.ts +104 -43
- package/src/trace/schema.ts +1 -1
- package/src/verify/formal/index.ts +154 -0
- package/src/verify/formal/policy.ts +253 -0
- package/src/verify/formal/result.ts +52 -0
- package/src/verify/formal/solver.ts +235 -0
- package/src/verify/formal/spec-language.ts +274 -0
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ManifestRegistryPort — agent manifest registration and lifecycle management (S1 spec).
|
|
3
|
+
*
|
|
4
|
+
* Implements: manifest registration with Ed25519 signatures, lifecycle states
|
|
5
|
+
* (active/deprecated/revoked), version monotonicity, and tier-based compliance gating.
|
|
6
|
+
*
|
|
7
|
+
* Invariants enforced: I-S1-1..12 (capabilities, tier constraints, versioning).
|
|
8
|
+
* Errors: ManifestNotFoundError, ManifestSignatureInvalidError, ManifestVersionConflictError,
|
|
9
|
+
* ManifestComplianceConflictError (from S5 Cedar G-3).
|
|
10
|
+
*/
|
|
11
|
+
export type Tier = "dev" | "test" | "pilot" | "production" | "internal" | "legacy";
|
|
12
|
+
export declare const SUPPORTED_TIERS: Tier[];
|
|
13
|
+
export type ComplianceMode = "strict" | "audit_only";
|
|
14
|
+
export interface Manifest {
|
|
15
|
+
readonly name: string;
|
|
16
|
+
readonly version: string;
|
|
17
|
+
readonly tier: Tier;
|
|
18
|
+
readonly compliance_mode: ComplianceMode;
|
|
19
|
+
readonly capabilities: readonly string[];
|
|
20
|
+
readonly compliance: {
|
|
21
|
+
readonly jurisdictions: readonly string[];
|
|
22
|
+
readonly legal_bases: readonly string[];
|
|
23
|
+
readonly data_classification: string;
|
|
24
|
+
};
|
|
25
|
+
readonly runtime: {
|
|
26
|
+
readonly max_compute_seconds: number;
|
|
27
|
+
readonly max_llm_tokens: number;
|
|
28
|
+
};
|
|
29
|
+
readonly ed25519_pubkey: string;
|
|
30
|
+
readonly signature: string;
|
|
31
|
+
readonly manifestHash: string;
|
|
32
|
+
}
|
|
33
|
+
export type RegistrationStatus = "registered" | "partial" | "failed";
|
|
34
|
+
export interface ComplianceError {
|
|
35
|
+
readonly code: string;
|
|
36
|
+
readonly description: string;
|
|
37
|
+
}
|
|
38
|
+
export interface RegistrationResult {
|
|
39
|
+
readonly claim_id: string;
|
|
40
|
+
readonly status: RegistrationStatus;
|
|
41
|
+
readonly manifest_id?: string;
|
|
42
|
+
readonly errors?: readonly ComplianceError[];
|
|
43
|
+
}
|
|
44
|
+
export interface RegisterOptions {
|
|
45
|
+
readonly operatorId?: string;
|
|
46
|
+
readonly timestamp?: Date;
|
|
47
|
+
}
|
|
48
|
+
export interface LookupResult {
|
|
49
|
+
readonly manifest: Manifest | null;
|
|
50
|
+
readonly status?: "active" | "deprecated" | "revoked";
|
|
51
|
+
readonly deprecated_at?: Date;
|
|
52
|
+
readonly revoked_at?: Date;
|
|
53
|
+
readonly revocation_reason?: string;
|
|
54
|
+
}
|
|
55
|
+
export interface ManifestRegistryPort {
|
|
56
|
+
/**
|
|
57
|
+
* Register a manifest with Ed25519 signature validation.
|
|
58
|
+
* Validates I-S1-1..12 invariants before persisting.
|
|
59
|
+
* Rejects I-S1-2 violation: tier='production' + mode='audit_only'.
|
|
60
|
+
* Returns claim_id (signed Claim artifact) or ComplianceErrors.
|
|
61
|
+
*/
|
|
62
|
+
register(manifest: Manifest, options?: RegisterOptions): Promise<RegistrationResult>;
|
|
63
|
+
/**
|
|
64
|
+
* Look up a manifest by name + version.
|
|
65
|
+
* Returns null if not found or revoked.
|
|
66
|
+
* Does not include errors list (use getValidationErrors for detailed checks).
|
|
67
|
+
*/
|
|
68
|
+
lookup(name: string, version: string): Promise<Manifest | null>;
|
|
69
|
+
/**
|
|
70
|
+
* Revoke a manifest by claim_id.
|
|
71
|
+
* After revocation, lookup() returns null.
|
|
72
|
+
* Emits revocation event (audit trail).
|
|
73
|
+
* Returns void on success; throws ManifestNotFoundError if claim_id invalid.
|
|
74
|
+
*/
|
|
75
|
+
revoke(claim_id: string, reason: string): Promise<void>;
|
|
76
|
+
/**
|
|
77
|
+
* List all versions of a manifest by name, sorted by semver.
|
|
78
|
+
* Returns versions in ascending order (0.1.0 < 1.0.0).
|
|
79
|
+
* Returns empty array if name not found.
|
|
80
|
+
*/
|
|
81
|
+
listVersions(name: string): Promise<readonly string[]>;
|
|
82
|
+
/**
|
|
83
|
+
* Validate a manifest signature against its ed25519_pubkey.
|
|
84
|
+
* Recomputes manifestHash and checks signature.
|
|
85
|
+
* Returns true if valid; throws ManifestSignatureInvalidError if invalid.
|
|
86
|
+
*/
|
|
87
|
+
verifySignature(manifest: Manifest): Promise<boolean>;
|
|
88
|
+
}
|
|
89
|
+
export declare class ManifestNotFoundError extends Error {
|
|
90
|
+
readonly name: string;
|
|
91
|
+
readonly version: string;
|
|
92
|
+
constructor(name: string, version: string);
|
|
93
|
+
}
|
|
94
|
+
export declare class ManifestSignatureInvalidError extends Error {
|
|
95
|
+
readonly name: string;
|
|
96
|
+
readonly version: string;
|
|
97
|
+
readonly cause?: unknown | undefined;
|
|
98
|
+
constructor(name: string, version: string, cause?: unknown | undefined);
|
|
99
|
+
}
|
|
100
|
+
export declare class ManifestVersionConflictError extends Error {
|
|
101
|
+
readonly name: string;
|
|
102
|
+
readonly version: string;
|
|
103
|
+
readonly existingStatus: string;
|
|
104
|
+
constructor(name: string, version: string, existingStatus: string);
|
|
105
|
+
}
|
|
106
|
+
export declare class ManifestComplianceConflictError extends Error {
|
|
107
|
+
readonly name: string;
|
|
108
|
+
readonly version: string;
|
|
109
|
+
readonly violation: string;
|
|
110
|
+
constructor(name: string, version: string, violation: string);
|
|
111
|
+
}
|
|
112
|
+
export declare class ManifestValidationError extends Error {
|
|
113
|
+
readonly violations: readonly ComplianceError[];
|
|
114
|
+
constructor(violations: readonly ComplianceError[]);
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=manifest-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest-registry.d.ts","sourceRoot":"","sources":["../../src/ports/manifest-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ManifestRegistryPort — agent manifest registration and lifecycle management (S1 spec).
|
|
3
|
+
*
|
|
4
|
+
* Implements: manifest registration with Ed25519 signatures, lifecycle states
|
|
5
|
+
* (active/deprecated/revoked), version monotonicity, and tier-based compliance gating.
|
|
6
|
+
*
|
|
7
|
+
* Invariants enforced: I-S1-1..12 (capabilities, tier constraints, versioning).
|
|
8
|
+
* Errors: ManifestNotFoundError, ManifestSignatureInvalidError, ManifestVersionConflictError,
|
|
9
|
+
* ManifestComplianceConflictError (from S5 Cedar G-3).
|
|
10
|
+
*/
|
|
11
|
+
export const SUPPORTED_TIERS = [
|
|
12
|
+
"dev",
|
|
13
|
+
"test",
|
|
14
|
+
"pilot",
|
|
15
|
+
"production",
|
|
16
|
+
"internal",
|
|
17
|
+
"legacy",
|
|
18
|
+
];
|
|
19
|
+
// ─── Typed errors ─────────────────────────────────────────────────────────────
|
|
20
|
+
export class ManifestNotFoundError extends Error {
|
|
21
|
+
name;
|
|
22
|
+
version;
|
|
23
|
+
constructor(name, version) {
|
|
24
|
+
super(`Manifest not found: ${name}@${version}`);
|
|
25
|
+
this.name = name;
|
|
26
|
+
this.version = version;
|
|
27
|
+
this.name = "ManifestNotFoundError";
|
|
28
|
+
Object.setPrototypeOf(this, new.target.prototype);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
export class ManifestSignatureInvalidError extends Error {
|
|
32
|
+
name;
|
|
33
|
+
version;
|
|
34
|
+
cause;
|
|
35
|
+
constructor(name, version, cause) {
|
|
36
|
+
super(`Manifest signature invalid for ${name}@${version}`);
|
|
37
|
+
this.name = name;
|
|
38
|
+
this.version = version;
|
|
39
|
+
this.cause = cause;
|
|
40
|
+
this.name = "ManifestSignatureInvalidError";
|
|
41
|
+
Object.setPrototypeOf(this, new.target.prototype);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
export class ManifestVersionConflictError extends Error {
|
|
45
|
+
name;
|
|
46
|
+
version;
|
|
47
|
+
existingStatus;
|
|
48
|
+
constructor(name, version, existingStatus) {
|
|
49
|
+
super(`Manifest version conflict: ${name}@${version} already registered as ${existingStatus}`);
|
|
50
|
+
this.name = name;
|
|
51
|
+
this.version = version;
|
|
52
|
+
this.existingStatus = existingStatus;
|
|
53
|
+
this.name = "ManifestVersionConflictError";
|
|
54
|
+
Object.setPrototypeOf(this, new.target.prototype);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
export class ManifestComplianceConflictError extends Error {
|
|
58
|
+
name;
|
|
59
|
+
version;
|
|
60
|
+
violation;
|
|
61
|
+
constructor(name, version, violation) {
|
|
62
|
+
super(`Compliance violation for ${name}@${version}: ${violation}`);
|
|
63
|
+
this.name = name;
|
|
64
|
+
this.version = version;
|
|
65
|
+
this.violation = violation;
|
|
66
|
+
this.name = "ManifestComplianceConflictError";
|
|
67
|
+
Object.setPrototypeOf(this, new.target.prototype);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
export class ManifestValidationError extends Error {
|
|
71
|
+
violations;
|
|
72
|
+
constructor(violations) {
|
|
73
|
+
super(`Manifest validation failed with ${violations.length} violation(s)`);
|
|
74
|
+
this.violations = violations;
|
|
75
|
+
this.name = "ManifestValidationError";
|
|
76
|
+
Object.setPrototypeOf(this, new.target.prototype);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=manifest-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest-registry.js","sourceRoot":"","sources":["../../src/ports/manifest-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAYH,MAAM,CAAC,MAAM,eAAe,GAAW;IACrC,KAAK;IACL,MAAM;IACN,OAAO;IACP,YAAY;IACZ,UAAU;IACV,QAAQ;CACT,CAAC;AAyGF,iFAAiF;AAEjF,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IAClB;IAA8B;IAA1D,YAA4B,IAAY,EAAkB,OAAe;QACvE,KAAK,CAAC,uBAAuB,IAAI,IAAI,OAAO,EAAE,CAAC,CAAC;QADtB,SAAI,GAAJ,IAAI,CAAQ;QAAkB,YAAO,GAAP,OAAO,CAAQ;QAEvE,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;QACpC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACpD,CAAC;CACF;AAED,MAAM,OAAO,6BAA8B,SAAQ,KAAK;IAEpC;IACA;IACA;IAHlB,YACkB,IAAY,EACZ,OAAe,EACf,KAAe;QAE/B,KAAK,CAAC,kCAAkC,IAAI,IAAI,OAAO,EAAE,CAAC,CAAC;QAJ3C,SAAI,GAAJ,IAAI,CAAQ;QACZ,YAAO,GAAP,OAAO,CAAQ;QACf,UAAK,GAAL,KAAK,CAAU;QAG/B,IAAI,CAAC,IAAI,GAAG,+BAA+B,CAAC;QAC5C,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACpD,CAAC;CACF;AAED,MAAM,OAAO,4BAA6B,SAAQ,KAAK;IAEnC;IACA;IACA;IAHlB,YACkB,IAAY,EACZ,OAAe,EACf,cAAsB;QAEtC,KAAK,CACH,8BAA8B,IAAI,IAAI,OAAO,0BAA0B,cAAc,EAAE,CACxF,CAAC;QANc,SAAI,GAAJ,IAAI,CAAQ;QACZ,YAAO,GAAP,OAAO,CAAQ;QACf,mBAAc,GAAd,cAAc,CAAQ;QAKtC,IAAI,CAAC,IAAI,GAAG,8BAA8B,CAAC;QAC3C,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACpD,CAAC;CACF;AAED,MAAM,OAAO,+BAAgC,SAAQ,KAAK;IAEtC;IACA;IACA;IAHlB,YACkB,IAAY,EACZ,OAAe,EACf,SAAiB;QAEjC,KAAK,CAAC,4BAA4B,IAAI,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC,CAAC;QAJnD,SAAI,GAAJ,IAAI,CAAQ;QACZ,YAAO,GAAP,OAAO,CAAQ;QACf,cAAS,GAAT,SAAS,CAAQ;QAGjC,IAAI,CAAC,IAAI,GAAG,iCAAiC,CAAC;QAC9C,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACpD,CAAC;CACF;AAED,MAAM,OAAO,uBAAwB,SAAQ,KAAK;IACpB;IAA5B,YAA4B,UAAsC;QAChE,KAAK,CAAC,mCAAmC,UAAU,CAAC,MAAM,eAAe,CAAC,CAAC;QADjD,eAAU,GAAV,UAAU,CAA4B;QAEhE,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;QACtC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACpD,CAAC;CACF"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ObservabilityPort contract tests — validate port interface compliance.
|
|
3
|
+
*
|
|
4
|
+
* Tests verify:
|
|
5
|
+
* - startSpan returns a valid Span with all methods
|
|
6
|
+
* - recordEvent accepts all 5 severity levels
|
|
7
|
+
* - recordMetric accepts gauge, counter, histogram types
|
|
8
|
+
* - flush() resolves successfully
|
|
9
|
+
* - NoopObservabilityPort satisfies the interface
|
|
10
|
+
*/
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=observability.contract.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observability.contract.test.d.ts","sourceRoot":"","sources":["../../src/ports/observability.contract.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ObservabilityPort contract tests — validate port interface compliance.
|
|
3
|
+
*
|
|
4
|
+
* Tests verify:
|
|
5
|
+
* - startSpan returns a valid Span with all methods
|
|
6
|
+
* - recordEvent accepts all 5 severity levels
|
|
7
|
+
* - recordMetric accepts gauge, counter, histogram types
|
|
8
|
+
* - flush() resolves successfully
|
|
9
|
+
* - NoopObservabilityPort satisfies the interface
|
|
10
|
+
*/
|
|
11
|
+
import { describe, it, expect } from "vitest";
|
|
12
|
+
import { NoopObservabilityPort, } from "./observability";
|
|
13
|
+
describe("ObservabilityPort contract", () => {
|
|
14
|
+
describe("startSpan", () => {
|
|
15
|
+
it("returns a Span with all required methods", () => {
|
|
16
|
+
const port = new NoopObservabilityPort();
|
|
17
|
+
const span = port.startSpan("test.span", {
|
|
18
|
+
service: "test",
|
|
19
|
+
version: 1,
|
|
20
|
+
});
|
|
21
|
+
expect(span).toBeDefined();
|
|
22
|
+
expect(typeof span.setAttribute).toBe("function");
|
|
23
|
+
expect(typeof span.recordException).toBe("function");
|
|
24
|
+
expect(typeof span.setStatus).toBe("function");
|
|
25
|
+
expect(typeof span.end).toBe("function");
|
|
26
|
+
});
|
|
27
|
+
it("accepts span name and optional attributes", () => {
|
|
28
|
+
const port = new NoopObservabilityPort();
|
|
29
|
+
const span1 = port.startSpan("workflow.execute");
|
|
30
|
+
const span2 = port.startSpan("brain.query", {
|
|
31
|
+
query: "test",
|
|
32
|
+
category: "semantic",
|
|
33
|
+
limit: 10,
|
|
34
|
+
});
|
|
35
|
+
expect(span1).toBeDefined();
|
|
36
|
+
expect(span2).toBeDefined();
|
|
37
|
+
span1.end();
|
|
38
|
+
span2.end();
|
|
39
|
+
});
|
|
40
|
+
it("span.setAttribute accepts string, number, boolean, and arrays", () => {
|
|
41
|
+
const port = new NoopObservabilityPort();
|
|
42
|
+
const span = port.startSpan("test");
|
|
43
|
+
span.setAttribute("string_attr", "hello");
|
|
44
|
+
span.setAttribute("number_attr", 42);
|
|
45
|
+
span.setAttribute("bool_attr", true);
|
|
46
|
+
span.setAttribute("string_array_attr", ["a", "b", "c"]);
|
|
47
|
+
span.setAttribute("number_array_attr", [1, 2, 3]);
|
|
48
|
+
expect(true).toBe(true); // noop implementation succeeds silently
|
|
49
|
+
span.end();
|
|
50
|
+
});
|
|
51
|
+
it("span.recordException accepts Error or unknown", () => {
|
|
52
|
+
const port = new NoopObservabilityPort();
|
|
53
|
+
const span = port.startSpan("test");
|
|
54
|
+
span.recordException(new Error("test error"));
|
|
55
|
+
span.recordException({ message: "unknown error" });
|
|
56
|
+
span.recordException("string error");
|
|
57
|
+
expect(true).toBe(true);
|
|
58
|
+
span.end();
|
|
59
|
+
});
|
|
60
|
+
it("span.setStatus accepts code and optional message", () => {
|
|
61
|
+
const port = new NoopObservabilityPort();
|
|
62
|
+
const span = port.startSpan("test");
|
|
63
|
+
span.setStatus({ code: "OK" });
|
|
64
|
+
span.setStatus({ code: "ERROR", message: "something went wrong" });
|
|
65
|
+
expect(true).toBe(true);
|
|
66
|
+
span.end();
|
|
67
|
+
});
|
|
68
|
+
it("span.end completes the span", () => {
|
|
69
|
+
const port = new NoopObservabilityPort();
|
|
70
|
+
const span = port.startSpan("test");
|
|
71
|
+
expect(() => span.end()).not.toThrow();
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
describe("recordEvent", () => {
|
|
75
|
+
it("accepts events with all 5 severity levels", () => {
|
|
76
|
+
const port = new NoopObservabilityPort();
|
|
77
|
+
const severities = ["debug", "info", "warn", "error", "fatal"];
|
|
78
|
+
for (const severity of severities) {
|
|
79
|
+
const event = {
|
|
80
|
+
name: `event.${severity}`,
|
|
81
|
+
severity,
|
|
82
|
+
};
|
|
83
|
+
expect(() => port.recordEvent(event)).not.toThrow();
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
it("accepts optional attributes, timestamp, traceId, spanId", () => {
|
|
87
|
+
const port = new NoopObservabilityPort();
|
|
88
|
+
const event = {
|
|
89
|
+
name: "test.event",
|
|
90
|
+
severity: "info",
|
|
91
|
+
attributes: {
|
|
92
|
+
user_id: "user-123",
|
|
93
|
+
action: "created",
|
|
94
|
+
resource_count: 5,
|
|
95
|
+
},
|
|
96
|
+
timestamp: Date.now(),
|
|
97
|
+
traceId: "4bf92f3577b34da6a3ce929d0e0e4736",
|
|
98
|
+
spanId: "00f067aa0ba902b7",
|
|
99
|
+
};
|
|
100
|
+
expect(() => port.recordEvent(event)).not.toThrow();
|
|
101
|
+
});
|
|
102
|
+
it("attributes can contain strings, numbers, booleans, and arrays", () => {
|
|
103
|
+
const port = new NoopObservabilityPort();
|
|
104
|
+
const event = {
|
|
105
|
+
name: "complex.event",
|
|
106
|
+
severity: "warn",
|
|
107
|
+
attributes: {
|
|
108
|
+
message: "test warning",
|
|
109
|
+
count: 42,
|
|
110
|
+
enabled: true,
|
|
111
|
+
tags: ["tag1", "tag2"],
|
|
112
|
+
scores: [9.5, 8.7, 9.2],
|
|
113
|
+
},
|
|
114
|
+
};
|
|
115
|
+
expect(() => port.recordEvent(event)).not.toThrow();
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
describe("recordMetric", () => {
|
|
119
|
+
it("accepts gauge type metrics", () => {
|
|
120
|
+
const port = new NoopObservabilityPort();
|
|
121
|
+
port.recordMetric({
|
|
122
|
+
name: "memory.usage",
|
|
123
|
+
type: "gauge",
|
|
124
|
+
value: 512,
|
|
125
|
+
labels: { instance: "worker-1" },
|
|
126
|
+
});
|
|
127
|
+
expect(true).toBe(true);
|
|
128
|
+
});
|
|
129
|
+
it("accepts counter type metrics", () => {
|
|
130
|
+
const port = new NoopObservabilityPort();
|
|
131
|
+
port.recordMetric({
|
|
132
|
+
name: "requests.total",
|
|
133
|
+
type: "counter",
|
|
134
|
+
value: 1,
|
|
135
|
+
labels: { endpoint: "/api/query" },
|
|
136
|
+
});
|
|
137
|
+
expect(true).toBe(true);
|
|
138
|
+
});
|
|
139
|
+
it("accepts histogram type metrics", () => {
|
|
140
|
+
const port = new NoopObservabilityPort();
|
|
141
|
+
port.recordMetric({
|
|
142
|
+
name: "request.duration",
|
|
143
|
+
type: "histogram",
|
|
144
|
+
value: 125,
|
|
145
|
+
labels: { method: "POST" },
|
|
146
|
+
});
|
|
147
|
+
expect(true).toBe(true);
|
|
148
|
+
});
|
|
149
|
+
it("optional timestamp defaults to Date.now()", () => {
|
|
150
|
+
const port = new NoopObservabilityPort();
|
|
151
|
+
const before = Date.now();
|
|
152
|
+
port.recordMetric({
|
|
153
|
+
name: "test.metric",
|
|
154
|
+
type: "gauge",
|
|
155
|
+
value: 100,
|
|
156
|
+
});
|
|
157
|
+
const after = Date.now();
|
|
158
|
+
expect(after).toBeGreaterThanOrEqual(before);
|
|
159
|
+
});
|
|
160
|
+
it("accepts metrics without labels", () => {
|
|
161
|
+
const port = new NoopObservabilityPort();
|
|
162
|
+
port.recordMetric({
|
|
163
|
+
name: "simple.metric",
|
|
164
|
+
type: "gauge",
|
|
165
|
+
value: 42,
|
|
166
|
+
});
|
|
167
|
+
expect(true).toBe(true);
|
|
168
|
+
});
|
|
169
|
+
});
|
|
170
|
+
describe("flush", () => {
|
|
171
|
+
it("resolves successfully", async () => {
|
|
172
|
+
const port = new NoopObservabilityPort();
|
|
173
|
+
const result = port.flush();
|
|
174
|
+
expect(result).toBeInstanceOf(Promise);
|
|
175
|
+
await expect(result).resolves.toBeUndefined();
|
|
176
|
+
});
|
|
177
|
+
it("can be called multiple times", async () => {
|
|
178
|
+
const port = new NoopObservabilityPort();
|
|
179
|
+
await expect(port.flush()).resolves.toBeUndefined();
|
|
180
|
+
await expect(port.flush()).resolves.toBeUndefined();
|
|
181
|
+
await expect(port.flush()).resolves.toBeUndefined();
|
|
182
|
+
});
|
|
183
|
+
});
|
|
184
|
+
describe("NoopObservabilityPort interface compliance", () => {
|
|
185
|
+
it("satisfies ObservabilityPort contract", () => {
|
|
186
|
+
const port = new NoopObservabilityPort();
|
|
187
|
+
// All methods required by ObservabilityPort are present
|
|
188
|
+
expect(typeof port.startSpan).toBe("function");
|
|
189
|
+
expect(typeof port.recordEvent).toBe("function");
|
|
190
|
+
expect(typeof port.recordMetric).toBe("function");
|
|
191
|
+
expect(typeof port.flush).toBe("function");
|
|
192
|
+
});
|
|
193
|
+
it("startSpan, recordEvent, recordMetric work together", () => {
|
|
194
|
+
const port = new NoopObservabilityPort();
|
|
195
|
+
const span = port.startSpan("integration.test", { phase: "setup" });
|
|
196
|
+
port.recordEvent({
|
|
197
|
+
name: "span.created",
|
|
198
|
+
severity: "info",
|
|
199
|
+
});
|
|
200
|
+
port.recordMetric({
|
|
201
|
+
name: "span.count",
|
|
202
|
+
type: "counter",
|
|
203
|
+
value: 1,
|
|
204
|
+
});
|
|
205
|
+
span.setAttribute("status", "active");
|
|
206
|
+
port.recordEvent({
|
|
207
|
+
name: "span.attribute.set",
|
|
208
|
+
severity: "debug",
|
|
209
|
+
});
|
|
210
|
+
span.setStatus({ code: "OK" });
|
|
211
|
+
span.end();
|
|
212
|
+
expect(true).toBe(true); // all calls succeed
|
|
213
|
+
});
|
|
214
|
+
});
|
|
215
|
+
describe("error paths", () => {
|
|
216
|
+
it("recordException handles various error types gracefully", () => {
|
|
217
|
+
const port = new NoopObservabilityPort();
|
|
218
|
+
const span = port.startSpan("error.test");
|
|
219
|
+
const testCases = [
|
|
220
|
+
new Error("standard error"),
|
|
221
|
+
new TypeError("type error"),
|
|
222
|
+
new RangeError("range error"),
|
|
223
|
+
{ code: "CUSTOM_ERROR", message: "custom error object" },
|
|
224
|
+
"string error",
|
|
225
|
+
null,
|
|
226
|
+
undefined,
|
|
227
|
+
];
|
|
228
|
+
for (const testCase of testCases) {
|
|
229
|
+
expect(() => span.recordException(testCase)).not.toThrow();
|
|
230
|
+
}
|
|
231
|
+
span.end();
|
|
232
|
+
});
|
|
233
|
+
it("setStatus accepts various code strings", () => {
|
|
234
|
+
const port = new NoopObservabilityPort();
|
|
235
|
+
const span = port.startSpan("status.test");
|
|
236
|
+
const codes = ["OK", "ERROR", "UNSET", "PENDING"];
|
|
237
|
+
for (const code of codes) {
|
|
238
|
+
expect(() => span.setStatus({ code })).not.toThrow();
|
|
239
|
+
expect(() => span.setStatus({ code, message: "optional message" })).not.toThrow();
|
|
240
|
+
}
|
|
241
|
+
span.end();
|
|
242
|
+
});
|
|
243
|
+
});
|
|
244
|
+
describe("attribute value types", () => {
|
|
245
|
+
it("setAttribute validates AttrValue union", () => {
|
|
246
|
+
const port = new NoopObservabilityPort();
|
|
247
|
+
const span = port.startSpan("types.test");
|
|
248
|
+
// All valid AttrValue types
|
|
249
|
+
span.setAttribute("string", "value");
|
|
250
|
+
span.setAttribute("number", 123);
|
|
251
|
+
span.setAttribute("float", 3.14);
|
|
252
|
+
span.setAttribute("bool", false);
|
|
253
|
+
span.setAttribute("array_strings", ["a", "b"]);
|
|
254
|
+
span.setAttribute("array_numbers", [1, 2, 3]);
|
|
255
|
+
expect(true).toBe(true);
|
|
256
|
+
span.end();
|
|
257
|
+
});
|
|
258
|
+
});
|
|
259
|
+
});
|
|
260
|
+
//# sourceMappingURL=observability.contract.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observability.contract.test.js","sourceRoot":"","sources":["../../src/ports/observability.contract.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ObservabilityPort — cross-cutting telemetry for Vauban Integration Spine.
|
|
3
|
+
*
|
|
4
|
+
* Implements S0 §6 (ObservabilityPort, port #14): OpenTelemetry-compatible spans,
|
|
5
|
+
* structured event logging, metrics, and graceful shutdown. Adapters emit to
|
|
6
|
+
* Prometheus, Sentry, audit logs, or custom backends.
|
|
7
|
+
*
|
|
8
|
+
* Design: structured types only — no hard dependency on @opentelemetry/api.
|
|
9
|
+
* Real OTel Spans satisfy the structural Span interface.
|
|
10
|
+
*
|
|
11
|
+
* Reference: S0 §6 type definition + createTracedBrainPort pattern in brain.ts
|
|
12
|
+
*/
|
|
13
|
+
export type AttrValue = string | number | boolean | (string | number)[];
|
|
14
|
+
export interface SpanAttributes {
|
|
15
|
+
readonly [key: string]: AttrValue;
|
|
16
|
+
}
|
|
17
|
+
export interface Span {
|
|
18
|
+
/** Record a key-value attribute on this span. */
|
|
19
|
+
setAttribute(key: string, value: AttrValue): void;
|
|
20
|
+
/** Record an exception / error on this span. */
|
|
21
|
+
recordException(error: Error | unknown): void;
|
|
22
|
+
/**
|
|
23
|
+
* Set the final status of this span.
|
|
24
|
+
* @param code 'OK', 'ERROR', or other OTel SpanStatusCode equivalent
|
|
25
|
+
* @param message optional message (used when code is 'ERROR')
|
|
26
|
+
*/
|
|
27
|
+
setStatus(opts: {
|
|
28
|
+
code: string;
|
|
29
|
+
message?: string;
|
|
30
|
+
}): void;
|
|
31
|
+
/** Mark the span as complete. */
|
|
32
|
+
end(): void;
|
|
33
|
+
}
|
|
34
|
+
export type EventSeverity = "debug" | "info" | "warn" | "error" | "fatal";
|
|
35
|
+
export interface ObservabilityEvent {
|
|
36
|
+
readonly name: string;
|
|
37
|
+
readonly severity: EventSeverity;
|
|
38
|
+
readonly attributes?: Record<string, AttrValue>;
|
|
39
|
+
readonly timestamp?: number;
|
|
40
|
+
readonly traceId?: string;
|
|
41
|
+
readonly spanId?: string;
|
|
42
|
+
}
|
|
43
|
+
export type MetricType = "gauge" | "counter" | "histogram";
|
|
44
|
+
export interface MetricInput {
|
|
45
|
+
readonly name: string;
|
|
46
|
+
readonly type: MetricType;
|
|
47
|
+
readonly value: number;
|
|
48
|
+
readonly labels?: Record<string, string>;
|
|
49
|
+
readonly timestamp?: number;
|
|
50
|
+
}
|
|
51
|
+
export interface ObservabilityPort {
|
|
52
|
+
/**
|
|
53
|
+
* Start a new OTel-compatible span.
|
|
54
|
+
*
|
|
55
|
+
* @param name span name (e.g., "workflow.execute", "brain.query")
|
|
56
|
+
* @param attrs optional span attributes
|
|
57
|
+
* @returns Span handle for setAttribute, recordException, setStatus, end calls
|
|
58
|
+
*/
|
|
59
|
+
startSpan(name: string, attrs?: SpanAttributes): Span;
|
|
60
|
+
/**
|
|
61
|
+
* Record a structured observability event (log, audit, compliance event).
|
|
62
|
+
*
|
|
63
|
+
* @param event event with name, severity, attributes, optional trace/span IDs
|
|
64
|
+
*/
|
|
65
|
+
recordEvent(event: ObservabilityEvent): void;
|
|
66
|
+
/**
|
|
67
|
+
* Record a metric (gauge, counter, histogram).
|
|
68
|
+
*
|
|
69
|
+
* @param metric metric name, type, value, optional labels and timestamp
|
|
70
|
+
*/
|
|
71
|
+
recordMetric(metric: MetricInput): void;
|
|
72
|
+
/**
|
|
73
|
+
* Graceful shutdown — flush all pending telemetry.
|
|
74
|
+
* Called at process exit or service shutdown.
|
|
75
|
+
*/
|
|
76
|
+
flush(): Promise<void>;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* NoopObservabilityPort — no-op implementation for tests or offline mode.
|
|
80
|
+
* All calls are discarded; span operations succeed silently.
|
|
81
|
+
*/
|
|
82
|
+
export declare class NoopObservabilityPort implements ObservabilityPort {
|
|
83
|
+
private readonly noopSpan;
|
|
84
|
+
startSpan(_name: string, _attrs?: SpanAttributes): Span;
|
|
85
|
+
recordEvent(_event: ObservabilityEvent): void;
|
|
86
|
+
recordMetric(_metric: MetricInput): void;
|
|
87
|
+
flush(): Promise<void>;
|
|
88
|
+
}
|
|
89
|
+
export declare class ObservabilityError extends Error {
|
|
90
|
+
readonly cause?: unknown | undefined;
|
|
91
|
+
constructor(message: string, cause?: unknown | undefined);
|
|
92
|
+
}
|
|
93
|
+
export declare class ObservabilityFlushTimeoutError extends Error {
|
|
94
|
+
readonly timeoutMs: number;
|
|
95
|
+
readonly cause?: unknown | undefined;
|
|
96
|
+
constructor(timeoutMs: number, cause?: unknown | undefined);
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=observability.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observability.d.ts","sourceRoot":"","sources":["../../src/ports/observability.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;AAExE,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;CACnC;AAID,MAAM,WAAW,IAAI;IACnB,iDAAiD;IACjD,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IAElD,gDAAgD;IAChD,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,GAAG,IAAI,CAAC;IAE9C;;;;OAIG;IACH,SAAS,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAE1D,iCAAiC;IACjC,GAAG,IAAI,IAAI,CAAC;CACb;AAID,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;AAE1E,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IACjC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAChD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAID,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,SAAS,GAAG,WAAW,CAAC;AAE3D,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAID,MAAM,WAAW,iBAAiB;IAChC;;;;;;OAMG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;IAEtD;;;;OAIG;IACH,WAAW,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAE7C;;;;OAIG;IACH,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;IAExC;;;OAGG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAID;;;GAGG;AACH,qBAAa,qBAAsB,YAAW,iBAAiB;IAC7D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAKvB;IAEF,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,cAAc,GAAG,IAAI;IAIvD,WAAW,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI;IAI7C,YAAY,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAIlC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B;AAID,qBAAa,kBAAmB,SAAQ,KAAK;aACE,KAAK,CAAC,EAAE,OAAO;gBAAhD,OAAO,EAAE,MAAM,EAAkB,KAAK,CAAC,EAAE,OAAO,YAAA;CAK7D;AAED,qBAAa,8BAA+B,SAAQ,KAAK;aAErC,SAAS,EAAE,MAAM;aACjB,KAAK,CAAC,EAAE,OAAO;gBADf,SAAS,EAAE,MAAM,EACjB,KAAK,CAAC,EAAE,OAAO,YAAA;CAMlC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ObservabilityPort — cross-cutting telemetry for Vauban Integration Spine.
|
|
3
|
+
*
|
|
4
|
+
* Implements S0 §6 (ObservabilityPort, port #14): OpenTelemetry-compatible spans,
|
|
5
|
+
* structured event logging, metrics, and graceful shutdown. Adapters emit to
|
|
6
|
+
* Prometheus, Sentry, audit logs, or custom backends.
|
|
7
|
+
*
|
|
8
|
+
* Design: structured types only — no hard dependency on @opentelemetry/api.
|
|
9
|
+
* Real OTel Spans satisfy the structural Span interface.
|
|
10
|
+
*
|
|
11
|
+
* Reference: S0 §6 type definition + createTracedBrainPort pattern in brain.ts
|
|
12
|
+
*/
|
|
13
|
+
// ─── Noop implementation (for tests, fallback, or offline mode) ──────────────
|
|
14
|
+
/**
|
|
15
|
+
* NoopObservabilityPort — no-op implementation for tests or offline mode.
|
|
16
|
+
* All calls are discarded; span operations succeed silently.
|
|
17
|
+
*/
|
|
18
|
+
export class NoopObservabilityPort {
|
|
19
|
+
noopSpan = {
|
|
20
|
+
setAttribute: () => { },
|
|
21
|
+
recordException: () => { },
|
|
22
|
+
setStatus: () => { },
|
|
23
|
+
end: () => { },
|
|
24
|
+
};
|
|
25
|
+
startSpan(_name, _attrs) {
|
|
26
|
+
return this.noopSpan;
|
|
27
|
+
}
|
|
28
|
+
recordEvent(_event) {
|
|
29
|
+
// no-op
|
|
30
|
+
}
|
|
31
|
+
recordMetric(_metric) {
|
|
32
|
+
// no-op
|
|
33
|
+
}
|
|
34
|
+
async flush() {
|
|
35
|
+
// no-op
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
// ─── Typed errors ────────────────────────────────────────────────────────────
|
|
39
|
+
export class ObservabilityError extends Error {
|
|
40
|
+
cause;
|
|
41
|
+
constructor(message, cause) {
|
|
42
|
+
super(message);
|
|
43
|
+
this.cause = cause;
|
|
44
|
+
this.name = "ObservabilityError";
|
|
45
|
+
Object.setPrototypeOf(this, new.target.prototype);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
export class ObservabilityFlushTimeoutError extends Error {
|
|
49
|
+
timeoutMs;
|
|
50
|
+
cause;
|
|
51
|
+
constructor(timeoutMs, cause) {
|
|
52
|
+
super(`Observability flush timed out after ${timeoutMs}ms`);
|
|
53
|
+
this.timeoutMs = timeoutMs;
|
|
54
|
+
this.cause = cause;
|
|
55
|
+
this.name = "ObservabilityFlushTimeoutError";
|
|
56
|
+
Object.setPrototypeOf(this, new.target.prototype);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=observability.js.map
|