@straiffi/archon 1.7.2 → 1.7.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (176) hide show
  1. package/dist/client/assets/ActivityView-BgMz3NNT.js +1 -0
  2. package/dist/client/assets/GitHubActionsDialog-CNqWDS3E.js +1 -0
  3. package/dist/client/assets/TestsDialog-Cll7xJe0.js +4 -0
  4. package/dist/client/assets/{architectureDiagram-3BPJPVTR-Do9nbC8v.js → architectureDiagram-3BPJPVTR-BL5dYiul.js} +1 -1
  5. package/dist/client/assets/{blockDiagram-GPEHLZMM-DGGOLHF8.js → blockDiagram-GPEHLZMM-Bi5x2v80.js} +1 -1
  6. package/dist/client/assets/{c4Diagram-AAUBKEIU-Bz7tQybs.js → c4Diagram-AAUBKEIU-esEm54Ay.js} +1 -1
  7. package/dist/client/assets/channel-CqNHF3FD.js +1 -0
  8. package/dist/client/assets/{chunk-2J33WTMH-CJO-GmWJ.js → chunk-2J33WTMH-DACfY8xM.js} +1 -1
  9. package/dist/client/assets/{chunk-3OPIFGDE-DPAVagpC.js → chunk-3OPIFGDE-DZNUiaUs.js} +1 -1
  10. package/dist/client/assets/{chunk-5ZQYHXKU-Cof75Mu7.js → chunk-5ZQYHXKU-ClDfkMAp.js} +1 -1
  11. package/dist/client/assets/{chunk-727SXJPM-COuPqQ8_.js → chunk-727SXJPM-CCwA3GWT.js} +1 -1
  12. package/dist/client/assets/{chunk-AQP2D5EJ-CFj5KabW.js → chunk-AQP2D5EJ-Byl4DRZ9.js} +1 -1
  13. package/dist/client/assets/{chunk-CSCIHK7Q-C4M6w5cT.js → chunk-CSCIHK7Q-CXymZQ7A.js} +1 -1
  14. package/dist/client/assets/{chunk-KSCS5N6A-ByaiwVue.js → chunk-KSCS5N6A-VV3D8g6a.js} +1 -1
  15. package/dist/client/assets/{chunk-L5ZTLDWV-Cx5jeot9.js → chunk-L5ZTLDWV-BL9N5GRI.js} +1 -1
  16. package/dist/client/assets/{chunk-LZXEDZCA-DmGtztud.js → chunk-LZXEDZCA-DKNN-zno.js} +2 -2
  17. package/dist/client/assets/{chunk-ND2GUHAM-i3yuspqL.js → chunk-ND2GUHAM-CHCpQ1yr.js} +1 -1
  18. package/dist/client/assets/{chunk-NZK2D7GU-CQ4E_jP4.js → chunk-NZK2D7GU-B0Dm74mt.js} +1 -1
  19. package/dist/client/assets/{chunk-O5CBEL6O-D2g4VDCd.js → chunk-O5CBEL6O-DAa5z2xG.js} +1 -1
  20. package/dist/client/assets/{chunk-WU5MYG2G-exIu-zQ2.js → chunk-WU5MYG2G-DrVJWKVR.js} +1 -1
  21. package/dist/client/assets/classDiagram-4FO5ZUOK-BjEgQwKg.js +1 -0
  22. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-gGomH-F_.js +1 -0
  23. package/dist/client/assets/{dagre-BM42HDAG-DvF75yLZ.js → dagre-BM42HDAG-B0fsl8mE.js} +1 -1
  24. package/dist/client/assets/{diagram-2AECGRRQ-DFv0HxLL.js → diagram-2AECGRRQ-Cx_VEbSS.js} +1 -1
  25. package/dist/client/assets/{diagram-5GNKFQAL-C_LRir0-.js → diagram-5GNKFQAL-Cv7VVn5r.js} +1 -1
  26. package/dist/client/assets/{diagram-KO2AKTUF-DGZxRDRy.js → diagram-KO2AKTUF-C8Sl5czV.js} +1 -1
  27. package/dist/client/assets/{diagram-LMA3HP47-UXt0uti4.js → diagram-LMA3HP47-C3dZaLz2.js} +1 -1
  28. package/dist/client/assets/{diagram-OG6HWLK6-CFbZS4n5.js → diagram-OG6HWLK6-BAU9DtTr.js} +1 -1
  29. package/dist/client/assets/{erDiagram-TEJ5UH35-CfAwZDdf.js → erDiagram-TEJ5UH35-DpNc-eBD.js} +1 -1
  30. package/dist/client/assets/{flowDiagram-I6XJVG4X-Cdgi5z3n.js → flowDiagram-I6XJVG4X-DGwTAT1S.js} +1 -1
  31. package/dist/client/assets/{ganttDiagram-6RSMTGT7-DOrkFkhu.js → ganttDiagram-6RSMTGT7-MPZhEgzJ.js} +1 -1
  32. package/dist/client/assets/{gitGraphDiagram-PVQCEYII-cEox0peD.js → gitGraphDiagram-PVQCEYII-CY0tHL5N.js} +1 -1
  33. package/dist/client/assets/index-CJRgmWwY.js +273 -0
  34. package/dist/client/assets/index-mRkJWu70.css +2 -0
  35. package/dist/client/assets/{infoDiagram-5YYISTIA-gm51u2Nn.js → infoDiagram-5YYISTIA-BBZeKjf4.js} +1 -1
  36. package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-CjnoOIja.js → ishikawaDiagram-YF4QCWOH-CM_iFrES.js} +1 -1
  37. package/dist/client/assets/{journeyDiagram-JHISSGLW-Dlg4DsiO.js → journeyDiagram-JHISSGLW-Do_lY94X.js} +1 -1
  38. package/dist/client/assets/{kanban-definition-UN3LZRKU-BU0XZaSd.js → kanban-definition-UN3LZRKU-brxg3j37.js} +1 -1
  39. package/dist/client/assets/{line-Bert22-_.js → line-PHHbm9rj.js} +1 -1
  40. package/dist/client/assets/{mermaid-parser.core-BvQSGDmL.js → mermaid-parser.core-CLxAkW69.js} +1 -1
  41. package/dist/client/assets/{mermaid.core--qSAHJRj.js → mermaid.core-CebvSmx9.js} +3 -3
  42. package/dist/client/assets/{mindmap-definition-RKZ34NQL-BgFIvWWD.js → mindmap-definition-RKZ34NQL-CX_-ZaJF.js} +1 -1
  43. package/dist/client/assets/{pieDiagram-4H26LBE5-DGcbXD0M.js → pieDiagram-4H26LBE5-BJuHvql_.js} +1 -1
  44. package/dist/client/assets/{quadrantDiagram-W4KKPZXB-ClkBUeia.js → quadrantDiagram-W4KKPZXB-DiJll7l9.js} +1 -1
  45. package/dist/client/assets/{requirementDiagram-4Y6WPE33-B8CwGToU.js → requirementDiagram-4Y6WPE33-Bg-tXgcj.js} +1 -1
  46. package/dist/client/assets/{sankeyDiagram-5OEKKPKP-DTk3jL6B.js → sankeyDiagram-5OEKKPKP-BoK2egfZ.js} +1 -1
  47. package/dist/client/assets/{sequenceDiagram-3UESZ5HK-BQVrcnKf.js → sequenceDiagram-3UESZ5HK-DcrDWNzv.js} +1 -1
  48. package/dist/client/assets/{stateDiagram-AJRCARHV-DD4yMZPB.js → stateDiagram-AJRCARHV-B995qt1S.js} +1 -1
  49. package/dist/client/assets/stateDiagram-v2-BHNVJYJU-Dn8P7Sa1.js +1 -0
  50. package/dist/client/assets/{timeline-definition-PNZ67QCA-BnCBVqcd.js → timeline-definition-PNZ67QCA-DqSVAhqL.js} +1 -1
  51. package/dist/client/assets/{vennDiagram-CIIHVFJN-BDmLMNXS.js → vennDiagram-CIIHVFJN-D9wVraVY.js} +1 -1
  52. package/dist/client/assets/{wardleyDiagram-YWT4CUSO-DSLuQiEv.js → wardleyDiagram-YWT4CUSO-CLff9zVd.js} +1 -1
  53. package/dist/client/assets/{xychartDiagram-2RQKCTM6-DAq_LA4r.js → xychartDiagram-2RQKCTM6-BuHUMMH2.js} +1 -1
  54. package/dist/client/index.html +2 -2
  55. package/dist/server/db.js +472 -39
  56. package/dist/server/db.js.map +1 -1
  57. package/dist/server/index.js +1311 -212
  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/attachments.js +24 -0
  64. package/dist/server/lib/attachments.js.map +1 -1
  65. package/dist/server/lib/automationProgression.js +464 -0
  66. package/dist/server/lib/automationProgression.js.map +1 -0
  67. package/dist/server/lib/automationReconciliation.js +498 -0
  68. package/dist/server/lib/automationReconciliation.js.map +1 -0
  69. package/dist/server/lib/automationStageDetails.js +232 -0
  70. package/dist/server/lib/automationStageDetails.js.map +1 -0
  71. package/dist/server/lib/buildOpenQuestionOperations.js +238 -0
  72. package/dist/server/lib/buildOpenQuestionOperations.js.map +1 -0
  73. package/dist/server/lib/buildOpenQuestions.js +44 -0
  74. package/dist/server/lib/buildOpenQuestions.js.map +1 -1
  75. package/dist/server/lib/buildSequences.js +130 -46
  76. package/dist/server/lib/buildSequences.js.map +1 -1
  77. package/dist/server/lib/bundleReviewOperations.js +91 -9
  78. package/dist/server/lib/bundleReviewOperations.js.map +1 -1
  79. package/dist/server/lib/chatOperations.js +67 -12
  80. package/dist/server/lib/chatOperations.js.map +1 -1
  81. package/dist/server/lib/executionReconciliation.js +518 -0
  82. package/dist/server/lib/executionReconciliation.js.map +1 -0
  83. package/dist/server/lib/executionRetry.js +694 -0
  84. package/dist/server/lib/executionRetry.js.map +1 -0
  85. package/dist/server/lib/executionRetryContext.js +489 -0
  86. package/dist/server/lib/executionRetryContext.js.map +1 -0
  87. package/dist/server/lib/executionRetryPredicates.js +74 -0
  88. package/dist/server/lib/executionRetryPredicates.js.map +1 -0
  89. package/dist/server/lib/executionRunRetention.js +141 -0
  90. package/dist/server/lib/executionRunRetention.js.map +1 -0
  91. package/dist/server/lib/executionRuns.js +1367 -0
  92. package/dist/server/lib/executionRuns.js.map +1 -0
  93. package/dist/server/lib/executionTimeline.js +45 -0
  94. package/dist/server/lib/executionTimeline.js.map +1 -0
  95. package/dist/server/lib/git.js +385 -6
  96. package/dist/server/lib/git.js.map +1 -1
  97. package/dist/server/lib/integrations/github.js +43 -0
  98. package/dist/server/lib/integrations/github.js.map +1 -1
  99. package/dist/server/lib/integrations/githubActions.js +1 -0
  100. package/dist/server/lib/integrations/githubActions.js.map +1 -1
  101. package/dist/server/lib/integrations/githubActionsSessions.js +337 -114
  102. package/dist/server/lib/integrations/githubActionsSessions.js.map +1 -1
  103. package/dist/server/lib/projectMemorySelections.js +7 -3
  104. package/dist/server/lib/projectMemorySelections.js.map +1 -1
  105. package/dist/server/lib/shutdown.js +2 -2
  106. package/dist/server/lib/shutdown.js.map +1 -1
  107. package/dist/server/lib/specArtifact.js +3 -0
  108. package/dist/server/lib/specArtifact.js.map +1 -1
  109. package/dist/server/lib/specFormatting.js +1 -1
  110. package/dist/server/lib/specFormatting.js.map +1 -1
  111. package/dist/server/lib/specOperations.js +78 -12
  112. package/dist/server/lib/specOperations.js.map +1 -1
  113. package/dist/server/lib/specReviewContext.js +54 -18
  114. package/dist/server/lib/specReviewContext.js.map +1 -1
  115. package/dist/server/lib/specReviewDraft.js +3 -2
  116. package/dist/server/lib/specReviewDraft.js.map +1 -1
  117. package/dist/server/lib/specReviewOperations.js +74 -9
  118. package/dist/server/lib/specReviewOperations.js.map +1 -1
  119. package/dist/server/lib/specReviewValidation.js +217 -0
  120. package/dist/server/lib/specReviewValidation.js.map +1 -0
  121. package/dist/server/lib/specReviews.js +30 -2
  122. package/dist/server/lib/specReviews.js.map +1 -1
  123. package/dist/server/lib/specs.js +18 -1
  124. package/dist/server/lib/specs.js.map +1 -1
  125. package/dist/server/lib/stageSnapshots.js +197 -0
  126. package/dist/server/lib/stageSnapshots.js.map +1 -0
  127. package/dist/server/lib/testSessions.js +160 -18
  128. package/dist/server/lib/testSessions.js.map +1 -1
  129. package/dist/server/lib/ticketAutomation.js +80 -4
  130. package/dist/server/lib/ticketAutomation.js.map +1 -1
  131. package/dist/server/lib/ticketAutomationCommit.js +466 -91
  132. package/dist/server/lib/ticketAutomationCommit.js.map +1 -1
  133. package/dist/server/lib/ticketFollowUpOperations.js +270 -29
  134. package/dist/server/lib/ticketFollowUpOperations.js.map +1 -1
  135. package/dist/server/lib/ticketMessages.js +16 -0
  136. package/dist/server/lib/ticketMessages.js.map +1 -1
  137. package/dist/server/lib/ticketRunOperations.js +51 -6
  138. package/dist/server/lib/ticketRunOperations.js.map +1 -1
  139. package/dist/server/lib/ticketUndo.js +77 -168
  140. package/dist/server/lib/ticketUndo.js.map +1 -1
  141. package/dist/server/lib/ticketWorkflowOperations.js +132 -28
  142. package/dist/server/lib/ticketWorkflowOperations.js.map +1 -1
  143. package/dist/server/lib/tickets.js +41 -27
  144. package/dist/server/lib/tickets.js.map +1 -1
  145. package/dist/server/lib/transcriptRuns.js +3 -3
  146. package/dist/server/lib/transcriptRuns.js.map +1 -1
  147. package/dist/server/lib/turnExecutionErrors.js +12 -0
  148. package/dist/server/lib/turnExecutionErrors.js.map +1 -0
  149. package/dist/server/lib/types.js +58 -1
  150. package/dist/server/lib/types.js.map +1 -1
  151. package/dist/server/workers/build.js +596 -184
  152. package/dist/server/workers/build.js.map +1 -1
  153. package/dist/server/workers/chat.js +269 -132
  154. package/dist/server/workers/chat.js.map +1 -1
  155. package/dist/server/workers/followUp.js +731 -203
  156. package/dist/server/workers/followUp.js.map +1 -1
  157. package/dist/server/workers/plan.js +546 -188
  158. package/dist/server/workers/plan.js.map +1 -1
  159. package/dist/server/workers/planFollowUp.js +240 -75
  160. package/dist/server/workers/planFollowUp.js.map +1 -1
  161. package/dist/server/workers/review.js +790 -297
  162. package/dist/server/workers/review.js.map +1 -1
  163. package/dist/server/workers/specReview.js +212 -46
  164. package/dist/server/workers/specReview.js.map +1 -1
  165. package/dist/server/workers/specSession.js +434 -254
  166. package/dist/server/workers/specSession.js.map +1 -1
  167. package/package.json +1 -1
  168. package/dist/client/assets/GitHubActionsDialog-DAD5REmY.js +0 -1
  169. package/dist/client/assets/TestsDialog-B5NVrroq.js +0 -4
  170. package/dist/client/assets/TicketChangesModal-By-_gTGd.js +0 -1
  171. package/dist/client/assets/channel-Dd5Len0X.js +0 -1
  172. package/dist/client/assets/classDiagram-4FO5ZUOK-B7KUg6r8.js +0 -1
  173. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-CQm-z5c4.js +0 -1
  174. package/dist/client/assets/index-BHq6-Eir.js +0 -270
  175. package/dist/client/assets/index-BxTc5qQT.css +0 -2
  176. package/dist/client/assets/stateDiagram-v2-BHNVJYJU-C8yO6POT.js +0 -1
@@ -0,0 +1,498 @@
1
+ import db from '../db.js';
2
+ import { terminalizeAgentRunsForExecutionRun } from './agentRuns.js';
3
+ import { AUTOMATION_STAGE_DETAILS_SCHEMA_VERSION, ensureAutomationStageResult, getAutomationStageDetails, } from './automationStageDetails.js';
4
+ import { completeAutomationProgression, finishAutomationReviewFix, resolveProgressionForChild, waitAutomationProgression, } from './automationProgression.js';
5
+ import { upsertBundlePullRequestFromGitHub } from './bundlePullRequests.js';
6
+ import { fetchRemoteBranchState, getAutomationRemoteIdentity, getGitHeadIdentity, reconcileAutomationCommit, resolveWorktreePath, } from './git.js';
7
+ import { getGitHubConnectionConfig } from './integrations/index.js';
8
+ import { observeGitHubPullRequest, } from './integrations/github.js';
9
+ import { getProjectById } from './projects.js';
10
+ import { getExecutionRun, withExecutionRunTransaction } from './executionRuns.js';
11
+ import { resolveAutomationConfig } from './ticketAutomation.js';
12
+ const RESTART_FAILURE_MESSAGE = 'Interrupted by server restart';
13
+ export const decideCommitReconciliation = (observation) => {
14
+ if (observation.outcome === 'matched') {
15
+ return { outcome: 'completed', result: observation.result };
16
+ }
17
+ if (observation.outcome === 'absent') {
18
+ return { outcome: 'absent', reason: 'The persisted commit intent was confirmed not to have run.' };
19
+ }
20
+ return observation;
21
+ };
22
+ const remoteStatesEqual = (left, right) => (left.state === right.state
23
+ && (left.state === 'absent' || (right.state === 'observed' && left.sha === right.sha)));
24
+ export const decidePushReconciliation = (intent, currentRemote) => {
25
+ if (currentRemote.state === 'observed' && currentRemote.sha === intent.targetLocalSha) {
26
+ return { outcome: 'completed', result: { remoteSha: currentRemote.sha } };
27
+ }
28
+ if (remoteStatesEqual(currentRemote, intent.preActionRemote)) {
29
+ return { outcome: 'absent', reason: 'The remote branch is unchanged from its persisted pre-push state.' };
30
+ }
31
+ return {
32
+ outcome: 'ambiguous',
33
+ reason: 'The remote branch changed without matching the exact persisted push target.',
34
+ };
35
+ };
36
+ export const decidePullRequestReconciliation = (observation) => {
37
+ if (observation.outcome === 'exact') {
38
+ return {
39
+ outcome: 'completed',
40
+ result: {
41
+ pullRequestNumber: observation.pullRequest.number,
42
+ providerId: observation.pullRequest.nodeId,
43
+ url: observation.pullRequest.url,
44
+ state: observation.pullRequest.state,
45
+ },
46
+ pullRequest: observation.pullRequest,
47
+ };
48
+ }
49
+ if (observation.outcome === 'absent') {
50
+ return { outcome: 'absent', reason: 'No pull request matches the persisted repository, branches, and head SHA.' };
51
+ }
52
+ return observation;
53
+ };
54
+ const pauseCodeForStage = (kind) => {
55
+ if (kind === 'automation_commit') {
56
+ return 'commit';
57
+ }
58
+ if (kind === 'automation_push') {
59
+ return 'push';
60
+ }
61
+ return 'pull_request';
62
+ };
63
+ const observeStage = async (stage, details) => {
64
+ const project = getProjectById(stage.project_id);
65
+ const bundle = db.prepare(`
66
+ SELECT id, branch, kind FROM worktree_bundles WHERE id = ? AND project_id = ?
67
+ `).get(stage.bundle_id, stage.project_id);
68
+ if (!project || !bundle || details.worktree_bundle_id !== bundle.id || details.stage_kind !== stage.kind) {
69
+ return { outcome: 'ambiguous', reason: 'The persisted automation stage context is stale or inconsistent.' };
70
+ }
71
+ const cwd = bundle.kind === 'project_root' ? project.repo_path : resolveWorktreePath(bundle.branch, project);
72
+ if (stage.kind === 'automation_commit') {
73
+ if (!('branch' in details.intent) || !('selectedContentDigest' in details.intent) || details.intent.branch !== bundle.branch) {
74
+ return { outcome: 'ambiguous', reason: 'The persisted commit identity is incomplete or no longer matches the bundle.' };
75
+ }
76
+ const decision = decideCommitReconciliation(reconcileAutomationCommit(cwd, details.intent));
77
+ if (!details.result) {
78
+ return decision;
79
+ }
80
+ if (decision.outcome !== 'completed') {
81
+ const persisted = details.result;
82
+ if ('outcome' in persisted && persisted.outcome === 'no_changes') {
83
+ const current = getGitHeadIdentity(cwd);
84
+ return current.headSha === persisted.headSha && current.treeSha === persisted.treeSha
85
+ ? { outcome: 'completed', result: persisted }
86
+ : { outcome: 'ambiguous', reason: 'The no-change commit result no longer matches the current repository state.' };
87
+ }
88
+ return { outcome: 'ambiguous', reason: 'The persisted commit result could not be exactly re-observed.' };
89
+ }
90
+ const result = details.result;
91
+ return 'commitSha' in result && 'commitSha' in decision.result
92
+ && result.commitSha === decision.result.commitSha
93
+ && result.parentSha === decision.result.parentSha
94
+ && result.treeSha === decision.result.treeSha
95
+ ? { ...decision, result }
96
+ : { outcome: 'ambiguous', reason: 'The observed commit conflicts with its persisted result.' };
97
+ }
98
+ if (stage.kind === 'automation_push') {
99
+ if (!('branch' in details.intent)
100
+ || !('targetLocalSha' in details.intent)
101
+ || !('originIdentity' in details.intent)
102
+ || details.intent.branch !== bundle.branch
103
+ || getAutomationRemoteIdentity(cwd) !== details.intent.originIdentity) {
104
+ return { outcome: 'ambiguous', reason: 'The persisted push identity is incomplete or no longer matches the bundle.' };
105
+ }
106
+ const decision = decidePushReconciliation(details.intent, await fetchRemoteBranchState(cwd, details.intent.branch, details.intent.originIdentity));
107
+ if (!details.result) {
108
+ return decision;
109
+ }
110
+ const result = details.result;
111
+ return decision.outcome === 'completed' && result.remoteSha === decision.result.remoteSha
112
+ ? { ...decision, result }
113
+ : { outcome: 'ambiguous', reason: 'The observed remote branch conflicts with its persisted push result.' };
114
+ }
115
+ if (!('headSha' in details.intent) || details.intent.headBranch !== bundle.branch) {
116
+ return { outcome: 'ambiguous', reason: 'The persisted pull-request identity is incomplete.' };
117
+ }
118
+ const config = getGitHubConnectionConfig(stage.project_id);
119
+ if (!config) {
120
+ return { outcome: 'ambiguous', reason: 'GitHub is not connected, so the pull request cannot be observed.' };
121
+ }
122
+ const decision = decidePullRequestReconciliation(await observeGitHubPullRequest(config, details.intent, { includeHistorical: true }));
123
+ if (!details.result) {
124
+ return decision;
125
+ }
126
+ if (decision.outcome !== 'completed') {
127
+ return {
128
+ outcome: 'ambiguous',
129
+ reason: 'The persisted pull-request result could not be exactly re-observed.',
130
+ };
131
+ }
132
+ const result = details.result;
133
+ if (result.pullRequestNumber !== decision.result.pullRequestNumber
134
+ || result.url !== decision.result.url
135
+ || (result.providerId !== null && result.providerId !== decision.result.providerId)) {
136
+ return { outcome: 'ambiguous', reason: 'The observed pull request conflicts with its persisted result.' };
137
+ }
138
+ return { ...decision, result };
139
+ };
140
+ const persistStageDecision = (stage, details, decision) => withExecutionRunTransaction(transaction => {
141
+ const pauseCode = pauseCodeForStage(stage.kind);
142
+ const hasActiveProgression = Boolean(stage.progression_run_id && db.prepare(`
143
+ SELECT 1 FROM execution_runs progression
144
+ JOIN bundle_automation_state state ON state.project_id = progression.project_id
145
+ AND state.worktree_bundle_id = ? AND state.automation_progression_run_id = progression.id
146
+ WHERE progression.id = ? AND progression.project_id = ?
147
+ AND progression.status IN ('queued', 'running', 'waiting')
148
+ `).get(stage.bundle_id, stage.progression_run_id, stage.project_id));
149
+ const clearStoppedStage = () => {
150
+ db.prepare(`
151
+ UPDATE bundle_automation_state
152
+ SET automation_paused_stage_run_id = NULL,
153
+ automation_pause_reason_code = NULL,
154
+ automation_paused_code = NULL,
155
+ automation_paused_reason = NULL,
156
+ automation_paused_at = NULL,
157
+ updated_at = CURRENT_TIMESTAMP
158
+ WHERE project_id = ? AND worktree_bundle_id = ?
159
+ AND automation_progression_run_id IS NULL AND automation_paused_stage_run_id = ?
160
+ `).run(stage.project_id, stage.bundle_id, stage.id);
161
+ };
162
+ if (decision.outcome === 'completed') {
163
+ ensureAutomationStageResult({
164
+ projectId: stage.project_id,
165
+ bundleId: stage.bundle_id,
166
+ runId: stage.id,
167
+ stageKind: stage.kind,
168
+ schemaVersion: AUTOMATION_STAGE_DETAILS_SCHEMA_VERSION,
169
+ result: decision.result,
170
+ });
171
+ if (stage.kind === 'automation_pull_request' && 'pullRequest' in decision && decision.pullRequest) {
172
+ const config = getGitHubConnectionConfig(stage.project_id);
173
+ if (!config) {
174
+ throw new Error('GitHub configuration disappeared while persisting pull-request reconciliation');
175
+ }
176
+ const record = upsertBundlePullRequestFromGitHub(stage.project_id, stage.bundle_id, config, decision.pullRequest);
177
+ if (!record) {
178
+ throw new Error('Pull-request reconciliation result could not be persisted');
179
+ }
180
+ const existingLink = db.prepare(`
181
+ SELECT 1 FROM execution_run_links
182
+ WHERE execution_run_id = ? AND project_id = ? AND entity_type = 'bundle_pull_request'
183
+ AND entity_id = ? AND relationship = 'result'
184
+ `).get(stage.id, stage.project_id, record.id);
185
+ if (!existingLink) {
186
+ transaction.addExecutionRunLink({
187
+ projectId: stage.project_id,
188
+ runId: stage.id,
189
+ link: {
190
+ entityType: 'bundle_pull_request',
191
+ entityId: record.id,
192
+ relationship: 'result',
193
+ expectedParent: { entityType: 'bundle', entityId: stage.bundle_id },
194
+ },
195
+ });
196
+ }
197
+ }
198
+ const transition = getExecutionRun(stage.project_id, stage.id)?.domain_status === 'ambiguous'
199
+ ? transaction.reconcileAmbiguousAutomationExecutionRun
200
+ : transaction.transitionExecutionRun;
201
+ transition({
202
+ projectId: stage.project_id,
203
+ runId: stage.id,
204
+ status: 'completed',
205
+ domainStatus: 'reconciled_completed',
206
+ eventType: `${stage.kind}_reconciled_completed`,
207
+ });
208
+ if (hasActiveProgression && stage.progression_run_id) {
209
+ waitAutomationProgression({
210
+ projectId: stage.project_id,
211
+ bundleId: stage.bundle_id,
212
+ progressionRunId: stage.progression_run_id,
213
+ pauseCode,
214
+ pauseReason: 'The interrupted automation side effect was confirmed complete. Resume to continue.',
215
+ reasonCode: 'reconciliation_failed',
216
+ pausedStageRunId: stage.id,
217
+ });
218
+ }
219
+ else {
220
+ clearStoppedStage();
221
+ }
222
+ return decision.outcome;
223
+ }
224
+ const transition = getExecutionRun(stage.project_id, stage.id)?.domain_status === 'ambiguous'
225
+ ? transaction.reconcileAmbiguousAutomationExecutionRun
226
+ : transaction.transitionExecutionRun;
227
+ transition({
228
+ projectId: stage.project_id,
229
+ runId: stage.id,
230
+ status: decision.outcome === 'absent' ? 'interrupted' : 'failed',
231
+ domainStatus: decision.outcome === 'absent' ? 'reconciled_absent' : 'ambiguous',
232
+ failure: {
233
+ code: decision.outcome === 'absent' ? 'side_effect_absent' : 'side_effect_ambiguous',
234
+ message: decision.reason,
235
+ },
236
+ eventType: `${stage.kind}_reconciled_${decision.outcome}`,
237
+ });
238
+ if (hasActiveProgression && stage.progression_run_id) {
239
+ waitAutomationProgression({
240
+ projectId: stage.project_id,
241
+ bundleId: stage.bundle_id,
242
+ progressionRunId: stage.progression_run_id,
243
+ pauseCode,
244
+ pauseReason: decision.reason,
245
+ reasonCode: decision.outcome === 'absent' ? 'reconciliation_failed' : 'side_effect_ambiguous',
246
+ pausedStageRunId: stage.id,
247
+ });
248
+ }
249
+ else {
250
+ clearStoppedStage();
251
+ }
252
+ return decision.outcome;
253
+ });
254
+ const reconcileSideEffects = async () => {
255
+ const stages = db.prepare(`
256
+ SELECT run.id, run.project_id, run.kind, run.parent_run_id,
257
+ state.automation_progression_run_id AS progression_run_id, link.entity_id AS bundle_id
258
+ FROM execution_runs run
259
+ JOIN execution_run_links link ON link.execution_run_id = run.id
260
+ AND link.project_id = run.project_id AND link.entity_type = 'bundle' AND link.relationship = 'primary'
261
+ JOIN bundle_automation_state state ON state.project_id = run.project_id
262
+ AND state.worktree_bundle_id = link.entity_id
263
+ AND (state.automation_progression_run_id = run.parent_run_id OR state.automation_paused_stage_run_id = run.id)
264
+ WHERE run.kind IN ('automation_commit', 'automation_push', 'automation_pull_request')
265
+ AND (run.status IN ('queued', 'running', 'waiting') OR (run.status = 'failed' AND run.domain_status = 'ambiguous'))
266
+ ORDER BY run.created_at, run.id
267
+ `).all();
268
+ const counts = { completed: 0, absent: 0, ambiguous: 0 };
269
+ for (const stage of stages) {
270
+ const details = getAutomationStageDetails(stage.project_id, stage.id);
271
+ const decision = details
272
+ ? await observeStage(stage, details).catch(() => ({ outcome: 'ambiguous', reason: 'The automation side effect could not be observed.' }))
273
+ : { outcome: 'ambiguous', reason: 'The automation side effect has no complete persisted identity.' };
274
+ counts[persistStageDecision(stage, details, decision)] += 1;
275
+ }
276
+ return counts;
277
+ };
278
+ export const reconcileAutomationStage = async ({ projectId, bundleId, progressionRunId, stageRunId, }) => {
279
+ const run = getExecutionRun(projectId, stageRunId);
280
+ const progression = getExecutionRun(projectId, progressionRunId);
281
+ const originalProgression = run?.parent_run_id ? getExecutionRun(projectId, run.parent_run_id) : null;
282
+ const hasNormalLineage = run?.parent_run_id === progressionRunId;
283
+ const hasStoppedRecoveryLineage = (progression?.parent_run_id === stageRunId
284
+ && originalProgression?.kind === 'automation_progression'
285
+ && originalProgression.status === 'cancelled'
286
+ && originalProgression.domain_status === 'stopped');
287
+ if (!run
288
+ || !['automation_commit', 'automation_push', 'automation_pull_request'].includes(run.kind)
289
+ || (!hasNormalLineage && !hasStoppedRecoveryLineage)) {
290
+ throw new Error('The paused automation stage does not belong to the active progression');
291
+ }
292
+ const ownsBundle = db.prepare(`
293
+ SELECT 1 FROM execution_run_links
294
+ WHERE execution_run_id = ? AND project_id = ? AND entity_type = 'bundle'
295
+ AND entity_id = ? AND relationship = 'primary'
296
+ `).get(stageRunId, projectId, bundleId);
297
+ if (!ownsBundle) {
298
+ throw new Error('The paused automation stage does not belong to this bundle');
299
+ }
300
+ if (!['queued', 'running', 'waiting'].includes(run.status) && !(run.status === 'failed' && run.domain_status === 'ambiguous')) {
301
+ return { status: run.status, domainStatus: run.domain_status };
302
+ }
303
+ const stage = {
304
+ id: run.id,
305
+ project_id: projectId,
306
+ kind: run.kind,
307
+ parent_run_id: run.parent_run_id,
308
+ progression_run_id: progressionRunId,
309
+ bundle_id: bundleId,
310
+ };
311
+ const details = getAutomationStageDetails(projectId, stageRunId);
312
+ const decision = details
313
+ ? await observeStage(stage, details).catch(() => ({ outcome: 'ambiguous', reason: 'The automation side effect could not be observed.' }))
314
+ : { outcome: 'ambiguous', reason: 'The automation side effect has no complete persisted identity.' };
315
+ persistStageDecision(stage, details, decision);
316
+ const updated = getExecutionRun(projectId, stageRunId);
317
+ return { status: updated?.status ?? run.status, domainStatus: updated?.domain_status ?? run.domain_status };
318
+ };
319
+ const reconcileOwnedWorkers = () => {
320
+ const rows = db.prepare(`
321
+ SELECT child.id, child.project_id, child.kind, child.source_id, child.parent_run_id,
322
+ bundle_link.entity_id AS bundle_id, parent.kind AS parent_kind
323
+ FROM execution_runs child
324
+ JOIN execution_runs parent ON parent.id = child.parent_run_id AND parent.project_id = child.project_id
325
+ JOIN execution_run_links bundle_link ON bundle_link.execution_run_id = child.id
326
+ AND bundle_link.project_id = child.project_id AND bundle_link.entity_type = 'bundle'
327
+ AND bundle_link.relationship = 'context'
328
+ WHERE child.status IN ('queued', 'running', 'waiting')
329
+ AND ((child.kind = 'review' AND parent.kind = 'automation_progression')
330
+ OR (child.kind = 'build_follow_up' AND parent.kind = 'automation_review_fix'))
331
+ ORDER BY child.created_at, child.id
332
+ `).all();
333
+ let interrupted = 0;
334
+ for (const row of rows) {
335
+ let progression;
336
+ try {
337
+ progression = resolveProgressionForChild({
338
+ projectId: row.project_id,
339
+ bundleId: row.bundle_id,
340
+ childRunId: row.id,
341
+ allowReviewFixParent: row.parent_kind === 'automation_review_fix',
342
+ });
343
+ }
344
+ catch {
345
+ continue;
346
+ }
347
+ withExecutionRunTransaction(transaction => {
348
+ transaction.transitionExecutionRun({
349
+ projectId: row.project_id,
350
+ runId: row.id,
351
+ status: 'interrupted',
352
+ domainStatus: 'interrupted',
353
+ failure: { code: 'server_restarted', message: RESTART_FAILURE_MESSAGE },
354
+ eventType: `${row.kind}_interrupted`,
355
+ });
356
+ terminalizeAgentRunsForExecutionRun(row.id, 'error', RESTART_FAILURE_MESSAGE);
357
+ if (row.source_id) {
358
+ db.prepare("UPDATE tickets SET agent_status = 'error' WHERE id = ? AND project_id = ? AND agent_status = 'running'")
359
+ .run(row.source_id, row.project_id);
360
+ }
361
+ if (row.parent_kind === 'automation_review_fix') {
362
+ finishAutomationReviewFix({
363
+ projectId: row.project_id,
364
+ reviewFixRunId: row.parent_run_id,
365
+ failedMessage: RESTART_FAILURE_MESSAGE,
366
+ });
367
+ }
368
+ waitAutomationProgression({
369
+ projectId: row.project_id,
370
+ bundleId: row.bundle_id,
371
+ progressionRunId: progression.id,
372
+ pauseCode: 'review',
373
+ pauseReason: 'Automation-owned work was interrupted by a server restart.',
374
+ reasonCode: 'server_restart',
375
+ pausedStageRunId: row.id,
376
+ });
377
+ });
378
+ interrupted += 1;
379
+ }
380
+ return { interrupted };
381
+ };
382
+ const reconcileProgressions = () => {
383
+ const reviewFixes = db.prepare(`
384
+ SELECT fix.id, fix.project_id, fix.parent_run_id AS progression_id,
385
+ state.worktree_bundle_id AS bundle_id
386
+ FROM execution_runs fix
387
+ JOIN bundle_automation_state state ON state.project_id = fix.project_id
388
+ AND state.automation_progression_run_id = fix.parent_run_id
389
+ WHERE fix.kind = 'automation_review_fix' AND fix.status IN ('queued', 'running', 'waiting')
390
+ AND NOT EXISTS (
391
+ SELECT 1 FROM execution_runs child
392
+ WHERE child.project_id = fix.project_id AND child.parent_run_id = fix.id
393
+ AND child.status IN ('queued', 'running', 'waiting')
394
+ )
395
+ `).all();
396
+ for (const fix of reviewFixes) {
397
+ finishAutomationReviewFix({
398
+ projectId: fix.project_id,
399
+ reviewFixRunId: fix.id,
400
+ failedMessage: RESTART_FAILURE_MESSAGE,
401
+ });
402
+ waitAutomationProgression({
403
+ projectId: fix.project_id,
404
+ bundleId: fix.bundle_id,
405
+ progressionRunId: fix.progression_id,
406
+ pauseCode: 'review',
407
+ pauseReason: 'Automation review-fix orchestration was interrupted by a server restart.',
408
+ reasonCode: 'server_restart',
409
+ pausedStageRunId: fix.id,
410
+ });
411
+ }
412
+ const orphaned = db.prepare(`
413
+ SELECT progression.id, progression.project_id, state.worktree_bundle_id AS bundle_id
414
+ FROM execution_runs progression
415
+ JOIN bundle_automation_state state ON state.project_id = progression.project_id
416
+ AND state.automation_progression_run_id = progression.id
417
+ WHERE progression.kind = 'automation_progression' AND progression.status IN ('queued', 'running')
418
+ AND NOT EXISTS (
419
+ SELECT 1 FROM execution_runs child
420
+ WHERE child.project_id = progression.project_id AND child.parent_run_id = progression.id
421
+ AND child.status IN ('queued', 'running', 'waiting')
422
+ )
423
+ `).all();
424
+ let waiting = 0;
425
+ let completed = 0;
426
+ for (const progression of orphaned) {
427
+ const project = getProjectById(progression.project_id);
428
+ const bundle = db.prepare(`
429
+ SELECT * FROM worktree_bundles WHERE id = ? AND project_id = ?
430
+ `).get(progression.bundle_id, progression.project_id);
431
+ if (project && bundle) {
432
+ const config = resolveAutomationConfig(bundle, project);
433
+ const requiredStage = config.depth === 'auto_commit'
434
+ ? 'automation_commit'
435
+ : config.depth === 'auto_push'
436
+ ? 'automation_push'
437
+ : config.depth === 'auto_pr'
438
+ ? 'automation_pull_request'
439
+ : null;
440
+ const boundary = requiredStage ? db.prepare(`
441
+ SELECT child.id
442
+ FROM execution_runs child
443
+ JOIN automation_stage_details details ON details.execution_run_id = child.id
444
+ AND details.project_id = child.project_id AND details.result_json IS NOT NULL
445
+ WHERE child.project_id = ? AND child.parent_run_id = ?
446
+ AND child.kind = ? AND child.status = 'completed'
447
+ ORDER BY child.completed_at DESC, child.id DESC
448
+ LIMIT 1
449
+ `).get(progression.project_id, progression.id, requiredStage) : config.depth === 'auto_review'
450
+ ? db.prepare(`
451
+ SELECT child.id
452
+ FROM execution_runs child
453
+ WHERE child.project_id = ? AND child.parent_run_id = ?
454
+ AND child.kind = 'review' AND child.status = 'completed'
455
+ ORDER BY child.completed_at DESC, child.id DESC
456
+ LIMIT 1
457
+ `).get(progression.project_id, progression.id)
458
+ : null;
459
+ if (config.depth === 'manual' || boundary) {
460
+ completeAutomationProgression({
461
+ projectId: progression.project_id,
462
+ bundleId: progression.bundle_id,
463
+ progressionRunId: progression.id,
464
+ domainStatus: config.depth === 'manual' ? 'manual_boundary_reached' : 'completed',
465
+ });
466
+ completed += 1;
467
+ continue;
468
+ }
469
+ }
470
+ waitAutomationProgression({
471
+ projectId: progression.project_id,
472
+ bundleId: progression.bundle_id,
473
+ progressionRunId: progression.id,
474
+ pauseCode: 'review',
475
+ pauseReason: 'Automation progression was interrupted by a server restart.',
476
+ reasonCode: 'server_restart',
477
+ pausedStageRunId: null,
478
+ });
479
+ waiting += 1;
480
+ }
481
+ return { recovered: 0, waiting, completed, reviewFixes: reviewFixes.length };
482
+ };
483
+ export const reconcileAutomationExecutions = async () => {
484
+ const workers = reconcileOwnedWorkers();
485
+ const sideEffects = await reconcileSideEffects();
486
+ const progressions = reconcileProgressions();
487
+ return {
488
+ owned_workers_interrupted: workers.interrupted,
489
+ side_effects_completed: sideEffects.completed,
490
+ side_effects_absent: sideEffects.absent,
491
+ side_effects_ambiguous: sideEffects.ambiguous,
492
+ legacy_progressions_recovered: progressions.recovered,
493
+ progressions_waiting: progressions.waiting,
494
+ progressions_completed: progressions.completed,
495
+ review_fixes_interrupted: progressions.reviewFixes,
496
+ };
497
+ };
498
+ //# sourceMappingURL=automationReconciliation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"automationReconciliation.js","sourceRoot":"","sources":["../../../server/lib/automationReconciliation.ts"],"names":[],"mappings":"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"}