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.
Files changed (526) hide show
  1. package/.claude/skills/skills-manifest.json +1 -1
  2. package/CHANGELOG.md +168 -0
  3. package/assets/skills/skills-manifest.json +1 -1
  4. package/dist/audit/witness-chain.d.ts +7 -0
  5. package/dist/audit/witness-chain.js +10 -0
  6. package/dist/cli/bundle.js +6 -6
  7. package/dist/cli/chunks/adapter-OMILP6KH.js +2 -0
  8. package/dist/cli/chunks/{agent-booster-wasm-EUF4XVUC.js → agent-booster-wasm-6BUOFQZA.js} +2 -2
  9. package/dist/cli/chunks/{agent-handler-MOX6PSIQ.js → agent-handler-HPDK3JI3.js} +2 -2
  10. package/dist/cli/chunks/{agent-memory-branch-AEXKIGDG.js → agent-memory-branch-5QKUTWK5.js} +2 -2
  11. package/dist/cli/chunks/aqe-learning-engine-OXH5CCOS.js +2 -0
  12. package/dist/cli/chunks/{arena-IQ5ZZDRF.js → arena-7OKPMNHD.js} +2 -2
  13. package/dist/cli/chunks/{arena-M7GA3CVG.js → arena-HZ35LESR.js} +4 -4
  14. package/dist/cli/chunks/{audit-4IPBMKWB.js → audit-XI575SVK.js} +3 -3
  15. package/dist/cli/chunks/base-MAK2BLTG.js +2 -0
  16. package/dist/cli/chunks/{better-sqlite3-IKDKJ2IE.js → better-sqlite3-YO5X7ZJS.js} +2 -2
  17. package/dist/cli/chunks/{brain-handler-5NQUDH4W.js → brain-handler-GCQZFZGQ.js} +3 -3
  18. package/dist/cli/chunks/{branch-enumerator-KSXELWRC.js → branch-enumerator-N6G44UU2.js} +2 -2
  19. package/dist/cli/chunks/{browser-6LACARWE.js → browser-EVKPTLOI.js} +2 -2
  20. package/dist/cli/chunks/browser-workflow-IR3VF2TL.js +2 -0
  21. package/dist/cli/chunks/{chunk-DKX4GNRU.js → chunk-2EQK7B5L.js} +2 -2
  22. package/dist/cli/chunks/chunk-2PCEMDIX.js +757 -0
  23. package/dist/cli/chunks/{chunk-JCQGJGGZ.js → chunk-2UUZCQSD.js} +7 -7
  24. package/dist/cli/chunks/chunk-2YWYW7NU.js +21 -0
  25. package/dist/cli/chunks/{chunk-PFQCV6YS.js → chunk-45223KK6.js} +6 -6
  26. package/dist/cli/chunks/chunk-4EJLHNER.js +12 -0
  27. package/dist/cli/chunks/{chunk-E5G4WZ2T.js → chunk-4L6WX5KC.js} +1 -1
  28. package/dist/cli/chunks/{chunk-UQPA33UK.js → chunk-4NKZU2JZ.js} +2 -2
  29. package/dist/cli/chunks/{chunk-OBDONJQM.js → chunk-4UKTIQDT.js} +2 -2
  30. package/dist/cli/chunks/{chunk-7BLZHFKD.js → chunk-4YM45Z5B.js} +1 -1
  31. package/dist/cli/chunks/{chunk-ZWBGYJ7K.js → chunk-5FSPELOG.js} +2 -2
  32. package/dist/cli/chunks/{chunk-NWIIYHT6.js → chunk-5WATBVU6.js} +2 -2
  33. package/dist/cli/chunks/{chunk-7ACCBHRB.js → chunk-5WYZVSL2.js} +1 -1
  34. package/dist/cli/chunks/{chunk-ZYJB6FML.js → chunk-6LSZCEW2.js} +1 -1
  35. package/dist/cli/chunks/{chunk-U62OUXBF.js → chunk-6V6BD6PH.js} +1 -1
  36. package/dist/cli/chunks/{chunk-MIA447GY.js → chunk-74MDUIAZ.js} +1 -1
  37. package/dist/cli/chunks/{chunk-AJPROCDW.js → chunk-776K4ZLE.js} +2 -2
  38. package/dist/cli/chunks/{chunk-CBK5CT6T.js → chunk-7BSOO3CY.js} +2 -2
  39. package/dist/cli/chunks/{chunk-ERN56H6S.js → chunk-7SNSI4VY.js} +1 -1
  40. package/dist/cli/chunks/{chunk-JKJOB65O.js → chunk-A4BVDYIL.js} +1 -1
  41. package/dist/cli/chunks/{chunk-MV55NXTD.js → chunk-AGCS5GSO.js} +2 -2
  42. package/dist/cli/chunks/{chunk-XIVVTYM2.js → chunk-AVHYJ3XP.js} +2 -2
  43. package/dist/cli/chunks/{chunk-KJBPB7P5.js → chunk-BE7ZHM34.js} +2 -2
  44. package/dist/cli/chunks/{chunk-GKSMRBHU.js → chunk-BHQ2DLJU.js} +1 -1
  45. package/dist/cli/chunks/{chunk-7XB3FCKM.js → chunk-BKHEQIRZ.js} +2 -2
  46. package/dist/cli/chunks/{chunk-G242G224.js → chunk-BSIWI4ES.js} +2 -2
  47. package/dist/cli/chunks/{chunk-NQS3BWS6.js → chunk-C7QLLMYI.js} +1 -1
  48. package/dist/cli/chunks/{chunk-XWIAZG3C.js → chunk-CMN7PU2H.js} +2 -2
  49. package/dist/cli/chunks/{chunk-4X3SWKBA.js → chunk-COTQ44YO.js} +2 -2
  50. package/dist/cli/chunks/{chunk-3J3RNJNX.js → chunk-CQER6IJ5.js} +1 -1
  51. package/dist/cli/chunks/{chunk-6KCSKGVY.js → chunk-CVPXHDQU.js} +1 -1
  52. package/dist/cli/chunks/{chunk-R6LHJ7ME.js → chunk-CVYPMGUM.js} +2 -2
  53. package/dist/cli/chunks/chunk-CXCMATZ6.js +3 -0
  54. package/dist/cli/chunks/{chunk-PYPS65P7.js → chunk-D75GLKEL.js} +2 -2
  55. package/dist/cli/chunks/chunk-DCDSN67A.js +2 -0
  56. package/dist/cli/chunks/{chunk-6RBTS3NF.js → chunk-DHKSPOUQ.js} +2 -2
  57. package/dist/cli/chunks/{chunk-JW74KRBC.js → chunk-DJDVD6RM.js} +2 -2
  58. package/dist/cli/chunks/{chunk-X33CWRDF.js → chunk-DNVRTJKB.js} +2 -2
  59. package/dist/cli/chunks/{chunk-BQ47GQPK.js → chunk-DS5IFRY6.js} +2 -2
  60. package/dist/cli/chunks/{chunk-AHMWD6JG.js → chunk-E7XIMOKW.js} +2 -2
  61. package/dist/cli/chunks/{chunk-SON6ZRH3.js → chunk-ECKHDHR2.js} +2 -2
  62. package/dist/cli/chunks/chunk-EPVPXHL7.js +2 -0
  63. package/dist/cli/chunks/{chunk-BP5T3OEV.js → chunk-ERYADKMZ.js} +4 -4
  64. package/dist/cli/chunks/{chunk-DUKE27HC.js → chunk-EUWG2JG4.js} +2 -2
  65. package/dist/cli/chunks/chunk-FAQ24UHB.js +29 -0
  66. package/dist/cli/chunks/{chunk-XG4F4XH4.js → chunk-FBBPRVNF.js} +2 -2
  67. package/dist/cli/chunks/{chunk-5PTAFGJT.js → chunk-FBSBXCZS.js} +2 -2
  68. package/dist/cli/chunks/chunk-G2X3OLMN.js +153 -0
  69. package/dist/cli/chunks/{chunk-IXL5ZHWJ.js → chunk-GG7PMTHD.js} +1 -1
  70. package/dist/cli/chunks/{chunk-6BRQPHMZ.js → chunk-GN6OE3JT.js} +1 -1
  71. package/dist/cli/chunks/{chunk-SZAZQZWI.js → chunk-GPPTRKEM.js} +2 -2
  72. package/dist/cli/chunks/{chunk-LTQVUAPH.js → chunk-H2LHWZRE.js} +2 -2
  73. package/dist/cli/chunks/{chunk-WVXJ2QIG.js → chunk-HAQJFUAQ.js} +2 -2
  74. package/dist/cli/chunks/{chunk-C5CXL3JP.js → chunk-HD6W6PHV.js} +2 -2
  75. package/dist/cli/chunks/{chunk-K3WZICFA.js → chunk-HFZD5KLR.js} +1 -1
  76. package/dist/cli/chunks/{chunk-VCXI4XC4.js → chunk-HRUHHHVR.js} +2 -2
  77. package/dist/cli/chunks/{chunk-GV2QE5TO.js → chunk-HVT7RMGV.js} +1 -1
  78. package/dist/cli/chunks/chunk-HWQPMUSN.js +2 -0
  79. package/dist/cli/chunks/{chunk-4ATQP3PR.js → chunk-HZ5O7G2P.js} +1 -1
  80. package/dist/cli/chunks/{chunk-XHHWABJV.js → chunk-IHQGNDMX.js} +2 -2
  81. package/dist/cli/chunks/{chunk-UUBIQR6A.js → chunk-IJSROBM6.js} +18 -18
  82. package/dist/cli/chunks/{chunk-PS6UMZVK.js → chunk-IJZFJPHS.js} +2 -2
  83. package/dist/cli/chunks/{chunk-C4KLXFJP.js → chunk-IKB3M7OF.js} +1 -1
  84. package/dist/cli/chunks/{chunk-SJCKCSN3.js → chunk-INI3Q4CN.js} +1 -1
  85. package/dist/cli/chunks/{chunk-LYJHUNBK.js → chunk-IOWEBPXJ.js} +2 -2
  86. package/dist/cli/chunks/{chunk-HTZSRMHW.js → chunk-IQL6XRF5.js} +2 -2
  87. package/dist/cli/chunks/{chunk-DEKR3CTS.js → chunk-IRHXGCQR.js} +2 -2
  88. package/dist/cli/chunks/{chunk-TODNOP7C.js → chunk-J3QFJI2Y.js} +6 -6
  89. package/dist/cli/chunks/{chunk-OLZH5LRT.js → chunk-J6QRNQJF.js} +11 -11
  90. package/dist/cli/chunks/{chunk-HL2ANKN3.js → chunk-J7Q5TXFZ.js} +2 -2
  91. package/dist/cli/chunks/{chunk-6YVMX2TC.js → chunk-JHKKIJT2.js} +2 -2
  92. package/dist/cli/chunks/{chunk-K3XBQC3R.js → chunk-JI33PMPZ.js} +1 -1
  93. package/dist/cli/chunks/{chunk-74YG72NQ.js → chunk-JRIJM4LE.js} +3 -3
  94. package/dist/cli/chunks/{chunk-TDQWTSBS.js → chunk-JVWZAE2H.js} +2 -2
  95. package/dist/cli/chunks/{chunk-RDMRY7CT.js → chunk-K7WAI662.js} +1 -1
  96. package/dist/cli/chunks/{chunk-C4RTAVC6.js → chunk-KB34MTFZ.js} +2 -2
  97. package/dist/cli/chunks/{chunk-2CKERSMB.js → chunk-KPIPVSIP.js} +2 -2
  98. package/dist/cli/chunks/{chunk-LNX74WHQ.js → chunk-KR2TAAF6.js} +1 -1
  99. package/dist/cli/chunks/{chunk-73PBAWAF.js → chunk-KT2QCXO6.js} +2 -2
  100. package/dist/cli/chunks/{chunk-BBRROA3Z.js → chunk-KTORRIX3.js} +2 -2
  101. package/dist/cli/chunks/{chunk-GCHYOPRZ.js → chunk-LCWEQRZI.js} +2 -2
  102. package/dist/cli/chunks/{chunk-M4WMSCAE.js → chunk-LG5PPJT7.js} +1 -1
  103. package/dist/cli/chunks/{chunk-UAQZI6N4.js → chunk-LIF6UWHV.js} +2 -2
  104. package/dist/cli/chunks/chunk-LN7NKE3N.js +27 -0
  105. package/dist/cli/chunks/chunk-LOLSZG5J.js +2 -0
  106. package/dist/cli/chunks/{chunk-BLL2XU7A.js → chunk-LOMT4UC2.js} +2 -2
  107. package/dist/cli/chunks/chunk-LRKLATSH.js +2 -0
  108. package/dist/cli/chunks/{chunk-EKP2SC77.js → chunk-LRY6UIRI.js} +2 -2
  109. package/dist/cli/chunks/{chunk-JCZCJE6X.js → chunk-LV7UIK4Q.js} +2 -2
  110. package/dist/cli/chunks/{chunk-LVABQNRF.js → chunk-M2YI5YUR.js} +2 -2
  111. package/dist/cli/chunks/{chunk-RIRZHOS2.js → chunk-MCXW3DKE.js} +2 -2
  112. package/dist/cli/chunks/{chunk-ZSOMUTNL.js → chunk-MGZ6XZHU.js} +1 -1
  113. package/dist/cli/chunks/{chunk-H5DER3JY.js → chunk-MLMD3I75.js} +1 -1
  114. package/dist/cli/chunks/{chunk-UXIY4IAI.js → chunk-MVVVGQJ6.js} +2 -2
  115. package/dist/cli/chunks/{chunk-WUOOX7UG.js → chunk-ND72UDVH.js} +2 -2
  116. package/dist/cli/chunks/{chunk-AKZO6GGG.js → chunk-NE3LRUNC.js} +4 -4
  117. package/dist/cli/chunks/{chunk-O6EWL5DQ.js → chunk-NKUHMA4T.js} +2 -2
  118. package/dist/cli/chunks/{chunk-L32JNNKL.js → chunk-NQFDJ6BT.js} +1 -1
  119. package/dist/cli/chunks/{chunk-T66PPF4D.js → chunk-NZJVDOUN.js} +31 -31
  120. package/dist/cli/chunks/{chunk-EBTNMQSS.js → chunk-O7VJ3VKD.js} +2 -2
  121. package/dist/cli/chunks/{chunk-76P32JVU.js → chunk-OJIUIEI4.js} +1 -1
  122. package/dist/cli/chunks/chunk-OO2M2QUV.js +12 -0
  123. package/dist/cli/chunks/{chunk-CAOUV5GZ.js → chunk-ORQ2YBRR.js} +2 -2
  124. package/dist/cli/chunks/chunk-OWIQR6N2.js +4 -0
  125. package/dist/cli/chunks/chunk-OWIZBZLN.js +14 -0
  126. package/dist/cli/chunks/{chunk-J3FP5UGL.js → chunk-P3D7SEHW.js} +1 -1
  127. package/dist/cli/chunks/{chunk-3CYNZFKH.js → chunk-P4OB6WDJ.js} +1 -1
  128. package/dist/cli/chunks/{chunk-LHMQIZ6B.js → chunk-PCL5JRKN.js} +2 -2
  129. package/dist/cli/chunks/{chunk-KLTMOXIK.js → chunk-PIWGKGWP.js} +2 -2
  130. package/dist/cli/chunks/{chunk-VMAM46HQ.js → chunk-PK34KJH7.js} +2 -2
  131. package/dist/cli/chunks/chunk-POPSZDI2.js +65 -0
  132. package/dist/cli/chunks/{chunk-JUDUBQHA.js → chunk-Q6F3DYZN.js} +2 -2
  133. package/dist/cli/chunks/{chunk-Y2OX6KGN.js → chunk-QJSSUBO3.js} +2 -2
  134. package/dist/cli/chunks/{chunk-XM6ZVFM5.js → chunk-QN7HP2UW.js} +235 -173
  135. package/dist/cli/chunks/{chunk-T4GE7MPI.js → chunk-QSQNXBD2.js} +2 -2
  136. package/dist/cli/chunks/{chunk-5C62XMJR.js → chunk-QTQDX4TZ.js} +33 -33
  137. package/dist/cli/chunks/{chunk-DURD37JZ.js → chunk-R3KBOQ3O.js} +2 -2
  138. package/dist/cli/chunks/{chunk-LJMYRTJ7.js → chunk-REY52O7J.js} +1 -1
  139. package/dist/cli/chunks/{chunk-W5ZJG2OU.js → chunk-RKCN4B26.js} +2 -2
  140. package/dist/cli/chunks/chunk-S3DT5TPR.js +14 -0
  141. package/dist/cli/chunks/{chunk-4HKAD25N.js → chunk-S3TBOKAZ.js} +22 -22
  142. package/dist/cli/chunks/{chunk-2IIXCEMS.js → chunk-SAEECT23.js} +2 -2
  143. package/dist/cli/chunks/{chunk-LB2LGEDP.js → chunk-SAZ4PJBR.js} +2 -2
  144. package/dist/cli/chunks/{chunk-FOOW4JVS.js → chunk-SFITYZLV.js} +2 -2
  145. package/dist/cli/chunks/{chunk-2ZFLULL4.js → chunk-SRBCBVSI.js} +2 -2
  146. package/dist/cli/chunks/chunk-SUAZ5Z47.js +63 -0
  147. package/dist/cli/chunks/{chunk-RBKUU7WF.js → chunk-TDZ6N43D.js} +2 -2
  148. package/dist/cli/chunks/chunk-TIVKDIF7.js +2 -0
  149. package/dist/cli/chunks/{chunk-MPFPWJTH.js → chunk-TM75GAXG.js} +2 -2
  150. package/dist/cli/chunks/{chunk-UJABDXST.js → chunk-TWBZONKT.js} +2 -2
  151. package/dist/cli/chunks/{chunk-AOKKUB5F.js → chunk-U4S74IIZ.js} +1 -1
  152. package/dist/cli/chunks/{chunk-W62OOK7A.js → chunk-U5SMBJ6F.js} +2 -2
  153. package/dist/cli/chunks/{chunk-6LE362LZ.js → chunk-UHJVZEQA.js} +2 -2
  154. package/dist/cli/chunks/{chunk-T67R2MUN.js → chunk-UOVCTK5L.js} +2 -2
  155. package/dist/cli/chunks/{chunk-FTRSS64D.js → chunk-VDEKVIP5.js} +2 -2
  156. package/dist/cli/chunks/{chunk-BDKEAGQ2.js → chunk-VITV7AEC.js} +2 -2
  157. package/dist/cli/chunks/{chunk-BU4UQR36.js → chunk-VKREKVFI.js} +2 -2
  158. package/dist/cli/chunks/{chunk-BZULJMGH.js → chunk-VLTDW7XJ.js} +2 -2
  159. package/dist/cli/chunks/{chunk-UE2J6MA5.js → chunk-VQFV2IPV.js} +1 -1
  160. package/dist/cli/chunks/{chunk-TZIHDJZD.js → chunk-VYPVU3JF.js} +2 -2
  161. package/dist/cli/chunks/{chunk-UORB2QDU.js → chunk-WAOEQA3W.js} +2 -2
  162. package/dist/cli/chunks/{chunk-GQABPCQE.js → chunk-WBDWHHKP.js} +2 -2
  163. package/dist/cli/chunks/{chunk-GGQGCT4Y.js → chunk-WX4PO65Q.js} +2 -2
  164. package/dist/cli/chunks/chunk-X2DWHGCC.js +6 -0
  165. package/dist/cli/chunks/{chunk-337Z52QM.js → chunk-X5QD76IU.js} +2 -2
  166. package/dist/cli/chunks/{chunk-E56PVVWC.js → chunk-XBTGEYED.js} +2 -2
  167. package/dist/cli/chunks/{chunk-5AFVEWMT.js → chunk-XEMCHGAJ.js} +2 -2
  168. package/dist/cli/chunks/{chunk-E3MRDIZF.js → chunk-XEYFZLIT.js} +1 -1
  169. package/dist/cli/chunks/{chunk-KCQNFBBR.js → chunk-XFTX3KLE.js} +1 -1
  170. package/dist/cli/chunks/{chunk-QFGYH6HD.js → chunk-XPTCQKVE.js} +1 -1
  171. package/dist/cli/chunks/{chunk-PXATBHWN.js → chunk-YAJOBZE5.js} +2 -2
  172. package/dist/cli/chunks/{chunk-27HE2BHC.js → chunk-YCVLKU6H.js} +2 -2
  173. package/dist/cli/chunks/{chunk-ZIPAB5J6.js → chunk-YD2C6EPN.js} +2 -2
  174. package/dist/cli/chunks/{chunk-5G4UFTV4.js → chunk-YKRLUTK7.js} +2 -2
  175. package/dist/cli/chunks/{chunk-YUS6TWAL.js → chunk-YMUY3TES.js} +6 -6
  176. package/dist/cli/chunks/chunk-YR5QBUHZ.js +6 -0
  177. package/dist/cli/chunks/{chunk-XH4JMX5O.js → chunk-Z7SKUC6P.js} +1 -1
  178. package/dist/cli/chunks/{chunk-EFUJDMNC.js → chunk-ZAQMRFBB.js} +2 -2
  179. package/dist/cli/chunks/{chunk-22UKJGGN.js → chunk-ZC3KDNJW.js} +3 -3
  180. package/dist/cli/chunks/{chunk-AP2W7Z3A.js → chunk-ZGV7L4MW.js} +1 -1
  181. package/dist/cli/chunks/{chunk-W27AJ5B4.js → chunk-ZN35XSKF.js} +2 -2
  182. package/dist/cli/chunks/{chunk-M4CJCPCQ.js → chunk-ZNXM6WVL.js} +2 -2
  183. package/dist/cli/chunks/{chunk-5I7357KS.js → chunk-ZP5AWQRO.js} +2 -2
  184. package/dist/cli/chunks/{chunk-OQG3UQQ7.js → chunk-ZTP3DQ5M.js} +1 -1
  185. package/dist/cli/chunks/{chunk-BFQTLF5X.js → chunk-ZVMSSCTH.js} +2 -2
  186. package/dist/cli/chunks/chunk-ZWUF27P4.js +2 -0
  187. package/dist/cli/chunks/{ci-UCUJOSBW.js → ci-3RTTTS2D.js} +2 -2
  188. package/dist/cli/chunks/{ci-config-2XILD3XG.js → ci-config-XRUR3I4K.js} +2 -2
  189. package/dist/cli/chunks/{ci-output-BL6KWOHW.js → ci-output-E5IAMU2U.js} +2 -2
  190. package/dist/cli/chunks/{circuit-breaker-5XLIOXE5.js → circuit-breaker-SHR2P44P.js} +2 -2
  191. package/dist/cli/chunks/{claude-flow-setup-4IMP6ACS.js → claude-flow-setup-ZDDILFMF.js} +2 -2
  192. package/dist/cli/chunks/client-NO5FOWT4.js +2 -0
  193. package/dist/cli/chunks/{cline-installer-RYLHCDK7.js → cline-installer-BGYVUM6G.js} +2 -2
  194. package/dist/cli/chunks/{code-WY3GJXHX.js → code-PJ4MC3MC.js} +4 -3
  195. package/dist/cli/chunks/{code-index-extractor-Y4MZBZCW.js → code-index-extractor-IW2P22YG.js} +2 -2
  196. package/dist/cli/chunks/{codex-installer-SCJ3T3DX.js → codex-installer-A7WZ6OGL.js} +2 -2
  197. package/dist/cli/chunks/{completions-CN2DXQFU.js → completions-KS23WD5J.js} +2 -2
  198. package/dist/cli/chunks/{complexity-analyzer-7MDPPIBH.js → complexity-analyzer-Q7GLSR2E.js} +2 -2
  199. package/dist/cli/chunks/{continuedev-installer-GCEJRK34.js → continuedev-installer-SK55BFW2.js} +2 -2
  200. package/dist/cli/chunks/copilot-installer-3N5J3WTM.js +3 -0
  201. package/dist/cli/chunks/core-handlers-JNAZPXE2.js +2 -0
  202. package/dist/cli/chunks/{cost-tracker-VO5MFWR6.js → cost-tracker-NENVSO4A.js} +2 -2
  203. package/dist/cli/chunks/{coverage-LYFQYNH6.js → coverage-5L7UQWDH.js} +3 -3
  204. package/dist/cli/chunks/cross-domain-router-HEBM767Z.js +2 -0
  205. package/dist/cli/chunks/{cursor-installer-KP4HA7TV.js → cursor-installer-XXBO2ZE6.js} +2 -2
  206. package/dist/cli/chunks/{daemon-7RC7TS57.js → daemon-CDCQU3LR.js} +3 -3
  207. package/dist/cli/chunks/daemon-JEBJGEUK.js +18 -0
  208. package/dist/cli/chunks/{dag-attention-scheduler-NKA44RSR.js → dag-attention-scheduler-HOMMF7FA.js} +2 -2
  209. package/dist/cli/chunks/{detect-CMYAJWYF.js → detect-FXCOUG6X.js} +2 -2
  210. package/dist/cli/chunks/{dist-node-EN3PYEGW.js → dist-node-GXQ7FMTY.js} +2 -2
  211. package/dist/cli/chunks/{domain-handler-EXSZCX7A.js → domain-handler-TI3JBAPC.js} +2 -2
  212. package/dist/cli/chunks/{domain-plugins-HCQFSNL7.js → domain-plugins-R7LTUM32.js} +2 -2
  213. package/dist/cli/chunks/{domain-transfer-3LGSNTPO.js → domain-transfer-LBIAFHIQ.js} +2 -2
  214. package/dist/cli/chunks/dream-GQDCEJMS.js +2 -0
  215. package/dist/cli/chunks/embed-and-insert-pattern-33KLHDD5.js +3 -0
  216. package/dist/cli/chunks/embedding-space-HHLWTBF5.js +2 -0
  217. package/dist/cli/chunks/{eval-OQELIWJK.js → eval-KDOZMAXJ.js} +2 -2
  218. package/dist/cli/chunks/experience-capture-middleware-X45PECQN.js +40 -0
  219. package/dist/cli/chunks/{fast-paths-UV4NDEWM.js → fast-paths-462V6UUB.js} +2 -2
  220. package/dist/cli/chunks/{feature-flags-H7H33B6C.js → feature-flags-G66OT3AS.js} +2 -2
  221. package/dist/cli/chunks/{feature-flags-CKTYX67J.js → feature-flags-NIRQ4YDM.js} +2 -2
  222. package/dist/cli/chunks/file-discovery-33USPLB5.js +2 -0
  223. package/dist/cli/chunks/{fleet-ZJBCAKRG.js → fleet-PXWGB7CU.js} +3 -3
  224. package/dist/cli/chunks/{gnn-wrapper-RUE2QZRG.js → gnn-wrapper-7MUW3M5M.js} +2 -2
  225. package/dist/cli/chunks/{heartbeat-handler-XRV327M7.js → heartbeat-handler-5237PB35.js} +4 -4
  226. package/dist/cli/chunks/heartbeat-scheduler-LIXLC5IH.js +2 -0
  227. package/dist/cli/chunks/hnsw-adapter-62D5UH27.js +2 -0
  228. package/dist/cli/chunks/hnsw-index-GSGUMQQC.js +2 -0
  229. package/dist/cli/chunks/{hnsw-legacy-bridge-UJID6ZZ4.js → hnsw-legacy-bridge-OSQPW7JP.js} +2 -2
  230. package/dist/cli/chunks/{hnswlib-node-WS43R4AX.js → hnswlib-node-GX6WG2GB.js} +2 -2
  231. package/dist/cli/chunks/{hooks-YZNJKXAJ.js → hooks-GUWHL7VC.js} +23 -22
  232. package/dist/cli/chunks/hybrid-backend-FRWP4BOY.js +2 -0
  233. package/dist/cli/chunks/{hypergraph-engine-XQJSIMTS.js → hypergraph-engine-SRWLLCU3.js} +2 -2
  234. package/dist/cli/chunks/{hypergraph-handler-ZD2NYXMR.js → hypergraph-handler-AVOPRHHO.js} +3 -3
  235. package/dist/cli/chunks/impact-analyzer-7KF3AQXV.js +2 -0
  236. package/dist/cli/chunks/{init-guard-DSRUAVRT.js → init-guard-P4N6EVZS.js} +2 -2
  237. package/dist/cli/chunks/{init-handler-RJU5QMAP.js → init-handler-LRGWOJMD.js} +6 -6
  238. package/dist/cli/chunks/init-wizard-XWWAXY25.js +2 -0
  239. package/dist/cli/chunks/kernel-ZEJPNDBW.js +2 -0
  240. package/dist/cli/chunks/{kilocode-installer-BCPOCVMC.js → kilocode-installer-7R2EPOQ6.js} +2 -2
  241. package/dist/cli/chunks/{kiro-installer-GFCWCB2S.js → kiro-installer-QNM7DPOB.js} +2 -2
  242. package/dist/cli/chunks/knowledge-graph-RRZQS7KY.js +2 -0
  243. package/dist/cli/chunks/{learning-FZTD72CF.js → learning-7OIZBPXZ.js} +3 -3
  244. package/dist/cli/chunks/{llm-router-GJVKGRJL.js → llm-router-SIDXES23.js} +4 -4
  245. package/dist/cli/chunks/llm-router-service-3OSW67LC.js +2 -0
  246. package/dist/cli/chunks/{load-YKTPOYBE.js → load-EI2E2C3S.js} +2 -2
  247. package/dist/cli/chunks/load-test-7TRIH2WJ.js +2 -0
  248. package/dist/cli/chunks/{mcp-LT6R2IKS.js → mcp-IOE5WOCS.js} +2 -2
  249. package/dist/cli/chunks/{memory-4HKKOLRY.js → memory-DLYGJAP7.js} +5 -5
  250. package/dist/cli/chunks/memory-backend-G7ZW6Q2B.js +2 -0
  251. package/dist/cli/chunks/memory-handlers-TPF3KCO5.js +2 -0
  252. package/dist/cli/chunks/{multi-model-executor-2YPM2WTK.js → multi-model-executor-WHH4YCHM.js} +2 -2
  253. package/dist/cli/chunks/{opencode-installer-WBAJMH5K.js → opencode-installer-63FDZAMS.js} +2 -2
  254. package/dist/cli/chunks/{orchestrator-5W5WVMVJ.js → orchestrator-3LA776KK.js} +5 -5
  255. package/dist/cli/chunks/pattern-null-store-OU3ZC3NR.js +2 -0
  256. package/dist/cli/chunks/{pattern-usage-recorder-GXRMNPAZ.js → pattern-usage-recorder-NW54QUGI.js} +2 -2
  257. package/dist/cli/chunks/{pipeline-2NA4DRDA.js → pipeline-P3TYX6J6.js} +2 -2
  258. package/dist/cli/chunks/{platform-BGERNQ5V.js → platform-FNA2WLI6.js} +2 -2
  259. package/dist/cli/chunks/{plugin-L4EPVENR.js → plugin-NJS7BC2S.js} +2 -2
  260. package/dist/cli/chunks/{prime-radiant-advanced-wasm-RTQRTPTM.js → prime-radiant-advanced-wasm-NIAVL2OT.js} +2 -2
  261. package/dist/cli/chunks/project-root-GMOFJEKD.js +2 -0
  262. package/dist/cli/chunks/protocol-executor-AD345XRO.js +2 -0
  263. package/dist/cli/chunks/{protocol-handler-SYQXM6JK.js → protocol-handler-JU5C4JHY.js} +2 -2
  264. package/dist/cli/chunks/{prove-5O7GPJCU.js → prove-35VOSLYP.js} +2 -2
  265. package/dist/cli/chunks/qe-reasoning-bank-NLTP26RC.js +2 -0
  266. package/dist/cli/chunks/{quality-KIIDHGNF.js → quality-ET74X7HN.js} +2 -2
  267. package/dist/cli/chunks/{quality-gate-H65VECD3.js → quality-gate-FEDQISNB.js} +3 -3
  268. package/dist/cli/chunks/queen-coordinator-2TB4FWS6.js +2 -0
  269. package/dist/cli/chunks/real-embeddings-II6CXTCI.js +2 -0
  270. package/dist/cli/chunks/{ref-validation-CSBJOMZM.js → ref-validation-DTBPYCEB.js} +2 -2
  271. package/dist/cli/chunks/{roocode-installer-G7OVYXEN.js → roocode-installer-LYQEMR4J.js} +2 -2
  272. package/dist/cli/chunks/router-PLM3MWME.js +2 -0
  273. package/dist/cli/chunks/routing-feedback-I7VOX2HU.js +2 -0
  274. package/dist/cli/chunks/{routing-handler-ZNZPPI5Y.js → routing-handler-DJOJFPII.js} +2 -2
  275. package/dist/cli/chunks/{ruvector-commands-C6IG3OY3.js → ruvector-commands-VXYGJDPW.js} +2 -2
  276. package/dist/cli/chunks/rvf-dual-writer-GQZHFWO2.js +2 -0
  277. package/dist/cli/chunks/rvf-migration-adapter-3TVKBCAM.js +2 -0
  278. package/dist/cli/chunks/rvf-migration-coordinator-XUHKLMT6.js +2 -0
  279. package/dist/cli/chunks/rvf-native-adapter-5GUTYOWS.js +2 -0
  280. package/dist/cli/chunks/{rvf-store-integrity-3G6LFLT3.js → rvf-store-integrity-GA2ZYOEG.js} +2 -2
  281. package/dist/cli/chunks/safe-db-RZPQGLGQ.js +2 -0
  282. package/dist/cli/chunks/schedule-G7JMQDUX.js +2 -0
  283. package/dist/cli/chunks/scheduler-4SEGPCKD.js +2 -0
  284. package/dist/cli/chunks/{security-A3IMVLFM.js → security-MM6YOECX.js} +3 -3
  285. package/dist/cli/chunks/{shared-rvf-adapter-VHWQ6US5.js → shared-rvf-adapter-6AHPA3V5.js} +2 -2
  286. package/dist/cli/chunks/{shared-rvf-dual-writer-JB3QS7IG.js → shared-rvf-dual-writer-EYAVY2GZ.js} +2 -2
  287. package/dist/cli/chunks/sqlite-persistence-IVE4SQXR.js +2 -0
  288. package/dist/cli/chunks/{standalone-memory-DDNXCSBD.js → standalone-memory-A3PLB4CZ.js} +2 -2
  289. package/dist/cli/chunks/{status-handler-2HK7XPEK.js → status-handler-OSSFAP4Z.js} +2 -2
  290. package/dist/cli/chunks/{structural-health-DSJVLEPV.js → structural-health-PGY5XUNO.js} +2 -2
  291. package/dist/cli/chunks/{sync-NTUR53PI.js → sync-CWEHYGNN.js} +2 -2
  292. package/dist/cli/chunks/sync-PM6D7EQF.js +2 -0
  293. package/dist/cli/chunks/task-handler-LHMQ75W4.js +64 -0
  294. package/dist/cli/chunks/{task-handlers-VJR6EHRZ.js → task-handlers-S2TX5FTR.js} +4 -4
  295. package/dist/cli/chunks/test-4EGZZ6NJ.js +34 -0
  296. package/dist/cli/chunks/test-runner-process-72YACW6M.js +2 -0
  297. package/dist/cli/chunks/{test-scheduling-Q6QEEOS6.js → test-scheduling-YJQHH3XE.js} +3 -3
  298. package/dist/cli/chunks/token-bootstrap-DJNETMVW.js +2 -0
  299. package/dist/cli/chunks/{token-usage-YEEFWSSI.js → token-usage-WPNOJR6H.js} +2 -2
  300. package/dist/cli/chunks/{transformers-BZCHJJJT.js → transformers-4MRPXCPU.js} +2 -2
  301. package/dist/cli/chunks/tree-sitter-wasm-parser-UVWSDXFR.js +2 -0
  302. package/dist/cli/chunks/{types-4AOKZYOX.js → types-6P5FB4EB.js} +2 -2
  303. package/dist/cli/chunks/unified-memory-2VMGSGQL.js +2 -0
  304. package/dist/cli/chunks/unified-memory-hnsw-3KULVD3N.js +2 -0
  305. package/dist/cli/chunks/unified-persistence-QCSLU2SV.js +2 -0
  306. package/dist/cli/chunks/{upgrade-2MWW6BT2.js → upgrade-4ICTN63Y.js} +2 -2
  307. package/dist/cli/chunks/{validate-PAEV3GT5.js → validate-HQF5GZ7L.js} +2 -2
  308. package/dist/cli/chunks/{validate-swarm-ZIXACK5K.js → validate-swarm-45JYG7VW.js} +2 -2
  309. package/dist/cli/chunks/visual-security-ZYP2KPH7.js +2 -0
  310. package/dist/cli/chunks/{web-tree-sitter-VLTXZFAB.js → web-tree-sitter-UOTWZLNH.js} +2 -2
  311. package/dist/cli/chunks/{windsurf-installer-VELMLOZF.js → windsurf-installer-WDWSBXGN.js} +2 -2
  312. package/dist/cli/chunks/witness-chain-5QRT7EMX.js +2 -0
  313. package/dist/cli/chunks/witness-chain-DOYMNPC7.js +2 -0
  314. package/dist/cli/chunks/witness-chain-repair-CUF2AFQB.js +2 -0
  315. package/dist/cli/chunks/{witness-chain-verifier-MIDWD4JS.js → witness-chain-verifier-JB42X62J.js} +2 -2
  316. package/dist/cli/chunks/{witness-key-manager-OSVCWOB2.js → witness-key-manager-LXXO6L2G.js} +2 -2
  317. package/dist/cli/chunks/{workflow-MK7A7QCX.js → workflow-6ARK47NF.js} +4 -4
  318. package/dist/cli/chunks/workflow-orchestrator-RYDDWIXN.js +2 -0
  319. package/dist/cli/chunks/wrappers-CYQBOMPL.js +2 -0
  320. package/dist/cli/commands/code.js +4 -0
  321. package/dist/cli/commands/hooks-handlers/hooks-dream-learning.js +10 -2
  322. package/dist/cli/commands/test.js +26 -4
  323. package/dist/cli/handlers/task-handler.d.ts +5 -0
  324. package/dist/cli/handlers/task-handler.js +21 -1
  325. package/dist/cli/utils/task-result.d.ts +11 -0
  326. package/dist/cli/utils/task-result.js +39 -0
  327. package/dist/coordination/handlers/test-execution-handlers.js +137 -59
  328. package/dist/coordination/mincut/mincut-persistence.js +29 -25
  329. package/dist/domains/code-intelligence/coordinator.d.ts +4 -0
  330. package/dist/domains/code-intelligence/coordinator.js +46 -13
  331. package/dist/domains/code-intelligence/interfaces.d.ts +10 -1
  332. package/dist/domains/code-intelligence/services/semantic-analyzer.d.ts +37 -7
  333. package/dist/domains/code-intelligence/services/semantic-analyzer.js +135 -62
  334. package/dist/domains/code-intelligence/services/text-relevance.d.ts +32 -0
  335. package/dist/domains/code-intelligence/services/text-relevance.js +63 -0
  336. package/dist/domains/learning-optimization/services/learning-coordinator.js +1 -1
  337. package/dist/domains/quality-assessment/coordinator.js +2 -1
  338. package/dist/domains/test-execution/coordinator.d.ts +3 -1
  339. package/dist/domains/test-execution/coordinator.js +21 -7
  340. package/dist/domains/test-execution/interfaces.d.ts +17 -0
  341. package/dist/domains/test-execution/plugin.js +8 -2
  342. package/dist/domains/test-execution/services/flaky-detector.d.ts +9 -1
  343. package/dist/domains/test-execution/services/flaky-detector.js +26 -8
  344. package/dist/domains/test-execution/services/retry-handler.d.ts +9 -1
  345. package/dist/domains/test-execution/services/retry-handler.js +56 -12
  346. package/dist/domains/test-execution/services/runner-test-cases.d.ts +2 -0
  347. package/dist/domains/test-execution/services/runner-test-cases.js +7 -3
  348. package/dist/domains/test-execution/services/test-executor.d.ts +6 -1
  349. package/dist/domains/test-execution/services/test-executor.js +97 -14
  350. package/dist/domains/visual-accessibility/coordinator.d.ts +15 -7
  351. package/dist/domains/visual-accessibility/coordinator.js +15 -7
  352. package/dist/domains/visual-accessibility/interfaces.d.ts +27 -3
  353. package/dist/domains/visual-accessibility/services/accessibility-contrast.d.ts +39 -0
  354. package/dist/domains/visual-accessibility/services/accessibility-contrast.js +93 -0
  355. package/dist/domains/visual-accessibility/services/accessibility-tester-browser.d.ts +18 -3
  356. package/dist/domains/visual-accessibility/services/accessibility-tester-browser.js +50 -40
  357. package/dist/domains/visual-accessibility/services/accessibility-tester-checks.d.ts +27 -0
  358. package/dist/domains/visual-accessibility/services/accessibility-tester-checks.js +137 -0
  359. package/dist/domains/visual-accessibility/services/accessibility-tester.d.ts +5 -0
  360. package/dist/domains/visual-accessibility/services/accessibility-tester.js +43 -24
  361. package/dist/domains/visual-accessibility/services/browser-swarm-coordinator.d.ts +2 -3
  362. package/dist/domains/visual-accessibility/services/browser-swarm-coordinator.js +8 -14
  363. package/dist/feedback/coverage-learner.js +13 -9
  364. package/dist/feedback/test-outcome-tracker.js +13 -9
  365. package/dist/governance/witness-chain.d.ts +5 -0
  366. package/dist/governance/witness-chain.js +22 -6
  367. package/dist/init/copilot-installer.d.ts +6 -0
  368. package/dist/init/copilot-installer.js +37 -17
  369. package/dist/init/platform-config-generator.d.ts +10 -0
  370. package/dist/init/platform-config-generator.js +26 -1
  371. package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.d.ts +22 -0
  372. package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.js +115 -45
  373. package/dist/integrations/agentic-flow/reasoning-bank/pattern-evolution.d.ts +6 -0
  374. package/dist/integrations/agentic-flow/reasoning-bank/pattern-evolution.js +51 -33
  375. package/dist/integrations/agentic-flow/reasoning-bank/trajectory-tracker.js +17 -9
  376. package/dist/integrations/embeddings/cache/EmbeddingCache.d.ts +8 -0
  377. package/dist/integrations/embeddings/cache/EmbeddingCache.js +24 -10
  378. package/dist/integrations/ruvector/delta-tracker.d.ts +11 -0
  379. package/dist/integrations/ruvector/delta-tracker.js +16 -0
  380. package/dist/integrations/ruvector/sona-persistence.d.ts +10 -0
  381. package/dist/integrations/ruvector/sona-persistence.js +49 -24
  382. package/dist/kernel/unified-memory.d.ts +32 -0
  383. package/dist/kernel/unified-memory.js +76 -8
  384. package/dist/learning/aqe-learning-engine.js +1 -1
  385. package/dist/learning/embed-and-insert-pattern.js +4 -2
  386. package/dist/learning/embedder-endpoint-client.d.ts +76 -0
  387. package/dist/learning/embedder-endpoint-client.js +201 -13
  388. package/dist/learning/embedding-space-registry.d.ts +75 -0
  389. package/dist/learning/embedding-space-registry.js +142 -0
  390. package/dist/learning/embedding-space.d.ts +12 -0
  391. package/dist/learning/embedding-space.js +17 -0
  392. package/dist/learning/experience-capture-middleware.js +25 -13
  393. package/dist/learning/experience-capture.js +1 -1
  394. package/dist/learning/experience-consolidation.d.ts +18 -0
  395. package/dist/learning/experience-consolidation.js +55 -8
  396. package/dist/learning/experience-space-verification.d.ts +71 -0
  397. package/dist/learning/experience-space-verification.js +147 -0
  398. package/dist/learning/pattern-lifecycle.d.ts +40 -4
  399. package/dist/learning/pattern-lifecycle.js +153 -76
  400. package/dist/learning/pattern-null-store.d.ts +5 -0
  401. package/dist/learning/pattern-null-store.js +8 -0
  402. package/dist/learning/pattern-promotion.js +6 -3
  403. package/dist/learning/pattern-store.d.ts +6 -0
  404. package/dist/learning/pattern-store.js +19 -6
  405. package/dist/learning/qe-reasoning-bank.js +2 -2
  406. package/dist/learning/real-embeddings.d.ts +3 -0
  407. package/dist/learning/real-embeddings.js +52 -12
  408. package/dist/learning/real-qe-reasoning-bank.d.ts +5 -0
  409. package/dist/learning/real-qe-reasoning-bank.js +77 -47
  410. package/dist/learning/rvf-pattern-store.js +6 -2
  411. package/dist/learning/sqlite-persistence.d.ts +6 -0
  412. package/dist/learning/sqlite-persistence.js +10 -0
  413. package/dist/mcp/bundle.js +699 -619
  414. package/dist/mcp/entry.js +4 -0
  415. package/dist/mcp/handlers/domain-handler-configs.js +2 -0
  416. package/dist/mcp/handlers/trajectory-judge.js +1 -1
  417. package/dist/mcp/protocol-server.js +1 -0
  418. package/dist/mcp/tools/visual-accessibility/index.js +8 -2
  419. package/dist/mcp/types.d.ts +6 -0
  420. package/dist/optimization/session-cache.d.ts +17 -1
  421. package/dist/optimization/session-cache.js +40 -36
  422. package/dist/planning/goap-planner.d.ts +6 -0
  423. package/dist/planning/goap-planner.js +35 -19
  424. package/dist/planning/plan-executor.js +24 -15
  425. package/dist/routing/co-execution-repository.js +12 -9
  426. package/dist/routing/routing-feedback.d.ts +8 -0
  427. package/dist/routing/routing-feedback.js +46 -24
  428. package/dist/routing/routing-outcomes-migration.js +7 -2
  429. package/dist/shared/embeddings/index.d.ts +2 -2
  430. package/dist/shared/embeddings/index.js +1 -1
  431. package/dist/shared/embeddings/nomic-embedder.d.ts +8 -2
  432. package/dist/shared/embeddings/nomic-embedder.js +19 -11
  433. package/dist/shared/embeddings/ollama-client.d.ts +28 -2
  434. package/dist/shared/embeddings/ollama-client.js +84 -22
  435. package/dist/shared/embeddings/types.d.ts +15 -0
  436. package/dist/shared/embeddings/types.js +4 -0
  437. package/dist/shared/llm/spend-ledger.d.ts +9 -0
  438. package/dist/shared/llm/spend-ledger.js +64 -39
  439. package/dist/shared/pytest-junit-report.d.ts +93 -0
  440. package/dist/shared/pytest-junit-report.js +241 -0
  441. package/dist/shared/sqlite-lock-wait.d.ts +27 -0
  442. package/dist/shared/sqlite-lock-wait.js +37 -0
  443. package/dist/shared/sqlite-write-queue.d.ts +28 -0
  444. package/dist/shared/sqlite-write-queue.js +38 -0
  445. package/dist/shared/test-runner-project.d.ts +119 -0
  446. package/dist/shared/test-runner-project.js +301 -0
  447. package/dist/skills/security-visual-testing/index.d.ts +3 -1
  448. package/dist/skills/security-visual-testing/index.js +49 -35
  449. package/dist/skills/security-visual-testing/types.d.ts +19 -3
  450. package/dist/workers/workers/heartbeat-scheduler.js +5 -5
  451. package/dist/workers/workers/learning-consolidation.js +8 -7
  452. package/package.json +1 -1
  453. package/dist/cli/chunks/adapter-QU6INSKP.js +0 -2
  454. package/dist/cli/chunks/aqe-learning-engine-PAJPENJD.js +0 -2
  455. package/dist/cli/chunks/base-OTGSN6IC.js +0 -2
  456. package/dist/cli/chunks/browser-workflow-WLZGR6SB.js +0 -2
  457. package/dist/cli/chunks/chunk-2LUTPMBO.js +0 -21
  458. package/dist/cli/chunks/chunk-3HVFIITW.js +0 -2
  459. package/dist/cli/chunks/chunk-4D4CWP72.js +0 -2
  460. package/dist/cli/chunks/chunk-5KA5TVPR.js +0 -6
  461. package/dist/cli/chunks/chunk-6NBRMD25.js +0 -13
  462. package/dist/cli/chunks/chunk-7O45RQHF.js +0 -153
  463. package/dist/cli/chunks/chunk-EMSZVUYA.js +0 -29
  464. package/dist/cli/chunks/chunk-G6RDCCFV.js +0 -4
  465. package/dist/cli/chunks/chunk-HH4ED4F7.js +0 -744
  466. package/dist/cli/chunks/chunk-Q6I4SIUU.js +0 -65
  467. package/dist/cli/chunks/chunk-QGBGSQ2E.js +0 -14
  468. package/dist/cli/chunks/chunk-QRKTBSZT.js +0 -27
  469. package/dist/cli/chunks/chunk-SHRI7TKJ.js +0 -62
  470. package/dist/cli/chunks/chunk-TX2CHQD7.js +0 -2
  471. package/dist/cli/chunks/chunk-UGYM4U44.js +0 -2
  472. package/dist/cli/chunks/chunk-VY4U6DPO.js +0 -12
  473. package/dist/cli/chunks/chunk-WNTA4YKE.js +0 -14
  474. package/dist/cli/chunks/chunk-XHLYGXYE.js +0 -2
  475. package/dist/cli/chunks/client-KKRNPX4F.js +0 -2
  476. package/dist/cli/chunks/copilot-installer-BHPDSELY.js +0 -3
  477. package/dist/cli/chunks/core-handlers-47MPMED7.js +0 -2
  478. package/dist/cli/chunks/cross-domain-router-U6MBFHEC.js +0 -2
  479. package/dist/cli/chunks/daemon-AXLVPKVO.js +0 -18
  480. package/dist/cli/chunks/dream-76L6EEN7.js +0 -2
  481. package/dist/cli/chunks/embed-and-insert-pattern-B6MNHICW.js +0 -3
  482. package/dist/cli/chunks/experience-capture-middleware-SUFILYPW.js +0 -40
  483. package/dist/cli/chunks/file-discovery-VSFKZ3LJ.js +0 -2
  484. package/dist/cli/chunks/heartbeat-scheduler-NIK3KKEH.js +0 -2
  485. package/dist/cli/chunks/hnsw-adapter-WJG7LUJJ.js +0 -2
  486. package/dist/cli/chunks/hnsw-index-D6PRI5HC.js +0 -2
  487. package/dist/cli/chunks/hybrid-backend-RIUR3I7F.js +0 -2
  488. package/dist/cli/chunks/impact-analyzer-C36YYTJ5.js +0 -2
  489. package/dist/cli/chunks/init-wizard-JCKNGIGT.js +0 -2
  490. package/dist/cli/chunks/kernel-F7ILJTYD.js +0 -2
  491. package/dist/cli/chunks/knowledge-graph-VTXDBHB2.js +0 -2
  492. package/dist/cli/chunks/llm-router-service-TNOWQINA.js +0 -2
  493. package/dist/cli/chunks/load-test-FPVBK2EV.js +0 -2
  494. package/dist/cli/chunks/memory-backend-2QE7O67A.js +0 -2
  495. package/dist/cli/chunks/memory-handlers-X4CMVBXB.js +0 -2
  496. package/dist/cli/chunks/pattern-null-store-UI35ORHW.js +0 -2
  497. package/dist/cli/chunks/project-root-S7WDFTMU.js +0 -2
  498. package/dist/cli/chunks/protocol-executor-OPANXQVB.js +0 -2
  499. package/dist/cli/chunks/qe-reasoning-bank-3OTF4DYQ.js +0 -2
  500. package/dist/cli/chunks/queen-coordinator-WTYH4TAN.js +0 -2
  501. package/dist/cli/chunks/real-embeddings-DYIOLKQ3.js +0 -2
  502. package/dist/cli/chunks/router-DBBW4NC2.js +0 -2
  503. package/dist/cli/chunks/routing-feedback-W35QHCL4.js +0 -2
  504. package/dist/cli/chunks/rvf-dual-writer-X3NSL25Z.js +0 -2
  505. package/dist/cli/chunks/rvf-migration-adapter-TZR7GDOK.js +0 -2
  506. package/dist/cli/chunks/rvf-migration-coordinator-4ATTHGHD.js +0 -2
  507. package/dist/cli/chunks/rvf-native-adapter-HD25ZYV5.js +0 -2
  508. package/dist/cli/chunks/safe-db-ZS2QKANY.js +0 -2
  509. package/dist/cli/chunks/schedule-ZH6VNA32.js +0 -2
  510. package/dist/cli/chunks/scheduler-T6CD74B6.js +0 -2
  511. package/dist/cli/chunks/sqlite-persistence-47WU5EKZ.js +0 -2
  512. package/dist/cli/chunks/sync-3MUV6S5E.js +0 -2
  513. package/dist/cli/chunks/task-handler-74MZN2EO.js +0 -62
  514. package/dist/cli/chunks/test-O6FK3FVF.js +0 -34
  515. package/dist/cli/chunks/test-runner-process-2NPW3UDQ.js +0 -2
  516. package/dist/cli/chunks/token-bootstrap-TTRCECLP.js +0 -2
  517. package/dist/cli/chunks/tree-sitter-wasm-parser-RZAND65G.js +0 -2
  518. package/dist/cli/chunks/unified-memory-FZ5K2C7W.js +0 -2
  519. package/dist/cli/chunks/unified-memory-hnsw-VREWX56M.js +0 -2
  520. package/dist/cli/chunks/unified-persistence-YZGMKX6B.js +0 -2
  521. package/dist/cli/chunks/visual-security-GXGSFBVA.js +0 -2
  522. package/dist/cli/chunks/witness-chain-MRJKVCOW.js +0 -2
  523. package/dist/cli/chunks/witness-chain-WWHJKITG.js +0 -2
  524. package/dist/cli/chunks/witness-chain-repair-5SAXPETG.js +0 -2
  525. package/dist/cli/chunks/workflow-orchestrator-SG7DV72E.js +0 -2
  526. 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<void, Error>>;
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<void, Error>>;
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 says so through `lexicalOnlyReason`; no
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 content token matches a query token it contains, or that contains it.
164
- * #1224: the second direction needs a content token of 3+ characters, so a
165
- * one-letter variable such as `i` does not match the query "login".
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
- // Check if Ollama is available
64
- const isAvailable = await nomicEmbedder.healthCheck();
65
- if (isAvailable) {
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 lexicalOnlyReason;
100
+ let semanticOutcome = {};
98
101
  switch (type) {
99
102
  case 'semantic': {
100
- const semantic = await this.semanticSearch(query, limit, scope, filters);
101
- results = semantic.results;
102
- lexicalOnlyReason = semantic.lexicalOnlyReason;
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
- ...(type === 'semantic'
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
- await this.memory.set(`${this.config.namespace}:content:${this.fileToKey(file)}`, { file, content, metadata });
157
- return ok(undefined);
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 ? EMBEDDING_CONFIG.MODEL : 'injected-provider';
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 says so through `lexicalOnlyReason`; no
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
- lexicalOnlyReason: embedded.reason,
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
- lexicalOnlyReason: `no indexed file has an embedding from ${this.embeddingModelId()}; re-index to enable vector search`,
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 { results };
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 results = [];
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
- for (const key of keys) {
396
- const stored = await this.memory.get(key);
397
- if (!stored)
398
- continue;
399
- // Apply scope filter
400
- if (scope && scope.length > 0) {
401
- const matchesScope = scope.some((s) => stored.file.includes(s));
402
- if (!matchesScope)
403
- continue;
404
- }
405
- // Apply filters
406
- if (filters && !this.matchesFilters(stored.metadata, filters)) {
407
- continue;
408
- }
409
- // Fuzzy match using token overlap
410
- const contentTokens = this.tokenize(stored.content.toLowerCase());
411
- const score = this.calculateFuzzyScore(queryTokens, contentTokens);
412
- if (score >= this.config.minScore) {
413
- const matchedTokens = queryTokens.filter((t) => contentTokens.some((ct) => this.tokensMatch(t, ct)));
414
- results.push({
415
- file: stored.file,
416
- snippet: this.extractSnippet(stored.content, 200),
417
- score,
418
- highlights: matchedTokens,
419
- metadata: stored.metadata,
420
- });
421
- }
422
- }
423
- // Sort by score and limit
424
- return results.sort((a, b) => b.score - a.score).slice(0, limit);
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 content token matches a query token it contains, or that contains it.
629
- * #1224: the second direction needs a content token of 3+ characters, so a
630
- * one-letter variable such as `i` does not match the query "login".
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) => ct.includes(qt) || qt.includes(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.recordNull({
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
- wc.append(finalResult.passed ? 'QUALITY_GATE_PASS' : 'QUALITY_GATE_FAIL', { gateName: request.gateName, passed: finalResult.passed, score: finalResult.overallScore, failedChecks: finalResult.failedChecks }, 'quality-gate');
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
- * Detect test framework from file patterns and project configuration
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
  /**