agentic-qe 3.9.14 → 3.9.16
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/accessibility-testing/SKILL.md +18 -0
- package/.claude/skills/enterprise-integration-testing/SKILL.md +1 -1
- package/.claude/skills/pentest-validation/SKILL.md +1 -1
- package/.claude/skills/qe-browser/evals/qe-browser.yaml +46 -63
- package/.claude/skills/qe-browser/scripts/smoke-test.sh +16 -4
- package/.claude/skills/skills-manifest.json +1 -1
- package/CHANGELOG.md +52 -0
- package/assets/skills/accessibility-testing/SKILL.md +18 -0
- package/assets/skills/qe-browser/evals/qe-browser.yaml +46 -63
- package/assets/skills/qe-browser/scripts/smoke-test.sh +16 -4
- 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-XFJIW42U.js +2 -0
- package/dist/cli/chunks/{agent-booster-wasm-O6EXMPMF.js → agent-booster-wasm-IECTFMRK.js} +2 -2
- package/dist/cli/chunks/{agent-handler-4LPJVTJU.js → agent-handler-HLLTKZ5G.js} +2 -2
- package/dist/cli/chunks/{agent-memory-branch-PRR323JZ.js → agent-memory-branch-WJUD3DS4.js} +2 -2
- package/dist/cli/chunks/aqe-learning-engine-UD4SXENM.js +2 -0
- package/dist/cli/chunks/{audit-YCKXQOXD.js → audit-3DLZNWHO.js} +2 -2
- package/dist/cli/chunks/base-ETEN7L2V.js +2 -0
- package/dist/cli/chunks/{better-sqlite3-44RIH62G.js → better-sqlite3-Q356NEQ6.js} +2 -2
- package/dist/cli/chunks/brain-handler-MX2HP7LO.js +89 -0
- package/dist/cli/chunks/{branch-enumerator-RVVS2UYR.js → branch-enumerator-Z3TF3HVO.js} +2 -2
- package/dist/cli/chunks/{browser-L6IKC4PR.js → browser-Z6PQ7FTO.js} +2 -2
- package/dist/cli/chunks/browser-workflow-KVHPOIBA.js +2 -0
- package/dist/cli/chunks/{chunk-JOGKQTCU.js → chunk-2KCMS4UW.js} +3 -3
- package/dist/cli/chunks/{chunk-VUS4VRPQ.js → chunk-2MJEAEOW.js} +2 -2
- package/dist/cli/chunks/{chunk-FNKKENLS.js → chunk-3ADFXSO2.js} +2 -2
- package/dist/cli/chunks/{chunk-JN7MSUGK.js → chunk-3CAPNE2H.js} +2 -2
- package/dist/cli/chunks/{chunk-MFGYMNNY.js → chunk-3EUA73H6.js} +2 -2
- package/dist/cli/chunks/{chunk-ORHCO2I7.js → chunk-3H657FNU.js} +2 -2
- package/dist/cli/chunks/{chunk-OZBTC26R.js → chunk-3K4IX7L4.js} +2 -2
- package/dist/cli/chunks/{chunk-GIUAY4KY.js → chunk-3SLFWPRE.js} +3 -3
- package/dist/cli/chunks/{chunk-P5YSBYZV.js → chunk-3ZGYB23S.js} +1 -1
- package/dist/cli/chunks/{chunk-6BK2S2WE.js → chunk-46K7ALFU.js} +2 -2
- package/dist/cli/chunks/{chunk-I3P5RZX7.js → chunk-4CFQZHUC.js} +3 -3
- package/dist/cli/chunks/{chunk-DMZ2XOEW.js → chunk-4PFHQH4B.js} +2 -2
- package/dist/cli/chunks/{chunk-TOSFK4VG.js → chunk-4ZN4GM7W.js} +1 -1
- package/dist/cli/chunks/{chunk-MXIFVOYA.js → chunk-5A5XANSD.js} +2 -2
- package/dist/cli/chunks/{chunk-UG2J5MTY.js → chunk-5E7FVOOG.js} +1 -1
- package/dist/cli/chunks/chunk-5LDXAVDC.js +2 -0
- package/dist/cli/chunks/{chunk-KFAN5FZM.js → chunk-666L7MC2.js} +2 -2
- package/dist/cli/chunks/{chunk-ZCRLZINE.js → chunk-66BUIFFH.js} +2 -2
- package/dist/cli/chunks/{chunk-6EZY2QVM.js → chunk-6V5P2VMQ.js} +8 -8
- package/dist/cli/chunks/{chunk-YPMBD44A.js → chunk-6XKZ62O7.js} +2 -2
- package/dist/cli/chunks/{chunk-JNLKLC7G.js → chunk-77OVXVN2.js} +2 -2
- package/dist/cli/chunks/{chunk-I5U64MHU.js → chunk-7DP2IQ6F.js} +2 -2
- package/dist/cli/chunks/{chunk-FFACJODG.js → chunk-7IF4LRX2.js} +2 -2
- package/dist/cli/chunks/{chunk-36YZ2UF7.js → chunk-7JFSMXIA.js} +2 -2
- package/dist/cli/chunks/{chunk-VU4QET3C.js → chunk-7MF6LVLH.js} +2 -2
- package/dist/cli/chunks/{chunk-WELNFHDN.js → chunk-7NMLIJHL.js} +1 -1
- package/dist/cli/chunks/{chunk-IOHDE27P.js → chunk-7PHYOV2X.js} +2 -2
- package/dist/cli/chunks/{chunk-YZBY4ZRF.js → chunk-7V2Z3PUJ.js} +2 -2
- package/dist/cli/chunks/{chunk-GM5LIYLQ.js → chunk-AA6IUBCM.js} +2 -2
- package/dist/cli/chunks/{chunk-TJOZPPZR.js → chunk-AFLQFUXA.js} +2 -2
- package/dist/cli/chunks/{chunk-KJB6JJXT.js → chunk-BCT26J7X.js} +1 -1
- package/dist/cli/chunks/{chunk-D6APBW66.js → chunk-BEE5KXQT.js} +1 -1
- package/dist/cli/chunks/{chunk-A2TK52B2.js → chunk-BNDK7JRW.js} +2 -2
- package/dist/cli/chunks/{chunk-4EQWK6P6.js → chunk-CR7LLS26.js} +2 -2
- package/dist/cli/chunks/{chunk-S2KGZJHS.js → chunk-DBCN7R63.js} +1 -1
- package/dist/cli/chunks/{chunk-BNPJMPM3.js → chunk-DF3DZP7H.js} +2 -2
- package/dist/cli/chunks/{chunk-OGLS6HB4.js → chunk-DJPS7H2M.js} +1 -1
- package/dist/cli/chunks/{chunk-G7L5Y47C.js → chunk-ED5OUSYZ.js} +1 -1
- package/dist/cli/chunks/{chunk-PZF5ISGS.js → chunk-EFTK4ZVP.js} +1 -1
- package/dist/cli/chunks/chunk-FEQ5RDQL.js +18 -0
- package/dist/cli/chunks/{chunk-VDGWDDBC.js → chunk-FKQV52TC.js} +2 -2
- package/dist/cli/chunks/{chunk-DD4T7ZUM.js → chunk-FLWIEPAT.js} +1 -1
- package/dist/cli/chunks/{chunk-5DWTU2PN.js → chunk-FQTUUZVK.js} +1 -1
- package/dist/cli/chunks/{chunk-4JYLXYAH.js → chunk-G5DMEEQQ.js} +1 -1
- package/dist/cli/chunks/{chunk-JLBUS4PR.js → chunk-GB6D3SSY.js} +2 -2
- package/dist/cli/chunks/{chunk-HEQ23HBE.js → chunk-GP7IXB3E.js} +2 -2
- package/dist/cli/chunks/{chunk-3NUMJB3U.js → chunk-H3JEGAFC.js} +9 -9
- package/dist/cli/chunks/{chunk-ZFZX2NA3.js → chunk-H4BZJVKU.js} +2 -2
- package/dist/cli/chunks/{chunk-AOYN6XYJ.js → chunk-HFGCLV56.js} +1 -1
- package/dist/cli/chunks/{chunk-XNXOW7BQ.js → chunk-HJUC2DE6.js} +2 -2
- package/dist/cli/chunks/{chunk-NWZYULZE.js → chunk-HN6GVQ4Q.js} +4 -4
- package/dist/cli/chunks/{chunk-RQFC7Q33.js → chunk-HON4X4Z3.js} +2 -2
- package/dist/cli/chunks/{chunk-AEQMQVDJ.js → chunk-HVAW64YW.js} +2 -2
- package/dist/cli/chunks/{chunk-5MWNXDQW.js → chunk-HXF4FUPY.js} +2 -2
- package/dist/cli/chunks/{chunk-HJJTLOWZ.js → chunk-IUQ6HE2J.js} +2 -2
- package/dist/cli/chunks/{chunk-IH4OOAEP.js → chunk-J2ERTUDX.js} +1 -1
- package/dist/cli/chunks/{chunk-DNFDSDKE.js → chunk-JCQ5PXVM.js} +2 -2
- package/dist/cli/chunks/{chunk-XH774Q6Z.js → chunk-JNXIYHLI.js} +1 -1
- package/dist/cli/chunks/{chunk-ERMIIRYN.js → chunk-JUKCBZCZ.js} +1 -1
- package/dist/cli/chunks/{chunk-AHVUILGE.js → chunk-JZOMOYHZ.js} +1 -1
- package/dist/cli/chunks/{chunk-UAAJ3BSW.js → chunk-KLVS6FT2.js} +2 -2
- package/dist/cli/chunks/{chunk-GUEK5DOK.js → chunk-KR7S4IZZ.js} +2 -2
- package/dist/cli/chunks/{chunk-VQB5SLXZ.js → chunk-L2GANTQN.js} +2 -2
- package/dist/cli/chunks/{chunk-GALNZTYE.js → chunk-LJINNQNN.js} +2 -2
- package/dist/cli/chunks/{chunk-IL3ESNHA.js → chunk-LSA4XGSE.js} +3 -3
- package/dist/cli/chunks/{chunk-M2RO34V7.js → chunk-LVA53A5R.js} +4 -4
- package/dist/cli/chunks/{chunk-LJ3WQIBN.js → chunk-LVK2PDUW.js} +1 -1
- package/dist/cli/chunks/{chunk-3ZKTPPIC.js → chunk-LWG7LKOK.js} +1 -1
- package/dist/cli/chunks/{chunk-PFSSI3YR.js → chunk-MECDNFOJ.js} +2 -2
- package/dist/cli/chunks/{chunk-FWI7PK4X.js → chunk-MFRC267A.js} +1 -1
- package/dist/cli/chunks/{chunk-WE7KIXR6.js → chunk-MJKFU6A6.js} +2 -2
- package/dist/cli/chunks/{chunk-5U6M4XCP.js → chunk-MQHP65QB.js} +3 -3
- package/dist/cli/chunks/{chunk-7732TLNA.js → chunk-MTF6ABUH.js} +2 -2
- package/dist/cli/chunks/{chunk-ME4LVBTT.js → chunk-N5ZTPAX7.js} +2 -2
- package/dist/cli/chunks/{chunk-NWGIQCCO.js → chunk-NCXXXZGL.js} +1 -1
- package/dist/cli/chunks/{chunk-DJLRRCR6.js → chunk-NIXMFJJC.js} +2 -2
- package/dist/cli/chunks/{chunk-JWR3NNFA.js → chunk-NLU4XJBN.js} +1 -1
- package/dist/cli/chunks/{chunk-DGUAAG3T.js → chunk-NOJVROCD.js} +1 -1
- package/dist/cli/chunks/{chunk-Z3PSKGBO.js → chunk-OE7SGIX2.js} +2 -2
- package/dist/cli/chunks/{chunk-KHUFPJE4.js → chunk-OP7X434R.js} +2 -2
- package/dist/cli/chunks/{chunk-WUYJYRBY.js → chunk-P4IYRPCB.js} +1 -1
- package/dist/cli/chunks/{chunk-GOTVYSX5.js → chunk-PNZADZSI.js} +3 -3
- package/dist/cli/chunks/{chunk-3PZ2QLLR.js → chunk-PPUEXTH2.js} +3 -3
- package/dist/cli/chunks/{chunk-6J6GXRHX.js → chunk-PQLT3X6X.js} +3 -3
- package/dist/cli/chunks/{chunk-VVKENR4I.js → chunk-QEKZA2NJ.js} +1 -1
- package/dist/cli/chunks/{chunk-S6SM7LJK.js → chunk-QKQAQPXY.js} +2 -2
- package/dist/cli/chunks/{chunk-LWHM5BWD.js → chunk-RFLSJ7OL.js} +2 -2
- package/dist/cli/chunks/{chunk-WSZVSDD5.js → chunk-RVQXMMRO.js} +2 -2
- package/dist/cli/chunks/{chunk-Q4DAYLH4.js → chunk-RYCAVZSD.js} +2 -2
- package/dist/cli/chunks/{chunk-VEAVDXXT.js → chunk-SMNOZEM7.js} +2 -2
- package/dist/cli/chunks/{chunk-4RDTR2OF.js → chunk-T36IXY5W.js} +2 -2
- package/dist/cli/chunks/{chunk-J3XLOHWB.js → chunk-T7VIUEKI.js} +2 -2
- package/dist/cli/chunks/{chunk-J5YOXLBD.js → chunk-TFBEX7ED.js} +1 -1
- package/dist/cli/chunks/{chunk-Y3X5OS5F.js → chunk-TPRYLARW.js} +2 -2
- package/dist/cli/chunks/{chunk-SY74WSBN.js → chunk-TR4NPMRW.js} +2 -2
- package/dist/cli/chunks/{chunk-WVN4YJSF.js → chunk-TUPFBZKO.js} +1 -1
- package/dist/cli/chunks/{chunk-UUVTLYUK.js → chunk-TWEBJWJI.js} +2 -2
- package/dist/cli/chunks/{chunk-QUK34CSU.js → chunk-UH7TV6BY.js} +1 -1
- package/dist/cli/chunks/{chunk-QLWP7ZIT.js → chunk-UT4CXF6C.js} +2 -2
- package/dist/cli/chunks/{chunk-UIYK4Y7K.js → chunk-V2ELGHLG.js} +2 -2
- package/dist/cli/chunks/{chunk-ZU5VHW6P.js → chunk-VK2GKQYI.js} +2 -2
- package/dist/cli/chunks/{chunk-FYBTGEOV.js → chunk-VNAAXZGF.js} +1 -1
- package/dist/cli/chunks/{chunk-G2KQUEGY.js → chunk-VOAECU7B.js} +2 -2
- package/dist/cli/chunks/{chunk-3GIZRGX6.js → chunk-W4ZV6LAJ.js} +2 -2
- package/dist/cli/chunks/{chunk-5HUAD4UU.js → chunk-W6TMZY5R.js} +2 -2
- package/dist/cli/chunks/{chunk-KVN4FTPT.js → chunk-WKLSXJD4.js} +2 -2
- package/dist/cli/chunks/{chunk-BOMJHE4I.js → chunk-WSKASZYC.js} +2 -2
- package/dist/cli/chunks/{chunk-6GKXC6DE.js → chunk-WVFLNGOK.js} +2 -2
- package/dist/cli/chunks/{chunk-SUXUCW5I.js → chunk-WVHH3OQ4.js} +2 -2
- package/dist/cli/chunks/{chunk-CGC63MGF.js → chunk-XAULPLOC.js} +4 -4
- package/dist/cli/chunks/{chunk-L4IWZXSC.js → chunk-XKMMFQSJ.js} +1 -1
- package/dist/cli/chunks/{chunk-7IJBZGZY.js → chunk-XQ6WIPDC.js} +1 -1
- package/dist/cli/chunks/{chunk-LKGLKX2A.js → chunk-ZCE6JNRI.js} +2 -2
- package/dist/cli/chunks/{chunk-BFCMOMOF.js → chunk-ZCZJYM42.js} +1 -1
- package/dist/cli/chunks/{chunk-2L3BCZ2F.js → chunk-ZXLF3IKT.js} +1 -1
- package/dist/cli/chunks/{ci-QQ4F5TYO.js → ci-TTP5HJSW.js} +2 -2
- package/dist/cli/chunks/{ci-output-QC4WRENA.js → ci-output-TKESU45X.js} +2 -2
- package/dist/cli/chunks/{circuit-breaker-HFQUNYTK.js → circuit-breaker-GFRV5R7E.js} +2 -2
- package/dist/cli/chunks/{claude-flow-setup-XNSCWIUN.js → claude-flow-setup-LY6MADFA.js} +2 -2
- package/dist/cli/chunks/client-ZDVM5WFL.js +2 -0
- package/dist/cli/chunks/{cline-installer-S3CECBYL.js → cline-installer-OSAILLDH.js} +2 -2
- package/dist/cli/chunks/{code-QHUELDUH.js → code-ASRSOGYH.js} +2 -2
- package/dist/cli/chunks/{code-index-extractor-QLA5EQTE.js → code-index-extractor-AMLGVHB7.js} +2 -2
- package/dist/cli/chunks/{codex-installer-CQ7JNNOA.js → codex-installer-3CKH3WV4.js} +2 -2
- package/dist/cli/chunks/{completions-S33U3KIT.js → completions-MXNPWLOE.js} +91 -10
- package/dist/cli/chunks/{complexity-analyzer-J7IEW3EM.js → complexity-analyzer-2Z347PXF.js} +2 -2
- package/dist/cli/chunks/{continuedev-installer-DVU24D37.js → continuedev-installer-LE7K745N.js} +2 -2
- package/dist/cli/chunks/{copilot-installer-DYISOPBC.js → copilot-installer-CHJL3275.js} +2 -2
- package/dist/cli/chunks/{cost-tracker-URJADKKS.js → cost-tracker-C3ZWNNSV.js} +2 -2
- package/dist/cli/chunks/{coverage-NGMKJNW6.js → coverage-6JOXBVDL.js} +3 -3
- package/dist/cli/chunks/cross-domain-router-J5VK276J.js +2 -0
- package/dist/cli/chunks/{cursor-installer-DFBJRDSY.js → cursor-installer-RKCNWO42.js} +2 -2
- package/dist/cli/chunks/{daemon-JSKKVVCV.js → daemon-XXWOT6TM.js} +3 -3
- package/dist/cli/chunks/{dag-attention-scheduler-YITFS6MR.js → dag-attention-scheduler-37MG6XR4.js} +2 -2
- package/dist/cli/chunks/{detect-5APZP2D3.js → detect-QOTL36CE.js} +2 -2
- package/dist/cli/chunks/{domain-handler-WHH6XPSZ.js → domain-handler-TJNLNJ7Z.js} +2 -2
- package/dist/cli/chunks/{domain-transfer-SERX53SS.js → domain-transfer-FDHC2MGH.js} +2 -2
- package/dist/cli/chunks/dream-VCLN6RM4.js +2 -0
- package/dist/cli/chunks/esm-node-YZSRCH6T.js +2 -0
- package/dist/cli/chunks/eval-JP7CLUTD.js +15 -0
- package/dist/cli/chunks/{fast-paths-4MSOOJVK.js → fast-paths-CWTVLIIC.js} +2 -2
- package/dist/cli/chunks/{feature-flags-564YFR65.js → feature-flags-H2UU53L4.js} +2 -2
- package/dist/cli/chunks/{feature-flags-WJT57IEJ.js → feature-flags-SKFBAHR3.js} +2 -2
- package/dist/cli/chunks/{file-discovery-5QVG65WF.js → file-discovery-RWVGKIDB.js} +2 -2
- package/dist/cli/chunks/{fleet-CF5JRK5B.js → fleet-JOSUYRTZ.js} +3 -3
- package/dist/cli/chunks/{gnn-wrapper-NYQ77563.js → gnn-wrapper-WNOZFTDD.js} +2 -2
- package/dist/cli/chunks/{heartbeat-handler-42QJPKHE.js → heartbeat-handler-73YSR6K7.js} +4 -4
- package/dist/cli/chunks/{heartbeat-scheduler-7XEAV74Y.js → heartbeat-scheduler-EN52JZUX.js} +2 -2
- package/dist/cli/chunks/hnsw-adapter-Y5HVTNJW.js +2 -0
- package/dist/cli/chunks/hnsw-index-NZTCPZA5.js +2 -0
- package/dist/cli/chunks/{hnsw-legacy-bridge-ZRR6PGWN.js → hnsw-legacy-bridge-PWD6DXS4.js} +2 -2
- package/dist/cli/chunks/{hnswlib-node-DY7NOW76.js → hnswlib-node-VAZOCNY7.js} +2 -2
- package/dist/cli/chunks/{hooks-IRRHEJLR.js → hooks-K7XGDF2Y.js} +6 -6
- package/dist/cli/chunks/{hybrid-router-S4JXJLUY.js → hybrid-router-6W323WKW.js} +2 -2
- package/dist/cli/chunks/{hypergraph-engine-WFHZJMP2.js → hypergraph-engine-R2N4C24I.js} +2 -2
- package/dist/cli/chunks/{hypergraph-handler-LHUKR7PT.js → hypergraph-handler-AY4YZDOG.js} +3 -3
- package/dist/cli/chunks/impact-analyzer-ROWLIS6H.js +2 -0
- package/dist/cli/chunks/{init-handler-ZBIW7PSB.js → init-handler-UDBW4P3Z.js} +6 -6
- package/dist/cli/chunks/init-wizard-MI76CUL5.js +2 -0
- package/dist/cli/chunks/kernel-5WVAV5RX.js +2 -0
- package/dist/cli/chunks/{kilocode-installer-JYHA4NW7.js → kilocode-installer-J2NZUDEQ.js} +2 -2
- package/dist/cli/chunks/{kiro-installer-OBXTRK77.js → kiro-installer-AHOOKFQH.js} +2 -2
- package/dist/cli/chunks/knowledge-graph-QXL3AWPV.js +2 -0
- package/dist/cli/chunks/{learning-OAEJHEJD.js → learning-VC7X2HKA.js} +3 -3
- package/dist/cli/chunks/{llm-router-NNEOZAVB.js → llm-router-3PU7CH5P.js} +4 -4
- package/dist/cli/chunks/{load-WIKLBESW.js → load-WB4JD6X7.js} +2 -2
- package/dist/cli/chunks/load-test-2JOY7YH6.js +2 -0
- package/dist/cli/chunks/{mcp-KR43GFGP.js → mcp-QUU2DYYK.js} +2 -2
- package/dist/cli/chunks/{memory-KQIYKAYU.js → memory-UAEWPG34.js} +5 -5
- package/dist/cli/chunks/memory-backend-ZKGLAWQZ.js +2 -0
- package/dist/cli/chunks/{memory-handlers-LAI4AO4O.js → memory-handlers-3FBXIZG4.js} +2 -2
- package/dist/cli/chunks/{multi-model-executor-NPS3VOAR.js → multi-model-executor-CIUHXR43.js} +2 -2
- package/dist/cli/chunks/{opencode-installer-FE475WME.js → opencode-installer-VV6RIHNR.js} +2 -2
- package/dist/cli/chunks/{orchestrator-MW4MZ3RW.js → orchestrator-WV27PZZM.js} +20 -20
- package/dist/cli/chunks/{pipeline-R2TGZSUA.js → pipeline-JRBCX2U3.js} +2 -2
- package/dist/cli/chunks/{platform-N2GZBCBP.js → platform-TUPMH4ND.js} +2 -2
- package/dist/cli/chunks/{plugin-V2AQF23V.js → plugin-H757CYQK.js} +2 -2
- package/dist/cli/chunks/{prime-radiant-advanced-wasm-ZQSYRLRS.js → prime-radiant-advanced-wasm-5BWO25RA.js} +2 -2
- package/dist/cli/chunks/protocol-executor-3Q4QY7G6.js +2 -0
- package/dist/cli/chunks/{protocol-handler-V3U724F2.js → protocol-handler-Z6DCNTUU.js} +2 -2
- package/dist/cli/chunks/{prove-NCH56HZB.js → prove-4OGWFOUM.js} +2 -2
- package/dist/cli/chunks/{provider-manager-7NUHS3T5.js → provider-manager-K736L6LN.js} +2 -2
- package/dist/cli/chunks/qe-reasoning-bank-SAMJF3NF.js +2 -0
- package/dist/cli/chunks/{quality-J3IVPPPW.js → quality-YFLEATGZ.js} +2 -2
- package/dist/cli/chunks/queen-coordinator-OFRH67Y2.js +2 -0
- package/dist/cli/chunks/{real-embeddings-VURZXAEY.js → real-embeddings-5QUSL7J4.js} +2 -2
- package/dist/cli/chunks/{roocode-installer-STWFJGMR.js → roocode-installer-HDWE5XW3.js} +2 -2
- package/dist/cli/chunks/router-UDHEENEY.js +2 -0
- package/dist/cli/chunks/routing-feedback-PBZRVFVL.js +2 -0
- package/dist/cli/chunks/{routing-handler-6GZT7EXM.js → routing-handler-P6PP3FYW.js} +2 -2
- package/dist/cli/chunks/{ruvector-commands-LCPAH6WH.js → ruvector-commands-VNMTRQML.js} +2 -2
- package/dist/cli/chunks/{rvf-dual-writer-76LWFT5X.js → rvf-dual-writer-A7VW5CAT.js} +2 -2
- package/dist/cli/chunks/{rvf-migration-adapter-G7KFWJKY.js → rvf-migration-adapter-QIPSNASM.js} +2 -2
- package/dist/cli/chunks/{rvf-migration-coordinator-3DXOUPWF.js → rvf-migration-coordinator-XT4XDLRZ.js} +2 -2
- package/dist/cli/chunks/rvf-native-adapter-CJFEDG74.js +2 -0
- package/dist/cli/chunks/safe-db-YMSZFHWP.js +2 -0
- package/dist/cli/chunks/schedule-B43N6CVB.js +2 -0
- package/dist/cli/chunks/scheduler-ITZH5YQM.js +2 -0
- package/dist/cli/chunks/{security-XDBPYA5T.js → security-E2XCP5CG.js} +3 -3
- package/dist/cli/chunks/shared-rvf-adapter-PV5ZBJ25.js +2 -0
- package/dist/cli/chunks/{shared-rvf-dual-writer-UGXTS2XI.js → shared-rvf-dual-writer-NPWTXHUI.js} +2 -2
- package/dist/cli/chunks/sqlite-persistence-RK5CKPHB.js +2 -0
- package/dist/cli/chunks/{status-handler-ZLXES3QL.js → status-handler-MWVNDZSZ.js} +2 -2
- package/dist/cli/chunks/{structural-health-4PFCOQ7T.js → structural-health-2KZO43IF.js} +2 -2
- package/dist/cli/chunks/{sync-3DROIEZN.js → sync-C5BOK3WU.js} +2 -2
- package/dist/cli/chunks/{task-handler-4UGZ5VIE.js → task-handler-KRVSHJGJ.js} +2 -2
- package/dist/cli/chunks/{task-handlers-I5VVBTWI.js → task-handlers-CKOHD633.js} +2 -2
- package/dist/cli/chunks/{test-Z2MM7O5A.js → test-3B7FK6MJ.js} +4 -4
- package/dist/cli/chunks/{test-scheduling-AP76GKN5.js → test-scheduling-HZIMSTAX.js} +3 -3
- package/dist/cli/chunks/{token-bootstrap-P54N6PZV.js → token-bootstrap-JJCANIHJ.js} +2 -2
- package/dist/cli/chunks/{token-usage-AXAZTPA6.js → token-usage-5VCMBZU7.js} +2 -2
- package/dist/cli/chunks/{transformers-VOZ2Z7FS.js → transformers-ETUTMOTF.js} +2 -2
- package/dist/cli/chunks/{tree-sitter-wasm-parser-IYKLBTXB.js → tree-sitter-wasm-parser-TMR44BKP.js} +2 -2
- package/dist/cli/chunks/{types-TKDH5EBW.js → types-GYT6373C.js} +2 -2
- package/dist/cli/chunks/unified-memory-LIKELZVA.js +2 -0
- package/dist/cli/chunks/unified-memory-hnsw-VTN3MUB4.js +2 -0
- package/dist/cli/chunks/unified-persistence-MQVUY5WN.js +2 -0
- package/dist/cli/chunks/upgrade-534QLY7P.js +5 -0
- package/dist/cli/chunks/{validate-ZGF5FVZE.js → validate-UBVF3CSS.js} +2 -2
- package/dist/cli/chunks/{validate-swarm-OPWWUWYA.js → validate-swarm-2XD45EVM.js} +2 -2
- package/dist/cli/chunks/{vibium-HEQUGRKJ.js → vibium-NMT6AQ4S.js} +2 -2
- package/dist/cli/chunks/visual-security-HVJWGY7T.js +2 -0
- package/dist/cli/chunks/{web-tree-sitter-JZ7JCJJR.js → web-tree-sitter-RNG6NRDD.js} +2 -2
- package/dist/cli/chunks/{windsurf-installer-2SGRCS6C.js → windsurf-installer-RVCDSJT3.js} +2 -2
- package/dist/cli/chunks/witness-chain-5R322YYF.js +2 -0
- package/dist/cli/chunks/{witness-chain-LJUYOCB5.js → witness-chain-YDFB22MT.js} +2 -2
- package/dist/cli/chunks/{workflow-QORI3KO7.js → workflow-MHW4KHNK.js} +4 -4
- package/dist/cli/chunks/workflow-orchestrator-637BCZI4.js +2 -0
- package/dist/cli/chunks/{wrappers-3NR7LNB5.js → wrappers-SAZY3C2S.js} +2 -2
- package/dist/cli/commands/eval.js +86 -0
- 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/browser-engine-installer.d.ts +60 -1
- package/dist/init/browser-engine-installer.js +73 -3
- package/dist/init/phases/09-assets.js +9 -2
- 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 +1 -1
- package/dist/validation/command-eval-runner.d.ts +154 -0
- package/dist/validation/command-eval-runner.js +293 -0
- package/dist/validation/index.d.ts +2 -0
- package/dist/validation/index.js +4 -0
- package/package.json +1 -1
- package/dist/cli/chunks/adapter-W2EM7ZQ7.js +0 -2
- package/dist/cli/chunks/aqe-learning-engine-JQMPNHQU.js +0 -2
- package/dist/cli/chunks/base-EOPYE6JR.js +0 -2
- package/dist/cli/chunks/brain-handler-IAYJBAFL.js +0 -68
- package/dist/cli/chunks/browser-workflow-CSARLAJD.js +0 -2
- package/dist/cli/chunks/chunk-53KLVMAT.js +0 -18
- package/dist/cli/chunks/chunk-STYNOKOM.js +0 -2
- package/dist/cli/chunks/client-3GECKJWB.js +0 -2
- package/dist/cli/chunks/cross-domain-router-UYONX76U.js +0 -2
- package/dist/cli/chunks/dream-Z5QDQJSM.js +0 -2
- package/dist/cli/chunks/esm-node-FOI5Y3O2.js +0 -2
- package/dist/cli/chunks/eval-FM3BLVFO.js +0 -15
- package/dist/cli/chunks/hnsw-adapter-NOAQ76QF.js +0 -2
- package/dist/cli/chunks/hnsw-index-KDIZQRSB.js +0 -2
- package/dist/cli/chunks/impact-analyzer-VDXJBWFG.js +0 -2
- package/dist/cli/chunks/init-wizard-Q6DEACKX.js +0 -2
- package/dist/cli/chunks/kernel-YNQOGTM5.js +0 -2
- package/dist/cli/chunks/knowledge-graph-GOZG3YOM.js +0 -2
- package/dist/cli/chunks/load-test-UJLTMPXW.js +0 -2
- package/dist/cli/chunks/memory-backend-WJH6XER3.js +0 -2
- package/dist/cli/chunks/protocol-executor-LYYYHXAX.js +0 -2
- package/dist/cli/chunks/qe-reasoning-bank-JK4UKLYY.js +0 -2
- package/dist/cli/chunks/queen-coordinator-6OKLSCHV.js +0 -2
- package/dist/cli/chunks/router-DDZHCGUD.js +0 -2
- package/dist/cli/chunks/routing-feedback-BA66F37P.js +0 -2
- package/dist/cli/chunks/rvf-native-adapter-TXTRJNPW.js +0 -2
- package/dist/cli/chunks/safe-db-IFBVWIGF.js +0 -2
- package/dist/cli/chunks/schedule-WMZLOPCW.js +0 -2
- package/dist/cli/chunks/scheduler-WBORWJD5.js +0 -2
- package/dist/cli/chunks/shared-rvf-adapter-SQQ27EEI.js +0 -2
- package/dist/cli/chunks/sqlite-persistence-XH47B3BG.js +0 -2
- package/dist/cli/chunks/unified-memory-NHJHPLIC.js +0 -2
- package/dist/cli/chunks/unified-memory-hnsw-IMMCI2XK.js +0 -2
- package/dist/cli/chunks/unified-persistence-JS6CEV35.js +0 -2
- package/dist/cli/chunks/visual-security-XLO5JBVP.js +0 -2
- package/dist/cli/chunks/witness-chain-PPWPHYTY.js +0 -2
- package/dist/cli/chunks/workflow-orchestrator-H4DKRHVP.js +0 -2
|
@@ -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 {
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import path from 'path';
|
|
8
8
|
import chalk from 'chalk';
|
|
9
|
-
import { exportBrain, importBrain, brainInfo, witnessBackfill, } from '../brain-commands.js';
|
|
9
|
+
import { exportBrain, importBrain, brainInfo, brainDiff, brainSearch, witnessBackfill, } from '../brain-commands.js';
|
|
10
10
|
// ============================================================================
|
|
11
11
|
// Brain Handler
|
|
12
12
|
// ============================================================================
|
|
@@ -56,6 +56,32 @@ export class BrainHandler {
|
|
|
56
56
|
.action(async (options) => {
|
|
57
57
|
await this.executeWitnessBackfill(options);
|
|
58
58
|
});
|
|
59
|
+
brain
|
|
60
|
+
.command('diff')
|
|
61
|
+
.description('Compare two brain exports (JSONL directory or .rvf file)')
|
|
62
|
+
.argument('<a>', 'Path to first brain export')
|
|
63
|
+
.argument('<b>', 'Path to second brain export')
|
|
64
|
+
.option('--table <name>', 'Restrict comparison to a single table')
|
|
65
|
+
.option('--verbose', 'Show the IDs of added/removed/changed records', false)
|
|
66
|
+
.option('--json', 'Emit the diff as JSON to stdout', false)
|
|
67
|
+
.action(async (a, b, options) => {
|
|
68
|
+
await this.executeDiff(a, b, options);
|
|
69
|
+
});
|
|
70
|
+
brain
|
|
71
|
+
.command('search')
|
|
72
|
+
.description('Search a JSONL brain export with filters')
|
|
73
|
+
.requiredOption('-i, --input <path>', 'Path to brain export directory (JSONL)')
|
|
74
|
+
.option('--table <name>', 'Table to search (default: qe_patterns)')
|
|
75
|
+
.option('--domain <name...>', 'Restrict to one or more domains')
|
|
76
|
+
.option('--pattern-type <type>', 'Restrict to a specific pattern_type (qe_patterns only)')
|
|
77
|
+
.option('--since <iso>', 'Include rows with timestamp ≥ <iso>')
|
|
78
|
+
.option('--until <iso>', 'Include rows with timestamp ≤ <iso>')
|
|
79
|
+
.option('-q, --query <text>', 'Substring match across name + description (case-insensitive)')
|
|
80
|
+
.option('-l, --limit <n>', 'Maximum results to return', '20')
|
|
81
|
+
.option('--json', 'Emit results as JSON to stdout', false)
|
|
82
|
+
.action(async (options) => {
|
|
83
|
+
await this.executeSearch(options);
|
|
84
|
+
});
|
|
59
85
|
}
|
|
60
86
|
async executeExport(options) {
|
|
61
87
|
try {
|
|
@@ -224,6 +250,51 @@ export class BrainHandler {
|
|
|
224
250
|
await this.cleanupAndExit(1);
|
|
225
251
|
}
|
|
226
252
|
}
|
|
253
|
+
async executeDiff(a, b, options) {
|
|
254
|
+
try {
|
|
255
|
+
const result = await brainDiff(path.resolve(a), path.resolve(b), {
|
|
256
|
+
tableFilter: options.table,
|
|
257
|
+
});
|
|
258
|
+
if (options.json) {
|
|
259
|
+
process.stdout.write(JSON.stringify(result, null, 2) + '\n');
|
|
260
|
+
await this.cleanupAndExit(result.identical ? 0 : 1);
|
|
261
|
+
return;
|
|
262
|
+
}
|
|
263
|
+
renderDiff(result, options.verbose);
|
|
264
|
+
// Exit code convention: 0 when identical, 1 when differences exist.
|
|
265
|
+
await this.cleanupAndExit(result.identical ? 0 : 1);
|
|
266
|
+
}
|
|
267
|
+
catch (error) {
|
|
268
|
+
console.error(chalk.red('\n Brain diff failed:'), error);
|
|
269
|
+
await this.cleanupAndExit(2);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
async executeSearch(options) {
|
|
273
|
+
try {
|
|
274
|
+
const limit = parseLimit(options.limit);
|
|
275
|
+
const domains = normalizeDomainOption(options.domain);
|
|
276
|
+
const result = await brainSearch(path.resolve(options.input), {
|
|
277
|
+
table: options.table,
|
|
278
|
+
domains,
|
|
279
|
+
patternType: options.patternType,
|
|
280
|
+
since: options.since,
|
|
281
|
+
until: options.until,
|
|
282
|
+
query: options.query,
|
|
283
|
+
limit,
|
|
284
|
+
});
|
|
285
|
+
if (options.json) {
|
|
286
|
+
process.stdout.write(JSON.stringify(result, null, 2) + '\n');
|
|
287
|
+
await this.cleanupAndExit(result.totalMatched > 0 ? 0 : 3);
|
|
288
|
+
return;
|
|
289
|
+
}
|
|
290
|
+
renderSearch(result);
|
|
291
|
+
await this.cleanupAndExit(result.totalMatched > 0 ? 0 : 3);
|
|
292
|
+
}
|
|
293
|
+
catch (error) {
|
|
294
|
+
console.error(chalk.red('\n Brain search failed:'), error);
|
|
295
|
+
await this.cleanupAndExit(2);
|
|
296
|
+
}
|
|
297
|
+
}
|
|
227
298
|
async executeWitnessBackfill(options) {
|
|
228
299
|
try {
|
|
229
300
|
console.log(chalk.blue('\n Running witness chain backfill...\n'));
|
|
@@ -258,6 +329,8 @@ Subcommands:
|
|
|
258
329
|
export Export brain state to a portable .rvf file or JSONL directory
|
|
259
330
|
import Import a brain export into the local database
|
|
260
331
|
info Show manifest metadata for an existing brain export
|
|
332
|
+
diff Compare two brain exports (manifest always; record-level for JSONL)
|
|
333
|
+
search Filtered search over a JSONL brain export
|
|
261
334
|
|
|
262
335
|
Examples:
|
|
263
336
|
aqe brain export -o .agentic-qe/brain.rvf
|
|
@@ -266,6 +339,9 @@ Examples:
|
|
|
266
339
|
aqe brain import -i .agentic-qe/brain.rvf --strategy latest-wins
|
|
267
340
|
aqe brain import -i .agentic-qe/brain.rvf --dry-run
|
|
268
341
|
aqe brain info -i .agentic-qe/brain.rvf
|
|
342
|
+
aqe brain diff ./brain-a ./brain-b --verbose
|
|
343
|
+
aqe brain search -i ./brain-export --query oauth --domain test-generation
|
|
344
|
+
aqe brain search -i ./brain-export --since 2026-03-01 --limit 50 --json
|
|
269
345
|
`;
|
|
270
346
|
}
|
|
271
347
|
}
|
|
@@ -285,6 +361,150 @@ function formatBytes(bytes) {
|
|
|
285
361
|
return `${(bytes / 1024).toFixed(1)} KB`;
|
|
286
362
|
return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
|
|
287
363
|
}
|
|
364
|
+
function parseLimit(raw) {
|
|
365
|
+
const n = Number.parseInt(raw, 10);
|
|
366
|
+
if (!Number.isFinite(n) || n < 1)
|
|
367
|
+
return 20;
|
|
368
|
+
return n;
|
|
369
|
+
}
|
|
370
|
+
function normalizeDomainOption(value) {
|
|
371
|
+
if (value === undefined)
|
|
372
|
+
return undefined;
|
|
373
|
+
const arr = Array.isArray(value) ? value : [value];
|
|
374
|
+
const out = [];
|
|
375
|
+
for (const raw of arr) {
|
|
376
|
+
for (const part of raw.split(',')) {
|
|
377
|
+
const trimmed = part.trim();
|
|
378
|
+
if (trimmed)
|
|
379
|
+
out.push(trimmed);
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
return out.length > 0 ? out : undefined;
|
|
383
|
+
}
|
|
384
|
+
function renderDiff(result, verbose) {
|
|
385
|
+
console.log(chalk.blue('\n Brain Diff\n'));
|
|
386
|
+
console.log(` A: ${chalk.cyan(result.pathA)} (${result.formatA})`);
|
|
387
|
+
console.log(` B: ${chalk.cyan(result.pathB)} (${result.formatB})`);
|
|
388
|
+
console.log(` Versions: ${chalk.cyan(result.manifestA.version)} → ${chalk.cyan(result.manifestB.version)}` +
|
|
389
|
+
(result.versionMatch ? chalk.gray(' (match)') : chalk.yellow(' (differ)')));
|
|
390
|
+
console.log(` Checksums: ${chalk.gray(result.manifestA.checksum.slice(0, 12))}… → ` +
|
|
391
|
+
`${chalk.gray(result.manifestB.checksum.slice(0, 12))}…` +
|
|
392
|
+
(result.checksumMatch ? chalk.gray(' (match)') : chalk.yellow(' (differ)')));
|
|
393
|
+
console.log(` Exported: ${chalk.gray(result.manifestA.exportedAt)} → ${chalk.gray(result.manifestB.exportedAt)}`);
|
|
394
|
+
console.log(` Records: ${chalk.cyan(result.manifestA.totalRecords)} → ${chalk.cyan(result.manifestB.totalRecords)} ` +
|
|
395
|
+
formatDelta(result.manifestB.totalRecords - result.manifestA.totalRecords));
|
|
396
|
+
if (result.domainsOnlyInA.length > 0 || result.domainsOnlyInB.length > 0) {
|
|
397
|
+
console.log(chalk.blue('\n Domains:'));
|
|
398
|
+
if (result.domainsOnlyInA.length > 0) {
|
|
399
|
+
console.log(` Only in A: ${chalk.yellow(result.domainsOnlyInA.join(', '))}`);
|
|
400
|
+
}
|
|
401
|
+
if (result.domainsOnlyInB.length > 0) {
|
|
402
|
+
console.log(` Only in B: ${chalk.yellow(result.domainsOnlyInB.join(', '))}`);
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
if (!result.recordLevel) {
|
|
406
|
+
console.log(chalk.gray('\n Note: record-level diff is only available when both sides are JSONL exports.\n' +
|
|
407
|
+
' Per-table counts shown below; re-export with --format jsonl for added/removed/changed IDs.'));
|
|
408
|
+
}
|
|
409
|
+
console.log(chalk.blue('\n Tables:'));
|
|
410
|
+
const changed = result.tableDiffs.filter(tableHasChange);
|
|
411
|
+
if (changed.length === 0) {
|
|
412
|
+
console.log(chalk.gray(' (no differences)'));
|
|
413
|
+
}
|
|
414
|
+
else {
|
|
415
|
+
for (const t of changed) {
|
|
416
|
+
console.log(` ${t.tableName.padEnd(28)} ${chalk.cyan(String(t.countA).padStart(7))} → ` +
|
|
417
|
+
`${chalk.cyan(String(t.countB).padStart(7))} ${formatDelta(t.delta)}` +
|
|
418
|
+
formatRecordBuckets(t, verbose));
|
|
419
|
+
if (verbose) {
|
|
420
|
+
if (t.added && t.added.length > 0)
|
|
421
|
+
printIdBucket('added', t.added);
|
|
422
|
+
if (t.removed && t.removed.length > 0)
|
|
423
|
+
printIdBucket('removed', t.removed);
|
|
424
|
+
if (t.changed && t.changed.length > 0)
|
|
425
|
+
printIdBucket('changed', t.changed);
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
console.log('');
|
|
430
|
+
if (result.identical) {
|
|
431
|
+
console.log(chalk.green(' Result: identical\n'));
|
|
432
|
+
}
|
|
433
|
+
else {
|
|
434
|
+
console.log(chalk.yellow(' Result: differences found\n'));
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
function tableHasChange(t) {
|
|
438
|
+
if (t.delta !== 0)
|
|
439
|
+
return true;
|
|
440
|
+
if (t.added && t.added.length > 0)
|
|
441
|
+
return true;
|
|
442
|
+
if (t.removed && t.removed.length > 0)
|
|
443
|
+
return true;
|
|
444
|
+
if (t.changed && t.changed.length > 0)
|
|
445
|
+
return true;
|
|
446
|
+
return false;
|
|
447
|
+
}
|
|
448
|
+
function formatDelta(delta) {
|
|
449
|
+
if (delta === 0)
|
|
450
|
+
return chalk.gray('(±0)');
|
|
451
|
+
if (delta > 0)
|
|
452
|
+
return chalk.green(`(+${delta})`);
|
|
453
|
+
return chalk.red(`(${delta})`);
|
|
454
|
+
}
|
|
455
|
+
function formatRecordBuckets(t, verbose) {
|
|
456
|
+
const parts = [];
|
|
457
|
+
if (t.added && t.added.length > 0)
|
|
458
|
+
parts.push(chalk.green(`+${t.added.length}`));
|
|
459
|
+
if (t.removed && t.removed.length > 0)
|
|
460
|
+
parts.push(chalk.red(`-${t.removed.length}`));
|
|
461
|
+
if (t.changed && t.changed.length > 0)
|
|
462
|
+
parts.push(chalk.yellow(`~${t.changed.length}`));
|
|
463
|
+
if (parts.length === 0)
|
|
464
|
+
return '';
|
|
465
|
+
if (verbose)
|
|
466
|
+
return ' ' + parts.join(' ');
|
|
467
|
+
return ' ' + chalk.gray('[') + parts.join(' ') + chalk.gray(']');
|
|
468
|
+
}
|
|
469
|
+
function printIdBucket(label, ids) {
|
|
470
|
+
const preview = ids.slice(0, 10).join(', ');
|
|
471
|
+
const suffix = ids.length > 10 ? chalk.gray(` …(+${ids.length - 10} more)`) : '';
|
|
472
|
+
console.log(` ${chalk.gray(label + ':')} ${preview}${suffix}`);
|
|
473
|
+
}
|
|
474
|
+
function renderSearch(result) {
|
|
475
|
+
console.log(chalk.blue('\n Brain Search\n'));
|
|
476
|
+
console.log(` Input: ${chalk.cyan(result.inputPath)}`);
|
|
477
|
+
console.log(` Table: ${chalk.cyan(result.table)}`);
|
|
478
|
+
console.log(` Scanned: ${chalk.cyan(result.totalScanned)} ` +
|
|
479
|
+
`Matched: ${chalk.cyan(result.totalMatched)} ` +
|
|
480
|
+
`Shown: ${chalk.cyan(result.hits.length)}` +
|
|
481
|
+
(result.truncated ? chalk.yellow(` (truncated to limit ${result.limit})`) : ''));
|
|
482
|
+
if (result.hits.length === 0) {
|
|
483
|
+
console.log(chalk.yellow('\n No matching rows.\n'));
|
|
484
|
+
return;
|
|
485
|
+
}
|
|
486
|
+
console.log('');
|
|
487
|
+
for (const hit of result.hits) {
|
|
488
|
+
const header = chalk.cyan(hit.id) +
|
|
489
|
+
(hit.display.patternType ? chalk.gray(` ${hit.display.patternType}`) : '') +
|
|
490
|
+
(hit.display.domain ? chalk.gray(` [${hit.display.domain}]`) : '') +
|
|
491
|
+
(hit.display.confidence !== undefined
|
|
492
|
+
? chalk.gray(` conf=${hit.display.confidence.toFixed(2)}`)
|
|
493
|
+
: '');
|
|
494
|
+
console.log(` ${header}`);
|
|
495
|
+
if (hit.display.name)
|
|
496
|
+
console.log(` ${chalk.bold(hit.display.name)}`);
|
|
497
|
+
if (hit.display.description) {
|
|
498
|
+
const desc = hit.display.description.length > 200
|
|
499
|
+
? hit.display.description.slice(0, 200) + '…'
|
|
500
|
+
: hit.display.description;
|
|
501
|
+
console.log(` ${chalk.gray(desc)}`);
|
|
502
|
+
}
|
|
503
|
+
if (hit.display.updatedAt)
|
|
504
|
+
console.log(` ${chalk.gray(hit.display.updatedAt)}`);
|
|
505
|
+
console.log('');
|
|
506
|
+
}
|
|
507
|
+
}
|
|
288
508
|
// ============================================================================
|
|
289
509
|
// Factory
|
|
290
510
|
// ============================================================================
|
package/dist/cli/index.js
CHANGED
|
@@ -47,7 +47,6 @@ console.log = (...args) => {
|
|
|
47
47
|
originalConsoleLog(...args);
|
|
48
48
|
};
|
|
49
49
|
// Also redirect timestamped INFO/WARN/ERROR log lines (e.g. "[07:12:24.372] [INFO ]")
|
|
50
|
-
const originalConsoleInfo = console.info.bind(console);
|
|
51
50
|
console.info = (...args) => {
|
|
52
51
|
process.stderr.write(args.map(String).join(' ') + '\n');
|
|
53
52
|
};
|
|
@@ -249,6 +248,11 @@ registerLazyCommand(program, {
|
|
|
249
248
|
description: 'Generate shell completions for aqe',
|
|
250
249
|
factory: () => import('./commands/completions.js').then(m => m.createCompletionsCommand(cleanupAndExit)),
|
|
251
250
|
});
|
|
251
|
+
registerLazyCommand(program, {
|
|
252
|
+
name: 'upgrade',
|
|
253
|
+
description: 'Detect optional native bindings and recommend install / flag changes',
|
|
254
|
+
factory: () => import('./commands/upgrade.js').then(m => m.createUpgradeCommand(cleanupAndExit)),
|
|
255
|
+
});
|
|
252
256
|
registerLazyCommand(program, {
|
|
253
257
|
name: 'fleet',
|
|
254
258
|
description: 'Fleet operations with multi-agent progress tracking',
|
|
@@ -13,6 +13,21 @@
|
|
|
13
13
|
* - No new runtime deps: shells out to `npm install -g vibium` via child_process.
|
|
14
14
|
*/
|
|
15
15
|
import { type SpawnSyncReturns } from 'node:child_process';
|
|
16
|
+
/**
|
|
17
|
+
* Default Vibium npm spec. Major-line pin via caret (`^26.3.18`) — npm
|
|
18
|
+
* semver will accept any 26.x.y >= 26.3.18 but reject 27.0.0+. The intent
|
|
19
|
+
* is to auto-receive security patches and additive minor features while
|
|
20
|
+
* blocking breaking-change major bumps, which is where Vibium's CLI
|
|
21
|
+
* contract (`go`, `--headless`, `viewport`, exit codes) can change.
|
|
22
|
+
*
|
|
23
|
+
* This is NOT a minor-line pin. If a future Vibium 26.y release changes
|
|
24
|
+
* the primitives' expectations, the CI smoke gate (scripts/smoke-test.sh)
|
|
25
|
+
* is the belt-and-suspenders check.
|
|
26
|
+
*
|
|
27
|
+
* Bump procedure: update this constant (e.g. to ^27.0.0 at a major), run
|
|
28
|
+
* scripts/smoke-test.sh against the new version, then land the bump.
|
|
29
|
+
*/
|
|
30
|
+
export declare const DEFAULT_VIBIUM_SPEC = "vibium@^26.3.18";
|
|
16
31
|
/**
|
|
17
32
|
* Spawner injected into {@link installBrowserEngine} so tests can mock the
|
|
18
33
|
* shell-out without monkey-patching the child_process module (ESM namespaces
|
|
@@ -26,7 +41,7 @@ export type Spawner = (bin: string, args: string[], options: {
|
|
|
26
41
|
export interface BrowserEngineInstallerOptions {
|
|
27
42
|
/** Skip installation entirely (for --minimal or --no-browser-engine). */
|
|
28
43
|
skip?: boolean;
|
|
29
|
-
/** Package name/version spec. Defaults to
|
|
44
|
+
/** Package name/version spec. Defaults to {@link DEFAULT_VIBIUM_SPEC}. */
|
|
30
45
|
packageSpec?: string;
|
|
31
46
|
/** Override the npm binary (default: "npm"). */
|
|
32
47
|
npmBin?: string;
|
|
@@ -34,6 +49,8 @@ export interface BrowserEngineInstallerOptions {
|
|
|
34
49
|
timeoutMs?: number;
|
|
35
50
|
/** Test seam — inject a spawner to avoid hitting real processes. */
|
|
36
51
|
spawner?: Spawner;
|
|
52
|
+
/** Test seam — inject a platform probe for cross-OS diagnostic tests. */
|
|
53
|
+
platformProbe?: PlatformProbe;
|
|
37
54
|
}
|
|
38
55
|
export type BrowserEngineInstallStatus = 'already-installed' | 'installed' | 'skipped' | 'install-failed' | 'npm-unavailable';
|
|
39
56
|
export interface BrowserEngineInstallResult {
|
|
@@ -41,7 +58,49 @@ export interface BrowserEngineInstallResult {
|
|
|
41
58
|
version?: string;
|
|
42
59
|
message?: string;
|
|
43
60
|
packageSpec: string;
|
|
61
|
+
/**
|
|
62
|
+
* Platform diagnostic emitted after a successful install. Present when
|
|
63
|
+
* the current host is one where Vibium's first-run Chrome auto-download
|
|
64
|
+
* is known to fail (e.g. Linux aarch64 at v26.3.x) and we were able to
|
|
65
|
+
* point at a system browser, or couldn't and are saying so explicitly.
|
|
66
|
+
*/
|
|
67
|
+
platformHint?: PlatformHint;
|
|
68
|
+
}
|
|
69
|
+
export interface PlatformHint {
|
|
70
|
+
/**
|
|
71
|
+
* Short machine-readable tag for the condition being reported. Consumers
|
|
72
|
+
* can assert on this in tests or suppress the hint in known-good envs.
|
|
73
|
+
*/
|
|
74
|
+
code: 'linux-arm64-system-chromium-found' | 'linux-arm64-no-system-chromium';
|
|
75
|
+
/** Single-line human message suitable for `console.warn`. */
|
|
76
|
+
message: string;
|
|
77
|
+
/**
|
|
78
|
+
* Optional filesystem path to a system browser binary the user can point
|
|
79
|
+
* Vibium at via `VIBIUM_BROWSER_PATH`.
|
|
80
|
+
*/
|
|
81
|
+
browserPath?: string;
|
|
44
82
|
}
|
|
83
|
+
/**
|
|
84
|
+
* Injectable seam for `os.platform()` / `os.arch()`. Tests override this
|
|
85
|
+
* to simulate running on a different host.
|
|
86
|
+
*/
|
|
87
|
+
export interface PlatformProbe {
|
|
88
|
+
platform: () => NodeJS.Platform;
|
|
89
|
+
arch: () => string;
|
|
90
|
+
existsSync: (path: string) => boolean;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Build a platform hint for hosts where Vibium's first-run Chrome auto-
|
|
94
|
+
* download is known to fail. Today that's just Linux aarch64 at the
|
|
95
|
+
* pinned Vibium version (v26.3.x). Returns `undefined` when no hint
|
|
96
|
+
* applies, so callers can cheaply check for presence.
|
|
97
|
+
*
|
|
98
|
+
* Intentionally conservative: we don't mutate the user's env or create
|
|
99
|
+
* symlinks — we surface a diagnostic with an exact `VIBIUM_BROWSER_PATH`
|
|
100
|
+
* export the user can add. Silent modifications to system state are out
|
|
101
|
+
* of scope for an installer that runs during `aqe init`.
|
|
102
|
+
*/
|
|
103
|
+
export declare function diagnosePlatform(probe?: PlatformProbe): PlatformHint | undefined;
|
|
45
104
|
/**
|
|
46
105
|
* Detect whether `vibium` is already on PATH. Returns the version string
|
|
47
106
|
* on success, `null` otherwise. Uses a short timeout because we don't want
|