agentic-qe 3.15.15 → 3.15.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/skills/skills-manifest.json +1 -1
- package/CHANGELOG.md +168 -0
- package/assets/skills/skills-manifest.json +1 -1
- package/dist/audit/witness-chain.d.ts +7 -0
- package/dist/audit/witness-chain.js +10 -0
- package/dist/cli/bundle.js +6 -6
- package/dist/cli/chunks/adapter-OMILP6KH.js +2 -0
- package/dist/cli/chunks/{agent-booster-wasm-EUF4XVUC.js → agent-booster-wasm-6BUOFQZA.js} +2 -2
- package/dist/cli/chunks/{agent-handler-MOX6PSIQ.js → agent-handler-HPDK3JI3.js} +2 -2
- package/dist/cli/chunks/{agent-memory-branch-AEXKIGDG.js → agent-memory-branch-5QKUTWK5.js} +2 -2
- package/dist/cli/chunks/aqe-learning-engine-OXH5CCOS.js +2 -0
- package/dist/cli/chunks/{arena-IQ5ZZDRF.js → arena-7OKPMNHD.js} +2 -2
- package/dist/cli/chunks/{arena-M7GA3CVG.js → arena-HZ35LESR.js} +4 -4
- package/dist/cli/chunks/{audit-4IPBMKWB.js → audit-XI575SVK.js} +3 -3
- package/dist/cli/chunks/base-MAK2BLTG.js +2 -0
- package/dist/cli/chunks/{better-sqlite3-IKDKJ2IE.js → better-sqlite3-YO5X7ZJS.js} +2 -2
- package/dist/cli/chunks/{brain-handler-5NQUDH4W.js → brain-handler-GCQZFZGQ.js} +3 -3
- package/dist/cli/chunks/{branch-enumerator-KSXELWRC.js → branch-enumerator-N6G44UU2.js} +2 -2
- package/dist/cli/chunks/{browser-6LACARWE.js → browser-EVKPTLOI.js} +2 -2
- package/dist/cli/chunks/browser-workflow-IR3VF2TL.js +2 -0
- package/dist/cli/chunks/{chunk-DKX4GNRU.js → chunk-2EQK7B5L.js} +2 -2
- package/dist/cli/chunks/chunk-2PCEMDIX.js +757 -0
- package/dist/cli/chunks/{chunk-JCQGJGGZ.js → chunk-2UUZCQSD.js} +7 -7
- package/dist/cli/chunks/chunk-2YWYW7NU.js +21 -0
- package/dist/cli/chunks/{chunk-PFQCV6YS.js → chunk-45223KK6.js} +6 -6
- package/dist/cli/chunks/chunk-4EJLHNER.js +12 -0
- package/dist/cli/chunks/{chunk-E5G4WZ2T.js → chunk-4L6WX5KC.js} +1 -1
- package/dist/cli/chunks/{chunk-UQPA33UK.js → chunk-4NKZU2JZ.js} +2 -2
- package/dist/cli/chunks/{chunk-OBDONJQM.js → chunk-4UKTIQDT.js} +2 -2
- package/dist/cli/chunks/{chunk-7BLZHFKD.js → chunk-4YM45Z5B.js} +1 -1
- package/dist/cli/chunks/{chunk-ZWBGYJ7K.js → chunk-5FSPELOG.js} +2 -2
- package/dist/cli/chunks/{chunk-NWIIYHT6.js → chunk-5WATBVU6.js} +2 -2
- package/dist/cli/chunks/{chunk-7ACCBHRB.js → chunk-5WYZVSL2.js} +1 -1
- package/dist/cli/chunks/{chunk-ZYJB6FML.js → chunk-6LSZCEW2.js} +1 -1
- package/dist/cli/chunks/{chunk-U62OUXBF.js → chunk-6V6BD6PH.js} +1 -1
- package/dist/cli/chunks/{chunk-MIA447GY.js → chunk-74MDUIAZ.js} +1 -1
- package/dist/cli/chunks/{chunk-AJPROCDW.js → chunk-776K4ZLE.js} +2 -2
- package/dist/cli/chunks/{chunk-CBK5CT6T.js → chunk-7BSOO3CY.js} +2 -2
- package/dist/cli/chunks/{chunk-ERN56H6S.js → chunk-7SNSI4VY.js} +1 -1
- package/dist/cli/chunks/{chunk-JKJOB65O.js → chunk-A4BVDYIL.js} +1 -1
- package/dist/cli/chunks/{chunk-MV55NXTD.js → chunk-AGCS5GSO.js} +2 -2
- package/dist/cli/chunks/{chunk-XIVVTYM2.js → chunk-AVHYJ3XP.js} +2 -2
- package/dist/cli/chunks/{chunk-KJBPB7P5.js → chunk-BE7ZHM34.js} +2 -2
- package/dist/cli/chunks/{chunk-GKSMRBHU.js → chunk-BHQ2DLJU.js} +1 -1
- package/dist/cli/chunks/{chunk-7XB3FCKM.js → chunk-BKHEQIRZ.js} +2 -2
- package/dist/cli/chunks/{chunk-G242G224.js → chunk-BSIWI4ES.js} +2 -2
- package/dist/cli/chunks/{chunk-NQS3BWS6.js → chunk-C7QLLMYI.js} +1 -1
- package/dist/cli/chunks/{chunk-XWIAZG3C.js → chunk-CMN7PU2H.js} +2 -2
- package/dist/cli/chunks/{chunk-4X3SWKBA.js → chunk-COTQ44YO.js} +2 -2
- package/dist/cli/chunks/{chunk-3J3RNJNX.js → chunk-CQER6IJ5.js} +1 -1
- package/dist/cli/chunks/{chunk-6KCSKGVY.js → chunk-CVPXHDQU.js} +1 -1
- package/dist/cli/chunks/{chunk-R6LHJ7ME.js → chunk-CVYPMGUM.js} +2 -2
- package/dist/cli/chunks/chunk-CXCMATZ6.js +3 -0
- package/dist/cli/chunks/{chunk-PYPS65P7.js → chunk-D75GLKEL.js} +2 -2
- package/dist/cli/chunks/chunk-DCDSN67A.js +2 -0
- package/dist/cli/chunks/{chunk-6RBTS3NF.js → chunk-DHKSPOUQ.js} +2 -2
- package/dist/cli/chunks/{chunk-JW74KRBC.js → chunk-DJDVD6RM.js} +2 -2
- package/dist/cli/chunks/{chunk-X33CWRDF.js → chunk-DNVRTJKB.js} +2 -2
- package/dist/cli/chunks/{chunk-BQ47GQPK.js → chunk-DS5IFRY6.js} +2 -2
- package/dist/cli/chunks/{chunk-AHMWD6JG.js → chunk-E7XIMOKW.js} +2 -2
- package/dist/cli/chunks/{chunk-SON6ZRH3.js → chunk-ECKHDHR2.js} +2 -2
- package/dist/cli/chunks/chunk-EPVPXHL7.js +2 -0
- package/dist/cli/chunks/{chunk-BP5T3OEV.js → chunk-ERYADKMZ.js} +4 -4
- package/dist/cli/chunks/{chunk-DUKE27HC.js → chunk-EUWG2JG4.js} +2 -2
- package/dist/cli/chunks/chunk-FAQ24UHB.js +29 -0
- package/dist/cli/chunks/{chunk-XG4F4XH4.js → chunk-FBBPRVNF.js} +2 -2
- package/dist/cli/chunks/{chunk-5PTAFGJT.js → chunk-FBSBXCZS.js} +2 -2
- package/dist/cli/chunks/chunk-G2X3OLMN.js +153 -0
- package/dist/cli/chunks/{chunk-IXL5ZHWJ.js → chunk-GG7PMTHD.js} +1 -1
- package/dist/cli/chunks/{chunk-6BRQPHMZ.js → chunk-GN6OE3JT.js} +1 -1
- package/dist/cli/chunks/{chunk-SZAZQZWI.js → chunk-GPPTRKEM.js} +2 -2
- package/dist/cli/chunks/{chunk-LTQVUAPH.js → chunk-H2LHWZRE.js} +2 -2
- package/dist/cli/chunks/{chunk-WVXJ2QIG.js → chunk-HAQJFUAQ.js} +2 -2
- package/dist/cli/chunks/{chunk-C5CXL3JP.js → chunk-HD6W6PHV.js} +2 -2
- package/dist/cli/chunks/{chunk-K3WZICFA.js → chunk-HFZD5KLR.js} +1 -1
- package/dist/cli/chunks/{chunk-VCXI4XC4.js → chunk-HRUHHHVR.js} +2 -2
- package/dist/cli/chunks/{chunk-GV2QE5TO.js → chunk-HVT7RMGV.js} +1 -1
- package/dist/cli/chunks/chunk-HWQPMUSN.js +2 -0
- package/dist/cli/chunks/{chunk-4ATQP3PR.js → chunk-HZ5O7G2P.js} +1 -1
- package/dist/cli/chunks/{chunk-XHHWABJV.js → chunk-IHQGNDMX.js} +2 -2
- package/dist/cli/chunks/{chunk-UUBIQR6A.js → chunk-IJSROBM6.js} +18 -18
- package/dist/cli/chunks/{chunk-PS6UMZVK.js → chunk-IJZFJPHS.js} +2 -2
- package/dist/cli/chunks/{chunk-C4KLXFJP.js → chunk-IKB3M7OF.js} +1 -1
- package/dist/cli/chunks/{chunk-SJCKCSN3.js → chunk-INI3Q4CN.js} +1 -1
- package/dist/cli/chunks/{chunk-LYJHUNBK.js → chunk-IOWEBPXJ.js} +2 -2
- package/dist/cli/chunks/{chunk-HTZSRMHW.js → chunk-IQL6XRF5.js} +2 -2
- package/dist/cli/chunks/{chunk-DEKR3CTS.js → chunk-IRHXGCQR.js} +2 -2
- package/dist/cli/chunks/{chunk-TODNOP7C.js → chunk-J3QFJI2Y.js} +6 -6
- package/dist/cli/chunks/{chunk-OLZH5LRT.js → chunk-J6QRNQJF.js} +11 -11
- package/dist/cli/chunks/{chunk-HL2ANKN3.js → chunk-J7Q5TXFZ.js} +2 -2
- package/dist/cli/chunks/{chunk-6YVMX2TC.js → chunk-JHKKIJT2.js} +2 -2
- package/dist/cli/chunks/{chunk-K3XBQC3R.js → chunk-JI33PMPZ.js} +1 -1
- package/dist/cli/chunks/{chunk-74YG72NQ.js → chunk-JRIJM4LE.js} +3 -3
- package/dist/cli/chunks/{chunk-TDQWTSBS.js → chunk-JVWZAE2H.js} +2 -2
- package/dist/cli/chunks/{chunk-RDMRY7CT.js → chunk-K7WAI662.js} +1 -1
- package/dist/cli/chunks/{chunk-C4RTAVC6.js → chunk-KB34MTFZ.js} +2 -2
- package/dist/cli/chunks/{chunk-2CKERSMB.js → chunk-KPIPVSIP.js} +2 -2
- package/dist/cli/chunks/{chunk-LNX74WHQ.js → chunk-KR2TAAF6.js} +1 -1
- package/dist/cli/chunks/{chunk-73PBAWAF.js → chunk-KT2QCXO6.js} +2 -2
- package/dist/cli/chunks/{chunk-BBRROA3Z.js → chunk-KTORRIX3.js} +2 -2
- package/dist/cli/chunks/{chunk-GCHYOPRZ.js → chunk-LCWEQRZI.js} +2 -2
- package/dist/cli/chunks/{chunk-M4WMSCAE.js → chunk-LG5PPJT7.js} +1 -1
- package/dist/cli/chunks/{chunk-UAQZI6N4.js → chunk-LIF6UWHV.js} +2 -2
- package/dist/cli/chunks/chunk-LN7NKE3N.js +27 -0
- package/dist/cli/chunks/chunk-LOLSZG5J.js +2 -0
- package/dist/cli/chunks/{chunk-BLL2XU7A.js → chunk-LOMT4UC2.js} +2 -2
- package/dist/cli/chunks/chunk-LRKLATSH.js +2 -0
- package/dist/cli/chunks/{chunk-EKP2SC77.js → chunk-LRY6UIRI.js} +2 -2
- package/dist/cli/chunks/{chunk-JCZCJE6X.js → chunk-LV7UIK4Q.js} +2 -2
- package/dist/cli/chunks/{chunk-LVABQNRF.js → chunk-M2YI5YUR.js} +2 -2
- package/dist/cli/chunks/{chunk-RIRZHOS2.js → chunk-MCXW3DKE.js} +2 -2
- package/dist/cli/chunks/{chunk-ZSOMUTNL.js → chunk-MGZ6XZHU.js} +1 -1
- package/dist/cli/chunks/{chunk-H5DER3JY.js → chunk-MLMD3I75.js} +1 -1
- package/dist/cli/chunks/{chunk-UXIY4IAI.js → chunk-MVVVGQJ6.js} +2 -2
- package/dist/cli/chunks/{chunk-WUOOX7UG.js → chunk-ND72UDVH.js} +2 -2
- package/dist/cli/chunks/{chunk-AKZO6GGG.js → chunk-NE3LRUNC.js} +4 -4
- package/dist/cli/chunks/{chunk-O6EWL5DQ.js → chunk-NKUHMA4T.js} +2 -2
- package/dist/cli/chunks/{chunk-L32JNNKL.js → chunk-NQFDJ6BT.js} +1 -1
- package/dist/cli/chunks/{chunk-T66PPF4D.js → chunk-NZJVDOUN.js} +31 -31
- package/dist/cli/chunks/{chunk-EBTNMQSS.js → chunk-O7VJ3VKD.js} +2 -2
- package/dist/cli/chunks/{chunk-76P32JVU.js → chunk-OJIUIEI4.js} +1 -1
- package/dist/cli/chunks/chunk-OO2M2QUV.js +12 -0
- package/dist/cli/chunks/{chunk-CAOUV5GZ.js → chunk-ORQ2YBRR.js} +2 -2
- package/dist/cli/chunks/chunk-OWIQR6N2.js +4 -0
- package/dist/cli/chunks/chunk-OWIZBZLN.js +14 -0
- package/dist/cli/chunks/{chunk-J3FP5UGL.js → chunk-P3D7SEHW.js} +1 -1
- package/dist/cli/chunks/{chunk-3CYNZFKH.js → chunk-P4OB6WDJ.js} +1 -1
- package/dist/cli/chunks/{chunk-LHMQIZ6B.js → chunk-PCL5JRKN.js} +2 -2
- package/dist/cli/chunks/{chunk-KLTMOXIK.js → chunk-PIWGKGWP.js} +2 -2
- package/dist/cli/chunks/{chunk-VMAM46HQ.js → chunk-PK34KJH7.js} +2 -2
- package/dist/cli/chunks/chunk-POPSZDI2.js +65 -0
- package/dist/cli/chunks/{chunk-JUDUBQHA.js → chunk-Q6F3DYZN.js} +2 -2
- package/dist/cli/chunks/{chunk-Y2OX6KGN.js → chunk-QJSSUBO3.js} +2 -2
- package/dist/cli/chunks/{chunk-XM6ZVFM5.js → chunk-QN7HP2UW.js} +235 -173
- package/dist/cli/chunks/{chunk-T4GE7MPI.js → chunk-QSQNXBD2.js} +2 -2
- package/dist/cli/chunks/{chunk-5C62XMJR.js → chunk-QTQDX4TZ.js} +33 -33
- package/dist/cli/chunks/{chunk-DURD37JZ.js → chunk-R3KBOQ3O.js} +2 -2
- package/dist/cli/chunks/{chunk-LJMYRTJ7.js → chunk-REY52O7J.js} +1 -1
- package/dist/cli/chunks/{chunk-W5ZJG2OU.js → chunk-RKCN4B26.js} +2 -2
- package/dist/cli/chunks/chunk-S3DT5TPR.js +14 -0
- package/dist/cli/chunks/{chunk-4HKAD25N.js → chunk-S3TBOKAZ.js} +22 -22
- package/dist/cli/chunks/{chunk-2IIXCEMS.js → chunk-SAEECT23.js} +2 -2
- package/dist/cli/chunks/{chunk-LB2LGEDP.js → chunk-SAZ4PJBR.js} +2 -2
- package/dist/cli/chunks/{chunk-FOOW4JVS.js → chunk-SFITYZLV.js} +2 -2
- package/dist/cli/chunks/{chunk-2ZFLULL4.js → chunk-SRBCBVSI.js} +2 -2
- package/dist/cli/chunks/chunk-SUAZ5Z47.js +63 -0
- package/dist/cli/chunks/{chunk-RBKUU7WF.js → chunk-TDZ6N43D.js} +2 -2
- package/dist/cli/chunks/chunk-TIVKDIF7.js +2 -0
- package/dist/cli/chunks/{chunk-MPFPWJTH.js → chunk-TM75GAXG.js} +2 -2
- package/dist/cli/chunks/{chunk-UJABDXST.js → chunk-TWBZONKT.js} +2 -2
- package/dist/cli/chunks/{chunk-AOKKUB5F.js → chunk-U4S74IIZ.js} +1 -1
- package/dist/cli/chunks/{chunk-W62OOK7A.js → chunk-U5SMBJ6F.js} +2 -2
- package/dist/cli/chunks/{chunk-6LE362LZ.js → chunk-UHJVZEQA.js} +2 -2
- package/dist/cli/chunks/{chunk-T67R2MUN.js → chunk-UOVCTK5L.js} +2 -2
- package/dist/cli/chunks/{chunk-FTRSS64D.js → chunk-VDEKVIP5.js} +2 -2
- package/dist/cli/chunks/{chunk-BDKEAGQ2.js → chunk-VITV7AEC.js} +2 -2
- package/dist/cli/chunks/{chunk-BU4UQR36.js → chunk-VKREKVFI.js} +2 -2
- package/dist/cli/chunks/{chunk-BZULJMGH.js → chunk-VLTDW7XJ.js} +2 -2
- package/dist/cli/chunks/{chunk-UE2J6MA5.js → chunk-VQFV2IPV.js} +1 -1
- package/dist/cli/chunks/{chunk-TZIHDJZD.js → chunk-VYPVU3JF.js} +2 -2
- package/dist/cli/chunks/{chunk-UORB2QDU.js → chunk-WAOEQA3W.js} +2 -2
- package/dist/cli/chunks/{chunk-GQABPCQE.js → chunk-WBDWHHKP.js} +2 -2
- package/dist/cli/chunks/{chunk-GGQGCT4Y.js → chunk-WX4PO65Q.js} +2 -2
- package/dist/cli/chunks/chunk-X2DWHGCC.js +6 -0
- package/dist/cli/chunks/{chunk-337Z52QM.js → chunk-X5QD76IU.js} +2 -2
- package/dist/cli/chunks/{chunk-E56PVVWC.js → chunk-XBTGEYED.js} +2 -2
- package/dist/cli/chunks/{chunk-5AFVEWMT.js → chunk-XEMCHGAJ.js} +2 -2
- package/dist/cli/chunks/{chunk-E3MRDIZF.js → chunk-XEYFZLIT.js} +1 -1
- package/dist/cli/chunks/{chunk-KCQNFBBR.js → chunk-XFTX3KLE.js} +1 -1
- package/dist/cli/chunks/{chunk-QFGYH6HD.js → chunk-XPTCQKVE.js} +1 -1
- package/dist/cli/chunks/{chunk-PXATBHWN.js → chunk-YAJOBZE5.js} +2 -2
- package/dist/cli/chunks/{chunk-27HE2BHC.js → chunk-YCVLKU6H.js} +2 -2
- package/dist/cli/chunks/{chunk-ZIPAB5J6.js → chunk-YD2C6EPN.js} +2 -2
- package/dist/cli/chunks/{chunk-5G4UFTV4.js → chunk-YKRLUTK7.js} +2 -2
- package/dist/cli/chunks/{chunk-YUS6TWAL.js → chunk-YMUY3TES.js} +6 -6
- package/dist/cli/chunks/chunk-YR5QBUHZ.js +6 -0
- package/dist/cli/chunks/{chunk-XH4JMX5O.js → chunk-Z7SKUC6P.js} +1 -1
- package/dist/cli/chunks/{chunk-EFUJDMNC.js → chunk-ZAQMRFBB.js} +2 -2
- package/dist/cli/chunks/{chunk-22UKJGGN.js → chunk-ZC3KDNJW.js} +3 -3
- package/dist/cli/chunks/{chunk-AP2W7Z3A.js → chunk-ZGV7L4MW.js} +1 -1
- package/dist/cli/chunks/{chunk-W27AJ5B4.js → chunk-ZN35XSKF.js} +2 -2
- package/dist/cli/chunks/{chunk-M4CJCPCQ.js → chunk-ZNXM6WVL.js} +2 -2
- package/dist/cli/chunks/{chunk-5I7357KS.js → chunk-ZP5AWQRO.js} +2 -2
- package/dist/cli/chunks/{chunk-OQG3UQQ7.js → chunk-ZTP3DQ5M.js} +1 -1
- package/dist/cli/chunks/{chunk-BFQTLF5X.js → chunk-ZVMSSCTH.js} +2 -2
- package/dist/cli/chunks/chunk-ZWUF27P4.js +2 -0
- package/dist/cli/chunks/{ci-UCUJOSBW.js → ci-3RTTTS2D.js} +2 -2
- package/dist/cli/chunks/{ci-config-2XILD3XG.js → ci-config-XRUR3I4K.js} +2 -2
- package/dist/cli/chunks/{ci-output-BL6KWOHW.js → ci-output-E5IAMU2U.js} +2 -2
- package/dist/cli/chunks/{circuit-breaker-5XLIOXE5.js → circuit-breaker-SHR2P44P.js} +2 -2
- package/dist/cli/chunks/{claude-flow-setup-4IMP6ACS.js → claude-flow-setup-ZDDILFMF.js} +2 -2
- package/dist/cli/chunks/client-NO5FOWT4.js +2 -0
- package/dist/cli/chunks/{cline-installer-RYLHCDK7.js → cline-installer-BGYVUM6G.js} +2 -2
- package/dist/cli/chunks/{code-WY3GJXHX.js → code-PJ4MC3MC.js} +4 -3
- package/dist/cli/chunks/{code-index-extractor-Y4MZBZCW.js → code-index-extractor-IW2P22YG.js} +2 -2
- package/dist/cli/chunks/{codex-installer-SCJ3T3DX.js → codex-installer-A7WZ6OGL.js} +2 -2
- package/dist/cli/chunks/{completions-CN2DXQFU.js → completions-KS23WD5J.js} +2 -2
- package/dist/cli/chunks/{complexity-analyzer-7MDPPIBH.js → complexity-analyzer-Q7GLSR2E.js} +2 -2
- package/dist/cli/chunks/{continuedev-installer-GCEJRK34.js → continuedev-installer-SK55BFW2.js} +2 -2
- package/dist/cli/chunks/copilot-installer-3N5J3WTM.js +3 -0
- package/dist/cli/chunks/core-handlers-JNAZPXE2.js +2 -0
- package/dist/cli/chunks/{cost-tracker-VO5MFWR6.js → cost-tracker-NENVSO4A.js} +2 -2
- package/dist/cli/chunks/{coverage-LYFQYNH6.js → coverage-5L7UQWDH.js} +3 -3
- package/dist/cli/chunks/cross-domain-router-HEBM767Z.js +2 -0
- package/dist/cli/chunks/{cursor-installer-KP4HA7TV.js → cursor-installer-XXBO2ZE6.js} +2 -2
- package/dist/cli/chunks/{daemon-7RC7TS57.js → daemon-CDCQU3LR.js} +3 -3
- package/dist/cli/chunks/daemon-JEBJGEUK.js +18 -0
- package/dist/cli/chunks/{dag-attention-scheduler-NKA44RSR.js → dag-attention-scheduler-HOMMF7FA.js} +2 -2
- package/dist/cli/chunks/{detect-CMYAJWYF.js → detect-FXCOUG6X.js} +2 -2
- package/dist/cli/chunks/{dist-node-EN3PYEGW.js → dist-node-GXQ7FMTY.js} +2 -2
- package/dist/cli/chunks/{domain-handler-EXSZCX7A.js → domain-handler-TI3JBAPC.js} +2 -2
- package/dist/cli/chunks/{domain-plugins-HCQFSNL7.js → domain-plugins-R7LTUM32.js} +2 -2
- package/dist/cli/chunks/{domain-transfer-3LGSNTPO.js → domain-transfer-LBIAFHIQ.js} +2 -2
- package/dist/cli/chunks/dream-GQDCEJMS.js +2 -0
- package/dist/cli/chunks/embed-and-insert-pattern-33KLHDD5.js +3 -0
- package/dist/cli/chunks/embedding-space-HHLWTBF5.js +2 -0
- package/dist/cli/chunks/{eval-OQELIWJK.js → eval-KDOZMAXJ.js} +2 -2
- package/dist/cli/chunks/experience-capture-middleware-X45PECQN.js +40 -0
- package/dist/cli/chunks/{fast-paths-UV4NDEWM.js → fast-paths-462V6UUB.js} +2 -2
- package/dist/cli/chunks/{feature-flags-H7H33B6C.js → feature-flags-G66OT3AS.js} +2 -2
- package/dist/cli/chunks/{feature-flags-CKTYX67J.js → feature-flags-NIRQ4YDM.js} +2 -2
- package/dist/cli/chunks/file-discovery-33USPLB5.js +2 -0
- package/dist/cli/chunks/{fleet-ZJBCAKRG.js → fleet-PXWGB7CU.js} +3 -3
- package/dist/cli/chunks/{gnn-wrapper-RUE2QZRG.js → gnn-wrapper-7MUW3M5M.js} +2 -2
- package/dist/cli/chunks/{heartbeat-handler-XRV327M7.js → heartbeat-handler-5237PB35.js} +4 -4
- package/dist/cli/chunks/heartbeat-scheduler-LIXLC5IH.js +2 -0
- package/dist/cli/chunks/hnsw-adapter-62D5UH27.js +2 -0
- package/dist/cli/chunks/hnsw-index-GSGUMQQC.js +2 -0
- package/dist/cli/chunks/{hnsw-legacy-bridge-UJID6ZZ4.js → hnsw-legacy-bridge-OSQPW7JP.js} +2 -2
- package/dist/cli/chunks/{hnswlib-node-WS43R4AX.js → hnswlib-node-GX6WG2GB.js} +2 -2
- package/dist/cli/chunks/{hooks-YZNJKXAJ.js → hooks-GUWHL7VC.js} +23 -22
- package/dist/cli/chunks/hybrid-backend-FRWP4BOY.js +2 -0
- package/dist/cli/chunks/{hypergraph-engine-XQJSIMTS.js → hypergraph-engine-SRWLLCU3.js} +2 -2
- package/dist/cli/chunks/{hypergraph-handler-ZD2NYXMR.js → hypergraph-handler-AVOPRHHO.js} +3 -3
- package/dist/cli/chunks/impact-analyzer-7KF3AQXV.js +2 -0
- package/dist/cli/chunks/{init-guard-DSRUAVRT.js → init-guard-P4N6EVZS.js} +2 -2
- package/dist/cli/chunks/{init-handler-RJU5QMAP.js → init-handler-LRGWOJMD.js} +6 -6
- package/dist/cli/chunks/init-wizard-XWWAXY25.js +2 -0
- package/dist/cli/chunks/kernel-ZEJPNDBW.js +2 -0
- package/dist/cli/chunks/{kilocode-installer-BCPOCVMC.js → kilocode-installer-7R2EPOQ6.js} +2 -2
- package/dist/cli/chunks/{kiro-installer-GFCWCB2S.js → kiro-installer-QNM7DPOB.js} +2 -2
- package/dist/cli/chunks/knowledge-graph-RRZQS7KY.js +2 -0
- package/dist/cli/chunks/{learning-FZTD72CF.js → learning-7OIZBPXZ.js} +3 -3
- package/dist/cli/chunks/{llm-router-GJVKGRJL.js → llm-router-SIDXES23.js} +4 -4
- package/dist/cli/chunks/llm-router-service-3OSW67LC.js +2 -0
- package/dist/cli/chunks/{load-YKTPOYBE.js → load-EI2E2C3S.js} +2 -2
- package/dist/cli/chunks/load-test-7TRIH2WJ.js +2 -0
- package/dist/cli/chunks/{mcp-LT6R2IKS.js → mcp-IOE5WOCS.js} +2 -2
- package/dist/cli/chunks/{memory-4HKKOLRY.js → memory-DLYGJAP7.js} +5 -5
- package/dist/cli/chunks/memory-backend-G7ZW6Q2B.js +2 -0
- package/dist/cli/chunks/memory-handlers-TPF3KCO5.js +2 -0
- package/dist/cli/chunks/{multi-model-executor-2YPM2WTK.js → multi-model-executor-WHH4YCHM.js} +2 -2
- package/dist/cli/chunks/{opencode-installer-WBAJMH5K.js → opencode-installer-63FDZAMS.js} +2 -2
- package/dist/cli/chunks/{orchestrator-5W5WVMVJ.js → orchestrator-3LA776KK.js} +5 -5
- package/dist/cli/chunks/pattern-null-store-OU3ZC3NR.js +2 -0
- package/dist/cli/chunks/{pattern-usage-recorder-GXRMNPAZ.js → pattern-usage-recorder-NW54QUGI.js} +2 -2
- package/dist/cli/chunks/{pipeline-2NA4DRDA.js → pipeline-P3TYX6J6.js} +2 -2
- package/dist/cli/chunks/{platform-BGERNQ5V.js → platform-FNA2WLI6.js} +2 -2
- package/dist/cli/chunks/{plugin-L4EPVENR.js → plugin-NJS7BC2S.js} +2 -2
- package/dist/cli/chunks/{prime-radiant-advanced-wasm-RTQRTPTM.js → prime-radiant-advanced-wasm-NIAVL2OT.js} +2 -2
- package/dist/cli/chunks/project-root-GMOFJEKD.js +2 -0
- package/dist/cli/chunks/protocol-executor-AD345XRO.js +2 -0
- package/dist/cli/chunks/{protocol-handler-SYQXM6JK.js → protocol-handler-JU5C4JHY.js} +2 -2
- package/dist/cli/chunks/{prove-5O7GPJCU.js → prove-35VOSLYP.js} +2 -2
- package/dist/cli/chunks/qe-reasoning-bank-NLTP26RC.js +2 -0
- package/dist/cli/chunks/{quality-KIIDHGNF.js → quality-ET74X7HN.js} +2 -2
- package/dist/cli/chunks/{quality-gate-H65VECD3.js → quality-gate-FEDQISNB.js} +3 -3
- package/dist/cli/chunks/queen-coordinator-2TB4FWS6.js +2 -0
- package/dist/cli/chunks/real-embeddings-II6CXTCI.js +2 -0
- package/dist/cli/chunks/{ref-validation-CSBJOMZM.js → ref-validation-DTBPYCEB.js} +2 -2
- package/dist/cli/chunks/{roocode-installer-G7OVYXEN.js → roocode-installer-LYQEMR4J.js} +2 -2
- package/dist/cli/chunks/router-PLM3MWME.js +2 -0
- package/dist/cli/chunks/routing-feedback-I7VOX2HU.js +2 -0
- package/dist/cli/chunks/{routing-handler-ZNZPPI5Y.js → routing-handler-DJOJFPII.js} +2 -2
- package/dist/cli/chunks/{ruvector-commands-C6IG3OY3.js → ruvector-commands-VXYGJDPW.js} +2 -2
- package/dist/cli/chunks/rvf-dual-writer-GQZHFWO2.js +2 -0
- package/dist/cli/chunks/rvf-migration-adapter-3TVKBCAM.js +2 -0
- package/dist/cli/chunks/rvf-migration-coordinator-XUHKLMT6.js +2 -0
- package/dist/cli/chunks/rvf-native-adapter-5GUTYOWS.js +2 -0
- package/dist/cli/chunks/{rvf-store-integrity-3G6LFLT3.js → rvf-store-integrity-GA2ZYOEG.js} +2 -2
- package/dist/cli/chunks/safe-db-RZPQGLGQ.js +2 -0
- package/dist/cli/chunks/schedule-G7JMQDUX.js +2 -0
- package/dist/cli/chunks/scheduler-4SEGPCKD.js +2 -0
- package/dist/cli/chunks/{security-A3IMVLFM.js → security-MM6YOECX.js} +3 -3
- package/dist/cli/chunks/{shared-rvf-adapter-VHWQ6US5.js → shared-rvf-adapter-6AHPA3V5.js} +2 -2
- package/dist/cli/chunks/{shared-rvf-dual-writer-JB3QS7IG.js → shared-rvf-dual-writer-EYAVY2GZ.js} +2 -2
- package/dist/cli/chunks/sqlite-persistence-IVE4SQXR.js +2 -0
- package/dist/cli/chunks/{standalone-memory-DDNXCSBD.js → standalone-memory-A3PLB4CZ.js} +2 -2
- package/dist/cli/chunks/{status-handler-2HK7XPEK.js → status-handler-OSSFAP4Z.js} +2 -2
- package/dist/cli/chunks/{structural-health-DSJVLEPV.js → structural-health-PGY5XUNO.js} +2 -2
- package/dist/cli/chunks/{sync-NTUR53PI.js → sync-CWEHYGNN.js} +2 -2
- package/dist/cli/chunks/sync-PM6D7EQF.js +2 -0
- package/dist/cli/chunks/task-handler-LHMQ75W4.js +64 -0
- package/dist/cli/chunks/{task-handlers-VJR6EHRZ.js → task-handlers-S2TX5FTR.js} +4 -4
- package/dist/cli/chunks/test-4EGZZ6NJ.js +34 -0
- package/dist/cli/chunks/test-runner-process-72YACW6M.js +2 -0
- package/dist/cli/chunks/{test-scheduling-Q6QEEOS6.js → test-scheduling-YJQHH3XE.js} +3 -3
- package/dist/cli/chunks/token-bootstrap-DJNETMVW.js +2 -0
- package/dist/cli/chunks/{token-usage-YEEFWSSI.js → token-usage-WPNOJR6H.js} +2 -2
- package/dist/cli/chunks/{transformers-BZCHJJJT.js → transformers-4MRPXCPU.js} +2 -2
- package/dist/cli/chunks/tree-sitter-wasm-parser-UVWSDXFR.js +2 -0
- package/dist/cli/chunks/{types-4AOKZYOX.js → types-6P5FB4EB.js} +2 -2
- package/dist/cli/chunks/unified-memory-2VMGSGQL.js +2 -0
- package/dist/cli/chunks/unified-memory-hnsw-3KULVD3N.js +2 -0
- package/dist/cli/chunks/unified-persistence-QCSLU2SV.js +2 -0
- package/dist/cli/chunks/{upgrade-2MWW6BT2.js → upgrade-4ICTN63Y.js} +2 -2
- package/dist/cli/chunks/{validate-PAEV3GT5.js → validate-HQF5GZ7L.js} +2 -2
- package/dist/cli/chunks/{validate-swarm-ZIXACK5K.js → validate-swarm-45JYG7VW.js} +2 -2
- package/dist/cli/chunks/visual-security-ZYP2KPH7.js +2 -0
- package/dist/cli/chunks/{web-tree-sitter-VLTXZFAB.js → web-tree-sitter-UOTWZLNH.js} +2 -2
- package/dist/cli/chunks/{windsurf-installer-VELMLOZF.js → windsurf-installer-WDWSBXGN.js} +2 -2
- package/dist/cli/chunks/witness-chain-5QRT7EMX.js +2 -0
- package/dist/cli/chunks/witness-chain-DOYMNPC7.js +2 -0
- package/dist/cli/chunks/witness-chain-repair-CUF2AFQB.js +2 -0
- package/dist/cli/chunks/{witness-chain-verifier-MIDWD4JS.js → witness-chain-verifier-JB42X62J.js} +2 -2
- package/dist/cli/chunks/{witness-key-manager-OSVCWOB2.js → witness-key-manager-LXXO6L2G.js} +2 -2
- package/dist/cli/chunks/{workflow-MK7A7QCX.js → workflow-6ARK47NF.js} +4 -4
- package/dist/cli/chunks/workflow-orchestrator-RYDDWIXN.js +2 -0
- package/dist/cli/chunks/wrappers-CYQBOMPL.js +2 -0
- package/dist/cli/commands/code.js +4 -0
- package/dist/cli/commands/hooks-handlers/hooks-dream-learning.js +10 -2
- package/dist/cli/commands/test.js +26 -4
- package/dist/cli/handlers/task-handler.d.ts +5 -0
- package/dist/cli/handlers/task-handler.js +21 -1
- package/dist/cli/utils/task-result.d.ts +11 -0
- package/dist/cli/utils/task-result.js +39 -0
- package/dist/coordination/handlers/test-execution-handlers.js +137 -59
- package/dist/coordination/mincut/mincut-persistence.js +29 -25
- package/dist/domains/code-intelligence/coordinator.d.ts +4 -0
- package/dist/domains/code-intelligence/coordinator.js +46 -13
- package/dist/domains/code-intelligence/interfaces.d.ts +10 -1
- package/dist/domains/code-intelligence/services/semantic-analyzer.d.ts +37 -7
- package/dist/domains/code-intelligence/services/semantic-analyzer.js +135 -62
- package/dist/domains/code-intelligence/services/text-relevance.d.ts +32 -0
- package/dist/domains/code-intelligence/services/text-relevance.js +63 -0
- package/dist/domains/learning-optimization/services/learning-coordinator.js +1 -1
- package/dist/domains/quality-assessment/coordinator.js +2 -1
- package/dist/domains/test-execution/coordinator.d.ts +3 -1
- package/dist/domains/test-execution/coordinator.js +21 -7
- package/dist/domains/test-execution/interfaces.d.ts +17 -0
- package/dist/domains/test-execution/plugin.js +8 -2
- package/dist/domains/test-execution/services/flaky-detector.d.ts +9 -1
- package/dist/domains/test-execution/services/flaky-detector.js +26 -8
- package/dist/domains/test-execution/services/retry-handler.d.ts +9 -1
- package/dist/domains/test-execution/services/retry-handler.js +56 -12
- package/dist/domains/test-execution/services/runner-test-cases.d.ts +2 -0
- package/dist/domains/test-execution/services/runner-test-cases.js +7 -3
- package/dist/domains/test-execution/services/test-executor.d.ts +6 -1
- package/dist/domains/test-execution/services/test-executor.js +97 -14
- package/dist/domains/visual-accessibility/coordinator.d.ts +15 -7
- package/dist/domains/visual-accessibility/coordinator.js +15 -7
- package/dist/domains/visual-accessibility/interfaces.d.ts +27 -3
- package/dist/domains/visual-accessibility/services/accessibility-contrast.d.ts +39 -0
- package/dist/domains/visual-accessibility/services/accessibility-contrast.js +93 -0
- package/dist/domains/visual-accessibility/services/accessibility-tester-browser.d.ts +18 -3
- package/dist/domains/visual-accessibility/services/accessibility-tester-browser.js +50 -40
- package/dist/domains/visual-accessibility/services/accessibility-tester-checks.d.ts +27 -0
- package/dist/domains/visual-accessibility/services/accessibility-tester-checks.js +137 -0
- package/dist/domains/visual-accessibility/services/accessibility-tester.d.ts +5 -0
- package/dist/domains/visual-accessibility/services/accessibility-tester.js +43 -24
- package/dist/domains/visual-accessibility/services/browser-swarm-coordinator.d.ts +2 -3
- package/dist/domains/visual-accessibility/services/browser-swarm-coordinator.js +8 -14
- package/dist/feedback/coverage-learner.js +13 -9
- package/dist/feedback/test-outcome-tracker.js +13 -9
- package/dist/governance/witness-chain.d.ts +5 -0
- package/dist/governance/witness-chain.js +22 -6
- package/dist/init/copilot-installer.d.ts +6 -0
- package/dist/init/copilot-installer.js +37 -17
- package/dist/init/platform-config-generator.d.ts +10 -0
- package/dist/init/platform-config-generator.js +26 -1
- package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.d.ts +22 -0
- package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.js +115 -45
- package/dist/integrations/agentic-flow/reasoning-bank/pattern-evolution.d.ts +6 -0
- package/dist/integrations/agentic-flow/reasoning-bank/pattern-evolution.js +51 -33
- package/dist/integrations/agentic-flow/reasoning-bank/trajectory-tracker.js +17 -9
- package/dist/integrations/embeddings/cache/EmbeddingCache.d.ts +8 -0
- package/dist/integrations/embeddings/cache/EmbeddingCache.js +24 -10
- package/dist/integrations/ruvector/delta-tracker.d.ts +11 -0
- package/dist/integrations/ruvector/delta-tracker.js +16 -0
- package/dist/integrations/ruvector/sona-persistence.d.ts +10 -0
- package/dist/integrations/ruvector/sona-persistence.js +49 -24
- package/dist/kernel/unified-memory.d.ts +32 -0
- package/dist/kernel/unified-memory.js +76 -8
- package/dist/learning/aqe-learning-engine.js +1 -1
- package/dist/learning/embed-and-insert-pattern.js +4 -2
- package/dist/learning/embedder-endpoint-client.d.ts +76 -0
- package/dist/learning/embedder-endpoint-client.js +201 -13
- package/dist/learning/embedding-space-registry.d.ts +75 -0
- package/dist/learning/embedding-space-registry.js +142 -0
- package/dist/learning/embedding-space.d.ts +12 -0
- package/dist/learning/embedding-space.js +17 -0
- package/dist/learning/experience-capture-middleware.js +25 -13
- package/dist/learning/experience-capture.js +1 -1
- package/dist/learning/experience-consolidation.d.ts +18 -0
- package/dist/learning/experience-consolidation.js +55 -8
- package/dist/learning/experience-space-verification.d.ts +71 -0
- package/dist/learning/experience-space-verification.js +147 -0
- package/dist/learning/pattern-lifecycle.d.ts +40 -4
- package/dist/learning/pattern-lifecycle.js +153 -76
- package/dist/learning/pattern-null-store.d.ts +5 -0
- package/dist/learning/pattern-null-store.js +8 -0
- package/dist/learning/pattern-promotion.js +6 -3
- package/dist/learning/pattern-store.d.ts +6 -0
- package/dist/learning/pattern-store.js +19 -6
- package/dist/learning/qe-reasoning-bank.js +2 -2
- package/dist/learning/real-embeddings.d.ts +3 -0
- package/dist/learning/real-embeddings.js +52 -12
- package/dist/learning/real-qe-reasoning-bank.d.ts +5 -0
- package/dist/learning/real-qe-reasoning-bank.js +77 -47
- package/dist/learning/rvf-pattern-store.js +6 -2
- package/dist/learning/sqlite-persistence.d.ts +6 -0
- package/dist/learning/sqlite-persistence.js +10 -0
- package/dist/mcp/bundle.js +699 -619
- package/dist/mcp/entry.js +4 -0
- package/dist/mcp/handlers/domain-handler-configs.js +2 -0
- package/dist/mcp/handlers/trajectory-judge.js +1 -1
- package/dist/mcp/protocol-server.js +1 -0
- package/dist/mcp/tools/visual-accessibility/index.js +8 -2
- package/dist/mcp/types.d.ts +6 -0
- package/dist/optimization/session-cache.d.ts +17 -1
- package/dist/optimization/session-cache.js +40 -36
- package/dist/planning/goap-planner.d.ts +6 -0
- package/dist/planning/goap-planner.js +35 -19
- package/dist/planning/plan-executor.js +24 -15
- package/dist/routing/co-execution-repository.js +12 -9
- package/dist/routing/routing-feedback.d.ts +8 -0
- package/dist/routing/routing-feedback.js +46 -24
- package/dist/routing/routing-outcomes-migration.js +7 -2
- package/dist/shared/embeddings/index.d.ts +2 -2
- package/dist/shared/embeddings/index.js +1 -1
- package/dist/shared/embeddings/nomic-embedder.d.ts +8 -2
- package/dist/shared/embeddings/nomic-embedder.js +19 -11
- package/dist/shared/embeddings/ollama-client.d.ts +28 -2
- package/dist/shared/embeddings/ollama-client.js +84 -22
- package/dist/shared/embeddings/types.d.ts +15 -0
- package/dist/shared/embeddings/types.js +4 -0
- package/dist/shared/llm/spend-ledger.d.ts +9 -0
- package/dist/shared/llm/spend-ledger.js +64 -39
- package/dist/shared/pytest-junit-report.d.ts +93 -0
- package/dist/shared/pytest-junit-report.js +241 -0
- package/dist/shared/sqlite-lock-wait.d.ts +27 -0
- package/dist/shared/sqlite-lock-wait.js +37 -0
- package/dist/shared/sqlite-write-queue.d.ts +28 -0
- package/dist/shared/sqlite-write-queue.js +38 -0
- package/dist/shared/test-runner-project.d.ts +119 -0
- package/dist/shared/test-runner-project.js +301 -0
- package/dist/skills/security-visual-testing/index.d.ts +3 -1
- package/dist/skills/security-visual-testing/index.js +49 -35
- package/dist/skills/security-visual-testing/types.d.ts +19 -3
- package/dist/workers/workers/heartbeat-scheduler.js +5 -5
- package/dist/workers/workers/learning-consolidation.js +8 -7
- package/package.json +1 -1
- package/dist/cli/chunks/adapter-QU6INSKP.js +0 -2
- package/dist/cli/chunks/aqe-learning-engine-PAJPENJD.js +0 -2
- package/dist/cli/chunks/base-OTGSN6IC.js +0 -2
- package/dist/cli/chunks/browser-workflow-WLZGR6SB.js +0 -2
- package/dist/cli/chunks/chunk-2LUTPMBO.js +0 -21
- package/dist/cli/chunks/chunk-3HVFIITW.js +0 -2
- package/dist/cli/chunks/chunk-4D4CWP72.js +0 -2
- package/dist/cli/chunks/chunk-5KA5TVPR.js +0 -6
- package/dist/cli/chunks/chunk-6NBRMD25.js +0 -13
- package/dist/cli/chunks/chunk-7O45RQHF.js +0 -153
- package/dist/cli/chunks/chunk-EMSZVUYA.js +0 -29
- package/dist/cli/chunks/chunk-G6RDCCFV.js +0 -4
- package/dist/cli/chunks/chunk-HH4ED4F7.js +0 -744
- package/dist/cli/chunks/chunk-Q6I4SIUU.js +0 -65
- package/dist/cli/chunks/chunk-QGBGSQ2E.js +0 -14
- package/dist/cli/chunks/chunk-QRKTBSZT.js +0 -27
- package/dist/cli/chunks/chunk-SHRI7TKJ.js +0 -62
- package/dist/cli/chunks/chunk-TX2CHQD7.js +0 -2
- package/dist/cli/chunks/chunk-UGYM4U44.js +0 -2
- package/dist/cli/chunks/chunk-VY4U6DPO.js +0 -12
- package/dist/cli/chunks/chunk-WNTA4YKE.js +0 -14
- package/dist/cli/chunks/chunk-XHLYGXYE.js +0 -2
- package/dist/cli/chunks/client-KKRNPX4F.js +0 -2
- package/dist/cli/chunks/copilot-installer-BHPDSELY.js +0 -3
- package/dist/cli/chunks/core-handlers-47MPMED7.js +0 -2
- package/dist/cli/chunks/cross-domain-router-U6MBFHEC.js +0 -2
- package/dist/cli/chunks/daemon-AXLVPKVO.js +0 -18
- package/dist/cli/chunks/dream-76L6EEN7.js +0 -2
- package/dist/cli/chunks/embed-and-insert-pattern-B6MNHICW.js +0 -3
- package/dist/cli/chunks/experience-capture-middleware-SUFILYPW.js +0 -40
- package/dist/cli/chunks/file-discovery-VSFKZ3LJ.js +0 -2
- package/dist/cli/chunks/heartbeat-scheduler-NIK3KKEH.js +0 -2
- package/dist/cli/chunks/hnsw-adapter-WJG7LUJJ.js +0 -2
- package/dist/cli/chunks/hnsw-index-D6PRI5HC.js +0 -2
- package/dist/cli/chunks/hybrid-backend-RIUR3I7F.js +0 -2
- package/dist/cli/chunks/impact-analyzer-C36YYTJ5.js +0 -2
- package/dist/cli/chunks/init-wizard-JCKNGIGT.js +0 -2
- package/dist/cli/chunks/kernel-F7ILJTYD.js +0 -2
- package/dist/cli/chunks/knowledge-graph-VTXDBHB2.js +0 -2
- package/dist/cli/chunks/llm-router-service-TNOWQINA.js +0 -2
- package/dist/cli/chunks/load-test-FPVBK2EV.js +0 -2
- package/dist/cli/chunks/memory-backend-2QE7O67A.js +0 -2
- package/dist/cli/chunks/memory-handlers-X4CMVBXB.js +0 -2
- package/dist/cli/chunks/pattern-null-store-UI35ORHW.js +0 -2
- package/dist/cli/chunks/project-root-S7WDFTMU.js +0 -2
- package/dist/cli/chunks/protocol-executor-OPANXQVB.js +0 -2
- package/dist/cli/chunks/qe-reasoning-bank-3OTF4DYQ.js +0 -2
- package/dist/cli/chunks/queen-coordinator-WTYH4TAN.js +0 -2
- package/dist/cli/chunks/real-embeddings-DYIOLKQ3.js +0 -2
- package/dist/cli/chunks/router-DBBW4NC2.js +0 -2
- package/dist/cli/chunks/routing-feedback-W35QHCL4.js +0 -2
- package/dist/cli/chunks/rvf-dual-writer-X3NSL25Z.js +0 -2
- package/dist/cli/chunks/rvf-migration-adapter-TZR7GDOK.js +0 -2
- package/dist/cli/chunks/rvf-migration-coordinator-4ATTHGHD.js +0 -2
- package/dist/cli/chunks/rvf-native-adapter-HD25ZYV5.js +0 -2
- package/dist/cli/chunks/safe-db-ZS2QKANY.js +0 -2
- package/dist/cli/chunks/schedule-ZH6VNA32.js +0 -2
- package/dist/cli/chunks/scheduler-T6CD74B6.js +0 -2
- package/dist/cli/chunks/sqlite-persistence-47WU5EKZ.js +0 -2
- package/dist/cli/chunks/sync-3MUV6S5E.js +0 -2
- package/dist/cli/chunks/task-handler-74MZN2EO.js +0 -62
- package/dist/cli/chunks/test-O6FK3FVF.js +0 -34
- package/dist/cli/chunks/test-runner-process-2NPW3UDQ.js +0 -2
- package/dist/cli/chunks/token-bootstrap-TTRCECLP.js +0 -2
- package/dist/cli/chunks/tree-sitter-wasm-parser-RZAND65G.js +0 -2
- package/dist/cli/chunks/unified-memory-FZ5K2C7W.js +0 -2
- package/dist/cli/chunks/unified-memory-hnsw-VREWX56M.js +0 -2
- package/dist/cli/chunks/unified-persistence-YZGMKX6B.js +0 -2
- package/dist/cli/chunks/visual-security-GXGSFBVA.js +0 -2
- package/dist/cli/chunks/witness-chain-MRJKVCOW.js +0 -2
- package/dist/cli/chunks/witness-chain-WWHJKITG.js +0 -2
- package/dist/cli/chunks/witness-chain-repair-5SAXPETG.js +0 -2
- package/dist/cli/chunks/workflow-orchestrator-SG7DV72E.js +0 -2
- package/dist/cli/chunks/wrappers-5QFMCKXL.js +0 -2
|
@@ -17,10 +17,12 @@ import { secureRandom, secureRandomInt } from '../../../shared/utils/crypto-rand
|
|
|
17
17
|
import { writeTestRunEvidence } from '../../quality-assessment/quality-evidence.js';
|
|
18
18
|
import { istanbulLineHits } from '../../../coordination/handlers/handler-utils.js';
|
|
19
19
|
import { fileCoverageKey, projectFileCoverageKeys } from '../../coverage-analysis/collected-metrics.js';
|
|
20
|
-
import { mergeTestCases, redactFailedTests, redactFailureText, testCasesFromRunnerReport } from './runner-test-cases.js';
|
|
20
|
+
import { mergeTestCases, redactFailedTests, redactFailureText, testCaseFailureMessage, testCasesFromRunnerReport } from './runner-test-cases.js';
|
|
21
21
|
import { capDiagnostics, getTestRunnerExecutionError, TestRunnerExecutionError } from '../../../shared/test-runner-verdict.js';
|
|
22
22
|
import { createVitestJsonReport } from '../../../shared/vitest-json-report.js';
|
|
23
|
+
import { createPytestJunitReport, isPythonTestFile, pytestCommand, pytestRunFromReport, PYTEST_ENV } from '../../../shared/pytest-junit-report.js';
|
|
23
24
|
import { jestExactPathPattern, runnerFilePath } from '../../../shared/test-runner-args.js';
|
|
25
|
+
import { groupByRunnerProject, runnerFrameworkFor } from '../../../shared/test-runner-project.js';
|
|
24
26
|
import { getClaudeModelForTier } from '../../../shared/llm/model-registry.js';
|
|
25
27
|
import { terminateTestRunner, trackTestRunnerExit } from '../../../shared/test-runner-process.js';
|
|
26
28
|
const DEFAULT_CONFIG = {
|
|
@@ -314,7 +316,7 @@ Provide:
|
|
|
314
316
|
return ok(undefined);
|
|
315
317
|
}
|
|
316
318
|
async runTests(request) {
|
|
317
|
-
const { testFiles, framework, timeout = 30000 } = request;
|
|
319
|
+
const { testFiles, framework, timeout = 30000, projectRoot, frameworkFromConfig } = request;
|
|
318
320
|
const failedTests = [];
|
|
319
321
|
const coverages = [];
|
|
320
322
|
const allFileCoverages = [];
|
|
@@ -323,7 +325,7 @@ Provide:
|
|
|
323
325
|
let failed = 0;
|
|
324
326
|
let skipped = 0;
|
|
325
327
|
for (const file of testFiles) {
|
|
326
|
-
const result = await this.executeTestFile(file, framework, timeout);
|
|
328
|
+
const result = await this.executeTestFile(file, framework, timeout, projectRoot, frameworkFromConfig);
|
|
327
329
|
executionResults.push(result);
|
|
328
330
|
passed += result.passed;
|
|
329
331
|
failed += result.failed;
|
|
@@ -393,16 +395,49 @@ Provide:
|
|
|
393
395
|
const coverage = this.extractCoverageFromJson({ coverageMap: merged });
|
|
394
396
|
return coverage.summary ? { summary: coverage.summary, perFile: coverage.perFile } : undefined;
|
|
395
397
|
}
|
|
396
|
-
async executeTestFile(file, framework, timeout) {
|
|
397
|
-
return this.executeTestFiles([file], framework, timeout);
|
|
398
|
+
async executeTestFile(file, framework, timeout, projectRoot, frameworkFromConfig = false) {
|
|
399
|
+
return this.executeTestFiles([file], framework, timeout, projectRoot, frameworkFromConfig);
|
|
398
400
|
}
|
|
399
|
-
async executeTestFiles(files, framework, timeout) {
|
|
401
|
+
async executeTestFiles(files, framework, timeout, projectRoot, frameworkFromConfig = false) {
|
|
400
402
|
// In simulation mode (for unit testing), use random behavior
|
|
401
403
|
if (this.config.simulateForTesting) {
|
|
402
404
|
return this.aggregateResults(files.map(file => this.simulateTestExecution(file)));
|
|
403
405
|
}
|
|
406
|
+
// #1247: a runner loads the config of the directory it starts in, so each
|
|
407
|
+
// file runs from its own runner project (or the caller's projectRoot).
|
|
408
|
+
// #1248: Python files run apart from the others, with pytest.
|
|
409
|
+
const groups = projectRoot
|
|
410
|
+
? [files.filter(isPythonTestFile), files.filter(file => !isPythonTestFile(file))]
|
|
411
|
+
.filter(group => group.length > 0)
|
|
412
|
+
.map(group => ({ cwd: projectRoot, files: group }))
|
|
413
|
+
: groupByRunnerProject(files);
|
|
414
|
+
// #1272: an explicit framework wins; otherwise the project's config decides.
|
|
415
|
+
// #1248: Python files run with pytest, never with a JavaScript runner.
|
|
416
|
+
const frameworkIn = (group) => {
|
|
417
|
+
if (group.files.some(isPythonTestFile)) {
|
|
418
|
+
if (frameworkFromConfig || framework.toLowerCase() === 'pytest')
|
|
419
|
+
return 'pytest';
|
|
420
|
+
throw new TestRunnerExecutionError(`Python test files cannot run with ${framework}: ${group.files.filter(isPythonTestFile).join(', ')}. ` +
|
|
421
|
+
`Use framework 'pytest', or leave the framework unset.`);
|
|
422
|
+
}
|
|
423
|
+
return (frameworkFromConfig ? runnerFrameworkFor(group.cwd) : undefined) ?? framework;
|
|
424
|
+
};
|
|
425
|
+
if (groups.length === 1) {
|
|
426
|
+
return this.executeProjectFiles(groups[0].files, frameworkIn(groups[0]), timeout, groups[0].cwd);
|
|
427
|
+
}
|
|
428
|
+
// Each project gets its own runner and timeout. Their coverage maps are
|
|
429
|
+
// merged from raw counters, or left unmeasured (#1030).
|
|
430
|
+
const frameworks = groups.map(frameworkIn);
|
|
431
|
+
const results = await Promise.all(groups.map((group, index) => this.executeProjectFiles(group.files, frameworks[index], timeout, group.cwd)));
|
|
432
|
+
const combined = this.aggregateResults(results);
|
|
433
|
+
const merged = this.mergeSequentialCoverage(results);
|
|
434
|
+
combined.coverage = merged?.summary;
|
|
435
|
+
combined.fileCoverages = merged?.perFile;
|
|
436
|
+
return combined;
|
|
437
|
+
}
|
|
438
|
+
async executeProjectFiles(files, framework, timeout, cwd) {
|
|
404
439
|
// Production mode: spawn actual test runner process
|
|
405
|
-
const result = await this.spawnTestRunner(files, framework, timeout);
|
|
440
|
+
const result = await this.spawnTestRunner(files, framework, timeout, cwd);
|
|
406
441
|
if (result.success === false) {
|
|
407
442
|
// Runner/suite errors have no trustworthy assertion receipt to aggregate.
|
|
408
443
|
if (result.error instanceof TestRunnerExecutionError)
|
|
@@ -426,9 +461,9 @@ Provide:
|
|
|
426
461
|
return result.value;
|
|
427
462
|
}
|
|
428
463
|
/**
|
|
429
|
-
* Spawn actual test runner process (vitest, jest, mocha)
|
|
464
|
+
* Spawn actual test runner process (vitest, jest, mocha, node:test, pytest)
|
|
430
465
|
*/
|
|
431
|
-
async spawnTestRunner(files, framework, timeout) {
|
|
466
|
+
async spawnTestRunner(files, framework, timeout, cwd = process.cwd()) {
|
|
432
467
|
// Verify test file exists
|
|
433
468
|
const missingFile = files.find(file => !existsSync(file));
|
|
434
469
|
if (missingFile) {
|
|
@@ -466,11 +501,12 @@ Provide:
|
|
|
466
501
|
let proc;
|
|
467
502
|
try {
|
|
468
503
|
proc = spawn(command, args, {
|
|
469
|
-
cwd
|
|
504
|
+
cwd,
|
|
470
505
|
detached: process.platform !== 'win32',
|
|
471
506
|
env: {
|
|
472
507
|
...process.env,
|
|
473
508
|
FORCE_COLOR: '0', // Disable color codes for easier parsing
|
|
509
|
+
...PYTEST_ENV, // pytest reads any FORCE_COLOR as "force colour" (#1248)
|
|
474
510
|
CI: 'true', // Enable CI mode for consistent output
|
|
475
511
|
},
|
|
476
512
|
});
|
|
@@ -515,11 +551,15 @@ Provide:
|
|
|
515
551
|
finish(err(toError(error)));
|
|
516
552
|
return;
|
|
517
553
|
}
|
|
518
|
-
|
|
554
|
+
// #1248: pytest reports its own missing report (pytest not installed).
|
|
555
|
+
const pytest = framework.toLowerCase() === 'pytest';
|
|
556
|
+
if (reportText === undefined && !pytest) {
|
|
519
557
|
finish(err(new TestRunnerExecutionError(`The current Vitest JSON report is missing for ${fileLabel}.`)));
|
|
520
558
|
return;
|
|
521
559
|
}
|
|
522
|
-
const parseResult =
|
|
560
|
+
const parseResult = pytest
|
|
561
|
+
? this.parsePytestOutput(reportText, `${stderr}\n${stdout}`, files, code, command)
|
|
562
|
+
: this.parseTestOutput(reportText ?? '', stderr, fileLabel, framework, code);
|
|
523
563
|
// Read only this invocation's coverage artifacts. A previous or
|
|
524
564
|
// concurrent run's project coverage directory is not evidence.
|
|
525
565
|
if (parseResult.success && coverageDirectory) {
|
|
@@ -592,8 +632,14 @@ Provide:
|
|
|
592
632
|
command: process.execPath,
|
|
593
633
|
args: ['--test', ...files],
|
|
594
634
|
};
|
|
635
|
+
case 'pytest': {
|
|
636
|
+
// #1248: results come from the JUnit report file; no coverage is collected.
|
|
637
|
+
const report = createPytestJunitReport();
|
|
638
|
+
return { ...pytestCommand(files, report.path), report };
|
|
639
|
+
}
|
|
595
640
|
default: {
|
|
596
|
-
// Default to vitest
|
|
641
|
+
// Default to vitest. Python files never get here: executeTestFiles
|
|
642
|
+
// sends them to pytest or refuses the run (#1248).
|
|
597
643
|
const coverageDirectory = createCoverageDirectory();
|
|
598
644
|
let report;
|
|
599
645
|
try {
|
|
@@ -636,6 +682,43 @@ Provide:
|
|
|
636
682
|
`stdout: ${capDiagnostics(stdout, 500)}\nstderr: ${capDiagnostics(stderr, 500)}`));
|
|
637
683
|
}
|
|
638
684
|
}
|
|
685
|
+
/**
|
|
686
|
+
* #1248: a pytest run from its JUnit report (undefined when pytest wrote none).
|
|
687
|
+
*/
|
|
688
|
+
parsePytestOutput(report, output, files, exitCode, python) {
|
|
689
|
+
const run = pytestRunFromReport(report, files, exitCode, output, python);
|
|
690
|
+
if (!run.success)
|
|
691
|
+
return run;
|
|
692
|
+
const failedTests = run.value.tests
|
|
693
|
+
.filter(test => test.status === 'failed')
|
|
694
|
+
.map(test => ({
|
|
695
|
+
testId: uuidv4(),
|
|
696
|
+
testName: test.name,
|
|
697
|
+
file: test.file,
|
|
698
|
+
error: test.failureMessage ?? 'Test failed',
|
|
699
|
+
stack: test.failureMessage ?? '',
|
|
700
|
+
duration: test.duration ?? 0,
|
|
701
|
+
}));
|
|
702
|
+
const testCases = run.value.tests.map(test => {
|
|
703
|
+
const failureMessage = test.failureMessage && testCaseFailureMessage(test.failureMessage);
|
|
704
|
+
return {
|
|
705
|
+
name: test.name,
|
|
706
|
+
file: test.file,
|
|
707
|
+
status: test.status,
|
|
708
|
+
...(test.duration !== undefined ? { duration: test.duration } : {}),
|
|
709
|
+
...(failureMessage ? { failureMessage } : {}),
|
|
710
|
+
};
|
|
711
|
+
});
|
|
712
|
+
return ok({
|
|
713
|
+
total: run.value.total,
|
|
714
|
+
passed: run.value.passed,
|
|
715
|
+
failed: run.value.failed,
|
|
716
|
+
skipped: run.value.skipped,
|
|
717
|
+
failedTests,
|
|
718
|
+
testCases,
|
|
719
|
+
coverage: undefined,
|
|
720
|
+
});
|
|
721
|
+
}
|
|
639
722
|
/**
|
|
640
723
|
* Parse the TAP or spec summary emitted by Node's built-in test runner.
|
|
641
724
|
*/
|
|
@@ -999,7 +1082,7 @@ Provide:
|
|
|
999
1082
|
return shards;
|
|
1000
1083
|
}
|
|
1001
1084
|
async executeWorker(files, _workerIndex, _isolation, request) {
|
|
1002
|
-
return this.executeTestFiles(files, request.framework, request.timeout ?? 30000);
|
|
1085
|
+
return this.executeTestFiles(files, request.framework, request.timeout ?? 30000, request.projectRoot, request.frameworkFromConfig);
|
|
1003
1086
|
}
|
|
1004
1087
|
aggregateResults(results) {
|
|
1005
1088
|
const aggregated = {
|
|
@@ -25,6 +25,20 @@ export interface WorkflowStatus {
|
|
|
25
25
|
progress: number;
|
|
26
26
|
error?: string;
|
|
27
27
|
}
|
|
28
|
+
/**
|
|
29
|
+
* A color-contrast violation as axe-core measured it (#1228). A colour the
|
|
30
|
+
* browser did not report is null and an unreported ratio is -1, with
|
|
31
|
+
* measured: false.
|
|
32
|
+
*/
|
|
33
|
+
export interface ContrastIssue {
|
|
34
|
+
element: string;
|
|
35
|
+
foreground: string | null;
|
|
36
|
+
background: string | null;
|
|
37
|
+
ratio: number;
|
|
38
|
+
required: number;
|
|
39
|
+
measured: boolean;
|
|
40
|
+
notMeasuredReason?: string;
|
|
41
|
+
}
|
|
28
42
|
/**
|
|
29
43
|
* Coordinator configuration
|
|
30
44
|
*/
|
|
@@ -140,13 +154,7 @@ export declare class VisualAccessibilityCoordinator extends BaseDomainCoordinato
|
|
|
140
154
|
url: string;
|
|
141
155
|
wcagLevel?: 'A' | 'AA' | 'AAA';
|
|
142
156
|
}): Promise<Result<{
|
|
143
|
-
issues:
|
|
144
|
-
element: string;
|
|
145
|
-
foreground: string;
|
|
146
|
-
background: string;
|
|
147
|
-
ratio: number;
|
|
148
|
-
required: number;
|
|
149
|
-
}>;
|
|
157
|
+
issues: ContrastIssue[];
|
|
150
158
|
}, Error>>;
|
|
151
159
|
/**
|
|
152
160
|
* Test responsive design across multiple viewports
|
|
@@ -11,6 +11,7 @@ import { cosineSimilarity } from '../../shared/utils/vector-math.js';
|
|
|
11
11
|
import { createVisualTesterServiceWithDependencies, } from './services/visual-tester.js';
|
|
12
12
|
import { AccessibilityTesterService, } from './services/accessibility-tester.js';
|
|
13
13
|
import { ResponsiveTesterService, } from './services/responsive-tester.js';
|
|
14
|
+
import { contrastValues, contrastValuesMeasured, defaultRequiredRatio } from './services/accessibility-contrast.js';
|
|
14
15
|
import { A2CAlgorithm } from '../../integrations/rl-suite/algorithms/a2c.js';
|
|
15
16
|
import { createQEFlashAttention } from '../../integrations/ruvector/wrappers.js';
|
|
16
17
|
// CQ-002: Base domain coordinator
|
|
@@ -589,13 +590,20 @@ export class VisualAccessibilityCoordinator extends BaseDomainCoordinator {
|
|
|
589
590
|
}
|
|
590
591
|
// Filter for color contrast violations
|
|
591
592
|
const contrastViolations = auditResult.value.violations.filter((v) => v.id.includes('color-contrast') || v.id.includes('contrast'));
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
593
|
+
// #1228: the colours and ratio axe-core measured; unreported values are null / -1
|
|
594
|
+
const issues = contrastViolations.flatMap((violation) => violation.nodes.map((node) => {
|
|
595
|
+
const values = node.contrast ?? contrastValues(undefined, node.failureSummary);
|
|
596
|
+
const measured = contrastValuesMeasured(values);
|
|
597
|
+
return {
|
|
598
|
+
element: node.target.join(' '),
|
|
599
|
+
foreground: values.foreground,
|
|
600
|
+
background: values.background,
|
|
601
|
+
ratio: values.ratio ?? -1,
|
|
602
|
+
required: values.requiredRatio ?? defaultRequiredRatio(level),
|
|
603
|
+
measured,
|
|
604
|
+
...(measured ? {} : { notMeasuredReason: 'axe-core did not report the colours and ratio for this element' }),
|
|
605
|
+
};
|
|
606
|
+
}));
|
|
599
607
|
return ok({ issues });
|
|
600
608
|
}
|
|
601
609
|
catch (error) {
|
|
@@ -187,18 +187,36 @@ export interface ViolationNode {
|
|
|
187
187
|
readonly target: string[];
|
|
188
188
|
readonly failureSummary: string;
|
|
189
189
|
readonly fixSuggestion?: string;
|
|
190
|
+
/** Colours and ratio axe-core reported for a contrast violation (#1228). */
|
|
191
|
+
readonly contrast?: ContrastValues;
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Colours and contrast ratio as the browser measured them (#1228).
|
|
195
|
+
* A value the browser did not report is null, never a default colour or ratio.
|
|
196
|
+
*/
|
|
197
|
+
export interface ContrastValues {
|
|
198
|
+
readonly foreground: string | null;
|
|
199
|
+
readonly background: string | null;
|
|
200
|
+
readonly ratio: number | null;
|
|
201
|
+
/** The ratio axe-core required for this element (3:1 for large text), when reported. */
|
|
202
|
+
readonly requiredRatio: number | null;
|
|
190
203
|
}
|
|
191
204
|
/**
|
|
192
205
|
* Color contrast analysis
|
|
193
206
|
*/
|
|
194
207
|
export interface ContrastAnalysis {
|
|
195
208
|
readonly element: string;
|
|
196
|
-
|
|
197
|
-
readonly
|
|
209
|
+
/** null when the browser did not report the colour (#1228). */
|
|
210
|
+
readonly foreground: string | null;
|
|
211
|
+
readonly background: string | null;
|
|
212
|
+
/** -1 when the browser did not report the ratio (#1228). */
|
|
198
213
|
readonly ratio: number;
|
|
199
214
|
readonly requiredRatio: number;
|
|
200
215
|
readonly passes: boolean;
|
|
201
216
|
readonly wcagLevel: 'A' | 'AA' | 'AAA';
|
|
217
|
+
/** false when the colours or ratio were not reported; see notMeasuredReason (#1228). */
|
|
218
|
+
readonly measured?: boolean;
|
|
219
|
+
readonly notMeasuredReason?: string;
|
|
202
220
|
}
|
|
203
221
|
export interface VisualRegressionDetectedEvent extends DomainEvent {
|
|
204
222
|
readonly type: 'VisualRegressionDetectedEvent';
|
|
@@ -360,12 +378,18 @@ export interface KeyboardNavigationReport {
|
|
|
360
378
|
readonly tabOrder: TabOrderItem[];
|
|
361
379
|
readonly issues: KeyboardIssue[];
|
|
362
380
|
readonly traps: FocusTrap[];
|
|
381
|
+
/**
|
|
382
|
+
* What this report did not measure (#1228). An empty `traps` list, or a
|
|
383
|
+
* null `hasVisibleFocus`, is not a clean result for an aspect listed here.
|
|
384
|
+
*/
|
|
385
|
+
readonly notMeasured?: string[];
|
|
363
386
|
}
|
|
364
387
|
export interface TabOrderItem {
|
|
365
388
|
readonly index: number;
|
|
366
389
|
readonly selector: string;
|
|
367
390
|
readonly elementType: string;
|
|
368
|
-
|
|
391
|
+
/** null: the focus indicator was not measured (#1228). */
|
|
392
|
+
readonly hasVisibleFocus: boolean | null;
|
|
369
393
|
}
|
|
370
394
|
export interface KeyboardIssue {
|
|
371
395
|
readonly type: 'no-focus-indicator' | 'skip-link-missing' | 'incorrect-tab-order' | 'non-interactive-focusable';
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 - Measured colour contrast values (#1228)
|
|
3
|
+
*
|
|
4
|
+
* axe-core reports the colours and ratio it measured for each element checked
|
|
5
|
+
* by its color-contrast rules: in the check data (fgColor, bgColor,
|
|
6
|
+
* contrastRatio, expectedContrastRatio) and in the failure summary text. These
|
|
7
|
+
* helpers carry those values through. A value the browser did not report is
|
|
8
|
+
* null (or a ratio of -1 in ContrastAnalysis), never a default colour or ratio.
|
|
9
|
+
*/
|
|
10
|
+
import type { ContrastAnalysis, ContrastValues } from '../interfaces.js';
|
|
11
|
+
/** The fields of axe-core's color-contrast check data that AQE keeps. */
|
|
12
|
+
export interface AxeContrastData {
|
|
13
|
+
fgColor?: string;
|
|
14
|
+
bgColor?: string;
|
|
15
|
+
contrastRatio?: number;
|
|
16
|
+
expectedContrastRatio?: string;
|
|
17
|
+
}
|
|
18
|
+
/** axe-core rule ids that measure text contrast. */
|
|
19
|
+
export declare const CONTRAST_RULE_IDS: readonly ["color-contrast", "color-contrast-enhanced"];
|
|
20
|
+
export declare function isContrastRule(ruleId: string): boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Browser-side expression `(node) => AxeContrastData | undefined` for an axe-core
|
|
23
|
+
* result node. Embedded in the scripts that run axe-core in the page.
|
|
24
|
+
*/
|
|
25
|
+
export declare const AXE_CONTRAST_DATA_JS = "function (n) {\n var checks = [].concat(n.any || [], n.all || [], n.none || []);\n for (var i = 0; i < checks.length; i++) {\n var c = checks[i];\n if ((c.id === 'color-contrast' || c.id === 'color-contrast-enhanced') && c.data) {\n return {\n fgColor: c.data.fgColor,\n bgColor: c.data.bgColor,\n contrastRatio: c.data.contrastRatio,\n expectedContrastRatio: c.data.expectedContrastRatio\n };\n }\n }\n return undefined;\n}";
|
|
26
|
+
/**
|
|
27
|
+
* Read the values from axe-core's failure summary, e.g. "Element has insufficient
|
|
28
|
+
* color contrast of 2.32 (foreground color: #aaaaaa, background color: #ffffff,
|
|
29
|
+
* ...). Expected contrast ratio of 4.5:1".
|
|
30
|
+
*/
|
|
31
|
+
export declare function parseContrastFailureSummary(summary: string | undefined): ContrastValues;
|
|
32
|
+
/** Values from axe-core's check data, with gaps filled from the failure summary. */
|
|
33
|
+
export declare function contrastValues(data: AxeContrastData | undefined, failureSummary?: string): ContrastValues;
|
|
34
|
+
export declare function contrastValuesMeasured(values: ContrastValues): boolean;
|
|
35
|
+
/** The ratio WCAG requires for normal text at a level, when axe-core did not say. */
|
|
36
|
+
export declare function defaultRequiredRatio(level: 'A' | 'AA' | 'AAA'): number;
|
|
37
|
+
/** One element's contrast result; unreported values stay unmeasured. */
|
|
38
|
+
export declare function toContrastAnalysis(element: string, values: ContrastValues, passes: boolean, wcagLevel: 'A' | 'AA' | 'AAA'): ContrastAnalysis;
|
|
39
|
+
//# sourceMappingURL=accessibility-contrast.d.ts.map
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 - Measured colour contrast values (#1228)
|
|
3
|
+
*
|
|
4
|
+
* axe-core reports the colours and ratio it measured for each element checked
|
|
5
|
+
* by its color-contrast rules: in the check data (fgColor, bgColor,
|
|
6
|
+
* contrastRatio, expectedContrastRatio) and in the failure summary text. These
|
|
7
|
+
* helpers carry those values through. A value the browser did not report is
|
|
8
|
+
* null (or a ratio of -1 in ContrastAnalysis), never a default colour or ratio.
|
|
9
|
+
*/
|
|
10
|
+
/** axe-core rule ids that measure text contrast. */
|
|
11
|
+
export const CONTRAST_RULE_IDS = ['color-contrast', 'color-contrast-enhanced'];
|
|
12
|
+
export function isContrastRule(ruleId) {
|
|
13
|
+
return ruleId.includes('contrast');
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Browser-side expression `(node) => AxeContrastData | undefined` for an axe-core
|
|
17
|
+
* result node. Embedded in the scripts that run axe-core in the page.
|
|
18
|
+
*/
|
|
19
|
+
export const AXE_CONTRAST_DATA_JS = `function (n) {
|
|
20
|
+
var checks = [].concat(n.any || [], n.all || [], n.none || []);
|
|
21
|
+
for (var i = 0; i < checks.length; i++) {
|
|
22
|
+
var c = checks[i];
|
|
23
|
+
if ((c.id === 'color-contrast' || c.id === 'color-contrast-enhanced') && c.data) {
|
|
24
|
+
return {
|
|
25
|
+
fgColor: c.data.fgColor,
|
|
26
|
+
bgColor: c.data.bgColor,
|
|
27
|
+
contrastRatio: c.data.contrastRatio,
|
|
28
|
+
expectedContrastRatio: c.data.expectedContrastRatio
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return undefined;
|
|
33
|
+
}`;
|
|
34
|
+
const COLOR = '(#[0-9a-f]{3,8}|rgba?\\([^)]*\\))';
|
|
35
|
+
/**
|
|
36
|
+
* Read the values from axe-core's failure summary, e.g. "Element has insufficient
|
|
37
|
+
* color contrast of 2.32 (foreground color: #aaaaaa, background color: #ffffff,
|
|
38
|
+
* ...). Expected contrast ratio of 4.5:1".
|
|
39
|
+
*/
|
|
40
|
+
export function parseContrastFailureSummary(summary) {
|
|
41
|
+
const text = summary ?? '';
|
|
42
|
+
const ratio = text.match(/contrast (?:ratio )?of\s*(\d+(?:\.\d+)?)(?![\d.]|\s*:)/i);
|
|
43
|
+
const fg = text.match(new RegExp(`foreground colou?r:?\\s*${COLOR}`, 'i'));
|
|
44
|
+
const bg = text.match(new RegExp(`background colou?r:?\\s*${COLOR}`, 'i'));
|
|
45
|
+
const expected = text.match(/expected contrast ratio of\s*(\d+(?:\.\d+)?)\s*:\s*1/i);
|
|
46
|
+
return {
|
|
47
|
+
foreground: fg?.[1] ?? null,
|
|
48
|
+
background: bg?.[1] ?? null,
|
|
49
|
+
ratio: validRatio(ratio ? parseFloat(ratio[1]) : undefined),
|
|
50
|
+
requiredRatio: validRatio(expected ? parseFloat(expected[1]) : undefined),
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
/** Values from axe-core's check data, with gaps filled from the failure summary. */
|
|
54
|
+
export function contrastValues(data, failureSummary) {
|
|
55
|
+
const parsed = parseContrastFailureSummary(failureSummary);
|
|
56
|
+
const expected = data?.expectedContrastRatio?.match(/(\d+(?:\.\d+)?)/);
|
|
57
|
+
return {
|
|
58
|
+
foreground: nonEmpty(data?.fgColor) ?? parsed.foreground,
|
|
59
|
+
background: nonEmpty(data?.bgColor) ?? parsed.background,
|
|
60
|
+
ratio: validRatio(data?.contrastRatio) ?? parsed.ratio,
|
|
61
|
+
requiredRatio: validRatio(expected ? parseFloat(expected[1]) : undefined) ?? parsed.requiredRatio,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
export function contrastValuesMeasured(values) {
|
|
65
|
+
return values.foreground !== null && values.background !== null && values.ratio !== null;
|
|
66
|
+
}
|
|
67
|
+
/** The ratio WCAG requires for normal text at a level, when axe-core did not say. */
|
|
68
|
+
export function defaultRequiredRatio(level) {
|
|
69
|
+
return level === 'AAA' ? 7 : 4.5;
|
|
70
|
+
}
|
|
71
|
+
/** One element's contrast result; unreported values stay unmeasured. */
|
|
72
|
+
export function toContrastAnalysis(element, values, passes, wcagLevel) {
|
|
73
|
+
const measured = contrastValuesMeasured(values);
|
|
74
|
+
return {
|
|
75
|
+
element,
|
|
76
|
+
foreground: values.foreground,
|
|
77
|
+
background: values.background,
|
|
78
|
+
ratio: values.ratio ?? -1,
|
|
79
|
+
requiredRatio: values.requiredRatio ?? defaultRequiredRatio(wcagLevel),
|
|
80
|
+
passes,
|
|
81
|
+
wcagLevel,
|
|
82
|
+
measured,
|
|
83
|
+
...(measured ? {} : { notMeasuredReason: 'the browser did not report the colours and ratio for this element' }),
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
function validRatio(value) {
|
|
87
|
+
// A contrast ratio is between 1 and 21; axe-core reports 0 when it could not compute one.
|
|
88
|
+
return typeof value === 'number' && Number.isFinite(value) && value >= 1 ? value : null;
|
|
89
|
+
}
|
|
90
|
+
function nonEmpty(value) {
|
|
91
|
+
return typeof value === 'string' && value.trim() !== '' ? value : null;
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=accessibility-contrast.js.map
|
|
@@ -6,6 +6,7 @@ import { Result } from '../../../shared/types/index.js';
|
|
|
6
6
|
import { AccessibilityReport, WCAGCriterion, ContrastAnalysis, KeyboardNavigationReport, KeyboardIssue, AuditOptions } from '../interfaces.js';
|
|
7
7
|
import type { VibiumClient, AccessibilityResult as VibiumAccessibilityResult } from '../../../integrations/vibium/index.js';
|
|
8
8
|
import type { IBrowserClient, IAgentBrowserClient } from '../../../integrations/browser/index.js';
|
|
9
|
+
import { type AxeContrastData } from './accessibility-contrast.js';
|
|
9
10
|
/**
|
|
10
11
|
* Axe-core result structure from browser evaluation
|
|
11
12
|
*/
|
|
@@ -22,6 +23,8 @@ export interface AxeCoreResult {
|
|
|
22
23
|
html: string;
|
|
23
24
|
target: string[];
|
|
24
25
|
failureSummary?: string;
|
|
26
|
+
/** color-contrast check data: the measured colours and ratio (#1228) */
|
|
27
|
+
contrast?: AxeContrastData;
|
|
25
28
|
}>;
|
|
26
29
|
}>;
|
|
27
30
|
passes: string[];
|
|
@@ -38,13 +41,18 @@ export declare function isAgentBrowserClient(client: IBrowserClient): client is
|
|
|
38
41
|
*/
|
|
39
42
|
export declare function getAxeTagsForWcagLevel(level: 'A' | 'AA' | 'AAA'): string[];
|
|
40
43
|
/**
|
|
41
|
-
* Map Vibium
|
|
44
|
+
* Map an axe-core impact or a Vibium severity to our impact type
|
|
42
45
|
*/
|
|
43
46
|
export declare function mapImpactSeverity(severity: string): 'critical' | 'serious' | 'moderate' | 'minor';
|
|
44
47
|
/**
|
|
45
48
|
* Extract error message from a Result
|
|
46
49
|
*/
|
|
47
50
|
export declare function getErrorMessage<T, E extends Error>(result: Result<T, E>): string;
|
|
51
|
+
/**
|
|
52
|
+
* Browser-side statements that load axe-core into the page when it is not
|
|
53
|
+
* loaded yet. For use inside an async function.
|
|
54
|
+
*/
|
|
55
|
+
export declare const AXE_LOADER_JS = "\n // Check if axe is already loaded\n if (typeof axe === 'undefined') {\n // Inject axe-core from CDN\n const script = document.createElement('script');\n script.src = 'https://cdnjs.cloudflare.com/ajax/libs/axe-core/4.8.4/axe.min.js';\n script.crossOrigin = 'anonymous';\n document.head.appendChild(script);\n\n // Wait for script to load\n await new Promise((resolve, reject) => {\n script.onload = resolve;\n script.onerror = () => reject(new Error('Failed to load axe-core'));\n setTimeout(() => reject(new Error('Timeout loading axe-core')), 10000);\n });\n }";
|
|
48
56
|
/**
|
|
49
57
|
* Inject and run axe-core in the browser context
|
|
50
58
|
*/
|
|
@@ -62,9 +70,11 @@ export declare function mapAxeResultToReport(url: string, axeResult: AxeCoreResu
|
|
|
62
70
|
*/
|
|
63
71
|
export declare function mapVibiumResultToReport(url: string, vibiumResult: VibiumAccessibilityResult, wcagLevel: 'A' | 'AA' | 'AAA'): AccessibilityReport;
|
|
64
72
|
/**
|
|
65
|
-
* Extract contrast analysis from Vibium accessibility result
|
|
73
|
+
* Extract contrast analysis from Vibium accessibility result.
|
|
74
|
+
* Only elements the audit reported are listed, with the values it reported
|
|
75
|
+
* (#1228). An error means the contrast rule produced no result.
|
|
66
76
|
*/
|
|
67
|
-
export declare function extractContrastFromVibiumResult(vibiumResult: VibiumAccessibilityResult, defaultWCAGLevel: 'A' | 'AA' | 'AAA'): ContrastAnalysis[]
|
|
77
|
+
export declare function extractContrastFromVibiumResult(vibiumResult: VibiumAccessibilityResult, defaultWCAGLevel: 'A' | 'AA' | 'AAA'): Result<ContrastAnalysis[], Error>;
|
|
68
78
|
/**
|
|
69
79
|
* Run accessibility audit using unified browser client (agent-browser or other)
|
|
70
80
|
*/
|
|
@@ -100,6 +110,11 @@ export declare function checkKeyboardWithVibium(vibiumClient: VibiumClient, url:
|
|
|
100
110
|
headless: boolean;
|
|
101
111
|
timeout: number;
|
|
102
112
|
}): Promise<Result<KeyboardNavigationReport, Error>>;
|
|
113
|
+
/**
|
|
114
|
+
* What an automated keyboard check does not measure (#1228): it lists the
|
|
115
|
+
* focusable elements and runs rule checks, but tabs through nothing.
|
|
116
|
+
*/
|
|
117
|
+
export declare const KEYBOARD_NOT_MEASURED: readonly string[];
|
|
103
118
|
/**
|
|
104
119
|
* Get element type from tag name
|
|
105
120
|
*/
|