@rudderhq/server 0.3.6-canary.9 → 0.4.0

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 (325) 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 +35 -2
  5. package/dist/bundled-plugins/plugin-linear/dist/worker.js.map +2 -2
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +103 -26
  8. package/dist/index.js.map +1 -1
  9. package/dist/routes/activity.d.ts +1 -1
  10. package/dist/routes/activity.d.ts.map +1 -1
  11. package/dist/routes/activity.js +21 -5
  12. package/dist/routes/activity.js.map +1 -1
  13. package/dist/routes/agents.d.ts.map +1 -1
  14. package/dist/routes/agents.js +254 -4
  15. package/dist/routes/agents.js.map +1 -1
  16. package/dist/routes/agents.management-routes.d.ts.map +1 -1
  17. package/dist/routes/agents.management-routes.js +132 -40
  18. package/dist/routes/agents.management-routes.js.map +1 -1
  19. package/dist/routes/automations.d.ts +8 -0
  20. package/dist/routes/automations.d.ts.map +1 -1
  21. package/dist/routes/automations.js.map +1 -1
  22. package/dist/routes/chats.d.ts.map +1 -1
  23. package/dist/routes/chats.js +228 -115
  24. package/dist/routes/chats.js.map +1 -1
  25. package/dist/routes/chats.stream-routes.d.ts.map +1 -1
  26. package/dist/routes/chats.stream-routes.js +94 -5
  27. package/dist/routes/chats.stream-routes.js.map +1 -1
  28. package/dist/routes/issues.comments-attachments.d.ts.map +1 -1
  29. package/dist/routes/issues.comments-attachments.js +72 -83
  30. package/dist/routes/issues.comments-attachments.js.map +1 -1
  31. package/dist/routes/issues.d.ts +8 -0
  32. package/dist/routes/issues.d.ts.map +1 -1
  33. package/dist/routes/issues.js +0 -4
  34. package/dist/routes/issues.js.map +1 -1
  35. package/dist/routes/issues.mutations.d.ts.map +1 -1
  36. package/dist/routes/issues.mutations.js +2 -26
  37. package/dist/routes/issues.mutations.js.map +1 -1
  38. package/dist/routes/messenger.d.ts.map +1 -1
  39. package/dist/routes/messenger.js +33 -1
  40. package/dist/routes/messenger.js.map +1 -1
  41. package/dist/routes/orgs.d.ts.map +1 -1
  42. package/dist/routes/orgs.js +16 -0
  43. package/dist/routes/orgs.js.map +1 -1
  44. package/dist/routes/plugin-ui-static.d.ts +4 -4
  45. package/dist/routes/plugin-ui-static.js +5 -5
  46. package/dist/routes/plugin-ui-static.js.map +1 -1
  47. package/dist/routes/plugins.d.ts +4 -4
  48. package/dist/routes/plugins.js +10 -10
  49. package/dist/routes/plugins.operations-routes.d.ts +1 -1
  50. package/dist/routes/plugins.operations-routes.js +2 -2
  51. package/dist/routes/plugins.operations-routes.js.map +1 -1
  52. package/dist/routes/run-intelligence.js +5 -5
  53. package/dist/routes/run-intelligence.js.map +1 -1
  54. package/dist/routes/website-metadata.d.ts +8 -0
  55. package/dist/routes/website-metadata.d.ts.map +1 -0
  56. package/dist/routes/website-metadata.js +67 -0
  57. package/dist/routes/website-metadata.js.map +1 -0
  58. package/dist/services/activity.d.ts.map +1 -1
  59. package/dist/services/activity.js +1 -1
  60. package/dist/services/activity.js.map +1 -1
  61. package/dist/services/agent-instructions.d.ts +1 -0
  62. package/dist/services/agent-instructions.d.ts.map +1 -1
  63. package/dist/services/agent-instructions.js +57 -6
  64. package/dist/services/agent-instructions.js.map +1 -1
  65. package/dist/services/agent-run-context.d.ts +3 -1
  66. package/dist/services/agent-run-context.d.ts.map +1 -1
  67. package/dist/services/agent-run-context.js +7 -0
  68. package/dist/services/agent-run-context.js.map +1 -1
  69. package/dist/services/agent-startup-context.d.ts +2 -1
  70. package/dist/services/agent-startup-context.d.ts.map +1 -1
  71. package/dist/services/agent-startup-context.js +6 -26
  72. package/dist/services/agent-startup-context.js.map +1 -1
  73. package/dist/services/agents.d.ts +9 -1
  74. package/dist/services/agents.d.ts.map +1 -1
  75. package/dist/services/agents.js.map +1 -1
  76. package/dist/services/approvals.d.ts +8 -0
  77. package/dist/services/approvals.d.ts.map +1 -1
  78. package/dist/services/approvals.js.map +1 -1
  79. package/dist/services/automation-chat-output.d.ts +1 -1
  80. package/dist/services/automations.d.ts +4 -4
  81. package/dist/services/automations.d.ts.map +1 -1
  82. package/dist/services/automations.js +12 -0
  83. package/dist/services/automations.js.map +1 -1
  84. package/dist/services/budgets.d.ts +8 -0
  85. package/dist/services/budgets.d.ts.map +1 -1
  86. package/dist/services/budgets.js.map +1 -1
  87. package/dist/services/calendar.d.ts +2 -2
  88. package/dist/services/calendar.js +3 -3
  89. package/dist/services/calendar.js.map +1 -1
  90. package/dist/services/chat-agent-runs.d.ts +2 -0
  91. package/dist/services/chat-agent-runs.d.ts.map +1 -1
  92. package/dist/services/chat-agent-runs.js +6 -0
  93. package/dist/services/chat-agent-runs.js.map +1 -1
  94. package/dist/services/chat-assistant.d.ts.map +1 -1
  95. package/dist/services/chat-assistant.helpers.d.ts +1 -0
  96. package/dist/services/chat-assistant.helpers.d.ts.map +1 -1
  97. package/dist/services/chat-assistant.helpers.js +7 -10
  98. package/dist/services/chat-assistant.helpers.js.map +1 -1
  99. package/dist/services/chat-assistant.js +23 -6
  100. package/dist/services/chat-assistant.js.map +1 -1
  101. package/dist/services/chat-generation-locks.d.ts +6 -1
  102. package/dist/services/chat-generation-locks.d.ts.map +1 -1
  103. package/dist/services/chat-generation-locks.js +20 -2
  104. package/dist/services/chat-generation-locks.js.map +1 -1
  105. package/dist/services/chat-title-generation.d.ts +36 -0
  106. package/dist/services/chat-title-generation.d.ts.map +1 -0
  107. package/dist/services/chat-title-generation.js +107 -0
  108. package/dist/services/chat-title-generation.js.map +1 -0
  109. package/dist/services/chats.d.ts +471 -25
  110. package/dist/services/chats.d.ts.map +1 -1
  111. package/dist/services/chats.helpers.d.ts +2 -2
  112. package/dist/services/chats.js +651 -35
  113. package/dist/services/chats.js.map +1 -1
  114. package/dist/services/costs.d.ts +1 -1
  115. package/dist/services/finance.d.ts +2 -2
  116. package/dist/services/finance.js +1 -1
  117. package/dist/services/finance.js.map +1 -1
  118. package/dist/services/goals.d.ts +8 -0
  119. package/dist/services/goals.d.ts.map +1 -1
  120. package/dist/services/goals.js.map +1 -1
  121. package/dist/services/heartbeat-run-reference.d.ts +1 -0
  122. package/dist/services/heartbeat-run-reference.d.ts.map +1 -1
  123. package/dist/services/heartbeat-run-reference.js +3 -2
  124. package/dist/services/heartbeat-run-reference.js.map +1 -1
  125. package/dist/services/integrations/agent-integrations.d.ts +19 -0
  126. package/dist/services/integrations/agent-integrations.d.ts.map +1 -1
  127. package/dist/services/integrations/agent-integrations.js +30 -0
  128. package/dist/services/integrations/agent-integrations.js.map +1 -1
  129. package/dist/services/integrations/feishu/app-registration.d.ts +74 -0
  130. package/dist/services/integrations/feishu/app-registration.d.ts.map +1 -0
  131. package/dist/services/integrations/feishu/app-registration.js +226 -0
  132. package/dist/services/integrations/feishu/app-registration.js.map +1 -0
  133. package/dist/services/integrations/feishu/inbound-dispatcher-db.d.ts +4 -0
  134. package/dist/services/integrations/feishu/inbound-dispatcher-db.d.ts.map +1 -1
  135. package/dist/services/integrations/feishu/inbound-dispatcher-db.js +35 -5
  136. package/dist/services/integrations/feishu/inbound-dispatcher-db.js.map +1 -1
  137. package/dist/services/integrations/feishu/inbound-dispatcher.d.ts +2 -0
  138. package/dist/services/integrations/feishu/inbound-dispatcher.d.ts.map +1 -1
  139. package/dist/services/integrations/feishu/inbound-dispatcher.js.map +1 -1
  140. package/dist/services/integrations/feishu/runtime-registry.d.ts +20 -0
  141. package/dist/services/integrations/feishu/runtime-registry.d.ts.map +1 -0
  142. package/dist/services/integrations/feishu/runtime-registry.js +41 -0
  143. package/dist/services/integrations/feishu/runtime-registry.js.map +1 -0
  144. package/dist/services/integrations/feishu/runtime.d.ts +21 -23
  145. package/dist/services/integrations/feishu/runtime.d.ts.map +1 -1
  146. package/dist/services/integrations/feishu/runtime.js +135 -45
  147. package/dist/services/integrations/feishu/runtime.js.map +1 -1
  148. package/dist/services/integrations/feishu/user-bindings.d.ts +22 -0
  149. package/dist/services/integrations/feishu/user-bindings.d.ts.map +1 -0
  150. package/dist/services/integrations/feishu/user-bindings.js +57 -0
  151. package/dist/services/integrations/feishu/user-bindings.js.map +1 -0
  152. package/dist/services/issue-approvals.d.ts +2 -2
  153. package/dist/services/issue-review-wakeup.js +1 -1
  154. package/dist/services/issue-review-wakeup.js.map +1 -1
  155. package/dist/services/issues.comments-attachments.d.ts +3 -3
  156. package/dist/services/issues.d.ts +14 -6
  157. package/dist/services/issues.d.ts.map +1 -1
  158. package/dist/services/issues.helpers.d.ts +9 -1
  159. package/dist/services/issues.helpers.d.ts.map +1 -1
  160. package/dist/services/issues.helpers.js +8 -0
  161. package/dist/services/issues.helpers.js.map +1 -1
  162. package/dist/services/issues.js +1 -1
  163. package/dist/services/issues.js.map +1 -1
  164. package/dist/services/knowledge-portability/organization-skills.catalog.d.ts +1 -1
  165. package/dist/services/library-entries.d.ts +8 -0
  166. package/dist/services/library-entries.d.ts.map +1 -1
  167. package/dist/services/library-entries.js +8 -0
  168. package/dist/services/library-entries.js.map +1 -1
  169. package/dist/services/messenger.d.ts +19 -4
  170. package/dist/services/messenger.d.ts.map +1 -1
  171. package/dist/services/messenger.js +136 -18
  172. package/dist/services/messenger.js.map +1 -1
  173. package/dist/services/plugin-capability-validator.d.ts +1 -1
  174. package/dist/services/plugin-capability-validator.js +2 -2
  175. package/dist/services/plugin-dev-watcher.js +1 -1
  176. package/dist/services/plugin-event-bus.d.ts +3 -3
  177. package/dist/services/plugin-event-bus.js +3 -3
  178. package/dist/services/plugin-job-coordinator.d.ts +1 -1
  179. package/dist/services/plugin-job-coordinator.js +1 -1
  180. package/dist/services/plugin-job-scheduler.d.ts +1 -1
  181. package/dist/services/plugin-job-scheduler.js +1 -1
  182. package/dist/services/plugin-job-store.d.ts +2 -2
  183. package/dist/services/plugin-job-store.js +2 -2
  184. package/dist/services/plugin-lifecycle.d.ts +4 -4
  185. package/dist/services/plugin-lifecycle.js +3 -3
  186. package/dist/services/plugin-loader.core.d.ts +4 -4
  187. package/dist/services/plugin-loader.core.js +2 -2
  188. package/dist/services/plugin-loader.core.js.map +1 -1
  189. package/dist/services/plugin-loader.d.ts +3 -3
  190. package/dist/services/plugin-loader.helpers.d.ts +26 -25
  191. package/dist/services/plugin-loader.helpers.d.ts.map +1 -1
  192. package/dist/services/plugin-loader.helpers.js +10 -9
  193. package/dist/services/plugin-loader.helpers.js.map +1 -1
  194. package/dist/services/plugin-loader.js +3 -3
  195. package/dist/services/plugin-loader.worker-paths.d.ts +3 -3
  196. package/dist/services/plugin-manifest-validator.d.ts +2 -2
  197. package/dist/services/plugin-registry.d.ts +9 -9
  198. package/dist/services/plugin-registry.js +1 -1
  199. package/dist/services/plugin-secrets-handler.d.ts +2 -2
  200. package/dist/services/plugin-secrets-handler.js +2 -2
  201. package/dist/services/plugin-state-store.d.ts +3 -3
  202. package/dist/services/plugin-state-store.js +3 -3
  203. package/dist/services/plugin-stream-bus.d.ts +1 -1
  204. package/dist/services/plugin-stream-bus.js +1 -1
  205. package/dist/services/plugin-tool-dispatcher.d.ts +2 -2
  206. package/dist/services/plugin-tool-dispatcher.js +2 -2
  207. package/dist/services/plugin-tool-registry.d.ts +2 -2
  208. package/dist/services/plugin-tool-registry.js +2 -2
  209. package/dist/services/plugin-worker-manager.d.ts +4 -4
  210. package/dist/services/plugin-worker-manager.d.ts.map +1 -1
  211. package/dist/services/plugin-worker-manager.js +8 -7
  212. package/dist/services/plugin-worker-manager.js.map +1 -1
  213. package/dist/services/run-intelligence.js +3 -3
  214. package/dist/services/run-intelligence.js.map +1 -1
  215. package/dist/services/runtime-kernel/heartbeat.core.d.ts +9 -1
  216. package/dist/services/runtime-kernel/heartbeat.core.d.ts.map +1 -1
  217. package/dist/services/runtime-kernel/heartbeat.core.js +16 -5
  218. package/dist/services/runtime-kernel/heartbeat.core.js.map +1 -1
  219. package/dist/services/runtime-kernel/heartbeat.d.ts +3 -3
  220. package/dist/services/runtime-kernel/heartbeat.execute.d.ts.map +1 -1
  221. package/dist/services/runtime-kernel/heartbeat.execute.js +17 -3
  222. package/dist/services/runtime-kernel/heartbeat.execute.js.map +1 -1
  223. package/dist/services/runtime-kernel/heartbeat.misc.js +1 -1
  224. package/dist/services/runtime-kernel/heartbeat.recovery.d.ts +1 -1
  225. package/dist/services/runtime-kernel/heartbeat.recovery.js +7 -7
  226. package/dist/services/runtime-kernel/heartbeat.recovery.js.map +1 -1
  227. package/dist/services/runtime-kernel/heartbeat.release.js +4 -4
  228. package/dist/services/runtime-kernel/heartbeat.release.js.map +1 -1
  229. package/dist/services/runtime-kernel/heartbeat.wakeup.js +1 -1
  230. package/dist/services/sidebar-badges.d.ts.map +1 -1
  231. package/dist/services/sidebar-badges.js +13 -1
  232. package/dist/services/sidebar-badges.js.map +1 -1
  233. package/dist/services/title-generation.d.ts +13 -0
  234. package/dist/services/title-generation.d.ts.map +1 -0
  235. package/dist/services/title-generation.js +77 -0
  236. package/dist/services/title-generation.js.map +1 -0
  237. package/dist/services/website-metadata.d.ts +17 -0
  238. package/dist/services/website-metadata.d.ts.map +1 -0
  239. package/dist/services/website-metadata.js +293 -0
  240. package/dist/services/website-metadata.js.map +1 -0
  241. package/dist/services/workspace-backups.d.ts +22 -0
  242. package/dist/services/workspace-backups.d.ts.map +1 -1
  243. package/dist/services/workspace-backups.js +161 -5
  244. package/dist/services/workspace-backups.js.map +1 -1
  245. package/dist/services/workspace-runtime.services.d.ts +1 -1
  246. package/package.json +14 -13
  247. package/resources/bundled-skills/rudder/SKILL.md +7 -6
  248. package/resources/bundled-skills/rudder/references/cli-reference.md +3 -3
  249. package/resources/bundled-skills/rudder-create-plugin/SKILL.md +2 -2
  250. package/skills/rudder/SKILL.md +7 -6
  251. package/skills/rudder/references/cli-reference.md +3 -3
  252. package/skills/rudder-create-plugin/SKILL.md +2 -2
  253. package/ui-dist/assets/{_basePickBy-CM0XatHw.js → _basePickBy-CyhMvFCw.js} +1 -1
  254. package/ui-dist/assets/{_baseUniq-CdBBmdoP.js → _baseUniq-k3x-egdv.js} +1 -1
  255. package/ui-dist/assets/{arc-DSTtxyJ9.js → arc-DVwZMGLR.js} +1 -1
  256. package/ui-dist/assets/{architectureDiagram-2XIMDMQ5-BkHMYb5I.js → architectureDiagram-2XIMDMQ5-BvKp7DHW.js} +1 -1
  257. package/ui-dist/assets/{blockDiagram-WCTKOSBZ-EYczZxwW.js → blockDiagram-WCTKOSBZ-CQ0KLoGd.js} +1 -1
  258. package/ui-dist/assets/{c4Diagram-IC4MRINW-Xo9qijMi.js → c4Diagram-IC4MRINW-BY44eeD7.js} +1 -1
  259. package/ui-dist/assets/channel-Cb8ybYSt.js +1 -0
  260. package/ui-dist/assets/{chunk-4BX2VUAB-CKzta1FF.js → chunk-4BX2VUAB-D7D6PuZU.js} +1 -1
  261. package/ui-dist/assets/{chunk-55IACEB6-BxxUB0ww.js → chunk-55IACEB6-CraDwywJ.js} +1 -1
  262. package/ui-dist/assets/{chunk-FMBD7UC4-0F4oxVtY.js → chunk-FMBD7UC4-BGYh4kbq.js} +1 -1
  263. package/ui-dist/assets/{chunk-JSJVCQXG-CVMPMlVD.js → chunk-JSJVCQXG-DndeOLp_.js} +1 -1
  264. package/ui-dist/assets/{chunk-KX2RTZJC-lPrAWT94.js → chunk-KX2RTZJC-Cx0eOadl.js} +1 -1
  265. package/ui-dist/assets/{chunk-NQ4KR5QH-Bufcm7Iv.js → chunk-NQ4KR5QH-PNVbQ_36.js} +1 -1
  266. package/ui-dist/assets/{chunk-QZHKN3VN-CucmdWnl.js → chunk-QZHKN3VN-DKsTZ1-C.js} +1 -1
  267. package/ui-dist/assets/{chunk-WL4C6EOR-Dz0oYQrJ.js → chunk-WL4C6EOR-B4aSDSws.js} +1 -1
  268. package/ui-dist/assets/classDiagram-VBA2DB6C-US2diuPm.js +1 -0
  269. package/ui-dist/assets/classDiagram-v2-RAHNMMFH-US2diuPm.js +1 -0
  270. package/ui-dist/assets/clone-CbFoFrhF.js +1 -0
  271. package/ui-dist/assets/{cose-bilkent-S5V4N54A-DzyX-Er8.js → cose-bilkent-S5V4N54A-DwgS7_iT.js} +1 -1
  272. package/ui-dist/assets/{dagre-KLK3FWXG-BbZzCKuN.js → dagre-KLK3FWXG-CGMeHr1L.js} +1 -1
  273. package/ui-dist/assets/{diagram-E7M64L7V-B5Rb7Bm4.js → diagram-E7M64L7V-1AVTOsRS.js} +1 -1
  274. package/ui-dist/assets/{diagram-IFDJBPK2-Cpu1Xc8G.js → diagram-IFDJBPK2-hfbRtuHq.js} +1 -1
  275. package/ui-dist/assets/{diagram-P4PSJMXO-kLfHqRlk.js → diagram-P4PSJMXO-BypSVEur.js} +1 -1
  276. package/ui-dist/assets/{erDiagram-INFDFZHY-rCnUyQUb.js → erDiagram-INFDFZHY-DWMZC8pq.js} +1 -1
  277. package/ui-dist/assets/{flowDiagram-PKNHOUZH-BhOz8cvV.js → flowDiagram-PKNHOUZH-C4ODl03j.js} +1 -1
  278. package/ui-dist/assets/{ganttDiagram-A5KZAMGK-Csg9g3hz.js → ganttDiagram-A5KZAMGK-K0UbcKpB.js} +1 -1
  279. package/ui-dist/assets/{gitGraphDiagram-K3NZZRJ6-DLPnSlRs.js → gitGraphDiagram-K3NZZRJ6-CEtw8QBQ.js} +1 -1
  280. package/ui-dist/assets/{graph-BrxYh68N.js → graph-D-YEM3eO.js} +1 -1
  281. package/ui-dist/assets/{index-DMkClCka.js → index--e_5aFtV.js} +1 -1
  282. package/ui-dist/assets/{index-G_y-oBne.js → index--wGHASfH.js} +1 -1
  283. package/ui-dist/assets/index-2sHXDbqQ.css +1 -0
  284. package/ui-dist/assets/{index-BQW242nS.js → index-8D4SrlCZ.js} +1 -1
  285. package/ui-dist/assets/{index-DpdsNIGb.js → index-B9FglFcf.js} +1 -1
  286. package/ui-dist/assets/{index-D4FFno9t.js → index-BOLNi_9C.js} +1 -1
  287. package/ui-dist/assets/{index-COBwmF-C.js → index-BVSwDm4x.js} +1 -1
  288. package/ui-dist/assets/{index-BkzdTp2b.js → index-C4vZZ0jB.js} +1 -1
  289. package/ui-dist/assets/{index-Br07RRw1.js → index-CMZ9kRE0.js} +1 -1
  290. package/ui-dist/assets/{index-mOyLwPeE.js → index-CZb2W71E.js} +1 -1
  291. package/ui-dist/assets/{index-DiMeST8g.js → index-Cfp9ooqM.js} +1 -1
  292. package/ui-dist/assets/{index-BeZv_Z0b.js → index-CyWWtF_x.js} +1 -1
  293. package/ui-dist/assets/{index-CsraICzz.js → index-CzQXnPD8.js} +1 -1
  294. package/ui-dist/assets/{index-Bw8MgLaM.js → index-D2uGk78l.js} +446 -446
  295. package/ui-dist/assets/{index-Cb2qts0o.js → index-DVl9xsgP.js} +1 -1
  296. package/ui-dist/assets/{index-D0rP99dj.js → index-T4jxRzoA.js} +1 -1
  297. package/ui-dist/assets/{index-B6_gFYNj.js → index-V0iKRmt7.js} +1 -1
  298. package/ui-dist/assets/{index-Dj72ldIc.js → index-byosaKUg.js} +1 -1
  299. package/ui-dist/assets/{index-D_06pAuN.js → index-nUtypsmU.js} +1 -1
  300. package/ui-dist/assets/{infoDiagram-LFFYTUFH-CRBKgiEf.js → infoDiagram-LFFYTUFH-C6TFdmXf.js} +1 -1
  301. package/ui-dist/assets/{ishikawaDiagram-PHBUUO56-DI3jquVE.js → ishikawaDiagram-PHBUUO56-DyiJqs9l.js} +1 -1
  302. package/ui-dist/assets/{journeyDiagram-4ABVD52K-DDFZ2Q6D.js → journeyDiagram-4ABVD52K-A-q8eZgk.js} +1 -1
  303. package/ui-dist/assets/{kanban-definition-K7BYSVSG-yL5u3cXV.js → kanban-definition-K7BYSVSG-B_1rE7-5.js} +1 -1
  304. package/ui-dist/assets/{layout-DDZaRkp7.js → layout-kMGiiRYg.js} +1 -1
  305. package/ui-dist/assets/{linear-CWngWuQa.js → linear-PdbwVMlL.js} +1 -1
  306. package/ui-dist/assets/{mermaid.core-CQuYoq9K.js → mermaid.core-Cev3K7jk.js} +4 -4
  307. package/ui-dist/assets/{mindmap-definition-YRQLILUH-BwSsHtTO.js → mindmap-definition-YRQLILUH-C8xkWcsS.js} +1 -1
  308. package/ui-dist/assets/{pieDiagram-SKSYHLDU-BasUkvwH.js → pieDiagram-SKSYHLDU-D2I_J-RQ.js} +1 -1
  309. package/ui-dist/assets/{quadrantDiagram-337W2JSQ-D0D2xp36.js → quadrantDiagram-337W2JSQ-B6BBePuG.js} +1 -1
  310. package/ui-dist/assets/{requirementDiagram-Z7DCOOCP-CztN9kDh.js → requirementDiagram-Z7DCOOCP-BUl7tTbs.js} +1 -1
  311. package/ui-dist/assets/{sankeyDiagram-WA2Y5GQK-2xDqN9ox.js → sankeyDiagram-WA2Y5GQK-Dus4b_vo.js} +1 -1
  312. package/ui-dist/assets/{sequenceDiagram-2WXFIKYE-CO3OUPIJ.js → sequenceDiagram-2WXFIKYE-DnwzyMvt.js} +1 -1
  313. package/ui-dist/assets/{stateDiagram-RAJIS63D-DuQ1QZcT.js → stateDiagram-RAJIS63D-CWYWUh48.js} +1 -1
  314. package/ui-dist/assets/stateDiagram-v2-FVOUBMTO-yRuBqnCA.js +1 -0
  315. package/ui-dist/assets/{timeline-definition-YZTLITO2-CnOxbQeb.js → timeline-definition-YZTLITO2-D7vwtWgR.js} +1 -1
  316. package/ui-dist/assets/{treemap-KZPCXAKY-DD77IFOl.js → treemap-KZPCXAKY-CGCh4N8D.js} +1 -1
  317. package/ui-dist/assets/{vennDiagram-LZ73GAT5-DOXTGJn1.js → vennDiagram-LZ73GAT5-Bq1y4idx.js} +1 -1
  318. package/ui-dist/assets/{xychartDiagram-JWTSCODW-DWkrcdri.js → xychartDiagram-JWTSCODW-CMFdYJaJ.js} +1 -1
  319. package/ui-dist/index.html +2 -2
  320. package/ui-dist/assets/channel-BRnz7pSY.js +0 -1
  321. package/ui-dist/assets/classDiagram-VBA2DB6C-Q3YuI9dv.js +0 -1
  322. package/ui-dist/assets/classDiagram-v2-RAHNMMFH-Q3YuI9dv.js +0 -1
  323. package/ui-dist/assets/clone-C1exIyAN.js +0 -1
  324. package/ui-dist/assets/index-Dz8xxyqB.css +0 -1
  325. package/ui-dist/assets/stateDiagram-v2-FVOUBMTO-DQbZqbl9.js +0 -1
@@ -1,3 +1,11 @@
1
+ /**
2
+ * @fileoverview Messenger thread aggregation service for chat, issue,
3
+ * approval, budget, failed-run, join-request, and custom grouped threads.
4
+ *
5
+ * @see doc/product/domains/collaboration/chat-messenger-im.md - Messenger and chat thread behavior
6
+ * @see doc/product/surfaces/surface-domain-map.md - surface-to-domain routing map
7
+ * @see doc/product/domains/control-plane/dashboard-calendar-inbox.md - operator inbox signals
8
+ */
1
9
  import type { Db } from "@rudderhq/db";
2
10
  import { type MessengerApprovalThreadItem, type MessengerBudgetThreadItem, type MessengerCustomGroupsResponse, type MessengerHeartbeatRunThreadItem, type MessengerIssueThreadItem, type MessengerJoinRequestThreadItem, type MessengerSystemThreadKind, type MessengerThreadDetail, type MessengerThreadSummary, type MessengerThreadSummaryPage } from "@rudderhq/shared";
3
11
  import { chatService } from "./chats.js";
@@ -20,6 +28,8 @@ type ChatConversationRow = Awaited<ReturnType<ReturnType<typeof chatService>["li
20
28
  type ChatMessageRow = Awaited<ReturnType<ReturnType<typeof chatService>["listMessages"]>>[number];
21
29
  export declare function messengerService(db: Db): {
22
30
  listCustomGroups: (orgId: string, userId: string) => Promise<MessengerCustomGroupsResponse>;
31
+ listThreadTitles: (orgId: string, userId: string, threadKeys: string[]) => Promise<string[]>;
32
+ listCustomGroupThreadTitles: (orgId: string, userId: string, groupId: string) => Promise<string[]>;
23
33
  createCustomGroup: (orgId: string, userId: string, name: string, icon?: string | null) => Promise<{
24
34
  id: string;
25
35
  orgId: string;
@@ -30,12 +40,14 @@ export declare function messengerService(db: Db): {
30
40
  collapsed: boolean;
31
41
  sortOrder: number;
32
42
  userId: string;
43
+ pinnedAt: Date | null;
33
44
  }>;
34
45
  createCustomGroupWithEntries: (orgId: string, userId: string, name: string, icon: string | null, threadKeys: string[]) => Promise<MessengerCustomGroupsResponse>;
35
46
  updateCustomGroup: (orgId: string, userId: string, groupId: string, patch: {
36
47
  name?: string;
37
48
  icon?: string | null;
38
49
  collapsed?: boolean;
50
+ pinned?: boolean;
39
51
  sortOrder?: number;
40
52
  }) => Promise<{
41
53
  id: string;
@@ -45,6 +57,7 @@ export declare function messengerService(db: Db): {
45
57
  icon: string | null;
46
58
  sortOrder: number;
47
59
  collapsed: boolean;
60
+ pinnedAt: Date | null;
48
61
  createdAt: Date;
49
62
  updatedAt: Date;
50
63
  }>;
@@ -58,6 +71,7 @@ export declare function messengerService(db: Db): {
58
71
  collapsed: boolean;
59
72
  sortOrder: number;
60
73
  userId: string;
74
+ pinnedAt: Date | null;
61
75
  }>;
62
76
  deleteCustomGroup: (orgId: string, userId: string, groupId: string) => Promise<{
63
77
  id: string;
@@ -69,6 +83,7 @@ export declare function messengerService(db: Db): {
69
83
  collapsed: boolean;
70
84
  sortOrder: number;
71
85
  userId: string;
86
+ pinnedAt: Date | null;
72
87
  }>;
73
88
  reorderCustomGroups: (orgId: string, userId: string, groupIds: string[]) => Promise<MessengerCustomGroupsResponse>;
74
89
  assignThreadToCustomGroup: (orgId: string, userId: string, groupId: string, threadKey: string) => Promise<{
@@ -118,7 +133,7 @@ export declare function messengerService(db: Db): {
118
133
  summary: MessengerThreadSummary;
119
134
  detail: {
120
135
  threadKey: string;
121
- kind: "failed-runs";
136
+ kind: "budget-alerts";
122
137
  title: string;
123
138
  subtitle: string;
124
139
  preview: string | null;
@@ -129,13 +144,13 @@ export declare function messengerService(db: Db): {
129
144
  isPinned: false;
130
145
  href: string;
131
146
  description: string;
132
- items: MessengerHeartbeatRunThreadItem[];
147
+ items: MessengerBudgetThreadItem[];
133
148
  };
134
149
  } | {
135
150
  summary: MessengerThreadSummary;
136
151
  detail: {
137
152
  threadKey: string;
138
- kind: "budget-alerts";
153
+ kind: "failed-runs";
139
154
  title: string;
140
155
  subtitle: string;
141
156
  preview: string | null;
@@ -146,7 +161,7 @@ export declare function messengerService(db: Db): {
146
161
  isPinned: false;
147
162
  href: string;
148
163
  description: string;
149
- items: MessengerBudgetThreadItem[];
164
+ items: MessengerHeartbeatRunThreadItem[];
150
165
  };
151
166
  } | {
152
167
  summary: MessengerThreadSummary;
@@ -1 +1 @@
1
- {"version":3,"file":"messenger.d.ts","sourceRoot":"","sources":["../../src/services/messenger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"messenger.d.ts","sourceRoot":"","sources":["../../src/services/messenger.ts"],"names":[],"mappings":"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"}
@@ -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
  }
@@ -566,7 +567,7 @@ function failedRunCard(run, agentName) {
566
567
  href: `/agents/${run.agentId}/runs/${run.id}`,
567
568
  latestActivityAt: run.updatedAt ?? run.createdAt,
568
569
  actions: [
569
- buildAction("Retry", `/heartbeat-runs/${run.id}/retry`, "POST"),
570
+ buildAction("Retry", `/agent-runs/${run.id}/retry`, "POST"),
570
571
  buildAction("Open run", `/agents/${run.agentId}/runs/${run.id}`, "GET"),
571
572
  ],
572
573
  metadata: {
@@ -655,6 +656,16 @@ export function messengerService(db) {
655
656
  function chatConversationIdFromThreadKey(threadKey) {
656
657
  return threadKey.startsWith("chat:") ? threadKey.slice("chat:".length) : null;
657
658
  }
659
+ function issueIdFromThreadKey(threadKey) {
660
+ return threadKey.startsWith("issue:") ? threadKey.slice("issue:".length) : null;
661
+ }
662
+ function isSyntheticMessengerThreadKey(threadKey) {
663
+ return threadKey === "issues"
664
+ || threadKey === "approvals"
665
+ || threadKey === "failed-runs"
666
+ || threadKey === "budget-alerts"
667
+ || threadKey === "join-requests";
668
+ }
658
669
  async function getCustomGroupOrThrow(orgId, userId, groupId) {
659
670
  const [group] = await db
660
671
  .select()
@@ -665,15 +676,91 @@ export function messengerService(db) {
665
676
  throw notFound("Messenger custom group not found");
666
677
  return group;
667
678
  }
668
- async function ensureChatThreadCanBeGrouped(orgId, userId, threadKey) {
679
+ async function loadIssueThreadSummaryById(orgId, userId, issueId) {
680
+ const lastReadAtPromise = lastReadAtForThread(db, orgId, userId, "issues");
681
+ const rows = (await db.execute(issueEntryRowsQuery(orgId, userId, sql `
682
+ where id = ${issueId}
683
+ limit 1
684
+ `)));
685
+ const entry = rows[0] ? issueThreadEntryFromRow(rows[0], userId) : null;
686
+ if (!entry)
687
+ return null;
688
+ const [card] = await buildIssueCardsForEntries(orgId, userId, [entry], "latest");
689
+ if (!card)
690
+ return null;
691
+ const lastReadAt = await lastReadAtPromise;
692
+ const issueThreadStates = await loadThreadStates(db, orgId, userId, [`issue:${issueId}`]);
693
+ return splitIssueSummary(card.entry, card.item, lastReadAt, issueThreadStates.get(`issue:${issueId}`) ?? null);
694
+ }
695
+ async function loadSyntheticThreadSummaryByKey(orgId, userId, threadKey) {
696
+ const syntheticThreadStates = loadThreadStates(db, orgId, userId, [
697
+ "issues",
698
+ "approvals",
699
+ "failed-runs",
700
+ "budget-alerts",
701
+ "join-requests",
702
+ ]);
703
+ switch (threadKey) {
704
+ case "issues": {
705
+ const data = await loadIssueThreadSummaryData(orgId, userId, syntheticThreadStates);
706
+ return data.itemCount > 0 ? data.summary : null;
707
+ }
708
+ case "approvals": {
709
+ const data = await loadApprovalThreadSummaryData(orgId, userId, syntheticThreadStates);
710
+ return data.itemCount > 0 ? data.summary : null;
711
+ }
712
+ case "failed-runs": {
713
+ const data = await loadFailedRunSummaryData(orgId, userId, syntheticThreadStates);
714
+ return data.itemCount > 0 ? data.summary : null;
715
+ }
716
+ case "budget-alerts": {
717
+ const data = await loadBudgetAlertData(orgId, userId, syntheticThreadStates);
718
+ return data.detail.items.length > 0 ? data.summary : null;
719
+ }
720
+ case "join-requests": {
721
+ const data = await loadJoinRequestSummaryData(orgId, userId, syntheticThreadStates);
722
+ return data.itemCount > 0 ? data.summary : null;
723
+ }
724
+ default:
725
+ return null;
726
+ }
727
+ }
728
+ async function findMessengerThreadSummary(orgId, userId, threadKey) {
669
729
  const conversationId = chatConversationIdFromThreadKey(threadKey);
670
- if (!conversationId) {
671
- throw badRequest("Only chat threads can be added to custom Messenger groups");
730
+ if (conversationId) {
731
+ const conversations = await chatsSvc.listSummariesByIds(orgId, [conversationId], userId);
732
+ const conversation = conversations[0];
733
+ return conversation ? chatSummary(conversation) : null;
672
734
  }
673
- const conversations = await chatsSvc.listSummariesByIds(orgId, [conversationId], userId);
674
- if (conversations.length === 0) {
675
- throw notFound("Messenger chat thread not found");
735
+ const issueId = issueIdFromThreadKey(threadKey);
736
+ if (issueId) {
737
+ return loadIssueThreadSummaryById(orgId, userId, issueId);
676
738
  }
739
+ return loadSyntheticThreadSummaryByKey(orgId, userId, threadKey);
740
+ }
741
+ async function ensureMessengerThreadCanBeGrouped(orgId, userId, threadKey) {
742
+ const summary = await findMessengerThreadSummary(orgId, userId, threadKey);
743
+ if (!summary) {
744
+ throw notFound("Messenger thread not found");
745
+ }
746
+ }
747
+ async function listThreadTitles(orgId, userId, threadKeys) {
748
+ const titles = [];
749
+ for (const threadKey of [...new Set(threadKeys)]) {
750
+ const summary = await findMessengerThreadSummary(orgId, userId, threadKey);
751
+ if (summary?.title)
752
+ titles.push(summary.title);
753
+ }
754
+ return titles;
755
+ }
756
+ async function listCustomGroupThreadTitles(orgId, userId, groupId) {
757
+ await getCustomGroupOrThrow(orgId, userId, groupId);
758
+ const entries = await db
759
+ .select({ threadKey: messengerCustomGroupEntries.threadKey })
760
+ .from(messengerCustomGroupEntries)
761
+ .where(and(eq(messengerCustomGroupEntries.orgId, orgId), eq(messengerCustomGroupEntries.userId, userId), eq(messengerCustomGroupEntries.groupId, groupId)))
762
+ .orderBy(asc(messengerCustomGroupEntries.sortOrder), asc(messengerCustomGroupEntries.createdAt));
763
+ return listThreadTitles(orgId, userId, entries.map((entry) => entry.threadKey));
677
764
  }
678
765
  async function listCustomGroups(orgId, userId) {
679
766
  const [groups, entries] = await Promise.all([
@@ -681,17 +768,15 @@ export function messengerService(db) {
681
768
  .select()
682
769
  .from(messengerCustomGroups)
683
770
  .where(and(eq(messengerCustomGroups.orgId, orgId), eq(messengerCustomGroups.userId, userId)))
684
- .orderBy(asc(messengerCustomGroups.sortOrder), asc(messengerCustomGroups.createdAt)),
771
+ .orderBy(sql `${messengerCustomGroups.pinnedAt} IS NULL`, asc(messengerCustomGroups.sortOrder), asc(messengerCustomGroups.createdAt)),
685
772
  db
686
773
  .select()
687
774
  .from(messengerCustomGroupEntries)
688
775
  .where(and(eq(messengerCustomGroupEntries.orgId, orgId), eq(messengerCustomGroupEntries.userId, userId)))
689
776
  .orderBy(asc(messengerCustomGroupEntries.sortOrder), asc(messengerCustomGroupEntries.createdAt)),
690
777
  ]);
691
- const chatThreadKeys = entries
778
+ const conversationIds = entries
692
779
  .map((entry) => entry.threadKey)
693
- .filter((threadKey) => Boolean(chatConversationIdFromThreadKey(threadKey)));
694
- const conversationIds = chatThreadKeys
695
780
  .map((threadKey) => chatConversationIdFromThreadKey(threadKey))
696
781
  .filter((id) => Boolean(id));
697
782
  const conversations = await chatsSvc.listSummariesByIds(orgId, conversationIds, userId);
@@ -699,11 +784,36 @@ export function messengerService(db) {
699
784
  const summary = chatSummary(conversation);
700
785
  return [summary.threadKey, summary];
701
786
  }));
787
+ const nonChatThreadKeys = [...new Set(entries
788
+ .map((entry) => entry.threadKey)
789
+ .filter((threadKey) => !chatConversationIdFromThreadKey(threadKey)))];
790
+ const issueThreadKeys = nonChatThreadKeys.filter((threadKey) => Boolean(issueIdFromThreadKey(threadKey)));
791
+ if (nonChatThreadKeys.length > 0) {
792
+ const syntheticThreadKeys = nonChatThreadKeys.filter((threadKey) => !issueIdFromThreadKey(threadKey));
793
+ const [issueSummaries, syntheticSummaries] = await Promise.all([
794
+ Promise.all(issueThreadKeys.map(async (threadKey) => {
795
+ const issueId = issueIdFromThreadKey(threadKey);
796
+ return issueId ? loadIssueThreadSummaryById(orgId, userId, issueId) : null;
797
+ })),
798
+ Promise.all(syntheticThreadKeys.map((threadKey) => loadSyntheticThreadSummaryByKey(orgId, userId, threadKey))),
799
+ ]);
800
+ for (const summary of issueSummaries) {
801
+ if (summary)
802
+ summaryByThreadKey.set(summary.threadKey, summary);
803
+ }
804
+ for (const summary of syntheticSummaries) {
805
+ if (summary)
806
+ summaryByThreadKey.set(summary.threadKey, summary);
807
+ }
808
+ }
702
809
  const staleEntryIds = [];
703
810
  const entriesByGroupId = new Map();
704
811
  for (const entry of entries) {
705
812
  const summary = summaryByThreadKey.get(entry.threadKey);
706
813
  if (!summary) {
814
+ if (isSyntheticMessengerThreadKey(entry.threadKey)) {
815
+ continue;
816
+ }
707
817
  staleEntryIds.push(entry.id);
708
818
  continue;
709
819
  }
@@ -745,6 +855,7 @@ export function messengerService(db) {
745
855
  name,
746
856
  icon,
747
857
  sortOrder: (lastGroup?.sortOrder ?? -1) + 1,
858
+ pinnedAt: now,
748
859
  updatedAt: now,
749
860
  })
750
861
  .returning();
@@ -755,10 +866,15 @@ export function messengerService(db) {
755
866
  }
756
867
  async function updateCustomGroup(orgId, userId, groupId, patch) {
757
868
  await getCustomGroupOrThrow(orgId, userId, groupId);
869
+ const { pinned, ...groupPatch } = patch;
870
+ const updatePatch = {
871
+ ...groupPatch,
872
+ ...(typeof pinned === "boolean" ? { pinnedAt: pinned ? new Date() : null } : {}),
873
+ };
758
874
  const [group] = await db
759
875
  .update(messengerCustomGroups)
760
876
  .set({
761
- ...patch,
877
+ ...updatePatch,
762
878
  updatedAt: new Date(),
763
879
  })
764
880
  .where(and(eq(messengerCustomGroups.orgId, orgId), eq(messengerCustomGroups.userId, userId), eq(messengerCustomGroups.id, groupId)))
@@ -797,7 +913,7 @@ export function messengerService(db) {
797
913
  return listCustomGroups(orgId, userId);
798
914
  }
799
915
  async function assignThreadToCustomGroupWithClient(client, orgId, userId, groupId, threadKey) {
800
- await ensureChatThreadCanBeGrouped(orgId, userId, threadKey);
916
+ await ensureMessengerThreadCanBeGrouped(orgId, userId, threadKey);
801
917
  const [lastEntry] = await client
802
918
  .select({ sortOrder: messengerCustomGroupEntries.sortOrder })
803
919
  .from(messengerCustomGroupEntries)
@@ -1423,7 +1539,6 @@ export function messengerService(db) {
1423
1539
  }
1424
1540
  async function loadApprovalThreadSummaryData(orgId, userId, threadStates) {
1425
1541
  const lastReadAt = await lastReadAtForThread(db, orgId, userId, "approvals", threadStates);
1426
- const approvalPredicate = eq(approvals.orgId, orgId);
1427
1542
  const pendingApprovalPredicate = and(eq(approvals.orgId, orgId), eq(approvals.status, "pending"));
1428
1543
  const [summaryRows, latestApprovalRows, latestCommentRows, unreadRows] = await Promise.all([
1429
1544
  db
@@ -1431,11 +1546,11 @@ export function messengerService(db) {
1431
1546
  itemCount: sql `count(*)::int`,
1432
1547
  })
1433
1548
  .from(approvals)
1434
- .where(approvalPredicate),
1549
+ .where(pendingApprovalPredicate),
1435
1550
  db
1436
1551
  .select()
1437
1552
  .from(approvals)
1438
- .where(approvalPredicate)
1553
+ .where(pendingApprovalPredicate)
1439
1554
  .orderBy(desc(approvals.updatedAt), desc(approvals.createdAt))
1440
1555
  .limit(1),
1441
1556
  db
@@ -1457,6 +1572,7 @@ export function messengerService(db) {
1457
1572
  limit 1
1458
1573
  ) latest_comment on true
1459
1574
  where ${approvals.orgId} = ${orgId}
1575
+ and ${approvals.status} = 'pending'
1460
1576
  order by latest_comment.created_at desc
1461
1577
  limit 1
1462
1578
  `),
@@ -1485,7 +1601,7 @@ export function messengerService(db) {
1485
1601
  ? await db
1486
1602
  .select()
1487
1603
  .from(approvals)
1488
- .where(and(eq(approvals.id, latestCommentRow.approvalId), approvalPredicate))
1604
+ .where(and(eq(approvals.id, latestCommentRow.approvalId), pendingApprovalPredicate))
1489
1605
  .limit(1)
1490
1606
  : [];
1491
1607
  const candidateItems = [];
@@ -1556,7 +1672,7 @@ export function messengerService(db) {
1556
1672
  needsAttention: unreadCount > 0,
1557
1673
  isPinned: false,
1558
1674
  href: "/messenger/system/failed-runs",
1559
- description: "Recent failed heartbeat runs",
1675
+ description: "Recent failed agent runs",
1560
1676
  items: chronologicalItems,
1561
1677
  },
1562
1678
  };
@@ -1947,6 +2063,8 @@ export function messengerService(db) {
1947
2063
  }
1948
2064
  return {
1949
2065
  listCustomGroups,
2066
+ listThreadTitles,
2067
+ listCustomGroupThreadTitles,
1950
2068
  createCustomGroup,
1951
2069
  createCustomGroupWithEntries,
1952
2070
  updateCustomGroup,