@cleocode/cleo 2026.9.6 → 2026.9.7

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 (382) hide show
  1. package/dist/cli/index.js +31 -2
  2. package/dist/cli/index.js.map +1 -1
  3. package/package.json +13 -13
  4. package/scripts/copy-studio-dist.mjs +97 -3
  5. package/studio-dist/client/_app/immutable/chunks/BGmpyfzD.js +1 -0
  6. package/studio-dist/client/_app/immutable/chunks/{DQE2lHpR.js → DVHIxkgs.js} +1 -1
  7. package/studio-dist/client/_app/immutable/chunks/{Cq8SkApb.js → TX-23QW3.js} +1 -1
  8. package/studio-dist/client/_app/immutable/chunks/{B4pbMhWh.js → eK8hf4s7.js} +1 -1
  9. package/studio-dist/client/_app/immutable/entry/{app.AO-dq23l.js → app.BoQ7cgT2.js} +2 -2
  10. package/studio-dist/client/_app/immutable/entry/start.Cg1v8DU4.js +1 -0
  11. package/studio-dist/client/_app/immutable/nodes/{0.pcHH7cls.js → 0.CZzEEyVh.js} +1 -1
  12. package/studio-dist/client/_app/immutable/nodes/{1.BZ_6sEg7.js → 1.Bj3Opbua.js} +1 -1
  13. package/studio-dist/client/_app/immutable/nodes/{15.C49XuRDg.js → 15.BfXgiwMC.js} +1 -1
  14. package/studio-dist/client/_app/immutable/nodes/{16.D_IEqgU8.js → 16.mEwy9cqh.js} +1 -1
  15. package/studio-dist/client/_app/immutable/nodes/{17.DMmmyyKw.js → 17.DP2QtQGn.js} +1 -1
  16. package/studio-dist/client/_app/immutable/nodes/{18.BeHgL2ha.js → 18.Bu0054sX.js} +1 -1
  17. package/studio-dist/client/_app/immutable/nodes/{20.ByQCOFEK.js → 20.B1AIHdkP.js} +1 -1
  18. package/studio-dist/client/_app/immutable/nodes/{24.DKhWVVfG.js → 24.BUoUu37z.js} +1 -1
  19. package/studio-dist/client/_app/immutable/nodes/{25.BS4Qyw38.js → 25.ddZ1_EFk.js} +1 -1
  20. package/studio-dist/client/_app/immutable/nodes/{26.CZ-vCPq6.js → 26.6OcmQbLV.js} +1 -1
  21. package/studio-dist/client/_app/immutable/nodes/{3.B1Ua25St.js → 3.Dyir4xXj.js} +1 -1
  22. package/studio-dist/client/_app/version.json +1 -1
  23. package/studio-dist/server/chunks/{0-BkBuauLU.js → 0-CvsKDxQ6.js} +3 -3
  24. package/studio-dist/server/chunks/{1-C-FPVHUW.js → 1-ck_x2Hf0.js} +3 -3
  25. package/studio-dist/server/chunks/{15-BEk78EBu.js → 15-BvUNl3KL.js} +3 -3
  26. package/studio-dist/server/chunks/{16-BzISLvSG.js → 16-De6EzPSa.js} +3 -3
  27. package/studio-dist/server/chunks/{17-DGt4P3nJ.js → 17-CZNsiZhi.js} +3 -3
  28. package/studio-dist/server/chunks/{18-DLGcIwmV.js → 18-CbxxjZox.js} +3 -3
  29. package/studio-dist/server/chunks/{20-BvcOxe5q.js → 20-DVU22np7.js} +3 -3
  30. package/studio-dist/server/chunks/{24-DlzL0G3_.js → 24-CVlymvLF.js} +3 -3
  31. package/studio-dist/server/chunks/{25-BkcpAlfJ.js → 25-CAg6Xcmn.js} +3 -3
  32. package/studio-dist/server/chunks/{26-CY_OLXcd.js → 26-_nfVTvNi.js} +3 -3
  33. package/studio-dist/server/chunks/{3-CbodebGY.js → 3-B8KhfvHp.js} +3 -3
  34. package/studio-dist/server/chunks/{_layout.svelte-B31p5awD.js → _layout.svelte-BEIGQcIv.js} +4 -4
  35. package/studio-dist/server/chunks/{_page.svelte-C6P8rRvk.js → _page.svelte-2cgtvHwW.js} +3 -3
  36. package/studio-dist/server/chunks/{_page.svelte-BdTlq0Gh.js → _page.svelte-9OQphlnm.js} +4 -4
  37. package/studio-dist/server/chunks/{_page.svelte-h0JOhZab.js → _page.svelte-BIlhmugm.js} +3 -3
  38. package/studio-dist/server/chunks/{_page.svelte-DR0AY_gZ.js → _page.svelte-BgwL2Gyu.js} +3 -3
  39. package/studio-dist/server/chunks/{_page.svelte-EWYHbzl0.js → _page.svelte-C_VSL8NW.js} +4 -4
  40. package/studio-dist/server/chunks/{_page.svelte-CFnkQk35.js → _page.svelte-DOWw416I.js} +3 -3
  41. package/studio-dist/server/chunks/{_page.svelte-BIIvdH13.js → _page.svelte-Wfx7ww_h.js} +3 -3
  42. package/studio-dist/server/chunks/{_page.svelte-CfjdIh3A.js → _page.svelte-l4Z_xjl9.js} +3 -3
  43. package/studio-dist/server/chunks/{_page.svelte-BuVX3kf2.js → _page.svelte-tYN7_LXI.js} +3 -3
  44. package/studio-dist/server/chunks/{client-2rpcRzcr.js → client-CgX38JBu.js} +2 -2
  45. package/studio-dist/server/chunks/{error.svelte-CpckcxW6.js → error.svelte-CplNulnS.js} +3 -3
  46. package/studio-dist/server/chunks/{internal-xyE_opYp.js → internal-D6eWgsHJ.js} +2 -2
  47. package/studio-dist/server/chunks/{stores-BcV2X8z1.js → stores-5DmdjPCH.js} +2 -2
  48. package/studio-dist/server/index.js +1 -1
  49. package/studio-dist/server/manifest.js +12 -12
  50. package/studio-dist/client/_app/immutable/assets/ort-wasm-simd-threaded.asyncify.BrebZMa_.wasm +0 -0
  51. package/studio-dist/client/_app/immutable/chunks/Dw--1J0g.js +0 -1
  52. package/studio-dist/client/_app/immutable/entry/start.DyU3_ZJI.js +0 -1
  53. package/studio-dist/server/chunks/0-BkBuauLU.js.map +0 -1
  54. package/studio-dist/server/chunks/1-C-FPVHUW.js.map +0 -1
  55. package/studio-dist/server/chunks/10-DvOD4ksa.js.map +0 -1
  56. package/studio-dist/server/chunks/11-DMnBZ02H.js.map +0 -1
  57. package/studio-dist/server/chunks/12-CCyRyRWX.js.map +0 -1
  58. package/studio-dist/server/chunks/13-Dx1c3a_X.js.map +0 -1
  59. package/studio-dist/server/chunks/14-Bo-dTCaZ.js.map +0 -1
  60. package/studio-dist/server/chunks/15-BEk78EBu.js.map +0 -1
  61. package/studio-dist/server/chunks/16-BzISLvSG.js.map +0 -1
  62. package/studio-dist/server/chunks/17-DGt4P3nJ.js.map +0 -1
  63. package/studio-dist/server/chunks/18-DLGcIwmV.js.map +0 -1
  64. package/studio-dist/server/chunks/19-DqHyladS.js.map +0 -1
  65. package/studio-dist/server/chunks/2-COvmA-ZA.js.map +0 -1
  66. package/studio-dist/server/chunks/20-BvcOxe5q.js.map +0 -1
  67. package/studio-dist/server/chunks/21-DXK9ptAC.js.map +0 -1
  68. package/studio-dist/server/chunks/22-DD5CLWJC.js.map +0 -1
  69. package/studio-dist/server/chunks/23-D_tUnnoc.js.map +0 -1
  70. package/studio-dist/server/chunks/24-DlzL0G3_.js.map +0 -1
  71. package/studio-dist/server/chunks/25-BkcpAlfJ.js.map +0 -1
  72. package/studio-dist/server/chunks/26-CY_OLXcd.js.map +0 -1
  73. package/studio-dist/server/chunks/27-C9edghG4.js.map +0 -1
  74. package/studio-dist/server/chunks/28-VemTJGyc.js.map +0 -1
  75. package/studio-dist/server/chunks/29-CXP-m29t.js.map +0 -1
  76. package/studio-dist/server/chunks/3-CbodebGY.js.map +0 -1
  77. package/studio-dist/server/chunks/30-QiM1S4cJ.js.map +0 -1
  78. package/studio-dist/server/chunks/31-BwdY9NnB.js.map +0 -1
  79. package/studio-dist/server/chunks/4-CSaG4HjO.js.map +0 -1
  80. package/studio-dist/server/chunks/5-i5ry4y3C.js.map +0 -1
  81. package/studio-dist/server/chunks/6-DR1GWBMT.js.map +0 -1
  82. package/studio-dist/server/chunks/7-DSNwn3aQ.js.map +0 -1
  83. package/studio-dist/server/chunks/8-Bj0bx07K.js.map +0 -1
  84. package/studio-dist/server/chunks/9-B3Tz0mZq.js.map +0 -1
  85. package/studio-dist/server/chunks/AwsRestJsonProtocol-BZuoNBmL.js.map +0 -1
  86. package/studio-dist/server/chunks/HeroHeader-v4Q9vaGr.js.map +0 -1
  87. package/studio-dist/server/chunks/Sparkline-BJ-GuhRd.js.map +0 -1
  88. package/studio-dist/server/chunks/StatBlock-DHJMmOCx.js.map +0 -1
  89. package/studio-dist/server/chunks/Tabs-DzG6Bn9a.js.map +0 -1
  90. package/studio-dist/server/chunks/UnionSerde-BflIkhKj.js.map +0 -1
  91. package/studio-dist/server/chunks/_dispatch-ncuRztUQ.js.map +0 -1
  92. package/studio-dist/server/chunks/_lafs-C3_fBF_X.js.map +0 -1
  93. package/studio-dist/server/chunks/_layout.svelte-B31p5awD.js.map +0 -1
  94. package/studio-dist/server/chunks/_page.svelte-BIIvdH13.js.map +0 -1
  95. package/studio-dist/server/chunks/_page.svelte-BVVTrzTL.js.map +0 -1
  96. package/studio-dist/server/chunks/_page.svelte-BXyoMME1.js.map +0 -1
  97. package/studio-dist/server/chunks/_page.svelte-B_pq-Z98.js.map +0 -1
  98. package/studio-dist/server/chunks/_page.svelte-BdTlq0Gh.js.map +0 -1
  99. package/studio-dist/server/chunks/_page.svelte-BuVX3kf2.js.map +0 -1
  100. package/studio-dist/server/chunks/_page.svelte-Byz2djto.js.map +0 -1
  101. package/studio-dist/server/chunks/_page.svelte-C3aIui4o.js.map +0 -1
  102. package/studio-dist/server/chunks/_page.svelte-C6P8rRvk.js.map +0 -1
  103. package/studio-dist/server/chunks/_page.svelte-CCoTp89s.js.map +0 -1
  104. package/studio-dist/server/chunks/_page.svelte-CFnkQk35.js.map +0 -1
  105. package/studio-dist/server/chunks/_page.svelte-CHzXuw2Q.js.map +0 -1
  106. package/studio-dist/server/chunks/_page.svelte-CYDjW1R0.js.map +0 -1
  107. package/studio-dist/server/chunks/_page.svelte-CfjdIh3A.js.map +0 -1
  108. package/studio-dist/server/chunks/_page.svelte-Clbkk1gm.js.map +0 -1
  109. package/studio-dist/server/chunks/_page.svelte-CophUar3.js.map +0 -1
  110. package/studio-dist/server/chunks/_page.svelte-DR0AY_gZ.js.map +0 -1
  111. package/studio-dist/server/chunks/_page.svelte-DUWbZjC7.js.map +0 -1
  112. package/studio-dist/server/chunks/_page.svelte-DYNorA0S.js.map +0 -1
  113. package/studio-dist/server/chunks/_page.svelte-EWYHbzl0.js.map +0 -1
  114. package/studio-dist/server/chunks/_page.svelte-EkXO_YfN.js.map +0 -1
  115. package/studio-dist/server/chunks/_page.svelte-M5D2QnMS.js.map +0 -1
  116. package/studio-dist/server/chunks/_page.svelte-UYiF7YBK.js.map +0 -1
  117. package/studio-dist/server/chunks/_page.svelte-al08ovKm.js.map +0 -1
  118. package/studio-dist/server/chunks/_page.svelte-bGhsrIjS.js.map +0 -1
  119. package/studio-dist/server/chunks/_page.svelte-h0JOhZab.js.map +0 -1
  120. package/studio-dist/server/chunks/_page.svelte-ksTJUXce.js.map +0 -1
  121. package/studio-dist/server/chunks/_page.svelte-nzffIbBP.js.map +0 -1
  122. package/studio-dist/server/chunks/_server.ts-4NyKAneX.js.map +0 -1
  123. package/studio-dist/server/chunks/_server.ts-4p6cp9ke.js.map +0 -1
  124. package/studio-dist/server/chunks/_server.ts-7hGdxdEI.js.map +0 -1
  125. package/studio-dist/server/chunks/_server.ts-B2E7fxo9.js.map +0 -1
  126. package/studio-dist/server/chunks/_server.ts-B5g3eScF.js.map +0 -1
  127. package/studio-dist/server/chunks/_server.ts-B6b3b-yA.js.map +0 -1
  128. package/studio-dist/server/chunks/_server.ts-BOgGqaZp.js.map +0 -1
  129. package/studio-dist/server/chunks/_server.ts-BPcErnS0.js.map +0 -1
  130. package/studio-dist/server/chunks/_server.ts-BT0Uq2yq.js.map +0 -1
  131. package/studio-dist/server/chunks/_server.ts-BV1HiKZ0.js.map +0 -1
  132. package/studio-dist/server/chunks/_server.ts-BWp3g6Cr.js.map +0 -1
  133. package/studio-dist/server/chunks/_server.ts-BdN4AJ6o.js.map +0 -1
  134. package/studio-dist/server/chunks/_server.ts-Bfr4u3EP.js.map +0 -1
  135. package/studio-dist/server/chunks/_server.ts-Bw7A4zgb.js.map +0 -1
  136. package/studio-dist/server/chunks/_server.ts-C3Jo-ju8.js.map +0 -1
  137. package/studio-dist/server/chunks/_server.ts-C4BcDGqS.js.map +0 -1
  138. package/studio-dist/server/chunks/_server.ts-C5NF-UgC.js.map +0 -1
  139. package/studio-dist/server/chunks/_server.ts-CDMurH5m.js.map +0 -1
  140. package/studio-dist/server/chunks/_server.ts-CGiAXy5i.js.map +0 -1
  141. package/studio-dist/server/chunks/_server.ts-CJA1djzJ.js.map +0 -1
  142. package/studio-dist/server/chunks/_server.ts-COJHCgbq.js.map +0 -1
  143. package/studio-dist/server/chunks/_server.ts-CShsBkeE.js.map +0 -1
  144. package/studio-dist/server/chunks/_server.ts-CUl-Utkt.js.map +0 -1
  145. package/studio-dist/server/chunks/_server.ts-CboRJY0Q.js.map +0 -1
  146. package/studio-dist/server/chunks/_server.ts-CkoJ2HCW.js.map +0 -1
  147. package/studio-dist/server/chunks/_server.ts-CpmMp5D8.js.map +0 -1
  148. package/studio-dist/server/chunks/_server.ts-Cq60m8Pw.js.map +0 -1
  149. package/studio-dist/server/chunks/_server.ts-Cz0zgaUV.js.map +0 -1
  150. package/studio-dist/server/chunks/_server.ts-D0GAFJRb.js.map +0 -1
  151. package/studio-dist/server/chunks/_server.ts-DA6p3pmi.js.map +0 -1
  152. package/studio-dist/server/chunks/_server.ts-DRVz9D-J.js.map +0 -1
  153. package/studio-dist/server/chunks/_server.ts-DSAv66wD.js.map +0 -1
  154. package/studio-dist/server/chunks/_server.ts-DSzRdt1U.js.map +0 -1
  155. package/studio-dist/server/chunks/_server.ts-DThYFaZj.js.map +0 -1
  156. package/studio-dist/server/chunks/_server.ts-DV6pzF-M.js.map +0 -1
  157. package/studio-dist/server/chunks/_server.ts-D_3Pm0gr.js.map +0 -1
  158. package/studio-dist/server/chunks/_server.ts-DcHxdMsm.js.map +0 -1
  159. package/studio-dist/server/chunks/_server.ts-DgbY5EB3.js.map +0 -1
  160. package/studio-dist/server/chunks/_server.ts-Dlfadh2I.js.map +0 -1
  161. package/studio-dist/server/chunks/_server.ts-DnE0f-iC.js.map +0 -1
  162. package/studio-dist/server/chunks/_server.ts-Do9RIPRo.js.map +0 -1
  163. package/studio-dist/server/chunks/_server.ts-DwTRjS4y.js.map +0 -1
  164. package/studio-dist/server/chunks/_server.ts-JallJnps.js.map +0 -1
  165. package/studio-dist/server/chunks/_server.ts-NEFTbJpM.js.map +0 -1
  166. package/studio-dist/server/chunks/_server.ts-ZS1_yMwR.js.map +0 -1
  167. package/studio-dist/server/chunks/_server.ts-_RJXtmfi.js.map +0 -1
  168. package/studio-dist/server/chunks/_server.ts-d-2NvRwX.js.map +0 -1
  169. package/studio-dist/server/chunks/_server.ts-hL92cV7Z.js.map +0 -1
  170. package/studio-dist/server/chunks/_server.ts-k2fApwOp.js.map +0 -1
  171. package/studio-dist/server/chunks/_server.ts-lPlBUIJX.js.map +0 -1
  172. package/studio-dist/server/chunks/_server.ts-rUWMLkIw.js.map +0 -1
  173. package/studio-dist/server/chunks/_server.ts-sv4pA808.js.map +0 -1
  174. package/studio-dist/server/chunks/_server.ts-tKMjUFUP.js.map +0 -1
  175. package/studio-dist/server/chunks/_server.ts-uUx7uT2Y.js.map +0 -1
  176. package/studio-dist/server/chunks/_server.ts-ujoDR2_g.js.map +0 -1
  177. package/studio-dist/server/chunks/abort-events-CDRAJSqb.js.map +0 -1
  178. package/studio-dist/server/chunks/adapters-BkMgPNUM.js.map +0 -1
  179. package/studio-dist/server/chunks/adapters2-CQ3PzoaK.js.map +0 -1
  180. package/studio-dist/server/chunks/api-mode2-3W-I1-XO.js.map +0 -1
  181. package/studio-dist/server/chunks/api2-CmNQzb0b.js.map +0 -1
  182. package/studio-dist/server/chunks/attention-consolidate-CidG1jfH.js.map +0 -1
  183. package/studio-dist/server/chunks/audit-log-BXVi9iyE.js.map +0 -1
  184. package/studio-dist/server/chunks/audit3-DMO_fUGp.js.map +0 -1
  185. package/studio-dist/server/chunks/auto-extract-B84La1Vs.js.map +0 -1
  186. package/studio-dist/server/chunks/brain-CXR7ZT7S.js.map +0 -1
  187. package/studio-dist/server/chunks/brain-consolidator-JGm6mzFf.js.map +0 -1
  188. package/studio-dist/server/chunks/brain-doctor-Dc2WqVbs.js.map +0 -1
  189. package/studio-dist/server/chunks/brain-embedding-Djw9ekXu.js.map +0 -1
  190. package/studio-dist/server/chunks/brain-lifecycle-BOOa876K.js.map +0 -1
  191. package/studio-dist/server/chunks/brain-maintenance-U6VvsvmK.js.map +0 -1
  192. package/studio-dist/server/chunks/brain-maintenance2-CwVSmfDT.js.map +0 -1
  193. package/studio-dist/server/chunks/brain-retrieval2-exR8mdgh.js.map +0 -1
  194. package/studio-dist/server/chunks/brain-search-CpSh-SNi.js.map +0 -1
  195. package/studio-dist/server/chunks/brain-search2-CwI2cXgg.js.map +0 -1
  196. package/studio-dist/server/chunks/brain-similarity-DI4yzm9e.js.map +0 -1
  197. package/studio-dist/server/chunks/brain-stdp2-BxSBIlSr.js.map +0 -1
  198. package/studio-dist/server/chunks/brain-writer-handlers-Dwu0QCAA.js.map +0 -1
  199. package/studio-dist/server/chunks/brain-writer-thread-6n7wI7Gy.js.map +0 -1
  200. package/studio-dist/server/chunks/branch-lock-Cq7zzmFK.js.map +0 -1
  201. package/studio-dist/server/chunks/branch-lock2-CmDc4CZW.js.map +0 -1
  202. package/studio-dist/server/chunks/cancelled-child-waiver-audit-DkesrN83.js.map +0 -1
  203. package/studio-dist/server/chunks/catalog-model-resolver-Bas9qnoP.js.map +0 -1
  204. package/studio-dist/server/chunks/catalog-model-resolver2-Cexk2TN0.js.map +0 -1
  205. package/studio-dist/server/chunks/catalog-resolver-CLot3XJO.js.map +0 -1
  206. package/studio-dist/server/chunks/catalog-resolver2-JmKb91kY.js.map +0 -1
  207. package/studio-dist/server/chunks/chunk-DDP5xfzh.js.map +0 -1
  208. package/studio-dist/server/chunks/cleo-home-CCfe6kAQ.js.map +0 -1
  209. package/studio-dist/server/chunks/cli-action-DQcaqcfn.js.map +0 -1
  210. package/studio-dist/server/chunks/client-2rpcRzcr.js.map +0 -1
  211. package/studio-dist/server/chunks/concrete-session2-bb_vxJ2N.js.map +0 -1
  212. package/studio-dist/server/chunks/config-DHj9CcFs.js.map +0 -1
  213. package/studio-dist/server/chunks/config2-F6PPIn7D.js.map +0 -1
  214. package/studio-dist/server/chunks/connections-BMGJVYcS.js.map +0 -1
  215. package/studio-dist/server/chunks/connections2-mi7mZqJM.js.map +0 -1
  216. package/studio-dist/server/chunks/credential-pool-vF6NdtT9.js.map +0 -1
  217. package/studio-dist/server/chunks/credentials-C7EJFf5O.js.map +0 -1
  218. package/studio-dist/server/chunks/credentials-store-CFygIuB2.js.map +0 -1
  219. package/studio-dist/server/chunks/cross-db-cleanup-1LWTUKPi.js.map +0 -1
  220. package/studio-dist/server/chunks/data-accessor-CWgVndbR.js.map +0 -1
  221. package/studio-dist/server/chunks/data-safety-central-DaFxK27G.js.map +0 -1
  222. package/studio-dist/server/chunks/decisions-CmVXV2-H.js.map +0 -1
  223. package/studio-dist/server/chunks/decisions2-XQsSYdxa.js.map +0 -1
  224. package/studio-dist/server/chunks/depends-waiver-audit-CUmlBYHx.js.map +0 -1
  225. package/studio-dist/server/chunks/dev-BNpEUZI3.js.map +0 -1
  226. package/studio-dist/server/chunks/dialectic-evaluator2-BOyyXhdI.js.map +0 -1
  227. package/studio-dist/server/chunks/dist-es2-DQy2Mjn_.js.map +0 -1
  228. package/studio-dist/server/chunks/dist-es3-CBygU4n5.js.map +0 -1
  229. package/studio-dist/server/chunks/dist-es4-CavbNu4B.js.map +0 -1
  230. package/studio-dist/server/chunks/dist-es5-Crpm8Wsl.js.map +0 -1
  231. package/studio-dist/server/chunks/dist-es6-CgePHzh4.js.map +0 -1
  232. package/studio-dist/server/chunks/dist-es7-k6c5GEd7.js.map +0 -1
  233. package/studio-dist/server/chunks/dist-es8-Bd9v0_pE.js.map +0 -1
  234. package/studio-dist/server/chunks/dist3-23bsJhRw.js.map +0 -1
  235. package/studio-dist/server/chunks/dist4-DmC1zSXi.js.map +0 -1
  236. package/studio-dist/server/chunks/dual-scope-db-DKnWu1KM.js.map +0 -1
  237. package/studio-dist/server/chunks/dual-scope-db2-Dht3luRw.js.map +0 -1
  238. package/studio-dist/server/chunks/duplicate-bypass-audit-BN5w1H2y.js.map +0 -1
  239. package/studio-dist/server/chunks/duplicate-detector-CaVFMKdE.js.map +0 -1
  240. package/studio-dist/server/chunks/edge-types-CgBvb0w1.js.map +0 -1
  241. package/studio-dist/server/chunks/embedding-local-xEnym8Ho.js.map +0 -1
  242. package/studio-dist/server/chunks/error.svelte-CpckcxW6.js.map +0 -1
  243. package/studio-dist/server/chunks/event-streams-Bi2p_fVo.js.map +0 -1
  244. package/studio-dist/server/chunks/execution-learning-BVCw7Plq.js.map +0 -1
  245. package/studio-dist/server/chunks/exodus-BBuuN6aA.js.map +0 -1
  246. package/studio-dist/server/chunks/explorer-loader-BN_mkt3_.js.map +0 -1
  247. package/studio-dist/server/chunks/externalDataInterceptor-C3C4cObe.js.map +0 -1
  248. package/studio-dist/server/chunks/extraction-gate-DDNBq7gu.js.map +0 -1
  249. package/studio-dist/server/chunks/extraction-gate2-D77EZBQ6.js.map +0 -1
  250. package/studio-dist/server/chunks/getSSOTokenFromFile-yZAJxDci.js.map +0 -1
  251. package/studio-dist/server/chunks/governor2-CtfV3wfX.js.map +0 -1
  252. package/studio-dist/server/chunks/graph-auto-populate-Dmsr9ZJM.js.map +0 -1
  253. package/studio-dist/server/chunks/graph-auto-populate2-Cz0qeebM.js.map +0 -1
  254. package/studio-dist/server/chunks/graph-memory-bridge-CY8ft_d7.js.map +0 -1
  255. package/studio-dist/server/chunks/graph-memory-bridge2-Cd0XZwqc.js.map +0 -1
  256. package/studio-dist/server/chunks/handler-helpers-AANBGA_p.js.map +0 -1
  257. package/studio-dist/server/chunks/hash-Cm6yMET4.js.map +0 -1
  258. package/studio-dist/server/chunks/health-monitor-FepUZN1m.js.map +0 -1
  259. package/studio-dist/server/chunks/hooks.server-DBsyphiX.js.map +0 -1
  260. package/studio-dist/server/chunks/http-CRTZe306.js.map +0 -1
  261. package/studio-dist/server/chunks/identity-DRpurt56.js.map +0 -1
  262. package/studio-dist/server/chunks/identity2-DeAB5RXE.js.map +0 -1
  263. package/studio-dist/server/chunks/index-61916rmV.js.map +0 -1
  264. package/studio-dist/server/chunks/index-DAgVDouG.js.map +0 -1
  265. package/studio-dist/server/chunks/index-Dtt_h58T.js.map +0 -1
  266. package/studio-dist/server/chunks/index-server-DocJvixA.js.map +0 -1
  267. package/studio-dist/server/chunks/indexes-DZ52grq6.js.map +0 -1
  268. package/studio-dist/server/chunks/internal-xyE_opYp.js.map +0 -1
  269. package/studio-dist/server/chunks/json-Bfixam3g.js.map +0 -1
  270. package/studio-dist/server/chunks/lane-transition-lM2ngbbc.js.map +0 -1
  271. package/studio-dist/server/chunks/learnings-D6Y3YGMU.js.map +0 -1
  272. package/studio-dist/server/chunks/learnings2-MwBdR9vb.js.map +0 -1
  273. package/studio-dist/server/chunks/lifecycle-ops2-V2CR5-7X.js.map +0 -1
  274. package/studio-dist/server/chunks/list-BhObczvn.js.map +0 -1
  275. package/studio-dist/server/chunks/living-brain2-j0B_Ir8j.js.map +0 -1
  276. package/studio-dist/server/chunks/llm-backend-resolver-D4ANvUPL.js.map +0 -1
  277. package/studio-dist/server/chunks/llm-extraction-DVCu4heR.js.map +0 -1
  278. package/studio-dist/server/chunks/loadSharedConfigFiles-umvW7kuz.js.map +0 -1
  279. package/studio-dist/server/chunks/loadSso-iidd5iKx.js.map +0 -1
  280. package/studio-dist/server/chunks/local-model-fit-B0TxifnX.js.map +0 -1
  281. package/studio-dist/server/chunks/local-model-fit2-BMqo6GJm.js.map +0 -1
  282. package/studio-dist/server/chunks/lock-CA7d6lj7.js.map +0 -1
  283. package/studio-dist/server/chunks/logger-DQIoyZbq.js.map +0 -1
  284. package/studio-dist/server/chunks/memory-BUbicBbE.js.map +0 -1
  285. package/studio-dist/server/chunks/memory-accessor-i3P-RHSg.js.map +0 -1
  286. package/studio-dist/server/chunks/memory-accessor2-B981tHDR.js.map +0 -1
  287. package/studio-dist/server/chunks/memory-bridge-BOlEWg9w.js.map +0 -1
  288. package/studio-dist/server/chunks/memory-sqlite2-B7dq8doO.js.map +0 -1
  289. package/studio-dist/server/chunks/memory2-Cgc_4D5q.js.map +0 -1
  290. package/studio-dist/server/chunks/model-runner2-B71xjp4y.js.map +0 -1
  291. package/studio-dist/server/chunks/mvi-helpers-BNsJ8ZpQ.js.map +0 -1
  292. package/studio-dist/server/chunks/nexus-adapter-9EL_VlGI.js.map +0 -1
  293. package/studio-dist/server/chunks/nexus-plasticity-BTfU8cW_.js.map +0 -1
  294. package/studio-dist/server/chunks/nexus-risk-audit-p379-TU5.js.map +0 -1
  295. package/studio-dist/server/chunks/nexus-schema-zeygY8OD.js.map +0 -1
  296. package/studio-dist/server/chunks/nexus-schema2-DP0Qd7CA.js.map +0 -1
  297. package/studio-dist/server/chunks/nexus-sqlite-BVNIpwc7.js.map +0 -1
  298. package/studio-dist/server/chunks/nexus-sqlite2-BBfY2xnY.js.map +0 -1
  299. package/studio-dist/server/chunks/no-face-up-DcejJLy-.js.map +0 -1
  300. package/studio-dist/server/chunks/node-http-handler-CJI8kn7X.js.map +0 -1
  301. package/studio-dist/server/chunks/observe-Bo9veHGe.js.map +0 -1
  302. package/studio-dist/server/chunks/observe2-wzO0MaMY.js.map +0 -1
  303. package/studio-dist/server/chunks/observer-reflector-BwNOuq1d.js.map +0 -1
  304. package/studio-dist/server/chunks/observer-reflector2-ggtC1hmk.js.map +0 -1
  305. package/studio-dist/server/chunks/on-open-Wpcw7DV4.js.map +0 -1
  306. package/studio-dist/server/chunks/open-cleo-db--8sYNaYY.js.map +0 -1
  307. package/studio-dist/server/chunks/parseKnownFiles-Dg0pMFcT.js.map +0 -1
  308. package/studio-dist/server/chunks/parseUrl-qgGfl-Vh.js.map +0 -1
  309. package/studio-dist/server/chunks/paths-CV7S5-Zm.js.map +0 -1
  310. package/studio-dist/server/chunks/patterns-lh5kn13I.js.map +0 -1
  311. package/studio-dist/server/chunks/patterns2-CzIcT-ai.js.map +0 -1
  312. package/studio-dist/server/chunks/pipeline-stage-IB_pOft-.js.map +0 -1
  313. package/studio-dist/server/chunks/prediction-D1lSGJ4c.js.map +0 -1
  314. package/studio-dist/server/chunks/premature-close-audit-VG09uAco.js.map +0 -1
  315. package/studio-dist/server/chunks/project-context-BjiqfEBi.js.map +0 -1
  316. package/studio-dist/server/chunks/provider-registry2-Cu7rAF0R.js.map +0 -1
  317. package/studio-dist/server/chunks/quality-feedback-CuCGEI6S.js.map +0 -1
  318. package/studio-dist/server/chunks/quality-scoring-CCPuRQmJ.js.map +0 -1
  319. package/studio-dist/server/chunks/query-ops-DCrjbZb9.js.map +0 -1
  320. package/studio-dist/server/chunks/query-promise-BkPmGPJy.js.map +0 -1
  321. package/studio-dist/server/chunks/readFile-CxwXhymG.js.map +0 -1
  322. package/studio-dist/server/chunks/registry-CL2gN1zd.js.map +0 -1
  323. package/studio-dist/server/chunks/registry2-DoPYJnUW.js.map +0 -1
  324. package/studio-dist/server/chunks/registry3-BajEb-ll.js.map +0 -1
  325. package/studio-dist/server/chunks/registry4-DCqffZkT.js.map +0 -1
  326. package/studio-dist/server/chunks/retry-B3oEKYpp.js.map +0 -1
  327. package/studio-dist/server/chunks/role-executor-CC8BU54L.js.map +0 -1
  328. package/studio-dist/server/chunks/role-resolver-D9QaDT0e.js.map +0 -1
  329. package/studio-dist/server/chunks/role-resolver2-nkhzS1oy.js.map +0 -1
  330. package/studio-dist/server/chunks/rollup-CiefjN_Y.js.map +0 -1
  331. package/studio-dist/server/chunks/safety-data-accessor-CniDmGJO.js.map +0 -1
  332. package/studio-dist/server/chunks/service-connections-accessor-yBCdcgU-.js.map +0 -1
  333. package/studio-dist/server/chunks/session-factory-vbengc42.js.map +0 -1
  334. package/studio-dist/server/chunks/session-grade-BF4ZZtN_.js.map +0 -1
  335. package/studio-dist/server/chunks/session-journal-Bvey70Ur.js.map +0 -1
  336. package/studio-dist/server/chunks/session-narrative-BirZINSU.js.map +0 -1
  337. package/studio-dist/server/chunks/session-store--N_xHxUH.js.map +0 -1
  338. package/studio-dist/server/chunks/session-store2-DAM-eVTH.js.map +0 -1
  339. package/studio-dist/server/chunks/sessions-33DD4hkt.js.map +0 -1
  340. package/studio-dist/server/chunks/sessions2-BHswKRDP.js.map +0 -1
  341. package/studio-dist/server/chunks/sigil-B-RznFXz.js.map +0 -1
  342. package/studio-dist/server/chunks/sigil2-jRMG5DuR.js.map +0 -1
  343. package/studio-dist/server/chunks/signin-BAsW3mM8.js.map +0 -1
  344. package/studio-dist/server/chunks/sleep-consolidation-BnSwXrvq.js.map +0 -1
  345. package/studio-dist/server/chunks/spawn-cli-wI1lBJhm.js.map +0 -1
  346. package/studio-dist/server/chunks/specialists-B_ZbpQlK.js.map +0 -1
  347. package/studio-dist/server/chunks/sqlite-Bm5LzbPs.js.map +0 -1
  348. package/studio-dist/server/chunks/sqlite-backup-CFG1-b2e.js.map +0 -1
  349. package/studio-dist/server/chunks/sqlite-data-accessor-DD_RFX6r.js.map +0 -1
  350. package/studio-dist/server/chunks/sqlite-data-accessor2-CRmgNBnq.js.map +0 -1
  351. package/studio-dist/server/chunks/sqlite-native-BwlIqtbs.js.map +0 -1
  352. package/studio-dist/server/chunks/sqlite2-CUPut2fh.js.map +0 -1
  353. package/studio-dist/server/chunks/src-BUqGet2c.js.map +0 -1
  354. package/studio-dist/server/chunks/src2-DK8DKufK.js.map +0 -1
  355. package/studio-dist/server/chunks/src3-BJjf7XRG.js.map +0 -1
  356. package/studio-dist/server/chunks/src4-DNleK_t_.js.map +0 -1
  357. package/studio-dist/server/chunks/sso-oidc-eUvwseuL.js.map +0 -1
  358. package/studio-dist/server/chunks/storage-B9UA3BHR.js.map +0 -1
  359. package/studio-dist/server/chunks/stores-BcV2X8z1.js.map +0 -1
  360. package/studio-dist/server/chunks/sts-g7LDMLEd.js.map +0 -1
  361. package/studio-dist/server/chunks/surprisal-CwTfWQi8.js.map +0 -1
  362. package/studio-dist/server/chunks/surprisal-tree-7dfHsuw1.js.map +0 -1
  363. package/studio-dist/server/chunks/system-resolver2-Bzhue_zQ.js.map +0 -1
  364. package/studio-dist/server/chunks/tasks-SHX7UPGY.js.map +0 -1
  365. package/studio-dist/server/chunks/tasks-schema2-CTMoQKQy.js.map +0 -1
  366. package/studio-dist/server/chunks/tasks2-Bf9VHrv-.js.map +0 -1
  367. package/studio-dist/server/chunks/temporal-supersession-DP4GPG_B.js.map +0 -1
  368. package/studio-dist/server/chunks/token-cAhAD9f9.js.map +0 -1
  369. package/studio-dist/server/chunks/token-util-D6drEz8_.js.map +0 -1
  370. package/studio-dist/server/chunks/token-util2-8UPSGvbb.js.map +0 -1
  371. package/studio-dist/server/chunks/transcript-scanner-kJWhWmlg.js.map +0 -1
  372. package/studio-dist/server/chunks/transformers.node-_xbxmK5p.js.map +0 -1
  373. package/studio-dist/server/chunks/typed-query-l1D_QElt.js.map +0 -1
  374. package/studio-dist/server/chunks/ui-DR8zOSpC.js.map +0 -1
  375. package/studio-dist/server/chunks/unique-constraint-BZrrwgwc.js.map +0 -1
  376. package/studio-dist/server/chunks/update-B2YVBZG0.js.map +0 -1
  377. package/studio-dist/server/chunks/user-profile-B61ZhVmC.js.map +0 -1
  378. package/studio-dist/server/chunks/utils-BPSZyajG.js.map +0 -1
  379. package/studio-dist/server/chunks/validation-rules-CE27rtoF.js.map +0 -1
  380. package/studio-dist/server/chunks/zod-DsAeKNLm.js.map +0 -1
  381. package/studio-dist/server/index.js.map +0 -1
  382. package/studio-dist/server/manifest.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"audit3-DMO_fUGp.js","sources":["../../../.svelte-kit/adapter-node/chunks/audit3.js"],"sourcesContent":["import { t as getLogger } from \"./logger.js\";\nimport { u as getProjectRoot } from \"./paths.js\";\nimport \"node:fs\";\nimport \"node:path\";\n//#region ../core/dist/audit.js\nvar log = getLogger(\"audit\");\n/**\n* Query audit entries from SQLite audit_log table.\n* Used by session-grade.ts for behavioral analysis.\n*\n* Returns entries ordered chronologically (ASC) to preserve\n* behavioral sequence for grading analysis.\n*/\nasync function queryAudit(options) {\n\ttry {\n\t\tconst { getDb } = await import(\"./sqlite2.js\");\n\t\tconst { auditLog } = await import(\"./tasks-schema2.js\");\n\t\tconst { and, eq, gte, or } = await import(\"drizzle-orm\");\n\t\tconst db = await getDb(getProjectRoot());\n\t\tconst conditions = [];\n\t\tif (options?.sessionId) conditions.push(eq(auditLog.sessionId, options.sessionId));\n\t\tif (options?.domain) conditions.push(eq(auditLog.domain, options.domain));\n\t\tif (options?.operation) conditions.push(or(eq(auditLog.operation, options.operation), eq(auditLog.action, options.operation)));\n\t\tif (options?.taskId) conditions.push(eq(auditLog.taskId, options.taskId));\n\t\tif (options?.since) conditions.push(gte(auditLog.timestamp, options.since));\n\t\tconst limit = options?.limit ?? 1e3;\n\t\treturn (await db.select().from(auditLog).where(conditions.length > 0 ? and(...conditions) : void 0).orderBy(auditLog.timestamp).limit(limit)).map((row) => ({\n\t\t\ttimestamp: row.timestamp,\n\t\t\tsessionId: row.sessionId,\n\t\t\tdomain: row.domain ?? \"unknown\",\n\t\t\toperation: row.operation ?? row.action,\n\t\t\tparams: row.detailsJson ? JSON.parse(row.detailsJson) : {},\n\t\t\tresult: {\n\t\t\t\tsuccess: row.success === 1,\n\t\t\t\texitCode: row.success === 1 ? 0 : 1,\n\t\t\t\tduration: row.durationMs ?? 0\n\t\t\t},\n\t\t\tmetadata: {\n\t\t\t\ttaskId: row.taskId !== \"system\" && row.taskId !== \"unknown\" ? row.taskId : void 0,\n\t\t\t\tsource: row.source ?? \"cli\",\n\t\t\t\tgateway: row.gateway\n\t\t\t},\n\t\t\terror: row.errorMessage ?? void 0\n\t\t}));\n\t} catch (err) {\n\t\tlog.warn({ err }, \"Failed to query audit entries from SQLite\");\n\t\treturn [];\n\t}\n}\n//#endregion\nexport { queryAudit as t };\n"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"auto-extract-B84La1Vs.js","sources":["../../../.svelte-kit/adapter-node/chunks/auto-extract2.js"],"sourcesContent":["//#region ../core/dist/memory/auto-extract.js\n/**\n* Extract durable knowledge from a provider session transcript and store it\n* in brain.db via the LLM extraction gate.\n*\n* Replaces the legacy `ACTION_PATTERNS` keyword-regex extractor. The LLM\n* returns typed, structured memories with justification and importance\n* scoring; only high-value items are persisted.\n*\n* Behaviour:\n* - Returns silently when transcript is empty/non-string.\n* - Returns silently when `brain.llmExtraction.enabled` is false OR when\n* `ANTHROPIC_API_KEY` is not set (best-effort degradation).\n* - Never throws — all errors are swallowed so session end cannot be\n* blocked by a failed extraction.\n*\n* @param projectRoot - Absolute path to project root.\n* @param sessionId - The CLEO session ID being processed.\n* @param transcript - Plain-text provider transcript (user/assistant turns).\n*/\nasync function extractFromTranscript(projectRoot, sessionId, transcript) {\n\ttry {\n\t\tif (typeof transcript !== \"string\" || transcript.trim().length === 0) return;\n\t\tconst { extractFromTranscript: runLlmExtraction } = await import(\"./llm-extraction.js\");\n\t\tawait runLlmExtraction({\n\t\t\tprojectRoot,\n\t\t\tsessionId,\n\t\t\ttranscript\n\t\t});\n\t} catch {}\n}\n//#endregion\nexport { extractFromTranscript as t };\n"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,qBAAqB,CAAC,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE;AACzE,CAAC,IAAI;AACL,EAAE,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;AACxE,EAAE,MAAM,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,GAAG,MAAM,OAAO,8BAAqB,CAAC;AACzF,EAAE,MAAM,gBAAgB,CAAC;AACzB,GAAG,WAAW;AACd,GAAG,SAAS;AACZ,GAAG;AACH,GAAG,CAAC;AACJ,CAAC,CAAC,CAAC,MAAM,CAAC;AACV;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"brain-CXR7ZT7S.js","sources":["../../../.svelte-kit/adapter-node/chunks/brain.js"],"sourcesContent":["import \"./src.js\";\n//#region src/lib/server/brain/cache.ts\n/** Maximum number of cache entries before oldest is evicted. */\nvar MAX_ENTRIES = 5;\n/** Time-to-live in milliseconds. */\nvar TTL_MS = 3e4;\n/** All five substrate names in canonical sort order. */\nvar ALL_SUBSTRATES_SORTED = [\n\t\"agent-registry\",\n\t\"brain\",\n\t\"conduit\",\n\t\"nexus\",\n\t\"tasks\"\n];\nvar _store = /* @__PURE__ */ new Map();\nvar _insertionCounter = 0;\nvar _metrics = {\n\thits: 0,\n\tmisses: 0,\n\tevictions: 0\n};\n/**\n* Derives a stable string cache key from the provided key parts.\n*\n* Substrate order is normalised (sorted) so callers passing substrates in\n* different orders still hit the same cache slot.\n*\n* @param parts - Key components.\n* @returns Stable string key.\n*/\nfunction buildCacheKey(parts) {\n\tconst subs = !parts.substrates || parts.substrates.length === 0 ? ALL_SUBSTRATES_SORTED : [...parts.substrates].sort();\n\treturn `${parts.projectId}|${subs.join(\",\")}|${parts.limit}`;\n}\n/**\n* Attempts to retrieve a {@link BrainGraph} from the cache.\n*\n* Returns `null` on a cache miss or when the stored entry has expired.\n* Expired entries are lazily removed on access.\n*\n* @param key - Serialised cache key from {@link buildCacheKey}.\n* @returns Cached graph or `null`.\n*/\nfunction getCachedGraph(key) {\n\tconst entry = _store.get(key);\n\tif (!entry) {\n\t\t_metrics.misses++;\n\t\treturn null;\n\t}\n\tif (Date.now() > entry.expiresAt) {\n\t\t_store.delete(key);\n\t\t_metrics.misses++;\n\t\treturn null;\n\t}\n\t_metrics.hits++;\n\treturn entry.graph;\n}\n/**\n* Stores a {@link BrainGraph} in the cache under the given key.\n*\n* When the store has reached {@link MAX_ENTRIES}, the entry with the lowest\n* `insertedAt` counter (i.e. the oldest insert) is evicted first.\n*\n* @param key - Serialised cache key from {@link buildCacheKey}.\n* @param graph - Graph payload to store.\n*/\nfunction setCachedGraph(key, graph) {\n\tif (!_store.has(key) && _store.size >= MAX_ENTRIES) {\n\t\tlet oldestKey = null;\n\t\tlet oldestInsert = Number.POSITIVE_INFINITY;\n\t\tfor (const [k, v] of _store) if (v.insertedAt < oldestInsert) {\n\t\t\toldestInsert = v.insertedAt;\n\t\t\toldestKey = k;\n\t\t}\n\t\tif (oldestKey !== null) {\n\t\t\t_store.delete(oldestKey);\n\t\t\t_metrics.evictions++;\n\t\t}\n\t}\n\t_store.set(key, {\n\t\tgraph,\n\t\texpiresAt: Date.now() + TTL_MS,\n\t\tinsertedAt: _insertionCounter++\n\t});\n}\n/**\n* Returns a snapshot of hit/miss/eviction counters.\n*\n* The `size` field reflects only non-expired entries at the moment of the call\n* (expired entries that have not been lazily removed are excluded from the count\n* for accuracy).\n*\n* @returns {@link CacheMetrics} snapshot.\n*/\nfunction getBrainCacheMetrics() {\n\tconst now = Date.now();\n\tlet liveSize = 0;\n\tfor (const entry of _store.values()) if (now <= entry.expiresAt) liveSize++;\n\treturn {\n\t\thits: _metrics.hits,\n\t\tmisses: _metrics.misses,\n\t\tevictions: _metrics.evictions,\n\t\tsize: liveSize\n\t};\n}\n//#endregion\n//#region src/lib/server/brain/metrics.ts\n/**\n* Server-side performance metrics for the Brain load path.\n*\n* Captures timing samples for each tier (0, 1, 2) of the progressive\n* disclosure strategy, plus a rolling window of the last N durations.\n* Metrics are intentionally in-process and non-persistent — they reset\n* on server restart and are only useful during a running dev/prod session.\n*\n* Exposed at `/api/health` via {@link getBrainLoadMetrics} so the operator\n* can verify p95 numbers without attaching a profiler.\n*\n* @module\n* @task T990\n*/\n/** Maximum number of timing samples retained per tier. */\nvar WINDOW_SIZE = 50;\nvar _tiers = {\n\t0: {\n\t\tsamples: [],\n\t\ttotalRequests: 0\n\t},\n\t1: {\n\t\tsamples: [],\n\t\ttotalRequests: 0\n\t},\n\t2: {\n\t\tsamples: [],\n\t\ttotalRequests: 0\n\t}\n};\n/**\n* Records a load duration for the given tier.\n*\n* Rolls off the oldest sample when the window is full.\n* Logs to `console.info` so durations appear in the dev server output\n* where the operator can immediately verify performance budgets.\n*\n* @param tier - Which tier completed.\n* @param durationMs - Elapsed time in milliseconds.\n*/\nfunction recordBrainLoadDuration(tier, durationMs) {\n\tconst tm = _tiers[tier];\n\ttm.totalRequests++;\n\tif (tm.samples.length >= WINDOW_SIZE) tm.samples.shift();\n\ttm.samples.push({\n\t\tdurationMs,\n\t\trecordedAt: Date.now()\n\t});\n\tconsole.info(`[brain/perf] tier=${tier} duration=${durationMs.toFixed(1)}ms`);\n}\n//#endregion\nexport { setCachedGraph as a, getCachedGraph as i, buildCacheKey as n, getBrainCacheMetrics as r, recordBrainLoadDuration as t };\n"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"brain-consolidator-JGm6mzFf.js","sources":["../../../.svelte-kit/adapter-node/chunks/brain-consolidator2.js"],"sourcesContent":["import { i as getBrainDb, o as getBrainNativeDb } from \"./memory-sqlite.js\";\nimport { t as typedAll } from \"./typed-query.js\";\n//#region ../core/dist/memory/brain-consolidator.js\n/**\n* Brain Consolidator — contradiction detection for the CLEO BRAIN memory system.\n*\n* Implements heuristic contradiction detection based on keyword polarity flip.\n* No LLM required — uses negation markers to identify entries that assert\n* opposing claims about the same subject.\n*\n* When a contradiction is detected:\n* 1. A 'contradicts' edge is created in brain_page_edges (both directions).\n* 2. The lower-quality entry's qualityScore is reduced by 0.15.\n*\n* All operations are BEST-EFFORT — failures never crash the consolidator.\n*\n* @task T549 Wave 3-C\n* @epic T549\n*/\n/** Minimum number of shared keywords to consider two entries related. */\nvar MIN_SHARED_KEYWORDS = 3;\n/**\n* Negation markers that, when present in one entry but not the other,\n* indicate a potential contradiction.\n*/\nvar NEGATION_MARKERS = [\n\t\"not\",\n\t\"never\",\n\t\"deprecated\",\n\t\"removed\",\n\t\"replaced\",\n\t\"avoid\",\n\t\"no longer\",\n\t\"do not\",\n\t\"don't\",\n\t\"disabled\",\n\t\"deleted\",\n\t\"dropped\",\n\t\"broken\",\n\t\"invalid\",\n\t\"obsolete\",\n\t\"reverted\",\n\t\"undone\",\n\t\"superseded\"\n];\n/** Stop words excluded from keyword extraction (matches brain-lifecycle stop words). */\nvar STOP_WORDS = new Set([\n\t\"the\",\n\t\"a\",\n\t\"an\",\n\t\"is\",\n\t\"are\",\n\t\"was\",\n\t\"were\",\n\t\"be\",\n\t\"been\",\n\t\"being\",\n\t\"have\",\n\t\"has\",\n\t\"had\",\n\t\"do\",\n\t\"does\",\n\t\"did\",\n\t\"will\",\n\t\"would\",\n\t\"could\",\n\t\"should\",\n\t\"may\",\n\t\"might\",\n\t\"shall\",\n\t\"can\",\n\t\"to\",\n\t\"of\",\n\t\"in\",\n\t\"for\",\n\t\"on\",\n\t\"with\",\n\t\"at\",\n\t\"by\",\n\t\"from\",\n\t\"as\",\n\t\"into\",\n\t\"through\",\n\t\"and\",\n\t\"but\",\n\t\"or\",\n\t\"nor\",\n\t\"so\",\n\t\"yet\",\n\t\"this\",\n\t\"that\",\n\t\"these\",\n\t\"those\",\n\t\"it\",\n\t\"its\",\n\t\"not\",\n\t\"no\"\n]);\n/**\n* Extract significant keywords from text for overlap comparison.\n* Filters stop words and tokens shorter than 4 characters.\n*/\nfunction extractKeywords(text) {\n\tconst words = text.toLowerCase().replace(/[^a-z0-9\\s\\-_]/g, \" \").split(/\\s+/);\n\tconst keywords = /* @__PURE__ */ new Set();\n\tfor (const w of words) if (w.length >= 4 && !STOP_WORDS.has(w)) keywords.add(w);\n\treturn keywords;\n}\n/**\n* Find negation markers present in the text.\n*/\nfunction findNegationMarkers(text) {\n\tconst lower = text.toLowerCase();\n\treturn NEGATION_MARKERS.filter((marker) => lower.includes(marker));\n}\n/**\n* Return the intersection of two keyword sets.\n*/\nfunction keywordIntersection(a, b) {\n\tconst result = [];\n\tfor (const w of a) if (b.has(w)) result.push(w);\n\treturn result;\n}\n/**\n* Detect contradiction pairs across all verified memory entries.\n*\n* For each verified entry:\n* 1. Find entries with >= MIN_SHARED_KEYWORDS shared keywords.\n* 2. Check for negation markers in one but not the other.\n* 3. If contradiction detected: create 'contradicts' graph edges.\n* 4. Lower quality score of the contradicted (lower quality) entry by 0.15.\n*\n* Only considers entries where invalid_at IS NULL (currently valid).\n* Short-circuits after 50 contradiction pairs to limit consolidation cost.\n*\n* @param projectRoot - Project root directory for brain.db resolution\n* @returns List of contradiction pairs found\n*/\nasync function detectContradictions(projectRoot) {\n\tawait getBrainDb(projectRoot);\n\tconst nativeDb = getBrainNativeDb(projectRoot);\n\tif (!nativeDb) return [];\n\tconst results = [];\n\tconst now = (/* @__PURE__ */ new Date()).toISOString().replace(\"T\", \" \").slice(0, 19);\n\tfor (const { table, textCol } of [\n\t\t{\n\t\t\ttable: \"brain_observations\",\n\t\t\ttextCol: \"narrative\"\n\t\t},\n\t\t{\n\t\t\ttable: \"brain_learnings\",\n\t\t\ttextCol: \"insight\"\n\t\t},\n\t\t{\n\t\t\ttable: \"brain_patterns\",\n\t\t\ttextCol: \"pattern\"\n\t\t},\n\t\t{\n\t\t\ttable: \"brain_decisions\",\n\t\t\ttextCol: \"decision\"\n\t\t}\n\t]) {\n\t\tif (results.length >= 50) break;\n\t\tlet entries = [];\n\t\ttry {\n\t\t\tentries = typedAll(nativeDb.prepare(`\n SELECT id, COALESCE(${textCol}, '') AS text, quality_score\n FROM ${table}\n WHERE invalid_at IS NULL\n AND verified = 1\n LIMIT 200\n `));\n\t\t} catch {\n\t\t\tcontinue;\n\t\t}\n\t\tif (entries.length < 2) continue;\n\t\tconst keywordMap = /* @__PURE__ */ new Map();\n\t\tconst negationMap = /* @__PURE__ */ new Map();\n\t\tfor (const entry of entries) {\n\t\t\tkeywordMap.set(entry.id, extractKeywords(entry.text));\n\t\t\tnegationMap.set(entry.id, findNegationMarkers(entry.text));\n\t\t}\n\t\tfor (let i = 0; i < entries.length; i++) {\n\t\t\tif (results.length >= 50) break;\n\t\t\tconst entryA = entries[i];\n\t\t\tconst keywordsA = keywordMap.get(entryA.id);\n\t\t\tconst negationsA = negationMap.get(entryA.id);\n\t\t\tfor (let j = i + 1; j < entries.length; j++) {\n\t\t\t\tif (results.length >= 50) break;\n\t\t\t\tconst entryB = entries[j];\n\t\t\t\tconst keywordsB = keywordMap.get(entryB.id);\n\t\t\t\tconst negationsB = negationMap.get(entryB.id);\n\t\t\t\tconst shared = keywordIntersection(keywordsA, keywordsB);\n\t\t\t\tif (shared.length < MIN_SHARED_KEYWORDS) continue;\n\t\t\t\tconst negationsOnlyInA = negationsA.filter((m) => !negationsB.includes(m));\n\t\t\t\tconst negationsOnlyInB = negationsB.filter((m) => !negationsA.includes(m));\n\t\t\t\tif (!(negationsOnlyInA.length > 0 || negationsOnlyInB.length > 0)) continue;\n\t\t\t\tconst negMarkers = [...negationsOnlyInA, ...negationsOnlyInB];\n\t\t\t\tconst contradictedId = (entryA.quality_score ?? .5) <= (entryB.quality_score ?? .5) ? entryA.id : entryB.id;\n\t\t\t\tcontradictedId === entryA.id ? entryB.id : entryA.id;\n\t\t\t\tresults.push({\n\t\t\t\t\tentryAId: entryA.id,\n\t\t\t\t\tentryBId: entryB.id,\n\t\t\t\t\tcontradictedId,\n\t\t\t\t\ttable,\n\t\t\t\t\tsharedKeywords: shared.slice(0, 10),\n\t\t\t\t\tnegationMarkers: negMarkers.slice(0, 5)\n\t\t\t\t});\n\t\t\t\tconst nodeA = buildNodeId(table, entryA.id);\n\t\t\t\tconst nodeB = buildNodeId(table, entryB.id);\n\t\t\t\ttry {\n\t\t\t\t\tnativeDb.prepare(`\n INSERT OR IGNORE INTO brain_page_edges\n (from_id, to_id, edge_type, weight, provenance, created_at)\n VALUES (?, ?, 'contradicts', 0.8, 'consolidation:contradiction', ?)\n `).run(nodeA, nodeB, now);\n\t\t\t\t\tnativeDb.prepare(`\n INSERT OR IGNORE INTO brain_page_edges\n (from_id, to_id, edge_type, weight, provenance, created_at)\n VALUES (?, ?, 'contradicts', 0.8, 'consolidation:contradiction', ?)\n `).run(nodeB, nodeA, now);\n\t\t\t\t} catch {}\n\t\t\t\ttry {\n\t\t\t\t\tnativeDb.prepare(`\n UPDATE ${table}\n SET quality_score = MAX(0.0, COALESCE(quality_score, 0.5) - 0.15),\n updated_at = ?\n WHERE id = ?\n `).run(now, contradictedId);\n\t\t\t\t} catch {}\n\t\t\t}\n\t\t}\n\t}\n\treturn results;\n}\n/**\n* Build the graph node ID for a given table + entry ID combination.\n* Mirrors the convention used in graph-auto-populate.ts.\n*/\nfunction buildNodeId(table, entryId) {\n\treturn `${{\n\t\tbrain_observations: \"observation\",\n\t\tbrain_learnings: \"learning\",\n\t\tbrain_patterns: \"pattern\",\n\t\tbrain_decisions: \"decision\"\n\t}[table] ?? \"entry\"}:${entryId}`;\n}\n/**\n* Normalize a pattern title for dedup comparison.\n* Lowercases, collapses whitespace, strips punctuation.\n*/\nfunction normalizePatternTitle(title) {\n\treturn title.toLowerCase().replace(/[^\\w\\s]/g, \" \").replace(/\\s+/g, \" \").trim();\n}\n/**\n* Collapse near-duplicate brain_patterns rows in a single consolidation pass.\n*\n* Two rows are considered near-duplicates when:\n* - `normalize(pattern)` is identical\n* - `peer_id` is the same\n* - `created_at` values fall within a configurable time window (default: 3600s / 1hr)\n*\n* The oldest row (earliest `created_at`) is kept. All others are deleted after\n* their `occurrence_count` is merged into the survivor and `last_seen_at` is\n* updated to the most-recent duplicate's timestamp.\n*\n* All operations run inside a single SQLite transaction — either everything\n* succeeds or nothing changes.\n*\n* @param projectRoot - Project root directory for brain.db resolution\n* @param windowSeconds - Max seconds between rows to consider them duplicates (default 3600)\n* @returns Number of rows removed\n*\n* @task T1896\n*/\nasync function dedupePatterns(projectRoot, windowSeconds = 3600) {\n\tawait getBrainDb(projectRoot);\n\tconst nativeDb = getBrainNativeDb(projectRoot);\n\tif (!nativeDb) return 0;\n\tconst rows = typedAll(nativeDb.prepare(\"SELECT id, pattern, peer_id, extracted_at, COALESCE(occurrence_count, 1) AS occurrence_count FROM brain_patterns WHERE invalid_at IS NULL ORDER BY peer_id, pattern, extracted_at ASC\"));\n\tconst groups = /* @__PURE__ */ new Map();\n\tfor (const row of rows) {\n\t\tconst key = `${row.peer_id}::${normalizePatternTitle(row.pattern)}`;\n\t\tconst group = groups.get(key) ?? [];\n\t\tgroup.push(row);\n\t\tgroups.set(key, group);\n\t}\n\tconst dedupGroups = [];\n\tfor (const group of groups.values()) {\n\t\tif (group.length < 2) continue;\n\t\tconst windows = [];\n\t\tlet current = [group[0]];\n\t\tfor (let i = 1; i < group.length; i++) {\n\t\t\tconst prev = current[current.length - 1];\n\t\t\tconst prevMs = new Date(prev.extracted_at).getTime();\n\t\t\tconst curMs = new Date(group[i].extracted_at).getTime();\n\t\t\tif (Math.abs(curMs - prevMs) / 1e3 <= windowSeconds) current.push(group[i]);\n\t\t\telse {\n\t\t\t\tif (current.length >= 2) windows.push(current);\n\t\t\t\tcurrent = [group[i]];\n\t\t\t}\n\t\t}\n\t\tif (current.length >= 2) windows.push(current);\n\t\tfor (const window of windows) {\n\t\t\tconst keeper = window[0];\n\t\t\tconst duplicates = window.slice(1);\n\t\t\tdedupGroups.push({\n\t\t\t\tkeptId: keeper.id,\n\t\t\t\tremovedIds: duplicates.map((r) => r.id),\n\t\t\t\tnormalizedTitle: normalizePatternTitle(keeper.pattern)\n\t\t\t});\n\t\t}\n\t}\n\tif (dedupGroups.length === 0) return 0;\n\tlet totalRemoved = 0;\n\tnativeDb.prepare(\"BEGIN\").run();\n\ttry {\n\t\tfor (const dg of dedupGroups) {\n\t\t\tconst dupRows = typedAll(nativeDb.prepare(`SELECT id, pattern, peer_id, extracted_at, COALESCE(occurrence_count, 1) AS occurrence_count FROM brain_patterns WHERE id IN (${dg.removedIds.map(() => \"?\").join(\",\")})`), ...dg.removedIds);\n\t\t\tconst summedCount = dupRows.reduce((acc, r) => acc + r.occurrence_count, 0);\n\t\t\tconst latestSeenAt = dupRows.reduce((latest, r) => r.extracted_at > latest ? r.extracted_at : latest, dupRows[0]?.extracted_at ?? \"\");\n\t\t\tnativeDb.prepare(\"UPDATE brain_patterns SET occurrence_count = occurrence_count + ?, last_seen_at = ? WHERE id = ?\").run(summedCount, latestSeenAt, dg.keptId);\n\t\t\tfor (const removedId of dg.removedIds) {\n\t\t\t\tnativeDb.prepare(\"DELETE FROM brain_patterns WHERE id = ?\").run(removedId);\n\t\t\t\ttotalRemoved++;\n\t\t\t}\n\t\t}\n\t\tnativeDb.prepare(\"COMMIT\").run();\n\t} catch (err) {\n\t\tnativeDb.prepare(\"ROLLBACK\").run();\n\t\tthrow err;\n\t}\n\treturn totalRemoved;\n}\n//#endregion\nexport { detectContradictions as n, dedupePatterns as t };\n"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"brain-doctor-Dc2WqVbs.js","sources":["../../../.svelte-kit/adapter-node/chunks/brain-doctor.js"],"sourcesContent":["import { i as getBrainDb, o as getBrainNativeDb } from \"./memory-sqlite.js\";\n//#region ../core/dist/memory/brain-doctor.js\n/**\n* Brain noise detector — T1262 memory-doctor (read-only, parallel to E1).\n*\n* Inspects `.cleo/brain.db` for known noise patterns without modifying any\n* data. The detector is a prerequisite for the W7 shadow-write sweep\n* (T1147 / v2026.4.132) and the M7 assert-clean gate that guards Sentient v1\n* activation (T1148 / v2026.4.133).\n*\n* **Read-only contract** — this module MUST NOT write to brain.db or any\n* other persistent store. All operations are SELECT-only. The sweep\n* (mutation) phase ships in T1147 W7 under a shadow-write envelope.\n*\n* ## Noise pattern catalogue\n*\n* | Pattern | Description | Detectable via |\n* |---------|-------------|----------------|\n* | `duplicate-content` | Entries with identical `content` hash across different IDs | SHA-256 content comparison |\n* | `missing-type` | Entries where `type` is NULL or empty string | NULL/empty check |\n* | `missing-provenance` | Entries where `provenance` is NULL (unverified source) | NULL check |\n* | `orphan-edge` | Brain graph edges pointing to non-existent nodes | JOIN gap |\n* | `low-confidence` | `confidence < 0.1` entries (near-zero signal, likely noise) | threshold check |\n* | `stale-unverified` | Unverified entries older than 90 days with zero retrieval count | age + retrieval join |\n*\n* @module memory/brain-doctor\n* @task T1262 memory-doctor detector (E1-parallel, read-only)\n* @task T1258 E1 canonical naming refactor\n* @see T1147 W7 for the mutator sweep that acts on these findings\n* @see T1148 W8 M7 gate — `cleo memory doctor --assert-clean` must exit 0 before Sentient v1\n*/\n/** Entries older than this (in days) with zero retrievals are flagged as stale. */\nvar STALE_AGE_DAYS = 90;\n/** Entries with confidence below this threshold are flagged as low-confidence noise. */\nvar LOW_CONFIDENCE_THRESHOLD = .1;\n/**\n* Collect sample IDs (up to 5) from a SQLite query result.\n*\n* @param rows - Array of SQLite row objects with at least an `id` field.\n* @returns Array of up to 5 id strings.\n*/\nfunction sampleIds(rows) {\n\treturn rows.slice(0, 5).map((r) => r.id ?? \"unknown\").filter((id) => id !== \"unknown\");\n}\n/**\n* Run a read-only noise scan over `.cleo/brain.db` and return a structured\n* findings report.\n*\n* This function is intentionally side-effect-free: it opens brain.db in\n* read-only mode (via `getBrainNativeDb`) and only runs SELECT queries.\n* The caller bears responsibility for surfacing or acting on the findings.\n*\n* @param projectRoot - Absolute path to the CLEO project root.\n* @returns A {@link BrainDoctorResult} describing all detected noise.\n*\n* @example\n* ```typescript\n* const result = await scanBrainNoise('/mnt/projects/cleocode');\n* if (!result.isClean) {\n* console.warn(`Brain noise detected: ${result.findings.length} patterns`);\n* for (const f of result.findings) {\n* console.warn(` ${f.pattern}: ${f.count} entries — ${f.description}`);\n* }\n* }\n* ```\n*\n* @task T1262\n*/\nasync function scanBrainNoise(projectRoot) {\n\tawait getBrainDb(projectRoot);\n\tconst db = getBrainNativeDb(projectRoot);\n\tconst findings = [];\n\tif (!db) return {\n\t\ttotalScanned: 0,\n\t\tfindings: [],\n\t\tisClean: true,\n\t\tscannedAt: (/* @__PURE__ */ new Date()).toISOString()\n\t};\n\ttry {\n\t\tconst tables = [\n\t\t\t\"brain_observations\",\n\t\t\t\"brain_decisions\",\n\t\t\t\"brain_patterns\",\n\t\t\t\"brain_learnings\"\n\t\t];\n\t\tlet totalScanned = 0;\n\t\tfor (const table of tables) try {\n\t\t\tconst row = db.prepare(`SELECT COUNT(*) as c FROM ${table}`).get();\n\t\t\ttotalScanned += row?.c ?? 0;\n\t\t} catch {}\n\t\t{\n\t\t\tconst rows = [];\n\t\t\tfor (const table of tables) try {\n\t\t\t\tconst res = db.prepare(`SELECT id FROM ${table} WHERE type IS NULL OR type = '' LIMIT 20`).all();\n\t\t\t\trows.push(...res);\n\t\t\t} catch {}\n\t\t\tif (rows.length > 0) findings.push({\n\t\t\t\tpattern: \"missing-type\",\n\t\t\t\tcount: rows.length,\n\t\t\t\tsampleIds: sampleIds(rows),\n\t\t\t\tdescription: \"Entries with NULL or empty type field — type is required for retrieval routing.\"\n\t\t\t});\n\t\t}\n\t\t{\n\t\t\tconst rows = [];\n\t\t\tfor (const table of tables) try {\n\t\t\t\tconst res = db.prepare(`SELECT id FROM ${table} WHERE provenance IS NULL LIMIT 20`).all();\n\t\t\t\trows.push(...res);\n\t\t\t} catch {}\n\t\t\tif (rows.length > 0) findings.push({\n\t\t\t\tpattern: \"missing-provenance\",\n\t\t\t\tcount: rows.length,\n\t\t\t\tsampleIds: sampleIds(rows),\n\t\t\t\tdescription: \"Entries with NULL provenance — source cannot be verified for retrieval integrity.\"\n\t\t\t});\n\t\t}\n\t\t{\n\t\t\tconst rows = [];\n\t\t\tfor (const table of tables) try {\n\t\t\t\tconst res = db.prepare(`SELECT id FROM ${table} WHERE confidence IS NOT NULL AND confidence < ? LIMIT 20`).all(LOW_CONFIDENCE_THRESHOLD);\n\t\t\t\trows.push(...res);\n\t\t\t} catch {}\n\t\t\tif (rows.length > 0) findings.push({\n\t\t\t\tpattern: \"low-confidence\",\n\t\t\t\tcount: rows.length,\n\t\t\t\tsampleIds: sampleIds(rows),\n\t\t\t\tdescription: `Entries with confidence < ${LOW_CONFIDENCE_THRESHOLD} — near-zero signal, likely noise.`\n\t\t\t});\n\t\t}\n\t\t{\n\t\t\tconst staleThreshold = /* @__PURE__ */ new Date();\n\t\t\tstaleThreshold.setDate(staleThreshold.getDate() - STALE_AGE_DAYS);\n\t\t\tconst staleIso = staleThreshold.toISOString();\n\t\t\tconst rows = [];\n\t\t\tfor (const table of tables) try {\n\t\t\t\tconst res = db.prepare(`SELECT id FROM ${table}\n WHERE verified = 0\n AND created_at < ?\n LIMIT 20`).all(staleIso);\n\t\t\t\trows.push(...res);\n\t\t\t} catch {}\n\t\t\tif (rows.length > 0) findings.push({\n\t\t\t\tpattern: \"stale-unverified\",\n\t\t\t\tcount: rows.length,\n\t\t\t\tsampleIds: sampleIds(rows),\n\t\t\t\tdescription: `Unverified entries older than ${STALE_AGE_DAYS} days — likely outdated observations.`\n\t\t\t});\n\t\t}\n\t\t{\n\t\t\tconst rows = [];\n\t\t\tfor (const table of tables) try {\n\t\t\t\tconst res = db.prepare(`SELECT id FROM ${table}\n WHERE content IN (\n SELECT content FROM ${table}\n WHERE content IS NOT NULL\n GROUP BY content HAVING COUNT(*) > 1\n ) LIMIT 20`).all();\n\t\t\t\trows.push(...res);\n\t\t\t} catch {}\n\t\t\tif (rows.length > 0) findings.push({\n\t\t\t\tpattern: \"duplicate-content\",\n\t\t\t\tcount: rows.length,\n\t\t\t\tsampleIds: sampleIds(rows),\n\t\t\t\tdescription: \"Entries sharing identical content — duplicates inflate retrieval scores.\"\n\t\t\t});\n\t\t}\n\t\ttry {\n\t\t\tconst rows = db.prepare(`SELECT e.id FROM brain_edges e\n LEFT JOIN brain_nodes src ON src.id = e.source_id\n LEFT JOIN brain_nodes tgt ON tgt.id = e.target_id\n WHERE src.id IS NULL OR tgt.id IS NULL\n LIMIT 20`).all();\n\t\t\tif (rows.length > 0) findings.push({\n\t\t\t\tpattern: \"orphan-edge\",\n\t\t\t\tcount: rows.length,\n\t\t\t\tsampleIds: sampleIds(rows),\n\t\t\t\tdescription: \"Brain graph edges pointing to non-existent nodes — referential integrity violation.\"\n\t\t\t});\n\t\t} catch {}\n\t\tconst autoExtractHealth = computeAutoExtractHealth(db);\n\t\tconst provenanceDistribution = computeProvenanceDistribution(db);\n\t\treturn {\n\t\t\ttotalScanned,\n\t\t\tfindings,\n\t\t\tisClean: findings.length === 0,\n\t\t\tscannedAt: (/* @__PURE__ */ new Date()).toISOString(),\n\t\t\tautoExtractHealth,\n\t\t\tprovenanceDistribution\n\t\t};\n\t} catch {\n\t\treturn {\n\t\t\ttotalScanned: 0,\n\t\t\tfindings: [],\n\t\t\tisClean: true,\n\t\t\tscannedAt: (/* @__PURE__ */ new Date()).toISOString()\n\t\t};\n\t}\n}\n/**\n* Compute auto-extract pipeline health from a live brain.db connection.\n*\n* Queries observation/learning counts plus brain_promotion_log fulfillment stats.\n* Returns undefined when the required tables are not available.\n*\n* @param db - Native database instance from getBrainNativeDb (accepts DatabaseSync or compatible)\n*/\nfunction computeAutoExtractHealth(db) {\n\tif (!db) return void 0;\n\tconst nativeDb = db;\n\ttry {\n\t\tconst observationCount = nativeDb.prepare(`SELECT COUNT(*) AS cnt FROM brain_observations WHERE invalid_at IS NULL`).get()?.cnt ?? 0;\n\t\tconst learningCount = nativeDb.prepare(`SELECT COUNT(*) AS cnt FROM brain_learnings WHERE invalid_at IS NULL`).get()?.cnt ?? 0;\n\t\tlet pendingPromotions = 0;\n\t\tlet fulfilledPromotions = 0;\n\t\ttry {\n\t\t\tpendingPromotions = nativeDb.prepare(`SELECT COUNT(*) AS cnt FROM brain_promotion_log WHERE fulfilled_at IS NULL`).get()?.cnt ?? 0;\n\t\t\tfulfilledPromotions = nativeDb.prepare(`SELECT COUNT(*) AS cnt FROM brain_promotion_log WHERE fulfilled_at IS NOT NULL`).get()?.cnt ?? 0;\n\t\t} catch {}\n\t\tlet lastConsolidationAt = null;\n\t\ttry {\n\t\t\tlastConsolidationAt = nativeDb.prepare(`SELECT started_at FROM brain_consolidation_events ORDER BY started_at DESC LIMIT 1`).get()?.started_at ?? null;\n\t\t} catch {}\n\t\tconst extractionRatio = observationCount > 0 ? learningCount / observationCount : 1;\n\t\treturn {\n\t\t\tobservationCount,\n\t\t\tlearningCount,\n\t\t\tpendingPromotions,\n\t\t\tfulfilledPromotions,\n\t\t\textractionRatio,\n\t\t\tlastConsolidationAt,\n\t\t\thealthy: observationCount === 0 || extractionRatio >= .01\n\t\t};\n\t} catch {\n\t\treturn;\n\t}\n}\n/**\n* Compute provenance distribution counts from brain_observations.\n*\n* Returns counts by origin value, validated_at non-null count, and provenance_chain non-null count.\n* Returns undefined when the columns do not exist (pre-T1897 database).\n*/\nfunction computeProvenanceDistribution(db) {\n\tif (!db) return void 0;\n\tconst nativeDb = db;\n\ttry {\n\t\tconst total = nativeDb.prepare(`SELECT COUNT(*) AS cnt FROM brain_observations WHERE invalid_at IS NULL`).get()?.cnt ?? 0;\n\t\tconst byOrigin = {};\n\t\ttry {\n\t\t\tconst rows = nativeDb.prepare(`SELECT COALESCE(origin, '__null__') AS origin_val, COUNT(*) AS cnt\n FROM brain_observations WHERE invalid_at IS NULL\n GROUP BY origin_val`).all();\n\t\t\tfor (const row of rows) byOrigin[row.origin_val === \"__null__\" ? \"(unset)\" : row.origin_val] = row.cnt;\n\t\t} catch {}\n\t\tlet verifiedCount = 0;\n\t\ttry {\n\t\t\tverifiedCount = nativeDb.prepare(`SELECT COUNT(*) AS cnt FROM brain_observations WHERE invalid_at IS NULL AND validated_at IS NOT NULL`).get()?.cnt ?? 0;\n\t\t} catch {}\n\t\tlet derivedCount = 0;\n\t\ttry {\n\t\t\tderivedCount = nativeDb.prepare(`SELECT COUNT(*) AS cnt FROM brain_observations WHERE invalid_at IS NULL AND provenance_chain IS NOT NULL`).get()?.cnt ?? 0;\n\t\t} catch {}\n\t\treturn {\n\t\t\ttotal,\n\t\t\tbyOrigin,\n\t\t\tverifiedCount,\n\t\t\tderivedCount\n\t\t};\n\t} catch {\n\t\treturn;\n\t}\n}\n//#endregion\nexport { scanBrainNoise };\n"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"brain-embedding-Djw9ekXu.js","sources":["../../../.svelte-kit/adapter-node/chunks/brain-embedding2.js"],"sourcesContent":["var currentProvider = null;\n/**\n* Register an embedding provider for the brain system.\n* Validates that the provider's dimensions match the vec0 table.\n*\n* @throws Error if provider dimensions do not match EMBEDDING_DIMENSIONS\n*/\nfunction setEmbeddingProvider(provider) {\n\tif (provider.dimensions !== 384) throw new Error(`Embedding provider dimensions (${provider.dimensions}) do not match vec0 table (384)`);\n\tcurrentProvider = provider;\n}\n/**\n* Embed text into a float vector using the registered provider.\n* Returns null when no provider is set or not available (FTS5-only fallback).\n*/\nasync function embedText(text) {\n\tif (!currentProvider?.isAvailable()) return null;\n\treturn currentProvider.embed(text);\n}\n/** Check whether embedding is currently available. */\nfunction isEmbeddingAvailable() {\n\treturn currentProvider?.isAvailable() ?? false;\n}\n/**\n* Initialize the default local embedding provider.\n*\n* Loads the LocalEmbeddingProvider dynamically and registers it via\n* setEmbeddingProvider(). Should be called once at startup when\n* `brain.embedding.enabled` is true.\n*\n* Uses dynamic import to avoid loading the heavy @huggingface/transformers\n* bundle unless embedding is actually requested.\n*\n* @task T136 @epic T134\n*/\nasync function initDefaultProvider() {\n\tconst { LocalEmbeddingProvider } = await import(\"./embedding-local.js\");\n\tsetEmbeddingProvider(new LocalEmbeddingProvider());\n}\n//#endregion\nexport { setEmbeddingProvider as i, initDefaultProvider as n, isEmbeddingAvailable as r, embedText as t };\n"],"names":[],"mappings":"AAAA,IAAI,eAAe,GAAG,IAAI;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,oBAAoB,CAAC,QAAQ,EAAE;AACxC,CAAC,IAAI,QAAQ,CAAC,UAAU,KAAK,GAAG,EAAE,MAAM,IAAI,KAAK,CAAC,CAAC,+BAA+B,EAAE,QAAQ,CAAC,UAAU,CAAC,+BAA+B,CAAC,CAAC;AACzI,CAAC,eAAe,GAAG,QAAQ;AAC3B;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS,CAAC,IAAI,EAAE;AAC/B,CAAC,IAAI,CAAC,eAAe,EAAE,WAAW,EAAE,EAAE,OAAO,IAAI;AACjD,CAAC,OAAO,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC;AACnC;AACA;AACA,SAAS,oBAAoB,GAAG;AAChC,CAAC,OAAO,eAAe,EAAE,WAAW,EAAE,IAAI,KAAK;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,mBAAmB,GAAG;AACrC,CAAC,MAAM,EAAE,sBAAsB,EAAE,GAAG,MAAM,OAAO,+BAAsB,CAAC;AACxE,CAAC,oBAAoB,CAAC,IAAI,sBAAsB,EAAE,CAAC;AACnD;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"brain-lifecycle-BOOa876K.js","sources":["../../../.svelte-kit/adapter-node/chunks/brain-lifecycle2.js"],"sourcesContent":["import { t as getLogger } from \"./logger.js\";\nimport { n as getBrainAccessor } from \"./memory-accessor2.js\";\nimport { t as typedAll } from \"./typed-query.js\";\nimport { t as EDGE_TYPES } from \"./edge-types.js\";\nimport { createHash } from \"node:crypto\";\n//#region ../core/dist/memory/brain-lifecycle.js\n/**\n* BRAIN lifecycle operations — temporal decay, memory consolidation, and tier promotion.\n*\n* Reduces confidence of stale learnings based on age, following an\n* exponential decay model: new_confidence = confidence * (decayRate ^ daysSinceUpdate).\n*\n* Consolidation groups old observations by keyword overlap and merges\n* clusters into summary observations, archiving the originals.\n*\n* Wave 3 additions (T549):\n* - runTierPromotion — promotes entries through short→medium→long based on citation count,\n* age, and verification; soft-evicts stale short-term entries.\n* - runConsolidation — orchestrates all consolidation steps (dedup, quality recompute,\n* tier promotion, contradiction detection, soft eviction, graph strengthening, summaries).\n*\n* @task T5394 T5395 T549\n* @epic T5149\n*/\n/** Stop words excluded from keyword extraction. */\nvar STOP_WORDS = new Set([\n\t\"the\",\n\t\"a\",\n\t\"an\",\n\t\"is\",\n\t\"are\",\n\t\"was\",\n\t\"were\",\n\t\"be\",\n\t\"been\",\n\t\"being\",\n\t\"have\",\n\t\"has\",\n\t\"had\",\n\t\"do\",\n\t\"does\",\n\t\"did\",\n\t\"will\",\n\t\"would\",\n\t\"could\",\n\t\"should\",\n\t\"may\",\n\t\"might\",\n\t\"shall\",\n\t\"can\",\n\t\"need\",\n\t\"dare\",\n\t\"ought\",\n\t\"used\",\n\t\"to\",\n\t\"of\",\n\t\"in\",\n\t\"for\",\n\t\"on\",\n\t\"with\",\n\t\"at\",\n\t\"by\",\n\t\"from\",\n\t\"as\",\n\t\"into\",\n\t\"through\",\n\t\"during\",\n\t\"before\",\n\t\"after\",\n\t\"above\",\n\t\"below\",\n\t\"between\",\n\t\"out\",\n\t\"off\",\n\t\"over\",\n\t\"under\",\n\t\"again\",\n\t\"further\",\n\t\"then\",\n\t\"once\",\n\t\"and\",\n\t\"but\",\n\t\"or\",\n\t\"nor\",\n\t\"not\",\n\t\"so\",\n\t\"yet\",\n\t\"both\",\n\t\"either\",\n\t\"neither\",\n\t\"each\",\n\t\"every\",\n\t\"all\",\n\t\"any\",\n\t\"few\",\n\t\"more\",\n\t\"most\",\n\t\"other\",\n\t\"some\",\n\t\"such\",\n\t\"no\",\n\t\"only\",\n\t\"own\",\n\t\"same\",\n\t\"than\",\n\t\"too\",\n\t\"very\",\n\t\"just\",\n\t\"because\",\n\t\"until\",\n\t\"while\",\n\t\"about\",\n\t\"against\",\n\t\"this\",\n\t\"that\",\n\t\"these\",\n\t\"those\",\n\t\"it\",\n\t\"its\"\n]);\n/**\n* Extract significant keywords from text for grouping.\n* Filters stop words and short tokens, returns lowercase words.\n*/\nfunction extractKeywords(text) {\n\tconst words = text.toLowerCase().replace(/[^a-z0-9\\s-]/g, \"\").split(/\\s+/);\n\tconst keywords = /* @__PURE__ */ new Set();\n\tfor (const w of words) if (w.length >= 4 && !STOP_WORDS.has(w)) keywords.add(w);\n\treturn keywords;\n}\n/**\n* Calculate keyword overlap ratio between two sets.\n* Returns the Jaccard similarity coefficient.\n*/\nfunction keywordOverlap(a, b) {\n\tif (a.size === 0 || b.size === 0) return 0;\n\tlet intersection = 0;\n\tfor (const w of a) if (b.has(w)) intersection++;\n\tconst union = a.size + b.size - intersection;\n\treturn union > 0 ? intersection / union : 0;\n}\n/**\n* Consolidate old observations by keyword similarity.\n*\n* Groups observations older than `olderThanDays` by FTS5 keyword overlap.\n* For groups with at least `minClusterSize` entries, creates one summary\n* observation and marks originals as archived (updated_at set, narrative\n* prefixed with [ARCHIVED]).\n*\n* @param projectRoot - Project root directory for brain.db resolution\n* @param options - Consolidation configuration\n* @returns Counts of grouped, merged, and archived observations\n*/\nasync function consolidateMemories(projectRoot, options) {\n\tconst olderThanDays = options?.olderThanDays ?? 90;\n\tconst minClusterSize = options?.minClusterSize ?? 3;\n\tconst { getBrainDb, getBrainNativeDb } = await import(\"./memory-sqlite2.js\");\n\tawait getBrainDb(projectRoot);\n\tconst nativeDb = getBrainNativeDb(projectRoot);\n\tif (!nativeDb) return {\n\t\tgrouped: 0,\n\t\tmerged: 0,\n\t\tarchived: 0\n\t};\n\tconst cutoffDate = (/* @__PURE__ */ new Date(Date.now() - olderThanDays * 24 * 60 * 60 * 1e3)).toISOString().replace(\"T\", \" \").slice(0, 19);\n\tconst oldObservations = typedAll(nativeDb.prepare(`\n SELECT id, type, title, narrative, project, created_at\n FROM brain_observations\n WHERE created_at < ?\n AND narrative NOT LIKE '[ARCHIVED]%'\n ORDER BY created_at DESC\n `), cutoffDate);\n\tif (oldObservations.length < minClusterSize) return {\n\t\tgrouped: 0,\n\t\tmerged: 0,\n\t\tarchived: 0\n\t};\n\tconst entries = oldObservations.map((obs) => ({\n\t\t...obs,\n\t\tkeywords: extractKeywords(`${obs.title} ${obs.narrative ?? \"\"}`),\n\t\tclustered: false\n\t}));\n\tconst clusters = [];\n\tconst overlapThreshold = .3;\n\tfor (let i = 0; i < entries.length; i++) {\n\t\tif (entries[i].clustered) continue;\n\t\tconst cluster = [entries[i]];\n\t\tentries[i].clustered = true;\n\t\tfor (let j = i + 1; j < entries.length; j++) {\n\t\t\tif (entries[j].clustered) continue;\n\t\t\tif (entries[i].type !== entries[j].type) continue;\n\t\t\tif (keywordOverlap(entries[i].keywords, entries[j].keywords) >= overlapThreshold) {\n\t\t\t\tcluster.push(entries[j]);\n\t\t\t\tentries[j].clustered = true;\n\t\t\t}\n\t\t}\n\t\tif (cluster.length >= minClusterSize) clusters.push(cluster);\n\t}\n\tlet grouped = 0;\n\tlet merged = 0;\n\tlet archived = 0;\n\tconst accessor = await getBrainAccessor(projectRoot);\n\tconst now = (/* @__PURE__ */ new Date()).toISOString().replace(\"T\", \" \").slice(0, 19);\n\tfor (const cluster of clusters) {\n\t\tgrouped += cluster.length;\n\t\tconst titles = cluster.map((c) => c.title).join(\"; \");\n\t\tconst summaryTitle = `Consolidated: ${cluster[0].type} observations (${cluster.length} entries)`;\n\t\tconst summaryNarrative = `Merged from ${cluster.length} observations: ${titles.slice(0, 500)}`;\n\t\tconst contentHash = createHash(\"sha256\").update(summaryTitle + summaryNarrative).digest(\"hex\").slice(0, 16);\n\t\tconst id = `O-${Date.now().toString(36)}`;\n\t\tawait accessor.addObservation({\n\t\t\tid,\n\t\t\ttype: cluster[0].type,\n\t\t\ttitle: summaryTitle,\n\t\t\tnarrative: summaryNarrative,\n\t\t\tcontentHash,\n\t\t\tproject: cluster[0].project ?? null,\n\t\t\tsourceType: \"agent\",\n\t\t\tcreatedAt: now\n\t\t});\n\t\tmerged++;\n\t\tfor (const obs of cluster) {\n\t\t\tnativeDb.prepare(`\n UPDATE brain_observations\n SET narrative = '[ARCHIVED] ' || COALESCE(narrative, ''),\n updated_at = ?\n WHERE id = ?\n `).run(now, obs.id);\n\t\t\tarchived++;\n\t\t}\n\t}\n\treturn {\n\t\tgrouped,\n\t\tmerged,\n\t\tarchived\n\t};\n}\n/**\n* Run tier promotion for all memory tables.\n*\n* Promotion rules (per spec §1.1–§1.3, relaxed in T614):\n* - short → medium:\n* A. (citationCount >= 3 AND age > 24h) — citation-based track\n* B. (qualityScore >= 0.7 AND age > 24h) — quality fast-track\n* C. (verified = true AND age > 24h) — owner-verified track\n* Note: `verified` is no longer a hard gate for routes A and B.\n* Requiring verified=true on all paths caused all 235 short-tier observations\n* to be permanently stuck (T614 bug).\n* - medium → long:\n* (citationCount >= 5 AND age > 7 days) OR (verified = true AND age > 7 days)\n* Verified entries accelerate to long-tier without citation threshold.\n*\n* Eviction rules:\n* - short-term entries older than 7 days with no promotion eligibility are\n* soft-evicted (invalidAt = now).\n* - long-term entries are NEVER auto-evicted.\n*\n* @param projectRoot - Project root directory for brain.db resolution\n* @returns Lists of promoted and evicted entries\n*/\nasync function runTierPromotion(projectRoot) {\n\tconst { getBrainDb, getBrainNativeDb } = await import(\"./memory-sqlite2.js\");\n\tawait getBrainDb(projectRoot);\n\tconst nativeDb = getBrainNativeDb(projectRoot);\n\tif (!nativeDb) return {\n\t\tpromoted: [],\n\t\tevicted: []\n\t};\n\tconst promoted = [];\n\tconst evicted = [];\n\tconst now = (/* @__PURE__ */ new Date()).toISOString().replace(\"T\", \" \").slice(0, 19);\n\tconst age24h = (/* @__PURE__ */ new Date(Date.now() - 1440 * 60 * 1e3)).toISOString().replace(\"T\", \" \").slice(0, 19);\n\tconst age7d = (/* @__PURE__ */ new Date(Date.now() - 10080 * 60 * 1e3)).toISOString().replace(\"T\", \" \").slice(0, 19);\n\tconst evictionCutoff = (/* @__PURE__ */ new Date(Date.now() - 10080 * 60 * 1e3)).toISOString().replace(\"T\", \" \").slice(0, 19);\n\tfor (const { table, dateCol } of [\n\t\t{\n\t\t\ttable: \"brain_observations\",\n\t\t\tdateCol: \"created_at\"\n\t\t},\n\t\t{\n\t\t\ttable: \"brain_learnings\",\n\t\t\tdateCol: \"created_at\"\n\t\t},\n\t\t{\n\t\t\ttable: \"brain_patterns\",\n\t\t\tdateCol: \"extracted_at\"\n\t\t},\n\t\t{\n\t\t\ttable: \"brain_decisions\",\n\t\t\tdateCol: \"created_at\"\n\t\t}\n\t]) {\n\t\tlet shortToMedium = [];\n\t\ttry {\n\t\t\tshortToMedium = typedAll(nativeDb.prepare(`\n SELECT id, citation_count, quality_score, verified\n FROM ${table}\n WHERE memory_tier = 'short'\n AND invalid_at IS NULL\n AND ${dateCol} < ?\n AND (\n citation_count >= 3\n OR quality_score >= 0.7\n OR verified = 1\n )\n `), age24h);\n\t\t} catch {\n\t\t\tcontinue;\n\t\t}\n\t\tfor (const row of shortToMedium) try {\n\t\t\tlet reason;\n\t\t\tif (row.citation_count >= 3) reason = `citationCount=${row.citation_count} >= 3, age > 24h`;\n\t\t\telse if ((row.quality_score ?? 0) >= .7) reason = `qualityScore=${row.quality_score?.toFixed(2)} >= 0.70, age > 24h`;\n\t\t\telse reason = `verified=true, age > 24h`;\n\t\t\tnativeDb.prepare(`UPDATE ${table} SET memory_tier = 'medium', updated_at = ?, tier_promoted_at = ?, tier_promotion_reason = ? WHERE id = ?`).run(now, now, reason, row.id);\n\t\t\tpromoted.push({\n\t\t\t\tid: row.id,\n\t\t\t\ttable,\n\t\t\t\tfromTier: \"short\",\n\t\t\t\ttoTier: \"medium\",\n\t\t\t\treason\n\t\t\t});\n\t\t} catch {}\n\t\tlet mediumToLong = [];\n\t\ttry {\n\t\t\tmediumToLong = typedAll(nativeDb.prepare(`\n SELECT id, citation_count, quality_score, verified\n FROM ${table}\n WHERE memory_tier = 'medium'\n AND invalid_at IS NULL\n AND ${dateCol} < ?\n AND (citation_count >= 5 OR verified = 1)\n `), age7d);\n\t\t} catch {\n\t\t\tcontinue;\n\t\t}\n\t\tfor (const row of mediumToLong) try {\n\t\t\tconst reason = row.citation_count >= 5 ? `citationCount=${row.citation_count} >= 5, age > 7d` : `verified=true, age > 7d`;\n\t\t\tnativeDb.prepare(`UPDATE ${table} SET memory_tier = 'long', updated_at = ?, tier_promoted_at = ?, tier_promotion_reason = ? WHERE id = ?`).run(now, now, reason, row.id);\n\t\t\tpromoted.push({\n\t\t\t\tid: row.id,\n\t\t\t\ttable,\n\t\t\t\tfromTier: \"medium\",\n\t\t\t\ttoTier: \"long\",\n\t\t\t\treason\n\t\t\t});\n\t\t} catch {}\n\t\tlet toEvict = [];\n\t\ttry {\n\t\t\ttoEvict = typedAll(nativeDb.prepare(`\n SELECT id, quality_score\n FROM ${table}\n WHERE memory_tier = 'short'\n AND invalid_at IS NULL\n AND ${dateCol} < ?\n AND (verified = 0 OR verified IS NULL)\n AND (quality_score IS NULL OR quality_score < 0.5)\n `), evictionCutoff);\n\t\t} catch {\n\t\t\tcontinue;\n\t\t}\n\t\tfor (const row of toEvict) try {\n\t\t\tnativeDb.prepare(`UPDATE ${table} SET invalid_at = ?, updated_at = ? WHERE id = ?`).run(now, now, row.id);\n\t\t\tevicted.push({\n\t\t\t\tid: row.id,\n\t\t\t\ttable,\n\t\t\t\ttier: \"short\",\n\t\t\t\treason: `age > 7d, unverified, qualityScore=${row.quality_score?.toFixed(2) ?? \"null\"} < 0.5`\n\t\t\t});\n\t\t} catch {}\n\t}\n\treturn {\n\t\tpromoted,\n\t\tevicted\n\t};\n}\n/**\n* Run the full sleep-time consolidation pipeline.\n*\n* This is the \"Letta OS sleep-time compute\" pattern — consolidation runs\n* during idle time (after session end), never during active work.\n*\n* Steps (in order):\n* 1. Deduplication — merge entries with >0.85 content similarity\n* 2. Quality recompute — recalculate scores with current age/citations\n* 3. Tier promotion — runTierPromotion()\n* 4. Contradiction detection — from brain-consolidator\n* 5. Soft eviction — invalidate low-quality medium-term entries\n* 6. Graph edge strengthening — increment weight on frequently-traversed edges\n* 7. Summary generation — existing consolidateMemories() for large clusters\n* 8. Code↔memory graph linking\n* 9a. R-STDP reward backfill — assign reward_signal from task outcomes (T681)\n* 9a.5. Outcome correlation — correlateOutcomes quality adjustments (T994)\n* 9b. STDP timing-dependent plasticity — apply Δw using reward_signal (T679)\n* 9c. Homeostatic decay — synaptic scaling + pruning (T690)\n* 9d. History retention — prune brain_plasticity_events + brain_weight_history (T10348)\n* 9e. Consolidation event log — INSERT into brain_consolidation_events (T694)\n* 9f. Hard-sweeper — DELETE prune_candidate=1 + quality<0.2 + citations=0 + age>30d (T995)\n*\n* All steps are BEST-EFFORT — any step failure is caught and logged to console.warn.\n*\n* @param projectRoot - Project root directory for brain.db resolution\n* @param sessionId - Active session ID, passed to backfillRewardSignals (Step 9a).\n* If null/undefined, Step 9a is a no-op (no task correlation available).\n* @param trigger - What triggered this consolidation run (for observability).\n* Defaults to 'session_end'. Written to brain_consolidation_events.\n* @returns Aggregated counts from each consolidation step\n*/\nasync function runConsolidation(projectRoot, sessionId, trigger = \"session_end\") {\n\tconst consolidationStartMs = Date.now();\n\tconst result = {\n\t\tdeduplicated: 0,\n\t\tqualityRecomputed: 0,\n\t\ttierPromotions: {\n\t\t\tpromoted: [],\n\t\t\tevicted: []\n\t\t},\n\t\tcontradictions: 0,\n\t\tsoftEvicted: 0,\n\t\tedgesStrengthened: 0,\n\t\tnexusEdgesStrengthened: 0,\n\t\tsummariesGenerated: 0\n\t};\n\ttry {\n\t\tresult.deduplicated = await deduplicateByEmbedding(projectRoot);\n\t} catch (err) {\n\t\tconsole.warn(\"[consolidation] Step 1 deduplication failed:\", err);\n\t}\n\ttry {\n\t\tresult.qualityRecomputed = await recomputeQualityScores(projectRoot);\n\t} catch (err) {\n\t\tconsole.warn(\"[consolidation] Step 2 quality recompute failed:\", err);\n\t}\n\ttry {\n\t\tresult.tierPromotions = await runTierPromotion(projectRoot);\n\t} catch (err) {\n\t\tconsole.warn(\"[consolidation] Step 3 tier promotion failed:\", err);\n\t}\n\ttry {\n\t\tresult.autoExtractPromotion = await fulfillPromotionLog(projectRoot);\n\t} catch (err) {\n\t\tconsole.warn(\"[consolidation] Step 3b promotion fulfillment failed:\", err);\n\t}\n\ttry {\n\t\tconst { detectContradictions } = await import(\"./brain-consolidator.js\");\n\t\tresult.contradictions = (await detectContradictions(projectRoot)).length;\n\t} catch (err) {\n\t\tconsole.warn(\"[consolidation] Step 4 contradiction detection failed:\", err);\n\t}\n\ttry {\n\t\tconst { dedupePatterns } = await import(\"./brain-consolidator.js\");\n\t\tresult.patternDeduped = await dedupePatterns(projectRoot);\n\t} catch (err) {\n\t\tconsole.warn(\"[consolidation] Step 4b pattern dedup failed:\", err);\n\t}\n\ttry {\n\t\tresult.softEvicted = await softEvictLowQualityMedium(projectRoot);\n\t} catch (err) {\n\t\tconsole.warn(\"[consolidation] Step 5 soft eviction failed:\", err);\n\t}\n\ttry {\n\t\tresult.edgesStrengthened = await strengthenCoRetrievedEdges(projectRoot);\n\t} catch (err) {\n\t\tconsole.warn(\"[consolidation] Step 6 edge strengthening failed:\", err);\n\t}\n\ttry {\n\t\tconst { extractNexusPairsFromRetrievalLog, strengthenNexusCoAccess } = await import(\"./nexus-plasticity.js\");\n\t\tconst nexusPairs = await extractNexusPairsFromRetrievalLog(projectRoot);\n\t\tif (nexusPairs.length > 0) result.nexusEdgesStrengthened = (await strengthenNexusCoAccess(nexusPairs)).strengthened;\n\t\telse result.nexusEdgesStrengthened = 0;\n\t} catch (err) {\n\t\tconsole.warn(\"[consolidation] Step 6b nexus plasticity failed:\", err);\n\t\tresult.nexusEdgesStrengthened = 0;\n\t}\n\ttry {\n\t\tconst { applyPlasticityDecay } = await import(\"./nexus-plasticity.js\");\n\t\tresult.nexusEdgesDecayed = (await applyPlasticityDecay()).updated;\n\t} catch (err) {\n\t\tconsole.warn(\"[consolidation] Step 6c plasticity decay failed:\", err);\n\t}\n\ttry {\n\t\tresult.summariesGenerated = (await consolidateMemories(projectRoot, {\n\t\t\tolderThanDays: 30,\n\t\t\tminClusterSize: 5\n\t\t})).merged;\n\t} catch (err) {\n\t\tconsole.warn(\"[consolidation] Step 7 summary generation failed:\", err);\n\t}\n\ttry {\n\t\tconst { autoLinkMemories } = await import(\"./graph-memory-bridge.js\");\n\t\tresult.graphLinksCreated = (await autoLinkMemories(projectRoot)).linked;\n\t} catch (err) {\n\t\tconsole.warn(\"[consolidation] Step 8 graph memory bridge failed:\", err);\n\t}\n\ttry {\n\t\tconst { backfillRewardSignals } = await import(\"./brain-stdp2.js\");\n\t\tresult.rewardBackfilled = await backfillRewardSignals(projectRoot, sessionId ?? null);\n\t} catch (err) {\n\t\tconsole.warn(\"[consolidation] Step 9a reward backfill failed:\", err);\n\t}\n\ttry {\n\t\tconst { correlateOutcomes } = await import(\"./quality-feedback.js\");\n\t\tconst correlateResult = await correlateOutcomes(projectRoot);\n\t\tresult.outcomeCorrelation = {\n\t\t\tboosted: correlateResult.boosted,\n\t\t\tpenalized: correlateResult.penalized,\n\t\t\tflaggedForPruning: correlateResult.flaggedForPruning\n\t\t};\n\t} catch (err) {\n\t\tconsole.warn(\"[consolidation] Step 9a.5 outcome correlation failed:\", err);\n\t}\n\ttry {\n\t\tconst { applyStdpPlasticity, shouldRunPlasticity } = await import(\"./brain-stdp2.js\");\n\t\tif (await shouldRunPlasticity(projectRoot, sessionId ?? null, 2)) result.stdpPlasticity = await applyStdpPlasticity(projectRoot);\n\t\telse result.stdpPlasticity = {\n\t\t\tltpEvents: 0,\n\t\t\tltdEvents: 0,\n\t\t\tedgesCreated: 0,\n\t\t\tpairsExamined: 0\n\t\t};\n\t} catch (err) {\n\t\tconsole.warn(\"[consolidation] Step 9b STDP plasticity failed:\", err);\n\t}\n\ttry {\n\t\tconst { applyHomeostaticDecay } = await import(\"./brain-stdp2.js\");\n\t\tresult.homeostaticDecay = await applyHomeostaticDecay(projectRoot);\n\t} catch (err) {\n\t\tconsole.warn(\"[consolidation] Step 9c homeostatic decay failed:\", err);\n\t}\n\ttry {\n\t\tconst { pruneStaleHistory } = await import(\"./brain-stdp2.js\");\n\t\tresult.historyRetention = await pruneStaleHistory(projectRoot);\n\t} catch (err) {\n\t\tconsole.warn(\"[consolidation] Step 9d history retention failed:\", err);\n\t}\n\ttry {\n\t\tconst { runPruneSweep } = await import(\"./brain-maintenance2.js\");\n\t\tconst sweepResult = await runPruneSweep(projectRoot);\n\t\tresult.pruneSweep = {\n\t\t\tdeleted: sweepResult.deleted,\n\t\t\twouldDelete: sweepResult.wouldDelete,\n\t\t\tdryRun: sweepResult.dryRun\n\t\t};\n\t} catch (err) {\n\t\tconsole.warn(\"[consolidation] Step 9f prune sweep failed:\", err);\n\t}\n\ttry {\n\t\tconst { consolidateAttention } = await import(\"./attention-consolidate.js\");\n\t\tconst attentionResult = await consolidateAttention(projectRoot);\n\t\tresult.attentionConsolidation = {\n\t\t\treviewed: attentionResult.reviewed,\n\t\t\tpromoted: attentionResult.promoted,\n\t\t\tkept: attentionResult.kept,\n\t\t\tdiscarded: attentionResult.discarded\n\t\t};\n\t} catch (err) {\n\t\tgetLogger(\"consolidation\").warn({ err }, \"Step 9g attention consolidation failed\");\n\t}\n\ttry {\n\t\tconst { getBrainDb, getBrainNativeDb } = await import(\"./memory-sqlite2.js\");\n\t\tawait getBrainDb(projectRoot);\n\t\tconst nativeDb = getBrainNativeDb(projectRoot);\n\t\tif (nativeDb) {\n\t\t\tlet consolidationEventsExist = false;\n\t\t\ttry {\n\t\t\t\tnativeDb.prepare(\"SELECT 1 FROM brain_consolidation_events LIMIT 1\").get();\n\t\t\t\tconsolidationEventsExist = true;\n\t\t\t} catch {}\n\t\t\tif (consolidationEventsExist) {\n\t\t\t\tconst durationMs = Date.now() - consolidationStartMs;\n\t\t\t\tconst stepResultsJson = JSON.stringify(result);\n\t\t\t\tnativeDb.prepare(`INSERT INTO brain_consolidation_events\n (trigger, session_id, step_results_json, duration_ms, succeeded)\n VALUES (?, ?, ?, ?, 1)`).run(trigger, sessionId ?? null, stepResultsJson, durationMs);\n\t\t\t}\n\t\t}\n\t} catch (err) {\n\t\tconsole.warn(\"[consolidation] Step 9e consolidation event log failed:\", err);\n\t}\n\ttry {\n\t\tconst { runSleepConsolidation } = await import(\"./sleep-consolidation.js\");\n\t\tconst sleepResult = await runSleepConsolidation(projectRoot);\n\t\tresult.sleepConsolidation = {\n\t\t\tran: sleepResult.ran,\n\t\t\tmerged: sleepResult.mergeDuplicates.merged,\n\t\t\tpruned: sleepResult.pruneStale.pruned,\n\t\t\tpatternsGenerated: sleepResult.strengthenPatterns.patternsGenerated,\n\t\t\tinsightsStored: sleepResult.generateInsights.insightsStored\n\t\t};\n\t\tif (sleepResult.ran) result.summariesGenerated += sleepResult.strengthenPatterns.patternsGenerated + sleepResult.generateInsights.insightsStored;\n\t\telse console.warn(\"[consolidation] Step 10 sleep consolidation skipped (disabled or no LLM)\");\n\t} catch (err) {\n\t\tconsole.warn(\"[consolidation] Step 10 sleep consolidation failed:\", err);\n\t}\n\treturn result;\n}\n/**\n* Fulfill pending entries in brain_promotion_log by inserting them into\n* brain_learnings or brain_patterns.\n*\n* `promoteObservationsToTyped` (Step 3 of runConsolidation) only writes audit\n* rows to brain_promotion_log — it does NOT insert into the typed tables.\n* This step reads those pending log rows and performs the actual inserts.\n*\n* Idempotent: rows that have already been fulfilled (fulfilled_at IS NOT NULL)\n* are skipped.\n*\n* @param projectRoot - Project root for brain.db resolution\n* @returns AutoExtractMetrics describing what happened\n*\n* @task T1903\n*/\nasync function fulfillPromotionLog(projectRoot) {\n\tconst metrics = {\n\t\tinvocations: 0,\n\t\tcandidates: 0,\n\t\tpromoted: 0,\n\t\trejected: {\n\t\t\talready_fulfilled: 0,\n\t\t\tstore_error: 0,\n\t\t\tno_narrative: 0,\n\t\t\tdedup_hash: 0,\n\t\t\tother: 0\n\t\t}\n\t};\n\tconst { getBrainDb, getBrainNativeDb } = await import(\"./memory-sqlite2.js\");\n\tawait getBrainDb(projectRoot);\n\tconst nativeDb = getBrainNativeDb(projectRoot);\n\tif (!nativeDb) return metrics;\n\ttry {\n\t\tnativeDb.prepare(\"SELECT 1 FROM brain_promotion_log LIMIT 1\").get();\n\t} catch {\n\t\treturn metrics;\n\t}\n\tlet pending = [];\n\ttry {\n\t\tpending = typedAll(nativeDb.prepare(`\n SELECT id, observation_id, to_tier, score, fulfilled_at\n FROM brain_promotion_log\n WHERE fulfilled_at IS NULL\n AND decided_by = 'composite-scorer'\n ORDER BY score DESC\n LIMIT 200\n `));\n\t} catch {\n\t\treturn metrics;\n\t}\n\tmetrics.invocations = pending.length;\n\tif (pending.length === 0) return metrics;\n\tconst obsIds = pending.map((r) => r.observation_id);\n\tconst placeholders = obsIds.map(() => \"?\").join(\", \");\n\tconst obsMap = /* @__PURE__ */ new Map();\n\ttry {\n\t\tconst rows = typedAll(nativeDb.prepare(`SELECT id, type, title, narrative, created_at, citation_count\n FROM brain_observations\n WHERE id IN (${placeholders}) AND invalid_at IS NULL`), ...obsIds);\n\t\tfor (const row of rows) obsMap.set(row.id, row);\n\t} catch {\n\t\treturn metrics;\n\t}\n\tconst now = (/* @__PURE__ */ new Date()).toISOString().replace(\"T\", \" \").slice(0, 19);\n\tconst { checkHashDedup } = await import(\"./extraction-gate.js\");\n\tfor (const logRow of pending) {\n\t\tconst obs = obsMap.get(logRow.observation_id);\n\t\tif (!obs) {\n\t\t\tmetrics.rejected.other++;\n\t\t\tcontinue;\n\t\t}\n\t\tconst content = obs.narrative ?? obs.title;\n\t\tif (!content?.trim()) {\n\t\t\tmetrics.rejected.no_narrative++;\n\t\t\ttry {\n\t\t\t\tnativeDb.prepare(`UPDATE brain_promotion_log SET fulfilled_at = ?, fulfillment_note = 'no-narrative' WHERE id = ?`).run(now, logRow.id);\n\t\t\t} catch {}\n\t\t\tcontinue;\n\t\t}\n\t\tmetrics.candidates++;\n\t\tif ((await checkHashDedup(projectRoot, content, logRow.to_tier === \"pattern\" ? \"brain_patterns\" : \"brain_learnings\")).matched) {\n\t\t\tmetrics.rejected.dedup_hash++;\n\t\t\ttry {\n\t\t\t\tnativeDb.prepare(`UPDATE brain_promotion_log SET fulfilled_at = ?, fulfillment_note = 'dedup-hash' WHERE id = ?`).run(now, logRow.id);\n\t\t\t} catch {}\n\t\t\tcontinue;\n\t\t}\n\t\ttry {\n\t\t\tif (logRow.to_tier === \"pattern\") {\n\t\t\t\tconst { storePattern } = await import(\"./patterns.js\");\n\t\t\t\tawait storePattern(projectRoot, {\n\t\t\t\t\ttype: \"workflow\",\n\t\t\t\t\tpattern: content,\n\t\t\t\t\tcontext: obs.title,\n\t\t\t\t\t_skipGate: true\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tconst { storeLearning } = await import(\"./learnings.js\");\n\t\t\t\tawait storeLearning(projectRoot, {\n\t\t\t\t\tinsight: content,\n\t\t\t\t\tsource: `promotion-log:${logRow.id}`,\n\t\t\t\t\tconfidence: Math.min(logRow.score, 1),\n\t\t\t\t\tactionable: obs.type === \"bugfix\" || obs.type === \"discovery\",\n\t\t\t\t\t_skipGate: true\n\t\t\t\t});\n\t\t\t}\n\t\t\tmetrics.promoted++;\n\t\t\ttry {\n\t\t\t\tnativeDb.prepare(`UPDATE brain_promotion_log SET fulfilled_at = ?, fulfillment_note = 'stored' WHERE id = ?`).run(now, logRow.id);\n\t\t\t} catch {}\n\t\t} catch {\n\t\t\tmetrics.rejected.store_error++;\n\t\t}\n\t}\n\treturn metrics;\n}\n/**\n* Merge entries with high embedding similarity (> 0.85 cosine similarity).\n*\n* For each pair above the threshold: keep the higher-quality entry, transfer\n* citationCount, and soft-evict the clone (set invalidAt). When embeddings\n* are unavailable, falls back to exact content-hash deduplication.\n*\n* @param projectRoot - Project root for brain.db resolution\n* @returns Count of merged/evicted duplicate entries\n*/\nasync function deduplicateByEmbedding(projectRoot) {\n\tconst { getBrainDb, getBrainNativeDb } = await import(\"./memory-sqlite2.js\");\n\tawait getBrainDb(projectRoot);\n\tconst nativeDb = getBrainNativeDb(projectRoot);\n\tif (!nativeDb) return 0;\n\tlet merged = 0;\n\tconst now = (/* @__PURE__ */ new Date()).toISOString().replace(\"T\", \" \").slice(0, 19);\n\tconst dupHashes = typedAll(nativeDb.prepare(`\n SELECT content_hash, COUNT(*) as cnt\n FROM brain_observations\n WHERE content_hash IS NOT NULL\n AND invalid_at IS NULL\n GROUP BY content_hash\n HAVING cnt > 1\n `));\n\tfor (const dup of dupHashes) {\n\t\tconst dupes = typedAll(nativeDb.prepare(`\n SELECT id, quality_score, citation_count\n FROM brain_observations\n WHERE content_hash = ?\n AND invalid_at IS NULL\n ORDER BY quality_score DESC, citation_count DESC\n `), dup.content_hash);\n\t\tif (dupes.length < 2) continue;\n\t\tconst [keeper, ...clones] = dupes;\n\t\tif (!keeper) continue;\n\t\tlet totalCitations = keeper.citation_count;\n\t\tfor (const clone of clones) {\n\t\t\ttotalCitations += clone.citation_count;\n\t\t\tnativeDb.prepare(`UPDATE brain_observations SET invalid_at = ?, updated_at = ? WHERE id = ?`).run(now, now, clone.id);\n\t\t\tmerged++;\n\t\t}\n\t\tif (totalCitations !== keeper.citation_count) nativeDb.prepare(`UPDATE brain_observations SET citation_count = ?, updated_at = ? WHERE id = ?`).run(totalCitations, now, keeper.id);\n\t}\n\treturn merged;\n}\n/**\n* Recompute quality scores factoring in current citation count and age.\n*\n* Applies a citation boost: +0.01 per citation, capped at +0.15.\n* Applies age decay only on episodic entries (observations, episodic learnings).\n*\n* @param projectRoot - Project root for brain.db resolution\n* @returns Count of entries updated\n*/\nasync function recomputeQualityScores(projectRoot) {\n\tconst { getBrainDb, getBrainNativeDb } = await import(\"./memory-sqlite2.js\");\n\tawait getBrainDb(projectRoot);\n\tconst nativeDb = getBrainNativeDb(projectRoot);\n\tif (!nativeDb) return 0;\n\tlet updated = 0;\n\tconst now = (/* @__PURE__ */ new Date()).toISOString().replace(\"T\", \" \").slice(0, 19);\n\ttry {\n\t\tconst r = nativeDb.prepare(`\n UPDATE brain_observations\n SET quality_score = MIN(1.0, COALESCE(quality_score, 0.5) + MIN(0.15, citation_count * 0.01)),\n updated_at = ?\n WHERE citation_count > 0\n AND invalid_at IS NULL\n `).run(now);\n\t\tupdated += typeof r.changes === \"number\" ? r.changes : 0;\n\t} catch {}\n\ttry {\n\t\tconst r = nativeDb.prepare(`\n UPDATE brain_learnings\n SET quality_score = MIN(1.0, COALESCE(quality_score, 0.5) + MIN(0.15, citation_count * 0.01)),\n updated_at = ?\n WHERE citation_count > 0\n AND invalid_at IS NULL\n `).run(now);\n\t\tupdated += typeof r.changes === \"number\" ? r.changes : 0;\n\t} catch {}\n\treturn updated;\n}\n/**\n* Soft-evict medium-term entries that have decayed below quality threshold.\n*\n* Entries are invalidated (invalidAt = now) when:\n* - memoryTier = 'medium'\n* - qualityScore < 0.30 AND age > 30 days\n* - NOT long-term (protected from auto-eviction)\n*\n* @param projectRoot - Project root for brain.db resolution\n* @returns Count of entries soft-evicted\n*/\nasync function softEvictLowQualityMedium(projectRoot) {\n\tconst { getBrainDb, getBrainNativeDb } = await import(\"./memory-sqlite2.js\");\n\tawait getBrainDb(projectRoot);\n\tconst nativeDb = getBrainNativeDb(projectRoot);\n\tif (!nativeDb) return 0;\n\tlet evicted = 0;\n\tconst now = (/* @__PURE__ */ new Date()).toISOString().replace(\"T\", \" \").slice(0, 19);\n\tconst age30d = (/* @__PURE__ */ new Date(Date.now() - 720 * 60 * 60 * 1e3)).toISOString().replace(\"T\", \" \").slice(0, 19);\n\tfor (const { table, dateCol } of [\n\t\t{\n\t\t\ttable: \"brain_observations\",\n\t\t\tdateCol: \"created_at\"\n\t\t},\n\t\t{\n\t\t\ttable: \"brain_learnings\",\n\t\t\tdateCol: \"created_at\"\n\t\t},\n\t\t{\n\t\t\ttable: \"brain_patterns\",\n\t\t\tdateCol: \"extracted_at\"\n\t\t},\n\t\t{\n\t\t\ttable: \"brain_decisions\",\n\t\t\tdateCol: \"created_at\"\n\t\t}\n\t]) try {\n\t\tconst r = nativeDb.prepare(`\n UPDATE ${table}\n SET invalid_at = ?, updated_at = ?\n WHERE memory_tier = 'medium'\n AND invalid_at IS NULL\n AND quality_score IS NOT NULL\n AND quality_score < 0.30\n AND ${dateCol} < ?\n `).run(now, now, age30d);\n\t\tevicted += typeof r.changes === \"number\" ? r.changes : 0;\n\t} catch {}\n\treturn evicted;\n}\n/**\n* Strengthen edges between frequently co-retrieved brain graph nodes.\n*\n* Queries the brain_retrieval_log table (if it exists) to find pairs of\n* entries that were returned together frequently (>= 3 times in the last\n* 30 days). For each qualifying pair, increments the edge weight by 0.1\n* (capped at 1.0) in brain_page_edges.\n*\n* Gracefully no-ops when brain_retrieval_log does not yet exist.\n*\n* @param projectRoot - Project root for brain.db resolution\n* @returns Count of edges strengthened\n*/\n/**\n* Parse entry_ids which may be either JSON array or comma-separated string (BUG-2 fix).\n*\n* @param raw - Raw entry_ids value from brain_retrieval_log\n* @returns Parsed array of entry IDs, or empty array if parse fails\n*/\nfunction parseEntryIds(raw) {\n\tconst trimmed = raw.trim();\n\tif (trimmed.startsWith(\"[\")) try {\n\t\tconst parsed = JSON.parse(trimmed);\n\t\treturn Array.isArray(parsed) ? parsed : [];\n\t} catch {\n\t\treturn [];\n\t}\n\treturn trimmed.split(\",\").map((s) => s.trim()).filter(Boolean);\n}\nasync function strengthenCoRetrievedEdges(projectRoot) {\n\tconst { getBrainDb, getBrainNativeDb } = await import(\"./memory-sqlite2.js\");\n\tawait getBrainDb(projectRoot);\n\tconst nativeDb = getBrainNativeDb(projectRoot);\n\tif (!nativeDb) return 0;\n\ttry {\n\t\tnativeDb.prepare(\"SELECT 1 FROM brain_retrieval_log LIMIT 1\").get();\n\t} catch {\n\t\treturn 0;\n\t}\n\tconst age30d = (/* @__PURE__ */ new Date(Date.now() - 720 * 60 * 60 * 1e3)).toISOString().replace(\"T\", \" \").slice(0, 19);\n\tconst now = (/* @__PURE__ */ new Date()).toISOString().replace(\"T\", \" \").slice(0, 19);\n\tlet logRows = [];\n\ttry {\n\t\tlogRows = typedAll(nativeDb.prepare(`SELECT entry_ids, query FROM brain_retrieval_log WHERE created_at >= ? LIMIT 1000`), age30d);\n\t} catch {\n\t\treturn 0;\n\t}\n\tconst coOccurrence = /* @__PURE__ */ new Map();\n\tfor (const row of logRows) {\n\t\tconst ids = parseEntryIds(row.entry_ids);\n\t\tif (ids.length < 2) continue;\n\t\tfor (let i = 0; i < ids.length; i++) for (let j = i + 1; j < ids.length; j++) {\n\t\t\tconst a = ids[i];\n\t\t\tconst b = ids[j];\n\t\t\tconst key = a < b ? `${a}|${b}` : `${b}|${a}`;\n\t\t\tconst querySet = coOccurrence.get(key) ?? /* @__PURE__ */ new Set();\n\t\t\tquerySet.add(row.query);\n\t\t\tcoOccurrence.set(key, querySet);\n\t\t}\n\t}\n\tlet strengthened = 0;\n\tfor (const [pair, querySet] of coOccurrence) {\n\t\tif (querySet.size < 3) continue;\n\t\tconst [fromId, toId] = pair.split(\"|\");\n\t\tif (!fromId || !toId) continue;\n\t\tconst nodeFrom = `observation:${fromId}`;\n\t\tconst nodeTo = `observation:${toId}`;\n\t\ttry {\n\t\t\tconst updateResult = nativeDb.prepare(`\n UPDATE brain_page_edges\n SET weight = MIN(1.0, weight + 0.1),\n plasticity_class = 'hebbian'\n WHERE from_id = ? AND to_id = ? AND edge_type = ?\n `).run(nodeFrom, nodeTo, EDGE_TYPES.CO_RETRIEVED);\n\t\t\tif ((typeof updateResult.changes === \"number\" ? updateResult.changes : 0) === 0) nativeDb.prepare(`\n INSERT OR IGNORE INTO brain_page_edges\n (from_id, to_id, edge_type, weight, provenance, plasticity_class, created_at)\n VALUES (?, ?, ?, 0.3, 'consolidation:co-retrieval', 'hebbian', ?)\n `).run(nodeFrom, nodeTo, EDGE_TYPES.CO_RETRIEVED, now);\n\t\t\tstrengthened++;\n\t\t} catch {}\n\t}\n\treturn strengthened;\n}\n//#endregion\nexport { runTierPromotion as i, fulfillPromotionLog as n, runConsolidation as r, consolidateMemories as t };\n"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"brain-maintenance-U6VvsvmK.js","sources":["../../../.svelte-kit/adapter-node/chunks/brain-maintenance.js"],"sourcesContent":["import { t as getLogger } from \"./logger.js\";\nimport \"./memory-sqlite.js\";\nimport \"./cross-db-cleanup.js\";\nimport \"./brain-lifecycle2.js\";\nimport \"./brain-retrieval.js\";\nimport \"node:crypto\";\n//#region ../core/dist/memory/brain-maintenance.js\nvar log = getLogger(\"maintenance\");\n/**\n* Default maximum number of rows deleted per {@link runPruneSweep} invocation.\n* Configurable via the `brain.sweeper.maxDeletePerRun` project config key.\n*/\nvar DEFAULT_MAX_DELETE_PER_RUN = 500;\n/**\n* Hard-sweeper: DELETE brain entries that are confirmed noise.\n*\n* A row qualifies for deletion when ALL of:\n* - `prune_candidate = 1` (flagged by `correlateOutcomes` Step 9a.5)\n* - `quality_score < 0.2` (low quality)\n* - `citation_count = 0` (never cited)\n* - age > 30 days (`julianday('now') - julianday(created_at) > 30`)\n*\n* Safety mechanisms:\n* - **Dry-run mode** (`options.dryRun = true`) — counts qualifying rows and\n* returns without mutating the database.\n* - **Per-run cap** (`options.maxDeletePerRun`, default 500) — limits total\n* deletes across all tables per invocation to prevent runaway deletes.\n* - **Audit trail** — inserts a row into `brain_consolidation_events` with\n* `trigger = 'step-9f'` after each real (non-dry) delete run.\n*\n* This function is idempotent: rows that already do not exist or that no\n* longer meet the predicate are silently skipped.\n*\n* @param projectRoot - Absolute path to the project root (locates brain.db)\n* @param options - Dry-run and per-run cap controls\n* @returns - Deleted/would-delete counts plus per-table breakdown\n*\n* @task T995\n* @epic T991\n*/\nasync function runPruneSweep(projectRoot, options) {\n\tconst dryRun = options?.dryRun ?? false;\n\tconst cap = options?.maxDeletePerRun ?? DEFAULT_MAX_DELETE_PER_RUN;\n\tconst byTable = {};\n\tlet deleted = 0;\n\tlet wouldDelete = 0;\n\tconst { getBrainDb, getBrainNativeDb } = await import(\"./memory-sqlite2.js\");\n\tawait getBrainDb(projectRoot);\n\tconst nativeDb = getBrainNativeDb(projectRoot);\n\tif (!nativeDb) return {\n\t\tdeleted: 0,\n\t\twouldDelete: 0,\n\t\tdryRun,\n\t\tbyTable: {}\n\t};\n\tconst tables = [\n\t\t{\n\t\t\ttable: \"brain_decisions\",\n\t\t\tdateCol: \"created_at\"\n\t\t},\n\t\t{\n\t\t\ttable: \"brain_patterns\",\n\t\t\tdateCol: \"extracted_at\"\n\t\t},\n\t\t{\n\t\t\ttable: \"brain_learnings\",\n\t\t\tdateCol: \"created_at\"\n\t\t},\n\t\t{\n\t\t\ttable: \"brain_observations\",\n\t\t\tdateCol: \"created_at\"\n\t\t}\n\t];\n\tfor (const { table, dateCol } of tables) try {\n\t\tconst count = nativeDb.prepare(`SELECT COUNT(*) AS cnt\n FROM ${table}\n WHERE prune_candidate = 1\n AND COALESCE(quality_score, 0.5) < 0.2\n AND COALESCE(citation_count, 0) = 0\n AND julianday('now') - julianday(${dateCol}) > 30`).all()[0]?.cnt ?? 0;\n\t\twouldDelete += count;\n\t\tbyTable[table] = count;\n\t} catch {\n\t\tbyTable[table] = 0;\n\t}\n\tif (dryRun) {\n\t\tlog.info(`[prune-sweep] dry-run: would delete ${wouldDelete} entries across 4 tables (cap=${cap})`);\n\t\treturn {\n\t\t\tdeleted: 0,\n\t\t\twouldDelete,\n\t\t\tdryRun,\n\t\t\tbyTable\n\t\t};\n\t}\n\tlet remaining = cap;\n\tconst actualByTable = {};\n\tfor (const { table, dateCol } of tables) {\n\t\tif (remaining <= 0) {\n\t\t\tactualByTable[table] = 0;\n\t\t\tcontinue;\n\t\t}\n\t\ttry {\n\t\t\tconst tableLimit = Math.min(byTable[table] ?? 0, remaining);\n\t\t\tif (tableLimit <= 0) {\n\t\t\t\tactualByTable[table] = 0;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst changes = nativeDb.prepare(`DELETE FROM ${table}\n WHERE id IN (\n SELECT id FROM ${table}\n WHERE prune_candidate = 1\n AND COALESCE(quality_score, 0.5) < 0.2\n AND COALESCE(citation_count, 0) = 0\n AND julianday('now') - julianday(${dateCol}) > 30\n LIMIT ?\n )`).run(tableLimit).changes ?? 0;\n\t\t\tactualByTable[table] = changes;\n\t\t\tdeleted += changes;\n\t\t\tremaining -= changes;\n\t\t} catch {\n\t\t\tactualByTable[table] = 0;\n\t\t}\n\t}\n\tlog.info(`[prune-sweep] step-9f: deleted ${deleted} entries (would-qualify=${wouldDelete}, cap=${cap})`);\n\treturn {\n\t\tdeleted,\n\t\twouldDelete,\n\t\tdryRun,\n\t\tbyTable: actualByTable\n\t};\n}\n//#endregion\nexport { runPruneSweep as t };\n"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"brain-maintenance2-CwVSmfDT.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"brain-retrieval2-exR8mdgh.js","sources":["../../../.svelte-kit/adapter-node/chunks/brain-retrieval.js"],"sourcesContent":["import \"./memory-accessor2.js\";\nimport { t as memoryFindHitNext } from \"./mvi-helpers.js\";\nimport \"./observe2.js\";\nimport \"./brain-similarity.js\";\nimport { c as searchBrain, r as hybridSearch } from \"./brain-search2.js\";\n//#region ../core/dist/memory/retrieval/build-retrieval-bundle.js\n/**\n* BRAIN Multi-Pass Retrieval Bundle (PSYCHE Wave 4 · T1090).\n*\n* Executes up to three passes in parallel:\n* - Cold (20 % of budget): user-profile traits + peer instructions\n* - Warm (50 % of budget): peer-scoped learnings, patterns, decisions\n* - Hot (30 % of budget): session narrative + recent observations + active tasks\n*\n* @task T1090\n* @epic T1083\n*/\n/** Default token budget for `buildRetrievalBundle` (characters / 4 ≈ tokens). */\nvar DEFAULT_TOKEN_BUDGET = 4e3;\n/** Default pass-mask: all three passes active. */\nvar DEFAULT_PASS_MASK = {\n\tcold: true,\n\twarm: true,\n\thot: true\n};\n/** Cold pass budget share (20 %). */\nvar COLD_BUDGET_FRACTION = .2;\n/** Hot pass budget share (30 %). */\nvar HOT_BUDGET_FRACTION = .3;\n/**\n* Estimate tokens consumed by an arbitrary string.\n* Uses the approximate 4-chars-per-token heuristic.\n*/\nfunction estimateTokens(text) {\n\treturn Math.ceil(text.length / 4);\n}\n/**\n* Cold pass — fetch user-profile traits and peer instructions from NEXUS.\n*\n* Calls `listUserProfile({ minConfidence: 0.5 })` from Wave 1 (T1078).\n* `peerInstructions` is populated from the sigil's `systemPromptFragment`\n* when a sigil exists for `peerId` (Wave 8 — T1148). Falls back to an empty\n* string when no sigil is found or when the sigil has no fragment set.\n*\n* @param peerId - CANT peer identifier (used to look up the sigil).\n* @param nexusDb - Drizzle nexus database handle.\n* @returns Cold-pass bundle slice: userProfile traits + peerInstructions + sigilCard.\n*\n* @task T1090\n* @task T1148\n*/\nasync function fetchIdentity(peerId, nexusDb) {\n\tconst { listUserProfile } = await import(\"./user-profile.js\");\n\tconst { getSigil } = await import(\"./sigil.js\");\n\tconst [userProfile, sigilCard] = await Promise.all([listUserProfile(nexusDb, { minConfidence: .5 }), getSigil(nexusDb, peerId).catch(() => null)]);\n\treturn {\n\t\tuserProfile,\n\t\tpeerInstructions: sigilCard?.systemPromptFragment ?? \"\",\n\t\tsigilCard\n\t};\n}\n/**\n* Warm pass — fetch peer-scoped learnings, patterns, and decisions from BRAIN.\n*\n* Uses the Wave 2 peer_id filter: each query returns rows where\n* `peer_id = peerId OR peer_id = 'global'`. When `query` is supplied the\n* learnings search is narrowed to relevant entries via FTS; decisions and\n* patterns are returned by recency (most recent first, capped at 10 each).\n*\n* @param peerId - CANT peer identifier.\n* @param brainDb - Drizzle brain database handle.\n* @param query - Optional search term to scope learnings retrieval.\n* @returns Warm-pass bundle slice: peerLearnings, peerPatterns, decisions.\n*\n* @task T1090\n*/\nasync function fetchPeerMemory(peerId, query) {\n\tconst { getBrainNativeDb } = await import(\"./memory-sqlite2.js\");\n\tconst nativeDb = getBrainNativeDb();\n\tif (!nativeDb) return {\n\t\tpeerLearnings: [],\n\t\tpeerPatterns: [],\n\t\tdecisions: []\n\t};\n\tconst peerFilter = peerId !== \"global\";\n\tconst learningSqlWithPeer = `SELECT id, insight, created_at, provenance_class FROM brain_learnings\n WHERE (peer_id = ? OR peer_id = 'global')\n ORDER BY created_at DESC LIMIT 10`;\n\tconst learningSqlGlobal = `SELECT id, insight, created_at, provenance_class FROM brain_learnings\n WHERE peer_id = 'global'\n ORDER BY created_at DESC LIMIT 10`;\n\tconst learningSqlLegacy = \"SELECT id, insight, created_at FROM brain_learnings ORDER BY created_at DESC LIMIT 10\";\n\tlet learningRows = [];\n\ttry {\n\t\tlearningRows = peerFilter ? nativeDb.prepare(learningSqlWithPeer).all(peerId) : nativeDb.prepare(learningSqlGlobal).all();\n\t} catch {\n\t\ttry {\n\t\t\tlearningRows = nativeDb.prepare(learningSqlLegacy).all();\n\t\t} catch {\n\t\t\tlearningRows = [];\n\t\t}\n\t}\n\tconst patternSqlWithPeer = `SELECT id, pattern, extracted_at, provenance_class FROM brain_patterns\n WHERE (peer_id = ? OR peer_id = 'global')\n ORDER BY extracted_at DESC LIMIT 10`;\n\tconst patternSqlGlobal = `SELECT id, pattern, extracted_at, provenance_class FROM brain_patterns\n WHERE peer_id = 'global'\n ORDER BY extracted_at DESC LIMIT 10`;\n\tconst patternSqlLegacy = \"SELECT id, pattern, extracted_at FROM brain_patterns ORDER BY extracted_at DESC LIMIT 10\";\n\tlet patternRows = [];\n\ttry {\n\t\tpatternRows = peerFilter ? nativeDb.prepare(patternSqlWithPeer).all(peerId) : nativeDb.prepare(patternSqlGlobal).all();\n\t} catch {\n\t\ttry {\n\t\t\tpatternRows = nativeDb.prepare(patternSqlLegacy).all();\n\t\t} catch {\n\t\t\tpatternRows = [];\n\t\t}\n\t}\n\tconst decisionSqlWithPeer = `SELECT id, decision, created_at, provenance_class FROM brain_decisions\n WHERE (peer_id = ? OR peer_id = 'global')\n ORDER BY created_at DESC LIMIT 10`;\n\tconst decisionSqlGlobal = `SELECT id, decision, created_at, provenance_class FROM brain_decisions\n WHERE peer_id = 'global'\n ORDER BY created_at DESC LIMIT 10`;\n\tconst decisionSqlLegacy = \"SELECT id, decision, created_at FROM brain_decisions ORDER BY created_at DESC LIMIT 10\";\n\tlet decisionRows = [];\n\ttry {\n\t\tdecisionRows = peerFilter ? nativeDb.prepare(decisionSqlWithPeer).all(peerId) : nativeDb.prepare(decisionSqlGlobal).all();\n\t} catch {\n\t\ttry {\n\t\t\tdecisionRows = nativeDb.prepare(decisionSqlLegacy).all();\n\t\t} catch {\n\t\t\tdecisionRows = [];\n\t\t}\n\t}\n\treturn {\n\t\tpeerLearnings: learningRows.map((r) => ({\n\t\t\tid: r.id,\n\t\t\tinsight: r.insight,\n\t\t\tcreatedAt: r.created_at,\n\t\t\tprovenanceClass: r.provenance_class ?? \"unswept-pre-T1151\"\n\t\t})),\n\t\tpeerPatterns: patternRows.map((r) => ({\n\t\t\tid: r.id,\n\t\t\tpattern: r.pattern,\n\t\t\textractedAt: r.extracted_at,\n\t\t\tprovenanceClass: r.provenance_class ?? \"unswept-pre-T1151\"\n\t\t})),\n\t\tdecisions: decisionRows.map((r) => ({\n\t\t\tid: r.id,\n\t\t\tdecision: r.decision,\n\t\t\tcreatedAt: r.created_at,\n\t\t\tprovenanceClass: r.provenance_class ?? \"unswept-pre-T1151\"\n\t\t}))\n\t};\n}\n/**\n* Hot pass — fetch live session state: narrative + recent observations + active tasks.\n*\n* Calls `getSessionNarrative(sessionId)` from Wave 3 (T1089).\n* Active tasks are queried from tasks.db via the DataAccessor.\n*\n* @param sessionId - Active session identifier.\n* @param projectRoot - Project root for DB resolution (tasks.db + brain.db).\n* @returns Hot-pass bundle slice: sessionNarrative, recentObservations, activeTasks.\n*\n* @task T1090\n*/\nasync function fetchSessionState(sessionId, projectRoot) {\n\tconst { getSessionNarrative } = await import(\"./session-narrative.js\");\n\tlet sessionNarrative = \"\";\n\ttry {\n\t\tconst { getBrainDb } = await import(\"./memory-sqlite2.js\");\n\t\tawait getBrainDb(projectRoot);\n\t\tsessionNarrative = (await getSessionNarrative(sessionId))?.narrative ?? \"\";\n\t} catch {}\n\tconst { getBrainNativeDb } = await import(\"./memory-sqlite2.js\");\n\tconst nativeDb = getBrainNativeDb();\n\tlet recentObservations = [];\n\tif (nativeDb) try {\n\t\trecentObservations = nativeDb.prepare(`SELECT id, title, narrative, created_at, provenance_class\n FROM brain_observations\n WHERE source_session_id = ?\n ORDER BY created_at DESC, id DESC LIMIT 10`).all(sessionId).map((r) => ({\n\t\t\tid: r.id,\n\t\t\ttitle: r.title,\n\t\t\tnarrative: r.narrative ?? \"\",\n\t\t\tcreatedAt: r.created_at,\n\t\t\tprovenanceClass: r.provenance_class ?? \"unswept-pre-T1151\"\n\t\t}));\n\t} catch {\n\t\trecentObservations = [];\n\t}\n\tlet activeTasks = [];\n\ttry {\n\t\tconst { getTaskAccessor } = await import(\"./data-accessor.js\");\n\t\tconst { tasks } = await (await getTaskAccessor(projectRoot)).queryTasks({\n\t\t\tstatus: [\"active\", \"in_progress\"],\n\t\t\tlimit: 10\n\t\t});\n\t\tactiveTasks = tasks.map((t) => ({\n\t\t\tid: t.id,\n\t\t\ttitle: t.title,\n\t\t\tstatus: t.status\n\t\t}));\n\t} catch {\n\t\tactiveTasks = [];\n\t}\n\treturn {\n\t\tsessionNarrative,\n\t\trecentObservations,\n\t\tactiveTasks\n\t};\n}\n/**\n* Build a structured multi-pass retrieval bundle for agent briefing.\n*\n* Executes up to three passes in parallel (controlled by `passMask`):\n*\n* - **Cold** (20 % of budget): user-profile traits + peer instructions\n* - **Warm** (50 % of budget): peer-scoped learnings, patterns, decisions\n* - **Hot** (30 % of budget): session narrative + recent observations + active tasks\n*\n* When the total token estimate exceeds `tokenBudget`, the hot pass is trimmed\n* first (observations then tasks) to preserve the more stable cold/warm context.\n*\n* This function is the primary entry point consumed by `computeBriefing` in\n* `packages/core/src/sessions/briefing.ts` (T1091).\n*\n* @param req - Retrieval request with peerId, sessionId, optional query and passMask.\n* @param projectRoot - Project root directory for DB resolution.\n* @returns Fully-structured `RetrievalBundle` with token accounting.\n*\n* @example\n* ```ts\n* const bundle = await buildRetrievalBundle(\n* { peerId: 'cleo-prime', sessionId: 'ses_abc', passMask: { cold: true, warm: true, hot: true } },\n* '/mnt/projects/cleocode',\n* );\n* console.log(bundle.cold.userProfile.length, 'profile traits');\n* ```\n*\n* @task T1090\n* @epic T1083\n*/\nasync function buildRetrievalBundle(req, projectRoot) {\n\tconst { peerId, sessionId, query, passMask = DEFAULT_PASS_MASK, tokenBudget = DEFAULT_TOKEN_BUDGET } = req;\n\tconst mask = {\n\t\t...DEFAULT_PASS_MASK,\n\t\t...passMask\n\t};\n\tconst coldBudget = Math.floor(tokenBudget * COLD_BUDGET_FRACTION);\n\tconst hotBudget = Math.floor(tokenBudget * HOT_BUDGET_FRACTION);\n\tconst [coldResult, warmResult, hotResult] = await Promise.all([\n\t\tmask.cold ? (async () => {\n\t\t\ttry {\n\t\t\t\tconst { getNexusDb } = await import(\"./nexus-sqlite.js\");\n\t\t\t\treturn await fetchIdentity(peerId, await getNexusDb());\n\t\t\t} catch {\n\t\t\t\treturn {\n\t\t\t\t\tuserProfile: [],\n\t\t\t\t\tpeerInstructions: \"\",\n\t\t\t\t\tsigilCard: null\n\t\t\t\t};\n\t\t\t}\n\t\t})() : Promise.resolve({\n\t\t\tuserProfile: [],\n\t\t\tpeerInstructions: \"\",\n\t\t\tsigilCard: null\n\t\t}),\n\t\tmask.warm ? (async () => {\n\t\t\ttry {\n\t\t\t\tconst { getBrainDb } = await import(\"./memory-sqlite2.js\");\n\t\t\t\tawait getBrainDb(projectRoot);\n\t\t\t\treturn await fetchPeerMemory(peerId, query);\n\t\t\t} catch {\n\t\t\t\treturn {\n\t\t\t\t\tpeerLearnings: [],\n\t\t\t\t\tpeerPatterns: [],\n\t\t\t\t\tdecisions: []\n\t\t\t\t};\n\t\t\t}\n\t\t})() : Promise.resolve({\n\t\t\tpeerLearnings: [],\n\t\t\tpeerPatterns: [],\n\t\t\tdecisions: []\n\t\t}),\n\t\tmask.hot ? fetchSessionState(sessionId, projectRoot) : Promise.resolve({\n\t\t\tsessionNarrative: \"\",\n\t\t\trecentObservations: [],\n\t\t\tactiveTasks: []\n\t\t})\n\t]);\n\tconst REFUSED_CLASS = \"unswept-pre-T1151\";\n\tconst refusedWarmLearnings = warmResult.peerLearnings.filter((e) => e.provenanceClass === REFUSED_CLASS);\n\tconst acceptedWarmLearnings = warmResult.peerLearnings.filter((e) => e.provenanceClass !== REFUSED_CLASS);\n\tconst refusedWarmPatterns = warmResult.peerPatterns.filter((e) => e.provenanceClass === REFUSED_CLASS);\n\tconst acceptedWarmPatterns = warmResult.peerPatterns.filter((e) => e.provenanceClass !== REFUSED_CLASS);\n\tconst refusedWarmDecisions = warmResult.decisions.filter((e) => e.provenanceClass === REFUSED_CLASS);\n\tconst acceptedWarmDecisions = warmResult.decisions.filter((e) => e.provenanceClass !== REFUSED_CLASS);\n\tconst refusedHotObservations = hotResult.recentObservations.filter((e) => e.provenanceClass === REFUSED_CLASS);\n\tconst acceptedHotObservations = hotResult.recentObservations.filter((e) => e.provenanceClass !== REFUSED_CLASS);\n\tconst refusedCount = refusedWarmLearnings.length + refusedWarmPatterns.length + refusedWarmDecisions.length + refusedHotObservations.length;\n\tif (refusedCount > 0) console.warn(`[buildRetrievalBundle] M6 refusal gate: refused ${refusedCount} entries with provenanceClass='unswept-pre-T1151'. Run T1147 W7 sweep (.132) to promote entries to 'swept-clean'. Bundle may be empty until sweep completes.`);\n\tconst filteredWarmResult = {\n\t\tpeerLearnings: acceptedWarmLearnings,\n\t\tpeerPatterns: acceptedWarmPatterns,\n\t\tdecisions: acceptedWarmDecisions\n\t};\n\tconst filteredHotObservations = acceptedHotObservations;\n\tlet coldTokens = 0;\n\tfor (const trait of coldResult.userProfile) coldTokens += estimateTokens(`${trait.traitKey}:${trait.traitValue}`);\n\tcoldTokens += estimateTokens(coldResult.peerInstructions);\n\tlet warmTokens = 0;\n\tfor (const l of filteredWarmResult.peerLearnings) warmTokens += estimateTokens(l.insight);\n\tfor (const p of filteredWarmResult.peerPatterns) warmTokens += estimateTokens(p.pattern);\n\tfor (const d of filteredWarmResult.decisions) warmTokens += estimateTokens(d.decision);\n\tlet hotTokens = estimateTokens(hotResult.sessionNarrative);\n\tfor (const o of filteredHotObservations) hotTokens += estimateTokens(o.narrative || o.title);\n\tfor (const t of hotResult.activeTasks) hotTokens += estimateTokens(`${t.id} ${t.title}`);\n\tlet trimmedObservations = filteredHotObservations;\n\tlet trimmedTasks = hotResult.activeTasks;\n\tif (coldTokens + warmTokens + hotTokens > tokenBudget) {\n\t\tconst hotAllowed = tokenBudget - coldTokens - warmTokens;\n\t\tconst effectiveHotBudget = Math.max(0, Math.min(hotBudget, hotAllowed));\n\t\tlet usedHot = estimateTokens(hotResult.sessionNarrative);\n\t\ttrimmedObservations = [];\n\t\tfor (const obs of filteredHotObservations) {\n\t\t\tconst cost = estimateTokens(obs.narrative || obs.title);\n\t\t\tif (usedHot + cost <= effectiveHotBudget) {\n\t\t\t\ttrimmedObservations.push(obs);\n\t\t\t\tusedHot += cost;\n\t\t\t}\n\t\t}\n\t\ttrimmedTasks = [];\n\t\tfor (const task of hotResult.activeTasks) {\n\t\t\tconst cost = estimateTokens(`${task.id} ${task.title}`);\n\t\t\tif (usedHot + cost <= effectiveHotBudget) {\n\t\t\t\ttrimmedTasks.push(task);\n\t\t\t\tusedHot += cost;\n\t\t\t}\n\t\t}\n\t\thotTokens = usedHot;\n\t}\n\tlet trimmedProfile = coldResult.userProfile;\n\tif (coldTokens > coldBudget) {\n\t\tlet usedCold = estimateTokens(coldResult.peerInstructions);\n\t\ttrimmedProfile = [];\n\t\tfor (const trait of coldResult.userProfile) {\n\t\t\tconst cost = estimateTokens(`${trait.traitKey}:${trait.traitValue}`);\n\t\t\tif (usedCold + cost <= coldBudget) {\n\t\t\t\ttrimmedProfile.push(trait);\n\t\t\t\tusedCold += cost;\n\t\t\t}\n\t\t}\n\t\tcoldTokens = usedCold;\n\t}\n\tconst total = coldTokens + warmTokens + hotTokens;\n\treturn {\n\t\tcold: {\n\t\t\tuserProfile: trimmedProfile,\n\t\t\tpeerInstructions: coldResult.peerInstructions,\n\t\t\tsigilCard: coldResult.sigilCard ?? null\n\t\t},\n\t\twarm: {\n\t\t\tpeerLearnings: filteredWarmResult.peerLearnings,\n\t\t\tpeerPatterns: filteredWarmResult.peerPatterns,\n\t\t\tdecisions: filteredWarmResult.decisions\n\t\t},\n\t\thot: {\n\t\t\tsessionNarrative: hotResult.sessionNarrative,\n\t\t\trecentObservations: trimmedObservations,\n\t\t\tactiveTasks: trimmedTasks\n\t\t},\n\t\ttokenCounts: {\n\t\t\tcold: coldTokens,\n\t\t\twarm: warmTokens,\n\t\t\thot: hotTokens,\n\t\t\ttotal\n\t\t}\n\t};\n}\n//#endregion\n//#region ../core/dist/memory/retrieval/get-current-session-id.js\n/**\n* Get the CALLER's current session ID, env-first (T11344 · Epic T11284).\n*\n* Best-effort: returns undefined when no session can be resolved or the store\n* is unavailable. Used by logRetrieval to group memory retrievals by session.\n*\n* T11344 — routes through the canonical `resolveCurrentSessionId` (env-first)\n* instead of `sessionStatus` (most-recent active row). This is the memory\n* scope-leakage fix: a spawned agent's memory retrievals are now grouped under\n* ITS `CLEO_SESSION_ID`, not under whichever session last touched the DB.\n*\n* @param projectRoot - Project root directory\n* @returns Current session ID or undefined if unavailable\n* @task T11344\n*/\nasync function getCurrentSessionId(projectRoot) {\n\ttry {\n\t\tconst { resolveCurrentSessionId } = await import(\"./session-store2.js\");\n\t\treturn await resolveCurrentSessionId(projectRoot) ?? void 0;\n\t} catch {\n\t\treturn;\n\t}\n}\n//#endregion\n//#region ../core/dist/memory/retrieval/increment-citation-counts.js\n/**\n* Increment citationCount for a list of entry IDs.\n*\n* Routes each ID to the correct table based on its ID prefix. All updates\n* are best-effort — errors are silently swallowed.\n*\n* @param projectRoot - Project root for brain.db resolution\n* @param ids - Entry IDs whose citation counts should be incremented\n*/\nasync function incrementCitationCounts(projectRoot, ids) {\n\tif (ids.length === 0) return;\n\tconst { getBrainDb, getBrainNativeDb } = await import(\"./memory-sqlite2.js\");\n\tawait getBrainDb(projectRoot);\n\tconst nativeDb = getBrainNativeDb(projectRoot);\n\tif (!nativeDb) return;\n\tconst now = (/* @__PURE__ */ new Date()).toISOString().replace(\"T\", \" \").slice(0, 19);\n\tfor (const id of ids) {\n\t\tlet table;\n\t\tif (id.startsWith(\"D-\") || /^D\\d/.test(id)) table = \"brain_decisions\";\n\t\telse if (id.startsWith(\"P-\") || /^P\\d/.test(id)) table = \"brain_patterns\";\n\t\telse if (id.startsWith(\"L-\") || /^L\\d/.test(id)) table = \"brain_learnings\";\n\t\telse table = \"brain_observations\";\n\t\ttry {\n\t\t\tnativeDb.prepare(`UPDATE ${table} SET citation_count = citation_count + 1, updated_at = ? WHERE id = ?`).run(now, id);\n\t\t} catch {}\n\t}\n}\n//#endregion\n//#region ../core/dist/memory/retrieval/log-retrieval.js\n/**\n* Log a retrieval event to brain_retrieval_log for co-retrieval analysis.\n*\n* Creates the table on first use if it doesn't exist (self-healing).\n* Best-effort: errors are silently swallowed.\n*\n* @param projectRoot - Project root directory\n* @param query - The search query or fetch IDs\n* @param entryIds - Array of entry IDs returned in this retrieval\n* @param source - Retrieval source ('find', 'fetch', 'hybrid', 'timeline', 'budget')\n* @param tokensUsed - Estimated tokens consumed (optional)\n* @param sessionId - Session ID for grouping retrievals by session (optional, soft FK to tasks.db)\n*/\nasync function logRetrieval(projectRoot, query, entryIds, source, tokensUsed, sessionId) {\n\tif (entryIds.length === 0) return;\n\tconst { getBrainDb, getBrainNativeDb } = await import(\"./memory-sqlite2.js\");\n\tawait getBrainDb(projectRoot);\n\tconst nativeDb = getBrainNativeDb(projectRoot);\n\tif (!nativeDb) return;\n\tconst createSql = \"CREATE TABLE IF NOT EXISTS brain_retrieval_log (id INTEGER PRIMARY KEY AUTOINCREMENT,query TEXT NOT NULL,entry_ids TEXT NOT NULL,entry_count INTEGER NOT NULL,source TEXT NOT NULL,tokens_used INTEGER,session_id TEXT,created_at TEXT NOT NULL DEFAULT (datetime('now')))\";\n\ttry {\n\t\tnativeDb.prepare(createSql).run();\n\t} catch {\n\t\treturn;\n\t}\n\ttry {\n\t\tnativeDb.prepare(\"INSERT INTO brain_retrieval_log (query, entry_ids, entry_count, source, tokens_used, session_id) VALUES (?, ?, ?, ?, ?, ?)\").run(query, JSON.stringify(entryIds), entryIds.length, source, tokensUsed ?? null, sessionId ?? null);\n\t} catch {}\n}\n//#endregion\n//#region ../core/dist/memory/retrieval/search.js\n/**\n* BRAIN Search — Layer 1 compact search + budget-aware hybrid retrieval.\n*\n* Provides two search entry points:\n* - searchBrainCompact: token-efficient index-level search (~50 tokens/hit)\n* - retrieveWithBudget: multi-strategy (FTS5 + vector + graph) within a token budget\n*\n* @task T5131\n* @epic T5149\n*/\n/**\n* Token-efficient compact search across BRAIN tables.\n* Returns index-level hits (~50 tokens per result).\n*\n* Delegates to searchBrain() from brain-search.ts for FTS5/LIKE search,\n* then projects results to a compact format with optional date filtering.\n*\n* @param projectRoot - Project root directory\n* @param params - Search parameters\n* @returns Compact search results with token estimate\n*\n* @example\n* ```ts\n* // Search for observations related to authentication decisions.\n* // Returns compact hits (~50 tokens each) from BRAIN tables.\n* const result = await searchBrainCompact('/path/to/project', {\n* query: 'authentication decisions',\n* limit: 5,\n* tables: ['decisions', 'observations'],\n* });\n*\n* // Result shape: { results: BrainCompactHit[], total: number, tokensEstimated: number }\n* console.assert(typeof result.total === 'number', 'total is a number');\n* console.assert(Array.isArray(result.results), 'results is an array');\n* console.assert(typeof result.tokensEstimated === 'number', 'tokensEstimated present');\n* ```\n*/\nasync function searchBrainCompact(projectRoot, params) {\n\tconst { query, limit, tables, dateStart, dateEnd, agent, useRRF = true, peerId, includeGlobal, mode, since } = params;\n\tif (!query?.trim()) return {\n\t\tresults: [],\n\t\ttotal: 0,\n\t\ttokensEstimated: 0\n\t};\n\tconst effectiveLimit = limit ?? 10;\n\tconst agentFilter = agent !== void 0 && agent !== null;\n\tif (mode === \"recency\" && !agentFilter) {\n\t\tconst { getBrainDb, getBrainNativeDb } = await import(\"./memory-sqlite2.js\");\n\t\tawait getBrainDb(projectRoot);\n\t\tconst nativeDb = getBrainNativeDb(projectRoot);\n\t\tif (!nativeDb) return {\n\t\t\tresults: [],\n\t\t\ttotal: 0,\n\t\t\ttokensEstimated: 0\n\t\t};\n\t\tconst targetTables = tables && tables.length > 0 ? tables : [\n\t\t\t\"observations\",\n\t\t\t\"learnings\",\n\t\t\t\"patterns\",\n\t\t\t\"decisions\"\n\t\t];\n\t\tconst sinceClause = since ? ` AND created_at >= '${since}'` : \"\";\n\t\tconst dateStartClause = dateStart ? ` AND created_at >= '${dateStart}'` : \"\";\n\t\tconst dateEndClause = dateEnd ? ` AND created_at <= '${dateEnd}'` : \"\";\n\t\tconst perTableLimit = effectiveLimit * 2;\n\t\tconst results = [];\n\t\tfor (const table of targetTables) {\n\t\t\tlet sql;\n\t\t\tif (table === \"observations\") sql = `SELECT id, title, created_at FROM brain_observations WHERE 1=1${sinceClause}${dateStartClause}${dateEndClause} ORDER BY created_at DESC LIMIT ${perTableLimit}`;\n\t\t\telse if (table === \"learnings\") sql = `SELECT id, insight AS title, created_at FROM brain_learnings WHERE 1=1${sinceClause}${dateStartClause}${dateEndClause} ORDER BY created_at DESC LIMIT ${perTableLimit}`;\n\t\t\telse if (table === \"patterns\") sql = `SELECT id, pattern AS title, extracted_at AS created_at FROM brain_patterns WHERE 1=1${since ? ` AND extracted_at >= '${since}'` : \"\"}${dateStart ? ` AND extracted_at >= '${dateStart}'` : \"\"}${dateEnd ? ` AND extracted_at <= '${dateEnd}'` : \"\"} ORDER BY extracted_at DESC LIMIT ${perTableLimit}`;\n\t\t\telse sql = `SELECT id, decision AS title, created_at FROM brain_decisions WHERE 1=1${sinceClause}${dateStartClause}${dateEndClause} ORDER BY created_at DESC LIMIT ${perTableLimit}`;\n\t\t\ttry {\n\t\t\t\tconst rows = nativeDb.prepare(sql).all();\n\t\t\t\tfor (const row of rows) results.push({\n\t\t\t\t\tid: row.id,\n\t\t\t\t\ttype: table.replace(/s$/, \"\"),\n\t\t\t\t\ttitle: (row.title ?? \"\").slice(0, 80),\n\t\t\t\t\tdate: row.created_at ?? \"\",\n\t\t\t\t\trelevance: 0\n\t\t\t\t});\n\t\t\t} catch {}\n\t\t}\n\t\tresults.sort((a, b) => b.date > a.date ? 1 : b.date < a.date ? -1 : 0);\n\t\tconst trimmed = results.slice(0, effectiveLimit);\n\t\tfor (const hit of trimmed) hit._next = memoryFindHitNext(hit.id);\n\t\treturn {\n\t\t\tresults: trimmed,\n\t\t\ttotal: trimmed.length,\n\t\t\ttokensEstimated: trimmed.length * 50\n\t\t};\n\t}\n\tif (useRRF && !agentFilter && mode !== \"lexical\" || mode === \"hybrid\" && !agentFilter) {\n\t\tconst [ftsResult, rrfResults] = await Promise.all([searchBrain(projectRoot, query, {\n\t\t\tlimit: effectiveLimit * 3,\n\t\t\ttables,\n\t\t\tpeerId,\n\t\t\tincludeGlobal\n\t\t}).catch(() => ({\n\t\t\tdecisions: [],\n\t\t\tpatterns: [],\n\t\t\tlearnings: [],\n\t\t\tobservations: []\n\t\t})), hybridSearch(query, projectRoot, { limit: effectiveLimit * 2 })]);\n\t\tconst dateMap = /* @__PURE__ */ new Map();\n\t\tfor (const d of ftsResult.decisions) {\n\t\t\tconst raw = d;\n\t\t\tdateMap.set(d.id, (d.createdAt ?? raw[\"created_at\"]) || \"\");\n\t\t}\n\t\tfor (const p of ftsResult.patterns) {\n\t\t\tconst raw = p;\n\t\t\tdateMap.set(p.id, (p.extractedAt ?? raw[\"extracted_at\"]) || \"\");\n\t\t}\n\t\tfor (const l of ftsResult.learnings) {\n\t\t\tconst raw = l;\n\t\t\tdateMap.set(l.id, (l.createdAt ?? raw[\"created_at\"]) || \"\");\n\t\t}\n\t\tfor (const o of ftsResult.observations) {\n\t\t\tconst raw = o;\n\t\t\tdateMap.set(o.id, (o.createdAt ?? raw[\"created_at\"]) || \"\");\n\t\t}\n\t\tconst singularToTable = {\n\t\t\tdecision: \"decisions\",\n\t\t\tpattern: \"patterns\",\n\t\t\tlearning: \"learnings\",\n\t\t\tobservation: \"observations\"\n\t\t};\n\t\tconst ftsRanks = rrfResults.map((r) => r.ftsRank ?? void 0).filter((v) => v !== void 0);\n\t\tconst maxFtsRank = ftsRanks.length > 0 ? Math.max(...ftsRanks) : 0;\n\t\tconst rrfScores = rrfResults.map((r) => r.score);\n\t\tconst minRrf = rrfScores.length > 0 ? Math.min(...rrfScores) : 0;\n\t\tconst rrfRange = (rrfScores.length > 0 ? Math.max(...rrfScores) : 0) - minRrf;\n\t\tlet results = rrfResults.map((r) => {\n\t\t\tconst bm25Score = r.ftsRank !== void 0 ? 1 - (maxFtsRank > 0 ? r.ftsRank / maxFtsRank : 0) : 0;\n\t\t\tconst rrfScore = r.score;\n\t\t\tconst relevance = rrfRange > 0 ? (r.score - minRrf) / rrfRange : r.score;\n\t\t\treturn {\n\t\t\t\tid: r.id,\n\t\t\t\ttype: r.type,\n\t\t\t\ttitle: r.title.slice(0, 80),\n\t\t\t\tdate: dateMap.get(r.id) ?? \"\",\n\t\t\t\trelevance,\n\t\t\t\trrfScore,\n\t\t\t\tbm25Score\n\t\t\t};\n\t\t}).filter((r) => {\n\t\t\treturn dateMap.has(r.id);\n\t\t});\n\t\tif (tables && tables.length > 0) results = results.filter((r) => tables.includes(singularToTable[r.type]));\n\t\tif (since) results = results.filter((r) => !r.date || r.date >= since);\n\t\tif (dateStart) results = results.filter((r) => !r.date || r.date >= dateStart);\n\t\tif (dateEnd) results = results.filter((r) => !r.date || r.date <= dateEnd);\n\t\tresults = results.slice(0, effectiveLimit);\n\t\tfor (const hit of results) hit._next = memoryFindHitNext(hit.id);\n\t\tif (results.length > 0) {\n\t\t\tconst returnedIds = results.map((r) => r.id);\n\t\t\tsetImmediate(() => {\n\t\t\t\tincrementCitationCounts(projectRoot, returnedIds).catch(() => {});\n\t\t\t\tgetCurrentSessionId(projectRoot).then((sessionId) => {\n\t\t\t\t\treturn logRetrieval(projectRoot, query, returnedIds, \"find-rrf\", results.length * 50, sessionId);\n\t\t\t\t}).catch(() => {});\n\t\t\t});\n\t\t}\n\t\treturn {\n\t\t\tresults,\n\t\t\ttotal: results.length,\n\t\t\ttokensEstimated: results.length * 50\n\t\t};\n\t}\n\tconst searchResult = await searchBrain(projectRoot, query, {\n\t\tlimit: effectiveLimit,\n\t\ttables: agentFilter ? [\"observations\"] : tables,\n\t\tpeerId,\n\t\tincludeGlobal\n\t});\n\tlet results = [];\n\tif (!agentFilter) {\n\t\tfor (const d of searchResult.decisions) {\n\t\t\tconst raw = d;\n\t\t\tresults.push({\n\t\t\t\tid: d.id,\n\t\t\t\ttype: \"decision\",\n\t\t\t\ttitle: d.decision.slice(0, 80),\n\t\t\t\tdate: (d.createdAt ?? raw[\"created_at\"]) || \"\"\n\t\t\t});\n\t\t}\n\t\tfor (const p of searchResult.patterns) {\n\t\t\tconst raw = p;\n\t\t\tresults.push({\n\t\t\t\tid: p.id,\n\t\t\t\ttype: \"pattern\",\n\t\t\t\ttitle: p.pattern.slice(0, 80),\n\t\t\t\tdate: (p.extractedAt ?? raw[\"extracted_at\"]) || \"\"\n\t\t\t});\n\t\t}\n\t\tfor (const l of searchResult.learnings) {\n\t\t\tconst raw = l;\n\t\t\tresults.push({\n\t\t\t\tid: l.id,\n\t\t\t\ttype: \"learning\",\n\t\t\t\ttitle: l.insight.slice(0, 80),\n\t\t\t\tdate: (l.createdAt ?? raw[\"created_at\"]) || \"\"\n\t\t\t});\n\t\t}\n\t}\n\tfor (const o of searchResult.observations) {\n\t\tconst raw = o;\n\t\tif (agentFilter) {\n\t\t\tif ((o.agent ?? raw[\"agent\"] ?? null) !== agent) continue;\n\t\t}\n\t\tresults.push({\n\t\t\tid: o.id,\n\t\t\ttype: \"observation\",\n\t\t\ttitle: o.title.slice(0, 80),\n\t\t\tdate: (o.createdAt ?? raw[\"created_at\"]) || \"\"\n\t\t});\n\t}\n\tif (since) results = results.filter((r) => r.date >= since);\n\tif (dateStart) results = results.filter((r) => r.date >= dateStart);\n\tif (dateEnd) results = results.filter((r) => r.date <= dateEnd);\n\tfor (const hit of results) hit._next = memoryFindHitNext(hit.id);\n\tif (results.length > 0) {\n\t\tconst returnedIds = results.map((r) => r.id);\n\t\tsetImmediate(() => {\n\t\t\tincrementCitationCounts(projectRoot, returnedIds).catch(() => {});\n\t\t\tgetCurrentSessionId(projectRoot).then((sessionId) => {\n\t\t\t\treturn logRetrieval(projectRoot, query, returnedIds, \"find\", results.length * 50, sessionId);\n\t\t\t}).catch(() => {});\n\t\t});\n\t}\n\treturn {\n\t\tresults,\n\t\ttotal: results.length,\n\t\ttokensEstimated: results.length * 50\n\t};\n}\n//#endregion\nexport { fetchSessionState as a, fetchPeerMemory as i, buildRetrievalBundle as n, fetchIdentity as r, searchBrainCompact as t };\n"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"brain-search-CpSh-SNi.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"brain-search2-CwI2cXgg.js","sources":["../../../.svelte-kit/adapter-node/chunks/brain-search2.js"],"sourcesContent":["import { n as getBrainAccessor } from \"./memory-accessor2.js\";\nimport { t as typedAll } from \"./typed-query.js\";\nimport { t as QUALITY_SCORE_THRESHOLD } from \"./quality-scoring.js\";\nimport { t as searchSimilar } from \"./brain-similarity.js\";\n//#region ../core/dist/memory/brain-search.js\n/**\n* Full-text search across BRAIN memory using SQLite FTS5.\n* Uses raw SQL via nativeDb because drizzle doesn't support FTS5 virtual tables.\n*\n* Falls back to LIKE queries if FTS5 is not available (some SQLite builds lack it).\n*\n* @task T5130\n* @epic T5149\n*/\n/** Track whether FTS5 is available in the current SQLite build. */\nvar _fts5Available = null;\n/**\n* Track WHICH brain database has had its FTS tables created and index rebuilt\n* this session — keyed by the resolved `cleo.db` file PATH, NOT a process-wide\n* boolean (and deliberately not by `DatabaseSync` handle identity: a cached\n* handle reference is exactly the per-domain DB singleton the T12041 DB Open\n* Guard exists to prevent).\n*\n* The dual-scope cache guarantees one `DatabaseSync` per `cleo.db` path, so a\n* different path means a different database whose FTS index may not yet\n* contain rows inserted before the content-sync triggers existed. The old\n* process-wide boolean skipped the rebuild for every database after the\n* first: in a multi-project process — and in vitest `--retry` re-attempts,\n* which mint a fresh temp DB per attempt while module state survives —\n* `memory find` then returned zero hits for committed rows (T12101, macOS CI\n* shard 1 flake on PRs #1188/#1191/#1202).\n*\n* Same-path file recreation (close + delete + recreate one `cleo.db` in a\n* single process) is the one case path-keying cannot distinguish; tests that\n* do this already call {@link resetFts5Cache} explicitly.\n*\n* Naming note: the identifier must NOT contain `Db`/`Database`/`Connection`/\n* `Handle` — the T12041 gate regexes module-level `let … = null` declarations\n* for exactly those tokens (scripts/lint-no-domain-db-singleton.mjs).\n*\n* @task T12101\n*/\nvar _fts5RebuiltForPath = null;\n/**\n* Check if FTS5 is available in the current SQLite build.\n*/\nfunction checkFts5Available(nativeDb) {\n\tif (_fts5Available !== null) return _fts5Available;\n\ttry {\n\t\tnativeDb.prepare(\"CREATE VIRTUAL TABLE IF NOT EXISTS _fts5_check USING fts5(test)\").run();\n\t\tnativeDb.prepare(\"DROP TABLE IF EXISTS _fts5_check\").run();\n\t\t_fts5Available = true;\n\t} catch {\n\t\t_fts5Available = false;\n\t}\n\treturn _fts5Available;\n}\n/**\n* Execute a DDL statement using the native database.\n* Wraps nativeDb.prepare().run() for consistent usage.\n*/\nfunction execDDL(nativeDb, sql) {\n\tnativeDb.prepare(sql).run();\n}\n/**\n* Create FTS5 virtual tables and content-sync triggers if they don't exist.\n*\n* Uses content= to sync from main tables, so inserts to main tables\n* auto-populate FTS. UPDATE/DELETE require triggers.\n*\n* @task T5130\n*/\nfunction ensureFts5Tables(nativeDb) {\n\tif (!checkFts5Available(nativeDb)) return false;\n\texecDDL(nativeDb, `\n CREATE VIRTUAL TABLE IF NOT EXISTS brain_decisions_fts\n USING fts5(id, decision, rationale, content=brain_decisions, content_rowid=rowid)\n `);\n\texecDDL(nativeDb, `\n CREATE VIRTUAL TABLE IF NOT EXISTS brain_patterns_fts\n USING fts5(id, pattern, context, content=brain_patterns, content_rowid=rowid)\n `);\n\texecDDL(nativeDb, `\n CREATE VIRTUAL TABLE IF NOT EXISTS brain_learnings_fts\n USING fts5(id, insight, source, content=brain_learnings, content_rowid=rowid)\n `);\n\texecDDL(nativeDb, `\n CREATE TRIGGER IF NOT EXISTS brain_decisions_ai AFTER INSERT ON brain_decisions BEGIN\n INSERT INTO brain_decisions_fts(rowid, id, decision, rationale)\n VALUES (new.rowid, new.id, new.decision, new.rationale);\n END\n `);\n\texecDDL(nativeDb, `\n CREATE TRIGGER IF NOT EXISTS brain_decisions_ad AFTER DELETE ON brain_decisions BEGIN\n INSERT INTO brain_decisions_fts(brain_decisions_fts, rowid, id, decision, rationale)\n VALUES('delete', old.rowid, old.id, old.decision, old.rationale);\n END\n `);\n\texecDDL(nativeDb, `\n CREATE TRIGGER IF NOT EXISTS brain_decisions_au AFTER UPDATE ON brain_decisions BEGIN\n INSERT INTO brain_decisions_fts(brain_decisions_fts, rowid, id, decision, rationale)\n VALUES('delete', old.rowid, old.id, old.decision, old.rationale);\n INSERT INTO brain_decisions_fts(rowid, id, decision, rationale)\n VALUES (new.rowid, new.id, new.decision, new.rationale);\n END\n `);\n\texecDDL(nativeDb, `\n CREATE TRIGGER IF NOT EXISTS brain_patterns_ai AFTER INSERT ON brain_patterns BEGIN\n INSERT INTO brain_patterns_fts(rowid, id, pattern, context)\n VALUES (new.rowid, new.id, new.pattern, new.context);\n END\n `);\n\texecDDL(nativeDb, `\n CREATE TRIGGER IF NOT EXISTS brain_patterns_ad AFTER DELETE ON brain_patterns BEGIN\n INSERT INTO brain_patterns_fts(brain_patterns_fts, rowid, id, pattern, context)\n VALUES('delete', old.rowid, old.id, old.pattern, old.context);\n END\n `);\n\texecDDL(nativeDb, `\n CREATE TRIGGER IF NOT EXISTS brain_patterns_au AFTER UPDATE ON brain_patterns BEGIN\n INSERT INTO brain_patterns_fts(brain_patterns_fts, rowid, id, pattern, context)\n VALUES('delete', old.rowid, old.id, old.pattern, old.context);\n INSERT INTO brain_patterns_fts(rowid, id, pattern, context)\n VALUES (new.rowid, new.id, new.pattern, new.context);\n END\n `);\n\texecDDL(nativeDb, `\n CREATE TRIGGER IF NOT EXISTS brain_learnings_ai AFTER INSERT ON brain_learnings BEGIN\n INSERT INTO brain_learnings_fts(rowid, id, insight, source)\n VALUES (new.rowid, new.id, new.insight, new.source);\n END\n `);\n\texecDDL(nativeDb, `\n CREATE TRIGGER IF NOT EXISTS brain_learnings_ad AFTER DELETE ON brain_learnings BEGIN\n INSERT INTO brain_learnings_fts(brain_learnings_fts, rowid, id, insight, source)\n VALUES('delete', old.rowid, old.id, old.insight, old.source);\n END\n `);\n\texecDDL(nativeDb, `\n CREATE TRIGGER IF NOT EXISTS brain_learnings_au AFTER UPDATE ON brain_learnings BEGIN\n INSERT INTO brain_learnings_fts(brain_learnings_fts, rowid, id, insight, source)\n VALUES('delete', old.rowid, old.id, old.insight, old.source);\n INSERT INTO brain_learnings_fts(rowid, id, insight, source)\n VALUES (new.rowid, new.id, new.insight, new.source);\n END\n `);\n\texecDDL(nativeDb, `\n CREATE VIRTUAL TABLE IF NOT EXISTS brain_observations_fts\n USING fts5(id, title, narrative, content=brain_observations, content_rowid=rowid)\n `);\n\texecDDL(nativeDb, `\n CREATE TRIGGER IF NOT EXISTS brain_observations_ai AFTER INSERT ON brain_observations BEGIN\n INSERT INTO brain_observations_fts(rowid, id, title, narrative)\n VALUES (new.rowid, new.id, new.title, new.narrative);\n END\n `);\n\texecDDL(nativeDb, `\n CREATE TRIGGER IF NOT EXISTS brain_observations_ad AFTER DELETE ON brain_observations BEGIN\n INSERT INTO brain_observations_fts(brain_observations_fts, rowid, id, title, narrative)\n VALUES('delete', old.rowid, old.id, old.title, old.narrative);\n END\n `);\n\texecDDL(nativeDb, `\n CREATE TRIGGER IF NOT EXISTS brain_observations_au AFTER UPDATE ON brain_observations BEGIN\n INSERT INTO brain_observations_fts(brain_observations_fts, rowid, id, title, narrative)\n VALUES('delete', old.rowid, old.id, old.title, old.narrative);\n INSERT INTO brain_observations_fts(rowid, id, title, narrative)\n VALUES (new.rowid, new.id, new.title, new.narrative);\n END\n `);\n\treturn true;\n}\n/**\n* Rebuild FTS5 indexes from the content tables.\n* Useful after bulk inserts that bypass triggers.\n*\n* @task T5130\n*/\nfunction rebuildFts5Index(nativeDb) {\n\tif (!checkFts5Available(nativeDb)) return;\n\tnativeDb.prepare(\"INSERT INTO brain_decisions_fts(brain_decisions_fts) VALUES('rebuild')\").run();\n\tnativeDb.prepare(\"INSERT INTO brain_patterns_fts(brain_patterns_fts) VALUES('rebuild')\").run();\n\tnativeDb.prepare(\"INSERT INTO brain_learnings_fts(brain_learnings_fts) VALUES('rebuild')\").run();\n\ttry {\n\t\tnativeDb.prepare(\"INSERT INTO brain_observations_fts(brain_observations_fts) VALUES('rebuild')\").run();\n\t} catch {}\n}\n/**\n* Unified search across all BRAIN memory tables.\n*\n* Uses FTS5 MATCH for full-text search with BM25 ranking when available,\n* falls back to LIKE queries otherwise.\n*\n* @task T5130\n*/\nasync function searchBrain(projectRoot, query, options) {\n\tif (!query?.trim()) return {\n\t\tdecisions: [],\n\t\tpatterns: [],\n\t\tlearnings: [],\n\t\tobservations: []\n\t};\n\tconst { getBrainDb, getBrainDbPath, getBrainNativeDb } = await import(\"./memory-sqlite2.js\");\n\tawait getBrainDb(projectRoot);\n\tconst nativeDb = getBrainNativeDb(projectRoot);\n\tif (!nativeDb) return {\n\t\tdecisions: [],\n\t\tpatterns: [],\n\t\tlearnings: [],\n\t\tobservations: []\n\t};\n\tconst limit = options?.limit ?? 10;\n\tconst tables = options?.tables ?? [\n\t\t\"decisions\",\n\t\t\"patterns\",\n\t\t\"learnings\",\n\t\t\"observations\"\n\t];\n\tconst peerId = options?.peerId;\n\tconst includeGlobal = options?.includeGlobal ?? true;\n\tif (ensureFts5Tables(nativeDb)) {\n\t\tif (_fts5RebuiltForPath !== getBrainDbPath(projectRoot)) {\n\t\t\t_fts5RebuiltForPath = getBrainDbPath(projectRoot);\n\t\t\trebuildFts5Index(nativeDb);\n\t\t}\n\t\treturn searchWithFts5(nativeDb, query, tables, limit, peerId, includeGlobal);\n\t}\n\treturn searchWithLike(nativeDb, query, tables, limit, peerId, includeGlobal);\n}\n/**\n* Build a SQL peer isolation clause and the corresponding bind parameters.\n*\n* When `peerId` is undefined the clause is empty string (no filter applied).\n* When `peerId` is provided and `includeGlobal` is true (default), the clause\n* is `AND (t.peer_id = ? OR t.peer_id = 'global')`.\n* When `includeGlobal` is false, the clause is `AND t.peer_id = ?`.\n*\n* The `tableAlias` must match the alias used for the main table in the query.\n*\n* @internal\n*/\nfunction buildPeerClause(tableAlias, peerId, includeGlobal) {\n\tif (!peerId) return {\n\t\tclause: \"\",\n\t\tparams: []\n\t};\n\tif (includeGlobal) return {\n\t\tclause: ` AND (${tableAlias}.peer_id = ? OR ${tableAlias}.peer_id = 'global')`,\n\t\tparams: [peerId]\n\t};\n\treturn {\n\t\tclause: ` AND ${tableAlias}.peer_id = ?`,\n\t\tparams: [peerId]\n\t};\n}\n/**\n* Search using FTS5 MATCH with BM25 ranking.\n*/\nfunction searchWithFts5(nativeDb, query, tables, limit, peerId, includeGlobal = true) {\n\tconst result = {\n\t\tdecisions: [],\n\t\tpatterns: [],\n\t\tlearnings: [],\n\t\tobservations: []\n\t};\n\tconst fts5Queries = buildFts5Queries(query);\n\tif (tables.includes(\"decisions\")) {\n\t\tconst { clause, params } = buildPeerClause(\"d\", peerId, includeGlobal);\n\t\ttry {\n\t\t\tconst stmt = nativeDb.prepare(`\n SELECT d.*\n FROM brain_decisions_fts fts\n JOIN brain_decisions d ON d.rowid = fts.rowid\n WHERE brain_decisions_fts MATCH ?\n AND (d.quality_score IS NULL OR d.quality_score >= ?)\n ${clause}\n ORDER BY bm25(brain_decisions_fts)\n LIMIT ?\n `);\n\t\t\tresult.decisions = matchConjunctiveFirst((matchExpr) => typedAll(stmt, matchExpr, QUALITY_SCORE_THRESHOLD, ...params, limit), fts5Queries);\n\t\t} catch {\n\t\t\tresult.decisions = likeSearchDecisions(nativeDb, query, limit, peerId, includeGlobal);\n\t\t}\n\t}\n\tif (tables.includes(\"patterns\")) {\n\t\tconst { clause, params } = buildPeerClause(\"p\", peerId, includeGlobal);\n\t\ttry {\n\t\t\tconst stmt = nativeDb.prepare(`\n SELECT p.*\n FROM brain_patterns_fts fts\n JOIN brain_patterns p ON p.rowid = fts.rowid\n WHERE brain_patterns_fts MATCH ?\n AND (p.quality_score IS NULL OR p.quality_score >= ?)\n ${clause}\n ORDER BY bm25(brain_patterns_fts)\n LIMIT ?\n `);\n\t\t\tresult.patterns = matchConjunctiveFirst((matchExpr) => typedAll(stmt, matchExpr, QUALITY_SCORE_THRESHOLD, ...params, limit), fts5Queries);\n\t\t} catch {\n\t\t\tresult.patterns = likeSearchPatterns(nativeDb, query, limit, peerId, includeGlobal);\n\t\t}\n\t}\n\tif (tables.includes(\"learnings\")) {\n\t\tconst { clause, params } = buildPeerClause(\"l\", peerId, includeGlobal);\n\t\ttry {\n\t\t\tconst stmt = nativeDb.prepare(`\n SELECT l.*\n FROM brain_learnings_fts fts\n JOIN brain_learnings l ON l.rowid = fts.rowid\n WHERE brain_learnings_fts MATCH ?\n AND (l.quality_score IS NULL OR l.quality_score >= ?)\n ${clause}\n ORDER BY bm25(brain_learnings_fts)\n LIMIT ?\n `);\n\t\t\tresult.learnings = matchConjunctiveFirst((matchExpr) => typedAll(stmt, matchExpr, QUALITY_SCORE_THRESHOLD, ...params, limit), fts5Queries);\n\t\t} catch {\n\t\t\tresult.learnings = likeSearchLearnings(nativeDb, query, limit, peerId, includeGlobal);\n\t\t}\n\t}\n\tif (tables.includes(\"observations\")) {\n\t\tconst { clause, params } = buildPeerClause(\"o\", peerId, includeGlobal);\n\t\ttry {\n\t\t\tconst stmt = nativeDb.prepare(`\n SELECT o.*\n FROM brain_observations_fts fts\n JOIN brain_observations o ON o.rowid = fts.rowid\n WHERE brain_observations_fts MATCH ?\n AND (o.quality_score IS NULL OR o.quality_score >= ?)\n ${clause}\n ORDER BY bm25(brain_observations_fts)\n LIMIT ?\n `);\n\t\t\tresult.observations = matchConjunctiveFirst((matchExpr) => typedAll(stmt, matchExpr, QUALITY_SCORE_THRESHOLD, ...params, limit), fts5Queries);\n\t\t} catch {\n\t\t\tresult.observations = likeSearchObservations(nativeDb, query, limit, peerId, includeGlobal);\n\t\t}\n\t}\n\treturn result;\n}\n/**\n* Search using LIKE queries as fallback when FTS5 is unavailable.\n*/\nfunction searchWithLike(nativeDb, query, tables, limit, peerId, includeGlobal = true) {\n\tconst result = {\n\t\tdecisions: [],\n\t\tpatterns: [],\n\t\tlearnings: [],\n\t\tobservations: []\n\t};\n\tif (tables.includes(\"decisions\")) result.decisions = likeSearchDecisions(nativeDb, query, limit, peerId, includeGlobal);\n\tif (tables.includes(\"patterns\")) result.patterns = likeSearchPatterns(nativeDb, query, limit, peerId, includeGlobal);\n\tif (tables.includes(\"learnings\")) result.learnings = likeSearchLearnings(nativeDb, query, limit, peerId, includeGlobal);\n\tif (tables.includes(\"observations\")) result.observations = likeSearchObservations(nativeDb, query, limit, peerId, includeGlobal);\n\treturn result;\n}\nfunction likeSearchDecisions(nativeDb, query, limit, peerId, includeGlobal = true) {\n\tconst likePattern = `%${query}%`;\n\tconst { clause, params } = buildPeerClause(\"brain_decisions\", peerId, includeGlobal);\n\treturn typedAll(nativeDb.prepare(`\n SELECT * FROM brain_decisions\n WHERE (decision LIKE ? OR rationale LIKE ?)\n AND (quality_score IS NULL OR quality_score >= ?)\n ${clause}\n ORDER BY created_at DESC\n LIMIT ?\n `), likePattern, likePattern, QUALITY_SCORE_THRESHOLD, ...params, limit);\n}\nfunction likeSearchPatterns(nativeDb, query, limit, peerId, includeGlobal = true) {\n\tconst likePattern = `%${query}%`;\n\tconst { clause, params } = buildPeerClause(\"brain_patterns\", peerId, includeGlobal);\n\treturn typedAll(nativeDb.prepare(`\n SELECT * FROM brain_patterns\n WHERE (pattern LIKE ? OR context LIKE ?)\n AND (quality_score IS NULL OR quality_score >= ?)\n ${clause}\n ORDER BY frequency DESC\n LIMIT ?\n `), likePattern, likePattern, QUALITY_SCORE_THRESHOLD, ...params, limit);\n}\nfunction likeSearchLearnings(nativeDb, query, limit, peerId, includeGlobal = true) {\n\tconst likePattern = `%${query}%`;\n\tconst { clause, params } = buildPeerClause(\"brain_learnings\", peerId, includeGlobal);\n\treturn typedAll(nativeDb.prepare(`\n SELECT * FROM brain_learnings\n WHERE (insight LIKE ? OR source LIKE ?)\n AND (quality_score IS NULL OR quality_score >= ?)\n ${clause}\n ORDER BY confidence DESC\n LIMIT ?\n `), likePattern, likePattern, QUALITY_SCORE_THRESHOLD, ...params, limit);\n}\nfunction likeSearchObservations(nativeDb, query, limit, peerId, includeGlobal = true) {\n\tconst likePattern = `%${query}%`;\n\tconst { clause, params } = buildPeerClause(\"brain_observations\", peerId, includeGlobal);\n\treturn typedAll(nativeDb.prepare(`\n SELECT * FROM brain_observations\n WHERE (title LIKE ? OR narrative LIKE ?)\n AND (quality_score IS NULL OR quality_score >= ?)\n ${clause}\n ORDER BY created_at DESC\n LIMIT ?\n `), likePattern, likePattern, QUALITY_SCORE_THRESHOLD, ...params, limit);\n}\n/**\n* Build the AND and OR MATCH expressions for a natural-language query.\n*\n* ## Why both, and why prefixes (T12073)\n*\n* The previous builder emitted `\"tok1\" OR \"tok2\"` — quoted terms joined by OR.\n* Measured against the live 6,985-observation corpus, that has two failure\n* modes that together make recall useless for anything but an exact rare token:\n*\n* **Quoted terms are exact, so morphological variants are invisible.** A search\n* for `orphan` matched 113 documents; `orphan*` matched 189. Seventy-six\n* documents saying \"orphaned\" or \"orphans\" could not be found by searching for\n* \"orphan\". SQLite FTS5 has no stemmer on the `unicode61` tokenizer, so a\n* prefix wildcard is the available substitute — and it is a good one, because\n* it costs nothing on a prefix-indexed b-tree.\n*\n* **Pure OR plus BM25 ranks by term rarity, not by term coverage.** A short\n* document matching ONE query term outranks a long one matching ALL of them,\n* because BM25 normalises for length. On this corpus that is catastrophic:\n* 30% of observations are sub-60-character auto-capture stubs, so the\n* shortest, emptiest records win. Searching `nexus_symbols_fts orphan` under\n* the old builder returned *\"Consolidated: change observations (5 entries)\"*\n* as the top hit — a record with no content at all — while the conjunctive\n* form returns only documents about orphans in nexus.\n*\n* So: require all terms first, and fall back to ANY only when the conjunction\n* finds nothing. That preserves the recall the OR form was introduced for\n* (T553: non-word tokens like em dashes zeroing out an implicit-AND query)\n* without letting it dominate the common case.\n*\n* @param query - the raw user query.\n* @returns AND/OR MATCH expressions and the usable term count.\n*\n* @example\n* ```ts\n* const q = buildFts5Queries('nexus_symbols_fts orphan');\n* // q.and === 'nexus_symbols_fts* AND orphan*'\n* // q.or === 'nexus_symbols_fts* OR orphan*'\n* ```\n*\n* @task T553\n* @task T12073\n*/\nfunction buildFts5Queries(query) {\n\tconst rawTokens = query.trim().split(/\\s+/).filter(Boolean);\n\tconst seen = /* @__PURE__ */ new Set();\n\tconst terms = [];\n\tfor (const t of rawTokens) {\n\t\tconst stripped = t.replace(/^\\W+|\\W+$/g, \"\");\n\t\tif (stripped.length < 2) continue;\n\t\tif (!/\\w/.test(stripped)) continue;\n\t\tconst lower = stripped.toLowerCase();\n\t\tif (seen.has(lower)) continue;\n\t\tseen.add(lower);\n\t\tterms.push(`\"${stripped.replace(/\"/g, \"\\\"\\\"\")}\"*`);\n\t}\n\tif (terms.length === 0) return {\n\t\tand: \"\\\"\\\"\",\n\t\tor: \"\\\"\\\"\",\n\t\ttermCount: 0\n\t};\n\treturn {\n\t\tand: terms.join(\" AND \"),\n\t\tor: terms.join(\" OR \"),\n\t\ttermCount: terms.length\n\t};\n}\n/**\n* Run an FTS5-backed query conjunctively, falling back to disjunctive.\n*\n* Single-term queries skip the fallback entirely (AND and OR are identical).\n*\n* @param run - executes one MATCH expression and returns its rows.\n* @param queries - the pair from {@link buildFts5Queries}.\n* @returns conjunctive rows when non-empty, else disjunctive rows.\n*\n* @task T12073\n*/\nfunction matchConjunctiveFirst(run, queries) {\n\tconst conjunctive = run(queries.and);\n\tif (conjunctive.length > 0 || queries.termCount < 2) return conjunctive;\n\treturn run(queries.or);\n}\n/**\n* Round-robin interleave several independently-ranked lists.\n*\n* Takes rank 1 from every list, then rank 2 from every list, and so on, so a\n* downstream consumer that scores by array position does not systematically\n* favour whichever list happened to be concatenated first.\n*\n* @param lists - per-source lists, each already ordered best-first.\n* @returns a single list preserving each source's internal order.\n*\n* @example\n* ```ts\n* interleaveRanked([['a1', 'a2'], ['b1'], ['c1', 'c2', 'c3']]);\n* // ['a1', 'b1', 'c1', 'a2', 'c2', 'c3']\n* ```\n*\n* @task T12073\n*/\nfunction interleaveRanked(lists) {\n\tconst out = [];\n\tconst longest = lists.reduce((max, l) => Math.max(max, l.length), 0);\n\tfor (let i = 0; i < longest; i++) for (const list of lists) {\n\t\tconst item = list[i];\n\t\tif (item !== void 0) out.push(item);\n\t}\n\treturn out;\n}\n/**\n* Fuse ranked lists from multiple retrieval sources using Reciprocal Rank Fusion.\n*\n* Implements the RRF algorithm from Cormack, Clarke & Buettcher (SIGIR 2009):\n*\n* score(d) = Σ 1 / (k + rank(d, list)) for each list containing d\n*\n* where k=60 is the research-proven smoothing constant.\n*\n* Properties:\n* - Rank-based: actual scores from each source are ignored (only rank matters).\n* - Additive: items appearing in multiple lists accumulate higher scores.\n* - Robust: the +60 constant prevents rank-1 items from dominating.\n*\n* @param sources - Named arrays of ranked hits (order = rank, index 0 = best)\n* @param k - RRF smoothing constant (default: RRF_K = 60)\n* @returns Array of fused results sorted by rrfScore descending\n*\n* @example\n* ```ts\n* const fused = reciprocalRankFusion([\n* { source: 'fts', hits: ftsHits },\n* { source: 'vec', hits: vecHits },\n* ]);\n* ```\n*/\nfunction reciprocalRankFusion(sources, k = 60) {\n\tconst accum = /* @__PURE__ */ new Map();\n\tfor (const { source, hits } of sources) for (let rank = 0; rank < hits.length; rank++) {\n\t\tconst hit = hits[rank];\n\t\tconst contribution = 1 / (k + rank);\n\t\tconst existing = accum.get(hit.id);\n\t\tif (existing) {\n\t\t\texisting.rrfScore += contribution;\n\t\t\texisting.sources.add(source);\n\t\t\tif (source === \"fts\") existing.ftsRank = rank;\n\t\t\tif (source === \"vec\") existing.vecRank = rank;\n\t\t} else accum.set(hit.id, {\n\t\t\trrfScore: contribution,\n\t\t\ttype: hit.type,\n\t\t\ttitle: hit.title,\n\t\t\ttext: hit.text,\n\t\t\tsources: new Set([source]),\n\t\t\tftsRank: source === \"fts\" ? rank : void 0,\n\t\t\tvecRank: source === \"vec\" ? rank : void 0\n\t\t});\n\t}\n\treturn [...accum.entries()].map(([id, data]) => ({\n\t\tid,\n\t\trrfScore: data.rrfScore,\n\t\ttype: data.type,\n\t\ttitle: data.title,\n\t\ttext: data.text,\n\t\tsources: [...data.sources],\n\t\tftsRank: data.ftsRank,\n\t\tvecRank: data.vecRank\n\t})).sort((a, b) => b.rrfScore - a.rrfScore);\n}\n/**\n* Hybrid search across FTS5, vector similarity, graph neighbors, and optionally code symbols.\n* Uses Reciprocal Rank Fusion (RRF) for result combination.\n*\n* Algorithm:\n* 1. Run FTS5 search, vector similarity search, and optionally code symbol search in parallel.\n* 2. Optionally expand via graph neighbors (best-effort).\n* 3. Fuse all ranked lists with RRF: score = Σ 1/(rank+rrfK).\n* 4. Return top-N sorted by fused RRF score.\n*\n* Graceful degradation: vector, graph, and code sources are silently skipped when\n* unavailable — RRF naturally handles partial source lists.\n*\n* @param query - Search query text\n* @param projectRoot - Project root directory\n* @param options - Limit, RRF tuning, and includeCode flag for code symbol search\n* @returns Array of hybrid results ranked by RRF score descending\n*\n* @task T5130 (hybrid search), T1058 (code symbol integration)\n*/\nasync function hybridSearch(query, projectRoot, options) {\n\tif (!query?.trim()) return [];\n\tconst maxResults = options?.limit ?? 10;\n\tconst rrfK = options?.rrfK ?? 60;\n\tconst includeCode = options?.includeCode ?? false;\n\tconst searches = [searchBrain(projectRoot, query, { limit: maxResults * 3 }).catch(() => ({\n\t\tdecisions: [],\n\t\tpatterns: [],\n\t\tlearnings: [],\n\t\tobservations: []\n\t})), searchSimilar(query, projectRoot, maxResults * 3).catch(() => [])];\n\tlet codeSearchPromise = null;\n\tif (includeCode) {\n\t\tcodeSearchPromise = (async () => {\n\t\t\ttry {\n\t\t\t\tconst { smartSearch } = await import(\"./src4.js\");\n\t\t\t\treturn smartSearch(query, {\n\t\t\t\t\tmaxResults: maxResults * 2,\n\t\t\t\t\trootDir: projectRoot\n\t\t\t\t}).map((r) => ({\n\t\t\t\t\tid: `code:${r.symbol.filePath}:${r.symbol.name}:${r.symbol.startLine}`,\n\t\t\t\t\ttitle: r.symbol.name,\n\t\t\t\t\tkind: r.symbol.kind,\n\t\t\t\t\tscore: r.score\n\t\t\t\t}));\n\t\t\t} catch {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t})();\n\t\tsearches.push(codeSearchPromise);\n\t}\n\tconst allResults = await Promise.all(searches);\n\tconst ftsResults = allResults[0];\n\tconst vecResults = allResults[1];\n\tconst codeResults = includeCode ? allResults[2] ?? [] : [];\n\tconst ftsHits = interleaveRanked([\n\t\tftsResults.decisions.map((d) => ({\n\t\t\tid: d.id,\n\t\t\ttype: \"decision\",\n\t\t\ttitle: d.decision,\n\t\t\ttext: `${d.decision} — ${d.rationale}`\n\t\t})),\n\t\tftsResults.patterns.map((p) => ({\n\t\t\tid: p.id,\n\t\t\ttype: \"pattern\",\n\t\t\ttitle: p.pattern,\n\t\t\ttext: `${p.pattern} — ${p.context}`\n\t\t})),\n\t\tftsResults.learnings.map((l) => ({\n\t\t\tid: l.id,\n\t\t\ttype: \"learning\",\n\t\t\ttitle: l.insight,\n\t\t\ttext: `${l.insight} (source: ${l.source})`\n\t\t})),\n\t\tftsResults.observations.map((o) => ({\n\t\t\tid: o.id,\n\t\t\ttype: \"observation\",\n\t\t\ttitle: o.title,\n\t\t\ttext: o.narrative ?? o.title\n\t\t}))\n\t]);\n\tconst vecHits = vecResults.map((r) => ({\n\t\tid: r.id,\n\t\ttype: r.type,\n\t\ttitle: r.title,\n\t\ttext: r.text\n\t}));\n\tconst codeHits = codeResults.map((r) => ({\n\t\tid: r.id,\n\t\ttype: \"code-symbol\",\n\t\ttitle: r.title,\n\t\ttext: `${r.title} (${r.kind})`\n\t}));\n\tconst rrfSources = [];\n\tif (ftsHits.length > 0) rrfSources.push({\n\t\tsource: \"fts\",\n\t\thits: ftsHits\n\t});\n\tif (vecHits.length > 0) rrfSources.push({\n\t\tsource: \"vec\",\n\t\thits: vecHits\n\t});\n\tif (codeHits.length > 0) rrfSources.push({\n\t\tsource: \"code\",\n\t\thits: codeHits\n\t});\n\ttry {\n\t\tconst accessor = await getBrainAccessor(projectRoot);\n\t\tconst possibleNodeIds = [\n\t\t\t`concept:${query.toLowerCase().replace(/\\s+/g, \"-\")}`,\n\t\t\t`task:${query}`,\n\t\t\t`doc:${query}`\n\t\t];\n\t\tconst graphHits = [];\n\t\tfor (const nodeId of possibleNodeIds) {\n\t\t\tif (!await accessor.getPageNode(nodeId)) continue;\n\t\t\tconst neighbors = await accessor.getNeighbors(nodeId);\n\t\t\tfor (const neighbor of neighbors) graphHits.push({\n\t\t\t\tid: neighbor.id,\n\t\t\t\ttype: neighbor.nodeType,\n\t\t\t\ttitle: neighbor.label,\n\t\t\t\ttext: neighbor.label\n\t\t\t});\n\t\t}\n\t\tif (graphHits.length > 0) rrfSources.push({\n\t\t\tsource: \"graph\",\n\t\t\thits: graphHits\n\t\t});\n\t} catch {}\n\treturn reciprocalRankFusion(rrfSources, rrfK).slice(0, maxResults).map((r) => ({\n\t\tid: r.id,\n\t\tscore: r.rrfScore,\n\t\ttype: r.type,\n\t\ttitle: r.title,\n\t\ttext: r.text,\n\t\tsources: r.sources,\n\t\tftsRank: r.ftsRank,\n\t\tvecRank: r.vecRank\n\t}));\n}\n//#endregion\nexport { matchConjunctiveFirst as a, searchBrain as c, interleaveRanked as i, ensureFts5Tables as n, rebuildFts5Index as o, hybridSearch as r, reciprocalRankFusion as s, buildFts5Queries as t };\n"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"brain-similarity-DI4yzm9e.js","sources":["../../../.svelte-kit/adapter-node/chunks/brain-similarity.js"],"sourcesContent":["import { n as getBrainAccessor } from \"./memory-accessor2.js\";\nimport { t as typedAll } from \"./typed-query.js\";\nimport { r as isEmbeddingAvailable, t as embedText } from \"./brain-embedding2.js\";\n//#region ../core/dist/memory/brain-similarity.js\n/**\n* BRAIN Vector Similarity Search\n*\n* Provides vector-based KNN search against brain_embeddings vec0 table.\n* Falls back gracefully when no embedding provider is registered or\n* sqlite-vec is unavailable.\n*\n* @task T5388\n* @epic T5149\n*/\nfunction parseIdPrefix(id) {\n\tif (id.startsWith(\"D-\") || /^D\\d/.test(id)) return \"decision\";\n\tif (id.startsWith(\"P-\") || /^P\\d/.test(id)) return \"pattern\";\n\tif (id.startsWith(\"L-\") || /^L\\d/.test(id)) return \"learning\";\n\tif (id.startsWith(\"O-\") || id.startsWith(\"O\") || id.startsWith(\"CM-\")) return \"observation\";\n\treturn null;\n}\n/**\n* Search for entries similar to a query string using vector similarity.\n*\n* 1. Embeds the query text via the registered embedding provider.\n* 2. Runs KNN query against brain_embeddings vec0 table.\n* 3. Joins with observation/decision/pattern/learning tables for full entries.\n*\n* Returns empty array when embedding is unavailable (graceful fallback).\n*\n* @param query - Text to find similar entries for\n* @param projectRoot - Project root directory\n* @param limit - Maximum results to return (default 10)\n* @returns Array of similar entries ranked by distance (ascending)\n*/\nasync function searchSimilar(query, projectRoot, limit) {\n\tif (!query?.trim()) return [];\n\tif (!isEmbeddingAvailable()) return [];\n\tconst maxResults = limit ?? 10;\n\tconst queryVector = await embedText(query);\n\tif (!queryVector) return [];\n\tconst { getBrainDb, getBrainNativeDb, isBrainVecLoaded } = await import(\"./memory-sqlite2.js\");\n\tawait getBrainDb(projectRoot);\n\tconst nativeDb = getBrainNativeDb(projectRoot);\n\tif (!nativeDb) return [];\n\tif (!isBrainVecLoaded()) return [];\n\tlet knnRows;\n\ttry {\n\t\tknnRows = typedAll(nativeDb.prepare(\"SELECT id, distance FROM brain_embeddings WHERE embedding MATCH ? ORDER BY distance LIMIT ?\"), new Float32Array(queryVector.buffer, queryVector.byteOffset, queryVector.length), maxResults);\n\t} catch {\n\t\treturn [];\n\t}\n\tif (knnRows.length === 0) return [];\n\tconst accessor = await getBrainAccessor(projectRoot);\n\tconst results = [];\n\tfor (const row of knnRows) {\n\t\tconst entryType = parseIdPrefix(row.id);\n\t\tif (!entryType) continue;\n\t\ttry {\n\t\t\tswitch (entryType) {\n\t\t\t\tcase \"observation\": {\n\t\t\t\t\tconst entry = await accessor.getObservation(row.id);\n\t\t\t\t\tif (entry) results.push({\n\t\t\t\t\t\tid: row.id,\n\t\t\t\t\t\tdistance: row.distance,\n\t\t\t\t\t\ttype: \"observation\",\n\t\t\t\t\t\ttitle: entry.title,\n\t\t\t\t\t\ttext: entry.narrative ?? entry.title\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase \"decision\": {\n\t\t\t\t\tconst entry = await accessor.getDecision(row.id);\n\t\t\t\t\tif (entry) results.push({\n\t\t\t\t\t\tid: row.id,\n\t\t\t\t\t\tdistance: row.distance,\n\t\t\t\t\t\ttype: \"decision\",\n\t\t\t\t\t\ttitle: entry.decision,\n\t\t\t\t\t\ttext: `${entry.decision} — ${entry.rationale}`\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase \"pattern\": {\n\t\t\t\t\tconst entry = await accessor.getPattern(row.id);\n\t\t\t\t\tif (entry) results.push({\n\t\t\t\t\t\tid: row.id,\n\t\t\t\t\t\tdistance: row.distance,\n\t\t\t\t\t\ttype: \"pattern\",\n\t\t\t\t\t\ttitle: entry.pattern,\n\t\t\t\t\t\ttext: `${entry.pattern} — ${entry.context}`\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase \"learning\": {\n\t\t\t\t\tconst entry = await accessor.getLearning(row.id);\n\t\t\t\t\tif (entry) results.push({\n\t\t\t\t\t\tid: row.id,\n\t\t\t\t\t\tdistance: row.distance,\n\t\t\t\t\t\ttype: \"learning\",\n\t\t\t\t\t\ttitle: entry.insight,\n\t\t\t\t\t\ttext: `${entry.insight} (source: ${entry.source})`\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} catch {}\n\t}\n\treturn results;\n}\n//#endregion\nexport { searchSimilar as t };\n"],"names":[],"mappings":"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"}