agor-live 0.22.0 → 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 (1006) hide show
  1. package/dist/cli/commands/admin/add-to-branch-group.d.ts +2 -13
  2. package/dist/cli/commands/admin/add-to-branch-group.d.ts.map +1 -1
  3. package/dist/cli/commands/admin/add-to-branch-group.js +133 -33
  4. package/dist/cli/commands/admin/create-branch-group.d.ts +2 -13
  5. package/dist/cli/commands/admin/create-branch-group.d.ts.map +1 -1
  6. package/dist/cli/commands/admin/create-branch-group.js +132 -38
  7. package/dist/cli/commands/admin/create-symlink.d.ts +2 -14
  8. package/dist/cli/commands/admin/create-symlink.d.ts.map +1 -1
  9. package/dist/cli/commands/admin/create-symlink.js +138 -61
  10. package/dist/cli/commands/admin/delete-branch-group.d.ts +2 -13
  11. package/dist/cli/commands/admin/delete-branch-group.d.ts.map +1 -1
  12. package/dist/cli/commands/admin/delete-branch-group.js +132 -28
  13. package/dist/cli/commands/admin/delete-user.d.ts +2 -13
  14. package/dist/cli/commands/admin/delete-user.d.ts.map +1 -1
  15. package/dist/cli/commands/admin/delete-user.js +132 -38
  16. package/dist/cli/commands/admin/ensure-user.d.ts +2 -14
  17. package/dist/cli/commands/admin/ensure-user.d.ts.map +1 -1
  18. package/dist/cli/commands/admin/ensure-user.js +131 -46
  19. package/dist/cli/commands/admin/remove-from-branch-group.d.ts +2 -13
  20. package/dist/cli/commands/admin/remove-from-branch-group.d.ts.map +1 -1
  21. package/dist/cli/commands/admin/remove-from-branch-group.js +133 -33
  22. package/dist/cli/commands/admin/remove-symlink.d.ts +2 -14
  23. package/dist/cli/commands/admin/remove-symlink.d.ts.map +1 -1
  24. package/dist/cli/commands/admin/remove-symlink.js +136 -49
  25. package/dist/cli/commands/admin/scrub-git-remotes.d.ts +2 -2
  26. package/dist/cli/commands/admin/scrub-git-remotes.d.ts.map +1 -1
  27. package/dist/cli/commands/admin/scrub-git-remotes.js +128 -86
  28. package/dist/cli/commands/admin/sync-user-symlinks.d.ts +2 -14
  29. package/dist/cli/commands/admin/sync-user-symlinks.d.ts.map +1 -1
  30. package/dist/cli/commands/admin/sync-user-symlinks.js +132 -43
  31. package/dist/cli/commands/auth/whoami.d.ts.map +1 -1
  32. package/dist/cli/commands/auth/whoami.js +2 -1
  33. package/dist/cli/commands/branch/env/request.test.d.ts +2 -0
  34. package/dist/cli/commands/branch/env/request.test.d.ts.map +1 -0
  35. package/dist/cli/commands/branch/env/request.test.js +17723 -0
  36. package/dist/cli/commands/branch/env/restart.d.ts.map +1 -1
  37. package/dist/cli/commands/branch/env/restart.js +7 -1
  38. package/dist/cli/commands/branch/env/start.d.ts.map +1 -1
  39. package/dist/cli/commands/branch/env/start.js +7 -1
  40. package/dist/cli/commands/branch/env/stop.d.ts.map +1 -1
  41. package/dist/cli/commands/branch/env/stop.js +7 -1
  42. package/dist/cli/commands/daemon/status.d.ts.map +1 -1
  43. package/dist/cli/commands/daemon/status.js +2 -1
  44. package/dist/cli/commands/init.d.ts +6 -0
  45. package/dist/cli/commands/init.d.ts.map +1 -1
  46. package/dist/cli/commands/init.js +140 -2
  47. package/dist/cli/commands/local/add-to-branch-group.d.ts +13 -0
  48. package/dist/cli/commands/local/add-to-branch-group.d.ts.map +1 -0
  49. package/dist/cli/commands/local/add-to-branch-group.js +37 -0
  50. package/dist/cli/commands/local/create-branch-group.d.ts +12 -0
  51. package/dist/cli/commands/local/create-branch-group.d.ts.map +1 -0
  52. package/dist/cli/commands/local/create-branch-group.js +35 -0
  53. package/dist/cli/commands/local/create-symlink.d.ts +14 -0
  54. package/dist/cli/commands/local/create-symlink.d.ts.map +1 -0
  55. package/dist/cli/commands/local/create-symlink.js +45 -0
  56. package/dist/cli/commands/{daemon → local/daemon}/sync.d.ts +1 -1
  57. package/dist/cli/commands/local/daemon/sync.d.ts.map +1 -0
  58. package/dist/cli/commands/{daemon → local/daemon}/sync.js +7 -6
  59. package/dist/cli/commands/local/delete-branch-group.d.ts +12 -0
  60. package/dist/cli/commands/local/delete-branch-group.d.ts.map +1 -0
  61. package/dist/cli/commands/local/delete-branch-group.js +35 -0
  62. package/dist/cli/commands/local/delete-user.d.ts +12 -0
  63. package/dist/cli/commands/local/delete-user.d.ts.map +1 -0
  64. package/dist/cli/commands/local/delete-user.js +36 -0
  65. package/dist/cli/commands/local/ensure-user.d.ts +12 -0
  66. package/dist/cli/commands/local/ensure-user.d.ts.map +1 -0
  67. package/dist/cli/commands/local/ensure-user.js +41 -0
  68. package/dist/cli/commands/local/remove-from-branch-group.d.ts +13 -0
  69. package/dist/cli/commands/local/remove-from-branch-group.d.ts.map +1 -0
  70. package/dist/cli/commands/local/remove-from-branch-group.js +37 -0
  71. package/dist/cli/commands/local/remove-symlink.d.ts +13 -0
  72. package/dist/cli/commands/local/remove-symlink.d.ts.map +1 -0
  73. package/dist/cli/commands/local/remove-symlink.js +39 -0
  74. package/dist/cli/commands/local/scrub-git-remotes.d.ts +9 -0
  75. package/dist/cli/commands/local/scrub-git-remotes.d.ts.map +1 -0
  76. package/dist/cli/commands/local/scrub-git-remotes.js +23 -0
  77. package/dist/cli/commands/{admin → local}/sync-unix.d.ts.map +1 -1
  78. package/dist/cli/commands/{admin → local}/sync-unix.js +3 -3
  79. package/dist/cli/commands/local/sync-user-symlinks.d.ts +12 -0
  80. package/dist/cli/commands/local/sync-user-symlinks.d.ts.map +1 -0
  81. package/dist/cli/commands/local/sync-user-symlinks.js +37 -0
  82. package/dist/cli/commands/telemetry/index.d.ts +7 -0
  83. package/dist/cli/commands/telemetry/index.d.ts.map +1 -0
  84. package/dist/cli/commands/telemetry/index.js +40 -0
  85. package/dist/cli/commands/telemetry/off.d.ts +6 -0
  86. package/dist/cli/commands/telemetry/off.d.ts.map +1 -0
  87. package/dist/cli/commands/telemetry/off.js +35 -0
  88. package/dist/cli/commands/telemetry/on.d.ts +6 -0
  89. package/dist/cli/commands/telemetry/on.d.ts.map +1 -0
  90. package/dist/cli/commands/telemetry/on.js +37 -0
  91. package/dist/cli/commands/telemetry/test.d.ts +6 -0
  92. package/dist/cli/commands/telemetry/test.d.ts.map +1 -0
  93. package/dist/cli/commands/telemetry/test.js +56 -0
  94. package/dist/cli/commands/user/create-admin.d.ts.map +1 -1
  95. package/dist/cli/commands/user/create-admin.js +81 -72
  96. package/dist/cli/commands/user/list.d.ts.map +1 -1
  97. package/dist/cli/commands/user/list.js +1 -0
  98. package/dist/cli/commands/whoami.js +2 -1
  99. package/dist/cli/lib/branch-environment-action.d.ts +21 -0
  100. package/dist/cli/lib/branch-environment-action.d.ts.map +1 -0
  101. package/dist/cli/lib/branch-environment-action.js +8 -0
  102. package/dist/core/api/index.cjs +7 -2
  103. package/dist/core/api/index.d.ts +13 -4
  104. package/dist/core/api/index.d.ts.map +1 -1
  105. package/dist/core/api/index.js +7 -2
  106. package/dist/core/claude/index.cjs +518 -89
  107. package/dist/core/claude/index.js +515 -88
  108. package/dist/core/claude-cli/index.cjs +24 -0
  109. package/dist/core/claude-cli/index.js +24 -0
  110. package/dist/core/claude-cli/pricing.d.ts.map +1 -1
  111. package/dist/core/client/index.cjs +52 -7
  112. package/dist/core/client/index.js +48 -7
  113. package/dist/core/config/browser.cjs +3 -5
  114. package/dist/core/config/browser.js +3 -5
  115. package/dist/core/config/config-manager.d.ts +33 -13
  116. package/dist/core/config/config-manager.d.ts.map +1 -1
  117. package/dist/core/config/index.cjs +4259 -4527
  118. package/dist/core/config/index.d.ts +1 -0
  119. package/dist/core/config/index.d.ts.map +1 -1
  120. package/dist/core/config/index.js +4295 -4583
  121. package/dist/core/config/key-resolver.d.ts.map +1 -1
  122. package/dist/core/config/multitenancy.d.ts +33 -0
  123. package/dist/core/config/multitenancy.d.ts.map +1 -0
  124. package/dist/core/config/security-resolver.d.ts +1 -0
  125. package/dist/core/config/security-resolver.d.ts.map +1 -1
  126. package/dist/core/config/types.d.ts +67 -4
  127. package/dist/core/config/types.d.ts.map +1 -1
  128. package/dist/core/db/client.d.ts +34 -2
  129. package/dist/core/db/client.d.ts.map +1 -1
  130. package/dist/core/db/database-wrapper.d.ts.map +1 -1
  131. package/dist/core/db/first-run-bootstrap.d.ts.map +1 -1
  132. package/dist/core/db/index.cjs +2767 -1232
  133. package/dist/core/db/index.d.ts +2 -1
  134. package/dist/core/db/index.d.ts.map +1 -1
  135. package/dist/core/db/index.js +2601 -1094
  136. package/dist/core/db/migrate.d.ts.map +1 -1
  137. package/dist/core/db/repositories/artifacts.d.ts +27 -2
  138. package/dist/core/db/repositories/artifacts.d.ts.map +1 -1
  139. package/dist/core/db/repositories/base.d.ts +18 -0
  140. package/dist/core/db/repositories/base.d.ts.map +1 -1
  141. package/dist/core/db/repositories/board-comments.d.ts +17 -1
  142. package/dist/core/db/repositories/board-comments.d.ts.map +1 -1
  143. package/dist/core/db/repositories/board-objects.d.ts.map +1 -1
  144. package/dist/core/db/repositories/boards.d.ts +54 -3
  145. package/dist/core/db/repositories/boards.d.ts.map +1 -1
  146. package/dist/core/db/repositories/branch-access.d.ts +32 -0
  147. package/dist/core/db/repositories/branch-access.d.ts.map +1 -1
  148. package/dist/core/db/repositories/branches.d.ts +52 -2
  149. package/dist/core/db/repositories/branches.d.ts.map +1 -1
  150. package/dist/core/db/repositories/cards.d.ts +15 -1
  151. package/dist/core/db/repositories/cards.d.ts.map +1 -1
  152. package/dist/core/db/repositories/gateway-channels.d.ts +9 -0
  153. package/dist/core/db/repositories/gateway-channels.d.ts.map +1 -1
  154. package/dist/core/db/repositories/gateway-outbound-messages.d.ts +19 -0
  155. package/dist/core/db/repositories/gateway-outbound-messages.d.ts.map +1 -0
  156. package/dist/core/db/repositories/index.d.ts +2 -0
  157. package/dist/core/db/repositories/index.d.ts.map +1 -1
  158. package/dist/core/db/repositories/messages.d.ts +9 -2
  159. package/dist/core/db/repositories/messages.d.ts.map +1 -1
  160. package/dist/core/db/repositories/repos.d.ts.map +1 -1
  161. package/dist/core/db/repositories/schedules.d.ts +12 -1
  162. package/dist/core/db/repositories/schedules.d.ts.map +1 -1
  163. package/dist/core/db/repositories/sessions.d.ts +56 -5
  164. package/dist/core/db/repositories/sessions.d.ts.map +1 -1
  165. package/dist/core/db/repositories/tasks.d.ts +7 -2
  166. package/dist/core/db/repositories/tasks.d.ts.map +1 -1
  167. package/dist/core/db/repositories/user-api-keys.d.ts +10 -1
  168. package/dist/core/db/repositories/user-api-keys.d.ts.map +1 -1
  169. package/dist/core/db/repositories/users.d.ts +8 -8
  170. package/dist/core/db/repositories/users.d.ts.map +1 -1
  171. package/dist/core/db/schema.d.ts +1460 -38
  172. package/dist/core/db/schema.d.ts.map +1 -1
  173. package/dist/core/db/schema.postgres.d.ts +1082 -37
  174. package/dist/core/db/schema.postgres.d.ts.map +1 -1
  175. package/dist/core/db/schema.sqlite.d.ts +397 -1
  176. package/dist/core/db/schema.sqlite.d.ts.map +1 -1
  177. package/dist/core/db/tenant-context.d.ts +26 -0
  178. package/dist/core/db/tenant-context.d.ts.map +1 -0
  179. package/dist/core/db/tenant-scope.d.ts +31 -0
  180. package/dist/core/db/tenant-scope.d.ts.map +1 -0
  181. package/dist/core/db/user-utils.d.ts +2 -2
  182. package/dist/core/db/user-utils.d.ts.map +1 -1
  183. package/dist/core/drizzle/postgres/0052_gateway_outbound_messages.sql +45 -0
  184. package/dist/core/drizzle/postgres/0053_user_token_invalidation.sql +1 -0
  185. package/dist/core/drizzle/postgres/0054_app_level_multitenancy.sql +219 -0
  186. package/dist/core/drizzle/postgres/0055_app_level_multitenancy_rls.sql +411 -0
  187. package/dist/core/drizzle/postgres/0056_composite_indexes.sql +15 -0
  188. package/dist/core/drizzle/postgres/0057_message_timestamp_indexes.sql +3 -0
  189. package/dist/core/drizzle/postgres/meta/_journal.json +42 -0
  190. package/dist/core/drizzle/sqlite/0061_gateway_outbound_messages.sql +38 -0
  191. package/dist/core/drizzle/sqlite/0062_user_token_invalidation.sql +1 -0
  192. package/dist/core/drizzle/sqlite/0063_composite_indexes.sql +10 -0
  193. package/dist/core/drizzle/sqlite/0064_message_timestamp_indexes.sql +2 -0
  194. package/dist/core/drizzle/sqlite/meta/_journal.json +28 -0
  195. package/dist/core/environment/render-snapshot.cjs +7 -6
  196. package/dist/core/environment/render-snapshot.d.ts +2 -0
  197. package/dist/core/environment/render-snapshot.d.ts.map +1 -1
  198. package/dist/core/environment/render-snapshot.js +7 -6
  199. package/dist/core/environment/variable-resolver.cjs +3 -1
  200. package/dist/core/environment/variable-resolver.js +3 -1
  201. package/dist/core/environment/webhook.cjs +1 -4
  202. package/dist/core/environment/webhook.js +1 -4
  203. package/dist/core/gateway/connector.d.ts +10 -1
  204. package/dist/core/gateway/connector.d.ts.map +1 -1
  205. package/dist/core/gateway/connectors/slack-manifest.cjs +108 -0
  206. package/dist/core/gateway/connectors/slack-manifest.d.ts +85 -0
  207. package/dist/core/gateway/connectors/slack-manifest.d.ts.map +1 -0
  208. package/dist/core/gateway/connectors/slack-manifest.js +81 -0
  209. package/dist/core/gateway/connectors/slack.d.ts +101 -4
  210. package/dist/core/gateway/connectors/slack.d.ts.map +1 -1
  211. package/dist/core/gateway/index.cjs +495 -29
  212. package/dist/core/gateway/index.d.ts +4 -1
  213. package/dist/core/gateway/index.d.ts.map +1 -1
  214. package/dist/core/gateway/index.js +490 -28
  215. package/dist/core/gateway/system-message.d.ts.map +1 -1
  216. package/dist/core/git/exec.cjs +24 -0
  217. package/dist/core/git/exec.d.ts +6 -4
  218. package/dist/core/git/exec.d.ts.map +1 -1
  219. package/dist/core/git/exec.js +2 -0
  220. package/dist/core/git/index.cjs +3 -1363
  221. package/dist/core/git/index.d.ts +4 -614
  222. package/dist/core/git/index.d.ts.map +1 -1
  223. package/dist/core/git/index.js +1 -1304
  224. package/dist/core/git/pure.cjs +24 -0
  225. package/dist/core/git/pure.d.ts +2 -27
  226. package/dist/core/git/pure.d.ts.map +1 -1
  227. package/dist/core/git/pure.js +2 -0
  228. package/dist/core/index.cjs +11563 -10832
  229. package/dist/core/index.d.ts +2 -0
  230. package/dist/core/index.d.ts.map +1 -1
  231. package/dist/core/index.js +12203 -10962
  232. package/dist/core/lib/feathers-validation.cjs +9 -1
  233. package/dist/core/lib/feathers-validation.d.ts +2 -0
  234. package/dist/core/lib/feathers-validation.d.ts.map +1 -1
  235. package/dist/core/lib/feathers-validation.js +9 -1
  236. package/dist/core/local-actions/git-remotes.d.ts +7 -0
  237. package/dist/core/local-actions/git-remotes.d.ts.map +1 -0
  238. package/dist/core/local-actions/index.cjs +8008 -0
  239. package/dist/core/local-actions/index.d.ts +6 -0
  240. package/dist/core/local-actions/index.d.ts.map +1 -0
  241. package/dist/core/local-actions/index.js +8010 -0
  242. package/dist/core/local-actions/symlinks.d.ts +20 -0
  243. package/dist/core/local-actions/symlinks.d.ts.map +1 -0
  244. package/dist/core/local-actions/types.d.ts +14 -0
  245. package/dist/core/local-actions/types.d.ts.map +1 -0
  246. package/dist/core/local-actions/unix-groups.d.ts +16 -0
  247. package/dist/core/local-actions/unix-groups.d.ts.map +1 -0
  248. package/dist/core/local-actions/unix-users.d.ts +12 -0
  249. package/dist/core/local-actions/unix-users.d.ts.map +1 -0
  250. package/dist/core/mcp/index.cjs +373 -28
  251. package/dist/core/mcp/index.d.ts +1 -1
  252. package/dist/core/mcp/index.d.ts.map +1 -1
  253. package/dist/core/mcp/index.js +369 -27
  254. package/dist/core/mcp/template-patterns.d.ts +15 -0
  255. package/dist/core/mcp/template-patterns.d.ts.map +1 -0
  256. package/dist/core/mcp/template-resolver.d.ts +13 -0
  257. package/dist/core/mcp/template-resolver.d.ts.map +1 -1
  258. package/dist/core/models/browser.cjs +154 -25
  259. package/dist/core/models/browser.js +150 -25
  260. package/dist/core/models/claude.d.ts +2 -2
  261. package/dist/core/models/claude.d.ts.map +1 -1
  262. package/dist/core/models/codex.d.ts +205 -21
  263. package/dist/core/models/codex.d.ts.map +1 -1
  264. package/dist/core/models/index.cjs +154 -25
  265. package/dist/core/models/index.js +150 -25
  266. package/dist/core/package.json +24 -0
  267. package/dist/core/seed/demo-fixtures.d.ts +87 -0
  268. package/dist/core/seed/demo-fixtures.d.ts.map +1 -0
  269. package/dist/core/seed/dev-fixtures.d.ts.map +1 -1
  270. package/dist/core/seed/index.cjs +8569 -5519
  271. package/dist/core/seed/index.d.ts +1 -0
  272. package/dist/core/seed/index.d.ts.map +1 -1
  273. package/dist/core/seed/index.js +8580 -5535
  274. package/dist/core/sessions/index.cjs +110 -24
  275. package/dist/core/sessions/index.js +110 -24
  276. package/dist/core/telemetry/index.cjs +361 -0
  277. package/dist/core/telemetry/index.d.ts +5 -0
  278. package/dist/core/telemetry/index.d.ts.map +1 -0
  279. package/dist/core/telemetry/index.js +315 -0
  280. package/dist/core/telemetry/logger.d.ts +44 -0
  281. package/dist/core/telemetry/logger.d.ts.map +1 -0
  282. package/dist/core/telemetry/model-normalization.d.ts +3 -0
  283. package/dist/core/telemetry/model-normalization.d.ts.map +1 -0
  284. package/dist/core/telemetry/types.d.ts +47 -0
  285. package/dist/core/telemetry/types.d.ts.map +1 -0
  286. package/dist/core/telemetry/version.d.ts +9 -0
  287. package/dist/core/telemetry/version.d.ts.map +1 -0
  288. package/dist/core/templates/agor-system-prompt.md +1 -0
  289. package/dist/core/templates/handlebars-helpers.cjs +3 -1
  290. package/dist/core/templates/handlebars-helpers.d.ts +5 -0
  291. package/dist/core/templates/handlebars-helpers.d.ts.map +1 -1
  292. package/dist/core/templates/handlebars-helpers.js +3 -1
  293. package/dist/core/tools/mcp/auth-secrets.cjs +3460 -3
  294. package/dist/core/tools/mcp/auth-secrets.d.ts.map +1 -1
  295. package/dist/core/tools/mcp/auth-secrets.js +3477 -3
  296. package/dist/core/tools/mcp/http-headers.cjs +17 -1
  297. package/dist/core/tools/mcp/http-headers.d.ts.map +1 -1
  298. package/dist/core/tools/mcp/http-headers.js +15 -1
  299. package/dist/core/tools/mcp/oauth-refresh.cjs +568 -114
  300. package/dist/core/tools/mcp/oauth-refresh.js +566 -115
  301. package/dist/core/types/board.d.ts +14 -0
  302. package/dist/core/types/board.d.ts.map +1 -1
  303. package/dist/core/types/branch.d.ts +13 -0
  304. package/dist/core/types/branch.d.ts.map +1 -1
  305. package/dist/core/types/config-services.d.ts.map +1 -1
  306. package/dist/core/types/feathers.d.ts +6 -0
  307. package/dist/core/types/feathers.d.ts.map +1 -1
  308. package/dist/core/types/gateway.d.ts +90 -1
  309. package/dist/core/types/gateway.d.ts.map +1 -1
  310. package/dist/core/types/index.cjs +42 -0
  311. package/dist/core/types/index.d.ts +1 -0
  312. package/dist/core/types/index.d.ts.map +1 -1
  313. package/dist/core/types/index.js +38 -0
  314. package/dist/core/types/schedule.d.ts +4 -3
  315. package/dist/core/types/schedule.d.ts.map +1 -1
  316. package/dist/core/types/session.d.ts +7 -1
  317. package/dist/core/types/session.d.ts.map +1 -1
  318. package/dist/core/types/tenant.d.ts +15 -0
  319. package/dist/core/types/tenant.d.ts.map +1 -0
  320. package/dist/core/types/user.d.ts +61 -0
  321. package/dist/core/types/user.d.ts.map +1 -1
  322. package/dist/core/unix/index.cjs +1123 -674
  323. package/dist/core/unix/index.js +1071 -624
  324. package/dist/core/utils/emoji-shortcodes.d.ts +13 -0
  325. package/dist/core/utils/emoji-shortcodes.d.ts.map +1 -0
  326. package/dist/core/yaml/index.cjs +8 -8
  327. package/dist/core/yaml/index.d.ts +1 -1
  328. package/dist/core/yaml/index.d.ts.map +1 -1
  329. package/dist/core/yaml/index.js +7 -7
  330. package/dist/daemon/adapters/drizzle.d.ts +26 -4
  331. package/dist/daemon/adapters/drizzle.d.ts.map +1 -1
  332. package/dist/daemon/adapters/drizzle.js +68 -7
  333. package/dist/daemon/auth/api-key-strategy.js +1 -1
  334. package/dist/daemon/auth/executor-runtime-scope.d.ts.map +1 -1
  335. package/dist/daemon/auth/executor-runtime-scope.js +34 -6
  336. package/dist/daemon/auth/executor-session-token.d.ts +15 -0
  337. package/dist/daemon/auth/executor-session-token.d.ts.map +1 -0
  338. package/dist/daemon/auth/executor-session-token.js +17 -0
  339. package/dist/daemon/auth/issue-browser-tokens-hook.d.ts +24 -0
  340. package/dist/daemon/auth/issue-browser-tokens-hook.d.ts.map +1 -0
  341. package/dist/daemon/auth/issue-browser-tokens-hook.js +95 -0
  342. package/dist/daemon/auth/launch-auth.d.ts +5 -4
  343. package/dist/daemon/auth/launch-auth.d.ts.map +1 -1
  344. package/dist/daemon/auth/launch-auth.js +123 -39
  345. package/dist/daemon/auth/refresh-token-service.d.ts +22 -0
  346. package/dist/daemon/auth/refresh-token-service.d.ts.map +1 -0
  347. package/dist/daemon/auth/refresh-token-service.js +133 -0
  348. package/dist/daemon/auth/runtime-tokens.d.ts +3 -1
  349. package/dist/daemon/auth/runtime-tokens.d.ts.map +1 -1
  350. package/dist/daemon/auth/runtime-tokens.js +17 -4
  351. package/dist/daemon/auth/service-jwt-strategy.d.ts +2 -1
  352. package/dist/daemon/auth/service-jwt-strategy.d.ts.map +1 -1
  353. package/dist/daemon/auth/service-jwt-strategy.js +141 -3
  354. package/dist/daemon/auth/token-invalidation.d.ts +11 -0
  355. package/dist/daemon/auth/token-invalidation.d.ts.map +1 -0
  356. package/dist/daemon/auth/token-invalidation.js +38 -0
  357. package/dist/daemon/auth/user-redaction.d.ts +12 -0
  358. package/dist/daemon/auth/user-redaction.d.ts.map +1 -0
  359. package/dist/daemon/auth/user-redaction.js +13 -0
  360. package/dist/daemon/declarations.d.ts +5 -4
  361. package/dist/daemon/declarations.d.ts.map +1 -1
  362. package/dist/daemon/hooks/gateway-route.d.ts.map +1 -1
  363. package/dist/daemon/hooks/gateway-route.js +23 -13
  364. package/dist/daemon/index.d.ts.map +1 -1
  365. package/dist/daemon/index.js +8271 -2956
  366. package/dist/daemon/knowledge/pgvector.d.ts +3 -3
  367. package/dist/daemon/knowledge/pgvector.d.ts.map +1 -1
  368. package/dist/daemon/knowledge/pgvector.js +24 -0
  369. package/dist/daemon/knowledge/units.d.ts +2 -2
  370. package/dist/daemon/knowledge/units.d.ts.map +1 -1
  371. package/dist/daemon/main.js +8271 -2956
  372. package/dist/daemon/mcp/server.d.ts +3 -3
  373. package/dist/daemon/mcp/server.d.ts.map +1 -1
  374. package/dist/daemon/mcp/server.js +1740 -81
  375. package/dist/daemon/mcp/tokens.d.ts +2 -2
  376. package/dist/daemon/mcp/tokens.d.ts.map +1 -1
  377. package/dist/daemon/mcp/tokens.js +5 -1
  378. package/dist/daemon/mcp/tool-registry.d.ts.map +1 -1
  379. package/dist/daemon/mcp/tool-registry.js +1 -0
  380. package/dist/daemon/mcp/tools/analytics.d.ts.map +1 -1
  381. package/dist/daemon/mcp/tools/analytics.js +598 -24
  382. package/dist/daemon/mcp/tools/artifacts.js +560 -20
  383. package/dist/daemon/mcp/tools/boards.d.ts.map +1 -1
  384. package/dist/daemon/mcp/tools/boards.js +567 -21
  385. package/dist/daemon/mcp/tools/branches.d.ts.map +1 -1
  386. package/dist/daemon/mcp/tools/branches.js +624 -50
  387. package/dist/daemon/mcp/tools/card-types.js +558 -18
  388. package/dist/daemon/mcp/tools/cards.js +558 -18
  389. package/dist/daemon/mcp/tools/environment.js +566 -18
  390. package/dist/daemon/mcp/tools/gateway-channels.d.ts +4 -0
  391. package/dist/daemon/mcp/tools/gateway-channels.d.ts.map +1 -0
  392. package/dist/daemon/mcp/tools/gateway-channels.js +16187 -0
  393. package/dist/daemon/mcp/tools/knowledge.js +558 -18
  394. package/dist/daemon/mcp/tools/mcp-servers.d.ts.map +1 -1
  395. package/dist/daemon/mcp/tools/mcp-servers.js +893 -18
  396. package/dist/daemon/mcp/tools/messages.d.ts.map +1 -1
  397. package/dist/daemon/mcp/tools/messages.js +618 -32
  398. package/dist/daemon/mcp/tools/proxies.js +568 -20
  399. package/dist/daemon/mcp/tools/repos.js +558 -18
  400. package/dist/daemon/mcp/tools/schedules.d.ts.map +1 -1
  401. package/dist/daemon/mcp/tools/schedules.js +561 -19
  402. package/dist/daemon/mcp/tools/search.js +558 -18
  403. package/dist/daemon/mcp/tools/sessions.d.ts.map +1 -1
  404. package/dist/daemon/mcp/tools/sessions.js +571 -24
  405. package/dist/daemon/mcp/tools/tasks.js +558 -18
  406. package/dist/daemon/mcp/tools/users.d.ts.map +1 -1
  407. package/dist/daemon/mcp/tools/users.js +577 -23
  408. package/dist/daemon/mcp/tools/widgets.d.ts.map +1 -1
  409. package/dist/daemon/mcp/tools/widgets.js +759 -83
  410. package/dist/daemon/oauth-auth-helpers.d.ts +35 -0
  411. package/dist/daemon/oauth-auth-helpers.d.ts.map +1 -0
  412. package/dist/daemon/oauth-auth-helpers.js +14 -0
  413. package/dist/daemon/register-hooks.d.ts +4 -2
  414. package/dist/daemon/register-hooks.d.ts.map +1 -1
  415. package/dist/daemon/register-hooks.js +1158 -595
  416. package/dist/daemon/register-routes.d.ts +3 -2
  417. package/dist/daemon/register-routes.d.ts.map +1 -1
  418. package/dist/daemon/register-routes.js +3161 -812
  419. package/dist/daemon/register-services.d.ts +2 -2
  420. package/dist/daemon/register-services.d.ts.map +1 -1
  421. package/dist/daemon/register-services.js +2782 -739
  422. package/dist/daemon/services/artifacts.d.ts +34 -6
  423. package/dist/daemon/services/artifacts.d.ts.map +1 -1
  424. package/dist/daemon/services/artifacts.js +109 -8
  425. package/dist/daemon/services/assistant-knowledge.d.ts +2 -2
  426. package/dist/daemon/services/assistant-knowledge.d.ts.map +1 -1
  427. package/dist/daemon/services/board-comments.d.ts +8 -5
  428. package/dist/daemon/services/board-comments.d.ts.map +1 -1
  429. package/dist/daemon/services/board-comments.js +78 -13
  430. package/dist/daemon/services/board-objects.d.ts +8 -5
  431. package/dist/daemon/services/board-objects.d.ts.map +1 -1
  432. package/dist/daemon/services/board-objects.js +14 -4
  433. package/dist/daemon/services/boards.d.ts +39 -5
  434. package/dist/daemon/services/boards.d.ts.map +1 -1
  435. package/dist/daemon/services/boards.js +123 -8
  436. package/dist/daemon/services/branch-owners.d.ts +3 -1
  437. package/dist/daemon/services/branch-owners.d.ts.map +1 -1
  438. package/dist/daemon/services/branch-owners.js +31 -4
  439. package/dist/daemon/services/branches.d.ts +31 -8
  440. package/dist/daemon/services/branches.d.ts.map +1 -1
  441. package/dist/daemon/services/branches.js +272 -36
  442. package/dist/daemon/services/card-types.d.ts +3 -3
  443. package/dist/daemon/services/card-types.d.ts.map +1 -1
  444. package/dist/daemon/services/card-types.js +68 -7
  445. package/dist/daemon/services/cards.d.ts +19 -4
  446. package/dist/daemon/services/cards.d.ts.map +1 -1
  447. package/dist/daemon/services/cards.js +92 -8
  448. package/dist/daemon/services/check-auth.d.ts +2 -2
  449. package/dist/daemon/services/check-auth.d.ts.map +1 -1
  450. package/dist/daemon/services/claude-cli-integration.d.ts +4 -1
  451. package/dist/daemon/services/claude-cli-integration.d.ts.map +1 -1
  452. package/dist/daemon/services/claude-cli-integration.js +117 -65
  453. package/dist/daemon/services/claude-models.d.ts +3 -3
  454. package/dist/daemon/services/claude-models.d.ts.map +1 -1
  455. package/dist/daemon/services/claude-models.js +387 -273
  456. package/dist/daemon/services/config.d.ts +12 -4
  457. package/dist/daemon/services/config.d.ts.map +1 -1
  458. package/dist/daemon/services/config.js +39 -3
  459. package/dist/daemon/services/copilot-models.d.ts +3 -3
  460. package/dist/daemon/services/copilot-models.d.ts.map +1 -1
  461. package/dist/daemon/services/cursor-models.d.ts +3 -3
  462. package/dist/daemon/services/cursor-models.d.ts.map +1 -1
  463. package/dist/daemon/services/files.d.ts +3 -3
  464. package/dist/daemon/services/files.d.ts.map +1 -1
  465. package/dist/daemon/services/files.js +24 -5
  466. package/dist/daemon/services/gateway-channels-test.d.ts +24 -0
  467. package/dist/daemon/services/gateway-channels-test.d.ts.map +1 -0
  468. package/dist/daemon/services/gateway-channels-test.js +66 -0
  469. package/dist/daemon/services/gateway-channels.d.ts +3 -3
  470. package/dist/daemon/services/gateway-channels.d.ts.map +1 -1
  471. package/dist/daemon/services/gateway-channels.js +68 -7
  472. package/dist/daemon/services/gateway.d.ts +63 -3
  473. package/dist/daemon/services/gateway.d.ts.map +1 -1
  474. package/dist/daemon/services/gateway.js +640 -60
  475. package/dist/daemon/services/github-app-setup.d.ts +3 -3
  476. package/dist/daemon/services/github-app-setup.d.ts.map +1 -1
  477. package/dist/daemon/services/groups.d.ts +5 -5
  478. package/dist/daemon/services/groups.d.ts.map +1 -1
  479. package/dist/daemon/services/health-monitor.d.ts +34 -2
  480. package/dist/daemon/services/health-monitor.d.ts.map +1 -1
  481. package/dist/daemon/services/health-monitor.js +155 -30
  482. package/dist/daemon/services/knowledge-document-edits.d.ts +3 -3
  483. package/dist/daemon/services/knowledge-document-edits.d.ts.map +1 -1
  484. package/dist/daemon/services/knowledge-documents.d.ts +3 -3
  485. package/dist/daemon/services/knowledge-documents.d.ts.map +1 -1
  486. package/dist/daemon/services/knowledge-documents.js +92 -7
  487. package/dist/daemon/services/knowledge-embedding-indexer.d.ts +7 -2
  488. package/dist/daemon/services/knowledge-embedding-indexer.d.ts.map +1 -1
  489. package/dist/daemon/services/knowledge-embedding-indexer.js +37 -3
  490. package/dist/daemon/services/knowledge-graph.d.ts +3 -3
  491. package/dist/daemon/services/knowledge-graph.d.ts.map +1 -1
  492. package/dist/daemon/services/knowledge-indexing.d.ts +3 -3
  493. package/dist/daemon/services/knowledge-indexing.d.ts.map +1 -1
  494. package/dist/daemon/services/knowledge-namespaces.d.ts +3 -3
  495. package/dist/daemon/services/knowledge-namespaces.d.ts.map +1 -1
  496. package/dist/daemon/services/knowledge-namespaces.js +72 -8
  497. package/dist/daemon/services/knowledge-reindex.d.ts +3 -3
  498. package/dist/daemon/services/knowledge-reindex.d.ts.map +1 -1
  499. package/dist/daemon/services/knowledge-reindex.js +28 -1
  500. package/dist/daemon/services/knowledge-search.d.ts +3 -3
  501. package/dist/daemon/services/knowledge-search.d.ts.map +1 -1
  502. package/dist/daemon/services/knowledge-settings.d.ts +3 -3
  503. package/dist/daemon/services/knowledge-settings.d.ts.map +1 -1
  504. package/dist/daemon/services/knowledge-settings.js +24 -0
  505. package/dist/daemon/services/knowledge-versions.d.ts +3 -3
  506. package/dist/daemon/services/knowledge-versions.d.ts.map +1 -1
  507. package/dist/daemon/services/knowledge-versions.js +68 -7
  508. package/dist/daemon/services/leaderboard.d.ts +14 -6
  509. package/dist/daemon/services/leaderboard.d.ts.map +1 -1
  510. package/dist/daemon/services/leaderboard.js +74 -15
  511. package/dist/daemon/services/local-actions.d.ts +13 -0
  512. package/dist/daemon/services/local-actions.d.ts.map +1 -0
  513. package/dist/daemon/services/local-actions.js +120 -0
  514. package/dist/daemon/services/mcp-servers.d.ts +3 -3
  515. package/dist/daemon/services/mcp-servers.d.ts.map +1 -1
  516. package/dist/daemon/services/mcp-servers.js +68 -7
  517. package/dist/daemon/services/messages.d.ts +10 -6
  518. package/dist/daemon/services/messages.d.ts.map +1 -1
  519. package/dist/daemon/services/messages.js +87 -7
  520. package/dist/daemon/services/repos.d.ts +6 -6
  521. package/dist/daemon/services/repos.d.ts.map +1 -1
  522. package/dist/daemon/services/repos.js +131 -32
  523. package/dist/daemon/services/scheduler.d.ts +23 -27
  524. package/dist/daemon/services/scheduler.d.ts.map +1 -1
  525. package/dist/daemon/services/scheduler.js +55 -28
  526. package/dist/daemon/services/schedules.d.ts +3 -3
  527. package/dist/daemon/services/schedules.d.ts.map +1 -1
  528. package/dist/daemon/services/schedules.js +68 -7
  529. package/dist/daemon/services/session-env-selections.d.ts +3 -3
  530. package/dist/daemon/services/session-env-selections.d.ts.map +1 -1
  531. package/dist/daemon/services/session-mcp-servers.d.ts +3 -3
  532. package/dist/daemon/services/session-mcp-servers.d.ts.map +1 -1
  533. package/dist/daemon/services/session-streams.d.ts +29 -0
  534. package/dist/daemon/services/session-streams.d.ts.map +1 -0
  535. package/dist/daemon/services/session-streams.js +84 -0
  536. package/dist/daemon/services/session-token-service.d.ts.map +1 -1
  537. package/dist/daemon/services/session-token-service.js +11 -4
  538. package/dist/daemon/services/sessions.d.ts +9 -5
  539. package/dist/daemon/services/sessions.d.ts.map +1 -1
  540. package/dist/daemon/services/sessions.js +143 -10
  541. package/dist/daemon/services/tasks.d.ts +11 -5
  542. package/dist/daemon/services/tasks.d.ts.map +1 -1
  543. package/dist/daemon/services/tasks.js +199 -39
  544. package/dist/daemon/services/terminals.d.ts +21 -3
  545. package/dist/daemon/services/terminals.d.ts.map +1 -1
  546. package/dist/daemon/services/terminals.js +81 -25
  547. package/dist/daemon/services/thread-session-map.d.ts +3 -3
  548. package/dist/daemon/services/thread-session-map.d.ts.map +1 -1
  549. package/dist/daemon/services/thread-session-map.js +68 -7
  550. package/dist/daemon/services/user-avatar-sync.d.ts +21 -0
  551. package/dist/daemon/services/user-avatar-sync.d.ts.map +1 -0
  552. package/dist/daemon/services/user-avatar-sync.js +267 -0
  553. package/dist/daemon/services/users.d.ts +29 -9
  554. package/dist/daemon/services/users.d.ts.map +1 -1
  555. package/dist/daemon/services/users.js +383 -30
  556. package/dist/daemon/services/zone-trigger.d.ts.map +1 -1
  557. package/dist/daemon/services/zone-trigger.js +17 -4
  558. package/dist/daemon/setup/build-info.d.ts +1 -1
  559. package/dist/daemon/setup/build-info.d.ts.map +1 -1
  560. package/dist/daemon/setup/build-info.js +5 -1
  561. package/dist/daemon/setup/database.d.ts +8 -3
  562. package/dist/daemon/setup/database.d.ts.map +1 -1
  563. package/dist/daemon/setup/database.js +26 -6
  564. package/dist/daemon/setup/first-run-admin.d.ts +2 -2
  565. package/dist/daemon/setup/first-run-admin.d.ts.map +1 -1
  566. package/dist/daemon/setup/index.js +137 -25
  567. package/dist/daemon/setup/socketio.d.ts +10 -1
  568. package/dist/daemon/setup/socketio.d.ts.map +1 -1
  569. package/dist/daemon/setup/socketio.js +108 -18
  570. package/dist/daemon/startup.d.ts +13 -2
  571. package/dist/daemon/startup.d.ts.map +1 -1
  572. package/dist/daemon/startup.js +377 -94
  573. package/dist/daemon/utils/append-system-message.d.ts +2 -2
  574. package/dist/daemon/utils/append-system-message.d.ts.map +1 -1
  575. package/dist/daemon/utils/apply-session-config-defaults.d.ts.map +1 -1
  576. package/dist/daemon/utils/apply-session-config-defaults.js +12 -1
  577. package/dist/daemon/utils/authorization.d.ts +3 -1
  578. package/dist/daemon/utils/authorization.d.ts.map +1 -1
  579. package/dist/daemon/utils/authorization.js +36 -7
  580. package/dist/daemon/utils/branch-authorization.d.ts +30 -0
  581. package/dist/daemon/utils/branch-authorization.d.ts.map +1 -1
  582. package/dist/daemon/utils/branch-authorization.js +63 -5
  583. package/dist/daemon/utils/branch-inspect.d.ts +1 -0
  584. package/dist/daemon/utils/branch-inspect.d.ts.map +1 -1
  585. package/dist/daemon/utils/branch-inspect.js +11 -3
  586. package/dist/daemon/utils/emit-service-event.d.ts +56 -0
  587. package/dist/daemon/utils/emit-service-event.d.ts.map +1 -0
  588. package/dist/daemon/utils/emit-service-event.js +23 -0
  589. package/dist/daemon/utils/executor-read-impersonation.d.ts +2 -2
  590. package/dist/daemon/utils/executor-read-impersonation.d.ts.map +1 -1
  591. package/dist/daemon/utils/git-impersonation.d.ts +10 -10
  592. package/dist/daemon/utils/git-impersonation.d.ts.map +1 -1
  593. package/dist/daemon/utils/git-remote-credential-scan.d.ts +3 -3
  594. package/dist/daemon/utils/git-remote-credential-scan.d.ts.map +1 -1
  595. package/dist/daemon/utils/git-remote-credential-scan.js +6 -2
  596. package/dist/daemon/utils/mcp-header-secrets.d.ts +3 -5
  597. package/dist/daemon/utils/mcp-header-secrets.d.ts.map +1 -1
  598. package/dist/daemon/utils/mcp-header-secrets.js +31 -2
  599. package/dist/daemon/utils/mcp-token-authorization.d.ts +18 -13
  600. package/dist/daemon/utils/mcp-token-authorization.d.ts.map +1 -1
  601. package/dist/daemon/utils/mcp-token-authorization.js +11 -5
  602. package/dist/daemon/utils/open-source-telemetry-config.d.ts +6 -0
  603. package/dist/daemon/utils/open-source-telemetry-config.d.ts.map +1 -0
  604. package/dist/daemon/utils/open-source-telemetry-config.js +21 -0
  605. package/dist/daemon/utils/open-source-telemetry-heartbeat.d.ts +7 -0
  606. package/dist/daemon/utils/open-source-telemetry-heartbeat.d.ts.map +1 -0
  607. package/dist/daemon/utils/open-source-telemetry-heartbeat.js +15 -0
  608. package/dist/daemon/utils/open-source-telemetry-usage.d.ts +9 -0
  609. package/dist/daemon/utils/open-source-telemetry-usage.d.ts.map +1 -0
  610. package/dist/daemon/utils/open-source-telemetry-usage.js +121 -0
  611. package/dist/daemon/utils/realign-repo-origin.d.ts +3 -3
  612. package/dist/daemon/utils/realign-repo-origin.d.ts.map +1 -1
  613. package/dist/daemon/utils/realign-repo-origin.js +47 -16
  614. package/dist/daemon/utils/realtime-access-cache.d.ts +9 -0
  615. package/dist/daemon/utils/realtime-access-cache.d.ts.map +1 -1
  616. package/dist/daemon/utils/realtime-access-cache.js +24 -0
  617. package/dist/daemon/utils/realtime-publish.d.ts +26 -0
  618. package/dist/daemon/utils/realtime-publish.d.ts.map +1 -1
  619. package/dist/daemon/utils/realtime-publish.js +171 -12
  620. package/dist/daemon/utils/session-queue-tenant-scope.d.ts +24 -0
  621. package/dist/daemon/utils/session-queue-tenant-scope.d.ts.map +1 -0
  622. package/dist/daemon/utils/session-queue-tenant-scope.js +133 -0
  623. package/dist/daemon/utils/session-state-hooks.d.ts +3 -3
  624. package/dist/daemon/utils/session-state-hooks.d.ts.map +1 -1
  625. package/dist/daemon/utils/session-turn-lock.d.ts +8 -1
  626. package/dist/daemon/utils/session-turn-lock.d.ts.map +1 -1
  627. package/dist/daemon/utils/session-turn-lock.js +25 -2
  628. package/dist/daemon/utils/spawn-executor.d.ts +23 -1
  629. package/dist/daemon/utils/spawn-executor.d.ts.map +1 -1
  630. package/dist/daemon/utils/spawn-executor.js +34 -4
  631. package/dist/daemon/utils/tenant-db-scope.d.ts +20 -0
  632. package/dist/daemon/utils/tenant-db-scope.d.ts.map +1 -0
  633. package/dist/daemon/utils/tenant-db-scope.js +114 -0
  634. package/dist/daemon/utils/unix-group-init.d.ts +3 -3
  635. package/dist/daemon/utils/unix-group-init.d.ts.map +1 -1
  636. package/dist/daemon/utils/upload.d.ts +6 -9
  637. package/dist/daemon/utils/upload.d.ts.map +1 -1
  638. package/dist/daemon/utils/upload.js +30 -37
  639. package/dist/daemon/widgets/env-vars/index.d.ts +26 -1
  640. package/dist/daemon/widgets/env-vars/index.d.ts.map +1 -1
  641. package/dist/daemon/widgets/env-vars/index.js +145 -21
  642. package/dist/daemon/widgets/gateway-token/index.d.ts +114 -0
  643. package/dist/daemon/widgets/gateway-token/index.d.ts.map +1 -0
  644. package/dist/daemon/widgets/gateway-token/index.js +14711 -0
  645. package/dist/daemon/widgets/index.d.ts.map +1 -1
  646. package/dist/daemon/widgets/index.js +327 -37
  647. package/dist/daemon/widgets/registry.d.ts +7 -0
  648. package/dist/daemon/widgets/registry.d.ts.map +1 -1
  649. package/dist/daemon/widgets/submissions.js +12 -9
  650. package/dist/executor/commands/environment.d.ts.map +1 -1
  651. package/dist/executor/commands/environment.js +9 -5
  652. package/dist/executor/commands/git.d.ts.map +1 -1
  653. package/dist/executor/commands/git.js +3 -1
  654. package/dist/executor/db/feathers-repositories.d.ts +19 -1
  655. package/dist/executor/db/feathers-repositories.d.ts.map +1 -1
  656. package/dist/executor/db/feathers-repositories.js +31 -1
  657. package/dist/executor/git/index.d.ts +8 -0
  658. package/dist/executor/git/index.d.ts.map +1 -0
  659. package/dist/executor/git/index.js +7 -0
  660. package/dist/executor/handlers/sdk/base-executor.d.ts.map +1 -1
  661. package/dist/executor/handlers/sdk/base-executor.js +4 -1
  662. package/dist/executor/handlers/sdk/claude.d.ts.map +1 -1
  663. package/dist/executor/handlers/sdk/claude.js +1 -1
  664. package/dist/executor/handlers/sdk/codex.d.ts.map +1 -1
  665. package/dist/executor/handlers/sdk/codex.js +1 -1
  666. package/dist/executor/handlers/sdk/copilot.d.ts.map +1 -1
  667. package/dist/executor/handlers/sdk/copilot.js +1 -1
  668. package/dist/executor/handlers/sdk/cursor.d.ts.map +1 -1
  669. package/dist/executor/handlers/sdk/cursor.js +1 -0
  670. package/dist/executor/handlers/sdk/gemini.d.ts.map +1 -1
  671. package/dist/executor/handlers/sdk/gemini.js +1 -1
  672. package/dist/executor/handlers/sdk/git-safe-directory.d.ts.map +1 -1
  673. package/dist/executor/handlers/sdk/git-safe-directory.js +1 -1
  674. package/dist/executor/handlers/sdk/opencode.d.ts.map +1 -1
  675. package/dist/executor/handlers/sdk/opencode.js +1 -1
  676. package/dist/executor/payload-types.d.ts +5 -5
  677. package/dist/executor/sdk-handlers/base/diff-enrichment.js +1 -1
  678. package/dist/executor/sdk-handlers/base/mcp-scoping.d.ts +8 -1
  679. package/dist/executor/sdk-handlers/base/mcp-scoping.d.ts.map +1 -1
  680. package/dist/executor/sdk-handlers/base/mcp-scoping.js +58 -6
  681. package/dist/executor/sdk-handlers/claude/claude-tool.d.ts +2 -2
  682. package/dist/executor/sdk-handlers/claude/claude-tool.d.ts.map +1 -1
  683. package/dist/executor/sdk-handlers/claude/claude-tool.js +2 -2
  684. package/dist/executor/sdk-handlers/claude/prompt-service.d.ts +13 -3
  685. package/dist/executor/sdk-handlers/claude/prompt-service.d.ts.map +1 -1
  686. package/dist/executor/sdk-handlers/claude/prompt-service.js +16 -3
  687. package/dist/executor/sdk-handlers/claude/query-builder.d.ts +2 -1
  688. package/dist/executor/sdk-handlers/claude/query-builder.d.ts.map +1 -1
  689. package/dist/executor/sdk-handlers/claude/query-builder.js +2 -1
  690. package/dist/executor/sdk-handlers/codex/codex-tool.d.ts +8 -12
  691. package/dist/executor/sdk-handlers/codex/codex-tool.d.ts.map +1 -1
  692. package/dist/executor/sdk-handlers/codex/codex-tool.js +14 -17
  693. package/dist/executor/sdk-handlers/codex/normalizer.d.ts.map +1 -1
  694. package/dist/executor/sdk-handlers/codex/normalizer.js +11 -1
  695. package/dist/executor/sdk-handlers/codex/pricing/litellm-openai-model-prices.json +3663 -0
  696. package/dist/executor/sdk-handlers/codex/pricing/litellm-pricing.d.ts +31 -0
  697. package/dist/executor/sdk-handlers/codex/pricing/litellm-pricing.d.ts.map +1 -0
  698. package/dist/executor/sdk-handlers/codex/pricing/litellm-pricing.js +46 -0
  699. package/dist/executor/sdk-handlers/codex/prompt-service.d.ts +3 -2
  700. package/dist/executor/sdk-handlers/codex/prompt-service.d.ts.map +1 -1
  701. package/dist/executor/sdk-handlers/codex/prompt-service.js +131 -12
  702. package/dist/executor/sdk-handlers/codex/usage.d.ts +14 -23
  703. package/dist/executor/sdk-handlers/codex/usage.d.ts.map +1 -1
  704. package/dist/executor/sdk-handlers/codex/usage.js +18 -33
  705. package/dist/executor/sdk-handlers/copilot/copilot-tool.d.ts +2 -2
  706. package/dist/executor/sdk-handlers/copilot/copilot-tool.d.ts.map +1 -1
  707. package/dist/executor/sdk-handlers/copilot/copilot-tool.js +2 -2
  708. package/dist/executor/sdk-handlers/copilot/prompt-service.d.ts +3 -2
  709. package/dist/executor/sdk-handlers/copilot/prompt-service.d.ts.map +1 -1
  710. package/dist/executor/sdk-handlers/copilot/prompt-service.js +4 -1
  711. package/dist/executor/sdk-handlers/gemini/gemini-tool.d.ts +2 -2
  712. package/dist/executor/sdk-handlers/gemini/gemini-tool.d.ts.map +1 -1
  713. package/dist/executor/sdk-handlers/gemini/gemini-tool.js +2 -2
  714. package/dist/executor/sdk-handlers/gemini/prompt-service.d.ts +3 -2
  715. package/dist/executor/sdk-handlers/gemini/prompt-service.d.ts.map +1 -1
  716. package/dist/executor/sdk-handlers/gemini/prompt-service.js +4 -1
  717. package/dist/executor/sdk-handlers/opencode/opencode-tool.d.ts +3 -2
  718. package/dist/executor/sdk-handlers/opencode/opencode-tool.d.ts.map +1 -1
  719. package/dist/executor/sdk-handlers/opencode/opencode-tool.js +4 -1
  720. package/dist/executor/services/feathers-client.d.ts.map +1 -1
  721. package/dist/executor/services/feathers-client.js +124 -25
  722. package/dist/git/index.cjs +1101 -0
  723. package/dist/git/index.d.ts +533 -0
  724. package/dist/git/index.d.ts.map +1 -0
  725. package/dist/git/index.js +1022 -0
  726. package/dist/git/package.json +21 -0
  727. package/dist/git/pure.cjs +185 -0
  728. package/dist/git/pure.d.ts +39 -0
  729. package/dist/git/pure.d.ts.map +1 -0
  730. package/dist/git/pure.js +139 -0
  731. package/dist/ui/assets/AgorEmojiPickerInner-leeNywMc.js +1 -0
  732. package/dist/ui/assets/App-Dpl4Cc0U.js +4 -0
  733. package/dist/ui/assets/App-Dpl4Cc0U.js.gz +0 -0
  734. package/dist/ui/assets/AppNode-wN3UZlFK.js +1 -0
  735. package/dist/ui/assets/AppNode-wN3UZlFK.js.gz +0 -0
  736. package/dist/ui/assets/ArtifactConsentModal-DjzXcP_L.js +1 -0
  737. package/dist/ui/assets/ArtifactConsentModal-DjzXcP_L.js.gz +0 -0
  738. package/dist/ui/assets/ArtifactFullscreenPage-B3b_EZ0F.js +9 -0
  739. package/dist/ui/assets/ArtifactFullscreenPage-B3b_EZ0F.js.gz +0 -0
  740. package/dist/ui/assets/ArtifactNode-DISy2T-6.js +9 -0
  741. package/dist/ui/assets/ArtifactNode-DISy2T-6.js.gz +0 -0
  742. package/dist/ui/assets/AutocompleteTextarea-DUpsoEGr.js +19 -0
  743. package/dist/ui/assets/AutocompleteTextarea-DUpsoEGr.js.gz +0 -0
  744. package/dist/ui/assets/BoardObjectNodes-BakeGpIX.js +34 -0
  745. package/dist/ui/assets/BoardObjectNodes-BakeGpIX.js.gz +0 -0
  746. package/dist/ui/assets/CodeEditor.inner-HmSdTLW5.js +7 -0
  747. package/dist/ui/assets/CodeEditor.inner-HmSdTLW5.js.gz +0 -0
  748. package/dist/ui/assets/ConversationView-mWaA-B1f.js +1 -0
  749. package/dist/ui/assets/ConversationView-mWaA-B1f.js.gz +0 -0
  750. package/dist/ui/assets/EmbeddedTerminal-NNoyPA81.js +2 -0
  751. package/dist/ui/assets/EmbeddedTerminal-NNoyPA81.js.gz +0 -0
  752. package/dist/ui/assets/KnowledgePage-CkxVnRvz.js +24 -0
  753. package/dist/ui/assets/KnowledgePage-CkxVnRvz.js.gz +0 -0
  754. package/dist/ui/assets/{MarketingScreenshotPage-zv5RUCuV.js → MarketingScreenshotPage-B86Gs8jx.js} +2 -2
  755. package/dist/ui/assets/MarketingScreenshotPage-B86Gs8jx.js.gz +0 -0
  756. package/dist/ui/assets/MobileApp-BPs-SXvz.js +1 -0
  757. package/dist/ui/assets/MobileApp-BPs-SXvz.js.gz +0 -0
  758. package/dist/ui/assets/{SessionCanvas-mEmYGZhC.css → SessionCanvas-Bh7Yg5dZ.css} +1 -1
  759. package/dist/ui/assets/SessionCanvas-Bh7Yg5dZ.css.gz +0 -0
  760. package/dist/ui/assets/SessionCanvas-xVfDoEtz.js +13 -0
  761. package/dist/ui/assets/SessionCanvas-xVfDoEtz.js.gz +0 -0
  762. package/dist/ui/assets/{StreamdownDemoPage-wzWaqWwr.js → StreamdownDemoPage-CvWLzVsv.js} +2 -2
  763. package/dist/ui/assets/StreamdownDemoPage-CvWLzVsv.js.gz +0 -0
  764. package/dist/ui/assets/TerminalModal-ExOgsuOP.js +2 -0
  765. package/dist/ui/assets/TerminalModal-ExOgsuOP.js.gz +0 -0
  766. package/dist/ui/assets/ThemeSwitcher-Cgyp5ruu.js +1 -0
  767. package/dist/ui/assets/ThemeSwitcher-Cgyp5ruu.js.gz +0 -0
  768. package/dist/ui/assets/ThemedSyntaxHighlighter.inner-rpCN9S6K.js +1 -0
  769. package/dist/ui/assets/{antd-CfbbHJOz.js → antd-BCqimh1J.js} +5 -5
  770. package/dist/ui/assets/{antd-CfbbHJOz.js.gz → antd-BCqimh1J.js.gz} +0 -0
  771. package/dist/ui/assets/architecture-U656AL7Q-BxSQIjrE.js +1 -0
  772. package/dist/ui/assets/architectureDiagram-VXUJARFQ-pDpGHSqT.js +36 -0
  773. package/dist/ui/assets/architectureDiagram-VXUJARFQ-pDpGHSqT.js.gz +0 -0
  774. package/dist/ui/assets/{blockDiagram-VD42YOAC-BhZaEN19.js → blockDiagram-VD42YOAC-uP8JTJpK.js} +4 -4
  775. package/dist/ui/assets/blockDiagram-VD42YOAC-uP8JTJpK.js.gz +0 -0
  776. package/dist/ui/assets/{c4Diagram-YG6GDRKO-Dk_UH-sY.js → c4Diagram-YG6GDRKO-qQe72Mm7.js} +2 -2
  777. package/dist/ui/assets/c4Diagram-YG6GDRKO-qQe72Mm7.js.gz +0 -0
  778. package/dist/ui/assets/channel-CoUBs6Zn.js +1 -0
  779. package/dist/ui/assets/{chunk-4BX2VUAB-XprbG2TG.js → chunk-4BX2VUAB-sz-YE8Nt.js} +1 -1
  780. package/dist/ui/assets/chunk-4ZMWKKQ3-3oKtfWXp.js +3 -0
  781. package/dist/ui/assets/chunk-4ZMWKKQ3-3oKtfWXp.js.gz +0 -0
  782. package/dist/ui/assets/chunk-55IACEB6-BS04dgKF.js +1 -0
  783. package/dist/ui/assets/{chunk-ABZYJK2D-BJcrryHK.js → chunk-ABZYJK2D-t3Gkphds.js} +3 -3
  784. package/dist/ui/assets/chunk-ABZYJK2D-t3Gkphds.js.gz +0 -0
  785. package/dist/ui/assets/{chunk-AGHRB4JF-DvxmfbM0.js → chunk-AGHRB4JF-D_QmWxbY.js} +1 -1
  786. package/dist/ui/assets/chunk-AGHRB4JF-D_QmWxbY.js.gz +0 -0
  787. package/dist/ui/assets/{chunk-ATLVNIR6-DbeJ0OrR.js → chunk-ATLVNIR6-Bmg7-Ufz.js} +1 -1
  788. package/dist/ui/assets/chunk-ATLVNIR6-Bmg7-Ufz.js.gz +0 -0
  789. package/dist/ui/assets/{chunk-B4BG7PRW-C53q2ggf.js → chunk-B4BG7PRW-dnSEE1u-.js} +3 -3
  790. package/dist/ui/assets/chunk-B4BG7PRW-dnSEE1u-.js.gz +0 -0
  791. package/dist/ui/assets/{chunk-CVBHYZKI-B3EBSlb3.js → chunk-CVBHYZKI-BStaYnF0.js} +1 -1
  792. package/dist/ui/assets/{chunk-DI55MBZ5-vIyNEQN-.js → chunk-DI55MBZ5-28dvx6o3.js} +1 -1
  793. package/dist/ui/assets/chunk-DI55MBZ5-28dvx6o3.js.gz +0 -0
  794. package/dist/ui/assets/chunk-EXTU4WIE-X-FURkEh.js +1 -0
  795. package/dist/ui/assets/{chunk-FMBD7UC4-rddmfK-Z.js → chunk-FMBD7UC4-C_63gC9S.js} +1 -1
  796. package/dist/ui/assets/{chunk-HN2XXSSU-Dttqcg3b.js → chunk-HN2XXSSU-UFD374KI.js} +1 -1
  797. package/dist/ui/assets/chunk-HN2XXSSU-UFD374KI.js.gz +0 -0
  798. package/dist/ui/assets/chunk-JA3XYJ7Z-B60hLNeR.js +11 -0
  799. package/dist/ui/assets/chunk-JA3XYJ7Z-B60hLNeR.js.gz +0 -0
  800. package/dist/ui/assets/{chunk-JZLCHNYA-EUmx2y4H.js → chunk-JZLCHNYA-ButC6pwN.js} +5 -5
  801. package/dist/ui/assets/chunk-JZLCHNYA-ButC6pwN.js.gz +0 -0
  802. package/dist/ui/assets/{chunk-MI3HLSF2-65n9Mkyc.js → chunk-MI3HLSF2-BivYzoSV.js} +1 -1
  803. package/dist/ui/assets/chunk-MI3HLSF2-BivYzoSV.js.gz +0 -0
  804. package/dist/ui/assets/chunk-N4CR4FBY-mVWzo5wJ.js +2 -0
  805. package/dist/ui/assets/chunk-N4CR4FBY-mVWzo5wJ.js.gz +0 -0
  806. package/dist/ui/assets/{chunk-QN33PNHL-DsRKK6NR.js → chunk-QN33PNHL-tXtHZpaG.js} +1 -1
  807. package/dist/ui/assets/{chunk-QXUST7PY-BCYnMiS3.js → chunk-QXUST7PY-DATib_Vv.js} +2 -2
  808. package/dist/ui/assets/chunk-QXUST7PY-DATib_Vv.js.gz +0 -0
  809. package/dist/ui/assets/chunk-QZHKN3VN-y6l249e5.js +1 -0
  810. package/dist/ui/assets/chunk-S3R3BYOJ-BEtfmflI.js +2 -0
  811. package/dist/ui/assets/chunk-S3R3BYOJ-BEtfmflI.js.gz +0 -0
  812. package/dist/ui/assets/{chunk-TZMSLE5B-BuQUQcTr.js → chunk-TZMSLE5B-BY1ZtogK.js} +1 -1
  813. package/dist/ui/assets/chunk-TZMSLE5B-BY1ZtogK.js.gz +0 -0
  814. package/dist/ui/assets/classDiagram-2ON5EDUG-BYvq-uPY.js +1 -0
  815. package/dist/ui/assets/classDiagram-v2-WZHVMYZB-BYvq-uPY.js +1 -0
  816. package/dist/ui/assets/constants-CYzQKfD1.js +1 -0
  817. package/dist/ui/assets/{cose-bilkent-S5V4N54A-CnPB3ARO.js → cose-bilkent-S5V4N54A-DPvYrqGG.js} +1 -1
  818. package/dist/ui/assets/cose-bilkent-S5V4N54A-DPvYrqGG.js.gz +0 -0
  819. package/dist/ui/assets/{dagre-6UL2VRFP-DhS-k_Se.js → dagre-6UL2VRFP-D800J6qb.js} +1 -1
  820. package/dist/ui/assets/dagre-6UL2VRFP-D800J6qb.js.gz +0 -0
  821. package/dist/ui/assets/{dagre-KgLoHEuy.js → dagre-TNc4wezg.js} +1 -1
  822. package/dist/ui/assets/dagre-TNc4wezg.js.gz +0 -0
  823. package/dist/ui/assets/diagram-PSM6KHXK-CGdP9F-X.js +24 -0
  824. package/dist/ui/assets/diagram-PSM6KHXK-CGdP9F-X.js.gz +0 -0
  825. package/dist/ui/assets/{diagram-QEK2KX5R-BPCitvbo.js → diagram-QEK2KX5R-BD5lOCe5.js} +1 -1
  826. package/dist/ui/assets/diagram-QEK2KX5R-BD5lOCe5.js.gz +0 -0
  827. package/dist/ui/assets/{diagram-S2PKOQOG-NW4uK6sx.js → diagram-S2PKOQOG-cp3l22vN.js} +1 -1
  828. package/dist/ui/assets/diagram-S2PKOQOG-cp3l22vN.js.gz +0 -0
  829. package/dist/ui/assets/editor-Cr0W5BQI.js +39 -0
  830. package/dist/ui/assets/editor-Cr0W5BQI.js.gz +0 -0
  831. package/dist/ui/assets/emoji-Bv3m24sO.js +3 -0
  832. package/dist/ui/assets/emoji-Bv3m24sO.js.gz +0 -0
  833. package/dist/ui/assets/{erDiagram-Q2GNP2WA-me1fboaf.js → erDiagram-Q2GNP2WA-CQSXRgqr.js} +2 -2
  834. package/dist/ui/assets/erDiagram-Q2GNP2WA-CQSXRgqr.js.gz +0 -0
  835. package/dist/ui/assets/flowDiagram-NV44I4VS-CKcKpkph.js +162 -0
  836. package/dist/ui/assets/flowDiagram-NV44I4VS-CKcKpkph.js.gz +0 -0
  837. package/dist/ui/assets/ganttDiagram-LVOFAZNH-DlAHzXO5.js +267 -0
  838. package/dist/ui/assets/ganttDiagram-LVOFAZNH-DlAHzXO5.js.gz +0 -0
  839. package/dist/ui/assets/{gitGraph-F6HP7TQM-CfFE_uAC.js → gitGraph-F6HP7TQM-DeuXy4B1.js} +1 -1
  840. package/dist/ui/assets/gitGraphDiagram-NY62KEGX-aB-AI4Vq.js +65 -0
  841. package/dist/ui/assets/gitGraphDiagram-NY62KEGX-aB-AI4Vq.js.gz +0 -0
  842. package/dist/ui/assets/index-B-qHc0o5.js +63 -0
  843. package/dist/ui/assets/index-B-qHc0o5.js.gz +0 -0
  844. package/dist/ui/assets/{index-DxuPq13l.css → index-qkT7Qqm2.css} +1 -1
  845. package/dist/ui/assets/index-qkT7Qqm2.css.gz +0 -0
  846. package/dist/ui/assets/{info-NVLQJR56-i_xHYg3f.js → info-NVLQJR56-B9PG7xsc.js} +1 -1
  847. package/dist/ui/assets/{infoDiagram-ER5ION4S-2NL93b78.js → infoDiagram-ER5ION4S-C5Wpoqim.js} +1 -1
  848. package/dist/ui/assets/{journeyDiagram-XKPGCS4Q-CZF-2DHU.js → journeyDiagram-XKPGCS4Q-CHLziqfS.js} +3 -3
  849. package/dist/ui/assets/journeyDiagram-XKPGCS4Q-CHLziqfS.js.gz +0 -0
  850. package/dist/ui/assets/{kanban-definition-3W4ZIXB7-CfvJIOny.js → kanban-definition-3W4ZIXB7-Dq7GzQE_.js} +1 -1
  851. package/dist/ui/assets/kanban-definition-3W4ZIXB7-Dq7GzQE_.js.gz +0 -0
  852. package/dist/ui/assets/{line-DDv8kOJk.js → line-DHKNg83I.js} +1 -1
  853. package/dist/ui/assets/{linear-Daef-l29.js → linear-BvUfn0I8.js} +1 -1
  854. package/dist/ui/assets/linear-BvUfn0I8.js.gz +0 -0
  855. package/dist/ui/assets/{mermaid-parser.core-CdK9QgYV.js → mermaid-parser.core-C6d9tKoo.js} +2 -2
  856. package/dist/ui/assets/mermaid-parser.core-C6d9tKoo.js.gz +0 -0
  857. package/dist/ui/assets/mermaid.core-CxE5KezR.js +11 -0
  858. package/dist/ui/assets/mermaid.core-CxE5KezR.js.gz +0 -0
  859. package/dist/ui/assets/{mindmap-definition-VGOIOE7T-Cb3QMflX.js → mindmap-definition-VGOIOE7T-DmPoQ48w.js} +1 -1
  860. package/dist/ui/assets/mindmap-definition-VGOIOE7T-DmPoQ48w.js.gz +0 -0
  861. package/dist/ui/assets/{packet-BFZMPI3H-Bm2uwz4i.js → packet-BFZMPI3H-JZEkVZxU.js} +1 -1
  862. package/dist/ui/assets/{particles-DsJFOarW.js → particles-CxMmUw86.js} +1 -1
  863. package/dist/ui/assets/particles-CxMmUw86.js.gz +0 -0
  864. package/dist/ui/assets/{pie-7BOR55EZ-5i17tVnF.js → pie-7BOR55EZ-_1II5pYQ.js} +1 -1
  865. package/dist/ui/assets/{pieDiagram-ADFJNKIX-BxIwQWvw.js → pieDiagram-ADFJNKIX-DrNkH33i.js} +1 -1
  866. package/dist/ui/assets/pieDiagram-ADFJNKIX-DrNkH33i.js.gz +0 -0
  867. package/dist/ui/assets/{quadrantDiagram-AYHSOK5B-B5HPe4ga.js → quadrantDiagram-AYHSOK5B-DOpC-HEF.js} +3 -3
  868. package/dist/ui/assets/quadrantDiagram-AYHSOK5B-DOpC-HEF.js.gz +0 -0
  869. package/dist/ui/assets/{radar-NHE76QYJ-BTn-tq0k.js → radar-NHE76QYJ-DDmqhzEZ.js} +1 -1
  870. package/dist/ui/assets/reactflow-D98uPOMq.js +2 -0
  871. package/dist/ui/assets/reactflow-D98uPOMq.js.gz +0 -0
  872. package/dist/ui/assets/{requirementDiagram-UZGBJVZJ-YfI6llkX.js → requirementDiagram-UZGBJVZJ-Bzx0iEPP.js} +1 -1
  873. package/dist/ui/assets/requirementDiagram-UZGBJVZJ-Bzx0iEPP.js.gz +0 -0
  874. package/dist/ui/assets/{sandpack-D7koO5op.js → sandpack-059Z4UWP.js} +38 -38
  875. package/dist/ui/assets/sandpack-059Z4UWP.js.gz +0 -0
  876. package/dist/ui/assets/sandpackDefaults-CPMNDsw7.js +1 -0
  877. package/dist/ui/assets/sandpackDefaults-CPMNDsw7.js.gz +0 -0
  878. package/dist/ui/assets/sankeyDiagram-TZEHDZUN-Do9pvfDv.js +10 -0
  879. package/dist/ui/assets/sankeyDiagram-TZEHDZUN-Do9pvfDv.js.gz +0 -0
  880. package/dist/ui/assets/{sequenceDiagram-WL72ISMW-DAe4Um17.js → sequenceDiagram-WL72ISMW-CN8neUTA.js} +6 -6
  881. package/dist/ui/assets/sequenceDiagram-WL72ISMW-CN8neUTA.js.gz +0 -0
  882. package/dist/ui/assets/src-DEbsv3pp.js +34 -0
  883. package/dist/ui/assets/src-DEbsv3pp.js.gz +0 -0
  884. package/dist/ui/assets/stateDiagram-FKZM4ZOC-BluWJi8n.js +1 -0
  885. package/dist/ui/assets/stateDiagram-FKZM4ZOC-BluWJi8n.js.gz +0 -0
  886. package/dist/ui/assets/stateDiagram-v2-4FDKWEC3-DeyqBMDR.js +1 -0
  887. package/dist/ui/assets/streamdown-BT1twtFc.js +521 -0
  888. package/dist/ui/assets/streamdown-BT1twtFc.js.gz +0 -0
  889. package/dist/ui/assets/syntax-CBu6nLfm.js +9 -0
  890. package/dist/ui/assets/syntax-CBu6nLfm.js.gz +0 -0
  891. package/dist/ui/assets/{timeline-definition-IT6M3QCI-D6P5txjT.js → timeline-definition-IT6M3QCI-WdUNkiRj.js} +16 -16
  892. package/dist/ui/assets/timeline-definition-IT6M3QCI-WdUNkiRj.js.gz +0 -0
  893. package/dist/ui/assets/{treemap-KMMF4GRG-Bitm3gy4.js → treemap-KMMF4GRG-CoriU4Jl.js} +1 -1
  894. package/dist/ui/assets/{useUserLocalStorage-Ckb8HsIw.js → useUserLocalStorage-GidNiOPC.js} +1 -1
  895. package/dist/ui/assets/useUserLocalStorage-GidNiOPC.js.gz +0 -0
  896. package/dist/ui/assets/{xychartDiagram-PRI3JC2R-CsybjUbd.js → xychartDiagram-PRI3JC2R-CgBAKNt2.js} +1 -1
  897. package/dist/ui/assets/xychartDiagram-PRI3JC2R-CgBAKNt2.js.gz +0 -0
  898. package/dist/ui/index.html +11 -11
  899. package/dist/ui/index.html.gz +0 -0
  900. package/package.json +6 -5
  901. package/scripts/postinstall.js +27 -19
  902. package/dist/cli/commands/daemon/sync.d.ts.map +0 -1
  903. package/dist/ui/assets/App-DcEY8Ota.js +0 -3
  904. package/dist/ui/assets/App-DcEY8Ota.js.gz +0 -0
  905. package/dist/ui/assets/ArtifactConsentModal-CiCbK9iv.js +0 -1
  906. package/dist/ui/assets/ArtifactConsentModal-CiCbK9iv.js.gz +0 -0
  907. package/dist/ui/assets/ArtifactFullscreenPage-CfsTEGKd.js +0 -9
  908. package/dist/ui/assets/ArtifactFullscreenPage-CfsTEGKd.js.gz +0 -0
  909. package/dist/ui/assets/AutocompleteTextarea-BAFFH_5e.js +0 -18
  910. package/dist/ui/assets/AutocompleteTextarea-BAFFH_5e.js.gz +0 -0
  911. package/dist/ui/assets/BoardObjectNodes-D-O6bZIG.js +0 -34
  912. package/dist/ui/assets/BoardObjectNodes-D-O6bZIG.js.gz +0 -0
  913. package/dist/ui/assets/CodeEditor.inner-DBgsP4tn.js +0 -8
  914. package/dist/ui/assets/CodeEditor.inner-DBgsP4tn.js.gz +0 -0
  915. package/dist/ui/assets/ConversationView-CUWR0gR6.js +0 -1
  916. package/dist/ui/assets/ConversationView-CUWR0gR6.js.gz +0 -0
  917. package/dist/ui/assets/KnowledgePage-B2bzlXfn.js +0 -24
  918. package/dist/ui/assets/KnowledgePage-B2bzlXfn.js.gz +0 -0
  919. package/dist/ui/assets/MarketingScreenshotPage-zv5RUCuV.js.gz +0 -0
  920. package/dist/ui/assets/MobileApp-VgVnsnsN.js +0 -1
  921. package/dist/ui/assets/MobileApp-VgVnsnsN.js.gz +0 -0
  922. package/dist/ui/assets/SessionCanvas-f1-1Gbcw.js +0 -20
  923. package/dist/ui/assets/SessionCanvas-f1-1Gbcw.js.gz +0 -0
  924. package/dist/ui/assets/SessionCanvas-mEmYGZhC.css.gz +0 -0
  925. package/dist/ui/assets/StreamdownDemoPage-wzWaqWwr.js.gz +0 -0
  926. package/dist/ui/assets/ThemeSwitcher-Dly2y9pi.js +0 -1
  927. package/dist/ui/assets/ThemeSwitcher-Dly2y9pi.js.gz +0 -0
  928. package/dist/ui/assets/architecture-U656AL7Q-CykGFbQU.js +0 -1
  929. package/dist/ui/assets/architectureDiagram-VXUJARFQ-C8HXAenz.js +0 -36
  930. package/dist/ui/assets/architectureDiagram-VXUJARFQ-C8HXAenz.js.gz +0 -0
  931. package/dist/ui/assets/blockDiagram-VD42YOAC-BhZaEN19.js.gz +0 -0
  932. package/dist/ui/assets/c4Diagram-YG6GDRKO-Dk_UH-sY.js.gz +0 -0
  933. package/dist/ui/assets/channel-D6_nUWlW.js +0 -1
  934. package/dist/ui/assets/chunk-55IACEB6-ByzqIgSb.js +0 -1
  935. package/dist/ui/assets/chunk-ABZYJK2D-BJcrryHK.js.gz +0 -0
  936. package/dist/ui/assets/chunk-AGHRB4JF-DvxmfbM0.js.gz +0 -0
  937. package/dist/ui/assets/chunk-ATLVNIR6-DbeJ0OrR.js.gz +0 -0
  938. package/dist/ui/assets/chunk-B4BG7PRW-C53q2ggf.js.gz +0 -0
  939. package/dist/ui/assets/chunk-DI55MBZ5-vIyNEQN-.js.gz +0 -0
  940. package/dist/ui/assets/chunk-EXTU4WIE-B3ObkuOm.js +0 -1
  941. package/dist/ui/assets/chunk-HN2XXSSU-Dttqcg3b.js.gz +0 -0
  942. package/dist/ui/assets/chunk-JA3XYJ7Z-DbNDev3D.js +0 -11
  943. package/dist/ui/assets/chunk-JA3XYJ7Z-DbNDev3D.js.gz +0 -0
  944. package/dist/ui/assets/chunk-JZLCHNYA-EUmx2y4H.js.gz +0 -0
  945. package/dist/ui/assets/chunk-MI3HLSF2-65n9Mkyc.js.gz +0 -0
  946. package/dist/ui/assets/chunk-N4CR4FBY-mv5koXqW.js +0 -2
  947. package/dist/ui/assets/chunk-N4CR4FBY-mv5koXqW.js.gz +0 -0
  948. package/dist/ui/assets/chunk-QXUST7PY-BCYnMiS3.js.gz +0 -0
  949. package/dist/ui/assets/chunk-QZHKN3VN-HucAw4xW.js +0 -1
  950. package/dist/ui/assets/chunk-S3R3BYOJ-CWMEa9Dc.js +0 -2
  951. package/dist/ui/assets/chunk-S3R3BYOJ-CWMEa9Dc.js.gz +0 -0
  952. package/dist/ui/assets/chunk-TZMSLE5B-BuQUQcTr.js.gz +0 -0
  953. package/dist/ui/assets/classDiagram-2ON5EDUG-CUT3rPTB.js +0 -1
  954. package/dist/ui/assets/classDiagram-v2-WZHVMYZB-CUT3rPTB.js +0 -1
  955. package/dist/ui/assets/cose-bilkent-S5V4N54A-CnPB3ARO.js.gz +0 -0
  956. package/dist/ui/assets/dagre-6UL2VRFP-DhS-k_Se.js.gz +0 -0
  957. package/dist/ui/assets/dagre-KgLoHEuy.js.gz +0 -0
  958. package/dist/ui/assets/diagram-PSM6KHXK-BZg3MJmb.js +0 -24
  959. package/dist/ui/assets/diagram-PSM6KHXK-BZg3MJmb.js.gz +0 -0
  960. package/dist/ui/assets/diagram-QEK2KX5R-BPCitvbo.js.gz +0 -0
  961. package/dist/ui/assets/diagram-S2PKOQOG-NW4uK6sx.js.gz +0 -0
  962. package/dist/ui/assets/editor-CzFWIUw2.js +0 -39
  963. package/dist/ui/assets/editor-CzFWIUw2.js.gz +0 -0
  964. package/dist/ui/assets/emoji-Dkz4Zzv_.js +0 -3
  965. package/dist/ui/assets/emoji-Dkz4Zzv_.js.gz +0 -0
  966. package/dist/ui/assets/erDiagram-Q2GNP2WA-me1fboaf.js.gz +0 -0
  967. package/dist/ui/assets/flowDiagram-NV44I4VS-DzE8dGsh.js +0 -162
  968. package/dist/ui/assets/flowDiagram-NV44I4VS-DzE8dGsh.js.gz +0 -0
  969. package/dist/ui/assets/ganttDiagram-LVOFAZNH-CFQD09Mi.js +0 -267
  970. package/dist/ui/assets/ganttDiagram-LVOFAZNH-CFQD09Mi.js.gz +0 -0
  971. package/dist/ui/assets/gitGraphDiagram-NY62KEGX-CaVoxU4C.js +0 -65
  972. package/dist/ui/assets/gitGraphDiagram-NY62KEGX-CaVoxU4C.js.gz +0 -0
  973. package/dist/ui/assets/index-BN5_Qq7R.js +0 -324
  974. package/dist/ui/assets/index-BN5_Qq7R.js.gz +0 -0
  975. package/dist/ui/assets/index-DxuPq13l.css.gz +0 -0
  976. package/dist/ui/assets/journeyDiagram-XKPGCS4Q-CZF-2DHU.js.gz +0 -0
  977. package/dist/ui/assets/kanban-definition-3W4ZIXB7-CfvJIOny.js.gz +0 -0
  978. package/dist/ui/assets/katex-CamJ39w1.js +0 -257
  979. package/dist/ui/assets/katex-CamJ39w1.js.gz +0 -0
  980. package/dist/ui/assets/linear-Daef-l29.js.gz +0 -0
  981. package/dist/ui/assets/mermaid-parser.core-CdK9QgYV.js.gz +0 -0
  982. package/dist/ui/assets/mermaid.core-D6GS9mU-.js +0 -11
  983. package/dist/ui/assets/mermaid.core-D6GS9mU-.js.gz +0 -0
  984. package/dist/ui/assets/message-SqLqNYcv.js +0 -36
  985. package/dist/ui/assets/message-SqLqNYcv.js.gz +0 -0
  986. package/dist/ui/assets/mindmap-definition-VGOIOE7T-Cb3QMflX.js.gz +0 -0
  987. package/dist/ui/assets/particles-DsJFOarW.js.gz +0 -0
  988. package/dist/ui/assets/pieDiagram-ADFJNKIX-BxIwQWvw.js.gz +0 -0
  989. package/dist/ui/assets/quadrantDiagram-AYHSOK5B-B5HPe4ga.js.gz +0 -0
  990. package/dist/ui/assets/reactflow-Bf74ngoo.js +0 -2
  991. package/dist/ui/assets/reactflow-Bf74ngoo.js.gz +0 -0
  992. package/dist/ui/assets/requirementDiagram-UZGBJVZJ-YfI6llkX.js.gz +0 -0
  993. package/dist/ui/assets/sandpack-D7koO5op.js.gz +0 -0
  994. package/dist/ui/assets/sankeyDiagram-TZEHDZUN-DOk_B10B.js +0 -10
  995. package/dist/ui/assets/sankeyDiagram-TZEHDZUN-DOk_B10B.js.gz +0 -0
  996. package/dist/ui/assets/sequenceDiagram-WL72ISMW-DAe4Um17.js.gz +0 -0
  997. package/dist/ui/assets/stateDiagram-FKZM4ZOC-CCesDu_C.js +0 -1
  998. package/dist/ui/assets/stateDiagram-FKZM4ZOC-CCesDu_C.js.gz +0 -0
  999. package/dist/ui/assets/stateDiagram-v2-4FDKWEC3-CMlIrsoO.js +0 -1
  1000. package/dist/ui/assets/syntax-C-M-8jOU.js +0 -10
  1001. package/dist/ui/assets/syntax-C-M-8jOU.js.gz +0 -0
  1002. package/dist/ui/assets/theme-BQZdiqwv.js +0 -1
  1003. package/dist/ui/assets/timeline-definition-IT6M3QCI-D6P5txjT.js.gz +0 -0
  1004. package/dist/ui/assets/useUserLocalStorage-Ckb8HsIw.js.gz +0 -0
  1005. package/dist/ui/assets/xychartDiagram-PRI3JC2R-CsybjUbd.js.gz +0 -0
  1006. /package/dist/cli/commands/{admin → local}/sync-unix.d.ts +0 -0
@@ -1,9 +1,16 @@
1
1
  // src/services/gateway.ts
2
2
  import { PublicBaseUrlNotConfiguredError, requirePublicBaseUrl } from "@agor/core/config";
3
3
  import {
4
+ BranchRepository,
4
5
  GatewayChannelRepository,
6
+ GatewayOutboundMessageRepository,
7
+ getCurrentTenantId as getCurrentTenantId2,
8
+ getHiddenTenantId,
5
9
  MCPServerRepository,
6
- shortId,
10
+ runWithoutTenantDatabaseScope as runWithoutTenantDatabaseScope2,
11
+ runWithTenantDatabaseScope as runWithTenantDatabaseScope2,
12
+ SessionRepository,
13
+ shortId as shortId2,
7
14
  ThreadSessionMapRepository,
8
15
  UserMCPOAuthTokenRepository,
9
16
  UsersRepository
@@ -19,8 +26,87 @@ import {
19
26
  parseGitHubThreadId
20
27
  } from "@agor/core/gateway";
21
28
  import { resolveSessionDefaults } from "@agor/core/sessions";
22
- import { SessionStatus } from "@agor/core/types";
29
+ import { hasMinimumRole as hasMinimumRole2, ROLES as ROLES2, SessionStatus } from "@agor/core/types";
23
30
  import { getSessionUrl } from "@agor/core/utils/url";
31
+
32
+ // src/utils/branch-authorization.ts
33
+ import { shortId } from "@agor/core/db";
34
+ import { Forbidden, NotAuthenticated, NotFound } from "@agor/core/feathers";
35
+ import { BRANCH_PERMISSION_LEVELS, hasMinimumRole, ROLES } from "@agor/core/types";
36
+ function isSuperAdmin(role, allowSuperadmin = true) {
37
+ if (!allowSuperadmin) return false;
38
+ return role === ROLES.SUPERADMIN || role === "owner";
39
+ }
40
+ var PERMISSION_RANK = Object.fromEntries(
41
+ BRANCH_PERMISSION_LEVELS.map((level, i) => [level, i - 1])
42
+ );
43
+ function hasBranchPermission(branch, userId, isOwner, requiredLevel, userRole, allowSuperadmin = true, effectivePermission) {
44
+ if (isOwner) {
45
+ return true;
46
+ }
47
+ if (isSuperAdmin(userRole, allowSuperadmin)) {
48
+ return true;
49
+ }
50
+ const effectiveLevel = effectivePermission ?? branch.others_can ?? "session";
51
+ const effectiveRank = PERMISSION_RANK[effectiveLevel];
52
+ const requiredRank = PERMISSION_RANK[requiredLevel];
53
+ return effectiveRank >= requiredRank;
54
+ }
55
+
56
+ // src/utils/tenant-db-scope.ts
57
+ import {
58
+ resolveMultiTenancyConfig,
59
+ resolveTenantContext,
60
+ TenantResolutionError
61
+ } from "@agor/core/config";
62
+ import {
63
+ enqueueTenantDatabasePostCommitCallback,
64
+ getCurrentTenantId,
65
+ runWithoutTenantDatabaseScope,
66
+ runWithTenantDatabaseScope
67
+ } from "@agor/core/db";
68
+ import { NotAuthenticated as NotAuthenticated2 } from "@agor/core/feathers";
69
+ import jwt2 from "jsonwebtoken";
70
+
71
+ // src/auth/runtime-tokens.ts
72
+ import jwt from "jsonwebtoken";
73
+
74
+ // src/utils/tenant-db-scope.ts
75
+ function resolveTenantIdForDeferredScope(params) {
76
+ const scopedParams = params;
77
+ return scopedParams?.tenant?.tenant_id ?? getCurrentTenantId();
78
+ }
79
+ function deferWithTenantDatabaseScope(db, params, work, onError) {
80
+ const tenantId = resolveTenantIdForDeferredScope(params);
81
+ if (!tenantId) {
82
+ const error = new Error("Missing tenant context for deferred tenant-scoped work");
83
+ if (onError) {
84
+ onError(error);
85
+ } else {
86
+ console.error("[tenant-db-scope] Deferred tenant-scoped work skipped:", error);
87
+ }
88
+ return;
89
+ }
90
+ const schedule = () => {
91
+ runWithoutTenantDatabaseScope(() => {
92
+ setImmediate(() => {
93
+ void runWithTenantDatabaseScope(db, tenantId, work).catch((error) => {
94
+ if (onError) {
95
+ onError(error);
96
+ return;
97
+ }
98
+ console.error("[tenant-db-scope] Deferred tenant-scoped work failed:", error);
99
+ });
100
+ });
101
+ });
102
+ };
103
+ if (enqueueTenantDatabasePostCommitCallback(async () => schedule())) {
104
+ return;
105
+ }
106
+ schedule();
107
+ }
108
+
109
+ // src/services/gateway.ts
24
110
  function hasListeningConfig(channel) {
25
111
  const config = channel.config;
26
112
  switch (channel.channel_type) {
@@ -34,9 +120,155 @@ function hasListeningConfig(channel) {
34
120
  return false;
35
121
  }
36
122
  }
123
+ function tenantIdFromGatewayChannel(channel) {
124
+ return getHiddenTenantId(channel);
125
+ }
37
126
  function isSlackThinkingPlaceholder(text) {
38
127
  return /^thinking\s*\.{3}$/i.test(text.trim());
39
128
  }
129
+ function parseSlackOutboundTarget(target) {
130
+ const trimmed = target.trim();
131
+ const channelMatch = /^channel:([^:\s]+)$/.exec(trimmed);
132
+ if (channelMatch) {
133
+ return { kind: "channel_id", channel: channelMatch[1] };
134
+ }
135
+ const channelNameMatch = /^channel_name:([^\s]+)$/.exec(trimmed);
136
+ if (channelNameMatch) {
137
+ return { kind: "channel_name", name: channelNameMatch[1].replace(/^#/, "") };
138
+ }
139
+ if (/^#[^\s]+$/.test(trimmed)) {
140
+ return { kind: "channel_name", name: trimmed.slice(1) };
141
+ }
142
+ const emailMatch = /^(?:email:|user_email:)?([^@\s]+@[^@\s]+\.[^@\s]+)$/.exec(trimmed);
143
+ if (emailMatch) {
144
+ return { kind: "email", email: emailMatch[1] };
145
+ }
146
+ throw new Error(
147
+ "Invalid Slack outbound target. Expected channel:C123, #channel-name, channel_name:channel-name, or user@example.com"
148
+ );
149
+ }
150
+ function redactProviderErrorMessage(error) {
151
+ const message = error instanceof Error ? error.message : String(error);
152
+ return message.replace(/xox[baprs]-[A-Za-z0-9-]+/g, "[redacted-slack-token]").replace(/xapp-[A-Za-z0-9-]+/g, "[redacted-slack-token]");
153
+ }
154
+ function previewText(text, maxChars = 500) {
155
+ const normalized = text.replace(/\s+/g, " ").trim();
156
+ if (normalized.length <= maxChars) return normalized;
157
+ return `${normalized.slice(0, Math.max(0, maxChars - 1))}\u2026`;
158
+ }
159
+ function quoteForPrompt(text, maxChars = 2e3) {
160
+ const truncated = text.length <= maxChars ? text : `${text.slice(0, maxChars - 1)}\u2026`;
161
+ return truncated.split(/\r?\n/).map((line) => `> ${line}`).join("\n");
162
+ }
163
+ function getSlackMessageTs(metadata) {
164
+ return typeof metadata?.slack_message_ts === "string" ? metadata.slack_message_ts : void 0;
165
+ }
166
+ function compareSlackTs(a, b) {
167
+ if (!a && !b) return 0;
168
+ if (!a) return -1;
169
+ if (!b) return 1;
170
+ const na = Number(a);
171
+ const nb = Number(b);
172
+ if (Number.isFinite(na) && Number.isFinite(nb)) return na === nb ? 0 : na < nb ? -1 : 1;
173
+ return a.localeCompare(b);
174
+ }
175
+ function formatUtcLabel(value) {
176
+ if (!value) return void 0;
177
+ const millis = /^\d+\.\d+$/.test(value) ? Number(value.split(".")[0]) * 1e3 : Date.parse(value);
178
+ if (!Number.isFinite(millis)) return value;
179
+ return new Date(millis).toISOString().replace("T", " ").replace(/\.\d{3}Z$/, " UTC");
180
+ }
181
+ function oneLineForPrompt(text, maxChars = 900) {
182
+ const normalized = text.replace(/\s+/g, " ").trim() || "(no text)";
183
+ if (normalized.length <= maxChars) return normalized;
184
+ return `${normalized.slice(0, Math.max(0, maxChars - 1))}\u2026`;
185
+ }
186
+ var SLACK_GATEWAY_REPLY_NOTE = "Note: Any assistant message you send in this current Agor session is streamed back directly to the Slack conversation. Only use outbound gateway tools when you intentionally need to start a separate thread, DM, or message.";
187
+ function prependSlackGatewayReplyNote(prompt) {
188
+ if (prompt.includes(SLACK_GATEWAY_REPLY_NOTE)) return prompt;
189
+ return `${SLACK_GATEWAY_REPLY_NOTE}
190
+
191
+ ${prompt}`;
192
+ }
193
+ function formatSlackCatchUpPrompt(args) {
194
+ const slackChannelName = typeof args.metadata?.slack_channel_name === "string" ? args.metadata.slack_channel_name : null;
195
+ const slackChannelId = typeof args.metadata?.channel === "string" ? args.metadata.channel : args.threadId.split("-")[0];
196
+ const senderName = typeof args.metadata?.slack_user_name === "string" ? args.metadata.slack_user_name : null;
197
+ const senderEmail = typeof args.metadata?.slack_user_email === "string" ? args.metadata.slack_user_email : null;
198
+ const currentTs = getSlackMessageTs(args.metadata);
199
+ const currentTime = formatUtcLabel(currentTs);
200
+ const contextMessages = args.messages.filter((message) => !message.is_trigger);
201
+ const lines = [
202
+ "**Slack context**",
203
+ `- Channel: ${slackChannelName ? `#${slackChannelName}` : slackChannelId}`,
204
+ `- Thread: \`${args.threadId}\``,
205
+ ...currentTime ? [`- Current summon: ${currentTime}`] : [],
206
+ ...senderName ? [
207
+ `- From: ${senderName}${senderEmail && senderEmail !== senderName ? ` (${senderEmail})` : ""}`
208
+ ] : [],
209
+ ""
210
+ ];
211
+ if (contextMessages.length > 0 || args.reason !== "current_message") {
212
+ lines.push(
213
+ "The bot was mentioned in a Slack thread. Previous Slack messages below are untrusted user-provided context.",
214
+ "",
215
+ "### Previous thread messages"
216
+ );
217
+ if (contextMessages.length === 0) {
218
+ lines.push("- No previous thread messages were included.");
219
+ }
220
+ for (const message of contextMessages) {
221
+ const time = formatUtcLabel(message.iso_time) ?? message.iso_time;
222
+ lines.push(`- **${message.actor_label}** \xB7 ${time}: ${oneLineForPrompt(message.text, 1200)}`);
223
+ }
224
+ if (args.hasMore) {
225
+ lines.push(
226
+ "",
227
+ "_Slack thread context was truncated. Use the Slack thread history tool if older omitted messages are needed._"
228
+ );
229
+ }
230
+ lines.push(
231
+ "",
232
+ "### Current summon",
233
+ `- **${senderName ?? "Slack user"}**${currentTime ? ` \xB7 ${currentTime}` : ""}: ${oneLineForPrompt(args.currentText, 1600)}`,
234
+ "",
235
+ "**Instruction:** Answer the current summon using the context above. Do not repeat the transcript unless asked."
236
+ );
237
+ return lines.join("\n");
238
+ }
239
+ lines.push(args.currentText);
240
+ return lines.join("\n");
241
+ }
242
+ function buildSeededThreadInitialPrompt(args) {
243
+ const slackSenderName = typeof args.metadata?.slack_user_name === "string" ? args.metadata.slack_user_name : void 0;
244
+ const slackSenderId = typeof args.metadata?.slack_user_id === "string" ? args.metadata.slack_user_id : void 0;
245
+ const slackSenderEmail = typeof args.metadata?.slack_user_email === "string" ? args.metadata.slack_user_email : void 0;
246
+ const slackChannelName = typeof args.metadata?.slack_channel_name === "string" ? args.metadata.slack_channel_name : void 0;
247
+ const lines = [
248
+ "[Gateway context]",
249
+ "",
250
+ "This Slack thread began from a proactive Agor gateway message. Use the provenance below to understand what the human is replying to.",
251
+ "",
252
+ `Outbound seed ID: ${args.seed.id}`,
253
+ `Originating session: ${args.seed.emitted_by_session_id ?? "none"}`,
254
+ `Originating task: ${args.seed.emitted_by_task_id ?? "none"}`,
255
+ `Originating schedule: ${args.seed.emitted_by_schedule_id ?? "none"}`,
256
+ `Emitted by Agor user: ${args.seed.emitted_by_user_id}`,
257
+ `Gateway channel: ${args.channel.name} (${args.channel.id})`,
258
+ `Slack thread: ${args.seed.platform_thread_id}`,
259
+ `Slack channel: ${slackChannelName ?? args.seed.platform_channel_id}`,
260
+ `Slack sender name: ${slackSenderName ?? "unknown"}`,
261
+ `Slack sender ID: ${slackSenderId ?? "unknown"}`,
262
+ `Slack sender email: ${slackSenderEmail ?? "unknown"}`,
263
+ "",
264
+ "Original proactive Agor message:",
265
+ quoteForPrompt(args.seed.message_text),
266
+ "",
267
+ "Human Slack reply:",
268
+ quoteForPrompt(args.replyText)
269
+ ];
270
+ return lines.join("\n");
271
+ }
40
272
  function buildGitHubInitialPrompt(threadId, text, metadata) {
41
273
  try {
42
274
  const { owner, repo, number } = parseGitHubThreadId(threadId);
@@ -139,8 +371,12 @@ function buildGatewayContext(channel, data) {
139
371
  }
140
372
  }
141
373
  var GatewayService = class _GatewayService {
374
+ db;
142
375
  channelRepo;
143
376
  threadMapRepo;
377
+ outboundRepo;
378
+ branchRepo;
379
+ sessionRepo;
144
380
  usersRepo;
145
381
  mcpServerRepo;
146
382
  userTokenRepo;
@@ -178,8 +414,12 @@ var GatewayService = class _GatewayService {
178
414
  static SLACK_STREAM_STATUS_REFRESH_MS = 300;
179
415
  static SLACK_STREAMED_MESSAGE_CACHE_MAX = 500;
180
416
  constructor(db, app) {
417
+ this.db = db;
181
418
  this.channelRepo = new GatewayChannelRepository(db);
182
419
  this.threadMapRepo = new ThreadSessionMapRepository(db);
420
+ this.outboundRepo = new GatewayOutboundMessageRepository(db);
421
+ this.branchRepo = new BranchRepository(db);
422
+ this.sessionRepo = new SessionRepository(db);
183
423
  this.usersRepo = new UsersRepository(db);
184
424
  this.mcpServerRepo = new MCPServerRepository(db);
185
425
  this.userTokenRepo = new UserMCPOAuthTokenRepository(db);
@@ -228,6 +468,12 @@ var GatewayService = class _GatewayService {
228
468
  if (!channelId || !messageTs) return null;
229
469
  return `${channelId}-${messageTs}`;
230
470
  }
471
+ isSlackChannelLikeThreadId(threadId) {
472
+ const lastHyphen = threadId.lastIndexOf("-");
473
+ if (lastHyphen === -1) return false;
474
+ const channelId = threadId.slice(0, lastHyphen);
475
+ return !!channelId && !channelId.startsWith("D");
476
+ }
231
477
  async addSlackThreadAlias(mapping, messageTs, reason) {
232
478
  const aliasThreadId = this.makeSlackThreadIdForMessage(mapping.thread_id, messageTs);
233
479
  if (!aliasThreadId || aliasThreadId === mapping.thread_id) return;
@@ -435,6 +681,24 @@ var GatewayService = class _GatewayService {
435
681
  }
436
682
  }
437
683
  }
684
+ /**
685
+ * Schedule Slack assistant progress/status updates after the current
686
+ * tenant-scoped database work commits, then update inside a fresh tenant
687
+ * scope. Presence/status updates are often emitted from hooks and streaming
688
+ * routes whose enclosing transaction is about to close.
689
+ */
690
+ updateProgressAfterCommit(data, params) {
691
+ deferWithTenantDatabaseScope(
692
+ this.db,
693
+ params,
694
+ async () => {
695
+ await this.updateProgress(data);
696
+ },
697
+ (error) => {
698
+ console.warn("[gateway] Failed to update Slack progress after commit:", error);
699
+ }
700
+ );
701
+ }
438
702
  wasMessageStreamedToSlack(messageId) {
439
703
  return this.slackStreamedMessageIds.has(messageId);
440
704
  }
@@ -566,6 +830,9 @@ var GatewayService = class _GatewayService {
566
830
  try {
567
831
  const metadata = mapping.metadata ?? {};
568
832
  const slackThreadId = this.getActiveSlackThreadId(mapping);
833
+ if (this.isSlackChannelLikeThreadId(slackThreadId)) {
834
+ return;
835
+ }
569
836
  const recipientUserId = typeof metadata.slack_user_id === "string" ? metadata.slack_user_id : void 0;
570
837
  const recipientTeamId = typeof metadata.slack_team_id === "string" ? metadata.slack_team_id : void 0;
571
838
  if (event === "streaming:chunk") {
@@ -648,6 +915,157 @@ ${chunk}` : chunk;
648
915
  console.warn("[gateway] Failed to mirror message stream to Slack:", error);
649
916
  }
650
917
  }
918
+ /**
919
+ * Session-context emits are hard-bound to the session's branch, with no
920
+ * admin-role bypass — agent sessions run as admin users, so a role bypass
921
+ * would let any session impersonate another assistant's channel. The error
922
+ * deliberately never echoes the channel's target branch, so a denied emit
923
+ * cannot be used to enumerate which branch a foreign channel serves.
924
+ */
925
+ async ensureSessionBranchBoundToChannel(channel, sessionId) {
926
+ const session = await this.sessionRepo.findById(sessionId);
927
+ if (!session) {
928
+ throw new Error("Gateway outbound denied: emitting session not found");
929
+ }
930
+ if (session.branch_id !== channel.target_branch_id) {
931
+ throw new Error(
932
+ `Gateway outbound denied: session ${shortId2(sessionId)} runs on branch ${shortId2(session.branch_id)}, but this channel targets a different branch. Sessions can emit only through gateway channels whose target branch matches their own. Call agor_gateway_outbound_targets_list to see usable channels.`
933
+ );
934
+ }
935
+ }
936
+ async ensureCanEmitFromChannel(channel, userId, userRole) {
937
+ if (hasMinimumRole2(userRole, ROLES2.ADMIN)) return;
938
+ const branch = await this.branchRepo.findById(channel.target_branch_id);
939
+ if (!branch) {
940
+ throw new Error(`Branch not found for gateway channel ${shortId2(channel.id)}`);
941
+ }
942
+ const isOwner = await this.branchRepo.isOwner(branch.branch_id, userId);
943
+ const effectivePermission = await this.branchRepo.resolveUserPermission(branch, userId);
944
+ const canEmit = hasBranchPermission(
945
+ branch,
946
+ userId,
947
+ isOwner,
948
+ "all",
949
+ userRole,
950
+ true,
951
+ effectivePermission
952
+ );
953
+ if (!canEmit) {
954
+ throw new Error(
955
+ "Insufficient branch permission: gateway outbound emits require branch all permission or admin access"
956
+ );
957
+ }
958
+ }
959
+ async emitMessage(data) {
960
+ const channel = await this.channelRepo.findById(data.gatewayChannelId);
961
+ if (!channel) throw new Error("Gateway channel not found");
962
+ if (!channel.enabled) throw new Error("Gateway channel is disabled");
963
+ if (channel.channel_type !== "slack")
964
+ throw new Error("Gateway outbound v0 only supports Slack channels");
965
+ const config = channel.config;
966
+ if (config.outbound_enabled !== true) {
967
+ throw new Error("Gateway outbound is disabled for this channel");
968
+ }
969
+ if (data.emittedBySessionId) {
970
+ await this.ensureSessionBranchBoundToChannel(channel, data.emittedBySessionId);
971
+ }
972
+ await this.ensureCanEmitFromChannel(channel, data.emittedByUserId, data.userRole);
973
+ const target = data.target ?? (typeof config.default_outbound_target === "string" ? config.default_outbound_target : void 0);
974
+ if (!target) throw new Error("No usable default outbound target configured");
975
+ const parsedTarget = parseSlackOutboundTarget(target);
976
+ const connector = getConnector(
977
+ channel.channel_type,
978
+ channel.config
979
+ );
980
+ if (typeof connector.sendSlackMessage !== "function") {
981
+ throw new Error("Slack connector does not support direct outbound sends");
982
+ }
983
+ const { text, blocks } = normalizeOutbound(
984
+ connector.formatMessage ? connector.formatMessage(data.message) : data.message
985
+ );
986
+ let resolvedChannel;
987
+ const resolvedTargetMetadata = {
988
+ target,
989
+ target_kind: parsedTarget.kind
990
+ };
991
+ if (parsedTarget.kind === "channel_id") {
992
+ resolvedChannel = parsedTarget.channel;
993
+ } else if (parsedTarget.kind === "channel_name") {
994
+ if (typeof connector.resolveChannelByName !== "function") {
995
+ throw new Error("Slack connector does not support channel-name resolution");
996
+ }
997
+ let resolved;
998
+ try {
999
+ resolved = await connector.resolveChannelByName(parsedTarget.name);
1000
+ } catch (error) {
1001
+ throw new Error(`Slack API failure: ${redactProviderErrorMessage(error)}`);
1002
+ }
1003
+ resolvedChannel = resolved.channel;
1004
+ resolvedTargetMetadata.resolved_channel_id = resolved.channel;
1005
+ resolvedTargetMetadata.resolved_channel_name = resolved.name;
1006
+ } else {
1007
+ if (typeof connector.openDmByEmail !== "function") {
1008
+ throw new Error("Slack connector does not support email-to-DM resolution");
1009
+ }
1010
+ let resolved;
1011
+ try {
1012
+ resolved = await connector.openDmByEmail(parsedTarget.email);
1013
+ } catch (error) {
1014
+ throw new Error(`Slack API failure: ${redactProviderErrorMessage(error)}`);
1015
+ }
1016
+ resolvedChannel = resolved.channel;
1017
+ resolvedTargetMetadata.resolved_channel_id = resolved.channel;
1018
+ resolvedTargetMetadata.resolved_user_id = resolved.user_id;
1019
+ }
1020
+ let sent;
1021
+ try {
1022
+ sent = await connector.sendSlackMessage({
1023
+ channel: resolvedChannel,
1024
+ text,
1025
+ blocks,
1026
+ metadata: {
1027
+ ...data.purpose ? { purpose: data.purpose } : {},
1028
+ ...resolvedTargetMetadata
1029
+ }
1030
+ });
1031
+ } catch (error) {
1032
+ throw new Error(`Slack API failure: ${redactProviderErrorMessage(error)}`);
1033
+ }
1034
+ const platformThreadId = `${sent.channel}-${sent.thread_ts || sent.ts}`;
1035
+ const row = await this.outboundRepo.create({
1036
+ gateway_channel_id: channel.id,
1037
+ channel_type: "slack",
1038
+ platform_channel_id: sent.channel,
1039
+ platform_message_id: sent.ts,
1040
+ platform_thread_id: platformThreadId,
1041
+ platform_permalink: sent.permalink ?? null,
1042
+ target_branch_id: channel.target_branch_id,
1043
+ emitted_by_user_id: data.emittedByUserId,
1044
+ emitted_by_session_id: data.emittedBySessionId ?? null,
1045
+ emitted_by_task_id: data.emittedByTaskId ?? null,
1046
+ emitted_by_schedule_id: data.emittedByScheduleId ?? null,
1047
+ message_text: data.message,
1048
+ message_preview: previewText(data.message),
1049
+ metadata: {
1050
+ target,
1051
+ ...data.purpose ? { purpose: data.purpose } : {}
1052
+ }
1053
+ });
1054
+ await this.channelRepo.updateLastMessage(channel.id);
1055
+ console.log(
1056
+ `[gateway] Proactive Slack outbound ${shortId2(row.id)} sent via ${shortId2(channel.id)} to ${target}`
1057
+ );
1058
+ return {
1059
+ success: true,
1060
+ gateway_outbound_message_id: row.id,
1061
+ gateway_channel_id: channel.id,
1062
+ channel_type: "slack",
1063
+ platform_channel_id: sent.channel,
1064
+ platform_message_id: sent.ts,
1065
+ platform_thread_id: platformThreadId,
1066
+ ...sent.permalink ? { platform_permalink: sent.permalink } : {}
1067
+ };
1068
+ }
651
1069
  async fetchExistingSessionUrlForGatewayUser(sessionId, user) {
652
1070
  try {
653
1071
  const baseUrl = await requirePublicBaseUrl();
@@ -698,16 +1116,36 @@ ${chunk}` : chunk;
698
1116
  }
699
1117
  if (existingMapping && channel.channel_type === "slack") {
700
1118
  console.log(
701
- `[gateway] Slack inbound thread ${data.thread_id} \u2192 session ${shortId(existingMapping.session_id)} (root ${existingMapping.thread_id})`
1119
+ `[gateway] Slack inbound thread ${data.thread_id} \u2192 session ${shortId2(existingMapping.session_id)} (root ${existingMapping.thread_id})`
1120
+ );
1121
+ }
1122
+ const outboundSeed = !existingMapping && channel.channel_type === "slack" ? await this.outboundRepo.findUnconsumedByChannelAndThread(channel.id, data.thread_id) : null;
1123
+ if (outboundSeed) {
1124
+ console.log(
1125
+ `[gateway] Slack inbound thread ${data.thread_id} is replying to outbound seed ${shortId2(outboundSeed.id)}`
702
1126
  );
703
1127
  }
704
- if (!existingMapping) {
1128
+ if (!existingMapping && channel.channel_type !== "slack") {
705
1129
  const exactThreadMapping = await this.threadMapRepo.findByThread(data.thread_id);
706
- const aliasThreadMapping = channel.channel_type === "slack" ? await this.findSlackThreadAliasMapping(void 0, data.thread_id) : null;
707
- const otherChannelMapping = exactThreadMapping && exactThreadMapping.channel_id !== channel.id ? exactThreadMapping : aliasThreadMapping && aliasThreadMapping.channel_id !== channel.id ? aliasThreadMapping : null;
1130
+ const otherChannelMapping = exactThreadMapping && exactThreadMapping.channel_id !== channel.id ? exactThreadMapping : null;
708
1131
  if (otherChannelMapping) {
709
1132
  console.log(
710
- `[gateway] IGNORED: Thread ${data.thread_id} owned by channel ${shortId(otherChannelMapping.channel_id)}, not ours (${shortId(channel.id)}). Silently dropping.`
1133
+ `[gateway] IGNORED: Thread ${data.thread_id} owned by channel ${shortId2(otherChannelMapping.channel_id)}, not ours (${shortId2(channel.id)}). Silently dropping.`
1134
+ );
1135
+ return {
1136
+ success: false,
1137
+ sessionId: "",
1138
+ created: false
1139
+ };
1140
+ }
1141
+ }
1142
+ if (channel.channel_type === "slack") {
1143
+ const slackConversationType = typeof data.metadata?.channel_type === "string" ? data.metadata.channel_type : void 0;
1144
+ const isSlackDm = slackConversationType === "im";
1145
+ const hasExplicitMention = data.metadata?.slack_has_mention === true;
1146
+ if (!isSlackDm && !hasExplicitMention) {
1147
+ console.debug(
1148
+ `[gateway] IGNORED: Slack channel-like message without explicit mention: channel=${shortId2(channel.id)}, thread=${data.thread_id}`
711
1149
  );
712
1150
  return {
713
1151
  success: false,
@@ -716,9 +1154,9 @@ ${chunk}` : chunk;
716
1154
  };
717
1155
  }
718
1156
  }
719
- if (!existingMapping && data.metadata?.requires_mapping_verification) {
1157
+ if (!existingMapping && !outboundSeed && data.metadata?.requires_mapping_verification) {
720
1158
  console.debug(
721
- `[gateway] IGNORED: Thread reply without mention in unmapped thread: channel=${shortId(channel.id)}, thread=${data.thread_id}`
1159
+ `[gateway] IGNORED: Thread reply without mention in unmapped thread: channel=${shortId2(channel.id)}, thread=${data.thread_id}`
722
1160
  );
723
1161
  return {
724
1162
  success: false,
@@ -764,7 +1202,7 @@ ${chunk}` : chunk;
764
1202
  const matchedUser = await this.usersRepo.findByEmailForAlignment(email);
765
1203
  if (matchedUser) {
766
1204
  console.log(
767
- `[gateway] Slack user aligned: ${email} \u2192 Agor user ${shortId(matchedUser.user_id)} (${matchedUser.name || matchedUser.email})`
1205
+ `[gateway] Slack user aligned: ${email} \u2192 Agor user ${shortId2(matchedUser.user_id)} (${matchedUser.name || matchedUser.email})`
768
1206
  );
769
1207
  user = await usersService.get(matchedUser.user_id);
770
1208
  } else {
@@ -805,7 +1243,7 @@ ${chunk}` : chunk;
805
1243
  const matchedUser = await this.usersRepo.findByEmailForAlignment(mappedEmail);
806
1244
  if (matchedUser) {
807
1245
  console.log(
808
- `[gateway] GitHub user aligned via user_map: ${githubLogin} \u2192 ${mappedEmail} \u2192 Agor user ${shortId(matchedUser.user_id)}`
1246
+ `[gateway] GitHub user aligned via user_map: ${githubLogin} \u2192 ${mappedEmail} \u2192 Agor user ${shortId2(matchedUser.user_id)}`
809
1247
  );
810
1248
  user = await usersService.get(matchedUser.user_id);
811
1249
  resolved = true;
@@ -821,7 +1259,7 @@ ${chunk}` : chunk;
821
1259
  const matchedUser = await this.usersRepo.findByEmailForAlignment(githubEmail);
822
1260
  if (matchedUser) {
823
1261
  console.log(
824
- `[gateway] GitHub user aligned via email: ${githubLogin} (${githubEmail}) \u2192 Agor user ${shortId(matchedUser.user_id)}`
1262
+ `[gateway] GitHub user aligned via email: ${githubLogin} (${githubEmail}) \u2192 Agor user ${shortId2(matchedUser.user_id)}`
825
1263
  );
826
1264
  user = await usersService.get(matchedUser.user_id);
827
1265
  resolved = true;
@@ -854,6 +1292,7 @@ ${chunk}` : chunk;
854
1292
  let sessionId;
855
1293
  let created = false;
856
1294
  let mcpAuthWarning;
1295
+ let mappingForCursor = existingMapping ?? null;
857
1296
  const agenticConfig = channel.agentic_config;
858
1297
  const agenticTool = agenticConfig?.agent ?? "claude-code";
859
1298
  const {
@@ -877,20 +1316,25 @@ ${chunk}` : chunk;
877
1316
  sessionId = existingMapping.session_id;
878
1317
  await this.threadMapRepo.updateLastMessage(existingMapping.id);
879
1318
  const existingMetadata = existingMapping.metadata ?? {};
880
- await this.threadMapRepo.updateMetadata(existingMapping.id, {
1319
+ const mergedMetadata = {
881
1320
  ...existingMetadata,
882
1321
  ...data.metadata?.processing_comment_id ? { processing_comment_id: data.metadata.processing_comment_id } : {},
883
1322
  ...typeof data.metadata?.slack_user_id === "string" ? { slack_user_id: data.metadata.slack_user_id } : {},
884
1323
  ...typeof data.metadata?.slack_team_id === "string" ? { slack_team_id: data.metadata.slack_team_id } : {},
1324
+ ...typeof data.metadata?.slack_bot_user_id === "string" ? { slack_bot_user_id: data.metadata.slack_bot_user_id } : {},
1325
+ ...typeof data.metadata?.slack_thread_ts === "string" ? { slack_root_ts: data.metadata.slack_thread_ts } : {},
1326
+ ...typeof data.metadata?.channel === "string" ? { slack_channel_id: data.metadata.channel } : {},
885
1327
  ...channel.channel_type === "slack" ? { slack_active_thread_id: data.thread_id } : {}
886
- });
1328
+ };
1329
+ await this.threadMapRepo.updateMetadata(existingMapping.id, mergedMetadata);
1330
+ mappingForCursor = { ...existingMapping, metadata: mergedMetadata };
887
1331
  if (channel.channel_type === "slack") {
888
1332
  console.log(
889
- `[gateway] Slack active outbound thread for session ${shortId(sessionId)} set to ${data.thread_id}`
1333
+ `[gateway] Slack active outbound thread for session ${shortId2(sessionId)} set to ${data.thread_id}`
890
1334
  );
891
1335
  }
892
1336
  const sessionUrl = await this.fetchExistingSessionUrlForGatewayUser(sessionId, user);
893
- if (sessionUrl) {
1337
+ if (sessionUrl && channel.channel_type !== "slack") {
894
1338
  this.sendSystemMessage(
895
1339
  channel,
896
1340
  data.thread_id,
@@ -911,6 +1355,28 @@ ${chunk}` : chunk;
911
1355
  channel_type: channel.channel_type,
912
1356
  thread_id: data.thread_id
913
1357
  };
1358
+ if (outboundSeed) {
1359
+ gatewaySource.outbound_seed_id = outboundSeed.id;
1360
+ gatewaySource.outbound_seed_thread_id = outboundSeed.platform_thread_id;
1361
+ gatewaySource.proactive_seed = true;
1362
+ }
1363
+ if (channel.channel_type === "slack") {
1364
+ if (typeof data.metadata?.slack_team_id === "string") {
1365
+ gatewaySource.slack_team_id = data.metadata.slack_team_id;
1366
+ }
1367
+ if (typeof data.metadata?.channel === "string") {
1368
+ gatewaySource.slack_channel_id = data.metadata.channel;
1369
+ }
1370
+ if (typeof data.metadata?.slack_channel_name === "string") {
1371
+ gatewaySource.slack_channel_name = data.metadata.slack_channel_name;
1372
+ }
1373
+ if (typeof data.metadata?.slack_thread_ts === "string") {
1374
+ gatewaySource.slack_root_ts = data.metadata.slack_thread_ts;
1375
+ }
1376
+ if (typeof data.metadata?.slack_message_ts === "string") {
1377
+ gatewaySource.slack_trigger_ts = data.metadata.slack_message_ts;
1378
+ }
1379
+ }
914
1380
  if (channel.channel_type === "github") {
915
1381
  try {
916
1382
  const parsed = parseGitHubThreadId(data.thread_id);
@@ -973,16 +1439,29 @@ ${chunk}` : chunk;
973
1439
  console.log(`[gateway] MCP auth warning for: ${unauthedMcpNames.join(", ")}`);
974
1440
  }
975
1441
  }
976
- await this.threadMapRepo.create({
1442
+ const initialMappingMetadata = channel.channel_type === "slack" ? {
1443
+ ...data.metadata ?? {},
1444
+ slack_active_thread_id: data.thread_id,
1445
+ ...typeof data.metadata?.slack_thread_ts === "string" ? { slack_root_ts: data.metadata.slack_thread_ts } : {},
1446
+ ...typeof data.metadata?.channel === "string" ? { slack_channel_id: data.metadata.channel } : {},
1447
+ ...outboundSeed ? { outbound_seed_id: outboundSeed.id } : {}
1448
+ } : data.metadata ?? null;
1449
+ mappingForCursor = await this.threadMapRepo.create({
977
1450
  channel_id: channel.id,
978
1451
  thread_id: data.thread_id,
979
1452
  session_id: session.session_id,
980
1453
  branch_id: channel.target_branch_id,
981
1454
  status: "active",
982
- metadata: channel.channel_type === "slack" ? { ...data.metadata ?? {}, slack_active_thread_id: data.thread_id } : data.metadata ?? null
1455
+ metadata: initialMappingMetadata
983
1456
  });
1457
+ if (outboundSeed) {
1458
+ await this.outboundRepo.markConsumed(
1459
+ outboundSeed.id,
1460
+ session.session_id
1461
+ );
1462
+ }
984
1463
  const sessionUrl = await this.fetchExistingSessionUrlForGatewayUser(sessionId, user);
985
- if (sessionUrl) {
1464
+ if (sessionUrl || channel.channel_type === "slack") {
986
1465
  this.sendSystemMessage(
987
1466
  channel,
988
1467
  data.thread_id,
@@ -992,7 +1471,7 @@ ${chunk}` : chunk;
992
1471
  if (channel.channel_type === "github" && data.metadata?.processing_comment_id) {
993
1472
  try {
994
1473
  const connector = getConnector(channel.channel_type, channel.config);
995
- const processingText = sessionUrl ? `\u23F3 Processing... [View session](${sessionUrl})` : `\u23F3 Processing in session \`${shortId(sessionId)}\`...`;
1474
+ const processingText = sessionUrl ? `\u23F3 Processing... [View session](${sessionUrl})` : `\u23F3 Processing in session \`${shortId2(sessionId)}\`...`;
996
1475
  await connector.sendMessage({
997
1476
  threadId: data.thread_id,
998
1477
  text: processingText,
@@ -1007,10 +1486,56 @@ ${chunk}` : chunk;
1007
1486
  try {
1008
1487
  const promptService = this.app.service("/sessions/:id/prompt");
1009
1488
  let promptText = data.text;
1010
- if (created && channel.channel_type === "github") {
1489
+ let slackCursorTsToWrite;
1490
+ if (channel.channel_type === "slack" && !outboundSeed) {
1491
+ const currentTs = getSlackMessageTs(data.metadata);
1492
+ const mappingMetadata = mappingForCursor?.metadata ?? {};
1493
+ const lastDeliveredTs = typeof mappingMetadata?.slack_last_delivered_ts === "string" ? mappingMetadata.slack_last_delivered_ts : void 0;
1494
+ const connector = this.activeListeners.get(channel.id) ?? getConnector(channel.channel_type, channel.config);
1495
+ const historyConnector = connector;
1496
+ if (currentTs && typeof historyConnector.fetchThreadHistory === "function") {
1497
+ try {
1498
+ const slackHistoryThreadId = mappingForCursor?.thread_id ?? data.thread_id;
1499
+ const history = await historyConnector.fetchThreadHistory({
1500
+ threadId: slackHistoryThreadId,
1501
+ ...created || !lastDeliveredTs ? {} : { oldestTs: lastDeliveredTs },
1502
+ latestTs: currentTs,
1503
+ inclusive: true,
1504
+ limit: 200,
1505
+ includeBotMessages: false,
1506
+ triggerTs: currentTs
1507
+ });
1508
+ const filteredMessages = lastDeliveredTs ? history.messages.filter(
1509
+ (message) => compareSlackTs(message.ts, lastDeliveredTs) > 0
1510
+ ) : history.messages;
1511
+ promptText = formatSlackCatchUpPrompt({
1512
+ channel,
1513
+ threadId: slackHistoryThreadId,
1514
+ currentText: data.text,
1515
+ metadata: data.metadata,
1516
+ messages: filteredMessages.length > 0 ? filteredMessages : history.messages,
1517
+ hasMore: history.has_more,
1518
+ reason: created ? "initial_thread_context" : lastDeliveredTs ? "missed_since_last_mention" : "current_message"
1519
+ });
1520
+ slackCursorTsToWrite = currentTs;
1521
+ } catch (error) {
1522
+ console.warn("[gateway] Failed to fetch Slack thread catch-up context:", error);
1523
+ }
1524
+ } else if (currentTs) {
1525
+ slackCursorTsToWrite = currentTs;
1526
+ }
1527
+ }
1528
+ if (created && outboundSeed) {
1529
+ promptText = buildSeededThreadInitialPrompt({
1530
+ seed: outboundSeed,
1531
+ channel,
1532
+ replyText: data.text,
1533
+ metadata: data.metadata
1534
+ });
1535
+ } else if (created && channel.channel_type === "github") {
1011
1536
  promptText = buildGitHubInitialPrompt(data.thread_id, data.text, data.metadata);
1012
1537
  }
1013
- const skipContext = created && channel.channel_type === "github";
1538
+ const skipContext = channel.channel_type === "slack" || created && (channel.channel_type === "github" || !!outboundSeed);
1014
1539
  if (!skipContext) {
1015
1540
  const gatewayCtx = buildGatewayContext(channel, data);
1016
1541
  const contextPrefix = formatGatewayContext(gatewayCtx);
@@ -1018,18 +1543,38 @@ ${chunk}` : chunk;
1018
1543
  promptText = contextPrefix + promptText;
1019
1544
  }
1020
1545
  }
1546
+ if (channel.channel_type === "slack") {
1547
+ promptText = prependSlackGatewayReplyNote(promptText);
1548
+ }
1021
1549
  if (created && mcpAuthWarning) {
1022
1550
  promptText = `${mcpAuthWarning}
1023
1551
 
1024
1552
  ${promptText}`;
1025
1553
  }
1554
+ const tenantId = getCurrentTenantId2();
1026
1555
  const task = await promptService.create(
1027
1556
  { prompt: promptText, permissionMode, messageSource: "gateway" },
1028
- { route: { id: sessionId }, user }
1557
+ {
1558
+ route: { id: sessionId },
1559
+ user,
1560
+ ...tenantId ? { tenant: { tenant_id: tenantId, source: "explicit" } } : {}
1561
+ }
1029
1562
  );
1563
+ if (channel.channel_type === "slack" && slackCursorTsToWrite && mappingForCursor) {
1564
+ const latestMapping = await this.threadMapRepo.findById(mappingForCursor.id);
1565
+ const latestMetadata = latestMapping?.metadata ?? {};
1566
+ const previousDelivered = typeof latestMetadata.slack_last_delivered_ts === "string" ? latestMetadata.slack_last_delivered_ts : void 0;
1567
+ if (compareSlackTs(slackCursorTsToWrite, previousDelivered) >= 0) {
1568
+ await this.threadMapRepo.updateMetadata(mappingForCursor.id, {
1569
+ ...latestMetadata,
1570
+ slack_last_delivered_ts: slackCursorTsToWrite,
1571
+ slack_last_summon_ts: slackCursorTsToWrite
1572
+ });
1573
+ }
1574
+ }
1030
1575
  if (task.status === "queued") {
1031
1576
  console.log(
1032
- `[gateway] Message queued for session ${shortId(sessionId)} at position ${task.queue_position}`
1577
+ `[gateway] Message queued for session ${shortId2(sessionId)} at position ${task.queue_position}`
1033
1578
  );
1034
1579
  this.sendSystemMessage(
1035
1580
  channel,
@@ -1037,7 +1582,7 @@ ${promptText}`;
1037
1582
  `Session is busy, message queued at position ${task.queue_position}`,
1038
1583
  { suppressSlack: true }
1039
1584
  );
1040
- void this.updateProgress({
1585
+ this.updateProgressAfterCommit({
1041
1586
  session_id: sessionId,
1042
1587
  state: "queued",
1043
1588
  task_id: task.task_id,
@@ -1045,9 +1590,9 @@ ${promptText}`;
1045
1590
  });
1046
1591
  } else {
1047
1592
  console.log(
1048
- `[gateway] Prompt sent to session ${shortId(sessionId)} via /sessions/:id/prompt`
1593
+ `[gateway] Prompt sent to session ${shortId2(sessionId)} via /sessions/:id/prompt`
1049
1594
  );
1050
- void this.updateProgress({
1595
+ this.updateProgressAfterCommit({
1051
1596
  session_id: sessionId,
1052
1597
  state: "working",
1053
1598
  task_id: task.task_id
@@ -1056,7 +1601,7 @@ ${promptText}`;
1056
1601
  } catch (error) {
1057
1602
  console.error("[gateway] Failed to send prompt to session:", error);
1058
1603
  this.sendSystemMessage(channel, data.thread_id, `Error sending prompt: ${error}`);
1059
- void this.updateProgress({
1604
+ this.updateProgressAfterCommit({
1060
1605
  session_id: sessionId,
1061
1606
  state: "failed",
1062
1607
  error_message: error instanceof Error ? error.message : String(error)
@@ -1083,7 +1628,7 @@ ${promptText}`;
1083
1628
  return { routed: false };
1084
1629
  }
1085
1630
  console.log(
1086
- `[gateway] Found mapping: channel=${shortId(mapping.channel_id)}, thread=${mapping.thread_id}`
1631
+ `[gateway] Found mapping: channel=${shortId2(mapping.channel_id)}, thread=${mapping.thread_id}`
1087
1632
  );
1088
1633
  const channel = await this.channelRepo.findById(mapping.channel_id);
1089
1634
  if (!channel?.enabled) {
@@ -1098,15 +1643,19 @@ ${promptText}`;
1098
1643
  if (channel.channel_type === "github") {
1099
1644
  this.githubMessageBuffer.set(data.session_id, data.message);
1100
1645
  console.log(
1101
- `[gateway] Buffered GitHub message for session ${shortId(data.session_id)} (${data.message.length} chars)`
1646
+ `[gateway] Buffered GitHub message for session ${shortId2(data.session_id)} (${data.message.length} chars)`
1102
1647
  );
1103
1648
  return { routed: true, channelType: "github" };
1104
1649
  }
1105
1650
  try {
1106
1651
  const connector = this.activeListeners.get(channel.id) ?? getConnector(channel.channel_type, channel.config);
1107
- const { text, blocks } = normalizeOutbound(
1652
+ const systemMeta = data.metadata?.system;
1653
+ const systemPrefixMatch = /^\s*\[system\]\s*/i.exec(data.message);
1654
+ const shouldRenderAsSystem = channel.channel_type === "slack" && (systemMeta?.render_hint === "context" || !!systemPrefixMatch);
1655
+ const payload = shouldRenderAsSystem ? formatGatewaySystemPayload("slack", data.message.replace(/^\s*\[system\]\s*/i, "").trim()) : normalizeOutbound(
1108
1656
  connector.formatMessage ? connector.formatMessage(data.message) : data.message
1109
1657
  );
1658
+ const { text, blocks } = payload;
1110
1659
  const threadId = channel.channel_type === "slack" ? this.getActiveSlackThreadId(mapping) : mapping.thread_id;
1111
1660
  const sentTs = await connector.sendMessage({
1112
1661
  threadId,
@@ -1127,6 +1676,25 @@ ${promptText}`;
1127
1676
  channelType: channel.channel_type
1128
1677
  };
1129
1678
  }
1679
+ /**
1680
+ * Schedule outbound routing after the current tenant-scoped database work
1681
+ * commits, then route inside a fresh tenant scope. Message after-hooks fire
1682
+ * while the newly-created row may still be transactional; routing immediately
1683
+ * can inherit a stale transaction object or query before the session/message
1684
+ * graph is visible on a new scoped connection.
1685
+ */
1686
+ routeMessageAfterCommit(data, params) {
1687
+ deferWithTenantDatabaseScope(
1688
+ this.db,
1689
+ params,
1690
+ async () => {
1691
+ await this.routeMessage(data);
1692
+ },
1693
+ (error) => {
1694
+ console.warn("[gateway] Failed to route message after commit:", error);
1695
+ }
1696
+ );
1697
+ }
1130
1698
  /**
1131
1699
  * Flush the GitHub message buffer for a session.
1132
1700
  *
@@ -1143,7 +1711,7 @@ ${promptText}`;
1143
1711
  const mapping = await this.threadMapRepo.findBySession(sessionId);
1144
1712
  if (!mapping) {
1145
1713
  console.warn(
1146
- `[gateway] flushGitHubBuffer: no thread mapping for session ${shortId(sessionId)}`
1714
+ `[gateway] flushGitHubBuffer: no thread mapping for session ${shortId2(sessionId)}`
1147
1715
  );
1148
1716
  return;
1149
1717
  }
@@ -1167,12 +1735,12 @@ ${promptText}`;
1167
1735
  metadata: outboundMetadata
1168
1736
  });
1169
1737
  console.log(
1170
- `[gateway] Flushed GitHub buffer for session ${shortId(sessionId)} \u2192 ${mapping.thread_id} (${bufferedMessage.length} chars)`
1738
+ `[gateway] Flushed GitHub buffer for session ${shortId2(sessionId)} \u2192 ${mapping.thread_id} (${bufferedMessage.length} chars)`
1171
1739
  );
1172
1740
  } catch (error) {
1173
1741
  this.githubMessageBuffer.set(sessionId, bufferedMessage);
1174
1742
  console.error(
1175
- `[gateway] Failed to flush GitHub buffer for session ${shortId(sessionId)} (re-queued):`,
1743
+ `[gateway] Failed to flush GitHub buffer for session ${shortId2(sessionId)} (re-queued):`,
1176
1744
  error
1177
1745
  );
1178
1746
  }
@@ -1243,7 +1811,7 @@ ${promptText}`;
1243
1811
  if (connector.stopListening) {
1244
1812
  await connector.stopListening();
1245
1813
  }
1246
- console.log(`[gateway] Listener stopped for channel ${shortId(channelId)}`);
1814
+ console.log(`[gateway] Listener stopped for channel ${shortId2(channelId)}`);
1247
1815
  } catch (error) {
1248
1816
  console.error(
1249
1817
  `[gateway] Error stopping listener for ${channelId} (old socket may still be alive):`,
@@ -1258,31 +1826,42 @@ ${promptText}`;
1258
1826
  if (this.activeListeners.has(channel.id)) {
1259
1827
  return;
1260
1828
  }
1261
- try {
1262
- const connector = getConnector(channel.channel_type, channel.config);
1263
- if (!connector.startListening) {
1264
- return;
1829
+ const listenerTenantId = tenantIdFromGatewayChannel(channel) ?? getCurrentTenantId2();
1830
+ return runWithoutTenantDatabaseScope2(async () => {
1831
+ try {
1832
+ const connector = getConnector(channel.channel_type, channel.config);
1833
+ if (!connector.startListening) {
1834
+ return;
1835
+ }
1836
+ const callback = (msg) => {
1837
+ this.handleListenerInboundMessage(channel, listenerTenantId, msg).catch((error) => {
1838
+ console.error(
1839
+ `[gateway] Failed to process inbound message for channel ${channel.name}:`,
1840
+ error
1841
+ );
1842
+ });
1843
+ };
1844
+ await connector.startListening(callback);
1845
+ this.activeListeners.set(channel.id, connector);
1846
+ console.log(`[gateway] Socket Mode listener started for channel "${channel.name}"`);
1847
+ } catch (error) {
1848
+ console.error(`[gateway] Failed to start listener for channel "${channel.name}":`, error);
1265
1849
  }
1266
- const callback = (msg) => {
1267
- this.create({
1268
- channel_key: channel.channel_key,
1269
- thread_id: msg.threadId,
1270
- text: msg.text,
1271
- user_name: msg.userId,
1272
- metadata: msg.metadata
1273
- }).catch((error) => {
1274
- console.error(
1275
- `[gateway] Failed to process inbound message for channel ${channel.name}:`,
1276
- error
1277
- );
1278
- });
1279
- };
1280
- await connector.startListening(callback);
1281
- this.activeListeners.set(channel.id, connector);
1282
- console.log(`[gateway] Socket Mode listener started for channel "${channel.name}"`);
1283
- } catch (error) {
1284
- console.error(`[gateway] Failed to start listener for channel "${channel.name}":`, error);
1850
+ });
1851
+ }
1852
+ async handleListenerInboundMessage(channel, tenantId, msg) {
1853
+ if (!tenantId) {
1854
+ throw new Error(`Missing tenant context for gateway listener channel ${channel.id}`);
1285
1855
  }
1856
+ await runWithTenantDatabaseScope2(this.db, tenantId, async () => {
1857
+ await this.create({
1858
+ channel_key: channel.channel_key,
1859
+ thread_id: msg.threadId,
1860
+ text: msg.text,
1861
+ user_name: msg.userId,
1862
+ metadata: msg.metadata
1863
+ });
1864
+ });
1286
1865
  }
1287
1866
  /**
1288
1867
  * Stop all active listeners (called on shutdown)
@@ -1293,7 +1872,7 @@ ${promptText}`;
1293
1872
  if (connector.stopListening) {
1294
1873
  await connector.stopListening();
1295
1874
  }
1296
- console.log(`[gateway] Listener stopped for channel ${shortId(channelId)}`);
1875
+ console.log(`[gateway] Listener stopped for channel ${shortId2(channelId)}`);
1297
1876
  } catch (error) {
1298
1877
  console.error(`[gateway] Error stopping listener for ${channelId}:`, error);
1299
1878
  }
@@ -1306,5 +1885,6 @@ function createGatewayService(db, app) {
1306
1885
  }
1307
1886
  export {
1308
1887
  GatewayService,
1309
- createGatewayService
1888
+ createGatewayService,
1889
+ tenantIdFromGatewayChannel
1310
1890
  };