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
@@ -8,9 +8,9 @@
8
8
  * - Code age calculation
9
9
  * - Bug history from commit messages
10
10
  */
11
- import { execFileSync } from 'child_process';
12
11
  import * as path from 'path';
13
12
  import { assertSafeGitRef } from './ref-validation.js';
13
+ import { GitTimeoutError, runGit } from './git-process.js';
14
14
  /**
15
15
  * Sanitize a string for safe use in git arguments
16
16
  * Removes shell metacharacters that could enable injection
@@ -19,13 +19,22 @@ function sanitizeGitArg(arg) {
19
19
  // Remove characters that could be used for command injection
20
20
  return arg.replace(/[;&|`$(){}[\]<>\\'"!\n\r]/g, '');
21
21
  }
22
+ /** A git `%at` epoch-seconds line as a Date, or null when it is not one. */
23
+ function timestampToDate(line) {
24
+ const timestamp = parseInt(line ?? '', 10);
25
+ return isNaN(timestamp) ? null : new Date(timestamp * 1000);
26
+ }
22
27
  const DEFAULT_CONFIG = {
23
28
  repoRoot: process.cwd(),
24
29
  maxCommits: 100,
25
30
  bugKeywords: ['fix', 'bug', 'patch', 'issue', 'error', 'defect', 'problem'],
26
31
  enableCache: true,
27
32
  cacheTtl: 5 * 60 * 1000, // 5 minutes
33
+ gitTimeoutMs: 30 * 1000,
34
+ fileTimeoutMs: 60 * 1000,
28
35
  };
36
+ /** Room for `git blame --line-porcelain` on large files (execFileSync allowed 1 MiB). */
37
+ const GIT_MAX_BUFFER = 64 * 1024 * 1024;
29
38
  /**
30
39
  * Git Analyzer for defect prediction metrics
31
40
  */
@@ -33,6 +42,11 @@ export class GitAnalyzer {
33
42
  config;
34
43
  cache = new Map();
35
44
  isGitRepo = null;
45
+ /** After a rev-parse timeout, when to ask git again (until then: "timeout"). */
46
+ repoRetryAt = 0;
47
+ timedOutFiles = new Set();
48
+ /** Files inside withFileDeadline() and when their git time runs out. */
49
+ fileDeadlines = new Map();
36
50
  constructor(config = {}) {
37
51
  this.config = { ...DEFAULT_CONFIG, ...config };
38
52
  }
@@ -40,19 +54,30 @@ export class GitAnalyzer {
40
54
  * Check if current directory is a git repository
41
55
  */
42
56
  async isGitRepository() {
43
- if (this.isGitRepo !== null)
44
- return this.isGitRepo;
57
+ return (await this.repoState()) === true;
58
+ }
59
+ /**
60
+ * True when git timed out while analysing `filePath` since the last call, so
61
+ * the analysis returned its "git unavailable" default rather than a result.
62
+ */
63
+ consumeTimeout(filePath) {
64
+ return this.timedOutFiles.delete(filePath);
65
+ }
66
+ /**
67
+ * Run `work`, during which every analysis of `filePath` also stops at one
68
+ * shared `fileTimeoutMs` deadline. One file's analyses then wait for git at
69
+ * most that long together, rather than `gitTimeoutMs` each (#1115).
70
+ */
71
+ async withFileDeadline(filePath, work) {
72
+ if (this.fileDeadlines.has(filePath))
73
+ return work();
74
+ this.fileDeadlines.set(filePath, Date.now() + this.config.fileTimeoutMs);
45
75
  try {
46
- execFileSync('git', ['rev-parse', '--is-inside-work-tree'], {
47
- cwd: this.config.repoRoot,
48
- stdio: ['pipe', 'pipe', 'pipe'],
49
- });
50
- this.isGitRepo = true;
76
+ return await work();
51
77
  }
52
- catch {
53
- this.isGitRepo = false;
78
+ finally {
79
+ this.fileDeadlines.delete(filePath);
54
80
  }
55
- return this.isGitRepo;
56
81
  }
57
82
  /**
58
83
  * Get file change frequency (commits in last 90 days / 3)
@@ -63,28 +88,15 @@ export class GitAnalyzer {
63
88
  const cached = this.getFromCache(cacheKey);
64
89
  if (cached !== undefined)
65
90
  return cached;
66
- if (!(await this.isGitRepository())) {
67
- return 0.4; // Default when not in git repo
68
- }
69
- try {
70
- const relativePath = this.getRelativePath(filePath);
91
+ return this.analyze(filePath, 0.4, async (git, relativePath) => {
71
92
  // Literal pathspecs preserve route filenames such as app/[id].tsx.
72
- // execFileSync passes arguments directly without shell interpretation.
73
- const output = execFileSync('git', [
74
- '--literal-pathspecs', 'log', '--oneline', '--since=90 days ago', '--', relativePath
75
- ], {
76
- cwd: this.config.repoRoot,
77
- encoding: 'utf-8',
78
- stdio: ['pipe', 'pipe', 'pipe'],
79
- }).trim();
93
+ // Arguments go to git directly, without shell interpretation.
94
+ const output = (await git.text(['--literal-pathspecs', 'log', '--oneline', '--since=90 days ago', '--', relativePath])).trim();
80
95
  const commits = output ? output.split('\n').length : 0;
81
96
  const frequency = Math.min(1, commits / 30); // Normalize: 30+ commits in 90 days = 1.0
82
97
  this.setCache(cacheKey, frequency);
83
98
  return frequency;
84
- }
85
- catch {
86
- return 0.4; // Default on error
87
- }
99
+ });
88
100
  }
89
101
  /**
90
102
  * Get developer experience score for a file based on git blame
@@ -95,42 +107,24 @@ export class GitAnalyzer {
95
107
  const cached = this.getFromCache(cacheKey);
96
108
  if (cached !== undefined)
97
109
  return cached;
98
- if (!(await this.isGitRepository())) {
99
- return 0.5; // Default when not in git repo
100
- }
101
- try {
102
- const relativePath = this.getRelativePath(filePath);
103
- // Get blame info using execFileSync with argument array
104
- const blameOutput = execFileSync('git', [
105
- '--literal-pathspecs', 'blame', '--line-porcelain', '--', relativePath
106
- ], {
107
- cwd: this.config.repoRoot,
108
- encoding: 'utf-8',
109
- stdio: ['pipe', 'pipe', 'pipe'],
110
- });
110
+ return this.analyze(filePath, 0.5, async (git, relativePath) => {
111
+ const blameOutput = await git.text(['--literal-pathspecs', 'blame', '--line-porcelain', '--', relativePath]);
111
112
  // Parse blame output - count authors manually instead of piping through shell
112
113
  const authorCounts = new Map();
113
- const lines = blameOutput.split('\n');
114
- for (const line of lines) {
114
+ for (const line of blameOutput.split('\n')) {
115
115
  if (line.startsWith('author ')) {
116
116
  const author = line.substring(7).trim();
117
117
  authorCounts.set(author, (authorCounts.get(author) || 0) + 1);
118
118
  }
119
119
  }
120
120
  const totalLines = Array.from(authorCounts.values()).reduce((a, b) => a + b, 0);
121
- const uniqueAuthors = authorCounts.size;
122
- // Score based on code ownership concentration
123
- // High concentration by few authors = more experience = lower risk
124
121
  if (totalLines === 0)
125
122
  return 0.5;
126
123
  // More authors touching the file = higher risk (less concentrated ownership)
127
- const riskScore = Math.min(1, uniqueAuthors / 10);
124
+ const riskScore = Math.min(1, authorCounts.size / 10);
128
125
  this.setCache(cacheKey, riskScore);
129
126
  return riskScore;
130
- }
131
- catch {
132
- return 0.5; // Default on error
133
- }
127
+ });
134
128
  }
135
129
  /**
136
130
  * Get code age - how old is the file
@@ -141,49 +135,16 @@ export class GitAnalyzer {
141
135
  const cached = this.getFromCache(cacheKey);
142
136
  if (cached !== undefined)
143
137
  return cached;
144
- if (!(await this.isGitRepository())) {
145
- return 0.4; // Default when not in git repo
146
- }
147
- try {
148
- const relativePath = this.getRelativePath(filePath);
149
- // Get first commit date using execFileSync with argument array
150
- let firstCommitTimestamp = NaN;
151
- try {
152
- const firstCommitOutput = execFileSync('git', [
153
- '--literal-pathspecs', 'log', '--format=%at', '--follow', '--diff-filter=A', '--', relativePath
154
- ], {
155
- cwd: this.config.repoRoot,
156
- encoding: 'utf-8',
157
- stdio: ['pipe', 'pipe', 'pipe'],
158
- }).trim();
159
- // Get last line (oldest commit)
160
- const lines = firstCommitOutput.split('\n').filter(Boolean);
161
- if (lines.length > 0) {
162
- firstCommitTimestamp = parseInt(lines[lines.length - 1], 10);
163
- }
164
- }
165
- catch {
166
- // File may not have been added yet
167
- }
168
- // Get last commit date using execFileSync with argument array
169
- let lastCommitTimestamp = NaN;
170
- try {
171
- const lastCommitOutput = execFileSync('git', [
172
- '--literal-pathspecs', 'log', '-1', '--format=%at', '--', relativePath
173
- ], {
174
- cwd: this.config.repoRoot,
175
- encoding: 'utf-8',
176
- stdio: ['pipe', 'pipe', 'pipe'],
177
- }).trim();
178
- lastCommitTimestamp = parseInt(lastCommitOutput, 10);
179
- }
180
- catch {
181
- // File may not be in git
182
- }
183
- const now = Date.now() / 1000;
138
+ return this.analyze(filePath, 0.4, async (git, relativePath) => {
139
+ // First commit: the last line (oldest) of the commits that added the file
140
+ const added = await git.lines(['--literal-pathspecs', 'log', '--format=%at', '--follow', '--diff-filter=A', '--', relativePath]);
141
+ const firstCommitTimestamp = parseInt(added[added.length - 1] ?? '', 10);
142
+ const [lastLine] = await git.lines(['--literal-pathspecs', 'log', '-1', '--format=%at', '--', relativePath]);
143
+ const lastCommitTimestamp = parseInt(lastLine ?? '', 10);
184
144
  if (isNaN(lastCommitTimestamp)) {
185
145
  return 0.4; // File not in git
186
146
  }
147
+ const now = Date.now() / 1000;
187
148
  const daysSinceLastChange = (now - lastCommitTimestamp) / (60 * 60 * 24);
188
149
  const totalAgeDays = isNaN(firstCommitTimestamp)
189
150
  ? daysSinceLastChange
@@ -200,10 +161,7 @@ export class GitAnalyzer {
200
161
  }
201
162
  this.setCache(cacheKey, riskScore);
202
163
  return riskScore;
203
- }
204
- catch {
205
- return 0.4; // Default on error
206
- }
164
+ });
207
165
  }
208
166
  /**
209
167
  * Get bug history - how many bug fix commits have touched this file
@@ -214,48 +172,12 @@ export class GitAnalyzer {
214
172
  const cached = this.getFromCache(cacheKey);
215
173
  if (cached !== undefined)
216
174
  return cached;
217
- if (!(await this.isGitRepository())) {
218
- return 0.2; // Default when not in git repo
219
- }
220
- try {
221
- const relativePath = this.getRelativePath(filePath);
222
- // Search for each keyword separately and count unique commits
223
- // This avoids shell injection from keywords config
224
- let bugCommits = 0;
225
- const seenCommits = new Set();
226
- for (const keyword of this.config.bugKeywords) {
227
- const sanitizedKeyword = sanitizeGitArg(keyword);
228
- try {
229
- const output = execFileSync('git', [
230
- '--literal-pathspecs', 'log', '--oneline', '--grep', sanitizedKeyword, '-i', '--', relativePath
231
- ], {
232
- cwd: this.config.repoRoot,
233
- encoding: 'utf-8',
234
- stdio: ['pipe', 'pipe', 'pipe'],
235
- }).trim();
236
- if (output) {
237
- // Track unique commit hashes to avoid double-counting
238
- const lines = output.split('\n');
239
- for (const line of lines) {
240
- const hash = line.split(' ')[0];
241
- if (hash && !seenCommits.has(hash)) {
242
- seenCommits.add(hash);
243
- bugCommits++;
244
- }
245
- }
246
- }
247
- }
248
- catch {
249
- // Keyword search failed, continue with next
250
- }
251
- }
175
+ return this.analyze(filePath, 0.2, async (git, relativePath) => {
176
+ const bugCommits = await this.countBugFixCommits(git, relativePath);
252
177
  const riskScore = Math.min(1, bugCommits / 10); // Normalize: 10+ bug fixes = 1.0
253
178
  this.setCache(cacheKey, riskScore);
254
179
  return riskScore;
255
- }
256
- catch {
257
- return 0.2; // Default on error
258
- }
180
+ });
259
181
  }
260
182
  /**
261
183
  * Get comprehensive file history analysis
@@ -265,87 +187,15 @@ export class GitAnalyzer {
265
187
  const cached = this.getFromCache(cacheKey);
266
188
  if (cached)
267
189
  return cached;
268
- if (!(await this.isGitRepository())) {
269
- return this.getDefaultFileHistory(filePath);
270
- }
271
- try {
272
- const relativePath = this.getRelativePath(filePath);
273
- // Get commit count using execFileSync with argument array
274
- let totalCommits = 0;
275
- try {
276
- const commitCountOutput = execFileSync('git', [
277
- '--literal-pathspecs', 'log', '--oneline', '--', relativePath
278
- ], {
279
- cwd: this.config.repoRoot,
280
- encoding: 'utf-8',
281
- stdio: ['pipe', 'pipe', 'pipe'],
282
- }).trim();
283
- totalCommits = commitCountOutput ? commitCountOutput.split('\n').length : 0;
284
- }
285
- catch {
286
- // File may not be in git
287
- }
288
- // Get unique authors - parse output manually instead of piping through sort/wc
289
- let uniqueAuthors = 0;
290
- try {
291
- const authorsOutput = execFileSync('git', [
292
- '--literal-pathspecs', 'log', '--format=%ae', '--', relativePath
293
- ], {
294
- cwd: this.config.repoRoot,
295
- encoding: 'utf-8',
296
- stdio: ['pipe', 'pipe', 'pipe'],
297
- }).trim();
298
- if (authorsOutput) {
299
- const authorSet = new Set(authorsOutput.split('\n').filter(Boolean));
300
- uniqueAuthors = authorSet.size;
301
- }
302
- }
303
- catch {
304
- // File may not be in git
305
- }
306
- // Get first commit date
307
- let firstCommit = null;
308
- try {
309
- const firstCommitOutput = execFileSync('git', [
310
- '--literal-pathspecs', 'log', '--format=%at', '--follow', '--', relativePath
311
- ], {
312
- cwd: this.config.repoRoot,
313
- encoding: 'utf-8',
314
- stdio: ['pipe', 'pipe', 'pipe'],
315
- }).trim();
316
- if (firstCommitOutput) {
317
- const lines = firstCommitOutput.split('\n').filter(Boolean);
318
- if (lines.length > 0) {
319
- const timestamp = parseInt(lines[lines.length - 1], 10);
320
- if (!isNaN(timestamp)) {
321
- firstCommit = new Date(timestamp * 1000);
322
- }
323
- }
324
- }
325
- }
326
- catch {
327
- // File may not be in git
328
- }
329
- // Get last commit date
330
- let lastCommit = null;
331
- try {
332
- const lastCommitOutput = execFileSync('git', [
333
- '--literal-pathspecs', 'log', '-1', '--format=%at', '--', relativePath
334
- ], {
335
- cwd: this.config.repoRoot,
336
- encoding: 'utf-8',
337
- stdio: ['pipe', 'pipe', 'pipe'],
338
- }).trim();
339
- if (lastCommitOutput) {
340
- const timestamp = parseInt(lastCommitOutput, 10);
341
- if (!isNaN(timestamp)) {
342
- lastCommit = new Date(timestamp * 1000);
343
- }
344
- }
345
- }
346
- catch {
347
- // File may not be in git
348
- }
190
+ return this.analyze(filePath, this.getDefaultFileHistory(filePath), async (git, relativePath) => {
191
+ // Each query yields no lines when the file is not in git
192
+ const totalCommits = (await git.lines(['--literal-pathspecs', 'log', '--oneline', '--', relativePath])).length;
193
+ // Parse authors here instead of piping through sort/wc
194
+ const uniqueAuthors = new Set(await git.lines(['--literal-pathspecs', 'log', '--format=%ae', '--', relativePath])).size;
195
+ const followed = await git.lines(['--literal-pathspecs', 'log', '--format=%at', '--follow', '--', relativePath]);
196
+ const firstCommit = timestampToDate(followed[followed.length - 1]);
197
+ const [lastLine] = await git.lines(['--literal-pathspecs', 'log', '-1', '--format=%at', '--', relativePath]);
198
+ const lastCommit = timestampToDate(lastLine);
349
199
  // Calculate change frequency (commits per month)
350
200
  let changeFrequency = 0;
351
201
  if (firstCommit && lastCommit && totalCommits > 0) {
@@ -356,34 +206,6 @@ export class GitAnalyzer {
356
206
  const isRecentlyModified = lastCommit
357
207
  ? Date.now() - lastCommit.getTime() < 7 * 24 * 60 * 60 * 1000
358
208
  : false;
359
- // Count bug fix commits - search each keyword separately to avoid injection
360
- let bugFixCommits = 0;
361
- const seenBugCommits = new Set();
362
- for (const keyword of this.config.bugKeywords) {
363
- const sanitizedKeyword = sanitizeGitArg(keyword);
364
- try {
365
- const bugFixOutput = execFileSync('git', [
366
- '--literal-pathspecs', 'log', '--oneline', '--grep', sanitizedKeyword, '-i', '--', relativePath
367
- ], {
368
- cwd: this.config.repoRoot,
369
- encoding: 'utf-8',
370
- stdio: ['pipe', 'pipe', 'pipe'],
371
- }).trim();
372
- if (bugFixOutput) {
373
- const lines = bugFixOutput.split('\n');
374
- for (const line of lines) {
375
- const hash = line.split(' ')[0];
376
- if (hash && !seenBugCommits.has(hash)) {
377
- seenBugCommits.add(hash);
378
- bugFixCommits++;
379
- }
380
- }
381
- }
382
- }
383
- catch {
384
- // Keyword search failed, continue with next
385
- }
386
- }
387
209
  const history = {
388
210
  filePath: relativePath,
389
211
  totalCommits,
@@ -392,44 +214,25 @@ export class GitAnalyzer {
392
214
  lastCommit,
393
215
  changeFrequency,
394
216
  isRecentlyModified,
395
- bugFixCommits,
217
+ bugFixCommits: await this.countBugFixCommits(git, relativePath),
396
218
  };
397
219
  this.setCache(cacheKey, history);
398
220
  return history;
399
- }
400
- catch {
401
- return this.getDefaultFileHistory(filePath);
402
- }
221
+ });
403
222
  }
404
223
  /**
405
224
  * Get files changed since a specific date
406
225
  * @param since - Date to check changes from (default: 24 hours ago)
407
226
  * @returns Array of changed file paths relative to repo root
227
+ * @throws GitTimeoutError when git does not answer within `gitTimeoutMs`
408
228
  */
409
229
  async getChangedFiles(since) {
410
230
  if (!(await this.isGitRepository())) {
411
231
  return [];
412
232
  }
413
- try {
414
- const sinceDate = since || new Date(Date.now() - 24 * 60 * 60 * 1000);
415
- const sinceStr = sinceDate.toISOString();
416
- // Get files changed since the date using execFileSync with argument array
417
- const output = execFileSync('git', [
418
- 'log', `--since=${sinceStr}`, '--name-only', '-z', '--format='
419
- ], {
420
- cwd: this.config.repoRoot,
421
- encoding: 'utf-8',
422
- stdio: ['pipe', 'pipe', 'pipe'],
423
- });
424
- if (!output)
425
- return [];
426
- // NUL records preserve whitespace, newlines and Git-quoted Unicode paths.
427
- const files = output.split('\0').filter(Boolean);
428
- return Array.from(new Set(files));
429
- }
430
- catch {
431
- return [];
432
- }
233
+ const sinceDate = since || new Date(Date.now() - 24 * 60 * 60 * 1000);
234
+ const files = await this.query().paths(['log', `--since=${sinceDate.toISOString()}`, '--name-only', '-z', '--format=']);
235
+ return Array.from(new Set(files));
433
236
  }
434
237
  /**
435
238
  * Get files changed in a specific commit
@@ -438,78 +241,115 @@ export class GitAnalyzer {
438
241
  * @throws Error when `commitHash` is option-shaped (starts with "-") or otherwise
439
242
  * not a safe revision argument; git would otherwise parse it as an option
440
243
  * (e.g. `--output=<path>` writes an arbitrary file). See issue #960.
244
+ * @throws GitTimeoutError when git does not answer within `gitTimeoutMs`
441
245
  */
442
246
  async getCommitFiles(commitHash = 'HEAD') {
443
- // Validate before touching git: execFileSync has no shell, so stripping
247
+ // Validate before touching git: there is no shell, so stripping
444
248
  // metacharacters does not help, but a leading "-" is still parsed as an option.
445
249
  assertSafeGitRef(commitHash, 'commit hash');
446
250
  if (!(await this.isGitRepository())) {
447
251
  return [];
448
252
  }
449
- try {
450
- const output = execFileSync('git', [
451
- 'diff-tree', '--root', '--no-commit-id', '--name-only', '-z', '-r', commitHash
452
- ], {
453
- cwd: this.config.repoRoot,
454
- encoding: 'utf-8',
455
- stdio: ['pipe', 'pipe', 'pipe'],
456
- });
457
- if (!output)
458
- return [];
459
- return output.split('\0').filter(Boolean);
460
- }
461
- catch {
462
- return [];
463
- }
253
+ return this.query().paths(['diff-tree', '--root', '--no-commit-id', '--name-only', '-z', '-r', commitHash]);
464
254
  }
465
255
  /**
466
256
  * Get files with uncommitted changes (staged + unstaged)
467
257
  * @returns Array of modified file paths relative to repo root
258
+ * @throws GitTimeoutError when git does not answer within `gitTimeoutMs`
468
259
  */
469
260
  async getUncommittedFiles() {
470
261
  if (!(await this.isGitRepository())) {
471
262
  return [];
472
263
  }
264
+ // `diff HEAD` fails before the first commit; `--cached` still lists staged files.
265
+ const git = this.query();
266
+ const unstaged = await git.paths(['diff', '--name-only', '-z', 'HEAD']);
267
+ const staged = await git.paths(['diff', '--name-only', '-z', '--cached']);
268
+ return Array.from(new Set([...unstaged, ...staged]));
269
+ }
270
+ /**
271
+ * Count commits whose message matches any bug keyword, in one `git log`
272
+ * (repeated --grep patterns are OR-ed). Keywords are sanitized arguments and
273
+ * never reach a shell.
274
+ */
275
+ async countBugFixCommits(git, relativePath) {
276
+ if (this.config.bugKeywords.length === 0)
277
+ return 0;
278
+ const greps = this.config.bugKeywords.flatMap((keyword) => ['--grep', sanitizeGitArg(keyword)]);
279
+ const lines = await git.lines(['--literal-pathspecs', 'log', '--oneline', '-i', ...greps, '--', relativePath]);
280
+ return new Set(lines.map((line) => line.split(' ')[0]).filter(Boolean)).size;
281
+ }
282
+ /**
283
+ * Run one file's analysis with every git call sharing one `gitTimeoutMs`
284
+ * deadline (#1115). When git is unavailable or times out, the analysis
285
+ * returns its default, which callers treat as "no git data", and a timeout
286
+ * is recorded for consumeTimeout(). A timeout never yields a measured 0.
287
+ */
288
+ async analyze(filePath, fallback, work) {
289
+ const repo = await this.repoState();
290
+ if (repo !== true) {
291
+ if (repo === 'timeout')
292
+ this.timedOutFiles.add(filePath);
293
+ return fallback;
294
+ }
473
295
  try {
474
- const files = [];
475
- // Get unstaged changes using execFileSync with argument array
476
- try {
477
- const unstagedOutput = execFileSync('git', [
478
- 'diff', '--name-only', '-z', 'HEAD'
479
- ], {
480
- cwd: this.config.repoRoot,
481
- encoding: 'utf-8',
482
- stdio: ['pipe', 'pipe', 'pipe'],
483
- });
484
- if (unstagedOutput) {
485
- files.push(...unstagedOutput.split('\0').filter(Boolean));
486
- }
487
- }
488
- catch {
489
- // May fail if no HEAD commit exists
296
+ return await work(this.query(this.fileDeadlines.get(filePath)), this.getRelativePath(filePath));
297
+ }
298
+ catch (error) {
299
+ if (error instanceof GitTimeoutError)
300
+ this.timedOutFiles.add(filePath);
301
+ return fallback;
302
+ }
303
+ }
304
+ /**
305
+ * Whether the repo root is a git work tree. A timeout is not an answer: it
306
+ * is remembered for `cacheTtl` so a hung git is not waited on for every
307
+ * file, and then git is asked again.
308
+ */
309
+ async repoState() {
310
+ if (this.isGitRepo !== null)
311
+ return this.isGitRepo;
312
+ if (Date.now() < this.repoRetryAt)
313
+ return 'timeout';
314
+ try {
315
+ await this.query().text(['rev-parse', '--is-inside-work-tree']);
316
+ this.isGitRepo = true;
317
+ }
318
+ catch (error) {
319
+ if (error instanceof GitTimeoutError) {
320
+ this.repoRetryAt = Date.now() + this.config.cacheTtl;
321
+ return 'timeout';
490
322
  }
491
- // Get staged changes using execFileSync with argument array
323
+ this.isGitRepo = false;
324
+ }
325
+ return this.isGitRepo;
326
+ }
327
+ /**
328
+ * Git queries in the repo root that share a deadline of `gitTimeoutMs` from
329
+ * now, or `fileDeadline` when that comes first. Git runs asynchronously in its own process group, so a slow or hung
330
+ * git (a network filesystem, a credential prompt) neither blocks the MCP
331
+ * server's event loop nor outlives its deadline (#1115).
332
+ */
333
+ query(fileDeadline = Infinity) {
334
+ const deadline = Math.min(Date.now() + this.config.gitTimeoutMs, fileDeadline);
335
+ const text = (args) => runGit(args, {
336
+ cwd: this.config.repoRoot, timeout: deadline - Date.now(), maxBuffer: GIT_MAX_BUFFER,
337
+ });
338
+ const orNothing = async (args, separator) => {
492
339
  try {
493
- const stagedOutput = execFileSync('git', [
494
- 'diff', '--name-only', '-z', '--cached'
495
- ], {
496
- cwd: this.config.repoRoot,
497
- encoding: 'utf-8',
498
- stdio: ['pipe', 'pipe', 'pipe'],
499
- });
500
- if (stagedOutput) {
501
- files.push(...stagedOutput.split('\0').filter(Boolean));
502
- }
340
+ return (await text(args)).split(separator);
503
341
  }
504
- catch {
505
- // May fail if no commits exist
342
+ catch (error) {
343
+ if (error instanceof GitTimeoutError)
344
+ throw error;
345
+ return [];
506
346
  }
507
- // Deduplicate
508
- return Array.from(new Set(files));
509
- }
510
- catch {
511
- return [];
512
- }
347
+ };
348
+ return {
349
+ text,
350
+ lines: async (args) => (await orNothing(args, '\n')).map((line) => line.trim()).filter(Boolean),
351
+ paths: async (args) => (await orNothing(args, '\0')).filter(Boolean),
352
+ };
513
353
  }
514
354
  /**
515
355
  * Get relative path from repo root
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Run git without blocking the event loop (#1115).
3
+ *
4
+ * Git runs in its own process group, so a timeout stops it together with any
5
+ * wrapper, credential helper or fsmonitor child it started.
6
+ */
7
+ /** Git did not finish before its deadline; its result is unknown, not empty. */
8
+ export declare class GitTimeoutError extends Error {
9
+ constructor(args: readonly string[], timeoutMs: number);
10
+ }
11
+ export interface RunGitOptions {
12
+ cwd: string;
13
+ /** Milliseconds before the git process group is stopped. */
14
+ timeout: number;
15
+ maxBuffer?: number;
16
+ }
17
+ /**
18
+ * Resolve with git's stdout. Rejects with GitTimeoutError when the deadline
19
+ * passes, and with a plain Error when git cannot start or exits non-zero.
20
+ */
21
+ export declare function runGit(args: readonly string[], options: RunGitOptions): Promise<string>;
22
+ //# sourceMappingURL=git-process.d.ts.map