@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
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { chatConversations, messengerCustomGroupEntries, messengerCustomGroups, } from "@rudderhq/db";
|
|
2
|
+
import { MESSENGER_FORK_GROUP_DEFAULT_ICON } from "@rudderhq/shared";
|
|
3
|
+
import { and, asc, desc, eq, sql } from "drizzle-orm";
|
|
4
|
+
async function findChatFamilyGroup(client, orgId, userId, rootConversationId) {
|
|
5
|
+
const rootThreadKey = `chat:${rootConversationId}`;
|
|
6
|
+
return client
|
|
7
|
+
.select({ id: messengerCustomGroups.id })
|
|
8
|
+
.from(messengerCustomGroups)
|
|
9
|
+
.innerJoin(messengerCustomGroupEntries, eq(messengerCustomGroupEntries.groupId, messengerCustomGroups.id))
|
|
10
|
+
.where(and(eq(messengerCustomGroups.orgId, orgId), eq(messengerCustomGroups.userId, userId), eq(messengerCustomGroupEntries.orgId, orgId), eq(messengerCustomGroupEntries.userId, userId), eq(messengerCustomGroupEntries.threadKey, rootThreadKey)))
|
|
11
|
+
.orderBy(asc(messengerCustomGroups.sortOrder), asc(messengerCustomGroups.createdAt))
|
|
12
|
+
.limit(1)
|
|
13
|
+
.then((rows) => rows[0] ?? null);
|
|
14
|
+
}
|
|
15
|
+
async function createChatFamilyGroup(client, orgId, userId, name) {
|
|
16
|
+
const [lastGroup] = await client
|
|
17
|
+
.select({ sortOrder: messengerCustomGroups.sortOrder })
|
|
18
|
+
.from(messengerCustomGroups)
|
|
19
|
+
.where(and(eq(messengerCustomGroups.orgId, orgId), eq(messengerCustomGroups.userId, userId)))
|
|
20
|
+
.orderBy(desc(messengerCustomGroups.sortOrder))
|
|
21
|
+
.limit(1);
|
|
22
|
+
const now = new Date();
|
|
23
|
+
const [group] = await client
|
|
24
|
+
.insert(messengerCustomGroups)
|
|
25
|
+
.values({
|
|
26
|
+
orgId,
|
|
27
|
+
userId,
|
|
28
|
+
name: name.trim() || "Forked conversation",
|
|
29
|
+
icon: MESSENGER_FORK_GROUP_DEFAULT_ICON,
|
|
30
|
+
sortOrder: (lastGroup?.sortOrder ?? -1) + 1,
|
|
31
|
+
updatedAt: now,
|
|
32
|
+
})
|
|
33
|
+
.returning();
|
|
34
|
+
if (!group)
|
|
35
|
+
throw new Error("Failed to create Messenger conversation family group");
|
|
36
|
+
return group;
|
|
37
|
+
}
|
|
38
|
+
async function assignChatToFamilyGroup(client, orgId, userId, groupId, conversationId) {
|
|
39
|
+
const [lastEntry] = await client
|
|
40
|
+
.select({ sortOrder: messengerCustomGroupEntries.sortOrder })
|
|
41
|
+
.from(messengerCustomGroupEntries)
|
|
42
|
+
.where(and(eq(messengerCustomGroupEntries.orgId, orgId), eq(messengerCustomGroupEntries.userId, userId), eq(messengerCustomGroupEntries.groupId, groupId)))
|
|
43
|
+
.orderBy(desc(messengerCustomGroupEntries.sortOrder))
|
|
44
|
+
.limit(1);
|
|
45
|
+
const nextSortOrder = (lastEntry?.sortOrder ?? -1) + 1;
|
|
46
|
+
const now = new Date();
|
|
47
|
+
await client
|
|
48
|
+
.insert(messengerCustomGroupEntries)
|
|
49
|
+
.values({
|
|
50
|
+
orgId,
|
|
51
|
+
userId,
|
|
52
|
+
groupId,
|
|
53
|
+
threadKey: `chat:${conversationId}`,
|
|
54
|
+
sortOrder: nextSortOrder,
|
|
55
|
+
updatedAt: now,
|
|
56
|
+
})
|
|
57
|
+
.onConflictDoUpdate({
|
|
58
|
+
target: [
|
|
59
|
+
messengerCustomGroupEntries.orgId,
|
|
60
|
+
messengerCustomGroupEntries.userId,
|
|
61
|
+
messengerCustomGroupEntries.threadKey,
|
|
62
|
+
],
|
|
63
|
+
set: {
|
|
64
|
+
groupId,
|
|
65
|
+
sortOrder: sql `CASE
|
|
66
|
+
WHEN ${messengerCustomGroupEntries.groupId} = ${groupId}
|
|
67
|
+
THEN ${messengerCustomGroupEntries.sortOrder}
|
|
68
|
+
ELSE ${nextSortOrder}
|
|
69
|
+
END`,
|
|
70
|
+
updatedAt: now,
|
|
71
|
+
},
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
export async function ensureChatFamilyGroup(client, input) {
|
|
75
|
+
// Family membership is user-scoped, but the root row is the stable lock shared
|
|
76
|
+
// by concurrent Fork and Side Chat promotions in the same conversation family.
|
|
77
|
+
await client.execute(sql `
|
|
78
|
+
SELECT ${chatConversations.id}
|
|
79
|
+
FROM ${chatConversations}
|
|
80
|
+
WHERE ${chatConversations.id} = ${input.rootConversationId}
|
|
81
|
+
AND ${chatConversations.orgId} = ${input.orgId}
|
|
82
|
+
FOR UPDATE
|
|
83
|
+
`);
|
|
84
|
+
const existing = await findChatFamilyGroup(client, input.orgId, input.userId, input.rootConversationId);
|
|
85
|
+
const group = existing ?? await createChatFamilyGroup(client, input.orgId, input.userId, input.groupName);
|
|
86
|
+
const familyConversationIds = new Set([
|
|
87
|
+
input.rootConversationId,
|
|
88
|
+
input.sourceConversationId,
|
|
89
|
+
input.childConversationId,
|
|
90
|
+
]);
|
|
91
|
+
for (const conversationId of familyConversationIds) {
|
|
92
|
+
await assignChatToFamilyGroup(client, input.orgId, input.userId, group.id, conversationId);
|
|
93
|
+
}
|
|
94
|
+
return group;
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=chat-family-groups.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-family-groups.js","sourceRoot":"","sources":["../../src/services/chat-family-groups.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,26 +1,12 @@
|
|
|
1
1
|
import type { Db } from "@rudderhq/db";
|
|
2
2
|
import { chatControlActions, chatGenerationEvents, chatGenerations, chatGenerationTerminalOutbox, chatQueuedMessages } from "@rudderhq/db";
|
|
3
|
-
import type { ChatControlDisposition,
|
|
3
|
+
import type { ChatControlDisposition, ChatGenerationStatus, ChatStreamTranscriptEntry } from "@rudderhq/shared";
|
|
4
|
+
import { type AppendEventFields, type ChatGenerationProtocolTransaction } from "./chat-generation-protocol.helpers.js";
|
|
5
|
+
export { hashChatGenerationBody } from "./chat-generation-protocol.helpers.js";
|
|
4
6
|
type GenerationRow = typeof chatGenerations.$inferSelect;
|
|
5
7
|
type GenerationEventRow = typeof chatGenerationEvents.$inferSelect;
|
|
6
8
|
type ControlActionRow = typeof chatControlActions.$inferSelect;
|
|
7
9
|
type TerminalOutboxRow = typeof chatGenerationTerminalOutbox.$inferSelect;
|
|
8
|
-
export type ChatGenerationProtocolTransaction = Parameters<Parameters<Db["transaction"]>[0]>[0];
|
|
9
|
-
export declare function hashChatGenerationBody(body: string): string;
|
|
10
|
-
type AppendEventFields = {
|
|
11
|
-
orgId: string;
|
|
12
|
-
generationId: string;
|
|
13
|
-
attemptEpoch: number;
|
|
14
|
-
eventKind: ChatGenerationEventKind;
|
|
15
|
-
payload?: Record<string, unknown>;
|
|
16
|
-
bodyOffset?: number | null;
|
|
17
|
-
bodyLength?: number | null;
|
|
18
|
-
assistantMessageId?: string | null;
|
|
19
|
-
runId?: string | null;
|
|
20
|
-
controlActionId?: string | null;
|
|
21
|
-
queueItemId?: string | null;
|
|
22
|
-
emittedAt?: Date | null;
|
|
23
|
-
};
|
|
24
10
|
type VisibleGenerationProjection = {
|
|
25
11
|
body: string;
|
|
26
12
|
transcript: ChatStreamTranscriptEntry[];
|
|
@@ -81,7 +67,7 @@ export declare function chatGenerationProtocolService(db: Db): {
|
|
|
81
67
|
generationId: string;
|
|
82
68
|
attemptEpoch: number;
|
|
83
69
|
generationSeq: number;
|
|
84
|
-
eventKind: ChatGenerationEventKind;
|
|
70
|
+
eventKind: import("@rudderhq/shared").ChatGenerationEventKind;
|
|
85
71
|
bodyOffset: number | null;
|
|
86
72
|
bodyLength: number | null;
|
|
87
73
|
queueItemId: string | null;
|
|
@@ -158,22 +144,22 @@ export declare function chatGenerationProtocolService(db: Db): {
|
|
|
158
144
|
lateBytes: number;
|
|
159
145
|
};
|
|
160
146
|
message: {
|
|
161
|
-
status: string;
|
|
162
|
-
conversationId: string;
|
|
163
147
|
id: string;
|
|
164
148
|
orgId: string;
|
|
149
|
+
conversationId: string;
|
|
150
|
+
role: string;
|
|
165
151
|
kind: string;
|
|
166
|
-
|
|
167
|
-
updatedAt: Date;
|
|
168
|
-
runId: string | null;
|
|
152
|
+
status: string;
|
|
169
153
|
body: string;
|
|
170
|
-
role: string;
|
|
171
|
-
approvalId: string | null;
|
|
172
154
|
structuredPayload: Record<string, unknown> | null;
|
|
155
|
+
approvalId: string | null;
|
|
156
|
+
runId: string | null;
|
|
173
157
|
replyingAgentId: string | null;
|
|
174
158
|
chatTurnId: string | null;
|
|
175
159
|
turnVariant: number;
|
|
176
160
|
supersededAt: Date | null;
|
|
161
|
+
createdAt: Date;
|
|
162
|
+
updatedAt: Date;
|
|
177
163
|
};
|
|
178
164
|
event: {
|
|
179
165
|
assistantMessageId: string | null;
|
|
@@ -185,7 +171,7 @@ export declare function chatGenerationProtocolService(db: Db): {
|
|
|
185
171
|
generationId: string;
|
|
186
172
|
attemptEpoch: number;
|
|
187
173
|
generationSeq: number;
|
|
188
|
-
eventKind: ChatGenerationEventKind;
|
|
174
|
+
eventKind: import("@rudderhq/shared").ChatGenerationEventKind;
|
|
189
175
|
bodyOffset: number | null;
|
|
190
176
|
bodyLength: number | null;
|
|
191
177
|
queueItemId: string | null;
|
|
@@ -308,7 +294,7 @@ export declare function chatGenerationProtocolService(db: Db): {
|
|
|
308
294
|
generationId: string;
|
|
309
295
|
attemptEpoch: number;
|
|
310
296
|
generationSeq: number;
|
|
311
|
-
eventKind: ChatGenerationEventKind;
|
|
297
|
+
eventKind: import("@rudderhq/shared").ChatGenerationEventKind;
|
|
312
298
|
bodyOffset: number | null;
|
|
313
299
|
bodyLength: number | null;
|
|
314
300
|
queueItemId: string | null;
|
|
@@ -324,6 +310,7 @@ export declare function chatGenerationProtocolService(db: Db): {
|
|
|
324
310
|
expectedGenerationId: string;
|
|
325
311
|
expectedAttemptEpoch: number;
|
|
326
312
|
expectedControlVersion: number;
|
|
313
|
+
admissionControlVersion?: number;
|
|
327
314
|
requestedRenderSeq: number;
|
|
328
315
|
requestedBodyHash: string;
|
|
329
316
|
now?: Date;
|
|
@@ -332,7 +319,7 @@ export declare function chatGenerationProtocolService(db: Db): {
|
|
|
332
319
|
generation: GenerationRow;
|
|
333
320
|
stopRequestedEvent: GenerationEventRow | null;
|
|
334
321
|
outputCutoffEvent: GenerationEventRow | null;
|
|
335
|
-
outcome: "stop_applied" | "completion_committed";
|
|
322
|
+
outcome: "stop_applied" | "stop_in_progress" | "completion_committed" | "already_terminal";
|
|
336
323
|
idempotent: boolean;
|
|
337
324
|
}>;
|
|
338
325
|
beginSteerFallbackCutoff: (input: {
|
|
@@ -456,7 +443,7 @@ export declare function chatGenerationProtocolService(db: Db): {
|
|
|
456
443
|
generationId: string;
|
|
457
444
|
attemptEpoch: number;
|
|
458
445
|
generationSeq: number;
|
|
459
|
-
eventKind: ChatGenerationEventKind;
|
|
446
|
+
eventKind: import("@rudderhq/shared").ChatGenerationEventKind;
|
|
460
447
|
bodyOffset: number | null;
|
|
461
448
|
bodyLength: number | null;
|
|
462
449
|
queueItemId: string | null;
|
|
@@ -620,7 +607,7 @@ export declare function chatGenerationProtocolService(db: Db): {
|
|
|
620
607
|
generationId: string;
|
|
621
608
|
attemptEpoch: number;
|
|
622
609
|
generationSeq: number;
|
|
623
|
-
eventKind: ChatGenerationEventKind;
|
|
610
|
+
eventKind: import("@rudderhq/shared").ChatGenerationEventKind;
|
|
624
611
|
bodyOffset: number | null;
|
|
625
612
|
bodyLength: number | null;
|
|
626
613
|
queueItemId: string | null;
|
|
@@ -670,5 +657,4 @@ export declare function chatGenerationProtocolService(db: Db): {
|
|
|
670
657
|
outbox: TerminalOutboxRow;
|
|
671
658
|
}[]>;
|
|
672
659
|
};
|
|
673
|
-
export {};
|
|
674
660
|
//# sourceMappingURL=chat-generation-protocol.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-generation-protocol.d.ts","sourceRoot":"","sources":["../../src/services/chat-generation-protocol.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,4BAA4B,EAE5B,kBAAkB,EACnB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EACV,sBAAsB,EACtB,
|
|
1
|
+
{"version":3,"file":"chat-generation-protocol.d.ts","sourceRoot":"","sources":["../../src/services/chat-generation-protocol.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { Db } from "@rudderhq/db";
|
|
2
|
+
import { chatGenerations } from "@rudderhq/db";
|
|
3
|
+
import type { ChatGenerationEventKind } from "@rudderhq/shared";
|
|
4
|
+
type GenerationRow = typeof chatGenerations.$inferSelect;
|
|
5
|
+
export type ChatGenerationProtocolTransaction = Parameters<Parameters<Db["transaction"]>[0]>[0];
|
|
6
|
+
export type AppendEventFields = {
|
|
7
|
+
orgId: string;
|
|
8
|
+
generationId: string;
|
|
9
|
+
attemptEpoch: number;
|
|
10
|
+
eventKind: ChatGenerationEventKind;
|
|
11
|
+
payload?: Record<string, unknown>;
|
|
12
|
+
bodyOffset?: number | null;
|
|
13
|
+
bodyLength?: number | null;
|
|
14
|
+
assistantMessageId?: string | null;
|
|
15
|
+
runId?: string | null;
|
|
16
|
+
controlActionId?: string | null;
|
|
17
|
+
queueItemId?: string | null;
|
|
18
|
+
emittedAt?: Date | null;
|
|
19
|
+
};
|
|
20
|
+
export declare const EMPTY_BODY_SHA256: string;
|
|
21
|
+
export declare const SHA256_PATTERN: RegExp;
|
|
22
|
+
export declare function hashChatGenerationBody(body: string): string;
|
|
23
|
+
export declare function normalizeBodyHash(value: string): string;
|
|
24
|
+
export declare function assertGenerationFence(generation: GenerationRow, input: {
|
|
25
|
+
conversationId?: string;
|
|
26
|
+
expectedAttemptEpoch: number;
|
|
27
|
+
expectedOwnerToken?: string | null;
|
|
28
|
+
}): void;
|
|
29
|
+
export declare function lockGeneration(tx: ChatGenerationProtocolTransaction, input: {
|
|
30
|
+
orgId: string;
|
|
31
|
+
generationId: string;
|
|
32
|
+
conversationId?: string;
|
|
33
|
+
}): Promise<GenerationRow>;
|
|
34
|
+
export declare function nextGenerationSeq(tx: ChatGenerationProtocolTransaction, generationId: string): Promise<number>;
|
|
35
|
+
export {};
|
|
36
|
+
//# sourceMappingURL=chat-generation-protocol.helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-generation-protocol.helpers.d.ts","sourceRoot":"","sources":["../../src/services/chat-generation-protocol.helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAwB,eAAe,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAKhE,KAAK,aAAa,GAAG,OAAO,eAAe,CAAC,YAAY,CAAC;AAEzD,MAAM,MAAM,iCAAiC,GAAG,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAEhG,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,uBAAuB,CAAC;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;CACzB,CAAC;AAEF,eAAO,MAAM,iBAAiB,QAAgD,CAAC;AAC/E,eAAO,MAAM,cAAc,QAAoB,CAAC;AAEhD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKvD;AAED,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,aAAa,EACzB,KAAK,EAAE;IACL,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACpC,QAWF;AAED,wBAAsB,cAAc,CAClC,EAAE,EAAE,iCAAiC,EACrC,KAAK,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,GACtE,OAAO,CAAC,aAAa,CAAC,CAkBxB;AAED,wBAAsB,iBAAiB,CACrC,EAAE,EAAE,iCAAiC,EACrC,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,MAAM,CAAC,CAMjB"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { chatGenerationEvents, chatGenerations } from "@rudderhq/db";
|
|
2
|
+
import { and, eq, sql } from "drizzle-orm";
|
|
3
|
+
import { createHash } from "node:crypto";
|
|
4
|
+
import { conflict, notFound, unprocessable } from "../errors.js";
|
|
5
|
+
export const EMPTY_BODY_SHA256 = createHash("sha256").update("").digest("hex");
|
|
6
|
+
export const SHA256_PATTERN = /^[a-f0-9]{64}$/i;
|
|
7
|
+
export function hashChatGenerationBody(body) {
|
|
8
|
+
return createHash("sha256").update(body).digest("hex");
|
|
9
|
+
}
|
|
10
|
+
export function normalizeBodyHash(value) {
|
|
11
|
+
if (!SHA256_PATTERN.test(value)) {
|
|
12
|
+
throw unprocessable("Chat generation body hash must be a SHA-256 hex digest");
|
|
13
|
+
}
|
|
14
|
+
return value.toLowerCase();
|
|
15
|
+
}
|
|
16
|
+
export function assertGenerationFence(generation, input) {
|
|
17
|
+
if (input.conversationId && generation.conversationId !== input.conversationId) {
|
|
18
|
+
throw notFound("Chat generation not found");
|
|
19
|
+
}
|
|
20
|
+
if (generation.attemptEpoch !== input.expectedAttemptEpoch) {
|
|
21
|
+
throw conflict("Chat generation runtime attempt changed");
|
|
22
|
+
}
|
|
23
|
+
if (input.expectedOwnerToken !== undefined && generation.controlOwnerToken !== input.expectedOwnerToken) {
|
|
24
|
+
throw conflict("Chat generation control owner changed");
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
export async function lockGeneration(tx, input) {
|
|
28
|
+
await tx.execute(sql `
|
|
29
|
+
select ${chatGenerations.id}
|
|
30
|
+
from ${chatGenerations}
|
|
31
|
+
where ${chatGenerations.id} = ${input.generationId}
|
|
32
|
+
and ${chatGenerations.orgId} = ${input.orgId}
|
|
33
|
+
for update
|
|
34
|
+
`);
|
|
35
|
+
const generation = await tx
|
|
36
|
+
.select()
|
|
37
|
+
.from(chatGenerations)
|
|
38
|
+
.where(and(eq(chatGenerations.id, input.generationId), eq(chatGenerations.orgId, input.orgId)))
|
|
39
|
+
.limit(1)
|
|
40
|
+
.then((rows) => rows[0] ?? null);
|
|
41
|
+
if (!generation || (input.conversationId && generation.conversationId !== input.conversationId)) {
|
|
42
|
+
throw notFound("Chat generation not found");
|
|
43
|
+
}
|
|
44
|
+
return generation;
|
|
45
|
+
}
|
|
46
|
+
export async function nextGenerationSeq(tx, generationId) {
|
|
47
|
+
return tx
|
|
48
|
+
.select({ value: sql `coalesce(max(${chatGenerationEvents.generationSeq}), 0) + 1` })
|
|
49
|
+
.from(chatGenerationEvents)
|
|
50
|
+
.where(eq(chatGenerationEvents.generationId, generationId))
|
|
51
|
+
.then((rows) => Number(rows[0]?.value ?? 1));
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=chat-generation-protocol.helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-generation-protocol.helpers.js","sourceRoot":"","sources":["../../src/services/chat-generation-protocol.helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { chatControlActions, chatGenerationEvents, chatGenerations, chatGenerationTerminalOutbox, chatMessages, chatQueuedMessages, } from "@rudderhq/db";
|
|
2
2
|
import { and, asc, desc, eq, inArray, isNotNull, isNull, lte, or, sql } from "drizzle-orm";
|
|
3
|
-
import {
|
|
3
|
+
import { randomUUID } from "node:crypto";
|
|
4
4
|
import { conflict, notFound, unprocessable } from "../errors.js";
|
|
5
|
+
import { assertGenerationFence, EMPTY_BODY_SHA256, lockGeneration, nextGenerationSeq, normalizeBodyHash, SHA256_PATTERN, } from "./chat-generation-protocol.helpers.js";
|
|
5
6
|
import { withPersistedTranscript } from "./chats.helpers.js";
|
|
6
7
|
import { normalizeLocalLibraryPathMarkdown } from "./library-path-markdown.js";
|
|
8
|
+
export { hashChatGenerationBody } from "./chat-generation-protocol.helpers.js";
|
|
7
9
|
const OUTPUT_ADMITTING_GENERATION_STATUSES = [
|
|
8
10
|
"starting",
|
|
9
11
|
"active",
|
|
@@ -27,55 +29,6 @@ const PROJECTABLE_TERMINAL_STATUSES = [
|
|
|
27
29
|
"interrupted_unverified",
|
|
28
30
|
"control_lost",
|
|
29
31
|
];
|
|
30
|
-
const EMPTY_BODY_SHA256 = createHash("sha256").update("").digest("hex");
|
|
31
|
-
const SHA256_PATTERN = /^[a-f0-9]{64}$/i;
|
|
32
|
-
export function hashChatGenerationBody(body) {
|
|
33
|
-
return createHash("sha256").update(body).digest("hex");
|
|
34
|
-
}
|
|
35
|
-
function normalizeBodyHash(value) {
|
|
36
|
-
if (!SHA256_PATTERN.test(value)) {
|
|
37
|
-
throw unprocessable("Chat generation body hash must be a SHA-256 hex digest");
|
|
38
|
-
}
|
|
39
|
-
return value.toLowerCase();
|
|
40
|
-
}
|
|
41
|
-
function assertGenerationFence(generation, input) {
|
|
42
|
-
if (input.conversationId && generation.conversationId !== input.conversationId) {
|
|
43
|
-
throw notFound("Chat generation not found");
|
|
44
|
-
}
|
|
45
|
-
if (generation.attemptEpoch !== input.expectedAttemptEpoch) {
|
|
46
|
-
throw conflict("Chat generation runtime attempt changed");
|
|
47
|
-
}
|
|
48
|
-
if (input.expectedOwnerToken !== undefined
|
|
49
|
-
&& generation.controlOwnerToken !== input.expectedOwnerToken) {
|
|
50
|
-
throw conflict("Chat generation control owner changed");
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
async function lockGeneration(tx, input) {
|
|
54
|
-
await tx.execute(sql `
|
|
55
|
-
select ${chatGenerations.id}
|
|
56
|
-
from ${chatGenerations}
|
|
57
|
-
where ${chatGenerations.id} = ${input.generationId}
|
|
58
|
-
and ${chatGenerations.orgId} = ${input.orgId}
|
|
59
|
-
for update
|
|
60
|
-
`);
|
|
61
|
-
const generation = await tx
|
|
62
|
-
.select()
|
|
63
|
-
.from(chatGenerations)
|
|
64
|
-
.where(and(eq(chatGenerations.id, input.generationId), eq(chatGenerations.orgId, input.orgId)))
|
|
65
|
-
.limit(1)
|
|
66
|
-
.then((rows) => rows[0] ?? null);
|
|
67
|
-
if (!generation || (input.conversationId && generation.conversationId !== input.conversationId)) {
|
|
68
|
-
throw notFound("Chat generation not found");
|
|
69
|
-
}
|
|
70
|
-
return generation;
|
|
71
|
-
}
|
|
72
|
-
async function nextGenerationSeq(tx, generationId) {
|
|
73
|
-
return tx
|
|
74
|
-
.select({ value: sql `coalesce(max(${chatGenerationEvents.generationSeq}), 0) + 1` })
|
|
75
|
-
.from(chatGenerationEvents)
|
|
76
|
-
.where(eq(chatGenerationEvents.generationId, generationId))
|
|
77
|
-
.then((rows) => Number(rows[0]?.value ?? 1));
|
|
78
|
-
}
|
|
79
32
|
async function appendEventLocked(tx, input) {
|
|
80
33
|
const generationSeq = await nextGenerationSeq(tx, input.generationId);
|
|
81
34
|
const [event] = await tx
|
|
@@ -422,6 +375,7 @@ export function chatGenerationProtocolService(db) {
|
|
|
422
375
|
}
|
|
423
376
|
async function beginStopAction(input) {
|
|
424
377
|
const requestedBodyHash = normalizeBodyHash(input.requestedBodyHash);
|
|
378
|
+
const admissionControlVersion = input.admissionControlVersion ?? input.expectedControlVersion;
|
|
425
379
|
return db.transaction(async (tx) => {
|
|
426
380
|
const generation = await lockGeneration(tx, {
|
|
427
381
|
orgId: input.orgId,
|
|
@@ -439,6 +393,7 @@ export function chatGenerationProtocolService(db) {
|
|
|
439
393
|
|| existingAction.actionKind !== "stop"
|
|
440
394
|
|| existingAction.expectedGenerationId !== input.expectedGenerationId
|
|
441
395
|
|| existingAction.expectedAttemptEpoch !== input.expectedAttemptEpoch
|
|
396
|
+
|| existingAction.expectedControlVersion !== input.expectedControlVersion
|
|
442
397
|
|| existingAction.requestedRenderSeq !== input.requestedRenderSeq
|
|
443
398
|
|| existingAction.requestedBodyHash !== requestedBodyHash) {
|
|
444
399
|
throw conflict("Control action id was already used for a different Stop request");
|
|
@@ -450,7 +405,11 @@ export function chatGenerationProtocolService(db) {
|
|
|
450
405
|
outputCutoffEvent: null,
|
|
451
406
|
outcome: existingAction.lastError === "generation_result_already_committed"
|
|
452
407
|
? "completion_committed"
|
|
453
|
-
: "
|
|
408
|
+
: existingAction.lastError === "generation_runtime_already_terminal"
|
|
409
|
+
? "already_terminal"
|
|
410
|
+
: existingAction.lastError === "generation_stop_already_in_progress"
|
|
411
|
+
? "stop_in_progress"
|
|
412
|
+
: "stop_applied",
|
|
454
413
|
idempotent: true,
|
|
455
414
|
};
|
|
456
415
|
}
|
|
@@ -498,12 +457,84 @@ export function chatGenerationProtocolService(db) {
|
|
|
498
457
|
};
|
|
499
458
|
}
|
|
500
459
|
if (generation.runtimeTerminalAt) {
|
|
501
|
-
|
|
460
|
+
const now = input.now ?? new Date();
|
|
461
|
+
const generationWasStopped = generation.status === "stopped";
|
|
462
|
+
const [action] = await tx
|
|
463
|
+
.insert(chatControlActions)
|
|
464
|
+
.values({
|
|
465
|
+
id: input.controlActionId,
|
|
466
|
+
orgId: input.orgId,
|
|
467
|
+
expectedGenerationId: generation.id,
|
|
468
|
+
expectedAttemptEpoch: input.expectedAttemptEpoch,
|
|
469
|
+
expectedControlVersion: input.expectedControlVersion,
|
|
470
|
+
actionKind: "stop",
|
|
471
|
+
localDisposition: generationWasStopped ? "stopped" : "cancelled",
|
|
472
|
+
providerDisposition: "not_sent",
|
|
473
|
+
controlOwnerToken: generation.controlOwnerToken,
|
|
474
|
+
requestedRenderSeq: input.requestedRenderSeq,
|
|
475
|
+
requestedBodyHash,
|
|
476
|
+
acceptedThroughSeq: generation.acceptedThroughSeq ?? input.requestedRenderSeq,
|
|
477
|
+
frozenBodyHash: generation.frozenBodyHash ?? requestedBodyHash,
|
|
478
|
+
lastError: "generation_runtime_already_terminal",
|
|
479
|
+
requestedAt: now,
|
|
480
|
+
resolvedAt: now,
|
|
481
|
+
createdAt: now,
|
|
482
|
+
updatedAt: now,
|
|
483
|
+
})
|
|
484
|
+
.returning();
|
|
485
|
+
if (!action)
|
|
486
|
+
throw new Error("Failed to persist already-terminal Stop outcome");
|
|
487
|
+
return {
|
|
488
|
+
action,
|
|
489
|
+
generation,
|
|
490
|
+
stopRequestedEvent: null,
|
|
491
|
+
outputCutoffEvent: null,
|
|
492
|
+
outcome: "already_terminal",
|
|
493
|
+
idempotent: false,
|
|
494
|
+
};
|
|
495
|
+
}
|
|
496
|
+
if (generation.status === "stop_requested" || generation.status === "stopping") {
|
|
497
|
+
if (generation.controlVersion !== admissionControlVersion) {
|
|
498
|
+
throw conflict("Chat generation control version changed");
|
|
499
|
+
}
|
|
500
|
+
const now = input.now ?? new Date();
|
|
501
|
+
const [action] = await tx
|
|
502
|
+
.insert(chatControlActions)
|
|
503
|
+
.values({
|
|
504
|
+
id: input.controlActionId,
|
|
505
|
+
orgId: input.orgId,
|
|
506
|
+
expectedGenerationId: generation.id,
|
|
507
|
+
expectedAttemptEpoch: input.expectedAttemptEpoch,
|
|
508
|
+
expectedControlVersion: input.expectedControlVersion,
|
|
509
|
+
actionKind: "stop",
|
|
510
|
+
localDisposition: "stopping",
|
|
511
|
+
providerDisposition: "not_sent",
|
|
512
|
+
controlOwnerToken: generation.controlOwnerToken,
|
|
513
|
+
requestedRenderSeq: input.requestedRenderSeq,
|
|
514
|
+
requestedBodyHash,
|
|
515
|
+
acceptedThroughSeq: generation.acceptedThroughSeq ?? input.requestedRenderSeq,
|
|
516
|
+
frozenBodyHash: generation.frozenBodyHash ?? requestedBodyHash,
|
|
517
|
+
lastError: "generation_stop_already_in_progress",
|
|
518
|
+
requestedAt: now,
|
|
519
|
+
createdAt: now,
|
|
520
|
+
updatedAt: now,
|
|
521
|
+
})
|
|
522
|
+
.returning();
|
|
523
|
+
if (!action)
|
|
524
|
+
throw new Error("Failed to persist in-progress Stop outcome");
|
|
525
|
+
return {
|
|
526
|
+
action,
|
|
527
|
+
generation,
|
|
528
|
+
stopRequestedEvent: null,
|
|
529
|
+
outputCutoffEvent: null,
|
|
530
|
+
outcome: "stop_in_progress",
|
|
531
|
+
idempotent: false,
|
|
532
|
+
};
|
|
502
533
|
}
|
|
503
534
|
if (!CONTROL_ACTIVE_GENERATION_STATUSES.includes(generation.status)) {
|
|
504
535
|
throw conflict("Chat generation is no longer stoppable");
|
|
505
536
|
}
|
|
506
|
-
if (generation.controlVersion !==
|
|
537
|
+
if (generation.controlVersion !== admissionControlVersion) {
|
|
507
538
|
throw conflict("Chat generation control version changed");
|
|
508
539
|
}
|
|
509
540
|
const durableCheckpointIsNewer = generation.lastClientCheckpointSeq !== null
|
|
@@ -534,7 +565,7 @@ export function chatGenerationProtocolService(db) {
|
|
|
534
565
|
throw conflict("Stop could not establish a durable rendered checkpoint");
|
|
535
566
|
}
|
|
536
567
|
const now = input.now ?? new Date();
|
|
537
|
-
const appliedControlVersion =
|
|
568
|
+
const appliedControlVersion = admissionControlVersion + 1;
|
|
538
569
|
const [action] = await tx
|
|
539
570
|
.insert(chatControlActions)
|
|
540
571
|
.values({
|
|
@@ -599,7 +630,7 @@ export function chatGenerationProtocolService(db) {
|
|
|
599
630
|
stopRequestedAt: now,
|
|
600
631
|
updatedAt: now,
|
|
601
632
|
})
|
|
602
|
-
.where(and(eq(chatGenerations.id, generation.id), eq(chatGenerations.attemptEpoch, input.expectedAttemptEpoch), eq(chatGenerations.controlVersion,
|
|
633
|
+
.where(and(eq(chatGenerations.id, generation.id), eq(chatGenerations.attemptEpoch, input.expectedAttemptEpoch), eq(chatGenerations.controlVersion, admissionControlVersion)))
|
|
603
634
|
.returning();
|
|
604
635
|
if (!updatedGeneration)
|
|
605
636
|
throw conflict("Chat generation changed while applying Stop");
|