agentic-qe 3.15.12 → 3.15.14
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/helpers/brain-checkpoint.cjs +124 -5
- package/.claude/skills/skills-manifest.json +1 -1
- package/CHANGELOG.md +196 -0
- package/assets/skills/skills-manifest.json +1 -1
- package/dist/cli/bundle.js +6 -6
- package/dist/cli/chunks/adapter-23KA2YW7.js +2 -0
- package/dist/cli/chunks/{agent-booster-wasm-5VZCKTIJ.js → agent-booster-wasm-2DLAEZK6.js} +2 -2
- package/dist/cli/chunks/{agent-handler-K3C6CQCD.js → agent-handler-P3IY7XEE.js} +2 -2
- package/dist/cli/chunks/{agent-memory-branch-NVFQ25WS.js → agent-memory-branch-WWKC2H3G.js} +2 -2
- package/dist/cli/chunks/aqe-learning-engine-MUICAXW5.js +2 -0
- package/dist/cli/chunks/{arena-TSZVDSXS.js → arena-4BMFF6BS.js} +4 -4
- package/dist/cli/chunks/{arena-QGWIJADQ.js → arena-EIV5OALF.js} +2 -2
- package/dist/cli/chunks/{audit-KIEE2SHJ.js → audit-DNTI453H.js} +3 -3
- package/dist/cli/chunks/base-XPWGYDKD.js +2 -0
- package/dist/cli/chunks/{better-sqlite3-BNB32NW3.js → better-sqlite3-TQBQGNC6.js} +2 -2
- package/dist/cli/chunks/brain-handler-HY57CNAO.js +95 -0
- package/dist/cli/chunks/{branch-enumerator-LZ7UXKAY.js → branch-enumerator-THPMZPHQ.js} +2 -2
- package/dist/cli/chunks/{browser-VDHAW4RK.js → browser-O6JJOZCK.js} +2 -2
- package/dist/cli/chunks/browser-workflow-UMQVBVGK.js +2 -0
- package/dist/cli/chunks/{chunk-4PU5GTZW.js → chunk-2HPNGK7A.js} +2 -2
- package/dist/cli/chunks/{chunk-MCPXNUDK.js → chunk-2IJO3657.js} +2 -2
- package/dist/cli/chunks/{chunk-4Y6OEBJZ.js → chunk-2QLE6NDW.js} +1 -1
- package/dist/cli/chunks/{chunk-DZGPUGUG.js → chunk-2UZBLC5H.js} +2 -2
- package/dist/cli/chunks/{chunk-5A66EGEW.js → chunk-2W5MQDHM.js} +2 -2
- package/dist/cli/chunks/{chunk-JRYWLOBD.js → chunk-3FITMWWJ.js} +2 -2
- package/dist/cli/chunks/{chunk-RCOLPF3B.js → chunk-3TF27MG5.js} +2 -2
- package/dist/cli/chunks/{chunk-KGA7VAI4.js → chunk-3XACRXBY.js} +2 -2
- package/dist/cli/chunks/{chunk-SQVZ3TRU.js → chunk-43XHGWYH.js} +2 -2
- package/dist/cli/chunks/{chunk-JR6CUKAI.js → chunk-4RPBODN5.js} +2 -2
- package/dist/cli/chunks/{chunk-C3YOVASQ.js → chunk-4T7XV5KQ.js} +1 -1
- package/dist/cli/chunks/{chunk-N7O3PF6Y.js → chunk-4WLIOPHX.js} +2 -2
- package/dist/cli/chunks/{chunk-PGSJBXTD.js → chunk-52KOPIMI.js} +2 -2
- package/dist/cli/chunks/{chunk-4KUOYDY2.js → chunk-56NSE3LJ.js} +2 -2
- package/dist/cli/chunks/{chunk-3IU4LDZR.js → chunk-57DRT6UA.js} +2 -2
- package/dist/cli/chunks/{chunk-2JYUA27M.js → chunk-57FX3GP6.js} +1 -1
- package/dist/cli/chunks/{chunk-7QEUHNKO.js → chunk-5PLBQZ5J.js} +1 -1
- package/dist/cli/chunks/{chunk-VF7FTD64.js → chunk-5Y7UFHJD.js} +1 -1
- package/dist/cli/chunks/{chunk-7JFDLL2F.js → chunk-5Z4MO2F3.js} +1 -1
- package/dist/cli/chunks/chunk-65EE2EST.js +8 -0
- package/dist/cli/chunks/{chunk-66PXR3NI.js → chunk-6NIGSY5L.js} +2 -2
- package/dist/cli/chunks/chunk-6O63ZTVX.js +3 -0
- package/dist/cli/chunks/{chunk-ZYOYR3UR.js → chunk-6OI5SK7M.js} +1 -1
- package/dist/cli/chunks/{chunk-5TAEW5OV.js → chunk-6P4Q4RTC.js} +1 -1
- package/dist/cli/chunks/{chunk-W5HQIYQU.js → chunk-7724KXM2.js} +3 -3
- package/dist/cli/chunks/{chunk-A2JCRXTK.js → chunk-7MISCSL5.js} +2 -2
- package/dist/cli/chunks/{chunk-OHVYINGM.js → chunk-7MUO4DEH.js} +3 -3
- package/dist/cli/chunks/{chunk-QCPVUNN3.js → chunk-7QUSNBAA.js} +2 -2
- package/dist/cli/chunks/{chunk-YUA6ZKKY.js → chunk-7SQTLUEN.js} +2 -2
- package/dist/cli/chunks/{chunk-CA5UNWQF.js → chunk-7T6L3LFN.js} +2 -2
- package/dist/cli/chunks/{chunk-UREDS662.js → chunk-7TH4PJSU.js} +2 -2
- package/dist/cli/chunks/{chunk-TVA5GRIU.js → chunk-7Y3LXH57.js} +2 -2
- package/dist/cli/chunks/{chunk-A5Y7DAVQ.js → chunk-A2T56XVL.js} +2 -2
- package/dist/cli/chunks/{chunk-ZROAMFX2.js → chunk-AJVLVF7V.js} +2 -2
- package/dist/cli/chunks/{chunk-26672ISV.js → chunk-ARRBXCII.js} +2 -2
- package/dist/cli/chunks/{chunk-5S4UIDFK.js → chunk-AYLEH2UF.js} +1 -1
- package/dist/cli/chunks/{chunk-DRCBRUGN.js → chunk-BBYJBZHG.js} +2 -2
- package/dist/cli/chunks/{chunk-BMG2JLSQ.js → chunk-BM3EJLMV.js} +2 -2
- package/dist/cli/chunks/{chunk-6QRI3JVE.js → chunk-BNG4J3CE.js} +2 -2
- package/dist/cli/chunks/{chunk-EN7GRVEQ.js → chunk-BPDAQB3F.js} +2 -2
- package/dist/cli/chunks/{chunk-J7Y7ZBIT.js → chunk-BQJ7CV53.js} +9 -9
- package/dist/cli/chunks/{chunk-ADUAJIAU.js → chunk-C3OIBFAA.js} +2 -2
- package/dist/cli/chunks/{chunk-4LWMAAWK.js → chunk-CAZM63TP.js} +2 -2
- package/dist/cli/chunks/{chunk-UZED4YZ5.js → chunk-CIINJHOX.js} +1 -1
- package/dist/cli/chunks/{chunk-C74M4WUI.js → chunk-CPPYZYXC.js} +2 -2
- package/dist/cli/chunks/chunk-D3ZZ2NLL.js +62 -0
- package/dist/cli/chunks/{chunk-U7ZHDGXG.js → chunk-D5GB5PUU.js} +1 -1
- package/dist/cli/chunks/{chunk-HZBXJFGN.js → chunk-DLTB5KCR.js} +2 -2
- package/dist/cli/chunks/{chunk-NNBQZR73.js → chunk-DRLSJJIC.js} +2 -2
- package/dist/cli/chunks/{chunk-HLGFHHWV.js → chunk-DSQESXL4.js} +2 -2
- package/dist/cli/chunks/{chunk-LFBA735S.js → chunk-E2JLAW3U.js} +3 -3
- package/dist/cli/chunks/{chunk-PT2NXS43.js → chunk-E3QIQMMN.js} +1 -1
- package/dist/cli/chunks/{chunk-35MIUSXQ.js → chunk-E7OR6V3V.js} +2 -2
- package/dist/cli/chunks/{chunk-G24SWTAX.js → chunk-E7QTWGPI.js} +413 -413
- package/dist/cli/chunks/{chunk-PX5OPXY6.js → chunk-EC65UZ77.js} +1 -1
- package/dist/cli/chunks/{chunk-JNXK47OL.js → chunk-EIEEST4T.js} +2 -2
- package/dist/cli/chunks/{chunk-2PPSS4JD.js → chunk-FHPNWHY7.js} +2 -2
- package/dist/cli/chunks/{chunk-PTBOLBM4.js → chunk-FJOIBZUB.js} +2 -2
- package/dist/cli/chunks/{chunk-TXEUVUMO.js → chunk-FTYRPEJS.js} +1 -1
- package/dist/cli/chunks/{chunk-ZPVGX4DI.js → chunk-G7HGUQAE.js} +2 -2
- package/dist/cli/chunks/{chunk-EF6OERRR.js → chunk-GY4P7KAI.js} +1 -1
- package/dist/cli/chunks/{chunk-UUZZXHUF.js → chunk-H3C5FJRH.js} +2 -2
- package/dist/cli/chunks/{chunk-L3PV7VXK.js → chunk-H4LYXLAT.js} +1 -1
- package/dist/cli/chunks/{chunk-5Z23ZMXZ.js → chunk-HAYKLXCT.js} +63 -61
- package/dist/cli/chunks/{chunk-IPA7K556.js → chunk-HEDGFKC5.js} +2 -2
- package/dist/cli/chunks/{chunk-BC4T6SCV.js → chunk-HHBF2BZC.js} +4 -4
- package/dist/cli/chunks/{chunk-IVTQF55W.js → chunk-HSDWPQQY.js} +3 -3
- package/dist/cli/chunks/{chunk-SG2TX72G.js → chunk-HTVGHHX2.js} +2 -2
- package/dist/cli/chunks/{chunk-FZJCBSN4.js → chunk-HV43NX4A.js} +2 -2
- package/dist/cli/chunks/{chunk-MMEALJ4D.js → chunk-IDBA5GK2.js} +2 -2
- package/dist/cli/chunks/{chunk-IA55PFLG.js → chunk-INGXD5IX.js} +2 -2
- package/dist/cli/chunks/{chunk-RYHG3I7J.js → chunk-IQRPR4KB.js} +2 -2
- package/dist/cli/chunks/{chunk-7OEFBWAG.js → chunk-IRPNEXOU.js} +2 -2
- package/dist/cli/chunks/{chunk-P7UFJ6DO.js → chunk-J35JWDJE.js} +1 -1
- package/dist/cli/chunks/chunk-J6ASX536.js +2 -0
- package/dist/cli/chunks/{chunk-2ASQRBK2.js → chunk-JAOCHPYX.js} +2 -2
- package/dist/cli/chunks/{chunk-G3AABG4Q.js → chunk-JB7R77SH.js} +2 -2
- package/dist/cli/chunks/{chunk-HSA5IGGW.js → chunk-JI67T6Q2.js} +2 -2
- package/dist/cli/chunks/{chunk-ZGROHCOW.js → chunk-JJHLGGPP.js} +1 -1
- package/dist/cli/chunks/{chunk-L7NGKANW.js → chunk-JK6PMLQQ.js} +2 -2
- package/dist/cli/chunks/{chunk-IL7GQNNE.js → chunk-JO26SG47.js} +2 -2
- package/dist/cli/chunks/{chunk-3EWQN37E.js → chunk-JSSU4RIK.js} +2 -2
- package/dist/cli/chunks/{chunk-TOWOJGEI.js → chunk-K2SMP4OD.js} +1 -1
- package/dist/cli/chunks/{chunk-YVJEUX3I.js → chunk-K7GFYFBO.js} +2 -2
- package/dist/cli/chunks/{chunk-DAUEK66C.js → chunk-K7RT6ITZ.js} +1 -1
- package/dist/cli/chunks/{chunk-33I2ZP6E.js → chunk-KJ5A54ZH.js} +2 -2
- package/dist/cli/chunks/{chunk-W4II6SIH.js → chunk-L5VSLPMW.js} +2 -2
- package/dist/cli/chunks/{chunk-NVRYELCY.js → chunk-L752CNG3.js} +3 -3
- package/dist/cli/chunks/{chunk-MAJXZYGK.js → chunk-L7PC675Y.js} +1 -1
- package/dist/cli/chunks/{chunk-YWWMNTBF.js → chunk-LTGQJYYO.js} +2 -2
- package/dist/cli/chunks/{chunk-7DNR4KKR.js → chunk-M2TG7VDK.js} +1 -1
- package/dist/cli/chunks/{chunk-2E2QO44T.js → chunk-M5JEA6ZY.js} +2 -2
- package/dist/cli/chunks/{chunk-IETBWYHW.js → chunk-MB4UKUBV.js} +2 -2
- package/dist/cli/chunks/{chunk-W7H55PY4.js → chunk-MKYOE7NE.js} +1 -1
- package/dist/cli/chunks/{chunk-FNUFTWEO.js → chunk-MQXWG55U.js} +3 -3
- package/dist/cli/chunks/{chunk-O4QJMANM.js → chunk-MR2OPUSA.js} +1 -1
- package/dist/cli/chunks/{chunk-KA5SHLMW.js → chunk-N736GLWZ.js} +2 -2
- package/dist/cli/chunks/{chunk-NV74SICL.js → chunk-NHEG2DLN.js} +2 -2
- package/dist/cli/chunks/chunk-NKOLILT7.js +86 -0
- package/dist/cli/chunks/{chunk-KJDI5CHX.js → chunk-NPCXGX7N.js} +2 -2
- package/dist/cli/chunks/{chunk-2IVE5AR3.js → chunk-NZQYJCO6.js} +1 -1
- package/dist/cli/chunks/{chunk-4SA7M34P.js → chunk-O2AAYJUV.js} +1 -1
- package/dist/cli/chunks/{chunk-ULCW6IVQ.js → chunk-O32BFQV4.js} +2 -2
- package/dist/cli/chunks/{chunk-JOWUS2X5.js → chunk-O3ERGUXH.js} +1 -1
- package/dist/cli/chunks/{chunk-BYRCB5JT.js → chunk-O5CEL447.js} +2 -2
- package/dist/cli/chunks/{chunk-CPIBIR3X.js → chunk-O756AOUX.js} +2 -2
- package/dist/cli/chunks/{chunk-TSOQ2QLT.js → chunk-OCN53CCK.js} +2 -2
- package/dist/cli/chunks/{chunk-YLKIXEPP.js → chunk-OGEIHS76.js} +1 -1
- package/dist/cli/chunks/{chunk-ICKUINKD.js → chunk-OLUOVNUF.js} +2 -2
- package/dist/cli/chunks/{chunk-5ADXFUMO.js → chunk-P2TPH3TC.js} +2 -2
- package/dist/cli/chunks/{chunk-SBHM5X2S.js → chunk-PCQZIAXB.js} +2 -2
- package/dist/cli/chunks/{chunk-CDA5Z74H.js → chunk-PGN4TARY.js} +2 -2
- package/dist/cli/chunks/{chunk-P5E26N2X.js → chunk-PNRPVQGI.js} +2 -2
- package/dist/cli/chunks/{chunk-23PQF7NN.js → chunk-PWQWKYBG.js} +1 -1
- package/dist/cli/chunks/{chunk-T4EN5VVK.js → chunk-QNQE3EOH.js} +2 -2
- package/dist/cli/chunks/chunk-QP2HLKTS.js +2 -0
- package/dist/cli/chunks/{chunk-7TA5MUPW.js → chunk-QP6GL3O5.js} +1 -1
- package/dist/cli/chunks/{chunk-GKFV6CUD.js → chunk-QUZ745UQ.js} +2 -2
- package/dist/cli/chunks/{chunk-INZARYUD.js → chunk-R5RRWLRI.js} +2 -2
- package/dist/cli/chunks/{chunk-VZBC6DP7.js → chunk-RE6JTSDM.js} +1 -1
- package/dist/cli/chunks/{chunk-JGIJPDGD.js → chunk-TOJF3ZG4.js} +2 -2
- package/dist/cli/chunks/{chunk-WLRU6ESI.js → chunk-TSP6SU5V.js} +2 -2
- package/dist/cli/chunks/{chunk-6E6HB4N4.js → chunk-TW6Z6W4X.js} +4 -4
- package/dist/cli/chunks/{chunk-ENGL7FIJ.js → chunk-TWOV3I3A.js} +1 -1
- package/dist/cli/chunks/chunk-U4TML2VD.js +3 -0
- package/dist/cli/chunks/{chunk-O3IM4WRZ.js → chunk-U6IOQKCT.js} +2 -2
- package/dist/cli/chunks/{chunk-SPC4RBLF.js → chunk-UDSB3XCG.js} +2 -2
- package/dist/cli/chunks/{chunk-URSTP3WI.js → chunk-UFP7SN5V.js} +2 -2
- package/dist/cli/chunks/{chunk-MYF5CNGV.js → chunk-UMHFTQTR.js} +2 -2
- package/dist/cli/chunks/{chunk-65TH6RPD.js → chunk-UNYTHZDZ.js} +1 -1
- package/dist/cli/chunks/{chunk-FAGKBOX2.js → chunk-UPWLMIDY.js} +2 -2
- package/dist/cli/chunks/{chunk-4CB3QPZM.js → chunk-USAKCGHC.js} +2 -2
- package/dist/cli/chunks/{chunk-QUJJYTJH.js → chunk-V3MGY76S.js} +2 -2
- package/dist/cli/chunks/{chunk-WDEXOLK2.js → chunk-V6SE2ZU2.js} +1 -1
- package/dist/cli/chunks/{chunk-JW5PDJ5O.js → chunk-VCVRZD4Y.js} +3 -3
- package/dist/cli/chunks/{chunk-TGMXUZZC.js → chunk-VG32EEUG.js} +2 -2
- package/dist/cli/chunks/{chunk-MYUMJ2ZI.js → chunk-VGZOPQQY.js} +1 -1
- package/dist/cli/chunks/{chunk-BOSMELJX.js → chunk-VJBJRFUO.js} +2 -2
- package/dist/cli/chunks/{chunk-K3A3NWT3.js → chunk-WBC6WB32.js} +2 -2
- package/dist/cli/chunks/{chunk-QWG3SILX.js → chunk-WCM6WE7G.js} +5 -5
- package/dist/cli/chunks/{chunk-GJKZ7UQO.js → chunk-WCPSR4MJ.js} +2 -2
- package/dist/cli/chunks/{chunk-U6IXYQO4.js → chunk-WKI46WWN.js} +2 -2
- package/dist/cli/chunks/{chunk-NX4BCSOZ.js → chunk-WM2QRIRD.js} +2 -2
- package/dist/cli/chunks/{chunk-32UTHIY5.js → chunk-WRC3HLUY.js} +3 -3
- package/dist/cli/chunks/{chunk-AJEXPFAB.js → chunk-WUGXXNK4.js} +1 -1
- package/dist/cli/chunks/{chunk-NA3F6FEO.js → chunk-WZQADC5R.js} +2 -2
- package/dist/cli/chunks/{chunk-SDRJJUPO.js → chunk-X6NJOT3V.js} +1 -1
- package/dist/cli/chunks/{chunk-CU36D7TN.js → chunk-X6Q2N5S5.js} +2 -2
- package/dist/cli/chunks/{chunk-UIKQPO4Y.js → chunk-X7CUI7KH.js} +2 -2
- package/dist/cli/chunks/{chunk-MCPEC6OO.js → chunk-XMCSKYDE.js} +1 -1
- package/dist/cli/chunks/{chunk-WTAUF6O4.js → chunk-XN3KCKAM.js} +2 -2
- package/dist/cli/chunks/{chunk-TLRHAMX5.js → chunk-XSPMLJCQ.js} +1 -1
- package/dist/cli/chunks/{chunk-VUR5THML.js → chunk-XTZGAG6P.js} +2 -2
- package/dist/cli/chunks/{chunk-47RMGDG4.js → chunk-YE54T2NQ.js} +2 -2
- package/dist/cli/chunks/{chunk-HM3LSFTY.js → chunk-YEFTK4HD.js} +2 -2
- package/dist/cli/chunks/{chunk-4HWUECVD.js → chunk-YGC5QKQ4.js} +2 -2
- package/dist/cli/chunks/{chunk-SUX5XB2Z.js → chunk-YGOSSVY5.js} +2 -2
- package/dist/cli/chunks/{chunk-UJNGGFGX.js → chunk-YKQWIXUY.js} +2 -2
- package/dist/cli/chunks/{chunk-SITL5YZV.js → chunk-Z2S7DNFP.js} +2 -2
- package/dist/cli/chunks/{chunk-WGTEZT7G.js → chunk-Z54G2YOL.js} +2 -2
- package/dist/cli/chunks/{chunk-YNVEDFPQ.js → chunk-ZJGFQK27.js} +1 -1
- package/dist/cli/chunks/{chunk-35NW676P.js → chunk-ZUE524JL.js} +2 -2
- package/dist/cli/chunks/{ci-BZNWW3I3.js → ci-UMA2SMNW.js} +2 -2
- package/dist/cli/chunks/{ci-config-LOHNXOKV.js → ci-config-UQSILJFQ.js} +2 -2
- package/dist/cli/chunks/{ci-output-LCOQBSJL.js → ci-output-U6YZLLKH.js} +2 -2
- package/dist/cli/chunks/{circuit-breaker-7LRXTLFE.js → circuit-breaker-ATYQP6X2.js} +2 -2
- package/dist/cli/chunks/{claude-flow-setup-HBU4VWC3.js → claude-flow-setup-6YHFD7AN.js} +2 -2
- package/dist/cli/chunks/client-E43GWLQH.js +2 -0
- package/dist/cli/chunks/{cline-installer-CO6MLH6X.js → cline-installer-EPE7IOZE.js} +2 -2
- package/dist/cli/chunks/{code-SIXBS6JM.js → code-NUEJ4XYO.js} +19 -18
- package/dist/cli/chunks/{code-index-extractor-GWJKZ2IQ.js → code-index-extractor-D4DBT6OL.js} +2 -2
- package/dist/cli/chunks/{codex-installer-6NINVWXJ.js → codex-installer-633SM4LR.js} +2 -2
- package/dist/cli/chunks/{completions-7VIX3GML.js → completions-WUKVIW3L.js} +2 -2
- package/dist/cli/chunks/{complexity-analyzer-FBQR6ZP2.js → complexity-analyzer-F73ACR5H.js} +2 -2
- package/dist/cli/chunks/{continuedev-installer-VA7RIXW5.js → continuedev-installer-QH42TKMS.js} +2 -2
- package/dist/cli/chunks/{copilot-installer-4QEBC4MU.js → copilot-installer-Y3XC7BTT.js} +2 -2
- package/dist/cli/chunks/core-handlers-R5A3SQDY.js +2 -0
- package/dist/cli/chunks/{cost-tracker-GRYKHPWL.js → cost-tracker-57QPV7E3.js} +2 -2
- package/dist/cli/chunks/coverage-IBCHMBCR.js +51 -0
- package/dist/cli/chunks/cross-domain-router-LLYVPZF6.js +2 -0
- package/dist/cli/chunks/{cursor-installer-ZXIPSZVH.js → cursor-installer-F4UYQHIN.js} +2 -2
- package/dist/cli/chunks/{daemon-N2VRHPSJ.js → daemon-BYYPIJ7G.js} +4 -4
- package/dist/cli/chunks/{daemon-D7F3RGI5.js → daemon-XR4Q6YZF.js} +3 -3
- package/dist/cli/chunks/{dag-attention-scheduler-NL6BA7BY.js → dag-attention-scheduler-ZR5ZD3TW.js} +2 -2
- package/dist/cli/chunks/{detect-XC2HCIIT.js → detect-GEGYURLL.js} +2 -2
- package/dist/cli/chunks/{dist-node-A3Y26MEI.js → dist-node-JU3KT2JO.js} +2 -2
- package/dist/cli/chunks/{domain-handler-WV6SFXRB.js → domain-handler-7QI3FJGE.js} +2 -2
- package/dist/cli/chunks/{domain-plugins-KJIF6Z2B.js → domain-plugins-O2YRM2PD.js} +2 -2
- package/dist/cli/chunks/domain-transfer-7J3S2OS6.js +2 -0
- package/dist/cli/chunks/dream-6C4NURSE.js +2 -0
- package/dist/cli/chunks/{embed-and-insert-pattern-PA3Y4KGO.js → embed-and-insert-pattern-URES5Q6J.js} +2 -2
- package/dist/cli/chunks/{eval-YGEZNUVE.js → eval-RVMCIUOR.js} +2 -2
- package/dist/cli/chunks/{experience-capture-middleware-D4T7NW6B.js → experience-capture-middleware-SYJQSBKE.js} +3 -3
- package/dist/cli/chunks/{fast-paths-6JYK7RYQ.js → fast-paths-QUKPKWKZ.js} +2 -2
- package/dist/cli/chunks/{feature-flags-DKXMDVPE.js → feature-flags-5JCSKL2P.js} +2 -2
- package/dist/cli/chunks/{feature-flags-RBH2GDSR.js → feature-flags-K7JXNKJI.js} +2 -2
- package/dist/cli/chunks/file-discovery-J5IE5KP7.js +2 -0
- package/dist/cli/chunks/fleet-II4Q6HXK.js +44 -0
- package/dist/cli/chunks/{gnn-wrapper-MV54UC4C.js → gnn-wrapper-M7VO2EMS.js} +2 -2
- package/dist/cli/chunks/{heartbeat-handler-7DKMVQQH.js → heartbeat-handler-ND5CY26N.js} +4 -4
- package/dist/cli/chunks/heartbeat-scheduler-FC5PBTMN.js +2 -0
- package/dist/cli/chunks/hnsw-adapter-47UIVOBG.js +2 -0
- package/dist/cli/chunks/hnsw-index-3AKVLOZQ.js +2 -0
- package/dist/cli/chunks/{hnsw-legacy-bridge-6IWREDQC.js → hnsw-legacy-bridge-N3AUUUU7.js} +2 -2
- package/dist/cli/chunks/{hnswlib-node-5BIESSCK.js → hnswlib-node-NZY3E5EN.js} +2 -2
- package/dist/cli/chunks/{hooks-3EETRM62.js → hooks-QVJDTII5.js} +10 -10
- package/dist/cli/chunks/hybrid-backend-YAOSNX47.js +2 -0
- package/dist/cli/chunks/{hypergraph-engine-RSWCB2D3.js → hypergraph-engine-ZRY6MTDV.js} +2 -2
- package/dist/cli/chunks/{hypergraph-handler-552LXKL3.js → hypergraph-handler-56DO4XZQ.js} +3 -3
- package/dist/cli/chunks/impact-analyzer-4FMJXM4M.js +2 -0
- package/dist/cli/chunks/{init-guard-OTDBJ5HD.js → init-guard-DTF4EVUY.js} +2 -2
- package/dist/cli/chunks/{init-handler-3FK3TKEA.js → init-handler-M6CNQHMX.js} +6 -6
- package/dist/cli/chunks/init-wizard-RTLCRWDT.js +2 -0
- package/dist/cli/chunks/kernel-2OWIGGGT.js +2 -0
- package/dist/cli/chunks/{kilocode-installer-KZ2O4LF3.js → kilocode-installer-IJN7XKBH.js} +2 -2
- package/dist/cli/chunks/{kiro-installer-MLCCXRF7.js → kiro-installer-UKKPGPDC.js} +2 -2
- package/dist/cli/chunks/knowledge-graph-25XXKDJN.js +2 -0
- package/dist/cli/chunks/learning-W2HETWQ4.js +131 -0
- package/dist/cli/chunks/{llm-router-PDEV3UP2.js → llm-router-Y546K4VX.js} +4 -4
- package/dist/cli/chunks/llm-router-service-G3EIN4UB.js +2 -0
- package/dist/cli/chunks/{load-XFVVLO7E.js → load-MKAB2AXE.js} +2 -2
- package/dist/cli/chunks/load-test-D6QYNIVT.js +2 -0
- package/dist/cli/chunks/{mcp-74G3CL2S.js → mcp-AZKUS6K3.js} +2 -2
- package/dist/cli/chunks/{memory-XIFM6JNX.js → memory-ZDOQN2KU.js} +5 -5
- package/dist/cli/chunks/memory-backend-LDFFZMEQ.js +2 -0
- package/dist/cli/chunks/{memory-handlers-ZCKURV6S.js → memory-handlers-3SQVY7FE.js} +2 -2
- package/dist/cli/chunks/{multi-model-executor-7L4W3O2Q.js → multi-model-executor-WWVXDHG4.js} +2 -2
- package/dist/cli/chunks/{opencode-installer-BPG422LF.js → opencode-installer-YUJNXXWS.js} +2 -2
- package/dist/cli/chunks/{orchestrator-OEAFLAEV.js → orchestrator-Z6PWPLRE.js} +109 -25
- package/dist/cli/chunks/pattern-null-store-KDVRM7PW.js +2 -0
- package/dist/cli/chunks/{pattern-usage-recorder-LOPNCULT.js → pattern-usage-recorder-TPWPX32U.js} +2 -2
- package/dist/cli/chunks/{pipeline-VWTYUZB7.js → pipeline-4BBGTE4M.js} +2 -2
- package/dist/cli/chunks/{platform-WFJJ3X2E.js → platform-5GSHXCV5.js} +2 -2
- package/dist/cli/chunks/{plugin-744TPUSG.js → plugin-OFDVF5HS.js} +2 -2
- package/dist/cli/chunks/{prime-radiant-advanced-wasm-BD5BLNDR.js → prime-radiant-advanced-wasm-NC6MUYGJ.js} +2 -2
- package/dist/cli/chunks/project-root-DDGBWDP6.js +2 -0
- package/dist/cli/chunks/protocol-executor-KBOLLCWA.js +2 -0
- package/dist/cli/chunks/{protocol-handler-JIBILI74.js → protocol-handler-MPOAAEPA.js} +2 -2
- package/dist/cli/chunks/{prove-MNOL5FYW.js → prove-CDKMAIVM.js} +2 -2
- package/dist/cli/chunks/qe-reasoning-bank-GRXBT7FC.js +2 -0
- package/dist/cli/chunks/{quality-JEGBDGGX.js → quality-ZH4F7R7R.js} +2 -2
- package/dist/cli/chunks/{quality-gate-SYJ6ROMI.js → quality-gate-IDRMW6OE.js} +3 -3
- package/dist/cli/chunks/queen-coordinator-L2QWMJ5Q.js +2 -0
- package/dist/cli/chunks/{real-embeddings-ZWXS5ZFV.js → real-embeddings-I2UVNNB3.js} +2 -2
- package/dist/cli/chunks/{ref-validation-RRHUFW2N.js → ref-validation-Z5GCGVXK.js} +2 -2
- package/dist/cli/chunks/{roocode-installer-XFO6JSVN.js → roocode-installer-IZ2S7PH2.js} +2 -2
- package/dist/cli/chunks/router-FT5WJPUH.js +2 -0
- package/dist/cli/chunks/routing-feedback-EO2MKOUX.js +2 -0
- package/dist/cli/chunks/{routing-handler-L2K3JASE.js → routing-handler-NAX35VUW.js} +2 -2
- package/dist/cli/chunks/{ruvector-commands-A6CINHGM.js → ruvector-commands-5YW2SOFF.js} +2 -2
- package/dist/cli/chunks/rvf-dual-writer-WHBFQJVU.js +2 -0
- package/dist/cli/chunks/rvf-migration-adapter-YT3APF2I.js +2 -0
- package/dist/cli/chunks/{rvf-migration-coordinator-T4RY7L53.js → rvf-migration-coordinator-VUIZHTVG.js} +2 -2
- package/dist/cli/chunks/rvf-native-adapter-37PUFKQD.js +2 -0
- package/dist/cli/chunks/{rvf-store-integrity-IR33TGQS.js → rvf-store-integrity-IPGCAT6C.js} +2 -2
- package/dist/cli/chunks/safe-db-TDZKUOZJ.js +2 -0
- package/dist/cli/chunks/schedule-CRKTRY2A.js +2 -0
- package/dist/cli/chunks/scheduler-6ZBDVQWN.js +2 -0
- package/dist/cli/chunks/{security-Z5GDE2IH.js → security-3IH4BO5Z.js} +3 -3
- package/dist/cli/chunks/{shared-rvf-adapter-SIZMEHPM.js → shared-rvf-adapter-ABY7PAY2.js} +2 -2
- package/dist/cli/chunks/{shared-rvf-dual-writer-HLM65RDS.js → shared-rvf-dual-writer-6KENLN2W.js} +2 -2
- package/dist/cli/chunks/sqlite-persistence-FFJQAIKW.js +2 -0
- package/dist/cli/chunks/{standalone-memory-SKSZG7P5.js → standalone-memory-RLFAUGOW.js} +2 -2
- package/dist/cli/chunks/{status-handler-766YOOMJ.js → status-handler-FCOZBPE5.js} +2 -2
- package/dist/cli/chunks/{structural-health-M45FNOLT.js → structural-health-4RDA5UUM.js} +2 -2
- package/dist/cli/chunks/{sync-B2U366I3.js → sync-54LUAUTK.js} +2 -2
- package/dist/cli/chunks/{sync-6CJ24B5T.js → sync-KGEEXXCC.js} +2 -2
- package/dist/cli/chunks/task-handler-K3OXHYKU.js +62 -0
- package/dist/cli/chunks/task-handlers-6H7L2UT4.js +9 -0
- package/dist/cli/chunks/{test-TODH7KRF.js → test-S7IG6EIX.js} +4 -4
- package/dist/cli/chunks/test-runner-process-OTQDAJLN.js +2 -0
- package/dist/cli/chunks/{test-scheduling-VMVMVRHT.js → test-scheduling-7XYXI4L2.js} +3 -3
- package/dist/cli/chunks/{token-bootstrap-XQW7BMCK.js → token-bootstrap-3QMABE45.js} +2 -2
- package/dist/cli/chunks/{token-usage-JCZEIRKO.js → token-usage-Y2YTPOFE.js} +2 -2
- package/dist/cli/chunks/{transformers-U2ML3OHE.js → transformers-UCJ3HHHC.js} +2 -2
- package/dist/cli/chunks/tree-sitter-wasm-parser-D6JTTHTP.js +2 -0
- package/dist/cli/chunks/{types-GGEPCHP6.js → types-6CMFPETH.js} +2 -2
- package/dist/cli/chunks/unified-memory-QARWQKJ2.js +2 -0
- package/dist/cli/chunks/unified-memory-hnsw-LHY3DXCP.js +2 -0
- package/dist/cli/chunks/unified-persistence-WEYYGLHM.js +2 -0
- package/dist/cli/chunks/{upgrade-T5GRM7HS.js → upgrade-K25DN6WU.js} +2 -2
- package/dist/cli/chunks/{validate-XMUJPLP3.js → validate-T4V3TBY3.js} +2 -2
- package/dist/cli/chunks/{validate-swarm-KJLF7JEH.js → validate-swarm-XSRC576T.js} +2 -2
- package/dist/cli/chunks/visual-security-O4ALMCXQ.js +2 -0
- package/dist/cli/chunks/{web-tree-sitter-LOHVZ7G5.js → web-tree-sitter-YOZXHRTN.js} +2 -2
- package/dist/cli/chunks/{windsurf-installer-33FBTXJU.js → windsurf-installer-ITPU2IYL.js} +2 -2
- package/dist/cli/chunks/witness-chain-B3YW5NMS.js +2 -0
- package/dist/cli/chunks/witness-chain-PIYR72HJ.js +2 -0
- package/dist/cli/chunks/{witness-chain-repair-VWBO4NXE.js → witness-chain-repair-YUG7E3UX.js} +2 -2
- package/dist/cli/chunks/{witness-chain-verifier-BHJ3ZAEK.js → witness-chain-verifier-DTDSVKOG.js} +2 -2
- package/dist/cli/chunks/{witness-key-manager-WNVPH2Z3.js → witness-key-manager-EWACWGAW.js} +2 -2
- package/dist/cli/chunks/{workflow-6QR5MQTO.js → workflow-ZIQ4FV42.js} +4 -4
- package/dist/cli/chunks/workflow-orchestrator-3ZN2BCGY.js +2 -0
- package/dist/cli/chunks/{wrappers-EHOL62TS.js → wrappers-PW2O27LL.js} +2 -2
- package/dist/cli/commands/code.js +6 -0
- package/dist/cli/commands/coverage.js +6 -0
- package/dist/cli/commands/fleet-run.d.ts +12 -0
- package/dist/cli/commands/fleet-run.js +175 -0
- package/dist/cli/commands/fleet.js +2 -117
- package/dist/cli/commands/learning-prune.d.ts +14 -0
- package/dist/cli/commands/learning-prune.js +105 -0
- package/dist/cli/commands/learning.js +9 -0
- package/dist/cli/handlers/brain-handler.js +12 -1
- package/dist/cli/handlers/task-handler.d.ts +5 -0
- package/dist/cli/handlers/task-handler.js +20 -0
- package/dist/cli/utils/coverage-verdict.js +14 -3
- package/dist/cli/utils/fleet-operation.d.ts +5 -2
- package/dist/cli/utils/fleet-operation.js +13 -2
- package/dist/cli/utils/fleet-result.d.ts +16 -2
- package/dist/cli/utils/fleet-result.js +26 -21
- package/dist/cli/utils/fleet-shard.d.ts +36 -0
- package/dist/cli/utils/fleet-shard.js +110 -0
- package/dist/context/compaction/index.d.ts +7 -0
- package/dist/context/compaction/index.js +30 -6
- package/dist/coordination/handlers/code-intelligence-handlers.js +21 -1
- package/dist/coordination/handlers/coverage-evidence.d.ts +19 -0
- package/dist/coordination/handlers/coverage-evidence.js +31 -2
- package/dist/coordination/handlers/coverage-handlers.js +5 -1
- package/dist/coordination/handlers/coverage-target.js +8 -1
- package/dist/coordination/handlers/handler-types.d.ts +2 -2
- package/dist/coordination/handlers/handler-utils.d.ts +6 -0
- package/dist/coordination/handlers/handler-utils.js +14 -4
- package/dist/coordination/handlers/misc-handlers.js +5 -2
- package/dist/coordination/handlers/quality-handlers.js +11 -3
- package/dist/coordination/handlers/security-handlers.js +12 -2
- package/dist/coordination/protocols/security-audit.js +11 -1
- package/dist/coordination/result-saver-adapters.js +1 -0
- package/dist/coordination/result-saver.js +9 -5
- package/dist/coordination/task-executor.js +7 -2
- package/dist/domains/chaos-resilience/services/chaos-engineer.d.ts +1 -0
- package/dist/domains/chaos-resilience/services/chaos-engineer.js +23 -45
- package/dist/domains/code-intelligence/coordinator-gnn.d.ts +2 -16
- package/dist/domains/code-intelligence/coordinator-gnn.js +1 -62
- package/dist/domains/code-intelligence/coordinator.d.ts +12 -6
- package/dist/domains/code-intelligence/coordinator.js +24 -27
- package/dist/domains/code-intelligence/interfaces.d.ts +9 -0
- package/dist/domains/code-intelligence/services/semantic-analyzer.d.ts +43 -5
- package/dist/domains/code-intelligence/services/semantic-analyzer.js +134 -71
- package/dist/domains/coverage-analysis/collected-metrics.d.ts +26 -0
- package/dist/domains/coverage-analysis/collected-metrics.js +54 -0
- package/dist/domains/coverage-analysis/services/coverage-analyzer.js +13 -3
- package/dist/domains/coverage-analysis/services/coverage-parser.d.ts +2 -0
- package/dist/domains/coverage-analysis/services/coverage-parser.js +18 -2
- package/dist/domains/defect-intelligence/services/defect-predictor.js +3 -6
- package/dist/domains/quality-assessment/coherence/gate-controller.js +16 -4
- package/dist/domains/quality-assessment/coherence/lambda-calculator.d.ts +8 -0
- package/dist/domains/quality-assessment/coherence/lambda-calculator.js +57 -14
- package/dist/domains/quality-assessment/coherence/types.d.ts +12 -7
- package/dist/domains/quality-assessment/coordinator-gate-evaluation.js +3 -1
- package/dist/domains/quality-assessment/coordinator-reports.d.ts +30 -10
- package/dist/domains/quality-assessment/coordinator-reports.js +93 -57
- package/dist/domains/quality-assessment/coordinator.d.ts +14 -40
- package/dist/domains/quality-assessment/coordinator.js +10 -4
- package/dist/domains/quality-assessment/coverage-report-event.d.ts +8 -0
- package/dist/domains/quality-assessment/coverage-report-event.js +22 -1
- package/dist/domains/quality-assessment/interfaces.d.ts +8 -0
- package/dist/domains/quality-assessment/services/coherence-gate.js +15 -2
- package/dist/domains/quality-assessment/services/quality-analyzer.d.ts +4 -0
- package/dist/domains/quality-assessment/services/quality-analyzer.js +63 -17
- package/dist/domains/quality-assessment/services/quality-gate.js +6 -4
- package/dist/domains/security-compliance/index.d.ts +1 -1
- package/dist/domains/security-compliance/interfaces.d.ts +46 -5
- package/dist/domains/security-compliance/services/scanners/dast-auth-testing.d.ts +3 -3
- package/dist/domains/security-compliance/services/scanners/dast-auth-testing.js +15 -14
- package/dist/domains/security-compliance/services/scanners/dast-helpers.d.ts +8 -9
- package/dist/domains/security-compliance/services/scanners/dast-helpers.js +19 -44
- package/dist/domains/security-compliance/services/scanners/dast-injection-testing.d.ts +3 -3
- package/dist/domains/security-compliance/services/scanners/dast-injection-testing.js +13 -9
- package/dist/domains/security-compliance/services/scanners/dast-requests.d.ts +54 -0
- package/dist/domains/security-compliance/services/scanners/dast-requests.js +125 -0
- package/dist/domains/security-compliance/services/scanners/dast-scanner.d.ts +5 -1
- package/dist/domains/security-compliance/services/scanners/dast-scanner.js +125 -155
- package/dist/domains/security-compliance/services/scanners/index.d.ts +1 -1
- package/dist/domains/security-compliance/services/scanners/index.js +1 -1
- package/dist/domains/security-compliance/services/scanners/scanner-types.d.ts +2 -2
- package/dist/domains/security-compliance/services/security-auditor-dast.js +183 -212
- package/dist/domains/security-compliance/services/security-auditor-reports.js +5 -1
- package/dist/domains/security-compliance/services/security-auditor.d.ts +11 -3
- package/dist/domains/security-compliance/services/security-auditor.js +106 -65
- package/dist/domains/test-execution/coordinator.d.ts +2 -1
- package/dist/domains/test-execution/coordinator.js +33 -27
- package/dist/domains/test-execution/interfaces.d.ts +10 -0
- package/dist/domains/test-execution/services/test-executor.d.ts +6 -0
- package/dist/domains/test-execution/services/test-executor.js +22 -4
- package/dist/domains/visual-accessibility/coordinator.js +34 -9
- package/dist/domains/visual-accessibility/interfaces.d.ts +27 -0
- package/dist/domains/visual-accessibility/plugin.js +5 -0
- package/dist/domains/visual-accessibility/services/accessibility-tester-heuristics.d.ts +13 -21
- package/dist/domains/visual-accessibility/services/accessibility-tester-heuristics.js +13 -297
- package/dist/domains/visual-accessibility/services/accessibility-tester.d.ts +13 -5
- package/dist/domains/visual-accessibility/services/accessibility-tester.js +96 -73
- package/dist/init/phases/07-hooks.js +90 -6
- package/dist/integrations/embeddings/index/HNSWIndex.js +8 -4
- package/dist/integrations/ruvector/brain-rvf-exporter.d.ts +25 -0
- package/dist/integrations/ruvector/brain-rvf-exporter.js +154 -61
- package/dist/integrations/ruvector/transfer-coherence-stub.js +5 -10
- package/dist/learning/dream/dream-engine.d.ts +24 -1
- package/dist/learning/dream/dream-engine.js +57 -6
- package/dist/learning/learning-retention.d.ts +103 -0
- package/dist/learning/learning-retention.js +213 -0
- package/dist/mcp/bundle.js +508 -503
- package/dist/mcp/handlers/domain-handler-configs.d.ts +17 -1
- package/dist/mcp/handlers/domain-handler-configs.js +33 -16
- package/dist/mcp/handlers/handler-factory.js +3 -0
- package/dist/mcp/handlers/model-route-handlers.d.ts +107 -0
- package/dist/mcp/handlers/model-route-handlers.js +139 -0
- package/dist/mcp/handlers/orchestrate-routes.js +41 -3
- package/dist/mcp/handlers/task-handlers.d.ts +3 -251
- package/dist/mcp/handlers/task-handlers.js +6 -828
- package/dist/mcp/handlers/task-inference.d.ts +26 -0
- package/dist/mcp/handlers/task-inference.js +156 -0
- package/dist/mcp/handlers/task-learning-handlers.d.ts +92 -0
- package/dist/mcp/handlers/task-learning-handlers.js +230 -0
- package/dist/mcp/handlers/task-orchestrate-handler.d.ts +73 -0
- package/dist/mcp/handlers/task-orchestrate-handler.js +361 -0
- package/dist/mcp/protocol-server.js +13 -3
- package/dist/mcp/tools/chaos-resilience/inject.d.ts +3 -4
- package/dist/mcp/tools/chaos-resilience/inject.js +11 -81
- package/dist/mcp/tools/code-intelligence/analyze.js +3 -6
- package/dist/mcp/tools/coverage-analysis/index.d.ts +4 -0
- package/dist/mcp/tools/coverage-analysis/index.js +8 -2
- package/dist/mcp/tools/learning-optimization/dream.d.ts +8 -0
- package/dist/mcp/tools/learning-optimization/dream.js +4 -0
- package/dist/mcp/tools/visual-accessibility/index.d.ts +7 -0
- package/dist/mcp/tools/visual-accessibility/index.js +29 -13
- package/dist/shared/events/domain-events.d.ts +2 -0
- package/dist/shared/metrics/code-metrics.js +21 -3
- package/dist/shared/parsers/typescript-parser.d.ts +6 -0
- package/dist/shared/parsers/typescript-parser.js +13 -1
- package/package.json +1 -1
- package/dist/cli/chunks/adapter-HL7MOCQN.js +0 -2
- package/dist/cli/chunks/aqe-learning-engine-OZ2DXB4G.js +0 -2
- package/dist/cli/chunks/base-WIM7G3HC.js +0 -2
- package/dist/cli/chunks/brain-handler-MPC5SPYI.js +0 -94
- package/dist/cli/chunks/browser-workflow-QRKCFVR3.js +0 -2
- package/dist/cli/chunks/chunk-4A76VPU4.js +0 -3
- package/dist/cli/chunks/chunk-QSGEBCDB.js +0 -62
- package/dist/cli/chunks/chunk-UCSK2RMI.js +0 -2
- package/dist/cli/chunks/chunk-VXVTFKRA.js +0 -2
- package/dist/cli/chunks/chunk-XCNSGSKV.js +0 -3
- package/dist/cli/chunks/chunk-XZOYKB22.js +0 -79
- package/dist/cli/chunks/chunk-YIDAXOUX.js +0 -8
- package/dist/cli/chunks/client-4PNYDFYS.js +0 -2
- package/dist/cli/chunks/core-handlers-ODO6LUWQ.js +0 -2
- package/dist/cli/chunks/coverage-USPMNKOU.js +0 -50
- package/dist/cli/chunks/cross-domain-router-DT4MHJKK.js +0 -2
- package/dist/cli/chunks/domain-transfer-L3F6AES2.js +0 -2
- package/dist/cli/chunks/dream-QOB3JCOM.js +0 -2
- package/dist/cli/chunks/file-discovery-BN76S2PR.js +0 -2
- package/dist/cli/chunks/fleet-43YMXACN.js +0 -46
- package/dist/cli/chunks/heartbeat-scheduler-3NNP4WCP.js +0 -2
- package/dist/cli/chunks/hnsw-adapter-MZR7Y4WF.js +0 -2
- package/dist/cli/chunks/hnsw-index-HE4AX22U.js +0 -2
- package/dist/cli/chunks/hybrid-backend-IHUHB3Y2.js +0 -2
- package/dist/cli/chunks/impact-analyzer-FI6GI6PD.js +0 -2
- package/dist/cli/chunks/init-wizard-WLQKH5Y5.js +0 -2
- package/dist/cli/chunks/kernel-2WZOQEZS.js +0 -2
- package/dist/cli/chunks/knowledge-graph-G3LVKK6P.js +0 -2
- package/dist/cli/chunks/learning-QUCMBD77.js +0 -122
- package/dist/cli/chunks/llm-router-service-MM75HKWJ.js +0 -2
- package/dist/cli/chunks/load-test-BEWEE44J.js +0 -2
- package/dist/cli/chunks/memory-backend-NYKBBKZR.js +0 -2
- package/dist/cli/chunks/pattern-null-store-QGPUIV6M.js +0 -2
- package/dist/cli/chunks/project-root-C7ELXZRK.js +0 -2
- package/dist/cli/chunks/protocol-executor-SUVE33BM.js +0 -2
- package/dist/cli/chunks/qe-reasoning-bank-YWZMMGJB.js +0 -2
- package/dist/cli/chunks/queen-coordinator-ZFAKXRN7.js +0 -2
- package/dist/cli/chunks/router-4FTAVYLJ.js +0 -2
- package/dist/cli/chunks/routing-feedback-IO2KOWMJ.js +0 -2
- package/dist/cli/chunks/rvf-dual-writer-KCIRNE7C.js +0 -2
- package/dist/cli/chunks/rvf-migration-adapter-MFC5WTJU.js +0 -2
- package/dist/cli/chunks/rvf-native-adapter-I3KWHE7X.js +0 -2
- package/dist/cli/chunks/safe-db-QXDZ6QY3.js +0 -2
- package/dist/cli/chunks/schedule-CZKD6RIY.js +0 -2
- package/dist/cli/chunks/scheduler-BLA3Q4CH.js +0 -2
- package/dist/cli/chunks/sqlite-persistence-XIUYDJC4.js +0 -2
- package/dist/cli/chunks/task-handler-P6IFLCKP.js +0 -62
- package/dist/cli/chunks/task-handlers-DPWMUKFC.js +0 -9
- package/dist/cli/chunks/test-runner-process-46IPK3GH.js +0 -2
- package/dist/cli/chunks/tree-sitter-wasm-parser-MOI2WWNJ.js +0 -2
- package/dist/cli/chunks/unified-memory-FL26RTV3.js +0 -2
- package/dist/cli/chunks/unified-memory-hnsw-E2BPTH3U.js +0 -2
- package/dist/cli/chunks/unified-persistence-5ZOUPKHF.js +0 -2
- package/dist/cli/chunks/visual-security-IJVPO5FA.js +0 -2
- package/dist/cli/chunks/witness-chain-5FAFCQKP.js +0 -2
- package/dist/cli/chunks/witness-chain-V2M32W5D.js +0 -2
- package/dist/cli/chunks/workflow-orchestrator-3JLF3IX7.js +0 -2
|
@@ -3,9 +3,10 @@
|
|
|
3
3
|
* Implements WCAG 2.2 compliance auditing with browser mode support
|
|
4
4
|
*
|
|
5
5
|
* This service supports multiple modes of operation:
|
|
6
|
-
* 1.
|
|
7
|
-
* 2. Browser Mode (
|
|
8
|
-
* 3.
|
|
6
|
+
* 1. Browser Mode (agent-browser): Real DOM inspection via unified browser client
|
|
7
|
+
* 2. Browser Mode (Vibium): Real DOM inspection via Vibium MCP integration
|
|
8
|
+
* 3. Not measured: no browser could load the page. The report says so
|
|
9
|
+
* (`measured: false`) and carries no findings (#1145).
|
|
9
10
|
*
|
|
10
11
|
* Browser mode provides more accurate results by:
|
|
11
12
|
* - Running actual axe-core accessibility checks in the browser
|
|
@@ -15,7 +16,8 @@
|
|
|
15
16
|
* Browser Client Integration:
|
|
16
17
|
* - Prefers agent-browser when available (supports snapshots and axe-core injection)
|
|
17
18
|
* - Falls back to Vibium if agent-browser unavailable
|
|
18
|
-
* -
|
|
19
|
+
* - Reports "not measured" when no browser tool could audit the page; it never
|
|
20
|
+
* guesses findings from the URL (#1145)
|
|
19
21
|
*
|
|
20
22
|
* @module domains/visual-accessibility/services/accessibility-tester
|
|
21
23
|
*/
|
|
@@ -28,7 +30,7 @@ import { toError } from '../../../shared/error-utils.js';
|
|
|
28
30
|
import { getBrowserClientForUseCase, } from '../../../integrations/browser/index.js';
|
|
29
31
|
// Extracted modules
|
|
30
32
|
import { WCAG_CRITERIA, getErrorMessage, auditWithBrowserClient, auditWithVibium, auditElementWithVibium, checkContrastWithVibium, checkKeyboardWithVibium, } from './accessibility-tester-browser.js';
|
|
31
|
-
import { initializeRules, filterRulesByLevel,
|
|
33
|
+
import { initializeRules, filterRulesByLevel, runSimulatedRule, hashUrl, } from './accessibility-tester-heuristics.js';
|
|
32
34
|
const DEFAULT_CONFIG = {
|
|
33
35
|
defaultWCAGLevel: 'AA',
|
|
34
36
|
includeWarnings: true,
|
|
@@ -109,28 +111,29 @@ export class AccessibilityTesterService {
|
|
|
109
111
|
async audit(url, options) {
|
|
110
112
|
try {
|
|
111
113
|
const wcagLevel = options?.wcagLevel || this.config.defaultWCAGLevel;
|
|
114
|
+
const failures = [];
|
|
112
115
|
if (this.shouldUseBrowserMode()) {
|
|
113
116
|
const browserClient = await this.getBrowserClient();
|
|
114
117
|
if (browserClient) {
|
|
115
118
|
const browserResult = await auditWithBrowserClient(browserClient, url, wcagLevel, this.config.browserConfig, options);
|
|
116
|
-
if (browserResult.success)
|
|
117
|
-
await this.
|
|
118
|
-
return browserResult;
|
|
119
|
-
}
|
|
119
|
+
if (browserResult.success)
|
|
120
|
+
return await this.measuredReport(browserResult.value);
|
|
120
121
|
const errorMsg = getErrorMessage(browserResult);
|
|
122
|
+
failures.push(errorMsg);
|
|
121
123
|
logger.warn(`Browser client audit failed: ${errorMsg}`);
|
|
122
124
|
}
|
|
123
125
|
if (this.vibiumClient && isBrowserModeEnabled() && isAxeCoreEnabled()) {
|
|
124
126
|
const vibiumResult = await auditWithVibium(this.vibiumClient, url, wcagLevel, this.config.browserConfig, options);
|
|
125
|
-
if (vibiumResult.success)
|
|
126
|
-
await this.
|
|
127
|
-
return vibiumResult;
|
|
128
|
-
}
|
|
127
|
+
if (vibiumResult.success)
|
|
128
|
+
return await this.measuredReport(vibiumResult.value);
|
|
129
129
|
const errorMsg = getErrorMessage(vibiumResult);
|
|
130
|
-
|
|
130
|
+
failures.push(errorMsg);
|
|
131
|
+
logger.warn(`Vibium audit failed; the page is not measured: ${errorMsg}`);
|
|
131
132
|
}
|
|
132
133
|
}
|
|
133
|
-
|
|
134
|
+
if (this.config.simulationMode)
|
|
135
|
+
return this.auditSimulated(url, wcagLevel, options);
|
|
136
|
+
return ok(this.notMeasuredReport(url, wcagLevel, this.notMeasuredReason(failures)));
|
|
134
137
|
}
|
|
135
138
|
catch (error) {
|
|
136
139
|
return err(toError(error));
|
|
@@ -139,12 +142,10 @@ export class AccessibilityTesterService {
|
|
|
139
142
|
async auditElement(url, selector) {
|
|
140
143
|
if (this.shouldUseBrowserMode() && this.vibiumClient) {
|
|
141
144
|
const browserResult = await auditElementWithVibium(this.vibiumClient, url, selector, this.config.defaultWCAGLevel, this.config.browserConfig);
|
|
142
|
-
if (browserResult.success)
|
|
143
|
-
await this.
|
|
144
|
-
return browserResult;
|
|
145
|
-
}
|
|
145
|
+
if (browserResult.success)
|
|
146
|
+
return await this.measuredReport(browserResult.value);
|
|
146
147
|
const errorMsg = getErrorMessage(browserResult);
|
|
147
|
-
logger.warn(`Browser mode element audit failed, falling back to
|
|
148
|
+
logger.warn(`Browser mode element audit failed, falling back to a page audit: ${errorMsg}`);
|
|
148
149
|
}
|
|
149
150
|
return this.audit(url, {
|
|
150
151
|
excludeSelectors: [],
|
|
@@ -152,9 +153,38 @@ export class AccessibilityTesterService {
|
|
|
152
153
|
});
|
|
153
154
|
}
|
|
154
155
|
// ============================================================================
|
|
155
|
-
//
|
|
156
|
+
// Unmeasured Results (#1145)
|
|
156
157
|
// ============================================================================
|
|
157
|
-
async
|
|
158
|
+
async measuredReport(report) {
|
|
159
|
+
const measured = { ...report, measured: true };
|
|
160
|
+
await this.storeReport(measured);
|
|
161
|
+
return ok(measured);
|
|
162
|
+
}
|
|
163
|
+
notMeasuredReason(failures) {
|
|
164
|
+
if (failures.length > 0)
|
|
165
|
+
return `no browser could audit the page (${failures.join('; ')})`;
|
|
166
|
+
if (!this.config.useBrowserMode)
|
|
167
|
+
return 'browser mode is disabled, and only a browser run measures a page';
|
|
168
|
+
return 'no browser is available (install agent-browser or connect Vibium) to load the page';
|
|
169
|
+
}
|
|
170
|
+
/** A report that says nothing was measured: no violations, no passes, no verdict. */
|
|
171
|
+
notMeasuredReport(url, wcagLevel, reason) {
|
|
172
|
+
return {
|
|
173
|
+
url,
|
|
174
|
+
timestamp: new Date(),
|
|
175
|
+
violations: [],
|
|
176
|
+
passes: [],
|
|
177
|
+
incomplete: filterRulesByLevel(this.rules, wcagLevel).map((rule) => ({
|
|
178
|
+
id: rule.id, description: rule.description, reason: 'Not measured: see notMeasuredReason', nodes: [],
|
|
179
|
+
})),
|
|
180
|
+
score: -1,
|
|
181
|
+
wcagLevel,
|
|
182
|
+
measured: false,
|
|
183
|
+
notMeasuredReason: reason,
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
/** Simulation mode: synthetic results, labelled unmeasured and never stored. */
|
|
187
|
+
async auditSimulated(url, wcagLevel, options) {
|
|
158
188
|
try {
|
|
159
189
|
const includeWarnings = options?.includeWarnings ?? this.config.includeWarnings;
|
|
160
190
|
const applicableRules = includeWarnings
|
|
@@ -164,7 +194,7 @@ export class AccessibilityTesterService {
|
|
|
164
194
|
const passes = [];
|
|
165
195
|
const incomplete = [];
|
|
166
196
|
for (const rule of applicableRules) {
|
|
167
|
-
const result =
|
|
197
|
+
const result = runSimulatedRule(rule, { url });
|
|
168
198
|
if (result.nodes.length > 0) {
|
|
169
199
|
violations.push({
|
|
170
200
|
id: rule.id,
|
|
@@ -192,19 +222,18 @@ export class AccessibilityTesterService {
|
|
|
192
222
|
});
|
|
193
223
|
}
|
|
194
224
|
}
|
|
195
|
-
const totalChecks = applicableRules.length;
|
|
196
|
-
const failedChecks = violations.length;
|
|
197
|
-
const score = Math.round(((totalChecks - failedChecks) / totalChecks) * 100);
|
|
198
225
|
const report = {
|
|
199
226
|
url,
|
|
200
227
|
timestamp: new Date(),
|
|
201
228
|
violations,
|
|
202
229
|
passes,
|
|
203
230
|
incomplete,
|
|
204
|
-
score,
|
|
231
|
+
// The synthetic score is not a measurement: -1, like every unmeasured score
|
|
232
|
+
score: -1,
|
|
205
233
|
wcagLevel,
|
|
234
|
+
measured: false,
|
|
235
|
+
notMeasuredReason: 'simulation mode: synthetic results, the page was not loaded',
|
|
206
236
|
};
|
|
207
|
-
await this.storeReport(report);
|
|
208
237
|
return ok(report);
|
|
209
238
|
}
|
|
210
239
|
catch (error) {
|
|
@@ -216,25 +245,19 @@ export class AccessibilityTesterService {
|
|
|
216
245
|
// ============================================================================
|
|
217
246
|
async checkContrast(url) {
|
|
218
247
|
try {
|
|
219
|
-
|
|
248
|
+
// v2 (#1145): never serve a guessed result cached by an earlier version.
|
|
249
|
+
const cacheKey = `visual-accessibility:contrast:v2:${hashUrl(url)}`;
|
|
220
250
|
const cached = await this.memory.get(cacheKey);
|
|
221
251
|
if (cached)
|
|
222
252
|
return ok(cached);
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
const browserResult = await checkContrastWithVibium(this.vibiumClient, url, this.config.defaultWCAGLevel, this.config.browserConfig);
|
|
226
|
-
if (browserResult.success) {
|
|
227
|
-
analyses = browserResult.value;
|
|
228
|
-
}
|
|
229
|
-
else {
|
|
230
|
-
const errorMsg = getErrorMessage(browserResult);
|
|
231
|
-
logger.warn(`Browser mode contrast check failed, falling back to heuristic mode: ${errorMsg}`);
|
|
232
|
-
analyses = analyzeContrastForElements(url);
|
|
233
|
-
}
|
|
253
|
+
if (!this.shouldUseBrowserMode() || !this.vibiumClient) {
|
|
254
|
+
return err(notMeasuredError('Color contrast', url, this.notMeasuredReason([])));
|
|
234
255
|
}
|
|
235
|
-
|
|
236
|
-
|
|
256
|
+
const browserResult = await checkContrastWithVibium(this.vibiumClient, url, this.config.defaultWCAGLevel, this.config.browserConfig);
|
|
257
|
+
if (!browserResult.success) {
|
|
258
|
+
return err(notMeasuredError('Color contrast', url, this.notMeasuredReason([getErrorMessage(browserResult)])));
|
|
237
259
|
}
|
|
260
|
+
const analyses = browserResult.value;
|
|
238
261
|
await this.memory.set(cacheKey, analyses, { namespace: 'visual-accessibility', ttl: 3600 });
|
|
239
262
|
return ok(analyses);
|
|
240
263
|
}
|
|
@@ -247,25 +270,23 @@ export class AccessibilityTesterService {
|
|
|
247
270
|
// ============================================================================
|
|
248
271
|
async validateWCAGLevel(url, level) {
|
|
249
272
|
try {
|
|
250
|
-
const
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
const urlHash = hashUrl(url);
|
|
256
|
-
const hashNum = parseInt(urlHash, 36);
|
|
257
|
-
for (const criterion of applicableCriteria) {
|
|
258
|
-
const ruleResult = validateCriterion(criterion, hashNum);
|
|
259
|
-
if (ruleResult.passed) {
|
|
260
|
-
passedCriteria.push(criterion);
|
|
261
|
-
}
|
|
262
|
-
else {
|
|
263
|
-
failedCriteria.push(criterion);
|
|
264
|
-
}
|
|
273
|
+
const audit = await this.audit(url, { wcagLevel: level, includeWarnings: true });
|
|
274
|
+
if (!audit.success)
|
|
275
|
+
return err(audit.error);
|
|
276
|
+
if (audit.value.measured !== true) {
|
|
277
|
+
return err(notMeasuredError(`WCAG ${level} validation`, url, audit.value.notMeasuredReason ?? 'not audited'));
|
|
265
278
|
}
|
|
266
|
-
const
|
|
279
|
+
const levelOrder = { A: 1, AA: 2, AAA: 3 };
|
|
280
|
+
const applicableCriteria = Object.values(WCAG_CRITERIA).filter((c) => levelOrder[c.level] <= levelOrder[level]);
|
|
281
|
+
const violated = new Set(audit.value.violations.flatMap((v) => v.wcagCriteria.map((c) => c.id)));
|
|
282
|
+
const failedCriteria = applicableCriteria.filter((c) => violated.has(c.id));
|
|
283
|
+
const passedCriteria = applicableCriteria.filter((c) => !violated.has(c.id));
|
|
267
284
|
const score = Math.round((passedCriteria.length / applicableCriteria.length) * 100);
|
|
268
|
-
return ok({
|
|
285
|
+
return ok({
|
|
286
|
+
level, passed: failedCriteria.length === 0, failedCriteria, passedCriteria, score, measured: true,
|
|
287
|
+
limitations: ['A passed criterion means no automated axe-core check failed for it; ' +
|
|
288
|
+
'keyboard operation, focus order and similar criteria still need manual review.'],
|
|
289
|
+
});
|
|
269
290
|
}
|
|
270
291
|
catch (error) {
|
|
271
292
|
return err(toError(error));
|
|
@@ -276,25 +297,20 @@ export class AccessibilityTesterService {
|
|
|
276
297
|
// ============================================================================
|
|
277
298
|
async checkKeyboardNavigation(url) {
|
|
278
299
|
try {
|
|
279
|
-
const cacheKey = `visual-accessibility:keyboard:${hashUrl(url)}`;
|
|
300
|
+
const cacheKey = `visual-accessibility:keyboard:v2:${hashUrl(url)}`;
|
|
280
301
|
const cached = await this.memory.get(cacheKey);
|
|
281
302
|
if (cached)
|
|
282
303
|
return ok(cached);
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
report = browserResult.value;
|
|
288
|
-
}
|
|
289
|
-
else {
|
|
290
|
-
const errorMsg = getErrorMessage(browserResult);
|
|
291
|
-
logger.warn(`Browser mode keyboard check failed, falling back to heuristic mode: ${errorMsg}`);
|
|
292
|
-
report = generateKeyboardReportWithHeuristics(url);
|
|
293
|
-
}
|
|
304
|
+
if (!this.shouldUseBrowserMode() || !this.config.enableKeyboardCheck || !this.vibiumClient) {
|
|
305
|
+
const reason = this.config.enableKeyboardCheck
|
|
306
|
+
? this.notMeasuredReason([]) : 'the keyboard check is disabled';
|
|
307
|
+
return err(notMeasuredError('Keyboard navigation', url, reason));
|
|
294
308
|
}
|
|
295
|
-
|
|
296
|
-
|
|
309
|
+
const browserResult = await checkKeyboardWithVibium(this.vibiumClient, url, this.config.defaultWCAGLevel, this.config.browserConfig);
|
|
310
|
+
if (!browserResult.success) {
|
|
311
|
+
return err(notMeasuredError('Keyboard navigation', url, this.notMeasuredReason([getErrorMessage(browserResult)])));
|
|
297
312
|
}
|
|
313
|
+
const report = browserResult.value;
|
|
298
314
|
await this.memory.set(cacheKey, report, { namespace: 'visual-accessibility', ttl: 3600 });
|
|
299
315
|
return ok(report);
|
|
300
316
|
}
|
|
@@ -322,6 +338,9 @@ export class AccessibilityTesterService {
|
|
|
322
338
|
if (!wcagResult.success) {
|
|
323
339
|
return err(new Error(`WCAG audit failed: ${wcagResult.error.message}`));
|
|
324
340
|
}
|
|
341
|
+
if (wcagResult.value.measured !== true) {
|
|
342
|
+
return err(notMeasuredError('EU compliance', url, wcagResult.value.notMeasuredReason ?? 'not audited'));
|
|
343
|
+
}
|
|
325
344
|
const euResult = await this.euComplianceService.validateCompliance(wcagResult.value, options);
|
|
326
345
|
return euResult;
|
|
327
346
|
}
|
|
@@ -348,4 +367,8 @@ export class AccessibilityTesterService {
|
|
|
348
367
|
}
|
|
349
368
|
}
|
|
350
369
|
}
|
|
370
|
+
/** #1145: an unmeasured check is an error with its reason, never an empty pass. */
|
|
371
|
+
function notMeasuredError(check, url, reason) {
|
|
372
|
+
return new Error(`${check} NOT MEASURED for ${url}: ${reason}. No findings or verdict were produced.`);
|
|
373
|
+
}
|
|
351
374
|
//# sourceMappingURL=accessibility-tester.js.map
|
|
@@ -394,6 +394,7 @@ console.log(\`\\x1b[1m\\x1b[35m▊ Agentic QE v3\\x1b[0m\${branchStr}\${patStr}\
|
|
|
394
394
|
* node brain-checkpoint.cjs verify # Verify aqe.rvf exists (session-start)
|
|
395
395
|
*/
|
|
396
396
|
const { execFileSync } = require('child_process');
|
|
397
|
+
const crypto = require('crypto');
|
|
397
398
|
const fs = require('fs');
|
|
398
399
|
const path = require('path');
|
|
399
400
|
|
|
@@ -402,6 +403,11 @@ const AQE_DIR = path.join(PROJECT_ROOT, '.agentic-qe');
|
|
|
402
403
|
const RVF_PATH = path.join(AQE_DIR, 'aqe.rvf');
|
|
403
404
|
const DB_PATH = path.join(AQE_DIR, 'memory.db');
|
|
404
405
|
const MAX_AGE_HOURS = 24;
|
|
406
|
+
// #1238: after a too-large export, skip the Stop-hook export for a while
|
|
407
|
+
// unless a newer aqe.rvf shows that an export has succeeded since.
|
|
408
|
+
const SKIP_PATH = path.join(AQE_DIR, 'brain-checkpoint.skip.json');
|
|
409
|
+
const RETRY_ENV = Number.parseFloat(process.env.AQE_BRAIN_CHECKPOINT_RETRY_HOURS || '');
|
|
410
|
+
const TOO_LARGE_RETRY_HOURS = Number.isFinite(RETRY_ENV) && RETRY_ENV >= 0 ? RETRY_ENV : 6;
|
|
405
411
|
// Windows (#872): never execFile aqe.cmd (EINVAL without a shell); reuse the
|
|
406
412
|
// hook shim's resolver, which runs the AQE bundle via node instead.
|
|
407
413
|
function aqeInvocation() {
|
|
@@ -422,32 +428,110 @@ function aqeInvocation() {
|
|
|
422
428
|
|
|
423
429
|
function log(msg) { process.stderr.write('[brain-checkpoint] ' + msg + '\\n'); }
|
|
424
430
|
|
|
431
|
+
function activeSkip() {
|
|
432
|
+
let st; try { st = fs.lstatSync(SKIP_PATH); } catch { return null; }
|
|
433
|
+
let skip = null;
|
|
434
|
+
if (st.isFile()) { try { skip = JSON.parse(fs.readFileSync(SKIP_PATH, 'utf8')); } catch { /* unreadable */ } }
|
|
435
|
+
const at = skip ? Date.parse(skip.at) : NaN;
|
|
436
|
+
let rvfMtime = 0; try { rvfMtime = fs.lstatSync(RVF_PATH).mtimeMs; } catch { /* absent */ }
|
|
437
|
+
if (!Number.isFinite(at) || Date.now() >= at + TOO_LARGE_RETRY_HOURS * 3600000 || rvfMtime > at) {
|
|
438
|
+
try { fs.unlinkSync(SKIP_PATH); } catch { /* best-effort */ }
|
|
439
|
+
return null;
|
|
440
|
+
}
|
|
441
|
+
return skip;
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
function writeSkip(reason) {
|
|
445
|
+
const at = new Date();
|
|
446
|
+
const skip = { reason, at: at.toISOString(), retryAfter: new Date(at.getTime() + TOO_LARGE_RETRY_HOURS * 3600000).toISOString() };
|
|
447
|
+
// 'wx' after unlink: never write through a planted symlink (#970).
|
|
448
|
+
try { try { fs.unlinkSync(SKIP_PATH); } catch { /* absent */ } fs.writeFileSync(SKIP_PATH, JSON.stringify(skip) + '\\n', { flag: 'wx' }); } catch { /* best-effort */ }
|
|
449
|
+
return skip;
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
// Export to a temp store next to aqe.rvf; rename it over aqe.rvf only on
|
|
453
|
+
// success, so a failed, too-large or killed export keeps the last checkpoint.
|
|
454
|
+
const RVF_SIDECARS = ['.idmap.json', '.manifest.json'];
|
|
455
|
+
const TMP_PREFIX = path.basename(RVF_PATH) + '.tmp-';
|
|
456
|
+
function removeEntry(p) { try { fs.unlinkSync(p); } catch (e) { if (!e || e.code !== 'ENOENT') throw e; } }
|
|
457
|
+
function isPidAlive(pid) { try { process.kill(pid, 0); return true; } catch (e) { return !!e && e.code === 'EPERM'; } }
|
|
458
|
+
function removeByPrefix(prefix, keep) {
|
|
459
|
+
let entries = []; try { entries = fs.readdirSync(AQE_DIR); } catch { return; }
|
|
460
|
+
for (const entry of entries) {
|
|
461
|
+
if (!entry.startsWith(prefix) || (keep && keep(entry))) continue;
|
|
462
|
+
try { removeEntry(path.join(AQE_DIR, entry)); } catch { /* best-effort */ }
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
function sweepStaleTmp() {
|
|
466
|
+
removeByPrefix(TMP_PREFIX, (entry) => {
|
|
467
|
+
const pid = Number.parseInt(entry.slice(TMP_PREFIX.length).split('-')[0], 10);
|
|
468
|
+
return !Number.isInteger(pid) || pid <= 0 || isPidAlive(pid);
|
|
469
|
+
});
|
|
470
|
+
}
|
|
471
|
+
function lexists(p) { try { fs.lstatSync(p); return true; } catch { return false; } }
|
|
472
|
+
// rename() replaces a planted symlink without writing through it (#970). The
|
|
473
|
+
// store goes first: if that fails nothing changed. If a sidecar rename fails
|
|
474
|
+
// afterwards, the stale sidecar is removed, so the new store is never read
|
|
475
|
+
// with the previous export's idmap.
|
|
476
|
+
function promote(tmp) {
|
|
477
|
+
fs.renameSync(tmp, RVF_PATH);
|
|
478
|
+
for (const suffix of RVF_SIDECARS) {
|
|
479
|
+
try {
|
|
480
|
+
if (lexists(tmp + suffix)) fs.renameSync(tmp + suffix, RVF_PATH + suffix);
|
|
481
|
+
else removeEntry(RVF_PATH + suffix);
|
|
482
|
+
} catch { try { removeEntry(RVF_PATH + suffix); } catch { /* best-effort */ } }
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
|
|
425
486
|
function exportBrain() {
|
|
426
487
|
if (!fs.existsSync(DB_PATH)) { log('No memory.db, skipping'); return { exported: false }; }
|
|
427
488
|
const aqe = aqeInvocation();
|
|
428
489
|
if (!aqe.cmd) { log('Export skipped: ' + aqe.reason); return { exported: false, reason: aqe.reason }; }
|
|
429
|
-
// Never write through a committed symlink: .agentic-qe must be a real dir
|
|
430
|
-
// unlink (not existsSync) drops a planted aqe.rvf link, even a dangling one.
|
|
490
|
+
// Never write through a committed symlink: .agentic-qe must be a real dir.
|
|
431
491
|
let st; try { st = fs.lstatSync(AQE_DIR); } catch { /* missing */ }
|
|
432
492
|
if (!st || !st.isDirectory()) { log('Export skipped: .agentic-qe is a symlink'); return { exported: false }; }
|
|
433
|
-
|
|
493
|
+
const skip = activeSkip();
|
|
494
|
+
if (skip) {
|
|
495
|
+
log('Export skipped until ' + skip.retryAfter + ': ' + skip.reason);
|
|
496
|
+
return { exported: false, skipped: true, reason: skip.reason, retryAfter: skip.retryAfter };
|
|
497
|
+
}
|
|
498
|
+
sweepStaleTmp();
|
|
499
|
+
const tmp = path.join(AQE_DIR, TMP_PREFIX + process.pid + '-' + crypto.randomBytes(4).toString('hex'));
|
|
434
500
|
try {
|
|
501
|
+
for (const suffix of ['', ...RVF_SIDECARS]) removeEntry(tmp + suffix);
|
|
435
502
|
const result = execFileSync(
|
|
436
|
-
aqe.cmd, [...aqe.args, 'brain', 'export', '-o',
|
|
437
|
-
{ timeout: 60000, encoding: 'utf-8', windowsHide: true }
|
|
503
|
+
aqe.cmd, [...aqe.args, 'brain', 'export', '-o', tmp, '--format', 'rvf'],
|
|
504
|
+
{ timeout: 60000, encoding: 'utf-8', windowsHide: true, stdio: ['ignore', 'pipe', 'pipe'] }
|
|
438
505
|
);
|
|
506
|
+
// A zero exit without a store is a failure, not an empty checkpoint.
|
|
507
|
+
if (!lexists(tmp)) throw new Error('brain export exited 0 but wrote no store');
|
|
508
|
+
promote(tmp);
|
|
439
509
|
const m = result.match(/Patterns:\\s+(\\d+)/);
|
|
440
510
|
const p = m ? m[1] : '0';
|
|
441
511
|
log('Exported ' + p + ' patterns to aqe.rvf');
|
|
442
512
|
return { exported: true, patterns: parseInt(p) };
|
|
443
513
|
} catch (e) {
|
|
444
|
-
|
|
514
|
+
const tooLarge = (String(e.stderr || '') + String(e.stdout || '')).match(/RVF_KERNEL_TOO_LARGE:[^\\n]*/);
|
|
515
|
+
if (tooLarge) {
|
|
516
|
+
const skip = writeSkip(tooLarge[0].trim());
|
|
517
|
+
log('Export failed: ' + skip.reason);
|
|
518
|
+
log('Skipping the checkpoint export until ' + skip.retryAfter + ' (AQE_BRAIN_CHECKPOINT_RETRY_HOURS sets the wait).');
|
|
519
|
+
return { exported: false, tooLarge: true, reason: skip.reason, retryAfter: skip.retryAfter };
|
|
520
|
+
}
|
|
521
|
+
log('Export failed: ' + e.message + ' (previous aqe.rvf kept)');
|
|
445
522
|
return { exported: false, reason: e.message };
|
|
523
|
+
} finally {
|
|
524
|
+
removeByPrefix(path.basename(tmp));
|
|
446
525
|
}
|
|
447
526
|
}
|
|
448
527
|
|
|
449
528
|
function verifyBrain() {
|
|
450
529
|
if (!fs.existsSync(RVF_PATH)) {
|
|
530
|
+
const skip = activeSkip();
|
|
531
|
+
if (skip) {
|
|
532
|
+
log('No aqe.rvf found; checkpoint export paused until ' + skip.retryAfter + ': ' + skip.reason);
|
|
533
|
+
return { valid: false, reason: 'missing', skippedUntil: skip.retryAfter };
|
|
534
|
+
}
|
|
451
535
|
log('No aqe.rvf found');
|
|
452
536
|
return { valid: false, reason: 'missing' };
|
|
453
537
|
}
|
|
@@ -10,6 +10,10 @@
|
|
|
10
10
|
* @module integrations/embeddings/index/HNSWIndex
|
|
11
11
|
*/
|
|
12
12
|
import { createRequire } from 'node:module';
|
|
13
|
+
// Static import so the bundlers inline the adapter. A runtime
|
|
14
|
+
// require('../../../kernel/hnsw-adapter.js') resolves against the bundle
|
|
15
|
+
// file instead and fails, which silently capped the index at 10,000 (#1237).
|
|
16
|
+
import { HnswAdapter } from '../../../kernel/hnsw-adapter.js';
|
|
13
17
|
const require = createRequire(import.meta.url);
|
|
14
18
|
let cachedHnswlibCtor = null;
|
|
15
19
|
function loadHnswlibConstructor() {
|
|
@@ -70,8 +74,6 @@ export class HNSWEmbeddingIndex {
|
|
|
70
74
|
// ADR-071: Route through unified HnswAdapter when flag is enabled
|
|
71
75
|
if (this.useUnified && this.unifiedAdapters) {
|
|
72
76
|
try {
|
|
73
|
-
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
74
|
-
const { HnswAdapter } = require('../../../kernel/hnsw-adapter.js');
|
|
75
77
|
const adapter = new HnswAdapter(`embedding-${namespace}`, {
|
|
76
78
|
dimensions: this.config.dimension,
|
|
77
79
|
M: this.config.M,
|
|
@@ -84,8 +86,10 @@ export class HNSWEmbeddingIndex {
|
|
|
84
86
|
this.nextId.set(namespace, 0);
|
|
85
87
|
return;
|
|
86
88
|
}
|
|
87
|
-
catch {
|
|
88
|
-
// Fall through to hnswlib-node
|
|
89
|
+
catch (error) {
|
|
90
|
+
// Fall through to hnswlib-node, which holds at most 10,000 entries.
|
|
91
|
+
console.warn(`[HNSWEmbeddingIndex] Unified HNSW adapter unavailable for '${namespace}', ` +
|
|
92
|
+
`using the legacy index (max 10000 entries): ${error instanceof Error ? error.message : String(error)}`);
|
|
89
93
|
}
|
|
90
94
|
}
|
|
91
95
|
// Legacy path: hnswlib-node
|
|
@@ -19,6 +19,8 @@ export interface RvfBrainManifest {
|
|
|
19
19
|
readonly totalRecords?: number;
|
|
20
20
|
/** Per-table row counts used by the recovery-mirror richness guard. */
|
|
21
21
|
readonly tableCounts?: Readonly<Record<string, number>>;
|
|
22
|
+
/** Regenerable cache rows left out of the kernel, per table (#1238). */
|
|
23
|
+
readonly skippedCacheRows?: Readonly<Record<string, number>>;
|
|
22
24
|
};
|
|
23
25
|
readonly domains: readonly string[];
|
|
24
26
|
readonly checksum: string;
|
|
@@ -48,6 +50,8 @@ export interface RvfBrainExportOptions {
|
|
|
48
50
|
readonly signerKeyId?: string;
|
|
49
51
|
/** Explicit operator acknowledgement that a richer existing mirror may be replaced. */
|
|
50
52
|
readonly allowOverwriteRicher?: boolean;
|
|
53
|
+
/** Kernel size ceiling in bytes. Defaults to RVF_MAX_KERNEL_BYTES; lowered only by tests. */
|
|
54
|
+
readonly maxKernelBytes?: number;
|
|
51
55
|
}
|
|
52
56
|
export interface RvfBrainImportOptions {
|
|
53
57
|
readonly mergeStrategy: MergeStrategy;
|
|
@@ -59,6 +63,27 @@ export interface RvfBrainImportResult {
|
|
|
59
63
|
readonly conflicts: number;
|
|
60
64
|
readonly embeddingsRestored: number;
|
|
61
65
|
}
|
|
66
|
+
/**
|
|
67
|
+
* Largest kernel image @ruvector/rvf-node accepts. One byte more and
|
|
68
|
+
* `embedKernel` fails with a misleading `RVF error 0x0303: FsyncFailed`
|
|
69
|
+
* (#1238; measured 134,217,728 B ok, 134,217,729 B fails).
|
|
70
|
+
*/
|
|
71
|
+
export declare const RVF_MAX_KERNEL_BYTES: number;
|
|
72
|
+
/**
|
|
73
|
+
* Vector ids written by the code-intelligence domain (KG nodes, semantic code
|
|
74
|
+
* index, C4 diagrams). They are derived from source code and rebuilt by
|
|
75
|
+
* `aqe code index`, so they stay out of the brain kernel (#1238).
|
|
76
|
+
*/
|
|
77
|
+
export declare const CODE_INDEX_VECTOR_ID_PREFIX = "code-intelligence:";
|
|
78
|
+
/** Thrown before any native call when the kernel would exceed the RVF limit. */
|
|
79
|
+
export declare class RvfKernelTooLargeError extends Error {
|
|
80
|
+
readonly kernelBytes: number;
|
|
81
|
+
readonly limitBytes: number;
|
|
82
|
+
readonly tableBytes: Readonly<Record<string, number>>;
|
|
83
|
+
readonly complete: boolean;
|
|
84
|
+
readonly code = "RVF_KERNEL_TOO_LARGE";
|
|
85
|
+
constructor(kernelBytes: number, limitBytes: number, tableBytes: Readonly<Record<string, number>>, complete: boolean);
|
|
86
|
+
}
|
|
62
87
|
/** Export brain state to a single `.rvf` file with vector embeddings + kernel. */
|
|
63
88
|
export declare function exportBrainToRvf(db: Database.Database, options: RvfBrainExportOptions, sourceDbLabel?: string): RvfBrainManifest;
|
|
64
89
|
/** Import brain state from a `.rvf` file into a SQLite database. */
|