@rudderhq/server 0.3.6-canary.8 → 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.
- package/dist/bootstrap/register-api-routes.d.ts.map +1 -1
- package/dist/bootstrap/register-api-routes.js +2 -0
- package/dist/bootstrap/register-api-routes.js.map +1 -1
- package/dist/bundled-plugins/plugin-linear/dist/worker.js +35 -2
- package/dist/bundled-plugins/plugin-linear/dist/worker.js.map +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +103 -26
- package/dist/index.js.map +1 -1
- package/dist/routes/activity.d.ts +1 -1
- package/dist/routes/activity.d.ts.map +1 -1
- package/dist/routes/activity.js +21 -5
- package/dist/routes/activity.js.map +1 -1
- package/dist/routes/agents.d.ts.map +1 -1
- package/dist/routes/agents.js +254 -4
- package/dist/routes/agents.js.map +1 -1
- package/dist/routes/agents.management-routes.d.ts.map +1 -1
- package/dist/routes/agents.management-routes.js +132 -40
- package/dist/routes/agents.management-routes.js.map +1 -1
- package/dist/routes/automations.d.ts +8 -0
- package/dist/routes/automations.d.ts.map +1 -1
- package/dist/routes/automations.js.map +1 -1
- package/dist/routes/chats.d.ts.map +1 -1
- package/dist/routes/chats.js +228 -115
- package/dist/routes/chats.js.map +1 -1
- package/dist/routes/chats.stream-routes.d.ts.map +1 -1
- package/dist/routes/chats.stream-routes.js +94 -5
- package/dist/routes/chats.stream-routes.js.map +1 -1
- package/dist/routes/issues.comments-attachments.d.ts.map +1 -1
- package/dist/routes/issues.comments-attachments.js +72 -83
- package/dist/routes/issues.comments-attachments.js.map +1 -1
- package/dist/routes/issues.d.ts +8 -0
- package/dist/routes/issues.d.ts.map +1 -1
- package/dist/routes/issues.js +0 -4
- package/dist/routes/issues.js.map +1 -1
- package/dist/routes/issues.mutations.d.ts.map +1 -1
- package/dist/routes/issues.mutations.js +2 -26
- package/dist/routes/issues.mutations.js.map +1 -1
- package/dist/routes/messenger.d.ts.map +1 -1
- package/dist/routes/messenger.js +33 -1
- package/dist/routes/messenger.js.map +1 -1
- package/dist/routes/orgs.d.ts.map +1 -1
- package/dist/routes/orgs.js +16 -0
- package/dist/routes/orgs.js.map +1 -1
- package/dist/routes/plugin-ui-static.d.ts +4 -4
- package/dist/routes/plugin-ui-static.js +5 -5
- package/dist/routes/plugin-ui-static.js.map +1 -1
- package/dist/routes/plugins.d.ts +4 -4
- package/dist/routes/plugins.js +10 -10
- package/dist/routes/plugins.operations-routes.d.ts +1 -1
- package/dist/routes/plugins.operations-routes.js +2 -2
- package/dist/routes/plugins.operations-routes.js.map +1 -1
- package/dist/routes/run-intelligence.js +5 -5
- package/dist/routes/run-intelligence.js.map +1 -1
- package/dist/routes/website-metadata.d.ts +8 -0
- package/dist/routes/website-metadata.d.ts.map +1 -0
- package/dist/routes/website-metadata.js +67 -0
- package/dist/routes/website-metadata.js.map +1 -0
- package/dist/services/activity.d.ts.map +1 -1
- package/dist/services/activity.js +1 -1
- package/dist/services/activity.js.map +1 -1
- package/dist/services/agent-instructions.d.ts +1 -0
- package/dist/services/agent-instructions.d.ts.map +1 -1
- package/dist/services/agent-instructions.js +57 -6
- package/dist/services/agent-instructions.js.map +1 -1
- package/dist/services/agent-run-context.d.ts +3 -1
- package/dist/services/agent-run-context.d.ts.map +1 -1
- package/dist/services/agent-run-context.js +7 -0
- package/dist/services/agent-run-context.js.map +1 -1
- package/dist/services/agent-startup-context.d.ts +2 -1
- package/dist/services/agent-startup-context.d.ts.map +1 -1
- package/dist/services/agent-startup-context.js +6 -26
- package/dist/services/agent-startup-context.js.map +1 -1
- package/dist/services/agents.d.ts +9 -1
- package/dist/services/agents.d.ts.map +1 -1
- package/dist/services/agents.js.map +1 -1
- package/dist/services/approvals.d.ts +8 -0
- package/dist/services/approvals.d.ts.map +1 -1
- package/dist/services/approvals.js.map +1 -1
- package/dist/services/automation-chat-output.d.ts +1 -1
- package/dist/services/automations.d.ts +4 -4
- package/dist/services/automations.d.ts.map +1 -1
- package/dist/services/automations.js +12 -0
- package/dist/services/automations.js.map +1 -1
- package/dist/services/budgets.d.ts +8 -0
- package/dist/services/budgets.d.ts.map +1 -1
- package/dist/services/budgets.js.map +1 -1
- package/dist/services/calendar.d.ts +2 -2
- package/dist/services/calendar.js +3 -3
- package/dist/services/calendar.js.map +1 -1
- package/dist/services/chat-agent-runs.d.ts +2 -0
- package/dist/services/chat-agent-runs.d.ts.map +1 -1
- package/dist/services/chat-agent-runs.js +6 -0
- package/dist/services/chat-agent-runs.js.map +1 -1
- package/dist/services/chat-assistant.d.ts.map +1 -1
- package/dist/services/chat-assistant.helpers.d.ts +1 -0
- package/dist/services/chat-assistant.helpers.d.ts.map +1 -1
- package/dist/services/chat-assistant.helpers.js +7 -10
- package/dist/services/chat-assistant.helpers.js.map +1 -1
- package/dist/services/chat-assistant.js +23 -6
- package/dist/services/chat-assistant.js.map +1 -1
- package/dist/services/chat-generation-locks.d.ts +6 -1
- package/dist/services/chat-generation-locks.d.ts.map +1 -1
- package/dist/services/chat-generation-locks.js +20 -2
- package/dist/services/chat-generation-locks.js.map +1 -1
- package/dist/services/chat-title-generation.d.ts +36 -0
- package/dist/services/chat-title-generation.d.ts.map +1 -0
- package/dist/services/chat-title-generation.js +107 -0
- package/dist/services/chat-title-generation.js.map +1 -0
- package/dist/services/chats.d.ts +471 -25
- package/dist/services/chats.d.ts.map +1 -1
- package/dist/services/chats.helpers.d.ts +2 -2
- package/dist/services/chats.js +651 -35
- package/dist/services/chats.js.map +1 -1
- package/dist/services/costs.d.ts +1 -1
- package/dist/services/finance.d.ts +2 -2
- package/dist/services/finance.js +1 -1
- package/dist/services/finance.js.map +1 -1
- package/dist/services/goals.d.ts +8 -0
- package/dist/services/goals.d.ts.map +1 -1
- package/dist/services/goals.js.map +1 -1
- package/dist/services/heartbeat-run-reference.d.ts +1 -0
- package/dist/services/heartbeat-run-reference.d.ts.map +1 -1
- package/dist/services/heartbeat-run-reference.js +3 -2
- package/dist/services/heartbeat-run-reference.js.map +1 -1
- package/dist/services/integrations/agent-integrations.d.ts +19 -0
- package/dist/services/integrations/agent-integrations.d.ts.map +1 -1
- package/dist/services/integrations/agent-integrations.js +30 -0
- package/dist/services/integrations/agent-integrations.js.map +1 -1
- package/dist/services/integrations/feishu/app-registration.d.ts +74 -0
- package/dist/services/integrations/feishu/app-registration.d.ts.map +1 -0
- package/dist/services/integrations/feishu/app-registration.js +226 -0
- package/dist/services/integrations/feishu/app-registration.js.map +1 -0
- package/dist/services/integrations/feishu/inbound-dispatcher-db.d.ts +4 -0
- package/dist/services/integrations/feishu/inbound-dispatcher-db.d.ts.map +1 -1
- package/dist/services/integrations/feishu/inbound-dispatcher-db.js +35 -5
- package/dist/services/integrations/feishu/inbound-dispatcher-db.js.map +1 -1
- package/dist/services/integrations/feishu/inbound-dispatcher.d.ts +2 -0
- package/dist/services/integrations/feishu/inbound-dispatcher.d.ts.map +1 -1
- package/dist/services/integrations/feishu/inbound-dispatcher.js.map +1 -1
- package/dist/services/integrations/feishu/runtime-registry.d.ts +20 -0
- package/dist/services/integrations/feishu/runtime-registry.d.ts.map +1 -0
- package/dist/services/integrations/feishu/runtime-registry.js +41 -0
- package/dist/services/integrations/feishu/runtime-registry.js.map +1 -0
- package/dist/services/integrations/feishu/runtime.d.ts +21 -23
- package/dist/services/integrations/feishu/runtime.d.ts.map +1 -1
- package/dist/services/integrations/feishu/runtime.js +135 -45
- package/dist/services/integrations/feishu/runtime.js.map +1 -1
- package/dist/services/integrations/feishu/user-bindings.d.ts +22 -0
- package/dist/services/integrations/feishu/user-bindings.d.ts.map +1 -0
- package/dist/services/integrations/feishu/user-bindings.js +57 -0
- package/dist/services/integrations/feishu/user-bindings.js.map +1 -0
- package/dist/services/issue-approvals.d.ts +2 -2
- package/dist/services/issue-review-wakeup.js +1 -1
- package/dist/services/issue-review-wakeup.js.map +1 -1
- package/dist/services/issues.comments-attachments.d.ts +3 -3
- package/dist/services/issues.d.ts +14 -6
- package/dist/services/issues.d.ts.map +1 -1
- package/dist/services/issues.helpers.d.ts +9 -1
- package/dist/services/issues.helpers.d.ts.map +1 -1
- package/dist/services/issues.helpers.js +8 -0
- package/dist/services/issues.helpers.js.map +1 -1
- package/dist/services/issues.js +1 -1
- package/dist/services/issues.js.map +1 -1
- package/dist/services/knowledge-portability/organization-skills.catalog.d.ts +1 -1
- package/dist/services/library-entries.d.ts +8 -0
- package/dist/services/library-entries.d.ts.map +1 -1
- package/dist/services/library-entries.js +8 -0
- package/dist/services/library-entries.js.map +1 -1
- package/dist/services/messenger.d.ts +19 -4
- package/dist/services/messenger.d.ts.map +1 -1
- package/dist/services/messenger.js +136 -18
- package/dist/services/messenger.js.map +1 -1
- package/dist/services/plugin-capability-validator.d.ts +1 -1
- package/dist/services/plugin-capability-validator.js +2 -2
- package/dist/services/plugin-dev-watcher.js +1 -1
- package/dist/services/plugin-event-bus.d.ts +3 -3
- package/dist/services/plugin-event-bus.js +3 -3
- package/dist/services/plugin-job-coordinator.d.ts +1 -1
- package/dist/services/plugin-job-coordinator.js +1 -1
- package/dist/services/plugin-job-scheduler.d.ts +1 -1
- package/dist/services/plugin-job-scheduler.js +1 -1
- package/dist/services/plugin-job-store.d.ts +2 -2
- package/dist/services/plugin-job-store.js +2 -2
- package/dist/services/plugin-lifecycle.d.ts +4 -4
- package/dist/services/plugin-lifecycle.js +3 -3
- package/dist/services/plugin-loader.core.d.ts +4 -4
- package/dist/services/plugin-loader.core.js +2 -2
- package/dist/services/plugin-loader.core.js.map +1 -1
- package/dist/services/plugin-loader.d.ts +3 -3
- package/dist/services/plugin-loader.helpers.d.ts +26 -25
- package/dist/services/plugin-loader.helpers.d.ts.map +1 -1
- package/dist/services/plugin-loader.helpers.js +10 -9
- package/dist/services/plugin-loader.helpers.js.map +1 -1
- package/dist/services/plugin-loader.js +3 -3
- package/dist/services/plugin-loader.worker-paths.d.ts +3 -3
- package/dist/services/plugin-manifest-validator.d.ts +2 -2
- package/dist/services/plugin-registry.d.ts +9 -9
- package/dist/services/plugin-registry.js +1 -1
- package/dist/services/plugin-secrets-handler.d.ts +2 -2
- package/dist/services/plugin-secrets-handler.js +2 -2
- package/dist/services/plugin-state-store.d.ts +3 -3
- package/dist/services/plugin-state-store.js +3 -3
- package/dist/services/plugin-stream-bus.d.ts +1 -1
- package/dist/services/plugin-stream-bus.js +1 -1
- package/dist/services/plugin-tool-dispatcher.d.ts +2 -2
- package/dist/services/plugin-tool-dispatcher.js +2 -2
- package/dist/services/plugin-tool-registry.d.ts +2 -2
- package/dist/services/plugin-tool-registry.js +2 -2
- package/dist/services/plugin-worker-manager.d.ts +4 -4
- package/dist/services/plugin-worker-manager.d.ts.map +1 -1
- package/dist/services/plugin-worker-manager.js +8 -7
- package/dist/services/plugin-worker-manager.js.map +1 -1
- package/dist/services/run-intelligence.js +3 -3
- package/dist/services/run-intelligence.js.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.core.d.ts +9 -1
- package/dist/services/runtime-kernel/heartbeat.core.d.ts.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.core.js +16 -5
- package/dist/services/runtime-kernel/heartbeat.core.js.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.d.ts +3 -3
- package/dist/services/runtime-kernel/heartbeat.execute.d.ts.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.execute.js +17 -3
- package/dist/services/runtime-kernel/heartbeat.execute.js.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.misc.js +1 -1
- package/dist/services/runtime-kernel/heartbeat.recovery.d.ts +1 -1
- package/dist/services/runtime-kernel/heartbeat.recovery.js +7 -7
- package/dist/services/runtime-kernel/heartbeat.recovery.js.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.release.js +4 -4
- package/dist/services/runtime-kernel/heartbeat.release.js.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.wakeup.js +1 -1
- package/dist/services/sidebar-badges.d.ts.map +1 -1
- package/dist/services/sidebar-badges.js +13 -1
- package/dist/services/sidebar-badges.js.map +1 -1
- package/dist/services/title-generation.d.ts +13 -0
- package/dist/services/title-generation.d.ts.map +1 -0
- package/dist/services/title-generation.js +77 -0
- package/dist/services/title-generation.js.map +1 -0
- package/dist/services/website-metadata.d.ts +17 -0
- package/dist/services/website-metadata.d.ts.map +1 -0
- package/dist/services/website-metadata.js +293 -0
- package/dist/services/website-metadata.js.map +1 -0
- package/dist/services/workspace-backups.d.ts +22 -0
- package/dist/services/workspace-backups.d.ts.map +1 -1
- package/dist/services/workspace-backups.js +161 -5
- package/dist/services/workspace-backups.js.map +1 -1
- package/dist/services/workspace-runtime.services.d.ts +1 -1
- package/package.json +14 -13
- package/resources/bundled-skills/rudder/SKILL.md +7 -6
- package/resources/bundled-skills/rudder/references/cli-reference.md +3 -3
- package/resources/bundled-skills/rudder-create-plugin/SKILL.md +2 -2
- package/skills/rudder/SKILL.md +7 -6
- package/skills/rudder/references/cli-reference.md +3 -3
- package/skills/rudder-create-plugin/SKILL.md +2 -2
- package/ui-dist/assets/{_basePickBy-CM0XatHw.js → _basePickBy-CyhMvFCw.js} +1 -1
- package/ui-dist/assets/{_baseUniq-CdBBmdoP.js → _baseUniq-k3x-egdv.js} +1 -1
- package/ui-dist/assets/{arc-DSTtxyJ9.js → arc-DVwZMGLR.js} +1 -1
- package/ui-dist/assets/{architectureDiagram-2XIMDMQ5-BkHMYb5I.js → architectureDiagram-2XIMDMQ5-BvKp7DHW.js} +1 -1
- package/ui-dist/assets/{blockDiagram-WCTKOSBZ-EYczZxwW.js → blockDiagram-WCTKOSBZ-CQ0KLoGd.js} +1 -1
- package/ui-dist/assets/{c4Diagram-IC4MRINW-Xo9qijMi.js → c4Diagram-IC4MRINW-BY44eeD7.js} +1 -1
- package/ui-dist/assets/channel-Cb8ybYSt.js +1 -0
- package/ui-dist/assets/{chunk-4BX2VUAB-CKzta1FF.js → chunk-4BX2VUAB-D7D6PuZU.js} +1 -1
- package/ui-dist/assets/{chunk-55IACEB6-BxxUB0ww.js → chunk-55IACEB6-CraDwywJ.js} +1 -1
- package/ui-dist/assets/{chunk-FMBD7UC4-0F4oxVtY.js → chunk-FMBD7UC4-BGYh4kbq.js} +1 -1
- package/ui-dist/assets/{chunk-JSJVCQXG-CVMPMlVD.js → chunk-JSJVCQXG-DndeOLp_.js} +1 -1
- package/ui-dist/assets/{chunk-KX2RTZJC-lPrAWT94.js → chunk-KX2RTZJC-Cx0eOadl.js} +1 -1
- package/ui-dist/assets/{chunk-NQ4KR5QH-Bufcm7Iv.js → chunk-NQ4KR5QH-PNVbQ_36.js} +1 -1
- package/ui-dist/assets/{chunk-QZHKN3VN-CucmdWnl.js → chunk-QZHKN3VN-DKsTZ1-C.js} +1 -1
- package/ui-dist/assets/{chunk-WL4C6EOR-Dz0oYQrJ.js → chunk-WL4C6EOR-B4aSDSws.js} +1 -1
- package/ui-dist/assets/classDiagram-VBA2DB6C-US2diuPm.js +1 -0
- package/ui-dist/assets/classDiagram-v2-RAHNMMFH-US2diuPm.js +1 -0
- package/ui-dist/assets/clone-CbFoFrhF.js +1 -0
- package/ui-dist/assets/{cose-bilkent-S5V4N54A-DzyX-Er8.js → cose-bilkent-S5V4N54A-DwgS7_iT.js} +1 -1
- package/ui-dist/assets/{dagre-KLK3FWXG-BbZzCKuN.js → dagre-KLK3FWXG-CGMeHr1L.js} +1 -1
- package/ui-dist/assets/{diagram-E7M64L7V-B5Rb7Bm4.js → diagram-E7M64L7V-1AVTOsRS.js} +1 -1
- package/ui-dist/assets/{diagram-IFDJBPK2-Cpu1Xc8G.js → diagram-IFDJBPK2-hfbRtuHq.js} +1 -1
- package/ui-dist/assets/{diagram-P4PSJMXO-kLfHqRlk.js → diagram-P4PSJMXO-BypSVEur.js} +1 -1
- package/ui-dist/assets/{erDiagram-INFDFZHY-rCnUyQUb.js → erDiagram-INFDFZHY-DWMZC8pq.js} +1 -1
- package/ui-dist/assets/{flowDiagram-PKNHOUZH-BhOz8cvV.js → flowDiagram-PKNHOUZH-C4ODl03j.js} +1 -1
- package/ui-dist/assets/{ganttDiagram-A5KZAMGK-Csg9g3hz.js → ganttDiagram-A5KZAMGK-K0UbcKpB.js} +1 -1
- package/ui-dist/assets/{gitGraphDiagram-K3NZZRJ6-DLPnSlRs.js → gitGraphDiagram-K3NZZRJ6-CEtw8QBQ.js} +1 -1
- package/ui-dist/assets/{graph-BrxYh68N.js → graph-D-YEM3eO.js} +1 -1
- package/ui-dist/assets/{index-DMkClCka.js → index--e_5aFtV.js} +1 -1
- package/ui-dist/assets/{index-G_y-oBne.js → index--wGHASfH.js} +1 -1
- package/ui-dist/assets/index-2sHXDbqQ.css +1 -0
- package/ui-dist/assets/{index-BQW242nS.js → index-8D4SrlCZ.js} +1 -1
- package/ui-dist/assets/{index-DpdsNIGb.js → index-B9FglFcf.js} +1 -1
- package/ui-dist/assets/{index-D4FFno9t.js → index-BOLNi_9C.js} +1 -1
- package/ui-dist/assets/{index-COBwmF-C.js → index-BVSwDm4x.js} +1 -1
- package/ui-dist/assets/{index-BkzdTp2b.js → index-C4vZZ0jB.js} +1 -1
- package/ui-dist/assets/{index-Br07RRw1.js → index-CMZ9kRE0.js} +1 -1
- package/ui-dist/assets/{index-mOyLwPeE.js → index-CZb2W71E.js} +1 -1
- package/ui-dist/assets/{index-DiMeST8g.js → index-Cfp9ooqM.js} +1 -1
- package/ui-dist/assets/{index-BeZv_Z0b.js → index-CyWWtF_x.js} +1 -1
- package/ui-dist/assets/{index-CsraICzz.js → index-CzQXnPD8.js} +1 -1
- package/ui-dist/assets/{index-Bw8MgLaM.js → index-D2uGk78l.js} +446 -446
- package/ui-dist/assets/{index-Cb2qts0o.js → index-DVl9xsgP.js} +1 -1
- package/ui-dist/assets/{index-D0rP99dj.js → index-T4jxRzoA.js} +1 -1
- package/ui-dist/assets/{index-B6_gFYNj.js → index-V0iKRmt7.js} +1 -1
- package/ui-dist/assets/{index-Dj72ldIc.js → index-byosaKUg.js} +1 -1
- package/ui-dist/assets/{index-D_06pAuN.js → index-nUtypsmU.js} +1 -1
- package/ui-dist/assets/{infoDiagram-LFFYTUFH-CRBKgiEf.js → infoDiagram-LFFYTUFH-C6TFdmXf.js} +1 -1
- package/ui-dist/assets/{ishikawaDiagram-PHBUUO56-DI3jquVE.js → ishikawaDiagram-PHBUUO56-DyiJqs9l.js} +1 -1
- package/ui-dist/assets/{journeyDiagram-4ABVD52K-DDFZ2Q6D.js → journeyDiagram-4ABVD52K-A-q8eZgk.js} +1 -1
- package/ui-dist/assets/{kanban-definition-K7BYSVSG-yL5u3cXV.js → kanban-definition-K7BYSVSG-B_1rE7-5.js} +1 -1
- package/ui-dist/assets/{layout-DDZaRkp7.js → layout-kMGiiRYg.js} +1 -1
- package/ui-dist/assets/{linear-CWngWuQa.js → linear-PdbwVMlL.js} +1 -1
- package/ui-dist/assets/{mermaid.core-CQuYoq9K.js → mermaid.core-Cev3K7jk.js} +4 -4
- package/ui-dist/assets/{mindmap-definition-YRQLILUH-BwSsHtTO.js → mindmap-definition-YRQLILUH-C8xkWcsS.js} +1 -1
- package/ui-dist/assets/{pieDiagram-SKSYHLDU-BasUkvwH.js → pieDiagram-SKSYHLDU-D2I_J-RQ.js} +1 -1
- package/ui-dist/assets/{quadrantDiagram-337W2JSQ-D0D2xp36.js → quadrantDiagram-337W2JSQ-B6BBePuG.js} +1 -1
- package/ui-dist/assets/{requirementDiagram-Z7DCOOCP-CztN9kDh.js → requirementDiagram-Z7DCOOCP-BUl7tTbs.js} +1 -1
- package/ui-dist/assets/{sankeyDiagram-WA2Y5GQK-2xDqN9ox.js → sankeyDiagram-WA2Y5GQK-Dus4b_vo.js} +1 -1
- package/ui-dist/assets/{sequenceDiagram-2WXFIKYE-CO3OUPIJ.js → sequenceDiagram-2WXFIKYE-DnwzyMvt.js} +1 -1
- package/ui-dist/assets/{stateDiagram-RAJIS63D-DuQ1QZcT.js → stateDiagram-RAJIS63D-CWYWUh48.js} +1 -1
- package/ui-dist/assets/stateDiagram-v2-FVOUBMTO-yRuBqnCA.js +1 -0
- package/ui-dist/assets/{timeline-definition-YZTLITO2-CnOxbQeb.js → timeline-definition-YZTLITO2-D7vwtWgR.js} +1 -1
- package/ui-dist/assets/{treemap-KZPCXAKY-DD77IFOl.js → treemap-KZPCXAKY-CGCh4N8D.js} +1 -1
- package/ui-dist/assets/{vennDiagram-LZ73GAT5-DOXTGJn1.js → vennDiagram-LZ73GAT5-Bq1y4idx.js} +1 -1
- package/ui-dist/assets/{xychartDiagram-JWTSCODW-DWkrcdri.js → xychartDiagram-JWTSCODW-CMFdYJaJ.js} +1 -1
- package/ui-dist/index.html +2 -2
- package/ui-dist/assets/channel-BRnz7pSY.js +0 -1
- package/ui-dist/assets/classDiagram-VBA2DB6C-Q3YuI9dv.js +0 -1
- package/ui-dist/assets/classDiagram-v2-RAHNMMFH-Q3YuI9dv.js +0 -1
- package/ui-dist/assets/clone-C1exIyAN.js +0 -1
- package/ui-dist/assets/index-Dz8xxyqB.css +0 -1
- 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: "
|
|
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:
|
|
147
|
+
items: MessengerBudgetThreadItem[];
|
|
133
148
|
};
|
|
134
149
|
} | {
|
|
135
150
|
summary: MessengerThreadSummary;
|
|
136
151
|
detail: {
|
|
137
152
|
threadKey: string;
|
|
138
|
-
kind: "
|
|
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:
|
|
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":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAiBvC,OAAO,EAQL,KAAK,2BAA2B,EAChC,KAAK,yBAAyB,EAE9B,KAAK,6BAA6B,EAClC,KAAK,+BAA+B,EACpC,KAAK,wBAAwB,EAC7B,KAAK,8BAA8B,EACnC,KAAK,yBAAyB,EAE9B,KAAK,qBAAqB,EAE1B,KAAK,sBAAsB,EAC3B,KAAK,0BAA0B,EAChC,MAAM,kBAAkB,CAAC;AAK1B,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AA0BzC,KAAK,eAAe,GAAG;IACrB,UAAU,EAAE,IAAI,CAAC;CAClB,CAAC;AAUF,KAAK,wBAAwB,GAAG;IAC9B,aAAa,EAAE,OAAO,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB,CAAC;AACF,KAAK,wBAAwB,GAAG;IAC9B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AACF,KAAK,wBAAwB,GAAG,wBAAwB,GAAG;IACzD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB,CAAC;AAyJF,KAAK,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;
|
|
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", `/
|
|
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
|
|
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 (
|
|
671
|
-
|
|
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
|
|
674
|
-
if (
|
|
675
|
-
|
|
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
|
|
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
|
-
...
|
|
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
|
|
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(
|
|
1549
|
+
.where(pendingApprovalPredicate),
|
|
1435
1550
|
db
|
|
1436
1551
|
.select()
|
|
1437
1552
|
.from(approvals)
|
|
1438
|
-
.where(
|
|
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),
|
|
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
|
|
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,
|