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
@@ -9,6 +9,9 @@ import { FileReader } from '../../../shared/io';
9
9
  import { NomicEmbedder } from '../../../shared/embeddings';
10
10
  import { toErrorMessage, toError } from '../../../shared/error-utils.js';
11
11
  import { safeJsonParse } from '../../../shared/safe-json.js';
12
+ import { existsSync, statSync } from 'fs';
13
+ import { dirname, resolve as resolvePath, join as joinPath } from 'path';
14
+ import { extractTsJs } from '../../../shared/parsers/treesitter-ts-extractor.js';
12
15
  const DEFAULT_CONFIG = {
13
16
  maxNodes: 100000,
14
17
  maxEdgesPerNode: 500,
@@ -26,11 +29,25 @@ const DEFAULT_CONFIG = {
26
29
  * ADR-051: Added LLM enhancement for AI-powered knowledge extraction
27
30
  */
28
31
  const logger = LoggerFactory.create('code-intelligence/knowledge-graph');
32
+ /**
33
+ * File extensions for which the knowledge graph has a real entity/import
34
+ * extractor (the TypeScript Compiler API). Files outside this set are indexed
35
+ * as bare file nodes with no dependency edges — `index` warns about them so the
36
+ * downstream 0-edge result in `deps` is not silently misleading (#511 req #2).
37
+ */
38
+ const DEP_EXTRACTOR_EXTENSIONS = new Set(['ts', 'tsx', 'js', 'jsx']);
29
39
  export class KnowledgeGraphService {
30
40
  config;
31
41
  memory;
32
42
  nodeCache = new Map();
33
43
  edgeIndex = new Map();
44
+ /**
45
+ * Lazily-hydrated flat list of all persisted edges (#511).
46
+ * Edges are persisted per-process during index(); cross-process reads
47
+ * (deps/search/impact) hydrate this once and filter by source/target.
48
+ * Invalidated on createEdge()/clear() to avoid serving stale data.
49
+ */
50
+ allEdgesCache;
34
51
  tsParser;
35
52
  fileReader;
36
53
  embedder;
@@ -66,6 +83,18 @@ export class KnowledgeGraphService {
66
83
  isKnowledgeGraphDependencies(arg) {
67
84
  return arg.memory !== undefined;
68
85
  }
86
+ /**
87
+ * Storage options that pin every KG kv operation to a fixed, tool-independent
88
+ * namespace (the configured `code-intelligence:kg`) instead of the backend's
89
+ * default (`qe-kernel` for the CLI, `mcp-tools` for MCP). This gives CLI↔MCP
90
+ * parity — a graph indexed by one tool is readable by the other — and makes
91
+ * the init existence checks (`SELECT ... WHERE namespace = 'code-intelligence:kg'`)
92
+ * actually find the data (#511). Reads and writes MUST both pass this, or a
93
+ * write under the namespace cannot be read back (issue #491 Bug 2).
94
+ */
95
+ get nsOpts() {
96
+ return { namespace: this.config.namespace };
97
+ }
69
98
  /**
70
99
  * Index files into the knowledge graph
71
100
  */
@@ -74,6 +103,10 @@ export class KnowledgeGraphService {
74
103
  const errors = [];
75
104
  let nodesCreated = 0;
76
105
  let edgesCreated = 0;
106
+ // #511 req #2: count files indexed under a language with no dependency
107
+ // extractor, keyed by extension, so we can warn loudly instead of silently
108
+ // reporting a graph that `deps` then shows as 0 edges.
109
+ const unsupportedByExt = new Map();
77
110
  try {
78
111
  const { paths, incremental = false, includeTests = true, languages } = request;
79
112
  // Clear existing graph if not incremental
@@ -93,8 +126,12 @@ export class KnowledgeGraphService {
93
126
  if (!includeTests && this.isTestFile(path)) {
94
127
  continue;
95
128
  }
129
+ const ext = this.getFileExtension(path);
130
+ if (!DEP_EXTRACTOR_EXTENSIONS.has(ext)) {
131
+ unsupportedByExt.set(ext || '(none)', (unsupportedByExt.get(ext || '(none)') ?? 0) + 1);
132
+ }
96
133
  // Index the file
97
- const result = await this.indexFile(path);
134
+ const result = await this.indexFile(path, incremental);
98
135
  nodesCreated += result.nodes;
99
136
  edgesCreated += result.edges;
100
137
  }
@@ -106,6 +143,19 @@ export class KnowledgeGraphService {
106
143
  }
107
144
  }
108
145
  const duration = Date.now() - startTime;
146
+ // #511 req #2: surface a loud warning for unsupported languages so the
147
+ // caller understands why `deps`/`impact` will be empty for those files.
148
+ const warnings = [];
149
+ if (unsupportedByExt.size > 0) {
150
+ const supported = Array.from(DEP_EXTRACTOR_EXTENSIONS).join(', ');
151
+ for (const [ext, count] of unsupportedByExt) {
152
+ const msg = `${count} file(s) with extension '.${ext}' were indexed as plain ` +
153
+ `nodes: no dependency extractor for this language, so 'deps'/'impact' ` +
154
+ `will report 0 edges for them. Supported: ${supported}.`;
155
+ warnings.push(msg);
156
+ logger.warn(msg);
157
+ }
158
+ }
109
159
  // Store indexing metadata
110
160
  await this.storeIndexMetadata({
111
161
  filesIndexed: paths.length - errors.length,
@@ -120,6 +170,7 @@ export class KnowledgeGraphService {
120
170
  edgesCreated,
121
171
  duration,
122
172
  errors,
173
+ warnings,
123
174
  });
124
175
  }
125
176
  catch (error) {
@@ -180,7 +231,7 @@ export class KnowledgeGraphService {
180
231
  }
181
232
  // Load from memory
182
233
  const key = `${this.config.namespace}:node:${nodeId}`;
183
- const node = await this.memory.get(key);
234
+ const node = await this.memory.get(key, this.nsOpts);
184
235
  if (node) {
185
236
  this.nodeCache.set(nodeId, node);
186
237
  }
@@ -190,34 +241,83 @@ export class KnowledgeGraphService {
190
241
  * Get edges for a node
191
242
  */
192
243
  async getEdges(nodeId, direction) {
193
- const edges = [];
194
- // Check index first
195
- const cachedEdges = this.edgeIndex.get(nodeId);
196
- if (cachedEdges) {
197
- return this.filterEdgesByDirection(cachedEdges, nodeId, direction);
244
+ // Hydrate the full edge set from persistence once, then filter in-memory.
245
+ // This is required for cross-process reads (deps/search run as separate
246
+ // CLI processes from index) and for correct incoming/both lookups, which
247
+ // the old source-keyed edgeIndex could not serve (#511).
248
+ const allEdges = await this.loadAllEdges();
249
+ return this.filterEdgesByDirection(allEdges, nodeId, direction);
250
+ }
251
+ /**
252
+ * Load all persisted edges into a flat cache (#511).
253
+ * Cached for the lifetime of the read; invalidated by createEdge()/clear().
254
+ */
255
+ async loadAllEdges() {
256
+ if (this.allEdgesCache) {
257
+ return this.allEdgesCache;
198
258
  }
199
- // Load from memory
259
+ const edges = [];
200
260
  const pattern = `${this.config.namespace}:edge:*`;
201
- const keys = await this.memory.search(pattern, this.config.maxEdgesPerNode * 2);
261
+ const keys = await this.memory.search(pattern, Number.MAX_SAFE_INTEGER, this.nsOpts);
202
262
  for (const key of keys) {
203
- const edge = await this.memory.get(key);
263
+ const edge = await this.memory.get(key, this.nsOpts);
204
264
  if (edge) {
205
- const matches = (direction !== 'outgoing' && edge.target === nodeId) ||
206
- (direction !== 'incoming' && edge.source === nodeId);
207
- if (matches) {
208
- edges.push(edge);
209
- }
265
+ edges.push(edge);
210
266
  }
211
267
  }
268
+ this.allEdgesCache = edges;
212
269
  return edges;
213
270
  }
214
271
  /**
215
272
  * Clear the knowledge graph
216
273
  */
217
274
  async clear() {
218
- // Cache-only: just clear in-memory caches, no kv_store cleanup needed
219
275
  this.nodeCache.clear();
220
276
  this.edgeIndex.clear();
277
+ this.allEdgesCache = undefined;
278
+ // Delete persisted nodes/edges so a non-incremental re-index does not
279
+ // accumulate stale graph state across runs (#511). Scoped to the KG
280
+ // namespace's :node:/:edge: keys only — never touches learning data.
281
+ for (const prefix of [
282
+ `${this.config.namespace}:node:`,
283
+ `${this.config.namespace}:edge:`,
284
+ ]) {
285
+ const keys = await this.memory.search(`${prefix}*`, Number.MAX_SAFE_INTEGER, this.nsOpts);
286
+ for (const key of keys) {
287
+ await this.memory.delete(key, this.nsOpts);
288
+ }
289
+ }
290
+ }
291
+ /**
292
+ * Remove a single file's contribution to the graph (#511).
293
+ *
294
+ * Deletes the file node, its entity nodes, and edges that ORIGINATE from the
295
+ * file or its entities (contains + outgoing imports). Incoming edges (other
296
+ * files importing this one) are left intact — they belong to those files and
297
+ * remain valid until those files are themselves re-indexed. Used for
298
+ * incremental re-indexing so stale entities/imports don't persist.
299
+ */
300
+ async removeFileFromGraph(filePath) {
301
+ const fileNodeId = this.pathToNodeId(filePath);
302
+ const ns = this.config.namespace;
303
+ // Delete the file node and all of its entity nodes (`:node:<file>` and
304
+ // `:node:<file>:<type>:<name>`).
305
+ const nodeKeys = await this.memory.search(`${ns}:node:${fileNodeId}*`, Number.MAX_SAFE_INTEGER, this.nsOpts);
306
+ for (const key of nodeKeys) {
307
+ await this.memory.delete(key, this.nsOpts);
308
+ this.nodeCache.delete(key.slice(`${ns}:node:`.length));
309
+ }
310
+ // Delete edges whose source is the file node or one of its entity nodes.
311
+ const edgeKeys = await this.memory.search(`${ns}:edge:*`, Number.MAX_SAFE_INTEGER, this.nsOpts);
312
+ for (const key of edgeKeys) {
313
+ const edge = await this.memory.get(key, this.nsOpts);
314
+ if (edge && (edge.source === fileNodeId || edge.source.startsWith(`${fileNodeId}:`))) {
315
+ await this.memory.delete(key, this.nsOpts);
316
+ }
317
+ }
318
+ // Drop the file's source-keyed cache entry and invalidate the flat cache.
319
+ this.edgeIndex.delete(fileNodeId);
320
+ this.allEdgesCache = undefined;
221
321
  }
222
322
  // ============================================================================
223
323
  // ADR-051: LLM Enhancement Methods
@@ -409,9 +509,22 @@ Return JSON: { "rankedIds": ["id1", "id2", ...], "insights": ["insight1", "insig
409
509
  // ============================================================================
410
510
  // Private Helper Methods
411
511
  // ============================================================================
412
- async indexFile(filePath) {
512
+ async indexFile(filePath, incremental = false) {
413
513
  let nodesCreated = 0;
414
514
  let edgesCreated = 0;
515
+ // #511: evict any cached content for this file before reading it. The
516
+ // FileReader caches content for 5 min, so in a long-lived process (e.g. the
517
+ // MCP server) a re-index would otherwise extract entities/imports from the
518
+ // STALE pre-edit text. Eviction guarantees fresh reads; the two reads within
519
+ // this method (entities + imports) still share one cache fill, so they stay
520
+ // mutually consistent.
521
+ this.fileReader.invalidateCache(filePath);
522
+ // #511: on an incremental re-index, drop this file's prior nodes/edges
523
+ // first so renamed/removed entities and stale outgoing imports don't
524
+ // linger as phantom dependencies. (A full index already cleared everything.)
525
+ if (incremental) {
526
+ await this.removeFileFromGraph(filePath);
527
+ }
415
528
  // Create file node
416
529
  const fileNode = await this.createFileNode(filePath);
417
530
  nodesCreated++;
@@ -428,8 +541,12 @@ Return JSON: { "rankedIds": ["id1", "id2", ...], "insights": ["insight1", "insig
428
541
  // Extract imports/dependencies
429
542
  const imports = await this.extractImports(filePath);
430
543
  for (const importPath of imports) {
431
- // Create dependency edge
432
- const targetNodeId = this.pathToNodeId(importPath);
544
+ // Resolve relative specifiers to the actual file so the import edge
545
+ // targets the imported file's node id (#511). Without this, an edge to
546
+ // './math' never matches the '/abs/path/math.ts' file node and the
547
+ // dependency graph stays disconnected (all nodes degree-0).
548
+ const resolvedPath = this.resolveImportPath(importPath, filePath);
549
+ const targetNodeId = this.pathToNodeId(resolvedPath);
433
550
  await this.createEdge(fileNode.id, targetNodeId, 'import');
434
551
  edgesCreated++;
435
552
  }
@@ -519,11 +636,14 @@ Return JSON: { "rankedIds": ["id1", "id2", ...], "insights": ["insight1", "insig
519
636
  target: targetId,
520
637
  type,
521
638
  };
522
- // Cache-only: no kv_store persistence needed, KG is rebuilt from source on each init
523
- // Update edge index
639
+ // Update in-memory edge index (source-keyed, used during same-process index)
524
640
  const sourceEdges = this.edgeIndex.get(sourceId) || [];
525
641
  sourceEdges.push(edge);
526
642
  this.edgeIndex.set(sourceId, sourceEdges);
643
+ // Persist so cross-process reads (deps/search/impact) see the graph (#511).
644
+ await this.memory.set(`${this.config.namespace}:edge:${edgeId}`, edge, this.nsOpts);
645
+ // Invalidate hydrated read cache so subsequent getEdges() reflects this write.
646
+ this.allEdgesCache = undefined;
527
647
  return edge;
528
648
  }
529
649
  async storeNode(node) {
@@ -537,70 +657,67 @@ Return JSON: { "rankedIds": ["id1", "id2", ...], "insights": ["insight1", "insig
537
657
  this.edgeIndex.delete(firstKey);
538
658
  }
539
659
  }
540
- // Cache-only: KG is rebuilt from source on each init, no need for kv_store persistence
541
660
  this.nodeCache.set(node.id, node);
661
+ // Persist so cross-process reads (deps/search/impact) see the graph (#511).
662
+ await this.memory.set(`${this.config.namespace}:node:${node.id}`, node, this.nsOpts);
542
663
  }
543
664
  async extractEntities(filePath) {
544
665
  const extension = this.getFileExtension(filePath);
545
666
  const entities = [];
546
- // Use TypeScript parser for TS/JS files
547
- if (['ts', 'tsx', 'js', 'jsx'].includes(extension)) {
667
+ // TS/JS files: prefer the bundled tree-sitter WASM grammars (typescript-free,
668
+ // works out of the box), and fall back to the TypeScript compiler API only if
669
+ // tree-sitter is unavailable AND `typescript` happens to be installed (#511).
670
+ if (DEP_EXTRACTOR_EXTENSIONS.has(extension)) {
548
671
  const fileResult = await this.fileReader.readFile(filePath);
672
+ const fileName = this.getFileName(filePath);
549
673
  if (fileResult.success) {
550
- const fileName = this.getFileName(filePath);
551
- const ast = this.tsParser.parseFile(fileName, fileResult.value);
552
- // Extract functions
553
- const functions = this.tsParser.extractFunctions(ast);
554
- for (const func of functions) {
555
- entities.push({
556
- type: 'function',
557
- name: func.name,
558
- line: func.startLine,
559
- visibility: 'public',
560
- isAsync: func.isAsync,
561
- });
562
- }
563
- // Extract classes
564
- const classes = this.tsParser.extractClasses(ast);
565
- for (const cls of classes) {
566
- entities.push({
567
- type: 'class',
568
- name: cls.name,
569
- line: cls.startLine,
570
- visibility: 'public',
571
- isAsync: false,
572
- });
573
- // Add class methods as entities
574
- for (const method of cls.methods) {
575
- entities.push({
576
- type: 'function',
577
- name: `${cls.name}.${method.name}`,
578
- line: method.startLine,
579
- visibility: method.visibility,
580
- isAsync: method.isAsync,
581
- });
674
+ let extracted = false;
675
+ // Primary: tree-sitter
676
+ try {
677
+ const ts = await extractTsJs(fileResult.value, extension);
678
+ if (ts) {
679
+ for (const f of ts.functions) {
680
+ entities.push({ type: 'function', name: f.name, line: f.startLine, visibility: f.visibility, isAsync: f.isAsync });
681
+ }
682
+ for (const c of ts.classes) {
683
+ entities.push({ type: 'class', name: c.name, line: c.startLine, visibility: 'public', isAsync: false });
684
+ for (const m of c.methods) {
685
+ entities.push({ type: 'function', name: `${c.name}.${m.name}`, line: m.startLine, visibility: m.visibility, isAsync: m.isAsync });
686
+ }
687
+ }
688
+ for (const iface of ts.interfaces) {
689
+ entities.push({ type: 'interface', name: iface.name, line: iface.startLine, visibility: 'public', isAsync: false });
690
+ }
691
+ extracted = true;
582
692
  }
583
693
  }
584
- // Extract interfaces
585
- const interfaces = this.tsParser.extractInterfaces(ast);
586
- for (const iface of interfaces) {
587
- entities.push({
588
- type: 'interface',
589
- name: iface.name,
590
- line: iface.startLine,
591
- visibility: 'public',
592
- isAsync: false,
593
- });
694
+ catch {
695
+ // tree-sitter unavailable — fall through to the TS compiler path
594
696
  }
595
- // If no entities found, create a module entity for the file
697
+ // Fallback: TypeScript compiler API (only when tree-sitter didn't run).
698
+ if (!extracted) {
699
+ try {
700
+ const ast = this.tsParser.parseFile(fileName, fileResult.value);
701
+ for (const func of this.tsParser.extractFunctions(ast)) {
702
+ entities.push({ type: 'function', name: func.name, line: func.startLine, visibility: 'public', isAsync: func.isAsync });
703
+ }
704
+ for (const cls of this.tsParser.extractClasses(ast)) {
705
+ entities.push({ type: 'class', name: cls.name, line: cls.startLine, visibility: 'public', isAsync: false });
706
+ for (const method of cls.methods) {
707
+ entities.push({ type: 'function', name: `${cls.name}.${method.name}`, line: method.startLine, visibility: method.visibility, isAsync: method.isAsync });
708
+ }
709
+ }
710
+ for (const iface of this.tsParser.extractInterfaces(ast)) {
711
+ entities.push({ type: 'interface', name: iface.name, line: iface.startLine, visibility: 'public', isAsync: false });
712
+ }
713
+ }
714
+ catch {
715
+ // Neither tree-sitter nor the TypeScript compiler is available.
716
+ }
717
+ }
718
+ // If nothing was extracted, record a module entity for the file.
596
719
  if (entities.length === 0) {
597
- entities.push({
598
- type: 'module',
599
- name: fileName.replace(/\.[^.]+$/, ''),
600
- line: 1,
601
- visibility: 'public',
602
- isAsync: false,
603
- });
720
+ entities.push({ type: 'module', name: fileName.replace(/\.[^.]+$/, ''), line: 1, visibility: 'public', isAsync: false });
604
721
  }
605
722
  }
606
723
  else {
@@ -700,19 +817,35 @@ Return JSON: { "rankedIds": ["id1", "id2", ...], "insights": ["insight1", "insig
700
817
  async extractImports(filePath) {
701
818
  const extension = this.getFileExtension(filePath);
702
819
  const importPaths = [];
703
- // Use TypeScript parser for TS/JS files
704
- if (['ts', 'tsx', 'js', 'jsx'].includes(extension)) {
820
+ // TS/JS: tree-sitter primary (typescript-free), TS compiler fallback (#511).
821
+ if (DEP_EXTRACTOR_EXTENSIONS.has(extension)) {
705
822
  const fileResult = await this.fileReader.readFile(filePath);
706
823
  if (fileResult.success) {
707
824
  const fileName = this.getFileName(filePath);
708
- const ast = this.tsParser.parseFile(fileName, fileResult.value);
709
- const imports = this.tsParser.extractImports(ast);
710
- // Extract import sources (module property in new API)
711
- for (const importInfo of imports) {
712
- // Only include relative imports and package imports
825
+ let modules = null;
826
+ // Primary: tree-sitter
827
+ try {
828
+ const ts = await extractTsJs(fileResult.value, extension);
829
+ if (ts)
830
+ modules = ts.imports;
831
+ }
832
+ catch {
833
+ modules = null;
834
+ }
835
+ // Fallback: TypeScript compiler API
836
+ if (modules === null) {
837
+ try {
838
+ const ast = this.tsParser.parseFile(fileName, fileResult.value);
839
+ modules = this.tsParser.extractImports(ast).map((i) => i.module);
840
+ }
841
+ catch {
842
+ modules = [];
843
+ }
844
+ }
845
+ for (const module of modules) {
713
846
  // Skip node built-ins for now
714
- if (!importInfo.module.startsWith('node:')) {
715
- importPaths.push(importInfo.module);
847
+ if (!module.startsWith('node:')) {
848
+ importPaths.push(module);
716
849
  }
717
850
  }
718
851
  }
@@ -807,9 +940,9 @@ Return JSON: { "rankedIds": ["id1", "id2", ...], "insights": ["insight1", "insig
807
940
  async findNodesByLabel(label, limit) {
808
941
  const nodes = [];
809
942
  const pattern = `${this.config.namespace}:node:*`;
810
- const keys = await this.memory.search(pattern, limit * 2);
943
+ const keys = await this.memory.search(pattern, limit * 2, this.nsOpts);
811
944
  for (const key of keys) {
812
- const node = await this.memory.get(key);
945
+ const node = await this.memory.get(key, this.nsOpts);
813
946
  if (node && node.label === label) {
814
947
  nodes.push(node);
815
948
  if (nodes.length >= limit)
@@ -847,10 +980,10 @@ Return JSON: { "rankedIds": ["id1", "id2", ...], "insights": ["insight1", "insig
847
980
  // Fallback to keyword matching
848
981
  const keywords = query.toLowerCase().split(/\s+/);
849
982
  const pattern = `${this.config.namespace}:node:*`;
850
- const keys = await this.memory.search(pattern, limit * 3);
983
+ const keys = await this.memory.search(pattern, limit * 3, this.nsOpts);
851
984
  const nodes = [];
852
985
  for (const key of keys) {
853
- const node = await this.memory.get(key);
986
+ const node = await this.memory.get(key, this.nsOpts);
854
987
  if (node) {
855
988
  const nodeText = JSON.stringify(node.properties).toLowerCase();
856
989
  if (keywords.some((kw) => nodeText.includes(kw))) {
@@ -882,7 +1015,12 @@ Return JSON: { "rankedIds": ["id1", "id2", ...], "insights": ["insight1", "insig
882
1015
  visited.add(file);
883
1016
  path.push(file);
884
1017
  const nodeId = this.pathToNodeId(file);
885
- const fileEdges = await this.getEdges(nodeId, direction);
1018
+ // Only true dependency edges (import/call/extends/implements) belong in a
1019
+ // dependency map — exclude structural 'contains' (file→entity) edges so the
1020
+ // graph stays a file-to-file dependency view and entities don't leak in as
1021
+ // pseudo file nodes (#511).
1022
+ const DEPENDENCY_EDGE_TYPES = new Set(['import', 'call', 'extends', 'implements']);
1023
+ const fileEdges = (await this.getEdges(nodeId, direction)).filter((e) => DEPENDENCY_EDGE_TYPES.has(e.type));
886
1024
  // Create dependency node
887
1025
  const inDegree = fileEdges.filter((e) => e.target === nodeId).length;
888
1026
  const outDegree = fileEdges.filter((e) => e.source === nodeId).length;
@@ -903,10 +1041,15 @@ Return JSON: { "rankedIds": ["id1", "id2", ...], "insights": ["insight1", "insig
903
1041
  if (!edges.some((e) => e.source === depEdge.source && e.target === depEdge.target)) {
904
1042
  edges.push(depEdge);
905
1043
  }
906
- // Recursively traverse
907
- const nextFile = edge.source === nodeId
908
- ? this.nodeIdToPath(edge.target)
909
- : this.nodeIdToPath(edge.source);
1044
+ // Recurse only along directed-forward (outgoing) edges so the traversal
1045
+ // path represents a real directed dependency chain. Following 'both'
1046
+ // adjacency backwards fabricated cycles like A→B→A (#511). Incoming
1047
+ // neighbours are still surfaced as edges/degrees above and are visited
1048
+ // as their own top-level entries.
1049
+ if (edge.source !== nodeId) {
1050
+ continue;
1051
+ }
1052
+ const nextFile = this.nodeIdToPath(edge.target);
910
1053
  if (nextFile) {
911
1054
  await this.traverseDependencies(nextFile, direction, depth - 1, visited, nodes, edges, path, cycles);
912
1055
  }
@@ -968,7 +1111,8 @@ Return JSON: { "rankedIds": ["id1", "id2", ...], "insights": ["insight1", "insig
968
1111
  return edge.target === nodeId;
969
1112
  if (direction === 'outgoing')
970
1113
  return edge.source === nodeId;
971
- return true;
1114
+ // 'both': edge touches nodeId on either end
1115
+ return edge.source === nodeId || edge.target === nodeId;
972
1116
  });
973
1117
  }
974
1118
  async storeIndexMetadata(_metadata) {
@@ -1015,6 +1159,47 @@ Return JSON: { "rankedIds": ["id1", "id2", ...], "insights": ["insight1", "insig
1015
1159
  pathToNodeId(path) {
1016
1160
  return path.replace(/[/\\]/g, ':').replace(/\./g, '_');
1017
1161
  }
1162
+ /**
1163
+ * Resolve an import specifier to a concrete file path (#511).
1164
+ *
1165
+ * Relative specifiers ('./math', '../util') are resolved against the
1166
+ * importing file's directory and probed for the usual TS/JS extensions and
1167
+ * index files, so the resulting node id matches the imported file's node.
1168
+ * Bare package specifiers ('react', '@scope/pkg') are returned unchanged and
1169
+ * become external dependency nodes.
1170
+ */
1171
+ resolveImportPath(importPath, fromFile) {
1172
+ if (!importPath.startsWith('.')) {
1173
+ return importPath;
1174
+ }
1175
+ const base = resolvePath(dirname(fromFile), importPath);
1176
+ const candidates = [
1177
+ base,
1178
+ `${base}.ts`,
1179
+ `${base}.tsx`,
1180
+ `${base}.js`,
1181
+ `${base}.jsx`,
1182
+ `${base}.mjs`,
1183
+ `${base}.cjs`,
1184
+ joinPath(base, 'index.ts'),
1185
+ joinPath(base, 'index.tsx'),
1186
+ joinPath(base, 'index.js'),
1187
+ joinPath(base, 'index.jsx'),
1188
+ ];
1189
+ for (const candidate of candidates) {
1190
+ try {
1191
+ if (existsSync(candidate) && statSync(candidate).isFile()) {
1192
+ return candidate;
1193
+ }
1194
+ }
1195
+ catch {
1196
+ // ignore unreadable candidates and keep probing
1197
+ }
1198
+ }
1199
+ // Fall back to a '.ts' sibling so extensionless imports still link to a
1200
+ // stable node id even when the file cannot be found on disk.
1201
+ return `${base}.ts`;
1202
+ }
1018
1203
  nodeIdToPath(nodeId) {
1019
1204
  // Reverse the nodeId transformation
1020
1205
  const path = nodeId.replace(/:/g, '/').replace(/_(?=[^_]*$)/, '.');
@@ -105,8 +105,14 @@ export class SemanticAnalyzerService {
105
105
  ...metadata,
106
106
  indexedAt: new Date().toISOString(),
107
107
  });
108
- // Store content for retrieval
109
- await this.memory.set(`${this.config.namespace}:content:${this.fileToKey(file)}`, { file, content, metadata }, { namespace: this.config.namespace });
108
+ // Store content for retrieval.
109
+ // The key is already fully namespace-qualified, so do NOT also pass a
110
+ // {namespace} store option: every read path (semanticSearch/findSimilar/
111
+ // exact/fuzzy) and the storeVector() embedding write use the default
112
+ // namespace, and a write with {namespace} could not be read back without
113
+ // the same option (issue #491 Bug 2) — which silently dropped every
114
+ // search result (#511 follow-up).
115
+ await this.memory.set(`${this.config.namespace}:content:${this.fileToKey(file)}`, { file, content, metadata });
110
116
  return ok(undefined);
111
117
  }
112
118
  catch (error) {
@@ -859,7 +859,7 @@ export class ContractTestingCoordinator extends BaseDomainCoordinator {
859
859
  // Get SARSA prediction for ordering strategy
860
860
  const prediction = await this.sarsaAlgorithm.predict(state);
861
861
  // Apply the suggested ordering strategy
862
- let prioritized = [...contracts];
862
+ const prioritized = [...contracts];
863
863
  let strategy = 'default';
864
864
  switch (prediction.action.type) {
865
865
  case 'sequence-early':
@@ -682,8 +682,10 @@ export class CoverageAnalysisCoordinator extends BaseDomainCoordinator {
682
682
  case 'daily':
683
683
  return `${year}-${month}-${day}`;
684
684
  case 'weekly':
685
- const weekNum = Math.floor(day / 7);
686
- return `${year}-${month}-W${weekNum}`;
685
+ {
686
+ const weekNum = Math.floor(day / 7);
687
+ return `${year}-${month}-W${weekNum}`;
688
+ }
687
689
  case 'monthly':
688
690
  return `${year}-${month}`;
689
691
  }
@@ -12,6 +12,7 @@ import { LearningOptimizationEvents, createEvent, } from '../../shared/events/do
12
12
  import { LearningCoordinatorService, TransferSpecialistService, MetricsOptimizerService, ProductionIntelService, } from './services/index.js';
13
13
  import { createPersistentSONAEngine, } from '../../integrations/ruvector/sona-persistence.js';
14
14
  import { createDreamScheduler, createDreamEngine, } from '../../learning/dream/index.js';
15
+ // V3 Integration: MinCut Awareness (ADR-047) - only import types needed beyond base
15
16
  // CQ-002: Base domain coordinator
16
17
  import { BaseDomainCoordinator, } from '../base-domain-coordinator.js';
17
18
  // CQ-004: Extracted modules