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
|
@@ -10,21 +10,29 @@ import { createTimedSpinner } from '../utils/progress.js';
|
|
|
10
10
|
import { parseJsonOption } from '../helpers/safe-json.js';
|
|
11
11
|
import { validateIndexTaskPayload } from '../../domains/code-intelligence/index-path-guard.js';
|
|
12
12
|
import { writeOutput, toJSON } from '../utils/ci-output.js';
|
|
13
|
+
import { taskResultLines } from '../utils/task-result.js';
|
|
13
14
|
// ============================================================================
|
|
14
15
|
// Task Handler
|
|
15
16
|
// ============================================================================
|
|
16
17
|
/**
|
|
17
18
|
* What a completed task's result says it could not check (#1135, #1052):
|
|
18
19
|
* `incompleteChecks`, or a top-level status of incomplete/failed with its reason.
|
|
20
|
+
* #1228: a result whose top-level status is not-measured or partial (part of what was
|
|
21
|
+
* asked was not measured) is not a clean run either. `measured: false` alone is not
|
|
22
|
+
* flagged: analyze-coverage sets it for caller-supplied coverage it did analyze.
|
|
19
23
|
*/
|
|
20
24
|
export function incompleteResultReasons(result) {
|
|
21
25
|
if (!result || typeof result !== 'object')
|
|
22
26
|
return [];
|
|
23
|
-
const { status, error, incompleteChecks } = result;
|
|
27
|
+
const { status, error, incompleteChecks, message, notMeasuredReason } = result;
|
|
24
28
|
const reasons = Array.isArray(incompleteChecks) ? incompleteChecks.filter((reason) => typeof reason === 'string') : [];
|
|
25
29
|
if (reasons.length === 0 && (status === 'incomplete' || status === 'failed')) {
|
|
26
30
|
reasons.push(typeof error === 'string' ? error : `result status is ${status}`);
|
|
27
31
|
}
|
|
32
|
+
if (reasons.length === 0 && (status === 'not-measured' || status === 'partial')) {
|
|
33
|
+
const why = [message, notMeasuredReason].find((text) => typeof text === 'string');
|
|
34
|
+
reasons.push(why ?? `result status is ${status}`);
|
|
35
|
+
}
|
|
28
36
|
return reasons;
|
|
29
37
|
}
|
|
30
38
|
export class TaskHandler {
|
|
@@ -49,6 +57,7 @@ export class TaskHandler {
|
|
|
49
57
|
.option('-t, --timeout <ms>', 'Task timeout in ms', '300000')
|
|
50
58
|
.option('--payload <json>', 'Task payload as JSON', '{}')
|
|
51
59
|
.option('--wait', 'Wait for task completion (required: CLI tasks are not persisted)')
|
|
60
|
+
.option('-o, --output <file>', 'Write the full task result as JSON to a file')
|
|
52
61
|
.option('--no-progress', 'Disable progress indicator')
|
|
53
62
|
.action(async (type, options) => {
|
|
54
63
|
await this.executeSubmit(type, options, context);
|
|
@@ -167,9 +176,11 @@ export class TaskHandler {
|
|
|
167
176
|
const incomplete = incompleteResultReasons(taskStatus.result);
|
|
168
177
|
if (incomplete.length > 0) {
|
|
169
178
|
waitSpinner.fail(`Task completed, but its result is incomplete: ${incomplete.join('; ')}`);
|
|
179
|
+
this.printResult(taskStatus.result, options.output);
|
|
170
180
|
return this.cleanupAndExit(1);
|
|
171
181
|
}
|
|
172
182
|
waitSpinner.succeed('Task completed successfully');
|
|
183
|
+
this.printResult(taskStatus.result, options.output);
|
|
173
184
|
completed = true;
|
|
174
185
|
}
|
|
175
186
|
else if (taskStatus.status === 'failed' || taskStatus.status === 'cancelled') {
|
|
@@ -202,6 +213,14 @@ export class TaskHandler {
|
|
|
202
213
|
await this.cleanupAndExit(1);
|
|
203
214
|
}
|
|
204
215
|
}
|
|
216
|
+
/** #1228, #1146: show what a completed task returned, not only that it completed. */
|
|
217
|
+
printResult(result, outputPath) {
|
|
218
|
+
console.log('');
|
|
219
|
+
for (const line of taskResultLines(result))
|
|
220
|
+
console.log(` ${line}`);
|
|
221
|
+
if (outputPath)
|
|
222
|
+
writeOutput(toJSON(result ?? null), outputPath);
|
|
223
|
+
}
|
|
205
224
|
async executeList(options, context) {
|
|
206
225
|
if (!await this.ensureInitialized())
|
|
207
226
|
return this.cleanupAndExit(1);
|
|
@@ -362,6 +381,7 @@ Submit Options:
|
|
|
362
381
|
--payload <json> Task payload as JSON
|
|
363
382
|
--wait Wait for task completion (required; CLI-submitted
|
|
364
383
|
tasks run in this process and are not persisted)
|
|
384
|
+
-o, --output <file> Write the full task result as JSON to a file
|
|
365
385
|
--no-progress Disable progress indicator
|
|
366
386
|
|
|
367
387
|
List Options:
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 - Printing a completed task's result (#1228, #1146)
|
|
3
|
+
*
|
|
4
|
+
* `aqe task submit --wait` reported only "Task completed", so a CLI user never
|
|
5
|
+
* saw what the task found, nor that part of it was not measured. These lines
|
|
6
|
+
* show the result: its status / measured / message fields first, then the
|
|
7
|
+
* whole result as JSON (cut after a line limit; --output writes all of it).
|
|
8
|
+
*/
|
|
9
|
+
export declare const MAX_RESULT_LINES = 200;
|
|
10
|
+
export declare function taskResultLines(result: unknown, maxLines?: number): string[];
|
|
11
|
+
//# sourceMappingURL=task-result.d.ts.map
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 - Printing a completed task's result (#1228, #1146)
|
|
3
|
+
*
|
|
4
|
+
* `aqe task submit --wait` reported only "Task completed", so a CLI user never
|
|
5
|
+
* saw what the task found, nor that part of it was not measured. These lines
|
|
6
|
+
* show the result: its status / measured / message fields first, then the
|
|
7
|
+
* whole result as JSON (cut after a line limit; --output writes all of it).
|
|
8
|
+
*/
|
|
9
|
+
import { toJSON } from './ci-output.js';
|
|
10
|
+
export const MAX_RESULT_LINES = 200;
|
|
11
|
+
/** Top-level fields that say whether, and how much of, the result was measured. */
|
|
12
|
+
const HEADLINE_FIELDS = ['status', 'measured', 'message', 'note', 'notMeasuredReason', 'notMeasured', 'warning', 'error', 'incompleteChecks'];
|
|
13
|
+
export function taskResultLines(result, maxLines = MAX_RESULT_LINES) {
|
|
14
|
+
if (result === undefined || result === null)
|
|
15
|
+
return ['Result: none (the task returned no result)'];
|
|
16
|
+
const lines = [];
|
|
17
|
+
if (typeof result === 'object' && !Array.isArray(result)) {
|
|
18
|
+
const record = result;
|
|
19
|
+
for (const field of HEADLINE_FIELDS) {
|
|
20
|
+
if (record[field] !== undefined)
|
|
21
|
+
lines.push(`${field}: ${headline(record[field])}`);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
const json = toJSON(result).split('\n');
|
|
25
|
+
lines.push('Result:');
|
|
26
|
+
lines.push(...json.slice(0, maxLines).map((line) => ` ${line}`));
|
|
27
|
+
if (json.length > maxLines) {
|
|
28
|
+
lines.push(` … ${json.length - maxLines} more line(s); --output <file> writes the full result`);
|
|
29
|
+
}
|
|
30
|
+
return lines;
|
|
31
|
+
}
|
|
32
|
+
function headline(value) {
|
|
33
|
+
if (typeof value === 'string')
|
|
34
|
+
return value;
|
|
35
|
+
if (Array.isArray(value) && value.length === 0)
|
|
36
|
+
return '[]';
|
|
37
|
+
return JSON.stringify(value);
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=task-result.js.map
|
|
@@ -11,9 +11,11 @@ import { toError } from '../../shared/error-utils.js';
|
|
|
11
11
|
import { capDiagnostics, getTestRunnerExecutionError, TestRunnerExecutionError } from '../../shared/test-runner-verdict.js';
|
|
12
12
|
import { createVitestJsonReport } from '../../shared/vitest-json-report.js';
|
|
13
13
|
import { jestExactPathPattern, runnerFilePath } from '../../shared/test-runner-args.js';
|
|
14
|
-
import { testCasesFromRunnerReport } from '../../domains/test-execution/services/runner-test-cases.js';
|
|
14
|
+
import { testCaseFailureMessage, testCasesFromRunnerReport } from '../../domains/test-execution/services/runner-test-cases.js';
|
|
15
|
+
import { createPytestJunitReport, isPythonTestFile, pytestCommand, pytestRunFromReport, PYTEST_ENV } from '../../shared/pytest-junit-report.js';
|
|
15
16
|
import { runTestRunnerProcess } from '../../shared/test-runner-process.js';
|
|
16
17
|
import { MAX_PAYLOAD_FILE_BYTES, requirePayloadFiles } from '../../shared/io/payload-path-guard.js';
|
|
18
|
+
import { groupByRunnerProject, requireTestRunTargets, runnerFrameworkFor } from '../../shared/test-runner-project.js';
|
|
17
19
|
function escapeRegExp(s) {
|
|
18
20
|
return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
19
21
|
}
|
|
@@ -57,6 +59,106 @@ export function rewriteTempPathsInGeneratedTest(testCode, sourceFile, tempPath,
|
|
|
57
59
|
const newRef = sourceFile === tempPath ? (originalFilePath || sourceFile) : sourceFile;
|
|
58
60
|
return { testCode: newCode, sourceFile: newRef };
|
|
59
61
|
}
|
|
62
|
+
/** #1248: run Python test files with pytest, reading its JUnit report. */
|
|
63
|
+
async function runPytestTests(testFiles, cwd) {
|
|
64
|
+
const report = createPytestJunitReport();
|
|
65
|
+
try {
|
|
66
|
+
const { command, args } = pytestCommand(testFiles.map(file => runnerFilePath(file)), report.path);
|
|
67
|
+
const execution = await runTestRunnerProcess(command, args, { cwd, timeout: 120000, env: { ...process.env, ...PYTEST_ENV } });
|
|
68
|
+
const output = [execution.stderr, execution.stdout].filter(Boolean).join('\n');
|
|
69
|
+
if (execution.error || execution.signal) {
|
|
70
|
+
const reason = execution.error?.message ?? `Terminated by ${execution.signal}`;
|
|
71
|
+
return err(new TestRunnerExecutionError(`pytest could not complete: ${capDiagnostics(`${reason}\n${output}`)}`));
|
|
72
|
+
}
|
|
73
|
+
const run = pytestRunFromReport(report.read(), testFiles, execution.status, output, command);
|
|
74
|
+
if (!run.success)
|
|
75
|
+
return run;
|
|
76
|
+
const testCases = run.value.tests.map(test => {
|
|
77
|
+
const failureMessage = test.failureMessage && testCaseFailureMessage(test.failureMessage);
|
|
78
|
+
return {
|
|
79
|
+
name: test.name, file: test.file, status: test.status,
|
|
80
|
+
...(test.duration !== undefined ? { duration: test.duration } : {}),
|
|
81
|
+
...(failureMessage ? { failureMessage } : {}),
|
|
82
|
+
};
|
|
83
|
+
});
|
|
84
|
+
const { total, passed, failed, skipped } = run.value;
|
|
85
|
+
return ok({ total, passed, failed, skipped, testCases });
|
|
86
|
+
}
|
|
87
|
+
finally {
|
|
88
|
+
report.cleanup();
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Run `testFiles` (paths relative to the process cwd, or absolute) with the
|
|
93
|
+
* runner started in `cwd`.
|
|
94
|
+
*/
|
|
95
|
+
async function runProjectTests(testFiles, cwd) {
|
|
96
|
+
if (testFiles.some(isPythonTestFile))
|
|
97
|
+
return runPytestTests(testFiles, cwd);
|
|
98
|
+
// #1074: run the runner asynchronously so the MCP server keeps serving
|
|
99
|
+
// other requests (task_status, task_cancel, ...) during the test run.
|
|
100
|
+
const options = { cwd, timeout: 120000 };
|
|
101
|
+
const runJest = () => runTestRunnerProcess('npx', ['jest', ...testFiles.map(file => jestExactPathPattern(file)), '--json'], options);
|
|
102
|
+
let runner = 'vitest';
|
|
103
|
+
let execution;
|
|
104
|
+
let output = '';
|
|
105
|
+
if (runnerFrameworkFor(cwd) === 'jest') {
|
|
106
|
+
// #1272: a project configured for Jest runs with Jest, never Vitest first.
|
|
107
|
+
runner = 'jest';
|
|
108
|
+
execution = await runJest();
|
|
109
|
+
output = execution.stdout || '';
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
// Vitest 5 writes the JSON report to a file rather than stdout; an explicit
|
|
113
|
+
// --outputFile gives Vitest 4 and 5 the same contract.
|
|
114
|
+
const report = createVitestJsonReport();
|
|
115
|
+
try {
|
|
116
|
+
// #909: absolute paths cannot be read as flags (e.g. a "--watch" entry).
|
|
117
|
+
execution = await runTestRunnerProcess('npx', ['vitest', 'run', ...testFiles.map(file => runnerFilePath(file)), '--reporter=json', ...report.args], options);
|
|
118
|
+
output = execution.error || execution.signal
|
|
119
|
+
? ''
|
|
120
|
+
: report.read(execution.stdout || '') ?? '';
|
|
121
|
+
}
|
|
122
|
+
finally {
|
|
123
|
+
report.cleanup();
|
|
124
|
+
}
|
|
125
|
+
// Preserve the existing Jest fallback when Vitest cannot produce a report.
|
|
126
|
+
if (!output.includes('{') && execution.status !== 0 && !execution.error && !execution.signal) {
|
|
127
|
+
runner = 'jest';
|
|
128
|
+
execution = await runJest();
|
|
129
|
+
output = execution.stdout || '';
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
const diagnostics = [execution.error?.message, execution.signal && `Terminated by ${execution.signal}`, execution.stderr, output].filter(Boolean).join('\n');
|
|
133
|
+
if (execution.error) {
|
|
134
|
+
return err(new TestRunnerExecutionError(`${runner} could not complete: ${capDiagnostics(diagnostics)}`));
|
|
135
|
+
}
|
|
136
|
+
try {
|
|
137
|
+
const jsonStart = output.indexOf('{');
|
|
138
|
+
if (jsonStart >= 0) {
|
|
139
|
+
const json = JSON.parse(output.slice(jsonStart));
|
|
140
|
+
if (json.testResults) {
|
|
141
|
+
const total = json.numTotalTests || 0;
|
|
142
|
+
const passed = json.numPassedTests || 0;
|
|
143
|
+
const failed = json.numFailedTests || 0;
|
|
144
|
+
const skipped = total - passed - failed;
|
|
145
|
+
const executionError = getTestRunnerExecutionError(runner, testFiles.join(', '), execution.status, { passed, failed, skipped }, diagnostics, json);
|
|
146
|
+
if (executionError)
|
|
147
|
+
return err(executionError);
|
|
148
|
+
// #1110: per-test entries come from the runner report itself, or are left out.
|
|
149
|
+
const testCases = testCasesFromRunnerReport(json, testFiles.join(', '));
|
|
150
|
+
return ok({
|
|
151
|
+
total, passed, failed, skipped,
|
|
152
|
+
...(testCases && testCases.length === total ? { testCases } : {}),
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
catch {
|
|
158
|
+
// A malformed report cannot establish that the requested tests completed.
|
|
159
|
+
}
|
|
160
|
+
return err(new TestRunnerExecutionError(`Could not parse ${runner} results (exit code ${execution.status ?? 'unknown'}):\n${capDiagnostics(diagnostics)}`));
|
|
161
|
+
}
|
|
60
162
|
export function registerTestExecutionHandlers(ctx) {
|
|
61
163
|
// Register test generation handler - REAL IMPLEMENTATION
|
|
62
164
|
ctx.registerHandler('generate-tests', async (task) => {
|
|
@@ -198,10 +300,11 @@ export function registerTestExecutionHandlers(ctx) {
|
|
|
198
300
|
// #1126: a runner executes what it is given, so only files and
|
|
199
301
|
// directories (#909 Jest targets) inside the project, run as the real
|
|
200
302
|
// paths that were checked. A missing file is still reported by the runner.
|
|
201
|
-
|
|
303
|
+
// #1247: an explicit projectRoot is confined the same way.
|
|
304
|
+
const confined = await requireTestRunTargets('execute-tests', requestedFiles, payload.projectRoot);
|
|
202
305
|
if (!confined.success)
|
|
203
306
|
return confined;
|
|
204
|
-
const testFiles = confined.value;
|
|
307
|
+
const { testFiles, projectRoot } = confined.value;
|
|
205
308
|
// A caller-owned MCP task skips the Queen's plugin dispatch. Run through
|
|
206
309
|
// that same domain API here: it owns persistence, measured quality evidence
|
|
207
310
|
// and TestRunStarted/Completed events as well as the runner itself.
|
|
@@ -216,68 +319,43 @@ export function registerTestExecutionHandlers(ctx) {
|
|
|
216
319
|
workers: payload.parallelism,
|
|
217
320
|
// The domain owns requested retries; Queen dispatch must not replay it.
|
|
218
321
|
retryCount: payload.retryCount ?? 0,
|
|
322
|
+
projectRoot,
|
|
219
323
|
});
|
|
220
324
|
if (!result.success)
|
|
221
325
|
return result;
|
|
222
326
|
return ok({ ...result.value, coverage: result.value.coverage?.line ?? null });
|
|
223
327
|
}
|
|
224
|
-
// #
|
|
225
|
-
//
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
328
|
+
// #1247: a runner loads the config of the directory it starts in, so
|
|
329
|
+
// each runner project's files run from that project (or projectRoot).
|
|
330
|
+
// #1248: Python files run apart from the others, with pytest.
|
|
331
|
+
const groups = projectRoot
|
|
332
|
+
? [testFiles.filter(isPythonTestFile), testFiles.filter(file => !isPythonTestFile(file))]
|
|
333
|
+
.filter(files => files.length > 0)
|
|
334
|
+
.map(files => ({ cwd: projectRoot, files }))
|
|
335
|
+
: groupByRunnerProject(testFiles);
|
|
336
|
+
const totals = { total: 0, passed: 0, failed: 0, skipped: 0 };
|
|
337
|
+
const testCases = [];
|
|
338
|
+
let everyTestCase = true;
|
|
339
|
+
for (const group of groups) {
|
|
340
|
+
const run = await runProjectTests(group.files, group.cwd);
|
|
341
|
+
if (!run.success)
|
|
342
|
+
return run;
|
|
343
|
+
totals.total += run.value.total;
|
|
344
|
+
totals.passed += run.value.passed;
|
|
345
|
+
totals.failed += run.value.failed;
|
|
346
|
+
totals.skipped += run.value.skipped;
|
|
347
|
+
if (run.value.testCases)
|
|
348
|
+
testCases.push(...run.value.testCases);
|
|
349
|
+
else
|
|
350
|
+
everyTestCase = false;
|
|
242
351
|
}
|
|
243
|
-
//
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
if (execution.error) {
|
|
251
|
-
return err(new TestRunnerExecutionError(`${runner} could not complete: ${capDiagnostics(diagnostics)}`));
|
|
252
|
-
}
|
|
253
|
-
try {
|
|
254
|
-
const jsonStart = output.indexOf('{');
|
|
255
|
-
if (jsonStart >= 0) {
|
|
256
|
-
const json = JSON.parse(output.slice(jsonStart));
|
|
257
|
-
if (json.testResults) {
|
|
258
|
-
const total = json.numTotalTests || 0;
|
|
259
|
-
const passed = json.numPassedTests || 0;
|
|
260
|
-
const failed = json.numFailedTests || 0;
|
|
261
|
-
const skipped = total - passed - failed;
|
|
262
|
-
const executionError = getTestRunnerExecutionError(runner, testFiles.join(', '), execution.status, { passed, failed, skipped }, diagnostics, json);
|
|
263
|
-
if (executionError)
|
|
264
|
-
return err(executionError);
|
|
265
|
-
// #1027 N5/NB5: this handler runs the tests without --coverage, so it has no
|
|
266
|
-
// coverage figure to return (null, never 0%). For test_execute_parallel the
|
|
267
|
-
// measured coverage + testsPassing are recorded by TestExecutorService.
|
|
268
|
-
// #1110: per-test entries come from the runner report itself, or are left out.
|
|
269
|
-
const testCases = testCasesFromRunnerReport(json, testFiles.join(', '));
|
|
270
|
-
return ok({
|
|
271
|
-
total, passed, failed, skipped, duration: 0, coverage: null, failedTests: [],
|
|
272
|
-
...(testCases && testCases.length === total ? { testCases } : {}),
|
|
273
|
-
});
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
catch {
|
|
278
|
-
// A malformed report cannot establish that the requested tests completed.
|
|
279
|
-
}
|
|
280
|
-
return err(new TestRunnerExecutionError(`Could not parse ${runner} results (exit code ${execution.status ?? 'unknown'}):\n${capDiagnostics(diagnostics)}`));
|
|
352
|
+
// #1027 N5/NB5: this handler runs the tests without --coverage, so it has no
|
|
353
|
+
// coverage figure to return (null, never 0%). For test_execute_parallel the
|
|
354
|
+
// measured coverage + testsPassing are recorded by TestExecutorService.
|
|
355
|
+
return ok({
|
|
356
|
+
...totals, duration: 0, coverage: null, failedTests: [],
|
|
357
|
+
...(everyTestCase ? { testCases } : {}),
|
|
358
|
+
});
|
|
281
359
|
}
|
|
282
360
|
catch (error) {
|
|
283
361
|
return err(toError(error));
|
|
@@ -49,12 +49,14 @@ export class MinCutPersistence {
|
|
|
49
49
|
this.ensureInitialized();
|
|
50
50
|
const id = uuidv4();
|
|
51
51
|
const db = this.memory.getDatabase();
|
|
52
|
-
|
|
52
|
+
// #1274: the queen's snapshot timer and agent events write here, so the
|
|
53
|
+
// writes queue instead of freezing the MCP server on a locked memory.db.
|
|
54
|
+
await this.memory.writeWhenUnlocked(() => db.prepare(`
|
|
53
55
|
INSERT INTO mincut_snapshots (
|
|
54
56
|
id, timestamp, vertex_count, edge_count, total_weight,
|
|
55
57
|
is_connected, component_count, vertices_json, edges_json
|
|
56
58
|
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
57
|
-
`).run(id, snapshot.timestamp.toISOString(), snapshot.stats.vertexCount, snapshot.stats.edgeCount, snapshot.stats.totalWeight, snapshot.stats.isConnected ? 1 : 0, snapshot.stats.componentCount, JSON.stringify(snapshot.vertices), JSON.stringify(snapshot.edges));
|
|
59
|
+
`).run(id, snapshot.timestamp.toISOString(), snapshot.stats.vertexCount, snapshot.stats.edgeCount, snapshot.stats.totalWeight, snapshot.stats.isConnected ? 1 : 0, snapshot.stats.componentCount, JSON.stringify(snapshot.vertices), JSON.stringify(snapshot.edges)));
|
|
58
60
|
// Enforce retention to prevent unbounded snapshot growth (Issue #258)
|
|
59
61
|
await this.enforceRetention();
|
|
60
62
|
return id;
|
|
@@ -70,20 +72,20 @@ export class MinCutPersistence {
|
|
|
70
72
|
if (!countRow || countRow.count <= maxSnapshots)
|
|
71
73
|
return 0;
|
|
72
74
|
const deleteCount = countRow.count - maxSnapshots;
|
|
73
|
-
db.prepare(`
|
|
75
|
+
await this.memory.writeWhenUnlocked(() => db.prepare(`
|
|
74
76
|
DELETE FROM mincut_snapshots WHERE id IN (
|
|
75
77
|
SELECT id FROM mincut_snapshots ORDER BY created_at ASC LIMIT ?
|
|
76
78
|
)
|
|
77
|
-
`).run(deleteCount);
|
|
79
|
+
`).run(deleteCount));
|
|
78
80
|
// Also trim history
|
|
79
81
|
const historyCount = db.prepare('SELECT COUNT(*) as count FROM mincut_history').get();
|
|
80
82
|
if (historyCount.count > 500) {
|
|
81
83
|
const historyDelete = historyCount.count - 500;
|
|
82
|
-
db.prepare(`
|
|
84
|
+
await this.memory.writeWhenUnlocked(() => db.prepare(`
|
|
83
85
|
DELETE FROM mincut_history WHERE id IN (
|
|
84
86
|
SELECT id FROM mincut_history ORDER BY created_at ASC LIMIT ?
|
|
85
87
|
)
|
|
86
|
-
`).run(historyDelete);
|
|
88
|
+
`).run(historyDelete));
|
|
87
89
|
}
|
|
88
90
|
return deleteCount;
|
|
89
91
|
}
|
|
@@ -121,11 +123,11 @@ export class MinCutPersistence {
|
|
|
121
123
|
async recordHistory(entry) {
|
|
122
124
|
this.ensureInitialized();
|
|
123
125
|
const db = this.memory.getDatabase();
|
|
124
|
-
const result = db.prepare(`
|
|
126
|
+
const result = await this.memory.writeWhenUnlocked(() => db.prepare(`
|
|
125
127
|
INSERT INTO mincut_history (
|
|
126
128
|
mincut_value, vertex_count, edge_count, algorithm, duration_ms, snapshot_id
|
|
127
129
|
) VALUES (?, ?, ?, ?, ?, ?)
|
|
128
|
-
`).run(entry.minCutValue, entry.vertexCount, entry.edgeCount, entry.algorithm ?? 'weighted-degree', entry.durationMs ?? null, entry.snapshotId ?? null);
|
|
130
|
+
`).run(entry.minCutValue, entry.vertexCount, entry.edgeCount, entry.algorithm ?? 'weighted-degree', entry.durationMs ?? null, entry.snapshotId ?? null));
|
|
129
131
|
return Number(result.lastInsertRowid);
|
|
130
132
|
}
|
|
131
133
|
/**
|
|
@@ -225,13 +227,15 @@ export class MinCutPersistence {
|
|
|
225
227
|
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
226
228
|
`);
|
|
227
229
|
const insertMany = db.transaction((vertices) => {
|
|
230
|
+
ids.length = 0; // a retried attempt starts over (#1283)
|
|
228
231
|
for (const weak of vertices) {
|
|
229
232
|
const id = uuidv4();
|
|
230
233
|
insert.run(id, weak.vertexId, weak.weightedDegree, weak.riskScore, weak.reason, weak.vertex.domain ?? null, weak.vertex.type, JSON.stringify(weak.suggestions), snapshotId ?? null);
|
|
231
234
|
ids.push(id);
|
|
232
235
|
}
|
|
233
236
|
});
|
|
234
|
-
|
|
237
|
+
// #1283: queued, so a locked memory.db does not freeze the MCP server.
|
|
238
|
+
await this.memory.writeWhenUnlocked(() => insertMany(weakVertices));
|
|
235
239
|
return ids;
|
|
236
240
|
}
|
|
237
241
|
/**
|
|
@@ -260,11 +264,11 @@ export class MinCutPersistence {
|
|
|
260
264
|
async resolveWeakVertex(id) {
|
|
261
265
|
this.ensureInitialized();
|
|
262
266
|
const db = this.memory.getDatabase();
|
|
263
|
-
const result = db.prepare(`
|
|
267
|
+
const result = await this.memory.writeWhenUnlocked(() => db.prepare(`
|
|
264
268
|
UPDATE mincut_weak_vertices
|
|
265
269
|
SET resolved_at = datetime('now')
|
|
266
270
|
WHERE id = ? AND resolved_at IS NULL
|
|
267
|
-
`).run(id);
|
|
271
|
+
`).run(id));
|
|
268
272
|
return result.changes > 0;
|
|
269
273
|
}
|
|
270
274
|
// ==========================================================================
|
|
@@ -276,12 +280,12 @@ export class MinCutPersistence {
|
|
|
276
280
|
async saveAlert(alert) {
|
|
277
281
|
this.ensureInitialized();
|
|
278
282
|
const db = this.memory.getDatabase();
|
|
279
|
-
db.prepare(`
|
|
283
|
+
await this.memory.writeWhenUnlocked(() => db.prepare(`
|
|
280
284
|
INSERT INTO mincut_alerts (
|
|
281
285
|
id, severity, message, mincut_value, threshold,
|
|
282
286
|
affected_vertices_json, remediations_json, acknowledged, timestamp
|
|
283
287
|
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
284
|
-
`).run(alert.id, alert.severity, alert.message, alert.minCutValue, alert.threshold, JSON.stringify(alert.affectedVertices), JSON.stringify(alert.remediations), alert.acknowledged ? 1 : 0, alert.timestamp.toISOString());
|
|
288
|
+
`).run(alert.id, alert.severity, alert.message, alert.minCutValue, alert.threshold, JSON.stringify(alert.affectedVertices), JSON.stringify(alert.remediations), alert.acknowledged ? 1 : 0, alert.timestamp.toISOString()));
|
|
285
289
|
return alert.id;
|
|
286
290
|
}
|
|
287
291
|
/**
|
|
@@ -303,13 +307,13 @@ export class MinCutPersistence {
|
|
|
303
307
|
async acknowledgeAlert(id, acknowledgedBy) {
|
|
304
308
|
this.ensureInitialized();
|
|
305
309
|
const db = this.memory.getDatabase();
|
|
306
|
-
const result = db.prepare(`
|
|
310
|
+
const result = await this.memory.writeWhenUnlocked(() => db.prepare(`
|
|
307
311
|
UPDATE mincut_alerts
|
|
308
312
|
SET acknowledged = 1,
|
|
309
313
|
acknowledged_at = datetime('now'),
|
|
310
314
|
acknowledged_by = ?
|
|
311
315
|
WHERE id = ? AND acknowledged = 0
|
|
312
|
-
`).run(acknowledgedBy ?? null, id);
|
|
316
|
+
`).run(acknowledgedBy ?? null, id));
|
|
313
317
|
return result.changes > 0;
|
|
314
318
|
}
|
|
315
319
|
/**
|
|
@@ -335,14 +339,14 @@ export class MinCutPersistence {
|
|
|
335
339
|
this.ensureInitialized();
|
|
336
340
|
const id = uuidv4();
|
|
337
341
|
const db = this.memory.getDatabase();
|
|
338
|
-
db.prepare(`
|
|
342
|
+
await this.memory.writeWhenUnlocked(() => db.prepare(`
|
|
339
343
|
INSERT INTO mincut_healing_actions (
|
|
340
344
|
id, action_type, action_params_json, success,
|
|
341
345
|
mincut_before, mincut_after, improvement,
|
|
342
346
|
error_message, duration_ms, triggered_by,
|
|
343
347
|
snapshot_before_id, snapshot_after_id
|
|
344
348
|
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
345
|
-
`).run(id, result.action.type, JSON.stringify(result.action), result.success ? 1 : 0, result.minCutBefore, result.minCutAfter, result.improvement, result.error ?? null, result.durationMs, result.triggeredBy ?? null, result.snapshotBeforeId ?? null, result.snapshotAfterId ?? null);
|
|
349
|
+
`).run(id, result.action.type, JSON.stringify(result.action), result.success ? 1 : 0, result.minCutBefore, result.minCutAfter, result.improvement, result.error ?? null, result.durationMs, result.triggeredBy ?? null, result.snapshotBeforeId ?? null, result.snapshotAfterId ?? null));
|
|
346
350
|
return id;
|
|
347
351
|
}
|
|
348
352
|
/**
|
|
@@ -408,13 +412,13 @@ export class MinCutPersistence {
|
|
|
408
412
|
if (observation.prediction) {
|
|
409
413
|
actualVsPredictedDiff = observation.minCutValue - observation.prediction.predictedMinCut;
|
|
410
414
|
}
|
|
411
|
-
db.prepare(`
|
|
415
|
+
await this.memory.writeWhenUnlocked(() => db.prepare(`
|
|
412
416
|
INSERT INTO mincut_observations (
|
|
413
417
|
id, iteration, mincut_value, weak_vertex_count,
|
|
414
418
|
weak_vertices_json, snapshot_id, prediction_json,
|
|
415
419
|
actual_vs_predicted_diff
|
|
416
420
|
) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
|
417
|
-
`).run(id, observation.iteration, observation.minCutValue, observation.weakVertices.length, JSON.stringify(observation.weakVertices.map(v => v.vertexId)), observation.snapshotId ?? null, observation.prediction ? JSON.stringify(observation.prediction) : null, actualVsPredictedDiff);
|
|
421
|
+
`).run(id, observation.iteration, observation.minCutValue, observation.weakVertices.length, JSON.stringify(observation.weakVertices.map(v => v.vertexId)), observation.snapshotId ?? null, observation.prediction ? JSON.stringify(observation.prediction) : null, actualVsPredictedDiff));
|
|
418
422
|
return id;
|
|
419
423
|
}
|
|
420
424
|
/**
|
|
@@ -474,18 +478,18 @@ export class MinCutPersistence {
|
|
|
474
478
|
const historyMaxAge = options.historyMaxAge ?? 7 * 24 * 60 * 60 * 1000; // 7 days
|
|
475
479
|
const snapshotMaxAge = options.snapshotMaxAge ?? 24 * 60 * 60 * 1000; // 1 day
|
|
476
480
|
const alertMaxAge = options.alertMaxAge ?? 30 * 24 * 60 * 60 * 1000; // 30 days
|
|
477
|
-
const historyResult = db.prepare(`
|
|
481
|
+
const historyResult = await this.memory.writeWhenUnlocked(() => db.prepare(`
|
|
478
482
|
DELETE FROM mincut_history
|
|
479
483
|
WHERE timestamp < ?
|
|
480
|
-
`).run(new Date(now - historyMaxAge).toISOString());
|
|
481
|
-
const snapshotResult = db.prepare(`
|
|
484
|
+
`).run(new Date(now - historyMaxAge).toISOString()));
|
|
485
|
+
const snapshotResult = await this.memory.writeWhenUnlocked(() => db.prepare(`
|
|
482
486
|
DELETE FROM mincut_snapshots
|
|
483
487
|
WHERE timestamp < ?
|
|
484
|
-
`).run(new Date(now - snapshotMaxAge).toISOString());
|
|
485
|
-
const alertResult = db.prepare(`
|
|
488
|
+
`).run(new Date(now - snapshotMaxAge).toISOString()));
|
|
489
|
+
const alertResult = await this.memory.writeWhenUnlocked(() => db.prepare(`
|
|
486
490
|
DELETE FROM mincut_alerts
|
|
487
491
|
WHERE timestamp < ? AND acknowledged = 1
|
|
488
|
-
`).run(new Date(now - alertMaxAge).toISOString());
|
|
492
|
+
`).run(new Date(now - alertMaxAge).toISOString()));
|
|
489
493
|
return {
|
|
490
494
|
historyDeleted: historyResult.changes,
|
|
491
495
|
snapshotsDeleted: snapshotResult.changes,
|
|
@@ -217,6 +217,10 @@ export declare class CodeIntelligenceCoordinator extends BaseDomainCoordinator<C
|
|
|
217
217
|
protected subscribeToEvents(): void;
|
|
218
218
|
private handleTestRunCompleted;
|
|
219
219
|
private handleFilesChanged;
|
|
220
|
+
/**
|
|
221
|
+
* #1230: makes every given file searchable, one file at a time (only one
|
|
222
|
+
* file's content is held at once), with no per-run file cap.
|
|
223
|
+
*/
|
|
220
224
|
indexForSearch(paths: string[]): Promise<SearchIndexSummary>;
|
|
221
225
|
private loadWorkflowState;
|
|
222
226
|
private saveWorkflowState;
|
|
@@ -59,8 +59,13 @@ const DEFAULT_CONFIG = {
|
|
|
59
59
|
* CQ-002: Extends BaseDomainCoordinator
|
|
60
60
|
*/
|
|
61
61
|
const logger = LoggerFactory.create('code-intelligence');
|
|
62
|
-
/**
|
|
63
|
-
|
|
62
|
+
/**
|
|
63
|
+
* #1230: after this many files in a row fail to embed, an index run stops
|
|
64
|
+
* asking the embedding model and stores the remaining files as text only.
|
|
65
|
+
* Each failed embed costs the client's retries and backoff (about 3s), which
|
|
66
|
+
* would otherwise dominate a large run while the model is down.
|
|
67
|
+
*/
|
|
68
|
+
const MAX_CONSECUTIVE_EMBED_FAILURES = 3;
|
|
64
69
|
export class CodeIntelligenceCoordinator extends BaseDomainCoordinator {
|
|
65
70
|
memory;
|
|
66
71
|
agentCoordinator;
|
|
@@ -761,19 +766,39 @@ export class CodeIntelligenceCoordinator extends BaseDomainCoordinator {
|
|
|
761
766
|
// ============================================================================
|
|
762
767
|
// Helper Methods
|
|
763
768
|
// ============================================================================
|
|
769
|
+
/**
|
|
770
|
+
* #1230: makes every given file searchable, one file at a time (only one
|
|
771
|
+
* file's content is held at once), with no per-run file cap.
|
|
772
|
+
*/
|
|
764
773
|
async indexForSearch(paths) {
|
|
765
|
-
// Index a subset of files for search
|
|
766
|
-
// Limit to 100 files for performance in a single batch
|
|
767
|
-
const filesToIndex = paths.slice(0, SEARCH_INDEX_FILE_LIMIT);
|
|
768
774
|
let searchable = 0;
|
|
769
|
-
|
|
775
|
+
let withVector = 0;
|
|
776
|
+
let embedFailures = 0;
|
|
777
|
+
let consecutiveEmbedFailures = 0;
|
|
778
|
+
let lastEmbedFailure;
|
|
779
|
+
let notEmbedded = 0;
|
|
780
|
+
for (const path of paths) {
|
|
770
781
|
try {
|
|
771
782
|
// Read actual file content
|
|
772
783
|
const result = await this.fileReader.readFile(path);
|
|
773
|
-
if (result.success
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
784
|
+
if (!result.success || !result.value)
|
|
785
|
+
continue;
|
|
786
|
+
const embed = consecutiveEmbedFailures < MAX_CONSECUTIVE_EMBED_FAILURES;
|
|
787
|
+
const indexed = await this.semanticAnalyzer.indexCode(path, result.value, { embed });
|
|
788
|
+
if (!indexed.success)
|
|
789
|
+
continue;
|
|
790
|
+
searchable++;
|
|
791
|
+
if (indexed.value.vector) {
|
|
792
|
+
withVector++;
|
|
793
|
+
consecutiveEmbedFailures = 0;
|
|
794
|
+
}
|
|
795
|
+
else if (indexed.value.vectorFailure !== undefined) {
|
|
796
|
+
embedFailures++;
|
|
797
|
+
consecutiveEmbedFailures++;
|
|
798
|
+
lastEmbedFailure = indexed.value.vectorFailure;
|
|
799
|
+
}
|
|
800
|
+
else if (!embed) {
|
|
801
|
+
notEmbedded++;
|
|
777
802
|
}
|
|
778
803
|
}
|
|
779
804
|
catch {
|
|
@@ -783,9 +808,17 @@ export class CodeIntelligenceCoordinator extends BaseDomainCoordinator {
|
|
|
783
808
|
// #1224: say when search will not see every indexed file.
|
|
784
809
|
const warnings = [];
|
|
785
810
|
if (searchable < paths.length) {
|
|
786
|
-
warnings.push(`Search covers ${searchable} of ${paths.length} indexed files` +
|
|
787
|
-
|
|
788
|
-
|
|
811
|
+
warnings.push(`Search covers ${searchable} of ${paths.length} indexed files; ` +
|
|
812
|
+
'the other files could not be added to the search index, so code in them is not found by search.');
|
|
813
|
+
}
|
|
814
|
+
// #1231: say which files a semantic search can only match by text.
|
|
815
|
+
if (embedFailures > 0) {
|
|
816
|
+
warnings.push(`The embedding model failed for ${embedFailures} file(s) (${lastEmbedFailure})` +
|
|
817
|
+
(notEmbedded > 0
|
|
818
|
+
? `, so it was not asked for the remaining ${notEmbedded} file(s) of this run`
|
|
819
|
+
: '') +
|
|
820
|
+
`. ${searchable - withVector} of ${searchable} searchable files have no vector; ` +
|
|
821
|
+
'semantic search matches them by text only. Re-index when the model is available.');
|
|
789
822
|
}
|
|
790
823
|
return { searchable, warnings };
|
|
791
824
|
}
|