@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,260 @@
1
+ /**
2
+ * VFinanceActionPort contract tests.
3
+ *
4
+ * Applied to any VFinanceActionPort implementation. Tests proof_grade tiers,
5
+ * oracle quorum enforcement, and per-batch anchoring discipline.
6
+ *
7
+ * Source: MASTER-PLAN-v5.md §2.4 (proof_grade gradient + ADR-ECO-017)
8
+ */
9
+ import { describe, expect, test } from "vitest";
10
+ import { VFOracleQuorumError, VFProofGradeMismatchError, } from "./vauban-finance-action.js";
11
+ function makeActionContext(overrides = {}) {
12
+ return {
13
+ tenantId: "tenant-001",
14
+ runId: crypto.randomUUID(),
15
+ ...overrides,
16
+ };
17
+ }
18
+ function makeTradeRecord(overrides = {}) {
19
+ return {
20
+ id: crypto.randomUUID(),
21
+ side: "buy",
22
+ qty: "100000000",
23
+ price: "50000",
24
+ ts: new Date(),
25
+ ...overrides,
26
+ };
27
+ }
28
+ function makeStrategyRunInput(overrides = {}) {
29
+ return {
30
+ strategy_id: "strat-001",
31
+ sprint_id: "sprint-50",
32
+ dataset_hash: "abcd1234efgh5678",
33
+ code_commit: "abc123def456",
34
+ ...overrides,
35
+ };
36
+ }
37
+ export const vfinanceActionPortContract = (factory) => {
38
+ describe("VFinanceActionPort contract", () => {
39
+ test("getMarketSignal returns price with oracle metadata", async () => {
40
+ const port = factory();
41
+ const ctx = makeActionContext();
42
+ const signal = await port.getMarketSignal("BTC/USD", ctx);
43
+ expect(signal.symbol).toBe("BTC/USD");
44
+ expect(signal.price).toBeDefined();
45
+ expect(signal.oracle_count).toBeGreaterThan(0);
46
+ expect(signal.divergence_bps).toBeGreaterThanOrEqual(0);
47
+ });
48
+ test("getSolvencyProof attestation tier returns proof without STARK", async () => {
49
+ const port = factory();
50
+ const ctx = makeActionContext();
51
+ const portfolioId = "portfolio-001";
52
+ const claim = await port.getSolvencyProof(portfolioId, "attestation", ctx);
53
+ expect(claim.portfolio_id).toBe(portfolioId);
54
+ expect(claim.proof_grade).toBe("attestation");
55
+ expect(claim.assets_ge_liabilities).toBeDefined();
56
+ // attestation tier may omit stark_proof
57
+ });
58
+ test("getSolvencyProof custody tier enforces oracle quorum 3-of-4", async () => {
59
+ const port = factory();
60
+ const ctx = makeActionContext();
61
+ const portfolioId = "portfolio-001";
62
+ try {
63
+ const claim = await port.getSolvencyProof(portfolioId, "custody", ctx);
64
+ // If it succeeds, oracle_quorum must be ≥ 3
65
+ if (claim.oracle_quorum !== undefined) {
66
+ expect(claim.oracle_quorum).toBeGreaterThanOrEqual(3);
67
+ }
68
+ }
69
+ catch (err) {
70
+ // Expected: may fail if insufficient oracle availability
71
+ if (err instanceof VFOracleQuorumError) {
72
+ expect(err.required_quorum).toBeGreaterThanOrEqual(3);
73
+ }
74
+ }
75
+ });
76
+ test("getSolvencyProof custody throws VFOracleQuorumError if < 3 oracles available", async () => {
77
+ const port = factory();
78
+ const ctx = makeActionContext();
79
+ const portfolioId = "portfolio-002"; // portfolio with limited oracles
80
+ try {
81
+ await port.getSolvencyProof(portfolioId, "custody", ctx);
82
+ }
83
+ catch (err) {
84
+ if (err instanceof VFOracleQuorumError) {
85
+ expect(err.required_quorum).toBe(3);
86
+ expect(err.available_oracles).toBeLessThan(3);
87
+ }
88
+ }
89
+ });
90
+ test("recordTrade emits HMAC-signed TradeClaim per ADR-ECO-017", async () => {
91
+ const port = factory();
92
+ const trade = makeTradeRecord();
93
+ const ctx = makeActionContext();
94
+ const claim = await port.recordTrade(trade, ctx);
95
+ expect(claim.trade_id).toBe(trade.id);
96
+ expect(claim.executed).toBe(true);
97
+ expect(claim.hmac_signature).toBeDefined();
98
+ expect(claim.hmac_signature.length).toBeGreaterThan(0);
99
+ });
100
+ test("recordTrade per-batch anchoring (never per-trade)", async () => {
101
+ const port = factory();
102
+ const trade = makeTradeRecord();
103
+ const ctx = makeActionContext();
104
+ const claim = await port.recordTrade(trade, ctx);
105
+ // Per-batch anchoring: anchor_id may be undefined or shared across trades
106
+ // Never individual per-trade anchor
107
+ if (claim.anchor_id) {
108
+ // If present, should be batch identifier (not trade-specific hash)
109
+ expect(claim.anchor_id).toBeDefined();
110
+ }
111
+ });
112
+ test("recordTrade idempotency: same trade_id returns consistent claim", async () => {
113
+ const port = factory();
114
+ const tradeId = crypto.randomUUID();
115
+ const trade1 = makeTradeRecord({ id: tradeId });
116
+ const trade2 = makeTradeRecord({ id: tradeId }); // same id, may have different data
117
+ const ctx = makeActionContext();
118
+ const claim1 = await port.recordTrade(trade1, ctx);
119
+ // Second call with same id should be idempotent
120
+ const claim2 = await port.recordTrade(trade2, ctx);
121
+ // Trade claims should have same id
122
+ expect(claim1.trade_id).toBe(claim2.trade_id);
123
+ });
124
+ test("submitStrategyRun returns proof commitment linked to sprint", async () => {
125
+ const port = factory();
126
+ const strategy = makeStrategyRunInput();
127
+ const ctx = makeActionContext();
128
+ const claim = await port.submitStrategyRun(strategy, ctx);
129
+ expect(claim.strategy_id).toBe(strategy.strategy_id);
130
+ expect(claim.sprint_id).toBe(strategy.sprint_id);
131
+ expect(claim.integrity_proven).toBe(true);
132
+ expect(claim.proof_commitment).toBeDefined();
133
+ });
134
+ test("submitStrategyRun proof_commitment anchors to sealed sprint", async () => {
135
+ const port = factory();
136
+ const strategy = makeStrategyRunInput({
137
+ sprint_id: "sprint-50",
138
+ });
139
+ const ctx = makeActionContext();
140
+ const claim = await port.submitStrategyRun(strategy, ctx);
141
+ // Proof commitment should be Merkle path into sealed sprint (verifiable via Citadel)
142
+ expect(claim.proof_commitment).toBeDefined();
143
+ expect(claim.proof_commitment.length).toBeGreaterThan(0);
144
+ });
145
+ test("oracle quorum error includes required vs available count", async () => {
146
+ const port = factory();
147
+ const ctx = makeActionContext();
148
+ const portfolioId = "portfolio-quorum-fail";
149
+ try {
150
+ await port.getSolvencyProof(portfolioId, "custody", ctx);
151
+ }
152
+ catch (err) {
153
+ if (err instanceof VFOracleQuorumError) {
154
+ expect(err.required_quorum).toBeGreaterThan(0);
155
+ expect(err.available_oracles).toBeGreaterThanOrEqual(0);
156
+ expect(err.message).toContain("quorum");
157
+ }
158
+ }
159
+ });
160
+ test("proof grade mismatch error includes expected vs actual", async () => {
161
+ const port = factory();
162
+ const ctx = makeActionContext();
163
+ const portfolioId = "portfolio-001";
164
+ try {
165
+ // Request custody, but portfolio only supports attestation
166
+ await port.getSolvencyProof(portfolioId, "custody", ctx);
167
+ }
168
+ catch (err) {
169
+ if (err instanceof VFProofGradeMismatchError) {
170
+ expect(err.expected_grade).toBe("custody");
171
+ expect(err.actual_grade).toBeDefined();
172
+ }
173
+ }
174
+ });
175
+ test("anchoring forbidden error prevents per-trade anchor attempts", async () => {
176
+ // This test validates the constraint: only per-batch anchoring allowed
177
+ // Implementation detail: if a trade record attempts to specify per-trade anchor_id,
178
+ // the port should reject it with VFAnchoringForbiddenError
179
+ expect(true).toBe(true); // placeholder: tested implicitly via recordTrade
180
+ });
181
+ });
182
+ };
183
+ // ─── Mock implementation ──────────────────────────────────────────────────
184
+ class MockVFinanceActionPort {
185
+ oracleAvailability = new Map();
186
+ recordedTrades = new Map();
187
+ constructor() {
188
+ // portfolio-001: has 4 oracles
189
+ this.oracleAvailability.set("portfolio-001", {
190
+ count: 4,
191
+ oracles: ["oracle-a", "oracle-b", "oracle-c", "oracle-d"],
192
+ });
193
+ // portfolio-002: has only 1 oracle
194
+ this.oracleAvailability.set("portfolio-002", {
195
+ count: 1,
196
+ oracles: ["oracle-a"],
197
+ });
198
+ // portfolio-quorum-fail: has 2 oracles (insufficient for custody quorum of 3)
199
+ this.oracleAvailability.set("portfolio-quorum-fail", {
200
+ count: 2,
201
+ oracles: ["oracle-a", "oracle-b"],
202
+ });
203
+ }
204
+ async getMarketSignal(symbol, _ctx) {
205
+ return {
206
+ symbol,
207
+ price: "50000.50",
208
+ timestamp: new Date(),
209
+ oracle_count: 4,
210
+ divergence_bps: 15,
211
+ };
212
+ }
213
+ async getSolvencyProof(portfolioId, proofGrade, ctx) {
214
+ const oracleInfo = this.oracleAvailability.get(portfolioId);
215
+ // custody tier requires oracle quorum >= 3
216
+ if (proofGrade === "custody") {
217
+ if (!oracleInfo || oracleInfo.count < 3) {
218
+ const available = oracleInfo?.count ?? 0;
219
+ throw new VFOracleQuorumError(3, available);
220
+ }
221
+ }
222
+ return {
223
+ portfolio_id: portfolioId,
224
+ assets_ge_liabilities: true,
225
+ proof_grade: proofGrade,
226
+ stark_proof: proofGrade === "custody"
227
+ ? `0x${crypto.randomUUID().replace(/-/g, "").substring(0, 60)}`
228
+ : undefined,
229
+ oracle_quorum: oracleInfo?.count ?? 0,
230
+ timestamp: new Date(),
231
+ };
232
+ }
233
+ async recordTrade(trade, _ctx) {
234
+ // Generate HMAC signature (mock)
235
+ const hmacSig = `hmac-${crypto.randomUUID()}`.substring(0, 64);
236
+ const claim = {
237
+ trade_id: trade.id,
238
+ executed: true,
239
+ hmac_signature: hmacSig,
240
+ // Per-batch anchoring only (not per-trade)
241
+ // anchor_id is optional and shared across batch
242
+ timestamp: new Date(),
243
+ };
244
+ // Store for idempotency check
245
+ this.recordedTrades.set(trade.id, claim);
246
+ return claim;
247
+ }
248
+ async submitStrategyRun(strategy, _ctx) {
249
+ return {
250
+ strategy_id: strategy.strategy_id,
251
+ sprint_id: strategy.sprint_id,
252
+ integrity_proven: true,
253
+ proof_commitment: `merkle-${crypto.randomUUID()}`,
254
+ timestamp: new Date(),
255
+ };
256
+ }
257
+ }
258
+ // ─── Default contract application ──────────────────────────────────────────
259
+ vfinanceActionPortContract(() => new MockVFinanceActionPort());
260
+ //# sourceMappingURL=vauban-finance-action.contract.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vauban-finance-action.contract.test.js","sourceRoot":"","sources":["../../src/ports/vauban-finance-action.contract.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,106 @@
1
+ /**
2
+ * VFinanceActionPort — host adapter for Vauban Finance capabilities.
3
+ *
4
+ * Implements proof_grade tiers (attestation → attestation_custody_compatible → custody).
5
+ * Manages STARK proofs, oracle quorum validation, and per-batch anchoring discipline.
6
+ *
7
+ * Source: MASTER-PLAN-v5.md §2.4 (Q-VF-1, Q-VF-2) — proof_grade gradient + ADR-ECO-017
8
+ */
9
+ export type PortfolioId = string & {
10
+ readonly __brand: "PortfolioId";
11
+ };
12
+ export type Symbol = string;
13
+ export type ProofGrade = "attestation" | "attestation_custody_compatible" | "custody";
14
+ export interface MarketSignal {
15
+ readonly symbol: Symbol;
16
+ readonly price: string;
17
+ readonly timestamp: Date;
18
+ readonly oracle_count: number;
19
+ readonly divergence_bps: number;
20
+ }
21
+ export interface SolvencyClaim {
22
+ readonly portfolio_id: PortfolioId;
23
+ readonly assets_ge_liabilities: boolean;
24
+ readonly proof_grade: ProofGrade;
25
+ readonly stark_proof?: string;
26
+ readonly oracle_quorum?: number;
27
+ readonly timestamp: Date;
28
+ }
29
+ export interface TradeRecord {
30
+ readonly id: string;
31
+ readonly side: "buy" | "sell";
32
+ readonly qty: string;
33
+ readonly price: string;
34
+ readonly ts: Date;
35
+ }
36
+ export interface TradeClaim {
37
+ readonly trade_id: string;
38
+ readonly executed: boolean;
39
+ readonly hmac_signature: string;
40
+ readonly anchor_id?: string;
41
+ readonly timestamp: Date;
42
+ }
43
+ export interface StrategyRunInput {
44
+ readonly strategy_id: string;
45
+ readonly sprint_id: string;
46
+ readonly dataset_hash: string;
47
+ readonly code_commit: string;
48
+ }
49
+ export interface StrategyRunClaim {
50
+ readonly strategy_id: string;
51
+ readonly sprint_id: string;
52
+ readonly integrity_proven: boolean;
53
+ readonly proof_commitment: string;
54
+ readonly timestamp: Date;
55
+ }
56
+ export interface ActionContext {
57
+ readonly tenantId: string;
58
+ readonly runId: string;
59
+ readonly legalBasis?: string;
60
+ }
61
+ export interface VFinanceActionPort {
62
+ /**
63
+ * Read-only: fetch market signal for symbol (oracle aggregation).
64
+ */
65
+ getMarketSignal(symbol: Symbol, ctx: ActionContext): Promise<MarketSignal>;
66
+ /**
67
+ * Generate solvency proof (range proof for assets ≥ liabilities).
68
+ * proof_grade determines: STARK requirement, oracle quorum.
69
+ * custody (highest assurance): requires oracle_quorum ≥ 3-of-4.
70
+ */
71
+ getSolvencyProof(portfolioId: PortfolioId, proofGrade: ProofGrade, ctx: ActionContext): Promise<SolvencyClaim>;
72
+ /**
73
+ * Record a trade execution with HMAC-SHA256 signature (ADR-ECO-017).
74
+ * Per-batch anchoring only — throws VFAnchoringForbiddenError if per-trade anchor attempted.
75
+ */
76
+ recordTrade(trade: TradeRecord, ctx: ActionContext): Promise<TradeClaim>;
77
+ /**
78
+ * Submit strategy run to sprint seal (Citadel integration pattern).
79
+ * Returns proof commitment linking to sealed sprint.
80
+ */
81
+ submitStrategyRun(strategy: StrategyRunInput, ctx: ActionContext): Promise<StrategyRunClaim>;
82
+ }
83
+ export declare class VFOracleQuorumError extends Error {
84
+ readonly required_quorum: number;
85
+ readonly available_oracles: number;
86
+ readonly cause?: unknown | undefined;
87
+ constructor(required_quorum: number, available_oracles: number, cause?: unknown | undefined);
88
+ }
89
+ export declare class VFProofGradeMismatchError extends Error {
90
+ readonly expected_grade: ProofGrade;
91
+ readonly actual_grade: ProofGrade;
92
+ readonly cause?: unknown | undefined;
93
+ constructor(message: string, expected_grade: ProofGrade, actual_grade: ProofGrade, cause?: unknown | undefined);
94
+ }
95
+ export declare class VFAnchoringForbiddenError extends Error {
96
+ readonly reason: "per_trade_anchor_forbidden" | "batch_anchor_missing";
97
+ readonly cause?: unknown | undefined;
98
+ constructor(message: string, reason: "per_trade_anchor_forbidden" | "batch_anchor_missing", cause?: unknown | undefined);
99
+ }
100
+ export declare class VFProofGenerationError extends Error {
101
+ readonly portfolio_id: PortfolioId;
102
+ readonly proof_type: "stark_range" | "commitment";
103
+ readonly cause?: unknown | undefined;
104
+ constructor(portfolio_id: PortfolioId, proof_type: "stark_range" | "commitment", cause?: unknown | undefined);
105
+ }
106
+ //# sourceMappingURL=vauban-finance-action.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vauban-finance-action.d.ts","sourceRoot":"","sources":["../../src/ports/vauban-finance-action.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * VFinanceActionPort — host adapter for Vauban Finance capabilities.
3
+ *
4
+ * Implements proof_grade tiers (attestation → attestation_custody_compatible → custody).
5
+ * Manages STARK proofs, oracle quorum validation, and per-batch anchoring discipline.
6
+ *
7
+ * Source: MASTER-PLAN-v5.md §2.4 (Q-VF-1, Q-VF-2) — proof_grade gradient + ADR-ECO-017
8
+ */
9
+ // ─── Typed errors ─────────────────────────────────────────────────────────
10
+ export class VFOracleQuorumError extends Error {
11
+ required_quorum;
12
+ available_oracles;
13
+ cause;
14
+ constructor(required_quorum, available_oracles, cause) {
15
+ super(`Oracle quorum required ${required_quorum}, available ${available_oracles}`);
16
+ this.required_quorum = required_quorum;
17
+ this.available_oracles = available_oracles;
18
+ this.cause = cause;
19
+ this.name = "VFOracleQuorumError";
20
+ Object.setPrototypeOf(this, new.target.prototype);
21
+ }
22
+ }
23
+ export class VFProofGradeMismatchError extends Error {
24
+ expected_grade;
25
+ actual_grade;
26
+ cause;
27
+ constructor(message, expected_grade, actual_grade, cause) {
28
+ super(message);
29
+ this.expected_grade = expected_grade;
30
+ this.actual_grade = actual_grade;
31
+ this.cause = cause;
32
+ this.name = "VFProofGradeMismatchError";
33
+ Object.setPrototypeOf(this, new.target.prototype);
34
+ }
35
+ }
36
+ export class VFAnchoringForbiddenError extends Error {
37
+ reason;
38
+ cause;
39
+ constructor(message, reason, cause) {
40
+ super(message);
41
+ this.reason = reason;
42
+ this.cause = cause;
43
+ this.name = "VFAnchoringForbiddenError";
44
+ Object.setPrototypeOf(this, new.target.prototype);
45
+ }
46
+ }
47
+ export class VFProofGenerationError extends Error {
48
+ portfolio_id;
49
+ proof_type;
50
+ cause;
51
+ constructor(portfolio_id, proof_type, cause) {
52
+ super(`Proof generation failed for ${portfolio_id} (${proof_type}): ${cause instanceof Error ? cause.message : String(cause)}`);
53
+ this.portfolio_id = portfolio_id;
54
+ this.proof_type = proof_type;
55
+ this.cause = cause;
56
+ this.name = "VFProofGenerationError";
57
+ Object.setPrototypeOf(this, new.target.prototype);
58
+ }
59
+ }
60
+ //# sourceMappingURL=vauban-finance-action.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vauban-finance-action.js","sourceRoot":"","sources":["../../src/ports/vauban-finance-action.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAqGH,6EAA6E;AAE7E,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAE1B;IACA;IACA;IAHlB,YACkB,eAAuB,EACvB,iBAAyB,EACzB,KAAe;QAE/B,KAAK,CACH,0BAA0B,eAAe,eAAe,iBAAiB,EAAE,CAC5E,CAAC;QANc,oBAAe,GAAf,eAAe,CAAQ;QACvB,sBAAiB,GAAjB,iBAAiB,CAAQ;QACzB,UAAK,GAAL,KAAK,CAAU;QAK/B,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;QAClC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACpD,CAAC;CACF;AAED,MAAM,OAAO,yBAA0B,SAAQ,KAAK;IAGhC;IACA;IACA;IAJlB,YACE,OAAe,EACC,cAA0B,EAC1B,YAAwB,EACxB,KAAe;QAE/B,KAAK,CAAC,OAAO,CAAC,CAAC;QAJC,mBAAc,GAAd,cAAc,CAAY;QAC1B,iBAAY,GAAZ,YAAY,CAAY;QACxB,UAAK,GAAL,KAAK,CAAU;QAG/B,IAAI,CAAC,IAAI,GAAG,2BAA2B,CAAC;QACxC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACpD,CAAC;CACF;AAED,MAAM,OAAO,yBAA0B,SAAQ,KAAK;IAGhC;IAGA;IALlB,YACE,OAAe,EACC,MAEU,EACV,KAAe;QAE/B,KAAK,CAAC,OAAO,CAAC,CAAC;QALC,WAAM,GAAN,MAAM,CAEI;QACV,UAAK,GAAL,KAAK,CAAU;QAG/B,IAAI,CAAC,IAAI,GAAG,2BAA2B,CAAC;QACxC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACpD,CAAC;CACF;AAED,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IAE7B;IACA;IACA;IAHlB,YACkB,YAAyB,EACzB,UAAwC,EACxC,KAAe;QAE/B,KAAK,CACH,+BAA+B,YAAY,KAAK,UAAU,MACxD,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CACvD,EAAE,CACH,CAAC;QARc,iBAAY,GAAZ,YAAY,CAAa;QACzB,eAAU,GAAV,UAAU,CAA8B;QACxC,UAAK,GAAL,KAAK,CAAU;QAO/B,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;QACrC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACpD,CAAC;CACF"}
@@ -0,0 +1,204 @@
1
+ /**
2
+ * WorkflowRuntimePort — durable workflow execution port (S3 spec).
3
+ *
4
+ * Defines: 9-state machine, journal invariants I-S3-1..8, replay determinism,
5
+ * ctx.* primitives, lease takeover pattern, handler versioning.
6
+ *
7
+ * Default adapter: DBOSWorkflowAdapter (DBOS-TS Apache 2.0, Postgres-native).
8
+ * Swap-able to Temporal/Restate via this port + test contract T-S3-1..12.
9
+ */
10
+ export type WorkflowStatus = "PENDING" | "RUNNING" | "SLEEPING" | "WAITING_SIGNAL" | "AWAITING_BLOCK" | "AWAITING_EVENT" | "DONE" | "FAILED" | "CANCELLED";
11
+ export type StepKind = "tool_call" | "sleep" | "wait_signal" | "await_block" | "await_event" | "submit_tx" | "human" | "ctx_now" | "ctx_random" | "ctx_uuid" | "child_workflow";
12
+ export type StepStatus = "pending" | "running" | "done" | "failed";
13
+ export interface JournalEntry {
14
+ readonly journal_id: bigint;
15
+ readonly run_id: string;
16
+ readonly step_index: number;
17
+ readonly step_name: string;
18
+ readonly step_kind: StepKind;
19
+ readonly status: StepStatus;
20
+ readonly input: unknown;
21
+ readonly output?: unknown;
22
+ readonly error?: {
23
+ message: string;
24
+ stack?: string;
25
+ };
26
+ readonly idempotency_key?: string;
27
+ readonly started_at: Date;
28
+ readonly finished_at?: Date;
29
+ }
30
+ export interface WorkflowRun<TOutput = unknown> {
31
+ readonly run_id: string;
32
+ readonly workflow_name: string;
33
+ readonly workflow_version: string;
34
+ readonly status: WorkflowStatus;
35
+ readonly input: unknown;
36
+ readonly output?: TOutput;
37
+ readonly error?: string;
38
+ readonly lease_owner?: string;
39
+ readonly lease_expires_at?: Date;
40
+ readonly wake_at?: Date;
41
+ readonly started_at: Date;
42
+ readonly finished_at?: Date;
43
+ readonly tenant_id: string;
44
+ readonly manifest_hash?: string;
45
+ }
46
+ export interface StepOpts {
47
+ readonly maxAttempts?: number;
48
+ readonly backoffMs?: number;
49
+ readonly idempotencyKey?: string;
50
+ readonly timeoutMs?: number;
51
+ }
52
+ export interface WorkflowContext {
53
+ readonly runId: string;
54
+ readonly tenantId: string;
55
+ readonly workflowName: string;
56
+ readonly workflowVersion: string;
57
+ readonly abortSignal: AbortSignal;
58
+ /**
59
+ * Wrap any side-effectful operation. Journaled + replayed from journal.
60
+ * FORBIDDEN outside ctx.step(): Date.now, Math.random, fetch, fs.*, etc. (S3 §5.4)
61
+ */
62
+ step<T>(name: string, fn: () => Promise<T>, opts?: StepOpts): Promise<T>;
63
+ /** Deterministic timestamp — journaled (Q3.2). Never use Date.now() in handlers. */
64
+ now(): Promise<Date>;
65
+ /** Deterministic random [0,1) — journaled (Q3.2). Never use Math.random(). */
66
+ random(): Promise<number>;
67
+ /** Deterministic UUID v4 — journaled (Q3.2). Never use crypto.randomUUID(). */
68
+ uuid(): Promise<string>;
69
+ /** Durable sleep until absolute timestamp. EC-S3-8: t < now() → no-op. */
70
+ sleepUntil(t: Date): Promise<void>;
71
+ /** Durable sleep for duration in ms. */
72
+ sleepFor(durationMs: number): Promise<void>;
73
+ /**
74
+ * Wait for a named signal. Returns signal payload.
75
+ * Times out → WorkflowSignalTimeoutError (S3 §3.3: FAILED, 'signal_timeout').
76
+ */
77
+ waitForSignal<T = unknown>(name: string, timeoutMs?: number): Promise<T>;
78
+ /** Await Starknet block height ≥ n. Transitions: RUNNING → AWAITING_BLOCK → RUNNING. */
79
+ awaitStarknetBlock(blockHeight: number): Promise<void>;
80
+ /** Await matching event from event bus. Transitions: RUNNING → AWAITING_EVENT → RUNNING. */
81
+ awaitEvent<T = unknown>(filter: EventFilter): Promise<T>;
82
+ /** Spawn a child workflow. Parent waits for child completion. */
83
+ childWorkflow<TInput, TOutput>(name: string, input: TInput, opts?: ChildWorkflowOpts): Promise<TOutput>;
84
+ /** Cooperative cancellation. Step handlers should poll ctx.abortSignal. */
85
+ cancel(reason: string): Promise<void>;
86
+ }
87
+ export interface EventFilter {
88
+ readonly source?: string;
89
+ readonly type?: string;
90
+ readonly tenantId?: string;
91
+ readonly [key: string]: unknown;
92
+ }
93
+ export interface ChildWorkflowOpts {
94
+ readonly tenantId?: string;
95
+ readonly version?: string;
96
+ readonly idempotencyKey?: string;
97
+ }
98
+ export type WorkflowHandler<TInput = unknown, TOutput = unknown> = (ctx: WorkflowContext, input: TInput) => Promise<TOutput>;
99
+ export type JournalMigrator = (journal: JournalEntry[]) => JournalEntry[];
100
+ export interface MigrationResult {
101
+ readonly ok: boolean;
102
+ readonly run_id: string;
103
+ readonly from_version: string;
104
+ readonly to_version: string;
105
+ readonly entries_migrated: number;
106
+ readonly error?: string;
107
+ }
108
+ export interface StartWorkflowOpts {
109
+ readonly workflowName: string;
110
+ readonly workflowVersion: string;
111
+ readonly tenantId: string;
112
+ readonly input: unknown;
113
+ readonly idempotencyKey?: string;
114
+ readonly manifestHash?: string;
115
+ }
116
+ export interface ResumeWorkflowOpts {
117
+ readonly workerId: string;
118
+ readonly leaseTtlSeconds?: number;
119
+ }
120
+ export interface SendSignalOpts {
121
+ readonly payload?: unknown;
122
+ }
123
+ export interface WorkflowRuntimePort {
124
+ /**
125
+ * Register a handler for a workflow name + version.
126
+ * Must be called before start() for that workflow type.
127
+ */
128
+ register<TInput, TOutput>(name: string, version: string, handler: WorkflowHandler<TInput, TOutput>): void;
129
+ /**
130
+ * Start a new workflow run. Returns run_id.
131
+ * Idempotent if idempotencyKey provided and run already exists.
132
+ */
133
+ start(opts: StartWorkflowOpts): Promise<string>;
134
+ /**
135
+ * Attempt to acquire lease and execute a pending/sleeping run.
136
+ * Returns null if no eligible run found (no work to do).
137
+ * Runs handler to completion (or suspension) before returning.
138
+ */
139
+ executeNext(opts: ResumeWorkflowOpts): Promise<WorkflowRun | null>;
140
+ /** Get current state of a run. */
141
+ getStatus(runId: string): Promise<WorkflowRun | null>;
142
+ /**
143
+ * Wait for a run to reach DONE or FAILED.
144
+ * Polls internally — do not call in a tight loop.
145
+ */
146
+ waitForCompletion<TOutput>(runId: string, opts?: {
147
+ timeoutMs?: number;
148
+ pollIntervalMs?: number;
149
+ }): Promise<WorkflowRun<TOutput>>;
150
+ /** Send a named signal to a waiting run (S3 §3.3). */
151
+ sendSignal(runId: string, signalName: string, opts?: SendSignalOpts): Promise<void>;
152
+ /**
153
+ * Cancel a run cooperatively (S3 §3.3, EC-S3-7).
154
+ * Sets AbortSignal on next step boundary. Hard abort after 30s.
155
+ */
156
+ cancel(runId: string, reason: string): Promise<void>;
157
+ /**
158
+ * Migrate a suspended run to a new handler version (S3 §6.3).
159
+ * Only valid for runs in SLEEPING | WAITING_SIGNAL | AWAITING_* states.
160
+ */
161
+ migrateRun(runId: string, fromVersion: string, toVersion: string, migrator: JournalMigrator): Promise<MigrationResult>;
162
+ /** Read the journal entries for a run (read-only, audit). */
163
+ getJournal(runId: string): Promise<JournalEntry[]>;
164
+ /**
165
+ * Start the worker polling loop.
166
+ * Worker polls for PENDING runs and calls executeNext() in a loop.
167
+ */
168
+ startWorker(opts?: {
169
+ workerId?: string;
170
+ pollIntervalMs?: number;
171
+ maxConcurrent?: number;
172
+ }): Promise<void>;
173
+ /** Stop the worker polling loop gracefully. */
174
+ stopWorker(): Promise<void>;
175
+ }
176
+ export declare class WorkflowNotFoundError extends Error {
177
+ readonly runId: string;
178
+ constructor(runId: string);
179
+ }
180
+ export declare class WorkflowNonDeterminismError extends Error {
181
+ readonly runId: string;
182
+ readonly stepIndex: number;
183
+ readonly expected: string;
184
+ readonly actual: string;
185
+ constructor(runId: string, stepIndex: number, expected: string, actual: string);
186
+ }
187
+ export declare class WorkflowSignalTimeoutError extends Error {
188
+ readonly runId: string;
189
+ readonly signalName: string;
190
+ readonly timeoutMs: number;
191
+ constructor(runId: string, signalName: string, timeoutMs: number);
192
+ }
193
+ export declare class WorkflowLeaseConflictError extends Error {
194
+ readonly runId: string;
195
+ readonly currentOwner: string;
196
+ constructor(runId: string, currentOwner: string);
197
+ }
198
+ export declare class WorkflowVersionMismatchError extends Error {
199
+ readonly runId: string;
200
+ readonly expected: string;
201
+ readonly actual: string;
202
+ constructor(runId: string, expected: string, actual: string);
203
+ }
204
+ //# sourceMappingURL=workflow-runtime.d.ts.map