@vauban-org/agent-sdk 1.0.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (513) hide show
  1. package/CONTRACT.md +6918 -742
  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 +41 -3
  69. package/dist/index.d.ts.map +1 -1
  70. package/dist/index.js +31 -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/agent.d.ts.map +1 -1
  98. package/dist/orchestration/ooda/agent.js +36 -0
  99. package/dist/orchestration/ooda/agent.js.map +1 -1
  100. package/dist/orchestration/ooda/skills.d.ts +104 -0
  101. package/dist/orchestration/ooda/skills.d.ts.map +1 -1
  102. package/dist/orchestration/ooda/skills.js +106 -0
  103. package/dist/orchestration/ooda/skills.js.map +1 -1
  104. package/dist/orchestration/ooda/types.d.ts +11 -0
  105. package/dist/orchestration/ooda/types.d.ts.map +1 -1
  106. package/dist/ports/bastion-action.contract.test.d.ts +11 -0
  107. package/dist/ports/bastion-action.contract.test.d.ts.map +1 -0
  108. package/dist/ports/bastion-action.contract.test.js +238 -0
  109. package/dist/ports/bastion-action.contract.test.js.map +1 -0
  110. package/dist/ports/bastion-action.d.ts +133 -0
  111. package/dist/ports/bastion-action.d.ts.map +1 -0
  112. package/dist/ports/bastion-action.js +73 -0
  113. package/dist/ports/bastion-action.js.map +1 -0
  114. package/dist/ports/brain.d.ts +31 -0
  115. package/dist/ports/brain.d.ts.map +1 -1
  116. package/dist/ports/brain.js +115 -1
  117. package/dist/ports/brain.js.map +1 -1
  118. package/dist/ports/citadel-action.contract.test.d.ts +11 -0
  119. package/dist/ports/citadel-action.contract.test.d.ts.map +1 -0
  120. package/dist/ports/citadel-action.contract.test.js +317 -0
  121. package/dist/ports/citadel-action.contract.test.js.map +1 -0
  122. package/dist/ports/citadel-action.d.ts +111 -0
  123. package/dist/ports/citadel-action.d.ts.map +1 -0
  124. package/dist/ports/citadel-action.js +62 -0
  125. package/dist/ports/citadel-action.js.map +1 -0
  126. package/dist/ports/compliance-contract.d.ts +123 -0
  127. package/dist/ports/compliance-contract.d.ts.map +1 -0
  128. package/dist/ports/compliance-contract.js +35 -0
  129. package/dist/ports/compliance-contract.js.map +1 -0
  130. package/dist/ports/db.d.ts +38 -0
  131. package/dist/ports/db.d.ts.map +1 -1
  132. package/dist/ports/db.js +88 -1
  133. package/dist/ports/db.js.map +1 -1
  134. package/dist/ports/delegation.contract.test.d.ts +9 -0
  135. package/dist/ports/delegation.contract.test.d.ts.map +1 -0
  136. package/dist/ports/delegation.contract.test.js +337 -0
  137. package/dist/ports/delegation.contract.test.js.map +1 -0
  138. package/dist/ports/delegation.d.ts +134 -0
  139. package/dist/ports/delegation.d.ts.map +1 -0
  140. package/dist/ports/delegation.js +105 -0
  141. package/dist/ports/delegation.js.map +1 -0
  142. package/dist/ports/event-bus.d.ts +29 -0
  143. package/dist/ports/event-bus.d.ts.map +1 -1
  144. package/dist/ports/event-bus.js +106 -1
  145. package/dist/ports/event-bus.js.map +1 -1
  146. package/dist/ports/federation.contract.test.d.ts +9 -0
  147. package/dist/ports/federation.contract.test.d.ts.map +1 -0
  148. package/dist/ports/federation.contract.test.js +279 -0
  149. package/dist/ports/federation.contract.test.js.map +1 -0
  150. package/dist/ports/federation.d.ts +140 -0
  151. package/dist/ports/federation.d.ts.map +1 -0
  152. package/dist/ports/federation.js +57 -0
  153. package/dist/ports/federation.js.map +1 -0
  154. package/dist/ports/index.d.ts +28 -2
  155. package/dist/ports/index.d.ts.map +1 -1
  156. package/dist/ports/index.js +17 -2
  157. package/dist/ports/index.js.map +1 -1
  158. package/dist/ports/llm-provider.d.ts +37 -0
  159. package/dist/ports/llm-provider.d.ts.map +1 -1
  160. package/dist/ports/llm-provider.js +99 -1
  161. package/dist/ports/llm-provider.js.map +1 -1
  162. package/dist/ports/logger.d.ts +27 -0
  163. package/dist/ports/logger.d.ts.map +1 -1
  164. package/dist/ports/logger.js +87 -0
  165. package/dist/ports/logger.js.map +1 -1
  166. package/dist/ports/manifest-registry.contract.test.d.ts +9 -0
  167. package/dist/ports/manifest-registry.contract.test.d.ts.map +1 -0
  168. package/dist/ports/manifest-registry.contract.test.js +246 -0
  169. package/dist/ports/manifest-registry.contract.test.js.map +1 -0
  170. package/dist/ports/manifest-registry.d.ts +116 -0
  171. package/dist/ports/manifest-registry.d.ts.map +1 -0
  172. package/dist/ports/manifest-registry.js +79 -0
  173. package/dist/ports/manifest-registry.js.map +1 -0
  174. package/dist/ports/observability.contract.test.d.ts +12 -0
  175. package/dist/ports/observability.contract.test.d.ts.map +1 -0
  176. package/dist/ports/observability.contract.test.js +260 -0
  177. package/dist/ports/observability.contract.test.js.map +1 -0
  178. package/dist/ports/observability.d.ts +98 -0
  179. package/dist/ports/observability.d.ts.map +1 -0
  180. package/dist/ports/observability.js +59 -0
  181. package/dist/ports/observability.js.map +1 -0
  182. package/dist/ports/outcome.d.ts +26 -0
  183. package/dist/ports/outcome.d.ts.map +1 -1
  184. package/dist/ports/outcome.js +62 -1
  185. package/dist/ports/outcome.js.map +1 -1
  186. package/dist/ports/privacy.contract.test.d.ts +12 -0
  187. package/dist/ports/privacy.contract.test.d.ts.map +1 -0
  188. package/dist/ports/privacy.contract.test.js +325 -0
  189. package/dist/ports/privacy.contract.test.js.map +1 -0
  190. package/dist/ports/privacy.d.ts +132 -0
  191. package/dist/ports/privacy.d.ts.map +1 -0
  192. package/dist/ports/privacy.js +83 -0
  193. package/dist/ports/privacy.js.map +1 -0
  194. package/dist/ports/tenant-context.contract.test.d.ts +14 -0
  195. package/dist/ports/tenant-context.contract.test.d.ts.map +1 -0
  196. package/dist/ports/tenant-context.contract.test.js +352 -0
  197. package/dist/ports/tenant-context.contract.test.js.map +1 -0
  198. package/dist/ports/tenant-context.d.ts +103 -0
  199. package/dist/ports/tenant-context.d.ts.map +1 -0
  200. package/dist/ports/tenant-context.js +48 -0
  201. package/dist/ports/tenant-context.js.map +1 -0
  202. package/dist/ports/vauban-finance-action.contract.test.d.ts +11 -0
  203. package/dist/ports/vauban-finance-action.contract.test.d.ts.map +1 -0
  204. package/dist/ports/vauban-finance-action.contract.test.js +260 -0
  205. package/dist/ports/vauban-finance-action.contract.test.js.map +1 -0
  206. package/dist/ports/vauban-finance-action.d.ts +106 -0
  207. package/dist/ports/vauban-finance-action.d.ts.map +1 -0
  208. package/dist/ports/vauban-finance-action.js +60 -0
  209. package/dist/ports/vauban-finance-action.js.map +1 -0
  210. package/dist/ports/workflow-runtime.d.ts +204 -0
  211. package/dist/ports/workflow-runtime.d.ts.map +1 -0
  212. package/dist/ports/workflow-runtime.js +72 -0
  213. package/dist/ports/workflow-runtime.js.map +1 -0
  214. package/dist/proof/cert-verify.d.ts +80 -0
  215. package/dist/proof/cert-verify.d.ts.map +1 -0
  216. package/dist/proof/cert-verify.js +178 -0
  217. package/dist/proof/cert-verify.js.map +1 -0
  218. package/dist/replay/replay.d.ts.map +1 -1
  219. package/dist/replay/replay.js +5 -1
  220. package/dist/replay/replay.js.map +1 -1
  221. package/dist/retry/index.d.ts +129 -0
  222. package/dist/retry/index.d.ts.map +1 -0
  223. package/dist/retry/index.js +156 -0
  224. package/dist/retry/index.js.map +1 -0
  225. package/dist/retry/presets.d.ts +39 -0
  226. package/dist/retry/presets.d.ts.map +1 -0
  227. package/dist/retry/presets.js +69 -0
  228. package/dist/retry/presets.js.map +1 -0
  229. package/dist/skill-loop/ab-runner.d.ts +67 -0
  230. package/dist/skill-loop/ab-runner.d.ts.map +1 -0
  231. package/dist/skill-loop/ab-runner.js +160 -0
  232. package/dist/skill-loop/ab-runner.js.map +1 -0
  233. package/dist/skill-loop/adoption.d.ts +67 -0
  234. package/dist/skill-loop/adoption.d.ts.map +1 -0
  235. package/dist/skill-loop/adoption.js +126 -0
  236. package/dist/skill-loop/adoption.js.map +1 -0
  237. package/dist/skill-loop/candidate.d.ts +45 -0
  238. package/dist/skill-loop/candidate.d.ts.map +1 -0
  239. package/dist/skill-loop/candidate.js +43 -0
  240. package/dist/skill-loop/candidate.js.map +1 -0
  241. package/dist/skill-loop/evaluator.d.ts +42 -0
  242. package/dist/skill-loop/evaluator.d.ts.map +1 -0
  243. package/dist/skill-loop/evaluator.js +184 -0
  244. package/dist/skill-loop/evaluator.js.map +1 -0
  245. package/dist/skill-loop/index.d.ts +27 -0
  246. package/dist/skill-loop/index.d.ts.map +1 -0
  247. package/dist/skill-loop/index.js +27 -0
  248. package/dist/skill-loop/index.js.map +1 -0
  249. package/dist/skill-loop/reflexion-replay.d.ts +87 -0
  250. package/dist/skill-loop/reflexion-replay.d.ts.map +1 -0
  251. package/dist/skill-loop/reflexion-replay.js +110 -0
  252. package/dist/skill-loop/reflexion-replay.js.map +1 -0
  253. package/dist/skill-loop/sign-off.d.ts +88 -0
  254. package/dist/skill-loop/sign-off.d.ts.map +1 -0
  255. package/dist/skill-loop/sign-off.js +146 -0
  256. package/dist/skill-loop/sign-off.js.map +1 -0
  257. package/dist/skill-loop/value-metric.d.ts +55 -0
  258. package/dist/skill-loop/value-metric.d.ts.map +1 -0
  259. package/dist/skill-loop/value-metric.js +69 -0
  260. package/dist/skill-loop/value-metric.js.map +1 -0
  261. package/dist/skill-loop/versioning.d.ts +36 -0
  262. package/dist/skill-loop/versioning.d.ts.map +1 -0
  263. package/dist/skill-loop/versioning.js +47 -0
  264. package/dist/skill-loop/versioning.js.map +1 -0
  265. package/dist/skill-manifest/anchor.d.ts +91 -0
  266. package/dist/skill-manifest/anchor.d.ts.map +1 -0
  267. package/dist/skill-manifest/anchor.js +331 -0
  268. package/dist/skill-manifest/anchor.js.map +1 -0
  269. package/dist/skill-manifest/builder.d.ts +47 -0
  270. package/dist/skill-manifest/builder.d.ts.map +1 -0
  271. package/dist/skill-manifest/builder.js +93 -0
  272. package/dist/skill-manifest/builder.js.map +1 -0
  273. package/dist/skill-manifest/index.d.ts +13 -0
  274. package/dist/skill-manifest/index.d.ts.map +1 -0
  275. package/dist/skill-manifest/index.js +9 -0
  276. package/dist/skill-manifest/index.js.map +1 -0
  277. package/dist/skill-manifest/types.d.ts +67 -0
  278. package/dist/skill-manifest/types.d.ts.map +1 -0
  279. package/dist/skill-manifest/types.js +16 -0
  280. package/dist/skill-manifest/types.js.map +1 -0
  281. package/dist/skill-manifest/verifier.d.ts +42 -0
  282. package/dist/skill-manifest/verifier.d.ts.map +1 -0
  283. package/dist/skill-manifest/verifier.js +136 -0
  284. package/dist/skill-manifest/verifier.js.map +1 -0
  285. package/dist/skills/_secrets.d.ts +16 -0
  286. package/dist/skills/_secrets.d.ts.map +1 -0
  287. package/dist/skills/_secrets.js +20 -0
  288. package/dist/skills/_secrets.js.map +1 -0
  289. package/dist/skills/alpaca-quote.d.ts +2 -2
  290. package/dist/skills/alpaca-quote.d.ts.map +1 -1
  291. package/dist/skills/alpaca-quote.js +51 -20
  292. package/dist/skills/alpaca-quote.js.map +1 -1
  293. package/dist/skills/brain-query.d.ts +4 -4
  294. package/dist/skills/brain-store.d.ts +6 -6
  295. package/dist/skills/errors.d.ts +15 -0
  296. package/dist/skills/errors.d.ts.map +1 -1
  297. package/dist/skills/errors.js +21 -0
  298. package/dist/skills/errors.js.map +1 -1
  299. package/dist/skills/hitl-request.d.ts +2 -2
  300. package/dist/skills/index.d.ts +3 -1
  301. package/dist/skills/index.d.ts.map +1 -1
  302. package/dist/skills/index.js +4 -1
  303. package/dist/skills/index.js.map +1 -1
  304. package/dist/skills/markdown/loader.d.ts +52 -0
  305. package/dist/skills/markdown/loader.d.ts.map +1 -0
  306. package/dist/skills/markdown/loader.js +93 -0
  307. package/dist/skills/markdown/loader.js.map +1 -0
  308. package/dist/skills/markdown/schema.d.ts +432 -0
  309. package/dist/skills/markdown/schema.d.ts.map +1 -0
  310. package/dist/skills/markdown/schema.js +121 -0
  311. package/dist/skills/markdown/schema.js.map +1 -0
  312. package/dist/skills/poc-md-loader/markdown-loader.d.ts +77 -0
  313. package/dist/skills/poc-md-loader/markdown-loader.d.ts.map +1 -0
  314. package/dist/skills/poc-md-loader/markdown-loader.js +125 -0
  315. package/dist/skills/poc-md-loader/markdown-loader.js.map +1 -0
  316. package/dist/skills/poc-md-loader/runner.d.ts +24 -0
  317. package/dist/skills/poc-md-loader/runner.d.ts.map +1 -0
  318. package/dist/skills/poc-md-loader/runner.js +57 -0
  319. package/dist/skills/poc-md-loader/runner.js.map +1 -0
  320. package/dist/skills/poc-md-loader/vitest.poc.config.d.ts +3 -0
  321. package/dist/skills/poc-md-loader/vitest.poc.config.d.ts.map +1 -0
  322. package/dist/skills/poc-md-loader/vitest.poc.config.js +13 -0
  323. package/dist/skills/poc-md-loader/vitest.poc.config.js.map +1 -0
  324. package/dist/skills/poc-md-loader/web-search/script.d.ts +33 -0
  325. package/dist/skills/poc-md-loader/web-search/script.d.ts.map +1 -0
  326. package/dist/skills/poc-md-loader/web-search/script.js +75 -0
  327. package/dist/skills/poc-md-loader/web-search/script.js.map +1 -0
  328. package/dist/skills/record-outcome.d.ts +4 -4
  329. package/dist/skills/send-email.d.ts +2 -2
  330. package/dist/skills/send-email.d.ts.map +1 -1
  331. package/dist/skills/send-email.js +4 -3
  332. package/dist/skills/send-email.js.map +1 -1
  333. package/dist/skills/slack-notify.d.ts +4 -4
  334. package/dist/skills/slack-notify.d.ts.map +1 -1
  335. package/dist/skills/slack-notify.js +52 -21
  336. package/dist/skills/slack-notify.js.map +1 -1
  337. package/dist/skills/starknet-balance.d.ts +1 -1
  338. package/dist/skills/telegram-notify.d.ts +4 -4
  339. package/dist/skills/telegram-notify.d.ts.map +1 -1
  340. package/dist/skills/telegram-notify.js +48 -19
  341. package/dist/skills/telegram-notify.js.map +1 -1
  342. package/dist/skills/web-search.d.ts +1 -1
  343. package/dist/skills/web-search.d.ts.map +1 -1
  344. package/dist/skills/web-search.js +85 -40
  345. package/dist/skills/web-search.js.map +1 -1
  346. package/dist/telemetry/bus.d.ts +54 -0
  347. package/dist/telemetry/bus.d.ts.map +1 -0
  348. package/dist/telemetry/bus.js +159 -0
  349. package/dist/telemetry/bus.js.map +1 -0
  350. package/dist/telemetry/index.d.ts +35 -0
  351. package/dist/telemetry/index.d.ts.map +1 -0
  352. package/dist/telemetry/index.js +30 -0
  353. package/dist/telemetry/index.js.map +1 -0
  354. package/dist/telemetry/port.d.ts +121 -0
  355. package/dist/telemetry/port.d.ts.map +1 -0
  356. package/dist/telemetry/port.js +48 -0
  357. package/dist/telemetry/port.js.map +1 -0
  358. package/dist/telemetry/sinks/otlp.d.ts +45 -0
  359. package/dist/telemetry/sinks/otlp.d.ts.map +1 -0
  360. package/dist/telemetry/sinks/otlp.js +195 -0
  361. package/dist/telemetry/sinks/otlp.js.map +1 -0
  362. package/dist/telemetry/sinks/sqlite.d.ts +32 -0
  363. package/dist/telemetry/sinks/sqlite.d.ts.map +1 -0
  364. package/dist/telemetry/sinks/sqlite.js +170 -0
  365. package/dist/telemetry/sinks/sqlite.js.map +1 -0
  366. package/dist/telemetry/sinks/stdout.d.ts +22 -0
  367. package/dist/telemetry/sinks/stdout.d.ts.map +1 -0
  368. package/dist/telemetry/sinks/stdout.js +38 -0
  369. package/dist/telemetry/sinks/stdout.js.map +1 -0
  370. package/dist/testing/index.d.ts +3 -0
  371. package/dist/testing/test-brain-port.d.ts +4 -0
  372. package/dist/testing/test-brain-port.d.ts.map +1 -1
  373. package/dist/testing/test-brain-port.js +75 -20
  374. package/dist/testing/test-brain-port.js.map +1 -1
  375. package/dist/testing/test-event-bus.d.ts.map +1 -1
  376. package/dist/testing/test-event-bus.js +89 -36
  377. package/dist/testing/test-event-bus.js.map +1 -1
  378. package/dist/trace/schema.d.ts +1 -1
  379. package/dist/trace/schema.d.ts.map +1 -1
  380. package/dist/trace/schema.js +1 -1
  381. package/dist/trace/schema.js.map +1 -1
  382. package/dist/verify/formal/index.d.ts +44 -0
  383. package/dist/verify/formal/index.d.ts.map +1 -0
  384. package/dist/verify/formal/index.js +98 -0
  385. package/dist/verify/formal/index.js.map +1 -0
  386. package/dist/verify/formal/policy.d.ts +105 -0
  387. package/dist/verify/formal/policy.d.ts.map +1 -0
  388. package/dist/verify/formal/policy.js +159 -0
  389. package/dist/verify/formal/policy.js.map +1 -0
  390. package/dist/verify/formal/result.d.ts +50 -0
  391. package/dist/verify/formal/result.d.ts.map +1 -0
  392. package/dist/verify/formal/result.js +21 -0
  393. package/dist/verify/formal/result.js.map +1 -0
  394. package/dist/verify/formal/solver.d.ts +67 -0
  395. package/dist/verify/formal/solver.d.ts.map +1 -0
  396. package/dist/verify/formal/solver.js +184 -0
  397. package/dist/verify/formal/solver.js.map +1 -0
  398. package/dist/verify/formal/spec-language.d.ts +80 -0
  399. package/dist/verify/formal/spec-language.d.ts.map +1 -0
  400. package/dist/verify/formal/spec-language.js +219 -0
  401. package/dist/verify/formal/spec-language.js.map +1 -0
  402. package/docs/attestation.md +199 -0
  403. package/docs/identity.md +193 -0
  404. package/docs/telemetry/migration.md +155 -0
  405. package/docs/telemetry/overview.md +154 -0
  406. package/docs/telemetry/privacy.md +127 -0
  407. package/docs/telemetry/sinks/cc.md +155 -0
  408. package/docs/telemetry/sinks/otlp.md +146 -0
  409. package/docs/telemetry/sinks/sqlite.md +126 -0
  410. package/docs/telemetry/sinks/stdout.md +82 -0
  411. package/package.json +18 -2
  412. package/src/adapters/llm/anthropic-direct.ts +51 -0
  413. package/src/adapters/llm/cascade.ts +64 -19
  414. package/src/adapters/llm/litellm.ts +49 -0
  415. package/src/compute/difficulty-estimator.ts +111 -0
  416. package/src/compute/strategies/mixture-of-agents.ts +150 -0
  417. package/src/compute/strategies/tree-of-thoughts.ts +293 -0
  418. package/src/compute/strategies/two-phase-orient.ts +147 -0
  419. package/src/container/protocol.ts +243 -0
  420. package/src/container/runtime.ts +424 -0
  421. package/src/db/migrations/026_formal_verify_results.sql +30 -0
  422. package/src/identity/agent-persona.ts +203 -0
  423. package/src/identity/persona-prompt.ts +84 -0
  424. package/src/identity/persona-schema.ts +127 -0
  425. package/src/index.ts +368 -2
  426. package/src/memory/episodic-rrf.ts +224 -0
  427. package/src/mesh/attenuation.ts +190 -0
  428. package/src/mesh/delegate.ts +254 -0
  429. package/src/mesh/dispatcher.ts +301 -0
  430. package/src/mesh/index.ts +39 -0
  431. package/src/mesh/types.ts +31 -0
  432. package/src/orchestration/ooda/agent.ts +50 -0
  433. package/src/orchestration/ooda/skills.ts +177 -0
  434. package/src/orchestration/ooda/types.ts +12 -0
  435. package/src/ports/bastion-action.contract.test.ts +355 -0
  436. package/src/ports/bastion-action.ts +198 -0
  437. package/src/ports/brain.ts +177 -15
  438. package/src/ports/citadel-action.contract.test.ts +430 -0
  439. package/src/ports/citadel-action.ts +174 -0
  440. package/src/ports/compliance-contract.ts +191 -0
  441. package/src/ports/db.ts +98 -0
  442. package/src/ports/delegation.contract.test.ts +428 -0
  443. package/src/ports/delegation.ts +211 -0
  444. package/src/ports/event-bus.ts +133 -0
  445. package/src/ports/federation.contract.test.ts +355 -0
  446. package/src/ports/federation.ts +190 -0
  447. package/src/ports/index.ts +186 -1
  448. package/src/ports/llm-provider.ts +123 -0
  449. package/src/ports/logger.ts +104 -0
  450. package/src/ports/manifest-registry.contract.test.ts +324 -0
  451. package/src/ports/manifest-registry.ts +188 -0
  452. package/src/ports/observability.contract.test.ts +315 -0
  453. package/src/ports/observability.ts +150 -0
  454. package/src/ports/outcome.ts +69 -0
  455. package/src/ports/privacy.contract.test.ts +413 -0
  456. package/src/ports/privacy.ts +207 -0
  457. package/src/ports/tenant-context.contract.test.ts +454 -0
  458. package/src/ports/tenant-context.ts +150 -0
  459. package/src/ports/vauban-finance-action.contract.test.ts +335 -0
  460. package/src/ports/vauban-finance-action.ts +166 -0
  461. package/src/ports/workflow-runtime.ts +327 -0
  462. package/src/proof/cert-verify.ts +249 -0
  463. package/src/replay/replay.ts +11 -8
  464. package/src/retry/index.ts +227 -0
  465. package/src/retry/presets.ts +75 -0
  466. package/src/skill-loop/ab-runner.ts +196 -0
  467. package/src/skill-loop/adoption.ts +188 -0
  468. package/src/skill-loop/candidate.ts +75 -0
  469. package/src/skill-loop/evaluator.ts +238 -0
  470. package/src/skill-loop/index.ts +51 -0
  471. package/src/skill-loop/reflexion-replay.ts +173 -0
  472. package/src/skill-loop/sign-off.ts +247 -0
  473. package/src/skill-loop/value-metric.ts +120 -0
  474. package/src/skill-loop/versioning.ts +75 -0
  475. package/src/skill-manifest/anchor.ts +401 -0
  476. package/src/skill-manifest/builder.ts +129 -0
  477. package/src/skill-manifest/index.ts +18 -0
  478. package/src/skill-manifest/types.ts +72 -0
  479. package/src/skill-manifest/verifier.ts +198 -0
  480. package/src/skills/_secrets.ts +25 -0
  481. package/src/skills/alpaca-quote.ts +68 -23
  482. package/src/skills/errors.ts +30 -2
  483. package/src/skills/index.ts +19 -0
  484. package/src/skills/markdown/loader.ts +129 -0
  485. package/src/skills/markdown/schema.ts +144 -0
  486. package/src/skills/poc-md-loader/e2e-parity.test.ts +237 -0
  487. package/src/skills/poc-md-loader/markdown-loader.ts +161 -0
  488. package/src/skills/poc-md-loader/runner.ts +82 -0
  489. package/src/skills/poc-md-loader/vitest.poc.config.ts +13 -0
  490. package/src/skills/poc-md-loader/web-search/SKILL.md +42 -0
  491. package/src/skills/poc-md-loader/web-search/script.ts +109 -0
  492. package/src/skills/send-email.ts +4 -3
  493. package/src/skills/slack-notify.ts +73 -30
  494. package/src/skills/telegram-notify.ts +70 -24
  495. package/src/skills/web-search.ts +132 -50
  496. package/src/telemetry/bus.test.ts +231 -0
  497. package/src/telemetry/bus.ts +241 -0
  498. package/src/telemetry/index.ts +49 -0
  499. package/src/telemetry/port.ts +160 -0
  500. package/src/telemetry/sinks/otlp.test.ts +146 -0
  501. package/src/telemetry/sinks/otlp.ts +250 -0
  502. package/src/telemetry/sinks/sqlite.test.ts +121 -0
  503. package/src/telemetry/sinks/sqlite.ts +260 -0
  504. package/src/telemetry/sinks/stdout.test.ts +109 -0
  505. package/src/telemetry/sinks/stdout.ts +59 -0
  506. package/src/testing/test-brain-port.ts +98 -24
  507. package/src/testing/test-event-bus.ts +104 -43
  508. package/src/trace/schema.ts +1 -1
  509. package/src/verify/formal/index.ts +154 -0
  510. package/src/verify/formal/policy.ts +253 -0
  511. package/src/verify/formal/result.ts +52 -0
  512. package/src/verify/formal/solver.ts +235 -0
  513. package/src/verify/formal/spec-language.ts +274 -0
@@ -0,0 +1,156 @@
1
+ /**
2
+ * Retry primitives with exponential backoff and optional jitter.
3
+ *
4
+ * Provides three usage modes:
5
+ * - `retry(fn, opts)` — wrap an async call.
6
+ * - `RetryContext` — manual control flow for granular retry logic.
7
+ * - {@link ./presets.js} — 4 named configurations for common scenarios.
8
+ *
9
+ * Sleep is injectable via `RetryOptions.sleepFn` for deterministic tests.
10
+ * BaseError.retryable flag is honored by default presets (see ./presets.ts).
11
+ *
12
+ * @public @since 1.2.0
13
+ */
14
+ import { RETRY_TRANSIENT } from "./presets.js";
15
+ /**
16
+ * Thrown after all retry attempts have been exhausted.
17
+ * @public
18
+ */
19
+ export class RetryExhaustedError extends Error {
20
+ attempts;
21
+ lastError;
22
+ constructor(attempts, lastError) {
23
+ const reason = lastError instanceof Error ? lastError.message : String(lastError);
24
+ super(`All ${attempts} retry attempts exhausted: ${reason}`);
25
+ this.name = "RetryExhaustedError";
26
+ this.attempts = attempts;
27
+ this.lastError = lastError;
28
+ }
29
+ }
30
+ const defaultSleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
31
+ /**
32
+ * Compute the delay before retry `attempt` (0-indexed). Caps at `maxDelayMs`.
33
+ * Jitter, when enabled, adds a uniform-random ±25% offset.
34
+ *
35
+ * Visible for tests and for callers that need to inspect timing.
36
+ * @public
37
+ */
38
+ export function calculateDelay(config, attempt) {
39
+ const raw = config.baseDelayMs * Math.pow(config.exponentialBase, attempt);
40
+ const capped = Math.min(raw, config.maxDelayMs);
41
+ if (!config.jitter)
42
+ return Math.max(0, capped);
43
+ const jitterRange = capped * 0.25;
44
+ const offset = (Math.random() * 2 - 1) * jitterRange;
45
+ return Math.max(0, capped + offset);
46
+ }
47
+ /**
48
+ * Decide whether to retry after `err` at 0-indexed `attempt`.
49
+ *
50
+ * Returns false on the final attempt (caller should throw exhaustion).
51
+ *
52
+ * @public
53
+ */
54
+ export function shouldRetry(config, err, attempt) {
55
+ if (attempt >= config.maxAttempts - 1)
56
+ return false;
57
+ if (config.retryIf)
58
+ return config.retryIf(err);
59
+ if (config.retryOn && config.retryOn.length > 0) {
60
+ return config.retryOn.some((Ctor) => err instanceof Ctor);
61
+ }
62
+ return true;
63
+ }
64
+ /**
65
+ * Execute `fn` with retry and exponential backoff.
66
+ *
67
+ * @throws The non-retryable error as-is if `shouldRetry` returns false mid-loop.
68
+ * @throws {@link RetryExhaustedError} when all attempts have failed.
69
+ *
70
+ * @public
71
+ */
72
+ export async function retry(fn, opts = {}) {
73
+ const config = opts.config ?? RETRY_TRANSIENT;
74
+ const sleep = opts.sleepFn ?? defaultSleep;
75
+ let lastError;
76
+ for (let attempt = 0; attempt < config.maxAttempts; attempt++) {
77
+ try {
78
+ return await fn();
79
+ }
80
+ catch (err) {
81
+ lastError = err;
82
+ if (!shouldRetry(config, err, attempt)) {
83
+ if (attempt >= config.maxAttempts - 1) {
84
+ throw new RetryExhaustedError(config.maxAttempts, err);
85
+ }
86
+ throw err;
87
+ }
88
+ const delay = calculateDelay(config, attempt);
89
+ opts.onRetry?.(err, attempt, delay);
90
+ await sleep(delay);
91
+ }
92
+ }
93
+ throw new RetryExhaustedError(config.maxAttempts, lastError);
94
+ }
95
+ /**
96
+ * Manual retry control. Use when the operation doesn't fit a single `fn()` —
97
+ * e.g. when multiple endpoints are tried per attempt, or when partial state
98
+ * must be reset between tries.
99
+ *
100
+ * @example
101
+ * ```ts
102
+ * const ctx = new RetryContext({ config: RETRY_AGGRESSIVE });
103
+ * while (ctx.shouldContinue) {
104
+ * try {
105
+ * return await op();
106
+ * } catch (err) {
107
+ * await ctx.handleError(err);
108
+ * }
109
+ * }
110
+ * ```
111
+ *
112
+ * @public
113
+ */
114
+ export class RetryContext {
115
+ config;
116
+ sleep;
117
+ onRetry;
118
+ attemptCount = 0;
119
+ exhausted = false;
120
+ constructor(opts) {
121
+ this.config = opts.config;
122
+ this.sleep = opts.sleepFn ?? defaultSleep;
123
+ this.onRetry = opts.onRetry;
124
+ }
125
+ /** True while attempts remain and no non-retryable error has been thrown. */
126
+ get shouldContinue() {
127
+ return !this.exhausted && this.attemptCount < this.config.maxAttempts;
128
+ }
129
+ /** 0-indexed count of completed (failed) attempts. */
130
+ get attempt() {
131
+ return this.attemptCount;
132
+ }
133
+ /**
134
+ * Record an error and sleep before the next try.
135
+ *
136
+ * @throws The non-retryable error as-is.
137
+ * @throws {@link RetryExhaustedError} if attempts are exhausted.
138
+ */
139
+ async handleError(err) {
140
+ const failedAttempt = this.attemptCount;
141
+ this.attemptCount += 1;
142
+ if (this.attemptCount >= this.config.maxAttempts) {
143
+ this.exhausted = true;
144
+ throw new RetryExhaustedError(this.config.maxAttempts, err);
145
+ }
146
+ if (!shouldRetry(this.config, err, failedAttempt)) {
147
+ this.exhausted = true;
148
+ throw err;
149
+ }
150
+ const delay = calculateDelay(this.config, failedAttempt);
151
+ this.onRetry?.(err, failedAttempt, delay);
152
+ await this.sleep(delay);
153
+ }
154
+ }
155
+ export { RETRY_TRANSIENT, RETRY_AGGRESSIVE, RETRY_PATIENT, NO_RETRY, } from "./presets.js";
156
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/retry/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Named retry presets covering common scenarios.
3
+ *
4
+ * All presets honor a `retryable: boolean` flag on the thrown error when
5
+ * present (compatible with {@link ../errors.js#BaseError}). When the flag is
6
+ * absent, defaults fall back to: transient = retry, no_retry = no retry.
7
+ *
8
+ * @public @since 1.2.0
9
+ */
10
+ import type { RetryConfig } from "./index.js";
11
+ /**
12
+ * 3 attempts, 1s base, 10s cap, jitter on. Honors `retryable` flag (defaults
13
+ * to retry when absent). Use for short-lived network calls.
14
+ *
15
+ * @public
16
+ */
17
+ export declare const RETRY_TRANSIENT: RetryConfig;
18
+ /**
19
+ * 5 attempts, 500ms base, 30s cap, jitter on. Use for flaky external APIs
20
+ * where rapid recovery is plausible.
21
+ *
22
+ * @public
23
+ */
24
+ export declare const RETRY_AGGRESSIVE: RetryConfig;
25
+ /**
26
+ * 10 attempts, 2s base, 120s cap, jitter on. Use for long-recovery
27
+ * dependencies (database failover, restart-storm tolerant calls).
28
+ *
29
+ * @public
30
+ */
31
+ export declare const RETRY_PATIENT: RetryConfig;
32
+ /**
33
+ * Single attempt, no retry. Use as an explicit policy to disable retry at
34
+ * call sites without scattering booleans.
35
+ *
36
+ * @public
37
+ */
38
+ export declare const NO_RETRY: RetryConfig;
39
+ //# sourceMappingURL=presets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../../src/retry/presets.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAS9C;;;;;GAKG;AACH,eAAO,MAAM,eAAe,EAAE,WAO7B,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,EAAE,WAM9B,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,aAAa,EAAE,WAM3B,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,EAAE,WAMtB,CAAC"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Named retry presets covering common scenarios.
3
+ *
4
+ * All presets honor a `retryable: boolean` flag on the thrown error when
5
+ * present (compatible with {@link ../errors.js#BaseError}). When the flag is
6
+ * absent, defaults fall back to: transient = retry, no_retry = no retry.
7
+ *
8
+ * @public @since 1.2.0
9
+ */
10
+ function honorsRetryableFlag(err, defaultIfMissing) {
11
+ if (typeof err === "object" && err !== null && "retryable" in err) {
12
+ return err.retryable === true;
13
+ }
14
+ return defaultIfMissing;
15
+ }
16
+ /**
17
+ * 3 attempts, 1s base, 10s cap, jitter on. Honors `retryable` flag (defaults
18
+ * to retry when absent). Use for short-lived network calls.
19
+ *
20
+ * @public
21
+ */
22
+ export const RETRY_TRANSIENT = {
23
+ maxAttempts: 3,
24
+ baseDelayMs: 1000,
25
+ maxDelayMs: 10_000,
26
+ exponentialBase: 2.0,
27
+ jitter: true,
28
+ retryIf: (err) => honorsRetryableFlag(err, true),
29
+ };
30
+ /**
31
+ * 5 attempts, 500ms base, 30s cap, jitter on. Use for flaky external APIs
32
+ * where rapid recovery is plausible.
33
+ *
34
+ * @public
35
+ */
36
+ export const RETRY_AGGRESSIVE = {
37
+ maxAttempts: 5,
38
+ baseDelayMs: 500,
39
+ maxDelayMs: 30_000,
40
+ exponentialBase: 2.0,
41
+ jitter: true,
42
+ };
43
+ /**
44
+ * 10 attempts, 2s base, 120s cap, jitter on. Use for long-recovery
45
+ * dependencies (database failover, restart-storm tolerant calls).
46
+ *
47
+ * @public
48
+ */
49
+ export const RETRY_PATIENT = {
50
+ maxAttempts: 10,
51
+ baseDelayMs: 2000,
52
+ maxDelayMs: 120_000,
53
+ exponentialBase: 2.0,
54
+ jitter: true,
55
+ };
56
+ /**
57
+ * Single attempt, no retry. Use as an explicit policy to disable retry at
58
+ * call sites without scattering booleans.
59
+ *
60
+ * @public
61
+ */
62
+ export const NO_RETRY = {
63
+ maxAttempts: 1,
64
+ baseDelayMs: 0,
65
+ maxDelayMs: 0,
66
+ exponentialBase: 2.0,
67
+ jitter: false,
68
+ };
69
+ //# sourceMappingURL=presets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presets.js","sourceRoot":"","sources":["../../src/retry/presets.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,SAAS,mBAAmB,CAAC,GAAY,EAAE,gBAAyB;IAClE,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,WAAW,IAAI,GAAG,EAAE,CAAC;QAClE,OAAQ,GAA8B,CAAC,SAAS,KAAK,IAAI,CAAC;IAC5D,CAAC;IACD,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,eAAe,GAAgB;IAC1C,WAAW,EAAE,CAAC;IACd,WAAW,EAAE,IAAI;IACjB,UAAU,EAAE,MAAM;IAClB,eAAe,EAAE,GAAG;IACpB,MAAM,EAAE,IAAI;IACZ,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,mBAAmB,CAAC,GAAG,EAAE,IAAI,CAAC;CACjD,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAgB;IAC3C,WAAW,EAAE,CAAC;IACd,WAAW,EAAE,GAAG;IAChB,UAAU,EAAE,MAAM;IAClB,eAAe,EAAE,GAAG;IACpB,MAAM,EAAE,IAAI;CACb,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,aAAa,GAAgB;IACxC,WAAW,EAAE,EAAE;IACf,WAAW,EAAE,IAAI;IACjB,UAAU,EAAE,OAAO;IACnB,eAAe,EAAE,GAAG;IACpB,MAAM,EAAE,IAAI;CACb,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAgB;IACnC,WAAW,EAAE,CAAC;IACd,WAAW,EAAE,CAAC;IACd,UAAU,EAAE,CAAC;IACb,eAAe,EAAE,GAAG;IACpB,MAAM,EAAE,KAAK;CACd,CAAC"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * src/skill-loop/ab-runner.ts
3
+ *
4
+ * A/B test runner with failure budgets for SkillCandidates.
5
+ *
6
+ * Invariants:
7
+ * - Max 3 candidates simultaneously (4th is rejected).
8
+ * - Traffic fraction cap: 10% per candidate.
9
+ * - Rollback triggered when a candidate's mean score drops >5% vs incumbent.
10
+ * - Winner declared when: p < 0.05 AND delta >= 10% AND no rollback triggered.
11
+ *
12
+ * Statistical significance uses the same Welch approach as evaluator.ts.
13
+ *
14
+ * @module skill-loop/ab-runner
15
+ */
16
+ import type { SkillCandidate } from "./candidate.js";
17
+ export interface ABConfig {
18
+ /** Maximum concurrent candidates. Hard cap: 3. */
19
+ maxCandidates: number;
20
+ /** Traffic fraction routed to each candidate. Hard cap: 0.10. */
21
+ trafficPct: number;
22
+ /** Rollback threshold: if candidate mean drops by this fraction vs incumbent. */
23
+ rollbackThresholdPct: number;
24
+ }
25
+ export interface ABSlot {
26
+ candidateId: string;
27
+ trafficFraction: number;
28
+ outcomes: number[];
29
+ rollbackTriggered: boolean;
30
+ }
31
+ export declare class ABRunner {
32
+ private readonly config;
33
+ private readonly slots;
34
+ private readonly candidates;
35
+ private readonly incumbentOutcomes;
36
+ constructor(config: ABConfig);
37
+ /**
38
+ * Register a new candidate for A/B testing.
39
+ *
40
+ * @returns true if added, false if maxCandidates already reached.
41
+ */
42
+ addCandidate(candidate: SkillCandidate): boolean;
43
+ /**
44
+ * Record an outcome score for a candidate or the incumbent.
45
+ *
46
+ * @param candidateId - Candidate ID or "incumbent".
47
+ * @param score - Outcome score [0, 1].
48
+ */
49
+ recordOutcome(candidateId: string | "incumbent", score: number): void;
50
+ /**
51
+ * Returns true if the candidate's mean score has dropped >rollbackThresholdPct
52
+ * vs the incumbent mean.
53
+ */
54
+ shouldRollback(candidateId: string): boolean;
55
+ /**
56
+ * Return the winning candidate if statistical significance is established.
57
+ *
58
+ * Winner criteria:
59
+ * - p < 0.05 (Welch's t-test vs incumbent)
60
+ * - delta >= 10% vs incumbent mean
61
+ * - rollback NOT triggered
62
+ *
63
+ * Returns null if no candidate meets all criteria.
64
+ */
65
+ getWinner(): SkillCandidate | null;
66
+ }
67
+ //# sourceMappingURL=ab-runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ab-runner.d.ts","sourceRoot":"","sources":["../../src/skill-loop/ab-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAMrD,MAAM,WAAW,QAAQ;IACvB,kDAAkD;IAClD,aAAa,EAAE,MAAM,CAAC;IACtB,iEAAiE;IACjE,UAAU,EAAE,MAAM,CAAC;IACnB,iFAAiF;IACjF,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,MAAM;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAuDD,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA6B;IACnD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAqC;IAChE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAgB;gBAEtC,MAAM,EAAE,QAAQ;IAS5B;;;;OAIG;IACH,YAAY,CAAC,SAAS,EAAE,cAAc,GAAG,OAAO;IAchD;;;;;OAKG;IACH,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,WAAW,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAgBrE;;;OAGG;IACH,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAa5C;;;;;;;;;OASG;IACH,SAAS,IAAI,cAAc,GAAG,IAAI;CAqBnC"}
@@ -0,0 +1,160 @@
1
+ /**
2
+ * src/skill-loop/ab-runner.ts
3
+ *
4
+ * A/B test runner with failure budgets for SkillCandidates.
5
+ *
6
+ * Invariants:
7
+ * - Max 3 candidates simultaneously (4th is rejected).
8
+ * - Traffic fraction cap: 10% per candidate.
9
+ * - Rollback triggered when a candidate's mean score drops >5% vs incumbent.
10
+ * - Winner declared when: p < 0.05 AND delta >= 10% AND no rollback triggered.
11
+ *
12
+ * Statistical significance uses the same Welch approach as evaluator.ts.
13
+ *
14
+ * @module skill-loop/ab-runner
15
+ */
16
+ // ---------------------------------------------------------------------------
17
+ // Statistical helpers (inline — avoid circular dep with evaluator)
18
+ // ---------------------------------------------------------------------------
19
+ function mean(xs) {
20
+ if (xs.length === 0)
21
+ return 0;
22
+ return xs.reduce((a, b) => a + b, 0) / xs.length;
23
+ }
24
+ function variance(xs, m) {
25
+ if (xs.length < 2)
26
+ return 0;
27
+ return xs.reduce((acc, x) => acc + (x - m) ** 2, 0) / (xs.length - 1);
28
+ }
29
+ function normalCdf(z) {
30
+ const t = 1 / (1 + 0.2316419 * z);
31
+ const d = 0.3989423 * Math.exp((-z * z) / 2);
32
+ const p = d *
33
+ t *
34
+ (0.3193815 +
35
+ t * (-0.3565638 + t * (1.7814779 + t * (-1.8212559 + t * 1.3302744))));
36
+ return 1 - p;
37
+ }
38
+ function welchPValue(a, b) {
39
+ const n1 = a.length;
40
+ const n2 = b.length;
41
+ if (n1 < 2 || n2 < 2)
42
+ return 1.0;
43
+ const m1 = mean(a);
44
+ const m2 = mean(b);
45
+ const v1 = variance(a, m1);
46
+ const v2 = variance(b, m2);
47
+ const se = Math.sqrt(v1 / n1 + v2 / n2);
48
+ if (se === 0)
49
+ return m1 === m2 ? 1.0 : 0.0;
50
+ const tStat = Math.abs((m1 - m2) / se);
51
+ const df = (v1 / n1 + v2 / n2) ** 2 /
52
+ ((v1 / n1) ** 2 / (n1 - 1) + (v2 / n2) ** 2 / (n2 - 1));
53
+ if (df >= 30) {
54
+ return Math.max(0, Math.min(1, 2 * (1 - normalCdf(tStat))));
55
+ }
56
+ // Conservative: approximate p via critical value at df ≈ 30 (t-crit = 2.042)
57
+ return tStat > 2.042 ? 0.04 : 0.1;
58
+ }
59
+ // ---------------------------------------------------------------------------
60
+ // ABRunner
61
+ // ---------------------------------------------------------------------------
62
+ export class ABRunner {
63
+ config;
64
+ slots = new Map();
65
+ candidates = new Map();
66
+ incumbentOutcomes = [];
67
+ constructor(config) {
68
+ // Enforce hard caps
69
+ this.config = {
70
+ maxCandidates: Math.min(config.maxCandidates, 3),
71
+ trafficPct: Math.min(config.trafficPct, 0.1),
72
+ rollbackThresholdPct: config.rollbackThresholdPct,
73
+ };
74
+ }
75
+ /**
76
+ * Register a new candidate for A/B testing.
77
+ *
78
+ * @returns true if added, false if maxCandidates already reached.
79
+ */
80
+ addCandidate(candidate) {
81
+ if (this.slots.size >= this.config.maxCandidates) {
82
+ return false;
83
+ }
84
+ this.candidates.set(candidate.id, candidate);
85
+ this.slots.set(candidate.id, {
86
+ candidateId: candidate.id,
87
+ trafficFraction: this.config.trafficPct,
88
+ outcomes: [],
89
+ rollbackTriggered: false,
90
+ });
91
+ return true;
92
+ }
93
+ /**
94
+ * Record an outcome score for a candidate or the incumbent.
95
+ *
96
+ * @param candidateId - Candidate ID or "incumbent".
97
+ * @param score - Outcome score [0, 1].
98
+ */
99
+ recordOutcome(candidateId, score) {
100
+ if (candidateId === "incumbent") {
101
+ this.incumbentOutcomes.push(score);
102
+ return;
103
+ }
104
+ const slot = this.slots.get(candidateId);
105
+ if (!slot)
106
+ return;
107
+ slot.outcomes.push(score);
108
+ // Check rollback condition after each new data point
109
+ if (!slot.rollbackTriggered && this.shouldRollback(candidateId)) {
110
+ slot.rollbackTriggered = true;
111
+ }
112
+ }
113
+ /**
114
+ * Returns true if the candidate's mean score has dropped >rollbackThresholdPct
115
+ * vs the incumbent mean.
116
+ */
117
+ shouldRollback(candidateId) {
118
+ const slot = this.slots.get(candidateId);
119
+ if (!slot || slot.outcomes.length === 0)
120
+ return false;
121
+ if (this.incumbentOutcomes.length === 0)
122
+ return false;
123
+ const candMean = mean(slot.outcomes);
124
+ const incMean = mean(this.incumbentOutcomes);
125
+ // Degradation: candidate is worse than incumbent by more than threshold
126
+ const degradation = incMean - candMean;
127
+ return degradation > this.config.rollbackThresholdPct;
128
+ }
129
+ /**
130
+ * Return the winning candidate if statistical significance is established.
131
+ *
132
+ * Winner criteria:
133
+ * - p < 0.05 (Welch's t-test vs incumbent)
134
+ * - delta >= 10% vs incumbent mean
135
+ * - rollback NOT triggered
136
+ *
137
+ * Returns null if no candidate meets all criteria.
138
+ */
139
+ getWinner() {
140
+ if (this.incumbentOutcomes.length < 2)
141
+ return null;
142
+ const incMean = mean(this.incumbentOutcomes);
143
+ for (const [id, slot] of this.slots) {
144
+ if (slot.rollbackTriggered)
145
+ continue;
146
+ if (slot.outcomes.length < 2)
147
+ continue;
148
+ const candMean = mean(slot.outcomes);
149
+ const delta = candMean - incMean;
150
+ if (delta < 0.1)
151
+ continue;
152
+ const p = welchPValue(slot.outcomes, this.incumbentOutcomes);
153
+ if (p < 0.05) {
154
+ return this.candidates.get(id) ?? null;
155
+ }
156
+ }
157
+ return null;
158
+ }
159
+ }
160
+ //# sourceMappingURL=ab-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ab-runner.js","sourceRoot":"","sources":["../../src/skill-loop/ab-runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * src/skill-loop/adoption.ts
3
+ *
4
+ * Skill adoption — auto-promote and deprecate logic gated by sign-off.
5
+ *
6
+ * Promotion conditions (ALL must hold):
7
+ * 1. EvalResult.pValue < 0.05 (statistical significance)
8
+ * 2. EvalResult.deltaVsIncumbent >= 0.10 (>=10% improvement)
9
+ * 3. A valid approved SignOffRecord exists for the candidateId
10
+ *
11
+ * Violation of condition 3 → throws PromotionWithoutSignOffError.
12
+ *
13
+ * Underperformers (deltaVsIncumbent < -0.05 OR pValue > 0.5) are
14
+ * automatically deprecated via deprecateUnderperformers().
15
+ *
16
+ * @module skill-loop/adoption
17
+ */
18
+ import type { SkillCandidate } from "./candidate.js";
19
+ import type { EvalResult } from "./evaluator.js";
20
+ import type { SignOffRecord } from "./sign-off.js";
21
+ export declare class PromotionWithoutSignOffError extends Error {
22
+ readonly candidateId: string;
23
+ constructor(candidateId: string);
24
+ }
25
+ export type AdoptionStatus = "promoted" | "rejected" | "deprecated" | "pending_signoff" | "insufficient_signal";
26
+ export interface AdoptionRecord {
27
+ candidateId: string;
28
+ status: AdoptionStatus;
29
+ evalResult: EvalResult;
30
+ signOff: SignOffRecord | null;
31
+ promotedAt: Date | null;
32
+ deprecatedAt: Date | null;
33
+ reason: string;
34
+ }
35
+ /**
36
+ * Attempt to promote a candidate to production.
37
+ *
38
+ * @param candidate - The skill candidate.
39
+ * @param evalResult - Evaluation result against the verifier set.
40
+ * @param signOff - Approved sign-off record (must be decision === 'approved').
41
+ * @param nowDate - Optional date override for deterministic testing.
42
+ *
43
+ * @throws PromotionWithoutSignOffError if signOff is null or not approved.
44
+ */
45
+ export declare function promoteCandidate(candidate: SkillCandidate, evalResult: EvalResult, signOff: SignOffRecord | null, nowDate?: Date): AdoptionRecord;
46
+ /**
47
+ * Reject a candidate explicitly (e.g. sign-off decision = rejected).
48
+ */
49
+ export declare function rejectCandidate(candidate: SkillCandidate, evalResult: EvalResult, signOff: SignOffRecord | null, reason: string): AdoptionRecord;
50
+ /**
51
+ * Automatically deprecate underperforming candidates from a pool.
52
+ *
53
+ * A candidate is an underperformer if:
54
+ * - deltaVsIncumbent < -0.05 (degrades by more than 5%)
55
+ * - OR (deltaVsIncumbent < 0 AND pValue > 0.5) — statistically noisy & negative
56
+ *
57
+ * Deprecation is automatic — no sign-off required (sign-off is only for promotion).
58
+ *
59
+ * @param candidates - Pool of (candidate, evalResult) pairs to assess.
60
+ * @param nowDate - Optional date override.
61
+ * @returns AdoptionRecords for every deprecated candidate.
62
+ */
63
+ export declare function deprecateUnderperformers(candidates: Array<{
64
+ candidate: SkillCandidate;
65
+ evalResult: EvalResult;
66
+ }>, nowDate?: Date): AdoptionRecord[];
67
+ //# sourceMappingURL=adoption.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adoption.d.ts","sourceRoot":"","sources":["../../src/skill-loop/adoption.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAMnD,qBAAa,4BAA6B,SAAQ,KAAK;IACrD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;gBAEjB,WAAW,EAAE,MAAM;CAQhC;AAMD,MAAM,MAAM,cAAc,GACtB,UAAU,GACV,UAAU,GACV,YAAY,GACZ,iBAAiB,GACjB,qBAAqB,CAAC;AAE1B,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,cAAc,CAAC;IACvB,UAAU,EAAE,UAAU,CAAC;IACvB,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;IAC9B,UAAU,EAAE,IAAI,GAAG,IAAI,CAAC;IACxB,YAAY,EAAE,IAAI,GAAG,IAAI,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;CAChB;AAMD;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,cAAc,EACzB,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,aAAa,GAAG,IAAI,EAC7B,OAAO,CAAC,EAAE,IAAI,GACb,cAAc,CAmChB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,cAAc,EACzB,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,aAAa,GAAG,IAAI,EAC7B,MAAM,EAAE,MAAM,GACb,cAAc,CAUhB;AAYD;;;;;;;;;;;;GAYG;AACH,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,KAAK,CAAC;IAAE,SAAS,EAAE,cAAc,CAAC;IAAC,UAAU,EAAE,UAAU,CAAA;CAAE,CAAC,EACxE,OAAO,CAAC,EAAE,IAAI,GACb,cAAc,EAAE,CAyBlB"}