agentic-qe 3.9.2 → 3.9.4

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 (296) hide show
  1. package/CHANGELOG.md +53 -0
  2. package/dist/cli/bundle.js +5 -5
  3. package/dist/cli/chunks/adapter-5ODIX6ZG.js +2 -0
  4. package/dist/cli/chunks/{agent-booster-wasm-AKAOHSCX.js → agent-booster-wasm-MGGEPROV.js} +2 -2
  5. package/dist/cli/chunks/{agent-handler-MTGPOUVP.js → agent-handler-AFHYFQXV.js} +2 -2
  6. package/dist/cli/chunks/{agent-memory-branch-UFPKWUFK.js → agent-memory-branch-SQ3KDIG6.js} +2 -2
  7. package/dist/cli/chunks/aqe-learning-engine-PWGRS6KK.js +2 -0
  8. package/dist/cli/chunks/{audit-VBEZHNHO.js → audit-SM5CK2K5.js} +2 -2
  9. package/dist/cli/chunks/base-TJGIYR7L.js +2 -0
  10. package/dist/cli/chunks/{better-sqlite3-IRPHIXRU.js → better-sqlite3-UGOYRNXI.js} +2 -2
  11. package/dist/cli/chunks/{brain-handler-7EO3FFRZ.js → brain-handler-SKXTB63O.js} +3 -3
  12. package/dist/cli/chunks/{branch-enumerator-MZRGP35N.js → branch-enumerator-77NSOLNK.js} +2 -2
  13. package/dist/cli/chunks/{browser-VSIWQE7J.js → browser-MCE5DWPV.js} +2 -2
  14. package/dist/cli/chunks/browser-workflow-GUR7RLFP.js +2 -0
  15. package/dist/cli/chunks/{chunk-5RL66XSH.js → chunk-27FNBMUC.js} +2 -2
  16. package/dist/cli/chunks/{chunk-FRJLP7IB.js → chunk-27P4VTCY.js} +2 -2
  17. package/dist/cli/chunks/{chunk-2VVV73PW.js → chunk-2JLKOGNU.js} +1 -1
  18. package/dist/cli/chunks/{chunk-PJFLO37I.js → chunk-2MQMXI7C.js} +2 -2
  19. package/dist/cli/chunks/{chunk-BKCTNRC5.js → chunk-3MN7E6HY.js} +2 -2
  20. package/dist/cli/chunks/{chunk-BY47GV4T.js → chunk-3MRFR534.js} +2 -2
  21. package/dist/cli/chunks/{chunk-563PJBDM.js → chunk-3RHIPCBG.js} +2 -2
  22. package/dist/cli/chunks/{chunk-WXWY2GAF.js → chunk-3SPYUOSS.js} +2 -2
  23. package/dist/cli/chunks/{chunk-5AUKULWO.js → chunk-4BQTEPAD.js} +2 -2
  24. package/dist/cli/chunks/{chunk-N3F3CX4V.js → chunk-4GJAYXB7.js} +2 -2
  25. package/dist/cli/chunks/{chunk-7NOIIC7G.js → chunk-4TZTGYBQ.js} +1 -1
  26. package/dist/cli/chunks/{chunk-VL7YOOC2.js → chunk-53M65YFH.js} +2 -2
  27. package/dist/cli/chunks/{chunk-QNBQBSAI.js → chunk-54OLXGXJ.js} +2 -2
  28. package/dist/cli/chunks/{chunk-HW4ISY5B.js → chunk-5UKAEBKC.js} +3 -3
  29. package/dist/cli/chunks/{chunk-CQP7ZFME.js → chunk-72EC26AS.js} +2 -2
  30. package/dist/cli/chunks/{chunk-J4BS6IWE.js → chunk-7EL65Y27.js} +1 -1
  31. package/dist/cli/chunks/{chunk-PFNFC43Q.js → chunk-7FJIIB4H.js} +1 -1
  32. package/dist/cli/chunks/{chunk-AKSJQ6B3.js → chunk-7ST2YENJ.js} +2 -2
  33. package/dist/cli/chunks/{chunk-SNVM4YJS.js → chunk-7ZXNJT4Q.js} +2 -2
  34. package/dist/cli/chunks/{chunk-BOH22AKC.js → chunk-A6ZBQCYB.js} +2 -2
  35. package/dist/cli/chunks/{chunk-VHVWAXCF.js → chunk-B252DDC5.js} +1 -1
  36. package/dist/cli/chunks/{chunk-2EC5Z2J4.js → chunk-B6HLXE3D.js} +9 -9
  37. package/dist/cli/chunks/{chunk-L5WZUPZF.js → chunk-BH5XPYA3.js} +2 -2
  38. package/dist/cli/chunks/{chunk-LMMEUVE5.js → chunk-BZ22GI4E.js} +1 -1
  39. package/dist/cli/chunks/{chunk-YXCU4CJX.js → chunk-C2HGOUEB.js} +1 -1
  40. package/dist/cli/chunks/{chunk-JV7LX6OT.js → chunk-C3BXT3ZC.js} +4 -4
  41. package/dist/cli/chunks/{chunk-3GZKAORV.js → chunk-C567IO5M.js} +2 -2
  42. package/dist/cli/chunks/{chunk-SCF7NRVE.js → chunk-COIRFVFO.js} +1 -1
  43. package/dist/cli/chunks/{chunk-RITN3XR4.js → chunk-DHJJJ24V.js} +2 -2
  44. package/dist/cli/chunks/{chunk-RC5CPXON.js → chunk-DLMEBVLF.js} +2 -2
  45. package/dist/cli/chunks/{chunk-XFMKJ3UD.js → chunk-DZHGYZJP.js} +1 -1
  46. package/dist/cli/chunks/{chunk-V6XBAZNH.js → chunk-EEARIB4C.js} +1 -1
  47. package/dist/cli/chunks/{chunk-NM6TIEJ3.js → chunk-EFD2J6GG.js} +3 -3
  48. package/dist/cli/chunks/{chunk-Z5HXGVXZ.js → chunk-EHGTXIT7.js} +1 -1
  49. package/dist/cli/chunks/{chunk-QODE4LM6.js → chunk-ENKPW6MA.js} +2 -2
  50. package/dist/cli/chunks/{chunk-4PKXIBX2.js → chunk-EZTUUOVI.js} +1 -1
  51. package/dist/cli/chunks/{chunk-SDTVHR63.js → chunk-F6AU2MAZ.js} +2 -2
  52. package/dist/cli/chunks/{chunk-GK72GUHA.js → chunk-G6RTCJFY.js} +2 -2
  53. package/dist/cli/chunks/{chunk-E25S5E2D.js → chunk-G72E5DL3.js} +1 -1
  54. package/dist/cli/chunks/{chunk-FUIHWBVF.js → chunk-GAG2P4I2.js} +1 -1
  55. package/dist/cli/chunks/{chunk-KDDZYXP4.js → chunk-GQ7DCSKS.js} +2 -2
  56. package/dist/cli/chunks/{chunk-WG4GHAML.js → chunk-GSKZL36U.js} +2 -2
  57. package/dist/cli/chunks/{chunk-Z2IKNC5M.js → chunk-GT35EJKR.js} +1 -1
  58. package/dist/cli/chunks/{chunk-56IWS2KY.js → chunk-GVFHRHXC.js} +2 -2
  59. package/dist/cli/chunks/{chunk-CCYMJKWX.js → chunk-GX7MEHQ2.js} +1 -1
  60. package/dist/cli/chunks/{chunk-4UH25U4O.js → chunk-HKTNFHWI.js} +1 -1
  61. package/dist/cli/chunks/{chunk-X6LCMOGC.js → chunk-IGJ472XJ.js} +2 -2
  62. package/dist/cli/chunks/{chunk-XH53ARZD.js → chunk-IQE6GOH6.js} +2 -2
  63. package/dist/cli/chunks/{chunk-RJROC5M3.js → chunk-J222JLZ6.js} +2 -2
  64. package/dist/cli/chunks/{chunk-DSE57A5N.js → chunk-J6KBI5NW.js} +1 -1
  65. package/dist/cli/chunks/{chunk-CQBSGYRA.js → chunk-J72Q6ERO.js} +2 -2
  66. package/dist/cli/chunks/{chunk-ICDXWIFZ.js → chunk-JMBUIVVE.js} +1 -1
  67. package/dist/cli/chunks/{chunk-6SOJVEU7.js → chunk-JVUNZBKX.js} +2 -2
  68. package/dist/cli/chunks/{chunk-MN742FIH.js → chunk-KELYPHMV.js} +2 -2
  69. package/dist/cli/chunks/{chunk-DHE66JRR.js → chunk-KSMQH2CV.js} +1 -1
  70. package/dist/cli/chunks/{chunk-GPLERTZU.js → chunk-LH3ZL2OK.js} +2 -2
  71. package/dist/cli/chunks/{chunk-GITD7SRQ.js → chunk-LW3DV23G.js} +2 -2
  72. package/dist/cli/chunks/chunk-MDFXPCBO.js +2 -0
  73. package/dist/cli/chunks/{chunk-KZUJBZ7B.js → chunk-MGRE767N.js} +2 -2
  74. package/dist/cli/chunks/{chunk-DBE34QES.js → chunk-MN2MYLVW.js} +2 -2
  75. package/dist/cli/chunks/{chunk-25LFUL2K.js → chunk-MR5I6UR2.js} +2 -2
  76. package/dist/cli/chunks/{chunk-S3RDH5CI.js → chunk-MS6LTE4L.js} +2 -2
  77. package/dist/cli/chunks/{chunk-QEQTC4WQ.js → chunk-MUX762XZ.js} +2 -2
  78. package/dist/cli/chunks/{chunk-4Z27TRQF.js → chunk-NEYZXYFH.js} +2 -2
  79. package/dist/cli/chunks/{chunk-7SLN2JGP.js → chunk-NRH2QE4X.js} +3 -3
  80. package/dist/cli/chunks/{chunk-CL3K5EJK.js → chunk-NS4CCCTZ.js} +2 -2
  81. package/dist/cli/chunks/{chunk-NJY7ZA77.js → chunk-NZ5LY2BT.js} +1 -1
  82. package/dist/cli/chunks/{chunk-UKDOMLBI.js → chunk-O6QAOPUA.js} +3 -3
  83. package/dist/cli/chunks/{chunk-QPRVX4H2.js → chunk-OHZ6RJLS.js} +2 -2
  84. package/dist/cli/chunks/{chunk-DNLMZTE2.js → chunk-ONOYANDX.js} +1 -1
  85. package/dist/cli/chunks/chunk-OZC42UMD.js +2 -0
  86. package/dist/cli/chunks/{chunk-34U7JDCN.js → chunk-P3EOWBME.js} +2 -2
  87. package/dist/cli/chunks/{chunk-4DAOZQ3V.js → chunk-Q2ZYUIS2.js} +2 -2
  88. package/dist/cli/chunks/{chunk-RQGYJK7H.js → chunk-Q6FSXNQP.js} +2 -2
  89. package/dist/cli/chunks/{chunk-X35GP7TR.js → chunk-QEYPK7KS.js} +1 -1
  90. package/dist/cli/chunks/{chunk-T5GV6UIO.js → chunk-QOU4R6AF.js} +2 -2
  91. package/dist/cli/chunks/{chunk-KZTO5EVM.js → chunk-QPC4STR6.js} +2 -2
  92. package/dist/cli/chunks/{chunk-4FT3PND7.js → chunk-QVZSIFSJ.js} +3 -3
  93. package/dist/cli/chunks/{chunk-GCMVJS5X.js → chunk-RAZ2PGZD.js} +2 -2
  94. package/dist/cli/chunks/{chunk-727BDQ3K.js → chunk-RE6XD6RI.js} +2 -2
  95. package/dist/cli/chunks/{chunk-STE42EMB.js → chunk-RGRYL4MG.js} +2 -2
  96. package/dist/cli/chunks/{chunk-XYJL6DKI.js → chunk-RN3SN4ZC.js} +2 -2
  97. package/dist/cli/chunks/{chunk-JOVINE23.js → chunk-RPYUKEAH.js} +2 -2
  98. package/dist/cli/chunks/{chunk-5L6AU3QK.js → chunk-RRQEIGLS.js} +2 -2
  99. package/dist/cli/chunks/{chunk-VUAO4VFC.js → chunk-RS7ZGWHV.js} +2 -2
  100. package/dist/cli/chunks/{chunk-KTYUCZEM.js → chunk-RTC3ZCPK.js} +5 -5
  101. package/dist/cli/chunks/{chunk-4LA7IW3V.js → chunk-RUJU5XEQ.js} +1 -1
  102. package/dist/cli/chunks/{chunk-SRRFWTNF.js → chunk-SHJZ3YNX.js} +2 -2
  103. package/dist/cli/chunks/{chunk-FAXVVLPL.js → chunk-SKWI5QBM.js} +2 -2
  104. package/dist/cli/chunks/{chunk-NRCKGXJJ.js → chunk-TNWTQWLL.js} +1 -1
  105. package/dist/cli/chunks/{chunk-KBA7FBK3.js → chunk-TT2TB6UF.js} +3 -3
  106. package/dist/cli/chunks/{chunk-Z54EO6E6.js → chunk-U7YC7VCM.js} +2 -2
  107. package/dist/cli/chunks/{chunk-TKF447CW.js → chunk-UJLSCJJS.js} +1 -1
  108. package/dist/cli/chunks/{chunk-MY4LMIG7.js → chunk-UPJZRDZK.js} +2 -2
  109. package/dist/cli/chunks/{chunk-KQTJ2YLI.js → chunk-UUL3D5HR.js} +4 -4
  110. package/dist/cli/chunks/{chunk-TTOE336G.js → chunk-V57PXZIK.js} +3 -3
  111. package/dist/cli/chunks/{chunk-SGAW2WLI.js → chunk-VBXJBXMG.js} +4 -4
  112. package/dist/cli/chunks/{chunk-BIVIPF4O.js → chunk-VBYREHZI.js} +1 -1
  113. package/dist/cli/chunks/{chunk-PNL5G6TE.js → chunk-VFXTZWNF.js} +2 -2
  114. package/dist/cli/chunks/{chunk-2WBCYSUN.js → chunk-VSNPI2NO.js} +8 -8
  115. package/dist/cli/chunks/{chunk-Y6O7CDLI.js → chunk-WHT46PJM.js} +2 -2
  116. package/dist/cli/chunks/{chunk-L5YEPSDU.js → chunk-XB5HXTL4.js} +2 -2
  117. package/dist/cli/chunks/{chunk-4FMHBBG5.js → chunk-XYVMKCSI.js} +1 -1
  118. package/dist/cli/chunks/{chunk-AA33R5U4.js → chunk-YDJKQKQH.js} +2 -2
  119. package/dist/cli/chunks/{chunk-4D2ZG2QO.js → chunk-YS6C2Q4F.js} +1 -1
  120. package/dist/cli/chunks/{chunk-65M7C6SH.js → chunk-Z75DMTMI.js} +1 -1
  121. package/dist/cli/chunks/{chunk-Q4A72ZTV.js → chunk-ZKWNZ3ZK.js} +2 -2
  122. package/dist/cli/chunks/{chunk-2Z2TFEOL.js → chunk-ZODUKKPC.js} +2 -2
  123. package/dist/cli/chunks/{chunk-KNVAAVHH.js → chunk-ZQSEPDIJ.js} +2 -2
  124. package/dist/cli/chunks/{chunk-QIH3E775.js → chunk-ZW5DRPZY.js} +2 -2
  125. package/dist/cli/chunks/{ci-2BCOBWFG.js → ci-THZEECIQ.js} +2 -2
  126. package/dist/cli/chunks/{ci-output-FB4OJHAC.js → ci-output-G6QLGL4S.js} +2 -2
  127. package/dist/cli/chunks/{claude-flow-setup-NEEFZTMB.js → claude-flow-setup-5MTYQM34.js} +2 -2
  128. package/dist/cli/chunks/client-IFMC3AYQ.js +2 -0
  129. package/dist/cli/chunks/{cline-installer-ODO2PS4K.js → cline-installer-E2LF2DQS.js} +2 -2
  130. package/dist/cli/chunks/{code-NSOF62VE.js → code-QRF7ZGXG.js} +2 -2
  131. package/dist/cli/chunks/{code-index-extractor-YQL5XN52.js → code-index-extractor-II6IRWU6.js} +2 -2
  132. package/dist/cli/chunks/{codex-installer-SPEY6VYT.js → codex-installer-LGOQ23ZS.js} +2 -2
  133. package/dist/cli/chunks/{completions-OWKBUMBE.js → completions-LB2RR2OQ.js} +2 -2
  134. package/dist/cli/chunks/{complexity-analyzer-PGTXKP73.js → complexity-analyzer-PUIPIRX3.js} +2 -2
  135. package/dist/cli/chunks/{continuedev-installer-KGOXAC7L.js → continuedev-installer-HQAEAQZU.js} +2 -2
  136. package/dist/cli/chunks/{copilot-installer-BF3UA3TG.js → copilot-installer-3PKCX5K5.js} +2 -2
  137. package/dist/cli/chunks/{cost-tracker-2HDJ66E2.js → cost-tracker-JG3SZ2Q3.js} +2 -2
  138. package/dist/cli/chunks/{coverage-KPA2PHIN.js → coverage-D3PZTOKT.js} +3 -3
  139. package/dist/cli/chunks/cross-domain-router-2LPBUUWY.js +2 -0
  140. package/dist/cli/chunks/{cursor-installer-7CDZFHTV.js → cursor-installer-UY6GWKTO.js} +2 -2
  141. package/dist/cli/chunks/{daemon-4BPGCKDJ.js → daemon-UNO3LRRN.js} +3 -3
  142. package/dist/cli/chunks/{dag-attention-scheduler-2MAVGSBB.js → dag-attention-scheduler-S2MXANYL.js} +2 -2
  143. package/dist/cli/chunks/{detect-WRPWTGP5.js → detect-DU2FTRKR.js} +2 -2
  144. package/dist/cli/chunks/{domain-handler-JZVSJ7AG.js → domain-handler-KPNO36LF.js} +2 -2
  145. package/dist/cli/chunks/{domain-transfer-XGIZOR2X.js → domain-transfer-6X3ZZF6A.js} +2 -2
  146. package/dist/cli/chunks/dream-NGRDMOTE.js +2 -0
  147. package/dist/cli/chunks/esm-node-3COTOSO3.js +2 -0
  148. package/dist/cli/chunks/{eval-T7YPAS4G.js → eval-6RXEDTBZ.js} +2 -2
  149. package/dist/cli/chunks/{fast-paths-QECJTKCQ.js → fast-paths-FYODFGZB.js} +2 -2
  150. package/dist/cli/chunks/{feature-flags-LIFURSFZ.js → feature-flags-YOULURDA.js} +2 -2
  151. package/dist/cli/chunks/{feature-flags-R4QZYTIW.js → feature-flags-ZJ42B4IL.js} +2 -2
  152. package/dist/cli/chunks/{file-discovery-4W3K3W4C.js → file-discovery-KOL7FSBQ.js} +2 -2
  153. package/dist/cli/chunks/{fleet-NLLQWCI5.js → fleet-22I74LGD.js} +3 -3
  154. package/dist/cli/chunks/{gnn-wrapper-XEII72LN.js → gnn-wrapper-DFHTHLIZ.js} +2 -2
  155. package/dist/cli/chunks/{heartbeat-handler-DJ65RE5D.js → heartbeat-handler-SQ6VYEAA.js} +4 -4
  156. package/dist/cli/chunks/{heartbeat-scheduler-H664265Q.js → heartbeat-scheduler-W6PQJ5SG.js} +2 -2
  157. package/dist/cli/chunks/hnsw-adapter-BASJNTEV.js +2 -0
  158. package/dist/cli/chunks/hnsw-index-NFN2AUIX.js +2 -0
  159. package/dist/cli/chunks/{hnsw-legacy-bridge-SQIDTWAA.js → hnsw-legacy-bridge-AYTRT54U.js} +2 -2
  160. package/dist/cli/chunks/{hnswlib-node-WICYCU5U.js → hnswlib-node-4IA56UH4.js} +2 -2
  161. package/dist/cli/chunks/{hooks-GZUHUD63.js → hooks-T6UMR72X.js} +6 -6
  162. package/dist/cli/chunks/{hypergraph-engine-MLCDZ6BL.js → hypergraph-engine-WVPYKMFY.js} +2 -2
  163. package/dist/cli/chunks/{hypergraph-handler-NNDDI4R3.js → hypergraph-handler-NB6GL4CR.js} +3 -3
  164. package/dist/cli/chunks/impact-analyzer-ZMQXHQDV.js +2 -0
  165. package/dist/cli/chunks/init-handler-UOFNBXEP.js +68 -0
  166. package/dist/cli/chunks/init-wizard-QHAA4GWF.js +2 -0
  167. package/dist/cli/chunks/kernel-SNJFYN3T.js +2 -0
  168. package/dist/cli/chunks/{kilocode-installer-EPZFFPFE.js → kilocode-installer-VWMNI4QX.js} +2 -2
  169. package/dist/cli/chunks/{kiro-installer-5VACG3HU.js → kiro-installer-RNM47FV5.js} +15 -15
  170. package/dist/cli/chunks/knowledge-graph-EP5UTODP.js +2 -0
  171. package/dist/cli/chunks/{learning-6FITK6XY.js → learning-L4RB5XYP.js} +3 -3
  172. package/dist/cli/chunks/{llm-router-4DDC6AKJ.js → llm-router-BZYZL3YI.js} +2 -2
  173. package/dist/cli/chunks/{load-KGDNVUBX.js → load-4UGEGRMO.js} +2 -2
  174. package/dist/cli/chunks/load-test-KMMRHABK.js +2 -0
  175. package/dist/cli/chunks/mcp-FWWZIWCI.js +2 -0
  176. package/dist/cli/chunks/{memory-II4I4QMO.js → memory-5OXPMXU6.js} +5 -5
  177. package/dist/cli/chunks/memory-backend-Q5MWPMDE.js +2 -0
  178. package/dist/cli/chunks/{memory-handlers-TQXTOJGQ.js → memory-handlers-JS7BTWJK.js} +2 -2
  179. package/dist/cli/chunks/{opencode-installer-EU6JCWBW.js → opencode-installer-BS5TQKHB.js} +2 -2
  180. package/dist/cli/chunks/orchestrator-G6BUZ6QE.js +370 -0
  181. package/dist/cli/chunks/{pipeline-MPZJWYKK.js → pipeline-3MZ5COPR.js} +2 -2
  182. package/dist/cli/chunks/{platform-YH35ZZFZ.js → platform-TKD4JCUG.js} +2 -2
  183. package/dist/cli/chunks/{plugin-B7JYZFNQ.js → plugin-XXJ7R6SY.js} +2 -2
  184. package/dist/cli/chunks/{prime-radiant-advanced-wasm-KTUK6UE2.js → prime-radiant-advanced-wasm-JLJ6NKIP.js} +2 -2
  185. package/dist/cli/chunks/protocol-executor-ORFR4WJ3.js +2 -0
  186. package/dist/cli/chunks/{protocol-handler-3NXMVU34.js → protocol-handler-ZLYGQPHG.js} +2 -2
  187. package/dist/cli/chunks/{prove-H5LMGSUC.js → prove-E2WZ335X.js} +2 -2
  188. package/dist/cli/chunks/qe-reasoning-bank-PLTOH4SG.js +2 -0
  189. package/dist/cli/chunks/{quality-RCWHY6GO.js → quality-6MHHBINU.js} +2 -2
  190. package/dist/cli/chunks/queen-coordinator-L3TRAX7H.js +2 -0
  191. package/dist/cli/chunks/{real-embeddings-NKH4VURF.js → real-embeddings-QN5BY3WS.js} +2 -2
  192. package/dist/cli/chunks/{roocode-installer-SB7QJYM3.js → roocode-installer-GTVII272.js} +2 -2
  193. package/dist/cli/chunks/router-3PBJJLRQ.js +2 -0
  194. package/dist/cli/chunks/routing-feedback-Q775MZ3Z.js +2 -0
  195. package/dist/cli/chunks/{routing-handler-SY7GKG2W.js → routing-handler-HYKZ3ISS.js} +2 -2
  196. package/dist/cli/chunks/{ruvector-commands-HATTO3UQ.js → ruvector-commands-LBWHPUTZ.js} +2 -2
  197. package/dist/cli/chunks/{rvf-dual-writer-D57EXQUD.js → rvf-dual-writer-TVCJ2Y6N.js} +2 -2
  198. package/dist/cli/chunks/{rvf-migration-adapter-OWDYN6KD.js → rvf-migration-adapter-34ITXLU3.js} +2 -2
  199. package/dist/cli/chunks/{rvf-migration-coordinator-SIQVJB5S.js → rvf-migration-coordinator-SX2C7777.js} +2 -2
  200. package/dist/cli/chunks/rvf-native-adapter-HLY2652E.js +2 -0
  201. package/dist/cli/chunks/safe-db-CCKCBZ5I.js +2 -0
  202. package/dist/cli/chunks/schedule-WZ5VV55N.js +2 -0
  203. package/dist/cli/chunks/scheduler-6PIKLCH7.js +2 -0
  204. package/dist/cli/chunks/{security-DS3XLZWN.js → security-7A4EW77M.js} +3 -3
  205. package/dist/cli/chunks/shared-rvf-adapter-VCJNSACZ.js +2 -0
  206. package/dist/cli/chunks/{shared-rvf-dual-writer-YB7AH6XJ.js → shared-rvf-dual-writer-27L4R5WK.js} +2 -2
  207. package/dist/cli/chunks/sqlite-persistence-HMXYD56G.js +2 -0
  208. package/dist/cli/chunks/{status-handler-TUYHE4FT.js → status-handler-JN6PRYLD.js} +2 -2
  209. package/dist/cli/chunks/{structural-health-XNGBNRRD.js → structural-health-JSY3DY7H.js} +2 -2
  210. package/dist/cli/chunks/{sync-K6CIRKBB.js → sync-ET3LYW2V.js} +10 -10
  211. package/dist/cli/chunks/{task-handler-7PJY67DR.js → task-handler-R24MR74L.js} +2 -2
  212. package/dist/cli/chunks/{task-handlers-WB5CDWUR.js → task-handlers-YNPEEPPZ.js} +2 -2
  213. package/dist/cli/chunks/{test-WV5ALEBB.js → test-7BZXFZCT.js} +4 -4
  214. package/dist/cli/chunks/{test-scheduling-N55ZGGA2.js → test-scheduling-EVIFD5EY.js} +3 -3
  215. package/dist/cli/chunks/{token-bootstrap-SINWHAKR.js → token-bootstrap-QYYQRXM5.js} +2 -2
  216. package/dist/cli/chunks/{token-usage-R7TGEVGL.js → token-usage-H4OZA77I.js} +2 -2
  217. package/dist/cli/chunks/{transformers-6DBLXPV7.js → transformers-ILQFO5HZ.js} +2 -2
  218. package/dist/cli/chunks/{tree-sitter-wasm-parser-7C7FKMQW.js → tree-sitter-wasm-parser-KTST5NWH.js} +2 -2
  219. package/dist/cli/chunks/{types-VNPMOKQT.js → types-4Z7XELU6.js} +2 -2
  220. package/dist/cli/chunks/unified-memory-RBHCTAWW.js +2 -0
  221. package/dist/cli/chunks/unified-memory-hnsw-UBF5PT6D.js +2 -0
  222. package/dist/cli/chunks/unified-persistence-ZIJDP6GW.js +2 -0
  223. package/dist/cli/chunks/{validate-53MNIRAF.js → validate-GSQCH6VN.js} +2 -2
  224. package/dist/cli/chunks/{validate-swarm-ZY4RGUFO.js → validate-swarm-SP2RPOYD.js} +2 -2
  225. package/dist/cli/chunks/{vibium-PBADBIV6.js → vibium-2SGOFYTF.js} +2 -2
  226. package/dist/cli/chunks/visual-security-WKIWOUTH.js +2 -0
  227. package/dist/cli/chunks/{web-tree-sitter-O7VI6RLB.js → web-tree-sitter-QSQ27UTH.js} +2 -2
  228. package/dist/cli/chunks/{windsurf-installer-HV3C3TAD.js → windsurf-installer-NIEH46E2.js} +2 -2
  229. package/dist/cli/chunks/witness-chain-4BRX3GGH.js +2 -0
  230. package/dist/cli/chunks/{witness-chain-4WIMYP4X.js → witness-chain-62GJTCT5.js} +2 -2
  231. package/dist/cli/chunks/{workflow-5RVAQ4TM.js → workflow-WZMV2MGW.js} +4 -4
  232. package/dist/cli/chunks/workflow-orchestrator-G6VU7QZ4.js +2 -0
  233. package/dist/cli/chunks/{wrappers-RRHCCA3E.js → wrappers-LNTV533I.js} +2 -2
  234. package/dist/cli/commands/init.js +2 -0
  235. package/dist/cli/commands/mcp.js +27 -17
  236. package/dist/cli/commands/sync.js +25 -8
  237. package/dist/cli/handlers/init-handler.d.ts +1 -0
  238. package/dist/cli/handlers/init-handler.js +2 -0
  239. package/dist/init/governance-installer.js +46 -14
  240. package/dist/init/kiro-installer.js +15 -2
  241. package/dist/init/orchestrator.js +1 -0
  242. package/dist/init/phases/06-code-intelligence.d.ts +46 -1
  243. package/dist/init/phases/06-code-intelligence.js +164 -10
  244. package/dist/init/phases/10-workers.d.ts +0 -14
  245. package/dist/init/phases/10-workers.js +19 -164
  246. package/dist/init/phases/phase-interface.d.ts +9 -0
  247. package/dist/kernel/hnsw-adapter.d.ts +14 -0
  248. package/dist/kernel/hnsw-adapter.js +25 -1
  249. package/dist/kernel/hnsw-index-provider.d.ts +16 -0
  250. package/dist/kernel/native-hnsw-backend.d.ts +11 -0
  251. package/dist/kernel/native-hnsw-backend.js +20 -0
  252. package/dist/kernel/progressive-hnsw-backend.d.ts +9 -0
  253. package/dist/kernel/progressive-hnsw-backend.js +41 -12
  254. package/dist/kernel/unified-memory.js +10 -0
  255. package/dist/mcp/bundle.js +216 -216
  256. package/dist/optimization/token-optimizer-service.d.ts +31 -2
  257. package/dist/optimization/token-optimizer-service.js +85 -23
  258. package/package.json +1 -1
  259. package/dist/cli/chunks/adapter-53WBPKXU.js +0 -2
  260. package/dist/cli/chunks/aqe-learning-engine-MV7NGY24.js +0 -2
  261. package/dist/cli/chunks/base-DZVGMQN2.js +0 -2
  262. package/dist/cli/chunks/browser-workflow-3J5YNMEI.js +0 -2
  263. package/dist/cli/chunks/chunk-LCAA6H4J.js +0 -2
  264. package/dist/cli/chunks/chunk-XIBVVZGB.js +0 -2
  265. package/dist/cli/chunks/client-EF555KYW.js +0 -2
  266. package/dist/cli/chunks/cross-domain-router-GXFNK5TS.js +0 -2
  267. package/dist/cli/chunks/dream-3IKF5XH4.js +0 -2
  268. package/dist/cli/chunks/esm-node-DHAE52OW.js +0 -2
  269. package/dist/cli/chunks/hnsw-adapter-DML5KXQR.js +0 -2
  270. package/dist/cli/chunks/hnsw-index-BUPPGVR6.js +0 -2
  271. package/dist/cli/chunks/impact-analyzer-DPTMJRYS.js +0 -2
  272. package/dist/cli/chunks/init-handler-IJ6BHE6A.js +0 -68
  273. package/dist/cli/chunks/init-wizard-35PUDJPW.js +0 -2
  274. package/dist/cli/chunks/kernel-2HZ44ZJ4.js +0 -2
  275. package/dist/cli/chunks/knowledge-graph-JL62G72U.js +0 -2
  276. package/dist/cli/chunks/load-test-LN245SSD.js +0 -2
  277. package/dist/cli/chunks/mcp-4LETGVIV.js +0 -2
  278. package/dist/cli/chunks/memory-backend-SVM7YRIE.js +0 -2
  279. package/dist/cli/chunks/orchestrator-YLMGJVSP.js +0 -371
  280. package/dist/cli/chunks/protocol-executor-IEN2XB4L.js +0 -2
  281. package/dist/cli/chunks/qe-reasoning-bank-Q3ZV3JRG.js +0 -2
  282. package/dist/cli/chunks/queen-coordinator-E6ON3JUR.js +0 -2
  283. package/dist/cli/chunks/router-WMC3LZ3C.js +0 -2
  284. package/dist/cli/chunks/routing-feedback-VKCZRCE3.js +0 -2
  285. package/dist/cli/chunks/rvf-native-adapter-C7NBH5UN.js +0 -2
  286. package/dist/cli/chunks/safe-db-5KLXCNXN.js +0 -2
  287. package/dist/cli/chunks/schedule-HAWWOXWB.js +0 -2
  288. package/dist/cli/chunks/scheduler-HTRDY5BC.js +0 -2
  289. package/dist/cli/chunks/shared-rvf-adapter-6I2Z5UGL.js +0 -2
  290. package/dist/cli/chunks/sqlite-persistence-WNNRGTGG.js +0 -2
  291. package/dist/cli/chunks/unified-memory-72SKVZ7Y.js +0 -2
  292. package/dist/cli/chunks/unified-memory-hnsw-TMN2L77W.js +0 -2
  293. package/dist/cli/chunks/unified-persistence-MDN3SRCR.js +0 -2
  294. package/dist/cli/chunks/visual-security-TRBCXPIB.js +0 -2
  295. package/dist/cli/chunks/witness-chain-JOI2YYGK.js +0 -2
  296. package/dist/cli/chunks/workflow-orchestrator-2NQ72S3C.js +0 -2
@@ -29,6 +29,7 @@ export class InitHandler {
29
29
  .option('-u, --upgrade', 'Upgrade existing installation (overwrite skills, agents, validation)')
30
30
  .option('--minimal', 'Minimal configuration (skip optional features)')
31
31
  .option('--skip-patterns', 'Skip loading pre-trained patterns')
32
+ .option('--skip-code-index', 'Skip code intelligence pre-scan (run `aqe code index` later)')
32
33
  .option('--with-n8n', 'Install n8n workflow testing agents and skills')
33
34
  .option('--with-opencode', 'Include OpenCode agent/skill provisioning')
34
35
  .option('--with-kiro', 'Include AWS Kiro IDE integration (agents, skills, hooks, steering)')
@@ -97,6 +98,7 @@ export class InitHandler {
97
98
  upgrade: options.upgrade,
98
99
  minimal: options.minimal,
99
100
  skipPatterns: options.skipPatterns,
101
+ skipCodeIndex: options.skipCodeIndex,
100
102
  withN8n: options.withN8n,
101
103
  withOpenCode: options.withOpencode,
102
104
  withKiro: options.withKiro,
@@ -13,28 +13,60 @@ import { existsSync, mkdirSync, readdirSync, copyFileSync } from 'fs';
13
13
  import { join, dirname } from 'path';
14
14
  import { fileURLToPath } from 'url';
15
15
  import { toErrorMessage } from '../shared/error-utils.js';
16
+ import { findPackageRoot } from './find-package-root.js';
16
17
  // ============================================================================
17
18
  // Constants
18
19
  // ============================================================================
19
20
  const __filename = fileURLToPath(import.meta.url);
20
21
  const __dirname = dirname(__filename);
21
22
  /**
22
- * Path to bundled governance assets
23
+ * Path to bundled governance assets.
24
+ *
25
+ * fix/init-v3-9-4: In v3.9.1 this function was missed when skills-installer,
26
+ * agents-installer, opencode-installer, and n8n-installer were migrated to
27
+ * findPackageRoot(). The old fixed-depth `__dirname + '../../'` traversals
28
+ * work when the file is compiled as a standalone ESM module at
29
+ * `dist/init/governance-installer.js`, but they silently break when esbuild
30
+ * code-splitting bundles this module into a chunk under
31
+ * `dist/cli/chunks/chunk-XXX.js` — at which point `__dirname` points to
32
+ * the chunks directory and both candidate traversals land outside the
33
+ * package. That made the governance phase throw "Governance assets not
34
+ * found. Package may be corrupted." during phase 13 of `aqe init`, which
35
+ * the orchestrator caught and reported as `x Install governance
36
+ * configuration (1ms)` on cf-devpod.
37
+ *
38
+ * Resolution order (each path is checked with existsSync):
39
+ * 1. Dev tree fixed paths — work when running from src/ or the
40
+ * standalone-compiled dist/init/.
41
+ * 2. findPackageRoot() walk-up — finds the nearest package.json with
42
+ * name=agentic-qe regardless of bundle depth. This is the correct
43
+ * path for all production installs.
44
+ * 3. Consumer's node_modules — covers edge cases where the package is a
45
+ * transitive dep.
46
+ * 4. process.cwd() fallback — dev tree when running from project root.
23
47
  */
24
48
  function getGovernanceAssetsPath() {
25
- // In development: src/init -> assets/governance
26
- // In production: dist/init -> dist/assets/governance (copied during build)
27
- const devPath = join(__dirname, '../../assets/governance');
28
- const prodPath = join(__dirname, '../assets/governance');
29
- if (existsSync(devPath))
30
- return devPath;
31
- if (existsSync(prodPath))
32
- return prodPath;
33
- // Fallback to assets (when running from project root)
34
- const fallbackPath = join(process.cwd(), 'assets/governance');
35
- if (existsSync(fallbackPath))
36
- return fallbackPath;
37
- throw new Error('Governance assets not found. Package may be corrupted.');
49
+ // 1. Dev tree fixed paths (src/init/ and standalone dist/init/)
50
+ const candidates = [
51
+ join(__dirname, '../../assets/governance'),
52
+ join(__dirname, '../assets/governance'),
53
+ ];
54
+ // 2. Walk up to the package root (works for chunk-split bundles)
55
+ const packageRoot = findPackageRoot(import.meta.url);
56
+ if (packageRoot) {
57
+ candidates.push(join(packageRoot, 'assets/governance'));
58
+ candidates.push(join(packageRoot, 'dist/assets/governance'));
59
+ }
60
+ // 3. Consumer's node_modules
61
+ candidates.push(join(process.cwd(), 'node_modules/agentic-qe/assets/governance'));
62
+ // 4. Fallback to cwd (dev tree running from project root)
63
+ candidates.push(join(process.cwd(), 'assets/governance'));
64
+ for (const c of candidates) {
65
+ if (existsSync(c))
66
+ return c;
67
+ }
68
+ throw new Error('Governance assets not found. Package may be corrupted. ' +
69
+ `Searched: ${candidates.join(', ')}`);
38
70
  }
39
71
  // ============================================================================
40
72
  // Installer
@@ -9,6 +9,7 @@ import { existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync, } from
9
9
  import { join, dirname } from 'path';
10
10
  import { fileURLToPath } from 'url';
11
11
  import { toErrorMessage } from '../shared/error-utils.js';
12
+ import { findPackageRoot } from './find-package-root.js';
12
13
  // ESM compatibility
13
14
  const __filename = fileURLToPath(import.meta.url);
14
15
  const __dirname = dirname(__filename);
@@ -35,12 +36,24 @@ export class KiroInstaller {
35
36
  // Source Directory Detection
36
37
  // ==========================================================================
37
38
  findOpenCodeDir() {
39
+ // fix/init-v3-9-4: same chunk-split bundle regression as
40
+ // governance-installer. Walk up to the agentic-qe package root
41
+ // via findPackageRoot() instead of using fragile __dirname + '../..'
42
+ // traversals that break when this module is bundled into a chunk
43
+ // under dist/cli/chunks/.
38
44
  const possiblePaths = [
39
- // Development: src/init/ or dist/init/ -> project root
45
+ // Dev tree fixed paths (src/init/ and standalone dist/init/)
40
46
  join(__dirname, '../../.opencode'),
41
- // NPM package location
42
47
  join(__dirname, '../../assets/opencode'),
43
48
  ];
49
+ // Walk up to the package root (works for chunk-split bundles)
50
+ const packageRoot = findPackageRoot(import.meta.url);
51
+ if (packageRoot) {
52
+ possiblePaths.push(join(packageRoot, '.opencode'));
53
+ possiblePaths.push(join(packageRoot, 'assets/opencode'));
54
+ }
55
+ // Consumer's node_modules
56
+ possiblePaths.push(join(process.cwd(), 'node_modules/agentic-qe/assets/opencode'), join(process.cwd(), 'node_modules/agentic-qe/.opencode'));
44
57
  for (const p of possiblePaths) {
45
58
  if (existsSync(p) && (existsSync(join(p, 'agents')) || existsSync(join(p, 'skills')))) {
46
59
  return p;
@@ -31,6 +31,7 @@ export class ModularInitOrchestrator {
31
31
  autoMode: options.autoMode,
32
32
  upgrade: options.upgrade,
33
33
  skipPatterns: options.skipPatterns,
34
+ skipCodeIndex: options.skipCodeIndex,
34
35
  minimal: options.minimal,
35
36
  withN8n: options.withN8n,
36
37
  withOpenCode: options.withOpenCode,
@@ -8,8 +8,10 @@
8
8
  */
9
9
  import { BasePhase, type InitContext } from './phase-interface.js';
10
10
  export interface CodeIntelligenceResult {
11
- status: 'indexed' | 'existing' | 'skipped' | 'error';
11
+ status: 'indexed' | 'existing' | 'skipped' | 'error' | 'timeout';
12
12
  entries: number;
13
+ /** Last file the indexer touched before a timeout, if any. Used for diagnostics. */
14
+ timeoutFile?: string;
13
15
  }
14
16
  /**
15
17
  * Code Intelligence phase - builds knowledge graph
@@ -20,6 +22,19 @@ export declare class CodeIntelligencePhase extends BasePhase<CodeIntelligenceRes
20
22
  readonly order = 60;
21
23
  readonly critical = false;
22
24
  readonly requiresPhases: readonly ["database"];
25
+ /**
26
+ * Opt-out gate: v3.9.4 escape hatch for users whose code intelligence
27
+ * pre-scan stalls on native calls that the phase-level watchdog can't
28
+ * interrupt (because Node's event loop is blocked inside synchronous
29
+ * NAPI code). Setting `AQE_SKIP_CODE_INDEX=1` or passing
30
+ * `--skip-code-index` to `aqe init` bypasses this phase entirely.
31
+ * Lazy on-demand indexing still works when the user runs
32
+ * `aqe code index` or `aqe memory search` afterwards.
33
+ *
34
+ * See https://github.com/proffesor-for-testing/agentic-qe/issues/XXX
35
+ * for the tracking issue on the proper killable-worker fix.
36
+ */
37
+ shouldRun(context: InitContext): Promise<boolean>;
23
38
  protected run(context: InitContext): Promise<CodeIntelligenceResult>;
24
39
  /**
25
40
  * Check if code intelligence index exists (uses provided db connection)
@@ -38,8 +53,38 @@ export declare class CodeIntelligencePhase extends BasePhase<CodeIntelligenceRes
38
53
  * - Dependency analysis (impact of changes)
39
54
  * - Test target discovery (what tests cover what code)
40
55
  * - Token reduction (search KG instead of reading entire files)
56
+ *
57
+ * fix/init-v3-9-3 Fix 5: The whole scan is wrapped in a phase-level
58
+ * watchdog. Inside, each file is indexed via `indexOneFile()` with a
59
+ * per-file timeout so a single pathological file or a native-layer
60
+ * stall (e.g. @ruvector/rvf-node fsync on an overlay filesystem) can
61
+ * never block the init command indefinitely. Progress is logged every
62
+ * PROGRESS_LOG_INTERVAL files so operators can see exactly where the
63
+ * indexer is — and, if a timeout fires, which file was responsible.
41
64
  */
42
65
  private runCodeIntelligenceScan;
66
+ /**
67
+ * Drive file-by-file indexing with per-file and phase-level timeouts.
68
+ *
69
+ * fix/init-v3-9-3 Fix 5. This method is the reason v3.9.3 can survive
70
+ * pathological files and native-layer stalls that hung v3.9.1/v3.9.2.
71
+ *
72
+ * Invariants:
73
+ * - A single file cannot block longer than PER_FILE_TIMEOUT_MS.
74
+ * - The whole loop cannot block longer than PHASE_TIMEOUT_MS.
75
+ * - Progress is observable via structured log lines.
76
+ * - Partial results are kept — on timeout we return the entries
77
+ * indexed so far, not zero.
78
+ */
79
+ private runBoundedScan;
80
+ /**
81
+ * Race a promise against a timer. On timeout, rejects with a tagged
82
+ * error so the caller can distinguish timeouts from real failures.
83
+ *
84
+ * The tagged error prefix 'AQE_PER_FILE_TIMEOUT' is matched in
85
+ * runBoundedScan to differentiate per-file timeouts from other errors.
86
+ */
87
+ private withTimeout;
43
88
  /**
44
89
  * Build hypergraph from indexed files.
45
90
  * Uses shared extractor to populate hypergraph_nodes/hypergraph_edges in memory.db.
@@ -12,6 +12,20 @@ import { safeJsonParse } from '../../shared/safe-json.js';
12
12
  import { openDatabase } from '../../shared/safe-db.js';
13
13
  import { BasePhase, } from './phase-interface.js';
14
14
  import { createMemoryBackend } from '../../kernel/memory-factory.js';
15
+ // ============================================================================
16
+ // Watchdog configuration (fix/init-v3-9-3 Fix 5)
17
+ //
18
+ // These are deliberately generous. Normal codebases of 10k+ entities index
19
+ // in under 3 seconds on a laptop. The caps exist so that a pathological file
20
+ // or a native-layer stall (e.g. on an overlay filesystem) can't hang the
21
+ // entire init command indefinitely. When a cap fires the phase returns
22
+ // gracefully with status='timeout', the warning names the last file, and the
23
+ // user can open an issue with that exact filename.
24
+ // ============================================================================
25
+ /** Per-file timeout. A single file must not take longer than this to index. */
26
+ const PER_FILE_TIMEOUT_MS = 30_000;
27
+ /** Whole-phase timeout. The full KG build must not take longer than this. */
28
+ const PHASE_TIMEOUT_MS = 180_000;
15
29
  /** Patterns to exclude from code intelligence scanning */
16
30
  const SCAN_IGNORE_PATTERNS = [
17
31
  '**/node_modules/**',
@@ -52,6 +66,32 @@ export class CodeIntelligencePhase extends BasePhase {
52
66
  order = 60;
53
67
  critical = false;
54
68
  requiresPhases = ['database'];
69
+ /**
70
+ * Opt-out gate: v3.9.4 escape hatch for users whose code intelligence
71
+ * pre-scan stalls on native calls that the phase-level watchdog can't
72
+ * interrupt (because Node's event loop is blocked inside synchronous
73
+ * NAPI code). Setting `AQE_SKIP_CODE_INDEX=1` or passing
74
+ * `--skip-code-index` to `aqe init` bypasses this phase entirely.
75
+ * Lazy on-demand indexing still works when the user runs
76
+ * `aqe code index` or `aqe memory search` afterwards.
77
+ *
78
+ * See https://github.com/proffesor-for-testing/agentic-qe/issues/XXX
79
+ * for the tracking issue on the proper killable-worker fix.
80
+ */
81
+ async shouldRun(context) {
82
+ const envSkip = process.env.AQE_SKIP_CODE_INDEX;
83
+ if (envSkip === '1' || envSkip === 'true') {
84
+ context.services.log(' Code intelligence skipped (AQE_SKIP_CODE_INDEX=1)');
85
+ context.services.log(' Run `aqe code index` later to build the KG on demand.');
86
+ return false;
87
+ }
88
+ if (context.options.skipCodeIndex) {
89
+ context.services.log(' Code intelligence skipped (--skip-code-index)');
90
+ context.services.log(' Run `aqe code index` later to build the KG on demand.');
91
+ return false;
92
+ }
93
+ return true;
94
+ }
55
95
  async run(context) {
56
96
  const { projectRoot } = context;
57
97
  const dbPath = join(projectRoot, '.agentic-qe', 'memory.db');
@@ -133,6 +173,14 @@ export class CodeIntelligencePhase extends BasePhase {
133
173
  * - Dependency analysis (impact of changes)
134
174
  * - Test target discovery (what tests cover what code)
135
175
  * - Token reduction (search KG instead of reading entire files)
176
+ *
177
+ * fix/init-v3-9-3 Fix 5: The whole scan is wrapped in a phase-level
178
+ * watchdog. Inside, each file is indexed via `indexOneFile()` with a
179
+ * per-file timeout so a single pathological file or a native-layer
180
+ * stall (e.g. @ruvector/rvf-node fsync on an overlay filesystem) can
181
+ * never block the init command indefinitely. Progress is logged every
182
+ * PROGRESS_LOG_INTERVAL files so operators can see exactly where the
183
+ * indexer is — and, if a timeout fires, which file was responsible.
136
184
  */
137
185
  async runCodeIntelligenceScan(projectRoot, context, incremental, changedFiles) {
138
186
  try {
@@ -164,29 +212,135 @@ export class CodeIntelligencePhase extends BasePhase {
164
212
  });
165
213
  filesToIndex = files.map(f => join(projectRoot, f));
166
214
  }
167
- const result = await kgService.index({
168
- paths: filesToIndex,
169
- incremental,
170
- includeTests: true,
171
- });
215
+ context.services.log(` Scanning ${filesToIndex.length} source files...`);
216
+ // Race the whole scan against a phase-level watchdog. If the cap
217
+ // fires, we stop eating files and report how far we got.
218
+ const scanResult = await this.runBoundedScan(kgService, filesToIndex, incremental, context);
172
219
  kgService.destroy();
173
220
  await memory.dispose();
174
- if (result.success) {
175
- const entries = result.value.nodesCreated + result.value.edgesCreated;
221
+ if (scanResult.status === 'timeout') {
222
+ context.services.warn(` ⚠ Code intelligence pre-scan exceeded ${PHASE_TIMEOUT_MS / 1000}s phase cap. ` +
223
+ `Indexed ${scanResult.entries} entries before timeout. ` +
224
+ `Last file: ${scanResult.timeoutFile ?? '(unknown)'}. ` +
225
+ `Init is continuing — re-run 'aqe code index' later, or report this file to ` +
226
+ `https://github.com/proffesor-for-testing/agentic-qe/issues.`);
227
+ return scanResult;
228
+ }
229
+ if (scanResult.status === 'indexed') {
176
230
  const label = incremental ? 'Delta indexed' : 'Indexed';
177
- context.services.log(` ${label} ${entries} entries to ${dbPath}`);
231
+ context.services.log(` ${label} ${scanResult.entries} entries to ${dbPath}`);
178
232
  // Also populate the hypergraph tables (hypergraph_nodes/hypergraph_edges)
179
233
  // so CLI/MCP hypergraph queries work immediately after init
180
234
  await this.buildHypergraph(dbPath, filesToIndex, context);
181
- return { status: 'indexed', entries };
182
235
  }
183
- return { status: 'error', entries: 0 };
236
+ return scanResult;
184
237
  }
185
238
  catch (error) {
186
239
  context.services.warn(`Code intelligence scan warning: ${error}`);
187
240
  return { status: 'skipped', entries: 0 };
188
241
  }
189
242
  }
243
+ /**
244
+ * Drive file-by-file indexing with per-file and phase-level timeouts.
245
+ *
246
+ * fix/init-v3-9-3 Fix 5. This method is the reason v3.9.3 can survive
247
+ * pathological files and native-layer stalls that hung v3.9.1/v3.9.2.
248
+ *
249
+ * Invariants:
250
+ * - A single file cannot block longer than PER_FILE_TIMEOUT_MS.
251
+ * - The whole loop cannot block longer than PHASE_TIMEOUT_MS.
252
+ * - Progress is observable via structured log lines.
253
+ * - Partial results are kept — on timeout we return the entries
254
+ * indexed so far, not zero.
255
+ */
256
+ async runBoundedScan(kgService, filesToIndex, incremental, context) {
257
+ // Use the public index() with a one-file array per call so we can
258
+ // attach a per-file timeout and log progress.
259
+ let totalNodes = 0;
260
+ let totalEdges = 0;
261
+ let processed = 0;
262
+ let lastFile = '';
263
+ const startedAt = Date.now();
264
+ let timedOut = false;
265
+ // Clear once up-front if this is a full rebuild. The per-file calls
266
+ // below must not clear between files.
267
+ if (!incremental) {
268
+ await kgService.clear();
269
+ }
270
+ // Project-relative path helper for shorter per-file log lines.
271
+ const projectRoot = context.projectRoot;
272
+ const rel = (p) => p.startsWith(projectRoot) ? p.slice(projectRoot.length + 1) : p;
273
+ for (const file of filesToIndex) {
274
+ // Phase-level cap. Checked between files so in-flight work can
275
+ // still complete bounded by its own per-file cap.
276
+ //
277
+ // IMPORTANT: This check only fires BETWEEN file iterations. If a
278
+ // single call to kgService.index() blocks the Node event loop
279
+ // inside synchronous native code (e.g. an @ruvector/router
280
+ // native insert stalls on a specific vector shape), this check
281
+ // never runs and the phase appears to hang past PHASE_TIMEOUT_MS.
282
+ // That's the v3.9.3 failure mode observed on ruview. See
283
+ // shouldRun() for the v3.9.4 AQE_SKIP_CODE_INDEX escape hatch
284
+ // and the tracking issue for the killable-worker proper fix.
285
+ if (Date.now() - startedAt > PHASE_TIMEOUT_MS) {
286
+ timedOut = true;
287
+ break;
288
+ }
289
+ lastFile = file;
290
+ // fix/init-v3-9-4 Fix B: log EVERY file *before* we start
291
+ // processing it, not at 100-file intervals. This is the single
292
+ // most important diagnostic — when the next hang happens, the
293
+ // last log line will name the exact file that stalls, which is
294
+ // the data we need to fix the underlying native cause.
295
+ context.services.log(` [${processed + 1}/${filesToIndex.length}] ${rel(file)}`);
296
+ try {
297
+ const indexResult = await this.withTimeout(kgService.index({
298
+ paths: [file],
299
+ incremental: true, // don't clear — we already cleared above
300
+ includeTests: true,
301
+ }), PER_FILE_TIMEOUT_MS, file);
302
+ if (indexResult.success) {
303
+ totalNodes += indexResult.value.nodesCreated;
304
+ totalEdges += indexResult.value.edgesCreated;
305
+ }
306
+ }
307
+ catch (err) {
308
+ const message = err instanceof Error ? err.message : String(err);
309
+ if (message.startsWith('AQE_PER_FILE_TIMEOUT')) {
310
+ // Skip the pathological file, log, and keep going.
311
+ context.services.warn(` ⚠ Skipped ${rel(file)} — indexing exceeded ${PER_FILE_TIMEOUT_MS / 1000}s`);
312
+ }
313
+ else {
314
+ context.services.warn(` ⚠ Failed to index ${rel(file)}: ${message}`);
315
+ }
316
+ }
317
+ processed++;
318
+ }
319
+ const entries = totalNodes + totalEdges;
320
+ if (timedOut) {
321
+ return { status: 'timeout', entries, timeoutFile: lastFile };
322
+ }
323
+ return { status: 'indexed', entries };
324
+ }
325
+ /**
326
+ * Race a promise against a timer. On timeout, rejects with a tagged
327
+ * error so the caller can distinguish timeouts from real failures.
328
+ *
329
+ * The tagged error prefix 'AQE_PER_FILE_TIMEOUT' is matched in
330
+ * runBoundedScan to differentiate per-file timeouts from other errors.
331
+ */
332
+ withTimeout(promise, timeoutMs, fileLabel) {
333
+ return new Promise((resolve, reject) => {
334
+ const timer = setTimeout(() => {
335
+ reject(new Error(`AQE_PER_FILE_TIMEOUT: ${fileLabel}`));
336
+ }, timeoutMs);
337
+ // unref so the timer doesn't keep the event loop alive if the
338
+ // promise resolves via the fast path.
339
+ if (typeof timer.unref === 'function')
340
+ timer.unref();
341
+ promise.then((v) => { clearTimeout(timer); resolve(v); }, (e) => { clearTimeout(timer); reject(e); });
342
+ });
343
+ }
190
344
  /**
191
345
  * Build hypergraph from indexed files.
192
346
  * Uses shared extractor to populate hypergraph_nodes/hypergraph_edges in memory.db.
@@ -22,19 +22,5 @@ export declare class WorkersPhase extends BasePhase<WorkersResult> {
22
22
  readonly requiresPhases: readonly ["configuration"];
23
23
  shouldRun(context: InitContext): Promise<boolean>;
24
24
  protected run(context: InitContext): Promise<WorkersResult>;
25
- /**
26
- * Start the MCP daemon in the background
27
- */
28
- private startDaemon;
29
- /**
30
- * Find the aqe-mcp command
31
- *
32
- * Search order:
33
- * 1. Local aqe-mcp binary (node_modules/.bin/)
34
- * 2. Local bundled MCP server (node_modules/agentic-qe/dist/)
35
- * 3. Local aqe CLI binary with mcp subcommand
36
- * 4. npx fallback (uses aqe mcp subcommand)
37
- */
38
- private findMcpCommand;
39
25
  }
40
26
  //# sourceMappingURL=10-workers.d.ts.map
@@ -2,9 +2,8 @@
2
2
  * Phase 10: Workers
3
3
  * Configures background workers for continuous monitoring
4
4
  */
5
- import { existsSync, mkdirSync, writeFileSync, readFileSync } from 'fs';
5
+ import { existsSync, mkdirSync, writeFileSync } from 'fs';
6
6
  import { join } from 'path';
7
- import { spawn } from 'child_process';
8
7
  import { BasePhase, } from './phase-interface.js';
9
8
  /**
10
9
  * Workers phase - configures background workers
@@ -183,174 +182,30 @@ try {
183
182
  writeFileSync(stopScriptPath, stopScript);
184
183
  context.services.log(` Workers dir: ${workersDir}`);
185
184
  context.services.log(` Workers: ${config.workers.enabled.join(', ')}`);
186
- // Auto-start the MCP daemon if configured
187
- let daemonStarted = false;
188
- let daemonPid = null;
189
- let daemonError;
190
- if (config.workers.daemonAutoStart) {
191
- try {
192
- const result = await this.startDaemon(workersDir, projectRoot, context);
193
- daemonStarted = result.started;
194
- daemonPid = result.pid;
195
- daemonError = result.error;
196
- if (daemonStarted) {
197
- context.services.log(` MCP daemon started (PID: ${daemonPid})`);
198
- }
199
- else if (daemonError) {
200
- // Non-blocking: MCP will be started by Claude Code via .mcp.json
201
- context.services.log(` MCP daemon: skipped (will start via Claude Code)`);
202
- context.services.log(` Note: ${daemonError}`);
203
- }
204
- }
205
- catch (error) {
206
- // Non-blocking error - MCP works fine when Claude Code starts it
207
- daemonError = error instanceof Error ? error.message : 'Unknown error';
208
- context.services.log(` MCP daemon: skipped (Claude Code will start it)`);
209
- }
210
- }
185
+ context.services.log(` Registry: ${registryPath}`);
186
+ // MCP daemon startup is Claude Code's job, not init's.
187
+ //
188
+ // fix/init-v3-9-3 Fix 3: Previously this phase spawned `aqe mcp` as
189
+ // a detached child to pre-warm the MCP server. That spawn raced the
190
+ // init process for the same RVF / native HNSW file locks, producing
191
+ // the cascade of errors seen in v3.9.1 and v3.9.2:
192
+ // • RVF error 0x0303: FsyncFailed (child couldn't open patterns.rvf)
193
+ // • VectorDb creation failed: Database already open
194
+ // • Error: Could not find MCP server entry point
195
+ //
196
+ // The canonical path is .mcp.json (written by phase 08). Claude Code
197
+ // reads it and starts `aqe mcp` on demand when a user actually opens
198
+ // the project. Users who want to run the daemon manually can use the
199
+ // generated `.agentic-qe/workers/start-daemon.cjs` helper script or
200
+ // the `aqe daemon` subcommand.
211
201
  return {
212
202
  workersDir,
213
203
  workersConfigured: config.workers.enabled.length,
214
204
  registryPath,
215
- daemonStarted,
216
- daemonPid,
217
- daemonError,
205
+ daemonStarted: false,
206
+ daemonPid: null,
218
207
  };
219
208
  }
220
- /**
221
- * Start the MCP daemon in the background
222
- */
223
- async startDaemon(workersDir, projectRoot, context) {
224
- const pidFile = join(workersDir, 'daemon.pid');
225
- const logFile = join(workersDir, 'daemon.log');
226
- // Check if already running
227
- if (existsSync(pidFile)) {
228
- try {
229
- const existingPid = parseInt(readFileSync(pidFile, 'utf-8').trim(), 10);
230
- // Check if process is running
231
- process.kill(existingPid, 0);
232
- return { started: true, pid: existingPid, error: 'Already running' };
233
- }
234
- catch {
235
- // PID file exists but process not running, continue
236
- }
237
- }
238
- // Try to find aqe-mcp command
239
- const mcpCommand = await this.findMcpCommand(projectRoot);
240
- if (!mcpCommand) {
241
- return {
242
- started: false,
243
- pid: null,
244
- error: 'aqe-mcp not found. Install globally with: npm install -g agentic-qe',
245
- };
246
- }
247
- return new Promise((resolve) => {
248
- try {
249
- // Set up environment
250
- const env = {
251
- ...process.env,
252
- AQE_STORAGE_PATH: '.agentic-qe',
253
- AQE_LEARNING_ENABLED: 'true',
254
- AQE_WORKERS_ENABLED: 'true',
255
- AQE_HTTP_PORT: '0',
256
- };
257
- // Spawn the MCP server as a detached process
258
- const child = spawn(mcpCommand.command, mcpCommand.args, {
259
- cwd: projectRoot,
260
- env,
261
- detached: true,
262
- stdio: ['ignore', 'pipe', 'pipe'],
263
- });
264
- // Give the process a moment to start
265
- let started = false;
266
- let errorOutput = '';
267
- child.stderr?.on('data', (data) => {
268
- errorOutput += data.toString();
269
- });
270
- child.on('error', (error) => {
271
- resolve({
272
- started: false,
273
- pid: null,
274
- error: error.message,
275
- });
276
- });
277
- // Wait a short time to see if the process starts successfully
278
- setTimeout(() => {
279
- // Check if process is still alive
280
- try {
281
- if (child.pid) {
282
- process.kill(child.pid, 0); // Check if alive (throws if not)
283
- // Write PID file
284
- writeFileSync(pidFile, child.pid.toString(), 'utf-8');
285
- // Log startup
286
- const logEntry = `[${new Date().toISOString()}] MCP daemon started with PID: ${child.pid}\n`;
287
- writeFileSync(logFile, logEntry, { flag: 'a' });
288
- // Unref so the parent can exit
289
- child.unref();
290
- resolve({
291
- started: true,
292
- pid: child.pid,
293
- });
294
- }
295
- else {
296
- resolve({
297
- started: false,
298
- pid: null,
299
- error: errorOutput || 'No PID assigned',
300
- });
301
- }
302
- }
303
- catch {
304
- // Process died - check error output
305
- const errMsg = errorOutput.includes('ERR_MODULE_NOT_FOUND')
306
- ? 'Missing dependencies. Run: npm install agentic-qe'
307
- : errorOutput || 'Process exited immediately';
308
- resolve({
309
- started: false,
310
- pid: null,
311
- error: errMsg,
312
- });
313
- }
314
- }, 1500);
315
- }
316
- catch (error) {
317
- resolve({
318
- started: false,
319
- pid: null,
320
- error: error instanceof Error ? error.message : 'Spawn failed',
321
- });
322
- }
323
- });
324
- }
325
- /**
326
- * Find the aqe-mcp command
327
- *
328
- * Search order:
329
- * 1. Local aqe-mcp binary (node_modules/.bin/)
330
- * 2. Local bundled MCP server (node_modules/agentic-qe/dist/)
331
- * 3. Local aqe CLI binary with mcp subcommand
332
- * 4. npx fallback (uses aqe mcp subcommand)
333
- */
334
- async findMcpCommand(projectRoot) {
335
- // Try local node_modules aqe-mcp binary first
336
- const localMcpBin = join(projectRoot, 'node_modules', '.bin', 'aqe-mcp');
337
- if (existsSync(localMcpBin)) {
338
- return { command: localMcpBin, args: [] };
339
- }
340
- // Try local node_modules bundle (alternative path)
341
- const localBundle = join(projectRoot, 'node_modules', 'agentic-qe', 'dist', 'mcp', 'bundle.js');
342
- if (existsSync(localBundle)) {
343
- return { command: 'node', args: [localBundle] };
344
- }
345
- // Try local aqe CLI binary with mcp subcommand
346
- const localAqeBin = join(projectRoot, 'node_modules', '.bin', 'aqe');
347
- if (existsSync(localAqeBin)) {
348
- return { command: localAqeBin, args: ['mcp'] };
349
- }
350
- // Fallback to npx with aqe mcp subcommand
351
- // The CLI now has an 'mcp' command that starts the MCP server
352
- return { command: 'npx', args: ['--yes', 'agentic-qe', 'mcp'] };
353
- }
354
209
  }
355
210
  // Instance exported from index.ts
356
211
  //# sourceMappingURL=10-workers.js.map