@straiffi/archon 1.7.2 → 1.7.3

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 (164) hide show
  1. package/dist/client/assets/ActivityView-DTEenQas.js +1 -0
  2. package/dist/client/assets/GitHubActionsDialog-BKWHonUS.js +1 -0
  3. package/dist/client/assets/TestsDialog-cBaoffCs.js +4 -0
  4. package/dist/client/assets/{architectureDiagram-3BPJPVTR-Do9nbC8v.js → architectureDiagram-3BPJPVTR-BzzGotac.js} +1 -1
  5. package/dist/client/assets/{blockDiagram-GPEHLZMM-DGGOLHF8.js → blockDiagram-GPEHLZMM-DIcqLHKg.js} +1 -1
  6. package/dist/client/assets/{c4Diagram-AAUBKEIU-Bz7tQybs.js → c4Diagram-AAUBKEIU-Hc1Sqmhs.js} +1 -1
  7. package/dist/client/assets/channel-Cym17waa.js +1 -0
  8. package/dist/client/assets/{chunk-2J33WTMH-CJO-GmWJ.js → chunk-2J33WTMH-CWSwjsgk.js} +1 -1
  9. package/dist/client/assets/{chunk-3OPIFGDE-DPAVagpC.js → chunk-3OPIFGDE-BnX3DljN.js} +1 -1
  10. package/dist/client/assets/{chunk-5ZQYHXKU-Cof75Mu7.js → chunk-5ZQYHXKU-EyyJlI-d.js} +1 -1
  11. package/dist/client/assets/{chunk-727SXJPM-COuPqQ8_.js → chunk-727SXJPM-Ci6CfxWj.js} +1 -1
  12. package/dist/client/assets/{chunk-AQP2D5EJ-CFj5KabW.js → chunk-AQP2D5EJ-RKZNsJTm.js} +1 -1
  13. package/dist/client/assets/{chunk-CSCIHK7Q-C4M6w5cT.js → chunk-CSCIHK7Q-DBf0Euoj.js} +1 -1
  14. package/dist/client/assets/{chunk-KSCS5N6A-ByaiwVue.js → chunk-KSCS5N6A-BmLQI_2S.js} +1 -1
  15. package/dist/client/assets/{chunk-L5ZTLDWV-Cx5jeot9.js → chunk-L5ZTLDWV-DKwVAb8G.js} +1 -1
  16. package/dist/client/assets/{chunk-LZXEDZCA-DmGtztud.js → chunk-LZXEDZCA-axotKkbz.js} +2 -2
  17. package/dist/client/assets/{chunk-ND2GUHAM-i3yuspqL.js → chunk-ND2GUHAM-BBlJ4nXC.js} +1 -1
  18. package/dist/client/assets/{chunk-NZK2D7GU-CQ4E_jP4.js → chunk-NZK2D7GU-BKJGoZZt.js} +1 -1
  19. package/dist/client/assets/{chunk-O5CBEL6O-D2g4VDCd.js → chunk-O5CBEL6O-C-Ghigo1.js} +1 -1
  20. package/dist/client/assets/{chunk-WU5MYG2G-exIu-zQ2.js → chunk-WU5MYG2G-CCzVWYcd.js} +1 -1
  21. package/dist/client/assets/classDiagram-4FO5ZUOK-BcigvvIC.js +1 -0
  22. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-3AdSuE0N.js +1 -0
  23. package/dist/client/assets/{dagre-BM42HDAG-DvF75yLZ.js → dagre-BM42HDAG-rwIdPcjI.js} +1 -1
  24. package/dist/client/assets/{diagram-2AECGRRQ-DFv0HxLL.js → diagram-2AECGRRQ-DJWxOQsg.js} +1 -1
  25. package/dist/client/assets/{diagram-5GNKFQAL-C_LRir0-.js → diagram-5GNKFQAL-C-mQeFtd.js} +1 -1
  26. package/dist/client/assets/{diagram-KO2AKTUF-DGZxRDRy.js → diagram-KO2AKTUF-BAu6u4sR.js} +1 -1
  27. package/dist/client/assets/{diagram-LMA3HP47-UXt0uti4.js → diagram-LMA3HP47-U6CbvBn0.js} +1 -1
  28. package/dist/client/assets/{diagram-OG6HWLK6-CFbZS4n5.js → diagram-OG6HWLK6-DNTwFcs1.js} +1 -1
  29. package/dist/client/assets/{erDiagram-TEJ5UH35-CfAwZDdf.js → erDiagram-TEJ5UH35-DaHX6Xw5.js} +1 -1
  30. package/dist/client/assets/{flowDiagram-I6XJVG4X-Cdgi5z3n.js → flowDiagram-I6XJVG4X-B9hKqL2l.js} +1 -1
  31. package/dist/client/assets/{ganttDiagram-6RSMTGT7-DOrkFkhu.js → ganttDiagram-6RSMTGT7-BQ1HPHVO.js} +1 -1
  32. package/dist/client/assets/{gitGraphDiagram-PVQCEYII-cEox0peD.js → gitGraphDiagram-PVQCEYII-BBRcsmMK.js} +1 -1
  33. package/dist/client/assets/index-CEMaJCPS.js +273 -0
  34. package/dist/client/assets/index-lWftq65U.css +2 -0
  35. package/dist/client/assets/{infoDiagram-5YYISTIA-gm51u2Nn.js → infoDiagram-5YYISTIA-DUoNiSGC.js} +1 -1
  36. package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-CjnoOIja.js → ishikawaDiagram-YF4QCWOH-DJN1y2w8.js} +1 -1
  37. package/dist/client/assets/{journeyDiagram-JHISSGLW-Dlg4DsiO.js → journeyDiagram-JHISSGLW-BxLLMT70.js} +1 -1
  38. package/dist/client/assets/{kanban-definition-UN3LZRKU-BU0XZaSd.js → kanban-definition-UN3LZRKU-BdCPistJ.js} +1 -1
  39. package/dist/client/assets/{line-Bert22-_.js → line-4mIgXsZd.js} +1 -1
  40. package/dist/client/assets/{mermaid-parser.core-BvQSGDmL.js → mermaid-parser.core-Pu1QGWJ-.js} +1 -1
  41. package/dist/client/assets/{mermaid.core--qSAHJRj.js → mermaid.core-DnH9DrgZ.js} +3 -3
  42. package/dist/client/assets/{mindmap-definition-RKZ34NQL-BgFIvWWD.js → mindmap-definition-RKZ34NQL-DqE4ba3C.js} +1 -1
  43. package/dist/client/assets/{pieDiagram-4H26LBE5-DGcbXD0M.js → pieDiagram-4H26LBE5-Crjy9ejf.js} +1 -1
  44. package/dist/client/assets/{quadrantDiagram-W4KKPZXB-ClkBUeia.js → quadrantDiagram-W4KKPZXB-BUSZ2VB7.js} +1 -1
  45. package/dist/client/assets/{requirementDiagram-4Y6WPE33-B8CwGToU.js → requirementDiagram-4Y6WPE33-CBhFKEoV.js} +1 -1
  46. package/dist/client/assets/{sankeyDiagram-5OEKKPKP-DTk3jL6B.js → sankeyDiagram-5OEKKPKP-CgdbY41v.js} +1 -1
  47. package/dist/client/assets/{sequenceDiagram-3UESZ5HK-BQVrcnKf.js → sequenceDiagram-3UESZ5HK-hkp_H7AE.js} +1 -1
  48. package/dist/client/assets/{stateDiagram-AJRCARHV-DD4yMZPB.js → stateDiagram-AJRCARHV-C6x45RWp.js} +1 -1
  49. package/dist/client/assets/stateDiagram-v2-BHNVJYJU-DVzPjRPN.js +1 -0
  50. package/dist/client/assets/{timeline-definition-PNZ67QCA-BnCBVqcd.js → timeline-definition-PNZ67QCA-CjnZWttQ.js} +1 -1
  51. package/dist/client/assets/{vennDiagram-CIIHVFJN-BDmLMNXS.js → vennDiagram-CIIHVFJN-DU5ZyYju.js} +1 -1
  52. package/dist/client/assets/{wardleyDiagram-YWT4CUSO-DSLuQiEv.js → wardleyDiagram-YWT4CUSO-CaCEnCB0.js} +1 -1
  53. package/dist/client/assets/{xychartDiagram-2RQKCTM6-DAq_LA4r.js → xychartDiagram-2RQKCTM6-Ce3xa37U.js} +1 -1
  54. package/dist/client/index.html +2 -2
  55. package/dist/server/db.js +471 -39
  56. package/dist/server/db.js.map +1 -1
  57. package/dist/server/index.js +1256 -214
  58. package/dist/server/index.js.map +1 -1
  59. package/dist/server/lib/agent.js +228 -71
  60. package/dist/server/lib/agent.js.map +1 -1
  61. package/dist/server/lib/agentRuns.js +205 -38
  62. package/dist/server/lib/agentRuns.js.map +1 -1
  63. package/dist/server/lib/automationProgression.js +464 -0
  64. package/dist/server/lib/automationProgression.js.map +1 -0
  65. package/dist/server/lib/automationReconciliation.js +498 -0
  66. package/dist/server/lib/automationReconciliation.js.map +1 -0
  67. package/dist/server/lib/automationStageDetails.js +232 -0
  68. package/dist/server/lib/automationStageDetails.js.map +1 -0
  69. package/dist/server/lib/buildOpenQuestionOperations.js +223 -0
  70. package/dist/server/lib/buildOpenQuestionOperations.js.map +1 -0
  71. package/dist/server/lib/buildOpenQuestions.js +44 -0
  72. package/dist/server/lib/buildOpenQuestions.js.map +1 -1
  73. package/dist/server/lib/buildSequences.js +130 -46
  74. package/dist/server/lib/buildSequences.js.map +1 -1
  75. package/dist/server/lib/bundleReviewOperations.js +82 -9
  76. package/dist/server/lib/bundleReviewOperations.js.map +1 -1
  77. package/dist/server/lib/chatOperations.js +31 -0
  78. package/dist/server/lib/chatOperations.js.map +1 -1
  79. package/dist/server/lib/executionReconciliation.js +518 -0
  80. package/dist/server/lib/executionReconciliation.js.map +1 -0
  81. package/dist/server/lib/executionRunRetention.js +141 -0
  82. package/dist/server/lib/executionRunRetention.js.map +1 -0
  83. package/dist/server/lib/executionRuns.js +1264 -0
  84. package/dist/server/lib/executionRuns.js.map +1 -0
  85. package/dist/server/lib/git.js +385 -6
  86. package/dist/server/lib/git.js.map +1 -1
  87. package/dist/server/lib/integrations/github.js +43 -0
  88. package/dist/server/lib/integrations/github.js.map +1 -1
  89. package/dist/server/lib/integrations/githubActions.js +1 -0
  90. package/dist/server/lib/integrations/githubActions.js.map +1 -1
  91. package/dist/server/lib/integrations/githubActionsSessions.js +337 -114
  92. package/dist/server/lib/integrations/githubActionsSessions.js.map +1 -1
  93. package/dist/server/lib/projectMemorySelections.js +7 -3
  94. package/dist/server/lib/projectMemorySelections.js.map +1 -1
  95. package/dist/server/lib/shutdown.js +2 -2
  96. package/dist/server/lib/shutdown.js.map +1 -1
  97. package/dist/server/lib/specArtifact.js +3 -0
  98. package/dist/server/lib/specArtifact.js.map +1 -1
  99. package/dist/server/lib/specFormatting.js +1 -1
  100. package/dist/server/lib/specFormatting.js.map +1 -1
  101. package/dist/server/lib/specOperations.js +31 -0
  102. package/dist/server/lib/specOperations.js.map +1 -1
  103. package/dist/server/lib/specReviewContext.js +44 -14
  104. package/dist/server/lib/specReviewContext.js.map +1 -1
  105. package/dist/server/lib/specReviewDraft.js +3 -2
  106. package/dist/server/lib/specReviewDraft.js.map +1 -1
  107. package/dist/server/lib/specReviewOperations.js +44 -7
  108. package/dist/server/lib/specReviewOperations.js.map +1 -1
  109. package/dist/server/lib/specReviewValidation.js +217 -0
  110. package/dist/server/lib/specReviewValidation.js.map +1 -0
  111. package/dist/server/lib/specReviews.js +30 -2
  112. package/dist/server/lib/specReviews.js.map +1 -1
  113. package/dist/server/lib/specs.js +18 -1
  114. package/dist/server/lib/specs.js.map +1 -1
  115. package/dist/server/lib/stageSnapshots.js +197 -0
  116. package/dist/server/lib/stageSnapshots.js.map +1 -0
  117. package/dist/server/lib/testSessions.js +164 -19
  118. package/dist/server/lib/testSessions.js.map +1 -1
  119. package/dist/server/lib/ticketAutomation.js +80 -4
  120. package/dist/server/lib/ticketAutomation.js.map +1 -1
  121. package/dist/server/lib/ticketAutomationCommit.js +466 -91
  122. package/dist/server/lib/ticketAutomationCommit.js.map +1 -1
  123. package/dist/server/lib/ticketFollowUpOperations.js +214 -20
  124. package/dist/server/lib/ticketFollowUpOperations.js.map +1 -1
  125. package/dist/server/lib/ticketRunOperations.js +51 -6
  126. package/dist/server/lib/ticketRunOperations.js.map +1 -1
  127. package/dist/server/lib/ticketUndo.js +77 -168
  128. package/dist/server/lib/ticketUndo.js.map +1 -1
  129. package/dist/server/lib/ticketWorkflowOperations.js +132 -28
  130. package/dist/server/lib/ticketWorkflowOperations.js.map +1 -1
  131. package/dist/server/lib/tickets.js +41 -27
  132. package/dist/server/lib/tickets.js.map +1 -1
  133. package/dist/server/lib/transcriptRuns.js +3 -3
  134. package/dist/server/lib/transcriptRuns.js.map +1 -1
  135. package/dist/server/lib/turnExecutionErrors.js +12 -0
  136. package/dist/server/lib/turnExecutionErrors.js.map +1 -0
  137. package/dist/server/lib/types.js +57 -1
  138. package/dist/server/lib/types.js.map +1 -1
  139. package/dist/server/workers/build.js +596 -184
  140. package/dist/server/workers/build.js.map +1 -1
  141. package/dist/server/workers/chat.js +261 -130
  142. package/dist/server/workers/chat.js.map +1 -1
  143. package/dist/server/workers/followUp.js +716 -203
  144. package/dist/server/workers/followUp.js.map +1 -1
  145. package/dist/server/workers/plan.js +527 -188
  146. package/dist/server/workers/plan.js.map +1 -1
  147. package/dist/server/workers/planFollowUp.js +231 -69
  148. package/dist/server/workers/planFollowUp.js.map +1 -1
  149. package/dist/server/workers/review.js +790 -297
  150. package/dist/server/workers/review.js.map +1 -1
  151. package/dist/server/workers/specReview.js +211 -45
  152. package/dist/server/workers/specReview.js.map +1 -1
  153. package/dist/server/workers/specSession.js +425 -252
  154. package/dist/server/workers/specSession.js.map +1 -1
  155. package/package.json +1 -1
  156. package/dist/client/assets/GitHubActionsDialog-DAD5REmY.js +0 -1
  157. package/dist/client/assets/TestsDialog-B5NVrroq.js +0 -4
  158. package/dist/client/assets/TicketChangesModal-By-_gTGd.js +0 -1
  159. package/dist/client/assets/channel-Dd5Len0X.js +0 -1
  160. package/dist/client/assets/classDiagram-4FO5ZUOK-B7KUg6r8.js +0 -1
  161. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-CQm-z5c4.js +0 -1
  162. package/dist/client/assets/index-BHq6-Eir.js +0 -270
  163. package/dist/client/assets/index-BxTc5qQT.css +0 -2
  164. package/dist/client/assets/stateDiagram-v2-BHNVJYJU-C8yO6POT.js +0 -1
@@ -0,0 +1,464 @@
1
+ import db from '../db.js';
2
+ import { getExecutionRun, listExecutionRunLinks, withExecutionRunTransaction, } from './executionRuns.js';
3
+ import { claimBundleAutomationProgression, clearAutomationPause, getBundleAutomationState, recordAutomationPause, } from './ticketAutomation.js';
4
+ const ACTIVE_STATUSES = new Set(['queued', 'running', 'waiting']);
5
+ const INITIATING_KINDS = new Set(['build', 'build_follow_up', 'review']);
6
+ const AUTOMATION_CHILD_KINDS = new Set([
7
+ 'review',
8
+ 'automation_review_fix',
9
+ 'automation_commit',
10
+ 'automation_push',
11
+ 'automation_pull_request',
12
+ ]);
13
+ const toExecutionContext = (run) => ({
14
+ runId: run.id,
15
+ correlationId: run.correlation_id,
16
+ projectId: run.project_id,
17
+ kind: run.kind,
18
+ });
19
+ const assertBundlePrimaryProgression = (projectId, bundleId, progressionRunId) => {
20
+ const progression = getExecutionRun(projectId, progressionRunId);
21
+ const ownsBundle = listExecutionRunLinks(projectId, progressionRunId).some(link => (link.entity_type === 'bundle'
22
+ && link.entity_id === bundleId
23
+ && link.relationship === 'primary'));
24
+ if (!progression
25
+ || progression.kind !== 'automation_progression'
26
+ || !ACTIVE_STATUSES.has(progression.status)
27
+ || !ownsBundle) {
28
+ throw new Error(`Execution run ${progressionRunId} is not the active bundle-primary automation progression for bundle ${bundleId}`);
29
+ }
30
+ return progression;
31
+ };
32
+ export const getAutomationProgression = (projectId, bundleId) => {
33
+ const progressionRunId = getBundleAutomationState(projectId, bundleId)?.automation_progression_run_id;
34
+ if (!progressionRunId) {
35
+ return null;
36
+ }
37
+ return assertBundlePrimaryProgression(projectId, bundleId, progressionRunId);
38
+ };
39
+ const transitionProgression = (transaction, progression, status, eventType, domainStatus) => {
40
+ if (progression.status === status) {
41
+ transaction.appendLifecycleEvent({
42
+ projectId: progression.project_id,
43
+ runId: progression.id,
44
+ eventType,
45
+ domainStatus,
46
+ });
47
+ return;
48
+ }
49
+ transaction.transitionExecutionRun({
50
+ projectId: progression.project_id,
51
+ runId: progression.id,
52
+ status,
53
+ domainStatus,
54
+ eventType,
55
+ });
56
+ };
57
+ const addTicketContextIfMissing = (transaction, projectId, runId, ticketId, ticketTitle) => {
58
+ const exists = db.prepare(`
59
+ SELECT 1 FROM execution_run_links
60
+ WHERE execution_run_id = ? AND project_id = ? AND entity_type = 'ticket' AND entity_id = ?
61
+ `).get(runId, projectId, ticketId);
62
+ if (!exists) {
63
+ transaction.addExecutionRunLink({
64
+ projectId,
65
+ runId,
66
+ link: {
67
+ entityType: 'ticket',
68
+ entityId: ticketId,
69
+ relationship: 'context',
70
+ label: ticketTitle,
71
+ },
72
+ });
73
+ }
74
+ };
75
+ const assertNoActiveAutomationChild = (projectId, progressionRunId, allowedChildRunId) => {
76
+ const activeChild = db.prepare(`
77
+ SELECT id, kind
78
+ FROM execution_runs
79
+ WHERE project_id = ? AND parent_run_id = ? AND id <> ?
80
+ AND kind IN ('review', 'automation_review_fix', 'automation_commit', 'automation_push', 'automation_pull_request')
81
+ AND status IN ('queued', 'running', 'waiting')
82
+ LIMIT 1
83
+ `).get(projectId, progressionRunId, allowedChildRunId ?? '');
84
+ if (activeChild && AUTOMATION_CHILD_KINDS.has(activeChild.kind)) {
85
+ throw new Error(`Automation progression already has an active ${activeChild.kind} child`);
86
+ }
87
+ };
88
+ export const ensureAutomationProgression = ({ projectId, bundleId, ticketId, ticketTitle, parentRunId, workflowContext, broadcaster, }) => withExecutionRunTransaction(transaction => {
89
+ const existing = getAutomationProgression(projectId, bundleId);
90
+ if (existing) {
91
+ addTicketContextIfMissing(transaction, projectId, existing.id, ticketId, ticketTitle);
92
+ return toExecutionContext(existing);
93
+ }
94
+ const parent = getExecutionRun(projectId, parentRunId);
95
+ if (!parent || parent.status !== 'completed' || !INITIATING_KINDS.has(parent.kind)) {
96
+ throw new Error(`Execution run ${parentRunId} cannot initiate an automation progression`);
97
+ }
98
+ const progression = transaction.createExecutionRun({
99
+ projectId,
100
+ kind: 'automation_progression',
101
+ domainStatus: 'running',
102
+ sourceReference: { kind: 'bundle', id: bundleId },
103
+ links: [{ entityType: 'ticket', entityId: ticketId, relationship: 'context', label: ticketTitle }],
104
+ initiatedBy: 'automation',
105
+ parentRunId,
106
+ metadata: workflowContext,
107
+ eventType: 'automation_progression_created',
108
+ });
109
+ transaction.transitionExecutionRun({
110
+ projectId,
111
+ runId: progression.id,
112
+ status: 'running',
113
+ domainStatus: 'running',
114
+ eventType: 'automation_progression_started',
115
+ });
116
+ claimBundleAutomationProgression(projectId, bundleId, progression.id);
117
+ return toExecutionContext(getExecutionRun(projectId, progression.id) ?? progression);
118
+ }, broadcaster);
119
+ export const getWaitingOpenQuestionProgression = ({ projectId, bundleId, broadcaster, }) => withExecutionRunTransaction(transaction => {
120
+ const state = getBundleAutomationState(projectId, bundleId);
121
+ if (state?.automation_progression_run_id) {
122
+ const progression = assertBundlePrimaryProgression(projectId, bundleId, state.automation_progression_run_id);
123
+ if (progression.status !== 'waiting' || state.automation_paused_code !== 'open_questions') {
124
+ throw new Error('Build open questions are not owned by a waiting automation progression');
125
+ }
126
+ return toExecutionContext(progression);
127
+ }
128
+ if (state?.automation_pause_reason_code
129
+ || (state?.automation_paused_reason && state.automation_paused_code !== 'open_questions')) {
130
+ throw new Error('Build open question progression ownership is missing');
131
+ }
132
+ const progression = transaction.createExecutionRun({
133
+ projectId,
134
+ kind: 'automation_progression',
135
+ domainStatus: 'open_questions',
136
+ sourceReference: { kind: 'bundle', id: bundleId },
137
+ initiatedBy: 'recovery',
138
+ eventType: 'automation_progression_recovered',
139
+ });
140
+ transaction.transitionExecutionRun({
141
+ projectId,
142
+ runId: progression.id,
143
+ status: 'waiting',
144
+ domainStatus: 'open_questions',
145
+ eventType: 'automation_progression_waiting',
146
+ });
147
+ claimBundleAutomationProgression(projectId, bundleId, progression.id);
148
+ return toExecutionContext(getExecutionRun(projectId, progression.id) ?? progression);
149
+ }, broadcaster);
150
+ export const recoverLegacyAutomationProgression = ({ projectId, bundleId, broadcaster, }) => withExecutionRunTransaction(transaction => {
151
+ const existing = getAutomationProgression(projectId, bundleId);
152
+ if (existing) {
153
+ return toExecutionContext(existing);
154
+ }
155
+ const state = getBundleAutomationState(projectId, bundleId);
156
+ if (!state?.automation_paused_reason || state.automation_paused_stage_run_id) {
157
+ throw new Error('Legacy automation pause is not eligible for progression recovery');
158
+ }
159
+ const progression = transaction.createExecutionRun({
160
+ projectId,
161
+ kind: 'automation_progression',
162
+ domainStatus: state.automation_paused_code ?? 'waiting',
163
+ sourceReference: { kind: 'bundle', id: bundleId },
164
+ initiatedBy: 'recovery',
165
+ eventType: 'automation_progression_recovered',
166
+ });
167
+ transaction.transitionExecutionRun({
168
+ projectId,
169
+ runId: progression.id,
170
+ status: 'waiting',
171
+ domainStatus: state.automation_paused_code ?? 'waiting',
172
+ eventType: 'automation_progression_waiting',
173
+ });
174
+ claimBundleAutomationProgression(projectId, bundleId, progression.id);
175
+ return toExecutionContext(getExecutionRun(projectId, progression.id) ?? progression);
176
+ }, broadcaster);
177
+ export const recoverStoppedSideEffectProgression = ({ projectId, bundleId, broadcaster, }) => withExecutionRunTransaction(transaction => {
178
+ const existing = getAutomationProgression(projectId, bundleId);
179
+ if (existing) {
180
+ return toExecutionContext(existing);
181
+ }
182
+ const state = getBundleAutomationState(projectId, bundleId);
183
+ const stage = state?.automation_paused_stage_run_id
184
+ ? getExecutionRun(projectId, state.automation_paused_stage_run_id)
185
+ : null;
186
+ const originalProgression = stage?.parent_run_id
187
+ ? getExecutionRun(projectId, stage.parent_run_id)
188
+ : null;
189
+ const ownsBundle = stage ? listExecutionRunLinks(projectId, stage.id).some(link => (link.entity_type === 'bundle'
190
+ && link.entity_id === bundleId
191
+ && link.relationship === 'primary')) : false;
192
+ if (!state?.automation_paused_reason
193
+ || !stage
194
+ || !['automation_commit', 'automation_push', 'automation_pull_request'].includes(stage.kind)
195
+ || (!ACTIVE_STATUSES.has(stage.status)
196
+ && !(stage.status === 'failed' && stage.domain_status === 'ambiguous')
197
+ && !(stage.status === 'completed' && stage.domain_status === 'reconciled_completed'))
198
+ || !ownsBundle
199
+ || originalProgression?.kind !== 'automation_progression'
200
+ || originalProgression.status !== 'cancelled'
201
+ || originalProgression.domain_status !== 'stopped') {
202
+ throw new Error('Stopped automation side effect is not eligible for progression recovery');
203
+ }
204
+ const progression = transaction.createExecutionRun({
205
+ projectId,
206
+ kind: 'automation_progression',
207
+ domainStatus: state.automation_paused_code ?? 'waiting',
208
+ sourceReference: { kind: 'bundle', id: bundleId },
209
+ initiatedBy: 'recovery',
210
+ parentRunId: stage.id,
211
+ eventType: 'automation_progression_recovered',
212
+ });
213
+ transaction.transitionExecutionRun({
214
+ projectId,
215
+ runId: progression.id,
216
+ status: 'waiting',
217
+ domainStatus: state.automation_paused_code ?? 'waiting',
218
+ eventType: 'automation_progression_waiting',
219
+ });
220
+ claimBundleAutomationProgression(projectId, bundleId, progression.id);
221
+ return toExecutionContext(getExecutionRun(projectId, progression.id) ?? progression);
222
+ }, broadcaster);
223
+ export const runAutomationProgression = ({ projectId, bundleId, progressionRunId, broadcaster, }) => withExecutionRunTransaction(transaction => {
224
+ const progression = assertBundlePrimaryProgression(projectId, bundleId, progressionRunId);
225
+ const pointer = getBundleAutomationState(projectId, bundleId)?.automation_progression_run_id;
226
+ if (pointer !== progression.id) {
227
+ throw new Error('Automation progression does not own this bundle');
228
+ }
229
+ if (progression.status !== 'waiting') {
230
+ throw new Error('Automation progression is not waiting to resume');
231
+ }
232
+ transitionProgression(transaction, progression, 'running', 'automation_progression_resumed', 'running');
233
+ clearAutomationPause(projectId, bundleId);
234
+ }, broadcaster);
235
+ export const waitAutomationProgressionInTransaction = (transaction, { projectId, bundleId, progressionRunId, pauseCode, pauseReason, reasonCode, pausedStageRunId, }) => {
236
+ const progression = assertBundlePrimaryProgression(projectId, bundleId, progressionRunId);
237
+ const state = getBundleAutomationState(projectId, bundleId);
238
+ const pointer = state?.automation_progression_run_id;
239
+ if (pointer !== progression.id) {
240
+ throw new Error('Automation progression does not own this bundle');
241
+ }
242
+ if (pausedStageRunId) {
243
+ const pausedRun = getExecutionRun(projectId, pausedStageRunId);
244
+ const ownsBundle = listExecutionRunLinks(projectId, pausedStageRunId).some(link => (link.entity_type === 'bundle'
245
+ && link.entity_id === bundleId
246
+ && (link.relationship === 'primary' || link.relationship === 'context')));
247
+ const parent = pausedRun?.parent_run_id ? getExecutionRun(projectId, pausedRun.parent_run_id) : null;
248
+ const belongsToProgression = pausedRun?.parent_run_id === progression.id
249
+ || (parent?.kind === 'automation_review_fix' && parent.parent_run_id === progression.id)
250
+ || progression.parent_run_id === pausedRun?.id;
251
+ if (!pausedRun || !ownsBundle || !belongsToProgression) {
252
+ throw new Error('Paused automation stage does not belong to the active progression');
253
+ }
254
+ }
255
+ if (progression.status === 'waiting'
256
+ && state?.automation_paused_code === pauseCode
257
+ && state.automation_paused_reason === pauseReason
258
+ && state.automation_pause_reason_code === reasonCode
259
+ && state.automation_paused_stage_run_id === pausedStageRunId) {
260
+ return;
261
+ }
262
+ transitionProgression(transaction, progression, 'waiting', 'automation_progression_waiting', pauseCode);
263
+ recordAutomationPause(projectId, bundleId, pauseCode, pauseReason, {
264
+ reasonCode,
265
+ pausedStageRunId,
266
+ });
267
+ };
268
+ export const waitAutomationProgression = (input) => withExecutionRunTransaction(transaction => waitAutomationProgressionInTransaction(transaction, input), input.broadcaster);
269
+ export const resolveProgressionForChild = ({ projectId, bundleId, childRunId, allowReviewFixParent = false, }) => {
270
+ const child = getExecutionRun(projectId, childRunId);
271
+ if (!child?.parent_run_id) {
272
+ throw new Error(`Execution run ${childRunId} has no automation progression owner`);
273
+ }
274
+ let progressionRunId = child.parent_run_id;
275
+ const parent = getExecutionRun(projectId, progressionRunId);
276
+ if (allowReviewFixParent && parent?.kind === 'automation_review_fix') {
277
+ if (!parent.parent_run_id) {
278
+ throw new Error(`Automation review fix ${parent.id} has no progression owner`);
279
+ }
280
+ progressionRunId = parent.parent_run_id;
281
+ }
282
+ const progression = assertBundlePrimaryProgression(projectId, bundleId, progressionRunId);
283
+ if (getBundleAutomationState(projectId, bundleId)?.automation_progression_run_id !== progression.id) {
284
+ throw new Error('Automation progression does not own this bundle');
285
+ }
286
+ return progression;
287
+ };
288
+ export const createAutomationReviewFix = ({ projectId, bundleId, ticketId, ticketTitle, progressionRunId, workflowContext, triggeringReviewRunId, broadcaster, }) => withExecutionRunTransaction(transaction => {
289
+ const progression = assertBundlePrimaryProgression(projectId, bundleId, progressionRunId);
290
+ if (getBundleAutomationState(projectId, bundleId)?.automation_progression_run_id !== progression.id) {
291
+ throw new Error('Automation progression does not own this bundle');
292
+ }
293
+ assertNoActiveAutomationChild(projectId, progression.id, triggeringReviewRunId);
294
+ addTicketContextIfMissing(transaction, projectId, progression.id, ticketId, ticketTitle);
295
+ const reviewFix = transaction.createExecutionRun({
296
+ projectId,
297
+ kind: 'automation_review_fix',
298
+ domainStatus: 'running',
299
+ sourceReference: { kind: 'bundle', id: bundleId },
300
+ links: [{ entityType: 'ticket', entityId: ticketId, relationship: 'context', label: ticketTitle }],
301
+ initiatedBy: 'automation',
302
+ parentRunId: progression.id,
303
+ metadata: workflowContext,
304
+ eventType: 'automation_review_fix_created',
305
+ });
306
+ transaction.transitionExecutionRun({
307
+ projectId,
308
+ runId: reviewFix.id,
309
+ status: 'running',
310
+ domainStatus: 'running',
311
+ eventType: 'automation_review_fix_started',
312
+ });
313
+ return toExecutionContext(getExecutionRun(projectId, reviewFix.id) ?? reviewFix);
314
+ }, broadcaster);
315
+ export const finishAutomationReviewFix = ({ projectId, reviewFixRunId, failedMessage, broadcaster, }) => withExecutionRunTransaction(transaction => {
316
+ const reviewFix = getExecutionRun(projectId, reviewFixRunId);
317
+ if (!reviewFix || reviewFix.kind !== 'automation_review_fix') {
318
+ throw new Error(`Execution run ${reviewFixRunId} is not an automation review fix`);
319
+ }
320
+ if (!ACTIVE_STATUSES.has(reviewFix.status)) {
321
+ return;
322
+ }
323
+ transaction.transitionExecutionRun({
324
+ projectId,
325
+ runId: reviewFixRunId,
326
+ status: failedMessage ? 'failed' : 'completed',
327
+ domainStatus: failedMessage ? 'failed' : 'completed',
328
+ ...(failedMessage ? { failure: { code: 'build_follow_up_failed', message: failedMessage } } : {}),
329
+ eventType: failedMessage ? 'automation_review_fix_failed' : 'automation_review_fix_completed',
330
+ });
331
+ }, broadcaster);
332
+ export const completeAutomationProgressionInTransaction = (transaction, { projectId, bundleId, progressionRunId, domainStatus = 'completed', }) => {
333
+ const progression = assertBundlePrimaryProgression(projectId, bundleId, progressionRunId);
334
+ if (getBundleAutomationState(projectId, bundleId)?.automation_progression_run_id !== progression.id) {
335
+ throw new Error('Automation progression does not own this bundle');
336
+ }
337
+ transaction.transitionExecutionRun({
338
+ projectId,
339
+ runId: progression.id,
340
+ status: 'completed',
341
+ domainStatus,
342
+ eventType: 'automation_progression_completed',
343
+ });
344
+ db.prepare(`
345
+ UPDATE bundle_automation_state
346
+ SET automation_progression_run_id = NULL,
347
+ automation_paused_stage_run_id = NULL,
348
+ automation_pause_reason_code = NULL,
349
+ automation_paused_code = NULL,
350
+ automation_paused_reason = NULL,
351
+ automation_paused_at = NULL,
352
+ updated_at = CURRENT_TIMESTAMP
353
+ WHERE project_id = ? AND worktree_bundle_id = ? AND automation_progression_run_id = ?
354
+ `).run(projectId, bundleId, progression.id);
355
+ };
356
+ export const completeAutomationProgression = (input) => withExecutionRunTransaction(transaction => completeAutomationProgressionInTransaction(transaction, input), input.broadcaster);
357
+ export const stopAutomationProgression = async ({ projectId, bundleId, broadcaster, stopLocalWorker, }) => {
358
+ const progression = getAutomationProgression(projectId, bundleId);
359
+ if (!progression) {
360
+ return false;
361
+ }
362
+ const localWorkers = db.prepare(`
363
+ WITH RECURSIVE descendants(id, kind, source_id) AS (
364
+ SELECT id, kind, source_id FROM execution_runs
365
+ WHERE project_id = ? AND parent_run_id = ?
366
+ UNION ALL
367
+ SELECT child.id, child.kind, child.source_id
368
+ FROM execution_runs child
369
+ JOIN descendants parent ON child.parent_run_id = parent.id
370
+ WHERE child.project_id = ?
371
+ )
372
+ SELECT id, kind, source_id AS ticket_id
373
+ FROM descendants
374
+ WHERE kind IN ('build_follow_up', 'review') AND source_id IS NOT NULL
375
+ AND id IN (SELECT id FROM execution_runs WHERE status IN ('queued', 'running', 'waiting'))
376
+ `).all(projectId, progression.id, projectId);
377
+ const directSideEffect = db.prepare(`
378
+ SELECT id, kind FROM execution_runs
379
+ WHERE project_id = ? AND parent_run_id = ?
380
+ AND kind IN ('automation_commit', 'automation_push', 'automation_pull_request')
381
+ AND status IN ('queued', 'running', 'waiting')
382
+ LIMIT 1
383
+ `).get(projectId, progression.id);
384
+ const recoveredParent = progression.initiated_by === 'recovery' && progression.parent_run_id
385
+ ? getExecutionRun(projectId, progression.parent_run_id)
386
+ : null;
387
+ const recoveredParentOwnsBundle = recoveredParent
388
+ ? listExecutionRunLinks(projectId, recoveredParent.id).some(link => (link.entity_type === 'bundle'
389
+ && link.entity_id === bundleId
390
+ && link.relationship === 'primary'))
391
+ : false;
392
+ const recoveredSideEffect = recoveredParent
393
+ && ['automation_commit', 'automation_push', 'automation_pull_request'].includes(recoveredParent.kind)
394
+ && (ACTIVE_STATUSES.has(recoveredParent.status) || (recoveredParent.status === 'failed' && recoveredParent.domain_status === 'ambiguous'))
395
+ && recoveredParentOwnsBundle
396
+ ? recoveredParent
397
+ : null;
398
+ const sideEffect = directSideEffect ?? recoveredSideEffect;
399
+ const sideEffectPauseCode = sideEffect?.kind === 'automation_commit'
400
+ ? 'commit'
401
+ : sideEffect?.kind === 'automation_push'
402
+ ? 'push'
403
+ : sideEffect
404
+ ? 'pull_request'
405
+ : null;
406
+ withExecutionRunTransaction(transaction => {
407
+ const current = getExecutionRun(projectId, progression.id);
408
+ if (current && ACTIVE_STATUSES.has(current.status)) {
409
+ transaction.transitionExecutionRun({
410
+ projectId,
411
+ runId: progression.id,
412
+ status: 'cancelled',
413
+ domainStatus: 'stopped',
414
+ eventType: 'automation_progression_cancelled',
415
+ });
416
+ }
417
+ for (const worker of localWorkers) {
418
+ const child = getExecutionRun(projectId, worker.id);
419
+ if (child && ACTIVE_STATUSES.has(child.status)) {
420
+ transaction.transitionExecutionRun({
421
+ projectId,
422
+ runId: child.id,
423
+ status: 'cancelled',
424
+ domainStatus: 'stopped',
425
+ eventType: `${child.kind}_cancelled`,
426
+ });
427
+ }
428
+ db.prepare(`
429
+ UPDATE tickets SET agent_status = 'stopped', updated_at = CURRENT_TIMESTAMP
430
+ WHERE id = ? AND project_id = ? AND agent_status = 'running'
431
+ `).run(worker.ticket_id, projectId);
432
+ }
433
+ const wrappers = db.prepare(`
434
+ SELECT id FROM execution_runs
435
+ WHERE project_id = ? AND parent_run_id = ? AND kind = 'automation_review_fix'
436
+ AND status IN ('queued', 'running', 'waiting')
437
+ `).all(projectId, progression.id);
438
+ for (const wrapper of wrappers) {
439
+ transaction.transitionExecutionRun({
440
+ projectId,
441
+ runId: wrapper.id,
442
+ status: 'cancelled',
443
+ domainStatus: 'stopped',
444
+ eventType: 'automation_review_fix_cancelled',
445
+ });
446
+ }
447
+ db.prepare(`
448
+ UPDATE bundle_automation_state
449
+ SET automation_progression_run_id = NULL,
450
+ automation_paused_stage_run_id = ?,
451
+ automation_pause_reason_code = ?,
452
+ automation_paused_code = ?,
453
+ automation_paused_reason = ?,
454
+ automation_paused_at = ?,
455
+ updated_at = CURRENT_TIMESTAMP
456
+ WHERE project_id = ? AND worktree_bundle_id = ? AND automation_progression_run_id = ?
457
+ `).run(sideEffect?.id ?? null, sideEffect ? 'manual_transition' : null, sideEffectPauseCode, sideEffect ? 'Automation was stopped while its side effect was still being observed.' : null, sideEffect ? new Date().toISOString() : null, projectId, bundleId, progression.id);
458
+ }, broadcaster);
459
+ if (stopLocalWorker) {
460
+ await Promise.all(localWorkers.map(stopLocalWorker));
461
+ }
462
+ return true;
463
+ };
464
+ //# sourceMappingURL=automationProgression.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"automationProgression.js","sourceRoot":"","sources":["../../../server/lib/automationProgression.ts"],"names":[],"mappings":"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"}