@cleocode/cleo 2026.9.5 → 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 +32 -3
  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/{CKXdW4mW.js → DVHIxkgs.js} +1 -1
  7. package/studio-dist/client/_app/immutable/chunks/{DrfFUIvQ.js → TX-23QW3.js} +1 -1
  8. package/studio-dist/client/_app/immutable/chunks/{C7UP-KLT.js → eK8hf4s7.js} +1 -1
  9. package/studio-dist/client/_app/immutable/entry/{app.BwkUGH1B.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.DcUJW-xi.js → 0.CZzEEyVh.js} +1 -1
  12. package/studio-dist/client/_app/immutable/nodes/{1.DyTt_cQs.js → 1.Bj3Opbua.js} +1 -1
  13. package/studio-dist/client/_app/immutable/nodes/{15.LRqqoueS.js → 15.BfXgiwMC.js} +1 -1
  14. package/studio-dist/client/_app/immutable/nodes/{16.-hGPNXOI.js → 16.mEwy9cqh.js} +1 -1
  15. package/studio-dist/client/_app/immutable/nodes/{17.ChMxgTIY.js → 17.DP2QtQGn.js} +1 -1
  16. package/studio-dist/client/_app/immutable/nodes/{18.B9zeITVb.js → 18.Bu0054sX.js} +1 -1
  17. package/studio-dist/client/_app/immutable/nodes/{20.BHg5roNq.js → 20.B1AIHdkP.js} +1 -1
  18. package/studio-dist/client/_app/immutable/nodes/{24.B_s9aY5m.js → 24.BUoUu37z.js} +1 -1
  19. package/studio-dist/client/_app/immutable/nodes/{25.DZXkDxw_.js → 25.ddZ1_EFk.js} +1 -1
  20. package/studio-dist/client/_app/immutable/nodes/{26.BBRbdwIG.js → 26.6OcmQbLV.js} +1 -1
  21. package/studio-dist/client/_app/immutable/nodes/{3.DMYcrZeG.js → 3.Dyir4xXj.js} +1 -1
  22. package/studio-dist/client/_app/version.json +1 -1
  23. package/studio-dist/server/chunks/{0-CM4iQVYP.js → 0-CvsKDxQ6.js} +3 -3
  24. package/studio-dist/server/chunks/{1-BQFD-dx6.js → 1-ck_x2Hf0.js} +3 -3
  25. package/studio-dist/server/chunks/{15-Cng10n82.js → 15-BvUNl3KL.js} +3 -3
  26. package/studio-dist/server/chunks/{16-u3KwU3N4.js → 16-De6EzPSa.js} +3 -3
  27. package/studio-dist/server/chunks/{17-BDtxQX9n.js → 17-CZNsiZhi.js} +3 -3
  28. package/studio-dist/server/chunks/{18-wwUoSO4F.js → 18-CbxxjZox.js} +3 -3
  29. package/studio-dist/server/chunks/{20-B-0CBvqY.js → 20-DVU22np7.js} +3 -3
  30. package/studio-dist/server/chunks/{24-BeVcofpU.js → 24-CVlymvLF.js} +3 -3
  31. package/studio-dist/server/chunks/{25-DIuzTPOu.js → 25-CAg6Xcmn.js} +3 -3
  32. package/studio-dist/server/chunks/{26-CY8x0KNI.js → 26-_nfVTvNi.js} +3 -3
  33. package/studio-dist/server/chunks/{3-p3RwD-FY.js → 3-B8KhfvHp.js} +3 -3
  34. package/studio-dist/server/chunks/{_layout.svelte-rswfOTDe.js → _layout.svelte-BEIGQcIv.js} +4 -4
  35. package/studio-dist/server/chunks/{_page.svelte-DaYxqOUS.js → _page.svelte-2cgtvHwW.js} +3 -3
  36. package/studio-dist/server/chunks/{_page.svelte-BT1YF8j2.js → _page.svelte-9OQphlnm.js} +4 -4
  37. package/studio-dist/server/chunks/{_page.svelte-CiIYIPG9.js → _page.svelte-BIlhmugm.js} +3 -3
  38. package/studio-dist/server/chunks/{_page.svelte-C9twD2l1.js → _page.svelte-BgwL2Gyu.js} +3 -3
  39. package/studio-dist/server/chunks/{_page.svelte-DKVwBmIp.js → _page.svelte-C_VSL8NW.js} +4 -4
  40. package/studio-dist/server/chunks/{_page.svelte-CHH1vmfg.js → _page.svelte-DOWw416I.js} +3 -3
  41. package/studio-dist/server/chunks/{_page.svelte-D8NhlkPD.js → _page.svelte-Wfx7ww_h.js} +3 -3
  42. package/studio-dist/server/chunks/{_page.svelte-DZEnHo1L.js → _page.svelte-l4Z_xjl9.js} +3 -3
  43. package/studio-dist/server/chunks/{_page.svelte-DmTXiXKT.js → _page.svelte-tYN7_LXI.js} +3 -3
  44. package/studio-dist/server/chunks/{client-ym-URLFs.js → client-CgX38JBu.js} +2 -2
  45. package/studio-dist/server/chunks/{error.svelte-Bt1EbBZe.js → error.svelte-CplNulnS.js} +3 -3
  46. package/studio-dist/server/chunks/{internal-D3i_4gCl.js → internal-D6eWgsHJ.js} +2 -2
  47. package/studio-dist/server/chunks/{stores-ByevKXL9.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/9yrFrmKZ.js +0 -1
  52. package/studio-dist/client/_app/immutable/entry/start.BcsID0Sf.js +0 -1
  53. package/studio-dist/server/chunks/0-CM4iQVYP.js.map +0 -1
  54. package/studio-dist/server/chunks/1-BQFD-dx6.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-Cng10n82.js.map +0 -1
  61. package/studio-dist/server/chunks/16-u3KwU3N4.js.map +0 -1
  62. package/studio-dist/server/chunks/17-BDtxQX9n.js.map +0 -1
  63. package/studio-dist/server/chunks/18-wwUoSO4F.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-B-0CBvqY.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-BeVcofpU.js.map +0 -1
  71. package/studio-dist/server/chunks/25-DIuzTPOu.js.map +0 -1
  72. package/studio-dist/server/chunks/26-CY8x0KNI.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-p3RwD-FY.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-rswfOTDe.js.map +0 -1
  94. package/studio-dist/server/chunks/_page.svelte-BT1YF8j2.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-Byz2djto.js.map +0 -1
  99. package/studio-dist/server/chunks/_page.svelte-C3aIui4o.js.map +0 -1
  100. package/studio-dist/server/chunks/_page.svelte-C9twD2l1.js.map +0 -1
  101. package/studio-dist/server/chunks/_page.svelte-CCoTp89s.js.map +0 -1
  102. package/studio-dist/server/chunks/_page.svelte-CHH1vmfg.js.map +0 -1
  103. package/studio-dist/server/chunks/_page.svelte-CHzXuw2Q.js.map +0 -1
  104. package/studio-dist/server/chunks/_page.svelte-CYDjW1R0.js.map +0 -1
  105. package/studio-dist/server/chunks/_page.svelte-CiIYIPG9.js.map +0 -1
  106. package/studio-dist/server/chunks/_page.svelte-Clbkk1gm.js.map +0 -1
  107. package/studio-dist/server/chunks/_page.svelte-CophUar3.js.map +0 -1
  108. package/studio-dist/server/chunks/_page.svelte-D8NhlkPD.js.map +0 -1
  109. package/studio-dist/server/chunks/_page.svelte-DKVwBmIp.js.map +0 -1
  110. package/studio-dist/server/chunks/_page.svelte-DUWbZjC7.js.map +0 -1
  111. package/studio-dist/server/chunks/_page.svelte-DYNorA0S.js.map +0 -1
  112. package/studio-dist/server/chunks/_page.svelte-DZEnHo1L.js.map +0 -1
  113. package/studio-dist/server/chunks/_page.svelte-DaYxqOUS.js.map +0 -1
  114. package/studio-dist/server/chunks/_page.svelte-DmTXiXKT.js.map +0 -1
  115. package/studio-dist/server/chunks/_page.svelte-EkXO_YfN.js.map +0 -1
  116. package/studio-dist/server/chunks/_page.svelte-M5D2QnMS.js.map +0 -1
  117. package/studio-dist/server/chunks/_page.svelte-UYiF7YBK.js.map +0 -1
  118. package/studio-dist/server/chunks/_page.svelte-al08ovKm.js.map +0 -1
  119. package/studio-dist/server/chunks/_page.svelte-bGhsrIjS.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-ym-URLFs.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-Bt1EbBZe.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-D3i_4gCl.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-ByevKXL9.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":"role-resolver2-nkhzS1oy.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"rollup-CiefjN_Y.js","sources":["../../../.svelte-kit/adapter-node/chunks/rollup.js"],"sourcesContent":["import { s as getNativeTasksDb } from \"./sqlite.js\";\n//#region ../core/dist/lifecycle/rollup.js\n/**\n* Task rollup — canonical view of a task's execution + pipeline + children state.\n*\n* `computeTaskRollup` is the SINGLE source of truth consumed by Studio, the\n* SDK, and the CLI for answering \"what is the state of this task?\" Prior to\n* T943 each surface independently stitched together `tasks.status`,\n* `tasks.pipelineStage`, child counts, and gate results, producing divergent\n* views (e.g. `/tasks` vs `/tasks/pipeline` disagreeing about epic progress).\n*\n* Design contract:\n* - Pure read — no writes, no side effects.\n* - `pipelineStage` reads `tasks.pipelineStage` directly until T947 migrates\n* it to the derived lifecycle view.\n* - Archived children are EXCLUDED from both `childrenTotal` and\n* `childrenDone` so epic-progress bars reflect in-flight scope.\n* - `gatesVerified` is populated only when `lifecycle_gate_results` has at\n* least one `result='pass'` row linked to a stage owned by this task's\n* pipeline. Missing rows → empty array.\n* - `blockedBy` parses `tasks.blocked_by` robustly: JSON array, falling back\n* to comma-separated tokens, falling back to the raw string, and\n* collapsing to `[]` on empty/null.\n* - Batch API (`computeTaskRollups`) preserves input order and returns the\n* entries for missing task IDs as `null`-free by filtering them out. The\n* caller can re-align using the returned `id`s.\n*\n* @task T943\n*/\n/**\n* Parse the `tasks.blocked_by` text column into a canonical string array.\n*\n* Strategy (first match wins):\n* 1. Non-empty JSON array of strings → use as-is after trimming.\n* 2. Comma-separated list → split + trim + drop empties.\n* 3. Single non-empty token → wrap in a one-element array.\n* 4. Null / empty / whitespace-only → empty array.\n*\n* Never throws; silently falls back to the next strategy on parse error.\n*/\nfunction parseBlockedBy(raw) {\n\tif (raw === null || raw === void 0) return [];\n\tconst trimmed = raw.trim();\n\tif (trimmed.length === 0) return [];\n\tif (trimmed.startsWith(\"[\")) try {\n\t\tconst parsed = JSON.parse(trimmed);\n\t\tif (Array.isArray(parsed)) return parsed.filter((v) => typeof v === \"string\").map((v) => v.trim()).filter((v) => v.length > 0);\n\t} catch {}\n\tif (trimmed.includes(\",\")) return trimmed.split(\",\").map((v) => v.trim()).filter((v) => v.length > 0);\n\treturn [trimmed];\n}\n/**\n* Compute the `lastActivityAt` timestamp.\n*\n* Preference order: `completedAt` vs `updatedAt`, whichever is lexicographically\n* greater (ISO-8601 strings sort correctly when both use the same zone).\n* Returns `null` when neither is set.\n*/\nfunction computeLastActivityAt(updatedAt, completedAt) {\n\tconst u = updatedAt ?? null;\n\tconst c = completedAt ?? null;\n\tif (u === null && c === null) return null;\n\tif (u === null) return c;\n\tif (c === null) return u;\n\treturn u >= c ? u : c;\n}\n/**\n* Normalise a raw `tasks.status` enum value into a {@link RollupExecStatus}.\n*\n* Every value the DB CHECK constraint allows is already a member of the\n* rollup union, so this is a pure widening cast — but we keep it centralised\n* so the T947 migration (`proposed` from external intake) has one place to\n* hook into.\n*/\nfunction toRollupExecStatus(status) {\n\treturn status;\n}\n/**\n* Aggregate non-archived children per parent in a single query.\n*\n* Returns a map keyed by parent_id with `{ total, done }` counts. Parents with\n* zero non-archived children are omitted so the caller defaults to 0.\n*/\nfunction fetchChildAggregates(taskIds) {\n\tconst empty = /* @__PURE__ */ new Map();\n\tif (taskIds.length === 0) return empty;\n\tconst native = getNativeTasksDb();\n\tif (!native) return empty;\n\tconst sqlText = `\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 (${taskIds.map(() => \"?\").join(\", \")})\n AND status != 'archived'\n GROUP BY parent_id\n `;\n\tconst rows = native.prepare(sqlText).all(...taskIds);\n\tconst map = /* @__PURE__ */ new Map();\n\tfor (const row of rows) {\n\t\tif (row.parent_id === null) continue;\n\t\tmap.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\treturn map;\n}\n/**\n* Fetch gate names with `result='pass'` for every task in a single query.\n*\n* Joins `lifecycle_gate_results` → `lifecycle_stages` → `lifecycle_pipelines`\n* and filters by `pipelines.task_id`. Returns `[]` per-task when the task has\n* no pipeline or when every gate result is non-pass.\n*/\nfunction fetchPassedGateNames(taskIds) {\n\tconst empty = /* @__PURE__ */ new Map();\n\tif (taskIds.length === 0) return empty;\n\tconst native = getNativeTasksDb();\n\tif (!native) return empty;\n\tconst sqlText = `\n SELECT DISTINCT\n p.task_id AS task_id,\n g.gate_name AS gate_name\n FROM tasks_lifecycle_gate_results g\n INNER JOIN tasks_lifecycle_stages s ON s.id = g.stage_id\n INNER JOIN tasks_lifecycle_pipelines p ON p.id = s.pipeline_id\n WHERE p.task_id IN (${taskIds.map(() => \"?\").join(\", \")})\n AND g.result = 'pass'\n ORDER BY g.gate_name ASC\n `;\n\tlet rows;\n\ttry {\n\t\trows = native.prepare(sqlText).all(...taskIds);\n\t} catch {\n\t\treturn empty;\n\t}\n\tconst map = /* @__PURE__ */ new Map();\n\tfor (const row of rows) {\n\t\tif (row.task_id === null || row.gate_name === null) continue;\n\t\tconst list = map.get(row.task_id);\n\t\tif (list === void 0) map.set(row.task_id, [row.gate_name]);\n\t\telse if (!list.includes(row.gate_name)) list.push(row.gate_name);\n\t}\n\treturn map;\n}\n/**\n* Assemble a {@link TaskRollup} from its raw inputs.\n*/\nfunction buildRollup(task, childAggregate, gatesVerified) {\n\treturn {\n\t\tid: task.id,\n\t\texecStatus: toRollupExecStatus(task.status),\n\t\tpipelineStage: task.pipelineStage ?? null,\n\t\tgatesVerified,\n\t\tchildrenTotal: childAggregate?.total ?? 0,\n\t\tchildrenDone: childAggregate?.done ?? 0,\n\t\tblockedBy: parseBlockedBy(task.blockedBy),\n\t\tlastActivityAt: computeLastActivityAt(task.updatedAt, task.completedAt)\n\t};\n}\n/**\n* Compute rollups for many tasks in a single batch.\n*\n* Issues exactly one task load, one child-aggregate query, and one gate query\n* regardless of batch size. Results preserve the input order of `taskIds`.\n* Missing IDs are omitted from the return array — the caller can detect them\n* by comparing `taskIds.length` vs `result.length` or by mapping on `id`.\n*\n* @param taskIds - Ordered list of task identifiers to roll up.\n* @param dataAccessor - Storage accessor used for the batched task load.\n* @returns Rollups in the same order as `taskIds`, minus any missing ids.\n*/\nasync function computeTaskRollups(taskIds, dataAccessor) {\n\tif (taskIds.length === 0) return [];\n\tconst loaded = await dataAccessor.loadTasks(taskIds);\n\tconst byId = /* @__PURE__ */ new Map();\n\tfor (const task of loaded) byId.set(task.id, task);\n\tconst presentIds = taskIds.filter((id) => byId.has(id));\n\tconst childMap = fetchChildAggregates(presentIds);\n\tconst gateMap = fetchPassedGateNames(presentIds);\n\tconst rollups = [];\n\tfor (const id of taskIds) {\n\t\tconst task = byId.get(id);\n\t\tif (task === void 0) continue;\n\t\trollups.push(buildRollup(task, childMap.get(id), gateMap.get(id) ?? []));\n\t}\n\treturn rollups;\n}\n//#endregion\nexport { computeTaskRollups as t };\n"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"safety-data-accessor-CniDmGJO.js","sources":["../../../.svelte-kit/adapter-node/chunks/safety-data-accessor2.js"],"sourcesContent":["import { t as getLogger } from \"./logger.js\";\nimport { i as safeSingleTaskWrite, n as safeSaveArchive, r as safeSaveSessions, t as safeAppendLog } from \"./data-safety-central.js\";\n//#region ../core/dist/store/safety-data-accessor.js\n/**\n* SafetyDataAccessor - Factory-level safety wrapper for ALL data accessors.\n*\n* This wrapper ensures that ALL data operations are safety-enabled by default.\n* No code path can bypass safety - this is the architectural guarantee.\n*\n* Key features:\n* - Sequence validation before writes\n* - Write verification (read-back validation)\n* - Automatic git checkpointing\n* - Emergency disable via CLEO_DISABLE_SAFETY env var\n*\n* @task T4745\n* @epic T4732\n*/\nvar log = getLogger(\"data-safety\");\n/** Check if safety is disabled via environment variable. */\nfunction isSafetyDisabled() {\n\treturn process.env.CLEO_DISABLE_SAFETY === \"true\";\n}\n/**\n* Safety-enabled DataAccessor wrapper.\n*\n* Wraps any DataAccessor implementation and automatically applies\n* safety checks to all write operations. Read operations pass through.\n*\n* This class CANNOT be bypassed - it's the only way to get a DataAccessor\n* from the factory (unless emergency disable is active).\n*/\nvar SafetyDataAccessor = class {\n\t/** The underlying accessor being wrapped. */\n\tinner;\n\t/** Working directory for operations. */\n\tcwd;\n\t/** Safety configuration. */\n\tconfig;\n\t/**\n\t* Create a SafetyDataAccessor wrapper.\n\t*\n\t* @param inner - The DataAccessor to wrap\n\t* @param cwd - Working directory for path resolution\n\t* @param config - Optional safety configuration overrides\n\t*/\n\tconstructor(inner, cwd, config) {\n\t\tthis.inner = inner;\n\t\tthis.cwd = cwd;\n\t\tthis.config = {\n\t\t\tenabled: true,\n\t\t\tverbose: false,\n\t\t\t...config\n\t\t};\n\t\tif (this.config.verbose) log.debug({ engine: inner.engine }, \"SafetyDataAccessor initialized\");\n\t}\n\t/** The storage engine backing this accessor. */\n\tget engine() {\n\t\treturn this.inner.engine;\n\t}\n\t/**\n\t* Log safety operation if verbose mode is enabled.\n\t*/\n\tlogVerbose(message) {\n\t\tif (this.config.verbose) log.debug(message);\n\t}\n\t/**\n\t* Get safety options for data-safety-central operations.\n\t*/\n\tgetSafetyOptions() {\n\t\treturn {\n\t\t\tverify: this.config.enabled,\n\t\t\tcheckpoint: this.config.enabled,\n\t\t\tvalidateSequence: this.config.enabled,\n\t\t\tstrict: this.config.enabled\n\t\t};\n\t}\n\tasync loadArchive() {\n\t\tthis.logVerbose(\"Loading ArchiveFile (pass-through)\");\n\t\treturn this.inner.loadArchive();\n\t}\n\tasync loadSessions() {\n\t\tthis.logVerbose(\"Loading sessions (pass-through)\");\n\t\treturn this.inner.loadSessions();\n\t}\n\tasync saveSessions(data) {\n\t\tthis.logVerbose(`Saving sessions with ${data.length} sessions`);\n\t\tawait safeSaveSessions(this.inner, data, this.cwd, this.getSafetyOptions());\n\t}\n\tasync saveArchive(data) {\n\t\tthis.logVerbose(`Saving ArchiveFile with ${data.archivedTasks?.length ?? 0} tasks`);\n\t\tawait safeSaveArchive(this.inner, data, this.cwd, this.getSafetyOptions());\n\t}\n\tasync appendLog(entry) {\n\t\tthis.logVerbose(\"Appending log entry\");\n\t\tawait safeAppendLog(this.inner, entry, this.cwd, this.getSafetyOptions());\n\t}\n\tasync upsertSingleTask(task) {\n\t\tthis.logVerbose(`Upserting single task ${task.id}`);\n\t\tawait safeSingleTaskWrite(this.inner, task.id, () => this.inner.upsertSingleTask(task), this.cwd, this.getSafetyOptions());\n\t}\n\tasync archiveSingleTask(taskId, fields) {\n\t\tthis.logVerbose(`Archiving single task ${taskId}`);\n\t\tawait safeSingleTaskWrite(this.inner, taskId, () => this.inner.archiveSingleTask(taskId, fields), this.cwd, this.getSafetyOptions());\n\t}\n\tasync removeSingleTask(taskId) {\n\t\tthis.logVerbose(`Removing single task ${taskId}`);\n\t\tawait safeSingleTaskWrite(this.inner, taskId, () => this.inner.removeSingleTask(taskId), this.cwd, this.getSafetyOptions());\n\t}\n\tasync loadSingleTask(taskId) {\n\t\treturn this.inner.loadSingleTask(taskId);\n\t}\n\tasync addRelation(taskId, relatedTo, relationType, reason) {\n\t\tawait this.inner.addRelation(taskId, relatedTo, relationType, reason);\n\t}\n\tasync removeRelation(taskId, relatedTo, relationType) {\n\t\tawait this.inner.removeRelation(taskId, relatedTo, relationType);\n\t}\n\tasync getAcRows(taskId) {\n\t\treturn this.inner.getAcRows(taskId);\n\t}\n\tasync getAcBindings(acIds) {\n\t\treturn this.inner.getAcBindings(acIds);\n\t}\n\tasync getMetaValue(key) {\n\t\treturn this.inner.getMetaValue(key);\n\t}\n\tasync setMetaValue(key, value) {\n\t\treturn this.inner.setMetaValue(key, value);\n\t}\n\tasync getSchemaVersion() {\n\t\treturn this.inner.getSchemaVersion();\n\t}\n\tasync queryTasks(filters) {\n\t\treturn this.inner.queryTasks(filters);\n\t}\n\tasync queryAuditLog(query) {\n\t\treturn this.inner.queryAuditLog(query);\n\t}\n\tasync countTasks(filters) {\n\t\treturn this.inner.countTasks(filters);\n\t}\n\tasync getChildren(parentId) {\n\t\treturn this.inner.getChildren(parentId);\n\t}\n\tasync countChildren(parentId) {\n\t\treturn this.inner.countChildren(parentId);\n\t}\n\tasync countActiveChildren(parentId) {\n\t\treturn this.inner.countActiveChildren(parentId);\n\t}\n\tasync getAncestorChain(taskId) {\n\t\treturn this.inner.getAncestorChain(taskId);\n\t}\n\tasync getSubtree(rootId) {\n\t\treturn this.inner.getSubtree(rootId);\n\t}\n\tasync getDependents(taskId) {\n\t\treturn this.inner.getDependents(taskId);\n\t}\n\tasync getDependencyChain(taskId) {\n\t\treturn this.inner.getDependencyChain(taskId);\n\t}\n\tasync taskExists(taskId) {\n\t\treturn this.inner.taskExists(taskId);\n\t}\n\tasync loadTasks(taskIds) {\n\t\treturn this.inner.loadTasks(taskIds);\n\t}\n\tasync updateTaskFields(taskId, fields) {\n\t\tthis.logVerbose(`Updating fields on task ${taskId}`);\n\t\tawait safeSingleTaskWrite(this.inner, taskId, () => this.inner.updateTaskFields(taskId, fields), this.cwd, this.getSafetyOptions());\n\t}\n\tasync getNextPosition(parentId) {\n\t\treturn this.inner.getNextPosition(parentId);\n\t}\n\tasync shiftPositions(parentId, fromPosition, delta) {\n\t\treturn this.inner.shiftPositions(parentId, fromPosition, delta);\n\t}\n\tasync transaction(fn) {\n\t\tthis.logVerbose(\"Starting transaction\");\n\t\treturn this.inner.transaction(fn);\n\t}\n\tasync getActiveSession() {\n\t\treturn this.inner.getActiveSession();\n\t}\n\tasync resolveCurrentSession() {\n\t\treturn this.inner.resolveCurrentSession();\n\t}\n\tasync upsertSingleSession(session) {\n\t\treturn this.inner.upsertSingleSession(session);\n\t}\n\tasync removeSingleSession(sessionId) {\n\t\treturn this.inner.removeSingleSession(sessionId);\n\t}\n\tasync listAgentInstances(filters) {\n\t\treturn this.inner.listAgentInstances(filters);\n\t}\n\tasync getAgentInstance(agentId) {\n\t\treturn this.inner.getAgentInstance(agentId);\n\t}\n\tasync claimTask(taskId, agentId) {\n\t\treturn this.inner.claimTask(taskId, agentId);\n\t}\n\tasync unclaimTask(taskId) {\n\t\treturn this.inner.unclaimTask(taskId);\n\t}\n\tasync close() {\n\t\tthis.logVerbose(\"Closing accessor\");\n\t\tawait this.inner.close();\n\t}\n};\n/**\n* Wrap a DataAccessor with safety.\n*\n* This is the internal factory helper that wraps any accessor\n* with the SafetyDataAccessor wrapper.\n*\n* @param accessor - The accessor to wrap\n* @param cwd - Working directory\n* @returns SafetyDataAccessor wrapping the input\n*/\nfunction wrapWithSafety(accessor, cwd) {\n\tif (isSafetyDisabled()) {\n\t\tlog.warn(\"Safety disabled - emergency mode (CLEO_DISABLE_SAFETY=true). Data integrity checks bypassed.\");\n\t\treturn accessor;\n\t}\n\treturn new SafetyDataAccessor(accessor, cwd);\n}\n//#endregion\nexport { wrapWithSafety as n, SafetyDataAccessor as t };\n"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"service-connections-accessor-yBCdcgU-.js","sources":["../../../.svelte-kit/adapter-node/chunks/service-connections-accessor.js"],"sourcesContent":["import { o as openDualScopeDb } from \"./dual-scope-db.js\";\nimport \"./global-salt.js\";\nimport \"node:path\";\nimport \"node:child_process\";\nimport \"node:crypto\";\nimport { index, integer, primaryKey, sqliteTable, text, unique } from \"drizzle-orm/sqlite-core\";\nimport \"node:fs/promises\";\nimport { eq, sql } from \"drizzle-orm\";\n/**\n* `service_connections` — one user-connected service credential per `(provider, label)`.\n*\n* `credentials_enc` is the `encryptGlobal()` ciphertext of the\n* `{access_token, refresh_token}` JSON blob (NEVER plaintext). `scopes` is the\n* JSON-serialized granted scope list; `metadata` is non-secret JSON (e.g. the\n* connected `username`/`email`) safe to display. The `(provider, label)` pair is\n* unique. The OAuth build/exchange/refresh that POPULATES `credentials_enc` is\n* T11939 — this table is the clean seam it writes into.\n*\n* @task T11937\n*/\nvar serviceConnections = sqliteTable(\"service_connections\", {\n\tid: integer(\"id\").primaryKey(),\n\tprovider: text(\"provider\").notNull(),\n\tlabel: text(\"label\").notNull(),\n\tstatus: text(\"status\", { enum: [\n\t\t\"active\",\n\t\t\"expired\",\n\t\t\"revoked\"\n\t] }).notNull().default(\"active\"),\n\tcredentialsEnc: text(\"credentials_enc\"),\n\tscopes: text(\"scopes\").notNull().default(\"[]\"),\n\texpiresAt: text(\"expires_at\"),\n\tmetadata: text(\"metadata\").notNull().default(\"{}\"),\n\tconnectedAt: text(\"connected_at\").notNull().default(sql`(datetime('now'))`),\n\tupdatedAt: text(\"updated_at\").notNull().default(sql`(datetime('now'))`)\n}, (table) => [unique(\"ux_service_connections_provider_label\").on(table.provider, table.label), index(\"idx_service_connections_provider_status\").on(table.provider, table.status)]);\nsqliteTable(\"service_configs\", {\n\tid: integer(\"id\").primaryKey(),\n\tprovider: text(\"provider\").notNull(),\n\tenabled: integer(\"enabled\", { mode: \"boolean\" }).notNull().default(false),\n\tclientSecretEnc: text(\"client_secret_enc\"),\n\tsettings: text(\"settings\").notNull().default(\"{}\"),\n\tcreatedAt: text(\"created_at\").notNull().default(sql`(datetime('now'))`),\n\tupdatedAt: text(\"updated_at\").notNull().default(sql`(datetime('now'))`)\n}, (table) => [unique(\"ux_service_configs_provider\").on(table.provider)]);\n/**\n* `agent_service_grants` — per-agent access to a service connection + policy.\n*\n* A grant authorizes one `agent_id` to use one `service_connection_id`, carrying\n* the `session_policy` JSON (block / rate-limit / manual-approval) the trust gate\n* (T11937 AC4) evaluates BEFORE any `decryptGlobal`. ABSENCE of a grant denies;\n* a `block` policy denies; only a passing policy lets the store decrypt. The\n* composite `(agent_id, service_connection_id)` is the primary key.\n*\n* `service_connection_id` references `service_connections(id)` — both tables live\n* in the SAME global `cleo.db` file (Pattern A), so the FK is in-file and\n* enforceable. The FK is declared natively (intra-domain, single global file —\n* mirrors the agent-registry FK convention).\n*\n* @task T11937\n*/\nvar agentServiceGrants = sqliteTable(\"agent_service_grants\", {\n\tagentId: text(\"agent_id\").notNull(),\n\tserviceConnectionId: integer(\"service_connection_id\").notNull().references(() => serviceConnections.id),\n\tsessionPolicy: text(\"session_policy\").notNull().default(\"{\\\"mode\\\":\\\"allow\\\"}\"),\n\tcreatedAt: text(\"created_at\").notNull().default(sql`(datetime('now'))`),\n\tupdatedAt: text(\"updated_at\").notNull().default(sql`(datetime('now'))`)\n}, (table) => [primaryKey({ columns: [table.agentId, table.serviceConnectionId] }), index(\"idx_agent_service_grants_agent\").on(table.agentId)]);\n//#endregion\n//#region ../core/dist/store/service-trust-gate.js\n/**\n* Service-vault trust gate — **policy-before-decrypt** per-agent access control.\n*\n* EP-UNIVERSAL-SERVICE-VAULT (epic T11765 · saga SG-VAULT-CORE T10409 · M2 W1a ·\n* task T11937 · AC4). Ports onecli `connect.rs` selective-mode: an agent may use a\n* service connection ONLY when (a) a row exists in `agent_service_grants` linking\n* the agent to the connection, AND (b) the grant's `session_policy` evaluates to\n* an allow. This module evaluates that decision from already-loaded grant data —\n* it performs ZERO crypto. The store\n* ({@link import('./service-connections-accessor.js')}) calls `decryptGlobal`\n* ONLY after this gate returns `allowed: true`, so a denied/blocked agent NEVER\n* triggers a decrypt (the policy-before-decrypt invariant, proven by unit test).\n*\n* ## Why the gate is decrypt-free\n*\n* The gate takes the grant rows as INPUT and returns a pure decision. It cannot\n* decrypt even if it wanted to — it imports no crypto. The decryption chokepoint\n* lives one layer up (the accessor), guarded by this decision. That separation is\n* exactly what makes \"a denied agent never decrypts\" structurally true and\n* spy-assertable: the spy is placed on `decryptGlobal`, and a deny path returns\n* before the accessor reaches the decrypt call.\n*\n* ## Policy shape ({@link SessionPolicy})\n*\n* Mirrors onecli's `PolicyAction` (block / rate-limit / manual-approval) collapsed\n* to a per-grant JSON:\n*\n* - `mode: 'allow' | 'block'` — `block` is a hard deny (no decrypt).\n* - `rateLimit?` — advisory rate cap; the gate surfaces it but does not itself\n* count requests (the caller enforces). Presence alone does not deny.\n* - `manualApproval?: true` — the connection requires an out-of-band human\n* approval that has not been granted for this session → deny (no decrypt)\n* until the caller supplies `approved: true` in the evaluation context.\n*\n* A bare grant (`{\"mode\":\"allow\"}`, the column default) allows.\n*\n* @module store/service-trust-gate\n* @task T11937\n* @epic T11765\n* @saga T10409\n* @see ./service-connections-accessor.ts — the accessor that decrypts ONLY on allow\n* @see ../../../onecli — `apps/gateway/src/connect.rs` selective-mode (the ported model)\n*/\n/**\n* Parse a raw `session_policy` JSON string into a {@link SessionPolicy}, failing\n* CLOSED (to `block`) on any malformed input.\n*\n* SECURITY: a corrupt/unparseable policy must NEVER silently widen access — it\n* resolves to `{ mode: 'block' }` so the gate denies and no decrypt occurs.\n*\n* @param raw - The `agent_service_grants.session_policy` column value.\n* @returns A well-formed {@link SessionPolicy}; `block` on parse failure.\n* @task T11937\n*/\nfunction parseSessionPolicy(raw) {\n\tlet parsed;\n\ttry {\n\t\tparsed = JSON.parse(raw);\n\t} catch {\n\t\treturn { mode: \"block\" };\n\t}\n\tif (typeof parsed !== \"object\" || parsed === null) return { mode: \"block\" };\n\tconst obj = parsed;\n\tconst policy = { mode: obj[\"mode\"] === \"block\" ? \"block\" : obj[\"mode\"] === \"allow\" ? \"allow\" : \"block\" };\n\tif (obj[\"manualApproval\"] === true) policy.manualApproval = true;\n\tconst rl = obj[\"rateLimit\"];\n\tif (typeof rl === \"object\" && rl !== null) {\n\t\tconst rlObj = rl;\n\t\tconst maxRequests = rlObj[\"maxRequests\"];\n\t\tconst window = rlObj[\"window\"];\n\t\tif (typeof maxRequests === \"number\" && maxRequests > 0 && (window === \"minute\" || window === \"hour\" || window === \"day\")) policy.rateLimit = {\n\t\t\tmaxRequests,\n\t\t\twindow\n\t\t};\n\t}\n\treturn policy;\n}\n//#endregion\n//#region ../core/dist/store/service-connections-accessor.js\n/**\n* Service-vault accessor — store-level CRUD + policy-before-decrypt egress.\n*\n* EP-UNIVERSAL-SERVICE-VAULT (epic T11765 · saga SG-VAULT-CORE T10409 · M2 W1a ·\n* task T11937 · AC3). The store layer for the universal SERVICE-credential vault\n* (`service_connections` / `service_configs` / `agent_service_grants`).\n*\n* ## DB Open Guard (Gate 3 — strict)\n*\n* EVERY open goes through {@link openDualScopeDb}`('global')` (or its path-aware\n* sibling {@link openDualScopeDbAtPath} for an injected test DB) — there is ZERO\n* raw `new DatabaseSync(`. The typed Drizzle handle drives all CRUD; the accessor\n* never constructs a native handle itself.\n*\n* ## Crypto reuse (DRY — no new crypto · T11710)\n*\n* `credentials_enc` holds the {@link encryptGlobal} ciphertext of the\n* `{access_token, refresh_token}` JSON, keyed `id = service:${provider}:${label}`.\n* The accessor calls {@link encryptGlobal}/{@link decryptGlobal} from\n* `crypto/credentials.ts` — it adds no crypto of its own. The crypto functions are\n* injectable ({@link ServiceVaultDeps}) so a test can spy on `decryptGlobal` and\n* PROVE it is never invoked on a denied access (policy-before-decrypt, AC4).\n*\n* ## Policy-before-decrypt egress (AC4)\n*\n* {@link resolveSealedConnection} evaluates the {@link evaluateServiceAccess}\n* trust gate FIRST (a pure decision from the agent's grant rows). It calls\n* `decryptGlobal` ONLY when the gate returns `allowed: true`. A denied agent\n* returns `null` BEFORE the decrypt call — the decrypt closure never runs. On\n* allow, the plaintext is not surfaced inline: it is wrapped in a\n* {@link makeSealedCredential} handle whose `resolveToken` thunk performs the\n* decrypt at the wire (the same egress the LLM credential pool uses).\n*\n* ## OAuth seam (T11939)\n*\n* The OAuth build/exchange/refresh dance is the FOLLOW-UP (T11939). This accessor\n* leaves the clean seam: {@link connectService} accepts an already-obtained token\n* blob and writes its `encryptGlobal` ciphertext into `credentials_enc`; the OAuth\n* flow simply calls `connectService` (or `updateConnectionCredentials`) with the\n* tokens it negotiates. No OAuth logic lives here.\n*\n* @module store/service-connections-accessor\n* @task T11937\n* @epic T11765\n* @saga T10409\n* @see ./schema/cleo-global/services.ts — the three tables\n* @see ./service-trust-gate.ts — the policy-before-decrypt decision\n* @see ../crypto/credentials.ts — `encryptGlobal` / `decryptGlobal` (reused, not re-implemented)\n* @see ../llm/sealed-credential.ts — `makeSealedCredential` (the shared egress handle)\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/** Map a raw connection row to a non-secret {@link ServiceConnectionView}. */\nfunction toView(row) {\n\tlet scopes = [];\n\tlet metadata = {};\n\ttry {\n\t\tconst parsed = JSON.parse(row.scopes);\n\t\tif (Array.isArray(parsed)) scopes = parsed.filter((s) => typeof s === \"string\");\n\t} catch {}\n\ttry {\n\t\tconst parsed = JSON.parse(row.metadata);\n\t\tif (typeof parsed === \"object\" && parsed !== null) metadata = parsed;\n\t} catch {}\n\treturn {\n\t\tid: row.id,\n\t\tprovider: row.provider,\n\t\tlabel: row.label,\n\t\tstatus: row.status,\n\t\tscopes,\n\t\texpiresAt: row.expiresAt,\n\t\tmetadata,\n\t\tconnectedAt: row.connectedAt,\n\t\tupdatedAt: row.updatedAt,\n\t\thasCredentials: row.credentialsEnc !== null && row.credentialsEnc !== \"\"\n\t};\n}\n/**\n* LIST connections as non-secret views (NEVER decrypts), optionally by provider.\n*\n* @param provider - When set, restrict to one provider; otherwise all.\n* @task T11937\n*/\nasync function listConnections(provider, deps) {\n\tconst db = await resolveDb(deps);\n\treturn (provider === void 0 ? await db.select().from(serviceConnections) : await db.select().from(serviceConnections).where(eq(serviceConnections.provider, provider))).map(toView);\n}\n/**\n* LIST every agent grant as a NON-SECRET {@link AgentGrantView}, joined to its\n* connection's `provider`/`label` for display. NEVER decrypts and never carries\n* a token — the dashboard read path (T11943).\n*\n* The join is performed in-memory (one `agent_service_grants` scan + one\n* `service_connections` scan, both already redacted) so the accessor stays a\n* pure read with no second round-trip per grant. A grant whose connection was\n* deleted out-of-band resolves `provider`/`label` to `null` (defensive — the\n* cascade should prevent this, but the view must not throw).\n*\n* @param agentId - When set, restrict to one agent's grants; otherwise all.\n* @task T11943\n*/\nasync function listAllGrants(agentId, deps) {\n\tconst db = await resolveDb(deps);\n\tconst grantRows = agentId === void 0 ? await db.select().from(agentServiceGrants) : await db.select().from(agentServiceGrants).where(eq(agentServiceGrants.agentId, agentId));\n\tconst connRows = await db.select().from(serviceConnections);\n\tconst identityById = /* @__PURE__ */ new Map();\n\tfor (const c of connRows) identityById.set(c.id, {\n\t\tprovider: c.provider,\n\t\tlabel: c.label\n\t});\n\treturn grantRows.map((g) => {\n\t\tconst identity = identityById.get(g.serviceConnectionId) ?? null;\n\t\tconst policy = parseSessionPolicy(g.sessionPolicy);\n\t\treturn {\n\t\t\tagentId: g.agentId,\n\t\t\tserviceConnectionId: g.serviceConnectionId,\n\t\t\tprovider: identity?.provider ?? null,\n\t\t\tlabel: identity?.label ?? null,\n\t\t\tmode: policy.mode,\n\t\t\tmanualApproval: policy.manualApproval ?? false,\n\t\t\tcreatedAt: g.createdAt,\n\t\t\tupdatedAt: g.updatedAt\n\t\t};\n\t});\n}\n//#endregion\nexport { listConnections as n, parseSessionPolicy as r, listAllGrants as t };\n"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"session-factory-vbengc42.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"session-grade-BF4ZZtN_.js","sources":["../../../.svelte-kit/adapter-node/chunks/session-grade2.js"],"sourcesContent":["import { a as getCleoDirAbsolute } from \"./paths.js\";\nimport { t as queryAudit } from \"./audit3.js\";\nimport { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { appendFile, mkdir, readFile } from \"node:fs/promises\";\n//#region ../core/dist/sessions/session-grade.js\n/**\n* Session grading - rubric-based behavioral analysis of agent sessions.\n*\n* Reads audit log entries for a session and applies a 5-dimension rubric\n* to score agent behavior:\n* - Session discipline (20pts)\n* - Discovery efficiency (20pts)\n* - Task hygiene (20pts)\n* - Error protocol (20pts)\n* - Progressive disclosure use (20pts)\n*\n* @task T4916\n*/\n/**\n* Grade a session by sessionId using the 5-dimension behavioral rubric.\n*/\nasync function gradeSession(sessionId, cwd) {\n\tconst sessionEntries = await queryAudit({ sessionId });\n\tconst result = {\n\t\tsessionId,\n\t\ttotalScore: 0,\n\t\tmaxScore: 100,\n\t\tdimensions: {\n\t\t\tsessionDiscipline: {\n\t\t\t\tscore: 0,\n\t\t\t\tmax: 20,\n\t\t\t\tevidence: []\n\t\t\t},\n\t\t\tdiscoveryEfficiency: {\n\t\t\t\tscore: 0,\n\t\t\t\tmax: 20,\n\t\t\t\tevidence: []\n\t\t\t},\n\t\t\ttaskHygiene: {\n\t\t\t\tscore: 0,\n\t\t\t\tmax: 20,\n\t\t\t\tevidence: []\n\t\t\t},\n\t\t\terrorProtocol: {\n\t\t\t\tscore: 0,\n\t\t\t\tmax: 20,\n\t\t\t\tevidence: []\n\t\t\t},\n\t\t\tdisclosureUse: {\n\t\t\t\tscore: 0,\n\t\t\t\tmax: 20,\n\t\t\t\tevidence: []\n\t\t\t}\n\t\t},\n\t\tflags: [],\n\t\ttimestamp: (/* @__PURE__ */ new Date()).toISOString(),\n\t\tentryCount: sessionEntries.length\n\t};\n\tif (sessionEntries.length === 0) {\n\t\tresult.flags.push(\"No audit entries found for session (use --grade flag when starting session)\");\n\t\tawait appendGradeResult(result, cwd);\n\t\treturn result;\n\t}\n\tconst sessionListCalls = sessionEntries.filter((e) => e.domain === \"session\" && e.operation === \"list\");\n\tconst sessionEndCalls = sessionEntries.filter((e) => e.domain === \"session\" && e.operation === \"end\");\n\tconst taskOps = sessionEntries.filter((e) => e.domain === \"tasks\");\n\tlet disciplineScore = 0;\n\tif (sessionListCalls.length > 0) if (new Date(sessionListCalls[0].timestamp).getTime() <= (taskOps.length > 0 ? new Date(taskOps[0].timestamp).getTime() : Infinity)) {\n\t\tdisciplineScore += 10;\n\t\tresult.dimensions.sessionDiscipline.evidence.push(\"session.list called before first task op\");\n\t} else result.flags.push(\"session.list called after task ops (should check sessions first)\");\n\telse result.flags.push(\"session.list never called (check existing sessions before starting)\");\n\tif (sessionEndCalls.length > 0) {\n\t\tdisciplineScore += 10;\n\t\tresult.dimensions.sessionDiscipline.evidence.push(\"session.end called\");\n\t} else result.flags.push(\"session.end never called (always end sessions when done)\");\n\tresult.dimensions.sessionDiscipline.score = disciplineScore;\n\tconst findCalls = sessionEntries.filter((e) => e.domain === \"tasks\" && e.operation === \"find\");\n\tconst listCalls = sessionEntries.filter((e) => e.domain === \"tasks\" && e.operation === \"list\");\n\tconst showCalls = sessionEntries.filter((e) => e.domain === \"tasks\" && e.operation === \"show\");\n\tlet discoveryScore = 0;\n\tconst totalDiscoveryCalls = findCalls.length + listCalls.length;\n\tif (totalDiscoveryCalls > 0) {\n\t\tconst findRatio = findCalls.length / totalDiscoveryCalls;\n\t\tif (findRatio >= .8) {\n\t\t\tdiscoveryScore += 15;\n\t\t\tresult.dimensions.discoveryEfficiency.evidence.push(`find:list ratio ${(findRatio * 100).toFixed(0)}% >= 80%`);\n\t\t} else {\n\t\t\tresult.flags.push(`tasks.list used ${listCalls.length}x (prefer tasks.find for discovery)`);\n\t\t\tdiscoveryScore += Math.round(15 * findRatio);\n\t\t}\n\t} else {\n\t\tdiscoveryScore += 10;\n\t\tresult.dimensions.discoveryEfficiency.evidence.push(\"No discovery calls needed\");\n\t}\n\tif (showCalls.length > 0) {\n\t\tdiscoveryScore = Math.min(20, discoveryScore + 5);\n\t\tresult.dimensions.discoveryEfficiency.evidence.push(`tasks.show used ${showCalls.length}x for detail`);\n\t}\n\tresult.dimensions.discoveryEfficiency.score = Math.min(20, discoveryScore);\n\tconst addCalls = sessionEntries.filter((e) => e.domain === \"tasks\" && e.operation === \"add\" && e.result.success);\n\tconst existsCalls = sessionEntries.filter((e) => e.domain === \"tasks\" && e.operation === \"exists\");\n\tconst delegate_task_count = sessionEntries.filter((e) => e.operation === \"delegate_task\" || e.domain === \"orchestrate\" && e.operation === \"spawn\" && e.result.success).length;\n\tconst completedInSession = sessionEntries.filter((e) => e.domain === \"tasks\" && e.operation === \"complete\" && e.result.success).length;\n\tconst isLead = sessionEntries.map((e) => e.metadata?.[\"role\"]).find((r) => typeof r === \"string\") === \"lead\";\n\tlet hygieneScore = 20;\n\tfor (const addCall of addCalls) {\n\t\tconst desc = addCall.params?.description;\n\t\tif (!desc || desc.trim().length === 0) {\n\t\t\thygieneScore -= 5;\n\t\t\tresult.flags.push(`tasks.add without description (taskId: ${addCall.metadata?.taskId ?? \"unknown\"})`);\n\t\t}\n\t}\n\tconst subtaskAdds = addCalls.filter((e) => e.params?.parent);\n\tif (subtaskAdds.length > 0 && existsCalls.length > 0) result.dimensions.taskHygiene.evidence.push(\"Parent existence verified before subtask creation\");\n\telse if (subtaskAdds.length > 0) {\n\t\tresult.flags.push(\"Subtasks created without tasks.exists parent check\");\n\t\thygieneScore -= 3;\n\t}\n\tif (addCalls.length > 0 && hygieneScore >= 20) result.dimensions.taskHygiene.evidence.push(`All ${addCalls.length} tasks.add calls had descriptions`);\n\tresult.dimensions.taskHygiene.evidence.push(`delegate_task_count: ${delegate_task_count}`);\n\tif (isLead && delegate_task_count === 0 && completedInSession > 0) {\n\t\thygieneScore -= 5;\n\t\tresult.flags.push(`lead-self-implementation-bypass: session role=lead completed ${completedInSession} task(s) without any delegate_task call — Leads MUST fan out work to Workers (T9217 / ADR-070)`);\n\t\tresult.dimensions.taskHygiene.evidence.push(\"WARNING: lead-self-implementation-bypass detected — no delegate_task calls\");\n\t} else if (isLead && delegate_task_count > 0) result.dimensions.taskHygiene.evidence.push(`Lead delegation confirmed: ${delegate_task_count} delegate_task call(s)`);\n\tresult.dimensions.taskHygiene.score = Math.max(0, hygieneScore);\n\tconst notFoundErrors = sessionEntries.filter((e) => !e.result.success && e.result.exitCode === 4);\n\tlet errorScore = 20;\n\tfor (const errEntry of notFoundErrors) {\n\t\tconst errIdx = sessionEntries.indexOf(errEntry);\n\t\tif (!sessionEntries.slice(errIdx + 1, errIdx + 5).some((e) => e.domain === \"tasks\" && (e.operation === \"find\" || e.operation === \"exists\"))) {\n\t\t\terrorScore -= 5;\n\t\t\tresult.flags.push(`E_NOT_FOUND (${errEntry.domain}.${errEntry.operation}) not followed by recovery lookup`);\n\t\t} else result.dimensions.errorProtocol.evidence.push(\"E_NOT_FOUND followed by recovery lookup\");\n\t}\n\tconst duplicateCreates = detectDuplicateCreates(sessionEntries);\n\tif (duplicateCreates > 0) {\n\t\terrorScore -= 5;\n\t\tresult.flags.push(`${duplicateCreates} potentially duplicate task create(s) detected`);\n\t}\n\tif (notFoundErrors.length === 0 && duplicateCreates === 0) result.dimensions.errorProtocol.evidence.push(\"No error protocol violations\");\n\tresult.dimensions.errorProtocol.score = Math.max(0, errorScore);\n\tconst helpCalls = sessionEntries.filter((e) => e.domain === \"admin\" && e.operation === \"help\" || e.domain === \"tools\" && (e.operation === \"skill.show\" || e.operation === \"skill.list\") || e.domain === \"skills\" && (e.operation === \"list\" || e.operation === \"show\"));\n\tconst queryCalls = sessionEntries.filter((e) => e.metadata?.gateway === \"query\");\n\tlet disclosureScore = 0;\n\tif (helpCalls.length > 0) {\n\t\tdisclosureScore += 10;\n\t\tresult.dimensions.disclosureUse.evidence.push(`Progressive disclosure used (${helpCalls.length}x)`);\n\t} else result.flags.push(\"No admin.help or skill lookup calls (load ct-cleo for guidance)\");\n\tif (queryCalls.length > 0) {\n\t\tdisclosureScore += 10;\n\t\tresult.dimensions.disclosureUse.evidence.push(`query gateway used ${queryCalls.length}x`);\n\t} else result.flags.push(\"No query gateway calls (use query operations for programmatic access)\");\n\tresult.dimensions.disclosureUse.score = disclosureScore;\n\tresult.totalScore = Object.values(result.dimensions).reduce((sum, d) => sum + d.score, 0);\n\tawait feedGradeToBrain(result, cwd);\n\tawait appendGradeResult(result, cwd);\n\treturn result;\n}\n/** Detect potentially duplicate task creates (same title within session). */\nfunction detectDuplicateCreates(entries) {\n\tconst titles = entries.filter((e) => e.domain === \"tasks\" && e.operation === \"add\" && e.result.success).map((e) => e.params?.title?.toLowerCase().trim()).filter(Boolean);\n\tconst unique = new Set(titles);\n\treturn titles.length - unique.size;\n}\n/**\n* Feed grade insights back into brain.db as learnings.\n* Best-effort — errors are silently caught.\n*/\nasync function feedGradeToBrain(result, projectRoot) {\n\tif (!projectRoot) return;\n\ttry {\n\t\tconst { storeLearning } = await import(\"./learnings.js\");\n\t\tconst weakDimensions = [];\n\t\tfor (const [name, dim] of Object.entries(result.dimensions)) if (dim.score < dim.max * .5) weakDimensions.push(name);\n\t\tif (weakDimensions.length > 0) await storeLearning(projectRoot, {\n\t\t\tinsight: `Session ${result.sessionId} scored ${result.totalScore}/${result.maxScore}. Weak dimensions: ${weakDimensions.join(\", \")}`,\n\t\t\tsource: `grade:${result.sessionId}`,\n\t\t\tconfidence: .8,\n\t\t\tactionable: true,\n\t\t\tapplication: `Improve in next session: ${weakDimensions.join(\", \")}`\n\t\t});\n\t\tif (result.flags.length > 0) await storeLearning(projectRoot, {\n\t\t\tinsight: `Session ${result.sessionId} protocol violations: ${result.flags.join(\"; \")}`,\n\t\t\tsource: `grade:${result.sessionId}`,\n\t\t\tconfidence: .7,\n\t\t\tactionable: true,\n\t\t\tapplication: \"Address protocol violations in next session\"\n\t\t});\n\t\tif (result.flags.some((f) => f.includes(\"lead-self-implementation-bypass\"))) await storeLearning(projectRoot, {\n\t\t\tinsight: `lead-self-implementation-bypass detected in session ${result.sessionId}: Lead completed tasks without delegate_task. Violates ADR-070 hierarchical orchestration contract.`,\n\t\t\tsource: `grade:${result.sessionId}`,\n\t\t\tconfidence: .9,\n\t\t\tactionable: true,\n\t\t\tapplication: \"Next Lead session MUST use delegate_task to fan out work to Workers — no self-implementation.\"\n\t\t});\n\t} catch {}\n}\n/** Append a grade result to .cleo/metrics/GRADES.jsonl */\nasync function appendGradeResult(result, cwd) {\n\ttry {\n\t\tconst metricsDir = join(getCleoDirAbsolute(cwd), \"metrics\");\n\t\tawait mkdir(metricsDir, { recursive: true });\n\t\tawait appendFile(join(metricsDir, \"GRADES.jsonl\"), JSON.stringify({\n\t\t\t...result,\n\t\t\tevaluator: \"auto\"\n\t\t}) + \"\\n\", \"utf8\");\n\t} catch {}\n}\n/** Read past grade results from .cleo/metrics/GRADES.jsonl */\nasync function readGrades(sessionId, cwd) {\n\ttry {\n\t\tconst gradesPath = join(getCleoDirAbsolute(cwd), \"metrics\", \"GRADES.jsonl\");\n\t\tif (!existsSync(gradesPath)) return [];\n\t\tconst results = (await readFile(gradesPath, \"utf8\")).split(\"\\n\").filter((l) => l.trim()).map((l) => JSON.parse(l));\n\t\treturn sessionId ? results.filter((r) => r.sessionId === sessionId) : results;\n\t} catch {\n\t\treturn [];\n\t}\n}\n//#endregion\nexport { readGrades as n, gradeSession as t };\n"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"session-journal-Bvey70Ur.js","sources":["../../../.svelte-kit/adapter-node/chunks/session-journal2.js"],"sourcesContent":["import { t as assertProjectInitialized } from \"./paths.js\";\nimport { join } from \"node:path\";\nimport { appendFile, mkdir, readFile, readdir, unlink, writeFile } from \"node:fs/promises\";\n//#region ../core/dist/sessions/session-journal.js\n/**\n* Session Journal — append-only JSONL writer for `.cleo/session-journals/`.\n*\n* Provides the core read/write primitives for the session journal substrate\n* (T1263 PSYCHE E6). Journals are the 7th CLEO system — they log the other\n* six (TASKS, LOOM, BRAIN, NEXUS, CANT, CONDUIT) at session boundaries.\n*\n* ## File layout\n*\n* ```\n* .cleo/session-journals/\n* 2026-04-24.jsonl ← today — all sessions append here\n* 2026-04-23.jsonl ← yesterday\n* ...\n* ```\n*\n* Each file is append-only JSONL (one JSON object per line terminated by `\\n`).\n* Multiple simultaneous sessions append to the same daily file safely via\n* `appendFile` which uses O_APPEND — atomic for writes under ~4 KB on ext4/APFS.\n* No shared file handle; each call opens/appends/closes independently.\n*\n* ## Retention\n*\n* | Tier | Age | Disposition |\n* |---------|-----------|-------------------------------------------|\n* | Hot | 0–7 days | All entries retained verbatim |\n* | Warm | 8–30 days | Retain `session_end` entries only |\n* | Archive | 31–90 days| Monthly rollup; individual files deleted |\n* | Purge | >90 days | Monthly rollups deleted |\n*\n* @module sessions/session-journal\n* @task T1263\n* @epic T1075\n* @see packages/contracts/src/session-journal.ts — schema + types\n* @see .cleo/adrs/ADR-013 §9 — runtime-data-safety (no git tracking)\n*/\n/** Subdirectory under `.cleo/` that stores session journal JSONL files. */\nvar SESSION_JOURNALS_DIR = \"session-journals\";\n/** Number of hot-tier days (files younger than this are fully retained). */\nvar HOT_TIER_DAYS = 7;\n/** Number of warm-tier days (files between hot and warm retain session_end only). */\nvar WARM_TIER_DAYS = 30;\n/** Number of archive-tier days (files older than this are purged). */\nvar ARCHIVE_TIER_DAYS = 90;\n/**\n* Resolve the absolute path to a session journal JSONL file for a given date.\n*\n* Daily rotation: one file per calendar day. Multiple sessions append to the\n* same file; reads scan recent files in reverse-date order.\n*\n* @param projectRoot - Absolute path to the project root.\n* @param date - Target date. Defaults to today (UTC).\n* @returns Absolute path to `<projectRoot>/.cleo/session-journals/YYYY-MM-DD.jsonl`.\n*\n* @example\n* ```typescript\n* const path = getSessionJournalPath('/my/project');\n* // → '/my/project/.cleo/session-journals/2026-04-24.jsonl'\n* ```\n*/\nfunction getSessionJournalPath(projectRoot, date) {\n\treturn join(projectRoot, \".cleo\", SESSION_JOURNALS_DIR, `${(date ?? /* @__PURE__ */ new Date()).toISOString().slice(0, 10)}.jsonl`);\n}\n/**\n* Resolve the absolute path to the session-journals directory.\n*\n* @param projectRoot - Absolute path to the project root.\n* @returns Absolute path to `<projectRoot>/.cleo/session-journals/`.\n*/\nfunction getSessionJournalsDir(projectRoot) {\n\treturn join(projectRoot, \".cleo\", SESSION_JOURNALS_DIR);\n}\n/**\n* Append a single session journal entry to the daily JSONL file.\n*\n* - Creates the `.cleo/session-journals/` directory if it does not exist\n* (idempotent via `mkdir({recursive:true})`).\n* - Appends a single JSON line terminated by `\\n` using O_APPEND atomicity.\n* - Safe for concurrent writes from multiple processes (worktree sessions).\n*\n* @param projectRoot - Absolute path to the project root.\n* @param entry - Journal entry to append. Must pass `sessionJournalEntrySchema`.\n* @param date - Target date file. Defaults to today (UTC).\n*\n* @throws If the filesystem write fails (disk full, permissions, etc.).\n* Callers MUST wrap in try/catch and handle gracefully — journal\n* writes must never block session lifecycle operations.\n*\n* @example\n* ```typescript\n* await appendSessionJournalEntry('/my/project', {\n* schemaVersion: '1.0',\n* timestamp: new Date().toISOString(),\n* sessionId: 'ses_20260424_abc',\n* eventType: 'session_start',\n* agentIdentifier: 'claude-code',\n* scope: 'global',\n* });\n* ```\n*/\nasync function appendSessionJournalEntry(projectRoot, entry, date) {\n\tconst filePath = getSessionJournalPath(projectRoot, date);\n\tassertProjectInitialized(projectRoot);\n\tawait mkdir(join(projectRoot, \".cleo\", SESSION_JOURNALS_DIR), { recursive: true });\n\tawait appendFile(filePath, `${JSON.stringify(entry)}\\n`, { encoding: \"utf-8\" });\n}\n/**\n* Read the most recent session journal entries across the N most recent daily files.\n*\n* Scans up to `maxFiles` dated `.jsonl` files in reverse-date order, collecting\n* up to `maxEntries` total entries (most recent entries first). Used by\n* `initProject` to surface recent session context for the meta-agent.\n*\n* Unknown schema versions are silently skipped (forward-compatible).\n*\n* @param projectRoot - Absolute path to the project root.\n* @param maxEntries - Maximum total entries to return. Default: 20.\n* @param maxFiles - Maximum number of daily files to scan. Default: 5.\n* @returns Array of journal entries in reverse-chronological order (newest first).\n* Returns empty array if the journals directory does not exist or is empty.\n*\n* @example\n* ```typescript\n* const entries = await readRecentJournals('/my/project', 10);\n* ```\n*/\nasync function readRecentJournals(projectRoot, maxEntries = 20, maxFiles = 5) {\n\tconst journalsDir = getSessionJournalsDir(projectRoot);\n\tlet files;\n\ttry {\n\t\tfiles = (await readdir(journalsDir)).filter((f) => f.endsWith(\".jsonl\") && /^\\d{4}-\\d{2}-\\d{2}\\.jsonl$/.test(f)).sort().reverse().slice(0, maxFiles);\n\t} catch {\n\t\treturn [];\n\t}\n\tconst result = [];\n\tfor (const file of files) {\n\t\tif (result.length >= maxEntries) break;\n\t\ttry {\n\t\t\tconst lines = (await readFile(join(journalsDir, file), \"utf-8\")).split(\"\\n\").filter((line) => line.trim().length > 0).reverse();\n\t\t\tfor (const line of lines) {\n\t\t\t\tif (result.length >= maxEntries) break;\n\t\t\t\ttry {\n\t\t\t\t\tconst entry = JSON.parse(line);\n\t\t\t\t\tif (entry && typeof entry === \"object\" && \"schemaVersion\" in entry) result.push(entry);\n\t\t\t\t} catch {}\n\t\t\t}\n\t\t} catch {}\n\t}\n\treturn result;\n}\n/**\n* Apply the session journal retention policy to `.cleo/session-journals/`.\n*\n* Tiers (relative to current UTC date):\n*\n* | Tier | Age | Action |\n* |---------|-----------|-----------------------------------------------------|\n* | Hot | 0–7 days | No-op — all entries retained verbatim |\n* | Warm | 8–30 days | Rewrite file keeping only `session_end` entries |\n* | Archive | 31–90 days| Delete the individual file (rollup future work) |\n* | Purge | >90 days | Delete the file (already archived or stale) |\n*\n* Errors for individual files are caught and the rotation continues.\n* If the journals directory does not exist, returns immediately (no-op).\n*\n* @param projectRoot - Absolute path to the project root.\n* @param opts - Optional tier cutoff overrides (for testing).\n*\n* @example\n* ```typescript\n* await rotateSessionJournals('/my/project');\n* ```\n*/\nasync function rotateSessionJournals(projectRoot, opts = {}) {\n\tconst hotDays = opts.hotDays ?? HOT_TIER_DAYS;\n\tconst warmDays = opts.warmDays ?? WARM_TIER_DAYS;\n\tconst archiveDays = opts.archiveDays ?? ARCHIVE_TIER_DAYS;\n\tconst journalsDir = getSessionJournalsDir(projectRoot);\n\tlet files;\n\ttry {\n\t\tfiles = (await readdir(journalsDir)).filter((f) => f.endsWith(\".jsonl\") && /^\\d{4}-\\d{2}-\\d{2}\\.jsonl$/.test(f));\n\t} catch {\n\t\treturn;\n\t}\n\tconst now = Date.now();\n\tconst MS_PER_DAY = 1440 * 60 * 1e3;\n\tfor (const file of files) {\n\t\tconst filePath = join(journalsDir, file);\n\t\tconst dateStr = file.replace(\".jsonl\", \"\");\n\t\tconst fileDate = /* @__PURE__ */ new Date(`${dateStr}T00:00:00.000Z`);\n\t\tif (Number.isNaN(fileDate.getTime())) continue;\n\t\tconst ageDays = (now - fileDate.getTime()) / MS_PER_DAY;\n\t\ttry {\n\t\t\tif (ageDays <= hotDays) {} else if (ageDays <= warmDays) {\n\t\t\t\tconst lines = (await readFile(filePath, \"utf-8\")).split(\"\\n\").filter((l) => l.trim().length > 0);\n\t\t\t\tconst filtered = lines.filter((line) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\treturn JSON.parse(line)?.eventType === \"session_end\";\n\t\t\t\t\t} catch {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif (filtered.length !== lines.length) await writeFile(filePath, filtered.map((l) => `${l}\\n`).join(\"\"), { encoding: \"utf-8\" });\n\t\t\t} else if (ageDays <= archiveDays) await unlink(filePath);\n\t\t\telse await unlink(filePath);\n\t\t} catch {}\n\t}\n}\n//#endregion\nexport { rotateSessionJournals as i, getSessionJournalPath as n, readRecentJournals as r, appendSessionJournalEntry as t };\n"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"session-narrative-BirZINSU.js","sources":["../../../.svelte-kit/adapter-node/chunks/session-narrative2.js"],"sourcesContent":["import { o as getBrainNativeDb } from \"./memory-sqlite.js\";\nimport { r as isEmbeddingAvailable, t as embedText } from \"./brain-embedding2.js\";\n//#region ../core/dist/memory/session-narrative.js\n/**\n* Rolling Session Narrative — Per-session conversation summary store.\n*\n* Maintains a compact, rolling prose summary of what has happened in a CLEO\n* session. Each dialectic turn can contribute a `sessionNarrativeDelta` that\n* is appended and compressed into the rolling `narrative` field.\n*\n* ## Storage\n*\n* Data is persisted to the `session_narrative` table in brain.db. The table\n* is created on first write via `CREATE TABLE IF NOT EXISTS` so the module\n* works safely before the formal ADR-054 Drizzle migration is applied.\n* The Drizzle migration (`20260423000002_t1089-add-session-narrative-table`)\n* generated by `pnpm db:new -- --db brain --task T1089 --name add-session-narrative-table`\n* is the canonical source for the schema; the inline DDL here is a verbatim copy\n* kept for zero-dep startup resilience.\n*\n* ## Schema\n*\n* ```\n* session_narrative (\n* session_id TEXT PRIMARY KEY,\n* narrative TEXT NOT NULL, -- Rolling summary, max 2000 chars\n* turn_count INTEGER NOT NULL DEFAULT 0,\n* last_updated_at INTEGER NOT NULL, -- Unix epoch milliseconds\n* pivot_count INTEGER NOT NULL DEFAULT 0\n* )\n* ```\n*\n* ## Pivot Detection\n*\n* `detectPivot(delta, existingNarrative)` uses cosine similarity over text\n* embeddings when the sqlite-vec extension and an embedding provider are both\n* available. A pivot is signalled when the cosine similarity between the two\n* texts falls below `PIVOT_COSINE_THRESHOLD`.\n*\n* When embeddings are unavailable the function falls back to a keyword-overlap\n* heuristic: a topic shift is detected when the new delta contains fewer than\n* `PIVOT_KEYWORD_OVERLAP_THRESHOLD` of its tokens in the existing narrative.\n*\n* ## PSYCHE Reference\n*\n* Inspired by `upstream psyche-lineage · deriver/deriver.py` (session state\n* derivation) — PSYCHE maintains a rolling representation of what a session\n* \"is about\" that informs future retrieval and sigil generation.\n*\n* @task T1531\n* @epic T1056\n*/\n/** Maximum character length for the rolling narrative field. */\nvar MAX_NARRATIVE_CHARS = 2e3;\n/**\n* Cosine similarity threshold below which a turn is classified as a pivot\n* when embedding-based detection is available (sqlite-vec + embedding provider\n* both loaded).\n*\n* A score of 0.0 means orthogonal vectors (completely unrelated topics);\n* 1.0 means identical direction (same topic). Empirically, topic shifts\n* tend to produce similarity < 0.3.\n*\n* **Tradeoffs vs keyword fallback**:\n* - Higher accuracy on paraphrase and synonym pivots the keyword heuristic\n* misses (e.g. \"switch to Rust\" vs \"rewrite in a systems language\").\n* - Requires the embedding model to be loaded (~50–80 MB), which adds latency\n* on first use and is unavailable in cold environments.\n* - The fallback keyword heuristic is zero-cost and always available but\n* cannot detect pivots expressed through semantically related but\n* lexically different phrasing.\n*\n* @task T1531\n*/\nvar PIVOT_COSINE_THRESHOLD = .3;\n/**\n* Keyword-overlap threshold used by the fallback heuristic when embeddings\n* are unavailable. When fewer than this fraction of delta keywords appear in\n* the existing narrative, the topic is considered to have shifted.\n*\n* Kept alongside `PIVOT_COSINE_THRESHOLD` so callers and tests can reference\n* both strategies explicitly.\n*/\nvar PIVOT_KEYWORD_OVERLAP_THRESHOLD = .5;\n/** Whether the `session_narrative` table has been verified / created. */\nvar _tableEnsured = false;\n/**\n* Ensure the `session_narrative` table exists in brain.db.\n*\n* Uses `CREATE TABLE IF NOT EXISTS` so this is idempotent and safe to call\n* multiple times. After the formal Drizzle migration lands the DDL is\n* redundant but harmless.\n*/\nfunction ensureTable() {\n\tconst db = getBrainNativeDb();\n\tif (!db) throw new Error(\"session-narrative: brain.db native handle not available. Call getBrainDb() at startup to initialise the database.\");\n\tif (!_tableEnsured) {\n\t\tdb.exec(`\n CREATE TABLE IF NOT EXISTS session_narrative (\n session_id TEXT PRIMARY KEY,\n narrative TEXT NOT NULL DEFAULT '',\n turn_count INTEGER NOT NULL DEFAULT 0,\n last_updated_at INTEGER NOT NULL DEFAULT 0,\n pivot_count INTEGER NOT NULL DEFAULT 0\n );\n `);\n\t\t_tableEnsured = true;\n\t}\n\treturn db;\n}\n/**\n* Compute the cosine similarity between two Float32 vectors.\n*\n* Returns a value in [-1, 1] where 1 means identical direction and 0 means\n* orthogonal. Returns 0 when either vector has zero magnitude to avoid\n* division by zero.\n*\n* @param a - First embedding vector.\n* @param b - Second embedding vector (must be same length as `a`).\n* @returns Cosine similarity in [-1, 1].\n*\n* @task T1531\n*/\nfunction cosineSimilarity(a, b) {\n\tlet dot = 0;\n\tlet magA = 0;\n\tlet magB = 0;\n\tfor (let i = 0; i < a.length; i++) {\n\t\tdot += (a[i] ?? 0) * (b[i] ?? 0);\n\t\tmagA += (a[i] ?? 0) ** 2;\n\t\tmagB += (b[i] ?? 0) ** 2;\n\t}\n\tconst denom = Math.sqrt(magA) * Math.sqrt(magB);\n\treturn denom === 0 ? 0 : dot / denom;\n}\n/**\n* Retrieve the current narrative record for a session.\n*\n* Returns `null` when the session has no narrative entry yet.\n*\n* @param sessionId - The session identifier to look up.\n* @returns The narrative record, or `null` if not found.\n*\n* @example\n* ```ts\n* const record = await getSessionNarrative('ses_20260422131135_5149eb');\n* console.log(record?.narrative ?? '(no narrative yet)');\n* ```\n*\n* @task T1089\n*/\nasync function getSessionNarrative(sessionId) {\n\tconst row = ensureTable().prepare(\"SELECT session_id, narrative, turn_count, last_updated_at, pivot_count FROM session_narrative WHERE session_id = ?\").get(sessionId);\n\tif (!row) return null;\n\treturn {\n\t\tsessionId: row.session_id,\n\t\tnarrative: row.narrative,\n\t\tturnCount: row.turn_count,\n\t\tlastUpdatedAt: row.last_updated_at,\n\t\tpivotCount: row.pivot_count\n\t};\n}\n/**\n* Append a narrative delta to a session's rolling summary.\n*\n* The delta is prepended with a space separator if the existing narrative is\n* non-empty. When the combined result exceeds `MAX_NARRATIVE_CHARS` the oldest\n* content is trimmed from the left (keeping the most recent context).\n*\n* Side effect: increments `turn_count` by one and updates `pivot_count` when\n* `detectPivot(delta)` returns `true` against the existing narrative.\n*\n* @param sessionId - The session to update.\n* @param delta - New narrative content from the current turn.\n* @param _projectRoot - Project root (reserved for future use; unused now).\n*\n* @example\n* ```ts\n* await appendNarrativeDelta(\n* 'ses_20260422131135_5149eb',\n* 'User requested zero-dep implementation; agent proposed using existing buildRetrievalBundle.',\n* '/mnt/projects/cleocode',\n* );\n* ```\n*\n* @task T1089\n*/\nasync function appendNarrativeDelta(sessionId, delta, _projectRoot) {\n\tif (!delta.trim()) return;\n\tconst db = ensureTable();\n\tconst now = Date.now();\n\tconst existing = await getSessionNarrative(sessionId);\n\tlet newNarrative;\n\tlet newPivotCount;\n\tif (!existing) {\n\t\tnewNarrative = delta.slice(0, MAX_NARRATIVE_CHARS);\n\t\tnewPivotCount = 0;\n\t} else {\n\t\tconst isPivot = await detectPivot(delta, existing.narrative);\n\t\tnewPivotCount = existing.pivotCount + (isPivot ? 1 : 0);\n\t\tconst combined = existing.narrative ? `${existing.narrative} ${delta}` : delta;\n\t\tnewNarrative = combined.length <= MAX_NARRATIVE_CHARS ? combined : combined.slice(combined.length - MAX_NARRATIVE_CHARS);\n\t}\n\tconst newTurnCount = (existing?.turnCount ?? 0) + 1;\n\tdb.prepare(`\n INSERT INTO session_narrative (session_id, narrative, turn_count, last_updated_at, pivot_count)\n VALUES (?, ?, ?, ?, ?)\n ON CONFLICT(session_id) DO UPDATE SET\n narrative = excluded.narrative,\n turn_count = excluded.turn_count,\n last_updated_at = excluded.last_updated_at,\n pivot_count = excluded.pivot_count\n `).run(sessionId, newNarrative, newTurnCount, now, newPivotCount);\n}\n/**\n* Detect whether a new narrative delta represents a significant topic pivot.\n*\n* ## Strategy selection\n*\n* **Embedding path** (preferred): when an embedding provider is available\n* (via `isEmbeddingAvailable()`), both `delta` and `existingNarrative` are\n* embedded into float vectors and compared with cosine similarity. A score\n* below `PIVOT_COSINE_THRESHOLD` (default 0.3) indicates a pivot. This path\n* catches paraphrase pivots and synonym-based topic changes that the keyword\n* heuristic misses, at the cost of requiring the embedding model to be loaded.\n*\n* **Keyword fallback** (no embedding provider / vec extension): if\n* `embedText()` returns `null` for either input, the function falls back to a\n* keyword-overlap heuristic. A pivot is declared when fewer than\n* `PIVOT_KEYWORD_OVERLAP_THRESHOLD` (0.5) of the delta's content tokens appear\n* in the existing narrative.\n*\n* Short deltas (< 5 tokens in the keyword path) never trigger a pivot to avoid\n* false positives from acknowledgement messages. The embedding path has no\n* minimum-length guard because the model handles short inputs gracefully.\n*\n* @param delta - Incoming narrative text from the new turn.\n* @param existingNarrative - Current rolling narrative content.\n* @returns Promise resolving to `true` when a topic pivot is detected.\n*\n* @example\n* ```ts\n* await detectPivot(\"switching to Rust implementation\", \"TypeScript type system discussion\"); // true\n* await detectPivot(\"continuing the TypeScript work\", \"TypeScript type system discussion\"); // false\n* ```\n*\n* @task T1531\n*/\nasync function detectPivot(delta, existingNarrative) {\n\tif (!existingNarrative.trim()) return false;\n\tif (isEmbeddingAvailable()) {\n\t\tconst [deltaVec, narrativeVec] = await Promise.all([embedText(delta), embedText(existingNarrative)]);\n\t\tif (deltaVec !== null && narrativeVec !== null) return cosineSimilarity(deltaVec, narrativeVec) < PIVOT_COSINE_THRESHOLD;\n\t}\n\tconst tokenise = (text) => {\n\t\tconst tokens = text.toLowerCase().split(/\\W+/).filter((t) => t.length >= 4);\n\t\treturn new Set(tokens);\n\t};\n\tconst deltaTokens = tokenise(delta);\n\tif (deltaTokens.size < 5) return false;\n\tconst narrativeTokens = tokenise(existingNarrative);\n\tlet overlap = 0;\n\tfor (const token of deltaTokens) if (narrativeTokens.has(token)) overlap++;\n\treturn overlap / deltaTokens.size < PIVOT_KEYWORD_OVERLAP_THRESHOLD;\n}\n//#endregion\nexport { getSessionNarrative as a, detectPivot as i, appendNarrativeDelta as n, cosineSimilarity as r, PIVOT_COSINE_THRESHOLD 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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,mBAAmB,GAAG,GAAG;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,sBAAsB,GAAG,EAAE;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,+BAA+B,GAAG,EAAE;AACxC;AACA,IAAI,aAAa,GAAG,KAAK;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,WAAW,GAAG;AACvB,CAAC,MAAM,EAAE,GAAG,gBAAgB,EAAE;AAC9B,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,IAAI,KAAK,CAAC,mHAAmH,CAAC;AAC9I,CAAC,IAAI,CAAC,aAAa,EAAE;AACrB,EAAE,EAAE,CAAC,IAAI,CAAC;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,CAAC,CAAC;AACN,EAAE,aAAa,GAAG,IAAI;AACtB,CAAC;AACD,CAAC,OAAO,EAAE;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE;AAChC,CAAC,IAAI,GAAG,GAAG,CAAC;AACZ,CAAC,IAAI,IAAI,GAAG,CAAC;AACb,CAAC,IAAI,IAAI,GAAG,CAAC;AACb,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACpC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"session-store--N_xHxUH.js","sources":["../../../.svelte-kit/adapter-node/chunks/session-id.js","../../../.svelte-kit/adapter-node/chunks/session-store.js"],"sourcesContent":["import \"node:crypto\";\n//#region ../core/dist/sessions/session-id.js\n/**\n* Ordered list of session-id environment variables consulted by the canonical\n* env-first resolver. First non-empty value wins.\n*\n* Order (T11347-unified):\n* 1. `CLEO_SESSION_ID` — canonical; set by spawn isolation (T11343),\n* `cleo session start`, and `cleo session adopt`.\n* 2. `CLEO_SESSION` — legacy alias (single legacy reader); kept for one\n* deprecation cycle so older shells keep resolving.\n* 3. `CLAUDE_SESSION_ID` — injected by the Claude Code harness.\n* 4. `AIDER_SESSION_ID` — injected by the Aider harness.\n*\n* @task T9975\n* @task T11347\n*/\nvar SESSION_ENV_KEY_PRECEDENCE = [\n\t\"CLEO_SESSION_ID\",\n\t\"CLEO_SESSION\",\n\t\"CLAUDE_SESSION_ID\",\n\t\"AIDER_SESSION_ID\"\n];\n/**\n* Resolve the active session ID via environment-variable precedence (T9975).\n*\n* THE single canonical env-first resolver (T11344, Epic T11284). Every\n* session-resolution hot path — `lookupCliSession`, the session-resolver\n* middleware, the audit middleware — consults THIS function so the precedence\n* logic is never duplicated. It returns the per-agent session id injected into\n* the isolation shell by spawn (T11343), making `getActiveSession()` a fallback\n* rather than the default identity. This is what dissolves multi-agent\n* session-bleed: a short-lived `cleo` call inside a worktree resolves the\n* agent's OWN session, not \"whoever touched the DB last\".\n*\n* Precedence is defined by {@link SESSION_ENV_KEY_PRECEDENCE}. Empty-string\n* values are treated as absent (spawn sets `''` when no per-agent session was\n* allocated), so an empty env var transparently falls through to the next key\n* and ultimately to the caller's `getActiveSession()` fallback.\n*\n* This function NEVER reads the database — it is synchronous and safe to call\n* in hot paths. Database fallback is the caller's responsibility.\n*\n* @returns The session ID string when an env var is set, otherwise `null`.\n*\n* @task T9975\n* @task T11344\n*/\nfunction resolveSessionIdFromEnv() {\n\tfor (const key of SESSION_ENV_KEY_PRECEDENCE) {\n\t\tconst value = process.env[key];\n\t\tif (value !== void 0 && value !== \"\") return value;\n\t}\n\treturn null;\n}\n/**\n* Canonical environment key carrying the fork-tree PARENT session id (T11629).\n*\n* The native supervisor (`crates/cleo-supervisor`) stamps this key onto every\n* worker it spawns, set to the supervisor's OWN root session id (the value of\n* {@link CANONICAL_SESSION_ENV_KEY} in the supervisor's environment). It is the\n* fork-tree edge: a worker's own session ({@link CANONICAL_SESSION_ENV_KEY})\n* resolved by {@link resolveSessionIdFromEnv} is the CHILD; the value of this\n* key is its PARENT. Reading both lets the session subsystem reconstruct the\n* orchestrator→worker fork tree without a DB scan.\n*\n* The Rust constant of the same name lives in\n* `crates/cleo-supervisor/src/supervisor.rs` (`PARENT_SESSION_ID_ENV_KEY`).\n*\n* @task T11629\n*/\nvar PARENT_SESSION_ENV_KEY = \"CLEO_PARENT_SESSION_ID\";\n/**\n* Resolve the fork-tree PARENT session id from the environment (T11629).\n*\n* Returns the {@link PARENT_SESSION_ENV_KEY} (`CLEO_PARENT_SESSION_ID`) value\n* stamped by the supervisor when it spawned this process, or `null` when\n* unset/empty (e.g. a top-level/root process with no supervisor parent). The\n* companion of {@link resolveSessionIdFromEnv}: that resolves THIS process's own\n* session (the fork-tree child); this resolves the session that spawned it (the\n* fork-tree parent).\n*\n* Like the other env resolvers this NEVER reads the database — it is synchronous\n* and safe in hot paths. Empty-string values are treated as absent.\n*\n* @returns The parent session id string when set, otherwise `null`.\n* @task T11629\n*/\nfunction resolveParentSessionIdFromEnv() {\n\tconst value = process.env[PARENT_SESSION_ENV_KEY];\n\treturn value !== void 0 && value !== \"\" ? value : null;\n}\n//#endregion\nexport { resolveSessionIdFromEnv as i, SESSION_ENV_KEY_PRECEDENCE as n, resolveParentSessionIdFromEnv as r, PARENT_SESSION_ENV_KEY as t };\n","import { C as tasksSessions, O as tasksTaskWorkHistory } from \"./tasks-schema.js\";\nimport { i as resolveSessionIdFromEnv } from \"./session-id.js\";\nimport { a as getDb } from \"./sqlite.js\";\nimport { AsyncLocalStorage } from \"node:async_hooks\";\nimport { and, desc, eq, isNull } from \"drizzle-orm\";\n//#region ../core/dist/store/parsers.js\n/**\n* Shared JSON parsing helpers for SQLite store modules.\n*\n* Eliminates duplication across sqlite-data-accessor.ts, tasks-sqlite.ts,\n* and session-store.ts.\n*/\n/**\n* Parse a JSON string, returning undefined on null/undefined input or parse error.\n*/\nfunction safeParseJson(str) {\n\tif (!str) return void 0;\n\ttry {\n\t\treturn JSON.parse(str);\n\t} catch {\n\t\treturn;\n\t}\n}\n/**\n* Parse a JSON string expected to contain an array.\n* Returns undefined for null/undefined input, empty arrays, or parse errors.\n*/\nfunction safeParseJsonArray(str) {\n\tif (!str) return void 0;\n\ttry {\n\t\tconst arr = JSON.parse(str);\n\t\tif (Array.isArray(arr) && arr.length === 0) return void 0;\n\t\treturn arr;\n\t} catch {\n\t\treturn;\n\t}\n}\n//#endregion\n//#region ../core/dist/store/converters.js\n/**\n* Shared row <-> domain conversion functions for SQLite store modules.\n*\n* Eliminates duplication across sqlite-data-accessor.ts, tasks-sqlite.ts,\n* and session-store.ts.\n*/\n/** Convert a database TaskRow to a domain Task object. */\nfunction rowToTask(row) {\n\treturn {\n\t\tid: row.id,\n\t\ttitle: row.title,\n\t\tstatus: row.status,\n\t\tpriority: row.priority,\n\t\ttype: row.type ?? void 0,\n\t\tparentId: row.parentId ?? void 0,\n\t\tphase: row.phase ?? void 0,\n\t\tsize: row.size ?? void 0,\n\t\tposition: row.position ?? void 0,\n\t\tpositionVersion: row.positionVersion ?? void 0,\n\t\tdescription: row.description ?? \"\",\n\t\tlabels: safeParseJsonArray(row.labelsJson),\n\t\tnotes: safeParseJsonArray(row.notesJson),\n\t\tacceptance: safeParseJsonArray(row.acceptanceJson),\n\t\tfiles: safeParseJsonArray(row.filesJson),\n\t\tdepends: void 0,\n\t\torigin: row.origin ?? void 0,\n\t\tblockedBy: row.blockedBy ?? void 0,\n\t\tepicLifecycle: row.epicLifecycle ?? void 0,\n\t\tnoAutoComplete: row.noAutoComplete ?? void 0,\n\t\tcreatedAt: row.createdAt,\n\t\tupdatedAt: row.updatedAt ?? void 0,\n\t\tcompletedAt: row.completedAt ?? void 0,\n\t\tcancelledAt: row.cancelledAt ?? void 0,\n\t\tcancellationReason: row.cancellationReason ?? void 0,\n\t\tverification: row.verificationJson ? safeParseJson(row.verificationJson) : void 0,\n\t\tprovenance: row.createdBy || row.modifiedBy || row.sessionId ? {\n\t\t\tcreatedBy: row.createdBy ?? null,\n\t\t\tmodifiedBy: row.modifiedBy ?? null,\n\t\t\tsessionId: row.sessionId ?? null\n\t\t} : void 0,\n\t\tpipelineStage: row.pipelineStage ?? void 0,\n\t\tassignee: row.assignee ?? void 0,\n\t\tkind: row.kind ?? void 0,\n\t\tscope: row.scope ?? void 0,\n\t\tseverity: row.severity ?? void 0\n\t};\n}\n/** Convert a domain Task to a database row for insert/upsert.\n*\n* T877 invariant: when a task has a terminal status but no explicit\n* pipelineStage, derive it so the INSERT satisfies the SQLite trigger\n* `trg_tasks_status_pipeline_insert` (status=done requires\n* pipeline_stage IN (contribution, cancelled); status=cancelled requires\n* pipeline_stage=cancelled). This mirrors the runtime behaviour in\n* complete/cancel-ops and means callers never have to think about the\n* invariant — the canonical converter enforces it.\n*/\nfunction taskToRow(task) {\n\tconst status = task.status ?? \"pending\";\n\tlet pipelineStage = task.pipelineStage ?? null;\n\tif (pipelineStage === null || pipelineStage === void 0) {\n\t\tif (status === \"done\") pipelineStage = \"contribution\";\n\t\telse if (status === \"cancelled\") pipelineStage = \"cancelled\";\n\t}\n\treturn {\n\t\tid: task.id,\n\t\ttitle: task.title ?? \"\",\n\t\tdescription: task.description ?? null,\n\t\tstatus,\n\t\tpriority: task.priority ?? \"medium\",\n\t\ttype: task.type ?? null,\n\t\tparentId: task.parentId ?? null,\n\t\tphase: task.phase ?? null,\n\t\tsize: task.size ?? null,\n\t\tposition: task.position ?? null,\n\t\tpositionVersion: task.positionVersion ?? 0,\n\t\tlabelsJson: task.labels ? JSON.stringify(task.labels) : \"[]\",\n\t\tnotesJson: task.notes ? JSON.stringify(task.notes) : \"[]\",\n\t\tacceptanceJson: task.acceptance ? JSON.stringify(task.acceptance) : \"[]\",\n\t\tfilesJson: task.files ? JSON.stringify(task.files) : \"[]\",\n\t\torigin: task.origin ?? null,\n\t\tblockedBy: task.blockedBy ?? null,\n\t\tepicLifecycle: task.epicLifecycle ?? null,\n\t\tnoAutoComplete: task.noAutoComplete ?? null,\n\t\tcreatedAt: task.createdAt ?? (/* @__PURE__ */ new Date()).toISOString(),\n\t\tupdatedAt: task.updatedAt ?? null,\n\t\tcompletedAt: task.completedAt ?? null,\n\t\tcancelledAt: task.cancelledAt ?? null,\n\t\tcancellationReason: task.cancellationReason ?? null,\n\t\tverificationJson: task.verification ? JSON.stringify(task.verification) : null,\n\t\tcreatedBy: task.provenance?.createdBy ?? null,\n\t\tmodifiedBy: task.provenance?.modifiedBy ?? null,\n\t\tsessionId: task.provenance?.sessionId ?? null,\n\t\tpipelineStage,\n\t\tassignee: task.assignee ?? null,\n\t\tkind: task.kind ?? void 0,\n\t\tscope: task.scope ?? void 0,\n\t\tseverity: task.severity ?? void 0\n\t};\n}\n/** Convert a domain Task to a row suitable for archived tasks. */\nfunction archivedTaskToRow(task) {\n\tconst row = taskToRow(task);\n\trow.status = \"archived\";\n\tif (!row[\"archivedAt\"]) row[\"archivedAt\"] = task.completedAt ?? (/* @__PURE__ */ new Date()).toISOString();\n\treturn row;\n}\n/** Convert a SessionRow to a domain Session. */\nfunction rowToSession(row) {\n\tconst taskWork = {\n\t\ttaskId: row.currentTask ?? null,\n\t\tsetAt: row.taskStartedAt ?? null\n\t};\n\treturn {\n\t\tid: row.id,\n\t\tname: row.name,\n\t\tstatus: row.status,\n\t\tscope: safeParseJson(row.scopeJson) ?? { type: \"global\" },\n\t\ttaskWork,\n\t\tstartedAt: row.startedAt,\n\t\tendedAt: row.endedAt ?? void 0,\n\t\tagent: row.agent ?? void 0,\n\t\tnotes: safeParseJsonArray(row.notesJson),\n\t\ttasksCompleted: safeParseJsonArray(row.tasksCompletedJson),\n\t\ttasksCreated: safeParseJsonArray(row.tasksCreatedJson),\n\t\thandoffJson: row.handoffJson ?? null,\n\t\tpreviousSessionId: row.previousSessionId ?? null,\n\t\tnextSessionId: row.nextSessionId ?? null,\n\t\tparentSessionId: row.parentSessionId ?? null,\n\t\tagentIdentifier: row.agentIdentifier ?? null,\n\t\thandoffConsumedAt: row.handoffConsumedAt ?? null,\n\t\thandoffConsumedBy: row.handoffConsumedBy ?? null,\n\t\tdebriefJson: row.debriefJson ?? null,\n\t\tstats: row.statsJson ? safeParseJson(row.statsJson) : void 0,\n\t\tresumeCount: row.resumeCount ?? void 0,\n\t\tgradeMode: row.gradeMode ? Boolean(row.gradeMode) : void 0,\n\t\tagentHandle: row.agentHandle ?? null,\n\t\tscopeKind: row.scopeKind ?? null,\n\t\tscopeId: row.scopeId ?? null,\n\t\tlastActivity: row.lastActivity ?? null\n\t};\n}\n//#endregion\n//#region ../core/dist/sessions/connection-session-handle.js\n/**\n* Connection-scoped session handle registry (T11640 · Epic T11638).\n*\n* The single-process CLI binds exactly one session per process via the dispatch\n* `session-context` singleton — but a warm **daemon** serves many concurrent\n* clients over one long-lived process, so a module singleton would collapse\n* every connection's identity onto \"whoever bound last\". This module gives the\n* daemon a per-connection identity surface WITHOUT changing the dependency\n* direction (`runtime` → `core`):\n*\n* 1. An in-memory `Map<connId, sessionId>` registry the RPC transport writes at\n* **accept-time** (the moment a connection first declares its session) and\n* clears on socket close. Bind/unbind/lookup are O(1) and synchronous.\n* 2. An {@link AsyncLocalStorage} \"current connection\" channel so that, while a\n* request frame is being dispatched, ANY code in `core` (notably\n* {@link resolveCurrentSession}) can ask \"which connection am I serving?\"\n* and resolve that connection's bound session — with zero parameter\n* threading through the dispatch call graph.\n*\n* Because this lives in `core`, the identity resolver\n* (`store/session-store.ts:resolveCurrentSession`) can consult it directly while\n* `runtime` (which depends on `core`) writes to it from the transport boundary.\n* The CLI single-process path never binds a connection, so\n* {@link getCurrentConnectionSessionId} returns `null` there and resolution\n* transparently falls through to the env-first + `getActiveSession()` fallback.\n*\n* This module is import-time side-effect-free: it constructs only an empty `Map`\n* and an `AsyncLocalStorage` instance (both inert), never touching the DB, the\n* filesystem, the network, or any logger at import time.\n*\n* @packageDocumentation\n* @module @cleocode/core/sessions/connection-session-handle\n*\n* @task T11640\n* @epic T11638\n* @saga T11243\n*/\n/**\n* Process-local `connId → sessionId` map.\n*\n* Module-private; mutated only through {@link bindConnectionSession} /\n* {@link unbindConnectionSession} so the lifecycle stays auditable and the map\n* can never leak across the public surface.\n*/\nvar connectionSessionRegistry = /* @__PURE__ */ new Map();\n/**\n* The async-context channel carrying the {@link ConnectionHandleContext} for the\n* request currently being dispatched on a connection.\n*/\nvar connectionHandleStore = new AsyncLocalStorage();\n/**\n* Look up the session id bound to a specific connection id.\n*\n* @param connId - The connection id to resolve.\n* @returns The bound session id, or `null` when the connection is unbound.\n* @task T11640\n*/\nfunction getConnectionSessionId(connId) {\n\treturn connectionSessionRegistry.get(connId) ?? null;\n}\n/**\n* Resolve the session id of the connection currently being served, if any.\n*\n* Reads the {@link AsyncLocalStorage} channel to find the in-flight connection\n* handle, then resolves the session in this precedence:\n* 1. the handle's per-frame `sessionId` snapshot, when present — authoritative\n* for this dispatch and immune to concurrent re-binds of the same `connId`\n* by sibling frames (the intra-connection bleed fix);\n* 2. an on-demand registry lookup by `connId` — so a frame that declared no\n* session of its own still honours a (possibly late) connection binding.\n* Returns `null` outside any connection-handle scope (the single-process CLI\n* path, or daemon code running outside a request frame), so callers\n* transparently fall through to their next resolution tier.\n*\n* This NEVER reads the database — it is synchronous and safe in hot identity\n* paths, mirroring {@link resolveSessionIdFromEnv}.\n*\n* @returns The current connection's session id, or `null`.\n* @task T11640\n*/\nfunction getCurrentConnectionSessionId() {\n\tconst ctx = connectionHandleStore.getStore();\n\tif (!ctx) return null;\n\tif (ctx.sessionId) return ctx.sessionId;\n\treturn getConnectionSessionId(ctx.connId);\n}\n//#endregion\n//#region ../core/dist/store/session-store.js\n/**\n* SQLite-backed session store operations.\n*\n* CRUD operations for sessions and task work tracking backed by tasks.db.\n*\n* @epic T4454\n* @task W1-T4\n* @task T1609 insertHandoffEntry — write-once INSERT path for handoff data\n*/\n/** Create a new session. */\nasync function createSession(session, cwd) {\n\tconst db = await getDb(cwd);\n\tconst tw = session.taskWork;\n\tdb.insert(tasksSessions).values({\n\t\tid: session.id,\n\t\tname: session.name,\n\t\tstatus: session.status,\n\t\tscopeJson: JSON.stringify(session.scope),\n\t\tcurrentTask: tw?.taskId,\n\t\ttaskStartedAt: tw?.setAt,\n\t\tagent: session.agent,\n\t\tnotesJson: session.notes ? JSON.stringify(session.notes) : \"[]\",\n\t\ttasksCompletedJson: session.tasksCompleted ? JSON.stringify(session.tasksCompleted) : \"[]\",\n\t\ttasksCreatedJson: session.tasksCreated ? JSON.stringify(session.tasksCreated) : \"[]\",\n\t\tstartedAt: session.startedAt,\n\t\tendedAt: session.endedAt,\n\t\tparentSessionId: session.parentSessionId ?? null\n\t}).run();\n\treturn session;\n}\n/** Get a session by ID. */\nasync function getSession(sessionId, cwd) {\n\tconst rows = await (await getDb(cwd)).select().from(tasksSessions).where(eq(tasksSessions.id, sessionId)).all();\n\tif (rows.length === 0) return null;\n\treturn rowToSession(rows[0]);\n}\n/** Update a session. */\nasync function updateSession(sessionId, updates, cwd) {\n\tconst db = await getDb(cwd);\n\tif (!await getSession(sessionId, cwd)) return null;\n\tconst updateRow = {};\n\tif (updates.name !== void 0) updateRow.name = updates.name;\n\tif (updates.status !== void 0) updateRow.status = updates.status;\n\tif (updates.scope !== void 0) updateRow.scopeJson = JSON.stringify(updates.scope);\n\tif (updates.endedAt !== void 0) updateRow.endedAt = updates.endedAt;\n\tif (updates.agent !== void 0) updateRow.agent = updates.agent;\n\tif (updates.notes !== void 0) updateRow.notesJson = JSON.stringify(updates.notes);\n\tif (updates.tasksCompleted !== void 0) updateRow.tasksCompletedJson = JSON.stringify(updates.tasksCompleted);\n\tif (updates.tasksCreated !== void 0) updateRow.tasksCreatedJson = JSON.stringify(updates.tasksCreated);\n\tif (updates.previousSessionId !== void 0) updateRow.previousSessionId = updates.previousSessionId;\n\tif (updates.nextSessionId !== void 0) updateRow.nextSessionId = updates.nextSessionId;\n\tif (updates.parentSessionId !== void 0) updateRow.parentSessionId = updates.parentSessionId;\n\tif (updates.agentIdentifier !== void 0) updateRow.agentIdentifier = updates.agentIdentifier;\n\tif (updates.handoffConsumedAt !== void 0) updateRow.handoffConsumedAt = updates.handoffConsumedAt;\n\tif (updates.handoffConsumedBy !== void 0) updateRow.handoffConsumedBy = updates.handoffConsumedBy;\n\tif (updates.debriefJson !== void 0) updateRow.debriefJson = updates.debriefJson;\n\tif (updates.handoffJson !== void 0) updateRow.handoffJson = updates.handoffJson;\n\tdb.update(tasksSessions).set(updateRow).where(eq(tasksSessions.id, sessionId)).run();\n\treturn getSession(sessionId, cwd);\n}\n/** List sessions with optional filters. */\nasync function listSessions(filters, cwd) {\n\tconst db = await getDb(cwd);\n\tconst conditions = [];\n\tif (filters?.active) conditions.push(eq(tasksSessions.status, \"active\"));\n\tconst query = db.select().from(tasksSessions).where(conditions.length > 0 ? and(...conditions) : void 0).orderBy(desc(tasksSessions.startedAt));\n\treturn (filters?.limit ? await query.limit(filters.limit).all() : await query.all()).map(rowToSession);\n}\n/** End a session. */\nasync function endSession(sessionId, note, cwd) {\n\tconst session = await getSession(sessionId, cwd);\n\tif (!session) return null;\n\tconst updates = {\n\t\tstatus: \"ended\",\n\t\tendedAt: (/* @__PURE__ */ new Date()).toISOString()\n\t};\n\tif (note) {\n\t\tconst notes = session.notes ?? [];\n\t\tnotes.push(note);\n\t\tupdates.notes = notes;\n\t}\n\treturn updateSession(sessionId, updates, cwd);\n}\n/** Start working on a task within a session. */\nasync function startTask(sessionId, taskId, cwd) {\n\tconst db = await getDb(cwd);\n\tconst now = (/* @__PURE__ */ new Date()).toISOString();\n\tdb.update(tasksTaskWorkHistory).set({ clearedAt: now }).where(and(eq(tasksTaskWorkHistory.sessionId, sessionId), isNull(tasksTaskWorkHistory.clearedAt))).run();\n\tdb.insert(tasksTaskWorkHistory).values({\n\t\tsessionId,\n\t\ttaskId,\n\t\tsetAt: now\n\t}).run();\n\tdb.update(tasksSessions).set({\n\t\tcurrentTask: taskId,\n\t\ttaskStartedAt: now\n\t}).where(eq(tasksSessions.id, sessionId)).run();\n}\n/** Get current task for a session. */\nasync function getCurrentTask(sessionId, cwd) {\n\tconst rows = await (await getDb(cwd)).select({\n\t\tcurrentTask: tasksSessions.currentTask,\n\t\ttaskStartedAt: tasksSessions.taskStartedAt\n\t}).from(tasksSessions).where(eq(tasksSessions.id, sessionId)).all();\n\tif (rows.length === 0) return {\n\t\ttaskId: null,\n\t\tsince: null\n\t};\n\treturn {\n\t\ttaskId: rows[0].currentTask,\n\t\tsince: rows[0].taskStartedAt\n\t};\n}\n/** Stop working on the current task for a session. */\nasync function stopTask(sessionId, cwd) {\n\tconst db = await getDb(cwd);\n\tconst now = (/* @__PURE__ */ new Date()).toISOString();\n\tdb.update(tasksTaskWorkHistory).set({ clearedAt: now }).where(and(eq(tasksTaskWorkHistory.sessionId, sessionId), isNull(tasksTaskWorkHistory.clearedAt))).run();\n\tdb.update(tasksSessions).set({\n\t\tcurrentTask: null,\n\t\ttaskStartedAt: null\n\t}).where(eq(tasksSessions.id, sessionId)).run();\n}\n/**\n* Get the currently active session — the most-recent `status='active'` row.\n*\n* @internal LEGACY single-process TTY fallback ONLY (T11640 · Epic T11638).\n*\n* This resolves \"whoever wrote an active session to the DB most recently\",\n* which is the WRONG identity in any multi-tenant context: under the warm\n* daemon (many concurrent connections) and under multi-agent spawn isolation\n* (many worktrees writing the same DB) it collapses every caller's identity\n* onto the last writer, causing session-bleed and memory scope-leakage.\n*\n* Identity-meaning callers — anything that means \"the session of whoever is\n* calling THIS request\" — MUST use {@link resolveCurrentSession} /\n* {@link resolveCurrentSessionId}, which resolve, in order:\n* 1. the daemon connection handle ({@link getCurrentConnectionSessionId}),\n* 2. the env-named session (`CLEO_SESSION_ID`, via\n* {@link resolveSessionIdFromEnv}),\n* 3. and only THEN fall back to this most-recent-active row.\n*\n* `getActiveSession` survives as that final tier-3 fallback and for genuine\n* SCAN-meaning callers (e.g. \"is there any active session at all?\",\n* `gcSessions`, the data-accessor pass-throughs). The\n* `lint-no-bare-get-active-session.mjs` gate bans NEW bare callsites so the\n* identity-vs-scan split cannot silently regress — annotate a justified scan\n* callsite with a trailing `// get-active-session-allowed: <reason>`.\n*\n* @param cwd - Working directory for DB resolution.\n* @returns The most-recent active session, or `null`.\n*/\nasync function getActiveSession(cwd) {\n\tconst rows = await (await getDb(cwd)).select().from(tasksSessions).where(eq(tasksSessions.status, \"active\")).orderBy(desc(tasksSessions.startedAt)).limit(1).all();\n\tif (rows.length === 0) return null;\n\treturn rowToSession(rows[0]);\n}\n/**\n* Resolve the CALLER's current session (T11344/T11640 · Epics T11284, T11638).\n*\n* THE canonical identity-resolution helper. Replaces bare {@link getActiveSession}\n* for any consumer that means \"the session of whoever is calling THIS request\".\n* Resolution precedence (first hit wins):\n*\n* 1. **Daemon connection handle** ({@link getCurrentConnectionSessionId}) — when\n* dispatching a request frame on a warm-daemon connection, the connection's\n* accept-time-bound session is authoritative. A row with that id is honoured\n* when present; when the bound id has no row yet, resolution proceeds (the\n* connection asserted an identity that the env/active tiers may still\n* satisfy). This is the seam that gives the multi-connection daemon a stable\n* per-connection identity (T11640).\n* 2. **Env-named session** — `resolveSessionIdFromEnv()` (`CLEO_SESSION_ID`\n* injected by spawn isolation, T11343); the spawned agent's OWN session.\n* 3. **Most-recent active row** — {@link getActiveSession}, the legacy\n* single-process fallback.\n*\n* Making most-recent-active the FALLBACK rather than the default identity is\n* what dissolves multi-agent session-bleed AND memory scope-leakage: a\n* short-lived `cleo` call in agent A's worktree no longer resolves agent B's\n* session just because B wrote to the DB more recently.\n*\n* The connection-handle and env-named sessions are honoured even when their\n* status is not `active` (the caller explicitly asserted that id), so callers\n* that need an active-only guarantee should check `.status` on the result.\n*\n* @param cwd - Working directory for DB resolution.\n* @returns The resolved session, or `null` when none can be resolved.\n* @task T11344\n* @task T11640\n*/\nasync function resolveCurrentSession(cwd) {\n\tconst connId = getCurrentConnectionSessionId();\n\tif (connId) {\n\t\tconst byConn = await getSession(connId, cwd);\n\t\tif (byConn) return byConn;\n\t}\n\tconst envId = resolveSessionIdFromEnv();\n\tif (envId) {\n\t\tconst byEnv = await getSession(envId, cwd);\n\t\tif (byEnv) return byEnv;\n\t}\n\treturn getActiveSession(cwd);\n}\n/**\n* Resolve the CALLER's current session id (T11344/T11640).\n*\n* Thin id-only convenience over {@link resolveCurrentSession} sharing its\n* connection-handle → env → most-recent-active precedence. Prefer this over\n* `(await getActiveSession())?.id` in identity-resolution hot paths.\n*\n* @param cwd - Working directory for DB resolution.\n* @returns The resolved session id, or `null`.\n* @task T11344\n* @task T11640\n*/\nasync function resolveCurrentSessionId(cwd) {\n\tconst connId = getCurrentConnectionSessionId();\n\tif (connId) {\n\t\tconst byConn = await getSession(connId, cwd);\n\t\tif (byConn) return byConn.id;\n\t}\n\tconst envId = resolveSessionIdFromEnv();\n\tif (envId) {\n\t\tconst byEnv = await getSession(envId, cwd);\n\t\tif (byEnv) return byEnv.id;\n\t}\n\treturn (await getActiveSession(cwd))?.id ?? null;\n}\n//#endregion\nexport { taskToRow as _, getSession as a, resolveCurrentSessionId as c, updateSession as d, getConnectionSessionId as f, rowToTask as g, rowToSession as h, getCurrentTask as i, startTask as l, archivedTaskToRow as m, endSession as n, listSessions as o, getCurrentConnectionSessionId as p, getActiveSession as r, resolveCurrentSession as s, createSession as t, stopTask as u };\n"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"session-store2-DAM-eVTH.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}