agor-live 0.23.1 → 0.23.2

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 (469) hide show
  1. package/dist/core/claude/index.cjs +51 -27
  2. package/dist/core/claude/index.js +51 -27
  3. package/dist/core/claude-cli/index.cjs +13 -0
  4. package/dist/core/claude-cli/index.js +13 -0
  5. package/dist/core/claude-cli/pricing.d.ts.map +1 -1
  6. package/dist/core/client/index.cjs +17 -0
  7. package/dist/core/client/index.js +16 -0
  8. package/dist/core/db/index.cjs +618 -421
  9. package/dist/core/db/index.js +550 -353
  10. package/dist/core/db/repositories/boards.d.ts +27 -0
  11. package/dist/core/db/repositories/boards.d.ts.map +1 -1
  12. package/dist/core/db/repositories/branches.d.ts +11 -1
  13. package/dist/core/db/repositories/branches.d.ts.map +1 -1
  14. package/dist/core/db/repositories/gateway-channels.d.ts +9 -0
  15. package/dist/core/db/repositories/gateway-channels.d.ts.map +1 -1
  16. package/dist/core/db/repositories/sessions.d.ts +7 -0
  17. package/dist/core/db/repositories/sessions.d.ts.map +1 -1
  18. package/dist/core/environment/render-snapshot.cjs +6 -2
  19. package/dist/core/environment/render-snapshot.d.ts +2 -0
  20. package/dist/core/environment/render-snapshot.d.ts.map +1 -1
  21. package/dist/core/environment/render-snapshot.js +6 -2
  22. package/dist/core/environment/variable-resolver.cjs +3 -1
  23. package/dist/core/environment/variable-resolver.js +3 -1
  24. package/dist/core/index.cjs +684 -486
  25. package/dist/core/index.js +684 -486
  26. package/dist/core/lib/feathers-validation.cjs +3 -0
  27. package/dist/core/lib/feathers-validation.d.ts +1 -0
  28. package/dist/core/lib/feathers-validation.d.ts.map +1 -1
  29. package/dist/core/lib/feathers-validation.js +3 -0
  30. package/dist/core/local-actions/index.cjs +123 -56
  31. package/dist/core/local-actions/index.js +121 -54
  32. package/dist/core/mcp/index.cjs +21 -3
  33. package/dist/core/mcp/index.d.ts +1 -1
  34. package/dist/core/mcp/index.d.ts.map +1 -1
  35. package/dist/core/mcp/index.js +18 -3
  36. package/dist/core/mcp/template-patterns.d.ts +15 -0
  37. package/dist/core/mcp/template-patterns.d.ts.map +1 -0
  38. package/dist/core/mcp/template-resolver.d.ts +13 -0
  39. package/dist/core/mcp/template-resolver.d.ts.map +1 -1
  40. package/dist/core/models/browser.cjs +6 -0
  41. package/dist/core/models/browser.js +6 -0
  42. package/dist/core/models/claude.d.ts.map +1 -1
  43. package/dist/core/models/index.cjs +6 -0
  44. package/dist/core/models/index.js +6 -0
  45. package/dist/core/seed/index.cjs +360 -216
  46. package/dist/core/seed/index.js +329 -185
  47. package/dist/core/templates/handlebars-helpers.cjs +3 -1
  48. package/dist/core/templates/handlebars-helpers.d.ts +5 -0
  49. package/dist/core/templates/handlebars-helpers.d.ts.map +1 -1
  50. package/dist/core/templates/handlebars-helpers.js +3 -1
  51. package/dist/core/tools/mcp/auth-secrets.cjs +3460 -3
  52. package/dist/core/tools/mcp/auth-secrets.d.ts.map +1 -1
  53. package/dist/core/tools/mcp/auth-secrets.js +3477 -3
  54. package/dist/core/tools/mcp/http-headers.cjs +17 -1
  55. package/dist/core/tools/mcp/http-headers.d.ts.map +1 -1
  56. package/dist/core/tools/mcp/http-headers.js +15 -1
  57. package/dist/core/tools/mcp/oauth-refresh.cjs +67 -43
  58. package/dist/core/tools/mcp/oauth-refresh.js +65 -41
  59. package/dist/core/types/board.d.ts +12 -0
  60. package/dist/core/types/board.d.ts.map +1 -1
  61. package/dist/core/types/gateway.d.ts +14 -0
  62. package/dist/core/types/gateway.d.ts.map +1 -1
  63. package/dist/core/types/index.cjs +17 -0
  64. package/dist/core/types/index.js +16 -0
  65. package/dist/core/unix/index.cjs +67 -0
  66. package/dist/core/unix/index.js +67 -0
  67. package/dist/daemon/auth/executor-runtime-scope.d.ts.map +1 -1
  68. package/dist/daemon/auth/executor-runtime-scope.js +19 -5
  69. package/dist/daemon/auth/executor-session-token.d.ts +15 -0
  70. package/dist/daemon/auth/executor-session-token.d.ts.map +1 -0
  71. package/dist/daemon/auth/executor-session-token.js +17 -0
  72. package/dist/daemon/auth/issue-browser-tokens-hook.d.ts +24 -0
  73. package/dist/daemon/auth/issue-browser-tokens-hook.d.ts.map +1 -0
  74. package/dist/daemon/auth/issue-browser-tokens-hook.js +95 -0
  75. package/dist/daemon/auth/service-jwt-strategy.d.ts.map +1 -1
  76. package/dist/daemon/auth/service-jwt-strategy.js +14 -2
  77. package/dist/daemon/declarations.d.ts +1 -0
  78. package/dist/daemon/declarations.d.ts.map +1 -1
  79. package/dist/daemon/index.js +1365 -418
  80. package/dist/daemon/main.js +1365 -418
  81. package/dist/daemon/mcp/server.js +294 -31
  82. package/dist/daemon/mcp/tools/analytics.js +73 -24
  83. package/dist/daemon/mcp/tools/artifacts.js +73 -24
  84. package/dist/daemon/mcp/tools/boards.js +73 -24
  85. package/dist/daemon/mcp/tools/branches.js +73 -24
  86. package/dist/daemon/mcp/tools/card-types.js +73 -24
  87. package/dist/daemon/mcp/tools/cards.js +73 -24
  88. package/dist/daemon/mcp/tools/environment.js +73 -24
  89. package/dist/daemon/mcp/tools/gateway-channels.d.ts.map +1 -1
  90. package/dist/daemon/mcp/tools/gateway-channels.js +190 -38
  91. package/dist/daemon/mcp/tools/knowledge.js +73 -24
  92. package/dist/daemon/mcp/tools/mcp-servers.js +73 -24
  93. package/dist/daemon/mcp/tools/messages.js +73 -24
  94. package/dist/daemon/mcp/tools/proxies.js +73 -24
  95. package/dist/daemon/mcp/tools/repos.js +73 -24
  96. package/dist/daemon/mcp/tools/schedules.js +73 -24
  97. package/dist/daemon/mcp/tools/search.js +73 -24
  98. package/dist/daemon/mcp/tools/sessions.js +73 -24
  99. package/dist/daemon/mcp/tools/tasks.js +73 -24
  100. package/dist/daemon/mcp/tools/users.js +76 -27
  101. package/dist/daemon/mcp/tools/widgets.d.ts.map +1 -1
  102. package/dist/daemon/mcp/tools/widgets.js +257 -99
  103. package/dist/daemon/oauth-auth-helpers.d.ts +35 -0
  104. package/dist/daemon/oauth-auth-helpers.d.ts.map +1 -0
  105. package/dist/daemon/oauth-auth-helpers.js +14 -0
  106. package/dist/daemon/register-hooks.d.ts +1 -0
  107. package/dist/daemon/register-hooks.d.ts.map +1 -1
  108. package/dist/daemon/register-hooks.js +304 -53
  109. package/dist/daemon/register-routes.d.ts.map +1 -1
  110. package/dist/daemon/register-routes.js +738 -288
  111. package/dist/daemon/register-services.d.ts.map +1 -1
  112. package/dist/daemon/register-services.js +386 -155
  113. package/dist/daemon/services/boards.d.ts +5 -0
  114. package/dist/daemon/services/boards.d.ts.map +1 -1
  115. package/dist/daemon/services/boards.js +7 -0
  116. package/dist/daemon/services/branches.d.ts.map +1 -1
  117. package/dist/daemon/services/branches.js +31 -2
  118. package/dist/daemon/services/claude-models.d.ts.map +1 -1
  119. package/dist/daemon/services/claude-models.js +4 -1
  120. package/dist/daemon/services/gateway.d.ts +15 -0
  121. package/dist/daemon/services/gateway.d.ts.map +1 -1
  122. package/dist/daemon/services/gateway.js +34 -0
  123. package/dist/daemon/services/health-monitor.d.ts.map +1 -1
  124. package/dist/daemon/services/health-monitor.js +10 -7
  125. package/dist/daemon/services/session-streams.d.ts +29 -0
  126. package/dist/daemon/services/session-streams.d.ts.map +1 -0
  127. package/dist/daemon/services/session-streams.js +84 -0
  128. package/dist/daemon/services/session-token-service.d.ts.map +1 -1
  129. package/dist/daemon/services/session-token-service.js +8 -4
  130. package/dist/daemon/setup/index.js +43 -11
  131. package/dist/daemon/setup/socketio.d.ts.map +1 -1
  132. package/dist/daemon/setup/socketio.js +43 -11
  133. package/dist/daemon/startup.d.ts.map +1 -1
  134. package/dist/daemon/startup.js +37 -16
  135. package/dist/daemon/utils/authorization.js +19 -5
  136. package/dist/daemon/utils/emit-service-event.d.ts +56 -0
  137. package/dist/daemon/utils/emit-service-event.d.ts.map +1 -0
  138. package/dist/daemon/utils/emit-service-event.js +23 -0
  139. package/dist/daemon/utils/mcp-header-secrets.d.ts +3 -5
  140. package/dist/daemon/utils/mcp-header-secrets.d.ts.map +1 -1
  141. package/dist/daemon/utils/mcp-header-secrets.js +31 -2
  142. package/dist/daemon/utils/realtime-access-cache.d.ts +9 -0
  143. package/dist/daemon/utils/realtime-access-cache.d.ts.map +1 -1
  144. package/dist/daemon/utils/realtime-access-cache.js +24 -0
  145. package/dist/daemon/utils/realtime-publish.d.ts +24 -0
  146. package/dist/daemon/utils/realtime-publish.d.ts.map +1 -1
  147. package/dist/daemon/utils/realtime-publish.js +120 -2
  148. package/dist/daemon/utils/session-queue-tenant-scope.d.ts +24 -0
  149. package/dist/daemon/utils/session-queue-tenant-scope.d.ts.map +1 -0
  150. package/dist/daemon/utils/session-queue-tenant-scope.js +133 -0
  151. package/dist/daemon/widgets/gateway-token/index.d.ts +114 -0
  152. package/dist/daemon/widgets/gateway-token/index.d.ts.map +1 -0
  153. package/dist/daemon/widgets/gateway-token/index.js +14711 -0
  154. package/dist/daemon/widgets/index.d.ts.map +1 -1
  155. package/dist/daemon/widgets/index.js +190 -16
  156. package/dist/daemon/widgets/registry.d.ts +7 -0
  157. package/dist/daemon/widgets/registry.d.ts.map +1 -1
  158. package/dist/daemon/widgets/submissions.js +12 -9
  159. package/dist/executor/commands/git.d.ts.map +1 -1
  160. package/dist/executor/commands/git.js +2 -0
  161. package/dist/executor/db/feathers-repositories.d.ts +19 -1
  162. package/dist/executor/db/feathers-repositories.d.ts.map +1 -1
  163. package/dist/executor/db/feathers-repositories.js +31 -1
  164. package/dist/executor/handlers/sdk/claude.d.ts.map +1 -1
  165. package/dist/executor/handlers/sdk/claude.js +1 -1
  166. package/dist/executor/handlers/sdk/codex.d.ts.map +1 -1
  167. package/dist/executor/handlers/sdk/codex.js +1 -1
  168. package/dist/executor/handlers/sdk/copilot.d.ts.map +1 -1
  169. package/dist/executor/handlers/sdk/copilot.js +1 -1
  170. package/dist/executor/handlers/sdk/cursor.d.ts.map +1 -1
  171. package/dist/executor/handlers/sdk/cursor.js +1 -0
  172. package/dist/executor/handlers/sdk/gemini.d.ts.map +1 -1
  173. package/dist/executor/handlers/sdk/gemini.js +1 -1
  174. package/dist/executor/handlers/sdk/opencode.d.ts.map +1 -1
  175. package/dist/executor/handlers/sdk/opencode.js +1 -1
  176. package/dist/executor/payload-types.d.ts +5 -5
  177. package/dist/executor/sdk-handlers/base/mcp-scoping.d.ts +8 -1
  178. package/dist/executor/sdk-handlers/base/mcp-scoping.d.ts.map +1 -1
  179. package/dist/executor/sdk-handlers/base/mcp-scoping.js +58 -6
  180. package/dist/executor/sdk-handlers/claude/claude-tool.d.ts +2 -2
  181. package/dist/executor/sdk-handlers/claude/claude-tool.d.ts.map +1 -1
  182. package/dist/executor/sdk-handlers/claude/claude-tool.js +2 -2
  183. package/dist/executor/sdk-handlers/claude/prompt-service.d.ts +13 -3
  184. package/dist/executor/sdk-handlers/claude/prompt-service.d.ts.map +1 -1
  185. package/dist/executor/sdk-handlers/claude/prompt-service.js +16 -3
  186. package/dist/executor/sdk-handlers/claude/query-builder.d.ts +2 -1
  187. package/dist/executor/sdk-handlers/claude/query-builder.d.ts.map +1 -1
  188. package/dist/executor/sdk-handlers/claude/query-builder.js +2 -1
  189. package/dist/executor/sdk-handlers/codex/codex-tool.d.ts +2 -2
  190. package/dist/executor/sdk-handlers/codex/codex-tool.d.ts.map +1 -1
  191. package/dist/executor/sdk-handlers/codex/codex-tool.js +2 -2
  192. package/dist/executor/sdk-handlers/codex/prompt-service.d.ts +3 -2
  193. package/dist/executor/sdk-handlers/codex/prompt-service.d.ts.map +1 -1
  194. package/dist/executor/sdk-handlers/codex/prompt-service.js +70 -6
  195. package/dist/executor/sdk-handlers/copilot/copilot-tool.d.ts +2 -2
  196. package/dist/executor/sdk-handlers/copilot/copilot-tool.d.ts.map +1 -1
  197. package/dist/executor/sdk-handlers/copilot/copilot-tool.js +2 -2
  198. package/dist/executor/sdk-handlers/copilot/prompt-service.d.ts +3 -2
  199. package/dist/executor/sdk-handlers/copilot/prompt-service.d.ts.map +1 -1
  200. package/dist/executor/sdk-handlers/copilot/prompt-service.js +4 -1
  201. package/dist/executor/sdk-handlers/gemini/gemini-tool.d.ts +2 -2
  202. package/dist/executor/sdk-handlers/gemini/gemini-tool.d.ts.map +1 -1
  203. package/dist/executor/sdk-handlers/gemini/gemini-tool.js +2 -2
  204. package/dist/executor/sdk-handlers/gemini/prompt-service.d.ts +3 -2
  205. package/dist/executor/sdk-handlers/gemini/prompt-service.d.ts.map +1 -1
  206. package/dist/executor/sdk-handlers/gemini/prompt-service.js +4 -1
  207. package/dist/executor/sdk-handlers/opencode/opencode-tool.d.ts +3 -2
  208. package/dist/executor/sdk-handlers/opencode/opencode-tool.d.ts.map +1 -1
  209. package/dist/executor/sdk-handlers/opencode/opencode-tool.js +4 -1
  210. package/dist/executor/services/feathers-client.d.ts.map +1 -1
  211. package/dist/executor/services/feathers-client.js +119 -20
  212. package/dist/ui/assets/AgorEmojiPickerInner-leeNywMc.js +1 -0
  213. package/dist/ui/assets/App-Dpl4Cc0U.js +4 -0
  214. package/dist/ui/assets/App-Dpl4Cc0U.js.gz +0 -0
  215. package/dist/ui/assets/AppNode-wN3UZlFK.js +1 -0
  216. package/dist/ui/assets/AppNode-wN3UZlFK.js.gz +0 -0
  217. package/dist/ui/assets/{ArtifactConsentModal-oMMzRn8L.js → ArtifactConsentModal-DjzXcP_L.js} +1 -1
  218. package/dist/ui/assets/ArtifactConsentModal-DjzXcP_L.js.gz +0 -0
  219. package/dist/ui/assets/ArtifactFullscreenPage-B3b_EZ0F.js +9 -0
  220. package/dist/ui/assets/ArtifactFullscreenPage-B3b_EZ0F.js.gz +0 -0
  221. package/dist/ui/assets/ArtifactNode-DISy2T-6.js +9 -0
  222. package/dist/ui/assets/ArtifactNode-DISy2T-6.js.gz +0 -0
  223. package/dist/ui/assets/AutocompleteTextarea-DUpsoEGr.js +19 -0
  224. package/dist/ui/assets/AutocompleteTextarea-DUpsoEGr.js.gz +0 -0
  225. package/dist/ui/assets/BoardObjectNodes-BakeGpIX.js +34 -0
  226. package/dist/ui/assets/BoardObjectNodes-BakeGpIX.js.gz +0 -0
  227. package/dist/ui/assets/{CodeEditor.inner-Cuj6RuLL.js → CodeEditor.inner-HmSdTLW5.js} +1 -1
  228. package/dist/ui/assets/CodeEditor.inner-HmSdTLW5.js.gz +0 -0
  229. package/dist/ui/assets/ConversationView-mWaA-B1f.js +1 -0
  230. package/dist/ui/assets/ConversationView-mWaA-B1f.js.gz +0 -0
  231. package/dist/ui/assets/{EmbeddedTerminal-Lx5I9EOJ.js → EmbeddedTerminal-NNoyPA81.js} +1 -1
  232. package/dist/ui/assets/EmbeddedTerminal-NNoyPA81.js.gz +0 -0
  233. package/dist/ui/assets/KnowledgePage-CkxVnRvz.js +24 -0
  234. package/dist/ui/assets/KnowledgePage-CkxVnRvz.js.gz +0 -0
  235. package/dist/ui/assets/{MarketingScreenshotPage-CmDPBHOl.js → MarketingScreenshotPage-B86Gs8jx.js} +2 -2
  236. package/dist/ui/assets/MarketingScreenshotPage-B86Gs8jx.js.gz +0 -0
  237. package/dist/ui/assets/MobileApp-BPs-SXvz.js +1 -0
  238. package/dist/ui/assets/MobileApp-BPs-SXvz.js.gz +0 -0
  239. package/dist/ui/assets/SessionCanvas-xVfDoEtz.js +13 -0
  240. package/dist/ui/assets/SessionCanvas-xVfDoEtz.js.gz +0 -0
  241. package/dist/ui/assets/{StreamdownDemoPage-okKKR2QH.js → StreamdownDemoPage-CvWLzVsv.js} +2 -2
  242. package/dist/ui/assets/StreamdownDemoPage-CvWLzVsv.js.gz +0 -0
  243. package/dist/ui/assets/{TerminalModal-D9jMGZXv.js → TerminalModal-ExOgsuOP.js} +2 -2
  244. package/dist/ui/assets/TerminalModal-ExOgsuOP.js.gz +0 -0
  245. package/dist/ui/assets/ThemeSwitcher-Cgyp5ruu.js +1 -0
  246. package/dist/ui/assets/ThemeSwitcher-Cgyp5ruu.js.gz +0 -0
  247. package/dist/ui/assets/{ThemedSyntaxHighlighter.inner-C1FdIHn0.js → ThemedSyntaxHighlighter.inner-rpCN9S6K.js} +1 -1
  248. package/dist/ui/assets/{antd-DT5ackd0.js → antd-BCqimh1J.js} +5 -5
  249. package/dist/ui/assets/{antd-DT5ackd0.js.gz → antd-BCqimh1J.js.gz} +0 -0
  250. package/dist/ui/assets/architecture-U656AL7Q-BxSQIjrE.js +1 -0
  251. package/dist/ui/assets/{architectureDiagram-VXUJARFQ-DwTJGGoj.js → architectureDiagram-VXUJARFQ-pDpGHSqT.js} +1 -1
  252. package/dist/ui/assets/architectureDiagram-VXUJARFQ-pDpGHSqT.js.gz +0 -0
  253. package/dist/ui/assets/{blockDiagram-VD42YOAC-Dh1_TVW2.js → blockDiagram-VD42YOAC-uP8JTJpK.js} +1 -1
  254. package/dist/ui/assets/blockDiagram-VD42YOAC-uP8JTJpK.js.gz +0 -0
  255. package/dist/ui/assets/{c4Diagram-YG6GDRKO-B1e96AcB.js → c4Diagram-YG6GDRKO-qQe72Mm7.js} +1 -1
  256. package/dist/ui/assets/c4Diagram-YG6GDRKO-qQe72Mm7.js.gz +0 -0
  257. package/dist/ui/assets/channel-CoUBs6Zn.js +1 -0
  258. package/dist/ui/assets/{chunk-4BX2VUAB-BODpCjJx.js → chunk-4BX2VUAB-sz-YE8Nt.js} +1 -1
  259. package/dist/ui/assets/chunk-4ZMWKKQ3-3oKtfWXp.js +3 -0
  260. package/dist/ui/assets/chunk-4ZMWKKQ3-3oKtfWXp.js.gz +0 -0
  261. package/dist/ui/assets/chunk-55IACEB6-BS04dgKF.js +1 -0
  262. package/dist/ui/assets/{chunk-ABZYJK2D-DCTXWSzV.js → chunk-ABZYJK2D-t3Gkphds.js} +3 -3
  263. package/dist/ui/assets/chunk-ABZYJK2D-t3Gkphds.js.gz +0 -0
  264. package/dist/ui/assets/{chunk-AGHRB4JF-CbNphBjE.js → chunk-AGHRB4JF-D_QmWxbY.js} +1 -1
  265. package/dist/ui/assets/chunk-AGHRB4JF-D_QmWxbY.js.gz +0 -0
  266. package/dist/ui/assets/{chunk-ATLVNIR6-rWg3qxof.js → chunk-ATLVNIR6-Bmg7-Ufz.js} +1 -1
  267. package/dist/ui/assets/chunk-ATLVNIR6-Bmg7-Ufz.js.gz +0 -0
  268. package/dist/ui/assets/{chunk-B4BG7PRW-CgtLCbpE.js → chunk-B4BG7PRW-dnSEE1u-.js} +1 -1
  269. package/dist/ui/assets/chunk-B4BG7PRW-dnSEE1u-.js.gz +0 -0
  270. package/dist/ui/assets/{chunk-CVBHYZKI-DTL6Zgr0.js → chunk-CVBHYZKI-BStaYnF0.js} +1 -1
  271. package/dist/ui/assets/{chunk-DI55MBZ5-Dwvx2Kva.js → chunk-DI55MBZ5-28dvx6o3.js} +1 -1
  272. package/dist/ui/assets/chunk-DI55MBZ5-28dvx6o3.js.gz +0 -0
  273. package/dist/ui/assets/chunk-EXTU4WIE-X-FURkEh.js +1 -0
  274. package/dist/ui/assets/{chunk-FMBD7UC4-BogA_9CV.js → chunk-FMBD7UC4-C_63gC9S.js} +1 -1
  275. package/dist/ui/assets/{chunk-HN2XXSSU-2blQO3Gb.js → chunk-HN2XXSSU-UFD374KI.js} +1 -1
  276. package/dist/ui/assets/chunk-HN2XXSSU-UFD374KI.js.gz +0 -0
  277. package/dist/ui/assets/{chunk-JA3XYJ7Z-Cr1rmOui.js → chunk-JA3XYJ7Z-B60hLNeR.js} +1 -1
  278. package/dist/ui/assets/chunk-JA3XYJ7Z-B60hLNeR.js.gz +0 -0
  279. package/dist/ui/assets/{chunk-JZLCHNYA-BsgZ79Fa.js → chunk-JZLCHNYA-ButC6pwN.js} +1 -1
  280. package/dist/ui/assets/chunk-JZLCHNYA-ButC6pwN.js.gz +0 -0
  281. package/dist/ui/assets/{chunk-MI3HLSF2-dwYeUy5S.js → chunk-MI3HLSF2-BivYzoSV.js} +1 -1
  282. package/dist/ui/assets/chunk-MI3HLSF2-BivYzoSV.js.gz +0 -0
  283. package/dist/ui/assets/chunk-N4CR4FBY-mVWzo5wJ.js +2 -0
  284. package/dist/ui/assets/chunk-N4CR4FBY-mVWzo5wJ.js.gz +0 -0
  285. package/dist/ui/assets/{chunk-QN33PNHL-DxdIDCAa.js → chunk-QN33PNHL-tXtHZpaG.js} +1 -1
  286. package/dist/ui/assets/{chunk-QXUST7PY-BCK2V0i-.js → chunk-QXUST7PY-DATib_Vv.js} +1 -1
  287. package/dist/ui/assets/chunk-QXUST7PY-DATib_Vv.js.gz +0 -0
  288. package/dist/ui/assets/chunk-QZHKN3VN-y6l249e5.js +1 -0
  289. package/dist/ui/assets/{chunk-S3R3BYOJ-GP3zIxrB.js → chunk-S3R3BYOJ-BEtfmflI.js} +1 -1
  290. package/dist/ui/assets/chunk-S3R3BYOJ-BEtfmflI.js.gz +0 -0
  291. package/dist/ui/assets/{chunk-TZMSLE5B-dX5RaM6g.js → chunk-TZMSLE5B-BY1ZtogK.js} +1 -1
  292. package/dist/ui/assets/chunk-TZMSLE5B-BY1ZtogK.js.gz +0 -0
  293. package/dist/ui/assets/classDiagram-2ON5EDUG-BYvq-uPY.js +1 -0
  294. package/dist/ui/assets/classDiagram-v2-WZHVMYZB-BYvq-uPY.js +1 -0
  295. package/dist/ui/assets/constants-CYzQKfD1.js +1 -0
  296. package/dist/ui/assets/{cose-bilkent-S5V4N54A-Dx0BJVDl.js → cose-bilkent-S5V4N54A-DPvYrqGG.js} +1 -1
  297. package/dist/ui/assets/cose-bilkent-S5V4N54A-DPvYrqGG.js.gz +0 -0
  298. package/dist/ui/assets/{dagre-6UL2VRFP-DiQSUxqN.js → dagre-6UL2VRFP-D800J6qb.js} +1 -1
  299. package/dist/ui/assets/dagre-6UL2VRFP-D800J6qb.js.gz +0 -0
  300. package/dist/ui/assets/{dagre-Bekd9Vdj.js → dagre-TNc4wezg.js} +1 -1
  301. package/dist/ui/assets/dagre-TNc4wezg.js.gz +0 -0
  302. package/dist/ui/assets/{diagram-PSM6KHXK-DtJnDQjc.js → diagram-PSM6KHXK-CGdP9F-X.js} +1 -1
  303. package/dist/ui/assets/diagram-PSM6KHXK-CGdP9F-X.js.gz +0 -0
  304. package/dist/ui/assets/{diagram-QEK2KX5R-CobkCRdj.js → diagram-QEK2KX5R-BD5lOCe5.js} +1 -1
  305. package/dist/ui/assets/diagram-QEK2KX5R-BD5lOCe5.js.gz +0 -0
  306. package/dist/ui/assets/{diagram-S2PKOQOG-DHEZYivc.js → diagram-S2PKOQOG-cp3l22vN.js} +1 -1
  307. package/dist/ui/assets/diagram-S2PKOQOG-cp3l22vN.js.gz +0 -0
  308. package/dist/ui/assets/editor-Cr0W5BQI.js +39 -0
  309. package/dist/ui/assets/editor-Cr0W5BQI.js.gz +0 -0
  310. package/dist/ui/assets/{emoji-B0hLmSLZ.js → emoji-Bv3m24sO.js} +1 -1
  311. package/dist/ui/assets/emoji-Bv3m24sO.js.gz +0 -0
  312. package/dist/ui/assets/{erDiagram-Q2GNP2WA-BVNeTZPQ.js → erDiagram-Q2GNP2WA-CQSXRgqr.js} +1 -1
  313. package/dist/ui/assets/erDiagram-Q2GNP2WA-CQSXRgqr.js.gz +0 -0
  314. package/dist/ui/assets/{flowDiagram-NV44I4VS-C73VFdyk.js → flowDiagram-NV44I4VS-CKcKpkph.js} +1 -1
  315. package/dist/ui/assets/flowDiagram-NV44I4VS-CKcKpkph.js.gz +0 -0
  316. package/dist/ui/assets/{ganttDiagram-LVOFAZNH-B_RosuD1.js → ganttDiagram-LVOFAZNH-DlAHzXO5.js} +1 -1
  317. package/dist/ui/assets/ganttDiagram-LVOFAZNH-DlAHzXO5.js.gz +0 -0
  318. package/dist/ui/assets/{gitGraph-F6HP7TQM-DMFIqn4h.js → gitGraph-F6HP7TQM-DeuXy4B1.js} +1 -1
  319. package/dist/ui/assets/{gitGraphDiagram-NY62KEGX-hxbgwNA1.js → gitGraphDiagram-NY62KEGX-aB-AI4Vq.js} +1 -1
  320. package/dist/ui/assets/gitGraphDiagram-NY62KEGX-aB-AI4Vq.js.gz +0 -0
  321. package/dist/ui/assets/index-B-qHc0o5.js +63 -0
  322. package/dist/ui/assets/index-B-qHc0o5.js.gz +0 -0
  323. package/dist/ui/assets/{info-NVLQJR56-DZ3K-w48.js → info-NVLQJR56-B9PG7xsc.js} +1 -1
  324. package/dist/ui/assets/{infoDiagram-ER5ION4S-CxnBJQu6.js → infoDiagram-ER5ION4S-C5Wpoqim.js} +1 -1
  325. package/dist/ui/assets/{journeyDiagram-XKPGCS4Q-CHYNj-f8.js → journeyDiagram-XKPGCS4Q-CHLziqfS.js} +1 -1
  326. package/dist/ui/assets/journeyDiagram-XKPGCS4Q-CHLziqfS.js.gz +0 -0
  327. package/dist/ui/assets/{kanban-definition-3W4ZIXB7-DQPCCsj2.js → kanban-definition-3W4ZIXB7-Dq7GzQE_.js} +1 -1
  328. package/dist/ui/assets/kanban-definition-3W4ZIXB7-Dq7GzQE_.js.gz +0 -0
  329. package/dist/ui/assets/{line-DBRjKmfa.js → line-DHKNg83I.js} +1 -1
  330. package/dist/ui/assets/{linear-DFao5Wyp.js → linear-BvUfn0I8.js} +1 -1
  331. package/dist/ui/assets/linear-BvUfn0I8.js.gz +0 -0
  332. package/dist/ui/assets/{mermaid-parser.core-DYCfacHj.js → mermaid-parser.core-C6d9tKoo.js} +2 -2
  333. package/dist/ui/assets/mermaid-parser.core-C6d9tKoo.js.gz +0 -0
  334. package/dist/ui/assets/{mermaid.core-C6xGFSdE.js → mermaid.core-CxE5KezR.js} +3 -3
  335. package/dist/ui/assets/mermaid.core-CxE5KezR.js.gz +0 -0
  336. package/dist/ui/assets/{mindmap-definition-VGOIOE7T-L3Pw-YM7.js → mindmap-definition-VGOIOE7T-DmPoQ48w.js} +1 -1
  337. package/dist/ui/assets/mindmap-definition-VGOIOE7T-DmPoQ48w.js.gz +0 -0
  338. package/dist/ui/assets/{packet-BFZMPI3H-CpL6iNoa.js → packet-BFZMPI3H-JZEkVZxU.js} +1 -1
  339. package/dist/ui/assets/{particles-CT8hcJOA.js → particles-CxMmUw86.js} +1 -1
  340. package/dist/ui/assets/particles-CxMmUw86.js.gz +0 -0
  341. package/dist/ui/assets/{pie-7BOR55EZ-hTqChbTo.js → pie-7BOR55EZ-_1II5pYQ.js} +1 -1
  342. package/dist/ui/assets/{pieDiagram-ADFJNKIX-Bf4Nou75.js → pieDiagram-ADFJNKIX-DrNkH33i.js} +1 -1
  343. package/dist/ui/assets/pieDiagram-ADFJNKIX-DrNkH33i.js.gz +0 -0
  344. package/dist/ui/assets/{quadrantDiagram-AYHSOK5B-DpjUTLB1.js → quadrantDiagram-AYHSOK5B-DOpC-HEF.js} +1 -1
  345. package/dist/ui/assets/quadrantDiagram-AYHSOK5B-DOpC-HEF.js.gz +0 -0
  346. package/dist/ui/assets/{radar-NHE76QYJ-myy7OENC.js → radar-NHE76QYJ-DDmqhzEZ.js} +1 -1
  347. package/dist/ui/assets/{reactflow-Cubtnk8i.js → reactflow-D98uPOMq.js} +1 -1
  348. package/dist/ui/assets/reactflow-D98uPOMq.js.gz +0 -0
  349. package/dist/ui/assets/{requirementDiagram-UZGBJVZJ-Bfrfh-0-.js → requirementDiagram-UZGBJVZJ-Bzx0iEPP.js} +1 -1
  350. package/dist/ui/assets/requirementDiagram-UZGBJVZJ-Bzx0iEPP.js.gz +0 -0
  351. package/dist/ui/assets/{sandpack-C58bwfIS.js → sandpack-059Z4UWP.js} +1 -1
  352. package/dist/ui/assets/sandpack-059Z4UWP.js.gz +0 -0
  353. package/dist/ui/assets/sandpackDefaults-CPMNDsw7.js +1 -0
  354. package/dist/ui/assets/sandpackDefaults-CPMNDsw7.js.gz +0 -0
  355. package/dist/ui/assets/{sankeyDiagram-TZEHDZUN-ClZAZ6va.js → sankeyDiagram-TZEHDZUN-Do9pvfDv.js} +1 -1
  356. package/dist/ui/assets/sankeyDiagram-TZEHDZUN-Do9pvfDv.js.gz +0 -0
  357. package/dist/ui/assets/{sequenceDiagram-WL72ISMW-CNgly63p.js → sequenceDiagram-WL72ISMW-CN8neUTA.js} +1 -1
  358. package/dist/ui/assets/sequenceDiagram-WL72ISMW-CN8neUTA.js.gz +0 -0
  359. package/dist/ui/assets/{src-DAeyG22O.js → src-DEbsv3pp.js} +2 -2
  360. package/dist/ui/assets/src-DEbsv3pp.js.gz +0 -0
  361. package/dist/ui/assets/{stateDiagram-FKZM4ZOC-BrEAoDpE.js → stateDiagram-FKZM4ZOC-BluWJi8n.js} +1 -1
  362. package/dist/ui/assets/stateDiagram-FKZM4ZOC-BluWJi8n.js.gz +0 -0
  363. package/dist/ui/assets/stateDiagram-v2-4FDKWEC3-DeyqBMDR.js +1 -0
  364. package/dist/ui/assets/{streamdown-BdAVfkeF.js → streamdown-BT1twtFc.js} +5 -5
  365. package/dist/ui/assets/streamdown-BT1twtFc.js.gz +0 -0
  366. package/dist/ui/assets/{syntax-BOfTnQiy.js → syntax-CBu6nLfm.js} +1 -1
  367. package/dist/ui/assets/syntax-CBu6nLfm.js.gz +0 -0
  368. package/dist/ui/assets/{timeline-definition-IT6M3QCI-CaRH3k4l.js → timeline-definition-IT6M3QCI-WdUNkiRj.js} +1 -1
  369. package/dist/ui/assets/timeline-definition-IT6M3QCI-WdUNkiRj.js.gz +0 -0
  370. package/dist/ui/assets/{treemap-KMMF4GRG-CUaLOV_B.js → treemap-KMMF4GRG-CoriU4Jl.js} +1 -1
  371. package/dist/ui/assets/{useUserLocalStorage-C8sgXgXR.js → useUserLocalStorage-GidNiOPC.js} +1 -1
  372. package/dist/ui/assets/useUserLocalStorage-GidNiOPC.js.gz +0 -0
  373. package/dist/ui/assets/{xychartDiagram-PRI3JC2R-BlhkI9T_.js → xychartDiagram-PRI3JC2R-CgBAKNt2.js} +1 -1
  374. package/dist/ui/assets/xychartDiagram-PRI3JC2R-CgBAKNt2.js.gz +0 -0
  375. package/dist/ui/index.html +9 -8
  376. package/dist/ui/index.html.gz +0 -0
  377. package/package.json +2 -2
  378. package/dist/ui/assets/AgorEmojiPickerInner-DQjr8M3_.js +0 -1
  379. package/dist/ui/assets/App-hJtcOxHv.js +0 -5
  380. package/dist/ui/assets/App-hJtcOxHv.js.gz +0 -0
  381. package/dist/ui/assets/AppNode-BhuMpn8O.js +0 -1
  382. package/dist/ui/assets/AppNode-BhuMpn8O.js.gz +0 -0
  383. package/dist/ui/assets/ArtifactConsentModal-oMMzRn8L.js.gz +0 -0
  384. package/dist/ui/assets/ArtifactFullscreenPage-B3wT8t8f.js +0 -9
  385. package/dist/ui/assets/ArtifactFullscreenPage-B3wT8t8f.js.gz +0 -0
  386. package/dist/ui/assets/ArtifactNode-BzQcrwFS.js +0 -9
  387. package/dist/ui/assets/ArtifactNode-BzQcrwFS.js.gz +0 -0
  388. package/dist/ui/assets/AutocompleteTextarea-Dau-V_30.js +0 -19
  389. package/dist/ui/assets/AutocompleteTextarea-Dau-V_30.js.gz +0 -0
  390. package/dist/ui/assets/BoardObjectNodes-DdKWv_ZT.js +0 -34
  391. package/dist/ui/assets/BoardObjectNodes-DdKWv_ZT.js.gz +0 -0
  392. package/dist/ui/assets/CodeEditor.inner-Cuj6RuLL.js.gz +0 -0
  393. package/dist/ui/assets/ConversationView-9-3ma1u-.js +0 -1
  394. package/dist/ui/assets/ConversationView-9-3ma1u-.js.gz +0 -0
  395. package/dist/ui/assets/EmbeddedTerminal-Lx5I9EOJ.js.gz +0 -0
  396. package/dist/ui/assets/KnowledgePage-Dz8YAMYC.js +0 -24
  397. package/dist/ui/assets/KnowledgePage-Dz8YAMYC.js.gz +0 -0
  398. package/dist/ui/assets/MarketingScreenshotPage-CmDPBHOl.js.gz +0 -0
  399. package/dist/ui/assets/MobileApp-BpgSG_gz.js +0 -1
  400. package/dist/ui/assets/MobileApp-BpgSG_gz.js.gz +0 -0
  401. package/dist/ui/assets/SessionCanvas-B6_mtlxK.js +0 -13
  402. package/dist/ui/assets/SessionCanvas-B6_mtlxK.js.gz +0 -0
  403. package/dist/ui/assets/StreamdownDemoPage-okKKR2QH.js.gz +0 -0
  404. package/dist/ui/assets/TerminalModal-D9jMGZXv.js.gz +0 -0
  405. package/dist/ui/assets/ThemeSwitcher-D9HgT37l.js +0 -1
  406. package/dist/ui/assets/ThemeSwitcher-D9HgT37l.js.gz +0 -0
  407. package/dist/ui/assets/architecture-U656AL7Q-DMnxkQRZ.js +0 -1
  408. package/dist/ui/assets/architectureDiagram-VXUJARFQ-DwTJGGoj.js.gz +0 -0
  409. package/dist/ui/assets/blockDiagram-VD42YOAC-Dh1_TVW2.js.gz +0 -0
  410. package/dist/ui/assets/c4Diagram-YG6GDRKO-B1e96AcB.js.gz +0 -0
  411. package/dist/ui/assets/channel-Jv4dT4S5.js +0 -1
  412. package/dist/ui/assets/chunk-55IACEB6-lJXvUquf.js +0 -1
  413. package/dist/ui/assets/chunk-ABZYJK2D-DCTXWSzV.js.gz +0 -0
  414. package/dist/ui/assets/chunk-AGHRB4JF-CbNphBjE.js.gz +0 -0
  415. package/dist/ui/assets/chunk-ATLVNIR6-rWg3qxof.js.gz +0 -0
  416. package/dist/ui/assets/chunk-B4BG7PRW-CgtLCbpE.js.gz +0 -0
  417. package/dist/ui/assets/chunk-DI55MBZ5-Dwvx2Kva.js.gz +0 -0
  418. package/dist/ui/assets/chunk-EXTU4WIE-DHyaqTsP.js +0 -1
  419. package/dist/ui/assets/chunk-HN2XXSSU-2blQO3Gb.js.gz +0 -0
  420. package/dist/ui/assets/chunk-JA3XYJ7Z-Cr1rmOui.js.gz +0 -0
  421. package/dist/ui/assets/chunk-JZLCHNYA-BsgZ79Fa.js.gz +0 -0
  422. package/dist/ui/assets/chunk-MI3HLSF2-dwYeUy5S.js.gz +0 -0
  423. package/dist/ui/assets/chunk-N4CR4FBY-DEMgSRVe.js +0 -2
  424. package/dist/ui/assets/chunk-N4CR4FBY-DEMgSRVe.js.gz +0 -0
  425. package/dist/ui/assets/chunk-QXUST7PY-BCK2V0i-.js.gz +0 -0
  426. package/dist/ui/assets/chunk-QZHKN3VN-CALjGrEE.js +0 -1
  427. package/dist/ui/assets/chunk-S3R3BYOJ-GP3zIxrB.js.gz +0 -0
  428. package/dist/ui/assets/chunk-TZMSLE5B-dX5RaM6g.js.gz +0 -0
  429. package/dist/ui/assets/classDiagram-2ON5EDUG-C3_RVP70.js +0 -1
  430. package/dist/ui/assets/classDiagram-v2-WZHVMYZB-C3_RVP70.js +0 -1
  431. package/dist/ui/assets/constants-GjIDNVyt.js +0 -1
  432. package/dist/ui/assets/cose-bilkent-S5V4N54A-Dx0BJVDl.js.gz +0 -0
  433. package/dist/ui/assets/dagre-6UL2VRFP-DiQSUxqN.js.gz +0 -0
  434. package/dist/ui/assets/dagre-Bekd9Vdj.js.gz +0 -0
  435. package/dist/ui/assets/diagram-PSM6KHXK-DtJnDQjc.js.gz +0 -0
  436. package/dist/ui/assets/diagram-QEK2KX5R-CobkCRdj.js.gz +0 -0
  437. package/dist/ui/assets/diagram-S2PKOQOG-DHEZYivc.js.gz +0 -0
  438. package/dist/ui/assets/editor-DQIG-JYZ.js +0 -43
  439. package/dist/ui/assets/editor-DQIG-JYZ.js.gz +0 -0
  440. package/dist/ui/assets/emoji-B0hLmSLZ.js.gz +0 -0
  441. package/dist/ui/assets/erDiagram-Q2GNP2WA-BVNeTZPQ.js.gz +0 -0
  442. package/dist/ui/assets/flowDiagram-NV44I4VS-C73VFdyk.js.gz +0 -0
  443. package/dist/ui/assets/ganttDiagram-LVOFAZNH-B_RosuD1.js.gz +0 -0
  444. package/dist/ui/assets/gitGraphDiagram-NY62KEGX-hxbgwNA1.js.gz +0 -0
  445. package/dist/ui/assets/index-DTz1Dif6.js +0 -64
  446. package/dist/ui/assets/index-DTz1Dif6.js.gz +0 -0
  447. package/dist/ui/assets/journeyDiagram-XKPGCS4Q-CHYNj-f8.js.gz +0 -0
  448. package/dist/ui/assets/kanban-definition-3W4ZIXB7-DQPCCsj2.js.gz +0 -0
  449. package/dist/ui/assets/linear-DFao5Wyp.js.gz +0 -0
  450. package/dist/ui/assets/mermaid-parser.core-DYCfacHj.js.gz +0 -0
  451. package/dist/ui/assets/mermaid.core-C6xGFSdE.js.gz +0 -0
  452. package/dist/ui/assets/mindmap-definition-VGOIOE7T-L3Pw-YM7.js.gz +0 -0
  453. package/dist/ui/assets/particles-CT8hcJOA.js.gz +0 -0
  454. package/dist/ui/assets/pieDiagram-ADFJNKIX-Bf4Nou75.js.gz +0 -0
  455. package/dist/ui/assets/quadrantDiagram-AYHSOK5B-DpjUTLB1.js.gz +0 -0
  456. package/dist/ui/assets/reactflow-Cubtnk8i.js.gz +0 -0
  457. package/dist/ui/assets/requirementDiagram-UZGBJVZJ-Bfrfh-0-.js.gz +0 -0
  458. package/dist/ui/assets/sandpack-C58bwfIS.js.gz +0 -0
  459. package/dist/ui/assets/sandpackDefaults-Bkga8XAE.js +0 -1
  460. package/dist/ui/assets/sankeyDiagram-TZEHDZUN-ClZAZ6va.js.gz +0 -0
  461. package/dist/ui/assets/sequenceDiagram-WL72ISMW-CNgly63p.js.gz +0 -0
  462. package/dist/ui/assets/src-DAeyG22O.js.gz +0 -0
  463. package/dist/ui/assets/stateDiagram-FKZM4ZOC-BrEAoDpE.js.gz +0 -0
  464. package/dist/ui/assets/stateDiagram-v2-4FDKWEC3-BNL52_oN.js +0 -1
  465. package/dist/ui/assets/streamdown-BdAVfkeF.js.gz +0 -0
  466. package/dist/ui/assets/syntax-BOfTnQiy.js.gz +0 -0
  467. package/dist/ui/assets/timeline-definition-IT6M3QCI-CaRH3k4l.js.gz +0 -0
  468. package/dist/ui/assets/useUserLocalStorage-C8sgXgXR.js.gz +0 -0
  469. package/dist/ui/assets/xychartDiagram-PRI3JC2R-BlhkI9T_.js.gz +0 -0
@@ -791,6 +791,21 @@ var init_file = __esm({
791
791
  });
792
792
 
793
793
  // src/types/gateway.ts
794
+ function getRequiredSecretFields(channelType, config) {
795
+ switch (channelType) {
796
+ case "slack": {
797
+ const wantsInbound = config.connection_mode === "socket" || config.enable_channels === true || config.enable_groups === true || config.enable_mpim === true;
798
+ const outboundOnly = config.outbound_enabled === true && !wantsInbound;
799
+ return outboundOnly ? ["bot_token"] : ["bot_token", "app_token"];
800
+ }
801
+ case "github":
802
+ return ["private_key"];
803
+ case "teams":
804
+ return ["app_password"];
805
+ default:
806
+ return [];
807
+ }
808
+ }
794
809
  var GATEWAY_SENSITIVE_CONFIG_FIELDS, GATEWAY_REDACTED_SENTINEL;
795
810
  var init_gateway = __esm({
796
811
  "src/types/gateway.ts"() {
@@ -4927,11 +4942,11 @@ __export(db_exports, {
4927
4942
  activeGroupGrantAccessExists: () => activeGroupGrantAccessExists,
4928
4943
  advisoryLockKeyForUuid: () => advisoryLockKeyForUuid,
4929
4944
  alignedBoardDefaultVisible: () => alignedBoardDefaultVisible,
4930
- and: () => import_drizzle_orm36.and,
4945
+ and: () => import_drizzle_orm37.and,
4931
4946
  appVariables: () => appVariables3,
4932
4947
  artifactTrustGrants: () => artifactTrustGrants3,
4933
4948
  artifacts: () => artifacts3,
4934
- asc: () => import_drizzle_orm36.asc,
4949
+ asc: () => import_drizzle_orm37.asc,
4935
4950
  assertUsableBootstrapAdminPassword: () => assertUsableBootstrapAdminPassword,
4936
4951
  attachHiddenTenant: () => attachHiddenTenant,
4937
4952
  boardComments: () => boardComments3,
@@ -4947,7 +4962,7 @@ __export(db_exports, {
4947
4962
  cards: () => cards3,
4948
4963
  checkMigrationStatus: () => checkMigrationStatus,
4949
4964
  compare: () => compare,
4950
- count: () => import_drizzle_orm36.count,
4965
+ count: () => import_drizzle_orm37.count,
4951
4966
  createDatabase: () => createDatabase,
4952
4967
  createDatabaseAsync: () => createDatabaseAsync,
4953
4968
  createDefaultAdminUser: () => createDefaultAdminUser,
@@ -4958,10 +4973,10 @@ __export(db_exports, {
4958
4973
  dateTruncUtc: () => dateTruncUtc,
4959
4974
  decryptApiKey: () => decryptApiKey,
4960
4975
  deleteFrom: () => deleteFrom,
4961
- desc: () => import_drizzle_orm36.desc,
4976
+ desc: () => import_drizzle_orm37.desc,
4962
4977
  encryptApiKey: () => encryptApiKey,
4963
4978
  enqueueTenantDatabasePostCommitCallback: () => enqueueTenantDatabasePostCommitCallback,
4964
- eq: () => import_drizzle_orm36.eq,
4979
+ eq: () => import_drizzle_orm37.eq,
4965
4980
  executeAll: () => executeAll,
4966
4981
  executeGet: () => executeGet,
4967
4982
  executeRaw: () => executeRaw,
@@ -4982,11 +4997,11 @@ __export(db_exports, {
4982
4997
  getUserByEmail: () => getUserByEmail,
4983
4998
  groupMemberships: () => groupMemberships3,
4984
4999
  groups: () => groups3,
4985
- gt: () => import_drizzle_orm36.gt,
4986
- gte: () => import_drizzle_orm36.gte,
5000
+ gt: () => import_drizzle_orm37.gt,
5001
+ gte: () => import_drizzle_orm37.gte,
4987
5002
  hash: () => hash,
4988
5003
  identifyUrlParam: () => identifyUrlParam,
4989
- inArray: () => import_drizzle_orm36.inArray,
5004
+ inArray: () => import_drizzle_orm37.inArray,
4990
5005
  initializeDatabase: () => initializeDatabase,
4991
5006
  insert: () => insert,
4992
5007
  insertOne: () => insertOne,
@@ -5005,13 +5020,13 @@ __export(db_exports, {
5005
5020
  kbGraphNodes: () => kbGraphNodes3,
5006
5021
  kbNamespaceAcl: () => kbNamespaceAcl3,
5007
5022
  kbNamespaces: () => kbNamespaces3,
5008
- like: () => import_drizzle_orm36.like,
5023
+ like: () => import_drizzle_orm37.like,
5009
5024
  lockRowForUpdate: () => lockRowForUpdate,
5010
- lt: () => import_drizzle_orm36.lt,
5011
- lte: () => import_drizzle_orm36.lte,
5025
+ lt: () => import_drizzle_orm37.lt,
5026
+ lte: () => import_drizzle_orm37.lte,
5012
5027
  mcpServers: () => mcpServers3,
5013
5028
  messages: () => messages3,
5014
- or: () => import_drizzle_orm36.or,
5029
+ or: () => import_drizzle_orm37.or,
5015
5030
  reattributeLegacyAnonymousRows: () => reattributeLegacyAnonymousRows,
5016
5031
  repos: () => repos3,
5017
5032
  requireCurrentTenantId: () => requireCurrentTenantId,
@@ -5030,7 +5045,7 @@ __export(db_exports, {
5030
5045
  sessionRelationships: () => sessionRelationships3,
5031
5046
  sessions: () => sessions3,
5032
5047
  shortId: () => shortId,
5033
- sql: () => import_drizzle_orm36.sql,
5048
+ sql: () => import_drizzle_orm37.sql,
5034
5049
  tasks: () => tasks3,
5035
5050
  tenantDatabaseScope: () => tenantDatabaseScope,
5036
5051
  threadSessionMap: () => threadSessionMap3,
@@ -5053,7 +5068,7 @@ __export(db_exports, {
5053
5068
  });
5054
5069
  module.exports = __toCommonJS(db_exports);
5055
5070
  init_cjs_shims();
5056
- var import_drizzle_orm36 = require("drizzle-orm");
5071
+ var import_drizzle_orm37 = require("drizzle-orm");
5057
5072
  var import_bcryptjs3 = __toESM(require("bcryptjs"), 1);
5058
5073
  init_ids();
5059
5074
 
@@ -8204,6 +8219,63 @@ var BranchRepository = class {
8204
8219
  }
8205
8220
  return Array.from(userIds);
8206
8221
  }
8222
+ /**
8223
+ * Find non-archived branches whose explicit filesystem access set can change
8224
+ * when membership in the given group changes.
8225
+ *
8226
+ * Keep this inverse lookup in lockstep with findExplicitFsAccessUserIds():
8227
+ * both encode which group grants materialize into branch-folder access.
8228
+ * App-only grants (`fs_access = 'none'`) are intentionally excluded because
8229
+ * membership changes for those grants do not require branch-folder mutation.
8230
+ */
8231
+ async findExplicitFsAccessBranchIdsForGroup(groupId) {
8232
+ const directRows = await select(this.db, { branch_id: branchGroupGrants3.branch_id }).from(branchGroupGrants3).innerJoin(branches3, (0, import_drizzle_orm15.eq)(branches3.branch_id, branchGroupGrants3.branch_id)).innerJoin(
8233
+ groups3,
8234
+ (0, import_drizzle_orm15.and)((0, import_drizzle_orm15.eq)(groups3.group_id, branchGroupGrants3.group_id), (0, import_drizzle_orm15.eq)(groups3.archived, false))
8235
+ ).where(
8236
+ (0, import_drizzle_orm15.and)(
8237
+ (0, import_drizzle_orm15.eq)(branchGroupGrants3.group_id, groupId),
8238
+ (0, import_drizzle_orm15.eq)(branches3.archived, false),
8239
+ (0, import_drizzle_orm15.inArray)(
8240
+ import_drizzle_orm15.sql`coalesce(${branchGroupGrants3.fs_access}, 'read')`,
8241
+ FS_ACCESS_BRANCH_PERMISSIONS
8242
+ )
8243
+ )
8244
+ ).all();
8245
+ const boardRows = await select(this.db, { branch_id: branches3.branch_id }).from(boardGroupGrants3).innerJoin(
8246
+ groups3,
8247
+ (0, import_drizzle_orm15.and)((0, import_drizzle_orm15.eq)(groups3.group_id, boardGroupGrants3.group_id), (0, import_drizzle_orm15.eq)(groups3.archived, false))
8248
+ ).innerJoin(
8249
+ boards3,
8250
+ (0, import_drizzle_orm15.and)(
8251
+ (0, import_drizzle_orm15.eq)(boards3.board_id, boardGroupGrants3.board_id),
8252
+ (0, import_drizzle_orm15.eq)(import_drizzle_orm15.sql`coalesce(${jsonExtract(this.db, boards3.data, "access_mode")}, 'shared')`, "shared")
8253
+ )
8254
+ ).innerJoin(
8255
+ branches3,
8256
+ (0, import_drizzle_orm15.and)(
8257
+ (0, import_drizzle_orm15.eq)(branches3.board_id, boardGroupGrants3.board_id),
8258
+ (0, import_drizzle_orm15.eq)(branches3.permission_source, "board"),
8259
+ (0, import_drizzle_orm15.eq)(branches3.archived, false)
8260
+ )
8261
+ ).where(
8262
+ (0, import_drizzle_orm15.and)(
8263
+ (0, import_drizzle_orm15.eq)(boardGroupGrants3.group_id, groupId),
8264
+ (0, import_drizzle_orm15.inArray)(
8265
+ import_drizzle_orm15.sql`coalesce(${boardGroupGrants3.fs_access}, 'read')`,
8266
+ FS_ACCESS_BRANCH_PERMISSIONS
8267
+ )
8268
+ )
8269
+ ).all();
8270
+ const branchIds = /* @__PURE__ */ new Set();
8271
+ for (const row of directRows) {
8272
+ branchIds.add(row.branch_id);
8273
+ }
8274
+ for (const row of boardRows) {
8275
+ branchIds.add(row.branch_id);
8276
+ }
8277
+ return Array.from(branchIds);
8278
+ }
8207
8279
  async findBoardAlignedBranches(boardId) {
8208
8280
  const rows = await select(this.db).from(branches3).where(
8209
8281
  (0, import_drizzle_orm15.and)(
@@ -9211,6 +9283,60 @@ var BoardRepository = class {
9211
9283
  );
9212
9284
  }
9213
9285
  }
9286
+ /**
9287
+ * Shallow-merge field patches into existing board objects in a single
9288
+ * read-modify-write.
9289
+ *
9290
+ * Unlike upsertBoardObject (which fully replaces the object value, dropping
9291
+ * omitted fields), this overwrites ONLY the provided keys and leaves the rest
9292
+ * of each object intact — so a narrow change (e.g. a zIndex reorder) has a
9293
+ * smaller blast radius and won't clobber a field edited via a different patch
9294
+ * call. Multiple objects in one call are merged before a single write, so a
9295
+ * forward/backward swap touches both neighbors in one update.
9296
+ *
9297
+ * Objects that no longer exist are SKIPPED, never re-created — so a swap can't
9298
+ * resurrect a neighbor deleted between the client's read and this write.
9299
+ *
9300
+ * Only an explicit allowlist of fields can be merged (currently just `zIndex`,
9301
+ * which is also clamped into the board-object band [1, 499] so it can never be
9302
+ * pushed onto the card (500) / comment (1000) layers). Any other key in a
9303
+ * patch is ignored, so this narrow action cannot reshape an object (e.g. flip
9304
+ * its `type`) the way a full upsert could.
9305
+ *
9306
+ * NOTE: this is NOT atomic against concurrent writers. Like every other board
9307
+ * writer, the findById → update sequence has a lost-update window: a write
9308
+ * that lands between the read and the update can be overwritten (last-write-
9309
+ * wins). Merging only the patched keys narrows that window's blast radius
9310
+ * versus a full-object upsert, but does not close it.
9311
+ */
9312
+ async mergeBoardObjectFields(boardId, patches) {
9313
+ const Z_MIN = 1;
9314
+ const Z_MAX = 499;
9315
+ try {
9316
+ const fullId = await this.resolveId(boardId);
9317
+ const current = await this.findById(fullId);
9318
+ if (!current) {
9319
+ throw new EntityNotFoundError("Board", boardId);
9320
+ }
9321
+ const updatedObjects = { ...current.objects || {} };
9322
+ for (const [objectId, fields] of Object.entries(patches)) {
9323
+ const existing = updatedObjects[objectId];
9324
+ if (!existing) continue;
9325
+ const { zIndex } = fields;
9326
+ if (typeof zIndex !== "number" || !Number.isFinite(zIndex)) continue;
9327
+ const safeZIndex = Math.min(Z_MAX, Math.max(Z_MIN, zIndex));
9328
+ updatedObjects[objectId] = { ...existing, zIndex: safeZIndex };
9329
+ }
9330
+ return this.update(fullId, { objects: updatedObjects });
9331
+ } catch (error) {
9332
+ if (error instanceof RepositoryError) throw error;
9333
+ if (error instanceof EntityNotFoundError) throw error;
9334
+ throw new RepositoryError(
9335
+ `Failed to merge board object fields: ${error instanceof Error ? error.message : String(error)}`,
9336
+ error
9337
+ );
9338
+ }
9339
+ }
9214
9340
  /**
9215
9341
  * DEPRECATED: Delete a zone and handle associated sessions
9216
9342
  * TODO: Reimplement using board-objects table
@@ -9945,6 +10071,28 @@ var GatewayChannelRepository = class {
9945
10071
  agentic_config: encryptedAgenticConfig
9946
10072
  };
9947
10073
  }
10074
+ /**
10075
+ * Enforce the "enabled requires secrets" invariant on every write path.
10076
+ *
10077
+ * An enabled channel can never exist without the secrets its type needs to
10078
+ * function. Runs on the post-merge, decrypted config so a patch that only
10079
+ * flips `enabled: true` on a channel with already-stored tokens passes.
10080
+ * Disabled ("draft") channels are exempt.
10081
+ */
10082
+ assertRequiredSecretsWhenEnabled(channel) {
10083
+ if (channel.enabled === false) return;
10084
+ const channelType = channel.channel_type ?? "slack";
10085
+ const config = channel.config ?? {};
10086
+ const missing = getRequiredSecretFields(channelType, config).filter((field) => {
10087
+ const value = config[field];
10088
+ return typeof value !== "string" || value.trim() === "" || value === GATEWAY_REDACTED_SENTINEL;
10089
+ });
10090
+ if (missing.length > 0) {
10091
+ throw new RepositoryError(
10092
+ `Cannot enable ${channelType} gateway channel: missing required secret(s) ${missing.join(", ")}`
10093
+ );
10094
+ }
10095
+ }
9948
10096
  /**
9949
10097
  * Resolve short ID to full ID
9950
10098
  */
@@ -9976,6 +10124,7 @@ var GatewayChannelRepository = class {
9976
10124
  id: data.id ?? generateId(),
9977
10125
  channel_key: data.channel_key ?? generateId()
9978
10126
  });
10127
+ this.assertRequiredSecretsWhenEnabled(data);
9979
10128
  await insert(this.db, gatewayChannels3).values(insertData).run();
9980
10129
  const row = await select(this.db).from(gatewayChannels3).where((0, import_drizzle_orm19.eq)(gatewayChannels3.id, insertData.id)).one();
9981
10130
  if (!row) {
@@ -10042,6 +10191,7 @@ var GatewayChannelRepository = class {
10042
10191
  }
10043
10192
  merged.config = mergedConfig;
10044
10193
  }
10194
+ this.assertRequiredSecretsWhenEnabled(merged);
10045
10195
  const insertData = this.channelToInsert(merged);
10046
10196
  await update(this.db, gatewayChannels3).set({
10047
10197
  name: insertData.name,
@@ -11550,12 +11700,165 @@ var KnowledgeGraphRepository = class {
11550
11700
 
11551
11701
  // src/db/repositories/mcp-servers.ts
11552
11702
  init_cjs_shims();
11553
- var import_drizzle_orm22 = require("drizzle-orm");
11703
+ var import_drizzle_orm24 = require("drizzle-orm");
11554
11704
  init_ids();
11555
11705
 
11556
11706
  // src/tools/mcp/auth-secrets.ts
11557
11707
  init_cjs_shims();
11558
11708
 
11709
+ // src/mcp/template-resolver.ts
11710
+ init_cjs_shims();
11711
+
11712
+ // src/config/env-resolver.ts
11713
+ init_cjs_shims();
11714
+ var import_drizzle_orm23 = require("drizzle-orm");
11715
+ init_database_wrapper();
11716
+
11717
+ // src/db/repositories/session-env-selections.ts
11718
+ init_cjs_shims();
11719
+ var import_drizzle_orm22 = require("drizzle-orm");
11720
+ init_database_wrapper();
11721
+ init_schema();
11722
+ var SessionEnvSelectionRepository = class {
11723
+ constructor(db) {
11724
+ this.db = db;
11725
+ }
11726
+ /** Shared SELECT for a session's rows — single source of truth for reads. */
11727
+ async fetchRows(sessionId) {
11728
+ try {
11729
+ return await select(this.db).from(sessionEnvSelections3).where((0, import_drizzle_orm22.eq)(sessionEnvSelections3.session_id, sessionId)).all();
11730
+ } catch (error) {
11731
+ throw new RepositoryError(
11732
+ `Failed to list session env selections: ${error instanceof Error ? error.message : String(error)}`,
11733
+ error
11734
+ );
11735
+ }
11736
+ }
11737
+ /** List selected env var names for a session (not hydrated). */
11738
+ async listNames(sessionId) {
11739
+ const rows = await this.fetchRows(sessionId);
11740
+ return rows.map((r) => r.env_var_name);
11741
+ }
11742
+ /** Return a Set for fast membership checks in the env resolver. */
11743
+ async asSet(sessionId) {
11744
+ const names = await this.listNames(sessionId);
11745
+ return new Set(names);
11746
+ }
11747
+ /** Full rows with timestamps — for the REST API response. */
11748
+ async list(sessionId) {
11749
+ const rows = await this.fetchRows(sessionId);
11750
+ return rows.map((r) => ({
11751
+ session_id: r.session_id,
11752
+ env_var_name: r.env_var_name,
11753
+ created_at: new Date(r.created_at)
11754
+ }));
11755
+ }
11756
+ /** Add a selection. No-op if it already exists. */
11757
+ async add(sessionId, envVarName) {
11758
+ try {
11759
+ const existing = await select(this.db).from(sessionEnvSelections3).where(
11760
+ (0, import_drizzle_orm22.and)(
11761
+ (0, import_drizzle_orm22.eq)(sessionEnvSelections3.session_id, sessionId),
11762
+ (0, import_drizzle_orm22.eq)(sessionEnvSelections3.env_var_name, envVarName)
11763
+ )
11764
+ ).one();
11765
+ if (existing) return;
11766
+ await insert(this.db, sessionEnvSelections3).values({
11767
+ session_id: sessionId,
11768
+ env_var_name: envVarName,
11769
+ created_at: /* @__PURE__ */ new Date()
11770
+ }).run();
11771
+ } catch (error) {
11772
+ throw new RepositoryError(
11773
+ `Failed to add session env selection: ${error instanceof Error ? error.message : String(error)}`,
11774
+ error
11775
+ );
11776
+ }
11777
+ }
11778
+ /** Remove a selection. No-op if it doesn't exist. */
11779
+ async remove(sessionId, envVarName) {
11780
+ try {
11781
+ await deleteFrom(this.db, sessionEnvSelections3).where(
11782
+ (0, import_drizzle_orm22.and)(
11783
+ (0, import_drizzle_orm22.eq)(sessionEnvSelections3.session_id, sessionId),
11784
+ (0, import_drizzle_orm22.eq)(sessionEnvSelections3.env_var_name, envVarName)
11785
+ )
11786
+ ).run();
11787
+ } catch (error) {
11788
+ throw new RepositoryError(
11789
+ `Failed to remove session env selection: ${error instanceof Error ? error.message : String(error)}`,
11790
+ error
11791
+ );
11792
+ }
11793
+ }
11794
+ /** Bulk replace — deletes all existing rows, inserts the new set. */
11795
+ async setAll(sessionId, envVarNames) {
11796
+ try {
11797
+ await deleteFrom(this.db, sessionEnvSelections3).where((0, import_drizzle_orm22.eq)(sessionEnvSelections3.session_id, sessionId)).run();
11798
+ if (envVarNames.length === 0) return;
11799
+ const now = /* @__PURE__ */ new Date();
11800
+ await insert(this.db, sessionEnvSelections3).values(
11801
+ envVarNames.map((name) => ({
11802
+ session_id: sessionId,
11803
+ env_var_name: name,
11804
+ created_at: now
11805
+ }))
11806
+ ).run();
11807
+ } catch (error) {
11808
+ throw new RepositoryError(
11809
+ `Failed to set session env selections: ${error instanceof Error ? error.message : String(error)}`,
11810
+ error
11811
+ );
11812
+ }
11813
+ }
11814
+ };
11815
+
11816
+ // src/config/env-resolver.ts
11817
+ init_schema();
11818
+
11819
+ // src/config/env-blocklist.ts
11820
+ init_cjs_shims();
11821
+ var BLOCKED_ENV_PATTERNS = Object.freeze([
11822
+ /^LD_/i,
11823
+ /^DYLD_/i,
11824
+ /^PYTHON(?!_AGOR_)/i
11825
+ ]);
11826
+
11827
+ // src/config/env-vars.ts
11828
+ init_cjs_shims();
11829
+ var V05_SCOPES = ["global", "session"];
11830
+ var V05_SCOPE_SET = new Set(V05_SCOPES);
11831
+ function normalizeStoredEnvVar(raw) {
11832
+ if (typeof raw === "string") {
11833
+ return { value_encrypted: raw, scope: "global" };
11834
+ }
11835
+ return {
11836
+ value_encrypted: raw.value_encrypted,
11837
+ scope: raw.scope,
11838
+ resource_id: raw.resource_id ?? null,
11839
+ extra_config: raw.extra_config ?? null
11840
+ };
11841
+ }
11842
+ function normalizeStoredEnvMap(raw) {
11843
+ const out = {};
11844
+ if (!raw) return out;
11845
+ for (const [key, value] of Object.entries(raw)) {
11846
+ try {
11847
+ out[key] = normalizeStoredEnvVar(value);
11848
+ } catch (err) {
11849
+ console.warn(`[env-vars] Skipping malformed env var entry ${key}:`, err);
11850
+ }
11851
+ }
11852
+ return out;
11853
+ }
11854
+
11855
+ // src/templates/handlebars-helpers.ts
11856
+ init_cjs_shims();
11857
+ var import_handlebars = __toESM(require("handlebars"), 1);
11858
+
11859
+ // src/mcp/template-patterns.ts
11860
+ init_cjs_shims();
11861
+
11559
11862
  // src/tools/mcp/http-headers.ts
11560
11863
  init_cjs_shims();
11561
11864
  var MCP_HEADER_REDACTED_SENTINEL = "\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022";
@@ -11706,7 +12009,7 @@ var MCPServerRepository = class {
11706
12009
  */
11707
12010
  async resolveId(id) {
11708
12011
  return resolveByShortIdPrefix(id, "MCPServer", async (pattern) => {
11709
- const rows = await select(this.db).from(mcpServers3).where((0, import_drizzle_orm22.like)(mcpServers3.mcp_server_id, pattern)).limit(RESOLVE_SHORT_ID_FETCH_LIMIT).all();
12012
+ const rows = await select(this.db).from(mcpServers3).where((0, import_drizzle_orm24.like)(mcpServers3.mcp_server_id, pattern)).limit(RESOLVE_SHORT_ID_FETCH_LIMIT).all();
11710
12013
  return rows.map((r) => r.mcp_server_id);
11711
12014
  });
11712
12015
  }
@@ -11717,7 +12020,7 @@ var MCPServerRepository = class {
11717
12020
  try {
11718
12021
  const insertData = this.mcpServerToInsert(data);
11719
12022
  await insert(this.db, mcpServers3).values(insertData).run();
11720
- const row = await select(this.db).from(mcpServers3).where((0, import_drizzle_orm22.eq)(mcpServers3.mcp_server_id, insertData.mcp_server_id)).one();
12023
+ const row = await select(this.db).from(mcpServers3).where((0, import_drizzle_orm24.eq)(mcpServers3.mcp_server_id, insertData.mcp_server_id)).one();
11721
12024
  if (!row) {
11722
12025
  throw new RepositoryError("Failed to retrieve created MCP server");
11723
12026
  }
@@ -11736,7 +12039,7 @@ var MCPServerRepository = class {
11736
12039
  async findById(id) {
11737
12040
  try {
11738
12041
  const fullId = await this.resolveId(id);
11739
- const row = await select(this.db).from(mcpServers3).where((0, import_drizzle_orm22.eq)(mcpServers3.mcp_server_id, fullId)).one();
12042
+ const row = await select(this.db).from(mcpServers3).where((0, import_drizzle_orm24.eq)(mcpServers3.mcp_server_id, fullId)).one();
11740
12043
  return row ? this.rowToMCPServer(row) : null;
11741
12044
  } catch (error) {
11742
12045
  if (error instanceof EntityNotFoundError) return null;
@@ -11755,24 +12058,24 @@ var MCPServerRepository = class {
11755
12058
  let query = select(this.db).from(mcpServers3);
11756
12059
  const conditions = [];
11757
12060
  if (filters?.scope) {
11758
- conditions.push((0, import_drizzle_orm22.eq)(mcpServers3.scope, filters.scope));
12061
+ conditions.push((0, import_drizzle_orm24.eq)(mcpServers3.scope, filters.scope));
11759
12062
  }
11760
12063
  if (filters?.scopeId) {
11761
12064
  if (filters.scope === "global") {
11762
- conditions.push((0, import_drizzle_orm22.eq)(mcpServers3.owner_user_id, filters.scopeId));
12065
+ conditions.push((0, import_drizzle_orm24.eq)(mcpServers3.owner_user_id, filters.scopeId));
11763
12066
  }
11764
12067
  }
11765
12068
  if (filters?.transport) {
11766
- conditions.push((0, import_drizzle_orm22.eq)(mcpServers3.transport, filters.transport));
12069
+ conditions.push((0, import_drizzle_orm24.eq)(mcpServers3.transport, filters.transport));
11767
12070
  }
11768
12071
  if (filters?.enabled !== void 0) {
11769
- conditions.push((0, import_drizzle_orm22.eq)(mcpServers3.enabled, filters.enabled));
12072
+ conditions.push((0, import_drizzle_orm24.eq)(mcpServers3.enabled, filters.enabled));
11770
12073
  }
11771
12074
  if (filters?.source) {
11772
- conditions.push((0, import_drizzle_orm22.eq)(mcpServers3.source, filters.source));
12075
+ conditions.push((0, import_drizzle_orm24.eq)(mcpServers3.source, filters.source));
11773
12076
  }
11774
12077
  if (conditions.length > 0) {
11775
- query = query.where((0, import_drizzle_orm22.and)(...conditions));
12078
+ query = query.where((0, import_drizzle_orm24.and)(...conditions));
11776
12079
  }
11777
12080
  const rows = await query.all();
11778
12081
  return rows.map((row) => this.rowToMCPServer(row));
@@ -11819,7 +12122,7 @@ var MCPServerRepository = class {
11819
12122
  transport: insertData.transport,
11820
12123
  updated_at: /* @__PURE__ */ new Date(),
11821
12124
  data: insertData.data
11822
- }).where((0, import_drizzle_orm22.eq)(mcpServers3.mcp_server_id, fullId)).run();
12125
+ }).where((0, import_drizzle_orm24.eq)(mcpServers3.mcp_server_id, fullId)).run();
11823
12126
  const updated = await this.findById(fullId);
11824
12127
  if (!updated) {
11825
12128
  throw new RepositoryError("Failed to retrieve updated MCP server");
@@ -11840,7 +12143,7 @@ var MCPServerRepository = class {
11840
12143
  async delete(id) {
11841
12144
  try {
11842
12145
  const fullId = await this.resolveId(id);
11843
- const result = await deleteFrom(this.db, mcpServers3).where((0, import_drizzle_orm22.eq)(mcpServers3.mcp_server_id, fullId)).run();
12146
+ const result = await deleteFrom(this.db, mcpServers3).where((0, import_drizzle_orm24.eq)(mcpServers3.mcp_server_id, fullId)).run();
11844
12147
  if (result.rowsAffected === 0) {
11845
12148
  throw new EntityNotFoundError("MCPServer", id);
11846
12149
  }
@@ -11870,7 +12173,7 @@ var MCPServerRepository = class {
11870
12173
 
11871
12174
  // src/db/repositories/messages.ts
11872
12175
  init_cjs_shims();
11873
- var import_drizzle_orm23 = require("drizzle-orm");
12176
+ var import_drizzle_orm25 = require("drizzle-orm");
11874
12177
  init_database_wrapper();
11875
12178
  init_schema();
11876
12179
  var MessagesRepository = class {
@@ -11938,7 +12241,7 @@ var MessagesRepository = class {
11938
12241
  * Get message by ID
11939
12242
  */
11940
12243
  async findById(messageId) {
11941
- const row = await select(this.db).from(messages3).where((0, import_drizzle_orm23.eq)(messages3.message_id, messageId)).one();
12244
+ const row = await select(this.db).from(messages3).where((0, import_drizzle_orm25.eq)(messages3.message_id, messageId)).one();
11942
12245
  return row ? this.rowToMessage(row) : null;
11943
12246
  }
11944
12247
  /**
@@ -11947,19 +12250,19 @@ var MessagesRepository = class {
11947
12250
  async findAll(filter) {
11948
12251
  if (filter?.sessionIds !== void 0 && filter.sessionIds.length === 0) return [];
11949
12252
  const conditions = [];
11950
- if (filter?.sessionId) conditions.push((0, import_drizzle_orm23.eq)(messages3.session_id, filter.sessionId));
12253
+ if (filter?.sessionId) conditions.push((0, import_drizzle_orm25.eq)(messages3.session_id, filter.sessionId));
11951
12254
  if (filter?.sessionIds !== void 0)
11952
- conditions.push((0, import_drizzle_orm23.inArray)(messages3.session_id, filter.sessionIds));
11953
- if (filter?.taskId) conditions.push((0, import_drizzle_orm23.eq)(messages3.task_id, filter.taskId));
11954
- if (filter?.type) conditions.push((0, import_drizzle_orm23.eq)(messages3.type, filter.type));
11955
- if (filter?.role) conditions.push((0, import_drizzle_orm23.eq)(messages3.role, filter.role));
12255
+ conditions.push((0, import_drizzle_orm25.inArray)(messages3.session_id, filter.sessionIds));
12256
+ if (filter?.taskId) conditions.push((0, import_drizzle_orm25.eq)(messages3.task_id, filter.taskId));
12257
+ if (filter?.type) conditions.push((0, import_drizzle_orm25.eq)(messages3.type, filter.type));
12258
+ if (filter?.role) conditions.push((0, import_drizzle_orm25.eq)(messages3.role, filter.role));
11956
12259
  if (filter?.visibleToUserId) {
11957
12260
  conditions.push(
11958
12261
  visibleSessionReferenceAccessExists(this.db, filter.visibleToUserId, messages3.session_id)
11959
12262
  );
11960
12263
  }
11961
12264
  let query = select(this.db).from(messages3);
11962
- if (conditions.length > 0) query = query.where((0, import_drizzle_orm23.and)(...conditions));
12265
+ if (conditions.length > 0) query = query.where((0, import_drizzle_orm25.and)(...conditions));
11963
12266
  const rows = await query.orderBy(messages3.index).all();
11964
12267
  return rows.map((r) => this.rowToMessage(r));
11965
12268
  }
@@ -11967,21 +12270,21 @@ var MessagesRepository = class {
11967
12270
  * Get all messages for a session (ordered by index)
11968
12271
  */
11969
12272
  async findBySessionId(sessionId) {
11970
- const rows = await select(this.db).from(messages3).where((0, import_drizzle_orm23.eq)(messages3.session_id, sessionId)).orderBy(messages3.index).all();
12273
+ const rows = await select(this.db).from(messages3).where((0, import_drizzle_orm25.eq)(messages3.session_id, sessionId)).orderBy(messages3.index).all();
11971
12274
  return rows.map((r) => this.rowToMessage(r));
11972
12275
  }
11973
12276
  /**
11974
12277
  * Get all messages for a session filtered by type (ordered by index)
11975
12278
  */
11976
12279
  async findBySessionIdAndType(sessionId, type) {
11977
- const rows = await select(this.db).from(messages3).where((0, import_drizzle_orm23.and)((0, import_drizzle_orm23.eq)(messages3.session_id, sessionId), (0, import_drizzle_orm23.eq)(messages3.type, type))).orderBy(messages3.index).all();
12280
+ const rows = await select(this.db).from(messages3).where((0, import_drizzle_orm25.and)((0, import_drizzle_orm25.eq)(messages3.session_id, sessionId), (0, import_drizzle_orm25.eq)(messages3.type, type))).orderBy(messages3.index).all();
11978
12281
  return rows.map((r) => this.rowToMessage(r));
11979
12282
  }
11980
12283
  /**
11981
12284
  * Get all messages for a task (ordered by index)
11982
12285
  */
11983
12286
  async findByTaskId(taskId) {
11984
- const rows = await select(this.db).from(messages3).where((0, import_drizzle_orm23.eq)(messages3.task_id, taskId)).orderBy(messages3.index).all();
12287
+ const rows = await select(this.db).from(messages3).where((0, import_drizzle_orm25.eq)(messages3.task_id, taskId)).orderBy(messages3.index).all();
11985
12288
  return rows.map((r) => this.rowToMessage(r));
11986
12289
  }
11987
12290
  /**
@@ -11989,7 +12292,7 @@ var MessagesRepository = class {
11989
12292
  * Used for task message_range queries
11990
12293
  */
11991
12294
  async findByRange(sessionId, startIndex, endIndex) {
11992
- const rows = await select(this.db).from(messages3).where((0, import_drizzle_orm23.eq)(messages3.session_id, sessionId)).orderBy(messages3.index).all();
12295
+ const rows = await select(this.db).from(messages3).where((0, import_drizzle_orm25.eq)(messages3.session_id, sessionId)).orderBy(messages3.index).all();
11993
12296
  return rows.filter((r) => r.index >= startIndex && r.index <= endIndex).map((r) => this.rowToMessage(r));
11994
12297
  }
11995
12298
  /**
@@ -12002,33 +12305,33 @@ var MessagesRepository = class {
12002
12305
  }
12003
12306
  const updated = { ...existing, ...updates };
12004
12307
  const row = this.messageToRow(updated);
12005
- const result = await update(this.db, messages3).set(row).where((0, import_drizzle_orm23.eq)(messages3.message_id, messageId)).returning().one();
12308
+ const result = await update(this.db, messages3).set(row).where((0, import_drizzle_orm25.eq)(messages3.message_id, messageId)).returning().one();
12006
12309
  return this.rowToMessage(result);
12007
12310
  }
12008
12311
  /**
12009
12312
  * Update message task assignment
12010
12313
  */
12011
12314
  async assignToTask(messageId, taskId) {
12012
- const updated = await update(this.db, messages3).set({ task_id: taskId }).where((0, import_drizzle_orm23.eq)(messages3.message_id, messageId)).returning().one();
12315
+ const updated = await update(this.db, messages3).set({ task_id: taskId }).where((0, import_drizzle_orm25.eq)(messages3.message_id, messageId)).returning().one();
12013
12316
  return this.rowToMessage(updated);
12014
12317
  }
12015
12318
  /**
12016
12319
  * Delete all messages for a session (cascades automatically via FK)
12017
12320
  */
12018
12321
  async deleteBySessionId(sessionId) {
12019
- await deleteFrom(this.db, messages3).where((0, import_drizzle_orm23.eq)(messages3.session_id, sessionId)).run();
12322
+ await deleteFrom(this.db, messages3).where((0, import_drizzle_orm25.eq)(messages3.session_id, sessionId)).run();
12020
12323
  }
12021
12324
  /**
12022
12325
  * Delete a single message
12023
12326
  */
12024
12327
  async delete(messageId) {
12025
- await deleteFrom(this.db, messages3).where((0, import_drizzle_orm23.eq)(messages3.message_id, messageId)).run();
12328
+ await deleteFrom(this.db, messages3).where((0, import_drizzle_orm25.eq)(messages3.message_id, messageId)).run();
12026
12329
  }
12027
12330
  };
12028
12331
 
12029
12332
  // src/db/repositories/repos.ts
12030
12333
  init_cjs_shims();
12031
- var import_drizzle_orm24 = require("drizzle-orm");
12334
+ var import_drizzle_orm26 = require("drizzle-orm");
12032
12335
 
12033
12336
  // src/config/variant-resolver.ts
12034
12337
  init_cjs_shims();
@@ -12178,7 +12481,7 @@ var RepoRepository = class {
12178
12481
  */
12179
12482
  async resolveId(id) {
12180
12483
  return resolveByShortIdPrefix(id, "Repo", async (pattern) => {
12181
- const rows = await select(this.db).from(repos3).where((0, import_drizzle_orm24.like)(repos3.repo_id, pattern)).limit(RESOLVE_SHORT_ID_FETCH_LIMIT).all();
12484
+ const rows = await select(this.db).from(repos3).where((0, import_drizzle_orm26.like)(repos3.repo_id, pattern)).limit(RESOLVE_SHORT_ID_FETCH_LIMIT).all();
12182
12485
  return rows.map((r) => r.repo_id);
12183
12486
  });
12184
12487
  }
@@ -12189,7 +12492,7 @@ var RepoRepository = class {
12189
12492
  try {
12190
12493
  const insertData = this.repoToInsert(data);
12191
12494
  await insert(this.db, repos3).values(insertData).run();
12192
- const row = await select(this.db).from(repos3).where((0, import_drizzle_orm24.eq)(repos3.repo_id, insertData.repo_id)).one();
12495
+ const row = await select(this.db).from(repos3).where((0, import_drizzle_orm26.eq)(repos3.repo_id, insertData.repo_id)).one();
12193
12496
  if (!row) {
12194
12497
  throw new RepositoryError("Failed to retrieve created repo");
12195
12498
  }
@@ -12208,7 +12511,7 @@ var RepoRepository = class {
12208
12511
  async findById(id) {
12209
12512
  try {
12210
12513
  const fullId = await this.resolveId(id);
12211
- const row = await select(this.db).from(repos3).where((0, import_drizzle_orm24.eq)(repos3.repo_id, fullId)).one();
12514
+ const row = await select(this.db).from(repos3).where((0, import_drizzle_orm26.eq)(repos3.repo_id, fullId)).one();
12212
12515
  return row ? this.rowToRepo(row) : null;
12213
12516
  } catch (error) {
12214
12517
  if (error instanceof EntityNotFoundError) return null;
@@ -12224,7 +12527,7 @@ var RepoRepository = class {
12224
12527
  */
12225
12528
  async findBySlug(slug) {
12226
12529
  try {
12227
- const row = await select(this.db).from(repos3).where((0, import_drizzle_orm24.eq)(repos3.slug, slug)).one();
12530
+ const row = await select(this.db).from(repos3).where((0, import_drizzle_orm26.eq)(repos3.slug, slug)).one();
12228
12531
  return row ? this.rowToRepo(row) : null;
12229
12532
  } catch (error) {
12230
12533
  throw new RepositoryError(
@@ -12292,8 +12595,8 @@ var RepoRepository = class {
12292
12595
  let changed = 0;
12293
12596
  for (const finding of scan.findings) {
12294
12597
  await this.db.transaction(async (tx) => {
12295
- await lockRowForUpdate(txAsDb(tx), this.db, repos3, (0, import_drizzle_orm24.eq)(repos3.repo_id, finding.repo_id));
12296
- const currentRow = await select(txAsDb(tx)).from(repos3).where((0, import_drizzle_orm24.eq)(repos3.repo_id, finding.repo_id)).one();
12598
+ await lockRowForUpdate(txAsDb(tx), this.db, repos3, (0, import_drizzle_orm26.eq)(repos3.repo_id, finding.repo_id));
12599
+ const currentRow = await select(txAsDb(tx)).from(repos3).where((0, import_drizzle_orm26.eq)(repos3.repo_id, finding.repo_id)).one();
12297
12600
  if (!currentRow) return;
12298
12601
  const data = currentRow.data;
12299
12602
  if (typeof data.remote_url !== "string" || !httpUrlHasUserinfo(data.remote_url)) {
@@ -12305,7 +12608,7 @@ var RepoRepository = class {
12305
12608
  ...data,
12306
12609
  remote_url: stripHttpUrlUserinfo(data.remote_url)
12307
12610
  }
12308
- }).where((0, import_drizzle_orm24.eq)(repos3.repo_id, finding.repo_id)).run();
12611
+ }).where((0, import_drizzle_orm26.eq)(repos3.repo_id, finding.repo_id)).run();
12309
12612
  changed += 1;
12310
12613
  });
12311
12614
  }
@@ -12327,8 +12630,8 @@ var RepoRepository = class {
12327
12630
  try {
12328
12631
  const fullId = await this.resolveId(id);
12329
12632
  return await this.db.transaction(async (tx) => {
12330
- await lockRowForUpdate(txAsDb(tx), this.db, repos3, (0, import_drizzle_orm24.eq)(repos3.repo_id, fullId));
12331
- const currentRow = await select(txAsDb(tx)).from(repos3).where((0, import_drizzle_orm24.eq)(repos3.repo_id, fullId)).one();
12633
+ await lockRowForUpdate(txAsDb(tx), this.db, repos3, (0, import_drizzle_orm26.eq)(repos3.repo_id, fullId));
12634
+ const currentRow = await select(txAsDb(tx)).from(repos3).where((0, import_drizzle_orm26.eq)(repos3.repo_id, fullId)).one();
12332
12635
  if (!currentRow) {
12333
12636
  throw new EntityNotFoundError("Repo", id);
12334
12637
  }
@@ -12342,7 +12645,7 @@ var RepoRepository = class {
12342
12645
  repo_type: insertData.repo_type,
12343
12646
  unix_group: merged.unix_group ?? null,
12344
12647
  data: insertData.data
12345
- }).where((0, import_drizzle_orm24.eq)(repos3.repo_id, fullId)).run();
12648
+ }).where((0, import_drizzle_orm26.eq)(repos3.repo_id, fullId)).run();
12346
12649
  merged.clone_error = insertData.data.clone_error;
12347
12650
  merged.remote_url = insertData.data.remote_url;
12348
12651
  merged.last_updated = newUpdatedAt.toISOString();
@@ -12376,8 +12679,8 @@ var RepoRepository = class {
12376
12679
  try {
12377
12680
  const fullId = await this.resolveId(id);
12378
12681
  return await this.db.transaction(async (tx) => {
12379
- await lockRowForUpdate(txAsDb(tx), this.db, repos3, (0, import_drizzle_orm24.eq)(repos3.repo_id, fullId));
12380
- const currentRow = await select(txAsDb(tx)).from(repos3).where((0, import_drizzle_orm24.eq)(repos3.repo_id, fullId)).one();
12682
+ await lockRowForUpdate(txAsDb(tx), this.db, repos3, (0, import_drizzle_orm26.eq)(repos3.repo_id, fullId));
12683
+ const currentRow = await select(txAsDb(tx)).from(repos3).where((0, import_drizzle_orm26.eq)(repos3.repo_id, fullId)).one();
12381
12684
  if (!currentRow) {
12382
12685
  throw new EntityNotFoundError("Repo", id);
12383
12686
  }
@@ -12391,7 +12694,7 @@ var RepoRepository = class {
12391
12694
  repo_type: insertData.repo_type,
12392
12695
  unix_group: next.unix_group ?? null,
12393
12696
  data: insertData.data
12394
- }).where((0, import_drizzle_orm24.eq)(repos3.repo_id, fullId)).run();
12697
+ }).where((0, import_drizzle_orm26.eq)(repos3.repo_id, fullId)).run();
12395
12698
  next.environment = insertData.data.environment;
12396
12699
  next.environment_config = insertData.data.environment_config;
12397
12700
  next.remote_url = insertData.data.remote_url;
@@ -12431,7 +12734,7 @@ var RepoRepository = class {
12431
12734
  async delete(id) {
12432
12735
  try {
12433
12736
  const fullId = await this.resolveId(id);
12434
- const result = await deleteFrom(this.db, repos3).where((0, import_drizzle_orm24.eq)(repos3.repo_id, fullId)).run();
12737
+ const result = await deleteFrom(this.db, repos3).where((0, import_drizzle_orm26.eq)(repos3.repo_id, fullId)).run();
12435
12738
  if (result.rowsAffected === 0) {
12436
12739
  throw new EntityNotFoundError("Repo", id);
12437
12740
  }
@@ -12462,7 +12765,7 @@ var RepoRepository = class {
12462
12765
  */
12463
12766
  async count() {
12464
12767
  try {
12465
- const result = await select(this.db, { count: import_drizzle_orm24.sql`count(*)` }).from(repos3).one();
12768
+ const result = await select(this.db, { count: import_drizzle_orm26.sql`count(*)` }).from(repos3).one();
12466
12769
  return result?.count ?? 0;
12467
12770
  } catch (error) {
12468
12771
  throw new RepositoryError(
@@ -12475,7 +12778,7 @@ var RepoRepository = class {
12475
12778
 
12476
12779
  // src/db/repositories/schedules.ts
12477
12780
  init_cjs_shims();
12478
- var import_drizzle_orm25 = require("drizzle-orm");
12781
+ var import_drizzle_orm27 = require("drizzle-orm");
12479
12782
  init_ids();
12480
12783
  init_database_wrapper();
12481
12784
  init_schema();
@@ -12554,7 +12857,7 @@ var ScheduleRepository = class {
12554
12857
  */
12555
12858
  async resolveId(id) {
12556
12859
  return resolveByShortIdPrefix(id, "Schedule", async (pattern) => {
12557
- const rows = await select(this.db).from(schedules3).where((0, import_drizzle_orm25.like)(schedules3.schedule_id, pattern)).limit(RESOLVE_SHORT_ID_FETCH_LIMIT).all();
12860
+ const rows = await select(this.db).from(schedules3).where((0, import_drizzle_orm27.like)(schedules3.schedule_id, pattern)).limit(RESOLVE_SHORT_ID_FETCH_LIMIT).all();
12558
12861
  return rows.map((r) => r.schedule_id);
12559
12862
  });
12560
12863
  }
@@ -12577,7 +12880,7 @@ var ScheduleRepository = class {
12577
12880
  async findById(id) {
12578
12881
  try {
12579
12882
  const fullId = await this.resolveId(id);
12580
- const row = await select(this.db).from(schedules3).where((0, import_drizzle_orm25.eq)(schedules3.schedule_id, fullId)).one();
12883
+ const row = await select(this.db).from(schedules3).where((0, import_drizzle_orm27.eq)(schedules3.schedule_id, fullId)).one();
12581
12884
  if (!row) return null;
12582
12885
  return this.rowToSchedule(row);
12583
12886
  } catch (error) {
@@ -12594,18 +12897,18 @@ var ScheduleRepository = class {
12594
12897
  */
12595
12898
  async findAll(filter) {
12596
12899
  const conditions = [];
12597
- if (filter?.branch_id) conditions.push((0, import_drizzle_orm25.eq)(schedules3.branch_id, filter.branch_id));
12598
- if (filter?.enabled !== void 0) conditions.push((0, import_drizzle_orm25.eq)(schedules3.enabled, filter.enabled));
12599
- if (filter?.created_by) conditions.push((0, import_drizzle_orm25.eq)(schedules3.created_by, filter.created_by));
12900
+ if (filter?.branch_id) conditions.push((0, import_drizzle_orm27.eq)(schedules3.branch_id, filter.branch_id));
12901
+ if (filter?.enabled !== void 0) conditions.push((0, import_drizzle_orm27.eq)(schedules3.enabled, filter.enabled));
12902
+ if (filter?.created_by) conditions.push((0, import_drizzle_orm27.eq)(schedules3.created_by, filter.created_by));
12600
12903
  const query = select(this.db).from(schedules3);
12601
- const rows = conditions.length > 0 ? await query.where((0, import_drizzle_orm25.and)(...conditions)).all() : await query.all();
12904
+ const rows = conditions.length > 0 ? await query.where((0, import_drizzle_orm27.and)(...conditions)).all() : await query.all();
12602
12905
  return rows.map((row) => this.rowToSchedule(row));
12603
12906
  }
12604
12907
  /**
12605
12908
  * All schedules on a branch (newest first by created_at).
12606
12909
  */
12607
12910
  async findByBranchId(branchId) {
12608
- const rows = await select(this.db).from(schedules3).where((0, import_drizzle_orm25.eq)(schedules3.branch_id, branchId)).orderBy((0, import_drizzle_orm25.desc)(schedules3.created_at)).all();
12911
+ const rows = await select(this.db).from(schedules3).where((0, import_drizzle_orm27.eq)(schedules3.branch_id, branchId)).orderBy((0, import_drizzle_orm27.desc)(schedules3.created_at)).all();
12609
12912
  return rows.map((row) => this.rowToSchedule(row));
12610
12913
  }
12611
12914
  /**
@@ -12621,13 +12924,13 @@ var ScheduleRepository = class {
12621
12924
  * Uses the `schedules_enabled_next_run_idx` covering index.
12622
12925
  */
12623
12926
  dueCondition(now) {
12624
- return (0, import_drizzle_orm25.and)(
12625
- (0, import_drizzle_orm25.eq)(schedules3.enabled, true),
12626
- (0, import_drizzle_orm25.or)((0, import_drizzle_orm25.isNull)(schedules3.next_run_at), (0, import_drizzle_orm25.lte)(schedules3.next_run_at, now))
12927
+ return (0, import_drizzle_orm27.and)(
12928
+ (0, import_drizzle_orm27.eq)(schedules3.enabled, true),
12929
+ (0, import_drizzle_orm27.or)((0, import_drizzle_orm27.isNull)(schedules3.next_run_at), (0, import_drizzle_orm27.lte)(schedules3.next_run_at, now))
12627
12930
  );
12628
12931
  }
12629
12932
  async findDue(now = Date.now()) {
12630
- const rows = await select(this.db).from(schedules3).where(this.dueCondition(now)).orderBy((0, import_drizzle_orm25.asc)(schedules3.next_run_at)).all();
12933
+ const rows = await select(this.db).from(schedules3).where(this.dueCondition(now)).orderBy((0, import_drizzle_orm27.asc)(schedules3.next_run_at)).all();
12631
12934
  return rows.map((row) => this.rowToSchedule(row));
12632
12935
  }
12633
12936
  /**
@@ -12638,7 +12941,7 @@ var ScheduleRepository = class {
12638
12941
  async findDueRefs(now = Date.now()) {
12639
12942
  const tenantColumn = schedules3.tenant_id;
12640
12943
  const columns = isPostgresDatabase(this.db) && tenantColumn ? { schedule_id: schedules3.schedule_id, tenant_id: tenantColumn } : { schedule_id: schedules3.schedule_id };
12641
- const rows = await select(this.db, columns).from(schedules3).where(this.dueCondition(now)).orderBy((0, import_drizzle_orm25.asc)(schedules3.next_run_at)).all();
12944
+ const rows = await select(this.db, columns).from(schedules3).where(this.dueCondition(now)).orderBy((0, import_drizzle_orm27.asc)(schedules3.next_run_at)).all();
12642
12945
  return rows.map((row) => ({
12643
12946
  schedule_id: row.schedule_id,
12644
12947
  ...typeof row.tenant_id === "string" && row.tenant_id.length > 0 ? { tenant_id: row.tenant_id } : {}
@@ -12656,13 +12959,13 @@ var ScheduleRepository = class {
12656
12959
  */
12657
12960
  async findAccessibleSchedules(userId, filter) {
12658
12961
  const conditions = [visibleBranchAccessCondition(this.db, userId)];
12659
- if (filter?.branch_id) conditions.push((0, import_drizzle_orm25.eq)(schedules3.branch_id, filter.branch_id));
12660
- if (filter?.enabled !== void 0) conditions.push((0, import_drizzle_orm25.eq)(schedules3.enabled, filter.enabled));
12661
- if (filter?.created_by) conditions.push((0, import_drizzle_orm25.eq)(schedules3.created_by, filter.created_by));
12662
- const results = await select(this.db).from(schedules3).innerJoin(branches3, (0, import_drizzle_orm25.eq)(schedules3.branch_id, branches3.branch_id)).leftJoin(
12962
+ if (filter?.branch_id) conditions.push((0, import_drizzle_orm27.eq)(schedules3.branch_id, filter.branch_id));
12963
+ if (filter?.enabled !== void 0) conditions.push((0, import_drizzle_orm27.eq)(schedules3.enabled, filter.enabled));
12964
+ if (filter?.created_by) conditions.push((0, import_drizzle_orm27.eq)(schedules3.created_by, filter.created_by));
12965
+ const results = await select(this.db).from(schedules3).innerJoin(branches3, (0, import_drizzle_orm27.eq)(schedules3.branch_id, branches3.branch_id)).leftJoin(
12663
12966
  branchOwners3,
12664
- (0, import_drizzle_orm25.and)((0, import_drizzle_orm25.eq)(branchOwners3.branch_id, branches3.branch_id), (0, import_drizzle_orm25.eq)(branchOwners3.user_id, userId))
12665
- ).where((0, import_drizzle_orm25.and)(...conditions)).all();
12967
+ (0, import_drizzle_orm27.and)((0, import_drizzle_orm27.eq)(branchOwners3.branch_id, branches3.branch_id), (0, import_drizzle_orm27.eq)(branchOwners3.user_id, userId))
12968
+ ).where((0, import_drizzle_orm27.and)(...conditions)).all();
12666
12969
  const seen = /* @__PURE__ */ new Set();
12667
12970
  const out = [];
12668
12971
  for (const r of results) {
@@ -12683,8 +12986,8 @@ var ScheduleRepository = class {
12683
12986
  async update(id, updates) {
12684
12987
  const fullId = await this.resolveId(id);
12685
12988
  return await this.db.transaction(async (tx) => {
12686
- await lockRowForUpdate(txAsDb(tx), this.db, schedules3, (0, import_drizzle_orm25.eq)(schedules3.schedule_id, fullId));
12687
- const currentRow = await select(txAsDb(tx)).from(schedules3).where((0, import_drizzle_orm25.eq)(schedules3.schedule_id, fullId)).one();
12989
+ await lockRowForUpdate(txAsDb(tx), this.db, schedules3, (0, import_drizzle_orm27.eq)(schedules3.schedule_id, fullId));
12990
+ const currentRow = await select(txAsDb(tx)).from(schedules3).where((0, import_drizzle_orm27.eq)(schedules3.schedule_id, fullId)).one();
12688
12991
  if (!currentRow) throw new EntityNotFoundError("Schedule", id);
12689
12992
  const current = this.rowToSchedule(currentRow);
12690
12993
  const merged = deepMerge(current, {
@@ -12698,13 +13001,13 @@ var ScheduleRepository = class {
12698
13001
  });
12699
13002
  const insertData = this.scheduleToInsert(merged);
12700
13003
  insertData.updated_at = /* @__PURE__ */ new Date();
12701
- const row = await update(txAsDb(tx), schedules3).set(insertData).where((0, import_drizzle_orm25.eq)(schedules3.schedule_id, fullId)).returning().one();
13004
+ const row = await update(txAsDb(tx), schedules3).set(insertData).where((0, import_drizzle_orm27.eq)(schedules3.schedule_id, fullId)).returning().one();
12702
13005
  return this.rowToSchedule(row);
12703
13006
  });
12704
13007
  }
12705
13008
  async delete(id) {
12706
13009
  const fullId = await this.resolveId(id);
12707
- const result = await deleteFrom(this.db, schedules3).where((0, import_drizzle_orm25.eq)(schedules3.schedule_id, fullId)).run();
13010
+ const result = await deleteFrom(this.db, schedules3).where((0, import_drizzle_orm27.eq)(schedules3.schedule_id, fullId)).run();
12708
13011
  if (result.rowsAffected === 0) throw new EntityNotFoundError("Schedule", id);
12709
13012
  }
12710
13013
  /**
@@ -12712,17 +13015,17 @@ var ScheduleRepository = class {
12712
13015
  */
12713
13016
  async count(filter) {
12714
13017
  const conditions = [];
12715
- if (filter?.branch_id) conditions.push((0, import_drizzle_orm25.eq)(schedules3.branch_id, filter.branch_id));
12716
- if (filter?.enabled !== void 0) conditions.push((0, import_drizzle_orm25.eq)(schedules3.enabled, filter.enabled));
12717
- const query = select(this.db, { count: import_drizzle_orm25.sql`count(*)` }).from(schedules3);
12718
- const row = conditions.length > 0 ? await query.where((0, import_drizzle_orm25.and)(...conditions)).one() : await query.one();
13018
+ if (filter?.branch_id) conditions.push((0, import_drizzle_orm27.eq)(schedules3.branch_id, filter.branch_id));
13019
+ if (filter?.enabled !== void 0) conditions.push((0, import_drizzle_orm27.eq)(schedules3.enabled, filter.enabled));
13020
+ const query = select(this.db, { count: import_drizzle_orm27.sql`count(*)` }).from(schedules3);
13021
+ const row = conditions.length > 0 ? await query.where((0, import_drizzle_orm27.and)(...conditions)).one() : await query.one();
12719
13022
  return Number(row?.count ?? 0);
12720
13023
  }
12721
13024
  };
12722
13025
 
12723
13026
  // src/db/repositories/serialized-sessions.ts
12724
13027
  init_cjs_shims();
12725
- var import_drizzle_orm26 = require("drizzle-orm");
13028
+ var import_drizzle_orm28 = require("drizzle-orm");
12726
13029
  init_ids();
12727
13030
  init_database_wrapper();
12728
13031
  init_schema();
@@ -12749,8 +13052,8 @@ var SerializedSessionRepository = class {
12749
13052
  async findLatestDone(sessionId) {
12750
13053
  try {
12751
13054
  const row = await select(this.db).from(serializedSessions3).where(
12752
- (0, import_drizzle_orm26.and)((0, import_drizzle_orm26.eq)(serializedSessions3.session_id, sessionId), (0, import_drizzle_orm26.eq)(serializedSessions3.status, "done"))
12753
- ).orderBy((0, import_drizzle_orm26.desc)(serializedSessions3.turn_index), (0, import_drizzle_orm26.desc)(serializedSessions3.created_at)).limit(1).one();
13055
+ (0, import_drizzle_orm28.and)((0, import_drizzle_orm28.eq)(serializedSessions3.session_id, sessionId), (0, import_drizzle_orm28.eq)(serializedSessions3.status, "done"))
13056
+ ).orderBy((0, import_drizzle_orm28.desc)(serializedSessions3.turn_index), (0, import_drizzle_orm28.desc)(serializedSessions3.created_at)).limit(1).one();
12754
13057
  return row ? rowToSerializedSession(row) : null;
12755
13058
  } catch (error) {
12756
13059
  throw new RepositoryError(
@@ -12764,7 +13067,7 @@ var SerializedSessionRepository = class {
12764
13067
  */
12765
13068
  async findLatest(sessionId) {
12766
13069
  try {
12767
- const row = await select(this.db).from(serializedSessions3).where((0, import_drizzle_orm26.eq)(serializedSessions3.session_id, sessionId)).orderBy((0, import_drizzle_orm26.desc)(serializedSessions3.turn_index), (0, import_drizzle_orm26.desc)(serializedSessions3.created_at)).limit(1).one();
13070
+ const row = await select(this.db).from(serializedSessions3).where((0, import_drizzle_orm28.eq)(serializedSessions3.session_id, sessionId)).orderBy((0, import_drizzle_orm28.desc)(serializedSessions3.turn_index), (0, import_drizzle_orm28.desc)(serializedSessions3.created_at)).limit(1).one();
12768
13071
  return row ? rowToSerializedSession(row) : null;
12769
13072
  } catch (error) {
12770
13073
  throw new RepositoryError(
@@ -12815,7 +13118,7 @@ var SerializedSessionRepository = class {
12815
13118
  */
12816
13119
  async markDone(id, payload) {
12817
13120
  try {
12818
- await update(this.db, serializedSessions3).set({ status: "done", payload }).where((0, import_drizzle_orm26.eq)(serializedSessions3.id, id)).run();
13121
+ await update(this.db, serializedSessions3).set({ status: "done", payload }).where((0, import_drizzle_orm28.eq)(serializedSessions3.id, id)).run();
12819
13122
  } catch (error) {
12820
13123
  throw new RepositoryError(
12821
13124
  `Failed to mark serialized session as done: ${error instanceof Error ? error.message : String(error)}`,
@@ -12828,7 +13131,7 @@ var SerializedSessionRepository = class {
12828
13131
  */
12829
13132
  async deleteById(id) {
12830
13133
  try {
12831
- await deleteFrom(this.db, serializedSessions3).where((0, import_drizzle_orm26.eq)(serializedSessions3.id, id)).run();
13134
+ await deleteFrom(this.db, serializedSessions3).where((0, import_drizzle_orm28.eq)(serializedSessions3.id, id)).run();
12832
13135
  } catch (error) {
12833
13136
  throw new RepositoryError(
12834
13137
  `Failed to delete serialized session: ${error instanceof Error ? error.message : String(error)}`,
@@ -12843,9 +13146,9 @@ var SerializedSessionRepository = class {
12843
13146
  async deletePreviousTurns(sessionId, beforeTurnIndex) {
12844
13147
  try {
12845
13148
  await deleteFrom(this.db, serializedSessions3).where(
12846
- (0, import_drizzle_orm26.and)(
12847
- (0, import_drizzle_orm26.eq)(serializedSessions3.session_id, sessionId),
12848
- (0, import_drizzle_orm26.lt)(serializedSessions3.turn_index, beforeTurnIndex)
13149
+ (0, import_drizzle_orm28.and)(
13150
+ (0, import_drizzle_orm28.eq)(serializedSessions3.session_id, sessionId),
13151
+ (0, import_drizzle_orm28.lt)(serializedSessions3.turn_index, beforeTurnIndex)
12849
13152
  )
12850
13153
  ).run();
12851
13154
  } catch (error) {
@@ -12857,115 +13160,16 @@ var SerializedSessionRepository = class {
12857
13160
  }
12858
13161
  };
12859
13162
 
12860
- // src/db/repositories/session-env-selections.ts
12861
- init_cjs_shims();
12862
- var import_drizzle_orm27 = require("drizzle-orm");
12863
- init_database_wrapper();
12864
- init_schema();
12865
- var SessionEnvSelectionRepository = class {
12866
- constructor(db) {
12867
- this.db = db;
12868
- }
12869
- /** Shared SELECT for a session's rows — single source of truth for reads. */
12870
- async fetchRows(sessionId) {
12871
- try {
12872
- return await select(this.db).from(sessionEnvSelections3).where((0, import_drizzle_orm27.eq)(sessionEnvSelections3.session_id, sessionId)).all();
12873
- } catch (error) {
12874
- throw new RepositoryError(
12875
- `Failed to list session env selections: ${error instanceof Error ? error.message : String(error)}`,
12876
- error
12877
- );
12878
- }
12879
- }
12880
- /** List selected env var names for a session (not hydrated). */
12881
- async listNames(sessionId) {
12882
- const rows = await this.fetchRows(sessionId);
12883
- return rows.map((r) => r.env_var_name);
12884
- }
12885
- /** Return a Set for fast membership checks in the env resolver. */
12886
- async asSet(sessionId) {
12887
- const names = await this.listNames(sessionId);
12888
- return new Set(names);
12889
- }
12890
- /** Full rows with timestamps — for the REST API response. */
12891
- async list(sessionId) {
12892
- const rows = await this.fetchRows(sessionId);
12893
- return rows.map((r) => ({
12894
- session_id: r.session_id,
12895
- env_var_name: r.env_var_name,
12896
- created_at: new Date(r.created_at)
12897
- }));
12898
- }
12899
- /** Add a selection. No-op if it already exists. */
12900
- async add(sessionId, envVarName) {
12901
- try {
12902
- const existing = await select(this.db).from(sessionEnvSelections3).where(
12903
- (0, import_drizzle_orm27.and)(
12904
- (0, import_drizzle_orm27.eq)(sessionEnvSelections3.session_id, sessionId),
12905
- (0, import_drizzle_orm27.eq)(sessionEnvSelections3.env_var_name, envVarName)
12906
- )
12907
- ).one();
12908
- if (existing) return;
12909
- await insert(this.db, sessionEnvSelections3).values({
12910
- session_id: sessionId,
12911
- env_var_name: envVarName,
12912
- created_at: /* @__PURE__ */ new Date()
12913
- }).run();
12914
- } catch (error) {
12915
- throw new RepositoryError(
12916
- `Failed to add session env selection: ${error instanceof Error ? error.message : String(error)}`,
12917
- error
12918
- );
12919
- }
12920
- }
12921
- /** Remove a selection. No-op if it doesn't exist. */
12922
- async remove(sessionId, envVarName) {
12923
- try {
12924
- await deleteFrom(this.db, sessionEnvSelections3).where(
12925
- (0, import_drizzle_orm27.and)(
12926
- (0, import_drizzle_orm27.eq)(sessionEnvSelections3.session_id, sessionId),
12927
- (0, import_drizzle_orm27.eq)(sessionEnvSelections3.env_var_name, envVarName)
12928
- )
12929
- ).run();
12930
- } catch (error) {
12931
- throw new RepositoryError(
12932
- `Failed to remove session env selection: ${error instanceof Error ? error.message : String(error)}`,
12933
- error
12934
- );
12935
- }
12936
- }
12937
- /** Bulk replace — deletes all existing rows, inserts the new set. */
12938
- async setAll(sessionId, envVarNames) {
12939
- try {
12940
- await deleteFrom(this.db, sessionEnvSelections3).where((0, import_drizzle_orm27.eq)(sessionEnvSelections3.session_id, sessionId)).run();
12941
- if (envVarNames.length === 0) return;
12942
- const now = /* @__PURE__ */ new Date();
12943
- await insert(this.db, sessionEnvSelections3).values(
12944
- envVarNames.map((name) => ({
12945
- session_id: sessionId,
12946
- env_var_name: name,
12947
- created_at: now
12948
- }))
12949
- ).run();
12950
- } catch (error) {
12951
- throw new RepositoryError(
12952
- `Failed to set session env selections: ${error instanceof Error ? error.message : String(error)}`,
12953
- error
12954
- );
12955
- }
12956
- }
12957
- };
12958
-
12959
13163
  // src/db/repositories/session-mcp-servers.ts
12960
13164
  init_cjs_shims();
12961
- var import_drizzle_orm29 = require("drizzle-orm");
13165
+ var import_drizzle_orm30 = require("drizzle-orm");
12962
13166
  init_database_wrapper();
12963
13167
  init_schema();
12964
13168
 
12965
13169
  // src/db/repositories/sessions.ts
12966
13170
  init_cjs_shims();
12967
13171
  init_types2();
12968
- var import_drizzle_orm28 = require("drizzle-orm");
13172
+ var import_drizzle_orm29 = require("drizzle-orm");
12969
13173
  init_config_manager();
12970
13174
  init_ids();
12971
13175
  init_database_wrapper();
@@ -12992,40 +13196,43 @@ var SessionRepository = class {
12992
13196
  const sessionId = row.session_id;
12993
13197
  const boardId = branchBoardId ?? null;
12994
13198
  const url = baseUrl && boardId ? getSessionUrl(sessionId, baseUrl) : null;
12995
- return {
12996
- session_id: sessionId,
12997
- status: row.status,
12998
- agentic_tool: row.agentic_tool,
12999
- created_at: new Date(row.created_at).toISOString(),
13000
- last_updated: row.updated_at ? new Date(row.updated_at).toISOString() : new Date(row.created_at).toISOString(),
13001
- created_by: row.created_by,
13002
- unix_username: row.unix_username || null,
13003
- branch_id: row.branch_id,
13004
- branch_board_id: boardId,
13005
- url,
13006
- ...row.data,
13007
- tasks: row.data.tasks.map((id) => id),
13008
- genealogy: {
13009
- parent_session_id: row.parent_session_id,
13010
- forked_from_session_id: row.forked_from_session_id,
13011
- fork_point_task_id: genealogyData.fork_point_task_id,
13012
- fork_point_message_index: genealogyData.fork_point_message_index,
13013
- spawn_point_task_id: genealogyData.spawn_point_task_id,
13014
- spawn_point_message_index: genealogyData.spawn_point_message_index,
13015
- children: genealogyData.children.map((id) => id)
13199
+ return attachHiddenTenant(
13200
+ {
13201
+ session_id: sessionId,
13202
+ status: row.status,
13203
+ agentic_tool: row.agentic_tool,
13204
+ created_at: new Date(row.created_at).toISOString(),
13205
+ last_updated: row.updated_at ? new Date(row.updated_at).toISOString() : new Date(row.created_at).toISOString(),
13206
+ created_by: row.created_by,
13207
+ unix_username: row.unix_username || null,
13208
+ branch_id: row.branch_id,
13209
+ branch_board_id: boardId,
13210
+ url,
13211
+ ...row.data,
13212
+ tasks: row.data.tasks.map((id) => id),
13213
+ genealogy: {
13214
+ parent_session_id: row.parent_session_id,
13215
+ forked_from_session_id: row.forked_from_session_id,
13216
+ fork_point_task_id: genealogyData.fork_point_task_id,
13217
+ fork_point_message_index: genealogyData.fork_point_message_index,
13218
+ spawn_point_task_id: genealogyData.spawn_point_task_id,
13219
+ spawn_point_message_index: genealogyData.spawn_point_message_index,
13220
+ children: genealogyData.children.map((id) => id)
13221
+ },
13222
+ permission_config: row.data.permission_config,
13223
+ scheduled_run_at: row.scheduled_run_at ?? void 0,
13224
+ scheduled_from_branch: row.scheduled_from_branch ?? false,
13225
+ schedule_id: row.schedule_id ?? void 0,
13226
+ ready_for_prompt: row.ready_for_prompt ?? false,
13227
+ archived: Boolean(row.archived),
13228
+ // Convert SQLite integer (0/1) to boolean
13229
+ archived_reason: row.archived_reason ?? void 0,
13230
+ current_context_usage: row.data.current_context_usage,
13231
+ context_window_limit: row.data.context_window_limit,
13232
+ last_context_update_at: row.data.last_context_update_at
13016
13233
  },
13017
- permission_config: row.data.permission_config,
13018
- scheduled_run_at: row.scheduled_run_at ?? void 0,
13019
- scheduled_from_branch: row.scheduled_from_branch ?? false,
13020
- schedule_id: row.schedule_id ?? void 0,
13021
- ready_for_prompt: row.ready_for_prompt ?? false,
13022
- archived: Boolean(row.archived),
13023
- // Convert SQLite integer (0/1) to boolean
13024
- archived_reason: row.archived_reason ?? void 0,
13025
- current_context_usage: row.data.current_context_usage,
13026
- context_window_limit: row.data.context_window_limit,
13027
- last_context_update_at: row.data.last_context_update_at
13028
- };
13234
+ row
13235
+ );
13029
13236
  }
13030
13237
  /**
13031
13238
  * Convert Session to database insert format
@@ -13101,7 +13308,7 @@ var SessionRepository = class {
13101
13308
  */
13102
13309
  async resolveId(id) {
13103
13310
  return resolveByShortIdPrefix(id, "Session", async (pattern) => {
13104
- const rows = await select(this.db).from(sessions3).where((0, import_drizzle_orm28.like)(sessions3.session_id, pattern)).limit(RESOLVE_SHORT_ID_FETCH_LIMIT).all();
13311
+ const rows = await select(this.db).from(sessions3).where((0, import_drizzle_orm29.like)(sessions3.session_id, pattern)).limit(RESOLVE_SHORT_ID_FETCH_LIMIT).all();
13105
13312
  return rows.map((r) => r.session_id);
13106
13313
  });
13107
13314
  }
@@ -13113,7 +13320,7 @@ var SessionRepository = class {
13113
13320
  const insertData = this.sessionToInsert(data);
13114
13321
  await insert(this.db, sessions3).values(insertData).run();
13115
13322
  const baseUrl = await getBaseUrl();
13116
- const result = await select(this.db).from(sessions3).leftJoin(branches3, (0, import_drizzle_orm28.eq)(sessions3.branch_id, branches3.branch_id)).where((0, import_drizzle_orm28.eq)(sessions3.session_id, insertData.session_id)).one();
13323
+ const result = await select(this.db).from(sessions3).leftJoin(branches3, (0, import_drizzle_orm29.eq)(sessions3.branch_id, branches3.branch_id)).where((0, import_drizzle_orm29.eq)(sessions3.session_id, insertData.session_id)).one();
13117
13324
  if (!result) {
13118
13325
  throw new RepositoryError("Failed to retrieve created session");
13119
13326
  }
@@ -13138,7 +13345,7 @@ var SessionRepository = class {
13138
13345
  try {
13139
13346
  const fullId = await this.resolveId(id);
13140
13347
  const baseUrl = await getBaseUrl();
13141
- const result = await select(this.db).from(sessions3).leftJoin(branches3, (0, import_drizzle_orm28.eq)(sessions3.branch_id, branches3.branch_id)).where((0, import_drizzle_orm28.eq)(sessions3.session_id, fullId)).one();
13348
+ const result = await select(this.db).from(sessions3).leftJoin(branches3, (0, import_drizzle_orm29.eq)(sessions3.branch_id, branches3.branch_id)).where((0, import_drizzle_orm29.eq)(sessions3.session_id, fullId)).one();
13142
13349
  if (!result) {
13143
13350
  return null;
13144
13351
  }
@@ -13161,7 +13368,7 @@ var SessionRepository = class {
13161
13368
  async findBranchIdBySessionId(id) {
13162
13369
  try {
13163
13370
  const fullId = await this.resolveId(id);
13164
- const row = await select(this.db, { branch_id: sessions3.branch_id }).from(sessions3).where((0, import_drizzle_orm28.eq)(sessions3.session_id, fullId)).one();
13371
+ const row = await select(this.db, { branch_id: sessions3.branch_id }).from(sessions3).where((0, import_drizzle_orm29.eq)(sessions3.session_id, fullId)).one();
13165
13372
  return row?.branch_id ?? null;
13166
13373
  } catch (error) {
13167
13374
  if (error instanceof EntityNotFoundError) return null;
@@ -13172,6 +13379,26 @@ var SessionRepository = class {
13172
13379
  );
13173
13380
  }
13174
13381
  }
13382
+ /**
13383
+ * Resolve the owning user id for a session without hydrating the full row.
13384
+ * Used by realtime delivery to offer streaming events to the session
13385
+ * creator's own connections as a fallback, so their open tabs keep updating
13386
+ * even before they subscribe to the per-session stream channel.
13387
+ */
13388
+ async findCreatedByBySessionId(id) {
13389
+ try {
13390
+ const fullId = await this.resolveId(id);
13391
+ const row = await select(this.db, { created_by: sessions3.created_by }).from(sessions3).where((0, import_drizzle_orm29.eq)(sessions3.session_id, fullId)).one();
13392
+ return row?.created_by ?? null;
13393
+ } catch (error) {
13394
+ if (error instanceof EntityNotFoundError) return null;
13395
+ if (error instanceof AmbiguousIdError) throw error;
13396
+ throw new RepositoryError(
13397
+ `Failed to find session owner: ${error instanceof Error ? error.message : String(error)}`,
13398
+ error
13399
+ );
13400
+ }
13401
+ }
13175
13402
  /**
13176
13403
  * Find all sessions
13177
13404
  *
@@ -13184,14 +13411,14 @@ var SessionRepository = class {
13184
13411
  if (filter?.visibleToUserId) {
13185
13412
  conditions.push(visibleBranchAccessCondition(this.db, filter.visibleToUserId));
13186
13413
  }
13187
- const query = filter?.visibleToUserId ? select(this.db).from(sessions3).leftJoin(branches3, (0, import_drizzle_orm28.eq)(sessions3.branch_id, branches3.branch_id)).leftJoin(
13414
+ const query = filter?.visibleToUserId ? select(this.db).from(sessions3).leftJoin(branches3, (0, import_drizzle_orm29.eq)(sessions3.branch_id, branches3.branch_id)).leftJoin(
13188
13415
  branchOwners3,
13189
- (0, import_drizzle_orm28.and)(
13190
- (0, import_drizzle_orm28.eq)(branchOwners3.branch_id, branches3.branch_id),
13191
- (0, import_drizzle_orm28.eq)(branchOwners3.user_id, filter.visibleToUserId)
13416
+ (0, import_drizzle_orm29.and)(
13417
+ (0, import_drizzle_orm29.eq)(branchOwners3.branch_id, branches3.branch_id),
13418
+ (0, import_drizzle_orm29.eq)(branchOwners3.user_id, filter.visibleToUserId)
13192
13419
  )
13193
- ) : select(this.db).from(sessions3).leftJoin(branches3, (0, import_drizzle_orm28.eq)(sessions3.branch_id, branches3.branch_id));
13194
- const results = conditions.length > 0 ? await query.where((0, import_drizzle_orm28.and)(...conditions)).all() : await query.all();
13420
+ ) : select(this.db).from(sessions3).leftJoin(branches3, (0, import_drizzle_orm29.eq)(sessions3.branch_id, branches3.branch_id));
13421
+ const results = conditions.length > 0 ? await query.where((0, import_drizzle_orm29.and)(...conditions)).all() : await query.all();
13195
13422
  return results.map(
13196
13423
  (result) => {
13197
13424
  const sessionRow = result.sessions;
@@ -13214,7 +13441,7 @@ var SessionRepository = class {
13214
13441
  async findByStatus(status) {
13215
13442
  try {
13216
13443
  const baseUrl = await getBaseUrl();
13217
- const results = await select(this.db).from(sessions3).leftJoin(branches3, (0, import_drizzle_orm28.eq)(sessions3.branch_id, branches3.branch_id)).where((0, import_drizzle_orm28.eq)(sessions3.status, status)).all();
13444
+ const results = await select(this.db).from(sessions3).leftJoin(branches3, (0, import_drizzle_orm29.eq)(sessions3.branch_id, branches3.branch_id)).where((0, import_drizzle_orm29.eq)(sessions3.status, status)).all();
13218
13445
  return results.map(
13219
13446
  (result) => {
13220
13447
  const sessionRow = result.sessions;
@@ -13242,18 +13469,18 @@ var SessionRepository = class {
13242
13469
  async findByBoard(boardId, filter) {
13243
13470
  try {
13244
13471
  const baseUrl = await getBaseUrl();
13245
- const conditions = [(0, import_drizzle_orm28.eq)(branches3.board_id, boardId)];
13472
+ const conditions = [(0, import_drizzle_orm29.eq)(branches3.board_id, boardId)];
13246
13473
  if (filter?.visibleToUserId) {
13247
13474
  conditions.push(visibleBranchAccessCondition(this.db, filter.visibleToUserId));
13248
13475
  }
13249
- const query = filter?.visibleToUserId ? select(this.db).from(sessions3).innerJoin(branches3, (0, import_drizzle_orm28.eq)(sessions3.branch_id, branches3.branch_id)).leftJoin(
13476
+ const query = filter?.visibleToUserId ? select(this.db).from(sessions3).innerJoin(branches3, (0, import_drizzle_orm29.eq)(sessions3.branch_id, branches3.branch_id)).leftJoin(
13250
13477
  branchOwners3,
13251
- (0, import_drizzle_orm28.and)(
13252
- (0, import_drizzle_orm28.eq)(branchOwners3.branch_id, branches3.branch_id),
13253
- (0, import_drizzle_orm28.eq)(branchOwners3.user_id, filter.visibleToUserId)
13478
+ (0, import_drizzle_orm29.and)(
13479
+ (0, import_drizzle_orm29.eq)(branchOwners3.branch_id, branches3.branch_id),
13480
+ (0, import_drizzle_orm29.eq)(branchOwners3.user_id, filter.visibleToUserId)
13254
13481
  )
13255
- ) : select(this.db).from(sessions3).innerJoin(branches3, (0, import_drizzle_orm28.eq)(sessions3.branch_id, branches3.branch_id));
13256
- const results = await query.where((0, import_drizzle_orm28.and)(...conditions)).all();
13482
+ ) : select(this.db).from(sessions3).innerJoin(branches3, (0, import_drizzle_orm29.eq)(sessions3.branch_id, branches3.branch_id));
13483
+ const results = await query.where((0, import_drizzle_orm29.and)(...conditions)).all();
13257
13484
  return results.map(
13258
13485
  (result) => {
13259
13486
  const sessionRow = result.sessions;
@@ -13289,38 +13516,38 @@ var SessionRepository = class {
13289
13516
  try {
13290
13517
  const baseUrl = await getBaseUrl();
13291
13518
  const conditions = [];
13292
- if (opts.boardId !== void 0) conditions.push((0, import_drizzle_orm28.eq)(branches3.board_id, opts.boardId));
13293
- if (opts.archived !== void 0) conditions.push((0, import_drizzle_orm28.eq)(sessions3.archived, opts.archived));
13519
+ if (opts.boardId !== void 0) conditions.push((0, import_drizzle_orm29.eq)(branches3.board_id, opts.boardId));
13520
+ if (opts.archived !== void 0) conditions.push((0, import_drizzle_orm29.eq)(sessions3.archived, opts.archived));
13294
13521
  if (opts.visibleToUserId) {
13295
13522
  conditions.push(visibleBranchAccessCondition(this.db, opts.visibleToUserId));
13296
13523
  }
13297
- const whereClause = conditions.length > 0 ? (0, import_drizzle_orm28.and)(...conditions) : void 0;
13298
- let countQuery = select(this.db, { count: import_drizzle_orm28.sql`count(*)` }).from(sessions3).leftJoin(branches3, (0, import_drizzle_orm28.eq)(sessions3.branch_id, branches3.branch_id));
13524
+ const whereClause = conditions.length > 0 ? (0, import_drizzle_orm29.and)(...conditions) : void 0;
13525
+ let countQuery = select(this.db, { count: import_drizzle_orm29.sql`count(*)` }).from(sessions3).leftJoin(branches3, (0, import_drizzle_orm29.eq)(sessions3.branch_id, branches3.branch_id));
13299
13526
  if (opts.visibleToUserId) {
13300
13527
  countQuery = countQuery.leftJoin(
13301
13528
  branchOwners3,
13302
- (0, import_drizzle_orm28.and)(
13303
- (0, import_drizzle_orm28.eq)(branchOwners3.branch_id, branches3.branch_id),
13304
- (0, import_drizzle_orm28.eq)(branchOwners3.user_id, opts.visibleToUserId)
13529
+ (0, import_drizzle_orm29.and)(
13530
+ (0, import_drizzle_orm29.eq)(branchOwners3.branch_id, branches3.branch_id),
13531
+ (0, import_drizzle_orm29.eq)(branchOwners3.user_id, opts.visibleToUserId)
13305
13532
  )
13306
13533
  );
13307
13534
  }
13308
13535
  const countRow = await (whereClause ? countQuery.where(whereClause) : countQuery).one();
13309
13536
  const total = Number(countRow?.count ?? 0);
13310
- let dataQuery = select(this.db).from(sessions3).leftJoin(branches3, (0, import_drizzle_orm28.eq)(sessions3.branch_id, branches3.branch_id));
13537
+ let dataQuery = select(this.db).from(sessions3).leftJoin(branches3, (0, import_drizzle_orm29.eq)(sessions3.branch_id, branches3.branch_id));
13311
13538
  if (opts.visibleToUserId) {
13312
13539
  dataQuery = dataQuery.leftJoin(
13313
13540
  branchOwners3,
13314
- (0, import_drizzle_orm28.and)(
13315
- (0, import_drizzle_orm28.eq)(branchOwners3.branch_id, branches3.branch_id),
13316
- (0, import_drizzle_orm28.eq)(branchOwners3.user_id, opts.visibleToUserId)
13541
+ (0, import_drizzle_orm29.and)(
13542
+ (0, import_drizzle_orm29.eq)(branchOwners3.branch_id, branches3.branch_id),
13543
+ (0, import_drizzle_orm29.eq)(branchOwners3.user_id, opts.visibleToUserId)
13317
13544
  )
13318
13545
  );
13319
13546
  }
13320
13547
  if (whereClause) dataQuery = dataQuery.where(whereClause);
13321
13548
  if (opts.sortUpdatedAt !== void 0) {
13322
13549
  dataQuery = dataQuery.orderBy(
13323
- opts.sortUpdatedAt === -1 ? (0, import_drizzle_orm28.desc)(sessions3.updated_at) : sessions3.updated_at
13550
+ opts.sortUpdatedAt === -1 ? (0, import_drizzle_orm29.desc)(sessions3.updated_at) : sessions3.updated_at
13324
13551
  );
13325
13552
  }
13326
13553
  if (opts.limit !== void 0) dataQuery = dataQuery.limit(opts.limit);
@@ -13350,10 +13577,10 @@ var SessionRepository = class {
13350
13577
  const fullId = await this.resolveId(sessionId);
13351
13578
  const baseUrl = await getBaseUrl();
13352
13579
  const { jsonExtract: jsonExtract2 } = await Promise.resolve().then(() => (init_database_wrapper(), database_wrapper_exports));
13353
- const results = await select(this.db).from(sessions3).leftJoin(branches3, (0, import_drizzle_orm28.eq)(sessions3.branch_id, branches3.branch_id)).where(
13354
- (0, import_drizzle_orm28.or)(
13355
- import_drizzle_orm28.sql`${jsonExtract2(this.db, sessions3.data, "genealogy.parent_session_id")} = ${fullId}`,
13356
- import_drizzle_orm28.sql`${jsonExtract2(this.db, sessions3.data, "genealogy.forked_from_session_id")} = ${fullId}`
13580
+ const results = await select(this.db).from(sessions3).leftJoin(branches3, (0, import_drizzle_orm29.eq)(sessions3.branch_id, branches3.branch_id)).where(
13581
+ (0, import_drizzle_orm29.or)(
13582
+ import_drizzle_orm29.sql`${jsonExtract2(this.db, sessions3.data, "genealogy.parent_session_id")} = ${fullId}`,
13583
+ import_drizzle_orm29.sql`${jsonExtract2(this.db, sessions3.data, "genealogy.forked_from_session_id")} = ${fullId}`
13357
13584
  )
13358
13585
  ).all();
13359
13586
  return results.map(
@@ -13419,8 +13646,8 @@ var SessionRepository = class {
13419
13646
  const statusInfo = updates.status ? ` (status: ${updates.status}, ready_for_prompt: ${updates.ready_for_prompt})` : "";
13420
13647
  console.debug(`\u{1F504} [SessionRepo] Updating session ${shortId(fullId)}${statusInfo}`);
13421
13648
  const result = await this.db.transaction(async (tx) => {
13422
- await lockRowForUpdate(txAsDb(tx), this.db, sessions3, (0, import_drizzle_orm28.eq)(sessions3.session_id, fullId));
13423
- const currentResult = await select(txAsDb(tx)).from(sessions3).leftJoin(branches3, (0, import_drizzle_orm28.eq)(sessions3.branch_id, branches3.branch_id)).where((0, import_drizzle_orm28.eq)(sessions3.session_id, fullId)).one();
13649
+ await lockRowForUpdate(txAsDb(tx), this.db, sessions3, (0, import_drizzle_orm29.eq)(sessions3.session_id, fullId));
13650
+ const currentResult = await select(txAsDb(tx)).from(sessions3).leftJoin(branches3, (0, import_drizzle_orm29.eq)(sessions3.branch_id, branches3.branch_id)).where((0, import_drizzle_orm29.eq)(sessions3.session_id, fullId)).one();
13424
13651
  if (!currentResult) {
13425
13652
  throw new EntityNotFoundError("Session", id);
13426
13653
  }
@@ -13433,12 +13660,12 @@ var SessionRepository = class {
13433
13660
  if (shouldRefreshLastUpdated) {
13434
13661
  insertData.updated_at = /* @__PURE__ */ new Date();
13435
13662
  }
13436
- await update(txAsDb(tx), sessions3).set(insertData).where((0, import_drizzle_orm28.eq)(sessions3.session_id, fullId)).run();
13663
+ await update(txAsDb(tx), sessions3).set(insertData).where((0, import_drizzle_orm29.eq)(sessions3.session_id, fullId)).run();
13437
13664
  if (!insertData.updated_at) {
13438
13665
  throw new RepositoryError("Session update did not produce an updated_at timestamp");
13439
13666
  }
13440
13667
  merged.last_updated = insertData.updated_at.toISOString();
13441
- return merged;
13668
+ return attachHiddenTenant(merged, currentRow);
13442
13669
  });
13443
13670
  return result;
13444
13671
  } catch (error) {
@@ -13456,8 +13683,8 @@ var SessionRepository = class {
13456
13683
  async countMessages(sessionId) {
13457
13684
  const fullId = await this.resolveId(sessionId);
13458
13685
  const result = await select(this.db, {
13459
- count: import_drizzle_orm28.sql`count(*)`
13460
- }).from(messages3).where((0, import_drizzle_orm28.eq)(messages3.session_id, fullId)).one();
13686
+ count: import_drizzle_orm29.sql`count(*)`
13687
+ }).from(messages3).where((0, import_drizzle_orm29.eq)(messages3.session_id, fullId)).one();
13461
13688
  return Number(result?.count ?? 0);
13462
13689
  }
13463
13690
  /**
@@ -13466,7 +13693,7 @@ var SessionRepository = class {
13466
13693
  async delete(id) {
13467
13694
  try {
13468
13695
  const fullId = await this.resolveId(id);
13469
- const result = await deleteFrom(this.db, sessions3).where((0, import_drizzle_orm28.eq)(sessions3.session_id, fullId)).run();
13696
+ const result = await deleteFrom(this.db, sessions3).where((0, import_drizzle_orm29.eq)(sessions3.session_id, fullId)).run();
13470
13697
  if (result.rowsAffected === 0) {
13471
13698
  throw new EntityNotFoundError("Session", id);
13472
13699
  }
@@ -13490,7 +13717,7 @@ var SessionRepository = class {
13490
13717
  */
13491
13718
  async count() {
13492
13719
  try {
13493
- const result = await select(this.db, { count: import_drizzle_orm28.sql`count(*)` }).from(sessions3).one();
13720
+ const result = await select(this.db, { count: import_drizzle_orm29.sql`count(*)` }).from(sessions3).one();
13494
13721
  return result?.count ?? 0;
13495
13722
  } catch (error) {
13496
13723
  throw new RepositoryError(
@@ -13513,8 +13740,8 @@ var SessionRepository = class {
13513
13740
  async findScheduleRun(scheduleId, scheduledRunAt) {
13514
13741
  try {
13515
13742
  const baseUrl = await getBaseUrl();
13516
- const result = await select(this.db).from(sessions3).leftJoin(branches3, (0, import_drizzle_orm28.eq)(sessions3.branch_id, branches3.branch_id)).where(
13517
- (0, import_drizzle_orm28.and)((0, import_drizzle_orm28.eq)(sessions3.schedule_id, scheduleId), (0, import_drizzle_orm28.eq)(sessions3.scheduled_run_at, scheduledRunAt))
13743
+ const result = await select(this.db).from(sessions3).leftJoin(branches3, (0, import_drizzle_orm29.eq)(sessions3.branch_id, branches3.branch_id)).where(
13744
+ (0, import_drizzle_orm29.and)((0, import_drizzle_orm29.eq)(sessions3.schedule_id, scheduleId), (0, import_drizzle_orm29.eq)(sessions3.scheduled_run_at, scheduledRunAt))
13518
13745
  ).one();
13519
13746
  if (!result) return null;
13520
13747
  const r = result;
@@ -13537,9 +13764,9 @@ var SessionRepository = class {
13537
13764
  async findByScheduleId(scheduleId, opts = {}) {
13538
13765
  try {
13539
13766
  const baseUrl = await getBaseUrl();
13540
- let query = select(this.db).from(sessions3).leftJoin(branches3, (0, import_drizzle_orm28.eq)(sessions3.branch_id, branches3.branch_id)).where((0, import_drizzle_orm28.eq)(sessions3.schedule_id, scheduleId));
13767
+ let query = select(this.db).from(sessions3).leftJoin(branches3, (0, import_drizzle_orm29.eq)(sessions3.branch_id, branches3.branch_id)).where((0, import_drizzle_orm29.eq)(sessions3.schedule_id, scheduleId));
13541
13768
  if (opts.orderByScheduledRunAt === "desc") {
13542
- query = query.orderBy((0, import_drizzle_orm28.desc)(sessions3.scheduled_run_at));
13769
+ query = query.orderBy((0, import_drizzle_orm29.desc)(sessions3.scheduled_run_at));
13543
13770
  } else if (opts.orderByScheduledRunAt === "asc") {
13544
13771
  query = query.orderBy(sessions3.scheduled_run_at);
13545
13772
  }
@@ -13564,7 +13791,7 @@ var SessionRepository = class {
13564
13791
  */
13565
13792
  async countByScheduleId(scheduleId) {
13566
13793
  try {
13567
- const result = await select(this.db, { count: import_drizzle_orm28.sql`count(*)` }).from(sessions3).where((0, import_drizzle_orm28.eq)(sessions3.schedule_id, scheduleId)).one();
13794
+ const result = await select(this.db, { count: import_drizzle_orm29.sql`count(*)` }).from(sessions3).where((0, import_drizzle_orm29.eq)(sessions3.schedule_id, scheduleId)).one();
13568
13795
  return Number(result?.count ?? 0);
13569
13796
  } catch (error) {
13570
13797
  throw new RepositoryError(
@@ -13586,7 +13813,7 @@ var SessionRepository = class {
13586
13813
  async existsInBranchWithStatuses(branchId, statuses) {
13587
13814
  if (statuses.length === 0) return false;
13588
13815
  try {
13589
- const row = await select(this.db, { one: import_drizzle_orm28.sql`1` }).from(sessions3).where((0, import_drizzle_orm28.and)((0, import_drizzle_orm28.eq)(sessions3.branch_id, branchId), (0, import_drizzle_orm28.inArray)(sessions3.status, [...statuses]))).limit(1).one();
13816
+ const row = await select(this.db, { one: import_drizzle_orm29.sql`1` }).from(sessions3).where((0, import_drizzle_orm29.and)((0, import_drizzle_orm29.eq)(sessions3.branch_id, branchId), (0, import_drizzle_orm29.inArray)(sessions3.status, [...statuses]))).limit(1).one();
13590
13817
  return row != null;
13591
13818
  } catch (error) {
13592
13819
  throw new RepositoryError(
@@ -13602,7 +13829,7 @@ var SessionRepository = class {
13602
13829
  async existsInScheduleWithStatuses(scheduleId, statuses) {
13603
13830
  if (statuses.length === 0) return false;
13604
13831
  try {
13605
- const row = await select(this.db, { one: import_drizzle_orm28.sql`1` }).from(sessions3).where((0, import_drizzle_orm28.and)((0, import_drizzle_orm28.eq)(sessions3.schedule_id, scheduleId), (0, import_drizzle_orm28.inArray)(sessions3.status, [...statuses]))).limit(1).one();
13832
+ const row = await select(this.db, { one: import_drizzle_orm29.sql`1` }).from(sessions3).where((0, import_drizzle_orm29.and)((0, import_drizzle_orm29.eq)(sessions3.schedule_id, scheduleId), (0, import_drizzle_orm29.inArray)(sessions3.status, [...statuses]))).limit(1).one();
13606
13833
  return row != null;
13607
13834
  } catch (error) {
13608
13835
  throw new RepositoryError(
@@ -13633,10 +13860,10 @@ var SessionRepository = class {
13633
13860
  async findAccessibleSessions(userId, boardId) {
13634
13861
  const baseUrl = await getBaseUrl();
13635
13862
  const accessCondition = visibleBranchAccessCondition(this.db, userId);
13636
- const whereCondition = boardId ? (0, import_drizzle_orm28.and)(accessCondition, (0, import_drizzle_orm28.eq)(branches3.board_id, boardId)) : accessCondition;
13637
- const results = await select(this.db).from(sessions3).innerJoin(branches3, (0, import_drizzle_orm28.eq)(sessions3.branch_id, branches3.branch_id)).leftJoin(
13863
+ const whereCondition = boardId ? (0, import_drizzle_orm29.and)(accessCondition, (0, import_drizzle_orm29.eq)(branches3.board_id, boardId)) : accessCondition;
13864
+ const results = await select(this.db).from(sessions3).innerJoin(branches3, (0, import_drizzle_orm29.eq)(sessions3.branch_id, branches3.branch_id)).leftJoin(
13638
13865
  branchOwners3,
13639
- (0, import_drizzle_orm28.and)((0, import_drizzle_orm28.eq)(branchOwners3.branch_id, branches3.branch_id), (0, import_drizzle_orm28.eq)(branchOwners3.user_id, userId))
13866
+ (0, import_drizzle_orm29.and)((0, import_drizzle_orm29.eq)(branchOwners3.branch_id, branches3.branch_id), (0, import_drizzle_orm29.eq)(branchOwners3.user_id, userId))
13640
13867
  ).where(whereCondition).all();
13641
13868
  const seen = /* @__PURE__ */ new Set();
13642
13869
  const sessionsOut = [];
@@ -13679,8 +13906,8 @@ var SessionRepository = class {
13679
13906
  for (const sessionId of sessionIds) {
13680
13907
  const query = select(this.db, {
13681
13908
  data: messagesTable.data
13682
- }).from(messagesTable).where((0, import_drizzle_orm28.and)((0, import_drizzle_orm28.eq)(messagesTable.session_id, sessionId), (0, import_drizzle_orm28.eq)(messagesTable.role, "assistant")));
13683
- const lastMessage = await query.orderBy((0, import_drizzle_orm28.desc)(messagesTable.index)).limit(1).one();
13909
+ }).from(messagesTable).where((0, import_drizzle_orm29.and)((0, import_drizzle_orm29.eq)(messagesTable.session_id, sessionId), (0, import_drizzle_orm29.eq)(messagesTable.role, "assistant")));
13910
+ const lastMessage = await query.orderBy((0, import_drizzle_orm29.desc)(messagesTable.index)).limit(1).one();
13684
13911
  if (lastMessage) {
13685
13912
  const messageData = lastMessage.data;
13686
13913
  let fullText = "";
@@ -13714,7 +13941,7 @@ var SessionRepository = class {
13714
13941
  */
13715
13942
  async exists(sessionId) {
13716
13943
  try {
13717
- const row = await select(this.db).from(sessions3).where((0, import_drizzle_orm28.eq)(sessions3.session_id, sessionId)).one();
13944
+ const row = await select(this.db).from(sessions3).where((0, import_drizzle_orm29.eq)(sessions3.session_id, sessionId)).one();
13718
13945
  return row != null;
13719
13946
  } catch (error) {
13720
13947
  throw new RepositoryError(
@@ -13748,16 +13975,16 @@ var SessionMCPServerRepository = class {
13748
13975
  throw new EntityNotFoundError("MCPServer", serverId);
13749
13976
  }
13750
13977
  const existing = await select(this.db).from(sessionMcpServers3).where(
13751
- (0, import_drizzle_orm29.and)(
13752
- (0, import_drizzle_orm29.eq)(sessionMcpServers3.session_id, sessionId),
13753
- (0, import_drizzle_orm29.eq)(sessionMcpServers3.mcp_server_id, serverId)
13978
+ (0, import_drizzle_orm30.and)(
13979
+ (0, import_drizzle_orm30.eq)(sessionMcpServers3.session_id, sessionId),
13980
+ (0, import_drizzle_orm30.eq)(sessionMcpServers3.mcp_server_id, serverId)
13754
13981
  )
13755
13982
  ).one();
13756
13983
  if (existing) {
13757
13984
  await update(this.db, sessionMcpServers3).set({ enabled: true }).where(
13758
- (0, import_drizzle_orm29.and)(
13759
- (0, import_drizzle_orm29.eq)(sessionMcpServers3.session_id, sessionId),
13760
- (0, import_drizzle_orm29.eq)(sessionMcpServers3.mcp_server_id, serverId)
13985
+ (0, import_drizzle_orm30.and)(
13986
+ (0, import_drizzle_orm30.eq)(sessionMcpServers3.session_id, sessionId),
13987
+ (0, import_drizzle_orm30.eq)(sessionMcpServers3.mcp_server_id, serverId)
13761
13988
  )
13762
13989
  ).run();
13763
13990
  return;
@@ -13783,9 +14010,9 @@ var SessionMCPServerRepository = class {
13783
14010
  async removeServer(sessionId, serverId) {
13784
14011
  try {
13785
14012
  const result = await deleteFrom(this.db, sessionMcpServers3).where(
13786
- (0, import_drizzle_orm29.and)(
13787
- (0, import_drizzle_orm29.eq)(sessionMcpServers3.session_id, sessionId),
13788
- (0, import_drizzle_orm29.eq)(sessionMcpServers3.mcp_server_id, serverId)
14013
+ (0, import_drizzle_orm30.and)(
14014
+ (0, import_drizzle_orm30.eq)(sessionMcpServers3.session_id, sessionId),
14015
+ (0, import_drizzle_orm30.eq)(sessionMcpServers3.mcp_server_id, serverId)
13789
14016
  )
13790
14017
  ).run();
13791
14018
  if (result.rowsAffected === 0) {
@@ -13805,9 +14032,9 @@ var SessionMCPServerRepository = class {
13805
14032
  async toggleServer(sessionId, serverId, enabled) {
13806
14033
  try {
13807
14034
  const result = await update(this.db, sessionMcpServers3).set({ enabled }).where(
13808
- (0, import_drizzle_orm29.and)(
13809
- (0, import_drizzle_orm29.eq)(sessionMcpServers3.session_id, sessionId),
13810
- (0, import_drizzle_orm29.eq)(sessionMcpServers3.mcp_server_id, serverId)
14035
+ (0, import_drizzle_orm30.and)(
14036
+ (0, import_drizzle_orm30.eq)(sessionMcpServers3.session_id, sessionId),
14037
+ (0, import_drizzle_orm30.eq)(sessionMcpServers3.mcp_server_id, serverId)
13811
14038
  )
13812
14039
  ).run();
13813
14040
  if (result.rowsAffected === 0) {
@@ -13826,11 +14053,11 @@ var SessionMCPServerRepository = class {
13826
14053
  */
13827
14054
  async listServers(sessionId, enabledOnly = false) {
13828
14055
  try {
13829
- const conditions = [(0, import_drizzle_orm29.eq)(sessionMcpServers3.session_id, sessionId)];
14056
+ const conditions = [(0, import_drizzle_orm30.eq)(sessionMcpServers3.session_id, sessionId)];
13830
14057
  if (enabledOnly) {
13831
- conditions.push((0, import_drizzle_orm29.eq)(sessionMcpServers3.enabled, true));
14058
+ conditions.push((0, import_drizzle_orm30.eq)(sessionMcpServers3.enabled, true));
13832
14059
  }
13833
- const relationships = await select(this.db).from(sessionMcpServers3).where((0, import_drizzle_orm29.and)(...conditions)).all();
14060
+ const relationships = await select(this.db).from(sessionMcpServers3).where((0, import_drizzle_orm30.and)(...conditions)).all();
13834
14061
  const servers = [];
13835
14062
  for (const rel of relationships) {
13836
14063
  const server = await this.mcpServerRepo.findById(rel.mcp_server_id);
@@ -13852,11 +14079,11 @@ var SessionMCPServerRepository = class {
13852
14079
  */
13853
14080
  async listServersWithMetadata(sessionId, enabledOnly = false) {
13854
14081
  try {
13855
- const conditions = [(0, import_drizzle_orm29.eq)(sessionMcpServers3.session_id, sessionId)];
14082
+ const conditions = [(0, import_drizzle_orm30.eq)(sessionMcpServers3.session_id, sessionId)];
13856
14083
  if (enabledOnly) {
13857
- conditions.push((0, import_drizzle_orm29.eq)(sessionMcpServers3.enabled, true));
14084
+ conditions.push((0, import_drizzle_orm30.eq)(sessionMcpServers3.enabled, true));
13858
14085
  }
13859
- const relationships = await select(this.db).from(sessionMcpServers3).where((0, import_drizzle_orm29.and)(...conditions)).all();
14086
+ const relationships = await select(this.db).from(sessionMcpServers3).where((0, import_drizzle_orm30.and)(...conditions)).all();
13860
14087
  const results = [];
13861
14088
  for (const rel of relationships) {
13862
14089
  const server = await this.mcpServerRepo.findById(rel.mcp_server_id);
@@ -13887,7 +14114,7 @@ var SessionMCPServerRepository = class {
13887
14114
  if (!session) {
13888
14115
  throw new EntityNotFoundError("Session", sessionId);
13889
14116
  }
13890
- await deleteFrom(this.db, sessionMcpServers3).where((0, import_drizzle_orm29.eq)(sessionMcpServers3.session_id, sessionId)).run();
14117
+ await deleteFrom(this.db, sessionMcpServers3).where((0, import_drizzle_orm30.eq)(sessionMcpServers3.session_id, sessionId)).run();
13891
14118
  if (serverIds.length > 0) {
13892
14119
  const inserts = serverIds.map((serverId) => ({
13893
14120
  session_id: sessionId,
@@ -13911,9 +14138,9 @@ var SessionMCPServerRepository = class {
13911
14138
  async getRelationship(sessionId, serverId) {
13912
14139
  try {
13913
14140
  const row = await select(this.db).from(sessionMcpServers3).where(
13914
- (0, import_drizzle_orm29.and)(
13915
- (0, import_drizzle_orm29.eq)(sessionMcpServers3.session_id, sessionId),
13916
- (0, import_drizzle_orm29.eq)(sessionMcpServers3.mcp_server_id, serverId)
14141
+ (0, import_drizzle_orm30.and)(
14142
+ (0, import_drizzle_orm30.eq)(sessionMcpServers3.session_id, sessionId),
14143
+ (0, import_drizzle_orm30.eq)(sessionMcpServers3.mcp_server_id, serverId)
13917
14144
  )
13918
14145
  ).one();
13919
14146
  if (!row) {
@@ -13950,7 +14177,7 @@ var SessionMCPServerRepository = class {
13950
14177
 
13951
14178
  // src/db/repositories/session-relationships.ts
13952
14179
  init_cjs_shims();
13953
- var import_drizzle_orm30 = require("drizzle-orm");
14180
+ var import_drizzle_orm31 = require("drizzle-orm");
13954
14181
  init_ids();
13955
14182
  init_database_wrapper();
13956
14183
  init_schema();
@@ -13998,7 +14225,7 @@ var SessionRelationshipRepository = class {
13998
14225
  }
13999
14226
  async get(relationshipId) {
14000
14227
  try {
14001
- const row = await select(this.db).from(sessionRelationships3).where((0, import_drizzle_orm30.eq)(sessionRelationships3.relationship_id, relationshipId)).one();
14228
+ const row = await select(this.db).from(sessionRelationships3).where((0, import_drizzle_orm31.eq)(sessionRelationships3.relationship_id, relationshipId)).one();
14002
14229
  if (!row) throw new EntityNotFoundError("SessionRelationship", relationshipId);
14003
14230
  return this.rowToRelationship(row);
14004
14231
  } catch (error) {
@@ -14012,9 +14239,9 @@ var SessionRelationshipRepository = class {
14012
14239
  async findForSession(sessionId) {
14013
14240
  try {
14014
14241
  const rows = await select(this.db).from(sessionRelationships3).where(
14015
- (0, import_drizzle_orm30.or)(
14016
- (0, import_drizzle_orm30.eq)(sessionRelationships3.source_session_id, sessionId),
14017
- (0, import_drizzle_orm30.eq)(sessionRelationships3.target_session_id, sessionId)
14242
+ (0, import_drizzle_orm31.or)(
14243
+ (0, import_drizzle_orm31.eq)(sessionRelationships3.source_session_id, sessionId),
14244
+ (0, import_drizzle_orm31.eq)(sessionRelationships3.target_session_id, sessionId)
14018
14245
  )
14019
14246
  ).all();
14020
14247
  return rows.map((row) => this.rowToRelationship(row));
@@ -14029,9 +14256,9 @@ var SessionRelationshipRepository = class {
14029
14256
  if (sessionIds.length === 0) return [];
14030
14257
  try {
14031
14258
  const rows = await select(this.db).from(sessionRelationships3).where(
14032
- (0, import_drizzle_orm30.or)(
14033
- (0, import_drizzle_orm30.inArray)(sessionRelationships3.source_session_id, sessionIds),
14034
- (0, import_drizzle_orm30.inArray)(sessionRelationships3.target_session_id, sessionIds)
14259
+ (0, import_drizzle_orm31.or)(
14260
+ (0, import_drizzle_orm31.inArray)(sessionRelationships3.source_session_id, sessionIds),
14261
+ (0, import_drizzle_orm31.inArray)(sessionRelationships3.target_session_id, sessionIds)
14035
14262
  )
14036
14263
  ).all();
14037
14264
  return rows.map((row) => this.rowToRelationship(row));
@@ -14045,9 +14272,9 @@ var SessionRelationshipRepository = class {
14045
14272
  async findRemoteChildren(sourceSessionId) {
14046
14273
  try {
14047
14274
  const rows = await select(this.db).from(sessionRelationships3).where(
14048
- (0, import_drizzle_orm30.and)(
14049
- (0, import_drizzle_orm30.eq)(sessionRelationships3.source_session_id, sourceSessionId),
14050
- (0, import_drizzle_orm30.eq)(sessionRelationships3.relationship_type, "remote_create")
14275
+ (0, import_drizzle_orm31.and)(
14276
+ (0, import_drizzle_orm31.eq)(sessionRelationships3.source_session_id, sourceSessionId),
14277
+ (0, import_drizzle_orm31.eq)(sessionRelationships3.relationship_type, "remote_create")
14051
14278
  )
14052
14279
  ).all();
14053
14280
  return rows.map((row) => this.rowToRelationship(row));
@@ -14061,9 +14288,9 @@ var SessionRelationshipRepository = class {
14061
14288
  async findRemoteParents(targetSessionId) {
14062
14289
  try {
14063
14290
  const rows = await select(this.db).from(sessionRelationships3).where(
14064
- (0, import_drizzle_orm30.and)(
14065
- (0, import_drizzle_orm30.eq)(sessionRelationships3.target_session_id, targetSessionId),
14066
- (0, import_drizzle_orm30.eq)(sessionRelationships3.relationship_type, "remote_create")
14291
+ (0, import_drizzle_orm31.and)(
14292
+ (0, import_drizzle_orm31.eq)(sessionRelationships3.target_session_id, targetSessionId),
14293
+ (0, import_drizzle_orm31.eq)(sessionRelationships3.relationship_type, "remote_create")
14067
14294
  )
14068
14295
  ).all();
14069
14296
  return rows.map((row) => this.rowToRelationship(row));
@@ -14076,11 +14303,11 @@ var SessionRelationshipRepository = class {
14076
14303
  }
14077
14304
  async setCallbackEnabled(relationshipId, callbackEnabled) {
14078
14305
  try {
14079
- const result = await update(this.db, sessionRelationships3).set({ callback_enabled: callbackEnabled, updated_at: /* @__PURE__ */ new Date() }).where((0, import_drizzle_orm30.eq)(sessionRelationships3.relationship_id, relationshipId)).run();
14306
+ const result = await update(this.db, sessionRelationships3).set({ callback_enabled: callbackEnabled, updated_at: /* @__PURE__ */ new Date() }).where((0, import_drizzle_orm31.eq)(sessionRelationships3.relationship_id, relationshipId)).run();
14080
14307
  if (result.rowsAffected === 0) {
14081
14308
  throw new EntityNotFoundError("SessionRelationship", relationshipId);
14082
14309
  }
14083
- const row = await select(this.db).from(sessionRelationships3).where((0, import_drizzle_orm30.eq)(sessionRelationships3.relationship_id, relationshipId)).one();
14310
+ const row = await select(this.db).from(sessionRelationships3).where((0, import_drizzle_orm31.eq)(sessionRelationships3.relationship_id, relationshipId)).one();
14084
14311
  if (!row) throw new EntityNotFoundError("SessionRelationship", relationshipId);
14085
14312
  return this.rowToRelationship(row);
14086
14313
  } catch (error) {
@@ -14094,9 +14321,9 @@ var SessionRelationshipRepository = class {
14094
14321
  async setCallbackEnabledForTargetSession(targetSessionId, callbackEnabled) {
14095
14322
  try {
14096
14323
  await update(this.db, sessionRelationships3).set({ callback_enabled: callbackEnabled, updated_at: /* @__PURE__ */ new Date() }).where(
14097
- (0, import_drizzle_orm30.and)(
14098
- (0, import_drizzle_orm30.eq)(sessionRelationships3.target_session_id, targetSessionId),
14099
- (0, import_drizzle_orm30.eq)(sessionRelationships3.relationship_type, "remote_create")
14324
+ (0, import_drizzle_orm31.and)(
14325
+ (0, import_drizzle_orm31.eq)(sessionRelationships3.target_session_id, targetSessionId),
14326
+ (0, import_drizzle_orm31.eq)(sessionRelationships3.relationship_type, "remote_create")
14100
14327
  )
14101
14328
  ).run();
14102
14329
  } catch (error) {
@@ -14111,7 +14338,7 @@ var SessionRelationshipRepository = class {
14111
14338
  // src/db/repositories/tasks.ts
14112
14339
  init_cjs_shims();
14113
14340
  init_types2();
14114
- var import_drizzle_orm31 = require("drizzle-orm");
14341
+ var import_drizzle_orm32 = require("drizzle-orm");
14115
14342
  init_ids();
14116
14343
  init_database_wrapper();
14117
14344
  init_schema();
@@ -14199,7 +14426,7 @@ var TaskRepository = class {
14199
14426
  */
14200
14427
  async resolveId(id) {
14201
14428
  return resolveByShortIdPrefix(id, "Task", async (pattern) => {
14202
- const rows = await select(this.db).from(tasks3).where((0, import_drizzle_orm31.like)(tasks3.task_id, pattern)).limit(RESOLVE_SHORT_ID_FETCH_LIMIT).all();
14429
+ const rows = await select(this.db).from(tasks3).where((0, import_drizzle_orm32.like)(tasks3.task_id, pattern)).limit(RESOLVE_SHORT_ID_FETCH_LIMIT).all();
14203
14430
  return rows.map((r) => r.task_id);
14204
14431
  });
14205
14432
  }
@@ -14210,7 +14437,7 @@ var TaskRepository = class {
14210
14437
  try {
14211
14438
  const insertData = this.taskToInsert(data);
14212
14439
  await insert(this.db, tasks3).values(insertData).run();
14213
- const row = await select(this.db).from(tasks3).where((0, import_drizzle_orm31.eq)(tasks3.task_id, insertData.task_id)).one();
14440
+ const row = await select(this.db).from(tasks3).where((0, import_drizzle_orm32.eq)(tasks3.task_id, insertData.task_id)).one();
14214
14441
  if (!row) {
14215
14442
  throw new RepositoryError("Failed to retrieve created task");
14216
14443
  }
@@ -14234,7 +14461,7 @@ var TaskRepository = class {
14234
14461
  const inserts = taskList.map((task) => this.taskToInsert(task));
14235
14462
  await insert(this.db, tasks3).values(inserts).run();
14236
14463
  const taskIds = inserts.map((t3) => t3.task_id);
14237
- const rows = await select(this.db).from(tasks3).where((0, import_drizzle_orm31.inArray)(tasks3.task_id, taskIds)).all();
14464
+ const rows = await select(this.db).from(tasks3).where((0, import_drizzle_orm32.inArray)(tasks3.task_id, taskIds)).all();
14238
14465
  const rowsById = new Map(rows.map((r) => [r.task_id, r]));
14239
14466
  return taskIds.map((id) => this.rowToTask(rowsById.get(id)));
14240
14467
  } catch (error) {
@@ -14250,7 +14477,7 @@ var TaskRepository = class {
14250
14477
  async findById(id) {
14251
14478
  try {
14252
14479
  const fullId = await this.resolveId(id);
14253
- const row = await select(this.db).from(tasks3).where((0, import_drizzle_orm31.eq)(tasks3.task_id, fullId)).one();
14480
+ const row = await select(this.db).from(tasks3).where((0, import_drizzle_orm32.eq)(tasks3.task_id, fullId)).one();
14254
14481
  return row ? this.rowToTask(row) : null;
14255
14482
  } catch (error) {
14256
14483
  if (error instanceof EntityNotFoundError) return null;
@@ -14268,17 +14495,17 @@ var TaskRepository = class {
14268
14495
  try {
14269
14496
  if (filter?.sessionIds !== void 0 && filter.sessionIds.length === 0) return [];
14270
14497
  const conditions = [];
14271
- if (filter?.sessionId) conditions.push((0, import_drizzle_orm31.eq)(tasks3.session_id, filter.sessionId));
14498
+ if (filter?.sessionId) conditions.push((0, import_drizzle_orm32.eq)(tasks3.session_id, filter.sessionId));
14272
14499
  if (filter?.sessionIds !== void 0)
14273
- conditions.push((0, import_drizzle_orm31.inArray)(tasks3.session_id, filter.sessionIds));
14274
- if (filter?.status) conditions.push((0, import_drizzle_orm31.eq)(tasks3.status, filter.status));
14500
+ conditions.push((0, import_drizzle_orm32.inArray)(tasks3.session_id, filter.sessionIds));
14501
+ if (filter?.status) conditions.push((0, import_drizzle_orm32.eq)(tasks3.status, filter.status));
14275
14502
  if (filter?.visibleToUserId) {
14276
14503
  conditions.push(
14277
14504
  visibleSessionReferenceAccessExists(this.db, filter.visibleToUserId, tasks3.session_id)
14278
14505
  );
14279
14506
  }
14280
14507
  const query = select(this.db).from(tasks3);
14281
- const rows = conditions.length > 0 ? await query.where((0, import_drizzle_orm31.and)(...conditions)).all() : await query.all();
14508
+ const rows = conditions.length > 0 ? await query.where((0, import_drizzle_orm32.and)(...conditions)).all() : await query.all();
14282
14509
  return rows.map((row) => this.rowToTask(row));
14283
14510
  } catch (error) {
14284
14511
  throw new RepositoryError(
@@ -14292,7 +14519,7 @@ var TaskRepository = class {
14292
14519
  */
14293
14520
  async findBySession(sessionId) {
14294
14521
  try {
14295
- const rows = await select(this.db).from(tasks3).where((0, import_drizzle_orm31.eq)(tasks3.session_id, sessionId)).orderBy(tasks3.created_at).all();
14522
+ const rows = await select(this.db).from(tasks3).where((0, import_drizzle_orm32.eq)(tasks3.session_id, sessionId)).orderBy(tasks3.created_at).all();
14296
14523
  return rows.map((row) => this.rowToTask(row));
14297
14524
  } catch (error) {
14298
14525
  throw new RepositoryError(
@@ -14306,7 +14533,7 @@ var TaskRepository = class {
14306
14533
  */
14307
14534
  async findRunning() {
14308
14535
  try {
14309
- const rows = await select(this.db).from(tasks3).where((0, import_drizzle_orm31.eq)(tasks3.status, TaskStatus.RUNNING)).all();
14536
+ const rows = await select(this.db).from(tasks3).where((0, import_drizzle_orm32.eq)(tasks3.status, TaskStatus.RUNNING)).all();
14310
14537
  return rows.map((row) => this.rowToTask(row));
14311
14538
  } catch (error) {
14312
14539
  throw new RepositoryError(
@@ -14327,7 +14554,7 @@ var TaskRepository = class {
14327
14554
  async findOrphaned() {
14328
14555
  try {
14329
14556
  const rows = await select(this.db).from(tasks3).where(
14330
- import_drizzle_orm31.sql`${tasks3.status} IN ('running', 'stopping', 'awaiting_permission', 'awaiting_input')`
14557
+ import_drizzle_orm32.sql`${tasks3.status} IN ('running', 'stopping', 'awaiting_permission', 'awaiting_input')`
14331
14558
  ).all();
14332
14559
  return rows.map((row) => this.rowToTask(row));
14333
14560
  } catch (error) {
@@ -14347,7 +14574,7 @@ var TaskRepository = class {
14347
14574
  async findActiveWithExecutorHeartbeat() {
14348
14575
  try {
14349
14576
  const rows = await select(this.db).from(tasks3).where(
14350
- import_drizzle_orm31.sql`${tasks3.status} IN ('running', 'stopping', 'awaiting_permission', 'awaiting_input') AND ${tasks3.last_executor_heartbeat_at} IS NOT NULL`
14577
+ import_drizzle_orm32.sql`${tasks3.status} IN ('running', 'stopping', 'awaiting_permission', 'awaiting_input') AND ${tasks3.last_executor_heartbeat_at} IS NOT NULL`
14351
14578
  ).all();
14352
14579
  return rows.map((row) => this.rowToTask(row));
14353
14580
  } catch (error) {
@@ -14362,7 +14589,7 @@ var TaskRepository = class {
14362
14589
  */
14363
14590
  async findByStatus(status) {
14364
14591
  try {
14365
- const rows = await select(this.db).from(tasks3).where((0, import_drizzle_orm31.eq)(tasks3.status, status)).all();
14592
+ const rows = await select(this.db).from(tasks3).where((0, import_drizzle_orm32.eq)(tasks3.status, status)).all();
14366
14593
  return rows.map((row) => this.rowToTask(row));
14367
14594
  } catch (error) {
14368
14595
  throw new RepositoryError(
@@ -14384,8 +14611,8 @@ var TaskRepository = class {
14384
14611
  `\u{1F504} [TaskRepo] Updating task ${shortId(fullId)}${updates.status ? ` (status: ${updates.status})` : ""}`
14385
14612
  );
14386
14613
  const result = await this.db.transaction(async (tx) => {
14387
- await lockRowForUpdate(txAsDb(tx), this.db, tasks3, (0, import_drizzle_orm31.eq)(tasks3.task_id, fullId));
14388
- const currentRow = await select(txAsDb(tx)).from(tasks3).where((0, import_drizzle_orm31.eq)(tasks3.task_id, fullId)).one();
14614
+ await lockRowForUpdate(txAsDb(tx), this.db, tasks3, (0, import_drizzle_orm32.eq)(tasks3.task_id, fullId));
14615
+ const currentRow = await select(txAsDb(tx)).from(tasks3).where((0, import_drizzle_orm32.eq)(tasks3.task_id, fullId)).one();
14389
14616
  if (!currentRow) {
14390
14617
  throw new EntityNotFoundError("Task", id);
14391
14618
  }
@@ -14399,7 +14626,7 @@ var TaskRepository = class {
14399
14626
  last_executor_heartbeat_at: insertData.last_executor_heartbeat_at,
14400
14627
  session_md5: insertData.session_md5,
14401
14628
  data: insertData.data
14402
- }).where((0, import_drizzle_orm31.eq)(tasks3.task_id, fullId)).run();
14629
+ }).where((0, import_drizzle_orm32.eq)(tasks3.task_id, fullId)).run();
14403
14630
  return merged;
14404
14631
  });
14405
14632
  return result;
@@ -14418,7 +14645,7 @@ var TaskRepository = class {
14418
14645
  async delete(id) {
14419
14646
  try {
14420
14647
  const fullId = await this.resolveId(id);
14421
- const result = await deleteFrom(this.db, tasks3).where((0, import_drizzle_orm31.eq)(tasks3.task_id, fullId)).run();
14648
+ const result = await deleteFrom(this.db, tasks3).where((0, import_drizzle_orm32.eq)(tasks3.task_id, fullId)).run();
14422
14649
  if (result.rowsAffected === 0) {
14423
14650
  throw new EntityNotFoundError("Task", id);
14424
14651
  }
@@ -14472,15 +14699,15 @@ var TaskRepository = class {
14472
14699
  }
14473
14700
  return this.db.transaction(async (tx) => {
14474
14701
  const positionRow = await select(txAsDb(tx), {
14475
- maxPos: import_drizzle_orm31.sql`max(${tasks3.queue_position})`
14476
- }).from(tasks3).where(import_drizzle_orm31.sql`${tasks3.session_id} = ${input.session_id} AND ${tasks3.status} = 'queued'`).one();
14702
+ maxPos: import_drizzle_orm32.sql`max(${tasks3.queue_position})`
14703
+ }).from(tasks3).where(import_drizzle_orm32.sql`${tasks3.session_id} = ${input.session_id} AND ${tasks3.status} = 'queued'`).one();
14477
14704
  const nextPosition = (positionRow?.maxPos ?? 0) + 1;
14478
14705
  const insertData = this.taskToInsert({
14479
14706
  ...taskBase,
14480
14707
  queue_position: nextPosition
14481
14708
  });
14482
14709
  await insert(txAsDb(tx), tasks3).values(insertData).run();
14483
- const row = await select(txAsDb(tx)).from(tasks3).where((0, import_drizzle_orm31.eq)(tasks3.task_id, insertData.task_id)).one();
14710
+ const row = await select(txAsDb(tx)).from(tasks3).where((0, import_drizzle_orm32.eq)(tasks3.task_id, insertData.task_id)).one();
14484
14711
  if (!row) {
14485
14712
  throw new RepositoryError("Failed to retrieve created queued task");
14486
14713
  }
@@ -14492,7 +14719,7 @@ var TaskRepository = class {
14492
14719
  */
14493
14720
  async findQueued(sessionId) {
14494
14721
  try {
14495
- const rows = await select(this.db).from(tasks3).where(import_drizzle_orm31.sql`${tasks3.session_id} = ${sessionId} AND ${tasks3.status} = 'queued'`).orderBy(tasks3.queue_position).all();
14722
+ const rows = await select(this.db).from(tasks3).where(import_drizzle_orm32.sql`${tasks3.session_id} = ${sessionId} AND ${tasks3.status} = 'queued'`).orderBy(tasks3.queue_position).all();
14496
14723
  return rows.map((row) => this.rowToTask(row));
14497
14724
  } catch (error) {
14498
14725
  throw new RepositoryError(
@@ -14507,7 +14734,7 @@ var TaskRepository = class {
14507
14734
  */
14508
14735
  async getNextQueued(sessionId) {
14509
14736
  try {
14510
- const row = await select(this.db).from(tasks3).where(import_drizzle_orm31.sql`${tasks3.session_id} = ${sessionId} AND ${tasks3.status} = 'queued'`).orderBy(tasks3.queue_position).limit(1).one();
14737
+ const row = await select(this.db).from(tasks3).where(import_drizzle_orm32.sql`${tasks3.session_id} = ${sessionId} AND ${tasks3.status} = 'queued'`).orderBy(tasks3.queue_position).limit(1).one();
14511
14738
  return row ? this.rowToTask(row) : null;
14512
14739
  } catch (error) {
14513
14740
  throw new RepositoryError(
@@ -14521,7 +14748,7 @@ var TaskRepository = class {
14521
14748
  */
14522
14749
  async countBySession(sessionId) {
14523
14750
  try {
14524
- const result = await select(this.db, { count: import_drizzle_orm31.sql`count(*)` }).from(tasks3).where((0, import_drizzle_orm31.eq)(tasks3.session_id, sessionId)).one();
14751
+ const result = await select(this.db, { count: import_drizzle_orm32.sql`count(*)` }).from(tasks3).where((0, import_drizzle_orm32.eq)(tasks3.session_id, sessionId)).one();
14525
14752
  return result?.count ?? 0;
14526
14753
  } catch (error) {
14527
14754
  throw new RepositoryError(
@@ -14535,7 +14762,7 @@ var TaskRepository = class {
14535
14762
  // src/db/repositories/thread-session-map.ts
14536
14763
  init_cjs_shims();
14537
14764
  init_types2();
14538
- var import_drizzle_orm32 = require("drizzle-orm");
14765
+ var import_drizzle_orm33 = require("drizzle-orm");
14539
14766
  init_ids();
14540
14767
  init_database_wrapper();
14541
14768
  init_schema();
@@ -14585,7 +14812,7 @@ var ThreadSessionMapRepository = class {
14585
14812
  return id;
14586
14813
  }
14587
14814
  const pattern = prefixToLikePattern(id);
14588
- const results = await select(this.db).from(threadSessionMap3).where((0, import_drizzle_orm32.like)(threadSessionMap3.id, pattern)).all();
14815
+ const results = await select(this.db).from(threadSessionMap3).where((0, import_drizzle_orm33.like)(threadSessionMap3.id, pattern)).all();
14589
14816
  if (results.length === 0) {
14590
14817
  throw new EntityNotFoundError("ThreadSessionMap", id);
14591
14818
  }
@@ -14608,7 +14835,7 @@ var ThreadSessionMapRepository = class {
14608
14835
  id: data.id ?? generateId()
14609
14836
  });
14610
14837
  await insert(this.db, threadSessionMap3).values(insertData).run();
14611
- const row = await select(this.db).from(threadSessionMap3).where((0, import_drizzle_orm32.eq)(threadSessionMap3.id, insertData.id)).one();
14838
+ const row = await select(this.db).from(threadSessionMap3).where((0, import_drizzle_orm33.eq)(threadSessionMap3.id, insertData.id)).one();
14612
14839
  if (!row) {
14613
14840
  throw new RepositoryError("Failed to retrieve created thread-session mapping");
14614
14841
  }
@@ -14627,7 +14854,7 @@ var ThreadSessionMapRepository = class {
14627
14854
  async findById(id) {
14628
14855
  try {
14629
14856
  const fullId = await this.resolveId(id);
14630
- const row = await select(this.db).from(threadSessionMap3).where((0, import_drizzle_orm32.eq)(threadSessionMap3.id, fullId)).one();
14857
+ const row = await select(this.db).from(threadSessionMap3).where((0, import_drizzle_orm33.eq)(threadSessionMap3.id, fullId)).one();
14631
14858
  return row ? this.rowToMapping(row) : null;
14632
14859
  } catch (error) {
14633
14860
  if (error instanceof EntityNotFoundError) return null;
@@ -14668,7 +14895,7 @@ var ThreadSessionMapRepository = class {
14668
14895
  status: insertData.status,
14669
14896
  last_message_at: insertData.last_message_at,
14670
14897
  metadata: insertData.metadata
14671
- }).where((0, import_drizzle_orm32.eq)(threadSessionMap3.id, fullId)).run();
14898
+ }).where((0, import_drizzle_orm33.eq)(threadSessionMap3.id, fullId)).run();
14672
14899
  const updated = await this.findById(fullId);
14673
14900
  if (!updated) {
14674
14901
  throw new RepositoryError("Failed to retrieve updated thread-session mapping");
@@ -14689,7 +14916,7 @@ var ThreadSessionMapRepository = class {
14689
14916
  async delete(id) {
14690
14917
  try {
14691
14918
  const fullId = await this.resolveId(id);
14692
- const result = await deleteFrom(this.db, threadSessionMap3).where((0, import_drizzle_orm32.eq)(threadSessionMap3.id, fullId)).run();
14919
+ const result = await deleteFrom(this.db, threadSessionMap3).where((0, import_drizzle_orm33.eq)(threadSessionMap3.id, fullId)).run();
14693
14920
  if (result.rowsAffected === 0) {
14694
14921
  throw new EntityNotFoundError("ThreadSessionMap", id);
14695
14922
  }
@@ -14707,7 +14934,7 @@ var ThreadSessionMapRepository = class {
14707
14934
  async findByChannelAndThread(channelId, threadId) {
14708
14935
  try {
14709
14936
  const row = await select(this.db).from(threadSessionMap3).where(
14710
- (0, import_drizzle_orm32.and)((0, import_drizzle_orm32.eq)(threadSessionMap3.channel_id, channelId), (0, import_drizzle_orm32.eq)(threadSessionMap3.thread_id, threadId))
14937
+ (0, import_drizzle_orm33.and)((0, import_drizzle_orm33.eq)(threadSessionMap3.channel_id, channelId), (0, import_drizzle_orm33.eq)(threadSessionMap3.thread_id, threadId))
14711
14938
  ).one();
14712
14939
  return row ? this.rowToMapping(row) : null;
14713
14940
  } catch (error) {
@@ -14724,7 +14951,7 @@ var ThreadSessionMapRepository = class {
14724
14951
  */
14725
14952
  async findByThread(threadId) {
14726
14953
  try {
14727
- const row = await select(this.db).from(threadSessionMap3).where((0, import_drizzle_orm32.eq)(threadSessionMap3.thread_id, threadId)).one();
14954
+ const row = await select(this.db).from(threadSessionMap3).where((0, import_drizzle_orm33.eq)(threadSessionMap3.thread_id, threadId)).one();
14728
14955
  return row ? this.rowToMapping(row) : null;
14729
14956
  } catch (error) {
14730
14957
  throw new RepositoryError(
@@ -14738,7 +14965,7 @@ var ThreadSessionMapRepository = class {
14738
14965
  */
14739
14966
  async findBySession(sessionId) {
14740
14967
  try {
14741
- const row = await select(this.db).from(threadSessionMap3).where((0, import_drizzle_orm32.eq)(threadSessionMap3.session_id, sessionId)).one();
14968
+ const row = await select(this.db).from(threadSessionMap3).where((0, import_drizzle_orm33.eq)(threadSessionMap3.session_id, sessionId)).one();
14742
14969
  return row ? this.rowToMapping(row) : null;
14743
14970
  } catch (error) {
14744
14971
  throw new RepositoryError(
@@ -14752,11 +14979,11 @@ var ThreadSessionMapRepository = class {
14752
14979
  */
14753
14980
  async findByChannel(channelId, status) {
14754
14981
  try {
14755
- const conditions = [(0, import_drizzle_orm32.eq)(threadSessionMap3.channel_id, channelId)];
14982
+ const conditions = [(0, import_drizzle_orm33.eq)(threadSessionMap3.channel_id, channelId)];
14756
14983
  if (status) {
14757
- conditions.push((0, import_drizzle_orm32.eq)(threadSessionMap3.status, status));
14984
+ conditions.push((0, import_drizzle_orm33.eq)(threadSessionMap3.status, status));
14758
14985
  }
14759
- const rows = await select(this.db).from(threadSessionMap3).where((0, import_drizzle_orm32.and)(...conditions)).all();
14986
+ const rows = await select(this.db).from(threadSessionMap3).where((0, import_drizzle_orm33.and)(...conditions)).all();
14760
14987
  return rows.map((row) => this.rowToMapping(row));
14761
14988
  } catch (error) {
14762
14989
  throw new RepositoryError(
@@ -14772,7 +14999,7 @@ var ThreadSessionMapRepository = class {
14772
14999
  try {
14773
15000
  await update(this.db, threadSessionMap3).set({
14774
15001
  last_message_at: /* @__PURE__ */ new Date()
14775
- }).where((0, import_drizzle_orm32.eq)(threadSessionMap3.id, id)).run();
15002
+ }).where((0, import_drizzle_orm33.eq)(threadSessionMap3.id, id)).run();
14776
15003
  } catch (error) {
14777
15004
  throw new RepositoryError(
14778
15005
  `Failed to update last message timestamp: ${error instanceof Error ? error.message : String(error)}`,
@@ -14785,7 +15012,7 @@ var ThreadSessionMapRepository = class {
14785
15012
  */
14786
15013
  async updateMetadata(id, metadata) {
14787
15014
  try {
14788
- await update(this.db, threadSessionMap3).set({ metadata }).where((0, import_drizzle_orm32.eq)(threadSessionMap3.id, id)).run();
15015
+ await update(this.db, threadSessionMap3).set({ metadata }).where((0, import_drizzle_orm33.eq)(threadSessionMap3.id, id)).run();
14789
15016
  } catch (error) {
14790
15017
  throw new RepositoryError(
14791
15018
  `Failed to update metadata: ${error instanceof Error ? error.message : String(error)}`,
@@ -14800,7 +15027,7 @@ var ThreadSessionMapRepository = class {
14800
15027
  try {
14801
15028
  const cutoff = new Date(Date.now() - daysInactive * 24 * 60 * 60 * 1e3);
14802
15029
  const rows = await select(this.db).from(threadSessionMap3).where(
14803
- (0, import_drizzle_orm32.and)((0, import_drizzle_orm32.eq)(threadSessionMap3.status, "active"), (0, import_drizzle_orm32.lt)(threadSessionMap3.last_message_at, cutoff))
15030
+ (0, import_drizzle_orm33.and)((0, import_drizzle_orm33.eq)(threadSessionMap3.status, "active"), (0, import_drizzle_orm33.lt)(threadSessionMap3.last_message_at, cutoff))
14804
15031
  ).all();
14805
15032
  return rows.map((row) => this.rowToMapping(row));
14806
15033
  } catch (error) {
@@ -14815,7 +15042,7 @@ var ThreadSessionMapRepository = class {
14815
15042
  */
14816
15043
  async findByBranch(branchId) {
14817
15044
  try {
14818
- const rows = await select(this.db).from(threadSessionMap3).where((0, import_drizzle_orm32.eq)(threadSessionMap3.branch_id, branchId)).all();
15045
+ const rows = await select(this.db).from(threadSessionMap3).where((0, import_drizzle_orm33.eq)(threadSessionMap3.branch_id, branchId)).all();
14819
15046
  return rows.map((row) => this.rowToMapping(row));
14820
15047
  } catch (error) {
14821
15048
  throw new RepositoryError(
@@ -14830,7 +15057,7 @@ var ThreadSessionMapRepository = class {
14830
15057
  init_cjs_shims();
14831
15058
  var import_node_crypto5 = require("crypto");
14832
15059
  var import_bcryptjs2 = __toESM(require("bcryptjs"), 1);
14833
- var import_drizzle_orm33 = require("drizzle-orm");
15060
+ var import_drizzle_orm34 = require("drizzle-orm");
14834
15061
  init_ids();
14835
15062
  init_database_wrapper();
14836
15063
  init_schema();
@@ -14871,7 +15098,7 @@ var UserApiKeysRepository = class {
14871
15098
  }
14872
15099
  /** List all API keys for a user (never returns hashes) */
14873
15100
  async listByUser(userId) {
14874
- const rows = await select(this.db).from(userApiKeys3).where((0, import_drizzle_orm33.eq)(userApiKeys3.user_id, userId)).all();
15101
+ const rows = await select(this.db).from(userApiKeys3).where((0, import_drizzle_orm34.eq)(userApiKeys3.user_id, userId)).all();
14875
15102
  return rows.map((r) => ({
14876
15103
  id: r.id,
14877
15104
  name: r.name,
@@ -14882,7 +15109,7 @@ var UserApiKeysRepository = class {
14882
15109
  }
14883
15110
  /** Find a key by prefix (for auth lookup). Returns rows with hash for verification. */
14884
15111
  async findByPrefix(prefix) {
14885
- return select(this.db).from(userApiKeys3).where((0, import_drizzle_orm33.eq)(userApiKeys3.prefix, prefix)).all();
15112
+ return select(this.db).from(userApiKeys3).where((0, import_drizzle_orm34.eq)(userApiKeys3.prefix, prefix)).all();
14886
15113
  }
14887
15114
  /** Verify a raw API key against stored hashes. Returns the matching row or null. */
14888
15115
  async verifyKey(rawKey) {
@@ -14911,25 +15138,25 @@ var UserApiKeysRepository = class {
14911
15138
  await this.updateLastUsedNow(id);
14912
15139
  }
14913
15140
  async updateLastUsedNow(id) {
14914
- await update(this.db, userApiKeys3).set({ last_used_at: /* @__PURE__ */ new Date() }).where((0, import_drizzle_orm33.eq)(userApiKeys3.id, id)).run();
15141
+ await update(this.db, userApiKeys3).set({ last_used_at: /* @__PURE__ */ new Date() }).where((0, import_drizzle_orm34.eq)(userApiKeys3.id, id)).run();
14915
15142
  }
14916
15143
  /** Update key name */
14917
15144
  async updateName(id, userId, name) {
14918
- await update(this.db, userApiKeys3).set({ name }).where((0, import_drizzle_orm33.and)((0, import_drizzle_orm33.eq)(userApiKeys3.id, id), (0, import_drizzle_orm33.eq)(userApiKeys3.user_id, userId))).run();
15145
+ await update(this.db, userApiKeys3).set({ name }).where((0, import_drizzle_orm34.and)((0, import_drizzle_orm34.eq)(userApiKeys3.id, id), (0, import_drizzle_orm34.eq)(userApiKeys3.user_id, userId))).run();
14919
15146
  }
14920
15147
  /** Delete a key */
14921
15148
  async delete(id, userId) {
14922
- await deleteFrom(this.db, userApiKeys3).where((0, import_drizzle_orm33.and)((0, import_drizzle_orm33.eq)(userApiKeys3.id, id), (0, import_drizzle_orm33.eq)(userApiKeys3.user_id, userId))).run();
15149
+ await deleteFrom(this.db, userApiKeys3).where((0, import_drizzle_orm34.and)((0, import_drizzle_orm34.eq)(userApiKeys3.id, id), (0, import_drizzle_orm34.eq)(userApiKeys3.user_id, userId))).run();
14923
15150
  }
14924
15151
  /** Delete all keys for a user */
14925
15152
  async deleteAllForUser(userId) {
14926
- await deleteFrom(this.db, userApiKeys3).where((0, import_drizzle_orm33.eq)(userApiKeys3.user_id, userId)).run();
15153
+ await deleteFrom(this.db, userApiKeys3).where((0, import_drizzle_orm34.eq)(userApiKeys3.user_id, userId)).run();
14927
15154
  }
14928
15155
  };
14929
15156
 
14930
15157
  // src/db/repositories/user-mcp-oauth-tokens.ts
14931
15158
  init_cjs_shims();
14932
- var import_drizzle_orm34 = require("drizzle-orm");
15159
+ var import_drizzle_orm35 = require("drizzle-orm");
14933
15160
  init_database_wrapper();
14934
15161
  init_schema();
14935
15162
  function rowToToken(row) {
@@ -14946,9 +15173,9 @@ function rowToToken(row) {
14946
15173
  };
14947
15174
  }
14948
15175
  function matchKey(userId, serverId) {
14949
- return (0, import_drizzle_orm34.and)(
14950
- userId === null ? (0, import_drizzle_orm34.isNull)(userMcpOauthTokens3.user_id) : (0, import_drizzle_orm34.eq)(userMcpOauthTokens3.user_id, userId),
14951
- (0, import_drizzle_orm34.eq)(userMcpOauthTokens3.mcp_server_id, serverId)
15176
+ return (0, import_drizzle_orm35.and)(
15177
+ userId === null ? (0, import_drizzle_orm35.isNull)(userMcpOauthTokens3.user_id) : (0, import_drizzle_orm35.eq)(userMcpOauthTokens3.user_id, userId),
15178
+ (0, import_drizzle_orm35.eq)(userMcpOauthTokens3.mcp_server_id, serverId)
14952
15179
  );
14953
15180
  }
14954
15181
  var UserMCPOAuthTokenRepository = class {
@@ -15065,7 +15292,7 @@ var UserMCPOAuthTokenRepository = class {
15065
15292
  }
15066
15293
  async deleteAllForUser(userId) {
15067
15294
  try {
15068
- const result = await deleteFrom(this.db, userMcpOauthTokens3).where((0, import_drizzle_orm34.eq)(userMcpOauthTokens3.user_id, userId)).run();
15295
+ const result = await deleteFrom(this.db, userMcpOauthTokens3).where((0, import_drizzle_orm35.eq)(userMcpOauthTokens3.user_id, userId)).run();
15069
15296
  return result.rowsAffected;
15070
15297
  } catch (error) {
15071
15298
  throw new RepositoryError(
@@ -15076,7 +15303,7 @@ var UserMCPOAuthTokenRepository = class {
15076
15303
  }
15077
15304
  async deleteAllForServer(serverId) {
15078
15305
  try {
15079
- const result = await deleteFrom(this.db, userMcpOauthTokens3).where((0, import_drizzle_orm34.eq)(userMcpOauthTokens3.mcp_server_id, serverId)).run();
15306
+ const result = await deleteFrom(this.db, userMcpOauthTokens3).where((0, import_drizzle_orm35.eq)(userMcpOauthTokens3.mcp_server_id, serverId)).run();
15080
15307
  return result.rowsAffected;
15081
15308
  } catch (error) {
15082
15309
  throw new RepositoryError(
@@ -15087,7 +15314,7 @@ var UserMCPOAuthTokenRepository = class {
15087
15314
  }
15088
15315
  async listForUser(userId) {
15089
15316
  try {
15090
- const rows = await select(this.db).from(userMcpOauthTokens3).where((0, import_drizzle_orm34.eq)(userMcpOauthTokens3.user_id, userId)).all();
15317
+ const rows = await select(this.db).from(userMcpOauthTokens3).where((0, import_drizzle_orm35.eq)(userMcpOauthTokens3.user_id, userId)).all();
15091
15318
  return rows.map(rowToToken);
15092
15319
  } catch (error) {
15093
15320
  throw new RepositoryError(
@@ -15105,37 +15332,7 @@ var UserMCPOAuthTokenRepository = class {
15105
15332
  // src/db/repositories/users.ts
15106
15333
  init_cjs_shims();
15107
15334
  init_types2();
15108
- var import_drizzle_orm35 = require("drizzle-orm");
15109
-
15110
- // src/config/env-vars.ts
15111
- init_cjs_shims();
15112
- var V05_SCOPES = ["global", "session"];
15113
- var V05_SCOPE_SET = new Set(V05_SCOPES);
15114
- function normalizeStoredEnvVar(raw) {
15115
- if (typeof raw === "string") {
15116
- return { value_encrypted: raw, scope: "global" };
15117
- }
15118
- return {
15119
- value_encrypted: raw.value_encrypted,
15120
- scope: raw.scope,
15121
- resource_id: raw.resource_id ?? null,
15122
- extra_config: raw.extra_config ?? null
15123
- };
15124
- }
15125
- function normalizeStoredEnvMap(raw) {
15126
- const out = {};
15127
- if (!raw) return out;
15128
- for (const [key, value] of Object.entries(raw)) {
15129
- try {
15130
- out[key] = normalizeStoredEnvVar(value);
15131
- } catch (err) {
15132
- console.warn(`[env-vars] Skipping malformed env var entry ${key}:`, err);
15133
- }
15134
- }
15135
- return out;
15136
- }
15137
-
15138
- // src/db/repositories/users.ts
15335
+ var import_drizzle_orm36 = require("drizzle-orm");
15139
15336
  init_ids();
15140
15337
  init_database_wrapper();
15141
15338
  init_schema();
@@ -15238,7 +15435,7 @@ var UsersRepository = class {
15238
15435
  */
15239
15436
  async resolveId(id) {
15240
15437
  return resolveByShortIdPrefix(id, "User", async (pattern) => {
15241
- const rows = await select(this.db).from(users3).where((0, import_drizzle_orm35.like)(users3.user_id, pattern)).limit(RESOLVE_SHORT_ID_FETCH_LIMIT).all();
15438
+ const rows = await select(this.db).from(users3).where((0, import_drizzle_orm36.like)(users3.user_id, pattern)).limit(RESOLVE_SHORT_ID_FETCH_LIMIT).all();
15242
15439
  return rows.map((r) => r.user_id);
15243
15440
  });
15244
15441
  }
@@ -15246,7 +15443,7 @@ var UsersRepository = class {
15246
15443
  * Check if unix_username is already taken by another user
15247
15444
  */
15248
15445
  async isUnixUsernameTaken(unixUsername, excludeUserId) {
15249
- const result = await select(this.db).from(users3).where((0, import_drizzle_orm35.eq)(users3.unix_username, unixUsername)).one();
15446
+ const result = await select(this.db).from(users3).where((0, import_drizzle_orm36.eq)(users3.unix_username, unixUsername)).one();
15250
15447
  if (!result) {
15251
15448
  return false;
15252
15449
  }
@@ -15269,7 +15466,7 @@ var UsersRepository = class {
15269
15466
  }
15270
15467
  const insertData = this.userToInsert(data);
15271
15468
  await insert(this.db, users3).values(insertData).run();
15272
- const row = await select(this.db).from(users3).where((0, import_drizzle_orm35.eq)(users3.user_id, insertData.user_id)).one();
15469
+ const row = await select(this.db).from(users3).where((0, import_drizzle_orm36.eq)(users3.user_id, insertData.user_id)).one();
15273
15470
  if (!row) {
15274
15471
  throw new RepositoryError("Failed to retrieve created user");
15275
15472
  }
@@ -15281,7 +15478,7 @@ var UsersRepository = class {
15281
15478
  async findById(id) {
15282
15479
  try {
15283
15480
  const fullId = await this.resolveId(id);
15284
- const result = await select(this.db).from(users3).where((0, import_drizzle_orm35.eq)(users3.user_id, fullId)).one();
15481
+ const result = await select(this.db).from(users3).where((0, import_drizzle_orm36.eq)(users3.user_id, fullId)).one();
15285
15482
  if (!result) {
15286
15483
  return null;
15287
15484
  }
@@ -15297,7 +15494,7 @@ var UsersRepository = class {
15297
15494
  * Find user by email
15298
15495
  */
15299
15496
  async findByEmail(email) {
15300
- const result = await select(this.db).from(users3).where((0, import_drizzle_orm35.eq)(users3.email, email)).one();
15497
+ const result = await select(this.db).from(users3).where((0, import_drizzle_orm36.eq)(users3.email, email)).one();
15301
15498
  if (!result) {
15302
15499
  return null;
15303
15500
  }
@@ -15318,7 +15515,7 @@ var UsersRepository = class {
15318
15515
  if (!normalizedEmail) return null;
15319
15516
  const exact = await this.findByEmail(normalizedEmail);
15320
15517
  if (exact) return exact;
15321
- const results = await select(this.db).from(users3).where(import_drizzle_orm35.sql`LOWER(${users3.email}) = ${normalizedEmail}`).all();
15518
+ const results = await select(this.db).from(users3).where(import_drizzle_orm36.sql`LOWER(${users3.email}) = ${normalizedEmail}`).all();
15322
15519
  if (results.length !== 1) {
15323
15520
  if (results.length > 1) {
15324
15521
  console.warn(
@@ -15368,8 +15565,8 @@ var UsersRepository = class {
15368
15565
  await update(this.db, users3).set({
15369
15566
  ...insertData,
15370
15567
  updated_at: /* @__PURE__ */ new Date()
15371
- }).where((0, import_drizzle_orm35.eq)(users3.user_id, fullId)).run();
15372
- const row = await select(this.db).from(users3).where((0, import_drizzle_orm35.eq)(users3.user_id, fullId)).one();
15568
+ }).where((0, import_drizzle_orm36.eq)(users3.user_id, fullId)).run();
15569
+ const row = await select(this.db).from(users3).where((0, import_drizzle_orm36.eq)(users3.user_id, fullId)).one();
15373
15570
  if (!row) {
15374
15571
  throw new RepositoryError("Failed to retrieve updated user");
15375
15572
  }
@@ -15380,7 +15577,7 @@ var UsersRepository = class {
15380
15577
  */
15381
15578
  async delete(id) {
15382
15579
  const fullId = await this.resolveId(id);
15383
- await deleteFrom(this.db, users3).where((0, import_drizzle_orm35.eq)(users3.user_id, fullId)).run();
15580
+ await deleteFrom(this.db, users3).where((0, import_drizzle_orm36.eq)(users3.user_id, fullId)).run();
15384
15581
  }
15385
15582
  /**
15386
15583
  * Get raw database row (internal use only - includes encrypted keys)
@@ -15388,7 +15585,7 @@ var UsersRepository = class {
15388
15585
  async getRawRow(id) {
15389
15586
  try {
15390
15587
  const fullId = await this.resolveId(id);
15391
- const result = await select(this.db).from(users3).where((0, import_drizzle_orm35.eq)(users3.user_id, fullId)).one();
15588
+ const result = await select(this.db).from(users3).where((0, import_drizzle_orm36.eq)(users3.user_id, fullId)).one();
15392
15589
  return result;
15393
15590
  } catch (error) {
15394
15591
  if (error instanceof EntityNotFoundError) {
@@ -15470,7 +15667,7 @@ var UsersRepository = class {
15470
15667
  await update(this.db, users3).set({
15471
15668
  data: { ...row.data, agentic_tools: next },
15472
15669
  updated_at: /* @__PURE__ */ new Date()
15473
- }).where((0, import_drizzle_orm35.eq)(users3.user_id, fullId)).run();
15670
+ }).where((0, import_drizzle_orm36.eq)(users3.user_id, fullId)).run();
15474
15671
  }
15475
15672
  /**
15476
15673
  * Delete a single credential field for a tool.
@@ -15496,7 +15693,7 @@ var UsersRepository = class {
15496
15693
  await update(this.db, users3).set({
15497
15694
  data: { ...row.data, agentic_tools: next },
15498
15695
  updated_at: /* @__PURE__ */ new Date()
15499
- }).where((0, import_drizzle_orm35.eq)(users3.user_id, fullId)).run();
15696
+ }).where((0, import_drizzle_orm36.eq)(users3.user_id, fullId)).run();
15500
15697
  }
15501
15698
  };
15502
15699