@rudderhq/server 0.7.11 → 0.7.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bootstrap/register-api-routes.d.ts.map +1 -1
- package/dist/bootstrap/register-api-routes.js +1 -1
- package/dist/bootstrap/register-api-routes.js.map +1 -1
- package/dist/bootstrap/types.d.ts +12 -0
- package/dist/bootstrap/types.d.ts.map +1 -1
- package/dist/index.js +20 -5
- package/dist/index.js.map +1 -1
- package/dist/routes/agents.management-routes.d.ts.map +1 -1
- package/dist/routes/agents.management-routes.js +10 -2
- package/dist/routes/agents.management-routes.js.map +1 -1
- package/dist/routes/chats.d.ts +2 -1
- package/dist/routes/chats.d.ts.map +1 -1
- package/dist/routes/chats.js +377 -4
- 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 +55 -3
- package/dist/routes/chats.stream-routes.js.map +1 -1
- package/dist/routes/goals.d.ts.map +1 -1
- package/dist/routes/goals.js +34 -3
- package/dist/routes/goals.js.map +1 -1
- package/dist/routes/orgs.d.ts.map +1 -1
- package/dist/routes/orgs.js +22 -1
- package/dist/routes/orgs.js.map +1 -1
- package/dist/routes/run-intelligence.d.ts.map +1 -1
- package/dist/routes/run-intelligence.js +10 -0
- package/dist/routes/run-intelligence.js.map +1 -1
- package/dist/services/agent-instructions.d.ts +1 -0
- package/dist/services/agent-instructions.d.ts.map +1 -1
- package/dist/services/agent-instructions.js +124 -6
- package/dist/services/agent-instructions.js.map +1 -1
- package/dist/services/agent-issue-creation.d.ts +1 -1
- package/dist/services/agent-run-context.d.ts.map +1 -1
- package/dist/services/agent-run-context.js +15 -0
- package/dist/services/agent-run-context.js.map +1 -1
- package/dist/services/agent-startup-context.d.ts +4 -0
- package/dist/services/agent-startup-context.d.ts.map +1 -1
- package/dist/services/agent-startup-context.js +57 -13
- package/dist/services/agent-startup-context.js.map +1 -1
- package/dist/services/agents.d.ts +253 -0
- package/dist/services/agents.d.ts.map +1 -1
- package/dist/services/automations.d.ts.map +1 -1
- package/dist/services/automations.js +3 -0
- package/dist/services/automations.js.map +1 -1
- package/dist/services/chat-agent-runs.d.ts +48 -1
- package/dist/services/chat-agent-runs.d.ts.map +1 -1
- package/dist/services/chat-agent-runs.js +107 -3
- package/dist/services/chat-agent-runs.js.map +1 -1
- package/dist/services/chat-assistant.d.ts.map +1 -1
- package/dist/services/chat-assistant.helpers.d.ts +12 -3
- package/dist/services/chat-assistant.helpers.d.ts.map +1 -1
- package/dist/services/chat-assistant.helpers.js +6 -0
- package/dist/services/chat-assistant.helpers.js.map +1 -1
- package/dist/services/chat-assistant.js +54 -18
- package/dist/services/chat-assistant.js.map +1 -1
- package/dist/services/chat-generation-protocol.d.ts +119 -0
- package/dist/services/chat-generation-protocol.d.ts.map +1 -1
- package/dist/services/chat-generation-protocol.js +65 -0
- package/dist/services/chat-generation-protocol.js.map +1 -1
- package/dist/services/chats.constants.d.ts +1 -1
- package/dist/services/chats.constants.d.ts.map +1 -1
- package/dist/services/chats.constants.js +1 -0
- package/dist/services/chats.constants.js.map +1 -1
- package/dist/services/chats.d.ts +128 -0
- package/dist/services/chats.d.ts.map +1 -1
- package/dist/services/chats.js +10 -0
- package/dist/services/chats.js.map +1 -1
- package/dist/services/finance.d.ts +1 -1
- package/dist/services/goals.d.ts +47 -7
- package/dist/services/goals.d.ts.map +1 -1
- package/dist/services/goals.js +74 -33
- package/dist/services/goals.js.map +1 -1
- package/dist/services/heartbeat-run-reference.d.ts.map +1 -1
- package/dist/services/heartbeat-run-reference.js +11 -5
- package/dist/services/heartbeat-run-reference.js.map +1 -1
- package/dist/services/index.d.ts +2 -1
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +2 -1
- package/dist/services/index.js.map +1 -1
- package/dist/services/integrations/feishu/runtime.d.ts +8 -0
- package/dist/services/integrations/feishu/runtime.d.ts.map +1 -1
- package/dist/services/integrations/feishu/runtime.js +124 -1
- package/dist/services/integrations/feishu/runtime.js.map +1 -1
- package/dist/services/issue-assignment-wakeup.d.ts +1 -0
- package/dist/services/issue-assignment-wakeup.d.ts.map +1 -1
- package/dist/services/issue-assignment-wakeup.js +2 -0
- package/dist/services/issue-assignment-wakeup.js.map +1 -1
- package/dist/services/issues.d.ts +2 -2
- package/dist/services/issues.d.ts.map +1 -1
- package/dist/services/issues.helpers.d.ts +8 -0
- package/dist/services/issues.helpers.d.ts.map +1 -1
- package/dist/services/issues.helpers.js +17 -1
- package/dist/services/issues.helpers.js.map +1 -1
- package/dist/services/issues.js +108 -15
- package/dist/services/issues.js.map +1 -1
- package/dist/services/messenger.d.ts.map +1 -1
- package/dist/services/messenger.js +12 -3
- package/dist/services/messenger.js.map +1 -1
- package/dist/services/organization-members.d.ts +27 -0
- package/dist/services/organization-members.d.ts.map +1 -0
- package/dist/services/organization-members.js +169 -0
- package/dist/services/organization-members.js.map +1 -0
- package/dist/services/organization-workspace-browser.d.ts.map +1 -1
- package/dist/services/organization-workspace-browser.js +44 -10
- package/dist/services/organization-workspace-browser.js.map +1 -1
- package/dist/services/product-intelligence.d.ts.map +1 -1
- package/dist/services/product-intelligence.js +4 -0
- package/dist/services/product-intelligence.js.map +1 -1
- package/dist/services/projects.d.ts +2 -5
- package/dist/services/projects.d.ts.map +1 -1
- package/dist/services/projects.js +27 -2
- package/dist/services/projects.js.map +1 -1
- package/dist/services/rudder-plugin-catalog.d.ts +1 -1
- package/dist/services/rudder-plugin-catalog.d.ts.map +1 -1
- package/dist/services/rudder-plugin-catalog.js +281 -15
- package/dist/services/rudder-plugin-catalog.js.map +1 -1
- package/dist/services/rudder-plugin-catalog.test.js +55 -0
- package/dist/services/rudder-plugin-catalog.test.js.map +1 -1
- package/dist/services/run-intelligence.d.ts +1 -0
- package/dist/services/run-intelligence.d.ts.map +1 -1
- package/dist/services/run-intelligence.js +8 -1
- package/dist/services/run-intelligence.js.map +1 -1
- package/dist/services/run-log-store.d.ts +3 -0
- package/dist/services/run-log-store.d.ts.map +1 -1
- package/dist/services/run-log-store.js +124 -18
- package/dist/services/run-log-store.js.map +1 -1
- package/dist/services/runtime-kernel/assignment-run-guardrail.d.ts +2 -0
- package/dist/services/runtime-kernel/assignment-run-guardrail.d.ts.map +1 -1
- package/dist/services/runtime-kernel/assignment-run-guardrail.js +5 -3
- package/dist/services/runtime-kernel/assignment-run-guardrail.js.map +1 -1
- package/dist/services/runtime-kernel/assignment-run-guardrail.test.js +20 -0
- package/dist/services/runtime-kernel/assignment-run-guardrail.test.js.map +1 -1
- package/dist/services/runtime-kernel/heartbeat-attempt-ledger.d.ts +124 -0
- package/dist/services/runtime-kernel/heartbeat-attempt-ledger.d.ts.map +1 -0
- package/dist/services/runtime-kernel/heartbeat-attempt-ledger.js +108 -0
- package/dist/services/runtime-kernel/heartbeat-attempt-ledger.js.map +1 -0
- package/dist/services/runtime-kernel/heartbeat.core.d.ts +129 -0
- package/dist/services/runtime-kernel/heartbeat.core.d.ts.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.core.js +15 -0
- package/dist/services/runtime-kernel/heartbeat.core.js.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.d.ts +43 -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 +229 -3
- package/dist/services/runtime-kernel/heartbeat.execute.js.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.js +178 -6
- package/dist/services/runtime-kernel/heartbeat.js.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.recovery.d.ts.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.recovery.js +17 -1
- 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 +25 -5
- package/dist/services/runtime-kernel/heartbeat.sessions.js.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.terminal.d.ts +56 -0
- package/dist/services/runtime-kernel/heartbeat.terminal.d.ts.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.wakeup.d.ts.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.wakeup.js +28 -0
- package/dist/services/runtime-kernel/heartbeat.wakeup.js.map +1 -1
- package/dist/services/runtime-kernel/model-fallback.d.ts +4 -0
- package/dist/services/runtime-kernel/model-fallback.d.ts.map +1 -1
- package/dist/services/runtime-kernel/model-fallback.js +25 -4
- package/dist/services/runtime-kernel/model-fallback.js.map +1 -1
- package/dist/services/workspace-backup-v2.d.ts +20 -0
- package/dist/services/workspace-backup-v2.d.ts.map +1 -1
- package/dist/services/workspace-backup-v2.js +155 -23
- package/dist/services/workspace-backup-v2.js.map +1 -1
- package/dist/services/workspace-backup-v2.test.js +34 -2
- package/dist/services/workspace-backup-v2.test.js.map +1 -1
- package/dist/services/workspace-backups.d.ts +0 -1
- package/dist/services/workspace-backups.d.ts.map +1 -1
- package/dist/services/workspace-backups.js +18 -19
- package/dist/services/workspace-backups.js.map +1 -1
- package/dist/services/workspace-manifest-native.d.ts +10 -0
- package/dist/services/workspace-manifest-native.d.ts.map +1 -0
- package/dist/services/workspace-manifest-native.js +219 -0
- package/dist/services/workspace-manifest-native.js.map +1 -0
- package/dist/services/workspace-restore-reconciliation.d.ts +11 -0
- package/dist/services/workspace-restore-reconciliation.d.ts.map +1 -0
- package/dist/services/workspace-restore-reconciliation.js +165 -0
- package/dist/services/workspace-restore-reconciliation.js.map +1 -0
- package/package.json +14 -14
- package/resources/bundled-skills/rudder-docs/references/api-reference.md +8 -0
- package/resources/bundled-skills/rudder-docs/references/cli-reference.md +6 -3
- package/skills/rudder-docs/references/api-reference.md +8 -0
- package/skills/rudder-docs/references/cli-reference.md +6 -3
- package/ui-dist/assets/LibraryLiveSurface-l4GUICoP.js +1 -0
- package/ui-dist/assets/{abnfDiagram-VRR7QNED-BggxrEZR.js → abnfDiagram-VRR7QNED-BLBjJ-cq.js} +1 -1
- package/ui-dist/assets/{addon-fit-Cc1gOtSX.js → addon-fit-BJjiE5UX.js} +1 -1
- package/ui-dist/assets/{arc-0kNrc9xt.js → arc-Cc8Cihbb.js} +1 -1
- package/ui-dist/assets/{architectureDiagram-ZJ3FMSHR-BOCa-5ab.js → architectureDiagram-ZJ3FMSHR--xCnNdhe.js} +1 -1
- package/ui-dist/assets/{blockDiagram-677ZJIJ3-CQU5jcsO.js → blockDiagram-677ZJIJ3-DRT2VAhQ.js} +1 -1
- package/ui-dist/assets/{c4Diagram-LMCZKHZV-ChgWIw5O.js → c4Diagram-LMCZKHZV-D88LDng_.js} +1 -1
- package/ui-dist/assets/channel-C5Hipz5u.js +1 -0
- package/ui-dist/assets/{chunk-2Q5K7J3B-B4yrwesI.js → chunk-2Q5K7J3B-Dz_vdT6U.js} +1 -1
- package/ui-dist/assets/{chunk-32BRIVSS-mhAeSMlR.js → chunk-32BRIVSS-DigOixDH.js} +1 -1
- package/ui-dist/assets/{chunk-5VM5RSS4-BmS_u59G.js → chunk-5VM5RSS4-C_1XAVwx.js} +1 -1
- package/ui-dist/assets/{chunk-EX3LRPZG-DXoTKkLG.js → chunk-EX3LRPZG-C6viraTj.js} +1 -1
- package/ui-dist/assets/{chunk-JWPE2WC7-Bj9myT03.js → chunk-JWPE2WC7-BCRBJeuJ.js} +1 -1
- package/ui-dist/assets/{chunk-MOJQB5TN-OAoJna8Y.js → chunk-MOJQB5TN-Cf1ATLhT.js} +1 -1
- package/ui-dist/assets/{chunk-RYQCIY6F-AGLA7TJn.js → chunk-RYQCIY6F-WltrJiTY.js} +1 -1
- package/ui-dist/assets/{chunk-V7JOEXUC-YGM2tDK2.js → chunk-V7JOEXUC-CA5tCSQF.js} +1 -1
- package/ui-dist/assets/{chunk-VR4S4FIN-DqaZn9Ty.js → chunk-VR4S4FIN-CEkOCBXH.js} +1 -1
- package/ui-dist/assets/{chunk-XXDRQBXY-Cpqn_8Bl.js → chunk-XXDRQBXY-CtrnGXIb.js} +1 -1
- package/ui-dist/assets/classDiagram-OUVF2IWQ-ClTHNkOu.js +1 -0
- package/ui-dist/assets/classDiagram-v2-EOCWNBFH-ClTHNkOu.js +1 -0
- package/ui-dist/assets/{cose-bilkent-JH36ORCC-BVe-X26w.js → cose-bilkent-JH36ORCC-CByYAK4l.js} +1 -1
- package/ui-dist/assets/{cynefin-VYW2F7L2-DlDrrBWp.js → cynefin-VYW2F7L2-_sCXFLWX.js} +1 -1
- package/ui-dist/assets/{cynefinDiagram-TSTJHNR4-BSHvFeGh.js → cynefinDiagram-TSTJHNR4-CFeFfsqk.js} +1 -1
- package/ui-dist/assets/{dagre-VKFMJZFB-tUm70k9h.js → dagre-VKFMJZFB-Bqod3KpP.js} +1 -1
- package/ui-dist/assets/{diagram-FQU43EPY-C5kjITq7.js → diagram-FQU43EPY-BfvoZqSk.js} +1 -1
- package/ui-dist/assets/{diagram-G47NLZAW-BrbHgt8r.js → diagram-G47NLZAW-BXbnKoJ9.js} +1 -1
- package/ui-dist/assets/{diagram-NH7WQ7WH-DT7PdghT.js → diagram-NH7WQ7WH-DzyI0L8P.js} +1 -1
- package/ui-dist/assets/{diagram-OA4YK3LP-wOjhRHRo.js → diagram-OA4YK3LP-DTMuvqry.js} +1 -1
- package/ui-dist/assets/{diagram-WEI45ONY-Dz9vtaDT.js → diagram-WEI45ONY-CAzeoFPA.js} +1 -1
- package/ui-dist/assets/{ebnfDiagram-CCIWWBDH-BT5TzIA6.js → ebnfDiagram-CCIWWBDH-CV731d_d.js} +1 -1
- package/ui-dist/assets/{erDiagram-Q63AITRT-DLCpoOEP.js → erDiagram-Q63AITRT-X1TOS4Ka.js} +1 -1
- package/ui-dist/assets/{flowDiagram-23GEKE2U-DfF2COjh.js → flowDiagram-23GEKE2U-DVrBhhZN.js} +1 -1
- package/ui-dist/assets/{ganttDiagram-NO4QXBWP-1d0KDwQs.js → ganttDiagram-NO4QXBWP-Bu2bat7s.js} +1 -1
- package/ui-dist/assets/{gitGraphDiagram-IHSO6WYX-COLjS1ZR.js → gitGraphDiagram-IHSO6WYX-BACGK4uh.js} +1 -1
- package/ui-dist/assets/{graph-B7fcgpw_.js → graph-DBmSffWh.js} +1 -1
- package/ui-dist/assets/{index-DTc5LpTU.js → index-37d7mmQR.js} +1 -1
- package/ui-dist/assets/{index-DttnaNlV.js → index-BJLMZ-lO.js} +542 -543
- package/ui-dist/assets/{index-CTIfCQqR.js → index-BM89NC7H.js} +1 -1
- package/ui-dist/assets/{index-COLwjKBR.js → index-BlzBPtLA.js} +1 -1
- package/ui-dist/assets/{index-CXg1YCeI.js → index-C7oAJP9-.js} +1 -1
- package/ui-dist/assets/index-CPP8apmO.css +32 -0
- package/ui-dist/assets/{index-CZYXpHv4.js → index-CY63mXIN.js} +1 -1
- package/ui-dist/assets/{index-CgkYyYx9.js → index-CqrPtttL.js} +1 -1
- package/ui-dist/assets/{index-CMNULCMJ.js → index-D8VjtybU.js} +1 -1
- package/ui-dist/assets/{index-CH8I9acP.js → index-DsjgdWi0.js} +1 -1
- package/ui-dist/assets/{index-CbqgXGcs.js → index-Qr_boV5N.js} +1 -1
- package/ui-dist/assets/{index-B6zSdXAR.js → index-SBaOrW31.js} +1 -1
- package/ui-dist/assets/{index-D27Bbc-x.js → index-jawM4Mw8.js} +1 -1
- package/ui-dist/assets/{index-BczgTMAn.js → index-juSeEYHt.js} +1 -1
- package/ui-dist/assets/{index-Denv6wuU.js → index-qSO_9tQ4.js} +1 -1
- package/ui-dist/assets/{index-vtghjwab.js → index-sPs1blcu.js} +1 -1
- package/ui-dist/assets/{infoDiagram-FWYZ7A6U-Bg4YQUu2.js → infoDiagram-FWYZ7A6U-DsKiGJG2.js} +1 -1
- package/ui-dist/assets/{ishikawaDiagram-FXEZZL3T-BtgUVI_I.js → ishikawaDiagram-FXEZZL3T-qFWBzEXh.js} +1 -1
- package/ui-dist/assets/{journeyDiagram-5HDEW3XC-BGHGjvN4.js → journeyDiagram-5HDEW3XC-CzXYTAgD.js} +1 -1
- package/ui-dist/assets/{kanban-definition-HUTT4EX6-DekQSNo8.js → kanban-definition-HUTT4EX6-BCz-L1fU.js} +1 -1
- package/ui-dist/assets/{layout-Bsw9hK6u.js → layout-YfTyU1_8.js} +1 -1
- package/ui-dist/assets/{linear-D8D1R-4C.js → linear-Cmr3155j.js} +1 -1
- package/ui-dist/assets/{map-BUIcuf4c.js → map-Cd3zkWna.js} +1 -1
- package/ui-dist/assets/{mermaid.core-CYZMLemV.js → mermaid.core-B0LpeiXb.js} +4 -4
- package/ui-dist/assets/{mindmap-definition-LN4V7U3C-mjS9avIS.js → mindmap-definition-LN4V7U3C-53OklQRn.js} +1 -1
- package/ui-dist/assets/{pegDiagram-2B236MQR-Buziry9m.js → pegDiagram-2B236MQR-Dm_aMKAy.js} +1 -1
- package/ui-dist/assets/{pieDiagram-ENE6RG2P-B_9BmFEg.js → pieDiagram-ENE6RG2P-X7GdM_uO.js} +1 -1
- package/ui-dist/assets/{quadrantDiagram-ABIIQ3AL-BxFdUA8s.js → quadrantDiagram-ABIIQ3AL-CwNrCyye.js} +1 -1
- package/ui-dist/assets/{railroadDiagram-RFXS5EU6-pJh_afC-.js → railroadDiagram-RFXS5EU6-qeA8AyXg.js} +1 -1
- package/ui-dist/assets/{requirementDiagram-TGXJPOKE-BGgk3AxL.js → requirementDiagram-TGXJPOKE-CbTV3-mv.js} +1 -1
- package/ui-dist/assets/{sankeyDiagram-HTMAVEWB-DdPKE4bs.js → sankeyDiagram-HTMAVEWB-Cb2FZniK.js} +1 -1
- package/ui-dist/assets/{sequenceDiagram-DBY2YBRQ-xlik6FjZ.js → sequenceDiagram-DBY2YBRQ-43rfMbK2.js} +1 -1
- package/ui-dist/assets/{sizeCapture-X5ZJPWSS-D_zKAjvf.js → sizeCapture-X5ZJPWSS-kd6mcpBA.js} +1 -1
- package/ui-dist/assets/{stateDiagram-2N3HPSRC-BGQP8giG.js → stateDiagram-2N3HPSRC-DVpqAreh.js} +1 -1
- package/ui-dist/assets/stateDiagram-v2-6OUMAXLB-CD2jPBKH.js +1 -0
- package/ui-dist/assets/{swimlanes-5IMT3BWC-ZhE8oAxR.js → swimlanes-5IMT3BWC-Cpgu2cLX.js} +2 -2
- package/ui-dist/assets/swimlanesDiagram-G3AALYLV-CwSF2io0.js +8 -0
- package/ui-dist/assets/{timeline-definition-FHXFAJF6-CUqfijnL.js → timeline-definition-FHXFAJF6-BXgN1EJb.js} +1 -1
- package/ui-dist/assets/{vennDiagram-L72KCM5P-B_rqTUA0.js → vennDiagram-L72KCM5P-ZFEGgsAk.js} +1 -1
- package/ui-dist/assets/{wardleyDiagram-EHGQE667-BTvjybDi.js → wardleyDiagram-EHGQE667-DrxFJODe.js} +1 -1
- package/ui-dist/assets/{xterm-CRpDYL2s.js → xterm-DeUtt-wP.js} +1 -1
- package/ui-dist/assets/{xychartDiagram-FW5EYKEG-ZBbwueZ5.js → xychartDiagram-FW5EYKEG-BNcvHMPz.js} +1 -1
- package/ui-dist/index.html +2 -2
- package/ui-dist/assets/LibraryLiveSurface-De1p59PK.js +0 -1
- package/ui-dist/assets/channel-eAoWqZqJ.js +0 -1
- package/ui-dist/assets/classDiagram-OUVF2IWQ-c94PI6yY.js +0 -1
- package/ui-dist/assets/classDiagram-v2-EOCWNBFH-c94PI6yY.js +0 -1
- package/ui-dist/assets/index-RSbihTRP.css +0 -32
- package/ui-dist/assets/stateDiagram-v2-6OUMAXLB-BMEtuB93.js +0 -1
- package/ui-dist/assets/swimlanesDiagram-G3AALYLV-Bdh18WfM.js +0 -8
|
@@ -7,6 +7,14 @@ import type { WakeupOptions } from "./heartbeat.core.js";
|
|
|
7
7
|
export declare function heartbeatService(db: Db, testHooks?: {
|
|
8
8
|
afterIssuePromotionCommitted?: (outcome: unknown) => Promise<void> | void;
|
|
9
9
|
beforeRunClaim?: (run: typeof heartbeatRuns.$inferSelect) => Promise<void> | void;
|
|
10
|
+
/** Server-owned runners (currently Chat) may reattach a claimed wait run. */
|
|
11
|
+
onNetworkWaitingRun?: (run: typeof heartbeatRuns.$inferSelect & {
|
|
12
|
+
networkRecoveryExhausted?: boolean;
|
|
13
|
+
networkRecoveryFailure?: {
|
|
14
|
+
errorCode: "network_resume_unsafe" | "network_retry_exhausted";
|
|
15
|
+
error: string;
|
|
16
|
+
};
|
|
17
|
+
}) => Promise<boolean> | boolean;
|
|
10
18
|
beforeRunExecutionLeaseRenewal?: (input: {
|
|
11
19
|
runId: string;
|
|
12
20
|
ownerToken: string;
|
|
@@ -19,6 +27,7 @@ export declare function heartbeatService(db: Db, testHooks?: {
|
|
|
19
27
|
list: (orgId: string, agentId?: string, limit?: number, filters?: {
|
|
20
28
|
startDate?: Date;
|
|
21
29
|
endDate?: Date;
|
|
30
|
+
goalId?: string;
|
|
22
31
|
}) => Promise<HeartbeatRun[]>;
|
|
23
32
|
getAgentSkillAnalytics: (agentId: string, opts?: {
|
|
24
33
|
windowDays?: number;
|
|
@@ -42,6 +51,7 @@ export declare function heartbeatService(db: Db, testHooks?: {
|
|
|
42
51
|
invocationSource: string;
|
|
43
52
|
triggerDetail: string | null;
|
|
44
53
|
status: string;
|
|
54
|
+
runningSubstate: "executing" | "waiting_for_network" | null;
|
|
45
55
|
startedAt: Date | null;
|
|
46
56
|
finishedAt: Date | null;
|
|
47
57
|
error: string | null;
|
|
@@ -66,9 +76,15 @@ export declare function heartbeatService(db: Db, testHooks?: {
|
|
|
66
76
|
errorCode: string | null;
|
|
67
77
|
externalRunId: string | null;
|
|
68
78
|
chatConversationId: string | null;
|
|
79
|
+
goalId: string | null;
|
|
69
80
|
processPid: number | null;
|
|
70
81
|
processStartedAt: Date | null;
|
|
71
82
|
processExitedAt: Date | null;
|
|
83
|
+
networkWaitStartedAt: Date | null;
|
|
84
|
+
networkWaitNextRetryAt: Date | null;
|
|
85
|
+
networkWaitAttemptCount: number;
|
|
86
|
+
networkWaitDurationMs: number;
|
|
87
|
+
recoveryCheckpoint: Record<string, unknown> | null;
|
|
72
88
|
executionOwnerToken: string | null;
|
|
73
89
|
executionLeaseExpiresAt: Date | null;
|
|
74
90
|
terminalEffectsPending: boolean;
|
|
@@ -636,6 +652,7 @@ export declare function heartbeatService(db: Db, testHooks?: {
|
|
|
636
652
|
invocationSource: string;
|
|
637
653
|
triggerDetail: string | null;
|
|
638
654
|
status: string;
|
|
655
|
+
runningSubstate: "executing" | "waiting_for_network" | null;
|
|
639
656
|
startedAt: Date | null;
|
|
640
657
|
finishedAt: Date | null;
|
|
641
658
|
error: string | null;
|
|
@@ -660,9 +677,15 @@ export declare function heartbeatService(db: Db, testHooks?: {
|
|
|
660
677
|
errorCode: string | null;
|
|
661
678
|
externalRunId: string | null;
|
|
662
679
|
chatConversationId: string | null;
|
|
680
|
+
goalId: string | null;
|
|
663
681
|
processPid: number | null;
|
|
664
682
|
processStartedAt: Date | null;
|
|
665
683
|
processExitedAt: Date | null;
|
|
684
|
+
networkWaitStartedAt: Date | null;
|
|
685
|
+
networkWaitNextRetryAt: Date | null;
|
|
686
|
+
networkWaitAttemptCount: number;
|
|
687
|
+
networkWaitDurationMs: number;
|
|
688
|
+
recoveryCheckpoint: Record<string, unknown> | null;
|
|
666
689
|
executionOwnerToken: string | null;
|
|
667
690
|
executionLeaseExpiresAt: Date | null;
|
|
668
691
|
terminalEffectsPending: boolean;
|
|
@@ -706,6 +729,12 @@ export declare function heartbeatService(db: Db, testHooks?: {
|
|
|
706
729
|
timedOut: number;
|
|
707
730
|
runIds: string[];
|
|
708
731
|
}>;
|
|
732
|
+
recoverNetworkWaitingRuns: (opts?: {
|
|
733
|
+
now?: Date;
|
|
734
|
+
}) => Promise<{
|
|
735
|
+
resumed: number;
|
|
736
|
+
runIds: string[];
|
|
737
|
+
}>;
|
|
709
738
|
startNextQueuedRunForAgent: (agentId: string) => Promise<{
|
|
710
739
|
status: string;
|
|
711
740
|
agentId: string;
|
|
@@ -714,6 +743,7 @@ export declare function heartbeatService(db: Db, testHooks?: {
|
|
|
714
743
|
startedAt: Date | null;
|
|
715
744
|
updatedAt: Date;
|
|
716
745
|
wakeupRequestId: string | null;
|
|
746
|
+
goalId: string | null;
|
|
717
747
|
contextSnapshot: Record<string, unknown> | null;
|
|
718
748
|
orgId: string;
|
|
719
749
|
createdAt: Date;
|
|
@@ -721,6 +751,7 @@ export declare function heartbeatService(db: Db, testHooks?: {
|
|
|
721
751
|
chatConversationId: string | null;
|
|
722
752
|
finishedAt: Date | null;
|
|
723
753
|
invocationSource: string;
|
|
754
|
+
runningSubstate: "executing" | "waiting_for_network" | null;
|
|
724
755
|
exitCode: number | null;
|
|
725
756
|
signal: string | null;
|
|
726
757
|
usageJson: Record<string, unknown> | null;
|
|
@@ -743,6 +774,11 @@ export declare function heartbeatService(db: Db, testHooks?: {
|
|
|
743
774
|
processPid: number | null;
|
|
744
775
|
processStartedAt: Date | null;
|
|
745
776
|
processExitedAt: Date | null;
|
|
777
|
+
networkWaitStartedAt: Date | null;
|
|
778
|
+
networkWaitNextRetryAt: Date | null;
|
|
779
|
+
networkWaitAttemptCount: number;
|
|
780
|
+
networkWaitDurationMs: number;
|
|
781
|
+
recoveryCheckpoint: Record<string, unknown> | null;
|
|
746
782
|
executionOwnerToken: string | null;
|
|
747
783
|
executionLeaseExpiresAt: Date | null;
|
|
748
784
|
terminalEffectsPending: boolean;
|
|
@@ -784,6 +820,7 @@ export declare function heartbeatService(db: Db, testHooks?: {
|
|
|
784
820
|
invocationSource: string;
|
|
785
821
|
triggerDetail: string | null;
|
|
786
822
|
status: string;
|
|
823
|
+
runningSubstate: "executing" | "waiting_for_network" | null;
|
|
787
824
|
startedAt: Date | null;
|
|
788
825
|
finishedAt: Date | null;
|
|
789
826
|
error: string | null;
|
|
@@ -808,9 +845,15 @@ export declare function heartbeatService(db: Db, testHooks?: {
|
|
|
808
845
|
errorCode: string | null;
|
|
809
846
|
externalRunId: string | null;
|
|
810
847
|
chatConversationId: string | null;
|
|
848
|
+
goalId: string | null;
|
|
811
849
|
processPid: number | null;
|
|
812
850
|
processStartedAt: Date | null;
|
|
813
851
|
processExitedAt: Date | null;
|
|
852
|
+
networkWaitStartedAt: Date | null;
|
|
853
|
+
networkWaitNextRetryAt: Date | null;
|
|
854
|
+
networkWaitAttemptCount: number;
|
|
855
|
+
networkWaitDurationMs: number;
|
|
856
|
+
recoveryCheckpoint: Record<string, unknown> | null;
|
|
814
857
|
executionOwnerToken: string | null;
|
|
815
858
|
executionLeaseExpiresAt: Date | null;
|
|
816
859
|
terminalEffectsPending: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"heartbeat.d.ts","sourceRoot":"","sources":["../../../src/services/runtime-kernel/heartbeat.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAQL,aAAa,EAGd,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAwB1E,OAAO,EAAiB,KAAK,sBAAsB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"heartbeat.d.ts","sourceRoot":"","sources":["../../../src/services/runtime-kernel/heartbeat.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"heartbeat.execute.d.ts","sourceRoot":"","sources":["../../../src/services/runtime-kernel/heartbeat.execute.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"heartbeat.execute.d.ts","sourceRoot":"","sources":["../../../src/services/runtime-kernel/heartbeat.execute.ts"],"names":[],"mappings":"AA6EA,OAAO,EAAE,0CAA0C,EAAE,KAAK,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAsCnH,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,GAAG;wBA2CxB,MAAM,SAAS;QAAE,iBAAiB,CAAC,EAAE,OAAO,CAAA;KAAE;EAypDhF"}
|
|
@@ -1,3 +1,13 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview Executes claimed heartbeat runs through runtime adapters,
|
|
4
|
+
* workspace realization, transcript persistence, and close-out release.
|
|
5
|
+
*
|
|
6
|
+
* @see doc/product/domains/execution/agent-runs.md - run execution state and evidence
|
|
7
|
+
* @see doc/product/domains/execution/run-admission-and-recovery.md - retry and recovery behavior
|
|
8
|
+
* @see doc/product/domains/agents/instruction-loading.md - AGENT.INSTRUCTIONS.001 runtime instruction frame
|
|
9
|
+
*/
|
|
10
|
+
import { buildModelAttemptSpecs, isAgentRuntimeNetworkSuspension, } from "@rudderhq/agent-runtime-utils";
|
|
1
11
|
import { goals, heartbeatRuns, issues, projects } from "@rudderhq/db";
|
|
2
12
|
import { resolveAgentRunScene, } from "@rudderhq/shared";
|
|
3
13
|
import { and, eq, sql } from "drizzle-orm";
|
|
@@ -14,11 +24,12 @@ import { isManagedWorkspaceConfigurationError, isWorkspacePermissionPreflightErr
|
|
|
14
24
|
import { listProjectResourceAttachments } from "../resource-catalog.js";
|
|
15
25
|
import { buildWorkspaceReadyComment, cleanupExecutionWorkspaceArtifacts, ensureRuntimeServicesForRun, persistAdapterManagedRuntimeServices, realizeExecutionWorkspace, releaseRuntimeServicesForRun } from "../workspace-runtime.js";
|
|
16
26
|
import { AssignmentDependencyPreflightError, createAssignmentRunFailureBudget, inspectAssignmentRunWorkspace, repairAssignmentRunWorkspace, resolveProjectWorkingSetCwd, } from "./assignment-run-guardrail.js";
|
|
27
|
+
import { beginHeartbeatRunAttempt, finishHeartbeatRunAttempt, markHeartbeatRunAttemptWaiting, } from "./heartbeat-attempt-ledger.js";
|
|
17
28
|
import { executeAdapterWithModelFallbacks } from "./model-fallback.js";
|
|
18
29
|
export { prioritizeProjectWorkspaceCandidatesForRun } from "../agent-run-context.js";
|
|
19
30
|
import * as heartbeatCore from "./heartbeat.core.js";
|
|
20
31
|
import * as heartbeatSessions from "./heartbeat.sessions.js";
|
|
21
|
-
const { MAX_LIVE_LOG_CHUNK_BYTES, HEARTBEAT_MAX_CONCURRENT_RUNS_DEFAULT, HEARTBEAT_MAX_CONCURRENT_RUNS_MIN, HEARTBEAT_MAX_CONCURRENT_RUNS_MAX, DEFERRED_WAKE_CONTEXT_KEY, DETACHED_PROCESS_ERROR_CODE, ORPHANED_PROCESS_TERMINATION_GRACE_MS, ORPHANED_PROCESS_KILL_WAIT_MS, ORPHANED_PROCESS_POLL_INTERVAL_MS, startLocksByAgent, MAX_RECOVERY_CHAIN_DEPTH, ISSUE_PASSIVE_FOLLOWUP_REASON, ISSUE_PASSIVE_FOLLOWUP_WAKE_SOURCE, ISSUE_PASSIVE_FOLLOWUP_FAILURE_REASON, ISSUE_PASSIVE_FOLLOWUP_MAX_ATTEMPTS, ISSUE_REVIEW_CLOSEOUT_REASON, ISSUE_REVIEW_CLOSEOUT_FAILURE_REASON, ISSUE_REVIEW_CLOSEOUT_MAX_ATTEMPTS, ISSUE_PASSIVE_FOLLOWUP_COOLDOWN_MS_BY_ATTEMPT, ISSUE_PASSIVE_FOLLOWUP_TIMER_CONTINUITY_MAX_WINDOW_MS, SESSIONED_LOCAL_ADAPTERS, heartbeatRunListColumns, appendExcerpt, appendTranscriptEntriesFromChunk, normalizeMaxConcurrentRuns, withAgentStartLock, readNonEmptyString, buildHeartbeatAdapterInvokePayload, sanitizeStartupContextContextForPersistence, sanitizeStartupContextPromptForPersistence, buildRecentDateKeys, buildDateKeysBetween, fallbackSkillLabel, normalizeLoadedSkill, normalizeLoadedSkillForPayload, emptySkillEvidenceCounts, incrementSkillEvidenceCount, strongestSkillEvidence, resolveSkillEvidence, readSkillEvidenceFromPayload, extractSkillSlugFromPath, collectSkillPathsFromText, collectStringValues, normalizeSkillUseFromPath, dedupeSkillUses, collectSkillUsesFromText, readToolCommandInput, isCommandTranscriptTool, isReadTranscriptTool, inferUsedSkillsFromTranscript, normalizeSkillCandidate, addSkillCandidate, readSkillReferenceSlug, collectSkillReferences, inferUsedSkillsFromPrompt, resolveForbiddenRuntimeSkillMarkers, detectForbiddenRuntimeSkillMarker, normalizeLedgerBillingType, resolveLedgerBiller, normalizeBilledCostCents, resolveLedgerScopeForRun } = heartbeatCore;
|
|
32
|
+
const { MAX_LIVE_LOG_CHUNK_BYTES, HEARTBEAT_MAX_CONCURRENT_RUNS_DEFAULT, HEARTBEAT_MAX_CONCURRENT_RUNS_MIN, HEARTBEAT_MAX_CONCURRENT_RUNS_MAX, DEFERRED_WAKE_CONTEXT_KEY, DETACHED_PROCESS_ERROR_CODE, ORPHANED_PROCESS_TERMINATION_GRACE_MS, ORPHANED_PROCESS_KILL_WAIT_MS, ORPHANED_PROCESS_POLL_INTERVAL_MS, startLocksByAgent, MAX_RECOVERY_CHAIN_DEPTH, ISSUE_PASSIVE_FOLLOWUP_REASON, ISSUE_PASSIVE_FOLLOWUP_WAKE_SOURCE, ISSUE_PASSIVE_FOLLOWUP_FAILURE_REASON, ISSUE_PASSIVE_FOLLOWUP_MAX_ATTEMPTS, ISSUE_REVIEW_CLOSEOUT_REASON, ISSUE_REVIEW_CLOSEOUT_FAILURE_REASON, ISSUE_REVIEW_CLOSEOUT_MAX_ATTEMPTS, ISSUE_PASSIVE_FOLLOWUP_COOLDOWN_MS_BY_ATTEMPT, ISSUE_PASSIVE_FOLLOWUP_TIMER_CONTINUITY_MAX_WINDOW_MS, networkWaitBackoffMs, SESSIONED_LOCAL_ADAPTERS, heartbeatRunListColumns, appendExcerpt, appendTranscriptEntriesFromChunk, normalizeMaxConcurrentRuns, withAgentStartLock, readNonEmptyString, buildHeartbeatAdapterInvokePayload, sanitizeStartupContextContextForPersistence, sanitizeStartupContextPromptForPersistence, buildRecentDateKeys, buildDateKeysBetween, fallbackSkillLabel, normalizeLoadedSkill, normalizeLoadedSkillForPayload, emptySkillEvidenceCounts, incrementSkillEvidenceCount, strongestSkillEvidence, resolveSkillEvidence, readSkillEvidenceFromPayload, extractSkillSlugFromPath, collectSkillPathsFromText, collectStringValues, normalizeSkillUseFromPath, dedupeSkillUses, collectSkillUsesFromText, readToolCommandInput, isCommandTranscriptTool, isReadTranscriptTool, inferUsedSkillsFromTranscript, normalizeSkillCandidate, addSkillCandidate, readSkillReferenceSlug, collectSkillReferences, inferUsedSkillsFromPrompt, resolveForbiddenRuntimeSkillMarkers, detectForbiddenRuntimeSkillMarker, normalizeLedgerBillingType, resolveLedgerBiller, normalizeBilledCostCents, resolveLedgerScopeForRun } = heartbeatCore;
|
|
22
33
|
const { buildExplicitResumeSessionOverride, selectRunSessionLineage, normalizeUsageTotals, readRawUsageTotals, deriveNormalizedUsageDelta, formatCount, parseSessionCompactionPolicy, resolveRuntimeSessionParamsForWorkspace, parseIssueAssigneeAgentRuntimeOverrides, deriveTaskKey, shouldResetTaskSessionForWake, formatRuntimeWorkspaceWarningLog, describeSessionResetReason, deriveCommentId, enrichWakeContextSnapshot, mergeCoalescedContextSnapshot, issueCommentAuthorKind, issueCommentAuthorLabel, buildDeferredWakePayload, readDeferredWakeContext, readDeferredWakePayload, deriveDeferredWakeTaskKey, hydrateWakeContextSnapshot, firstNonEmptyLine, deriveRecoveryFailureKind, deriveRecoveryFailureSummary, mergeMissingRecoveryContextFields, hydrateRecoveryBaseContextSnapshot, buildRecoveryContextSnapshot, normalizePassiveFollowupContext, normalizeReviewCloseoutContext, passiveFollowupCooldownMs, issueHasReviewer, isAgentEligibleForTimerContinuation, hasCredibleTimerContinuation, buildPassiveFollowupContextSnapshot, runTaskKey, isSameTaskScope, isTrackedLocalChildProcessAdapter, isProcessAlive, waitForProcessExit, terminateOrphanedProcess, truncateDisplayId, normalizeAgentNameKey, defaultSessionCodec, getAgentRuntimeSessionCodec, normalizeSessionParams, resolveNextSessionState } = heartbeatSessions;
|
|
23
34
|
function buildPersistableHeartbeatContext(context) {
|
|
24
35
|
return sanitizeStartupContextContextForPersistence(context) ?? {};
|
|
@@ -123,6 +134,20 @@ export function createHeartbeatExecuteHandlers(context) {
|
|
|
123
134
|
}
|
|
124
135
|
const executionAbortController = runAbortControllers.get(run.id) ?? new AbortController();
|
|
125
136
|
runAbortControllers.set(run.id, executionAbortController);
|
|
137
|
+
let activeAttemptRef = null;
|
|
138
|
+
let networkSuspended = false;
|
|
139
|
+
const finishActiveAttempt = async (input) => {
|
|
140
|
+
const ref = activeAttemptRef;
|
|
141
|
+
activeAttemptRef = null;
|
|
142
|
+
if (!ref)
|
|
143
|
+
return;
|
|
144
|
+
try {
|
|
145
|
+
await finishHeartbeatRunAttempt(db, ref, input);
|
|
146
|
+
}
|
|
147
|
+
catch (error) {
|
|
148
|
+
logger.warn({ err: error, runId: runId, attemptIndex: ref.attemptIndex }, "failed to persist heartbeat attempt terminal state");
|
|
149
|
+
}
|
|
150
|
+
};
|
|
126
151
|
try {
|
|
127
152
|
if (run.status === "queued") {
|
|
128
153
|
const claimed = await claimQueuedRun(run);
|
|
@@ -178,6 +203,7 @@ export function createHeartbeatExecuteHandlers(context) {
|
|
|
178
203
|
let finalRunOutput = null;
|
|
179
204
|
let ownsTerminalState = false;
|
|
180
205
|
let shouldCompleteTerminalEffects = false;
|
|
206
|
+
let activeAttemptSpec = null;
|
|
181
207
|
const finalizeExecutionTranscript = () => {
|
|
182
208
|
stdoutTranscriptBuffer = appendTranscriptEntriesFromChunk({
|
|
183
209
|
buffer: stdoutTranscriptBuffer,
|
|
@@ -592,6 +618,27 @@ export function createHeartbeatExecuteHandlers(context) {
|
|
|
592
618
|
sessionDisplayId: previousSessionDisplayId,
|
|
593
619
|
taskKey,
|
|
594
620
|
};
|
|
621
|
+
const attemptStride = Math.max(1, buildModelAttemptSpecs(runtimeConfig, agent.agentRuntimeType).length);
|
|
622
|
+
const recoveryAttemptOrdinal = Math.max(0, Math.floor(Number(run.networkWaitAttemptCount) || 0));
|
|
623
|
+
const attemptResumeSource = recoveryAttemptOrdinal === 0
|
|
624
|
+
? "fresh"
|
|
625
|
+
: run.recoveryCheckpoint?.continuation === "resume_same_session"
|
|
626
|
+
? "same_session"
|
|
627
|
+
: "pristine_replay";
|
|
628
|
+
const resolveLedgerAttemptIndex = (attempt) => recoveryAttemptOrdinal * attemptStride + attempt.index;
|
|
629
|
+
const recoveryStartAttemptIndex = recoveryAttemptOrdinal > 0
|
|
630
|
+
&& typeof run.recoveryCheckpoint?.fallbackIndex === "number"
|
|
631
|
+
? Math.max(0, Math.floor(run.recoveryCheckpoint.fallbackIndex))
|
|
632
|
+
: 0;
|
|
633
|
+
const persistAttempt = async (label, operation) => {
|
|
634
|
+
try {
|
|
635
|
+
return await operation();
|
|
636
|
+
}
|
|
637
|
+
catch (error) {
|
|
638
|
+
logger.warn({ err: error, runId: run.id, label }, "failed to persist heartbeat attempt ledger state");
|
|
639
|
+
return null;
|
|
640
|
+
}
|
|
641
|
+
};
|
|
595
642
|
let handle = null;
|
|
596
643
|
let stdoutExcerpt = "";
|
|
597
644
|
let stderrExcerpt = "";
|
|
@@ -631,6 +678,7 @@ export function createHeartbeatExecuteHandlers(context) {
|
|
|
631
678
|
const startedAt = run.startedAt ?? new Date();
|
|
632
679
|
const runningWithSession = await persistRunningExecutionContext(run.id, context, {
|
|
633
680
|
startedAt,
|
|
681
|
+
runningSubstate: "executing",
|
|
634
682
|
sessionIdBefore: runtimeForAdapter.sessionDisplayId ?? runtimeForAdapter.sessionId,
|
|
635
683
|
sessionParamsBeforeJson: runtimeForAdapter.sessionParams,
|
|
636
684
|
sessionReuseScope,
|
|
@@ -730,6 +778,7 @@ export function createHeartbeatExecuteHandlers(context) {
|
|
|
730
778
|
orgId: run.orgId,
|
|
731
779
|
agentId: run.agentId,
|
|
732
780
|
runId,
|
|
781
|
+
append: Boolean(run.logRef),
|
|
733
782
|
});
|
|
734
783
|
await db
|
|
735
784
|
.update(heartbeatRuns)
|
|
@@ -946,11 +995,43 @@ export function createHeartbeatExecuteHandlers(context) {
|
|
|
946
995
|
requestApproval,
|
|
947
996
|
waitForApproval,
|
|
948
997
|
}, {
|
|
998
|
+
startAttemptIndex: recoveryStartAttemptIndex,
|
|
949
999
|
resolveAdapter: findServerAdapter,
|
|
950
1000
|
createAuthToken: (agentRuntimeType) => createLocalAgentJwt(agent.id, agent.orgId, agentRuntimeType, run.id) ?? undefined,
|
|
951
|
-
onAttemptStart: (
|
|
1001
|
+
onAttemptStart: async (attempt, attemptAdapter) => {
|
|
1002
|
+
activeAttemptSpec = {
|
|
1003
|
+
index: attempt.index,
|
|
1004
|
+
fallbackIndex: attempt.fallbackIndex,
|
|
1005
|
+
};
|
|
1006
|
+
activeAttemptRef = await persistAttempt("started", () => beginHeartbeatRunAttempt(db, {
|
|
1007
|
+
orgId: run.orgId,
|
|
1008
|
+
runId: run.id,
|
|
1009
|
+
agentId: run.agentId,
|
|
1010
|
+
attemptIndex: resolveLedgerAttemptIndex(attempt),
|
|
1011
|
+
fallbackIndex: attempt.fallbackIndex,
|
|
1012
|
+
runtimeType: attempt.agentRuntimeType ?? agent.agentRuntimeType,
|
|
1013
|
+
model: attempt.model,
|
|
1014
|
+
isFallback: attempt.isFallback,
|
|
1015
|
+
resumeSource: attemptResumeSource,
|
|
1016
|
+
}));
|
|
952
1017
|
stdoutTranscriptParser = attemptAdapter.parseStdoutLine ?? null;
|
|
953
1018
|
},
|
|
1019
|
+
onAttemptFailure: async (_attempt, failure) => {
|
|
1020
|
+
const failureRecord = failure && typeof failure === "object" ? failure : null;
|
|
1021
|
+
const failureMessage = failure instanceof Error
|
|
1022
|
+
? failure.message
|
|
1023
|
+
: readNonEmptyString(failureRecord?.errorMessage) ?? "Adapter fallback attempt failed";
|
|
1024
|
+
await finishActiveAttempt({
|
|
1025
|
+
status: "failed",
|
|
1026
|
+
errorCode: readNonEmptyString(failureRecord?.errorCode) ?? "adapter_failed",
|
|
1027
|
+
error: failureMessage,
|
|
1028
|
+
usageDeltaJson: failureRecord?.usage,
|
|
1029
|
+
costUsd: failureRecord?.costUsd,
|
|
1030
|
+
sessionDisplayId: readNonEmptyString(failureRecord?.sessionDisplayId)
|
|
1031
|
+
?? readNonEmptyString(failureRecord?.sessionId),
|
|
1032
|
+
sessionParamsJson: failureRecord?.sessionParams,
|
|
1033
|
+
});
|
|
1034
|
+
},
|
|
954
1035
|
});
|
|
955
1036
|
if (assignmentGuardrailCheckpoint) {
|
|
956
1037
|
adapterResult.errorMessage = "Assignment run stopped after reaching its tool failure budget";
|
|
@@ -997,6 +1078,123 @@ export function createHeartbeatExecuteHandlers(context) {
|
|
|
997
1078
|
}
|
|
998
1079
|
}
|
|
999
1080
|
}
|
|
1081
|
+
const networkSuspension = isAgentRuntimeNetworkSuspension(adapterResult.networkSuspension)
|
|
1082
|
+
? adapterResult.networkSuspension
|
|
1083
|
+
: isAgentRuntimeNetworkSuspension(adapterResult.suspension)
|
|
1084
|
+
? adapterResult.suspension
|
|
1085
|
+
: null;
|
|
1086
|
+
if (networkSuspension) {
|
|
1087
|
+
// A transport suspension is a non-terminal transition. Persist the
|
|
1088
|
+
// provider checkpoint before releasing the local execution lease so a
|
|
1089
|
+
// restart or another scheduler tick can safely claim this same Run.
|
|
1090
|
+
const now = new Date();
|
|
1091
|
+
const currentRunForWait = await getRun(run.id);
|
|
1092
|
+
const waitAttempt = (currentRunForWait?.networkWaitAttemptCount ?? 0) + 1;
|
|
1093
|
+
const backoff = networkWaitBackoffMs(waitAttempt);
|
|
1094
|
+
const jitteredBackoff = Math.max(1_000, Math.round(backoff * (0.9 + Math.random() * 0.2)));
|
|
1095
|
+
const nextRetryAt = new Date(now.getTime() + jitteredBackoff);
|
|
1096
|
+
const checkpoint = {
|
|
1097
|
+
kind: networkSuspension.kind,
|
|
1098
|
+
code: networkSuspension.code ?? "provider_transport_unavailable",
|
|
1099
|
+
transport: networkSuspension.transport,
|
|
1100
|
+
provider: networkSuspension.provider ?? adapterResult.provider ?? null,
|
|
1101
|
+
model: networkSuspension.model ?? adapterResult.model ?? null,
|
|
1102
|
+
submissionPhase: networkSuspension.submissionPhase,
|
|
1103
|
+
continuation: networkSuspension.continuation,
|
|
1104
|
+
sessionId: networkSuspension.sessionId ?? adapterResult.sessionDisplayId ?? adapterResult.sessionId ?? null,
|
|
1105
|
+
sessionParams: networkSuspension.sessionParams ?? adapterResult.sessionParams ?? null,
|
|
1106
|
+
progress: networkSuspension.progress ?? {
|
|
1107
|
+
modelOutputObserved: networkSuspension.modelOutputObserved,
|
|
1108
|
+
toolActivityObserved: networkSuspension.toolActivityObserved,
|
|
1109
|
+
},
|
|
1110
|
+
modelOutputObserved: networkSuspension.modelOutputObserved
|
|
1111
|
+
?? networkSuspension.progress?.modelOutputObserved
|
|
1112
|
+
?? false,
|
|
1113
|
+
toolActivityObserved: networkSuspension.toolActivityObserved
|
|
1114
|
+
?? networkSuspension.progress?.toolActivityObserved
|
|
1115
|
+
?? false,
|
|
1116
|
+
sideEffectRisk: networkSuspension.sideEffectRisk ?? null,
|
|
1117
|
+
attemptIndex: activeAttemptSpec?.index ?? 0,
|
|
1118
|
+
fallbackIndex: activeAttemptSpec?.fallbackIndex ?? null,
|
|
1119
|
+
message: networkSuspension.message,
|
|
1120
|
+
observedAt: now.toISOString(),
|
|
1121
|
+
};
|
|
1122
|
+
const resumedSessionId = readNonEmptyString(networkSuspension.sessionId)
|
|
1123
|
+
?? readNonEmptyString(adapterResult.sessionDisplayId)
|
|
1124
|
+
?? readNonEmptyString(adapterResult.sessionId)
|
|
1125
|
+
?? previousSessionDisplayId
|
|
1126
|
+
?? null;
|
|
1127
|
+
const resumedSessionParams = networkSuspension.sessionParams
|
|
1128
|
+
?? adapterResult.sessionParams
|
|
1129
|
+
?? runtimeForAdapter.sessionParams
|
|
1130
|
+
?? null;
|
|
1131
|
+
const waitingRun = await db
|
|
1132
|
+
.update(heartbeatRuns)
|
|
1133
|
+
.set({
|
|
1134
|
+
runningSubstate: "waiting_for_network",
|
|
1135
|
+
networkWaitStartedAt: currentRunForWait?.networkWaitStartedAt ?? now,
|
|
1136
|
+
networkWaitNextRetryAt: nextRetryAt,
|
|
1137
|
+
networkWaitAttemptCount: waitAttempt,
|
|
1138
|
+
recoveryCheckpoint: checkpoint,
|
|
1139
|
+
sessionIdBefore: resumedSessionId,
|
|
1140
|
+
sessionParamsBeforeJson: resumedSessionParams,
|
|
1141
|
+
sessionReuseScope: resumedSessionParams || resumedSessionId ? "explicit" : "none",
|
|
1142
|
+
processExitedAt: now,
|
|
1143
|
+
processPid: null,
|
|
1144
|
+
processStartedAt: null,
|
|
1145
|
+
executionOwnerToken: null,
|
|
1146
|
+
executionLeaseExpiresAt: null,
|
|
1147
|
+
updatedAt: now,
|
|
1148
|
+
})
|
|
1149
|
+
.where(and(eq(heartbeatRuns.id, run.id), eq(heartbeatRuns.status, "running"), ...(executionOwnerToken ? [eq(heartbeatRuns.executionOwnerToken, executionOwnerToken)] : [])))
|
|
1150
|
+
.returning()
|
|
1151
|
+
.then((rows) => rows[0] ?? null);
|
|
1152
|
+
if (!waitingRun)
|
|
1153
|
+
return;
|
|
1154
|
+
networkSuspended = true;
|
|
1155
|
+
const waitingAttemptRef = activeAttemptRef;
|
|
1156
|
+
activeAttemptRef = null;
|
|
1157
|
+
await persistAttempt("waiting_for_network", () => markHeartbeatRunAttemptWaiting(db, waitingAttemptRef, {
|
|
1158
|
+
submissionPhase: networkSuspension.submissionPhase,
|
|
1159
|
+
providerThreadId: networkSuspension.providerThreadId ?? adapterResult.providerThreadId,
|
|
1160
|
+
providerTurnId: networkSuspension.providerTurnId ?? adapterResult.providerTurnId,
|
|
1161
|
+
sessionDisplayId: resumedSessionId,
|
|
1162
|
+
sessionParamsJson: resumedSessionParams,
|
|
1163
|
+
checkpointJson: checkpoint,
|
|
1164
|
+
errorCode: networkSuspension.code ?? "provider_transport_unavailable",
|
|
1165
|
+
error: networkSuspension.message ?? null,
|
|
1166
|
+
suspendedAt: now,
|
|
1167
|
+
}));
|
|
1168
|
+
await appendRunEvent(waitingRun, {
|
|
1169
|
+
eventType: "network.waiting",
|
|
1170
|
+
stream: "system",
|
|
1171
|
+
level: "info",
|
|
1172
|
+
message: "run waiting for network",
|
|
1173
|
+
payload: {
|
|
1174
|
+
attempt: waitAttempt,
|
|
1175
|
+
nextRetryAt: nextRetryAt.toISOString(),
|
|
1176
|
+
backoffMs: jitteredBackoff,
|
|
1177
|
+
suspension: checkpoint,
|
|
1178
|
+
},
|
|
1179
|
+
});
|
|
1180
|
+
publishLiveEvent({
|
|
1181
|
+
orgId: waitingRun.orgId,
|
|
1182
|
+
type: "heartbeat.run.status",
|
|
1183
|
+
payload: {
|
|
1184
|
+
runId: waitingRun.id,
|
|
1185
|
+
agentId: waitingRun.agentId,
|
|
1186
|
+
status: waitingRun.status,
|
|
1187
|
+
executionPhase: "waiting_for_network",
|
|
1188
|
+
networkWaitAttemptCount: waitAttempt,
|
|
1189
|
+
networkWaitNextRetryAt: nextRetryAt.toISOString(),
|
|
1190
|
+
},
|
|
1191
|
+
});
|
|
1192
|
+
if (handle) {
|
|
1193
|
+
await runLogStore.finalize(handle).catch(() => undefined);
|
|
1194
|
+
handle = null;
|
|
1195
|
+
}
|
|
1196
|
+
return;
|
|
1197
|
+
}
|
|
1000
1198
|
const nextSessionState = resolveNextSessionState({
|
|
1001
1199
|
codec: sessionCodec,
|
|
1002
1200
|
adapterResult,
|
|
@@ -1163,6 +1361,19 @@ export function createHeartbeatExecuteHandlers(context) {
|
|
|
1163
1361
|
expectedExecutionOwnerToken: executionOwnerToken,
|
|
1164
1362
|
});
|
|
1165
1363
|
ownsTerminalState = Boolean(claimedTerminalRun);
|
|
1364
|
+
await finishActiveAttempt({
|
|
1365
|
+
status,
|
|
1366
|
+
submissionPhase: adapterResult.submissionPhase,
|
|
1367
|
+
providerThreadId: adapterResult.providerThreadId,
|
|
1368
|
+
providerTurnId: adapterResult.providerTurnId,
|
|
1369
|
+
sessionDisplayId: nextSessionState.displayId ?? nextSessionState.legacySessionId,
|
|
1370
|
+
sessionParamsJson: adapterResult.clearSession ? {} : nextSessionState.params,
|
|
1371
|
+
usageDeltaJson: usageJson ?? adapterResult.usage,
|
|
1372
|
+
costUsd: adapterResult.costUsd,
|
|
1373
|
+
errorCode: terminalEvidence.errorCode,
|
|
1374
|
+
error: terminalEvidence.error,
|
|
1375
|
+
finishedAt: terminalEvidence.finishedAt,
|
|
1376
|
+
});
|
|
1166
1377
|
if (!claimedTerminalRun) {
|
|
1167
1378
|
await reconcileRunEvidence(run.id, terminalEvidence);
|
|
1168
1379
|
await reconcileTerminalEffectsIntent(run.id, {
|
|
@@ -1361,6 +1572,14 @@ export function createHeartbeatExecuteHandlers(context) {
|
|
|
1361
1572
|
expectedExecutionOwnerToken: executionOwnerToken,
|
|
1362
1573
|
});
|
|
1363
1574
|
ownsTerminalState = Boolean(claimedFailedRun);
|
|
1575
|
+
await finishActiveAttempt({
|
|
1576
|
+
status: "failed",
|
|
1577
|
+
errorCode: failureEvidence.errorCode,
|
|
1578
|
+
error: failureEvidence.error,
|
|
1579
|
+
sessionDisplayId: previousSessionDisplayId,
|
|
1580
|
+
sessionParamsJson: previousSessionParams,
|
|
1581
|
+
finishedAt: failureEvidence.finishedAt,
|
|
1582
|
+
});
|
|
1364
1583
|
if (!claimedFailedRun)
|
|
1365
1584
|
await reconcileRunEvidence(run.id, failureEvidence);
|
|
1366
1585
|
const failedRun = claimedFailedRun ?? await getRun(run.id);
|
|
@@ -1421,6 +1640,12 @@ export function createHeartbeatExecuteHandlers(context) {
|
|
|
1421
1640
|
// The inner catch did not fire, so we must record the failure here.
|
|
1422
1641
|
const message = outerErr instanceof Error ? outerErr.message : "Unknown setup failure";
|
|
1423
1642
|
logger.error({ err: outerErr, runId }, "heartbeat execution setup failed");
|
|
1643
|
+
await finishActiveAttempt({
|
|
1644
|
+
status: "failed",
|
|
1645
|
+
errorCode: "adapter_failed",
|
|
1646
|
+
error: message,
|
|
1647
|
+
finishedAt: new Date(),
|
|
1648
|
+
});
|
|
1424
1649
|
const latestRun = await getRun(runId).catch(() => null);
|
|
1425
1650
|
const claimedFailedRun = latestRun?.status === "running"
|
|
1426
1651
|
? await transitionRunToTerminal(runId, "failed", {
|
|
@@ -1458,7 +1683,8 @@ export function createHeartbeatExecuteHandlers(context) {
|
|
|
1458
1683
|
await releaseRuntimeServicesForRun(run.id).catch(() => undefined);
|
|
1459
1684
|
runAbortControllers.delete(run.id);
|
|
1460
1685
|
activeRunExecutions.delete(run.id);
|
|
1461
|
-
|
|
1686
|
+
if (!networkSuspended)
|
|
1687
|
+
await startNextQueuedRunForAgent(run.agentId);
|
|
1462
1688
|
}
|
|
1463
1689
|
}
|
|
1464
1690
|
return { executeRun };
|