@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.
Files changed (166) hide show
  1. package/dist/client/assets/ActivityView-DTEenQas.js +1 -0
  2. package/dist/client/assets/GitHubActionsDialog-BKWHonUS.js +1 -0
  3. package/dist/client/assets/TestsDialog-cBaoffCs.js +4 -0
  4. package/dist/client/assets/{architectureDiagram-3BPJPVTR-CJgwCv5O.js → architectureDiagram-3BPJPVTR-BzzGotac.js} +1 -1
  5. package/dist/client/assets/{blockDiagram-GPEHLZMM--xjes8FA.js → blockDiagram-GPEHLZMM-DIcqLHKg.js} +1 -1
  6. package/dist/client/assets/{c4Diagram-AAUBKEIU-DHnp82NG.js → c4Diagram-AAUBKEIU-Hc1Sqmhs.js} +1 -1
  7. package/dist/client/assets/channel-Cym17waa.js +1 -0
  8. package/dist/client/assets/{chunk-2J33WTMH-DAOyJCKy.js → chunk-2J33WTMH-CWSwjsgk.js} +1 -1
  9. package/dist/client/assets/{chunk-3OPIFGDE-C9YI_tk4.js → chunk-3OPIFGDE-BnX3DljN.js} +1 -1
  10. package/dist/client/assets/{chunk-5ZQYHXKU-BW9khkin.js → chunk-5ZQYHXKU-EyyJlI-d.js} +1 -1
  11. package/dist/client/assets/{chunk-727SXJPM-DL4t5Hpi.js → chunk-727SXJPM-Ci6CfxWj.js} +1 -1
  12. package/dist/client/assets/{chunk-AQP2D5EJ-C4VMKa_O.js → chunk-AQP2D5EJ-RKZNsJTm.js} +1 -1
  13. package/dist/client/assets/{chunk-CSCIHK7Q-DHP7zrZK.js → chunk-CSCIHK7Q-DBf0Euoj.js} +1 -1
  14. package/dist/client/assets/{chunk-KSCS5N6A-CqZWek3t.js → chunk-KSCS5N6A-BmLQI_2S.js} +1 -1
  15. package/dist/client/assets/{chunk-L5ZTLDWV-D3q55pCI.js → chunk-L5ZTLDWV-DKwVAb8G.js} +1 -1
  16. package/dist/client/assets/{chunk-LZXEDZCA-UDY_Lo6v.js → chunk-LZXEDZCA-axotKkbz.js} +2 -2
  17. package/dist/client/assets/{chunk-ND2GUHAM-ZCiOxkYV.js → chunk-ND2GUHAM-BBlJ4nXC.js} +1 -1
  18. package/dist/client/assets/{chunk-NZK2D7GU-CuryoBtd.js → chunk-NZK2D7GU-BKJGoZZt.js} +1 -1
  19. package/dist/client/assets/{chunk-O5CBEL6O-PnPsz2TB.js → chunk-O5CBEL6O-C-Ghigo1.js} +1 -1
  20. package/dist/client/assets/{chunk-WU5MYG2G-BzOopX-U.js → chunk-WU5MYG2G-CCzVWYcd.js} +1 -1
  21. package/dist/client/assets/classDiagram-4FO5ZUOK-BcigvvIC.js +1 -0
  22. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-3AdSuE0N.js +1 -0
  23. package/dist/client/assets/{dagre-BM42HDAG-5LBwQ83I.js → dagre-BM42HDAG-rwIdPcjI.js} +1 -1
  24. package/dist/client/assets/{diagram-2AECGRRQ-_4pckiGR.js → diagram-2AECGRRQ-DJWxOQsg.js} +1 -1
  25. package/dist/client/assets/{diagram-5GNKFQAL-CqElv5rJ.js → diagram-5GNKFQAL-C-mQeFtd.js} +1 -1
  26. package/dist/client/assets/{diagram-KO2AKTUF-DKv4zS4F.js → diagram-KO2AKTUF-BAu6u4sR.js} +1 -1
  27. package/dist/client/assets/{diagram-LMA3HP47-iLmTH4UP.js → diagram-LMA3HP47-U6CbvBn0.js} +1 -1
  28. package/dist/client/assets/{diagram-OG6HWLK6-DpFYIa0o.js → diagram-OG6HWLK6-DNTwFcs1.js} +1 -1
  29. package/dist/client/assets/{erDiagram-TEJ5UH35-DnfbvbKs.js → erDiagram-TEJ5UH35-DaHX6Xw5.js} +1 -1
  30. package/dist/client/assets/{flowDiagram-I6XJVG4X-C2MN70Qv.js → flowDiagram-I6XJVG4X-B9hKqL2l.js} +1 -1
  31. package/dist/client/assets/{ganttDiagram-6RSMTGT7-yonpliOJ.js → ganttDiagram-6RSMTGT7-BQ1HPHVO.js} +1 -1
  32. package/dist/client/assets/{gitGraphDiagram-PVQCEYII-CaKDWx7y.js → gitGraphDiagram-PVQCEYII-BBRcsmMK.js} +1 -1
  33. package/dist/client/assets/index-CEMaJCPS.js +273 -0
  34. package/dist/client/assets/index-lWftq65U.css +2 -0
  35. package/dist/client/assets/{infoDiagram-5YYISTIA-82-8njnx.js → infoDiagram-5YYISTIA-DUoNiSGC.js} +1 -1
  36. package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-BMiyLWwK.js → ishikawaDiagram-YF4QCWOH-DJN1y2w8.js} +1 -1
  37. package/dist/client/assets/{journeyDiagram-JHISSGLW-C1qBnR37.js → journeyDiagram-JHISSGLW-BxLLMT70.js} +1 -1
  38. package/dist/client/assets/{kanban-definition-UN3LZRKU-zByEuCzn.js → kanban-definition-UN3LZRKU-BdCPistJ.js} +1 -1
  39. package/dist/client/assets/{line-EpLqyzw7.js → line-4mIgXsZd.js} +1 -1
  40. package/dist/client/assets/{mermaid-parser.core-o124REPN.js → mermaid-parser.core-Pu1QGWJ-.js} +1 -1
  41. package/dist/client/assets/{mermaid.core-DgiAn2-k.js → mermaid.core-DnH9DrgZ.js} +3 -3
  42. package/dist/client/assets/{mindmap-definition-RKZ34NQL-UK6V0Bxq.js → mindmap-definition-RKZ34NQL-DqE4ba3C.js} +1 -1
  43. package/dist/client/assets/{pieDiagram-4H26LBE5-B2s9oGFl.js → pieDiagram-4H26LBE5-Crjy9ejf.js} +1 -1
  44. package/dist/client/assets/{quadrantDiagram-W4KKPZXB-d5H7-zcc.js → quadrantDiagram-W4KKPZXB-BUSZ2VB7.js} +1 -1
  45. package/dist/client/assets/{requirementDiagram-4Y6WPE33-DlwN9Vcv.js → requirementDiagram-4Y6WPE33-CBhFKEoV.js} +1 -1
  46. package/dist/client/assets/{sankeyDiagram-5OEKKPKP-9dGyAxu5.js → sankeyDiagram-5OEKKPKP-CgdbY41v.js} +1 -1
  47. package/dist/client/assets/{sequenceDiagram-3UESZ5HK-DKwRjEym.js → sequenceDiagram-3UESZ5HK-hkp_H7AE.js} +1 -1
  48. package/dist/client/assets/{stateDiagram-AJRCARHV-D_6cuqsX.js → stateDiagram-AJRCARHV-C6x45RWp.js} +1 -1
  49. package/dist/client/assets/stateDiagram-v2-BHNVJYJU-DVzPjRPN.js +1 -0
  50. package/dist/client/assets/{timeline-definition-PNZ67QCA-ChqD4j8I.js → timeline-definition-PNZ67QCA-CjnZWttQ.js} +1 -1
  51. package/dist/client/assets/{vennDiagram-CIIHVFJN-CSAZk0IW.js → vennDiagram-CIIHVFJN-DU5ZyYju.js} +1 -1
  52. package/dist/client/assets/{wardleyDiagram-YWT4CUSO-BUE6IF4q.js → wardleyDiagram-YWT4CUSO-CaCEnCB0.js} +1 -1
  53. package/dist/client/assets/{xychartDiagram-2RQKCTM6-MOkC53m_.js → xychartDiagram-2RQKCTM6-Ce3xa37U.js} +1 -1
  54. package/dist/client/index.html +2 -2
  55. package/dist/server/db.js +471 -39
  56. package/dist/server/db.js.map +1 -1
  57. package/dist/server/index.js +1267 -213
  58. package/dist/server/index.js.map +1 -1
  59. package/dist/server/lib/agent.js +281 -76
  60. package/dist/server/lib/agent.js.map +1 -1
  61. package/dist/server/lib/agentRuns.js +205 -38
  62. package/dist/server/lib/agentRuns.js.map +1 -1
  63. package/dist/server/lib/automationProgression.js +464 -0
  64. package/dist/server/lib/automationProgression.js.map +1 -0
  65. package/dist/server/lib/automationReconciliation.js +498 -0
  66. package/dist/server/lib/automationReconciliation.js.map +1 -0
  67. package/dist/server/lib/automationStageDetails.js +232 -0
  68. package/dist/server/lib/automationStageDetails.js.map +1 -0
  69. package/dist/server/lib/buildOpenQuestionOperations.js +223 -0
  70. package/dist/server/lib/buildOpenQuestionOperations.js.map +1 -0
  71. package/dist/server/lib/buildOpenQuestions.js +52 -0
  72. package/dist/server/lib/buildOpenQuestions.js.map +1 -1
  73. package/dist/server/lib/buildSequences.js +130 -46
  74. package/dist/server/lib/buildSequences.js.map +1 -1
  75. package/dist/server/lib/bundleReviewOperations.js +82 -9
  76. package/dist/server/lib/bundleReviewOperations.js.map +1 -1
  77. package/dist/server/lib/chatOperations.js +31 -0
  78. package/dist/server/lib/chatOperations.js.map +1 -1
  79. package/dist/server/lib/executionReconciliation.js +518 -0
  80. package/dist/server/lib/executionReconciliation.js.map +1 -0
  81. package/dist/server/lib/executionRunRetention.js +141 -0
  82. package/dist/server/lib/executionRunRetention.js.map +1 -0
  83. package/dist/server/lib/executionRuns.js +1264 -0
  84. package/dist/server/lib/executionRuns.js.map +1 -0
  85. package/dist/server/lib/git.js +385 -6
  86. package/dist/server/lib/git.js.map +1 -1
  87. package/dist/server/lib/integrations/github.js +43 -0
  88. package/dist/server/lib/integrations/github.js.map +1 -1
  89. package/dist/server/lib/integrations/githubActions.js +1 -0
  90. package/dist/server/lib/integrations/githubActions.js.map +1 -1
  91. package/dist/server/lib/integrations/githubActionsSessions.js +337 -114
  92. package/dist/server/lib/integrations/githubActionsSessions.js.map +1 -1
  93. package/dist/server/lib/projectMemorySelections.js +7 -3
  94. package/dist/server/lib/projectMemorySelections.js.map +1 -1
  95. package/dist/server/lib/shutdown.js +2 -2
  96. package/dist/server/lib/shutdown.js.map +1 -1
  97. package/dist/server/lib/specArtifact.js +3 -0
  98. package/dist/server/lib/specArtifact.js.map +1 -1
  99. package/dist/server/lib/specFormatting.js +1 -1
  100. package/dist/server/lib/specFormatting.js.map +1 -1
  101. package/dist/server/lib/specOperations.js +31 -0
  102. package/dist/server/lib/specOperations.js.map +1 -1
  103. package/dist/server/lib/specReviewContext.js +44 -14
  104. package/dist/server/lib/specReviewContext.js.map +1 -1
  105. package/dist/server/lib/specReviewDraft.js +3 -2
  106. package/dist/server/lib/specReviewDraft.js.map +1 -1
  107. package/dist/server/lib/specReviewOperations.js +44 -7
  108. package/dist/server/lib/specReviewOperations.js.map +1 -1
  109. package/dist/server/lib/specReviewValidation.js +217 -0
  110. package/dist/server/lib/specReviewValidation.js.map +1 -0
  111. package/dist/server/lib/specReviews.js +30 -2
  112. package/dist/server/lib/specReviews.js.map +1 -1
  113. package/dist/server/lib/specs.js +18 -1
  114. package/dist/server/lib/specs.js.map +1 -1
  115. package/dist/server/lib/stageSnapshots.js +197 -0
  116. package/dist/server/lib/stageSnapshots.js.map +1 -0
  117. package/dist/server/lib/testSessions.js +164 -19
  118. package/dist/server/lib/testSessions.js.map +1 -1
  119. package/dist/server/lib/ticketAutomation.js +80 -4
  120. package/dist/server/lib/ticketAutomation.js.map +1 -1
  121. package/dist/server/lib/ticketAutomationCommit.js +466 -91
  122. package/dist/server/lib/ticketAutomationCommit.js.map +1 -1
  123. package/dist/server/lib/ticketFollowUpOperations.js +214 -20
  124. package/dist/server/lib/ticketFollowUpOperations.js.map +1 -1
  125. package/dist/server/lib/ticketOpenQuestions.js +30 -14
  126. package/dist/server/lib/ticketOpenQuestions.js.map +1 -1
  127. package/dist/server/lib/ticketRunOperations.js +75 -7
  128. package/dist/server/lib/ticketRunOperations.js.map +1 -1
  129. package/dist/server/lib/ticketUndo.js +77 -168
  130. package/dist/server/lib/ticketUndo.js.map +1 -1
  131. package/dist/server/lib/ticketWorkflowOperations.js +132 -28
  132. package/dist/server/lib/ticketWorkflowOperations.js.map +1 -1
  133. package/dist/server/lib/tickets.js +46 -29
  134. package/dist/server/lib/tickets.js.map +1 -1
  135. package/dist/server/lib/transcriptRuns.js +3 -3
  136. package/dist/server/lib/transcriptRuns.js.map +1 -1
  137. package/dist/server/lib/turnExecutionErrors.js +12 -0
  138. package/dist/server/lib/turnExecutionErrors.js.map +1 -0
  139. package/dist/server/lib/types.js +57 -1
  140. package/dist/server/lib/types.js.map +1 -1
  141. package/dist/server/workers/build.js +596 -184
  142. package/dist/server/workers/build.js.map +1 -1
  143. package/dist/server/workers/chat.js +261 -130
  144. package/dist/server/workers/chat.js.map +1 -1
  145. package/dist/server/workers/followUp.js +720 -195
  146. package/dist/server/workers/followUp.js.map +1 -1
  147. package/dist/server/workers/plan.js +527 -188
  148. package/dist/server/workers/plan.js.map +1 -1
  149. package/dist/server/workers/planFollowUp.js +231 -69
  150. package/dist/server/workers/planFollowUp.js.map +1 -1
  151. package/dist/server/workers/review.js +796 -239
  152. package/dist/server/workers/review.js.map +1 -1
  153. package/dist/server/workers/specReview.js +211 -45
  154. package/dist/server/workers/specReview.js.map +1 -1
  155. package/dist/server/workers/specSession.js +425 -252
  156. package/dist/server/workers/specSession.js.map +1 -1
  157. package/package.json +1 -1
  158. package/dist/client/assets/GitHubActionsDialog-BrUq-zO1.js +0 -1
  159. package/dist/client/assets/TestsDialog-D9N4GD77.js +0 -4
  160. package/dist/client/assets/TicketChangesModal-bYHJSO6d.js +0 -1
  161. package/dist/client/assets/channel-B4kCvLCt.js +0 -1
  162. package/dist/client/assets/classDiagram-4FO5ZUOK-C-eRRNNj.js +0 -1
  163. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-B3vxoc73.js +0 -1
  164. package/dist/client/assets/index-9q1GXkUw.js +0 -270
  165. package/dist/client/assets/index-BxTc5qQT.css +0 -2
  166. package/dist/client/assets/stateDiagram-v2-BHNVJYJU-BkMKz90T.js +0 -1
@@ -0,0 +1,232 @@
1
+ import db from '../db.js';
2
+ export const AUTOMATION_STAGE_DETAILS_SCHEMA_VERSION = 1;
3
+ const MAX_PAYLOAD_BYTES = 16 * 1024;
4
+ const SHA_PATTERN = /^(?:[a-f0-9]{40}|[a-f0-9]{64})$/;
5
+ const DIGEST_PATTERN = /^sha256:[a-f0-9]{64}$/;
6
+ const assertPlainObject = (value, name) => {
7
+ if (!value || typeof value !== 'object' || Array.isArray(value) || Object.getPrototypeOf(value) !== Object.prototype) {
8
+ throw new Error(`${name} must be an object`);
9
+ }
10
+ };
11
+ const assertExactKeys = (value, keys, name) => {
12
+ const actualKeys = Object.keys(value).sort();
13
+ const expectedKeys = [...keys].sort();
14
+ if (actualKeys.length !== expectedKeys.length || actualKeys.some((key, index) => key !== expectedKeys[index])) {
15
+ throw new Error(`${name} has unsupported or missing fields`);
16
+ }
17
+ };
18
+ const assertString = (value, name, maxBytes = 500) => {
19
+ if (typeof value !== 'string' || value.trim().length === 0 || Buffer.byteLength(value, 'utf8') > maxBytes) {
20
+ throw new Error(`${name} must be a non-empty UTF-8 string of at most ${maxBytes} bytes`);
21
+ }
22
+ };
23
+ const assertSha = (value, name) => {
24
+ if (typeof value !== 'string' || !SHA_PATTERN.test(value)) {
25
+ throw new Error(`${name} must be a lowercase Git object SHA`);
26
+ }
27
+ };
28
+ const assertDigest = (value, name) => {
29
+ if (typeof value !== 'string' || !DIGEST_PATTERN.test(value)) {
30
+ throw new Error(`${name} must be a normalized sha256 digest`);
31
+ }
32
+ };
33
+ const assertHttpsUrl = (value, name) => {
34
+ assertString(value, name, 2_000);
35
+ let url;
36
+ try {
37
+ url = new URL(value);
38
+ }
39
+ catch {
40
+ throw new Error(`${name} must be a valid HTTPS URL`);
41
+ }
42
+ if (url.protocol !== 'https:') {
43
+ throw new Error(`${name} must be a valid HTTPS URL`);
44
+ }
45
+ };
46
+ const validateCommitIntent = (value) => {
47
+ assertPlainObject(value, 'Commit intent');
48
+ assertExactKeys(value, ['branch', 'preActionHeadSha', 'preActionIndexTreeSha', 'intendedTreeSha', 'commitMessageDigest', 'selectedContentDigest'], 'Commit intent');
49
+ assertString(value.branch, 'Commit branch', 255);
50
+ assertSha(value.preActionHeadSha, 'Commit pre-action HEAD');
51
+ assertSha(value.preActionIndexTreeSha, 'Commit pre-action index tree SHA');
52
+ assertSha(value.intendedTreeSha, 'Commit intended tree SHA');
53
+ assertDigest(value.commitMessageDigest, 'Commit message digest');
54
+ assertDigest(value.selectedContentDigest, 'Selected content digest');
55
+ return value;
56
+ };
57
+ const validateCommitResult = (value) => {
58
+ assertPlainObject(value, 'Commit result');
59
+ if (value.outcome === 'no_changes') {
60
+ assertExactKeys(value, ['outcome', 'headSha', 'treeSha'], 'Commit result');
61
+ assertSha(value.headSha, 'Observed HEAD');
62
+ assertSha(value.treeSha, 'Observed HEAD tree');
63
+ return value;
64
+ }
65
+ assertExactKeys(value, ['commitSha', 'parentSha', 'treeSha'], 'Commit result');
66
+ assertSha(value.commitSha, 'Observed commit SHA');
67
+ assertSha(value.parentSha, 'Observed commit parent SHA');
68
+ assertSha(value.treeSha, 'Observed commit tree SHA');
69
+ return value;
70
+ };
71
+ const validatePushIntent = (value) => {
72
+ assertPlainObject(value, 'Push intent');
73
+ assertExactKeys(value, ['branch', 'originIdentity', 'targetLocalSha', 'preActionRemote'], 'Push intent');
74
+ assertString(value.branch, 'Push branch', 255);
75
+ assertDigest(value.originIdentity, 'Push origin identity');
76
+ assertSha(value.targetLocalSha, 'Push target local SHA');
77
+ assertPlainObject(value.preActionRemote, 'Push pre-action remote');
78
+ if (value.preActionRemote.state === 'absent') {
79
+ assertExactKeys(value.preActionRemote, ['state'], 'Push pre-action remote');
80
+ }
81
+ else if (value.preActionRemote.state === 'observed') {
82
+ assertExactKeys(value.preActionRemote, ['state', 'sha'], 'Push pre-action remote');
83
+ assertSha(value.preActionRemote.sha, 'Push pre-action remote SHA');
84
+ }
85
+ else {
86
+ throw new Error('Push pre-action remote must be absent or observed');
87
+ }
88
+ return value;
89
+ };
90
+ const validatePushResult = (value) => {
91
+ assertPlainObject(value, 'Push result');
92
+ assertExactKeys(value, ['remoteSha'], 'Push result');
93
+ assertSha(value.remoteSha, 'Observed remote SHA');
94
+ return value;
95
+ };
96
+ const validatePullRequestIntent = (value) => {
97
+ assertPlainObject(value, 'Pull-request intent');
98
+ assertExactKeys(value, ['provider', 'repoHost', 'repoOwner', 'repoName', 'baseBranch', 'headBranch', 'headSha'], 'Pull-request intent');
99
+ if (value.provider !== 'github') {
100
+ throw new Error('Pull-request provider must be github');
101
+ }
102
+ assertString(value.repoHost, 'Repository host', 255);
103
+ assertString(value.repoOwner, 'Repository owner', 255);
104
+ assertString(value.repoName, 'Repository name', 255);
105
+ assertString(value.baseBranch, 'Pull-request base branch', 255);
106
+ assertString(value.headBranch, 'Pull-request head branch', 255);
107
+ assertSha(value.headSha, 'Pull-request head SHA');
108
+ return value;
109
+ };
110
+ const validatePullRequestResult = (value) => {
111
+ assertPlainObject(value, 'Pull-request result');
112
+ assertExactKeys(value, ['pullRequestNumber', 'providerId', 'url', 'state'], 'Pull-request result');
113
+ if (!Number.isSafeInteger(value.pullRequestNumber) || value.pullRequestNumber <= 0) {
114
+ throw new Error('Pull-request number must be a positive integer');
115
+ }
116
+ if (value.providerId !== null) {
117
+ assertString(value.providerId, 'Pull-request provider identity', 500);
118
+ }
119
+ assertHttpsUrl(value.url, 'Pull-request URL');
120
+ if (!['draft', 'open', 'merged', 'closed'].includes(value.state)) {
121
+ throw new Error('Pull-request state is invalid');
122
+ }
123
+ return value;
124
+ };
125
+ const validateSchemaVersion = (schemaVersion) => {
126
+ if (schemaVersion !== AUTOMATION_STAGE_DETAILS_SCHEMA_VERSION) {
127
+ throw new Error(`Unsupported automation stage details schema version: ${schemaVersion}`);
128
+ }
129
+ };
130
+ const serializeBounded = (value, name) => {
131
+ const serialized = JSON.stringify(value);
132
+ if (Buffer.byteLength(serialized, 'utf8') > MAX_PAYLOAD_BYTES) {
133
+ throw new Error(`${name} exceeds ${MAX_PAYLOAD_BYTES} UTF-8 bytes`);
134
+ }
135
+ return serialized;
136
+ };
137
+ const validateIntent = (stageKind, intent) => {
138
+ if (stageKind === 'automation_commit') {
139
+ return validateCommitIntent(intent);
140
+ }
141
+ if (stageKind === 'automation_push') {
142
+ return validatePushIntent(intent);
143
+ }
144
+ return validatePullRequestIntent(intent);
145
+ };
146
+ const validateResult = (stageKind, result) => {
147
+ if (stageKind === 'automation_commit') {
148
+ return validateCommitResult(result);
149
+ }
150
+ if (stageKind === 'automation_push') {
151
+ return validatePushResult(result);
152
+ }
153
+ return validatePullRequestResult(result);
154
+ };
155
+ const assertStageOwnership = (projectId, bundleId, runId, stageKind) => {
156
+ const row = db.prepare(`
157
+ SELECT run.id
158
+ FROM execution_runs run
159
+ JOIN execution_run_links link
160
+ ON link.execution_run_id = run.id
161
+ AND link.project_id = run.project_id
162
+ AND link.relationship = 'primary'
163
+ AND link.entity_type = 'bundle'
164
+ JOIN worktree_bundles bundle
165
+ ON bundle.id = link.entity_id
166
+ AND bundle.project_id = run.project_id
167
+ WHERE run.id = ? AND run.project_id = ? AND run.kind = ? AND bundle.id = ?
168
+ `).get(runId, projectId, stageKind, bundleId);
169
+ if (!row) {
170
+ throw new Error(`Execution run ${runId} is not a ${stageKind} run owned by bundle ${bundleId} in project ${projectId}`);
171
+ }
172
+ };
173
+ const serializeRow = (row) => ({
174
+ execution_run_id: row.execution_run_id,
175
+ project_id: row.project_id,
176
+ worktree_bundle_id: row.worktree_bundle_id,
177
+ stage_kind: row.stage_kind,
178
+ schema_version: row.schema_version,
179
+ intent: JSON.parse(row.intent_json),
180
+ result: row.result_json ? JSON.parse(row.result_json) : null,
181
+ created_at: row.created_at,
182
+ updated_at: row.updated_at,
183
+ });
184
+ export const createAutomationStageDetails = (input) => {
185
+ validateSchemaVersion(input.schemaVersion);
186
+ const intent = validateIntent(input.stageKind, input.intent);
187
+ const intentJson = serializeBounded(intent, 'Automation stage intent');
188
+ assertStageOwnership(input.projectId, input.bundleId, input.runId, input.stageKind);
189
+ db.prepare(`
190
+ INSERT INTO automation_stage_details (
191
+ execution_run_id, project_id, worktree_bundle_id, stage_kind, schema_version, intent_json
192
+ ) VALUES (?, ?, ?, ?, ?, ?)
193
+ `).run(input.runId, input.projectId, input.bundleId, input.stageKind, input.schemaVersion, intentJson);
194
+ return getAutomationStageDetails(input.projectId, input.runId);
195
+ };
196
+ export const setAutomationStageResult = (input) => {
197
+ validateSchemaVersion(input.schemaVersion);
198
+ const result = validateResult(input.stageKind, input.result);
199
+ const resultJson = serializeBounded(result, 'Automation stage result');
200
+ assertStageOwnership(input.projectId, input.bundleId, input.runId, input.stageKind);
201
+ const update = db.prepare(`
202
+ UPDATE automation_stage_details
203
+ SET result_json = ?, updated_at = CURRENT_TIMESTAMP
204
+ WHERE execution_run_id = ? AND project_id = ? AND worktree_bundle_id = ?
205
+ AND stage_kind = ? AND schema_version = ? AND result_json IS NULL
206
+ `).run(resultJson, input.runId, input.projectId, input.bundleId, input.stageKind, input.schemaVersion);
207
+ if (update.changes !== 1) {
208
+ throw new Error(`Automation stage details for execution run ${input.runId} are missing, incompatible, or already have a result`);
209
+ }
210
+ return getAutomationStageDetails(input.projectId, input.runId);
211
+ };
212
+ export const ensureAutomationStageResult = (input) => {
213
+ validateSchemaVersion(input.schemaVersion);
214
+ const result = validateResult(input.stageKind, input.result);
215
+ const existing = getAutomationStageDetails(input.projectId, input.runId);
216
+ if (!existing?.result) {
217
+ return setAutomationStageResult(input);
218
+ }
219
+ if (existing.worktree_bundle_id !== input.bundleId
220
+ || existing.stage_kind !== input.stageKind
221
+ || JSON.stringify(existing.result) !== JSON.stringify(result)) {
222
+ throw new Error(`Automation stage result for execution run ${input.runId} conflicts with persisted evidence`);
223
+ }
224
+ return existing;
225
+ };
226
+ export const getAutomationStageDetails = (projectId, runId) => {
227
+ const row = db.prepare(`
228
+ SELECT * FROM automation_stage_details WHERE execution_run_id = ? AND project_id = ?
229
+ `).get(runId, projectId);
230
+ return row ? serializeRow(row) : null;
231
+ };
232
+ //# sourceMappingURL=automationStageDetails.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"automationStageDetails.js","sourceRoot":"","sources":["../../../server/lib/automationStageDetails.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,223 @@
1
+ import db from '../db.js';
2
+ import { startFollowUp, isFollowUpRunning } from '../workers/followUp.js';
3
+ import { createBuildOpenQuestionResolutionBatch, failBuildOpenQuestionBatch, formatBuildOpenQuestionAnswersPrompt, listAnsweredBuildOpenQuestionsForBatch, setBuildOpenQuestionBatchStatus, } from './buildOpenQuestions.js';
4
+ import { withExecutionRunTransaction } from './executionRuns.js';
5
+ import { getAutomationProgression, getWaitingOpenQuestionProgression, runAutomationProgression, waitAutomationProgression, } from './automationProgression.js';
6
+ import { createTicketMessage } from './ticketMessages.js';
7
+ import { getTicket, listTickets } from './tickets.js';
8
+ import { validateWorkflowContext } from './types.js';
9
+ const resolveTargetTicket = (tickets) => {
10
+ return [...tickets]
11
+ .filter(ticket => ticket.state === 'build' && (ticket.agent_status === 'done' || ticket.agent_status === 'stopped'))
12
+ .sort((left, right) => {
13
+ const buildOrder = (right.build_completed_at ?? '').localeCompare(left.build_completed_at ?? '');
14
+ if (buildOrder !== 0) {
15
+ return buildOrder;
16
+ }
17
+ const updatedOrder = right.updated_at.localeCompare(left.updated_at);
18
+ return updatedOrder !== 0 ? updatedOrder : right.id.localeCompare(left.id);
19
+ })[0] ?? null;
20
+ };
21
+ const restoreTicket = (ticket) => {
22
+ db.prepare(`
23
+ UPDATE tickets
24
+ SET agent_status = ?, agent_operation = ?, agent_log = ?, streaming_response = ?, updated_at = ?
25
+ WHERE id = ? AND project_id = ?
26
+ `).run(ticket.agent_status, null, ticket.agent_log, ticket.streaming_response, ticket.updated_at, ticket.id, ticket.project_id);
27
+ };
28
+ export const acceptBuildOpenQuestionResolution = ({ projectId, bundleId, resolutions, broadcaster, }) => {
29
+ const buildTickets = listTickets(projectId).filter(ticket => ticket.worktree_bundle_id === bundleId && ticket.state === 'build');
30
+ if (buildTickets.length === 0
31
+ || buildTickets.some(ticket => ticket.agent_status !== 'done' && ticket.agent_status !== 'stopped')) {
32
+ return { ok: false, status: 409, error: 'All build tickets in the bundle must be done or stopped before resolving questions' };
33
+ }
34
+ const hasAnswers = resolutions.some(resolution => Boolean(resolution.answer?.trim()));
35
+ const targetTicket = hasAnswers ? resolveTargetTicket(buildTickets) : null;
36
+ if (hasAnswers && !targetTicket) {
37
+ return { ok: false, status: 409, error: 'No completed Build ticket is available for the follow-up' };
38
+ }
39
+ if (targetTicket && isFollowUpRunning(targetTicket)) {
40
+ return { ok: false, status: 409, error: 'Build follow-up could not be started' };
41
+ }
42
+ let accepted = null;
43
+ try {
44
+ accepted = withExecutionRunTransaction(transaction => {
45
+ const progression = getWaitingOpenQuestionProgression({ projectId, bundleId, broadcaster });
46
+ const created = createBuildOpenQuestionResolutionBatch({ projectId, bundleId, resolutions });
47
+ if (!created.ok) {
48
+ const error = new Error(created.error);
49
+ error.code = created.code;
50
+ throw error;
51
+ }
52
+ if (!hasAnswers || !targetTicket) {
53
+ runAutomationProgression({
54
+ projectId,
55
+ bundleId,
56
+ progressionRunId: progression.runId,
57
+ broadcaster,
58
+ });
59
+ return null;
60
+ }
61
+ const persistedBatch = db.prepare(`
62
+ SELECT project_id, worktree_bundle_id, status
63
+ FROM build_open_question_batches
64
+ WHERE id = ?
65
+ `).get(created.batch.id);
66
+ if (!persistedBatch
67
+ || persistedBatch.project_id !== projectId
68
+ || persistedBatch.worktree_bundle_id !== bundleId
69
+ || persistedBatch.status !== 'pending') {
70
+ throw new Error('Build open question batch no longer belongs to this bundle');
71
+ }
72
+ const answeredQuestions = listAnsweredBuildOpenQuestionsForBatch(created.batch.id);
73
+ const instruction = [
74
+ 'Apply this complete batch of answered Build requirements in one bundle-scoped pass. Preserve the grouping by originating ticket and do not work on dismissed questions. Treat every submitted decision as authoritative and do not return an answered or dismissed batch question as open.',
75
+ formatBuildOpenQuestionAnswersPrompt(answeredQuestions),
76
+ ].join('\n\n');
77
+ const triggerMessageId = createTicketMessage({
78
+ ticketId: targetTicket.id,
79
+ role: 'user',
80
+ kind: 'follow_up',
81
+ content: instruction,
82
+ origin: 'build_open_question_resolution',
83
+ });
84
+ const workflowContext = validateWorkflowContext({ build_open_question_batch_id: created.batch.id });
85
+ const executionRun = transaction.createExecutionRun({
86
+ projectId,
87
+ kind: 'build_follow_up',
88
+ domainStatus: 'queued',
89
+ sourceReference: { kind: 'ticket', id: targetTicket.id, label: targetTicket.title },
90
+ links: [
91
+ { entityType: 'bundle', entityId: bundleId, relationship: 'context' },
92
+ {
93
+ entityType: 'ticket_message',
94
+ entityId: triggerMessageId,
95
+ relationship: 'trigger',
96
+ expectedParent: { entityType: 'ticket', entityId: targetTicket.id },
97
+ },
98
+ ],
99
+ metadata: workflowContext,
100
+ initiatedBy: 'user',
101
+ parentRunId: progression.runId,
102
+ eventType: 'build_follow_up_created',
103
+ });
104
+ setBuildOpenQuestionBatchStatus(created.batch.id, 'running');
105
+ db.prepare(`
106
+ UPDATE tickets
107
+ SET agent_status = 'running', agent_log = NULL, streaming_response = NULL, updated_at = CURRENT_TIMESTAMP
108
+ WHERE id = ? AND project_id = ? AND agent_status IS NOT 'running'
109
+ `).run(targetTicket.id, projectId);
110
+ runAutomationProgression({
111
+ projectId,
112
+ bundleId,
113
+ progressionRunId: progression.runId,
114
+ broadcaster,
115
+ });
116
+ return {
117
+ batchId: created.batch.id,
118
+ instruction,
119
+ triggerMessageId,
120
+ executionContext: {
121
+ runId: executionRun.id,
122
+ correlationId: executionRun.correlation_id,
123
+ projectId: executionRun.project_id,
124
+ kind: executionRun.kind,
125
+ },
126
+ progressionRunId: progression.runId,
127
+ };
128
+ }, broadcaster);
129
+ }
130
+ catch (error) {
131
+ const value = error;
132
+ return { ok: false, status: 409, error: value.message, ...(value.code ? { code: value.code } : {}) };
133
+ }
134
+ if (!accepted || !targetTicket) {
135
+ const batch = db.prepare(`
136
+ SELECT id FROM build_open_question_batches
137
+ WHERE project_id = ? AND worktree_bundle_id = ?
138
+ ORDER BY created_at DESC, rowid DESC LIMIT 1
139
+ `).get(projectId, bundleId);
140
+ const progression = getAutomationProgression(projectId, bundleId)?.id ?? null;
141
+ if (!progression) {
142
+ return { ok: false, status: 409, error: 'Build open question progression ownership is missing' };
143
+ }
144
+ return { ok: true, status: 200, kind: 'dismissed', batchId: batch.id, progressionRunId: progression };
145
+ }
146
+ const deleteTriggerMessage = () => {
147
+ db.prepare(`
148
+ DELETE FROM execution_run_links
149
+ WHERE execution_run_id = ? AND project_id = ?
150
+ AND entity_type = 'ticket_message' AND entity_id = ? AND relationship = 'trigger'
151
+ `).run(accepted.executionContext.runId, projectId, accepted.triggerMessageId);
152
+ db.prepare('DELETE FROM ticket_messages WHERE id = ? AND ticket_id = ?')
153
+ .run(accepted.triggerMessageId, targetTicket.id);
154
+ };
155
+ const scheduling = startFollowUp(targetTicket, broadcaster, accepted.instruction, 'build', {
156
+ buildOpenQuestionBatchId: accepted.batchId,
157
+ executionContext: accepted.executionContext,
158
+ initiation: {
159
+ initiator: 'user',
160
+ workflowContext: validateWorkflowContext({ build_open_question_batch_id: accepted.batchId }),
161
+ },
162
+ triggerMessageId: accepted.triggerMessageId,
163
+ compensationDomainStatus: targetTicket.agent_status ?? 'idle',
164
+ compensate: () => {
165
+ failBuildOpenQuestionBatch(accepted?.batchId ?? '', 'Build follow-up could not be queued');
166
+ restoreTicket(targetTicket);
167
+ waitAutomationProgression({
168
+ projectId,
169
+ bundleId,
170
+ progressionRunId: accepted?.progressionRunId ?? '',
171
+ pauseCode: 'open_questions',
172
+ pauseReason: 'Build open question follow-up could not be started',
173
+ reasonCode: 'stage_failed',
174
+ pausedStageRunId: accepted?.executionContext.runId ?? null,
175
+ broadcaster,
176
+ });
177
+ deleteTriggerMessage();
178
+ },
179
+ });
180
+ const schedulingValue = scheduling;
181
+ if (schedulingValue === false || (typeof schedulingValue === 'object' && schedulingValue !== null && !scheduling.accepted)) {
182
+ const rejection = scheduling;
183
+ const reason = rejection.reason ?? 'busy';
184
+ const error = rejection.error ?? 'Build follow-up could not be started';
185
+ if (reason !== 'queue_failed') {
186
+ withExecutionRunTransaction(transaction => {
187
+ failBuildOpenQuestionBatch(accepted?.batchId ?? '', error);
188
+ restoreTicket(targetTicket);
189
+ waitAutomationProgression({
190
+ projectId,
191
+ bundleId,
192
+ progressionRunId: accepted?.progressionRunId ?? '',
193
+ pauseCode: 'open_questions',
194
+ pauseReason: 'Build open question follow-up could not be started',
195
+ reasonCode: 'stage_failed',
196
+ pausedStageRunId: accepted?.executionContext.runId ?? null,
197
+ broadcaster,
198
+ });
199
+ deleteTriggerMessage();
200
+ transaction.transitionExecutionRun({
201
+ projectId,
202
+ runId: accepted?.executionContext.runId ?? '',
203
+ status: 'failed',
204
+ domainStatus: targetTicket.agent_status ?? 'idle',
205
+ failure: { code: 'scheduling_rejected', message: error },
206
+ eventType: 'build_follow_up_failed',
207
+ });
208
+ }, broadcaster);
209
+ }
210
+ return { ok: false, status: reason === 'queue_failed' ? 503 : 409, error };
211
+ }
212
+ const refreshed = getTicket(targetTicket.id) ?? targetTicket;
213
+ broadcaster.emit('ticket:updated', refreshed);
214
+ return {
215
+ ok: true,
216
+ status: 202,
217
+ kind: 'accepted',
218
+ batchId: accepted.batchId,
219
+ targetTicket: refreshed,
220
+ executionContext: accepted.executionContext,
221
+ };
222
+ };
223
+ //# sourceMappingURL=buildOpenQuestionOperations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildOpenQuestionOperations.js","sourceRoot":"","sources":["../../../server/lib/buildOpenQuestionOperations.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,8 @@
1
1
  import { createHash, randomUUID } from 'crypto';
2
2
  import db from '../db.js';
3
3
  export const BUILD_OPEN_QUESTIONS_CHANGED_CODE = 'build_open_questions_changed';
4
+ export const BUILD_OPEN_QUESTION_RESTART_ERROR = 'Server restarted before the Build open question follow-up completed';
5
+ export const BUILD_OPEN_QUESTION_RESTART_PAUSE_REASON = 'Build open question follow-up was interrupted by a server restart';
4
6
  class BuildOpenQuestionsChangedError extends Error {
5
7
  }
6
8
  const normalizeQuestions = (questions) => {
@@ -51,6 +53,14 @@ export const listAnsweredBuildOpenQuestionsForBatch = (batchId) => {
51
53
  ORDER BY build_open_questions.answered_at ASC, build_open_questions.id ASC
52
54
  `).all(batchId);
53
55
  };
56
+ export const filterResolvedBuildOpenQuestionsForBatch = (batchId, questions) => {
57
+ const resolved = db.prepare(`
58
+ SELECT question_text FROM build_open_questions
59
+ WHERE resolution_batch_id = ? AND status IN ('answered', 'dismissed')
60
+ `).all(batchId);
61
+ const resolvedQuestions = new Set(normalizeQuestions(resolved.map(question => question.question_text)));
62
+ return normalizeQuestions(questions).filter(question => !resolvedQuestions.has(question));
63
+ };
54
64
  export const loadBuildOpenQuestionsByTicketIds = (ticketIds) => {
55
65
  const result = new Map(ticketIds.map(ticketId => [ticketId, []]));
56
66
  if (ticketIds.length === 0) {
@@ -223,6 +233,48 @@ export const failBuildOpenQuestionBatch = (batchId, errorMessage) => {
223
233
  });
224
234
  return fail();
225
235
  };
236
+ export const recoverInterruptedBuildOpenQuestionBatch = (batchId) => {
237
+ const batch = db.prepare(`
238
+ SELECT project_id, worktree_bundle_id
239
+ FROM build_open_question_batches
240
+ WHERE id = ? AND status IN ('pending', 'running')
241
+ `).get(batchId);
242
+ if (!batch) {
243
+ return { batch_recovered: 0, questions_reopened: 0, automation_paused: 0 };
244
+ }
245
+ const batchRecovered = db.prepare(`
246
+ UPDATE build_open_question_batches
247
+ SET status = 'error', error_message = ?, completed_at = CURRENT_TIMESTAMP, updated_at = CURRENT_TIMESTAMP
248
+ WHERE id = ? AND status IN ('pending', 'running')
249
+ `).run(BUILD_OPEN_QUESTION_RESTART_ERROR, batchId).changes;
250
+ if (batchRecovered === 0) {
251
+ return { batch_recovered: 0, questions_reopened: 0, automation_paused: 0 };
252
+ }
253
+ const questionsReopened = db.prepare(`
254
+ UPDATE build_open_questions
255
+ SET status = 'open', answer_text = NULL, answered_at = NULL,
256
+ dismissed_at = NULL, dismissed_by = NULL, dismissal_reason = NULL,
257
+ resolution_batch_id = NULL, updated_at = CURRENT_TIMESTAMP
258
+ WHERE resolution_batch_id = ? AND status IN ('answered', 'dismissed')
259
+ `).run(batchId).changes;
260
+ db.prepare(`
261
+ INSERT INTO bundle_automation_state (
262
+ project_id, worktree_bundle_id, automation_paused_code, automation_paused_reason,
263
+ automation_paused_at, automation_pause_reason_code, automation_paused_stage_run_id
264
+ ) VALUES (?, ?, 'open_questions', ?, CURRENT_TIMESTAMP, 'server_restart', NULL)
265
+ ON CONFLICT(project_id, worktree_bundle_id) DO UPDATE SET
266
+ automation_paused_code = 'open_questions',
267
+ automation_paused_reason = excluded.automation_paused_reason,
268
+ automation_paused_at = CURRENT_TIMESTAMP,
269
+ automation_pause_reason_code = 'server_restart',
270
+ automation_paused_stage_run_id = CASE
271
+ WHEN bundle_automation_state.automation_progression_run_id IS NULL THEN NULL
272
+ ELSE bundle_automation_state.automation_paused_stage_run_id
273
+ END,
274
+ updated_at = CURRENT_TIMESTAMP
275
+ `).run(batch.project_id, batch.worktree_bundle_id, BUILD_OPEN_QUESTION_RESTART_PAUSE_REASON);
276
+ return { batch_recovered: batchRecovered, questions_reopened: questionsReopened, automation_paused: 1 };
277
+ };
226
278
  export const hasActiveBuildOpenQuestionBatch = (projectId, bundleId) => {
227
279
  const row = db.prepare(`
228
280
  SELECT 1 AS active FROM build_open_question_batches
@@ -1 +1 @@
1
- {"version":3,"file":"buildOpenQuestions.js","sourceRoot":"","sources":["../../../server/lib/buildOpenQuestions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"buildOpenQuestions.js","sourceRoot":"","sources":["../../../server/lib/buildOpenQuestions.ts"],"names":[],"mappings":"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"}