agentic-qe 3.10.0 → 3.10.1

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 (371) hide show
  1. package/.claude/skills/skills-manifest.json +1 -1
  2. package/CHANGELOG.md +72 -0
  3. package/README.md +35 -8
  4. package/dist/cli/bundle.js +5 -5
  5. package/dist/cli/chunks/adapter-3JS2CN7C.js +2 -0
  6. package/dist/cli/chunks/{agent-booster-wasm-5UDM2PWG.js → agent-booster-wasm-FZLWOPSX.js} +2 -2
  7. package/dist/cli/chunks/{agent-handler-JSYER5YC.js → agent-handler-KAGRVCKS.js} +2 -2
  8. package/dist/cli/chunks/{agent-memory-branch-T2SAHI4F.js → agent-memory-branch-JJKFEXQW.js} +2 -2
  9. package/dist/cli/chunks/aqe-learning-engine-Q4GFNGU6.js +2 -0
  10. package/dist/cli/chunks/{audit-HIBRVGXG.js → audit-DN5SY4JJ.js} +2 -2
  11. package/dist/cli/chunks/base-Q3MAL22Y.js +2 -0
  12. package/dist/cli/chunks/{hnswlib-node-TA4DZV62.js → better-sqlite3-XGPW4HK5.js} +2 -2
  13. package/dist/cli/chunks/{brain-handler-N6AWIMXG.js → brain-handler-O7MP5BGY.js} +3 -3
  14. package/dist/cli/chunks/{branch-enumerator-VYQGBVEJ.js → branch-enumerator-ZPTN5J6V.js} +2 -2
  15. package/dist/cli/chunks/{browser-2X4WKZPT.js → browser-PAZE2JSD.js} +2 -2
  16. package/dist/cli/chunks/browser-workflow-JX3M2UWG.js +2 -0
  17. package/dist/cli/chunks/{chunk-SGONA5GS.js → chunk-25QGPRWN.js} +2 -2
  18. package/dist/cli/chunks/{chunk-NT4PI5HI.js → chunk-2ETDES5W.js} +2 -2
  19. package/dist/cli/chunks/{chunk-UGX4EHT5.js → chunk-2KTRRSKD.js} +2 -2
  20. package/dist/cli/chunks/{chunk-UCIJCRPB.js → chunk-2S4XHK26.js} +2 -2
  21. package/dist/cli/chunks/{chunk-KNL3QWVA.js → chunk-2TDWCXZ6.js} +2 -2
  22. package/dist/cli/chunks/{chunk-HZPXOAFW.js → chunk-2UN4DOBJ.js} +2 -2
  23. package/dist/cli/chunks/{chunk-T7DLX3LS.js → chunk-32R7EA7B.js} +3 -3
  24. package/dist/cli/chunks/{chunk-CU4IUJ2K.js → chunk-3YOPJ7DY.js} +2 -2
  25. package/dist/cli/chunks/{chunk-55JPAF56.js → chunk-4AWJ5PE4.js} +1 -1
  26. package/dist/cli/chunks/{chunk-GPKZ4MMH.js → chunk-57NJQV57.js} +1 -1
  27. package/dist/cli/chunks/{chunk-G2HA2O3R.js → chunk-5EU2VQK3.js} +2 -2
  28. package/dist/cli/chunks/{chunk-BXCS55GB.js → chunk-5KFCH7RH.js} +1 -1
  29. package/dist/cli/chunks/{chunk-WC6KZDPM.js → chunk-5OTYBWRL.js} +2 -2
  30. package/dist/cli/chunks/{chunk-ALCQRJDY.js → chunk-5ZCVMR5E.js} +2 -2
  31. package/dist/cli/chunks/{chunk-FX4SYT6Y.js → chunk-622MIAOR.js} +3 -3
  32. package/dist/cli/chunks/{chunk-J5RJYFRM.js → chunk-6A2NIR2E.js} +2 -2
  33. package/dist/cli/chunks/{chunk-6F3WJOU2.js → chunk-6D57DWQ6.js} +2 -2
  34. package/dist/cli/chunks/{chunk-Z6JLPPAY.js → chunk-6E7GI2UB.js} +1 -1
  35. package/dist/cli/chunks/{chunk-M73IL7FA.js → chunk-6LRCMFLV.js} +2 -2
  36. package/dist/cli/chunks/{chunk-L4N6PTIC.js → chunk-6QFONVEE.js} +2 -2
  37. package/dist/cli/chunks/{chunk-6H5MRVJS.js → chunk-6VQ5MFJ6.js} +3 -3
  38. package/dist/cli/chunks/{chunk-JUICZG3T.js → chunk-6ZRMQXVL.js} +2 -2
  39. package/dist/cli/chunks/{chunk-RARSTEUO.js → chunk-7CKVAYP3.js} +1 -1
  40. package/dist/cli/chunks/{chunk-KDFW7MVM.js → chunk-7MSYTHZM.js} +2 -2
  41. package/dist/cli/chunks/{chunk-DY7IRNE2.js → chunk-7SQD2TTQ.js} +1 -1
  42. package/dist/cli/chunks/{chunk-IQNR662U.js → chunk-AABKTWXC.js} +2 -2
  43. package/dist/cli/chunks/{chunk-LYVFC7C7.js → chunk-AUVC3DDB.js} +2 -2
  44. package/dist/cli/chunks/{chunk-OWMGD7FO.js → chunk-BECU52UY.js} +3 -3
  45. package/dist/cli/chunks/chunk-BF7MUYWC.js +2 -0
  46. package/dist/cli/chunks/{chunk-BQT4J3BD.js → chunk-BGBSYF3K.js} +2 -2
  47. package/dist/cli/chunks/{chunk-TR7BZLB6.js → chunk-BN7ERYXI.js} +1 -1
  48. package/dist/cli/chunks/{chunk-DQJJS4AX.js → chunk-CKECJH2A.js} +2 -2
  49. package/dist/cli/chunks/{chunk-I4T4JPR2.js → chunk-COZDJLIL.js} +1 -1
  50. package/dist/cli/chunks/{chunk-URVDWF2Y.js → chunk-CR4ERDS2.js} +2 -2
  51. package/dist/cli/chunks/chunk-DMIYWPQQ.js +2 -0
  52. package/dist/cli/chunks/{chunk-Y4I5JBOL.js → chunk-DQIS6J77.js} +2 -2
  53. package/dist/cli/chunks/{chunk-7ZIRDBXH.js → chunk-DVOH75S4.js} +1 -1
  54. package/dist/cli/chunks/{chunk-Z2SCTEZD.js → chunk-EBQ6YKP2.js} +2 -2
  55. package/dist/cli/chunks/{chunk-2GL4GH52.js → chunk-ECPB7IAH.js} +4 -4
  56. package/dist/cli/chunks/{chunk-LQ3TA22E.js → chunk-EIROAH6N.js} +2 -2
  57. package/dist/cli/chunks/{chunk-UCXQQCIP.js → chunk-ELUERFGA.js} +2 -2
  58. package/dist/cli/chunks/{chunk-KOSKGZK4.js → chunk-ELZ67OHQ.js} +2 -2
  59. package/dist/cli/chunks/{chunk-WVCIZIKH.js → chunk-EO4B5GS4.js} +1 -1
  60. package/dist/cli/chunks/{chunk-HD6CZBZV.js → chunk-EUJHHXE6.js} +2 -2
  61. package/dist/cli/chunks/{chunk-KCHFF4IE.js → chunk-F3OVFA6W.js} +2 -2
  62. package/dist/cli/chunks/{chunk-7Y54QZKF.js → chunk-FJSR2U65.js} +2 -2
  63. package/dist/cli/chunks/{chunk-5QJDH4Z5.js → chunk-G3BQU3Q6.js} +2 -2
  64. package/dist/cli/chunks/{chunk-LDMG4372.js → chunk-G5DTENO3.js} +2 -2
  65. package/dist/cli/chunks/{chunk-JKVNZASH.js → chunk-GMKGLZJU.js} +2 -2
  66. package/dist/cli/chunks/{chunk-O3NAUNFC.js → chunk-GRG3OP34.js} +2 -2
  67. package/dist/cli/chunks/{chunk-3U77XX6J.js → chunk-GRYXNWPF.js} +4 -4
  68. package/dist/cli/chunks/{chunk-3QULDB7K.js → chunk-GTGONWGX.js} +1 -1
  69. package/dist/cli/chunks/{chunk-OGT45MZN.js → chunk-GTRXZJNX.js} +2 -2
  70. package/dist/cli/chunks/{chunk-TEJPHJMW.js → chunk-GXJ4BCGC.js} +2 -2
  71. package/dist/cli/chunks/{chunk-4NQ6KANC.js → chunk-H22MMMYY.js} +2 -2
  72. package/dist/cli/chunks/{chunk-VTIXFHZR.js → chunk-H44WD7QX.js} +2 -2
  73. package/dist/cli/chunks/{chunk-X4U5NYB6.js → chunk-HPNEZ7YN.js} +1 -1
  74. package/dist/cli/chunks/{chunk-FQ5FT7IE.js → chunk-HRDGN3OK.js} +1 -1
  75. package/dist/cli/chunks/{chunk-6HCHW5TS.js → chunk-IHDUWPFY.js} +2 -2
  76. package/dist/cli/chunks/{chunk-DQLEZBWV.js → chunk-IITKJCPK.js} +2 -2
  77. package/dist/cli/chunks/{chunk-VMJXNTJT.js → chunk-IJ4BUSJN.js} +4 -4
  78. package/dist/cli/chunks/{chunk-MJBXQXSX.js → chunk-IK6AJX3C.js} +1 -1
  79. package/dist/cli/chunks/{chunk-NLCUQMUR.js → chunk-IPRDHKSI.js} +2 -2
  80. package/dist/cli/chunks/{chunk-ZYZWBNKT.js → chunk-JLKHPIQF.js} +1 -1
  81. package/dist/cli/chunks/chunk-K22TPWOJ.js +3 -0
  82. package/dist/cli/chunks/{chunk-L3IFZ4IX.js → chunk-K4T3RDCB.js} +2 -2
  83. package/dist/cli/chunks/{chunk-XFUU2RCA.js → chunk-KCTH5MHE.js} +2 -2
  84. package/dist/cli/chunks/{chunk-L2AIES7X.js → chunk-KEC5FBAW.js} +1 -1
  85. package/dist/cli/chunks/{chunk-M4HDBRVJ.js → chunk-KKNBYXYA.js} +1 -1
  86. package/dist/cli/chunks/{chunk-5UOV7T36.js → chunk-KRXKU54J.js} +2 -2
  87. package/dist/cli/chunks/{provider-manager-HV55NIIO.js → chunk-KZJXVIAW.js} +13 -13
  88. package/dist/cli/chunks/{chunk-YHNEBCYQ.js → chunk-LF7URN2X.js} +2 -2
  89. package/dist/cli/chunks/{chunk-HD5NQDOL.js → chunk-MQYTW2IN.js} +2 -2
  90. package/dist/cli/chunks/{chunk-66GIKUI2.js → chunk-MVGVD6LS.js} +2 -2
  91. package/dist/cli/chunks/{chunk-M3M7HXDH.js → chunk-NDCPEXDN.js} +2 -2
  92. package/dist/cli/chunks/{chunk-RF6QKV7M.js → chunk-NOCYYXK4.js} +2 -2
  93. package/dist/cli/chunks/{chunk-U56TIYGP.js → chunk-NPSBMDVU.js} +2 -2
  94. package/dist/cli/chunks/{chunk-OUJJ34JH.js → chunk-NQZYUH6S.js} +1 -1
  95. package/dist/cli/chunks/{chunk-F363JJUI.js → chunk-NRLT44YB.js} +1 -1
  96. package/dist/cli/chunks/{chunk-27ACATRH.js → chunk-OC3OJWLB.js} +2 -2
  97. package/dist/cli/chunks/{chunk-XFMSHTXG.js → chunk-OQP5OFRR.js} +1 -1
  98. package/dist/cli/chunks/{chunk-RGONSQ44.js → chunk-OVENSL64.js} +210 -210
  99. package/dist/cli/chunks/{chunk-DXV6NRG3.js → chunk-P7T5Y735.js} +2 -2
  100. package/dist/cli/chunks/{chunk-QU54GUEA.js → chunk-PLRSKAFZ.js} +2 -2
  101. package/dist/cli/chunks/{chunk-NWHSEXHA.js → chunk-PUXDXIUE.js} +1 -1
  102. package/dist/cli/chunks/{chunk-RH3PHCJT.js → chunk-PW6MOFXG.js} +2 -2
  103. package/dist/cli/chunks/{chunk-3BO7EKGO.js → chunk-PXFQSVA2.js} +3 -3
  104. package/dist/cli/chunks/{chunk-UE3XXKLN.js → chunk-Q24OJX44.js} +2 -2
  105. package/dist/cli/chunks/{chunk-LXHA55EB.js → chunk-Q5VHBI4U.js} +1 -1
  106. package/dist/cli/chunks/{chunk-OKGK7DBT.js → chunk-QNW335PD.js} +2 -2
  107. package/dist/cli/chunks/{chunk-S4CNA6Z5.js → chunk-RPL6K623.js} +3 -3
  108. package/dist/cli/chunks/{chunk-FCSJ7GIZ.js → chunk-RRLQFFCO.js} +4 -4
  109. package/dist/cli/chunks/{chunk-W6U7SIIK.js → chunk-RWYW573C.js} +3 -3
  110. package/dist/cli/chunks/{chunk-BTIVIWIG.js → chunk-SLNGJW4G.js} +1 -1
  111. package/dist/cli/chunks/{chunk-P6XYFDXN.js → chunk-SQBB2DC6.js} +1 -1
  112. package/dist/cli/chunks/{chunk-SCYF5CQA.js → chunk-T3UXMPXX.js} +1 -1
  113. package/dist/cli/chunks/{chunk-C5QESAYA.js → chunk-TFNLXAK5.js} +1 -1
  114. package/dist/cli/chunks/{chunk-ZFBMBCKN.js → chunk-TL5F2S3Z.js} +2 -2
  115. package/dist/cli/chunks/{chunk-HIWBW4IQ.js → chunk-TNGGVMPQ.js} +1 -1
  116. package/dist/cli/chunks/{chunk-5RQT7EJP.js → chunk-TNVYKYTO.js} +3 -3
  117. package/dist/cli/chunks/{chunk-4WYGUTSF.js → chunk-TP77PNN6.js} +2 -2
  118. package/dist/cli/chunks/{chunk-WG6I7YF3.js → chunk-TX7SNQKL.js} +1 -1
  119. package/dist/cli/chunks/{chunk-WLLE54TA.js → chunk-UDFLR7GR.js} +1 -1
  120. package/dist/cli/chunks/{chunk-KYLJERZ3.js → chunk-UDVX34ZG.js} +2 -2
  121. package/dist/cli/chunks/{chunk-YYDHTBHE.js → chunk-UU2Q6XWF.js} +1 -1
  122. package/dist/cli/chunks/{chunk-JCKX2LEJ.js → chunk-VKRMVTWU.js} +49 -49
  123. package/dist/cli/chunks/{chunk-AFFYJSW2.js → chunk-VOIWDPIU.js} +2 -2
  124. package/dist/cli/chunks/chunk-VPCE5CIT.js +2 -0
  125. package/dist/cli/chunks/{chunk-4UUDFWOP.js → chunk-W2DT3CDE.js} +2 -2
  126. package/dist/cli/chunks/{chunk-VTO5O7DA.js → chunk-W6ZF2CPN.js} +1 -1
  127. package/dist/cli/chunks/{chunk-BQX5QDU5.js → chunk-WDTCCPK4.js} +1 -1
  128. package/dist/cli/chunks/{chunk-PNDO4W4L.js → chunk-WL2J6ECN.js} +2 -2
  129. package/dist/cli/chunks/chunk-WMG5F6R6.js +2 -0
  130. package/dist/cli/chunks/{chunk-QL3U5VSM.js → chunk-WO7KYT3X.js} +2 -2
  131. package/dist/cli/chunks/{chunk-S33246T4.js → chunk-WPNZSL4S.js} +1 -1
  132. package/dist/cli/chunks/{chunk-IBXNBLGM.js → chunk-WQEZKAUR.js} +2 -2
  133. package/dist/cli/chunks/{chunk-3OSCWD7Z.js → chunk-WS4XVJHI.js} +1 -1
  134. package/dist/cli/chunks/{chunk-GXCD7GNH.js → chunk-XGUQYVJR.js} +2 -2
  135. package/dist/cli/chunks/{chunk-I4E6CLC4.js → chunk-XKOKMS5A.js} +2 -2
  136. package/dist/cli/chunks/{chunk-ZCNVFULO.js → chunk-XRK7FBTY.js} +2 -2
  137. package/dist/cli/chunks/{chunk-FEBXP74Y.js → chunk-Y2DPXMOR.js} +1 -1
  138. package/dist/cli/chunks/{chunk-MF3XRML3.js → chunk-Y357YFLF.js} +2 -2
  139. package/dist/cli/chunks/{chunk-LRISVDVO.js → chunk-YGRTMAWB.js} +1 -1
  140. package/dist/cli/chunks/{chunk-VEOQH4W6.js → chunk-YPOTBXPU.js} +2 -2
  141. package/dist/cli/chunks/{chunk-2POXDKUB.js → chunk-YYWIA5FX.js} +1 -1
  142. package/dist/cli/chunks/{chunk-QWBO76AU.js → chunk-ZEMXMDD3.js} +2 -2
  143. package/dist/cli/chunks/{chunk-V5TRAL57.js → chunk-ZTMWJQTZ.js} +2 -2
  144. package/dist/cli/chunks/{ci-7TR4NQ5I.js → ci-EHRUN7O6.js} +2 -2
  145. package/dist/cli/chunks/{ci-output-SLTICF3O.js → ci-output-EXDXVXKB.js} +2 -2
  146. package/dist/cli/chunks/{circuit-breaker-7GVVTMBY.js → circuit-breaker-LM4QRAAL.js} +2 -2
  147. package/dist/cli/chunks/{claude-flow-setup-TYCWYEMM.js → claude-flow-setup-ZHUCZVW7.js} +2 -2
  148. package/dist/cli/chunks/client-PA3UJIHH.js +2 -0
  149. package/dist/cli/chunks/{cline-installer-ESIAJOLK.js → cline-installer-WMFLQOW2.js} +2 -2
  150. package/dist/cli/chunks/{code-I42JGOVI.js → code-L7KRLU5E.js} +2 -2
  151. package/dist/cli/chunks/{code-index-extractor-2CCXPCQW.js → code-index-extractor-FTMUYQC6.js} +2 -2
  152. package/dist/cli/chunks/{codex-installer-HEZRDNUT.js → codex-installer-B3F6WI3Z.js} +2 -2
  153. package/dist/cli/chunks/{completions-44HLIZGI.js → completions-3JZQRNB6.js} +2 -2
  154. package/dist/cli/chunks/{complexity-analyzer-SOCSFDVO.js → complexity-analyzer-LB2FFEKX.js} +2 -2
  155. package/dist/cli/chunks/{continuedev-installer-Q7O4HLIM.js → continuedev-installer-WH6IMV7R.js} +2 -2
  156. package/dist/cli/chunks/{copilot-installer-GIWCVLCS.js → copilot-installer-NOIEOFJM.js} +2 -2
  157. package/dist/cli/chunks/{cost-tracker-G7BONKEV.js → cost-tracker-IKX2VYSA.js} +2 -2
  158. package/dist/cli/chunks/{coverage-5TWVP7KY.js → coverage-TD37CYSY.js} +3 -3
  159. package/dist/cli/chunks/cross-domain-router-BVJRP2ZX.js +2 -0
  160. package/dist/cli/chunks/{cursor-installer-43EQZSB5.js → cursor-installer-4NSVGRM5.js} +2 -2
  161. package/dist/cli/chunks/{daemon-ZXHFRDKG.js → daemon-LYDV7NRW.js} +3 -3
  162. package/dist/cli/chunks/{daemon-QQZE4BU2.js → daemon-UWEBUIDT.js} +4 -4
  163. package/dist/cli/chunks/{dag-attention-scheduler-GOZAVAZQ.js → dag-attention-scheduler-NECJGCHC.js} +2 -2
  164. package/dist/cli/chunks/{detect-X777GVJ4.js → detect-4XGC7ILO.js} +2 -2
  165. package/dist/cli/chunks/{dist-node-EZZK46TB.js → dist-node-GGJDXRKJ.js} +2 -2
  166. package/dist/cli/chunks/{domain-handler-ZT32DKYY.js → domain-handler-UOFONAUT.js} +2 -2
  167. package/dist/cli/chunks/{domain-transfer-LHQVSLJW.js → domain-transfer-6JLNOYPA.js} +2 -2
  168. package/dist/cli/chunks/dream-BXZUEIW2.js +2 -0
  169. package/dist/cli/chunks/{embed-and-insert-pattern-XFYPPWG7.js → embed-and-insert-pattern-ZM75DQ4J.js} +2 -2
  170. package/dist/cli/chunks/{eval-V4NYJZUZ.js → eval-CYZJTHEB.js} +2 -2
  171. package/dist/cli/chunks/{experience-capture-middleware-HXX2W4GL.js → experience-capture-middleware-RBOJLDUB.js} +3 -3
  172. package/dist/cli/chunks/{fast-paths-RBPWQSFJ.js → fast-paths-S5BWZR3L.js} +2 -2
  173. package/dist/cli/chunks/{feature-flags-NX5EXRO3.js → feature-flags-6E7H3NYP.js} +2 -2
  174. package/dist/cli/chunks/{feature-flags-INJJZBMN.js → feature-flags-DUNQPDU3.js} +2 -2
  175. package/dist/cli/chunks/{file-discovery-SNFSG6NK.js → file-discovery-PFFKDGYG.js} +2 -2
  176. package/dist/cli/chunks/{fleet-6SDN4UWE.js → fleet-RCDZZFXN.js} +3 -3
  177. package/dist/cli/chunks/{gnn-wrapper-2JDRTDDK.js → gnn-wrapper-5AG3WDWF.js} +2 -2
  178. package/dist/cli/chunks/{heartbeat-handler-QLK6E7KA.js → heartbeat-handler-O2KAEX4Y.js} +4 -4
  179. package/dist/cli/chunks/heartbeat-scheduler-LEKAWFJF.js +2 -0
  180. package/dist/cli/chunks/hnsw-adapter-2TCEG5M2.js +2 -0
  181. package/dist/cli/chunks/hnsw-index-VDPUTEES.js +2 -0
  182. package/dist/cli/chunks/{hnsw-legacy-bridge-Q2ZEZQKB.js → hnsw-legacy-bridge-C7FG6YGW.js} +2 -2
  183. package/dist/cli/chunks/{better-sqlite3-Y6GX6CGB.js → hnswlib-node-YX6OOBN6.js} +2 -2
  184. package/dist/cli/chunks/{hooks-D4YENHO2.js → hooks-FUHNE2P7.js} +10 -10
  185. package/dist/cli/chunks/hybrid-router-2EMDIYIG.js +2 -0
  186. package/dist/cli/chunks/{hypergraph-engine-G72U446M.js → hypergraph-engine-LQRYBNPV.js} +2 -2
  187. package/dist/cli/chunks/{hypergraph-handler-TRZ5FDRH.js → hypergraph-handler-AFFNLZVD.js} +3 -3
  188. package/dist/cli/chunks/impact-analyzer-HFD6CPWC.js +2 -0
  189. package/dist/cli/chunks/{init-handler-3ZD4GCT4.js → init-handler-BQ6IDBX4.js} +6 -6
  190. package/dist/cli/chunks/init-wizard-552QIVRC.js +2 -0
  191. package/dist/cli/chunks/kernel-5DN6O6EE.js +2 -0
  192. package/dist/cli/chunks/{kilocode-installer-AXSIW3XW.js → kilocode-installer-KS72HUSG.js} +2 -2
  193. package/dist/cli/chunks/{kiro-installer-JQGIFWBK.js → kiro-installer-2ZEFLGRX.js} +2 -2
  194. package/dist/cli/chunks/knowledge-graph-76Y77MB6.js +2 -0
  195. package/dist/cli/chunks/{learning-SPO7TGWX.js → learning-GGHGJ6B6.js} +3 -3
  196. package/dist/cli/chunks/llm-router-LP6K5BJF.js +36 -0
  197. package/dist/cli/chunks/llm-router-service-4O6GCEFH.js +2 -0
  198. package/dist/cli/chunks/{load-XIDDK64U.js → load-2MLKXOT2.js} +2 -2
  199. package/dist/cli/chunks/load-test-FCI2IWRJ.js +2 -0
  200. package/dist/cli/chunks/{mcp-3JXRGXO4.js → mcp-CDJBJG5H.js} +2 -2
  201. package/dist/cli/chunks/{memory-A66KRS2P.js → memory-4LAX7JZS.js} +5 -5
  202. package/dist/cli/chunks/memory-backend-MKNCBNDE.js +2 -0
  203. package/dist/cli/chunks/memory-handlers-OBAFR4WV.js +2 -0
  204. package/dist/cli/chunks/{multi-model-executor-XCDGUVCE.js → multi-model-executor-SLJV73HE.js} +2 -2
  205. package/dist/cli/chunks/{opencode-installer-GELXWLF2.js → opencode-installer-M76SONWV.js} +2 -2
  206. package/dist/cli/chunks/{orchestrator-CCS3K6NH.js → orchestrator-TJPUDJMP.js} +5 -5
  207. package/dist/cli/chunks/{pipeline-Z5C72H5S.js → pipeline-2PVNFT6J.js} +2 -2
  208. package/dist/cli/chunks/{platform-4AK7XJ3Y.js → platform-KCSEDKEE.js} +2 -2
  209. package/dist/cli/chunks/{plugin-7RYBIZI7.js → plugin-QX47QF5U.js} +2 -2
  210. package/dist/cli/chunks/{prime-radiant-advanced-wasm-E5PARKRX.js → prime-radiant-advanced-wasm-L6VWL7VR.js} +2 -2
  211. package/dist/cli/chunks/protocol-executor-IA7WNT23.js +2 -0
  212. package/dist/cli/chunks/{protocol-handler-R6QJQFNL.js → protocol-handler-WDNJDEUE.js} +2 -2
  213. package/dist/cli/chunks/{prove-7ESQ2YAL.js → prove-3B75DA3S.js} +2 -2
  214. package/dist/cli/chunks/provider-manager-3K5KB5A6.js +2 -0
  215. package/dist/cli/chunks/qe-reasoning-bank-V5Z3BBYY.js +2 -0
  216. package/dist/cli/chunks/{quality-4UE345QA.js → quality-UGASS5WM.js} +2 -2
  217. package/dist/cli/chunks/queen-coordinator-QOMPA27Z.js +2 -0
  218. package/dist/cli/chunks/{real-embeddings-TYIVN3N5.js → real-embeddings-COBP2LHS.js} +2 -2
  219. package/dist/cli/chunks/{roocode-installer-2KOANC47.js → roocode-installer-TOZ4VLFT.js} +2 -2
  220. package/dist/cli/chunks/router-P5RZUPC4.js +2 -0
  221. package/dist/cli/chunks/routing-feedback-3PS3OZQC.js +2 -0
  222. package/dist/cli/chunks/{routing-handler-JFEYTN7T.js → routing-handler-5TDVSILX.js} +2 -2
  223. package/dist/cli/chunks/{ruvector-commands-KSLSZRJX.js → ruvector-commands-AM63KWQN.js} +2 -2
  224. package/dist/cli/chunks/{rvf-dual-writer-EPBL226J.js → rvf-dual-writer-UANIFE2M.js} +2 -2
  225. package/dist/cli/chunks/{rvf-migration-adapter-25KSI6SF.js → rvf-migration-adapter-LNPYWAPI.js} +2 -2
  226. package/dist/cli/chunks/{rvf-migration-coordinator-2XBYHPZP.js → rvf-migration-coordinator-U47L63DQ.js} +2 -2
  227. package/dist/cli/chunks/rvf-native-adapter-TT7OJPKM.js +2 -0
  228. package/dist/cli/chunks/safe-db-PEW7VBAE.js +2 -0
  229. package/dist/cli/chunks/schedule-QHOTHBQE.js +2 -0
  230. package/dist/cli/chunks/scheduler-KXJBYTRT.js +2 -0
  231. package/dist/cli/chunks/{security-4XWYKI4O.js → security-KDQ2AH7G.js} +3 -3
  232. package/dist/cli/chunks/{shared-rvf-adapter-WRZ3HGDQ.js → shared-rvf-adapter-5MAGLLYJ.js} +2 -2
  233. package/dist/cli/chunks/{shared-rvf-dual-writer-DX2N5STR.js → shared-rvf-dual-writer-GF2OPPM5.js} +2 -2
  234. package/dist/cli/chunks/sqlite-persistence-TPXJK34J.js +2 -0
  235. package/dist/cli/chunks/{status-handler-V75OSXMQ.js → status-handler-XZKEL7LO.js} +2 -2
  236. package/dist/cli/chunks/{structural-health-TLX3JHZ6.js → structural-health-27QKWW25.js} +2 -2
  237. package/dist/cli/chunks/{sync-DXZFMVZQ.js → sync-INNKS6UK.js} +2 -2
  238. package/dist/cli/chunks/{sync-KGBEXUF7.js → sync-V3HGPEJT.js} +2 -2
  239. package/dist/cli/chunks/{task-handler-T3OJ6R7H.js → task-handler-LDUVOM6G.js} +2 -2
  240. package/dist/cli/chunks/{task-handlers-NJYR54AS.js → task-handlers-HTCPV7OO.js} +3 -3
  241. package/dist/cli/chunks/{test-KMVDNNQA.js → test-PCUVGVJL.js} +4 -4
  242. package/dist/cli/chunks/{test-scheduling-R5EQ2XGV.js → test-scheduling-GYVXWCAA.js} +3 -3
  243. package/dist/cli/chunks/{token-bootstrap-PFKVV3RO.js → token-bootstrap-MJ2ANC4P.js} +2 -2
  244. package/dist/cli/chunks/{token-usage-ZLOGA6LR.js → token-usage-ZREHROTF.js} +2 -2
  245. package/dist/cli/chunks/{transformers-TNPSPQI3.js → transformers-6B3FWFYL.js} +2 -2
  246. package/dist/cli/chunks/{tree-sitter-wasm-parser-A2EEB5BF.js → tree-sitter-wasm-parser-JVV234MN.js} +2 -2
  247. package/dist/cli/chunks/{types-DIXPI4NR.js → types-MVZTJI2F.js} +2 -2
  248. package/dist/cli/chunks/unified-memory-ROS2NKR5.js +2 -0
  249. package/dist/cli/chunks/unified-memory-hnsw-FLEUF3XO.js +2 -0
  250. package/dist/cli/chunks/unified-persistence-QC5L7UNQ.js +2 -0
  251. package/dist/cli/chunks/{upgrade-LX5KP6VO.js → upgrade-MKTFEILD.js} +2 -2
  252. package/dist/cli/chunks/{validate-3L6F7M36.js → validate-IABGALSW.js} +2 -2
  253. package/dist/cli/chunks/{validate-swarm-FD42ZKAQ.js → validate-swarm-RHF53RF6.js} +2 -2
  254. package/dist/cli/chunks/{vibium-GSBSJR53.js → vibium-RAKW6FMF.js} +2 -2
  255. package/dist/cli/chunks/visual-security-NLIOUQCR.js +2 -0
  256. package/dist/cli/chunks/{web-tree-sitter-TXHMO4BW.js → web-tree-sitter-PYK7F4JZ.js} +2 -2
  257. package/dist/cli/chunks/{windsurf-installer-3EUZ6RD3.js → windsurf-installer-S3U2HWZ4.js} +2 -2
  258. package/dist/cli/chunks/{witness-chain-ONAUEJ4M.js → witness-chain-435NKQLB.js} +2 -2
  259. package/dist/cli/chunks/witness-chain-U7X6JX5J.js +2 -0
  260. package/dist/cli/chunks/{workflow-E7A6BV4C.js → workflow-5UHJCZ6J.js} +4 -4
  261. package/dist/cli/chunks/workflow-orchestrator-APE6BAXH.js +2 -0
  262. package/dist/cli/chunks/{wrappers-AHHAQJM3.js → wrappers-RD3NCMLK.js} +2 -2
  263. package/dist/cli/commands/llm-router.js +83 -26
  264. package/dist/domains/chaos-resilience/coordinator.d.ts +2 -1
  265. package/dist/domains/chaos-resilience/coordinator.js +3 -2
  266. package/dist/domains/chaos-resilience/plugin.d.ts +4 -2
  267. package/dist/domains/chaos-resilience/plugin.js +8 -5
  268. package/dist/domains/code-intelligence/coordinator.d.ts +2 -1
  269. package/dist/domains/code-intelligence/coordinator.js +3 -2
  270. package/dist/domains/code-intelligence/plugin.d.ts +4 -2
  271. package/dist/domains/code-intelligence/plugin.js +8 -5
  272. package/dist/domains/contract-testing/coordinator.d.ts +2 -1
  273. package/dist/domains/contract-testing/coordinator.js +3 -2
  274. package/dist/domains/contract-testing/plugin.d.ts +4 -2
  275. package/dist/domains/contract-testing/plugin.js +8 -5
  276. package/dist/domains/coverage-analysis/coordinator.d.ts +2 -1
  277. package/dist/domains/coverage-analysis/coordinator.js +4 -3
  278. package/dist/domains/coverage-analysis/plugin.d.ts +3 -2
  279. package/dist/domains/coverage-analysis/plugin.js +4 -4
  280. package/dist/domains/defect-intelligence/coordinator.d.ts +2 -1
  281. package/dist/domains/defect-intelligence/coordinator.js +4 -3
  282. package/dist/domains/defect-intelligence/plugin.d.ts +4 -2
  283. package/dist/domains/defect-intelligence/plugin.js +9 -6
  284. package/dist/domains/learning-optimization/coordinator.d.ts +2 -1
  285. package/dist/domains/learning-optimization/coordinator.js +3 -2
  286. package/dist/domains/learning-optimization/plugin.d.ts +4 -2
  287. package/dist/domains/learning-optimization/plugin.js +8 -5
  288. package/dist/domains/quality-assessment/coordinator.d.ts +2 -1
  289. package/dist/domains/quality-assessment/coordinator.js +4 -3
  290. package/dist/domains/quality-assessment/plugin.d.ts +4 -2
  291. package/dist/domains/quality-assessment/plugin.js +10 -6
  292. package/dist/domains/requirements-validation/coordinator.d.ts +2 -1
  293. package/dist/domains/requirements-validation/coordinator.js +3 -2
  294. package/dist/domains/requirements-validation/plugin.d.ts +4 -2
  295. package/dist/domains/requirements-validation/plugin.js +8 -5
  296. package/dist/domains/security-compliance/coordinator.d.ts +2 -1
  297. package/dist/domains/security-compliance/coordinator.js +4 -2
  298. package/dist/domains/security-compliance/plugin.d.ts +4 -2
  299. package/dist/domains/security-compliance/plugin.js +11 -6
  300. package/dist/domains/test-execution/coordinator.d.ts +3 -2
  301. package/dist/domains/test-execution/coordinator.js +6 -5
  302. package/dist/domains/test-execution/plugin.d.ts +4 -2
  303. package/dist/domains/test-execution/plugin.js +6 -4
  304. package/dist/domains/test-generation/coordinator.d.ts +2 -1
  305. package/dist/domains/test-generation/coordinator.js +4 -3
  306. package/dist/domains/test-generation/plugin.d.ts +4 -2
  307. package/dist/domains/test-generation/plugin.js +12 -7
  308. package/dist/domains/visual-accessibility/coordinator.d.ts +2 -1
  309. package/dist/domains/visual-accessibility/coordinator.js +4 -3
  310. package/dist/domains/visual-accessibility/plugin.d.ts +4 -2
  311. package/dist/domains/visual-accessibility/plugin.js +9 -6
  312. package/dist/kernel/interfaces.d.ts +37 -0
  313. package/dist/kernel/kernel.d.ts +39 -0
  314. package/dist/kernel/kernel.js +157 -17
  315. package/dist/mcp/bundle.js +417 -395
  316. package/dist/mcp/qe-tool-bridge.js +8 -1
  317. package/dist/mcp/tools/base.d.ts +56 -0
  318. package/dist/mcp/tools/base.js +104 -1
  319. package/dist/mcp/tools/chaos-resilience/inject.js +4 -2
  320. package/dist/mcp/tools/code-intelligence/analyze.js +5 -3
  321. package/dist/mcp/tools/contract-testing/validate.js +4 -2
  322. package/dist/mcp/tools/coverage-analysis/index.js +11 -5
  323. package/dist/mcp/tools/defect-intelligence/predict.js +5 -10
  324. package/dist/mcp/tools/learning-optimization/optimize.js +4 -2
  325. package/dist/mcp/tools/registry.js +8 -1
  326. package/dist/mcp/tools/test-generation/generate.js +10 -6
  327. package/dist/mcp/tools/visual-accessibility/index.js +7 -4
  328. package/dist/shared/llm/llm-router-service.d.ts +77 -0
  329. package/dist/shared/llm/llm-router-service.js +166 -0
  330. package/dist/shared/llm/providers/gemini.js +5 -2
  331. package/dist/shared/llm/router/config-store.d.ts +89 -0
  332. package/dist/shared/llm/router/config-store.js +261 -0
  333. package/dist/shared/llm/router/hybrid-router.js +33 -11
  334. package/package.json +1 -1
  335. package/dist/cli/chunks/adapter-WTE6UVGP.js +0 -2
  336. package/dist/cli/chunks/aqe-learning-engine-LCLEBU7D.js +0 -2
  337. package/dist/cli/chunks/base-73I73HBF.js +0 -2
  338. package/dist/cli/chunks/browser-workflow-2NSV5O6W.js +0 -2
  339. package/dist/cli/chunks/chunk-6MONUYQ5.js +0 -2
  340. package/dist/cli/chunks/chunk-X73CRYF4.js +0 -2
  341. package/dist/cli/chunks/client-7GB4WWUD.js +0 -2
  342. package/dist/cli/chunks/cross-domain-router-7HQ74TLE.js +0 -2
  343. package/dist/cli/chunks/dream-G5SEFHI4.js +0 -2
  344. package/dist/cli/chunks/heartbeat-scheduler-NG7BY3FR.js +0 -2
  345. package/dist/cli/chunks/hnsw-adapter-TDSLUI7K.js +0 -2
  346. package/dist/cli/chunks/hnsw-index-OWLQSOQH.js +0 -2
  347. package/dist/cli/chunks/hybrid-router-URU2XLBD.js +0 -2
  348. package/dist/cli/chunks/impact-analyzer-NMTN75KA.js +0 -2
  349. package/dist/cli/chunks/init-wizard-SHBFYGBV.js +0 -2
  350. package/dist/cli/chunks/kernel-7KVY2JGO.js +0 -2
  351. package/dist/cli/chunks/knowledge-graph-V4G5J5B7.js +0 -2
  352. package/dist/cli/chunks/llm-router-G6N2OKDA.js +0 -36
  353. package/dist/cli/chunks/load-test-N4RNPLG4.js +0 -2
  354. package/dist/cli/chunks/memory-backend-HPGJ5YDQ.js +0 -2
  355. package/dist/cli/chunks/memory-handlers-K33YVCVQ.js +0 -2
  356. package/dist/cli/chunks/protocol-executor-GNVWUJUP.js +0 -2
  357. package/dist/cli/chunks/qe-reasoning-bank-DDSBHO6D.js +0 -2
  358. package/dist/cli/chunks/queen-coordinator-BQJ5O63C.js +0 -2
  359. package/dist/cli/chunks/router-C2RKWB7J.js +0 -2
  360. package/dist/cli/chunks/routing-feedback-RHATTSJ6.js +0 -2
  361. package/dist/cli/chunks/rvf-native-adapter-QG4CXHLL.js +0 -2
  362. package/dist/cli/chunks/safe-db-A4KQ2IDB.js +0 -2
  363. package/dist/cli/chunks/schedule-O7MLASQT.js +0 -2
  364. package/dist/cli/chunks/scheduler-HT7RNYQ2.js +0 -2
  365. package/dist/cli/chunks/sqlite-persistence-4NNKJ6CQ.js +0 -2
  366. package/dist/cli/chunks/unified-memory-CMNJVHOJ.js +0 -2
  367. package/dist/cli/chunks/unified-memory-hnsw-JQLU2KI6.js +0 -2
  368. package/dist/cli/chunks/unified-persistence-I25TEDIU.js +0 -2
  369. package/dist/cli/chunks/visual-security-AJJIEV5V.js +0 -2
  370. package/dist/cli/chunks/witness-chain-762QQBTN.js +0 -2
  371. package/dist/cli/chunks/workflow-orchestrator-ZGPYISKY.js +0 -2
@@ -21,6 +21,7 @@ import { PluginCache } from '../plugins/cache';
21
21
  import { CapturedExperienceBridge } from '../bridge/captured-experience-bridge.js';
22
22
  import { DreamScheduler } from '../learning/dream/dream-scheduler.js';
23
23
  import { createDreamEngine } from '../learning/dream/dream-engine.js';
24
+ import { createLLMRouterService, } from '../shared/llm/llm-router-service.js';
24
25
  // Import domain plugin factories
25
26
  import { createTestGenerationPlugin } from '../domains/test-generation/plugin';
26
27
  import { createTestExecutionPlugin } from '../domains/test-execution/plugin';
@@ -44,21 +45,25 @@ import '../domains/security-compliance';
44
45
  import '../domains/code-intelligence';
45
46
  import '../domains/quality-assessment';
46
47
  import { createEnterpriseIntegrationPlugin } from '../domains/enterprise-integration/plugin';
48
+ // NOTE: underlying createXxxPlugin signatures are updated in Phase 2.
49
+ // For Phase 1, the wrappers accept llmRouter but discard it — this
50
+ // keeps the kernel boot path internally consistent without forcing
51
+ // 13 simultaneous domain-level changes.
47
52
  const DOMAIN_FACTORIES = {
48
- 'test-generation': (eb, m, c) => createTestGenerationPlugin(eb, m, c),
49
- 'test-execution': (eb, m) => createTestExecutionPlugin(eb, m),
50
- 'coverage-analysis': (eb, m) => createCoverageAnalysisPlugin(eb, m),
51
- 'quality-assessment': (eb, m, c) => createQualityAssessmentPlugin(eb, m, c),
52
- 'defect-intelligence': (eb, m, c) => createDefectIntelligencePlugin(eb, m, c),
53
- 'requirements-validation': (eb, m, c) => createRequirementsValidationPlugin(eb, m, c),
54
- 'code-intelligence': (eb, m, c) => createCodeIntelligencePlugin(eb, m, c),
55
- 'security-compliance': (eb, m, c) => createSecurityCompliancePlugin(eb, m, c),
56
- 'contract-testing': (eb, m, c) => createContractTestingPlugin(eb, m, c),
57
- 'visual-accessibility': (eb, m, c) => createVisualAccessibilityPlugin(eb, m, c),
58
- 'chaos-resilience': (eb, m, c) => createChaosResiliencePlugin(eb, m, c),
59
- 'learning-optimization': (eb, m, c) => createLearningOptimizationPlugin(eb, m, c),
60
- 'enterprise-integration': (eb, m, c) => createEnterpriseIntegrationPlugin(eb, m, c),
61
- 'coordination': (eb, m, c) => createCoordinationPlugin(eb, m, c),
53
+ 'test-generation': (eb, m, c, llmRouter) => createTestGenerationPlugin(eb, m, c, undefined, llmRouter),
54
+ 'test-execution': (eb, m, _c, llmRouter) => createTestExecutionPlugin(eb, m, llmRouter),
55
+ 'coverage-analysis': (eb, m, _c, llmRouter) => createCoverageAnalysisPlugin(eb, m, llmRouter),
56
+ 'quality-assessment': (eb, m, c, llmRouter) => createQualityAssessmentPlugin(eb, m, c, undefined, llmRouter),
57
+ 'defect-intelligence': (eb, m, c, llmRouter) => createDefectIntelligencePlugin(eb, m, c, undefined, llmRouter),
58
+ 'requirements-validation': (eb, m, c, llmRouter) => createRequirementsValidationPlugin(eb, m, c, undefined, llmRouter),
59
+ 'code-intelligence': (eb, m, c, llmRouter) => createCodeIntelligencePlugin(eb, m, c, undefined, llmRouter),
60
+ 'security-compliance': (eb, m, c, llmRouter) => createSecurityCompliancePlugin(eb, m, c, undefined, llmRouter),
61
+ 'contract-testing': (eb, m, c, llmRouter) => createContractTestingPlugin(eb, m, c, undefined, llmRouter),
62
+ 'visual-accessibility': (eb, m, c, llmRouter) => createVisualAccessibilityPlugin(eb, m, c, undefined, llmRouter),
63
+ 'chaos-resilience': (eb, m, c, llmRouter) => createChaosResiliencePlugin(eb, m, c, undefined, llmRouter),
64
+ 'learning-optimization': (eb, m, c, llmRouter) => createLearningOptimizationPlugin(eb, m, c, undefined, llmRouter),
65
+ 'enterprise-integration': (eb, m, c, _llmRouter) => createEnterpriseIntegrationPlugin(eb, m, c),
66
+ 'coordination': (eb, m, c, _llmRouter) => createCoordinationPlugin(eb, m, c),
62
67
  };
63
68
  const DEFAULT_CONFIG = {
64
69
  maxConcurrentAgents: AGENT_CONSTANTS.MAX_CONCURRENT_AGENTS,
@@ -93,6 +98,10 @@ export class QEKernelImpl {
93
98
  // checkAndTriggerDream path so 10-second SQLite write transactions move
94
99
  // out of short-lived hook subprocesses into the long-lived kernel.
95
100
  _dreamScheduler;
101
+ // ADR-043: kernel singleton HybridRouter. Built during initialize() iff
102
+ // a provider key is in env or the project explicitly enables one.
103
+ _llmRouter;
104
+ _llmRouterBuild;
96
105
  constructor(config = {}) {
97
106
  this._config = { ...DEFAULT_CONFIG, ...config };
98
107
  this._startTime = new Date();
@@ -118,6 +127,15 @@ export class QEKernelImpl {
118
127
  get memory() {
119
128
  return this._memory;
120
129
  }
130
+ /**
131
+ * ADR-043: Get the LLM router built during initialize(). Returns
132
+ * undefined when llmRouter.enabled is false or no provider was
133
+ * available. Domain plugins receive this as their factory's 4th arg
134
+ * via DOMAIN_FACTORIES.
135
+ */
136
+ get llmRouter() {
137
+ return this._llmRouter;
138
+ }
121
139
  async initialize() {
122
140
  if (this._initialized) {
123
141
  return;
@@ -156,14 +174,20 @@ export class QEKernelImpl {
156
174
  // Re-create plugins with the real memory backend
157
175
  this._plugins = new DefaultPluginLoader(this._eventBus, this._memory, this._config.lazyLoading);
158
176
  }
177
+ // ADR-043: Build the kernel-singleton LLM router before plugin
178
+ // factories are registered, so the closure on the next loop can
179
+ // capture it. Builds iff configured/auto-detected; null otherwise.
180
+ await this._initializeLLMRouter(projectRoot);
159
181
  // Register domain factories for enabled domains
160
182
  for (const domain of this._config.enabledDomains) {
161
183
  const factory = DOMAIN_FACTORIES[domain];
162
184
  if (factory) {
163
185
  // Wrap factory to match PluginLoader signature (async)
164
186
  this._plugins.registerFactory(domain, async (eventBus, memory) => {
165
- // Create plugin synchronously, return as Promise
166
- return Promise.resolve(factory(eventBus, memory, this._coordinator));
187
+ // Create plugin synchronously, return as Promise.
188
+ // ADR-043: pass the kernel singleton llmRouter as 4th arg —
189
+ // domain factories forward it to coordinators/services.
190
+ return Promise.resolve(factory(eventBus, memory, this._coordinator, this._llmRouter));
167
191
  });
168
192
  }
169
193
  }
@@ -199,7 +223,9 @@ export class QEKernelImpl {
199
223
  if (typeof createPlugin !== 'function') {
200
224
  throw new Error(`Plugin "${manifest.name}" entry point must export a default function or "createPlugin" function`);
201
225
  }
202
- return createPlugin(eventBus, memory, this._coordinator);
226
+ // ADR-043: forward llmRouter so external plugins can
227
+ // opt into LLM enhancement on the same terms as built-ins.
228
+ return createPlugin(eventBus, memory, this._coordinator, this._llmRouter);
203
229
  });
204
230
  }
205
231
  }
@@ -310,6 +336,106 @@ export class QEKernelImpl {
310
336
  }
311
337
  this._initialized = true;
312
338
  }
339
+ /**
340
+ * ADR-043: Build the kernel-singleton HybridRouter.
341
+ *
342
+ * Behavior is gated, in order:
343
+ * 1. AQE_LLM_ROUTER_DISABLED env var (kill-switch): if set to a truthy
344
+ * value, ALWAYS skip — even when config.llmRouter.enabled === true.
345
+ * This is the env-only opt-out for users who upgrade with a
346
+ * provider key already in env and don't want billing surprises.
347
+ * 2. config.llmRouter.enabled:
348
+ * 'auto' (default): build iff at least one provider key is in env,
349
+ * or the project's llm-config.json enables a provider
350
+ * true: attempt to build; emit error event if no provider
351
+ * false: skip entirely (sets _llmRouter to undefined)
352
+ *
353
+ * On any error we publish a structured kernel.llm-router.init-failed
354
+ * event so monitoring catches misconfiguration. We also keep the
355
+ * console.warn for direct visibility in dev. The kernel still boots —
356
+ * a kernel that boots without LLMs is strictly better than a kernel
357
+ * that won't boot — but the failure is now observable.
358
+ */
359
+ async _initializeLLMRouter(projectRoot) {
360
+ // (1) Hard env kill-switch. Truthy values disable; falsy/empty pass.
361
+ // Same parse rule as src/mcp/tools/base.ts:isRouterKillSwitchSet
362
+ // so both code paths agree on what "disabled" means.
363
+ const killSwitch = (process.env.AQE_LLM_ROUTER_DISABLED ?? '').trim().toLowerCase();
364
+ if (killSwitch &&
365
+ killSwitch !== 'false' &&
366
+ killSwitch !== '0' &&
367
+ killSwitch !== 'no' &&
368
+ killSwitch !== 'off') {
369
+ this._llmRouter = undefined;
370
+ return;
371
+ }
372
+ const llmCfg = this._config.llmRouter ?? {};
373
+ const enabled = llmCfg.enabled ?? 'auto';
374
+ if (enabled === false) {
375
+ this._llmRouter = undefined;
376
+ return;
377
+ }
378
+ try {
379
+ const built = await createLLMRouterService({
380
+ projectRoot,
381
+ override: llmCfg.configOverride,
382
+ providerManager: llmCfg.providerManager,
383
+ });
384
+ if (!built) {
385
+ if (enabled === true) {
386
+ console.warn('[QEKernel] llmRouter.enabled=true but no provider available — ' +
387
+ 'continuing without LLM router (domain services will skip LLM enhancement)');
388
+ await this._publishLLMRouterEvent('init-no-provider', {
389
+ reason: 'no provider available in env or disk config',
390
+ });
391
+ }
392
+ this._llmRouter = undefined;
393
+ return;
394
+ }
395
+ this._llmRouterBuild = built;
396
+ this._llmRouter = built.router;
397
+ // Phase 5 wiring: register as shared singleton so MCP standalone
398
+ // tools see the same router instance (one cost tracker, one cache,
399
+ // one metric collector, one circuit breaker per provider).
400
+ try {
401
+ const { setSharedLLMRouter } = await import('../mcp/tools/base.js');
402
+ setSharedLLMRouter(built.router);
403
+ }
404
+ catch {
405
+ // MCP module not loaded — fine in CLI-only contexts.
406
+ }
407
+ }
408
+ catch (err) {
409
+ const msg = err instanceof Error ? err.message : String(err);
410
+ console.warn('[QEKernel] LLM router init failed; continuing without LLM enhancement:', msg);
411
+ await this._publishLLMRouterEvent('init-failed', {
412
+ error: msg,
413
+ stack: err instanceof Error ? err.stack : undefined,
414
+ });
415
+ this._llmRouter = undefined;
416
+ }
417
+ }
418
+ /**
419
+ * ADR-043: emit a structured event on the kernel event bus when the
420
+ * LLM router can't be built. Observability hook for monitoring and
421
+ * alerting — a silent warn is not enough for production systems where
422
+ * "tests run without LLM analysis" is a quality regression worth
423
+ * paging on.
424
+ */
425
+ async _publishLLMRouterEvent(type, payload) {
426
+ try {
427
+ await this._eventBus.publish({
428
+ id: randomUUID(),
429
+ type: `kernel.llm-router.${type}`,
430
+ timestamp: new Date(),
431
+ source: 'qe-kernel',
432
+ payload,
433
+ });
434
+ }
435
+ catch {
436
+ // Event bus publish failures during boot must not crash the kernel.
437
+ }
438
+ }
313
439
  async dispose() {
314
440
  // ADR-094: Stop the dream scheduler first so a dream-in-progress doesn't
315
441
  // try to write to a disposed memory backend.
@@ -332,6 +458,20 @@ export class QEKernelImpl {
332
458
  await this._coordinator.dispose();
333
459
  await this._eventBus.dispose();
334
460
  await this._memory.dispose();
461
+ // ADR-043: clear the shared LLM router singleton if we registered
462
+ // one. Prevents test isolation problems where a stale router from
463
+ // a previous kernel boot leaks into the next.
464
+ if (this._llmRouter) {
465
+ try {
466
+ const { resetSharedLLMRouter } = await import('../mcp/tools/base.js');
467
+ resetSharedLLMRouter();
468
+ }
469
+ catch {
470
+ // MCP module not loaded — fine.
471
+ }
472
+ this._llmRouter = undefined;
473
+ this._llmRouterBuild = undefined;
474
+ }
335
475
  this._initialized = false;
336
476
  }
337
477
  getDomainAPI(domain) {