@rudderhq/server 0.7.9 → 0.7.11

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 (131) hide show
  1. package/dist/index.js +1 -1
  2. package/dist/index.js.map +1 -1
  3. package/dist/routes/chats.d.ts.map +1 -1
  4. package/dist/routes/chats.js +22 -3
  5. package/dist/routes/chats.js.map +1 -1
  6. package/dist/routes/goals.d.ts.map +1 -1
  7. package/dist/routes/goals.js +58 -4
  8. package/dist/routes/goals.js.map +1 -1
  9. package/dist/routes/issues.mutations.d.ts.map +1 -1
  10. package/dist/routes/issues.mutations.js +3 -0
  11. package/dist/routes/issues.mutations.js.map +1 -1
  12. package/dist/services/agent-startup-context.d.ts +1 -1
  13. package/dist/services/agent-startup-context.d.ts.map +1 -1
  14. package/dist/services/agent-startup-context.js +11 -2
  15. package/dist/services/agent-startup-context.js.map +1 -1
  16. package/dist/services/chat-assistant.d.ts.map +1 -1
  17. package/dist/services/chat-assistant.js +11 -1
  18. package/dist/services/chat-assistant.js.map +1 -1
  19. package/dist/services/chats.d.ts +85 -0
  20. package/dist/services/chats.d.ts.map +1 -1
  21. package/dist/services/chats.js +36 -1
  22. package/dist/services/chats.js.map +1 -1
  23. package/dist/services/goals.d.ts +97 -5
  24. package/dist/services/goals.d.ts.map +1 -1
  25. package/dist/services/goals.js +239 -2
  26. package/dist/services/goals.js.map +1 -1
  27. package/dist/services/runtime-kernel/assignment-run-guardrail.d.ts +78 -23
  28. package/dist/services/runtime-kernel/assignment-run-guardrail.d.ts.map +1 -1
  29. package/dist/services/runtime-kernel/assignment-run-guardrail.js +225 -2
  30. package/dist/services/runtime-kernel/assignment-run-guardrail.js.map +1 -1
  31. package/dist/services/runtime-kernel/assignment-run-guardrail.test.js +103 -3
  32. package/dist/services/runtime-kernel/assignment-run-guardrail.test.js.map +1 -1
  33. package/dist/services/runtime-kernel/heartbeat.d.ts.map +1 -1
  34. package/dist/services/runtime-kernel/heartbeat.execute.d.ts.map +1 -1
  35. package/dist/services/runtime-kernel/heartbeat.execute.js +83 -13
  36. package/dist/services/runtime-kernel/heartbeat.execute.js.map +1 -1
  37. package/dist/services/runtime-kernel/heartbeat.js +44 -2
  38. package/dist/services/runtime-kernel/heartbeat.js.map +1 -1
  39. package/dist/services/runtime-kernel/heartbeat.wakeup.js +1 -1
  40. package/dist/services/runtime-kernel/heartbeat.wakeup.js.map +1 -1
  41. package/dist/services/workspace-backups.d.ts +1 -1
  42. package/dist/services/workspace-backups.d.ts.map +1 -1
  43. package/dist/services/workspace-backups.js +50 -17
  44. package/dist/services/workspace-backups.js.map +1 -1
  45. package/package.json +14 -14
  46. package/resources/bundled-skills/rudder-docs/references/cli-reference.md +9 -6
  47. package/skills/rudder-docs/references/cli-reference.md +9 -6
  48. package/ui-dist/assets/{LibraryLiveSurface-C0jsVm76.js → LibraryLiveSurface-De1p59PK.js} +1 -1
  49. package/ui-dist/assets/{abnfDiagram-VRR7QNED-U1mPal0M.js → abnfDiagram-VRR7QNED-BggxrEZR.js} +1 -1
  50. package/ui-dist/assets/{addon-fit-B18ohVaY.js → addon-fit-Cc1gOtSX.js} +1 -1
  51. package/ui-dist/assets/{arc-CYOWHL_W.js → arc-0kNrc9xt.js} +1 -1
  52. package/ui-dist/assets/{architectureDiagram-ZJ3FMSHR-CmiN5Erc.js → architectureDiagram-ZJ3FMSHR-BOCa-5ab.js} +1 -1
  53. package/ui-dist/assets/{blockDiagram-677ZJIJ3-Chl4uqNv.js → blockDiagram-677ZJIJ3-CQU5jcsO.js} +1 -1
  54. package/ui-dist/assets/{c4Diagram-LMCZKHZV-DSUkRSKu.js → c4Diagram-LMCZKHZV-ChgWIw5O.js} +1 -1
  55. package/ui-dist/assets/channel-eAoWqZqJ.js +1 -0
  56. package/ui-dist/assets/{chunk-2Q5K7J3B-DTJMcqWI.js → chunk-2Q5K7J3B-B4yrwesI.js} +1 -1
  57. package/ui-dist/assets/{chunk-32BRIVSS-zdmMVLnX.js → chunk-32BRIVSS-mhAeSMlR.js} +1 -1
  58. package/ui-dist/assets/{chunk-5VM5RSS4-D7CHEd8F.js → chunk-5VM5RSS4-BmS_u59G.js} +1 -1
  59. package/ui-dist/assets/{chunk-EX3LRPZG-BSlg__Tm.js → chunk-EX3LRPZG-DXoTKkLG.js} +1 -1
  60. package/ui-dist/assets/{chunk-JWPE2WC7-DZ-jdJNV.js → chunk-JWPE2WC7-Bj9myT03.js} +1 -1
  61. package/ui-dist/assets/{chunk-MOJQB5TN-BBqkM1ra.js → chunk-MOJQB5TN-OAoJna8Y.js} +1 -1
  62. package/ui-dist/assets/{chunk-RYQCIY6F-DcEtbyB7.js → chunk-RYQCIY6F-AGLA7TJn.js} +1 -1
  63. package/ui-dist/assets/{chunk-V7JOEXUC-DzXDmCLX.js → chunk-V7JOEXUC-YGM2tDK2.js} +1 -1
  64. package/ui-dist/assets/{chunk-VR4S4FIN-CY5XcPhT.js → chunk-VR4S4FIN-DqaZn9Ty.js} +1 -1
  65. package/ui-dist/assets/{chunk-XXDRQBXY-kROQNOzd.js → chunk-XXDRQBXY-Cpqn_8Bl.js} +1 -1
  66. package/ui-dist/assets/classDiagram-OUVF2IWQ-c94PI6yY.js +1 -0
  67. package/ui-dist/assets/classDiagram-v2-EOCWNBFH-c94PI6yY.js +1 -0
  68. package/ui-dist/assets/{cose-bilkent-JH36ORCC-CrnVyxOw.js → cose-bilkent-JH36ORCC-BVe-X26w.js} +1 -1
  69. package/ui-dist/assets/{cynefin-VYW2F7L2-LqXNJWXt.js → cynefin-VYW2F7L2-DlDrrBWp.js} +1 -1
  70. package/ui-dist/assets/{cynefinDiagram-TSTJHNR4-CuIowjom.js → cynefinDiagram-TSTJHNR4-BSHvFeGh.js} +1 -1
  71. package/ui-dist/assets/{dagre-VKFMJZFB-_JHXcILM.js → dagre-VKFMJZFB-tUm70k9h.js} +1 -1
  72. package/ui-dist/assets/{diagram-FQU43EPY-BsWNb9wJ.js → diagram-FQU43EPY-C5kjITq7.js} +1 -1
  73. package/ui-dist/assets/{diagram-G47NLZAW-NRzY78z7.js → diagram-G47NLZAW-BrbHgt8r.js} +1 -1
  74. package/ui-dist/assets/{diagram-NH7WQ7WH-D83JoKpS.js → diagram-NH7WQ7WH-DT7PdghT.js} +1 -1
  75. package/ui-dist/assets/{diagram-OA4YK3LP-CiQTkxEF.js → diagram-OA4YK3LP-wOjhRHRo.js} +1 -1
  76. package/ui-dist/assets/{diagram-WEI45ONY-zNOFqhj1.js → diagram-WEI45ONY-Dz9vtaDT.js} +1 -1
  77. package/ui-dist/assets/{ebnfDiagram-CCIWWBDH-l9X92AzX.js → ebnfDiagram-CCIWWBDH-BT5TzIA6.js} +1 -1
  78. package/ui-dist/assets/{erDiagram-Q63AITRT-CZ2xCVfq.js → erDiagram-Q63AITRT-DLCpoOEP.js} +1 -1
  79. package/ui-dist/assets/{flowDiagram-23GEKE2U-DsqDeyPl.js → flowDiagram-23GEKE2U-DfF2COjh.js} +1 -1
  80. package/ui-dist/assets/{ganttDiagram-NO4QXBWP-ZovCvOAJ.js → ganttDiagram-NO4QXBWP-1d0KDwQs.js} +1 -1
  81. package/ui-dist/assets/{gitGraphDiagram-IHSO6WYX-CqBEHQAs.js → gitGraphDiagram-IHSO6WYX-COLjS1ZR.js} +1 -1
  82. package/ui-dist/assets/{graph-ClsHEbyV.js → graph-B7fcgpw_.js} +1 -1
  83. package/ui-dist/assets/{index-BeOqvf7L.js → index-B6zSdXAR.js} +1 -1
  84. package/ui-dist/assets/{index-Dd7fnO2Z.js → index-BczgTMAn.js} +1 -1
  85. package/ui-dist/assets/{index-kq-WskyQ.js → index-CH8I9acP.js} +1 -1
  86. package/ui-dist/assets/{index-Cv5Jhfkz.js → index-CMNULCMJ.js} +1 -1
  87. package/ui-dist/assets/{index-BCGk5KQX.js → index-COLwjKBR.js} +1 -1
  88. package/ui-dist/assets/{index-BDk7B-iN.js → index-CTIfCQqR.js} +1 -1
  89. package/ui-dist/assets/{index-DfoLd51a.js → index-CXg1YCeI.js} +1 -1
  90. package/ui-dist/assets/{index-B1A7LikO.js → index-CZYXpHv4.js} +1 -1
  91. package/ui-dist/assets/{index-FPebsItp.js → index-CbqgXGcs.js} +1 -1
  92. package/ui-dist/assets/{index-CkFvrO-z.js → index-CgkYyYx9.js} +1 -1
  93. package/ui-dist/assets/{index-FgEEryl0.js → index-D27Bbc-x.js} +1 -1
  94. package/ui-dist/assets/{index-Cv6MlpIo.js → index-DTc5LpTU.js} +1 -1
  95. package/ui-dist/assets/{index-CxDxuCus.js → index-Denv6wuU.js} +1 -1
  96. package/ui-dist/assets/{index-BXtyqqSu.js → index-DttnaNlV.js} +534 -529
  97. package/ui-dist/assets/index-RSbihTRP.css +32 -0
  98. package/ui-dist/assets/{index-Cgo8Oik4.js → index-vtghjwab.js} +1 -1
  99. package/ui-dist/assets/{infoDiagram-FWYZ7A6U-DZJsMi0N.js → infoDiagram-FWYZ7A6U-Bg4YQUu2.js} +1 -1
  100. package/ui-dist/assets/{ishikawaDiagram-FXEZZL3T-7VX262KJ.js → ishikawaDiagram-FXEZZL3T-BtgUVI_I.js} +1 -1
  101. package/ui-dist/assets/{journeyDiagram-5HDEW3XC-W9pqd9nR.js → journeyDiagram-5HDEW3XC-BGHGjvN4.js} +1 -1
  102. package/ui-dist/assets/{kanban-definition-HUTT4EX6-eSHDQWV5.js → kanban-definition-HUTT4EX6-DekQSNo8.js} +1 -1
  103. package/ui-dist/assets/{layout-BxwzAdvW.js → layout-Bsw9hK6u.js} +1 -1
  104. package/ui-dist/assets/{linear-D6gDQD1r.js → linear-D8D1R-4C.js} +1 -1
  105. package/ui-dist/assets/{map-Dl8Tlr4E.js → map-BUIcuf4c.js} +1 -1
  106. package/ui-dist/assets/{mermaid.core-DqGHAs5q.js → mermaid.core-CYZMLemV.js} +4 -4
  107. package/ui-dist/assets/{mindmap-definition-LN4V7U3C-DlkWbxIe.js → mindmap-definition-LN4V7U3C-mjS9avIS.js} +1 -1
  108. package/ui-dist/assets/{pegDiagram-2B236MQR-Cc49Opte.js → pegDiagram-2B236MQR-Buziry9m.js} +1 -1
  109. package/ui-dist/assets/{pieDiagram-ENE6RG2P-Cso_iAzG.js → pieDiagram-ENE6RG2P-B_9BmFEg.js} +1 -1
  110. package/ui-dist/assets/{quadrantDiagram-ABIIQ3AL-FKJGDnHG.js → quadrantDiagram-ABIIQ3AL-BxFdUA8s.js} +1 -1
  111. package/ui-dist/assets/{railroadDiagram-RFXS5EU6-BqBQCfZ_.js → railroadDiagram-RFXS5EU6-pJh_afC-.js} +1 -1
  112. package/ui-dist/assets/{requirementDiagram-TGXJPOKE-CSkS2SPX.js → requirementDiagram-TGXJPOKE-BGgk3AxL.js} +1 -1
  113. package/ui-dist/assets/{sankeyDiagram-HTMAVEWB-CgnZO3lC.js → sankeyDiagram-HTMAVEWB-DdPKE4bs.js} +1 -1
  114. package/ui-dist/assets/{sequenceDiagram-DBY2YBRQ-DHtt0uuq.js → sequenceDiagram-DBY2YBRQ-xlik6FjZ.js} +1 -1
  115. package/ui-dist/assets/{sizeCapture-X5ZJPWSS-CApvjjgj.js → sizeCapture-X5ZJPWSS-D_zKAjvf.js} +1 -1
  116. package/ui-dist/assets/{stateDiagram-2N3HPSRC-DvJNOzm2.js → stateDiagram-2N3HPSRC-BGQP8giG.js} +1 -1
  117. package/ui-dist/assets/stateDiagram-v2-6OUMAXLB-BMEtuB93.js +1 -0
  118. package/ui-dist/assets/{swimlanes-5IMT3BWC-DfQGr1Ph.js → swimlanes-5IMT3BWC-ZhE8oAxR.js} +2 -2
  119. package/ui-dist/assets/swimlanesDiagram-G3AALYLV-Bdh18WfM.js +8 -0
  120. package/ui-dist/assets/{timeline-definition-FHXFAJF6-BfEt2pSH.js → timeline-definition-FHXFAJF6-CUqfijnL.js} +1 -1
  121. package/ui-dist/assets/{vennDiagram-L72KCM5P-BwnjAS5O.js → vennDiagram-L72KCM5P-B_rqTUA0.js} +1 -1
  122. package/ui-dist/assets/{wardleyDiagram-EHGQE667-I4H5G4bu.js → wardleyDiagram-EHGQE667-BTvjybDi.js} +1 -1
  123. package/ui-dist/assets/{xterm-Bx_bzS86.js → xterm-CRpDYL2s.js} +1 -1
  124. package/ui-dist/assets/{xychartDiagram-FW5EYKEG-c9wafyO4.js → xychartDiagram-FW5EYKEG-ZBbwueZ5.js} +1 -1
  125. package/ui-dist/index.html +2 -2
  126. package/ui-dist/assets/channel-Dw8qUeMo.js +0 -1
  127. package/ui-dist/assets/classDiagram-OUVF2IWQ-BP_GJixo.js +0 -1
  128. package/ui-dist/assets/classDiagram-v2-EOCWNBFH-BP_GJixo.js +0 -1
  129. package/ui-dist/assets/index-WqUafwTi.css +0 -32
  130. package/ui-dist/assets/stateDiagram-v2-6OUMAXLB-B_eJRf5W.js +0 -1
  131. package/ui-dist/assets/swimlanesDiagram-G3AALYLV-BrIPYwzL.js +0 -8
@@ -12,8 +12,8 @@
12
12
  * - doc/product/domains/organizations-and-goals/goals-and-projects.md
13
13
  */
14
14
  import type { Db } from "@rudderhq/db";
15
- import { agents, goalActivities, goalChangeProposals, goalFeedbackEntries, goalOwnerAssignments, goalPlans, goalResultProposals, goals } from "@rudderhq/db";
16
- import type { AcceptGoalResultProposal, ActivateGoal, AssignGoalOwner, CreateGoalActivity, CreateGoalChangeProposal, CreateGoalFeedback, CreateGoalResultProposal, DecideGoalChangeProposal, EvaluateGoal, GoalContractPatch, GoalContractSnapshot, GoalDependencies, GoalEvaluationCandidate, GoalHistoryItem, GoalHistoryPage, GoalResultProposal, GoalResultReducerPreflight, GoalStartPreview, IssueAssigneeAgentRuntimeOverrides, PreviewGoalStart, PublicGoal, PublicGoalActivity, PublicGoalChangeProposal, PublicGoalOwnerAssignment, PublicGoalPlan, PublicGoalResultProposal, RejectGoalResultProposal, StartGoal, UpdateGoalPlan } from "@rudderhq/shared";
15
+ import { agents, goalActivities, goalChangeProposals, goalCheckpoints, goalFeedbackEntries, goalOwnerAssignments, goalPlans, goalResultProposals, goals } from "@rudderhq/db";
16
+ import type { AcceptGoalResultProposal, ActivateGoal, AssignGoalOwner, CreateGoalActivity, CreateGoalChangeProposal, CreateGoalFeedback, CreateGoalResultProposal, DecideGoalChangeProposal, EvaluateGoal, GoalCheckpointInput, GoalContractPatch, GoalContractSnapshot, GoalDependencies, GoalEvaluationCandidate, GoalHistoryItem, GoalHistoryPage, GoalResultProposal, GoalResultReducerPreflight, GoalStartPreview, IssueAssigneeAgentRuntimeOverrides, PreviewGoalStart, PublicGoal, PublicGoalActivity, PublicGoalChangeProposal, PublicGoalOwnerAssignment, PublicGoalPlan, PublicGoalResultProposal, RejectGoalResultProposal, StartGoal, UpdateGoalPlan } from "@rudderhq/shared";
17
17
  type GoalRow = typeof goals.$inferSelect;
18
18
  type GoalWakeupActor = {
19
19
  actorType: "user" | "agent" | "system";
@@ -24,7 +24,7 @@ type GoalWakeupDispatch = {
24
24
  wakeupRequestId: string;
25
25
  source: "on_demand";
26
26
  triggerDetail: "system";
27
- reason: "goal_started" | "goal_feedback" | "goal_change_decided";
27
+ reason: "goal_started" | "goal_feedback" | "goal_change_decided" | "goal_continuation";
28
28
  payload: Record<string, unknown>;
29
29
  contextSnapshot: Record<string, unknown>;
30
30
  requestedByActorType: GoalWakeupActor["actorType"];
@@ -45,6 +45,28 @@ type PublicEvidenceOptions = {
45
45
  export declare function publicGoalText(value: string): string;
46
46
  export declare function publicGoalView(goal: GoalRow): PublicGoal;
47
47
  export declare function publicGoalActivity(activity: typeof goalActivities.$inferSelect, options?: PublicEvidenceOptions): PublicGoalActivity;
48
+ export declare function publicGoalCheckpoint(checkpoint: typeof goalCheckpoints.$inferSelect): {
49
+ id: string;
50
+ orgId: string;
51
+ goalId: string;
52
+ runId: string;
53
+ ownerAgentId: string;
54
+ submittedByAgentId: string;
55
+ inputHash: string;
56
+ idempotencyKey: string;
57
+ summary: string;
58
+ evidenceRefs: string[];
59
+ planPayload: Record<string, unknown> | null;
60
+ planRevisionBefore: number;
61
+ planRevisionAfter: number;
62
+ continuation: {
63
+ kind: "commitment" | "wait" | "decision" | "verification";
64
+ summary: string;
65
+ wakeCondition: string | null;
66
+ };
67
+ continuationWakeupRequestId: string | null;
68
+ createdAt: Date;
69
+ };
48
70
  export declare function publicGoalDetail(input: GoalRow & {
49
71
  ownerAssignment: typeof goalOwnerAssignments.$inferSelect | null;
50
72
  plan: typeof goalPlans.$inferSelect | null;
@@ -1467,6 +1489,53 @@ export declare function goalService(db: Db): {
1467
1489
  createdAt: Date;
1468
1490
  updatedAt: Date;
1469
1491
  }>;
1492
+ latestCheckpoint: (id: string) => Promise<{
1493
+ id: string;
1494
+ orgId: string;
1495
+ goalId: string;
1496
+ runId: string;
1497
+ ownerAgentId: string;
1498
+ submittedByAgentId: string;
1499
+ inputHash: string;
1500
+ idempotencyKey: string;
1501
+ summary: string;
1502
+ evidenceRefs: string[];
1503
+ planPayload: Record<string, unknown> | null;
1504
+ planRevisionBefore: number;
1505
+ planRevisionAfter: number;
1506
+ continuationKind: "commitment" | "wait" | "decision" | "verification";
1507
+ continuationSummary: string;
1508
+ wakeCondition: string | null;
1509
+ continuationWakeupRequestId: string | null;
1510
+ createdAt: Date;
1511
+ }>;
1512
+ recentCheckpoints: (id: string) => Promise<{
1513
+ id: string;
1514
+ orgId: string;
1515
+ goalId: string;
1516
+ runId: string;
1517
+ ownerAgentId: string;
1518
+ submittedByAgentId: string;
1519
+ inputHash: string;
1520
+ idempotencyKey: string;
1521
+ summary: string;
1522
+ evidenceRefs: string[];
1523
+ planPayload: Record<string, unknown> | null;
1524
+ planRevisionBefore: number;
1525
+ planRevisionAfter: number;
1526
+ continuationKind: "commitment" | "wait" | "decision" | "verification";
1527
+ continuationSummary: string;
1528
+ wakeCondition: string | null;
1529
+ continuationWakeupRequestId: string | null;
1530
+ createdAt: Date;
1531
+ }[]>;
1532
+ pendingContinuationWake: (id: string) => Promise<{
1533
+ id: string;
1534
+ status: string;
1535
+ planRevision: number | null;
1536
+ checkpointId: string | null;
1537
+ continuation: Record<string, unknown>;
1538
+ } | null>;
1470
1539
  create: (orgId: string, data: {
1471
1540
  title: string;
1472
1541
  description?: string | null;
@@ -1593,6 +1662,29 @@ export declare function goalService(db: Db): {
1593
1662
  invalidationConditions: unknown[];
1594
1663
  createdByAgentId: string | null;
1595
1664
  }>;
1665
+ checkpoint: (id: string, input: GoalCheckpointInput, actorAgentId: string | null, actorRunId: string | null) => Promise<{
1666
+ checkpoint: {
1667
+ id: string;
1668
+ runId: string;
1669
+ summary: string;
1670
+ orgId: string;
1671
+ ownerAgentId: string;
1672
+ createdAt: Date;
1673
+ goalId: string;
1674
+ wakeCondition: string | null;
1675
+ evidenceRefs: string[];
1676
+ idempotencyKey: string;
1677
+ continuationSummary: string;
1678
+ continuationKind: "commitment" | "wait" | "decision" | "verification";
1679
+ submittedByAgentId: string;
1680
+ inputHash: string;
1681
+ planPayload: Record<string, unknown> | null;
1682
+ planRevisionBefore: number;
1683
+ planRevisionAfter: number;
1684
+ continuationWakeupRequestId: string | null;
1685
+ };
1686
+ dispatch: GoalWakeupDispatch | null;
1687
+ }>;
1596
1688
  listActivities: (id: string) => Omit<import("drizzle-orm/pg-core").PgSelectBase<"goal_activities", {
1597
1689
  id: import("drizzle-orm/pg-core").PgColumn<{
1598
1690
  name: "id";
@@ -2098,10 +2190,10 @@ export declare function goalService(db: Db): {
2098
2190
  orgId: string;
2099
2191
  createdAt: Date;
2100
2192
  goalId: string;
2101
- commitmentRef: string | null;
2102
- runRef: string | null;
2103
2193
  evidenceRefs: unknown[];
2104
2194
  idempotencyKey: string | null;
2195
+ commitmentRef: string | null;
2196
+ runRef: string | null;
2105
2197
  occurredAt: Date;
2106
2198
  contractRevision: number;
2107
2199
  submittedByAgentId: string | null;
@@ -1 +1 @@
1
- {"version":3,"file":"goals.d.ts","sourceRoot":"","sources":["../../src/services/goals.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"goals.d.ts","sourceRoot":"","sources":["../../src/services/goals.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { agentWakeupRequests, agents, approvals, assets, authUsers, automations, calendarEvents, costEvents, financeEvents, goalActivities, goalChangeProposals, goalFeedbackEntries, goalOwnerAssignments, goalPlans, goalResultProposals, goalStartRequests, goals, heartbeatRuns, issues, organizations, projectGoals, projects, } from "@rudderhq/db";
1
+ import { agentWakeupRequests, agents, approvals, assets, authUsers, automations, calendarEvents, costEvents, financeEvents, goalActivities, goalChangeProposals, goalCheckpoints, goalFeedbackEntries, goalOwnerAssignments, goalPlans, goalResultProposals, goalStartRequests, goals, heartbeatRuns, issues, organizations, projectGoals, projects, } from "@rudderhq/db";
2
2
  import { activateGoalSchema, parseLibraryEntryMentionHref, parseLibraryFileMentionHref } from "@rudderhq/shared";
3
3
  import { and, asc, desc, eq, gt, inArray, isNotNull, isNull, lt, or, sql } from "drizzle-orm";
4
4
  import { createHash, randomUUID } from "node:crypto";
@@ -400,6 +400,30 @@ export function publicGoalActivity(activity, options = {}) {
400
400
  createdAt: activity.createdAt,
401
401
  };
402
402
  }
403
+ export function publicGoalCheckpoint(checkpoint) {
404
+ return {
405
+ id: checkpoint.id,
406
+ orgId: checkpoint.orgId,
407
+ goalId: checkpoint.goalId,
408
+ runId: checkpoint.runId,
409
+ ownerAgentId: checkpoint.ownerAgentId,
410
+ submittedByAgentId: checkpoint.submittedByAgentId,
411
+ inputHash: checkpoint.inputHash,
412
+ idempotencyKey: checkpoint.idempotencyKey,
413
+ summary: publicGoalText(checkpoint.summary),
414
+ evidenceRefs: checkpoint.evidenceRefs,
415
+ planPayload: checkpoint.planPayload,
416
+ planRevisionBefore: checkpoint.planRevisionBefore,
417
+ planRevisionAfter: checkpoint.planRevisionAfter,
418
+ continuation: {
419
+ kind: checkpoint.continuationKind,
420
+ summary: publicGoalText(checkpoint.continuationSummary),
421
+ wakeCondition: checkpoint.wakeCondition,
422
+ },
423
+ continuationWakeupRequestId: checkpoint.continuationWakeupRequestId,
424
+ createdAt: checkpoint.createdAt,
425
+ };
426
+ }
403
427
  export function publicGoalDetail(input, options = {}) {
404
428
  return {
405
429
  ...publicGoalView(input),
@@ -1012,15 +1036,47 @@ export function goalService(db) {
1012
1036
  ]), isNull(agentWakeupRequests.runId))).orderBy(desc(agentWakeupRequests.requestedAt)).limit(1)
1013
1037
  .then((rows) => rows[0] ?? null);
1014
1038
  }
1039
+ async function cancelPendingGoalContinuationWakes(database, goalId, reason) {
1040
+ const pending = await database.select({
1041
+ id: agentWakeupRequests.id,
1042
+ runId: agentWakeupRequests.runId,
1043
+ }).from(agentWakeupRequests).where(and(sql `${agentWakeupRequests.payload} ->> 'goalId' = ${goalId}`, eq(agentWakeupRequests.reason, "goal_continuation"), inArray(agentWakeupRequests.status, ["queued", "deferred_goal_focus", "deferred_agent_paused", "deferred_goal_blocked"])));
1044
+ if (pending.length === 0)
1045
+ return;
1046
+ const now = new Date();
1047
+ for (const wake of pending) {
1048
+ if (wake.runId) {
1049
+ await database.update(heartbeatRuns).set({
1050
+ status: "cancelled",
1051
+ finishedAt: now,
1052
+ error: reason,
1053
+ errorCode: "goal.result_proposal_ready",
1054
+ updatedAt: now,
1055
+ }).where(and(eq(heartbeatRuns.id, wake.runId), eq(heartbeatRuns.status, "queued")));
1056
+ }
1057
+ await database.update(agentWakeupRequests).set({
1058
+ status: "cancelled",
1059
+ finishedAt: now,
1060
+ error: reason,
1061
+ updatedAt: now,
1062
+ }).where(and(eq(agentWakeupRequests.id, wake.id), inArray(agentWakeupRequests.status, ["queued", "deferred_goal_focus", "deferred_agent_paused", "deferred_goal_blocked"])));
1063
+ }
1064
+ }
1015
1065
  async function ensureGoalWakeupIntent(database, goal, input) {
1016
1066
  if (!goal.ownerAgentId)
1017
1067
  throw conflict("Goal has no Owner Agent to wake");
1068
+ const currentPlan = goal.planRevision > 0
1069
+ ? await database.select().from(goalPlans).where(and(eq(goalPlans.goalId, goal.id), eq(goalPlans.revision, goal.planRevision))).then((rows) => rows[0] ?? null)
1070
+ : null;
1071
+ const latestCheckpoint = await database.select().from(goalCheckpoints).where(eq(goalCheckpoints.goalId, goal.id)).orderBy(desc(goalCheckpoints.createdAt)).limit(1).then((rows) => rows[0] ?? null);
1018
1072
  const taskKey = `goal:${goal.id}:${input.event}:${input.eventId}`;
1019
1073
  const idempotencyKey = input.event === "goal_started"
1020
1074
  ? `goal-start:${input.eventId}`
1021
1075
  : input.event === "goal_feedback"
1022
1076
  ? `goal-feedback:${input.eventId}`
1023
- : `goal-change-decision:${input.eventId}:${input.decision?.decision ?? "unknown"}`;
1077
+ : input.event === "goal_change_decided"
1078
+ ? `goal-change-decision:${input.eventId}:${input.decision?.decision ?? "unknown"}`
1079
+ : `goal-continuation:${input.eventId}`;
1024
1080
  const payload = {
1025
1081
  event: input.event,
1026
1082
  goalId: goal.id,
@@ -1028,6 +1084,15 @@ export function goalService(db) {
1028
1084
  ...(input.event === "goal_started" ? { goalStartRequestId: input.eventId } : {}),
1029
1085
  ...(input.feedback ? { feedbackId: input.feedback.id } : {}),
1030
1086
  ...(input.decision ? { goalChangeProposalId: input.eventId, decision: input.decision.decision } : {}),
1087
+ ...(input.continuation ? {
1088
+ checkpointId: input.eventId,
1089
+ planRevision: input.continuation.planRevision,
1090
+ continuation: {
1091
+ kind: input.continuation.kind,
1092
+ summary: input.continuation.summary,
1093
+ wakeCondition: input.continuation.wakeCondition ?? null,
1094
+ },
1095
+ } : {}),
1031
1096
  };
1032
1097
  const contextSnapshot = {
1033
1098
  goalId: goal.id,
@@ -1046,6 +1111,18 @@ export function goalService(db) {
1046
1111
  actionDeadline: goal.actionDeadline,
1047
1112
  evaluationDeadline: goal.evaluationDeadline,
1048
1113
  },
1114
+ goalPlan: currentPlan
1115
+ ? {
1116
+ revision: currentPlan.revision,
1117
+ summary: currentPlan.summary,
1118
+ hypotheses: currentPlan.hypotheses,
1119
+ selectedPaths: currentPlan.selectedPaths,
1120
+ rejectedPaths: currentPlan.rejectedPaths,
1121
+ sequencing: currentPlan.sequencing,
1122
+ budgetAllocations: currentPlan.budgetAllocations,
1123
+ invalidationConditions: currentPlan.invalidationConditions,
1124
+ }
1125
+ : null,
1049
1126
  goalContinuation: {
1050
1127
  kind: goal.continuationKind,
1051
1128
  summary: goal.continuationSummary,
@@ -1066,6 +1143,21 @@ export function goalService(db) {
1066
1143
  status: input.decision.status,
1067
1144
  },
1068
1145
  } : {}),
1146
+ ...(latestCheckpoint ? {
1147
+ goalCheckpoint: {
1148
+ id: latestCheckpoint.id,
1149
+ summary: latestCheckpoint.summary,
1150
+ evidenceRefs: latestCheckpoint.evidenceRefs,
1151
+ planRevisionBefore: latestCheckpoint.planRevisionBefore,
1152
+ planRevisionAfter: latestCheckpoint.planRevisionAfter,
1153
+ continuationWakeupRequestId: latestCheckpoint.continuationWakeupRequestId,
1154
+ continuation: {
1155
+ kind: latestCheckpoint.continuationKind,
1156
+ summary: latestCheckpoint.continuationSummary,
1157
+ wakeCondition: latestCheckpoint.wakeCondition,
1158
+ },
1159
+ },
1160
+ } : {}),
1069
1161
  };
1070
1162
  const storedPayload = buildDeferredWakePayload(payload, contextSnapshot);
1071
1163
  const [inserted] = await database.insert(agentWakeupRequests).values({
@@ -1834,6 +1926,32 @@ export function goalService(db) {
1834
1926
  ]);
1835
1927
  return { ...goal, ownerAssignment, plan, activities };
1836
1928
  },
1929
+ latestCheckpoint: async (id) => db.select().from(goalCheckpoints)
1930
+ .where(eq(goalCheckpoints.goalId, id))
1931
+ .orderBy(desc(goalCheckpoints.createdAt)).limit(1)
1932
+ .then((rows) => rows[0] ?? null),
1933
+ recentCheckpoints: async (id) => db.select().from(goalCheckpoints)
1934
+ .where(eq(goalCheckpoints.goalId, id))
1935
+ .orderBy(desc(goalCheckpoints.createdAt)).limit(3),
1936
+ pendingContinuationWake: async (id) => db.select({
1937
+ id: agentWakeupRequests.id,
1938
+ status: agentWakeupRequests.status,
1939
+ payload: agentWakeupRequests.payload,
1940
+ }).from(agentWakeupRequests).where(and(sql `${agentWakeupRequests.payload} ->> 'goalId' = ${id}`, eq(agentWakeupRequests.reason, "goal_continuation"), inArray(agentWakeupRequests.status, ["queued", "deferred_goal_focus", "deferred_agent_paused", "deferred_goal_blocked"]), isNull(agentWakeupRequests.runId))).orderBy(desc(agentWakeupRequests.requestedAt)).limit(1)
1941
+ .then((rows) => {
1942
+ const row = rows[0];
1943
+ if (!row)
1944
+ return null;
1945
+ const payload = publicGoalRecord(row.payload);
1946
+ const continuation = publicGoalRecord(payload.continuation);
1947
+ return {
1948
+ id: row.id,
1949
+ status: row.status,
1950
+ planRevision: typeof payload.planRevision === "number" ? payload.planRevision : null,
1951
+ checkpointId: typeof payload.checkpointId === "string" ? payload.checkpointId : null,
1952
+ continuation,
1953
+ };
1954
+ }),
1837
1955
  create: async (orgId, data) => {
1838
1956
  if (data.ownerAgentId)
1839
1957
  await requireInvokableOwner(db, orgId, data.ownerAgentId);
@@ -1970,6 +2088,119 @@ export function goalService(db) {
1970
2088
  return plan;
1971
2089
  });
1972
2090
  },
2091
+ checkpoint: async (id, input, actorAgentId, actorRunId) => {
2092
+ if (!actorAgentId)
2093
+ throw forbidden("Only the Goal Owner Agent can create a checkpoint");
2094
+ if (!actorRunId)
2095
+ throw unprocessable("Goal checkpoint must be attributed to the current Run");
2096
+ const inputHash = stableGoalHash({
2097
+ summary: input.summary,
2098
+ evidenceRefs: input.evidenceRefs,
2099
+ expectedPlanRevision: input.expectedPlanRevision,
2100
+ plan: input.plan ?? null,
2101
+ continuation: input.continuation,
2102
+ });
2103
+ return db.transaction(async (tx) => {
2104
+ const database = tx;
2105
+ const current = await requireGoalForUpdate(database, id);
2106
+ assertCanonicalActiveGoal(current);
2107
+ assertGoalOwner(current, actorAgentId);
2108
+ const run = await requireGoalRun(database, current, actorRunId, actorAgentId);
2109
+ const existing = await database.select().from(goalCheckpoints).where(and(eq(goalCheckpoints.goalId, id), eq(goalCheckpoints.idempotencyKey, input.idempotencyKey))).then((rows) => rows[0] ?? null);
2110
+ if (existing) {
2111
+ if (existing.runId !== actorRunId) {
2112
+ throw conflict("Goal checkpoint idempotency key belongs to a different Run");
2113
+ }
2114
+ if (existing.inputHash !== inputHash) {
2115
+ throw conflict("Goal checkpoint idempotency key was reused with a different payload");
2116
+ }
2117
+ return { checkpoint: existing, dispatch: null };
2118
+ }
2119
+ if (run.status !== "running") {
2120
+ throw conflict("Goal checkpoint must be attributed to the current running Run");
2121
+ }
2122
+ const readyProposal = await database.select({ id: goalResultProposals.id }).from(goalResultProposals).where(and(eq(goalResultProposals.goalId, id), eq(goalResultProposals.status, "ready"))).limit(1).then((rows) => rows[0] ?? null);
2123
+ if (readyProposal)
2124
+ throw conflict("Goal already has a Result Proposal ready for review");
2125
+ if (current.planRevision !== input.expectedPlanRevision) {
2126
+ throw conflict("Goal Plan changed before checkpoint", {
2127
+ expectedPlanRevision: input.expectedPlanRevision,
2128
+ currentPlanRevision: current.planRevision,
2129
+ });
2130
+ }
2131
+ const nextPlanRevision = input.plan ? current.planRevision + 1 : current.planRevision;
2132
+ if (input.plan) {
2133
+ await database.insert(goalPlans).values({
2134
+ orgId: current.orgId,
2135
+ goalId: current.id,
2136
+ revision: nextPlanRevision,
2137
+ ...input.plan,
2138
+ createdByAgentId: actorAgentId,
2139
+ });
2140
+ }
2141
+ const now = new Date();
2142
+ const changedGoal = await database.update(goals).set({
2143
+ planRevision: nextPlanRevision,
2144
+ continuationKind: input.continuation.kind,
2145
+ continuationSummary: input.continuation.summary,
2146
+ wakeCondition: input.continuation.wakeCondition ?? null,
2147
+ updatedAt: now,
2148
+ }).where(and(eq(goals.id, id), eq(goals.orgId, current.orgId), eq(goals.lifecycle, "active"), eq(goals.planRevision, input.expectedPlanRevision))).returning().then((rows) => rows[0] ?? null);
2149
+ if (!changedGoal)
2150
+ throw conflict("Goal changed before checkpoint could be committed");
2151
+ const [checkpoint] = await database.insert(goalCheckpoints).values({
2152
+ orgId: current.orgId,
2153
+ goalId: current.id,
2154
+ runId: actorRunId,
2155
+ ownerAgentId: current.ownerAgentId,
2156
+ submittedByAgentId: actorAgentId,
2157
+ inputHash,
2158
+ idempotencyKey: input.idempotencyKey,
2159
+ summary: input.summary,
2160
+ evidenceRefs: input.evidenceRefs,
2161
+ planPayload: input.plan ? { ...input.plan } : null,
2162
+ planRevisionBefore: current.planRevision,
2163
+ planRevisionAfter: nextPlanRevision,
2164
+ continuationKind: input.continuation.kind,
2165
+ continuationSummary: input.continuation.summary,
2166
+ wakeCondition: input.continuation.wakeCondition ?? null,
2167
+ }).returning();
2168
+ if (!checkpoint)
2169
+ throw conflict("Goal checkpoint could not be recorded");
2170
+ await database.insert(goalActivities).values({
2171
+ orgId: current.orgId,
2172
+ goalId: current.id,
2173
+ contractRevision: current.contractRevision,
2174
+ submittedByAgentId: actorAgentId,
2175
+ agentOwnerRefAtTime: current.ownerAgentId,
2176
+ activityKind: "checkpoint",
2177
+ runRef: actorRunId,
2178
+ summary: input.summary,
2179
+ evidenceRefs: input.evidenceRefs,
2180
+ idempotencyKey: `goal-checkpoint:${input.idempotencyKey}`,
2181
+ occurredAt: now,
2182
+ }).onConflictDoNothing();
2183
+ let dispatch = null;
2184
+ if (input.continuation.kind === "commitment" || input.continuation.kind === "verification") {
2185
+ dispatch = await ensureGoalWakeupIntent(database, changedGoal, {
2186
+ event: "goal_continuation",
2187
+ eventId: checkpoint.id,
2188
+ actor: { actorType: "agent", actorId: actorAgentId },
2189
+ continuation: {
2190
+ kind: input.continuation.kind,
2191
+ summary: input.continuation.summary,
2192
+ wakeCondition: input.continuation.wakeCondition ?? null,
2193
+ planRevision: nextPlanRevision,
2194
+ },
2195
+ });
2196
+ const updated = await database.update(goalCheckpoints).set({ continuationWakeupRequestId: dispatch.wakeupRequestId })
2197
+ .where(eq(goalCheckpoints.id, checkpoint.id)).returning().then((rows) => rows[0] ?? null);
2198
+ if (updated)
2199
+ return { checkpoint: updated, dispatch };
2200
+ }
2201
+ return { checkpoint, dispatch };
2202
+ });
2203
+ },
1973
2204
  listActivities: (id) => db.select().from(goalActivities).where(eq(goalActivities.goalId, id))
1974
2205
  .orderBy(desc(goalActivities.occurredAt), desc(goalActivities.createdAt)).limit(100),
1975
2206
  createActivity: async (id, input, actorAgentId = null) => {
@@ -2304,6 +2535,11 @@ export function goalService(db) {
2304
2535
  const candidateHash = stableGoalHash(candidate);
2305
2536
  return db.transaction(async (tx) => {
2306
2537
  const database = tx;
2538
+ // Heartbeat claims hold the Owner Agent row before Goal and Run rows;
2539
+ // take the same lock first so Result Proposal cancellation cannot
2540
+ // deadlock on heartbeat_runs.agent_id foreign-key checks.
2541
+ await database.select({ id: agents.id }).from(agents)
2542
+ .where(eq(agents.id, actorAgentId)).for("update");
2307
2543
  const current = await requireGoalForUpdate(database, id);
2308
2544
  assertGoalOwner(current, actorAgentId);
2309
2545
  if (actorRunId)
@@ -2328,6 +2564,7 @@ export function goalService(db) {
2328
2564
  if (readyProposal) {
2329
2565
  throw conflict("This Goal already has a Result Proposal ready for review");
2330
2566
  }
2567
+ await cancelPendingGoalContinuationWakes(database, id, "Cancelled because a Goal Result Proposal is ready for human Acceptance");
2331
2568
  }
2332
2569
  const [proposal] = await database.insert(goalResultProposals).values({
2333
2570
  orgId: current.orgId,