@straiffi/archon 1.8.8 → 1.8.9

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--4X_m6mR.js → ActivityView-gBeoYQdD.js} +1 -1
  2. package/dist/client/assets/{GitHubActionsDialog-DZ1lHM01.js → GitHubActionsDialog-fc1Vwafm.js} +1 -1
  3. package/dist/client/assets/RepositoryGraphDialog-DCOjwUR3.js +1 -0
  4. package/dist/client/assets/VerificationDialog-CIObj1Rw.js +4 -0
  5. package/dist/client/assets/{architectureDiagram-3BPJPVTR-CY5xTOZJ.js → architectureDiagram-3BPJPVTR-B1tJZe1S.js} +1 -1
  6. package/dist/client/assets/{blockDiagram-GPEHLZMM-DkMi7gMh.js → blockDiagram-GPEHLZMM-D_90AQ2Z.js} +1 -1
  7. package/dist/client/assets/{c4Diagram-AAUBKEIU-ZZxXBBU4.js → c4Diagram-AAUBKEIU-DSyJfqly.js} +1 -1
  8. package/dist/client/assets/channel-DFw1f2Rh.js +1 -0
  9. package/dist/client/assets/{chunk-2J33WTMH-C9PiKMs-.js → chunk-2J33WTMH-B9RStQGj.js} +1 -1
  10. package/dist/client/assets/{chunk-3OPIFGDE-B81aUmvi.js → chunk-3OPIFGDE-CHKuJYq0.js} +1 -1
  11. package/dist/client/assets/{chunk-5ZQYHXKU-Bk2Owm90.js → chunk-5ZQYHXKU-Cznw7LTJ.js} +1 -1
  12. package/dist/client/assets/{chunk-727SXJPM-Bx-79aJk.js → chunk-727SXJPM-ix6OeZwJ.js} +1 -1
  13. package/dist/client/assets/{chunk-AQP2D5EJ-GQNXYOf0.js → chunk-AQP2D5EJ-DrPJIcE7.js} +1 -1
  14. package/dist/client/assets/{chunk-CSCIHK7Q-BV22j6vn.js → chunk-CSCIHK7Q-BSEHTnBR.js} +1 -1
  15. package/dist/client/assets/{chunk-KSCS5N6A-C9LlcbWv.js → chunk-KSCS5N6A-MdDdaLn8.js} +1 -1
  16. package/dist/client/assets/{chunk-L5ZTLDWV-D8PJqJnh.js → chunk-L5ZTLDWV-D_5xeDG1.js} +1 -1
  17. package/dist/client/assets/{chunk-LZXEDZCA-DcbPPozR.js → chunk-LZXEDZCA-Bz8_Fyt2.js} +2 -2
  18. package/dist/client/assets/{chunk-ND2GUHAM-NV-_2KqZ.js → chunk-ND2GUHAM-DCINKlk8.js} +1 -1
  19. package/dist/client/assets/{chunk-NZK2D7GU-CbqA26gb.js → chunk-NZK2D7GU-rGPgryKx.js} +1 -1
  20. package/dist/client/assets/{chunk-O5CBEL6O-B0DMN44B.js → chunk-O5CBEL6O-BHB8UIYA.js} +1 -1
  21. package/dist/client/assets/{chunk-WU5MYG2G-CYpcnwf9.js → chunk-WU5MYG2G-Bz5BJWjF.js} +1 -1
  22. package/dist/client/assets/classDiagram-4FO5ZUOK-Dt0kmMzQ.js +1 -0
  23. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-BuxhA4Gw.js +1 -0
  24. package/dist/client/assets/{dagre-BM42HDAG-B5HD9fyK.js → dagre-BM42HDAG-B4TXLkOG.js} +1 -1
  25. package/dist/client/assets/{diagram-2AECGRRQ-BCXvWFpM.js → diagram-2AECGRRQ-CxMup1wq.js} +1 -1
  26. package/dist/client/assets/{diagram-5GNKFQAL-CSpWGfAO.js → diagram-5GNKFQAL-CTfP_wnS.js} +1 -1
  27. package/dist/client/assets/{diagram-KO2AKTUF-CFECGppT.js → diagram-KO2AKTUF-31NKNt4r.js} +1 -1
  28. package/dist/client/assets/{diagram-LMA3HP47-Dpb99QbZ.js → diagram-LMA3HP47-Cxo7yvjc.js} +1 -1
  29. package/dist/client/assets/{diagram-OG6HWLK6-DJcTGnx0.js → diagram-OG6HWLK6-ChgSAMLv.js} +1 -1
  30. package/dist/client/assets/{erDiagram-TEJ5UH35-jWArJxNU.js → erDiagram-TEJ5UH35-u6msywL_.js} +1 -1
  31. package/dist/client/assets/{flowDiagram-I6XJVG4X-DDF3P1hY.js → flowDiagram-I6XJVG4X-CimeXkDN.js} +1 -1
  32. package/dist/client/assets/{ganttDiagram-6RSMTGT7-Corwr_18.js → ganttDiagram-6RSMTGT7-DOu5sDUI.js} +1 -1
  33. package/dist/client/assets/{gitGraphDiagram-PVQCEYII-WzlpszWn.js → gitGraphDiagram-PVQCEYII-zIToibUf.js} +1 -1
  34. package/dist/client/assets/index-C-VHd0Pr.js +274 -0
  35. package/dist/client/assets/index-D3xlEyeM.css +2 -0
  36. package/dist/client/assets/{infoDiagram-5YYISTIA-C0VwTwNC.js → infoDiagram-5YYISTIA-CAtWGGJI.js} +1 -1
  37. package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-m9l3k2qX.js → ishikawaDiagram-YF4QCWOH-7N-C7DEt.js} +1 -1
  38. package/dist/client/assets/{journeyDiagram-JHISSGLW-DMhT8HTW.js → journeyDiagram-JHISSGLW-D7VUypFG.js} +1 -1
  39. package/dist/client/assets/{kanban-definition-UN3LZRKU-C2ZkcOi0.js → kanban-definition-UN3LZRKU-AmbDmzSD.js} +1 -1
  40. package/dist/client/assets/{line-gKkUdUWR.js → line-qf4UZ8vh.js} +1 -1
  41. package/dist/client/assets/{mermaid-parser.core-DdBfJWbP.js → mermaid-parser.core-BssCd1kF.js} +1 -1
  42. package/dist/client/assets/{mermaid.core-DXnhq-eu.js → mermaid.core-DzeMqg9Y.js} +3 -3
  43. package/dist/client/assets/{mindmap-definition-RKZ34NQL-B0gX4aJy.js → mindmap-definition-RKZ34NQL-dEnNQcDm.js} +1 -1
  44. package/dist/client/assets/{pieDiagram-4H26LBE5-BHYdLmpx.js → pieDiagram-4H26LBE5-VjMue0a-.js} +1 -1
  45. package/dist/client/assets/{quadrantDiagram-W4KKPZXB-C-H-yQwU.js → quadrantDiagram-W4KKPZXB-DQFdm-0f.js} +1 -1
  46. package/dist/client/assets/{requirementDiagram-4Y6WPE33-DY_pSCFy.js → requirementDiagram-4Y6WPE33-CHIaXlsy.js} +1 -1
  47. package/dist/client/assets/{sankeyDiagram-5OEKKPKP-CC61HRGf.js → sankeyDiagram-5OEKKPKP-D-kzGaKb.js} +1 -1
  48. package/dist/client/assets/{sequenceDiagram-3UESZ5HK-B8fXWNxw.js → sequenceDiagram-3UESZ5HK-CiDmlD8k.js} +1 -1
  49. package/dist/client/assets/{stateDiagram-AJRCARHV-C_VYKsXW.js → stateDiagram-AJRCARHV-BKlnnFdT.js} +1 -1
  50. package/dist/client/assets/stateDiagram-v2-BHNVJYJU-DhJxc4em.js +1 -0
  51. package/dist/client/assets/{timeline-definition-PNZ67QCA-0fB4PIIX.js → timeline-definition-PNZ67QCA-D-BK07Un.js} +1 -1
  52. package/dist/client/assets/{vennDiagram-CIIHVFJN-CfpVF7Aa.js → vennDiagram-CIIHVFJN-CB9_GqSx.js} +1 -1
  53. package/dist/client/assets/{wardleyDiagram-YWT4CUSO-CgdK4FcC.js → wardleyDiagram-YWT4CUSO-BEuNfyLT.js} +1 -1
  54. package/dist/client/assets/{xychartDiagram-2RQKCTM6-BEfatQYR.js → xychartDiagram-2RQKCTM6-CSS5WMrZ.js} +1 -1
  55. package/dist/client/index.html +2 -2
  56. package/dist/server/db.js +481 -27
  57. package/dist/server/db.js.map +1 -1
  58. package/dist/server/index.js +72 -18
  59. package/dist/server/index.js.map +1 -1
  60. package/dist/server/lib/activeAutomationChild.js +1 -0
  61. package/dist/server/lib/activeAutomationChild.js.map +1 -1
  62. package/dist/server/lib/agent.js +127 -15
  63. package/dist/server/lib/agent.js.map +1 -1
  64. package/dist/server/lib/agentRuns.js +12 -0
  65. package/dist/server/lib/agentRuns.js.map +1 -1
  66. package/dist/server/lib/agentSpawnPermits.js +37 -0
  67. package/dist/server/lib/agentSpawnPermits.js.map +1 -0
  68. package/dist/server/lib/automationCheckGate.js +9 -1
  69. package/dist/server/lib/automationCheckGate.js.map +1 -1
  70. package/dist/server/lib/automationProgression.js +19 -5
  71. package/dist/server/lib/automationProgression.js.map +1 -1
  72. package/dist/server/lib/automationReviewGate.js +1 -0
  73. package/dist/server/lib/automationReviewGate.js.map +1 -1
  74. package/dist/server/lib/buildCompletionContinuation.js +144 -4
  75. package/dist/server/lib/buildCompletionContinuation.js.map +1 -1
  76. package/dist/server/lib/buildSequences.js +13 -1
  77. package/dist/server/lib/buildSequences.js.map +1 -1
  78. package/dist/server/lib/bundleActivity.js +19 -0
  79. package/dist/server/lib/bundleActivity.js.map +1 -1
  80. package/dist/server/lib/chatOperations.js +81 -2
  81. package/dist/server/lib/chatOperations.js.map +1 -1
  82. package/dist/server/lib/checkAutoFix.js +604 -0
  83. package/dist/server/lib/checkAutoFix.js.map +1 -0
  84. package/dist/server/lib/checkAutoFixDetails.js +83 -0
  85. package/dist/server/lib/checkAutoFixDetails.js.map +1 -0
  86. package/dist/server/lib/checkAutoFixPolicy.js +59 -0
  87. package/dist/server/lib/checkAutoFixPolicy.js.map +1 -0
  88. package/dist/server/lib/checkRepair.js +149 -54
  89. package/dist/server/lib/checkRepair.js.map +1 -1
  90. package/dist/server/lib/checkRepairDispatch.js +91 -0
  91. package/dist/server/lib/checkRepairDispatch.js.map +1 -0
  92. package/dist/server/lib/checkRepairEvidence.js +84 -0
  93. package/dist/server/lib/checkRepairEvidence.js.map +1 -0
  94. package/dist/server/lib/checkRepairParent.js +21 -0
  95. package/dist/server/lib/checkRepairParent.js.map +1 -0
  96. package/dist/server/lib/checkRepairReconciliation.js +14 -5
  97. package/dist/server/lib/checkRepairReconciliation.js.map +1 -1
  98. package/dist/server/lib/checkRunner.js +27 -8
  99. package/dist/server/lib/checkRunner.js.map +1 -1
  100. package/dist/server/lib/checkRuns.js +63 -4
  101. package/dist/server/lib/checkRuns.js.map +1 -1
  102. package/dist/server/lib/executionReconciliation.js +387 -8
  103. package/dist/server/lib/executionReconciliation.js.map +1 -1
  104. package/dist/server/lib/executionRuns.js +24 -1
  105. package/dist/server/lib/executionRuns.js.map +1 -1
  106. package/dist/server/lib/integrations/github.js +10 -7
  107. package/dist/server/lib/integrations/github.js.map +1 -1
  108. package/dist/server/lib/postBuildCheckRuns.js +200 -5
  109. package/dist/server/lib/postBuildCheckRuns.js.map +1 -1
  110. package/dist/server/lib/postBuildChecks.js +83 -13
  111. package/dist/server/lib/postBuildChecks.js.map +1 -1
  112. package/dist/server/lib/projects.js +25 -1
  113. package/dist/server/lib/projects.js.map +1 -1
  114. package/dist/server/lib/queue.js +9 -3
  115. package/dist/server/lib/queue.js.map +1 -1
  116. package/dist/server/lib/repositoryGraphQueries.js +5 -3
  117. package/dist/server/lib/repositoryGraphQueries.js.map +1 -1
  118. package/dist/server/lib/repositoryGraphScan.js +13 -2
  119. package/dist/server/lib/repositoryGraphScan.js.map +1 -1
  120. package/dist/server/lib/repositoryGraphStore.js +61 -1
  121. package/dist/server/lib/repositoryGraphStore.js.map +1 -1
  122. package/dist/server/lib/specArtifact.js +10 -1
  123. package/dist/server/lib/specArtifact.js.map +1 -1
  124. package/dist/server/lib/specDraft.js +10 -2
  125. package/dist/server/lib/specDraft.js.map +1 -1
  126. package/dist/server/lib/specExport.js +70 -6
  127. package/dist/server/lib/specExport.js.map +1 -1
  128. package/dist/server/lib/specFormatting.js +3 -2
  129. package/dist/server/lib/specFormatting.js.map +1 -1
  130. package/dist/server/lib/specRepositoryEvidenceFormatting.js +75 -0
  131. package/dist/server/lib/specRepositoryEvidenceFormatting.js.map +1 -0
  132. package/dist/server/lib/specRepositoryImpact.js +447 -0
  133. package/dist/server/lib/specRepositoryImpact.js.map +1 -0
  134. package/dist/server/lib/specRepositoryImpactLimits.js +6 -0
  135. package/dist/server/lib/specRepositoryImpactLimits.js.map +1 -0
  136. package/dist/server/lib/specReviewContext.js +15 -5
  137. package/dist/server/lib/specReviewContext.js.map +1 -1
  138. package/dist/server/lib/specReviewValidation.js +1 -1
  139. package/dist/server/lib/specReviewValidation.js.map +1 -1
  140. package/dist/server/lib/specSections.js +28 -3
  141. package/dist/server/lib/specSections.js.map +1 -1
  142. package/dist/server/lib/specSnapshotEvidence.js +162 -0
  143. package/dist/server/lib/specSnapshotEvidence.js.map +1 -0
  144. package/dist/server/lib/specSnapshotEvidenceSerialization.js +202 -0
  145. package/dist/server/lib/specSnapshotEvidenceSerialization.js.map +1 -0
  146. package/dist/server/lib/specs.js +31 -5
  147. package/dist/server/lib/specs.js.map +1 -1
  148. package/dist/server/lib/ticketAutomationCommit.js +3 -1
  149. package/dist/server/lib/ticketAutomationCommit.js.map +1 -1
  150. package/dist/server/lib/ticketFollowUpOperations.js +16 -12
  151. package/dist/server/lib/ticketFollowUpOperations.js.map +1 -1
  152. package/dist/server/lib/ticketRunOperations.js +13 -1
  153. package/dist/server/lib/ticketRunOperations.js.map +1 -1
  154. package/dist/server/lib/ticketWorkflowOperations.js +5 -2
  155. package/dist/server/lib/ticketWorkflowOperations.js.map +1 -1
  156. package/dist/server/lib/types.js +1 -0
  157. package/dist/server/lib/types.js.map +1 -1
  158. package/dist/server/workers/build.js +46 -148
  159. package/dist/server/workers/build.js.map +1 -1
  160. package/dist/server/workers/chat.js +141 -31
  161. package/dist/server/workers/chat.js.map +1 -1
  162. package/dist/server/workers/followUp.js +210 -48
  163. package/dist/server/workers/followUp.js.map +1 -1
  164. package/dist/server/workers/specReview.js +17 -4
  165. package/dist/server/workers/specReview.js.map +1 -1
  166. package/dist/server/workers/specSession.js +127 -22
  167. package/dist/server/workers/specSession.js.map +1 -1
  168. package/package.json +1 -1
  169. package/dist/client/assets/RepositoryGraphDialog-B--YlQcV.js +0 -1
  170. package/dist/client/assets/VerificationDialog-BIWPtBg3.js +0 -4
  171. package/dist/client/assets/channel-b2AN-U3x.js +0 -1
  172. package/dist/client/assets/classDiagram-4FO5ZUOK-C0exS5oM.js +0 -1
  173. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-DkB9dQZ1.js +0 -1
  174. package/dist/client/assets/index-Bs5SQZhz.css +0 -2
  175. package/dist/client/assets/index-Dy-7h3lN.js +0 -274
  176. package/dist/client/assets/stateDiagram-v2-BHNVJYJU-Ctk1r914.js +0 -1
@@ -0,0 +1,604 @@
1
+ import db from '../db.js';
2
+ import { stopBuildAgent, stopChatAgent } from './agent.js';
3
+ import { revokeAgentSpawnPermit } from './agentSpawnPermits.js';
4
+ import { resolveCausalAgentRun, resolveHistoricalProviderSession } from './agentRuns.js';
5
+ import { createCheckAutoFixPolicySnapshot, doCurrentDefinitionsMatchCheckAutoFixPolicySnapshot, getCheckAutoFixPolicyFingerprint, } from './checkAutoFixPolicy.js';
6
+ import { formatCheckRepairPrompt, getCheckRepairFailureSignature, listFailedDefinitionIds, loadCheckRepairEvidence, } from './checkRepairEvidence.js';
7
+ import { dispatchAutomaticCheckRepair } from './checkRepairDispatch.js';
8
+ import { getCheckDefinitionFingerprint } from './checkDefinitions.js';
9
+ import { findActiveCheckBatchForTarget, getCheckBatchDetails, listCheckAttemptDetails } from './checkRuns.js';
10
+ import { startCheckBatch, stopCheckBatch, waitForCheckBatch } from './checkRunner.js';
11
+ import { captureCheckWorkspaceIdentity } from './checkWorkspaceIdentity.js';
12
+ import { getChatSession } from './chats.js';
13
+ import { getExecutionRun, withExecutionRunTransaction } from './executionRuns.js';
14
+ import { resolveExecutionRetryRunConfig } from './executionRetryPredicates.js';
15
+ import { resolveExistingWorktreePath } from './git.js';
16
+ import { getProjectById, getProjectCheckDefinitions } from './projects.js';
17
+ import { getBundle, getTicket, isProjectRootBundle } from './tickets.js';
18
+ import { getCheckAutoFixDetails } from './checkAutoFixDetails.js';
19
+ export { getCheckAutoFixDetails } from './checkAutoFixDetails.js';
20
+ const MAX_ATTEMPTS = 3;
21
+ const activeLoops = new Map();
22
+ const terminalStatuses = new Set(['completed', 'failed', 'cancelled', 'interrupted']);
23
+ const identitiesMatch = (left, right) => (left.state === 'available'
24
+ && right.state === 'available'
25
+ && left.fingerprint === right.fingerprint
26
+ && left.head === right.head);
27
+ export const classifyCheckAutoFixBatchWithoutEnabledFailures = (executionStatus, failedDefinitionCount) => (executionStatus === 'completed' && failedDefinitionCount === 0
28
+ ? 'passed'
29
+ : 'non_auto_fixable_only');
30
+ export const shouldPreserveCheckAutoFixOwnerRunning = (ownerType, automationProgressionRunId) => ownerType === 'ticket' && automationProgressionRunId === null;
31
+ const getLoop = (projectId, batchRunId) => db.prepare(`
32
+ SELECT loop.* FROM check_auto_fix_loops loop
33
+ JOIN execution_runs run ON run.id = loop.execution_run_id
34
+ WHERE run.project_id = ? AND loop.originating_batch_run_id = ?
35
+ `).get(projectId, batchRunId);
36
+ const appendLoopEvent = (projectId, loopRunId, domainStatus, eventType, metadata, broadcaster) => withExecutionRunTransaction(transaction => {
37
+ transaction.appendLifecycleEvent({
38
+ projectId,
39
+ runId: loopRunId,
40
+ domainStatus,
41
+ eventType,
42
+ metadata,
43
+ });
44
+ }, broadcaster);
45
+ const getWorkspace = (projectId, batch) => {
46
+ const project = getProjectById(projectId);
47
+ if (!project) {
48
+ return null;
49
+ }
50
+ if (batch.target_kind === 'repo_root') {
51
+ return project.repo_path;
52
+ }
53
+ const bundle = batch.target_bundle_id ? getBundle(batch.target_bundle_id, projectId) : null;
54
+ if (!bundle || isProjectRootBundle(bundle)) {
55
+ return null;
56
+ }
57
+ return resolveExistingWorktreePath(bundle.branch, project);
58
+ };
59
+ const getPrimaryOwner = (projectId, runId) => db.prepare(`
60
+ SELECT entity_type, entity_id FROM execution_run_links
61
+ WHERE project_id = ? AND execution_run_id = ? AND relationship = 'primary'
62
+ AND entity_type IN ('ticket', 'chat_session')
63
+ `).get(projectId, runId);
64
+ const resolveCausalLineage = (projectId, batch) => {
65
+ const batchRun = getExecutionRun(projectId, batch.execution_run_id);
66
+ if (!batchRun || batchRun.status !== 'failed') {
67
+ return null;
68
+ }
69
+ let causal = null;
70
+ let progressionRunId = null;
71
+ if (batch.purpose === 'post_build' && batch.causal_source_run_id === batchRun.parent_run_id) {
72
+ causal = batchRun.parent_run_id ? getExecutionRun(projectId, batchRun.parent_run_id) : null;
73
+ }
74
+ else if (batch.purpose === 'automation_gate' && batchRun.parent_run_id) {
75
+ const progression = getExecutionRun(projectId, batchRun.parent_run_id);
76
+ if (progression?.kind !== 'automation_progression' || !['queued', 'running', 'waiting'].includes(progression.status)) {
77
+ return null;
78
+ }
79
+ progressionRunId = progression.id;
80
+ causal = progression.parent_run_id ? getExecutionRun(projectId, progression.parent_run_id) : null;
81
+ }
82
+ if (!causal || causal.status !== 'completed' || !['build', 'build_follow_up', 'chat_turn'].includes(causal.kind)) {
83
+ return null;
84
+ }
85
+ const primary = getPrimaryOwner(projectId, causal.id);
86
+ if (!primary || (causal.kind === 'chat_turn') !== (primary.entity_type === 'chat_session')) {
87
+ return null;
88
+ }
89
+ const owner = primary.entity_type === 'ticket'
90
+ ? (() => {
91
+ const ticket = getTicket(primary.entity_id);
92
+ if (!ticket || ticket.project_id !== projectId) {
93
+ return null;
94
+ }
95
+ const expectedBundleId = batch.target_kind === 'bundle' ? batch.target_bundle_id : null;
96
+ const ticketBundle = ticket.worktree_bundle_id ? getBundle(ticket.worktree_bundle_id, projectId) : null;
97
+ if ((ticketBundle && !isProjectRootBundle(ticketBundle) ? ticketBundle.id : null) !== expectedBundleId) {
98
+ return null;
99
+ }
100
+ return { type: 'ticket', id: ticket.id, description: ticket.description || ticket.title };
101
+ })()
102
+ : (() => {
103
+ const session = getChatSession(primary.entity_id);
104
+ if (!session || session.project_id !== projectId || session.mode !== 'build'
105
+ || session.target_kind !== batch.target_kind || session.target_bundle_id !== batch.target_bundle_id) {
106
+ return null;
107
+ }
108
+ return { type: 'chat_session', id: session.id, description: session.title };
109
+ })();
110
+ if (!owner) {
111
+ return null;
112
+ }
113
+ try {
114
+ const agent = resolveCausalAgentRun(causal.id);
115
+ const config = resolveExecutionRetryRunConfig(causal);
116
+ if (!config) {
117
+ return null;
118
+ }
119
+ return { causal, agent, config, owner, progressionRunId };
120
+ }
121
+ catch {
122
+ return null;
123
+ }
124
+ };
125
+ const definitionsMatch = (snapshots, current) => {
126
+ const currentById = new Map(current.map(definition => [definition.id, definition]));
127
+ return snapshots.every(snapshot => {
128
+ const definition = currentById.get(snapshot.id);
129
+ return definition && getCheckDefinitionFingerprint(definition) === getCheckDefinitionFingerprint(snapshot);
130
+ });
131
+ };
132
+ const ownerStillTargetsBatch = (projectId, owner, batch) => {
133
+ if (owner.type === 'chat_session') {
134
+ const session = getChatSession(owner.id);
135
+ return Boolean(session && session.project_id === projectId && session.mode === 'build'
136
+ && session.target_kind === batch.target_kind && session.target_bundle_id === batch.target_bundle_id);
137
+ }
138
+ const ticket = getTicket(owner.id);
139
+ const bundle = ticket?.worktree_bundle_id ? getBundle(ticket.worktree_bundle_id, projectId) : null;
140
+ const targetBundleId = bundle && !isProjectRootBundle(bundle) ? bundle.id : null;
141
+ return Boolean(ticket && ticket.project_id === projectId
142
+ && targetBundleId === (batch.target_kind === 'bundle' ? batch.target_bundle_id : null));
143
+ };
144
+ const finishLoop = (projectId, loopRunId, reason, finalBatchRunId, message, broadcaster) => withExecutionRunTransaction(transaction => {
145
+ const loop = getExecutionRun(projectId, loopRunId);
146
+ if (!loop || terminalStatuses.has(loop.status)) {
147
+ return false;
148
+ }
149
+ const updated = db.prepare(`
150
+ UPDATE check_auto_fix_loops
151
+ SET terminal_reason = ?, terminal_message = ?, final_batch_run_id = ?, updated_at = CURRENT_TIMESTAMP
152
+ WHERE execution_run_id = ? AND terminal_reason IS NULL
153
+ `).run(reason, message, finalBatchRunId, loopRunId);
154
+ if (updated.changes !== 1) {
155
+ return false;
156
+ }
157
+ const status = reason === 'passed' ? 'completed' : reason === 'user_cancelled' ? 'cancelled' : reason === 'interrupted' ? 'interrupted' : 'failed';
158
+ transaction.transitionExecutionRun({
159
+ projectId,
160
+ runId: loopRunId,
161
+ status,
162
+ domainStatus: reason,
163
+ failure: status === 'failed' ? { code: reason, message: message ?? reason } : null,
164
+ eventType: 'check_auto_fix_terminal',
165
+ eventMetadata: { reason, final_batch_run_id: finalBatchRunId },
166
+ });
167
+ return true;
168
+ }, broadcaster);
169
+ const dispatchAttempt = async ({ projectId, loop, ordinal, owner, instruction, workspaceBefore, broadcaster, }) => new Promise((resolve, reject) => {
170
+ const runConfig = JSON.parse(loop.owner_config_json);
171
+ if (!runConfig) {
172
+ reject(new Error('Snapshotted Build owner configuration is unavailable'));
173
+ return;
174
+ }
175
+ const historical = resolveHistoricalProviderSession(loop.causal_execution_run_id);
176
+ if (historical.agentRun.id !== loop.causal_agent_run_id) {
177
+ reject(new Error('Causal AgentRun ownership changed'));
178
+ return;
179
+ }
180
+ let launchOutcome = historical.sessionId ? 'continued' : 'fresh';
181
+ const updateChild = (context) => {
182
+ const updated = db.prepare(`
183
+ UPDATE check_auto_fix_attempts
184
+ SET child_run_id = ?, launch_outcome = ?, updated_at = CURRENT_TIMESTAMP
185
+ WHERE loop_run_id = ? AND ordinal = ? AND child_run_id IS NULL
186
+ `).run(context.runId, launchOutcome, loop.execution_run_id, ordinal);
187
+ if (updated.changes !== 1) {
188
+ throw new Error('Auto-fix child ownership could not be persisted');
189
+ }
190
+ };
191
+ const orchestration = {
192
+ preserveOwnerRunningOnCompletion: shouldPreserveCheckAutoFixOwnerRunning(owner.type, loop.automation_progression_run_id),
193
+ preserveOwnerOnFailure: true,
194
+ beforeStart: async () => {
195
+ const currentLoop = getLoop(projectId, loop.originating_batch_run_id);
196
+ const currentBatch = getCheckBatchDetails(projectId, currentLoop?.final_batch_run_id ?? loop.originating_batch_run_id);
197
+ const cwd = currentBatch ? getWorkspace(projectId, currentBatch) : null;
198
+ const identity = cwd ? await captureCheckWorkspaceIdentity(cwd) : null;
199
+ if (!currentLoop || currentLoop.cancellation_requested || currentLoop.terminal_reason || !identity || !identitiesMatch(identity, workspaceBefore)) {
200
+ throw new Error('Auto-fix ownership or workspace changed before the agent could start');
201
+ }
202
+ },
203
+ onContinuationFallback: () => withExecutionRunTransaction(transaction => {
204
+ const updated = db.prepare(`
205
+ UPDATE check_auto_fix_attempts SET launch_outcome = 'fresh', updated_at = CURRENT_TIMESTAMP
206
+ WHERE loop_run_id = ? AND ordinal = ? AND launch_outcome = 'continued'
207
+ `).run(loop.execution_run_id, ordinal);
208
+ if (updated.changes !== 1) {
209
+ throw new Error('Auto-fix continuation fallback ownership changed');
210
+ }
211
+ transaction.appendLifecycleEvent({
212
+ projectId,
213
+ runId: loop.execution_run_id,
214
+ domainStatus: 'falling_back',
215
+ eventType: 'check_auto_fix_fallback',
216
+ metadata: {
217
+ attempt: ordinal,
218
+ owner_type: owner.type,
219
+ causal_execution_run_id: loop.causal_execution_run_id,
220
+ },
221
+ });
222
+ }, broadcaster),
223
+ onCompletion: async () => {
224
+ db.prepare(`UPDATE check_auto_fix_attempts SET terminal_reason = 'completed', updated_at = CURRENT_TIMESTAMP WHERE loop_run_id = ? AND ordinal = ?`)
225
+ .run(loop.execution_run_id, ordinal);
226
+ resolve('completed');
227
+ },
228
+ onCancellation: () => {
229
+ db.prepare(`UPDATE check_auto_fix_attempts SET terminal_reason = 'cancelled', updated_at = CURRENT_TIMESTAMP WHERE loop_run_id = ? AND ordinal = ?`)
230
+ .run(loop.execution_run_id, ordinal);
231
+ resolve('cancelled');
232
+ },
233
+ onFailure: (_context, message) => {
234
+ db.prepare(`UPDATE check_auto_fix_attempts SET terminal_reason = 'failed', terminal_message = ?, updated_at = CURRENT_TIMESTAMP WHERE loop_run_id = ? AND ordinal = ?`)
235
+ .run(message, loop.execution_run_id, ordinal);
236
+ resolve('failed');
237
+ },
238
+ };
239
+ const schedule = (resumeSessionId) => dispatchAutomaticCheckRepair({
240
+ projectId,
241
+ loopRunId: loop.execution_run_id,
242
+ ownerType: owner.type,
243
+ ownerId: owner.id,
244
+ instruction,
245
+ runConfig,
246
+ resumeSessionId,
247
+ broadcaster,
248
+ orchestration,
249
+ onExecutionCreated: updateChild,
250
+ });
251
+ const scheduling = schedule(historical.sessionId);
252
+ if (!scheduling.ok) {
253
+ db.prepare(`
254
+ UPDATE check_auto_fix_attempts SET launch_outcome = 'rejected', terminal_message = ?, updated_at = CURRENT_TIMESTAMP
255
+ WHERE loop_run_id = ? AND ordinal = ?
256
+ `).run(scheduling.error, loop.execution_run_id, ordinal);
257
+ reject(new Error(scheduling.error));
258
+ }
259
+ });
260
+ const executeLoop = async (projectId, originatingBatch, loop, owner, broadcaster, releaseOwnerQueue) => {
261
+ const selectedDefinitions = JSON.parse(loop.selected_definitions_json);
262
+ const policySnapshot = {
263
+ definitionIds: JSON.parse(loop.auto_fix_definition_ids_json),
264
+ definitions: selectedDefinitions.filter(definition => JSON.parse(loop.auto_fix_definition_ids_json).includes(definition.id)),
265
+ fingerprint: loop.definition_fingerprint,
266
+ };
267
+ const enabledIds = new Set(policySnapshot.definitionIds);
268
+ let currentBatch = originatingBatch;
269
+ let previousSignature = null;
270
+ for (let ordinal = loop.attempt_count + 1; ordinal <= MAX_ATTEMPTS; ordinal += 1) {
271
+ const currentLoop = getLoop(projectId, originatingBatch.execution_run_id);
272
+ if (!currentLoop || currentLoop.cancellation_requested) {
273
+ finishLoop(projectId, loop.execution_run_id, 'user_cancelled', currentBatch.execution_run_id, 'Auto-fix was cancelled', broadcaster);
274
+ return currentBatch;
275
+ }
276
+ if (currentBatch.execution_status === 'cancelled') {
277
+ finishLoop(projectId, loop.execution_run_id, 'user_cancelled', currentBatch.execution_run_id, 'Auto-fix rerun was cancelled', broadcaster);
278
+ return currentBatch;
279
+ }
280
+ if (currentBatch.execution_status === 'interrupted') {
281
+ finishLoop(projectId, loop.execution_run_id, 'interrupted', currentBatch.execution_run_id, 'Auto-fix rerun was interrupted', broadcaster);
282
+ return currentBatch;
283
+ }
284
+ const project = getProjectById(projectId);
285
+ const currentDefinitions = project ? getProjectCheckDefinitions(project) : [];
286
+ const cwd = getWorkspace(projectId, currentBatch);
287
+ const workspaceBefore = cwd ? await captureCheckWorkspaceIdentity(cwd) : null;
288
+ if (!project || !cwd || !workspaceBefore || workspaceBefore.state !== 'available'
289
+ || !ownerStillTargetsBatch(projectId, owner, originatingBatch)
290
+ || !definitionsMatch(selectedDefinitions, currentDefinitions)
291
+ || !doCurrentDefinitionsMatchCheckAutoFixPolicySnapshot(policySnapshot, currentDefinitions)
292
+ || !currentBatch.final_workspace_identity
293
+ || !identitiesMatch(workspaceBefore, currentBatch.final_workspace_identity)) {
294
+ finishLoop(projectId, loop.execution_run_id, 'stale', currentBatch.execution_run_id, 'Check definitions, target, or workspace drifted', broadcaster);
295
+ return currentBatch;
296
+ }
297
+ const attempts = listCheckAttemptDetails(projectId, currentBatch.execution_run_id);
298
+ const failedIds = listFailedDefinitionIds(attempts);
299
+ const enabledFailedIds = failedIds.filter(id => enabledIds.has(id));
300
+ if (enabledFailedIds.length === 0) {
301
+ const reason = classifyCheckAutoFixBatchWithoutEnabledFailures(currentBatch.execution_status, failedIds.length);
302
+ finishLoop(projectId, loop.execution_run_id, reason, currentBatch.execution_run_id, null, broadcaster);
303
+ return currentBatch;
304
+ }
305
+ const evidence = loadCheckRepairEvidence(projectId, currentBatch.execution_run_id, enabledIds);
306
+ if (evidence.length === 0 || new Set(evidence.map(item => item.definitionId)).size !== new Set(enabledFailedIds).size) {
307
+ finishLoop(projectId, loop.execution_run_id, 'non_auto_fixable_only', currentBatch.execution_run_id, 'Enabled failures have no retained repairable command evidence', broadcaster);
308
+ return currentBatch;
309
+ }
310
+ const signature = getCheckRepairFailureSignature(evidence);
311
+ if (previousSignature === signature) {
312
+ finishLoop(projectId, loop.execution_run_id, 'unchanged_failures', currentBatch.execution_run_id, 'Enabled failures did not materially change', broadcaster);
313
+ return currentBatch;
314
+ }
315
+ const attemptClaimed = db.transaction(() => {
316
+ const claimed = db.prepare(`
317
+ UPDATE check_auto_fix_loops SET attempt_count = ?, updated_at = CURRENT_TIMESTAMP
318
+ WHERE execution_run_id = ? AND attempt_count = ?
319
+ AND cancellation_requested = 0 AND terminal_reason IS NULL
320
+ `).run(ordinal, loop.execution_run_id, ordinal - 1);
321
+ if (claimed.changes !== 1) {
322
+ return false;
323
+ }
324
+ db.prepare(`
325
+ INSERT INTO check_auto_fix_attempts (
326
+ loop_run_id, ordinal, source_batch_run_id, enabled_failure_signature, workspace_before_json
327
+ ) VALUES (?, ?, ?, ?, ?)
328
+ `).run(loop.execution_run_id, ordinal, currentBatch.execution_run_id, signature, JSON.stringify(workspaceBefore));
329
+ return true;
330
+ })();
331
+ if (!attemptClaimed) {
332
+ finishLoop(projectId, loop.execution_run_id, 'user_cancelled', currentBatch.execution_run_id, 'Auto-fix was cancelled', broadcaster);
333
+ return currentBatch;
334
+ }
335
+ appendLoopEvent(projectId, loop.execution_run_id, 'dispatching', 'check_auto_fix_attempt_started', {
336
+ attempt: ordinal,
337
+ owner_type: owner.type,
338
+ source_batch_run_id: currentBatch.execution_run_id,
339
+ }, broadcaster);
340
+ releaseOwnerQueue?.();
341
+ let agentOutcome;
342
+ try {
343
+ agentOutcome = await dispatchAttempt({
344
+ projectId,
345
+ loop,
346
+ ordinal,
347
+ owner,
348
+ instruction: formatCheckRepairPrompt(owner.description, evidence),
349
+ workspaceBefore,
350
+ broadcaster,
351
+ });
352
+ }
353
+ catch (error) {
354
+ const message = error instanceof Error ? error.message : String(error);
355
+ finishLoop(projectId, loop.execution_run_id, 'agent_failure', currentBatch.execution_run_id, message, broadcaster);
356
+ return currentBatch;
357
+ }
358
+ if (agentOutcome !== 'completed') {
359
+ const reason = agentOutcome === 'cancelled' ? 'user_cancelled' : 'agent_failure';
360
+ finishLoop(projectId, loop.execution_run_id, reason, currentBatch.execution_run_id, `Repair agent ${agentOutcome}`, broadcaster);
361
+ return currentBatch;
362
+ }
363
+ const afterAgentLoop = getLoop(projectId, originatingBatch.execution_run_id);
364
+ if (!afterAgentLoop || afterAgentLoop.cancellation_requested || afterAgentLoop.terminal_reason) {
365
+ finishLoop(projectId, loop.execution_run_id, 'user_cancelled', currentBatch.execution_run_id, 'Auto-fix was cancelled', broadcaster);
366
+ return currentBatch;
367
+ }
368
+ const workspaceAfter = await captureCheckWorkspaceIdentity(cwd);
369
+ db.prepare(`
370
+ UPDATE check_auto_fix_attempts
371
+ SET workspace_after_json = ?, updated_at = CURRENT_TIMESTAMP
372
+ WHERE loop_run_id = ? AND ordinal = ?
373
+ `).run(JSON.stringify(workspaceAfter), loop.execution_run_id, ordinal);
374
+ if (workspaceAfter.state === 'unavailable') {
375
+ finishLoop(projectId, loop.execution_run_id, 'stale', currentBatch.execution_run_id, `Repair workspace became unavailable: ${workspaceAfter.message}`, broadcaster);
376
+ return currentBatch;
377
+ }
378
+ if (!identitiesMatch(workspaceAfter, workspaceBefore) && workspaceAfter.state === 'available') {
379
+ const projectAfterAgent = getProjectById(projectId);
380
+ const definitionsAfterAgent = projectAfterAgent ? getProjectCheckDefinitions(projectAfterAgent) : [];
381
+ if (!projectAfterAgent || !ownerStillTargetsBatch(projectId, owner, originatingBatch)
382
+ || !definitionsMatch(selectedDefinitions, definitionsAfterAgent)
383
+ || !doCurrentDefinitionsMatchCheckAutoFixPolicySnapshot(policySnapshot, definitionsAfterAgent)) {
384
+ finishLoop(projectId, loop.execution_run_id, 'stale', currentBatch.execution_run_id, 'Check definitions or target drifted while the repair agent was running', broadcaster);
385
+ return currentBatch;
386
+ }
387
+ const sourceAttempts = listCheckAttemptDetails(projectId, currentBatch.execution_run_id);
388
+ const rerunAttemptRunIds = Object.fromEntries(sourceAttempts.map(attempt => [attempt.definition_id, attempt.execution_run_id]));
389
+ let rerun;
390
+ try {
391
+ const beforeRerun = getLoop(projectId, originatingBatch.execution_run_id);
392
+ if (!beforeRerun || beforeRerun.cancellation_requested || beforeRerun.terminal_reason) {
393
+ finishLoop(projectId, loop.execution_run_id, 'user_cancelled', currentBatch.execution_run_id, 'Auto-fix was cancelled', broadcaster);
394
+ return currentBatch;
395
+ }
396
+ rerun = await startCheckBatch({
397
+ projectId,
398
+ cwd,
399
+ targetKind: originatingBatch.target_kind,
400
+ targetBundleId: originatingBatch.target_bundle_id,
401
+ targetLabel: originatingBatch.target_label,
402
+ selectedDefinitions,
403
+ availableDefinitions: definitionsAfterAgent,
404
+ sourceReference: { kind: owner.type, id: owner.id },
405
+ rerunOfBatchRunId: currentBatch.execution_run_id,
406
+ rerunAttemptRunIds,
407
+ autoFixParentRunId: loop.execution_run_id,
408
+ autoFixOriginBatchRunId: originatingBatch.execution_run_id,
409
+ automationBoundaryKind: originatingBatch.automation_boundary_purpose,
410
+ onBatchCreated: batchRunId => {
411
+ db.prepare(`
412
+ UPDATE check_auto_fix_attempts SET rerun_batch_run_id = ?, updated_at = CURRENT_TIMESTAMP
413
+ WHERE loop_run_id = ? AND ordinal = ? AND rerun_batch_run_id IS NULL
414
+ `).run(batchRunId, loop.execution_run_id, ordinal);
415
+ },
416
+ }, broadcaster);
417
+ }
418
+ catch (error) {
419
+ const message = error instanceof Error ? error.message : String(error);
420
+ finishLoop(projectId, loop.execution_run_id, 'stale', currentBatch.execution_run_id, `Full-batch rerun could not start: ${message}`, broadcaster);
421
+ return currentBatch;
422
+ }
423
+ appendLoopEvent(projectId, loop.execution_run_id, 'rerunning', 'check_auto_fix_rerun_started', {
424
+ attempt: ordinal,
425
+ source_batch_run_id: currentBatch.execution_run_id,
426
+ rerun_batch_run_id: rerun.execution_run_id,
427
+ }, broadcaster);
428
+ currentBatch = await waitForCheckBatch(projectId, rerun.execution_run_id);
429
+ db.prepare(`UPDATE check_auto_fix_loops SET final_batch_run_id = ?, updated_at = CURRENT_TIMESTAMP WHERE execution_run_id = ? AND terminal_reason IS NULL`)
430
+ .run(currentBatch.execution_run_id, loop.execution_run_id);
431
+ previousSignature = signature;
432
+ if (currentBatch.execution_status === 'completed') {
433
+ finishLoop(projectId, loop.execution_run_id, 'passed', currentBatch.execution_run_id, null, broadcaster);
434
+ return currentBatch;
435
+ }
436
+ continue;
437
+ }
438
+ finishLoop(projectId, loop.execution_run_id, 'no_workspace_changes', currentBatch.execution_run_id, 'Repair agent completed without workspace changes', broadcaster);
439
+ return currentBatch;
440
+ }
441
+ finishLoop(projectId, loop.execution_run_id, 'exhausted', currentBatch.execution_run_id, 'Auto-fix reached the three-attempt limit', broadcaster);
442
+ return currentBatch;
443
+ };
444
+ export const runCheckAutoFix = async ({ projectId, batchRunId, broadcaster, releaseOwnerQueue, }) => {
445
+ const existingPromise = activeLoops.get(batchRunId);
446
+ if (existingPromise) {
447
+ return existingPromise;
448
+ }
449
+ const batch = getCheckBatchDetails(projectId, batchRunId);
450
+ const project = getProjectById(projectId);
451
+ if (!batch || !project || batch.execution_status !== 'failed' || batch.purpose === 'auto_fix') {
452
+ if (!batch) {
453
+ throw new Error('Auto-fix source batch is unavailable');
454
+ }
455
+ return batch;
456
+ }
457
+ const policy = createCheckAutoFixPolicySnapshot(project, batch.selected_definition_snapshots);
458
+ const lineage = resolveCausalLineage(projectId, batch);
459
+ if (policy.status === 'invalid' || policy.snapshot.definitionIds.length === 0 || !lineage) {
460
+ return batch;
461
+ }
462
+ const failedIds = new Set(listFailedDefinitionIds(listCheckAttemptDetails(projectId, batchRunId)));
463
+ if (!policy.snapshot.definitionIds.some(id => failedIds.has(id))) {
464
+ return batch;
465
+ }
466
+ const existing = getLoop(projectId, batchRunId);
467
+ if (existing) {
468
+ return getCheckBatchDetails(projectId, existing.final_batch_run_id ?? batchRunId) ?? batch;
469
+ }
470
+ if (!batch.final_workspace_identity || batch.final_workspace_identity.state !== 'available') {
471
+ return batch;
472
+ }
473
+ const runConfig = lineage.config;
474
+ const loop = withExecutionRunTransaction(transaction => {
475
+ const activeBatch = findActiveCheckBatchForTarget(projectId, batch.target_kind, batch.target_bundle_id);
476
+ if (activeBatch) {
477
+ throw new Error(`Check batch ${activeBatch} is already active for this target`);
478
+ }
479
+ const run = transaction.createExecutionRun({
480
+ projectId,
481
+ kind: 'check_auto_fix',
482
+ initiatedBy: 'automation',
483
+ parentRunId: lineage.progressionRunId ?? batch.execution_run_id,
484
+ sourceReference: { kind: lineage.owner.type, id: lineage.owner.id },
485
+ links: batch.target_bundle_id
486
+ ? [{ entityType: 'bundle', entityId: batch.target_bundle_id, relationship: 'context' }]
487
+ : [],
488
+ domainStatus: 'running',
489
+ eventType: 'check_auto_fix_created',
490
+ });
491
+ transaction.transitionExecutionRun({
492
+ projectId,
493
+ runId: run.id,
494
+ status: 'running',
495
+ domainStatus: 'running',
496
+ eventType: 'check_auto_fix_started',
497
+ });
498
+ db.prepare(`
499
+ INSERT INTO check_auto_fix_loops (
500
+ execution_run_id, project_id, originating_batch_run_id, target_kind, target_bundle_id,
501
+ owner_type, owner_id, causal_execution_run_id, causal_agent_run_id,
502
+ automation_progression_run_id, automation_boundary_purpose, selected_definitions_json,
503
+ auto_fix_definition_ids_json, definition_fingerprint, owner_config_json,
504
+ initial_workspace_identity_json, final_batch_run_id
505
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
506
+ `).run(run.id, projectId, batch.execution_run_id, batch.target_kind, batch.target_bundle_id, lineage.owner.type, lineage.owner.id, lineage.causal.id, lineage.agent.id, lineage.progressionRunId, batch.automation_boundary_purpose, JSON.stringify(batch.selected_definition_snapshots), JSON.stringify(policy.snapshot.definitionIds), getCheckAutoFixPolicyFingerprint(policy.snapshot.definitions), JSON.stringify(runConfig), JSON.stringify(batch.final_workspace_identity), batch.execution_run_id);
507
+ return getLoop(projectId, batchRunId);
508
+ }, broadcaster);
509
+ const promise = executeLoop(projectId, batch, loop, lineage.owner, broadcaster, releaseOwnerQueue)
510
+ .finally(() => activeLoops.delete(batchRunId));
511
+ activeLoops.set(batchRunId, promise);
512
+ return promise;
513
+ };
514
+ export const requestCheckAutoFixCancellation = (projectId, loopRunId) => {
515
+ const result = db.prepare(`
516
+ UPDATE check_auto_fix_loops SET cancellation_requested = 1, updated_at = CURRENT_TIMESTAMP
517
+ WHERE execution_run_id = ? AND terminal_reason IS NULL
518
+ AND execution_run_id IN (SELECT id FROM execution_runs WHERE project_id = ?)
519
+ `).run(loopRunId, projectId);
520
+ return result.changes === 1;
521
+ };
522
+ export const stopCheckAutoFix = async (projectId, loopRunId, broadcaster) => {
523
+ const details = getCheckAutoFixDetails(projectId, loopRunId);
524
+ if (!details) {
525
+ throw new Error('Check repair not found');
526
+ }
527
+ if (details.terminal_reason) {
528
+ return details;
529
+ }
530
+ requestCheckAutoFixCancellation(projectId, loopRunId);
531
+ appendLoopEvent(projectId, loopRunId, 'stopping', 'check_auto_fix_stop_requested', {
532
+ attempt: details.attempt_count,
533
+ owner_type: details.owner_type,
534
+ }, broadcaster);
535
+ const latestDetails = getCheckAutoFixDetails(projectId, loopRunId) ?? details;
536
+ const attempt = latestDetails.attempts.at(-1);
537
+ let finalBatchRunId = latestDetails.final_batch_run_id;
538
+ if (attempt?.rerun_batch_run_id) {
539
+ finalBatchRunId = attempt.rerun_batch_run_id;
540
+ const rerun = getCheckBatchDetails(projectId, attempt.rerun_batch_run_id);
541
+ if (rerun && !terminalStatuses.has(rerun.execution_status)) {
542
+ await stopCheckBatch(projectId, rerun.execution_run_id, broadcaster);
543
+ }
544
+ }
545
+ if (attempt?.child_run_id) {
546
+ revokeAgentSpawnPermit(attempt.child_run_id);
547
+ const child = getExecutionRun(projectId, attempt.child_run_id);
548
+ if (child && !terminalStatuses.has(child.status)) {
549
+ if (latestDetails.owner_type === 'ticket') {
550
+ await stopBuildAgent(latestDetails.owner_id);
551
+ }
552
+ else {
553
+ await stopChatAgent(latestDetails.owner_id);
554
+ }
555
+ }
556
+ }
557
+ finishLoop(projectId, loopRunId, 'user_cancelled', finalBatchRunId, 'Auto-fix was cancelled by the user', broadcaster);
558
+ return getCheckAutoFixDetails(projectId, loopRunId);
559
+ };
560
+ export const reconcileCheckAutoFixLoops = () => {
561
+ if (!db.prepare(`SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = 'check_auto_fix_loops'`).get()) {
562
+ return { interrupted: 0 };
563
+ }
564
+ const rows = db.prepare(`
565
+ SELECT loop.execution_run_id,
566
+ COALESCE((
567
+ SELECT attempt.rerun_batch_run_id FROM check_auto_fix_attempts attempt
568
+ WHERE attempt.loop_run_id = loop.execution_run_id AND attempt.rerun_batch_run_id IS NOT NULL
569
+ ORDER BY attempt.ordinal DESC LIMIT 1
570
+ ), loop.final_batch_run_id) AS final_batch_run_id,
571
+ run.project_id
572
+ FROM check_auto_fix_loops loop JOIN execution_runs run ON run.id = loop.execution_run_id
573
+ WHERE loop.terminal_reason IS NULL
574
+ `).all();
575
+ for (const row of rows) {
576
+ withExecutionRunTransaction(transaction => {
577
+ db.prepare(`
578
+ UPDATE check_auto_fix_attempts
579
+ SET terminal_reason = 'interrupted', terminal_message = 'Auto-fix attempt was interrupted by server restart',
580
+ updated_at = CURRENT_TIMESTAMP
581
+ WHERE loop_run_id = ? AND terminal_reason IS NULL
582
+ `).run(row.execution_run_id);
583
+ db.prepare(`
584
+ UPDATE check_auto_fix_loops SET terminal_reason = 'interrupted',
585
+ terminal_message = 'Auto-fix was interrupted by server restart',
586
+ final_batch_run_id = ?, updated_at = CURRENT_TIMESTAMP
587
+ WHERE execution_run_id = ? AND terminal_reason IS NULL
588
+ `).run(row.final_batch_run_id, row.execution_run_id);
589
+ const run = getExecutionRun(row.project_id, row.execution_run_id);
590
+ if (run && !terminalStatuses.has(run.status)) {
591
+ transaction.transitionExecutionRun({
592
+ projectId: row.project_id,
593
+ runId: row.execution_run_id,
594
+ status: 'interrupted',
595
+ domainStatus: 'interrupted',
596
+ failure: { code: 'server_restarted', message: 'Auto-fix was interrupted by server restart' },
597
+ eventType: 'check_auto_fix_interrupted',
598
+ });
599
+ }
600
+ });
601
+ }
602
+ return { interrupted: rows.length };
603
+ };
604
+ //# sourceMappingURL=checkAutoFix.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkAutoFix.js","sourceRoot":"","sources":["../../../server/lib/checkAutoFix.ts"],"names":[],"mappings":"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"}