@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":"brain-stdp2-BxSBIlSr.js","sources":["../../../.svelte-kit/adapter-node/chunks/brain-stdp.js"],"sourcesContent":["import { t as typedAll } from \"./typed-query.js\";\n//#region ../core/dist/memory/brain-plasticity-class.js\n/**\n* Plasticity class and stability score utilities for STDP and Hebbian plasticity.\n*\n* Manages the plasticity_class column which governs which algorithms write to an edge:\n* - 'static': Non-plastic (structural, semantic). Immune to decay.\n* - 'hebbian': Written by strengthenCoRetrievedEdges. Subject to decay.\n* - 'stdp': Written or refined by applyStdpPlasticity. Subject to decay + LTD.\n*\n* Also computes stability_score for decay filtering and plasticity event ordering.\n*\n* @task T693\n* @epic T673\n*/\n/**\n* Upgrade plasticity class to the most plastic variant that has touched it.\n*\n* Decision logic (T693 / synthesis decision #12):\n* - If current = 'static' and event = 'hebbian' → 'hebbian' (first plasticity touch)\n* - If current = 'static' and event = 'stdp' → 'stdp' (STDP direct touch)\n* - If current = 'hebbian' and event = 'stdp' → 'stdp' (upgrade via STDP)\n* - If current = 'stdp' → stays 'stdp' (no downgrade)\n* - Otherwise return current unchanged\n*\n* @param currentClass - Current plasticity class value ('static', 'hebbian', 'stdp')\n* @param event - Event type triggering upgrade ('hebbian' or 'stdp')\n* @returns Upgraded plasticity class\n*/\nfunction upgradePlasticityClass(currentClass, event) {\n\tconst current = currentClass ?? \"static\";\n\tif (current === \"stdp\") return \"stdp\";\n\tif (event === \"stdp\") return \"stdp\";\n\tif (event === \"hebbian\") return current === \"static\" ? \"hebbian\" : current;\n\treturn current;\n}\n/**\n* Compute biological stability score for an edge based on reinforcement history.\n*\n* Formula (T673 spec §1 decision #13):\n* stability = tanh(reinforcement_count / 10) × exp(-(days_since_reinforced / 30))\n*\n* Parameters:\n* - reinforcement_count: Number of LTP events applied lifetime (integer ≥ 0)\n* - lastReinforcedAt: ISO 8601 timestamp of last LTP event, or null if never\n*\n* Returns: 0.0–1.0, or null if no history to compute from\n*\n* Examples:\n* - rc=10, days=0 → tanh(1.0) × 1.0 ≈ 0.762\n* - rc=5, days=0 → tanh(0.5) × 1.0 ≈ 0.462\n* - rc=10, days=30 → tanh(1.0) × exp(-1) ≈ 0.280\n* - rc=0, days=any → tanh(0) × ... = 0.0 (new edges)\n*\n* @param reinforcementCount - Lifetime count of LTP events applied to edge\n* @param lastReinforcedAt - ISO 8601 timestamp of last LTP event, or null\n* @param now - Current timestamp (epoch ms, for testing). Defaults to Date.now()\n* @returns Stability score 0.0–1.0, or null if edge has no reinforcement history\n*/\nfunction computeStabilityScore(reinforcementCount, lastReinforcedAt, now = Date.now()) {\n\tif (!reinforcementCount || reinforcementCount <= 0) return null;\n\tif (!lastReinforcedAt) return null;\n\tconst rcTerm = Math.tanh(reinforcementCount / 10);\n\tconst ageDays = (now - new Date(lastReinforcedAt).getTime()) / (1440 * 60 * 1e3);\n\tconst stability = rcTerm * Math.exp(-ageDays / 30);\n\treturn Math.max(0, Math.min(1, stability));\n}\n//#endregion\n//#region ../core/dist/memory/brain-stdp.js\n/**\n* STDP (Spike-Timing-Dependent Plasticity) for CLEO BRAIN.\n*\n* Implements a biologically-inspired Hebbian learning rule that modulates edge\n* weights based on the *temporal order* of memory retrievals within a session\n* window, not just co-occurrence frequency.\n*\n* ## Neuroscience basis\n*\n* Classical STDP: if neuron A fires before neuron B by Δt milliseconds, the\n* synapse A→B is potentiated (LTP); if A fires after B, it is depressed (LTD).\n* The magnitude of the change decays exponentially with |Δt|.\n*\n* ## Mapping to CLEO memory\n*\n* - Each entry retrieved from brain.db is a \"spike\".\n* - Retrievals within the same session and within `sessionWindowMs` of each\n* other are treated as temporally related spikes.\n* - If entry A was retrieved BEFORE entry B by Δt ms:\n* Δw = A_pre × exp(−Δt / τ_pre) → potentiation (LTP, positive Δw)\n* - If entry A was retrieved AFTER entry B by Δt ms:\n* Δw = −A_post × exp(−Δt / τ_post) → depression (LTD, negative Δw)\n* - Weights are clamped to [0.0, 1.0].\n* - All events are logged to `brain_plasticity_events` for observability.\n*\n* ## Parameters (biologically reasonable defaults)\n*\n* | Symbol | Value | Meaning |\n* |---------|--------|--------------------------------------------------|\n* | τ_pre | 20 s | Time constant for pre→post potentiation |\n* | τ_post | 20 s | Time constant for post→pre depression |\n* | A_pre | 0.05 | Peak potentiation amplitude |\n* | A_post | 0.06 | Peak depression amplitude (asymmetric, per STDP) |\n*\n* The asymmetry A_post > A_pre models the biological fact that LTD is slightly\n* stronger than LTP, preventing runaway weight growth.\n*\n* ## Relation to Hebbian co-retrieval\n*\n* Hebbian (`strengthenCoRetrievedEdges` in brain-lifecycle.ts) uses the\n* `co_retrieved` edge type and does NOT track order; it fires on pairs that\n* co-occur ≥ 3× regardless of timing. STDP is a *second plasticity pass* that\n* runs after Hebbian and refines existing `co_retrieved` edges using order data.\n*\n* If no `co_retrieved` edge exists yet between a pair, STDP inserts one with the\n* initial STDP-derived weight (potentiation pairs only — LTD does not create\n* new edges, only weakens existing ones).\n*\n* ## Two-Window Architecture (T679 BUG-1 fix, T688 expansion)\n*\n* Prior code used `sessionWindowMs=5min` as BOTH the SQL lookback cutoff AND the\n* spike-pair Δt gate, causing all live rows (>5min old) to produce zero plasticity\n* events. This version separates the two concerns:\n*\n* | Parameter | Default | Purpose |\n* |-------------------|------------|------------------------------------------|\n* | `lookbackDays` | 30 days | SQL cutoff for fetching retrieval rows |\n* | `pairingWindowMs` | 24 h | Max Δt between two spikes for pairing |\n*\n* T688: `pairingWindowMs` raised to 24 h — cross-session pairs now eligible.\n* Session boundary is NOT a hard cutoff; τ tier determines decay magnitude.\n*\n* ## Tiered τ (T689)\n*\n* `computeTau(deltaT)` selects the decay time constant based on Δt:\n*\n* | Gap class | Δt range | τ |\n* |---------------|----------------|---------|\n* | Intra-batch | 0 — 30 s | 20 s |\n* | Intra-session | 30 s — 2 h | 30 min |\n* | Cross-session | 2 h — 24 h | 12 h |\n*\n* ## R-STDP reward modulation (T692)\n*\n* `reward_signal r` (from Step 9a backfill) gates Δw per spike:\n* Δw_ltp_effective = clamp(Δw_ltp × (1+r), 0, 2×A_pre)\n* Δw_ltd_effective = clamp(Δw_ltd × (1-r), -2×A_post, 0)\n* null reward → no modulation (r treated as 0).\n*\n* ## Novelty boost (T691)\n*\n* On INSERT (first co-retrieval), initial_weight = clamp(Δw × 1.5, 0, A_pre×1.5).\n* UPDATE path uses un-boosted Δw.\n*\n* @task T626\n* @task T679\n* @task T688\n* @task T689\n* @task T691\n* @task T692\n* @epic T673\n* @see packages/core/src/memory/brain-lifecycle.ts#strengthenCoRetrievedEdges\n* @see docs/specs/stdp-wire-up-spec.md §3.2 Two-Window Architecture\n*/\n/** Default SQL lookback window: fetch retrieval rows from the last N days. */\nvar DEFAULT_LOOKBACK_DAYS = 30;\n/**\n* Default spike-pair matching window in milliseconds.\n* T688: raised from 5 min to 24 h — cross-session pairs are now eligible.\n* Session boundary is NOT a hard cutoff; tiered τ provides smaller Δw for\n* cross-session pairs (τ_episodic=12h vs τ_near=20s).\n*/\nvar DEFAULT_PAIRING_WINDOW_MS = 1440 * 60 * 1e3;\n/**\n* Hard row-count cap for `brain_plasticity_events`.\n*\n* Acts as a defensive upper bound when retention-by-days alone is insufficient\n* (e.g. a single day producing > MAX rows under unusually heavy consolidation\n* traffic, as happened on 2026-05-12 when 1.17M rows were inserted in 24 h).\n* When the table exceeds this cap, `pruneStaleHistory()` deletes the oldest\n* rows by `timestamp ASC` until the count is back under the cap.\n*\n* @task T10348\n* @epic T10286\n*/\nvar MAX_PLASTICITY_EVENTS_ROW_CAP = 5e4;\n/**\n* Hard row-count cap for `brain_weight_history` — companion to\n* `MAX_PLASTICITY_EVENTS_ROW_CAP`. Same semantics.\n*\n* @task T10348\n* @epic T10286\n*/\nvar MAX_WEIGHT_HISTORY_ROW_CAP = 5e4;\n/**\n* Row-deletion threshold above which `pruneStaleHistory()` emits a\n* `[pruneStaleHistory]` Pino info-level message. Below this threshold the\n* prune is silent. The threshold matches the T10301 RCA recommendation\n* (\"optionally VACUUM if rows-deleted > 10_000\") but `pruneStaleHistory()`\n* does NOT auto-run VACUUM — VACUUM under WAL is a heavyweight blocking\n* operation that should be operator-driven (see `cleo doctor --vacuum`).\n*\n* @task T10348\n* @epic T10286\n*/\nvar PRUNE_HISTORY_LOG_THRESHOLD = 1e4;\n/**\n* Intra-batch time constant (ms).\n* Used when Δt ≤ 30 s — both spikes are in the same retrieval batch.\n* Biological analogue: classical STDP window (~20 ms–100 ms in neurons;\n* scaled to 20 s for CLEO memory retrieval granularity).\n*\n* @task T689\n*/\nvar TAU_NEAR_MS = 2e4;\n/**\n* Intra-session time constant (ms).\n* Used when 30 s < Δt ≤ 2 h — spikes are in the same session but not same batch.\n* Biological analogue: working-memory consolidation window.\n*\n* @task T689\n*/\nvar TAU_SESSION_MS = 1800 * 1e3;\n/**\n* Cross-session (episodic) time constant (ms).\n* Used when Δt > 2 h — spikes span different sessions.\n* Biological analogue: episodic reconsolidation (~12 h per Walker & Stickgold 2004).\n* Pairs 12 h apart contribute A × exp(-1) ≈ 0.37×A; pairs 36 h apart ≈ 0.05×A.\n*\n* @task T689\n*/\nvar TAU_EPISODIC_MS = 720 * 60 * 1e3;\n/**\n* Δt boundary (ms) between intra-batch and intra-session τ tiers.\n* Spikes within 30 s of each other use τ_near.\n*/\nvar TAU_NEAR_THRESHOLD_MS = 3e4;\n/**\n* Δt boundary (ms) between intra-session and cross-session τ tiers.\n* Spikes more than 2 h apart use τ_episodic.\n*/\nvar TAU_SESSION_THRESHOLD_MS = 7200 * 1e3;\n/** Peak potentiation amplitude (dimensionless weight delta). */\nvar A_PRE = .05;\n/** Peak depression amplitude (slightly larger than A_pre — asymmetric STDP). */\nvar A_POST = .06;\n/**\n* Novelty boost multiplier for first-ever co-retrieval pair (INSERT path).\n* Models dopamine-novelty literature: new associations are strengthened more.\n* Applied only on INSERT; UPDATE path uses standard Δw.\n*\n* @task T691\n*/\nvar K_NOVELTY = 1.5;\n/** Minimum edge weight (floor). */\nvar WEIGHT_MIN = 0;\n/** Maximum edge weight (ceiling). */\nvar WEIGHT_MAX = 1;\n/**\n* Select the decay time constant τ based on spike-pair temporal gap.\n*\n* Three tiers (per spec §3.3):\n* - τ_near = 20 s — Δt ≤ 30 s (intra-batch, classical STDP window)\n* - τ_session = 30 min — 30 s < Δt ≤ 2 h (intra-session, working memory)\n* - τ_episodic = 12 h — Δt > 2 h (cross-session, episodic reconsolidation)\n*\n* @param deltaT - Time gap between spikes in milliseconds (non-negative).\n* @returns τ in milliseconds for use in exp(-Δt / τ).\n*\n* @task T689\n*/\nfunction computeTau(deltaT) {\n\tif (deltaT <= TAU_NEAR_THRESHOLD_MS) return TAU_NEAR_MS;\n\tif (deltaT <= TAU_SESSION_THRESHOLD_MS) return TAU_SESSION_MS;\n\treturn TAU_EPISODIC_MS;\n}\n/**\n* Check if a recent plasticity event exists for the given source→target pair\n* within the last `withinHours` (default 1 hour).\n*\n* Used by T713 idempotency guard to prevent duplicate event insertion when\n* consolidation runs multiple times against the same session.\n*\n* @param nativeDb - SQLite native database connection\n* @param sourceNode - Source node ID (entry ID)\n* @param targetNode - Target node ID (entry ID)\n* @param kind - Event kind ('ltp' or 'ltd')\n* @param sessionId - Session ID to match (null = all sessions)\n* @param withinHours - Dedup window in hours. Default: 1\n* @returns True if a matching recent event exists; false otherwise.\n*/\nfunction isPlasticityEventDuplicate(nativeDb, sourceNode, targetNode, kind, sessionId, withinHours = 1) {\n\ttry {\n\t\tconst cutoffIso = (/* @__PURE__ */ new Date(Date.now() - withinHours * 60 * 60 * 1e3)).toISOString().replace(\"T\", \" \").slice(0, 19);\n\t\treturn nativeDb.prepare(`SELECT 1 FROM brain_plasticity_events\n WHERE source_node = ? AND target_node = ? AND kind = ?\n AND session_id = ?\n AND timestamp > ?\n LIMIT 1`).get(sourceNode, targetNode, kind, sessionId, cutoffIso) !== void 0;\n\t} catch {\n\t\treturn false;\n\t}\n}\n/**\n* Check if there are at least `minCount` retrieval log rows since the last\n* plasticity event in the given session.\n*\n* Used by T714 minimum-pair gate to skip Step 9b when a session has too few\n* retrievals to warrant plasticity processing.\n*\n* @param nativeDb - SQLite native database connection\n* @param minCount - Minimum number of new retrievals required. Default: 2\n* @param sessionId - Session ID to check (null = all sessions)\n* @returns True if minCount or more new retrievals exist; false otherwise.\n*/\nfunction hasMinimumRetrievalsSinceLastPlasticity(nativeDb, minCount = 2, sessionId = null) {\n\ttry {\n\t\tconst db = nativeDb;\n\t\tconst lastTime = (() => {\n\t\t\tif (sessionId !== null) return db.prepare(`SELECT MAX(timestamp) as last_time FROM brain_plasticity_events\n WHERE session_id = ?`).get(sessionId)?.last_time ?? null;\n\t\t\treturn db.prepare(`SELECT MAX(timestamp) as last_time FROM brain_plasticity_events`).get()?.last_time ?? null;\n\t\t})();\n\t\tlet newRetrievalCount;\n\t\tif (lastTime === null) if (sessionId !== null) newRetrievalCount = db.prepare(`SELECT COUNT(*) as cnt FROM brain_retrieval_log\n WHERE session_id = ?`).get(sessionId)?.cnt ?? 0;\n\t\telse newRetrievalCount = db.prepare(`SELECT COUNT(*) as cnt FROM brain_retrieval_log`).get()?.cnt ?? 0;\n\t\telse if (sessionId !== null) newRetrievalCount = db.prepare(`SELECT COUNT(*) as cnt FROM brain_retrieval_log\n WHERE session_id = ? AND created_at > ?`).get(sessionId, lastTime)?.cnt ?? 0;\n\t\telse newRetrievalCount = db.prepare(`SELECT COUNT(*) as cnt FROM brain_retrieval_log\n WHERE created_at > ?`).get(lastTime)?.cnt ?? 0;\n\t\treturn newRetrievalCount >= minCount;\n\t} catch {\n\t\treturn true;\n\t}\n}\n/**\n* T714: Check whether Step 9b (STDP plasticity) should run based on retrieval volume.\n*\n* Per spec §4.2, skip plasticity processing if fewer than `minRetrievalsForPlasticity`\n* new retrieval rows exist since the last `brain_plasticity_events` timestamp.\n* This prevents wasted compute on early-session edge cases where no meaningful pairs exist.\n*\n* @param projectRoot - Project root for brain.db resolution\n* @param sessionId - Session ID to check (null = all sessions)\n* @param minRetrievalsForPlasticity - Minimum row count required. Default: 2.\n* @returns True if plasticity should run; false if gate blocks it.\n*/\nasync function shouldRunPlasticity(projectRoot, sessionId = null, minRetrievalsForPlasticity = 2) {\n\tconst { getBrainDb, getBrainNativeDb } = await import(\"./memory-sqlite2.js\");\n\tawait getBrainDb(projectRoot);\n\tconst nativeDb = getBrainNativeDb(projectRoot);\n\tif (!nativeDb) return true;\n\tconst hasMinimum = hasMinimumRetrievalsSinceLastPlasticity(nativeDb, minRetrievalsForPlasticity, sessionId);\n\tif (!hasMinimum) {\n\t\tconst count = (() => {\n\t\t\ttry {\n\t\t\t\tconst db = nativeDb;\n\t\t\t\tconst lastTime = (() => {\n\t\t\t\t\tif (sessionId !== null) return db.prepare(`SELECT MAX(timestamp) as last_time FROM brain_plasticity_events WHERE session_id = ?`).get(sessionId)?.last_time ?? null;\n\t\t\t\t\treturn db.prepare(`SELECT MAX(timestamp) as last_time FROM brain_plasticity_events`).get()?.last_time ?? null;\n\t\t\t\t})();\n\t\t\t\tif (lastTime === null) return (sessionId !== null ? db.prepare(`SELECT COUNT(*) as cnt FROM brain_retrieval_log WHERE session_id = ?`).get(sessionId) : db.prepare(`SELECT COUNT(*) as cnt FROM brain_retrieval_log`).get())?.cnt ?? 0;\n\t\t\t\telse return (sessionId !== null ? db.prepare(`SELECT COUNT(*) as cnt FROM brain_retrieval_log WHERE session_id = ? AND created_at > ?`).get(sessionId, lastTime) : db.prepare(`SELECT COUNT(*) as cnt FROM brain_retrieval_log WHERE created_at > ?`).get(lastTime))?.cnt ?? 0;\n\t\t\t} catch {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t})();\n\t\tconsole.warn(`[plasticity] Minimum-pair gate: skipped STDP Step 9b (${count} retrievals, need >=${minRetrievalsForPlasticity})`);\n\t}\n\treturn hasMinimum;\n}\n/**\n* Apply Spike-Timing-Dependent Plasticity to brain_page_edges.\n*\n* Reads `brain_retrieval_log` for rows within the past `lookbackDays` days\n* (default 30), reconstructs the temporal spike sequence, and applies the\n* STDP rule to every ordered pair within `pairingWindowMs` (default 24 h).\n*\n* All weight changes are logged to `brain_plasticity_events` (with\n* `session_id`, `retrieval_log_id`, `weight_before`, `weight_after`,\n* `delta_t_ms`) and to `brain_weight_history` for the full audit trail.\n*\n* ### T679 fixes (root cause: BUG-1 from stdp-wire-up-spec.md §1.4)\n*\n* - Separated `lookbackDays` (SQL fetch window, default 30d) from\n* `pairingWindowMs` (spike-pair Δt gate, default 5min). Previously both\n* used `sessionWindowMs=5min`, causing all live rows (>5min old) to produce\n* zero events.\n* - Writer now populates `session_id` + `retrieval_log_id` + `weight_before` /\n* `weight_after` on `brain_plasticity_events` INSERT.\n* - Writer now inserts into `brain_weight_history` per weight delta.\n* - Fixed bug where `prepareUpdateEdge.run()` was missing 4 of 9 SQL params.\n*\n* ### Backward compatibility\n*\n* The legacy `applyStdpPlasticity(root, number)` signature is still accepted.\n* The number is mapped to `pairingWindowMs`; `lookbackDays` stays at 30d.\n* A deprecation warning is emitted to steer callers to `StdpPlasticityOptions`.\n*\n* ### T10351 — process-local serializer\n*\n* `brain_plasticity_events` and `brain_weight_history` are the highest-volume\n* write tables in brain.db (~94% of the 1.7 GB blow-up identified in the\n* T10301 RCA). Two concurrent `applyStdpPlasticity` runs in the same process\n* (possible via the dialectic-hook + propose-tick reflex + manual\n* `cleo memory consolidate` racing each other) would interleave their inserts\n* and torn frame writes from one transaction can clobber the schema-root\n* B-tree page — the documented corruption signature. The exported entry\n* point now serializes passes via an async mutex; one pass at a time per\n* process. See `brain-writer-thread.ts` for the per-row chokepoint that\n* covers low-volume callers.\n*\n* @param projectRoot - Project root directory for brain.db resolution\n* @param options - `StdpPlasticityOptions` or a legacy number (deprecated `sessionWindowMs`).\n* @returns Counts of LTP/LTD events applied and edges created/updated.\n*/\nvar _stdpInFlight = null;\nasync function applyStdpPlasticity(projectRoot, options) {\n\twhile (_stdpInFlight) try {\n\t\tawait _stdpInFlight;\n\t} catch {}\n\tconst passPromise = applyStdpPlasticityImpl(projectRoot, options);\n\t_stdpInFlight = passPromise.catch(() => void 0);\n\ttry {\n\t\treturn await passPromise;\n\t} finally {\n\t\t_stdpInFlight = null;\n\t}\n}\nasync function applyStdpPlasticityImpl(projectRoot, options) {\n\tlet lookbackDays = DEFAULT_LOOKBACK_DAYS;\n\tlet pairingWindowMs = DEFAULT_PAIRING_WINDOW_MS;\n\tif (typeof options === \"number\") {\n\t\tconsole.warn(\"[brain-stdp] Deprecated: passing sessionWindowMs as a number. Use StdpPlasticityOptions { lookbackDays, pairingWindowMs } instead. (T679)\");\n\t\tpairingWindowMs = options;\n\t} else if (options !== void 0) {\n\t\tlookbackDays = options.lookbackDays ?? DEFAULT_LOOKBACK_DAYS;\n\t\tpairingWindowMs = options.pairingWindowMs ?? DEFAULT_PAIRING_WINDOW_MS;\n\t}\n\tconst { getBrainDb, getBrainNativeDb } = await import(\"./memory-sqlite2.js\");\n\tawait getBrainDb(projectRoot);\n\tconst nativeDb = getBrainNativeDb(projectRoot);\n\tconst result = {\n\t\tltpEvents: 0,\n\t\tltdEvents: 0,\n\t\tedgesCreated: 0,\n\t\tpairsExamined: 0,\n\t\trewardModulatedEvents: 0\n\t};\n\tif (!nativeDb) return result;\n\ttry {\n\t\tnativeDb.prepare(\"SELECT 1 FROM brain_retrieval_log LIMIT 1\").get();\n\t} catch {\n\t\treturn result;\n\t}\n\ttry {\n\t\tnativeDb.prepare(\"SELECT 1 FROM brain_plasticity_events LIMIT 1\").get();\n\t} catch {\n\t\treturn result;\n\t}\n\tconst now = Date.now();\n\tconst cutoffMs = now - lookbackDays * 24 * 60 * 60 * 1e3;\n\tconst cutoffIso = new Date(cutoffMs).toISOString().replace(\"T\", \" \").slice(0, 19);\n\tconst nowIso = new Date(now).toISOString().replace(\"T\", \" \").slice(0, 19);\n\tlet logRows = [];\n\ttry {\n\t\tlogRows = typedAll(nativeDb.prepare(`SELECT id, entry_ids, created_at, retrieval_order, delta_ms, session_id, reward_signal\n FROM brain_retrieval_log\n WHERE created_at >= ?\n ORDER BY created_at ASC, id ASC\n LIMIT 2000`), cutoffIso);\n\t} catch {\n\t\treturn result;\n\t}\n\tif (logRows.length === 0) return result;\n\tconst spikes = [];\n\tlet globalOrder = 0;\n\tfor (const row of logRows) {\n\t\tlet ids;\n\t\ttry {\n\t\t\tids = JSON.parse(row.entry_ids);\n\t\t} catch {\n\t\t\tcontinue;\n\t\t}\n\t\tif (!Array.isArray(ids)) continue;\n\t\tconst rowTime = (/* @__PURE__ */ new Date(row.created_at.replace(\" \", \"T\") + \"Z\")).getTime();\n\t\tfor (const rawId of ids) {\n\t\t\tif (typeof rawId !== \"string\" || rawId.length === 0) continue;\n\t\t\tconst entryId = rawId.includes(\":\") ? rawId : `observation:${rawId}`;\n\t\t\tspikes.push({\n\t\t\t\tentryId,\n\t\t\t\trowId: row.id,\n\t\t\t\tretrievedAt: rowTime,\n\t\t\t\torder: row.retrieval_order ?? globalOrder,\n\t\t\t\tsessionId: row.session_id ?? null,\n\t\t\t\trewardSignal: row.reward_signal ?? null\n\t\t\t});\n\t\t\tglobalOrder++;\n\t\t}\n\t}\n\tif (spikes.length < 2) return result;\n\tspikes.sort((a, b) => a.retrievedAt - b.retrievedAt || a.order - b.order);\n\t/** T695: Maximum spikes per session contributed to cross-session pair checks. */\n\tconst MAX_PAIRS_PER_SESSION = 50;\n\tconst sessionBucketMap = /* @__PURE__ */ new Map();\n\tfor (const spike of spikes) {\n\t\tconst key = spike.sessionId ?? \"null\";\n\t\tconst bucket = sessionBucketMap.get(key);\n\t\tif (bucket !== void 0) bucket.push(spike);\n\t\telse sessionBucketMap.set(key, [spike]);\n\t}\n\tconst orderedBuckets = Array.from(sessionBucketMap.entries()).sort(([, a], [, b]) => (a[0]?.retrievedAt ?? 0) - (b[0]?.retrievedAt ?? 0));\n\tconst workingSpikes = [];\n\tfor (let bi = 0; bi < orderedBuckets.length; bi++) {\n\t\tconst [, bucketSpikes] = orderedBuckets[bi];\n\t\tworkingSpikes.push(...bucketSpikes);\n\t}\n\tconst withinSessionIndex = /* @__PURE__ */ new Map();\n\tconst sessionSizeMap = /* @__PURE__ */ new Map();\n\tfor (const [, bucketSpikes] of orderedBuckets) for (let idx = 0; idx < bucketSpikes.length; idx++) {\n\t\tconst spike = bucketSpikes[idx];\n\t\twithinSessionIndex.set(spike, idx);\n\t\tsessionSizeMap.set(spike.sessionId ?? \"null\", bucketSpikes.length);\n\t}\n\tconst prepareGetEdge = nativeDb.prepare(`SELECT weight, reinforcement_count, last_reinforced_at, plasticity_class, depression_count, last_depressed_at\n FROM brain_page_edges\n WHERE from_id = ? AND to_id = ? AND edge_type = 'co_retrieved'`);\n\tconst prepareUpdateEdgeLtp = nativeDb.prepare(`UPDATE brain_page_edges\n SET weight = MAX(?, MIN(?, weight + ?)),\n reinforcement_count = reinforcement_count + 1,\n last_reinforced_at = ?,\n plasticity_class = ?,\n stability_score = ?\n WHERE from_id = ? AND to_id = ? AND edge_type = 'co_retrieved'`);\n\tconst prepareUpdateEdgeLtd = nativeDb.prepare(`UPDATE brain_page_edges\n SET weight = MAX(?, MIN(?, weight + ?)),\n depression_count = depression_count + 1,\n last_depressed_at = ?,\n plasticity_class = ?,\n stability_score = ?\n WHERE from_id = ? AND to_id = ? AND edge_type = 'co_retrieved'`);\n\tconst prepareInsertEdge = nativeDb.prepare(`INSERT OR IGNORE INTO brain_page_edges\n (from_id, to_id, edge_type, weight, provenance, reinforcement_count, last_reinforced_at, plasticity_class, stability_score, created_at)\n VALUES (?, ?, 'co_retrieved', ?, 'plasticity:stdp-ltp', 1, ?, 'stdp', ?, ?)`);\n\tconst prepareLogEvent = nativeDb.prepare(`INSERT INTO brain_plasticity_events\n (source_node, target_node, delta_w, kind, timestamp,\n session_id, retrieval_log_id, weight_before, weight_after, delta_t_ms)\n VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`);\n\tlet prepareLogWeightHistory = null;\n\ttry {\n\t\tnativeDb.prepare(\"SELECT 1 FROM brain_weight_history LIMIT 1\").get();\n\t\tprepareLogWeightHistory = nativeDb.prepare(`INSERT INTO brain_weight_history\n (edge_from_id, edge_to_id, edge_type, weight_before, weight_after,\n delta_weight, event_kind, source_plasticity_event_id, retrieval_log_id,\n reward_signal, changed_at)\n VALUES (?, ?, 'co_retrieved', ?, ?, ?, ?, ?, ?, ?, ?)`);\n\t} catch {}\n\tfor (let i = 0; i < workingSpikes.length; i++) {\n\t\tconst spikeA = workingSpikes[i];\n\t\tconst sessionKeyA = spikeA.sessionId ?? \"null\";\n\t\tconst sessionSizeA = sessionSizeMap.get(sessionKeyA) ?? 1;\n\t\tconst canCrossSession = (withinSessionIndex.get(spikeA) ?? 0) >= sessionSizeA - MAX_PAIRS_PER_SESSION;\n\t\tfor (let j = i + 1; j < workingSpikes.length; j++) {\n\t\t\tconst spikeB = workingSpikes[j];\n\t\t\tconst deltaT = spikeB.retrievedAt - spikeA.retrievedAt;\n\t\t\tif (deltaT > pairingWindowMs) break;\n\t\t\tif (spikeA.entryId === spikeB.entryId) continue;\n\t\t\tif (sessionKeyA !== (spikeB.sessionId ?? \"null\") && !canCrossSession) continue;\n\t\t\tresult.pairsExamined++;\n\t\t\tconst tau = computeTau(deltaT);\n\t\t\tlet deltaW = A_PRE * Math.exp(-deltaT / tau);\n\t\t\tif (deltaW < 1e-6) continue;\n\t\t\tconst eventSessionId = spikeA.sessionId ?? null;\n\t\t\tconst eventRewardSignal = spikeA.rewardSignal ?? null;\n\t\t\tlet wasRewardModulated = false;\n\t\t\tif (eventRewardSignal !== null) {\n\t\t\t\tdeltaW = Math.min(deltaW * (1 + eventRewardSignal), 2 * A_PRE);\n\t\t\t\tdeltaW = Math.max(deltaW, 0);\n\t\t\t\twasRewardModulated = true;\n\t\t\t}\n\t\t\tif (deltaW < 1e-6) {\n\t\t\t\tif (wasRewardModulated) result.rewardModulatedEvents++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst existingEdge = prepareGetEdge.get(spikeA.entryId, spikeB.entryId);\n\t\t\tlet ltpEventId = null;\n\t\t\ttry {\n\t\t\t\tif (existingEdge !== void 0) {\n\t\t\t\t\tconst currentWeight = existingEdge.weight;\n\t\t\t\t\tconst newWeight = Math.max(WEIGHT_MIN, Math.min(WEIGHT_MAX, currentWeight + deltaW));\n\t\t\t\t\tconst upgradedClass = upgradePlasticityClass(existingEdge.plasticity_class, \"stdp\");\n\t\t\t\t\tconst stability = computeStabilityScore((existingEdge.reinforcement_count ?? 0) + 1, nowIso, now);\n\t\t\t\t\tprepareUpdateEdgeLtp.run(WEIGHT_MIN, WEIGHT_MAX, deltaW, nowIso, upgradedClass, stability, spikeA.entryId, spikeB.entryId);\n\t\t\t\t\tif (isPlasticityEventDuplicate(nativeDb, spikeA.entryId, spikeB.entryId, \"ltp\", eventSessionId, 1)) {\n\t\t\t\t\t\tresult.ltpEvents++;\n\t\t\t\t\t\tif (wasRewardModulated) result.rewardModulatedEvents++;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tconst evtStmt = prepareLogEvent.run(spikeA.entryId, spikeB.entryId, deltaW, \"ltp\", nowIso, eventSessionId, spikeA.rowId, currentWeight, newWeight, deltaT);\n\t\t\t\t\tltpEventId = evtStmt.lastInsertRowid != null ? Number(evtStmt.lastInsertRowid) : null;\n\t\t\t\t\tif (prepareLogWeightHistory) prepareLogWeightHistory.run(spikeA.entryId, spikeB.entryId, currentWeight, newWeight, deltaW, \"ltp\", ltpEventId, spikeA.rowId, eventRewardSignal, nowIso);\n\t\t\t\t} else {\n\t\t\t\t\tconst noveltyBoostedWeight = deltaW * K_NOVELTY;\n\t\t\t\t\tconst initialWeight = Math.min(WEIGHT_MAX, Math.min(A_PRE * K_NOVELTY, noveltyBoostedWeight));\n\t\t\t\t\tconst stability = computeStabilityScore(1, nowIso, now);\n\t\t\t\t\tprepareInsertEdge.run(spikeA.entryId, spikeB.entryId, initialWeight, nowIso, stability, nowIso);\n\t\t\t\t\tresult.edgesCreated++;\n\t\t\t\t\tconst evtStmt = prepareLogEvent.run(spikeA.entryId, spikeB.entryId, initialWeight, \"ltp\", nowIso, eventSessionId, spikeA.rowId, null, initialWeight, deltaT);\n\t\t\t\t\tltpEventId = evtStmt.lastInsertRowid != null ? Number(evtStmt.lastInsertRowid) : null;\n\t\t\t\t\tif (prepareLogWeightHistory) prepareLogWeightHistory.run(spikeA.entryId, spikeB.entryId, null, initialWeight, initialWeight, \"ltp\", ltpEventId, spikeA.rowId, eventRewardSignal, nowIso);\n\t\t\t\t}\n\t\t\t\tresult.ltpEvents++;\n\t\t\t\tif (wasRewardModulated) result.rewardModulatedEvents++;\n\t\t\t} catch {}\n\t\t\tlet deltaWNeg = -(A_POST * Math.exp(-deltaT / tau));\n\t\t\tlet ltdWasRewardModulated = false;\n\t\t\tif (eventRewardSignal !== null) {\n\t\t\t\tdeltaWNeg = Math.max(deltaWNeg * (1 - eventRewardSignal), -2 * A_POST);\n\t\t\t\tltdWasRewardModulated = true;\n\t\t\t}\n\t\t\tconst existingReverseEdge = prepareGetEdge.get(spikeB.entryId, spikeA.entryId);\n\t\t\tif (existingReverseEdge !== void 0 && Math.abs(deltaWNeg) >= 1e-6) try {\n\t\t\t\tconst currentReverseWeight = existingReverseEdge.weight;\n\t\t\t\tconst newReverseWeight = Math.max(WEIGHT_MIN, Math.min(WEIGHT_MAX, currentReverseWeight + deltaWNeg));\n\t\t\t\tconst upgradedClass = upgradePlasticityClass(existingReverseEdge.plasticity_class, \"stdp\");\n\t\t\t\tconst stability = computeStabilityScore(existingReverseEdge.reinforcement_count, existingReverseEdge.last_reinforced_at, now);\n\t\t\t\tprepareUpdateEdgeLtd.run(WEIGHT_MIN, WEIGHT_MAX, deltaWNeg, nowIso, upgradedClass, stability, spikeB.entryId, spikeA.entryId);\n\t\t\t\tif (isPlasticityEventDuplicate(nativeDb, spikeB.entryId, spikeA.entryId, \"ltd\", eventSessionId, 1)) {\n\t\t\t\t\tresult.ltdEvents++;\n\t\t\t\t\tif (ltdWasRewardModulated) result.rewardModulatedEvents++;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst ltdEvtStmt = prepareLogEvent.run(spikeB.entryId, spikeA.entryId, deltaWNeg, \"ltd\", nowIso, eventSessionId, spikeB.rowId, currentReverseWeight, newReverseWeight, deltaT);\n\t\t\t\tconst ltdEventId = ltdEvtStmt.lastInsertRowid != null ? Number(ltdEvtStmt.lastInsertRowid) : null;\n\t\t\t\tif (prepareLogWeightHistory) prepareLogWeightHistory.run(spikeB.entryId, spikeA.entryId, currentReverseWeight, newReverseWeight, deltaWNeg, \"ltd\", ltdEventId, spikeB.rowId, eventRewardSignal, nowIso);\n\t\t\t\tresult.ltdEvents++;\n\t\t\t\tif (ltdWasRewardModulated) result.rewardModulatedEvents++;\n\t\t\t} catch {}\n\t\t}\n\t}\n\treturn result;\n}\n/**\n* Backfill reward_signal values on brain_retrieval_log rows for a session.\n*\n* Step 9a of the `runConsolidation` pipeline — runs BEFORE `applyStdpPlasticity`\n* (Step 9b) so reward signals are present when STDP reads them.\n*\n* ## Signal derivation\n*\n* Queries tasks.db for tasks attributed to `sessionId` within `lookbackDays`.\n* Maps task outcomes to reward scalars:\n*\n* | Task state | Reward |\n* |-----------|--------|\n* | `status='done'`, `verification.passed=true` | +1.0 (verified correct) |\n* | `status='done'`, verification not passed | +0.5 (completed, unverified) |\n* | `status='cancelled'` | -0.5 (cancelled) |\n*\n* All brain_retrieval_log rows for the session receive the derived scalar as\n* a session-level reward (the entire session's retrieval pattern is rated by\n* the session's overall task outcome). If multiple tasks exist in the session,\n* the MAXIMUM reward takes precedence (positive outcome wins).\n*\n* ## Skipped sessions\n*\n* Sessions with `session_id LIKE 'ses_backfill_%'` are synthetic (date-bucketed\n* historical rows per M1). These have no real task correlation and MUST be skipped.\n*\n* ## Idempotency\n*\n* Already-labeled rows (reward_signal IS NOT NULL) are not overwritten.\n* Running twice on the same session is safe.\n*\n* ## Transaction pattern\n*\n* Two separate SQLite connections (no ATTACH): reads tasks.db → computes reward\n* map → writes brain.db in separate transactions. Matches `cross-db-cleanup.ts`.\n*\n* @param projectRoot - Project root directory for database resolution\n* @param sessionId - The session ID to backfill. Pass null/undefined for no-op.\n* @param lookbackDays - Days of tasks.db history to scan (default 30)\n* @returns Counts of rows labeled and skipped\n*\n* @task T681\n* @epic T673\n*/\nasync function backfillRewardSignals(projectRoot, sessionId, lookbackDays = 30) {\n\tconst result = {\n\t\trowsLabeled: 0,\n\t\trowsSkipped: 0\n\t};\n\tif (!sessionId) return result;\n\tif (sessionId.startsWith(\"ses_backfill_\")) return result;\n\tlet taskRows = [];\n\ttry {\n\t\tconst { getDb } = await import(\"./sqlite2.js\");\n\t\tconst tasksDb = await getDb(projectRoot);\n\t\tconst { tasks } = await import(\"./tasks-schema2.js\");\n\t\tconst { and, eq, inArray, gte, or, isNotNull } = await import(\"drizzle-orm\");\n\t\tconst cutoffTs = (/* @__PURE__ */ new Date(Date.now() - lookbackDays * 24 * 60 * 60 * 1e3)).toISOString().replace(\"T\", \" \").slice(0, 19);\n\t\ttaskRows = (await tasksDb.select({\n\t\t\tid: tasks.id,\n\t\t\tstatus: tasks.status,\n\t\t\tverificationJson: tasks.verificationJson,\n\t\t\tcompletedAt: tasks.completedAt,\n\t\t\tcancelledAt: tasks.cancelledAt\n\t\t}).from(tasks).where(and(eq(tasks.sessionId, sessionId), inArray(tasks.status, [\"done\", \"cancelled\"]), or(and(isNotNull(tasks.completedAt), gte(tasks.completedAt, cutoffTs)), and(isNotNull(tasks.cancelledAt), gte(tasks.cancelledAt, cutoffTs))))).all()).map((r) => ({\n\t\t\tid: r.id,\n\t\t\tstatus: r.status,\n\t\t\tverificationJson: r.verificationJson ?? null,\n\t\t\tcompletedAt: r.completedAt ?? null,\n\t\t\tcancelledAt: r.cancelledAt ?? null\n\t\t}));\n\t} catch {\n\t\treturn result;\n\t}\n\tif (taskRows.length === 0) return result;\n\tlet sessionReward = null;\n\t/** Derive the scalar reward for one task row. */\n\tfunction deriveTaskReward(task) {\n\t\tif (task.status === \"cancelled\") return -.5;\n\t\tlet verificationPassed = false;\n\t\tif (task.verificationJson) try {\n\t\t\tverificationPassed = JSON.parse(task.verificationJson).passed === true;\n\t\t} catch {}\n\t\treturn verificationPassed ? 1 : .5;\n\t}\n\tfor (const task of taskRows) {\n\t\tconst taskReward = deriveTaskReward(task);\n\t\tif (sessionReward === null || taskReward > sessionReward) sessionReward = taskReward;\n\t}\n\tif (sessionReward === null) return result;\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) return result;\n\t\ttry {\n\t\t\tnativeDb.prepare(\"SELECT 1 FROM brain_retrieval_log LIMIT 1\").get();\n\t\t} catch {\n\t\t\treturn result;\n\t\t}\n\t\tconst updateResult = nativeDb.prepare(`UPDATE brain_retrieval_log\n SET reward_signal = ?\n WHERE session_id = ?\n AND reward_signal IS NULL`).run(sessionReward, sessionId);\n\t\tconst updatedCount = typeof updateResult.changes === \"number\" ? updateResult.changes : 0;\n\t\tresult.rowsLabeled = updatedCount;\n\t\tresult.rowsSkipped = nativeDb.prepare(`SELECT COUNT(*) AS cnt FROM brain_retrieval_log\n WHERE session_id = ? AND reward_signal IS NOT NULL`).get(sessionId)?.cnt ?? 0;\n\t\tlet modulatorsExist = false;\n\t\ttry {\n\t\t\tnativeDb.prepare(\"SELECT 1 FROM brain_modulators LIMIT 1\").get();\n\t\t\tmodulatorsExist = true;\n\t\t} catch {}\n\t\tif (modulatorsExist && updatedCount > 0) {\n\t\t\tconst insertModulator = nativeDb.prepare(`INSERT INTO brain_modulators\n (modulator_type, valence, magnitude, source_event_id, session_id, description)\n VALUES (?, ?, 1.0, ?, ?, ?)`);\n\t\t\tfor (const task of taskRows) {\n\t\t\t\tconst taskReward = deriveTaskReward(task);\n\t\t\t\tlet modulatorType;\n\t\t\t\tlet description;\n\t\t\t\tif (task.status === \"cancelled\") {\n\t\t\t\t\tmodulatorType = \"task_cancelled\";\n\t\t\t\t\tdescription = `Task ${task.id} cancelled`;\n\t\t\t\t} else if (taskReward >= 1) {\n\t\t\t\t\tmodulatorType = \"task_verified\";\n\t\t\t\t\tdescription = `Task ${task.id} completed and verified`;\n\t\t\t\t} else {\n\t\t\t\t\tmodulatorType = \"task_completed\";\n\t\t\t\t\tdescription = `Task ${task.id} completed (unverified)`;\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tinsertModulator.run(modulatorType, taskReward, task.id, sessionId, description);\n\t\t\t\t} catch {}\n\t\t\t}\n\t\t}\n\t} catch {}\n\treturn result;\n}\n/**\n* Apply homeostatic weight decay to `hebbian` and `stdp` brain edges (Step 9c).\n*\n* Runs after `applyStdpPlasticity` (Step 9b) in the consolidation pipeline.\n* For each `co_retrieved` edge with `plasticity_class IN ('hebbian', 'stdp')` and\n* `last_reinforced_at` older than `gracePeriodDays`, applies:\n*\n* ```\n* new_weight = current_weight × (1 - decayRatePerDay) ^ days_idle\n* ```\n*\n* where `days_idle = (now − last_reinforced_at) − gracePeriodDays`.\n*\n* If `new_weight < pruneThreshold`, the edge is **deleted** and a\n* `brain_weight_history` row with `event_kind='prune'` is written.\n* If `new_weight >= pruneThreshold`, the weight is updated **without**\n* writing to `brain_weight_history` (routine decay is not logged per\n* spec §1 decision #11).\n*\n* **Protected edge classes** (never touched):\n* - `plasticity_class = 'static'` — structural edges\n* - `plasticity_class = 'external'` — externally owned edges\n* - Edges with `last_reinforced_at IS NULL` — never reinforced, skip decay\n*\n* @param projectRoot - Project root directory for brain.db resolution\n* @param options - Decay configuration (see `HomeostaticDecayOptions`)\n* @returns Counts of edges decayed and pruned\n*\n* @task T690\n* @epic T673\n* @see docs/specs/stdp-wire-up-spec.md §3.9\n*/\nasync function applyHomeostaticDecay(projectRoot, options) {\n\tconst decayRatePerDay = options?.decayRatePerDay ?? .02;\n\tconst gracePeriodDays = options?.gracePeriodDays ?? 7;\n\tconst pruneThreshold = options?.pruneThreshold ?? .05;\n\tconst result = {\n\t\tedgesDecayed: 0,\n\t\tedgesPruned: 0\n\t};\n\tconst { getBrainDb, getBrainNativeDb } = await import(\"./memory-sqlite2.js\");\n\tawait getBrainDb(projectRoot);\n\tconst nativeDb = getBrainNativeDb(projectRoot);\n\tif (!nativeDb) return result;\n\ttry {\n\t\tnativeDb.prepare(\"SELECT 1 FROM brain_page_edges LIMIT 1\").get();\n\t} catch {\n\t\treturn result;\n\t}\n\tconst nowIso = (/* @__PURE__ */ new Date()).toISOString().replace(\"T\", \" \").slice(0, 19);\n\tlet weightHistoryExists = false;\n\ttry {\n\t\tnativeDb.prepare(\"SELECT 1 FROM brain_weight_history LIMIT 1\").get();\n\t\tweightHistoryExists = true;\n\t} catch {}\n\tlet candidates = [];\n\ttry {\n\t\tcandidates = typedAll(nativeDb.prepare(`SELECT from_id, to_id, edge_type, weight, plasticity_class, last_reinforced_at\n FROM brain_page_edges\n WHERE plasticity_class IN ('hebbian', 'stdp')\n AND last_reinforced_at IS NOT NULL\n AND (julianday('now') - julianday(last_reinforced_at)) > ?`), gracePeriodDays);\n\t} catch {\n\t\treturn result;\n\t}\n\tif (candidates.length === 0) return result;\n\tconst prepareUpdateWeight = nativeDb.prepare(`UPDATE brain_page_edges\n SET weight = ?\n WHERE from_id = ? AND to_id = ? AND edge_type = ?`);\n\tconst prepareDeleteEdge = nativeDb.prepare(`DELETE FROM brain_page_edges\n WHERE from_id = ? AND to_id = ? AND edge_type = ?`);\n\tlet prepareInsertHistory = null;\n\tif (weightHistoryExists) try {\n\t\tprepareInsertHistory = nativeDb.prepare(`INSERT INTO brain_weight_history\n (edge_from_id, edge_to_id, edge_type, weight_before, weight_after,\n delta_weight, event_kind, changed_at)\n VALUES (?, ?, ?, ?, 0.0, ?, 'prune', ?)`);\n\t} catch {}\n\tconst nowMs = Date.now();\n\tfor (const edge of candidates) try {\n\t\tconst daysIdle = (nowMs - (/* @__PURE__ */ new Date(edge.last_reinforced_at.replace(\" \", \"T\") + \"Z\")).getTime()) / (1440 * 60 * 1e3);\n\t\tconst decayDays = Math.max(0, daysIdle - gracePeriodDays);\n\t\tconst newWeight = edge.weight * (1 - decayRatePerDay) ** decayDays;\n\t\tif (newWeight < pruneThreshold) {\n\t\t\tprepareDeleteEdge.run(edge.from_id, edge.to_id, edge.edge_type);\n\t\t\tresult.edgesPruned++;\n\t\t\tif (prepareInsertHistory) {\n\t\t\t\tconst deltaW = -edge.weight;\n\t\t\t\ttry {\n\t\t\t\t\tprepareInsertHistory.run(edge.from_id, edge.to_id, edge.edge_type, edge.weight, deltaW, nowIso);\n\t\t\t\t} catch {}\n\t\t\t}\n\t\t} else {\n\t\t\tprepareUpdateWeight.run(newWeight, edge.from_id, edge.to_id, edge.edge_type);\n\t\t\tresult.edgesDecayed++;\n\t\t}\n\t} catch {}\n\treturn result;\n}\n/**\n* Prune stale rows from `brain_plasticity_events` and `brain_weight_history`.\n*\n* The two tables are STDP-driven append-only event logs. Per the T10301 RCA,\n* unbounded growth (19K → 3.57M rows, 446 MB + 458 MB across 19 days) caused\n* `brain.db` to reach 1.7 GB and contributed to the malformation incident\n* (Saga T10281). T10348 wires retention discipline behind this single chokepoint.\n*\n* ### Two-stage prune\n*\n* 1. **Age-based**: delete rows with `timestamp` / `changed_at` older than\n* `retentionDays` days (default 30 — matches STDP `lookbackDays`).\n* 2. **Row-cap fallback**: after step 1, if the table is still over its row\n* cap, delete the oldest remaining rows until under the cap.\n*\n* ### Operator override\n*\n* `CLEO_BRAIN_HISTORY_RETENTION_DAYS=0` disables both stages entirely. Any\n* positive integer value REPLACES `retentionDays` (the option still wins if\n* passed explicitly — env is only consulted when no option is passed).\n*\n* ### Best-effort semantics\n*\n* Every SQL call is wrapped — missing tables, partial-migration installs,\n* and per-row errors are all logged silently and never throw. This function\n* MUST NEVER block `runConsolidation` even when retention storage is wedged.\n*\n* ### Logging\n*\n* When `plasticityEventsDeleted + weightHistoryDeleted >= PRUNE_HISTORY_LOG_THRESHOLD`\n* (default 10_000), a single `[pruneStaleHistory]` info line is emitted via\n* `console.info` so operators can see large prunes in session output. Smaller\n* prunes are silent. VACUUM is NEVER triggered automatically — heavyweight\n* compaction stays operator-driven (`cleo doctor --vacuum`).\n*\n* @param projectRoot - Project root directory for brain.db resolution\n* @param options - Retention configuration (see `PruneStaleHistoryOptions`)\n* @returns Counts of rows deleted from each table\n*\n* @task T10348\n* @epic T10286\n*/\nasync function pruneStaleHistory(projectRoot, options) {\n\tconst result = {\n\t\tplasticityEventsDeleted: 0,\n\t\tweightHistoryDeleted: 0,\n\t\tskipped: false\n\t};\n\tlet retentionDays;\n\tif (options?.retentionDays !== void 0) retentionDays = options.retentionDays;\n\telse {\n\t\tconst envRaw = process.env[\"CLEO_BRAIN_HISTORY_RETENTION_DAYS\"];\n\t\tif (envRaw !== void 0 && envRaw !== \"\") {\n\t\t\tconst parsed = Number.parseInt(envRaw, 10);\n\t\t\tretentionDays = Number.isFinite(parsed) && parsed >= 0 ? parsed : 30;\n\t\t} else retentionDays = 30;\n\t}\n\tif (retentionDays === 0) {\n\t\tresult.skipped = true;\n\t\treturn result;\n\t}\n\tconst plasticityRowCap = options?.plasticityEventsRowCap ?? 5e4;\n\tconst weightHistoryRowCap = options?.weightHistoryRowCap ?? 5e4;\n\tconst { getBrainDb, getBrainNativeDb } = await import(\"./memory-sqlite2.js\");\n\tawait getBrainDb(projectRoot);\n\tconst nativeDb = getBrainNativeDb(projectRoot);\n\tif (!nativeDb) return result;\n\tconst cutoffMs = Date.now() - retentionDays * 24 * 60 * 60 * 1e3;\n\tconst cutoffIso = new Date(cutoffMs).toISOString().replace(\"T\", \" \").slice(0, 19);\n\ttry {\n\t\tnativeDb.prepare(\"SELECT 1 FROM brain_plasticity_events LIMIT 1\").get();\n\t\tconst changes = nativeDb.prepare(`DELETE FROM brain_plasticity_events WHERE timestamp < ?`).run(cutoffIso).changes;\n\t\tresult.plasticityEventsDeleted += Number(changes ?? 0);\n\t} catch {}\n\ttry {\n\t\tnativeDb.prepare(\"SELECT 1 FROM brain_weight_history LIMIT 1\").get();\n\t\tconst changes = nativeDb.prepare(`DELETE FROM brain_weight_history WHERE changed_at < ?`).run(cutoffIso).changes;\n\t\tresult.weightHistoryDeleted += Number(changes ?? 0);\n\t} catch {}\n\ttry {\n\t\tconst row = nativeDb.prepare(`SELECT COUNT(*) AS cnt FROM brain_plasticity_events`).get();\n\t\tconst count = Number(row?.cnt ?? 0);\n\t\tif (count > plasticityRowCap) {\n\t\t\tconst overage = count - plasticityRowCap;\n\t\t\tconst info = nativeDb.prepare(`DELETE FROM brain_plasticity_events\n WHERE id IN (\n SELECT id FROM brain_plasticity_events\n ORDER BY timestamp ASC, id ASC\n LIMIT ?\n )`).run(overage);\n\t\t\tresult.plasticityEventsDeleted += Number(info.changes ?? 0);\n\t\t}\n\t} catch {}\n\ttry {\n\t\tconst row = nativeDb.prepare(`SELECT COUNT(*) AS cnt FROM brain_weight_history`).get();\n\t\tconst count = Number(row?.cnt ?? 0);\n\t\tif (count > weightHistoryRowCap) {\n\t\t\tconst overage = count - weightHistoryRowCap;\n\t\t\tconst info = nativeDb.prepare(`DELETE FROM brain_weight_history\n WHERE id IN (\n SELECT id FROM brain_weight_history\n ORDER BY changed_at ASC, id ASC\n LIMIT ?\n )`).run(overage);\n\t\t\tresult.weightHistoryDeleted += Number(info.changes ?? 0);\n\t\t}\n\t} catch {}\n\tif (result.plasticityEventsDeleted + result.weightHistoryDeleted >= 1e4) console.info(`[pruneStaleHistory] Pruned ${result.plasticityEventsDeleted} plasticity_events + ${result.weightHistoryDeleted} weight_history rows (retention=${retentionDays}d). Consider running 'cleo doctor --vacuum' to reclaim disk space.`);\n\treturn result;\n}\n//#endregion\nexport { applyStdpPlasticity as a, pruneStaleHistory as c, applyHomeostaticDecay as i, shouldRunPlasticity as l, MAX_WEIGHT_HISTORY_ROW_CAP as n, backfillRewardSignals as o, PRUNE_HISTORY_LOG_THRESHOLD as r, computeTau as s, MAX_PLASTICITY_EVENTS_ROW_CAP as t };\n"],"names":[],"mappings":";;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,sBAAsB,CAAC,YAAY,EAAE,KAAK,EAAE;AACrD,CAAC,MAAM,OAAO,GAAG,YAAY,IAAI,QAAQ;AACzC,CAAC,IAAI,OAAO,KAAK,MAAM,EAAE,OAAO,MAAM;AACtC,CAAuB,OAAO,MAAM;AAGpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,qBAAqB,CAAC,kBAAkB,EAAE,gBAAgB,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE;AACvF,CAAC,IAAI,CAAC,kBAAkB,IAAI,kBAAkB,IAAI,CAAC,EAAE,OAAO,IAAI;AAChE,CAAC,IAAI,CAAC,gBAAgB,EAAE,OAAO,IAAI;AACnC,CAAC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;AAClD,CAAC,MAAM,OAAO,GAAG,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,gBAAgB,CAAC,CAAC,OAAO,EAAE,KAAK,IAAI,GAAG,EAAE,GAAG,GAAG,CAAC;AACjF,CAAC,MAAM,SAAS,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,GAAG,EAAE,CAAC;AACnD,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,qBAAqB,GAAG,EAAE;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,yBAAyB,GAAG,IAAI,GAAG,EAAE,GAAG,GAAG;AAkC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,WAAW,GAAG,GAAG;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,cAAc,GAAG,IAAI,GAAG,GAAG;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,eAAe,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG;AACpC;AACA;AACA;AACA;AACA,IAAI,qBAAqB,GAAG,GAAG;AAC/B;AACA;AACA;AACA;AACA,IAAI,wBAAwB,GAAG,IAAI,GAAG,GAAG;AACzC;AACA,IAAI,KAAK,GAAG,GAAG;AACf;AACA,IAAI,MAAM,GAAG,GAAG;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,SAAS,GAAG,GAAG;AACnB;AACA,IAAI,UAAU,GAAG,CAAC;AAClB;AACA,IAAI,UAAU,GAAG,CAAC;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,UAAU,CAAC,MAAM,EAAE;AAC5B,CAAC,IAAI,MAAM,IAAI,qBAAqB,EAAE,OAAO,WAAW;AACxD,CAAC,IAAI,MAAM,IAAI,wBAAwB,EAAE,OAAO,cAAc;AAC9D,CAAC,OAAO,eAAe;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,0BAA0B,CAAC,QAAQ,EAAE,UAA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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"brain-writer-handlers-Dwu0QCAA.js","sources":["../../../.svelte-kit/adapter-node/chunks/brain-writer-handlers.js"],"sourcesContent":["import { t as getLogger } from \"./logger.js\";\nimport { join } from \"node:path\";\nimport { isMainThread } from \"node:worker_threads\";\n//#region ../core/dist/memory/brain-writer-handlers.js\n/**\n* BRAIN writer-thread op handlers.\n*\n* Shared between the worker thread (`brain-writer-worker.ts`) and the\n* inline fallback executor inside `brain-writer-thread.ts`. Each op kind\n* lands here as its terminal SQL/orchestration call; **this is the only\n* module that opens a write handle to brain.db** during normal operation.\n*\n* Read-only callers continue to use `getBrainDb` / `getBrainNativeDb` on\n* the main thread — SQLite WAL allows concurrent readers.\n*\n* @task T10351\n* @epic T10286\n* @saga T10281\n*/\n/**\n* Synchronise the writer's `CLEO_DIR` view with the op's authoritative\n* `projectRoot` when executing inside the brain-writer worker thread.\n*\n* ## Why this is required (cross-thread env staleness)\n*\n* `worker_threads.Worker` receives a *snapshot copy* of `process.env` at spawn\n* time; later mutations on the main thread are NOT propagated to the worker.\n* The persistent brain-writer worker is spawned lazily on the first enqueue and\n* then lives for the rest of the process, so its `process.env['CLEO_DIR']` is\n* frozen to whatever value was set when it spawned.\n*\n* `resolveCleoDir()` gives an absolute `CLEO_DIR` override precedence over the\n* explicitly-passed `cwd` (paths.ts step 2 > step 3). Inside the worker, that\n* stale absolute override therefore wins over the op's `projectRoot`, so every\n* downstream `getDb()` / `resolveCleoDir()` (e.g. the cross-db session\n* write-guard in `observeBrain`) resolves to the WRONG `.cleo` directory —\n* silently dropping cross-db references such as `sourceSessionId`.\n*\n* Each write op already carries its authoritative `projectRoot`, so on the\n* worker thread we re-point `CLEO_DIR` to `<projectRoot>/.cleo` before\n* dispatching — exactly mirroring the value the main thread holds. On the main\n* thread (inline-fallback executor) we leave `process.env` untouched: its\n* `CLEO_DIR` is already authoritative and must not be clobbered.\n*\n* @param projectRoot - The op's authoritative project root.\n*/\nfunction syncWorkerCleoDir(projectRoot) {\n\tif (isMainThread) return;\n\tprocess.env[\"CLEO_DIR\"] = join(projectRoot, \".cleo\");\n}\n/**\n* Dispatch a write op to its terminal handler. Throws on failure — the worker\n* envelope code converts the throw into an `ok:false` response.\n*\n* @param op - The discriminated write op.\n* @returns A typed `BrainWriteResult` mirroring the op's `kind`.\n*/\nasync function handleWriteOp(op) {\n\tsyncWorkerCleoDir(op.projectRoot);\n\tswitch (op.kind) {\n\t\tcase \"observe\": return handleObserve(op);\n\t\tcase \"decision\": return handleDecision(op);\n\t\tcase \"learning\": return handleLearning(op);\n\t\tcase \"plasticity_event\": return handlePlasticityEvent(op);\n\t\tcase \"weight_update\": return handleWeightUpdate(op);\n\t\tcase \"dialectic\": return handleDialectic(op);\n\t\tdefault: throw new Error(`Unknown BrainWriteOp kind: ${JSON.stringify(op)}`);\n\t}\n}\nasync function handleObserve(op) {\n\tconst { observeBrain } = await import(\"./observe.js\");\n\treturn {\n\t\tkind: \"observe\",\n\t\tresult: await observeBrain(op.projectRoot, {\n\t\t\t...op.params,\n\t\t\t_skipQueue: true\n\t\t})\n\t};\n}\nasync function handleDecision(op) {\n\tconst { getBrainAccessor } = await import(\"./memory-accessor.js\");\n\treturn {\n\t\tkind: \"decision\",\n\t\tid: (await (await getBrainAccessor(op.projectRoot)).addDecision(op.row)).id\n\t};\n}\nasync function handleLearning(op) {\n\tconst { getBrainAccessor } = await import(\"./memory-accessor.js\");\n\treturn {\n\t\tkind: \"learning\",\n\t\tid: (await (await getBrainAccessor(op.projectRoot)).addLearning(op.row)).id\n\t};\n}\nasync function handlePlasticityEvent(op) {\n\tconst { getBrainDb, getBrainNativeDb } = await import(\"./memory-sqlite2.js\");\n\tawait getBrainDb(op.projectRoot);\n\tconst nativeDb = getBrainNativeDb(op.projectRoot);\n\tif (!nativeDb) throw new Error(\"brain native DB unavailable for plasticity_event op\");\n\tconst result = nativeDb.prepare(`INSERT INTO brain_plasticity_events\n (source_node, target_node, delta_w, kind, timestamp,\n session_id, retrieval_log_id, weight_before, weight_after, delta_t_ms)\n VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`).run(op.sourceNode, op.targetNode, op.deltaW, op.eventKind, op.timestamp, op.sessionId, op.retrievalLogId, op.weightBefore, op.weightAfter, op.deltaTms);\n\treturn {\n\t\tkind: \"plasticity_event\",\n\t\tlastInsertRowid: typeof result.lastInsertRowid === \"bigint\" ? Number(result.lastInsertRowid) : typeof result.lastInsertRowid === \"number\" ? result.lastInsertRowid : null\n\t};\n}\nasync function handleWeightUpdate(op) {\n\tconst { getBrainDb, getBrainNativeDb } = await import(\"./memory-sqlite2.js\");\n\tawait getBrainDb(op.projectRoot);\n\tconst nativeDb = getBrainNativeDb(op.projectRoot);\n\tif (!nativeDb) throw new Error(\"brain native DB unavailable for weight_update op\");\n\ttry {\n\t\tnativeDb.prepare(\"SELECT 1 FROM brain_weight_history LIMIT 1\").get();\n\t} catch {\n\t\treturn {\n\t\t\tkind: \"weight_update\",\n\t\t\tok: true\n\t\t};\n\t}\n\tnativeDb.prepare(`INSERT INTO brain_weight_history\n (edge_from_id, edge_to_id, edge_type, weight_before, weight_after,\n delta_weight, event_kind, source_plasticity_event_id, retrieval_log_id,\n reward_signal, changed_at)\n VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`).run(op.edgeFromId, op.edgeToId, op.edgeType, op.weightBefore, op.weightAfter, op.deltaWeight, op.eventKind, op.sourcePlasticityEventId, op.retrievalLogId, op.rewardSignal, op.changedAt);\n\treturn {\n\t\tkind: \"weight_update\",\n\t\tok: true\n\t};\n}\nasync function handleDialectic(op) {\n\tconst log = getLogger(\"brain-writer\");\n\tconst sourceTag = `dialectic:${op.sessionId}`;\n\tfor (const insight of op.insights.peerInsights) try {\n\t\tconst { observeBrain } = await import(\"./observe.js\");\n\t\tawait observeBrain(op.projectRoot, {\n\t\t\ttext: `[${insight.key}] ${insight.value}`,\n\t\t\ttitle: insight.key,\n\t\t\tsourceSessionId: op.sessionId,\n\t\t\tsourceType: \"agent\",\n\t\t\tagent: op.activePeerId,\n\t\t\tsourceConfidence: insight.confidence >= .8 ? \"task-outcome\" : \"agent\",\n\t\t\t_skipQueue: true\n\t\t});\n\t} catch (err) {\n\t\tlog.warn({\n\t\t\terr,\n\t\t\tsourceTag,\n\t\t\tkey: insight.key\n\t\t}, \"dialectic peer insight write failed\");\n\t}\n\tif (op.insights.sessionNarrativeDelta) try {\n\t\tconst { appendNarrativeDelta } = await import(\"./session-narrative.js\");\n\t\tawait appendNarrativeDelta(op.sessionId, op.insights.sessionNarrativeDelta, op.projectRoot);\n\t} catch (err) {\n\t\tlog.warn({\n\t\t\terr,\n\t\t\tsourceTag\n\t\t}, \"dialectic narrative delta write failed\");\n\t}\n\treturn {\n\t\tkind: \"dialectic\",\n\t\tok: true\n\t};\n}\n//#endregion\nexport { handleWriteOp };\n"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"brain-writer-thread-6n7wI7Gy.js","sources":["../../../.svelte-kit/adapter-node/chunks/brain-writer-thread2.js"],"sourcesContent":["import { t as getLogger } from \"./logger.js\";\nimport { c as resolveDualScopeDbPath, d as acquireWriterLease, f as assertWriterLeaseHeld, p as resolveLeaseMode } from \"./dual-scope-db.js\";\nimport { existsSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n//#region ../core/dist/memory/brain-writer-thread.js\n/**\n* BRAIN single-writer chokepoint — main-thread queue manager.\n*\n* All hot-path writes to `brain.db` MUST route through `enqueueBrainWrite` so\n* that a single Node.js `worker_threads.Worker` owns the only write handle and\n* serializes every INSERT/UPDATE through one consumer. This eliminates the\n* within-process race documented in the T10301 RCA (page-1 sqlite_schema\n* B-tree corruption caused by concurrent setImmediate writers + dialectic-hook\n* + propose-tick reconciler + STDP plasticity loop all opening their own\n* `getBrainDb` singletons).\n*\n* ## Architecture\n*\n* Main thread Worker thread\n* ─────────── ─────────────\n* enqueueBrainWrite(op) (owns getBrainDb handle)\n* │ ▲\n* ▼ │ MessagePort\n* pendingRequests[seq] = {resolve, reject} │\n* │ │\n* └──── postMessage({seq, op}) ────────┘\n* │\n* ▼\n* handleWriteOp(op)\n* (SQL INSERT/UPDATE)\n* │\n* ┌──── postMessage({seq, ok, ...})────┘\n* ▼\n* resolve(...) → caller's await\n*\n* Reads continue to use `getBrainDb` / `getBrainNativeDb` directly. SQLite WAL\n* permits concurrent readers; only writes must be funneled.\n*\n* ## Bypass mechanism\n*\n* Forensic / one-shot scripts that need a direct write handle can set\n* `CLEO_BRAIN_BYPASS_WRITER_THREAD=1`. Each call to `enqueueBrainWrite` then\n* executes the op inline on the main thread. **A Pino warn is emitted on every\n* bypass** (audit trail per AC #5).\n*\n* @task T10351\n* @epic T10286\n* @saga T10281\n*/\n/**\n* Check whether the bypass env var is set. Emits a Pino warn on every call\n* so the audit trail is preserved (AC #5).\n*/\nfunction bypassEnabled() {\n\tif (process.env[\"CLEO_BRAIN_BYPASS_WRITER_THREAD\"] === \"1\") {\n\t\tgetLogger(\"brain-writer\").warn({\n\t\t\tevent: \"bypass-active\",\n\t\t\tenvVar: \"CLEO_BRAIN_BYPASS_WRITER_THREAD\"\n\t\t}, \"Brain writer-thread chokepoint bypassed via env var — direct main-thread write\");\n\t\treturn true;\n\t}\n\treturn false;\n}\n/**\n* Resolve the absolute path to the compiled brain-writer-worker script.\n*\n* Strategy:\n* 1. Adjacent to this file (`memory/brain-writer-worker.js`)\n* 2. Fallback null when not found (esbuild bundle context, tests, etc.)\n*/\nfunction resolveWorkerPath() {\n\ttry {\n\t\tconst candidate = join(dirname(fileURLToPath(import.meta.url)), \"brain-writer-worker.js\");\n\t\tif (existsSync(candidate)) return candidate;\n\t\treturn null;\n\t} catch {\n\t\treturn null;\n\t}\n}\n/**\n* Singleton writer-thread manager. One worker per process, owns the only\n* brain.db write handle. Reads remain on the main thread via `getBrainDb`.\n*/\nvar BrainWriterManager = class {\n\tworker = null;\n\tworkerReady = false;\n\tworkerInitError = null;\n\tinitPromise = null;\n\tpending = /* @__PURE__ */ new Map();\n\tseqCounter = 0;\n\tshuttingDown = false;\n\t/** Lazy-initialize the worker thread on first enqueue. */\n\tasync ensureWorker() {\n\t\tif (this.workerReady || this.shuttingDown) return;\n\t\tif (this.workerInitError) throw this.workerInitError;\n\t\tif (this.initPromise) return this.initPromise;\n\t\tthis.initPromise = this.doInit();\n\t\ttry {\n\t\t\tawait this.initPromise;\n\t\t} finally {\n\t\t\tthis.initPromise = null;\n\t\t}\n\t}\n\tasync doInit() {\n\t\tconst workerPath = resolveWorkerPath();\n\t\tif (!workerPath) {\n\t\t\tthis.workerInitError = /* @__PURE__ */ new Error(\"brain-writer-worker.js not found adjacent to brain-writer-thread.js\");\n\t\t\tthrow this.workerInitError;\n\t\t}\n\t\tconst { Worker } = await import(\"node:worker_threads\");\n\t\tconst worker = new Worker(workerPath);\n\t\tworker.on(\"message\", (msg) => {\n\t\t\tthis.handleWorkerMessage(msg);\n\t\t});\n\t\tworker.on(\"error\", (err) => {\n\t\t\tfor (const [, req] of this.pending) req.reject(err instanceof Error ? err : new Error(String(err)));\n\t\t\tthis.pending.clear();\n\t\t\tthis.worker = null;\n\t\t\tthis.workerReady = false;\n\t\t\tthis.workerInitError = err instanceof Error ? err : new Error(String(err));\n\t\t\tgetLogger(\"brain-writer\").error({ err }, \"Brain writer-thread crashed\");\n\t\t});\n\t\tworker.on(\"exit\", (code) => {\n\t\t\tthis.worker = null;\n\t\t\tthis.workerReady = false;\n\t\t\tif (code !== 0 && !this.shuttingDown) {\n\t\t\t\tconst err = /* @__PURE__ */ new Error(`brain-writer-worker exited with code ${code}`);\n\t\t\t\tfor (const [, req] of this.pending) req.reject(err);\n\t\t\t\tthis.pending.clear();\n\t\t\t\tthis.workerInitError = err;\n\t\t\t}\n\t\t});\n\t\tthis.worker = worker;\n\t\tthis.workerReady = true;\n\t}\n\thandleWorkerMessage(msg) {\n\t\tconst pending = this.pending.get(msg.seq);\n\t\tif (!pending) return;\n\t\tthis.pending.delete(msg.seq);\n\t\tif (msg.ok) pending.resolve(msg.result);\n\t\telse pending.reject(new Error(msg.error));\n\t}\n\t/**\n\t* Enqueue a write op. Returns a promise that resolves with the worker's\n\t* result envelope payload (shape depends on op kind).\n\t*/\n\tasync enqueue(op) {\n\t\tif (this.shuttingDown) throw new Error(\"brain-writer is shutting down — no new writes accepted\");\n\t\tawait this.ensureWorker();\n\t\tconst worker = this.worker;\n\t\tif (!worker) throw new Error(\"brain-writer worker is not available\");\n\t\tconst seq = ++this.seqCounter;\n\t\tconst envelope = {\n\t\t\tseq,\n\t\t\top\n\t\t};\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.pending.set(seq, {\n\t\t\t\tresolve,\n\t\t\t\treject\n\t\t\t});\n\t\t\ttry {\n\t\t\t\tworker.postMessage(envelope);\n\t\t\t} catch (err) {\n\t\t\t\tthis.pending.delete(seq);\n\t\t\t\treject(err instanceof Error ? err : new Error(String(err)));\n\t\t\t}\n\t\t});\n\t}\n\t/** Drain pending work and terminate the worker. Idempotent. */\n\tasync shutdown() {\n\t\tif (this.shuttingDown) return;\n\t\tthis.shuttingDown = true;\n\t\tconst grace = 250;\n\t\tconst started = Date.now();\n\t\twhile (this.pending.size > 0 && Date.now() - started < grace) await new Promise((r) => setTimeout(r, 25));\n\t\tif (this.worker) {\n\t\t\ttry {\n\t\t\t\tawait this.worker.terminate();\n\t\t\t} catch {}\n\t\t\tthis.worker = null;\n\t\t}\n\t\tthis.workerReady = false;\n\t\tthis.pending.clear();\n\t}\n\t/** @internal — test helper */\n\t_hasInFlight() {\n\t\treturn this.pending.size;\n\t}\n};\n/**\n* The cleo.db scope the brain WRITE handle targets. `getBrainDb()` routes through\n* `openDualScopeDb('project')` (memory-sqlite.ts T11522) — the `brain_*` tables\n* live in the consolidated PROJECT `cleo.db`, co-located with `tasks_*`. So the\n* brain lane is leased in the `'project'` scope.\n*/\nvar BRAIN_LEASE_SCOPE = \"project\";\n/** The dedicated brain write lane (AC4 — held independently of the `tasks` chokepoint). */\nvar BRAIN_LEASE_LANE = \"brain\";\n/** Batch grants keyed by the concrete project `cleo.db` path. */\nvar _brainBatches = /* @__PURE__ */ new Map();\n/**\n* Acquire (or re-enter) the batch-granularity `brain` lease for the duration of a\n* single `enqueueBrainWrite`. The first in-flight call acquires the lease;\n* concurrent calls share it (refcount) — including callers that race the FIRST\n* acquire, which single-flight onto the same in-flight promise rather than each\n* running a full acquire. The lease is released when the last in-flight call\n* finishes (refcount → 0). In `off` mode this is a no-op pass-through (no lease,\n* `busy_timeout` serializes as before).\n*\n* @returns A release callback the caller MUST invoke (in a `finally`) when its\n* write completes; the underlying row is freed only when the batch quiesces.\n*/\nasync function enterBrainBatchLease(dbPath) {\n\tif (resolveLeaseMode() === \"off\") return async () => {};\n\tlet state = _brainBatches.get(dbPath);\n\tif (state === void 0) {\n\t\tstate = {\n\t\t\thandle: null,\n\t\t\trefcount: 0,\n\t\t\tinflight: null\n\t\t};\n\t\t_brainBatches.set(dbPath, state);\n\t}\n\tif (state.handle === null) {\n\t\tif (state.inflight === null) state.inflight = acquireWriterLease(BRAIN_LEASE_SCOPE, BRAIN_LEASE_LANE, {\n\t\t\tpriority: 50,\n\t\t\tdbPath\n\t\t});\n\t\tconst inflight = state.inflight;\n\t\ttry {\n\t\t\tconst handle = await inflight;\n\t\t\tif (state.handle === null) state.handle = handle;\n\t\t} finally {\n\t\t\tif (state.inflight === inflight) state.inflight = null;\n\t\t}\n\t}\n\tstate.refcount += 1;\n\tlet released = false;\n\treturn async () => {\n\t\tif (released) return;\n\t\treleased = true;\n\t\tstate.refcount -= 1;\n\t\tif (state.refcount <= 0 && state.handle !== null) {\n\t\t\tconst handle = state.handle;\n\t\t\tstate.handle = null;\n\t\t\tstate.refcount = 0;\n\t\t\tif (_brainBatches.get(dbPath) === state) _brainBatches.delete(dbPath);\n\t\t\tawait handle.release();\n\t\t}\n\t};\n}\n/**\n* Async mutex used by the inline fallback path so that bypass-mode writes\n* (and the test-env path where the worker file is unavailable) still\n* serialize within the process. Without this guard, the bypass would\n* reintroduce the very race condition the chokepoint exists to eliminate.\n*/\nvar inlineQueueTail = Promise.resolve();\nfunction runInline(op) {\n\tconst next = inlineQueueTail.then(() => executeInline(op));\n\tinlineQueueTail = next.catch(() => void 0);\n\treturn next;\n}\n/**\n* Inline executor — imports the worker's handler module dynamically and runs\n* the op on the main thread. Used by:\n* - bypass mode (`CLEO_BRAIN_BYPASS_WRITER_THREAD=1`)\n* - worker-unavailable contexts (tests, esbuild bundle context)\n*\n* The handler module is shared between the worker thread and this fallback,\n* so behaviour is identical except for the thread of execution.\n*/\nasync function executeInline(op) {\n\tassertWriterLeaseHeld(BRAIN_LEASE_SCOPE, BRAIN_LEASE_LANE, resolveDualScopeDbPath(BRAIN_LEASE_SCOPE, op.projectRoot));\n\tconst { handleWriteOp } = await import(\"./brain-writer-handlers.js\");\n\treturn handleWriteOp(op);\n}\nvar _manager = null;\nfunction getManager() {\n\tif (!_manager) {\n\t\t_manager = new BrainWriterManager();\n\t\tprocess.on(\"exit\", () => {\n\t\t\t_manager?.shutdown().catch(() => void 0);\n\t\t});\n\t\tconst gracefulShutdown = () => {\n\t\t\tconst deadline = setTimeout(() => process.exit(0), 2e3);\n\t\t\tdeadline.unref();\n\t\t\t_manager?.shutdown().catch(() => void 0).finally(() => {\n\t\t\t\tclearTimeout(deadline);\n\t\t\t});\n\t\t};\n\t\tprocess.once(\"SIGTERM\", gracefulShutdown);\n\t\tprocess.once(\"SIGINT\", gracefulShutdown);\n\t}\n\treturn _manager;\n}\n/**\n* Enqueue a brain.db write op through the single-writer chokepoint.\n*\n* Resolves with the typed result for the op's `kind`. Rejects when:\n* - the op fails inside the worker (worker forwards the error message)\n* - the worker crashes (the in-flight promise rejects with the worker error)\n* - bypass mode is on AND the inline execution fails\n*\n* @example\n* ```ts\n* const result = await enqueueBrainWrite({\n* kind: 'observe',\n* projectRoot: '/path/to/project',\n* params: { text: 'Decided X over Y', sourceType: 'manual' },\n* });\n* if (result.kind === 'observe') {\n* console.log('Stored observation', result.result.id);\n* }\n* ```\n*\n* @param op - The write op (discriminated by `kind`).\n* @returns Worker result for the op.\n*/\nasync function enqueueBrainWrite(op) {\n\tconst releaseBatch = await enterBrainBatchLease(resolveDualScopeDbPath(BRAIN_LEASE_SCOPE, op.projectRoot));\n\ttry {\n\t\tif (bypassEnabled()) return await runInline(op);\n\t\ttry {\n\t\t\treturn await getManager().enqueue(op);\n\t\t} catch (err) {\n\t\t\tconst msg = err instanceof Error ? err.message : String(err);\n\t\t\tgetLogger(\"brain-writer\").debug({ err: msg }, \"Brain writer-thread unavailable — falling back to inline serialized executor\");\n\t\t\treturn await runInline(op);\n\t\t}\n\t} finally {\n\t\tawait releaseBatch();\n\t}\n}\n//#endregion\nexport { enqueueBrainWrite as t };\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,aAAa,GAAG;AACzB,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,KAAK,GAAG,EAAE;AAC7D,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC;AACjC,GAAG,KAAK,EAAE,eAAe;AACzB,GAAG,MAAM,EAAE;AACX,GAAG,EAAE,gFAAgF,CAAC;AACtF,EAAE,OAAO,IAAI;AACb,CAAC;AACD,CAAC,OAAO,KAAK;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,iBAAiB,GAAG;AAC7B,CAAC,IAAI;AACL,EAAE,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,wBAAwB,CAAC;AAC3F,EAAE,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,OAAO,SAAS;AAC7C,EAAE,OAAO,IAAI;AACb,CAAC,CAAC,CAAC,MAAM;AACT,EAAE,OAAO,IAAI;AACb,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,IAAI,kBAAkB,GAAG,MAAM;AAC/B,CAAC,MAAM,GAAG,IAAI;AACd,CAAC,WAAW,GAAG,KAAK;AACpB,CAAC,eAAe,GAAG,IAAI;AACvB,CAAC,WAAW,GAAG,IAAI;AACnB,CAAC,OAAO,mBAAmB,IAAI,GAAG,EAAE;AACpC,CAAC,UAAU,GAAG,CAAC;AACf,CAAC,YAAY,GAAG,KAAK;AACrB;AACA,CAAC,MAAM,YAAY,GAAG;AACtB,EAAE,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,YAAY,EAAE;AAC7C,EAAE,IAAI,IAAI,CAAC,eAAe,EAAE,MAAM,IAAI,CAAC,eAAe;AACtD,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE,OAAO,IAAI,CAAC,WAAW;AAC/C,EAAE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,EAAE;AAClC,EAAE,IAAI;AACN,GAAG,MAAM,IAAI,CAAC,WAAW;AACzB,EAAE,CAAC,SAAS;AACZ,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI;AAC1B,EAAE;AACF,CAAC;AACD,CAAC,MAAM,MAAM,GAAG;AAChB,EAAE,MAAM,UAAU,GAAG,iBAAiB,EAAE;AACxC,EAAE,IAAI,CAAC,UAAU,EAAE;AACnB,GAAG,IAAI,CAAC,eAAe,mBAAmB,IAAI,KAAK,CAAC,qEAAqE,CAAC;AAC1H,GAAG,MAAM,IAAI,CAAC,eAAe;AAC7B,EAAE;AACF,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,OAAO,qBAAqB,CAAC;AACxD,EAAE,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,UAAU,CAAC;AACvC,EAAE,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,KAAK;AAChC,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC;AAChC,EAAE,CAAC,CAAC;AACJ,EAAE,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,KAAK;AAC9B,GAAG,KAAK,MAAM,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,YAAY,KAAK,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AACtG,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;AACvB,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI;AACrB,GAAG,IAAI,CAAC,WAAW,GAAG,KAAK;AAC3B,GAAG,IAAI,CAAC,eAAe,GAAG,GAAG,YAAY,KAAK,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC7E,GAAG,SAAS,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,6BAA6B,CAAC;AAC1E,EAAE,CAAC,CAAC;AACJ,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,KAAK;AAC9B,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI;AACrB,GAAG,IAAI,CAAC,WAAW,GAAG,KAAK;AAC3B,GAAG,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACzC,IAAI,MAAM,GAAG,mBAAmB,IAAI,KAAK,CAAC,CAAC,qCAAqC,EAAE,IAAI,CAAC,CAAC,CAAC;AACzF,IAAI,KAAK,MAAM,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC;AACvD,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;AACxB,IAAI,IAAI,CAAC,eAAe,GAAG,GAAG;AAC9B,GAAG;AACH,EAAE,CAAC,CAAC;AACJ,EAAE,IAAI,CAAC,MAAM,GAAG,MAAM;AACtB,EAAE,IAAI,CAAC,WAAW,GAAG,IAAI;AACzB,CAAC;AACD,CAAC,mBAAmB,CAAC,GAAG,EAAE;AAC1B,EAAE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;AAC3C,EAAE,IAAI,CAAC,OAAO,EAAE;AAChB,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;AAC9B,EAAE,IAAI,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;AACzC,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC3C,CAAC;AACD;AACA;AACA;AACA;AACA,CAAC,MAAM,OAAO,CAAC,EAAE,EAAE;AACnB,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC;AAClG,EAAE,MAAM,IAAI,CAAC,YAAY,EAAE;AAC3B,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM;AAC5B,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC;AACtE,EAAE,MAAM,GAAG,GAAG,EAAE,IAAI,CAAC,UAAU;AAC/B,EAAE,MAAM,QAAQ,GAAG;AACnB,GAAG,GAAG;AACN,GAAG;AACH,GAAG;AACH,EAAE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK;AAC1C,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE;AACzB,IAAI,OAAO;AACX,IAAI;AACJ,IAAI,CAAC;AACL,GAAG,IAAI;AACP,IAAI,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC;AAChC,GAAG,CAAC,CAAC,OAAO,GAAG,EAAE;AACjB,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC;AAC5B,IAAI,MAAM,CAAC,GAAG,YAAY,KAAK,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/D,GAAG;AACH,EAAE,CAAC,CAAC;AACJ,CAAC;AACD;AACA,CAAC,MAAM,QAAQ,GAAG;AAClB,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE;AACzB,EAAE,IAAI,CAAC,YAAY,GAAG,IAAI;AAC1B,EAAE,MAAM,KAAK,GAAG,GAAG;AACnB,EAAE,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE;AAC5B,EAAE,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,GAAG,KAAK,EAAE,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC3G,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE;AACnB,GAAG,IAAI;AACP,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;AACjC,GAAG,CAAC,CAAC,MAAM,CAAC;AACZ,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI;AACrB,EAAE;AACF,EAAE,IAAI,CAAC,WAAW,GAAG,KAAK;AAC1B,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;AACtB,CAAC;AACD;AACA,CAAC,YAAY,GAAG;AAChB,EAAE,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI;AAC1B,CAAC;AACD,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,iBAAiB,GAAG,SAAS;AACjC;AACA,IAAI,gBAAgB,GAAG,OAAO;AAC9B;AACA,IAAI,aAAa,mBAAmB,IAAI,GAAG,EAAE;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,oBAAoB,CAAC,MAAM,EAAE;AAC5C,CAAC,IAAI,gBAAgB,EAAE,KAAK,KAAK,EAAE,OAAO,YAAY,CAAC,CAAC;AACxD,CAAC,IAAI,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC;AACtC,CAAC,IAAI,KAAK,KAAK,MAAM,EAAE;AACvB,EAAE,KAAK,GAAG;AACV,GAAG,MAAM,EAAE,IAAI;AACf,GAAG,QAAQ,EAAE,CAAC;AACd,GAAG,QAAQ,EAAE;AACb,GAAG;AACH,EAAE,aAAa,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC;AAClC,CAAC;AACD,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,EAAE;AAC5B,EAAE,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,EAAE,KAAK,CAAC,QAAQ,GAAG,kBAAkB,CAAC,iBAAiB,EAAE,gBAAgB,EAAE;AACxG,GAAG,QAAQ,EAAE,EAAE;AACf,GAAG;AACH,GAAG,CAAC;AACJ,EAAE,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ;AACjC,EAAE,IAAI;AACN,GAAG,MAAM,MAAM,GAAG,MAAM,QAAQ;AAChC,GAAG,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM;AACnD,EAAE,CAAC,SAAS;AACZ,GAAG,IAAI,KAAK,CAAC,QAAQ,KAAK,QAAQ,EAAE,KAAK,CAAC,QAAQ,GAAG,IAAI;AACzD,EAAE;AACF,CAAC;AACD,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC;AACpB,CAAC,IAAI,QAAQ,GAAG,KAAK;AACrB,CAAC,OAAO,YAAY;AACpB,EAAE,IAAI,QAAQ,EAAE;AAChB,EAAE,QAAQ,GAAG,IAAI;AACjB,EAAE,KAAK,CAAC,QAAQ,IAAI,CAAC;AACrB,EAAE,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,EAAE;AACpD,GAAG,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM;AAC9B,GAAG,KAAK,CAAC,MAAM,GAAG,IAAI;AACtB,GAAG,KAAK,CAAC,QAAQ,GAAG,CAAC;AACrB,GAAG,IAAI,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC;AACxE,GAAG,MAAM,MAAM,CAAC,OAAO,EAAE;AACzB,EAAE;AACF,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,eAAe,GAAG,OAAO,CAAC,OAAO,EAAE;AACvC,SAAS,SAAS,CAAC,EAAE,EAAE;AACvB,CAAC,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,MAAM,aAAa,CAAC,EAAE,CAAC,CAAC;AAC3D,CAAC,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,MAAM,CAAC;AAC3C,CAAC,OAAO,IAAI;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa,CAAC,EAAE,EAAE;AACjC,CAAC,qBAAqB,CAAC,iBAAiB,EAAE,gBAAgB,EAAE,sBAAsB,CAAC,iBAAiB,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC;AACtH,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,OAAO,qCAA4B,CAAC;AACrE,CAAC,OAAO,aAAa,CAAC,EAAE,CAAC;AACzB;AACA,IAAI,QAAQ,GAAG,IAAI;AACnB,SAAS,UAAU,GAAG;AACtB,CAAC,IAAI,CAAC,QAAQ,EAAE;AAChB,EAAE,QAAQ,GAAG,IAAI,kBAAkB,EAAE;AACrC,EAAE,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM;AAC3B,GAAG,QAAQ,EAAE,QAAQ,EAAE,CAAC,KAAK,CAAC,MAAM,MAAM,CAAC;AAC3C,EAAE,CAAC,CAAC;AACJ,EAAE,MAAM,gBAAgB,GAAG,MAAM;AACjC,GAAG,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC;AAC1D,GAAG,QAAQ,CAAC,KAAK,EAAE;AACnB,GAAG,QAAQ,EAAE,QAAQ,EAAE,CAAC,KAAK,CAAC,MAAM,MAAM,CAAC,CAAC,OAAO,CAAC,MAAM;AAC1D,IAAI,YAAY,CAAC,QAAQ,CAAC;AAC1B,GAAG,CAAC,CAAC;AACL,EAAE,CAAC;AACH,EAAE,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC;AAC3C,EAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,gBAAgB,CAAC;AAC1C,CAAC;AACD,CAAC,OAAO,QAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,iBAAiB,CAAC,EAAE,EAAE;AACrC,CAAC,MAAM,YAAY,GAAG,MAAM,oBAAoB,CAAC,sBAAsB,CAAC,iBAAiB,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC;AAC3G,CAAC,IAAI;AACL,EAAE,IAAI,aAAa,EAAE,EAAE,OAAO,MAAM,SAAS,CAAC,EAAE,CAAC;AACjD,EAAE,IAAI;AACN,GAAG,OAAO,MAAM,UAAU,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;AACxC,EAAE,CAAC,CAAC,OAAO,GAAG,EAAE;AAChB,GAAG,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,GAAG,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC;AAC/D,GAAG,SAAS,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,8EAA8E,CAAC;AAChI,GAAG,OAAO,MAAM,SAAS,CAAC,EAAE,CAAC;AAC7B,EAAE;AACF,CAAC,CAAC,SAAS;AACX,EAAE,MAAM,YAAY,EAAE;AACtB,CAAC;AACD;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"branch-lock-Cq7zzmFK.js","sources":["../../../.svelte-kit/adapter-node/chunks/ivtr-loop.js","../../../.svelte-kit/adapter-node/chunks/effective-stage.js","../../../.svelte-kit/adapter-node/chunks/evidence.js","../../../.svelte-kit/adapter-node/chunks/branch-lock.js"],"sourcesContent":["import { t as getLogger } from \"./logger.js\";\nimport \"./paths.js\";\nimport { g as attachments } from \"./tasks-schema.js\";\nimport \"./sqlite.js\";\nimport \"node:path\";\nimport \"node:crypto\";\nimport \"node:fs/promises\";\nimport { eq } from \"drizzle-orm\";\nPromise.resolve();\n/**\n* Derive 3 alternative slug candidates that are NOT currently in use.\n*\n* Strategy (per Epic T9627 design guidance):\n* 1. `<slug>-N` where N is the count-of-existing-rows + 1\n* 2. `<slug>-v2`\n* 3. `<slug>-new` (or `-alt` if `-new` is also taken)\n*\n* If a primary candidate is also taken, walk forward until a free one is\n* found. The lookup is bounded by a maximum of 32 probes per candidate so\n* a pathological dataset can never block the request.\n*\n* Re-exported under {@link deriveSlugSuggestionsForAllocator} for the\n* central slug allocator (T10392) so both the late-bound\n* `SlugCollisionError` path and the early-bound `reserveSlug` path emit\n* the SAME suggestion shape.\n*\n* @task T9636\n*/\nasync function deriveSlugSuggestions(db, base) {\n\tconst taken = /* @__PURE__ */ new Set();\n\tconst probes = [];\n\tconst startCount = await db.$count(attachments);\n\tprobes.push(`${base}-${startCount + 1}`);\n\tprobes.push(`${base}-v2`);\n\tprobes.push(`${base}-new`);\n\tconst out = [];\n\tfor (let idx = 0; idx < probes.length; idx++) {\n\t\tlet candidate = probes[idx];\n\t\tlet walk = 0;\n\t\twhile (walk < 32) {\n\t\t\tif (taken.has(candidate)) {\n\t\t\t\twalk++;\n\t\t\t\tcandidate = `${candidate}-x`;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (!await db.select().from(attachments).where(eq(attachments.slug, candidate)).get()) {\n\t\t\t\tout.push(candidate);\n\t\t\t\ttaken.add(candidate);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\ttaken.add(candidate);\n\t\t\twalk++;\n\t\t\tcandidate = idx === 2 ? `${base}-alt-${walk}` : `${candidate}-x`;\n\t\t}\n\t\tif (out.length === idx + 1) continue;\n\t\tout.push(`${base}-${startCount + idx + 100}`);\n\t}\n\treturn out.slice(0, 3);\n}\n/**\n* Re-export of {@link deriveSlugSuggestions} for the central slug\n* allocator (T10392).\n*\n* Lives in this module rather than the allocator so the suggestion\n* algorithm has exactly ONE implementation. Both the late-bound\n* `SlugCollisionError` path inside `attachmentStore.put` and the\n* early-bound `reserveSlug` chokepoint use the same helper, so the\n* suggestion shape is uniform regardless of which layer caught the\n* conflict.\n*\n* Loose typing on `db` matches the internal `DrizzleDb` alias so\n* cross-package consumers do not have to import drizzle types.\n*\n* @task T10392\n* @internal\n*/\nasync function deriveSlugSuggestionsForAllocator(db, base) {\n\treturn deriveSlugSuggestions(db, base);\n}\ngetLogger(\"lifecycle:ivtr\");\n//#endregion\nexport { deriveSlugSuggestionsForAllocator as t };\n","//#region ../core/dist/lifecycle/stages.js\n/**\n* Pipeline Stage Definitions and Transitions\n*\n* Defines the 9-stage RCASD-IVTR pipeline with stage metadata,\n* transition rules, and prerequisite mappings.\n*\n* Stages (in order):\n* 1. Research - Information gathering and exploration\n* 2. Consensus - Multi-agent decisions and validation\n* 3. Architecture Decision - Architecture Decision Records\n* 4. Specification - Specification and documentation\n* 5. Decomposition - Task breakdown and planning\n* 6. Implementation - Code execution and building\n* 7. Validation - Static analysis, type checking, quality gates\n* 8. Testing - Test execution and coverage\n* 9. Release - Version management and publishing\n*\n* @task T4800 - Implement Canonical SQLite Pipeline State Machine\n* @epic T4798 - Lifecycle persistence improvements\n* @audit T4799 - Unified stage names (replaces scattered definitions)\n*\n* NOTE: This file provides the canonical stage definitions. All other\n* stage definitions in the codebase should reference these.\n* Stage names MUST match the DB CHECK constraint in lifecycle_stages.stage_name.\n*/\nvar PIPELINE_STAGES = [\n\t\"research\",\n\t\"consensus\",\n\t\"architecture_decision\",\n\t\"specification\",\n\t\"decomposition\",\n\t\"implementation\",\n\t\"validation\",\n\t\"testing\",\n\t\"release\"\n];\n/**\n* Canonical stage definitions with complete metadata.\n*\n* @task T4800\n* @audit T4799 - Replaces legacy STAGE_DEFINITIONS from index.ts\n*/\nvar STAGE_DEFINITIONS = {\n\tresearch: {\n\t\tstage: \"research\",\n\t\tname: \"Research\",\n\t\tdescription: \"Information gathering, exploration, and knowledge acquisition\",\n\t\torder: 1,\n\t\tcategory: \"planning\",\n\t\tskippable: false,\n\t\tdefaultTimeoutHours: 48,\n\t\trequiredGates: [\"prerequisites-met\"],\n\t\texpectedArtifacts: [\"research-report\", \"findings-document\"]\n\t},\n\tconsensus: {\n\t\tstage: \"consensus\",\n\t\tname: \"Consensus\",\n\t\tdescription: \"Multi-agent decision making and validation of research findings\",\n\t\torder: 2,\n\t\tcategory: \"decision\",\n\t\tskippable: true,\n\t\tdefaultTimeoutHours: 24,\n\t\trequiredGates: [\"research-complete\", \"agreement-reached\"],\n\t\texpectedArtifacts: [\"consensus-record\", \"decision-log\"]\n\t},\n\tarchitecture_decision: {\n\t\tstage: \"architecture_decision\",\n\t\tname: \"Architecture Decision\",\n\t\tdescription: \"Architecture Decision Records - documenting significant technical decisions\",\n\t\torder: 3,\n\t\tcategory: \"decision\",\n\t\tskippable: true,\n\t\tdefaultTimeoutHours: 24,\n\t\trequiredGates: [\"decisions-documented\", \"review-completed\"],\n\t\texpectedArtifacts: [\"adr-document\"]\n\t},\n\tspecification: {\n\t\tstage: \"specification\",\n\t\tname: \"Specification\",\n\t\tdescription: \"Specification writing - RFC-style documentation of requirements and design\",\n\t\torder: 4,\n\t\tcategory: \"planning\",\n\t\tskippable: false,\n\t\tdefaultTimeoutHours: 72,\n\t\trequiredGates: [\"spec-complete\", \"spec-reviewed\"],\n\t\texpectedArtifacts: [\n\t\t\t\"spec-document\",\n\t\t\t\"api-spec\",\n\t\t\t\"design-doc\"\n\t\t]\n\t},\n\tdecomposition: {\n\t\tstage: \"decomposition\",\n\t\tname: \"Decomposition\",\n\t\tdescription: \"Task breakdown - splitting work into atomic, executable tasks\",\n\t\torder: 5,\n\t\tcategory: \"planning\",\n\t\tskippable: false,\n\t\tdefaultTimeoutHours: 24,\n\t\trequiredGates: [\"tasks-created\", \"dependencies-mapped\"],\n\t\texpectedArtifacts: [\"task-breakdown\", \"dependency-graph\"]\n\t},\n\timplementation: {\n\t\tstage: \"implementation\",\n\t\tname: \"Implementation\",\n\t\tdescription: \"Implementation - writing code and building features\",\n\t\torder: 6,\n\t\tcategory: \"execution\",\n\t\tskippable: false,\n\t\tdefaultTimeoutHours: null,\n\t\trequiredGates: [\"code-complete\", \"lint-passing\"],\n\t\texpectedArtifacts: [\"source-code\", \"implementation-notes\"]\n\t},\n\tvalidation: {\n\t\tstage: \"validation\",\n\t\tname: \"Validation\",\n\t\tdescription: \"Verification - static analysis, type checking, and quality gates\",\n\t\torder: 7,\n\t\tcategory: \"validation\",\n\t\tskippable: false,\n\t\tdefaultTimeoutHours: 12,\n\t\trequiredGates: [\"static-analysis-pass\", \"type-check-pass\"],\n\t\texpectedArtifacts: [\"verification-report\"]\n\t},\n\ttesting: {\n\t\tstage: \"testing\",\n\t\tname: \"Testing\",\n\t\tdescription: \"Testing - running test suites and ensuring coverage\",\n\t\torder: 8,\n\t\tcategory: \"validation\",\n\t\tskippable: false,\n\t\tdefaultTimeoutHours: 24,\n\t\trequiredGates: [\"tests-pass\", \"coverage-met\"],\n\t\texpectedArtifacts: [\"test-results\", \"coverage-report\"]\n\t},\n\trelease: {\n\t\tstage: \"release\",\n\t\tname: \"Release\",\n\t\tdescription: \"Release - versioning, publishing, and deployment\",\n\t\torder: 9,\n\t\tcategory: \"delivery\",\n\t\tskippable: true,\n\t\tdefaultTimeoutHours: 4,\n\t\trequiredGates: [\n\t\t\t\"version-bumped\",\n\t\t\t\"changelog-updated\",\n\t\t\t\"artifacts-published\"\n\t\t],\n\t\texpectedArtifacts: [\n\t\t\t\"version-tag\",\n\t\t\t\"release-notes\",\n\t\t\t\"published-package\"\n\t\t]\n\t}\n};\n/**\n* Stage order mapping for quick lookups.\n*\n* @task T4800\n*/\nvar STAGE_ORDER = {\n\tresearch: 1,\n\tconsensus: 2,\n\tarchitecture_decision: 3,\n\tspecification: 4,\n\tdecomposition: 5,\n\timplementation: 6,\n\tvalidation: 7,\n\ttesting: 8,\n\trelease: 9\n};\n/**\n* Prerequisites for each stage - which stages must be completed before entering.\n*\n* @task T4800\n* @audit T4799 - Canonical prerequisite map\n*/\nvar STAGE_PREREQUISITES = {\n\tresearch: [],\n\tconsensus: [\"research\"],\n\tarchitecture_decision: [\"research\", \"consensus\"],\n\tspecification: [\n\t\t\"research\",\n\t\t\"consensus\",\n\t\t\"architecture_decision\"\n\t],\n\tdecomposition: [\"research\", \"specification\"],\n\timplementation: [\n\t\t\"research\",\n\t\t\"specification\",\n\t\t\"decomposition\"\n\t],\n\tvalidation: [\"implementation\"],\n\ttesting: [\"implementation\", \"validation\"],\n\trelease: [\n\t\t\"implementation\",\n\t\t\"validation\",\n\t\t\"testing\"\n\t]\n};\n/**\n* Accepted shorthand aliases mapped to their canonical stage names.\n*\n* These allow users to type shorter names like `architecture` instead of\n* `architecture_decision` on the CLI without breaking the state machine.\n* The canonical name is always what gets persisted to the database.\n*\n* @task T929\n*/\nvar STAGE_ALIASES = {\n\tarchitecture: \"architecture_decision\",\n\tadr: \"architecture_decision\",\n\tspec: \"specification\",\n\tdecompose: \"decomposition\",\n\timplement: \"implementation\",\n\tverify: \"validation\",\n\tvalidate: \"validation\",\n\ttest: \"testing\"\n};\n/**\n* Resolve a stage name or alias to the canonical stage name.\n*\n* If `stage` is already a canonical stage name it is returned unchanged.\n* If it is a known alias the canonical name is returned.\n* Otherwise the original string is returned (callers should validate after).\n*\n* @param stage - Stage name or alias to resolve\n* @returns Canonical stage name\n*\n* @task T929\n* @example\n* resolveStageAlias('architecture') // => 'architecture_decision'\n* resolveStageAlias('architecture_decision') // => 'architecture_decision'\n* resolveStageAlias('unknown') // => 'unknown'\n*/\nfunction resolveStageAlias(stage) {\n\treturn STAGE_ALIASES[stage] ?? stage;\n}\n/**\n* Check if a stage name is valid.\n*\n* @param stage - Stage name to validate\n* @returns True if valid stage name\n*\n* @task T4800\n*/\nfunction isValidStage(stage) {\n\treturn PIPELINE_STAGES.includes(stage);\n}\n/**\n* Get stages by category.\n*\n* @param category - Category to filter by\n* @returns Array of stages in that category\n*\n* @task T4800\n*/\nfunction getStagesByCategory(category) {\n\treturn PIPELINE_STAGES.filter((stage) => STAGE_DEFINITIONS[stage].category === category);\n}\nPIPELINE_STAGES.length;\ngetStagesByCategory(\"planning\");\ngetStagesByCategory(\"decision\");\ngetStagesByCategory(\"execution\");\ngetStagesByCategory(\"validation\");\ngetStagesByCategory(\"delivery\");\n//#endregion\n//#region ../core/dist/lifecycle/effective-stage.js\n/**\n* Effective Stage Computation — derives the expected pipeline stage for an\n* epic from the progress of its non-archived children.\n*\n* This is the canonical logic used by the sentient stage-drift detector\n* (T1635) to decide whether a stored `pipelineStage` is stale and should\n* trigger a Tier-2 proposal.\n*\n* ## Stage Derivation Rule\n*\n* | Child progress | Effective stage |\n* |--------------------------------------------------|---------------------|\n* | 0 children done (0%) | `research` |\n* | 1 – N-1 children done (1–99%) | `implementation` |\n* | All children done, ≥1 gate still failing/pending | `testing` |\n* | All children done AND all tracked gates passed | `release` |\n* | Epic has zero non-archived children | `research` (default)|\n*\n* \"Tracked gates\" means rows present in `lifecycle_gate_results` linked to\n* a pipeline owned by the epic. Epics with NO gate rows are treated as\n* having all gates passed (avoids false drift when the lifecycle subsystem\n* hasn't been used for older epics).\n*\n* ## Stage gap model\n*\n* The sentient drift detector maps these four coarse stages onto the\n* 9-stage PIPELINE_STAGES order for numeric gap computation:\n*\n* | Effective stage | Numeric index (1-based, matching STAGE_ORDER) |\n* |------------------|-----------------------------------------------|\n* | `research` | 1 |\n* | `implementation` | 6 |\n* | `testing` | 8 |\n* | `release` | 9 |\n*\n* A gap of `|effective_index - stored_index| > 1` triggers a Tier-2 proposal.\n*\n* @task T1635\n* @see T1232 — original stage-drift bug class\n*/\n/**\n* Derive the expected pipeline stage for an epic from its child progress.\n*\n* Pure function — no I/O. All inputs are pre-fetched by the caller.\n*\n* @param input - Pre-fetched epic progress metrics.\n* @returns The coarse {@link EffectiveStage} that this epic should be in.\n*\n* @task T1635\n*/\nfunction computeEffectiveStage(input) {\n\tconst { childrenTotal, childrenDone, allGatesPassed } = input;\n\tif (childrenTotal === 0 || childrenDone === 0) return \"research\";\n\tif (childrenDone < childrenTotal) return \"implementation\";\n\tif (!allGatesPassed) return \"testing\";\n\treturn \"release\";\n}\n/**\n* Numeric index used when comparing effective vs stored stage gap.\n*\n* Maps the four coarse effective stages to their positions in\n* PIPELINE_STAGES (1-based, matching STAGE_ORDER).\n*/\nvar EFFECTIVE_STAGE_INDEX = {\n\tresearch: 1,\n\timplementation: 6,\n\ttesting: 8,\n\trelease: 9\n};\n/**\n* Batch-fetch {@link EpicProgressInput} for a set of epic IDs from a\n* live tasks.db handle.\n*\n* Executes two SQL queries:\n* 1. Child aggregates (total + done per parent).\n* 2. Pending/failing gate count per epic (0 = all passed).\n*\n* Returns a Map keyed by epicId. Epic IDs with no rows in the DB are\n* omitted — callers filter the returned map against their input list.\n*\n* @param db - Live SQLite handle (tasks.db).\n* @param epicIds - IDs to query.\n* @returns Map of epicId → {@link EpicProgressInput}.\n*\n* @task T1635\n*/\nfunction fetchEpicProgressBatch(db, epicIds) {\n\tconst result = /* @__PURE__ */ new Map();\n\tif (epicIds.length === 0) return result;\n\tconst placeholders = epicIds.map(() => \"?\").join(\", \");\n\tconst childSql = `\n SELECT\n parent_id AS parent_id,\n COUNT(*) AS children_total,\n SUM(CASE WHEN status = 'done' THEN 1 ELSE 0 END) AS children_done\n FROM tasks_tasks\n WHERE parent_id IN (${placeholders})\n AND status != 'archived'\n GROUP BY parent_id\n `;\n\tconst childRows = db.prepare(childSql).all(...epicIds);\n\tconst childMap = /* @__PURE__ */ new Map();\n\tfor (const row of childRows) {\n\t\tif (row.parent_id === null) continue;\n\t\tchildMap.set(row.parent_id, {\n\t\t\ttotal: Number(row.children_total ?? 0),\n\t\t\tdone: Number(row.children_done ?? 0)\n\t\t});\n\t}\n\tlet gateMap;\n\ttry {\n\t\tconst gateSql = `\n SELECT\n p.task_id AS task_id,\n SUM(CASE WHEN g.result != 'pass' THEN 1 ELSE 0 END) AS pending_count\n FROM tasks_lifecycle_pipelines p\n LEFT JOIN tasks_lifecycle_stages s ON s.pipeline_id = p.id\n LEFT JOIN tasks_lifecycle_gate_results g ON g.stage_id = s.id\n WHERE p.task_id IN (${placeholders})\n GROUP BY p.task_id\n `;\n\t\tconst gateRows = db.prepare(gateSql).all(...epicIds);\n\t\tgateMap = /* @__PURE__ */ new Map();\n\t\tfor (const row of gateRows) {\n\t\t\tif (row.task_id === null) continue;\n\t\t\tgateMap.set(row.task_id, Number(row.pending_count ?? 0) === 0);\n\t\t}\n\t} catch {\n\t\tgateMap = /* @__PURE__ */ new Map();\n\t}\n\tfor (const epicId of epicIds) {\n\t\tconst agg = childMap.get(epicId);\n\t\tif (agg === void 0) result.set(epicId, {\n\t\t\tepicId,\n\t\t\tchildrenTotal: 0,\n\t\t\tchildrenDone: 0,\n\t\t\tallGatesPassed: true\n\t\t});\n\t\telse result.set(epicId, {\n\t\t\tepicId,\n\t\t\tchildrenTotal: agg.total,\n\t\t\tchildrenDone: agg.done,\n\t\t\tallGatesPassed: gateMap.get(epicId) ?? true\n\t\t});\n\t}\n\treturn result;\n}\n//#endregion\nexport { STAGE_ALIASES as a, STAGE_PREREQUISITES as c, PIPELINE_STAGES as i, isValidStage as l, computeEffectiveStage as n, STAGE_DEFINITIONS as o, fetchEpicProgressBatch as r, STAGE_ORDER as s, EFFECTIVE_STAGE_INDEX as t, resolveStageAlias as u };\n","import { Nn as GATE_EVIDENCE_REQUIREMENTS } from \"./dist2.js\";\nimport \"./errors.js\";\nimport \"./paths.js\";\nimport { t as pushWarning } from \"./output.js\";\nimport \"./lock.js\";\nimport \"node:fs\";\nimport \"node:path\";\nimport \"node:child_process\";\nimport \"node:crypto\";\nimport \"node:os\";\nimport \"node:fs/promises\";\nimport \"proper-lockfile\";\n//#region ../core/dist/agents/variable-substitution.js\n/**\n* Mustache placeholder regex — matches `{{var}}` / `{{ var.path }}` with\n* optional surrounding whitespace. Names may contain letters, digits,\n* underscores, and dots; they MUST start with a letter or underscore.\n*\n* The regex is compiled once as a module-level constant to avoid per-call\n* allocation. Call sites use `new RegExp(source, 'g')` when they need a\n* fresh stateful matcher (e.g. `matchAll` is non-destructive but\n* `exec`-style loops require a fresh instance).\n*/\nvar VARIABLE_PATTERN = /\\{\\{\\s*([a-zA-Z_][a-zA-Z0-9_.]*)\\s*\\}\\}/g;\n/**\n* Default environment-variable prefixes used when the caller does not supply\n* {@link SubstitutionOptions.envPrefixes}. Tried in order; the first match wins.\n*/\nvar DEFAULT_ENV_PREFIXES = [\"CLEO_\", \"CANT_\"];\n/**\n* Safely walk a dot-path (e.g. `\"testing.framework\"`) into a nested object.\n* Returns `undefined` when any intermediate segment is missing or not an\n* object/array. Primitives at a terminal path segment are returned as-is.\n*\n* @param path - Dot-separated path to walk.\n* @param obj - Root object to walk from.\n* @returns The terminal value or `undefined` when the path is unreachable.\n*/\nfunction resolveNested(path, obj) {\n\tif (!obj) return void 0;\n\tconst segments = path.split(\".\");\n\tlet curr = obj;\n\tfor (const key of segments) {\n\t\tif (curr === null || curr === void 0) return void 0;\n\t\tif (typeof curr !== \"object\") return void 0;\n\t\tcurr = curr[key];\n\t}\n\treturn curr;\n}\n/**\n* Coerce a resolved value into the string form that gets inserted into the\n* template. Handles null/undefined, strings, numbers, booleans, and objects.\n*\n* - `null` → literal `\"null\"` (explicit projection; callers who want\n* placeholder-retention should avoid binding the key at all).\n* - `undefined` → treated as \"not resolved\" by the caller BEFORE this helper.\n* - string → as-is.\n* - number/boolean → `String(value)`.\n* - object/array → `JSON.stringify(value)`.\n*\n* @param value - Raw value from a resolver tier.\n* @returns Stringified insertion value, or `null` when the input was\n* explicitly `null` (to preserve the distinction).\n*/\nfunction coerceToString(value) {\n\tif (value === null) return null;\n\tif (typeof value === \"string\") return value;\n\tif (typeof value === \"number\" || typeof value === \"boolean\") return String(value);\n\tif (typeof value === \"bigint\") return value.toString();\n\ttry {\n\t\treturn JSON.stringify(value);\n\t} catch {\n\t\treturn null;\n\t}\n}\n/**\n* Canonical implementation of the {@link VariableResolver} contract.\n*\n* Stateless and reusable across call sites — instantiate once and share, or\n* use {@link defaultResolver} for the module-level singleton.\n*\n* @example\n* ```ts\n* const resolver = new DefaultVariableResolver();\n* const result = resolver.resolve(\n* 'Tech stack: {{tech_stack}}',\n* { bindings: { tech_stack: 'TypeScript' } },\n* );\n* // result.text === 'Tech stack: TypeScript'\n* ```\n*\n* @task T1238\n*/\nvar DefaultVariableResolver = class {\n\t/**\n\t* Regex used to detect template variables. Exposed as a read-only class\n\t* field so subclasses and tests can assert against the canonical pattern.\n\t*/\n\tpattern = VARIABLE_PATTERN;\n\t/**\n\t* Resolve and substitute `{{var}}` placeholders in `text`.\n\t*\n\t* The algorithm makes a single pass over the template — each match is\n\t* resolved against the tier chain, and the result list is used to drive a\n\t* second pass that performs the actual string replacement. This avoids\n\t* accidental recursion when a resolved value itself contains `{{…}}`\n\t* (the regex is applied to the ORIGINAL text, never the replacement).\n\t*\n\t* @param text - Template containing `{{var}}` placeholders.\n\t* @param context - Multi-tier resolver context.\n\t* @param options - Optional behaviour tweaks.\n\t* @returns A {@link SubstitutionResult} envelope.\n\t*/\n\tresolve(text, context, options = {}) {\n\t\tconst strict = options.strict === true;\n\t\tconst warnMissing = options.warnMissing === true;\n\t\tconst allowedVars = options.allowedVars;\n\t\tconst resolved = [];\n\t\tconst missing = [];\n\t\tconst matches = Array.from(text.matchAll(VARIABLE_PATTERN));\n\t\tif (matches.length === 0) return {\n\t\t\ttext,\n\t\t\tresolved,\n\t\t\tmissing,\n\t\t\tsuccess: true\n\t\t};\n\t\tconst perVariable = /* @__PURE__ */ new Map();\n\t\tfor (const match of matches) {\n\t\t\tconst varName = match[1];\n\t\t\tif (varName === void 0) continue;\n\t\t\tif (perVariable.has(varName)) continue;\n\t\t\tif (allowedVars && !allowedVars.includes(varName)) {\n\t\t\t\tperVariable.set(varName, null);\n\t\t\t\tif (!missing.includes(varName)) missing.push(varName);\n\t\t\t\tif (warnMissing) pushWarning({\n\t\t\t\t\tcode: \"W_VAR_SUB_UNRESOLVED\",\n\t\t\t\t\tmessage: `\"${varName}\" not in allowedVars whitelist`\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst tier = this.resolveVariable(varName, context, options);\n\t\t\tif (tier !== null) {\n\t\t\t\tperVariable.set(varName, tier);\n\t\t\t\tresolved.push({\n\t\t\t\t\tname: varName,\n\t\t\t\t\tvalue: tier.value,\n\t\t\t\t\tsource: tier.source\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (options.defaultValue !== void 0) {\n\t\t\t\tconst defaultTier = {\n\t\t\t\t\tvalue: options.defaultValue,\n\t\t\t\t\tsource: \"default\"\n\t\t\t\t};\n\t\t\t\tperVariable.set(varName, defaultTier);\n\t\t\t\tresolved.push({\n\t\t\t\t\tname: varName,\n\t\t\t\t\tvalue: defaultTier.value,\n\t\t\t\t\tsource: \"default\"\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tperVariable.set(varName, null);\n\t\t\tif (!missing.includes(varName)) missing.push(varName);\n\t\t\tif (warnMissing) pushWarning({\n\t\t\t\tcode: \"W_VAR_SUB_UNRESOLVED\",\n\t\t\t\tmessage: `\"${varName}\" unresolved`\n\t\t\t});\n\t\t}\n\t\tif (strict && missing.length > 0) return {\n\t\t\ttext,\n\t\t\tresolved,\n\t\t\tmissing,\n\t\t\tsuccess: false,\n\t\t\terror: `Missing required variables: ${missing.join(\", \")}`\n\t\t};\n\t\treturn {\n\t\t\ttext: text.replace(VARIABLE_PATTERN, (full, captured) => {\n\t\t\t\tconst tier = perVariable.get(captured);\n\t\t\t\tif (tier === null || tier === void 0) return full;\n\t\t\t\treturn tier.value === null ? \"null\" : tier.value;\n\t\t\t}),\n\t\t\tresolved,\n\t\t\tmissing,\n\t\t\tsuccess: true\n\t\t};\n\t}\n\t/**\n\t* Extract the unique variable names referenced by `text`.\n\t*\n\t* Used by template validators and bundle compilers that want to report\n\t* undeclared variables before runtime resolution runs.\n\t*\n\t* @param text - Template to scan.\n\t* @returns Deduplicated variable names in discovery order.\n\t*/\n\textractVariables(text) {\n\t\tconst seen = /* @__PURE__ */ new Set();\n\t\tconst out = [];\n\t\tfor (const match of text.matchAll(VARIABLE_PATTERN)) {\n\t\t\tconst name = match[1];\n\t\t\tif (name === void 0) continue;\n\t\t\tif (seen.has(name)) continue;\n\t\t\tseen.add(name);\n\t\t\tout.push(name);\n\t\t}\n\t\treturn out;\n\t}\n\t/**\n\t* Validate that every variable in `requiredVars` resolves against `context`.\n\t*\n\t* Convenience wrapper around {@link resolveVariable} for callers that want\n\t* a pre-flight missing-var report without substituting anything.\n\t*\n\t* @param requiredVars - Variables the caller considers mandatory.\n\t* @param context - Resolver context to validate against.\n\t* @returns `{ valid: true, missing: [] }` when every variable resolves,\n\t* else `{ valid: false, missing: [...] }`.\n\t*/\n\tvalidate(requiredVars, context) {\n\t\tconst missing = [];\n\t\tfor (const name of requiredVars) if (this.resolveVariable(name, context, {}) === null) missing.push(name);\n\t\treturn {\n\t\t\tvalid: missing.length === 0,\n\t\t\tmissing\n\t\t};\n\t}\n\t/**\n\t* Resolve a single variable against the tier chain.\n\t*\n\t* Precedence (highest → lowest):\n\t*\n\t* 1. `bindings` (flat key lookup)\n\t* 2. `sessionContext` (flat key lookup)\n\t* 3. `projectContext` (dot-notation via {@link resolveNested})\n\t* 4. `env` — tries each configured prefix (default: `CLEO_`, `CANT_`);\n\t* the variable name is upper-cased and dots are replaced with\n\t* underscores (`{{foo.bar}}` → `CLEO_FOO_BAR`).\n\t*\n\t* @param varName - Variable name as captured by the pattern.\n\t* @param context - Resolver context.\n\t* @param options - Options (only `envPrefixes` is consulted here).\n\t* @returns The resolved tier or `null` when every tier missed.\n\t*/\n\tresolveVariable(varName, context, options) {\n\t\tif (context.bindings && Object.hasOwn(context.bindings, varName)) {\n\t\t\tconst raw = context.bindings[varName];\n\t\t\tif (raw !== void 0) {\n\t\t\t\tconst coerced = coerceToString(raw);\n\t\t\t\tif (coerced !== null || raw === null) return {\n\t\t\t\t\tvalue: coerced,\n\t\t\t\t\tsource: \"bindings\"\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\tif (context.sessionContext && Object.hasOwn(context.sessionContext, varName)) {\n\t\t\tconst raw = context.sessionContext[varName];\n\t\t\tif (raw !== void 0) {\n\t\t\t\tconst coerced = coerceToString(raw);\n\t\t\t\tif (coerced !== null || raw === null) return {\n\t\t\t\t\tvalue: coerced,\n\t\t\t\t\tsource: \"session\"\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\tif (context.projectContext) {\n\t\t\tconst raw = resolveNested(varName, context.projectContext);\n\t\t\tif (raw !== void 0) {\n\t\t\t\tconst coerced = coerceToString(raw);\n\t\t\t\tif (coerced !== null || raw === null) return {\n\t\t\t\t\tvalue: coerced,\n\t\t\t\t\tsource: \"project_context\"\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\tif (context.env) {\n\t\t\tconst prefixes = options.envPrefixes ?? DEFAULT_ENV_PREFIXES;\n\t\t\tconst suffix = varName.toUpperCase().replace(/\\./g, \"_\");\n\t\t\tfor (const prefix of prefixes) {\n\t\t\t\tconst envKey = `${prefix}${suffix}`;\n\t\t\t\tconst raw = context.env[envKey];\n\t\t\t\tif (raw !== void 0) return {\n\t\t\t\t\tvalue: raw,\n\t\t\t\t\tsource: \"env\"\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n};\nnew DefaultVariableResolver();\n//#endregion\n//#region ../core/dist/tasks/tool-resolver.js\n/**\n* Canonical (project-agnostic) tool names accepted by `cleo verify\n* --evidence \"tool:<name>\"`.\n*\n* Each canonical name maps to a project-specific command via\n* {@link resolveToolCommand}. Adding a new canonical tool requires:\n*\n* 1. Adding the name here.\n* 2. Adding a default for each {@link ProjectType} in `LANGUAGE_DEFAULTS`.\n* 3. Updating {@link checkGateEvidenceMinimum} if the new tool can satisfy\n* a verification gate.\n*/\nvar CANONICAL_TOOLS = [\n\t\"test\",\n\t\"build\",\n\t\"lint\",\n\t\"typecheck\",\n\t\"audit\",\n\t\"security-scan\",\n\t\"nexus-impact-full\"\n];\n/**\n* Mapping of legacy hardcoded tool names → canonical name.\n*\n* @task T1534\n*/\nvar LEGACY_TOOL_ALIASES = {\n\t\"pnpm-test\": \"test\",\n\t\"npm-test\": \"test\",\n\t\"yarn-test\": \"test\",\n\t\"bun-test\": \"test\",\n\tvitest: \"test\",\n\tjest: \"test\",\n\tpytest: \"test\",\n\t\"cargo-test\": \"test\",\n\t\"go-test\": \"test\",\n\t\"pnpm-build\": \"build\",\n\t\"npm-build\": \"build\",\n\t\"yarn-build\": \"build\",\n\t\"bun-build\": \"build\",\n\t\"cargo-build\": \"build\",\n\t\"go-build\": \"build\",\n\tbiome: \"lint\",\n\teslint: \"lint\",\n\tprettier: \"lint\",\n\truff: \"lint\",\n\tclippy: \"lint\",\n\ttsc: \"typecheck\",\n\tmypy: \"typecheck\",\n\tpyright: \"typecheck\",\n\taudit: \"audit\",\n\t\"pnpm-audit\": \"audit\",\n\t\"npm-audit\": \"audit\",\n\t\"cargo-audit\": \"audit\"\n};\n/**\n* Set of all valid `tool:<name>` payloads — canonical names plus legacy\n* aliases. Returned by {@link listValidToolNames} for help / validation\n* surfaces.\n*\n* @task T1534\n*/\nfunction listValidToolNames() {\n\treturn [...new Set([...CANONICAL_TOOLS, ...Object.keys(LEGACY_TOOL_ALIASES)])].sort();\n}\nObject.freeze(listValidToolNames());\nObject.freeze({});\nObject.freeze(Object.fromEntries(Object.entries(GATE_EVIDENCE_REQUIREMENTS).map(([gate, spec]) => [gate, spec.oneOf.map((set) => [...set])])));\nObject.freeze([\n\t\"main\",\n\t\"master\",\n\t\"develop\",\n\t\"development\"\n]);\nObject.freeze([\n\t\"packages/\",\n\t\"src/\",\n\t\"scripts/\",\n\t\"docs/\",\n\t\"crates/\",\n\t\"test/\",\n\t\"tests/\",\n\t\".cleo/\",\n\t\".github/\",\n\t\"apps/\",\n\t\"lib/\",\n\t\"bin/\"\n]);\nObject.freeze([\"testsPassed\", \"qaPassed\"]);\nObject.freeze([\"implemented\", \"testsPassed\"]);\n//#endregion\nexport { listValidToolNames as n, DefaultVariableResolver as r, CANONICAL_TOOLS as t };\n","import { n as __esmMin } from \"./chunk.js\";\nimport { n as resolveWorktreeRootForHash, t as computeProjectHash } from \"./dist.js\";\nimport \"./dist2.js\";\nimport { createRequire } from \"node:module\";\nimport { appendFileSync, cpSync, existsSync, mkdirSync, readFileSync, readdirSync, rmSync } from \"node:fs\";\nimport { join, resolve } from \"node:path\";\nimport { execFile, execFileSync } from \"node:child_process\";\nimport { homedir } from \"node:os\";\nimport { fileURLToPath } from \"node:url\";\nimport { promisify } from \"node:util\";\n//#region ../worktree/dist/napi-binding.js\n/**\n* ESM-friendly bridge to the bundled worktree Node-API native addon.\n*\n* The napi-rs loader staged into `native/worktree-napi.cjs` exposes its surface as\n* `module.exports = nativeBinding` — Node.js's CJS-to-ESM interop cannot\n* statically detect named exports from a dynamic require(), so consumers route\n* through this bridge instead of importing the native loader directly.\n*\n* This module wraps the native binding via `createRequire` so the import looks\n* like a regular dynamic require from a CJS context. All consumers in this\n* package import napi functions from THIS module, never directly from the\n* native loader.\n*\n* Resolution order (first hit wins):\n*\n* 1. Bundled loader at `../native/worktree-napi.cjs` (published\n* `@cleocode/worktree` tarball).\n* 2. Repo-local crate loader at `../../../crates/worktree-napi/index.cjs`\n* (source-tree execution after a local napi build).\n* 3. **Core-managed cache** (T11580 · R10-L1): the host-triple `.node`\n* resolved by the shared `@cleocode/core` postinstall picker under\n* `<cache>/cleo/napi-bin/<version>/worktree-napi.<triple>.node`. This is\n* the Distribution Pattern P2 runtime hand-off — the picker downloads +\n* sha256-verifies the addon; this loader simply `require()`s the cached\n* file (the `.node` exports `module.exports = nativeBinding`, so no `.cjs`\n* wrapper is needed). Picked newest-version-first.\n*\n* @task T9982\n* @task T11580\n*/\n/**\n* Resolve the platform triple for the current host, mirroring the napi loader's\n* `tripleName()` and the core picker's `resolveTriple()`. Returns `null` for\n* unsupported platform/arch (e.g. macOS x64, for which no prebuild ships).\n*\n* @returns The host triple, or `null` when unsupported.\n*/\nfunction resolveHostTriple() {\n\tconst { platform, arch } = process;\n\tif (platform === \"linux\" && arch === \"x64\") return \"linux-x64-gnu\";\n\tif (platform === \"linux\" && arch === \"arm64\") return \"linux-arm64-gnu\";\n\tif (platform === \"darwin\" && arch === \"arm64\") return \"darwin-arm64\";\n\tif (platform === \"win32\" && arch === \"x64\") return \"win32-x64-msvc\";\n\treturn null;\n}\n/**\n* Base cache directory holding the per-version `napi-bin` subdirs that the\n* `@cleocode/core` picker writes to. Mirrors `cacheDir()` in\n* `packages/core/scripts/napi-binary-picker.mjs` (env-paths('cleo').cache /\n* napi-bin) without importing `@cleocode/core` (a devDependency only).\n*\n* @returns Absolute path to `<cache>/cleo/napi-bin`.\n*/\nfunction napiBinCacheRoot() {\n\tconst p = process.platform;\n\tif (p === \"win32\") return join(process.env.LOCALAPPDATA ?? join(homedir(), \"AppData\", \"Local\"), \"cleo\", \"Cache\", \"napi-bin\");\n\tif (p === \"darwin\") return join(homedir(), \"Library\", \"Caches\", \"cleo\", \"napi-bin\");\n\tconst xdg = process.env.XDG_CACHE_HOME;\n\treturn join(xdg?.startsWith(\"/\") ? xdg : join(homedir(), \".cache\"), \"cleo\", \"napi-bin\");\n}\n/**\n* Find the core-managed cached `worktree-napi.<triple>.node` for the host,\n* preferring the newest version directory. Returns `null` when no cached addon\n* exists (the common case in a fully-bundled install — tiers 1/2 win first).\n*\n* @returns Absolute path to the cached `.node`, or `null`.\n*/\nfunction resolveCoreManagedNapiPath() {\n\tconst triple = resolveHostTriple();\n\tif (triple === null) return null;\n\tconst root = napiBinCacheRoot();\n\tif (!existsSync(root)) return null;\n\tlet versions;\n\ttry {\n\t\tversions = readdirSync(root).sort().reverse();\n\t} catch {\n\t\treturn null;\n\t}\n\tfor (const version of versions) {\n\t\tconst candidate = join(root, version, `worktree-napi.${triple}.node`);\n\t\tif (existsSync(candidate)) return candidate;\n\t}\n\treturn null;\n}\nfunction getNative() {\n\tif (nativeBinding !== null) return nativeBinding;\n\tif (existsSync(bundledNativeLoaderPath)) {\n\t\tnativeBinding = require_(bundledNativeLoaderPath);\n\t\treturn nativeBinding;\n\t}\n\tif (existsSync(repoLocalNativeLoaderPath)) try {\n\t\tnativeBinding = require_(repoLocalNativeLoaderPath);\n\t\treturn nativeBinding;\n\t} catch {\n\t\tif (isTestRuntime()) {\n\t\t\tnativeBinding = createTestFallbackNativeModule();\n\t\t\treturn nativeBinding;\n\t\t}\n\t\tthrow new Error(`@cleocode/worktree: failed to load repo-local native loader at ${repoLocalNativeLoaderPath}. Run \\`pnpm dlx @napi-rs/cli@3 build --release\\` inside \\`crates/worktree-napi/\\` for source-tree execution.`);\n\t}\n\tconst coreManagedNapiPath = resolveCoreManagedNapiPath();\n\tif (coreManagedNapiPath !== null) try {\n\t\tnativeBinding = require_(coreManagedNapiPath);\n\t\treturn nativeBinding;\n\t} catch {\n\t\tif (isTestRuntime()) {\n\t\t\tnativeBinding = createTestFallbackNativeModule();\n\t\t\treturn nativeBinding;\n\t\t}\n\t\tthrow new Error(`@cleocode/worktree: failed to load core-managed native addon at ${coreManagedNapiPath}. The @cleocode/core postinstall picker resolved a cached binary that could not be loaded — reinstall @cleocode/core or clear the napi-bin cache.`);\n\t}\n\tif (isTestRuntime()) {\n\t\tnativeBinding = createTestFallbackNativeModule();\n\t\treturn nativeBinding;\n\t}\n\tthrow new Error(`@cleocode/worktree: missing bundled native loader at ${bundledNativeLoaderPath}. The release package must include native/worktree-napi.cjs and worktree-napi.<triple>.node files, or @cleocode/core must resolve worktree-napi via its postinstall picker (Pattern P2).`);\n}\nfunction isTestRuntime() {\n\treturn process.env.NODE_ENV === \"test\" || process.env.VITEST !== void 0;\n}\nfunction createTestFallbackNativeModule() {\n\tconst copyPathsParallelFallback = (srcDir, destDir, paths, opts) => {\n\t\tlet copiedCount = 0;\n\t\tconst failedPaths = [];\n\t\tfor (const relativePath of paths) {\n\t\t\tconst source = join(srcDir, relativePath);\n\t\t\tconst destination = join(destDir, relativePath);\n\t\t\tif (opts.rootGuard !== void 0) {\n\t\t\t\tconst guardedRoot = resolve(opts.rootGuard);\n\t\t\t\tif (!resolve(destination).startsWith(guardedRoot)) {\n\t\t\t\t\tfailedPaths.push(relativePath);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tcpSync(source, destination, {\n\t\t\t\t\trecursive: true,\n\t\t\t\t\tforce: opts.force\n\t\t\t\t});\n\t\t\t\tcopiedCount += 1;\n\t\t\t} catch {\n\t\t\t\tfailedPaths.push(relativePath);\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\tcopiedCount,\n\t\t\tskippedCount: paths.length - copiedCount,\n\t\t\tfailedPaths,\n\t\t\ttotalBytes: 0\n\t\t};\n\t};\n\treturn {\n\t\tcopyPathsParallel: copyPathsParallelFallback,\n\t\tdestroyWorktree() {\n\t\t\treturn {\n\t\t\t\tremoved: false,\n\t\t\t\tbranchDeleted: false\n\t\t\t};\n\t\t},\n\t\treadWorktreeInclude(repoRoot) {\n\t\t\tconst includePath = join(repoRoot, \".worktreeinclude\");\n\t\t\tif (!existsSync(includePath)) return [];\n\t\t\treturn readFileSync(includePath, \"utf-8\").split(/\\r?\\n/).map((line) => line.trim()).filter((line) => line.length > 0 && !line.startsWith(\"#\")).map((line) => ({\n\t\t\t\tpattern: line.startsWith(\"!\") ? line.slice(1) : line,\n\t\t\t\tisNegation: line.startsWith(\"!\")\n\t\t\t}));\n\t\t},\n\t\tapplyInclude(patterns, srcDir, destDir, opts) {\n\t\t\treturn copyPathsParallelFallback(srcDir, destDir, patterns.filter((pattern) => !pattern.isNegation).map((pattern) => pattern.pattern), opts);\n\t\t},\n\t\tlistWorktrees() {\n\t\t\treturn [];\n\t\t},\n\t\tpruneWorktrees(opts) {\n\t\t\treturn {\n\t\t\t\tintegrationTarget: opts.integrationTarget,\n\t\t\t\tcandidates: []\n\t\t\t};\n\t\t},\n\t\tremoveDir(opts) {\n\t\t\trmSync(opts.path, {\n\t\t\t\trecursive: true,\n\t\t\t\tforce: true\n\t\t\t});\n\t\t\treturn {\n\t\t\t\tfiles: 0,\n\t\t\t\tbytes: 0\n\t\t\t};\n\t\t},\n\t\tprovisionWorktree(_opts) {\n\t\t\treturn {\n\t\t\t\tpath: \"\",\n\t\t\t\tbranch: \"\",\n\t\t\t\thead: \"\"\n\t\t\t};\n\t\t},\n\t\tintegrateWorktree(_opts) {\n\t\t\treturn {\n\t\t\t\ttaskId: \"\",\n\t\t\t\ttargetBranch: \"\",\n\t\t\t\tmerged: false,\n\t\t\t\tmergeCommit: \"\",\n\t\t\t\tcommitCount: 0,\n\t\t\t\trebased: false,\n\t\t\t\terror: \"integrateWorktree not available in test fallback\"\n\t\t\t};\n\t\t}\n\t};\n}\nvar require_, bundledNativeLoaderPath, repoLocalNativeLoaderPath, nativeBinding, destroyWorktree, integrateWorktree;\nvar init_napi_binding = __esmMin((() => {\n\trequire_ = createRequire(import.meta.url);\n\tbundledNativeLoaderPath = fileURLToPath(new URL(\"../native/worktree-napi.cjs\", import.meta.url));\n\trepoLocalNativeLoaderPath = fileURLToPath(new URL(\"../../../crates/worktree-napi/index.cjs\", import.meta.url));\n\tnativeBinding = null;\n\tdestroyWorktree = (opts) => getNative().destroyWorktree(opts);\n\tintegrateWorktree = (opts) => getNative().integrateWorktree(opts);\n}));\n//#endregion\n//#region ../worktree/dist/copy-on-write.js\ninit_napi_binding();\npromisify(execFile);\n/**\n* Run a git command synchronously and return trimmed stdout.\n*\n* @param args - Git argument array (do NOT include \"git\" as first element).\n* @param cwd - Working directory for the git command.\n* @param timeoutMs - Optional timeout override in milliseconds. Defaults to\n* {@link DEFAULT_GIT_TIMEOUT_MS}. Pass `0` to disable (NOT recommended).\n* @returns Trimmed stdout string.\n* @throws Error if the command exits non-zero or exceeds the timeout.\n* @task T9545\n*/\nfunction gitSync(args, cwd, timeoutMs) {\n\treturn execFileSync(\"git\", args, {\n\t\tcwd,\n\t\tencoding: \"utf-8\",\n\t\tstdio: [\n\t\t\t\"pipe\",\n\t\t\t\"pipe\",\n\t\t\t\"pipe\"\n\t\t],\n\t\ttimeout: timeoutMs ?? 18e4\n\t}).trim();\n}\n/**\n* Run a git command synchronously, returning false instead of throwing on error.\n*\n* Useful for best-effort cleanup operations where failure is non-fatal.\n*\n* @param args - Git argument array.\n* @param cwd - Working directory.\n* @param timeoutMs - Optional timeout override in milliseconds. Defaults to\n* {@link DEFAULT_GIT_TIMEOUT_MS}.\n* @returns true on exit 0, false otherwise (including timeout).\n* @task T9545\n*/\nfunction gitSilent(args, cwd, timeoutMs) {\n\ttry {\n\t\texecFileSync(\"git\", args, {\n\t\t\tcwd,\n\t\t\tstdio: \"pipe\",\n\t\t\ttimeout: timeoutMs ?? 18e4\n\t\t});\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n/**\n* Determine the git root directory for a given project path.\n*\n* @param projectRoot - Absolute path to start the search from.\n* @returns Absolute path to the git root.\n* @throws Error if not inside a git repository.\n*/\nfunction getGitRoot(projectRoot) {\n\ttry {\n\t\treturn gitSync([\"rev-parse\", \"--show-toplevel\"], projectRoot);\n\t} catch {\n\t\tthrow new Error(`Not a git repository: ${projectRoot}`);\n\t}\n}\n//#endregion\n//#region ../worktree/dist/worktree-include.js\ninit_napi_binding();\n//#endregion\n//#region ../worktree/dist/worktree-destroy.js\ninit_napi_binding();\n//#endregion\n//#region ../worktree/dist/worktree-list.js\ninit_napi_binding();\n//#endregion\n//#region ../worktree/dist/worktree-prune.js\ninit_napi_binding();\n//#endregion\n//#region ../worktree/dist/index.js\ninit_napi_binding();\n//#endregion\n//#region ../core/dist/spawn/branch-lock.js\n/**\n* Resolve the worktree root directory for a project.\n*\n* Delegates to the canonical paths-SSoT helpers in `@cleocode/paths`. The\n* resolved directory follows the XDG canonical layout per D029:\n*\n* Linux: ~/.local/share/cleo/worktrees/<projectHash>/\n* macOS: ~/Library/Application Support/cleo/worktrees/<projectHash>/\n* Windows: %LOCALAPPDATA%\\cleo\\Data\\worktrees\\<projectHash>\\\n*\n* T9984: previously hand-rolled `createHash('sha256').update(projectRoot)` +\n* `process.env['XDG_DATA_HOME']` — both violations of the paths-SSoT lint\n* (`packages/paths/` is the only legitimate source of these computations).\n* Now routes through `computeProjectHash` and `resolveWorktreeRootForHash`.\n*\n* @param projectRoot - Absolute path to the project root.\n* @returns Absolute path to the worktree root directory.\n*\n* @task T1118\n* @task T1120\n* @task T9984\n*/\nfunction resolveAgentWorktreeRoot(projectRoot) {\n\treturn resolveWorktreeRootForHash(computeProjectHash(projectRoot));\n}\n/**\n* Prune the worktree for a single completed or cancelled task.\n*\n* This function does NOT integrate commits — it is called after\n* {@link completeAgentWorktreeViaMerge} (or `cleo complete`) has already\n* recorded the task as done. It simply removes the worktree filesystem entry\n* and the `task/<taskId>` branch if the branch has no commits ahead of the\n* base ref.\n*\n* Behaviour:\n* - Returns `{ status: 'skipped' }` when no worktree exists for the task.\n* - Unlocks the worktree before removing (handles locked worktrees created by spawn).\n* - Falls back to `rmSync` if `git worktree remove` fails.\n* - Deletes `task/<taskId>` branch only when it has 0 commits ahead of the\n* current HEAD (i.e. the branch has already been merged or is empty).\n* When commits are still present the branch is left in place and reported in\n* the result — callers should use `completeAgentWorktreeViaMerge` first.\n* - Always writes a `--force` remove with an audit log entry (`.cleo/audit/worktree-prune.jsonl`)\n* when the worktree is detected as dirty.\n* - Never throws — failures are returned in `{ status: 'error', error }`.\n*\n* @param taskId - The CLEO task ID (e.g. \"T1462\").\n* @param projectRoot - Absolute path to the project root.\n* @param opts.auditLogPath - Override path for the audit JSONL (testing).\n* @returns Prune outcome.\n*\n* @task T1462\n* @adr ADR-055\n*/\nfunction pruneWorktree(taskId, projectRoot, opts = {}) {\n\tconst branch = `task/${taskId}`;\n\tlet gitRoot;\n\ttry {\n\t\tgitRoot = getGitRoot(projectRoot);\n\t} catch (err) {\n\t\treturn {\n\t\t\ttaskId,\n\t\t\tstatus: \"error\",\n\t\t\tworktreeRemoved: false,\n\t\t\tbranchDeleted: false,\n\t\t\twasDirty: false,\n\t\t\terror: `Not a git repo: ${err instanceof Error ? err.message : String(err)}`\n\t\t};\n\t}\n\tconst worktreePath = join(resolveAgentWorktreeRoot(projectRoot), taskId);\n\tif (!existsSync(worktreePath)) {\n\t\tlet branchDeleted = false;\n\t\ttry {\n\t\t\tif (gitSync([\n\t\t\t\t\"branch\",\n\t\t\t\t\"--list\",\n\t\t\t\tbranch\n\t\t\t], gitRoot)) {\n\t\t\t\tgitSync([\n\t\t\t\t\t\"branch\",\n\t\t\t\t\t\"-D\",\n\t\t\t\t\tbranch\n\t\t\t\t], gitRoot);\n\t\t\t\tbranchDeleted = true;\n\t\t\t} else branchDeleted = true;\n\t\t} catch {}\n\t\treturn {\n\t\t\ttaskId,\n\t\t\tstatus: \"skipped\",\n\t\t\tworktreeRemoved: false,\n\t\t\tbranchDeleted,\n\t\t\twasDirty: false\n\t\t};\n\t}\n\tlet wasDirty = false;\n\ttry {\n\t\twasDirty = gitSync([\"status\", \"--porcelain\"], worktreePath).length > 0;\n\t} catch {}\n\tif (wasDirty) try {\n\t\tconst auditDir = opts.auditLogPath ? opts.auditLogPath.split(\"/\").slice(0, -1).join(\"/\") : join(projectRoot, \".cleo\", \"audit\");\n\t\tmkdirSync(auditDir, { recursive: true });\n\t\tappendFileSync(opts.auditLogPath ?? join(auditDir, \"worktree-prune.jsonl\"), JSON.stringify({\n\t\t\ttimestamp: (/* @__PURE__ */ new Date()).toISOString(),\n\t\t\ttaskId,\n\t\t\tworktreePath,\n\t\t\taction: \"force-remove-dirty\",\n\t\t\tagent: process.env[\"CLEO_AGENT_ID\"] ?? \"cleo\"\n\t\t}) + \"\\n\", \"utf-8\");\n\t} catch {}\n\tlet worktreeRemoved = false;\n\ttry {\n\t\tworktreeRemoved = destroyWorktree({\n\t\t\trepoRoot: gitRoot,\n\t\t\tworktreePath,\n\t\t\tforce: true\n\t\t}).removed;\n\t\tif (worktreeRemoved && existsSync(worktreePath)) worktreeRemoved = false;\n\t} catch {}\n\tif (!worktreeRemoved) {\n\t\tgitSilent([\n\t\t\t\"worktree\",\n\t\t\t\"unlock\",\n\t\t\tworktreePath\n\t\t], gitRoot);\n\t\ttry {\n\t\t\trmSync(worktreePath, {\n\t\t\t\trecursive: true,\n\t\t\t\tforce: true\n\t\t\t});\n\t\t\tgitSilent([\"worktree\", \"prune\"], gitRoot);\n\t\t\tworktreeRemoved = true;\n\t\t} catch (err) {\n\t\t\treturn {\n\t\t\t\ttaskId,\n\t\t\t\tstatus: \"error\",\n\t\t\t\tworktreeRemoved: false,\n\t\t\t\tbranchDeleted: false,\n\t\t\t\twasDirty,\n\t\t\t\terror: `Failed to remove worktree: ${err instanceof Error ? err.message : String(err)}`\n\t\t\t};\n\t\t}\n\t}\n\tlet branchDeleted = false;\n\ttry {\n\t\tif (gitSync([\n\t\t\t\"branch\",\n\t\t\t\"--list\",\n\t\t\tbranch\n\t\t], gitRoot)) {\n\t\t\tlet baseRef;\n\t\t\ttry {\n\t\t\t\tbaseRef = gitSync([\n\t\t\t\t\t\"rev-parse\",\n\t\t\t\t\t\"--abbrev-ref\",\n\t\t\t\t\t\"HEAD\"\n\t\t\t\t], gitRoot);\n\t\t\t} catch {\n\t\t\t\tbaseRef = \"main\";\n\t\t\t}\n\t\t\tif (gitSync([\n\t\t\t\t\"log\",\n\t\t\t\t\"--format=%H\",\n\t\t\t\t`${baseRef}..${branch}`\n\t\t\t], gitRoot).split(\"\\n\").map((s) => s.trim()).filter(Boolean).length === 0) {\n\t\t\t\tgitSync([\n\t\t\t\t\t\"branch\",\n\t\t\t\t\t\"-D\",\n\t\t\t\t\tbranch\n\t\t\t\t], gitRoot);\n\t\t\t\tbranchDeleted = true;\n\t\t\t} else branchDeleted = false;\n\t\t} else branchDeleted = true;\n\t} catch {}\n\treturn {\n\t\ttaskId,\n\t\tstatus: \"pruned\",\n\t\tworktreeRemoved,\n\t\tbranchDeleted,\n\t\twasDirty\n\t};\n}\n/**\n* Probe order for default-branch fallback when neither config nor\n* `origin/HEAD` resolves. Order matches industry convention frequency.\n*/\nvar DEFAULT_BRANCH_PROBE_ORDER = [\n\t\"main\",\n\t\"master\",\n\t\"develop\",\n\t\"trunk\"\n];\n/**\n* Resolve the project's default integration branch in a project-agnostic way.\n*\n* Resolution order (per ADR-062):\n*\n* 1. `.cleo/config.json::git.defaultBranch` (explicit override).\n* 2. `git symbolic-ref refs/remotes/origin/HEAD` (what the remote calls\n* default — works for `master`, `main`, `trunk`, etc.).\n* 3. Probe local branches in order: `main`, `master`, `develop`, `trunk`.\n* 4. Fallback to `'main'`.\n*\n* @param projectRoot - Absolute path to the project root.\n* @returns The resolved default branch name (never throws).\n*\n* @task T1587\n* @adr ADR-062\n*/\nfunction getDefaultBranch(projectRoot) {\n\tconst configPath = join(projectRoot, \".cleo\", \"config.json\");\n\tif (existsSync(configPath)) try {\n\t\tconst raw = readFileSync(configPath, \"utf-8\");\n\t\tconst fromCfg = JSON.parse(raw).git?.defaultBranch;\n\t\tif (typeof fromCfg === \"string\" && fromCfg.length > 0) return fromCfg;\n\t} catch {}\n\tlet gitRoot;\n\ttry {\n\t\tgitRoot = getGitRoot(projectRoot);\n\t} catch {\n\t\treturn \"main\";\n\t}\n\ttry {\n\t\tconst stripped = gitSync([\"symbolic-ref\", \"refs/remotes/origin/HEAD\"], gitRoot).replace(/^refs\\/remotes\\/origin\\//, \"\").trim();\n\t\tif (stripped.length > 0) return stripped;\n\t} catch {}\n\tfor (const candidate of DEFAULT_BRANCH_PROBE_ORDER) try {\n\t\tif (gitSync([\n\t\t\t\"branch\",\n\t\t\t\"--list\",\n\t\t\tcandidate\n\t\t], gitRoot).length > 0) return candidate;\n\t} catch {}\n\treturn \"main\";\n}\n/**\n* Complete a worker task's worktree via `git merge --no-ff` (ADR-062).\n*\n* Canonical worktree integration per ADR-062. Preserves the full agent\n* commit graph instead of rewriting SHAs, so `git log --grep \"T<id>\"`\n* returns the originating commits with their original authorship.\n*\n* Steps performed inside the worktree at\n* `~/.local/share/cleo/worktrees/<projectHash>/<taskId>/`:\n*\n* 1. Resolve target branch via {@link getDefaultBranch} (or `opts.targetBranch`\n* override). NEVER hardcodes \"main\".\n* 2. `git fetch origin` then `git rebase origin/<targetBranch>` inside the\n* worktree. Conflicts cause an early non-fatal return — the agent must\n* re-resolve before completion.\n* 3. From the project's git root on `<targetBranch>`, run\n* `git merge --no-ff task/<taskId> -m \"Merge T<id>: <title>\"` so the\n* merge commit subject is `git log --grep`-friendly.\n* 4. Capture the merge commit SHA and report it.\n* 5. Delegate worktree+branch removal to {@link pruneWorktree} (T1462).\n*\n* Project-agnostic: no string in this function hardcodes \"main\", \"master\",\n* or any other branch name. Test fixtures pass arbitrary `targetBranch`.\n*\n* @param taskId - The CLEO task ID (e.g. `\"T1587\"`).\n* @param projectRoot - Absolute path to the project root.\n* @param opts.targetBranch - Override the resolved default branch.\n* @param opts.taskTitle - Task title used in the merge commit message subject.\n* @param opts.skipFetch - Skip the `git fetch origin` step (test fixtures).\n* @returns Merge integration result.\n*\n* @task T1587\n* @adr ADR-062\n*/\nfunction completeAgentWorktreeViaMerge(taskId, projectRoot, opts = {}) {\n\tconst branch = `task/${taskId}`;\n\tconst targetBranch = opts.targetBranch ?? getDefaultBranch(projectRoot);\n\tlet gitRoot;\n\ttry {\n\t\tgitRoot = getGitRoot(projectRoot);\n\t} catch (err) {\n\t\treturn {\n\t\t\ttaskId,\n\t\t\ttargetBranch,\n\t\t\tmerged: false,\n\t\t\tmergeCommit: \"\",\n\t\t\tcommitCount: 0,\n\t\t\trebased: false,\n\t\t\tworktreeRemoved: false,\n\t\t\tbranchDeleted: false,\n\t\t\terror: `Not a git repo: ${err instanceof Error ? err.message : String(err)}`\n\t\t};\n\t}\n\tconst worktreePath = join(resolveAgentWorktreeRoot(projectRoot), taskId);\n\tif (!(gitSync([\n\t\t\"branch\",\n\t\t\"--list\",\n\t\tbranch\n\t], gitRoot).trim().length > 0) && !existsSync(worktreePath)) return {\n\t\ttaskId,\n\t\ttargetBranch,\n\t\tmerged: false,\n\t\tmergeCommit: \"\",\n\t\tcommitCount: 0,\n\t\trebased: false,\n\t\tworktreeRemoved: false,\n\t\tbranchDeleted: false,\n\t\terror: `no task branch '${branch}' and no worktree — nothing to integrate`,\n\t\tnothingToIntegrate: true\n\t};\n\tconst result = integrateWorktree({\n\t\trepoRoot: gitRoot,\n\t\tworktreePath,\n\t\tbranch,\n\t\ttargetBranch,\n\t\ttaskTitle: opts.taskTitle,\n\t\tskipFetch: opts.skipFetch ?? false\n\t});\n\tif (!result.merged) return {\n\t\ttaskId,\n\t\ttargetBranch,\n\t\tmerged: false,\n\t\tmergeCommit: \"\",\n\t\tcommitCount: result.commitCount,\n\t\trebased: result.rebased,\n\t\tworktreeRemoved: false,\n\t\tbranchDeleted: false,\n\t\terror: result.error\n\t};\n\tconst pruneResult = pruneWorktree(taskId, projectRoot);\n\treturn {\n\t\ttaskId,\n\t\ttargetBranch,\n\t\tmerged: true,\n\t\tmergeCommit: result.mergeCommit,\n\t\tcommitCount: result.commitCount,\n\t\trebased: result.rebased,\n\t\tworktreeRemoved: pruneResult.worktreeRemoved,\n\t\tbranchDeleted: pruneResult.branchDeleted,\n\t\terror: pruneResult.error\n\t};\n}\n/**\n* Complete a worker task's worktree integration via merge, cleanup, and audit log.\n*\n* This is the orchestrator-facing convenience wrapper around\n* `completeAgentWorktreeViaMerge`. In addition to the merge+prune steps it:\n*\n* 1. Delegates all merge and cleanup to `completeAgentWorktreeViaMerge`.\n* 2. Appends a structured entry to `.cleo/audit/worktree-integration.jsonl`\n* recording the merge commit, task ID, and cleanup outcome.\n*\n* Orchestrators MUST call this (not `completeAgentWorktreeViaMerge` directly)\n* so every integration is auditable.\n*\n* @param taskId - The CLEO task ID (e.g. `\"T1587\"`).\n* @param projectRoot - Absolute path to the project root.\n* @param opts.targetBranch - Override the resolved default branch.\n* @param opts.taskTitle - Task title used in the merge commit message subject.\n* @param opts.skipFetch - Skip the `git fetch origin` step (test fixtures).\n* @param opts.auditLogPath - Override the audit JSONL path (testing).\n* @returns Integration result including audit log path.\n*\n* @task T9043\n* @adr ADR-062\n*/\nfunction completeAgentWorktreeIntegration(taskId, projectRoot, opts = {}) {\n\tconst mergeResult = completeAgentWorktreeViaMerge(taskId, projectRoot, {\n\t\ttargetBranch: opts.targetBranch,\n\t\ttaskTitle: opts.taskTitle,\n\t\tskipFetch: opts.skipFetch\n\t});\n\tlet auditLogEntry = null;\n\ttry {\n\t\tconst auditDir = opts.auditLogPath ? opts.auditLogPath.split(\"/\").slice(0, -1).join(\"/\") : join(projectRoot, \".cleo\", \"audit\");\n\t\tmkdirSync(auditDir, { recursive: true });\n\t\tconst logPath = opts.auditLogPath ?? join(auditDir, \"worktree-integration.jsonl\");\n\t\tappendFileSync(logPath, JSON.stringify({\n\t\t\ttimestamp: (/* @__PURE__ */ new Date()).toISOString(),\n\t\t\ttaskId,\n\t\t\tmergeCommit: mergeResult.mergeCommit,\n\t\t\tmerged: mergeResult.merged,\n\t\t\tworktreeRemoved: mergeResult.worktreeRemoved,\n\t\t\tbranchDeleted: mergeResult.branchDeleted,\n\t\t\terror: mergeResult.error ?? null,\n\t\t\tagent: process.env[\"CLEO_AGENT_ID\"] ?? \"cleo\"\n\t\t}) + \"\\n\", \"utf-8\");\n\t\tauditLogEntry = logPath;\n\t} catch {}\n\treturn {\n\t\t...mergeResult,\n\t\tauditLogEntry\n\t};\n}\n//#endregion\nexport { resolveAgentWorktreeRoot as a, pruneWorktree as i, completeAgentWorktreeViaMerge as n, getGitRoot as o, getDefaultBranch as r, completeAgentWorktreeIntegration as t };\n"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"branch-lock2-CmDc4CZW.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"cancelled-child-waiver-audit-DkesrN83.js","sources":["../../../.svelte-kit/adapter-node/chunks/cancelled-child-waiver-audit.js"],"sourcesContent":["import { u as getProjectRoot } from \"./paths.js\";\nimport { join } from \"node:path\";\nimport { appendFile, mkdir } from \"node:fs/promises\";\n//#region ../core/dist/tasks/cancelled-child-waiver-audit.js\n/**\n* Cancelled-child-waiver audit trail.\n*\n* Records waiver entries to `.cleo/audit/cancelled-child-waiver.jsonl` when a\n* caller completes a parent that has `cancelled` children by supplying\n* `--waive-cancelled-children \"<reason>\"` to bypass the\n* `E_CANCELLED_CHILD_NO_WAIVER` gate.\n*\n* Pattern mirrors `premature-close-audit.ts` (T1632) — one JSONL file per audit\n* concern, created on demand, appended atomically.\n*\n* @saga T10538 (PM-Core V2 agent-trust)\n*/\n/**\n* Append a cancelled-child-waiver entry to the audit file.\n*\n* Creates `.cleo/audit/` if it does not exist and atomically appends a\n* single-line JSON record to `.cleo/audit/cancelled-child-waiver.jsonl`.\n*\n* @param entry - The audit entry to append.\n* @param projectRoot - Absolute path to the project root (defaults to `getProjectRoot()`).\n*/\nasync function appendCancelledChildWaiverAudit(entry, projectRoot) {\n\tconst auditDir = join(projectRoot ?? getProjectRoot(), \".cleo\", \"audit\");\n\tawait mkdir(auditDir, { recursive: true });\n\tawait appendFile(join(auditDir, \"cancelled-child-waiver.jsonl\"), `${JSON.stringify(entry)}\\n`, { encoding: \"utf8\" });\n}\n//#endregion\nexport { appendCancelledChildWaiverAudit };\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+BAA+B,CAAC,KAAK,EAAE,WAAW,EAAE;AACnE,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,IAAI,cAAc,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC;AACzE,CAAC,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AAC3C,CAAC,MAAM,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,8BAA8B,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;AACrH;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"catalog-model-resolver-Bas9qnoP.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"catalog-model-resolver2-Cexk2TN0.js","sources":["../../../.svelte-kit/adapter-node/chunks/catalog-cache.js","../../../.svelte-kit/adapter-node/chunks/catalog-model-resolver2.js"],"sourcesContent":["import { existsSync, readFileSync, readdirSync, statSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { homedir } from \"node:os\";\n//#region ../core/dist/llm/catalog-cache.js\n/**\n* Live model catalog cache — fetches and persists models.dev/api.json.\n*\n* Resolution priority:\n* 1. Disk cache (versioned under `<CLEO_DATA_DIR>/llm-catalog/`)\n* 2. Bundled snapshot (curated-models.json in this package)\n*\n* The cache is keyed by a Unix-timestamp prefix: `<ts>-models.json`. A\n* stable `latest.json` symlink points to the most recent entry for quick\n* access without scanning the directory.\n*\n* Stale-fallback behaviour (network failures):\n* - If the network fetch fails, the most-recently-written `*.json` in\n* the cache directory is returned instead.\n* - If the cache directory is empty or absent, the bundled snapshot is\n* returned so callers always get *some* data.\n*\n* Source: https://models.dev/api.json\n*\n* @module llm/catalog-cache\n* @task T9314\n* @epic T9261 (T-LLM-CRED-CENTRALIZATION Phase 5)\n*/\n/**\n* Resolve the directory where catalog snapshots are stored.\n*\n* Respects `CLEO_DATA_DIR` env override (same convention used by the\n* credentials layer), then falls back to\n* `$XDG_DATA_HOME/cleo` → `~/.local/share/cleo`.\n*/\nfunction getCatalogDir() {\n\tif (process.env[\"CLEO_DATA_DIR\"]) return join(process.env[\"CLEO_DATA_DIR\"], \"llm-catalog\");\n\treturn join(process.env[\"XDG_DATA_HOME\"] ?? join(homedir(), \".local\", \"share\"), \"cleo\", \"llm-catalog\");\n}\n/**\n* Return the path to the most-recently-written `*-models.json` in `dir`.\n*\n* Entries are sorted by `mtime` descending so the first item is the\n* freshest. Returns `null` when the directory is empty or does not exist.\n*/\nfunction findLatestCacheFile(dir) {\n\tif (!existsSync(dir)) return null;\n\tconst files = readdirSync(dir).filter((f) => f.endsWith(\"-models.json\")).map((f) => ({\n\t\tname: f,\n\t\tmtime: statSync(join(dir, f)).mtimeMs\n\t})).sort((a, b) => b.mtime - a.mtime);\n\treturn files.length > 0 ? join(dir, files[0].name) : null;\n}\n/**\n* Read a `ModelsCatalogFile` from `filePath`.\n*\n* Returns `null` on any parse or I/O error so callers can fall through to\n* the next tier without crashing.\n*/\nfunction readCacheFile(filePath) {\n\ttry {\n\t\tconst raw = readFileSync(filePath, \"utf-8\");\n\t\treturn JSON.parse(raw);\n\t} catch {\n\t\treturn null;\n\t}\n}\n//#endregion\nexport { getCatalogDir as n, readCacheFile as r, findLatestCacheFile as t };\n","import { n as getCatalogDir, r as readCacheFile, t as findLatestCacheFile } from \"./catalog-cache.js\";\n//#region ../core/dist/llm/catalog-model-resolver.js\n/**\n* Catalog-driven model resolution and validation (T11773 · E8).\n*\n* Provides two primitives that wire `cleo llm use` / `cleo llm profile` to\n* the live models.dev catalog instead of hardcoded literals:\n*\n* - {@link resolveProviderDefaultModel} — derive the latest model for a\n* provider by sorting the catalog entries by `release_date` descending.\n* Falls back to `null` when the catalog has no entries for that provider.\n*\n* - {@link validateModelForProvider} — assert that a model ID is present in\n* the catalog for the given provider. Used by `llmUse` / `llmProfile` to\n* reject typos / unknown model strings at configuration time rather than\n* at inference time.\n*\n* Both functions read the disk-cached snapshot written by\n* `cleo llm refresh-catalog` — no network requests are issued at call time.\n* When no disk snapshot is available (fresh install, catalog never fetched)\n* the functions return `null` / `false` respectively so callers can surface\n* a user-friendly \"run `cleo llm refresh-catalog` first\" message.\n*\n* @module llm/catalog-model-resolver\n* @task T11773\n* @epic T11694 (E8-CATALOG-CURATION)\n*/\n/** In-memory catalog cache for the process lifetime. */\nvar _catalog;\n/**\n* Load the full catalog from disk — no network fetch.\n*\n* Returns `null` when no snapshot is available so callers can surface a\n* \"run `cleo llm refresh-catalog` first\" hint rather than crashing.\n*\n* Results are cached for the process lifetime. Call\n* {@link _resetCatalogModelResolverCache} in tests to clear the cache.\n*\n* @internal\n*/\nfunction getDiskCatalog() {\n\tif (_catalog !== void 0) return _catalog;\n\tconst latest = findLatestCacheFile(getCatalogDir());\n\tif (!latest) {\n\t\t_catalog = null;\n\t\treturn null;\n\t}\n\t_catalog = readCacheFile(latest);\n\treturn _catalog;\n}\n/**\n* Derive the default model for a provider by finding the model with the\n* latest `release_date` in the catalog.\n*\n* Resolution is catalog-key aware: the caller passes the models.dev provider\n* key (e.g. `\"openai\"`, `\"anthropic\"`, `\"google\"`). Entries without a\n* `release_date` field are excluded from the comparison so unpublished or\n* internal-only entries do not shadow real released models.\n*\n* @param providerCatalogKey - The models.dev provider key (e.g. `\"openai\"`).\n* @param catalogOverride - Optional catalog for testing; defaults to the disk\n* snapshot loaded by {@link getDiskCatalog}.\n* @returns The model ID with the latest `release_date`, or `null` when the\n* catalog is unavailable or the provider has no dated entries.\n*\n* @task T11773\n*/\nfunction resolveProviderDefaultModel(providerCatalogKey, catalogOverride) {\n\tconst catalog = catalogOverride ?? getDiskCatalog();\n\tif (!catalog) return null;\n\tconst provider = catalog[providerCatalogKey];\n\tif (!provider?.models) return null;\n\tlet latestId = null;\n\tlet latestDate = \"\";\n\tfor (const [id, entry] of Object.entries(provider.models)) {\n\t\tconst rd = entry.release_date;\n\t\tif (!rd) continue;\n\t\tif (rd > latestDate) {\n\t\t\tlatestDate = rd;\n\t\t\tlatestId = id;\n\t\t}\n\t}\n\treturn latestId;\n}\n/**\n* Check whether a model ID is present in the catalog for a given provider.\n*\n* The check is provider-scoped: `gpt-4o` is valid for `openai` but would\n* fail for `anthropic`. This prevents cross-provider typos such as\n* `cleo llm profile extraction openai --model claude-opus-4-8`.\n*\n* When the catalog is unavailable (not yet fetched) the function returns\n* `{ valid: true, reason: 'catalog-unavailable' }` so the caller can pass\n* the model through with a soft warning rather than blocking the user.\n*\n* @param model - Model ID to validate (e.g. `\"gpt-5.5\"`).\n* @param providerCatalogKey - The models.dev provider key (e.g. `\"openai\"`).\n* @param catalogOverride - Optional catalog for testing.\n* @returns Validation result with `valid` boolean and diagnostic `reason`.\n*\n* @task T11773\n*/\nfunction validateModelForProvider(model, providerCatalogKey, catalogOverride) {\n\tconst catalog = catalogOverride ?? getDiskCatalog();\n\tif (!catalog) return {\n\t\tvalid: true,\n\t\treason: \"catalog-unavailable\"\n\t};\n\tconst provider = catalog[providerCatalogKey];\n\tif (!provider?.models) return {\n\t\tvalid: true,\n\t\treason: \"provider-not-in-catalog\"\n\t};\n\tconst found = Object.hasOwn(provider.models, model);\n\treturn {\n\t\tvalid: found,\n\t\treason: found ? \"found\" : \"not-found\"\n\t};\n}\n/**\n* List the catalog model ids for a provider, newest first.\n*\n* Sorts by `release_date` descending so the latest models surface at the top of\n* an interactive picker (e.g. the models/roles wizard section — T11726). Entries\n* without a `release_date` are appended after the dated ones, in catalog order.\n* Returns an empty array when the catalog is unavailable or the provider has no\n* entries, so callers can fall back to a free-text prompt.\n*\n* @param providerCatalogKey - The models.dev provider key (e.g. `\"openai\"`).\n* @param limit - Maximum number of model ids to return (default `12`). Use a\n* small cap so an interactive menu stays scannable.\n* @param catalogOverride - Optional catalog for testing; defaults to the disk\n* snapshot loaded by {@link getDiskCatalog}.\n* @returns Model ids newest-first, capped at `limit`.\n*\n* @task T11726\n*/\nfunction listProviderModels(providerCatalogKey, limit = 12, catalogOverride) {\n\tconst catalog = catalogOverride ?? getDiskCatalog();\n\tif (!catalog) return [];\n\tconst provider = catalog[providerCatalogKey];\n\tif (!provider?.models) return [];\n\treturn [...Object.entries(provider.models)].sort(([, a], [, b]) => {\n\t\tconst da = a.release_date ?? \"\";\n\t\tconst db = b.release_date ?? \"\";\n\t\tif (da === db) return 0;\n\t\treturn db.localeCompare(da);\n\t}).slice(0, Math.max(0, limit)).map(([id]) => id);\n}\n/**\n* Return the models.dev catalog key for a given CLEO provider name.\n*\n* CLEO provider names (e.g. `\"openai\"`, `\"anthropic\"`) usually match their\n* models.dev catalog key directly. Where they diverge (Gemini is registered\n* as `\"google\"` in models.dev) this map provides the translation.\n*\n* Add new mappings here when a builtin provider's `name` field does not\n* match the models.dev key.\n*\n* @param providerName - CLEO-canonical provider name (e.g. `\"gemini\"`).\n* @returns The models.dev catalog key (e.g. `\"google\"`).\n*\n* @task T11773\n*/\nfunction catalogKeyForProvider(providerName) {\n\treturn { gemini: \"google\" }[providerName.toLowerCase()] ?? providerName.toLowerCase();\n}\n//#endregion\nexport { validateModelForProvider as i, listProviderModels as n, resolveProviderDefaultModel as r, catalogKeyForProvider as t };\n"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"catalog-resolver-CLot3XJO.js","sources":["../../../.svelte-kit/adapter-node/chunks/catalog-resolver.js"],"sourcesContent":["import { t as getLogger } from \"./logger.js\";\nimport { Rt as CATALOG_MODEL_STATUSES } from \"./dist2.js\";\nimport { o as openDualScopeDb } from \"./dual-scope-db.js\";\nimport { n as getCatalogDir, r as readCacheFile, t as findLatestCacheFile } from \"./catalog-cache.js\";\nimport { readFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { index, integer, sqliteTable, text, unique } from \"drizzle-orm/sqlite-core\";\nimport { sql } from \"drizzle-orm\";\n//#region ../core/dist/store/schema/cleo-global/models-catalog.js\n/**\n* Global-scope `cleo.db` — **models.dev catalog SSoT** (`models_catalog`, 1 table).\n*\n* E8-CATALOG-CURATION (epic T11694 · task T11733). This table is the queryable,\n* `cleo health`-visible home for the **provider+model capability catalog** that\n* today lives only as a disk JSON cache (`llm-catalog/`) and a tiny bundled\n* `curated-models.json`. Each row is ONE model — its full models.dev wire\n* capability set (modalities, cost, limits, reasoning/tool-call flags, status,\n* release date) — so the catalog becomes the SSoT (DB table) with the disk cache\n* demoted to an offline/degraded fallback MIRROR (T11737).\n*\n* It is the catalog half of the \"catalog-driven models, NO hardcoded\" North Star\n* spine: the resolver default model derives from this table sorted by\n* `release_date` DESC (T11944), killing the hardcoded `claude-haiku-4-5` literal —\n* the static literal survives ONLY as the offline-only last-resort floor when this\n* table is empty/unseeded.\n*\n* ## NOT the `accounts` credential pool — do not confuse the two\n*\n* `accounts` (T11709) holds machine-wide LLM CREDENTIALS (the pool the runner picks\n* from). THIS table holds CATALOG DATA (model capabilities) — no secrets, no\n* encryption. They share the cleo-global scope and the E10 typing conventions, but\n* carry orthogonal data. The catalog is freely readable; credentials are sealed.\n*\n* ## E10 typing (mirrors sibling `accounts.ts` / `services.ts`)\n*\n* - Booleans (`attachment`/`reasoning`/`temperature`/`interleaved`/`tool_call`) use\n* `integer({mode:'boolean'})` (CHECK `(0, 1)` in the migration).\n* - `modalities` / `cost` are JSON blobs serialized to TEXT (documented json pattern).\n* - `release_date` is TEXT `YYYY-MM-DD` with a GLOB date check; `seeded_at` is a TEXT\n* ISO-8601 timestamp.\n* - `status` is a named enum ({@link CATALOG_MODEL_STATUSES}, minted in contracts).\n*\n* ## Active selection — `release_date`-sorted, latest wins\n*\n* The resolver default and any \"newest model for provider X\" query reads this table\n* ordered by `(provider_id, release_date DESC)` — the `idx_models_catalog_provider_release`\n* index backs that scan. No raw partial unique index is required (unlike `accounts`'\n* active-pointer); `id` is the natural PK and `(provider_id, models_dev_id)` is a\n* natural unique key for the upsert.\n*\n* @task T11733\n* @epic T11694\n* @see ../../../../migrations/drizzle-cleo-global — the forward migration\n* @see ../../../llm/catalog-seeder.ts — the seeder that populates this table (T11734)\n* @see ../../../llm/catalog-resolver.ts — the table-first read chokepoint (T11737)\n* @see ./accounts.ts — the sibling credential-pool table this directory mirrors\n*/\n/**\n* `models_catalog` — the machine-wide provider+model capability catalog table.\n*\n* One row per model. The catalog SSoT: seeded from the shipped offline\n* `curated-catalog.json` (T11734), read table-first via `resolveCatalogEntry()`\n* (T11737), and consulted by the resolver default (latest `release_date` wins —\n* T11944). `id` is the model id (PK); `(provider_id, models_dev_id)` is the natural\n* upsert key.\n*\n* @task T11733\n*/\nvar modelsCatalog = sqliteTable(\"models_catalog\", {\n\tid: text(\"id\").primaryKey(),\n\tproviderId: text(\"provider_id\").notNull(),\n\tname: text(\"name\").notNull(),\n\tfamily: text(\"family\").notNull(),\n\tattachment: integer(\"attachment\", { mode: \"boolean\" }).notNull().default(false),\n\treasoning: integer(\"reasoning\", { mode: \"boolean\" }).notNull().default(false),\n\ttemperature: integer(\"temperature\", { mode: \"boolean\" }).notNull().default(true),\n\tinterleaved: integer(\"interleaved\", { mode: \"boolean\" }).notNull().default(false),\n\ttoolCall: integer(\"tool_call\", { mode: \"boolean\" }).notNull().default(false),\n\tmodalities: text(\"modalities\").notNull().default(\"{\\\"input\\\":[\\\"text\\\"],\\\"output\\\":[\\\"text\\\"]}\"),\n\tcost: text(\"cost\").notNull().default(\"{}\"),\n\tcontextLimit: integer(\"context_limit\"),\n\toutputLimit: integer(\"output_limit\"),\n\tstatus: text(\"status\", { enum: CATALOG_MODEL_STATUSES }).notNull().default(\"stable\"),\n\treleaseDate: text(\"release_date\").notNull(),\n\tmodelsDevId: text(\"models_dev_id\").notNull(),\n\tsource: text(\"source\").notNull().default(\"seed\"),\n\tseededAt: text(\"seeded_at\").notNull().default(sql`(datetime('now'))`)\n}, (table) => [\n\tunique(\"ux_models_catalog_provider_modeldev\").on(table.providerId, table.modelsDevId),\n\tindex(\"idx_models_catalog_provider_release\").on(table.providerId, table.releaseDate),\n\tindex(\"idx_models_catalog_provider_status\").on(table.providerId, table.status)\n]);\n//#endregion\n//#region ../core/dist/llm/catalog-resolver.js\n/**\n* Table-first catalog read chokepoint — `resolveCatalogEntry()` (E8 · T11737).\n*\n* ## The single read chokepoint\n*\n* The provider+model catalog now has THREE physical surfaces, in strict priority:\n*\n* 1. **`models_catalog` DB table** (cleo-global · T11733) — the SSoT. Seeded\n* from the shipped offline `curated-catalog.json` (T11734).\n* 2. **disk JSON cache** (`llm-catalog/` · T9314 · `catalog-cache.ts`) — the\n* offline/degraded fallback MIRROR (the most-recent models.dev snapshot).\n* 3. **shipped seed** (`curated-catalog.json`) — the last-resort floor that\n* always ships in the package, so a fresh/offline install always resolves.\n*\n* Every catalog reader (the resolver default — T11944; future capability lookups)\n* funnels through {@link resolveCatalogEntry} so the table and the cache can NEVER\n* silently diverge: one chokepoint, table-or-fallback, in that order.\n*\n* ## Offline-first (degrade) — NO network at read time\n*\n* This module NEVER fetches. The network refresh op (`cleo llm refresh-catalog`)\n* is a SEPARATE leaf. `resolveCatalogEntry()` reads the DB table first; when the\n* table is empty/unseeded it falls back to the disk-cache snapshot, then to the\n* shipped seed. A fresh install with no DB rows and no disk cache still resolves\n* from the bundled `curated-catalog.json`.\n*\n* @module llm/catalog-resolver\n* @task T11737\n* @epic T11694 (E8-CATALOG-CURATION)\n*/\nvar logger = getLogger(\"llm-catalog-resolver\");\n/** In-memory shipped-seed cache for the process lifetime. */\nvar _seed;\n/**\n* Load the shipped seed (`curated-catalog.json`) from disk — no network.\n*\n* Read once and cached for the process lifetime. Returns `null` only if the\n* bundled file is missing/unparseable (never expected — it ships in the package).\n*\n* @internal\n*/\nfunction loadShippedSeed() {\n\tif (_seed !== void 0) return _seed;\n\ttry {\n\t\tconst jsonPath = join(dirname(fileURLToPath(import.meta.url)), \"curated-catalog.json\");\n\t\t_seed = JSON.parse(readFileSync(jsonPath, \"utf-8\"));\n\t} catch (err) {\n\t\tlogger.warn({ err: err instanceof Error ? err.message : String(err) }, \"catalog-resolver: shipped seed unreadable\");\n\t\t_seed = null;\n\t}\n\treturn _seed;\n}\n/** Resolve the global Drizzle handle — injected, else canonical open. */\nasync function resolveDb(deps) {\n\tif (deps?.db !== void 0) return deps.db;\n\treturn (await openDualScopeDb(\"global\")).db;\n}\n/**\n* Read the latest-released entry for a provider from the `models_catalog` table.\n*\n* Returns the single newest row (ordered by `release_date` DESC, `id` DESC as a\n* stable tie-break) for the provider, or `null` when the provider has no rows\n* (table empty/unseeded for that provider). LIMIT 1 — never scans the whole table.\n*\n* @internal\n*/\nasync function readLatestFromTable(db, providerId) {\n\tconst { desc, eq } = await import(\"drizzle-orm\");\n\tconst row = (await db.select({\n\t\tid: modelsCatalog.id,\n\t\tproviderId: modelsCatalog.providerId,\n\t\treleaseDate: modelsCatalog.releaseDate,\n\t\tcontextLimit: modelsCatalog.contextLimit\n\t}).from(modelsCatalog).where(eq(modelsCatalog.providerId, providerId)).orderBy(desc(modelsCatalog.releaseDate), desc(modelsCatalog.id)).limit(1))[0];\n\tif (!row) return null;\n\treturn {\n\t\tid: row.id,\n\t\tproviderId: row.providerId,\n\t\treleaseDate: row.releaseDate,\n\t\tcontextLimit: row.contextLimit ?? null,\n\t\tsource: \"table\"\n\t};\n}\n/**\n* Resolve the latest-released catalog entry for a provider from a catalog snapshot\n* (disk-cache file or shipped seed), sorted by `release_date` DESC.\n*\n* The two fallback surfaces carry different shapes — the disk cache is the raw\n* models.dev `{ [provider]: { models: { [id]: { release_date, limit } } } }`, the\n* shipped seed is the curated `{ models: { [provider]: { [id]: entry } } }`. This\n* helper accepts the already-extracted per-provider model map.\n*\n* @internal\n*/\nfunction latestFromModelMap(models, providerId, source) {\n\tlet bestId = null;\n\tlet bestDate = \"\";\n\tlet bestCtx = null;\n\tfor (const [id, entry] of Object.entries(models)) {\n\t\tconst rd = entry.release_date;\n\t\tif (!rd) continue;\n\t\tif (rd > bestDate || rd === bestDate && bestId !== null && id > bestId) {\n\t\t\tbestDate = rd;\n\t\t\tbestId = id;\n\t\t\tbestCtx = entry.limit?.context ?? null;\n\t\t}\n\t}\n\tif (bestId === null) return null;\n\treturn {\n\t\tid: bestId,\n\t\tproviderId,\n\t\treleaseDate: bestDate,\n\t\tcontextLimit: bestCtx,\n\t\tsource\n\t};\n}\n/**\n* Resolve the latest-released catalog entry for a provider — the SINGLE table-first\n* read chokepoint (T11737).\n*\n* Resolution order (offline-first, no network):\n* 1. `models_catalog` DB table (SSoT) — newest `release_date` row for the provider.\n* 2. disk JSON cache (`llm-catalog/`) — newest entry when the table has no rows.\n* 3. shipped `curated-catalog.json` seed — last-resort floor (always present).\n*\n* Returns `null` only when NONE of the three surfaces carry a dated entry for the\n* provider — callers then degrade to their own static literal floor (the resolver\n* default keeps `IMPLICIT_FALLBACK_MODEL` for exactly this case — T11944).\n*\n* @param providerCatalogKey - The models.dev provider key (e.g. `anthropic`).\n* @param deps - Optional injected DB handle / cache dir (tests).\n* @returns The newest-released entry for the provider, or `null` when unresolved.\n*\n* @task T11737\n*/\nasync function resolveCatalogEntry(providerCatalogKey, deps) {\n\tconst providerId = providerCatalogKey.toLowerCase();\n\ttry {\n\t\tconst fromTable = await readLatestFromTable(await resolveDb(deps), providerId);\n\t\tif (fromTable) return fromTable;\n\t} catch (err) {\n\t\tlogger.warn({\n\t\t\terr: err instanceof Error ? err.message : String(err),\n\t\t\tproviderId\n\t\t}, \"catalog-resolver: models_catalog read failed; falling back to disk cache\");\n\t}\n\tconst latest = findLatestCacheFile(deps?.cacheDir ?? getCatalogDir());\n\tif (latest) {\n\t\tconst provider = readCacheFile(latest)?.[providerId];\n\t\tif (provider?.models) {\n\t\t\tconst fromCache = latestFromModelMap(provider.models, providerId, \"disk-cache\");\n\t\t\tif (fromCache) return fromCache;\n\t\t}\n\t}\n\tconst seedModels = loadShippedSeed()?.models?.[providerId];\n\tif (seedModels) {\n\t\tconst fromSeed = latestFromModelMap(seedModels, providerId, \"shipped-seed\");\n\t\tif (fromSeed) return fromSeed;\n\t}\n\treturn null;\n}\n//#endregion\nexport { resolveCatalogEntry as n, loadShippedSeed as t };\n"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"catalog-resolver2-JmKb91kY.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"chunk-DDP5xfzh.js","sources":["../../../.svelte-kit/adapter-node/chunks/chunk.js"],"sourcesContent":["import { createRequire } from \"node:module\";\n//#region \\0rolldown/runtime.js\nvar __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __esmMin = (fn, res) => () => (fn && (res = fn(fn = 0)), res);\nvar __commonJSMin = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);\nvar __exportAll = (all, no_symbols) => {\n\tlet target = {};\n\tfor (var name in all) __defProp(target, name, {\n\t\tget: all[name],\n\t\tenumerable: true\n\t});\n\tif (!no_symbols) __defProp(target, Symbol.toStringTag, { value: \"Module\" });\n\treturn target;\n};\nvar __copyProps = (to, from, except, desc) => {\n\tif (from && typeof from === \"object\" || typeof from === \"function\") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {\n\t\tkey = keys[i];\n\t\tif (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {\n\t\t\tget: ((k) => from[k]).bind(null, key),\n\t\t\tenumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable\n\t\t});\n\t}\n\treturn to;\n};\nvar __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", {\n\tvalue: mod,\n\tenumerable: true\n}) : target, mod));\nvar __toCommonJS = (mod) => __hasOwnProp.call(mod, \"module.exports\") ? mod[\"module.exports\"] : __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\nvar __require = /* @__PURE__ */ createRequire(import.meta.url);\n//#endregion\nexport { __toCommonJS as a, __require as i, __esmMin as n, __toESM as o, __exportAll as r, __commonJSMin as t };\n"],"names":[],"mappings":";;AACA;AACA,IAAI,QAAQ,GAAG,MAAM,CAAC,MAAM;AAC5B,IAAI,SAAS,GAAG,MAAM,CAAC,cAAc;AACrC,IAAI,gBAAgB,GAAG,MAAM,CAAC,wBAAwB;AACtD,IAAI,iBAAiB,GAAG,MAAM,CAAC,mBAAmB;AAClD,IAAI,YAAY,GAAG,MAAM,CAAC,cAAc;AACxC,IAAI,YAAY,GAAG,MAAM,CAAC,SAAS,CAAC,cAAc;AAC/C,IAAC,QAAQ,GAAG,CAAC,EAAE,EAAE,GAAG,KAAK,OAAO,EAAE,KAAK,GAAG,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG;AAC7D,IAAC,aAAa,GAAG,CAAC,EAAE,EAAE,GAAG,KAAK,OAAO,GAAG,IAAI,EAAE,CAAC,CAAC,GAAG,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,OAAO;AACjG,IAAC,WAAW,GAAG,CAAC,GAAG,EAAE,UAAU,KAAK;AACvC,CAAC,IAAI,MAAM,GAAG,EAAE;AAChB,CAAC,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE;AAC/C,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC;AAChB,EAAE,UAAU,EAAE;AACd,EAAE,CAAC;AACH,CAAkB,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AAC5E,CAAC,OAAO,MAAM;AACd;AACA,IAAI,WAAW,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,KAAK;AAC9C,CAAC,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE,KAAK,IAAI,IAAI,GAAG,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACvJ,EAAE,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC;AACf,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,GAAG,KAAK,MAAM,EAAE,SAAS,CAAC,EAAE,EAAE,GAAG,EAAE;AACxE,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC;AACxC,GAAG,UAAU,EAAE,EAAE,IAAI,GAAG,gBAAgB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC;AAC7D,GAAG,CAAC;AACJ,CAAC;AACD,CAAC,OAAO,EAAE;AACV,CAAC;AACE,IAAC,OAAO,GAAG,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,MAAM,MAAM,GAAG,GAAG,IAAI,IAAI,GAAG,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,WAAW,CAAC,UAAU,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE;AACtL,CAAC,KAAK,EAAE,GAAG;AACX,CAAC,UAAU,EAAE;AACb,CAAC,CAAC,GAAG,MAAM,EAAE,GAAG,CAAC;AACd,IAAC,YAAY,GAAG,CAAC,GAAG,KAAK,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC,GAAG,GAAG,CAAC,gBAAgB,CAAC,GAAG,WAAW,CAAC,SAAS,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG;AACzJ,IAAC,SAAS,mBAAmB,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"cleo-home-CCfe6kAQ.js","sources":["../../../.svelte-kit/adapter-node/chunks/cleo-home.js"],"sourcesContent":["import { o as getCleoHome$1 } from \"./paths.js\";\nimport \"./dist4.js\";\nimport { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\n//#region src/lib/server/cleo-home.ts\n/**\n* Resolves CLEO home and project data paths for the studio server.\n*\n* Resolution order:\n* 1. CLEO_HOME env var — explicit override\n* 2. OS-appropriate data path via `@cleocode/core` → `env-paths`\n* (XDG on Linux, `~/Library/Application Support/cleo` on macOS,\n* `%LOCALAPPDATA%\\cleo\\Data` on Windows)\n*\n* Project data (tasks.db, brain.db) is resolved from:\n* 1. CLEO_ROOT env var (project root)\n* 2. process.cwd()/.cleo/\n*\n* Previously this module hand-rolled platform detection which caused a\n* Windows path mismatch (see brain/src/cleo-home.ts for details).\n* Fixed in T1874 (Closes #102, supersedes #103) by delegating to\n* `@cleocode/core`'s canonical `getCleoHome` which uses env-paths.\n*\n* @task T1874\n*/\n/**\n* Returns the CLEO home directory (where global DBs live).\n*\n* Delegates to `@cleocode/core`'s `getCleoHome` which uses `env-paths`\n* for OS-appropriate, XDG-compliant path resolution.\n*\n* @returns Absolute path to the global CLEO data directory\n*\n* @example\n* ```typescript\n* const home = getCleoHome(); // e.g. \"/home/user/.local/share/cleo\"\n* ```\n*/\nfunction getCleoHome() {\n\treturn getCleoHome$1();\n}\n/**\n* Returns the project's `.cleo/` directory.\n* Resolved from `CLEO_ROOT` env var, falling back to `process.cwd()`.\n*/\nfunction getCleoProjectDir() {\n\treturn join(process.env[\"CLEO_ROOT\"] ?? process.cwd(), \".cleo\");\n}\n/** Returns the absolute path to the global nexus.db file. */\nfunction getNexusDbPath() {\n\treturn join(getCleoHome(), \"nexus.db\");\n}\n/** Returns the absolute path to the global signaldock.db file. */\nfunction getAgentRegistryDbPath() {\n\treturn join(getCleoHome(), \"signaldock.db\");\n}\n/** Returns true when the given DB file exists on disk. */\nfunction dbExists(dbPath) {\n\treturn existsSync(dbPath);\n}\n//#endregion\nexport { getNexusDbPath as a, getCleoProjectDir as i, getAgentRegistryDbPath as n, getCleoHome as r, dbExists as t };\n"],"names":[],"mappings":";;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,WAAW,GAAG;AACvB,CAAC,OAAO,aAAa,EAAE;AACvB;AACA;AACA;AACA;AACA;AACA,SAAS,iBAAiB,GAAG;AAC7B,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC;AAChE;AACA;AACA,SAAS,cAAc,GAAG;AAC1B,CAAC,OAAO,IAAI,CAAC,WAAW,EAAE,EAAE,UAAU,CAAC;AACvC;AACA;AACA,SAAS,sBAAsB,GAAG;AAClC,CAAC,OAAO,IAAI,CAAC,WAAW,EAAE,EAAE,eAAe,CAAC;AAC5C;AACA;AACA,SAAS,QAAQ,CAAC,MAAM,EAAE;AAC1B,CAAC,OAAO,UAAU,CAAC,MAAM,CAAC;AAC1B;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli-action-DQcaqcfn.js","sources":["../../../.svelte-kit/adapter-node/chunks/cli-action.js"],"sourcesContent":["import { t as runCleoCli } from \"./spawn-cli.js\";\nimport { json } from \"@sveltejs/kit\";\n//#region src/lib/server/cli-action.ts\n/**\n* Shared error-handling helper for CLI-invoking endpoints.\n*\n* Wraps spawn-cli calls and returns structured LAFS-compliant error envelopes\n* per ADR-039. All CLI subprocess errors return 4xx (client/input error), not 5xx.\n*\n* @task T722\n*/\n/**\n* Wraps a `cleo` CLI command and returns a structured LAFS error envelope on failure.\n*\n* On CLI failure (non-zero exit), returns **4xx** with `{ success: false, error, meta }`.\n* On CLI success, returns **2xx** with the CLI's JSON envelope (or `{ success: true }`).\n*\n* @param args - Arguments for `cleo` CLI (e.g., `['nexus', 'analyze', '/path', '--json']`).\n* @param options - Error code and metadata options.\n* @returns A SvelteKit JSON response (2xx on success, 4xx on failure).\n*\n* @example\n* ```ts\n* const result = await executeCliAction(['nexus', 'analyze', projectPath, '--json'], {\n* errorCode: 'E_INDEX_FAILED',\n* meta: { projectId: 'proj-123' },\n* });\n* return result;\n* ```\n*/\nasync function executeCliAction(args, options = {}) {\n\tconst { errorCode = \"CLI_FAILURE\", meta } = options;\n\tconst result = await runCleoCli(args);\n\tif (!result.ok) return json({\n\t\tsuccess: false,\n\t\terror: {\n\t\t\tcode: errorCode,\n\t\t\tmessage: result.stderr.trim() || result.stdout.trim() || \"CLI command failed\"\n\t\t},\n\t\tmeta: {\n\t\t\texitCode: result.exitCode,\n\t\t\t...meta\n\t\t}\n\t}, { status: 400 });\n\treturn json(result.envelope ?? {\n\t\tsuccess: true,\n\t\tdata: {},\n\t\tmeta\n\t});\n}\n//#endregion\nexport { executeCliAction as t };\n"],"names":[],"mappings":";;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,EAAE,EAAE;AACpD,CAAC,MAAM,EAAE,SAAS,GAAG,aAAa,EAAE,IAAI,EAAE,GAAG,OAAO;AACpD,CAAC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC;AACtC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,IAAI,CAAC;AAC7B,EAAE,OAAO,EAAE,KAAK;AAChB,EAAE,KAAK,EAAE;AACT,GAAG,IAAI,EAAE,SAAS;AAClB,GAAG,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI;AAC5D,GAAG;AACH,EAAE,IAAI,EAAE;AACR,GAAG,QAAQ,EAAE,MAAM,CAAC,QAAQ;AAC5B,GAAG,GAAG;AACN;AACA,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AACpB,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI;AAChC,EAAE,OAAO,EAAE,IAAI;AACf,EAAE,IAAI,EAAE,EAAE;AACV,EAAE;AACF,EAAE,CAAC;AACH;;;;"}