@vauban-org/agent-sdk 1.0.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (442) 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 +46 -46
  39. package/dist/events/schemas/agent.completed.v1.d.ts +4 -4
  40. package/dist/events/schemas/agent.failed.v1.d.ts +2 -2
  41. package/dist/events/schemas/agent.hitl_resolved.v1.d.ts +2 -2
  42. package/dist/events/schemas/agent.started.v1.d.ts +2 -2
  43. package/dist/events/schemas/brain.skill.extracted.v1.d.ts +4 -4
  44. package/dist/events/schemas/cc.cost.anomaly_detected.v1.d.ts +2 -2
  45. package/dist/events/schemas/cc.cost.recorded.v1.d.ts +4 -4
  46. package/dist/events/schemas/citadel.sprint.analyzed.v1.d.ts +6 -6
  47. package/dist/events/schemas/citadel.sprint.closed.v1.d.ts +2 -2
  48. package/dist/events/schemas/forge.inbox.reply_classified.v1.d.ts +6 -6
  49. package/dist/events/schemas/forge.lead.qualified.v1.d.ts +2 -2
  50. package/dist/events/schemas/forge.outreach.sent.v1.d.ts +4 -4
  51. package/dist/events/schemas/incident.detected.v1.d.ts +2 -2
  52. package/dist/events/schemas/vauban.goal.checked.v1.d.ts +2 -2
  53. package/dist/events/schemas/vauban.rebalancing.checked.v1.d.ts +2 -2
  54. package/dist/events/schemas/vauban.tax.checked.v1.d.ts +2 -2
  55. package/dist/events/schemas/vauban.vault.analyzed.v1.d.ts +6 -6
  56. package/dist/identity/agent-persona.d.ts +73 -0
  57. package/dist/identity/agent-persona.d.ts.map +1 -0
  58. package/dist/identity/agent-persona.js +165 -0
  59. package/dist/identity/agent-persona.js.map +1 -0
  60. package/dist/identity/persona-prompt.d.ts +25 -0
  61. package/dist/identity/persona-prompt.d.ts.map +1 -0
  62. package/dist/identity/persona-prompt.js +71 -0
  63. package/dist/identity/persona-prompt.js.map +1 -0
  64. package/dist/identity/persona-schema.d.ts +120 -0
  65. package/dist/identity/persona-schema.d.ts.map +1 -0
  66. package/dist/identity/persona-schema.js +103 -0
  67. package/dist/identity/persona-schema.js.map +1 -0
  68. package/dist/index.d.ts +37 -2
  69. package/dist/index.d.ts.map +1 -1
  70. package/dist/index.js +29 -1
  71. package/dist/index.js.map +1 -1
  72. package/dist/loop/minimal-loop.js +293 -287
  73. package/dist/memory/episodic-rrf.d.ts +114 -0
  74. package/dist/memory/episodic-rrf.d.ts.map +1 -0
  75. package/dist/memory/episodic-rrf.js +148 -0
  76. package/dist/memory/episodic-rrf.js.map +1 -0
  77. package/dist/mesh/attenuation.d.ts +78 -0
  78. package/dist/mesh/attenuation.d.ts.map +1 -0
  79. package/dist/mesh/attenuation.js +141 -0
  80. package/dist/mesh/attenuation.js.map +1 -0
  81. package/dist/mesh/delegate.d.ts +96 -0
  82. package/dist/mesh/delegate.d.ts.map +1 -0
  83. package/dist/mesh/delegate.js +172 -0
  84. package/dist/mesh/delegate.js.map +1 -0
  85. package/dist/mesh/dispatcher.d.ts +119 -0
  86. package/dist/mesh/dispatcher.d.ts.map +1 -0
  87. package/dist/mesh/dispatcher.js +207 -0
  88. package/dist/mesh/dispatcher.js.map +1 -0
  89. package/dist/mesh/index.d.ts +12 -0
  90. package/dist/mesh/index.d.ts.map +1 -0
  91. package/dist/mesh/index.js +11 -0
  92. package/dist/mesh/index.js.map +1 -0
  93. package/dist/mesh/types.d.ts +30 -0
  94. package/dist/mesh/types.d.ts.map +1 -0
  95. package/dist/mesh/types.js +11 -0
  96. package/dist/mesh/types.js.map +1 -0
  97. package/dist/orchestration/ooda/skills.d.ts +104 -0
  98. package/dist/orchestration/ooda/skills.d.ts.map +1 -1
  99. package/dist/orchestration/ooda/skills.js +106 -0
  100. package/dist/orchestration/ooda/skills.js.map +1 -1
  101. package/dist/ports/bastion-action.contract.test.d.ts +11 -0
  102. package/dist/ports/bastion-action.contract.test.d.ts.map +1 -0
  103. package/dist/ports/bastion-action.contract.test.js +238 -0
  104. package/dist/ports/bastion-action.contract.test.js.map +1 -0
  105. package/dist/ports/bastion-action.d.ts +133 -0
  106. package/dist/ports/bastion-action.d.ts.map +1 -0
  107. package/dist/ports/bastion-action.js +73 -0
  108. package/dist/ports/bastion-action.js.map +1 -0
  109. package/dist/ports/brain.d.ts +31 -0
  110. package/dist/ports/brain.d.ts.map +1 -1
  111. package/dist/ports/brain.js +115 -1
  112. package/dist/ports/brain.js.map +1 -1
  113. package/dist/ports/citadel-action.contract.test.d.ts +11 -0
  114. package/dist/ports/citadel-action.contract.test.d.ts.map +1 -0
  115. package/dist/ports/citadel-action.contract.test.js +317 -0
  116. package/dist/ports/citadel-action.contract.test.js.map +1 -0
  117. package/dist/ports/citadel-action.d.ts +111 -0
  118. package/dist/ports/citadel-action.d.ts.map +1 -0
  119. package/dist/ports/citadel-action.js +62 -0
  120. package/dist/ports/citadel-action.js.map +1 -0
  121. package/dist/ports/compliance-contract.d.ts +123 -0
  122. package/dist/ports/compliance-contract.d.ts.map +1 -0
  123. package/dist/ports/compliance-contract.js +35 -0
  124. package/dist/ports/compliance-contract.js.map +1 -0
  125. package/dist/ports/db.d.ts +38 -0
  126. package/dist/ports/db.d.ts.map +1 -1
  127. package/dist/ports/db.js +88 -1
  128. package/dist/ports/db.js.map +1 -1
  129. package/dist/ports/delegation.contract.test.d.ts +9 -0
  130. package/dist/ports/delegation.contract.test.d.ts.map +1 -0
  131. package/dist/ports/delegation.contract.test.js +337 -0
  132. package/dist/ports/delegation.contract.test.js.map +1 -0
  133. package/dist/ports/delegation.d.ts +134 -0
  134. package/dist/ports/delegation.d.ts.map +1 -0
  135. package/dist/ports/delegation.js +105 -0
  136. package/dist/ports/delegation.js.map +1 -0
  137. package/dist/ports/event-bus.d.ts +29 -0
  138. package/dist/ports/event-bus.d.ts.map +1 -1
  139. package/dist/ports/event-bus.js +106 -1
  140. package/dist/ports/event-bus.js.map +1 -1
  141. package/dist/ports/federation.contract.test.d.ts +9 -0
  142. package/dist/ports/federation.contract.test.d.ts.map +1 -0
  143. package/dist/ports/federation.contract.test.js +279 -0
  144. package/dist/ports/federation.contract.test.js.map +1 -0
  145. package/dist/ports/federation.d.ts +140 -0
  146. package/dist/ports/federation.d.ts.map +1 -0
  147. package/dist/ports/federation.js +57 -0
  148. package/dist/ports/federation.js.map +1 -0
  149. package/dist/ports/index.d.ts +28 -2
  150. package/dist/ports/index.d.ts.map +1 -1
  151. package/dist/ports/index.js +17 -2
  152. package/dist/ports/index.js.map +1 -1
  153. package/dist/ports/llm-provider.d.ts +37 -0
  154. package/dist/ports/llm-provider.d.ts.map +1 -1
  155. package/dist/ports/llm-provider.js +99 -1
  156. package/dist/ports/llm-provider.js.map +1 -1
  157. package/dist/ports/logger.d.ts +27 -0
  158. package/dist/ports/logger.d.ts.map +1 -1
  159. package/dist/ports/logger.js +87 -0
  160. package/dist/ports/logger.js.map +1 -1
  161. package/dist/ports/manifest-registry.contract.test.d.ts +9 -0
  162. package/dist/ports/manifest-registry.contract.test.d.ts.map +1 -0
  163. package/dist/ports/manifest-registry.contract.test.js +246 -0
  164. package/dist/ports/manifest-registry.contract.test.js.map +1 -0
  165. package/dist/ports/manifest-registry.d.ts +116 -0
  166. package/dist/ports/manifest-registry.d.ts.map +1 -0
  167. package/dist/ports/manifest-registry.js +79 -0
  168. package/dist/ports/manifest-registry.js.map +1 -0
  169. package/dist/ports/observability.contract.test.d.ts +12 -0
  170. package/dist/ports/observability.contract.test.d.ts.map +1 -0
  171. package/dist/ports/observability.contract.test.js +260 -0
  172. package/dist/ports/observability.contract.test.js.map +1 -0
  173. package/dist/ports/observability.d.ts +98 -0
  174. package/dist/ports/observability.d.ts.map +1 -0
  175. package/dist/ports/observability.js +59 -0
  176. package/dist/ports/observability.js.map +1 -0
  177. package/dist/ports/outcome.d.ts +26 -0
  178. package/dist/ports/outcome.d.ts.map +1 -1
  179. package/dist/ports/outcome.js +62 -1
  180. package/dist/ports/outcome.js.map +1 -1
  181. package/dist/ports/privacy.contract.test.d.ts +12 -0
  182. package/dist/ports/privacy.contract.test.d.ts.map +1 -0
  183. package/dist/ports/privacy.contract.test.js +325 -0
  184. package/dist/ports/privacy.contract.test.js.map +1 -0
  185. package/dist/ports/privacy.d.ts +132 -0
  186. package/dist/ports/privacy.d.ts.map +1 -0
  187. package/dist/ports/privacy.js +83 -0
  188. package/dist/ports/privacy.js.map +1 -0
  189. package/dist/ports/tenant-context.contract.test.d.ts +14 -0
  190. package/dist/ports/tenant-context.contract.test.d.ts.map +1 -0
  191. package/dist/ports/tenant-context.contract.test.js +352 -0
  192. package/dist/ports/tenant-context.contract.test.js.map +1 -0
  193. package/dist/ports/tenant-context.d.ts +103 -0
  194. package/dist/ports/tenant-context.d.ts.map +1 -0
  195. package/dist/ports/tenant-context.js +48 -0
  196. package/dist/ports/tenant-context.js.map +1 -0
  197. package/dist/ports/vauban-finance-action.contract.test.d.ts +11 -0
  198. package/dist/ports/vauban-finance-action.contract.test.d.ts.map +1 -0
  199. package/dist/ports/vauban-finance-action.contract.test.js +260 -0
  200. package/dist/ports/vauban-finance-action.contract.test.js.map +1 -0
  201. package/dist/ports/vauban-finance-action.d.ts +106 -0
  202. package/dist/ports/vauban-finance-action.d.ts.map +1 -0
  203. package/dist/ports/vauban-finance-action.js +60 -0
  204. package/dist/ports/vauban-finance-action.js.map +1 -0
  205. package/dist/ports/workflow-runtime.d.ts +204 -0
  206. package/dist/ports/workflow-runtime.d.ts.map +1 -0
  207. package/dist/ports/workflow-runtime.js +72 -0
  208. package/dist/ports/workflow-runtime.js.map +1 -0
  209. package/dist/proof/cert-verify.d.ts +80 -0
  210. package/dist/proof/cert-verify.d.ts.map +1 -0
  211. package/dist/proof/cert-verify.js +178 -0
  212. package/dist/proof/cert-verify.js.map +1 -0
  213. package/dist/replay/replay.d.ts.map +1 -1
  214. package/dist/replay/replay.js +5 -1
  215. package/dist/replay/replay.js.map +1 -1
  216. package/dist/retry/index.d.ts +129 -0
  217. package/dist/retry/index.d.ts.map +1 -0
  218. package/dist/retry/index.js +156 -0
  219. package/dist/retry/index.js.map +1 -0
  220. package/dist/retry/presets.d.ts +39 -0
  221. package/dist/retry/presets.d.ts.map +1 -0
  222. package/dist/retry/presets.js +69 -0
  223. package/dist/retry/presets.js.map +1 -0
  224. package/dist/skill-loop/ab-runner.d.ts +67 -0
  225. package/dist/skill-loop/ab-runner.d.ts.map +1 -0
  226. package/dist/skill-loop/ab-runner.js +160 -0
  227. package/dist/skill-loop/ab-runner.js.map +1 -0
  228. package/dist/skill-loop/adoption.d.ts +67 -0
  229. package/dist/skill-loop/adoption.d.ts.map +1 -0
  230. package/dist/skill-loop/adoption.js +126 -0
  231. package/dist/skill-loop/adoption.js.map +1 -0
  232. package/dist/skill-loop/candidate.d.ts +45 -0
  233. package/dist/skill-loop/candidate.d.ts.map +1 -0
  234. package/dist/skill-loop/candidate.js +43 -0
  235. package/dist/skill-loop/candidate.js.map +1 -0
  236. package/dist/skill-loop/evaluator.d.ts +42 -0
  237. package/dist/skill-loop/evaluator.d.ts.map +1 -0
  238. package/dist/skill-loop/evaluator.js +184 -0
  239. package/dist/skill-loop/evaluator.js.map +1 -0
  240. package/dist/skill-loop/index.d.ts +27 -0
  241. package/dist/skill-loop/index.d.ts.map +1 -0
  242. package/dist/skill-loop/index.js +27 -0
  243. package/dist/skill-loop/index.js.map +1 -0
  244. package/dist/skill-loop/reflexion-replay.d.ts +87 -0
  245. package/dist/skill-loop/reflexion-replay.d.ts.map +1 -0
  246. package/dist/skill-loop/reflexion-replay.js +110 -0
  247. package/dist/skill-loop/reflexion-replay.js.map +1 -0
  248. package/dist/skill-loop/sign-off.d.ts +88 -0
  249. package/dist/skill-loop/sign-off.d.ts.map +1 -0
  250. package/dist/skill-loop/sign-off.js +146 -0
  251. package/dist/skill-loop/sign-off.js.map +1 -0
  252. package/dist/skill-loop/value-metric.d.ts +55 -0
  253. package/dist/skill-loop/value-metric.d.ts.map +1 -0
  254. package/dist/skill-loop/value-metric.js +69 -0
  255. package/dist/skill-loop/value-metric.js.map +1 -0
  256. package/dist/skill-loop/versioning.d.ts +36 -0
  257. package/dist/skill-loop/versioning.d.ts.map +1 -0
  258. package/dist/skill-loop/versioning.js +47 -0
  259. package/dist/skill-loop/versioning.js.map +1 -0
  260. package/dist/skill-manifest/anchor.d.ts +91 -0
  261. package/dist/skill-manifest/anchor.d.ts.map +1 -0
  262. package/dist/skill-manifest/anchor.js +331 -0
  263. package/dist/skill-manifest/anchor.js.map +1 -0
  264. package/dist/skill-manifest/builder.d.ts +47 -0
  265. package/dist/skill-manifest/builder.d.ts.map +1 -0
  266. package/dist/skill-manifest/builder.js +93 -0
  267. package/dist/skill-manifest/builder.js.map +1 -0
  268. package/dist/skill-manifest/index.d.ts +13 -0
  269. package/dist/skill-manifest/index.d.ts.map +1 -0
  270. package/dist/skill-manifest/index.js +9 -0
  271. package/dist/skill-manifest/index.js.map +1 -0
  272. package/dist/skill-manifest/types.d.ts +67 -0
  273. package/dist/skill-manifest/types.d.ts.map +1 -0
  274. package/dist/skill-manifest/types.js +16 -0
  275. package/dist/skill-manifest/types.js.map +1 -0
  276. package/dist/skill-manifest/verifier.d.ts +42 -0
  277. package/dist/skill-manifest/verifier.d.ts.map +1 -0
  278. package/dist/skill-manifest/verifier.js +136 -0
  279. package/dist/skill-manifest/verifier.js.map +1 -0
  280. package/dist/skills/brain-query.d.ts +4 -4
  281. package/dist/skills/brain-store.d.ts +6 -6
  282. package/dist/skills/errors.d.ts +15 -0
  283. package/dist/skills/errors.d.ts.map +1 -1
  284. package/dist/skills/errors.js +21 -0
  285. package/dist/skills/errors.js.map +1 -1
  286. package/dist/skills/hitl-request.d.ts +2 -2
  287. package/dist/skills/index.d.ts +3 -1
  288. package/dist/skills/index.d.ts.map +1 -1
  289. package/dist/skills/index.js +4 -1
  290. package/dist/skills/index.js.map +1 -1
  291. package/dist/skills/markdown/loader.d.ts +52 -0
  292. package/dist/skills/markdown/loader.d.ts.map +1 -0
  293. package/dist/skills/markdown/loader.js +93 -0
  294. package/dist/skills/markdown/loader.js.map +1 -0
  295. package/dist/skills/markdown/schema.d.ts +432 -0
  296. package/dist/skills/markdown/schema.d.ts.map +1 -0
  297. package/dist/skills/markdown/schema.js +121 -0
  298. package/dist/skills/markdown/schema.js.map +1 -0
  299. package/dist/skills/poc-md-loader/markdown-loader.d.ts +77 -0
  300. package/dist/skills/poc-md-loader/markdown-loader.d.ts.map +1 -0
  301. package/dist/skills/poc-md-loader/markdown-loader.js +125 -0
  302. package/dist/skills/poc-md-loader/markdown-loader.js.map +1 -0
  303. package/dist/skills/poc-md-loader/runner.d.ts +24 -0
  304. package/dist/skills/poc-md-loader/runner.d.ts.map +1 -0
  305. package/dist/skills/poc-md-loader/runner.js +57 -0
  306. package/dist/skills/poc-md-loader/runner.js.map +1 -0
  307. package/dist/skills/poc-md-loader/vitest.poc.config.d.ts +3 -0
  308. package/dist/skills/poc-md-loader/vitest.poc.config.d.ts.map +1 -0
  309. package/dist/skills/poc-md-loader/vitest.poc.config.js +13 -0
  310. package/dist/skills/poc-md-loader/vitest.poc.config.js.map +1 -0
  311. package/dist/skills/poc-md-loader/web-search/script.d.ts +33 -0
  312. package/dist/skills/poc-md-loader/web-search/script.d.ts.map +1 -0
  313. package/dist/skills/poc-md-loader/web-search/script.js +75 -0
  314. package/dist/skills/poc-md-loader/web-search/script.js.map +1 -0
  315. package/dist/skills/record-outcome.d.ts +4 -4
  316. package/dist/skills/send-email.d.ts.map +1 -1
  317. package/dist/skills/send-email.js +15 -3
  318. package/dist/skills/send-email.js.map +1 -1
  319. package/dist/skills/slack-notify.d.ts +4 -4
  320. package/dist/skills/starknet-balance.d.ts +1 -1
  321. package/dist/skills/telegram-notify.d.ts +4 -4
  322. package/dist/skills/web-search.d.ts +1 -1
  323. package/dist/testing/index.d.ts +3 -0
  324. package/dist/testing/test-brain-port.d.ts +4 -0
  325. package/dist/testing/test-brain-port.d.ts.map +1 -1
  326. package/dist/testing/test-brain-port.js +75 -20
  327. package/dist/testing/test-brain-port.js.map +1 -1
  328. package/dist/testing/test-event-bus.d.ts.map +1 -1
  329. package/dist/testing/test-event-bus.js +89 -36
  330. package/dist/testing/test-event-bus.js.map +1 -1
  331. package/dist/trace/schema.d.ts +1 -1
  332. package/dist/trace/schema.d.ts.map +1 -1
  333. package/dist/trace/schema.js +1 -1
  334. package/dist/trace/schema.js.map +1 -1
  335. package/dist/verify/formal/index.d.ts +44 -0
  336. package/dist/verify/formal/index.d.ts.map +1 -0
  337. package/dist/verify/formal/index.js +98 -0
  338. package/dist/verify/formal/index.js.map +1 -0
  339. package/dist/verify/formal/policy.d.ts +105 -0
  340. package/dist/verify/formal/policy.d.ts.map +1 -0
  341. package/dist/verify/formal/policy.js +159 -0
  342. package/dist/verify/formal/policy.js.map +1 -0
  343. package/dist/verify/formal/result.d.ts +50 -0
  344. package/dist/verify/formal/result.d.ts.map +1 -0
  345. package/dist/verify/formal/result.js +21 -0
  346. package/dist/verify/formal/result.js.map +1 -0
  347. package/dist/verify/formal/solver.d.ts +67 -0
  348. package/dist/verify/formal/solver.d.ts.map +1 -0
  349. package/dist/verify/formal/solver.js +184 -0
  350. package/dist/verify/formal/solver.js.map +1 -0
  351. package/dist/verify/formal/spec-language.d.ts +80 -0
  352. package/dist/verify/formal/spec-language.d.ts.map +1 -0
  353. package/dist/verify/formal/spec-language.js +219 -0
  354. package/dist/verify/formal/spec-language.js.map +1 -0
  355. package/docs/attestation.md +199 -0
  356. package/docs/identity.md +193 -0
  357. package/package.json +34 -17
  358. package/src/adapters/llm/anthropic-direct.ts +51 -0
  359. package/src/adapters/llm/cascade.ts +64 -19
  360. package/src/adapters/llm/litellm.ts +49 -0
  361. package/src/compute/difficulty-estimator.ts +111 -0
  362. package/src/compute/strategies/mixture-of-agents.ts +150 -0
  363. package/src/compute/strategies/tree-of-thoughts.ts +293 -0
  364. package/src/compute/strategies/two-phase-orient.ts +147 -0
  365. package/src/container/protocol.ts +243 -0
  366. package/src/container/runtime.ts +424 -0
  367. package/src/db/migrations/026_formal_verify_results.sql +30 -0
  368. package/src/identity/agent-persona.ts +203 -0
  369. package/src/identity/persona-prompt.ts +84 -0
  370. package/src/identity/persona-schema.ts +127 -0
  371. package/src/index.ts +338 -1
  372. package/src/memory/episodic-rrf.ts +224 -0
  373. package/src/mesh/attenuation.ts +190 -0
  374. package/src/mesh/delegate.ts +254 -0
  375. package/src/mesh/dispatcher.ts +301 -0
  376. package/src/mesh/index.ts +39 -0
  377. package/src/mesh/types.ts +31 -0
  378. package/src/orchestration/ooda/skills.ts +177 -0
  379. package/src/ports/bastion-action.contract.test.ts +355 -0
  380. package/src/ports/bastion-action.ts +198 -0
  381. package/src/ports/brain.ts +177 -15
  382. package/src/ports/citadel-action.contract.test.ts +430 -0
  383. package/src/ports/citadel-action.ts +174 -0
  384. package/src/ports/compliance-contract.ts +191 -0
  385. package/src/ports/db.ts +98 -0
  386. package/src/ports/delegation.contract.test.ts +428 -0
  387. package/src/ports/delegation.ts +211 -0
  388. package/src/ports/event-bus.ts +133 -0
  389. package/src/ports/federation.contract.test.ts +355 -0
  390. package/src/ports/federation.ts +190 -0
  391. package/src/ports/index.ts +186 -1
  392. package/src/ports/llm-provider.ts +123 -0
  393. package/src/ports/logger.ts +104 -0
  394. package/src/ports/manifest-registry.contract.test.ts +324 -0
  395. package/src/ports/manifest-registry.ts +188 -0
  396. package/src/ports/observability.contract.test.ts +315 -0
  397. package/src/ports/observability.ts +150 -0
  398. package/src/ports/outcome.ts +69 -0
  399. package/src/ports/privacy.contract.test.ts +413 -0
  400. package/src/ports/privacy.ts +207 -0
  401. package/src/ports/tenant-context.contract.test.ts +454 -0
  402. package/src/ports/tenant-context.ts +150 -0
  403. package/src/ports/vauban-finance-action.contract.test.ts +335 -0
  404. package/src/ports/vauban-finance-action.ts +166 -0
  405. package/src/ports/workflow-runtime.ts +327 -0
  406. package/src/proof/cert-verify.ts +249 -0
  407. package/src/replay/replay.ts +11 -8
  408. package/src/retry/index.ts +227 -0
  409. package/src/retry/presets.ts +75 -0
  410. package/src/skill-loop/ab-runner.ts +196 -0
  411. package/src/skill-loop/adoption.ts +188 -0
  412. package/src/skill-loop/candidate.ts +75 -0
  413. package/src/skill-loop/evaluator.ts +238 -0
  414. package/src/skill-loop/index.ts +51 -0
  415. package/src/skill-loop/reflexion-replay.ts +173 -0
  416. package/src/skill-loop/sign-off.ts +247 -0
  417. package/src/skill-loop/value-metric.ts +120 -0
  418. package/src/skill-loop/versioning.ts +75 -0
  419. package/src/skill-manifest/anchor.ts +401 -0
  420. package/src/skill-manifest/builder.ts +129 -0
  421. package/src/skill-manifest/index.ts +18 -0
  422. package/src/skill-manifest/types.ts +72 -0
  423. package/src/skill-manifest/verifier.ts +198 -0
  424. package/src/skills/errors.ts +30 -2
  425. package/src/skills/index.ts +19 -0
  426. package/src/skills/markdown/loader.ts +129 -0
  427. package/src/skills/markdown/schema.ts +144 -0
  428. package/src/skills/poc-md-loader/e2e-parity.test.ts +237 -0
  429. package/src/skills/poc-md-loader/markdown-loader.ts +161 -0
  430. package/src/skills/poc-md-loader/runner.ts +82 -0
  431. package/src/skills/poc-md-loader/vitest.poc.config.ts +13 -0
  432. package/src/skills/poc-md-loader/web-search/SKILL.md +42 -0
  433. package/src/skills/poc-md-loader/web-search/script.ts +109 -0
  434. package/src/skills/send-email.ts +15 -3
  435. package/src/testing/test-brain-port.ts +98 -24
  436. package/src/testing/test-event-bus.ts +104 -43
  437. package/src/trace/schema.ts +1 -1
  438. package/src/verify/formal/index.ts +154 -0
  439. package/src/verify/formal/policy.ts +253 -0
  440. package/src/verify/formal/result.ts +52 -0
  441. package/src/verify/formal/solver.ts +235 -0
  442. package/src/verify/formal/spec-language.ts +274 -0
@@ -0,0 +1,48 @@
1
+ /**
2
+ * src/compute/strategies/tree-of-thoughts.ts
3
+ *
4
+ * Tree-of-Thoughts (ToT) compute strategy.
5
+ *
6
+ * Reference: Yao et al. 2023, "Tree of Thoughts: Deliberate Problem Solving
7
+ * with Large Language Models", arXiv:2305.10601.
8
+ *
9
+ * Algorithm (paper §3):
10
+ * 1. Build a tree of partial-solution states, root = empty/initial state.
11
+ * 2. Expand each node into up to `branchFactor` children via the generator.
12
+ * 3. Evaluate each state with a lightweight heuristic (no extra LLM call).
13
+ * 4. BFS expands level-by-level; DFS goes depth-first with backtracking
14
+ * when score < pruning threshold.
15
+ * 5. Bound total expansions by `maxCalls` (== generator-call budget).
16
+ * 6. Return the highest-scoring leaf output.
17
+ *
18
+ * Default state-evaluator (no LLM):
19
+ * - string outputs : monotone progress score based on length (caps at 200)
20
+ * - number outputs : closeness to plausible-answer band [0, 100]
21
+ * - other : 0.5 (neutral)
22
+ *
23
+ * @experimental Public-experimental API per `contract-stability.md` (sprint-582).
24
+ */
25
+ import type { Strategy } from "../types.js";
26
+ export type ToTSearchPolicy = "bfs" | "dfs";
27
+ export interface ToTConfig {
28
+ /** BFS or DFS. Default: "bfs". */
29
+ searchPolicy: ToTSearchPolicy;
30
+ /** Max tree depth (steps). Default: 3. */
31
+ maxDepth: number;
32
+ /** Max branching factor (children per node). Default: 3. */
33
+ branchFactor: number;
34
+ /** Hard cap on total generator calls. Default: maxDepth * branchFactor. */
35
+ maxCalls: number;
36
+ /** State evaluator → score in [0,1]. Default: heuristic on output shape. */
37
+ evaluateState?: (state: unknown) => number;
38
+ /** Prune any node whose evaluator score is below this. Default: 0.2. */
39
+ pruneThreshold: number;
40
+ }
41
+ /**
42
+ * Construct a Tree-of-Thoughts {@link Strategy}.
43
+ *
44
+ * @throws RangeError when `maxDepth`, `branchFactor`, or `maxCalls` is < 1.
45
+ * @throws Error when `searchPolicy` is not "bfs" or "dfs".
46
+ */
47
+ export declare function treeOfThoughtsStrategy<TInput, TOutput>(config?: Partial<ToTConfig>): Strategy<TInput, TOutput>;
48
+ //# sourceMappingURL=tree-of-thoughts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree-of-thoughts.d.ts","sourceRoot":"","sources":["../../../src/compute/strategies/tree-of-thoughts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAkB,QAAQ,EAAkB,MAAM,aAAa,CAAC;AAI5E,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,KAAK,CAAC;AAE5C,MAAM,WAAW,SAAS;IACxB,kCAAkC;IAClC,YAAY,EAAE,eAAe,CAAC;IAC9B,0CAA0C;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,4DAA4D;IAC5D,YAAY,EAAE,MAAM,CAAC;IACrB,2EAA2E;IAC3E,QAAQ,EAAE,MAAM,CAAC;IACjB,4EAA4E;IAC5E,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,CAAC;IAC3C,wEAAwE;IACxE,cAAc,EAAE,MAAM,CAAC;CACxB;AAyCD;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,OAAO,EACpD,MAAM,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,GAC1B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAgM3B"}
@@ -0,0 +1,242 @@
1
+ /**
2
+ * src/compute/strategies/tree-of-thoughts.ts
3
+ *
4
+ * Tree-of-Thoughts (ToT) compute strategy.
5
+ *
6
+ * Reference: Yao et al. 2023, "Tree of Thoughts: Deliberate Problem Solving
7
+ * with Large Language Models", arXiv:2305.10601.
8
+ *
9
+ * Algorithm (paper §3):
10
+ * 1. Build a tree of partial-solution states, root = empty/initial state.
11
+ * 2. Expand each node into up to `branchFactor` children via the generator.
12
+ * 3. Evaluate each state with a lightweight heuristic (no extra LLM call).
13
+ * 4. BFS expands level-by-level; DFS goes depth-first with backtracking
14
+ * when score < pruning threshold.
15
+ * 5. Bound total expansions by `maxCalls` (== generator-call budget).
16
+ * 6. Return the highest-scoring leaf output.
17
+ *
18
+ * Default state-evaluator (no LLM):
19
+ * - string outputs : monotone progress score based on length (caps at 200)
20
+ * - number outputs : closeness to plausible-answer band [0, 100]
21
+ * - other : 0.5 (neutral)
22
+ *
23
+ * @experimental Public-experimental API per `contract-stability.md` (sprint-582).
24
+ */
25
+ const STRATEGY_NAME = "tree-of-thoughts";
26
+ const VALID_POLICIES = new Set(["bfs", "dfs"]);
27
+ // ─── Default evaluator ───────────────────────────────────────────────────────
28
+ function defaultEvaluator(state) {
29
+ if (typeof state === "string") {
30
+ const len = state.length;
31
+ if (len === 0)
32
+ return 0;
33
+ // Monotone, saturates at 200 chars → 1.0
34
+ return Math.min(1, len / 200);
35
+ }
36
+ if (typeof state === "number" && Number.isFinite(state)) {
37
+ if (state < 0 || state > 200)
38
+ return 0.1;
39
+ // Centered around 50 for plausibility (synthetic-task heuristic)
40
+ return 0.5 + 0.5 * (1 / (1 + Math.abs(state - 50)));
41
+ }
42
+ return 0.5;
43
+ }
44
+ // ─── Helpers ─────────────────────────────────────────────────────────────────
45
+ function throwIfAborted(signal) {
46
+ if (signal?.aborted) {
47
+ throw signal.reason instanceof Error
48
+ ? signal.reason
49
+ : new DOMException("Aborted", "AbortError");
50
+ }
51
+ }
52
+ // ─── Strategy factory ────────────────────────────────────────────────────────
53
+ /**
54
+ * Construct a Tree-of-Thoughts {@link Strategy}.
55
+ *
56
+ * @throws RangeError when `maxDepth`, `branchFactor`, or `maxCalls` is < 1.
57
+ * @throws Error when `searchPolicy` is not "bfs" or "dfs".
58
+ */
59
+ export function treeOfThoughtsStrategy(config) {
60
+ const searchPolicy = config?.searchPolicy ?? "bfs";
61
+ const maxDepth = config?.maxDepth ?? 3;
62
+ const branchFactor = config?.branchFactor ?? 3;
63
+ const maxCalls = config?.maxCalls ?? maxDepth * branchFactor;
64
+ const pruneThreshold = config?.pruneThreshold ?? 0.2;
65
+ const evaluateState = config?.evaluateState ?? defaultEvaluator;
66
+ if (!Number.isInteger(maxDepth) || maxDepth < 1) {
67
+ throw new RangeError(`treeOfThoughtsStrategy: maxDepth must be >=1, got ${maxDepth}`);
68
+ }
69
+ if (!Number.isInteger(branchFactor) || branchFactor < 1) {
70
+ throw new RangeError(`treeOfThoughtsStrategy: branchFactor must be >=1, got ${branchFactor}`);
71
+ }
72
+ if (!Number.isInteger(maxCalls) || maxCalls < 1) {
73
+ throw new RangeError(`treeOfThoughtsStrategy: maxCalls must be >=1, got ${maxCalls}`);
74
+ }
75
+ if (!VALID_POLICIES.has(searchPolicy)) {
76
+ throw new Error(`treeOfThoughtsStrategy: searchPolicy must be "bfs" or "dfs", got "${searchPolicy}"`);
77
+ }
78
+ const strategyLabel = `${STRATEGY_NAME}-${searchPolicy}`;
79
+ return {
80
+ name: strategyLabel,
81
+ async run(input, generator, ctx = {}) {
82
+ const start = performance.now();
83
+ const signal = ctx.signal;
84
+ throwIfAborted(signal);
85
+ const childCtx = signal ? { signal } : {};
86
+ let callsUsed = 0;
87
+ const allLeaves = [];
88
+ const allScores = [];
89
+ // Helper: expand one parent into up to branchFactor children.
90
+ // Each child = 1 generator call.
91
+ const expandNode = async (_parent, depth) => {
92
+ const childrenToMake = Math.min(branchFactor, maxCalls - callsUsed);
93
+ if (childrenToMake <= 0)
94
+ return [];
95
+ // Parallel sampling at this level.
96
+ throwIfAborted(signal);
97
+ const samples = await Promise.all(Array.from({ length: childrenToMake }, () => generator(input, childCtx)));
98
+ callsUsed += childrenToMake;
99
+ const nodes = samples.map((state) => {
100
+ const score = clamp01(evaluateState(state));
101
+ return { state, depth, score };
102
+ });
103
+ for (const n of nodes)
104
+ allScores.push(n.score);
105
+ // Pruned nodes are still recorded as leaves (score known) but not expanded.
106
+ return nodes;
107
+ };
108
+ if (searchPolicy === "bfs") {
109
+ // ── BFS ───────────────────────────────────────────────────────────
110
+ let frontier = [];
111
+ // Depth-1 children from root.
112
+ const initial = await expandNode(null, 1);
113
+ frontier = initial;
114
+ // Leaves at maxDepth or pruned go into allLeaves.
115
+ for (const n of initial) {
116
+ if (n.depth >= maxDepth || n.score < pruneThreshold) {
117
+ allLeaves.push(n);
118
+ }
119
+ }
120
+ while (frontier.length > 0 && callsUsed < maxCalls) {
121
+ // Filter out pruned/leaf nodes — only expand survivors.
122
+ const survivors = frontier.filter((n) => n.score >= pruneThreshold && n.depth < maxDepth);
123
+ if (survivors.length === 0)
124
+ break;
125
+ const nextFrontier = [];
126
+ for (const parent of survivors) {
127
+ if (callsUsed >= maxCalls)
128
+ break;
129
+ const children = await expandNode(parent, parent.depth + 1);
130
+ for (const c of children) {
131
+ if (c.depth >= maxDepth || c.score < pruneThreshold) {
132
+ allLeaves.push(c);
133
+ }
134
+ else {
135
+ nextFrontier.push(c);
136
+ }
137
+ }
138
+ }
139
+ // If BFS terminates with un-expanded frontier (budget hit), those are leaves too.
140
+ if (callsUsed >= maxCalls) {
141
+ for (const n of nextFrontier)
142
+ allLeaves.push(n);
143
+ break;
144
+ }
145
+ frontier = nextFrontier;
146
+ }
147
+ // Any remaining frontier nodes at end-of-budget = leaves.
148
+ for (const n of frontier) {
149
+ if (!allLeaves.includes(n))
150
+ allLeaves.push(n);
151
+ }
152
+ }
153
+ else {
154
+ // ── DFS with backtracking ─────────────────────────────────────────
155
+ const stack = [];
156
+ const initial = await expandNode(null, 1);
157
+ // Push so highest score is explored first.
158
+ const sortedInitial = [...initial].sort((a, b) => b.score - a.score);
159
+ stack.push(...sortedInitial.reverse()); // reverse so highest pops first
160
+ for (const n of initial) {
161
+ if (n.depth >= maxDepth || n.score < pruneThreshold) {
162
+ allLeaves.push(n);
163
+ }
164
+ }
165
+ while (stack.length > 0 && callsUsed < maxCalls) {
166
+ const node = stack.pop();
167
+ if (!node)
168
+ break;
169
+ // Backtrack if pruned or terminal.
170
+ if (node.score < pruneThreshold || node.depth >= maxDepth) {
171
+ // Already recorded as leaf above (or will be).
172
+ if (!allLeaves.includes(node))
173
+ allLeaves.push(node);
174
+ continue;
175
+ }
176
+ // Expand survivor.
177
+ const children = await expandNode(node, node.depth + 1);
178
+ const sortedChildren = [...children].sort((a, b) => b.score - a.score);
179
+ for (const c of sortedChildren.reverse()) {
180
+ if (c.depth >= maxDepth || c.score < pruneThreshold) {
181
+ allLeaves.push(c);
182
+ }
183
+ else {
184
+ stack.push(c);
185
+ }
186
+ }
187
+ }
188
+ // Any unexplored stack nodes = leaves (budget-bound).
189
+ for (const n of stack) {
190
+ if (!allLeaves.includes(n))
191
+ allLeaves.push(n);
192
+ }
193
+ }
194
+ // ── Pick highest-scoring leaf ─────────────────────────────────────
195
+ if (allLeaves.length === 0) {
196
+ // Should never happen: root expansion always produces ≥1 leaf
197
+ // unless maxCalls=0 (which we reject). Defensive fallback.
198
+ const fallback = await generator(input, childCtx);
199
+ callsUsed++;
200
+ allScores.push(clamp01(evaluateState(fallback)));
201
+ const latency_ms = performance.now() - start;
202
+ return {
203
+ result: fallback,
204
+ metadata: {
205
+ strategy: strategyLabel,
206
+ candidates: 1,
207
+ verifier_scores: allScores,
208
+ cost: { calls: callsUsed },
209
+ latency_ms,
210
+ },
211
+ };
212
+ }
213
+ let best = allLeaves[0];
214
+ for (let i = 1; i < allLeaves.length; i++) {
215
+ const n = allLeaves[i];
216
+ if (n.score > best.score)
217
+ best = n;
218
+ }
219
+ const latency_ms = performance.now() - start;
220
+ return {
221
+ result: best.state,
222
+ metadata: {
223
+ strategy: strategyLabel,
224
+ candidates: callsUsed,
225
+ verifier_scores: allScores,
226
+ cost: { calls: callsUsed },
227
+ latency_ms,
228
+ },
229
+ };
230
+ },
231
+ };
232
+ }
233
+ function clamp01(x) {
234
+ if (!Number.isFinite(x))
235
+ return 0;
236
+ if (x < 0)
237
+ return 0;
238
+ if (x > 1)
239
+ return 1;
240
+ return x;
241
+ }
242
+ //# sourceMappingURL=tree-of-thoughts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree-of-thoughts.js","sourceRoot":"","sources":["../../../src/compute/strategies/tree-of-thoughts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * src/compute/strategies/two-phase-orient.ts
3
+ *
4
+ * Two-Phase Orient pattern.
5
+ *
6
+ * Phase 1 — Orient: read-only context gathering, produces an orientation state.
7
+ * Phase 2 — Act: state-mutating execution driven by the orientation.
8
+ *
9
+ * The separation enforces a hard OODA discipline:
10
+ * - Phase 1 has no side effects; it may be retried cheaply on failure.
11
+ * - Phase 2 consumes the orientation and may be retried up to `maxActRetries`.
12
+ *
13
+ * Error semantics:
14
+ * - `TwoPhaseOrientError` (phase: "orient") — Phase 1 threw; Phase 2 is never reached.
15
+ * - `TwoPhaseOrientError` (phase: "act") — Phase 2 exhausted all retries.
16
+ * - Each Phase 2 retry attempt is tracked in `retriesUsed` (0 = first attempt succeeded).
17
+ */
18
+ export declare class TwoPhaseOrientError extends Error {
19
+ readonly phase: "orient" | "act";
20
+ readonly cause: unknown;
21
+ readonly retriesUsed: number;
22
+ constructor(phase: "orient" | "act", cause: unknown, retriesUsed: number, message: string);
23
+ }
24
+ export interface TwoPhaseOrientConfig<C, O, R> {
25
+ /**
26
+ * Phase 1: orientation (read-only, observe + analyse).
27
+ * Receives the raw context and returns an orientation state.
28
+ * Must not produce observable side effects.
29
+ */
30
+ orient: (context: C) => Promise<O>;
31
+ /**
32
+ * Phase 2: act on the orientation.
33
+ * Receives both the orientation produced by Phase 1 and the original context.
34
+ * Returns the final result.
35
+ */
36
+ act: (orientation: O, context: C) => Promise<R>;
37
+ /**
38
+ * Maximum number of times Phase 2 may be retried after a recoverable failure.
39
+ * `maxActRetries = 1` means one initial attempt + one retry = 2 total attempts.
40
+ * Default: 1.
41
+ * Must be a non-negative integer; values < 0 are treated as 0.
42
+ */
43
+ maxActRetries?: number;
44
+ }
45
+ export interface TwoPhaseOrientResult<O, R> {
46
+ orientation: O;
47
+ result: R;
48
+ /** Number of Phase-2 retries consumed (0 = succeeded on first attempt). */
49
+ retriesUsed: number;
50
+ }
51
+ /**
52
+ * Executes the Two-Phase Orient pattern.
53
+ *
54
+ * @param config Wiring for both phases + optional retry cap.
55
+ * @param context Opaque context forwarded to both `orient` and `act`.
56
+ *
57
+ * @throws {TwoPhaseOrientError} When Phase 1 throws (phase: "orient") or
58
+ * Phase 2 exhausts all retries (phase: "act").
59
+ *
60
+ * @example
61
+ * ```ts
62
+ * const { orientation, result, retriesUsed } = await runTwoPhaseOrient(
63
+ * {
64
+ * orient: async (ctx) => await gatherSignals(ctx),
65
+ * act: async (orient, ctx) => await executeDecision(orient, ctx),
66
+ * },
67
+ * requestContext,
68
+ * );
69
+ * ```
70
+ */
71
+ export declare function runTwoPhaseOrient<C, O, R>(config: TwoPhaseOrientConfig<C, O, R>, context: C): Promise<TwoPhaseOrientResult<O, R>>;
72
+ //# sourceMappingURL=two-phase-orient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"two-phase-orient.d.ts","sourceRoot":"","sources":["../../../src/compute/strategies/two-phase-orient.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAMH,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,KAAK,CAAC;IACjC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;gBAG3B,KAAK,EAAE,QAAQ,GAAG,KAAK,EACvB,KAAK,EAAE,OAAO,EACd,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM;CAUlB;AAMD,MAAM,WAAW,oBAAoB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IAC3C;;;;OAIG;IACH,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAEnC;;;;OAIG;IACH,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAEhD;;;;;OAKG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB,CAAC,CAAC,EAAE,CAAC;IACxC,WAAW,EAAE,CAAC,CAAC;IACf,MAAM,EAAE,CAAC,CAAC;IACV,2EAA2E;IAC3E,WAAW,EAAE,MAAM,CAAC;CACrB;AAMD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,iBAAiB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAC7C,MAAM,EAAE,oBAAoB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACrC,OAAO,EAAE,CAAC,GACT,OAAO,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAyCrC"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * src/compute/strategies/two-phase-orient.ts
3
+ *
4
+ * Two-Phase Orient pattern.
5
+ *
6
+ * Phase 1 — Orient: read-only context gathering, produces an orientation state.
7
+ * Phase 2 — Act: state-mutating execution driven by the orientation.
8
+ *
9
+ * The separation enforces a hard OODA discipline:
10
+ * - Phase 1 has no side effects; it may be retried cheaply on failure.
11
+ * - Phase 2 consumes the orientation and may be retried up to `maxActRetries`.
12
+ *
13
+ * Error semantics:
14
+ * - `TwoPhaseOrientError` (phase: "orient") — Phase 1 threw; Phase 2 is never reached.
15
+ * - `TwoPhaseOrientError` (phase: "act") — Phase 2 exhausted all retries.
16
+ * - Each Phase 2 retry attempt is tracked in `retriesUsed` (0 = first attempt succeeded).
17
+ */
18
+ // ---------------------------------------------------------------------------
19
+ // Error
20
+ // ---------------------------------------------------------------------------
21
+ export class TwoPhaseOrientError extends Error {
22
+ phase;
23
+ cause;
24
+ retriesUsed;
25
+ constructor(phase, cause, retriesUsed, message) {
26
+ super(message);
27
+ this.name = "TwoPhaseOrientError";
28
+ this.phase = phase;
29
+ this.cause = cause;
30
+ this.retriesUsed = retriesUsed;
31
+ // Restore prototype chain (tsc targets < ES2022)
32
+ Object.setPrototypeOf(this, TwoPhaseOrientError.prototype);
33
+ }
34
+ }
35
+ // ---------------------------------------------------------------------------
36
+ // Implementation
37
+ // ---------------------------------------------------------------------------
38
+ /**
39
+ * Executes the Two-Phase Orient pattern.
40
+ *
41
+ * @param config Wiring for both phases + optional retry cap.
42
+ * @param context Opaque context forwarded to both `orient` and `act`.
43
+ *
44
+ * @throws {TwoPhaseOrientError} When Phase 1 throws (phase: "orient") or
45
+ * Phase 2 exhausts all retries (phase: "act").
46
+ *
47
+ * @example
48
+ * ```ts
49
+ * const { orientation, result, retriesUsed } = await runTwoPhaseOrient(
50
+ * {
51
+ * orient: async (ctx) => await gatherSignals(ctx),
52
+ * act: async (orient, ctx) => await executeDecision(orient, ctx),
53
+ * },
54
+ * requestContext,
55
+ * );
56
+ * ```
57
+ */
58
+ export async function runTwoPhaseOrient(config, context) {
59
+ const maxRetries = Math.max(0, Math.floor(config.maxActRetries ?? 1));
60
+ // ── Phase 1: Orient ───────────────────────────────────────────────────────
61
+ let orientation;
62
+ try {
63
+ orientation = await config.orient(context);
64
+ }
65
+ catch (err) {
66
+ throw new TwoPhaseOrientError("orient", err, 0, `TwoPhaseOrient Phase 1 (orient) failed: ${err instanceof Error ? err.message : String(err)}`);
67
+ }
68
+ // ── Phase 2: Act (with retries) ───────────────────────────────────────────
69
+ let lastActError;
70
+ for (let attempt = 0; attempt <= maxRetries; attempt++) {
71
+ try {
72
+ const result = await config.act(orientation, context);
73
+ return { orientation, result, retriesUsed: attempt };
74
+ }
75
+ catch (err) {
76
+ lastActError = err;
77
+ // Continue to next attempt if retries remain.
78
+ }
79
+ }
80
+ // All attempts exhausted.
81
+ throw new TwoPhaseOrientError("act", lastActError, maxRetries, `TwoPhaseOrient Phase 2 (act) failed after ${maxRetries + 1} attempt(s): ${lastActError instanceof Error
82
+ ? lastActError.message
83
+ : String(lastActError)}`);
84
+ }
85
+ //# sourceMappingURL=two-phase-orient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"two-phase-orient.js","sourceRoot":"","sources":["../../../src/compute/strategies/two-phase-orient.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,8EAA8E;AAC9E,QAAQ;AACR,8EAA8E;AAE9E,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IACnC,KAAK,CAAmB;IACxB,KAAK,CAAU;IACf,WAAW,CAAS;IAE7B,YACE,KAAuB,EACvB,KAAc,EACd,WAAmB,EACnB,OAAe;QAEf,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;QAClC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,iDAAiD;QACjD,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,mBAAmB,CAAC,SAAS,CAAC,CAAC;IAC7D,CAAC;CACF;AAqCD,8EAA8E;AAC9E,iBAAiB;AACjB,8EAA8E;AAE9E;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,MAAqC,EACrC,OAAU;IAEV,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,IAAI,CAAC,CAAC,CAAC,CAAC;IAEtE,6EAA6E;IAC7E,IAAI,WAAc,CAAC;IACnB,IAAI,CAAC;QACH,WAAW,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,mBAAmB,CAC3B,QAAQ,EACR,GAAG,EACH,CAAC,EACD,2CACE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CACjD,EAAE,CACH,CAAC;IACJ,CAAC;IAED,6EAA6E;IAC7E,IAAI,YAAqB,CAAC;IAC1B,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC;QACvD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YACtD,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;QACvD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,YAAY,GAAG,GAAG,CAAC;YACnB,8CAA8C;QAChD,CAAC;IACH,CAAC;IAED,0BAA0B;IAC1B,MAAM,IAAI,mBAAmB,CAC3B,KAAK,EACL,YAAY,EACZ,UAAU,EACV,6CAA6C,UAAU,GAAG,CAAC,gBACzD,YAAY,YAAY,KAAK;QAC3B,CAAC,CAAC,YAAY,CAAC,OAAO;QACtB,CAAC,CAAC,MAAM,CAAC,YAAY,CACzB,EAAE,CACH,CAAC;AACJ,CAAC"}
@@ -147,30 +147,30 @@ export declare const cycleSnapshotSchema: z.ZodObject<{
147
147
  costUsd: z.ZodOptional<z.ZodNumber>;
148
148
  }, "strip", z.ZodTypeAny, {
149
149
  type: string;
150
- index: number;
151
150
  phase: string;
151
+ index: number;
152
152
  model?: {
153
153
  provider: string;
154
154
  name: string;
155
155
  version: string;
156
156
  } | undefined;
157
+ costUsd?: number | undefined;
157
158
  output?: unknown;
158
159
  storedInput?: unknown;
159
160
  toolName?: string | undefined;
160
- costUsd?: number | undefined;
161
161
  }, {
162
162
  type: string;
163
- index: number;
164
163
  phase: string;
164
+ index: number;
165
165
  model?: {
166
166
  provider: string;
167
167
  name: string;
168
168
  version: string;
169
169
  } | undefined;
170
+ costUsd?: number | undefined;
170
171
  output?: unknown;
171
172
  storedInput?: unknown;
172
173
  toolName?: string | undefined;
173
- costUsd?: number | undefined;
174
174
  }>, "many">;
175
175
  budgetUsdMax: z.ZodNumber;
176
176
  budgetUsdSpent: z.ZodNumber;
@@ -221,23 +221,23 @@ export declare const cycleSnapshotSchema: z.ZodObject<{
221
221
  rootHash: z.ZodString;
222
222
  }, "strict", z.ZodTypeAny, {
223
223
  runId: string;
224
+ rootHash: string;
224
225
  steps: {
225
226
  type: string;
226
- index: number;
227
227
  phase: string;
228
+ index: number;
228
229
  model?: {
229
230
  provider: string;
230
231
  name: string;
231
232
  version: string;
232
233
  } | undefined;
234
+ costUsd?: number | undefined;
233
235
  output?: unknown;
234
236
  storedInput?: unknown;
235
237
  toolName?: string | undefined;
236
- costUsd?: number | undefined;
237
238
  }[];
238
239
  budgetUsdMax: number;
239
240
  budgetUsdSpent: number;
240
- rootHash: string;
241
241
  metadata?: z.objectOutputType<{
242
242
  rso_veto: z.ZodOptional<z.ZodBoolean>;
243
243
  hash_primitive: z.ZodOptional<z.ZodString>;
@@ -257,23 +257,23 @@ export declare const cycleSnapshotSchema: z.ZodObject<{
257
257
  scope_id?: string | undefined;
258
258
  }, {
259
259
  runId: string;
260
+ rootHash: string;
260
261
  steps: {
261
262
  type: string;
262
- index: number;
263
263
  phase: string;
264
+ index: number;
264
265
  model?: {
265
266
  provider: string;
266
267
  name: string;
267
268
  version: string;
268
269
  } | undefined;
270
+ costUsd?: number | undefined;
269
271
  output?: unknown;
270
272
  storedInput?: unknown;
271
273
  toolName?: string | undefined;
272
- costUsd?: number | undefined;
273
274
  }[];
274
275
  budgetUsdMax: number;
275
276
  budgetUsdSpent: number;
276
- rootHash: string;
277
277
  metadata?: z.objectInputType<{
278
278
  rso_veto: z.ZodOptional<z.ZodBoolean>;
279
279
  hash_primitive: z.ZodOptional<z.ZodString>;