@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
|
@@ -4,12 +4,12 @@ export declare const BrainSkillExtractedV1: z.ZodObject<{
|
|
|
4
4
|
agentSource: z.ZodString;
|
|
5
5
|
confidence: z.ZodNumber;
|
|
6
6
|
}, "strict", z.ZodTypeAny, {
|
|
7
|
-
skillId: string;
|
|
8
|
-
agentSource: string;
|
|
9
7
|
confidence: number;
|
|
10
|
-
}, {
|
|
11
|
-
skillId: string;
|
|
12
8
|
agentSource: string;
|
|
9
|
+
skillId: string;
|
|
10
|
+
}, {
|
|
13
11
|
confidence: number;
|
|
12
|
+
agentSource: string;
|
|
13
|
+
skillId: string;
|
|
14
14
|
}>;
|
|
15
15
|
//# sourceMappingURL=brain.skill.extracted.v1.d.ts.map
|
|
@@ -5,13 +5,13 @@ export declare const CcCostAnomalyDetectedV1: z.ZodObject<{
|
|
|
5
5
|
actual: z.ZodNumber;
|
|
6
6
|
period: z.ZodString;
|
|
7
7
|
}, "strict", z.ZodTypeAny, {
|
|
8
|
-
expected: number;
|
|
9
8
|
agent: string;
|
|
9
|
+
expected: number;
|
|
10
10
|
actual: number;
|
|
11
11
|
period: string;
|
|
12
12
|
}, {
|
|
13
|
-
expected: number;
|
|
14
13
|
agent: string;
|
|
14
|
+
expected: number;
|
|
15
15
|
actual: number;
|
|
16
16
|
period: string;
|
|
17
17
|
}>;
|
|
@@ -6,16 +6,16 @@ export declare const CcCostRecordedV1: z.ZodObject<{
|
|
|
6
6
|
model: z.ZodString;
|
|
7
7
|
tenantId: z.ZodOptional<z.ZodString>;
|
|
8
8
|
}, "strict", z.ZodTypeAny, {
|
|
9
|
-
costUsd: number;
|
|
10
9
|
agent: string;
|
|
11
|
-
tokens: number;
|
|
12
10
|
model: string;
|
|
11
|
+
costUsd: number;
|
|
12
|
+
tokens: number;
|
|
13
13
|
tenantId?: string | undefined;
|
|
14
14
|
}, {
|
|
15
|
-
costUsd: number;
|
|
16
15
|
agent: string;
|
|
17
|
-
tokens: number;
|
|
18
16
|
model: string;
|
|
17
|
+
costUsd: number;
|
|
18
|
+
tokens: number;
|
|
19
19
|
tenantId?: string | undefined;
|
|
20
20
|
}>;
|
|
21
21
|
//# sourceMappingURL=cc.cost.recorded.v1.d.ts.map
|
|
@@ -26,29 +26,29 @@ export declare const CitadelSprintAnalyzedV1: z.ZodObject<{
|
|
|
26
26
|
}, "strict", z.ZodTypeAny, {
|
|
27
27
|
timestamp: string;
|
|
28
28
|
schemaVersion: string;
|
|
29
|
-
overallSeverity: "error" | "info" | "critical" | "warning";
|
|
30
|
-
sprintId: string;
|
|
31
|
-
healthScore: number;
|
|
32
29
|
insights: {
|
|
33
30
|
type: string;
|
|
34
31
|
description: string;
|
|
35
32
|
severity: "error" | "info" | "critical" | "warning";
|
|
36
33
|
metric: string;
|
|
37
34
|
}[];
|
|
35
|
+
sprintId: string;
|
|
36
|
+
healthScore: number;
|
|
37
|
+
overallSeverity: "error" | "info" | "critical" | "warning";
|
|
38
38
|
blockers: string[];
|
|
39
39
|
recommendations: string[];
|
|
40
40
|
}, {
|
|
41
41
|
timestamp: string;
|
|
42
42
|
schemaVersion: string;
|
|
43
|
-
overallSeverity: "error" | "info" | "critical" | "warning";
|
|
44
|
-
sprintId: string;
|
|
45
|
-
healthScore: number;
|
|
46
43
|
insights: {
|
|
47
44
|
type: string;
|
|
48
45
|
description: string;
|
|
49
46
|
severity: "error" | "info" | "critical" | "warning";
|
|
50
47
|
metric: string;
|
|
51
48
|
}[];
|
|
49
|
+
sprintId: string;
|
|
50
|
+
healthScore: number;
|
|
51
|
+
overallSeverity: "error" | "info" | "critical" | "warning";
|
|
52
52
|
blockers: string[];
|
|
53
53
|
recommendations: string[];
|
|
54
54
|
}>;
|
|
@@ -4,12 +4,12 @@ export declare const CitadelSprintClosedV1: z.ZodObject<{
|
|
|
4
4
|
completed: z.ZodNumber;
|
|
5
5
|
carryOver: z.ZodNumber;
|
|
6
6
|
}, "strict", z.ZodTypeAny, {
|
|
7
|
-
sprintId: string;
|
|
8
7
|
completed: number;
|
|
8
|
+
sprintId: string;
|
|
9
9
|
carryOver: number;
|
|
10
10
|
}, {
|
|
11
|
-
sprintId: string;
|
|
12
11
|
completed: number;
|
|
12
|
+
sprintId: string;
|
|
13
13
|
carryOver: number;
|
|
14
14
|
}>;
|
|
15
15
|
//# sourceMappingURL=citadel.sprint.closed.v1.d.ts.map
|
|
@@ -11,23 +11,23 @@ export declare const ForgeInboxReplyClassifiedV1: z.ZodObject<{
|
|
|
11
11
|
schemaVersion: z.ZodString;
|
|
12
12
|
}, "strict", z.ZodTypeAny, {
|
|
13
13
|
type: "INTERESTED" | "NOT_INTERESTED" | "BOUNCE" | "SPAM" | "OTHER";
|
|
14
|
+
priority: "HIGH" | "MEDIUM" | "LOW";
|
|
14
15
|
timestamp: string;
|
|
15
16
|
schemaVersion: string;
|
|
16
|
-
|
|
17
|
+
signal: string;
|
|
17
18
|
from: string;
|
|
18
19
|
subject: string;
|
|
19
|
-
|
|
20
|
-
signal: string;
|
|
20
|
+
uid: string;
|
|
21
21
|
nextAction: string;
|
|
22
22
|
}, {
|
|
23
23
|
type: "INTERESTED" | "NOT_INTERESTED" | "BOUNCE" | "SPAM" | "OTHER";
|
|
24
|
+
priority: "HIGH" | "MEDIUM" | "LOW";
|
|
24
25
|
timestamp: string;
|
|
25
26
|
schemaVersion: string;
|
|
26
|
-
|
|
27
|
+
signal: string;
|
|
27
28
|
from: string;
|
|
28
29
|
subject: string;
|
|
29
|
-
|
|
30
|
-
signal: string;
|
|
30
|
+
uid: string;
|
|
31
31
|
nextAction: string;
|
|
32
32
|
}>;
|
|
33
33
|
//# sourceMappingURL=forge.inbox.reply_classified.v1.d.ts.map
|
|
@@ -5,11 +5,11 @@ export declare const ForgeLeadQualifiedV1: z.ZodObject<{
|
|
|
5
5
|
source: z.ZodEnum<["inbound", "outbound", "referral"]>;
|
|
6
6
|
}, "strict", z.ZodTypeAny, {
|
|
7
7
|
source: "inbound" | "outbound" | "referral";
|
|
8
|
-
leadId: string;
|
|
9
8
|
score: number;
|
|
9
|
+
leadId: string;
|
|
10
10
|
}, {
|
|
11
11
|
source: "inbound" | "outbound" | "referral";
|
|
12
|
-
leadId: string;
|
|
13
12
|
score: number;
|
|
13
|
+
leadId: string;
|
|
14
14
|
}>;
|
|
15
15
|
//# sourceMappingURL=forge.lead.qualified.v1.d.ts.map
|
|
@@ -4,12 +4,12 @@ export declare const ForgeOutreachSentV1: z.ZodObject<{
|
|
|
4
4
|
channel: z.ZodEnum<["email", "linkedin", "x", "telegram"]>;
|
|
5
5
|
content: z.ZodString;
|
|
6
6
|
}, "strict", z.ZodTypeAny, {
|
|
7
|
-
leadId: string;
|
|
8
|
-
channel: "email" | "linkedin" | "x" | "telegram";
|
|
9
7
|
content: string;
|
|
10
|
-
|
|
8
|
+
channel: "telegram" | "email" | "linkedin" | "x";
|
|
11
9
|
leadId: string;
|
|
12
|
-
|
|
10
|
+
}, {
|
|
13
11
|
content: string;
|
|
12
|
+
channel: "telegram" | "email" | "linkedin" | "x";
|
|
13
|
+
leadId: string;
|
|
14
14
|
}>;
|
|
15
15
|
//# sourceMappingURL=forge.outreach.sent.v1.d.ts.map
|
|
@@ -4,12 +4,12 @@ export declare const IncidentDetectedV1: z.ZodObject<{
|
|
|
4
4
|
severity: z.ZodEnum<["low", "medium", "high", "critical"]>;
|
|
5
5
|
summary: z.ZodString;
|
|
6
6
|
}, "strict", z.ZodTypeAny, {
|
|
7
|
-
severity: "low" | "medium" | "high" | "critical";
|
|
8
7
|
source: string;
|
|
8
|
+
severity: "low" | "medium" | "high" | "critical";
|
|
9
9
|
summary: string;
|
|
10
10
|
}, {
|
|
11
|
-
severity: "low" | "medium" | "high" | "critical";
|
|
12
11
|
source: string;
|
|
12
|
+
severity: "low" | "medium" | "high" | "critical";
|
|
13
13
|
summary: string;
|
|
14
14
|
}>;
|
|
15
15
|
//# sourceMappingURL=incident.detected.v1.d.ts.map
|
|
@@ -10,12 +10,12 @@ export declare const VaubanGoalCheckedV1: z.ZodObject<{
|
|
|
10
10
|
schemaVersion: string;
|
|
11
11
|
goalId: string;
|
|
12
12
|
successRate: number;
|
|
13
|
-
alertLevel: "
|
|
13
|
+
alertLevel: "none" | "critical" | "warning";
|
|
14
14
|
}, {
|
|
15
15
|
timestamp: string;
|
|
16
16
|
schemaVersion: string;
|
|
17
17
|
goalId: string;
|
|
18
18
|
successRate: number;
|
|
19
|
-
alertLevel: "
|
|
19
|
+
alertLevel: "none" | "critical" | "warning";
|
|
20
20
|
}>;
|
|
21
21
|
//# sourceMappingURL=vauban.goal.checked.v1.d.ts.map
|
|
@@ -8,13 +8,13 @@ export declare const VaubanRebalancingCheckedV1: z.ZodObject<{
|
|
|
8
8
|
}, "strict", z.ZodTypeAny, {
|
|
9
9
|
timestamp: string;
|
|
10
10
|
schemaVersion: string;
|
|
11
|
-
alertLevel: "
|
|
11
|
+
alertLevel: "none" | "critical" | "warning";
|
|
12
12
|
portfolioId: string;
|
|
13
13
|
maxDrift: number;
|
|
14
14
|
}, {
|
|
15
15
|
timestamp: string;
|
|
16
16
|
schemaVersion: string;
|
|
17
|
-
alertLevel: "
|
|
17
|
+
alertLevel: "none" | "critical" | "warning";
|
|
18
18
|
portfolioId: string;
|
|
19
19
|
maxDrift: number;
|
|
20
20
|
}>;
|
|
@@ -8,14 +8,14 @@ export declare const VaubanTaxCheckedV1: z.ZodObject<{
|
|
|
8
8
|
}, "strict", z.ZodTypeAny, {
|
|
9
9
|
timestamp: string;
|
|
10
10
|
schemaVersion: string;
|
|
11
|
-
alertLevel: "critical" | "warning" | "none";
|
|
12
11
|
userId: string;
|
|
12
|
+
alertLevel: "none" | "critical" | "warning";
|
|
13
13
|
rulesTriggered: string[];
|
|
14
14
|
}, {
|
|
15
15
|
timestamp: string;
|
|
16
16
|
schemaVersion: string;
|
|
17
|
-
alertLevel: "critical" | "warning" | "none";
|
|
18
17
|
userId: string;
|
|
18
|
+
alertLevel: "none" | "critical" | "warning";
|
|
19
19
|
rulesTriggered: string[];
|
|
20
20
|
}>;
|
|
21
21
|
//# sourceMappingURL=vauban.tax.checked.v1.d.ts.map
|
|
@@ -10,16 +10,16 @@ export declare const VaubanVaultAnalyzedV1: z.ZodObject<{
|
|
|
10
10
|
expected: z.ZodUnion<[z.ZodString, z.ZodNumber]>;
|
|
11
11
|
description: z.ZodString;
|
|
12
12
|
}, "strip", z.ZodTypeAny, {
|
|
13
|
+
expected: string | number;
|
|
13
14
|
type: string;
|
|
14
15
|
description: string;
|
|
15
|
-
expected: string | number;
|
|
16
16
|
severity: "error" | "info" | "critical" | "warning";
|
|
17
17
|
metric: string;
|
|
18
18
|
current: string | number;
|
|
19
19
|
}, {
|
|
20
|
+
expected: string | number;
|
|
20
21
|
type: string;
|
|
21
22
|
description: string;
|
|
22
|
-
expected: string | number;
|
|
23
23
|
severity: "error" | "info" | "critical" | "warning";
|
|
24
24
|
metric: string;
|
|
25
25
|
current: string | number;
|
|
@@ -31,29 +31,29 @@ export declare const VaubanVaultAnalyzedV1: z.ZodObject<{
|
|
|
31
31
|
timestamp: string;
|
|
32
32
|
schemaVersion: string;
|
|
33
33
|
vaultId: string;
|
|
34
|
+
overallSeverity: "error" | "info" | "critical" | "warning";
|
|
34
35
|
tvlUsd: number;
|
|
35
36
|
anomalies: {
|
|
37
|
+
expected: string | number;
|
|
36
38
|
type: string;
|
|
37
39
|
description: string;
|
|
38
|
-
expected: string | number;
|
|
39
40
|
severity: "error" | "info" | "critical" | "warning";
|
|
40
41
|
metric: string;
|
|
41
42
|
current: string | number;
|
|
42
43
|
}[];
|
|
43
|
-
overallSeverity: "error" | "info" | "critical" | "warning";
|
|
44
44
|
}, {
|
|
45
45
|
timestamp: string;
|
|
46
46
|
schemaVersion: string;
|
|
47
47
|
vaultId: string;
|
|
48
|
+
overallSeverity: "error" | "info" | "critical" | "warning";
|
|
48
49
|
tvlUsd: number;
|
|
49
50
|
anomalies: {
|
|
51
|
+
expected: string | number;
|
|
50
52
|
type: string;
|
|
51
53
|
description: string;
|
|
52
|
-
expected: string | number;
|
|
53
54
|
severity: "error" | "info" | "critical" | "warning";
|
|
54
55
|
metric: string;
|
|
55
56
|
current: string | number;
|
|
56
57
|
}[];
|
|
57
|
-
overallSeverity: "error" | "info" | "critical" | "warning";
|
|
58
58
|
}>;
|
|
59
59
|
//# sourceMappingURL=vauban.vault.analyzed.v1.d.ts.map
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AgentPersona — load, save, and resolve a per-agent persona.
|
|
3
|
+
*
|
|
4
|
+
* Pipeline:
|
|
5
|
+
* 1. Resolve persona for agent X
|
|
6
|
+
* 2. base = DEFAULT_PERSONA
|
|
7
|
+
* 3. brain = loadFromBrain(X) (Tier 3 semantic memory query)
|
|
8
|
+
* 4. local = loadFromFile(`.cc/persona.yaml`) — optional
|
|
9
|
+
* 5. effective = merge(base, brain, local)
|
|
10
|
+
*
|
|
11
|
+
* Brain entries use category `agent-persona`, tags `["persona", agentId]`.
|
|
12
|
+
* The latest entry per agent wins (Brain query returns entries sorted by
|
|
13
|
+
* recency).
|
|
14
|
+
*
|
|
15
|
+
* @see ./persona-schema.ts
|
|
16
|
+
* @public
|
|
17
|
+
*/
|
|
18
|
+
import type { SemanticMemoryPort } from "../ports/brain.js";
|
|
19
|
+
import { type AgentPersona } from "./persona-schema.js";
|
|
20
|
+
export declare const PERSONA_BRAIN_CATEGORY = "agent-persona";
|
|
21
|
+
/** Tags used to query/archive a persona for a given agent. */
|
|
22
|
+
export declare function personaTags(agentId: string): string[];
|
|
23
|
+
/**
|
|
24
|
+
* Save (archive) a persona for an agent in Brain Tier 3 (semantic).
|
|
25
|
+
*
|
|
26
|
+
* The persona is serialized as JSON in the `content` field — keep this
|
|
27
|
+
* structured so future queries can parse it deterministically. Tags include
|
|
28
|
+
* the agent id so per-agent retrieval is precise.
|
|
29
|
+
*
|
|
30
|
+
* Returns the archived entry id, or null when the brain port returns null
|
|
31
|
+
* (e.g. replay mode, no brain configured).
|
|
32
|
+
*/
|
|
33
|
+
export declare function savePersonaToBrain(brain: SemanticMemoryPort, agentId: string, persona: AgentPersona): Promise<string | null>;
|
|
34
|
+
/**
|
|
35
|
+
* Query Brain for the latest persona for an agent.
|
|
36
|
+
*
|
|
37
|
+
* Returns the parsed persona or `null` if no entry is found (or if the
|
|
38
|
+
* latest entry's content does not parse).
|
|
39
|
+
*/
|
|
40
|
+
export declare function loadPersonaFromBrain(brain: SemanticMemoryPort, agentId: string): Promise<AgentPersona | null>;
|
|
41
|
+
/**
|
|
42
|
+
* Load a persona from a YAML file. Returns null if the file is missing or
|
|
43
|
+
* the content does not validate. Throws only on filesystem errors other
|
|
44
|
+
* than ENOENT.
|
|
45
|
+
*/
|
|
46
|
+
export declare function loadPersonaFromFile(path: string): Promise<AgentPersona | null>;
|
|
47
|
+
/**
|
|
48
|
+
* Persist a persona to a YAML file (overwrites). Validates first.
|
|
49
|
+
*/
|
|
50
|
+
export declare function savePersonaToFile(path: string, persona: AgentPersona): Promise<void>;
|
|
51
|
+
export interface ResolvePersonaOptions {
|
|
52
|
+
agentId: string;
|
|
53
|
+
brain?: SemanticMemoryPort;
|
|
54
|
+
localPath?: string;
|
|
55
|
+
}
|
|
56
|
+
export interface ResolvedPersona {
|
|
57
|
+
effective: AgentPersona;
|
|
58
|
+
/** Layers actually applied, in order (latest wins). */
|
|
59
|
+
layers: Array<"defaults" | "brain" | "local">;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Resolve the effective persona for an agent.
|
|
63
|
+
*
|
|
64
|
+
* Composition order (each layer overrides the previous):
|
|
65
|
+
* 1. DEFAULT_PERSONA
|
|
66
|
+
* 2. Brain entry (Tier 3 semantic, optional)
|
|
67
|
+
* 3. Local `.cc/persona.yaml` (optional)
|
|
68
|
+
*
|
|
69
|
+
* The returned `layers` array documents which sources contributed, useful
|
|
70
|
+
* for diagnostics (e.g. `cc persona show --explain`).
|
|
71
|
+
*/
|
|
72
|
+
export declare function resolvePersona(opts: ResolvePersonaOptions): Promise<ResolvedPersona>;
|
|
73
|
+
//# sourceMappingURL=agent-persona.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-persona.d.ts","sourceRoot":"","sources":["../../src/identity/agent-persona.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAKL,KAAK,YAAY,EAClB,MAAM,qBAAqB,CAAC;AAE7B,eAAO,MAAM,sBAAsB,kBAAkB,CAAC;AAEtD,8DAA8D;AAC9D,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAErD;AAID;;;;;;;;;GASG;AACH,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,kBAAkB,EACzB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAcxB;AAeD;;;;;GAKG;AACH,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,kBAAkB,EACzB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAyB9B;AAID;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAiB9B;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC,IAAI,CAAC,CAIf;AAID,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,kBAAkB,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,YAAY,CAAC;IACxB,uDAAuD;IACvD,MAAM,EAAE,KAAK,CAAC,UAAU,GAAG,OAAO,GAAG,OAAO,CAAC,CAAC;CAC/C;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,cAAc,CAClC,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC,eAAe,CAAC,CAkB1B"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AgentPersona — load, save, and resolve a per-agent persona.
|
|
3
|
+
*
|
|
4
|
+
* Pipeline:
|
|
5
|
+
* 1. Resolve persona for agent X
|
|
6
|
+
* 2. base = DEFAULT_PERSONA
|
|
7
|
+
* 3. brain = loadFromBrain(X) (Tier 3 semantic memory query)
|
|
8
|
+
* 4. local = loadFromFile(`.cc/persona.yaml`) — optional
|
|
9
|
+
* 5. effective = merge(base, brain, local)
|
|
10
|
+
*
|
|
11
|
+
* Brain entries use category `agent-persona`, tags `["persona", agentId]`.
|
|
12
|
+
* The latest entry per agent wins (Brain query returns entries sorted by
|
|
13
|
+
* recency).
|
|
14
|
+
*
|
|
15
|
+
* @see ./persona-schema.ts
|
|
16
|
+
* @public
|
|
17
|
+
*/
|
|
18
|
+
import { readFile, writeFile } from "node:fs/promises";
|
|
19
|
+
import { parse as parseYaml, stringify as stringifyYaml } from "yaml";
|
|
20
|
+
import { DEFAULT_PERSONA, mergePersona, PersonaSchema, validatePersona, } from "./persona-schema.js";
|
|
21
|
+
export const PERSONA_BRAIN_CATEGORY = "agent-persona";
|
|
22
|
+
/** Tags used to query/archive a persona for a given agent. */
|
|
23
|
+
export function personaTags(agentId) {
|
|
24
|
+
return ["persona", agentId];
|
|
25
|
+
}
|
|
26
|
+
// ─── Brain layer ────────────────────────────────────────────────────────────
|
|
27
|
+
/**
|
|
28
|
+
* Save (archive) a persona for an agent in Brain Tier 3 (semantic).
|
|
29
|
+
*
|
|
30
|
+
* The persona is serialized as JSON in the `content` field — keep this
|
|
31
|
+
* structured so future queries can parse it deterministically. Tags include
|
|
32
|
+
* the agent id so per-agent retrieval is precise.
|
|
33
|
+
*
|
|
34
|
+
* Returns the archived entry id, or null when the brain port returns null
|
|
35
|
+
* (e.g. replay mode, no brain configured).
|
|
36
|
+
*/
|
|
37
|
+
export async function savePersonaToBrain(brain, agentId, persona) {
|
|
38
|
+
validatePersona(persona);
|
|
39
|
+
// Wrap the JSON body with a discoverable header line — FTS-backed Brain
|
|
40
|
+
// backends use the query string as a keyword filter, so the content MUST
|
|
41
|
+
// contain the literal "persona" + agent id for `query("persona ...")` hits.
|
|
42
|
+
const content = `persona for agent ${agentId}\n${JSON.stringify(persona)}`;
|
|
43
|
+
const entry = await brain.archive({
|
|
44
|
+
content,
|
|
45
|
+
content_type: "persona",
|
|
46
|
+
category: PERSONA_BRAIN_CATEGORY,
|
|
47
|
+
tags: personaTags(agentId),
|
|
48
|
+
metadata: { agent_id: agentId, schema_version: 1 },
|
|
49
|
+
});
|
|
50
|
+
return entry?.id ?? null;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Extract the JSON body from a persona Brain entry (strips the header line).
|
|
54
|
+
* Returns null if the content doesn't follow the wrapper format.
|
|
55
|
+
*/
|
|
56
|
+
function extractPersonaJson(content) {
|
|
57
|
+
const nl = content.indexOf("\n");
|
|
58
|
+
if (nl === -1) {
|
|
59
|
+
// Backward-compat: legacy entries stored raw JSON.
|
|
60
|
+
return content;
|
|
61
|
+
}
|
|
62
|
+
return content.slice(nl + 1);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Query Brain for the latest persona for an agent.
|
|
66
|
+
*
|
|
67
|
+
* Returns the parsed persona or `null` if no entry is found (or if the
|
|
68
|
+
* latest entry's content does not parse).
|
|
69
|
+
*/
|
|
70
|
+
export async function loadPersonaFromBrain(brain, agentId) {
|
|
71
|
+
const results = await brain.query("persona", {
|
|
72
|
+
category: PERSONA_BRAIN_CATEGORY,
|
|
73
|
+
tags: personaTags(agentId),
|
|
74
|
+
limit: 5,
|
|
75
|
+
});
|
|
76
|
+
if (results.length === 0)
|
|
77
|
+
return null;
|
|
78
|
+
// Prefer the most recent entry by created_at if available.
|
|
79
|
+
const sorted = [...results].sort((a, b) => {
|
|
80
|
+
const ta = a.created_at ? Date.parse(a.created_at) : 0;
|
|
81
|
+
const tb = b.created_at ? Date.parse(b.created_at) : 0;
|
|
82
|
+
return tb - ta;
|
|
83
|
+
});
|
|
84
|
+
for (const entry of sorted) {
|
|
85
|
+
const json = extractPersonaJson(entry.content);
|
|
86
|
+
if (!json)
|
|
87
|
+
continue;
|
|
88
|
+
try {
|
|
89
|
+
const parsed = JSON.parse(json);
|
|
90
|
+
const validated = PersonaSchema.safeParse(parsed);
|
|
91
|
+
if (validated.success)
|
|
92
|
+
return validated.data;
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
// skip malformed entry, try next
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
// ─── File layer ─────────────────────────────────────────────────────────────
|
|
101
|
+
/**
|
|
102
|
+
* Load a persona from a YAML file. Returns null if the file is missing or
|
|
103
|
+
* the content does not validate. Throws only on filesystem errors other
|
|
104
|
+
* than ENOENT.
|
|
105
|
+
*/
|
|
106
|
+
export async function loadPersonaFromFile(path) {
|
|
107
|
+
let raw;
|
|
108
|
+
try {
|
|
109
|
+
raw = await readFile(path, "utf-8");
|
|
110
|
+
}
|
|
111
|
+
catch (err) {
|
|
112
|
+
const code = err.code;
|
|
113
|
+
if (code === "ENOENT")
|
|
114
|
+
return null;
|
|
115
|
+
throw err;
|
|
116
|
+
}
|
|
117
|
+
let parsed;
|
|
118
|
+
try {
|
|
119
|
+
parsed = parseYaml(raw);
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
return null;
|
|
123
|
+
}
|
|
124
|
+
const result = PersonaSchema.safeParse(parsed);
|
|
125
|
+
return result.success ? result.data : null;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Persist a persona to a YAML file (overwrites). Validates first.
|
|
129
|
+
*/
|
|
130
|
+
export async function savePersonaToFile(path, persona) {
|
|
131
|
+
const validated = validatePersona(persona);
|
|
132
|
+
const yaml = stringifyYaml(validated, { indent: 2 });
|
|
133
|
+
await writeFile(path, yaml, "utf-8");
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Resolve the effective persona for an agent.
|
|
137
|
+
*
|
|
138
|
+
* Composition order (each layer overrides the previous):
|
|
139
|
+
* 1. DEFAULT_PERSONA
|
|
140
|
+
* 2. Brain entry (Tier 3 semantic, optional)
|
|
141
|
+
* 3. Local `.cc/persona.yaml` (optional)
|
|
142
|
+
*
|
|
143
|
+
* The returned `layers` array documents which sources contributed, useful
|
|
144
|
+
* for diagnostics (e.g. `cc persona show --explain`).
|
|
145
|
+
*/
|
|
146
|
+
export async function resolvePersona(opts) {
|
|
147
|
+
const layers = ["defaults"];
|
|
148
|
+
let effective = DEFAULT_PERSONA;
|
|
149
|
+
if (opts.brain) {
|
|
150
|
+
const fromBrain = await loadPersonaFromBrain(opts.brain, opts.agentId);
|
|
151
|
+
if (fromBrain) {
|
|
152
|
+
effective = mergePersona(effective, fromBrain);
|
|
153
|
+
layers.push("brain");
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
if (opts.localPath) {
|
|
157
|
+
const fromFile = await loadPersonaFromFile(opts.localPath);
|
|
158
|
+
if (fromFile) {
|
|
159
|
+
effective = mergePersona(effective, fromFile);
|
|
160
|
+
layers.push("local");
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
return { effective, layers };
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=agent-persona.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-persona.js","sourceRoot":"","sources":["../../src/identity/agent-persona.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* buildPersonaPromptBlock — converts an AgentPersona into a system-prompt block.
|
|
3
|
+
*
|
|
4
|
+
* The output is a compact, model-neutral instruction block that can be prepended
|
|
5
|
+
* to any system prompt. It is intentionally terse — LLMs handle short, directive
|
|
6
|
+
* blocks better than verbose persona descriptions.
|
|
7
|
+
*
|
|
8
|
+
* Format contract:
|
|
9
|
+
* - Starts with a blank line so callers can safely concatenate to an existing
|
|
10
|
+
* system prompt with `${base}\n${buildPersonaPromptBlock(persona)}`.
|
|
11
|
+
* - Empty fields are omitted — the function never emits empty bullet points.
|
|
12
|
+
* - The block is bounded by `--- persona ---` / `--- end persona ---` markers
|
|
13
|
+
* for easy parsing / stripping in tests and audits.
|
|
14
|
+
*
|
|
15
|
+
* @public
|
|
16
|
+
*/
|
|
17
|
+
import type { AgentPersona } from "./persona-schema.js";
|
|
18
|
+
/**
|
|
19
|
+
* Build a system-prompt instruction block from a resolved `AgentPersona`.
|
|
20
|
+
*
|
|
21
|
+
* Returns an empty string if the persona has no actionable fields, so
|
|
22
|
+
* callers can unconditionally concatenate without emitting noise.
|
|
23
|
+
*/
|
|
24
|
+
export declare function buildPersonaPromptBlock(persona: AgentPersona): string;
|
|
25
|
+
//# sourceMappingURL=persona-prompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persona-prompt.d.ts","sourceRoot":"","sources":["../../src/identity/persona-prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CA0DrE"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* buildPersonaPromptBlock — converts an AgentPersona into a system-prompt block.
|
|
3
|
+
*
|
|
4
|
+
* The output is a compact, model-neutral instruction block that can be prepended
|
|
5
|
+
* to any system prompt. It is intentionally terse — LLMs handle short, directive
|
|
6
|
+
* blocks better than verbose persona descriptions.
|
|
7
|
+
*
|
|
8
|
+
* Format contract:
|
|
9
|
+
* - Starts with a blank line so callers can safely concatenate to an existing
|
|
10
|
+
* system prompt with `${base}\n${buildPersonaPromptBlock(persona)}`.
|
|
11
|
+
* - Empty fields are omitted — the function never emits empty bullet points.
|
|
12
|
+
* - The block is bounded by `--- persona ---` / `--- end persona ---` markers
|
|
13
|
+
* for easy parsing / stripping in tests and audits.
|
|
14
|
+
*
|
|
15
|
+
* @public
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* Build a system-prompt instruction block from a resolved `AgentPersona`.
|
|
19
|
+
*
|
|
20
|
+
* Returns an empty string if the persona has no actionable fields, so
|
|
21
|
+
* callers can unconditionally concatenate without emitting noise.
|
|
22
|
+
*/
|
|
23
|
+
export function buildPersonaPromptBlock(persona) {
|
|
24
|
+
const lines = [];
|
|
25
|
+
const { identity, traits, domain_expertise, communication } = persona;
|
|
26
|
+
if (identity?.name) {
|
|
27
|
+
lines.push(`You are ${identity.name}.`);
|
|
28
|
+
}
|
|
29
|
+
if (identity?.role) {
|
|
30
|
+
lines.push(`Role: ${identity.role}.`);
|
|
31
|
+
}
|
|
32
|
+
const styleLines = [];
|
|
33
|
+
if (identity?.tone)
|
|
34
|
+
styleLines.push(identity.tone);
|
|
35
|
+
if (identity?.formality)
|
|
36
|
+
styleLines.push(identity.formality);
|
|
37
|
+
if (styleLines.length) {
|
|
38
|
+
lines.push(`Communication style: ${styleLines.join(", ")}.`);
|
|
39
|
+
}
|
|
40
|
+
if (identity?.language && identity.language !== "en") {
|
|
41
|
+
lines.push(`Respond in ${identity.language}.`);
|
|
42
|
+
}
|
|
43
|
+
if (traits && traits.length > 0) {
|
|
44
|
+
lines.push(`Traits: ${traits.join(", ")}.`);
|
|
45
|
+
}
|
|
46
|
+
if (domain_expertise && domain_expertise.length > 0) {
|
|
47
|
+
lines.push(`Domain expertise: ${domain_expertise.join(", ")}.`);
|
|
48
|
+
}
|
|
49
|
+
if (communication?.max_response_length) {
|
|
50
|
+
lines.push(`Keep responses under ${communication.max_response_length} characters.`);
|
|
51
|
+
}
|
|
52
|
+
if (communication?.explain_reasoning === "always") {
|
|
53
|
+
lines.push("Always explain your reasoning step by step.");
|
|
54
|
+
}
|
|
55
|
+
else if (communication?.explain_reasoning === "never") {
|
|
56
|
+
lines.push("Do not explain your reasoning. Emit results only.");
|
|
57
|
+
}
|
|
58
|
+
if (communication?.acknowledgment_style === "none") {
|
|
59
|
+
lines.push('Do not acknowledge the task. Skip preamble like "Sure," or "I will".');
|
|
60
|
+
}
|
|
61
|
+
else if (communication?.acknowledgment_style === "minimal") {
|
|
62
|
+
lines.push("Skip task acknowledgment preamble. Go directly to output.");
|
|
63
|
+
}
|
|
64
|
+
if (communication?.use_analogies === false) {
|
|
65
|
+
lines.push("Do not use analogies.");
|
|
66
|
+
}
|
|
67
|
+
if (lines.length === 0)
|
|
68
|
+
return "";
|
|
69
|
+
return `\n--- persona ---\n${lines.join("\n")}\n--- end persona ---`;
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=persona-prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persona-prompt.js","sourceRoot":"","sources":["../../src/identity/persona-prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CAAC,OAAqB;IAC3D,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAAgB,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC;IAEtE,IAAI,QAAQ,EAAE,IAAI,EAAE,CAAC;QACnB,KAAK,CAAC,IAAI,CAAC,WAAW,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC;IAC1C,CAAC;IACD,IAAI,QAAQ,EAAE,IAAI,EAAE,CAAC;QACnB,KAAK,CAAC,IAAI,CAAC,SAAS,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC;IACxC,CAAC;IAED,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,IAAI,QAAQ,EAAE,IAAI;QAAE,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACnD,IAAI,QAAQ,EAAE,SAAS;QAAE,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC7D,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;QACtB,KAAK,CAAC,IAAI,CAAC,wBAAwB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/D,CAAC;IAED,IAAI,QAAQ,EAAE,QAAQ,IAAI,QAAQ,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;QACrD,KAAK,CAAC,IAAI,CAAC,cAAc,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC;IACjD,CAAC;IAED,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9C,CAAC;IAED,IAAI,gBAAgB,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpD,KAAK,CAAC,IAAI,CAAC,qBAAqB,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClE,CAAC;IAED,IAAI,aAAa,EAAE,mBAAmB,EAAE,CAAC;QACvC,KAAK,CAAC,IAAI,CACR,wBAAwB,aAAa,CAAC,mBAAmB,cAAc,CACxE,CAAC;IACJ,CAAC;IAED,IAAI,aAAa,EAAE,iBAAiB,KAAK,QAAQ,EAAE,CAAC;QAClD,KAAK,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;IAC5D,CAAC;SAAM,IAAI,aAAa,EAAE,iBAAiB,KAAK,OAAO,EAAE,CAAC;QACxD,KAAK,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;IAClE,CAAC;IAED,IAAI,aAAa,EAAE,oBAAoB,KAAK,MAAM,EAAE,CAAC;QACnD,KAAK,CAAC,IAAI,CACR,sEAAsE,CACvE,CAAC;IACJ,CAAC;SAAM,IAAI,aAAa,EAAE,oBAAoB,KAAK,SAAS,EAAE,CAAC;QAC7D,KAAK,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;IAC1E,CAAC;IAED,IAAI,aAAa,EAAE,aAAa,KAAK,KAAK,EAAE,CAAC;QAC3C,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IACtC,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAElC,OAAO,sBAAsB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC;AACvE,CAAC"}
|