agentic-qe 3.10.2 → 3.10.3

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 (387) hide show
  1. package/.claude/skills/release/SKILL.md +10 -10
  2. package/.claude/skills/skills-manifest.json +1 -1
  3. package/CHANGELOG.md +55 -0
  4. package/assets/grammars/tree-sitter-c_sharp.wasm +0 -0
  5. package/assets/grammars/tree-sitter-java.wasm +0 -0
  6. package/assets/grammars/tree-sitter-javascript.wasm +0 -0
  7. package/assets/grammars/tree-sitter-python.wasm +0 -0
  8. package/assets/grammars/tree-sitter-rust.wasm +0 -0
  9. package/assets/grammars/tree-sitter-swift.wasm +0 -0
  10. package/assets/grammars/tree-sitter-tsx.wasm +0 -0
  11. package/assets/grammars/tree-sitter-typescript.wasm +0 -0
  12. package/assets/skills/skills-manifest.json +1 -1
  13. package/dist/agents/claim-verifier/claim-verifier-service.js +4 -2
  14. package/dist/agents/claim-verifier/verifiers/test-verifier.js +31 -23
  15. package/dist/agents/devils-advocate/agent.js +1 -1
  16. package/dist/cli/bundle.js +5 -5
  17. package/dist/cli/chunks/adapter-BHPUKMJ5.js +2 -0
  18. package/dist/cli/chunks/{agent-booster-wasm-DHSIPFTH.js → agent-booster-wasm-NGC6LSQP.js} +2 -2
  19. package/dist/cli/chunks/{agent-handler-FPQVHGGT.js → agent-handler-P2IJE4GK.js} +2 -2
  20. package/dist/cli/chunks/{agent-memory-branch-OLOF5ZHV.js → agent-memory-branch-JXRJ5GKQ.js} +2 -2
  21. package/dist/cli/chunks/aqe-learning-engine-JQ5WD2HM.js +2 -0
  22. package/dist/cli/chunks/{audit-ALRYPHGP.js → audit-BMQ3VESB.js} +2 -2
  23. package/dist/cli/chunks/base-E32WLGY2.js +2 -0
  24. package/dist/cli/chunks/{hnswlib-node-ZGSUMHDC.js → better-sqlite3-HP4JZS6K.js} +2 -2
  25. package/dist/cli/chunks/{brain-handler-ROZUHCOT.js → brain-handler-SACNDFSW.js} +3 -3
  26. package/dist/cli/chunks/{branch-enumerator-VK7G4NKJ.js → branch-enumerator-LFOTVUDA.js} +2 -2
  27. package/dist/cli/chunks/{browser-Q2S75M2F.js → browser-FK7PRF3W.js} +2 -2
  28. package/dist/cli/chunks/browser-workflow-LNNXXAJG.js +2 -0
  29. package/dist/cli/chunks/{chunk-UWXH2UQK.js → chunk-2EQVYYBF.js} +2 -2
  30. package/dist/cli/chunks/{chunk-JF53LRBL.js → chunk-2L73WXA4.js} +2 -2
  31. package/dist/cli/chunks/{chunk-5HB54RUS.js → chunk-2ULVCLOW.js} +2 -2
  32. package/dist/cli/chunks/{chunk-UUFOHMUG.js → chunk-3HBWDG62.js} +2 -2
  33. package/dist/cli/chunks/{chunk-22D6VBPD.js → chunk-3JAOFKEU.js} +2 -2
  34. package/dist/cli/chunks/{chunk-XPCNUX2U.js → chunk-3LRK7PYN.js} +2 -2
  35. package/dist/cli/chunks/{chunk-WNR2KAUH.js → chunk-3RZL4QTT.js} +2 -2
  36. package/dist/cli/chunks/chunk-3VF3HCG4.js +2 -0
  37. package/dist/cli/chunks/{chunk-3Z4FHA2E.js → chunk-3X2ZQ55B.js} +4 -4
  38. package/dist/cli/chunks/{chunk-YACT5WFC.js → chunk-4CYLSXA6.js} +2 -2
  39. package/dist/cli/chunks/{chunk-7QRMARM7.js → chunk-4OUAHZX2.js} +2 -2
  40. package/dist/cli/chunks/{chunk-G5U6Q42D.js → chunk-4QFAUSWQ.js} +2 -2
  41. package/dist/cli/chunks/{chunk-SJH3HYNC.js → chunk-5ER3COX3.js} +2 -2
  42. package/dist/cli/chunks/{chunk-LZCBSFAU.js → chunk-5EWWA4QP.js} +4 -4
  43. package/dist/cli/chunks/{chunk-VSUTI4G6.js → chunk-5G5AAEFF.js} +2 -2
  44. package/dist/cli/chunks/{chunk-7V5UHLNY.js → chunk-5IBJURYB.js} +3 -3
  45. package/dist/cli/chunks/chunk-5LON3MLI.js +2 -0
  46. package/dist/cli/chunks/{chunk-3RHHKYUR.js → chunk-5SGEOO2F.js} +2 -2
  47. package/dist/cli/chunks/{chunk-6NZHEM4V.js → chunk-6B4S7PKP.js} +3 -3
  48. package/dist/cli/chunks/{chunk-MEY43PIQ.js → chunk-6FL3GN4T.js} +2 -2
  49. package/dist/cli/chunks/{chunk-Y63MBMOV.js → chunk-6GCOIIHY.js} +2 -2
  50. package/dist/cli/chunks/{chunk-EQBEGDTG.js → chunk-6Q2PPOOF.js} +1 -1
  51. package/dist/cli/chunks/{chunk-PXTDEO65.js → chunk-6ZK24V2Y.js} +2 -2
  52. package/dist/cli/chunks/{chunk-7Z46RDDV.js → chunk-72LE6PHL.js} +3 -3
  53. package/dist/cli/chunks/{chunk-SVYTN2GT.js → chunk-7RMZAVGO.js} +2 -2
  54. package/dist/cli/chunks/{chunk-S3OZ7XSY.js → chunk-7SEHQTYD.js} +1 -1
  55. package/dist/cli/chunks/{chunk-UYYBPWU3.js → chunk-7YYTTWGY.js} +1 -1
  56. package/dist/cli/chunks/{chunk-DRWGK3YO.js → chunk-7ZSPCGTI.js} +2 -2
  57. package/dist/cli/chunks/{chunk-UVU7XLJY.js → chunk-ADV4DH3W.js} +5 -5
  58. package/dist/cli/chunks/{chunk-FO43SQXP.js → chunk-AEJVOJPT.js} +2 -2
  59. package/dist/cli/chunks/{chunk-ETN5563K.js → chunk-B5MMDMH6.js} +2 -2
  60. package/dist/cli/chunks/{chunk-ZXTO4C7R.js → chunk-BO2OV2RH.js} +2 -2
  61. package/dist/cli/chunks/{chunk-TJKDATEU.js → chunk-BT3QLWII.js} +2 -2
  62. package/dist/cli/chunks/{chunk-AV7KYE5P.js → chunk-BWP3UVPE.js} +5 -5
  63. package/dist/cli/chunks/{chunk-PEK6NGVJ.js → chunk-C6BBRM2J.js} +1 -1
  64. package/dist/cli/chunks/{chunk-ORF2UKQH.js → chunk-CAMEFWRK.js} +1 -1
  65. package/dist/cli/chunks/{chunk-EVCOCGVJ.js → chunk-CNEWYJKT.js} +4 -4
  66. package/dist/cli/chunks/{chunk-MYWQTCS4.js → chunk-CTDO2UB2.js} +1 -1
  67. package/dist/cli/chunks/{chunk-2OH3ALYB.js → chunk-D2FBUOAR.js} +1 -1
  68. package/dist/cli/chunks/{chunk-ZDHMZPSL.js → chunk-DF3MJ2YL.js} +1 -1
  69. package/dist/cli/chunks/{chunk-7SJX4CFK.js → chunk-DY5KEOHX.js} +1 -1
  70. package/dist/cli/chunks/{chunk-DZZEHPSJ.js → chunk-E2BJT6A7.js} +3 -3
  71. package/dist/cli/chunks/{chunk-2244IFZA.js → chunk-EETVN2OJ.js} +1 -1
  72. package/dist/cli/chunks/{chunk-FY3CUPNN.js → chunk-ERYMAYJW.js} +2 -2
  73. package/dist/cli/chunks/{chunk-ZK2BH23O.js → chunk-FJGSEPFL.js} +2 -2
  74. package/dist/cli/chunks/{chunk-HJORBNXW.js → chunk-FLTPHVZ3.js} +1 -1
  75. package/dist/cli/chunks/{chunk-RLXTBL3H.js → chunk-FND6V2RV.js} +22 -22
  76. package/dist/cli/chunks/{chunk-PIZYRPMT.js → chunk-FU77CDEM.js} +2 -2
  77. package/dist/cli/chunks/{chunk-HA63NBFK.js → chunk-GELF4ILR.js} +37 -37
  78. package/dist/cli/chunks/{chunk-U3EUH6LX.js → chunk-GHNNJHH3.js} +2 -2
  79. package/dist/cli/chunks/{chunk-NZO4WUSO.js → chunk-GJUGSH7T.js} +3 -3
  80. package/dist/cli/chunks/{chunk-QJ2EHLJ2.js → chunk-GL3HZN3O.js} +1 -1
  81. package/dist/cli/chunks/{chunk-MMIQ5DMA.js → chunk-H56AROF2.js} +2 -2
  82. package/dist/cli/chunks/{chunk-AWFIEGR3.js → chunk-HAO3SPOE.js} +2 -2
  83. package/dist/cli/chunks/{chunk-MNUTRAUV.js → chunk-HM523MTQ.js} +1 -1
  84. package/dist/cli/chunks/{chunk-IICTTDAA.js → chunk-HMFEPKAR.js} +2 -2
  85. package/dist/cli/chunks/{chunk-4GTDW2XL.js → chunk-HQJMCTWN.js} +2 -2
  86. package/dist/cli/chunks/{chunk-5PL7WTCU.js → chunk-HRLXU4LH.js} +2 -2
  87. package/dist/cli/chunks/{chunk-5WJ3FWL4.js → chunk-HWM2XJ3P.js} +24 -24
  88. package/dist/cli/chunks/{chunk-BQCSCAUC.js → chunk-I42R57ON.js} +2 -2
  89. package/dist/cli/chunks/chunk-IL2KOW5W.js +2 -0
  90. package/dist/cli/chunks/{chunk-QSE67XJO.js → chunk-IRR7YA3Q.js} +2 -2
  91. package/dist/cli/chunks/{chunk-FPAW77XV.js → chunk-JD2PG4KS.js} +1 -1
  92. package/dist/cli/chunks/{chunk-LQTWPSYL.js → chunk-JE3C7JYN.js} +1 -1
  93. package/dist/cli/chunks/{chunk-6KSCXPPL.js → chunk-JLL27IGU.js} +2 -2
  94. package/dist/cli/chunks/{chunk-7DKYCVJI.js → chunk-JOLDCS6X.js} +2 -2
  95. package/dist/cli/chunks/{chunk-YNNOY3XN.js → chunk-JP63XACW.js} +2 -2
  96. package/dist/cli/chunks/{chunk-ZQUXNG5X.js → chunk-JSFYPLMQ.js} +2 -2
  97. package/dist/cli/chunks/{chunk-MNV3E5KY.js → chunk-JTF6D2RJ.js} +4 -4
  98. package/dist/cli/chunks/{chunk-OXCEUR5F.js → chunk-JTZ3Q2QS.js} +2 -2
  99. package/dist/cli/chunks/{chunk-OPFN5LFT.js → chunk-JXIPRMAY.js} +4 -4
  100. package/dist/cli/chunks/{chunk-XDU624HU.js → chunk-KG5SM36Y.js} +1 -1
  101. package/dist/cli/chunks/{chunk-SW4OKUTC.js → chunk-KTRB3L53.js} +2 -2
  102. package/dist/cli/chunks/{chunk-MCZHKXB4.js → chunk-L74CHKFR.js} +2 -2
  103. package/dist/cli/chunks/{chunk-2EDWGHDA.js → chunk-LZ6TNTGO.js} +2 -2
  104. package/dist/cli/chunks/{chunk-5PRFFHFV.js → chunk-M5CDW2ZH.js} +2 -2
  105. package/dist/cli/chunks/{chunk-PYIHZXCI.js → chunk-MBSJ5G4I.js} +4 -4
  106. package/dist/cli/chunks/{chunk-OIRZJCZY.js → chunk-MC7K44M4.js} +2 -2
  107. package/dist/cli/chunks/{chunk-2JDLQWSV.js → chunk-MQOFFRTA.js} +2 -2
  108. package/dist/cli/chunks/{chunk-4BXGVM2C.js → chunk-N7IBYDW5.js} +1 -1
  109. package/dist/cli/chunks/{chunk-MCOFJHSJ.js → chunk-NEYYLAYS.js} +5 -5
  110. package/dist/cli/chunks/{chunk-A5RMQG4N.js → chunk-NNVXHC74.js} +3 -3
  111. package/dist/cli/chunks/{chunk-QBRHKTFT.js → chunk-NNZMEYLT.js} +1 -1
  112. package/dist/cli/chunks/{chunk-WDMPJ2M2.js → chunk-NRCL3WCP.js} +2 -2
  113. package/dist/cli/chunks/{chunk-ZGNZJJFF.js → chunk-NXPFGPHV.js} +1 -1
  114. package/dist/cli/chunks/{chunk-AH7FXNFE.js → chunk-NZHOKLII.js} +3 -3
  115. package/dist/cli/chunks/{chunk-EA7ZSN3V.js → chunk-OG7CWWFR.js} +1 -1
  116. package/dist/cli/chunks/{chunk-YWZHMXTO.js → chunk-OPDTDKN3.js} +2 -2
  117. package/dist/cli/chunks/{chunk-24LUQICS.js → chunk-OX4R55T3.js} +2 -2
  118. package/dist/cli/chunks/{chunk-QEPFXY6G.js → chunk-PFCAMX6H.js} +1 -1
  119. package/dist/cli/chunks/{chunk-DMQPO43S.js → chunk-PL5SLO2W.js} +1 -1
  120. package/dist/cli/chunks/{chunk-XGBAHAGC.js → chunk-PZHZPX3O.js} +4 -4
  121. package/dist/cli/chunks/{chunk-HJME6G5M.js → chunk-Q7EBD24B.js} +1 -1
  122. package/dist/cli/chunks/{chunk-4F3ZTXHP.js → chunk-QEODION5.js} +2 -2
  123. package/dist/cli/chunks/{chunk-AIUSZC6K.js → chunk-QM65UGPV.js} +2 -2
  124. package/dist/cli/chunks/{chunk-HHCYSAH3.js → chunk-QWG76RHA.js} +2 -2
  125. package/dist/cli/chunks/{chunk-5QHSLWLP.js → chunk-R5ONQAQL.js} +2 -2
  126. package/dist/cli/chunks/{chunk-S3ZO7JXS.js → chunk-RNF47IJ5.js} +4 -4
  127. package/dist/cli/chunks/{chunk-AOI67HA3.js → chunk-RTDHWOAG.js} +1 -1
  128. package/dist/cli/chunks/{chunk-C2M74HCN.js → chunk-RZCAA2PZ.js} +1 -1
  129. package/dist/cli/chunks/{chunk-7IVQ6OVR.js → chunk-SL6YZAT4.js} +2 -2
  130. package/dist/cli/chunks/{chunk-KB5L5TTF.js → chunk-SNTMAVPH.js} +5 -5
  131. package/dist/cli/chunks/{chunk-XTCUN36Z.js → chunk-SWOG3PBD.js} +2 -2
  132. package/dist/cli/chunks/{chunk-7IZ2OPC2.js → chunk-T63EK6GH.js} +2 -2
  133. package/dist/cli/chunks/chunk-U6UK3UMX.js +59 -0
  134. package/dist/cli/chunks/{chunk-7SWD3D6Y.js → chunk-U7NMPZE2.js} +2 -2
  135. package/dist/cli/chunks/{chunk-THRTUW4Z.js → chunk-UDV4YB42.js} +1 -1
  136. package/dist/cli/chunks/{chunk-CV2SBMBW.js → chunk-UHDBM7QS.js} +2 -2
  137. package/dist/cli/chunks/{chunk-CIRPP7RQ.js → chunk-UIJFU4KD.js} +2 -2
  138. package/dist/cli/chunks/{chunk-L7VIX22Y.js → chunk-USFZ4IJD.js} +2 -2
  139. package/dist/cli/chunks/{chunk-CMACGG4Z.js → chunk-UZL366ZI.js} +1 -1
  140. package/dist/cli/chunks/{chunk-QQNCSEZG.js → chunk-VDTFRMES.js} +2 -2
  141. package/dist/cli/chunks/{chunk-6ZFHIKQG.js → chunk-VIWIO27R.js} +3 -3
  142. package/dist/cli/chunks/{chunk-YI6GNRQM.js → chunk-VRXY4T22.js} +2 -2
  143. package/dist/cli/chunks/{chunk-WSVUSIAZ.js → chunk-WPVCSFDA.js} +2 -2
  144. package/dist/cli/chunks/{chunk-X2VAOIUY.js → chunk-WWD5IWTV.js} +1 -1
  145. package/dist/cli/chunks/{chunk-WZJUMJ2S.js → chunk-X2B7SANM.js} +1 -1
  146. package/dist/cli/chunks/{chunk-R2O6OKT2.js → chunk-X3RJ6SFC.js} +1 -1
  147. package/dist/cli/chunks/{chunk-OWQ6HEYI.js → chunk-XTP2GHI7.js} +2 -2
  148. package/dist/cli/chunks/{chunk-XRJECWZE.js → chunk-YDDZJCKY.js} +1 -1
  149. package/dist/cli/chunks/{chunk-HO37VP4O.js → chunk-YDKYLNKZ.js} +1 -1
  150. package/dist/cli/chunks/{chunk-ON4D4TJ4.js → chunk-YIYV2JB6.js} +2 -2
  151. package/dist/cli/chunks/{chunk-RNREAOY4.js → chunk-YX2HY4MX.js} +2 -2
  152. package/dist/cli/chunks/{chunk-XDSA7YUQ.js → chunk-YXH2CVAF.js} +1 -1
  153. package/dist/cli/chunks/{chunk-XMJTTF5N.js → chunk-YYAPO3CU.js} +3 -3
  154. package/dist/cli/chunks/{chunk-STEGWLH5.js → chunk-Z2K5IZM6.js} +2 -2
  155. package/dist/cli/chunks/{chunk-OIEQF7PG.js → chunk-ZG4P3DTL.js} +2 -2
  156. package/dist/cli/chunks/{chunk-CTDLI2ON.js → chunk-ZXQNE4QV.js} +1 -1
  157. package/dist/cli/chunks/{ci-PYCRCL7G.js → ci-AWZ3S5OT.js} +6 -6
  158. package/dist/cli/chunks/{ci-output-EKQQFE2D.js → ci-output-JLCYTIMT.js} +2 -2
  159. package/dist/cli/chunks/{circuit-breaker-RH3Q2MJO.js → circuit-breaker-BJDKBDIL.js} +2 -2
  160. package/dist/cli/chunks/{claude-flow-setup-DUDXB4VV.js → claude-flow-setup-KKOP5ZMO.js} +2 -2
  161. package/dist/cli/chunks/client-2UKBYFX4.js +2 -0
  162. package/dist/cli/chunks/{cline-installer-3Q4WIWUG.js → cline-installer-7M525SEA.js} +2 -2
  163. package/dist/cli/chunks/{code-E4Q6DGOO.js → code-27SUVJDO.js} +20 -19
  164. package/dist/cli/chunks/{code-index-extractor-2PCISUOW.js → code-index-extractor-TTQQZLAK.js} +2 -2
  165. package/dist/cli/chunks/{codex-installer-YNNNOLJ6.js → codex-installer-GHNGNPKP.js} +2 -2
  166. package/dist/cli/chunks/{completions-2F7TUFBD.js → completions-JPJD24DG.js} +2 -2
  167. package/dist/cli/chunks/{complexity-analyzer-2B6MHO7W.js → complexity-analyzer-Q74EJV33.js} +2 -2
  168. package/dist/cli/chunks/{continuedev-installer-ENOKRU5M.js → continuedev-installer-ULTRDIML.js} +2 -2
  169. package/dist/cli/chunks/{copilot-installer-6YD2KM5F.js → copilot-installer-EK52X4CG.js} +2 -2
  170. package/dist/cli/chunks/{cost-tracker-FCH4QOEA.js → cost-tracker-2GKBRYXL.js} +2 -2
  171. package/dist/cli/chunks/{coverage-JTOXZE3T.js → coverage-YCLC3W2A.js} +3 -3
  172. package/dist/cli/chunks/cross-domain-router-FPM3L27L.js +2 -0
  173. package/dist/cli/chunks/{cursor-installer-QZFBUGLQ.js → cursor-installer-B3ALFW5E.js} +2 -2
  174. package/dist/cli/chunks/{daemon-M422U3ZA.js → daemon-YWINEHG4.js} +4 -4
  175. package/dist/cli/chunks/{daemon-K4QFB5FQ.js → daemon-ZKEBVLJA.js} +3 -3
  176. package/dist/cli/chunks/{dag-attention-scheduler-BXAAW33V.js → dag-attention-scheduler-OQPJ6ULA.js} +2 -2
  177. package/dist/cli/chunks/{detect-UGSWIOAD.js → detect-YMYIQH3Q.js} +2 -2
  178. package/dist/cli/chunks/{dist-node-FN3HX3OK.js → dist-node-R4FAYQRY.js} +2 -2
  179. package/dist/cli/chunks/{domain-handler-7PP7VYA7.js → domain-handler-IGWXLF2S.js} +2 -2
  180. package/dist/cli/chunks/{domain-transfer-XZM44W7I.js → domain-transfer-A7YNO76C.js} +2 -2
  181. package/dist/cli/chunks/dream-XM33US3V.js +2 -0
  182. package/dist/cli/chunks/{embed-and-insert-pattern-JZVERJ5L.js → embed-and-insert-pattern-KODZAS7Y.js} +2 -2
  183. package/dist/cli/chunks/{eval-466NFF2D.js → eval-ALQW7Q2S.js} +3 -3
  184. package/dist/cli/chunks/{experience-capture-middleware-I7IQCC7V.js → experience-capture-middleware-3WK4RXWK.js} +3 -3
  185. package/dist/cli/chunks/{fast-paths-34OICNZA.js → fast-paths-PQWDFIJZ.js} +2 -2
  186. package/dist/cli/chunks/{feature-flags-X5WBBWSO.js → feature-flags-6X33B3WX.js} +2 -2
  187. package/dist/cli/chunks/{feature-flags-6UBIVTAD.js → feature-flags-JRUAZCND.js} +2 -2
  188. package/dist/cli/chunks/{file-discovery-NLMDBWXX.js → file-discovery-SA3YU3IH.js} +2 -2
  189. package/dist/cli/chunks/{fleet-W7CYCHDI.js → fleet-7TXCAOKQ.js} +3 -3
  190. package/dist/cli/chunks/{gnn-wrapper-K4VTAG5X.js → gnn-wrapper-ZKNYACEC.js} +2 -2
  191. package/dist/cli/chunks/{heartbeat-handler-ZGKF2Z6T.js → heartbeat-handler-KRZRZ23F.js} +4 -4
  192. package/dist/cli/chunks/heartbeat-scheduler-GM3M2MTG.js +2 -0
  193. package/dist/cli/chunks/hnsw-adapter-K62GEHIL.js +2 -0
  194. package/dist/cli/chunks/hnsw-index-VCAK3TWN.js +2 -0
  195. package/dist/cli/chunks/{hnsw-legacy-bridge-ELDRLKK5.js → hnsw-legacy-bridge-LVHQ5SG7.js} +2 -2
  196. package/dist/cli/chunks/{better-sqlite3-5BT5FO64.js → hnswlib-node-64EGGWIC.js} +2 -2
  197. package/dist/cli/chunks/{hooks-T4CBINAV.js → hooks-6Y3UHYI2.js} +12 -12
  198. package/dist/cli/chunks/hybrid-router-432QNCNG.js +2 -0
  199. package/dist/cli/chunks/{hypergraph-engine-UWFW3XP5.js → hypergraph-engine-2EZBZMFK.js} +2 -2
  200. package/dist/cli/chunks/{hypergraph-handler-PK2BI46K.js → hypergraph-handler-GLPWYII2.js} +3 -3
  201. package/dist/cli/chunks/impact-analyzer-VTSISNN4.js +2 -0
  202. package/dist/cli/chunks/{init-handler-HNG6KJOU.js → init-handler-ZSDO5VMA.js} +6 -6
  203. package/dist/cli/chunks/init-wizard-COB5AH7Q.js +2 -0
  204. package/dist/cli/chunks/kernel-ROK7X5FM.js +2 -0
  205. package/dist/cli/chunks/{kilocode-installer-25V7FEJ4.js → kilocode-installer-ATYSDWIV.js} +2 -2
  206. package/dist/cli/chunks/{kiro-installer-7RMTTCQB.js → kiro-installer-K66YT6PC.js} +2 -2
  207. package/dist/cli/chunks/knowledge-graph-YUWIDIWW.js +2 -0
  208. package/dist/cli/chunks/{learning-XQC2MG2R.js → learning-BVYCC4RI.js} +3 -3
  209. package/dist/cli/chunks/{llm-router-6KTTONH4.js → llm-router-VBCXE6DN.js} +12 -12
  210. package/dist/cli/chunks/llm-router-service-7VLXJ7VE.js +2 -0
  211. package/dist/cli/chunks/{load-BV64P3AL.js → load-AREDQE2U.js} +2 -2
  212. package/dist/cli/chunks/load-test-32524DL3.js +2 -0
  213. package/dist/cli/chunks/{mcp-U5ZN77TA.js → mcp-NG6H6UC5.js} +2 -2
  214. package/dist/cli/chunks/{memory-WB5BNBK7.js → memory-Y65EHG6N.js} +5 -5
  215. package/dist/cli/chunks/memory-backend-BI2V5AAB.js +2 -0
  216. package/dist/cli/chunks/memory-handlers-NSOFWVFN.js +2 -0
  217. package/dist/cli/chunks/{multi-model-executor-3X3W3UTY.js → multi-model-executor-VRPRFUZT.js} +2 -2
  218. package/dist/cli/chunks/{opencode-installer-TTTMG7ZZ.js → opencode-installer-CKQXPM5R.js} +3 -3
  219. package/dist/cli/chunks/{orchestrator-BLCGSHMZ.js → orchestrator-I7JBKD6G.js} +8 -8
  220. package/dist/cli/chunks/{pipeline-DZPGMRG7.js → pipeline-MV2RWCBI.js} +2 -2
  221. package/dist/cli/chunks/{platform-EVMZAUNV.js → platform-VU5P3SOG.js} +2 -2
  222. package/dist/cli/chunks/{plugin-OR55K4HT.js → plugin-6TERLKCB.js} +2 -2
  223. package/dist/cli/chunks/{prime-radiant-advanced-wasm-4ODV27HD.js → prime-radiant-advanced-wasm-WIUIN2DL.js} +2 -2
  224. package/dist/cli/chunks/protocol-executor-2UPB7SPI.js +2 -0
  225. package/dist/cli/chunks/{protocol-handler-ZOTI5PID.js → protocol-handler-HKWBGARO.js} +2 -2
  226. package/dist/cli/chunks/{prove-DIMBYJ7V.js → prove-7CQPHBRJ.js} +2 -2
  227. package/dist/cli/chunks/provider-manager-PDT37MIJ.js +2 -0
  228. package/dist/cli/chunks/qe-reasoning-bank-AQQ2BI4V.js +2 -0
  229. package/dist/cli/chunks/{quality-7MX4VL6M.js → quality-VLUVXKVG.js} +2 -2
  230. package/dist/cli/chunks/queen-coordinator-6DVDVEU4.js +2 -0
  231. package/dist/cli/chunks/{real-embeddings-YPUHWRN2.js → real-embeddings-JPZ64KK2.js} +2 -2
  232. package/dist/cli/chunks/{roocode-installer-WG5AU4QM.js → roocode-installer-NONVB3UE.js} +2 -2
  233. package/dist/cli/chunks/router-O2G4KQ6L.js +2 -0
  234. package/dist/cli/chunks/routing-feedback-TAGTD3KQ.js +2 -0
  235. package/dist/cli/chunks/{routing-handler-LZB4MN2K.js → routing-handler-YYXDT4J2.js} +2 -2
  236. package/dist/cli/chunks/{ruvector-commands-YE4ADBMC.js → ruvector-commands-5PFMNDLR.js} +2 -2
  237. package/dist/cli/chunks/{rvf-dual-writer-QS5ATW4C.js → rvf-dual-writer-TF6H7AXH.js} +2 -2
  238. package/dist/cli/chunks/{rvf-migration-adapter-YIGKSBD3.js → rvf-migration-adapter-VNGIUZCO.js} +2 -2
  239. package/dist/cli/chunks/{rvf-migration-coordinator-2NDCWP7F.js → rvf-migration-coordinator-VA52YAIY.js} +2 -2
  240. package/dist/cli/chunks/rvf-native-adapter-46GRWQJR.js +2 -0
  241. package/dist/cli/chunks/safe-db-LNIPXXHH.js +2 -0
  242. package/dist/cli/chunks/schedule-AUH3ZALY.js +2 -0
  243. package/dist/cli/chunks/scheduler-KK3OYPWW.js +2 -0
  244. package/dist/cli/chunks/{security-HT4SUT24.js → security-62HEETBF.js} +3 -3
  245. package/dist/cli/chunks/{shared-rvf-adapter-4IZOJL33.js → shared-rvf-adapter-XWTQPGCT.js} +2 -2
  246. package/dist/cli/chunks/{shared-rvf-dual-writer-ZKFO7CBY.js → shared-rvf-dual-writer-JTZK7LRD.js} +2 -2
  247. package/dist/cli/chunks/sqlite-persistence-CYESP7NG.js +2 -0
  248. package/dist/cli/chunks/{status-handler-AMEMKBI4.js → status-handler-LSUPUKRF.js} +2 -2
  249. package/dist/cli/chunks/{structural-health-RBADRLC3.js → structural-health-Z75A666N.js} +2 -2
  250. package/dist/cli/chunks/{sync-PCB23M4K.js → sync-M3O4T3A3.js} +2 -2
  251. package/dist/cli/chunks/{sync-ARDDLQBS.js → sync-VI37UHHH.js} +2 -2
  252. package/dist/cli/chunks/{task-handler-J26FSCH5.js → task-handler-AQBSZAQC.js} +2 -2
  253. package/dist/cli/chunks/{task-handlers-AQRLR6BL.js → task-handlers-BOZP247V.js} +3 -3
  254. package/dist/cli/chunks/{test-YXWSIOSB.js → test-FTEGPNN2.js} +4 -4
  255. package/dist/cli/chunks/{test-scheduling-XY532GI4.js → test-scheduling-IGR4U2VQ.js} +4 -4
  256. package/dist/cli/chunks/{token-bootstrap-KL2QIQ36.js → token-bootstrap-2DFRVMBM.js} +2 -2
  257. package/dist/cli/chunks/{token-usage-2MJVE4DT.js → token-usage-VCHV47EO.js} +3 -3
  258. package/dist/cli/chunks/{transformers-QSNTOD2Z.js → transformers-M27QSNFH.js} +2 -2
  259. package/dist/cli/chunks/tree-sitter-wasm-parser-IIGEJYFU.js +2 -0
  260. package/dist/cli/chunks/{types-RNKRSYMO.js → types-RQFPUUKA.js} +2 -2
  261. package/dist/cli/chunks/unified-memory-RISHEANP.js +2 -0
  262. package/dist/cli/chunks/unified-memory-hnsw-2IKXGMNZ.js +2 -0
  263. package/dist/cli/chunks/unified-persistence-ZTTUJNTU.js +2 -0
  264. package/dist/cli/chunks/{upgrade-EKJHIFWP.js → upgrade-VJMYX3AL.js} +2 -2
  265. package/dist/cli/chunks/{validate-KS4T7LWC.js → validate-ML7HUAU5.js} +4 -4
  266. package/dist/cli/chunks/{validate-swarm-SKKWRP2H.js → validate-swarm-RCR6EYRC.js} +7 -7
  267. package/dist/cli/chunks/{vibium-FLUQO4IF.js → vibium-ZOOS3W5L.js} +2 -2
  268. package/dist/cli/chunks/visual-security-D66DTAO5.js +2 -0
  269. package/dist/cli/chunks/{web-tree-sitter-UMC63DWD.js → web-tree-sitter-2YPGYLWK.js} +2 -2
  270. package/dist/cli/chunks/{windsurf-installer-V3FQGJIQ.js → windsurf-installer-GOJWUWC5.js} +2 -2
  271. package/dist/cli/chunks/{witness-chain-GE74TLSO.js → witness-chain-3MGSS3Q4.js} +2 -2
  272. package/dist/cli/chunks/witness-chain-RHWHHDLV.js +2 -0
  273. package/dist/cli/chunks/{workflow-4YZ2RPWA.js → workflow-B5Q77BI4.js} +4 -4
  274. package/dist/cli/chunks/workflow-orchestrator-OQMFW2TC.js +2 -0
  275. package/dist/cli/chunks/{wrappers-37NLMKPE.js → wrappers-MM5VLEPG.js} +2 -2
  276. package/dist/cli/commands/code.js +6 -0
  277. package/dist/cli/commands/learning.js +5 -5
  278. package/dist/cli/commands/llm-router.js +1 -1
  279. package/dist/cli/commands/workflow.js +1 -0
  280. package/dist/coordination/consensus/providers/native-learning-provider.d.ts +1 -1
  281. package/dist/coordination/consensus/providers/ollama-provider.d.ts +1 -1
  282. package/dist/coordination/consensus/providers/openrouter-provider.d.ts +1 -1
  283. package/dist/coordination/handlers/code-intelligence-handlers.js +6 -0
  284. package/dist/coordination/mincut/neural-goap.js +24 -20
  285. package/dist/coordination/protocols/code-intelligence-index.js +31 -25
  286. package/dist/coordination/queen-coordinator.js +4 -0
  287. package/dist/coordination/queen-work-stealing.js +1 -2
  288. package/dist/domains/chaos-resilience/coordinator.js +19 -15
  289. package/dist/domains/chaos-resilience/services/chaos-engineer.js +5 -2
  290. package/dist/domains/chaos-resilience/services/load-tester.js +15 -11
  291. package/dist/domains/code-intelligence/interfaces.d.ts +5 -0
  292. package/dist/domains/code-intelligence/services/c4-model/index.js +12 -6
  293. package/dist/domains/code-intelligence/services/impact-analyzer.js +6 -2
  294. package/dist/domains/code-intelligence/services/knowledge-graph.d.ts +42 -0
  295. package/dist/domains/code-intelligence/services/knowledge-graph.js +278 -93
  296. package/dist/domains/code-intelligence/services/semantic-analyzer.js +8 -2
  297. package/dist/domains/contract-testing/coordinator.js +1 -1
  298. package/dist/domains/coverage-analysis/coordinator.js +4 -2
  299. package/dist/domains/learning-optimization/coordinator.js +1 -0
  300. package/dist/domains/quality-assessment/coherence/gate-controller.js +32 -26
  301. package/dist/domains/requirements-validation/coordinator.js +1 -0
  302. package/dist/domains/test-execution/services/e2e/wait-condition-handler.js +1 -1
  303. package/dist/domains/test-execution/services/retry-handler.js +18 -12
  304. package/dist/domains/test-generation/coordinator.js +1 -1
  305. package/dist/domains/test-generation/services/pattern-matcher.js +7 -5
  306. package/dist/domains/test-generation/services/test-generator.js +3 -2
  307. package/dist/domains/visual-accessibility/coordinator.js +24 -20
  308. package/dist/index.d.ts +2 -2
  309. package/dist/index.js +2 -2
  310. package/dist/init/phases/12-verification.js +3 -3
  311. package/dist/integrations/agentic-flow/model-router/router.js +1 -1
  312. package/dist/integrations/embeddings/base/EmbeddingGenerator.js +11 -7
  313. package/dist/integrations/ruvector/hypergraph-engine.js +2 -2
  314. package/dist/integrations/ruvector/spectral-math.js +2 -2
  315. package/dist/integrations/ruvector/spectral-sparsifier.js +1 -1
  316. package/dist/kernel/kernel.js +1 -1
  317. package/dist/kernel/unified-memory-hnsw.js +1 -0
  318. package/dist/learning/experience-capture.js +1 -1
  319. package/dist/learning/qe-reasoning-bank.js +9 -1
  320. package/dist/learning/qe-unified-memory.js +8 -6
  321. package/dist/mcp/bundle.js +354 -354
  322. package/dist/mcp/handlers/core-handlers.js +2 -2
  323. package/dist/mcp/handlers/cross-phase-handlers.js +5 -3
  324. package/dist/mcp/handlers/handler-factory.d.ts +5 -0
  325. package/dist/mcp/handlers/handler-factory.js +44 -4
  326. package/dist/mcp/http-server.js +1 -0
  327. package/dist/mcp/protocol-server.js +2 -2
  328. package/dist/mcp/tools/code-intelligence/analyze.js +1 -1
  329. package/dist/mcp/tools/learning-optimization/optimize.js +1 -1
  330. package/dist/mcp/tools/qx-analysis/heuristics-engine.js +195 -173
  331. package/dist/mcp/tools/visual-accessibility/index.js +1 -1
  332. package/dist/mcp/transport/websocket/websocket-transport.js +1 -0
  333. package/dist/optimization/auto-tuner.js +1 -1
  334. package/dist/planning/goap-planner.js +1 -0
  335. package/dist/routing/agent-dependency-graph.js +4 -1
  336. package/dist/shared/llm/router/config-store.js +1 -1
  337. package/dist/shared/metrics/system-metrics.js +6 -4
  338. package/dist/shared/parsers/tree-sitter-wasm-parser.d.ts +12 -0
  339. package/dist/shared/parsers/tree-sitter-wasm-parser.js +35 -0
  340. package/dist/shared/parsers/treesitter-ts-extractor.d.ts +39 -0
  341. package/dist/shared/parsers/treesitter-ts-extractor.js +196 -0
  342. package/dist/shared/utils/safe-expression-evaluator.js +8 -5
  343. package/dist/sync/cloud/postgres-writer.js +2 -0
  344. package/dist/sync/readers/json-reader.js +1 -1
  345. package/dist/test-scheduling/git-aware/test-selector.js +1 -1
  346. package/dist/workers/quality-daemon/index.js +26 -24
  347. package/package.json +5 -4
  348. package/dist/cli/chunks/adapter-CR6J5C76.js +0 -2
  349. package/dist/cli/chunks/aqe-learning-engine-2MNTHMB6.js +0 -2
  350. package/dist/cli/chunks/base-AOQNGMTL.js +0 -2
  351. package/dist/cli/chunks/browser-workflow-UJ4A2ZXO.js +0 -2
  352. package/dist/cli/chunks/chunk-FO73PZVU.js +0 -2
  353. package/dist/cli/chunks/chunk-I677W5BT.js +0 -59
  354. package/dist/cli/chunks/chunk-IAZEDWRX.js +0 -2
  355. package/dist/cli/chunks/client-RDPWGOSA.js +0 -2
  356. package/dist/cli/chunks/cross-domain-router-4K5ZVZEZ.js +0 -2
  357. package/dist/cli/chunks/dream-RPNWM7VS.js +0 -2
  358. package/dist/cli/chunks/heartbeat-scheduler-JBCXMMZO.js +0 -2
  359. package/dist/cli/chunks/hnsw-adapter-3SC2HZIG.js +0 -2
  360. package/dist/cli/chunks/hnsw-index-FQORAR6K.js +0 -2
  361. package/dist/cli/chunks/hybrid-router-6CBFDXPR.js +0 -2
  362. package/dist/cli/chunks/impact-analyzer-SOEFVZWG.js +0 -2
  363. package/dist/cli/chunks/init-wizard-3E4IU5M4.js +0 -2
  364. package/dist/cli/chunks/kernel-GFZP4G5J.js +0 -2
  365. package/dist/cli/chunks/knowledge-graph-BKRKBU26.js +0 -2
  366. package/dist/cli/chunks/llm-router-service-KE4IGZPP.js +0 -2
  367. package/dist/cli/chunks/load-test-VSYJV2AO.js +0 -2
  368. package/dist/cli/chunks/memory-backend-B72RGHRF.js +0 -2
  369. package/dist/cli/chunks/memory-handlers-NWCH7AUO.js +0 -2
  370. package/dist/cli/chunks/protocol-executor-V3F37FPO.js +0 -2
  371. package/dist/cli/chunks/provider-manager-2PN72TT6.js +0 -2
  372. package/dist/cli/chunks/qe-reasoning-bank-P665QNIR.js +0 -2
  373. package/dist/cli/chunks/queen-coordinator-XD4F7BGB.js +0 -2
  374. package/dist/cli/chunks/router-4SSNWDJC.js +0 -2
  375. package/dist/cli/chunks/routing-feedback-O2JSIBW6.js +0 -2
  376. package/dist/cli/chunks/rvf-native-adapter-WIUHYXRB.js +0 -2
  377. package/dist/cli/chunks/safe-db-WL5Y7ZNS.js +0 -2
  378. package/dist/cli/chunks/schedule-U7QDGU5A.js +0 -2
  379. package/dist/cli/chunks/scheduler-LXKGQYXA.js +0 -2
  380. package/dist/cli/chunks/sqlite-persistence-4KFO3SEB.js +0 -2
  381. package/dist/cli/chunks/tree-sitter-wasm-parser-QJOKHOIW.js +0 -2
  382. package/dist/cli/chunks/unified-memory-7AS4LIEF.js +0 -2
  383. package/dist/cli/chunks/unified-memory-hnsw-GREESNJX.js +0 -2
  384. package/dist/cli/chunks/unified-persistence-BPJOMZOA.js +0 -2
  385. package/dist/cli/chunks/visual-security-BW662FHQ.js +0 -2
  386. package/dist/cli/chunks/witness-chain-OXVDLNVT.js +0 -2
  387. package/dist/cli/chunks/workflow-orchestrator-KKNR46XV.js +0 -2
@@ -60,6 +60,7 @@ class MinHeap {
60
60
  }
61
61
  sinkDown(i) {
62
62
  const n = this.data.length;
63
+ // eslint-disable-next-line no-constant-condition -- heap sift-down; loop breaks internally
63
64
  while (true) {
64
65
  let smallest = i;
65
66
  const left = 2 * i + 1;
@@ -98,7 +98,10 @@ export function parseDependenciesFromFrontmatter(content) {
98
98
  const listStart = trimmed.match(/^-\s+(\w+):\s*(.*)$/);
99
99
  if (listStart) {
100
100
  if (st.inList) {
101
- st.section === 'agents' ? flushAgent() : flushMcp();
101
+ if (st.section === 'agents')
102
+ flushAgent();
103
+ else
104
+ flushMcp();
102
105
  }
103
106
  st.inList = true;
104
107
  st.item = { [listStart[1]]: parseYamlValue(listStart[2]) };
@@ -148,7 +148,7 @@ function stripApiKeys(config) {
148
148
  return JSON.parse(JSON.stringify(config));
149
149
  }
150
150
  const cloned = JSON.parse(JSON.stringify(config));
151
- let strippedProviders = [];
151
+ const strippedProviders = [];
152
152
  if (cloned.providers) {
153
153
  for (const provider of Object.keys(cloned.providers)) {
154
154
  const entry = cloned.providers[provider];
@@ -127,10 +127,12 @@ export class SystemMetricsCollector {
127
127
  return metrics.cpu.loadAverage[2];
128
128
  default:
129
129
  // For unknown metrics, return from history or 0
130
- const history = this.metricHistory.get(metricName);
131
- return history && history.length > 0
132
- ? history[history.length - 1].value
133
- : 0;
130
+ {
131
+ const history = this.metricHistory.get(metricName);
132
+ return history && history.length > 0
133
+ ? history[history.length - 1].value
134
+ : 0;
135
+ }
134
136
  }
135
137
  }
136
138
  /**
@@ -12,6 +12,7 @@
12
12
  */
13
13
  import type { SupportedLanguage } from '../types/test-frameworks.js';
14
14
  import type { ILanguageParser, ParsedFile } from './interfaces.js';
15
+ type SyntaxNode = any;
15
16
  export declare class TreeSitterWASMParser implements ILanguageParser {
16
17
  readonly language: SupportedLanguage;
17
18
  readonly supportedExtensions: string[];
@@ -25,8 +26,19 @@ export declare function createWasmParsers(): Map<SupportedLanguage, ILanguagePar
25
26
  * Returns true if the dependency is installed; does NOT initialize WASM.
26
27
  */
27
28
  export declare function isWasmAvailable(): boolean;
29
+ /**
30
+ * Generic grammar loader for callers outside the GRAMMAR_CONFIG set (e.g. the
31
+ * code-intelligence TS/JS extractor). Reuses the proven WASM init + grammar
32
+ * path resolution. Returns a `parse(code)` that yields a tree-sitter tree
33
+ * (caller must call `tree.delete()`), or null if WASM/grammar is unavailable so
34
+ * the caller can fall back.
35
+ */
36
+ export declare function loadWasmGrammar(wasmFile: string): Promise<{
37
+ parse: (code: string) => SyntaxNode;
38
+ } | null>;
28
39
  /**
29
40
  * Reset internal state — for testing only.
30
41
  */
31
42
  export declare function _resetWasmState(): void;
43
+ export {};
32
44
  //# sourceMappingURL=tree-sitter-wasm-parser.d.ts.map
@@ -1027,6 +1027,41 @@ export function isWasmAvailable() {
1027
1027
  return false;
1028
1028
  }
1029
1029
  }
1030
+ // Cache of loaded grammars keyed by wasm filename, for the generic loader below.
1031
+ const loadedGrammarsByFile = new Map();
1032
+ /**
1033
+ * Generic grammar loader for callers outside the GRAMMAR_CONFIG set (e.g. the
1034
+ * code-intelligence TS/JS extractor). Reuses the proven WASM init + grammar
1035
+ * path resolution. Returns a `parse(code)` that yields a tree-sitter tree
1036
+ * (caller must call `tree.delete()`), or null if WASM/grammar is unavailable so
1037
+ * the caller can fall back.
1038
+ */
1039
+ export async function loadWasmGrammar(wasmFile) {
1040
+ if (!isWasmAvailable())
1041
+ return null;
1042
+ try {
1043
+ await ensureTreeSitterInit();
1044
+ let language = loadedGrammarsByFile.get(wasmFile);
1045
+ if (!language) {
1046
+ language = await treeSitterModule.Language.load(resolveGrammarPath(wasmFile));
1047
+ loadedGrammarsByFile.set(wasmFile, language);
1048
+ }
1049
+ return {
1050
+ parse: (code) => {
1051
+ // New parser per call (cheap) to avoid cross-call setLanguage races.
1052
+ const ParserCtor = treeSitterModule.Parser ?? treeSitterModule;
1053
+ const parser = new ParserCtor();
1054
+ parser.setLanguage(language);
1055
+ const tree = parser.parse(code);
1056
+ parser.delete?.();
1057
+ return tree;
1058
+ },
1059
+ };
1060
+ }
1061
+ catch {
1062
+ return null;
1063
+ }
1064
+ }
1030
1065
  /**
1031
1066
  * Reset internal state — for testing only.
1032
1067
  */
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Tree-sitter TypeScript/JavaScript extractor for code-intelligence.
3
+ *
4
+ * Extracts functions, classes (+ methods), interfaces and imports from TS/JS/TSX
5
+ * source using bundled tree-sitter WASM grammars — so code-intelligence works
6
+ * WITHOUT the multi-megabyte `typescript` compiler dependency (#511).
7
+ *
8
+ * The KnowledgeGraphService uses this as a fallback when the TypeScript compiler
9
+ * API isn't available. Returns `null` when WASM/grammar can't load so the caller
10
+ * can degrade gracefully.
11
+ */
12
+ export interface TsFunction {
13
+ name: string;
14
+ startLine: number;
15
+ isAsync: boolean;
16
+ visibility: 'public' | 'private' | 'protected';
17
+ }
18
+ export interface TsClass {
19
+ name: string;
20
+ startLine: number;
21
+ methods: TsFunction[];
22
+ }
23
+ export interface TsInterface {
24
+ name: string;
25
+ startLine: number;
26
+ }
27
+ export interface TsExtraction {
28
+ functions: TsFunction[];
29
+ classes: TsClass[];
30
+ interfaces: TsInterface[];
31
+ imports: string[];
32
+ }
33
+ export declare function isTreeSitterTsExtension(ext: string): boolean;
34
+ /**
35
+ * Extract entities/imports from TS/JS/TSX source. Returns null if the grammar
36
+ * could not be loaded (WASM unavailable) so callers can fall back.
37
+ */
38
+ export declare function extractTsJs(content: string, extension: string): Promise<TsExtraction | null>;
39
+ //# sourceMappingURL=treesitter-ts-extractor.d.ts.map
@@ -0,0 +1,196 @@
1
+ /**
2
+ * Tree-sitter TypeScript/JavaScript extractor for code-intelligence.
3
+ *
4
+ * Extracts functions, classes (+ methods), interfaces and imports from TS/JS/TSX
5
+ * source using bundled tree-sitter WASM grammars — so code-intelligence works
6
+ * WITHOUT the multi-megabyte `typescript` compiler dependency (#511).
7
+ *
8
+ * The KnowledgeGraphService uses this as a fallback when the TypeScript compiler
9
+ * API isn't available. Returns `null` when WASM/grammar can't load so the caller
10
+ * can degrade gracefully.
11
+ */
12
+ import { loadWasmGrammar } from './tree-sitter-wasm-parser.js';
13
+ /** Map a file extension to its grammar wasm file. */
14
+ function grammarFor(ext) {
15
+ switch (ext) {
16
+ case 'ts':
17
+ case 'mts':
18
+ case 'cts':
19
+ return 'tree-sitter-typescript.wasm';
20
+ case 'tsx':
21
+ return 'tree-sitter-tsx.wasm';
22
+ case 'js':
23
+ case 'jsx':
24
+ case 'mjs':
25
+ case 'cjs':
26
+ return 'tree-sitter-javascript.wasm';
27
+ default:
28
+ return null;
29
+ }
30
+ }
31
+ export function isTreeSitterTsExtension(ext) {
32
+ return grammarFor(ext) !== null;
33
+ }
34
+ const line = (n) => n.startPosition.row + 1;
35
+ const fieldText = (n, field) => n.childForFieldName(field)?.text ?? '';
36
+ /** Whether a declaration node begins with the `async` keyword. */
37
+ function isAsync(n) {
38
+ for (let i = 0; i < n.childCount; i++) {
39
+ const c = n.child(i);
40
+ if (!c)
41
+ continue;
42
+ if (c.type === 'async')
43
+ return true;
44
+ // keyword precedes the function/method keyword; stop once we pass it
45
+ if (c.type === 'function' || c.type === 'function_declaration')
46
+ break;
47
+ }
48
+ return false;
49
+ }
50
+ function methodVisibility(n) {
51
+ for (let i = 0; i < n.childCount; i++) {
52
+ const t = n.child(i)?.type;
53
+ if (t === 'accessibility_modifier') {
54
+ const text = n.child(i).text;
55
+ if (text === 'private')
56
+ return 'private';
57
+ if (text === 'protected')
58
+ return 'protected';
59
+ }
60
+ }
61
+ return 'public';
62
+ }
63
+ function extractClass(node) {
64
+ const name = fieldText(node, 'name') || '(anonymous)';
65
+ const body = node.childForFieldName('body');
66
+ const methods = [];
67
+ if (body) {
68
+ for (let i = 0; i < body.childCount; i++) {
69
+ const m = body.child(i);
70
+ if (m && m.type === 'method_definition') {
71
+ methods.push({
72
+ name: fieldText(m, 'name'),
73
+ startLine: line(m),
74
+ isAsync: isAsync(m),
75
+ visibility: methodVisibility(m),
76
+ });
77
+ }
78
+ }
79
+ }
80
+ return { name, startLine: line(node), methods };
81
+ }
82
+ /** Strip surrounding quotes from an import source literal. */
83
+ function unquote(s) {
84
+ return s.replace(/^['"`]|['"`]$/g, '');
85
+ }
86
+ /**
87
+ * Extract entities/imports from TS/JS/TSX source. Returns null if the grammar
88
+ * could not be loaded (WASM unavailable) so callers can fall back.
89
+ */
90
+ export async function extractTsJs(content, extension) {
91
+ const wasmFile = grammarFor(extension);
92
+ if (!wasmFile)
93
+ return null;
94
+ const grammar = await loadWasmGrammar(wasmFile);
95
+ if (!grammar)
96
+ return null;
97
+ let tree = null;
98
+ try {
99
+ const parsed = grammar.parse(content);
100
+ tree = parsed;
101
+ const root = parsed.rootNode;
102
+ if (!root)
103
+ return null;
104
+ const out = { functions: [], classes: [], interfaces: [], imports: [] };
105
+ // Iterative walk. We do NOT recurse into function/class bodies (entities are
106
+ // top-level / exported; methods are collected with their class).
107
+ const stack = [root];
108
+ while (stack.length) {
109
+ const node = stack.pop();
110
+ let recurse = true;
111
+ switch (node.type) {
112
+ case 'function_declaration':
113
+ case 'generator_function_declaration':
114
+ out.functions.push({
115
+ name: fieldText(node, 'name'),
116
+ startLine: line(node),
117
+ isAsync: isAsync(node),
118
+ visibility: 'public',
119
+ });
120
+ recurse = false;
121
+ break;
122
+ case 'class_declaration':
123
+ case 'class':
124
+ out.classes.push(extractClass(node));
125
+ recurse = false;
126
+ break;
127
+ case 'interface_declaration':
128
+ out.interfaces.push({ name: fieldText(node, 'name'), startLine: line(node) });
129
+ recurse = false;
130
+ break;
131
+ case 'lexical_declaration':
132
+ case 'variable_declaration': {
133
+ // const/let foo = () => {} | function() {} → treat as a function
134
+ for (let i = 0; i < node.childCount; i++) {
135
+ const d = node.child(i);
136
+ if (!d || d.type !== 'variable_declarator')
137
+ continue;
138
+ const value = d.childForFieldName('value');
139
+ if (value && (value.type === 'arrow_function' ||
140
+ value.type === 'function' ||
141
+ value.type === 'function_expression')) {
142
+ out.functions.push({
143
+ name: fieldText(d, 'name'),
144
+ startLine: line(d),
145
+ isAsync: isAsync(value),
146
+ visibility: 'public',
147
+ });
148
+ }
149
+ else if (value && value.type === 'call_expression' &&
150
+ value.child(0)?.text === 'require') {
151
+ // const x = require('y')
152
+ const arg = value.childForFieldName('arguments')?.child(1);
153
+ if (arg && arg.type === 'string')
154
+ out.imports.push(unquote(arg.text));
155
+ }
156
+ }
157
+ recurse = false;
158
+ break;
159
+ }
160
+ case 'import_statement': {
161
+ const src = node.childForFieldName('source');
162
+ if (src)
163
+ out.imports.push(unquote(src.text));
164
+ recurse = false;
165
+ break;
166
+ }
167
+ case 'call_expression': {
168
+ // require('x')
169
+ const fn = node.child(0);
170
+ if (fn && fn.text === 'require') {
171
+ const args = node.childForFieldName('arguments');
172
+ const arg = args?.child(1); // ( <string> )
173
+ if (arg && (arg.type === 'string'))
174
+ out.imports.push(unquote(arg.text));
175
+ }
176
+ break;
177
+ }
178
+ }
179
+ if (recurse) {
180
+ for (let i = node.childCount - 1; i >= 0; i--) {
181
+ const c = node.child(i);
182
+ if (c)
183
+ stack.push(c);
184
+ }
185
+ }
186
+ }
187
+ return out;
188
+ }
189
+ catch {
190
+ return null;
191
+ }
192
+ finally {
193
+ tree?.delete?.();
194
+ }
195
+ }
196
+ //# sourceMappingURL=treesitter-ts-extractor.js.map
@@ -192,6 +192,7 @@ class Parser {
192
192
  }
193
193
  parseExpression(minPrecedence) {
194
194
  let left = this.parseUnary();
195
+ // eslint-disable-next-line no-constant-condition -- tokenizer loop; breaks internally
195
196
  while (true) {
196
197
  const token = this.current();
197
198
  if (token.type !== 'OPERATOR' || !BINARY_OPERATORS.has(token.value)) {
@@ -229,17 +230,19 @@ class Parser {
229
230
  case 'IDENTIFIER':
230
231
  return this.parseIdentifier();
231
232
  case 'LPAREN':
232
- this.advance();
233
- const result = this.parseExpression(0);
234
- this.expect('RPAREN');
235
- return result;
233
+ {
234
+ this.advance();
235
+ const result = this.parseExpression(0);
236
+ this.expect('RPAREN');
237
+ return result;
238
+ }
236
239
  default:
237
240
  throw new Error(`Unexpected token: ${token.raw}`);
238
241
  }
239
242
  }
240
243
  parseIdentifier() {
241
244
  let value = this.context;
242
- let name = this.advance().value;
245
+ const name = this.advance().value;
243
246
  // Get initial value from context
244
247
  if (typeof value === 'object' && value !== null && name in value) {
245
248
  value = value[name];
@@ -285,6 +285,7 @@ export class PostgresWriter {
285
285
  let jsonStr = JSON.stringify(value);
286
286
  if (columnName && this.isJsonbColumn(columnName)) {
287
287
  // Remove NUL chars (PostgreSQL JSONB rejects \u0000)
288
+ // eslint-disable-next-line no-control-regex -- NUL stripping required: PostgreSQL JSONB rejects \u0000
288
289
  jsonStr = jsonStr.replace(/\u0000/g, '');
289
290
  try {
290
291
  JSON.parse(jsonStr);
@@ -316,6 +317,7 @@ export class PostgresWriter {
316
317
  }
317
318
  // JSONB columns: validate JSON, sanitize NUL chars, wrap if invalid
318
319
  if (columnName && this.isJsonbColumn(columnName)) {
320
+ // eslint-disable-next-line no-control-regex -- NUL stripping required: PostgreSQL JSONB rejects \u0000
319
321
  const sanitized = value.replace(/\u0000/g, '');
320
322
  try {
321
323
  JSON.parse(sanitized);
@@ -50,7 +50,7 @@ export class JSONReader {
50
50
  const content = fs.readFileSync(this.filePath, 'utf-8');
51
51
  const parsed = secureJsonParse.parse(content);
52
52
  // Extract data based on JSON path if specified
53
- let records = this.extractRecords(parsed);
53
+ const records = this.extractRecords(parsed);
54
54
  // Transform records
55
55
  return records.map(record => this.transformRecord(record));
56
56
  }
@@ -191,7 +191,7 @@ export class GitAwareTestSelector {
191
191
  async mapChangesToTests(changedFiles) {
192
192
  const selectedTests = [];
193
193
  const mappings = [];
194
- let runAllTests = false;
194
+ const runAllTests = false;
195
195
  let runAllReason;
196
196
  // Check for config file changes first - these require full test run
197
197
  for (const file of changedFiles) {
@@ -185,35 +185,37 @@ export class QualityDaemon {
185
185
  const payload = item.payload;
186
186
  switch (payload.type) {
187
187
  case 'git_commit':
188
- this._commitsAnalyzed++;
189
- // Trigger coverage analysis for changed files
190
- const snapshot = await this.coverageDelta.buildSnapshot(memory);
191
- if (snapshot) {
192
- const delta = await this.coverageDelta.analyze(snapshot, memory, payload.changedFiles);
193
- if (delta.regressionDetected) {
194
- await this.notificationService.send({
195
- type: 'coverage_drop',
196
- title: 'Coverage Regression Detected',
197
- message: `Line coverage delta: ${delta.overallDelta.line.toFixed(1)}% (${delta.affectedFiles.length} files affected)`,
198
- severity: 'high',
199
- metadata: { delta: delta.overallDelta, commit: payload.commitHash },
200
- });
201
- }
202
- if (delta.newGaps.length > 0) {
203
- const suggestions = await this.testSuggester.suggest(delta.newGaps, payload.changedFiles, memory);
204
- this._suggestionsGenerated += suggestions.length;
205
- if (suggestions.length > 0) {
188
+ {
189
+ this._commitsAnalyzed++;
190
+ // Trigger coverage analysis for changed files
191
+ const snapshot = await this.coverageDelta.buildSnapshot(memory);
192
+ if (snapshot) {
193
+ const delta = await this.coverageDelta.analyze(snapshot, memory, payload.changedFiles);
194
+ if (delta.regressionDetected) {
206
195
  await this.notificationService.send({
207
- type: 'suggestion_available',
208
- title: 'New Test Suggestions Available',
209
- message: `${suggestions.length} test suggestions generated for uncovered code`,
210
- severity: 'info',
211
- metadata: { count: suggestions.length },
196
+ type: 'coverage_drop',
197
+ title: 'Coverage Regression Detected',
198
+ message: `Line coverage delta: ${delta.overallDelta.line.toFixed(1)}% (${delta.affectedFiles.length} files affected)`,
199
+ severity: 'high',
200
+ metadata: { delta: delta.overallDelta, commit: payload.commitHash },
212
201
  });
213
202
  }
203
+ if (delta.newGaps.length > 0) {
204
+ const suggestions = await this.testSuggester.suggest(delta.newGaps, payload.changedFiles, memory);
205
+ this._suggestionsGenerated += suggestions.length;
206
+ if (suggestions.length > 0) {
207
+ await this.notificationService.send({
208
+ type: 'suggestion_available',
209
+ title: 'New Test Suggestions Available',
210
+ message: `${suggestions.length} test suggestions generated for uncovered code`,
211
+ severity: 'info',
212
+ metadata: { count: suggestions.length },
213
+ });
214
+ }
215
+ }
214
216
  }
217
+ break;
215
218
  }
216
- break;
217
219
  case 'coverage_delta': {
218
220
  // coverage_delta items are enqueued by analyze() when regression/gaps
219
221
  // are found. The analysis itself was already completed by the
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agentic-qe",
3
- "version": "3.10.2",
3
+ "version": "3.10.3",
4
4
  "description": "Agentic Quality Engineering V3 - Domain-Driven Design Architecture with 13 Bounded Contexts, O(log n) coverage analysis, ReasoningBank learning, 60 specialized QE agents, mathematical Coherence verification, deep Claude Flow integration",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -139,13 +139,13 @@
139
139
  "author": "AQE Development Team",
140
140
  "license": "MIT",
141
141
  "dependencies": {
142
+ "@huggingface/transformers": "^4.2.0",
142
143
  "@ruvector/attention": "0.1.3",
143
144
  "@ruvector/gnn": "0.1.25",
144
145
  "@ruvector/learning-wasm": "^0.1.29",
145
146
  "@ruvector/router": "^0.1.28",
146
147
  "@ruvector/rvf-node": "^0.1.7",
147
148
  "@ruvector/sona": "0.1.5",
148
- "@huggingface/transformers": "^4.2.0",
149
149
  "axe-core": "^4.11.1",
150
150
  "better-sqlite3": "^12.5.0",
151
151
  "chalk": "^5.6.2",
@@ -176,7 +176,6 @@
176
176
  }
177
177
  },
178
178
  "optionalDependencies": {
179
- "hnswlib-node": "^3.0.0",
180
179
  "@ruvector/attention-darwin-arm64": "0.1.3",
181
180
  "@ruvector/attention-darwin-x64": "0.1.3",
182
181
  "@ruvector/attention-linux-arm64-gnu": "0.1.3",
@@ -190,6 +189,7 @@
190
189
  "@ruvector/gnn-linux-x64-gnu": "0.1.25",
191
190
  "@ruvector/gnn-linux-x64-musl": "npm:@ruvector/gnn-linux-x64-gnu@0.1.25",
192
191
  "@ruvector/tiny-dancer-linux-arm64-gnu": "^0.1.17",
192
+ "hnswlib-node": "^3.0.0",
193
193
  "rvlite": "^0.2.4"
194
194
  },
195
195
  "resolutions": {
@@ -211,6 +211,7 @@
211
211
  "@opentelemetry/exporter-prometheus": ">=0.217.0"
212
212
  },
213
213
  "devDependencies": {
214
+ "@claude-flow/guidance": "3.0.0-alpha.1",
214
215
  "@faker-js/faker": "^10.2.0",
215
216
  "@types/better-sqlite3": "^7.6.13",
216
217
  "@types/cli-progress": "^3.11.6",
@@ -218,13 +219,13 @@
218
219
  "@types/pg": "^8.16.0",
219
220
  "@types/uuid": "^10.0.0",
220
221
  "@types/ws": "^8.18.1",
221
- "@claude-flow/guidance": "3.0.0-alpha.1",
222
222
  "@typescript-eslint/eslint-plugin": "^8.59.3",
223
223
  "@typescript-eslint/parser": "^8.59.3",
224
224
  "@vitest/coverage-v8": "^4.0.16",
225
225
  "dotenv": "^17.2.3",
226
226
  "esbuild": "^0.28.0",
227
227
  "eslint": "^8.55.0",
228
+ "eslint-plugin-unused-imports": "^4.1.4",
228
229
  "glob": "^13.0.0",
229
230
  "msw": "^2.12.7",
230
231
  "tsx": "^4.21.0",
@@ -1,2 +0,0 @@
1
- import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.10.2");process.exit(0)}
2
- import{a,b,c}from"./chunk-NZO4WUSO.js";import"./chunk-AWFIEGR3.js";import"./chunk-HJORBNXW.js";import"./chunk-SW4OKUTC.js";import"./chunk-XPCNUX2U.js";import"./chunk-ORF2UKQH.js";export{a as AgentBoosterAdapter,b as createAgentBoosterAdapter,c as createAgentBoosterAdapterSync};
@@ -1,2 +0,0 @@
1
- import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.10.2");process.exit(0)}
2
- import{a,b,c,d,e,f}from"./chunk-EVCOCGVJ.js";import"./chunk-7Z46RDDV.js";import"./chunk-AV7KYE5P.js";import"./chunk-LQTWPSYL.js";import"./chunk-LZCBSFAU.js";import"./chunk-5PL7WTCU.js";import"./chunk-DMQPO43S.js";import"./chunk-THRTUW4Z.js";import"./chunk-ZGNZJJFF.js";import"./chunk-7DKYCVJI.js";import"./chunk-VSUTI4G6.js";import"./chunk-TJKDATEU.js";import"./chunk-SVYTN2GT.js";import"./chunk-AH7FXNFE.js";import"./chunk-L7VIX22Y.js";import"./chunk-5QHSLWLP.js";import"./chunk-SW4OKUTC.js";import"./chunk-CV2SBMBW.js";import"./chunk-IAZEDWRX.js";import"./chunk-JF53LRBL.js";import"./chunk-FPAW77XV.js";import"./chunk-XPCNUX2U.js";import"./chunk-AOI67HA3.js";import"./chunk-MCZHKXB4.js";import"./chunk-YI6GNRQM.js";import"./chunk-OXCEUR5F.js";import"./chunk-DRWGK3YO.js";import"./chunk-HHCYSAH3.js";import"./chunk-WNR2KAUH.js";import"./chunk-WDMPJ2M2.js";import"./chunk-IICTTDAA.js";import"./chunk-ON4D4TJ4.js";import"./chunk-ORF2UKQH.js";export{b as AQELearningEngine,a as DEFAULT_ENGINE_CONFIG,c as DEFAULT_META_LEARNING_CONFIG,d as MetaLearningEngine,e as createAQELearningEngine,f as createDefaultLearningEngine};
@@ -1,2 +0,0 @@
1
- import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.10.2");process.exit(0)}
2
- import{a,b,c,d,e,f,g,h,i,j}from"./chunk-UWXH2UQK.js";import"./chunk-G5U6Q42D.js";import"./chunk-L7VIX22Y.js";import"./chunk-5QHSLWLP.js";import"./chunk-SW4OKUTC.js";import"./chunk-IAZEDWRX.js";import"./chunk-JF53LRBL.js";import"./chunk-XPCNUX2U.js";import"./chunk-AOI67HA3.js";import"./chunk-MCZHKXB4.js";import"./chunk-YI6GNRQM.js";import"./chunk-OXCEUR5F.js";import"./chunk-DRWGK3YO.js";import"./chunk-HHCYSAH3.js";import"./chunk-WNR2KAUH.js";import"./chunk-WDMPJ2M2.js";import"./chunk-IICTTDAA.js";import"./chunk-ON4D4TJ4.js";import"./chunk-ORF2UKQH.js";export{j as MCPToolBase,i as defaultToolLogger,h as getLLMRouter,d as getMemoryBackend,f as getSharedLLMRouter,b as getSharedMemoryBackend,a as registerRvfResetFn,g as resetSharedLLMRouter,c as resetSharedMemoryBackend,e as setSharedLLMRouter};
@@ -1,2 +0,0 @@
1
- import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.10.2");process.exit(0)}
2
- import{a}from"./chunk-4F3ZTXHP.js";import"./chunk-UWXH2UQK.js";import"./chunk-G5U6Q42D.js";import"./chunk-L7VIX22Y.js";import"./chunk-5QHSLWLP.js";import"./chunk-SW4OKUTC.js";import"./chunk-IAZEDWRX.js";import"./chunk-JF53LRBL.js";import"./chunk-XPCNUX2U.js";import"./chunk-AOI67HA3.js";import"./chunk-MCZHKXB4.js";import"./chunk-YI6GNRQM.js";import"./chunk-OXCEUR5F.js";import"./chunk-DRWGK3YO.js";import"./chunk-HHCYSAH3.js";import"./chunk-WNR2KAUH.js";import"./chunk-WDMPJ2M2.js";import"./chunk-IICTTDAA.js";import"./chunk-ON4D4TJ4.js";import"./chunk-ORF2UKQH.js";export{a as BrowserWorkflowTool};
@@ -1,2 +0,0 @@
1
- import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.10.2");process.exit(0)}
2
- import{g}from"./chunk-I677W5BT.js";import{b as p,c as d}from"./chunk-FPAW77XV.js";import{b as m,c as f}from"./chunk-XPCNUX2U.js";import{i as h}from"./chunk-AOI67HA3.js";f();var I={maxDepth:5,riskWeights:{directImpact:.4,transitiveImpact:.2,testCoverage:.2,criticalPath:.15,dependencyCount:.05},testPatterns:["**/*.test.ts","**/*.test.tsx","**/*.spec.ts","**/*.spec.tsx","**/test_*.py","**/*_test.py","**/*_test.go"],criticalPaths:["**/auth/**","**/security/**","**/payment/**","**/api/**","**/core/**"],namespace:"code-intelligence:impact"},u=class{constructor(e,t,i={}){this.memory=e;this.config={...I,...i},this.knowledgeGraph=t||new g(e)}memory;config;knowledgeGraph;async analyzeImpact(e){try{let{changedFiles:t,depth:i=this.config.maxDepth,includeTests:n=!0}=e;if(t.length===0)return p({directImpact:[],transitiveImpact:[],impactedTests:[],riskLevel:"info",recommendations:[]});let r=await this.analyzeDirectImpact(t),l=await this.analyzeTransitiveImpact(t,r,i),s=[];if(n){let a=await this.getImpactedTests(t);a.success&&(s=a.value)}let c={directImpact:r,transitiveImpact:l,impactedTests:s,riskLevel:"info",recommendations:[]};return c.riskLevel=this.calculateRiskLevel(c),c.recommendations=this.getRecommendations(c),await this.storeAnalysis(t,c),p(c)}catch(t){return d(m(t))}}async getImpactedTests(e){try{let t=new Set;for(let i of e){if(this.isTestFile(i)){t.add(i);continue}let n=await this.knowledgeGraph.mapDependencies({files:[i],direction:"incoming",depth:3});if(n.success)for(let s of n.value.nodes)this.isTestFile(s.path)&&t.add(s.path);let r=this.getBaseName(i),l=[`${r}.test`,`${r}.spec`,`test_${r}`,`${r}_test`];for(let s of l){let c=await this.memory.search(`code-intelligence:kg:node:*${s}*`,10);for(let a of c){let o=await this.memory.get(a);o?.properties?.path&&this.isTestFile(o.properties.path)&&t.add(o.properties.path)}}}return p(Array.from(t))}catch(t){return d(m(t))}}calculateRiskLevel(e){let t=this.config.riskWeights,i=0,n=Math.min(1,e.directImpact.length/10);i+=n*t.directImpact;let r=Math.min(1,e.transitiveImpact.length/20);i+=r*t.transitiveImpact;let l=e.impactedTests.length>0?Math.max(0,1-e.impactedTests.length/(e.directImpact.length||1)):1;i+=l*t.testCoverage;let s=this.countCriticalFiles([...e.directImpact.map(o=>o.file),...e.transitiveImpact.map(o=>o.file)]),c=Math.min(1,s/5);i+=c*t.criticalPath;let a=this.calculateAverageRiskScore([...e.directImpact,...e.transitiveImpact]);return i+=a*t.dependencyCount,i>=.8?"critical":i>=.6?"high":i>=.4?"medium":i>=.2?"low":"info"}getRecommendations(e){let t=[];(e.riskLevel==="critical"||e.riskLevel==="high")&&t.push("This change has significant impact - consider peer review before merging"),e.impactedTests.length===0&&e.directImpact.length>0?t.push("No tests found for impacted files - add test coverage"):e.impactedTests.length<e.directImpact.length/2&&t.push("Test coverage appears low for impacted files"),e.impactedTests.length>0&&(e.impactedTests.length<=10?t.push(`Run these ${e.impactedTests.length} tests: ${e.impactedTests.slice(0,3).join(", ")}${e.impactedTests.length>3?"...":""}`):t.push(`Run all ${e.impactedTests.length} impacted tests before deployment`));let i=[...e.directImpact,...e.transitiveImpact].filter(r=>this.isCriticalPath(r.file));i.length>0&&t.push(`${i.length} critical path files affected - extra scrutiny recommended`),e.transitiveImpact.length>10&&t.push("Large transitive impact - consider breaking down into smaller changes");let n=[...e.directImpact,...e.transitiveImpact].filter(r=>r.riskScore>=.7);return n.length>0&&t.push(`${n.length} high-risk files impacted: ${n.slice(0,2).map(r=>this.getFileName(r.file)).join(", ")}`),t}async analyzeDirectImpact(e){let t=[];for(let i of e){let n=await this.knowledgeGraph.mapDependencies({files:[i],direction:"incoming",depth:1});if(n.success){let{nodes:r,edges:l}=n.value;for(let s of r){if(s.path===i)continue;let c=l.find(o=>o.target===s.id||o.source===s.id),a=this.calculateFileRiskScore(s.path,s.inDegree,s.outDegree);t.push({file:s.path,reason:`Directly ${c?.type||"depends on"} ${this.getFileName(i)}`,distance:1,riskScore:a})}}}return this.deduplicateImpact(t)}async analyzeTransitiveImpact(e,t,i){let n=[],r=new Set([...e,...t.map(s=>s.file)]),l=t.map(s=>({file:s.file,distance:1}));for(;l.length>0;){let s=l.shift();if(s.distance>=i)continue;let c=await this.knowledgeGraph.mapDependencies({files:[s.file],direction:"incoming",depth:1});if(c.success)for(let a of c.value.nodes){if(r.has(a.path)||a.path===s.file)continue;r.add(a.path);let o=this.calculateFileRiskScore(a.path,a.inDegree,a.outDegree,s.distance+1);n.push({file:a.path,reason:`Transitively depends via ${this.getFileName(s.file)}`,distance:s.distance+1,riskScore:o}),l.push({file:a.path,distance:s.distance+1})}}return this.deduplicateImpact(n)}calculateFileRiskScore(e,t,i,n=1){let r=0;return r+=Math.min(.3,t/20),r+=Math.min(.2,i/30),this.isCriticalPath(e)&&(r+=.3),this.isEntryPoint(e)&&(r+=.2),r=r*Math.pow(.8,n-1),Math.min(1,Math.max(0,r))}calculateAverageRiskScore(e){return e.length===0?0:e.reduce((i,n)=>i+n.riskScore,0)/e.length}countCriticalFiles(e){return e.filter(t=>this.isCriticalPath(t)).length}isTestFile(e){return[/\.test\.[tj]sx?$/,/\.spec\.[tj]sx?$/,/_test\.[tj]sx?$/,/test_.*\.py$/,/.*_test\.py$/,/.*_test\.go$/].some(i=>i.test(e))}isCriticalPath(e){return this.config.criticalPaths.map(i=>i.replace(/\*\*/g,".*").replace(/\*/g,"[^/]*")).some(i=>new RegExp(i).test(e))}isEntryPoint(e){return[/\/index\.[tj]sx?$/,/\/main\.[tj]sx?$/,/\/app\.[tj]sx?$/,/^src\/[^/]+\.[tj]sx?$/,/\/server\.[tj]sx?$/,/\/__init__\.py$/,/\/main\.go$/].some(i=>i.test(e))}getBaseName(e){return this.getFileName(e).replace(/\.[^.]+$/,"")}getFileName(e){return e.split(/[/\\]/).pop()||e}deduplicateImpact(e){let t=new Map;for(let i of e){let n=t.get(i.file);(!n||i.distance<n.distance)&&t.set(i.file,i)}return Array.from(t.values()).sort((i,n)=>n.riskScore!==i.riskScore?n.riskScore-i.riskScore:i.distance-n.distance)}async storeAnalysis(e,t){let i=h();await this.memory.set(`${this.config.namespace}:analysis:${i}`,{id:i,changedFiles:e,analysis:t,timestamp:new Date().toISOString()},{namespace:this.config.namespace,persist:!0})}};export{u as a};