@straiffi/archon 1.8.7 → 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.
- package/dist/client/assets/{ActivityView-D4Qh96zr.js → ActivityView-gBeoYQdD.js} +1 -1
- package/dist/client/assets/{GitHubActionsDialog-Bg03OmVv.js → GitHubActionsDialog-fc1Vwafm.js} +1 -1
- package/dist/client/assets/RepositoryGraphDialog-DCOjwUR3.js +1 -0
- package/dist/client/assets/VerificationDialog-CIObj1Rw.js +4 -0
- package/dist/client/assets/{architectureDiagram-3BPJPVTR-2lxabjSl.js → architectureDiagram-3BPJPVTR-B1tJZe1S.js} +1 -1
- package/dist/client/assets/{blockDiagram-GPEHLZMM-C80HvJmb.js → blockDiagram-GPEHLZMM-D_90AQ2Z.js} +1 -1
- package/dist/client/assets/{c4Diagram-AAUBKEIU-BM3k_lKz.js → c4Diagram-AAUBKEIU-DSyJfqly.js} +1 -1
- package/dist/client/assets/channel-DFw1f2Rh.js +1 -0
- package/dist/client/assets/{chunk-2J33WTMH-BTk3lX07.js → chunk-2J33WTMH-B9RStQGj.js} +1 -1
- package/dist/client/assets/{chunk-3OPIFGDE-DAxdBZ_4.js → chunk-3OPIFGDE-CHKuJYq0.js} +1 -1
- package/dist/client/assets/{chunk-5ZQYHXKU-BYm9s62a.js → chunk-5ZQYHXKU-Cznw7LTJ.js} +1 -1
- package/dist/client/assets/{chunk-727SXJPM-iVUM8xuV.js → chunk-727SXJPM-ix6OeZwJ.js} +1 -1
- package/dist/client/assets/{chunk-AQP2D5EJ-DVM7riMJ.js → chunk-AQP2D5EJ-DrPJIcE7.js} +1 -1
- package/dist/client/assets/{chunk-CSCIHK7Q-_D1FzP9B.js → chunk-CSCIHK7Q-BSEHTnBR.js} +1 -1
- package/dist/client/assets/{chunk-KSCS5N6A-D3XouAHf.js → chunk-KSCS5N6A-MdDdaLn8.js} +1 -1
- package/dist/client/assets/{chunk-L5ZTLDWV-B7NYWgT4.js → chunk-L5ZTLDWV-D_5xeDG1.js} +1 -1
- package/dist/client/assets/{chunk-LZXEDZCA-Dgkkbb6A.js → chunk-LZXEDZCA-Bz8_Fyt2.js} +2 -2
- package/dist/client/assets/{chunk-ND2GUHAM-CzO1oVCi.js → chunk-ND2GUHAM-DCINKlk8.js} +1 -1
- package/dist/client/assets/{chunk-NZK2D7GU-re0VVZne.js → chunk-NZK2D7GU-rGPgryKx.js} +1 -1
- package/dist/client/assets/{chunk-O5CBEL6O-BwsS59iy.js → chunk-O5CBEL6O-BHB8UIYA.js} +1 -1
- package/dist/client/assets/{chunk-WU5MYG2G-CLyh-xCA.js → chunk-WU5MYG2G-Bz5BJWjF.js} +1 -1
- package/dist/client/assets/classDiagram-4FO5ZUOK-Dt0kmMzQ.js +1 -0
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-BuxhA4Gw.js +1 -0
- package/dist/client/assets/{dagre-BM42HDAG-x71fYlqQ.js → dagre-BM42HDAG-B4TXLkOG.js} +1 -1
- package/dist/client/assets/{diagram-2AECGRRQ-CMdwzuYj.js → diagram-2AECGRRQ-CxMup1wq.js} +1 -1
- package/dist/client/assets/{diagram-5GNKFQAL-B3l6I4qJ.js → diagram-5GNKFQAL-CTfP_wnS.js} +1 -1
- package/dist/client/assets/{diagram-KO2AKTUF-BNhypLBW.js → diagram-KO2AKTUF-31NKNt4r.js} +1 -1
- package/dist/client/assets/{diagram-LMA3HP47-CmrhbiDt.js → diagram-LMA3HP47-Cxo7yvjc.js} +1 -1
- package/dist/client/assets/{diagram-OG6HWLK6-CRobDMLl.js → diagram-OG6HWLK6-ChgSAMLv.js} +1 -1
- package/dist/client/assets/{erDiagram-TEJ5UH35-CqO7K0TS.js → erDiagram-TEJ5UH35-u6msywL_.js} +1 -1
- package/dist/client/assets/{flowDiagram-I6XJVG4X-CuLTJZU0.js → flowDiagram-I6XJVG4X-CimeXkDN.js} +1 -1
- package/dist/client/assets/{ganttDiagram-6RSMTGT7-Bm7v1eRG.js → ganttDiagram-6RSMTGT7-DOu5sDUI.js} +1 -1
- package/dist/client/assets/{gitGraphDiagram-PVQCEYII-CNHZr-5i.js → gitGraphDiagram-PVQCEYII-zIToibUf.js} +1 -1
- package/dist/client/assets/index-C-VHd0Pr.js +274 -0
- package/dist/client/assets/index-D3xlEyeM.css +2 -0
- package/dist/client/assets/{infoDiagram-5YYISTIA-z27pUr2X.js → infoDiagram-5YYISTIA-CAtWGGJI.js} +1 -1
- package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-CDocZ0jf.js → ishikawaDiagram-YF4QCWOH-7N-C7DEt.js} +1 -1
- package/dist/client/assets/{journeyDiagram-JHISSGLW-CgP31lsU.js → journeyDiagram-JHISSGLW-D7VUypFG.js} +1 -1
- package/dist/client/assets/{kanban-definition-UN3LZRKU-DxTm1_fc.js → kanban-definition-UN3LZRKU-AmbDmzSD.js} +1 -1
- package/dist/client/assets/{line-hrZ7m44_.js → line-qf4UZ8vh.js} +1 -1
- package/dist/client/assets/{mermaid-parser.core-BThJAIK-.js → mermaid-parser.core-BssCd1kF.js} +1 -1
- package/dist/client/assets/{mermaid.core-CfVyP_kK.js → mermaid.core-DzeMqg9Y.js} +3 -3
- package/dist/client/assets/{mindmap-definition-RKZ34NQL-CuISnLgW.js → mindmap-definition-RKZ34NQL-dEnNQcDm.js} +1 -1
- package/dist/client/assets/{pieDiagram-4H26LBE5-DnWAdd44.js → pieDiagram-4H26LBE5-VjMue0a-.js} +1 -1
- package/dist/client/assets/{quadrantDiagram-W4KKPZXB-Cb-RVl5A.js → quadrantDiagram-W4KKPZXB-DQFdm-0f.js} +1 -1
- package/dist/client/assets/{requirementDiagram-4Y6WPE33-DrXg_gCS.js → requirementDiagram-4Y6WPE33-CHIaXlsy.js} +1 -1
- package/dist/client/assets/{sankeyDiagram-5OEKKPKP-DzZjp_ZP.js → sankeyDiagram-5OEKKPKP-D-kzGaKb.js} +1 -1
- package/dist/client/assets/{sequenceDiagram-3UESZ5HK-CQJ3PhQD.js → sequenceDiagram-3UESZ5HK-CiDmlD8k.js} +1 -1
- package/dist/client/assets/{stateDiagram-AJRCARHV-B16j9pg1.js → stateDiagram-AJRCARHV-BKlnnFdT.js} +1 -1
- package/dist/client/assets/stateDiagram-v2-BHNVJYJU-DhJxc4em.js +1 -0
- package/dist/client/assets/{timeline-definition-PNZ67QCA-bUG3mZQt.js → timeline-definition-PNZ67QCA-D-BK07Un.js} +1 -1
- package/dist/client/assets/{vennDiagram-CIIHVFJN-DALCJcZD.js → vennDiagram-CIIHVFJN-CB9_GqSx.js} +1 -1
- package/dist/client/assets/{wardleyDiagram-YWT4CUSO-DPQd3l9A.js → wardleyDiagram-YWT4CUSO-BEuNfyLT.js} +1 -1
- package/dist/client/assets/{xychartDiagram-2RQKCTM6-BIv1FqXG.js → xychartDiagram-2RQKCTM6-CSS5WMrZ.js} +1 -1
- package/dist/client/index.html +2 -2
- package/dist/server/db.js +481 -27
- package/dist/server/db.js.map +1 -1
- package/dist/server/index.js +113 -54
- package/dist/server/index.js.map +1 -1
- package/dist/server/lib/activeAutomationChild.js +1 -0
- package/dist/server/lib/activeAutomationChild.js.map +1 -1
- package/dist/server/lib/agent.js +127 -15
- package/dist/server/lib/agent.js.map +1 -1
- package/dist/server/lib/agentRuns.js +12 -0
- package/dist/server/lib/agentRuns.js.map +1 -1
- package/dist/server/lib/agentSpawnPermits.js +37 -0
- package/dist/server/lib/agentSpawnPermits.js.map +1 -0
- package/dist/server/lib/automationCheckGate.js +9 -1
- package/dist/server/lib/automationCheckGate.js.map +1 -1
- package/dist/server/lib/automationProgression.js +19 -5
- package/dist/server/lib/automationProgression.js.map +1 -1
- package/dist/server/lib/automationReviewGate.js +1 -0
- package/dist/server/lib/automationReviewGate.js.map +1 -1
- package/dist/server/lib/buildCompletionContinuation.js +144 -4
- package/dist/server/lib/buildCompletionContinuation.js.map +1 -1
- package/dist/server/lib/buildSequences.js +13 -1
- package/dist/server/lib/buildSequences.js.map +1 -1
- package/dist/server/lib/bundleActivity.js +19 -0
- package/dist/server/lib/bundleActivity.js.map +1 -1
- package/dist/server/lib/chatOperations.js +81 -2
- package/dist/server/lib/chatOperations.js.map +1 -1
- package/dist/server/lib/checkAutoFix.js +604 -0
- package/dist/server/lib/checkAutoFix.js.map +1 -0
- package/dist/server/lib/checkAutoFixDetails.js +83 -0
- package/dist/server/lib/checkAutoFixDetails.js.map +1 -0
- package/dist/server/lib/checkAutoFixPolicy.js +59 -0
- package/dist/server/lib/checkAutoFixPolicy.js.map +1 -0
- package/dist/server/lib/checkRepair.js +149 -54
- package/dist/server/lib/checkRepair.js.map +1 -1
- package/dist/server/lib/checkRepairDispatch.js +91 -0
- package/dist/server/lib/checkRepairDispatch.js.map +1 -0
- package/dist/server/lib/checkRepairEvidence.js +84 -0
- package/dist/server/lib/checkRepairEvidence.js.map +1 -0
- package/dist/server/lib/checkRepairParent.js +21 -0
- package/dist/server/lib/checkRepairParent.js.map +1 -0
- package/dist/server/lib/checkRepairReconciliation.js +14 -5
- package/dist/server/lib/checkRepairReconciliation.js.map +1 -1
- package/dist/server/lib/checkRunner.js +27 -8
- package/dist/server/lib/checkRunner.js.map +1 -1
- package/dist/server/lib/checkRuns.js +63 -4
- package/dist/server/lib/checkRuns.js.map +1 -1
- package/dist/server/lib/executionReconciliation.js +387 -8
- package/dist/server/lib/executionReconciliation.js.map +1 -1
- package/dist/server/lib/executionRuns.js +24 -1
- package/dist/server/lib/executionRuns.js.map +1 -1
- package/dist/server/lib/git.js +302 -11
- package/dist/server/lib/git.js.map +1 -1
- package/dist/server/lib/integrations/github.js +138 -65
- package/dist/server/lib/integrations/github.js.map +1 -1
- package/dist/server/lib/integrations/importedIssueImages.js +10 -15
- package/dist/server/lib/integrations/importedIssueImages.js.map +1 -1
- package/dist/server/lib/postBuildCheckRuns.js +200 -5
- package/dist/server/lib/postBuildCheckRuns.js.map +1 -1
- package/dist/server/lib/postBuildChecks.js +83 -13
- package/dist/server/lib/postBuildChecks.js.map +1 -1
- package/dist/server/lib/projects.js +25 -1
- package/dist/server/lib/projects.js.map +1 -1
- package/dist/server/lib/queue.js +9 -3
- package/dist/server/lib/queue.js.map +1 -1
- package/dist/server/lib/repositoryGraphQueries.js +5 -3
- package/dist/server/lib/repositoryGraphQueries.js.map +1 -1
- package/dist/server/lib/repositoryGraphScan.js +13 -2
- package/dist/server/lib/repositoryGraphScan.js.map +1 -1
- package/dist/server/lib/repositoryGraphStore.js +61 -1
- package/dist/server/lib/repositoryGraphStore.js.map +1 -1
- package/dist/server/lib/specArtifact.js +10 -1
- package/dist/server/lib/specArtifact.js.map +1 -1
- package/dist/server/lib/specDraft.js +10 -2
- package/dist/server/lib/specDraft.js.map +1 -1
- package/dist/server/lib/specExport.js +70 -6
- package/dist/server/lib/specExport.js.map +1 -1
- package/dist/server/lib/specFormatting.js +3 -2
- package/dist/server/lib/specFormatting.js.map +1 -1
- package/dist/server/lib/specRepositoryEvidenceFormatting.js +75 -0
- package/dist/server/lib/specRepositoryEvidenceFormatting.js.map +1 -0
- package/dist/server/lib/specRepositoryImpact.js +447 -0
- package/dist/server/lib/specRepositoryImpact.js.map +1 -0
- package/dist/server/lib/specRepositoryImpactLimits.js +6 -0
- package/dist/server/lib/specRepositoryImpactLimits.js.map +1 -0
- package/dist/server/lib/specReviewContext.js +15 -5
- package/dist/server/lib/specReviewContext.js.map +1 -1
- package/dist/server/lib/specReviewValidation.js +1 -1
- package/dist/server/lib/specReviewValidation.js.map +1 -1
- package/dist/server/lib/specSections.js +28 -3
- package/dist/server/lib/specSections.js.map +1 -1
- package/dist/server/lib/specSnapshotEvidence.js +162 -0
- package/dist/server/lib/specSnapshotEvidence.js.map +1 -0
- package/dist/server/lib/specSnapshotEvidenceSerialization.js +202 -0
- package/dist/server/lib/specSnapshotEvidenceSerialization.js.map +1 -0
- package/dist/server/lib/specs.js +31 -5
- package/dist/server/lib/specs.js.map +1 -1
- package/dist/server/lib/ticketAutomationCommit.js +3 -1
- package/dist/server/lib/ticketAutomationCommit.js.map +1 -1
- package/dist/server/lib/ticketFollowUpOperations.js +16 -12
- package/dist/server/lib/ticketFollowUpOperations.js.map +1 -1
- package/dist/server/lib/ticketRunOperations.js +13 -1
- package/dist/server/lib/ticketRunOperations.js.map +1 -1
- package/dist/server/lib/ticketWorkflowOperations.js +5 -2
- package/dist/server/lib/ticketWorkflowOperations.js.map +1 -1
- package/dist/server/lib/types.js +1 -0
- package/dist/server/lib/types.js.map +1 -1
- package/dist/server/workers/build.js +46 -148
- package/dist/server/workers/build.js.map +1 -1
- package/dist/server/workers/chat.js +141 -31
- package/dist/server/workers/chat.js.map +1 -1
- package/dist/server/workers/followUp.js +210 -48
- package/dist/server/workers/followUp.js.map +1 -1
- package/dist/server/workers/specReview.js +17 -4
- package/dist/server/workers/specReview.js.map +1 -1
- package/dist/server/workers/specSession.js +127 -22
- package/dist/server/workers/specSession.js.map +1 -1
- package/package.json +1 -1
- package/dist/client/assets/RepositoryGraphDialog-CS_hOqPw.js +0 -1
- package/dist/client/assets/VerificationDialog-BYH-Ek8n.js +0 -4
- package/dist/client/assets/channel-HjENOCZ0.js +0 -1
- package/dist/client/assets/classDiagram-4FO5ZUOK-DnhdaVrK.js +0 -1
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-C-BjeSGJ.js +0 -1
- package/dist/client/assets/index-Bs5SQZhz.css +0 -2
- package/dist/client/assets/index-LGNsdNYM.js +0 -274
- package/dist/client/assets/stateDiagram-v2-BHNVJYJU-vNiFfHwm.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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"}
|