@vauban-org/agent-sdk 0.17.4 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CONTRACT.md +6401 -813
- package/dist/adapters/llm/anthropic-direct.d.ts +1 -0
- package/dist/adapters/llm/anthropic-direct.d.ts.map +1 -1
- package/dist/adapters/llm/anthropic-direct.js +43 -0
- package/dist/adapters/llm/anthropic-direct.js.map +1 -1
- package/dist/adapters/llm/cascade.d.ts.map +1 -1
- package/dist/adapters/llm/cascade.js +57 -14
- package/dist/adapters/llm/cascade.js.map +1 -1
- package/dist/adapters/llm/litellm.d.ts +2 -0
- package/dist/adapters/llm/litellm.d.ts.map +1 -1
- package/dist/adapters/llm/litellm.js +44 -0
- package/dist/adapters/llm/litellm.js.map +1 -1
- package/dist/compute/difficulty-estimator.d.ts +53 -0
- package/dist/compute/difficulty-estimator.d.ts.map +1 -0
- package/dist/compute/difficulty-estimator.js +82 -0
- package/dist/compute/difficulty-estimator.js.map +1 -0
- package/dist/compute/strategies/mixture-of-agents.d.ts +40 -0
- package/dist/compute/strategies/mixture-of-agents.d.ts.map +1 -0
- package/dist/compute/strategies/mixture-of-agents.js +110 -0
- package/dist/compute/strategies/mixture-of-agents.js.map +1 -0
- package/dist/compute/strategies/tree-of-thoughts.d.ts +48 -0
- package/dist/compute/strategies/tree-of-thoughts.d.ts.map +1 -0
- package/dist/compute/strategies/tree-of-thoughts.js +242 -0
- package/dist/compute/strategies/tree-of-thoughts.js.map +1 -0
- package/dist/compute/strategies/two-phase-orient.d.ts +72 -0
- package/dist/compute/strategies/two-phase-orient.d.ts.map +1 -0
- package/dist/compute/strategies/two-phase-orient.js +85 -0
- package/dist/compute/strategies/two-phase-orient.js.map +1 -0
- package/dist/constitution/types.d.ts +10 -10
- package/dist/container/protocol.d.ts +134 -0
- package/dist/container/protocol.d.ts.map +1 -0
- package/dist/container/protocol.js +157 -0
- package/dist/container/protocol.js.map +1 -0
- package/dist/container/runtime.d.ts +140 -0
- package/dist/container/runtime.d.ts.map +1 -0
- package/dist/container/runtime.js +256 -0
- package/dist/container/runtime.js.map +1 -0
- package/dist/events/catalogue.d.ts +327 -30
- package/dist/events/catalogue.d.ts.map +1 -1
- package/dist/events/catalogue.js +18 -0
- package/dist/events/catalogue.js.map +1 -1
- package/dist/events/index.d.ts +9 -0
- package/dist/events/index.d.ts.map +1 -1
- package/dist/events/index.js +9 -0
- package/dist/events/index.js.map +1 -1
- package/dist/events/schemas/agent.completed.v1.d.ts +4 -4
- package/dist/events/schemas/agent.failed.v1.d.ts +2 -2
- package/dist/events/schemas/agent.hitl_resolved.v1.d.ts +2 -2
- package/dist/events/schemas/agent.started.v1.d.ts +2 -2
- package/dist/events/schemas/brain.skill.extracted.v1.d.ts +4 -4
- package/dist/events/schemas/cc.cost.anomaly_detected.v1.d.ts +2 -2
- package/dist/events/schemas/cc.cost.recorded.v1.d.ts +4 -4
- package/dist/events/schemas/citadel.sprint.analyzed.v1.d.ts +55 -0
- package/dist/events/schemas/citadel.sprint.analyzed.v1.d.ts.map +1 -0
- package/dist/events/schemas/citadel.sprint.analyzed.v1.js +22 -0
- package/dist/events/schemas/citadel.sprint.analyzed.v1.js.map +1 -0
- package/dist/events/schemas/citadel.sprint.closed.v1.d.ts +2 -2
- package/dist/events/schemas/forge.inbox.reply_classified.v1.d.ts +33 -0
- package/dist/events/schemas/forge.inbox.reply_classified.v1.d.ts.map +1 -0
- package/dist/events/schemas/forge.inbox.reply_classified.v1.js +15 -0
- package/dist/events/schemas/forge.inbox.reply_classified.v1.js.map +1 -0
- package/dist/events/schemas/forge.lead.qualified.v1.d.ts +2 -2
- package/dist/events/schemas/forge.outreach.sent.v1.d.ts +4 -4
- package/dist/events/schemas/incident.detected.v1.d.ts +2 -2
- package/dist/events/schemas/vauban-finance.forecast.generated.v1.d.ts +21 -0
- package/dist/events/schemas/vauban-finance.forecast.generated.v1.d.ts.map +1 -0
- package/dist/events/schemas/vauban-finance.forecast.generated.v1.js +11 -0
- package/dist/events/schemas/vauban-finance.forecast.generated.v1.js.map +1 -0
- package/dist/events/schemas/vauban-finance.trade.executed.v1.d.ts +24 -0
- package/dist/events/schemas/vauban-finance.trade.executed.v1.d.ts.map +1 -0
- package/dist/events/schemas/vauban-finance.trade.executed.v1.js +12 -0
- package/dist/events/schemas/vauban-finance.trade.executed.v1.js.map +1 -0
- package/dist/events/schemas/vauban.goal.checked.v1.d.ts +21 -0
- package/dist/events/schemas/vauban.goal.checked.v1.d.ts.map +1 -0
- package/dist/events/schemas/vauban.goal.checked.v1.js +11 -0
- package/dist/events/schemas/vauban.goal.checked.v1.js.map +1 -0
- package/dist/events/schemas/vauban.rebalancing.checked.v1.d.ts +21 -0
- package/dist/events/schemas/vauban.rebalancing.checked.v1.d.ts.map +1 -0
- package/dist/events/schemas/vauban.rebalancing.checked.v1.js +11 -0
- package/dist/events/schemas/vauban.rebalancing.checked.v1.js.map +1 -0
- package/dist/events/schemas/vauban.tax.checked.v1.d.ts +21 -0
- package/dist/events/schemas/vauban.tax.checked.v1.d.ts.map +1 -0
- package/dist/events/schemas/vauban.tax.checked.v1.js +11 -0
- package/dist/events/schemas/vauban.tax.checked.v1.js.map +1 -0
- package/dist/events/schemas/vauban.vault.analyzed.v1.d.ts +59 -0
- package/dist/events/schemas/vauban.vault.analyzed.v1.d.ts.map +1 -0
- package/dist/events/schemas/vauban.vault.analyzed.v1.js +19 -0
- package/dist/events/schemas/vauban.vault.analyzed.v1.js.map +1 -0
- package/dist/events/schemas/vauban.vault.compounded.v1.d.ts +24 -0
- package/dist/events/schemas/vauban.vault.compounded.v1.d.ts.map +1 -0
- package/dist/events/schemas/vauban.vault.compounded.v1.js +12 -0
- package/dist/events/schemas/vauban.vault.compounded.v1.js.map +1 -0
- package/dist/identity/agent-persona.d.ts +73 -0
- package/dist/identity/agent-persona.d.ts.map +1 -0
- package/dist/identity/agent-persona.js +165 -0
- package/dist/identity/agent-persona.js.map +1 -0
- package/dist/identity/persona-prompt.d.ts +25 -0
- package/dist/identity/persona-prompt.d.ts.map +1 -0
- package/dist/identity/persona-prompt.js +71 -0
- package/dist/identity/persona-prompt.js.map +1 -0
- package/dist/identity/persona-schema.d.ts +120 -0
- package/dist/identity/persona-schema.d.ts.map +1 -0
- package/dist/identity/persona-schema.js +103 -0
- package/dist/identity/persona-schema.js.map +1 -0
- package/dist/index.d.ts +37 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +29 -1
- package/dist/index.js.map +1 -1
- package/dist/loop/index.d.ts +1 -1
- package/dist/loop/index.d.ts.map +1 -1
- package/dist/loop/index.js.map +1 -1
- package/dist/loop/minimal-loop.js +293 -287
- package/dist/loop/sdk-loop.d.ts +1 -3
- package/dist/loop/sdk-loop.d.ts.map +1 -1
- package/dist/loop/sdk-loop.js +1 -1
- package/dist/loop/sdk-loop.js.map +1 -1
- package/dist/memory/episodic-rrf.d.ts +114 -0
- package/dist/memory/episodic-rrf.d.ts.map +1 -0
- package/dist/memory/episodic-rrf.js +148 -0
- package/dist/memory/episodic-rrf.js.map +1 -0
- package/dist/mesh/attenuation.d.ts +78 -0
- package/dist/mesh/attenuation.d.ts.map +1 -0
- package/dist/mesh/attenuation.js +141 -0
- package/dist/mesh/attenuation.js.map +1 -0
- package/dist/mesh/delegate.d.ts +96 -0
- package/dist/mesh/delegate.d.ts.map +1 -0
- package/dist/mesh/delegate.js +172 -0
- package/dist/mesh/delegate.js.map +1 -0
- package/dist/mesh/dispatcher.d.ts +119 -0
- package/dist/mesh/dispatcher.d.ts.map +1 -0
- package/dist/mesh/dispatcher.js +207 -0
- package/dist/mesh/dispatcher.js.map +1 -0
- package/dist/mesh/index.d.ts +12 -0
- package/dist/mesh/index.d.ts.map +1 -0
- package/dist/mesh/index.js +11 -0
- package/dist/mesh/index.js.map +1 -0
- package/dist/mesh/types.d.ts +30 -0
- package/dist/mesh/types.d.ts.map +1 -0
- package/dist/mesh/types.js +11 -0
- package/dist/mesh/types.js.map +1 -0
- package/dist/orchestration/ooda/skills.d.ts +104 -0
- package/dist/orchestration/ooda/skills.d.ts.map +1 -1
- package/dist/orchestration/ooda/skills.js +106 -0
- package/dist/orchestration/ooda/skills.js.map +1 -1
- package/dist/orchestration/ooda/types.d.ts +3 -8
- package/dist/orchestration/ooda/types.d.ts.map +1 -1
- package/dist/ports/bastion-action.contract.test.d.ts +11 -0
- package/dist/ports/bastion-action.contract.test.d.ts.map +1 -0
- package/dist/ports/bastion-action.contract.test.js +238 -0
- package/dist/ports/bastion-action.contract.test.js.map +1 -0
- package/dist/ports/bastion-action.d.ts +133 -0
- package/dist/ports/bastion-action.d.ts.map +1 -0
- package/dist/ports/bastion-action.js +73 -0
- package/dist/ports/bastion-action.js.map +1 -0
- package/dist/ports/brain.d.ts +31 -0
- package/dist/ports/brain.d.ts.map +1 -1
- package/dist/ports/brain.js +115 -1
- package/dist/ports/brain.js.map +1 -1
- package/dist/ports/citadel-action.contract.test.d.ts +11 -0
- package/dist/ports/citadel-action.contract.test.d.ts.map +1 -0
- package/dist/ports/citadel-action.contract.test.js +317 -0
- package/dist/ports/citadel-action.contract.test.js.map +1 -0
- package/dist/ports/citadel-action.d.ts +111 -0
- package/dist/ports/citadel-action.d.ts.map +1 -0
- package/dist/ports/citadel-action.js +62 -0
- package/dist/ports/citadel-action.js.map +1 -0
- package/dist/ports/compliance-contract.d.ts +123 -0
- package/dist/ports/compliance-contract.d.ts.map +1 -0
- package/dist/ports/compliance-contract.js +35 -0
- package/dist/ports/compliance-contract.js.map +1 -0
- package/dist/ports/db.d.ts +38 -0
- package/dist/ports/db.d.ts.map +1 -1
- package/dist/ports/db.js +88 -1
- package/dist/ports/db.js.map +1 -1
- package/dist/ports/delegation.contract.test.d.ts +9 -0
- package/dist/ports/delegation.contract.test.d.ts.map +1 -0
- package/dist/ports/delegation.contract.test.js +337 -0
- package/dist/ports/delegation.contract.test.js.map +1 -0
- package/dist/ports/delegation.d.ts +134 -0
- package/dist/ports/delegation.d.ts.map +1 -0
- package/dist/ports/delegation.js +105 -0
- package/dist/ports/delegation.js.map +1 -0
- package/dist/ports/event-bus.d.ts +29 -13
- package/dist/ports/event-bus.d.ts.map +1 -1
- package/dist/ports/event-bus.js +106 -1
- package/dist/ports/event-bus.js.map +1 -1
- package/dist/ports/federation.contract.test.d.ts +9 -0
- package/dist/ports/federation.contract.test.d.ts.map +1 -0
- package/dist/ports/federation.contract.test.js +279 -0
- package/dist/ports/federation.contract.test.js.map +1 -0
- package/dist/ports/federation.d.ts +140 -0
- package/dist/ports/federation.d.ts.map +1 -0
- package/dist/ports/federation.js +57 -0
- package/dist/ports/federation.js.map +1 -0
- package/dist/ports/index.d.ts +28 -2
- package/dist/ports/index.d.ts.map +1 -1
- package/dist/ports/index.js +17 -2
- package/dist/ports/index.js.map +1 -1
- package/dist/ports/llm-provider.d.ts +37 -0
- package/dist/ports/llm-provider.d.ts.map +1 -1
- package/dist/ports/llm-provider.js +99 -1
- package/dist/ports/llm-provider.js.map +1 -1
- package/dist/ports/logger.d.ts +27 -0
- package/dist/ports/logger.d.ts.map +1 -1
- package/dist/ports/logger.js +87 -0
- package/dist/ports/logger.js.map +1 -1
- package/dist/ports/manifest-registry.contract.test.d.ts +9 -0
- package/dist/ports/manifest-registry.contract.test.d.ts.map +1 -0
- package/dist/ports/manifest-registry.contract.test.js +246 -0
- package/dist/ports/manifest-registry.contract.test.js.map +1 -0
- package/dist/ports/manifest-registry.d.ts +116 -0
- package/dist/ports/manifest-registry.d.ts.map +1 -0
- package/dist/ports/manifest-registry.js +79 -0
- package/dist/ports/manifest-registry.js.map +1 -0
- package/dist/ports/observability.contract.test.d.ts +12 -0
- package/dist/ports/observability.contract.test.d.ts.map +1 -0
- package/dist/ports/observability.contract.test.js +260 -0
- package/dist/ports/observability.contract.test.js.map +1 -0
- package/dist/ports/observability.d.ts +98 -0
- package/dist/ports/observability.d.ts.map +1 -0
- package/dist/ports/observability.js +59 -0
- package/dist/ports/observability.js.map +1 -0
- package/dist/ports/outcome.d.ts +26 -0
- package/dist/ports/outcome.d.ts.map +1 -1
- package/dist/ports/outcome.js +62 -1
- package/dist/ports/outcome.js.map +1 -1
- package/dist/ports/privacy.contract.test.d.ts +12 -0
- package/dist/ports/privacy.contract.test.d.ts.map +1 -0
- package/dist/ports/privacy.contract.test.js +325 -0
- package/dist/ports/privacy.contract.test.js.map +1 -0
- package/dist/ports/privacy.d.ts +132 -0
- package/dist/ports/privacy.d.ts.map +1 -0
- package/dist/ports/privacy.js +83 -0
- package/dist/ports/privacy.js.map +1 -0
- package/dist/ports/tenant-context.contract.test.d.ts +14 -0
- package/dist/ports/tenant-context.contract.test.d.ts.map +1 -0
- package/dist/ports/tenant-context.contract.test.js +352 -0
- package/dist/ports/tenant-context.contract.test.js.map +1 -0
- package/dist/ports/tenant-context.d.ts +103 -0
- package/dist/ports/tenant-context.d.ts.map +1 -0
- package/dist/ports/tenant-context.js +48 -0
- package/dist/ports/tenant-context.js.map +1 -0
- package/dist/ports/vauban-finance-action.contract.test.d.ts +11 -0
- package/dist/ports/vauban-finance-action.contract.test.d.ts.map +1 -0
- package/dist/ports/vauban-finance-action.contract.test.js +260 -0
- package/dist/ports/vauban-finance-action.contract.test.js.map +1 -0
- package/dist/ports/vauban-finance-action.d.ts +106 -0
- package/dist/ports/vauban-finance-action.d.ts.map +1 -0
- package/dist/ports/vauban-finance-action.js +60 -0
- package/dist/ports/vauban-finance-action.js.map +1 -0
- package/dist/ports/workflow-runtime.d.ts +204 -0
- package/dist/ports/workflow-runtime.d.ts.map +1 -0
- package/dist/ports/workflow-runtime.js +72 -0
- package/dist/ports/workflow-runtime.js.map +1 -0
- package/dist/proof/cert-verify.d.ts +80 -0
- package/dist/proof/cert-verify.d.ts.map +1 -0
- package/dist/proof/cert-verify.js +178 -0
- package/dist/proof/cert-verify.js.map +1 -0
- package/dist/replay/replay.d.ts.map +1 -1
- package/dist/replay/replay.js +5 -1
- package/dist/replay/replay.js.map +1 -1
- package/dist/retry/index.d.ts +129 -0
- package/dist/retry/index.d.ts.map +1 -0
- package/dist/retry/index.js +156 -0
- package/dist/retry/index.js.map +1 -0
- package/dist/retry/presets.d.ts +39 -0
- package/dist/retry/presets.d.ts.map +1 -0
- package/dist/retry/presets.js +69 -0
- package/dist/retry/presets.js.map +1 -0
- package/dist/skill-loop/ab-runner.d.ts +67 -0
- package/dist/skill-loop/ab-runner.d.ts.map +1 -0
- package/dist/skill-loop/ab-runner.js +160 -0
- package/dist/skill-loop/ab-runner.js.map +1 -0
- package/dist/skill-loop/adoption.d.ts +67 -0
- package/dist/skill-loop/adoption.d.ts.map +1 -0
- package/dist/skill-loop/adoption.js +126 -0
- package/dist/skill-loop/adoption.js.map +1 -0
- package/dist/skill-loop/candidate.d.ts +45 -0
- package/dist/skill-loop/candidate.d.ts.map +1 -0
- package/dist/skill-loop/candidate.js +43 -0
- package/dist/skill-loop/candidate.js.map +1 -0
- package/dist/skill-loop/evaluator.d.ts +42 -0
- package/dist/skill-loop/evaluator.d.ts.map +1 -0
- package/dist/skill-loop/evaluator.js +184 -0
- package/dist/skill-loop/evaluator.js.map +1 -0
- package/dist/skill-loop/index.d.ts +27 -0
- package/dist/skill-loop/index.d.ts.map +1 -0
- package/dist/skill-loop/index.js +27 -0
- package/dist/skill-loop/index.js.map +1 -0
- package/dist/skill-loop/reflexion-replay.d.ts +87 -0
- package/dist/skill-loop/reflexion-replay.d.ts.map +1 -0
- package/dist/skill-loop/reflexion-replay.js +110 -0
- package/dist/skill-loop/reflexion-replay.js.map +1 -0
- package/dist/skill-loop/sign-off.d.ts +88 -0
- package/dist/skill-loop/sign-off.d.ts.map +1 -0
- package/dist/skill-loop/sign-off.js +146 -0
- package/dist/skill-loop/sign-off.js.map +1 -0
- package/dist/skill-loop/value-metric.d.ts +55 -0
- package/dist/skill-loop/value-metric.d.ts.map +1 -0
- package/dist/skill-loop/value-metric.js +69 -0
- package/dist/skill-loop/value-metric.js.map +1 -0
- package/dist/skill-loop/versioning.d.ts +36 -0
- package/dist/skill-loop/versioning.d.ts.map +1 -0
- package/dist/skill-loop/versioning.js +47 -0
- package/dist/skill-loop/versioning.js.map +1 -0
- package/dist/skill-manifest/anchor.d.ts +91 -0
- package/dist/skill-manifest/anchor.d.ts.map +1 -0
- package/dist/skill-manifest/anchor.js +331 -0
- package/dist/skill-manifest/anchor.js.map +1 -0
- package/dist/skill-manifest/builder.d.ts +47 -0
- package/dist/skill-manifest/builder.d.ts.map +1 -0
- package/dist/skill-manifest/builder.js +93 -0
- package/dist/skill-manifest/builder.js.map +1 -0
- package/dist/skill-manifest/index.d.ts +13 -0
- package/dist/skill-manifest/index.d.ts.map +1 -0
- package/dist/skill-manifest/index.js +9 -0
- package/dist/skill-manifest/index.js.map +1 -0
- package/dist/skill-manifest/types.d.ts +67 -0
- package/dist/skill-manifest/types.d.ts.map +1 -0
- package/dist/skill-manifest/types.js +16 -0
- package/dist/skill-manifest/types.js.map +1 -0
- package/dist/skill-manifest/verifier.d.ts +42 -0
- package/dist/skill-manifest/verifier.d.ts.map +1 -0
- package/dist/skill-manifest/verifier.js +136 -0
- package/dist/skill-manifest/verifier.js.map +1 -0
- package/dist/skills/brain-query.d.ts +4 -4
- package/dist/skills/brain-store.d.ts +6 -6
- package/dist/skills/errors.d.ts +15 -0
- package/dist/skills/errors.d.ts.map +1 -1
- package/dist/skills/errors.js +21 -0
- package/dist/skills/errors.js.map +1 -1
- package/dist/skills/hitl-request.d.ts +2 -2
- package/dist/skills/index.d.ts +3 -1
- package/dist/skills/index.d.ts.map +1 -1
- package/dist/skills/index.js +4 -1
- package/dist/skills/index.js.map +1 -1
- package/dist/skills/markdown/loader.d.ts +52 -0
- package/dist/skills/markdown/loader.d.ts.map +1 -0
- package/dist/skills/markdown/loader.js +93 -0
- package/dist/skills/markdown/loader.js.map +1 -0
- package/dist/skills/markdown/schema.d.ts +432 -0
- package/dist/skills/markdown/schema.d.ts.map +1 -0
- package/dist/skills/markdown/schema.js +121 -0
- package/dist/skills/markdown/schema.js.map +1 -0
- package/dist/skills/poc-md-loader/markdown-loader.d.ts +77 -0
- package/dist/skills/poc-md-loader/markdown-loader.d.ts.map +1 -0
- package/dist/skills/poc-md-loader/markdown-loader.js +125 -0
- package/dist/skills/poc-md-loader/markdown-loader.js.map +1 -0
- package/dist/skills/poc-md-loader/runner.d.ts +24 -0
- package/dist/skills/poc-md-loader/runner.d.ts.map +1 -0
- package/dist/skills/poc-md-loader/runner.js +57 -0
- package/dist/skills/poc-md-loader/runner.js.map +1 -0
- package/dist/skills/poc-md-loader/vitest.poc.config.d.ts +3 -0
- package/dist/skills/poc-md-loader/vitest.poc.config.d.ts.map +1 -0
- package/dist/skills/poc-md-loader/vitest.poc.config.js +13 -0
- package/dist/skills/poc-md-loader/vitest.poc.config.js.map +1 -0
- package/dist/skills/poc-md-loader/web-search/script.d.ts +33 -0
- package/dist/skills/poc-md-loader/web-search/script.d.ts.map +1 -0
- package/dist/skills/poc-md-loader/web-search/script.js +75 -0
- package/dist/skills/poc-md-loader/web-search/script.js.map +1 -0
- package/dist/skills/record-outcome.d.ts +4 -4
- package/dist/skills/send-email.d.ts.map +1 -1
- package/dist/skills/send-email.js +15 -3
- package/dist/skills/send-email.js.map +1 -1
- package/dist/skills/slack-notify.d.ts +4 -4
- package/dist/skills/starknet-balance.d.ts +1 -1
- package/dist/skills/telegram-notify.d.ts +4 -4
- package/dist/skills/web-search.d.ts +1 -1
- package/dist/testing/contracts/event-bus.contract.d.ts.map +1 -1
- package/dist/testing/contracts/event-bus.contract.js +14 -12
- package/dist/testing/contracts/event-bus.contract.js.map +1 -1
- package/dist/testing/index.d.ts +3 -0
- package/dist/testing/test-brain-port.d.ts +4 -0
- package/dist/testing/test-brain-port.d.ts.map +1 -1
- package/dist/testing/test-brain-port.js +75 -20
- package/dist/testing/test-brain-port.js.map +1 -1
- package/dist/testing/test-event-bus.d.ts.map +1 -1
- package/dist/testing/test-event-bus.js +89 -36
- package/dist/testing/test-event-bus.js.map +1 -1
- package/dist/trace/schema.d.ts +1 -1
- package/dist/trace/schema.d.ts.map +1 -1
- package/dist/trace/schema.js +1 -1
- package/dist/trace/schema.js.map +1 -1
- package/dist/verify/formal/index.d.ts +44 -0
- package/dist/verify/formal/index.d.ts.map +1 -0
- package/dist/verify/formal/index.js +98 -0
- package/dist/verify/formal/index.js.map +1 -0
- package/dist/verify/formal/policy.d.ts +105 -0
- package/dist/verify/formal/policy.d.ts.map +1 -0
- package/dist/verify/formal/policy.js +159 -0
- package/dist/verify/formal/policy.js.map +1 -0
- package/dist/verify/formal/result.d.ts +50 -0
- package/dist/verify/formal/result.d.ts.map +1 -0
- package/dist/verify/formal/result.js +21 -0
- package/dist/verify/formal/result.js.map +1 -0
- package/dist/verify/formal/solver.d.ts +67 -0
- package/dist/verify/formal/solver.d.ts.map +1 -0
- package/dist/verify/formal/solver.js +184 -0
- package/dist/verify/formal/solver.js.map +1 -0
- package/dist/verify/formal/spec-language.d.ts +80 -0
- package/dist/verify/formal/spec-language.d.ts.map +1 -0
- package/dist/verify/formal/spec-language.js +219 -0
- package/dist/verify/formal/spec-language.js.map +1 -0
- package/docs/attestation.md +199 -0
- package/docs/identity.md +193 -0
- package/package.json +22 -1
- package/src/adapters/llm/anthropic-direct.ts +51 -0
- package/src/adapters/llm/cascade.ts +64 -19
- package/src/adapters/llm/litellm.ts +49 -0
- package/src/compute/difficulty-estimator.ts +111 -0
- package/src/compute/strategies/mixture-of-agents.ts +150 -0
- package/src/compute/strategies/tree-of-thoughts.ts +293 -0
- package/src/compute/strategies/two-phase-orient.ts +147 -0
- package/src/container/protocol.ts +243 -0
- package/src/container/runtime.ts +424 -0
- package/src/db/migrations/026_formal_verify_results.sql +30 -0
- package/src/events/catalogue.ts +54 -0
- package/src/events/index.ts +9 -0
- package/src/events/schemas/citadel.sprint.analyzed.v1.ts +23 -0
- package/src/events/schemas/forge.inbox.reply_classified.v1.ts +15 -0
- package/src/events/schemas/vauban-finance.forecast.generated.v1.ts +11 -0
- package/src/events/schemas/vauban-finance.trade.executed.v1.ts +12 -0
- package/src/events/schemas/vauban.goal.checked.v1.ts +11 -0
- package/src/events/schemas/vauban.rebalancing.checked.v1.ts +11 -0
- package/src/events/schemas/vauban.tax.checked.v1.ts +11 -0
- package/src/events/schemas/vauban.vault.analyzed.v1.ts +21 -0
- package/src/events/schemas/vauban.vault.compounded.v1.ts +12 -0
- package/src/identity/agent-persona.ts +203 -0
- package/src/identity/persona-prompt.ts +84 -0
- package/src/identity/persona-schema.ts +127 -0
- package/src/index.ts +338 -1
- package/src/loop/index.ts +0 -1
- package/src/loop/sdk-loop.ts +5 -8
- package/src/memory/episodic-rrf.ts +224 -0
- package/src/mesh/attenuation.ts +190 -0
- package/src/mesh/delegate.ts +254 -0
- package/src/mesh/dispatcher.ts +301 -0
- package/src/mesh/index.ts +39 -0
- package/src/mesh/types.ts +31 -0
- package/src/orchestration/ooda/skills.ts +177 -0
- package/src/orchestration/ooda/types.ts +3 -9
- package/src/ports/bastion-action.contract.test.ts +355 -0
- package/src/ports/bastion-action.ts +198 -0
- package/src/ports/brain.ts +177 -15
- package/src/ports/citadel-action.contract.test.ts +430 -0
- package/src/ports/citadel-action.ts +174 -0
- package/src/ports/compliance-contract.ts +191 -0
- package/src/ports/db.ts +98 -0
- package/src/ports/delegation.contract.test.ts +428 -0
- package/src/ports/delegation.ts +211 -0
- package/src/ports/event-bus.ts +133 -18
- package/src/ports/federation.contract.test.ts +355 -0
- package/src/ports/federation.ts +190 -0
- package/src/ports/index.ts +186 -1
- package/src/ports/llm-provider.ts +123 -0
- package/src/ports/logger.ts +104 -0
- package/src/ports/manifest-registry.contract.test.ts +324 -0
- package/src/ports/manifest-registry.ts +188 -0
- package/src/ports/observability.contract.test.ts +315 -0
- package/src/ports/observability.ts +150 -0
- package/src/ports/outcome.ts +69 -0
- package/src/ports/privacy.contract.test.ts +413 -0
- package/src/ports/privacy.ts +207 -0
- package/src/ports/tenant-context.contract.test.ts +454 -0
- package/src/ports/tenant-context.ts +150 -0
- package/src/ports/vauban-finance-action.contract.test.ts +335 -0
- package/src/ports/vauban-finance-action.ts +166 -0
- package/src/ports/workflow-runtime.ts +327 -0
- package/src/proof/cert-verify.ts +249 -0
- package/src/replay/replay.ts +11 -8
- package/src/retry/index.ts +227 -0
- package/src/retry/presets.ts +75 -0
- package/src/skill-loop/ab-runner.ts +196 -0
- package/src/skill-loop/adoption.ts +188 -0
- package/src/skill-loop/candidate.ts +75 -0
- package/src/skill-loop/evaluator.ts +238 -0
- package/src/skill-loop/index.ts +51 -0
- package/src/skill-loop/reflexion-replay.ts +173 -0
- package/src/skill-loop/sign-off.ts +247 -0
- package/src/skill-loop/value-metric.ts +120 -0
- package/src/skill-loop/versioning.ts +75 -0
- package/src/skill-manifest/anchor.ts +401 -0
- package/src/skill-manifest/builder.ts +129 -0
- package/src/skill-manifest/index.ts +18 -0
- package/src/skill-manifest/types.ts +72 -0
- package/src/skill-manifest/verifier.ts +198 -0
- package/src/skills/errors.ts +30 -2
- package/src/skills/index.ts +19 -0
- package/src/skills/markdown/loader.ts +129 -0
- package/src/skills/markdown/schema.ts +144 -0
- package/src/skills/poc-md-loader/e2e-parity.test.ts +237 -0
- package/src/skills/poc-md-loader/markdown-loader.ts +161 -0
- package/src/skills/poc-md-loader/runner.ts +82 -0
- package/src/skills/poc-md-loader/vitest.poc.config.ts +13 -0
- package/src/skills/poc-md-loader/web-search/SKILL.md +42 -0
- package/src/skills/poc-md-loader/web-search/script.ts +109 -0
- package/src/skills/send-email.ts +15 -3
- package/src/testing/contracts/event-bus.contract.ts +16 -14
- package/src/testing/test-brain-port.ts +98 -24
- package/src/testing/test-event-bus.ts +104 -43
- package/src/trace/schema.ts +1 -1
- package/src/verify/formal/index.ts +154 -0
- package/src/verify/formal/policy.ts +253 -0
- package/src/verify/formal/result.ts +52 -0
- package/src/verify/formal/solver.ts +235 -0
- package/src/verify/formal/spec-language.ts +274 -0
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* src/mesh/delegate.ts
|
|
3
|
+
*
|
|
4
|
+
* `mesh.delegate()` — intent-based dispatch to the best available agent.
|
|
5
|
+
*
|
|
6
|
+
* @experimental — sprint-585. Public API may change before v1.x freeze.
|
|
7
|
+
*
|
|
8
|
+
* Replaces manual `withCompute()` boilerplate with a one-liner:
|
|
9
|
+
*
|
|
10
|
+
* const r = await meshDelegate({ need: "summarize the spec" }, dispatcher);
|
|
11
|
+
*
|
|
12
|
+
* Responsibilities:
|
|
13
|
+
* 1. Classify need → AgentKind (via dispatcher.classify or injected hint).
|
|
14
|
+
* 2. Apply capability attenuation if a parent token is present.
|
|
15
|
+
* 3. Forward to dispatcher with budget/deadline guards.
|
|
16
|
+
* 4. Build a delegation chain link for audit.
|
|
17
|
+
*
|
|
18
|
+
* Streaming (`onChunk`) is a best-effort surface — the dispatcher must opt-in
|
|
19
|
+
* by exposing a `dispatchStream` (not part of base contract). When unavailable,
|
|
20
|
+
* the final result is delivered as a single chunk after completion.
|
|
21
|
+
*/
|
|
22
|
+
import { attenuateScope, buildToken, } from "./attenuation.js";
|
|
23
|
+
import { DefaultMeshDispatcher } from "./dispatcher.js";
|
|
24
|
+
// ─── Defaults ────────────────────────────────────────────────────────────────
|
|
25
|
+
const DEFAULT_DEADLINE_MS = 30_000;
|
|
26
|
+
const DEFAULT_MAX_COST_EUR = 0.01;
|
|
27
|
+
const SELF_ID = "mesh:caller";
|
|
28
|
+
// ─── Helpers ─────────────────────────────────────────────────────────────────
|
|
29
|
+
function stringifyContext(ctx) {
|
|
30
|
+
if (ctx === undefined)
|
|
31
|
+
return undefined;
|
|
32
|
+
if (typeof ctx === "string")
|
|
33
|
+
return ctx;
|
|
34
|
+
try {
|
|
35
|
+
return JSON.stringify(ctx);
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return String(ctx);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
function isDispatcherWithClassify(d) {
|
|
42
|
+
return typeof d.classify === "function";
|
|
43
|
+
}
|
|
44
|
+
function generateChildId() {
|
|
45
|
+
// Tiny non-cryptographic id — child-id is for audit, not auth.
|
|
46
|
+
// Production: replace with ULID/UUID from caller env.
|
|
47
|
+
return `mesh-child-${Date.now().toString(36)}-${Math.floor(Math.random() * 1e6).toString(36)}`;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Compute child scope from parent token + caller-requested capabilities.
|
|
51
|
+
* Returns the issued child token (parented to caller's parentId) and the
|
|
52
|
+
* effective MeshCapabilityScope (post-intersection).
|
|
53
|
+
*/
|
|
54
|
+
function issueChildToken(parentToken, requestedCapabilities, requestedBudgetEur, childId) {
|
|
55
|
+
const parentScope = {
|
|
56
|
+
actions: parentToken.scope,
|
|
57
|
+
budgetEur: parentToken.budgetEur,
|
|
58
|
+
expiresAt: parentToken.expiresAt ? new Date(parentToken.expiresAt) : undefined,
|
|
59
|
+
};
|
|
60
|
+
const requestedScope = {
|
|
61
|
+
actions: requestedCapabilities ?? parentToken.scope,
|
|
62
|
+
budgetEur: requestedBudgetEur,
|
|
63
|
+
};
|
|
64
|
+
const childScope = attenuateScope(parentScope, requestedScope);
|
|
65
|
+
const token = buildToken(childScope, childId);
|
|
66
|
+
return { token, scope: childScope };
|
|
67
|
+
}
|
|
68
|
+
// ─── Errors ──────────────────────────────────────────────────────────────────
|
|
69
|
+
export class DelegateAttenuationError extends Error {
|
|
70
|
+
name = "DelegateAttenuationError";
|
|
71
|
+
}
|
|
72
|
+
// ─── Public API ──────────────────────────────────────────────────────────────
|
|
73
|
+
/**
|
|
74
|
+
* Delegate a need to the best available agent.
|
|
75
|
+
*
|
|
76
|
+
* Routing priority (when `kind` not pre-set):
|
|
77
|
+
* 1. Dispatcher's `classify(need)` hook if present.
|
|
78
|
+
* 2. Heuristic — see `defaultClassifier`.
|
|
79
|
+
*
|
|
80
|
+
* Capability attenuation:
|
|
81
|
+
* - If `parentToken` is provided, child scope = parent ∩ requested.
|
|
82
|
+
* - Empty intersection raises {@link DelegateAttenuationError}.
|
|
83
|
+
*
|
|
84
|
+
* Budget guards:
|
|
85
|
+
* - When `parentToken.budgetEur < max_cost_eur`, the effective max is parent's.
|
|
86
|
+
* - Negative budget or deadline → RangeError.
|
|
87
|
+
*/
|
|
88
|
+
export async function meshDelegate(options, dispatcher) {
|
|
89
|
+
if (!options || typeof options.need !== "string" || options.need.length === 0) {
|
|
90
|
+
throw new TypeError("meshDelegate: `need` is required and must be a non-empty string");
|
|
91
|
+
}
|
|
92
|
+
if (!dispatcher || typeof dispatcher.dispatch !== "function") {
|
|
93
|
+
throw new TypeError("meshDelegate: `dispatcher` must implement MeshDispatcher");
|
|
94
|
+
}
|
|
95
|
+
const deadlineMs = options.deadline_ms ?? DEFAULT_DEADLINE_MS;
|
|
96
|
+
if (!Number.isFinite(deadlineMs) || deadlineMs <= 0) {
|
|
97
|
+
throw new RangeError(`meshDelegate: deadline_ms must be > 0, got ${deadlineMs}`);
|
|
98
|
+
}
|
|
99
|
+
let maxCostEur = options.max_cost_eur ?? DEFAULT_MAX_COST_EUR;
|
|
100
|
+
if (!Number.isFinite(maxCostEur) || maxCostEur < 0) {
|
|
101
|
+
throw new RangeError(`meshDelegate: max_cost_eur must be ≥ 0, got ${maxCostEur}`);
|
|
102
|
+
}
|
|
103
|
+
// ── 1. Classify ──────────────────────────────────────────────────────────
|
|
104
|
+
const kind = options.kind ??
|
|
105
|
+
(isDispatcherWithClassify(dispatcher) ? dispatcher.classify(options.need) : "llm-router");
|
|
106
|
+
// ── 2. Attenuation (if parent token given) ───────────────────────────────
|
|
107
|
+
const childId = options.childId ?? generateChildId();
|
|
108
|
+
let childToken;
|
|
109
|
+
let effectiveScope;
|
|
110
|
+
if (options.parentToken) {
|
|
111
|
+
const issued = issueChildToken(options.parentToken, options.capabilities, maxCostEur, childId);
|
|
112
|
+
if (issued.scope.actions.length === 0 && (options.capabilities?.length ?? 0) > 0) {
|
|
113
|
+
throw new DelegateAttenuationError("meshDelegate: requested capabilities are not granted by parent scope");
|
|
114
|
+
}
|
|
115
|
+
childToken = issued.token;
|
|
116
|
+
effectiveScope = issued.scope.actions;
|
|
117
|
+
// Enforce parent budget cap.
|
|
118
|
+
maxCostEur = Math.min(maxCostEur, issued.scope.budgetEur);
|
|
119
|
+
}
|
|
120
|
+
else if (options.capabilities) {
|
|
121
|
+
effectiveScope = options.capabilities;
|
|
122
|
+
}
|
|
123
|
+
// ── 3. Dispatch ──────────────────────────────────────────────────────────
|
|
124
|
+
const intent = {
|
|
125
|
+
kind,
|
|
126
|
+
need: options.need,
|
|
127
|
+
context: stringifyContext(options.context),
|
|
128
|
+
deadline_ms: deadlineMs,
|
|
129
|
+
max_cost_eur: maxCostEur,
|
|
130
|
+
toolName: options.toolName,
|
|
131
|
+
toolArgs: options.toolArgs,
|
|
132
|
+
};
|
|
133
|
+
const dispatched = await dispatcher.dispatch(intent);
|
|
134
|
+
// ── 4. Audit chain ───────────────────────────────────────────────────────
|
|
135
|
+
const parentIdForLink = options.parentToken?.parentId ?? SELF_ID;
|
|
136
|
+
const link = {
|
|
137
|
+
from: parentIdForLink,
|
|
138
|
+
to: childId,
|
|
139
|
+
scope: effectiveScope ?? [],
|
|
140
|
+
budget: maxCostEur,
|
|
141
|
+
};
|
|
142
|
+
// ── 5. Stream (best-effort, single-shot when streaming not supported) ────
|
|
143
|
+
if (options.onChunk) {
|
|
144
|
+
options.onChunk({ text: dispatched.output, done: true, agentKind: kind });
|
|
145
|
+
}
|
|
146
|
+
const result = {
|
|
147
|
+
output: dispatched.output,
|
|
148
|
+
agentKind: kind,
|
|
149
|
+
delegationChain: [link],
|
|
150
|
+
costEur: dispatched.costEur,
|
|
151
|
+
durationMs: dispatched.durationMs,
|
|
152
|
+
truncated: dispatched.truncated,
|
|
153
|
+
childToken,
|
|
154
|
+
};
|
|
155
|
+
return result;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Factory variant — binds a dispatcher so callers can call `delegate(opts)`
|
|
159
|
+
* without re-passing the dispatcher every time.
|
|
160
|
+
*
|
|
161
|
+
* Useful for DI in long-lived services.
|
|
162
|
+
*/
|
|
163
|
+
export function createMeshDelegate(dispatcher) {
|
|
164
|
+
return (options) => meshDelegate(options, dispatcher);
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Re-export DefaultMeshDispatcher as a convenience so callers can do:
|
|
168
|
+
*
|
|
169
|
+
* import { meshDelegate, DefaultMeshDispatcher } from "@vauban-org/agent-sdk";
|
|
170
|
+
*/
|
|
171
|
+
export { DefaultMeshDispatcher };
|
|
172
|
+
//# sourceMappingURL=delegate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delegate.js","sourceRoot":"","sources":["../../src/mesh/delegate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAGL,cAAc,EACd,UAAU,GACX,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,qBAAqB,EAA4C,MAAM,iBAAiB,CAAC;AA+ClG,gFAAgF;AAEhF,MAAM,mBAAmB,GAAG,MAAM,CAAC;AACnC,MAAM,oBAAoB,GAAG,IAAI,CAAC;AAClC,MAAM,OAAO,GAAG,aAAa,CAAC;AAE9B,gFAAgF;AAEhF,SAAS,gBAAgB,CAAC,GAAsC;IAC9D,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACxC,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC;IACxC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;AACH,CAAC;AAED,SAAS,wBAAwB,CAC/B,CAAiB;IAEjB,OAAO,OAAQ,CAA4B,CAAC,QAAQ,KAAK,UAAU,CAAC;AACtE,CAAC;AAED,SAAS,eAAe;IACtB,+DAA+D;IAC/D,sDAAsD;IACtD,OAAO,cAAc,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;AACjG,CAAC;AAED;;;;GAIG;AACH,SAAS,eAAe,CACtB,WAA4B,EAC5B,qBAAwD,EACxD,kBAA0B,EAC1B,OAAe;IAEf,MAAM,WAAW,GAAwB;QACvC,OAAO,EAAE,WAAW,CAAC,KAAK;QAC1B,SAAS,EAAE,WAAW,CAAC,SAAS;QAChC,SAAS,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS;KAC/E,CAAC;IACF,MAAM,cAAc,GAAwB;QAC1C,OAAO,EAAE,qBAAqB,IAAI,WAAW,CAAC,KAAK;QACnD,SAAS,EAAE,kBAAkB;KAC9B,CAAC;IACF,MAAM,UAAU,GAAG,cAAc,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IAC/D,MAAM,KAAK,GAAG,UAAU,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC9C,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AACtC,CAAC;AAED,gFAAgF;AAEhF,MAAM,OAAO,wBAAyB,SAAQ,KAAK;IAC/B,IAAI,GAAG,0BAA0B,CAAC;CACrD;AAED,gFAAgF;AAEhF;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,OAAwB,EACxB,UAA0B;IAE1B,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9E,MAAM,IAAI,SAAS,CAAC,iEAAiE,CAAC,CAAC;IACzF,CAAC;IACD,IAAI,CAAC,UAAU,IAAI,OAAO,UAAU,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;QAC7D,MAAM,IAAI,SAAS,CAAC,0DAA0D,CAAC,CAAC;IAClF,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW,IAAI,mBAAmB,CAAC;IAC9D,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,UAAU,IAAI,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,UAAU,CAAC,8CAA8C,UAAU,EAAE,CAAC,CAAC;IACnF,CAAC;IACD,IAAI,UAAU,GAAG,OAAO,CAAC,YAAY,IAAI,oBAAoB,CAAC;IAC9D,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;QACnD,MAAM,IAAI,UAAU,CAAC,+CAA+C,UAAU,EAAE,CAAC,CAAC;IACpF,CAAC;IAED,4EAA4E;IAC5E,MAAM,IAAI,GACR,OAAO,CAAC,IAAI;QACZ,CAAC,wBAAwB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;IAE5F,4EAA4E;IAC5E,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,eAAe,EAAE,CAAC;IACrD,IAAI,UAAuC,CAAC;IAC5C,IAAI,cAAiD,CAAC;IACtD,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,YAAY,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;QAC/F,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;YACjF,MAAM,IAAI,wBAAwB,CAChC,sEAAsE,CACvE,CAAC;QACJ,CAAC;QACD,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC;QAC1B,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;QACtC,6BAA6B;QAC7B,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC5D,CAAC;SAAM,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;QAChC,cAAc,GAAG,OAAO,CAAC,YAAY,CAAC;IACxC,CAAC;IAED,4EAA4E;IAC5E,MAAM,MAAM,GAAmB;QAC7B,IAAI;QACJ,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,OAAO,EAAE,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC;QAC1C,WAAW,EAAE,UAAU;QACvB,YAAY,EAAE,UAAU;QACxB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,QAAQ,EAAE,OAAO,CAAC,QAAQ;KAC3B,CAAC;IAEF,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAErD,4EAA4E;IAC5E,MAAM,eAAe,GAAG,OAAO,CAAC,WAAW,EAAE,QAAQ,IAAI,OAAO,CAAC;IACjE,MAAM,IAAI,GAAmB;QAC3B,IAAI,EAAE,eAAe;QACrB,EAAE,EAAE,OAAO;QACX,KAAK,EAAE,cAAc,IAAI,EAAE;QAC3B,MAAM,EAAE,UAAU;KACnB,CAAC;IAEF,4EAA4E;IAC5E,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5E,CAAC;IAED,MAAM,MAAM,GAAsB;QAChC,MAAM,EAAE,UAAU,CAAC,MAAsB;QACzC,SAAS,EAAE,IAAI;QACf,eAAe,EAAE,CAAC,IAAI,CAAC;QACvB,OAAO,EAAE,UAAU,CAAC,OAAO;QAC3B,UAAU,EAAE,UAAU,CAAC,UAAU;QACjC,SAAS,EAAE,UAAU,CAAC,SAAS;QAC/B,UAAU;KACX,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAChC,UAA0B;IAE1B,OAAO,CAAa,OAAwB,EAAE,EAAE,CAAC,YAAY,CAAI,OAAO,EAAE,UAAU,CAAC,CAAC;AACxF,CAAC;AAED;;;;GAIG;AACH,OAAO,EAAE,qBAAqB,EAAE,CAAC"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* src/mesh/dispatcher.ts
|
|
3
|
+
*
|
|
4
|
+
* Mesh dispatcher — routes a {@link DispatchIntent} to a concrete executor
|
|
5
|
+
* (LLM, OODA, MCP tool, plugin, fallback) and returns a uniform result shape.
|
|
6
|
+
*
|
|
7
|
+
* @experimental — sprint-585. Public API may change before v1.x freeze.
|
|
8
|
+
*
|
|
9
|
+
* The dispatcher knows NOTHING about budget tokens or capability attenuation —
|
|
10
|
+
* those concerns live in `delegate.ts`. Keep this module narrowly scoped to
|
|
11
|
+
* "given an intent kind, run the right executor".
|
|
12
|
+
*
|
|
13
|
+
* Default classifier is a heuristic (no LLM call). Callers may inject their own.
|
|
14
|
+
*/
|
|
15
|
+
import type { MeshAgentKind } from "./types.js";
|
|
16
|
+
export interface DispatchIntent {
|
|
17
|
+
/** Resolved kind — caller (or default classifier) decided which executor to use. */
|
|
18
|
+
readonly kind: MeshAgentKind;
|
|
19
|
+
/** Natural-language need. */
|
|
20
|
+
readonly need: string;
|
|
21
|
+
/** Optional context (structured data stringified, or free text). */
|
|
22
|
+
readonly context?: string;
|
|
23
|
+
/** Wall-clock deadline in ms. */
|
|
24
|
+
readonly deadline_ms?: number;
|
|
25
|
+
/** Max cost in EUR. */
|
|
26
|
+
readonly max_cost_eur?: number;
|
|
27
|
+
/** Optional MCP tool name (only used when kind === "mcp-tool"). */
|
|
28
|
+
readonly toolName?: string;
|
|
29
|
+
/** Opaque MCP tool args (only used when kind === "mcp-tool"). */
|
|
30
|
+
readonly toolArgs?: unknown;
|
|
31
|
+
}
|
|
32
|
+
export interface DispatchResult {
|
|
33
|
+
readonly output: string;
|
|
34
|
+
readonly costEur: number;
|
|
35
|
+
readonly durationMs: number;
|
|
36
|
+
/** True if the executor stopped on deadline before producing a final answer. */
|
|
37
|
+
readonly truncated: boolean;
|
|
38
|
+
}
|
|
39
|
+
export interface MeshDispatcher {
|
|
40
|
+
dispatch(intent: DispatchIntent): Promise<DispatchResult>;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Default heuristic classifier — zero LLM cost.
|
|
44
|
+
*
|
|
45
|
+
* - OODA when need contains an OODA hint OR has ≥ 3 sentence-terminating marks.
|
|
46
|
+
* - MCP-tool when need contains an MCP hint and is short (< 80 chars).
|
|
47
|
+
* - LLM-router otherwise.
|
|
48
|
+
*
|
|
49
|
+
* Note: callers wanting LLM-based classification should inject a custom
|
|
50
|
+
* `classifier` via {@link DispatcherConfig}.
|
|
51
|
+
*/
|
|
52
|
+
export declare function defaultClassifier(need: string): MeshAgentKind;
|
|
53
|
+
export interface DispatcherConfig {
|
|
54
|
+
/** Override the default heuristic classifier. */
|
|
55
|
+
readonly classifier?: (need: string) => MeshAgentKind;
|
|
56
|
+
/**
|
|
57
|
+
* Executor for `kind === "llm-router"`.
|
|
58
|
+
* Must respect `deadline_ms` (caller-provided).
|
|
59
|
+
*/
|
|
60
|
+
readonly llmExecutor?: (prompt: string, deadlineMs: number) => Promise<string>;
|
|
61
|
+
/**
|
|
62
|
+
* Executor for `kind === "ooda"`. Receives need + optional context.
|
|
63
|
+
* Must respect `deadline_ms` (passed via 3rd arg).
|
|
64
|
+
*/
|
|
65
|
+
readonly oodaExecutor?: (need: string, context: string | undefined, deadlineMs: number) => Promise<string>;
|
|
66
|
+
/**
|
|
67
|
+
* Registry of MCP tools. Keyed by tool name; values are pre-bound async fns.
|
|
68
|
+
*/
|
|
69
|
+
readonly mcpTools?: Readonly<Record<string, (args: unknown) => Promise<string>>>;
|
|
70
|
+
/**
|
|
71
|
+
* Optional plugin executor (last-resort, kind === "plugin").
|
|
72
|
+
*/
|
|
73
|
+
readonly pluginExecutor?: (need: string, context: string | undefined) => Promise<string>;
|
|
74
|
+
/**
|
|
75
|
+
* Fallback executor when no other kind matches. Default: echoes need.
|
|
76
|
+
*/
|
|
77
|
+
readonly fallbackExecutor?: (intent: DispatchIntent) => Promise<string>;
|
|
78
|
+
/**
|
|
79
|
+
* Cost model in EUR per millisecond. Default 0 (free-tier accounting).
|
|
80
|
+
* Production: inject a model that consults `tracking/provider-usage`.
|
|
81
|
+
*/
|
|
82
|
+
readonly costPerMs?: number;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Default dispatcher — composes injected executors into a uniform
|
|
86
|
+
* "intent → result" pipeline, including deadline enforcement and cost
|
|
87
|
+
* accounting.
|
|
88
|
+
*
|
|
89
|
+
* Concurrency notes:
|
|
90
|
+
* - Uses `AbortController` + `setTimeout` to enforce `deadline_ms`.
|
|
91
|
+
* - On deadline trip, returns `truncated: true` and the executor must respect
|
|
92
|
+
* the abort signal it received via Promise.race.
|
|
93
|
+
*/
|
|
94
|
+
export declare class DefaultMeshDispatcher implements MeshDispatcher {
|
|
95
|
+
private readonly classifier;
|
|
96
|
+
private readonly llm;
|
|
97
|
+
private readonly ooda;
|
|
98
|
+
private readonly mcpTools;
|
|
99
|
+
private readonly plugin;
|
|
100
|
+
private readonly fallback;
|
|
101
|
+
private readonly costPerMs;
|
|
102
|
+
constructor(config?: DispatcherConfig);
|
|
103
|
+
/** Classify a need without dispatching — exposed for callers that pre-route. */
|
|
104
|
+
classify(need: string): MeshAgentKind;
|
|
105
|
+
dispatch(intent: DispatchIntent): Promise<DispatchResult>;
|
|
106
|
+
private executorFor;
|
|
107
|
+
private runWithDeadline;
|
|
108
|
+
}
|
|
109
|
+
export declare class DeadlineExceededError extends Error {
|
|
110
|
+
readonly name = "MeshDeadlineExceededError";
|
|
111
|
+
readonly partial?: string;
|
|
112
|
+
constructor(deadlineMs: number, partial?: string);
|
|
113
|
+
}
|
|
114
|
+
export declare class MeshDispatchError extends Error {
|
|
115
|
+
readonly name = "MeshDispatchError";
|
|
116
|
+
readonly code: string;
|
|
117
|
+
constructor(message: string, code: string);
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=dispatcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatcher.d.ts","sourceRoot":"","sources":["../../src/mesh/dispatcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* src/mesh/dispatcher.ts
|
|
3
|
+
*
|
|
4
|
+
* Mesh dispatcher — routes a {@link DispatchIntent} to a concrete executor
|
|
5
|
+
* (LLM, OODA, MCP tool, plugin, fallback) and returns a uniform result shape.
|
|
6
|
+
*
|
|
7
|
+
* @experimental — sprint-585. Public API may change before v1.x freeze.
|
|
8
|
+
*
|
|
9
|
+
* The dispatcher knows NOTHING about budget tokens or capability attenuation —
|
|
10
|
+
* those concerns live in `delegate.ts`. Keep this module narrowly scoped to
|
|
11
|
+
* "given an intent kind, run the right executor".
|
|
12
|
+
*
|
|
13
|
+
* Default classifier is a heuristic (no LLM call). Callers may inject their own.
|
|
14
|
+
*/
|
|
15
|
+
// ─── Classifier (heuristic, no LLM) ──────────────────────────────────────────
|
|
16
|
+
/**
|
|
17
|
+
* Tokens that suggest a long-running observation/audit loop → OODA.
|
|
18
|
+
* Order-stable, lowercase, word-boundary matched in {@link defaultClassifier}.
|
|
19
|
+
*/
|
|
20
|
+
const OODA_HINTS = [
|
|
21
|
+
"scan",
|
|
22
|
+
"audit",
|
|
23
|
+
"monitor",
|
|
24
|
+
"watch",
|
|
25
|
+
"step by step",
|
|
26
|
+
"analyze then",
|
|
27
|
+
"investigate",
|
|
28
|
+
"diagnose",
|
|
29
|
+
"post-mortem",
|
|
30
|
+
];
|
|
31
|
+
/**
|
|
32
|
+
* Tokens that suggest a single tool call → MCP tool dispatch.
|
|
33
|
+
*/
|
|
34
|
+
const MCP_HINTS = [
|
|
35
|
+
"get price",
|
|
36
|
+
"fetch",
|
|
37
|
+
"call api",
|
|
38
|
+
"lookup",
|
|
39
|
+
"read contract",
|
|
40
|
+
"check balance",
|
|
41
|
+
"get_",
|
|
42
|
+
];
|
|
43
|
+
/**
|
|
44
|
+
* Default heuristic classifier — zero LLM cost.
|
|
45
|
+
*
|
|
46
|
+
* - OODA when need contains an OODA hint OR has ≥ 3 sentence-terminating marks.
|
|
47
|
+
* - MCP-tool when need contains an MCP hint and is short (< 80 chars).
|
|
48
|
+
* - LLM-router otherwise.
|
|
49
|
+
*
|
|
50
|
+
* Note: callers wanting LLM-based classification should inject a custom
|
|
51
|
+
* `classifier` via {@link DispatcherConfig}.
|
|
52
|
+
*/
|
|
53
|
+
export function defaultClassifier(need) {
|
|
54
|
+
const n = need.toLowerCase().trim();
|
|
55
|
+
if (n.length === 0)
|
|
56
|
+
return "llm-router";
|
|
57
|
+
for (const hint of OODA_HINTS) {
|
|
58
|
+
if (n.includes(hint))
|
|
59
|
+
return "ooda";
|
|
60
|
+
}
|
|
61
|
+
// 3+ sentence terminators = multi-step instruction → OODA.
|
|
62
|
+
const terminators = (n.match(/[.!?]/g) ?? []).length;
|
|
63
|
+
if (terminators >= 3)
|
|
64
|
+
return "ooda";
|
|
65
|
+
if (n.length < 80) {
|
|
66
|
+
for (const hint of MCP_HINTS) {
|
|
67
|
+
if (n.includes(hint))
|
|
68
|
+
return "mcp-tool";
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return "llm-router";
|
|
72
|
+
}
|
|
73
|
+
const DEFAULT_DEADLINE_MS = 30_000;
|
|
74
|
+
/**
|
|
75
|
+
* Default dispatcher — composes injected executors into a uniform
|
|
76
|
+
* "intent → result" pipeline, including deadline enforcement and cost
|
|
77
|
+
* accounting.
|
|
78
|
+
*
|
|
79
|
+
* Concurrency notes:
|
|
80
|
+
* - Uses `AbortController` + `setTimeout` to enforce `deadline_ms`.
|
|
81
|
+
* - On deadline trip, returns `truncated: true` and the executor must respect
|
|
82
|
+
* the abort signal it received via Promise.race.
|
|
83
|
+
*/
|
|
84
|
+
export class DefaultMeshDispatcher {
|
|
85
|
+
classifier;
|
|
86
|
+
llm;
|
|
87
|
+
ooda;
|
|
88
|
+
mcpTools;
|
|
89
|
+
plugin;
|
|
90
|
+
fallback;
|
|
91
|
+
costPerMs;
|
|
92
|
+
constructor(config = {}) {
|
|
93
|
+
this.classifier = config.classifier ?? defaultClassifier;
|
|
94
|
+
this.llm =
|
|
95
|
+
config.llmExecutor ?? (async (prompt) => `[llm-router stub] ${prompt.slice(0, 200)}`);
|
|
96
|
+
this.ooda = config.oodaExecutor ?? (async (need) => `[ooda stub] ${need.slice(0, 200)}`);
|
|
97
|
+
this.mcpTools = config.mcpTools ?? {};
|
|
98
|
+
this.plugin = config.pluginExecutor ?? (async (need) => `[plugin stub] ${need.slice(0, 200)}`);
|
|
99
|
+
this.fallback = config.fallbackExecutor ?? (async (i) => `[fallback] ${i.need.slice(0, 200)}`);
|
|
100
|
+
this.costPerMs = config.costPerMs ?? 0;
|
|
101
|
+
}
|
|
102
|
+
/** Classify a need without dispatching — exposed for callers that pre-route. */
|
|
103
|
+
classify(need) {
|
|
104
|
+
return this.classifier(need);
|
|
105
|
+
}
|
|
106
|
+
async dispatch(intent) {
|
|
107
|
+
const deadlineMs = intent.deadline_ms ?? DEFAULT_DEADLINE_MS;
|
|
108
|
+
if (!Number.isFinite(deadlineMs) || deadlineMs <= 0) {
|
|
109
|
+
throw new RangeError(`DefaultMeshDispatcher.dispatch: deadline_ms must be > 0, got ${deadlineMs}`);
|
|
110
|
+
}
|
|
111
|
+
const maxCost = intent.max_cost_eur ?? Number.POSITIVE_INFINITY;
|
|
112
|
+
if (maxCost < 0) {
|
|
113
|
+
throw new RangeError(`DefaultMeshDispatcher.dispatch: max_cost_eur must be ≥ 0, got ${maxCost}`);
|
|
114
|
+
}
|
|
115
|
+
const start = performance.now();
|
|
116
|
+
const exec = this.executorFor(intent);
|
|
117
|
+
let truncated = false;
|
|
118
|
+
let output;
|
|
119
|
+
try {
|
|
120
|
+
output = await this.runWithDeadline(exec, deadlineMs);
|
|
121
|
+
}
|
|
122
|
+
catch (err) {
|
|
123
|
+
if (err instanceof DeadlineExceededError) {
|
|
124
|
+
truncated = true;
|
|
125
|
+
output = err.partial ?? "";
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
throw err;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
const durationMs = performance.now() - start;
|
|
132
|
+
const costEur = Math.min(maxCost, durationMs * this.costPerMs);
|
|
133
|
+
return { output, costEur, durationMs, truncated };
|
|
134
|
+
}
|
|
135
|
+
// ─── internals ─────────────────────────────────────────────────────────────
|
|
136
|
+
executorFor(intent) {
|
|
137
|
+
const deadlineMs = intent.deadline_ms ?? DEFAULT_DEADLINE_MS;
|
|
138
|
+
switch (intent.kind) {
|
|
139
|
+
case "llm-router": {
|
|
140
|
+
const prompt = intent.context
|
|
141
|
+
? `${intent.need}\n\n[context]\n${intent.context}`
|
|
142
|
+
: intent.need;
|
|
143
|
+
return () => this.llm(prompt, deadlineMs);
|
|
144
|
+
}
|
|
145
|
+
case "ooda":
|
|
146
|
+
return () => this.ooda(intent.need, intent.context, deadlineMs);
|
|
147
|
+
case "mcp-tool": {
|
|
148
|
+
const name = intent.toolName;
|
|
149
|
+
if (!name) {
|
|
150
|
+
return async () => {
|
|
151
|
+
throw new MeshDispatchError("mcp-tool intent missing toolName", "MCP_TOOL_NAME_MISSING");
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
const tool = this.mcpTools[name];
|
|
155
|
+
if (!tool) {
|
|
156
|
+
return async () => {
|
|
157
|
+
throw new MeshDispatchError(`mcp-tool "${name}" not registered`, "MCP_TOOL_NOT_FOUND");
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
return () => tool(intent.toolArgs);
|
|
161
|
+
}
|
|
162
|
+
case "plugin":
|
|
163
|
+
return () => this.plugin(intent.need, intent.context);
|
|
164
|
+
case "fallback":
|
|
165
|
+
return () => this.fallback(intent);
|
|
166
|
+
default: {
|
|
167
|
+
const _exhaustive = intent.kind;
|
|
168
|
+
return async () => {
|
|
169
|
+
throw new MeshDispatchError(`Unknown intent kind: ${String(_exhaustive)}`, "UNKNOWN_KIND");
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
async runWithDeadline(exec, deadlineMs) {
|
|
175
|
+
let timeoutHandle;
|
|
176
|
+
const timeout = new Promise((_, reject) => {
|
|
177
|
+
timeoutHandle = setTimeout(() => {
|
|
178
|
+
reject(new DeadlineExceededError(deadlineMs));
|
|
179
|
+
}, deadlineMs);
|
|
180
|
+
});
|
|
181
|
+
try {
|
|
182
|
+
return await Promise.race([exec(), timeout]);
|
|
183
|
+
}
|
|
184
|
+
finally {
|
|
185
|
+
if (timeoutHandle)
|
|
186
|
+
clearTimeout(timeoutHandle);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
// ─── Errors ──────────────────────────────────────────────────────────────────
|
|
191
|
+
export class DeadlineExceededError extends Error {
|
|
192
|
+
name = "MeshDeadlineExceededError";
|
|
193
|
+
partial;
|
|
194
|
+
constructor(deadlineMs, partial) {
|
|
195
|
+
super(`mesh.dispatch: deadline ${deadlineMs}ms exceeded`);
|
|
196
|
+
this.partial = partial;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
export class MeshDispatchError extends Error {
|
|
200
|
+
name = "MeshDispatchError";
|
|
201
|
+
code;
|
|
202
|
+
constructor(message, code) {
|
|
203
|
+
super(message);
|
|
204
|
+
this.code = code;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
//# sourceMappingURL=dispatcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatcher.js","sourceRoot":"","sources":["../../src/mesh/dispatcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* src/mesh/index.ts
|
|
3
|
+
*
|
|
4
|
+
* Public barrel for the mesh.delegate() surface (sprint-585).
|
|
5
|
+
*
|
|
6
|
+
* @experimental — API may change before v1.x freeze.
|
|
7
|
+
*/
|
|
8
|
+
export { attenuateScope, buildToken, parseToken, scopeAllows, type AttenuatedToken, type CapabilityScope, type MeshCapabilityScope, } from "./attenuation.js";
|
|
9
|
+
export { DefaultMeshDispatcher, DeadlineExceededError as MeshDeadlineExceededError, MeshDispatchError, defaultClassifier, type DispatchIntent, type DispatchResult, type DispatcherConfig, type MeshDispatcher, } from "./dispatcher.js";
|
|
10
|
+
export { DelegateAttenuationError, createMeshDelegate, meshDelegate, type DelegateChunk, type DelegateOptions, type DelegateResult, } from "./delegate.js";
|
|
11
|
+
export type { DelegationLink, MeshAgentKind } from "./types.js";
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mesh/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,cAAc,EACd,UAAU,EACV,UAAU,EACV,WAAW,EACX,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,mBAAmB,GACzB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,qBAAqB,EACrB,qBAAqB,IAAI,yBAAyB,EAClD,iBAAiB,EACjB,iBAAiB,EACjB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,cAAc,GACpB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,wBAAwB,EACxB,kBAAkB,EAClB,YAAY,EACZ,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,cAAc,GACpB,MAAM,eAAe,CAAC;AAEvB,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* src/mesh/index.ts
|
|
3
|
+
*
|
|
4
|
+
* Public barrel for the mesh.delegate() surface (sprint-585).
|
|
5
|
+
*
|
|
6
|
+
* @experimental — API may change before v1.x freeze.
|
|
7
|
+
*/
|
|
8
|
+
export { attenuateScope, buildToken, parseToken, scopeAllows, } from "./attenuation.js";
|
|
9
|
+
export { DefaultMeshDispatcher, DeadlineExceededError as MeshDeadlineExceededError, MeshDispatchError, defaultClassifier, } from "./dispatcher.js";
|
|
10
|
+
export { DelegateAttenuationError, createMeshDelegate, meshDelegate, } from "./delegate.js";
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mesh/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,cAAc,EACd,UAAU,EACV,UAAU,EACV,WAAW,GAIZ,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,qBAAqB,EACrB,qBAAqB,IAAI,yBAAyB,EAClD,iBAAiB,EACjB,iBAAiB,GAKlB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,wBAAwB,EACxB,kBAAkB,EAClB,YAAY,GAIb,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* src/mesh/types.ts
|
|
3
|
+
*
|
|
4
|
+
* Shared types for mesh.delegate() and dispatcher.
|
|
5
|
+
*
|
|
6
|
+
* @experimental — sprint-585. Renamed from "AgentKind" to "MeshAgentKind" to
|
|
7
|
+
* avoid clash with `registry/agent-capability.ts::AgentKind` (which uses
|
|
8
|
+
* uppercase enum values ARCHITECT/BUILDER/...).
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Kind of executor selected by the dispatcher.
|
|
12
|
+
* - `"ooda"` : long-running Observe→Orient→Decide→Act loop
|
|
13
|
+
* - `"llm-router"` : single LLM call (single-shot or BoN-MAV)
|
|
14
|
+
* - `"mcp-tool"` : direct MCP tool invocation
|
|
15
|
+
* - `"plugin"` : in-process plugin executor
|
|
16
|
+
* - `"fallback"` : last-resort echo / static handler
|
|
17
|
+
*/
|
|
18
|
+
export type MeshAgentKind = "ooda" | "llm-router" | "mcp-tool" | "plugin" | "fallback";
|
|
19
|
+
/** One step of the delegation chain (audit trail for capability narrowing). */
|
|
20
|
+
export interface DelegationLink {
|
|
21
|
+
/** Parent / delegator agent identifier. */
|
|
22
|
+
readonly from: string;
|
|
23
|
+
/** Child / delegatee agent identifier. */
|
|
24
|
+
readonly to: string;
|
|
25
|
+
/** Scope handed down (subset of parent's scope). */
|
|
26
|
+
readonly scope: ReadonlyArray<string>;
|
|
27
|
+
/** Budget handed down in EUR. */
|
|
28
|
+
readonly budget: number;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/mesh/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;;;;GAOG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,YAAY,GAAG,UAAU,GAAG,QAAQ,GAAG,UAAU,CAAC;AAEvF,+EAA+E;AAC/E,MAAM,WAAW,cAAc;IAC7B,2CAA2C;IAC3C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,oDAAoD;IACpD,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACtC,iCAAiC;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* src/mesh/types.ts
|
|
3
|
+
*
|
|
4
|
+
* Shared types for mesh.delegate() and dispatcher.
|
|
5
|
+
*
|
|
6
|
+
* @experimental — sprint-585. Renamed from "AgentKind" to "MeshAgentKind" to
|
|
7
|
+
* avoid clash with `registry/agent-capability.ts::AgentKind` (which uses
|
|
8
|
+
* uppercase enum values ARCHITECT/BUILDER/...).
|
|
9
|
+
*/
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/mesh/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
|