agentic-qe 3.15.8 → 3.15.10

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 (642) hide show
  1. package/.claude/skills/skills-manifest.json +1 -1
  2. package/CHANGELOG.md +434 -0
  3. package/assets/skills/skills-manifest.json +1 -1
  4. package/dist/adapters/a2ui/catalog/component-schemas.js +2 -1
  5. package/dist/adapters/a2ui/data/json-pointer-resolver.js +10 -5
  6. package/dist/adapters/a2ui/integration/agui-sync.js +10 -6
  7. package/dist/adapters/a2ui/integration/surface-state-bridge.js +9 -5
  8. package/dist/adapters/ag-ui/json-patch.js +10 -6
  9. package/dist/agents/claim-verifier/claim-verifier-service.js +13 -8
  10. package/dist/audit/witness-chain.d.ts +1 -1
  11. package/dist/bridge/captured-experience-bridge.js +12 -13
  12. package/dist/cli/bundle.js +6 -6
  13. package/dist/cli/chunks/adapter-TR5SLAZC.js +2 -0
  14. package/dist/cli/chunks/agent-booster-wasm-H7ANGXW4.js +2 -0
  15. package/dist/cli/chunks/{agent-handler-2NQFHAWE.js → agent-handler-SVXSHEET.js} +2 -2
  16. package/dist/cli/chunks/{agent-memory-branch-457ECHHK.js → agent-memory-branch-WKQH36XL.js} +2 -2
  17. package/dist/cli/chunks/aqe-learning-engine-DXWKCHY2.js +2 -0
  18. package/dist/cli/chunks/{arena-JV3WSEHU.js → arena-EKOOFVST.js} +2 -2
  19. package/dist/cli/chunks/{arena-IYBQ3GPY.js → arena-OPS36NFZ.js} +4 -4
  20. package/dist/cli/chunks/{audit-5OS3T3K6.js → audit-AO5NDZRI.js} +3 -3
  21. package/dist/cli/chunks/base-GTB6POYE.js +2 -0
  22. package/dist/cli/chunks/{better-sqlite3-IQKBFVAO.js → better-sqlite3-TFLVEMMY.js} +2 -2
  23. package/dist/cli/chunks/{brain-handler-KA3SGAFM.js → brain-handler-ADBBJPYW.js} +3 -3
  24. package/dist/cli/chunks/{branch-enumerator-QZDU2VOQ.js → branch-enumerator-HGHUYYL5.js} +2 -2
  25. package/dist/cli/chunks/browser-5LU6P4SZ.js +4 -0
  26. package/dist/cli/chunks/browser-workflow-MSBOLYUY.js +2 -0
  27. package/dist/cli/chunks/{chunk-CRUQ6RXU.js → chunk-2SXBBUM6.js} +2 -2
  28. package/dist/cli/chunks/{chunk-4GUVVGJX.js → chunk-2T7RRL6G.js} +1 -1
  29. package/dist/cli/chunks/{chunk-OJWEZYLR.js → chunk-2XGVTYVX.js} +2 -2
  30. package/dist/cli/chunks/{chunk-LVHZK7GW.js → chunk-2ZI5FKSF.js} +2 -2
  31. package/dist/cli/chunks/chunk-2ZMF4NCF.js +4 -0
  32. package/dist/cli/chunks/{chunk-62T7U25U.js → chunk-37OWRCUN.js} +1 -1
  33. package/dist/cli/chunks/{chunk-UQLAN5TX.js → chunk-3P34JFQH.js} +5 -5
  34. package/dist/cli/chunks/{chunk-UDCYQLTD.js → chunk-3Y7SPD72.js} +2 -2
  35. package/dist/cli/chunks/{chunk-PPIM7B5G.js → chunk-4G63WT4F.js} +2 -2
  36. package/dist/cli/chunks/chunk-4SJYIX54.js +3 -0
  37. package/dist/cli/chunks/chunk-5E6GHSTY.js +3 -0
  38. package/dist/cli/chunks/{chunk-4TZLZRZ4.js → chunk-5LPYV3TK.js} +1 -1
  39. package/dist/cli/chunks/{chunk-YUP3APSN.js → chunk-62OAY5KJ.js} +1 -1
  40. package/dist/cli/chunks/{chunk-VQRBBR27.js → chunk-6C3II5OM.js} +2 -2
  41. package/dist/cli/chunks/{chunk-RG42LDOB.js → chunk-6GP6W46M.js} +2 -2
  42. package/dist/cli/chunks/{chunk-KMZW2P3R.js → chunk-6KIL6CMD.js} +2 -2
  43. package/dist/cli/chunks/{chunk-UKKFZJME.js → chunk-6MVVSSID.js} +1 -1
  44. package/dist/cli/chunks/{chunk-VVK4ECVJ.js → chunk-6P7424AO.js} +2 -2
  45. package/dist/cli/chunks/{chunk-A2UGPKCS.js → chunk-6PX4OXQO.js} +2 -2
  46. package/dist/cli/chunks/{chunk-JLTGO5BB.js → chunk-6S3WJGUV.js} +2 -2
  47. package/dist/cli/chunks/{chunk-GSOK4M6V.js → chunk-6TB6YOCZ.js} +1 -1
  48. package/dist/cli/chunks/{chunk-VWRNG3UK.js → chunk-6X5DHU6Q.js} +1 -1
  49. package/dist/cli/chunks/{chunk-5YOO5QSE.js → chunk-6XCMKIZN.js} +1 -1
  50. package/dist/cli/chunks/{chunk-4C3RYBTT.js → chunk-7LFZ4CHM.js} +2 -2
  51. package/dist/cli/chunks/{chunk-O4RRVTXN.js → chunk-7OZVZIBE.js} +2 -2
  52. package/dist/cli/chunks/{chunk-2JCLACCS.js → chunk-7PJIR4ST.js} +2 -2
  53. package/dist/cli/chunks/{chunk-NWFBF3KT.js → chunk-7TB6FK4B.js} +1 -1
  54. package/dist/cli/chunks/{chunk-FJAO4UX2.js → chunk-7ZCDZHDB.js} +2 -2
  55. package/dist/cli/chunks/chunk-A55QKKT2.js +2 -0
  56. package/dist/cli/chunks/{chunk-ZOVAZTXE.js → chunk-ABFFWZPC.js} +273 -278
  57. package/dist/cli/chunks/{chunk-FWXNFPLS.js → chunk-ACWFKES2.js} +2 -2
  58. package/dist/cli/chunks/{chunk-IJSFZO7P.js → chunk-AH3ZD3NJ.js} +2 -2
  59. package/dist/cli/chunks/{chunk-7SLEUVPZ.js → chunk-AI4VYSFS.js} +2 -2
  60. package/dist/cli/chunks/chunk-APSRPR4W.js +2 -0
  61. package/dist/cli/chunks/chunk-ATHWDAXB.js +3 -0
  62. package/dist/cli/chunks/{chunk-2GSAAUW3.js → chunk-B6LTH6YV.js} +2 -2
  63. package/dist/cli/chunks/chunk-BQUAE3CP.js +3 -0
  64. package/dist/cli/chunks/{chunk-7XGM7Q2N.js → chunk-C522H7XR.js} +54 -33
  65. package/dist/cli/chunks/{chunk-7DHSHD5B.js → chunk-CESIR27V.js} +2 -2
  66. package/dist/cli/chunks/{chunk-V7VZSNDK.js → chunk-CFBEBXLO.js} +3 -3
  67. package/dist/cli/chunks/{chunk-NZATJ2C6.js → chunk-CMBLM26R.js} +2 -2
  68. package/dist/cli/chunks/{chunk-7CVMT64N.js → chunk-CZ2IF6MC.js} +1 -1
  69. package/dist/cli/chunks/{chunk-YVWMJZ6O.js → chunk-CZGOSJQ4.js} +2 -2
  70. package/dist/cli/chunks/{chunk-TMNEK7TP.js → chunk-D6DA2KFD.js} +2 -2
  71. package/dist/cli/chunks/{chunk-UTNKMPTC.js → chunk-DBMNJSBV.js} +1 -1
  72. package/dist/cli/chunks/{chunk-JFWQFB3S.js → chunk-DE4YJQJF.js} +2 -2
  73. package/dist/cli/chunks/{chunk-767SR7WH.js → chunk-DEF34AFL.js} +2 -2
  74. package/dist/cli/chunks/{chunk-ZWMFKZEQ.js → chunk-DKAC3E3B.js} +2 -2
  75. package/dist/cli/chunks/{chunk-CDLG3Q2O.js → chunk-DMFTELBS.js} +2 -2
  76. package/dist/cli/chunks/{chunk-P4UT4LBE.js → chunk-DNRWGATA.js} +10 -10
  77. package/dist/cli/chunks/{chunk-PUYQ6EKC.js → chunk-DT7SIJOA.js} +2 -2
  78. package/dist/cli/chunks/{chunk-ST7ASEJO.js → chunk-DURHK377.js} +69 -69
  79. package/dist/cli/chunks/{chunk-V4QJ3MMT.js → chunk-EAU5KDFO.js} +1 -1
  80. package/dist/cli/chunks/{chunk-BLZEOGQE.js → chunk-EDLFX4ZB.js} +2 -2
  81. package/dist/cli/chunks/{chunk-ZBI7PJFX.js → chunk-EN2QSKFF.js} +2 -2
  82. package/dist/cli/chunks/{chunk-U7CIY3YR.js → chunk-ERQKYIP7.js} +2 -2
  83. package/dist/cli/chunks/{chunk-X7ZQIFES.js → chunk-ESUO3GTJ.js} +2 -2
  84. package/dist/cli/chunks/{chunk-SHEVM5PF.js → chunk-EWFECZ2U.js} +2 -2
  85. package/dist/cli/chunks/{chunk-JWPYMRIX.js → chunk-FAUCT5KR.js} +3 -3
  86. package/dist/cli/chunks/{chunk-KMVFBYJO.js → chunk-FB6TI3BH.js} +2 -2
  87. package/dist/cli/chunks/{chunk-22DOS3PM.js → chunk-FBXTQNRH.js} +2 -2
  88. package/dist/cli/chunks/{chunk-W5A36V3Z.js → chunk-FESZBPUB.js} +2 -2
  89. package/dist/cli/chunks/chunk-FFTPAWM6.js +141 -0
  90. package/dist/cli/chunks/{chunk-VWSGWYRB.js → chunk-FKL3R5JQ.js} +2 -2
  91. package/dist/cli/chunks/{chunk-2DPHFCMW.js → chunk-FPUDRSFJ.js} +2 -2
  92. package/dist/cli/chunks/{chunk-VKFVJCIH.js → chunk-FZOWULMH.js} +1 -1
  93. package/dist/cli/chunks/{chunk-HXCGV5UJ.js → chunk-G3CZCUPM.js} +2 -2
  94. package/dist/cli/chunks/{chunk-GENNJRNK.js → chunk-G5I6KGMW.js} +22 -22
  95. package/dist/cli/chunks/{chunk-J7FLNP5L.js → chunk-GHBNRMSJ.js} +2 -2
  96. package/dist/cli/chunks/{chunk-I77D65X5.js → chunk-GJHWY3ZX.js} +2 -2
  97. package/dist/cli/chunks/{chunk-DKFSCJEF.js → chunk-GJMLK5UT.js} +2 -2
  98. package/dist/cli/chunks/{chunk-52YRSWPS.js → chunk-GRCIBCJ2.js} +2 -2
  99. package/dist/cli/chunks/{chunk-NW7HTOSN.js → chunk-GWZZ7DAO.js} +2 -2
  100. package/dist/cli/chunks/{chunk-D4IBIMWI.js → chunk-GZLZCZ42.js} +2 -2
  101. package/dist/cli/chunks/{chunk-FEN2DHFM.js → chunk-H2PYU7MN.js} +1 -1
  102. package/dist/cli/chunks/{chunk-4I35ARWW.js → chunk-H32EPIR2.js} +1 -1
  103. package/dist/cli/chunks/{chunk-MUDBF2JC.js → chunk-H74Q7TJN.js} +1 -1
  104. package/dist/cli/chunks/chunk-HOZUDE4C.js +2 -0
  105. package/dist/cli/chunks/{chunk-MMY52Y6R.js → chunk-I33O4BRQ.js} +2 -2
  106. package/dist/cli/chunks/{chunk-ZG7UKWBB.js → chunk-IKISCIGH.js} +2 -2
  107. package/dist/cli/chunks/{chunk-SFPGLUXS.js → chunk-IPJ7Q3AJ.js} +1 -1
  108. package/dist/cli/chunks/{chunk-2ZRNXEVI.js → chunk-IU2IV4NE.js} +1 -1
  109. package/dist/cli/chunks/{chunk-XOOBLZXR.js → chunk-JHIY4VCC.js} +2 -2
  110. package/dist/cli/chunks/{chunk-PJGQ2TKN.js → chunk-KG336OV3.js} +2 -2
  111. package/dist/cli/chunks/{chunk-YRH7KMTU.js → chunk-KI73QCR5.js} +2 -2
  112. package/dist/cli/chunks/{chunk-FAYXES7R.js → chunk-KNQ2ERFX.js} +2 -2
  113. package/dist/cli/chunks/{chunk-CQ3SBRDP.js → chunk-KOBVYY6H.js} +2 -2
  114. package/dist/cli/chunks/{chunk-3N627QRU.js → chunk-KSIWGGJI.js} +8 -8
  115. package/dist/cli/chunks/{chunk-2UN4JOTN.js → chunk-LMS3Y7JD.js} +2 -2
  116. package/dist/cli/chunks/{chunk-RSMPJWQH.js → chunk-LQEURY7C.js} +1 -1
  117. package/dist/cli/chunks/{chunk-NQDYOF35.js → chunk-LRZY4KS2.js} +2 -2
  118. package/dist/cli/chunks/{chunk-U3BWBP6B.js → chunk-M2QV7PT7.js} +2 -2
  119. package/dist/cli/chunks/{chunk-WLXGUQOZ.js → chunk-MA7JIQ6U.js} +2 -2
  120. package/dist/cli/chunks/{chunk-Y5ZBF7MA.js → chunk-MG27QY4D.js} +2 -2
  121. package/dist/cli/chunks/chunk-MNN5J4GU.js +12 -0
  122. package/dist/cli/chunks/chunk-N6PIIK6G.js +3 -0
  123. package/dist/cli/chunks/chunk-NAXGWDVM.js +12 -0
  124. package/dist/cli/chunks/{chunk-DCYUHCPK.js → chunk-NGKNYIQZ.js} +1 -1
  125. package/dist/cli/chunks/chunk-NNFZUTDH.js +2 -0
  126. package/dist/cli/chunks/{chunk-UTFMMZ57.js → chunk-NPPHWFA2.js} +3 -3
  127. package/dist/cli/chunks/chunk-NSHU347M.js +2 -0
  128. package/dist/cli/chunks/{chunk-NF63NHJH.js → chunk-NVYIZCSR.js} +2 -2
  129. package/dist/cli/chunks/{chunk-YNQPHRUZ.js → chunk-NW5JUCCG.js} +1 -1
  130. package/dist/cli/chunks/{chunk-G6CLO74Q.js → chunk-NZYLNXT6.js} +3 -3
  131. package/dist/cli/chunks/{chunk-R2NHGESM.js → chunk-OBAREPDC.js} +2 -2
  132. package/dist/cli/chunks/{chunk-X3HM7SV4.js → chunk-ODJNUMV3.js} +2 -2
  133. package/dist/cli/chunks/{chunk-OCLAMZJG.js → chunk-OEKP73MC.js} +2 -2
  134. package/dist/cli/chunks/{chunk-5MBNRTT5.js → chunk-OPFGRS5S.js} +2 -2
  135. package/dist/cli/chunks/{chunk-K5R3WUJP.js → chunk-OY2AHLSF.js} +1 -1
  136. package/dist/cli/chunks/{chunk-KJNUETCB.js → chunk-OY3NJNP2.js} +1 -1
  137. package/dist/cli/chunks/{chunk-P2EA62YS.js → chunk-PCEW6Q2C.js} +1 -1
  138. package/dist/cli/chunks/{chunk-HNGNRIZZ.js → chunk-PFG6VQ5Z.js} +2 -2
  139. package/dist/cli/chunks/{chunk-DN3AKAPY.js → chunk-PGYMKGOE.js} +2 -2
  140. package/dist/cli/chunks/{chunk-BEVWCF3Q.js → chunk-PPSAMXYN.js} +3 -3
  141. package/dist/cli/chunks/chunk-RK73HB2F.js +2 -0
  142. package/dist/cli/chunks/{chunk-6E7EOHMN.js → chunk-RPHY2DU6.js} +2 -2
  143. package/dist/cli/chunks/{chunk-7C6FMLQR.js → chunk-RWWOHCMG.js} +25 -20
  144. package/dist/cli/chunks/{chunk-5ONJ7AV6.js → chunk-S75EYIJG.js} +1 -1
  145. package/dist/cli/chunks/chunk-SKQUUE4F.js +5 -0
  146. package/dist/cli/chunks/chunk-SO45NA4D.js +180 -0
  147. package/dist/cli/chunks/{chunk-SWY6KGMF.js → chunk-SU5H66SD.js} +2 -2
  148. package/dist/cli/chunks/{chunk-ZOHS32SI.js → chunk-SY2IB442.js} +2 -2
  149. package/dist/cli/chunks/{chunk-MV4S3TEC.js → chunk-TBLI254A.js} +2 -2
  150. package/dist/cli/chunks/{chunk-5DZDLOY6.js → chunk-TNMBRDCA.js} +3 -3
  151. package/dist/cli/chunks/{chunk-FEPFXXI7.js → chunk-TYFZXDGZ.js} +2 -2
  152. package/dist/cli/chunks/{chunk-A6GCO6ZU.js → chunk-U4OICXV2.js} +2 -2
  153. package/dist/cli/chunks/{chunk-G77Q22EN.js → chunk-U53ZB4IX.js} +2 -2
  154. package/dist/cli/chunks/chunk-UARKIZAS.js +2 -0
  155. package/dist/cli/chunks/{chunk-6GIC2263.js → chunk-UCJMVXO4.js} +2 -2
  156. package/dist/cli/chunks/{chunk-DAFMHM64.js → chunk-UHTTW3IT.js} +2 -2
  157. package/dist/cli/chunks/{chunk-2QRGIEQV.js → chunk-V2M2XCR5.js} +1 -1
  158. package/dist/cli/chunks/{chunk-XZQVC3GD.js → chunk-V2RSNVMW.js} +1 -1
  159. package/dist/cli/chunks/{chunk-GGSTLKY5.js → chunk-V6JBOIMX.js} +1 -1
  160. package/dist/cli/chunks/{chunk-BTMEOZYY.js → chunk-VFKF2XO7.js} +1 -1
  161. package/dist/cli/chunks/{chunk-4C7KE2EL.js → chunk-VFSYMOAL.js} +2 -2
  162. package/dist/cli/chunks/{chunk-D4O3TJI7.js → chunk-VJQYDYAJ.js} +2 -2
  163. package/dist/cli/chunks/{chunk-PZ7FJ4UG.js → chunk-VKRTTFB6.js} +2 -2
  164. package/dist/cli/chunks/{chunk-CQ5G64EA.js → chunk-VWNFAW2M.js} +2 -2
  165. package/dist/cli/chunks/{chunk-DY37YMMQ.js → chunk-WBM6N6IM.js} +1 -1
  166. package/dist/cli/chunks/{chunk-K4N2MBCE.js → chunk-WDQ7IEZY.js} +2 -2
  167. package/dist/cli/chunks/{chunk-HI6OBDDY.js → chunk-WDVRE6GN.js} +2 -2
  168. package/dist/cli/chunks/{chunk-PICEGWGB.js → chunk-WQ4PYWSW.js} +1 -1
  169. package/dist/cli/chunks/{chunk-NHOMVBCI.js → chunk-WSF24I3D.js} +2 -2
  170. package/dist/cli/chunks/{chunk-LPSMVBB3.js → chunk-XBVUVFJK.js} +2 -2
  171. package/dist/cli/chunks/{chunk-J6LL25QJ.js → chunk-XEB3NLJR.js} +2 -2
  172. package/dist/cli/chunks/{chunk-SJMZZMHP.js → chunk-XFVTGAAJ.js} +2 -2
  173. package/dist/cli/chunks/{chunk-KVMKYUOE.js → chunk-XLZYRTNO.js} +2 -2
  174. package/dist/cli/chunks/chunk-XUZDBQ5X.js +6 -0
  175. package/dist/cli/chunks/{chunk-WAWKAYPY.js → chunk-Y76IAYQD.js} +1 -1
  176. package/dist/cli/chunks/{chunk-3LFLO2WK.js → chunk-YAKGBHO4.js} +2 -2
  177. package/dist/cli/chunks/{chunk-TC52M542.js → chunk-YBSBABOS.js} +2 -2
  178. package/dist/cli/chunks/{chunk-BQUIZ5QT.js → chunk-YCGP5VFP.js} +2 -2
  179. package/dist/cli/chunks/{chunk-T2TDTBFV.js → chunk-YDAQK5UF.js} +1 -1
  180. package/dist/cli/chunks/{chunk-LHRVSK44.js → chunk-YK3BVZY6.js} +2 -2
  181. package/dist/cli/chunks/{chunk-QFYUZYRA.js → chunk-YK7JN5N7.js} +4 -4
  182. package/dist/cli/chunks/{chunk-IMSRWNWF.js → chunk-YKMU4LBV.js} +1 -1
  183. package/dist/cli/chunks/{chunk-NLYUC63R.js → chunk-YYTGXD3R.js} +2 -2
  184. package/dist/cli/chunks/{chunk-OWBFVAEH.js → chunk-Z2O2YJAF.js} +2 -2
  185. package/dist/cli/chunks/{chunk-KITKQUBX.js → chunk-Z7IYW5U7.js} +1 -1
  186. package/dist/cli/chunks/{chunk-4NTLGGXO.js → chunk-ZG5666GJ.js} +1 -1
  187. package/dist/cli/chunks/{chunk-4YUBWU3E.js → chunk-ZXPY654C.js} +1 -1
  188. package/dist/cli/chunks/{ci-7NUCRGWO.js → ci-MSKMVH5X.js} +2 -2
  189. package/dist/cli/chunks/{ci-config-VQVECCFI.js → ci-config-7ODMNAUM.js} +2 -2
  190. package/dist/cli/chunks/{ci-output-P7GQ6TKF.js → ci-output-FXZ7ZZW3.js} +2 -2
  191. package/dist/cli/chunks/{circuit-breaker-5YP6N6HE.js → circuit-breaker-4VOUEPOX.js} +2 -2
  192. package/dist/cli/chunks/{claude-flow-setup-W5H7CMU6.js → claude-flow-setup-7D4SGLM4.js} +2 -2
  193. package/dist/cli/chunks/client-POSVREVS.js +2 -0
  194. package/dist/cli/chunks/{cline-installer-OYANSZ54.js → cline-installer-WRRT7BGQ.js} +2 -2
  195. package/dist/cli/chunks/{code-OMT4UEZI.js → code-ZDJRIL3S.js} +25 -24
  196. package/dist/cli/chunks/{code-index-extractor-M2JEWKNF.js → code-index-extractor-4S4SHM56.js} +2 -2
  197. package/dist/cli/chunks/{codex-installer-YBS6N5O3.js → codex-installer-YTRHNDWR.js} +2 -2
  198. package/dist/cli/chunks/{completions-U7GS5RG6.js → completions-6N64JUXJ.js} +2 -2
  199. package/dist/cli/chunks/{complexity-analyzer-QSXPIUIU.js → complexity-analyzer-I4A26VCJ.js} +2 -2
  200. package/dist/cli/chunks/{continuedev-installer-W5TTT743.js → continuedev-installer-IIDR66LB.js} +2 -2
  201. package/dist/cli/chunks/{copilot-installer-KC2RT24C.js → copilot-installer-SVVFY3S2.js} +2 -2
  202. package/dist/cli/chunks/core-handlers-V243GY7X.js +2 -0
  203. package/dist/cli/chunks/{cost-tracker-OQPVR6V4.js → cost-tracker-VGFS6IBX.js} +2 -2
  204. package/dist/cli/chunks/{coverage-TCO2A2NX.js → coverage-B7MCGNTE.js} +3 -3
  205. package/dist/cli/chunks/cross-domain-router-N3AIEM3B.js +2 -0
  206. package/dist/cli/chunks/{cursor-installer-MH7GWD4L.js → cursor-installer-UPETT57E.js} +2 -2
  207. package/dist/cli/chunks/daemon-7BDJHEIJ.js +18 -0
  208. package/dist/cli/chunks/{daemon-UJEARJZ2.js → daemon-CQFNZLXU.js} +7 -7
  209. package/dist/cli/chunks/{dag-attention-scheduler-F3SUJU5O.js → dag-attention-scheduler-PJVABHON.js} +2 -2
  210. package/dist/cli/chunks/{detect-5QTCRB32.js → detect-56SKAGWX.js} +2 -2
  211. package/dist/cli/chunks/{dist-node-XKZPHDBO.js → dist-node-UYTYUMLN.js} +2 -2
  212. package/dist/cli/chunks/{domain-handler-V3UEADKW.js → domain-handler-YOYLBYJE.js} +2 -2
  213. package/dist/cli/chunks/{domain-plugins-7PES4UHZ.js → domain-plugins-7TARX2XF.js} +2 -2
  214. package/dist/cli/chunks/domain-transfer-AKVSBD6E.js +2 -0
  215. package/dist/cli/chunks/dream-UA7MKOPQ.js +2 -0
  216. package/dist/cli/chunks/{embed-and-insert-pattern-D2HWORHF.js → embed-and-insert-pattern-IS6HSR66.js} +2 -2
  217. package/dist/cli/chunks/{eval-UF2UBAUC.js → eval-GNB574IM.js} +2 -2
  218. package/dist/cli/chunks/{experience-capture-middleware-2OUCEHHM.js → experience-capture-middleware-RCAOCKM7.js} +3 -3
  219. package/dist/cli/chunks/{fast-paths-KV5DKKHC.js → fast-paths-KTZ5SF54.js} +2 -2
  220. package/dist/cli/chunks/{feature-flags-MTW6NMR3.js → feature-flags-ITX5LQ57.js} +2 -2
  221. package/dist/cli/chunks/{feature-flags-6YWMTNO5.js → feature-flags-KFHSR5YF.js} +2 -2
  222. package/dist/cli/chunks/file-discovery-YCMNKZAK.js +2 -0
  223. package/dist/cli/chunks/fleet-2Y3ZE6CE.js +46 -0
  224. package/dist/cli/chunks/{gnn-wrapper-52V6ANOY.js → gnn-wrapper-RLFW3GSX.js} +2 -2
  225. package/dist/cli/chunks/{heartbeat-handler-X7NHNRC7.js → heartbeat-handler-EM2URCYZ.js} +4 -4
  226. package/dist/cli/chunks/heartbeat-scheduler-QH5V6G2P.js +2 -0
  227. package/dist/cli/chunks/hnsw-adapter-OJNFAGJS.js +2 -0
  228. package/dist/cli/chunks/hnsw-index-DFUNARVD.js +2 -0
  229. package/dist/cli/chunks/{hnsw-legacy-bridge-DZBE3KMK.js → hnsw-legacy-bridge-JMHEOIBH.js} +2 -2
  230. package/dist/cli/chunks/{hnswlib-node-2AWWUJAZ.js → hnswlib-node-CBP73QHY.js} +2 -2
  231. package/dist/cli/chunks/{hooks-XLPVROL3.js → hooks-IP7XE34Z.js} +34 -34
  232. package/dist/cli/chunks/hybrid-backend-SSGQQEQ2.js +2 -0
  233. package/dist/cli/chunks/{hypergraph-engine-6TI7YP6P.js → hypergraph-engine-ONAYHU25.js} +2 -2
  234. package/dist/cli/chunks/{hypergraph-handler-DBIBBOXS.js → hypergraph-handler-VINJRAID.js} +3 -3
  235. package/dist/cli/chunks/impact-analyzer-CRGCA7ZD.js +2 -0
  236. package/dist/cli/chunks/{init-guard-OSO6MIDD.js → init-guard-RYVV5R3Z.js} +2 -2
  237. package/dist/cli/chunks/{init-handler-7S7IHMUF.js → init-handler-MPRGWMOE.js} +6 -6
  238. package/dist/cli/chunks/init-wizard-NIMZ4J55.js +2 -0
  239. package/dist/cli/chunks/kernel-JQK7PRAI.js +2 -0
  240. package/dist/cli/chunks/{kilocode-installer-2KBRFXMA.js → kilocode-installer-OPD7JBRL.js} +2 -2
  241. package/dist/cli/chunks/{kiro-installer-5VFR4OQZ.js → kiro-installer-M4OPUNK2.js} +2 -2
  242. package/dist/cli/chunks/knowledge-graph-YPVVIKEU.js +2 -0
  243. package/dist/cli/chunks/{learning-G5NHL3DV.js → learning-4UWTQLMF.js} +24 -24
  244. package/dist/cli/chunks/{llm-router-4EAPPMHS.js → llm-router-SQ56FF6Z.js} +4 -4
  245. package/dist/cli/chunks/llm-router-service-5OGAUOXF.js +2 -0
  246. package/dist/cli/chunks/{load-UYMZPEY6.js → load-HPHKDGGL.js} +2 -2
  247. package/dist/cli/chunks/load-test-UKNV5MWW.js +2 -0
  248. package/dist/cli/chunks/mcp-TELMAC7Z.js +2 -0
  249. package/dist/cli/chunks/{memory-QL53YIHP.js → memory-PFQ3KPVJ.js} +5 -5
  250. package/dist/cli/chunks/memory-backend-ZW4BTRNK.js +2 -0
  251. package/dist/cli/chunks/memory-handlers-FCXN437E.js +2 -0
  252. package/dist/cli/chunks/{multi-model-executor-PDDDXF2B.js → multi-model-executor-3VDRX6TZ.js} +2 -2
  253. package/dist/cli/chunks/{opencode-installer-75D2SKOT.js → opencode-installer-PJ576R63.js} +2 -2
  254. package/dist/cli/chunks/{orchestrator-3WIZBV4T.js → orchestrator-72QP4UU7.js} +64 -19
  255. package/dist/cli/chunks/pattern-null-store-4DUV6MQC.js +2 -0
  256. package/dist/cli/chunks/{pattern-usage-recorder-TEX2JGHA.js → pattern-usage-recorder-754YQW7C.js} +2 -2
  257. package/dist/cli/chunks/pipeline-AVXY4MVB.js +19 -0
  258. package/dist/cli/chunks/{platform-WPSKRJE7.js → platform-3E3DXLYB.js} +2 -2
  259. package/dist/cli/chunks/{plugin-UUFOVVMU.js → plugin-7FUQAKRE.js} +2 -2
  260. package/dist/cli/chunks/{prime-radiant-advanced-wasm-PDFSYWKZ.js → prime-radiant-advanced-wasm-NIB4F5NV.js} +2 -2
  261. package/dist/cli/chunks/project-root-JCAUNL6O.js +2 -0
  262. package/dist/cli/chunks/protocol-executor-RNZNZP3A.js +2 -0
  263. package/dist/cli/chunks/{protocol-handler-3VRYRIQB.js → protocol-handler-BQRYMUTG.js} +2 -2
  264. package/dist/cli/chunks/{prove-2NAUROGF.js → prove-H52QGC6B.js} +2 -2
  265. package/dist/cli/chunks/qe-reasoning-bank-WK6TQOG2.js +2 -0
  266. package/dist/cli/chunks/{quality-ZIEI2WGA.js → quality-QO4XPAUM.js} +2 -2
  267. package/dist/cli/chunks/{quality-gate-KWJO4SWQ.js → quality-gate-FBKE5E6F.js} +3 -3
  268. package/dist/cli/chunks/queen-coordinator-4452SXZQ.js +2 -0
  269. package/dist/cli/chunks/{real-embeddings-TSZ4UIAE.js → real-embeddings-RWGOVOXO.js} +2 -2
  270. package/dist/cli/chunks/{ref-validation-DWFFRETJ.js → ref-validation-LF76ZOBD.js} +2 -2
  271. package/dist/cli/chunks/{roocode-installer-XTZHLUBO.js → roocode-installer-3BYEBTQ7.js} +2 -2
  272. package/dist/cli/chunks/router-3DIS5X4R.js +2 -0
  273. package/dist/cli/chunks/routing-feedback-OPXRCXM7.js +2 -0
  274. package/dist/cli/chunks/{routing-handler-GG525TDM.js → routing-handler-DST7BVCU.js} +2 -2
  275. package/dist/cli/chunks/{ruvector-commands-QKRJDM7Z.js → ruvector-commands-XE32PGKC.js} +2 -2
  276. package/dist/cli/chunks/rvf-dual-writer-JL6T727I.js +2 -0
  277. package/dist/cli/chunks/rvf-migration-adapter-V7IBDUCS.js +2 -0
  278. package/dist/cli/chunks/{rvf-migration-coordinator-FF52OS6Q.js → rvf-migration-coordinator-VP32XC75.js} +2 -2
  279. package/dist/cli/chunks/rvf-native-adapter-O3UQTEBK.js +2 -0
  280. package/dist/cli/chunks/{rvf-store-integrity-M6DXTAZ4.js → rvf-store-integrity-SH2AMVI7.js} +2 -2
  281. package/dist/cli/chunks/safe-db-EVB4ZC7T.js +2 -0
  282. package/dist/cli/chunks/schedule-ORDDXXY4.js +2 -0
  283. package/dist/cli/chunks/scheduler-XFLJSFIU.js +2 -0
  284. package/dist/cli/chunks/{security-EHXSW22U.js → security-VSPNKCDS.js} +3 -3
  285. package/dist/cli/chunks/{shared-rvf-adapter-6EH7UVJL.js → shared-rvf-adapter-HX6AHL3P.js} +2 -2
  286. package/dist/cli/chunks/{shared-rvf-dual-writer-WML274E7.js → shared-rvf-dual-writer-MX4FC2JE.js} +2 -2
  287. package/dist/cli/chunks/sqlite-persistence-Y7B42CJ3.js +2 -0
  288. package/dist/cli/chunks/{standalone-memory-C7QKAXS4.js → standalone-memory-O4QUTK6L.js} +2 -2
  289. package/dist/cli/chunks/{status-handler-VLI7MRLM.js → status-handler-Z2BP6EOG.js} +2 -2
  290. package/dist/cli/chunks/{structural-health-3LPG6MQN.js → structural-health-R36WNLQG.js} +2 -2
  291. package/dist/cli/chunks/sync-2ELWUFQU.js +2 -0
  292. package/dist/cli/chunks/{sync-JFJEJBVK.js → sync-QF5Y3EMZ.js} +2 -2
  293. package/dist/cli/chunks/{task-handler-IED3K6E4.js → task-handler-43PYE75J.js} +13 -7
  294. package/dist/cli/chunks/task-handlers-KPWAEMKH.js +9 -0
  295. package/dist/cli/chunks/{test-GPKT3CKZ.js → test-UWA377D4.js} +16 -16
  296. package/dist/cli/chunks/test-runner-process-3XZUYST2.js +2 -0
  297. package/dist/cli/chunks/{test-scheduling-Z42XXZP6.js → test-scheduling-YQZPJRRN.js} +3 -3
  298. package/dist/cli/chunks/token-bootstrap-F7C6UKTC.js +2 -0
  299. package/dist/cli/chunks/{token-usage-6Y2ERYIY.js → token-usage-DO6WLMXP.js} +2 -2
  300. package/dist/cli/chunks/{transformers-MB63T2XO.js → transformers-H5RGFKVO.js} +2 -2
  301. package/dist/cli/chunks/tree-sitter-wasm-parser-YTBCBHUO.js +2 -0
  302. package/dist/cli/chunks/{types-J4J6QV3I.js → types-PJS2FGPF.js} +2 -2
  303. package/dist/cli/chunks/unified-memory-EHD4VNFW.js +2 -0
  304. package/dist/cli/chunks/unified-memory-hnsw-ZODGM4UK.js +2 -0
  305. package/dist/cli/chunks/unified-persistence-MHSI7ABK.js +2 -0
  306. package/dist/cli/chunks/{upgrade-U4XU7LFM.js → upgrade-4IC4F6AB.js} +2 -2
  307. package/dist/cli/chunks/{validate-B57HA4YK.js → validate-DHUWW7PF.js} +2 -2
  308. package/dist/cli/chunks/{validate-swarm-UPPA4M6T.js → validate-swarm-OERQNOX5.js} +2 -2
  309. package/dist/cli/chunks/visual-security-54MLFKWY.js +2 -0
  310. package/dist/cli/chunks/{web-tree-sitter-GDZMUKOZ.js → web-tree-sitter-TV7DMKES.js} +2 -2
  311. package/dist/cli/chunks/{windsurf-installer-VJRWCHXP.js → windsurf-installer-QZPWSH37.js} +2 -2
  312. package/dist/cli/chunks/witness-chain-LC6Q2W27.js +2 -0
  313. package/dist/cli/chunks/witness-chain-QUIBAF3W.js +2 -0
  314. package/dist/cli/chunks/witness-chain-repair-RUXIOE7F.js +2 -0
  315. package/dist/cli/chunks/{witness-chain-verifier-Z23FVABW.js → witness-chain-verifier-YXENHB42.js} +2 -2
  316. package/dist/cli/chunks/{witness-key-manager-745MJ7WO.js → witness-key-manager-HL26AGFO.js} +2 -2
  317. package/dist/cli/chunks/{workflow-T245QNQM.js → workflow-EOVVCN2E.js} +4 -4
  318. package/dist/cli/chunks/workflow-orchestrator-UKHEJVSK.js +2 -0
  319. package/dist/cli/chunks/wrappers-AGODHBOO.js +2 -0
  320. package/dist/cli/commands/code.js +8 -0
  321. package/dist/cli/commands/daemon.js +8 -0
  322. package/dist/cli/commands/fleet.js +27 -15
  323. package/dist/cli/commands/hooks-handlers/hooks-dream-learning.js +9 -2
  324. package/dist/cli/commands/hooks-handlers/session-hooks.js +2 -2
  325. package/dist/cli/commands/hooks-handlers/stats-hooks.js +3 -2
  326. package/dist/cli/commands/learning.js +5 -3
  327. package/dist/cli/commands/ruvector-commands.js +2 -1
  328. package/dist/cli/commands/test.js +6 -0
  329. package/dist/cli/handlers/task-handler.js +21 -1
  330. package/dist/cli/utils/ci-output.d.ts +9 -0
  331. package/dist/cli/utils/fleet-operation.d.ts +32 -0
  332. package/dist/cli/utils/fleet-operation.js +71 -0
  333. package/dist/cli/utils/fleet-result.d.ts +31 -0
  334. package/dist/cli/utils/fleet-result.js +124 -0
  335. package/dist/context/sources/git-source.js +6 -2
  336. package/dist/coordination/handlers/code-intelligence-handlers.js +74 -7
  337. package/dist/coordination/handlers/coverage-collection.js +9 -10
  338. package/dist/coordination/handlers/coverage-handlers.js +31 -4
  339. package/dist/coordination/handlers/coverage-runner.d.ts +2 -1
  340. package/dist/coordination/handlers/coverage-runner.js +9 -2
  341. package/dist/coordination/handlers/coverage-target.d.ts +13 -3
  342. package/dist/coordination/handlers/coverage-target.js +224 -7
  343. package/dist/coordination/handlers/handler-types.d.ts +2 -0
  344. package/dist/coordination/handlers/requirements-handlers.js +16 -2
  345. package/dist/coordination/handlers/security-handlers.js +11 -1
  346. package/dist/coordination/handlers/test-execution-handlers.js +57 -12
  347. package/dist/coordination/index.d.ts +2 -2
  348. package/dist/coordination/index.js +1 -1
  349. package/dist/coordination/mincut/queen-integration.d.ts +39 -1
  350. package/dist/coordination/mincut/queen-integration.js +83 -6
  351. package/dist/coordination/protocols/learning-consolidation-archive.d.ts +35 -0
  352. package/dist/coordination/protocols/learning-consolidation-archive.js +34 -0
  353. package/dist/coordination/protocols/learning-consolidation.d.ts +62 -3
  354. package/dist/coordination/protocols/learning-consolidation.js +187 -60
  355. package/dist/coordination/queen-coordinator.d.ts +13 -2
  356. package/dist/coordination/queen-coordinator.js +43 -8
  357. package/dist/coordination/queen-event-handlers.js +15 -1
  358. package/dist/coordination/queen-lifecycle.js +9 -0
  359. package/dist/coordination/queen-task-management.d.ts +18 -24
  360. package/dist/coordination/queen-task-management.js +94 -127
  361. package/dist/coordination/queen-task-queue.d.ts +41 -0
  362. package/dist/coordination/queen-task-queue.js +194 -0
  363. package/dist/coordination/queen-types.d.ts +11 -1
  364. package/dist/coordination/queen-types.js +8 -0
  365. package/dist/coordination/queen-work-stealing.d.ts +6 -1
  366. package/dist/coordination/queen-work-stealing.js +7 -4
  367. package/dist/coordination/result-saver-adapters.d.ts +15 -0
  368. package/dist/coordination/result-saver-adapters.js +57 -0
  369. package/dist/coordination/result-saver.d.ts +1 -1
  370. package/dist/coordination/result-saver.js +8 -5
  371. package/dist/coordination/task-dag/dag-algorithms.d.ts +33 -0
  372. package/dist/coordination/task-dag/dag-algorithms.js +162 -0
  373. package/dist/coordination/task-dag/dag-obligations.d.ts +21 -0
  374. package/dist/coordination/task-dag/dag-obligations.js +83 -0
  375. package/dist/coordination/task-dag/dag.d.ts +69 -19
  376. package/dist/coordination/task-dag/dag.js +215 -269
  377. package/dist/coordination/task-dag/index.d.ts +12 -4
  378. package/dist/coordination/task-dag/index.js +11 -3
  379. package/dist/coordination/task-dag/prerequisite-ledger.d.ts +84 -0
  380. package/dist/coordination/task-dag/prerequisite-ledger.js +252 -0
  381. package/dist/coordination/task-dag/scheduler.d.ts +19 -9
  382. package/dist/coordination/task-dag/scheduler.js +36 -12
  383. package/dist/coordination/task-dag/types.d.ts +160 -1
  384. package/dist/coordination/task-dag/types.js +2 -1
  385. package/dist/coordination/task-executability.d.ts +18 -0
  386. package/dist/coordination/task-executability.js +31 -0
  387. package/dist/coordination/task-executor.d.ts +1 -0
  388. package/dist/coordination/task-executor.js +5 -0
  389. package/dist/coordination/yaml-pipeline-loader.js +5 -2
  390. package/dist/domains/code-intelligence/coordinator.js +35 -9
  391. package/dist/domains/code-intelligence/index-path-guard.d.ts +52 -0
  392. package/dist/domains/code-intelligence/index-path-guard.js +95 -0
  393. package/dist/domains/code-intelligence/interfaces.d.ts +12 -0
  394. package/dist/domains/code-intelligence/plugin.js +5 -1
  395. package/dist/domains/code-intelligence/services/knowledge-graph.d.ts +6 -0
  396. package/dist/domains/code-intelligence/services/knowledge-graph.js +42 -5
  397. package/dist/domains/code-intelligence/services/metric-collector/index.d.ts +2 -2
  398. package/dist/domains/code-intelligence/services/metric-collector/index.js +2 -3
  399. package/dist/domains/code-intelligence/services/metric-collector/loc-counter.d.ts +1 -1
  400. package/dist/domains/code-intelligence/services/metric-collector/loc-counter.js +11 -36
  401. package/dist/domains/code-intelligence/services/metric-collector/test-counter.d.ts +1 -1
  402. package/dist/domains/code-intelligence/services/metric-collector/test-counter.js +45 -103
  403. package/dist/domains/contract-testing/coordinator.js +3 -1
  404. package/dist/domains/contract-testing/services/api-compatibility.js +7 -6
  405. package/dist/domains/contract-testing/services/contract-validator.js +6 -4
  406. package/dist/domains/contract-testing/services/schema-validator.js +8 -5
  407. package/dist/domains/defect-intelligence/interfaces.d.ts +2 -0
  408. package/dist/domains/defect-intelligence/plugin.js +11 -2
  409. package/dist/domains/defect-intelligence/prediction-history.d.ts +27 -0
  410. package/dist/domains/defect-intelligence/prediction-history.js +68 -0
  411. package/dist/domains/defect-intelligence/services/defect-predictor.js +29 -12
  412. package/dist/domains/enterprise-integration/services/message-broker-service.js +3 -2
  413. package/dist/domains/enterprise-integration/services/odata-service.js +2 -1
  414. package/dist/domains/enterprise-integration/services/sap-integration-service.js +3 -2
  415. package/dist/domains/learning-optimization/active-patterns.d.ts +14 -14
  416. package/dist/domains/learning-optimization/active-patterns.js +17 -14
  417. package/dist/domains/learning-optimization/coordinator-helpers.js +2 -3
  418. package/dist/domains/learning-optimization/coordinator.d.ts +0 -3
  419. package/dist/domains/learning-optimization/coordinator.js +52 -107
  420. package/dist/domains/learning-optimization/index.d.ts +1 -1
  421. package/dist/domains/learning-optimization/interfaces.d.ts +62 -6
  422. package/dist/domains/learning-optimization/pattern-archive.d.ts +31 -0
  423. package/dist/domains/learning-optimization/pattern-archive.js +56 -0
  424. package/dist/domains/learning-optimization/pattern-consolidation.d.ts +12 -0
  425. package/dist/domains/learning-optimization/pattern-consolidation.js +41 -0
  426. package/dist/domains/learning-optimization/plugin.js +11 -1
  427. package/dist/domains/learning-optimization/reward-source.d.ts +50 -0
  428. package/dist/domains/learning-optimization/reward-source.js +65 -0
  429. package/dist/domains/learning-optimization/services/learning-coordinator.d.ts +7 -5
  430. package/dist/domains/learning-optimization/services/learning-coordinator.js +98 -75
  431. package/dist/domains/learning-optimization/services/metrics-optimizer.d.ts +14 -4
  432. package/dist/domains/learning-optimization/services/metrics-optimizer.js +129 -63
  433. package/dist/domains/learning-optimization/services/transfer-specialist.js +25 -15
  434. package/dist/domains/security-compliance/plugin.js +17 -3
  435. package/dist/domains/security-compliance/sast-path-guard.d.ts +9 -0
  436. package/dist/domains/security-compliance/sast-path-guard.js +17 -0
  437. package/dist/domains/security-compliance/services/scanners/dast-auth-testing.js +46 -56
  438. package/dist/domains/security-compliance/services/scanners/dast-helpers.js +76 -91
  439. package/dist/domains/security-compliance/services/scanners/dast-injection-testing.js +52 -62
  440. package/dist/domains/security-compliance/services/scanners/dast-scanner.d.ts +21 -1
  441. package/dist/domains/security-compliance/services/scanners/dast-scanner.js +29 -24
  442. package/dist/domains/security-compliance/services/scanners/scanner-orchestrator.js +4 -1
  443. package/dist/domains/test-execution/coordinator.d.ts +5 -0
  444. package/dist/domains/test-execution/coordinator.js +35 -20
  445. package/dist/domains/test-execution/interfaces.d.ts +41 -0
  446. package/dist/domains/test-execution/plugin.js +19 -4
  447. package/dist/domains/test-execution/services/flaky-detector.js +9 -7
  448. package/dist/domains/test-execution/services/retry-handler.js +46 -7
  449. package/dist/domains/test-execution/services/runner-test-cases.d.ts +32 -0
  450. package/dist/domains/test-execution/services/runner-test-cases.js +87 -0
  451. package/dist/domains/test-execution/services/test-executor.d.ts +5 -0
  452. package/dist/domains/test-execution/services/test-executor.js +31 -9
  453. package/dist/domains/test-generation/plugin.js +7 -2
  454. package/dist/domains/test-generation/services/test-data-generator.js +3 -1
  455. package/dist/domains/visual-accessibility/services/axe-core-audit.js +1 -1
  456. package/dist/hooks/cross-phase-hooks.js +2 -1
  457. package/dist/init/fleet-integration.js +2 -0
  458. package/dist/init/init-wizard-steps.js +2 -0
  459. package/dist/init/phases/06-code-intelligence.js +2 -0
  460. package/dist/init/phases/10-workers.js +51 -6
  461. package/dist/integrations/browser/agent-browser/client.js +37 -52
  462. package/dist/integrations/browser/agent-browser/command-executor.d.ts +33 -27
  463. package/dist/integrations/browser/agent-browser/command-executor.js +53 -54
  464. package/dist/integrations/browser/agent-browser/session-manager.d.ts +1 -1
  465. package/dist/integrations/browser/agent-browser/session-manager.js +8 -9
  466. package/dist/integrations/browser/web-content-fetcher.js +9 -3
  467. package/dist/integrations/vibium/client.js +2 -2
  468. package/dist/integrations/vibium/runtime.d.ts +1 -1
  469. package/dist/integrations/vibium/runtime.js +14 -11
  470. package/dist/kernel/anti-drift-middleware.d.ts +44 -5
  471. package/dist/kernel/anti-drift-middleware.js +147 -11
  472. package/dist/kernel/interfaces.d.ts +5 -0
  473. package/dist/kernel/unified-memory-schemas.d.ts +3 -2
  474. package/dist/kernel/unified-memory-schemas.js +3 -2
  475. package/dist/kernel/unified-memory.js +25 -6
  476. package/dist/learning/dream/dream-commit.d.ts +65 -0
  477. package/dist/learning/dream/dream-commit.js +104 -0
  478. package/dist/learning/dream/dream-engine.d.ts +81 -31
  479. package/dist/learning/dream/dream-engine.js +225 -168
  480. package/dist/learning/dream/dream-insights-pruner.d.ts +24 -4
  481. package/dist/learning/dream/dream-insights-pruner.js +85 -11
  482. package/dist/learning/dream/index.d.ts +3 -2
  483. package/dist/learning/dream/index.js +3 -1
  484. package/dist/learning/dream/rvcow-branch-manager.d.ts +8 -1
  485. package/dist/learning/dream/rvcow-branch-manager.js +8 -1
  486. package/dist/learning/dream/speculative-dreamer.d.ts +50 -74
  487. package/dist/learning/dream/speculative-dreamer.js +64 -111
  488. package/dist/learning/dream/spreading-activation.d.ts +2 -1
  489. package/dist/learning/dream/spreading-activation.js +15 -6
  490. package/dist/learning/experience-capture.d.ts +9 -0
  491. package/dist/learning/experience-capture.js +18 -4
  492. package/dist/learning/qe-reasoning-bank-types.d.ts +17 -2
  493. package/dist/learning/qe-reasoning-bank.js +22 -11
  494. package/dist/learning/skill-validation-learner.d.ts +2 -0
  495. package/dist/learning/skill-validation-learner.js +29 -21
  496. package/dist/learning/sqlite-persistence.d.ts +6 -0
  497. package/dist/learning/sqlite-persistence.js +16 -2
  498. package/dist/learning/usage-outcome.d.ts +68 -0
  499. package/dist/learning/usage-outcome.js +84 -0
  500. package/dist/mcp/background-workers.d.ts +13 -1
  501. package/dist/mcp/background-workers.js +23 -3
  502. package/dist/mcp/bundle.js +602 -551
  503. package/dist/mcp/handlers/core-handlers.js +11 -0
  504. package/dist/mcp/handlers/domain-handler-configs.d.ts +19 -0
  505. package/dist/mcp/handlers/domain-handler-configs.js +76 -30
  506. package/dist/mcp/handlers/handler-factory.d.ts +2 -1
  507. package/dist/mcp/handlers/handler-factory.js +37 -15
  508. package/dist/mcp/handlers/orchestrate-routes.d.ts +36 -0
  509. package/dist/mcp/handlers/orchestrate-routes.js +88 -0
  510. package/dist/mcp/handlers/task-handlers.d.ts +3 -0
  511. package/dist/mcp/handlers/task-handlers.js +69 -6
  512. package/dist/mcp/handlers/validation-pipeline-handler.js +6 -2
  513. package/dist/mcp/metrics/metrics-collector.d.ts +11 -9
  514. package/dist/mcp/metrics/metrics-collector.js +13 -26
  515. package/dist/mcp/protocol-server.js +10 -3
  516. package/dist/mcp/security/schema-validator.js +3 -2
  517. package/dist/mcp/tools/code-intelligence/c4.js +11 -1
  518. package/dist/mcp/tools/coverage-analysis/index.js +31 -2
  519. package/dist/mcp/tools/learning-optimization/dream.d.ts +8 -8
  520. package/dist/mcp/tools/learning-optimization/dream.js +38 -34
  521. package/dist/mcp/tools/learning-optimization/optimize.d.ts +52 -5
  522. package/dist/mcp/tools/learning-optimization/optimize.js +164 -80
  523. package/dist/mcp/tools/quality-assessment/gate.js +12 -1
  524. package/dist/mcp/tools/requirements-validation/quality-criteria.js +9 -2
  525. package/dist/memory/crdt/lww-register.js +11 -1
  526. package/dist/migration/agent-compat.js +7 -5
  527. package/dist/migrations/20261018_add_dream_insights_archive.d.ts +27 -0
  528. package/dist/migrations/20261018_add_dream_insights_archive.js +57 -0
  529. package/dist/routing/calibration/ema-calibrator.js +3 -1
  530. package/dist/shared/base-domain-plugin.d.ts +4 -0
  531. package/dist/shared/base-domain-plugin.js +6 -0
  532. package/dist/shared/git/git-analyzer.d.ts +49 -0
  533. package/dist/shared/git/git-analyzer.js +159 -319
  534. package/dist/shared/git/git-process.d.ts +22 -0
  535. package/dist/shared/git/git-process.js +37 -0
  536. package/dist/shared/git/index.d.ts +1 -0
  537. package/dist/shared/git/index.js +1 -0
  538. package/dist/shared/io/payload-path-guard.d.ts +75 -0
  539. package/dist/shared/io/payload-path-guard.js +190 -0
  540. package/dist/shared/llm/cache.js +4 -1
  541. package/dist/shared/llm/router/agent-router-config.js +2 -1
  542. package/dist/shared/llm/translation/tool-translator.js +2 -1
  543. package/dist/shared/security/compliance-patterns.js +3 -1
  544. package/dist/shared/test-runner-args.d.ts +5 -0
  545. package/dist/shared/test-runner-args.js +6 -1
  546. package/dist/shared/test-runner-process.d.ts +32 -0
  547. package/dist/shared/test-runner-process.js +105 -0
  548. package/dist/shared/test-runner-verdict.d.ts +9 -1
  549. package/dist/shared/test-runner-verdict.js +15 -4
  550. package/dist/shared/types/index.d.ts +9 -0
  551. package/dist/shared/types/index.js +13 -0
  552. package/dist/shared/utils/namespaced-search.d.ts +56 -0
  553. package/dist/shared/utils/namespaced-search.js +71 -0
  554. package/dist/shared/utils/safe-expression-evaluator.js +4 -3
  555. package/dist/strange-loop/infra-healing/infra-action-executor.js +7 -3
  556. package/dist/strange-loop/infra-healing/infra-healing-orchestrator.js +10 -9
  557. package/dist/strange-loop/infra-healing/recovery-playbook.js +13 -3
  558. package/dist/validation/gate-reexecute.js +7 -4
  559. package/dist/workers/daemon.d.ts +2 -0
  560. package/dist/workers/daemon.js +23 -6
  561. package/dist/workers/namespaced-keys.d.ts +4 -7
  562. package/dist/workers/namespaced-keys.js +4 -15
  563. package/dist/workers/quality-daemon/ci-monitor.js +9 -5
  564. package/dist/workers/quality-daemon/git-watcher.js +9 -9
  565. package/dist/workers/worker-env.d.ts +16 -8
  566. package/dist/workers/worker-env.js +25 -12
  567. package/dist/workers/worker-manager.js +4 -0
  568. package/dist/workers/workers/defect-predictor.d.ts +8 -3
  569. package/dist/workers/workers/defect-predictor.js +48 -49
  570. package/dist/workers/workers/learning-consolidation.d.ts +3 -1
  571. package/dist/workers/workers/learning-consolidation.js +22 -8
  572. package/dist/workflows/browser/workflow-loader.js +8 -5
  573. package/package.json +1 -1
  574. package/dist/cli/chunks/adapter-FC4EY447.js +0 -2
  575. package/dist/cli/chunks/agent-booster-wasm-W3V5P7LE.js +0 -2
  576. package/dist/cli/chunks/aqe-learning-engine-AUAL6UBL.js +0 -2
  577. package/dist/cli/chunks/base-2XML4WH7.js +0 -2
  578. package/dist/cli/chunks/browser-ZL7OLKJQ.js +0 -4
  579. package/dist/cli/chunks/browser-workflow-2IFEUAAK.js +0 -2
  580. package/dist/cli/chunks/chunk-4GYFONJB.js +0 -4
  581. package/dist/cli/chunks/chunk-6CKTLVYV.js +0 -2
  582. package/dist/cli/chunks/chunk-7H3GNRNA.js +0 -4
  583. package/dist/cli/chunks/chunk-EUVSSIGR.js +0 -12
  584. package/dist/cli/chunks/chunk-I4U7YCXG.js +0 -180
  585. package/dist/cli/chunks/chunk-J7RCI25Q.js +0 -2
  586. package/dist/cli/chunks/chunk-KNHLOANK.js +0 -4
  587. package/dist/cli/chunks/chunk-KNQUHGNY.js +0 -2
  588. package/dist/cli/chunks/chunk-LZWBUVCK.js +0 -5
  589. package/dist/cli/chunks/chunk-PIEKGKW6.js +0 -12
  590. package/dist/cli/chunks/chunk-PWA6XBW4.js +0 -120
  591. package/dist/cli/chunks/chunk-X6VYQVUM.js +0 -2
  592. package/dist/cli/chunks/chunk-YTYS2XSY.js +0 -2
  593. package/dist/cli/chunks/chunk-Z3LDUPLQ.js +0 -6
  594. package/dist/cli/chunks/client-RFUSQRUZ.js +0 -2
  595. package/dist/cli/chunks/core-handlers-ZC7QB432.js +0 -2
  596. package/dist/cli/chunks/cross-domain-router-GRBK7YFZ.js +0 -2
  597. package/dist/cli/chunks/daemon-JER6HE2J.js +0 -12
  598. package/dist/cli/chunks/domain-transfer-NF7UJW7B.js +0 -2
  599. package/dist/cli/chunks/dream-VALD726W.js +0 -2
  600. package/dist/cli/chunks/file-discovery-VL73ASNI.js +0 -2
  601. package/dist/cli/chunks/fleet-GJ66QFXK.js +0 -43
  602. package/dist/cli/chunks/heartbeat-scheduler-FSX7A3ZA.js +0 -2
  603. package/dist/cli/chunks/hnsw-adapter-UX2QT6RL.js +0 -2
  604. package/dist/cli/chunks/hnsw-index-WRDDAMXH.js +0 -2
  605. package/dist/cli/chunks/hybrid-backend-O67NGIB5.js +0 -2
  606. package/dist/cli/chunks/impact-analyzer-6VXWWYWM.js +0 -2
  607. package/dist/cli/chunks/init-wizard-VH34J4TL.js +0 -2
  608. package/dist/cli/chunks/kernel-KJD24NO7.js +0 -2
  609. package/dist/cli/chunks/knowledge-graph-343O2HEZ.js +0 -2
  610. package/dist/cli/chunks/llm-router-service-2M4BT2AO.js +0 -2
  611. package/dist/cli/chunks/load-test-OTQ2JQ5F.js +0 -2
  612. package/dist/cli/chunks/mcp-NOTDZBW5.js +0 -2
  613. package/dist/cli/chunks/memory-backend-4QSNRRV6.js +0 -2
  614. package/dist/cli/chunks/memory-handlers-YFFYRSM6.js +0 -2
  615. package/dist/cli/chunks/pattern-null-store-5USH5MNR.js +0 -2
  616. package/dist/cli/chunks/pipeline-7ATPA6LU.js +0 -19
  617. package/dist/cli/chunks/project-root-SRTA6TBL.js +0 -2
  618. package/dist/cli/chunks/protocol-executor-4WYPCNBS.js +0 -2
  619. package/dist/cli/chunks/qe-reasoning-bank-I4D6SFS4.js +0 -2
  620. package/dist/cli/chunks/queen-coordinator-24UMTZTE.js +0 -2
  621. package/dist/cli/chunks/router-AUD4GATI.js +0 -2
  622. package/dist/cli/chunks/routing-feedback-2FE6SIKQ.js +0 -2
  623. package/dist/cli/chunks/rvf-dual-writer-P5LEUF25.js +0 -2
  624. package/dist/cli/chunks/rvf-migration-adapter-ZCYD5YJS.js +0 -2
  625. package/dist/cli/chunks/rvf-native-adapter-QGV6BW2W.js +0 -2
  626. package/dist/cli/chunks/safe-db-Q6JUKG2A.js +0 -2
  627. package/dist/cli/chunks/schedule-44OSMGE5.js +0 -2
  628. package/dist/cli/chunks/scheduler-V3HO2QQT.js +0 -2
  629. package/dist/cli/chunks/sqlite-persistence-N5T7DWMR.js +0 -2
  630. package/dist/cli/chunks/sync-4IMMQEPT.js +0 -2
  631. package/dist/cli/chunks/task-handlers-FH6DNTHW.js +0 -9
  632. package/dist/cli/chunks/token-bootstrap-HMM3AHXM.js +0 -2
  633. package/dist/cli/chunks/tree-sitter-wasm-parser-56GDQCMR.js +0 -2
  634. package/dist/cli/chunks/unified-memory-RQ3Q4CU3.js +0 -2
  635. package/dist/cli/chunks/unified-memory-hnsw-ZOP5FEYX.js +0 -2
  636. package/dist/cli/chunks/unified-persistence-72OCJJKK.js +0 -2
  637. package/dist/cli/chunks/visual-security-7F5UV23J.js +0 -2
  638. package/dist/cli/chunks/witness-chain-KZ57QUFE.js +0 -2
  639. package/dist/cli/chunks/witness-chain-LFASSMZK.js +0 -2
  640. package/dist/cli/chunks/witness-chain-repair-TPHN4DXN.js +0 -2
  641. package/dist/cli/chunks/workflow-orchestrator-ZNWEUYBN.js +0 -2
  642. package/dist/cli/chunks/wrappers-WCAYIQUX.js +0 -2
@@ -5,14 +5,16 @@
5
5
  * Directed acyclic graph where nodes are tasks and edges represent
6
6
  * "blocked-by" dependencies. Topological sort via Kahn's algorithm,
7
7
  * cycle detection via DFS coloring, critical path via longest-path DP.
8
+ *
9
+ * Issue #1069: every prerequisite edge carries a typed disposition backed
10
+ * by an immutable PrerequisiteReceiptV1. A dependent becomes ready only
11
+ * when every edge is SATISFIED or WAIVED. Removing an unfinished
12
+ * prerequisite leaves a REMOVED tombstone and keeps dependents blocked.
8
13
  */
9
- /** DFS node coloring for cycle detection */
10
- var NodeColor;
11
- (function (NodeColor) {
12
- NodeColor[NodeColor["White"] = 0] = "White";
13
- NodeColor[NodeColor["Gray"] = 1] = "Gray";
14
- NodeColor[NodeColor["Black"] = 2] = "Black";
15
- })(NodeColor || (NodeColor = {}));
14
+ import { randomUUID } from 'node:crypto';
15
+ import { criticalPath, findCycles, topologicalSort } from './dag-algorithms.js';
16
+ import { PrerequisiteLedger, TERMINAL_STATUSES as TERMINAL, validateWaiverInput } from './prerequisite-ledger.js';
17
+ import { authorizeWaiver, countStatuses, initialDisposition } from './dag-obligations.js';
16
18
  /**
17
19
  * Directed acyclic graph for task dependency management.
18
20
  *
@@ -24,15 +26,31 @@ export class TaskDAG {
24
26
  forwardEdges = new Map();
25
27
  reverseEdges = new Map();
26
28
  eventHandlers = [];
29
+ ledger;
30
+ waiverPolicy;
31
+ constructor(options = {}) {
32
+ this.ledger = new PrerequisiteLedger(options.graphId ?? `dag-${randomUUID()}`);
33
+ this.waiverPolicy = options.waiverPolicy;
34
+ }
35
+ /** Stable identity of this graph, stamped on every receipt. */
36
+ get graphId() {
37
+ return this.ledger.graphId;
38
+ }
39
+ /** Monotonically increasing revision; advances on every mutation. */
40
+ get graphRevision() {
41
+ return this.ledger.graphRevision;
42
+ }
27
43
  /**
28
- * Add a task to the DAG. Status is 'ready' if no incomplete blockers,
29
- * otherwise 'blocked'. Reverse edges are computed automatically.
44
+ * Add a task to the DAG. Status is 'ready' if every prerequisite is
45
+ * SATISFIED, otherwise 'blocked'. Prerequisites not yet in the graph are
46
+ * recorded as MISSING until they are added.
30
47
  * @throws Error if a task with the same ID already exists
31
48
  */
32
49
  addTask(input) {
33
50
  if (this.nodes.has(input.id)) {
34
51
  throw new Error(`Task '${input.id}' already exists in the DAG`);
35
52
  }
53
+ this.ledger.bump();
36
54
  const blockedBy = input.blockedBy ?? [];
37
55
  this.forwardEdges.set(input.id, new Set(blockedBy));
38
56
  if (!this.reverseEdges.has(input.id)) {
@@ -44,14 +62,23 @@ export class TaskDAG {
44
62
  }
45
63
  this.reverseEdges.get(blockerId).add(input.id);
46
64
  }
47
- // Blocks array: tasks already in graph that depend on this one
65
+ this.ledger.addObligation(input.id);
66
+ for (const blockerId of new Set(blockedBy)) {
67
+ const blocker = this.nodes.get(blockerId);
68
+ this.ledger.record(input.id, blockerId, initialDisposition(blocker, this.ledger.isTombstoned(blockerId)), {
69
+ completionEvidenceRef: blocker?.status === 'completed' ? blocker.evidenceRef : undefined,
70
+ });
71
+ }
72
+ // Blocks array: tasks already in graph that depend on this one.
73
+ // Their MISSING/REMOVED edges are now materialized as UNRESOLVED.
48
74
  const blocks = [];
49
- const existingDeps = this.reverseEdges.get(input.id);
50
- if (existingDeps) {
51
- for (const depId of existingDeps)
52
- blocks.push(depId);
75
+ for (const depId of this.reverseEdges.get(input.id) ?? []) {
76
+ blocks.push(depId);
77
+ const d = this.ledger.disposition(depId, input.id);
78
+ if (d === 'MISSING' || d === 'REMOVED')
79
+ this.ledger.record(depId, input.id, 'UNRESOLVED');
53
80
  }
54
- const status = this.computeStatus(blockedBy);
81
+ const status = this.computeStatus(input.id);
55
82
  const task = {
56
83
  id: input.id,
57
84
  name: input.name,
@@ -77,54 +104,43 @@ export class TaskDAG {
77
104
  return task;
78
105
  }
79
106
  /**
80
- * Remove a task, clean up edges, and unblock dependents if appropriate.
107
+ * Remove a task. A lifecycle operation, not an obligation resolution:
108
+ * dependents keep the edge. An unfinished task's unresolved dependent
109
+ * edges become REMOVED and dependents stay blocked until it is re-added
110
+ * and completed, or the edge is waived. SATISFIED edges survive removal,
111
+ * and the task stays in the obligation denominator as a tombstone.
81
112
  * @returns true if removed, false if not found
113
+ * @throws GraphRevisionConflictError if options.expectedRevision is stale
82
114
  */
83
- removeTask(taskId) {
84
- if (!this.nodes.has(taskId))
115
+ removeTask(taskId, options = {}) {
116
+ const task = this.nodes.get(taskId);
117
+ if (!task)
85
118
  return false;
86
- // Detach from blockers
87
- const forward = this.forwardEdges.get(taskId);
88
- if (forward) {
89
- for (const blockerId of forward) {
90
- this.reverseEdges.get(blockerId)?.delete(taskId);
91
- const blocker = this.nodes.get(blockerId);
92
- if (blocker) {
93
- this.nodes.set(blockerId, {
94
- ...blocker,
95
- blocks: blocker.blocks.filter((id) => id !== taskId),
96
- });
97
- }
98
- }
99
- }
100
- // Detach from dependents and check for unblocking
101
- const reverse = this.reverseEdges.get(taskId);
102
- const unblockedIds = [];
103
- if (reverse) {
104
- for (const depId of reverse) {
105
- this.forwardEdges.get(depId)?.delete(taskId);
106
- const dep = this.nodes.get(depId);
107
- if (dep) {
108
- this.nodes.set(depId, {
109
- ...dep,
110
- blockedBy: dep.blockedBy.filter((id) => id !== taskId),
111
- });
112
- }
113
- const updated = this.nodes.get(depId);
114
- if (updated && (updated.status === 'blocked' || updated.status === 'pending')) {
115
- if (this.computeStatus(Array.from(this.forwardEdges.get(depId) ?? [])) === 'ready') {
116
- this.setStatus(depId, 'ready');
117
- unblockedIds.push(depId);
118
- }
119
+ this.ledger.checkRevision(options.expectedRevision);
120
+ const revision = this.ledger.bump();
121
+ // Detach the removed node's own edges to its blockers
122
+ for (const blockerId of this.forwardEdges.get(taskId) ?? []) {
123
+ this.reverseEdges.get(blockerId)?.delete(taskId);
124
+ const blocker = this.nodes.get(blockerId);
125
+ if (blocker)
126
+ this.nodes.set(blockerId, { ...blocker, blocks: blocker.blocks.filter((id) => id !== taskId) });
127
+ }
128
+ this.ledger.dropEdgesOf(taskId);
129
+ // Fail closed: dependents keep the edge; unfinished work becomes REMOVED
130
+ const affected = [];
131
+ if (task.status !== 'completed') {
132
+ for (const depId of this.reverseEdges.get(taskId) ?? []) {
133
+ if (this.nodes.has(depId) && this.ledger.disposition(depId, taskId) === 'UNRESOLVED') {
134
+ this.ledger.record(depId, taskId, 'REMOVED');
135
+ affected.push(depId);
119
136
  }
120
137
  }
121
138
  }
139
+ this.ledger.tombstone(taskId, task.status);
122
140
  this.forwardEdges.delete(taskId);
123
- this.reverseEdges.delete(taskId);
124
141
  this.nodes.delete(taskId);
125
- if (unblockedIds.length > 0) {
126
- this.emit({ type: 'tasks-unblocked', unblockedTaskIds: unblockedIds, timestamp: Date.now() });
127
- }
142
+ // reverseEdges[taskId] is kept so dependents stay linked to the tombstone
143
+ this.emit({ type: 'task-removed', taskId, affectedTaskIds: affected, graphRevision: revision, timestamp: Date.now() });
128
144
  return true;
129
145
  }
130
146
  /** Get a task by ID. */
@@ -149,6 +165,7 @@ export class TaskDAG {
149
165
  if (task.status !== 'ready') {
150
166
  throw new Error(`Cannot start '${taskId}': status '${task.status}', expected 'ready'`);
151
167
  }
168
+ this.ledger.bump();
152
169
  this.nodes.set(taskId, {
153
170
  ...task,
154
171
  status: 'in_progress',
@@ -157,18 +174,27 @@ export class TaskDAG {
157
174
  });
158
175
  }
159
176
  /**
160
- * Mark a task completed and unblock downstream tasks.
177
+ * Mark a task completed, record SATISFIED on its dependent edges, and
178
+ * unblock dependents whose edges are all SATISFIED or WAIVED.
161
179
  * @returns Array of newly unblocked task IDs
162
180
  * @throws Error if task not found or not 'in_progress'
181
+ * @throws GraphRevisionConflictError if options.expectedRevision is stale
163
182
  */
164
- complete(taskId, result) {
183
+ complete(taskId, result, options = {}) {
165
184
  const task = this.requireTask(taskId);
166
185
  if (task.status !== 'in_progress') {
167
186
  throw new Error(`Cannot complete '${taskId}': status '${task.status}', expected 'in_progress'`);
168
187
  }
188
+ const evidenceRef = options.evidenceRef;
189
+ if (evidenceRef !== undefined && (typeof evidenceRef !== 'string' || evidenceRef.trim() === '')) {
190
+ throw new Error(`Cannot complete '${taskId}': evidenceRef must be a non-empty string`);
191
+ }
192
+ this.ledger.checkRevision(options.expectedRevision);
193
+ this.ledger.bump();
169
194
  const now = Date.now();
170
- this.nodes.set(taskId, { ...task, status: 'completed', completedAt: now, result });
195
+ this.nodes.set(taskId, { ...task, status: 'completed', completedAt: now, result, evidenceRef });
171
196
  this.emit({ type: 'task-completed', taskId, timestamp: now });
197
+ this.recordOnDependents(taskId, 'SATISFIED', ['UNRESOLVED', 'WAIVED'], evidenceRef);
172
198
  const unblockedIds = this.unblockDependents(taskId);
173
199
  if (unblockedIds.length > 0) {
174
200
  this.emit({ type: 'tasks-unblocked', unblockedTaskIds: unblockedIds, timestamp: Date.now() });
@@ -176,7 +202,8 @@ export class TaskDAG {
176
202
  return unblockedIds;
177
203
  }
178
204
  /**
179
- * Mark a task failed and cascade cancellation to dependents.
205
+ * Mark a task failed, record FAILED on its unresolved dependent edges,
206
+ * and cascade cancellation to dependents.
180
207
  * @throws Error if task not found or not in 'in_progress'/'ready'
181
208
  */
182
209
  fail(taskId, error) {
@@ -184,71 +211,88 @@ export class TaskDAG {
184
211
  if (task.status !== 'in_progress' && task.status !== 'ready') {
185
212
  throw new Error(`Cannot fail '${taskId}': status '${task.status}', expected 'in_progress' or 'ready'`);
186
213
  }
187
- const now = Date.now();
188
- this.nodes.set(taskId, { ...task, status: 'failed', completedAt: now, error });
189
- this.emit({ type: 'task-failed', taskId, timestamp: now });
190
- this.cascadeCancellation(taskId);
214
+ this.terminate(task, 'failed', error);
215
+ }
216
+ /**
217
+ * Cancel a non-terminal task, record CANCELLED on its unresolved
218
+ * dependent edges, and cascade cancellation to dependents.
219
+ * @throws Error if task not found or already terminal
220
+ */
221
+ cancel(taskId, reason) {
222
+ const task = this.requireTask(taskId);
223
+ if (TERMINAL.has(task.status)) {
224
+ throw new Error(`Cannot cancel '${taskId}': status '${task.status}' is terminal`);
225
+ }
226
+ this.terminate(task, 'cancelled', reason);
227
+ }
228
+ /**
229
+ * Explicitly waive one prerequisite edge. This is the only way a
230
+ * dependent becomes ready without a SATISFIED receipt. The original edge
231
+ * is kept and a WAIVED receipt carries actor, reason, authority and time.
232
+ * @returns The WAIVED receipt
233
+ * @throws PrerequisiteWaiverError on invalid input, unknown edge,
234
+ * already-resolved edge, terminal dependent, or policy rejection
235
+ * @throws GraphRevisionConflictError if expectedRevision is stale
236
+ */
237
+ waivePrerequisite(input) {
238
+ const req = validateWaiverInput(input);
239
+ const task = this.nodes.get(req.taskId);
240
+ const baseRevision = this.ledger.graphRevision;
241
+ authorizeWaiver(this.ledger, this.waiverPolicy, req, task, this.forwardEdges.get(req.taskId));
242
+ // A policy that mutated the graph invalidates the decision it just made
243
+ this.ledger.checkRevision(baseRevision);
244
+ const revision = this.ledger.bump();
245
+ const receipt = this.ledger.record(req.taskId, req.prerequisiteId, 'WAIVED', {
246
+ waiver: {
247
+ actor: req.actor,
248
+ reason: req.reason,
249
+ ...(req.authorityRef !== undefined ? { authorityRef: req.authorityRef } : {}),
250
+ issuedAt: new Date().toISOString(),
251
+ },
252
+ });
253
+ const { taskId, prerequisiteId } = req;
254
+ this.emit({ type: 'prerequisite-waived', taskId, prerequisiteId, graphRevision: revision, timestamp: Date.now() });
255
+ // Re-read: an event handler may have changed the task (e.g. cancelled it)
256
+ const latest = this.nodes.get(taskId);
257
+ if ((latest?.status === 'blocked' || latest?.status === 'pending') && this.computeStatus(taskId) === 'ready') {
258
+ this.setStatus(taskId, 'ready');
259
+ this.emit({ type: 'tasks-unblocked', unblockedTaskIds: [taskId], timestamp: Date.now() });
260
+ }
261
+ return receipt;
262
+ }
263
+ /** Current disposition of every prerequisite edge of a task. */
264
+ getPrerequisiteDispositions(taskId) {
265
+ return this.ledger.edgesOf(taskId, this.forwardEdges.get(taskId) ?? []);
266
+ }
267
+ /** Prerequisite edges that currently prevent a task from being ready. */
268
+ getBlockers(taskId) {
269
+ return this.getPrerequisiteDispositions(taskId).filter((e) => e.disposition !== 'SATISFIED' && e.disposition !== 'WAIVED');
270
+ }
271
+ /** Append-only receipt log, optionally filtered by dependent or prerequisite. */
272
+ getReceipts(filter) {
273
+ return this.ledger.receipts(filter);
274
+ }
275
+ /** Tombstones for tasks removed from the graph. */
276
+ getRemovedTasks() {
277
+ return this.ledger.removedTasks();
278
+ }
279
+ /** Obligation accounting against the original task denominator. */
280
+ getObligationSummary() {
281
+ return this.ledger.summarize(this.nodes.values());
191
282
  }
192
283
  /**
193
284
  * Topological sort using Kahn's algorithm.
194
285
  * @throws Error if cycles exist
195
286
  */
196
287
  topologicalSort() {
197
- const inDegree = new Map();
198
- for (const nodeId of this.nodes.keys()) {
199
- let count = 0;
200
- const fwd = this.forwardEdges.get(nodeId);
201
- if (fwd) {
202
- for (const dep of fwd) {
203
- if (this.nodes.has(dep))
204
- count++;
205
- }
206
- }
207
- inDegree.set(nodeId, count);
208
- }
209
- const queue = [];
210
- for (const [id, deg] of inDegree) {
211
- if (deg === 0)
212
- queue.push(id);
213
- }
214
- const sorted = [];
215
- while (queue.length > 0) {
216
- const nodeId = queue.shift();
217
- const task = this.nodes.get(nodeId);
218
- if (task)
219
- sorted.push(task);
220
- const dependents = this.reverseEdges.get(nodeId);
221
- if (dependents) {
222
- for (const depId of dependents) {
223
- if (!this.nodes.has(depId))
224
- continue;
225
- const newDeg = (inDegree.get(depId) ?? 0) - 1;
226
- inDegree.set(depId, newDeg);
227
- if (newDeg === 0)
228
- queue.push(depId);
229
- }
230
- }
231
- }
232
- if (sorted.length !== this.nodes.size) {
233
- throw new Error(`Cycle detected: sorted ${sorted.length} of ${this.nodes.size} tasks`);
234
- }
235
- return sorted;
288
+ return topologicalSort(this.graphView());
236
289
  }
237
290
  /**
238
291
  * Detect cycles using DFS with white/gray/black coloring.
239
292
  * @returns Array of cycles, or null if acyclic
240
293
  */
241
294
  detectCycles() {
242
- const color = new Map();
243
- const parent = new Map();
244
- const cycles = [];
245
- for (const id of this.nodes.keys())
246
- color.set(id, NodeColor.White);
247
- for (const id of this.nodes.keys()) {
248
- if (color.get(id) === NodeColor.White) {
249
- this.dfsCycles(id, color, parent, cycles);
250
- }
251
- }
295
+ const cycles = findCycles(this.graphView());
252
296
  if (cycles.length === 0)
253
297
  return null;
254
298
  this.emit({ type: 'cycle-detected', cycleNodes: cycles.flat(), timestamp: Date.now() });
@@ -259,98 +303,29 @@ export class TaskDAG {
259
303
  * @returns Tasks on the critical path in execution order
260
304
  */
261
305
  getCriticalPath() {
262
- if (this.nodes.size === 0)
263
- return [];
264
- let sorted;
265
- try {
266
- sorted = this.topologicalSort();
267
- }
268
- catch {
269
- return [];
270
- }
271
- const dist = new Map();
272
- const pred = new Map();
273
- for (const t of sorted) {
274
- dist.set(t.id, 1);
275
- pred.set(t.id, null);
276
- }
277
- for (const task of sorted) {
278
- const d = dist.get(task.id);
279
- const deps = this.reverseEdges.get(task.id);
280
- if (deps) {
281
- for (const depId of deps) {
282
- if (!this.nodes.has(depId))
283
- continue;
284
- if (d + 1 > (dist.get(depId) ?? 1)) {
285
- dist.set(depId, d + 1);
286
- pred.set(depId, task.id);
287
- }
288
- }
289
- }
290
- }
291
- let maxDist = 0;
292
- let endNode = null;
293
- for (const [id, d] of dist) {
294
- if (d > maxDist) {
295
- maxDist = d;
296
- endNode = id;
297
- }
298
- }
299
- if (!endNode)
300
- return [];
301
- const path = [];
302
- let cur = endNode;
303
- while (cur !== null) {
304
- const t = this.nodes.get(cur);
305
- if (t)
306
- path.unshift(t);
307
- cur = pred.get(cur) ?? null;
308
- }
309
- return path;
306
+ return criticalPath(this.graphView());
310
307
  }
311
308
  /** Get aggregate statistics about the DAG. */
312
309
  getStats() {
313
- let pending = 0, ready = 0, inProgress = 0, completed = 0;
314
- let failed = 0, blocked = 0, cancelled = 0;
315
- for (const task of this.nodes.values()) {
316
- switch (task.status) {
317
- case 'pending':
318
- pending++;
319
- break;
320
- case 'ready':
321
- ready++;
322
- break;
323
- case 'in_progress':
324
- inProgress++;
325
- break;
326
- case 'completed':
327
- completed++;
328
- break;
329
- case 'failed':
330
- failed++;
331
- break;
332
- case 'blocked':
333
- blocked++;
334
- break;
335
- case 'cancelled':
336
- cancelled++;
337
- break;
338
- }
339
- }
340
310
  return {
341
311
  totalTasks: this.nodes.size,
342
- pending, ready, inProgress, completed, failed, blocked, cancelled,
312
+ ...countStatuses(this.nodes.values()),
343
313
  longestPath: this.getCriticalPath().length,
344
314
  hasCycles: this.detectCycles() !== null,
345
315
  };
346
316
  }
347
- /** Remove all tasks from the DAG. */
317
+ /**
318
+ * Remove all tasks, receipts and tombstones from the DAG. The graph
319
+ * revision keeps increasing so stale expectedRevision guards still fail.
320
+ */
348
321
  clear() {
322
+ this.ledger.bump();
349
323
  this.nodes.clear();
350
324
  this.forwardEdges.clear();
351
325
  this.reverseEdges.clear();
326
+ this.ledger.reset();
352
327
  }
353
- /** Serialize the DAG for debugging. */
328
+ /** Serialize the DAG, its receipt log and tombstones. */
354
329
  toJSON() {
355
330
  const tasks = Array.from(this.nodes.values());
356
331
  const edges = [];
@@ -358,7 +333,15 @@ export class TaskDAG {
358
333
  for (const depId of deps)
359
334
  edges.push({ from: depId, to: taskId });
360
335
  }
361
- return { tasks, edges, stats: this.getStats() };
336
+ return {
337
+ graphId: this.graphId,
338
+ graphRevision: this.graphRevision,
339
+ tasks,
340
+ edges,
341
+ receipts: this.ledger.receipts(),
342
+ removedTasks: this.ledger.removedTasks(),
343
+ stats: this.getStats(),
344
+ };
362
345
  }
363
346
  /**
364
347
  * Register a handler to receive DAG events.
@@ -373,21 +356,20 @@ export class TaskDAG {
373
356
  };
374
357
  }
375
358
  // --- Internal helpers ---
359
+ graphView() {
360
+ return { nodes: this.nodes, forwardEdges: this.forwardEdges, reverseEdges: this.reverseEdges };
361
+ }
376
362
  requireTask(taskId) {
377
363
  const task = this.nodes.get(taskId);
378
364
  if (!task)
379
365
  throw new Error(`Task '${taskId}' not found in the DAG`);
380
366
  return task;
381
367
  }
382
- computeStatus(blockerIds) {
383
- if (blockerIds.length === 0)
368
+ computeStatus(taskId) {
369
+ const blockers = this.forwardEdges.get(taskId);
370
+ if (!blockers || blockers.size === 0)
384
371
  return 'ready';
385
- for (const id of blockerIds) {
386
- const b = this.nodes.get(id);
387
- if (!b || b.status !== 'completed')
388
- return 'blocked';
389
- }
390
- return 'ready';
372
+ return this.ledger.allResolved(taskId, blockers) ? 'ready' : 'blocked';
391
373
  }
392
374
  setStatus(taskId, status) {
393
375
  const task = this.nodes.get(taskId);
@@ -398,91 +380,55 @@ export class TaskDAG {
398
380
  this.emit({ type: 'task-ready', taskId, timestamp: Date.now() });
399
381
  }
400
382
  }
383
+ /** Commit a failed/cancelled outcome and propagate it to dependent edges. */
384
+ terminate(task, status, error) {
385
+ this.ledger.bump();
386
+ const now = Date.now();
387
+ this.nodes.set(task.id, { ...task, status, completedAt: now, error });
388
+ this.emit({ type: status === 'failed' ? 'task-failed' : 'task-cancelled', taskId: task.id, timestamp: now });
389
+ this.recordOnDependents(task.id, status === 'failed' ? 'FAILED' : 'CANCELLED', ['UNRESOLVED']);
390
+ this.cascadeCancellation(task.id, status);
391
+ }
392
+ /** Record a disposition on every live dependent edge currently in `from`. */
393
+ recordOnDependents(prerequisiteId, disposition, from, completionEvidenceRef) {
394
+ for (const depId of this.reverseEdges.get(prerequisiteId) ?? []) {
395
+ if (!this.nodes.has(depId))
396
+ continue;
397
+ const current = this.ledger.disposition(depId, prerequisiteId);
398
+ if (current && from.includes(current)) {
399
+ this.ledger.record(depId, prerequisiteId, disposition, { completionEvidenceRef });
400
+ }
401
+ }
402
+ }
401
403
  unblockDependents(completedId) {
402
404
  const unblockedIds = [];
403
- const deps = this.reverseEdges.get(completedId);
404
- if (!deps)
405
- return unblockedIds;
406
- for (const depId of deps) {
405
+ for (const depId of this.reverseEdges.get(completedId) ?? []) {
407
406
  const dep = this.nodes.get(depId);
408
407
  if (!dep || dep.status !== 'blocked')
409
408
  continue;
410
- const fwd = this.forwardEdges.get(depId);
411
- if (!fwd)
412
- continue;
413
- let allDone = true;
414
- for (const bId of fwd) {
415
- const b = this.nodes.get(bId);
416
- if (!b || b.status !== 'completed') {
417
- allDone = false;
418
- break;
419
- }
420
- }
421
- if (allDone) {
409
+ if (this.computeStatus(depId) === 'ready') {
422
410
  this.setStatus(depId, 'ready');
423
411
  unblockedIds.push(depId);
424
412
  }
425
413
  }
426
414
  return unblockedIds;
427
415
  }
428
- cascadeCancellation(failedId) {
429
- const deps = this.reverseEdges.get(failedId);
430
- if (!deps)
431
- return;
432
- for (const depId of deps) {
416
+ cascadeCancellation(sourceId, outcome) {
417
+ for (const depId of this.reverseEdges.get(sourceId) ?? []) {
433
418
  const dep = this.nodes.get(depId);
434
- if (!dep || dep.status === 'completed' || dep.status === 'failed' || dep.status === 'cancelled') {
419
+ if (!dep || TERMINAL.has(dep.status))
435
420
  continue;
436
- }
437
- const fwd = this.forwardEdges.get(depId);
438
- if (!fwd)
421
+ if (!this.ledger.hasAny(depId, ['FAILED', 'CANCELLED']))
439
422
  continue;
440
- let unsatisfiable = false;
441
- for (const bId of fwd) {
442
- const b = this.nodes.get(bId);
443
- if (b && (b.status === 'failed' || b.status === 'cancelled')) {
444
- unsatisfiable = true;
445
- break;
446
- }
447
- }
448
- if (unsatisfiable) {
449
- this.nodes.set(depId, {
450
- ...dep,
451
- status: 'cancelled',
452
- completedAt: Date.now(),
453
- error: `Cancelled: upstream task '${failedId}' failed`,
454
- });
455
- this.cascadeCancellation(depId);
456
- }
457
- }
458
- }
459
- dfsCycles(nodeId, color, parent, cycles) {
460
- color.set(nodeId, NodeColor.Gray);
461
- const dependencies = this.forwardEdges.get(nodeId);
462
- if (dependencies) {
463
- for (const depId of dependencies) {
464
- if (!this.nodes.has(depId))
465
- continue;
466
- const c = color.get(depId);
467
- if (c === NodeColor.White) {
468
- parent.set(depId, nodeId);
469
- this.dfsCycles(depId, color, parent, cycles);
470
- }
471
- else if (c === NodeColor.Gray) {
472
- const cycle = [depId, nodeId];
473
- let cur = nodeId;
474
- while (cur !== depId) {
475
- const p = parent.get(cur);
476
- if (p === null || p === undefined || p === depId)
477
- break;
478
- cycle.push(p);
479
- cur = p;
480
- }
481
- cycles.push(cycle);
482
- }
483
- }
423
+ this.nodes.set(depId, {
424
+ ...dep,
425
+ status: 'cancelled',
426
+ completedAt: Date.now(),
427
+ error: `Cancelled: upstream task '${sourceId}' ${outcome}`,
428
+ });
429
+ this.recordOnDependents(depId, 'CANCELLED', ['UNRESOLVED']);
430
+ this.cascadeCancellation(depId, 'cancelled');
484
431
  }
485
- color.set(nodeId, NodeColor.Black);
486
432
  }
487
433
  emit(event) {
488
434
  for (const handler of this.eventHandlers) {
@@ -28,21 +28,29 @@
28
28
  * const unblocked = scheduler.onTaskComplete('build'); // test may now be ready
29
29
  *
30
30
  * // Check progress
31
- * const progress = scheduler.getProgress(); // { completed: 1, total: 4, percentage: 25 }
31
+ * const progress = scheduler.getProgress(); // { completed: 1, total: 4, percentage: 25, ... }
32
+ *
33
+ * // Prerequisites are never resolved by deletion (issue #1069): removing
34
+ * // unfinished work leaves dependents blocked with a REMOVED receipt.
35
+ * // An explicit, attributed waiver is the only bypass.
36
+ * dag.waivePrerequisite({ taskId: 'deploy', prerequisiteId: 'lint', actor: 'release-lead', reason: 'lint gate retired' });
32
37
  * ```
33
38
  */
34
- export type { DAGTaskStatus, DAGTask, AddTaskInput, DAGStats, DAGEventType, DAGEvent, DAGSchedulerConfig, DAGEventHandler, } from './types.js';
39
+ export type { DAGTaskStatus, DAGTask, AddTaskInput, DAGStats, DAGEventType, DAGEvent, DAGSchedulerConfig, DAGEventHandler, PrerequisiteDisposition, PrerequisiteWaiver, PrerequisiteReceiptV1, PrerequisiteEdgeState, WaivePrerequisiteInput, WaiverRequest, WaiverPolicy, TaskDAGOptions, CompleteTaskOptions, RemoveTaskOptions, RemovedTaskRecord, ObligationSummary, DAGProgress, } from './types.js';
40
+ export { PREREQUISITE_RECEIPT_SCHEMA } from './types.js';
35
41
  export { TaskDAG } from './dag.js';
36
42
  export { DAGScheduler } from './scheduler.js';
43
+ export { GraphRevisionConflictError, PrerequisiteWaiverError, validateWaiverInput, } from './prerequisite-ledger.js';
37
44
  import { TaskDAG } from './dag.js';
38
45
  import { DAGScheduler } from './scheduler.js';
39
- import type { DAGSchedulerConfig } from './types.js';
46
+ import type { DAGSchedulerConfig, TaskDAGOptions } from './types.js';
40
47
  /**
41
48
  * Create a new empty TaskDAG instance.
42
49
  *
50
+ * @param options - Optional graph identity and waiver policy
43
51
  * @returns A fresh TaskDAG with no tasks
44
52
  */
45
- export declare function createTaskDAG(): TaskDAG;
53
+ export declare function createTaskDAG(options?: TaskDAGOptions): TaskDAG;
46
54
  /**
47
55
  * Create a new DAGScheduler wrapping a TaskDAG.
48
56
  *