agentic-qe 3.15.16 → 3.15.18

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 (539) hide show
  1. package/.claude/helpers/brain-checkpoint.cjs +107 -10
  2. package/.claude/skills/agentic-quality-engineering/SKILL.md +67 -44
  3. package/.claude/skills/brutal-honesty-review/SKILL.md +12 -7
  4. package/.claude/skills/brutal-honesty-review/evals/brutal-honesty-review.yaml +120 -0
  5. package/.claude/skills/brutal-honesty-review/schemas/output.json +9 -3
  6. package/.claude/skills/code-review-quality/SKILL.md +2 -2
  7. package/.claude/skills/holistic-testing-pact/SKILL.md +11 -11
  8. package/.claude/skills/sherlock-review/SKILL.md +4 -2
  9. package/.claude/skills/sherlock-review/evals/sherlock-review.yaml +124 -0
  10. package/.claude/skills/skills-manifest.json +1 -1
  11. package/.claude/skills/technical-writing/SKILL.md +12 -6
  12. package/.claude/skills/technical-writing/evals/technical-writing.yaml +96 -0
  13. package/.opencode/skills/qe-agentic-quality-engineering.yaml +2 -2
  14. package/.opencode/skills/qe-holistic-testing-pact.yaml +2 -2
  15. package/CHANGELOG.md +201 -0
  16. package/assets/skills/agentic-quality-engineering/SKILL.md +67 -44
  17. package/assets/skills/brutal-honesty-review/SKILL.md +12 -8
  18. package/assets/skills/brutal-honesty-review/evals/brutal-honesty-review.yaml +120 -0
  19. package/assets/skills/brutal-honesty-review/schemas/output.json +9 -3
  20. package/assets/skills/code-review-quality/SKILL.md +2 -2
  21. package/assets/skills/holistic-testing-pact/SKILL.md +11 -11
  22. package/assets/skills/sherlock-review/SKILL.md +4 -3
  23. package/assets/skills/sherlock-review/evals/sherlock-review.yaml +124 -0
  24. package/assets/skills/skills-manifest.json +1 -1
  25. package/assets/skills/technical-writing/SKILL.md +12 -6
  26. package/assets/skills/technical-writing/evals/technical-writing.yaml +96 -0
  27. package/dist/cli/brain-commands.d.ts +5 -0
  28. package/dist/cli/brain-commands.js +4 -0
  29. package/dist/cli/bundle.js +6 -6
  30. package/dist/cli/chunks/adapter-WRSDXLOT.js +2 -0
  31. package/dist/cli/chunks/{agent-booster-wasm-45NWEKVS.js → agent-booster-wasm-UFNJNF3M.js} +2 -2
  32. package/dist/cli/chunks/{agent-handler-LVHMYFEF.js → agent-handler-EAYVRJXN.js} +2 -2
  33. package/dist/cli/chunks/{agent-memory-branch-YDWOJFEQ.js → agent-memory-branch-M65C6WAQ.js} +2 -2
  34. package/dist/cli/chunks/aqe-learning-engine-O6NJBCCM.js +2 -0
  35. package/dist/cli/chunks/{arena-ELDZH3CZ.js → arena-2GDICP6R.js} +4 -4
  36. package/dist/cli/chunks/{arena-CZKHXDDS.js → arena-CG3X67OE.js} +2 -2
  37. package/dist/cli/chunks/{audit-5MT4T47Z.js → audit-F4FSPJPL.js} +3 -3
  38. package/dist/cli/chunks/base-J2FXOE77.js +2 -0
  39. package/dist/cli/chunks/{better-sqlite3-6TGYPC2B.js → better-sqlite3-2MCFXW4J.js} +2 -2
  40. package/dist/cli/chunks/brain-handler-WGTJNYNB.js +95 -0
  41. package/dist/cli/chunks/{branch-enumerator-WVILM4SO.js → branch-enumerator-KL7C535H.js} +2 -2
  42. package/dist/cli/chunks/{browser-RX5ALU3H.js → browser-SJEXDVHS.js} +2 -2
  43. package/dist/cli/chunks/browser-workflow-LXGER6ZD.js +2 -0
  44. package/dist/cli/chunks/{chunk-2H4XH6FT.js → chunk-244RKAEP.js} +2 -2
  45. package/dist/cli/chunks/{chunk-SI6DPU5D.js → chunk-27TUMXPD.js} +1 -1
  46. package/dist/cli/chunks/{chunk-YNMJEDN5.js → chunk-2MBYDPCP.js} +2 -2
  47. package/dist/cli/chunks/{chunk-24QHCVX6.js → chunk-2Q6DTBMT.js} +1 -1
  48. package/dist/cli/chunks/{chunk-XWUWX7BV.js → chunk-355MI7RV.js} +13 -13
  49. package/dist/cli/chunks/{chunk-NQXXI77K.js → chunk-3LX5OKBD.js} +2 -2
  50. package/dist/cli/chunks/{chunk-63GMRQ25.js → chunk-3RPDKJGV.js} +1 -1
  51. package/dist/cli/chunks/chunk-3YMIT73A.js +4 -0
  52. package/dist/cli/chunks/{chunk-P3EYRILV.js → chunk-43KUVBSU.js} +2 -2
  53. package/dist/cli/chunks/chunk-477FKXSS.js +2 -0
  54. package/dist/cli/chunks/{chunk-HGWXF45W.js → chunk-4BIMTRRX.js} +1 -1
  55. package/dist/cli/chunks/{chunk-SSUAAX3F.js → chunk-4CVNVBX5.js} +2 -2
  56. package/dist/cli/chunks/{chunk-5V3TI2LG.js → chunk-4HL3SD4A.js} +1 -1
  57. package/dist/cli/chunks/{chunk-KKU2QGSJ.js → chunk-4PEG4DU2.js} +2 -2
  58. package/dist/cli/chunks/{chunk-J4ELZNLY.js → chunk-4QSQKFED.js} +2 -2
  59. package/dist/cli/chunks/chunk-53ZBETYR.js +16 -0
  60. package/dist/cli/chunks/{chunk-7TE5ONQQ.js → chunk-544KDWL4.js} +1 -1
  61. package/dist/cli/chunks/chunk-54RCGMLB.js +8 -0
  62. package/dist/cli/chunks/{chunk-KU2AUFGX.js → chunk-5AGXIZQ5.js} +2 -2
  63. package/dist/cli/chunks/{chunk-LQLPB2T6.js → chunk-5M24X6W7.js} +2 -2
  64. package/dist/cli/chunks/{chunk-YU2BDRSD.js → chunk-5O5T4LEU.js} +1 -1
  65. package/dist/cli/chunks/{chunk-NAEWCFQT.js → chunk-5RFXX4IF.js} +2 -2
  66. package/dist/cli/chunks/{chunk-MD43XRX5.js → chunk-62MLAQRJ.js} +1 -1
  67. package/dist/cli/chunks/{chunk-PEQDY4BO.js → chunk-6D6TGL2E.js} +2 -2
  68. package/dist/cli/chunks/{chunk-IOYG4VFL.js → chunk-6IHZDSDL.js} +2 -2
  69. package/dist/cli/chunks/{chunk-C5FP5GW3.js → chunk-6P3Y45QL.js} +2 -2
  70. package/dist/cli/chunks/{chunk-4LQFBY5L.js → chunk-6TEVM3X3.js} +10 -10
  71. package/dist/cli/chunks/{chunk-YPBSUGMI.js → chunk-7XTUKKRA.js} +1 -1
  72. package/dist/cli/chunks/chunk-A3GDX6UF.js +2 -0
  73. package/dist/cli/chunks/{chunk-HLUXXCHF.js → chunk-A5YTKKNA.js} +1 -1
  74. package/dist/cli/chunks/{chunk-Y4PFUMOU.js → chunk-ADNGZAT2.js} +1 -1
  75. package/dist/cli/chunks/{chunk-KNSRL6NO.js → chunk-AWQAE3SW.js} +2 -2
  76. package/dist/cli/chunks/{chunk-BY5OF7OH.js → chunk-AXDBQFR4.js} +2 -2
  77. package/dist/cli/chunks/{chunk-525CFDUE.js → chunk-AXVD7O3F.js} +2 -2
  78. package/dist/cli/chunks/{chunk-JHQCRRJI.js → chunk-B52ULNYO.js} +2 -2
  79. package/dist/cli/chunks/chunk-B6S4FC7M.js +3 -0
  80. package/dist/cli/chunks/{chunk-AJMJNQMP.js → chunk-BDVFSMOQ.js} +1 -1
  81. package/dist/cli/chunks/{chunk-DXD6K2ZP.js → chunk-BGXXMX3Y.js} +2 -2
  82. package/dist/cli/chunks/{chunk-EK7OLYOZ.js → chunk-BKMQQY5T.js} +2 -2
  83. package/dist/cli/chunks/{chunk-VWPM27GU.js → chunk-BN2FROBQ.js} +2 -2
  84. package/dist/cli/chunks/{chunk-J7I6PABJ.js → chunk-BO6EQNOC.js} +2 -2
  85. package/dist/cli/chunks/{chunk-4D4DENG6.js → chunk-BOVAKCDC.js} +2 -2
  86. package/dist/cli/chunks/{chunk-ZFL436FN.js → chunk-BSXKZDKO.js} +2 -2
  87. package/dist/cli/chunks/{chunk-J442IZLE.js → chunk-C5QVJ5XQ.js} +1 -1
  88. package/dist/cli/chunks/{chunk-ZB3LEFYG.js → chunk-CFQLLF3D.js} +2 -2
  89. package/dist/cli/chunks/{chunk-UHEOGZLX.js → chunk-DUCVLT3F.js} +7 -7
  90. package/dist/cli/chunks/{chunk-TVGI32MB.js → chunk-E4RMJCGA.js} +3 -3
  91. package/dist/cli/chunks/{chunk-TIUKLYAI.js → chunk-EONDCWY4.js} +1 -1
  92. package/dist/cli/chunks/{chunk-ZJH5MU2I.js → chunk-F4AGNKL2.js} +2 -2
  93. package/dist/cli/chunks/{chunk-N7HL5PHH.js → chunk-F6YD3BOW.js} +1 -1
  94. package/dist/cli/chunks/{chunk-5VZL4UVN.js → chunk-FQRS7WVA.js} +2 -2
  95. package/dist/cli/chunks/{chunk-SHKOCGNK.js → chunk-FT24SSDG.js} +2 -2
  96. package/dist/cli/chunks/chunk-FV4YNSAJ.js +5 -0
  97. package/dist/cli/chunks/{chunk-KXCLACFG.js → chunk-FVDM3X42.js} +2 -2
  98. package/dist/cli/chunks/{chunk-32BPDLRZ.js → chunk-FVH7TXWU.js} +2 -2
  99. package/dist/cli/chunks/{chunk-72XSEQMW.js → chunk-FWR5QY37.js} +2 -2
  100. package/dist/cli/chunks/chunk-FYINK2B7.js +6 -0
  101. package/dist/cli/chunks/{chunk-5JZRZI4S.js → chunk-GGISVPOZ.js} +2 -2
  102. package/dist/cli/chunks/{chunk-5LAVKGLH.js → chunk-GPIJIZJQ.js} +2 -2
  103. package/dist/cli/chunks/{chunk-5QO3R3TU.js → chunk-GXEVOT5F.js} +2 -2
  104. package/dist/cli/chunks/{chunk-IHRXZZQM.js → chunk-GZ4VB5RI.js} +1 -1
  105. package/dist/cli/chunks/chunk-HBDSCYSK.js +2 -0
  106. package/dist/cli/chunks/{chunk-GSKMOPL7.js → chunk-HGG4HR7C.js} +2 -2
  107. package/dist/cli/chunks/{chunk-AR67RJPY.js → chunk-HSCKWWO2.js} +2 -2
  108. package/dist/cli/chunks/{chunk-6XXZDV2C.js → chunk-HSQ3GUYJ.js} +2 -2
  109. package/dist/cli/chunks/{chunk-AAMLQ2LF.js → chunk-HZQBW5EM.js} +3 -3
  110. package/dist/cli/chunks/{chunk-O5W3FIO6.js → chunk-IGIYANVT.js} +2 -2
  111. package/dist/cli/chunks/{chunk-C6D5AHBO.js → chunk-IPWMSXBF.js} +2 -2
  112. package/dist/cli/chunks/{chunk-NDJ7P2EP.js → chunk-IWVNC7VY.js} +1 -1
  113. package/dist/cli/chunks/{chunk-FDDC72IA.js → chunk-IZODXKZD.js} +2 -2
  114. package/dist/cli/chunks/{chunk-NO3IV5Q5.js → chunk-J2MT2OJV.js} +1 -1
  115. package/dist/cli/chunks/{chunk-GQ6TUIKY.js → chunk-JKIJVVSP.js} +1 -1
  116. package/dist/cli/chunks/{chunk-LE4QJREF.js → chunk-JMRDT2XK.js} +1 -1
  117. package/dist/cli/chunks/{chunk-2YZ4G6NW.js → chunk-JR2UMTKG.js} +1 -1
  118. package/dist/cli/chunks/{chunk-RJIEG3NA.js → chunk-K6CH4CFF.js} +2 -2
  119. package/dist/cli/chunks/{chunk-5NNNEWLS.js → chunk-K7KW5QB5.js} +81 -88
  120. package/dist/cli/chunks/chunk-KFCQP434.js +2 -0
  121. package/dist/cli/chunks/{chunk-A5GBXCP5.js → chunk-KH4T6STG.js} +2 -2
  122. package/dist/cli/chunks/{chunk-VMDFFTCK.js → chunk-KJBYZO57.js} +1 -1
  123. package/dist/cli/chunks/{chunk-GJYHWYXR.js → chunk-KP4OKOKV.js} +2 -2
  124. package/dist/cli/chunks/chunk-L2MBKVSE.js +2 -0
  125. package/dist/cli/chunks/{chunk-XIQW7EFL.js → chunk-L3IPUIT3.js} +2 -2
  126. package/dist/cli/chunks/{chunk-W5HQUIML.js → chunk-L7PSU2YN.js} +2 -2
  127. package/dist/cli/chunks/{chunk-6DPYNAOK.js → chunk-LA3JPGQA.js} +2 -2
  128. package/dist/cli/chunks/{chunk-5PBLPQ5T.js → chunk-LC2QRN7V.js} +14 -13
  129. package/dist/cli/chunks/{chunk-SSYAQZXA.js → chunk-LHY7TMTM.js} +2 -2
  130. package/dist/cli/chunks/{chunk-QQWBWEJS.js → chunk-LLQ2UMF6.js} +3 -3
  131. package/dist/cli/chunks/{chunk-DTMAS2GB.js → chunk-LOJ7OO6W.js} +2 -2
  132. package/dist/cli/chunks/{chunk-32GN3JKR.js → chunk-LPUSH3VF.js} +1 -1
  133. package/dist/cli/chunks/{chunk-SDLWKRVL.js → chunk-LSEC2BU7.js} +2 -2
  134. package/dist/cli/chunks/{chunk-IOKYCMTJ.js → chunk-LTGB7OIU.js} +2 -2
  135. package/dist/cli/chunks/{chunk-6ZBXSOX6.js → chunk-LUG7YNVZ.js} +2 -2
  136. package/dist/cli/chunks/{chunk-CAKMOVZ6.js → chunk-LWAFRYKE.js} +2 -2
  137. package/dist/cli/chunks/{chunk-FLNAW7C4.js → chunk-M24ZAZ4U.js} +2 -2
  138. package/dist/cli/chunks/{chunk-L2DWPVNJ.js → chunk-MKRKRXTX.js} +1 -1
  139. package/dist/cli/chunks/{chunk-YTHTQPWR.js → chunk-MNNLONAD.js} +1 -1
  140. package/dist/cli/chunks/{chunk-V5NHZV7S.js → chunk-MQM37KAR.js} +2 -2
  141. package/dist/cli/chunks/{chunk-PPUZWYUG.js → chunk-MSX2OHYT.js} +2 -2
  142. package/dist/cli/chunks/{chunk-YRAX7SFJ.js → chunk-MVYQRVLP.js} +2 -2
  143. package/dist/cli/chunks/{chunk-QVDCVD5D.js → chunk-MZC5WM2P.js} +2 -2
  144. package/dist/cli/chunks/{chunk-S75SOOZL.js → chunk-MZRBNBB3.js} +2 -2
  145. package/dist/cli/chunks/{chunk-FL64OUBA.js → chunk-N3KQU4UC.js} +2 -2
  146. package/dist/cli/chunks/{chunk-G5RHFBAY.js → chunk-NKU3FFM4.js} +2 -2
  147. package/dist/cli/chunks/chunk-O5EWFR76.js +2 -0
  148. package/dist/cli/chunks/{chunk-63ZKI4PX.js → chunk-O5RDHD5T.js} +2 -2
  149. package/dist/cli/chunks/chunk-O6UWIXME.js +3 -0
  150. package/dist/cli/chunks/{chunk-HCH4Y6XX.js → chunk-OA4EQDC4.js} +2 -2
  151. package/dist/cli/chunks/{chunk-QPEOLAAS.js → chunk-OBCXCRXK.js} +1 -1
  152. package/dist/cli/chunks/{chunk-6ICX3FEG.js → chunk-OHU5P25N.js} +22 -22
  153. package/dist/cli/chunks/{chunk-GFWHUQSF.js → chunk-OOSV2RIA.js} +2 -2
  154. package/dist/cli/chunks/{chunk-MO55CVMT.js → chunk-OW23N2Y5.js} +14 -14
  155. package/dist/cli/chunks/{chunk-M7WJCTG3.js → chunk-OXOO3YDL.js} +2 -2
  156. package/dist/cli/chunks/{chunk-KQYJ4VQ5.js → chunk-OYGKSSSI.js} +1 -1
  157. package/dist/cli/chunks/chunk-PGO46IIW.js +2 -0
  158. package/dist/cli/chunks/{chunk-NVEWF4JV.js → chunk-PZOYQHWS.js} +1 -1
  159. package/dist/cli/chunks/{chunk-IESR7TNB.js → chunk-Q2BZSG7Z.js} +2 -2
  160. package/dist/cli/chunks/{chunk-XIIQ5QTT.js → chunk-Q7V722K5.js} +2 -2
  161. package/dist/cli/chunks/{chunk-F742SZAX.js → chunk-QZU6M5IO.js} +2 -2
  162. package/dist/cli/chunks/{chunk-PINSJCM3.js → chunk-R55Y76SJ.js} +1 -1
  163. package/dist/cli/chunks/{chunk-5B5QPCNU.js → chunk-RMEQYJPU.js} +4 -4
  164. package/dist/cli/chunks/{chunk-ZQ2XW3IP.js → chunk-RTYXFXTI.js} +2 -2
  165. package/dist/cli/chunks/{chunk-DVYHMDFR.js → chunk-SJF3O4FX.js} +374 -371
  166. package/dist/cli/chunks/{chunk-AG2EWGXS.js → chunk-SOUS7Z2H.js} +2 -2
  167. package/dist/cli/chunks/{chunk-3HD7E6HN.js → chunk-SRVNR3R3.js} +2 -2
  168. package/dist/cli/chunks/{chunk-KITOPKRG.js → chunk-SU3SXMVG.js} +2 -2
  169. package/dist/cli/chunks/chunk-SWGPLXWW.js +32 -0
  170. package/dist/cli/chunks/{chunk-ZR2TKVXQ.js → chunk-TRB3EVH3.js} +2 -2
  171. package/dist/cli/chunks/{chunk-OCV2XEWQ.js → chunk-TVBDUMKT.js} +2 -2
  172. package/dist/cli/chunks/{chunk-IOQ6ZQ5W.js → chunk-TWTXPSFU.js} +1 -1
  173. package/dist/cli/chunks/{chunk-CJSHWQXP.js → chunk-ULYUVUL2.js} +2 -2
  174. package/dist/cli/chunks/{chunk-PHT5N7SC.js → chunk-UNTBVJ5X.js} +2 -2
  175. package/dist/cli/chunks/{chunk-LKTTUHLF.js → chunk-UQAA4PHU.js} +2 -2
  176. package/dist/cli/chunks/{chunk-SR52XP5F.js → chunk-UWSJVKTE.js} +1 -1
  177. package/dist/cli/chunks/{chunk-L6QSTQME.js → chunk-V2LJ54KP.js} +2 -2
  178. package/dist/cli/chunks/{chunk-FBDVGRSC.js → chunk-VCCTTKP3.js} +7 -7
  179. package/dist/cli/chunks/{chunk-YLMNVLDK.js → chunk-VEGUYUVS.js} +1 -1
  180. package/dist/cli/chunks/{chunk-ASEOFRIG.js → chunk-VUQPVWNK.js} +2 -2
  181. package/dist/cli/chunks/{chunk-VXFLJNCA.js → chunk-VVGUE2T2.js} +2 -2
  182. package/dist/cli/chunks/{chunk-4NFQLP6R.js → chunk-W5ASDHJQ.js} +1 -1
  183. package/dist/cli/chunks/{chunk-I7MQIM2U.js → chunk-WGXT5NWQ.js} +1 -1
  184. package/dist/cli/chunks/chunk-WJN3V7QB.js +7 -0
  185. package/dist/cli/chunks/chunk-WPCRQIIF.js +29 -0
  186. package/dist/cli/chunks/{chunk-SASBO5Y5.js → chunk-WQNLXUWA.js} +6 -6
  187. package/dist/cli/chunks/{chunk-5SPCGMBB.js → chunk-WZVRMKG2.js} +2 -2
  188. package/dist/cli/chunks/{chunk-MI5MFHRA.js → chunk-X27IUWTD.js} +2 -2
  189. package/dist/cli/chunks/{chunk-HJ6ZGVTB.js → chunk-X4B345B6.js} +2 -2
  190. package/dist/cli/chunks/{chunk-HVRRLYX6.js → chunk-X5I2Y4VO.js} +2 -2
  191. package/dist/cli/chunks/{chunk-SUDMM5SO.js → chunk-X7IQIFTS.js} +2 -2
  192. package/dist/cli/chunks/chunk-XJN3RKUD.js +3 -0
  193. package/dist/cli/chunks/{chunk-E3D4GPLP.js → chunk-XQMGXTHJ.js} +3 -3
  194. package/dist/cli/chunks/{chunk-67Z5R7RJ.js → chunk-XTSAMB2Q.js} +2 -2
  195. package/dist/cli/chunks/{chunk-KVF4NXGQ.js → chunk-XZLIF4O2.js} +2 -2
  196. package/dist/cli/chunks/{chunk-EA4YQVKS.js → chunk-Y4LSEOZ3.js} +1 -1
  197. package/dist/cli/chunks/{chunk-OAEE6JWQ.js → chunk-Y4YN2RXR.js} +2 -2
  198. package/dist/cli/chunks/{chunk-CEYSYSK5.js → chunk-YDI56L35.js} +2 -2
  199. package/dist/cli/chunks/{chunk-JDIYMZCQ.js → chunk-YFILS5D5.js} +2 -2
  200. package/dist/cli/chunks/{chunk-GAHNO6JJ.js → chunk-YISDX6WB.js} +2 -2
  201. package/dist/cli/chunks/{chunk-AGRV5B3T.js → chunk-YP2GHQSV.js} +2 -2
  202. package/dist/cli/chunks/{chunk-UNGBRZDK.js → chunk-YSX756AM.js} +4 -4
  203. package/dist/cli/chunks/{chunk-BEKDKVQT.js → chunk-YWANOASW.js} +2 -2
  204. package/dist/cli/chunks/{chunk-JQ3DYUMS.js → chunk-YYIJLG7S.js} +2 -2
  205. package/dist/cli/chunks/{chunk-CRPIYUTJ.js → chunk-Z7SD7LXM.js} +2 -2
  206. package/dist/cli/chunks/{chunk-U2A7NHZA.js → chunk-ZDWD73UF.js} +2 -2
  207. package/dist/cli/chunks/{chunk-WP4RETKG.js → chunk-ZFT3RLA4.js} +2 -2
  208. package/dist/cli/chunks/{chunk-VJCIEHEF.js → chunk-ZNTHX5G3.js} +1 -1
  209. package/dist/cli/chunks/{chunk-PF7RBAYL.js → chunk-ZS27R7VL.js} +2 -2
  210. package/dist/cli/chunks/{chunk-24OX5TQJ.js → chunk-ZXHHHR7K.js} +1 -1
  211. package/dist/cli/chunks/{ci-MFUR4CWV.js → ci-N5MOMNXH.js} +2 -2
  212. package/dist/cli/chunks/{ci-config-PNDLQ6XV.js → ci-config-6L2ROQCW.js} +2 -2
  213. package/dist/cli/chunks/{ci-output-PFZ4M7NC.js → ci-output-DSRBYEIK.js} +2 -2
  214. package/dist/cli/chunks/{circuit-breaker-5HH6NLZN.js → circuit-breaker-VRPTNBL7.js} +2 -2
  215. package/dist/cli/chunks/{claude-flow-setup-QCKYLGLC.js → claude-flow-setup-4YFG3FU5.js} +2 -2
  216. package/dist/cli/chunks/client-I3L6BKRQ.js +2 -0
  217. package/dist/cli/chunks/{cline-installer-EASVPFXR.js → cline-installer-7RGYJWGN.js} +2 -2
  218. package/dist/cli/chunks/{code-UJXDVYRK.js → code-ISC6NW2K.js} +3 -3
  219. package/dist/cli/chunks/{code-index-extractor-BZJ3UDP4.js → code-index-extractor-2FID75YV.js} +2 -2
  220. package/dist/cli/chunks/{codex-installer-XSQZUVOZ.js → codex-installer-DZ7OG6KM.js} +2 -2
  221. package/dist/cli/chunks/{completions-OWOOJFI2.js → completions-SM3LICWK.js} +2 -2
  222. package/dist/cli/chunks/{complexity-analyzer-KP5TOHDT.js → complexity-analyzer-ZWD2CTAD.js} +2 -2
  223. package/dist/cli/chunks/{continuedev-installer-IFKQXLHM.js → continuedev-installer-AGASOA26.js} +2 -2
  224. package/dist/cli/chunks/copilot-installer-CLPZYTQC.js +3 -0
  225. package/dist/cli/chunks/core-handlers-5EFOJ37H.js +2 -0
  226. package/dist/cli/chunks/{cost-tracker-MMDDNKZB.js → cost-tracker-7PIGQYDV.js} +2 -2
  227. package/dist/cli/chunks/{coverage-LUH2B7NT.js → coverage-T2GEBTYS.js} +9 -9
  228. package/dist/cli/chunks/cross-domain-router-65WJAKVD.js +2 -0
  229. package/dist/cli/chunks/{cursor-installer-4YLM5GWM.js → cursor-installer-KXBID4MB.js} +2 -2
  230. package/dist/cli/chunks/daemon-43MXIVH3.js +18 -0
  231. package/dist/cli/chunks/{daemon-MZKVM4CJ.js → daemon-VAMJLQJ5.js} +3 -3
  232. package/dist/cli/chunks/{dag-attention-scheduler-X4CYW665.js → dag-attention-scheduler-UBP4VHTA.js} +2 -2
  233. package/dist/cli/chunks/{detect-7BM2XINO.js → detect-QWFIQRKI.js} +2 -2
  234. package/dist/cli/chunks/{dist-node-Y5APLEYB.js → dist-node-I2GICS3W.js} +2 -2
  235. package/dist/cli/chunks/{domain-handler-X3ZRJNAH.js → domain-handler-Z66ISB2A.js} +2 -2
  236. package/dist/cli/chunks/{domain-plugins-2UW5KQJB.js → domain-plugins-KHMD3FKT.js} +2 -2
  237. package/dist/cli/chunks/{domain-transfer-35W4CIBV.js → domain-transfer-JWGNNA6K.js} +2 -2
  238. package/dist/cli/chunks/dream-VQ2PZCVR.js +2 -0
  239. package/dist/cli/chunks/embed-and-insert-pattern-F5P5B6JX.js +3 -0
  240. package/dist/cli/chunks/{embedding-space-SBM2MZD2.js → embedding-space-KHG6TITM.js} +2 -2
  241. package/dist/cli/chunks/{eval-4QA2SROK.js → eval-43OHU7EI.js} +2 -2
  242. package/dist/cli/chunks/{experience-capture-middleware-Z6BF6KYM.js → experience-capture-middleware-KXD47H6P.js} +3 -3
  243. package/dist/cli/chunks/{fast-paths-FIORX6GN.js → fast-paths-6D75D5KD.js} +2 -2
  244. package/dist/cli/chunks/{feature-flags-6LYI2T4G.js → feature-flags-IE35Y55N.js} +2 -2
  245. package/dist/cli/chunks/{feature-flags-ZOO7LMIC.js → feature-flags-OYYHY7LS.js} +2 -2
  246. package/dist/cli/chunks/file-discovery-LGBTY3ID.js +2 -0
  247. package/dist/cli/chunks/{fleet-7WF53H4F.js → fleet-AGVJMFGD.js} +16 -16
  248. package/dist/cli/chunks/{gnn-wrapper-KJ6B7BRM.js → gnn-wrapper-5L66A7LW.js} +2 -2
  249. package/dist/cli/chunks/{heartbeat-handler-DEKKMOVW.js → heartbeat-handler-2BY6YYOT.js} +5 -5
  250. package/dist/cli/chunks/heartbeat-scheduler-3DU3M5AT.js +2 -0
  251. package/dist/cli/chunks/hnsw-adapter-N2IMSRPV.js +2 -0
  252. package/dist/cli/chunks/hnsw-index-DVU7TTJE.js +2 -0
  253. package/dist/cli/chunks/{hnsw-legacy-bridge-L27WS27N.js → hnsw-legacy-bridge-RYMWFNAH.js} +2 -2
  254. package/dist/cli/chunks/{hnswlib-node-4YOQC6L4.js → hnswlib-node-GG47HP2P.js} +2 -2
  255. package/dist/cli/chunks/{hooks-TAOKV4EJ.js → hooks-FQNACS24.js} +10 -10
  256. package/dist/cli/chunks/hybrid-backend-AS2PNHOD.js +2 -0
  257. package/dist/cli/chunks/{hypergraph-engine-BODRJLHL.js → hypergraph-engine-6BYNJQEP.js} +2 -2
  258. package/dist/cli/chunks/{hypergraph-handler-RKMYJNTU.js → hypergraph-handler-CYTAXZKJ.js} +3 -3
  259. package/dist/cli/chunks/impact-analyzer-Y4OONLFP.js +2 -0
  260. package/dist/cli/chunks/{init-guard-MXHSLSB2.js → init-guard-METTAV5O.js} +2 -2
  261. package/dist/cli/chunks/{init-handler-HUE57IFW.js → init-handler-GFT74U5Y.js} +6 -6
  262. package/dist/cli/chunks/init-wizard-HLNUBJQN.js +2 -0
  263. package/dist/cli/chunks/kernel-XKFWCL7Y.js +2 -0
  264. package/dist/cli/chunks/{kilocode-installer-S333IKYQ.js → kilocode-installer-GZV2D3FF.js} +2 -2
  265. package/dist/cli/chunks/{kiro-installer-WM5DLQWC.js → kiro-installer-Q4ZXUFC7.js} +2 -2
  266. package/dist/cli/chunks/knowledge-graph-CNL77CSZ.js +2 -0
  267. package/dist/cli/chunks/{learning-LNHMQLH5.js → learning-WA2QEYL7.js} +35 -34
  268. package/dist/cli/chunks/{llm-router-EWFXYZZR.js → llm-router-GRTCHWH7.js} +4 -4
  269. package/dist/cli/chunks/llm-router-service-UIYTYKP6.js +2 -0
  270. package/dist/cli/chunks/{load-FGYGWVDK.js → load-WXN3Q7Y5.js} +2 -2
  271. package/dist/cli/chunks/load-test-PXLW4A5B.js +2 -0
  272. package/dist/cli/chunks/{mcp-2FHNAAOM.js → mcp-LIQCPSJN.js} +2 -2
  273. package/dist/cli/chunks/{memory-DZMQ73AB.js → memory-OP6CHRFH.js} +5 -5
  274. package/dist/cli/chunks/memory-backend-XYOSO73Q.js +2 -0
  275. package/dist/cli/chunks/memory-handlers-PQFYVNVG.js +2 -0
  276. package/dist/cli/chunks/{multi-model-executor-6F2UAEUW.js → multi-model-executor-H54DEVRZ.js} +2 -2
  277. package/dist/cli/chunks/{opencode-installer-XY3BGOTZ.js → opencode-installer-BSQV6UAT.js} +2 -2
  278. package/dist/cli/chunks/{orchestrator-B4CNKUOS.js → orchestrator-TJDPQ4VL.js} +122 -35
  279. package/dist/cli/chunks/pattern-null-store-BKGTQFNF.js +2 -0
  280. package/dist/cli/chunks/{pattern-usage-recorder-R4GUFNMD.js → pattern-usage-recorder-FOVS4M5L.js} +2 -2
  281. package/dist/cli/chunks/{pipeline-FG5RKVRO.js → pipeline-4AY2ZIC6.js} +2 -2
  282. package/dist/cli/chunks/{platform-3BT4KEVJ.js → platform-FCSITYMR.js} +2 -2
  283. package/dist/cli/chunks/{plugin-WI4RIN7O.js → plugin-E56TV5S2.js} +2 -2
  284. package/dist/cli/chunks/{prime-radiant-advanced-wasm-7ECDNQFS.js → prime-radiant-advanced-wasm-ACOPC533.js} +2 -2
  285. package/dist/cli/chunks/project-root-MPX7CN2C.js +2 -0
  286. package/dist/cli/chunks/protocol-executor-CRQOCC4A.js +2 -0
  287. package/dist/cli/chunks/{protocol-handler-WNODKPGW.js → protocol-handler-KRVXF4LS.js} +2 -2
  288. package/dist/cli/chunks/{prove-5RHAEPYZ.js → prove-KMFPSKGD.js} +2 -2
  289. package/dist/cli/chunks/qe-reasoning-bank-UEGQ3O7F.js +2 -0
  290. package/dist/cli/chunks/{quality-WPHR7BGQ.js → quality-6DBI3HLB.js} +2 -2
  291. package/dist/cli/chunks/{quality-gate-4RKTEZMX.js → quality-gate-3ROZMEIL.js} +3 -3
  292. package/dist/cli/chunks/queen-coordinator-32574XSG.js +2 -0
  293. package/dist/cli/chunks/real-embeddings-MIGZNKK3.js +2 -0
  294. package/dist/cli/chunks/{ref-validation-TPAWHOHH.js → ref-validation-EYIP7DHW.js} +2 -2
  295. package/dist/cli/chunks/{roocode-installer-7AVHFNDI.js → roocode-installer-IGGZHR2Y.js} +2 -2
  296. package/dist/cli/chunks/router-CZJY5WX6.js +2 -0
  297. package/dist/cli/chunks/routing-feedback-RC3UBNFX.js +2 -0
  298. package/dist/cli/chunks/{routing-handler-YKEDVJSH.js → routing-handler-BWNHBYDC.js} +2 -2
  299. package/dist/cli/chunks/{ruvector-commands-JUAMM354.js → ruvector-commands-PXIHF432.js} +2 -2
  300. package/dist/cli/chunks/rvf-dual-writer-OG7OV2AK.js +2 -0
  301. package/dist/cli/chunks/rvf-migration-adapter-THYMW7ZO.js +2 -0
  302. package/dist/cli/chunks/rvf-migration-coordinator-3H6CLFU7.js +2 -0
  303. package/dist/cli/chunks/rvf-native-adapter-6JQJIKKW.js +2 -0
  304. package/dist/cli/chunks/{rvf-store-integrity-VJDUIRTX.js → rvf-store-integrity-CVB3NMSL.js} +2 -2
  305. package/dist/cli/chunks/safe-db-QFKCVTIJ.js +2 -0
  306. package/dist/cli/chunks/schedule-6JLVMMYB.js +2 -0
  307. package/dist/cli/chunks/scheduler-3MPZRMJD.js +2 -0
  308. package/dist/cli/chunks/{security-ORDN3RD2.js → security-DCRGOTWU.js} +3 -3
  309. package/dist/cli/chunks/{shared-rvf-adapter-CF4BCIO7.js → shared-rvf-adapter-GKD74QUB.js} +2 -2
  310. package/dist/cli/chunks/{shared-rvf-dual-writer-C32UBR6D.js → shared-rvf-dual-writer-HVAAVEOH.js} +2 -2
  311. package/dist/cli/chunks/sqlite-persistence-LGTIKAEX.js +2 -0
  312. package/dist/cli/chunks/{standalone-memory-OXRJYZXN.js → standalone-memory-O7O2U5N4.js} +2 -2
  313. package/dist/cli/chunks/{status-handler-BCX5D4HY.js → status-handler-BQTPJJTL.js} +2 -2
  314. package/dist/cli/chunks/{structural-health-LFG7RUU6.js → structural-health-4H6J4OHK.js} +2 -2
  315. package/dist/cli/chunks/sync-DJ4TF6QX.js +2 -0
  316. package/dist/cli/chunks/{sync-YJEE2K2L.js → sync-WW5TAVYW.js} +2 -2
  317. package/dist/cli/chunks/{task-handler-6LXKPTXJ.js → task-handler-HEM4IEOW.js} +2 -2
  318. package/dist/cli/chunks/{task-handlers-CILP36I7.js → task-handlers-JRA3NXIR.js} +3 -3
  319. package/dist/cli/chunks/test-772ZXVG2.js +34 -0
  320. package/dist/cli/chunks/test-runner-process-XGF2U3NG.js +2 -0
  321. package/dist/cli/chunks/{test-scheduling-ISI2O4Q5.js → test-scheduling-4TRB7LZ7.js} +3 -3
  322. package/dist/cli/chunks/token-bootstrap-CICBIJ7T.js +2 -0
  323. package/dist/cli/chunks/{token-usage-XOC5KG7S.js → token-usage-B7PEKE2G.js} +2 -2
  324. package/dist/cli/chunks/{transformers-LSLQAARK.js → transformers-V7X7BDZX.js} +2 -2
  325. package/dist/cli/chunks/tree-sitter-wasm-parser-OXPFKFZS.js +2 -0
  326. package/dist/cli/chunks/{types-5BLCGLCR.js → types-AHHTUY3I.js} +2 -2
  327. package/dist/cli/chunks/unified-memory-GUR3IUI6.js +2 -0
  328. package/dist/cli/chunks/unified-memory-hnsw-NJP2F2RY.js +2 -0
  329. package/dist/cli/chunks/unified-persistence-NILBWXDP.js +2 -0
  330. package/dist/cli/chunks/{upgrade-RQJYLK3J.js → upgrade-DZ4DLUQ5.js} +2 -2
  331. package/dist/cli/chunks/{validate-QBHWXXCK.js → validate-4DTLIDJE.js} +2 -2
  332. package/dist/cli/chunks/{validate-swarm-IKXBKFB5.js → validate-swarm-A26UFVIS.js} +2 -2
  333. package/dist/cli/chunks/visual-security-YECYZ27X.js +2 -0
  334. package/dist/cli/chunks/{web-tree-sitter-ZF6FIE5R.js → web-tree-sitter-F2C7QRYT.js} +2 -2
  335. package/dist/cli/chunks/{windsurf-installer-HQGDZT5D.js → windsurf-installer-OOBTDA6W.js} +2 -2
  336. package/dist/cli/chunks/{witness-chain-DCHCAMSQ.js → witness-chain-KGFZJP32.js} +2 -2
  337. package/dist/cli/chunks/witness-chain-LYBXFLJB.js +2 -0
  338. package/dist/cli/chunks/witness-chain-repair-CNTXOGPN.js +2 -0
  339. package/dist/cli/chunks/{witness-chain-verifier-PX2OQ6XT.js → witness-chain-verifier-OB7ZZOI3.js} +2 -2
  340. package/dist/cli/chunks/{witness-key-manager-RXYQNFJB.js → witness-key-manager-YCKGKGQI.js} +2 -2
  341. package/dist/cli/chunks/{workflow-FBKCA4H6.js → workflow-PRERHWKY.js} +4 -4
  342. package/dist/cli/chunks/workflow-orchestrator-UIBGWCU3.js +2 -0
  343. package/dist/cli/chunks/wrappers-L4UY4V63.js +2 -0
  344. package/dist/cli/commands/coverage.js +4 -1
  345. package/dist/cli/commands/learning-prune.js +9 -1
  346. package/dist/cli/commands/test.js +26 -4
  347. package/dist/cli/handlers/brain-handler.js +32 -2
  348. package/dist/cli/handlers/heartbeat-handler.js +3 -1
  349. package/dist/cli/utils/coverage-data.js +5 -1
  350. package/dist/cli/utils/coverage-verdict.d.ts +10 -2
  351. package/dist/cli/utils/coverage-verdict.js +23 -8
  352. package/dist/cli/utils/fleet-operation.js +9 -3
  353. package/dist/coordination/handlers/code-intelligence-handlers.js +17 -3
  354. package/dist/coordination/handlers/coverage-handlers.js +22 -9
  355. package/dist/coordination/handlers/coverage-target.d.ts +22 -2
  356. package/dist/coordination/handlers/coverage-target.js +45 -9
  357. package/dist/coordination/handlers/handler-utils.d.ts +19 -0
  358. package/dist/coordination/handlers/handler-utils.js +22 -8
  359. package/dist/coordination/handlers/test-execution-handlers.js +64 -20
  360. package/dist/coordination/protocols/code-intelligence-index.js +6 -3
  361. package/dist/coordination/protocols/learning-consolidation-archive.d.ts +6 -3
  362. package/dist/coordination/protocols/learning-consolidation-archive.js +4 -3
  363. package/dist/coordination/workflow-builtin.js +1 -0
  364. package/dist/domains/code-intelligence/services/semantic-analyzer.d.ts +8 -3
  365. package/dist/domains/code-intelligence/services/semantic-analyzer.js +39 -25
  366. package/dist/domains/code-intelligence/services/text-relevance.d.ts +32 -0
  367. package/dist/domains/code-intelligence/services/text-relevance.js +63 -0
  368. package/dist/domains/defect-intelligence/interfaces.d.ts +2 -0
  369. package/dist/domains/defect-intelligence/prediction-history.d.ts +15 -1
  370. package/dist/domains/defect-intelligence/prediction-history.js +63 -7
  371. package/dist/domains/defect-intelligence/services/defect-predictor.d.ts +1 -0
  372. package/dist/domains/defect-intelligence/services/defect-predictor.js +33 -13
  373. package/dist/domains/learning-optimization/coordinator.js +17 -10
  374. package/dist/domains/learning-optimization/domain-ranking.d.ts +26 -0
  375. package/dist/domains/learning-optimization/domain-ranking.js +28 -0
  376. package/dist/domains/learning-optimization/interfaces.d.ts +5 -0
  377. package/dist/domains/learning-optimization/pattern-archive.d.ts +55 -8
  378. package/dist/domains/learning-optimization/pattern-archive.js +90 -17
  379. package/dist/domains/learning-optimization/pattern-consolidation.js +18 -2
  380. package/dist/domains/learning-optimization/pattern-merge.d.ts +26 -0
  381. package/dist/domains/learning-optimization/pattern-merge.js +127 -0
  382. package/dist/domains/learning-optimization/services/learning-coordinator.js +21 -35
  383. package/dist/domains/test-execution/coordinator.d.ts +3 -1
  384. package/dist/domains/test-execution/coordinator.js +13 -4
  385. package/dist/domains/test-execution/interfaces.d.ts +5 -0
  386. package/dist/domains/test-execution/plugin.js +2 -0
  387. package/dist/domains/test-execution/services/flaky-detector.d.ts +9 -1
  388. package/dist/domains/test-execution/services/flaky-detector.js +26 -8
  389. package/dist/domains/test-execution/services/retry-handler.d.ts +7 -1
  390. package/dist/domains/test-execution/services/retry-handler.js +44 -5
  391. package/dist/domains/test-execution/services/runner-test-cases.d.ts +2 -0
  392. package/dist/domains/test-execution/services/runner-test-cases.js +7 -3
  393. package/dist/domains/test-execution/services/test-executor.d.ts +5 -1
  394. package/dist/domains/test-execution/services/test-executor.js +85 -17
  395. package/dist/init/copilot-installer.d.ts +6 -0
  396. package/dist/init/copilot-installer.js +37 -17
  397. package/dist/init/init-wizard-steps.js +3 -1
  398. package/dist/init/phases/07-hooks.js +97 -10
  399. package/dist/init/platform-config-generator.d.ts +10 -0
  400. package/dist/init/platform-config-generator.js +26 -1
  401. package/dist/integrations/embeddings/cache/EmbeddingCache.js +1 -1
  402. package/dist/integrations/ruvector/brain-rvf-exporter.d.ts +16 -1
  403. package/dist/integrations/ruvector/brain-rvf-exporter.js +18 -32
  404. package/dist/integrations/ruvector/brain-rvf-richness.d.ts +75 -0
  405. package/dist/integrations/ruvector/brain-rvf-richness.js +127 -0
  406. package/dist/kernel/unified-memory-migration.js +1 -1
  407. package/dist/kernel/unified-memory.d.ts +8 -0
  408. package/dist/kernel/unified-memory.js +13 -0
  409. package/dist/learning/checkpoint-shrink-ack.d.ts +25 -0
  410. package/dist/learning/checkpoint-shrink-ack.js +57 -0
  411. package/dist/learning/dream/dream-engine.d.ts +44 -3
  412. package/dist/learning/dream/dream-engine.js +6 -2
  413. package/dist/learning/embedder-endpoint-client.d.ts +45 -0
  414. package/dist/learning/embedder-endpoint-client.js +98 -3
  415. package/dist/learning/embedder-identity-store.js +3 -1
  416. package/dist/learning/embedding-space-legacy-adoption.d.ts +53 -0
  417. package/dist/learning/embedding-space-legacy-adoption.js +115 -0
  418. package/dist/learning/embedding-space-registry.d.ts +90 -0
  419. package/dist/learning/embedding-space-registry.js +181 -0
  420. package/dist/learning/experience-capture.d.ts +3 -1
  421. package/dist/learning/experience-capture.js +15 -5
  422. package/dist/learning/experience-space-verification.d.ts +2 -0
  423. package/dist/learning/experience-space-verification.js +3 -2
  424. package/dist/learning/learning-retention.js +4 -0
  425. package/dist/learning/pattern-promotion.d.ts +7 -0
  426. package/dist/learning/pattern-promotion.js +64 -12
  427. package/dist/learning/real-embeddings.d.ts +3 -0
  428. package/dist/learning/real-embeddings.js +73 -11
  429. package/dist/learning/rvf-pattern-store.js +6 -1
  430. package/dist/mcp/bundle.js +558 -537
  431. package/dist/mcp/handlers/domain-handler-configs.d.ts +3 -0
  432. package/dist/mcp/handlers/domain-handler-configs.js +1 -0
  433. package/dist/mcp/handlers/heartbeat-handlers.d.ts +4 -2
  434. package/dist/mcp/protocol-server.js +1 -1
  435. package/dist/mcp/tools/learning-optimization/optimize.d.ts +6 -1
  436. package/dist/mcp/tools/learning-optimization/optimize.js +20 -11
  437. package/dist/planning/goap-planner.js +4 -0
  438. package/dist/planning/plan-executor.js +6 -2
  439. package/dist/shared/embeddings/index.d.ts +2 -2
  440. package/dist/shared/embeddings/index.js +1 -1
  441. package/dist/shared/embeddings/nomic-embedder.d.ts +8 -2
  442. package/dist/shared/embeddings/nomic-embedder.js +19 -11
  443. package/dist/shared/embeddings/ollama-client.d.ts +28 -2
  444. package/dist/shared/embeddings/ollama-client.js +84 -22
  445. package/dist/shared/embeddings/types.d.ts +15 -0
  446. package/dist/shared/embeddings/types.js +4 -0
  447. package/dist/shared/git/git-analyzer.d.ts +30 -11
  448. package/dist/shared/git/git-analyzer.js +95 -48
  449. package/dist/shared/io/confined-read.d.ts +32 -7
  450. package/dist/shared/io/confined-read.js +58 -25
  451. package/dist/shared/io/file-reader.js +4 -1
  452. package/dist/shared/pytest-junit-report.d.ts +93 -0
  453. package/dist/shared/pytest-junit-report.js +241 -0
  454. package/dist/shared/safe-db.d.ts +1 -1
  455. package/dist/shared/safe-db.js +20 -5
  456. package/dist/shared/sqlite-journal-mode.d.ts +39 -0
  457. package/dist/shared/sqlite-journal-mode.js +53 -0
  458. package/dist/shared/test-runner-project.d.ts +51 -1
  459. package/dist/shared/test-runner-project.js +140 -25
  460. package/dist/sync/claude-flow-bridge.js +1 -1
  461. package/dist/sync/readers/sqlite-reader.js +3 -4
  462. package/dist/sync/writers/sqlite-writer.js +1 -1
  463. package/dist/workers/interfaces.d.ts +2 -2
  464. package/dist/workers/quality-daemon/git-watcher.d.ts +8 -0
  465. package/dist/workers/quality-daemon/git-watcher.js +54 -12
  466. package/dist/workers/quality-daemon/index.js +1 -1
  467. package/dist/workers/quality-daemon/priority-queue.d.ts +2 -1
  468. package/dist/workers/workers/defect-predictor.d.ts +9 -4
  469. package/dist/workers/workers/defect-predictor.js +98 -37
  470. package/package.json +1 -1
  471. package/dist/cli/chunks/adapter-6CQ2PIP5.js +0 -2
  472. package/dist/cli/chunks/aqe-learning-engine-73RR52VS.js +0 -2
  473. package/dist/cli/chunks/base-SMCMMVGP.js +0 -2
  474. package/dist/cli/chunks/brain-handler-HQWZFO52.js +0 -95
  475. package/dist/cli/chunks/browser-workflow-A2MEZ66K.js +0 -2
  476. package/dist/cli/chunks/chunk-CGGUM2YJ.js +0 -3
  477. package/dist/cli/chunks/chunk-D6COXLYE.js +0 -8
  478. package/dist/cli/chunks/chunk-EGYE5UPQ.js +0 -2
  479. package/dist/cli/chunks/chunk-IUBJVHNB.js +0 -3
  480. package/dist/cli/chunks/chunk-KL7OKSU2.js +0 -4
  481. package/dist/cli/chunks/chunk-KPRCB5LT.js +0 -7
  482. package/dist/cli/chunks/chunk-LRSX2FJM.js +0 -2
  483. package/dist/cli/chunks/chunk-M4FRQ4TE.js +0 -12
  484. package/dist/cli/chunks/chunk-MAFQV4U4.js +0 -16
  485. package/dist/cli/chunks/chunk-NZU4ACBZ.js +0 -2
  486. package/dist/cli/chunks/chunk-RV74I3YO.js +0 -3
  487. package/dist/cli/chunks/chunk-SJ6Y4725.js +0 -5
  488. package/dist/cli/chunks/chunk-UE5ZOZR2.js +0 -2
  489. package/dist/cli/chunks/chunk-VSIKHWZ4.js +0 -29
  490. package/dist/cli/chunks/chunk-YAPLJR7K.js +0 -2
  491. package/dist/cli/chunks/client-MHQRTZM4.js +0 -2
  492. package/dist/cli/chunks/copilot-installer-IGJ6KGQY.js +0 -3
  493. package/dist/cli/chunks/core-handlers-UAK3LLJE.js +0 -2
  494. package/dist/cli/chunks/cross-domain-router-WTRZQPNQ.js +0 -2
  495. package/dist/cli/chunks/daemon-CAVZ7OFV.js +0 -18
  496. package/dist/cli/chunks/dream-EJY24JN6.js +0 -2
  497. package/dist/cli/chunks/embed-and-insert-pattern-COG4C7ZI.js +0 -3
  498. package/dist/cli/chunks/file-discovery-UZSFSS4V.js +0 -2
  499. package/dist/cli/chunks/heartbeat-scheduler-NVR356I7.js +0 -2
  500. package/dist/cli/chunks/hnsw-adapter-LFMPLUJU.js +0 -2
  501. package/dist/cli/chunks/hnsw-index-POCPMVJH.js +0 -2
  502. package/dist/cli/chunks/hybrid-backend-4STAO7CV.js +0 -2
  503. package/dist/cli/chunks/impact-analyzer-3VIIISBQ.js +0 -2
  504. package/dist/cli/chunks/init-wizard-PL6QN6RQ.js +0 -2
  505. package/dist/cli/chunks/kernel-CCDWT7KS.js +0 -2
  506. package/dist/cli/chunks/knowledge-graph-KFOMEN3H.js +0 -2
  507. package/dist/cli/chunks/llm-router-service-7NBE2EX6.js +0 -2
  508. package/dist/cli/chunks/load-test-UNZUWY3F.js +0 -2
  509. package/dist/cli/chunks/memory-backend-DFGKWA2Q.js +0 -2
  510. package/dist/cli/chunks/memory-handlers-MP426XRJ.js +0 -2
  511. package/dist/cli/chunks/pattern-null-store-SSVF5TE5.js +0 -2
  512. package/dist/cli/chunks/project-root-BEANNYWU.js +0 -2
  513. package/dist/cli/chunks/protocol-executor-FQVIHXZ7.js +0 -2
  514. package/dist/cli/chunks/qe-reasoning-bank-5TFYSE24.js +0 -2
  515. package/dist/cli/chunks/queen-coordinator-Y2OUL7IN.js +0 -2
  516. package/dist/cli/chunks/real-embeddings-OXLYU7JW.js +0 -2
  517. package/dist/cli/chunks/router-EP34O3KB.js +0 -2
  518. package/dist/cli/chunks/routing-feedback-FJCRKXNG.js +0 -2
  519. package/dist/cli/chunks/rvf-dual-writer-ILITJSFG.js +0 -2
  520. package/dist/cli/chunks/rvf-migration-adapter-XF6W4C2N.js +0 -2
  521. package/dist/cli/chunks/rvf-migration-coordinator-CMKG56AR.js +0 -2
  522. package/dist/cli/chunks/rvf-native-adapter-7YFW6S4Y.js +0 -2
  523. package/dist/cli/chunks/safe-db-TCAU4FUT.js +0 -2
  524. package/dist/cli/chunks/schedule-NB5KV435.js +0 -2
  525. package/dist/cli/chunks/scheduler-JKXGKVK6.js +0 -2
  526. package/dist/cli/chunks/sqlite-persistence-IXCNZRTW.js +0 -2
  527. package/dist/cli/chunks/sync-OSF7C2NL.js +0 -2
  528. package/dist/cli/chunks/test-SD457QJ6.js +0 -34
  529. package/dist/cli/chunks/test-runner-process-VKD65QQU.js +0 -2
  530. package/dist/cli/chunks/token-bootstrap-VUELSBOS.js +0 -2
  531. package/dist/cli/chunks/tree-sitter-wasm-parser-YAIPHRIL.js +0 -2
  532. package/dist/cli/chunks/unified-memory-GI76TXFV.js +0 -2
  533. package/dist/cli/chunks/unified-memory-hnsw-GXJ5BTZO.js +0 -2
  534. package/dist/cli/chunks/unified-persistence-OP7FDQPD.js +0 -2
  535. package/dist/cli/chunks/visual-security-GZ2MOKWB.js +0 -2
  536. package/dist/cli/chunks/witness-chain-P3XXXA62.js +0 -2
  537. package/dist/cli/chunks/witness-chain-repair-PUX2NFDL.js +0 -2
  538. package/dist/cli/chunks/workflow-orchestrator-P2APAJAA.js +0 -2
  539. package/dist/cli/chunks/wrappers-TWSKBTWD.js +0 -2
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Embedding-space registry (#1298).
3
+ *
4
+ * A space id is a hash of the runtime configuration plus an exact fingerprint
5
+ * of a canary vector, rounded to int16 (steps of about 3e-5). The same model
6
+ * restarted on other hardware or kernels can move the canary by more than
7
+ * that, which would mint a new space id for vectors that are still
8
+ * comparable. So each space minted here also stores its canary vector, as the
9
+ * space's reference. At the next start, a runtime with the same configuration
10
+ * whose canary is within EMBEDDING_ROUND_TRIP_MIN_COSINE of a reference is
11
+ * that space: it keeps the stored identity and id instead of minting one.
12
+ *
13
+ * Entries live in memory.db kv_store (namespace _system) and are only ever
14
+ * added: a reference is never updated, so slow drift cannot walk a space
15
+ * away, and no stored id, vector or manifest is ever rewritten. Without a
16
+ * database, or when it cannot be read, derivation is what it was before.
17
+ */
18
+ import { type EmbeddingSpaceIdentity } from './embedding-space.js';
19
+ /** The raw memory.db connection the registry reads and writes. */
20
+ export interface EmbeddingSpaceRegistryDb {
21
+ prepare(sql: string): {
22
+ all(...params: unknown[]): unknown[];
23
+ run(...params: unknown[]): unknown;
24
+ };
25
+ }
26
+ /** A space and the canary vector it was minted with. */
27
+ export interface RegisteredEmbeddingSpace {
28
+ identity: EmbeddingSpaceIdentity;
29
+ /** The text the canary vector embeds; only like canaries are compared. */
30
+ canaryText: string;
31
+ canary: number[];
32
+ }
33
+ export type EmbeddingSpaceResolution =
34
+ /** A registered space with the same fingerprint. */
35
+ 'matched-exact'
36
+ /** A registered space whose canary is within the round-trip cosine. */
37
+ | 'matched-cosine'
38
+ /** No registered space matched: the derived space was registered. */
39
+ | 'registered'
40
+ /** No registered space matched; a pre-registry space id was verified and registered (#1302). */
41
+ | 'adopted-legacy'
42
+ /** No usable registry: the derived space is used as before. */
43
+ | 'unavailable';
44
+ export interface ResolvedEmbeddingSpace {
45
+ identity: EmbeddingSpaceIdentity;
46
+ resolution: EmbeddingSpaceResolution;
47
+ /** Same-configuration spaces that did not match (for the drift warning). */
48
+ otherSpaces: number;
49
+ /** Settles when the registration write has run (or failed, logged). */
50
+ registration: Promise<void>;
51
+ }
52
+ /** Same configuration: everything but the runtime fingerprint. */
53
+ export declare function sameEmbeddingSpaceConfig(a: EmbeddingSpaceIdentity, b: EmbeddingSpaceIdentity): boolean;
54
+ /**
55
+ * The registered space a runtime belongs to, or null. Candidates share the
56
+ * runtime's configuration and canary text; an equal fingerprint wins, then
57
+ * the highest canary cosine at or above the round-trip threshold.
58
+ */
59
+ export declare function matchRegisteredSpace(derived: EmbeddingSpaceIdentity, canaryText: string, canary: readonly number[], entries: readonly RegisteredEmbeddingSpace[]): {
60
+ entry: RegisteredEmbeddingSpace;
61
+ exact: boolean;
62
+ } | null;
63
+ /** Read every registered space. Malformed entries are skipped. Throws on a DB error. */
64
+ export declare function loadRegisteredSpaces(db: EmbeddingSpaceRegistryDb): RegisteredEmbeddingSpace[];
65
+ /**
66
+ * Add a space to the registry. Never replaces an entry. The write goes
67
+ * through the connection's write queue (#1283) when it has one, so a locked
68
+ * memory.db does not block the event loop.
69
+ */
70
+ export declare function registerEmbeddingSpace(db: EmbeddingSpaceRegistryDb, space: RegisteredEmbeddingSpace): Promise<void>;
71
+ /**
72
+ * Choose the space for a freshly derived runtime identity: a registered space
73
+ * it matches, or the derived space, which is then registered. Never throws:
74
+ * when the registry cannot be read the derived space is used, as before.
75
+ */
76
+ export declare function resolveEmbeddingSpace(db: EmbeddingSpaceRegistryDb | null, derived: EmbeddingSpaceIdentity, canaryText: string, canary: readonly number[]): ResolvedEmbeddingSpace;
77
+ /**
78
+ * Picks a legacy space id (one with stored vectors but no registry entry) the
79
+ * runtime belongs to, or null. Throws only on an unexpected failure.
80
+ */
81
+ export type LegacySpaceAdopter = (derived: EmbeddingSpaceIdentity, registered: readonly RegisteredEmbeddingSpace[]) => Promise<string | null>;
82
+ /**
83
+ * #1302: like resolveEmbeddingSpace, but before registering a new space the
84
+ * adopter may name a legacy space id the runtime has been shown to reproduce.
85
+ * That id is kept and registered with the current canary as its reference.
86
+ * Its identity carries the current runtime fields: a pre-registry id is a
87
+ * hash that cannot be reversed into the fields it was minted from.
88
+ */
89
+ export declare function resolveEmbeddingSpaceAdoptingLegacy(db: EmbeddingSpaceRegistryDb | null, derived: EmbeddingSpaceIdentity, canaryText: string, canary: readonly number[], adoptLegacy: LegacySpaceAdopter): Promise<ResolvedEmbeddingSpace>;
90
+ //# sourceMappingURL=embedding-space-registry.d.ts.map
@@ -0,0 +1,181 @@
1
+ /**
2
+ * Embedding-space registry (#1298).
3
+ *
4
+ * A space id is a hash of the runtime configuration plus an exact fingerprint
5
+ * of a canary vector, rounded to int16 (steps of about 3e-5). The same model
6
+ * restarted on other hardware or kernels can move the canary by more than
7
+ * that, which would mint a new space id for vectors that are still
8
+ * comparable. So each space minted here also stores its canary vector, as the
9
+ * space's reference. At the next start, a runtime with the same configuration
10
+ * whose canary is within EMBEDDING_ROUND_TRIP_MIN_COSINE of a reference is
11
+ * that space: it keeps the stored identity and id instead of minting one.
12
+ *
13
+ * Entries live in memory.db kv_store (namespace _system) and are only ever
14
+ * added: a reference is never updated, so slow drift cannot walk a space
15
+ * away, and no stored id, vector or manifest is ever rewritten. Without a
16
+ * database, or when it cannot be read, derivation is what it was before.
17
+ */
18
+ import { cosineSimilarity } from '../shared/utils/vector-math.js';
19
+ import { writeWhenUnlockedOn } from '../shared/sqlite-write-queue.js';
20
+ import { toErrorMessage } from '../shared/error-utils.js';
21
+ import { EMBEDDING_ROUND_TRIP_MIN_COSINE, } from './embedding-space.js';
22
+ const NAMESPACE = '_system';
23
+ const KEY_PREFIX = 'embedding_space:';
24
+ /** Same configuration: everything but the runtime fingerprint. */
25
+ export function sameEmbeddingSpaceConfig(a, b) {
26
+ return (a.provider === b.provider &&
27
+ a.model === b.model &&
28
+ a.dimensions === b.dimensions &&
29
+ (a.pooling ?? null) === (b.pooling ?? null) &&
30
+ a.normalized === b.normalized &&
31
+ (a.preprocessingVersion ?? null) === (b.preprocessingVersion ?? null) &&
32
+ (a.implementation ?? null) === (b.implementation ?? null));
33
+ }
34
+ /**
35
+ * The registered space a runtime belongs to, or null. Candidates share the
36
+ * runtime's configuration and canary text; an equal fingerprint wins, then
37
+ * the highest canary cosine at or above the round-trip threshold.
38
+ */
39
+ export function matchRegisteredSpace(derived, canaryText, canary, entries) {
40
+ const candidates = entries.filter((entry) => entry.canaryText === canaryText &&
41
+ entry.canary.length === canary.length &&
42
+ sameEmbeddingSpaceConfig(entry.identity, derived));
43
+ const exact = candidates.find((entry) => entry.identity.runtimeFingerprint === derived.runtimeFingerprint);
44
+ if (exact)
45
+ return { entry: exact, exact: true };
46
+ let best = null;
47
+ for (const entry of candidates) {
48
+ const cosine = cosineSimilarity(entry.canary, canary);
49
+ if (cosine >= EMBEDDING_ROUND_TRIP_MIN_COSINE && (!best || cosine > best.cosine)) {
50
+ best = { entry, cosine };
51
+ }
52
+ }
53
+ return best ? { entry: best.entry, exact: false } : null;
54
+ }
55
+ /** Read every registered space. Malformed entries are skipped. Throws on a DB error. */
56
+ export function loadRegisteredSpaces(db) {
57
+ const rows = db
58
+ .prepare('SELECT value FROM kv_store WHERE namespace = ? AND key LIKE ?')
59
+ .all(NAMESPACE, `${KEY_PREFIX}%`);
60
+ const entries = [];
61
+ for (const row of rows) {
62
+ const entry = parseEntry(row.value);
63
+ if (entry)
64
+ entries.push(entry);
65
+ }
66
+ return entries;
67
+ }
68
+ function parseEntry(value) {
69
+ let parsed;
70
+ try {
71
+ parsed = JSON.parse(value);
72
+ }
73
+ catch {
74
+ return null;
75
+ }
76
+ const { identity, canaryText, canary } = parsed;
77
+ if (parsed.version !== 1 ||
78
+ !identity ||
79
+ typeof identity.spaceId !== 'string' ||
80
+ typeof identity.runtimeFingerprint !== 'string' ||
81
+ typeof identity.dimensions !== 'number' ||
82
+ typeof canaryText !== 'string' ||
83
+ !Array.isArray(canary) ||
84
+ canary.length !== identity.dimensions ||
85
+ !canary.every((x) => typeof x === 'number' && Number.isFinite(x))) {
86
+ return null;
87
+ }
88
+ return { identity, canaryText, canary };
89
+ }
90
+ /**
91
+ * Add a space to the registry. Never replaces an entry. The write goes
92
+ * through the connection's write queue (#1283) when it has one, so a locked
93
+ * memory.db does not block the event loop.
94
+ */
95
+ export function registerEmbeddingSpace(db, space) {
96
+ const entry = { version: 1, createdAt: Date.now(), ...space };
97
+ return writeWhenUnlockedOn(db, () => {
98
+ db.prepare('INSERT OR IGNORE INTO kv_store (key, namespace, value) VALUES (?, ?, ?)').run(KEY_PREFIX + space.identity.spaceId, NAMESPACE, JSON.stringify(entry));
99
+ });
100
+ }
101
+ /**
102
+ * Choose the space for a freshly derived runtime identity: a registered space
103
+ * it matches, or the derived space, which is then registered. Never throws:
104
+ * when the registry cannot be read the derived space is used, as before.
105
+ */
106
+ export function resolveEmbeddingSpace(db, derived, canaryText, canary) {
107
+ const lookup = lookupEmbeddingSpace(db, derived, canaryText, canary);
108
+ if (lookup.resolved)
109
+ return lookup.resolved;
110
+ return registerResolvedSpace(lookup.db, derived, canaryText, canary, 'registered', lookup.otherSpaces);
111
+ }
112
+ /**
113
+ * #1302: like resolveEmbeddingSpace, but before registering a new space the
114
+ * adopter may name a legacy space id the runtime has been shown to reproduce.
115
+ * That id is kept and registered with the current canary as its reference.
116
+ * Its identity carries the current runtime fields: a pre-registry id is a
117
+ * hash that cannot be reversed into the fields it was minted from.
118
+ */
119
+ export async function resolveEmbeddingSpaceAdoptingLegacy(db, derived, canaryText, canary, adoptLegacy) {
120
+ const lookup = lookupEmbeddingSpace(db, derived, canaryText, canary);
121
+ if (lookup.resolved)
122
+ return lookup.resolved;
123
+ let legacySpaceId = null;
124
+ try {
125
+ legacySpaceId = await adoptLegacy(derived, lookup.entries);
126
+ }
127
+ catch (error) {
128
+ console.warn(`[EmbeddingSpaceRegistry] legacy space check failed (${toErrorMessage(error)}); ` +
129
+ `registering the derived space id`);
130
+ }
131
+ if (legacySpaceId) {
132
+ const adopted = { ...derived, spaceId: legacySpaceId };
133
+ return registerResolvedSpace(lookup.db, adopted, canaryText, canary, 'adopted-legacy', 0);
134
+ }
135
+ return registerResolvedSpace(lookup.db, derived, canaryText, canary, 'registered', lookup.otherSpaces);
136
+ }
137
+ /** A registered match (or the unavailable fallback), or what is needed to register. */
138
+ function lookupEmbeddingSpace(db, derived, canaryText, canary) {
139
+ const unavailable = () => ({
140
+ resolved: {
141
+ identity: derived,
142
+ resolution: 'unavailable',
143
+ otherSpaces: 0,
144
+ registration: Promise.resolve(),
145
+ },
146
+ });
147
+ if (!db)
148
+ return unavailable();
149
+ let entries;
150
+ try {
151
+ entries = loadRegisteredSpaces(db);
152
+ }
153
+ catch (error) {
154
+ console.warn(`[EmbeddingSpaceRegistry] could not read registered embedding spaces ` +
155
+ `(${toErrorMessage(error)}); using the derived space id`);
156
+ return unavailable();
157
+ }
158
+ const match = matchRegisteredSpace(derived, canaryText, canary, entries);
159
+ if (match) {
160
+ return {
161
+ resolved: {
162
+ identity: match.entry.identity,
163
+ resolution: match.exact ? 'matched-exact' : 'matched-cosine',
164
+ otherSpaces: 0,
165
+ registration: Promise.resolve(),
166
+ },
167
+ };
168
+ }
169
+ const otherSpaces = entries.filter((entry) => entry.canaryText === canaryText && sameEmbeddingSpaceConfig(entry.identity, derived)).length;
170
+ return { db, entries, otherSpaces };
171
+ }
172
+ function registerResolvedSpace(db, identity, canaryText, canary, resolution, otherSpaces) {
173
+ const registration = Promise.resolve()
174
+ .then(() => registerEmbeddingSpace(db, { identity, canaryText, canary: [...canary] }))
175
+ .catch((error) => {
176
+ console.warn(`[EmbeddingSpaceRegistry] could not register embedding space ${identity.spaceId.slice(0, 12)} ` +
177
+ `(${toErrorMessage(error)}); it is registered at a later start`);
178
+ });
179
+ return { identity, resolution, otherSpaces, registration };
180
+ }
181
+ //# sourceMappingURL=embedding-space-registry.js.map
@@ -254,7 +254,9 @@ export declare class ExperienceCaptureService {
254
254
  /**
255
255
  * Extract pattern from experience
256
256
  */
257
- extractPattern(experience: TaskExperience): Promise<PatternExtractionResult>;
257
+ extractPattern(experience: TaskExperience, options?: {
258
+ createIfMissing?: boolean;
259
+ }): Promise<PatternExtractionResult>;
258
260
  /**
259
261
  * Share experience across domains
260
262
  */
@@ -253,12 +253,17 @@ export class ExperienceCaptureService {
253
253
  // Extract patterns: require positive reward (or no reward signal) AND quality threshold
254
254
  // Zero or negative reward blocks extraction — only learn from genuinely positive outcomes
255
255
  const rewardAllowsExtraction = experience.reward === undefined || experience.reward > 0;
256
+ const passesExtractionGates = experience.success &&
257
+ experience.quality >= this.config.minQualityForPatternExtraction &&
258
+ rewardAllowsExtraction;
256
259
  // #1129: a measured outcome is recorded whether it succeeded or failed.
257
260
  // Recording only successes made the usage success rate 100% by selection.
258
- if (experience.outcomeBasis !== undefined || (experience.success &&
259
- experience.quality >= this.config.minQualityForPatternExtraction &&
260
- rewardAllowsExtraction)) {
261
- const extractionResult = await this.extractPattern(experience);
261
+ // #1147: only a run that passes the gates creates a pattern; any other
262
+ // measured run updates the usage of an existing matching pattern.
263
+ if (passesExtractionGates || experience.outcomeBasis !== undefined) {
264
+ const extractionResult = await this.extractPattern(experience, {
265
+ createIfMissing: passesExtractionGates,
266
+ });
262
267
  if (extractionResult.newPattern || extractionResult.reinforced) {
263
268
  experience.patterns = [extractionResult.patternId];
264
269
  }
@@ -375,7 +380,7 @@ export class ExperienceCaptureService {
375
380
  /**
376
381
  * Extract pattern from experience
377
382
  */
378
- async extractPattern(experience) {
383
+ async extractPattern(experience, options = {}) {
379
384
  if (!this.patternStore) {
380
385
  return { newPattern: false, reinforced: false, promoted: false };
381
386
  }
@@ -421,6 +426,11 @@ export class ExperienceCaptureService {
421
426
  };
422
427
  }
423
428
  }
429
+ // #1147: a run that did not pass the extraction gates (e.g. a measured
430
+ // failure) never mints a pattern; with no existing match nothing is stored.
431
+ if (options.createIfMissing === false) {
432
+ return { newPattern: false, reinforced: false, promoted: false };
433
+ }
424
434
  // Create new pattern from experience
425
435
  const patternOptions = this.experienceToPatternOptions(experience);
426
436
  const createResult = await this.patternStore.create(patternOptions);
@@ -61,6 +61,8 @@ export interface ExperienceSpaceVerificationResult {
61
61
  * in steps_json.
62
62
  */
63
63
  export declare function legacyExperienceEmbeddingTexts(row: LegacyExperienceRow): string[];
64
+ /** The row's stored float32 vector, or null when the blob is short. */
65
+ export declare function storedExperienceVector(row: LegacyExperienceRow): number[] | null;
64
66
  /**
65
67
  * Check up to `limit` legacy rows (vector, no embedding_space_id) and set
66
68
  * embedding_space_id on those whose stored vector the active embedder
@@ -44,7 +44,8 @@ export function legacyExperienceEmbeddingTexts(row) {
44
44
  }
45
45
  return [...texts];
46
46
  }
47
- function storedVector(row) {
47
+ /** The row's stored float32 vector, or null when the blob is short. */
48
+ export function storedExperienceVector(row) {
48
49
  if (row.embedding.length < row.embedding_dimension * 4)
49
50
  return null;
50
51
  const v = [];
@@ -107,7 +108,7 @@ export async function verifyLegacyExperienceSpaces(db, options) {
107
108
  let lastRowid = 0;
108
109
  try {
109
110
  for (const row of rows) {
110
- const stored = storedVector(row);
111
+ const stored = storedExperienceVector(row);
111
112
  let matched = false;
112
113
  if (stored) {
113
114
  for (const text of legacyExperienceEmbeddingTexts(row)) {
@@ -26,6 +26,7 @@
26
26
  * Every step reports the row counts it measured before and after, or, in a
27
27
  * dry run, the counts it would change.
28
28
  */
29
+ import { acknowledgeCheckpointShrink, removedRows } from './checkpoint-shrink-ack.js';
29
30
  export const DEFAULT_FAILED_DREAM_CYCLE_RETENTION_DAYS = 7;
30
31
  export const DEFAULT_OUTCOME_CONCEPT_CAP = 2000;
31
32
  /** Below this the cap would delete outcome nodes that the next dream reloads. */
@@ -187,6 +188,9 @@ export function runDreamRetention(db, settings = resolveDefaultRetention()) {
187
188
  if (settings.outcomeConceptCap !== null) {
188
189
  steps.push(capOutcomeConcepts(db, { maxNodes: settings.outcomeConceptCap, dryRun }));
189
190
  }
191
+ // #1251: a deliberate shrink, so the next brain checkpoint accepts it.
192
+ if (removedRows(steps))
193
+ acknowledgeCheckpointShrink(db, 'dream');
190
194
  return { enabled: settings.enabled, steps };
191
195
  }
192
196
  /** Lines for a dream's output: what retention removed, or would remove while off. */
@@ -60,9 +60,16 @@ export interface SeedingDeps {
60
60
  */
61
61
  signal?: AbortSignal;
62
62
  }
63
+ /** Tag stored on every pattern written by cross-domain seeding. */
64
+ export declare const CROSS_DOMAIN_TRANSFER_TAG = "cross-domain-transfer";
63
65
  /**
64
66
  * Seed cross-domain patterns by transferring generalizable patterns
65
67
  * from populated domains to their related domains.
68
+ *
69
+ * Idempotent (#1325): only original patterns are counted and transferred
70
+ * (never a pattern tagged `cross-domain-transfer`), and a transfer whose exact
71
+ * target name already exists in the target domain is skipped. Re-running it
72
+ * against a seeded store transfers nothing.
66
73
  */
67
74
  export declare function seedCrossDomainPatterns(deps: SeedingDeps): Promise<{
68
75
  transferred: number;
@@ -152,9 +152,39 @@ export async function promotePattern(patternId, deps) {
152
152
  return result;
153
153
  }
154
154
  }
155
+ /** Tag stored on every pattern written by cross-domain seeding. */
156
+ export const CROSS_DOMAIN_TRANSFER_TAG = 'cross-domain-transfer';
157
+ /** Maximum original patterns transferred out of one source domain per run. */
158
+ const SEED_SOURCE_LIMIT = 50;
159
+ function isCrossDomainTransfer(pattern) {
160
+ return pattern.context?.tags?.includes(CROSS_DOMAIN_TRANSFER_TAG) ?? false;
161
+ }
162
+ /**
163
+ * Snapshot one domain before seeding writes anything, or null when the store
164
+ * cannot list it. Counting and transferring only originals keeps every run's
165
+ * decisions the same as the first run's, so a re-run finds every transfer it
166
+ * would make already present by name (#1325).
167
+ */
168
+ async function snapshotDomain(deps, domain, domainCount) {
169
+ if (domainCount === 0)
170
+ return { originals: [], names: new Set() };
171
+ const result = await deps.searchPatterns('', { domain, limit: domainCount });
172
+ if (!result.success)
173
+ return null;
174
+ const patterns = result.value.map(({ pattern }) => pattern);
175
+ return {
176
+ originals: patterns.filter((pattern) => !isCrossDomainTransfer(pattern)),
177
+ names: new Set(patterns.map((pattern) => pattern.name)),
178
+ };
179
+ }
155
180
  /**
156
181
  * Seed cross-domain patterns by transferring generalizable patterns
157
182
  * from populated domains to their related domains.
183
+ *
184
+ * Idempotent (#1325): only original patterns are counted and transferred
185
+ * (never a pattern tagged `cross-domain-transfer`), and a transfer whose exact
186
+ * target name already exists in the target domain is skipped. Re-running it
187
+ * against a seeded store transfers nothing.
158
188
  */
159
189
  export async function seedCrossDomainPatterns(deps) {
160
190
  const { signal } = deps;
@@ -162,27 +192,48 @@ export async function seedCrossDomainPatterns(deps) {
162
192
  const stats = await deps.patternStore.getStats();
163
193
  let transferred = 0;
164
194
  let skipped = 0;
195
+ // Snapshot all involved domains up front, before any transfer is written.
196
+ const domains = new Set();
197
+ for (const [source, targets] of Object.entries(RELATED_DOMAINS)) {
198
+ domains.add(source);
199
+ for (const target of targets)
200
+ domains.add(target);
201
+ }
202
+ const snapshots = new Map();
203
+ for (const domain of domains) {
204
+ signal?.throwIfAborted();
205
+ snapshots.set(domain, await snapshotDomain(deps, domain, stats.byDomain[domain] || 0));
206
+ }
165
207
  for (const [sourceDomainStr, targetDomains] of Object.entries(RELATED_DOMAINS)) {
166
208
  signal?.throwIfAborted();
167
209
  const sourceDomain = sourceDomainStr;
168
- const sourceCount = stats.byDomain[sourceDomain] || 0;
169
- if (sourceCount === 0)
210
+ const source = snapshots.get(sourceDomain);
211
+ if (!source)
170
212
  continue;
171
- const sourceResult = await deps.searchPatterns('', {
172
- domain: sourceDomain,
173
- limit: 50,
174
- });
175
- if (!sourceResult.success)
213
+ const sourceCount = source.originals.length;
214
+ if (sourceCount === 0)
176
215
  continue;
216
+ const sourcePatterns = source.originals.slice(0, SEED_SOURCE_LIMIT);
177
217
  for (const targetDomain of targetDomains) {
178
218
  signal?.throwIfAborted();
179
- const targetCount = stats.byDomain[targetDomain] || 0;
180
- if (targetCount >= sourceCount) {
219
+ const target = snapshots.get(targetDomain);
220
+ if (!target) {
221
+ // Cannot prove which transfers already exist: transfer nothing rather
222
+ // than risk duplicating the target domain.
223
+ skipped++;
224
+ continue;
225
+ }
226
+ if (target.originals.length >= sourceCount) {
181
227
  skipped++;
182
228
  continue;
183
229
  }
184
- for (const { pattern: sourcePattern } of sourceResult.value) {
230
+ for (const sourcePattern of sourcePatterns) {
185
231
  signal?.throwIfAborted();
232
+ const transferredName = `${sourcePattern.name} (from ${sourceDomain})`;
233
+ if (target.names.has(transferredName)) {
234
+ skipped++;
235
+ continue;
236
+ }
186
237
  const existingCheck = await deps.searchPatterns(sourcePattern.name, {
187
238
  domain: targetDomain,
188
239
  limit: 1,
@@ -198,7 +249,7 @@ export async function seedCrossDomainPatterns(deps) {
198
249
  const transferResult = await deps.storePattern({
199
250
  patternType: sourcePattern.patternType,
200
251
  qeDomain: targetDomain,
201
- name: `${sourcePattern.name} (from ${sourceDomain})`,
252
+ name: transferredName,
202
253
  description: `${sourcePattern.description} [Transferred from ${sourceDomain} domain]`,
203
254
  template: sourcePattern.template,
204
255
  context: {
@@ -206,13 +257,14 @@ export async function seedCrossDomainPatterns(deps) {
206
257
  relatedDomains: [sourceDomain, targetDomain],
207
258
  tags: [
208
259
  ...sourcePattern.context.tags,
209
- 'cross-domain-transfer',
260
+ CROSS_DOMAIN_TRANSFER_TAG,
210
261
  `source:${sourceDomain}`,
211
262
  ],
212
263
  },
213
264
  confidence: transferredConfidence,
214
265
  });
215
266
  if (transferResult.success) {
267
+ target.names.add(transferredName);
216
268
  transferred++;
217
269
  }
218
270
  else {
@@ -40,6 +40,7 @@ export interface EmbeddingConfig {
40
40
  endpointToken?: string;
41
41
  }
42
42
  export declare const DEFAULT_EMBEDDING_CONFIG: EmbeddingConfig;
43
+ export declare function __spaceRegistrationSettledForTests(): Promise<void>;
43
44
  /**
44
45
  * Compute real embedding using transformer model
45
46
  *
@@ -95,6 +96,8 @@ export declare function allowEmbedderInitRetry(): void;
95
96
  * for the breaker window as well as the caller's retry interval. The probe
96
97
  * must find the identity this process bound to (ADR-097): a changed
97
98
  * fingerprint means vectors would not be comparable.
99
+ * The client refuses it (EmbedderEndpointIdentityChangedError) and keeps
100
+ * refusing every caller, also when its breaker recovers on its own (#1282).
98
101
  * Callers rate-limit rechecks, then embed a canary to confirm.
99
102
  */
100
103
  export declare function recheckEmbedder(config?: Partial<EmbeddingConfig>): Promise<void>;