agentic-qe 3.15.11 → 3.15.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/hooks/aqe-hook.cjs +38 -2
- package/.claude/skills/skills-manifest.json +1 -1
- package/CHANGELOG.md +267 -0
- package/assets/skills/skills-manifest.json +1 -1
- package/dist/cli/bundle.js +6 -6
- package/dist/cli/chunks/adapter-KCQDVYY2.js +2 -0
- package/dist/cli/chunks/{agent-booster-wasm-TIDSQ3ZK.js → agent-booster-wasm-6RRQWMNE.js} +2 -2
- package/dist/cli/chunks/{agent-handler-G3EPBVA7.js → agent-handler-AOH6TV7W.js} +2 -2
- package/dist/cli/chunks/{agent-memory-branch-ARC5C7GW.js → agent-memory-branch-2P54SF5N.js} +2 -2
- package/dist/cli/chunks/aqe-learning-engine-SAQOHSGN.js +2 -0
- package/dist/cli/chunks/{arena-K4I4QDXB.js → arena-NSVFCAF5.js} +2 -2
- package/dist/cli/chunks/{arena-36DTATJV.js → arena-X6MOGQHA.js} +4 -4
- package/dist/cli/chunks/{audit-WQSJSJZF.js → audit-27DJLQNM.js} +3 -3
- package/dist/cli/chunks/base-WCACU3FN.js +2 -0
- package/dist/cli/chunks/{better-sqlite3-BB4K67MT.js → better-sqlite3-BU5GXILS.js} +2 -2
- package/dist/cli/chunks/{brain-handler-CU3GOIU3.js → brain-handler-GTQNHHZS.js} +3 -3
- package/dist/cli/chunks/{branch-enumerator-NJQX7ZNB.js → branch-enumerator-5CLULOCU.js} +2 -2
- package/dist/cli/chunks/{browser-6YJF4FQW.js → browser-R4DMU3LN.js} +2 -2
- package/dist/cli/chunks/browser-workflow-G6IASEAP.js +2 -0
- package/dist/cli/chunks/{chunk-G4FAPO57.js → chunk-2G7TVT6W.js} +2 -2
- package/dist/cli/chunks/{chunk-HDNWSKHA.js → chunk-32ZMWEP3.js} +2 -2
- package/dist/cli/chunks/{chunk-FWSGPE3V.js → chunk-3AN5TNGD.js} +3 -3
- package/dist/cli/chunks/{chunk-X4J73KP3.js → chunk-3LJ7LQMV.js} +1 -1
- package/dist/cli/chunks/{chunk-3RHOPP7A.js → chunk-3QZEGE67.js} +1 -1
- package/dist/cli/chunks/{chunk-RBZCA7SD.js → chunk-3RZV5DGO.js} +2 -2
- package/dist/cli/chunks/{chunk-DDEOZPWJ.js → chunk-3Y2ROSCL.js} +2 -2
- package/dist/cli/chunks/{chunk-LD5CFK53.js → chunk-3Y7TJFHU.js} +2 -2
- package/dist/cli/chunks/{chunk-I36CRDHF.js → chunk-3YNLWPBF.js} +2 -2
- package/dist/cli/chunks/{chunk-ZMC543GI.js → chunk-42J34YG4.js} +2 -2
- package/dist/cli/chunks/{chunk-YNOCQ2SL.js → chunk-4OVC4RIL.js} +1 -1
- package/dist/cli/chunks/{chunk-2KFFEKSI.js → chunk-526QYFJU.js} +2 -2
- package/dist/cli/chunks/{chunk-LBX7M4LW.js → chunk-5FKWCZNF.js} +2 -2
- package/dist/cli/chunks/{chunk-OH5V5EJW.js → chunk-5K26BEYB.js} +2 -2
- package/dist/cli/chunks/{chunk-TCYSBC7Y.js → chunk-5MDERQH3.js} +1 -1
- package/dist/cli/chunks/{chunk-V5AADCBC.js → chunk-5VMAV6T6.js} +1 -1
- package/dist/cli/chunks/{chunk-YBBT3YYG.js → chunk-5ZGM3RMH.js} +1 -1
- package/dist/cli/chunks/{chunk-RTY7VSZB.js → chunk-6KATY3KS.js} +2 -2
- package/dist/cli/chunks/{chunk-LPU6PAJE.js → chunk-6Z7PRBSG.js} +2 -2
- package/dist/cli/chunks/{chunk-6NA3KZZT.js → chunk-72ASBE35.js} +7 -7
- package/dist/cli/chunks/{chunk-GBFUANTC.js → chunk-756CGMEH.js} +1 -1
- package/dist/cli/chunks/{chunk-UTTSH4NH.js → chunk-75RDHBAX.js} +3 -3
- package/dist/cli/chunks/{chunk-XGPTZUKQ.js → chunk-7CMTY45A.js} +2 -2
- package/dist/cli/chunks/{chunk-NC6K7SCQ.js → chunk-7JUC2MVZ.js} +2 -2
- package/dist/cli/chunks/{chunk-RTFKTKSO.js → chunk-7NA7JXNB.js} +2 -2
- package/dist/cli/chunks/{chunk-GWJWSLDA.js → chunk-7PLIEBY7.js} +2 -2
- package/dist/cli/chunks/{chunk-OURITHFV.js → chunk-7YTGHGK4.js} +2 -2
- package/dist/cli/chunks/{chunk-ITL3IN2E.js → chunk-A64JFBWI.js} +2 -2
- package/dist/cli/chunks/{chunk-OHR7C777.js → chunk-AL6FBH3E.js} +2 -2
- package/dist/cli/chunks/{chunk-5N25I53C.js → chunk-AQSVJNEH.js} +2 -2
- package/dist/cli/chunks/{chunk-FL32MTKT.js → chunk-ARJW4I2O.js} +2 -2
- package/dist/cli/chunks/{chunk-ZQHDA4O7.js → chunk-ASQYASNV.js} +1 -1
- package/dist/cli/chunks/{chunk-4HJKQIX5.js → chunk-BEGR4D6N.js} +2 -2
- package/dist/cli/chunks/{chunk-G77MLBDF.js → chunk-BK577VL7.js} +2 -2
- package/dist/cli/chunks/{chunk-NPZOBSAN.js → chunk-BLSLEVDI.js} +2 -2
- package/dist/cli/chunks/{chunk-R5LGV6GZ.js → chunk-BTVEYBW2.js} +2 -2
- package/dist/cli/chunks/{chunk-2CW7VRPH.js → chunk-C6JTLKG7.js} +5 -5
- package/dist/cli/chunks/{chunk-EWPUQCN4.js → chunk-C7JM7CD3.js} +2 -2
- package/dist/cli/chunks/{chunk-325QCVDI.js → chunk-CCMKSHAT.js} +2 -2
- package/dist/cli/chunks/{chunk-V7DA4HAK.js → chunk-CE7B5LU7.js} +1 -1
- package/dist/cli/chunks/{chunk-4RAQ7PJA.js → chunk-CM4LSLKR.js} +2 -2
- package/dist/cli/chunks/chunk-CRWPZT74.js +62 -0
- package/dist/cli/chunks/{chunk-U3LJNNVJ.js → chunk-CT6SAVXQ.js} +2 -2
- package/dist/cli/chunks/chunk-CV77DMDQ.js +2 -0
- package/dist/cli/chunks/{chunk-UMVSWQNB.js → chunk-DFUASIKA.js} +2 -2
- package/dist/cli/chunks/{chunk-KSE5TDM5.js → chunk-DLD7RUZ4.js} +2 -2
- package/dist/cli/chunks/{chunk-4MUBW4RT.js → chunk-DNDL7SOS.js} +2 -2
- package/dist/cli/chunks/{chunk-EJPK7OTR.js → chunk-DVGRPK7A.js} +2 -2
- package/dist/cli/chunks/{chunk-WCVCOT4E.js → chunk-E56B6IDX.js} +2 -2
- package/dist/cli/chunks/{chunk-7HEMJHPP.js → chunk-E7CLYGS7.js} +1 -1
- package/dist/cli/chunks/{chunk-R5GRABPQ.js → chunk-EXGMJFAT.js} +1 -1
- package/dist/cli/chunks/chunk-F3YS57NF.js +21 -0
- package/dist/cli/chunks/{chunk-I4K2HTQU.js → chunk-FZ76G4QJ.js} +1 -1
- package/dist/cli/chunks/{chunk-4UX35V7P.js → chunk-G2Q66Z23.js} +2 -2
- package/dist/cli/chunks/{chunk-KJCIMNHS.js → chunk-G6WDYBLQ.js} +1 -1
- package/dist/cli/chunks/{chunk-VWUZSNVC.js → chunk-G77ERMUD.js} +1 -1
- package/dist/cli/chunks/{chunk-FZHSG75I.js → chunk-GB6HBNH2.js} +2 -2
- package/dist/cli/chunks/{chunk-KDI5JOYZ.js → chunk-GHM6MQNK.js} +2 -2
- package/dist/cli/chunks/{chunk-H7BLYMNU.js → chunk-GHY6Z6KO.js} +5 -5
- package/dist/cli/chunks/{chunk-TFW7CCKS.js → chunk-GII6UM3F.js} +1 -1
- package/dist/cli/chunks/{chunk-DOBZPSKE.js → chunk-GU5HNCWI.js} +1 -1
- package/dist/cli/chunks/{chunk-AFFN6E6Q.js → chunk-H4GG2NLO.js} +2 -2
- package/dist/cli/chunks/{chunk-7R5HC56U.js → chunk-H4H2YSFH.js} +1 -1
- package/dist/cli/chunks/{chunk-J4JMCZVA.js → chunk-HD7YIFOI.js} +2 -2
- package/dist/cli/chunks/{chunk-5MTWCCZJ.js → chunk-HOAJUIBQ.js} +2 -2
- package/dist/cli/chunks/{chunk-T5KHJ3J7.js → chunk-HQZGPJYG.js} +2 -2
- package/dist/cli/chunks/{chunk-VEEYL2CZ.js → chunk-HZ5NXFXH.js} +2 -2
- package/dist/cli/chunks/{chunk-LQ4NUC6Q.js → chunk-I3C7JOXC.js} +2 -2
- package/dist/cli/chunks/{chunk-Z2EA7A4Z.js → chunk-IC3TQEOA.js} +1 -1
- package/dist/cli/chunks/{chunk-E44NNCEU.js → chunk-IJUHSJ2U.js} +2 -2
- package/dist/cli/chunks/{chunk-EH2S6AOR.js → chunk-J2ZIFFM6.js} +2 -2
- package/dist/cli/chunks/{chunk-GVKVJJQX.js → chunk-JGZ722G3.js} +2 -2
- package/dist/cli/chunks/{chunk-EK5GMOSO.js → chunk-JQGMW45H.js} +1 -1
- package/dist/cli/chunks/{chunk-XGBU3KEM.js → chunk-JRRXCODW.js} +2 -2
- package/dist/cli/chunks/{chunk-5WYZHDIZ.js → chunk-K3TLLJMX.js} +1 -1
- package/dist/cli/chunks/{chunk-LXQ3B4RY.js → chunk-K4CZA77U.js} +2 -2
- package/dist/cli/chunks/chunk-K65CGKLD.js +8 -0
- package/dist/cli/chunks/{chunk-HFFPYC4G.js → chunk-KADFXPPN.js} +2 -2
- package/dist/cli/chunks/{chunk-APPZATXA.js → chunk-KB56CPU4.js} +2 -2
- package/dist/cli/chunks/{chunk-25P77WA5.js → chunk-KCW47QR5.js} +1 -1
- package/dist/cli/chunks/{chunk-WM3SRRA6.js → chunk-KDNJ4F3P.js} +2 -2
- package/dist/cli/chunks/{chunk-5ERFHEEE.js → chunk-KDVZND5Q.js} +1 -1
- package/dist/cli/chunks/{chunk-YOCULVHR.js → chunk-KUAKV3IW.js} +1 -1
- package/dist/cli/chunks/{chunk-M5XYIQYZ.js → chunk-KV4T4MXK.js} +2 -2
- package/dist/cli/chunks/{chunk-MIK4RBEH.js → chunk-KWYH3FI4.js} +1 -1
- package/dist/cli/chunks/{chunk-UKKYMW3S.js → chunk-LFJALJOA.js} +2 -2
- package/dist/cli/chunks/{chunk-K7V2WZNF.js → chunk-LL7LDPXS.js} +1 -1
- package/dist/cli/chunks/{chunk-55CH76ZO.js → chunk-LUZNKJE6.js} +3 -3
- package/dist/cli/chunks/{chunk-OV5RPLKV.js → chunk-LWR3FV3Y.js} +2 -2
- package/dist/cli/chunks/{chunk-SMVVAVN2.js → chunk-LZYQHVD4.js} +2 -2
- package/dist/cli/chunks/{chunk-672XOJDG.js → chunk-M6AAGIG7.js} +1 -1
- package/dist/cli/chunks/{chunk-WCAVIJ64.js → chunk-MAMQA43L.js} +1 -1
- package/dist/cli/chunks/chunk-MB46UBGY.js +3 -0
- package/dist/cli/chunks/{chunk-AP3ADWDK.js → chunk-MFW5HSG4.js} +2 -2
- package/dist/cli/chunks/{chunk-NKTWKYHB.js → chunk-MGZ5FJUW.js} +2 -2
- package/dist/cli/chunks/{chunk-ERN43HOX.js → chunk-MVVB7C2E.js} +410 -410
- package/dist/cli/chunks/{chunk-57LNKSW7.js → chunk-N4CYAKOX.js} +2 -2
- package/dist/cli/chunks/chunk-NT4DBXSX.js +2 -0
- package/dist/cli/chunks/{chunk-BZPE3LDO.js → chunk-NU3W5WFT.js} +2 -2
- package/dist/cli/chunks/chunk-NURIILUB.js +2 -0
- package/dist/cli/chunks/{chunk-ITPGWGQS.js → chunk-NW7IBHJA.js} +4 -4
- package/dist/cli/chunks/{chunk-OD5D4LSZ.js → chunk-NZ3GUMB2.js} +2 -2
- package/dist/cli/chunks/{chunk-35M2X3C5.js → chunk-NZD4DPSU.js} +2 -2
- package/dist/cli/chunks/{chunk-EIDJNT5C.js → chunk-O6FGXMHD.js} +1 -1
- package/dist/cli/chunks/{chunk-OYJC3YON.js → chunk-OCAEXYFA.js} +2 -2
- package/dist/cli/chunks/{chunk-Y7B5EUIJ.js → chunk-OFACHK5O.js} +2 -2
- package/dist/cli/chunks/{chunk-5MNASJOH.js → chunk-P7A4NKTZ.js} +2 -2
- package/dist/cli/chunks/{chunk-M7XFBSIK.js → chunk-PB6J6HAA.js} +2 -2
- package/dist/cli/chunks/{chunk-5HQP4SLM.js → chunk-PHP5UBT4.js} +2 -2
- package/dist/cli/chunks/{chunk-KXS3Y2AX.js → chunk-PIDQVU3L.js} +2 -2
- package/dist/cli/chunks/{chunk-4UBVAJFO.js → chunk-PSFSPGUD.js} +2 -2
- package/dist/cli/chunks/chunk-PT4FMJPQ.js +3 -0
- package/dist/cli/chunks/{chunk-HDJUYAZG.js → chunk-Q3UDLV5Z.js} +1 -1
- package/dist/cli/chunks/{chunk-CIAL4YRY.js → chunk-QDEJ4CI2.js} +2 -2
- package/dist/cli/chunks/{chunk-S6IYEBAI.js → chunk-QPNG5ZN2.js} +2 -2
- package/dist/cli/chunks/{chunk-YPX2TV3M.js → chunk-R7SYRCRP.js} +1 -1
- package/dist/cli/chunks/{chunk-XNLIWQYE.js → chunk-RF7HWBHN.js} +2 -2
- package/dist/cli/chunks/{chunk-5YLOLACR.js → chunk-RFNW2LGD.js} +2 -2
- package/dist/cli/chunks/{chunk-2VLYUF7U.js → chunk-S5AZCIZS.js} +2 -2
- package/dist/cli/chunks/{chunk-ETVAYGCB.js → chunk-SE4VNN4I.js} +3 -3
- package/dist/cli/chunks/{chunk-E6PF35JZ.js → chunk-SG3NX7QE.js} +2 -2
- package/dist/cli/chunks/{chunk-VYTILW4R.js → chunk-SSU73QAX.js} +2 -2
- package/dist/cli/chunks/{chunk-ZP75ASUU.js → chunk-SVLQRAMF.js} +1 -1
- package/dist/cli/chunks/{chunk-JGJXXAS6.js → chunk-SYV2V3PL.js} +4 -4
- package/dist/cli/chunks/{chunk-4RH5I24Q.js → chunk-T3PGQFDI.js} +2 -2
- package/dist/cli/chunks/{chunk-O4JAKWWM.js → chunk-TCBBNUBP.js} +17 -17
- package/dist/cli/chunks/{chunk-QDESWOZP.js → chunk-TOQWL2ZF.js} +2 -2
- package/dist/cli/chunks/{chunk-NTB342NJ.js → chunk-TSQC2KKZ.js} +4 -4
- package/dist/cli/chunks/{chunk-NQZNMCZU.js → chunk-TWDW32W2.js} +2 -2
- package/dist/cli/chunks/{chunk-CO3DX2AX.js → chunk-TWJTK4CC.js} +2 -2
- package/dist/cli/chunks/{chunk-FUYOOKTH.js → chunk-U2FUXDDJ.js} +3 -3
- package/dist/cli/chunks/{chunk-XDI5X3FR.js → chunk-UDQSYWVF.js} +1 -1
- package/dist/cli/chunks/chunk-UOC3O6RP.js +5 -0
- package/dist/cli/chunks/chunk-UT2VZ33P.js +2 -0
- package/dist/cli/chunks/{chunk-IOZRKXR5.js → chunk-UTRV7T2N.js} +2 -2
- package/dist/cli/chunks/{chunk-ZMHCMJ4J.js → chunk-UXZSUMEA.js} +2 -2
- package/dist/cli/chunks/{chunk-G4CKPWF6.js → chunk-VRHRBAEM.js} +1 -1
- package/dist/cli/chunks/{chunk-AUUJBXWX.js → chunk-VRVMIPTM.js} +2 -2
- package/dist/cli/chunks/{chunk-IENZSO3K.js → chunk-VTDFVFST.js} +2 -2
- package/dist/cli/chunks/{chunk-JFLU7L3W.js → chunk-VTOBUZL6.js} +2 -2
- package/dist/cli/chunks/{chunk-KKYO2NKV.js → chunk-VU5TBX2V.js} +2 -2
- package/dist/cli/chunks/{chunk-XS2XF3YG.js → chunk-W26B7ERY.js} +1 -1
- package/dist/cli/chunks/{chunk-DOFREOPQ.js → chunk-W2QWSQVE.js} +2 -2
- package/dist/cli/chunks/{chunk-KSLLHFVY.js → chunk-W3INMZZ6.js} +1 -1
- package/dist/cli/chunks/{chunk-FLU5FDSC.js → chunk-W3PPFHI5.js} +59 -59
- package/dist/cli/chunks/chunk-WKGTGOYS.js +13 -0
- package/dist/cli/chunks/{chunk-4X4MWMHB.js → chunk-WNQS4WTS.js} +2 -2
- package/dist/cli/chunks/{chunk-XJKZ7FTR.js → chunk-WO274FRI.js} +2 -2
- package/dist/cli/chunks/{chunk-76SNL7GU.js → chunk-WOCGL4QP.js} +2 -2
- package/dist/cli/chunks/{chunk-HYXUN7BW.js → chunk-WQL7WCIZ.js} +1 -1
- package/dist/cli/chunks/{chunk-BTVWA35P.js → chunk-X2Z7F4EU.js} +2 -2
- package/dist/cli/chunks/{chunk-VBK2YAYY.js → chunk-X7N2JF2X.js} +2 -2
- package/dist/cli/chunks/{chunk-NT7JRHMH.js → chunk-XEAEYC6Y.js} +1 -1
- package/dist/cli/chunks/{chunk-G2IJFNZS.js → chunk-XNBOGCF3.js} +2 -2
- package/dist/cli/chunks/{chunk-LCVEEII4.js → chunk-XPRVF4YE.js} +2 -2
- package/dist/cli/chunks/{chunk-AMZKAJLJ.js → chunk-YBQH2VOP.js} +2 -2
- package/dist/cli/chunks/{chunk-JUMICXM6.js → chunk-YQFLQE53.js} +2 -2
- package/dist/cli/chunks/{chunk-M5RQ6U3G.js → chunk-YSZ5OE3Z.js} +2 -2
- package/dist/cli/chunks/{chunk-RQMCZQN2.js → chunk-YXRASAPI.js} +2 -2
- package/dist/cli/chunks/{chunk-X3PZCXWG.js → chunk-YZEXYO4W.js} +1 -1
- package/dist/cli/chunks/{chunk-TL6OFMXF.js → chunk-YZWBNBTW.js} +2 -2
- package/dist/cli/chunks/{chunk-CFWGGRE7.js → chunk-ZAKQLAHT.js} +1 -1
- package/dist/cli/chunks/ci-ENOASTYB.js +81 -0
- package/dist/cli/chunks/{ci-config-J665XNOX.js → ci-config-B26OXHQM.js} +2 -2
- package/dist/cli/chunks/{ci-output-PEQQQWVD.js → ci-output-JTCLLNOQ.js} +2 -2
- package/dist/cli/chunks/{circuit-breaker-HHB2JSKH.js → circuit-breaker-23JMFNM5.js} +2 -2
- package/dist/cli/chunks/{claude-flow-setup-JKUJRWPN.js → claude-flow-setup-ON6L462G.js} +2 -2
- package/dist/cli/chunks/client-TV3V2YZ5.js +2 -0
- package/dist/cli/chunks/{cline-installer-Y77BWTAN.js → cline-installer-OWQ4D2FQ.js} +2 -2
- package/dist/cli/chunks/{code-LV2HAGJY.js → code-2ZRL7SEU.js} +19 -18
- package/dist/cli/chunks/{code-index-extractor-4GKKSETB.js → code-index-extractor-JXSQVM67.js} +2 -2
- package/dist/cli/chunks/{codex-installer-WMKBYE5Y.js → codex-installer-7LXZYBSQ.js} +2 -2
- package/dist/cli/chunks/{completions-SBGFAOIJ.js → completions-C2LR623C.js} +2 -2
- package/dist/cli/chunks/{complexity-analyzer-AQHFIJXC.js → complexity-analyzer-TGQLHCYJ.js} +2 -2
- package/dist/cli/chunks/{continuedev-installer-26AYFS2E.js → continuedev-installer-RUGD24D2.js} +2 -2
- package/dist/cli/chunks/{copilot-installer-4UD3DK55.js → copilot-installer-ZLFVLEJP.js} +2 -2
- package/dist/cli/chunks/core-handlers-PZT4OLWR.js +2 -0
- package/dist/cli/chunks/{cost-tracker-TP4NZCG4.js → cost-tracker-RT4QL745.js} +2 -2
- package/dist/cli/chunks/{coverage-B2KIXHAI.js → coverage-NV3C4IMM.js} +11 -10
- package/dist/cli/chunks/cross-domain-router-QOFCZ7G4.js +2 -0
- package/dist/cli/chunks/{cursor-installer-AVZEQZ4W.js → cursor-installer-LJKLNFF6.js} +2 -2
- package/dist/cli/chunks/{daemon-XM2A7LQU.js → daemon-BMDXCQT5.js} +3 -3
- package/dist/cli/chunks/{daemon-P574WWBW.js → daemon-FBH3IRYN.js} +4 -4
- package/dist/cli/chunks/{dag-attention-scheduler-MIWOZ6ET.js → dag-attention-scheduler-JGDED55I.js} +2 -2
- package/dist/cli/chunks/{detect-TYR7HT23.js → detect-SZIHIVCJ.js} +2 -2
- package/dist/cli/chunks/{dist-node-2DGVQGLS.js → dist-node-FV3KWXQ6.js} +2 -2
- package/dist/cli/chunks/{domain-handler-RRA4ZOMF.js → domain-handler-GI5JWQOV.js} +2 -2
- package/dist/cli/chunks/{domain-plugins-IVZEZ5RB.js → domain-plugins-BUWY36TL.js} +2 -2
- package/dist/cli/chunks/domain-transfer-GCY7W5DA.js +2 -0
- package/dist/cli/chunks/dream-TRFBGDSQ.js +2 -0
- package/dist/cli/chunks/{embed-and-insert-pattern-VNIEOVPO.js → embed-and-insert-pattern-GPRR3ZGD.js} +2 -2
- package/dist/cli/chunks/{eval-QV4LVPUF.js → eval-XPB3IGAP.js} +2 -2
- package/dist/cli/chunks/{experience-capture-middleware-DAPKT763.js → experience-capture-middleware-2E554UB3.js} +3 -3
- package/dist/cli/chunks/{fast-paths-WVRFPHX7.js → fast-paths-ZSMWZPUC.js} +2 -2
- package/dist/cli/chunks/{feature-flags-DEFTUIYT.js → feature-flags-GIWVDVVC.js} +2 -2
- package/dist/cli/chunks/{feature-flags-O7ZXDDCD.js → feature-flags-N7EOGE5P.js} +2 -2
- package/dist/cli/chunks/file-discovery-WCKGMSPZ.js +2 -0
- package/dist/cli/chunks/fleet-HCHDOUCX.js +44 -0
- package/dist/cli/chunks/{gnn-wrapper-LS4LZJDR.js → gnn-wrapper-CZNCNXXZ.js} +2 -2
- package/dist/cli/chunks/{heartbeat-handler-RFTERD4K.js → heartbeat-handler-6YUIF2YQ.js} +4 -4
- package/dist/cli/chunks/heartbeat-scheduler-P44A2OX3.js +2 -0
- package/dist/cli/chunks/hnsw-adapter-ZJQIQJKC.js +2 -0
- package/dist/cli/chunks/hnsw-index-HMG2GH3Z.js +2 -0
- package/dist/cli/chunks/{hnsw-legacy-bridge-GPKGFFHY.js → hnsw-legacy-bridge-J3M3IK24.js} +2 -2
- package/dist/cli/chunks/{hnswlib-node-PHL3F2PR.js → hnswlib-node-ULGTGDZW.js} +2 -2
- package/dist/cli/chunks/{hooks-GYJ6D4QM.js → hooks-C4BUGYUQ.js} +28 -28
- package/dist/cli/chunks/hybrid-backend-B7M74PZG.js +2 -0
- package/dist/cli/chunks/{hypergraph-engine-YGEQPCKJ.js → hypergraph-engine-WINGVMPG.js} +2 -2
- package/dist/cli/chunks/{hypergraph-handler-ZIMM647V.js → hypergraph-handler-GADMWKAU.js} +3 -3
- package/dist/cli/chunks/impact-analyzer-PZYOVKQO.js +2 -0
- package/dist/cli/chunks/{init-guard-VOMBXJXG.js → init-guard-K2T4QWAO.js} +2 -2
- package/dist/cli/chunks/{init-handler-PSMUBWK5.js → init-handler-PCZTDZYI.js} +6 -6
- package/dist/cli/chunks/init-wizard-TZDJQK3U.js +2 -0
- package/dist/cli/chunks/kernel-Y6RRIOKW.js +2 -0
- package/dist/cli/chunks/{kilocode-installer-2YNTFBWJ.js → kilocode-installer-XENXNEIU.js} +2 -2
- package/dist/cli/chunks/{kiro-installer-XHJDPVAZ.js → kiro-installer-3PG2TJ67.js} +2 -2
- package/dist/cli/chunks/knowledge-graph-BVD5Z66M.js +2 -0
- package/dist/cli/chunks/{learning-GNSIDRNG.js → learning-6KDH7FK4.js} +3 -3
- package/dist/cli/chunks/{llm-router-LQDM7IU2.js → llm-router-RKVDEWU2.js} +4 -4
- package/dist/cli/chunks/llm-router-service-KHCAMSUU.js +2 -0
- package/dist/cli/chunks/{load-YATHI72E.js → load-ITHC564X.js} +2 -2
- package/dist/cli/chunks/load-test-RUF7DZA5.js +2 -0
- package/dist/cli/chunks/{mcp-4Y6GDLYK.js → mcp-TCL5UW3N.js} +2 -2
- package/dist/cli/chunks/{memory-OUW3L7H2.js → memory-BKDAY2N2.js} +5 -5
- package/dist/cli/chunks/memory-backend-7ZLFOVGG.js +2 -0
- package/dist/cli/chunks/{memory-handlers-G3LFF53U.js → memory-handlers-WN4FXFOA.js} +2 -2
- package/dist/cli/chunks/{multi-model-executor-UBZJXAD2.js → multi-model-executor-VHAT7ZPF.js} +2 -2
- package/dist/cli/chunks/{opencode-installer-AMMNWVH5.js → opencode-installer-E3VM3EEY.js} +2 -2
- package/dist/cli/chunks/{orchestrator-Y44WDOER.js → orchestrator-BMQ6X762.js} +58 -20
- package/dist/cli/chunks/pattern-null-store-RY6CVYHP.js +2 -0
- package/dist/cli/chunks/{pattern-usage-recorder-ESR42RME.js → pattern-usage-recorder-GOOR2BV5.js} +2 -2
- package/dist/cli/chunks/{pipeline-EDTS6OSC.js → pipeline-5NSFQQIX.js} +2 -2
- package/dist/cli/chunks/{platform-5WONJSUX.js → platform-SQM34J5G.js} +2 -2
- package/dist/cli/chunks/{plugin-IJXPCLD4.js → plugin-UQJZRMZG.js} +2 -2
- package/dist/cli/chunks/{prime-radiant-advanced-wasm-5ECKGZK6.js → prime-radiant-advanced-wasm-WMDJOL4S.js} +2 -2
- package/dist/cli/chunks/project-root-IO5KRNGL.js +2 -0
- package/dist/cli/chunks/protocol-executor-U2CUDWDE.js +2 -0
- package/dist/cli/chunks/{protocol-handler-DRD3GVNW.js → protocol-handler-OBDCVY6X.js} +2 -2
- package/dist/cli/chunks/{prove-KTGW2HMJ.js → prove-XDC7I4XT.js} +2 -2
- package/dist/cli/chunks/qe-reasoning-bank-DQSSX2IP.js +2 -0
- package/dist/cli/chunks/{quality-DV2WPRRS.js → quality-L4GQ6WX4.js} +2 -2
- package/dist/cli/chunks/{quality-gate-HFUAFVZC.js → quality-gate-MJG66LKN.js} +3 -3
- package/dist/cli/chunks/queen-coordinator-6FN4BZIX.js +2 -0
- package/dist/cli/chunks/real-embeddings-HW4G2LWL.js +2 -0
- package/dist/cli/chunks/{ref-validation-QWSKS5OY.js → ref-validation-FC7JOJ2C.js} +2 -2
- package/dist/cli/chunks/{roocode-installer-RBAYRCHX.js → roocode-installer-KWS4CEIC.js} +2 -2
- package/dist/cli/chunks/router-YUO3I7RU.js +2 -0
- package/dist/cli/chunks/routing-feedback-36SLQGJE.js +2 -0
- package/dist/cli/chunks/{routing-handler-FMPP3XKO.js → routing-handler-QF4WVB2S.js} +2 -2
- package/dist/cli/chunks/{ruvector-commands-KZZT4HWF.js → ruvector-commands-2MTCOUK6.js} +2 -2
- package/dist/cli/chunks/rvf-dual-writer-FRYZH3WZ.js +2 -0
- package/dist/cli/chunks/rvf-migration-adapter-XXNITL5I.js +2 -0
- package/dist/cli/chunks/{rvf-migration-coordinator-7CHEV35N.js → rvf-migration-coordinator-BREJCXWN.js} +2 -2
- package/dist/cli/chunks/rvf-native-adapter-D2WWKJIV.js +2 -0
- package/dist/cli/chunks/{rvf-store-integrity-Q2TH52SN.js → rvf-store-integrity-KKC6HOJD.js} +2 -2
- package/dist/cli/chunks/safe-db-4RRIGRXD.js +2 -0
- package/dist/cli/chunks/schedule-25RTO4DQ.js +2 -0
- package/dist/cli/chunks/scheduler-BPIOJZ5P.js +2 -0
- package/dist/cli/chunks/{security-CUEA3UIM.js → security-OSAE7VAP.js} +3 -3
- package/dist/cli/chunks/{shared-rvf-adapter-DROMBRV2.js → shared-rvf-adapter-COUOS665.js} +2 -2
- package/dist/cli/chunks/{shared-rvf-dual-writer-DBNABOP7.js → shared-rvf-dual-writer-YXMPZKQE.js} +2 -2
- package/dist/cli/chunks/sqlite-persistence-EDF47DDX.js +2 -0
- package/dist/cli/chunks/{standalone-memory-IAHA3M6B.js → standalone-memory-E6JBMOIL.js} +2 -2
- package/dist/cli/chunks/{status-handler-AFUCASTX.js → status-handler-AFTCIYIX.js} +2 -2
- package/dist/cli/chunks/{structural-health-AQRV6JJ6.js → structural-health-2FROCEI4.js} +2 -2
- package/dist/cli/chunks/{sync-XW5TLZ7M.js → sync-VAYTOWDC.js} +2 -2
- package/dist/cli/chunks/{sync-GX7FMJHL.js → sync-YIQYOFGW.js} +2 -2
- package/dist/cli/chunks/task-handler-KVQHDEX3.js +62 -0
- package/dist/cli/chunks/task-handlers-MVVECQA6.js +9 -0
- package/dist/cli/chunks/{test-D2XDJNDX.js → test-5JSVTOMY.js} +4 -4
- package/dist/cli/chunks/test-runner-process-LEPF2OSS.js +2 -0
- package/dist/cli/chunks/{test-scheduling-TS6I2PR7.js → test-scheduling-HBOHVLI3.js} +3 -3
- package/dist/cli/chunks/{token-bootstrap-HBBLPCZ3.js → token-bootstrap-5VEPTPFA.js} +2 -2
- package/dist/cli/chunks/{token-usage-3MBUX4PR.js → token-usage-TBJHDLY6.js} +2 -2
- package/dist/cli/chunks/{transformers-ZWMQO3L2.js → transformers-VAWYMHMZ.js} +2 -2
- package/dist/cli/chunks/tree-sitter-wasm-parser-TSZTCMFV.js +2 -0
- package/dist/cli/chunks/{types-5YEMGPSQ.js → types-R5SDZU2E.js} +2 -2
- package/dist/cli/chunks/unified-memory-TLGSSLMI.js +2 -0
- package/dist/cli/chunks/unified-memory-hnsw-MSUR7ZOO.js +2 -0
- package/dist/cli/chunks/unified-persistence-VFFOTWK7.js +2 -0
- package/dist/cli/chunks/{upgrade-2TPBKIHI.js → upgrade-K5PIHXRB.js} +2 -2
- package/dist/cli/chunks/{validate-XRAXXFW6.js → validate-RPTS7RYJ.js} +2 -2
- package/dist/cli/chunks/{validate-swarm-IYSCS3BZ.js → validate-swarm-B2ZL556X.js} +2 -2
- package/dist/cli/chunks/visual-security-6Q44XNLB.js +2 -0
- package/dist/cli/chunks/{web-tree-sitter-PZQ3ZG2P.js → web-tree-sitter-K4DUJC32.js} +2 -2
- package/dist/cli/chunks/{windsurf-installer-U6XWFRVT.js → windsurf-installer-OK2AJN35.js} +2 -2
- package/dist/cli/chunks/witness-chain-KDOMXDQX.js +2 -0
- package/dist/cli/chunks/witness-chain-N3OY2RMH.js +2 -0
- package/dist/cli/chunks/{witness-chain-repair-K7YX2AO6.js → witness-chain-repair-L6Y5RFXR.js} +2 -2
- package/dist/cli/chunks/{witness-chain-verifier-GUTC3W7N.js → witness-chain-verifier-N4CW7FZX.js} +2 -2
- package/dist/cli/chunks/{witness-key-manager-YBNKMOP6.js → witness-key-manager-TDNPS3WD.js} +2 -2
- package/dist/cli/chunks/{workflow-UAJUILFQ.js → workflow-XRZA3YCY.js} +4 -4
- package/dist/cli/chunks/workflow-orchestrator-CVNNT2RJ.js +2 -0
- package/dist/cli/chunks/{wrappers-AVZ3GPAL.js → wrappers-5JIFWKN6.js} +2 -2
- package/dist/cli/commands/ci.js +7 -0
- package/dist/cli/commands/code.js +6 -0
- package/dist/cli/commands/coverage.js +7 -1
- 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/hooks-handlers/stats-hooks.d.ts +4 -3
- package/dist/cli/commands/hooks-handlers/stats-hooks.js +22 -4
- package/dist/cli/handlers/task-handler.d.ts +5 -0
- package/dist/cli/handlers/task-handler.js +26 -0
- package/dist/cli/utils/coverage-verdict.d.ts +11 -2
- package/dist/cli/utils/coverage-verdict.js +26 -6
- package/dist/cli/utils/fleet-operation.d.ts +10 -2
- package/dist/cli/utils/fleet-operation.js +20 -3
- package/dist/cli/utils/fleet-result.d.ts +20 -4
- package/dist/cli/utils/fleet-result.js +32 -21
- package/dist/cli/utils/fleet-shard.d.ts +36 -0
- package/dist/cli/utils/fleet-shard.js +110 -0
- package/dist/coordination/handlers/code-intelligence-handlers.js +21 -1
- package/dist/coordination/handlers/coverage-collection.d.ts +2 -0
- package/dist/coordination/handlers/coverage-collection.js +2 -1
- package/dist/coordination/handlers/coverage-evidence.d.ts +75 -0
- package/dist/coordination/handlers/coverage-evidence.js +159 -0
- package/dist/coordination/handlers/coverage-handlers.js +16 -3
- package/dist/coordination/handlers/coverage-scope.d.ts +40 -0
- package/dist/coordination/handlers/coverage-scope.js +321 -0
- package/dist/coordination/handlers/coverage-target.d.ts +9 -0
- package/dist/coordination/handlers/coverage-target.js +15 -5
- package/dist/coordination/handlers/handler-types.d.ts +2 -2
- package/dist/coordination/handlers/handler-utils.d.ts +11 -0
- package/dist/coordination/handlers/handler-utils.js +22 -8
- package/dist/coordination/handlers/misc-handlers.js +5 -2
- package/dist/coordination/handlers/quality-handlers.js +2 -2
- package/dist/coordination/handlers/security-handlers.js +12 -2
- package/dist/coordination/protocols/security-audit.js +11 -1
- package/dist/coordination/task-executor.js +7 -2
- 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/metric-collector/listing-process-owner.js +4 -1
- package/dist/domains/code-intelligence/services/semantic-analyzer.d.ts +51 -5
- package/dist/domains/code-intelligence/services/semantic-analyzer.js +144 -78
- package/dist/domains/coverage-analysis/collected-metrics.d.ts +10 -0
- package/dist/domains/coverage-analysis/collected-metrics.js +29 -0
- package/dist/domains/coverage-analysis/services/coverage-analyzer.js +11 -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/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/interfaces.d.ts +2 -0
- package/dist/domains/quality-assessment/services/coherence-gate.js +15 -2
- 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 +5 -0
- package/dist/domains/test-execution/services/test-executor.d.ts +6 -0
- package/dist/domains/test-execution/services/test-executor.js +16 -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/10-workers.js +42 -4
- package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.d.ts +23 -1
- package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.js +50 -15
- package/dist/integrations/agentic-flow/reasoning-bank/index.d.ts +7 -2
- package/dist/integrations/agentic-flow/reasoning-bank/index.js +8 -0
- package/dist/integrations/embeddings/index/HNSWIndex.js +8 -4
- package/dist/integrations/ruvector/transfer-coherence-stub.js +5 -10
- package/dist/learning/embedder-endpoint-client.d.ts +8 -0
- package/dist/learning/embedder-endpoint-client.js +20 -0
- package/dist/learning/embedder-recovery.d.ts +63 -0
- package/dist/learning/embedder-recovery.js +94 -0
- package/dist/learning/qe-reasoning-bank-types.d.ts +5 -0
- package/dist/learning/qe-reasoning-bank.d.ts +21 -0
- package/dist/learning/qe-reasoning-bank.js +54 -8
- package/dist/learning/real-embeddings.d.ts +23 -0
- package/dist/learning/real-embeddings.js +69 -2
- package/dist/learning/real-qe-reasoning-bank.d.ts +24 -4
- package/dist/learning/real-qe-reasoning-bank.js +58 -20
- package/dist/logging/redaction.js +142 -12
- package/dist/mcp/bundle.js +509 -497
- package/dist/mcp/daemon-mode.d.ts +126 -0
- package/dist/mcp/daemon-mode.js +257 -0
- package/dist/mcp/entry.d.ts +4 -0
- package/dist/mcp/entry.js +50 -2
- package/dist/mcp/handlers/domain-handler-configs.d.ts +8 -0
- package/dist/mcp/handlers/domain-handler-configs.js +14 -2
- 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.d.ts +6 -1
- package/dist/mcp/handlers/orchestrate-routes.js +94 -3
- package/dist/mcp/handlers/task-handlers.d.ts +3 -242
- package/dist/mcp/handlers/task-handlers.js +11 -788
- 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 +15 -2
- package/dist/mcp/services/reasoning-bank-service.d.ts +6 -1
- package/dist/mcp/services/reasoning-bank-service.js +9 -0
- 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/visual-accessibility/index.d.ts +7 -0
- package/dist/mcp/tools/visual-accessibility/index.js +29 -13
- package/dist/mcp/types.d.ts +14 -0
- package/dist/routing/advisor/redaction.js +22 -2
- package/dist/shared/events/domain-events.d.ts +2 -0
- package/dist/shared/llm/providers/response-deadline.js +16 -2
- 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/dist/shared/types/index.js +3 -1
- package/dist/strange-loop/infra-healing/infra-aware-agent-provider.js +8 -1
- package/package.json +3 -3
- package/dist/cli/chunks/adapter-V4GSGOOK.js +0 -2
- package/dist/cli/chunks/aqe-learning-engine-6WQTM5YR.js +0 -2
- package/dist/cli/chunks/base-AK7BXBX2.js +0 -2
- package/dist/cli/chunks/browser-workflow-VTDFBW7T.js +0 -2
- package/dist/cli/chunks/chunk-2DTX7YAZ.js +0 -6
- package/dist/cli/chunks/chunk-72ZBJD2E.js +0 -3
- package/dist/cli/chunks/chunk-EBPJY4DI.js +0 -3
- package/dist/cli/chunks/chunk-H43AFUKL.js +0 -2
- package/dist/cli/chunks/chunk-HJ3XNTTJ.js +0 -2
- package/dist/cli/chunks/chunk-IO5537OM.js +0 -2
- package/dist/cli/chunks/chunk-IW6WDGHM.js +0 -2
- package/dist/cli/chunks/chunk-K2HBNYAZ.js +0 -62
- package/dist/cli/chunks/chunk-LRL56ZYL.js +0 -21
- package/dist/cli/chunks/chunk-VLD7Z2ED.js +0 -13
- package/dist/cli/chunks/chunk-VO3DRK4P.js +0 -3
- package/dist/cli/chunks/ci-6GUFAZMJ.js +0 -81
- package/dist/cli/chunks/client-HL2COSFM.js +0 -2
- package/dist/cli/chunks/core-handlers-IX7ATLM6.js +0 -2
- package/dist/cli/chunks/cross-domain-router-YYKLAPJO.js +0 -2
- package/dist/cli/chunks/domain-transfer-DOBI67K6.js +0 -2
- package/dist/cli/chunks/dream-T6EP7B3F.js +0 -2
- package/dist/cli/chunks/file-discovery-JYMVTDMU.js +0 -2
- package/dist/cli/chunks/fleet-FVAUMKUT.js +0 -46
- package/dist/cli/chunks/heartbeat-scheduler-4N5MUJ7S.js +0 -2
- package/dist/cli/chunks/hnsw-adapter-ZPAJDSLR.js +0 -2
- package/dist/cli/chunks/hnsw-index-4CTH6RHB.js +0 -2
- package/dist/cli/chunks/hybrid-backend-AW6UTXQS.js +0 -2
- package/dist/cli/chunks/impact-analyzer-MZK3JMSV.js +0 -2
- package/dist/cli/chunks/init-wizard-FUC7KDVX.js +0 -2
- package/dist/cli/chunks/kernel-ZCPMCVMW.js +0 -2
- package/dist/cli/chunks/knowledge-graph-NUJKEDNF.js +0 -2
- package/dist/cli/chunks/llm-router-service-B2BFBQ76.js +0 -2
- package/dist/cli/chunks/load-test-ZHQ2MUGO.js +0 -2
- package/dist/cli/chunks/memory-backend-AAMQG6WH.js +0 -2
- package/dist/cli/chunks/pattern-null-store-RFNVA46O.js +0 -2
- package/dist/cli/chunks/project-root-7QL4KP5C.js +0 -2
- package/dist/cli/chunks/protocol-executor-2NW5BD4R.js +0 -2
- package/dist/cli/chunks/qe-reasoning-bank-G2JZOGKD.js +0 -2
- package/dist/cli/chunks/queen-coordinator-GRG5FT2A.js +0 -2
- package/dist/cli/chunks/real-embeddings-RQRVOKVM.js +0 -2
- package/dist/cli/chunks/router-LQB5SWAF.js +0 -2
- package/dist/cli/chunks/routing-feedback-OEEXA55N.js +0 -2
- package/dist/cli/chunks/rvf-dual-writer-BZK4M7BO.js +0 -2
- package/dist/cli/chunks/rvf-migration-adapter-EZZUJL2E.js +0 -2
- package/dist/cli/chunks/rvf-native-adapter-6COXTQZ3.js +0 -2
- package/dist/cli/chunks/safe-db-PE6G3L55.js +0 -2
- package/dist/cli/chunks/schedule-OLKQ6QYW.js +0 -2
- package/dist/cli/chunks/scheduler-LSGBDFAT.js +0 -2
- package/dist/cli/chunks/sqlite-persistence-HH4DNTYH.js +0 -2
- package/dist/cli/chunks/task-handler-TFKVUTNF.js +0 -60
- package/dist/cli/chunks/task-handlers-SS4ZDXNF.js +0 -9
- package/dist/cli/chunks/test-runner-process-PSSBNNGR.js +0 -2
- package/dist/cli/chunks/tree-sitter-wasm-parser-TYRQRJ2W.js +0 -2
- package/dist/cli/chunks/unified-memory-AGDZQ5XD.js +0 -2
- package/dist/cli/chunks/unified-memory-hnsw-X5TJ3JDE.js +0 -2
- package/dist/cli/chunks/unified-persistence-UCV7YETW.js +0 -2
- package/dist/cli/chunks/visual-security-ZLXRIQZV.js +0 -2
- package/dist/cli/chunks/witness-chain-CVIWYTD2.js +0 -2
- package/dist/cli/chunks/witness-chain-VBKORKOX.js +0 -2
- package/dist/cli/chunks/workflow-orchestrator-3ZN7MVCE.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
|
|
@@ -173,6 +173,26 @@ if (workersSetting !== undefined && ['false', '0', 'off', 'no'].includes(workers
|
|
|
173
173
|
process.exit(0);
|
|
174
174
|
}
|
|
175
175
|
|
|
176
|
+
// #1207: keep daemon.log bounded. The server truncates it on its heartbeat once
|
|
177
|
+
// it passes AQE_DAEMON_LOG_MAX_SIZE (default 5M, 0 or off disables); a log left
|
|
178
|
+
// over that size by an earlier run is moved to daemon.log.1 here, before
|
|
179
|
+
// anything writes to it. rename() replaces daemon.log.1 and never follows it.
|
|
180
|
+
function logMaxBytes() {
|
|
181
|
+
const text = String(process.env.AQE_DAEMON_LOG_MAX_SIZE || '').trim().toLowerCase();
|
|
182
|
+
if (['0', 'off', 'false', 'no', 'none', 'disable', 'disabled'].includes(text)) return 0;
|
|
183
|
+
const m = /^(\\d+)\\s*([kmg]?)b?$/.exec(text);
|
|
184
|
+
const bytes = m ? Number(m[1]) * { '': 1, k: 1024, m: 1048576, g: 1073741824 }[m[2]] : NaN;
|
|
185
|
+
return Number.isSafeInteger(bytes) && bytes >= 1024 ? bytes : 5 * 1048576;
|
|
186
|
+
}
|
|
187
|
+
function rotateLogAtStart(file) {
|
|
188
|
+
const max = logMaxBytes();
|
|
189
|
+
try {
|
|
190
|
+
const s = fs.lstatSync(file);
|
|
191
|
+
if (max > 0 && s.isFile() && s.size > max) fs.renameSync(file, file + '.1');
|
|
192
|
+
} catch {}
|
|
193
|
+
}
|
|
194
|
+
rotateLogAtStart(logFile);
|
|
195
|
+
|
|
176
196
|
const ts = new Date().toISOString();
|
|
177
197
|
appendFileSync(logFile, '[' + ts + '] Starting AQE v3 Worker Daemon...\\n');
|
|
178
198
|
|
|
@@ -228,10 +248,28 @@ if (binCandidate && binCandidate.endsWith('bundle.js')) {
|
|
|
228
248
|
appendFileSync(logFile, '[' + ts + '] Using: ' + mcpCmd + ' ' + mcpArgs.join(' ') + '\\n');
|
|
229
249
|
|
|
230
250
|
// #1066: keep a user's AQE_WORKERS_ENABLED (for example false) instead of forcing it on.
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
251
|
+
// #1158: AQE_MCP_DAEMON=1 is daemon mode. The server has no stdin here, so
|
|
252
|
+
// without it the stdin-EOF guard (#513) shut it down right after starting;
|
|
253
|
+
// in daemon mode it stops only on SIGTERM/SIGINT (stop-daemon.cjs).
|
|
254
|
+
const env = { ...process.env, AQE_STORAGE_PATH: '.agentic-qe', AQE_LEARNING_ENABLED: 'true', AQE_WORKERS_ENABLED: workersSetting ?? 'true', AQE_HTTP_PORT: '0', AQE_MCP_DAEMON: '1' };
|
|
255
|
+
// #1158: the server writes daemon.log itself, through a descriptor opened
|
|
256
|
+
// here with the same symlink rules as appendFileSync. Piping its output
|
|
257
|
+
// through this script kept the script from exiting while the daemon ran, and
|
|
258
|
+
// once the script was gone nothing was logged any more.
|
|
259
|
+
function openLogFd(file) {
|
|
260
|
+
if (!isRegularOrAbsent(file)) return 'ignore';
|
|
261
|
+
const c = fs.constants;
|
|
262
|
+
try { return fs.openSync(file, c.O_APPEND | c.O_CREAT | c.O_WRONLY | (c.O_NOFOLLOW || 0), 0o644); } catch { return 'ignore'; }
|
|
263
|
+
}
|
|
264
|
+
const logFd = openLogFd(logFile);
|
|
265
|
+
// #1207: name the file behind the server's stdout/stderr so it can rotate it.
|
|
266
|
+
if (typeof logFd === 'number') env.AQE_MCP_DAEMON_LOG = logFile; else delete env.AQE_MCP_DAEMON_LOG;
|
|
267
|
+
let child;
|
|
268
|
+
try {
|
|
269
|
+
child = spawn(mcpCmd, mcpArgs, { cwd: projectRoot, env, detached: true, stdio: ['ignore', logFd, logFd] });
|
|
270
|
+
} finally {
|
|
271
|
+
if (typeof logFd === 'number') { try { fs.closeSync(logFd); } catch {} }
|
|
272
|
+
}
|
|
235
273
|
let exited = null;
|
|
236
274
|
child.on('exit', (code, signal) => { exited = { code, signal }; });
|
|
237
275
|
// #1116: a command that cannot be started (no npx on PATH: spawn ENOENT) emits
|
|
@@ -71,6 +71,15 @@ export interface ExperienceGuidance {
|
|
|
71
71
|
/** Estimated token savings */
|
|
72
72
|
readonly estimatedTokenSavings: number;
|
|
73
73
|
}
|
|
74
|
+
/**
|
|
75
|
+
* #1204: whether similar-experience guidance can use vectors. 'unavailable'
|
|
76
|
+
* means the embedder failed (or there is none): experiences are stored
|
|
77
|
+
* without vectors and getGuidance returns no guidance.
|
|
78
|
+
*/
|
|
79
|
+
export interface ExperienceGuidanceStatus {
|
|
80
|
+
mode: 'vector' | 'unavailable';
|
|
81
|
+
reason?: string;
|
|
82
|
+
}
|
|
74
83
|
/**
|
|
75
84
|
* Configuration for ExperienceReplay
|
|
76
85
|
*/
|
|
@@ -89,6 +98,8 @@ export interface ExperienceReplayConfig {
|
|
|
89
98
|
autoPrune: boolean;
|
|
90
99
|
/** Prune threshold (quality below this is removed) */
|
|
91
100
|
pruneThreshold: number;
|
|
101
|
+
/** #1204: after the embedder fails, wait this long before retrying it (default 60 s). */
|
|
102
|
+
embedderRetryIntervalMs?: number;
|
|
92
103
|
}
|
|
93
104
|
/**
|
|
94
105
|
* ExperienceReplay stores and retrieves successful experiences for learning.
|
|
@@ -113,7 +124,13 @@ export declare class ExperienceReplay {
|
|
|
113
124
|
private prepared;
|
|
114
125
|
private initialized;
|
|
115
126
|
private initializationPromise;
|
|
116
|
-
|
|
127
|
+
/**
|
|
128
|
+
* #1204: whether the embedder works; retried in the background after a
|
|
129
|
+
* failure, as the pattern banks do (#1187).
|
|
130
|
+
*/
|
|
131
|
+
private readonly embedderRecovery;
|
|
132
|
+
/** Whether an embedding succeeded, to label later failures as runtime ones. */
|
|
133
|
+
private embedderWorked;
|
|
117
134
|
private hnswIndex;
|
|
118
135
|
private idToExperienceId;
|
|
119
136
|
private experienceIdToHnswId;
|
|
@@ -155,8 +172,13 @@ export declare class ExperienceReplay {
|
|
|
155
172
|
* #1022: embed text, or return null when no embedding runtime is available.
|
|
156
173
|
* The experience is then stored without a vector (backfilled at a later
|
|
157
174
|
* start that has an embedder) and similarity search finds no matches.
|
|
175
|
+
* #1204: a failure is reported by getEmbedderStatus(), labelled as a
|
|
176
|
+
* runtime failure when the embedder had worked, and warned about once per
|
|
177
|
+
* outage. The embedder is retried in the background after the interval.
|
|
158
178
|
*/
|
|
159
179
|
private embedOrNull;
|
|
180
|
+
/** #1204: whether similar-experience guidance can use vectors, and if not why. */
|
|
181
|
+
getEmbedderStatus(): ExperienceGuidanceStatus;
|
|
160
182
|
/**
|
|
161
183
|
* Get guidance for a new task based on similar experiences
|
|
162
184
|
*
|
|
@@ -14,7 +14,8 @@
|
|
|
14
14
|
*/
|
|
15
15
|
import { v4 as uuidv4 } from 'uuid';
|
|
16
16
|
import { getUnifiedMemory } from '../../../kernel/unified-memory.js';
|
|
17
|
-
import { computeRealEmbedding, } from '../../../learning/real-embeddings.js';
|
|
17
|
+
import { computeRealEmbedding, cosineSimilarity, } from '../../../learning/real-embeddings.js';
|
|
18
|
+
import { EmbedderRecovery, probeEmbedder } from '../../../learning/embedder-recovery.js';
|
|
18
19
|
import { CircularBuffer } from '../../../shared/utils/circular-buffer.js';
|
|
19
20
|
import { HNSWEmbeddingIndex } from '../../embeddings/index/HNSWIndex.js';
|
|
20
21
|
import { safeJsonParse } from '../../../shared/safe-json.js';
|
|
@@ -60,7 +61,13 @@ export class ExperienceReplay {
|
|
|
60
61
|
prepared = new Map();
|
|
61
62
|
initialized = false;
|
|
62
63
|
initializationPromise = null;
|
|
63
|
-
|
|
64
|
+
/**
|
|
65
|
+
* #1204: whether the embedder works; retried in the background after a
|
|
66
|
+
* failure, as the pattern banks do (#1187).
|
|
67
|
+
*/
|
|
68
|
+
embedderRecovery;
|
|
69
|
+
/** Whether an embedding succeeded, to label later failures as runtime ones. */
|
|
70
|
+
embedderWorked = false;
|
|
64
71
|
// Real HNSW index for O(log n) similarity search (150x-12,500x faster than linear scan)
|
|
65
72
|
hnswIndex;
|
|
66
73
|
// Mapping from HNSW numeric IDs to experience string IDs
|
|
@@ -82,6 +89,11 @@ export class ExperienceReplay {
|
|
|
82
89
|
constructor(config = {}) {
|
|
83
90
|
this.config = { ...DEFAULT_CONFIG, ...config };
|
|
84
91
|
this.recentExperiences = new CircularBuffer(100);
|
|
92
|
+
this.embedderRecovery = new EmbedderRecovery({
|
|
93
|
+
retryIntervalMs: this.config.embedderRetryIntervalMs,
|
|
94
|
+
probe: () => probeEmbedder(this.config.embedding),
|
|
95
|
+
onRecovered: () => console.log('[ExperienceReplay] Embedder available again: similar-experience guidance uses vectors'),
|
|
96
|
+
});
|
|
85
97
|
// Initialize real HNSW index with optimal parameters for experience search
|
|
86
98
|
this.hnswIndex = new HNSWEmbeddingIndex({
|
|
87
99
|
dimension: 384, // all-MiniLM-L6-v2 dimension
|
|
@@ -461,20 +473,36 @@ export class ExperienceReplay {
|
|
|
461
473
|
* #1022: embed text, or return null when no embedding runtime is available.
|
|
462
474
|
* The experience is then stored without a vector (backfilled at a later
|
|
463
475
|
* start that has an embedder) and similarity search finds no matches.
|
|
476
|
+
* #1204: a failure is reported by getEmbedderStatus(), labelled as a
|
|
477
|
+
* runtime failure when the embedder had worked, and warned about once per
|
|
478
|
+
* outage. The embedder is retried in the background after the interval.
|
|
464
479
|
*/
|
|
465
480
|
async embedOrNull(text) {
|
|
481
|
+
if (!this.embedderRecovery.isAvailable())
|
|
482
|
+
return null;
|
|
466
483
|
try {
|
|
467
|
-
|
|
484
|
+
const embedding = await computeRealEmbedding(text, this.config.embedding);
|
|
485
|
+
this.embedderWorked = true;
|
|
486
|
+
return embedding;
|
|
468
487
|
}
|
|
469
488
|
catch (error) {
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
489
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
490
|
+
const reason = this.embedderWorked ? `Embedder failed at runtime: ${message}` : message;
|
|
491
|
+
if (this.embedderRecovery.markUnavailable(reason)) {
|
|
492
|
+
console.warn(this.embedderWorked
|
|
493
|
+
? '[ExperienceReplay] Embedder failed; experiences are stored without vectors and ' +
|
|
494
|
+
'similar-experience guidance is unavailable until it recovers:'
|
|
495
|
+
: '[ExperienceReplay] No embedding runtime; experiences are stored without vectors ' +
|
|
496
|
+
'and similar-experience guidance is unavailable:', message);
|
|
474
497
|
}
|
|
475
498
|
return null;
|
|
476
499
|
}
|
|
477
500
|
}
|
|
501
|
+
/** #1204: whether similar-experience guidance can use vectors, and if not why. */
|
|
502
|
+
getEmbedderStatus() {
|
|
503
|
+
const reason = this.embedderRecovery.unavailableReason;
|
|
504
|
+
return reason === null ? { mode: 'vector' } : { mode: 'unavailable', reason };
|
|
505
|
+
}
|
|
478
506
|
/**
|
|
479
507
|
* Get guidance for a new task based on similar experiences
|
|
480
508
|
*
|
|
@@ -484,16 +512,19 @@ export class ExperienceReplay {
|
|
|
484
512
|
*/
|
|
485
513
|
async getGuidance(task, domain) {
|
|
486
514
|
this.ensureInitialized();
|
|
487
|
-
// #1022:
|
|
488
|
-
//
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
if (!(await this.embedOrNull(scrubReasoningBlocks(task)))) {
|
|
515
|
+
// #1022: without an embedding of the query nothing measures relevance, so
|
|
516
|
+
// return no guidance rather than picks with a made-up similarity.
|
|
517
|
+
const queryEmbedding = await this.embedOrNull(scrubReasoningBlocks(task));
|
|
518
|
+
if (!queryEmbedding) {
|
|
492
519
|
return null;
|
|
493
520
|
}
|
|
494
521
|
// Find similar experiences via HNSW
|
|
495
522
|
const similar = await this.findSimilarExperiences(task, domain);
|
|
496
|
-
// Blend in high-coherence experiences from reservoir buffer (R10, ADR-087)
|
|
523
|
+
// Blend in high-coherence experiences from reservoir buffer (R10, ADR-087).
|
|
524
|
+
// #1192: the buffer samples without looking at the query, so a sample is
|
|
525
|
+
// kept only when its similarity to the query embedding is measured and
|
|
526
|
+
// reaches the retrieval threshold. Samples without a comparable vector
|
|
527
|
+
// are skipped: every reported similarity is a measured one.
|
|
497
528
|
if (this.reservoirBuffer && this.reservoirBuffer.size() > 0) {
|
|
498
529
|
const reservoirSamples = this.reservoirBuffer.sample(Math.max(2, Math.floor(this.config.topK / 2)), 0.6);
|
|
499
530
|
for (const entry of reservoirSamples) {
|
|
@@ -504,8 +535,12 @@ export class ExperienceReplay {
|
|
|
504
535
|
// Skip if domain filter doesn't match
|
|
505
536
|
if (domain && exp.domain !== domain)
|
|
506
537
|
continue;
|
|
507
|
-
|
|
508
|
-
|
|
538
|
+
if (!exp.embedding || exp.embedding.length !== queryEmbedding.length)
|
|
539
|
+
continue;
|
|
540
|
+
const similarity = cosineSimilarity(queryEmbedding, exp.embedding);
|
|
541
|
+
if (similarity < this.config.similarityThreshold)
|
|
542
|
+
continue;
|
|
543
|
+
similar.push({ experience: exp, similarity });
|
|
509
544
|
}
|
|
510
545
|
}
|
|
511
546
|
if (similar.length === 0) {
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
*/
|
|
18
18
|
import { RealQEReasoningBank, type RealQEReasoningBankConfig, type RealQEPatternSearchResult, type PatternSearchStatus, type RealQERoutingRequest, type RealQERoutingResult, type LearningOutcome } from '../../../learning/real-qe-reasoning-bank.js';
|
|
19
19
|
import { TrajectoryTracker, type Trajectory, type TrajectoryStep, type TrajectoryOptions, type TrajectoryTrackerConfig } from './trajectory-tracker.js';
|
|
20
|
-
import { ExperienceReplay, type ExperienceGuidance, type ExperienceReplayConfig } from './experience-replay.js';
|
|
20
|
+
import { ExperienceReplay, type ExperienceGuidance, type ExperienceGuidanceStatus, type ExperienceReplayConfig } from './experience-replay.js';
|
|
21
21
|
import { PatternEvolution, type PatternVersion, type DriftDetectionResult, type MergeCandidate, type PatternEvolutionConfig } from './pattern-evolution.js';
|
|
22
22
|
import type { QEPattern, QEDomain, CreateQEPatternOptions } from '../../../learning/qe-patterns.js';
|
|
23
23
|
export interface EnhancedReasoningBankAdapterStats {
|
|
@@ -32,7 +32,7 @@ export interface EnhancedReasoningBankAdapterStats {
|
|
|
32
32
|
}
|
|
33
33
|
import type { Result } from '../../../shared/types/index.js';
|
|
34
34
|
export { TrajectoryTracker, createTrajectoryTracker, type Trajectory, type TrajectoryStep, type TrajectoryOptions, type TrajectoryTrackerConfig, } from './trajectory-tracker.js';
|
|
35
|
-
export { ExperienceReplay, createExperienceReplay, type Experience, type ExperienceGuidance, type ExperienceReplayConfig, } from './experience-replay.js';
|
|
35
|
+
export { ExperienceReplay, createExperienceReplay, type Experience, type ExperienceGuidance, type ExperienceGuidanceStatus, type ExperienceReplayConfig, } from './experience-replay.js';
|
|
36
36
|
export { PatternEvolution, createPatternEvolution, type PatternVersion, type DriftDetectionResult, type MergeCandidate, type PatternEvolutionConfig, } from './pattern-evolution.js';
|
|
37
37
|
/**
|
|
38
38
|
* Configuration for Enhanced ReasoningBank Adapter
|
|
@@ -185,6 +185,11 @@ export declare class EnhancedReasoningBankAdapter {
|
|
|
185
185
|
}): Promise<Result<RealQEPatternSearchResult[]>>;
|
|
186
186
|
/** #1022: whether pattern search uses vectors or text matching only. */
|
|
187
187
|
getPatternSearchStatus(): PatternSearchStatus;
|
|
188
|
+
/**
|
|
189
|
+
* #1204: whether similar-experience guidance can use vectors; null when
|
|
190
|
+
* experience replay is disabled.
|
|
191
|
+
*/
|
|
192
|
+
getExperienceGuidanceStatus(): ExperienceGuidanceStatus | null;
|
|
188
193
|
/**
|
|
189
194
|
* Record a pattern outcome with evolution tracking
|
|
190
195
|
*/
|
|
@@ -302,6 +302,14 @@ export class EnhancedReasoningBankAdapter {
|
|
|
302
302
|
this.ensureInitialized();
|
|
303
303
|
return this.reasoningBank.getPatternSearchStatus();
|
|
304
304
|
}
|
|
305
|
+
/**
|
|
306
|
+
* #1204: whether similar-experience guidance can use vectors; null when
|
|
307
|
+
* experience replay is disabled.
|
|
308
|
+
*/
|
|
309
|
+
getExperienceGuidanceStatus() {
|
|
310
|
+
this.ensureInitialized();
|
|
311
|
+
return this.experienceReplay?.getEmbedderStatus() ?? null;
|
|
312
|
+
}
|
|
305
313
|
/**
|
|
306
314
|
* Record a pattern outcome with evolution tracking
|
|
307
315
|
*/
|
|
@@ -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
|
|
@@ -11,9 +11,11 @@
|
|
|
11
11
|
*
|
|
12
12
|
* @module integrations/ruvector/transfer-coherence-stub
|
|
13
13
|
*/
|
|
14
|
-
import { createRequire } from 'module';
|
|
15
14
|
import { getRuVectorFeatureFlags } from './feature-flags.js';
|
|
16
|
-
|
|
15
|
+
// Static import so the bundlers inline the gate. A runtime
|
|
16
|
+
// require('./coherence-gate.js') resolves against the bundle file instead,
|
|
17
|
+
// fails, and silently returned the approve-everything stub (#1237).
|
|
18
|
+
import { CoherenceGate } from './coherence-gate-core.js';
|
|
17
19
|
// ============================================================================
|
|
18
20
|
// Stub Implementation
|
|
19
21
|
// ============================================================================
|
|
@@ -49,14 +51,7 @@ export class TransferCoherenceStub {
|
|
|
49
51
|
*/
|
|
50
52
|
export function createTransferCoherenceGate() {
|
|
51
53
|
if (getRuVectorFeatureFlags().useCoherenceGate) {
|
|
52
|
-
|
|
53
|
-
// Dynamic require to avoid circular dependency at module level
|
|
54
|
-
const { CoherenceGate } = esmRequire('./coherence-gate.js');
|
|
55
|
-
return new CoherenceGate();
|
|
56
|
-
}
|
|
57
|
-
catch {
|
|
58
|
-
// Fall through to stub if CoherenceGate fails to load
|
|
59
|
-
}
|
|
54
|
+
return new CoherenceGate();
|
|
60
55
|
}
|
|
61
56
|
return new TransferCoherenceStub();
|
|
62
57
|
}
|
|
@@ -121,6 +121,14 @@ export declare class EmbedderEndpointClient {
|
|
|
121
121
|
failures: number;
|
|
122
122
|
trippedAt: number | null;
|
|
123
123
|
};
|
|
124
|
+
/**
|
|
125
|
+
* #1204: probe the endpoint while the circuit breaker is open, as its single
|
|
126
|
+
* half-open trial. Other callers keep fast-failing meanwhile. A success
|
|
127
|
+
* closes the breaker and refreshes the identity; a failure keeps the
|
|
128
|
+
* breaker open for another full window. Lets a caller that rate-limits its
|
|
129
|
+
* own retries recover without also waiting out the breaker window.
|
|
130
|
+
*/
|
|
131
|
+
probeThroughOpenBreaker(): Promise<EndpointIdentity>;
|
|
124
132
|
/**
|
|
125
133
|
* Close the underlying keep-alive agent. Tests should call this in afterEach.
|
|
126
134
|
*/
|