@rudderhq/server 0.7.14 → 0.7.16
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.test.d.ts +2 -0
- package/dist/agent-runtimes/http/execute.test.d.ts.map +1 -0
- package/dist/agent-runtimes/http/execute.test.js +43 -0
- package/dist/agent-runtimes/http/execute.test.js.map +1 -0
- package/dist/agent-runtimes/process/execute.d.ts.map +1 -1
- package/dist/agent-runtimes/process/execute.js +20 -3
- package/dist/agent-runtimes/process/execute.js.map +1 -1
- package/dist/agent-runtimes/process/execute.test.d.ts +2 -0
- package/dist/agent-runtimes/process/execute.test.d.ts.map +1 -0
- package/dist/agent-runtimes/process/execute.test.js +57 -0
- package/dist/agent-runtimes/process/execute.test.js.map +1 -0
- package/dist/agent-runtimes/registry.d.ts.map +1 -1
- package/dist/agent-runtimes/registry.js +3 -1
- package/dist/agent-runtimes/registry.js.map +1 -1
- package/dist/bootstrap/create-http-app.d.ts.map +1 -1
- package/dist/bootstrap/create-http-app.js +9 -3
- package/dist/bootstrap/create-http-app.js.map +1 -1
- package/dist/config.js +4 -4
- package/dist/config.js.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/middleware/error-handler.d.ts.map +1 -1
- package/dist/middleware/error-handler.js +10 -2
- package/dist/middleware/error-handler.js.map +1 -1
- package/dist/middleware/logger.d.ts +3 -0
- package/dist/middleware/logger.d.ts.map +1 -1
- package/dist/middleware/logger.js +15 -6
- package/dist/middleware/logger.js.map +1 -1
- package/dist/middleware/logger.test.js +14 -1
- package/dist/middleware/logger.test.js.map +1 -1
- package/dist/routes/agents.management-routes.d.ts.map +1 -1
- package/dist/routes/agents.management-routes.js +51 -1
- package/dist/routes/agents.management-routes.js.map +1 -1
- package/dist/routes/chats.annotation-routes.d.ts +6 -1
- package/dist/routes/chats.annotation-routes.d.ts.map +1 -1
- package/dist/routes/chats.annotation-routes.js +40 -7
- package/dist/routes/chats.annotation-routes.js.map +1 -1
- package/dist/routes/chats.d.ts.map +1 -1
- package/dist/routes/chats.js +44 -3
- 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 +122 -18
- package/dist/routes/chats.stream-routes.js.map +1 -1
- package/dist/routes/issues.js +1 -1
- package/dist/routes/issues.js.map +1 -1
- package/dist/routes/issues.mutations.d.ts.map +1 -1
- package/dist/routes/issues.mutations.js +99 -1
- package/dist/routes/issues.mutations.js.map +1 -1
- package/dist/routes/orgs.d.ts.map +1 -1
- package/dist/routes/orgs.js +1 -0
- package/dist/routes/orgs.js.map +1 -1
- package/dist/routes/rudder-plugins.js +2 -2
- package/dist/routes/rudder-plugins.js.map +1 -1
- package/dist/routes/run-intelligence.d.ts.map +1 -1
- package/dist/routes/run-intelligence.js +11 -1
- package/dist/routes/run-intelligence.js.map +1 -1
- package/dist/services/agent-issue-creation.d.ts +1 -0
- package/dist/services/agent-issue-creation.d.ts.map +1 -1
- package/dist/services/agent-run-context.d.ts +1 -1
- package/dist/services/agent-run-context.d.ts.map +1 -1
- package/dist/services/agents.d.ts +35 -0
- package/dist/services/agents.d.ts.map +1 -1
- package/dist/services/automation-chat-output.d.ts +2 -0
- package/dist/services/automation-chat-output.d.ts.map +1 -1
- package/dist/services/automations.d.ts.map +1 -1
- package/dist/services/automations.js +1 -1
- package/dist/services/automations.js.map +1 -1
- package/dist/services/chat-agent-runs.d.ts +3 -0
- package/dist/services/chat-agent-runs.d.ts.map +1 -1
- package/dist/services/chat-annotation-copy-lineage.d.ts +2 -0
- package/dist/services/chat-annotation-copy-lineage.d.ts.map +1 -1
- package/dist/services/chat-assistant.d.ts.map +1 -1
- package/dist/services/chat-assistant.js +38 -18
- package/dist/services/chat-assistant.js.map +1 -1
- package/dist/services/chat-generation-locks.d.ts +3 -1
- package/dist/services/chat-generation-locks.d.ts.map +1 -1
- package/dist/services/chat-generation-locks.js +3 -1
- package/dist/services/chat-generation-locks.js.map +1 -1
- package/dist/services/chat-generation-locks.test.js +8 -0
- package/dist/services/chat-generation-locks.test.js.map +1 -1
- package/dist/services/chat-generation-protocol.d.ts +2 -0
- package/dist/services/chat-generation-protocol.d.ts.map +1 -1
- package/dist/services/chat-inline-annotation-validation.d.ts.map +1 -1
- package/dist/services/chat-inline-annotation-validation.js +10 -3
- package/dist/services/chat-inline-annotation-validation.js.map +1 -1
- package/dist/services/chat-inline-annotations.test.js +49 -9
- package/dist/services/chat-inline-annotations.test.js.map +1 -1
- package/dist/services/chat-message-mutation-fingerprint.d.ts +18 -0
- package/dist/services/chat-message-mutation-fingerprint.d.ts.map +1 -0
- package/dist/services/chat-message-mutation-fingerprint.js +22 -0
- package/dist/services/chat-message-mutation-fingerprint.js.map +1 -0
- package/dist/services/chat-queued-message-materialization.d.ts +2 -2
- package/dist/services/chat-queued-message-materialization.d.ts.map +1 -1
- package/dist/services/chat-queued-message-materialization.js +2 -2
- package/dist/services/chat-queued-message-materialization.js.map +1 -1
- package/dist/services/chats.annotation-persistence.d.ts +3 -0
- package/dist/services/chats.annotation-persistence.d.ts.map +1 -1
- package/dist/services/chats.annotation-persistence.js +68 -4
- package/dist/services/chats.annotation-persistence.js.map +1 -1
- package/dist/services/chats.d.ts +24 -0
- package/dist/services/chats.d.ts.map +1 -1
- package/dist/services/chats.js +30 -1
- package/dist/services/chats.js.map +1 -1
- package/dist/services/chats.queued-message-create.d.ts +1 -0
- package/dist/services/chats.queued-message-create.d.ts.map +1 -1
- package/dist/services/chats.queued-message-create.js +2 -2
- package/dist/services/chats.queued-message-create.js.map +1 -1
- package/dist/services/chats.types.d.ts +3 -1
- package/dist/services/chats.types.d.ts.map +1 -1
- package/dist/services/delegation-runs.d.ts +41 -0
- package/dist/services/delegation-runs.d.ts.map +1 -0
- package/dist/services/delegation-runs.js +229 -0
- package/dist/services/delegation-runs.js.map +1 -0
- package/dist/services/delegation-runs.test.d.ts +2 -0
- package/dist/services/delegation-runs.test.d.ts.map +1 -0
- package/dist/services/delegation-runs.test.js +373 -0
- package/dist/services/delegation-runs.test.js.map +1 -0
- package/dist/services/integrations/feishu/runtime.d.ts.map +1 -1
- package/dist/services/integrations/feishu/runtime.js +69 -23
- package/dist/services/integrations/feishu/runtime.js.map +1 -1
- package/dist/services/issues.d.ts.map +1 -1
- package/dist/services/issues.helpers.d.ts +5 -0
- package/dist/services/issues.helpers.d.ts.map +1 -1
- package/dist/services/issues.helpers.js +11 -0
- package/dist/services/issues.helpers.js.map +1 -1
- package/dist/services/issues.js +6 -9
- package/dist/services/issues.js.map +1 -1
- package/dist/services/knowledge-portability/organization-skills.catalog.d.ts +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 -0
- package/dist/services/knowledge-portability/organization-skills.catalog.js.map +1 -1
- package/dist/services/messenger-run-origin.d.ts +1 -0
- package/dist/services/messenger-run-origin.d.ts.map +1 -1
- package/dist/services/messenger-run-origin.js +1 -0
- package/dist/services/messenger-run-origin.js.map +1 -1
- package/dist/services/messenger-saved-views.d.ts.map +1 -1
- package/dist/services/messenger-saved-views.js +29 -5
- package/dist/services/messenger-saved-views.js.map +1 -1
- package/dist/services/messenger.d.ts.map +1 -1
- package/dist/services/messenger.js +1 -0
- package/dist/services/messenger.js.map +1 -1
- package/dist/services/organization-workspace-browser.d.ts.map +1 -1
- package/dist/services/organization-workspace-browser.js +7 -1
- package/dist/services/organization-workspace-browser.js.map +1 -1
- package/dist/services/rudder-plugin-catalog.d.ts.map +1 -1
- package/dist/services/rudder-plugin-catalog.js +49 -35
- package/dist/services/rudder-plugin-catalog.js.map +1 -1
- package/dist/services/rudder-plugin-catalog.test.js +169 -1
- package/dist/services/rudder-plugin-catalog.test.js.map +1 -1
- package/dist/services/rudder-plugins.d.ts +2 -0
- package/dist/services/rudder-plugins.d.ts.map +1 -1
- package/dist/services/rudder-plugins.js +16 -11
- package/dist/services/rudder-plugins.js.map +1 -1
- package/dist/services/rudder-plugins.test.js +17 -1
- package/dist/services/rudder-plugins.test.js.map +1 -1
- package/dist/services/run-intelligence.d.ts.map +1 -1
- package/dist/services/run-intelligence.js +15 -1
- package/dist/services/run-intelligence.js.map +1 -1
- package/dist/services/runtime-kernel/assignment-run-guardrail.d.ts +12 -95
- package/dist/services/runtime-kernel/assignment-run-guardrail.d.ts.map +1 -1
- package/dist/services/runtime-kernel/assignment-run-guardrail.js +104 -350
- package/dist/services/runtime-kernel/assignment-run-guardrail.js.map +1 -1
- package/dist/services/runtime-kernel/assignment-run-guardrail.test.js +109 -143
- package/dist/services/runtime-kernel/assignment-run-guardrail.test.js.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.core.d.ts +23 -2
- package/dist/services/runtime-kernel/heartbeat.core.d.ts.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.core.js +1 -0
- package/dist/services/runtime-kernel/heartbeat.core.js.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.d.ts +10 -0
- package/dist/services/runtime-kernel/heartbeat.d.ts.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.execute.d.ts.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.execute.js +103 -141
- package/dist/services/runtime-kernel/heartbeat.execute.js.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.js +43 -7
- 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.d.ts +7 -0
- package/dist/services/runtime-kernel/heartbeat.recovery.d.ts.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.recovery.js +101 -5
- package/dist/services/runtime-kernel/heartbeat.recovery.js.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.release.d.ts.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.release.js +1 -0
- package/dist/services/runtime-kernel/heartbeat.release.js.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.sessions.d.ts.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.sessions.js +2 -0
- package/dist/services/runtime-kernel/heartbeat.sessions.js.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.terminal.d.ts +10 -1
- package/dist/services/runtime-kernel/heartbeat.terminal.d.ts.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.terminal.js.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.wakeup.d.ts.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.wakeup.js +14 -1
- package/dist/services/runtime-kernel/heartbeat.wakeup.js.map +1 -1
- package/package.json +14 -14
- package/resources/bundled-skills/rudder-docs/references/cli-reference.md +4 -0
- package/skills/rudder-docs/references/cli-reference.md +4 -0
- package/ui-dist/assets/{LibraryLiveSurface-Dl_mRBqL.js → LibraryLiveSurface-DnY0wZep.js} +1 -1
- package/ui-dist/assets/{abnfDiagram-VRR7QNED-4MIrDcN0.js → abnfDiagram-VRR7QNED-CT-9m1Vc.js} +1 -1
- package/ui-dist/assets/{addon-fit-DaLbwAfQ.js → addon-fit-C6aMSfRz.js} +1 -1
- package/ui-dist/assets/{arc-DrbWjUWY.js → arc-1nExaM-y.js} +1 -1
- package/ui-dist/assets/{architectureDiagram-ZJ3FMSHR-Bt-JYYfG.js → architectureDiagram-ZJ3FMSHR-bILoPPs5.js} +1 -1
- package/ui-dist/assets/{blockDiagram-677ZJIJ3-OXUbGv47.js → blockDiagram-677ZJIJ3--zRFciqi.js} +1 -1
- package/ui-dist/assets/{c4Diagram-LMCZKHZV-C_EcNhSw.js → c4Diagram-LMCZKHZV-CrtaX6A_.js} +1 -1
- package/ui-dist/assets/channel-C3jj6nd_.js +1 -0
- package/ui-dist/assets/{chunk-2Q5K7J3B-DY-Rya7u.js → chunk-2Q5K7J3B-DoBb7ZYS.js} +1 -1
- package/ui-dist/assets/{chunk-32BRIVSS-CTrRcC7g.js → chunk-32BRIVSS-DilGswdp.js} +1 -1
- package/ui-dist/assets/{chunk-5VM5RSS4-CFfB2lwI.js → chunk-5VM5RSS4-D8q00d1k.js} +1 -1
- package/ui-dist/assets/{chunk-EX3LRPZG-C0nNM3QW.js → chunk-EX3LRPZG-Bl1KSAwQ.js} +1 -1
- package/ui-dist/assets/{chunk-JWPE2WC7-Bzqz4lCp.js → chunk-JWPE2WC7-DtdgLB7Y.js} +1 -1
- package/ui-dist/assets/{chunk-MOJQB5TN-B7JFd8bM.js → chunk-MOJQB5TN-UaG7L1QI.js} +1 -1
- package/ui-dist/assets/{chunk-RYQCIY6F-a5E8W5cO.js → chunk-RYQCIY6F-mkz9qbQF.js} +1 -1
- package/ui-dist/assets/{chunk-V7JOEXUC-lhKPx7D_.js → chunk-V7JOEXUC-FGET6Myl.js} +1 -1
- package/ui-dist/assets/{chunk-VR4S4FIN-bZBK3VoP.js → chunk-VR4S4FIN-BgfUmupS.js} +1 -1
- package/ui-dist/assets/{chunk-XXDRQBXY-Di3ho8vJ.js → chunk-XXDRQBXY-B6I-gBFN.js} +1 -1
- package/ui-dist/assets/classDiagram-OUVF2IWQ-CNsW5NoJ.js +1 -0
- package/ui-dist/assets/classDiagram-v2-EOCWNBFH-CNsW5NoJ.js +1 -0
- package/ui-dist/assets/{cose-bilkent-JH36ORCC-CGSlPnRr.js → cose-bilkent-JH36ORCC-DVGWBjbO.js} +1 -1
- package/ui-dist/assets/{cynefin-VYW2F7L2-BfELv7kL.js → cynefin-VYW2F7L2-CWjLXAiA.js} +1 -1
- package/ui-dist/assets/{cynefinDiagram-TSTJHNR4-iMVux7wr.js → cynefinDiagram-TSTJHNR4-DWY5Jowv.js} +1 -1
- package/ui-dist/assets/{dagre-VKFMJZFB-imUTNZ-g.js → dagre-VKFMJZFB-Bp0SVTqP.js} +1 -1
- package/ui-dist/assets/{diagram-FQU43EPY-i0bYfkK2.js → diagram-FQU43EPY-EhsLuQCs.js} +1 -1
- package/ui-dist/assets/{diagram-G47NLZAW-CN7P8lGu.js → diagram-G47NLZAW-C_ifHw4Q.js} +1 -1
- package/ui-dist/assets/{diagram-NH7WQ7WH-BJ4dmUnA.js → diagram-NH7WQ7WH-BCitqFNA.js} +1 -1
- package/ui-dist/assets/{diagram-OA4YK3LP-DDWgQGqt.js → diagram-OA4YK3LP-BRjomHnO.js} +1 -1
- package/ui-dist/assets/{diagram-WEI45ONY-3At0yiVq.js → diagram-WEI45ONY-Cr_E92JE.js} +1 -1
- package/ui-dist/assets/{ebnfDiagram-CCIWWBDH-Dk6Q1_n0.js → ebnfDiagram-CCIWWBDH-0WJQMwqt.js} +1 -1
- package/ui-dist/assets/{erDiagram-Q63AITRT-DIQXCD2C.js → erDiagram-Q63AITRT-B0EBivSu.js} +1 -1
- package/ui-dist/assets/{flowDiagram-23GEKE2U-D19_Ed2R.js → flowDiagram-23GEKE2U-BwdRtCsd.js} +1 -1
- package/ui-dist/assets/{ganttDiagram-NO4QXBWP-JdDX_faf.js → ganttDiagram-NO4QXBWP-KxlqXAqZ.js} +1 -1
- package/ui-dist/assets/{gitGraphDiagram-IHSO6WYX-D1H6mGeL.js → gitGraphDiagram-IHSO6WYX-DeTCa-SS.js} +1 -1
- package/ui-dist/assets/{graph-BG22o1KD.js → graph-rdRwl3us.js} +1 -1
- package/ui-dist/assets/{index-CVu9lnBy.js → index-7Mb8iY3g.js} +1 -1
- package/ui-dist/assets/{index-uHZfZjdL.js → index-B2jHUYti.js} +1 -1
- package/ui-dist/assets/{index-CqaANx_i.js → index-Bi7KPtJ3.js} +1 -1
- package/ui-dist/assets/{index-CwdDPdqf.js → index-BzLCEJCf.js} +1 -1
- package/ui-dist/assets/{index-D3lUbbsS.js → index-C2DKaTLo.js} +1 -1
- package/ui-dist/assets/{index-BRGW3KLv.js → index-CY1CWc3h.js} +1 -1
- package/ui-dist/assets/index-CYaeM_68.css +32 -0
- package/ui-dist/assets/{index-inavbYTa.js → index-CbEMZXO1.js} +1 -1
- package/ui-dist/assets/{index-BDNVVxYy.js → index-CcLF8pix.js} +1 -1
- package/ui-dist/assets/{index-KZiKwV4T.js → index-CtFA44ZZ.js} +1 -1
- package/ui-dist/assets/{index-C0wGrz8h.js → index-CuP2P51w.js} +1 -1
- package/ui-dist/assets/{index-DDIA_6o8.js → index-D3RtGD1i.js} +1 -1
- package/ui-dist/assets/{index-BxHKdZbS.js → index-D5pdKmHf.js} +1 -1
- package/ui-dist/assets/{index-DXA-HNO5.js → index-DBPJ49Cn.js} +1 -1
- package/ui-dist/assets/{index-MrGb7TRh.js → index-NxbW73mN.js} +1 -1
- package/ui-dist/assets/{index-DL6O5Ix-.js → index-s8ZAOPE2.js} +589 -579
- package/ui-dist/assets/{infoDiagram-FWYZ7A6U-CVUn5UCu.js → infoDiagram-FWYZ7A6U-Cun6yrS9.js} +1 -1
- package/ui-dist/assets/{ishikawaDiagram-FXEZZL3T-5BbuWr6T.js → ishikawaDiagram-FXEZZL3T-SHuCvm_3.js} +1 -1
- package/ui-dist/assets/{journeyDiagram-5HDEW3XC-DoCwetKy.js → journeyDiagram-5HDEW3XC-B2oa-ovF.js} +1 -1
- package/ui-dist/assets/{kanban-definition-HUTT4EX6-BNDYA9Vo.js → kanban-definition-HUTT4EX6-DtG3RFW0.js} +1 -1
- package/ui-dist/assets/{layout-DUhTcIiA.js → layout-DmSY_WKW.js} +1 -1
- package/ui-dist/assets/{linear-CCEHbSzg.js → linear-BiklTv-9.js} +1 -1
- package/ui-dist/assets/{map-C8V41jZb.js → map-B3RAMPoy.js} +1 -1
- package/ui-dist/assets/{mermaid.core-UAa_NJSl.js → mermaid.core-CQj0CvWy.js} +4 -4
- package/ui-dist/assets/{mindmap-definition-LN4V7U3C-C_ygOwPG.js → mindmap-definition-LN4V7U3C-BQrncLdk.js} +1 -1
- package/ui-dist/assets/{pegDiagram-2B236MQR-Dz0Nw1iK.js → pegDiagram-2B236MQR-BmkmBhyS.js} +1 -1
- package/ui-dist/assets/{pieDiagram-ENE6RG2P-DSn9W4hM.js → pieDiagram-ENE6RG2P-B0dWJser.js} +1 -1
- package/ui-dist/assets/{quadrantDiagram-ABIIQ3AL-D6cn2p2u.js → quadrantDiagram-ABIIQ3AL-RS2o06NX.js} +1 -1
- package/ui-dist/assets/{railroadDiagram-RFXS5EU6-DkQOZUbI.js → railroadDiagram-RFXS5EU6-B4dlWUnB.js} +1 -1
- package/ui-dist/assets/{requirementDiagram-TGXJPOKE-CVxaeOzG.js → requirementDiagram-TGXJPOKE-7M1vICZA.js} +1 -1
- package/ui-dist/assets/{sankeyDiagram-HTMAVEWB-DsCkJ9Sr.js → sankeyDiagram-HTMAVEWB-LUpZrugG.js} +1 -1
- package/ui-dist/assets/{sequenceDiagram-DBY2YBRQ-DSVgeeYC.js → sequenceDiagram-DBY2YBRQ-DB4ecUEg.js} +1 -1
- package/ui-dist/assets/{sizeCapture-X5ZJPWSS-jYNNSFFN.js → sizeCapture-X5ZJPWSS-CgLQGkEa.js} +1 -1
- package/ui-dist/assets/{stateDiagram-2N3HPSRC-HMmvTfZO.js → stateDiagram-2N3HPSRC-BxLcsZg0.js} +1 -1
- package/ui-dist/assets/stateDiagram-v2-6OUMAXLB-DAlIlXqa.js +1 -0
- package/ui-dist/assets/{swimlanes-5IMT3BWC-B7lpTS-P.js → swimlanes-5IMT3BWC-CFoyzQNM.js} +2 -2
- package/ui-dist/assets/swimlanesDiagram-G3AALYLV-DXfnihCA.js +8 -0
- package/ui-dist/assets/{timeline-definition-FHXFAJF6-CfjkTbE1.js → timeline-definition-FHXFAJF6-C1vajCzY.js} +1 -1
- package/ui-dist/assets/{vennDiagram-L72KCM5P-gK5ZOhfi.js → vennDiagram-L72KCM5P-C42rETOq.js} +1 -1
- package/ui-dist/assets/{wardleyDiagram-EHGQE667-ClAgPp4O.js → wardleyDiagram-EHGQE667-BgzD6-QL.js} +1 -1
- package/ui-dist/assets/{xterm-CI3dnrG9.js → xterm-BeBaISmm.js} +1 -1
- package/ui-dist/assets/{xychartDiagram-FW5EYKEG-CMu8n5xR.js → xychartDiagram-FW5EYKEG-BdoJT_55.js} +1 -1
- package/ui-dist/index.html +2 -2
- package/ui-dist/assets/channel-DL45J6-6.js +0 -1
- package/ui-dist/assets/classDiagram-OUVF2IWQ-DuHN7Tz9.js +0 -1
- package/ui-dist/assets/classDiagram-v2-EOCWNBFH-DuHN7Tz9.js +0 -1
- package/ui-dist/assets/index-rHP5bnon.css +0 -32
- package/ui-dist/assets/stateDiagram-v2-6OUMAXLB-Ij5NPf9Z.js +0 -1
- package/ui-dist/assets/swimlanesDiagram-G3AALYLV-VbzuYi16.js +0 -8
|
@@ -0,0 +1,373 @@
|
|
|
1
|
+
import { agentWakeupRequests, agents } from "@rudderhq/db";
|
|
2
|
+
import { describe, expect, it, vi } from "vitest";
|
|
3
|
+
import { DELEGATION_RUN_SCENE, DELEGATION_RUN_SOURCE, DELEGATION_RUN_TRIGGER_REASON, delegationRunService, } from "./delegation-runs.js";
|
|
4
|
+
const orgId = "11111111-1111-4111-8111-111111111111";
|
|
5
|
+
const sourceAgentId = "22222222-2222-4222-8222-222222222222";
|
|
6
|
+
const targetAgentId = "33333333-3333-4333-8333-333333333333";
|
|
7
|
+
const sourceRunId = "44444444-4444-4444-8444-444444444444";
|
|
8
|
+
const targetRunId = "55555555-5555-4555-8555-555555555555";
|
|
9
|
+
const wakeupRequestId = "66666666-6666-4666-8666-666666666666";
|
|
10
|
+
const otherSourceAgentId = "77777777-7777-4777-8777-777777777777";
|
|
11
|
+
const otherSourceRunId = "88888888-8888-4888-8888-888888888888";
|
|
12
|
+
const otherTargetAgentId = "99999999-9999-4999-8999-999999999999";
|
|
13
|
+
function sourceRun() {
|
|
14
|
+
return {
|
|
15
|
+
id: sourceRunId,
|
|
16
|
+
orgId,
|
|
17
|
+
agentId: sourceAgentId,
|
|
18
|
+
status: "running",
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
function targetRun(agentId = targetAgentId) {
|
|
22
|
+
return {
|
|
23
|
+
...sourceRun(),
|
|
24
|
+
id: targetRunId,
|
|
25
|
+
agentId,
|
|
26
|
+
invocationSource: "delegation",
|
|
27
|
+
triggerDetail: "agent_run_created",
|
|
28
|
+
sourceRunId,
|
|
29
|
+
wakeupRequestId,
|
|
30
|
+
contextSnapshot: {
|
|
31
|
+
scene: DELEGATION_RUN_SCENE,
|
|
32
|
+
sourceRunId,
|
|
33
|
+
delegationTask: "Inspect the target independently",
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
function wakeupRequest(task, status = "queued", agentId = targetAgentId) {
|
|
38
|
+
return {
|
|
39
|
+
id: wakeupRequestId,
|
|
40
|
+
orgId,
|
|
41
|
+
agentId,
|
|
42
|
+
source: DELEGATION_RUN_SOURCE,
|
|
43
|
+
triggerDetail: "agent_run_created",
|
|
44
|
+
reason: DELEGATION_RUN_TRIGGER_REASON,
|
|
45
|
+
payload: {
|
|
46
|
+
delegationTask: task,
|
|
47
|
+
delegationTargetAgentId: targetAgentId,
|
|
48
|
+
sourceAgentId,
|
|
49
|
+
sourceRunId,
|
|
50
|
+
},
|
|
51
|
+
status,
|
|
52
|
+
coalescedCount: 0,
|
|
53
|
+
requestedByActorType: "agent",
|
|
54
|
+
requestedByActorId: sourceAgentId,
|
|
55
|
+
idempotencyKey: null,
|
|
56
|
+
delegationIdempotencyKey: "delegation-key-1",
|
|
57
|
+
runId: targetRunId,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
function createDbStub(input) {
|
|
61
|
+
let agentLookups = 0;
|
|
62
|
+
let wakeupRequestLookups = 0;
|
|
63
|
+
const select = vi.fn(() => {
|
|
64
|
+
let table;
|
|
65
|
+
const builder = {
|
|
66
|
+
from(value) {
|
|
67
|
+
table = value;
|
|
68
|
+
return builder;
|
|
69
|
+
},
|
|
70
|
+
where() {
|
|
71
|
+
return builder;
|
|
72
|
+
},
|
|
73
|
+
orderBy() {
|
|
74
|
+
return builder;
|
|
75
|
+
},
|
|
76
|
+
limit() {
|
|
77
|
+
return builder;
|
|
78
|
+
},
|
|
79
|
+
then(resolve, reject) {
|
|
80
|
+
const rows = table === agents
|
|
81
|
+
? (++agentLookups === 1
|
|
82
|
+
? (input.sourceAgent === null ? [] : [input.sourceAgent ?? { id: sourceAgentId, orgId }])
|
|
83
|
+
: (input.targetAgent === null
|
|
84
|
+
? []
|
|
85
|
+
: [input.targetAgent ?? { id: input.targetAgentId ?? sourceAgentId, orgId }]))
|
|
86
|
+
: table === agentWakeupRequests
|
|
87
|
+
? (++wakeupRequestLookups === 1
|
|
88
|
+
? (input.existingRequest ? [input.existingRequest] : [])
|
|
89
|
+
: (input.persistedRequest ? [input.persistedRequest] : []))
|
|
90
|
+
: [];
|
|
91
|
+
return Promise.resolve(rows).then(resolve, reject);
|
|
92
|
+
},
|
|
93
|
+
};
|
|
94
|
+
return builder;
|
|
95
|
+
});
|
|
96
|
+
return { select };
|
|
97
|
+
}
|
|
98
|
+
describe("delegationRunService", () => {
|
|
99
|
+
it("defaults to the current Agent and routes an isolated task through heartbeat wakeup", async () => {
|
|
100
|
+
const wakeup = vi.fn().mockResolvedValue(targetRun());
|
|
101
|
+
const db = createDbStub({
|
|
102
|
+
persistedRequest: wakeupRequest("Inspect the target independently", "queued", sourceAgentId),
|
|
103
|
+
});
|
|
104
|
+
const service = delegationRunService(db, {
|
|
105
|
+
heartbeat: {
|
|
106
|
+
getRun: vi.fn()
|
|
107
|
+
.mockResolvedValueOnce(sourceRun())
|
|
108
|
+
.mockResolvedValueOnce(targetRun(sourceAgentId)),
|
|
109
|
+
wakeup,
|
|
110
|
+
},
|
|
111
|
+
access: { hasPermission: vi.fn().mockResolvedValue(true) },
|
|
112
|
+
});
|
|
113
|
+
const result = await service.create({
|
|
114
|
+
sourceAgentId,
|
|
115
|
+
sourceRunId,
|
|
116
|
+
task: "Inspect the target independently",
|
|
117
|
+
idempotencyKey: "delegation-key-1",
|
|
118
|
+
});
|
|
119
|
+
expect(wakeup).toHaveBeenCalledWith(sourceAgentId, expect.objectContaining({
|
|
120
|
+
source: DELEGATION_RUN_SOURCE,
|
|
121
|
+
triggerDetail: "agent_run_created",
|
|
122
|
+
reason: DELEGATION_RUN_TRIGGER_REASON,
|
|
123
|
+
sourceRunId,
|
|
124
|
+
delegationIdempotencyKey: "delegation-key-1",
|
|
125
|
+
contextSnapshot: expect.objectContaining({
|
|
126
|
+
scene: DELEGATION_RUN_SCENE,
|
|
127
|
+
targetType: "wakeup_request",
|
|
128
|
+
sourceRunId,
|
|
129
|
+
forceFreshSession: true,
|
|
130
|
+
delegationTask: "Inspect the target independently",
|
|
131
|
+
}),
|
|
132
|
+
payload: expect.objectContaining({
|
|
133
|
+
delegationTask: "Inspect the target independently",
|
|
134
|
+
sourceRunId,
|
|
135
|
+
}),
|
|
136
|
+
}));
|
|
137
|
+
expect(wakeup.mock.calls[0]?.[1]).not.toHaveProperty("idempotencyKey");
|
|
138
|
+
expect(result).toMatchObject({
|
|
139
|
+
runId: targetRunId,
|
|
140
|
+
wakeupRequestId,
|
|
141
|
+
sourceRunId,
|
|
142
|
+
targetAgentId: sourceAgentId,
|
|
143
|
+
scene: DELEGATION_RUN_SCENE,
|
|
144
|
+
admissionStatus: "queued",
|
|
145
|
+
replayed: false,
|
|
146
|
+
});
|
|
147
|
+
});
|
|
148
|
+
it("replays the same admission without invoking heartbeat twice", async () => {
|
|
149
|
+
const existing = wakeupRequest("Inspect the target independently");
|
|
150
|
+
const wakeup = vi.fn();
|
|
151
|
+
const db = createDbStub({ existingRequest: existing, targetAgentId });
|
|
152
|
+
const service = delegationRunService(db, {
|
|
153
|
+
heartbeat: {
|
|
154
|
+
getRun: vi.fn()
|
|
155
|
+
.mockResolvedValueOnce(sourceRun())
|
|
156
|
+
.mockResolvedValueOnce(targetRun()),
|
|
157
|
+
wakeup,
|
|
158
|
+
},
|
|
159
|
+
access: { hasPermission: vi.fn().mockResolvedValue(true) },
|
|
160
|
+
});
|
|
161
|
+
const result = await service.create({
|
|
162
|
+
sourceAgentId,
|
|
163
|
+
sourceRunId,
|
|
164
|
+
task: "Inspect the target independently",
|
|
165
|
+
targetAgentId,
|
|
166
|
+
idempotencyKey: "delegation-key-1",
|
|
167
|
+
});
|
|
168
|
+
expect(wakeup).not.toHaveBeenCalled();
|
|
169
|
+
expect(result).toMatchObject({
|
|
170
|
+
runId: targetRunId,
|
|
171
|
+
wakeupRequestId,
|
|
172
|
+
admissionStatus: "replayed",
|
|
173
|
+
replayed: true,
|
|
174
|
+
});
|
|
175
|
+
});
|
|
176
|
+
it("rejects a conflicting task that wins the organization-wide admission race", async () => {
|
|
177
|
+
const racedRequest = wakeupRequest("different task");
|
|
178
|
+
const db = createDbStub({ persistedRequest: racedRequest, targetAgentId });
|
|
179
|
+
const service = delegationRunService(db, {
|
|
180
|
+
heartbeat: {
|
|
181
|
+
getRun: vi.fn().mockResolvedValue(sourceRun()),
|
|
182
|
+
wakeup: vi.fn().mockResolvedValue(targetRun()),
|
|
183
|
+
},
|
|
184
|
+
access: { hasPermission: vi.fn().mockResolvedValue(true) },
|
|
185
|
+
});
|
|
186
|
+
await expect(service.create({
|
|
187
|
+
sourceAgentId,
|
|
188
|
+
sourceRunId,
|
|
189
|
+
task: "Inspect the target independently",
|
|
190
|
+
targetAgentId,
|
|
191
|
+
idempotencyKey: "delegation-key-1",
|
|
192
|
+
})).rejects.toMatchObject({
|
|
193
|
+
message: "Delegation idempotency key conflicts with an existing task or target",
|
|
194
|
+
});
|
|
195
|
+
});
|
|
196
|
+
it("rejects reusing an organization-wide idempotency key for another target", async () => {
|
|
197
|
+
const existing = wakeupRequest("Inspect the target independently");
|
|
198
|
+
const wakeup = vi.fn();
|
|
199
|
+
const service = delegationRunService(createDbStub({
|
|
200
|
+
existingRequest: existing,
|
|
201
|
+
targetAgent: { id: otherTargetAgentId, orgId },
|
|
202
|
+
}), {
|
|
203
|
+
heartbeat: { getRun: vi.fn().mockResolvedValue(sourceRun()), wakeup },
|
|
204
|
+
access: { hasPermission: vi.fn().mockResolvedValue(true) },
|
|
205
|
+
});
|
|
206
|
+
await expect(service.create({
|
|
207
|
+
sourceAgentId,
|
|
208
|
+
sourceRunId,
|
|
209
|
+
task: "Inspect the target independently",
|
|
210
|
+
targetAgentId: otherTargetAgentId,
|
|
211
|
+
idempotencyKey: "delegation-key-1",
|
|
212
|
+
})).rejects.toMatchObject({
|
|
213
|
+
message: "Delegation idempotency key conflicts with an existing task or target",
|
|
214
|
+
});
|
|
215
|
+
expect(wakeup).not.toHaveBeenCalled();
|
|
216
|
+
});
|
|
217
|
+
it("replays another source Run's matching organization, target, key, and task with persisted provenance", async () => {
|
|
218
|
+
const existing = {
|
|
219
|
+
...wakeupRequest("Inspect the target independently"),
|
|
220
|
+
requestedByActorId: otherSourceAgentId,
|
|
221
|
+
payload: {
|
|
222
|
+
...wakeupRequest("Inspect the target independently").payload,
|
|
223
|
+
sourceAgentId: otherSourceAgentId,
|
|
224
|
+
sourceRunId: otherSourceRunId,
|
|
225
|
+
},
|
|
226
|
+
};
|
|
227
|
+
const wakeup = vi.fn();
|
|
228
|
+
const service = delegationRunService(createDbStub({ existingRequest: existing, targetAgentId }), {
|
|
229
|
+
heartbeat: {
|
|
230
|
+
getRun: vi.fn()
|
|
231
|
+
.mockResolvedValueOnce(sourceRun())
|
|
232
|
+
.mockResolvedValueOnce({ ...targetRun(), sourceRunId: otherSourceRunId }),
|
|
233
|
+
wakeup,
|
|
234
|
+
},
|
|
235
|
+
access: { hasPermission: vi.fn().mockResolvedValue(true) },
|
|
236
|
+
});
|
|
237
|
+
await expect(service.create({
|
|
238
|
+
sourceAgentId,
|
|
239
|
+
sourceRunId,
|
|
240
|
+
task: "Inspect the target independently",
|
|
241
|
+
targetAgentId,
|
|
242
|
+
idempotencyKey: "delegation-key-1",
|
|
243
|
+
})).resolves.toMatchObject({
|
|
244
|
+
sourceAgentId: otherSourceAgentId,
|
|
245
|
+
sourceRunId: otherSourceRunId,
|
|
246
|
+
admissionStatus: "replayed",
|
|
247
|
+
replayed: true,
|
|
248
|
+
});
|
|
249
|
+
expect(wakeup).not.toHaveBeenCalled();
|
|
250
|
+
});
|
|
251
|
+
it("rejects a source Run owned by another authenticated Agent", async () => {
|
|
252
|
+
const service = delegationRunService(createDbStub({}), {
|
|
253
|
+
heartbeat: {
|
|
254
|
+
getRun: vi.fn().mockResolvedValue({ ...sourceRun(), agentId: otherSourceAgentId }),
|
|
255
|
+
wakeup: vi.fn(),
|
|
256
|
+
},
|
|
257
|
+
access: { hasPermission: vi.fn().mockResolvedValue(true) },
|
|
258
|
+
});
|
|
259
|
+
await expect(service.create({
|
|
260
|
+
sourceAgentId,
|
|
261
|
+
sourceRunId,
|
|
262
|
+
task: "Inspect the target independently",
|
|
263
|
+
idempotencyKey: "source-owner-mismatch",
|
|
264
|
+
})).rejects.toMatchObject({ message: "Source Run does not belong to the authenticated Agent" });
|
|
265
|
+
});
|
|
266
|
+
it("rejects missing and cross-organization targets", async () => {
|
|
267
|
+
const missingTarget = delegationRunService(createDbStub({ targetAgent: null }), {
|
|
268
|
+
heartbeat: { getRun: vi.fn().mockResolvedValue(sourceRun()), wakeup: vi.fn() },
|
|
269
|
+
access: { hasPermission: vi.fn().mockResolvedValue(true) },
|
|
270
|
+
});
|
|
271
|
+
await expect(missingTarget.create({
|
|
272
|
+
sourceAgentId,
|
|
273
|
+
sourceRunId,
|
|
274
|
+
targetAgentId,
|
|
275
|
+
task: "Inspect the target independently",
|
|
276
|
+
idempotencyKey: "missing-target",
|
|
277
|
+
})).rejects.toMatchObject({ message: "Target Agent not found" });
|
|
278
|
+
const crossOrgTarget = delegationRunService(createDbStub({
|
|
279
|
+
targetAgent: { id: targetAgentId, orgId: "99999999-9999-4999-8999-999999999999" },
|
|
280
|
+
}), {
|
|
281
|
+
heartbeat: { getRun: vi.fn().mockResolvedValue(sourceRun()), wakeup: vi.fn() },
|
|
282
|
+
access: { hasPermission: vi.fn().mockResolvedValue(true) },
|
|
283
|
+
});
|
|
284
|
+
await expect(crossOrgTarget.create({
|
|
285
|
+
sourceAgentId,
|
|
286
|
+
sourceRunId,
|
|
287
|
+
targetAgentId,
|
|
288
|
+
task: "Inspect the target independently",
|
|
289
|
+
idempotencyKey: "cross-org-target",
|
|
290
|
+
})).rejects.toMatchObject({ message: "Target Agent must belong to the same organization" });
|
|
291
|
+
});
|
|
292
|
+
it.each([
|
|
293
|
+
["deferred_agent_paused", "deferred"],
|
|
294
|
+
["coalesced", "coalesced"],
|
|
295
|
+
["skipped", "skipped"],
|
|
296
|
+
])("projects %s admission through the Delegation response as %s", async (status, expected) => {
|
|
297
|
+
const persisted = {
|
|
298
|
+
...wakeupRequest("Inspect the target independently", status, sourceAgentId),
|
|
299
|
+
runId: status === "skipped" ? null : targetRunId,
|
|
300
|
+
};
|
|
301
|
+
const service = delegationRunService(createDbStub({ persistedRequest: persisted }), {
|
|
302
|
+
heartbeat: {
|
|
303
|
+
getRun: vi.fn()
|
|
304
|
+
.mockResolvedValueOnce(sourceRun())
|
|
305
|
+
.mockResolvedValueOnce(targetRun(sourceAgentId)),
|
|
306
|
+
wakeup: vi.fn().mockResolvedValue(status === "skipped" ? null : targetRun(sourceAgentId)),
|
|
307
|
+
},
|
|
308
|
+
access: { hasPermission: vi.fn().mockResolvedValue(true) },
|
|
309
|
+
});
|
|
310
|
+
await expect(service.create({
|
|
311
|
+
sourceAgentId,
|
|
312
|
+
sourceRunId,
|
|
313
|
+
task: "Inspect the target independently",
|
|
314
|
+
idempotencyKey: `admission-${status}`,
|
|
315
|
+
})).resolves.toMatchObject({ admissionStatus: expected });
|
|
316
|
+
});
|
|
317
|
+
it("returns a traceable skipped admission when the target is unavailable", async () => {
|
|
318
|
+
const skippedRequest = {
|
|
319
|
+
...wakeupRequest("Inspect the target independently", "skipped", sourceAgentId),
|
|
320
|
+
runId: null,
|
|
321
|
+
};
|
|
322
|
+
const service = delegationRunService(createDbStub({ persistedRequest: skippedRequest }), {
|
|
323
|
+
heartbeat: {
|
|
324
|
+
getRun: vi.fn().mockResolvedValue(sourceRun()),
|
|
325
|
+
wakeup: vi.fn().mockRejectedValue(new Error("Agent is not invokable in its current state")),
|
|
326
|
+
},
|
|
327
|
+
access: { hasPermission: vi.fn().mockResolvedValue(true) },
|
|
328
|
+
});
|
|
329
|
+
await expect(service.create({
|
|
330
|
+
sourceAgentId,
|
|
331
|
+
sourceRunId,
|
|
332
|
+
task: "Inspect the target independently",
|
|
333
|
+
idempotencyKey: "delegation-key-1",
|
|
334
|
+
})).resolves.toMatchObject({
|
|
335
|
+
runId: null,
|
|
336
|
+
wakeupRequestId,
|
|
337
|
+
admissionStatus: "skipped",
|
|
338
|
+
replayed: false,
|
|
339
|
+
});
|
|
340
|
+
});
|
|
341
|
+
it("enforces the Unicode character limit before admission", async () => {
|
|
342
|
+
const service = delegationRunService(createDbStub({}), {
|
|
343
|
+
heartbeat: { getRun: vi.fn(), wakeup: vi.fn() },
|
|
344
|
+
access: { hasPermission: vi.fn().mockResolvedValue(true) },
|
|
345
|
+
});
|
|
346
|
+
await expect(service.create({
|
|
347
|
+
sourceAgentId,
|
|
348
|
+
sourceRunId,
|
|
349
|
+
task: "🙂".repeat(20_001),
|
|
350
|
+
idempotencyKey: "delegation-oversize",
|
|
351
|
+
})).rejects.toMatchObject({ message: "Delegation task must be no more than 20,000 Unicode characters" });
|
|
352
|
+
});
|
|
353
|
+
it("requires tasks:assign only for cross-agent delegation", async () => {
|
|
354
|
+
const wakeup = vi.fn();
|
|
355
|
+
const db = createDbStub({
|
|
356
|
+
targetAgentId,
|
|
357
|
+
persistedRequest: wakeupRequest("cross-agent task"),
|
|
358
|
+
});
|
|
359
|
+
const service = delegationRunService(db, {
|
|
360
|
+
heartbeat: { getRun: vi.fn().mockResolvedValue(sourceRun()), wakeup },
|
|
361
|
+
access: { hasPermission: vi.fn().mockResolvedValue(false) },
|
|
362
|
+
});
|
|
363
|
+
await expect(service.create({
|
|
364
|
+
sourceAgentId,
|
|
365
|
+
sourceRunId,
|
|
366
|
+
task: "cross-agent task",
|
|
367
|
+
targetAgentId,
|
|
368
|
+
idempotencyKey: "delegation-key-cross-agent",
|
|
369
|
+
})).rejects.toMatchObject({ message: "Missing permission: tasks:assign" });
|
|
370
|
+
expect(wakeup).not.toHaveBeenCalled();
|
|
371
|
+
});
|
|
372
|
+
});
|
|
373
|
+
//# sourceMappingURL=delegation-runs.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delegation-runs.test.js","sourceRoot":"","sources":["../../src/services/delegation-runs.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../../src/services/integrations/feishu/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0C,KAAK,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEzG,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAMvC,OAAO,KAAK,EACV,8BAA8B,EAG/B,MAAM,kBAAkB,CAAC;AAG1B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAEhE,OAAO,
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../../src/services/integrations/feishu/runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ import { agentIntegrationOutboundMessages, agentIntegrations, chatMessages, } fr
|
|
|
3
3
|
import { and, eq, inArray } from "drizzle-orm";
|
|
4
4
|
import { logger } from "../../../middleware/logger.js";
|
|
5
5
|
import { chatAgentRunService } from "../../chat-agent-runs.js";
|
|
6
|
-
import { chatAssistantService, ChatAssistantStreamError } from "../../chat-assistant.js";
|
|
6
|
+
import { chatAssistantService, ChatAssistantStreamError, userVisiblePartialBodyFromError, } from "../../chat-assistant.js";
|
|
7
7
|
import { claimChatGeneration, setActiveChatGenerationId, } from "../../chat-generation-locks.js";
|
|
8
8
|
import { chatService } from "../../chats.js";
|
|
9
9
|
import { secretService } from "../../secrets.js";
|
|
@@ -422,7 +422,7 @@ export function feishuIntegrationRuntimeService(db, options = {}) {
|
|
|
422
422
|
throw error;
|
|
423
423
|
}
|
|
424
424
|
}
|
|
425
|
-
async function completeAcceptedReply(integration, credential, event, result, activeGeneration, resume) {
|
|
425
|
+
async function completeAcceptedReply(integration, credential, event, result, activeGeneration, replyState, resume) {
|
|
426
426
|
const conversation = await chats.getById(result.conversationId);
|
|
427
427
|
const userMessage = result.chatMessageId
|
|
428
428
|
? await chats
|
|
@@ -446,7 +446,6 @@ export function feishuIntegrationRuntimeService(db, options = {}) {
|
|
|
446
446
|
let waitingForNetwork = false;
|
|
447
447
|
let assistantMessage = null;
|
|
448
448
|
try {
|
|
449
|
-
let activeRunId = null;
|
|
450
449
|
const streamed = await assistant.streamChatAssistantReply({
|
|
451
450
|
conversation,
|
|
452
451
|
contextLinks: Array.isArray(conversation.contextLinks) ? conversation.contextLinks : [],
|
|
@@ -464,7 +463,7 @@ export function feishuIntegrationRuntimeService(db, options = {}) {
|
|
|
464
463
|
: {}),
|
|
465
464
|
abortSignal: activeGeneration.abortController.signal,
|
|
466
465
|
onRunCreated: (runId) => {
|
|
467
|
-
activeRunId = runId;
|
|
466
|
+
replyState.activeRunId = runId;
|
|
468
467
|
},
|
|
469
468
|
onWaitingForNetwork: async (suspension) => {
|
|
470
469
|
const marked = await chats.generationProtocol.markWaitingForNetwork({
|
|
@@ -501,9 +500,10 @@ export function feishuIntegrationRuntimeService(db, options = {}) {
|
|
|
501
500
|
kind: persistableAssistantKind(reply.kind),
|
|
502
501
|
body: reply.body,
|
|
503
502
|
structuredPayload: null,
|
|
504
|
-
runId: activeRunId,
|
|
503
|
+
runId: replyState.activeRunId,
|
|
505
504
|
replyingAgentId: reply.replyingAgentId ?? integration.agentId,
|
|
506
505
|
});
|
|
506
|
+
replyState.assistantMessage = assistantMessage;
|
|
507
507
|
if (await deleteAssistantMessageIfStopped(assistantMessage.id)) {
|
|
508
508
|
generationTerminalStatus = "stopped";
|
|
509
509
|
return;
|
|
@@ -519,7 +519,7 @@ export function feishuIntegrationRuntimeService(db, options = {}) {
|
|
|
519
519
|
text: reply.body,
|
|
520
520
|
conversationId: conversation.id,
|
|
521
521
|
chatMessageId: assistantMessage.id,
|
|
522
|
-
runId: activeRunId ?? result.runId,
|
|
522
|
+
runId: replyState.activeRunId ?? result.runId,
|
|
523
523
|
issueId: result.issueId,
|
|
524
524
|
abortSignal: activeGeneration.abortController.signal,
|
|
525
525
|
});
|
|
@@ -527,8 +527,8 @@ export function feishuIntegrationRuntimeService(db, options = {}) {
|
|
|
527
527
|
generationTerminalStatus = "stopped";
|
|
528
528
|
return;
|
|
529
529
|
}
|
|
530
|
-
if (activeRunId) {
|
|
531
|
-
await chatRuns.linkAssistantMessage(activeRunId, conversation.id, assistantMessage.id);
|
|
530
|
+
if (replyState.activeRunId) {
|
|
531
|
+
await chatRuns.linkAssistantMessage(replyState.activeRunId, conversation.id, assistantMessage.id);
|
|
532
532
|
}
|
|
533
533
|
if (await deleteAssistantMessageIfStopped(assistantMessage.id)) {
|
|
534
534
|
generationTerminalStatus = "stopped";
|
|
@@ -558,6 +558,47 @@ export function feishuIntegrationRuntimeService(db, options = {}) {
|
|
|
558
558
|
activeGeneration.release();
|
|
559
559
|
}
|
|
560
560
|
}
|
|
561
|
+
async function persistAndSendFailedReply(integration, credential, event, result, replyState, error) {
|
|
562
|
+
const body = error instanceof ChatAssistantStreamError
|
|
563
|
+
? userVisiblePartialBodyFromError(error)
|
|
564
|
+
: "Rudder accepted your message, but the agent reply failed before a final response was produced.";
|
|
565
|
+
const failurePayload = error instanceof ChatAssistantStreamError
|
|
566
|
+
? {
|
|
567
|
+
recoverableFailure: {
|
|
568
|
+
recoverable: error.retryable !== false,
|
|
569
|
+
...(error.retryable === false ? { retryable: false } : {}),
|
|
570
|
+
code: error.errorCode,
|
|
571
|
+
message: error.userMessage,
|
|
572
|
+
runId: replyState.activeRunId,
|
|
573
|
+
...(error.failurePhase ? { phase: error.failurePhase } : {}),
|
|
574
|
+
...(error.action ? { action: error.action } : {}),
|
|
575
|
+
},
|
|
576
|
+
}
|
|
577
|
+
: null;
|
|
578
|
+
const assistantMessage = replyState.assistantMessage ?? await chats.addMessage(result.conversationId, {
|
|
579
|
+
orgId: integration.orgId,
|
|
580
|
+
role: "assistant",
|
|
581
|
+
kind: "message",
|
|
582
|
+
status: "failed",
|
|
583
|
+
body,
|
|
584
|
+
structuredPayload: failurePayload,
|
|
585
|
+
runId: replyState.activeRunId,
|
|
586
|
+
replyingAgentId: integration.agentId,
|
|
587
|
+
});
|
|
588
|
+
await sendAndRecord({
|
|
589
|
+
integration,
|
|
590
|
+
credential,
|
|
591
|
+
chatId: event.chatId,
|
|
592
|
+
text: assistantMessage.body,
|
|
593
|
+
conversationId: result.conversationId,
|
|
594
|
+
chatMessageId: assistantMessage.id,
|
|
595
|
+
runId: replyState.activeRunId,
|
|
596
|
+
issueId: result.issueId,
|
|
597
|
+
});
|
|
598
|
+
if (replyState.activeRunId) {
|
|
599
|
+
await chatRuns.linkAssistantMessage(replyState.activeRunId, result.conversationId, assistantMessage.id);
|
|
600
|
+
}
|
|
601
|
+
}
|
|
561
602
|
async function runAcceptedReplyInBackground(integration, credential, event, result, activeGeneration) {
|
|
562
603
|
const leaseTimer = activeGeneration.ownerToken
|
|
563
604
|
? setInterval(() => {
|
|
@@ -570,26 +611,24 @@ export function feishuIntegrationRuntimeService(db, options = {}) {
|
|
|
570
611
|
: null;
|
|
571
612
|
leaseTimer?.unref?.();
|
|
572
613
|
let didEnterReplyCompletion = false;
|
|
614
|
+
const replyState = {
|
|
615
|
+
activeRunId: result.runId ?? null,
|
|
616
|
+
assistantMessage: null,
|
|
617
|
+
};
|
|
573
618
|
try {
|
|
574
619
|
await withWorkingReaction(sender, integration, credential, event, async () => {
|
|
575
620
|
didEnterReplyCompletion = true;
|
|
576
621
|
try {
|
|
577
|
-
await completeAcceptedReply(integration, credential, event, result, activeGeneration);
|
|
622
|
+
await completeAcceptedReply(integration, credential, event, result, activeGeneration, replyState);
|
|
578
623
|
}
|
|
579
624
|
catch (error) {
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
chatId: event.chatId,
|
|
588
|
-
text: body,
|
|
589
|
-
conversationId: result.conversationId,
|
|
590
|
-
chatMessageId: result.chatMessageId,
|
|
591
|
-
runId: result.runId,
|
|
592
|
-
issueId: result.issueId,
|
|
625
|
+
await persistAndSendFailedReply(integration, credential, event, result, replyState, error)
|
|
626
|
+
.catch((fallbackError) => {
|
|
627
|
+
logger.warn({
|
|
628
|
+
err: fallbackError,
|
|
629
|
+
integrationId: integration.id,
|
|
630
|
+
conversationId: result.conversationId,
|
|
631
|
+
}, "Feishu failed reply persistence or delivery failed");
|
|
593
632
|
});
|
|
594
633
|
throw error;
|
|
595
634
|
}
|
|
@@ -694,6 +733,10 @@ export function feishuIntegrationRuntimeService(db, options = {}) {
|
|
|
694
733
|
text: "",
|
|
695
734
|
},
|
|
696
735
|
};
|
|
736
|
+
const replyState = {
|
|
737
|
+
activeRunId: run.id,
|
|
738
|
+
assistantMessage: null,
|
|
739
|
+
};
|
|
697
740
|
try {
|
|
698
741
|
await completeAcceptedReply(integration, credential, event, result, {
|
|
699
742
|
abortController,
|
|
@@ -701,9 +744,12 @@ export function feishuIntegrationRuntimeService(db, options = {}) {
|
|
|
701
744
|
attemptEpoch: resumed.attemptEpoch,
|
|
702
745
|
ownerToken: resumed.controlOwnerToken,
|
|
703
746
|
release,
|
|
704
|
-
}, { runId: run.id, ownerToken });
|
|
747
|
+
}, replyState, { runId: run.id, ownerToken });
|
|
705
748
|
}
|
|
706
749
|
catch (error) {
|
|
750
|
+
await persistAndSendFailedReply(integration, credential, event, result, replyState, error).catch((fallbackError) => {
|
|
751
|
+
logger.warn({ err: fallbackError, runId: run.id }, "Feishu network-wait failure response delivery failed");
|
|
752
|
+
});
|
|
707
753
|
logger.warn({ err: error, runId: run.id }, "Feishu network-wait recovery failed");
|
|
708
754
|
release();
|
|
709
755
|
}
|