@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.
- package/dist/agent-runtimes/registry.d.ts.map +1 -1
- package/dist/agent-runtimes/registry.js +0 -2
- package/dist/agent-runtimes/registry.js.map +1 -1
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +1 -5
- package/dist/app.js.map +1 -1
- package/dist/bootstrap/create-http-app.d.ts +1 -2
- package/dist/bootstrap/create-http-app.d.ts.map +1 -1
- package/dist/bootstrap/create-http-app.js +13 -12
- package/dist/bootstrap/create-http-app.js.map +1 -1
- package/dist/bootstrap/register-api-routes.d.ts +1 -2
- package/dist/bootstrap/register-api-routes.d.ts.map +1 -1
- package/dist/bootstrap/register-api-routes.js +22 -4
- package/dist/bootstrap/register-api-routes.js.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/middleware/logger.js +2 -2
- package/dist/middleware/logger.js.map +1 -1
- package/dist/middleware/logger.test.js +26 -10
- package/dist/middleware/logger.test.js.map +1 -1
- package/dist/redaction.d.ts +4 -0
- package/dist/redaction.d.ts.map +1 -1
- package/dist/redaction.js +15 -0
- package/dist/redaction.js.map +1 -1
- package/dist/routes/agent-issue-creation.d.ts +25 -0
- package/dist/routes/agent-issue-creation.d.ts.map +1 -0
- package/dist/routes/agent-issue-creation.js +201 -0
- package/dist/routes/agent-issue-creation.js.map +1 -0
- package/dist/routes/app-builder.d.ts +3 -1
- package/dist/routes/app-builder.d.ts.map +1 -1
- package/dist/routes/app-builder.js +30 -22
- package/dist/routes/app-builder.js.map +1 -1
- package/dist/routes/approvals.d.ts.map +1 -1
- package/dist/routes/approvals.js +36 -9
- package/dist/routes/approvals.js.map +1 -1
- package/dist/routes/chats.d.ts.map +1 -1
- package/dist/routes/chats.js +23 -4
- package/dist/routes/chats.js.map +1 -1
- package/dist/routes/chats.preflight.d.ts +2 -1
- package/dist/routes/chats.preflight.d.ts.map +1 -1
- package/dist/routes/chats.preflight.js +7 -0
- package/dist/routes/chats.preflight.js.map +1 -1
- package/dist/routes/chats.stream-routes.d.ts.map +1 -1
- package/dist/routes/chats.stream-routes.js +14 -3
- package/dist/routes/chats.stream-routes.js.map +1 -1
- package/dist/routes/chats.stream-support.d.ts.map +1 -1
- package/dist/routes/chats.stream-support.js +8 -0
- package/dist/routes/chats.stream-support.js.map +1 -1
- package/dist/routes/computer.d.ts +30 -0
- package/dist/routes/computer.d.ts.map +1 -0
- package/dist/routes/computer.js +231 -0
- package/dist/routes/computer.js.map +1 -0
- package/dist/routes/goals.d.ts.map +1 -1
- package/dist/routes/goals.js +176 -27
- package/dist/routes/goals.js.map +1 -1
- package/dist/routes/health.d.ts.map +1 -1
- package/dist/routes/health.js +2 -0
- package/dist/routes/health.js.map +1 -1
- package/dist/routes/index.d.ts +1 -0
- package/dist/routes/index.d.ts.map +1 -1
- package/dist/routes/index.js +1 -0
- package/dist/routes/index.js.map +1 -1
- package/dist/routes/instance-settings.d.ts.map +1 -1
- package/dist/routes/instance-settings.js +3 -0
- package/dist/routes/instance-settings.js.map +1 -1
- package/dist/routes/issues.comments-attachments.d.ts.map +1 -1
- package/dist/routes/issues.comments-attachments.js +90 -8
- package/dist/routes/issues.comments-attachments.js.map +1 -1
- package/dist/routes/issues.d.ts.map +1 -1
- package/dist/routes/issues.js +14 -2
- package/dist/routes/issues.js.map +1 -1
- package/dist/routes/issues.mutations.d.ts.map +1 -1
- package/dist/routes/issues.mutations.js +206 -52
- package/dist/routes/issues.mutations.js.map +1 -1
- package/dist/routes/managed-mcp-runtime.d.ts.map +1 -1
- package/dist/routes/managed-mcp-runtime.js +109 -7
- package/dist/routes/managed-mcp-runtime.js.map +1 -1
- package/dist/routes/organization-skills.d.ts.map +1 -1
- package/dist/routes/organization-skills.js +23 -1
- package/dist/routes/organization-skills.js.map +1 -1
- package/dist/routes/requests.d.ts +3 -0
- package/dist/routes/requests.d.ts.map +1 -0
- package/dist/routes/requests.js +122 -0
- package/dist/routes/requests.js.map +1 -0
- package/dist/routes/rudder-plugins.d.ts +4 -0
- package/dist/routes/rudder-plugins.d.ts.map +1 -0
- package/dist/routes/rudder-plugins.js +203 -0
- package/dist/routes/rudder-plugins.js.map +1 -0
- package/dist/services/activity-log.d.ts +0 -3
- package/dist/services/activity-log.d.ts.map +1 -1
- package/dist/services/activity-log.js +19 -42
- package/dist/services/activity-log.js.map +1 -1
- package/dist/services/activity.d.ts +3 -3
- package/dist/services/agent-issue-creation.d.ts +344 -0
- package/dist/services/agent-issue-creation.d.ts.map +1 -0
- package/dist/services/agent-issue-creation.js +675 -0
- package/dist/services/agent-issue-creation.js.map +1 -0
- package/dist/services/agent-run-context.d.ts.map +1 -1
- package/dist/services/agent-run-context.js +10 -4
- package/dist/services/agent-run-context.js.map +1 -1
- package/dist/services/agents.d.ts +14 -14
- package/dist/services/agents.d.ts.map +1 -1
- package/dist/services/agents.js +2 -1
- package/dist/services/agents.js.map +1 -1
- package/dist/services/app-builder.d.ts.map +1 -1
- package/dist/services/app-builder.js +24 -3
- package/dist/services/app-builder.js.map +1 -1
- package/dist/services/chat-agent-runs.d.ts +1 -0
- package/dist/services/chat-agent-runs.d.ts.map +1 -1
- package/dist/services/chat-agent-runs.js +1 -0
- package/dist/services/chat-agent-runs.js.map +1 -1
- package/dist/services/chat-assistant.d.ts.map +1 -1
- package/dist/services/chat-assistant.helpers.d.ts +3 -1
- package/dist/services/chat-assistant.helpers.d.ts.map +1 -1
- package/dist/services/chat-assistant.helpers.js +25 -0
- package/dist/services/chat-assistant.helpers.js.map +1 -1
- package/dist/services/chat-assistant.js +57 -11
- package/dist/services/chat-assistant.js.map +1 -1
- package/dist/services/chat-generation-protocol.test.js +2 -2
- package/dist/services/chat-generation-protocol.test.js.map +1 -1
- package/dist/services/chat-queued-message-materialization.d.ts +1 -1
- package/dist/services/chats.create.d.ts +2 -2
- package/dist/services/chats.create.d.ts.map +1 -1
- package/dist/services/chats.d.ts +15 -15
- package/dist/services/chats.d.ts.map +1 -1
- package/dist/services/chats.helpers.d.ts +2 -2
- package/dist/services/chats.helpers.d.ts.map +1 -1
- package/dist/services/chats.helpers.goal-context.test.d.ts +2 -0
- package/dist/services/chats.helpers.goal-context.test.d.ts.map +1 -0
- package/dist/services/chats.helpers.goal-context.test.js +40 -0
- package/dist/services/chats.helpers.goal-context.test.js.map +1 -0
- package/dist/services/chats.helpers.js +27 -2
- package/dist/services/chats.helpers.js.map +1 -1
- package/dist/services/chats.js.map +1 -1
- package/dist/services/computer-broker.d.ts +35 -0
- package/dist/services/computer-broker.d.ts.map +1 -0
- package/dist/services/computer-broker.js +211 -0
- package/dist/services/computer-broker.js.map +1 -0
- package/dist/services/computer-broker.test.d.ts +2 -0
- package/dist/services/computer-broker.test.d.ts.map +1 -0
- package/dist/services/computer-broker.test.js +70 -0
- package/dist/services/computer-broker.test.js.map +1 -0
- package/dist/services/computer-capability.d.ts +13 -0
- package/dist/services/computer-capability.d.ts.map +1 -0
- package/dist/services/computer-capability.js +11 -0
- package/dist/services/computer-capability.js.map +1 -0
- package/dist/services/computer-capability.test.d.ts +2 -0
- package/dist/services/computer-capability.test.d.ts.map +1 -0
- package/dist/services/computer-capability.test.js +27 -0
- package/dist/services/computer-capability.test.js.map +1 -0
- package/dist/services/finance.d.ts +2 -2
- package/dist/services/goals.d.ts +267 -244
- package/dist/services/goals.d.ts.map +1 -1
- package/dist/services/goals.js +1279 -297
- package/dist/services/goals.js.map +1 -1
- package/dist/services/index.d.ts +3 -0
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +3 -0
- package/dist/services/index.js.map +1 -1
- package/dist/services/instance-settings.d.ts.map +1 -1
- package/dist/services/instance-settings.js +8 -3
- package/dist/services/instance-settings.js.map +1 -1
- package/dist/services/integrations/agent-integrations.d.ts +1 -1
- package/dist/services/issues.d.ts +86 -1
- package/dist/services/issues.d.ts.map +1 -1
- package/dist/services/issues.helpers.d.ts +4 -0
- package/dist/services/issues.helpers.d.ts.map +1 -1
- package/dist/services/issues.helpers.js +28 -6
- package/dist/services/issues.helpers.js.map +1 -1
- package/dist/services/issues.js +207 -127
- package/dist/services/issues.js.map +1 -1
- package/dist/services/knowledge-portability/organization-portability.files.d.ts +1 -1
- package/dist/services/knowledge-portability/organization-skills.catalog.d.ts +7 -1
- package/dist/services/knowledge-portability/organization-skills.catalog.d.ts.map +1 -1
- package/dist/services/knowledge-portability/organization-skills.catalog.js +10 -0
- package/dist/services/knowledge-portability/organization-skills.catalog.js.map +1 -1
- package/dist/services/knowledge-portability/organization-skills.d.ts +3 -1
- package/dist/services/knowledge-portability/organization-skills.d.ts.map +1 -1
- package/dist/services/knowledge-portability/organization-skills.js +80 -12
- package/dist/services/knowledge-portability/organization-skills.js.map +1 -1
- package/dist/services/mcp/managed-bindings.d.ts.map +1 -1
- package/dist/services/mcp/managed-bindings.js +18 -2
- package/dist/services/mcp/managed-bindings.js.map +1 -1
- package/dist/services/mcp/managed-client.d.ts +15 -0
- package/dist/services/mcp/managed-client.d.ts.map +1 -1
- package/dist/services/mcp/managed-client.js +23 -1
- package/dist/services/mcp/managed-client.js.map +1 -1
- package/dist/services/mcp/managed-client.test.js +73 -9
- package/dist/services/mcp/managed-client.test.js.map +1 -1
- package/dist/services/messenger.d.ts +3 -3
- package/dist/services/messenger.d.ts.map +1 -1
- package/dist/services/messenger.js +201 -65
- package/dist/services/messenger.js.map +1 -1
- package/dist/services/orgs.d.ts.map +1 -1
- package/dist/services/orgs.js +3 -1
- package/dist/services/orgs.js.map +1 -1
- package/dist/services/product-analytics.d.ts +2 -2
- package/dist/services/requests.d.ts +919 -0
- package/dist/services/requests.d.ts.map +1 -0
- package/dist/services/requests.js +532 -0
- package/dist/services/requests.js.map +1 -0
- package/dist/services/rudder-plugins.d.ts +107 -0
- package/dist/services/rudder-plugins.d.ts.map +1 -0
- package/dist/services/rudder-plugins.js +1760 -0
- package/dist/services/rudder-plugins.js.map +1 -0
- package/dist/services/rudder-plugins.test.d.ts +2 -0
- package/dist/services/rudder-plugins.test.d.ts.map +1 -0
- package/dist/services/rudder-plugins.test.js +191 -0
- package/dist/services/rudder-plugins.test.js.map +1 -0
- package/dist/services/runtime-kernel/heartbeat.core.d.ts +1 -0
- package/dist/services/runtime-kernel/heartbeat.core.d.ts.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.core.js +1 -1
- package/dist/services/runtime-kernel/heartbeat.core.js.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.d.ts +65 -0
- package/dist/services/runtime-kernel/heartbeat.d.ts.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.execute.d.ts.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.execute.js +21 -5
- package/dist/services/runtime-kernel/heartbeat.execute.js.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.js +320 -108
- package/dist/services/runtime-kernel/heartbeat.js.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.recovery.d.ts +1 -0
- package/dist/services/runtime-kernel/heartbeat.recovery.d.ts.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.recovery.js +39 -4
- package/dist/services/runtime-kernel/heartbeat.recovery.js.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.sessions.js +1 -1
- package/dist/services/runtime-kernel/heartbeat.sessions.js.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.terminal.d.ts +14 -1
- package/dist/services/runtime-kernel/heartbeat.terminal.d.ts.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.terminal.js +46 -1
- package/dist/services/runtime-kernel/heartbeat.terminal.js.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.wakeup.d.ts +1 -0
- package/dist/services/runtime-kernel/heartbeat.wakeup.d.ts.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.wakeup.js +124 -6
- package/dist/services/runtime-kernel/heartbeat.wakeup.js.map +1 -1
- package/dist/services/workspace-runtime.services.d.ts +1 -1
- package/package.json +18 -18
- package/resources/bundled-skills/app-builder/SKILL.md +39 -9
- package/resources/bundled-skills/app-builder/assets/scaffold/app/globals.css +109 -16
- package/resources/bundled-skills/app-builder/assets/scaffold/components/contacts-workspace.tsx +176 -152
- package/resources/bundled-skills/app-builder/assets/scaffold/components/ui/alert.tsx +12 -0
- package/resources/bundled-skills/app-builder/assets/scaffold/components/ui/badge.tsx +27 -0
- package/resources/bundled-skills/app-builder/assets/scaffold/components/ui/button.tsx +9 -7
- package/resources/bundled-skills/app-builder/assets/scaffold/components/ui/card.tsx +15 -3
- package/resources/bundled-skills/app-builder/assets/scaffold/components/ui/empty.tsx +18 -0
- package/resources/bundled-skills/app-builder/assets/scaffold/components/ui/field.tsx +23 -0
- package/resources/bundled-skills/app-builder/assets/scaffold/components/ui/input.tsx +1 -1
- package/resources/bundled-skills/app-builder/assets/scaffold/components/ui/label.tsx +1 -1
- package/resources/bundled-skills/app-builder/assets/scaffold/components/ui/separator.tsx +6 -0
- package/resources/bundled-skills/app-builder/assets/scaffold/components/ui/skeleton.tsx +6 -0
- package/resources/bundled-skills/app-builder/assets/scaffold/components/ui/table.tsx +30 -0
- package/resources/bundled-skills/app-builder/assets/scaffold/components.json +20 -0
- package/resources/bundled-skills/app-builder/assets/scaffold/next-env.d.ts +1 -1
- package/resources/bundled-skills/app-builder/assets/scaffold/next.config.ts +19 -0
- package/resources/bundled-skills/app-builder/assets/scaffold/package.json +2 -1
- package/resources/bundled-skills/app-builder/assets/scaffold/rudder.app.json +1 -1
- package/resources/bundled-skills/app-builder/assets/scaffold/rudder.ui.json +13 -0
- package/resources/bundled-skills/app-builder/assets/scaffold/scripts/validate-rudder-ui.mjs +50 -0
- package/resources/bundled-skills/app-builder/assets/scaffold/tests/e2e/app.spec.ts +35 -1
- package/resources/bundled-skills/app-builder/evals/evals.json +2 -1
- package/resources/bundled-skills/app-builder/references/design-guidelines.md +19 -2
- package/resources/bundled-skills/app-builder/references/rudder-ui-preset.md +73 -0
- package/resources/bundled-skills/app-builder/references/scaffold-contract.md +12 -0
- package/resources/bundled-skills/app-builder/references/verification.md +6 -0
- package/resources/bundled-skills/app-builder/scripts/report-build-status.mjs +83 -0
- package/resources/bundled-skills/rudder-docs/SKILL.md +2 -2
- package/resources/bundled-skills/rudder-docs/evals/retrieval-authority-evals.json +40 -0
- package/resources/bundled-skills/rudder-docs/evals/trigger-evals.json +2 -2
- package/resources/bundled-skills/rudder-docs/references/api-reference.md +0 -2
- package/resources/bundled-skills/rudder-docs/references/cli-reference.md +7 -2
- package/resources/bundled-skills/rudder-docs/references/operating-practices.md +10 -6
- package/resources/bundled-skills/rudder-docs/references/plugin-authoring.md +38 -114
- package/resources/bundled-skills/rudder-docs/references/source-map.md +2 -0
- package/skills/app-builder/SKILL.md +39 -9
- package/skills/app-builder/assets/scaffold/app/globals.css +109 -16
- package/skills/app-builder/assets/scaffold/components/contacts-workspace.tsx +176 -152
- package/skills/app-builder/assets/scaffold/components/ui/alert.tsx +12 -0
- package/skills/app-builder/assets/scaffold/components/ui/badge.tsx +27 -0
- package/skills/app-builder/assets/scaffold/components/ui/button.tsx +9 -7
- package/skills/app-builder/assets/scaffold/components/ui/card.tsx +15 -3
- package/skills/app-builder/assets/scaffold/components/ui/empty.tsx +18 -0
- package/skills/app-builder/assets/scaffold/components/ui/field.tsx +23 -0
- package/skills/app-builder/assets/scaffold/components/ui/input.tsx +1 -1
- package/skills/app-builder/assets/scaffold/components/ui/label.tsx +1 -1
- package/skills/app-builder/assets/scaffold/components/ui/separator.tsx +6 -0
- package/skills/app-builder/assets/scaffold/components/ui/skeleton.tsx +6 -0
- package/skills/app-builder/assets/scaffold/components/ui/table.tsx +30 -0
- package/skills/app-builder/assets/scaffold/components.json +20 -0
- package/skills/app-builder/assets/scaffold/next-env.d.ts +1 -1
- package/skills/app-builder/assets/scaffold/next.config.ts +19 -0
- package/skills/app-builder/assets/scaffold/package.json +2 -1
- package/skills/app-builder/assets/scaffold/rudder.app.json +1 -1
- package/skills/app-builder/assets/scaffold/rudder.ui.json +13 -0
- package/skills/app-builder/assets/scaffold/scripts/validate-rudder-ui.mjs +50 -0
- package/skills/app-builder/assets/scaffold/tests/e2e/app.spec.ts +35 -1
- package/skills/app-builder/evals/evals.json +2 -1
- package/skills/app-builder/references/design-guidelines.md +19 -2
- package/skills/app-builder/references/rudder-ui-preset.md +73 -0
- package/skills/app-builder/references/scaffold-contract.md +12 -0
- package/skills/app-builder/references/verification.md +6 -0
- package/skills/app-builder/scripts/report-build-status.mjs +83 -0
- package/skills/rudder-docs/SKILL.md +2 -2
- package/skills/rudder-docs/evals/retrieval-authority-evals.json +40 -0
- package/skills/rudder-docs/evals/trigger-evals.json +2 -2
- package/skills/rudder-docs/references/api-reference.md +0 -2
- package/skills/rudder-docs/references/cli-reference.md +7 -2
- package/skills/rudder-docs/references/operating-practices.md +10 -6
- package/skills/rudder-docs/references/plugin-authoring.md +38 -114
- package/skills/rudder-docs/references/source-map.md +2 -0
- package/ui-dist/assets/{LibraryLiveSurface-cHCJmmsl.js → LibraryLiveSurface-D4uCo0l0.js} +1 -1
- package/ui-dist/assets/{abnfDiagram-VRR7QNED-BORJvkew.js → abnfDiagram-VRR7QNED-FF2qcR6A.js} +1 -1
- package/ui-dist/assets/addon-fit-4gL7JXzc.js +1 -0
- package/ui-dist/assets/{arc-DPUzhx87.js → arc-D5pLjh6B.js} +1 -1
- package/ui-dist/assets/{architectureDiagram-ZJ3FMSHR-Bz_hY8LM.js → architectureDiagram-ZJ3FMSHR-BvqY-HXg.js} +1 -1
- package/ui-dist/assets/{blockDiagram-677ZJIJ3-Bq1X3YkP.js → blockDiagram-677ZJIJ3-BU6ZbJ0s.js} +1 -1
- package/ui-dist/assets/{c4Diagram-LMCZKHZV-BawEM9Pc.js → c4Diagram-LMCZKHZV-Cl5Gsovj.js} +1 -1
- package/ui-dist/assets/channel-HcmprA3I.js +1 -0
- package/ui-dist/assets/{chunk-2Q5K7J3B-D0D5ZOaA.js → chunk-2Q5K7J3B-4a2agt_p.js} +1 -1
- package/ui-dist/assets/{chunk-32BRIVSS-T90P7lug.js → chunk-32BRIVSS-CF0oOO2T.js} +1 -1
- package/ui-dist/assets/{chunk-5VM5RSS4-jcAERTgh.js → chunk-5VM5RSS4-CsSq2zX2.js} +1 -1
- package/ui-dist/assets/{chunk-EX3LRPZG-t9-JXwnR.js → chunk-EX3LRPZG-B6riETVZ.js} +1 -1
- package/ui-dist/assets/{chunk-JWPE2WC7-hqgD1saC.js → chunk-JWPE2WC7-S-p1xu0r.js} +1 -1
- package/ui-dist/assets/{chunk-MOJQB5TN-BsSUoYzd.js → chunk-MOJQB5TN-mVE4v_LV.js} +1 -1
- package/ui-dist/assets/{chunk-RYQCIY6F-YcdDh2Zn.js → chunk-RYQCIY6F-CElbgpgs.js} +1 -1
- package/ui-dist/assets/{chunk-V7JOEXUC-ChFyH9Su.js → chunk-V7JOEXUC-8XM3povP.js} +1 -1
- package/ui-dist/assets/{chunk-VR4S4FIN-BjVK8IyX.js → chunk-VR4S4FIN-LrThp3ht.js} +1 -1
- package/ui-dist/assets/{chunk-XXDRQBXY-D-TvO9vT.js → chunk-XXDRQBXY-D38vLb4t.js} +1 -1
- package/ui-dist/assets/classDiagram-OUVF2IWQ-Dpe8LaLf.js +1 -0
- package/ui-dist/assets/classDiagram-v2-EOCWNBFH-Dpe8LaLf.js +1 -0
- package/ui-dist/assets/{cose-bilkent-JH36ORCC-DBwhASJG.js → cose-bilkent-JH36ORCC-CmpZMaDV.js} +1 -1
- package/ui-dist/assets/{cynefin-VYW2F7L2-SlCRmwl2.js → cynefin-VYW2F7L2-D3RnbBvI.js} +1 -1
- package/ui-dist/assets/{cynefinDiagram-TSTJHNR4-DImV6N_p.js → cynefinDiagram-TSTJHNR4-DZTcUojp.js} +1 -1
- package/ui-dist/assets/{dagre-VKFMJZFB-FH4Wv8Zn.js → dagre-VKFMJZFB-6jXSDi0S.js} +1 -1
- package/ui-dist/assets/{diagram-FQU43EPY-CrZvQjId.js → diagram-FQU43EPY-DIMm3mfS.js} +1 -1
- package/ui-dist/assets/{diagram-G47NLZAW-B7IGl_T3.js → diagram-G47NLZAW-Cyo22v0_.js} +1 -1
- package/ui-dist/assets/{diagram-NH7WQ7WH-CB4i7H1a.js → diagram-NH7WQ7WH-CHDV0nSL.js} +1 -1
- package/ui-dist/assets/{diagram-OA4YK3LP-DNyWPYY9.js → diagram-OA4YK3LP-Jijx9vQO.js} +1 -1
- package/ui-dist/assets/{diagram-WEI45ONY-BAhxbhpi.js → diagram-WEI45ONY-CcL19HLE.js} +1 -1
- package/ui-dist/assets/{ebnfDiagram-CCIWWBDH-ClXtQ9qt.js → ebnfDiagram-CCIWWBDH-D94h-RFQ.js} +1 -1
- package/ui-dist/assets/{erDiagram-Q63AITRT-DGXiMYfn.js → erDiagram-Q63AITRT-B3ypUGZX.js} +1 -1
- package/ui-dist/assets/{flowDiagram-23GEKE2U-CdZ-02zc.js → flowDiagram-23GEKE2U-DjCT6Y1o.js} +1 -1
- package/ui-dist/assets/{ganttDiagram-NO4QXBWP-TxhzNpta.js → ganttDiagram-NO4QXBWP-C3QVhTc9.js} +1 -1
- package/ui-dist/assets/{gitGraphDiagram-IHSO6WYX-D6Q_w6wR.js → gitGraphDiagram-IHSO6WYX-D0trBzU5.js} +1 -1
- package/ui-dist/assets/{graph-CxNmbpl9.js → graph-D1zFmVUP.js} +1 -1
- package/ui-dist/assets/{index-Cx6oIZPm.js → index-B0GEsWui.js} +568 -593
- package/ui-dist/assets/{index-BA9tMBhO.js → index-B8bxQLfN.js} +1 -1
- package/ui-dist/assets/{index-C_nwI4Yj.js → index-BFktZ2tu.js} +1 -1
- package/ui-dist/assets/index-BT7dphT4.css +32 -0
- package/ui-dist/assets/{index-BoTz5S-X.js → index-Bk_yesiO.js} +1 -1
- package/ui-dist/assets/{index-CXnqg1Oq.js → index-BwutQLG1.js} +1 -1
- package/ui-dist/assets/{index-AkhgKOxC.js → index-CB4zr_Ku.js} +1 -1
- package/ui-dist/assets/{index-Rau2cGm0.js → index-CC89UPa-.js} +1 -1
- package/ui-dist/assets/{index-kbWUQ1um.js → index-CFWOO6yn.js} +1 -1
- package/ui-dist/assets/{index-DU2LI7f9.js → index-CK8u9b07.js} +1 -1
- package/ui-dist/assets/{index-C12QC1Ex.js → index-CRolpP90.js} +1 -1
- package/ui-dist/assets/{index-Bxz75ICF.js → index-CiCRRUVV.js} +1 -1
- package/ui-dist/assets/{index-Do78GymY.js → index-D8JG-IU9.js} +1 -1
- package/ui-dist/assets/{index-CW21qWFm.js → index-DKCiVvJo.js} +1 -1
- package/ui-dist/assets/{index-BujwWE3j.js → index-G2yfKEf_.js} +1 -1
- package/ui-dist/assets/{index-BQ87dGIq.js → index-or2C22bw.js} +1 -1
- package/ui-dist/assets/{infoDiagram-FWYZ7A6U-CnJd4-Jq.js → infoDiagram-FWYZ7A6U-Co0nkcV4.js} +1 -1
- package/ui-dist/assets/{ishikawaDiagram-FXEZZL3T-Bq-qc3pD.js → ishikawaDiagram-FXEZZL3T-CkIg1Jdu.js} +1 -1
- package/ui-dist/assets/{journeyDiagram-5HDEW3XC-NSmpUGUA.js → journeyDiagram-5HDEW3XC-AYUT6JuJ.js} +1 -1
- package/ui-dist/assets/{kanban-definition-HUTT4EX6-D7pgWtfA.js → kanban-definition-HUTT4EX6-C3H2XW08.js} +1 -1
- package/ui-dist/assets/{layout-BRuo6LWe.js → layout-sZWyqNOu.js} +1 -1
- package/ui-dist/assets/{linear-CkaWI9Nd.js → linear-BLTYou8N.js} +1 -1
- package/ui-dist/assets/{map-CgA6tTpZ.js → map-zKBdHkX8.js} +1 -1
- package/ui-dist/assets/{mermaid.core-DrXOt-P6.js → mermaid.core-DbjdFip8.js} +4 -4
- package/ui-dist/assets/{mindmap-definition-LN4V7U3C-D9ImeWBe.js → mindmap-definition-LN4V7U3C-DcDNQ4GQ.js} +1 -1
- package/ui-dist/assets/{pegDiagram-2B236MQR-Cq-zZ_zz.js → pegDiagram-2B236MQR-BGq1PngU.js} +1 -1
- package/ui-dist/assets/{pieDiagram-ENE6RG2P-FgNgy726.js → pieDiagram-ENE6RG2P-BfXWRzNb.js} +1 -1
- package/ui-dist/assets/{quadrantDiagram-ABIIQ3AL-BxQbmGmi.js → quadrantDiagram-ABIIQ3AL-AYMVAbo1.js} +1 -1
- package/ui-dist/assets/{railroadDiagram-RFXS5EU6-CrpbkPH2.js → railroadDiagram-RFXS5EU6-B0PoG0Ih.js} +1 -1
- package/ui-dist/assets/{requirementDiagram-TGXJPOKE-DQ-65ZW6.js → requirementDiagram-TGXJPOKE-Cuuu9wfw.js} +1 -1
- package/ui-dist/assets/{sankeyDiagram-HTMAVEWB-Bom0lMZm.js → sankeyDiagram-HTMAVEWB-BceAc42f.js} +1 -1
- package/ui-dist/assets/{sequenceDiagram-DBY2YBRQ-C1MSDLDj.js → sequenceDiagram-DBY2YBRQ-cqJ71-Rw.js} +1 -1
- package/ui-dist/assets/{sizeCapture-X5ZJPWSS-Bn1vxebD.js → sizeCapture-X5ZJPWSS-DQ6MibbA.js} +1 -1
- package/ui-dist/assets/{stateDiagram-2N3HPSRC-GRRQpmzI.js → stateDiagram-2N3HPSRC-Bdl-XY7t.js} +1 -1
- package/ui-dist/assets/stateDiagram-v2-6OUMAXLB-Cjj7yPIO.js +1 -0
- package/ui-dist/assets/{swimlanes-5IMT3BWC-BcOOCZ4q.js → swimlanes-5IMT3BWC-Dpo2HDtE.js} +2 -2
- package/ui-dist/assets/swimlanesDiagram-G3AALYLV-CPmIkNCu.js +8 -0
- package/ui-dist/assets/{timeline-definition-FHXFAJF6-gi6amswh.js → timeline-definition-FHXFAJF6-BzmJ-xnC.js} +1 -1
- package/ui-dist/assets/{vennDiagram-L72KCM5P-B9uqeyQt.js → vennDiagram-L72KCM5P-BF2EI7vn.js} +1 -1
- package/ui-dist/assets/{wardleyDiagram-EHGQE667-BnqWAMiE.js → wardleyDiagram-EHGQE667-DM65x1i1.js} +1 -1
- package/ui-dist/assets/xterm-DZP7bLZ5.js +9 -0
- package/ui-dist/assets/{xychartDiagram-FW5EYKEG-BJXKltIN.js → xychartDiagram-FW5EYKEG-3Q2t9pdU.js} +1 -1
- package/ui-dist/index.html +2 -2
- package/dist/bootstrap/plugin-host-runtime.d.ts +0 -116
- package/dist/bootstrap/plugin-host-runtime.d.ts.map +0 -1
- package/dist/bootstrap/plugin-host-runtime.js +0 -179
- package/dist/bootstrap/plugin-host-runtime.js.map +0 -1
- package/dist/bundled-plugins/plugin-linear/README.md +0 -22
- package/dist/bundled-plugins/plugin-linear/dist/manifest.js +0 -183
- package/dist/bundled-plugins/plugin-linear/dist/manifest.js.map +0 -7
- package/dist/bundled-plugins/plugin-linear/dist/ui/index.js +0 -1285
- package/dist/bundled-plugins/plugin-linear/dist/ui/index.js.map +0 -7
- package/dist/bundled-plugins/plugin-linear/dist/worker.js +0 -10699
- package/dist/bundled-plugins/plugin-linear/dist/worker.js.map +0 -7
- package/dist/bundled-plugins/plugin-linear/package.json +0 -42
- package/dist/routes/plugin-ui-static.d.ts +0 -70
- package/dist/routes/plugin-ui-static.d.ts.map +0 -1
- package/dist/routes/plugin-ui-static.js +0 -375
- package/dist/routes/plugin-ui-static.js.map +0 -1
- package/dist/routes/plugins.d.ts +0 -120
- package/dist/routes/plugins.d.ts.map +0 -1
- package/dist/routes/plugins.js +0 -1125
- package/dist/routes/plugins.js.map +0 -1
- package/dist/routes/plugins.operations-routes.d.ts +0 -28
- package/dist/routes/plugins.operations-routes.d.ts.map +0 -1
- package/dist/routes/plugins.operations-routes.js +0 -720
- package/dist/routes/plugins.operations-routes.js.map +0 -1
- package/dist/services/plugin-capability-validator.d.ts +0 -108
- package/dist/services/plugin-capability-validator.d.ts.map +0 -1
- package/dist/services/plugin-capability-validator.js +0 -268
- package/dist/services/plugin-capability-validator.js.map +0 -1
- package/dist/services/plugin-config-validator.d.ts +0 -26
- package/dist/services/plugin-config-validator.d.ts.map +0 -1
- package/dist/services/plugin-config-validator.js +0 -41
- package/dist/services/plugin-config-validator.js.map +0 -1
- package/dist/services/plugin-dev-watcher.d.ts +0 -47
- package/dist/services/plugin-dev-watcher.d.ts.map +0 -1
- package/dist/services/plugin-dev-watcher.js +0 -275
- package/dist/services/plugin-dev-watcher.js.map +0 -1
- package/dist/services/plugin-event-bus.d.ts +0 -149
- package/dist/services/plugin-event-bus.d.ts.map +0 -1
- package/dist/services/plugin-event-bus.js +0 -258
- package/dist/services/plugin-event-bus.js.map +0 -1
- package/dist/services/plugin-host-service-cleanup.d.ts +0 -14
- package/dist/services/plugin-host-service-cleanup.d.ts.map +0 -1
- package/dist/services/plugin-host-service-cleanup.js +0 -37
- package/dist/services/plugin-host-service-cleanup.js.map +0 -1
- package/dist/services/plugin-host-services.d.ts +0 -13
- package/dist/services/plugin-host-services.d.ts.map +0 -1
- package/dist/services/plugin-host-services.js +0 -933
- package/dist/services/plugin-host-services.js.map +0 -1
- package/dist/services/plugin-job-coordinator.d.ts +0 -81
- package/dist/services/plugin-job-coordinator.d.ts.map +0 -1
- package/dist/services/plugin-job-coordinator.js +0 -172
- package/dist/services/plugin-job-coordinator.js.map +0 -1
- package/dist/services/plugin-job-scheduler.d.ts +0 -163
- package/dist/services/plugin-job-scheduler.d.ts.map +0 -1
- package/dist/services/plugin-job-scheduler.js +0 -452
- package/dist/services/plugin-job-scheduler.js.map +0 -1
- package/dist/services/plugin-job-store.d.ts +0 -208
- package/dist/services/plugin-job-store.d.ts.map +0 -1
- package/dist/services/plugin-job-store.js +0 -350
- package/dist/services/plugin-job-store.js.map +0 -1
- package/dist/services/plugin-lifecycle.d.ts +0 -240
- package/dist/services/plugin-lifecycle.d.ts.map +0 -1
- package/dist/services/plugin-lifecycle.js +0 -439
- package/dist/services/plugin-lifecycle.js.map +0 -1
- package/dist/services/plugin-loader.core.d.ts +0 -40
- package/dist/services/plugin-loader.core.d.ts.map +0 -1
- package/dist/services/plugin-loader.core.js +0 -879
- package/dist/services/plugin-loader.core.js.map +0 -1
- package/dist/services/plugin-loader.d.ts +0 -30
- package/dist/services/plugin-loader.d.ts.map +0 -1
- package/dist/services/plugin-loader.helpers.d.ts +0 -495
- package/dist/services/plugin-loader.helpers.d.ts.map +0 -1
- package/dist/services/plugin-loader.helpers.js +0 -238
- package/dist/services/plugin-loader.helpers.js.map +0 -1
- package/dist/services/plugin-loader.js +0 -30
- package/dist/services/plugin-loader.js.map +0 -1
- package/dist/services/plugin-loader.worker-paths.d.ts +0 -37
- package/dist/services/plugin-loader.worker-paths.d.ts.map +0 -1
- package/dist/services/plugin-loader.worker-paths.js +0 -62
- package/dist/services/plugin-loader.worker-paths.js.map +0 -1
- package/dist/services/plugin-log-retention.d.ts +0 -20
- package/dist/services/plugin-log-retention.d.ts.map +0 -1
- package/dist/services/plugin-log-retention.js +0 -63
- package/dist/services/plugin-log-retention.js.map +0 -1
- package/dist/services/plugin-manifest-validator.d.ts +0 -90
- package/dist/services/plugin-manifest-validator.d.ts.map +0 -1
- package/dist/services/plugin-manifest-validator.js +0 -72
- package/dist/services/plugin-manifest-validator.js.map +0 -1
- package/dist/services/plugin-registry.d.ts +0 -2542
- package/dist/services/plugin-registry.d.ts.map +0 -1
- package/dist/services/plugin-registry.js +0 -536
- package/dist/services/plugin-registry.js.map +0 -1
- package/dist/services/plugin-runtime-sandbox.d.ts +0 -40
- package/dist/services/plugin-runtime-sandbox.d.ts.map +0 -1
- package/dist/services/plugin-runtime-sandbox.js +0 -154
- package/dist/services/plugin-runtime-sandbox.js.map +0 -1
- package/dist/services/plugin-secrets-handler.d.ts +0 -81
- package/dist/services/plugin-secrets-handler.d.ts.map +0 -1
- package/dist/services/plugin-secrets-handler.js +0 -275
- package/dist/services/plugin-secrets-handler.js.map +0 -1
- package/dist/services/plugin-state-store.d.ts +0 -92
- package/dist/services/plugin-state-store.d.ts.map +0 -1
- package/dist/services/plugin-state-store.js +0 -190
- package/dist/services/plugin-state-store.js.map +0 -1
- package/dist/services/plugin-stream-bus.d.ts +0 -29
- package/dist/services/plugin-stream-bus.d.ts.map +0 -1
- package/dist/services/plugin-stream-bus.js +0 -48
- package/dist/services/plugin-stream-bus.js.map +0 -1
- package/dist/services/plugin-tool-dispatcher.d.ts +0 -180
- package/dist/services/plugin-tool-dispatcher.d.ts.map +0 -1
- package/dist/services/plugin-tool-dispatcher.js +0 -224
- package/dist/services/plugin-tool-dispatcher.js.map +0 -1
- package/dist/services/plugin-tool-registry.d.ts +0 -192
- package/dist/services/plugin-tool-registry.d.ts.map +0 -1
- package/dist/services/plugin-tool-registry.js +0 -224
- package/dist/services/plugin-tool-registry.js.map +0 -1
- package/dist/services/plugin-worker-manager.d.ts +0 -260
- package/dist/services/plugin-worker-manager.d.ts.map +0 -1
- package/dist/services/plugin-worker-manager.js +0 -836
- package/dist/services/plugin-worker-manager.js.map +0 -1
- package/ui-dist/assets/channel-C08AyYJr.js +0 -1
- package/ui-dist/assets/classDiagram-OUVF2IWQ-BIXq6fec.js +0 -1
- package/ui-dist/assets/classDiagram-v2-EOCWNBFH-BIXq6fec.js +0 -1
- package/ui-dist/assets/index-BmXb0yC1.css +0 -1
- package/ui-dist/assets/stateDiagram-v2-6OUMAXLB-KvSJhiLM.js +0 -1
- 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
|
|
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
|
-
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
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
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
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: "
|
|
1088
|
-
message:
|
|
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
|
-
|
|
1095
|
-
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
|
|
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);
|