@rudderhq/server 0.5.0 → 0.5.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.
- package/dist/agent-runtimes/http/execute.d.ts.map +1 -1
- package/dist/agent-runtimes/http/execute.js +56 -1
- package/dist/agent-runtimes/http/execute.js.map +1 -1
- package/dist/agent-runtimes/http/index.d.ts.map +1 -1
- package/dist/agent-runtimes/http/index.js +10 -0
- package/dist/agent-runtimes/http/index.js.map +1 -1
- package/dist/agent-runtimes/process/execute.d.ts.map +1 -1
- package/dist/agent-runtimes/process/execute.js +9 -1
- package/dist/agent-runtimes/process/execute.js.map +1 -1
- package/dist/agent-runtimes/process/index.d.ts.map +1 -1
- package/dist/agent-runtimes/process/index.js +7 -0
- package/dist/agent-runtimes/process/index.js.map +1 -1
- package/dist/agent-runtimes/registry.d.ts.map +1 -1
- package/dist/agent-runtimes/registry.js +21 -1
- package/dist/agent-runtimes/registry.js.map +1 -1
- package/dist/agent-runtimes/utils.d.ts +1 -0
- package/dist/agent-runtimes/utils.d.ts.map +1 -1
- package/dist/agent-runtimes/utils.js.map +1 -1
- package/dist/bundled-plugins/plugin-linear/dist/worker.js +183 -10
- package/dist/bundled-plugins/plugin-linear/dist/worker.js.map +3 -3
- package/dist/home-paths.d.ts +7 -0
- package/dist/home-paths.d.ts.map +1 -1
- package/dist/home-paths.js +46 -2
- package/dist/home-paths.js.map +1 -1
- package/dist/index.js +23 -4
- package/dist/index.js.map +1 -1
- package/dist/routes/access.d.ts.map +1 -1
- package/dist/routes/access.helpers.d.ts +1 -1
- package/dist/routes/access.helpers.d.ts.map +1 -1
- package/dist/routes/access.helpers.js +0 -3
- package/dist/routes/access.helpers.js.map +1 -1
- package/dist/routes/access.js +0 -4
- package/dist/routes/access.js.map +1 -1
- package/dist/routes/agents.js +2 -2
- package/dist/routes/agents.js.map +1 -1
- package/dist/routes/chats.d.ts.map +1 -1
- package/dist/routes/chats.generated-attachments.d.ts +16 -0
- package/dist/routes/chats.generated-attachments.d.ts.map +1 -0
- package/dist/routes/chats.generated-attachments.js +157 -0
- package/dist/routes/chats.generated-attachments.js.map +1 -0
- package/dist/routes/chats.helpers.d.ts +27 -0
- package/dist/routes/chats.helpers.d.ts.map +1 -0
- package/dist/routes/chats.helpers.js +52 -0
- package/dist/routes/chats.helpers.js.map +1 -0
- package/dist/routes/chats.js +126 -188
- 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 +185 -16
- package/dist/routes/chats.stream-routes.js.map +1 -1
- package/dist/routes/llms.js +3 -3
- package/dist/routes/llms.js.map +1 -1
- package/dist/routes/messenger.d.ts.map +1 -1
- package/dist/routes/messenger.js +48 -6
- package/dist/routes/messenger.js.map +1 -1
- package/dist/services/activity.d.ts.map +1 -1
- package/dist/services/activity.js +7 -2
- package/dist/services/activity.js.map +1 -1
- package/dist/services/agents.d.ts +65 -65
- package/dist/services/agents.d.ts.map +1 -1
- package/dist/services/agents.js +5 -4
- package/dist/services/agents.js.map +1 -1
- package/dist/services/approvals.d.ts +1 -1
- package/dist/services/assets.d.ts +2 -2
- package/dist/services/automation-chat-output.d.ts +1 -1
- package/dist/services/automation-chat-output.d.ts.map +1 -1
- package/dist/services/automation-chat-output.js +38 -23
- package/dist/services/automation-chat-output.js.map +1 -1
- package/dist/services/automations.d.ts.map +1 -1
- package/dist/services/automations.js +39 -41
- package/dist/services/automations.js.map +1 -1
- package/dist/services/budgets.d.ts +1 -1
- package/dist/services/chat-assistant.d.ts +23 -1
- package/dist/services/chat-assistant.d.ts.map +1 -1
- package/dist/services/chat-assistant.helpers.d.ts +21 -0
- package/dist/services/chat-assistant.helpers.d.ts.map +1 -1
- package/dist/services/chat-assistant.helpers.js +29 -10
- package/dist/services/chat-assistant.helpers.js.map +1 -1
- package/dist/services/chat-assistant.inline-visuals.d.ts +23 -0
- package/dist/services/chat-assistant.inline-visuals.d.ts.map +1 -0
- package/dist/services/chat-assistant.inline-visuals.js +129 -0
- package/dist/services/chat-assistant.inline-visuals.js.map +1 -0
- package/dist/services/chat-assistant.inline-visuals.test.js +85 -1
- package/dist/services/chat-assistant.inline-visuals.test.js.map +1 -1
- package/dist/services/chat-assistant.js +262 -38
- package/dist/services/chat-assistant.js.map +1 -1
- package/dist/services/chat-family-groups.d.ts +14 -0
- package/dist/services/chat-family-groups.d.ts.map +1 -0
- package/dist/services/chat-family-groups.js +96 -0
- package/dist/services/chat-family-groups.js.map +1 -0
- package/dist/services/chat-generation-protocol.d.ts +17 -31
- package/dist/services/chat-generation-protocol.d.ts.map +1 -1
- package/dist/services/chat-generation-protocol.helpers.d.ts +36 -0
- package/dist/services/chat-generation-protocol.helpers.d.ts.map +1 -0
- package/dist/services/chat-generation-protocol.helpers.js +53 -0
- package/dist/services/chat-generation-protocol.helpers.js.map +1 -0
- package/dist/services/chat-generation-protocol.js +86 -55
- package/dist/services/chat-generation-protocol.js.map +1 -1
- package/dist/services/chat-generation-protocol.test.js +31 -3
- package/dist/services/chat-generation-protocol.test.js.map +1 -1
- package/dist/services/chat-steer-messages.d.ts +117 -0
- package/dist/services/chat-steer-messages.d.ts.map +1 -0
- package/dist/services/chat-steer-messages.js +410 -0
- package/dist/services/chat-steer-messages.js.map +1 -0
- package/dist/services/chat-title-generation.d.ts +1 -0
- package/dist/services/chat-title-generation.d.ts.map +1 -1
- package/dist/services/chat-title-generation.js +12 -9
- package/dist/services/chat-title-generation.js.map +1 -1
- package/dist/services/chat-work-manifest.d.ts.map +1 -1
- package/dist/services/chat-work-manifest.js +39 -2
- package/dist/services/chat-work-manifest.js.map +1 -1
- package/dist/services/chats.constants.d.ts +5 -0
- package/dist/services/chats.constants.d.ts.map +1 -0
- package/dist/services/chats.constants.js +13 -0
- package/dist/services/chats.constants.js.map +1 -0
- package/dist/services/chats.create.d.ts +75 -0
- package/dist/services/chats.create.d.ts.map +1 -0
- package/dist/services/chats.create.js +159 -0
- package/dist/services/chats.create.js.map +1 -0
- package/dist/services/chats.d.ts +85 -76
- package/dist/services/chats.d.ts.map +1 -1
- package/dist/services/chats.fork-helpers.d.ts +8 -0
- package/dist/services/chats.fork-helpers.d.ts.map +1 -0
- package/dist/services/chats.fork-helpers.js +45 -0
- package/dist/services/chats.fork-helpers.js.map +1 -0
- package/dist/services/chats.inline-visual-persistence.d.ts +30 -0
- package/dist/services/chats.inline-visual-persistence.d.ts.map +1 -0
- package/dist/services/chats.inline-visual-persistence.js +209 -0
- package/dist/services/chats.inline-visual-persistence.js.map +1 -0
- package/dist/services/chats.js +288 -273
- package/dist/services/chats.js.map +1 -1
- package/dist/services/chats.types.d.ts +31 -0
- package/dist/services/chats.types.d.ts.map +1 -0
- package/dist/services/chats.types.js +2 -0
- package/dist/services/chats.types.js.map +1 -0
- package/dist/services/integrations/feishu/inbound-dispatcher-db.d.ts.map +1 -1
- package/dist/services/integrations/feishu/inbound-dispatcher-db.js +81 -53
- package/dist/services/integrations/feishu/inbound-dispatcher-db.js.map +1 -1
- package/dist/services/integrations/feishu/inbound-dispatcher.d.ts +1 -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/issues.comments-attachments.d.ts.map +1 -1
- package/dist/services/issues.comments-attachments.js +11 -2
- package/dist/services/issues.comments-attachments.js.map +1 -1
- package/dist/services/issues.d.ts.map +1 -1
- package/dist/services/knowledge-portability/organization-skills.catalog.d.ts.map +1 -1
- package/dist/services/knowledge-portability/organization-skills.catalog.js +7 -1
- package/dist/services/knowledge-portability/organization-skills.catalog.js.map +1 -1
- package/dist/services/knowledge-portability/organization-skills.d.ts.map +1 -1
- package/dist/services/knowledge-portability/organization-skills.js +13 -1
- package/dist/services/knowledge-portability/organization-skills.js.map +1 -1
- package/dist/services/messenger-run-origin.d.ts +18 -0
- package/dist/services/messenger-run-origin.d.ts.map +1 -0
- package/dist/services/messenger-run-origin.js +248 -0
- package/dist/services/messenger-run-origin.js.map +1 -0
- package/dist/services/messenger-run-summary.d.ts +4 -0
- package/dist/services/messenger-run-summary.d.ts.map +1 -0
- package/dist/services/messenger-run-summary.js +6 -0
- package/dist/services/messenger-run-summary.js.map +1 -0
- package/dist/services/messenger-saved-views.d.ts +133 -0
- package/dist/services/messenger-saved-views.d.ts.map +1 -0
- package/dist/services/messenger-saved-views.js +275 -0
- package/dist/services/messenger-saved-views.js.map +1 -0
- package/dist/services/messenger.d.ts +17 -3
- package/dist/services/messenger.d.ts.map +1 -1
- package/dist/services/messenger.js +276 -56
- package/dist/services/messenger.js.map +1 -1
- package/dist/services/operator-event-visibility.d.ts +3 -0
- package/dist/services/operator-event-visibility.d.ts.map +1 -0
- package/dist/services/operator-event-visibility.js +5 -0
- package/dist/services/operator-event-visibility.js.map +1 -0
- package/dist/services/orgs.d.ts +5 -5
- package/dist/services/plugin-registry.d.ts +4 -4
- package/dist/services/projects.d.ts +2 -2
- package/dist/services/run-intelligence.d.ts.map +1 -1
- package/dist/services/run-intelligence.js +7 -3
- package/dist/services/run-intelligence.js.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.core.d.ts.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.core.js +9 -8
- package/dist/services/runtime-kernel/heartbeat.core.js.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.d.ts +2 -2
- package/dist/services/runtime-kernel/heartbeat.d.ts.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.js +3 -2
- package/dist/services/runtime-kernel/heartbeat.js.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.misc.js +1 -1
- package/dist/services/runtime-kernel/heartbeat.misc.js.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.recovery.js +1 -1
- package/dist/services/runtime-kernel/heartbeat.recovery.js.map +1 -1
- package/dist/services/side-chats.d.ts +1 -46
- package/dist/services/side-chats.d.ts.map +1 -1
- package/dist/services/side-chats.js +58 -65
- package/dist/services/side-chats.js.map +1 -1
- package/dist/services/title-generation.d.ts +3 -0
- package/dist/services/title-generation.d.ts.map +1 -1
- package/dist/services/title-generation.js +178 -6
- package/dist/services/title-generation.js.map +1 -1
- package/dist/services/workspace-backups.d.ts +19 -8
- package/dist/services/workspace-backups.d.ts.map +1 -1
- package/dist/services/workspace-backups.js +335 -127
- package/dist/services/workspace-backups.js.map +1 -1
- package/package.json +14 -13
- package/resources/bundled-skills/browser/references/tool-contract.md +2 -2
- package/resources/bundled-skills/rudder-docs/SKILL.md +20 -4
- package/resources/bundled-skills/rudder-docs/evals/retrieval-authority-evals.json +262 -0
- package/resources/bundled-skills/rudder-docs/evals/trigger-evals.json +11 -11
- package/resources/bundled-skills/rudder-docs/references/agent-creation.md +153 -0
- package/resources/bundled-skills/rudder-docs/references/api-reference.md +9 -2
- package/resources/bundled-skills/rudder-docs/references/cli-reference.md +12 -12
- package/{skills/rudder-docs/references/control-plane-practices.md → resources/bundled-skills/rudder-docs/references/operating-practices.md} +4 -4
- package/resources/bundled-skills/rudder-docs/references/organization-skills.md +3 -3
- package/resources/bundled-skills/rudder-docs/references/plugin-authoring.md +116 -0
- package/resources/bundled-skills/rudder-docs/references/source-map.md +26 -2
- package/resources/bundled-skills/visualize/SKILL.md +29 -27
- package/resources/bundled-skills/visualize/references/runtime-contract.md +18 -8
- package/skills/browser/references/tool-contract.md +2 -2
- package/skills/rudder-docs/SKILL.md +20 -4
- package/skills/rudder-docs/evals/retrieval-authority-evals.json +262 -0
- package/skills/rudder-docs/evals/trigger-evals.json +11 -11
- package/skills/rudder-docs/references/agent-creation.md +153 -0
- package/skills/rudder-docs/references/api-reference.md +9 -2
- package/skills/rudder-docs/references/cli-reference.md +12 -12
- package/{resources/bundled-skills/rudder-docs/references/control-plane-practices.md → skills/rudder-docs/references/operating-practices.md} +4 -4
- package/skills/rudder-docs/references/organization-skills.md +3 -3
- package/skills/rudder-docs/references/plugin-authoring.md +116 -0
- package/skills/rudder-docs/references/source-map.md +26 -2
- package/skills/visualize/SKILL.md +29 -27
- package/skills/visualize/references/runtime-contract.md +18 -8
- package/ui-dist/assets/{abnfDiagram-VRR7QNED-Dpnx79fp.js → abnfDiagram-VRR7QNED-CAAPm9Nj.js} +1 -1
- package/ui-dist/assets/{arc-Cpvh_rCf.js → arc-DOFoNr3M.js} +1 -1
- package/ui-dist/assets/{architectureDiagram-ZJ3FMSHR-sDD_mBAI.js → architectureDiagram-ZJ3FMSHR-DRg6yhG8.js} +1 -1
- package/ui-dist/assets/{blockDiagram-677ZJIJ3-4O4wWti1.js → blockDiagram-677ZJIJ3-e3ShzsXT.js} +1 -1
- package/ui-dist/assets/{c4Diagram-LMCZKHZV-BkGODE4P.js → c4Diagram-LMCZKHZV-Csd_18O2.js} +1 -1
- package/ui-dist/assets/channel-BFLsBJOK.js +1 -0
- package/ui-dist/assets/{chunk-2Q5K7J3B-DsDQQpID.js → chunk-2Q5K7J3B-eF77FV1C.js} +1 -1
- package/ui-dist/assets/{chunk-32BRIVSS-Bzx_VnIw.js → chunk-32BRIVSS-CpMx72B5.js} +1 -1
- package/ui-dist/assets/{chunk-5VM5RSS4-D4LoPCni.js → chunk-5VM5RSS4-Be6WylCu.js} +1 -1
- package/ui-dist/assets/{chunk-EX3LRPZG-BO0R-mS4.js → chunk-EX3LRPZG-D-A_TfL-.js} +1 -1
- package/ui-dist/assets/{chunk-JWPE2WC7-B4Nr8KRL.js → chunk-JWPE2WC7-CdBLDqvo.js} +1 -1
- package/ui-dist/assets/{chunk-MOJQB5TN--uaDDrYM.js → chunk-MOJQB5TN-DkLjRENV.js} +1 -1
- package/ui-dist/assets/{chunk-RYQCIY6F-CyBY2w_j.js → chunk-RYQCIY6F-57VqTsE9.js} +1 -1
- package/ui-dist/assets/{chunk-V7JOEXUC-BMid_x8S.js → chunk-V7JOEXUC-DI_m8pt6.js} +1 -1
- package/ui-dist/assets/{chunk-VR4S4FIN-DVqdPKuG.js → chunk-VR4S4FIN-CM_944j4.js} +1 -1
- package/ui-dist/assets/{chunk-XXDRQBXY-vy03lLSS.js → chunk-XXDRQBXY--WTAlt82.js} +1 -1
- package/ui-dist/assets/classDiagram-OUVF2IWQ-Dah6C4Dl.js +1 -0
- package/ui-dist/assets/classDiagram-v2-EOCWNBFH-Dah6C4Dl.js +1 -0
- package/ui-dist/assets/{cose-bilkent-JH36ORCC-jQDZmrG3.js → cose-bilkent-JH36ORCC-CR0qu31s.js} +1 -1
- package/ui-dist/assets/{cynefin-VYW2F7L2-BxBj6aea.js → cynefin-VYW2F7L2-f41lF5RD.js} +1 -1
- package/ui-dist/assets/{cynefinDiagram-TSTJHNR4-BuUubF5I.js → cynefinDiagram-TSTJHNR4-88wJ2LA8.js} +1 -1
- package/ui-dist/assets/{dagre-VKFMJZFB-B8HipJ3a.js → dagre-VKFMJZFB-B1yJCIRh.js} +1 -1
- package/ui-dist/assets/{diagram-FQU43EPY-r7gkbKSt.js → diagram-FQU43EPY-C0iYYFUe.js} +1 -1
- package/ui-dist/assets/{diagram-G47NLZAW-CxClRsxD.js → diagram-G47NLZAW-Cp6S0siK.js} +1 -1
- package/ui-dist/assets/{diagram-NH7WQ7WH-C8HYTLlq.js → diagram-NH7WQ7WH-CmZb5OSk.js} +1 -1
- package/ui-dist/assets/{diagram-OA4YK3LP-CjwqqLKz.js → diagram-OA4YK3LP-9rFYGY7H.js} +1 -1
- package/ui-dist/assets/{diagram-WEI45ONY-2IWfCqZb.js → diagram-WEI45ONY-Og8vyDQh.js} +1 -1
- package/ui-dist/assets/{ebnfDiagram-CCIWWBDH-DVGZkgjy.js → ebnfDiagram-CCIWWBDH--5sMape2.js} +1 -1
- package/ui-dist/assets/{erDiagram-Q63AITRT-C_-u3Gmw.js → erDiagram-Q63AITRT-DG10Bza-.js} +1 -1
- package/ui-dist/assets/{flowDiagram-23GEKE2U-BvGg0NCq.js → flowDiagram-23GEKE2U-BW-aZfEk.js} +1 -1
- package/ui-dist/assets/{ganttDiagram-NO4QXBWP-U3CZUUUR.js → ganttDiagram-NO4QXBWP-DcA7on8t.js} +1 -1
- package/ui-dist/assets/{gitGraphDiagram-IHSO6WYX-CIWuEBIo.js → gitGraphDiagram-IHSO6WYX-ygGufg32.js} +1 -1
- package/ui-dist/assets/{graph-D3P5q-7m.js → graph-BXl6uBoM.js} +1 -1
- package/ui-dist/assets/{index-DOPIV8vd.js → index-9bXlV2sq.js} +1 -1
- package/ui-dist/assets/{index-CjztBLJi.js → index-B58ems-F.js} +1 -1
- package/ui-dist/assets/{index-mnl55Stn.js → index-BM-SJNCx.js} +1 -1
- package/ui-dist/assets/index-BcdA9dZc.css +1 -0
- package/ui-dist/assets/{index-BAgtKYR1.js → index-BmTNDbzy.js} +1 -1
- package/ui-dist/assets/{index-DidCCw78.js → index-CCDynlok.js} +1 -1
- package/ui-dist/assets/{index-CbHqnWUe.js → index-CRLl2Ck7.js} +1 -1
- package/ui-dist/assets/{index-D7ycf1qU.js → index-CqmU1PxY.js} +1 -1
- package/ui-dist/assets/{index-B1rLBtZ1.js → index-CssgLJwf.js} +605 -493
- package/ui-dist/assets/{index-DRxLJD40.js → index-DOVMMhyj.js} +1 -1
- package/ui-dist/assets/{index-Ds_qma4-.js → index-DTlR8bJV.js} +1 -1
- package/ui-dist/assets/{index-DCFf9dps.js → index-Dl6nXXNc.js} +1 -1
- package/ui-dist/assets/{index-DAYlwxsg.js → index-DoiNhQrY.js} +1 -1
- package/ui-dist/assets/{index-CBOr9F6w.js → index-Dug5GX1J.js} +1 -1
- package/ui-dist/assets/{index-HkQRx1D6.js → index-DxXOCTVe.js} +1 -1
- package/ui-dist/assets/{index-BAMXpiI5.js → index-GdN-7KLt.js} +1 -1
- package/ui-dist/assets/{index-ikpL--zj.js → index-ZA8lPH2n.js} +1 -1
- package/ui-dist/assets/{index-Cu1iMhjl.js → index-fkDP349f.js} +1 -1
- package/ui-dist/assets/{index-DYMtCDKT.js → index-uKIvv9n9.js} +1 -1
- package/ui-dist/assets/{infoDiagram-FWYZ7A6U-Cx8Fa-I4.js → infoDiagram-FWYZ7A6U-27INMkBm.js} +1 -1
- package/ui-dist/assets/{ishikawaDiagram-FXEZZL3T-Cmuz1QUN.js → ishikawaDiagram-FXEZZL3T-Bp6XQ1_r.js} +1 -1
- package/ui-dist/assets/{journeyDiagram-5HDEW3XC-CJgkiVXG.js → journeyDiagram-5HDEW3XC-9vaIwdZ3.js} +1 -1
- package/ui-dist/assets/{kanban-definition-HUTT4EX6-RAWpefOB.js → kanban-definition-HUTT4EX6-DjsMaR6l.js} +1 -1
- package/ui-dist/assets/{layout-DyWQv0Rr.js → layout-C0oWcIiC.js} +1 -1
- package/ui-dist/assets/{linear-D5pdgIf9.js → linear-DNbmenmQ.js} +1 -1
- package/ui-dist/assets/{map-bVSzNLl2.js → map-B1s9kpcR.js} +1 -1
- package/ui-dist/assets/{mermaid.core-CeaXGD6B.js → mermaid.core-DsYT9DxL.js} +4 -4
- package/ui-dist/assets/{mindmap-definition-LN4V7U3C-B8B8AX5C.js → mindmap-definition-LN4V7U3C-vVHeRI83.js} +1 -1
- package/ui-dist/assets/{pegDiagram-2B236MQR-C4Sv-ua6.js → pegDiagram-2B236MQR-ohrgWLo_.js} +1 -1
- package/ui-dist/assets/{pieDiagram-ENE6RG2P-CLARlOHx.js → pieDiagram-ENE6RG2P-B0EqPrjn.js} +1 -1
- package/ui-dist/assets/{quadrantDiagram-ABIIQ3AL-DPCXQmeT.js → quadrantDiagram-ABIIQ3AL-D44iYm0o.js} +1 -1
- package/ui-dist/assets/{railroadDiagram-RFXS5EU6-BpqRuKUQ.js → railroadDiagram-RFXS5EU6-BQU5bpbU.js} +1 -1
- package/ui-dist/assets/{requirementDiagram-TGXJPOKE-Dd-h62HZ.js → requirementDiagram-TGXJPOKE-DGJciRxB.js} +1 -1
- package/ui-dist/assets/{sankeyDiagram-HTMAVEWB-DylT_pqq.js → sankeyDiagram-HTMAVEWB-NMXZW_Qb.js} +1 -1
- package/ui-dist/assets/{sequenceDiagram-DBY2YBRQ-RiCF1REj.js → sequenceDiagram-DBY2YBRQ-8uWY67Bb.js} +1 -1
- package/ui-dist/assets/{sizeCapture-X5ZJPWSS-DXW4JQz2.js → sizeCapture-X5ZJPWSS-BnUUR-On.js} +1 -1
- package/ui-dist/assets/{stateDiagram-2N3HPSRC-6U3ESIGT.js → stateDiagram-2N3HPSRC-B37bcKMy.js} +1 -1
- package/ui-dist/assets/stateDiagram-v2-6OUMAXLB-p6H0vL7N.js +1 -0
- package/ui-dist/assets/{swimlanes-5IMT3BWC-CeNHVNCi.js → swimlanes-5IMT3BWC-Bi2ZzUMi.js} +2 -2
- package/ui-dist/assets/swimlanesDiagram-G3AALYLV-BX6FiLF9.js +8 -0
- package/ui-dist/assets/{timeline-definition-FHXFAJF6-Vlwoe_1b.js → timeline-definition-FHXFAJF6-CkWauU5D.js} +1 -1
- package/ui-dist/assets/{vennDiagram-L72KCM5P-DBP7D3HE.js → vennDiagram-L72KCM5P-BrmBXmnk.js} +1 -1
- package/ui-dist/assets/{wardleyDiagram-EHGQE667-DG-wzqpy.js → wardleyDiagram-EHGQE667-kO5cojc6.js} +1 -1
- package/ui-dist/assets/{xychartDiagram-FW5EYKEG-BAq3mbha.js → xychartDiagram-FW5EYKEG-CUBDaCDm.js} +1 -1
- package/ui-dist/index.html +5 -4
- package/resources/bundled-skills/rudder-create-agent/SKILL.md +0 -185
- package/resources/bundled-skills/rudder-create-agent/references/api-reference.md +0 -179
- package/resources/bundled-skills/rudder-create-agent/references/cli-reference.md +0 -132
- package/resources/bundled-skills/rudder-create-plugin/SKILL.md +0 -103
- package/resources/bundled-skills/skill-optimizer/CHANGELOG.md +0 -29
- package/resources/bundled-skills/skill-optimizer/SKILL.md +0 -205
- package/resources/bundled-skills/skill-optimizer/references/adapters/creative-brand-content.md +0 -30
- package/resources/bundled-skills/skill-optimizer/references/adapters/customer-support-sales.md +0 -30
- package/resources/bundled-skills/skill-optimizer/references/adapters/document-data-processing.md +0 -31
- package/resources/bundled-skills/skill-optimizer/references/adapters/education-training.md +0 -31
- package/resources/bundled-skills/skill-optimizer/references/adapters/finance-accounting.md +0 -31
- package/resources/bundled-skills/skill-optimizer/references/adapters/healthcare-operations.md +0 -30
- package/resources/bundled-skills/skill-optimizer/references/adapters/hr-people-ops.md +0 -31
- package/resources/bundled-skills/skill-optimizer/references/adapters/legal-compliance.md +0 -31
- package/resources/bundled-skills/skill-optimizer/references/adapters/operations-supply-chain.md +0 -31
- package/resources/bundled-skills/skill-optimizer/references/adapters/personal-productivity.md +0 -29
- package/resources/bundled-skills/skill-optimizer/references/adapters/research-knowledge.md +0 -31
- package/resources/bundled-skills/skill-optimizer/references/adapters/software-ai.md +0 -31
- package/resources/bundled-skills/skill-optimizer/references/domain-adapter-patterns.md +0 -66
- package/resources/bundled-skills/skill-optimizer/references/eval-method.md +0 -17
- package/resources/bundled-skills/skill-optimizer/references/universal-optimization-lens.md +0 -73
- package/skills/rudder-create-agent/SKILL.md +0 -185
- package/skills/rudder-create-agent/references/api-reference.md +0 -179
- package/skills/rudder-create-agent/references/cli-reference.md +0 -132
- package/skills/rudder-create-plugin/SKILL.md +0 -103
- package/skills/skill-optimizer/CHANGELOG.md +0 -29
- package/skills/skill-optimizer/SKILL.md +0 -205
- package/skills/skill-optimizer/references/adapters/creative-brand-content.md +0 -30
- package/skills/skill-optimizer/references/adapters/customer-support-sales.md +0 -30
- package/skills/skill-optimizer/references/adapters/document-data-processing.md +0 -31
- package/skills/skill-optimizer/references/adapters/education-training.md +0 -31
- package/skills/skill-optimizer/references/adapters/finance-accounting.md +0 -31
- package/skills/skill-optimizer/references/adapters/healthcare-operations.md +0 -30
- package/skills/skill-optimizer/references/adapters/hr-people-ops.md +0 -31
- package/skills/skill-optimizer/references/adapters/legal-compliance.md +0 -31
- package/skills/skill-optimizer/references/adapters/operations-supply-chain.md +0 -31
- package/skills/skill-optimizer/references/adapters/personal-productivity.md +0 -29
- package/skills/skill-optimizer/references/adapters/research-knowledge.md +0 -31
- package/skills/skill-optimizer/references/adapters/software-ai.md +0 -31
- package/skills/skill-optimizer/references/domain-adapter-patterns.md +0 -66
- package/skills/skill-optimizer/references/eval-method.md +0 -17
- package/skills/skill-optimizer/references/universal-optimization-lens.md +0 -73
- package/ui-dist/assets/channel-CM4Myg_6.js +0 -1
- package/ui-dist/assets/classDiagram-OUVF2IWQ-CtlIEzTt.js +0 -1
- package/ui-dist/assets/classDiagram-v2-EOCWNBFH-CtlIEzTt.js +0 -1
- package/ui-dist/assets/index-DekHKOsL.css +0 -1
- package/ui-dist/assets/stateDiagram-v2-6OUMAXLB-KQTrcZvp.js +0 -1
- package/ui-dist/assets/swimlanesDiagram-G3AALYLV-CcxS1c6r.js +0 -8
|
@@ -1,11 +1,15 @@
|
|
|
1
|
-
import { activityLog, agents, approvalComments, approvals, authUsers, heartbeatRuns, issueComments, issueFollows, issues, joinRequests, messengerCustomGroupEntries, messengerCustomGroups, messengerThreadUserStates, projects } from "@rudderhq/db";
|
|
2
|
-
import { formatMessengerPreview, formatMessengerTitle, issueUpdatedChangedKeys,
|
|
1
|
+
import { activityLog, agents, approvalComments, approvals, authUsers, heartbeatRuns, issueComments, issueFollows, issues, joinRequests, messengerCustomGroupEntries, messengerCustomGroups, messengerSavedViews, messengerThreadUserStates, projects } from "@rudderhq/db";
|
|
2
|
+
import { formatMessengerPreview, formatMessengerTitle, issueUpdatedChangedKeys, messengerSavedViewIdSchema } from "@rudderhq/shared";
|
|
3
3
|
import { and, asc, desc, eq, gt, inArray, isNull, ne, or, sql } from "drizzle-orm";
|
|
4
4
|
import { badRequest, conflict, notFound } from "../errors.js";
|
|
5
5
|
import { redactEventPayload } from "../redaction.js";
|
|
6
|
+
import { logActivity } from "./activity-log.js";
|
|
6
7
|
import { budgetService } from "./budgets.js";
|
|
7
8
|
import { chatService } from "./chats.js";
|
|
8
9
|
import { issueLowSignalContentOnlyActivitySql } from "./issue-activity-filters.js";
|
|
10
|
+
import { hydrateMessengerFailedRunOrigins, messengerFailedRunSourceAction, } from "./messenger-run-origin.js";
|
|
11
|
+
import { failedRunUserSummary } from "./messenger-run-summary.js";
|
|
12
|
+
import { lockMessengerCustomGroupPlacement, lockMessengerSavedViewPlacement, } from "./messenger-saved-views.js";
|
|
9
13
|
const ISSUE_ACTIVITY_ACTIONS = [
|
|
10
14
|
"issue.updated",
|
|
11
15
|
"issue.followed",
|
|
@@ -25,7 +29,6 @@ const DEFAULT_THREAD_SUMMARY_LIMIT = 40;
|
|
|
25
29
|
const MAX_THREAD_SUMMARY_LIMIT = 100;
|
|
26
30
|
const DEFAULT_ISSUE_THREAD_DETAIL_LIMIT = 50;
|
|
27
31
|
const MAX_ISSUE_THREAD_DETAIL_LIMIT = 100;
|
|
28
|
-
const FAILED_RUN_USER_SUMMARY = "The run hit a system-level execution problem. Rudder saved the technical details for diagnostics.";
|
|
29
32
|
function truncate(value, max = 140) {
|
|
30
33
|
return formatMessengerPreview(value, { max });
|
|
31
34
|
}
|
|
@@ -556,10 +559,9 @@ function approvalCard(approval, latestComment, currentUserId, latestActivityAt)
|
|
|
556
559
|
approval: approval,
|
|
557
560
|
};
|
|
558
561
|
}
|
|
559
|
-
function failedRunCard(run, agentName) {
|
|
562
|
+
function failedRunCard(run, agentName, origin) {
|
|
560
563
|
const summary = failedRunUserSummary(run);
|
|
561
|
-
const
|
|
562
|
-
const publicRun = { ...run, contextSnapshot: publicContextSnapshot };
|
|
564
|
+
const sourceAction = messengerFailedRunSourceAction(origin);
|
|
563
565
|
return {
|
|
564
566
|
id: run.id,
|
|
565
567
|
threadKey: "failed-runs",
|
|
@@ -572,23 +574,17 @@ function failedRunCard(run, agentName) {
|
|
|
572
574
|
latestActivityAt: run.updatedAt ?? run.createdAt,
|
|
573
575
|
actions: [
|
|
574
576
|
buildAction("Retry", `/agent-runs/${run.id}/retry`, "POST"),
|
|
577
|
+
...(sourceAction ? [sourceAction] : []),
|
|
575
578
|
buildAction("Open run", `/agents/${run.agentId}/runs/${run.id}`, "GET"),
|
|
576
579
|
],
|
|
577
580
|
metadata: {
|
|
578
581
|
runId: run.id,
|
|
579
582
|
agentId: run.agentId,
|
|
580
583
|
status: run.status,
|
|
581
|
-
contextSnapshot: publicContextSnapshot,
|
|
582
584
|
},
|
|
583
|
-
|
|
585
|
+
origin,
|
|
584
586
|
};
|
|
585
587
|
}
|
|
586
|
-
function readNonEmptyString(value) {
|
|
587
|
-
return typeof value === "string" && value.trim().length > 0 ? value.trim() : null;
|
|
588
|
-
}
|
|
589
|
-
function failedRunUserSummary(run) {
|
|
590
|
-
return readNonEmptyString(run.resultJson?.userMessage) ?? FAILED_RUN_USER_SUMMARY;
|
|
591
|
-
}
|
|
592
588
|
function budgetCard(incident) {
|
|
593
589
|
return {
|
|
594
590
|
id: incident.id,
|
|
@@ -676,8 +672,30 @@ export function messengerService(db) {
|
|
|
676
672
|
|| threadKey === "budget-alerts"
|
|
677
673
|
|| threadKey === "join-requests";
|
|
678
674
|
}
|
|
679
|
-
|
|
680
|
-
|
|
675
|
+
function savedViewIdFromItemKey(itemKey) {
|
|
676
|
+
if (!itemKey.startsWith("saved-view:"))
|
|
677
|
+
return null;
|
|
678
|
+
const parsed = messengerSavedViewIdSchema.safeParse(itemKey.slice("saved-view:".length));
|
|
679
|
+
if (!parsed.success)
|
|
680
|
+
throw badRequest("Invalid Messenger Saved View item key");
|
|
681
|
+
return parsed.data;
|
|
682
|
+
}
|
|
683
|
+
async function logSavedViewPlacement(database, orgId, userId, itemKey, action, details) {
|
|
684
|
+
const savedViewId = savedViewIdFromItemKey(itemKey);
|
|
685
|
+
if (!savedViewId)
|
|
686
|
+
return;
|
|
687
|
+
await logActivity(database, {
|
|
688
|
+
orgId,
|
|
689
|
+
actorType: "user",
|
|
690
|
+
actorId: userId,
|
|
691
|
+
action,
|
|
692
|
+
entityType: "messenger_saved_view",
|
|
693
|
+
entityId: savedViewId,
|
|
694
|
+
details: { itemKey, ...details },
|
|
695
|
+
});
|
|
696
|
+
}
|
|
697
|
+
async function getCustomGroupOrThrowWithDb(database, orgId, userId, groupId) {
|
|
698
|
+
const [group] = await database
|
|
681
699
|
.select()
|
|
682
700
|
.from(messengerCustomGroups)
|
|
683
701
|
.where(and(eq(messengerCustomGroups.orgId, orgId), eq(messengerCustomGroups.userId, userId), eq(messengerCustomGroups.id, groupId)))
|
|
@@ -686,6 +704,9 @@ export function messengerService(db) {
|
|
|
686
704
|
throw notFound("Messenger custom group not found");
|
|
687
705
|
return group;
|
|
688
706
|
}
|
|
707
|
+
async function getCustomGroupOrThrow(orgId, userId, groupId) {
|
|
708
|
+
return getCustomGroupOrThrowWithDb(db, orgId, userId, groupId);
|
|
709
|
+
}
|
|
689
710
|
async function loadIssueThreadSummaryById(orgId, userId, issueId) {
|
|
690
711
|
const lastReadAtPromise = lastReadAtForThread(db, orgId, userId, "issues");
|
|
691
712
|
const rows = (await db.execute(issueEntryRowsQuery(orgId, userId, sql `
|
|
@@ -754,9 +775,28 @@ export function messengerService(db) {
|
|
|
754
775
|
throw notFound("Messenger thread not found");
|
|
755
776
|
}
|
|
756
777
|
}
|
|
778
|
+
async function findMessengerSavedViewWithDb(database, orgId, userId, itemKey) {
|
|
779
|
+
const savedViewId = savedViewIdFromItemKey(itemKey);
|
|
780
|
+
if (!savedViewId)
|
|
781
|
+
return null;
|
|
782
|
+
return database
|
|
783
|
+
.select()
|
|
784
|
+
.from(messengerSavedViews)
|
|
785
|
+
.where(and(eq(messengerSavedViews.orgId, orgId), eq(messengerSavedViews.userId, userId), eq(messengerSavedViews.id, savedViewId)))
|
|
786
|
+
.limit(1)
|
|
787
|
+
.then((rows) => rows[0] ?? null);
|
|
788
|
+
}
|
|
789
|
+
async function findMessengerSavedView(orgId, userId, itemKey) {
|
|
790
|
+
return findMessengerSavedViewWithDb(db, orgId, userId, itemKey);
|
|
791
|
+
}
|
|
757
792
|
async function listThreadTitles(orgId, userId, threadKeys) {
|
|
758
793
|
const titles = [];
|
|
759
794
|
for (const threadKey of [...new Set(threadKeys)]) {
|
|
795
|
+
const savedView = await findMessengerSavedView(orgId, userId, threadKey);
|
|
796
|
+
if (savedView?.title) {
|
|
797
|
+
titles.push(savedView.title);
|
|
798
|
+
continue;
|
|
799
|
+
}
|
|
760
800
|
const summary = await findMessengerThreadSummary(orgId, userId, threadKey);
|
|
761
801
|
if (summary?.title)
|
|
762
802
|
titles.push(summary.title);
|
|
@@ -785,8 +825,22 @@ export function messengerService(db) {
|
|
|
785
825
|
.where(and(eq(messengerCustomGroupEntries.orgId, orgId), eq(messengerCustomGroupEntries.userId, userId)))
|
|
786
826
|
.orderBy(asc(messengerCustomGroupEntries.sortOrder), asc(messengerCustomGroupEntries.createdAt)),
|
|
787
827
|
]);
|
|
828
|
+
const savedViewItemKeys = entries
|
|
829
|
+
.map((entry) => entry.threadKey)
|
|
830
|
+
.filter((itemKey) => Boolean(savedViewIdFromItemKey(itemKey)));
|
|
831
|
+
const savedViewIds = savedViewItemKeys
|
|
832
|
+
.map((itemKey) => savedViewIdFromItemKey(itemKey))
|
|
833
|
+
.filter((id) => Boolean(id));
|
|
834
|
+
const savedViews = savedViewIds.length > 0
|
|
835
|
+
? await db
|
|
836
|
+
.select()
|
|
837
|
+
.from(messengerSavedViews)
|
|
838
|
+
.where(and(eq(messengerSavedViews.orgId, orgId), eq(messengerSavedViews.userId, userId), inArray(messengerSavedViews.id, savedViewIds)))
|
|
839
|
+
: [];
|
|
840
|
+
const savedViewByItemKey = new Map(savedViews.map((savedView) => [`saved-view:${savedView.id}`, savedView]));
|
|
788
841
|
const conversationIds = entries
|
|
789
842
|
.map((entry) => entry.threadKey)
|
|
843
|
+
.filter((itemKey) => !savedViewIdFromItemKey(itemKey))
|
|
790
844
|
.map((threadKey) => chatConversationIdFromThreadKey(threadKey))
|
|
791
845
|
.filter((id) => Boolean(id));
|
|
792
846
|
const conversations = await chatsSvc.listSummariesByIds(orgId, conversationIds, userId);
|
|
@@ -796,6 +850,7 @@ export function messengerService(db) {
|
|
|
796
850
|
}));
|
|
797
851
|
const nonChatThreadKeys = [...new Set(entries
|
|
798
852
|
.map((entry) => entry.threadKey)
|
|
853
|
+
.filter((itemKey) => !savedViewIdFromItemKey(itemKey))
|
|
799
854
|
.filter((threadKey) => !chatConversationIdFromThreadKey(threadKey)))];
|
|
800
855
|
const issueThreadKeys = nonChatThreadKeys.filter((threadKey) => Boolean(issueIdFromThreadKey(threadKey)));
|
|
801
856
|
if (nonChatThreadKeys.length > 0) {
|
|
@@ -819,6 +874,36 @@ export function messengerService(db) {
|
|
|
819
874
|
const staleEntryIds = [];
|
|
820
875
|
const entriesByGroupId = new Map();
|
|
821
876
|
for (const entry of entries) {
|
|
877
|
+
const savedViewId = savedViewIdFromItemKey(entry.threadKey);
|
|
878
|
+
if (savedViewId) {
|
|
879
|
+
const savedView = savedViewByItemKey.get(entry.threadKey);
|
|
880
|
+
if (!savedView) {
|
|
881
|
+
staleEntryIds.push(entry.id);
|
|
882
|
+
continue;
|
|
883
|
+
}
|
|
884
|
+
// Hidden Saved Views retain their exact membership and order, but are
|
|
885
|
+
// omitted from the visible hydrated directory until restored.
|
|
886
|
+
if (savedView.hiddenAt)
|
|
887
|
+
continue;
|
|
888
|
+
const { threadKey: _storedItemKey, ...entryFields } = entry;
|
|
889
|
+
const item = {
|
|
890
|
+
type: "saved_view",
|
|
891
|
+
itemKey: entry.threadKey,
|
|
892
|
+
title: savedView.title,
|
|
893
|
+
savedView,
|
|
894
|
+
};
|
|
895
|
+
const hydratedEntry = {
|
|
896
|
+
...entryFields,
|
|
897
|
+
itemKey: entry.threadKey,
|
|
898
|
+
item,
|
|
899
|
+
};
|
|
900
|
+
const groupEntries = entriesByGroupId.get(entry.groupId);
|
|
901
|
+
if (groupEntries)
|
|
902
|
+
groupEntries.push(hydratedEntry);
|
|
903
|
+
else
|
|
904
|
+
entriesByGroupId.set(entry.groupId, [hydratedEntry]);
|
|
905
|
+
continue;
|
|
906
|
+
}
|
|
822
907
|
const summary = summaryByThreadKey.get(entry.threadKey);
|
|
823
908
|
if (!summary) {
|
|
824
909
|
if (isSyntheticMessengerThreadKey(entry.threadKey)) {
|
|
@@ -829,6 +914,13 @@ export function messengerService(db) {
|
|
|
829
914
|
}
|
|
830
915
|
const hydratedEntry = {
|
|
831
916
|
...entry,
|
|
917
|
+
itemKey: entry.threadKey,
|
|
918
|
+
item: {
|
|
919
|
+
type: "thread",
|
|
920
|
+
itemKey: entry.threadKey,
|
|
921
|
+
title: summary.title,
|
|
922
|
+
thread: summary,
|
|
923
|
+
},
|
|
832
924
|
thread: summary,
|
|
833
925
|
};
|
|
834
926
|
const groupEntries = entriesByGroupId.get(entry.groupId);
|
|
@@ -891,15 +983,33 @@ export function messengerService(db) {
|
|
|
891
983
|
.returning();
|
|
892
984
|
return group;
|
|
893
985
|
}
|
|
986
|
+
async function removeCustomGroup(orgId, userId, groupId, source) {
|
|
987
|
+
return db.transaction(async (tx) => {
|
|
988
|
+
const txDb = tx;
|
|
989
|
+
await lockMessengerSavedViewPlacement(txDb, orgId, userId);
|
|
990
|
+
await lockMessengerCustomGroupPlacement(txDb, orgId, userId, groupId);
|
|
991
|
+
await getCustomGroupOrThrowWithDb(txDb, orgId, userId, groupId);
|
|
992
|
+
const savedMemberships = (await txDb
|
|
993
|
+
.select({ threadKey: messengerCustomGroupEntries.threadKey })
|
|
994
|
+
.from(messengerCustomGroupEntries)
|
|
995
|
+
.where(and(eq(messengerCustomGroupEntries.orgId, orgId), eq(messengerCustomGroupEntries.userId, userId), eq(messengerCustomGroupEntries.groupId, groupId))))
|
|
996
|
+
.filter((entry) => Boolean(savedViewIdFromItemKey(entry.threadKey)));
|
|
997
|
+
for (const membership of savedMemberships) {
|
|
998
|
+
await logSavedViewPlacement(txDb, orgId, userId, membership.threadKey, "messenger.saved_view_group_removed", { groupId, source });
|
|
999
|
+
}
|
|
1000
|
+
const [group] = await txDb
|
|
1001
|
+
.delete(messengerCustomGroups)
|
|
1002
|
+
.where(and(eq(messengerCustomGroups.orgId, orgId), eq(messengerCustomGroups.userId, userId), eq(messengerCustomGroups.id, groupId)))
|
|
1003
|
+
.returning();
|
|
1004
|
+
return group;
|
|
1005
|
+
});
|
|
1006
|
+
}
|
|
894
1007
|
async function separateCustomGroup(orgId, userId, groupId) {
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
.returning();
|
|
900
|
-
return group;
|
|
1008
|
+
return removeCustomGroup(orgId, userId, groupId, "group_separate");
|
|
1009
|
+
}
|
|
1010
|
+
async function deleteCustomGroup(orgId, userId, groupId) {
|
|
1011
|
+
return removeCustomGroup(orgId, userId, groupId, "group_delete");
|
|
901
1012
|
}
|
|
902
|
-
const deleteCustomGroup = separateCustomGroup;
|
|
903
1013
|
async function reorderCustomGroups(orgId, userId, groupIds) {
|
|
904
1014
|
const uniqueGroupIds = [...new Set(groupIds)];
|
|
905
1015
|
if (uniqueGroupIds.length === 0)
|
|
@@ -922,16 +1032,15 @@ export function messengerService(db) {
|
|
|
922
1032
|
});
|
|
923
1033
|
return listCustomGroups(orgId, userId);
|
|
924
1034
|
}
|
|
925
|
-
async function assignThreadToCustomGroupWithClient(
|
|
926
|
-
|
|
927
|
-
const [lastEntry] = await client
|
|
1035
|
+
async function assignThreadToCustomGroupWithClient(database, orgId, userId, groupId, threadKey) {
|
|
1036
|
+
const [lastEntry] = await database
|
|
928
1037
|
.select({ sortOrder: messengerCustomGroupEntries.sortOrder })
|
|
929
1038
|
.from(messengerCustomGroupEntries)
|
|
930
1039
|
.where(and(eq(messengerCustomGroupEntries.orgId, orgId), eq(messengerCustomGroupEntries.userId, userId), eq(messengerCustomGroupEntries.groupId, groupId)))
|
|
931
1040
|
.orderBy(desc(messengerCustomGroupEntries.sortOrder))
|
|
932
1041
|
.limit(1);
|
|
933
1042
|
const now = new Date();
|
|
934
|
-
const [entry] = await
|
|
1043
|
+
const [entry] = await database
|
|
935
1044
|
.insert(messengerCustomGroupEntries)
|
|
936
1045
|
.values({
|
|
937
1046
|
orgId,
|
|
@@ -954,49 +1063,159 @@ export function messengerService(db) {
|
|
|
954
1063
|
},
|
|
955
1064
|
})
|
|
956
1065
|
.returning();
|
|
957
|
-
|
|
1066
|
+
if (savedViewIdFromItemKey(threadKey)) {
|
|
1067
|
+
const { threadKey: _storedItemKey, ...entryFields } = entry;
|
|
1068
|
+
return { ...entryFields, itemKey: threadKey };
|
|
1069
|
+
}
|
|
1070
|
+
return { ...entry, itemKey: threadKey };
|
|
958
1071
|
}
|
|
959
1072
|
async function assignThreadToCustomGroup(orgId, userId, groupId, threadKey) {
|
|
960
|
-
|
|
961
|
-
|
|
1073
|
+
const savedViewId = savedViewIdFromItemKey(threadKey);
|
|
1074
|
+
if (!savedViewId) {
|
|
1075
|
+
await ensureMessengerThreadCanBeGrouped(orgId, userId, threadKey);
|
|
1076
|
+
}
|
|
1077
|
+
return db.transaction(async (tx) => {
|
|
1078
|
+
const txDb = tx;
|
|
1079
|
+
// The owner lock keeps the source membership stable while we resolve and
|
|
1080
|
+
// acquire all affected group locks. Saved placements also share it with
|
|
1081
|
+
// Saved View delete, preventing a post-cleanup orphan insert.
|
|
1082
|
+
await lockMessengerSavedViewPlacement(txDb, orgId, userId);
|
|
1083
|
+
const [existingMembership] = await txDb
|
|
1084
|
+
.select({ groupId: messengerCustomGroupEntries.groupId })
|
|
1085
|
+
.from(messengerCustomGroupEntries)
|
|
1086
|
+
.where(and(eq(messengerCustomGroupEntries.orgId, orgId), eq(messengerCustomGroupEntries.userId, userId), eq(messengerCustomGroupEntries.threadKey, threadKey)))
|
|
1087
|
+
.limit(1);
|
|
1088
|
+
const affectedGroupIds = [...new Set([existingMembership?.groupId, groupId].filter((id) => Boolean(id)))].sort();
|
|
1089
|
+
for (const affectedGroupId of affectedGroupIds) {
|
|
1090
|
+
await lockMessengerCustomGroupPlacement(txDb, orgId, userId, affectedGroupId);
|
|
1091
|
+
}
|
|
1092
|
+
await getCustomGroupOrThrowWithDb(txDb, orgId, userId, groupId);
|
|
1093
|
+
if (savedViewId && !await findMessengerSavedViewWithDb(txDb, orgId, userId, threadKey)) {
|
|
1094
|
+
throw notFound("Messenger Saved View not found");
|
|
1095
|
+
}
|
|
1096
|
+
const entry = await assignThreadToCustomGroupWithClient(txDb, orgId, userId, groupId, threadKey);
|
|
1097
|
+
if (savedViewId) {
|
|
1098
|
+
await logSavedViewPlacement(txDb, orgId, userId, threadKey, "messenger.saved_view_group_assigned", { groupId });
|
|
1099
|
+
}
|
|
1100
|
+
return entry;
|
|
1101
|
+
});
|
|
962
1102
|
}
|
|
963
1103
|
async function createCustomGroupWithEntries(orgId, userId, name, icon, threadKeys) {
|
|
964
1104
|
const uniqueThreadKeys = [...new Set(threadKeys)];
|
|
965
1105
|
if (uniqueThreadKeys.length === 0)
|
|
966
1106
|
throw badRequest("At least one thread key is required");
|
|
1107
|
+
const savedViewItemKeys = new Set();
|
|
1108
|
+
for (const threadKey of uniqueThreadKeys) {
|
|
1109
|
+
if (savedViewIdFromItemKey(threadKey))
|
|
1110
|
+
savedViewItemKeys.add(threadKey);
|
|
1111
|
+
else
|
|
1112
|
+
await ensureMessengerThreadCanBeGrouped(orgId, userId, threadKey);
|
|
1113
|
+
}
|
|
967
1114
|
await db.transaction(async (tx) => {
|
|
1115
|
+
const txDb = tx;
|
|
1116
|
+
await lockMessengerSavedViewPlacement(txDb, orgId, userId);
|
|
968
1117
|
const group = await createCustomGroupWithClient(tx, orgId, userId, name, icon);
|
|
1118
|
+
await lockMessengerCustomGroupPlacement(txDb, orgId, userId, group.id);
|
|
969
1119
|
for (const threadKey of uniqueThreadKeys) {
|
|
970
|
-
await
|
|
1120
|
+
if (savedViewItemKeys.has(threadKey) && !await findMessengerSavedViewWithDb(txDb, orgId, userId, threadKey)) {
|
|
1121
|
+
throw notFound("Messenger Saved View not found");
|
|
1122
|
+
}
|
|
1123
|
+
await assignThreadToCustomGroupWithClient(txDb, orgId, userId, group.id, threadKey);
|
|
1124
|
+
await logSavedViewPlacement(txDb, orgId, userId, threadKey, "messenger.saved_view_group_assigned", {
|
|
1125
|
+
groupId: group.id,
|
|
1126
|
+
source: "group_create",
|
|
1127
|
+
});
|
|
971
1128
|
}
|
|
972
1129
|
});
|
|
973
1130
|
return listCustomGroups(orgId, userId);
|
|
974
1131
|
}
|
|
975
1132
|
async function removeThreadFromCustomGroups(orgId, userId, threadKey) {
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
1133
|
+
const savedViewId = savedViewIdFromItemKey(threadKey);
|
|
1134
|
+
await db.transaction(async (tx) => {
|
|
1135
|
+
const txDb = tx;
|
|
1136
|
+
await lockMessengerSavedViewPlacement(txDb, orgId, userId);
|
|
1137
|
+
if (savedViewId) {
|
|
1138
|
+
if (!await findMessengerSavedViewWithDb(txDb, orgId, userId, threadKey)) {
|
|
1139
|
+
throw notFound("Messenger Saved View not found");
|
|
1140
|
+
}
|
|
1141
|
+
}
|
|
1142
|
+
const [membership] = await txDb
|
|
1143
|
+
.select({ id: messengerCustomGroupEntries.id, groupId: messengerCustomGroupEntries.groupId })
|
|
1144
|
+
.from(messengerCustomGroupEntries)
|
|
1145
|
+
.where(and(eq(messengerCustomGroupEntries.orgId, orgId), eq(messengerCustomGroupEntries.userId, userId), eq(messengerCustomGroupEntries.threadKey, threadKey)))
|
|
1146
|
+
.limit(1);
|
|
1147
|
+
if (!membership)
|
|
1148
|
+
return;
|
|
1149
|
+
await lockMessengerCustomGroupPlacement(txDb, orgId, userId, membership.groupId);
|
|
1150
|
+
const deleted = await txDb
|
|
1151
|
+
.delete(messengerCustomGroupEntries)
|
|
1152
|
+
.where(and(eq(messengerCustomGroupEntries.id, membership.id), eq(messengerCustomGroupEntries.orgId, orgId), eq(messengerCustomGroupEntries.userId, userId), eq(messengerCustomGroupEntries.groupId, membership.groupId), eq(messengerCustomGroupEntries.threadKey, threadKey)))
|
|
1153
|
+
.returning({ id: messengerCustomGroupEntries.id });
|
|
1154
|
+
if (savedViewId && deleted.length > 0) {
|
|
1155
|
+
await logSavedViewPlacement(txDb, orgId, userId, threadKey, "messenger.saved_view_group_removed", {
|
|
1156
|
+
groupId: membership.groupId,
|
|
1157
|
+
source: "item_remove",
|
|
1158
|
+
});
|
|
1159
|
+
}
|
|
1160
|
+
});
|
|
1161
|
+
return savedViewId ? { itemKey: threadKey } : { itemKey: threadKey, threadKey };
|
|
980
1162
|
}
|
|
981
1163
|
async function reorderCustomGroupEntries(orgId, userId, groupId, threadKeys) {
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
.orderBy(asc(messengerCustomGroupEntries.sortOrder), asc(messengerCustomGroupEntries.createdAt));
|
|
988
|
-
const entryByThreadKey = new Map(entries.map((entry) => [entry.threadKey, entry]));
|
|
989
|
-
const orderedKeys = [
|
|
990
|
-
...threadKeys.filter((threadKey) => entryByThreadKey.has(threadKey)),
|
|
991
|
-
...entries.map((entry) => entry.threadKey).filter((threadKey) => !threadKeys.includes(threadKey)),
|
|
992
|
-
];
|
|
993
|
-
const now = new Date();
|
|
1164
|
+
if (new Set(threadKeys).size !== threadKeys.length) {
|
|
1165
|
+
throw badRequest("Messenger custom group reorder keys must be unique");
|
|
1166
|
+
}
|
|
1167
|
+
for (const itemKey of threadKeys)
|
|
1168
|
+
savedViewIdFromItemKey(itemKey);
|
|
994
1169
|
await db.transaction(async (tx) => {
|
|
995
|
-
|
|
996
|
-
|
|
1170
|
+
const txDb = tx;
|
|
1171
|
+
await lockMessengerSavedViewPlacement(txDb, orgId, userId);
|
|
1172
|
+
await lockMessengerCustomGroupPlacement(txDb, orgId, userId, groupId);
|
|
1173
|
+
await getCustomGroupOrThrowWithDb(txDb, orgId, userId, groupId);
|
|
1174
|
+
const entries = await txDb
|
|
1175
|
+
.select()
|
|
1176
|
+
.from(messengerCustomGroupEntries)
|
|
1177
|
+
.where(and(eq(messengerCustomGroupEntries.orgId, orgId), eq(messengerCustomGroupEntries.userId, userId), eq(messengerCustomGroupEntries.groupId, groupId)))
|
|
1178
|
+
.orderBy(asc(messengerCustomGroupEntries.sortOrder), asc(messengerCustomGroupEntries.createdAt));
|
|
1179
|
+
const savedIds = entries
|
|
1180
|
+
.map((entry) => savedViewIdFromItemKey(entry.threadKey))
|
|
1181
|
+
.filter((id) => Boolean(id));
|
|
1182
|
+
const savedViews = savedIds.length > 0
|
|
1183
|
+
? await txDb
|
|
1184
|
+
.select({ id: messengerSavedViews.id, hiddenAt: messengerSavedViews.hiddenAt })
|
|
1185
|
+
.from(messengerSavedViews)
|
|
1186
|
+
.where(and(eq(messengerSavedViews.orgId, orgId), eq(messengerSavedViews.userId, userId), inArray(messengerSavedViews.id, savedIds)))
|
|
1187
|
+
: [];
|
|
1188
|
+
const hiddenSavedIds = new Set(savedViews.filter((view) => view.hiddenAt).map((view) => view.id));
|
|
1189
|
+
const visibleEntries = entries.filter((entry) => {
|
|
1190
|
+
const savedViewId = savedViewIdFromItemKey(entry.threadKey);
|
|
1191
|
+
return !savedViewId || !hiddenSavedIds.has(savedViewId);
|
|
1192
|
+
});
|
|
1193
|
+
const visibleByKey = new Map(visibleEntries.map((entry) => [entry.threadKey, entry]));
|
|
1194
|
+
const requested = new Set(threadKeys);
|
|
1195
|
+
const orderedKeys = [
|
|
1196
|
+
...threadKeys.filter((itemKey) => visibleByKey.has(itemKey)),
|
|
1197
|
+
...visibleEntries.map((entry) => entry.threadKey).filter((itemKey) => !requested.has(itemKey)),
|
|
1198
|
+
];
|
|
1199
|
+
const visibleSlots = visibleEntries.map((entry) => entry.sortOrder);
|
|
1200
|
+
const now = new Date();
|
|
1201
|
+
const changedSavedItemKeys = [];
|
|
1202
|
+
for (const [index, itemKey] of orderedKeys.entries()) {
|
|
1203
|
+
const entry = visibleByKey.get(itemKey);
|
|
1204
|
+
const nextSortOrder = visibleSlots[index];
|
|
1205
|
+
if (!entry || nextSortOrder === undefined || entry.sortOrder === nextSortOrder)
|
|
1206
|
+
continue;
|
|
1207
|
+
await txDb
|
|
997
1208
|
.update(messengerCustomGroupEntries)
|
|
998
|
-
.set({ sortOrder:
|
|
999
|
-
.where(and(eq(messengerCustomGroupEntries.orgId, orgId), eq(messengerCustomGroupEntries.userId, userId), eq(messengerCustomGroupEntries.groupId, groupId), eq(messengerCustomGroupEntries.threadKey,
|
|
1209
|
+
.set({ sortOrder: nextSortOrder, updatedAt: now })
|
|
1210
|
+
.where(and(eq(messengerCustomGroupEntries.orgId, orgId), eq(messengerCustomGroupEntries.userId, userId), eq(messengerCustomGroupEntries.groupId, groupId), eq(messengerCustomGroupEntries.threadKey, itemKey)));
|
|
1211
|
+
if (savedViewIdFromItemKey(itemKey))
|
|
1212
|
+
changedSavedItemKeys.push(itemKey);
|
|
1213
|
+
}
|
|
1214
|
+
for (const itemKey of changedSavedItemKeys) {
|
|
1215
|
+
await logSavedViewPlacement(txDb, orgId, userId, itemKey, "messenger.saved_view_group_reordered", {
|
|
1216
|
+
groupId,
|
|
1217
|
+
itemKeys: orderedKeys,
|
|
1218
|
+
});
|
|
1000
1219
|
}
|
|
1001
1220
|
});
|
|
1002
1221
|
return listCustomGroups(orgId, userId);
|
|
@@ -1652,12 +1871,12 @@ export function messengerService(db) {
|
|
|
1652
1871
|
id: heartbeatRuns.id,
|
|
1653
1872
|
orgId: heartbeatRuns.orgId,
|
|
1654
1873
|
agentId: heartbeatRuns.agentId,
|
|
1874
|
+
invocationSource: heartbeatRuns.invocationSource,
|
|
1875
|
+
triggerDetail: heartbeatRuns.triggerDetail,
|
|
1655
1876
|
status: heartbeatRuns.status,
|
|
1656
|
-
|
|
1657
|
-
|
|
1877
|
+
wakeupRequestId: heartbeatRuns.wakeupRequestId,
|
|
1878
|
+
chatConversationId: heartbeatRuns.chatConversationId,
|
|
1658
1879
|
resultJson: heartbeatRuns.resultJson,
|
|
1659
|
-
stderrExcerpt: heartbeatRuns.stderrExcerpt,
|
|
1660
|
-
stdoutExcerpt: heartbeatRuns.stdoutExcerpt,
|
|
1661
1880
|
contextSnapshot: heartbeatRuns.contextSnapshot,
|
|
1662
1881
|
createdAt: heartbeatRuns.createdAt,
|
|
1663
1882
|
updatedAt: heartbeatRuns.updatedAt,
|
|
@@ -1675,7 +1894,8 @@ export function messengerService(db) {
|
|
|
1675
1894
|
]);
|
|
1676
1895
|
const lastReadAt = await lastReadAtPromise;
|
|
1677
1896
|
const agentNames = new Map(agentRows.map((row) => [row.id, row.name]));
|
|
1678
|
-
const
|
|
1897
|
+
const origins = await hydrateMessengerFailedRunOrigins(db, orgId, runRows);
|
|
1898
|
+
const items = runRows.map((run) => failedRunCard(run, agentNames.get(run.agentId) ?? null, origins.get(run.id)));
|
|
1679
1899
|
const latestFirstItems = [...items].sort(compareLatestActivity);
|
|
1680
1900
|
const chronologicalItems = [...items].sort(compareChronologicalActivity);
|
|
1681
1901
|
const latestActivityAt = latestFirstItems[0]?.latestActivityAt ?? null;
|