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
@@ -34,6 +34,7 @@ var RealtimeAccessCache = class {
34
34
  }
35
35
  branchVisibility = /* @__PURE__ */ new Map();
36
36
  sessionBranches = /* @__PURE__ */ new Map();
37
+ sessionOwners = /* @__PURE__ */ new Map();
37
38
  branchVisibilityTtlMs;
38
39
  sessionBranchTtlMs;
39
40
  now;
@@ -50,6 +51,27 @@ var RealtimeAccessCache = class {
50
51
  });
51
52
  return branchId;
52
53
  }
54
+ /**
55
+ * Owning user id for a session, cached on the same cadence as the
56
+ * session→branch map. Used only to offer streaming events to the session
57
+ * creator's own connections as a fallback when they haven't subscribed to
58
+ * the per-session stream channel yet.
59
+ */
60
+ async getSessionOwnerId(sessionId) {
61
+ const cached = this.sessionOwners.get(sessionId);
62
+ const now = this.now();
63
+ if (cached && cached.expiresAt > now) {
64
+ return cached.ownerId;
65
+ }
66
+ const ownerId = await this.options.sessionsRepository.findCreatedByBySessionId(
67
+ sessionId
68
+ ) ?? null;
69
+ this.sessionOwners.set(sessionId, {
70
+ ownerId,
71
+ expiresAt: now + this.sessionBranchTtlMs
72
+ });
73
+ return ownerId;
74
+ }
53
75
  async getBranchVisibility(branchId) {
54
76
  const cached = this.branchVisibility.get(branchId);
55
77
  const now = this.now();
@@ -85,6 +107,7 @@ var RealtimeAccessCache = class {
85
107
  }
86
108
  invalidateSession(sessionId) {
87
109
  this.sessionBranches.delete(sessionId);
110
+ this.sessionOwners.delete(sessionId);
88
111
  }
89
112
  clearVisibility() {
90
113
  this.branchVisibility.clear();
@@ -92,6 +115,7 @@ var RealtimeAccessCache = class {
92
115
  clearAll() {
93
116
  this.branchVisibility.clear();
94
117
  this.sessionBranches.clear();
118
+ this.sessionOwners.clear();
95
119
  }
96
120
  visibilityFromEntry(entry) {
97
121
  return entry.mode === "allAuthenticated" ? { mode: "allAuthenticated" } : { mode: "explicitUsers", userIds: entry.userIds };
@@ -102,6 +126,26 @@ var RealtimeAccessCache = class {
102
126
  function tenantChannelName(tenantId) {
103
127
  return `tenant:${tenantId}`;
104
128
  }
129
+ var SESSION_STREAM_CHANNEL_PREFIX = "session-stream:";
130
+ function sessionStreamChannelName(sessionId) {
131
+ return `${SESSION_STREAM_CHANNEL_PREFIX}${sessionId}`;
132
+ }
133
+ function leaveAllSessionStreamChannels(app, connection) {
134
+ for (const name of app.channels ?? []) {
135
+ if (name.startsWith(SESSION_STREAM_CHANNEL_PREFIX)) {
136
+ app.channel(name).leave(connection);
137
+ }
138
+ }
139
+ }
140
+ function existingChannel(app, name) {
141
+ return (app.channels ?? []).includes(name) ? app.channel(name) : null;
142
+ }
143
+ function joinSessionStreamChannel(app, sessionId, connection) {
144
+ app.channel(sessionStreamChannelName(sessionId)).join(connection);
145
+ }
146
+ function leaveSessionStreamChannel(app, sessionId, connection) {
147
+ existingChannel(app, sessionStreamChannelName(sessionId))?.leave(connection);
148
+ }
105
149
  var DEBUG_REALTIME_PUBLISH = process.env.AGOR_DEBUG_REALTIME_PUBLISH === "1" || process.env.DEBUG?.includes("realtime-publish");
106
150
  function realtimePublishDebug(...args) {
107
151
  if (DEBUG_REALTIME_PUBLISH) {
@@ -117,8 +161,27 @@ var SESSION_ID_SCOPED_PATHS = /* @__PURE__ */ new Set([
117
161
  "session-env-selections"
118
162
  ]);
119
163
  var OPTIONAL_BRANCH_OR_SESSION_SCOPED_PATHS = /* @__PURE__ */ new Set(["board-objects", "board-comments"]);
164
+ var MESSAGE_STREAMING_EVENTS = /* @__PURE__ */ new Set([
165
+ "streaming:start",
166
+ "streaming:chunk",
167
+ "streaming:end",
168
+ "streaming:error",
169
+ "thinking:start",
170
+ "thinking:chunk",
171
+ "thinking:end"
172
+ ]);
173
+ var TASK_STREAMING_EVENTS = /* @__PURE__ */ new Set(["thinking:chunk", "tool:start", "tool:complete"]);
120
174
  function isStreamingEvent(context) {
121
- return context.path === "messages/streaming" || context.path === "messages" && context.event?.startsWith("streaming:") === true;
175
+ if (context.path === "messages/streaming") return true;
176
+ const event = context.event;
177
+ if (!event) return false;
178
+ if (context.path === "messages") {
179
+ return event.startsWith("streaming:") || MESSAGE_STREAMING_EVENTS.has(event);
180
+ }
181
+ if (context.path === "tasks") {
182
+ return TASK_STREAMING_EVENTS.has(event);
183
+ }
184
+ return false;
122
185
  }
123
186
  function asRecord(value) {
124
187
  return value && typeof value === "object" && !Array.isArray(value) ? value : null;
@@ -254,6 +317,47 @@ async function resolvePublishScope(data, context, accessCache) {
254
317
  function filterToServiceConnections(authenticated) {
255
318
  return authenticated.filter((connection) => isServiceConnection(connection));
256
319
  }
320
+ async function resolveStreamingDelivery(app, data, tenantScoped, accessCache, branchRbacEnabled, allowSuperadmin) {
321
+ const serviceConnections = filterToServiceConnections(tenantScoped);
322
+ const sessionId = extractSessionId(data);
323
+ if (!sessionId) return serviceConnections;
324
+ const tenantConnections = new Set(
325
+ tenantScoped.connections
326
+ );
327
+ const existingRoom = existingChannel(app, sessionStreamChannelName(sessionId));
328
+ const room = existingRoom ? existingRoom.filter((connection) => tenantConnections.has(connection)) : null;
329
+ let ownerId = null;
330
+ try {
331
+ ownerId = await accessCache.getSessionOwnerId(sessionId);
332
+ } catch {
333
+ }
334
+ const ownerChannel = () => tenantScoped.filter(
335
+ (connection) => userFromConnection(connection)?.user_id === ownerId
336
+ );
337
+ if (!branchRbacEnabled) {
338
+ const channels2 = [serviceConnections];
339
+ if (room) channels2.push(room);
340
+ if (ownerId) channels2.push(ownerChannel());
341
+ return channels2;
342
+ }
343
+ const branchId = await accessCache.getBranchIdForSession(sessionId);
344
+ const visibility = branchId ? await accessCache.getBranchVisibility(branchId) : null;
345
+ if (!visibility) return serviceConnections;
346
+ if (visibility.mode === "allAuthenticated") {
347
+ const channels2 = [serviceConnections];
348
+ if (room) channels2.push(room);
349
+ if (ownerId) channels2.push(ownerChannel());
350
+ return channels2;
351
+ }
352
+ const channels = [serviceConnections];
353
+ if (room) {
354
+ channels.push(filterToUserIdsOrSuperadmins(room, visibility.userIds, allowSuperadmin));
355
+ }
356
+ if (ownerId && visibility.userIds.has(ownerId)) {
357
+ channels.push(ownerChannel());
358
+ }
359
+ return channels;
360
+ }
257
361
  function filterToUserIdsOrAdmins(authenticated, userIds, allowSuperadmin) {
258
362
  return authenticated.filter((connection) => {
259
363
  if (isServiceConnection(connection) || isAdminConnection(connection, allowSuperadmin)) {
@@ -327,6 +431,16 @@ function configureRealtimePublish(options) {
327
431
  throw error;
328
432
  }
329
433
  }
434
+ if (isStreamingEvent(context)) {
435
+ return resolveStreamingDelivery(
436
+ app,
437
+ data,
438
+ tenantScoped,
439
+ accessCache,
440
+ branchRbacEnabled,
441
+ allowSuperadmin
442
+ );
443
+ }
330
444
  if (!branchRbacEnabled) return tenantScoped;
331
445
  const scope = await resolvePublishScope(data, context, accessCache);
332
446
  if (scope.kind === "global") return tenantScoped;
@@ -358,5 +472,9 @@ function configureRealtimePublish(options) {
358
472
  });
359
473
  }
360
474
  export {
361
- configureRealtimePublish
475
+ configureRealtimePublish,
476
+ joinSessionStreamChannel,
477
+ leaveAllSessionStreamChannels,
478
+ leaveSessionStreamChannel,
479
+ sessionStreamChannelName
362
480
  };
@@ -0,0 +1,24 @@
1
+ import { type AgorConfig } from '@agor/core/config';
2
+ import { type TenantScopeAwareDatabase } from '@agor/core/db';
3
+ import type { Params, SessionID, TenantContext } from '@agor/core/types';
4
+ type QueueTenantParams = Params & {
5
+ tenant?: Pick<TenantContext, 'tenant_id' | 'source'>;
6
+ };
7
+ export interface SessionQueueTenantScopeOptions {
8
+ db: TenantScopeAwareDatabase;
9
+ config: AgorConfig;
10
+ sessionId: SessionID;
11
+ params?: Params;
12
+ /**
13
+ * Trusted tenant id from an already-loaded tenant-owned row (for example a
14
+ * Postgres sessions/tasks patch result). Do not populate this from request
15
+ * payloads or request-less tenant discovery reads.
16
+ */
17
+ tenantIdHint?: string;
18
+ label: string;
19
+ }
20
+ export declare function queueTenantParams(params: Params | undefined, tenantId: string, source?: TenantContext['source']): QueueTenantParams;
21
+ export declare function runWithSessionQueueTenantScope<T>(options: SessionQueueTenantScopeOptions, work: (params: QueueTenantParams) => Promise<T>): Promise<T | undefined>;
22
+ export declare function deferWithSessionQueueTenantScope(options: SessionQueueTenantScopeOptions, work: (params: QueueTenantParams) => Promise<void>, onError?: (error: unknown) => void): void;
23
+ export {};
24
+ //# sourceMappingURL=session-queue-tenant-scope.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-queue-tenant-scope.d.ts","sourceRoot":"","sources":["../../src/utils/session-queue-tenant-scope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAA6B,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EAA8B,KAAK,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAC1F,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAY,MAAM,kBAAkB,CAAC;AAMnF,KAAK,iBAAiB,GAAG,MAAM,GAAG;IAChC,MAAM,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,WAAW,GAAG,QAAQ,CAAC,CAAC;CACtD,CAAC;AAEF,MAAM,WAAW,8BAA8B;IAC7C,EAAE,EAAE,wBAAwB,CAAC;IAC7B,MAAM,EAAE,UAAU,CAAC;IACnB,SAAS,EAAE,SAAS,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;CACf;AAYD,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,QAAQ,EAAE,MAAM,EAChB,MAAM,GAAE,aAAa,CAAC,QAAQ,CAAc,GAC3C,iBAAiB,CAUnB;AAED,wBAAsB,8BAA8B,CAAC,CAAC,EACpD,OAAO,EAAE,8BAA8B,EACvC,IAAI,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,OAAO,CAAC,CAAC,CAAC,GAC9C,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAwBxB;AAED,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,8BAA8B,EACvC,IAAI,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,OAAO,CAAC,IAAI,CAAC,EAClD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GACjC,IAAI,CAiCN"}
@@ -0,0 +1,133 @@
1
+ // src/utils/session-queue-tenant-scope.ts
2
+ import { resolveMultiTenancyConfig as resolveMultiTenancyConfig2 } from "@agor/core/config";
3
+ import { runWithTenantDatabaseScope as runWithTenantDatabaseScope2 } from "@agor/core/db";
4
+
5
+ // src/utils/tenant-db-scope.ts
6
+ import {
7
+ resolveMultiTenancyConfig,
8
+ resolveTenantContext,
9
+ TenantResolutionError
10
+ } from "@agor/core/config";
11
+ import {
12
+ enqueueTenantDatabasePostCommitCallback,
13
+ getCurrentTenantId,
14
+ runWithoutTenantDatabaseScope,
15
+ runWithTenantDatabaseScope
16
+ } from "@agor/core/db";
17
+ import { NotAuthenticated } from "@agor/core/feathers";
18
+ import jwt2 from "jsonwebtoken";
19
+
20
+ // src/auth/runtime-tokens.ts
21
+ import jwt from "jsonwebtoken";
22
+
23
+ // src/utils/tenant-db-scope.ts
24
+ function resolveTenantIdForDeferredScope(params) {
25
+ const scopedParams = params;
26
+ return scopedParams?.tenant?.tenant_id ?? getCurrentTenantId();
27
+ }
28
+ function deferWithTenantDatabaseScope(db, params, work, onError) {
29
+ const tenantId = resolveTenantIdForDeferredScope(params);
30
+ if (!tenantId) {
31
+ const error = new Error("Missing tenant context for deferred tenant-scoped work");
32
+ if (onError) {
33
+ onError(error);
34
+ } else {
35
+ console.error("[tenant-db-scope] Deferred tenant-scoped work skipped:", error);
36
+ }
37
+ return;
38
+ }
39
+ const schedule = () => {
40
+ runWithoutTenantDatabaseScope(() => {
41
+ setImmediate(() => {
42
+ void runWithTenantDatabaseScope(db, tenantId, work).catch((error) => {
43
+ if (onError) {
44
+ onError(error);
45
+ return;
46
+ }
47
+ console.error("[tenant-db-scope] Deferred tenant-scoped work failed:", error);
48
+ });
49
+ });
50
+ });
51
+ };
52
+ if (enqueueTenantDatabasePostCommitCallback(async () => schedule())) {
53
+ return;
54
+ }
55
+ schedule();
56
+ }
57
+
58
+ // src/utils/session-queue-tenant-scope.ts
59
+ function staticTenantId(config) {
60
+ const multiTenancy = resolveMultiTenancyConfig2(config);
61
+ return multiTenancy.mode === "static" ? multiTenancy.static_tenant_id : void 0;
62
+ }
63
+ function trustedTenantIdHint(options) {
64
+ const hint = options.tenantIdHint?.trim();
65
+ return hint || void 0;
66
+ }
67
+ function queueTenantParams(params, tenantId, source = "explicit") {
68
+ const currentTenant = params?.tenant;
69
+ return {
70
+ ...params ?? {},
71
+ tenant: {
72
+ ...currentTenant,
73
+ tenant_id: tenantId,
74
+ source: currentTenant?.source ?? source
75
+ }
76
+ };
77
+ }
78
+ async function runWithSessionQueueTenantScope(options, work) {
79
+ const capturedTenantId = resolveTenantIdForDeferredScope(options.params);
80
+ if (capturedTenantId) {
81
+ const scopedParams2 = queueTenantParams(options.params, capturedTenantId, "explicit");
82
+ return runWithTenantDatabaseScope2(options.db, capturedTenantId, () => work(scopedParams2));
83
+ }
84
+ const tenantIdHint = trustedTenantIdHint(options);
85
+ if (tenantIdHint) {
86
+ const scopedParams2 = queueTenantParams(options.params, tenantIdHint, "explicit");
87
+ return runWithTenantDatabaseScope2(options.db, tenantIdHint, () => work(scopedParams2));
88
+ }
89
+ const configuredStaticTenantId = staticTenantId(options.config);
90
+ if (!configuredStaticTenantId) {
91
+ console.error(
92
+ `\u274C [Queue] ${options.label} skipped for session ${options.sessionId}: missing tenant context`
93
+ );
94
+ return void 0;
95
+ }
96
+ const scopedParams = queueTenantParams(options.params, configuredStaticTenantId, "static");
97
+ return runWithTenantDatabaseScope2(options.db, configuredStaticTenantId, () => work(scopedParams));
98
+ }
99
+ function deferWithSessionQueueTenantScope(options, work, onError) {
100
+ const handleError = (error) => {
101
+ if (onError) {
102
+ onError(error);
103
+ return;
104
+ }
105
+ console.error(`\u274C [Queue] ${options.label} failed:`, error);
106
+ };
107
+ const capturedTenantId = resolveTenantIdForDeferredScope(options.params);
108
+ if (capturedTenantId) {
109
+ const scopedParams2 = queueTenantParams(options.params, capturedTenantId, "explicit");
110
+ deferWithTenantDatabaseScope(options.db, scopedParams2, () => work(scopedParams2), handleError);
111
+ return;
112
+ }
113
+ const tenantIdHint = trustedTenantIdHint(options);
114
+ if (tenantIdHint) {
115
+ const scopedParams2 = queueTenantParams(options.params, tenantIdHint, "explicit");
116
+ deferWithTenantDatabaseScope(options.db, scopedParams2, () => work(scopedParams2), handleError);
117
+ return;
118
+ }
119
+ const configuredStaticTenantId = staticTenantId(options.config);
120
+ if (!configuredStaticTenantId) {
121
+ handleError(
122
+ new Error(`${options.label} skipped for session ${options.sessionId}: missing tenant context`)
123
+ );
124
+ return;
125
+ }
126
+ const scopedParams = queueTenantParams(options.params, configuredStaticTenantId, "static");
127
+ deferWithTenantDatabaseScope(options.db, scopedParams, () => work(scopedParams), handleError);
128
+ }
129
+ export {
130
+ deferWithSessionQueueTenantScope,
131
+ queueTenantParams,
132
+ runWithSessionQueueTenantScope
133
+ };
@@ -0,0 +1,114 @@
1
+ /**
2
+ * gateway_token widget — registry entry and registration.
3
+ *
4
+ * Concrete widget type: an admin supplies a gateway channel's platform
5
+ * credentials (Slack bot/app tokens, GitHub private key, Teams app password)
6
+ * through an inline form. The values flow browser → daemon via
7
+ * `POST /widgets/:widget_id/submit` and land in the channel's encrypted
8
+ * `config` through the gateway-channels service — never through the agent's
9
+ * MCP context. Setting a channel's tokens is admin-only, so `applySubmit`
10
+ * gates on `ROLES.ADMIN` before touching anything.
11
+ *
12
+ * See §4 + §7 of `docs/internal/in-conversation-widgets-design-2026-05-19.md`.
13
+ */
14
+ import { type ChannelType, type SlackTestResult } from '@agor/core/types';
15
+ import { z } from 'zod';
16
+ import { type WidgetRegistryEntry } from '../registry.js';
17
+ export declare function isSupportedGatewayTokenChannelType(channelType: string): boolean;
18
+ /**
19
+ * Agent-provided params (validated when the MCP tool fires). All non-secret:
20
+ * the channel identity, its type/name, and the field NAMES to collect. Stored
21
+ * at `metadata.widget.params` on the widget message row.
22
+ */
23
+ export declare const gatewayTokenParamsSchema: z.ZodObject<{
24
+ gatewayChannelId: z.ZodString;
25
+ channelType: z.ZodEnum<{
26
+ slack: "slack";
27
+ discord: "discord";
28
+ whatsapp: "whatsapp";
29
+ telegram: "telegram";
30
+ github: "github";
31
+ teams: "teams";
32
+ }>;
33
+ channelName: z.ZodString;
34
+ fields: z.ZodArray<z.ZodEnum<{
35
+ app_token: "app_token";
36
+ private_key: "private_key";
37
+ app_password: "app_password";
38
+ bot_token: "bot_token";
39
+ signing_secret: "signing_secret";
40
+ webhook_secret: "webhook_secret";
41
+ }>>;
42
+ reason: z.ZodString;
43
+ }, z.core.$strict>;
44
+ export type GatewayTokenParams = z.infer<typeof gatewayTokenParamsSchema>;
45
+ /**
46
+ * Browser → daemon submit payload. Direct HTTP, never reaches the agent. The
47
+ * keys are constrained to the sensitive field names; the values are the raw
48
+ * credentials that get encrypted by the gateway-channels service.
49
+ */
50
+ export declare const gatewayTokenSubmitSchema: z.ZodObject<{
51
+ tokens: z.ZodRecord<z.ZodEnum<{
52
+ app_token: "app_token";
53
+ private_key: "private_key";
54
+ app_password: "app_password";
55
+ bot_token: "bot_token";
56
+ signing_secret: "signing_secret";
57
+ webhook_secret: "webhook_secret";
58
+ }> & z.core.$partial, z.ZodString>;
59
+ }, z.core.$strict>;
60
+ export type GatewayTokenSubmit = z.infer<typeof gatewayTokenSubmitSchema>;
61
+ /**
62
+ * Sanitized post-resolution data written to the message row and fed into the
63
+ * auto-resume prompt. Carries the channel identity, which fields were set, and
64
+ * the enable/test outcome — but NEVER a token value, prefix, length, or
65
+ * last-four.
66
+ */
67
+ export interface GatewayTokenResultMeta {
68
+ channelId: string;
69
+ channelName: string;
70
+ channelType: ChannelType;
71
+ fieldsSet: string[];
72
+ enabled: boolean;
73
+ /**
74
+ * True when the tokens were saved but the channel type has no probe, so the
75
+ * credentials could NOT be validated and the channel was left disabled
76
+ * pending manual confirmation. Distinct from an enable-blocking hard failure.
77
+ */
78
+ unverified: boolean;
79
+ test: {
80
+ ok: boolean;
81
+ summary: string;
82
+ };
83
+ }
84
+ /**
85
+ * Decide whether the probe result permits enabling the channel, a `status`
86
+ * discriminator, and a short human summary. Three outcomes:
87
+ * - `failed` (enable:false) — a hard credential failure (bad token) or an
88
+ * unbuildable connector (`config` capability — malformed config).
89
+ * - `unverifiable` (enable:false) — the channel type has no probe at all
90
+ * (`connector` capability); tokens are saved but the channel stays disabled
91
+ * until the credentials are confirmed manually, never enabled off an unrun
92
+ * probe.
93
+ * - `verified` (enable:true) — the probe ran and surfaced no hard failure;
94
+ * the credentials are usable even if more setup remains.
95
+ *
96
+ * `appTokenExpected` is Socket-Mode / inbound intent for THIS channel (the
97
+ * widget collected an app_token, i.e. `getRequiredSecretFields` asked for it).
98
+ * When true, a missing/failed app-level token is ALSO a hard blocker: the
99
+ * listener requires it (`hasListeningConfig` in services/gateway.ts), so an
100
+ * enabled inbound channel without a working app_token could never receive
101
+ * messages. When false (outbound-only — send via bot_token, no listener), the
102
+ * Slack probe still emits an `app_token` capability failure / `appTokenValid:
103
+ * false` because no app token exists, but that must NOT block enabling — the
104
+ * channel does not use Socket Mode.
105
+ */
106
+ export declare function classifyGatewayTokenTest(result: SlackTestResult, appTokenExpected: boolean): {
107
+ enable: boolean;
108
+ status: 'verified' | 'unverifiable' | 'failed';
109
+ summary: string;
110
+ };
111
+ export declare const gatewayTokenWidget: WidgetRegistryEntry<GatewayTokenParams, GatewayTokenSubmit, GatewayTokenResultMeta>;
112
+ /** Idempotent registration helper, safe to call at every daemon boot. */
113
+ export declare function registerGatewayTokenWidget(): void;
114
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/widgets/gateway-token/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EACL,KAAK,WAAW,EAIhB,KAAK,eAAe,EAErB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAkB,KAAK,mBAAmB,EAAwB,MAAM,gBAAgB,CAAC;AAahG,wBAAgB,kCAAkC,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAE/E;AASD;;;;GAIG;AACH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;kBA+B1B,CAAC;AAEZ,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE1E;;;;GAIG;AACH,eAAO,MAAM,wBAAwB;;;;;;;;;kBAY1B,CAAC;AAEZ,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE1E;;;;;GAKG;AACH,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,WAAW,CAAC;IACzB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB;;;;OAIG;IACH,UAAU,EAAE,OAAO,CAAC;IACpB,IAAI,EAAE;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CACxC;AAoCD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,eAAe,EACvB,gBAAgB,EAAE,OAAO,GACxB;IACD,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,UAAU,GAAG,cAAc,GAAG,QAAQ,CAAC;IAC/C,OAAO,EAAE,MAAM,CAAC;CACjB,CAkDA;AAiID,eAAO,MAAM,kBAAkB,EAAE,mBAAmB,CAClD,kBAAkB,EAClB,kBAAkB,EAClB,sBAAsB,CA+CvB,CAAC;AAEF,yEAAyE;AACzE,wBAAgB,0BAA0B,IAAI,IAAI,CAEjD"}