@rudderhq/server 0.7.2 → 0.7.4

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 (512) hide show
  1. package/dist/agent-runtimes/registry.d.ts.map +1 -1
  2. package/dist/agent-runtimes/registry.js +0 -2
  3. package/dist/agent-runtimes/registry.js.map +1 -1
  4. package/dist/app.d.ts.map +1 -1
  5. package/dist/app.js +1 -5
  6. package/dist/app.js.map +1 -1
  7. package/dist/bootstrap/create-http-app.d.ts +1 -2
  8. package/dist/bootstrap/create-http-app.d.ts.map +1 -1
  9. package/dist/bootstrap/create-http-app.js +13 -12
  10. package/dist/bootstrap/create-http-app.js.map +1 -1
  11. package/dist/bootstrap/register-api-routes.d.ts +1 -2
  12. package/dist/bootstrap/register-api-routes.d.ts.map +1 -1
  13. package/dist/bootstrap/register-api-routes.js +22 -4
  14. package/dist/bootstrap/register-api-routes.js.map +1 -1
  15. package/dist/index.js +2 -0
  16. package/dist/index.js.map +1 -1
  17. package/dist/middleware/logger.js +2 -2
  18. package/dist/middleware/logger.js.map +1 -1
  19. package/dist/middleware/logger.test.js +26 -10
  20. package/dist/middleware/logger.test.js.map +1 -1
  21. package/dist/redaction.d.ts +4 -0
  22. package/dist/redaction.d.ts.map +1 -1
  23. package/dist/redaction.js +15 -0
  24. package/dist/redaction.js.map +1 -1
  25. package/dist/routes/agent-issue-creation.d.ts +25 -0
  26. package/dist/routes/agent-issue-creation.d.ts.map +1 -0
  27. package/dist/routes/agent-issue-creation.js +201 -0
  28. package/dist/routes/agent-issue-creation.js.map +1 -0
  29. package/dist/routes/app-builder.d.ts +3 -1
  30. package/dist/routes/app-builder.d.ts.map +1 -1
  31. package/dist/routes/app-builder.js +30 -22
  32. package/dist/routes/app-builder.js.map +1 -1
  33. package/dist/routes/approvals.d.ts.map +1 -1
  34. package/dist/routes/approvals.js +36 -9
  35. package/dist/routes/approvals.js.map +1 -1
  36. package/dist/routes/chats.d.ts.map +1 -1
  37. package/dist/routes/chats.js +23 -4
  38. package/dist/routes/chats.js.map +1 -1
  39. package/dist/routes/chats.preflight.d.ts +2 -1
  40. package/dist/routes/chats.preflight.d.ts.map +1 -1
  41. package/dist/routes/chats.preflight.js +7 -0
  42. package/dist/routes/chats.preflight.js.map +1 -1
  43. package/dist/routes/chats.stream-routes.d.ts.map +1 -1
  44. package/dist/routes/chats.stream-routes.js +14 -3
  45. package/dist/routes/chats.stream-routes.js.map +1 -1
  46. package/dist/routes/chats.stream-support.d.ts.map +1 -1
  47. package/dist/routes/chats.stream-support.js +8 -0
  48. package/dist/routes/chats.stream-support.js.map +1 -1
  49. package/dist/routes/computer.d.ts +30 -0
  50. package/dist/routes/computer.d.ts.map +1 -0
  51. package/dist/routes/computer.js +231 -0
  52. package/dist/routes/computer.js.map +1 -0
  53. package/dist/routes/goals.d.ts.map +1 -1
  54. package/dist/routes/goals.js +176 -27
  55. package/dist/routes/goals.js.map +1 -1
  56. package/dist/routes/health.d.ts.map +1 -1
  57. package/dist/routes/health.js +2 -0
  58. package/dist/routes/health.js.map +1 -1
  59. package/dist/routes/index.d.ts +1 -0
  60. package/dist/routes/index.d.ts.map +1 -1
  61. package/dist/routes/index.js +1 -0
  62. package/dist/routes/index.js.map +1 -1
  63. package/dist/routes/instance-settings.d.ts.map +1 -1
  64. package/dist/routes/instance-settings.js +3 -0
  65. package/dist/routes/instance-settings.js.map +1 -1
  66. package/dist/routes/issues.comments-attachments.d.ts.map +1 -1
  67. package/dist/routes/issues.comments-attachments.js +90 -8
  68. package/dist/routes/issues.comments-attachments.js.map +1 -1
  69. package/dist/routes/issues.d.ts.map +1 -1
  70. package/dist/routes/issues.js +14 -2
  71. package/dist/routes/issues.js.map +1 -1
  72. package/dist/routes/issues.mutations.d.ts.map +1 -1
  73. package/dist/routes/issues.mutations.js +206 -52
  74. package/dist/routes/issues.mutations.js.map +1 -1
  75. package/dist/routes/managed-mcp-runtime.d.ts.map +1 -1
  76. package/dist/routes/managed-mcp-runtime.js +109 -7
  77. package/dist/routes/managed-mcp-runtime.js.map +1 -1
  78. package/dist/routes/organization-skills.d.ts.map +1 -1
  79. package/dist/routes/organization-skills.js +23 -1
  80. package/dist/routes/organization-skills.js.map +1 -1
  81. package/dist/routes/requests.d.ts +3 -0
  82. package/dist/routes/requests.d.ts.map +1 -0
  83. package/dist/routes/requests.js +122 -0
  84. package/dist/routes/requests.js.map +1 -0
  85. package/dist/routes/rudder-plugins.d.ts +4 -0
  86. package/dist/routes/rudder-plugins.d.ts.map +1 -0
  87. package/dist/routes/rudder-plugins.js +203 -0
  88. package/dist/routes/rudder-plugins.js.map +1 -0
  89. package/dist/services/activity-log.d.ts +0 -3
  90. package/dist/services/activity-log.d.ts.map +1 -1
  91. package/dist/services/activity-log.js +19 -42
  92. package/dist/services/activity-log.js.map +1 -1
  93. package/dist/services/activity.d.ts +3 -3
  94. package/dist/services/agent-issue-creation.d.ts +344 -0
  95. package/dist/services/agent-issue-creation.d.ts.map +1 -0
  96. package/dist/services/agent-issue-creation.js +675 -0
  97. package/dist/services/agent-issue-creation.js.map +1 -0
  98. package/dist/services/agent-run-context.d.ts.map +1 -1
  99. package/dist/services/agent-run-context.js +10 -4
  100. package/dist/services/agent-run-context.js.map +1 -1
  101. package/dist/services/agents.d.ts +14 -14
  102. package/dist/services/agents.d.ts.map +1 -1
  103. package/dist/services/agents.js +2 -1
  104. package/dist/services/agents.js.map +1 -1
  105. package/dist/services/app-builder.d.ts.map +1 -1
  106. package/dist/services/app-builder.js +24 -3
  107. package/dist/services/app-builder.js.map +1 -1
  108. package/dist/services/chat-agent-runs.d.ts +1 -0
  109. package/dist/services/chat-agent-runs.d.ts.map +1 -1
  110. package/dist/services/chat-agent-runs.js +1 -0
  111. package/dist/services/chat-agent-runs.js.map +1 -1
  112. package/dist/services/chat-assistant.d.ts.map +1 -1
  113. package/dist/services/chat-assistant.helpers.d.ts +3 -1
  114. package/dist/services/chat-assistant.helpers.d.ts.map +1 -1
  115. package/dist/services/chat-assistant.helpers.js +25 -0
  116. package/dist/services/chat-assistant.helpers.js.map +1 -1
  117. package/dist/services/chat-assistant.js +57 -11
  118. package/dist/services/chat-assistant.js.map +1 -1
  119. package/dist/services/chat-generation-protocol.test.js +2 -2
  120. package/dist/services/chat-generation-protocol.test.js.map +1 -1
  121. package/dist/services/chat-queued-message-materialization.d.ts +1 -1
  122. package/dist/services/chats.create.d.ts +2 -2
  123. package/dist/services/chats.create.d.ts.map +1 -1
  124. package/dist/services/chats.d.ts +15 -15
  125. package/dist/services/chats.d.ts.map +1 -1
  126. package/dist/services/chats.helpers.d.ts +2 -2
  127. package/dist/services/chats.helpers.d.ts.map +1 -1
  128. package/dist/services/chats.helpers.goal-context.test.d.ts +2 -0
  129. package/dist/services/chats.helpers.goal-context.test.d.ts.map +1 -0
  130. package/dist/services/chats.helpers.goal-context.test.js +40 -0
  131. package/dist/services/chats.helpers.goal-context.test.js.map +1 -0
  132. package/dist/services/chats.helpers.js +27 -2
  133. package/dist/services/chats.helpers.js.map +1 -1
  134. package/dist/services/chats.js.map +1 -1
  135. package/dist/services/computer-broker.d.ts +35 -0
  136. package/dist/services/computer-broker.d.ts.map +1 -0
  137. package/dist/services/computer-broker.js +211 -0
  138. package/dist/services/computer-broker.js.map +1 -0
  139. package/dist/services/computer-broker.test.d.ts +2 -0
  140. package/dist/services/computer-broker.test.d.ts.map +1 -0
  141. package/dist/services/computer-broker.test.js +70 -0
  142. package/dist/services/computer-broker.test.js.map +1 -0
  143. package/dist/services/computer-capability.d.ts +13 -0
  144. package/dist/services/computer-capability.d.ts.map +1 -0
  145. package/dist/services/computer-capability.js +11 -0
  146. package/dist/services/computer-capability.js.map +1 -0
  147. package/dist/services/computer-capability.test.d.ts +2 -0
  148. package/dist/services/computer-capability.test.d.ts.map +1 -0
  149. package/dist/services/computer-capability.test.js +27 -0
  150. package/dist/services/computer-capability.test.js.map +1 -0
  151. package/dist/services/finance.d.ts +2 -2
  152. package/dist/services/goals.d.ts +267 -244
  153. package/dist/services/goals.d.ts.map +1 -1
  154. package/dist/services/goals.js +1279 -297
  155. package/dist/services/goals.js.map +1 -1
  156. package/dist/services/index.d.ts +3 -0
  157. package/dist/services/index.d.ts.map +1 -1
  158. package/dist/services/index.js +3 -0
  159. package/dist/services/index.js.map +1 -1
  160. package/dist/services/instance-settings.d.ts.map +1 -1
  161. package/dist/services/instance-settings.js +8 -3
  162. package/dist/services/instance-settings.js.map +1 -1
  163. package/dist/services/integrations/agent-integrations.d.ts +1 -1
  164. package/dist/services/issues.d.ts +86 -1
  165. package/dist/services/issues.d.ts.map +1 -1
  166. package/dist/services/issues.helpers.d.ts +4 -0
  167. package/dist/services/issues.helpers.d.ts.map +1 -1
  168. package/dist/services/issues.helpers.js +28 -6
  169. package/dist/services/issues.helpers.js.map +1 -1
  170. package/dist/services/issues.js +207 -127
  171. package/dist/services/issues.js.map +1 -1
  172. package/dist/services/knowledge-portability/organization-portability.files.d.ts +1 -1
  173. package/dist/services/knowledge-portability/organization-skills.catalog.d.ts +7 -1
  174. package/dist/services/knowledge-portability/organization-skills.catalog.d.ts.map +1 -1
  175. package/dist/services/knowledge-portability/organization-skills.catalog.js +10 -0
  176. package/dist/services/knowledge-portability/organization-skills.catalog.js.map +1 -1
  177. package/dist/services/knowledge-portability/organization-skills.d.ts +3 -1
  178. package/dist/services/knowledge-portability/organization-skills.d.ts.map +1 -1
  179. package/dist/services/knowledge-portability/organization-skills.js +80 -12
  180. package/dist/services/knowledge-portability/organization-skills.js.map +1 -1
  181. package/dist/services/mcp/managed-bindings.d.ts.map +1 -1
  182. package/dist/services/mcp/managed-bindings.js +18 -2
  183. package/dist/services/mcp/managed-bindings.js.map +1 -1
  184. package/dist/services/mcp/managed-client.d.ts +15 -0
  185. package/dist/services/mcp/managed-client.d.ts.map +1 -1
  186. package/dist/services/mcp/managed-client.js +23 -1
  187. package/dist/services/mcp/managed-client.js.map +1 -1
  188. package/dist/services/mcp/managed-client.test.js +73 -9
  189. package/dist/services/mcp/managed-client.test.js.map +1 -1
  190. package/dist/services/messenger.d.ts +3 -3
  191. package/dist/services/messenger.d.ts.map +1 -1
  192. package/dist/services/messenger.js +201 -65
  193. package/dist/services/messenger.js.map +1 -1
  194. package/dist/services/orgs.d.ts.map +1 -1
  195. package/dist/services/orgs.js +3 -1
  196. package/dist/services/orgs.js.map +1 -1
  197. package/dist/services/product-analytics.d.ts +2 -2
  198. package/dist/services/requests.d.ts +919 -0
  199. package/dist/services/requests.d.ts.map +1 -0
  200. package/dist/services/requests.js +532 -0
  201. package/dist/services/requests.js.map +1 -0
  202. package/dist/services/rudder-plugins.d.ts +107 -0
  203. package/dist/services/rudder-plugins.d.ts.map +1 -0
  204. package/dist/services/rudder-plugins.js +1760 -0
  205. package/dist/services/rudder-plugins.js.map +1 -0
  206. package/dist/services/rudder-plugins.test.d.ts +2 -0
  207. package/dist/services/rudder-plugins.test.d.ts.map +1 -0
  208. package/dist/services/rudder-plugins.test.js +191 -0
  209. package/dist/services/rudder-plugins.test.js.map +1 -0
  210. package/dist/services/runtime-kernel/heartbeat.core.d.ts +1 -0
  211. package/dist/services/runtime-kernel/heartbeat.core.d.ts.map +1 -1
  212. package/dist/services/runtime-kernel/heartbeat.core.js +1 -1
  213. package/dist/services/runtime-kernel/heartbeat.core.js.map +1 -1
  214. package/dist/services/runtime-kernel/heartbeat.d.ts +65 -0
  215. package/dist/services/runtime-kernel/heartbeat.d.ts.map +1 -1
  216. package/dist/services/runtime-kernel/heartbeat.execute.d.ts.map +1 -1
  217. package/dist/services/runtime-kernel/heartbeat.execute.js +21 -5
  218. package/dist/services/runtime-kernel/heartbeat.execute.js.map +1 -1
  219. package/dist/services/runtime-kernel/heartbeat.js +320 -108
  220. package/dist/services/runtime-kernel/heartbeat.js.map +1 -1
  221. package/dist/services/runtime-kernel/heartbeat.recovery.d.ts +1 -0
  222. package/dist/services/runtime-kernel/heartbeat.recovery.d.ts.map +1 -1
  223. package/dist/services/runtime-kernel/heartbeat.recovery.js +39 -4
  224. package/dist/services/runtime-kernel/heartbeat.recovery.js.map +1 -1
  225. package/dist/services/runtime-kernel/heartbeat.sessions.js +1 -1
  226. package/dist/services/runtime-kernel/heartbeat.sessions.js.map +1 -1
  227. package/dist/services/runtime-kernel/heartbeat.terminal.d.ts +14 -1
  228. package/dist/services/runtime-kernel/heartbeat.terminal.d.ts.map +1 -1
  229. package/dist/services/runtime-kernel/heartbeat.terminal.js +46 -1
  230. package/dist/services/runtime-kernel/heartbeat.terminal.js.map +1 -1
  231. package/dist/services/runtime-kernel/heartbeat.wakeup.d.ts +1 -0
  232. package/dist/services/runtime-kernel/heartbeat.wakeup.d.ts.map +1 -1
  233. package/dist/services/runtime-kernel/heartbeat.wakeup.js +124 -6
  234. package/dist/services/runtime-kernel/heartbeat.wakeup.js.map +1 -1
  235. package/dist/services/workspace-runtime.services.d.ts +1 -1
  236. package/package.json +18 -18
  237. package/resources/bundled-skills/app-builder/SKILL.md +39 -9
  238. package/resources/bundled-skills/app-builder/assets/scaffold/app/globals.css +109 -16
  239. package/resources/bundled-skills/app-builder/assets/scaffold/components/contacts-workspace.tsx +176 -152
  240. package/resources/bundled-skills/app-builder/assets/scaffold/components/ui/alert.tsx +12 -0
  241. package/resources/bundled-skills/app-builder/assets/scaffold/components/ui/badge.tsx +27 -0
  242. package/resources/bundled-skills/app-builder/assets/scaffold/components/ui/button.tsx +9 -7
  243. package/resources/bundled-skills/app-builder/assets/scaffold/components/ui/card.tsx +15 -3
  244. package/resources/bundled-skills/app-builder/assets/scaffold/components/ui/empty.tsx +18 -0
  245. package/resources/bundled-skills/app-builder/assets/scaffold/components/ui/field.tsx +23 -0
  246. package/resources/bundled-skills/app-builder/assets/scaffold/components/ui/input.tsx +1 -1
  247. package/resources/bundled-skills/app-builder/assets/scaffold/components/ui/label.tsx +1 -1
  248. package/resources/bundled-skills/app-builder/assets/scaffold/components/ui/separator.tsx +6 -0
  249. package/resources/bundled-skills/app-builder/assets/scaffold/components/ui/skeleton.tsx +6 -0
  250. package/resources/bundled-skills/app-builder/assets/scaffold/components/ui/table.tsx +30 -0
  251. package/resources/bundled-skills/app-builder/assets/scaffold/components.json +20 -0
  252. package/resources/bundled-skills/app-builder/assets/scaffold/next-env.d.ts +1 -1
  253. package/resources/bundled-skills/app-builder/assets/scaffold/next.config.ts +19 -0
  254. package/resources/bundled-skills/app-builder/assets/scaffold/package.json +2 -1
  255. package/resources/bundled-skills/app-builder/assets/scaffold/rudder.app.json +1 -1
  256. package/resources/bundled-skills/app-builder/assets/scaffold/rudder.ui.json +13 -0
  257. package/resources/bundled-skills/app-builder/assets/scaffold/scripts/validate-rudder-ui.mjs +50 -0
  258. package/resources/bundled-skills/app-builder/assets/scaffold/tests/e2e/app.spec.ts +35 -1
  259. package/resources/bundled-skills/app-builder/evals/evals.json +2 -1
  260. package/resources/bundled-skills/app-builder/references/design-guidelines.md +19 -2
  261. package/resources/bundled-skills/app-builder/references/rudder-ui-preset.md +73 -0
  262. package/resources/bundled-skills/app-builder/references/scaffold-contract.md +12 -0
  263. package/resources/bundled-skills/app-builder/references/verification.md +6 -0
  264. package/resources/bundled-skills/app-builder/scripts/report-build-status.mjs +83 -0
  265. package/resources/bundled-skills/rudder-docs/SKILL.md +2 -2
  266. package/resources/bundled-skills/rudder-docs/evals/retrieval-authority-evals.json +40 -0
  267. package/resources/bundled-skills/rudder-docs/evals/trigger-evals.json +2 -2
  268. package/resources/bundled-skills/rudder-docs/references/api-reference.md +0 -2
  269. package/resources/bundled-skills/rudder-docs/references/cli-reference.md +7 -2
  270. package/resources/bundled-skills/rudder-docs/references/operating-practices.md +10 -6
  271. package/resources/bundled-skills/rudder-docs/references/plugin-authoring.md +38 -114
  272. package/resources/bundled-skills/rudder-docs/references/source-map.md +2 -0
  273. package/skills/app-builder/SKILL.md +39 -9
  274. package/skills/app-builder/assets/scaffold/app/globals.css +109 -16
  275. package/skills/app-builder/assets/scaffold/components/contacts-workspace.tsx +176 -152
  276. package/skills/app-builder/assets/scaffold/components/ui/alert.tsx +12 -0
  277. package/skills/app-builder/assets/scaffold/components/ui/badge.tsx +27 -0
  278. package/skills/app-builder/assets/scaffold/components/ui/button.tsx +9 -7
  279. package/skills/app-builder/assets/scaffold/components/ui/card.tsx +15 -3
  280. package/skills/app-builder/assets/scaffold/components/ui/empty.tsx +18 -0
  281. package/skills/app-builder/assets/scaffold/components/ui/field.tsx +23 -0
  282. package/skills/app-builder/assets/scaffold/components/ui/input.tsx +1 -1
  283. package/skills/app-builder/assets/scaffold/components/ui/label.tsx +1 -1
  284. package/skills/app-builder/assets/scaffold/components/ui/separator.tsx +6 -0
  285. package/skills/app-builder/assets/scaffold/components/ui/skeleton.tsx +6 -0
  286. package/skills/app-builder/assets/scaffold/components/ui/table.tsx +30 -0
  287. package/skills/app-builder/assets/scaffold/components.json +20 -0
  288. package/skills/app-builder/assets/scaffold/next-env.d.ts +1 -1
  289. package/skills/app-builder/assets/scaffold/next.config.ts +19 -0
  290. package/skills/app-builder/assets/scaffold/package.json +2 -1
  291. package/skills/app-builder/assets/scaffold/rudder.app.json +1 -1
  292. package/skills/app-builder/assets/scaffold/rudder.ui.json +13 -0
  293. package/skills/app-builder/assets/scaffold/scripts/validate-rudder-ui.mjs +50 -0
  294. package/skills/app-builder/assets/scaffold/tests/e2e/app.spec.ts +35 -1
  295. package/skills/app-builder/evals/evals.json +2 -1
  296. package/skills/app-builder/references/design-guidelines.md +19 -2
  297. package/skills/app-builder/references/rudder-ui-preset.md +73 -0
  298. package/skills/app-builder/references/scaffold-contract.md +12 -0
  299. package/skills/app-builder/references/verification.md +6 -0
  300. package/skills/app-builder/scripts/report-build-status.mjs +83 -0
  301. package/skills/rudder-docs/SKILL.md +2 -2
  302. package/skills/rudder-docs/evals/retrieval-authority-evals.json +40 -0
  303. package/skills/rudder-docs/evals/trigger-evals.json +2 -2
  304. package/skills/rudder-docs/references/api-reference.md +0 -2
  305. package/skills/rudder-docs/references/cli-reference.md +7 -2
  306. package/skills/rudder-docs/references/operating-practices.md +10 -6
  307. package/skills/rudder-docs/references/plugin-authoring.md +38 -114
  308. package/skills/rudder-docs/references/source-map.md +2 -0
  309. package/ui-dist/assets/{LibraryLiveSurface-cHCJmmsl.js → LibraryLiveSurface-D4uCo0l0.js} +1 -1
  310. package/ui-dist/assets/{abnfDiagram-VRR7QNED-BORJvkew.js → abnfDiagram-VRR7QNED-FF2qcR6A.js} +1 -1
  311. package/ui-dist/assets/addon-fit-4gL7JXzc.js +1 -0
  312. package/ui-dist/assets/{arc-DPUzhx87.js → arc-D5pLjh6B.js} +1 -1
  313. package/ui-dist/assets/{architectureDiagram-ZJ3FMSHR-Bz_hY8LM.js → architectureDiagram-ZJ3FMSHR-BvqY-HXg.js} +1 -1
  314. package/ui-dist/assets/{blockDiagram-677ZJIJ3-Bq1X3YkP.js → blockDiagram-677ZJIJ3-BU6ZbJ0s.js} +1 -1
  315. package/ui-dist/assets/{c4Diagram-LMCZKHZV-BawEM9Pc.js → c4Diagram-LMCZKHZV-Cl5Gsovj.js} +1 -1
  316. package/ui-dist/assets/channel-HcmprA3I.js +1 -0
  317. package/ui-dist/assets/{chunk-2Q5K7J3B-D0D5ZOaA.js → chunk-2Q5K7J3B-4a2agt_p.js} +1 -1
  318. package/ui-dist/assets/{chunk-32BRIVSS-T90P7lug.js → chunk-32BRIVSS-CF0oOO2T.js} +1 -1
  319. package/ui-dist/assets/{chunk-5VM5RSS4-jcAERTgh.js → chunk-5VM5RSS4-CsSq2zX2.js} +1 -1
  320. package/ui-dist/assets/{chunk-EX3LRPZG-t9-JXwnR.js → chunk-EX3LRPZG-B6riETVZ.js} +1 -1
  321. package/ui-dist/assets/{chunk-JWPE2WC7-hqgD1saC.js → chunk-JWPE2WC7-S-p1xu0r.js} +1 -1
  322. package/ui-dist/assets/{chunk-MOJQB5TN-BsSUoYzd.js → chunk-MOJQB5TN-mVE4v_LV.js} +1 -1
  323. package/ui-dist/assets/{chunk-RYQCIY6F-YcdDh2Zn.js → chunk-RYQCIY6F-CElbgpgs.js} +1 -1
  324. package/ui-dist/assets/{chunk-V7JOEXUC-ChFyH9Su.js → chunk-V7JOEXUC-8XM3povP.js} +1 -1
  325. package/ui-dist/assets/{chunk-VR4S4FIN-BjVK8IyX.js → chunk-VR4S4FIN-LrThp3ht.js} +1 -1
  326. package/ui-dist/assets/{chunk-XXDRQBXY-D-TvO9vT.js → chunk-XXDRQBXY-D38vLb4t.js} +1 -1
  327. package/ui-dist/assets/classDiagram-OUVF2IWQ-Dpe8LaLf.js +1 -0
  328. package/ui-dist/assets/classDiagram-v2-EOCWNBFH-Dpe8LaLf.js +1 -0
  329. package/ui-dist/assets/{cose-bilkent-JH36ORCC-DBwhASJG.js → cose-bilkent-JH36ORCC-CmpZMaDV.js} +1 -1
  330. package/ui-dist/assets/{cynefin-VYW2F7L2-SlCRmwl2.js → cynefin-VYW2F7L2-D3RnbBvI.js} +1 -1
  331. package/ui-dist/assets/{cynefinDiagram-TSTJHNR4-DImV6N_p.js → cynefinDiagram-TSTJHNR4-DZTcUojp.js} +1 -1
  332. package/ui-dist/assets/{dagre-VKFMJZFB-FH4Wv8Zn.js → dagre-VKFMJZFB-6jXSDi0S.js} +1 -1
  333. package/ui-dist/assets/{diagram-FQU43EPY-CrZvQjId.js → diagram-FQU43EPY-DIMm3mfS.js} +1 -1
  334. package/ui-dist/assets/{diagram-G47NLZAW-B7IGl_T3.js → diagram-G47NLZAW-Cyo22v0_.js} +1 -1
  335. package/ui-dist/assets/{diagram-NH7WQ7WH-CB4i7H1a.js → diagram-NH7WQ7WH-CHDV0nSL.js} +1 -1
  336. package/ui-dist/assets/{diagram-OA4YK3LP-DNyWPYY9.js → diagram-OA4YK3LP-Jijx9vQO.js} +1 -1
  337. package/ui-dist/assets/{diagram-WEI45ONY-BAhxbhpi.js → diagram-WEI45ONY-CcL19HLE.js} +1 -1
  338. package/ui-dist/assets/{ebnfDiagram-CCIWWBDH-ClXtQ9qt.js → ebnfDiagram-CCIWWBDH-D94h-RFQ.js} +1 -1
  339. package/ui-dist/assets/{erDiagram-Q63AITRT-DGXiMYfn.js → erDiagram-Q63AITRT-B3ypUGZX.js} +1 -1
  340. package/ui-dist/assets/{flowDiagram-23GEKE2U-CdZ-02zc.js → flowDiagram-23GEKE2U-DjCT6Y1o.js} +1 -1
  341. package/ui-dist/assets/{ganttDiagram-NO4QXBWP-TxhzNpta.js → ganttDiagram-NO4QXBWP-C3QVhTc9.js} +1 -1
  342. package/ui-dist/assets/{gitGraphDiagram-IHSO6WYX-D6Q_w6wR.js → gitGraphDiagram-IHSO6WYX-D0trBzU5.js} +1 -1
  343. package/ui-dist/assets/{graph-CxNmbpl9.js → graph-D1zFmVUP.js} +1 -1
  344. package/ui-dist/assets/{index-Cx6oIZPm.js → index-B0GEsWui.js} +568 -593
  345. package/ui-dist/assets/{index-BA9tMBhO.js → index-B8bxQLfN.js} +1 -1
  346. package/ui-dist/assets/{index-C_nwI4Yj.js → index-BFktZ2tu.js} +1 -1
  347. package/ui-dist/assets/index-BT7dphT4.css +32 -0
  348. package/ui-dist/assets/{index-BoTz5S-X.js → index-Bk_yesiO.js} +1 -1
  349. package/ui-dist/assets/{index-CXnqg1Oq.js → index-BwutQLG1.js} +1 -1
  350. package/ui-dist/assets/{index-AkhgKOxC.js → index-CB4zr_Ku.js} +1 -1
  351. package/ui-dist/assets/{index-Rau2cGm0.js → index-CC89UPa-.js} +1 -1
  352. package/ui-dist/assets/{index-kbWUQ1um.js → index-CFWOO6yn.js} +1 -1
  353. package/ui-dist/assets/{index-DU2LI7f9.js → index-CK8u9b07.js} +1 -1
  354. package/ui-dist/assets/{index-C12QC1Ex.js → index-CRolpP90.js} +1 -1
  355. package/ui-dist/assets/{index-Bxz75ICF.js → index-CiCRRUVV.js} +1 -1
  356. package/ui-dist/assets/{index-Do78GymY.js → index-D8JG-IU9.js} +1 -1
  357. package/ui-dist/assets/{index-CW21qWFm.js → index-DKCiVvJo.js} +1 -1
  358. package/ui-dist/assets/{index-BujwWE3j.js → index-G2yfKEf_.js} +1 -1
  359. package/ui-dist/assets/{index-BQ87dGIq.js → index-or2C22bw.js} +1 -1
  360. package/ui-dist/assets/{infoDiagram-FWYZ7A6U-CnJd4-Jq.js → infoDiagram-FWYZ7A6U-Co0nkcV4.js} +1 -1
  361. package/ui-dist/assets/{ishikawaDiagram-FXEZZL3T-Bq-qc3pD.js → ishikawaDiagram-FXEZZL3T-CkIg1Jdu.js} +1 -1
  362. package/ui-dist/assets/{journeyDiagram-5HDEW3XC-NSmpUGUA.js → journeyDiagram-5HDEW3XC-AYUT6JuJ.js} +1 -1
  363. package/ui-dist/assets/{kanban-definition-HUTT4EX6-D7pgWtfA.js → kanban-definition-HUTT4EX6-C3H2XW08.js} +1 -1
  364. package/ui-dist/assets/{layout-BRuo6LWe.js → layout-sZWyqNOu.js} +1 -1
  365. package/ui-dist/assets/{linear-CkaWI9Nd.js → linear-BLTYou8N.js} +1 -1
  366. package/ui-dist/assets/{map-CgA6tTpZ.js → map-zKBdHkX8.js} +1 -1
  367. package/ui-dist/assets/{mermaid.core-DrXOt-P6.js → mermaid.core-DbjdFip8.js} +4 -4
  368. package/ui-dist/assets/{mindmap-definition-LN4V7U3C-D9ImeWBe.js → mindmap-definition-LN4V7U3C-DcDNQ4GQ.js} +1 -1
  369. package/ui-dist/assets/{pegDiagram-2B236MQR-Cq-zZ_zz.js → pegDiagram-2B236MQR-BGq1PngU.js} +1 -1
  370. package/ui-dist/assets/{pieDiagram-ENE6RG2P-FgNgy726.js → pieDiagram-ENE6RG2P-BfXWRzNb.js} +1 -1
  371. package/ui-dist/assets/{quadrantDiagram-ABIIQ3AL-BxQbmGmi.js → quadrantDiagram-ABIIQ3AL-AYMVAbo1.js} +1 -1
  372. package/ui-dist/assets/{railroadDiagram-RFXS5EU6-CrpbkPH2.js → railroadDiagram-RFXS5EU6-B0PoG0Ih.js} +1 -1
  373. package/ui-dist/assets/{requirementDiagram-TGXJPOKE-DQ-65ZW6.js → requirementDiagram-TGXJPOKE-Cuuu9wfw.js} +1 -1
  374. package/ui-dist/assets/{sankeyDiagram-HTMAVEWB-Bom0lMZm.js → sankeyDiagram-HTMAVEWB-BceAc42f.js} +1 -1
  375. package/ui-dist/assets/{sequenceDiagram-DBY2YBRQ-C1MSDLDj.js → sequenceDiagram-DBY2YBRQ-cqJ71-Rw.js} +1 -1
  376. package/ui-dist/assets/{sizeCapture-X5ZJPWSS-Bn1vxebD.js → sizeCapture-X5ZJPWSS-DQ6MibbA.js} +1 -1
  377. package/ui-dist/assets/{stateDiagram-2N3HPSRC-GRRQpmzI.js → stateDiagram-2N3HPSRC-Bdl-XY7t.js} +1 -1
  378. package/ui-dist/assets/stateDiagram-v2-6OUMAXLB-Cjj7yPIO.js +1 -0
  379. package/ui-dist/assets/{swimlanes-5IMT3BWC-BcOOCZ4q.js → swimlanes-5IMT3BWC-Dpo2HDtE.js} +2 -2
  380. package/ui-dist/assets/swimlanesDiagram-G3AALYLV-CPmIkNCu.js +8 -0
  381. package/ui-dist/assets/{timeline-definition-FHXFAJF6-gi6amswh.js → timeline-definition-FHXFAJF6-BzmJ-xnC.js} +1 -1
  382. package/ui-dist/assets/{vennDiagram-L72KCM5P-B9uqeyQt.js → vennDiagram-L72KCM5P-BF2EI7vn.js} +1 -1
  383. package/ui-dist/assets/{wardleyDiagram-EHGQE667-BnqWAMiE.js → wardleyDiagram-EHGQE667-DM65x1i1.js} +1 -1
  384. package/ui-dist/assets/xterm-DZP7bLZ5.js +9 -0
  385. package/ui-dist/assets/{xychartDiagram-FW5EYKEG-BJXKltIN.js → xychartDiagram-FW5EYKEG-3Q2t9pdU.js} +1 -1
  386. package/ui-dist/index.html +2 -2
  387. package/dist/bootstrap/plugin-host-runtime.d.ts +0 -116
  388. package/dist/bootstrap/plugin-host-runtime.d.ts.map +0 -1
  389. package/dist/bootstrap/plugin-host-runtime.js +0 -179
  390. package/dist/bootstrap/plugin-host-runtime.js.map +0 -1
  391. package/dist/bundled-plugins/plugin-linear/README.md +0 -22
  392. package/dist/bundled-plugins/plugin-linear/dist/manifest.js +0 -183
  393. package/dist/bundled-plugins/plugin-linear/dist/manifest.js.map +0 -7
  394. package/dist/bundled-plugins/plugin-linear/dist/ui/index.js +0 -1285
  395. package/dist/bundled-plugins/plugin-linear/dist/ui/index.js.map +0 -7
  396. package/dist/bundled-plugins/plugin-linear/dist/worker.js +0 -10699
  397. package/dist/bundled-plugins/plugin-linear/dist/worker.js.map +0 -7
  398. package/dist/bundled-plugins/plugin-linear/package.json +0 -42
  399. package/dist/routes/plugin-ui-static.d.ts +0 -70
  400. package/dist/routes/plugin-ui-static.d.ts.map +0 -1
  401. package/dist/routes/plugin-ui-static.js +0 -375
  402. package/dist/routes/plugin-ui-static.js.map +0 -1
  403. package/dist/routes/plugins.d.ts +0 -120
  404. package/dist/routes/plugins.d.ts.map +0 -1
  405. package/dist/routes/plugins.js +0 -1125
  406. package/dist/routes/plugins.js.map +0 -1
  407. package/dist/routes/plugins.operations-routes.d.ts +0 -28
  408. package/dist/routes/plugins.operations-routes.d.ts.map +0 -1
  409. package/dist/routes/plugins.operations-routes.js +0 -720
  410. package/dist/routes/plugins.operations-routes.js.map +0 -1
  411. package/dist/services/plugin-capability-validator.d.ts +0 -108
  412. package/dist/services/plugin-capability-validator.d.ts.map +0 -1
  413. package/dist/services/plugin-capability-validator.js +0 -268
  414. package/dist/services/plugin-capability-validator.js.map +0 -1
  415. package/dist/services/plugin-config-validator.d.ts +0 -26
  416. package/dist/services/plugin-config-validator.d.ts.map +0 -1
  417. package/dist/services/plugin-config-validator.js +0 -41
  418. package/dist/services/plugin-config-validator.js.map +0 -1
  419. package/dist/services/plugin-dev-watcher.d.ts +0 -47
  420. package/dist/services/plugin-dev-watcher.d.ts.map +0 -1
  421. package/dist/services/plugin-dev-watcher.js +0 -275
  422. package/dist/services/plugin-dev-watcher.js.map +0 -1
  423. package/dist/services/plugin-event-bus.d.ts +0 -149
  424. package/dist/services/plugin-event-bus.d.ts.map +0 -1
  425. package/dist/services/plugin-event-bus.js +0 -258
  426. package/dist/services/plugin-event-bus.js.map +0 -1
  427. package/dist/services/plugin-host-service-cleanup.d.ts +0 -14
  428. package/dist/services/plugin-host-service-cleanup.d.ts.map +0 -1
  429. package/dist/services/plugin-host-service-cleanup.js +0 -37
  430. package/dist/services/plugin-host-service-cleanup.js.map +0 -1
  431. package/dist/services/plugin-host-services.d.ts +0 -13
  432. package/dist/services/plugin-host-services.d.ts.map +0 -1
  433. package/dist/services/plugin-host-services.js +0 -933
  434. package/dist/services/plugin-host-services.js.map +0 -1
  435. package/dist/services/plugin-job-coordinator.d.ts +0 -81
  436. package/dist/services/plugin-job-coordinator.d.ts.map +0 -1
  437. package/dist/services/plugin-job-coordinator.js +0 -172
  438. package/dist/services/plugin-job-coordinator.js.map +0 -1
  439. package/dist/services/plugin-job-scheduler.d.ts +0 -163
  440. package/dist/services/plugin-job-scheduler.d.ts.map +0 -1
  441. package/dist/services/plugin-job-scheduler.js +0 -452
  442. package/dist/services/plugin-job-scheduler.js.map +0 -1
  443. package/dist/services/plugin-job-store.d.ts +0 -208
  444. package/dist/services/plugin-job-store.d.ts.map +0 -1
  445. package/dist/services/plugin-job-store.js +0 -350
  446. package/dist/services/plugin-job-store.js.map +0 -1
  447. package/dist/services/plugin-lifecycle.d.ts +0 -240
  448. package/dist/services/plugin-lifecycle.d.ts.map +0 -1
  449. package/dist/services/plugin-lifecycle.js +0 -439
  450. package/dist/services/plugin-lifecycle.js.map +0 -1
  451. package/dist/services/plugin-loader.core.d.ts +0 -40
  452. package/dist/services/plugin-loader.core.d.ts.map +0 -1
  453. package/dist/services/plugin-loader.core.js +0 -879
  454. package/dist/services/plugin-loader.core.js.map +0 -1
  455. package/dist/services/plugin-loader.d.ts +0 -30
  456. package/dist/services/plugin-loader.d.ts.map +0 -1
  457. package/dist/services/plugin-loader.helpers.d.ts +0 -495
  458. package/dist/services/plugin-loader.helpers.d.ts.map +0 -1
  459. package/dist/services/plugin-loader.helpers.js +0 -238
  460. package/dist/services/plugin-loader.helpers.js.map +0 -1
  461. package/dist/services/plugin-loader.js +0 -30
  462. package/dist/services/plugin-loader.js.map +0 -1
  463. package/dist/services/plugin-loader.worker-paths.d.ts +0 -37
  464. package/dist/services/plugin-loader.worker-paths.d.ts.map +0 -1
  465. package/dist/services/plugin-loader.worker-paths.js +0 -62
  466. package/dist/services/plugin-loader.worker-paths.js.map +0 -1
  467. package/dist/services/plugin-log-retention.d.ts +0 -20
  468. package/dist/services/plugin-log-retention.d.ts.map +0 -1
  469. package/dist/services/plugin-log-retention.js +0 -63
  470. package/dist/services/plugin-log-retention.js.map +0 -1
  471. package/dist/services/plugin-manifest-validator.d.ts +0 -90
  472. package/dist/services/plugin-manifest-validator.d.ts.map +0 -1
  473. package/dist/services/plugin-manifest-validator.js +0 -72
  474. package/dist/services/plugin-manifest-validator.js.map +0 -1
  475. package/dist/services/plugin-registry.d.ts +0 -2542
  476. package/dist/services/plugin-registry.d.ts.map +0 -1
  477. package/dist/services/plugin-registry.js +0 -536
  478. package/dist/services/plugin-registry.js.map +0 -1
  479. package/dist/services/plugin-runtime-sandbox.d.ts +0 -40
  480. package/dist/services/plugin-runtime-sandbox.d.ts.map +0 -1
  481. package/dist/services/plugin-runtime-sandbox.js +0 -154
  482. package/dist/services/plugin-runtime-sandbox.js.map +0 -1
  483. package/dist/services/plugin-secrets-handler.d.ts +0 -81
  484. package/dist/services/plugin-secrets-handler.d.ts.map +0 -1
  485. package/dist/services/plugin-secrets-handler.js +0 -275
  486. package/dist/services/plugin-secrets-handler.js.map +0 -1
  487. package/dist/services/plugin-state-store.d.ts +0 -92
  488. package/dist/services/plugin-state-store.d.ts.map +0 -1
  489. package/dist/services/plugin-state-store.js +0 -190
  490. package/dist/services/plugin-state-store.js.map +0 -1
  491. package/dist/services/plugin-stream-bus.d.ts +0 -29
  492. package/dist/services/plugin-stream-bus.d.ts.map +0 -1
  493. package/dist/services/plugin-stream-bus.js +0 -48
  494. package/dist/services/plugin-stream-bus.js.map +0 -1
  495. package/dist/services/plugin-tool-dispatcher.d.ts +0 -180
  496. package/dist/services/plugin-tool-dispatcher.d.ts.map +0 -1
  497. package/dist/services/plugin-tool-dispatcher.js +0 -224
  498. package/dist/services/plugin-tool-dispatcher.js.map +0 -1
  499. package/dist/services/plugin-tool-registry.d.ts +0 -192
  500. package/dist/services/plugin-tool-registry.d.ts.map +0 -1
  501. package/dist/services/plugin-tool-registry.js +0 -224
  502. package/dist/services/plugin-tool-registry.js.map +0 -1
  503. package/dist/services/plugin-worker-manager.d.ts +0 -260
  504. package/dist/services/plugin-worker-manager.d.ts.map +0 -1
  505. package/dist/services/plugin-worker-manager.js +0 -836
  506. package/dist/services/plugin-worker-manager.js.map +0 -1
  507. package/ui-dist/assets/channel-C08AyYJr.js +0 -1
  508. package/ui-dist/assets/classDiagram-OUVF2IWQ-BIXq6fec.js +0 -1
  509. package/ui-dist/assets/classDiagram-v2-EOCWNBFH-BIXq6fec.js +0 -1
  510. package/ui-dist/assets/index-BmXb0yC1.css +0 -1
  511. package/ui-dist/assets/stateDiagram-v2-6OUMAXLB-KvSJhiLM.js +0 -1
  512. package/ui-dist/assets/swimlanesDiagram-G3AALYLV-Cr92NnJ4.js +0 -8
@@ -1,5 +1,5 @@
1
1
  import { hasSessionCompactionThresholds } from "@rudderhq/agent-runtime-utils";
2
- import { agentRuntimeState, agents, agentTaskSessions, agentWakeupRequests, heartbeatRunEvents, heartbeatRuns, issues, organizations } from "@rudderhq/db";
2
+ import { agentRuntimeState, agents, agentTaskSessions, agentWakeupRequests, goals, heartbeatRunEvents, heartbeatRuns, issues, organizations } from "@rudderhq/db";
3
3
  import { summarizeTokenUsage, toHeartbeatRun } from "@rudderhq/shared";
4
4
  import { and, asc, desc, eq, gt, gte, inArray, lte, ne, or, sql } from "drizzle-orm";
5
5
  import { randomUUID } from "node:crypto";
@@ -8,6 +8,7 @@ import { killChildProcessTree, parseObject } from "../../agent-runtimes/utils.js
8
8
  import { notFound } from "../../errors.js";
9
9
  import { redactCurrentUserText, redactCurrentUserValue } from "../../log-redaction.js";
10
10
  import { logger } from "../../middleware/logger.js";
11
+ import { agentIssueCreationService, getAgentIssueCreationRequestIdFromRunContext, } from "../agent-issue-creation.js";
11
12
  import { agentRunContextService } from "../agent-run-context.js";
12
13
  import { approvalService } from "../approvals.js";
13
14
  import { publishAutomationRunOutputToChat } from "../automation-chat-output.js";
@@ -105,6 +106,7 @@ export function heartbeatService(db, testHooks) {
105
106
  const runContextSvc = agentRunContextService(db);
106
107
  const approvalsSvc = approvalService(db);
107
108
  const issuesSvc = issueService(db);
109
+ const agentIssueCreationSvc = agentIssueCreationService(db);
108
110
  const executionWorkspacesSvc = runWorkspaceService(db);
109
111
  const workspaceOperationsSvc = workspaceOperationService(db);
110
112
  const budgetHooks = {
@@ -493,6 +495,44 @@ export function heartbeatService(db, testHooks) {
493
495
  return updated;
494
496
  }
495
497
  async function transitionRunToTerminal(runId, status, patch, opts) {
498
+ const runBeforeTerminal = await getRun(runId);
499
+ const agentIssueCreationSettlement = runBeforeTerminal
500
+ ? await (async () => {
501
+ const contextRequestId = getAgentIssueCreationRequestIdFromRunContext(runBeforeTerminal.contextSnapshot);
502
+ if (contextRequestId) {
503
+ return {
504
+ orgId: runBeforeTerminal.orgId,
505
+ agentId: runBeforeTerminal.agentId,
506
+ runId: runBeforeTerminal.id,
507
+ requestId: contextRequestId,
508
+ };
509
+ }
510
+ return await agentIssueCreationSvc
511
+ .getSettlementIntentForRun(runBeforeTerminal.orgId, runBeforeTerminal.agentId, runBeforeTerminal.id)
512
+ .catch((error) => {
513
+ logger.warn({ err: error, runId }, "failed to resolve Agent Issue creation settlement terminal effect");
514
+ return null;
515
+ });
516
+ })()
517
+ : null;
518
+ const agentIssueCreationNotification = runBeforeTerminal
519
+ ? await agentIssueCreationSvc
520
+ .getNotificationIntentForRun(runBeforeTerminal.orgId, runBeforeTerminal.agentId, runId)
521
+ .catch((error) => {
522
+ logger.warn({ err: error, runId }, "failed to resolve Agent Issue creation notification terminal effect");
523
+ return null;
524
+ })
525
+ : null;
526
+ const terminalEffectsIntent = {
527
+ version: 1,
528
+ ...(opts?.terminalEffectsIntent ?? {}),
529
+ ...(agentIssueCreationSettlement
530
+ ? { agentIssueCreationSettlement }
531
+ : {}),
532
+ ...(agentIssueCreationNotification
533
+ ? { agentIssueCreationNotification }
534
+ : {}),
535
+ };
496
536
  const updated = await transitionHeartbeatRunToTerminal(db, {
497
537
  runId,
498
538
  status,
@@ -500,12 +540,43 @@ export function heartbeatService(db, testHooks) {
500
540
  expectedStatuses: opts?.expectedStatuses,
501
541
  activityWatermark: opts?.activityWatermark,
502
542
  terminalEffectsPending: opts?.terminalEffectsPending,
503
- terminalEffectsIntent: opts?.terminalEffectsIntent,
543
+ terminalEffectsIntent,
504
544
  processExitedAt: opts?.processExitedAt,
505
545
  expectedExecutionOwnerToken: opts?.expectedExecutionOwnerToken,
506
546
  });
507
- if (updated)
547
+ if (updated) {
508
548
  publishRunStatus(updated);
549
+ const context = parseObject(updated.contextSnapshot);
550
+ const requestId = agentIssueCreationSettlement?.requestId
551
+ ?? getAgentIssueCreationRequestIdFromRunContext(context);
552
+ if (requestId) {
553
+ const settledRequest = await agentIssueCreationSvc.settleForRun({
554
+ orgId: updated.orgId,
555
+ agentId: updated.agentId,
556
+ runId: updated.id,
557
+ requestId,
558
+ runStatus: updated.status,
559
+ error: updated.error,
560
+ }).catch((error) => {
561
+ logger.warn({ err: error, orgId: updated.orgId, agentId: updated.agentId, runId: updated.id, requestId }, "failed to settle Agent Issue creation request after run termination");
562
+ return null;
563
+ });
564
+ if (settledRequest?.status === "succeeded" && settledRequest.createdIssueId) {
565
+ await reconcileTerminalEffectsIntent(updated.id, {
566
+ version: 1,
567
+ agentIssueCreationNotification: {
568
+ orgId: updated.orgId,
569
+ agentId: updated.agentId,
570
+ runId: updated.id,
571
+ requestId: settledRequest.id,
572
+ issueId: settledRequest.createdIssueId,
573
+ },
574
+ }).catch((error) => {
575
+ logger.warn({ err: error, orgId: updated.orgId, agentId: updated.agentId, runId: updated.id, requestId }, "failed to record Agent Issue creation notification terminal effect");
576
+ });
577
+ }
578
+ }
579
+ }
509
580
  return updated;
510
581
  }
511
582
  async function reconcileRunEvidence(runId, patch) {
@@ -846,6 +917,30 @@ export function heartbeatService(db, testHooks) {
846
917
  if (!currentRun || currentRun.status !== "queued")
847
918
  return null;
848
919
  const currentContext = parseObject(currentRun.contextSnapshot);
920
+ const goalContext = parseObject(currentContext.goal);
921
+ const goalId = readNonEmptyString(currentContext.goalId) ?? readNonEmptyString(goalContext.id);
922
+ const wakeReason = readNonEmptyString(currentContext.wakeReason) ?? readNonEmptyString(wakeup?.reason);
923
+ if (currentRun.wakeupRequestId
924
+ && goalId
925
+ && wakeReason
926
+ && ["goal_started", "goal_feedback", "goal_change_decided"].includes(wakeReason)) {
927
+ await tx.execute(sql `select id from organizations where id = ${currentRun.orgId} for update`);
928
+ const focusedGoal = await tx.select({ id: goals.id }).from(goals).where(and(eq(goals.orgId, currentRun.orgId), eq(goals.lifecycle, "active"), eq(goals.focus, true))).limit(1).then((rows) => rows[0] ?? null);
929
+ if (focusedGoal && focusedGoal.id !== goalId) {
930
+ const deferred = await tx.update(agentWakeupRequests).set({
931
+ status: "deferred_goal_focus",
932
+ runId: null,
933
+ claimedAt: null,
934
+ finishedAt: null,
935
+ error: "goal.focused_elsewhere",
936
+ updatedAt: new Date(),
937
+ }).where(and(eq(agentWakeupRequests.id, currentRun.wakeupRequestId), eq(agentWakeupRequests.runId, currentRun.id), eq(agentWakeupRequests.status, "queued"))).returning().then((rows) => rows[0] ?? null);
938
+ if (!deferred)
939
+ return null;
940
+ await tx.delete(heartbeatRuns).where(and(eq(heartbeatRuns.id, currentRun.id), eq(heartbeatRuns.status, "queued")));
941
+ return null;
942
+ }
943
+ }
849
944
  const currentTaskKey = deriveTaskKey(currentContext, null);
850
945
  const resetTaskSession = shouldResetTaskSessionForWake(currentContext);
851
946
  const sessionCodec = getAgentRuntimeSessionCodec(agent.agentRuntimeType);
@@ -983,130 +1078,139 @@ export function heartbeatService(db, testHooks) {
983
1078
  const staleThresholdMs = opts?.staleThresholdMs ?? 0;
984
1079
  const now = opts?.now ?? new Date();
985
1080
  const recoveryCutoff = opts?.recoveryCutoff ?? now;
986
- // Find all runs stuck in "running" state (queued runs are legitimately waiting; resumeQueuedRuns handles them)
987
- const activeRuns = await db
988
- .select({
989
- run: heartbeatRuns,
990
- agentRuntimeType: agents.agentRuntimeType,
991
- })
992
- .from(heartbeatRuns)
993
- .innerJoin(agents, eq(heartbeatRuns.agentId, agents.id))
994
- .where(or(eq(heartbeatRuns.status, "running"), eq(heartbeatRuns.terminalEffectsPending, true)));
995
1081
  const reaped = [];
996
- for (const { run, agentRuntimeType } of activeRuns) {
997
- if (run.terminalEffectsPending) {
998
- if (!run.processExitedAt) {
999
- const exited = await terminateRunProcessAndWait(run, agentRuntimeType);
1000
- if (!exited || activeRunExecutions.has(run.id))
1082
+ try {
1083
+ // Find all runs stuck in "running" state (queued runs are legitimately waiting; resumeQueuedRuns handles them)
1084
+ const activeRuns = await db
1085
+ .select({
1086
+ run: heartbeatRuns,
1087
+ agentRuntimeType: agents.agentRuntimeType,
1088
+ })
1089
+ .from(heartbeatRuns)
1090
+ .innerJoin(agents, eq(heartbeatRuns.agentId, agents.id))
1091
+ .where(or(eq(heartbeatRuns.status, "running"), eq(heartbeatRuns.terminalEffectsPending, true)));
1092
+ for (const { run, agentRuntimeType } of activeRuns) {
1093
+ if (run.terminalEffectsPending) {
1094
+ if (!run.processExitedAt) {
1095
+ const exited = await terminateRunProcessAndWait(run, agentRuntimeType);
1096
+ if (!exited || activeRunExecutions.has(run.id))
1097
+ continue;
1098
+ await acknowledgeRunProcessExit(run.id);
1099
+ }
1100
+ const completed = await completeTerminalControlEffects(run);
1101
+ if (!completed)
1001
1102
  continue;
1002
- await acknowledgeRunProcessExit(run.id);
1003
- }
1004
- const completed = await completeTerminalControlEffects(run);
1005
- if (!completed)
1006
- continue;
1007
- reaped.push(run.id);
1008
- continue;
1009
- }
1010
- // Apply staleness threshold to avoid false positives
1011
- if (staleThresholdMs > 0) {
1012
- const refTime = run.updatedAt ? new Date(run.updatedAt).getTime() : 0;
1013
- if (now.getTime() - refTime < staleThresholdMs)
1014
- continue;
1015
- }
1016
- // The lease timer pauses while the host sleeps, but the child process
1017
- // and this server's execution registry can remain alive. Preserve that
1018
- // local execution instead of turning it into a process-loss retry.
1019
- if (activeRunExecutions.has(run.id) || runningProcesses.has(run.id)) {
1020
- if (!localExecutionOwnerMatches(run.id, run.executionOwnerToken)) {
1021
- abortRunExecution(run.id);
1103
+ reaped.push(run.id);
1022
1104
  continue;
1023
1105
  }
1024
- if (run.executionOwnerToken) {
1025
- const renewed = await renewRunExecutionLease(run.id, run.executionOwnerToken, now);
1026
- if (!renewed)
1106
+ // Apply staleness threshold to avoid false positives
1107
+ if (staleThresholdMs > 0) {
1108
+ const refTime = run.updatedAt ? new Date(run.updatedAt).getTime() : 0;
1109
+ if (now.getTime() - refTime < staleThresholdMs)
1110
+ continue;
1111
+ }
1112
+ // The lease timer pauses while the host sleeps, but the child process
1113
+ // and this server's execution registry can remain alive. Preserve that
1114
+ // local execution instead of turning it into a process-loss retry.
1115
+ if (activeRunExecutions.has(run.id) || runningProcesses.has(run.id)) {
1116
+ if (!localExecutionOwnerMatches(run.id, run.executionOwnerToken)) {
1027
1117
  abortRunExecution(run.id);
1118
+ continue;
1119
+ }
1120
+ if (run.executionOwnerToken) {
1121
+ const renewed = await renewRunExecutionLease(run.id, run.executionOwnerToken, now);
1122
+ if (!renewed)
1123
+ abortRunExecution(run.id);
1124
+ }
1125
+ continue;
1028
1126
  }
1029
- continue;
1030
- }
1031
- const recoveryClaim = await claimExpiredHeartbeatRunExecution(db, run.id, { now, recoveryCutoff });
1032
- if (!recoveryClaim)
1033
- continue;
1034
- const claimedRun = recoveryClaim.run;
1035
- const tracksLocalChild = isTrackedLocalChildProcessAdapter(agentRuntimeType);
1036
- let detachedTerminationMessage = null;
1037
- if (!claimedRun.processExitedAt && tracksLocalChild && claimedRun.processPid && isProcessAlive(claimedRun.processPid)) {
1038
- const termination = await terminateOrphanedProcess(claimedRun.processPid);
1039
- if (termination.stillAlive) {
1040
- const detachedMessage = termination.error
1041
- ? `Lost in-memory process handle, child pid ${claimedRun.processPid} is still alive, and Rudder could not terminate it: ${termination.error}`
1042
- : `Lost in-memory process handle, but child pid ${claimedRun.processPid} is still alive`;
1043
- const detachedRun = await setRunStatus(claimedRun.id, "running", {
1044
- error: detachedMessage,
1045
- errorCode: DETACHED_PROCESS_ERROR_CODE,
1046
- });
1047
- if (detachedRun) {
1048
- await appendRunEvent(detachedRun, {
1049
- eventType: "lifecycle",
1050
- stream: "system",
1051
- level: "warn",
1052
- message: detachedMessage,
1053
- payload: {
1054
- processPid: claimedRun.processPid,
1055
- },
1127
+ const recoveryClaim = await claimExpiredHeartbeatRunExecution(db, run.id, { now, recoveryCutoff });
1128
+ if (!recoveryClaim)
1129
+ continue;
1130
+ const claimedRun = recoveryClaim.run;
1131
+ const tracksLocalChild = isTrackedLocalChildProcessAdapter(agentRuntimeType);
1132
+ let detachedTerminationMessage = null;
1133
+ if (!claimedRun.processExitedAt && tracksLocalChild && claimedRun.processPid && isProcessAlive(claimedRun.processPid)) {
1134
+ const termination = await terminateOrphanedProcess(claimedRun.processPid);
1135
+ if (termination.stillAlive) {
1136
+ const detachedMessage = termination.error
1137
+ ? `Lost in-memory process handle, child pid ${claimedRun.processPid} is still alive, and Rudder could not terminate it: ${termination.error}`
1138
+ : `Lost in-memory process handle, but child pid ${claimedRun.processPid} is still alive`;
1139
+ const detachedRun = await setRunStatus(claimedRun.id, "running", {
1140
+ error: detachedMessage,
1141
+ errorCode: DETACHED_PROCESS_ERROR_CODE,
1056
1142
  });
1143
+ if (detachedRun) {
1144
+ await appendRunEvent(detachedRun, {
1145
+ eventType: "lifecycle",
1146
+ stream: "system",
1147
+ level: "warn",
1148
+ message: detachedMessage,
1149
+ payload: {
1150
+ processPid: claimedRun.processPid,
1151
+ },
1152
+ });
1153
+ }
1154
+ continue;
1057
1155
  }
1156
+ detachedTerminationMessage = termination.terminationSignal
1157
+ ? `Terminated detached child pid ${claimedRun.processPid} with ${termination.terminationSignal} after Rudder lost its process handle`
1158
+ : `Detached child pid ${claimedRun.processPid} exited before Rudder could terminate it`;
1159
+ }
1160
+ const shouldRetry = tracksLocalChild && !!claimedRun.processPid && (claimedRun.processLossRetryCount ?? 0) < 1;
1161
+ const baseMessage = claimedRun.processPid
1162
+ ? `Process lost -- child pid ${claimedRun.processPid} is no longer running`
1163
+ : "Process lost -- server may have restarted";
1164
+ let finalizedRun = await transitionRunToTerminal(claimedRun.id, "failed", {
1165
+ error: shouldRetry ? `${baseMessage}; retrying once` : baseMessage,
1166
+ errorCode: "process_lost",
1167
+ finishedAt: now,
1168
+ }, {
1169
+ processExitedAt: now,
1170
+ terminalEffectsIntent: shouldRetry ? { version: 1, processLossRetry: true } : { version: 1 },
1171
+ expectedExecutionOwnerToken: recoveryClaim.ownerToken,
1172
+ });
1173
+ if (!finalizedRun)
1058
1174
  continue;
1175
+ await setWakeupStatus(claimedRun.wakeupRequestId, "failed", {
1176
+ finishedAt: now,
1177
+ error: shouldRetry ? `${baseMessage}; retrying once` : baseMessage,
1178
+ });
1179
+ if (detachedTerminationMessage) {
1180
+ await appendRunEvent(finalizedRun, {
1181
+ eventType: "lifecycle",
1182
+ stream: "system",
1183
+ level: "warn",
1184
+ message: detachedTerminationMessage,
1185
+ payload: {
1186
+ ...(claimedRun.processPid ? { processPid: claimedRun.processPid } : {}),
1187
+ },
1188
+ });
1059
1189
  }
1060
- detachedTerminationMessage = termination.terminationSignal
1061
- ? `Terminated detached child pid ${claimedRun.processPid} with ${termination.terminationSignal} after Rudder lost its process handle`
1062
- : `Detached child pid ${claimedRun.processPid} exited before Rudder could terminate it`;
1063
- }
1064
- const shouldRetry = tracksLocalChild && !!claimedRun.processPid && (claimedRun.processLossRetryCount ?? 0) < 1;
1065
- const baseMessage = claimedRun.processPid
1066
- ? `Process lost -- child pid ${claimedRun.processPid} is no longer running`
1067
- : "Process lost -- server may have restarted";
1068
- let finalizedRun = await transitionRunToTerminal(claimedRun.id, "failed", {
1069
- error: shouldRetry ? `${baseMessage}; retrying once` : baseMessage,
1070
- errorCode: "process_lost",
1071
- finishedAt: now,
1072
- }, {
1073
- processExitedAt: now,
1074
- terminalEffectsIntent: shouldRetry ? { version: 1, processLossRetry: true } : { version: 1 },
1075
- expectedExecutionOwnerToken: recoveryClaim.ownerToken,
1076
- });
1077
- if (!finalizedRun)
1078
- continue;
1079
- await setWakeupStatus(claimedRun.wakeupRequestId, "failed", {
1080
- finishedAt: now,
1081
- error: shouldRetry ? `${baseMessage}; retrying once` : baseMessage,
1082
- });
1083
- if (detachedTerminationMessage) {
1084
1190
  await appendRunEvent(finalizedRun, {
1085
1191
  eventType: "lifecycle",
1086
1192
  stream: "system",
1087
- level: "warn",
1088
- message: detachedTerminationMessage,
1193
+ level: "error",
1194
+ message: shouldRetry
1195
+ ? `${baseMessage}; retry will be queued after terminal effects complete`
1196
+ : baseMessage,
1089
1197
  payload: {
1090
1198
  ...(claimedRun.processPid ? { processPid: claimedRun.processPid } : {}),
1091
1199
  },
1092
1200
  });
1201
+ const completed = await completeTerminalControlEffects(finalizedRun);
1202
+ runningProcesses.delete(claimedRun.id);
1203
+ if (!completed)
1204
+ continue;
1205
+ reaped.push(claimedRun.id);
1093
1206
  }
1094
- await appendRunEvent(finalizedRun, {
1095
- eventType: "lifecycle",
1096
- stream: "system",
1097
- level: "error",
1098
- message: shouldRetry
1099
- ? `${baseMessage}; retry will be queued after terminal effects complete`
1100
- : baseMessage,
1101
- payload: {
1102
- ...(claimedRun.processPid ? { processPid: claimedRun.processPid } : {}),
1103
- },
1207
+ }
1208
+ finally {
1209
+ // Terminal effects are the fast path. Keep a request-scoped sweep as a
1210
+ // second durable path for runs whose effect was lost or dead-lettered.
1211
+ await agentIssueCreationSvc.reconcileTerminalSettlements().catch((error) => {
1212
+ logger.warn({ err: error }, "failed to reconcile terminal Agent Issue creation requests");
1104
1213
  });
1105
- const completed = await completeTerminalControlEffects(finalizedRun);
1106
- runningProcesses.delete(claimedRun.id);
1107
- if (!completed)
1108
- continue;
1109
- reaped.push(claimedRun.id);
1110
1214
  }
1111
1215
  if (reaped.length > 0) {
1112
1216
  logger.warn({ reapedCount: reaped.length, runIds: reaped }, "reaped orphaned heartbeat runs");
@@ -1283,7 +1387,9 @@ export function heartbeatService(db, testHooks) {
1283
1387
  async function reapTimedOutRuns(opts) {
1284
1388
  return withHeartbeatRecoveryLock(() => reapTimedOutRunsLocked(opts));
1285
1389
  }
1390
+ let recoverPendingWakeups = null;
1286
1391
  async function resumeQueuedRuns() {
1392
+ await recoverPendingWakeups?.();
1287
1393
  const queuedRuns = await db
1288
1394
  .select({ agentId: heartbeatRuns.agentId })
1289
1395
  .from(heartbeatRuns)
@@ -1473,6 +1579,45 @@ export function heartbeatService(db, testHooks) {
1473
1579
  lastError: taskSessionIntent.lastError ?? null,
1474
1580
  }));
1475
1581
  }
1582
+ const agentIssueCreationSettlement = intent.agentIssueCreationSettlement;
1583
+ if (agentIssueCreationSettlement) {
1584
+ await runClaimedEffect("agent_issue_creation_settlement", async () => {
1585
+ const settledRequest = await agentIssueCreationSvc.settleForRun({
1586
+ orgId: agentIssueCreationSettlement.orgId,
1587
+ agentId: agentIssueCreationSettlement.agentId,
1588
+ runId: agentIssueCreationSettlement.runId,
1589
+ requestId: agentIssueCreationSettlement.requestId,
1590
+ runStatus: current.status,
1591
+ error: current.error,
1592
+ });
1593
+ const request = settledRequest
1594
+ ?? await agentIssueCreationSvc.getById(agentIssueCreationSettlement.orgId, agentIssueCreationSettlement.requestId);
1595
+ if (request?.status === "succeeded" && request.createdIssueId) {
1596
+ const notificationIntent = {
1597
+ orgId: agentIssueCreationSettlement.orgId,
1598
+ agentId: agentIssueCreationSettlement.agentId,
1599
+ runId: agentIssueCreationSettlement.runId,
1600
+ requestId: request.id,
1601
+ issueId: request.createdIssueId,
1602
+ };
1603
+ intent.agentIssueCreationNotification ??= notificationIntent;
1604
+ await reconcileTerminalEffectsIntent(current.id, {
1605
+ version: 1,
1606
+ agentIssueCreationNotification: notificationIntent,
1607
+ });
1608
+ }
1609
+ else if (request
1610
+ && !request.createdIssueId
1611
+ && ["queued", "running", "deferred"].includes(request.status)) {
1612
+ throw new Error("Agent Issue creation request remained active after terminal settlement");
1613
+ }
1614
+ return settledRequest;
1615
+ });
1616
+ }
1617
+ const agentIssueCreationNotification = intent.agentIssueCreationNotification;
1618
+ if (agentIssueCreationNotification) {
1619
+ await runClaimedEffect("agent_issue_creation_notification", () => agentIssueCreationSvc.publishNotificationForRequest(agentIssueCreationNotification));
1620
+ }
1476
1621
  if (intent.processLossRetry) {
1477
1622
  await runClaimedEffect("process_loss_retry", () => {
1478
1623
  if (!agent)
@@ -1556,6 +1701,7 @@ export function heartbeatService(db, testHooks) {
1556
1701
  activeRunExecutions.add(queuedRun.id);
1557
1702
  runAbortControllers.set(queuedRun.id, new AbortController());
1558
1703
  try {
1704
+ await testHooks?.beforeRunClaim?.(queuedRun);
1559
1705
  const claimed = await claimQueuedRun(queuedRun);
1560
1706
  if (claimed) {
1561
1707
  claimedRuns.push(claimed);
@@ -1590,6 +1736,7 @@ export function heartbeatService(db, testHooks) {
1590
1736
  startNextQueuedRunForAgent,
1591
1737
  afterIssuePromotionCommitted: testHooks?.afterIssuePromotionCommitted,
1592
1738
  });
1739
+ recoverPendingWakeups = wakeupHandlers.recoverPendingWakeups;
1593
1740
  const releaseHandlers = createHeartbeatReleaseHandlers({
1594
1741
  ...baseContext,
1595
1742
  ...recoveryHandlers,
@@ -1608,6 +1755,69 @@ export function heartbeatService(db, testHooks) {
1608
1755
  const { releaseIssueExecutionAndPromote } = releaseHandlers;
1609
1756
  const { executeRun } = executeHandlers;
1610
1757
  const { resumeDeferredWakeupsForAgent, listProjectScopedRunIds, listProjectScopedWakeupIds, cancelPendingWakeupsForBudgetScope, cancelRunInternal, cancelActiveForAgentInternal, cancelBudgetScopeWork, retryRunInternal, buildSkillAnalytics } = miscHandlers;
1758
+ async function resumePendingWakeupRequests(opts = {}) {
1759
+ const pendingWakeups = await db.select().from(agentWakeupRequests).where(and(opts.orgId ? eq(agentWakeupRequests.orgId, opts.orgId) : undefined, inArray(agentWakeupRequests.status, [
1760
+ "queued",
1761
+ "deferred_agent_paused",
1762
+ "deferred_goal_focus",
1763
+ "deferred_goal_blocked",
1764
+ ]), sql `${agentWakeupRequests.runId} is null`, lte(agentWakeupRequests.requestedAt, new Date()))).orderBy(asc(agentWakeupRequests.requestedAt)).limit(100);
1765
+ let resumed = 0;
1766
+ let deferred = 0;
1767
+ let terminalized = 0;
1768
+ for (const pending of pendingWakeups) {
1769
+ const source = ["timer", "assignment", "review", "on_demand", "automation"].includes(pending.source)
1770
+ ? pending.source
1771
+ : "on_demand";
1772
+ const triggerDetail = pending.triggerDetail
1773
+ && ["manual", "ping", "callback", "system"].includes(pending.triggerDetail)
1774
+ ? pending.triggerDetail
1775
+ : undefined;
1776
+ const requestedByActorType = pending.requestedByActorType
1777
+ && ["user", "agent", "system"].includes(pending.requestedByActorType)
1778
+ ? pending.requestedByActorType
1779
+ : undefined;
1780
+ try {
1781
+ const run = await enqueueWakeup(pending.agentId, {
1782
+ existingWakeupRequestId: pending.id,
1783
+ source,
1784
+ triggerDetail,
1785
+ reason: pending.reason,
1786
+ payload: readDeferredWakePayload(pending.payload),
1787
+ contextSnapshot: readDeferredWakeContext(pending.payload),
1788
+ requestedByActorType,
1789
+ requestedByActorId: pending.requestedByActorId,
1790
+ idempotencyKey: pending.idempotencyKey,
1791
+ startImmediately: opts.startImmediately,
1792
+ });
1793
+ if (run)
1794
+ resumed += 1;
1795
+ else
1796
+ deferred += 1;
1797
+ }
1798
+ catch (error) {
1799
+ const current = await db.select({ status: agentWakeupRequests.status })
1800
+ .from(agentWakeupRequests)
1801
+ .where(eq(agentWakeupRequests.id, pending.id))
1802
+ .then((rows) => rows[0] ?? null);
1803
+ if (current && [
1804
+ "queued",
1805
+ "deferred_agent_paused",
1806
+ "deferred_goal_focus",
1807
+ "deferred_goal_blocked",
1808
+ ].includes(current.status)) {
1809
+ await setWakeupStatus(pending.id, "failed", {
1810
+ finishedAt: new Date(),
1811
+ error: error instanceof Error ? error.message : String(error),
1812
+ runId: null,
1813
+ claimedAt: null,
1814
+ });
1815
+ }
1816
+ terminalized += 1;
1817
+ }
1818
+ }
1819
+ return { checked: pendingWakeups.length, resumed, deferred, terminalized };
1820
+ }
1611
1821
  return {
1612
1822
  overview: async (orgId) => {
1613
1823
  const [latestRows, recentRows] = await Promise.all([
@@ -1827,6 +2037,8 @@ export function heartbeatService(db, testHooks) {
1827
2037
  reapOrphanedRuns,
1828
2038
  reapInactiveRuns,
1829
2039
  reapTimedOutRuns,
2040
+ startNextQueuedRunForAgent,
2041
+ resumePendingWakeupRequests,
1830
2042
  resumeQueuedRuns,
1831
2043
  tickTimers: async (now = new Date()) => {
1832
2044
  const allAgents = await db.select().from(agents);