@rudderhq/server 0.3.6-canary.9 → 0.4.1

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 (346) hide show
  1. package/dist/bootstrap/register-api-routes.d.ts.map +1 -1
  2. package/dist/bootstrap/register-api-routes.js +2 -0
  3. package/dist/bootstrap/register-api-routes.js.map +1 -1
  4. package/dist/bundled-plugins/plugin-linear/dist/worker.js +37 -2
  5. package/dist/bundled-plugins/plugin-linear/dist/worker.js.map +2 -2
  6. package/dist/config.d.ts +1 -0
  7. package/dist/config.d.ts.map +1 -1
  8. package/dist/config.js +15 -1
  9. package/dist/config.js.map +1 -1
  10. package/dist/home-paths.d.ts +11 -0
  11. package/dist/home-paths.d.ts.map +1 -1
  12. package/dist/home-paths.js +151 -8
  13. package/dist/home-paths.js.map +1 -1
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +103 -26
  16. package/dist/index.js.map +1 -1
  17. package/dist/routes/activity.d.ts +1 -1
  18. package/dist/routes/activity.d.ts.map +1 -1
  19. package/dist/routes/activity.js +21 -5
  20. package/dist/routes/activity.js.map +1 -1
  21. package/dist/routes/agents.d.ts.map +1 -1
  22. package/dist/routes/agents.js +254 -4
  23. package/dist/routes/agents.js.map +1 -1
  24. package/dist/routes/agents.management-routes.d.ts.map +1 -1
  25. package/dist/routes/agents.management-routes.js +132 -40
  26. package/dist/routes/agents.management-routes.js.map +1 -1
  27. package/dist/routes/automations.d.ts +8 -0
  28. package/dist/routes/automations.d.ts.map +1 -1
  29. package/dist/routes/automations.js.map +1 -1
  30. package/dist/routes/chats.d.ts.map +1 -1
  31. package/dist/routes/chats.js +228 -115
  32. package/dist/routes/chats.js.map +1 -1
  33. package/dist/routes/chats.stream-routes.d.ts.map +1 -1
  34. package/dist/routes/chats.stream-routes.js +94 -5
  35. package/dist/routes/chats.stream-routes.js.map +1 -1
  36. package/dist/routes/instance-settings.d.ts.map +1 -1
  37. package/dist/routes/instance-settings.js +60 -9
  38. package/dist/routes/instance-settings.js.map +1 -1
  39. package/dist/routes/issues.comments-attachments.d.ts.map +1 -1
  40. package/dist/routes/issues.comments-attachments.js +72 -83
  41. package/dist/routes/issues.comments-attachments.js.map +1 -1
  42. package/dist/routes/issues.d.ts +8 -0
  43. package/dist/routes/issues.d.ts.map +1 -1
  44. package/dist/routes/issues.js +27 -4
  45. package/dist/routes/issues.js.map +1 -1
  46. package/dist/routes/issues.mutations.d.ts.map +1 -1
  47. package/dist/routes/issues.mutations.js +2 -26
  48. package/dist/routes/issues.mutations.js.map +1 -1
  49. package/dist/routes/messenger.d.ts.map +1 -1
  50. package/dist/routes/messenger.js +39 -1
  51. package/dist/routes/messenger.js.map +1 -1
  52. package/dist/routes/orgs.d.ts.map +1 -1
  53. package/dist/routes/orgs.js +16 -0
  54. package/dist/routes/orgs.js.map +1 -1
  55. package/dist/routes/plugin-ui-static.d.ts +4 -4
  56. package/dist/routes/plugin-ui-static.js +5 -5
  57. package/dist/routes/plugin-ui-static.js.map +1 -1
  58. package/dist/routes/plugins.d.ts +4 -4
  59. package/dist/routes/plugins.js +10 -10
  60. package/dist/routes/plugins.operations-routes.d.ts +1 -1
  61. package/dist/routes/plugins.operations-routes.js +2 -2
  62. package/dist/routes/plugins.operations-routes.js.map +1 -1
  63. package/dist/routes/run-intelligence.js +5 -5
  64. package/dist/routes/run-intelligence.js.map +1 -1
  65. package/dist/routes/sidebar-badges.d.ts.map +1 -1
  66. package/dist/routes/sidebar-badges.js +6 -10
  67. package/dist/routes/sidebar-badges.js.map +1 -1
  68. package/dist/routes/website-metadata.d.ts +8 -0
  69. package/dist/routes/website-metadata.d.ts.map +1 -0
  70. package/dist/routes/website-metadata.js +67 -0
  71. package/dist/routes/website-metadata.js.map +1 -0
  72. package/dist/services/activity.d.ts.map +1 -1
  73. package/dist/services/activity.js +1 -1
  74. package/dist/services/activity.js.map +1 -1
  75. package/dist/services/agent-instructions.d.ts +1 -0
  76. package/dist/services/agent-instructions.d.ts.map +1 -1
  77. package/dist/services/agent-instructions.js +57 -6
  78. package/dist/services/agent-instructions.js.map +1 -1
  79. package/dist/services/agent-run-context.d.ts +3 -1
  80. package/dist/services/agent-run-context.d.ts.map +1 -1
  81. package/dist/services/agent-run-context.js +7 -0
  82. package/dist/services/agent-run-context.js.map +1 -1
  83. package/dist/services/agent-startup-context.d.ts +2 -1
  84. package/dist/services/agent-startup-context.d.ts.map +1 -1
  85. package/dist/services/agent-startup-context.js +6 -26
  86. package/dist/services/agent-startup-context.js.map +1 -1
  87. package/dist/services/agents.d.ts +9 -1
  88. package/dist/services/agents.d.ts.map +1 -1
  89. package/dist/services/agents.js.map +1 -1
  90. package/dist/services/approvals.d.ts +8 -0
  91. package/dist/services/approvals.d.ts.map +1 -1
  92. package/dist/services/approvals.js.map +1 -1
  93. package/dist/services/automation-chat-output.d.ts +1 -1
  94. package/dist/services/automations.d.ts +4 -4
  95. package/dist/services/automations.d.ts.map +1 -1
  96. package/dist/services/automations.js +12 -0
  97. package/dist/services/automations.js.map +1 -1
  98. package/dist/services/budgets.d.ts +8 -0
  99. package/dist/services/budgets.d.ts.map +1 -1
  100. package/dist/services/budgets.js.map +1 -1
  101. package/dist/services/calendar.d.ts +2 -2
  102. package/dist/services/calendar.js +3 -3
  103. package/dist/services/calendar.js.map +1 -1
  104. package/dist/services/chat-agent-runs.d.ts +2 -0
  105. package/dist/services/chat-agent-runs.d.ts.map +1 -1
  106. package/dist/services/chat-agent-runs.js +6 -0
  107. package/dist/services/chat-agent-runs.js.map +1 -1
  108. package/dist/services/chat-assistant.d.ts.map +1 -1
  109. package/dist/services/chat-assistant.helpers.d.ts +6 -1
  110. package/dist/services/chat-assistant.helpers.d.ts.map +1 -1
  111. package/dist/services/chat-assistant.helpers.js +25 -11
  112. package/dist/services/chat-assistant.helpers.js.map +1 -1
  113. package/dist/services/chat-assistant.js +230 -95
  114. package/dist/services/chat-assistant.js.map +1 -1
  115. package/dist/services/chat-generation-locks.d.ts +6 -1
  116. package/dist/services/chat-generation-locks.d.ts.map +1 -1
  117. package/dist/services/chat-generation-locks.js +20 -2
  118. package/dist/services/chat-generation-locks.js.map +1 -1
  119. package/dist/services/chat-title-generation.d.ts +36 -0
  120. package/dist/services/chat-title-generation.d.ts.map +1 -0
  121. package/dist/services/chat-title-generation.js +107 -0
  122. package/dist/services/chat-title-generation.js.map +1 -0
  123. package/dist/services/chats.d.ts +471 -25
  124. package/dist/services/chats.d.ts.map +1 -1
  125. package/dist/services/chats.helpers.d.ts +2 -2
  126. package/dist/services/chats.js +681 -35
  127. package/dist/services/chats.js.map +1 -1
  128. package/dist/services/costs.d.ts +1 -1
  129. package/dist/services/finance.d.ts +2 -2
  130. package/dist/services/finance.js +1 -1
  131. package/dist/services/finance.js.map +1 -1
  132. package/dist/services/goals.d.ts +8 -0
  133. package/dist/services/goals.d.ts.map +1 -1
  134. package/dist/services/goals.js.map +1 -1
  135. package/dist/services/heartbeat-run-reference.d.ts +1 -0
  136. package/dist/services/heartbeat-run-reference.d.ts.map +1 -1
  137. package/dist/services/heartbeat-run-reference.js +3 -2
  138. package/dist/services/heartbeat-run-reference.js.map +1 -1
  139. package/dist/services/heartbeat-run-summary.js +1 -1
  140. package/dist/services/heartbeat-run-summary.js.map +1 -1
  141. package/dist/services/integrations/agent-integrations.d.ts +19 -0
  142. package/dist/services/integrations/agent-integrations.d.ts.map +1 -1
  143. package/dist/services/integrations/agent-integrations.js +30 -0
  144. package/dist/services/integrations/agent-integrations.js.map +1 -1
  145. package/dist/services/integrations/feishu/app-registration.d.ts +74 -0
  146. package/dist/services/integrations/feishu/app-registration.d.ts.map +1 -0
  147. package/dist/services/integrations/feishu/app-registration.js +236 -0
  148. package/dist/services/integrations/feishu/app-registration.js.map +1 -0
  149. package/dist/services/integrations/feishu/inbound-dispatcher-db.d.ts +5 -0
  150. package/dist/services/integrations/feishu/inbound-dispatcher-db.d.ts.map +1 -1
  151. package/dist/services/integrations/feishu/inbound-dispatcher-db.js +178 -7
  152. package/dist/services/integrations/feishu/inbound-dispatcher-db.js.map +1 -1
  153. package/dist/services/integrations/feishu/inbound-dispatcher.d.ts +23 -0
  154. package/dist/services/integrations/feishu/inbound-dispatcher.d.ts.map +1 -1
  155. package/dist/services/integrations/feishu/inbound-dispatcher.js +25 -0
  156. package/dist/services/integrations/feishu/inbound-dispatcher.js.map +1 -1
  157. package/dist/services/integrations/feishu/runtime-registry.d.ts +20 -0
  158. package/dist/services/integrations/feishu/runtime-registry.d.ts.map +1 -0
  159. package/dist/services/integrations/feishu/runtime-registry.js +41 -0
  160. package/dist/services/integrations/feishu/runtime-registry.js.map +1 -0
  161. package/dist/services/integrations/feishu/runtime.d.ts +39 -23
  162. package/dist/services/integrations/feishu/runtime.d.ts.map +1 -1
  163. package/dist/services/integrations/feishu/runtime.js +333 -95
  164. package/dist/services/integrations/feishu/runtime.js.map +1 -1
  165. package/dist/services/integrations/feishu/user-bindings.d.ts +22 -0
  166. package/dist/services/integrations/feishu/user-bindings.d.ts.map +1 -0
  167. package/dist/services/integrations/feishu/user-bindings.js +57 -0
  168. package/dist/services/integrations/feishu/user-bindings.js.map +1 -0
  169. package/dist/services/issue-approvals.d.ts +2 -2
  170. package/dist/services/issue-review-wakeup.js +1 -1
  171. package/dist/services/issue-review-wakeup.js.map +1 -1
  172. package/dist/services/issues.comments-attachments.d.ts +3 -3
  173. package/dist/services/issues.d.ts +14 -6
  174. package/dist/services/issues.d.ts.map +1 -1
  175. package/dist/services/issues.helpers.d.ts +12 -1
  176. package/dist/services/issues.helpers.d.ts.map +1 -1
  177. package/dist/services/issues.helpers.js +8 -0
  178. package/dist/services/issues.helpers.js.map +1 -1
  179. package/dist/services/issues.js +28 -2
  180. package/dist/services/issues.js.map +1 -1
  181. package/dist/services/knowledge-portability/organization-skills.catalog.d.ts +1 -1
  182. package/dist/services/library-entries.d.ts +8 -0
  183. package/dist/services/library-entries.d.ts.map +1 -1
  184. package/dist/services/library-entries.js +8 -0
  185. package/dist/services/library-entries.js.map +1 -1
  186. package/dist/services/managed-workspace-preflight.js +1 -1
  187. package/dist/services/managed-workspace-preflight.js.map +1 -1
  188. package/dist/services/messenger.d.ts +23 -4
  189. package/dist/services/messenger.d.ts.map +1 -1
  190. package/dist/services/messenger.js +187 -25
  191. package/dist/services/messenger.js.map +1 -1
  192. package/dist/services/plugin-capability-validator.d.ts +1 -1
  193. package/dist/services/plugin-capability-validator.js +2 -2
  194. package/dist/services/plugin-dev-watcher.js +1 -1
  195. package/dist/services/plugin-event-bus.d.ts +3 -3
  196. package/dist/services/plugin-event-bus.js +3 -3
  197. package/dist/services/plugin-job-coordinator.d.ts +1 -1
  198. package/dist/services/plugin-job-coordinator.js +1 -1
  199. package/dist/services/plugin-job-scheduler.d.ts +1 -1
  200. package/dist/services/plugin-job-scheduler.js +1 -1
  201. package/dist/services/plugin-job-store.d.ts +2 -2
  202. package/dist/services/plugin-job-store.js +2 -2
  203. package/dist/services/plugin-lifecycle.d.ts +4 -4
  204. package/dist/services/plugin-lifecycle.js +3 -3
  205. package/dist/services/plugin-loader.core.d.ts +4 -4
  206. package/dist/services/plugin-loader.core.js +2 -2
  207. package/dist/services/plugin-loader.core.js.map +1 -1
  208. package/dist/services/plugin-loader.d.ts +3 -3
  209. package/dist/services/plugin-loader.helpers.d.ts +26 -25
  210. package/dist/services/plugin-loader.helpers.d.ts.map +1 -1
  211. package/dist/services/plugin-loader.helpers.js +10 -9
  212. package/dist/services/plugin-loader.helpers.js.map +1 -1
  213. package/dist/services/plugin-loader.js +3 -3
  214. package/dist/services/plugin-loader.worker-paths.d.ts +3 -3
  215. package/dist/services/plugin-manifest-validator.d.ts +2 -2
  216. package/dist/services/plugin-registry.d.ts +9 -9
  217. package/dist/services/plugin-registry.js +1 -1
  218. package/dist/services/plugin-secrets-handler.d.ts +2 -2
  219. package/dist/services/plugin-secrets-handler.js +2 -2
  220. package/dist/services/plugin-state-store.d.ts +3 -3
  221. package/dist/services/plugin-state-store.js +3 -3
  222. package/dist/services/plugin-stream-bus.d.ts +1 -1
  223. package/dist/services/plugin-stream-bus.js +1 -1
  224. package/dist/services/plugin-tool-dispatcher.d.ts +2 -2
  225. package/dist/services/plugin-tool-dispatcher.js +2 -2
  226. package/dist/services/plugin-tool-registry.d.ts +2 -2
  227. package/dist/services/plugin-tool-registry.js +2 -2
  228. package/dist/services/plugin-worker-manager.d.ts +4 -4
  229. package/dist/services/plugin-worker-manager.d.ts.map +1 -1
  230. package/dist/services/plugin-worker-manager.js +8 -7
  231. package/dist/services/plugin-worker-manager.js.map +1 -1
  232. package/dist/services/run-intelligence.js +3 -3
  233. package/dist/services/run-intelligence.js.map +1 -1
  234. package/dist/services/runtime-kernel/heartbeat.core.d.ts +9 -1
  235. package/dist/services/runtime-kernel/heartbeat.core.d.ts.map +1 -1
  236. package/dist/services/runtime-kernel/heartbeat.core.js +16 -5
  237. package/dist/services/runtime-kernel/heartbeat.core.js.map +1 -1
  238. package/dist/services/runtime-kernel/heartbeat.d.ts +3 -3
  239. package/dist/services/runtime-kernel/heartbeat.execute.d.ts.map +1 -1
  240. package/dist/services/runtime-kernel/heartbeat.execute.js +17 -3
  241. package/dist/services/runtime-kernel/heartbeat.execute.js.map +1 -1
  242. package/dist/services/runtime-kernel/heartbeat.misc.js +1 -1
  243. package/dist/services/runtime-kernel/heartbeat.recovery.d.ts +1 -1
  244. package/dist/services/runtime-kernel/heartbeat.recovery.js +7 -7
  245. package/dist/services/runtime-kernel/heartbeat.recovery.js.map +1 -1
  246. package/dist/services/runtime-kernel/heartbeat.release.js +4 -4
  247. package/dist/services/runtime-kernel/heartbeat.release.js.map +1 -1
  248. package/dist/services/runtime-kernel/heartbeat.wakeup.js +1 -1
  249. package/dist/services/sidebar-badges.d.ts +3 -0
  250. package/dist/services/sidebar-badges.d.ts.map +1 -1
  251. package/dist/services/sidebar-badges.js +29 -1
  252. package/dist/services/sidebar-badges.js.map +1 -1
  253. package/dist/services/title-generation.d.ts +38 -0
  254. package/dist/services/title-generation.d.ts.map +1 -0
  255. package/dist/services/title-generation.js +119 -0
  256. package/dist/services/title-generation.js.map +1 -0
  257. package/dist/services/website-metadata.d.ts +17 -0
  258. package/dist/services/website-metadata.d.ts.map +1 -0
  259. package/dist/services/website-metadata.js +293 -0
  260. package/dist/services/website-metadata.js.map +1 -0
  261. package/dist/services/workspace-backups.d.ts +22 -0
  262. package/dist/services/workspace-backups.d.ts.map +1 -1
  263. package/dist/services/workspace-backups.js +161 -5
  264. package/dist/services/workspace-backups.js.map +1 -1
  265. package/dist/services/workspace-runtime.services.d.ts +1 -1
  266. package/package.json +15 -14
  267. package/resources/bundled-skills/rudder/SKILL.md +7 -6
  268. package/resources/bundled-skills/rudder/references/cli-reference.md +3 -3
  269. package/resources/bundled-skills/rudder-create-plugin/SKILL.md +2 -2
  270. package/skills/rudder/SKILL.md +7 -6
  271. package/skills/rudder/references/cli-reference.md +3 -3
  272. package/skills/rudder-create-plugin/SKILL.md +2 -2
  273. package/ui-dist/assets/{_basePickBy-CM0XatHw.js → _basePickBy-RX5N2cj2.js} +1 -1
  274. package/ui-dist/assets/{_baseUniq-CdBBmdoP.js → _baseUniq-Br4fg1iw.js} +1 -1
  275. package/ui-dist/assets/{arc-DSTtxyJ9.js → arc-B8svvCeo.js} +1 -1
  276. package/ui-dist/assets/{architectureDiagram-2XIMDMQ5-BkHMYb5I.js → architectureDiagram-2XIMDMQ5-C5dYOfG1.js} +1 -1
  277. package/ui-dist/assets/{blockDiagram-WCTKOSBZ-EYczZxwW.js → blockDiagram-WCTKOSBZ-B6XhVXfw.js} +1 -1
  278. package/ui-dist/assets/{c4Diagram-IC4MRINW-Xo9qijMi.js → c4Diagram-IC4MRINW-D31WV7FX.js} +1 -1
  279. package/ui-dist/assets/channel-BD332hbj.js +1 -0
  280. package/ui-dist/assets/{chunk-4BX2VUAB-CKzta1FF.js → chunk-4BX2VUAB-CxoBpj5-.js} +1 -1
  281. package/ui-dist/assets/{chunk-55IACEB6-BxxUB0ww.js → chunk-55IACEB6-kF3-cxbP.js} +1 -1
  282. package/ui-dist/assets/{chunk-FMBD7UC4-0F4oxVtY.js → chunk-FMBD7UC4-CmnJkmf-.js} +1 -1
  283. package/ui-dist/assets/{chunk-JSJVCQXG-CVMPMlVD.js → chunk-JSJVCQXG-U_rZ0R1l.js} +1 -1
  284. package/ui-dist/assets/{chunk-KX2RTZJC-lPrAWT94.js → chunk-KX2RTZJC-DB5h51jY.js} +1 -1
  285. package/ui-dist/assets/{chunk-NQ4KR5QH-Bufcm7Iv.js → chunk-NQ4KR5QH-D00Zb66Y.js} +1 -1
  286. package/ui-dist/assets/{chunk-QZHKN3VN-CucmdWnl.js → chunk-QZHKN3VN-CZOQzYse.js} +1 -1
  287. package/ui-dist/assets/{chunk-WL4C6EOR-Dz0oYQrJ.js → chunk-WL4C6EOR-CiFO_DRi.js} +1 -1
  288. package/ui-dist/assets/classDiagram-VBA2DB6C-BJA0edKB.js +1 -0
  289. package/ui-dist/assets/classDiagram-v2-RAHNMMFH-BJA0edKB.js +1 -0
  290. package/ui-dist/assets/clone-BXc7Yvje.js +1 -0
  291. package/ui-dist/assets/{cose-bilkent-S5V4N54A-DzyX-Er8.js → cose-bilkent-S5V4N54A-BvkdnfgN.js} +1 -1
  292. package/ui-dist/assets/{dagre-KLK3FWXG-BbZzCKuN.js → dagre-KLK3FWXG-DcTva6B8.js} +1 -1
  293. package/ui-dist/assets/{diagram-E7M64L7V-B5Rb7Bm4.js → diagram-E7M64L7V-sXDqPfE1.js} +1 -1
  294. package/ui-dist/assets/{diagram-IFDJBPK2-Cpu1Xc8G.js → diagram-IFDJBPK2-BVBaBBbz.js} +1 -1
  295. package/ui-dist/assets/{diagram-P4PSJMXO-kLfHqRlk.js → diagram-P4PSJMXO-cjQe9ndf.js} +1 -1
  296. package/ui-dist/assets/{erDiagram-INFDFZHY-rCnUyQUb.js → erDiagram-INFDFZHY-CFGKze0m.js} +1 -1
  297. package/ui-dist/assets/{flowDiagram-PKNHOUZH-BhOz8cvV.js → flowDiagram-PKNHOUZH-D7oV-h10.js} +1 -1
  298. package/ui-dist/assets/{ganttDiagram-A5KZAMGK-Csg9g3hz.js → ganttDiagram-A5KZAMGK-Rdv3FkwM.js} +1 -1
  299. package/ui-dist/assets/{gitGraphDiagram-K3NZZRJ6-DLPnSlRs.js → gitGraphDiagram-K3NZZRJ6-BejgDMgO.js} +1 -1
  300. package/ui-dist/assets/{graph-BrxYh68N.js → graph-FYmROErt.js} +1 -1
  301. package/ui-dist/assets/{index-BeZv_Z0b.js → index-4AkwW8qm.js} +1 -1
  302. package/ui-dist/assets/{index-Dj72ldIc.js → index-BArpEgpP.js} +1 -1
  303. package/ui-dist/assets/index-BPlr2F3e.css +1 -0
  304. package/ui-dist/assets/{index-Br07RRw1.js → index-BXKKdE9_.js} +1 -1
  305. package/ui-dist/assets/{index-mOyLwPeE.js → index-BeEzPu0t.js} +1 -1
  306. package/ui-dist/assets/{index-B6_gFYNj.js → index-BipRYXd-.js} +1 -1
  307. package/ui-dist/assets/{index-Bw8MgLaM.js → index-CEvBo8i0.js} +450 -445
  308. package/ui-dist/assets/{index-BkzdTp2b.js → index-CWj4VVKu.js} +1 -1
  309. package/ui-dist/assets/{index-D0rP99dj.js → index-CaLoiEJB.js} +1 -1
  310. package/ui-dist/assets/{index-DMkClCka.js → index-DDHYeuwy.js} +1 -1
  311. package/ui-dist/assets/{index-DiMeST8g.js → index-DSnSYKAK.js} +1 -1
  312. package/ui-dist/assets/{index-DpdsNIGb.js → index-DUeBWXLE.js} +1 -1
  313. package/ui-dist/assets/{index-G_y-oBne.js → index-DWxCltvd.js} +1 -1
  314. package/ui-dist/assets/{index-COBwmF-C.js → index-DYYXNc6j.js} +1 -1
  315. package/ui-dist/assets/{index-D_06pAuN.js → index-DaNviTjf.js} +1 -1
  316. package/ui-dist/assets/{index-BQW242nS.js → index-c9oJP_Zz.js} +1 -1
  317. package/ui-dist/assets/{index-Cb2qts0o.js → index-hUcZY0te.js} +1 -1
  318. package/ui-dist/assets/{index-D4FFno9t.js → index-ul4vjkem.js} +1 -1
  319. package/ui-dist/assets/{index-CsraICzz.js → index-uraSHmk-.js} +1 -1
  320. package/ui-dist/assets/{infoDiagram-LFFYTUFH-CRBKgiEf.js → infoDiagram-LFFYTUFH-D6ROD6kG.js} +1 -1
  321. package/ui-dist/assets/{ishikawaDiagram-PHBUUO56-DI3jquVE.js → ishikawaDiagram-PHBUUO56-DcVc0cdJ.js} +1 -1
  322. package/ui-dist/assets/{journeyDiagram-4ABVD52K-DDFZ2Q6D.js → journeyDiagram-4ABVD52K-BRufUm59.js} +1 -1
  323. package/ui-dist/assets/{kanban-definition-K7BYSVSG-yL5u3cXV.js → kanban-definition-K7BYSVSG-DEQ5w7B0.js} +1 -1
  324. package/ui-dist/assets/{layout-DDZaRkp7.js → layout-F5Axhkca.js} +1 -1
  325. package/ui-dist/assets/{linear-CWngWuQa.js → linear-BllnS5sO.js} +1 -1
  326. package/ui-dist/assets/{mermaid.core-CQuYoq9K.js → mermaid.core-CK8iLvY2.js} +4 -4
  327. package/ui-dist/assets/{mindmap-definition-YRQLILUH-BwSsHtTO.js → mindmap-definition-YRQLILUH-CXI6vt68.js} +1 -1
  328. package/ui-dist/assets/{pieDiagram-SKSYHLDU-BasUkvwH.js → pieDiagram-SKSYHLDU-DDUy_f_g.js} +1 -1
  329. package/ui-dist/assets/{quadrantDiagram-337W2JSQ-D0D2xp36.js → quadrantDiagram-337W2JSQ-Cpns5Yb1.js} +1 -1
  330. package/ui-dist/assets/{requirementDiagram-Z7DCOOCP-CztN9kDh.js → requirementDiagram-Z7DCOOCP-6p6V6XH6.js} +1 -1
  331. package/ui-dist/assets/{sankeyDiagram-WA2Y5GQK-2xDqN9ox.js → sankeyDiagram-WA2Y5GQK-C52tgQmQ.js} +1 -1
  332. package/ui-dist/assets/{sequenceDiagram-2WXFIKYE-CO3OUPIJ.js → sequenceDiagram-2WXFIKYE-CxlW_veo.js} +1 -1
  333. package/ui-dist/assets/{stateDiagram-RAJIS63D-DuQ1QZcT.js → stateDiagram-RAJIS63D-NFOjAzLj.js} +1 -1
  334. package/ui-dist/assets/stateDiagram-v2-FVOUBMTO-DblG-d9U.js +1 -0
  335. package/ui-dist/assets/{timeline-definition-YZTLITO2-CnOxbQeb.js → timeline-definition-YZTLITO2-DvENY4C6.js} +1 -1
  336. package/ui-dist/assets/{treemap-KZPCXAKY-DD77IFOl.js → treemap-KZPCXAKY-BJfIPF5s.js} +1 -1
  337. package/ui-dist/assets/{vennDiagram-LZ73GAT5-DOXTGJn1.js → vennDiagram-LZ73GAT5-DmGW-P4z.js} +1 -1
  338. package/ui-dist/assets/{xychartDiagram-JWTSCODW-DWkrcdri.js → xychartDiagram-JWTSCODW-bbLe3hqw.js} +1 -1
  339. package/ui-dist/brands/feishu-logo.svg +5 -0
  340. package/ui-dist/index.html +2 -2
  341. package/ui-dist/assets/channel-BRnz7pSY.js +0 -1
  342. package/ui-dist/assets/classDiagram-VBA2DB6C-Q3YuI9dv.js +0 -1
  343. package/ui-dist/assets/classDiagram-v2-RAHNMMFH-Q3YuI9dv.js +0 -1
  344. package/ui-dist/assets/clone-C1exIyAN.js +0 -1
  345. package/ui-dist/assets/index-Dz8xxyqB.css +0 -1
  346. package/ui-dist/assets/stateDiagram-v2-FVOUBMTO-DQbZqbl9.js +0 -1
@@ -393,6 +393,7 @@ function chatSummary(conversation) {
393
393
  routedAgentId: conversation.routedAgentId,
394
394
  runtimeAgentId: conversation.chatRuntime?.runtimeAgentId ?? null,
395
395
  latestUserMessagePreview: conversation.latestUserMessagePreview,
396
+ ...(conversation.sourceMetadata ?? {}),
396
397
  },
397
398
  };
398
399
  }
@@ -555,18 +556,19 @@ function approvalCard(approval, latestComment, currentUserId, latestActivityAt)
555
556
  };
556
557
  }
557
558
  function failedRunCard(run, agentName) {
559
+ const summary = failedRunUserSummary(run);
558
560
  return {
559
561
  id: run.id,
560
562
  threadKey: "failed-runs",
561
563
  kind: "failed-runs",
562
564
  title: agentName ? `${agentName} · Failed run` : "Failed run",
563
565
  subtitle: run.status.replaceAll("_", " "),
564
- body: FAILED_RUN_USER_SUMMARY,
565
- preview: FAILED_RUN_USER_SUMMARY,
566
+ body: summary,
567
+ preview: summary,
566
568
  href: `/agents/${run.agentId}/runs/${run.id}`,
567
569
  latestActivityAt: run.updatedAt ?? run.createdAt,
568
570
  actions: [
569
- buildAction("Retry", `/heartbeat-runs/${run.id}/retry`, "POST"),
571
+ buildAction("Retry", `/agent-runs/${run.id}/retry`, "POST"),
570
572
  buildAction("Open run", `/agents/${run.agentId}/runs/${run.id}`, "GET"),
571
573
  ],
572
574
  metadata: {
@@ -578,6 +580,12 @@ function failedRunCard(run, agentName) {
578
580
  run: run,
579
581
  };
580
582
  }
583
+ function readNonEmptyString(value) {
584
+ return typeof value === "string" && value.trim().length > 0 ? value.trim() : null;
585
+ }
586
+ function failedRunUserSummary(run) {
587
+ return readNonEmptyString(run.resultJson?.userMessage) ?? FAILED_RUN_USER_SUMMARY;
588
+ }
581
589
  function budgetCard(incident) {
582
590
  return {
583
591
  id: incident.id,
@@ -655,6 +663,16 @@ export function messengerService(db) {
655
663
  function chatConversationIdFromThreadKey(threadKey) {
656
664
  return threadKey.startsWith("chat:") ? threadKey.slice("chat:".length) : null;
657
665
  }
666
+ function issueIdFromThreadKey(threadKey) {
667
+ return threadKey.startsWith("issue:") ? threadKey.slice("issue:".length) : null;
668
+ }
669
+ function isSyntheticMessengerThreadKey(threadKey) {
670
+ return threadKey === "issues"
671
+ || threadKey === "approvals"
672
+ || threadKey === "failed-runs"
673
+ || threadKey === "budget-alerts"
674
+ || threadKey === "join-requests";
675
+ }
658
676
  async function getCustomGroupOrThrow(orgId, userId, groupId) {
659
677
  const [group] = await db
660
678
  .select()
@@ -665,15 +683,91 @@ export function messengerService(db) {
665
683
  throw notFound("Messenger custom group not found");
666
684
  return group;
667
685
  }
668
- async function ensureChatThreadCanBeGrouped(orgId, userId, threadKey) {
686
+ async function loadIssueThreadSummaryById(orgId, userId, issueId) {
687
+ const lastReadAtPromise = lastReadAtForThread(db, orgId, userId, "issues");
688
+ const rows = (await db.execute(issueEntryRowsQuery(orgId, userId, sql `
689
+ where id = ${issueId}
690
+ limit 1
691
+ `)));
692
+ const entry = rows[0] ? issueThreadEntryFromRow(rows[0], userId) : null;
693
+ if (!entry)
694
+ return null;
695
+ const [card] = await buildIssueCardsForEntries(orgId, userId, [entry], "latest");
696
+ if (!card)
697
+ return null;
698
+ const lastReadAt = await lastReadAtPromise;
699
+ const issueThreadStates = await loadThreadStates(db, orgId, userId, [`issue:${issueId}`]);
700
+ return splitIssueSummary(card.entry, card.item, lastReadAt, issueThreadStates.get(`issue:${issueId}`) ?? null);
701
+ }
702
+ async function loadSyntheticThreadSummaryByKey(orgId, userId, threadKey) {
703
+ const syntheticThreadStates = loadThreadStates(db, orgId, userId, [
704
+ "issues",
705
+ "approvals",
706
+ "failed-runs",
707
+ "budget-alerts",
708
+ "join-requests",
709
+ ]);
710
+ switch (threadKey) {
711
+ case "issues": {
712
+ const data = await loadIssueThreadSummaryData(orgId, userId, syntheticThreadStates);
713
+ return data.itemCount > 0 ? data.summary : null;
714
+ }
715
+ case "approvals": {
716
+ const data = await loadApprovalThreadSummaryData(orgId, userId, syntheticThreadStates);
717
+ return data.itemCount > 0 ? data.summary : null;
718
+ }
719
+ case "failed-runs": {
720
+ const data = await loadFailedRunSummaryData(orgId, userId, syntheticThreadStates);
721
+ return data.itemCount > 0 ? data.summary : null;
722
+ }
723
+ case "budget-alerts": {
724
+ const data = await loadBudgetAlertData(orgId, userId, syntheticThreadStates);
725
+ return data.detail.items.length > 0 ? data.summary : null;
726
+ }
727
+ case "join-requests": {
728
+ const data = await loadJoinRequestSummaryData(orgId, userId, syntheticThreadStates);
729
+ return data.itemCount > 0 ? data.summary : null;
730
+ }
731
+ default:
732
+ return null;
733
+ }
734
+ }
735
+ async function findMessengerThreadSummary(orgId, userId, threadKey) {
669
736
  const conversationId = chatConversationIdFromThreadKey(threadKey);
670
- if (!conversationId) {
671
- throw badRequest("Only chat threads can be added to custom Messenger groups");
737
+ if (conversationId) {
738
+ const conversations = await chatsSvc.listSummariesByIds(orgId, [conversationId], userId);
739
+ const conversation = conversations[0];
740
+ return conversation ? chatSummary(conversation) : null;
672
741
  }
673
- const conversations = await chatsSvc.listSummariesByIds(orgId, [conversationId], userId);
674
- if (conversations.length === 0) {
675
- throw notFound("Messenger chat thread not found");
742
+ const issueId = issueIdFromThreadKey(threadKey);
743
+ if (issueId) {
744
+ return loadIssueThreadSummaryById(orgId, userId, issueId);
676
745
  }
746
+ return loadSyntheticThreadSummaryByKey(orgId, userId, threadKey);
747
+ }
748
+ async function ensureMessengerThreadCanBeGrouped(orgId, userId, threadKey) {
749
+ const summary = await findMessengerThreadSummary(orgId, userId, threadKey);
750
+ if (!summary) {
751
+ throw notFound("Messenger thread not found");
752
+ }
753
+ }
754
+ async function listThreadTitles(orgId, userId, threadKeys) {
755
+ const titles = [];
756
+ for (const threadKey of [...new Set(threadKeys)]) {
757
+ const summary = await findMessengerThreadSummary(orgId, userId, threadKey);
758
+ if (summary?.title)
759
+ titles.push(summary.title);
760
+ }
761
+ return titles;
762
+ }
763
+ async function listCustomGroupThreadTitles(orgId, userId, groupId) {
764
+ await getCustomGroupOrThrow(orgId, userId, groupId);
765
+ const entries = await db
766
+ .select({ threadKey: messengerCustomGroupEntries.threadKey })
767
+ .from(messengerCustomGroupEntries)
768
+ .where(and(eq(messengerCustomGroupEntries.orgId, orgId), eq(messengerCustomGroupEntries.userId, userId), eq(messengerCustomGroupEntries.groupId, groupId)))
769
+ .orderBy(asc(messengerCustomGroupEntries.sortOrder), asc(messengerCustomGroupEntries.createdAt));
770
+ return listThreadTitles(orgId, userId, entries.map((entry) => entry.threadKey));
677
771
  }
678
772
  async function listCustomGroups(orgId, userId) {
679
773
  const [groups, entries] = await Promise.all([
@@ -681,17 +775,15 @@ export function messengerService(db) {
681
775
  .select()
682
776
  .from(messengerCustomGroups)
683
777
  .where(and(eq(messengerCustomGroups.orgId, orgId), eq(messengerCustomGroups.userId, userId)))
684
- .orderBy(asc(messengerCustomGroups.sortOrder), asc(messengerCustomGroups.createdAt)),
778
+ .orderBy(sql `${messengerCustomGroups.pinnedAt} IS NULL`, asc(messengerCustomGroups.sortOrder), asc(messengerCustomGroups.createdAt)),
685
779
  db
686
780
  .select()
687
781
  .from(messengerCustomGroupEntries)
688
782
  .where(and(eq(messengerCustomGroupEntries.orgId, orgId), eq(messengerCustomGroupEntries.userId, userId)))
689
783
  .orderBy(asc(messengerCustomGroupEntries.sortOrder), asc(messengerCustomGroupEntries.createdAt)),
690
784
  ]);
691
- const chatThreadKeys = entries
785
+ const conversationIds = entries
692
786
  .map((entry) => entry.threadKey)
693
- .filter((threadKey) => Boolean(chatConversationIdFromThreadKey(threadKey)));
694
- const conversationIds = chatThreadKeys
695
787
  .map((threadKey) => chatConversationIdFromThreadKey(threadKey))
696
788
  .filter((id) => Boolean(id));
697
789
  const conversations = await chatsSvc.listSummariesByIds(orgId, conversationIds, userId);
@@ -699,11 +791,36 @@ export function messengerService(db) {
699
791
  const summary = chatSummary(conversation);
700
792
  return [summary.threadKey, summary];
701
793
  }));
794
+ const nonChatThreadKeys = [...new Set(entries
795
+ .map((entry) => entry.threadKey)
796
+ .filter((threadKey) => !chatConversationIdFromThreadKey(threadKey)))];
797
+ const issueThreadKeys = nonChatThreadKeys.filter((threadKey) => Boolean(issueIdFromThreadKey(threadKey)));
798
+ if (nonChatThreadKeys.length > 0) {
799
+ const syntheticThreadKeys = nonChatThreadKeys.filter((threadKey) => !issueIdFromThreadKey(threadKey));
800
+ const [issueSummaries, syntheticSummaries] = await Promise.all([
801
+ Promise.all(issueThreadKeys.map(async (threadKey) => {
802
+ const issueId = issueIdFromThreadKey(threadKey);
803
+ return issueId ? loadIssueThreadSummaryById(orgId, userId, issueId) : null;
804
+ })),
805
+ Promise.all(syntheticThreadKeys.map((threadKey) => loadSyntheticThreadSummaryByKey(orgId, userId, threadKey))),
806
+ ]);
807
+ for (const summary of issueSummaries) {
808
+ if (summary)
809
+ summaryByThreadKey.set(summary.threadKey, summary);
810
+ }
811
+ for (const summary of syntheticSummaries) {
812
+ if (summary)
813
+ summaryByThreadKey.set(summary.threadKey, summary);
814
+ }
815
+ }
702
816
  const staleEntryIds = [];
703
817
  const entriesByGroupId = new Map();
704
818
  for (const entry of entries) {
705
819
  const summary = summaryByThreadKey.get(entry.threadKey);
706
820
  if (!summary) {
821
+ if (isSyntheticMessengerThreadKey(entry.threadKey)) {
822
+ continue;
823
+ }
707
824
  staleEntryIds.push(entry.id);
708
825
  continue;
709
826
  }
@@ -745,6 +862,7 @@ export function messengerService(db) {
745
862
  name,
746
863
  icon,
747
864
  sortOrder: (lastGroup?.sortOrder ?? -1) + 1,
865
+ pinnedAt: now,
748
866
  updatedAt: now,
749
867
  })
750
868
  .returning();
@@ -755,10 +873,15 @@ export function messengerService(db) {
755
873
  }
756
874
  async function updateCustomGroup(orgId, userId, groupId, patch) {
757
875
  await getCustomGroupOrThrow(orgId, userId, groupId);
876
+ const { pinned, ...groupPatch } = patch;
877
+ const updatePatch = {
878
+ ...groupPatch,
879
+ ...(typeof pinned === "boolean" ? { pinnedAt: pinned ? new Date() : null } : {}),
880
+ };
758
881
  const [group] = await db
759
882
  .update(messengerCustomGroups)
760
883
  .set({
761
- ...patch,
884
+ ...updatePatch,
762
885
  updatedAt: new Date(),
763
886
  })
764
887
  .where(and(eq(messengerCustomGroups.orgId, orgId), eq(messengerCustomGroups.userId, userId), eq(messengerCustomGroups.id, groupId)))
@@ -797,7 +920,7 @@ export function messengerService(db) {
797
920
  return listCustomGroups(orgId, userId);
798
921
  }
799
922
  async function assignThreadToCustomGroupWithClient(client, orgId, userId, groupId, threadKey) {
800
- await ensureChatThreadCanBeGrouped(orgId, userId, threadKey);
923
+ await ensureMessengerThreadCanBeGrouped(orgId, userId, threadKey);
801
924
  const [lastEntry] = await client
802
925
  .select({ sortOrder: messengerCustomGroupEntries.sortOrder })
803
926
  .from(messengerCustomGroupEntries)
@@ -1228,6 +1351,14 @@ export function messengerService(db) {
1228
1351
  `));
1229
1352
  return normalizeDate(rows[0]?.latestActivityAt ?? null);
1230
1353
  }
1354
+ async function loadLatestIssueAttentionAtById(orgId, userId, issueId) {
1355
+ const rows = (await db.execute(sql `
1356
+ select max("attentionActivityAt") as "latestActivityAt"
1357
+ from (${issueEntryRowsQuery(orgId, userId, sql `where id = ${issueId} limit 1`)}) issue_entry_stats
1358
+ where "attentionActivityAt" is not null
1359
+ `));
1360
+ return normalizeDate(rows[0]?.latestActivityAt ?? null);
1361
+ }
1231
1362
  async function loadLatestIssueDisplayEntry(orgId, userId) {
1232
1363
  const rows = (await db.execute(issueEntryRowsQuery(orgId, userId, sql `
1233
1364
  order by "latestActivityAt" desc, id asc
@@ -1423,7 +1554,6 @@ export function messengerService(db) {
1423
1554
  }
1424
1555
  async function loadApprovalThreadSummaryData(orgId, userId, threadStates) {
1425
1556
  const lastReadAt = await lastReadAtForThread(db, orgId, userId, "approvals", threadStates);
1426
- const approvalPredicate = eq(approvals.orgId, orgId);
1427
1557
  const pendingApprovalPredicate = and(eq(approvals.orgId, orgId), eq(approvals.status, "pending"));
1428
1558
  const [summaryRows, latestApprovalRows, latestCommentRows, unreadRows] = await Promise.all([
1429
1559
  db
@@ -1431,11 +1561,11 @@ export function messengerService(db) {
1431
1561
  itemCount: sql `count(*)::int`,
1432
1562
  })
1433
1563
  .from(approvals)
1434
- .where(approvalPredicate),
1564
+ .where(pendingApprovalPredicate),
1435
1565
  db
1436
1566
  .select()
1437
1567
  .from(approvals)
1438
- .where(approvalPredicate)
1568
+ .where(pendingApprovalPredicate)
1439
1569
  .orderBy(desc(approvals.updatedAt), desc(approvals.createdAt))
1440
1570
  .limit(1),
1441
1571
  db
@@ -1457,6 +1587,7 @@ export function messengerService(db) {
1457
1587
  limit 1
1458
1588
  ) latest_comment on true
1459
1589
  where ${approvals.orgId} = ${orgId}
1590
+ and ${approvals.status} = 'pending'
1460
1591
  order by latest_comment.created_at desc
1461
1592
  limit 1
1462
1593
  `),
@@ -1485,7 +1616,7 @@ export function messengerService(db) {
1485
1616
  ? await db
1486
1617
  .select()
1487
1618
  .from(approvals)
1488
- .where(and(eq(approvals.id, latestCommentRow.approvalId), approvalPredicate))
1619
+ .where(and(eq(approvals.id, latestCommentRow.approvalId), pendingApprovalPredicate))
1489
1620
  .limit(1)
1490
1621
  : [];
1491
1622
  const candidateItems = [];
@@ -1518,6 +1649,8 @@ export function messengerService(db) {
1518
1649
  agentId: heartbeatRuns.agentId,
1519
1650
  status: heartbeatRuns.status,
1520
1651
  error: heartbeatRuns.error,
1652
+ errorCode: heartbeatRuns.errorCode,
1653
+ resultJson: heartbeatRuns.resultJson,
1521
1654
  stderrExcerpt: heartbeatRuns.stderrExcerpt,
1522
1655
  stdoutExcerpt: heartbeatRuns.stdoutExcerpt,
1523
1656
  contextSnapshot: heartbeatRuns.contextSnapshot,
@@ -1556,7 +1689,7 @@ export function messengerService(db) {
1556
1689
  needsAttention: unreadCount > 0,
1557
1690
  isPinned: false,
1558
1691
  href: "/messenger/system/failed-runs",
1559
- description: "Recent failed heartbeat runs",
1692
+ description: "Recent failed agent runs",
1560
1693
  items: chronologicalItems,
1561
1694
  },
1562
1695
  };
@@ -1576,6 +1709,8 @@ export function messengerService(db) {
1576
1709
  db
1577
1710
  .select({
1578
1711
  error: heartbeatRuns.error,
1712
+ errorCode: heartbeatRuns.errorCode,
1713
+ resultJson: heartbeatRuns.resultJson,
1579
1714
  stderrExcerpt: heartbeatRuns.stderrExcerpt,
1580
1715
  })
1581
1716
  .from(heartbeatRuns)
@@ -1597,7 +1732,7 @@ export function messengerService(db) {
1597
1732
  const unreadCount = lastReadAt ? Number(unreadRows[0]?.unreadCount ?? 0) : itemCount;
1598
1733
  return {
1599
1734
  itemCount,
1600
- summary: systemSummary("failed-runs", "Failed runs", itemCount, normalizeDate(summaryRow?.latestActivityAt ?? null), unreadCount, lastReadAt, "No failed runs yet", latestRun ? FAILED_RUN_USER_SUMMARY : null),
1735
+ summary: systemSummary("failed-runs", "Failed runs", itemCount, normalizeDate(summaryRow?.latestActivityAt ?? null), unreadCount, lastReadAt, "No failed runs yet", latestRun ? failedRunUserSummary(latestRun) : null),
1601
1736
  };
1602
1737
  }
1603
1738
  async function loadBudgetAlertData(orgId, userId, threadStates) {
@@ -1859,15 +1994,17 @@ export function messengerService(db) {
1859
1994
  return null;
1860
1995
  return { lastReadAt: state.lastReadAt };
1861
1996
  }
1997
+ const now = new Date();
1998
+ let effectiveReadAt = readAt;
1862
1999
  if (threadKey.startsWith("issue:")) {
1863
2000
  const issueId = threadKey.slice("issue:".length);
1864
2001
  if (!await canUseIssueThread(orgId, userId, issueId))
1865
2002
  return null;
2003
+ effectiveReadAt = maxDate(readAt, await loadLatestIssueAttentionAtById(orgId, userId, issueId)) ?? readAt;
2004
+ }
2005
+ else if (threadKey === "issues") {
2006
+ effectiveReadAt = maxDate(readAt, await loadLatestIssueAttentionAt(orgId, userId)) ?? readAt;
1866
2007
  }
1867
- const now = new Date();
1868
- const effectiveReadAt = threadKey === "issues"
1869
- ? maxDate(readAt, await loadLatestIssueAttentionAt(orgId, userId)) ?? readAt
1870
- : readAt;
1871
2008
  const [row] = await db
1872
2009
  .insert(messengerThreadUserStates)
1873
2010
  .values({
@@ -1891,6 +2028,20 @@ export function messengerService(db) {
1891
2028
  .returning();
1892
2029
  return row ? { lastReadAt: row.lastReadAt } : null;
1893
2030
  }
2031
+ async function dismissUnreadThreads(orgId, userId) {
2032
+ const summaries = await listThreadSummaries(orgId, userId);
2033
+ const unreadSummaries = summaries.filter((summary) => summary.unreadCount > 0);
2034
+ const dismissedThreadKeys = [];
2035
+ for (const summary of unreadSummaries) {
2036
+ const state = await markThreadRead(orgId, userId, summary.threadKey, normalizeDate(summary.latestActivityAt) ?? new Date());
2037
+ if (state)
2038
+ dismissedThreadKeys.push(summary.threadKey);
2039
+ }
2040
+ return {
2041
+ dismissedCount: dismissedThreadKeys.length,
2042
+ dismissedThreadKeys,
2043
+ };
2044
+ }
1894
2045
  async function canUseIssueThread(orgId, userId, issueId) {
1895
2046
  const [row] = await db
1896
2047
  .select({ id: issues.id })
@@ -1901,6 +2052,14 @@ export function messengerService(db) {
1901
2052
  where follow_row.org_id = ${orgId}
1902
2053
  and follow_row.user_id = ${userId}
1903
2054
  and follow_row.issue_id = ${issues.id}
2055
+ )`, sql `exists (
2056
+ select 1
2057
+ from ${activityLog} automation_notification_activity
2058
+ where automation_notification_activity.org_id = ${orgId}
2059
+ and automation_notification_activity.entity_type = 'issue'
2060
+ and automation_notification_activity.entity_id = ${issues.id}::text
2061
+ and automation_notification_activity.action = 'automation.issue_created_notification'
2062
+ and automation_notification_activity.details->>'userId' = ${userId}
1904
2063
  )`)))
1905
2064
  .limit(1);
1906
2065
  return Boolean(row);
@@ -1947,6 +2106,8 @@ export function messengerService(db) {
1947
2106
  }
1948
2107
  return {
1949
2108
  listCustomGroups,
2109
+ listThreadTitles,
2110
+ listCustomGroupThreadTitles,
1950
2111
  createCustomGroup,
1951
2112
  createCustomGroupWithEntries,
1952
2113
  updateCustomGroup,
@@ -1964,6 +2125,7 @@ export function messengerService(db) {
1964
2125
  getApprovalsThread,
1965
2126
  getSystemThread,
1966
2127
  getThreadState,
2128
+ dismissUnreadThreads,
1967
2129
  markThreadRead,
1968
2130
  setThreadRead: markThreadRead,
1969
2131
  setThreadPinned,