@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.
Files changed (272) 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 +12 -0
  5. package/dist/bootstrap/types.d.ts.map +1 -1
  6. package/dist/index.js +20 -5
  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 +10 -2
  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 +377 -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 +34 -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 +10 -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-issue-creation.d.ts +1 -1
  32. package/dist/services/agent-run-context.d.ts.map +1 -1
  33. package/dist/services/agent-run-context.js +15 -0
  34. package/dist/services/agent-run-context.js.map +1 -1
  35. package/dist/services/agent-startup-context.d.ts +4 -0
  36. package/dist/services/agent-startup-context.d.ts.map +1 -1
  37. package/dist/services/agent-startup-context.js +57 -13
  38. package/dist/services/agent-startup-context.js.map +1 -1
  39. package/dist/services/agents.d.ts +253 -0
  40. package/dist/services/agents.d.ts.map +1 -1
  41. package/dist/services/automations.d.ts.map +1 -1
  42. package/dist/services/automations.js +3 -0
  43. package/dist/services/automations.js.map +1 -1
  44. package/dist/services/chat-agent-runs.d.ts +48 -1
  45. package/dist/services/chat-agent-runs.d.ts.map +1 -1
  46. package/dist/services/chat-agent-runs.js +107 -3
  47. package/dist/services/chat-agent-runs.js.map +1 -1
  48. package/dist/services/chat-assistant.d.ts.map +1 -1
  49. package/dist/services/chat-assistant.helpers.d.ts +12 -3
  50. package/dist/services/chat-assistant.helpers.d.ts.map +1 -1
  51. package/dist/services/chat-assistant.helpers.js +6 -0
  52. package/dist/services/chat-assistant.helpers.js.map +1 -1
  53. package/dist/services/chat-assistant.js +54 -18
  54. package/dist/services/chat-assistant.js.map +1 -1
  55. package/dist/services/chat-generation-protocol.d.ts +119 -0
  56. package/dist/services/chat-generation-protocol.d.ts.map +1 -1
  57. package/dist/services/chat-generation-protocol.js +65 -0
  58. package/dist/services/chat-generation-protocol.js.map +1 -1
  59. package/dist/services/chats.constants.d.ts +1 -1
  60. package/dist/services/chats.constants.d.ts.map +1 -1
  61. package/dist/services/chats.constants.js +1 -0
  62. package/dist/services/chats.constants.js.map +1 -1
  63. package/dist/services/chats.d.ts +128 -0
  64. package/dist/services/chats.d.ts.map +1 -1
  65. package/dist/services/chats.js +10 -0
  66. package/dist/services/chats.js.map +1 -1
  67. package/dist/services/finance.d.ts +1 -1
  68. package/dist/services/goals.d.ts +47 -7
  69. package/dist/services/goals.d.ts.map +1 -1
  70. package/dist/services/goals.js +74 -33
  71. package/dist/services/goals.js.map +1 -1
  72. package/dist/services/heartbeat-run-reference.d.ts.map +1 -1
  73. package/dist/services/heartbeat-run-reference.js +11 -5
  74. package/dist/services/heartbeat-run-reference.js.map +1 -1
  75. package/dist/services/index.d.ts +2 -1
  76. package/dist/services/index.d.ts.map +1 -1
  77. package/dist/services/index.js +2 -1
  78. package/dist/services/index.js.map +1 -1
  79. package/dist/services/integrations/feishu/runtime.d.ts +8 -0
  80. package/dist/services/integrations/feishu/runtime.d.ts.map +1 -1
  81. package/dist/services/integrations/feishu/runtime.js +124 -1
  82. package/dist/services/integrations/feishu/runtime.js.map +1 -1
  83. package/dist/services/issue-assignment-wakeup.d.ts +1 -0
  84. package/dist/services/issue-assignment-wakeup.d.ts.map +1 -1
  85. package/dist/services/issue-assignment-wakeup.js +2 -0
  86. package/dist/services/issue-assignment-wakeup.js.map +1 -1
  87. package/dist/services/issues.d.ts +2 -2
  88. package/dist/services/issues.d.ts.map +1 -1
  89. package/dist/services/issues.helpers.d.ts +8 -0
  90. package/dist/services/issues.helpers.d.ts.map +1 -1
  91. package/dist/services/issues.helpers.js +17 -1
  92. package/dist/services/issues.helpers.js.map +1 -1
  93. package/dist/services/issues.js +108 -15
  94. package/dist/services/issues.js.map +1 -1
  95. package/dist/services/messenger.d.ts.map +1 -1
  96. package/dist/services/messenger.js +12 -3
  97. package/dist/services/messenger.js.map +1 -1
  98. package/dist/services/organization-members.d.ts +27 -0
  99. package/dist/services/organization-members.d.ts.map +1 -0
  100. package/dist/services/organization-members.js +169 -0
  101. package/dist/services/organization-members.js.map +1 -0
  102. package/dist/services/organization-workspace-browser.d.ts.map +1 -1
  103. package/dist/services/organization-workspace-browser.js +44 -10
  104. package/dist/services/organization-workspace-browser.js.map +1 -1
  105. package/dist/services/product-intelligence.d.ts.map +1 -1
  106. package/dist/services/product-intelligence.js +4 -0
  107. package/dist/services/product-intelligence.js.map +1 -1
  108. package/dist/services/projects.d.ts +2 -5
  109. package/dist/services/projects.d.ts.map +1 -1
  110. package/dist/services/projects.js +27 -2
  111. package/dist/services/projects.js.map +1 -1
  112. package/dist/services/rudder-plugin-catalog.d.ts +1 -1
  113. package/dist/services/rudder-plugin-catalog.d.ts.map +1 -1
  114. package/dist/services/rudder-plugin-catalog.js +281 -15
  115. package/dist/services/rudder-plugin-catalog.js.map +1 -1
  116. package/dist/services/rudder-plugin-catalog.test.js +55 -0
  117. package/dist/services/rudder-plugin-catalog.test.js.map +1 -1
  118. package/dist/services/run-intelligence.d.ts +1 -0
  119. package/dist/services/run-intelligence.d.ts.map +1 -1
  120. package/dist/services/run-intelligence.js +8 -1
  121. package/dist/services/run-intelligence.js.map +1 -1
  122. package/dist/services/run-log-store.d.ts +3 -0
  123. package/dist/services/run-log-store.d.ts.map +1 -1
  124. package/dist/services/run-log-store.js +124 -18
  125. package/dist/services/run-log-store.js.map +1 -1
  126. package/dist/services/runtime-kernel/assignment-run-guardrail.d.ts +2 -0
  127. package/dist/services/runtime-kernel/assignment-run-guardrail.d.ts.map +1 -1
  128. package/dist/services/runtime-kernel/assignment-run-guardrail.js +5 -3
  129. package/dist/services/runtime-kernel/assignment-run-guardrail.js.map +1 -1
  130. package/dist/services/runtime-kernel/assignment-run-guardrail.test.js +20 -0
  131. package/dist/services/runtime-kernel/assignment-run-guardrail.test.js.map +1 -1
  132. package/dist/services/runtime-kernel/heartbeat-attempt-ledger.d.ts +124 -0
  133. package/dist/services/runtime-kernel/heartbeat-attempt-ledger.d.ts.map +1 -0
  134. package/dist/services/runtime-kernel/heartbeat-attempt-ledger.js +108 -0
  135. package/dist/services/runtime-kernel/heartbeat-attempt-ledger.js.map +1 -0
  136. package/dist/services/runtime-kernel/heartbeat.core.d.ts +129 -0
  137. package/dist/services/runtime-kernel/heartbeat.core.d.ts.map +1 -1
  138. package/dist/services/runtime-kernel/heartbeat.core.js +15 -0
  139. package/dist/services/runtime-kernel/heartbeat.core.js.map +1 -1
  140. package/dist/services/runtime-kernel/heartbeat.d.ts +43 -0
  141. package/dist/services/runtime-kernel/heartbeat.d.ts.map +1 -1
  142. package/dist/services/runtime-kernel/heartbeat.execute.d.ts.map +1 -1
  143. package/dist/services/runtime-kernel/heartbeat.execute.js +229 -3
  144. package/dist/services/runtime-kernel/heartbeat.execute.js.map +1 -1
  145. package/dist/services/runtime-kernel/heartbeat.js +178 -6
  146. package/dist/services/runtime-kernel/heartbeat.js.map +1 -1
  147. package/dist/services/runtime-kernel/heartbeat.recovery.d.ts.map +1 -1
  148. package/dist/services/runtime-kernel/heartbeat.recovery.js +17 -1
  149. package/dist/services/runtime-kernel/heartbeat.recovery.js.map +1 -1
  150. package/dist/services/runtime-kernel/heartbeat.release.d.ts.map +1 -1
  151. package/dist/services/runtime-kernel/heartbeat.release.js +1 -0
  152. package/dist/services/runtime-kernel/heartbeat.release.js.map +1 -1
  153. package/dist/services/runtime-kernel/heartbeat.sessions.d.ts.map +1 -1
  154. package/dist/services/runtime-kernel/heartbeat.sessions.js +25 -5
  155. package/dist/services/runtime-kernel/heartbeat.sessions.js.map +1 -1
  156. package/dist/services/runtime-kernel/heartbeat.terminal.d.ts +56 -0
  157. package/dist/services/runtime-kernel/heartbeat.terminal.d.ts.map +1 -1
  158. package/dist/services/runtime-kernel/heartbeat.wakeup.d.ts.map +1 -1
  159. package/dist/services/runtime-kernel/heartbeat.wakeup.js +28 -0
  160. package/dist/services/runtime-kernel/heartbeat.wakeup.js.map +1 -1
  161. package/dist/services/runtime-kernel/model-fallback.d.ts +4 -0
  162. package/dist/services/runtime-kernel/model-fallback.d.ts.map +1 -1
  163. package/dist/services/runtime-kernel/model-fallback.js +25 -4
  164. package/dist/services/runtime-kernel/model-fallback.js.map +1 -1
  165. package/dist/services/workspace-backup-v2.d.ts +20 -0
  166. package/dist/services/workspace-backup-v2.d.ts.map +1 -1
  167. package/dist/services/workspace-backup-v2.js +155 -23
  168. package/dist/services/workspace-backup-v2.js.map +1 -1
  169. package/dist/services/workspace-backup-v2.test.js +34 -2
  170. package/dist/services/workspace-backup-v2.test.js.map +1 -1
  171. package/dist/services/workspace-backups.d.ts +0 -1
  172. package/dist/services/workspace-backups.d.ts.map +1 -1
  173. package/dist/services/workspace-backups.js +18 -19
  174. package/dist/services/workspace-backups.js.map +1 -1
  175. package/dist/services/workspace-manifest-native.d.ts +10 -0
  176. package/dist/services/workspace-manifest-native.d.ts.map +1 -0
  177. package/dist/services/workspace-manifest-native.js +219 -0
  178. package/dist/services/workspace-manifest-native.js.map +1 -0
  179. package/dist/services/workspace-restore-reconciliation.d.ts +11 -0
  180. package/dist/services/workspace-restore-reconciliation.d.ts.map +1 -0
  181. package/dist/services/workspace-restore-reconciliation.js +165 -0
  182. package/dist/services/workspace-restore-reconciliation.js.map +1 -0
  183. package/package.json +14 -14
  184. package/resources/bundled-skills/rudder-docs/references/api-reference.md +8 -0
  185. package/resources/bundled-skills/rudder-docs/references/cli-reference.md +6 -3
  186. package/skills/rudder-docs/references/api-reference.md +8 -0
  187. package/skills/rudder-docs/references/cli-reference.md +6 -3
  188. package/ui-dist/assets/LibraryLiveSurface-l4GUICoP.js +1 -0
  189. package/ui-dist/assets/{abnfDiagram-VRR7QNED-BggxrEZR.js → abnfDiagram-VRR7QNED-BLBjJ-cq.js} +1 -1
  190. package/ui-dist/assets/{addon-fit-Cc1gOtSX.js → addon-fit-BJjiE5UX.js} +1 -1
  191. package/ui-dist/assets/{arc-0kNrc9xt.js → arc-Cc8Cihbb.js} +1 -1
  192. package/ui-dist/assets/{architectureDiagram-ZJ3FMSHR-BOCa-5ab.js → architectureDiagram-ZJ3FMSHR--xCnNdhe.js} +1 -1
  193. package/ui-dist/assets/{blockDiagram-677ZJIJ3-CQU5jcsO.js → blockDiagram-677ZJIJ3-DRT2VAhQ.js} +1 -1
  194. package/ui-dist/assets/{c4Diagram-LMCZKHZV-ChgWIw5O.js → c4Diagram-LMCZKHZV-D88LDng_.js} +1 -1
  195. package/ui-dist/assets/channel-C5Hipz5u.js +1 -0
  196. package/ui-dist/assets/{chunk-2Q5K7J3B-B4yrwesI.js → chunk-2Q5K7J3B-Dz_vdT6U.js} +1 -1
  197. package/ui-dist/assets/{chunk-32BRIVSS-mhAeSMlR.js → chunk-32BRIVSS-DigOixDH.js} +1 -1
  198. package/ui-dist/assets/{chunk-5VM5RSS4-BmS_u59G.js → chunk-5VM5RSS4-C_1XAVwx.js} +1 -1
  199. package/ui-dist/assets/{chunk-EX3LRPZG-DXoTKkLG.js → chunk-EX3LRPZG-C6viraTj.js} +1 -1
  200. package/ui-dist/assets/{chunk-JWPE2WC7-Bj9myT03.js → chunk-JWPE2WC7-BCRBJeuJ.js} +1 -1
  201. package/ui-dist/assets/{chunk-MOJQB5TN-OAoJna8Y.js → chunk-MOJQB5TN-Cf1ATLhT.js} +1 -1
  202. package/ui-dist/assets/{chunk-RYQCIY6F-AGLA7TJn.js → chunk-RYQCIY6F-WltrJiTY.js} +1 -1
  203. package/ui-dist/assets/{chunk-V7JOEXUC-YGM2tDK2.js → chunk-V7JOEXUC-CA5tCSQF.js} +1 -1
  204. package/ui-dist/assets/{chunk-VR4S4FIN-DqaZn9Ty.js → chunk-VR4S4FIN-CEkOCBXH.js} +1 -1
  205. package/ui-dist/assets/{chunk-XXDRQBXY-Cpqn_8Bl.js → chunk-XXDRQBXY-CtrnGXIb.js} +1 -1
  206. package/ui-dist/assets/classDiagram-OUVF2IWQ-ClTHNkOu.js +1 -0
  207. package/ui-dist/assets/classDiagram-v2-EOCWNBFH-ClTHNkOu.js +1 -0
  208. package/ui-dist/assets/{cose-bilkent-JH36ORCC-BVe-X26w.js → cose-bilkent-JH36ORCC-CByYAK4l.js} +1 -1
  209. package/ui-dist/assets/{cynefin-VYW2F7L2-DlDrrBWp.js → cynefin-VYW2F7L2-_sCXFLWX.js} +1 -1
  210. package/ui-dist/assets/{cynefinDiagram-TSTJHNR4-BSHvFeGh.js → cynefinDiagram-TSTJHNR4-CFeFfsqk.js} +1 -1
  211. package/ui-dist/assets/{dagre-VKFMJZFB-tUm70k9h.js → dagre-VKFMJZFB-Bqod3KpP.js} +1 -1
  212. package/ui-dist/assets/{diagram-FQU43EPY-C5kjITq7.js → diagram-FQU43EPY-BfvoZqSk.js} +1 -1
  213. package/ui-dist/assets/{diagram-G47NLZAW-BrbHgt8r.js → diagram-G47NLZAW-BXbnKoJ9.js} +1 -1
  214. package/ui-dist/assets/{diagram-NH7WQ7WH-DT7PdghT.js → diagram-NH7WQ7WH-DzyI0L8P.js} +1 -1
  215. package/ui-dist/assets/{diagram-OA4YK3LP-wOjhRHRo.js → diagram-OA4YK3LP-DTMuvqry.js} +1 -1
  216. package/ui-dist/assets/{diagram-WEI45ONY-Dz9vtaDT.js → diagram-WEI45ONY-CAzeoFPA.js} +1 -1
  217. package/ui-dist/assets/{ebnfDiagram-CCIWWBDH-BT5TzIA6.js → ebnfDiagram-CCIWWBDH-CV731d_d.js} +1 -1
  218. package/ui-dist/assets/{erDiagram-Q63AITRT-DLCpoOEP.js → erDiagram-Q63AITRT-X1TOS4Ka.js} +1 -1
  219. package/ui-dist/assets/{flowDiagram-23GEKE2U-DfF2COjh.js → flowDiagram-23GEKE2U-DVrBhhZN.js} +1 -1
  220. package/ui-dist/assets/{ganttDiagram-NO4QXBWP-1d0KDwQs.js → ganttDiagram-NO4QXBWP-Bu2bat7s.js} +1 -1
  221. package/ui-dist/assets/{gitGraphDiagram-IHSO6WYX-COLjS1ZR.js → gitGraphDiagram-IHSO6WYX-BACGK4uh.js} +1 -1
  222. package/ui-dist/assets/{graph-B7fcgpw_.js → graph-DBmSffWh.js} +1 -1
  223. package/ui-dist/assets/{index-DTc5LpTU.js → index-37d7mmQR.js} +1 -1
  224. package/ui-dist/assets/{index-DttnaNlV.js → index-BJLMZ-lO.js} +542 -543
  225. package/ui-dist/assets/{index-CTIfCQqR.js → index-BM89NC7H.js} +1 -1
  226. package/ui-dist/assets/{index-COLwjKBR.js → index-BlzBPtLA.js} +1 -1
  227. package/ui-dist/assets/{index-CXg1YCeI.js → index-C7oAJP9-.js} +1 -1
  228. package/ui-dist/assets/index-CPP8apmO.css +32 -0
  229. package/ui-dist/assets/{index-CZYXpHv4.js → index-CY63mXIN.js} +1 -1
  230. package/ui-dist/assets/{index-CgkYyYx9.js → index-CqrPtttL.js} +1 -1
  231. package/ui-dist/assets/{index-CMNULCMJ.js → index-D8VjtybU.js} +1 -1
  232. package/ui-dist/assets/{index-CH8I9acP.js → index-DsjgdWi0.js} +1 -1
  233. package/ui-dist/assets/{index-CbqgXGcs.js → index-Qr_boV5N.js} +1 -1
  234. package/ui-dist/assets/{index-B6zSdXAR.js → index-SBaOrW31.js} +1 -1
  235. package/ui-dist/assets/{index-D27Bbc-x.js → index-jawM4Mw8.js} +1 -1
  236. package/ui-dist/assets/{index-BczgTMAn.js → index-juSeEYHt.js} +1 -1
  237. package/ui-dist/assets/{index-Denv6wuU.js → index-qSO_9tQ4.js} +1 -1
  238. package/ui-dist/assets/{index-vtghjwab.js → index-sPs1blcu.js} +1 -1
  239. package/ui-dist/assets/{infoDiagram-FWYZ7A6U-Bg4YQUu2.js → infoDiagram-FWYZ7A6U-DsKiGJG2.js} +1 -1
  240. package/ui-dist/assets/{ishikawaDiagram-FXEZZL3T-BtgUVI_I.js → ishikawaDiagram-FXEZZL3T-qFWBzEXh.js} +1 -1
  241. package/ui-dist/assets/{journeyDiagram-5HDEW3XC-BGHGjvN4.js → journeyDiagram-5HDEW3XC-CzXYTAgD.js} +1 -1
  242. package/ui-dist/assets/{kanban-definition-HUTT4EX6-DekQSNo8.js → kanban-definition-HUTT4EX6-BCz-L1fU.js} +1 -1
  243. package/ui-dist/assets/{layout-Bsw9hK6u.js → layout-YfTyU1_8.js} +1 -1
  244. package/ui-dist/assets/{linear-D8D1R-4C.js → linear-Cmr3155j.js} +1 -1
  245. package/ui-dist/assets/{map-BUIcuf4c.js → map-Cd3zkWna.js} +1 -1
  246. package/ui-dist/assets/{mermaid.core-CYZMLemV.js → mermaid.core-B0LpeiXb.js} +4 -4
  247. package/ui-dist/assets/{mindmap-definition-LN4V7U3C-mjS9avIS.js → mindmap-definition-LN4V7U3C-53OklQRn.js} +1 -1
  248. package/ui-dist/assets/{pegDiagram-2B236MQR-Buziry9m.js → pegDiagram-2B236MQR-Dm_aMKAy.js} +1 -1
  249. package/ui-dist/assets/{pieDiagram-ENE6RG2P-B_9BmFEg.js → pieDiagram-ENE6RG2P-X7GdM_uO.js} +1 -1
  250. package/ui-dist/assets/{quadrantDiagram-ABIIQ3AL-BxFdUA8s.js → quadrantDiagram-ABIIQ3AL-CwNrCyye.js} +1 -1
  251. package/ui-dist/assets/{railroadDiagram-RFXS5EU6-pJh_afC-.js → railroadDiagram-RFXS5EU6-qeA8AyXg.js} +1 -1
  252. package/ui-dist/assets/{requirementDiagram-TGXJPOKE-BGgk3AxL.js → requirementDiagram-TGXJPOKE-CbTV3-mv.js} +1 -1
  253. package/ui-dist/assets/{sankeyDiagram-HTMAVEWB-DdPKE4bs.js → sankeyDiagram-HTMAVEWB-Cb2FZniK.js} +1 -1
  254. package/ui-dist/assets/{sequenceDiagram-DBY2YBRQ-xlik6FjZ.js → sequenceDiagram-DBY2YBRQ-43rfMbK2.js} +1 -1
  255. package/ui-dist/assets/{sizeCapture-X5ZJPWSS-D_zKAjvf.js → sizeCapture-X5ZJPWSS-kd6mcpBA.js} +1 -1
  256. package/ui-dist/assets/{stateDiagram-2N3HPSRC-BGQP8giG.js → stateDiagram-2N3HPSRC-DVpqAreh.js} +1 -1
  257. package/ui-dist/assets/stateDiagram-v2-6OUMAXLB-CD2jPBKH.js +1 -0
  258. package/ui-dist/assets/{swimlanes-5IMT3BWC-ZhE8oAxR.js → swimlanes-5IMT3BWC-Cpgu2cLX.js} +2 -2
  259. package/ui-dist/assets/swimlanesDiagram-G3AALYLV-CwSF2io0.js +8 -0
  260. package/ui-dist/assets/{timeline-definition-FHXFAJF6-CUqfijnL.js → timeline-definition-FHXFAJF6-BXgN1EJb.js} +1 -1
  261. package/ui-dist/assets/{vennDiagram-L72KCM5P-B_rqTUA0.js → vennDiagram-L72KCM5P-ZFEGgsAk.js} +1 -1
  262. package/ui-dist/assets/{wardleyDiagram-EHGQE667-BTvjybDi.js → wardleyDiagram-EHGQE667-DrxFJODe.js} +1 -1
  263. package/ui-dist/assets/{xterm-CRpDYL2s.js → xterm-DeUtt-wP.js} +1 -1
  264. package/ui-dist/assets/{xychartDiagram-FW5EYKEG-ZBbwueZ5.js → xychartDiagram-FW5EYKEG-BNcvHMPz.js} +1 -1
  265. package/ui-dist/index.html +2 -2
  266. package/ui-dist/assets/LibraryLiveSurface-De1p59PK.js +0 -1
  267. package/ui-dist/assets/channel-eAoWqZqJ.js +0 -1
  268. package/ui-dist/assets/classDiagram-OUVF2IWQ-c94PI6yY.js +0 -1
  269. package/ui-dist/assets/classDiagram-v2-EOCWNBFH-c94PI6yY.js +0 -1
  270. package/ui-dist/assets/index-RSbihTRP.css +0 -32
  271. package/ui-dist/assets/stateDiagram-v2-6OUMAXLB-BMEtuB93.js +0 -1
  272. 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":"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"}
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":"AAmEA,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;EAi8ChF"}
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: (_attempt, attemptAdapter) => {
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
- await startNextQueuedRunForAgent(run.agentId);
1686
+ if (!networkSuspended)
1687
+ await startNextQueuedRunForAgent(run.agentId);
1462
1688
  }
1463
1689
  }
1464
1690
  return { executeRun };