@vauban-org/agent-sdk 1.0.0 → 1.3.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 +6918 -742
- 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 +41 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +31 -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/agent.d.ts.map +1 -1
- package/dist/orchestration/ooda/agent.js +36 -0
- package/dist/orchestration/ooda/agent.js.map +1 -1
- 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 +11 -0
- 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 -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/_secrets.d.ts +16 -0
- package/dist/skills/_secrets.d.ts.map +1 -0
- package/dist/skills/_secrets.js +20 -0
- package/dist/skills/_secrets.js.map +1 -0
- package/dist/skills/alpaca-quote.d.ts +2 -2
- package/dist/skills/alpaca-quote.d.ts.map +1 -1
- package/dist/skills/alpaca-quote.js +51 -20
- package/dist/skills/alpaca-quote.js.map +1 -1
- 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 +2 -2
- package/dist/skills/send-email.d.ts.map +1 -1
- package/dist/skills/send-email.js +4 -3
- package/dist/skills/send-email.js.map +1 -1
- package/dist/skills/slack-notify.d.ts +4 -4
- package/dist/skills/slack-notify.d.ts.map +1 -1
- package/dist/skills/slack-notify.js +52 -21
- package/dist/skills/slack-notify.js.map +1 -1
- package/dist/skills/starknet-balance.d.ts +1 -1
- package/dist/skills/telegram-notify.d.ts +4 -4
- package/dist/skills/telegram-notify.d.ts.map +1 -1
- package/dist/skills/telegram-notify.js +48 -19
- package/dist/skills/telegram-notify.js.map +1 -1
- package/dist/skills/web-search.d.ts +1 -1
- package/dist/skills/web-search.d.ts.map +1 -1
- package/dist/skills/web-search.js +85 -40
- package/dist/skills/web-search.js.map +1 -1
- package/dist/telemetry/bus.d.ts +54 -0
- package/dist/telemetry/bus.d.ts.map +1 -0
- package/dist/telemetry/bus.js +159 -0
- package/dist/telemetry/bus.js.map +1 -0
- package/dist/telemetry/index.d.ts +35 -0
- package/dist/telemetry/index.d.ts.map +1 -0
- package/dist/telemetry/index.js +30 -0
- package/dist/telemetry/index.js.map +1 -0
- package/dist/telemetry/port.d.ts +121 -0
- package/dist/telemetry/port.d.ts.map +1 -0
- package/dist/telemetry/port.js +48 -0
- package/dist/telemetry/port.js.map +1 -0
- package/dist/telemetry/sinks/otlp.d.ts +45 -0
- package/dist/telemetry/sinks/otlp.d.ts.map +1 -0
- package/dist/telemetry/sinks/otlp.js +195 -0
- package/dist/telemetry/sinks/otlp.js.map +1 -0
- package/dist/telemetry/sinks/sqlite.d.ts +32 -0
- package/dist/telemetry/sinks/sqlite.d.ts.map +1 -0
- package/dist/telemetry/sinks/sqlite.js +170 -0
- package/dist/telemetry/sinks/sqlite.js.map +1 -0
- package/dist/telemetry/sinks/stdout.d.ts +22 -0
- package/dist/telemetry/sinks/stdout.d.ts.map +1 -0
- package/dist/telemetry/sinks/stdout.js +38 -0
- package/dist/telemetry/sinks/stdout.js.map +1 -0
- 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/docs/telemetry/migration.md +155 -0
- package/docs/telemetry/overview.md +154 -0
- package/docs/telemetry/privacy.md +127 -0
- package/docs/telemetry/sinks/cc.md +155 -0
- package/docs/telemetry/sinks/otlp.md +146 -0
- package/docs/telemetry/sinks/sqlite.md +126 -0
- package/docs/telemetry/sinks/stdout.md +82 -0
- package/package.json +18 -2
- 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 +368 -2
- 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/agent.ts +50 -0
- package/src/orchestration/ooda/skills.ts +177 -0
- package/src/orchestration/ooda/types.ts +12 -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/_secrets.ts +25 -0
- package/src/skills/alpaca-quote.ts +68 -23
- 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 +4 -3
- package/src/skills/slack-notify.ts +73 -30
- package/src/skills/telegram-notify.ts +70 -24
- package/src/skills/web-search.ts +132 -50
- package/src/telemetry/bus.test.ts +231 -0
- package/src/telemetry/bus.ts +241 -0
- package/src/telemetry/index.ts +49 -0
- package/src/telemetry/port.ts +160 -0
- package/src/telemetry/sinks/otlp.test.ts +146 -0
- package/src/telemetry/sinks/otlp.ts +250 -0
- package/src/telemetry/sinks/sqlite.test.ts +121 -0
- package/src/telemetry/sinks/sqlite.ts +260 -0
- package/src/telemetry/sinks/stdout.test.ts +109 -0
- package/src/telemetry/sinks/stdout.ts +59 -0
- 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,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* src/compute/strategies/tree-of-thoughts.ts
|
|
3
|
+
*
|
|
4
|
+
* Tree-of-Thoughts (ToT) compute strategy.
|
|
5
|
+
*
|
|
6
|
+
* Reference: Yao et al. 2023, "Tree of Thoughts: Deliberate Problem Solving
|
|
7
|
+
* with Large Language Models", arXiv:2305.10601.
|
|
8
|
+
*
|
|
9
|
+
* Algorithm (paper §3):
|
|
10
|
+
* 1. Build a tree of partial-solution states, root = empty/initial state.
|
|
11
|
+
* 2. Expand each node into up to `branchFactor` children via the generator.
|
|
12
|
+
* 3. Evaluate each state with a lightweight heuristic (no extra LLM call).
|
|
13
|
+
* 4. BFS expands level-by-level; DFS goes depth-first with backtracking
|
|
14
|
+
* when score < pruning threshold.
|
|
15
|
+
* 5. Bound total expansions by `maxCalls` (== generator-call budget).
|
|
16
|
+
* 6. Return the highest-scoring leaf output.
|
|
17
|
+
*
|
|
18
|
+
* Default state-evaluator (no LLM):
|
|
19
|
+
* - string outputs : monotone progress score based on length (caps at 200)
|
|
20
|
+
* - number outputs : closeness to plausible-answer band [0, 100]
|
|
21
|
+
* - other : 0.5 (neutral)
|
|
22
|
+
*
|
|
23
|
+
* @experimental Public-experimental API per `contract-stability.md` (sprint-582).
|
|
24
|
+
*/
|
|
25
|
+
import type { Strategy } from "../types.js";
|
|
26
|
+
export type ToTSearchPolicy = "bfs" | "dfs";
|
|
27
|
+
export interface ToTConfig {
|
|
28
|
+
/** BFS or DFS. Default: "bfs". */
|
|
29
|
+
searchPolicy: ToTSearchPolicy;
|
|
30
|
+
/** Max tree depth (steps). Default: 3. */
|
|
31
|
+
maxDepth: number;
|
|
32
|
+
/** Max branching factor (children per node). Default: 3. */
|
|
33
|
+
branchFactor: number;
|
|
34
|
+
/** Hard cap on total generator calls. Default: maxDepth * branchFactor. */
|
|
35
|
+
maxCalls: number;
|
|
36
|
+
/** State evaluator → score in [0,1]. Default: heuristic on output shape. */
|
|
37
|
+
evaluateState?: (state: unknown) => number;
|
|
38
|
+
/** Prune any node whose evaluator score is below this. Default: 0.2. */
|
|
39
|
+
pruneThreshold: number;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Construct a Tree-of-Thoughts {@link Strategy}.
|
|
43
|
+
*
|
|
44
|
+
* @throws RangeError when `maxDepth`, `branchFactor`, or `maxCalls` is < 1.
|
|
45
|
+
* @throws Error when `searchPolicy` is not "bfs" or "dfs".
|
|
46
|
+
*/
|
|
47
|
+
export declare function treeOfThoughtsStrategy<TInput, TOutput>(config?: Partial<ToTConfig>): Strategy<TInput, TOutput>;
|
|
48
|
+
//# sourceMappingURL=tree-of-thoughts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree-of-thoughts.d.ts","sourceRoot":"","sources":["../../../src/compute/strategies/tree-of-thoughts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAkB,QAAQ,EAAkB,MAAM,aAAa,CAAC;AAI5E,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,KAAK,CAAC;AAE5C,MAAM,WAAW,SAAS;IACxB,kCAAkC;IAClC,YAAY,EAAE,eAAe,CAAC;IAC9B,0CAA0C;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,4DAA4D;IAC5D,YAAY,EAAE,MAAM,CAAC;IACrB,2EAA2E;IAC3E,QAAQ,EAAE,MAAM,CAAC;IACjB,4EAA4E;IAC5E,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,CAAC;IAC3C,wEAAwE;IACxE,cAAc,EAAE,MAAM,CAAC;CACxB;AAyCD;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,OAAO,EACpD,MAAM,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,GAC1B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAgM3B"}
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* src/compute/strategies/tree-of-thoughts.ts
|
|
3
|
+
*
|
|
4
|
+
* Tree-of-Thoughts (ToT) compute strategy.
|
|
5
|
+
*
|
|
6
|
+
* Reference: Yao et al. 2023, "Tree of Thoughts: Deliberate Problem Solving
|
|
7
|
+
* with Large Language Models", arXiv:2305.10601.
|
|
8
|
+
*
|
|
9
|
+
* Algorithm (paper §3):
|
|
10
|
+
* 1. Build a tree of partial-solution states, root = empty/initial state.
|
|
11
|
+
* 2. Expand each node into up to `branchFactor` children via the generator.
|
|
12
|
+
* 3. Evaluate each state with a lightweight heuristic (no extra LLM call).
|
|
13
|
+
* 4. BFS expands level-by-level; DFS goes depth-first with backtracking
|
|
14
|
+
* when score < pruning threshold.
|
|
15
|
+
* 5. Bound total expansions by `maxCalls` (== generator-call budget).
|
|
16
|
+
* 6. Return the highest-scoring leaf output.
|
|
17
|
+
*
|
|
18
|
+
* Default state-evaluator (no LLM):
|
|
19
|
+
* - string outputs : monotone progress score based on length (caps at 200)
|
|
20
|
+
* - number outputs : closeness to plausible-answer band [0, 100]
|
|
21
|
+
* - other : 0.5 (neutral)
|
|
22
|
+
*
|
|
23
|
+
* @experimental Public-experimental API per `contract-stability.md` (sprint-582).
|
|
24
|
+
*/
|
|
25
|
+
const STRATEGY_NAME = "tree-of-thoughts";
|
|
26
|
+
const VALID_POLICIES = new Set(["bfs", "dfs"]);
|
|
27
|
+
// ─── Default evaluator ───────────────────────────────────────────────────────
|
|
28
|
+
function defaultEvaluator(state) {
|
|
29
|
+
if (typeof state === "string") {
|
|
30
|
+
const len = state.length;
|
|
31
|
+
if (len === 0)
|
|
32
|
+
return 0;
|
|
33
|
+
// Monotone, saturates at 200 chars → 1.0
|
|
34
|
+
return Math.min(1, len / 200);
|
|
35
|
+
}
|
|
36
|
+
if (typeof state === "number" && Number.isFinite(state)) {
|
|
37
|
+
if (state < 0 || state > 200)
|
|
38
|
+
return 0.1;
|
|
39
|
+
// Centered around 50 for plausibility (synthetic-task heuristic)
|
|
40
|
+
return 0.5 + 0.5 * (1 / (1 + Math.abs(state - 50)));
|
|
41
|
+
}
|
|
42
|
+
return 0.5;
|
|
43
|
+
}
|
|
44
|
+
// ─── Helpers ─────────────────────────────────────────────────────────────────
|
|
45
|
+
function throwIfAborted(signal) {
|
|
46
|
+
if (signal?.aborted) {
|
|
47
|
+
throw signal.reason instanceof Error
|
|
48
|
+
? signal.reason
|
|
49
|
+
: new DOMException("Aborted", "AbortError");
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
// ─── Strategy factory ────────────────────────────────────────────────────────
|
|
53
|
+
/**
|
|
54
|
+
* Construct a Tree-of-Thoughts {@link Strategy}.
|
|
55
|
+
*
|
|
56
|
+
* @throws RangeError when `maxDepth`, `branchFactor`, or `maxCalls` is < 1.
|
|
57
|
+
* @throws Error when `searchPolicy` is not "bfs" or "dfs".
|
|
58
|
+
*/
|
|
59
|
+
export function treeOfThoughtsStrategy(config) {
|
|
60
|
+
const searchPolicy = config?.searchPolicy ?? "bfs";
|
|
61
|
+
const maxDepth = config?.maxDepth ?? 3;
|
|
62
|
+
const branchFactor = config?.branchFactor ?? 3;
|
|
63
|
+
const maxCalls = config?.maxCalls ?? maxDepth * branchFactor;
|
|
64
|
+
const pruneThreshold = config?.pruneThreshold ?? 0.2;
|
|
65
|
+
const evaluateState = config?.evaluateState ?? defaultEvaluator;
|
|
66
|
+
if (!Number.isInteger(maxDepth) || maxDepth < 1) {
|
|
67
|
+
throw new RangeError(`treeOfThoughtsStrategy: maxDepth must be >=1, got ${maxDepth}`);
|
|
68
|
+
}
|
|
69
|
+
if (!Number.isInteger(branchFactor) || branchFactor < 1) {
|
|
70
|
+
throw new RangeError(`treeOfThoughtsStrategy: branchFactor must be >=1, got ${branchFactor}`);
|
|
71
|
+
}
|
|
72
|
+
if (!Number.isInteger(maxCalls) || maxCalls < 1) {
|
|
73
|
+
throw new RangeError(`treeOfThoughtsStrategy: maxCalls must be >=1, got ${maxCalls}`);
|
|
74
|
+
}
|
|
75
|
+
if (!VALID_POLICIES.has(searchPolicy)) {
|
|
76
|
+
throw new Error(`treeOfThoughtsStrategy: searchPolicy must be "bfs" or "dfs", got "${searchPolicy}"`);
|
|
77
|
+
}
|
|
78
|
+
const strategyLabel = `${STRATEGY_NAME}-${searchPolicy}`;
|
|
79
|
+
return {
|
|
80
|
+
name: strategyLabel,
|
|
81
|
+
async run(input, generator, ctx = {}) {
|
|
82
|
+
const start = performance.now();
|
|
83
|
+
const signal = ctx.signal;
|
|
84
|
+
throwIfAborted(signal);
|
|
85
|
+
const childCtx = signal ? { signal } : {};
|
|
86
|
+
let callsUsed = 0;
|
|
87
|
+
const allLeaves = [];
|
|
88
|
+
const allScores = [];
|
|
89
|
+
// Helper: expand one parent into up to branchFactor children.
|
|
90
|
+
// Each child = 1 generator call.
|
|
91
|
+
const expandNode = async (_parent, depth) => {
|
|
92
|
+
const childrenToMake = Math.min(branchFactor, maxCalls - callsUsed);
|
|
93
|
+
if (childrenToMake <= 0)
|
|
94
|
+
return [];
|
|
95
|
+
// Parallel sampling at this level.
|
|
96
|
+
throwIfAborted(signal);
|
|
97
|
+
const samples = await Promise.all(Array.from({ length: childrenToMake }, () => generator(input, childCtx)));
|
|
98
|
+
callsUsed += childrenToMake;
|
|
99
|
+
const nodes = samples.map((state) => {
|
|
100
|
+
const score = clamp01(evaluateState(state));
|
|
101
|
+
return { state, depth, score };
|
|
102
|
+
});
|
|
103
|
+
for (const n of nodes)
|
|
104
|
+
allScores.push(n.score);
|
|
105
|
+
// Pruned nodes are still recorded as leaves (score known) but not expanded.
|
|
106
|
+
return nodes;
|
|
107
|
+
};
|
|
108
|
+
if (searchPolicy === "bfs") {
|
|
109
|
+
// ── BFS ───────────────────────────────────────────────────────────
|
|
110
|
+
let frontier = [];
|
|
111
|
+
// Depth-1 children from root.
|
|
112
|
+
const initial = await expandNode(null, 1);
|
|
113
|
+
frontier = initial;
|
|
114
|
+
// Leaves at maxDepth or pruned go into allLeaves.
|
|
115
|
+
for (const n of initial) {
|
|
116
|
+
if (n.depth >= maxDepth || n.score < pruneThreshold) {
|
|
117
|
+
allLeaves.push(n);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
while (frontier.length > 0 && callsUsed < maxCalls) {
|
|
121
|
+
// Filter out pruned/leaf nodes — only expand survivors.
|
|
122
|
+
const survivors = frontier.filter((n) => n.score >= pruneThreshold && n.depth < maxDepth);
|
|
123
|
+
if (survivors.length === 0)
|
|
124
|
+
break;
|
|
125
|
+
const nextFrontier = [];
|
|
126
|
+
for (const parent of survivors) {
|
|
127
|
+
if (callsUsed >= maxCalls)
|
|
128
|
+
break;
|
|
129
|
+
const children = await expandNode(parent, parent.depth + 1);
|
|
130
|
+
for (const c of children) {
|
|
131
|
+
if (c.depth >= maxDepth || c.score < pruneThreshold) {
|
|
132
|
+
allLeaves.push(c);
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
nextFrontier.push(c);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
// If BFS terminates with un-expanded frontier (budget hit), those are leaves too.
|
|
140
|
+
if (callsUsed >= maxCalls) {
|
|
141
|
+
for (const n of nextFrontier)
|
|
142
|
+
allLeaves.push(n);
|
|
143
|
+
break;
|
|
144
|
+
}
|
|
145
|
+
frontier = nextFrontier;
|
|
146
|
+
}
|
|
147
|
+
// Any remaining frontier nodes at end-of-budget = leaves.
|
|
148
|
+
for (const n of frontier) {
|
|
149
|
+
if (!allLeaves.includes(n))
|
|
150
|
+
allLeaves.push(n);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
// ── DFS with backtracking ─────────────────────────────────────────
|
|
155
|
+
const stack = [];
|
|
156
|
+
const initial = await expandNode(null, 1);
|
|
157
|
+
// Push so highest score is explored first.
|
|
158
|
+
const sortedInitial = [...initial].sort((a, b) => b.score - a.score);
|
|
159
|
+
stack.push(...sortedInitial.reverse()); // reverse so highest pops first
|
|
160
|
+
for (const n of initial) {
|
|
161
|
+
if (n.depth >= maxDepth || n.score < pruneThreshold) {
|
|
162
|
+
allLeaves.push(n);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
while (stack.length > 0 && callsUsed < maxCalls) {
|
|
166
|
+
const node = stack.pop();
|
|
167
|
+
if (!node)
|
|
168
|
+
break;
|
|
169
|
+
// Backtrack if pruned or terminal.
|
|
170
|
+
if (node.score < pruneThreshold || node.depth >= maxDepth) {
|
|
171
|
+
// Already recorded as leaf above (or will be).
|
|
172
|
+
if (!allLeaves.includes(node))
|
|
173
|
+
allLeaves.push(node);
|
|
174
|
+
continue;
|
|
175
|
+
}
|
|
176
|
+
// Expand survivor.
|
|
177
|
+
const children = await expandNode(node, node.depth + 1);
|
|
178
|
+
const sortedChildren = [...children].sort((a, b) => b.score - a.score);
|
|
179
|
+
for (const c of sortedChildren.reverse()) {
|
|
180
|
+
if (c.depth >= maxDepth || c.score < pruneThreshold) {
|
|
181
|
+
allLeaves.push(c);
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
stack.push(c);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
// Any unexplored stack nodes = leaves (budget-bound).
|
|
189
|
+
for (const n of stack) {
|
|
190
|
+
if (!allLeaves.includes(n))
|
|
191
|
+
allLeaves.push(n);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
// ── Pick highest-scoring leaf ─────────────────────────────────────
|
|
195
|
+
if (allLeaves.length === 0) {
|
|
196
|
+
// Should never happen: root expansion always produces ≥1 leaf
|
|
197
|
+
// unless maxCalls=0 (which we reject). Defensive fallback.
|
|
198
|
+
const fallback = await generator(input, childCtx);
|
|
199
|
+
callsUsed++;
|
|
200
|
+
allScores.push(clamp01(evaluateState(fallback)));
|
|
201
|
+
const latency_ms = performance.now() - start;
|
|
202
|
+
return {
|
|
203
|
+
result: fallback,
|
|
204
|
+
metadata: {
|
|
205
|
+
strategy: strategyLabel,
|
|
206
|
+
candidates: 1,
|
|
207
|
+
verifier_scores: allScores,
|
|
208
|
+
cost: { calls: callsUsed },
|
|
209
|
+
latency_ms,
|
|
210
|
+
},
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
let best = allLeaves[0];
|
|
214
|
+
for (let i = 1; i < allLeaves.length; i++) {
|
|
215
|
+
const n = allLeaves[i];
|
|
216
|
+
if (n.score > best.score)
|
|
217
|
+
best = n;
|
|
218
|
+
}
|
|
219
|
+
const latency_ms = performance.now() - start;
|
|
220
|
+
return {
|
|
221
|
+
result: best.state,
|
|
222
|
+
metadata: {
|
|
223
|
+
strategy: strategyLabel,
|
|
224
|
+
candidates: callsUsed,
|
|
225
|
+
verifier_scores: allScores,
|
|
226
|
+
cost: { calls: callsUsed },
|
|
227
|
+
latency_ms,
|
|
228
|
+
},
|
|
229
|
+
};
|
|
230
|
+
},
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
function clamp01(x) {
|
|
234
|
+
if (!Number.isFinite(x))
|
|
235
|
+
return 0;
|
|
236
|
+
if (x < 0)
|
|
237
|
+
return 0;
|
|
238
|
+
if (x > 1)
|
|
239
|
+
return 1;
|
|
240
|
+
return x;
|
|
241
|
+
}
|
|
242
|
+
//# sourceMappingURL=tree-of-thoughts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree-of-thoughts.js","sourceRoot":"","sources":["../../../src/compute/strategies/tree-of-thoughts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* src/compute/strategies/two-phase-orient.ts
|
|
3
|
+
*
|
|
4
|
+
* Two-Phase Orient pattern.
|
|
5
|
+
*
|
|
6
|
+
* Phase 1 — Orient: read-only context gathering, produces an orientation state.
|
|
7
|
+
* Phase 2 — Act: state-mutating execution driven by the orientation.
|
|
8
|
+
*
|
|
9
|
+
* The separation enforces a hard OODA discipline:
|
|
10
|
+
* - Phase 1 has no side effects; it may be retried cheaply on failure.
|
|
11
|
+
* - Phase 2 consumes the orientation and may be retried up to `maxActRetries`.
|
|
12
|
+
*
|
|
13
|
+
* Error semantics:
|
|
14
|
+
* - `TwoPhaseOrientError` (phase: "orient") — Phase 1 threw; Phase 2 is never reached.
|
|
15
|
+
* - `TwoPhaseOrientError` (phase: "act") — Phase 2 exhausted all retries.
|
|
16
|
+
* - Each Phase 2 retry attempt is tracked in `retriesUsed` (0 = first attempt succeeded).
|
|
17
|
+
*/
|
|
18
|
+
export declare class TwoPhaseOrientError extends Error {
|
|
19
|
+
readonly phase: "orient" | "act";
|
|
20
|
+
readonly cause: unknown;
|
|
21
|
+
readonly retriesUsed: number;
|
|
22
|
+
constructor(phase: "orient" | "act", cause: unknown, retriesUsed: number, message: string);
|
|
23
|
+
}
|
|
24
|
+
export interface TwoPhaseOrientConfig<C, O, R> {
|
|
25
|
+
/**
|
|
26
|
+
* Phase 1: orientation (read-only, observe + analyse).
|
|
27
|
+
* Receives the raw context and returns an orientation state.
|
|
28
|
+
* Must not produce observable side effects.
|
|
29
|
+
*/
|
|
30
|
+
orient: (context: C) => Promise<O>;
|
|
31
|
+
/**
|
|
32
|
+
* Phase 2: act on the orientation.
|
|
33
|
+
* Receives both the orientation produced by Phase 1 and the original context.
|
|
34
|
+
* Returns the final result.
|
|
35
|
+
*/
|
|
36
|
+
act: (orientation: O, context: C) => Promise<R>;
|
|
37
|
+
/**
|
|
38
|
+
* Maximum number of times Phase 2 may be retried after a recoverable failure.
|
|
39
|
+
* `maxActRetries = 1` means one initial attempt + one retry = 2 total attempts.
|
|
40
|
+
* Default: 1.
|
|
41
|
+
* Must be a non-negative integer; values < 0 are treated as 0.
|
|
42
|
+
*/
|
|
43
|
+
maxActRetries?: number;
|
|
44
|
+
}
|
|
45
|
+
export interface TwoPhaseOrientResult<O, R> {
|
|
46
|
+
orientation: O;
|
|
47
|
+
result: R;
|
|
48
|
+
/** Number of Phase-2 retries consumed (0 = succeeded on first attempt). */
|
|
49
|
+
retriesUsed: number;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Executes the Two-Phase Orient pattern.
|
|
53
|
+
*
|
|
54
|
+
* @param config Wiring for both phases + optional retry cap.
|
|
55
|
+
* @param context Opaque context forwarded to both `orient` and `act`.
|
|
56
|
+
*
|
|
57
|
+
* @throws {TwoPhaseOrientError} When Phase 1 throws (phase: "orient") or
|
|
58
|
+
* Phase 2 exhausts all retries (phase: "act").
|
|
59
|
+
*
|
|
60
|
+
* @example
|
|
61
|
+
* ```ts
|
|
62
|
+
* const { orientation, result, retriesUsed } = await runTwoPhaseOrient(
|
|
63
|
+
* {
|
|
64
|
+
* orient: async (ctx) => await gatherSignals(ctx),
|
|
65
|
+
* act: async (orient, ctx) => await executeDecision(orient, ctx),
|
|
66
|
+
* },
|
|
67
|
+
* requestContext,
|
|
68
|
+
* );
|
|
69
|
+
* ```
|
|
70
|
+
*/
|
|
71
|
+
export declare function runTwoPhaseOrient<C, O, R>(config: TwoPhaseOrientConfig<C, O, R>, context: C): Promise<TwoPhaseOrientResult<O, R>>;
|
|
72
|
+
//# sourceMappingURL=two-phase-orient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"two-phase-orient.d.ts","sourceRoot":"","sources":["../../../src/compute/strategies/two-phase-orient.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAMH,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,KAAK,CAAC;IACjC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;gBAG3B,KAAK,EAAE,QAAQ,GAAG,KAAK,EACvB,KAAK,EAAE,OAAO,EACd,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM;CAUlB;AAMD,MAAM,WAAW,oBAAoB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IAC3C;;;;OAIG;IACH,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAEnC;;;;OAIG;IACH,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAEhD;;;;;OAKG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB,CAAC,CAAC,EAAE,CAAC;IACxC,WAAW,EAAE,CAAC,CAAC;IACf,MAAM,EAAE,CAAC,CAAC;IACV,2EAA2E;IAC3E,WAAW,EAAE,MAAM,CAAC;CACrB;AAMD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,iBAAiB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAC7C,MAAM,EAAE,oBAAoB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACrC,OAAO,EAAE,CAAC,GACT,OAAO,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAyCrC"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* src/compute/strategies/two-phase-orient.ts
|
|
3
|
+
*
|
|
4
|
+
* Two-Phase Orient pattern.
|
|
5
|
+
*
|
|
6
|
+
* Phase 1 — Orient: read-only context gathering, produces an orientation state.
|
|
7
|
+
* Phase 2 — Act: state-mutating execution driven by the orientation.
|
|
8
|
+
*
|
|
9
|
+
* The separation enforces a hard OODA discipline:
|
|
10
|
+
* - Phase 1 has no side effects; it may be retried cheaply on failure.
|
|
11
|
+
* - Phase 2 consumes the orientation and may be retried up to `maxActRetries`.
|
|
12
|
+
*
|
|
13
|
+
* Error semantics:
|
|
14
|
+
* - `TwoPhaseOrientError` (phase: "orient") — Phase 1 threw; Phase 2 is never reached.
|
|
15
|
+
* - `TwoPhaseOrientError` (phase: "act") — Phase 2 exhausted all retries.
|
|
16
|
+
* - Each Phase 2 retry attempt is tracked in `retriesUsed` (0 = first attempt succeeded).
|
|
17
|
+
*/
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
// Error
|
|
20
|
+
// ---------------------------------------------------------------------------
|
|
21
|
+
export class TwoPhaseOrientError extends Error {
|
|
22
|
+
phase;
|
|
23
|
+
cause;
|
|
24
|
+
retriesUsed;
|
|
25
|
+
constructor(phase, cause, retriesUsed, message) {
|
|
26
|
+
super(message);
|
|
27
|
+
this.name = "TwoPhaseOrientError";
|
|
28
|
+
this.phase = phase;
|
|
29
|
+
this.cause = cause;
|
|
30
|
+
this.retriesUsed = retriesUsed;
|
|
31
|
+
// Restore prototype chain (tsc targets < ES2022)
|
|
32
|
+
Object.setPrototypeOf(this, TwoPhaseOrientError.prototype);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
// ---------------------------------------------------------------------------
|
|
36
|
+
// Implementation
|
|
37
|
+
// ---------------------------------------------------------------------------
|
|
38
|
+
/**
|
|
39
|
+
* Executes the Two-Phase Orient pattern.
|
|
40
|
+
*
|
|
41
|
+
* @param config Wiring for both phases + optional retry cap.
|
|
42
|
+
* @param context Opaque context forwarded to both `orient` and `act`.
|
|
43
|
+
*
|
|
44
|
+
* @throws {TwoPhaseOrientError} When Phase 1 throws (phase: "orient") or
|
|
45
|
+
* Phase 2 exhausts all retries (phase: "act").
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* ```ts
|
|
49
|
+
* const { orientation, result, retriesUsed } = await runTwoPhaseOrient(
|
|
50
|
+
* {
|
|
51
|
+
* orient: async (ctx) => await gatherSignals(ctx),
|
|
52
|
+
* act: async (orient, ctx) => await executeDecision(orient, ctx),
|
|
53
|
+
* },
|
|
54
|
+
* requestContext,
|
|
55
|
+
* );
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
58
|
+
export async function runTwoPhaseOrient(config, context) {
|
|
59
|
+
const maxRetries = Math.max(0, Math.floor(config.maxActRetries ?? 1));
|
|
60
|
+
// ── Phase 1: Orient ───────────────────────────────────────────────────────
|
|
61
|
+
let orientation;
|
|
62
|
+
try {
|
|
63
|
+
orientation = await config.orient(context);
|
|
64
|
+
}
|
|
65
|
+
catch (err) {
|
|
66
|
+
throw new TwoPhaseOrientError("orient", err, 0, `TwoPhaseOrient Phase 1 (orient) failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
67
|
+
}
|
|
68
|
+
// ── Phase 2: Act (with retries) ───────────────────────────────────────────
|
|
69
|
+
let lastActError;
|
|
70
|
+
for (let attempt = 0; attempt <= maxRetries; attempt++) {
|
|
71
|
+
try {
|
|
72
|
+
const result = await config.act(orientation, context);
|
|
73
|
+
return { orientation, result, retriesUsed: attempt };
|
|
74
|
+
}
|
|
75
|
+
catch (err) {
|
|
76
|
+
lastActError = err;
|
|
77
|
+
// Continue to next attempt if retries remain.
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
// All attempts exhausted.
|
|
81
|
+
throw new TwoPhaseOrientError("act", lastActError, maxRetries, `TwoPhaseOrient Phase 2 (act) failed after ${maxRetries + 1} attempt(s): ${lastActError instanceof Error
|
|
82
|
+
? lastActError.message
|
|
83
|
+
: String(lastActError)}`);
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=two-phase-orient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"two-phase-orient.js","sourceRoot":"","sources":["../../../src/compute/strategies/two-phase-orient.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,8EAA8E;AAC9E,QAAQ;AACR,8EAA8E;AAE9E,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IACnC,KAAK,CAAmB;IACxB,KAAK,CAAU;IACf,WAAW,CAAS;IAE7B,YACE,KAAuB,EACvB,KAAc,EACd,WAAmB,EACnB,OAAe;QAEf,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;QAClC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,iDAAiD;QACjD,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,mBAAmB,CAAC,SAAS,CAAC,CAAC;IAC7D,CAAC;CACF;AAqCD,8EAA8E;AAC9E,iBAAiB;AACjB,8EAA8E;AAE9E;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,MAAqC,EACrC,OAAU;IAEV,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,IAAI,CAAC,CAAC,CAAC,CAAC;IAEtE,6EAA6E;IAC7E,IAAI,WAAc,CAAC;IACnB,IAAI,CAAC;QACH,WAAW,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,mBAAmB,CAC3B,QAAQ,EACR,GAAG,EACH,CAAC,EACD,2CACE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CACjD,EAAE,CACH,CAAC;IACJ,CAAC;IAED,6EAA6E;IAC7E,IAAI,YAAqB,CAAC;IAC1B,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC;QACvD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YACtD,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;QACvD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,YAAY,GAAG,GAAG,CAAC;YACnB,8CAA8C;QAChD,CAAC;IACH,CAAC;IAED,0BAA0B;IAC1B,MAAM,IAAI,mBAAmB,CAC3B,KAAK,EACL,YAAY,EACZ,UAAU,EACV,6CAA6C,UAAU,GAAG,CAAC,gBACzD,YAAY,YAAY,KAAK;QAC3B,CAAC,CAAC,YAAY,CAAC,OAAO;QACtB,CAAC,CAAC,MAAM,CAAC,YAAY,CACzB,EAAE,CACH,CAAC;AACJ,CAAC"}
|
|
@@ -147,30 +147,30 @@ export declare const cycleSnapshotSchema: z.ZodObject<{
|
|
|
147
147
|
costUsd: z.ZodOptional<z.ZodNumber>;
|
|
148
148
|
}, "strip", z.ZodTypeAny, {
|
|
149
149
|
type: string;
|
|
150
|
-
index: number;
|
|
151
150
|
phase: string;
|
|
151
|
+
index: number;
|
|
152
152
|
model?: {
|
|
153
153
|
provider: string;
|
|
154
154
|
name: string;
|
|
155
155
|
version: string;
|
|
156
156
|
} | undefined;
|
|
157
|
+
costUsd?: number | undefined;
|
|
157
158
|
output?: unknown;
|
|
158
159
|
storedInput?: unknown;
|
|
159
160
|
toolName?: string | undefined;
|
|
160
|
-
costUsd?: number | undefined;
|
|
161
161
|
}, {
|
|
162
162
|
type: string;
|
|
163
|
-
index: number;
|
|
164
163
|
phase: string;
|
|
164
|
+
index: number;
|
|
165
165
|
model?: {
|
|
166
166
|
provider: string;
|
|
167
167
|
name: string;
|
|
168
168
|
version: string;
|
|
169
169
|
} | undefined;
|
|
170
|
+
costUsd?: number | undefined;
|
|
170
171
|
output?: unknown;
|
|
171
172
|
storedInput?: unknown;
|
|
172
173
|
toolName?: string | undefined;
|
|
173
|
-
costUsd?: number | undefined;
|
|
174
174
|
}>, "many">;
|
|
175
175
|
budgetUsdMax: z.ZodNumber;
|
|
176
176
|
budgetUsdSpent: z.ZodNumber;
|
|
@@ -221,23 +221,23 @@ export declare const cycleSnapshotSchema: z.ZodObject<{
|
|
|
221
221
|
rootHash: z.ZodString;
|
|
222
222
|
}, "strict", z.ZodTypeAny, {
|
|
223
223
|
runId: string;
|
|
224
|
+
rootHash: string;
|
|
224
225
|
steps: {
|
|
225
226
|
type: string;
|
|
226
|
-
index: number;
|
|
227
227
|
phase: string;
|
|
228
|
+
index: number;
|
|
228
229
|
model?: {
|
|
229
230
|
provider: string;
|
|
230
231
|
name: string;
|
|
231
232
|
version: string;
|
|
232
233
|
} | undefined;
|
|
234
|
+
costUsd?: number | undefined;
|
|
233
235
|
output?: unknown;
|
|
234
236
|
storedInput?: unknown;
|
|
235
237
|
toolName?: string | undefined;
|
|
236
|
-
costUsd?: number | undefined;
|
|
237
238
|
}[];
|
|
238
239
|
budgetUsdMax: number;
|
|
239
240
|
budgetUsdSpent: number;
|
|
240
|
-
rootHash: string;
|
|
241
241
|
metadata?: z.objectOutputType<{
|
|
242
242
|
rso_veto: z.ZodOptional<z.ZodBoolean>;
|
|
243
243
|
hash_primitive: z.ZodOptional<z.ZodString>;
|
|
@@ -257,23 +257,23 @@ export declare const cycleSnapshotSchema: z.ZodObject<{
|
|
|
257
257
|
scope_id?: string | undefined;
|
|
258
258
|
}, {
|
|
259
259
|
runId: string;
|
|
260
|
+
rootHash: string;
|
|
260
261
|
steps: {
|
|
261
262
|
type: string;
|
|
262
|
-
index: number;
|
|
263
263
|
phase: string;
|
|
264
|
+
index: number;
|
|
264
265
|
model?: {
|
|
265
266
|
provider: string;
|
|
266
267
|
name: string;
|
|
267
268
|
version: string;
|
|
268
269
|
} | undefined;
|
|
270
|
+
costUsd?: number | undefined;
|
|
269
271
|
output?: unknown;
|
|
270
272
|
storedInput?: unknown;
|
|
271
273
|
toolName?: string | undefined;
|
|
272
|
-
costUsd?: number | undefined;
|
|
273
274
|
}[];
|
|
274
275
|
budgetUsdMax: number;
|
|
275
276
|
budgetUsdSpent: number;
|
|
276
|
-
rootHash: string;
|
|
277
277
|
metadata?: z.objectInputType<{
|
|
278
278
|
rso_veto: z.ZodOptional<z.ZodBoolean>;
|
|
279
279
|
hash_primitive: z.ZodOptional<z.ZodString>;
|