@vauban-org/agent-sdk 1.0.0 → 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 +46 -46
- 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 +6 -6
- package/dist/events/schemas/citadel.sprint.closed.v1.d.ts +2 -2
- package/dist/events/schemas/forge.inbox.reply_classified.v1.d.ts +6 -6
- 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.goal.checked.v1.d.ts +2 -2
- package/dist/events/schemas/vauban.rebalancing.checked.v1.d.ts +2 -2
- package/dist/events/schemas/vauban.tax.checked.v1.d.ts +2 -2
- package/dist/events/schemas/vauban.vault.analyzed.v1.d.ts +6 -6
- 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/minimal-loop.js +293 -287
- 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/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 -0
- 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/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 +34 -17
- 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/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/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/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 -0
- 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/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
|
@@ -5,9 +5,15 @@
|
|
|
5
5
|
* Maps. Use for agent unit tests that need to archive/query without
|
|
6
6
|
* external infrastructure.
|
|
7
7
|
*
|
|
8
|
+
* OTel spans are emitted on archiveKnowledge and queryKnowledge via
|
|
9
|
+
* @opentelemetry/api. Gracefully degrades to noop spans when no OTel SDK
|
|
10
|
+
* is installed.
|
|
11
|
+
*
|
|
8
12
|
* @public
|
|
9
13
|
*/
|
|
14
|
+
import { SpanStatusCode, trace } from "@opentelemetry/api";
|
|
10
15
|
import { InMemoryWorkingMemory, InMemoryEpisodicMemory, InMemorySemanticMemory, InMemoryProceduralMemory, } from "../ports/brain.js";
|
|
16
|
+
const TEST_TRACER = trace.getTracer("vauban-agent-sdk.ports.test", "0.1.0");
|
|
11
17
|
export class TestBrainPort {
|
|
12
18
|
working;
|
|
13
19
|
episodic;
|
|
@@ -22,28 +28,77 @@ export class TestBrainPort {
|
|
|
22
28
|
this.procedural = new InMemoryProceduralMemory();
|
|
23
29
|
}
|
|
24
30
|
async archiveKnowledge(entry) {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
|
|
31
|
+
return TEST_TRACER.startActiveSpan("brain.archiveKnowledge", {
|
|
32
|
+
attributes: {
|
|
33
|
+
"brain.entry.category": entry.category ?? "unknown",
|
|
34
|
+
"brain.entry.content_preview": entry.content.slice(0, 200),
|
|
35
|
+
"brain.entry.tags": entry.tags?.join(",") ?? "",
|
|
36
|
+
"vauban.port.name": "brain",
|
|
37
|
+
"vauban.port.impl": "TestBrainPort",
|
|
38
|
+
},
|
|
39
|
+
}, async (span) => {
|
|
40
|
+
try {
|
|
41
|
+
const id = `test-${this.nextId++}`;
|
|
42
|
+
const created = {
|
|
43
|
+
id,
|
|
44
|
+
content: entry.content,
|
|
45
|
+
category: entry.category,
|
|
46
|
+
tags: entry.tags,
|
|
47
|
+
metadata: entry.metadata,
|
|
48
|
+
created_at: new Date().toISOString(),
|
|
49
|
+
};
|
|
50
|
+
this.entries.set(id, created);
|
|
51
|
+
span.setAttribute("brain.entry.id", id);
|
|
52
|
+
span.setStatus({ code: SpanStatusCode.OK });
|
|
53
|
+
return created;
|
|
54
|
+
}
|
|
55
|
+
catch (err) {
|
|
56
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
57
|
+
span.setStatus({ code: SpanStatusCode.ERROR, message });
|
|
58
|
+
if (err instanceof Error)
|
|
59
|
+
span.recordException(err);
|
|
60
|
+
throw err;
|
|
61
|
+
}
|
|
62
|
+
finally {
|
|
63
|
+
span.end();
|
|
64
|
+
}
|
|
65
|
+
});
|
|
36
66
|
}
|
|
37
67
|
async queryKnowledge(query, filters) {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
68
|
+
return TEST_TRACER.startActiveSpan("brain.queryKnowledge", {
|
|
69
|
+
attributes: {
|
|
70
|
+
"brain.query.preview": query.slice(0, 200),
|
|
71
|
+
"brain.query.category": filters?.category ?? "none",
|
|
72
|
+
"brain.query.limit": filters?.limit ?? -1,
|
|
73
|
+
"vauban.port.name": "brain",
|
|
74
|
+
"vauban.port.impl": "TestBrainPort",
|
|
75
|
+
},
|
|
76
|
+
}, async (span) => {
|
|
77
|
+
try {
|
|
78
|
+
let results = Array.from(this.entries.values()).filter((e) => e.content.toLowerCase().includes(query.toLowerCase()));
|
|
79
|
+
if (filters?.category) {
|
|
80
|
+
results = results.filter((e) => e.category === filters.category);
|
|
81
|
+
}
|
|
82
|
+
if (filters?.tags && filters.tags.length > 0) {
|
|
83
|
+
results = results.filter((e) => e.tags?.some((t) => filters.tags.includes(t)));
|
|
84
|
+
}
|
|
85
|
+
const limit = filters?.limit ?? 10;
|
|
86
|
+
const sliced = results.slice(0, limit);
|
|
87
|
+
span.setAttribute("brain.query.result_count", sliced.length);
|
|
88
|
+
span.setStatus({ code: SpanStatusCode.OK });
|
|
89
|
+
return sliced;
|
|
90
|
+
}
|
|
91
|
+
catch (err) {
|
|
92
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
93
|
+
span.setStatus({ code: SpanStatusCode.ERROR, message });
|
|
94
|
+
if (err instanceof Error)
|
|
95
|
+
span.recordException(err);
|
|
96
|
+
throw err;
|
|
97
|
+
}
|
|
98
|
+
finally {
|
|
99
|
+
span.end();
|
|
100
|
+
}
|
|
101
|
+
});
|
|
47
102
|
}
|
|
48
103
|
/** Clear all entries. */
|
|
49
104
|
reset() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-brain-port.js","sourceRoot":"","sources":["../../src/testing/test-brain-port.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"test-brain-port.js","sourceRoot":"","sources":["../../src/testing/test-brain-port.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-event-bus.d.ts","sourceRoot":"","sources":["../../src/testing/test-event-bus.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;
|
|
1
|
+
{"version":3,"file":"test-event-bus.d.ts","sourceRoot":"","sources":["../../src/testing/test-event-bus.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,OAAO,KAAK,EACV,UAAU,EACV,WAAW,EACX,YAAY,EACZ,YAAY,EACb,MAAM,uBAAuB,CAAC;AAe/B,qBAAa,YAAa,YAAW,YAAY;IAC/C,OAAO,CAAC,OAAO,CAAmC;IAClD,OAAO,CAAC,WAAW,CAAgD;IACnE,OAAO,CAAC,WAAW,CAAiC;IACpD,OAAO,CAAC,SAAS,CAAmC;IAGpD,OAAO,CAAC,aAAa,CAA0C;IAC/D,OAAO,CAAC,iBAAiB,CAAiD;IAC1E,OAAO,CAAC,SAAS,CAAqB;IAEtC,OAAO,CAAC,uBAAuB,CAA4B;IAC3D,OAAO,CAAC,kBAAkB,CAA4B;IAEtD;;;OAGG;IACH,OAAO,CAAC,aAAa,CAAuC;IAE5D,4EAA4E;IAC5E,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAMhC,OAAO,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA+CzD,sBAAsB,CAAC,CAAC,EAC5B,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,EACxC,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,IAAI,CAAC;IA6DhB,SAAS,CACP,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,GAC5C,OAAO,CAAC,MAAM,IAAI,CAAC;IAkBtB,eAAe,CAAC,CAAC,EACf,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,EACjD,IAAI,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GACxC,YAAY;IAoCR,UAAU,CACf,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACb,aAAa,CAAC,WAAW,CAAC;IAW7B,GAAG,IAAI;QAAE,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;QAAC,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE;IAkBrE,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAM5E,wCAAwC;IACxC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,EAAE;IAIvC,kEAAkE;IAClE,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,EAAE;IAItC,oDAAoD;IACpD,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAIlC,qEAAqE;IACrE,IAAI,eAAe,IAAI,WAAW,EAAE,CAEnC;IAED,uBAAuB;IACvB,KAAK,IAAI,IAAI;CAWd"}
|
|
@@ -12,9 +12,11 @@
|
|
|
12
12
|
*
|
|
13
13
|
* @public
|
|
14
14
|
*/
|
|
15
|
+
import { SpanStatusCode, trace } from "@opentelemetry/api";
|
|
15
16
|
import { signEvent } from "../auth/sign-event.js";
|
|
16
17
|
import { verifyEvent } from "../auth/verify-event.js";
|
|
17
18
|
import { InMemoryNonceStore } from "../auth/nonce-store.js";
|
|
19
|
+
const TEST_TRACER = trace.getTracer("vauban-agent-sdk.ports.test", "0.1.0");
|
|
18
20
|
export class TestEventBus {
|
|
19
21
|
streams = new Map();
|
|
20
22
|
subscribers = new Map();
|
|
@@ -38,46 +40,97 @@ export class TestEventBus {
|
|
|
38
40
|
}
|
|
39
41
|
// ─── EventBusPort ──────────────────────────────────────────────────────────
|
|
40
42
|
async publish(event, stream) {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
43
|
+
return TEST_TRACER.startActiveSpan("event-bus.publish", {
|
|
44
|
+
attributes: {
|
|
45
|
+
"event.type": event.type,
|
|
46
|
+
"event.stream": stream,
|
|
47
|
+
"event.id": event.id,
|
|
48
|
+
"vauban.port.name": "event-bus",
|
|
49
|
+
"vauban.port.impl": "TestEventBus",
|
|
50
|
+
},
|
|
51
|
+
}, async (span) => {
|
|
52
|
+
try {
|
|
53
|
+
if (!event.id)
|
|
54
|
+
throw new Error("CloudEvent.id is required");
|
|
55
|
+
if (event.specversion !== "1.0")
|
|
56
|
+
throw new Error("CloudEvent.specversion must be 1.0");
|
|
57
|
+
const events = this.streams.get(stream) ?? [];
|
|
58
|
+
events.push(event);
|
|
59
|
+
this.streams.set(stream, events);
|
|
60
|
+
// Track consumed events per stream
|
|
61
|
+
const consumed = this._consumed.get(stream) ?? [];
|
|
62
|
+
consumed.push(event);
|
|
63
|
+
this._consumed.set(stream, consumed);
|
|
64
|
+
// Dispatch to subscribers
|
|
65
|
+
const streamSubs = this.subscribers.get(stream);
|
|
66
|
+
if (streamSubs) {
|
|
67
|
+
for (const handler of streamSubs.values()) {
|
|
68
|
+
await handler(event);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
span.setStatus({ code: SpanStatusCode.OK });
|
|
57
72
|
}
|
|
58
|
-
|
|
73
|
+
catch (err) {
|
|
74
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
75
|
+
span.setStatus({ code: SpanStatusCode.ERROR, message });
|
|
76
|
+
if (err instanceof Error)
|
|
77
|
+
span.recordException(err);
|
|
78
|
+
throw err;
|
|
79
|
+
}
|
|
80
|
+
finally {
|
|
81
|
+
span.end();
|
|
82
|
+
}
|
|
83
|
+
});
|
|
59
84
|
}
|
|
60
85
|
async publishWithIdempotency(event, key) {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
86
|
+
return TEST_TRACER.startActiveSpan("event-bus.publishWithIdempotency", {
|
|
87
|
+
attributes: {
|
|
88
|
+
"event.type": event.type,
|
|
89
|
+
"event.idempotency_key": key,
|
|
90
|
+
"vauban.port.name": "event-bus",
|
|
91
|
+
"vauban.port.impl": "TestEventBus",
|
|
92
|
+
},
|
|
93
|
+
}, async (span) => {
|
|
94
|
+
try {
|
|
95
|
+
// Dedup: silently skip if key already processed (producer-side)
|
|
96
|
+
const isNew = await this.publishIdempotencyStore.setNX(key, 10 * 60 * 1000);
|
|
97
|
+
if (!isNew) {
|
|
98
|
+
span.setAttribute("event.dedup.skipped", true);
|
|
99
|
+
span.setStatus({ code: SpanStatusCode.OK });
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
// Auto-sign the event
|
|
103
|
+
const signature = signEvent(event, this.signingSecret);
|
|
104
|
+
const signed = {
|
|
105
|
+
...event,
|
|
106
|
+
signature,
|
|
107
|
+
};
|
|
108
|
+
// Store in domain stream
|
|
109
|
+
const streamKey = `domain:${event.type}`;
|
|
110
|
+
const stored = this.domainStreams.get(streamKey) ?? [];
|
|
111
|
+
const streamId = `${Date.now()}-${stored.length}`;
|
|
112
|
+
stored.push({ streamId, event: signed });
|
|
113
|
+
this.domainStreams.set(streamKey, stored);
|
|
114
|
+
// Dispatch to domain subscribers
|
|
115
|
+
const typeSubs = this.domainSubscribers.get(event.type);
|
|
116
|
+
if (typeSubs) {
|
|
117
|
+
for (const handler of typeSubs.values()) {
|
|
118
|
+
await handler(signed);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
span.setStatus({ code: SpanStatusCode.OK });
|
|
79
122
|
}
|
|
80
|
-
|
|
123
|
+
catch (err) {
|
|
124
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
125
|
+
span.setStatus({ code: SpanStatusCode.ERROR, message });
|
|
126
|
+
if (err instanceof Error)
|
|
127
|
+
span.recordException(err);
|
|
128
|
+
throw err;
|
|
129
|
+
}
|
|
130
|
+
finally {
|
|
131
|
+
span.end();
|
|
132
|
+
}
|
|
133
|
+
});
|
|
81
134
|
}
|
|
82
135
|
subscribe(stream, consumerGroup, handler) {
|
|
83
136
|
const key = `${stream}:${consumerGroup}`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-event-bus.js","sourceRoot":"","sources":["../../src/testing/test-event-bus.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;
|
|
1
|
+
{"version":3,"file":"test-event-bus.js","sourceRoot":"","sources":["../../src/testing/test-event-bus.ts"],"names":[],"mappings":"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"}
|
package/dist/trace/schema.d.ts
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
*/
|
|
15
15
|
/** Semver version of this trace schema. Increment MINOR on additive changes,
|
|
16
16
|
* MAJOR on breaking changes (new required fields or removed fields). */
|
|
17
|
-
export declare const TRACE_SCHEMA_VERSION: "
|
|
17
|
+
export declare const TRACE_SCHEMA_VERSION: "1.0.0";
|
|
18
18
|
/** Status of an optional TSA receipt for a Trace. */
|
|
19
19
|
export type ReceiptStatus = "present" | "pending" | "failed";
|
|
20
20
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/trace/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH;yEACyE;AACzE,eAAO,MAAM,oBAAoB,EAAG,
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/trace/schema.ts"],"names":[],"mappings":"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"}
|
package/dist/trace/schema.js
CHANGED
|
@@ -14,5 +14,5 @@
|
|
|
14
14
|
*/
|
|
15
15
|
/** Semver version of this trace schema. Increment MINOR on additive changes,
|
|
16
16
|
* MAJOR on breaking changes (new required fields or removed fields). */
|
|
17
|
-
export const TRACE_SCHEMA_VERSION = "
|
|
17
|
+
export const TRACE_SCHEMA_VERSION = "1.0.0";
|
|
18
18
|
//# sourceMappingURL=schema.js.map
|
package/dist/trace/schema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/trace/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH;yEACyE;AACzE,MAAM,CAAC,MAAM,oBAAoB,GAAG,
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/trace/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH;yEACyE;AACzE,MAAM,CAAC,MAAM,oBAAoB,GAAG,OAAgB,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* src/verify/formal/index.ts
|
|
3
|
+
*
|
|
4
|
+
* Sprint-587 — Formal verification entry point.
|
|
5
|
+
*
|
|
6
|
+
* Orchestrates : AxiomSpec → SMT-LIB → Z3 subprocess → 4-state result →
|
|
7
|
+
* (optionally) per-axiom policy decision.
|
|
8
|
+
*
|
|
9
|
+
* When `z3` is not in PATH, every spec resolves to UNKNOWN with a uniform
|
|
10
|
+
* rationale. Callers can then apply their policies — typically resulting in
|
|
11
|
+
* escalation or log (depending on the axiom and consumer mode).
|
|
12
|
+
*
|
|
13
|
+
* @module verify/formal
|
|
14
|
+
*/
|
|
15
|
+
import type { FormalVerifyResult } from "./result.js";
|
|
16
|
+
import { type AxiomPolicy, type ConsumerMode, type PolicyDecision, type VerifyContext } from "./policy.js";
|
|
17
|
+
import { type AxiomSpec } from "./spec-language.js";
|
|
18
|
+
export { type FormalVerifyResult, type FormalVerifyState, type FormalSolver, } from "./result.js";
|
|
19
|
+
export { type AxiomPolicy, type ConsumerMode, type VerifyContext, type PolicyAction, type PolicyDecision, type OnUnknown, type OnUnsafe, DEFAULT_POLICIES, applyPolicy, } from "./policy.js";
|
|
20
|
+
export { type AxiomSpec, type Condition, AXIOM_SPECS, compileToSmt, } from "./spec-language.js";
|
|
21
|
+
export { type SmtCheckResult, type SolverOptions, checkSmt, isZ3Available, } from "./solver.js";
|
|
22
|
+
/**
|
|
23
|
+
* Bundle returned by {@link formalVerify} : the raw verification result plus
|
|
24
|
+
* the policy-resolved decision.
|
|
25
|
+
*/
|
|
26
|
+
export interface FormalVerifyDecision {
|
|
27
|
+
result: FormalVerifyResult;
|
|
28
|
+
decision: PolicyDecision;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Verify every supplied AxiomSpec, apply the per-axiom policy, and return
|
|
32
|
+
* one {@link FormalVerifyDecision} per spec.
|
|
33
|
+
*
|
|
34
|
+
* If `z3` is not available on PATH, every result is UNKNOWN with
|
|
35
|
+
* `solver: "none"`, and the policy layer handles routing.
|
|
36
|
+
*
|
|
37
|
+
* @param axiomSpecs List of specs to verify (typically derived from
|
|
38
|
+
* {@link AXIOM_SPECS}, possibly customised).
|
|
39
|
+
* @param mode Consumer mode (strict / permissive / audit_only).
|
|
40
|
+
* @param context Calling context (runtime / skill_ingestion).
|
|
41
|
+
* @param customPolicies Optional override map keyed by axiom label.
|
|
42
|
+
*/
|
|
43
|
+
export declare function formalVerify(axiomSpecs: AxiomSpec[], mode: ConsumerMode, context: VerifyContext, customPolicies?: Partial<Record<string, AxiomPolicy>>): Promise<FormalVerifyDecision[]>;
|
|
44
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/verify/formal/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,aAAa,EAGnB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,KAAK,SAAS,EAAgB,MAAM,oBAAoB,CAAC;AAGlE,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,YAAY,GAClB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,QAAQ,EACb,gBAAgB,EAChB,WAAW,GACZ,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,KAAK,SAAS,EACd,KAAK,SAAS,EACd,WAAW,EACX,YAAY,GACb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,QAAQ,EACR,aAAa,GACd,MAAM,aAAa,CAAC;AAErB;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,kBAAkB,CAAC;IAC3B,QAAQ,EAAE,cAAc,CAAC;CAC1B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,YAAY,CAChC,UAAU,EAAE,SAAS,EAAE,EACvB,IAAI,EAAE,YAAY,EAClB,OAAO,EAAE,aAAa,EACtB,cAAc,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,GACpD,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAsEjC"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* src/verify/formal/index.ts
|
|
3
|
+
*
|
|
4
|
+
* Sprint-587 — Formal verification entry point.
|
|
5
|
+
*
|
|
6
|
+
* Orchestrates : AxiomSpec → SMT-LIB → Z3 subprocess → 4-state result →
|
|
7
|
+
* (optionally) per-axiom policy decision.
|
|
8
|
+
*
|
|
9
|
+
* When `z3` is not in PATH, every spec resolves to UNKNOWN with a uniform
|
|
10
|
+
* rationale. Callers can then apply their policies — typically resulting in
|
|
11
|
+
* escalation or log (depending on the axiom and consumer mode).
|
|
12
|
+
*
|
|
13
|
+
* @module verify/formal
|
|
14
|
+
*/
|
|
15
|
+
import { DEFAULT_POLICIES, applyPolicy, } from "./policy.js";
|
|
16
|
+
import { compileToSmt } from "./spec-language.js";
|
|
17
|
+
import { checkSmt, isZ3Available } from "./solver.js";
|
|
18
|
+
export { DEFAULT_POLICIES, applyPolicy, } from "./policy.js";
|
|
19
|
+
export { AXIOM_SPECS, compileToSmt, } from "./spec-language.js";
|
|
20
|
+
export { checkSmt, isZ3Available, } from "./solver.js";
|
|
21
|
+
/**
|
|
22
|
+
* Verify every supplied AxiomSpec, apply the per-axiom policy, and return
|
|
23
|
+
* one {@link FormalVerifyDecision} per spec.
|
|
24
|
+
*
|
|
25
|
+
* If `z3` is not available on PATH, every result is UNKNOWN with
|
|
26
|
+
* `solver: "none"`, and the policy layer handles routing.
|
|
27
|
+
*
|
|
28
|
+
* @param axiomSpecs List of specs to verify (typically derived from
|
|
29
|
+
* {@link AXIOM_SPECS}, possibly customised).
|
|
30
|
+
* @param mode Consumer mode (strict / permissive / audit_only).
|
|
31
|
+
* @param context Calling context (runtime / skill_ingestion).
|
|
32
|
+
* @param customPolicies Optional override map keyed by axiom label.
|
|
33
|
+
*/
|
|
34
|
+
export async function formalVerify(axiomSpecs, mode, context, customPolicies) {
|
|
35
|
+
const z3Available = await isZ3Available();
|
|
36
|
+
const out = [];
|
|
37
|
+
for (const spec of axiomSpecs) {
|
|
38
|
+
const policy = customPolicies?.[spec.axiom] ??
|
|
39
|
+
DEFAULT_POLICIES[spec.axiom] ?? // Fallback policy for unknown axioms : permissive defaults.
|
|
40
|
+
{
|
|
41
|
+
onSafe: "proceed",
|
|
42
|
+
onUnsafe: "escalate_human",
|
|
43
|
+
onUnknown: "proceed_with_log",
|
|
44
|
+
timeout_ms: spec.timeout_ms ?? 5000,
|
|
45
|
+
skillLoopStrict: true,
|
|
46
|
+
};
|
|
47
|
+
const timeout_ms = spec.timeout_ms ?? policy.timeout_ms ?? 5000;
|
|
48
|
+
let result;
|
|
49
|
+
if (!z3Available) {
|
|
50
|
+
result = {
|
|
51
|
+
state: "UNKNOWN",
|
|
52
|
+
axiom: spec.axiom,
|
|
53
|
+
rationale: "z3 binary not available on PATH",
|
|
54
|
+
time_ms: 0,
|
|
55
|
+
solver: "none",
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
const smt = compileToSmt(spec);
|
|
60
|
+
const smtRes = await checkSmt(smt, { timeout_ms });
|
|
61
|
+
if (smtRes.sat === false) {
|
|
62
|
+
// unsat → no counterexample → property holds → SAFE
|
|
63
|
+
result = {
|
|
64
|
+
state: "SAFE",
|
|
65
|
+
axiom: spec.axiom,
|
|
66
|
+
rationale: `Z3 proved post-conditions hold for axiom ${spec.axiom}`,
|
|
67
|
+
time_ms: smtRes.time_ms,
|
|
68
|
+
solver: "z3",
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
else if (smtRes.sat === true) {
|
|
72
|
+
// sat → counterexample → property violated → UNSAFE
|
|
73
|
+
result = {
|
|
74
|
+
state: "UNSAFE",
|
|
75
|
+
axiom: spec.axiom,
|
|
76
|
+
rationale: `Z3 found a counterexample for axiom ${spec.axiom}`,
|
|
77
|
+
counterexample: smtRes.model,
|
|
78
|
+
time_ms: smtRes.time_ms,
|
|
79
|
+
solver: "z3",
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
// null → unknown / timeout / error → UNKNOWN
|
|
84
|
+
result = {
|
|
85
|
+
state: "UNKNOWN",
|
|
86
|
+
axiom: spec.axiom,
|
|
87
|
+
rationale: smtRes.reason ?? "z3 returned unknown",
|
|
88
|
+
time_ms: smtRes.time_ms,
|
|
89
|
+
solver: "z3",
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
const decision = applyPolicy(result, policy, mode, context);
|
|
94
|
+
out.push({ result, decision });
|
|
95
|
+
}
|
|
96
|
+
return out;
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/verify/formal/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,EAKL,gBAAgB,EAChB,WAAW,GACZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAkB,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAOtD,OAAO,EAQL,gBAAgB,EAChB,WAAW,GACZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAGL,WAAW,EACX,YAAY,GACb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAGL,QAAQ,EACR,aAAa,GACd,MAAM,aAAa,CAAC;AAWrB;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,UAAuB,EACvB,IAAkB,EAClB,OAAsB,EACtB,cAAqD;IAErD,MAAM,WAAW,GAAG,MAAM,aAAa,EAAE,CAAC;IAE1C,MAAM,GAAG,GAA2B,EAAE,CAAC;IAEvC,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;YACzC,gBAAgB,CACd,IAAI,CAAC,KAAK,CACX,IAAI,4DAA4D;YACjE;gBACE,MAAM,EAAE,SAAkB;gBAC1B,QAAQ,EAAE,gBAAyB;gBACnC,SAAS,EAAE,kBAA2B;gBACtC,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,IAAI;gBACnC,eAAe,EAAE,IAAI;aACtB,CAAC;QAEJ,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC;QAEhE,IAAI,MAA0B,CAAC;QAE/B,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,GAAG;gBACP,KAAK,EAAE,SAAS;gBAChB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,SAAS,EAAE,iCAAiC;gBAC5C,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,MAAM;aACf,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;YAC/B,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;YAEnD,IAAI,MAAM,CAAC,GAAG,KAAK,KAAK,EAAE,CAAC;gBACzB,oDAAoD;gBACpD,MAAM,GAAG;oBACP,KAAK,EAAE,MAAM;oBACb,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,SAAS,EAAE,4CAA4C,IAAI,CAAC,KAAK,EAAE;oBACnE,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,MAAM,EAAE,IAAI;iBACb,CAAC;YACJ,CAAC;iBAAM,IAAI,MAAM,CAAC,GAAG,KAAK,IAAI,EAAE,CAAC;gBAC/B,oDAAoD;gBACpD,MAAM,GAAG;oBACP,KAAK,EAAE,QAAQ;oBACf,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,SAAS,EAAE,uCAAuC,IAAI,CAAC,KAAK,EAAE;oBAC9D,cAAc,EAAE,MAAM,CAAC,KAAK;oBAC5B,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,MAAM,EAAE,IAAI;iBACb,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,6CAA6C;gBAC7C,MAAM,GAAG;oBACP,KAAK,EAAE,SAAS;oBAChB,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,SAAS,EAAE,MAAM,CAAC,MAAM,IAAI,qBAAqB;oBACjD,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,MAAM,EAAE,IAAI;iBACb,CAAC;YACJ,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,EAAE,MAAqB,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAC3E,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IACjC,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* src/verify/formal/policy.ts
|
|
3
|
+
*
|
|
4
|
+
* Sprint-587 — Per-axiom policy + consumer mode resolution.
|
|
5
|
+
*
|
|
6
|
+
* The policy layer maps a 4-state {@link FormalVerifyResult} to an action
|
|
7
|
+
* (proceed / block / escalate / log), parameterised by :
|
|
8
|
+
* - the axiom (Robuste, Institutionnel, … — each has different sensitivity)
|
|
9
|
+
* - the consumer mode (strict / permissive / audit_only)
|
|
10
|
+
* - the calling context (runtime vs skill_ingestion — see Tension Sprint C)
|
|
11
|
+
*
|
|
12
|
+
* Tension Sprint C : skill-loop ingestion is ALWAYS strict on UNKNOWN.
|
|
13
|
+
* Even if the runtime policy says "proceed_with_log" on UNKNOWN for the
|
|
14
|
+
* Profitable axiom, the skill-ingestion path must refuse to ingest the
|
|
15
|
+
* skill until UNKNOWN becomes SAFE. This prevents UNKNOWN-tainted skills
|
|
16
|
+
* from accumulating in the skill library.
|
|
17
|
+
*
|
|
18
|
+
* @module verify/formal/policy
|
|
19
|
+
*/
|
|
20
|
+
import type { FormalVerifyResult } from "./result.js";
|
|
21
|
+
/**
|
|
22
|
+
* Action chosen by the policy resolver.
|
|
23
|
+
*
|
|
24
|
+
* `proceed` : continue without intervention
|
|
25
|
+
* `block` : refuse the operation outright
|
|
26
|
+
* `escalate_human` : pause and request human approval (HITL)
|
|
27
|
+
* `log` : continue but emit an audit-grade log entry
|
|
28
|
+
*/
|
|
29
|
+
export type PolicyAction = "proceed" | "block" | "escalate_human" | "log";
|
|
30
|
+
/**
|
|
31
|
+
* Strategy for handling UNKNOWN outcomes.
|
|
32
|
+
*
|
|
33
|
+
* `escalate_human` : refuse to make a unilateral decision
|
|
34
|
+
* `proceed_with_log` : continue and emit a regular log entry
|
|
35
|
+
* `proceed_with_audit_log`: continue and emit an audit-grade log entry
|
|
36
|
+
*/
|
|
37
|
+
export type OnUnknown = "escalate_human" | "proceed_with_log" | "proceed_with_audit_log";
|
|
38
|
+
/**
|
|
39
|
+
* Strategy for handling UNSAFE outcomes — either hard-block or escalate.
|
|
40
|
+
*/
|
|
41
|
+
export type OnUnsafe = "block" | "escalate_human";
|
|
42
|
+
/**
|
|
43
|
+
* Policy bundle for one axiom.
|
|
44
|
+
*
|
|
45
|
+
* `skillLoopStrict` is ALWAYS true by design : it is exposed as a field so
|
|
46
|
+
* downstream code can read it but is not configurable (see Tension Sprint C).
|
|
47
|
+
*/
|
|
48
|
+
export interface AxiomPolicy {
|
|
49
|
+
/** Action on SAFE. Fixed at `"proceed"` — kept explicit for symmetry. */
|
|
50
|
+
onSafe: "proceed";
|
|
51
|
+
/** Action on UNSAFE. */
|
|
52
|
+
onUnsafe: OnUnsafe;
|
|
53
|
+
/** Action on UNKNOWN. */
|
|
54
|
+
onUnknown: OnUnknown;
|
|
55
|
+
/** Solver timeout for this axiom, in milliseconds. */
|
|
56
|
+
timeout_ms: number;
|
|
57
|
+
/**
|
|
58
|
+
* Skill-loop ingestion strict mode — always true. Exposed so callers can
|
|
59
|
+
* assert the invariant. Do not set to false ; Tension Sprint C invariant.
|
|
60
|
+
*/
|
|
61
|
+
skillLoopStrict: boolean;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Default per-axiom policies.
|
|
65
|
+
*
|
|
66
|
+
* Rationale :
|
|
67
|
+
* Robuste / Institutionnel : hard axioms — UNSAFE blocks, UNKNOWN escalates
|
|
68
|
+
* SOTA : UNKNOWN allowed with audit log (SOTA evolves)
|
|
69
|
+
* AntiFragile / Profitable : softer — UNSAFE escalates, UNKNOWN logs
|
|
70
|
+
*/
|
|
71
|
+
export declare const DEFAULT_POLICIES: Record<string, AxiomPolicy>;
|
|
72
|
+
/**
|
|
73
|
+
* Consumer-level mode for the formal verifier.
|
|
74
|
+
*
|
|
75
|
+
* `strict` : enforce all policies as declared
|
|
76
|
+
* `permissive` : downgrade non-critical UNSAFE to log (Robuste/Institutionnel
|
|
77
|
+
* remain enforced), and treat UNKNOWN as SKIPPED
|
|
78
|
+
* `audit_only` : never block ; map every actionable outcome to `log`
|
|
79
|
+
*/
|
|
80
|
+
export type ConsumerMode = "strict" | "permissive" | "audit_only";
|
|
81
|
+
/**
|
|
82
|
+
* Calling context — distinguishes between live runtime verification and
|
|
83
|
+
* skill-loop ingestion. The latter has stricter rules on UNKNOWN.
|
|
84
|
+
*/
|
|
85
|
+
export type VerifyContext = "runtime" | "skill_ingestion";
|
|
86
|
+
/**
|
|
87
|
+
* Resolution outcome of {@link applyPolicy}.
|
|
88
|
+
*/
|
|
89
|
+
export interface PolicyDecision {
|
|
90
|
+
action: PolicyAction;
|
|
91
|
+
rationale: string;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Apply the policy + mode + context to a single verification result.
|
|
95
|
+
*
|
|
96
|
+
* Decision order :
|
|
97
|
+
* 1. SKIPPED → log
|
|
98
|
+
* 2. skill_ingestion + UNKNOWN → block (Tension Sprint C)
|
|
99
|
+
* 3. mode = audit_only → log
|
|
100
|
+
* 4. mode = permissive + UNKNOWN → log (treated as SKIPPED)
|
|
101
|
+
* 5. mode = permissive + UNSAFE + non-hard axiom → log
|
|
102
|
+
* 6. otherwise → policy.on{Safe,Unsafe,Unknown}
|
|
103
|
+
*/
|
|
104
|
+
export declare function applyPolicy(result: FormalVerifyResult, policy: AxiomPolicy, mode: ConsumerMode, context: VerifyContext): PolicyDecision;
|
|
105
|
+
//# sourceMappingURL=policy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../../src/verify/formal/policy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEtD;;;;;;;GAOG;AACH,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,OAAO,GAAG,gBAAgB,GAAG,KAAK,CAAC;AAE1E;;;;;;GAMG;AACH,MAAM,MAAM,SAAS,GACjB,gBAAgB,GAChB,kBAAkB,GAClB,wBAAwB,CAAC;AAE7B;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,gBAAgB,CAAC;AAElD;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IAC1B,yEAAyE;IACzE,MAAM,EAAE,SAAS,CAAC;IAClB,wBAAwB;IACxB,QAAQ,EAAE,QAAQ,CAAC;IACnB,yBAAyB;IACzB,SAAS,EAAE,SAAS,CAAC;IACrB,sDAAsD;IACtD,UAAU,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAoCxD,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,YAAY,GAAG,YAAY,CAAC;AAElE;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,iBAAiB,CAAC;AAE1D;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,YAAY,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAUD;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,kBAAkB,EAC1B,MAAM,EAAE,WAAW,EACnB,IAAI,EAAE,YAAY,EAClB,OAAO,EAAE,aAAa,GACrB,cAAc,CAuFhB"}
|