@rudderhq/server 0.7.11 → 0.7.12

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.
Files changed (255) hide show
  1. package/dist/bootstrap/register-api-routes.d.ts.map +1 -1
  2. package/dist/bootstrap/register-api-routes.js +1 -1
  3. package/dist/bootstrap/register-api-routes.js.map +1 -1
  4. package/dist/bootstrap/types.d.ts +7 -0
  5. package/dist/bootstrap/types.d.ts.map +1 -1
  6. package/dist/index.js +18 -3
  7. package/dist/index.js.map +1 -1
  8. package/dist/routes/agents.management-routes.d.ts.map +1 -1
  9. package/dist/routes/agents.management-routes.js +2 -0
  10. package/dist/routes/agents.management-routes.js.map +1 -1
  11. package/dist/routes/chats.d.ts +2 -1
  12. package/dist/routes/chats.d.ts.map +1 -1
  13. package/dist/routes/chats.js +334 -4
  14. package/dist/routes/chats.js.map +1 -1
  15. package/dist/routes/chats.stream-routes.d.ts.map +1 -1
  16. package/dist/routes/chats.stream-routes.js +55 -3
  17. package/dist/routes/chats.stream-routes.js.map +1 -1
  18. package/dist/routes/goals.d.ts.map +1 -1
  19. package/dist/routes/goals.js +10 -3
  20. package/dist/routes/goals.js.map +1 -1
  21. package/dist/routes/orgs.d.ts.map +1 -1
  22. package/dist/routes/orgs.js +22 -1
  23. package/dist/routes/orgs.js.map +1 -1
  24. package/dist/routes/run-intelligence.d.ts.map +1 -1
  25. package/dist/routes/run-intelligence.js +9 -0
  26. package/dist/routes/run-intelligence.js.map +1 -1
  27. package/dist/services/agent-instructions.d.ts +1 -0
  28. package/dist/services/agent-instructions.d.ts.map +1 -1
  29. package/dist/services/agent-instructions.js +124 -6
  30. package/dist/services/agent-instructions.js.map +1 -1
  31. package/dist/services/agent-run-context.d.ts.map +1 -1
  32. package/dist/services/agent-run-context.js +15 -0
  33. package/dist/services/agent-run-context.js.map +1 -1
  34. package/dist/services/agent-startup-context.d.ts +4 -0
  35. package/dist/services/agent-startup-context.d.ts.map +1 -1
  36. package/dist/services/agent-startup-context.js +57 -13
  37. package/dist/services/agent-startup-context.js.map +1 -1
  38. package/dist/services/agents.d.ts +218 -0
  39. package/dist/services/agents.d.ts.map +1 -1
  40. package/dist/services/automations.d.ts.map +1 -1
  41. package/dist/services/automations.js +3 -0
  42. package/dist/services/automations.js.map +1 -1
  43. package/dist/services/chat-agent-runs.d.ts +47 -1
  44. package/dist/services/chat-agent-runs.d.ts.map +1 -1
  45. package/dist/services/chat-agent-runs.js +91 -1
  46. package/dist/services/chat-agent-runs.js.map +1 -1
  47. package/dist/services/chat-assistant.d.ts.map +1 -1
  48. package/dist/services/chat-assistant.helpers.d.ts +12 -3
  49. package/dist/services/chat-assistant.helpers.d.ts.map +1 -1
  50. package/dist/services/chat-assistant.helpers.js +3 -0
  51. package/dist/services/chat-assistant.helpers.js.map +1 -1
  52. package/dist/services/chat-assistant.js +54 -18
  53. package/dist/services/chat-assistant.js.map +1 -1
  54. package/dist/services/chat-generation-protocol.d.ts +119 -0
  55. package/dist/services/chat-generation-protocol.d.ts.map +1 -1
  56. package/dist/services/chat-generation-protocol.js +65 -0
  57. package/dist/services/chat-generation-protocol.js.map +1 -1
  58. package/dist/services/chats.constants.d.ts +1 -1
  59. package/dist/services/chats.constants.d.ts.map +1 -1
  60. package/dist/services/chats.constants.js +1 -0
  61. package/dist/services/chats.constants.js.map +1 -1
  62. package/dist/services/chats.d.ts +128 -0
  63. package/dist/services/chats.d.ts.map +1 -1
  64. package/dist/services/chats.js +10 -0
  65. package/dist/services/chats.js.map +1 -1
  66. package/dist/services/goals.d.ts +36 -0
  67. package/dist/services/goals.d.ts.map +1 -1
  68. package/dist/services/goals.js +21 -1
  69. package/dist/services/goals.js.map +1 -1
  70. package/dist/services/heartbeat-run-reference.d.ts.map +1 -1
  71. package/dist/services/heartbeat-run-reference.js +11 -5
  72. package/dist/services/heartbeat-run-reference.js.map +1 -1
  73. package/dist/services/index.d.ts +2 -1
  74. package/dist/services/index.d.ts.map +1 -1
  75. package/dist/services/index.js +2 -1
  76. package/dist/services/index.js.map +1 -1
  77. package/dist/services/integrations/feishu/runtime.d.ts +8 -0
  78. package/dist/services/integrations/feishu/runtime.d.ts.map +1 -1
  79. package/dist/services/integrations/feishu/runtime.js +124 -1
  80. package/dist/services/integrations/feishu/runtime.js.map +1 -1
  81. package/dist/services/issues.d.ts.map +1 -1
  82. package/dist/services/issues.helpers.d.ts +8 -0
  83. package/dist/services/issues.helpers.d.ts.map +1 -1
  84. package/dist/services/issues.helpers.js +17 -1
  85. package/dist/services/issues.helpers.js.map +1 -1
  86. package/dist/services/issues.js +108 -15
  87. package/dist/services/issues.js.map +1 -1
  88. package/dist/services/messenger.d.ts.map +1 -1
  89. package/dist/services/messenger.js +12 -3
  90. package/dist/services/messenger.js.map +1 -1
  91. package/dist/services/organization-members.d.ts +27 -0
  92. package/dist/services/organization-members.d.ts.map +1 -0
  93. package/dist/services/organization-members.js +169 -0
  94. package/dist/services/organization-members.js.map +1 -0
  95. package/dist/services/organization-workspace-browser.d.ts.map +1 -1
  96. package/dist/services/organization-workspace-browser.js +44 -10
  97. package/dist/services/organization-workspace-browser.js.map +1 -1
  98. package/dist/services/product-intelligence.d.ts.map +1 -1
  99. package/dist/services/product-intelligence.js +4 -0
  100. package/dist/services/product-intelligence.js.map +1 -1
  101. package/dist/services/projects.d.ts +1 -4
  102. package/dist/services/projects.d.ts.map +1 -1
  103. package/dist/services/projects.js +27 -2
  104. package/dist/services/projects.js.map +1 -1
  105. package/dist/services/rudder-plugin-catalog.d.ts +1 -1
  106. package/dist/services/rudder-plugin-catalog.d.ts.map +1 -1
  107. package/dist/services/rudder-plugin-catalog.js +281 -15
  108. package/dist/services/rudder-plugin-catalog.js.map +1 -1
  109. package/dist/services/rudder-plugin-catalog.test.js +55 -0
  110. package/dist/services/rudder-plugin-catalog.test.js.map +1 -1
  111. package/dist/services/run-intelligence.d.ts.map +1 -1
  112. package/dist/services/run-intelligence.js +2 -1
  113. package/dist/services/run-intelligence.js.map +1 -1
  114. package/dist/services/run-log-store.d.ts +3 -0
  115. package/dist/services/run-log-store.d.ts.map +1 -1
  116. package/dist/services/run-log-store.js +124 -18
  117. package/dist/services/run-log-store.js.map +1 -1
  118. package/dist/services/runtime-kernel/assignment-run-guardrail.d.ts +2 -0
  119. package/dist/services/runtime-kernel/assignment-run-guardrail.d.ts.map +1 -1
  120. package/dist/services/runtime-kernel/assignment-run-guardrail.js +5 -3
  121. package/dist/services/runtime-kernel/assignment-run-guardrail.js.map +1 -1
  122. package/dist/services/runtime-kernel/assignment-run-guardrail.test.js +20 -0
  123. package/dist/services/runtime-kernel/assignment-run-guardrail.test.js.map +1 -1
  124. package/dist/services/runtime-kernel/heartbeat-attempt-ledger.d.ts +124 -0
  125. package/dist/services/runtime-kernel/heartbeat-attempt-ledger.d.ts.map +1 -0
  126. package/dist/services/runtime-kernel/heartbeat-attempt-ledger.js +108 -0
  127. package/dist/services/runtime-kernel/heartbeat-attempt-ledger.js.map +1 -0
  128. package/dist/services/runtime-kernel/heartbeat.core.d.ts +111 -0
  129. package/dist/services/runtime-kernel/heartbeat.core.d.ts.map +1 -1
  130. package/dist/services/runtime-kernel/heartbeat.core.js +13 -0
  131. package/dist/services/runtime-kernel/heartbeat.core.js.map +1 -1
  132. package/dist/services/runtime-kernel/heartbeat.d.ts +34 -0
  133. package/dist/services/runtime-kernel/heartbeat.d.ts.map +1 -1
  134. package/dist/services/runtime-kernel/heartbeat.execute.d.ts.map +1 -1
  135. package/dist/services/runtime-kernel/heartbeat.execute.js +229 -3
  136. package/dist/services/runtime-kernel/heartbeat.execute.js.map +1 -1
  137. package/dist/services/runtime-kernel/heartbeat.js +161 -6
  138. package/dist/services/runtime-kernel/heartbeat.js.map +1 -1
  139. package/dist/services/runtime-kernel/heartbeat.sessions.d.ts.map +1 -1
  140. package/dist/services/runtime-kernel/heartbeat.sessions.js +15 -3
  141. package/dist/services/runtime-kernel/heartbeat.sessions.js.map +1 -1
  142. package/dist/services/runtime-kernel/heartbeat.terminal.d.ts +48 -0
  143. package/dist/services/runtime-kernel/heartbeat.terminal.d.ts.map +1 -1
  144. package/dist/services/runtime-kernel/model-fallback.d.ts +4 -0
  145. package/dist/services/runtime-kernel/model-fallback.d.ts.map +1 -1
  146. package/dist/services/runtime-kernel/model-fallback.js +25 -4
  147. package/dist/services/runtime-kernel/model-fallback.js.map +1 -1
  148. package/dist/services/workspace-backup-v2.d.ts +20 -0
  149. package/dist/services/workspace-backup-v2.d.ts.map +1 -1
  150. package/dist/services/workspace-backup-v2.js +155 -23
  151. package/dist/services/workspace-backup-v2.js.map +1 -1
  152. package/dist/services/workspace-backup-v2.test.js +34 -2
  153. package/dist/services/workspace-backup-v2.test.js.map +1 -1
  154. package/dist/services/workspace-backups.d.ts +0 -1
  155. package/dist/services/workspace-backups.d.ts.map +1 -1
  156. package/dist/services/workspace-backups.js +18 -19
  157. package/dist/services/workspace-backups.js.map +1 -1
  158. package/dist/services/workspace-manifest-native.d.ts +10 -0
  159. package/dist/services/workspace-manifest-native.d.ts.map +1 -0
  160. package/dist/services/workspace-manifest-native.js +219 -0
  161. package/dist/services/workspace-manifest-native.js.map +1 -0
  162. package/dist/services/workspace-restore-reconciliation.d.ts +11 -0
  163. package/dist/services/workspace-restore-reconciliation.d.ts.map +1 -0
  164. package/dist/services/workspace-restore-reconciliation.js +165 -0
  165. package/dist/services/workspace-restore-reconciliation.js.map +1 -0
  166. package/package.json +14 -14
  167. package/resources/bundled-skills/rudder-docs/references/api-reference.md +8 -0
  168. package/resources/bundled-skills/rudder-docs/references/cli-reference.md +5 -2
  169. package/skills/rudder-docs/references/api-reference.md +8 -0
  170. package/skills/rudder-docs/references/cli-reference.md +5 -2
  171. package/ui-dist/assets/LibraryLiveSurface-tCWxJKp5.js +1 -0
  172. package/ui-dist/assets/{abnfDiagram-VRR7QNED-BggxrEZR.js → abnfDiagram-VRR7QNED-BcCms-hs.js} +1 -1
  173. package/ui-dist/assets/{addon-fit-Cc1gOtSX.js → addon-fit-CH3xNHN4.js} +1 -1
  174. package/ui-dist/assets/{arc-0kNrc9xt.js → arc-h5W-EkRK.js} +1 -1
  175. package/ui-dist/assets/{architectureDiagram-ZJ3FMSHR-BOCa-5ab.js → architectureDiagram-ZJ3FMSHR-Bdehm1PB.js} +1 -1
  176. package/ui-dist/assets/{blockDiagram-677ZJIJ3-CQU5jcsO.js → blockDiagram-677ZJIJ3-BJ3W91Su.js} +1 -1
  177. package/ui-dist/assets/{c4Diagram-LMCZKHZV-ChgWIw5O.js → c4Diagram-LMCZKHZV-Bnft_fRy.js} +1 -1
  178. package/ui-dist/assets/channel-G6qIOCiV.js +1 -0
  179. package/ui-dist/assets/{chunk-2Q5K7J3B-B4yrwesI.js → chunk-2Q5K7J3B-w1SF0tSk.js} +1 -1
  180. package/ui-dist/assets/{chunk-32BRIVSS-mhAeSMlR.js → chunk-32BRIVSS-C1UzXTFZ.js} +1 -1
  181. package/ui-dist/assets/{chunk-5VM5RSS4-BmS_u59G.js → chunk-5VM5RSS4-COVI3rNd.js} +1 -1
  182. package/ui-dist/assets/{chunk-EX3LRPZG-DXoTKkLG.js → chunk-EX3LRPZG-DxQOLy7z.js} +1 -1
  183. package/ui-dist/assets/{chunk-JWPE2WC7-Bj9myT03.js → chunk-JWPE2WC7-KTwmElcL.js} +1 -1
  184. package/ui-dist/assets/{chunk-MOJQB5TN-OAoJna8Y.js → chunk-MOJQB5TN-BynL4lzA.js} +1 -1
  185. package/ui-dist/assets/{chunk-RYQCIY6F-AGLA7TJn.js → chunk-RYQCIY6F-CJksBfuJ.js} +1 -1
  186. package/ui-dist/assets/{chunk-V7JOEXUC-YGM2tDK2.js → chunk-V7JOEXUC-C_zED5WJ.js} +1 -1
  187. package/ui-dist/assets/{chunk-VR4S4FIN-DqaZn9Ty.js → chunk-VR4S4FIN-BHDtMeiT.js} +1 -1
  188. package/ui-dist/assets/{chunk-XXDRQBXY-Cpqn_8Bl.js → chunk-XXDRQBXY-C0VvJgte.js} +1 -1
  189. package/ui-dist/assets/classDiagram-OUVF2IWQ-D15_PFCL.js +1 -0
  190. package/ui-dist/assets/classDiagram-v2-EOCWNBFH-D15_PFCL.js +1 -0
  191. package/ui-dist/assets/{cose-bilkent-JH36ORCC-BVe-X26w.js → cose-bilkent-JH36ORCC-DsTTzpP7.js} +1 -1
  192. package/ui-dist/assets/{cynefin-VYW2F7L2-DlDrrBWp.js → cynefin-VYW2F7L2-BfULw90s.js} +1 -1
  193. package/ui-dist/assets/{cynefinDiagram-TSTJHNR4-BSHvFeGh.js → cynefinDiagram-TSTJHNR4-BukSzKVC.js} +1 -1
  194. package/ui-dist/assets/{dagre-VKFMJZFB-tUm70k9h.js → dagre-VKFMJZFB-BbZY_Ipf.js} +1 -1
  195. package/ui-dist/assets/{diagram-FQU43EPY-C5kjITq7.js → diagram-FQU43EPY-BTYIYn2p.js} +1 -1
  196. package/ui-dist/assets/{diagram-G47NLZAW-BrbHgt8r.js → diagram-G47NLZAW-CikY_FKi.js} +1 -1
  197. package/ui-dist/assets/{diagram-NH7WQ7WH-DT7PdghT.js → diagram-NH7WQ7WH-BfZ7AlT8.js} +1 -1
  198. package/ui-dist/assets/{diagram-OA4YK3LP-wOjhRHRo.js → diagram-OA4YK3LP-f5AikxJj.js} +1 -1
  199. package/ui-dist/assets/{diagram-WEI45ONY-Dz9vtaDT.js → diagram-WEI45ONY-BCbG5yas.js} +1 -1
  200. package/ui-dist/assets/{ebnfDiagram-CCIWWBDH-BT5TzIA6.js → ebnfDiagram-CCIWWBDH-DT-3mJLY.js} +1 -1
  201. package/ui-dist/assets/{erDiagram-Q63AITRT-DLCpoOEP.js → erDiagram-Q63AITRT-BsfOhDfe.js} +1 -1
  202. package/ui-dist/assets/{flowDiagram-23GEKE2U-DfF2COjh.js → flowDiagram-23GEKE2U-BfaeQCsg.js} +1 -1
  203. package/ui-dist/assets/{ganttDiagram-NO4QXBWP-1d0KDwQs.js → ganttDiagram-NO4QXBWP-CgPQruVz.js} +1 -1
  204. package/ui-dist/assets/{gitGraphDiagram-IHSO6WYX-COLjS1ZR.js → gitGraphDiagram-IHSO6WYX-CNrBFzjY.js} +1 -1
  205. package/ui-dist/assets/{graph-B7fcgpw_.js → graph-QqDTzUUJ.js} +1 -1
  206. package/ui-dist/assets/{index-CZYXpHv4.js → index-2ZQZC89T.js} +1 -1
  207. package/ui-dist/assets/{index-COLwjKBR.js → index-2cYcOpZB.js} +1 -1
  208. package/ui-dist/assets/{index-CMNULCMJ.js → index-BAt16m_U.js} +1 -1
  209. package/ui-dist/assets/{index-BczgTMAn.js → index-BY8xCKIE.js} +1 -1
  210. package/ui-dist/assets/{index-CbqgXGcs.js → index-Befy20DN.js} +1 -1
  211. package/ui-dist/assets/{index-CgkYyYx9.js → index-BfAP3xNl.js} +1 -1
  212. package/ui-dist/assets/{index-DTc5LpTU.js → index-BogOyxlk.js} +1 -1
  213. package/ui-dist/assets/{index-DttnaNlV.js → index-BuIyK71w.js} +559 -559
  214. package/ui-dist/assets/{index-CH8I9acP.js → index-CQ92CxVC.js} +1 -1
  215. package/ui-dist/assets/{index-Denv6wuU.js → index-CQFwlD-o.js} +1 -1
  216. package/ui-dist/assets/{index-B6zSdXAR.js → index-Cu4qo_D7.js} +1 -1
  217. package/ui-dist/assets/index-DRuC5g8V.css +32 -0
  218. package/ui-dist/assets/{index-vtghjwab.js → index-DZ4gAeDM.js} +1 -1
  219. package/ui-dist/assets/{index-CTIfCQqR.js → index-Dc_DUpPj.js} +1 -1
  220. package/ui-dist/assets/{index-CXg1YCeI.js → index-Dqv46mWS.js} +1 -1
  221. package/ui-dist/assets/{index-D27Bbc-x.js → index-sFJMMyA3.js} +1 -1
  222. package/ui-dist/assets/{infoDiagram-FWYZ7A6U-Bg4YQUu2.js → infoDiagram-FWYZ7A6U-BJHuaNA9.js} +1 -1
  223. package/ui-dist/assets/{ishikawaDiagram-FXEZZL3T-BtgUVI_I.js → ishikawaDiagram-FXEZZL3T-CmsA1Knp.js} +1 -1
  224. package/ui-dist/assets/{journeyDiagram-5HDEW3XC-BGHGjvN4.js → journeyDiagram-5HDEW3XC-iV_Nt9d4.js} +1 -1
  225. package/ui-dist/assets/{kanban-definition-HUTT4EX6-DekQSNo8.js → kanban-definition-HUTT4EX6-D45s70Ny.js} +1 -1
  226. package/ui-dist/assets/{layout-Bsw9hK6u.js → layout-DDC-iOzY.js} +1 -1
  227. package/ui-dist/assets/{linear-D8D1R-4C.js → linear-DCTJ7Pq3.js} +1 -1
  228. package/ui-dist/assets/{map-BUIcuf4c.js → map-RGy5k616.js} +1 -1
  229. package/ui-dist/assets/{mermaid.core-CYZMLemV.js → mermaid.core-6MH04cvi.js} +4 -4
  230. package/ui-dist/assets/{mindmap-definition-LN4V7U3C-mjS9avIS.js → mindmap-definition-LN4V7U3C-CA2LFmda.js} +1 -1
  231. package/ui-dist/assets/{pegDiagram-2B236MQR-Buziry9m.js → pegDiagram-2B236MQR-DDsUr2du.js} +1 -1
  232. package/ui-dist/assets/{pieDiagram-ENE6RG2P-B_9BmFEg.js → pieDiagram-ENE6RG2P-D7jEL8xK.js} +1 -1
  233. package/ui-dist/assets/{quadrantDiagram-ABIIQ3AL-BxFdUA8s.js → quadrantDiagram-ABIIQ3AL-BsJxgVLb.js} +1 -1
  234. package/ui-dist/assets/{railroadDiagram-RFXS5EU6-pJh_afC-.js → railroadDiagram-RFXS5EU6-CBI457f6.js} +1 -1
  235. package/ui-dist/assets/{requirementDiagram-TGXJPOKE-BGgk3AxL.js → requirementDiagram-TGXJPOKE-_GAc0NOO.js} +1 -1
  236. package/ui-dist/assets/{sankeyDiagram-HTMAVEWB-DdPKE4bs.js → sankeyDiagram-HTMAVEWB-DNIaj5hu.js} +1 -1
  237. package/ui-dist/assets/{sequenceDiagram-DBY2YBRQ-xlik6FjZ.js → sequenceDiagram-DBY2YBRQ-BHDZs2dc.js} +1 -1
  238. package/ui-dist/assets/{sizeCapture-X5ZJPWSS-D_zKAjvf.js → sizeCapture-X5ZJPWSS-DwKT6aTP.js} +1 -1
  239. package/ui-dist/assets/{stateDiagram-2N3HPSRC-BGQP8giG.js → stateDiagram-2N3HPSRC-D2hDsltG.js} +1 -1
  240. package/ui-dist/assets/stateDiagram-v2-6OUMAXLB-CMTeJdkk.js +1 -0
  241. package/ui-dist/assets/{swimlanes-5IMT3BWC-ZhE8oAxR.js → swimlanes-5IMT3BWC-BV8xA0iq.js} +2 -2
  242. package/ui-dist/assets/swimlanesDiagram-G3AALYLV-ChF8QLeM.js +8 -0
  243. package/ui-dist/assets/{timeline-definition-FHXFAJF6-CUqfijnL.js → timeline-definition-FHXFAJF6-BPJMubhV.js} +1 -1
  244. package/ui-dist/assets/{vennDiagram-L72KCM5P-B_rqTUA0.js → vennDiagram-L72KCM5P-CY76J0Px.js} +1 -1
  245. package/ui-dist/assets/{wardleyDiagram-EHGQE667-BTvjybDi.js → wardleyDiagram-EHGQE667-pmNWLdE_.js} +1 -1
  246. package/ui-dist/assets/{xterm-CRpDYL2s.js → xterm-UByodpzD.js} +1 -1
  247. package/ui-dist/assets/{xychartDiagram-FW5EYKEG-ZBbwueZ5.js → xychartDiagram-FW5EYKEG-BWZC7gWV.js} +1 -1
  248. package/ui-dist/index.html +2 -2
  249. package/ui-dist/assets/LibraryLiveSurface-De1p59PK.js +0 -1
  250. package/ui-dist/assets/channel-eAoWqZqJ.js +0 -1
  251. package/ui-dist/assets/classDiagram-OUVF2IWQ-c94PI6yY.js +0 -1
  252. package/ui-dist/assets/classDiagram-v2-EOCWNBFH-c94PI6yY.js +0 -1
  253. package/ui-dist/assets/index-RSbihTRP.css +0 -32
  254. package/ui-dist/assets/stateDiagram-v2-6OUMAXLB-BMEtuB93.js +0 -1
  255. package/ui-dist/assets/swimlanesDiagram-G3AALYLV-Bdh18WfM.js +0 -8
@@ -1,7 +1,7 @@
1
1
  import { hasSessionCompactionThresholds } from "@rudderhq/agent-runtime-utils";
2
2
  import { agentRuntimeState, agents, agentTaskSessions, agentWakeupRequests, goalResultProposals, goals, heartbeatRunEvents, heartbeatRuns, issues, organizations } from "@rudderhq/db";
3
3
  import { summarizeTokenUsage, toHeartbeatRun } from "@rudderhq/shared";
4
- import { and, asc, desc, eq, gt, gte, inArray, lte, ne, or, sql } from "drizzle-orm";
4
+ import { and, asc, desc, eq, gt, gte, inArray, isNull, lte, ne, or, sql } from "drizzle-orm";
5
5
  import { randomUUID } from "node:crypto";
6
6
  import { runningProcesses } from "../../agent-runtimes/index.js";
7
7
  import { killChildProcessTree, parseObject } from "../../agent-runtimes/utils.js";
@@ -24,10 +24,11 @@ import { recordProductAnalyticsEvent } from "../product-analytics.js";
24
24
  import { appendHeartbeatRunEvent } from "../run-events.js";
25
25
  import { getRunLogStore } from "../run-log-store.js";
26
26
  import { workspaceOperationService } from "../workspace-operations.js";
27
+ import { finishLatestHeartbeatRunAttempt } from "./heartbeat-attempt-ledger.js";
27
28
  export { prioritizeProjectWorkspaceCandidatesForRun } from "../agent-run-context.js";
28
29
  import * as heartbeatCore from "./heartbeat.core.js";
29
30
  import * as heartbeatSessions from "./heartbeat.sessions.js";
30
- 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, isIssueCommentMentionWake, buildHeartbeatAdapterInvokePayload, 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, normalizeLedgerBillingType, resolveLedgerBiller, normalizeBilledCostCents, resolveLedgerScopeForRun } = heartbeatCore;
31
+ 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, NETWORK_WAIT_MAX_ATTEMPTS, NETWORK_WAIT_EXHAUSTED_ERROR_CODE, NETWORK_WAIT_EXHAUSTED_ERROR, SESSIONED_LOCAL_ADAPTERS, heartbeatRunListColumns, appendExcerpt, appendTranscriptEntriesFromChunk, normalizeMaxConcurrentRuns, withAgentStartLock, readNonEmptyString, isIssueCommentMentionWake, buildHeartbeatAdapterInvokePayload, 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, normalizeLedgerBillingType, resolveLedgerBiller, normalizeBilledCostCents, resolveLedgerScopeForRun } = heartbeatCore;
31
32
  const { buildExplicitResumeSessionOverride, 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;
32
33
  import { createHeartbeatExecuteHandlers } from "./heartbeat.execute.js";
33
34
  import { createHeartbeatMiscHandlers } from "./heartbeat.misc.js";
@@ -546,6 +547,19 @@ export function heartbeatService(db, testHooks) {
546
547
  });
547
548
  if (updated) {
548
549
  publishRunStatus(updated);
550
+ await finishLatestHeartbeatRunAttempt(db, updated.id, {
551
+ status,
552
+ usageDeltaJson: updated.usageJson,
553
+ costUsd: updated.usageJson?.costUsd,
554
+ sessionDisplayId: updated.sessionIdAfter,
555
+ sessionParamsJson: updated.sessionParamsAfterJson,
556
+ errorCode: updated.errorCode,
557
+ error: updated.error,
558
+ finishedAt: updated.finishedAt ?? new Date(),
559
+ }).catch((error) => {
560
+ logger.warn({ err: error, runId: updated.id }, "failed to persist heartbeat attempt terminal state");
561
+ return null;
562
+ });
549
563
  const context = parseObject(updated.contextSnapshot);
550
564
  const requestId = agentIssueCreationSettlement?.requestId
551
565
  ?? getAgentIssueCreationRequestIdFromRunContext(context);
@@ -1002,6 +1016,7 @@ export function heartbeatService(db, testHooks) {
1002
1016
  .update(heartbeatRuns)
1003
1017
  .set({
1004
1018
  status: "running",
1019
+ runningSubstate: "executing",
1005
1020
  startedAt: currentRun.startedAt ?? claimedAt,
1006
1021
  sessionIdBefore: sessionSelection.sessionDisplayId ?? readNonEmptyString(sessionSelection.sessionParams?.sessionId),
1007
1022
  sessionParamsBeforeJson: sessionSelection.sessionParams,
@@ -1130,7 +1145,7 @@ export function heartbeatService(db, testHooks) {
1130
1145
  })
1131
1146
  .from(heartbeatRuns)
1132
1147
  .innerJoin(agents, eq(heartbeatRuns.agentId, agents.id))
1133
- .where(or(eq(heartbeatRuns.status, "running"), eq(heartbeatRuns.terminalEffectsPending, true)));
1148
+ .where(or(and(eq(heartbeatRuns.status, "running"), or(isNull(heartbeatRuns.runningSubstate), ne(heartbeatRuns.runningSubstate, "waiting_for_network"))), eq(heartbeatRuns.terminalEffectsPending, true)));
1134
1149
  for (const { run, agentRuntimeType } of activeRuns) {
1135
1150
  if (run.terminalEffectsPending) {
1136
1151
  if (!run.processExitedAt) {
@@ -1276,7 +1291,7 @@ export function heartbeatService(db, testHooks) {
1276
1291
  .from(heartbeatRuns)
1277
1292
  .innerJoin(agents, eq(heartbeatRuns.agentId, agents.id))
1278
1293
  .leftJoin(heartbeatRunEvents, eq(heartbeatRunEvents.runId, heartbeatRuns.id))
1279
- .where(eq(heartbeatRuns.status, "running"))
1294
+ .where(and(eq(heartbeatRuns.status, "running"), or(isNull(heartbeatRuns.runningSubstate), ne(heartbeatRuns.runningSubstate, "waiting_for_network"))))
1280
1295
  .groupBy(heartbeatRuns.id, agents.agentRuntimeType);
1281
1296
  const timedOut = [];
1282
1297
  for (const { run, agentRuntimeType, lastEventAt, eventCount } of activeRuns) {
@@ -1362,7 +1377,7 @@ export function heartbeatService(db, testHooks) {
1362
1377
  })
1363
1378
  .from(heartbeatRuns)
1364
1379
  .innerJoin(agents, eq(heartbeatRuns.agentId, agents.id))
1365
- .where(eq(heartbeatRuns.status, "running"));
1380
+ .where(and(eq(heartbeatRuns.status, "running"), or(isNull(heartbeatRuns.runningSubstate), ne(heartbeatRuns.runningSubstate, "waiting_for_network"))));
1366
1381
  const timedOut = [];
1367
1382
  for (const { run, agentRuntimeType } of activeRuns) {
1368
1383
  if (opts?.recoveryCutoff && new Date(run.createdAt).getTime() >= opts.recoveryCutoff.getTime())
@@ -1372,7 +1387,7 @@ export function heartbeatService(db, testHooks) {
1372
1387
  const startedAt = run.startedAt ? new Date(run.startedAt).getTime() : null;
1373
1388
  if (!startedAt || !Number.isFinite(startedAt))
1374
1389
  continue;
1375
- const runtimeMs = now.getTime() - startedAt;
1390
+ const runtimeMs = Math.max(0, now.getTime() - startedAt - (run.networkWaitDurationMs ?? 0));
1376
1391
  if (runtimeMs < maxRuntimeMs)
1377
1392
  continue;
1378
1393
  const message = `Run exceeded maximum duration of ${formatDurationMs(maxRuntimeMs)}`;
@@ -1797,6 +1812,145 @@ export function heartbeatService(db, testHooks) {
1797
1812
  const { releaseIssueExecutionAndPromote } = releaseHandlers;
1798
1813
  const { executeRun } = executeHandlers;
1799
1814
  const { resumeDeferredWakeupsForAgent, listProjectScopedRunIds, listProjectScopedWakeupIds, cancelPendingWakeupsForBudgetScope, cancelRunInternal, cancelActiveForAgentInternal, cancelBudgetScopeWork, retryRunInternal, buildSkillAnalytics } = miscHandlers;
1815
+ async function recoverNetworkWaitingRunsLocked(opts) {
1816
+ const now = opts?.now ?? new Date();
1817
+ const candidates = await db
1818
+ .select()
1819
+ .from(heartbeatRuns)
1820
+ .where(and(eq(heartbeatRuns.status, "running"), eq(heartbeatRuns.runningSubstate, "waiting_for_network"), or(isNull(heartbeatRuns.networkWaitNextRetryAt), lte(heartbeatRuns.networkWaitNextRetryAt, now))))
1821
+ .orderBy(asc(heartbeatRuns.networkWaitNextRetryAt), asc(heartbeatRuns.updatedAt))
1822
+ .limit(100);
1823
+ const resumed = [];
1824
+ for (const candidate of candidates) {
1825
+ if (activeRunExecutions.has(candidate.id))
1826
+ continue;
1827
+ const agent = await getAgent(candidate.agentId);
1828
+ if (!agent || ["paused", "terminated", "pending_approval"].includes(agent.status))
1829
+ continue;
1830
+ const checkpoint = candidate.recoveryCheckpoint ?? {};
1831
+ const continuation = checkpoint.continuation;
1832
+ const submissionPhase = checkpoint.submissionPhase;
1833
+ const pristineReplayAllowed = continuation === "fresh_if_pristine"
1834
+ && submissionPhase === "pre_submission"
1835
+ && checkpoint.modelOutputObserved !== true
1836
+ && checkpoint.toolActivityObserved !== true
1837
+ && checkpoint.sideEffectRisk === "none";
1838
+ const sameSessionAllowed = continuation === "resume_same_session"
1839
+ && (typeof checkpoint.sessionId === "string"
1840
+ || Boolean(candidate.sessionIdBefore)
1841
+ || Boolean(candidate.sessionParamsBeforeJson));
1842
+ if (!pristineReplayAllowed && !sameSessionAllowed) {
1843
+ const unsafe = await transitionRunToTerminal(candidate.id, "failed", {
1844
+ finishedAt: now,
1845
+ error: "Network recovery cannot safely resume this provider attempt",
1846
+ errorCode: "network_resume_unsafe",
1847
+ }, {
1848
+ expectedStatuses: ["running"],
1849
+ processExitedAt: now,
1850
+ });
1851
+ if (unsafe) {
1852
+ await setWakeupStatus(candidate.wakeupRequestId, "failed", {
1853
+ finishedAt: now,
1854
+ error: "Network recovery cannot safely resume this provider attempt",
1855
+ });
1856
+ await appendRunEvent(unsafe, {
1857
+ eventType: "network.resume_unsafe",
1858
+ stream: "system",
1859
+ level: "error",
1860
+ message: "network recovery failed closed because continuation was unsafe",
1861
+ payload: {
1862
+ continuation: continuation ?? null,
1863
+ submissionPhase: submissionPhase ?? null,
1864
+ },
1865
+ });
1866
+ }
1867
+ continue;
1868
+ }
1869
+ if ((candidate.networkWaitAttemptCount ?? 0) >= NETWORK_WAIT_MAX_ATTEMPTS) {
1870
+ const claim = await claimExpiredHeartbeatRunExecution(db, candidate.id, { now });
1871
+ if (!claim)
1872
+ continue;
1873
+ if (candidate.chatConversationId && testHooks?.onNetworkWaitingRun) {
1874
+ await Promise.resolve(testHooks.onNetworkWaitingRun({
1875
+ ...claim.run,
1876
+ networkRecoveryExhausted: true,
1877
+ })).catch((error) => {
1878
+ logger.warn({ err: error, runId: candidate.id }, "network retry exhaustion handler failed");
1879
+ });
1880
+ }
1881
+ const exhausted = await transitionRunToTerminal(candidate.id, "failed", {
1882
+ finishedAt: now,
1883
+ error: NETWORK_WAIT_EXHAUSTED_ERROR,
1884
+ errorCode: NETWORK_WAIT_EXHAUSTED_ERROR_CODE,
1885
+ }, {
1886
+ expectedStatuses: ["running"],
1887
+ processExitedAt: now,
1888
+ expectedExecutionOwnerToken: claim.ownerToken,
1889
+ });
1890
+ if (exhausted) {
1891
+ await setWakeupStatus(candidate.wakeupRequestId, "failed", {
1892
+ finishedAt: now,
1893
+ error: NETWORK_WAIT_EXHAUSTED_ERROR,
1894
+ });
1895
+ await appendRunEvent(exhausted, {
1896
+ eventType: "network.retry_exhausted",
1897
+ stream: "system",
1898
+ level: "error",
1899
+ message: "network recovery retry policy exhausted",
1900
+ payload: {
1901
+ attempt: candidate.networkWaitAttemptCount,
1902
+ maxAttempts: NETWORK_WAIT_MAX_ATTEMPTS,
1903
+ transport: checkpoint.transport ?? null,
1904
+ provider: checkpoint.provider ?? null,
1905
+ model: checkpoint.model ?? null,
1906
+ },
1907
+ });
1908
+ }
1909
+ continue;
1910
+ }
1911
+ const claim = await claimExpiredHeartbeatRunExecution(db, candidate.id, { now });
1912
+ if (!claim)
1913
+ continue;
1914
+ const waitStartedAt = candidate.networkWaitStartedAt ? new Date(candidate.networkWaitStartedAt).getTime() : now.getTime();
1915
+ const waitedMs = Math.max(0, now.getTime() - waitStartedAt);
1916
+ const resumedRun = await db
1917
+ .update(heartbeatRuns)
1918
+ .set({
1919
+ runningSubstate: "executing",
1920
+ networkWaitStartedAt: null,
1921
+ networkWaitNextRetryAt: null,
1922
+ networkWaitDurationMs: sql `${heartbeatRuns.networkWaitDurationMs} + ${waitedMs}`,
1923
+ executionOwnerToken: claim.ownerToken,
1924
+ executionLeaseExpiresAt: new Date(now.getTime() + RUN_EXECUTION_LEASE_MS),
1925
+ updatedAt: now,
1926
+ })
1927
+ .where(and(eq(heartbeatRuns.id, candidate.id), eq(heartbeatRuns.status, "running"), eq(heartbeatRuns.runningSubstate, "waiting_for_network"), eq(heartbeatRuns.executionOwnerToken, claim.ownerToken)))
1928
+ .returning()
1929
+ .then((rows) => rows[0] ?? null);
1930
+ if (!resumedRun)
1931
+ continue;
1932
+ await appendRunEvent(resumedRun, {
1933
+ eventType: "network.resumed",
1934
+ stream: "system",
1935
+ level: "info",
1936
+ message: "run resumed after network recovery",
1937
+ payload: { waitedMs, attempt: resumedRun.networkWaitAttemptCount },
1938
+ });
1939
+ resumed.push(resumedRun.id);
1940
+ if (resumedRun.chatConversationId && testHooks?.onNetworkWaitingRun) {
1941
+ const handled = await testHooks.onNetworkWaitingRun(resumedRun);
1942
+ if (handled)
1943
+ continue;
1944
+ }
1945
+ void executeRun(resumedRun.id).catch((error) => {
1946
+ logger.error({ err: error, runId: resumedRun.id }, "network-wait heartbeat recovery failed");
1947
+ });
1948
+ }
1949
+ return { resumed: resumed.length, runIds: resumed };
1950
+ }
1951
+ async function recoverNetworkWaitingRuns(opts) {
1952
+ return withHeartbeatRecoveryLock(() => recoverNetworkWaitingRunsLocked(opts));
1953
+ }
1800
1954
  async function resumePendingWakeupRequests(opts = {}) {
1801
1955
  const pendingWakeups = await db.select().from(agentWakeupRequests).where(and(opts.orgId ? eq(agentWakeupRequests.orgId, opts.orgId) : undefined, inArray(agentWakeupRequests.status, [
1802
1956
  "queued",
@@ -2079,6 +2233,7 @@ export function heartbeatService(db, testHooks) {
2079
2233
  reapOrphanedRuns,
2080
2234
  reapInactiveRuns,
2081
2235
  reapTimedOutRuns,
2236
+ recoverNetworkWaitingRuns,
2082
2237
  startNextQueuedRunForAgent,
2083
2238
  resumePendingWakeupRequests,
2084
2239
  resumeQueuedRuns,