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,8 +5,8 @@
5
5
  import { v4 as uuidv4 } from 'uuid';
6
6
  import { ok, err } from '../../../shared/types/index.js';
7
7
  import { toError } from '../../../shared/error-utils.js';
8
- import { secureRandom } from '../../../shared/utils/crypto-random.js';
9
8
  import { rehydrateDates } from '../../../shared/utils/kv-date-rehydrate.js';
9
+ import { partitionByRewardSource } from '../reward-source.js';
10
10
  const DEFAULT_CONFIG = {
11
11
  defaultConfidenceLevel: 0.95,
12
12
  minSamplesForOptimization: 20,
@@ -14,6 +14,12 @@ const DEFAULT_CONFIG = {
14
14
  improvementThreshold: 0.05,
15
15
  explorationRate: 0.1,
16
16
  };
17
+ /** Namespace every optimizer record is written under. */
18
+ const LEARNING_NS = { namespace: 'learning-optimization' };
19
+ /** Share of the most recent experiences held out from fitting (#1099). */
20
+ const HELD_OUT_FRACTION = 0.2;
21
+ /** Relative tolerance within which an observed outcome matches the prediction. */
22
+ const VALIDATION_TOLERANCE = 0.2;
17
23
  /**
18
24
  * SEC-003: Dangerous keys that could lead to prototype pollution
19
25
  */
@@ -41,29 +47,54 @@ export class MetricsOptimizerService {
41
47
  /**
42
48
  * Optimize a strategy for a given objective
43
49
  */
44
- async optimizeStrategy(currentStrategy, objective, experiences) {
50
+ async optimizeStrategy(currentStrategy, objective, input) {
45
51
  try {
52
+ // #1109: fit and validate on measured outcomes only.
53
+ const { measured: experiences, assignedExcluded } = partitionByRewardSource(input);
46
54
  if (experiences.length < this.config.minSamplesForOptimization) {
47
- return err(new Error(`Need at least ${this.config.minSamplesForOptimization} experiences for optimization`));
55
+ const excluded = assignedExcluded > 0
56
+ ? ` (${assignedExcluded} with an assigned reward excluded)`
57
+ : '';
58
+ return err(new Error(`Need at least ${this.config.minSamplesForOptimization} measured experiences for optimization${excluded}`));
48
59
  }
49
- // Calculate current performance
50
- const currentPerformance = this.evaluateStrategyPerformance(currentStrategy, experiences, objective);
60
+ // #1099: fit on the older experiences and validate on the most recent
61
+ // ones, which the fit never saw, so confidence is a held-out measurement
62
+ // rather than a score on the data the optimizer was fitted to.
63
+ const ordered = [...experiences].sort((a, b) => timeOf(a) - timeOf(b));
64
+ const heldOutSize = Math.max(1, Math.floor(ordered.length * HELD_OUT_FRACTION));
65
+ const training = ordered.slice(0, -heldOutSize);
66
+ const heldOut = ordered.slice(-heldOutSize);
51
67
  // Generate optimized parameters
52
- const optimizedParameters = await this.optimizeParameters(currentStrategy.parameters, experiences, objective);
68
+ const optimizedParameters = await this.optimizeParameters(currentStrategy.parameters, training, objective);
53
69
  // Create optimized strategy
54
70
  const optimizedStrategy = {
55
71
  name: `${currentStrategy.name}-optimized`,
56
72
  parameters: optimizedParameters,
57
- expectedOutcome: this.predictOutcome(optimizedParameters, experiences),
73
+ expectedOutcome: this.predictOutcome(optimizedParameters, training),
74
+ };
75
+ // Validate the fitted expectation against the held-out experiences
76
+ const validationResults = await this.validateOptimization(currentStrategy, optimizedStrategy, heldOut);
77
+ // The optimized strategy has never run, so its improvement cannot be
78
+ // observed. It is modelled as the change in parameter score between the
79
+ // two strategies on the held-out experiences, and labelled an estimate.
80
+ const improvement = this.calculateImprovement(this.scoreParameters(currentStrategy.parameters, heldOut, objective), this.scoreParameters(optimizedParameters, heldOut, objective), objective);
81
+ // Confidence is the share of held-out experiences whose observed
82
+ // outcome matched the fitted expectation.
83
+ const confidence = validationResults.length > 0
84
+ ? validationResults.filter((r) => r.passed).length / validationResults.length
85
+ : 0;
86
+ const unmeasured = [];
87
+ if (improvement === undefined)
88
+ unmeasured.push('improvement');
89
+ if (validationResults.length === 0)
90
+ unmeasured.push('confidence');
91
+ const evaluation = {
92
+ method: 'held-out',
93
+ trainingSamples: training.length,
94
+ heldOutSamples: heldOut.length,
95
+ estimated: improvement === undefined ? [] : ['improvement'],
96
+ ...(unmeasured.length > 0 ? { unmeasured } : {}),
58
97
  };
59
- // Validate optimization
60
- const validationResults = await this.validateOptimization(currentStrategy, optimizedStrategy, experiences.slice(-10) // Use recent experiences for validation
61
- );
62
- // Calculate improvement
63
- const optimizedPerformance = this.evaluateStrategyPerformance(optimizedStrategy, experiences, objective);
64
- const improvement = this.calculateImprovement(currentPerformance, optimizedPerformance, objective);
65
- // Calculate confidence
66
- const confidence = this.calculateOptimizationConfidence(experiences.length, improvement, validationResults);
67
98
  const domain = this.inferDomainFromExperiences(experiences);
68
99
  const result = {
69
100
  id: uuidv4(),
@@ -71,9 +102,10 @@ export class MetricsOptimizerService {
71
102
  objective,
72
103
  currentStrategy,
73
104
  optimizedStrategy,
74
- improvement,
105
+ improvement: improvement ?? 0,
75
106
  confidence,
76
107
  validationResults,
108
+ evaluation,
77
109
  };
78
110
  // Store optimization result
79
111
  await this.storeOptimizationResult(result);
@@ -88,9 +120,24 @@ export class MetricsOptimizerService {
88
120
  */
89
121
  async runABTest(strategyA, strategyB, testConfig) {
90
122
  try {
91
- // Simulate or retrieve test results
92
- const metricsA = await this.collectStrategyMetrics(strategyA, testConfig.metric, testConfig.minSamples);
93
- const metricsB = await this.collectStrategyMetrics(strategyB, testConfig.metric, testConfig.minSamples);
123
+ // Recorded observations only (#1099): never pad with simulated samples.
124
+ const metricsA = await this.collectStrategyMetrics(strategyA, testConfig.metric);
125
+ const metricsB = await this.collectStrategyMetrics(strategyB, testConfig.metric);
126
+ // An arm with no recorded sample is never evidence, whatever minSamples says.
127
+ const minSamples = Math.max(1, testConfig.minSamples);
128
+ if (metricsA.length < minSamples || metricsB.length < minSamples) {
129
+ const insufficient = {
130
+ winner: 'inconclusive',
131
+ evidenceStatus: 'insufficient-evidence',
132
+ unmeasured: [testConfig.metric, 'stdDev', 'pValue'],
133
+ strategyAMetrics: { samples: metricsA.length },
134
+ strategyBMetrics: { samples: metricsB.length },
135
+ sampleSizeA: metricsA.length,
136
+ sampleSizeB: metricsB.length,
137
+ };
138
+ await this.storeABTestResult(strategyA, strategyB, insufficient);
139
+ return ok(insufficient);
140
+ }
94
141
  // Calculate statistics
95
142
  const meanA = this.calculateMean(metricsA);
96
143
  const meanB = this.calculateMean(metricsB);
@@ -100,7 +147,7 @@ export class MetricsOptimizerService {
100
147
  const pValue = this.calculatePValue(metricsA, metricsB);
101
148
  // Determine winner
102
149
  let winner;
103
- if (pValue < 1 - testConfig.confidenceLevel) {
150
+ if (pValue !== undefined && pValue < 1 - testConfig.confidenceLevel) {
104
151
  winner = meanA > meanB ? 'A' : 'B';
105
152
  }
106
153
  else {
@@ -118,7 +165,10 @@ export class MetricsOptimizerService {
118
165
  stdDev: stdB,
119
166
  samples: metricsB.length,
120
167
  },
121
- pValue,
168
+ // Neither arm varied, so the t statistic is undefined (#1099).
169
+ ...(pValue === undefined
170
+ ? { unmeasured: ['pValue'], pValueUnavailableReason: 'zero-variance' }
171
+ : { pValue }),
122
172
  sampleSizeA: metricsA.length,
123
173
  sampleSizeB: metricsB.length,
124
174
  };
@@ -154,7 +204,8 @@ export class MetricsOptimizerService {
154
204
  return ok({
155
205
  name: 'default-strategy',
156
206
  parameters: this.getDefaultParameters(context),
157
- expectedOutcome: { success_rate: 0.7 },
207
+ // #1099: nothing was measured for the default, so expect nothing.
208
+ expectedOutcome: {},
158
209
  });
159
210
  }
160
211
  // Sort by score and return best
@@ -168,8 +219,21 @@ export class MetricsOptimizerService {
168
219
  /**
169
220
  * Evaluate strategy performance
170
221
  */
171
- async evaluateStrategy(strategy, experiences) {
222
+ async evaluateStrategy(strategy, input) {
172
223
  try {
224
+ // #1109: an assigned reward says nothing about how the strategy performed.
225
+ const { measured: experiences, assignedExcluded } = partitionByRewardSource(input);
226
+ if (experiences.length === 0) {
227
+ return ok({
228
+ strategy,
229
+ metrics: {},
230
+ strengths: [],
231
+ weaknesses: [],
232
+ improvementAreas: [],
233
+ evidenceStatus: 'insufficient-evidence',
234
+ ...(assignedExcluded > 0 ? { assignedRewardsExcluded: assignedExcluded } : {}),
235
+ });
236
+ }
173
237
  // Calculate metrics
174
238
  const metrics = {};
175
239
  const successRate = this.calculateSuccessRate(experiences);
@@ -250,12 +314,12 @@ export class MetricsOptimizerService {
250
314
  */
251
315
  async getMetricsHistory(strategyId, limit = 100) {
252
316
  try {
253
- const keys = await this.memory.search(`learning:metrics:history:${strategyId}:*`, limit);
317
+ const keys = await this.searchLearningKeys(`learning:metrics:history:${strategyId}:*`, limit);
254
318
  const snapshots = [];
255
319
  for (const key of keys) {
256
320
  // #493: rehydrate `timestamp` at the kv-read seam — without this,
257
321
  // the sort below throws once any snapshot exists in the kv.
258
- const snapshot = rehydrateDates(await this.memory.get(key), ['timestamp']);
322
+ const snapshot = rehydrateDates(await this.memory.get(key, LEARNING_NS), ['timestamp']);
259
323
  if (snapshot) {
260
324
  snapshots.push(snapshot);
261
325
  }
@@ -295,15 +359,14 @@ export class MetricsOptimizerService {
295
359
  // ============================================================================
296
360
  // Private Helper Methods
297
361
  // ============================================================================
298
- evaluateStrategyPerformance(_strategy, experiences, objective) {
299
- let totalScore = 0;
300
- let count = 0;
301
- for (const exp of experiences) {
302
- const metricValue = exp.result.outcome[objective.metric] ?? 0;
303
- totalScore += metricValue;
304
- count++;
305
- }
306
- return count > 0 ? totalScore / count : 0;
362
+ /**
363
+ * Keys matching `pattern` under LEARNING_NS, ready for a namespaced get().
364
+ * In-memory search includes its namespace; SQLite returns a bare key.
365
+ */
366
+ async searchLearningKeys(pattern, limit) {
367
+ const prefix = `${LEARNING_NS.namespace}:`;
368
+ const found = await this.memory.search(pattern, limit, LEARNING_NS);
369
+ return found.map((key) => (key.startsWith(prefix) ? key.slice(prefix.length) : key));
307
370
  }
308
371
  async optimizeParameters(currentParams, experiences, objective) {
309
372
  const optimized = { ...currentParams };
@@ -391,11 +454,18 @@ export class MetricsOptimizerService {
391
454
  }
392
455
  async validateOptimization(_current, optimized, validationExperiences) {
393
456
  const results = [];
457
+ // Nothing was predicted, so there is nothing to validate.
458
+ const expected = Object.entries(optimized.expectedOutcome);
459
+ if (expected.length === 0)
460
+ return results;
394
461
  for (const exp of validationExperiences) {
395
- const expected = optimized.expectedOutcome;
396
- const passed = Object.entries(expected).every(([key, value]) => {
397
- const actual = exp.result.outcome[key] ?? 0;
398
- return Math.abs(actual - value) / Math.max(value, 1) < 0.2;
462
+ // A metric the experience did not record is not evidence either way.
463
+ const comparable = expected.filter(([key]) => typeof exp.result.outcome[key] === 'number');
464
+ if (comparable.length === 0)
465
+ continue;
466
+ const passed = comparable.every(([key, value]) => {
467
+ const actual = exp.result.outcome[key];
468
+ return Math.abs(actual - value) / Math.max(value, 1) < VALIDATION_TOLERANCE;
399
469
  });
400
470
  results.push({
401
471
  testId: exp.id,
@@ -405,23 +475,14 @@ export class MetricsOptimizerService {
405
475
  }
406
476
  return results;
407
477
  }
478
+ /** Relative change; undefined when there is no baseline to compare with. */
408
479
  calculateImprovement(currentPerf, optimizedPerf, objective) {
409
480
  if (currentPerf === 0)
410
- return optimizedPerf > 0 ? 1 : 0;
481
+ return undefined;
411
482
  const diff = optimizedPerf - currentPerf;
412
483
  const improvement = objective.direction === 'maximize' ? diff / currentPerf : -diff / currentPerf;
413
484
  return Math.max(-1, Math.min(1, improvement));
414
485
  }
415
- calculateOptimizationConfidence(sampleSize, improvement, validationResults) {
416
- // Base confidence from sample size
417
- const sampleConfidence = Math.min(1, sampleSize / (this.config.minSamplesForOptimization * 2));
418
- // Validation pass rate
419
- const passRate = validationResults.filter((r) => r.passed).length /
420
- Math.max(validationResults.length, 1);
421
- // Improvement significance
422
- const improvementConfidence = Math.abs(improvement) > this.config.improvementThreshold ? 1 : 0.5;
423
- return sampleConfidence * 0.3 + passRate * 0.5 + improvementConfidence * 0.2;
424
- }
425
486
  inferDomainFromExperiences(experiences) {
426
487
  const domainCounts = new Map();
427
488
  for (const exp of experiences) {
@@ -437,22 +498,21 @@ export class MetricsOptimizerService {
437
498
  }
438
499
  return maxDomain;
439
500
  }
440
- async collectStrategyMetrics(strategy, metric, minSamples) {
441
- const keys = await this.memory.search(`learning:metrics:history:*:*`, minSamples * 2);
501
+ /**
502
+ * Values of `metric` recorded for this strategy through trackMetrics(),
503
+ * whose strategy id is the strategy name. Only recorded observations are
504
+ * returned; the caller decides whether there are enough (#1099).
505
+ */
506
+ async collectStrategyMetrics(strategy, metric) {
507
+ const keys = await this.searchLearningKeys(`learning:metrics:history:${strategy.name}:*`, 1000);
442
508
  const metrics = [];
443
509
  for (const key of keys) {
444
- const snapshot = await this.memory.get(key);
445
- if (snapshot &&
446
- snapshot.metrics[metric] !== undefined) {
447
- metrics.push(snapshot.metrics[metric]);
510
+ const snapshot = await this.memory.get(key, LEARNING_NS);
511
+ const value = snapshot?.metrics[metric];
512
+ if (typeof value === 'number' && Number.isFinite(value)) {
513
+ metrics.push(value);
448
514
  }
449
515
  }
450
- // If not enough real data, generate simulated data
451
- while (metrics.length < minSamples) {
452
- const expected = strategy.expectedOutcome[metric] || 0.5;
453
- const variation = (secureRandom() - 0.5) * 0.2;
454
- metrics.push(expected + variation);
455
- }
456
516
  return metrics;
457
517
  }
458
518
  calculateMean(values) {
@@ -467,6 +527,7 @@ export class MetricsOptimizerService {
467
527
  const squaredDiffs = values.map((v) => Math.pow(v - mean, 2));
468
528
  return Math.sqrt(squaredDiffs.reduce((a, b) => a + b, 0) / values.length);
469
529
  }
530
+ /** Undefined when neither group varies: the test statistic is undefined. */
470
531
  calculatePValue(groupA, groupB) {
471
532
  // Simplified p-value calculation using Welch's t-test approximation
472
533
  const meanA = this.calculateMean(groupA);
@@ -477,7 +538,7 @@ export class MetricsOptimizerService {
477
538
  const nB = groupB.length;
478
539
  const se = Math.sqrt(varA / nA + varB / nB);
479
540
  if (se === 0)
480
- return 0.5;
541
+ return undefined;
481
542
  const t = Math.abs(meanA - meanB) / se;
482
543
  // Approximate p-value using normal distribution
483
544
  const pValue = 2 * (1 - this.normalCDF(t));
@@ -590,7 +651,7 @@ export class MetricsOptimizerService {
590
651
  }
591
652
  async updateAggregatedMetrics(strategyId, metrics) {
592
653
  const key = `learning:metrics:aggregated:${strategyId}`;
593
- const existing = await this.memory.get(key);
654
+ const existing = await this.memory.get(key, LEARNING_NS);
594
655
  const aggregated = existing?.metrics || {};
595
656
  for (const [metricName, value] of Object.entries(metrics)) {
596
657
  // SEC-003: Guard against prototype pollution
@@ -627,4 +688,9 @@ export class MetricsOptimizerService {
627
688
  }, { namespace: 'learning-optimization', ttl: 86400 * 7 });
628
689
  }
629
690
  }
691
+ /** Epoch milliseconds of an experience; kv reads may hand back an ISO string. */
692
+ function timeOf(experience) {
693
+ const ms = new Date(experience.timestamp).getTime();
694
+ return Number.isNaN(ms) ? 0 : ms;
695
+ }
630
696
  //# sourceMappingURL=metrics-optimizer.js.map
@@ -6,6 +6,8 @@ import { v4 as uuidv4 } from 'uuid';
6
6
  import { ok, err, ALL_DOMAINS } from '../../../shared/types/index.js';
7
7
  import { toError } from '../../../shared/error-utils.js';
8
8
  import { rehydrateDates } from '../../../shared/utils/kv-date-rehydrate.js';
9
+ import { searchAllKeys } from '../../../shared/utils/namespaced-search.js';
10
+ import { LEARNING_NS } from '../active-patterns.js';
9
11
  const DEFAULT_CONFIG = {
10
12
  maxKnowledgeItems: 1000,
11
13
  relevanceThreshold: 0.5,
@@ -56,32 +58,35 @@ export class TransferSpecialistService {
56
58
  async queryKnowledge(query) {
57
59
  try {
58
60
  const results = [];
59
- // Search by domain if specified
60
- let keys;
61
- if (query.domain) {
62
- keys = await this.memory.search(`learning:knowledge:*:${query.domain}:*`, query.limit || 100);
63
- }
64
- else {
65
- keys = await this.memory.search('learning:knowledge:shared:*', query.limit || 100);
66
- }
61
+ // Secondary domain/type indexes store IDs, not Knowledge objects, and
62
+ // shareKnowledge() need not create them. Read canonical shared records
63
+ // from the same namespace as both writers, then filter and rank before
64
+ // applying the caller's result limit. #1071: every key is read (the
65
+ // config value only sizes the first scan request), so the domain filter
66
+ // sees every item instead of an arbitrary first page.
67
+ const keys = await searchAllKeys(this.memory, 'learning:knowledge:shared:*', {
68
+ retrieve: LEARNING_NS,
69
+ pageSize: this.config.maxKnowledgeItems,
70
+ });
67
71
  for (const key of keys) {
68
72
  // #493: rehydrate Date fields at the kv-read seam. `createdAt` is
69
73
  // consumed by validateRelevance().getTime() and `expiresAt` is
70
74
  // compared via `new Date() > knowledge.expiresAt` — both broken
71
75
  // when the field is a string after JSON round-trip.
72
- const knowledge = rehydrateDates(await this.memory.get(key), ['createdAt', 'expiresAt']);
76
+ const knowledge = rehydrateDates(await this.memory.get(key, { namespace: 'learning-optimization' }), ['createdAt', 'expiresAt']);
73
77
  if (knowledge && this.matchesQuery(knowledge, query)) {
74
78
  results.push(knowledge);
75
79
  }
76
80
  }
77
- // Sort by relevance score
78
- results.sort((a, b) => b.relevanceScore - a.relevanceScore);
81
+ // Sort by relevance score; equal scores fall back to id order so the
82
+ // caller's limit always keeps the same items (#1071).
83
+ results.sort((a, b) => b.relevanceScore - a.relevanceScore || (a.id < b.id ? -1 : a.id > b.id ? 1 : 0));
79
84
  // Apply semantic search if embedding provided
80
85
  if (query.embedding && query.embedding.length > 0) {
81
86
  const vectorResults = await this.memory.vectorSearch(query.embedding, query.limit || 10);
82
87
  for (const vr of vectorResults) {
83
88
  // #493: rehydrate Date fields at the kv-read seam.
84
- const knowledge = rehydrateDates(await this.memory.get(vr.key), ['createdAt', 'expiresAt']);
89
+ const knowledge = rehydrateDates(await this.memory.get(vr.key, { namespace: 'learning-optimization' }), ['createdAt', 'expiresAt']);
85
90
  if (knowledge &&
86
91
  !results.some((r) => r.id === knowledge.id) &&
87
92
  this.matchesQuery(knowledge, query)) {
@@ -253,7 +258,7 @@ export class TransferSpecialistService {
253
258
  */
254
259
  async getKnowledgeById(id) {
255
260
  // #493: rehydrate Date fields at the kv-read seam.
256
- const knowledge = rehydrateDates(await this.memory.get(`learning:knowledge:shared:${id}`), ['createdAt', 'expiresAt']);
261
+ const knowledge = rehydrateDates(await this.memory.get(`learning:knowledge:shared:${id}`, { namespace: 'learning-optimization' }), ['createdAt', 'expiresAt']);
257
262
  return knowledge || null;
258
263
  }
259
264
  /**
@@ -261,11 +266,16 @@ export class TransferSpecialistService {
261
266
  */
262
267
  async bulkTransfer(sourceProject, targetProject, filter) {
263
268
  try {
264
- const keys = await this.memory.search(`learning:knowledge:project:${sourceProject}:*`, 500);
269
+ // #1071: read project knowledge from the namespace it is written to
270
+ // below, every key, in key order. The scan is a glob (and
271
+ // case-insensitive on SQLite), so keep only this project's own
272
+ // `<prefix><id>` keys: `ALPHA` or `alpha:sub` must not leak into `alpha`.
273
+ const prefix = `learning:knowledge:project:${sourceProject}:`;
274
+ const keys = (await searchAllKeys(this.memory, `${prefix}*`, { retrieve: LEARNING_NS })).filter((key) => key.startsWith(prefix) && !key.slice(prefix.length).includes(':'));
265
275
  const results = [];
266
276
  for (const key of keys) {
267
277
  // #493: rehydrate Date fields at the kv-read seam.
268
- const knowledge = rehydrateDates(await this.memory.get(key), ['createdAt', 'expiresAt']);
278
+ const knowledge = rehydrateDates(await this.memory.get(key, LEARNING_NS), ['createdAt', 'expiresAt']);
269
279
  if (!knowledge)
270
280
  continue;
271
281
  // Apply filter
@@ -4,6 +4,8 @@
4
4
  */
5
5
  import { err } from '../../shared/types/index.js';
6
6
  import { BaseDomainPlugin } from '../domain-interface.js';
7
+ import { FilePath } from '../../shared/value-objects/index.js';
8
+ import { confineSastFiles, MAX_SAST_FILE_BYTES } from './sast-path-guard.js';
7
9
  import { SecurityComplianceCoordinator, } from './coordinator.js';
8
10
  import { SecurityScannerService, } from './services/security-scanner.js';
9
11
  import { SecurityAuditorService, } from './services/security-auditor.js';
@@ -97,11 +99,23 @@ export class SecurityCompliancePlugin extends BaseDomainPlugin {
97
99
  if (!this.securityScanner) {
98
100
  return err(new Error('Security scanner not initialized'));
99
101
  }
100
- const files = payload.files;
101
- if (!files || files.length === 0) {
102
+ const requested = payload.files;
103
+ if (!requested || requested.length === 0) {
102
104
  return err(new Error('Invalid sast-scan payload: missing files'));
103
105
  }
104
- return this.securityScanner.scanFiles(files);
106
+ // #1125: a payload that crossed a JSON boundary (task_submit,
107
+ // task_orchestrate, fleet run) carries plain path strings.
108
+ if (requested.some(f => typeof f === 'string' ? f.trim() === '' : !(f instanceof FilePath))) {
109
+ return err(new Error('Invalid sast-scan payload: files must be non-empty file paths'));
110
+ }
111
+ // Every file must be a regular file inside the project, within the
112
+ // size limit; otherwise nothing is read.
113
+ const { accepted, skipped } = await confineSastFiles(requested.map(f => typeof f === 'string' ? f : f.value));
114
+ if (skipped.length > 0) {
115
+ return err(new Error(`Invalid sast-scan payload: these files cannot be scanned: ${skipped.map(s => `${s.path} (${s.reason})`).join(', ')}. ` +
116
+ `Pass regular files inside the project, at most ${MAX_SAST_FILE_BYTES / (1024 * 1024)} MB each.`));
117
+ }
118
+ return this.securityScanner.scanFiles(accepted.map(f => FilePath.create(f)));
105
119
  }],
106
120
  ['dast-scan', async (payload) => {
107
121
  if (!this.securityScanner) {
@@ -0,0 +1,9 @@
1
+ import { type SkippedPayloadPath } from '../../shared/io/payload-path-guard.js';
2
+ /** Largest file the pattern scanner reads whole into memory. */
3
+ export declare const MAX_SAST_FILE_BYTES: number;
4
+ export interface ConfinedSastFiles {
5
+ accepted: string[];
6
+ skipped: SkippedPayloadPath[];
7
+ }
8
+ export declare function confineSastFiles(paths: readonly string[], projectRoot?: string): Promise<ConfinedSastFiles>;
9
+ //# sourceMappingURL=sast-path-guard.d.ts.map
@@ -0,0 +1,17 @@
1
+ /**
2
+ * #1125 review: decide which requested files the sast-scan task may read.
3
+ *
4
+ * The task reads every file it is given. Its payload can come from MCP
5
+ * task_submit, so the same rule as code indexing (#1096) applies: a file is
6
+ * scanned only when its realpath is a regular file inside the project root's
7
+ * realpath. A symlink out of the project, a device such as /dev/zero or a
8
+ * directory is refused by name, and so is a file over the size limit.
9
+ */
10
+ import { findProjectRoot } from '../../kernel/project-root.js';
11
+ import { confinePayloadPaths, MAX_PAYLOAD_FILE_BYTES, } from '../../shared/io/payload-path-guard.js';
12
+ /** Largest file the pattern scanner reads whole into memory. */
13
+ export const MAX_SAST_FILE_BYTES = MAX_PAYLOAD_FILE_BYTES;
14
+ export async function confineSastFiles(paths, projectRoot = findProjectRoot()) {
15
+ return confinePayloadPaths(paths, { projectRoot, maxBytes: MAX_SAST_FILE_BYTES });
16
+ }
17
+ //# sourceMappingURL=sast-path-guard.js.map
@@ -21,43 +21,38 @@ export async function testAuthorizationBypass(parsedUrl, authHeaders, crawledUrl
21
21
  for (const endpoint of protectedEndpoints) {
22
22
  if (crawledUrls >= maxDepth * 15)
23
23
  break;
24
- try {
25
- const testUrl = new URL(endpoint, parsedUrl.origin).toString();
26
- // Try with authentication
27
- const authResponse = await fetch(testUrl, {
24
+ const testUrl = new URL(endpoint, parsedUrl.origin).toString();
25
+ // Try with authentication
26
+ const authResponse = await fetch(testUrl, {
27
+ method: 'GET',
28
+ headers: { ...authHeaders },
29
+ signal: AbortSignal.timeout(5000),
30
+ });
31
+ if (authResponse.ok) {
32
+ crawledUrls++;
33
+ // Try without authentication
34
+ const unauthResponse = await fetch(testUrl, {
28
35
  method: 'GET',
29
- headers: { ...authHeaders },
30
36
  signal: AbortSignal.timeout(5000),
31
37
  });
32
- if (authResponse.ok) {
33
- crawledUrls++;
34
- // Try without authentication
35
- const unauthResponse = await fetch(testUrl, {
36
- method: 'GET',
37
- signal: AbortSignal.timeout(5000),
38
- });
39
- if (unauthResponse.ok && unauthResponse.status === 200) {
40
- const authText = await authResponse.text();
41
- const unauthText = await unauthResponse.text();
42
- if (authText.length > 100 && unauthText.length > 100 &&
43
- Math.abs(authText.length - unauthText.length) < authText.length * 0.1) {
44
- vulnerabilities.push({
45
- id: uuidv4(),
46
- title: 'Missing Authentication on Protected Endpoint',
47
- description: `Endpoint ${endpoint} is accessible without authentication`,
48
- severity: 'high',
49
- category: 'broken-auth',
50
- location: { file: testUrl },
51
- remediation: { description: 'Implement proper authentication checks', estimatedEffort: 'moderate', automatable: false },
52
- references: ['https://owasp.org/www-project-web-security-testing-guide/'],
53
- });
54
- }
38
+ if (unauthResponse.ok && unauthResponse.status === 200) {
39
+ const authText = await authResponse.text();
40
+ const unauthText = await unauthResponse.text();
41
+ if (authText.length > 100 && unauthText.length > 100 &&
42
+ Math.abs(authText.length - unauthText.length) < authText.length * 0.1) {
43
+ vulnerabilities.push({
44
+ id: uuidv4(),
45
+ title: 'Missing Authentication on Protected Endpoint',
46
+ description: `Endpoint ${endpoint} is accessible without authentication`,
47
+ severity: 'high',
48
+ category: 'broken-auth',
49
+ location: { file: testUrl },
50
+ remediation: { description: 'Implement proper authentication checks', estimatedEffort: 'moderate', automatable: false },
51
+ references: ['https://owasp.org/www-project-web-security-testing-guide/'],
52
+ });
55
53
  }
56
54
  }
57
55
  }
58
- catch {
59
- // Endpoint not accessible - expected
60
- }
61
56
  }
62
57
  return crawledUrls;
63
58
  }
@@ -74,33 +69,28 @@ export async function testIDOR(parsedUrl, authHeaders, crawledUrls, maxDepth, vu
74
69
  for (const endpoint of idorEndpoints.slice(0, 2)) {
75
70
  if (crawledUrls >= maxDepth * 15)
76
71
  break;
77
- try {
78
- const testUrl = new URL(endpoint, parsedUrl.origin).toString();
79
- const response = await fetch(testUrl, {
80
- method: 'GET',
81
- headers: { ...authHeaders },
82
- signal: AbortSignal.timeout(5000),
83
- });
84
- if (response.ok) {
85
- crawledUrls++;
86
- const text = await response.text();
87
- if (text.includes('email') || text.includes('password') || text.includes('phone')) {
88
- vulnerabilities.push({
89
- id: uuidv4(),
90
- title: 'Potential Insecure Direct Object Reference (IDOR)',
91
- description: `Endpoint ${endpoint} may expose other users' data`,
92
- severity: 'high',
93
- category: 'access-control',
94
- location: { file: testUrl },
95
- remediation: { description: 'Implement proper authorization checks for resource access', estimatedEffort: 'moderate', automatable: false },
96
- references: ['https://owasp.org/www-project-web-security-testing-guide/latest/4-Web_Application_Security_Testing/05-Authorization_Testing/04-Testing_for_Insecure_Direct_Object_References'],
97
- });
98
- }
72
+ const testUrl = new URL(endpoint, parsedUrl.origin).toString();
73
+ const response = await fetch(testUrl, {
74
+ method: 'GET',
75
+ headers: { ...authHeaders },
76
+ signal: AbortSignal.timeout(5000),
77
+ });
78
+ if (response.ok) {
79
+ crawledUrls++;
80
+ const text = await response.text();
81
+ if (text.includes('email') || text.includes('password') || text.includes('phone')) {
82
+ vulnerabilities.push({
83
+ id: uuidv4(),
84
+ title: 'Potential Insecure Direct Object Reference (IDOR)',
85
+ description: `Endpoint ${endpoint} may expose other users' data`,
86
+ severity: 'high',
87
+ category: 'access-control',
88
+ location: { file: testUrl },
89
+ remediation: { description: 'Implement proper authorization checks for resource access', estimatedEffort: 'moderate', automatable: false },
90
+ references: ['https://owasp.org/www-project-web-security-testing-guide/latest/4-Web_Application_Security_Testing/05-Authorization_Testing/04-Testing_for_Insecure_Direct_Object_References'],
91
+ });
99
92
  }
100
93
  }
101
- catch {
102
- // Endpoint not accessible
103
- }
104
94
  }
105
95
  return crawledUrls;
106
96
  }