agentic-qe 3.15.14 → 3.15.16

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 (513) hide show
  1. package/.claude/agents/v3/templates/qx-report-template.html +1 -1
  2. package/.claude/skills/skills-manifest.json +1 -1
  3. package/CHANGELOG.md +136 -0
  4. package/assets/agents/v3/templates/qx-report-template.html +1 -1
  5. package/assets/skills/skills-manifest.json +1 -1
  6. package/dist/audit/witness-chain.d.ts +7 -0
  7. package/dist/audit/witness-chain.js +10 -0
  8. package/dist/cli/bundle.js +6 -6
  9. package/dist/cli/chunks/adapter-6CQ2PIP5.js +2 -0
  10. package/dist/cli/chunks/agent-booster-wasm-45NWEKVS.js +2 -0
  11. package/dist/cli/chunks/{agent-handler-P3IY7XEE.js → agent-handler-LVHMYFEF.js} +2 -2
  12. package/dist/cli/chunks/{agent-memory-branch-WWKC2H3G.js → agent-memory-branch-YDWOJFEQ.js} +2 -2
  13. package/dist/cli/chunks/aqe-learning-engine-73RR52VS.js +2 -0
  14. package/dist/cli/chunks/{arena-EIV5OALF.js → arena-CZKHXDDS.js} +2 -2
  15. package/dist/cli/chunks/{arena-4BMFF6BS.js → arena-ELDZH3CZ.js} +4 -4
  16. package/dist/cli/chunks/{audit-DNTI453H.js → audit-5MT4T47Z.js} +3 -3
  17. package/dist/cli/chunks/base-SMCMMVGP.js +2 -0
  18. package/dist/cli/chunks/{better-sqlite3-TQBQGNC6.js → better-sqlite3-6TGYPC2B.js} +2 -2
  19. package/dist/cli/chunks/{brain-handler-HY57CNAO.js → brain-handler-HQWZFO52.js} +3 -3
  20. package/dist/cli/chunks/{branch-enumerator-THPMZPHQ.js → branch-enumerator-WVILM4SO.js} +2 -2
  21. package/dist/cli/chunks/{browser-O6JJOZCK.js → browser-RX5ALU3H.js} +2 -2
  22. package/dist/cli/chunks/browser-workflow-A2MEZ66K.js +2 -0
  23. package/dist/cli/chunks/{chunk-CIINJHOX.js → chunk-24OX5TQJ.js} +1 -1
  24. package/dist/cli/chunks/{chunk-6P4Q4RTC.js → chunk-24QHCVX6.js} +1 -1
  25. package/dist/cli/chunks/{chunk-U6IOQKCT.js → chunk-2H4XH6FT.js} +2 -2
  26. package/dist/cli/chunks/{chunk-OGEIHS76.js → chunk-2YZ4G6NW.js} +1 -1
  27. package/dist/cli/chunks/chunk-32BPDLRZ.js +27 -0
  28. package/dist/cli/chunks/{chunk-5PLBQZ5J.js → chunk-32GN3JKR.js} +1 -1
  29. package/dist/cli/chunks/{chunk-AJVLVF7V.js → chunk-3HD7E6HN.js} +2 -2
  30. package/dist/cli/chunks/{chunk-X7CUI7KH.js → chunk-4D4DENG6.js} +2 -2
  31. package/dist/cli/chunks/{chunk-E2JLAW3U.js → chunk-4LQFBY5L.js} +6 -6
  32. package/dist/cli/chunks/{chunk-E3QIQMMN.js → chunk-4NFQLP6R.js} +1 -1
  33. package/dist/cli/chunks/{chunk-7Y3LXH57.js → chunk-525CFDUE.js} +2 -2
  34. package/dist/cli/chunks/chunk-5B5QPCNU.js +65 -0
  35. package/dist/cli/chunks/{chunk-X6Q2N5S5.js → chunk-5JZRZI4S.js} +2 -2
  36. package/dist/cli/chunks/{chunk-MB4UKUBV.js → chunk-5LAVKGLH.js} +2 -2
  37. package/dist/cli/chunks/chunk-5NNNEWLS.js +755 -0
  38. package/dist/cli/chunks/{chunk-NKOLILT7.js → chunk-5PBLPQ5T.js} +2 -2
  39. package/dist/cli/chunks/chunk-5QO3R3TU.js +6 -0
  40. package/dist/cli/chunks/{chunk-7T6L3LFN.js → chunk-5SPCGMBB.js} +2 -2
  41. package/dist/cli/chunks/{chunk-2QLE6NDW.js → chunk-5V3TI2LG.js} +1 -1
  42. package/dist/cli/chunks/{chunk-A2T56XVL.js → chunk-5VZL4UVN.js} +2 -2
  43. package/dist/cli/chunks/{chunk-TWOV3I3A.js → chunk-63GMRQ25.js} +1 -1
  44. package/dist/cli/chunks/{chunk-YGOSSVY5.js → chunk-63ZKI4PX.js} +6 -6
  45. package/dist/cli/chunks/{chunk-FHPNWHY7.js → chunk-67Z5R7RJ.js} +2 -2
  46. package/dist/cli/chunks/{chunk-PCQZIAXB.js → chunk-6DPYNAOK.js} +2 -2
  47. package/dist/cli/chunks/{chunk-WCM6WE7G.js → chunk-6ICX3FEG.js} +3 -3
  48. package/dist/cli/chunks/{chunk-JB7R77SH.js → chunk-6XXZDV2C.js} +2 -2
  49. package/dist/cli/chunks/{chunk-FJOIBZUB.js → chunk-6ZBXSOX6.js} +2 -2
  50. package/dist/cli/chunks/{chunk-WZQADC5R.js → chunk-72XSEQMW.js} +2 -2
  51. package/dist/cli/chunks/{chunk-AYLEH2UF.js → chunk-7TE5ONQQ.js} +1 -1
  52. package/dist/cli/chunks/{chunk-7QUSNBAA.js → chunk-A5GBXCP5.js} +2 -2
  53. package/dist/cli/chunks/{chunk-7724KXM2.js → chunk-AAMLQ2LF.js} +3 -3
  54. package/dist/cli/chunks/chunk-AG2EWGXS.js +21 -0
  55. package/dist/cli/chunks/{chunk-2UZBLC5H.js → chunk-AGRV5B3T.js} +2 -2
  56. package/dist/cli/chunks/{chunk-V6SE2ZU2.js → chunk-AJMJNQMP.js} +1 -1
  57. package/dist/cli/chunks/{chunk-2HPNGK7A.js → chunk-AR67RJPY.js} +2 -2
  58. package/dist/cli/chunks/{chunk-G7HGUQAE.js → chunk-ASEOFRIG.js} +2 -2
  59. package/dist/cli/chunks/{chunk-7TH4PJSU.js → chunk-BEKDKVQT.js} +2 -2
  60. package/dist/cli/chunks/{chunk-M5JEA6ZY.js → chunk-BY5OF7OH.js} +2 -2
  61. package/dist/cli/chunks/{chunk-OLUOVNUF.js → chunk-C5FP5GW3.js} +2 -2
  62. package/dist/cli/chunks/{chunk-R5RRWLRI.js → chunk-C6D5AHBO.js} +2 -2
  63. package/dist/cli/chunks/{chunk-K7GFYFBO.js → chunk-CAKMOVZ6.js} +2 -2
  64. package/dist/cli/chunks/{chunk-6NIGSY5L.js → chunk-CEYSYSK5.js} +2 -2
  65. package/dist/cli/chunks/{chunk-U4TML2VD.js → chunk-CGGUM2YJ.js} +2 -2
  66. package/dist/cli/chunks/{chunk-YE54T2NQ.js → chunk-CJSHWQXP.js} +2 -2
  67. package/dist/cli/chunks/{chunk-7SQTLUEN.js → chunk-CRPIYUTJ.js} +2 -2
  68. package/dist/cli/chunks/{chunk-65EE2EST.js → chunk-D6COXLYE.js} +2 -2
  69. package/dist/cli/chunks/{chunk-4WLIOPHX.js → chunk-DTMAS2GB.js} +2 -2
  70. package/dist/cli/chunks/{chunk-E7QTWGPI.js → chunk-DVYHMDFR.js} +470 -411
  71. package/dist/cli/chunks/chunk-DXD6K2ZP.js +3 -0
  72. package/dist/cli/chunks/{chunk-HSDWPQQY.js → chunk-E3D4GPLP.js} +3 -3
  73. package/dist/cli/chunks/{chunk-JJHLGGPP.js → chunk-EA4YQVKS.js} +1 -1
  74. package/dist/cli/chunks/{chunk-EIEEST4T.js → chunk-EGYE5UPQ.js} +2 -2
  75. package/dist/cli/chunks/{chunk-O756AOUX.js → chunk-EK7OLYOZ.js} +2 -2
  76. package/dist/cli/chunks/{chunk-57DRT6UA.js → chunk-F742SZAX.js} +2 -2
  77. package/dist/cli/chunks/{chunk-6OI5SK7M.js → chunk-FBDVGRSC.js} +1 -1
  78. package/dist/cli/chunks/{chunk-H3C5FJRH.js → chunk-FDDC72IA.js} +2 -2
  79. package/dist/cli/chunks/{chunk-IQRPR4KB.js → chunk-FL64OUBA.js} +2 -2
  80. package/dist/cli/chunks/{chunk-BNG4J3CE.js → chunk-FLNAW7C4.js} +2 -2
  81. package/dist/cli/chunks/{chunk-C3OIBFAA.js → chunk-G5RHFBAY.js} +2 -2
  82. package/dist/cli/chunks/{chunk-NPCXGX7N.js → chunk-GAHNO6JJ.js} +2 -2
  83. package/dist/cli/chunks/{chunk-PNRPVQGI.js → chunk-GFWHUQSF.js} +2 -2
  84. package/dist/cli/chunks/{chunk-OCN53CCK.js → chunk-GJYHWYXR.js} +2 -2
  85. package/dist/cli/chunks/{chunk-5Z4MO2F3.js → chunk-GQ6TUIKY.js} +1 -1
  86. package/dist/cli/chunks/{chunk-N736GLWZ.js → chunk-GSKMOPL7.js} +2 -2
  87. package/dist/cli/chunks/{chunk-43XHGWYH.js → chunk-HCH4Y6XX.js} +2 -2
  88. package/dist/cli/chunks/{chunk-QP6GL3O5.js → chunk-HGWXF45W.js} +1 -1
  89. package/dist/cli/chunks/{chunk-PGN4TARY.js → chunk-HJ6ZGVTB.js} +2 -2
  90. package/dist/cli/chunks/{chunk-M2TG7VDK.js → chunk-HLUXXCHF.js} +1 -1
  91. package/dist/cli/chunks/{chunk-UMHFTQTR.js → chunk-HVRRLYX6.js} +4 -4
  92. package/dist/cli/chunks/{chunk-L7PC675Y.js → chunk-I7MQIM2U.js} +1 -1
  93. package/dist/cli/chunks/{chunk-JSSU4RIK.js → chunk-IESR7TNB.js} +2 -2
  94. package/dist/cli/chunks/{chunk-H4LYXLAT.js → chunk-IHRXZZQM.js} +1 -1
  95. package/dist/cli/chunks/{chunk-HV43NX4A.js → chunk-IOKYCMTJ.js} +6 -6
  96. package/dist/cli/chunks/{chunk-NZQYJCO6.js → chunk-IOQ6ZQ5W.js} +1 -1
  97. package/dist/cli/chunks/{chunk-JO26SG47.js → chunk-IOYG4VFL.js} +2 -2
  98. package/dist/cli/chunks/{chunk-6O63ZTVX.js → chunk-IUBJVHNB.js} +2 -2
  99. package/dist/cli/chunks/{chunk-XSPMLJCQ.js → chunk-J442IZLE.js} +1 -1
  100. package/dist/cli/chunks/{chunk-LTGQJYYO.js → chunk-J4ELZNLY.js} +2 -2
  101. package/dist/cli/chunks/chunk-J7I6PABJ.js +153 -0
  102. package/dist/cli/chunks/chunk-JDIYMZCQ.js +2 -0
  103. package/dist/cli/chunks/{chunk-TOJF3ZG4.js → chunk-JHQCRRJI.js} +2 -2
  104. package/dist/cli/chunks/{chunk-QUZ745UQ.js → chunk-JQ3DYUMS.js} +2 -2
  105. package/dist/cli/chunks/{chunk-P2TPH3TC.js → chunk-KITOPKRG.js} +2 -2
  106. package/dist/cli/chunks/{chunk-QNQE3EOH.js → chunk-KKU2QGSJ.js} +2 -2
  107. package/dist/cli/chunks/chunk-KL7OKSU2.js +4 -0
  108. package/dist/cli/chunks/{chunk-L5VSLPMW.js → chunk-KNSRL6NO.js} +2 -2
  109. package/dist/cli/chunks/{chunk-INGXD5IX.js → chunk-KPRCB5LT.js} +2 -2
  110. package/dist/cli/chunks/{chunk-GY4P7KAI.js → chunk-KQYJ4VQ5.js} +1 -1
  111. package/dist/cli/chunks/{chunk-Z2S7DNFP.js → chunk-KU2AUFGX.js} +2 -2
  112. package/dist/cli/chunks/{chunk-O5CEL447.js → chunk-KVF4NXGQ.js} +2 -2
  113. package/dist/cli/chunks/{chunk-2IJO3657.js → chunk-KXCLACFG.js} +2 -2
  114. package/dist/cli/chunks/{chunk-ZJGFQK27.js → chunk-L2DWPVNJ.js} +1 -1
  115. package/dist/cli/chunks/{chunk-E7OR6V3V.js → chunk-L6QSTQME.js} +2 -2
  116. package/dist/cli/chunks/{chunk-RE6JTSDM.js → chunk-LE4QJREF.js} +1 -1
  117. package/dist/cli/chunks/{chunk-DSQESXL4.js → chunk-LKTTUHLF.js} +2 -2
  118. package/dist/cli/chunks/{chunk-YGC5QKQ4.js → chunk-LQLPB2T6.js} +2 -2
  119. package/dist/cli/chunks/{chunk-VGZOPQQY.js → chunk-LRSX2FJM.js} +1 -1
  120. package/dist/cli/chunks/chunk-M4FRQ4TE.js +12 -0
  121. package/dist/cli/chunks/chunk-M7WJCTG3.js +2 -0
  122. package/dist/cli/chunks/{chunk-56NSE3LJ.js → chunk-MAFQV4U4.js} +2 -2
  123. package/dist/cli/chunks/{chunk-MKYOE7NE.js → chunk-MD43XRX5.js} +1 -1
  124. package/dist/cli/chunks/{chunk-3TF27MG5.js → chunk-MI5MFHRA.js} +2 -2
  125. package/dist/cli/chunks/{chunk-JK6PMLQQ.js → chunk-MO55CVMT.js} +32 -32
  126. package/dist/cli/chunks/{chunk-X6NJOT3V.js → chunk-N7HL5PHH.js} +1 -1
  127. package/dist/cli/chunks/chunk-NAEWCFQT.js +14 -0
  128. package/dist/cli/chunks/{chunk-WUGXXNK4.js → chunk-NDJ7P2EP.js} +1 -1
  129. package/dist/cli/chunks/{chunk-D5GB5PUU.js → chunk-NO3IV5Q5.js} +1 -1
  130. package/dist/cli/chunks/{chunk-3XACRXBY.js → chunk-NQXXI77K.js} +2 -2
  131. package/dist/cli/chunks/{chunk-EC65UZ77.js → chunk-NVEWF4JV.js} +1 -1
  132. package/dist/cli/chunks/{chunk-JI67T6Q2.js → chunk-NZU4ACBZ.js} +2 -2
  133. package/dist/cli/chunks/chunk-O5W3FIO6.js +63 -0
  134. package/dist/cli/chunks/{chunk-YEFTK4HD.js → chunk-OAEE6JWQ.js} +2 -2
  135. package/dist/cli/chunks/{chunk-JAOCHPYX.js → chunk-OCV2XEWQ.js} +2 -2
  136. package/dist/cli/chunks/{chunk-IDBA5GK2.js → chunk-P3EYRILV.js} +2 -2
  137. package/dist/cli/chunks/{chunk-4RPBODN5.js → chunk-PEQDY4BO.js} +2 -2
  138. package/dist/cli/chunks/{chunk-CPPYZYXC.js → chunk-PF7RBAYL.js} +2 -2
  139. package/dist/cli/chunks/{chunk-WCPSR4MJ.js → chunk-PHT5N7SC.js} +2 -2
  140. package/dist/cli/chunks/{chunk-O2AAYJUV.js → chunk-PINSJCM3.js} +1 -1
  141. package/dist/cli/chunks/{chunk-HEDGFKC5.js → chunk-PPUZWYUG.js} +2 -2
  142. package/dist/cli/chunks/{chunk-XMCSKYDE.js → chunk-QPEOLAAS.js} +1 -1
  143. package/dist/cli/chunks/{chunk-7MUO4DEH.js → chunk-QQWBWEJS.js} +18 -18
  144. package/dist/cli/chunks/{chunk-UFP7SN5V.js → chunk-QVDCVD5D.js} +2 -2
  145. package/dist/cli/chunks/{chunk-NHEG2DLN.js → chunk-RJIEG3NA.js} +2 -2
  146. package/dist/cli/chunks/{chunk-KJ5A54ZH.js → chunk-RV74I3YO.js} +2 -2
  147. package/dist/cli/chunks/{chunk-UDSB3XCG.js → chunk-S75SOOZL.js} +2 -2
  148. package/dist/cli/chunks/{chunk-BPDAQB3F.js → chunk-SASBO5Y5.js} +2 -2
  149. package/dist/cli/chunks/{chunk-VJBJRFUO.js → chunk-SDLWKRVL.js} +9 -9
  150. package/dist/cli/chunks/{chunk-J6ASX536.js → chunk-SHKOCGNK.js} +2 -2
  151. package/dist/cli/chunks/{chunk-J35JWDJE.js → chunk-SI6DPU5D.js} +1 -1
  152. package/dist/cli/chunks/{chunk-V3MGY76S.js → chunk-SJ6Y4725.js} +2 -2
  153. package/dist/cli/chunks/{chunk-FTYRPEJS.js → chunk-SR52XP5F.js} +1 -1
  154. package/dist/cli/chunks/{chunk-ZUE524JL.js → chunk-SSUAAX3F.js} +2 -2
  155. package/dist/cli/chunks/{chunk-VG32EEUG.js → chunk-SSYAQZXA.js} +2 -2
  156. package/dist/cli/chunks/{chunk-HTVGHHX2.js → chunk-SUDMM5SO.js} +2 -2
  157. package/dist/cli/chunks/{chunk-K2SMP4OD.js → chunk-TIUKLYAI.js} +1 -1
  158. package/dist/cli/chunks/{chunk-VCVRZD4Y.js → chunk-TVGI32MB.js} +33 -33
  159. package/dist/cli/chunks/{chunk-CAZM63TP.js → chunk-U2A7NHZA.js} +2 -2
  160. package/dist/cli/chunks/{chunk-WBC6WB32.js → chunk-UE5ZOZR2.js} +2 -2
  161. package/dist/cli/chunks/{chunk-BQJ7CV53.js → chunk-UHEOGZLX.js} +12 -12
  162. package/dist/cli/chunks/chunk-UNGBRZDK.js +12 -0
  163. package/dist/cli/chunks/{chunk-XN3KCKAM.js → chunk-V5NHZV7S.js} +2 -2
  164. package/dist/cli/chunks/{chunk-UNYTHZDZ.js → chunk-VJCIEHEF.js} +1 -1
  165. package/dist/cli/chunks/{chunk-5Y7UFHJD.js → chunk-VMDFFTCK.js} +1 -1
  166. package/dist/cli/chunks/chunk-VSIKHWZ4.js +29 -0
  167. package/dist/cli/chunks/{chunk-UPWLMIDY.js → chunk-VWPM27GU.js} +2 -2
  168. package/dist/cli/chunks/{chunk-USAKCGHC.js → chunk-VXFLJNCA.js} +2 -2
  169. package/dist/cli/chunks/{chunk-WKI46WWN.js → chunk-W5HQUIML.js} +2 -2
  170. package/dist/cli/chunks/{chunk-Z54G2YOL.js → chunk-WP4RETKG.js} +2 -2
  171. package/dist/cli/chunks/{chunk-IRPNEXOU.js → chunk-XIIQ5QTT.js} +2 -2
  172. package/dist/cli/chunks/{chunk-O32BFQV4.js → chunk-XIQW7EFL.js} +2 -2
  173. package/dist/cli/chunks/{chunk-TW6Z6W4X.js → chunk-XWUWX7BV.js} +13 -13
  174. package/dist/cli/chunks/{chunk-57FX3GP6.js → chunk-Y4PFUMOU.js} +1 -1
  175. package/dist/cli/chunks/chunk-YAPLJR7K.js +2 -0
  176. package/dist/cli/chunks/{chunk-4T7XV5KQ.js → chunk-YLMNVLDK.js} +1 -1
  177. package/dist/cli/chunks/{chunk-TSP6SU5V.js → chunk-YNMJEDN5.js} +2 -2
  178. package/dist/cli/chunks/{chunk-PWQWKYBG.js → chunk-YPBSUGMI.js} +1 -1
  179. package/dist/cli/chunks/{chunk-QP2HLKTS.js → chunk-YRAX7SFJ.js} +2 -2
  180. package/dist/cli/chunks/{chunk-O3ERGUXH.js → chunk-YTHTQPWR.js} +1 -1
  181. package/dist/cli/chunks/{chunk-MR2OPUSA.js → chunk-YU2BDRSD.js} +1 -1
  182. package/dist/cli/chunks/chunk-ZB3LEFYG.js +2 -0
  183. package/dist/cli/chunks/{chunk-2W5MQDHM.js → chunk-ZFL436FN.js} +2 -2
  184. package/dist/cli/chunks/{chunk-7MISCSL5.js → chunk-ZJH5MU2I.js} +2 -2
  185. package/dist/cli/chunks/{chunk-52KOPIMI.js → chunk-ZQ2XW3IP.js} +2 -2
  186. package/dist/cli/chunks/chunk-ZR2TKVXQ.js +14 -0
  187. package/dist/cli/chunks/{ci-UMA2SMNW.js → ci-MFUR4CWV.js} +2 -2
  188. package/dist/cli/chunks/{ci-config-UQSILJFQ.js → ci-config-PNDLQ6XV.js} +2 -2
  189. package/dist/cli/chunks/{ci-output-U6YZLLKH.js → ci-output-PFZ4M7NC.js} +2 -2
  190. package/dist/cli/chunks/{circuit-breaker-ATYQP6X2.js → circuit-breaker-5HH6NLZN.js} +2 -2
  191. package/dist/cli/chunks/{claude-flow-setup-6YHFD7AN.js → claude-flow-setup-QCKYLGLC.js} +2 -2
  192. package/dist/cli/chunks/client-MHQRTZM4.js +2 -0
  193. package/dist/cli/chunks/{cline-installer-EPE7IOZE.js → cline-installer-EASVPFXR.js} +2 -2
  194. package/dist/cli/chunks/{code-NUEJ4XYO.js → code-UJXDVYRK.js} +4 -3
  195. package/dist/cli/chunks/{code-index-extractor-D4DBT6OL.js → code-index-extractor-BZJ3UDP4.js} +2 -2
  196. package/dist/cli/chunks/{codex-installer-633SM4LR.js → codex-installer-XSQZUVOZ.js} +4 -4
  197. package/dist/cli/chunks/{completions-WUKVIW3L.js → completions-OWOOJFI2.js} +2 -2
  198. package/dist/cli/chunks/{complexity-analyzer-F73ACR5H.js → complexity-analyzer-KP5TOHDT.js} +2 -2
  199. package/dist/cli/chunks/{continuedev-installer-QH42TKMS.js → continuedev-installer-IFKQXLHM.js} +2 -2
  200. package/dist/cli/chunks/{copilot-installer-Y3XC7BTT.js → copilot-installer-IGJ6KGQY.js} +2 -2
  201. package/dist/cli/chunks/core-handlers-UAK3LLJE.js +2 -0
  202. package/dist/cli/chunks/{cost-tracker-57QPV7E3.js → cost-tracker-MMDDNKZB.js} +2 -2
  203. package/dist/cli/chunks/{coverage-IBCHMBCR.js → coverage-LUH2B7NT.js} +3 -3
  204. package/dist/cli/chunks/cross-domain-router-WTRZQPNQ.js +2 -0
  205. package/dist/cli/chunks/{cursor-installer-F4UYQHIN.js → cursor-installer-4YLM5GWM.js} +2 -2
  206. package/dist/cli/chunks/daemon-CAVZ7OFV.js +18 -0
  207. package/dist/cli/chunks/{daemon-XR4Q6YZF.js → daemon-MZKVM4CJ.js} +3 -3
  208. package/dist/cli/chunks/{dag-attention-scheduler-ZR5ZD3TW.js → dag-attention-scheduler-X4CYW665.js} +2 -2
  209. package/dist/cli/chunks/{detect-GEGYURLL.js → detect-7BM2XINO.js} +2 -2
  210. package/dist/cli/chunks/{dist-node-JU3KT2JO.js → dist-node-Y5APLEYB.js} +2 -2
  211. package/dist/cli/chunks/{domain-handler-7QI3FJGE.js → domain-handler-X3ZRJNAH.js} +2 -2
  212. package/dist/cli/chunks/{domain-plugins-O2YRM2PD.js → domain-plugins-2UW5KQJB.js} +2 -2
  213. package/dist/cli/chunks/{domain-transfer-7J3S2OS6.js → domain-transfer-35W4CIBV.js} +2 -2
  214. package/dist/cli/chunks/dream-EJY24JN6.js +2 -0
  215. package/dist/cli/chunks/embed-and-insert-pattern-COG4C7ZI.js +3 -0
  216. package/dist/cli/chunks/embedding-space-SBM2MZD2.js +2 -0
  217. package/dist/cli/chunks/{eval-RVMCIUOR.js → eval-4QA2SROK.js} +2 -2
  218. package/dist/cli/chunks/experience-capture-middleware-Z6BF6KYM.js +40 -0
  219. package/dist/cli/chunks/{fast-paths-QUKPKWKZ.js → fast-paths-FIORX6GN.js} +2 -2
  220. package/dist/cli/chunks/{feature-flags-K7JXNKJI.js → feature-flags-6LYI2T4G.js} +2 -2
  221. package/dist/cli/chunks/{feature-flags-5JCSKL2P.js → feature-flags-ZOO7LMIC.js} +2 -2
  222. package/dist/cli/chunks/file-discovery-UZSFSS4V.js +2 -0
  223. package/dist/cli/chunks/{fleet-II4Q6HXK.js → fleet-7WF53H4F.js} +3 -3
  224. package/dist/cli/chunks/{gnn-wrapper-M7VO2EMS.js → gnn-wrapper-KJ6B7BRM.js} +2 -2
  225. package/dist/cli/chunks/{heartbeat-handler-ND5CY26N.js → heartbeat-handler-DEKKMOVW.js} +4 -4
  226. package/dist/cli/chunks/heartbeat-scheduler-NVR356I7.js +2 -0
  227. package/dist/cli/chunks/hnsw-adapter-LFMPLUJU.js +2 -0
  228. package/dist/cli/chunks/hnsw-index-POCPMVJH.js +2 -0
  229. package/dist/cli/chunks/{hnsw-legacy-bridge-N3AUUUU7.js → hnsw-legacy-bridge-L27WS27N.js} +2 -2
  230. package/dist/cli/chunks/{hnswlib-node-NZY3E5EN.js → hnswlib-node-4YOQC6L4.js} +2 -2
  231. package/dist/cli/chunks/{hooks-QVJDTII5.js → hooks-TAOKV4EJ.js} +23 -22
  232. package/dist/cli/chunks/hybrid-backend-4STAO7CV.js +2 -0
  233. package/dist/cli/chunks/{hypergraph-engine-ZRY6MTDV.js → hypergraph-engine-BODRJLHL.js} +2 -2
  234. package/dist/cli/chunks/{hypergraph-handler-56DO4XZQ.js → hypergraph-handler-RKMYJNTU.js} +3 -3
  235. package/dist/cli/chunks/impact-analyzer-3VIIISBQ.js +2 -0
  236. package/dist/cli/chunks/{init-guard-DTF4EVUY.js → init-guard-MXHSLSB2.js} +2 -2
  237. package/dist/cli/chunks/{init-handler-M6CNQHMX.js → init-handler-HUE57IFW.js} +6 -6
  238. package/dist/cli/chunks/init-wizard-PL6QN6RQ.js +2 -0
  239. package/dist/cli/chunks/kernel-CCDWT7KS.js +2 -0
  240. package/dist/cli/chunks/{kilocode-installer-IJN7XKBH.js → kilocode-installer-S333IKYQ.js} +2 -2
  241. package/dist/cli/chunks/{kiro-installer-UKKPGPDC.js → kiro-installer-WM5DLQWC.js} +2 -2
  242. package/dist/cli/chunks/knowledge-graph-KFOMEN3H.js +2 -0
  243. package/dist/cli/chunks/{learning-W2HETWQ4.js → learning-LNHMQLH5.js} +3 -3
  244. package/dist/cli/chunks/{llm-router-Y546K4VX.js → llm-router-EWFXYZZR.js} +4 -4
  245. package/dist/cli/chunks/llm-router-service-7NBE2EX6.js +2 -0
  246. package/dist/cli/chunks/{load-MKAB2AXE.js → load-FGYGWVDK.js} +2 -2
  247. package/dist/cli/chunks/load-test-UNZUWY3F.js +2 -0
  248. package/dist/cli/chunks/{mcp-AZKUS6K3.js → mcp-2FHNAAOM.js} +2 -2
  249. package/dist/cli/chunks/{memory-ZDOQN2KU.js → memory-DZMQ73AB.js} +5 -5
  250. package/dist/cli/chunks/memory-backend-DFGKWA2Q.js +2 -0
  251. package/dist/cli/chunks/memory-handlers-MP426XRJ.js +2 -0
  252. package/dist/cli/chunks/{multi-model-executor-WWVXDHG4.js → multi-model-executor-6F2UAEUW.js} +2 -2
  253. package/dist/cli/chunks/{opencode-installer-YUJNXXWS.js → opencode-installer-XY3BGOTZ.js} +2 -2
  254. package/dist/cli/chunks/{orchestrator-Z6PWPLRE.js → orchestrator-B4CNKUOS.js} +17 -17
  255. package/dist/cli/chunks/pattern-null-store-SSVF5TE5.js +2 -0
  256. package/dist/cli/chunks/{pattern-usage-recorder-TPWPX32U.js → pattern-usage-recorder-R4GUFNMD.js} +2 -2
  257. package/dist/cli/chunks/{pipeline-4BBGTE4M.js → pipeline-FG5RKVRO.js} +2 -2
  258. package/dist/cli/chunks/{platform-5GSHXCV5.js → platform-3BT4KEVJ.js} +2 -2
  259. package/dist/cli/chunks/{plugin-OFDVF5HS.js → plugin-WI4RIN7O.js} +2 -2
  260. package/dist/cli/chunks/{prime-radiant-advanced-wasm-NC6MUYGJ.js → prime-radiant-advanced-wasm-7ECDNQFS.js} +2 -2
  261. package/dist/cli/chunks/project-root-BEANNYWU.js +2 -0
  262. package/dist/cli/chunks/protocol-executor-FQVIHXZ7.js +2 -0
  263. package/dist/cli/chunks/{protocol-handler-MPOAAEPA.js → protocol-handler-WNODKPGW.js} +2 -2
  264. package/dist/cli/chunks/{prove-CDKMAIVM.js → prove-5RHAEPYZ.js} +2 -2
  265. package/dist/cli/chunks/qe-reasoning-bank-5TFYSE24.js +2 -0
  266. package/dist/cli/chunks/{quality-ZH4F7R7R.js → quality-WPHR7BGQ.js} +2 -2
  267. package/dist/cli/chunks/{quality-gate-IDRMW6OE.js → quality-gate-4RKTEZMX.js} +3 -3
  268. package/dist/cli/chunks/queen-coordinator-Y2OUL7IN.js +2 -0
  269. package/dist/cli/chunks/real-embeddings-OXLYU7JW.js +2 -0
  270. package/dist/cli/chunks/{ref-validation-Z5GCGVXK.js → ref-validation-TPAWHOHH.js} +2 -2
  271. package/dist/cli/chunks/{roocode-installer-IZ2S7PH2.js → roocode-installer-7AVHFNDI.js} +2 -2
  272. package/dist/cli/chunks/router-EP34O3KB.js +2 -0
  273. package/dist/cli/chunks/routing-feedback-FJCRKXNG.js +2 -0
  274. package/dist/cli/chunks/{routing-handler-NAX35VUW.js → routing-handler-YKEDVJSH.js} +2 -2
  275. package/dist/cli/chunks/{ruvector-commands-5YW2SOFF.js → ruvector-commands-JUAMM354.js} +2 -2
  276. package/dist/cli/chunks/rvf-dual-writer-ILITJSFG.js +2 -0
  277. package/dist/cli/chunks/rvf-migration-adapter-XF6W4C2N.js +2 -0
  278. package/dist/cli/chunks/rvf-migration-coordinator-CMKG56AR.js +2 -0
  279. package/dist/cli/chunks/rvf-native-adapter-7YFW6S4Y.js +2 -0
  280. package/dist/cli/chunks/{rvf-store-integrity-IPGCAT6C.js → rvf-store-integrity-VJDUIRTX.js} +2 -2
  281. package/dist/cli/chunks/safe-db-TCAU4FUT.js +2 -0
  282. package/dist/cli/chunks/schedule-NB5KV435.js +2 -0
  283. package/dist/cli/chunks/scheduler-JKXGKVK6.js +2 -0
  284. package/dist/cli/chunks/{security-3IH4BO5Z.js → security-ORDN3RD2.js} +3 -3
  285. package/dist/cli/chunks/{shared-rvf-adapter-ABY7PAY2.js → shared-rvf-adapter-CF4BCIO7.js} +2 -2
  286. package/dist/cli/chunks/{shared-rvf-dual-writer-6KENLN2W.js → shared-rvf-dual-writer-C32UBR6D.js} +2 -2
  287. package/dist/cli/chunks/sqlite-persistence-IXCNZRTW.js +2 -0
  288. package/dist/cli/chunks/{standalone-memory-RLFAUGOW.js → standalone-memory-OXRJYZXN.js} +2 -2
  289. package/dist/cli/chunks/{status-handler-FCOZBPE5.js → status-handler-BCX5D4HY.js} +2 -2
  290. package/dist/cli/chunks/{structural-health-4RDA5UUM.js → structural-health-LFG7RUU6.js} +2 -2
  291. package/dist/cli/chunks/sync-OSF7C2NL.js +2 -0
  292. package/dist/cli/chunks/{sync-KGEEXXCC.js → sync-YJEE2K2L.js} +2 -2
  293. package/dist/cli/chunks/task-handler-6LXKPTXJ.js +64 -0
  294. package/dist/cli/chunks/{task-handlers-6H7L2UT4.js → task-handlers-CILP36I7.js} +4 -4
  295. package/dist/cli/chunks/{test-S7IG6EIX.js → test-SD457QJ6.js} +4 -4
  296. package/dist/cli/chunks/test-runner-process-VKD65QQU.js +2 -0
  297. package/dist/cli/chunks/{test-scheduling-7XYXI4L2.js → test-scheduling-ISI2O4Q5.js} +3 -3
  298. package/dist/cli/chunks/token-bootstrap-VUELSBOS.js +2 -0
  299. package/dist/cli/chunks/{token-usage-Y2YTPOFE.js → token-usage-XOC5KG7S.js} +2 -2
  300. package/dist/cli/chunks/{transformers-UCJ3HHHC.js → transformers-LSLQAARK.js} +2 -2
  301. package/dist/cli/chunks/tree-sitter-wasm-parser-YAIPHRIL.js +2 -0
  302. package/dist/cli/chunks/{types-6CMFPETH.js → types-5BLCGLCR.js} +2 -2
  303. package/dist/cli/chunks/unified-memory-GI76TXFV.js +2 -0
  304. package/dist/cli/chunks/unified-memory-hnsw-GXJ5BTZO.js +2 -0
  305. package/dist/cli/chunks/unified-persistence-OP7FDQPD.js +2 -0
  306. package/dist/cli/chunks/{upgrade-K25DN6WU.js → upgrade-RQJYLK3J.js} +2 -2
  307. package/dist/cli/chunks/{validate-T4V3TBY3.js → validate-QBHWXXCK.js} +2 -2
  308. package/dist/cli/chunks/{validate-swarm-XSRC576T.js → validate-swarm-IKXBKFB5.js} +2 -2
  309. package/dist/cli/chunks/visual-security-GZ2MOKWB.js +2 -0
  310. package/dist/cli/chunks/{web-tree-sitter-YOZXHRTN.js → web-tree-sitter-ZF6FIE5R.js} +2 -2
  311. package/dist/cli/chunks/{windsurf-installer-ITPU2IYL.js → windsurf-installer-HQGDZT5D.js} +2 -2
  312. package/dist/cli/chunks/witness-chain-DCHCAMSQ.js +2 -0
  313. package/dist/cli/chunks/witness-chain-P3XXXA62.js +2 -0
  314. package/dist/cli/chunks/witness-chain-repair-PUX2NFDL.js +2 -0
  315. package/dist/cli/chunks/{witness-chain-verifier-DTDSVKOG.js → witness-chain-verifier-PX2OQ6XT.js} +2 -2
  316. package/dist/cli/chunks/{witness-key-manager-EWACWGAW.js → witness-key-manager-RXYQNFJB.js} +2 -2
  317. package/dist/cli/chunks/{workflow-ZIQ4FV42.js → workflow-FBKCA4H6.js} +4 -4
  318. package/dist/cli/chunks/workflow-orchestrator-P2APAJAA.js +2 -0
  319. package/dist/cli/chunks/wrappers-TWSKBTWD.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/handlers/task-handler.d.ts +5 -0
  323. package/dist/cli/handlers/task-handler.js +21 -1
  324. package/dist/cli/utils/task-result.d.ts +11 -0
  325. package/dist/cli/utils/task-result.js +39 -0
  326. package/dist/coordination/handlers/test-execution-handlers.js +92 -58
  327. package/dist/coordination/mincut/mincut-persistence.js +29 -25
  328. package/dist/domains/code-intelligence/coordinator.d.ts +4 -0
  329. package/dist/domains/code-intelligence/coordinator.js +46 -13
  330. package/dist/domains/code-intelligence/interfaces.d.ts +10 -1
  331. package/dist/domains/code-intelligence/services/semantic-analyzer.d.ts +32 -7
  332. package/dist/domains/code-intelligence/services/semantic-analyzer.js +112 -53
  333. package/dist/domains/learning-optimization/services/learning-coordinator.js +1 -1
  334. package/dist/domains/quality-assessment/coordinator.js +2 -1
  335. package/dist/domains/test-execution/coordinator.js +10 -5
  336. package/dist/domains/test-execution/interfaces.d.ts +12 -0
  337. package/dist/domains/test-execution/plugin.js +6 -2
  338. package/dist/domains/test-execution/services/retry-handler.d.ts +2 -0
  339. package/dist/domains/test-execution/services/retry-handler.js +14 -9
  340. package/dist/domains/test-execution/services/test-executor.d.ts +1 -0
  341. package/dist/domains/test-execution/services/test-executor.js +28 -9
  342. package/dist/domains/visual-accessibility/coordinator.d.ts +15 -7
  343. package/dist/domains/visual-accessibility/coordinator.js +15 -7
  344. package/dist/domains/visual-accessibility/interfaces.d.ts +27 -3
  345. package/dist/domains/visual-accessibility/services/accessibility-contrast.d.ts +39 -0
  346. package/dist/domains/visual-accessibility/services/accessibility-contrast.js +93 -0
  347. package/dist/domains/visual-accessibility/services/accessibility-tester-browser.d.ts +18 -3
  348. package/dist/domains/visual-accessibility/services/accessibility-tester-browser.js +50 -40
  349. package/dist/domains/visual-accessibility/services/accessibility-tester-checks.d.ts +27 -0
  350. package/dist/domains/visual-accessibility/services/accessibility-tester-checks.js +137 -0
  351. package/dist/domains/visual-accessibility/services/accessibility-tester.d.ts +5 -0
  352. package/dist/domains/visual-accessibility/services/accessibility-tester.js +43 -24
  353. package/dist/domains/visual-accessibility/services/browser-swarm-coordinator.d.ts +2 -3
  354. package/dist/domains/visual-accessibility/services/browser-swarm-coordinator.js +8 -14
  355. package/dist/feedback/coverage-learner.js +13 -9
  356. package/dist/feedback/test-outcome-tracker.js +13 -9
  357. package/dist/governance/witness-chain.d.ts +5 -0
  358. package/dist/governance/witness-chain.js +22 -6
  359. package/dist/init/init-wizard-hooks.d.ts +1 -1
  360. package/dist/init/init-wizard-hooks.js +7 -8
  361. package/dist/init/phases/08-mcp.js +9 -0
  362. package/dist/init/settings-merge.d.ts +13 -0
  363. package/dist/init/settings-merge.js +49 -2
  364. package/dist/integrations/agent-booster-wasm/agent_booster_wasm.js +849 -0
  365. package/dist/integrations/agent-booster-wasm/agent_booster_wasm_bg.wasm +0 -0
  366. package/dist/integrations/agent-booster-wasm/index.d.ts +8 -0
  367. package/dist/integrations/agent-booster-wasm/index.js +25 -2
  368. package/dist/integrations/agent-booster-wasm/package.json +16 -0
  369. package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.d.ts +22 -0
  370. package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.js +115 -45
  371. package/dist/integrations/agentic-flow/reasoning-bank/pattern-evolution.d.ts +6 -0
  372. package/dist/integrations/agentic-flow/reasoning-bank/pattern-evolution.js +51 -33
  373. package/dist/integrations/agentic-flow/reasoning-bank/trajectory-tracker.js +17 -9
  374. package/dist/integrations/embeddings/cache/EmbeddingCache.d.ts +8 -0
  375. package/dist/integrations/embeddings/cache/EmbeddingCache.js +24 -10
  376. package/dist/integrations/ruvector/delta-tracker.d.ts +11 -0
  377. package/dist/integrations/ruvector/delta-tracker.js +16 -0
  378. package/dist/integrations/ruvector/sona-persistence.d.ts +10 -0
  379. package/dist/integrations/ruvector/sona-persistence.js +49 -24
  380. package/dist/kernel/unified-memory.d.ts +24 -0
  381. package/dist/kernel/unified-memory.js +63 -8
  382. package/dist/learning/aqe-learning-engine.js +1 -1
  383. package/dist/learning/dream/dream-engine.d.ts +3 -2
  384. package/dist/learning/dream/dream-engine.js +42 -24
  385. package/dist/learning/dream/dream-lock-retry.d.ts +38 -0
  386. package/dist/learning/dream/dream-lock-retry.js +66 -0
  387. package/dist/learning/dream/speculative-dreamer.js +1 -1
  388. package/dist/learning/embed-and-insert-pattern.js +4 -2
  389. package/dist/learning/embedder-endpoint-client.d.ts +31 -0
  390. package/dist/learning/embedder-endpoint-client.js +103 -10
  391. package/dist/learning/embedding-space.d.ts +12 -0
  392. package/dist/learning/embedding-space.js +17 -0
  393. package/dist/learning/experience-capture-middleware.js +25 -13
  394. package/dist/learning/experience-capture.js +1 -1
  395. package/dist/learning/experience-consolidation.d.ts +18 -0
  396. package/dist/learning/experience-consolidation.js +55 -8
  397. package/dist/learning/experience-space-verification.d.ts +71 -0
  398. package/dist/learning/experience-space-verification.js +147 -0
  399. package/dist/learning/pattern-lifecycle.d.ts +40 -4
  400. package/dist/learning/pattern-lifecycle.js +153 -76
  401. package/dist/learning/pattern-null-store.d.ts +5 -0
  402. package/dist/learning/pattern-null-store.js +8 -0
  403. package/dist/learning/pattern-promotion.js +6 -3
  404. package/dist/learning/pattern-store.d.ts +6 -0
  405. package/dist/learning/pattern-store.js +19 -6
  406. package/dist/learning/qe-reasoning-bank.js +2 -2
  407. package/dist/learning/real-embeddings.js +3 -1
  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 +642 -571
  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/llm/spend-ledger.d.ts +9 -0
  430. package/dist/shared/llm/spend-ledger.js +64 -39
  431. package/dist/shared/sqlite-lock-wait.d.ts +27 -0
  432. package/dist/shared/sqlite-lock-wait.js +37 -0
  433. package/dist/shared/sqlite-write-queue.d.ts +28 -0
  434. package/dist/shared/sqlite-write-queue.js +38 -0
  435. package/dist/shared/test-runner-project.d.ts +69 -0
  436. package/dist/shared/test-runner-project.js +186 -0
  437. package/dist/skills/security-visual-testing/index.d.ts +3 -1
  438. package/dist/skills/security-visual-testing/index.js +49 -35
  439. package/dist/skills/security-visual-testing/types.d.ts +19 -3
  440. package/dist/workers/workers/heartbeat-scheduler.js +5 -5
  441. package/dist/workers/workers/learning-consolidation.js +8 -7
  442. package/package.json +4 -2
  443. package/dist/cli/chunks/adapter-23KA2YW7.js +0 -2
  444. package/dist/cli/chunks/agent-booster-wasm-2DLAEZK6.js +0 -2
  445. package/dist/cli/chunks/aqe-learning-engine-MUICAXW5.js +0 -2
  446. package/dist/cli/chunks/base-XPWGYDKD.js +0 -2
  447. package/dist/cli/chunks/browser-workflow-UMQVBVGK.js +0 -2
  448. package/dist/cli/chunks/chunk-3FITMWWJ.js +0 -21
  449. package/dist/cli/chunks/chunk-ARRBXCII.js +0 -4
  450. package/dist/cli/chunks/chunk-BBYJBZHG.js +0 -14
  451. package/dist/cli/chunks/chunk-BM3EJLMV.js +0 -153
  452. package/dist/cli/chunks/chunk-D3ZZ2NLL.js +0 -62
  453. package/dist/cli/chunks/chunk-DLTB5KCR.js +0 -2
  454. package/dist/cli/chunks/chunk-DRLSJJIC.js +0 -6
  455. package/dist/cli/chunks/chunk-HAYKLXCT.js +0 -744
  456. package/dist/cli/chunks/chunk-HHBF2BZC.js +0 -65
  457. package/dist/cli/chunks/chunk-K7RT6ITZ.js +0 -2
  458. package/dist/cli/chunks/chunk-L752CNG3.js +0 -13
  459. package/dist/cli/chunks/chunk-MQXWG55U.js +0 -12
  460. package/dist/cli/chunks/chunk-WM2QRIRD.js +0 -14
  461. package/dist/cli/chunks/chunk-WRC3HLUY.js +0 -29
  462. package/dist/cli/chunks/chunk-XTZGAG6P.js +0 -27
  463. package/dist/cli/chunks/chunk-YKQWIXUY.js +0 -2
  464. package/dist/cli/chunks/client-E43GWLQH.js +0 -2
  465. package/dist/cli/chunks/core-handlers-R5A3SQDY.js +0 -2
  466. package/dist/cli/chunks/cross-domain-router-LLYVPZF6.js +0 -2
  467. package/dist/cli/chunks/daemon-BYYPIJ7G.js +0 -18
  468. package/dist/cli/chunks/dream-6C4NURSE.js +0 -2
  469. package/dist/cli/chunks/embed-and-insert-pattern-URES5Q6J.js +0 -3
  470. package/dist/cli/chunks/experience-capture-middleware-SYJQSBKE.js +0 -40
  471. package/dist/cli/chunks/file-discovery-J5IE5KP7.js +0 -2
  472. package/dist/cli/chunks/heartbeat-scheduler-FC5PBTMN.js +0 -2
  473. package/dist/cli/chunks/hnsw-adapter-47UIVOBG.js +0 -2
  474. package/dist/cli/chunks/hnsw-index-3AKVLOZQ.js +0 -2
  475. package/dist/cli/chunks/hybrid-backend-YAOSNX47.js +0 -2
  476. package/dist/cli/chunks/impact-analyzer-4FMJXM4M.js +0 -2
  477. package/dist/cli/chunks/init-wizard-RTLCRWDT.js +0 -2
  478. package/dist/cli/chunks/kernel-2OWIGGGT.js +0 -2
  479. package/dist/cli/chunks/knowledge-graph-25XXKDJN.js +0 -2
  480. package/dist/cli/chunks/llm-router-service-G3EIN4UB.js +0 -2
  481. package/dist/cli/chunks/load-test-D6QYNIVT.js +0 -2
  482. package/dist/cli/chunks/memory-backend-LDFFZMEQ.js +0 -2
  483. package/dist/cli/chunks/memory-handlers-3SQVY7FE.js +0 -2
  484. package/dist/cli/chunks/pattern-null-store-KDVRM7PW.js +0 -2
  485. package/dist/cli/chunks/project-root-DDGBWDP6.js +0 -2
  486. package/dist/cli/chunks/protocol-executor-KBOLLCWA.js +0 -2
  487. package/dist/cli/chunks/qe-reasoning-bank-GRXBT7FC.js +0 -2
  488. package/dist/cli/chunks/queen-coordinator-L2QWMJ5Q.js +0 -2
  489. package/dist/cli/chunks/real-embeddings-I2UVNNB3.js +0 -2
  490. package/dist/cli/chunks/router-FT5WJPUH.js +0 -2
  491. package/dist/cli/chunks/routing-feedback-EO2MKOUX.js +0 -2
  492. package/dist/cli/chunks/rvf-dual-writer-WHBFQJVU.js +0 -2
  493. package/dist/cli/chunks/rvf-migration-adapter-YT3APF2I.js +0 -2
  494. package/dist/cli/chunks/rvf-migration-coordinator-VUIZHTVG.js +0 -2
  495. package/dist/cli/chunks/rvf-native-adapter-37PUFKQD.js +0 -2
  496. package/dist/cli/chunks/safe-db-TDZKUOZJ.js +0 -2
  497. package/dist/cli/chunks/schedule-CRKTRY2A.js +0 -2
  498. package/dist/cli/chunks/scheduler-6ZBDVQWN.js +0 -2
  499. package/dist/cli/chunks/sqlite-persistence-FFJQAIKW.js +0 -2
  500. package/dist/cli/chunks/sync-54LUAUTK.js +0 -2
  501. package/dist/cli/chunks/task-handler-K3OXHYKU.js +0 -62
  502. package/dist/cli/chunks/test-runner-process-OTQDAJLN.js +0 -2
  503. package/dist/cli/chunks/token-bootstrap-3QMABE45.js +0 -2
  504. package/dist/cli/chunks/tree-sitter-wasm-parser-D6JTTHTP.js +0 -2
  505. package/dist/cli/chunks/unified-memory-QARWQKJ2.js +0 -2
  506. package/dist/cli/chunks/unified-memory-hnsw-LHY3DXCP.js +0 -2
  507. package/dist/cli/chunks/unified-persistence-WEYYGLHM.js +0 -2
  508. package/dist/cli/chunks/visual-security-O4ALMCXQ.js +0 -2
  509. package/dist/cli/chunks/witness-chain-B3YW5NMS.js +0 -2
  510. package/dist/cli/chunks/witness-chain-PIYR72HJ.js +0 -2
  511. package/dist/cli/chunks/witness-chain-repair-YUG7E3UX.js +0 -2
  512. package/dist/cli/chunks/workflow-orchestrator-3ZN2BCGY.js +0 -2
  513. package/dist/cli/chunks/wrappers-PW2O27LL.js +0 -2
@@ -49,12 +49,14 @@ export class MinCutPersistence {
49
49
  this.ensureInitialized();
50
50
  const id = uuidv4();
51
51
  const db = this.memory.getDatabase();
52
- db.prepare(`
52
+ // #1274: the queen's snapshot timer and agent events write here, so the
53
+ // writes queue instead of freezing the MCP server on a locked memory.db.
54
+ await this.memory.writeWhenUnlocked(() => db.prepare(`
53
55
  INSERT INTO mincut_snapshots (
54
56
  id, timestamp, vertex_count, edge_count, total_weight,
55
57
  is_connected, component_count, vertices_json, edges_json
56
58
  ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
57
- `).run(id, snapshot.timestamp.toISOString(), snapshot.stats.vertexCount, snapshot.stats.edgeCount, snapshot.stats.totalWeight, snapshot.stats.isConnected ? 1 : 0, snapshot.stats.componentCount, JSON.stringify(snapshot.vertices), JSON.stringify(snapshot.edges));
59
+ `).run(id, snapshot.timestamp.toISOString(), snapshot.stats.vertexCount, snapshot.stats.edgeCount, snapshot.stats.totalWeight, snapshot.stats.isConnected ? 1 : 0, snapshot.stats.componentCount, JSON.stringify(snapshot.vertices), JSON.stringify(snapshot.edges)));
58
60
  // Enforce retention to prevent unbounded snapshot growth (Issue #258)
59
61
  await this.enforceRetention();
60
62
  return id;
@@ -70,20 +72,20 @@ export class MinCutPersistence {
70
72
  if (!countRow || countRow.count <= maxSnapshots)
71
73
  return 0;
72
74
  const deleteCount = countRow.count - maxSnapshots;
73
- db.prepare(`
75
+ await this.memory.writeWhenUnlocked(() => db.prepare(`
74
76
  DELETE FROM mincut_snapshots WHERE id IN (
75
77
  SELECT id FROM mincut_snapshots ORDER BY created_at ASC LIMIT ?
76
78
  )
77
- `).run(deleteCount);
79
+ `).run(deleteCount));
78
80
  // Also trim history
79
81
  const historyCount = db.prepare('SELECT COUNT(*) as count FROM mincut_history').get();
80
82
  if (historyCount.count > 500) {
81
83
  const historyDelete = historyCount.count - 500;
82
- db.prepare(`
84
+ await this.memory.writeWhenUnlocked(() => db.prepare(`
83
85
  DELETE FROM mincut_history WHERE id IN (
84
86
  SELECT id FROM mincut_history ORDER BY created_at ASC LIMIT ?
85
87
  )
86
- `).run(historyDelete);
88
+ `).run(historyDelete));
87
89
  }
88
90
  return deleteCount;
89
91
  }
@@ -121,11 +123,11 @@ export class MinCutPersistence {
121
123
  async recordHistory(entry) {
122
124
  this.ensureInitialized();
123
125
  const db = this.memory.getDatabase();
124
- const result = db.prepare(`
126
+ const result = await this.memory.writeWhenUnlocked(() => db.prepare(`
125
127
  INSERT INTO mincut_history (
126
128
  mincut_value, vertex_count, edge_count, algorithm, duration_ms, snapshot_id
127
129
  ) VALUES (?, ?, ?, ?, ?, ?)
128
- `).run(entry.minCutValue, entry.vertexCount, entry.edgeCount, entry.algorithm ?? 'weighted-degree', entry.durationMs ?? null, entry.snapshotId ?? null);
130
+ `).run(entry.minCutValue, entry.vertexCount, entry.edgeCount, entry.algorithm ?? 'weighted-degree', entry.durationMs ?? null, entry.snapshotId ?? null));
129
131
  return Number(result.lastInsertRowid);
130
132
  }
131
133
  /**
@@ -225,13 +227,15 @@ export class MinCutPersistence {
225
227
  ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
226
228
  `);
227
229
  const insertMany = db.transaction((vertices) => {
230
+ ids.length = 0; // a retried attempt starts over (#1283)
228
231
  for (const weak of vertices) {
229
232
  const id = uuidv4();
230
233
  insert.run(id, weak.vertexId, weak.weightedDegree, weak.riskScore, weak.reason, weak.vertex.domain ?? null, weak.vertex.type, JSON.stringify(weak.suggestions), snapshotId ?? null);
231
234
  ids.push(id);
232
235
  }
233
236
  });
234
- insertMany(weakVertices);
237
+ // #1283: queued, so a locked memory.db does not freeze the MCP server.
238
+ await this.memory.writeWhenUnlocked(() => insertMany(weakVertices));
235
239
  return ids;
236
240
  }
237
241
  /**
@@ -260,11 +264,11 @@ export class MinCutPersistence {
260
264
  async resolveWeakVertex(id) {
261
265
  this.ensureInitialized();
262
266
  const db = this.memory.getDatabase();
263
- const result = db.prepare(`
267
+ const result = await this.memory.writeWhenUnlocked(() => db.prepare(`
264
268
  UPDATE mincut_weak_vertices
265
269
  SET resolved_at = datetime('now')
266
270
  WHERE id = ? AND resolved_at IS NULL
267
- `).run(id);
271
+ `).run(id));
268
272
  return result.changes > 0;
269
273
  }
270
274
  // ==========================================================================
@@ -276,12 +280,12 @@ export class MinCutPersistence {
276
280
  async saveAlert(alert) {
277
281
  this.ensureInitialized();
278
282
  const db = this.memory.getDatabase();
279
- db.prepare(`
283
+ await this.memory.writeWhenUnlocked(() => db.prepare(`
280
284
  INSERT INTO mincut_alerts (
281
285
  id, severity, message, mincut_value, threshold,
282
286
  affected_vertices_json, remediations_json, acknowledged, timestamp
283
287
  ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
284
- `).run(alert.id, alert.severity, alert.message, alert.minCutValue, alert.threshold, JSON.stringify(alert.affectedVertices), JSON.stringify(alert.remediations), alert.acknowledged ? 1 : 0, alert.timestamp.toISOString());
288
+ `).run(alert.id, alert.severity, alert.message, alert.minCutValue, alert.threshold, JSON.stringify(alert.affectedVertices), JSON.stringify(alert.remediations), alert.acknowledged ? 1 : 0, alert.timestamp.toISOString()));
285
289
  return alert.id;
286
290
  }
287
291
  /**
@@ -303,13 +307,13 @@ export class MinCutPersistence {
303
307
  async acknowledgeAlert(id, acknowledgedBy) {
304
308
  this.ensureInitialized();
305
309
  const db = this.memory.getDatabase();
306
- const result = db.prepare(`
310
+ const result = await this.memory.writeWhenUnlocked(() => db.prepare(`
307
311
  UPDATE mincut_alerts
308
312
  SET acknowledged = 1,
309
313
  acknowledged_at = datetime('now'),
310
314
  acknowledged_by = ?
311
315
  WHERE id = ? AND acknowledged = 0
312
- `).run(acknowledgedBy ?? null, id);
316
+ `).run(acknowledgedBy ?? null, id));
313
317
  return result.changes > 0;
314
318
  }
315
319
  /**
@@ -335,14 +339,14 @@ export class MinCutPersistence {
335
339
  this.ensureInitialized();
336
340
  const id = uuidv4();
337
341
  const db = this.memory.getDatabase();
338
- db.prepare(`
342
+ await this.memory.writeWhenUnlocked(() => db.prepare(`
339
343
  INSERT INTO mincut_healing_actions (
340
344
  id, action_type, action_params_json, success,
341
345
  mincut_before, mincut_after, improvement,
342
346
  error_message, duration_ms, triggered_by,
343
347
  snapshot_before_id, snapshot_after_id
344
348
  ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
345
- `).run(id, result.action.type, JSON.stringify(result.action), result.success ? 1 : 0, result.minCutBefore, result.minCutAfter, result.improvement, result.error ?? null, result.durationMs, result.triggeredBy ?? null, result.snapshotBeforeId ?? null, result.snapshotAfterId ?? null);
349
+ `).run(id, result.action.type, JSON.stringify(result.action), result.success ? 1 : 0, result.minCutBefore, result.minCutAfter, result.improvement, result.error ?? null, result.durationMs, result.triggeredBy ?? null, result.snapshotBeforeId ?? null, result.snapshotAfterId ?? null));
346
350
  return id;
347
351
  }
348
352
  /**
@@ -408,13 +412,13 @@ export class MinCutPersistence {
408
412
  if (observation.prediction) {
409
413
  actualVsPredictedDiff = observation.minCutValue - observation.prediction.predictedMinCut;
410
414
  }
411
- db.prepare(`
415
+ await this.memory.writeWhenUnlocked(() => db.prepare(`
412
416
  INSERT INTO mincut_observations (
413
417
  id, iteration, mincut_value, weak_vertex_count,
414
418
  weak_vertices_json, snapshot_id, prediction_json,
415
419
  actual_vs_predicted_diff
416
420
  ) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
417
- `).run(id, observation.iteration, observation.minCutValue, observation.weakVertices.length, JSON.stringify(observation.weakVertices.map(v => v.vertexId)), observation.snapshotId ?? null, observation.prediction ? JSON.stringify(observation.prediction) : null, actualVsPredictedDiff);
421
+ `).run(id, observation.iteration, observation.minCutValue, observation.weakVertices.length, JSON.stringify(observation.weakVertices.map(v => v.vertexId)), observation.snapshotId ?? null, observation.prediction ? JSON.stringify(observation.prediction) : null, actualVsPredictedDiff));
418
422
  return id;
419
423
  }
420
424
  /**
@@ -474,18 +478,18 @@ export class MinCutPersistence {
474
478
  const historyMaxAge = options.historyMaxAge ?? 7 * 24 * 60 * 60 * 1000; // 7 days
475
479
  const snapshotMaxAge = options.snapshotMaxAge ?? 24 * 60 * 60 * 1000; // 1 day
476
480
  const alertMaxAge = options.alertMaxAge ?? 30 * 24 * 60 * 60 * 1000; // 30 days
477
- const historyResult = db.prepare(`
481
+ const historyResult = await this.memory.writeWhenUnlocked(() => db.prepare(`
478
482
  DELETE FROM mincut_history
479
483
  WHERE timestamp < ?
480
- `).run(new Date(now - historyMaxAge).toISOString());
481
- const snapshotResult = db.prepare(`
484
+ `).run(new Date(now - historyMaxAge).toISOString()));
485
+ const snapshotResult = await this.memory.writeWhenUnlocked(() => db.prepare(`
482
486
  DELETE FROM mincut_snapshots
483
487
  WHERE timestamp < ?
484
- `).run(new Date(now - snapshotMaxAge).toISOString());
485
- const alertResult = db.prepare(`
488
+ `).run(new Date(now - snapshotMaxAge).toISOString()));
489
+ const alertResult = await this.memory.writeWhenUnlocked(() => db.prepare(`
486
490
  DELETE FROM mincut_alerts
487
491
  WHERE timestamp < ? AND acknowledged = 1
488
- `).run(new Date(now - alertMaxAge).toISOString());
492
+ `).run(new Date(now - alertMaxAge).toISOString()));
489
493
  return {
490
494
  historyDeleted: historyResult.changes,
491
495
  snapshotsDeleted: snapshotResult.changes,
@@ -217,6 +217,10 @@ export declare class CodeIntelligenceCoordinator extends BaseDomainCoordinator<C
217
217
  protected subscribeToEvents(): void;
218
218
  private handleTestRunCompleted;
219
219
  private handleFilesChanged;
220
+ /**
221
+ * #1230: makes every given file searchable, one file at a time (only one
222
+ * file's content is held at once), with no per-run file cap.
223
+ */
220
224
  indexForSearch(paths: string[]): Promise<SearchIndexSummary>;
221
225
  private loadWorkflowState;
222
226
  private saveWorkflowState;
@@ -59,8 +59,13 @@ const DEFAULT_CONFIG = {
59
59
  * CQ-002: Extends BaseDomainCoordinator
60
60
  */
61
61
  const logger = LoggerFactory.create('code-intelligence');
62
- /** Files made searchable per index run (content, plus vectors with an embedding model). */
63
- const SEARCH_INDEX_FILE_LIMIT = 100;
62
+ /**
63
+ * #1230: after this many files in a row fail to embed, an index run stops
64
+ * asking the embedding model and stores the remaining files as text only.
65
+ * Each failed embed costs the client's retries and backoff (about 3s), which
66
+ * would otherwise dominate a large run while the model is down.
67
+ */
68
+ const MAX_CONSECUTIVE_EMBED_FAILURES = 3;
64
69
  export class CodeIntelligenceCoordinator extends BaseDomainCoordinator {
65
70
  memory;
66
71
  agentCoordinator;
@@ -761,19 +766,39 @@ export class CodeIntelligenceCoordinator extends BaseDomainCoordinator {
761
766
  // ============================================================================
762
767
  // Helper Methods
763
768
  // ============================================================================
769
+ /**
770
+ * #1230: makes every given file searchable, one file at a time (only one
771
+ * file's content is held at once), with no per-run file cap.
772
+ */
764
773
  async indexForSearch(paths) {
765
- // Index a subset of files for search
766
- // Limit to 100 files for performance in a single batch
767
- const filesToIndex = paths.slice(0, SEARCH_INDEX_FILE_LIMIT);
768
774
  let searchable = 0;
769
- for (const path of filesToIndex) {
775
+ let withVector = 0;
776
+ let embedFailures = 0;
777
+ let consecutiveEmbedFailures = 0;
778
+ let lastEmbedFailure;
779
+ let notEmbedded = 0;
780
+ for (const path of paths) {
770
781
  try {
771
782
  // Read actual file content
772
783
  const result = await this.fileReader.readFile(path);
773
- if (result.success && result.value) {
774
- const indexed = await this.semanticAnalyzer.indexCode(path, result.value);
775
- if (indexed.success)
776
- searchable++;
784
+ if (!result.success || !result.value)
785
+ continue;
786
+ const embed = consecutiveEmbedFailures < MAX_CONSECUTIVE_EMBED_FAILURES;
787
+ const indexed = await this.semanticAnalyzer.indexCode(path, result.value, { embed });
788
+ if (!indexed.success)
789
+ continue;
790
+ searchable++;
791
+ if (indexed.value.vector) {
792
+ withVector++;
793
+ consecutiveEmbedFailures = 0;
794
+ }
795
+ else if (indexed.value.vectorFailure !== undefined) {
796
+ embedFailures++;
797
+ consecutiveEmbedFailures++;
798
+ lastEmbedFailure = indexed.value.vectorFailure;
799
+ }
800
+ else if (!embed) {
801
+ notEmbedded++;
777
802
  }
778
803
  }
779
804
  catch {
@@ -783,9 +808,17 @@ export class CodeIntelligenceCoordinator extends BaseDomainCoordinator {
783
808
  // #1224: say when search will not see every indexed file.
784
809
  const warnings = [];
785
810
  if (searchable < paths.length) {
786
- warnings.push(`Search covers ${searchable} of ${paths.length} indexed files` +
787
- (paths.length > SEARCH_INDEX_FILE_LIMIT ? ` (at most ${SEARCH_INDEX_FILE_LIMIT} per index run)` : '') +
788
- '; code in the other files is not found by search.');
811
+ warnings.push(`Search covers ${searchable} of ${paths.length} indexed files; ` +
812
+ 'the other files could not be added to the search index, so code in them is not found by search.');
813
+ }
814
+ // #1231: say which files a semantic search can only match by text.
815
+ if (embedFailures > 0) {
816
+ warnings.push(`The embedding model failed for ${embedFailures} file(s) (${lastEmbedFailure})` +
817
+ (notEmbedded > 0
818
+ ? `, so it was not asked for the remaining ${notEmbedded} file(s) of this run`
819
+ : '') +
820
+ `. ${searchable - withVector} of ${searchable} searchable files have no vector; ` +
821
+ 'semantic search matches them by text only. Re-index when the model is available.');
789
822
  }
790
823
  return { searchable, warnings };
791
824
  }
@@ -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,30 @@ 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); the
168
+ * reason says how many text matches the limit left out.
169
+ */
170
+ private withVectorlessFiles;
149
171
  /** Word-overlap matching for a semantic query when no vectors can be used. */
150
172
  private lexicalSearch;
151
173
  private exactSearch;
152
174
  private fuzzySearch;
175
+ /** Token-overlap match of one indexed file, or null when it is filtered out or scores too low. */
176
+ private fuzzyMatch;
153
177
  private extractConcepts;
154
178
  private detectPatterns;
155
179
  private calculateComplexity;
@@ -160,9 +184,10 @@ export declare class SemanticAnalyzerService implements ISemanticAnalyzerService
160
184
  private tokenize;
161
185
  private calculateFuzzyScore;
162
186
  /**
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".
187
+ * A query word is found when a content word contains it (or equals it):
188
+ * "login" is found in `loginWithPassword`. #1279: not the reverse; a query
189
+ * word such as `stepHandler450` is not found just because the file has the
190
+ * shorter word `step`, which made almost every file a full match.
166
191
  */
167
192
  private tokensMatch;
168
193
  private matchesFilters;
@@ -94,12 +94,12 @@ export class SemanticAnalyzerService {
94
94
  return err(new Error(NOTHING_INDEXED_FOR_SEARCH));
95
95
  }
96
96
  let results;
97
- let lexicalOnlyReason;
97
+ let semanticOutcome = {};
98
98
  switch (type) {
99
99
  case 'semantic': {
100
- const semantic = await this.semanticSearch(query, limit, scope, filters);
101
- results = semantic.results;
102
- lexicalOnlyReason = semantic.lexicalOnlyReason;
100
+ const { results: hits, ...outcome } = await this.semanticSearch(query, limit, scope, filters);
101
+ results = hits;
102
+ semanticOutcome = outcome;
103
103
  break;
104
104
  }
105
105
  case 'exact':
@@ -116,11 +116,7 @@ export class SemanticAnalyzerService {
116
116
  results,
117
117
  total: results.length,
118
118
  searchTime,
119
- ...(type === 'semantic'
120
- ? lexicalOnlyReason === undefined
121
- ? { mode: 'vector' }
122
- : { mode: 'lexical-only', reason: lexicalOnlyReason }
123
- : {}),
119
+ ...semanticOutcome,
124
120
  });
125
121
  }
126
122
  catch (error) {
@@ -130,13 +126,13 @@ export class SemanticAnalyzerService {
130
126
  /**
131
127
  * Index code content for semantic search
132
128
  */
133
- async indexCode(file, content) {
129
+ async indexCode(file, content, options = {}) {
134
130
  try {
135
131
  // Extract code metadata
136
132
  const metadata = this.extractCodeMetadata(file, content);
137
133
  // #1224: store a vector only when a real embedding model produced one;
138
134
  // without it the file is still searchable by text.
139
- const embedded = await this.tryEmbed(content);
135
+ const embedded = options.embed === false ? {} : await this.tryEmbed(content);
140
136
  if (embedded.vector) {
141
137
  const key = `${this.vectorKeyPrefix()}${this.fileToKey(file)}`;
142
138
  await this.memory.storeVector(key, embedded.vector, {
@@ -153,8 +149,15 @@ export class SemanticAnalyzerService {
153
149
  // namespace, and a write with {namespace} could not be read back without
154
150
  // the same option (issue #491 Bug 2) — which silently dropped every
155
151
  // search result (#511 follow-up).
156
- await this.memory.set(`${this.config.namespace}:content:${this.fileToKey(file)}`, { file, content, metadata });
157
- return ok(undefined);
152
+ const stored = embedded.vector
153
+ ? { file, content, metadata, embeddingModel: this.embeddingModelId() }
154
+ : { file, content, metadata };
155
+ await this.memory.set(`${this.config.namespace}:content:${this.fileToKey(file)}`, stored);
156
+ return ok(embedded.vector
157
+ ? { vector: true }
158
+ : this.embedder && embedded.reason
159
+ ? { vector: false, vectorFailure: embedded.reason }
160
+ : { vector: false });
158
161
  }
159
162
  catch (error) {
160
163
  return err(toError(error));
@@ -284,21 +287,31 @@ export class SemanticAnalyzerService {
284
287
  contentKeyPattern() {
285
288
  return `${this.config.namespace}:content:*`;
286
289
  }
290
+ /** Visits every indexed file's stored content, one at a time. */
291
+ async forEachIndexed(visit) {
292
+ const keys = await this.memory.search(this.contentKeyPattern(), MAX_INDEXED_FILES_SCANNED);
293
+ for (const key of keys) {
294
+ const stored = await this.memory.get(key);
295
+ if (stored)
296
+ visit(stored);
297
+ }
298
+ }
287
299
  // ============================================================================
288
300
  // Private Search Methods
289
301
  // ============================================================================
290
302
  /**
291
303
  * #1224: vector search when an embedding model is available. Otherwise (or
292
304
  * 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.
305
+ * against the indexed text and reports `mode: 'lexical-only'` with the
306
+ * reason; no similarity is invented for those hits.
295
307
  */
296
308
  async semanticSearch(query, limit, scope, filters) {
297
309
  const embedded = await this.tryEmbed(query);
298
310
  if (!embedded.vector) {
299
311
  return {
300
312
  results: await this.lexicalSearch(query, limit, scope, filters),
301
- lexicalOnlyReason: embedded.reason,
313
+ mode: 'lexical-only',
314
+ reason: embedded.reason,
302
315
  };
303
316
  }
304
317
  // Only this namespace's vectors, from the model that embedded the query.
@@ -310,7 +323,8 @@ export class SemanticAnalyzerService {
310
323
  if (vectorResults.length === 0) {
311
324
  return {
312
325
  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`,
326
+ mode: 'lexical-only',
327
+ reason: `no indexed file has an embedding from ${this.embeddingModelId()}; re-index to enable vector search`,
314
328
  };
315
329
  }
316
330
  // Convert to search results with filtering
@@ -345,7 +359,53 @@ export class SemanticAnalyzerService {
345
359
  break;
346
360
  }
347
361
  }
348
- return { results };
362
+ return this.withVectorlessFiles(query, results, limit, scope, filters);
363
+ }
364
+ /**
365
+ * #1231: files indexed while the embedding model was unavailable have no
366
+ * vector, so vector search cannot rank them. Match those by text, label the
367
+ * hits 'lexical', and report the result as 'partial-vector' with the counts.
368
+ * Cosine and text-match scores are not comparable, so vector hits come
369
+ * first (by cosine), then lexical hits (by share of query words found); the
370
+ * reason says how many text matches the limit left out.
371
+ */
372
+ async withVectorlessFiles(query, vectorHits, limit, scope, filters) {
373
+ const model = this.embeddingModelId();
374
+ const vectorFiles = new Set(vectorHits.map((hit) => hit.file));
375
+ const queryTokens = this.tokenize(query.toLowerCase());
376
+ const lexicalHits = [];
377
+ let indexedFiles = 0;
378
+ let withoutVector = 0;
379
+ await this.forEachIndexed((stored) => {
380
+ indexedFiles++;
381
+ if (stored.embeddingModel === model)
382
+ return;
383
+ withoutVector++;
384
+ if (vectorFiles.has(stored.file))
385
+ return;
386
+ const hit = this.fuzzyMatch(queryTokens, stored, scope, filters);
387
+ if (hit)
388
+ lexicalHits.push({ ...hit, matchType: 'lexical' });
389
+ });
390
+ const coverage = { indexedFiles, filesWithVector: indexedFiles - withoutVector };
391
+ if (withoutVector === 0) {
392
+ return { results: vectorHits, mode: 'vector', coverage };
393
+ }
394
+ const byScore = (a, b) => b.score - a.score;
395
+ const results = [...[...vectorHits].sort(byScore), ...lexicalHits.sort(byScore)].slice(0, limit);
396
+ const droppedLexical = vectorHits.length + lexicalHits.length - results.length;
397
+ return {
398
+ results,
399
+ mode: 'partial-vector',
400
+ reason: `${withoutVector} of ${indexedFiles} indexed files have no embedding from ${model} ` +
401
+ '(it was unavailable when they were indexed, or an older aqe version indexed them), ' +
402
+ 'so they were matched by text only (matchType "lexical", listed after the vector hits); ' +
403
+ (droppedLexical > 0
404
+ ? `${droppedLexical} more text match(es) were left out by the limit of ${limit}; `
405
+ : '') +
406
+ 're-index to rank them by vector',
407
+ coverage,
408
+ };
349
409
  }
350
410
  /** Word-overlap matching for a semantic query when no vectors can be used. */
351
411
  async lexicalSearch(query, limit, scope, filters) {
@@ -390,39 +450,38 @@ export class SemanticAnalyzerService {
390
450
  }
391
451
  async fuzzySearch(query, limit, scope, filters) {
392
452
  const results = [];
393
- const keys = await this.memory.search(this.contentKeyPattern(), MAX_INDEXED_FILES_SCANNED);
394
453
  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
- }
454
+ await this.forEachIndexed((stored) => {
455
+ const hit = this.fuzzyMatch(queryTokens, stored, scope, filters);
456
+ if (hit)
457
+ results.push(hit);
458
+ });
423
459
  // Sort by score and limit
424
460
  return results.sort((a, b) => b.score - a.score).slice(0, limit);
425
461
  }
462
+ /** Token-overlap match of one indexed file, or null when it is filtered out or scores too low. */
463
+ fuzzyMatch(queryTokens, stored, scope, filters) {
464
+ // Apply scope filter
465
+ if (scope && scope.length > 0 && !scope.some((s) => stored.file.includes(s))) {
466
+ return null;
467
+ }
468
+ // Apply filters
469
+ if (filters && !this.matchesFilters(stored.metadata, filters)) {
470
+ return null;
471
+ }
472
+ // Fuzzy match using token overlap
473
+ const contentTokens = this.tokenize(stored.content.toLowerCase());
474
+ const score = this.calculateFuzzyScore(queryTokens, contentTokens);
475
+ if (score < this.config.minScore)
476
+ return null;
477
+ return {
478
+ file: stored.file,
479
+ snippet: this.extractSnippet(stored.content, 200),
480
+ score,
481
+ highlights: queryTokens.filter((t) => contentTokens.some((ct) => this.tokensMatch(t, ct))),
482
+ metadata: stored.metadata,
483
+ };
484
+ }
426
485
  // ============================================================================
427
486
  // Private Analysis Methods
428
487
  // ============================================================================
@@ -625,13 +684,13 @@ export class SemanticAnalyzerService {
625
684
  return matches / queryTokens.length;
626
685
  }
627
686
  /**
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".
687
+ * A query word is found when a content word contains it (or equals it):
688
+ * "login" is found in `loginWithPassword`. #1279: not the reverse; a query
689
+ * word such as `stepHandler450` is not found just because the file has the
690
+ * shorter word `step`, which made almost every file a full match.
631
691
  */
632
692
  tokensMatch(queryToken, contentToken) {
633
- return contentToken.includes(queryToken) ||
634
- (contentToken.length >= 3 && queryToken.includes(contentToken));
693
+ return contentToken.includes(queryToken);
635
694
  }
636
695
  matchesFilters(metadata, filters) {
637
696
  for (const filter of filters) {
@@ -683,7 +742,7 @@ export class SemanticAnalyzerService {
683
742
  const queryTokens = this.tokenize(query.toLowerCase());
684
743
  const contentTokens = this.tokenize(content.toLowerCase());
685
744
  for (const qt of queryTokens) {
686
- const match = contentTokens.find((ct) => ct.includes(qt) || qt.includes(ct));
745
+ const match = contentTokens.find((ct) => this.tokensMatch(qt, ct));
687
746
  if (match && !highlights.includes(match)) {
688
747
  highlights.push(match);
689
748
  }
@@ -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