agentic-qe 3.10.0 → 3.10.2
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/hooks/README.txt +17 -0
- package/.claude/hooks/aqe-hook.cjs +98 -0
- package/.claude/hooks/cross-phase-memory.yaml +296 -0
- package/.claude/hooks/post-task-sync.sh +113 -0
- package/.claude/hooks/v3-domain-workers.json +121 -0
- package/.claude/skills/skills-manifest.json +1 -1
- package/CHANGELOG.md +148 -0
- package/README.md +35 -8
- package/dist/cli/bundle.js +5 -5
- package/dist/cli/chunks/adapter-CR6J5C76.js +2 -0
- package/dist/cli/chunks/{agent-booster-wasm-5UDM2PWG.js → agent-booster-wasm-DHSIPFTH.js} +2 -2
- package/dist/cli/chunks/{agent-handler-JSYER5YC.js → agent-handler-FPQVHGGT.js} +2 -2
- package/dist/cli/chunks/{agent-memory-branch-T2SAHI4F.js → agent-memory-branch-OLOF5ZHV.js} +2 -2
- package/dist/cli/chunks/aqe-learning-engine-2MNTHMB6.js +2 -0
- package/dist/cli/chunks/{audit-HIBRVGXG.js → audit-ALRYPHGP.js} +2 -2
- package/dist/cli/chunks/base-AOQNGMTL.js +2 -0
- package/dist/cli/chunks/{hnswlib-node-TA4DZV62.js → better-sqlite3-5BT5FO64.js} +2 -2
- package/dist/cli/chunks/{brain-handler-N6AWIMXG.js → brain-handler-ROZUHCOT.js} +3 -3
- package/dist/cli/chunks/{branch-enumerator-VYQGBVEJ.js → branch-enumerator-VK7G4NKJ.js} +2 -2
- package/dist/cli/chunks/{browser-2X4WKZPT.js → browser-Q2S75M2F.js} +2 -2
- package/dist/cli/chunks/browser-workflow-UJ4A2ZXO.js +2 -0
- package/dist/cli/chunks/{chunk-BQX5QDU5.js → chunk-2244IFZA.js} +1 -1
- package/dist/cli/chunks/{chunk-S33246T4.js → chunk-22D6VBPD.js} +1 -1
- package/dist/cli/chunks/{chunk-UGX4EHT5.js → chunk-24LUQICS.js} +2 -2
- package/dist/cli/chunks/{chunk-6HCHW5TS.js → chunk-2EDWGHDA.js} +2 -2
- package/dist/cli/chunks/{chunk-4WYGUTSF.js → chunk-2JDLQWSV.js} +2 -2
- package/dist/cli/chunks/{chunk-3QULDB7K.js → chunk-2OH3ALYB.js} +1 -1
- package/dist/cli/chunks/chunk-3RHHKYUR.js +2 -0
- package/dist/cli/chunks/{chunk-Z6JLPPAY.js → chunk-3Z4FHA2E.js} +1 -1
- package/dist/cli/chunks/{chunk-ZYZWBNKT.js → chunk-4BXGVM2C.js} +1 -1
- package/dist/cli/chunks/{chunk-6F3WJOU2.js → chunk-4F3ZTXHP.js} +2 -2
- package/dist/cli/chunks/{chunk-CU4IUJ2K.js → chunk-4GTDW2XL.js} +2 -2
- package/dist/cli/chunks/{chunk-4UUDFWOP.js → chunk-5HB54RUS.js} +2 -2
- package/dist/cli/chunks/{chunk-YHNEBCYQ.js → chunk-5PL7WTCU.js} +2 -2
- package/dist/cli/chunks/{chunk-MF3XRML3.js → chunk-5PRFFHFV.js} +2 -2
- package/dist/cli/chunks/{chunk-TEJPHJMW.js → chunk-5QHSLWLP.js} +2 -2
- package/dist/cli/chunks/{chunk-ZFBMBCKN.js → chunk-5WJ3FWL4.js} +2 -2
- package/dist/cli/chunks/{chunk-V5TRAL57.js → chunk-6KSCXPPL.js} +2 -2
- package/dist/cli/chunks/{chunk-P6XYFDXN.js → chunk-6NZHEM4V.js} +1 -1
- package/dist/cli/chunks/{chunk-HD6CZBZV.js → chunk-6ZFHIKQG.js} +2 -2
- package/dist/cli/chunks/{chunk-VEOQH4W6.js → chunk-7DKYCVJI.js} +2 -2
- package/dist/cli/chunks/{chunk-Y4I5JBOL.js → chunk-7IVQ6OVR.js} +2 -2
- package/dist/cli/chunks/chunk-7IZ2OPC2.js +2 -0
- package/dist/cli/chunks/{chunk-AFFYJSW2.js → chunk-7QRMARM7.js} +2 -2
- package/dist/cli/chunks/{chunk-L2AIES7X.js → chunk-7SJX4CFK.js} +1 -1
- package/dist/cli/chunks/{chunk-UCIJCRPB.js → chunk-7SWD3D6Y.js} +2 -2
- package/dist/cli/chunks/{chunk-FCSJ7GIZ.js → chunk-7V5UHLNY.js} +4 -4
- package/dist/cli/chunks/{chunk-5QJDH4Z5.js → chunk-7Z46RDDV.js} +2 -2
- package/dist/cli/chunks/{chunk-5RQT7EJP.js → chunk-A5RMQG4N.js} +3 -3
- package/dist/cli/chunks/{chunk-3BO7EKGO.js → chunk-AH7FXNFE.js} +3 -3
- package/dist/cli/chunks/chunk-AIUSZC6K.js +3 -0
- package/dist/cli/chunks/{chunk-MJBXQXSX.js → chunk-AOI67HA3.js} +1 -1
- package/dist/cli/chunks/{chunk-6H5MRVJS.js → chunk-AV7KYE5P.js} +7 -7
- package/dist/cli/chunks/{chunk-OGT45MZN.js → chunk-AWFIEGR3.js} +2 -2
- package/dist/cli/chunks/{chunk-J5RJYFRM.js → chunk-BQCSCAUC.js} +2 -2
- package/dist/cli/chunks/{chunk-OUJJ34JH.js → chunk-C2M74HCN.js} +1 -1
- package/dist/cli/chunks/{chunk-G2HA2O3R.js → chunk-CIRPP7RQ.js} +2 -2
- package/dist/cli/chunks/{chunk-LXHA55EB.js → chunk-CMACGG4Z.js} +1 -1
- package/dist/cli/chunks/{chunk-LRISVDVO.js → chunk-CTDLI2ON.js} +1 -1
- package/dist/cli/chunks/{chunk-DXV6NRG3.js → chunk-CV2SBMBW.js} +2 -2
- package/dist/cli/chunks/{chunk-WLLE54TA.js → chunk-DMQPO43S.js} +1 -1
- package/dist/cli/chunks/{chunk-I4E6CLC4.js → chunk-DRWGK3YO.js} +2 -2
- package/dist/cli/chunks/{chunk-Z2SCTEZD.js → chunk-DZZEHPSJ.js} +2 -2
- package/dist/cli/chunks/{chunk-DY7IRNE2.js → chunk-EA7ZSN3V.js} +1 -1
- package/dist/cli/chunks/{chunk-M4HDBRVJ.js → chunk-EQBEGDTG.js} +1 -1
- package/dist/cli/chunks/{chunk-HZPXOAFW.js → chunk-ETN5563K.js} +2 -2
- package/dist/cli/chunks/{chunk-OWMGD7FO.js → chunk-EVCOCGVJ.js} +3 -3
- package/dist/cli/chunks/{chunk-27ACATRH.js → chunk-FO43SQXP.js} +2 -2
- package/dist/cli/chunks/{chunk-DQJJS4AX.js → chunk-FO73PZVU.js} +2 -2
- package/dist/cli/chunks/{chunk-FEBXP74Y.js → chunk-FPAW77XV.js} +1 -1
- package/dist/cli/chunks/{chunk-KYLJERZ3.js → chunk-FY3CUPNN.js} +20 -17
- package/dist/cli/chunks/{chunk-LQ3TA22E.js → chunk-G5U6Q42D.js} +2 -2
- package/dist/cli/chunks/{chunk-JCKX2LEJ.js → chunk-HA63NBFK.js} +49 -49
- package/dist/cli/chunks/{chunk-NT4PI5HI.js → chunk-HHCYSAH3.js} +2 -2
- package/dist/cli/chunks/{chunk-GPKZ4MMH.js → chunk-HJME6G5M.js} +1 -1
- package/dist/cli/chunks/{chunk-TR7BZLB6.js → chunk-HJORBNXW.js} +1 -1
- package/dist/cli/chunks/{chunk-BXCS55GB.js → chunk-HO37VP4O.js} +1 -1
- package/dist/cli/chunks/{chunk-FX4SYT6Y.js → chunk-I677W5BT.js} +3 -3
- package/dist/cli/chunks/chunk-IAZEDWRX.js +2 -0
- package/dist/cli/chunks/{chunk-5UOV7T36.js → chunk-IICTTDAA.js} +2 -2
- package/dist/cli/chunks/{chunk-BQT4J3BD.js → chunk-JF53LRBL.js} +2 -2
- package/dist/cli/chunks/{chunk-S4CNA6Z5.js → chunk-KB5L5TTF.js} +3 -3
- package/dist/cli/chunks/{chunk-UE3XXKLN.js → chunk-L7VIX22Y.js} +2 -2
- package/dist/cli/chunks/{chunk-C5QESAYA.js → chunk-LQTWPSYL.js} +1 -1
- package/dist/cli/chunks/{chunk-2GL4GH52.js → chunk-LZCBSFAU.js} +4 -4
- package/dist/cli/chunks/{chunk-LDMG4372.js → chunk-MCOFJHSJ.js} +2 -2
- package/dist/cli/chunks/{chunk-ZCNVFULO.js → chunk-MCZHKXB4.js} +2 -2
- package/dist/cli/chunks/{chunk-VTIXFHZR.js → chunk-MEY43PIQ.js} +2 -2
- package/dist/cli/chunks/{chunk-PNDO4W4L.js → chunk-MMIQ5DMA.js} +2 -2
- package/dist/cli/chunks/{chunk-NWHSEXHA.js → chunk-MNUTRAUV.js} +1 -1
- package/dist/cli/chunks/{chunk-XFUU2RCA.js → chunk-MNV3E5KY.js} +2 -2
- package/dist/cli/chunks/{chunk-WVCIZIKH.js → chunk-MYWQTCS4.js} +1 -1
- package/dist/cli/chunks/{chunk-T7DLX3LS.js → chunk-NZO4WUSO.js} +3 -3
- package/dist/cli/chunks/{chunk-RF6QKV7M.js → chunk-OIEQF7PG.js} +2 -2
- package/dist/cli/chunks/{chunk-NLCUQMUR.js → chunk-OIRZJCZY.js} +2 -2
- package/dist/cli/chunks/{chunk-KOSKGZK4.js → chunk-ON4D4TJ4.js} +2 -2
- package/dist/cli/chunks/chunk-OPFN5LFT.js +95 -0
- package/dist/cli/chunks/{chunk-55JPAF56.js → chunk-ORF2UKQH.js} +1 -1
- package/dist/cli/chunks/{chunk-M73IL7FA.js → chunk-OWQ6HEYI.js} +2 -2
- package/dist/cli/chunks/{chunk-O3NAUNFC.js → chunk-OXCEUR5F.js} +2 -2
- package/dist/cli/chunks/{chunk-BTIVIWIG.js → chunk-PEK6NGVJ.js} +1 -1
- package/dist/cli/chunks/{chunk-ALCQRJDY.js → chunk-PIZYRPMT.js} +2 -2
- package/dist/cli/chunks/{chunk-L3IFZ4IX.js → chunk-PXTDEO65.js} +2 -2
- package/dist/cli/chunks/{chunk-3U77XX6J.js → chunk-PYIHZXCI.js} +12 -12
- package/dist/cli/chunks/{chunk-FQ5FT7IE.js → chunk-QBRHKTFT.js} +1 -1
- package/dist/cli/chunks/{chunk-I4T4JPR2.js → chunk-QEPFXY6G.js} +1 -1
- package/dist/cli/chunks/{chunk-X4U5NYB6.js → chunk-QJ2EHLJ2.js} +1 -1
- package/dist/cli/chunks/{chunk-JKVNZASH.js → chunk-QQNCSEZG.js} +2 -2
- package/dist/cli/chunks/{chunk-URVDWF2Y.js → chunk-QSE67XJO.js} +2 -2
- package/dist/cli/chunks/{chunk-RARSTEUO.js → chunk-R2O6OKT2.js} +1 -1
- package/dist/cli/chunks/{chunk-RGONSQ44.js → chunk-RLXTBL3H.js} +210 -210
- package/dist/cli/chunks/{chunk-RH3PHCJT.js → chunk-RNREAOY4.js} +2 -2
- package/dist/cli/chunks/{chunk-2POXDKUB.js → chunk-S3OZ7XSY.js} +1 -1
- package/dist/cli/chunks/{provider-manager-HV55NIIO.js → chunk-S3ZO7JXS.js} +13 -13
- package/dist/cli/chunks/{chunk-QWBO76AU.js → chunk-SJH3HYNC.js} +2 -2
- package/dist/cli/chunks/{chunk-WC6KZDPM.js → chunk-STEGWLH5.js} +2 -2
- package/dist/cli/chunks/{chunk-KCHFF4IE.js → chunk-SVYTN2GT.js} +2 -2
- package/dist/cli/chunks/{chunk-OKGK7DBT.js → chunk-SW4OKUTC.js} +2 -2
- package/dist/cli/chunks/{chunk-3OSCWD7Z.js → chunk-THRTUW4Z.js} +1 -1
- package/dist/cli/chunks/{chunk-U56TIYGP.js → chunk-TJKDATEU.js} +2 -2
- package/dist/cli/chunks/{chunk-4NQ6KANC.js → chunk-U3EUH6LX.js} +2 -2
- package/dist/cli/chunks/{chunk-7Y54QZKF.js → chunk-UUFOHMUG.js} +2 -2
- package/dist/cli/chunks/{chunk-W6U7SIIK.js → chunk-UVU7XLJY.js} +3 -3
- package/dist/cli/chunks/chunk-UWXH2UQK.js +2 -0
- package/dist/cli/chunks/{chunk-YYDHTBHE.js → chunk-UYYBPWU3.js} +1 -1
- package/dist/cli/chunks/{chunk-LYVFC7C7.js → chunk-VSUTI4G6.js} +2 -2
- package/dist/cli/chunks/{chunk-SGONA5GS.js → chunk-WDMPJ2M2.js} +2 -2
- package/dist/cli/chunks/{chunk-66GIKUI2.js → chunk-WNR2KAUH.js} +2 -2
- package/dist/cli/chunks/{chunk-M3M7HXDH.js → chunk-WSVUSIAZ.js} +2 -2
- package/dist/cli/chunks/{chunk-SCYF5CQA.js → chunk-WZJUMJ2S.js} +1 -1
- package/dist/cli/chunks/{chunk-WG6I7YF3.js → chunk-X2VAOIUY.js} +1 -1
- package/dist/cli/chunks/{chunk-7ZIRDBXH.js → chunk-XDSA7YUQ.js} +1 -1
- package/dist/cli/chunks/{chunk-HIWBW4IQ.js → chunk-XDU624HU.js} +1 -1
- package/dist/cli/chunks/{chunk-JUICZG3T.js → chunk-XGBAHAGC.js} +2 -2
- package/dist/cli/chunks/{chunk-DQLEZBWV.js → chunk-XMJTTF5N.js} +2 -2
- package/dist/cli/chunks/{chunk-KNL3QWVA.js → chunk-XPCNUX2U.js} +2 -2
- package/dist/cli/chunks/{chunk-VTO5O7DA.js → chunk-XRJECWZE.js} +1 -1
- package/dist/cli/chunks/{chunk-HD5NQDOL.js → chunk-XTCUN36Z.js} +2 -2
- package/dist/cli/chunks/{chunk-KDFW7MVM.js → chunk-Y63MBMOV.js} +2 -2
- package/dist/cli/chunks/{chunk-L4N6PTIC.js → chunk-YACT5WFC.js} +2 -2
- package/dist/cli/chunks/{chunk-QU54GUEA.js → chunk-YI6GNRQM.js} +2 -2
- package/dist/cli/chunks/chunk-YNNOY3XN.js +62 -0
- package/dist/cli/chunks/{chunk-GXCD7GNH.js → chunk-YWZHMXTO.js} +2 -2
- package/dist/cli/chunks/{chunk-XFMSHTXG.js → chunk-ZDHMZPSL.js} +1 -1
- package/dist/cli/chunks/{chunk-F363JJUI.js → chunk-ZGNZJJFF.js} +1 -1
- package/dist/cli/chunks/{chunk-UCXQQCIP.js → chunk-ZK2BH23O.js} +2 -2
- package/dist/cli/chunks/{chunk-IQNR662U.js → chunk-ZQUXNG5X.js} +2 -2
- package/dist/cli/chunks/{chunk-IBXNBLGM.js → chunk-ZXTO4C7R.js} +2 -2
- package/dist/cli/chunks/{ci-7TR4NQ5I.js → ci-PYCRCL7G.js} +2 -2
- package/dist/cli/chunks/{ci-output-SLTICF3O.js → ci-output-EKQQFE2D.js} +2 -2
- package/dist/cli/chunks/{circuit-breaker-7GVVTMBY.js → circuit-breaker-RH3Q2MJO.js} +2 -2
- package/dist/cli/chunks/{claude-flow-setup-TYCWYEMM.js → claude-flow-setup-DUDXB4VV.js} +2 -2
- package/dist/cli/chunks/client-RDPWGOSA.js +2 -0
- package/dist/cli/chunks/{cline-installer-ESIAJOLK.js → cline-installer-3Q4WIWUG.js} +2 -2
- package/dist/cli/chunks/{code-I42JGOVI.js → code-E4Q6DGOO.js} +2 -2
- package/dist/cli/chunks/{code-index-extractor-2CCXPCQW.js → code-index-extractor-2PCISUOW.js} +2 -2
- package/dist/cli/chunks/{codex-installer-HEZRDNUT.js → codex-installer-YNNNOLJ6.js} +2 -2
- package/dist/cli/chunks/{completions-44HLIZGI.js → completions-2F7TUFBD.js} +2 -2
- package/dist/cli/chunks/{complexity-analyzer-SOCSFDVO.js → complexity-analyzer-2B6MHO7W.js} +2 -2
- package/dist/cli/chunks/{continuedev-installer-Q7O4HLIM.js → continuedev-installer-ENOKRU5M.js} +2 -2
- package/dist/cli/chunks/{copilot-installer-GIWCVLCS.js → copilot-installer-6YD2KM5F.js} +2 -2
- package/dist/cli/chunks/{cost-tracker-G7BONKEV.js → cost-tracker-FCH4QOEA.js} +2 -2
- package/dist/cli/chunks/{coverage-5TWVP7KY.js → coverage-JTOXZE3T.js} +3 -3
- package/dist/cli/chunks/cross-domain-router-4K5ZVZEZ.js +2 -0
- package/dist/cli/chunks/{cursor-installer-43EQZSB5.js → cursor-installer-QZFBUGLQ.js} +2 -2
- package/dist/cli/chunks/{daemon-ZXHFRDKG.js → daemon-K4QFB5FQ.js} +3 -3
- package/dist/cli/chunks/{daemon-QQZE4BU2.js → daemon-M422U3ZA.js} +4 -4
- package/dist/cli/chunks/{dag-attention-scheduler-GOZAVAZQ.js → dag-attention-scheduler-BXAAW33V.js} +2 -2
- package/dist/cli/chunks/{detect-X777GVJ4.js → detect-UGSWIOAD.js} +2 -2
- package/dist/cli/chunks/{dist-node-EZZK46TB.js → dist-node-FN3HX3OK.js} +2 -2
- package/dist/cli/chunks/{domain-handler-ZT32DKYY.js → domain-handler-7PP7VYA7.js} +2 -2
- package/dist/cli/chunks/{domain-transfer-LHQVSLJW.js → domain-transfer-XZM44W7I.js} +2 -2
- package/dist/cli/chunks/dream-RPNWM7VS.js +2 -0
- package/dist/cli/chunks/{embed-and-insert-pattern-XFYPPWG7.js → embed-and-insert-pattern-JZVERJ5L.js} +2 -2
- package/dist/cli/chunks/{eval-V4NYJZUZ.js → eval-466NFF2D.js} +2 -2
- package/dist/cli/chunks/{experience-capture-middleware-HXX2W4GL.js → experience-capture-middleware-I7IQCC7V.js} +3 -3
- package/dist/cli/chunks/{fast-paths-RBPWQSFJ.js → fast-paths-34OICNZA.js} +2 -2
- package/dist/cli/chunks/{feature-flags-NX5EXRO3.js → feature-flags-6UBIVTAD.js} +2 -2
- package/dist/cli/chunks/{feature-flags-INJJZBMN.js → feature-flags-X5WBBWSO.js} +2 -2
- package/dist/cli/chunks/{file-discovery-SNFSG6NK.js → file-discovery-NLMDBWXX.js} +2 -2
- package/dist/cli/chunks/{fleet-6SDN4UWE.js → fleet-W7CYCHDI.js} +3 -3
- package/dist/cli/chunks/{gnn-wrapper-2JDRTDDK.js → gnn-wrapper-K4VTAG5X.js} +2 -2
- package/dist/cli/chunks/{heartbeat-handler-QLK6E7KA.js → heartbeat-handler-ZGKF2Z6T.js} +4 -4
- package/dist/cli/chunks/heartbeat-scheduler-JBCXMMZO.js +2 -0
- package/dist/cli/chunks/hnsw-adapter-3SC2HZIG.js +2 -0
- package/dist/cli/chunks/hnsw-index-FQORAR6K.js +2 -0
- package/dist/cli/chunks/{hnsw-legacy-bridge-Q2ZEZQKB.js → hnsw-legacy-bridge-ELDRLKK5.js} +2 -2
- package/dist/cli/chunks/{better-sqlite3-Y6GX6CGB.js → hnswlib-node-ZGSUMHDC.js} +2 -2
- package/dist/cli/chunks/{hooks-D4YENHO2.js → hooks-T4CBINAV.js} +13 -13
- package/dist/cli/chunks/hybrid-router-6CBFDXPR.js +2 -0
- package/dist/cli/chunks/{hypergraph-engine-G72U446M.js → hypergraph-engine-UWFW3XP5.js} +2 -2
- package/dist/cli/chunks/{hypergraph-handler-TRZ5FDRH.js → hypergraph-handler-PK2BI46K.js} +3 -3
- package/dist/cli/chunks/impact-analyzer-SOEFVZWG.js +2 -0
- package/dist/cli/chunks/{init-handler-3ZD4GCT4.js → init-handler-HNG6KJOU.js} +6 -6
- package/dist/cli/chunks/init-wizard-3E4IU5M4.js +2 -0
- package/dist/cli/chunks/kernel-GFZP4G5J.js +2 -0
- package/dist/cli/chunks/{kilocode-installer-AXSIW3XW.js → kilocode-installer-25V7FEJ4.js} +2 -2
- package/dist/cli/chunks/{kiro-installer-JQGIFWBK.js → kiro-installer-7RMTTCQB.js} +2 -2
- package/dist/cli/chunks/knowledge-graph-BKRKBU26.js +2 -0
- package/dist/cli/chunks/{learning-SPO7TGWX.js → learning-XQC2MG2R.js} +3 -3
- package/dist/cli/chunks/llm-router-6KTTONH4.js +36 -0
- package/dist/cli/chunks/llm-router-service-KE4IGZPP.js +2 -0
- package/dist/cli/chunks/{load-XIDDK64U.js → load-BV64P3AL.js} +2 -2
- package/dist/cli/chunks/load-test-VSYJV2AO.js +2 -0
- package/dist/cli/chunks/{mcp-3JXRGXO4.js → mcp-U5ZN77TA.js} +2 -2
- package/dist/cli/chunks/{memory-A66KRS2P.js → memory-WB5BNBK7.js} +5 -5
- package/dist/cli/chunks/memory-backend-B72RGHRF.js +2 -0
- package/dist/cli/chunks/memory-handlers-NWCH7AUO.js +2 -0
- package/dist/cli/chunks/{multi-model-executor-XCDGUVCE.js → multi-model-executor-3X3W3UTY.js} +2 -2
- package/dist/cli/chunks/{opencode-installer-GELXWLF2.js → opencode-installer-TTTMG7ZZ.js} +2 -2
- package/dist/cli/chunks/{orchestrator-CCS3K6NH.js → orchestrator-BLCGSHMZ.js} +18 -18
- package/dist/cli/chunks/{pipeline-Z5C72H5S.js → pipeline-DZPGMRG7.js} +2 -2
- package/dist/cli/chunks/{platform-4AK7XJ3Y.js → platform-EVMZAUNV.js} +2 -2
- package/dist/cli/chunks/{plugin-7RYBIZI7.js → plugin-OR55K4HT.js} +2 -2
- package/dist/cli/chunks/{prime-radiant-advanced-wasm-E5PARKRX.js → prime-radiant-advanced-wasm-4ODV27HD.js} +2 -2
- package/dist/cli/chunks/protocol-executor-V3F37FPO.js +2 -0
- package/dist/cli/chunks/{protocol-handler-R6QJQFNL.js → protocol-handler-ZOTI5PID.js} +2 -2
- package/dist/cli/chunks/{prove-7ESQ2YAL.js → prove-DIMBYJ7V.js} +2 -2
- package/dist/cli/chunks/provider-manager-2PN72TT6.js +2 -0
- package/dist/cli/chunks/qe-reasoning-bank-P665QNIR.js +2 -0
- package/dist/cli/chunks/{quality-4UE345QA.js → quality-7MX4VL6M.js} +2 -2
- package/dist/cli/chunks/queen-coordinator-XD4F7BGB.js +2 -0
- package/dist/cli/chunks/{real-embeddings-TYIVN3N5.js → real-embeddings-YPUHWRN2.js} +2 -2
- package/dist/cli/chunks/{roocode-installer-2KOANC47.js → roocode-installer-WG5AU4QM.js} +2 -2
- package/dist/cli/chunks/router-4SSNWDJC.js +2 -0
- package/dist/cli/chunks/routing-feedback-O2JSIBW6.js +2 -0
- package/dist/cli/chunks/{routing-handler-JFEYTN7T.js → routing-handler-LZB4MN2K.js} +2 -2
- package/dist/cli/chunks/{ruvector-commands-KSLSZRJX.js → ruvector-commands-YE4ADBMC.js} +2 -2
- package/dist/cli/chunks/{rvf-dual-writer-EPBL226J.js → rvf-dual-writer-QS5ATW4C.js} +2 -2
- package/dist/cli/chunks/{rvf-migration-adapter-25KSI6SF.js → rvf-migration-adapter-YIGKSBD3.js} +2 -2
- package/dist/cli/chunks/{rvf-migration-coordinator-2XBYHPZP.js → rvf-migration-coordinator-2NDCWP7F.js} +2 -2
- package/dist/cli/chunks/rvf-native-adapter-WIUHYXRB.js +2 -0
- package/dist/cli/chunks/safe-db-WL5Y7ZNS.js +2 -0
- package/dist/cli/chunks/schedule-U7QDGU5A.js +2 -0
- package/dist/cli/chunks/scheduler-LXKGQYXA.js +2 -0
- package/dist/cli/chunks/{security-4XWYKI4O.js → security-HT4SUT24.js} +3 -3
- package/dist/cli/chunks/{shared-rvf-adapter-WRZ3HGDQ.js → shared-rvf-adapter-4IZOJL33.js} +2 -2
- package/dist/cli/chunks/{shared-rvf-dual-writer-DX2N5STR.js → shared-rvf-dual-writer-ZKFO7CBY.js} +2 -2
- package/dist/cli/chunks/sqlite-persistence-4KFO3SEB.js +2 -0
- package/dist/cli/chunks/{status-handler-V75OSXMQ.js → status-handler-AMEMKBI4.js} +2 -2
- package/dist/cli/chunks/{structural-health-TLX3JHZ6.js → structural-health-RBADRLC3.js} +2 -2
- package/dist/cli/chunks/{sync-KGBEXUF7.js → sync-ARDDLQBS.js} +2 -2
- package/dist/cli/chunks/{sync-DXZFMVZQ.js → sync-PCB23M4K.js} +2 -2
- package/dist/cli/chunks/{task-handler-T3OJ6R7H.js → task-handler-J26FSCH5.js} +2 -2
- package/dist/cli/chunks/{task-handlers-NJYR54AS.js → task-handlers-AQRLR6BL.js} +3 -3
- package/dist/cli/chunks/{test-KMVDNNQA.js → test-YXWSIOSB.js} +4 -4
- package/dist/cli/chunks/{test-scheduling-R5EQ2XGV.js → test-scheduling-XY532GI4.js} +3 -3
- package/dist/cli/chunks/{token-bootstrap-PFKVV3RO.js → token-bootstrap-KL2QIQ36.js} +2 -2
- package/dist/cli/chunks/{token-usage-ZLOGA6LR.js → token-usage-2MJVE4DT.js} +2 -2
- package/dist/cli/chunks/{transformers-TNPSPQI3.js → transformers-QSNTOD2Z.js} +2 -2
- package/dist/cli/chunks/{tree-sitter-wasm-parser-A2EEB5BF.js → tree-sitter-wasm-parser-QJOKHOIW.js} +2 -2
- package/dist/cli/chunks/{types-DIXPI4NR.js → types-RNKRSYMO.js} +2 -2
- package/dist/cli/chunks/unified-memory-7AS4LIEF.js +2 -0
- package/dist/cli/chunks/unified-memory-hnsw-GREESNJX.js +2 -0
- package/dist/cli/chunks/unified-persistence-BPJOMZOA.js +2 -0
- package/dist/cli/chunks/{upgrade-LX5KP6VO.js → upgrade-EKJHIFWP.js} +2 -2
- package/dist/cli/chunks/{validate-3L6F7M36.js → validate-KS4T7LWC.js} +2 -2
- package/dist/cli/chunks/{validate-swarm-FD42ZKAQ.js → validate-swarm-SKKWRP2H.js} +2 -2
- package/dist/cli/chunks/{vibium-GSBSJR53.js → vibium-FLUQO4IF.js} +2 -2
- package/dist/cli/chunks/visual-security-BW662FHQ.js +2 -0
- package/dist/cli/chunks/{web-tree-sitter-TXHMO4BW.js → web-tree-sitter-UMC63DWD.js} +2 -2
- package/dist/cli/chunks/{windsurf-installer-3EUZ6RD3.js → windsurf-installer-V3FQGJIQ.js} +2 -2
- package/dist/cli/chunks/{witness-chain-ONAUEJ4M.js → witness-chain-GE74TLSO.js} +2 -2
- package/dist/cli/chunks/witness-chain-OXVDLNVT.js +2 -0
- package/dist/cli/chunks/{workflow-E7A6BV4C.js → workflow-4YZ2RPWA.js} +4 -4
- package/dist/cli/chunks/workflow-orchestrator-KKNR46XV.js +2 -0
- package/dist/cli/chunks/{wrappers-AHHAQJM3.js → wrappers-37NLMKPE.js} +2 -2
- package/dist/cli/commands/hooks-handlers/command-hooks.js +1 -1
- package/dist/cli/commands/hooks-handlers/routing-hooks.js +1 -1
- package/dist/cli/commands/hooks-handlers/task-hooks.js +1 -1
- 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/init/init-wizard-hooks.js +271 -271
- package/dist/init/phases/07-hooks.d.ts +7 -0
- package/dist/init/phases/07-hooks.js +132 -96
- 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/learning/agent-routing.d.ts +19 -0
- package/dist/learning/agent-routing.js +27 -1
- package/dist/learning/dream/dream-scheduler.d.ts +11 -36
- package/dist/learning/dream/dream-scheduler.js +44 -0
- package/dist/learning/experience-consolidation.d.ts +16 -0
- package/dist/learning/experience-consolidation.js +55 -11
- package/dist/learning/pattern-lifecycle.d.ts +21 -0
- package/dist/learning/pattern-lifecycle.js +70 -6
- package/dist/mcp/bundle.js +426 -401
- package/dist/mcp/protocol-server.js +13 -14
- 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/mcp/transport/stdio.d.ts +20 -0
- package/dist/mcp/transport/stdio.js +35 -2
- 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/dist/shared/utils/rabitq.d.ts +133 -0
- package/dist/shared/utils/rabitq.js +201 -0
- package/package.json +8 -2
- 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-QL3U5VSM.js +0 -62
- package/dist/cli/chunks/chunk-VMJXNTJT.js +0 -95
- 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
|
@@ -172,6 +172,9 @@ export class HooksPhase extends BasePhase {
|
|
|
172
172
|
this.installBrainCheckpoint(projectRoot, context);
|
|
173
173
|
// Install statusline-v3 helper into .claude/helpers/
|
|
174
174
|
this.installStatusline(projectRoot, context);
|
|
175
|
+
// Install the resilient hook shim into .claude/hooks/ — the generated
|
|
176
|
+
// settings.json hooks invoke it (`node .../aqe-hook.cjs <cmd>`).
|
|
177
|
+
this.installHookShim(projectRoot, context);
|
|
175
178
|
// Install cross-phase memory config
|
|
176
179
|
const crossPhasePath = join(hooksDir, 'cross-phase-memory.yaml');
|
|
177
180
|
if (!existsSync(crossPhasePath)) {
|
|
@@ -290,40 +293,73 @@ export class HooksPhase extends BasePhase {
|
|
|
290
293
|
context.services.log(' Installed statusline-v3.cjs (generated)');
|
|
291
294
|
}
|
|
292
295
|
}
|
|
296
|
+
/**
|
|
297
|
+
* Install the resilient hook shim (aqe-hook.cjs) into .claude/hooks/.
|
|
298
|
+
* The generated settings.json hooks run `node .../aqe-hook.cjs <cmd>` — the
|
|
299
|
+
* shim resolves a project-local AQE bundle (or falls back to npx), strips
|
|
300
|
+
* init noise from stdout, swallows stderr, and always exits 0.
|
|
301
|
+
*/
|
|
302
|
+
installHookShim(projectRoot, context) {
|
|
303
|
+
const destDir = join(projectRoot, '.claude', 'hooks');
|
|
304
|
+
if (!existsSync(destDir)) {
|
|
305
|
+
mkdirSync(destDir, { recursive: true });
|
|
306
|
+
}
|
|
307
|
+
const destPath = join(destDir, 'aqe-hook.cjs');
|
|
308
|
+
// Source candidates: the installed dependency, then this package's own copy
|
|
309
|
+
// (resolved relative to the compiled init module — works for npx too).
|
|
310
|
+
const sourcePaths = [
|
|
311
|
+
join(projectRoot, 'node_modules', 'agentic-qe', '.claude', 'hooks', 'aqe-hook.cjs'),
|
|
312
|
+
join(__dirname, '..', '..', '..', '.claude', 'hooks', 'aqe-hook.cjs'),
|
|
313
|
+
];
|
|
314
|
+
for (const src of sourcePaths) {
|
|
315
|
+
if (existsSync(src) && src !== destPath) {
|
|
316
|
+
const { copyFileSync } = require('fs');
|
|
317
|
+
copyFileSync(src, destPath);
|
|
318
|
+
context.services.log(' Installed aqe-hook.cjs (copied)');
|
|
319
|
+
return;
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
if (existsSync(destPath)) {
|
|
323
|
+
// Already present (e.g. dogfooding this repo) — leave it.
|
|
324
|
+
return;
|
|
325
|
+
}
|
|
326
|
+
// Should not happen for a real install (the file ships in the package).
|
|
327
|
+
context.services.log(' ⚠ aqe-hook.cjs source not found — hooks will fall back to `npx agentic-qe`');
|
|
328
|
+
}
|
|
293
329
|
/**
|
|
294
330
|
* Generate a minimal statusline-v3.cjs script as a fallback.
|
|
295
331
|
* Used when the full asset isn't available for copying.
|
|
296
332
|
*/
|
|
297
333
|
generateMinimalStatuslineScript() {
|
|
298
|
-
return `#!/usr/bin/env node
|
|
299
|
-
/**
|
|
300
|
-
* Agentic QE v3 Statusline (minimal fallback, generated by aqe init)
|
|
301
|
-
* For the full statusline, reinstall: npx agentic-qe init --auto
|
|
302
|
-
*/
|
|
303
|
-
const fs = require('fs');
|
|
304
|
-
const path = require('path');
|
|
305
|
-
const { execFileSync } = require('child_process');
|
|
306
|
-
|
|
307
|
-
function q(bin, args, d) { try { return execFileSync(bin, args, { encoding: 'utf-8', timeout: 3000, stdio: ['pipe', 'pipe', 'pipe'] }).trim(); } catch { return d || ''; } }
|
|
308
|
-
|
|
309
|
-
const dir = path.resolve(__dirname, '..', '..');
|
|
310
|
-
const dbPath = path.join(dir, '.agentic-qe', 'memory.db');
|
|
311
|
-
let patterns = 0;
|
|
312
|
-
try {
|
|
313
|
-
if (fs.existsSync(dbPath)) {
|
|
314
|
-
const Database = require('better-sqlite3');
|
|
315
|
-
const db = new Database(dbPath, { readonly: true, fileMustExist: true });
|
|
316
|
-
db.pragma('busy_timeout = 5000');
|
|
317
|
-
patterns = db.prepare("SELECT COUNT(*) AS c FROM qe_patterns WHERE usage_count > 0 OR quality_score > 0 OR name NOT LIKE 'bench-%'").get()?.c || 0;
|
|
318
|
-
db.close();
|
|
319
|
-
}
|
|
320
|
-
} catch { /* ignore */ }
|
|
321
|
-
|
|
322
|
-
const branch = q('git', ['branch', '--show-current']);
|
|
323
|
-
const branchStr = branch ? \` \\x1b[34m⎇ \${branch}\\x1b[0m\` : '';
|
|
324
|
-
const patStr = patterns > 0 ? \` \\x1b[35m🎓 \${patterns} patterns\\x1b[0m\` : '';
|
|
325
|
-
|
|
326
|
-
console.log(\`\\x1b[1m\\x1b[35m▊ Agentic QE v3\\x1b[0m\${branchStr}\${patStr}\`);
|
|
334
|
+
return `#!/usr/bin/env node
|
|
335
|
+
/**
|
|
336
|
+
* Agentic QE v3 Statusline (minimal fallback, generated by aqe init)
|
|
337
|
+
* For the full statusline, reinstall: npx agentic-qe init --auto
|
|
338
|
+
*/
|
|
339
|
+
const fs = require('fs');
|
|
340
|
+
const path = require('path');
|
|
341
|
+
const { execFileSync } = require('child_process');
|
|
342
|
+
|
|
343
|
+
function q(bin, args, d) { try { return execFileSync(bin, args, { encoding: 'utf-8', timeout: 3000, stdio: ['pipe', 'pipe', 'pipe'] }).trim(); } catch { return d || ''; } }
|
|
344
|
+
|
|
345
|
+
const dir = path.resolve(__dirname, '..', '..');
|
|
346
|
+
const dbPath = path.join(dir, '.agentic-qe', 'memory.db');
|
|
347
|
+
let patterns = 0;
|
|
348
|
+
try {
|
|
349
|
+
if (fs.existsSync(dbPath)) {
|
|
350
|
+
const Database = require('better-sqlite3');
|
|
351
|
+
const db = new Database(dbPath, { readonly: true, fileMustExist: true });
|
|
352
|
+
db.pragma('busy_timeout = 5000');
|
|
353
|
+
patterns = db.prepare("SELECT COUNT(*) AS c FROM qe_patterns WHERE usage_count > 0 OR quality_score > 0 OR name NOT LIKE 'bench-%'").get()?.c || 0;
|
|
354
|
+
db.close();
|
|
355
|
+
}
|
|
356
|
+
} catch { /* ignore */ }
|
|
357
|
+
|
|
358
|
+
const branch = q('git', ['branch', '--show-current']);
|
|
359
|
+
const branchStr = branch ? \` \\x1b[34m⎇ \${branch}\\x1b[0m\` : '';
|
|
360
|
+
const patStr = patterns > 0 ? \` \\x1b[35m🎓 \${patterns} patterns\\x1b[0m\` : '';
|
|
361
|
+
|
|
362
|
+
console.log(\`\\x1b[1m\\x1b[35m▊ Agentic QE v3\\x1b[0m\${branchStr}\${patStr}\`);
|
|
327
363
|
`;
|
|
328
364
|
}
|
|
329
365
|
/**
|
|
@@ -331,62 +367,62 @@ console.log(\`\\x1b[1m\\x1b[35m▊ Agentic QE v3\\x1b[0m\${branchStr}\${patStr}\
|
|
|
331
367
|
* Used when the source file isn't available for copying.
|
|
332
368
|
*/
|
|
333
369
|
generateBrainCheckpointScript() {
|
|
334
|
-
return `#!/usr/bin/env node
|
|
335
|
-
/**
|
|
336
|
-
* Brain Checkpoint Helper (generated by aqe init)
|
|
337
|
-
*
|
|
338
|
-
* Usage:
|
|
339
|
-
* node brain-checkpoint.cjs export # Export brain to aqe.rvf (session-end)
|
|
340
|
-
* node brain-checkpoint.cjs verify # Verify aqe.rvf exists (session-start)
|
|
341
|
-
*/
|
|
342
|
-
const { execFileSync } = require('child_process');
|
|
343
|
-
const fs = require('fs');
|
|
344
|
-
const path = require('path');
|
|
345
|
-
|
|
346
|
-
const PROJECT_ROOT = path.resolve(__dirname, '..', '..');
|
|
347
|
-
const AQE_DIR = path.join(PROJECT_ROOT, '.agentic-qe');
|
|
348
|
-
const RVF_PATH = path.join(AQE_DIR, 'aqe.rvf');
|
|
349
|
-
const DB_PATH = path.join(AQE_DIR, 'memory.db');
|
|
350
|
-
const MAX_AGE_HOURS = 24;
|
|
351
|
-
|
|
352
|
-
function log(msg) { process.stderr.write('[brain-checkpoint] ' + msg + '\\n'); }
|
|
353
|
-
|
|
354
|
-
function exportBrain() {
|
|
355
|
-
if (!fs.existsSync(DB_PATH)) { log('No memory.db, skipping'); return { exported: false }; }
|
|
356
|
-
try {
|
|
357
|
-
if (fs.existsSync(RVF_PATH)) fs.unlinkSync(RVF_PATH);
|
|
358
|
-
const idmap = RVF_PATH + '.idmap.json';
|
|
359
|
-
if (fs.existsSync(idmap)) fs.unlinkSync(idmap);
|
|
360
|
-
const result = execFileSync(
|
|
361
|
-
'npx', ['agentic-qe', 'brain', 'export', '-o', RVF_PATH, '--format', 'rvf'],
|
|
362
|
-
{ timeout: 60000, encoding: 'utf-8' }
|
|
363
|
-
);
|
|
364
|
-
const m = result.match(/Patterns:\\s+(\\d+)/);
|
|
365
|
-
const p = m ? m[1] : '0';
|
|
366
|
-
log('Exported ' + p + ' patterns to aqe.rvf');
|
|
367
|
-
return { exported: true, patterns: parseInt(p) };
|
|
368
|
-
} catch (e) {
|
|
369
|
-
log('Export failed: ' + e.message);
|
|
370
|
-
return { exported: false, reason: e.message };
|
|
371
|
-
}
|
|
372
|
-
}
|
|
373
|
-
|
|
374
|
-
function verifyBrain() {
|
|
375
|
-
if (!fs.existsSync(RVF_PATH)) {
|
|
376
|
-
log('No aqe.rvf found');
|
|
377
|
-
return { valid: false, reason: 'missing' };
|
|
378
|
-
}
|
|
379
|
-
const stat = fs.statSync(RVF_PATH);
|
|
380
|
-
const ageH = (Date.now() - stat.mtimeMs) / 3600000;
|
|
381
|
-
if (stat.size < 1024) { log('aqe.rvf too small'); return { valid: false, reason: 'too-small' }; }
|
|
382
|
-
if (ageH > MAX_AGE_HOURS) { log('aqe.rvf is ' + ageH.toFixed(1) + 'h old'); return { valid: true, stale: true }; }
|
|
383
|
-
log('aqe.rvf OK (' + (stat.size/1048576).toFixed(1) + ' MB)');
|
|
384
|
-
return { valid: true, stale: false };
|
|
385
|
-
}
|
|
386
|
-
|
|
387
|
-
const cmd = process.argv[2] || 'verify';
|
|
388
|
-
const result = cmd === 'export' ? exportBrain() : verifyBrain();
|
|
389
|
-
if (process.argv.includes('--json')) process.stdout.write(JSON.stringify(result));
|
|
370
|
+
return `#!/usr/bin/env node
|
|
371
|
+
/**
|
|
372
|
+
* Brain Checkpoint Helper (generated by aqe init)
|
|
373
|
+
*
|
|
374
|
+
* Usage:
|
|
375
|
+
* node brain-checkpoint.cjs export # Export brain to aqe.rvf (session-end)
|
|
376
|
+
* node brain-checkpoint.cjs verify # Verify aqe.rvf exists (session-start)
|
|
377
|
+
*/
|
|
378
|
+
const { execFileSync } = require('child_process');
|
|
379
|
+
const fs = require('fs');
|
|
380
|
+
const path = require('path');
|
|
381
|
+
|
|
382
|
+
const PROJECT_ROOT = path.resolve(__dirname, '..', '..');
|
|
383
|
+
const AQE_DIR = path.join(PROJECT_ROOT, '.agentic-qe');
|
|
384
|
+
const RVF_PATH = path.join(AQE_DIR, 'aqe.rvf');
|
|
385
|
+
const DB_PATH = path.join(AQE_DIR, 'memory.db');
|
|
386
|
+
const MAX_AGE_HOURS = 24;
|
|
387
|
+
|
|
388
|
+
function log(msg) { process.stderr.write('[brain-checkpoint] ' + msg + '\\n'); }
|
|
389
|
+
|
|
390
|
+
function exportBrain() {
|
|
391
|
+
if (!fs.existsSync(DB_PATH)) { log('No memory.db, skipping'); return { exported: false }; }
|
|
392
|
+
try {
|
|
393
|
+
if (fs.existsSync(RVF_PATH)) fs.unlinkSync(RVF_PATH);
|
|
394
|
+
const idmap = RVF_PATH + '.idmap.json';
|
|
395
|
+
if (fs.existsSync(idmap)) fs.unlinkSync(idmap);
|
|
396
|
+
const result = execFileSync(
|
|
397
|
+
'npx', ['agentic-qe', 'brain', 'export', '-o', RVF_PATH, '--format', 'rvf'],
|
|
398
|
+
{ timeout: 60000, encoding: 'utf-8' }
|
|
399
|
+
);
|
|
400
|
+
const m = result.match(/Patterns:\\s+(\\d+)/);
|
|
401
|
+
const p = m ? m[1] : '0';
|
|
402
|
+
log('Exported ' + p + ' patterns to aqe.rvf');
|
|
403
|
+
return { exported: true, patterns: parseInt(p) };
|
|
404
|
+
} catch (e) {
|
|
405
|
+
log('Export failed: ' + e.message);
|
|
406
|
+
return { exported: false, reason: e.message };
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
function verifyBrain() {
|
|
411
|
+
if (!fs.existsSync(RVF_PATH)) {
|
|
412
|
+
log('No aqe.rvf found');
|
|
413
|
+
return { valid: false, reason: 'missing' };
|
|
414
|
+
}
|
|
415
|
+
const stat = fs.statSync(RVF_PATH);
|
|
416
|
+
const ageH = (Date.now() - stat.mtimeMs) / 3600000;
|
|
417
|
+
if (stat.size < 1024) { log('aqe.rvf too small'); return { valid: false, reason: 'too-small' }; }
|
|
418
|
+
if (ageH > MAX_AGE_HOURS) { log('aqe.rvf is ' + ageH.toFixed(1) + 'h old'); return { valid: true, stale: true }; }
|
|
419
|
+
log('aqe.rvf OK (' + (stat.size/1048576).toFixed(1) + ' MB)');
|
|
420
|
+
return { valid: true, stale: false };
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
const cmd = process.argv[2] || 'verify';
|
|
424
|
+
const result = cmd === 'export' ? exportBrain() : verifyBrain();
|
|
425
|
+
if (process.argv.includes('--json')) process.stdout.write(JSON.stringify(result));
|
|
390
426
|
`;
|
|
391
427
|
}
|
|
392
428
|
/**
|
|
@@ -410,7 +446,7 @@ if (process.argv.includes('--json')) process.stdout.write(JSON.stringify(result)
|
|
|
410
446
|
hooks: [
|
|
411
447
|
{
|
|
412
448
|
type: 'command',
|
|
413
|
-
command: '
|
|
449
|
+
command: 'node "${CLAUDE_PROJECT_DIR:-.}/.claude/hooks/aqe-hook.cjs" guard --file "$TOOL_INPUT_file_path" --json',
|
|
414
450
|
timeout: 3000,
|
|
415
451
|
continueOnError: true,
|
|
416
452
|
},
|
|
@@ -422,7 +458,7 @@ if (process.argv.includes('--json')) process.stdout.write(JSON.stringify(result)
|
|
|
422
458
|
hooks: [
|
|
423
459
|
{
|
|
424
460
|
type: 'command',
|
|
425
|
-
command: '
|
|
461
|
+
command: 'node "${CLAUDE_PROJECT_DIR:-.}/.claude/hooks/aqe-hook.cjs" pre-edit --file "$TOOL_INPUT_file_path" --json',
|
|
426
462
|
timeout: 5000,
|
|
427
463
|
continueOnError: true,
|
|
428
464
|
},
|
|
@@ -434,7 +470,7 @@ if (process.argv.includes('--json')) process.stdout.write(JSON.stringify(result)
|
|
|
434
470
|
hooks: [
|
|
435
471
|
{
|
|
436
472
|
type: 'command',
|
|
437
|
-
command: '
|
|
473
|
+
command: 'node "${CLAUDE_PROJECT_DIR:-.}/.claude/hooks/aqe-hook.cjs" pre-command --command "$TOOL_INPUT_command" --json',
|
|
438
474
|
timeout: 3000,
|
|
439
475
|
continueOnError: true,
|
|
440
476
|
},
|
|
@@ -446,7 +482,7 @@ if (process.argv.includes('--json')) process.stdout.write(JSON.stringify(result)
|
|
|
446
482
|
hooks: [
|
|
447
483
|
{
|
|
448
484
|
type: 'command',
|
|
449
|
-
command: '
|
|
485
|
+
command: 'node "${CLAUDE_PROJECT_DIR:-.}/.claude/hooks/aqe-hook.cjs" pre-task --description "$TOOL_INPUT_prompt" --json',
|
|
450
486
|
timeout: 5000,
|
|
451
487
|
continueOnError: true,
|
|
452
488
|
},
|
|
@@ -459,7 +495,7 @@ if (process.argv.includes('--json')) process.stdout.write(JSON.stringify(result)
|
|
|
459
495
|
hooks: [
|
|
460
496
|
{
|
|
461
497
|
type: 'command',
|
|
462
|
-
command: '
|
|
498
|
+
command: 'node "${CLAUDE_PROJECT_DIR:-.}/.claude/hooks/aqe-hook.cjs" post-edit --file "$TOOL_INPUT_file_path" --success --json',
|
|
463
499
|
timeout: 5000,
|
|
464
500
|
continueOnError: true,
|
|
465
501
|
},
|
|
@@ -470,7 +506,7 @@ if (process.argv.includes('--json')) process.stdout.write(JSON.stringify(result)
|
|
|
470
506
|
hooks: [
|
|
471
507
|
{
|
|
472
508
|
type: 'command',
|
|
473
|
-
command: '
|
|
509
|
+
command: 'node "${CLAUDE_PROJECT_DIR:-.}/.claude/hooks/aqe-hook.cjs" post-command --command "$TOOL_INPUT_command" --success true --json',
|
|
474
510
|
timeout: 5000,
|
|
475
511
|
continueOnError: true,
|
|
476
512
|
},
|
|
@@ -481,7 +517,7 @@ if (process.argv.includes('--json')) process.stdout.write(JSON.stringify(result)
|
|
|
481
517
|
hooks: [
|
|
482
518
|
{
|
|
483
519
|
type: 'command',
|
|
484
|
-
command: '
|
|
520
|
+
command: 'node "${CLAUDE_PROJECT_DIR:-.}/.claude/hooks/aqe-hook.cjs" post-task --task-id "$TOOL_RESULT_agent_id" --agent "$TOOL_INPUT_subagent_type" --success true --description "$TOOL_INPUT_prompt" --json',
|
|
485
521
|
timeout: 5000,
|
|
486
522
|
continueOnError: true,
|
|
487
523
|
},
|
|
@@ -496,7 +532,7 @@ if (process.argv.includes('--json')) process.stdout.write(JSON.stringify(result)
|
|
|
496
532
|
// (e.g. {"prompt":"..."}). $PROMPT is NOT exposed as an env
|
|
497
533
|
// var, so we let the CLI read stdin directly.
|
|
498
534
|
type: 'command',
|
|
499
|
-
command: '
|
|
535
|
+
command: 'node "${CLAUDE_PROJECT_DIR:-.}/.claude/hooks/aqe-hook.cjs" route --json',
|
|
500
536
|
timeout: 5000,
|
|
501
537
|
continueOnError: true,
|
|
502
538
|
},
|
|
@@ -508,7 +544,7 @@ if (process.argv.includes('--json')) process.stdout.write(JSON.stringify(result)
|
|
|
508
544
|
hooks: [
|
|
509
545
|
{
|
|
510
546
|
type: 'command',
|
|
511
|
-
command: '
|
|
547
|
+
command: 'node "${CLAUDE_PROJECT_DIR:-.}/.claude/hooks/aqe-hook.cjs" session-start --session-id "$SESSION_ID" --json',
|
|
512
548
|
timeout: 10000,
|
|
513
549
|
continueOnError: true,
|
|
514
550
|
},
|
|
@@ -530,7 +566,7 @@ if (process.argv.includes('--json')) process.stdout.write(JSON.stringify(result)
|
|
|
530
566
|
hooks: [
|
|
531
567
|
{
|
|
532
568
|
type: 'command',
|
|
533
|
-
command: '
|
|
569
|
+
command: 'node "${CLAUDE_PROJECT_DIR:-.}/.claude/hooks/aqe-hook.cjs" session-end --save-state --json',
|
|
534
570
|
timeout: 5000,
|
|
535
571
|
continueOnError: true,
|
|
536
572
|
},
|
|
@@ -544,7 +580,7 @@ if (process.argv.includes('--json')) process.stdout.write(JSON.stringify(result)
|
|
|
544
580
|
// — without this, `routing_outcomes` accumulates quality_score=-1
|
|
545
581
|
// rows forever in direct-work sessions (no Task/Agent spawned).
|
|
546
582
|
type: 'command',
|
|
547
|
-
command: '
|
|
583
|
+
command: 'node "${CLAUDE_PROJECT_DIR:-.}/.claude/hooks/aqe-hook.cjs" post-route --success true --json',
|
|
548
584
|
timeout: 5000,
|
|
549
585
|
continueOnError: true,
|
|
550
586
|
},
|
|
@@ -259,6 +259,17 @@ export interface QEKernel extends Initializable, Disposable {
|
|
|
259
259
|
readonly plugins: PluginLoader;
|
|
260
260
|
/** Get the memory backend */
|
|
261
261
|
readonly memory: MemoryBackend;
|
|
262
|
+
/**
|
|
263
|
+
* Get the LLM router (ADR-043). Returns undefined when no provider
|
|
264
|
+
* keys are present in env and the project has no router config — the
|
|
265
|
+
* kernel boots fine without a router; the LLM-enhancement branches
|
|
266
|
+
* in domain services simply stay dark.
|
|
267
|
+
*
|
|
268
|
+
* Type intentionally returned as `unknown` here to avoid a hard
|
|
269
|
+
* dependency from kernel/interfaces.ts on shared/llm/router/. Callers
|
|
270
|
+
* who need the typed HybridRouter import it directly.
|
|
271
|
+
*/
|
|
272
|
+
readonly llmRouter?: unknown;
|
|
262
273
|
/** Get a domain's API (synchronous, returns undefined if not loaded) */
|
|
263
274
|
getDomainAPI<T>(domain: DomainName): T | undefined;
|
|
264
275
|
/** Get a domain's API with lazy loading support */
|
|
@@ -324,6 +335,32 @@ export interface KernelConfig {
|
|
|
324
335
|
* DreamEngine init cost.
|
|
325
336
|
*/
|
|
326
337
|
enableDreamScheduler?: boolean;
|
|
338
|
+
/**
|
|
339
|
+
* LLM router configuration (ADR-043). Controls whether the kernel
|
|
340
|
+
* boots a HybridRouter and injects it into domain plugins so the
|
|
341
|
+
* isLLMAnalysisAvailable() branches in 14 services actually fire.
|
|
342
|
+
*
|
|
343
|
+
* - `enabled: 'auto'` (default): build a router iff at least one
|
|
344
|
+
* provider API key is present in env, OR the project's
|
|
345
|
+
* .agentic-qe/llm-config.json explicitly enables a provider.
|
|
346
|
+
* - `enabled: true`: always try to build a router; if no provider is
|
|
347
|
+
* available, log a warning and continue without one.
|
|
348
|
+
* - `enabled: false`: skip the router entirely. Use this to revert to
|
|
349
|
+
* the pre-wiring behavior (deterministic-only scanners).
|
|
350
|
+
*
|
|
351
|
+
* `configOverride` is merged on top of the disk + env config (highest
|
|
352
|
+
* precedence) — useful for tests.
|
|
353
|
+
*/
|
|
354
|
+
llmRouter?: {
|
|
355
|
+
enabled?: 'auto' | true | false;
|
|
356
|
+
configOverride?: Partial<import('../shared/llm/router/types').RouterConfig>;
|
|
357
|
+
/**
|
|
358
|
+
* Inject a pre-built ProviderManager (for tests). When supplied,
|
|
359
|
+
* config-store loading is skipped and the provided manager is used
|
|
360
|
+
* directly. Typed as unknown to avoid the dependency.
|
|
361
|
+
*/
|
|
362
|
+
providerManager?: unknown;
|
|
363
|
+
};
|
|
327
364
|
}
|
|
328
365
|
/**
|
|
329
366
|
* Event middleware interface for anti-drift and other event processing (ADR-060)
|
package/dist/kernel/kernel.d.ts
CHANGED
|
@@ -6,6 +6,7 @@ import { DomainName } from '../shared/types';
|
|
|
6
6
|
import { QEKernel, EventBus, AgentCoordinator, PluginLoader, MemoryBackend, KernelHealth, KernelConfig } from './interfaces';
|
|
7
7
|
import { ToolCallSignatureTracker } from './anti-drift-middleware.js';
|
|
8
8
|
import type { LoopDetectionResult } from './anti-drift-middleware.js';
|
|
9
|
+
import type { HybridRouter } from '../shared/llm/router/hybrid-router.js';
|
|
9
10
|
import '../domains/test-generation';
|
|
10
11
|
import '../domains/coverage-analysis';
|
|
11
12
|
import '../domains/security-compliance';
|
|
@@ -22,12 +23,50 @@ export declare class QEKernelImpl implements QEKernel {
|
|
|
22
23
|
private _loopTracker;
|
|
23
24
|
private _experienceBridge?;
|
|
24
25
|
private _dreamScheduler?;
|
|
26
|
+
private _llmRouter?;
|
|
27
|
+
private _llmRouterBuild?;
|
|
25
28
|
constructor(config?: Partial<KernelConfig>);
|
|
26
29
|
get eventBus(): EventBus;
|
|
27
30
|
get coordinator(): AgentCoordinator;
|
|
28
31
|
get plugins(): PluginLoader;
|
|
29
32
|
get memory(): MemoryBackend;
|
|
33
|
+
/**
|
|
34
|
+
* ADR-043: Get the LLM router built during initialize(). Returns
|
|
35
|
+
* undefined when llmRouter.enabled is false or no provider was
|
|
36
|
+
* available. Domain plugins receive this as their factory's 4th arg
|
|
37
|
+
* via DOMAIN_FACTORIES.
|
|
38
|
+
*/
|
|
39
|
+
get llmRouter(): HybridRouter | undefined;
|
|
30
40
|
initialize(): Promise<void>;
|
|
41
|
+
/**
|
|
42
|
+
* ADR-043: Build the kernel-singleton HybridRouter.
|
|
43
|
+
*
|
|
44
|
+
* Behavior is gated, in order:
|
|
45
|
+
* 1. AQE_LLM_ROUTER_DISABLED env var (kill-switch): if set to a truthy
|
|
46
|
+
* value, ALWAYS skip — even when config.llmRouter.enabled === true.
|
|
47
|
+
* This is the env-only opt-out for users who upgrade with a
|
|
48
|
+
* provider key already in env and don't want billing surprises.
|
|
49
|
+
* 2. config.llmRouter.enabled:
|
|
50
|
+
* 'auto' (default): build iff at least one provider key is in env,
|
|
51
|
+
* or the project's llm-config.json enables a provider
|
|
52
|
+
* true: attempt to build; emit error event if no provider
|
|
53
|
+
* false: skip entirely (sets _llmRouter to undefined)
|
|
54
|
+
*
|
|
55
|
+
* On any error we publish a structured kernel.llm-router.init-failed
|
|
56
|
+
* event so monitoring catches misconfiguration. We also keep the
|
|
57
|
+
* console.warn for direct visibility in dev. The kernel still boots —
|
|
58
|
+
* a kernel that boots without LLMs is strictly better than a kernel
|
|
59
|
+
* that won't boot — but the failure is now observable.
|
|
60
|
+
*/
|
|
61
|
+
private _initializeLLMRouter;
|
|
62
|
+
/**
|
|
63
|
+
* ADR-043: emit a structured event on the kernel event bus when the
|
|
64
|
+
* LLM router can't be built. Observability hook for monitoring and
|
|
65
|
+
* alerting — a silent warn is not enough for production systems where
|
|
66
|
+
* "tests run without LLM analysis" is a quality regression worth
|
|
67
|
+
* paging on.
|
|
68
|
+
*/
|
|
69
|
+
private _publishLLMRouterEvent;
|
|
31
70
|
dispose(): Promise<void>;
|
|
32
71
|
getDomainAPI<T>(domain: DomainName): T | undefined;
|
|
33
72
|
/**
|