agentic-qe 3.9.15 → 3.9.17
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 +37 -0
- package/assets/skills/skills-manifest.json +1 -1
- package/dist/cli/brain-commands.d.ts +14 -0
- package/dist/cli/brain-commands.js +24 -0
- package/dist/cli/bundle.js +7 -7
- package/dist/cli/chunks/adapter-2BIT6BGH.js +2 -0
- package/dist/cli/chunks/{agent-booster-wasm-NA2VN5U2.js → agent-booster-wasm-JN7W7O5X.js} +2 -2
- package/dist/cli/chunks/{agent-handler-NRIF5IOC.js → agent-handler-F6Q75SJQ.js} +2 -2
- package/dist/cli/chunks/{agent-memory-branch-NW3UB2UW.js → agent-memory-branch-3GGTDVR4.js} +2 -2
- package/dist/cli/chunks/aqe-learning-engine-B5G3RG4W.js +2 -0
- package/dist/cli/chunks/{audit-5CSEDVJR.js → audit-R7KN45HM.js} +2 -2
- package/dist/cli/chunks/base-A3ZRMSIZ.js +2 -0
- package/dist/cli/chunks/{better-sqlite3-FZ32SHZ6.js → better-sqlite3-2LTGEMYR.js} +2 -2
- package/dist/cli/chunks/brain-handler-PML5L6WQ.js +89 -0
- package/dist/cli/chunks/{branch-enumerator-IUHWHIMV.js → branch-enumerator-OKUPS2XC.js} +2 -2
- package/dist/cli/chunks/{browser-D4F3327X.js → browser-KOQOTSAT.js} +2 -2
- package/dist/cli/chunks/browser-workflow-C6Z53ZH6.js +2 -0
- package/dist/cli/chunks/chunk-2ARCG4XJ.js +2 -0
- package/dist/cli/chunks/{chunk-WI6UA5HV.js → chunk-2K7GRX5U.js} +2 -2
- package/dist/cli/chunks/{chunk-DATFN5DG.js → chunk-2LXXYKAP.js} +2 -2
- package/dist/cli/chunks/{chunk-O6J7MKRV.js → chunk-32FWC6G3.js} +2 -2
- package/dist/cli/chunks/{chunk-NL2PQLRD.js → chunk-3GYAIW2P.js} +2 -2
- package/dist/cli/chunks/{chunk-KJTXY3DW.js → chunk-3KIUCAVI.js} +1 -1
- package/dist/cli/chunks/{chunk-37ZSWRRP.js → chunk-3UGV2XWF.js} +2 -2
- package/dist/cli/chunks/{chunk-2CN2NPJQ.js → chunk-42HSEBOH.js} +2 -2
- package/dist/cli/chunks/{chunk-RODJK6G6.js → chunk-42TUEMH7.js} +1 -1
- package/dist/cli/chunks/{chunk-HPY7HGVQ.js → chunk-4TDIA2EN.js} +2 -2
- package/dist/cli/chunks/{chunk-N2RPLPVG.js → chunk-5J444NJR.js} +2 -2
- package/dist/cli/chunks/{chunk-B4BOOOYM.js → chunk-63ERVKIO.js} +1 -1
- package/dist/cli/chunks/{chunk-O6CHLZYT.js → chunk-63V33NAB.js} +2 -2
- package/dist/cli/chunks/{chunk-XALB3KRR.js → chunk-65Z6HMDA.js} +2 -2
- package/dist/cli/chunks/{chunk-62MVVEGH.js → chunk-6F6BNLVP.js} +1 -1
- package/dist/cli/chunks/{chunk-R4G64UH3.js → chunk-6HGRJPD6.js} +1 -1
- package/dist/cli/chunks/{chunk-GWUO3RY5.js → chunk-6MRUG5G2.js} +1 -1
- package/dist/cli/chunks/{chunk-3Y4YZDHJ.js → chunk-6PCGUJCG.js} +4 -4
- package/dist/cli/chunks/{chunk-BGUCXJEJ.js → chunk-6PRIY3HT.js} +2 -2
- package/dist/cli/chunks/{chunk-U4WDJPRL.js → chunk-6YCZDIGF.js} +2 -2
- package/dist/cli/chunks/{chunk-2XW36KDQ.js → chunk-6YFEWIL5.js} +2 -2
- package/dist/cli/chunks/{chunk-W4PUKTBF.js → chunk-7PWW2OXP.js} +1 -1
- package/dist/cli/chunks/{chunk-TZWCVGG2.js → chunk-7VGZDTY4.js} +1 -1
- package/dist/cli/chunks/{chunk-ORKGVVXK.js → chunk-A3WC5KTG.js} +1 -1
- package/dist/cli/chunks/{chunk-FSOY2XB4.js → chunk-A67FRRPJ.js} +3 -3
- package/dist/cli/chunks/{chunk-V775NJOM.js → chunk-AFLTMVMT.js} +1 -1
- package/dist/cli/chunks/{chunk-REUGPZIA.js → chunk-APWO3FI3.js} +1 -1
- package/dist/cli/chunks/{chunk-MS6T4VCU.js → chunk-ARN2KDLJ.js} +2 -2
- package/dist/cli/chunks/{chunk-OBZMQFWG.js → chunk-AZQ476BM.js} +2 -2
- package/dist/cli/chunks/{chunk-IPTGPCEL.js → chunk-AZWCJFT6.js} +2 -2
- package/dist/cli/chunks/{chunk-LLVS3UYZ.js → chunk-B36RPXAQ.js} +2 -2
- package/dist/cli/chunks/{chunk-YCYFUYCE.js → chunk-B3M3JEFD.js} +2 -2
- package/dist/cli/chunks/{chunk-TJDAXI6E.js → chunk-BCBC3DVN.js} +2 -2
- package/dist/cli/chunks/{chunk-Q3GDSFGA.js → chunk-BCIEQ4IP.js} +2 -2
- package/dist/cli/chunks/{chunk-OMTYOIOS.js → chunk-BGY4CHZA.js} +2 -2
- package/dist/cli/chunks/{chunk-7J5KWUC2.js → chunk-BUWZOMC7.js} +1 -1
- package/dist/cli/chunks/{chunk-V6QARSVQ.js → chunk-CPZUNBSQ.js} +2 -2
- package/dist/cli/chunks/{chunk-UZOFXYNC.js → chunk-CQSU7NTG.js} +2 -2
- package/dist/cli/chunks/{chunk-VBEVZUQW.js → chunk-CY73RJJJ.js} +1 -1
- package/dist/cli/chunks/{chunk-DYQ7HTEU.js → chunk-CZXV3JAF.js} +3 -3
- package/dist/cli/chunks/{chunk-6F3H2C5H.js → chunk-DDJUVCKF.js} +3 -3
- package/dist/cli/chunks/{chunk-JJDHD7SC.js → chunk-DJXYFFGA.js} +2 -2
- package/dist/cli/chunks/{chunk-AVKUFN3C.js → chunk-DR6SJ6P3.js} +2 -2
- package/dist/cli/chunks/{chunk-HJNFBJT5.js → chunk-DVEQOD74.js} +8 -8
- package/dist/cli/chunks/{chunk-3RSPEFU3.js → chunk-EGBRCXYT.js} +2 -2
- package/dist/cli/chunks/{chunk-AE65B2ZE.js → chunk-EVQYUUQ3.js} +2 -2
- package/dist/cli/chunks/{chunk-6OEGZSRK.js → chunk-F5X3U57Y.js} +2 -2
- package/dist/cli/chunks/{chunk-CF3W34BA.js → chunk-FCWB2FJG.js} +1 -1
- package/dist/cli/chunks/{chunk-WAQ3U4FC.js → chunk-FVVZWNLV.js} +1 -1
- package/dist/cli/chunks/{chunk-6BHAGCZD.js → chunk-FYNDV2NZ.js} +1 -1
- package/dist/cli/chunks/{chunk-SXUX6PTE.js → chunk-G3G5QEHL.js} +1 -1
- package/dist/cli/chunks/{chunk-6Z7LYE2B.js → chunk-G5DEPXD4.js} +2 -2
- package/dist/cli/chunks/{chunk-SSQ42GI7.js → chunk-HMT6LKHH.js} +2 -2
- package/dist/cli/chunks/{chunk-MO4Q5ZGE.js → chunk-HQXRCW7Z.js} +2 -2
- package/dist/cli/chunks/{chunk-PSOIVDD2.js → chunk-I3NUJ6KJ.js} +3 -3
- package/dist/cli/chunks/{chunk-JQRR37YY.js → chunk-I5BLJ2QQ.js} +2 -2
- package/dist/cli/chunks/{chunk-II5KTTIS.js → chunk-I64R2D4U.js} +4 -4
- package/dist/cli/chunks/{chunk-G3FUOFXA.js → chunk-JC4O47QG.js} +2 -2
- package/dist/cli/chunks/{chunk-DPEG44BS.js → chunk-JT2KLBDB.js} +2 -2
- package/dist/cli/chunks/{chunk-OHESV6I3.js → chunk-JVDYHVF2.js} +4 -4
- package/dist/cli/chunks/{chunk-D3ZUSXFY.js → chunk-K44EQV74.js} +2 -2
- package/dist/cli/chunks/{chunk-HNAQNAGI.js → chunk-K4FG3CRS.js} +3 -3
- package/dist/cli/chunks/{chunk-ISNXE6TP.js → chunk-KTJWRVFR.js} +2 -2
- package/dist/cli/chunks/{chunk-VDDQSW4L.js → chunk-KTUSZRS3.js} +2 -2
- package/dist/cli/chunks/{chunk-7ZPNQ3T6.js → chunk-KUEG6K4A.js} +1 -1
- package/dist/cli/chunks/{chunk-CWWUBZNX.js → chunk-L5JZIORJ.js} +2 -2
- package/dist/cli/chunks/{chunk-HWK27KJK.js → chunk-L6ZJSFAA.js} +1 -1
- package/dist/cli/chunks/{chunk-JAIIPEE6.js → chunk-LA565BGJ.js} +2 -2
- package/dist/cli/chunks/{chunk-WCOJGDGO.js → chunk-LD4OYOX2.js} +2 -2
- package/dist/cli/chunks/{chunk-2BBKAX7X.js → chunk-MER7IHAZ.js} +2 -2
- package/dist/cli/chunks/{chunk-4T36OQUK.js → chunk-MNSF47HC.js} +3 -3
- package/dist/cli/chunks/{chunk-H6DAP4KS.js → chunk-MPEQXXXR.js} +2 -2
- package/dist/cli/chunks/{chunk-2L5ZFBHP.js → chunk-N64PBOR5.js} +2 -2
- package/dist/cli/chunks/{chunk-6TOUMCSE.js → chunk-ORNWQXEX.js} +2 -2
- package/dist/cli/chunks/{chunk-ZOAPOVYW.js → chunk-OSBJWQZL.js} +2 -2
- package/dist/cli/chunks/{chunk-GLJ6CJNY.js → chunk-OUSQ4KQN.js} +2 -2
- package/dist/cli/chunks/{chunk-RWVFOXYM.js → chunk-P2V5ZG3Q.js} +1 -1
- package/dist/cli/chunks/{chunk-6AMD4PZB.js → chunk-PEHHOJE6.js} +2 -2
- package/dist/cli/chunks/{chunk-IHDW4HW7.js → chunk-PGTMLW5K.js} +2 -2
- package/dist/cli/chunks/{chunk-NWMYV7KG.js → chunk-PJZHNAUT.js} +2 -2
- package/dist/cli/chunks/{chunk-E3EDVRB5.js → chunk-PMH52K5J.js} +1 -1
- package/dist/cli/chunks/{chunk-EY2DGYQX.js → chunk-PMNZN4K7.js} +1 -1
- package/dist/cli/chunks/{chunk-56YHSI6R.js → chunk-PV6WBC2D.js} +2 -2
- package/dist/cli/chunks/{chunk-RTVD7SZQ.js → chunk-QFFSQWXP.js} +1 -1
- package/dist/cli/chunks/{chunk-Q3E6Z2RQ.js → chunk-QMVGGG4B.js} +1 -1
- package/dist/cli/chunks/{chunk-3BA2FGSA.js → chunk-QVJQXRHU.js} +2 -2
- package/dist/cli/chunks/{chunk-GHEO5YVA.js → chunk-QW554DTP.js} +1 -1
- package/dist/cli/chunks/{chunk-XXRDI53H.js → chunk-QXOAFWWK.js} +2 -2
- package/dist/cli/chunks/{chunk-V65DK6ZZ.js → chunk-QYDBV5MD.js} +1 -1
- package/dist/cli/chunks/{chunk-ELLNKP3I.js → chunk-R3COBKOP.js} +3 -3
- package/dist/cli/chunks/{chunk-ZHTCZGML.js → chunk-RP2RHB7H.js} +2 -2
- package/dist/cli/chunks/{chunk-EORSYD66.js → chunk-RYATPB5L.js} +2 -2
- package/dist/cli/chunks/{chunk-ESQSX37W.js → chunk-TATCL3AK.js} +2 -2
- package/dist/cli/chunks/{chunk-IPVKVPAF.js → chunk-USORP6QK.js} +2 -2
- package/dist/cli/chunks/{chunk-FW6QBTPE.js → chunk-UTO2M76W.js} +1 -1
- package/dist/cli/chunks/{chunk-D32YCVCA.js → chunk-V3VJNWOF.js} +2 -2
- package/dist/cli/chunks/{chunk-KKBSX43Q.js → chunk-V4DMYY6P.js} +2 -2
- package/dist/cli/chunks/{chunk-3NIHJIWP.js → chunk-VI2I5R6C.js} +2 -2
- package/dist/cli/chunks/{chunk-QNLZKD7E.js → chunk-VX6XHAG2.js} +2 -2
- package/dist/cli/chunks/{chunk-LNUWNRRJ.js → chunk-VYCFMW64.js} +9 -9
- package/dist/cli/chunks/{chunk-CSB2M7IX.js → chunk-W5HTZ3VZ.js} +2 -2
- package/dist/cli/chunks/{chunk-ZSC7NHK3.js → chunk-WGEJ646F.js} +2 -2
- package/dist/cli/chunks/{chunk-ICXWXO5P.js → chunk-WP55YBB2.js} +1 -1
- package/dist/cli/chunks/{chunk-MHL6CPGY.js → chunk-X66N7E7D.js} +1 -1
- package/dist/cli/chunks/{chunk-CUQBOVRP.js → chunk-XB4JRJU4.js} +1 -1
- package/dist/cli/chunks/{chunk-3FUKJT4S.js → chunk-XMMKAV5R.js} +2 -2
- package/dist/cli/chunks/{chunk-RPOW5LWO.js → chunk-XZOJWFLH.js} +1 -1
- package/dist/cli/chunks/{chunk-OUP2X3LT.js → chunk-Y47U7ICT.js} +1 -1
- package/dist/cli/chunks/{chunk-IMLH32AG.js → chunk-YE5AYBHX.js} +2 -2
- package/dist/cli/chunks/{chunk-D3FV5NNA.js → chunk-YUCMGFHE.js} +2 -2
- package/dist/cli/chunks/chunk-Z5R46W6Q.js +2 -0
- package/dist/cli/chunks/{chunk-4M7RBSW6.js → chunk-Z77BVREU.js} +2 -2
- package/dist/cli/chunks/{chunk-C5BRTU4V.js → chunk-ZI3UBCIN.js} +1 -1
- package/dist/cli/chunks/{chunk-65QA7MYW.js → chunk-ZLOMFM25.js} +2 -2
- package/dist/cli/chunks/{chunk-RSOOENGE.js → chunk-ZQKNVZPD.js} +2 -2
- package/dist/cli/chunks/{ci-BGUUHDUS.js → ci-TRWQ33L2.js} +2 -2
- package/dist/cli/chunks/{ci-output-CDFRGBNU.js → ci-output-TCFNHOTU.js} +2 -2
- package/dist/cli/chunks/{circuit-breaker-S3NFX6RQ.js → circuit-breaker-GO2TIL7E.js} +2 -2
- package/dist/cli/chunks/{claude-flow-setup-AJIPJFMC.js → claude-flow-setup-U77JVSVU.js} +2 -2
- package/dist/cli/chunks/client-B3QSCZSJ.js +2 -0
- package/dist/cli/chunks/{cline-installer-6O4KZ5UH.js → cline-installer-XFD3SMGS.js} +2 -2
- package/dist/cli/chunks/{code-IZALXUL5.js → code-V3VE2TMW.js} +2 -2
- package/dist/cli/chunks/{code-index-extractor-N7VDH4XF.js → code-index-extractor-C6DHOOWA.js} +2 -2
- package/dist/cli/chunks/{codex-installer-35GTWCFJ.js → codex-installer-IUR7MVE6.js} +2 -2
- package/dist/cli/chunks/{completions-XPJFHGG2.js → completions-R7FZHNJJ.js} +91 -10
- package/dist/cli/chunks/{complexity-analyzer-DNLCJGUJ.js → complexity-analyzer-EP4QF5CS.js} +2 -2
- package/dist/cli/chunks/{continuedev-installer-PXAIKNYO.js → continuedev-installer-6DW2SBMQ.js} +2 -2
- package/dist/cli/chunks/{copilot-installer-2TQ5IZNY.js → copilot-installer-U3UOX7D5.js} +2 -2
- package/dist/cli/chunks/{cost-tracker-A5XH4W6S.js → cost-tracker-5QZ5A46I.js} +2 -2
- package/dist/cli/chunks/{coverage-EPIMXTLW.js → coverage-QOOOITLD.js} +3 -3
- package/dist/cli/chunks/cross-domain-router-OYBTXKCV.js +2 -0
- package/dist/cli/chunks/{cursor-installer-WMMRPW44.js → cursor-installer-SY3TRE2I.js} +2 -2
- package/dist/cli/chunks/{daemon-55DSODOH.js → daemon-HBSBIPUZ.js} +3 -3
- package/dist/cli/chunks/{dag-attention-scheduler-5DSWXMMK.js → dag-attention-scheduler-ZNLUW2HL.js} +2 -2
- package/dist/cli/chunks/{detect-NOS46AWN.js → detect-DMUJPGNC.js} +2 -2
- package/dist/cli/chunks/dist-node-4RPPRXUH.js +2 -0
- package/dist/cli/chunks/{domain-handler-BFRNU6S3.js → domain-handler-XJFDML77.js} +2 -2
- package/dist/cli/chunks/{domain-transfer-BPSA4HFR.js → domain-transfer-MXPKJ2A2.js} +2 -2
- package/dist/cli/chunks/dream-R2F6L47W.js +2 -0
- package/dist/cli/chunks/{eval-YDLM23FB.js → eval-DHBZ74RL.js} +2 -2
- package/dist/cli/chunks/{fast-paths-GISZ7HBO.js → fast-paths-WTNFCV2I.js} +2 -2
- package/dist/cli/chunks/{feature-flags-3FLJF6CQ.js → feature-flags-264QUQ3E.js} +2 -2
- package/dist/cli/chunks/{feature-flags-5WGZLUPQ.js → feature-flags-VC7BQNHU.js} +2 -2
- package/dist/cli/chunks/{file-discovery-PPHUMFSI.js → file-discovery-LXQPIRKG.js} +2 -2
- package/dist/cli/chunks/{fleet-LHFZ53FS.js → fleet-4OAZWNXG.js} +3 -3
- package/dist/cli/chunks/{gnn-wrapper-Z45DRWGI.js → gnn-wrapper-MAXAOMTP.js} +2 -2
- package/dist/cli/chunks/{heartbeat-handler-VMLJ5PDH.js → heartbeat-handler-ZTUI75EB.js} +4 -4
- package/dist/cli/chunks/{heartbeat-scheduler-GUWYDHEY.js → heartbeat-scheduler-VWPA7XKA.js} +2 -2
- package/dist/cli/chunks/hnsw-adapter-TQPQE4OJ.js +2 -0
- package/dist/cli/chunks/hnsw-index-2X3NMTDU.js +2 -0
- package/dist/cli/chunks/{hnsw-legacy-bridge-S7UZWDUP.js → hnsw-legacy-bridge-EQDYPKGL.js} +2 -2
- package/dist/cli/chunks/{hnswlib-node-MIAAS7OI.js → hnswlib-node-G4QGTGIB.js} +2 -2
- package/dist/cli/chunks/hooks-RBVHAPBL.js +101 -0
- package/dist/cli/chunks/{hybrid-router-Y6LBFPL7.js → hybrid-router-XODWORQ3.js} +2 -2
- package/dist/cli/chunks/{hypergraph-engine-KK73LZYZ.js → hypergraph-engine-T73DH7N6.js} +2 -2
- package/dist/cli/chunks/{hypergraph-handler-OBGDPIWG.js → hypergraph-handler-OZJJJW5B.js} +3 -3
- package/dist/cli/chunks/impact-analyzer-B7GBDSA3.js +2 -0
- package/dist/cli/chunks/{init-handler-JJJ7VHM4.js → init-handler-YXXNCXM4.js} +6 -6
- package/dist/cli/chunks/init-wizard-7N6MCER4.js +2 -0
- package/dist/cli/chunks/kernel-6CJ4FP5Z.js +2 -0
- package/dist/cli/chunks/{kilocode-installer-EF6DPX2D.js → kilocode-installer-3RCK2JPW.js} +2 -2
- package/dist/cli/chunks/{kiro-installer-SG74CEVO.js → kiro-installer-LKC42QRS.js} +2 -2
- package/dist/cli/chunks/knowledge-graph-4XYLO6ZW.js +2 -0
- package/dist/cli/chunks/{learning-LVWYMHF6.js → learning-BIBRKCYL.js} +3 -3
- package/dist/cli/chunks/{llm-router-QFK7MNPY.js → llm-router-Z6Z7TTBI.js} +4 -4
- package/dist/cli/chunks/{load-6XPV4WA2.js → load-T2QUB663.js} +2 -2
- package/dist/cli/chunks/load-test-UODCPBYF.js +2 -0
- package/dist/cli/chunks/{mcp-GZXOPYMH.js → mcp-QBOL6TK4.js} +2 -2
- package/dist/cli/chunks/{memory-QTE2Z5HU.js → memory-7RQ2SF36.js} +5 -5
- package/dist/cli/chunks/memory-backend-PUPAE4QQ.js +2 -0
- package/dist/cli/chunks/{memory-handlers-PC4P4YEF.js → memory-handlers-5OHDUBJS.js} +2 -2
- package/dist/cli/chunks/{multi-model-executor-FZOPSUOT.js → multi-model-executor-PGSNT3NO.js} +2 -2
- package/dist/cli/chunks/{opencode-installer-CITDTCUQ.js → opencode-installer-AEOXTTFG.js} +2 -2
- package/dist/cli/chunks/{orchestrator-ZTG7MFHQ.js → orchestrator-6K2L36JA.js} +6 -6
- package/dist/cli/chunks/{pipeline-QXO4EJP4.js → pipeline-MFQCW7JD.js} +2 -2
- package/dist/cli/chunks/{platform-JJEDYCAK.js → platform-DM6RQ3FM.js} +2 -2
- package/dist/cli/chunks/{plugin-ZEKRM6F7.js → plugin-CCTGDC55.js} +2 -2
- package/dist/cli/chunks/{prime-radiant-advanced-wasm-GRS4T6LR.js → prime-radiant-advanced-wasm-J4FXB63L.js} +2 -2
- package/dist/cli/chunks/protocol-executor-X3EYJINP.js +2 -0
- package/dist/cli/chunks/{protocol-handler-KWI2T6OR.js → protocol-handler-7UOBNLET.js} +2 -2
- package/dist/cli/chunks/{prove-7FJN2HEH.js → prove-VAPGITFF.js} +2 -2
- package/dist/cli/chunks/{provider-manager-QYYZZLLO.js → provider-manager-F6TLUJFW.js} +2 -2
- package/dist/cli/chunks/qe-reasoning-bank-3RDWPSYG.js +2 -0
- package/dist/cli/chunks/{quality-4NHO2NY5.js → quality-7LJQI3SB.js} +2 -2
- package/dist/cli/chunks/queen-coordinator-XIQZIYAZ.js +2 -0
- package/dist/cli/chunks/{real-embeddings-SIELAOWX.js → real-embeddings-NHWAUSV3.js} +2 -2
- package/dist/cli/chunks/{roocode-installer-ANYXH3NR.js → roocode-installer-HQFQJJPU.js} +2 -2
- package/dist/cli/chunks/router-AFEFPU2A.js +2 -0
- package/dist/cli/chunks/routing-feedback-AGYMQFMV.js +2 -0
- package/dist/cli/chunks/{routing-handler-6QQHK4KV.js → routing-handler-VH66WSPU.js} +2 -2
- package/dist/cli/chunks/{ruvector-commands-YEUA3MZB.js → ruvector-commands-IPUWLJFU.js} +2 -2
- package/dist/cli/chunks/{rvf-dual-writer-UJFRHPVE.js → rvf-dual-writer-KRFEM6JH.js} +2 -2
- package/dist/cli/chunks/{rvf-migration-adapter-CSDFG7UA.js → rvf-migration-adapter-SVCZ72IU.js} +2 -2
- package/dist/cli/chunks/{rvf-migration-coordinator-QO7OENQF.js → rvf-migration-coordinator-FYBIF3SX.js} +2 -2
- package/dist/cli/chunks/rvf-native-adapter-AFOWXCZH.js +2 -0
- package/dist/cli/chunks/safe-db-NNF5DE5T.js +2 -0
- package/dist/cli/chunks/schedule-HJUZSHEA.js +2 -0
- package/dist/cli/chunks/scheduler-DZ53RPJQ.js +2 -0
- package/dist/cli/chunks/{security-QCIUC5FX.js → security-C2I6CG7B.js} +3 -3
- package/dist/cli/chunks/shared-rvf-adapter-5UQSTUSR.js +2 -0
- package/dist/cli/chunks/{shared-rvf-dual-writer-LVJJS3PD.js → shared-rvf-dual-writer-BPIFGN7I.js} +2 -2
- package/dist/cli/chunks/sqlite-persistence-27ESC5DX.js +2 -0
- package/dist/cli/chunks/{status-handler-O77A4JWM.js → status-handler-57UA6GNR.js} +2 -2
- package/dist/cli/chunks/{structural-health-WIIBIIQI.js → structural-health-KMHBG6FO.js} +2 -2
- package/dist/cli/chunks/{sync-UN6D6OF2.js → sync-53YM6U4S.js} +2 -2
- package/dist/cli/chunks/{task-handler-RBOSMJCK.js → task-handler-W2XPS5WW.js} +2 -2
- package/dist/cli/chunks/{task-handlers-VWMXQKAT.js → task-handlers-BG4IAMBJ.js} +2 -2
- package/dist/cli/chunks/{test-XK5M3PGT.js → test-QJBBVPL2.js} +4 -4
- package/dist/cli/chunks/{test-scheduling-CTQ3JJ7G.js → test-scheduling-Y4J6EY2K.js} +3 -3
- package/dist/cli/chunks/{token-bootstrap-D5CQ3I5M.js → token-bootstrap-3TKR3UIE.js} +2 -2
- package/dist/cli/chunks/{token-usage-L4QSLWQ5.js → token-usage-5FUNHHVZ.js} +2 -2
- package/dist/cli/chunks/{transformers-SRPJDBKA.js → transformers-KVPA35SR.js} +2 -2
- package/dist/cli/chunks/{tree-sitter-wasm-parser-DOU5ITWB.js → tree-sitter-wasm-parser-LTBBLY5U.js} +2 -2
- package/dist/cli/chunks/{types-LECYZUBN.js → types-Y2BHPD6B.js} +2 -2
- package/dist/cli/chunks/unified-memory-O7GFUSD3.js +2 -0
- package/dist/cli/chunks/unified-memory-hnsw-XBLROJEN.js +2 -0
- package/dist/cli/chunks/unified-persistence-YBHEAL2S.js +2 -0
- package/dist/cli/chunks/upgrade-E4VAQZQR.js +5 -0
- package/dist/cli/chunks/{validate-SIKNIS6B.js → validate-4ICDQCKJ.js} +2 -2
- package/dist/cli/chunks/{validate-swarm-EHAMMILJ.js → validate-swarm-AIEOQOUF.js} +2 -2
- package/dist/cli/chunks/{vibium-LJ4NYXMZ.js → vibium-AF2K6YXR.js} +2 -2
- package/dist/cli/chunks/visual-security-4F7VYCAU.js +2 -0
- package/dist/cli/chunks/{web-tree-sitter-DZQ3T4JD.js → web-tree-sitter-PM67K5SP.js} +2 -2
- package/dist/cli/chunks/{windsurf-installer-U6Z73O6J.js → windsurf-installer-4MKUQ2KT.js} +2 -2
- package/dist/cli/chunks/witness-chain-AXJ44BGW.js +2 -0
- package/dist/cli/chunks/{witness-chain-JE3QU4YP.js → witness-chain-FLPF7CS6.js} +2 -2
- package/dist/cli/chunks/{workflow-62QXGZQO.js → workflow-DHTCI6QD.js} +4 -4
- package/dist/cli/chunks/workflow-orchestrator-UAFUPHD3.js +2 -0
- package/dist/cli/chunks/{wrappers-CAX5EZSH.js → wrappers-5K6UGI3T.js} +2 -2
- package/dist/cli/commands/hooks-handlers/routing-hooks.d.ts +6 -0
- package/dist/cli/commands/hooks-handlers/routing-hooks.js +80 -4
- package/dist/cli/commands/upgrade.d.ts +96 -0
- package/dist/cli/commands/upgrade.js +342 -0
- package/dist/cli/completions/index.d.ts +27 -0
- package/dist/cli/completions/index.js +112 -14
- package/dist/cli/handlers/brain-handler.d.ts +2 -0
- package/dist/cli/handlers/brain-handler.js +221 -1
- package/dist/cli/index.js +5 -1
- package/dist/init/init-wizard-hooks.js +4 -1
- package/dist/init/phases/07-hooks.js +4 -1
- package/dist/integrations/ruvector/brain-diff.d.ts +93 -0
- package/dist/integrations/ruvector/brain-diff.js +281 -0
- package/dist/integrations/ruvector/brain-search.d.ts +78 -0
- package/dist/integrations/ruvector/brain-search.js +154 -0
- package/dist/mcp/bundle.js +348 -348
- package/package.json +2 -2
- package/dist/cli/chunks/adapter-P2EPBJLF.js +0 -2
- package/dist/cli/chunks/aqe-learning-engine-6UITO3NJ.js +0 -2
- package/dist/cli/chunks/base-JHBJXVGP.js +0 -2
- package/dist/cli/chunks/brain-handler-ISVST4MR.js +0 -68
- package/dist/cli/chunks/browser-workflow-U4OON5DZ.js +0 -2
- package/dist/cli/chunks/chunk-FEVTMHO6.js +0 -2
- package/dist/cli/chunks/chunk-MBDX4OHD.js +0 -2
- package/dist/cli/chunks/client-UHHMKUPF.js +0 -2
- package/dist/cli/chunks/cross-domain-router-GEBXTPZW.js +0 -2
- package/dist/cli/chunks/dream-XBRGYPBC.js +0 -2
- package/dist/cli/chunks/esm-node-EV4HOHTZ.js +0 -2
- package/dist/cli/chunks/hnsw-adapter-BG73YVXI.js +0 -2
- package/dist/cli/chunks/hnsw-index-K73ZTLJN.js +0 -2
- package/dist/cli/chunks/hooks-ZN4FV5XS.js +0 -101
- package/dist/cli/chunks/impact-analyzer-GWIUYYCQ.js +0 -2
- package/dist/cli/chunks/init-wizard-RIJJAKE3.js +0 -2
- package/dist/cli/chunks/kernel-SIPBCRGL.js +0 -2
- package/dist/cli/chunks/knowledge-graph-NOYZXHIG.js +0 -2
- package/dist/cli/chunks/load-test-DIMUH75F.js +0 -2
- package/dist/cli/chunks/memory-backend-IWOGO4BV.js +0 -2
- package/dist/cli/chunks/protocol-executor-NT4TILJW.js +0 -2
- package/dist/cli/chunks/qe-reasoning-bank-VDROHXFS.js +0 -2
- package/dist/cli/chunks/queen-coordinator-7LO73IV3.js +0 -2
- package/dist/cli/chunks/router-SFVOLN2W.js +0 -2
- package/dist/cli/chunks/routing-feedback-MRFV7WUZ.js +0 -2
- package/dist/cli/chunks/rvf-native-adapter-6L7FZZC7.js +0 -2
- package/dist/cli/chunks/safe-db-PYWBVGOV.js +0 -2
- package/dist/cli/chunks/schedule-BUQU75HY.js +0 -2
- package/dist/cli/chunks/scheduler-XOSKWZO2.js +0 -2
- package/dist/cli/chunks/shared-rvf-adapter-OZ7S4ZQL.js +0 -2
- package/dist/cli/chunks/sqlite-persistence-7UXQZ5Y6.js +0 -2
- package/dist/cli/chunks/unified-memory-L6735TFM.js +0 -2
- package/dist/cli/chunks/unified-memory-hnsw-7TZNEDGY.js +0 -2
- package/dist/cli/chunks/unified-persistence-FNYZ3C2B.js +0 -2
- package/dist/cli/chunks/visual-security-SMPZPDY4.js +0 -2
- package/dist/cli/chunks/witness-chain-FNCOTWFA.js +0 -2
- package/dist/cli/chunks/workflow-orchestrator-RCR4N7OA.js +0 -2
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `aqe upgrade` — read-only advisory
|
|
3
|
+
*
|
|
4
|
+
* Detects which optional native bindings load on this platform and prints a
|
|
5
|
+
* report with recommendations. Does NOT modify feature flags, env vars, or
|
|
6
|
+
* config files — it only tells the user what they'd gain by installing the
|
|
7
|
+
* missing optional deps.
|
|
8
|
+
*
|
|
9
|
+
* Related: issue #383 item 2.
|
|
10
|
+
*/
|
|
11
|
+
import { Command } from 'commander';
|
|
12
|
+
export type LoadStatus = 'loaded' | 'missing' | 'required-missing';
|
|
13
|
+
export interface NativeCheck {
|
|
14
|
+
/** npm package name as it appears in package.json */
|
|
15
|
+
readonly packageName: string;
|
|
16
|
+
/** Human-readable role */
|
|
17
|
+
readonly role: string;
|
|
18
|
+
/** What the fallback looks like when missing (not applicable for required deps) */
|
|
19
|
+
readonly fallback: string;
|
|
20
|
+
/** Feature flag(s) this native affects (informational) */
|
|
21
|
+
readonly affectsFlags: readonly string[];
|
|
22
|
+
/** Whether missing is fatal or just degrades performance */
|
|
23
|
+
readonly required: boolean;
|
|
24
|
+
}
|
|
25
|
+
export interface NativeResult extends NativeCheck {
|
|
26
|
+
readonly status: LoadStatus;
|
|
27
|
+
/** Error message if the load failed (missing means MODULE_NOT_FOUND; other errors get surfaced). */
|
|
28
|
+
readonly loadError?: string;
|
|
29
|
+
}
|
|
30
|
+
export interface EnvOverride {
|
|
31
|
+
readonly envVar: string;
|
|
32
|
+
readonly value: string;
|
|
33
|
+
readonly flagName: string;
|
|
34
|
+
}
|
|
35
|
+
export interface Recommendation {
|
|
36
|
+
readonly severity: 'info' | 'warn' | 'error';
|
|
37
|
+
readonly message: string;
|
|
38
|
+
/** Copy-paste install command, when relevant. */
|
|
39
|
+
readonly action?: string;
|
|
40
|
+
}
|
|
41
|
+
export interface UpgradeReport {
|
|
42
|
+
readonly aqeVersion: string;
|
|
43
|
+
readonly platform: {
|
|
44
|
+
readonly os: string;
|
|
45
|
+
readonly arch: string;
|
|
46
|
+
readonly node: string;
|
|
47
|
+
};
|
|
48
|
+
readonly natives: readonly NativeResult[];
|
|
49
|
+
readonly flags: {
|
|
50
|
+
readonly useRVFPatternStore: boolean;
|
|
51
|
+
readonly useSublinearSolver: boolean;
|
|
52
|
+
readonly useNativeHNSW: boolean;
|
|
53
|
+
readonly useGraphMAEEmbeddings: boolean;
|
|
54
|
+
readonly useQEFlashAttention: boolean;
|
|
55
|
+
};
|
|
56
|
+
readonly envOverrides: readonly EnvOverride[];
|
|
57
|
+
readonly recommendations: readonly Recommendation[];
|
|
58
|
+
readonly summary: {
|
|
59
|
+
readonly requiredOk: boolean;
|
|
60
|
+
readonly optionalMissingCount: number;
|
|
61
|
+
readonly optionalLoadedCount: number;
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* The set of packages `aqe upgrade` inspects. Order controls the report
|
|
66
|
+
* rendering order.
|
|
67
|
+
*/
|
|
68
|
+
export declare const NATIVE_CATALOG: readonly NativeCheck[];
|
|
69
|
+
export type LoadProbe = (packageName: string) => {
|
|
70
|
+
ok: true;
|
|
71
|
+
} | {
|
|
72
|
+
ok: false;
|
|
73
|
+
error: Error;
|
|
74
|
+
};
|
|
75
|
+
/** Default probe — uses a CJS require relative to this module's location. */
|
|
76
|
+
export declare function createDefaultLoadProbe(): LoadProbe;
|
|
77
|
+
export declare function detectNatives(catalog: readonly NativeCheck[], probe: LoadProbe): NativeResult[];
|
|
78
|
+
export declare function readEnvOverrides(env: NodeJS.ProcessEnv): EnvOverride[];
|
|
79
|
+
interface RecommendationInput {
|
|
80
|
+
readonly natives: readonly NativeResult[];
|
|
81
|
+
readonly flags: UpgradeReport['flags'];
|
|
82
|
+
readonly envOverrides: readonly EnvOverride[];
|
|
83
|
+
}
|
|
84
|
+
export declare function buildRecommendations(input: RecommendationInput): Recommendation[];
|
|
85
|
+
export interface BuildReportInput {
|
|
86
|
+
readonly aqeVersion: string;
|
|
87
|
+
readonly probe: LoadProbe;
|
|
88
|
+
readonly env: NodeJS.ProcessEnv;
|
|
89
|
+
readonly flags: UpgradeReport['flags'];
|
|
90
|
+
}
|
|
91
|
+
export declare function buildReport(input: BuildReportInput): UpgradeReport;
|
|
92
|
+
export declare function exitCodeFor(report: UpgradeReport, strict: boolean): number;
|
|
93
|
+
export declare function renderReportHuman(report: UpgradeReport): string;
|
|
94
|
+
export declare function createUpgradeCommand(cleanupAndExit: (code: number) => Promise<never>): Command;
|
|
95
|
+
export {};
|
|
96
|
+
//# sourceMappingURL=upgrade.d.ts.map
|
|
@@ -0,0 +1,342 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `aqe upgrade` — read-only advisory
|
|
3
|
+
*
|
|
4
|
+
* Detects which optional native bindings load on this platform and prints a
|
|
5
|
+
* report with recommendations. Does NOT modify feature flags, env vars, or
|
|
6
|
+
* config files — it only tells the user what they'd gain by installing the
|
|
7
|
+
* missing optional deps.
|
|
8
|
+
*
|
|
9
|
+
* Related: issue #383 item 2.
|
|
10
|
+
*/
|
|
11
|
+
import { Command } from 'commander';
|
|
12
|
+
import chalk from 'chalk';
|
|
13
|
+
import { createRequire } from 'node:module';
|
|
14
|
+
import { platform, arch } from 'node:os';
|
|
15
|
+
import { getRuVectorFeatureFlags } from '../../integrations/ruvector/feature-flags.js';
|
|
16
|
+
// ============================================================================
|
|
17
|
+
// Native catalog
|
|
18
|
+
// ============================================================================
|
|
19
|
+
/**
|
|
20
|
+
* The set of packages `aqe upgrade` inspects. Order controls the report
|
|
21
|
+
* rendering order.
|
|
22
|
+
*/
|
|
23
|
+
export const NATIVE_CATALOG = [
|
|
24
|
+
{
|
|
25
|
+
packageName: 'better-sqlite3',
|
|
26
|
+
role: 'SQLite storage (required — memory.db, patterns, audit)',
|
|
27
|
+
fallback: 'n/a — required',
|
|
28
|
+
affectsFlags: [],
|
|
29
|
+
required: true,
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
packageName: 'web-tree-sitter',
|
|
33
|
+
role: 'Tree-sitter WASM parser runtime (required — code intelligence)',
|
|
34
|
+
fallback: 'n/a — required',
|
|
35
|
+
affectsFlags: [],
|
|
36
|
+
required: true,
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
packageName: 'hnswlib-node',
|
|
40
|
+
role: 'Canonical HNSW vector index (default since ADR-090)',
|
|
41
|
+
fallback: 'ProgressiveHnswBackend (JS) — correct but slower on large codebases',
|
|
42
|
+
affectsFlags: ['useNativeHNSW'],
|
|
43
|
+
required: false,
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
packageName: '@ruvector/rvf-node',
|
|
47
|
+
role: 'Persistent HNSW pattern store + RVF brain export format',
|
|
48
|
+
fallback: 'SQLite-backed HNSW + JSONL brain export',
|
|
49
|
+
affectsFlags: ['useRVFPatternStore'],
|
|
50
|
+
required: false,
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
packageName: '@ruvector/solver-node',
|
|
54
|
+
role: 'Sublinear PageRank on the pattern citation graph',
|
|
55
|
+
fallback: 'TypeScript power iteration — O(n·m) (practical cap ≈ 50K nodes)',
|
|
56
|
+
affectsFlags: ['useSublinearSolver'],
|
|
57
|
+
required: false,
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
packageName: '@ruvector/attention',
|
|
61
|
+
role: 'Flash Attention with SIMD acceleration',
|
|
62
|
+
fallback: 'Plain attention — 2.5–7× slower on large sequences',
|
|
63
|
+
affectsFlags: ['useQEFlashAttention'],
|
|
64
|
+
required: false,
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
packageName: '@ruvector/gnn',
|
|
68
|
+
role: 'GraphMAE native acceleration',
|
|
69
|
+
fallback: 'TypeScript GraphMAE — correct but slower',
|
|
70
|
+
affectsFlags: ['useGraphMAEEmbeddings'],
|
|
71
|
+
required: false,
|
|
72
|
+
},
|
|
73
|
+
];
|
|
74
|
+
/** Default probe — uses a CJS require relative to this module's location. */
|
|
75
|
+
export function createDefaultLoadProbe() {
|
|
76
|
+
const req = createRequire(import.meta.url);
|
|
77
|
+
return (packageName) => {
|
|
78
|
+
try {
|
|
79
|
+
req(packageName);
|
|
80
|
+
return { ok: true };
|
|
81
|
+
}
|
|
82
|
+
catch (err) {
|
|
83
|
+
return { ok: false, error: err instanceof Error ? err : new Error(String(err)) };
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
export function detectNatives(catalog, probe) {
|
|
88
|
+
return catalog.map((check) => {
|
|
89
|
+
const result = probe(check.packageName);
|
|
90
|
+
if (result.ok) {
|
|
91
|
+
return { ...check, status: 'loaded' };
|
|
92
|
+
}
|
|
93
|
+
const missingModule = isModuleNotFound(result.error);
|
|
94
|
+
const status = check.required
|
|
95
|
+
? 'required-missing'
|
|
96
|
+
: missingModule
|
|
97
|
+
? 'missing'
|
|
98
|
+
: 'missing';
|
|
99
|
+
return { ...check, status, loadError: result.error.message };
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
function isModuleNotFound(err) {
|
|
103
|
+
return err.code === 'MODULE_NOT_FOUND';
|
|
104
|
+
}
|
|
105
|
+
// ============================================================================
|
|
106
|
+
// Environment overrides
|
|
107
|
+
// ============================================================================
|
|
108
|
+
/**
|
|
109
|
+
* Map of RUVECTOR_* env vars → feature flag names that aqe upgrade cares about.
|
|
110
|
+
* Only includes flags tied to optional natives — the full list is in
|
|
111
|
+
* feature-flags.ts.
|
|
112
|
+
*/
|
|
113
|
+
const ENV_VAR_TO_FLAG = {
|
|
114
|
+
RUVECTOR_USE_RVF_PATTERN_STORE: 'useRVFPatternStore',
|
|
115
|
+
RUVECTOR_USE_SUBLINEAR_SOLVER: 'useSublinearSolver',
|
|
116
|
+
RUVECTOR_USE_NATIVE_HNSW: 'useNativeHNSW',
|
|
117
|
+
RUVECTOR_USE_GNN_INDEX: 'useQEGNNIndex',
|
|
118
|
+
RUVECTOR_USE_FLASH_ATTENTION: 'useQEFlashAttention',
|
|
119
|
+
RUVECTOR_USE_GRAPH_MAE_EMBEDDINGS: 'useGraphMAEEmbeddings',
|
|
120
|
+
};
|
|
121
|
+
export function readEnvOverrides(env) {
|
|
122
|
+
const out = [];
|
|
123
|
+
for (const [envVar, flagName] of Object.entries(ENV_VAR_TO_FLAG)) {
|
|
124
|
+
const v = env[envVar];
|
|
125
|
+
if (v !== undefined)
|
|
126
|
+
out.push({ envVar, value: v, flagName });
|
|
127
|
+
}
|
|
128
|
+
return out;
|
|
129
|
+
}
|
|
130
|
+
export function buildRecommendations(input) {
|
|
131
|
+
const recs = [];
|
|
132
|
+
const nativeByName = new Map(input.natives.map((n) => [n.packageName, n]));
|
|
133
|
+
// Missing required deps are a hard error.
|
|
134
|
+
for (const n of input.natives) {
|
|
135
|
+
if (n.status === 'required-missing') {
|
|
136
|
+
recs.push({
|
|
137
|
+
severity: 'error',
|
|
138
|
+
message: `Required dependency missing: ${n.packageName} — ${n.role}`,
|
|
139
|
+
action: `npm install ${n.packageName}`,
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
// Missing optional deps: suggest install, note fallback.
|
|
144
|
+
for (const n of input.natives) {
|
|
145
|
+
if (n.status === 'missing' && !n.required) {
|
|
146
|
+
recs.push({
|
|
147
|
+
severity: 'warn',
|
|
148
|
+
message: `Optional native missing: ${n.packageName} — falls back to ${n.fallback}`,
|
|
149
|
+
action: `npm install ${n.packageName}`,
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
// Env override conflicts: user forced a flag ON but the native isn't loadable.
|
|
154
|
+
const flagByName = { ...input.flags };
|
|
155
|
+
for (const override of input.envOverrides) {
|
|
156
|
+
const natives = input.natives.filter((n) => n.affectsFlags.includes(override.flagName));
|
|
157
|
+
const anyLoaded = natives.some((n) => n.status === 'loaded');
|
|
158
|
+
const wantsOn = override.value === 'true' || override.value === '1';
|
|
159
|
+
if (wantsOn && natives.length > 0 && !anyLoaded) {
|
|
160
|
+
const missing = natives.map((n) => n.packageName).join(', ');
|
|
161
|
+
recs.push({
|
|
162
|
+
severity: 'warn',
|
|
163
|
+
message: `${override.envVar}=${override.value} requests flag ${override.flagName}=true, ` +
|
|
164
|
+
`but required native(s) not loaded: ${missing}. The flag will silently fall back.`,
|
|
165
|
+
action: natives[0] ? `npm install ${natives[0].packageName}` : undefined,
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
void flagByName; // reserved for future rules
|
|
170
|
+
void nativeByName;
|
|
171
|
+
// All optionals loaded → positive-confirmation info line.
|
|
172
|
+
const optionalMissing = input.natives.filter((n) => !n.required && n.status === 'missing');
|
|
173
|
+
if (optionalMissing.length === 0 && input.natives.every((n) => n.status !== 'required-missing')) {
|
|
174
|
+
recs.push({
|
|
175
|
+
severity: 'info',
|
|
176
|
+
message: 'All recommended native bindings are loaded — no action required.',
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
return recs;
|
|
180
|
+
}
|
|
181
|
+
export function buildReport(input) {
|
|
182
|
+
const natives = detectNatives(NATIVE_CATALOG, input.probe);
|
|
183
|
+
const envOverrides = readEnvOverrides(input.env);
|
|
184
|
+
const recommendations = buildRecommendations({
|
|
185
|
+
natives,
|
|
186
|
+
flags: input.flags,
|
|
187
|
+
envOverrides,
|
|
188
|
+
});
|
|
189
|
+
const optionalLoadedCount = natives.filter((n) => !n.required && n.status === 'loaded').length;
|
|
190
|
+
const optionalMissingCount = natives.filter((n) => !n.required && n.status === 'missing').length;
|
|
191
|
+
const requiredOk = natives.filter((n) => n.required).every((n) => n.status === 'loaded');
|
|
192
|
+
return {
|
|
193
|
+
aqeVersion: input.aqeVersion,
|
|
194
|
+
platform: {
|
|
195
|
+
os: platform(),
|
|
196
|
+
arch: arch(),
|
|
197
|
+
node: process.version,
|
|
198
|
+
},
|
|
199
|
+
natives,
|
|
200
|
+
flags: input.flags,
|
|
201
|
+
envOverrides,
|
|
202
|
+
recommendations,
|
|
203
|
+
summary: {
|
|
204
|
+
requiredOk,
|
|
205
|
+
optionalMissingCount,
|
|
206
|
+
optionalLoadedCount,
|
|
207
|
+
},
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
// ============================================================================
|
|
211
|
+
// Exit-code policy
|
|
212
|
+
// ============================================================================
|
|
213
|
+
export function exitCodeFor(report, strict) {
|
|
214
|
+
if (!report.summary.requiredOk)
|
|
215
|
+
return 2;
|
|
216
|
+
if (strict && report.summary.optionalMissingCount > 0)
|
|
217
|
+
return 1;
|
|
218
|
+
return 0;
|
|
219
|
+
}
|
|
220
|
+
// ============================================================================
|
|
221
|
+
// Rendering
|
|
222
|
+
// ============================================================================
|
|
223
|
+
export function renderReportHuman(report) {
|
|
224
|
+
const lines = [];
|
|
225
|
+
const push = (s = '') => lines.push(s);
|
|
226
|
+
push('');
|
|
227
|
+
push(chalk.bold.blue(' aqe upgrade — native binding report'));
|
|
228
|
+
push(chalk.gray(' ──────────────────────────────────────'));
|
|
229
|
+
push('');
|
|
230
|
+
push(` AQE: ${chalk.cyan(report.aqeVersion)}`);
|
|
231
|
+
push(` Platform: ${chalk.cyan(`${report.platform.os} ${report.platform.arch}`)}`);
|
|
232
|
+
push(` Node: ${chalk.cyan(report.platform.node)}`);
|
|
233
|
+
push('');
|
|
234
|
+
push(chalk.blue(' Native bindings:'));
|
|
235
|
+
for (const n of report.natives) {
|
|
236
|
+
const status = statusBadge(n.status);
|
|
237
|
+
push(` ${status} ${chalk.bold(n.packageName.padEnd(28))} ${chalk.gray(n.role)}`);
|
|
238
|
+
if (n.status !== 'loaded' && n.loadError) {
|
|
239
|
+
// Node's MODULE_NOT_FOUND error message carries a multi-line "Require
|
|
240
|
+
// stack:" trailer that adds no signal here — keep the first line only.
|
|
241
|
+
push(` ${chalk.gray(n.loadError.split('\n')[0])}`);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
push('');
|
|
245
|
+
push(chalk.blue(' Flag state (after env overrides):'));
|
|
246
|
+
const flagEntries = Object.entries(report.flags);
|
|
247
|
+
for (const [name, value] of flagEntries) {
|
|
248
|
+
const badge = value ? chalk.green('on ') : chalk.yellow('off');
|
|
249
|
+
push(` ${badge} ${name}`);
|
|
250
|
+
}
|
|
251
|
+
if (report.envOverrides.length > 0) {
|
|
252
|
+
push('');
|
|
253
|
+
push(chalk.blue(' Env overrides in effect:'));
|
|
254
|
+
for (const o of report.envOverrides) {
|
|
255
|
+
push(` ${chalk.cyan(o.envVar)}=${chalk.cyan(o.value)} ${chalk.gray(`→ ${o.flagName}`)}`);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
push('');
|
|
259
|
+
push(chalk.blue(' Recommendations:'));
|
|
260
|
+
if (report.recommendations.length === 0) {
|
|
261
|
+
push(chalk.gray(' (none)'));
|
|
262
|
+
}
|
|
263
|
+
else {
|
|
264
|
+
for (const rec of report.recommendations) {
|
|
265
|
+
const prefix = recommendationPrefix(rec.severity);
|
|
266
|
+
push(` ${prefix} ${rec.message}`);
|
|
267
|
+
if (rec.action)
|
|
268
|
+
push(` ${chalk.gray('→')} ${chalk.cyan(rec.action)}`);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
push('');
|
|
272
|
+
const okBadge = report.summary.requiredOk ? chalk.green('OK') : chalk.red('FAIL');
|
|
273
|
+
push(` Summary: required ${okBadge} ` +
|
|
274
|
+
`optional loaded ${chalk.cyan(report.summary.optionalLoadedCount)} / ` +
|
|
275
|
+
`${chalk.cyan(report.summary.optionalLoadedCount + report.summary.optionalMissingCount)}`);
|
|
276
|
+
push('');
|
|
277
|
+
return lines.join('\n');
|
|
278
|
+
}
|
|
279
|
+
function statusBadge(status) {
|
|
280
|
+
switch (status) {
|
|
281
|
+
case 'loaded':
|
|
282
|
+
return chalk.green('✓');
|
|
283
|
+
case 'missing':
|
|
284
|
+
return chalk.yellow('…');
|
|
285
|
+
case 'required-missing':
|
|
286
|
+
return chalk.red('✗');
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
function recommendationPrefix(severity) {
|
|
290
|
+
switch (severity) {
|
|
291
|
+
case 'info':
|
|
292
|
+
return chalk.green('✓');
|
|
293
|
+
case 'warn':
|
|
294
|
+
return chalk.yellow('!');
|
|
295
|
+
case 'error':
|
|
296
|
+
return chalk.red('✗');
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
export function createUpgradeCommand(cleanupAndExit) {
|
|
300
|
+
const cmd = new Command('upgrade')
|
|
301
|
+
.description('Detect optional native bindings and recommend install / flag changes (read-only)')
|
|
302
|
+
.option('--json', 'Emit the report as JSON to stdout', false)
|
|
303
|
+
.option('--strict', 'Exit non-zero if any recommended optional native is missing', false)
|
|
304
|
+
.action(async (options) => {
|
|
305
|
+
const aqeVersion = resolveAqeVersion();
|
|
306
|
+
const rvFlags = getRuVectorFeatureFlags();
|
|
307
|
+
const report = buildReport({
|
|
308
|
+
aqeVersion,
|
|
309
|
+
probe: createDefaultLoadProbe(),
|
|
310
|
+
env: process.env,
|
|
311
|
+
flags: {
|
|
312
|
+
useRVFPatternStore: rvFlags.useRVFPatternStore,
|
|
313
|
+
useSublinearSolver: rvFlags.useSublinearSolver,
|
|
314
|
+
useNativeHNSW: rvFlags.useNativeHNSW,
|
|
315
|
+
useGraphMAEEmbeddings: rvFlags.useGraphMAEEmbeddings,
|
|
316
|
+
useQEFlashAttention: rvFlags.useQEFlashAttention,
|
|
317
|
+
},
|
|
318
|
+
});
|
|
319
|
+
if (options.json) {
|
|
320
|
+
process.stdout.write(JSON.stringify(report, null, 2) + '\n');
|
|
321
|
+
}
|
|
322
|
+
else {
|
|
323
|
+
process.stdout.write(renderReportHuman(report));
|
|
324
|
+
}
|
|
325
|
+
await cleanupAndExit(exitCodeFor(report, options.strict === true));
|
|
326
|
+
});
|
|
327
|
+
return cmd;
|
|
328
|
+
}
|
|
329
|
+
// ============================================================================
|
|
330
|
+
// Helpers
|
|
331
|
+
// ============================================================================
|
|
332
|
+
function resolveAqeVersion() {
|
|
333
|
+
try {
|
|
334
|
+
const req = createRequire(import.meta.url);
|
|
335
|
+
const pkg = req('../../../package.json');
|
|
336
|
+
return pkg.version ?? 'unknown';
|
|
337
|
+
}
|
|
338
|
+
catch {
|
|
339
|
+
return 'unknown';
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
//# sourceMappingURL=upgrade.js.map
|
|
@@ -152,6 +152,33 @@ export declare const COMMANDS: {
|
|
|
152
152
|
};
|
|
153
153
|
};
|
|
154
154
|
};
|
|
155
|
+
readonly brain: {
|
|
156
|
+
readonly description: "Export, import, and inspect QE brain state";
|
|
157
|
+
readonly subcommands: {
|
|
158
|
+
readonly export: {
|
|
159
|
+
readonly options: readonly ["-o", "--output", "--format", "--db"];
|
|
160
|
+
};
|
|
161
|
+
readonly import: {
|
|
162
|
+
readonly options: readonly ["-i", "--input", "--strategy", "--dry-run", "--db"];
|
|
163
|
+
};
|
|
164
|
+
readonly info: {
|
|
165
|
+
readonly options: readonly ["-i", "--input"];
|
|
166
|
+
};
|
|
167
|
+
readonly diff: {
|
|
168
|
+
readonly options: readonly ["--table", "--verbose", "--json"];
|
|
169
|
+
};
|
|
170
|
+
readonly search: {
|
|
171
|
+
readonly options: readonly ["-i", "--input", "--table", "--domain", "--pattern-type", "--since", "--until", "-q", "--query", "-l", "--limit", "--json"];
|
|
172
|
+
};
|
|
173
|
+
readonly 'witness-backfill': {
|
|
174
|
+
readonly options: readonly ["--db"];
|
|
175
|
+
};
|
|
176
|
+
};
|
|
177
|
+
};
|
|
178
|
+
readonly upgrade: {
|
|
179
|
+
readonly description: "Detect optional native bindings and recommend install / flag changes";
|
|
180
|
+
readonly options: readonly ["--json", "--strict"];
|
|
181
|
+
};
|
|
155
182
|
};
|
|
156
183
|
/**
|
|
157
184
|
* Task types for completion
|
|
@@ -231,6 +231,23 @@ export const COMMANDS = {
|
|
|
231
231
|
install: { options: ['--shell'] },
|
|
232
232
|
},
|
|
233
233
|
},
|
|
234
|
+
// Brain export/import/diff/search
|
|
235
|
+
brain: {
|
|
236
|
+
description: 'Export, import, and inspect QE brain state',
|
|
237
|
+
subcommands: {
|
|
238
|
+
export: { options: ['-o', '--output', '--format', '--db'] },
|
|
239
|
+
import: { options: ['-i', '--input', '--strategy', '--dry-run', '--db'] },
|
|
240
|
+
info: { options: ['-i', '--input'] },
|
|
241
|
+
diff: { options: ['--table', '--verbose', '--json'] },
|
|
242
|
+
search: { options: ['-i', '--input', '--table', '--domain', '--pattern-type', '--since', '--until', '-q', '--query', '-l', '--limit', '--json'] },
|
|
243
|
+
'witness-backfill': { options: ['--db'] },
|
|
244
|
+
},
|
|
245
|
+
},
|
|
246
|
+
// Native binding advisor
|
|
247
|
+
upgrade: {
|
|
248
|
+
description: 'Detect optional native bindings and recommend install / flag changes',
|
|
249
|
+
options: ['--json', '--strict'],
|
|
250
|
+
},
|
|
234
251
|
};
|
|
235
252
|
/**
|
|
236
253
|
* Task types for completion
|
|
@@ -284,40 +301,40 @@ export function generateBashCompletion() {
|
|
|
284
301
|
|
|
285
302
|
# Helper function to complete test files (*.test.ts, *.spec.ts, *.test.js, etc.)
|
|
286
303
|
_aqe_complete_test_files() {
|
|
287
|
-
local cur="
|
|
304
|
+
local cur="$1"
|
|
288
305
|
local IFS=$'\\n'
|
|
289
306
|
local files=()
|
|
290
307
|
|
|
291
308
|
# Complete test files with common test file patterns
|
|
292
309
|
# Use find for more reliable glob matching across directories
|
|
293
|
-
if [[ -z "
|
|
310
|
+
if [[ -z "$cur" || "$cur" == "." ]]; then
|
|
294
311
|
# No prefix - search from current directory
|
|
295
312
|
while IFS= read -r file; do
|
|
296
|
-
files+=("
|
|
313
|
+
files+=("$file")
|
|
297
314
|
done < <(find . -maxdepth 3 -type f \\( -name "*.test.ts" -o -name "*.spec.ts" -o -name "*.test.js" -o -name "*.spec.js" -o -name "*.test.tsx" -o -name "*.spec.tsx" \\) 2>/dev/null | head -30)
|
|
298
315
|
else
|
|
299
316
|
# Has prefix - use compgen with glob patterns
|
|
300
|
-
files+=(
|
|
301
|
-
files+=(
|
|
302
|
-
files+=(
|
|
303
|
-
files+=(
|
|
304
|
-
files+=(
|
|
305
|
-
files+=(
|
|
317
|
+
files+=($(compgen -f -X '!*.test.ts' -- "$cur" 2>/dev/null))
|
|
318
|
+
files+=($(compgen -f -X '!*.spec.ts' -- "$cur" 2>/dev/null))
|
|
319
|
+
files+=($(compgen -f -X '!*.test.js' -- "$cur" 2>/dev/null))
|
|
320
|
+
files+=($(compgen -f -X '!*.spec.js' -- "$cur" 2>/dev/null))
|
|
321
|
+
files+=($(compgen -f -X '!*.test.tsx' -- "$cur" 2>/dev/null))
|
|
322
|
+
files+=($(compgen -f -X '!*.spec.tsx' -- "$cur" 2>/dev/null))
|
|
306
323
|
fi
|
|
307
324
|
|
|
308
325
|
# Also include directories for navigation
|
|
309
|
-
COMPREPLY=(
|
|
326
|
+
COMPREPLY=($(compgen -d -- "$cur"))
|
|
310
327
|
|
|
311
328
|
# Add test files to completions
|
|
312
329
|
for file in "\${files[@]}"; do
|
|
313
|
-
[[ -n "
|
|
330
|
+
[[ -n "$file" ]] && COMPREPLY+=("$file")
|
|
314
331
|
done
|
|
315
332
|
}
|
|
316
333
|
|
|
317
334
|
# Helper function to complete directories
|
|
318
335
|
_aqe_complete_directories() {
|
|
319
|
-
local cur="
|
|
320
|
-
COMPREPLY=(
|
|
336
|
+
local cur="$1"
|
|
337
|
+
COMPREPLY=( $(compgen -d -- "$cur") )
|
|
321
338
|
}
|
|
322
339
|
|
|
323
340
|
# Main completion function (version-agnostic name per ADR-042)
|
|
@@ -325,12 +342,13 @@ _aqe_completions() {
|
|
|
325
342
|
local cur prev words cword
|
|
326
343
|
_init_completion || return
|
|
327
344
|
|
|
328
|
-
local commands="init status health task agent domain protocol test coverage quality security code migrate hypergraph completions"
|
|
345
|
+
local commands="init status health task agent domain protocol test coverage quality security code migrate hypergraph completions brain upgrade"
|
|
329
346
|
local task_subcmds="submit list cancel status"
|
|
330
347
|
local agent_subcmds="list spawn"
|
|
331
348
|
local domain_subcmds="list health"
|
|
332
349
|
local protocol_subcmds="run"
|
|
333
350
|
local completions_subcmds="bash zsh fish powershell install"
|
|
351
|
+
local brain_subcmds="export import info diff search witness-backfill"
|
|
334
352
|
local code_actions="index search impact deps"
|
|
335
353
|
local test_actions="generate execute"
|
|
336
354
|
|
|
@@ -663,6 +681,48 @@ _aqe_completions() {
|
|
|
663
681
|
;;
|
|
664
682
|
esac
|
|
665
683
|
;;
|
|
684
|
+
brain)
|
|
685
|
+
case "\${words[2]}" in
|
|
686
|
+
export)
|
|
687
|
+
COMPREPLY=( $(compgen -W "-o --output --format --db" -- "$cur") )
|
|
688
|
+
return
|
|
689
|
+
;;
|
|
690
|
+
import)
|
|
691
|
+
COMPREPLY=( $(compgen -W "-i --input --strategy --dry-run --db" -- "$cur") )
|
|
692
|
+
return
|
|
693
|
+
;;
|
|
694
|
+
info)
|
|
695
|
+
COMPREPLY=( $(compgen -W "-i --input" -- "$cur") )
|
|
696
|
+
return
|
|
697
|
+
;;
|
|
698
|
+
diff)
|
|
699
|
+
COMPREPLY=( $(compgen -W "--table --verbose --json" -- "$cur") )
|
|
700
|
+
return
|
|
701
|
+
;;
|
|
702
|
+
search)
|
|
703
|
+
case "$prev" in
|
|
704
|
+
--domain)
|
|
705
|
+
COMPREPLY=( $(compgen -W "$domains" -- "$cur") )
|
|
706
|
+
return
|
|
707
|
+
;;
|
|
708
|
+
esac
|
|
709
|
+
COMPREPLY=( $(compgen -W "-i --input --table --domain --pattern-type --since --until -q --query -l --limit --json" -- "$cur") )
|
|
710
|
+
return
|
|
711
|
+
;;
|
|
712
|
+
witness-backfill)
|
|
713
|
+
COMPREPLY=( $(compgen -W "--db" -- "$cur") )
|
|
714
|
+
return
|
|
715
|
+
;;
|
|
716
|
+
*)
|
|
717
|
+
COMPREPLY=( $(compgen -W "$brain_subcmds" -- "$cur") )
|
|
718
|
+
return
|
|
719
|
+
;;
|
|
720
|
+
esac
|
|
721
|
+
;;
|
|
722
|
+
upgrade)
|
|
723
|
+
COMPREPLY=( $(compgen -W "--json --strict" -- "$cur") )
|
|
724
|
+
return
|
|
725
|
+
;;
|
|
666
726
|
*)
|
|
667
727
|
COMPREPLY=( $(compgen -W "$commands" -- "$cur") )
|
|
668
728
|
return
|
|
@@ -722,6 +782,8 @@ _aqe() {
|
|
|
722
782
|
'hypergraph:Query the code knowledge hypergraph'
|
|
723
783
|
'migrate:V2 to V3 migration'
|
|
724
784
|
'completions:Generate shell completions'
|
|
785
|
+
'brain:Export, import, and inspect QE brain state'
|
|
786
|
+
'upgrade:Detect optional native bindings and recommend flags'
|
|
725
787
|
)
|
|
726
788
|
|
|
727
789
|
domains=(
|
|
@@ -1016,6 +1078,30 @@ _aqe() {
|
|
|
1016
1078
|
;;
|
|
1017
1079
|
esac
|
|
1018
1080
|
;;
|
|
1081
|
+
brain)
|
|
1082
|
+
local -a brain_commands
|
|
1083
|
+
brain_commands=(
|
|
1084
|
+
'export:Export brain state to a portable file/directory'
|
|
1085
|
+
'import:Import a brain export into the local database'
|
|
1086
|
+
'info:Show manifest metadata for a brain export'
|
|
1087
|
+
'diff:Compare two brain exports'
|
|
1088
|
+
'search:Filtered search over a JSONL brain export'
|
|
1089
|
+
'witness-backfill:Create witness chain entries for legacy patterns'
|
|
1090
|
+
)
|
|
1091
|
+
_arguments -C \\
|
|
1092
|
+
'1:brain subcommand:->brain_cmd' \\
|
|
1093
|
+
'*::arg:->brain_args'
|
|
1094
|
+
case "$state" in
|
|
1095
|
+
brain_cmd)
|
|
1096
|
+
_describe -t commands 'brain subcommands' brain_commands
|
|
1097
|
+
;;
|
|
1098
|
+
esac
|
|
1099
|
+
;;
|
|
1100
|
+
upgrade)
|
|
1101
|
+
_arguments \\
|
|
1102
|
+
'--json[Emit the report as JSON]' \\
|
|
1103
|
+
'--strict[Exit non-zero if any optional native is missing]'
|
|
1104
|
+
;;
|
|
1019
1105
|
esac
|
|
1020
1106
|
;;
|
|
1021
1107
|
esac
|
|
@@ -1063,6 +1149,16 @@ complete -c aqe -n "__fish_seen_subcommand_from hypergraph; and not __fish_seen_
|
|
|
1063
1149
|
complete -c aqe -n "__fish_seen_subcommand_from hypergraph; and not __fish_seen_subcommand_from stats untested impacted gaps" -a "impacted" -d "Find impacted tests"
|
|
1064
1150
|
complete -c aqe -n "__fish_seen_subcommand_from hypergraph; and not __fish_seen_subcommand_from stats untested impacted gaps" -a "gaps" -d "Find coverage gaps"
|
|
1065
1151
|
complete -c aqe -n "__fish_use_subcommand" -a "migrate" -d "V2 to V3 migration"
|
|
1152
|
+
complete -c aqe -n "__fish_use_subcommand" -a "brain" -d "Export, import, and inspect QE brain state"
|
|
1153
|
+
complete -c aqe -n "__fish_seen_subcommand_from brain; and not __fish_seen_subcommand_from export import info diff search witness-backfill" -a "export" -d "Export brain state"
|
|
1154
|
+
complete -c aqe -n "__fish_seen_subcommand_from brain; and not __fish_seen_subcommand_from export import info diff search witness-backfill" -a "import" -d "Import a brain export"
|
|
1155
|
+
complete -c aqe -n "__fish_seen_subcommand_from brain; and not __fish_seen_subcommand_from export import info diff search witness-backfill" -a "info" -d "Show manifest info"
|
|
1156
|
+
complete -c aqe -n "__fish_seen_subcommand_from brain; and not __fish_seen_subcommand_from export import info diff search witness-backfill" -a "diff" -d "Compare two brain exports"
|
|
1157
|
+
complete -c aqe -n "__fish_seen_subcommand_from brain; and not __fish_seen_subcommand_from export import info diff search witness-backfill" -a "search" -d "Filtered search over a JSONL brain export"
|
|
1158
|
+
complete -c aqe -n "__fish_seen_subcommand_from brain; and not __fish_seen_subcommand_from export import info diff search witness-backfill" -a "witness-backfill" -d "Backfill witness chain entries"
|
|
1159
|
+
complete -c aqe -n "__fish_use_subcommand" -a "upgrade" -d "Detect optional native bindings and recommend install / flag changes"
|
|
1160
|
+
complete -c aqe -n "__fish_seen_subcommand_from upgrade" -l json -d "Emit the report as JSON"
|
|
1161
|
+
complete -c aqe -n "__fish_seen_subcommand_from upgrade" -l strict -d "Exit non-zero if any optional native is missing"
|
|
1066
1162
|
complete -c aqe -n "__fish_use_subcommand" -a "completions" -d "Generate shell completions"
|
|
1067
1163
|
|
|
1068
1164
|
# Domains list
|
|
@@ -1267,6 +1363,8 @@ $script:AQE_COMMANDS = @{
|
|
|
1267
1363
|
'hypergraph' = 'Query the code knowledge hypergraph'
|
|
1268
1364
|
'migrate' = 'V2 to V3 migration'
|
|
1269
1365
|
'completions' = 'Generate shell completions'
|
|
1366
|
+
'brain' = 'Export, import, and inspect QE brain state'
|
|
1367
|
+
'upgrade' = 'Detect optional native bindings and recommend flags'
|
|
1270
1368
|
}
|
|
1271
1369
|
|
|
1272
1370
|
Register-ArgumentCompleter -Native -CommandName 'aqe' -ScriptBlock {
|