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
|
@@ -75,9 +75,18 @@ export interface SearchResults {
|
|
|
75
75
|
* #1224, semantic searches only: 'vector' when an embedding model ranked the
|
|
76
76
|
* results, 'lexical-only' when none was available and query words were
|
|
77
77
|
* matched against the indexed text instead (`reason` says why).
|
|
78
|
+
* #1231: 'partial-vector' when only some indexed files have a vector; the
|
|
79
|
+
* others were matched by text (hits with `matchType: 'lexical'`) and
|
|
80
|
+
* `coverage` gives the counts.
|
|
78
81
|
*/
|
|
79
|
-
mode?: 'vector' | 'lexical-only';
|
|
82
|
+
mode?: 'vector' | 'partial-vector' | 'lexical-only';
|
|
80
83
|
reason?: string;
|
|
84
|
+
/** #1231, semantic searches that ranked by vector: how many indexed files have a vector. */
|
|
85
|
+
coverage?: SearchVectorCoverage;
|
|
86
|
+
}
|
|
87
|
+
export interface SearchVectorCoverage {
|
|
88
|
+
indexedFiles: number;
|
|
89
|
+
filesWithVector: number;
|
|
81
90
|
}
|
|
82
91
|
export interface SearchResult {
|
|
83
92
|
file: string;
|
|
@@ -11,6 +11,17 @@ import { SearchRequest, SearchResults, SearchResult } from '../interfaces';
|
|
|
11
11
|
* reported after searching an index that holds code.
|
|
12
12
|
*/
|
|
13
13
|
export declare const NOTHING_INDEXED_FOR_SEARCH: string;
|
|
14
|
+
export interface IndexCodeOptions {
|
|
15
|
+
/** false: store the text only, without asking the embedding model (#1230: it kept failing this run). */
|
|
16
|
+
embed?: boolean;
|
|
17
|
+
}
|
|
18
|
+
/** What indexCode stored for a file. */
|
|
19
|
+
export interface IndexedCode {
|
|
20
|
+
/** A vector from the current embedding model was stored. */
|
|
21
|
+
vector: boolean;
|
|
22
|
+
/** Set when an embedding model is configured but failed for this file. */
|
|
23
|
+
vectorFailure?: string;
|
|
24
|
+
}
|
|
14
25
|
/**
|
|
15
26
|
* Interface for the semantic analyzer service
|
|
16
27
|
*/
|
|
@@ -18,7 +29,7 @@ export interface ISemanticAnalyzerService {
|
|
|
18
29
|
/** Perform semantic search across codebase */
|
|
19
30
|
search(request: SearchRequest): Promise<Result<SearchResults, Error>>;
|
|
20
31
|
/** Index code for semantic search */
|
|
21
|
-
indexCode(file: string, content: string): Promise<Result<
|
|
32
|
+
indexCode(file: string, content: string, options?: IndexCodeOptions): Promise<Result<IndexedCode, Error>>;
|
|
22
33
|
/** Find semantically similar code */
|
|
23
34
|
findSimilar(code: string, limit?: number): Promise<Result<SearchResult[], Error>>;
|
|
24
35
|
/** Analyze code semantics */
|
|
@@ -113,7 +124,7 @@ export declare class SemanticAnalyzerService implements ISemanticAnalyzerService
|
|
|
113
124
|
/**
|
|
114
125
|
* Index code content for semantic search
|
|
115
126
|
*/
|
|
116
|
-
indexCode(file: string, content: string): Promise<Result<
|
|
127
|
+
indexCode(file: string, content: string, options?: IndexCodeOptions): Promise<Result<IndexedCode, Error>>;
|
|
117
128
|
/**
|
|
118
129
|
* Find semantically similar code
|
|
119
130
|
*/
|
|
@@ -139,17 +150,35 @@ export declare class SemanticAnalyzerService implements ISemanticAnalyzerService
|
|
|
139
150
|
private isCurrentModelVector;
|
|
140
151
|
private vectorKeyPrefix;
|
|
141
152
|
private contentKeyPattern;
|
|
153
|
+
/** Visits every indexed file's stored content, one at a time. */
|
|
154
|
+
private forEachIndexed;
|
|
142
155
|
/**
|
|
143
156
|
* #1224: vector search when an embedding model is available. Otherwise (or
|
|
144
157
|
* when no indexed file has a vector from that model) it matches query words
|
|
145
|
-
* against the indexed text and
|
|
146
|
-
* similarity is invented for those hits.
|
|
158
|
+
* against the indexed text and reports `mode: 'lexical-only'` with the
|
|
159
|
+
* reason; no similarity is invented for those hits.
|
|
147
160
|
*/
|
|
148
161
|
private semanticSearch;
|
|
162
|
+
/**
|
|
163
|
+
* #1231: files indexed while the embedding model was unavailable have no
|
|
164
|
+
* vector, so vector search cannot rank them. Match those by text, label the
|
|
165
|
+
* hits 'lexical', and report the result as 'partial-vector' with the counts.
|
|
166
|
+
* Cosine and text-match scores are not comparable, so vector hits come
|
|
167
|
+
* first (by cosine), then lexical hits (by share of query words found, ties
|
|
168
|
+
* by text relevance, #1287); the reason says how many text matches the
|
|
169
|
+
* limit left out.
|
|
170
|
+
*/
|
|
171
|
+
private withVectorlessFiles;
|
|
149
172
|
/** Word-overlap matching for a semantic query when no vectors can be used. */
|
|
150
173
|
private lexicalSearch;
|
|
151
174
|
private exactSearch;
|
|
152
175
|
private fuzzySearch;
|
|
176
|
+
/**
|
|
177
|
+
* Token-overlap match of one indexed file, or null when it is filtered out or
|
|
178
|
+
* scores too low. The score is the share of query words found; `relevance`
|
|
179
|
+
* only orders equal scores (#1287).
|
|
180
|
+
*/
|
|
181
|
+
private fuzzyMatch;
|
|
153
182
|
private extractConcepts;
|
|
154
183
|
private detectPatterns;
|
|
155
184
|
private calculateComplexity;
|
|
@@ -160,9 +189,10 @@ export declare class SemanticAnalyzerService implements ISemanticAnalyzerService
|
|
|
160
189
|
private tokenize;
|
|
161
190
|
private calculateFuzzyScore;
|
|
162
191
|
/**
|
|
163
|
-
* A
|
|
164
|
-
*
|
|
165
|
-
*
|
|
192
|
+
* A query word is found when a content word contains it (or equals it):
|
|
193
|
+
* "login" is found in `loginWithPassword`. #1279: not the reverse; a query
|
|
194
|
+
* word such as `stepHandler450` is not found just because the file has the
|
|
195
|
+
* shorter word `step`, which made almost every file a full match.
|
|
166
196
|
*/
|
|
167
197
|
private tokensMatch;
|
|
168
198
|
private matchesFilters;
|
|
@@ -6,12 +6,15 @@ import { createHash } from 'node:crypto';
|
|
|
6
6
|
import { ok, err } from '../../../shared/types/index.js';
|
|
7
7
|
import { NomicEmbedder, EMBEDDING_CONFIG, } from '../../../shared/embeddings/index.js';
|
|
8
8
|
import { toError } from '../../../shared/error-utils.js';
|
|
9
|
+
import { compareTextRelevance, textRelevance } from './text-relevance.js';
|
|
9
10
|
/**
|
|
10
11
|
* #1224: the message for a search over an empty index. "No results" is only
|
|
11
12
|
* reported after searching an index that holds code.
|
|
12
13
|
*/
|
|
13
14
|
export const NOTHING_INDEXED_FOR_SEARCH = 'No code is indexed for search yet, so the search was not run. ' +
|
|
14
15
|
'Index the project first (MCP code_index, or `aqe code index <path>`), then search again.';
|
|
16
|
+
/** Highest score first; equal scores by text relevance (#1287). */
|
|
17
|
+
const byScoreThenRelevance = (a, b) => b.hit.score - a.hit.score || compareTextRelevance(a.relevance, b.relevance);
|
|
15
18
|
/** Upper bound on indexed files one exact/fuzzy search reads. */
|
|
16
19
|
const MAX_INDEXED_FILES_SCANNED = 100_000;
|
|
17
20
|
const DEFAULT_CONFIG = {
|
|
@@ -60,17 +63,17 @@ export class SemanticAnalyzerService {
|
|
|
60
63
|
...this.config.nomicConfig,
|
|
61
64
|
enableFallback: false,
|
|
62
65
|
});
|
|
63
|
-
//
|
|
64
|
-
|
|
65
|
-
|
|
66
|
+
// #1229: Ollama lists the model under its own name (all-minilm:22m);
|
|
67
|
+
// the reason says whether Ollama is down or lacks the model.
|
|
68
|
+
const check = await nomicEmbedder.checkModel();
|
|
69
|
+
if (check.status === 'available') {
|
|
66
70
|
this.embedder = nomicEmbedder;
|
|
67
71
|
// Update dimension to match Nomic's output
|
|
68
72
|
this.config.embeddingDimension =
|
|
69
73
|
EMBEDDING_CONFIG.DIMENSIONS;
|
|
70
74
|
}
|
|
71
75
|
else {
|
|
72
|
-
this.embedderUnavailableReason =
|
|
73
|
-
`no embedding model available (Ollama model '${EMBEDDING_CONFIG.MODEL}' is not reachable)`;
|
|
76
|
+
this.embedderUnavailableReason = `no embedding model available (${check.reason})`;
|
|
74
77
|
}
|
|
75
78
|
}
|
|
76
79
|
else {
|
|
@@ -94,12 +97,12 @@ export class SemanticAnalyzerService {
|
|
|
94
97
|
return err(new Error(NOTHING_INDEXED_FOR_SEARCH));
|
|
95
98
|
}
|
|
96
99
|
let results;
|
|
97
|
-
let
|
|
100
|
+
let semanticOutcome = {};
|
|
98
101
|
switch (type) {
|
|
99
102
|
case 'semantic': {
|
|
100
|
-
const
|
|
101
|
-
results =
|
|
102
|
-
|
|
103
|
+
const { results: hits, ...outcome } = await this.semanticSearch(query, limit, scope, filters);
|
|
104
|
+
results = hits;
|
|
105
|
+
semanticOutcome = outcome;
|
|
103
106
|
break;
|
|
104
107
|
}
|
|
105
108
|
case 'exact':
|
|
@@ -116,11 +119,7 @@ export class SemanticAnalyzerService {
|
|
|
116
119
|
results,
|
|
117
120
|
total: results.length,
|
|
118
121
|
searchTime,
|
|
119
|
-
...
|
|
120
|
-
? lexicalOnlyReason === undefined
|
|
121
|
-
? { mode: 'vector' }
|
|
122
|
-
: { mode: 'lexical-only', reason: lexicalOnlyReason }
|
|
123
|
-
: {}),
|
|
122
|
+
...semanticOutcome,
|
|
124
123
|
});
|
|
125
124
|
}
|
|
126
125
|
catch (error) {
|
|
@@ -130,13 +129,13 @@ export class SemanticAnalyzerService {
|
|
|
130
129
|
/**
|
|
131
130
|
* Index code content for semantic search
|
|
132
131
|
*/
|
|
133
|
-
async indexCode(file, content) {
|
|
132
|
+
async indexCode(file, content, options = {}) {
|
|
134
133
|
try {
|
|
135
134
|
// Extract code metadata
|
|
136
135
|
const metadata = this.extractCodeMetadata(file, content);
|
|
137
136
|
// #1224: store a vector only when a real embedding model produced one;
|
|
138
137
|
// without it the file is still searchable by text.
|
|
139
|
-
const embedded = await this.tryEmbed(content);
|
|
138
|
+
const embedded = options.embed === false ? {} : await this.tryEmbed(content);
|
|
140
139
|
if (embedded.vector) {
|
|
141
140
|
const key = `${this.vectorKeyPrefix()}${this.fileToKey(file)}`;
|
|
142
141
|
await this.memory.storeVector(key, embedded.vector, {
|
|
@@ -153,8 +152,15 @@ export class SemanticAnalyzerService {
|
|
|
153
152
|
// namespace, and a write with {namespace} could not be read back without
|
|
154
153
|
// the same option (issue #491 Bug 2) — which silently dropped every
|
|
155
154
|
// search result (#511 follow-up).
|
|
156
|
-
|
|
157
|
-
|
|
155
|
+
const stored = embedded.vector
|
|
156
|
+
? { file, content, metadata, embeddingModel: this.embeddingModelId() }
|
|
157
|
+
: { file, content, metadata };
|
|
158
|
+
await this.memory.set(`${this.config.namespace}:content:${this.fileToKey(file)}`, stored);
|
|
159
|
+
return ok(embedded.vector
|
|
160
|
+
? { vector: true }
|
|
161
|
+
: this.embedder && embedded.reason
|
|
162
|
+
? { vector: false, vectorFailure: embedded.reason }
|
|
163
|
+
: { vector: false });
|
|
158
164
|
}
|
|
159
165
|
catch (error) {
|
|
160
166
|
return err(toError(error));
|
|
@@ -273,7 +279,7 @@ export class SemanticAnalyzerService {
|
|
|
273
279
|
}
|
|
274
280
|
/** Identifies the model behind stored vectors, so vectors from another model are not compared. */
|
|
275
281
|
embeddingModelId() {
|
|
276
|
-
return this.embedder instanceof NomicEmbedder ?
|
|
282
|
+
return this.embedder instanceof NomicEmbedder ? this.embedder.getModelId() : 'injected-provider';
|
|
277
283
|
}
|
|
278
284
|
isCurrentModelVector(metadata) {
|
|
279
285
|
return metadata.embeddingModel === this.embeddingModelId();
|
|
@@ -284,21 +290,31 @@ export class SemanticAnalyzerService {
|
|
|
284
290
|
contentKeyPattern() {
|
|
285
291
|
return `${this.config.namespace}:content:*`;
|
|
286
292
|
}
|
|
293
|
+
/** Visits every indexed file's stored content, one at a time. */
|
|
294
|
+
async forEachIndexed(visit) {
|
|
295
|
+
const keys = await this.memory.search(this.contentKeyPattern(), MAX_INDEXED_FILES_SCANNED);
|
|
296
|
+
for (const key of keys) {
|
|
297
|
+
const stored = await this.memory.get(key);
|
|
298
|
+
if (stored)
|
|
299
|
+
visit(stored);
|
|
300
|
+
}
|
|
301
|
+
}
|
|
287
302
|
// ============================================================================
|
|
288
303
|
// Private Search Methods
|
|
289
304
|
// ============================================================================
|
|
290
305
|
/**
|
|
291
306
|
* #1224: vector search when an embedding model is available. Otherwise (or
|
|
292
307
|
* when no indexed file has a vector from that model) it matches query words
|
|
293
|
-
* against the indexed text and
|
|
294
|
-
* similarity is invented for those hits.
|
|
308
|
+
* against the indexed text and reports `mode: 'lexical-only'` with the
|
|
309
|
+
* reason; no similarity is invented for those hits.
|
|
295
310
|
*/
|
|
296
311
|
async semanticSearch(query, limit, scope, filters) {
|
|
297
312
|
const embedded = await this.tryEmbed(query);
|
|
298
313
|
if (!embedded.vector) {
|
|
299
314
|
return {
|
|
300
315
|
results: await this.lexicalSearch(query, limit, scope, filters),
|
|
301
|
-
|
|
316
|
+
mode: 'lexical-only',
|
|
317
|
+
reason: embedded.reason,
|
|
302
318
|
};
|
|
303
319
|
}
|
|
304
320
|
// Only this namespace's vectors, from the model that embedded the query.
|
|
@@ -310,7 +326,8 @@ export class SemanticAnalyzerService {
|
|
|
310
326
|
if (vectorResults.length === 0) {
|
|
311
327
|
return {
|
|
312
328
|
results: await this.lexicalSearch(query, limit, scope, filters),
|
|
313
|
-
|
|
329
|
+
mode: 'lexical-only',
|
|
330
|
+
reason: `no indexed file has an embedding from ${this.embeddingModelId()}; re-index to enable vector search`,
|
|
314
331
|
};
|
|
315
332
|
}
|
|
316
333
|
// Convert to search results with filtering
|
|
@@ -345,7 +362,57 @@ export class SemanticAnalyzerService {
|
|
|
345
362
|
break;
|
|
346
363
|
}
|
|
347
364
|
}
|
|
348
|
-
return
|
|
365
|
+
return this.withVectorlessFiles(query, results, limit, scope, filters);
|
|
366
|
+
}
|
|
367
|
+
/**
|
|
368
|
+
* #1231: files indexed while the embedding model was unavailable have no
|
|
369
|
+
* vector, so vector search cannot rank them. Match those by text, label the
|
|
370
|
+
* hits 'lexical', and report the result as 'partial-vector' with the counts.
|
|
371
|
+
* Cosine and text-match scores are not comparable, so vector hits come
|
|
372
|
+
* first (by cosine), then lexical hits (by share of query words found, ties
|
|
373
|
+
* by text relevance, #1287); the reason says how many text matches the
|
|
374
|
+
* limit left out.
|
|
375
|
+
*/
|
|
376
|
+
async withVectorlessFiles(query, vectorHits, limit, scope, filters) {
|
|
377
|
+
const model = this.embeddingModelId();
|
|
378
|
+
const vectorFiles = new Set(vectorHits.map((hit) => hit.file));
|
|
379
|
+
const queryTokens = this.tokenize(query.toLowerCase());
|
|
380
|
+
const lexicalHits = [];
|
|
381
|
+
let indexedFiles = 0;
|
|
382
|
+
let withoutVector = 0;
|
|
383
|
+
await this.forEachIndexed((stored) => {
|
|
384
|
+
indexedFiles++;
|
|
385
|
+
if (stored.embeddingModel === model)
|
|
386
|
+
return;
|
|
387
|
+
withoutVector++;
|
|
388
|
+
if (vectorFiles.has(stored.file))
|
|
389
|
+
return;
|
|
390
|
+
const match = this.fuzzyMatch(query, queryTokens, stored, scope, filters);
|
|
391
|
+
if (match)
|
|
392
|
+
lexicalHits.push({ ...match, hit: { ...match.hit, matchType: 'lexical' } });
|
|
393
|
+
});
|
|
394
|
+
const coverage = { indexedFiles, filesWithVector: indexedFiles - withoutVector };
|
|
395
|
+
if (withoutVector === 0) {
|
|
396
|
+
return { results: vectorHits, mode: 'vector', coverage };
|
|
397
|
+
}
|
|
398
|
+
const byScore = (a, b) => b.score - a.score;
|
|
399
|
+
const results = [
|
|
400
|
+
...[...vectorHits].sort(byScore),
|
|
401
|
+
...lexicalHits.sort(byScoreThenRelevance).map((match) => match.hit),
|
|
402
|
+
].slice(0, limit);
|
|
403
|
+
const droppedLexical = vectorHits.length + lexicalHits.length - results.length;
|
|
404
|
+
return {
|
|
405
|
+
results,
|
|
406
|
+
mode: 'partial-vector',
|
|
407
|
+
reason: `${withoutVector} of ${indexedFiles} indexed files have no embedding from ${model} ` +
|
|
408
|
+
'(it was unavailable when they were indexed, or an older aqe version indexed them), ' +
|
|
409
|
+
'so they were matched by text only (matchType "lexical", listed after the vector hits); ' +
|
|
410
|
+
(droppedLexical > 0
|
|
411
|
+
? `${droppedLexical} more text match(es) were left out by the limit of ${limit}; `
|
|
412
|
+
: '') +
|
|
413
|
+
're-index to rank them by vector',
|
|
414
|
+
coverage,
|
|
415
|
+
};
|
|
349
416
|
}
|
|
350
417
|
/** Word-overlap matching for a semantic query when no vectors can be used. */
|
|
351
418
|
async lexicalSearch(query, limit, scope, filters) {
|
|
@@ -389,39 +456,45 @@ export class SemanticAnalyzerService {
|
|
|
389
456
|
return results;
|
|
390
457
|
}
|
|
391
458
|
async fuzzySearch(query, limit, scope, filters) {
|
|
392
|
-
const
|
|
393
|
-
const keys = await this.memory.search(this.contentKeyPattern(), MAX_INDEXED_FILES_SCANNED);
|
|
459
|
+
const matches = [];
|
|
394
460
|
const queryTokens = this.tokenize(query.toLowerCase());
|
|
395
|
-
|
|
396
|
-
const
|
|
397
|
-
if (
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
461
|
+
await this.forEachIndexed((stored) => {
|
|
462
|
+
const match = this.fuzzyMatch(query, queryTokens, stored, scope, filters);
|
|
463
|
+
if (match)
|
|
464
|
+
matches.push(match);
|
|
465
|
+
});
|
|
466
|
+
// Sort by score, ties by relevance (#1287), and limit
|
|
467
|
+
return matches.sort(byScoreThenRelevance).slice(0, limit).map((match) => match.hit);
|
|
468
|
+
}
|
|
469
|
+
/**
|
|
470
|
+
* Token-overlap match of one indexed file, or null when it is filtered out or
|
|
471
|
+
* scores too low. The score is the share of query words found; `relevance`
|
|
472
|
+
* only orders equal scores (#1287).
|
|
473
|
+
*/
|
|
474
|
+
fuzzyMatch(query, queryTokens, stored, scope, filters) {
|
|
475
|
+
// Apply scope filter
|
|
476
|
+
if (scope && scope.length > 0 && !scope.some((s) => stored.file.includes(s))) {
|
|
477
|
+
return null;
|
|
478
|
+
}
|
|
479
|
+
// Apply filters
|
|
480
|
+
if (filters && !this.matchesFilters(stored.metadata, filters)) {
|
|
481
|
+
return null;
|
|
482
|
+
}
|
|
483
|
+
// Fuzzy match using token overlap
|
|
484
|
+
const contentTokens = this.tokenize(stored.content.toLowerCase());
|
|
485
|
+
const score = this.calculateFuzzyScore(queryTokens, contentTokens);
|
|
486
|
+
if (score < this.config.minScore)
|
|
487
|
+
return null;
|
|
488
|
+
return {
|
|
489
|
+
hit: {
|
|
490
|
+
file: stored.file,
|
|
491
|
+
snippet: this.extractSnippet(stored.content, 200),
|
|
492
|
+
score,
|
|
493
|
+
highlights: queryTokens.filter((t) => contentTokens.some((ct) => this.tokensMatch(t, ct))),
|
|
494
|
+
metadata: stored.metadata,
|
|
495
|
+
},
|
|
496
|
+
relevance: textRelevance(query, stored.content),
|
|
497
|
+
};
|
|
425
498
|
}
|
|
426
499
|
// ============================================================================
|
|
427
500
|
// Private Analysis Methods
|
|
@@ -625,13 +698,13 @@ export class SemanticAnalyzerService {
|
|
|
625
698
|
return matches / queryTokens.length;
|
|
626
699
|
}
|
|
627
700
|
/**
|
|
628
|
-
* A
|
|
629
|
-
*
|
|
630
|
-
*
|
|
701
|
+
* A query word is found when a content word contains it (or equals it):
|
|
702
|
+
* "login" is found in `loginWithPassword`. #1279: not the reverse; a query
|
|
703
|
+
* word such as `stepHandler450` is not found just because the file has the
|
|
704
|
+
* shorter word `step`, which made almost every file a full match.
|
|
631
705
|
*/
|
|
632
706
|
tokensMatch(queryToken, contentToken) {
|
|
633
|
-
return contentToken.includes(queryToken)
|
|
634
|
-
(contentToken.length >= 3 && queryToken.includes(contentToken));
|
|
707
|
+
return contentToken.includes(queryToken);
|
|
635
708
|
}
|
|
636
709
|
matchesFilters(metadata, filters) {
|
|
637
710
|
for (const filter of filters) {
|
|
@@ -683,7 +756,7 @@ export class SemanticAnalyzerService {
|
|
|
683
756
|
const queryTokens = this.tokenize(query.toLowerCase());
|
|
684
757
|
const contentTokens = this.tokenize(content.toLowerCase());
|
|
685
758
|
for (const qt of queryTokens) {
|
|
686
|
-
const match = contentTokens.find((ct) =>
|
|
759
|
+
const match = contentTokens.find((ct) => this.tokensMatch(qt, ct));
|
|
687
760
|
if (match && !highlights.includes(match)) {
|
|
688
761
|
highlights.push(match);
|
|
689
762
|
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 - Text match relevance (#1287)
|
|
3
|
+
*
|
|
4
|
+
* Text matching scores a file by the share of query words it contains, so
|
|
5
|
+
* every file containing all of them scores 1.0. This ranks those ties by how
|
|
6
|
+
* well the file matches the query, without changing the score itself.
|
|
7
|
+
*/
|
|
8
|
+
/** How well one file's text matches a query. Higher fields rank first, in this order. */
|
|
9
|
+
export interface TextRelevance {
|
|
10
|
+
/**
|
|
11
|
+
* 2: an identifier is exactly the query words (`processOrder`, `process_order`
|
|
12
|
+
* for "process order"); 1: the query words appear next to each other
|
|
13
|
+
* (`process the order` does not, `process order` and `processOrderItems` do);
|
|
14
|
+
* 0: scattered, or the query is a single word.
|
|
15
|
+
*/
|
|
16
|
+
adjacency: number;
|
|
17
|
+
/** Share of query words found as a whole word (`order`), not only inside one (`orders`, `reorder`). */
|
|
18
|
+
exactWords: number;
|
|
19
|
+
/** Number of words in the file that contain a query word. */
|
|
20
|
+
occurrences: number;
|
|
21
|
+
}
|
|
22
|
+
/** Splits an identifier into lowercase words: `processOrder`, `process_order`, `PROCESS_ORDER` → process, order. */
|
|
23
|
+
export declare function identifierWords(identifier: string): string[];
|
|
24
|
+
/**
|
|
25
|
+
* Relevance of `content` to `query`. Words are compared case-insensitively,
|
|
26
|
+
* and identifiers are split into words, so the query `process order` matches
|
|
27
|
+
* the identifier `processOrder` as adjacent whole words.
|
|
28
|
+
*/
|
|
29
|
+
export declare function textRelevance(query: string, content: string): TextRelevance;
|
|
30
|
+
/** Sort comparator: more relevant first. */
|
|
31
|
+
export declare function compareTextRelevance(a: TextRelevance, b: TextRelevance): number;
|
|
32
|
+
//# sourceMappingURL=text-relevance.d.ts.map
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 - Text match relevance (#1287)
|
|
3
|
+
*
|
|
4
|
+
* Text matching scores a file by the share of query words it contains, so
|
|
5
|
+
* every file containing all of them scores 1.0. This ranks those ties by how
|
|
6
|
+
* well the file matches the query, without changing the score itself.
|
|
7
|
+
*/
|
|
8
|
+
/** Splits an identifier into lowercase words: `processOrder`, `process_order`, `PROCESS_ORDER` → process, order. */
|
|
9
|
+
export function identifierWords(identifier) {
|
|
10
|
+
return identifier
|
|
11
|
+
.replace(/([a-z0-9])([A-Z])/g, '$1 $2')
|
|
12
|
+
.replace(/([A-Z]+)([A-Z][a-z])/g, '$1 $2')
|
|
13
|
+
.split(/[^A-Za-z0-9]+/)
|
|
14
|
+
.filter((word) => word.length > 0)
|
|
15
|
+
.map((word) => word.toLowerCase());
|
|
16
|
+
}
|
|
17
|
+
function identifiers(text) {
|
|
18
|
+
return text.split(/[^\w]+/).filter((token) => token.length > 0);
|
|
19
|
+
}
|
|
20
|
+
/** Whether `words` appears in `stream` as consecutive entries. */
|
|
21
|
+
function containsRun(stream, words) {
|
|
22
|
+
outer: for (let i = 0; i + words.length <= stream.length; i++) {
|
|
23
|
+
for (let j = 0; j < words.length; j++) {
|
|
24
|
+
if (stream[i + j] !== words[j])
|
|
25
|
+
continue outer;
|
|
26
|
+
}
|
|
27
|
+
return true;
|
|
28
|
+
}
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Relevance of `content` to `query`. Words are compared case-insensitively,
|
|
33
|
+
* and identifiers are split into words, so the query `process order` matches
|
|
34
|
+
* the identifier `processOrder` as adjacent whole words.
|
|
35
|
+
*/
|
|
36
|
+
export function textRelevance(query, content) {
|
|
37
|
+
const queryWords = identifiers(query).flatMap(identifierWords);
|
|
38
|
+
const contentIdentifiers = identifiers(content);
|
|
39
|
+
const lowerIdentifiers = contentIdentifiers.map((token) => token.toLowerCase());
|
|
40
|
+
const splitIdentifiers = contentIdentifiers.map(identifierWords);
|
|
41
|
+
const contentWords = new Set([...lowerIdentifiers, ...splitIdentifiers.flat()]);
|
|
42
|
+
const queryTokens = identifiers(query.toLowerCase());
|
|
43
|
+
let adjacency = 0;
|
|
44
|
+
if (queryWords.length > 1) {
|
|
45
|
+
const phrase = queryWords.join(' ');
|
|
46
|
+
if (splitIdentifiers.some((words) => words.join(' ') === phrase))
|
|
47
|
+
adjacency = 2;
|
|
48
|
+
else if (containsRun(splitIdentifiers.flat(), queryWords))
|
|
49
|
+
adjacency = 1;
|
|
50
|
+
}
|
|
51
|
+
return {
|
|
52
|
+
adjacency,
|
|
53
|
+
exactWords: queryWords.length === 0
|
|
54
|
+
? 0
|
|
55
|
+
: queryWords.filter((word) => contentWords.has(word)).length / queryWords.length,
|
|
56
|
+
occurrences: lowerIdentifiers.filter((token) => queryTokens.some((qt) => token.includes(qt))).length,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
/** Sort comparator: more relevant first. */
|
|
60
|
+
export function compareTextRelevance(a, b) {
|
|
61
|
+
return b.adjacency - a.adjacency || b.exactWords - a.exactWords || b.occurrences - a.occurrences;
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=text-relevance.js.map
|
|
@@ -512,7 +512,7 @@ Provide:
|
|
|
512
512
|
const contextFingerprint = `${experience.domain}:${experience.action}`;
|
|
513
513
|
for (const patternId of experience.appliedPatternIds ?? []) {
|
|
514
514
|
try {
|
|
515
|
-
nullStore.
|
|
515
|
+
await nullStore.recordNullWhenUnlocked({
|
|
516
516
|
patternId,
|
|
517
517
|
contextFingerprint,
|
|
518
518
|
failureMode: String(experience.result.outcome?.error ?? experience.action),
|
|
@@ -284,7 +284,8 @@ export class QualityAssessmentCoordinator extends BaseDomainCoordinator {
|
|
|
284
284
|
// ADR-070: Record quality gate decision in witness chain
|
|
285
285
|
try {
|
|
286
286
|
const wc = await getWitnessChain();
|
|
287
|
-
|
|
287
|
+
// #1283: queued, so a locked memory.db does not freeze the MCP server.
|
|
288
|
+
await wc.appendWhenUnlocked(finalResult.passed ? 'QUALITY_GATE_PASS' : 'QUALITY_GATE_FAIL', { gateName: request.gateName, passed: finalResult.passed, score: finalResult.overallScore, failedChecks: finalResult.failedChecks }, 'quality-gate');
|
|
288
289
|
}
|
|
289
290
|
catch (_wcErr) { /* non-critical */ }
|
|
290
291
|
// ADR-062: Monotonic gate threshold ratcheting
|
|
@@ -131,7 +131,9 @@ export declare class TestExecutionCoordinator extends BaseDomainCoordinator<Test
|
|
|
131
131
|
*/
|
|
132
132
|
private retryFailures;
|
|
133
133
|
/**
|
|
134
|
-
*
|
|
134
|
+
* Fallback framework from file names. With no explicit framework, each
|
|
135
|
+
* runner project's own config still decides between jest and vitest (#1272),
|
|
136
|
+
* and Python files always run with pytest (#1248).
|
|
135
137
|
*/
|
|
136
138
|
private detectFramework;
|
|
137
139
|
/**
|