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
|
@@ -114,6 +114,24 @@ test('focus indicator visible', async ({ page }) => {
|
|
|
114
114
|
|
|
115
115
|
## Automated Testing with axe-core
|
|
116
116
|
|
|
117
|
+
### Preferred: via the `a11y-ally` AQE skill (qe-browser + Vibium)
|
|
118
|
+
|
|
119
|
+
For new work, use the `a11y-ally` skill — it composes `qe-browser` (Vibium
|
|
120
|
+
WebDriver BiDi) with `axe-core`, `pa11y`, and Lighthouse and produces a
|
|
121
|
+
WCAG-tagged JSON report with remediation guidance. It avoids the 300MB
|
|
122
|
+
Playwright install and is already wired into the AQE fleet.
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
# Runs axe-core + pa11y + Lighthouse via qe-browser (Vibium) engine
|
|
126
|
+
aqe skill run a11y-ally -- --url https://example.com --wcag AA
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
### Fallback: Playwright + @axe-core/playwright
|
|
130
|
+
|
|
131
|
+
Keep this path when you have an existing Playwright suite and don't want to
|
|
132
|
+
introduce a second browser runner, or when you need Firefox/Safari coverage
|
|
133
|
+
that Vibium's Chrome-only BiDi backend can't provide today.
|
|
134
|
+
|
|
117
135
|
```javascript
|
|
118
136
|
import { test, expect } from '@playwright/test';
|
|
119
137
|
import AxeBuilder from '@axe-core/playwright';
|
|
@@ -82,7 +82,7 @@ When testing enterprise integrations or SAP-connected systems:
|
|
|
82
82
|
### Tools
|
|
83
83
|
- **SAP**: SAP GUI, Transaction codes (SE37, WE19, SEGW), Eclipse ADT
|
|
84
84
|
- **Middleware**: IBM IIB/ACE, MuleSoft, SAP PI/PO/CPI
|
|
85
|
-
- **Testing**: SoapUI, Postman,
|
|
85
|
+
- **Testing**: SoapUI, Postman, qe-browser (via Vibium for Fiori/web UIs), custom harnesses
|
|
86
86
|
- **Monitoring**: SAP Solution Manager, Splunk, Dynatrace
|
|
87
87
|
- **Data**: SAP LSMW, SECATT, eCATT
|
|
88
88
|
|
|
@@ -124,7 +124,7 @@ Every pentest validation run MUST:
|
|
|
124
124
|
### XSS Pipeline
|
|
125
125
|
| Attack | Tier 1 (Pattern) | Tier 2 (Payload) | Tier 3 (Full) |
|
|
126
126
|
|--------|-------------------|-------------------|----------------|
|
|
127
|
-
| Reflected XSS | No output encoding | `<img onerror>` reflection | Browser JS execution via
|
|
127
|
+
| Reflected XSS | No output encoding | `<img onerror>` reflection | Browser JS execution via qe-browser (Vibium) |
|
|
128
128
|
| Stored XSS | `innerHTML` assignment | Payload stored + retrieved | Cookie theft PoC |
|
|
129
129
|
| DOM XSS | `document.write(location)` | Fragment injection | DOM manipulation proof |
|
|
130
130
|
|
|
@@ -1,27 +1,24 @@
|
|
|
1
1
|
skill: qe-browser
|
|
2
2
|
version: 1.0.0
|
|
3
|
-
status:
|
|
3
|
+
status: active
|
|
4
4
|
description: >
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
Runnable eval suite for the qe-browser fleet skill, executed via
|
|
6
|
+
`aqe eval run --skill qe-browser`. Uses the CommandEvalRunner
|
|
7
|
+
(src/validation/command-eval-runner.ts) which evaluates exit codes and
|
|
8
|
+
JSON envelopes from each primitive's stdout. See ADR-091.
|
|
7
9
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
(`src/validation/parallel-eval-runner.ts`) does NOT support — it expects
|
|
12
|
-
`expected_output.must_contain` keyword matching only. This file is
|
|
13
|
-
therefore a SPECIFICATION for what the eval should do, not a runnable
|
|
14
|
-
yaml. Two paths to make it runnable:
|
|
10
|
+
The runner dispatches to CommandEvalRunner when the first test_case has
|
|
11
|
+
`input.command` set; the pre-existing LLM-prompt runner remains the
|
|
12
|
+
default for skills without shell-based primitives.
|
|
15
13
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
14
|
+
Supported assertions:
|
|
15
|
+
- exit_code strict equality vs process exit
|
|
16
|
+
- json_fields dotted JSONPath -> expected value (deep)
|
|
17
|
+
- severity_at_least ordered: none < low < medium < high < critical
|
|
18
|
+
- candidate_count_at_least numeric lower bound
|
|
21
19
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
runnable today and is what gates PR-reopen per ADR-091 Phase 3.
|
|
20
|
+
Setup steps in `input.setup[]` run sequentially before `input.command`.
|
|
21
|
+
Any non-zero setup exit short-circuits the test as failed.
|
|
25
22
|
|
|
26
23
|
models_to_test:
|
|
27
24
|
- claude-3.5-sonnet
|
|
@@ -55,16 +52,11 @@ setup:
|
|
|
55
52
|
optional_tools:
|
|
56
53
|
- pixelmatch
|
|
57
54
|
- pngjs
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
# exists and is versioned with the skill.
|
|
64
|
-
local_docs_server:
|
|
65
|
-
command: "node .claude/skills/qe-browser/fixtures/serve-skills.js"
|
|
66
|
-
port: 8088
|
|
67
|
-
base_url: "http://localhost:8088"
|
|
55
|
+
# NOTE: this yaml deliberately uses ONLY pinned public fixtures
|
|
56
|
+
# (httpbin.org/*) so it can be run end-to-end by CommandEvalRunner without
|
|
57
|
+
# any prerequisite services. Tests that need a local poisoned-HTML fixture
|
|
58
|
+
# (the check-injection severity path) live in scripts/smoke-test.sh, which
|
|
59
|
+
# starts fixtures/serve-skills.js out of band.
|
|
68
60
|
|
|
69
61
|
fixtures:
|
|
70
62
|
public_pinned:
|
|
@@ -80,16 +72,6 @@ fixtures:
|
|
|
80
72
|
httpbin_status_404:
|
|
81
73
|
url: "https://httpbin.org/status/404"
|
|
82
74
|
description: "Known 404 for testing no_failed_requests"
|
|
83
|
-
pinned_docs_site:
|
|
84
|
-
# Pinned to a specific Git tag so the docs don't change under us.
|
|
85
|
-
url: "https://vibiumdev.github.io/vibium/tutorials/getting-started-js"
|
|
86
|
-
pin_version: "v26.3.18"
|
|
87
|
-
description: "Vibium's own getting-started docs — stable, public, versioned"
|
|
88
|
-
local_skills_docs:
|
|
89
|
-
base_url: "http://localhost:8088"
|
|
90
|
-
pages:
|
|
91
|
-
- "/qe-browser/SKILL.md.html"
|
|
92
|
-
- "/qe-browser/references/assertion-kinds.md.html"
|
|
93
75
|
|
|
94
76
|
test_cases:
|
|
95
77
|
# -------- assert.js --------
|
|
@@ -99,7 +81,7 @@ test_cases:
|
|
|
99
81
|
priority: critical
|
|
100
82
|
input:
|
|
101
83
|
setup:
|
|
102
|
-
- "vibium go https://httpbin.org/forms/post"
|
|
84
|
+
- "vibium --headless go https://httpbin.org/forms/post"
|
|
103
85
|
command: |
|
|
104
86
|
node .claude/skills/qe-browser/scripts/assert.js --checks \
|
|
105
87
|
'[{"kind": "url_contains", "text": "httpbin.org/forms"}]'
|
|
@@ -116,7 +98,7 @@ test_cases:
|
|
|
116
98
|
priority: critical
|
|
117
99
|
input:
|
|
118
100
|
setup:
|
|
119
|
-
- "vibium go https://httpbin.org/html"
|
|
101
|
+
- "vibium --headless go https://httpbin.org/html"
|
|
120
102
|
command: |
|
|
121
103
|
node .claude/skills/qe-browser/scripts/assert.js --checks \
|
|
122
104
|
'[{"kind": "selector_visible", "selector": "h1"}]'
|
|
@@ -131,7 +113,7 @@ test_cases:
|
|
|
131
113
|
priority: critical
|
|
132
114
|
input:
|
|
133
115
|
setup:
|
|
134
|
-
- "vibium go https://httpbin.org/html"
|
|
116
|
+
- "vibium --headless go https://httpbin.org/html"
|
|
135
117
|
command: |
|
|
136
118
|
node .claude/skills/qe-browser/scripts/assert.js --checks \
|
|
137
119
|
'[{"kind": "url_contains", "text": "this-does-not-exist"}]'
|
|
@@ -190,11 +172,16 @@ test_cases:
|
|
|
190
172
|
priority: high
|
|
191
173
|
input:
|
|
192
174
|
setup:
|
|
193
|
-
|
|
194
|
-
|
|
175
|
+
# Explicit viewport before screenshot — without this, headless Chrome
|
|
176
|
+
# picks whatever size it likes per run, and pages render at slightly
|
|
177
|
+
# different dimensions (768×654 vs 765×672 observed), making the
|
|
178
|
+
# pixel-diff in tc007 spuriously fail. Mirrors scripts/smoke-test.sh.
|
|
179
|
+
- "vibium --headless viewport 1280 720"
|
|
180
|
+
- "vibium --headless go https://httpbin.org/html"
|
|
181
|
+
- "rm -rf .aqe/visual-baselines/eval_httpbin_html*"
|
|
195
182
|
command: |
|
|
196
183
|
node .claude/skills/qe-browser/scripts/visual-diff.js \
|
|
197
|
-
--name
|
|
184
|
+
--name eval_httpbin_html --threshold 0.02
|
|
198
185
|
expected:
|
|
199
186
|
exit_code: 0
|
|
200
187
|
json_fields:
|
|
@@ -207,10 +194,11 @@ test_cases:
|
|
|
207
194
|
priority: high
|
|
208
195
|
input:
|
|
209
196
|
setup:
|
|
210
|
-
- "vibium
|
|
197
|
+
- "vibium --headless viewport 1280 720"
|
|
198
|
+
- "vibium --headless go https://httpbin.org/html"
|
|
211
199
|
command: |
|
|
212
200
|
node .claude/skills/qe-browser/scripts/visual-diff.js \
|
|
213
|
-
--name
|
|
201
|
+
--name eval_httpbin_html --threshold 0.02
|
|
214
202
|
expected:
|
|
215
203
|
exit_code: 0
|
|
216
204
|
json_fields:
|
|
@@ -224,7 +212,7 @@ test_cases:
|
|
|
224
212
|
priority: critical
|
|
225
213
|
input:
|
|
226
214
|
setup:
|
|
227
|
-
- "vibium go https://httpbin.org/html"
|
|
215
|
+
- "vibium --headless go https://httpbin.org/html"
|
|
228
216
|
command: |
|
|
229
217
|
node .claude/skills/qe-browser/scripts/check-injection.js --include-hidden
|
|
230
218
|
expected:
|
|
@@ -233,20 +221,15 @@ test_cases:
|
|
|
233
221
|
".status": "success"
|
|
234
222
|
".output.checkInjection.severity": "none"
|
|
235
223
|
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
expected:
|
|
246
|
-
exit_code: 1
|
|
247
|
-
json_fields:
|
|
248
|
-
".status": "failed"
|
|
249
|
-
severity_at_least: "high"
|
|
224
|
+
# GAP: the "poisoned-page detected with severity>=high" contract needs a
|
|
225
|
+
# local fixture (fixtures/injection-poisoned.html) served by
|
|
226
|
+
# fixtures/serve-skills.js. That's out of scope for this yaml — we keep
|
|
227
|
+
# CommandEvalRunner dependency-free so it can run anywhere httpbin.org
|
|
228
|
+
# is reachable. Coverage of the high-severity path is currently
|
|
229
|
+
# only asserted by unit tests on check-injection.js (see
|
|
230
|
+
# tests/unit/scripts/qe-browser-check-injection.test.ts). Follow-up:
|
|
231
|
+
# either teach CommandEvalRunner to spawn the fixture server, or add a
|
|
232
|
+
# tc009 to scripts/smoke-test.sh that starts/stops it out of band.
|
|
250
233
|
|
|
251
234
|
# -------- intent-score.js --------
|
|
252
235
|
- id: tc010_intent_submit_form_on_httpbin
|
|
@@ -255,7 +238,7 @@ test_cases:
|
|
|
255
238
|
priority: critical
|
|
256
239
|
input:
|
|
257
240
|
setup:
|
|
258
|
-
- "vibium go https://httpbin.org/forms/post"
|
|
241
|
+
- "vibium --headless go https://httpbin.org/forms/post"
|
|
259
242
|
command: |
|
|
260
243
|
node .claude/skills/qe-browser/scripts/intent-score.js \
|
|
261
244
|
--intent submit_form
|
|
@@ -272,7 +255,7 @@ test_cases:
|
|
|
272
255
|
priority: medium
|
|
273
256
|
input:
|
|
274
257
|
setup:
|
|
275
|
-
- "vibium go https://httpbin.org/html"
|
|
258
|
+
- "vibium --headless go https://httpbin.org/html"
|
|
276
259
|
command: |
|
|
277
260
|
node .claude/skills/qe-browser/scripts/intent-score.js --intent fill_email
|
|
278
261
|
expected:
|
|
@@ -1,10 +1,22 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
|
-
# qe-browser smoke test
|
|
2
|
+
# qe-browser smoke test (bash mirror of evals/qe-browser.yaml)
|
|
3
3
|
#
|
|
4
4
|
# Runs each helper script against pinned public fixtures (httpbin.org) and
|
|
5
|
-
# verifies the output structure.
|
|
6
|
-
#
|
|
7
|
-
#
|
|
5
|
+
# verifies the output structure. Gates PR-reopen per ADR-091 Phase 3.
|
|
6
|
+
#
|
|
7
|
+
# RELATIONSHIP TO evals/qe-browser.yaml
|
|
8
|
+
# -------------------------------------
|
|
9
|
+
# The canonical spec is `.claude/skills/qe-browser/evals/qe-browser.yaml`.
|
|
10
|
+
# It is executed by `aqe eval run --skill qe-browser` via CommandEvalRunner
|
|
11
|
+
# (src/validation/command-eval-runner.ts). The CI workflow runs it in the
|
|
12
|
+
# "eval" job once the dist is built.
|
|
13
|
+
#
|
|
14
|
+
# This bash script mirrors the same test cases (tc001–tc011) so you can
|
|
15
|
+
# run them without building the AQE CLI — useful during local skill
|
|
16
|
+
# development and the initial smoke gate in CI (before the build finishes).
|
|
17
|
+
# It also covers one case the yaml can't express naturally:
|
|
18
|
+
# - tc011 F1 contract: vibium-missing -> skipped envelope + exit 2
|
|
19
|
+
# (uses `env -i PATH=<fake-bin>` isolation, which is clumsy in yaml)
|
|
8
20
|
#
|
|
9
21
|
# Exit codes:
|
|
10
22
|
# 0 — all smoke tests passed
|
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,58 @@ All notable changes to the Agentic QE project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [3.9.16] - 2026-04-24
|
|
9
|
+
|
|
10
|
+
**Brain-export tooling + native-binding advisor.** Three new CLI commands that make the QE brain snapshot easier to inspect and make optional native deps visible. Closes the last actionable items on issue #332 (brain export improvements) and item 2 of issue #383 (upgrade advisor).
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- **`aqe brain diff <a> <b>`** — Compare two brain exports. Always compares manifests (version, checksum, per-table record counts, domain list delta) across any mix of JSONL and `.rvf` files. When both sides are JSONL it also reports record-level **added / removed / changed** IDs per table — identity comes from the primary key on keyed tables and from dedup columns on append-only tables (witness_chain, qe_pattern_usage). Flags: `--table <name>`, `--verbose`, `--json`. Exit 0 when identical, 1 on any difference.
|
|
15
|
+
- **`aqe brain search -i <export>`** — Offline filtered search over a JSONL brain export. Defaults to `qe_patterns`; `--table <name>` targets any of the 25 tables. Filters: `--domain` (repeatable, combines with AND), `--pattern-type`, `--since`/`--until` (ISO dates against `updated_at` → `created_at` → `timestamp`), `-q/--query` (case-insensitive substring over name + description), `-l/--limit` (default 20), `--json`.
|
|
16
|
+
- **`aqe upgrade`** — Read-only advisor that detects which optional native bindings load on this platform (`@ruvector/rvf-node`, `@ruvector/solver-node`, `@ruvector/attention`, `@ruvector/gnn`, `hnswlib-node`), shows the current `useRVFPatternStore` / `useSublinearSolver` / `useNativeHNSW` / `useGraphMAEEmbeddings` / `useQEFlashAttention` flag state after `RUVECTOR_*` env overrides, and prints install hints for anything missing. Does **not** mutate feature flags, env, or config. Flags: `--json`, `--strict` (exits 1 when an optional is missing). Exit 2 when a required native fails to load.
|
|
17
|
+
- **Shell completions for `brain` and `upgrade`** — bash/zsh/fish/PowerShell tab-completion scripts now cover both new commands and all six `brain` subcommands (`export`, `import`, `info`, `diff`, `search`, `witness-backfill`). For `brain search --domain`, bash completion sources the canonical AQE domain list.
|
|
18
|
+
|
|
19
|
+
### Fixed
|
|
20
|
+
|
|
21
|
+
- **Stale issue-tracker drift** — Issue #355 ("RuVector Integration: Remaining Work Tracker") and issue #332 ("Brain Export LOW-priority improvements") had diverged from reality. Delivered items from #355 (RVF export/import CLI, manifest-with-checksums, witness-integrity validation) were still shown as TODO. Consolidated the overlap with #383 into a single comment on #355, split long-horizon RuVector work into the new #432 backlog issue, and closed #355 + #332 with explicit delivered / won't-fix rationale for each remaining item.
|
|
22
|
+
|
|
23
|
+
### Changed
|
|
24
|
+
|
|
25
|
+
- **22 pre-existing `no-useless-escape` lint errors in `src/cli/completions/index.ts`** cleaned up during the completions work (`\$foo` → `$foo` inside the JS template literal for the generated bash script; `\${files[@]}` preserved because `${` triggers template interpolation). Generator output is byte-identical after the cleanup, verified via `bash -n`.
|
|
26
|
+
|
|
27
|
+
### Upgrade Notes
|
|
28
|
+
|
|
29
|
+
- No breaking changes. Three new CLI commands; existing commands unchanged.
|
|
30
|
+
- `aqe upgrade` is the recommended first-run diagnostic for users reporting "HNSW is slow" or "why is my router doing power iteration" — it tells them which native deps are missing and exactly what to `npm install`.
|
|
31
|
+
- If you've built tooling that parses `aqe brain`'s help output, note that two new subcommands (`diff`, `search`) are now listed.
|
|
32
|
+
|
|
33
|
+
## [3.9.15] - 2026-04-22
|
|
34
|
+
|
|
35
|
+
**qe-browser skill promoted to Implemented (ADR-091).** Closes the final gaps from the v3.9.9 introduction: the skill's eval file is now a runnable evaluation via a new `aqe eval run --skill qe-browser` command, a CI workflow gates changes with both unit and smoke tests, a getting-started guide walks new users through install and the five primitives, and Linux ARM64 users get a copy-paste `VIBIUM_BROWSER_PATH` hint after `aqe init --auto` detects their system chromium. Trust tier 3.
|
|
36
|
+
|
|
37
|
+
### Added
|
|
38
|
+
|
|
39
|
+
- **`aqe eval run --skill <skill>` CLI** — New command that executes a skill's `evals/<skill>.yaml` file as real CommandRunner evaluations (not mocks). Uploads JSON results for post-run inspection. Lets any skill author turn their eval YAML into a reproducible CI gate. First consumer: qe-browser.
|
|
40
|
+
- **Linux ARM64 platform detection in `aqe init --auto`** — After installing Vibium, the installer now probes `os.platform` + `os.arch` on Linux aarch64 and scans a prioritized list of system chromium locations (`/usr/bin/chromium`, `chromium-browser`, `google-chrome`, `google-chrome-stable`, `/snap/bin/chromium`). When a browser is found, it prints an exact `export VIBIUM_BROWSER_PATH=...` line the user can copy. When none exists, it surfaces the `apt-get install chromium` remediation. No more silent hangs on ARM64 hosts with no matching browser.
|
|
41
|
+
- **`docs/guides/qe-browser-getting-started.md`** — Install, smoke check, eval run, and example CLI invocations for all five primitives (`vibium assert`, `vibium batch`, `check-injection`, `visual-diff`, `vibium run-intent`). This is the doc to send new users to.
|
|
42
|
+
- **`.github/workflows/test-qe-browser.yml`** — Three-job CI gate that fires on PRs touching the skill, its installer, or `CommandEvalRunner`. Job 1 runs the full vitest sweep. Job 2 installs pinned Vibium (`^26.3.18`) and runs `smoke-test.sh` against real httpbin fixtures — the contract gate for the five primitives. Job 3 runs `aqe eval run --skill qe-browser` against real Vibium and uploads the eval JSON as a CI artifact. Workflow validated with actionlint 1.7.1.
|
|
43
|
+
|
|
44
|
+
### Fixed
|
|
45
|
+
|
|
46
|
+
- **qe-browser eval YAML no longer requires a local fixture server** — Two test cases (`tc006`, `tc007`) were pointing at `http://localhost:8088/qe-browser/SKILL.md.html`, which required an unstarted fixture server, so running `aqe eval run --skill qe-browser` on a fresh machine would have failed. Rewrote both to use `https://httpbin.org/html` (matching `scripts/smoke-test.sh`). `tc009` (poisoned-page check-injection) was dropped from the yaml with an explicit GAP comment — its local fixture is out of scope for CommandEvalRunner, and the severity logic it exercises is already unit-tested at `tests/unit/scripts/qe-browser-check-injection.test.ts`. yaml test_cases now reflects the runnable set (10 vs 11).
|
|
47
|
+
- **Deterministic viewport in CI** — yaml `tc006` / `tc007` now include `vibium --headless viewport 1280 720` setup steps so their output matches `smoke-test.sh` byte-for-byte. No more "passes locally, fails in CI" from default-viewport differences.
|
|
48
|
+
- **Correct Vibium pin comment** — Previous changelog claimed `^26.3.18` was a "major.minor-line pin". Under npm semver, `^26.3.18` accepts 26.99.x, so the comment was factually wrong. Rewritten in the skill to accurately describe the intent: major-line pin that blocks 27.0+ while allowing auto-uptake of 26.x patches and additive features, with `scripts/smoke-test.sh` as the belt-and-suspenders API contract gate. The spec itself stays `^26.3.18`.
|
|
49
|
+
|
|
50
|
+
### Changed
|
|
51
|
+
|
|
52
|
+
- **ADR-091 status: Implemented (trust_tier 3)** — All gaps from the v3.9.9 introduction are closed: runnable eval, CI workflow, platform detection, documentation, and yaml/smoke unification. Dependent browser-using skills (`accessibility-testing`, `pentest-validation`, `enterprise-integration-testing`) now reference `qe-browser` as the canonical runner, with Playwright kept as a documented fallback where BiDi coverage is insufficient (Firefox/Safari in `compatibility-testing`, the `visual-testing-advanced` legacy section).
|
|
53
|
+
|
|
54
|
+
### Upgrade Notes
|
|
55
|
+
|
|
56
|
+
- `aqe init --auto` on Linux ARM64 hosts (e.g., Raspberry Pi, Apple Silicon Docker, AWS Graviton) now surfaces a `VIBIUM_BROWSER_PATH` export hint after Vibium install — copy the printed line into your shell before running `vibium` commands.
|
|
57
|
+
- Skill authors can now ship an `evals/<skill>.yaml` file and run it with `aqe eval run --skill <skill>`. See `.claude/skills/qe-browser/evals/qe-browser.yaml` for a real example.
|
|
58
|
+
- No breaking changes. CLI surface additions only.
|
|
59
|
+
|
|
8
60
|
## [3.9.14] - 2026-04-20
|
|
9
61
|
|
|
10
62
|
**Security + supply-chain hardening.** Closes five P0 release blockers from the v3.9.13 QE audit: 15 critical runtime npm vulnerabilities, 79% tarball bloat, hardcoded retiring model IDs at tier 1, a broken lint harness, and a loose MCP contract. Tarball shipped size drops from 19.9 MB to 9.6 MB (-52%). Also tightens six MCP tool contracts, patches a command-injection path in `aqe learning repair`, and stops the telemetry workflow from push-forcing to protected `main`.
|
|
@@ -114,6 +114,24 @@ test('focus indicator visible', async ({ page }) => {
|
|
|
114
114
|
|
|
115
115
|
## Automated Testing with axe-core
|
|
116
116
|
|
|
117
|
+
### Preferred: via the `a11y-ally` AQE skill (qe-browser + Vibium)
|
|
118
|
+
|
|
119
|
+
For new work, use the `a11y-ally` skill — it composes `qe-browser` (Vibium
|
|
120
|
+
WebDriver BiDi) with `axe-core`, `pa11y`, and Lighthouse and produces a
|
|
121
|
+
WCAG-tagged JSON report with remediation guidance. It avoids the 300MB
|
|
122
|
+
Playwright install and is already wired into the AQE fleet.
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
# Runs axe-core + pa11y + Lighthouse via qe-browser (Vibium) engine
|
|
126
|
+
aqe skill run a11y-ally -- --url https://example.com --wcag AA
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
### Fallback: Playwright + @axe-core/playwright
|
|
130
|
+
|
|
131
|
+
Keep this path when you have an existing Playwright suite and don't want to
|
|
132
|
+
introduce a second browser runner, or when you need Firefox/Safari coverage
|
|
133
|
+
that Vibium's Chrome-only BiDi backend can't provide today.
|
|
134
|
+
|
|
117
135
|
```javascript
|
|
118
136
|
import { test, expect } from '@playwright/test';
|
|
119
137
|
import AxeBuilder from '@axe-core/playwright';
|
|
@@ -1,27 +1,24 @@
|
|
|
1
1
|
skill: qe-browser
|
|
2
2
|
version: 1.0.0
|
|
3
|
-
status:
|
|
3
|
+
status: active
|
|
4
4
|
description: >
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
Runnable eval suite for the qe-browser fleet skill, executed via
|
|
6
|
+
`aqe eval run --skill qe-browser`. Uses the CommandEvalRunner
|
|
7
|
+
(src/validation/command-eval-runner.ts) which evaluates exit codes and
|
|
8
|
+
JSON envelopes from each primitive's stdout. See ADR-091.
|
|
7
9
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
(`src/validation/parallel-eval-runner.ts`) does NOT support — it expects
|
|
12
|
-
`expected_output.must_contain` keyword matching only. This file is
|
|
13
|
-
therefore a SPECIFICATION for what the eval should do, not a runnable
|
|
14
|
-
yaml. Two paths to make it runnable:
|
|
10
|
+
The runner dispatches to CommandEvalRunner when the first test_case has
|
|
11
|
+
`input.command` set; the pre-existing LLM-prompt runner remains the
|
|
12
|
+
default for skills without shell-based primitives.
|
|
15
13
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
14
|
+
Supported assertions:
|
|
15
|
+
- exit_code strict equality vs process exit
|
|
16
|
+
- json_fields dotted JSONPath -> expected value (deep)
|
|
17
|
+
- severity_at_least ordered: none < low < medium < high < critical
|
|
18
|
+
- candidate_count_at_least numeric lower bound
|
|
21
19
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
runnable today and is what gates PR-reopen per ADR-091 Phase 3.
|
|
20
|
+
Setup steps in `input.setup[]` run sequentially before `input.command`.
|
|
21
|
+
Any non-zero setup exit short-circuits the test as failed.
|
|
25
22
|
|
|
26
23
|
models_to_test:
|
|
27
24
|
- claude-3.5-sonnet
|
|
@@ -55,16 +52,11 @@ setup:
|
|
|
55
52
|
optional_tools:
|
|
56
53
|
- pixelmatch
|
|
57
54
|
- pngjs
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
# exists and is versioned with the skill.
|
|
64
|
-
local_docs_server:
|
|
65
|
-
command: "node .claude/skills/qe-browser/fixtures/serve-skills.js"
|
|
66
|
-
port: 8088
|
|
67
|
-
base_url: "http://localhost:8088"
|
|
55
|
+
# NOTE: this yaml deliberately uses ONLY pinned public fixtures
|
|
56
|
+
# (httpbin.org/*) so it can be run end-to-end by CommandEvalRunner without
|
|
57
|
+
# any prerequisite services. Tests that need a local poisoned-HTML fixture
|
|
58
|
+
# (the check-injection severity path) live in scripts/smoke-test.sh, which
|
|
59
|
+
# starts fixtures/serve-skills.js out of band.
|
|
68
60
|
|
|
69
61
|
fixtures:
|
|
70
62
|
public_pinned:
|
|
@@ -80,16 +72,6 @@ fixtures:
|
|
|
80
72
|
httpbin_status_404:
|
|
81
73
|
url: "https://httpbin.org/status/404"
|
|
82
74
|
description: "Known 404 for testing no_failed_requests"
|
|
83
|
-
pinned_docs_site:
|
|
84
|
-
# Pinned to a specific Git tag so the docs don't change under us.
|
|
85
|
-
url: "https://vibiumdev.github.io/vibium/tutorials/getting-started-js"
|
|
86
|
-
pin_version: "v26.3.18"
|
|
87
|
-
description: "Vibium's own getting-started docs — stable, public, versioned"
|
|
88
|
-
local_skills_docs:
|
|
89
|
-
base_url: "http://localhost:8088"
|
|
90
|
-
pages:
|
|
91
|
-
- "/qe-browser/SKILL.md.html"
|
|
92
|
-
- "/qe-browser/references/assertion-kinds.md.html"
|
|
93
75
|
|
|
94
76
|
test_cases:
|
|
95
77
|
# -------- assert.js --------
|
|
@@ -99,7 +81,7 @@ test_cases:
|
|
|
99
81
|
priority: critical
|
|
100
82
|
input:
|
|
101
83
|
setup:
|
|
102
|
-
- "vibium go https://httpbin.org/forms/post"
|
|
84
|
+
- "vibium --headless go https://httpbin.org/forms/post"
|
|
103
85
|
command: |
|
|
104
86
|
node .claude/skills/qe-browser/scripts/assert.js --checks \
|
|
105
87
|
'[{"kind": "url_contains", "text": "httpbin.org/forms"}]'
|
|
@@ -116,7 +98,7 @@ test_cases:
|
|
|
116
98
|
priority: critical
|
|
117
99
|
input:
|
|
118
100
|
setup:
|
|
119
|
-
- "vibium go https://httpbin.org/html"
|
|
101
|
+
- "vibium --headless go https://httpbin.org/html"
|
|
120
102
|
command: |
|
|
121
103
|
node .claude/skills/qe-browser/scripts/assert.js --checks \
|
|
122
104
|
'[{"kind": "selector_visible", "selector": "h1"}]'
|
|
@@ -131,7 +113,7 @@ test_cases:
|
|
|
131
113
|
priority: critical
|
|
132
114
|
input:
|
|
133
115
|
setup:
|
|
134
|
-
- "vibium go https://httpbin.org/html"
|
|
116
|
+
- "vibium --headless go https://httpbin.org/html"
|
|
135
117
|
command: |
|
|
136
118
|
node .claude/skills/qe-browser/scripts/assert.js --checks \
|
|
137
119
|
'[{"kind": "url_contains", "text": "this-does-not-exist"}]'
|
|
@@ -190,11 +172,16 @@ test_cases:
|
|
|
190
172
|
priority: high
|
|
191
173
|
input:
|
|
192
174
|
setup:
|
|
193
|
-
|
|
194
|
-
|
|
175
|
+
# Explicit viewport before screenshot — without this, headless Chrome
|
|
176
|
+
# picks whatever size it likes per run, and pages render at slightly
|
|
177
|
+
# different dimensions (768×654 vs 765×672 observed), making the
|
|
178
|
+
# pixel-diff in tc007 spuriously fail. Mirrors scripts/smoke-test.sh.
|
|
179
|
+
- "vibium --headless viewport 1280 720"
|
|
180
|
+
- "vibium --headless go https://httpbin.org/html"
|
|
181
|
+
- "rm -rf .aqe/visual-baselines/eval_httpbin_html*"
|
|
195
182
|
command: |
|
|
196
183
|
node .claude/skills/qe-browser/scripts/visual-diff.js \
|
|
197
|
-
--name
|
|
184
|
+
--name eval_httpbin_html --threshold 0.02
|
|
198
185
|
expected:
|
|
199
186
|
exit_code: 0
|
|
200
187
|
json_fields:
|
|
@@ -207,10 +194,11 @@ test_cases:
|
|
|
207
194
|
priority: high
|
|
208
195
|
input:
|
|
209
196
|
setup:
|
|
210
|
-
- "vibium
|
|
197
|
+
- "vibium --headless viewport 1280 720"
|
|
198
|
+
- "vibium --headless go https://httpbin.org/html"
|
|
211
199
|
command: |
|
|
212
200
|
node .claude/skills/qe-browser/scripts/visual-diff.js \
|
|
213
|
-
--name
|
|
201
|
+
--name eval_httpbin_html --threshold 0.02
|
|
214
202
|
expected:
|
|
215
203
|
exit_code: 0
|
|
216
204
|
json_fields:
|
|
@@ -224,7 +212,7 @@ test_cases:
|
|
|
224
212
|
priority: critical
|
|
225
213
|
input:
|
|
226
214
|
setup:
|
|
227
|
-
- "vibium go https://httpbin.org/html"
|
|
215
|
+
- "vibium --headless go https://httpbin.org/html"
|
|
228
216
|
command: |
|
|
229
217
|
node .claude/skills/qe-browser/scripts/check-injection.js --include-hidden
|
|
230
218
|
expected:
|
|
@@ -233,20 +221,15 @@ test_cases:
|
|
|
233
221
|
".status": "success"
|
|
234
222
|
".output.checkInjection.severity": "none"
|
|
235
223
|
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
expected:
|
|
246
|
-
exit_code: 1
|
|
247
|
-
json_fields:
|
|
248
|
-
".status": "failed"
|
|
249
|
-
severity_at_least: "high"
|
|
224
|
+
# GAP: the "poisoned-page detected with severity>=high" contract needs a
|
|
225
|
+
# local fixture (fixtures/injection-poisoned.html) served by
|
|
226
|
+
# fixtures/serve-skills.js. That's out of scope for this yaml — we keep
|
|
227
|
+
# CommandEvalRunner dependency-free so it can run anywhere httpbin.org
|
|
228
|
+
# is reachable. Coverage of the high-severity path is currently
|
|
229
|
+
# only asserted by unit tests on check-injection.js (see
|
|
230
|
+
# tests/unit/scripts/qe-browser-check-injection.test.ts). Follow-up:
|
|
231
|
+
# either teach CommandEvalRunner to spawn the fixture server, or add a
|
|
232
|
+
# tc009 to scripts/smoke-test.sh that starts/stops it out of band.
|
|
250
233
|
|
|
251
234
|
# -------- intent-score.js --------
|
|
252
235
|
- id: tc010_intent_submit_form_on_httpbin
|
|
@@ -255,7 +238,7 @@ test_cases:
|
|
|
255
238
|
priority: critical
|
|
256
239
|
input:
|
|
257
240
|
setup:
|
|
258
|
-
- "vibium go https://httpbin.org/forms/post"
|
|
241
|
+
- "vibium --headless go https://httpbin.org/forms/post"
|
|
259
242
|
command: |
|
|
260
243
|
node .claude/skills/qe-browser/scripts/intent-score.js \
|
|
261
244
|
--intent submit_form
|
|
@@ -272,7 +255,7 @@ test_cases:
|
|
|
272
255
|
priority: medium
|
|
273
256
|
input:
|
|
274
257
|
setup:
|
|
275
|
-
- "vibium go https://httpbin.org/html"
|
|
258
|
+
- "vibium --headless go https://httpbin.org/html"
|
|
276
259
|
command: |
|
|
277
260
|
node .claude/skills/qe-browser/scripts/intent-score.js --intent fill_email
|
|
278
261
|
expected:
|
|
@@ -1,10 +1,22 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
|
-
# qe-browser smoke test
|
|
2
|
+
# qe-browser smoke test (bash mirror of evals/qe-browser.yaml)
|
|
3
3
|
#
|
|
4
4
|
# Runs each helper script against pinned public fixtures (httpbin.org) and
|
|
5
|
-
# verifies the output structure.
|
|
6
|
-
#
|
|
7
|
-
#
|
|
5
|
+
# verifies the output structure. Gates PR-reopen per ADR-091 Phase 3.
|
|
6
|
+
#
|
|
7
|
+
# RELATIONSHIP TO evals/qe-browser.yaml
|
|
8
|
+
# -------------------------------------
|
|
9
|
+
# The canonical spec is `.claude/skills/qe-browser/evals/qe-browser.yaml`.
|
|
10
|
+
# It is executed by `aqe eval run --skill qe-browser` via CommandEvalRunner
|
|
11
|
+
# (src/validation/command-eval-runner.ts). The CI workflow runs it in the
|
|
12
|
+
# "eval" job once the dist is built.
|
|
13
|
+
#
|
|
14
|
+
# This bash script mirrors the same test cases (tc001–tc011) so you can
|
|
15
|
+
# run them without building the AQE CLI — useful during local skill
|
|
16
|
+
# development and the initial smoke gate in CI (before the build finishes).
|
|
17
|
+
# It also covers one case the yaml can't express naturally:
|
|
18
|
+
# - tc011 F1 contract: vibium-missing -> skipped envelope + exit 2
|
|
19
|
+
# (uses `env -i PATH=<fake-bin>` isolation, which is clumsy in yaml)
|
|
8
20
|
#
|
|
9
21
|
# Exit codes:
|
|
10
22
|
# 0 — all smoke tests passed
|
|
@@ -11,6 +11,8 @@
|
|
|
11
11
|
*/
|
|
12
12
|
import { type BrainExportManifest, type BrainExportOptions, type BrainImportOptions, type BrainImportResult } from '../integrations/ruvector/brain-exporter.js';
|
|
13
13
|
import { type RvfBrainManifest, type RvfBrainImportResult } from '../integrations/ruvector/brain-rvf-exporter.js';
|
|
14
|
+
import { type BrainDiffOptions, type BrainDiffResult } from '../integrations/ruvector/brain-diff.js';
|
|
15
|
+
import { type BrainSearchOptions, type BrainSearchResult } from '../integrations/ruvector/brain-search.js';
|
|
14
16
|
/** Unified manifest type covering both formats */
|
|
15
17
|
export type BrainManifest = BrainExportManifest | RvfBrainManifest;
|
|
16
18
|
/** Unified import result type */
|
|
@@ -41,6 +43,18 @@ export declare function importBrain(dbPath: string, containerPath: string, optio
|
|
|
41
43
|
* Auto-detects format based on path.
|
|
42
44
|
*/
|
|
43
45
|
export declare function brainInfo(containerPath: string, format?: string): Promise<BrainManifest>;
|
|
46
|
+
/**
|
|
47
|
+
* Compare two brain exports and return a structured diff.
|
|
48
|
+
*
|
|
49
|
+
* Works for both JSONL and RVF exports at the manifest level; record-level
|
|
50
|
+
* added/removed/changed is only available when both sides are JSONL.
|
|
51
|
+
*/
|
|
52
|
+
export declare function brainDiff(pathA: string, pathB: string, options?: BrainDiffOptions): Promise<BrainDiffResult>;
|
|
53
|
+
/**
|
|
54
|
+
* Filtered search over a JSONL brain export. Domain/pattern-type/date-range
|
|
55
|
+
* filters plus an optional substring query on name + description.
|
|
56
|
+
*/
|
|
57
|
+
export declare function brainSearch(inputPath: string, options?: BrainSearchOptions): Promise<BrainSearchResult>;
|
|
44
58
|
export interface WitnessBackfillResult {
|
|
45
59
|
created: number;
|
|
46
60
|
skipped: number;
|