@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.
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/routes/chats.d.ts.map +1 -1
- package/dist/routes/chats.js +22 -3
- package/dist/routes/chats.js.map +1 -1
- package/dist/routes/goals.d.ts.map +1 -1
- package/dist/routes/goals.js +58 -4
- package/dist/routes/goals.js.map +1 -1
- package/dist/routes/issues.mutations.d.ts.map +1 -1
- package/dist/routes/issues.mutations.js +3 -0
- package/dist/routes/issues.mutations.js.map +1 -1
- package/dist/services/agent-startup-context.d.ts +1 -1
- package/dist/services/agent-startup-context.d.ts.map +1 -1
- package/dist/services/agent-startup-context.js +11 -2
- package/dist/services/agent-startup-context.js.map +1 -1
- package/dist/services/chat-assistant.d.ts.map +1 -1
- package/dist/services/chat-assistant.js +11 -1
- package/dist/services/chat-assistant.js.map +1 -1
- package/dist/services/chats.d.ts +85 -0
- package/dist/services/chats.d.ts.map +1 -1
- package/dist/services/chats.js +36 -1
- package/dist/services/chats.js.map +1 -1
- package/dist/services/goals.d.ts +97 -5
- package/dist/services/goals.d.ts.map +1 -1
- package/dist/services/goals.js +239 -2
- package/dist/services/goals.js.map +1 -1
- package/dist/services/runtime-kernel/assignment-run-guardrail.d.ts +78 -23
- package/dist/services/runtime-kernel/assignment-run-guardrail.d.ts.map +1 -1
- package/dist/services/runtime-kernel/assignment-run-guardrail.js +225 -2
- package/dist/services/runtime-kernel/assignment-run-guardrail.js.map +1 -1
- package/dist/services/runtime-kernel/assignment-run-guardrail.test.js +103 -3
- package/dist/services/runtime-kernel/assignment-run-guardrail.test.js.map +1 -1
- 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 +83 -13
- package/dist/services/runtime-kernel/heartbeat.execute.js.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.js +44 -2
- package/dist/services/runtime-kernel/heartbeat.js.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.wakeup.js +1 -1
- package/dist/services/runtime-kernel/heartbeat.wakeup.js.map +1 -1
- package/dist/services/workspace-backups.d.ts +1 -1
- package/dist/services/workspace-backups.d.ts.map +1 -1
- package/dist/services/workspace-backups.js +50 -17
- package/dist/services/workspace-backups.js.map +1 -1
- package/package.json +14 -14
- package/resources/bundled-skills/rudder-docs/references/cli-reference.md +9 -6
- package/skills/rudder-docs/references/cli-reference.md +9 -6
- package/ui-dist/assets/{LibraryLiveSurface-C0jsVm76.js → LibraryLiveSurface-De1p59PK.js} +1 -1
- package/ui-dist/assets/{abnfDiagram-VRR7QNED-U1mPal0M.js → abnfDiagram-VRR7QNED-BggxrEZR.js} +1 -1
- package/ui-dist/assets/{addon-fit-B18ohVaY.js → addon-fit-Cc1gOtSX.js} +1 -1
- package/ui-dist/assets/{arc-CYOWHL_W.js → arc-0kNrc9xt.js} +1 -1
- package/ui-dist/assets/{architectureDiagram-ZJ3FMSHR-CmiN5Erc.js → architectureDiagram-ZJ3FMSHR-BOCa-5ab.js} +1 -1
- package/ui-dist/assets/{blockDiagram-677ZJIJ3-Chl4uqNv.js → blockDiagram-677ZJIJ3-CQU5jcsO.js} +1 -1
- package/ui-dist/assets/{c4Diagram-LMCZKHZV-DSUkRSKu.js → c4Diagram-LMCZKHZV-ChgWIw5O.js} +1 -1
- package/ui-dist/assets/channel-eAoWqZqJ.js +1 -0
- package/ui-dist/assets/{chunk-2Q5K7J3B-DTJMcqWI.js → chunk-2Q5K7J3B-B4yrwesI.js} +1 -1
- package/ui-dist/assets/{chunk-32BRIVSS-zdmMVLnX.js → chunk-32BRIVSS-mhAeSMlR.js} +1 -1
- package/ui-dist/assets/{chunk-5VM5RSS4-D7CHEd8F.js → chunk-5VM5RSS4-BmS_u59G.js} +1 -1
- package/ui-dist/assets/{chunk-EX3LRPZG-BSlg__Tm.js → chunk-EX3LRPZG-DXoTKkLG.js} +1 -1
- package/ui-dist/assets/{chunk-JWPE2WC7-DZ-jdJNV.js → chunk-JWPE2WC7-Bj9myT03.js} +1 -1
- package/ui-dist/assets/{chunk-MOJQB5TN-BBqkM1ra.js → chunk-MOJQB5TN-OAoJna8Y.js} +1 -1
- package/ui-dist/assets/{chunk-RYQCIY6F-DcEtbyB7.js → chunk-RYQCIY6F-AGLA7TJn.js} +1 -1
- package/ui-dist/assets/{chunk-V7JOEXUC-DzXDmCLX.js → chunk-V7JOEXUC-YGM2tDK2.js} +1 -1
- package/ui-dist/assets/{chunk-VR4S4FIN-CY5XcPhT.js → chunk-VR4S4FIN-DqaZn9Ty.js} +1 -1
- package/ui-dist/assets/{chunk-XXDRQBXY-kROQNOzd.js → chunk-XXDRQBXY-Cpqn_8Bl.js} +1 -1
- package/ui-dist/assets/classDiagram-OUVF2IWQ-c94PI6yY.js +1 -0
- package/ui-dist/assets/classDiagram-v2-EOCWNBFH-c94PI6yY.js +1 -0
- package/ui-dist/assets/{cose-bilkent-JH36ORCC-CrnVyxOw.js → cose-bilkent-JH36ORCC-BVe-X26w.js} +1 -1
- package/ui-dist/assets/{cynefin-VYW2F7L2-LqXNJWXt.js → cynefin-VYW2F7L2-DlDrrBWp.js} +1 -1
- package/ui-dist/assets/{cynefinDiagram-TSTJHNR4-CuIowjom.js → cynefinDiagram-TSTJHNR4-BSHvFeGh.js} +1 -1
- package/ui-dist/assets/{dagre-VKFMJZFB-_JHXcILM.js → dagre-VKFMJZFB-tUm70k9h.js} +1 -1
- package/ui-dist/assets/{diagram-FQU43EPY-BsWNb9wJ.js → diagram-FQU43EPY-C5kjITq7.js} +1 -1
- package/ui-dist/assets/{diagram-G47NLZAW-NRzY78z7.js → diagram-G47NLZAW-BrbHgt8r.js} +1 -1
- package/ui-dist/assets/{diagram-NH7WQ7WH-D83JoKpS.js → diagram-NH7WQ7WH-DT7PdghT.js} +1 -1
- package/ui-dist/assets/{diagram-OA4YK3LP-CiQTkxEF.js → diagram-OA4YK3LP-wOjhRHRo.js} +1 -1
- package/ui-dist/assets/{diagram-WEI45ONY-zNOFqhj1.js → diagram-WEI45ONY-Dz9vtaDT.js} +1 -1
- package/ui-dist/assets/{ebnfDiagram-CCIWWBDH-l9X92AzX.js → ebnfDiagram-CCIWWBDH-BT5TzIA6.js} +1 -1
- package/ui-dist/assets/{erDiagram-Q63AITRT-CZ2xCVfq.js → erDiagram-Q63AITRT-DLCpoOEP.js} +1 -1
- package/ui-dist/assets/{flowDiagram-23GEKE2U-DsqDeyPl.js → flowDiagram-23GEKE2U-DfF2COjh.js} +1 -1
- package/ui-dist/assets/{ganttDiagram-NO4QXBWP-ZovCvOAJ.js → ganttDiagram-NO4QXBWP-1d0KDwQs.js} +1 -1
- package/ui-dist/assets/{gitGraphDiagram-IHSO6WYX-CqBEHQAs.js → gitGraphDiagram-IHSO6WYX-COLjS1ZR.js} +1 -1
- package/ui-dist/assets/{graph-ClsHEbyV.js → graph-B7fcgpw_.js} +1 -1
- package/ui-dist/assets/{index-BeOqvf7L.js → index-B6zSdXAR.js} +1 -1
- package/ui-dist/assets/{index-Dd7fnO2Z.js → index-BczgTMAn.js} +1 -1
- package/ui-dist/assets/{index-kq-WskyQ.js → index-CH8I9acP.js} +1 -1
- package/ui-dist/assets/{index-Cv5Jhfkz.js → index-CMNULCMJ.js} +1 -1
- package/ui-dist/assets/{index-BCGk5KQX.js → index-COLwjKBR.js} +1 -1
- package/ui-dist/assets/{index-BDk7B-iN.js → index-CTIfCQqR.js} +1 -1
- package/ui-dist/assets/{index-DfoLd51a.js → index-CXg1YCeI.js} +1 -1
- package/ui-dist/assets/{index-B1A7LikO.js → index-CZYXpHv4.js} +1 -1
- package/ui-dist/assets/{index-FPebsItp.js → index-CbqgXGcs.js} +1 -1
- package/ui-dist/assets/{index-CkFvrO-z.js → index-CgkYyYx9.js} +1 -1
- package/ui-dist/assets/{index-FgEEryl0.js → index-D27Bbc-x.js} +1 -1
- package/ui-dist/assets/{index-Cv6MlpIo.js → index-DTc5LpTU.js} +1 -1
- package/ui-dist/assets/{index-CxDxuCus.js → index-Denv6wuU.js} +1 -1
- package/ui-dist/assets/{index-BXtyqqSu.js → index-DttnaNlV.js} +534 -529
- package/ui-dist/assets/index-RSbihTRP.css +32 -0
- package/ui-dist/assets/{index-Cgo8Oik4.js → index-vtghjwab.js} +1 -1
- package/ui-dist/assets/{infoDiagram-FWYZ7A6U-DZJsMi0N.js → infoDiagram-FWYZ7A6U-Bg4YQUu2.js} +1 -1
- package/ui-dist/assets/{ishikawaDiagram-FXEZZL3T-7VX262KJ.js → ishikawaDiagram-FXEZZL3T-BtgUVI_I.js} +1 -1
- package/ui-dist/assets/{journeyDiagram-5HDEW3XC-W9pqd9nR.js → journeyDiagram-5HDEW3XC-BGHGjvN4.js} +1 -1
- package/ui-dist/assets/{kanban-definition-HUTT4EX6-eSHDQWV5.js → kanban-definition-HUTT4EX6-DekQSNo8.js} +1 -1
- package/ui-dist/assets/{layout-BxwzAdvW.js → layout-Bsw9hK6u.js} +1 -1
- package/ui-dist/assets/{linear-D6gDQD1r.js → linear-D8D1R-4C.js} +1 -1
- package/ui-dist/assets/{map-Dl8Tlr4E.js → map-BUIcuf4c.js} +1 -1
- package/ui-dist/assets/{mermaid.core-DqGHAs5q.js → mermaid.core-CYZMLemV.js} +4 -4
- package/ui-dist/assets/{mindmap-definition-LN4V7U3C-DlkWbxIe.js → mindmap-definition-LN4V7U3C-mjS9avIS.js} +1 -1
- package/ui-dist/assets/{pegDiagram-2B236MQR-Cc49Opte.js → pegDiagram-2B236MQR-Buziry9m.js} +1 -1
- package/ui-dist/assets/{pieDiagram-ENE6RG2P-Cso_iAzG.js → pieDiagram-ENE6RG2P-B_9BmFEg.js} +1 -1
- package/ui-dist/assets/{quadrantDiagram-ABIIQ3AL-FKJGDnHG.js → quadrantDiagram-ABIIQ3AL-BxFdUA8s.js} +1 -1
- package/ui-dist/assets/{railroadDiagram-RFXS5EU6-BqBQCfZ_.js → railroadDiagram-RFXS5EU6-pJh_afC-.js} +1 -1
- package/ui-dist/assets/{requirementDiagram-TGXJPOKE-CSkS2SPX.js → requirementDiagram-TGXJPOKE-BGgk3AxL.js} +1 -1
- package/ui-dist/assets/{sankeyDiagram-HTMAVEWB-CgnZO3lC.js → sankeyDiagram-HTMAVEWB-DdPKE4bs.js} +1 -1
- package/ui-dist/assets/{sequenceDiagram-DBY2YBRQ-DHtt0uuq.js → sequenceDiagram-DBY2YBRQ-xlik6FjZ.js} +1 -1
- package/ui-dist/assets/{sizeCapture-X5ZJPWSS-CApvjjgj.js → sizeCapture-X5ZJPWSS-D_zKAjvf.js} +1 -1
- package/ui-dist/assets/{stateDiagram-2N3HPSRC-DvJNOzm2.js → stateDiagram-2N3HPSRC-BGQP8giG.js} +1 -1
- package/ui-dist/assets/stateDiagram-v2-6OUMAXLB-BMEtuB93.js +1 -0
- package/ui-dist/assets/{swimlanes-5IMT3BWC-DfQGr1Ph.js → swimlanes-5IMT3BWC-ZhE8oAxR.js} +2 -2
- package/ui-dist/assets/swimlanesDiagram-G3AALYLV-Bdh18WfM.js +8 -0
- package/ui-dist/assets/{timeline-definition-FHXFAJF6-BfEt2pSH.js → timeline-definition-FHXFAJF6-CUqfijnL.js} +1 -1
- package/ui-dist/assets/{vennDiagram-L72KCM5P-BwnjAS5O.js → vennDiagram-L72KCM5P-B_rqTUA0.js} +1 -1
- package/ui-dist/assets/{wardleyDiagram-EHGQE667-I4H5G4bu.js → wardleyDiagram-EHGQE667-BTvjybDi.js} +1 -1
- package/ui-dist/assets/{xterm-Bx_bzS86.js → xterm-CRpDYL2s.js} +1 -1
- package/ui-dist/assets/{xychartDiagram-FW5EYKEG-c9wafyO4.js → xychartDiagram-FW5EYKEG-ZBbwueZ5.js} +1 -1
- package/ui-dist/index.html +2 -2
- package/ui-dist/assets/channel-Dw8qUeMo.js +0 -1
- package/ui-dist/assets/classDiagram-OUVF2IWQ-BP_GJixo.js +0 -1
- package/ui-dist/assets/classDiagram-v2-EOCWNBFH-BP_GJixo.js +0 -1
- package/ui-dist/assets/index-WqUafwTi.css +0 -32
- package/ui-dist/assets/stateDiagram-v2-6OUMAXLB-B_eJRf5W.js +0 -1
- package/ui-dist/assets/swimlanesDiagram-G3AALYLV-BrIPYwzL.js +0 -8
package/dist/services/goals.d.ts
CHANGED
|
@@ -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":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAEL,MAAM,EAQN,cAAc,EACd,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,SAAS,EACT,mBAAmB,EAEnB,KAAK,EAMN,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EACV,wBAAwB,EACxB,YAAY,EACZ,eAAe,EACf,kBAAkB,EAClB,wBAAwB,EACxB,kBAAkB,EAClB,wBAAwB,EACxB,wBAAwB,EACxB,YAAY,EACZ,iBAAiB,EACjB,oBAAoB,EACpB,gBAAgB,EAEhB,uBAAuB,EAEvB,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,0BAA0B,EAE1B,gBAAgB,EAChB,kCAAkC,EAClC,gBAAgB,EAChB,UAAU,EACV,kBAAkB,EAClB,wBAAwB,EACxB,yBAAyB,EACzB,cAAc,EACd,wBAAwB,EACxB,wBAAwB,EACxB,SAAS,EACT,cAAc,EACf,MAAM,kBAAkB,CAAC;AAQ1B,KAAK,OAAO,GAAG,OAAO,KAAK,CAAC,YAAY,CAAC;AAEzC,KAAK,eAAe,GAAG;IACrB,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;IACvC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB,CAAC;AACF,KAAK,kBAAkB,GAAG;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,WAAW,CAAC;IACpB,aAAa,EAAE,QAAQ,CAAC;IACxB,MAAM,EAAE,cAAc,GAAG,eAAe,GAAG,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"goals.d.ts","sourceRoot":"","sources":["../../src/services/goals.ts"],"names":[],"mappings":"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"}
|
package/dist/services/goals.js
CHANGED
|
@@ -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
|
-
:
|
|
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,
|