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