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.
- package/.claude/skills/skills-manifest.json +1 -1
- package/CHANGELOG.md +72 -0
- package/README.md +35 -8
- package/dist/cli/bundle.js +5 -5
- package/dist/cli/chunks/adapter-3JS2CN7C.js +2 -0
- package/dist/cli/chunks/{agent-booster-wasm-5UDM2PWG.js → agent-booster-wasm-FZLWOPSX.js} +2 -2
- package/dist/cli/chunks/{agent-handler-JSYER5YC.js → agent-handler-KAGRVCKS.js} +2 -2
- package/dist/cli/chunks/{agent-memory-branch-T2SAHI4F.js → agent-memory-branch-JJKFEXQW.js} +2 -2
- package/dist/cli/chunks/aqe-learning-engine-Q4GFNGU6.js +2 -0
- package/dist/cli/chunks/{audit-HIBRVGXG.js → audit-DN5SY4JJ.js} +2 -2
- package/dist/cli/chunks/base-Q3MAL22Y.js +2 -0
- package/dist/cli/chunks/{hnswlib-node-TA4DZV62.js → better-sqlite3-XGPW4HK5.js} +2 -2
- package/dist/cli/chunks/{brain-handler-N6AWIMXG.js → brain-handler-O7MP5BGY.js} +3 -3
- package/dist/cli/chunks/{branch-enumerator-VYQGBVEJ.js → branch-enumerator-ZPTN5J6V.js} +2 -2
- package/dist/cli/chunks/{browser-2X4WKZPT.js → browser-PAZE2JSD.js} +2 -2
- package/dist/cli/chunks/browser-workflow-JX3M2UWG.js +2 -0
- package/dist/cli/chunks/{chunk-SGONA5GS.js → chunk-25QGPRWN.js} +2 -2
- package/dist/cli/chunks/{chunk-NT4PI5HI.js → chunk-2ETDES5W.js} +2 -2
- package/dist/cli/chunks/{chunk-UGX4EHT5.js → chunk-2KTRRSKD.js} +2 -2
- package/dist/cli/chunks/{chunk-UCIJCRPB.js → chunk-2S4XHK26.js} +2 -2
- package/dist/cli/chunks/{chunk-KNL3QWVA.js → chunk-2TDWCXZ6.js} +2 -2
- package/dist/cli/chunks/{chunk-HZPXOAFW.js → chunk-2UN4DOBJ.js} +2 -2
- package/dist/cli/chunks/{chunk-T7DLX3LS.js → chunk-32R7EA7B.js} +3 -3
- package/dist/cli/chunks/{chunk-CU4IUJ2K.js → chunk-3YOPJ7DY.js} +2 -2
- package/dist/cli/chunks/{chunk-55JPAF56.js → chunk-4AWJ5PE4.js} +1 -1
- package/dist/cli/chunks/{chunk-GPKZ4MMH.js → chunk-57NJQV57.js} +1 -1
- package/dist/cli/chunks/{chunk-G2HA2O3R.js → chunk-5EU2VQK3.js} +2 -2
- package/dist/cli/chunks/{chunk-BXCS55GB.js → chunk-5KFCH7RH.js} +1 -1
- package/dist/cli/chunks/{chunk-WC6KZDPM.js → chunk-5OTYBWRL.js} +2 -2
- package/dist/cli/chunks/{chunk-ALCQRJDY.js → chunk-5ZCVMR5E.js} +2 -2
- package/dist/cli/chunks/{chunk-FX4SYT6Y.js → chunk-622MIAOR.js} +3 -3
- package/dist/cli/chunks/{chunk-J5RJYFRM.js → chunk-6A2NIR2E.js} +2 -2
- package/dist/cli/chunks/{chunk-6F3WJOU2.js → chunk-6D57DWQ6.js} +2 -2
- package/dist/cli/chunks/{chunk-Z6JLPPAY.js → chunk-6E7GI2UB.js} +1 -1
- package/dist/cli/chunks/{chunk-M73IL7FA.js → chunk-6LRCMFLV.js} +2 -2
- package/dist/cli/chunks/{chunk-L4N6PTIC.js → chunk-6QFONVEE.js} +2 -2
- package/dist/cli/chunks/{chunk-6H5MRVJS.js → chunk-6VQ5MFJ6.js} +3 -3
- package/dist/cli/chunks/{chunk-JUICZG3T.js → chunk-6ZRMQXVL.js} +2 -2
- package/dist/cli/chunks/{chunk-RARSTEUO.js → chunk-7CKVAYP3.js} +1 -1
- package/dist/cli/chunks/{chunk-KDFW7MVM.js → chunk-7MSYTHZM.js} +2 -2
- package/dist/cli/chunks/{chunk-DY7IRNE2.js → chunk-7SQD2TTQ.js} +1 -1
- package/dist/cli/chunks/{chunk-IQNR662U.js → chunk-AABKTWXC.js} +2 -2
- package/dist/cli/chunks/{chunk-LYVFC7C7.js → chunk-AUVC3DDB.js} +2 -2
- package/dist/cli/chunks/{chunk-OWMGD7FO.js → chunk-BECU52UY.js} +3 -3
- package/dist/cli/chunks/chunk-BF7MUYWC.js +2 -0
- package/dist/cli/chunks/{chunk-BQT4J3BD.js → chunk-BGBSYF3K.js} +2 -2
- package/dist/cli/chunks/{chunk-TR7BZLB6.js → chunk-BN7ERYXI.js} +1 -1
- package/dist/cli/chunks/{chunk-DQJJS4AX.js → chunk-CKECJH2A.js} +2 -2
- package/dist/cli/chunks/{chunk-I4T4JPR2.js → chunk-COZDJLIL.js} +1 -1
- package/dist/cli/chunks/{chunk-URVDWF2Y.js → chunk-CR4ERDS2.js} +2 -2
- package/dist/cli/chunks/chunk-DMIYWPQQ.js +2 -0
- package/dist/cli/chunks/{chunk-Y4I5JBOL.js → chunk-DQIS6J77.js} +2 -2
- package/dist/cli/chunks/{chunk-7ZIRDBXH.js → chunk-DVOH75S4.js} +1 -1
- package/dist/cli/chunks/{chunk-Z2SCTEZD.js → chunk-EBQ6YKP2.js} +2 -2
- package/dist/cli/chunks/{chunk-2GL4GH52.js → chunk-ECPB7IAH.js} +4 -4
- package/dist/cli/chunks/{chunk-LQ3TA22E.js → chunk-EIROAH6N.js} +2 -2
- package/dist/cli/chunks/{chunk-UCXQQCIP.js → chunk-ELUERFGA.js} +2 -2
- package/dist/cli/chunks/{chunk-KOSKGZK4.js → chunk-ELZ67OHQ.js} +2 -2
- package/dist/cli/chunks/{chunk-WVCIZIKH.js → chunk-EO4B5GS4.js} +1 -1
- package/dist/cli/chunks/{chunk-HD6CZBZV.js → chunk-EUJHHXE6.js} +2 -2
- package/dist/cli/chunks/{chunk-KCHFF4IE.js → chunk-F3OVFA6W.js} +2 -2
- package/dist/cli/chunks/{chunk-7Y54QZKF.js → chunk-FJSR2U65.js} +2 -2
- package/dist/cli/chunks/{chunk-5QJDH4Z5.js → chunk-G3BQU3Q6.js} +2 -2
- package/dist/cli/chunks/{chunk-LDMG4372.js → chunk-G5DTENO3.js} +2 -2
- package/dist/cli/chunks/{chunk-JKVNZASH.js → chunk-GMKGLZJU.js} +2 -2
- package/dist/cli/chunks/{chunk-O3NAUNFC.js → chunk-GRG3OP34.js} +2 -2
- package/dist/cli/chunks/{chunk-3U77XX6J.js → chunk-GRYXNWPF.js} +4 -4
- package/dist/cli/chunks/{chunk-3QULDB7K.js → chunk-GTGONWGX.js} +1 -1
- package/dist/cli/chunks/{chunk-OGT45MZN.js → chunk-GTRXZJNX.js} +2 -2
- package/dist/cli/chunks/{chunk-TEJPHJMW.js → chunk-GXJ4BCGC.js} +2 -2
- package/dist/cli/chunks/{chunk-4NQ6KANC.js → chunk-H22MMMYY.js} +2 -2
- package/dist/cli/chunks/{chunk-VTIXFHZR.js → chunk-H44WD7QX.js} +2 -2
- package/dist/cli/chunks/{chunk-X4U5NYB6.js → chunk-HPNEZ7YN.js} +1 -1
- package/dist/cli/chunks/{chunk-FQ5FT7IE.js → chunk-HRDGN3OK.js} +1 -1
- package/dist/cli/chunks/{chunk-6HCHW5TS.js → chunk-IHDUWPFY.js} +2 -2
- package/dist/cli/chunks/{chunk-DQLEZBWV.js → chunk-IITKJCPK.js} +2 -2
- package/dist/cli/chunks/{chunk-VMJXNTJT.js → chunk-IJ4BUSJN.js} +4 -4
- package/dist/cli/chunks/{chunk-MJBXQXSX.js → chunk-IK6AJX3C.js} +1 -1
- package/dist/cli/chunks/{chunk-NLCUQMUR.js → chunk-IPRDHKSI.js} +2 -2
- package/dist/cli/chunks/{chunk-ZYZWBNKT.js → chunk-JLKHPIQF.js} +1 -1
- package/dist/cli/chunks/chunk-K22TPWOJ.js +3 -0
- package/dist/cli/chunks/{chunk-L3IFZ4IX.js → chunk-K4T3RDCB.js} +2 -2
- package/dist/cli/chunks/{chunk-XFUU2RCA.js → chunk-KCTH5MHE.js} +2 -2
- package/dist/cli/chunks/{chunk-L2AIES7X.js → chunk-KEC5FBAW.js} +1 -1
- package/dist/cli/chunks/{chunk-M4HDBRVJ.js → chunk-KKNBYXYA.js} +1 -1
- package/dist/cli/chunks/{chunk-5UOV7T36.js → chunk-KRXKU54J.js} +2 -2
- package/dist/cli/chunks/{provider-manager-HV55NIIO.js → chunk-KZJXVIAW.js} +13 -13
- package/dist/cli/chunks/{chunk-YHNEBCYQ.js → chunk-LF7URN2X.js} +2 -2
- package/dist/cli/chunks/{chunk-HD5NQDOL.js → chunk-MQYTW2IN.js} +2 -2
- package/dist/cli/chunks/{chunk-66GIKUI2.js → chunk-MVGVD6LS.js} +2 -2
- package/dist/cli/chunks/{chunk-M3M7HXDH.js → chunk-NDCPEXDN.js} +2 -2
- package/dist/cli/chunks/{chunk-RF6QKV7M.js → chunk-NOCYYXK4.js} +2 -2
- package/dist/cli/chunks/{chunk-U56TIYGP.js → chunk-NPSBMDVU.js} +2 -2
- package/dist/cli/chunks/{chunk-OUJJ34JH.js → chunk-NQZYUH6S.js} +1 -1
- package/dist/cli/chunks/{chunk-F363JJUI.js → chunk-NRLT44YB.js} +1 -1
- package/dist/cli/chunks/{chunk-27ACATRH.js → chunk-OC3OJWLB.js} +2 -2
- package/dist/cli/chunks/{chunk-XFMSHTXG.js → chunk-OQP5OFRR.js} +1 -1
- package/dist/cli/chunks/{chunk-RGONSQ44.js → chunk-OVENSL64.js} +210 -210
- package/dist/cli/chunks/{chunk-DXV6NRG3.js → chunk-P7T5Y735.js} +2 -2
- package/dist/cli/chunks/{chunk-QU54GUEA.js → chunk-PLRSKAFZ.js} +2 -2
- package/dist/cli/chunks/{chunk-NWHSEXHA.js → chunk-PUXDXIUE.js} +1 -1
- package/dist/cli/chunks/{chunk-RH3PHCJT.js → chunk-PW6MOFXG.js} +2 -2
- package/dist/cli/chunks/{chunk-3BO7EKGO.js → chunk-PXFQSVA2.js} +3 -3
- package/dist/cli/chunks/{chunk-UE3XXKLN.js → chunk-Q24OJX44.js} +2 -2
- package/dist/cli/chunks/{chunk-LXHA55EB.js → chunk-Q5VHBI4U.js} +1 -1
- package/dist/cli/chunks/{chunk-OKGK7DBT.js → chunk-QNW335PD.js} +2 -2
- package/dist/cli/chunks/{chunk-S4CNA6Z5.js → chunk-RPL6K623.js} +3 -3
- package/dist/cli/chunks/{chunk-FCSJ7GIZ.js → chunk-RRLQFFCO.js} +4 -4
- package/dist/cli/chunks/{chunk-W6U7SIIK.js → chunk-RWYW573C.js} +3 -3
- package/dist/cli/chunks/{chunk-BTIVIWIG.js → chunk-SLNGJW4G.js} +1 -1
- package/dist/cli/chunks/{chunk-P6XYFDXN.js → chunk-SQBB2DC6.js} +1 -1
- package/dist/cli/chunks/{chunk-SCYF5CQA.js → chunk-T3UXMPXX.js} +1 -1
- package/dist/cli/chunks/{chunk-C5QESAYA.js → chunk-TFNLXAK5.js} +1 -1
- package/dist/cli/chunks/{chunk-ZFBMBCKN.js → chunk-TL5F2S3Z.js} +2 -2
- package/dist/cli/chunks/{chunk-HIWBW4IQ.js → chunk-TNGGVMPQ.js} +1 -1
- package/dist/cli/chunks/{chunk-5RQT7EJP.js → chunk-TNVYKYTO.js} +3 -3
- package/dist/cli/chunks/{chunk-4WYGUTSF.js → chunk-TP77PNN6.js} +2 -2
- package/dist/cli/chunks/{chunk-WG6I7YF3.js → chunk-TX7SNQKL.js} +1 -1
- package/dist/cli/chunks/{chunk-WLLE54TA.js → chunk-UDFLR7GR.js} +1 -1
- package/dist/cli/chunks/{chunk-KYLJERZ3.js → chunk-UDVX34ZG.js} +2 -2
- package/dist/cli/chunks/{chunk-YYDHTBHE.js → chunk-UU2Q6XWF.js} +1 -1
- package/dist/cli/chunks/{chunk-JCKX2LEJ.js → chunk-VKRMVTWU.js} +49 -49
- package/dist/cli/chunks/{chunk-AFFYJSW2.js → chunk-VOIWDPIU.js} +2 -2
- package/dist/cli/chunks/chunk-VPCE5CIT.js +2 -0
- package/dist/cli/chunks/{chunk-4UUDFWOP.js → chunk-W2DT3CDE.js} +2 -2
- package/dist/cli/chunks/{chunk-VTO5O7DA.js → chunk-W6ZF2CPN.js} +1 -1
- package/dist/cli/chunks/{chunk-BQX5QDU5.js → chunk-WDTCCPK4.js} +1 -1
- package/dist/cli/chunks/{chunk-PNDO4W4L.js → chunk-WL2J6ECN.js} +2 -2
- package/dist/cli/chunks/chunk-WMG5F6R6.js +2 -0
- package/dist/cli/chunks/{chunk-QL3U5VSM.js → chunk-WO7KYT3X.js} +2 -2
- package/dist/cli/chunks/{chunk-S33246T4.js → chunk-WPNZSL4S.js} +1 -1
- package/dist/cli/chunks/{chunk-IBXNBLGM.js → chunk-WQEZKAUR.js} +2 -2
- package/dist/cli/chunks/{chunk-3OSCWD7Z.js → chunk-WS4XVJHI.js} +1 -1
- package/dist/cli/chunks/{chunk-GXCD7GNH.js → chunk-XGUQYVJR.js} +2 -2
- package/dist/cli/chunks/{chunk-I4E6CLC4.js → chunk-XKOKMS5A.js} +2 -2
- package/dist/cli/chunks/{chunk-ZCNVFULO.js → chunk-XRK7FBTY.js} +2 -2
- package/dist/cli/chunks/{chunk-FEBXP74Y.js → chunk-Y2DPXMOR.js} +1 -1
- package/dist/cli/chunks/{chunk-MF3XRML3.js → chunk-Y357YFLF.js} +2 -2
- package/dist/cli/chunks/{chunk-LRISVDVO.js → chunk-YGRTMAWB.js} +1 -1
- package/dist/cli/chunks/{chunk-VEOQH4W6.js → chunk-YPOTBXPU.js} +2 -2
- package/dist/cli/chunks/{chunk-2POXDKUB.js → chunk-YYWIA5FX.js} +1 -1
- package/dist/cli/chunks/{chunk-QWBO76AU.js → chunk-ZEMXMDD3.js} +2 -2
- package/dist/cli/chunks/{chunk-V5TRAL57.js → chunk-ZTMWJQTZ.js} +2 -2
- package/dist/cli/chunks/{ci-7TR4NQ5I.js → ci-EHRUN7O6.js} +2 -2
- package/dist/cli/chunks/{ci-output-SLTICF3O.js → ci-output-EXDXVXKB.js} +2 -2
- package/dist/cli/chunks/{circuit-breaker-7GVVTMBY.js → circuit-breaker-LM4QRAAL.js} +2 -2
- package/dist/cli/chunks/{claude-flow-setup-TYCWYEMM.js → claude-flow-setup-ZHUCZVW7.js} +2 -2
- package/dist/cli/chunks/client-PA3UJIHH.js +2 -0
- package/dist/cli/chunks/{cline-installer-ESIAJOLK.js → cline-installer-WMFLQOW2.js} +2 -2
- package/dist/cli/chunks/{code-I42JGOVI.js → code-L7KRLU5E.js} +2 -2
- package/dist/cli/chunks/{code-index-extractor-2CCXPCQW.js → code-index-extractor-FTMUYQC6.js} +2 -2
- package/dist/cli/chunks/{codex-installer-HEZRDNUT.js → codex-installer-B3F6WI3Z.js} +2 -2
- package/dist/cli/chunks/{completions-44HLIZGI.js → completions-3JZQRNB6.js} +2 -2
- package/dist/cli/chunks/{complexity-analyzer-SOCSFDVO.js → complexity-analyzer-LB2FFEKX.js} +2 -2
- package/dist/cli/chunks/{continuedev-installer-Q7O4HLIM.js → continuedev-installer-WH6IMV7R.js} +2 -2
- package/dist/cli/chunks/{copilot-installer-GIWCVLCS.js → copilot-installer-NOIEOFJM.js} +2 -2
- package/dist/cli/chunks/{cost-tracker-G7BONKEV.js → cost-tracker-IKX2VYSA.js} +2 -2
- package/dist/cli/chunks/{coverage-5TWVP7KY.js → coverage-TD37CYSY.js} +3 -3
- package/dist/cli/chunks/cross-domain-router-BVJRP2ZX.js +2 -0
- package/dist/cli/chunks/{cursor-installer-43EQZSB5.js → cursor-installer-4NSVGRM5.js} +2 -2
- package/dist/cli/chunks/{daemon-ZXHFRDKG.js → daemon-LYDV7NRW.js} +3 -3
- package/dist/cli/chunks/{daemon-QQZE4BU2.js → daemon-UWEBUIDT.js} +4 -4
- package/dist/cli/chunks/{dag-attention-scheduler-GOZAVAZQ.js → dag-attention-scheduler-NECJGCHC.js} +2 -2
- package/dist/cli/chunks/{detect-X777GVJ4.js → detect-4XGC7ILO.js} +2 -2
- package/dist/cli/chunks/{dist-node-EZZK46TB.js → dist-node-GGJDXRKJ.js} +2 -2
- package/dist/cli/chunks/{domain-handler-ZT32DKYY.js → domain-handler-UOFONAUT.js} +2 -2
- package/dist/cli/chunks/{domain-transfer-LHQVSLJW.js → domain-transfer-6JLNOYPA.js} +2 -2
- package/dist/cli/chunks/dream-BXZUEIW2.js +2 -0
- package/dist/cli/chunks/{embed-and-insert-pattern-XFYPPWG7.js → embed-and-insert-pattern-ZM75DQ4J.js} +2 -2
- package/dist/cli/chunks/{eval-V4NYJZUZ.js → eval-CYZJTHEB.js} +2 -2
- package/dist/cli/chunks/{experience-capture-middleware-HXX2W4GL.js → experience-capture-middleware-RBOJLDUB.js} +3 -3
- package/dist/cli/chunks/{fast-paths-RBPWQSFJ.js → fast-paths-S5BWZR3L.js} +2 -2
- package/dist/cli/chunks/{feature-flags-NX5EXRO3.js → feature-flags-6E7H3NYP.js} +2 -2
- package/dist/cli/chunks/{feature-flags-INJJZBMN.js → feature-flags-DUNQPDU3.js} +2 -2
- package/dist/cli/chunks/{file-discovery-SNFSG6NK.js → file-discovery-PFFKDGYG.js} +2 -2
- package/dist/cli/chunks/{fleet-6SDN4UWE.js → fleet-RCDZZFXN.js} +3 -3
- package/dist/cli/chunks/{gnn-wrapper-2JDRTDDK.js → gnn-wrapper-5AG3WDWF.js} +2 -2
- package/dist/cli/chunks/{heartbeat-handler-QLK6E7KA.js → heartbeat-handler-O2KAEX4Y.js} +4 -4
- package/dist/cli/chunks/heartbeat-scheduler-LEKAWFJF.js +2 -0
- package/dist/cli/chunks/hnsw-adapter-2TCEG5M2.js +2 -0
- package/dist/cli/chunks/hnsw-index-VDPUTEES.js +2 -0
- package/dist/cli/chunks/{hnsw-legacy-bridge-Q2ZEZQKB.js → hnsw-legacy-bridge-C7FG6YGW.js} +2 -2
- package/dist/cli/chunks/{better-sqlite3-Y6GX6CGB.js → hnswlib-node-YX6OOBN6.js} +2 -2
- package/dist/cli/chunks/{hooks-D4YENHO2.js → hooks-FUHNE2P7.js} +10 -10
- package/dist/cli/chunks/hybrid-router-2EMDIYIG.js +2 -0
- package/dist/cli/chunks/{hypergraph-engine-G72U446M.js → hypergraph-engine-LQRYBNPV.js} +2 -2
- package/dist/cli/chunks/{hypergraph-handler-TRZ5FDRH.js → hypergraph-handler-AFFNLZVD.js} +3 -3
- package/dist/cli/chunks/impact-analyzer-HFD6CPWC.js +2 -0
- package/dist/cli/chunks/{init-handler-3ZD4GCT4.js → init-handler-BQ6IDBX4.js} +6 -6
- package/dist/cli/chunks/init-wizard-552QIVRC.js +2 -0
- package/dist/cli/chunks/kernel-5DN6O6EE.js +2 -0
- package/dist/cli/chunks/{kilocode-installer-AXSIW3XW.js → kilocode-installer-KS72HUSG.js} +2 -2
- package/dist/cli/chunks/{kiro-installer-JQGIFWBK.js → kiro-installer-2ZEFLGRX.js} +2 -2
- package/dist/cli/chunks/knowledge-graph-76Y77MB6.js +2 -0
- package/dist/cli/chunks/{learning-SPO7TGWX.js → learning-GGHGJ6B6.js} +3 -3
- package/dist/cli/chunks/llm-router-LP6K5BJF.js +36 -0
- package/dist/cli/chunks/llm-router-service-4O6GCEFH.js +2 -0
- package/dist/cli/chunks/{load-XIDDK64U.js → load-2MLKXOT2.js} +2 -2
- package/dist/cli/chunks/load-test-FCI2IWRJ.js +2 -0
- package/dist/cli/chunks/{mcp-3JXRGXO4.js → mcp-CDJBJG5H.js} +2 -2
- package/dist/cli/chunks/{memory-A66KRS2P.js → memory-4LAX7JZS.js} +5 -5
- package/dist/cli/chunks/memory-backend-MKNCBNDE.js +2 -0
- package/dist/cli/chunks/memory-handlers-OBAFR4WV.js +2 -0
- package/dist/cli/chunks/{multi-model-executor-XCDGUVCE.js → multi-model-executor-SLJV73HE.js} +2 -2
- package/dist/cli/chunks/{opencode-installer-GELXWLF2.js → opencode-installer-M76SONWV.js} +2 -2
- package/dist/cli/chunks/{orchestrator-CCS3K6NH.js → orchestrator-TJPUDJMP.js} +5 -5
- package/dist/cli/chunks/{pipeline-Z5C72H5S.js → pipeline-2PVNFT6J.js} +2 -2
- package/dist/cli/chunks/{platform-4AK7XJ3Y.js → platform-KCSEDKEE.js} +2 -2
- package/dist/cli/chunks/{plugin-7RYBIZI7.js → plugin-QX47QF5U.js} +2 -2
- package/dist/cli/chunks/{prime-radiant-advanced-wasm-E5PARKRX.js → prime-radiant-advanced-wasm-L6VWL7VR.js} +2 -2
- package/dist/cli/chunks/protocol-executor-IA7WNT23.js +2 -0
- package/dist/cli/chunks/{protocol-handler-R6QJQFNL.js → protocol-handler-WDNJDEUE.js} +2 -2
- package/dist/cli/chunks/{prove-7ESQ2YAL.js → prove-3B75DA3S.js} +2 -2
- package/dist/cli/chunks/provider-manager-3K5KB5A6.js +2 -0
- package/dist/cli/chunks/qe-reasoning-bank-V5Z3BBYY.js +2 -0
- package/dist/cli/chunks/{quality-4UE345QA.js → quality-UGASS5WM.js} +2 -2
- package/dist/cli/chunks/queen-coordinator-QOMPA27Z.js +2 -0
- package/dist/cli/chunks/{real-embeddings-TYIVN3N5.js → real-embeddings-COBP2LHS.js} +2 -2
- package/dist/cli/chunks/{roocode-installer-2KOANC47.js → roocode-installer-TOZ4VLFT.js} +2 -2
- package/dist/cli/chunks/router-P5RZUPC4.js +2 -0
- package/dist/cli/chunks/routing-feedback-3PS3OZQC.js +2 -0
- package/dist/cli/chunks/{routing-handler-JFEYTN7T.js → routing-handler-5TDVSILX.js} +2 -2
- package/dist/cli/chunks/{ruvector-commands-KSLSZRJX.js → ruvector-commands-AM63KWQN.js} +2 -2
- package/dist/cli/chunks/{rvf-dual-writer-EPBL226J.js → rvf-dual-writer-UANIFE2M.js} +2 -2
- package/dist/cli/chunks/{rvf-migration-adapter-25KSI6SF.js → rvf-migration-adapter-LNPYWAPI.js} +2 -2
- package/dist/cli/chunks/{rvf-migration-coordinator-2XBYHPZP.js → rvf-migration-coordinator-U47L63DQ.js} +2 -2
- package/dist/cli/chunks/rvf-native-adapter-TT7OJPKM.js +2 -0
- package/dist/cli/chunks/safe-db-PEW7VBAE.js +2 -0
- package/dist/cli/chunks/schedule-QHOTHBQE.js +2 -0
- package/dist/cli/chunks/scheduler-KXJBYTRT.js +2 -0
- package/dist/cli/chunks/{security-4XWYKI4O.js → security-KDQ2AH7G.js} +3 -3
- package/dist/cli/chunks/{shared-rvf-adapter-WRZ3HGDQ.js → shared-rvf-adapter-5MAGLLYJ.js} +2 -2
- package/dist/cli/chunks/{shared-rvf-dual-writer-DX2N5STR.js → shared-rvf-dual-writer-GF2OPPM5.js} +2 -2
- package/dist/cli/chunks/sqlite-persistence-TPXJK34J.js +2 -0
- package/dist/cli/chunks/{status-handler-V75OSXMQ.js → status-handler-XZKEL7LO.js} +2 -2
- package/dist/cli/chunks/{structural-health-TLX3JHZ6.js → structural-health-27QKWW25.js} +2 -2
- package/dist/cli/chunks/{sync-DXZFMVZQ.js → sync-INNKS6UK.js} +2 -2
- package/dist/cli/chunks/{sync-KGBEXUF7.js → sync-V3HGPEJT.js} +2 -2
- package/dist/cli/chunks/{task-handler-T3OJ6R7H.js → task-handler-LDUVOM6G.js} +2 -2
- package/dist/cli/chunks/{task-handlers-NJYR54AS.js → task-handlers-HTCPV7OO.js} +3 -3
- package/dist/cli/chunks/{test-KMVDNNQA.js → test-PCUVGVJL.js} +4 -4
- package/dist/cli/chunks/{test-scheduling-R5EQ2XGV.js → test-scheduling-GYVXWCAA.js} +3 -3
- package/dist/cli/chunks/{token-bootstrap-PFKVV3RO.js → token-bootstrap-MJ2ANC4P.js} +2 -2
- package/dist/cli/chunks/{token-usage-ZLOGA6LR.js → token-usage-ZREHROTF.js} +2 -2
- package/dist/cli/chunks/{transformers-TNPSPQI3.js → transformers-6B3FWFYL.js} +2 -2
- package/dist/cli/chunks/{tree-sitter-wasm-parser-A2EEB5BF.js → tree-sitter-wasm-parser-JVV234MN.js} +2 -2
- package/dist/cli/chunks/{types-DIXPI4NR.js → types-MVZTJI2F.js} +2 -2
- package/dist/cli/chunks/unified-memory-ROS2NKR5.js +2 -0
- package/dist/cli/chunks/unified-memory-hnsw-FLEUF3XO.js +2 -0
- package/dist/cli/chunks/unified-persistence-QC5L7UNQ.js +2 -0
- package/dist/cli/chunks/{upgrade-LX5KP6VO.js → upgrade-MKTFEILD.js} +2 -2
- package/dist/cli/chunks/{validate-3L6F7M36.js → validate-IABGALSW.js} +2 -2
- package/dist/cli/chunks/{validate-swarm-FD42ZKAQ.js → validate-swarm-RHF53RF6.js} +2 -2
- package/dist/cli/chunks/{vibium-GSBSJR53.js → vibium-RAKW6FMF.js} +2 -2
- package/dist/cli/chunks/visual-security-NLIOUQCR.js +2 -0
- package/dist/cli/chunks/{web-tree-sitter-TXHMO4BW.js → web-tree-sitter-PYK7F4JZ.js} +2 -2
- package/dist/cli/chunks/{windsurf-installer-3EUZ6RD3.js → windsurf-installer-S3U2HWZ4.js} +2 -2
- package/dist/cli/chunks/{witness-chain-ONAUEJ4M.js → witness-chain-435NKQLB.js} +2 -2
- package/dist/cli/chunks/witness-chain-U7X6JX5J.js +2 -0
- package/dist/cli/chunks/{workflow-E7A6BV4C.js → workflow-5UHJCZ6J.js} +4 -4
- package/dist/cli/chunks/workflow-orchestrator-APE6BAXH.js +2 -0
- package/dist/cli/chunks/{wrappers-AHHAQJM3.js → wrappers-RD3NCMLK.js} +2 -2
- package/dist/cli/commands/llm-router.js +83 -26
- package/dist/domains/chaos-resilience/coordinator.d.ts +2 -1
- package/dist/domains/chaos-resilience/coordinator.js +3 -2
- package/dist/domains/chaos-resilience/plugin.d.ts +4 -2
- package/dist/domains/chaos-resilience/plugin.js +8 -5
- package/dist/domains/code-intelligence/coordinator.d.ts +2 -1
- package/dist/domains/code-intelligence/coordinator.js +3 -2
- package/dist/domains/code-intelligence/plugin.d.ts +4 -2
- package/dist/domains/code-intelligence/plugin.js +8 -5
- package/dist/domains/contract-testing/coordinator.d.ts +2 -1
- package/dist/domains/contract-testing/coordinator.js +3 -2
- package/dist/domains/contract-testing/plugin.d.ts +4 -2
- package/dist/domains/contract-testing/plugin.js +8 -5
- package/dist/domains/coverage-analysis/coordinator.d.ts +2 -1
- package/dist/domains/coverage-analysis/coordinator.js +4 -3
- package/dist/domains/coverage-analysis/plugin.d.ts +3 -2
- package/dist/domains/coverage-analysis/plugin.js +4 -4
- package/dist/domains/defect-intelligence/coordinator.d.ts +2 -1
- package/dist/domains/defect-intelligence/coordinator.js +4 -3
- package/dist/domains/defect-intelligence/plugin.d.ts +4 -2
- package/dist/domains/defect-intelligence/plugin.js +9 -6
- package/dist/domains/learning-optimization/coordinator.d.ts +2 -1
- package/dist/domains/learning-optimization/coordinator.js +3 -2
- package/dist/domains/learning-optimization/plugin.d.ts +4 -2
- package/dist/domains/learning-optimization/plugin.js +8 -5
- package/dist/domains/quality-assessment/coordinator.d.ts +2 -1
- package/dist/domains/quality-assessment/coordinator.js +4 -3
- package/dist/domains/quality-assessment/plugin.d.ts +4 -2
- package/dist/domains/quality-assessment/plugin.js +10 -6
- package/dist/domains/requirements-validation/coordinator.d.ts +2 -1
- package/dist/domains/requirements-validation/coordinator.js +3 -2
- package/dist/domains/requirements-validation/plugin.d.ts +4 -2
- package/dist/domains/requirements-validation/plugin.js +8 -5
- package/dist/domains/security-compliance/coordinator.d.ts +2 -1
- package/dist/domains/security-compliance/coordinator.js +4 -2
- package/dist/domains/security-compliance/plugin.d.ts +4 -2
- package/dist/domains/security-compliance/plugin.js +11 -6
- package/dist/domains/test-execution/coordinator.d.ts +3 -2
- package/dist/domains/test-execution/coordinator.js +6 -5
- package/dist/domains/test-execution/plugin.d.ts +4 -2
- package/dist/domains/test-execution/plugin.js +6 -4
- package/dist/domains/test-generation/coordinator.d.ts +2 -1
- package/dist/domains/test-generation/coordinator.js +4 -3
- package/dist/domains/test-generation/plugin.d.ts +4 -2
- package/dist/domains/test-generation/plugin.js +12 -7
- package/dist/domains/visual-accessibility/coordinator.d.ts +2 -1
- package/dist/domains/visual-accessibility/coordinator.js +4 -3
- package/dist/domains/visual-accessibility/plugin.d.ts +4 -2
- package/dist/domains/visual-accessibility/plugin.js +9 -6
- package/dist/kernel/interfaces.d.ts +37 -0
- package/dist/kernel/kernel.d.ts +39 -0
- package/dist/kernel/kernel.js +157 -17
- package/dist/mcp/bundle.js +417 -395
- package/dist/mcp/qe-tool-bridge.js +8 -1
- package/dist/mcp/tools/base.d.ts +56 -0
- package/dist/mcp/tools/base.js +104 -1
- package/dist/mcp/tools/chaos-resilience/inject.js +4 -2
- package/dist/mcp/tools/code-intelligence/analyze.js +5 -3
- package/dist/mcp/tools/contract-testing/validate.js +4 -2
- package/dist/mcp/tools/coverage-analysis/index.js +11 -5
- package/dist/mcp/tools/defect-intelligence/predict.js +5 -10
- package/dist/mcp/tools/learning-optimization/optimize.js +4 -2
- package/dist/mcp/tools/registry.js +8 -1
- package/dist/mcp/tools/test-generation/generate.js +10 -6
- package/dist/mcp/tools/visual-accessibility/index.js +7 -4
- package/dist/shared/llm/llm-router-service.d.ts +77 -0
- package/dist/shared/llm/llm-router-service.js +166 -0
- package/dist/shared/llm/providers/gemini.js +5 -2
- package/dist/shared/llm/router/config-store.d.ts +89 -0
- package/dist/shared/llm/router/config-store.js +261 -0
- package/dist/shared/llm/router/hybrid-router.js +33 -11
- package/package.json +1 -1
- package/dist/cli/chunks/adapter-WTE6UVGP.js +0 -2
- package/dist/cli/chunks/aqe-learning-engine-LCLEBU7D.js +0 -2
- package/dist/cli/chunks/base-73I73HBF.js +0 -2
- package/dist/cli/chunks/browser-workflow-2NSV5O6W.js +0 -2
- package/dist/cli/chunks/chunk-6MONUYQ5.js +0 -2
- package/dist/cli/chunks/chunk-X73CRYF4.js +0 -2
- package/dist/cli/chunks/client-7GB4WWUD.js +0 -2
- package/dist/cli/chunks/cross-domain-router-7HQ74TLE.js +0 -2
- package/dist/cli/chunks/dream-G5SEFHI4.js +0 -2
- package/dist/cli/chunks/heartbeat-scheduler-NG7BY3FR.js +0 -2
- package/dist/cli/chunks/hnsw-adapter-TDSLUI7K.js +0 -2
- package/dist/cli/chunks/hnsw-index-OWLQSOQH.js +0 -2
- package/dist/cli/chunks/hybrid-router-URU2XLBD.js +0 -2
- package/dist/cli/chunks/impact-analyzer-NMTN75KA.js +0 -2
- package/dist/cli/chunks/init-wizard-SHBFYGBV.js +0 -2
- package/dist/cli/chunks/kernel-7KVY2JGO.js +0 -2
- package/dist/cli/chunks/knowledge-graph-V4G5J5B7.js +0 -2
- package/dist/cli/chunks/llm-router-G6N2OKDA.js +0 -36
- package/dist/cli/chunks/load-test-N4RNPLG4.js +0 -2
- package/dist/cli/chunks/memory-backend-HPGJ5YDQ.js +0 -2
- package/dist/cli/chunks/memory-handlers-K33YVCVQ.js +0 -2
- package/dist/cli/chunks/protocol-executor-GNVWUJUP.js +0 -2
- package/dist/cli/chunks/qe-reasoning-bank-DDSBHO6D.js +0 -2
- package/dist/cli/chunks/queen-coordinator-BQJ5O63C.js +0 -2
- package/dist/cli/chunks/router-C2RKWB7J.js +0 -2
- package/dist/cli/chunks/routing-feedback-RHATTSJ6.js +0 -2
- package/dist/cli/chunks/rvf-native-adapter-QG4CXHLL.js +0 -2
- package/dist/cli/chunks/safe-db-A4KQ2IDB.js +0 -2
- package/dist/cli/chunks/schedule-O7MLASQT.js +0 -2
- package/dist/cli/chunks/scheduler-HT7RNYQ2.js +0 -2
- package/dist/cli/chunks/sqlite-persistence-4NNKJ6CQ.js +0 -2
- package/dist/cli/chunks/unified-memory-CMNJVHOJ.js +0 -2
- package/dist/cli/chunks/unified-memory-hnsw-JQLU2KI6.js +0 -2
- package/dist/cli/chunks/unified-persistence-I25TEDIU.js +0 -2
- package/dist/cli/chunks/visual-security-AJJIEV5V.js +0 -2
- package/dist/cli/chunks/witness-chain-762QQBTN.js +0 -2
- package/dist/cli/chunks/workflow-orchestrator-ZGPYISKY.js +0 -2
package/dist/kernel/kernel.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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) {
|