@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.
Files changed (506) hide show
  1. package/CONTRACT.md +6401 -813
  2. package/dist/adapters/llm/anthropic-direct.d.ts +1 -0
  3. package/dist/adapters/llm/anthropic-direct.d.ts.map +1 -1
  4. package/dist/adapters/llm/anthropic-direct.js +43 -0
  5. package/dist/adapters/llm/anthropic-direct.js.map +1 -1
  6. package/dist/adapters/llm/cascade.d.ts.map +1 -1
  7. package/dist/adapters/llm/cascade.js +57 -14
  8. package/dist/adapters/llm/cascade.js.map +1 -1
  9. package/dist/adapters/llm/litellm.d.ts +2 -0
  10. package/dist/adapters/llm/litellm.d.ts.map +1 -1
  11. package/dist/adapters/llm/litellm.js +44 -0
  12. package/dist/adapters/llm/litellm.js.map +1 -1
  13. package/dist/compute/difficulty-estimator.d.ts +53 -0
  14. package/dist/compute/difficulty-estimator.d.ts.map +1 -0
  15. package/dist/compute/difficulty-estimator.js +82 -0
  16. package/dist/compute/difficulty-estimator.js.map +1 -0
  17. package/dist/compute/strategies/mixture-of-agents.d.ts +40 -0
  18. package/dist/compute/strategies/mixture-of-agents.d.ts.map +1 -0
  19. package/dist/compute/strategies/mixture-of-agents.js +110 -0
  20. package/dist/compute/strategies/mixture-of-agents.js.map +1 -0
  21. package/dist/compute/strategies/tree-of-thoughts.d.ts +48 -0
  22. package/dist/compute/strategies/tree-of-thoughts.d.ts.map +1 -0
  23. package/dist/compute/strategies/tree-of-thoughts.js +242 -0
  24. package/dist/compute/strategies/tree-of-thoughts.js.map +1 -0
  25. package/dist/compute/strategies/two-phase-orient.d.ts +72 -0
  26. package/dist/compute/strategies/two-phase-orient.d.ts.map +1 -0
  27. package/dist/compute/strategies/two-phase-orient.js +85 -0
  28. package/dist/compute/strategies/two-phase-orient.js.map +1 -0
  29. package/dist/constitution/types.d.ts +10 -10
  30. package/dist/container/protocol.d.ts +134 -0
  31. package/dist/container/protocol.d.ts.map +1 -0
  32. package/dist/container/protocol.js +157 -0
  33. package/dist/container/protocol.js.map +1 -0
  34. package/dist/container/runtime.d.ts +140 -0
  35. package/dist/container/runtime.d.ts.map +1 -0
  36. package/dist/container/runtime.js +256 -0
  37. package/dist/container/runtime.js.map +1 -0
  38. package/dist/events/catalogue.d.ts +327 -30
  39. package/dist/events/catalogue.d.ts.map +1 -1
  40. package/dist/events/catalogue.js +18 -0
  41. package/dist/events/catalogue.js.map +1 -1
  42. package/dist/events/index.d.ts +9 -0
  43. package/dist/events/index.d.ts.map +1 -1
  44. package/dist/events/index.js +9 -0
  45. package/dist/events/index.js.map +1 -1
  46. package/dist/events/schemas/agent.completed.v1.d.ts +4 -4
  47. package/dist/events/schemas/agent.failed.v1.d.ts +2 -2
  48. package/dist/events/schemas/agent.hitl_resolved.v1.d.ts +2 -2
  49. package/dist/events/schemas/agent.started.v1.d.ts +2 -2
  50. package/dist/events/schemas/brain.skill.extracted.v1.d.ts +4 -4
  51. package/dist/events/schemas/cc.cost.anomaly_detected.v1.d.ts +2 -2
  52. package/dist/events/schemas/cc.cost.recorded.v1.d.ts +4 -4
  53. package/dist/events/schemas/citadel.sprint.analyzed.v1.d.ts +55 -0
  54. package/dist/events/schemas/citadel.sprint.analyzed.v1.d.ts.map +1 -0
  55. package/dist/events/schemas/citadel.sprint.analyzed.v1.js +22 -0
  56. package/dist/events/schemas/citadel.sprint.analyzed.v1.js.map +1 -0
  57. package/dist/events/schemas/citadel.sprint.closed.v1.d.ts +2 -2
  58. package/dist/events/schemas/forge.inbox.reply_classified.v1.d.ts +33 -0
  59. package/dist/events/schemas/forge.inbox.reply_classified.v1.d.ts.map +1 -0
  60. package/dist/events/schemas/forge.inbox.reply_classified.v1.js +15 -0
  61. package/dist/events/schemas/forge.inbox.reply_classified.v1.js.map +1 -0
  62. package/dist/events/schemas/forge.lead.qualified.v1.d.ts +2 -2
  63. package/dist/events/schemas/forge.outreach.sent.v1.d.ts +4 -4
  64. package/dist/events/schemas/incident.detected.v1.d.ts +2 -2
  65. package/dist/events/schemas/vauban-finance.forecast.generated.v1.d.ts +21 -0
  66. package/dist/events/schemas/vauban-finance.forecast.generated.v1.d.ts.map +1 -0
  67. package/dist/events/schemas/vauban-finance.forecast.generated.v1.js +11 -0
  68. package/dist/events/schemas/vauban-finance.forecast.generated.v1.js.map +1 -0
  69. package/dist/events/schemas/vauban-finance.trade.executed.v1.d.ts +24 -0
  70. package/dist/events/schemas/vauban-finance.trade.executed.v1.d.ts.map +1 -0
  71. package/dist/events/schemas/vauban-finance.trade.executed.v1.js +12 -0
  72. package/dist/events/schemas/vauban-finance.trade.executed.v1.js.map +1 -0
  73. package/dist/events/schemas/vauban.goal.checked.v1.d.ts +21 -0
  74. package/dist/events/schemas/vauban.goal.checked.v1.d.ts.map +1 -0
  75. package/dist/events/schemas/vauban.goal.checked.v1.js +11 -0
  76. package/dist/events/schemas/vauban.goal.checked.v1.js.map +1 -0
  77. package/dist/events/schemas/vauban.rebalancing.checked.v1.d.ts +21 -0
  78. package/dist/events/schemas/vauban.rebalancing.checked.v1.d.ts.map +1 -0
  79. package/dist/events/schemas/vauban.rebalancing.checked.v1.js +11 -0
  80. package/dist/events/schemas/vauban.rebalancing.checked.v1.js.map +1 -0
  81. package/dist/events/schemas/vauban.tax.checked.v1.d.ts +21 -0
  82. package/dist/events/schemas/vauban.tax.checked.v1.d.ts.map +1 -0
  83. package/dist/events/schemas/vauban.tax.checked.v1.js +11 -0
  84. package/dist/events/schemas/vauban.tax.checked.v1.js.map +1 -0
  85. package/dist/events/schemas/vauban.vault.analyzed.v1.d.ts +59 -0
  86. package/dist/events/schemas/vauban.vault.analyzed.v1.d.ts.map +1 -0
  87. package/dist/events/schemas/vauban.vault.analyzed.v1.js +19 -0
  88. package/dist/events/schemas/vauban.vault.analyzed.v1.js.map +1 -0
  89. package/dist/events/schemas/vauban.vault.compounded.v1.d.ts +24 -0
  90. package/dist/events/schemas/vauban.vault.compounded.v1.d.ts.map +1 -0
  91. package/dist/events/schemas/vauban.vault.compounded.v1.js +12 -0
  92. package/dist/events/schemas/vauban.vault.compounded.v1.js.map +1 -0
  93. package/dist/identity/agent-persona.d.ts +73 -0
  94. package/dist/identity/agent-persona.d.ts.map +1 -0
  95. package/dist/identity/agent-persona.js +165 -0
  96. package/dist/identity/agent-persona.js.map +1 -0
  97. package/dist/identity/persona-prompt.d.ts +25 -0
  98. package/dist/identity/persona-prompt.d.ts.map +1 -0
  99. package/dist/identity/persona-prompt.js +71 -0
  100. package/dist/identity/persona-prompt.js.map +1 -0
  101. package/dist/identity/persona-schema.d.ts +120 -0
  102. package/dist/identity/persona-schema.d.ts.map +1 -0
  103. package/dist/identity/persona-schema.js +103 -0
  104. package/dist/identity/persona-schema.js.map +1 -0
  105. package/dist/index.d.ts +37 -2
  106. package/dist/index.d.ts.map +1 -1
  107. package/dist/index.js +29 -1
  108. package/dist/index.js.map +1 -1
  109. package/dist/loop/index.d.ts +1 -1
  110. package/dist/loop/index.d.ts.map +1 -1
  111. package/dist/loop/index.js.map +1 -1
  112. package/dist/loop/minimal-loop.js +293 -287
  113. package/dist/loop/sdk-loop.d.ts +1 -3
  114. package/dist/loop/sdk-loop.d.ts.map +1 -1
  115. package/dist/loop/sdk-loop.js +1 -1
  116. package/dist/loop/sdk-loop.js.map +1 -1
  117. package/dist/memory/episodic-rrf.d.ts +114 -0
  118. package/dist/memory/episodic-rrf.d.ts.map +1 -0
  119. package/dist/memory/episodic-rrf.js +148 -0
  120. package/dist/memory/episodic-rrf.js.map +1 -0
  121. package/dist/mesh/attenuation.d.ts +78 -0
  122. package/dist/mesh/attenuation.d.ts.map +1 -0
  123. package/dist/mesh/attenuation.js +141 -0
  124. package/dist/mesh/attenuation.js.map +1 -0
  125. package/dist/mesh/delegate.d.ts +96 -0
  126. package/dist/mesh/delegate.d.ts.map +1 -0
  127. package/dist/mesh/delegate.js +172 -0
  128. package/dist/mesh/delegate.js.map +1 -0
  129. package/dist/mesh/dispatcher.d.ts +119 -0
  130. package/dist/mesh/dispatcher.d.ts.map +1 -0
  131. package/dist/mesh/dispatcher.js +207 -0
  132. package/dist/mesh/dispatcher.js.map +1 -0
  133. package/dist/mesh/index.d.ts +12 -0
  134. package/dist/mesh/index.d.ts.map +1 -0
  135. package/dist/mesh/index.js +11 -0
  136. package/dist/mesh/index.js.map +1 -0
  137. package/dist/mesh/types.d.ts +30 -0
  138. package/dist/mesh/types.d.ts.map +1 -0
  139. package/dist/mesh/types.js +11 -0
  140. package/dist/mesh/types.js.map +1 -0
  141. package/dist/orchestration/ooda/skills.d.ts +104 -0
  142. package/dist/orchestration/ooda/skills.d.ts.map +1 -1
  143. package/dist/orchestration/ooda/skills.js +106 -0
  144. package/dist/orchestration/ooda/skills.js.map +1 -1
  145. package/dist/orchestration/ooda/types.d.ts +3 -8
  146. package/dist/orchestration/ooda/types.d.ts.map +1 -1
  147. package/dist/ports/bastion-action.contract.test.d.ts +11 -0
  148. package/dist/ports/bastion-action.contract.test.d.ts.map +1 -0
  149. package/dist/ports/bastion-action.contract.test.js +238 -0
  150. package/dist/ports/bastion-action.contract.test.js.map +1 -0
  151. package/dist/ports/bastion-action.d.ts +133 -0
  152. package/dist/ports/bastion-action.d.ts.map +1 -0
  153. package/dist/ports/bastion-action.js +73 -0
  154. package/dist/ports/bastion-action.js.map +1 -0
  155. package/dist/ports/brain.d.ts +31 -0
  156. package/dist/ports/brain.d.ts.map +1 -1
  157. package/dist/ports/brain.js +115 -1
  158. package/dist/ports/brain.js.map +1 -1
  159. package/dist/ports/citadel-action.contract.test.d.ts +11 -0
  160. package/dist/ports/citadel-action.contract.test.d.ts.map +1 -0
  161. package/dist/ports/citadel-action.contract.test.js +317 -0
  162. package/dist/ports/citadel-action.contract.test.js.map +1 -0
  163. package/dist/ports/citadel-action.d.ts +111 -0
  164. package/dist/ports/citadel-action.d.ts.map +1 -0
  165. package/dist/ports/citadel-action.js +62 -0
  166. package/dist/ports/citadel-action.js.map +1 -0
  167. package/dist/ports/compliance-contract.d.ts +123 -0
  168. package/dist/ports/compliance-contract.d.ts.map +1 -0
  169. package/dist/ports/compliance-contract.js +35 -0
  170. package/dist/ports/compliance-contract.js.map +1 -0
  171. package/dist/ports/db.d.ts +38 -0
  172. package/dist/ports/db.d.ts.map +1 -1
  173. package/dist/ports/db.js +88 -1
  174. package/dist/ports/db.js.map +1 -1
  175. package/dist/ports/delegation.contract.test.d.ts +9 -0
  176. package/dist/ports/delegation.contract.test.d.ts.map +1 -0
  177. package/dist/ports/delegation.contract.test.js +337 -0
  178. package/dist/ports/delegation.contract.test.js.map +1 -0
  179. package/dist/ports/delegation.d.ts +134 -0
  180. package/dist/ports/delegation.d.ts.map +1 -0
  181. package/dist/ports/delegation.js +105 -0
  182. package/dist/ports/delegation.js.map +1 -0
  183. package/dist/ports/event-bus.d.ts +29 -13
  184. package/dist/ports/event-bus.d.ts.map +1 -1
  185. package/dist/ports/event-bus.js +106 -1
  186. package/dist/ports/event-bus.js.map +1 -1
  187. package/dist/ports/federation.contract.test.d.ts +9 -0
  188. package/dist/ports/federation.contract.test.d.ts.map +1 -0
  189. package/dist/ports/federation.contract.test.js +279 -0
  190. package/dist/ports/federation.contract.test.js.map +1 -0
  191. package/dist/ports/federation.d.ts +140 -0
  192. package/dist/ports/federation.d.ts.map +1 -0
  193. package/dist/ports/federation.js +57 -0
  194. package/dist/ports/federation.js.map +1 -0
  195. package/dist/ports/index.d.ts +28 -2
  196. package/dist/ports/index.d.ts.map +1 -1
  197. package/dist/ports/index.js +17 -2
  198. package/dist/ports/index.js.map +1 -1
  199. package/dist/ports/llm-provider.d.ts +37 -0
  200. package/dist/ports/llm-provider.d.ts.map +1 -1
  201. package/dist/ports/llm-provider.js +99 -1
  202. package/dist/ports/llm-provider.js.map +1 -1
  203. package/dist/ports/logger.d.ts +27 -0
  204. package/dist/ports/logger.d.ts.map +1 -1
  205. package/dist/ports/logger.js +87 -0
  206. package/dist/ports/logger.js.map +1 -1
  207. package/dist/ports/manifest-registry.contract.test.d.ts +9 -0
  208. package/dist/ports/manifest-registry.contract.test.d.ts.map +1 -0
  209. package/dist/ports/manifest-registry.contract.test.js +246 -0
  210. package/dist/ports/manifest-registry.contract.test.js.map +1 -0
  211. package/dist/ports/manifest-registry.d.ts +116 -0
  212. package/dist/ports/manifest-registry.d.ts.map +1 -0
  213. package/dist/ports/manifest-registry.js +79 -0
  214. package/dist/ports/manifest-registry.js.map +1 -0
  215. package/dist/ports/observability.contract.test.d.ts +12 -0
  216. package/dist/ports/observability.contract.test.d.ts.map +1 -0
  217. package/dist/ports/observability.contract.test.js +260 -0
  218. package/dist/ports/observability.contract.test.js.map +1 -0
  219. package/dist/ports/observability.d.ts +98 -0
  220. package/dist/ports/observability.d.ts.map +1 -0
  221. package/dist/ports/observability.js +59 -0
  222. package/dist/ports/observability.js.map +1 -0
  223. package/dist/ports/outcome.d.ts +26 -0
  224. package/dist/ports/outcome.d.ts.map +1 -1
  225. package/dist/ports/outcome.js +62 -1
  226. package/dist/ports/outcome.js.map +1 -1
  227. package/dist/ports/privacy.contract.test.d.ts +12 -0
  228. package/dist/ports/privacy.contract.test.d.ts.map +1 -0
  229. package/dist/ports/privacy.contract.test.js +325 -0
  230. package/dist/ports/privacy.contract.test.js.map +1 -0
  231. package/dist/ports/privacy.d.ts +132 -0
  232. package/dist/ports/privacy.d.ts.map +1 -0
  233. package/dist/ports/privacy.js +83 -0
  234. package/dist/ports/privacy.js.map +1 -0
  235. package/dist/ports/tenant-context.contract.test.d.ts +14 -0
  236. package/dist/ports/tenant-context.contract.test.d.ts.map +1 -0
  237. package/dist/ports/tenant-context.contract.test.js +352 -0
  238. package/dist/ports/tenant-context.contract.test.js.map +1 -0
  239. package/dist/ports/tenant-context.d.ts +103 -0
  240. package/dist/ports/tenant-context.d.ts.map +1 -0
  241. package/dist/ports/tenant-context.js +48 -0
  242. package/dist/ports/tenant-context.js.map +1 -0
  243. package/dist/ports/vauban-finance-action.contract.test.d.ts +11 -0
  244. package/dist/ports/vauban-finance-action.contract.test.d.ts.map +1 -0
  245. package/dist/ports/vauban-finance-action.contract.test.js +260 -0
  246. package/dist/ports/vauban-finance-action.contract.test.js.map +1 -0
  247. package/dist/ports/vauban-finance-action.d.ts +106 -0
  248. package/dist/ports/vauban-finance-action.d.ts.map +1 -0
  249. package/dist/ports/vauban-finance-action.js +60 -0
  250. package/dist/ports/vauban-finance-action.js.map +1 -0
  251. package/dist/ports/workflow-runtime.d.ts +204 -0
  252. package/dist/ports/workflow-runtime.d.ts.map +1 -0
  253. package/dist/ports/workflow-runtime.js +72 -0
  254. package/dist/ports/workflow-runtime.js.map +1 -0
  255. package/dist/proof/cert-verify.d.ts +80 -0
  256. package/dist/proof/cert-verify.d.ts.map +1 -0
  257. package/dist/proof/cert-verify.js +178 -0
  258. package/dist/proof/cert-verify.js.map +1 -0
  259. package/dist/replay/replay.d.ts.map +1 -1
  260. package/dist/replay/replay.js +5 -1
  261. package/dist/replay/replay.js.map +1 -1
  262. package/dist/retry/index.d.ts +129 -0
  263. package/dist/retry/index.d.ts.map +1 -0
  264. package/dist/retry/index.js +156 -0
  265. package/dist/retry/index.js.map +1 -0
  266. package/dist/retry/presets.d.ts +39 -0
  267. package/dist/retry/presets.d.ts.map +1 -0
  268. package/dist/retry/presets.js +69 -0
  269. package/dist/retry/presets.js.map +1 -0
  270. package/dist/skill-loop/ab-runner.d.ts +67 -0
  271. package/dist/skill-loop/ab-runner.d.ts.map +1 -0
  272. package/dist/skill-loop/ab-runner.js +160 -0
  273. package/dist/skill-loop/ab-runner.js.map +1 -0
  274. package/dist/skill-loop/adoption.d.ts +67 -0
  275. package/dist/skill-loop/adoption.d.ts.map +1 -0
  276. package/dist/skill-loop/adoption.js +126 -0
  277. package/dist/skill-loop/adoption.js.map +1 -0
  278. package/dist/skill-loop/candidate.d.ts +45 -0
  279. package/dist/skill-loop/candidate.d.ts.map +1 -0
  280. package/dist/skill-loop/candidate.js +43 -0
  281. package/dist/skill-loop/candidate.js.map +1 -0
  282. package/dist/skill-loop/evaluator.d.ts +42 -0
  283. package/dist/skill-loop/evaluator.d.ts.map +1 -0
  284. package/dist/skill-loop/evaluator.js +184 -0
  285. package/dist/skill-loop/evaluator.js.map +1 -0
  286. package/dist/skill-loop/index.d.ts +27 -0
  287. package/dist/skill-loop/index.d.ts.map +1 -0
  288. package/dist/skill-loop/index.js +27 -0
  289. package/dist/skill-loop/index.js.map +1 -0
  290. package/dist/skill-loop/reflexion-replay.d.ts +87 -0
  291. package/dist/skill-loop/reflexion-replay.d.ts.map +1 -0
  292. package/dist/skill-loop/reflexion-replay.js +110 -0
  293. package/dist/skill-loop/reflexion-replay.js.map +1 -0
  294. package/dist/skill-loop/sign-off.d.ts +88 -0
  295. package/dist/skill-loop/sign-off.d.ts.map +1 -0
  296. package/dist/skill-loop/sign-off.js +146 -0
  297. package/dist/skill-loop/sign-off.js.map +1 -0
  298. package/dist/skill-loop/value-metric.d.ts +55 -0
  299. package/dist/skill-loop/value-metric.d.ts.map +1 -0
  300. package/dist/skill-loop/value-metric.js +69 -0
  301. package/dist/skill-loop/value-metric.js.map +1 -0
  302. package/dist/skill-loop/versioning.d.ts +36 -0
  303. package/dist/skill-loop/versioning.d.ts.map +1 -0
  304. package/dist/skill-loop/versioning.js +47 -0
  305. package/dist/skill-loop/versioning.js.map +1 -0
  306. package/dist/skill-manifest/anchor.d.ts +91 -0
  307. package/dist/skill-manifest/anchor.d.ts.map +1 -0
  308. package/dist/skill-manifest/anchor.js +331 -0
  309. package/dist/skill-manifest/anchor.js.map +1 -0
  310. package/dist/skill-manifest/builder.d.ts +47 -0
  311. package/dist/skill-manifest/builder.d.ts.map +1 -0
  312. package/dist/skill-manifest/builder.js +93 -0
  313. package/dist/skill-manifest/builder.js.map +1 -0
  314. package/dist/skill-manifest/index.d.ts +13 -0
  315. package/dist/skill-manifest/index.d.ts.map +1 -0
  316. package/dist/skill-manifest/index.js +9 -0
  317. package/dist/skill-manifest/index.js.map +1 -0
  318. package/dist/skill-manifest/types.d.ts +67 -0
  319. package/dist/skill-manifest/types.d.ts.map +1 -0
  320. package/dist/skill-manifest/types.js +16 -0
  321. package/dist/skill-manifest/types.js.map +1 -0
  322. package/dist/skill-manifest/verifier.d.ts +42 -0
  323. package/dist/skill-manifest/verifier.d.ts.map +1 -0
  324. package/dist/skill-manifest/verifier.js +136 -0
  325. package/dist/skill-manifest/verifier.js.map +1 -0
  326. package/dist/skills/brain-query.d.ts +4 -4
  327. package/dist/skills/brain-store.d.ts +6 -6
  328. package/dist/skills/errors.d.ts +15 -0
  329. package/dist/skills/errors.d.ts.map +1 -1
  330. package/dist/skills/errors.js +21 -0
  331. package/dist/skills/errors.js.map +1 -1
  332. package/dist/skills/hitl-request.d.ts +2 -2
  333. package/dist/skills/index.d.ts +3 -1
  334. package/dist/skills/index.d.ts.map +1 -1
  335. package/dist/skills/index.js +4 -1
  336. package/dist/skills/index.js.map +1 -1
  337. package/dist/skills/markdown/loader.d.ts +52 -0
  338. package/dist/skills/markdown/loader.d.ts.map +1 -0
  339. package/dist/skills/markdown/loader.js +93 -0
  340. package/dist/skills/markdown/loader.js.map +1 -0
  341. package/dist/skills/markdown/schema.d.ts +432 -0
  342. package/dist/skills/markdown/schema.d.ts.map +1 -0
  343. package/dist/skills/markdown/schema.js +121 -0
  344. package/dist/skills/markdown/schema.js.map +1 -0
  345. package/dist/skills/poc-md-loader/markdown-loader.d.ts +77 -0
  346. package/dist/skills/poc-md-loader/markdown-loader.d.ts.map +1 -0
  347. package/dist/skills/poc-md-loader/markdown-loader.js +125 -0
  348. package/dist/skills/poc-md-loader/markdown-loader.js.map +1 -0
  349. package/dist/skills/poc-md-loader/runner.d.ts +24 -0
  350. package/dist/skills/poc-md-loader/runner.d.ts.map +1 -0
  351. package/dist/skills/poc-md-loader/runner.js +57 -0
  352. package/dist/skills/poc-md-loader/runner.js.map +1 -0
  353. package/dist/skills/poc-md-loader/vitest.poc.config.d.ts +3 -0
  354. package/dist/skills/poc-md-loader/vitest.poc.config.d.ts.map +1 -0
  355. package/dist/skills/poc-md-loader/vitest.poc.config.js +13 -0
  356. package/dist/skills/poc-md-loader/vitest.poc.config.js.map +1 -0
  357. package/dist/skills/poc-md-loader/web-search/script.d.ts +33 -0
  358. package/dist/skills/poc-md-loader/web-search/script.d.ts.map +1 -0
  359. package/dist/skills/poc-md-loader/web-search/script.js +75 -0
  360. package/dist/skills/poc-md-loader/web-search/script.js.map +1 -0
  361. package/dist/skills/record-outcome.d.ts +4 -4
  362. package/dist/skills/send-email.d.ts.map +1 -1
  363. package/dist/skills/send-email.js +15 -3
  364. package/dist/skills/send-email.js.map +1 -1
  365. package/dist/skills/slack-notify.d.ts +4 -4
  366. package/dist/skills/starknet-balance.d.ts +1 -1
  367. package/dist/skills/telegram-notify.d.ts +4 -4
  368. package/dist/skills/web-search.d.ts +1 -1
  369. package/dist/testing/contracts/event-bus.contract.d.ts.map +1 -1
  370. package/dist/testing/contracts/event-bus.contract.js +14 -12
  371. package/dist/testing/contracts/event-bus.contract.js.map +1 -1
  372. package/dist/testing/index.d.ts +3 -0
  373. package/dist/testing/test-brain-port.d.ts +4 -0
  374. package/dist/testing/test-brain-port.d.ts.map +1 -1
  375. package/dist/testing/test-brain-port.js +75 -20
  376. package/dist/testing/test-brain-port.js.map +1 -1
  377. package/dist/testing/test-event-bus.d.ts.map +1 -1
  378. package/dist/testing/test-event-bus.js +89 -36
  379. package/dist/testing/test-event-bus.js.map +1 -1
  380. package/dist/trace/schema.d.ts +1 -1
  381. package/dist/trace/schema.d.ts.map +1 -1
  382. package/dist/trace/schema.js +1 -1
  383. package/dist/trace/schema.js.map +1 -1
  384. package/dist/verify/formal/index.d.ts +44 -0
  385. package/dist/verify/formal/index.d.ts.map +1 -0
  386. package/dist/verify/formal/index.js +98 -0
  387. package/dist/verify/formal/index.js.map +1 -0
  388. package/dist/verify/formal/policy.d.ts +105 -0
  389. package/dist/verify/formal/policy.d.ts.map +1 -0
  390. package/dist/verify/formal/policy.js +159 -0
  391. package/dist/verify/formal/policy.js.map +1 -0
  392. package/dist/verify/formal/result.d.ts +50 -0
  393. package/dist/verify/formal/result.d.ts.map +1 -0
  394. package/dist/verify/formal/result.js +21 -0
  395. package/dist/verify/formal/result.js.map +1 -0
  396. package/dist/verify/formal/solver.d.ts +67 -0
  397. package/dist/verify/formal/solver.d.ts.map +1 -0
  398. package/dist/verify/formal/solver.js +184 -0
  399. package/dist/verify/formal/solver.js.map +1 -0
  400. package/dist/verify/formal/spec-language.d.ts +80 -0
  401. package/dist/verify/formal/spec-language.d.ts.map +1 -0
  402. package/dist/verify/formal/spec-language.js +219 -0
  403. package/dist/verify/formal/spec-language.js.map +1 -0
  404. package/docs/attestation.md +199 -0
  405. package/docs/identity.md +193 -0
  406. package/package.json +22 -1
  407. package/src/adapters/llm/anthropic-direct.ts +51 -0
  408. package/src/adapters/llm/cascade.ts +64 -19
  409. package/src/adapters/llm/litellm.ts +49 -0
  410. package/src/compute/difficulty-estimator.ts +111 -0
  411. package/src/compute/strategies/mixture-of-agents.ts +150 -0
  412. package/src/compute/strategies/tree-of-thoughts.ts +293 -0
  413. package/src/compute/strategies/two-phase-orient.ts +147 -0
  414. package/src/container/protocol.ts +243 -0
  415. package/src/container/runtime.ts +424 -0
  416. package/src/db/migrations/026_formal_verify_results.sql +30 -0
  417. package/src/events/catalogue.ts +54 -0
  418. package/src/events/index.ts +9 -0
  419. package/src/events/schemas/citadel.sprint.analyzed.v1.ts +23 -0
  420. package/src/events/schemas/forge.inbox.reply_classified.v1.ts +15 -0
  421. package/src/events/schemas/vauban-finance.forecast.generated.v1.ts +11 -0
  422. package/src/events/schemas/vauban-finance.trade.executed.v1.ts +12 -0
  423. package/src/events/schemas/vauban.goal.checked.v1.ts +11 -0
  424. package/src/events/schemas/vauban.rebalancing.checked.v1.ts +11 -0
  425. package/src/events/schemas/vauban.tax.checked.v1.ts +11 -0
  426. package/src/events/schemas/vauban.vault.analyzed.v1.ts +21 -0
  427. package/src/events/schemas/vauban.vault.compounded.v1.ts +12 -0
  428. package/src/identity/agent-persona.ts +203 -0
  429. package/src/identity/persona-prompt.ts +84 -0
  430. package/src/identity/persona-schema.ts +127 -0
  431. package/src/index.ts +338 -1
  432. package/src/loop/index.ts +0 -1
  433. package/src/loop/sdk-loop.ts +5 -8
  434. package/src/memory/episodic-rrf.ts +224 -0
  435. package/src/mesh/attenuation.ts +190 -0
  436. package/src/mesh/delegate.ts +254 -0
  437. package/src/mesh/dispatcher.ts +301 -0
  438. package/src/mesh/index.ts +39 -0
  439. package/src/mesh/types.ts +31 -0
  440. package/src/orchestration/ooda/skills.ts +177 -0
  441. package/src/orchestration/ooda/types.ts +3 -9
  442. package/src/ports/bastion-action.contract.test.ts +355 -0
  443. package/src/ports/bastion-action.ts +198 -0
  444. package/src/ports/brain.ts +177 -15
  445. package/src/ports/citadel-action.contract.test.ts +430 -0
  446. package/src/ports/citadel-action.ts +174 -0
  447. package/src/ports/compliance-contract.ts +191 -0
  448. package/src/ports/db.ts +98 -0
  449. package/src/ports/delegation.contract.test.ts +428 -0
  450. package/src/ports/delegation.ts +211 -0
  451. package/src/ports/event-bus.ts +133 -18
  452. package/src/ports/federation.contract.test.ts +355 -0
  453. package/src/ports/federation.ts +190 -0
  454. package/src/ports/index.ts +186 -1
  455. package/src/ports/llm-provider.ts +123 -0
  456. package/src/ports/logger.ts +104 -0
  457. package/src/ports/manifest-registry.contract.test.ts +324 -0
  458. package/src/ports/manifest-registry.ts +188 -0
  459. package/src/ports/observability.contract.test.ts +315 -0
  460. package/src/ports/observability.ts +150 -0
  461. package/src/ports/outcome.ts +69 -0
  462. package/src/ports/privacy.contract.test.ts +413 -0
  463. package/src/ports/privacy.ts +207 -0
  464. package/src/ports/tenant-context.contract.test.ts +454 -0
  465. package/src/ports/tenant-context.ts +150 -0
  466. package/src/ports/vauban-finance-action.contract.test.ts +335 -0
  467. package/src/ports/vauban-finance-action.ts +166 -0
  468. package/src/ports/workflow-runtime.ts +327 -0
  469. package/src/proof/cert-verify.ts +249 -0
  470. package/src/replay/replay.ts +11 -8
  471. package/src/retry/index.ts +227 -0
  472. package/src/retry/presets.ts +75 -0
  473. package/src/skill-loop/ab-runner.ts +196 -0
  474. package/src/skill-loop/adoption.ts +188 -0
  475. package/src/skill-loop/candidate.ts +75 -0
  476. package/src/skill-loop/evaluator.ts +238 -0
  477. package/src/skill-loop/index.ts +51 -0
  478. package/src/skill-loop/reflexion-replay.ts +173 -0
  479. package/src/skill-loop/sign-off.ts +247 -0
  480. package/src/skill-loop/value-metric.ts +120 -0
  481. package/src/skill-loop/versioning.ts +75 -0
  482. package/src/skill-manifest/anchor.ts +401 -0
  483. package/src/skill-manifest/builder.ts +129 -0
  484. package/src/skill-manifest/index.ts +18 -0
  485. package/src/skill-manifest/types.ts +72 -0
  486. package/src/skill-manifest/verifier.ts +198 -0
  487. package/src/skills/errors.ts +30 -2
  488. package/src/skills/index.ts +19 -0
  489. package/src/skills/markdown/loader.ts +129 -0
  490. package/src/skills/markdown/schema.ts +144 -0
  491. package/src/skills/poc-md-loader/e2e-parity.test.ts +237 -0
  492. package/src/skills/poc-md-loader/markdown-loader.ts +161 -0
  493. package/src/skills/poc-md-loader/runner.ts +82 -0
  494. package/src/skills/poc-md-loader/vitest.poc.config.ts +13 -0
  495. package/src/skills/poc-md-loader/web-search/SKILL.md +42 -0
  496. package/src/skills/poc-md-loader/web-search/script.ts +109 -0
  497. package/src/skills/send-email.ts +15 -3
  498. package/src/testing/contracts/event-bus.contract.ts +16 -14
  499. package/src/testing/test-brain-port.ts +98 -24
  500. package/src/testing/test-event-bus.ts +104 -43
  501. package/src/trace/schema.ts +1 -1
  502. package/src/verify/formal/index.ts +154 -0
  503. package/src/verify/formal/policy.ts +253 -0
  504. package/src/verify/formal/result.ts +52 -0
  505. package/src/verify/formal/solver.ts +235 -0
  506. package/src/verify/formal/spec-language.ts +274 -0
@@ -0,0 +1,59 @@
1
+ import { z } from "zod";
2
+ export declare const VaubanVaultAnalyzedV1: z.ZodObject<{
3
+ vaultId: z.ZodString;
4
+ tvlUsd: z.ZodNumber;
5
+ anomalies: z.ZodArray<z.ZodObject<{
6
+ type: z.ZodString;
7
+ severity: z.ZodEnum<["info", "warning", "error", "critical"]>;
8
+ metric: z.ZodString;
9
+ current: z.ZodUnion<[z.ZodString, z.ZodNumber]>;
10
+ expected: z.ZodUnion<[z.ZodString, z.ZodNumber]>;
11
+ description: z.ZodString;
12
+ }, "strip", z.ZodTypeAny, {
13
+ expected: string | number;
14
+ type: string;
15
+ description: string;
16
+ severity: "error" | "info" | "critical" | "warning";
17
+ metric: string;
18
+ current: string | number;
19
+ }, {
20
+ expected: string | number;
21
+ type: string;
22
+ description: string;
23
+ severity: "error" | "info" | "critical" | "warning";
24
+ metric: string;
25
+ current: string | number;
26
+ }>, "many">;
27
+ overallSeverity: z.ZodEnum<["info", "warning", "error", "critical"]>;
28
+ timestamp: z.ZodString;
29
+ schemaVersion: z.ZodString;
30
+ }, "strict", z.ZodTypeAny, {
31
+ timestamp: string;
32
+ schemaVersion: string;
33
+ vaultId: string;
34
+ overallSeverity: "error" | "info" | "critical" | "warning";
35
+ tvlUsd: number;
36
+ anomalies: {
37
+ expected: string | number;
38
+ type: string;
39
+ description: string;
40
+ severity: "error" | "info" | "critical" | "warning";
41
+ metric: string;
42
+ current: string | number;
43
+ }[];
44
+ }, {
45
+ timestamp: string;
46
+ schemaVersion: string;
47
+ vaultId: string;
48
+ overallSeverity: "error" | "info" | "critical" | "warning";
49
+ tvlUsd: number;
50
+ anomalies: {
51
+ expected: string | number;
52
+ type: string;
53
+ description: string;
54
+ severity: "error" | "info" | "critical" | "warning";
55
+ metric: string;
56
+ current: string | number;
57
+ }[];
58
+ }>;
59
+ //# sourceMappingURL=vauban.vault.analyzed.v1.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vauban.vault.analyzed.v1.d.ts","sourceRoot":"","sources":["../../../src/events/schemas/vauban.vault.analyzed.v1.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkBvB,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { z } from "zod";
2
+ export const VaubanVaultAnalyzedV1 = z
3
+ .object({
4
+ vaultId: z.string(),
5
+ tvlUsd: z.number(),
6
+ anomalies: z.array(z.object({
7
+ type: z.string(),
8
+ severity: z.enum(["info", "warning", "error", "critical"]),
9
+ metric: z.string(),
10
+ current: z.union([z.string(), z.number()]),
11
+ expected: z.union([z.string(), z.number()]),
12
+ description: z.string(),
13
+ })),
14
+ overallSeverity: z.enum(["info", "warning", "error", "critical"]),
15
+ timestamp: z.string(),
16
+ schemaVersion: z.string(),
17
+ })
18
+ .strict();
19
+ //# sourceMappingURL=vauban.vault.analyzed.v1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vauban.vault.analyzed.v1.js","sourceRoot":"","sources":["../../../src/events/schemas/vauban.vault.analyzed.v1.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC;KACnC,MAAM,CAAC;IACN,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,SAAS,EAAE,CAAC,CAAC,KAAK,CAChB,CAAC,CAAC,MAAM,CAAC;QACP,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;QAChB,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;QAC1D,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;QAClB,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QAC1C,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QAC3C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;KACxB,CAAC,CACH;IACD,eAAe,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;IACjE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;CAC1B,CAAC;KACD,MAAM,EAAE,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { z } from "zod";
2
+ export declare const VaubanVaultCompoundedV1: z.ZodObject<{
3
+ vaultId: z.ZodString;
4
+ compoundedAt: z.ZodString;
5
+ rewardsUsd: z.ZodNumber;
6
+ caller: z.ZodString;
7
+ txHash: z.ZodOptional<z.ZodString>;
8
+ schemaVersion: z.ZodString;
9
+ }, "strict", z.ZodTypeAny, {
10
+ schemaVersion: string;
11
+ vaultId: string;
12
+ compoundedAt: string;
13
+ rewardsUsd: number;
14
+ caller: string;
15
+ txHash?: string | undefined;
16
+ }, {
17
+ schemaVersion: string;
18
+ vaultId: string;
19
+ compoundedAt: string;
20
+ rewardsUsd: number;
21
+ caller: string;
22
+ txHash?: string | undefined;
23
+ }>;
24
+ //# sourceMappingURL=vauban.vault.compounded.v1.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vauban.vault.compounded.v1.d.ts","sourceRoot":"","sources":["../../../src/events/schemas/vauban.vault.compounded.v1.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;EASzB,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { z } from "zod";
2
+ export const VaubanVaultCompoundedV1 = z
3
+ .object({
4
+ vaultId: z.string(),
5
+ compoundedAt: z.string(),
6
+ rewardsUsd: z.number(),
7
+ caller: z.string(),
8
+ txHash: z.string().optional(),
9
+ schemaVersion: z.string(),
10
+ })
11
+ .strict();
12
+ //# sourceMappingURL=vauban.vault.compounded.v1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vauban.vault.compounded.v1.js","sourceRoot":"","sources":["../../../src/events/schemas/vauban.vault.compounded.v1.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC;KACrC,MAAM,CAAC;IACN,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;IACxB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACtB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;CAC1B,CAAC;KACD,MAAM,EAAE,CAAC"}
@@ -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"}
@@ -0,0 +1,120 @@
1
+ /**
2
+ * AgentPersona schema — Sprint CC v3.1 (Livrable E).
3
+ *
4
+ * Persona is a structured description of how an agent should communicate:
5
+ * tone, formality, language, domain expertise, response shape preferences.
6
+ * Stored in Brain Tier 3 (semantic) per agent + override locally via
7
+ * `.cc/persona.yaml`.
8
+ *
9
+ * The schema is intentionally minimal — additive evolution preferred over
10
+ * breaking changes. All fields are optional; the resolved persona is the
11
+ * merge of (1) Brain-stored persona, (2) local overrides, (3) defaults.
12
+ *
13
+ * Spec reference:
14
+ * - Plan canonical v3.1 §Livrable E
15
+ * - ADR-ECO-034 §"AgentPersona via Brain Tier 3 semantic"
16
+ *
17
+ * @public
18
+ */
19
+ import { z } from "zod";
20
+ export declare const PersonaTone: z.ZodEnum<["concise", "detailed", "pedagogical"]>;
21
+ export type PersonaTone = z.infer<typeof PersonaTone>;
22
+ export declare const PersonaFormality: z.ZodEnum<["casual", "formal", "technical"]>;
23
+ export type PersonaFormality = z.infer<typeof PersonaFormality>;
24
+ export declare const PersonaExplainReasoning: z.ZodEnum<["always", "on_error", "never"]>;
25
+ export type PersonaExplainReasoning = z.infer<typeof PersonaExplainReasoning>;
26
+ export declare const PersonaAcknowledgmentStyle: z.ZodEnum<["minimal", "detailed", "none"]>;
27
+ export type PersonaAcknowledgmentStyle = z.infer<typeof PersonaAcknowledgmentStyle>;
28
+ export declare const PersonaSchema: z.ZodObject<{
29
+ identity: z.ZodOptional<z.ZodObject<{
30
+ name: z.ZodOptional<z.ZodString>;
31
+ role: z.ZodOptional<z.ZodString>;
32
+ tone: z.ZodOptional<z.ZodEnum<["concise", "detailed", "pedagogical"]>>;
33
+ formality: z.ZodOptional<z.ZodEnum<["casual", "formal", "technical"]>>;
34
+ /** BCP 47 language tag (e.g. "en", "fr-FR"). Free-form on purpose. */
35
+ language: z.ZodOptional<z.ZodString>;
36
+ }, "strict", z.ZodTypeAny, {
37
+ name?: string | undefined;
38
+ role?: string | undefined;
39
+ tone?: "concise" | "detailed" | "pedagogical" | undefined;
40
+ formality?: "casual" | "formal" | "technical" | undefined;
41
+ language?: string | undefined;
42
+ }, {
43
+ name?: string | undefined;
44
+ role?: string | undefined;
45
+ tone?: "concise" | "detailed" | "pedagogical" | undefined;
46
+ formality?: "casual" | "formal" | "technical" | undefined;
47
+ language?: string | undefined;
48
+ }>>;
49
+ traits: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
50
+ domain_expertise: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
51
+ communication: z.ZodOptional<z.ZodObject<{
52
+ max_response_length: z.ZodOptional<z.ZodNumber>;
53
+ use_analogies: z.ZodOptional<z.ZodBoolean>;
54
+ explain_reasoning: z.ZodOptional<z.ZodEnum<["always", "on_error", "never"]>>;
55
+ acknowledgment_style: z.ZodOptional<z.ZodEnum<["minimal", "detailed", "none"]>>;
56
+ }, "strict", z.ZodTypeAny, {
57
+ max_response_length?: number | undefined;
58
+ use_analogies?: boolean | undefined;
59
+ explain_reasoning?: "always" | "on_error" | "never" | undefined;
60
+ acknowledgment_style?: "detailed" | "minimal" | "none" | undefined;
61
+ }, {
62
+ max_response_length?: number | undefined;
63
+ use_analogies?: boolean | undefined;
64
+ explain_reasoning?: "always" | "on_error" | "never" | undefined;
65
+ acknowledgment_style?: "detailed" | "minimal" | "none" | undefined;
66
+ }>>;
67
+ }, "strict", z.ZodTypeAny, {
68
+ identity?: {
69
+ name?: string | undefined;
70
+ role?: string | undefined;
71
+ tone?: "concise" | "detailed" | "pedagogical" | undefined;
72
+ formality?: "casual" | "formal" | "technical" | undefined;
73
+ language?: string | undefined;
74
+ } | undefined;
75
+ traits?: string[] | undefined;
76
+ domain_expertise?: string[] | undefined;
77
+ communication?: {
78
+ max_response_length?: number | undefined;
79
+ use_analogies?: boolean | undefined;
80
+ explain_reasoning?: "always" | "on_error" | "never" | undefined;
81
+ acknowledgment_style?: "detailed" | "minimal" | "none" | undefined;
82
+ } | undefined;
83
+ }, {
84
+ identity?: {
85
+ name?: string | undefined;
86
+ role?: string | undefined;
87
+ tone?: "concise" | "detailed" | "pedagogical" | undefined;
88
+ formality?: "casual" | "formal" | "technical" | undefined;
89
+ language?: string | undefined;
90
+ } | undefined;
91
+ traits?: string[] | undefined;
92
+ domain_expertise?: string[] | undefined;
93
+ communication?: {
94
+ max_response_length?: number | undefined;
95
+ use_analogies?: boolean | undefined;
96
+ explain_reasoning?: "always" | "on_error" | "never" | undefined;
97
+ acknowledgment_style?: "detailed" | "minimal" | "none" | undefined;
98
+ } | undefined;
99
+ }>;
100
+ export type AgentPersona = z.infer<typeof PersonaSchema>;
101
+ export declare const DEFAULT_PERSONA: AgentPersona;
102
+ /**
103
+ * Deep-merge two personas. `local` wins over `base` field-by-field.
104
+ *
105
+ * Arrays (traits, domain_expertise) follow override semantics: a `local` array
106
+ * REPLACES the `base` array entirely. To extend rather than override, the
107
+ * caller must concatenate before calling `mergePersona`.
108
+ *
109
+ * The merge is total (no Zod validation here — callers should validate
110
+ * inputs and the result separately). This makes mergePersona suitable for
111
+ * progressive composition where intermediate values may not yet satisfy
112
+ * the schema.
113
+ */
114
+ export declare function mergePersona(base: AgentPersona, local: AgentPersona): AgentPersona;
115
+ /**
116
+ * Validate a persona object against the schema. Returns the parsed result
117
+ * (with Zod typing) or throws a typed error.
118
+ */
119
+ export declare function validatePersona(input: unknown): AgentPersona;
120
+ //# sourceMappingURL=persona-schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persona-schema.d.ts","sourceRoot":"","sources":["../../src/identity/persona-schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,WAAW,mDAAiD,CAAC;AAC1E,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAEtD,eAAO,MAAM,gBAAgB,8CAA4C,CAAC;AAC1E,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAEhE,eAAO,MAAM,uBAAuB,4CAA0C,CAAC;AAC/E,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAE9E,eAAO,MAAM,0BAA0B,4CAIrC,CAAC;AACH,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAC9C,OAAO,0BAA0B,CAClC,CAAC;AAwBF,eAAO,MAAM,aAAa;;;;;;QAdtB,sEAAsE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqB/D,CAAC;AAEZ,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAIzD,eAAO,MAAM,eAAe,EAAE,YAY7B,CAAC;AAIF;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,YAAY,EAClB,KAAK,EAAE,YAAY,GAClB,YAAY,CAad;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,CAE5D"}