@straiffi/archon 1.0.0

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 (124) hide show
  1. package/README.md +224 -0
  2. package/dist/cli.js +216 -0
  3. package/dist/client/assets/index-8_-boBBA.css +2 -0
  4. package/dist/client/assets/index-s_jjeqha.js +176 -0
  5. package/dist/client/assets/jetbrains-mono-cyrillic-wght-normal-D73BlboJ.woff2 +0 -0
  6. package/dist/client/assets/jetbrains-mono-greek-wght-normal-Bw9x6K1M.woff2 +0 -0
  7. package/dist/client/assets/jetbrains-mono-latin-ext-wght-normal-DBQx-q_a.woff2 +0 -0
  8. package/dist/client/assets/jetbrains-mono-latin-wght-normal-B9CIFXIH.woff2 +0 -0
  9. package/dist/client/assets/jetbrains-mono-vietnamese-wght-normal-Bt-aOZkq.woff2 +0 -0
  10. package/dist/client/favicon.svg +62 -0
  11. package/dist/client/icons.svg +24 -0
  12. package/dist/client/index.html +14 -0
  13. package/dist/server/db.js +764 -0
  14. package/dist/server/db.js.map +1 -0
  15. package/dist/server/index.js +5134 -0
  16. package/dist/server/index.js.map +1 -0
  17. package/dist/server/lib/agent.js +1302 -0
  18. package/dist/server/lib/agent.js.map +1 -0
  19. package/dist/server/lib/buildChains.js +2 -0
  20. package/dist/server/lib/buildChains.js.map +1 -0
  21. package/dist/server/lib/buildFlow.js +59 -0
  22. package/dist/server/lib/buildFlow.js.map +1 -0
  23. package/dist/server/lib/buildSequences.js +599 -0
  24. package/dist/server/lib/buildSequences.js.map +1 -0
  25. package/dist/server/lib/bundleActivity.js +95 -0
  26. package/dist/server/lib/bundleActivity.js.map +1 -0
  27. package/dist/server/lib/bundlePullRequests.js +126 -0
  28. package/dist/server/lib/bundlePullRequests.js.map +1 -0
  29. package/dist/server/lib/chatMessages.js +60 -0
  30. package/dist/server/lib/chatMessages.js.map +1 -0
  31. package/dist/server/lib/chatTargets.js +123 -0
  32. package/dist/server/lib/chatTargets.js.map +1 -0
  33. package/dist/server/lib/chatTicketProposals.js +180 -0
  34. package/dist/server/lib/chatTicketProposals.js.map +1 -0
  35. package/dist/server/lib/chats.js +279 -0
  36. package/dist/server/lib/chats.js.map +1 -0
  37. package/dist/server/lib/config.js +3 -0
  38. package/dist/server/lib/config.js.map +1 -0
  39. package/dist/server/lib/cors.js +30 -0
  40. package/dist/server/lib/cors.js.map +1 -0
  41. package/dist/server/lib/directoryPicker.js +174 -0
  42. package/dist/server/lib/directoryPicker.js.map +1 -0
  43. package/dist/server/lib/git.js +1284 -0
  44. package/dist/server/lib/git.js.map +1 -0
  45. package/dist/server/lib/integrations/github.js +511 -0
  46. package/dist/server/lib/integrations/github.js.map +1 -0
  47. package/dist/server/lib/integrations/index.js +162 -0
  48. package/dist/server/lib/integrations/index.js.map +1 -0
  49. package/dist/server/lib/integrations/jira.js +283 -0
  50. package/dist/server/lib/integrations/jira.js.map +1 -0
  51. package/dist/server/lib/integrations/planning.js +27 -0
  52. package/dist/server/lib/integrations/planning.js.map +1 -0
  53. package/dist/server/lib/integrations/types.js +2 -0
  54. package/dist/server/lib/integrations/types.js.map +1 -0
  55. package/dist/server/lib/lightweightPrompt.js +88 -0
  56. package/dist/server/lib/lightweightPrompt.js.map +1 -0
  57. package/dist/server/lib/models.js +219 -0
  58. package/dist/server/lib/models.js.map +1 -0
  59. package/dist/server/lib/preview.js +377 -0
  60. package/dist/server/lib/preview.js.map +1 -0
  61. package/dist/server/lib/previewProxy.js +659 -0
  62. package/dist/server/lib/previewProxy.js.map +1 -0
  63. package/dist/server/lib/projectAutoConfig.js +682 -0
  64. package/dist/server/lib/projectAutoConfig.js.map +1 -0
  65. package/dist/server/lib/projectFileSuggestions.js +133 -0
  66. package/dist/server/lib/projectFileSuggestions.js.map +1 -0
  67. package/dist/server/lib/projectMemory.js +1519 -0
  68. package/dist/server/lib/projectMemory.js.map +1 -0
  69. package/dist/server/lib/projectMemoryPrompt.js +390 -0
  70. package/dist/server/lib/projectMemoryPrompt.js.map +1 -0
  71. package/dist/server/lib/projectMemoryScan.js +681 -0
  72. package/dist/server/lib/projectMemoryScan.js.map +1 -0
  73. package/dist/server/lib/projectMemorySuggestions.js +166 -0
  74. package/dist/server/lib/projectMemorySuggestions.js.map +1 -0
  75. package/dist/server/lib/projectMemoryTransfer.js +958 -0
  76. package/dist/server/lib/projectMemoryTransfer.js.map +1 -0
  77. package/dist/server/lib/projects.js +569 -0
  78. package/dist/server/lib/projects.js.map +1 -0
  79. package/dist/server/lib/promptSkills.js +28 -0
  80. package/dist/server/lib/promptSkills.js.map +1 -0
  81. package/dist/server/lib/queue.js +15 -0
  82. package/dist/server/lib/queue.js.map +1 -0
  83. package/dist/server/lib/reviewFindings.js +390 -0
  84. package/dist/server/lib/reviewFindings.js.map +1 -0
  85. package/dist/server/lib/run.js +416 -0
  86. package/dist/server/lib/run.js.map +1 -0
  87. package/dist/server/lib/runtimePaths.js +93 -0
  88. package/dist/server/lib/runtimePaths.js.map +1 -0
  89. package/dist/server/lib/shell.js +27 -0
  90. package/dist/server/lib/shell.js.map +1 -0
  91. package/dist/server/lib/skills.js +124 -0
  92. package/dist/server/lib/skills.js.map +1 -0
  93. package/dist/server/lib/startDev.js +18 -0
  94. package/dist/server/lib/startDev.js.map +1 -0
  95. package/dist/server/lib/staticClient.js +80 -0
  96. package/dist/server/lib/staticClient.js.map +1 -0
  97. package/dist/server/lib/terminal.js +366 -0
  98. package/dist/server/lib/terminal.js.map +1 -0
  99. package/dist/server/lib/ticketDependencies.js +174 -0
  100. package/dist/server/lib/ticketDependencies.js.map +1 -0
  101. package/dist/server/lib/ticketMessages.js +65 -0
  102. package/dist/server/lib/ticketMessages.js.map +1 -0
  103. package/dist/server/lib/ticketOpenQuestions.js +128 -0
  104. package/dist/server/lib/ticketOpenQuestions.js.map +1 -0
  105. package/dist/server/lib/ticketUndo.js +549 -0
  106. package/dist/server/lib/ticketUndo.js.map +1 -0
  107. package/dist/server/lib/tickets.js +981 -0
  108. package/dist/server/lib/tickets.js.map +1 -0
  109. package/dist/server/lib/types.js +2 -0
  110. package/dist/server/lib/types.js.map +1 -0
  111. package/dist/server/package.json +3 -0
  112. package/dist/server/workers/build.js +229 -0
  113. package/dist/server/workers/build.js.map +1 -0
  114. package/dist/server/workers/chat.js +190 -0
  115. package/dist/server/workers/chat.js.map +1 -0
  116. package/dist/server/workers/followUp.js +204 -0
  117. package/dist/server/workers/followUp.js.map +1 -0
  118. package/dist/server/workers/plan.js +1130 -0
  119. package/dist/server/workers/plan.js.map +1 -0
  120. package/dist/server/workers/planFollowUp.js +360 -0
  121. package/dist/server/workers/planFollowUp.js.map +1 -0
  122. package/dist/server/workers/review.js +167 -0
  123. package/dist/server/workers/review.js.map +1 -0
  124. package/package.json +40 -0
@@ -0,0 +1,549 @@
1
+ import { randomUUID } from 'crypto';
2
+ import { cpSync, existsSync, lstatSync, mkdirSync, readlinkSync, readdirSync, readFileSync, rmSync, statSync, symlinkSync, writeFileSync } from 'fs';
3
+ import { cp as cpAsync, mkdir as mkdirAsync, readdir as readdirAsync, writeFile as writeFileAsync, rm as rmAsync } from 'fs/promises';
4
+ import { dirname, join, relative } from 'path';
5
+ import db from '../db.js';
6
+ import { getGitDiffFiles, getGitUnifiedDiff, resolveWorktreePath } from './git.js';
7
+ import { getEffectiveProject } from './projects.js';
8
+ import { resolveArchonStageSnapshotDir } from './runtimePaths.js';
9
+ import { assignTicketLaneOrder, getTicket, resolveTicketBranch } from './tickets.js';
10
+ const STAGE_ROOT = resolveArchonStageSnapshotDir();
11
+ const listStageChangesByBundleAndStageStatement = db.prepare(`
12
+ SELECT *
13
+ FROM ticket_stage_changes
14
+ WHERE project_id IS ?
15
+ AND worktree_bundle_id IS ?
16
+ AND stage = ?
17
+ AND success_revision > 0
18
+ ORDER BY last_success_at DESC, updated_at DESC, id DESC
19
+ `);
20
+ const listStageChangesByBundleStatement = db.prepare(`
21
+ SELECT *
22
+ FROM ticket_stage_changes
23
+ WHERE project_id IS ?
24
+ AND worktree_bundle_id IS ?
25
+ AND success_revision > 0
26
+ ORDER BY last_success_at DESC, updated_at DESC, id DESC
27
+ `);
28
+ const listSiblingTicketsStatement = db.prepare(`
29
+ SELECT id, state, agent_status
30
+ FROM tickets
31
+ WHERE project_id IS ?
32
+ AND worktree_bundle_id IS ?
33
+ AND id != ?
34
+ `);
35
+ const getStageChangeStatement = db.prepare(`
36
+ SELECT *
37
+ FROM ticket_stage_changes
38
+ WHERE ticket_id = ? AND stage = ?
39
+ LIMIT 1
40
+ `);
41
+ const getTicketUndoFieldsStatement = db.prepare(`
42
+ SELECT id, project_id, worktree_bundle_id, state, agent_status
43
+ FROM tickets
44
+ WHERE id = ?
45
+ LIMIT 1
46
+ `);
47
+ const insertStageChangeStatement = db.prepare(`
48
+ INSERT INTO ticket_stage_changes (
49
+ id,
50
+ ticket_id,
51
+ project_id,
52
+ worktree_bundle_id,
53
+ branch,
54
+ stage,
55
+ baseline_snapshot_path,
56
+ baseline_build_completed_at,
57
+ baseline_session_id,
58
+ diff_text,
59
+ changed_files_json,
60
+ diff_stats_json,
61
+ success_revision,
62
+ last_success_at
63
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
64
+ `);
65
+ const updateStageChangeStatement = db.prepare(`
66
+ UPDATE ticket_stage_changes
67
+ SET
68
+ project_id = ?,
69
+ worktree_bundle_id = ?,
70
+ branch = ?,
71
+ baseline_snapshot_path = ?,
72
+ baseline_build_completed_at = ?,
73
+ baseline_session_id = ?,
74
+ diff_text = ?,
75
+ changed_files_json = ?,
76
+ diff_stats_json = ?,
77
+ success_revision = ?,
78
+ last_success_at = ?,
79
+ updated_at = CURRENT_TIMESTAMP
80
+ WHERE id = ?
81
+ `);
82
+ const deleteStageChangeStatement = db.prepare('DELETE FROM ticket_stage_changes WHERE ticket_id = ? AND stage = ?');
83
+ const parseDiffStats = (value) => {
84
+ if (!value) {
85
+ return null;
86
+ }
87
+ try {
88
+ return JSON.parse(value);
89
+ }
90
+ catch {
91
+ return null;
92
+ }
93
+ };
94
+ const parseChangedFiles = (value) => {
95
+ if (!value) {
96
+ return [];
97
+ }
98
+ try {
99
+ const parsed = JSON.parse(value);
100
+ return Array.isArray(parsed) ? parsed : [];
101
+ }
102
+ catch {
103
+ return [];
104
+ }
105
+ };
106
+ const summarizeFiles = (files) => {
107
+ const additions = files.reduce((sum, entry) => sum + entry.additions, 0);
108
+ const deletions = files.reduce((sum, entry) => sum + entry.deletions, 0);
109
+ return {
110
+ files_changed: files.length,
111
+ additions,
112
+ deletions,
113
+ is_dirty: files.length > 0,
114
+ };
115
+ };
116
+ const getStageSnapshotRoot = (ticketId, stage) => join(STAGE_ROOT, ticketId, stage);
117
+ const clearDirectory = (path) => {
118
+ rmSync(path, { recursive: true, force: true });
119
+ mkdirSync(path, { recursive: true });
120
+ };
121
+ const clearDirectoryContents = (path) => {
122
+ mkdirSync(path, { recursive: true });
123
+ const entries = readdirSync(path, { withFileTypes: true });
124
+ for (const entry of entries) {
125
+ if (entry.name === '.git') {
126
+ continue;
127
+ }
128
+ rmSync(join(path, entry.name), { recursive: true, force: true });
129
+ }
130
+ };
131
+ const ensureParentDirectory = (path) => {
132
+ mkdirSync(dirname(path), { recursive: true });
133
+ };
134
+ const copyTree = (sourceRoot, targetRoot) => {
135
+ clearDirectory(targetRoot);
136
+ if (!existsSync(sourceRoot)) {
137
+ return;
138
+ }
139
+ cpSync(sourceRoot, targetRoot, { recursive: true, force: true });
140
+ };
141
+ const removeExtraneousEntries = (targetRoot, snapshotRoot) => {
142
+ if (!existsSync(targetRoot)) {
143
+ return;
144
+ }
145
+ if (!existsSync(snapshotRoot)) {
146
+ clearDirectory(targetRoot);
147
+ return;
148
+ }
149
+ const entries = readdirSync(targetRoot, { withFileTypes: true });
150
+ for (const entry of entries) {
151
+ const targetPath = join(targetRoot, entry.name);
152
+ const snapshotPath = join(snapshotRoot, entry.name);
153
+ if (!existsSync(snapshotPath)) {
154
+ rmSync(targetPath, { recursive: true, force: true });
155
+ continue;
156
+ }
157
+ if (entry.isDirectory()) {
158
+ removeExtraneousEntries(targetPath, snapshotPath);
159
+ }
160
+ }
161
+ };
162
+ const createManifestPath = (snapshotRoot) => join(snapshotRoot, '.archon-stage-manifest.json');
163
+ const createSnapshotManifest = (snapshotRoot) => {
164
+ const files = [];
165
+ const walk = (currentRoot) => {
166
+ if (!existsSync(currentRoot)) {
167
+ return;
168
+ }
169
+ const entries = readdirSync(currentRoot, { withFileTypes: true });
170
+ for (const entry of entries) {
171
+ if (entry.name === '.archon-stage-manifest.json') {
172
+ continue;
173
+ }
174
+ const absolutePath = join(currentRoot, entry.name);
175
+ const relativePath = relative(snapshotRoot, absolutePath);
176
+ files.push(relativePath);
177
+ if (entry.isDirectory()) {
178
+ walk(absolutePath);
179
+ }
180
+ }
181
+ };
182
+ walk(snapshotRoot);
183
+ writeFileSync(createManifestPath(snapshotRoot), JSON.stringify({ files }, null, 2), 'utf8');
184
+ };
185
+ const clearDirectoryAsync = async (path) => {
186
+ await rmAsync(path, { recursive: true, force: true });
187
+ await mkdirAsync(path, { recursive: true });
188
+ };
189
+ const copyTreeAsync = async (sourceRoot, targetRoot) => {
190
+ await clearDirectoryAsync(targetRoot);
191
+ if (!existsSync(sourceRoot)) {
192
+ return;
193
+ }
194
+ await cpAsync(sourceRoot, targetRoot, { recursive: true, force: true });
195
+ };
196
+ const createSnapshotManifestAsync = async (snapshotRoot) => {
197
+ const files = [];
198
+ const walk = async (currentRoot) => {
199
+ if (!existsSync(currentRoot)) {
200
+ return;
201
+ }
202
+ const entries = await readdirAsync(currentRoot, { withFileTypes: true });
203
+ for (const entry of entries) {
204
+ if (entry.name === '.archon-stage-manifest.json') {
205
+ continue;
206
+ }
207
+ const absolutePath = join(currentRoot, entry.name);
208
+ const relativePath = relative(snapshotRoot, absolutePath);
209
+ files.push(relativePath);
210
+ if (entry.isDirectory()) {
211
+ await walk(absolutePath);
212
+ }
213
+ }
214
+ };
215
+ await walk(snapshotRoot);
216
+ await writeFileAsync(createManifestPath(snapshotRoot), JSON.stringify({ files }, null, 2), 'utf8');
217
+ };
218
+ const readSnapshotManifest = (snapshotRoot) => {
219
+ const manifestPath = createManifestPath(snapshotRoot);
220
+ if (!existsSync(manifestPath)) {
221
+ return [];
222
+ }
223
+ try {
224
+ const parsed = JSON.parse(readFileSync(manifestPath, 'utf8'));
225
+ return Array.isArray(parsed.files) ? parsed.files : [];
226
+ }
227
+ catch {
228
+ return [];
229
+ }
230
+ };
231
+ const restoreSnapshot = (snapshotRoot, targetRoot) => {
232
+ mkdirSync(targetRoot, { recursive: true });
233
+ clearDirectoryContents(targetRoot);
234
+ const manifestFiles = readSnapshotManifest(snapshotRoot);
235
+ if (manifestFiles.length > 0) {
236
+ for (const relativePath of manifestFiles) {
237
+ const snapshotPath = join(snapshotRoot, relativePath);
238
+ const targetPath = join(targetRoot, relativePath);
239
+ if (!existsSync(snapshotPath)) {
240
+ rmSync(targetPath, { recursive: true, force: true });
241
+ continue;
242
+ }
243
+ ensureParentDirectory(targetPath);
244
+ const snapshotStat = lstatSync(snapshotPath);
245
+ if (snapshotStat.isDirectory()) {
246
+ mkdirSync(targetPath, { recursive: true });
247
+ }
248
+ else if (snapshotStat.isSymbolicLink()) {
249
+ symlinkSync(readlinkSync(snapshotPath), targetPath);
250
+ }
251
+ else {
252
+ cpSync(snapshotPath, targetPath, { force: true });
253
+ }
254
+ }
255
+ removeExtraneousEntries(targetRoot, snapshotRoot);
256
+ rmSync(join(targetRoot, '.archon-stage-manifest.json'), { force: true });
257
+ return;
258
+ }
259
+ if (existsSync(snapshotRoot)) {
260
+ const entries = readdirSync(snapshotRoot, { withFileTypes: true });
261
+ for (const entry of entries) {
262
+ if (entry.name === '.archon-stage-manifest.json') {
263
+ continue;
264
+ }
265
+ const snapshotPath = join(snapshotRoot, entry.name);
266
+ const targetPath = join(targetRoot, entry.name);
267
+ cpSync(snapshotPath, targetPath, { recursive: true, force: true });
268
+ }
269
+ }
270
+ removeExtraneousEntries(targetRoot, snapshotRoot);
271
+ rmSync(join(targetRoot, '.archon-stage-manifest.json'), { force: true });
272
+ };
273
+ const serializeFiles = (files) => JSON.stringify(files);
274
+ const serializeStats = (stats) => JSON.stringify(stats);
275
+ const toStageChange = (row) => row ?? null;
276
+ const getTicketUndoFields = (ticketId) => {
277
+ return getTicketUndoFieldsStatement.get(ticketId) ?? null;
278
+ };
279
+ const readStageChange = (ticketId, stage) => {
280
+ return toStageChange(getStageChangeStatement.get(ticketId, stage));
281
+ };
282
+ export const getTicketStageChange = (ticketId, stage) => {
283
+ return readStageChange(ticketId, stage);
284
+ };
285
+ const getBaselineSnapshotPath = (ticketId, stage) => join(getStageSnapshotRoot(ticketId, stage), 'baseline');
286
+ const captureBaselineSnapshot = (ticket, stage) => {
287
+ const project = getEffectiveProject(ticket);
288
+ const branch = resolveTicketBranch(ticket);
289
+ if (!project || !branch) {
290
+ return null;
291
+ }
292
+ const snapshotRoot = getStageSnapshotRoot(ticket.id, stage);
293
+ const baselinePath = getBaselineSnapshotPath(ticket.id, stage);
294
+ const worktreePath = ticket.bundle?.kind === 'project_root' ? project.repo_path : resolveWorktreePath(branch, project);
295
+ mkdirSync(snapshotRoot, { recursive: true });
296
+ copyTree(worktreePath, baselinePath);
297
+ createSnapshotManifest(baselinePath);
298
+ return baselinePath;
299
+ };
300
+ const captureBaselineSnapshotAsync = async (ticket, stage) => {
301
+ const project = getEffectiveProject(ticket);
302
+ const branch = resolveTicketBranch(ticket);
303
+ if (!project || !branch) {
304
+ return null;
305
+ }
306
+ const snapshotRoot = getStageSnapshotRoot(ticket.id, stage);
307
+ const baselinePath = getBaselineSnapshotPath(ticket.id, stage);
308
+ const worktreePath = ticket.bundle?.kind === 'project_root' ? project.repo_path : resolveWorktreePath(branch, project);
309
+ await mkdirAsync(snapshotRoot, { recursive: true });
310
+ await copyTreeAsync(worktreePath, baselinePath);
311
+ await createSnapshotManifestAsync(baselinePath);
312
+ return baselinePath;
313
+ };
314
+ const writeStageChange = ({ ticket, stage, baselineSnapshotPath, successRevision, }) => {
315
+ const project = getEffectiveProject(ticket);
316
+ const branch = resolveTicketBranch(ticket);
317
+ if (!project || !branch || !ticket.worktree_bundle_id) {
318
+ return;
319
+ }
320
+ const cwd = ticket.bundle?.kind === 'project_root' ? project.repo_path : resolveWorktreePath(branch, project);
321
+ const files = getGitDiffFiles(cwd);
322
+ const stats = summarizeFiles(files);
323
+ const diffText = getGitUnifiedDiff(cwd);
324
+ const existing = readStageChange(ticket.id, stage);
325
+ if (existing) {
326
+ updateStageChangeStatement.run(ticket.project_id, ticket.worktree_bundle_id, branch, baselineSnapshotPath, stage === 'review' ? ticket.build_completed_at : null, ticket.session_id, diffText, serializeFiles(files), serializeStats(stats), successRevision, new Date().toISOString(), existing.id);
327
+ return;
328
+ }
329
+ insertStageChangeStatement.run(randomUUID(), ticket.id, ticket.project_id, ticket.worktree_bundle_id, branch, stage, baselineSnapshotPath, stage === 'review' ? ticket.build_completed_at : null, ticket.session_id, diffText, serializeFiles(files), serializeStats(stats), successRevision, new Date().toISOString());
330
+ };
331
+ const bumpRevision = (current) => {
332
+ return (current?.success_revision ?? 0) + 1;
333
+ };
334
+ const getActiveBundleStageHead = (ticket, stage) => {
335
+ if (!ticket.project_id || !ticket.worktree_bundle_id) {
336
+ return null;
337
+ }
338
+ const rows = listStageChangesByBundleAndStageStatement.all(ticket.project_id, ticket.worktree_bundle_id, stage);
339
+ return rows[0] ?? null;
340
+ };
341
+ const getActiveBundleHead = (ticket) => {
342
+ if (!ticket.project_id || !ticket.worktree_bundle_id) {
343
+ return null;
344
+ }
345
+ const rows = listStageChangesByBundleStatement.all(ticket.project_id, ticket.worktree_bundle_id);
346
+ return rows[0] ?? null;
347
+ };
348
+ export const getActiveBundleStageChangeHead = (ticket, stage) => {
349
+ return getActiveBundleStageHead(ticket, stage);
350
+ };
351
+ const deleteStageSnapshotFiles = (ticketId, stage) => {
352
+ rmSync(getStageSnapshotRoot(ticketId, stage), { recursive: true, force: true });
353
+ };
354
+ const getSharedWorktreeBuildReason = (ticket) => {
355
+ const rows = listSiblingTicketsStatement.all(ticket.project_id, ticket.worktree_bundle_id, ticket.id);
356
+ const hasSiblingWithUnfinishedBuild = rows.some(row => row.state === 'build' && row.agent_status !== 'done');
357
+ return hasSiblingWithUnfinishedBuild ? 'Another ticket in this shared worktree has not finished its build yet' : null;
358
+ };
359
+ const getReviewUndoReason = (ticket, stageChange) => {
360
+ const sharedWorktreeBuildReason = getSharedWorktreeBuildReason(ticket);
361
+ if (sharedWorktreeBuildReason) {
362
+ return sharedWorktreeBuildReason;
363
+ }
364
+ if (ticket.is_running) {
365
+ return 'Stop the active Run before undoing this ticket';
366
+ }
367
+ if (ticket.agent_status === 'running') {
368
+ return 'Ticket is currently running';
369
+ }
370
+ if (ticket.state !== 'review') {
371
+ return null;
372
+ }
373
+ if (!stageChange || (stageChange.success_revision ?? 0) < 1 || !stageChange.baseline_snapshot_path) {
374
+ return 'No saved review changes are available to undo';
375
+ }
376
+ const latest = getActiveBundleHead(ticket);
377
+ if (latest && latest.ticket_id !== ticket.id) {
378
+ return 'Newer bundle ticket changes must be undone first';
379
+ }
380
+ return null;
381
+ };
382
+ const getBuildUndoReason = (ticket, stageChange) => {
383
+ const sharedWorktreeBuildReason = getSharedWorktreeBuildReason(ticket);
384
+ if (sharedWorktreeBuildReason) {
385
+ return sharedWorktreeBuildReason;
386
+ }
387
+ if (ticket.is_running) {
388
+ return 'Stop the active Run before undoing this ticket';
389
+ }
390
+ if (ticket.agent_status === 'running') {
391
+ return 'Ticket is currently running';
392
+ }
393
+ if (ticket.state !== 'build') {
394
+ return null;
395
+ }
396
+ if (!stageChange || (stageChange.success_revision ?? 0) < 1 || !stageChange.baseline_snapshot_path) {
397
+ return 'No saved build changes are available to undo';
398
+ }
399
+ const reviewChange = readStageChange(ticket.id, 'review');
400
+ if (reviewChange && (reviewChange.success_revision ?? 0) > 0) {
401
+ return 'Undo Review first';
402
+ }
403
+ const latest = getActiveBundleHead(ticket);
404
+ if (latest && latest.ticket_id !== ticket.id) {
405
+ return 'Newer bundle ticket changes must be undone first';
406
+ }
407
+ return null;
408
+ };
409
+ const resolveBundleReviewUndoTarget = (ticket) => {
410
+ const bundleReviewHead = getActiveBundleStageHead(ticket, 'review');
411
+ if (!bundleReviewHead) {
412
+ return {
413
+ owner: ticket,
414
+ stageChange: readStageChange(ticket.id, 'review'),
415
+ };
416
+ }
417
+ const ownerFields = getTicketUndoFields(bundleReviewHead.ticket_id);
418
+ if (!ownerFields) {
419
+ return {
420
+ owner: ticket,
421
+ stageChange: bundleReviewHead,
422
+ };
423
+ }
424
+ return {
425
+ owner: { ...ticket, ...ownerFields },
426
+ stageChange: bundleReviewHead,
427
+ };
428
+ };
429
+ export const getTicketUndo = (ticket) => {
430
+ if (ticket.state === 'review') {
431
+ const reviewUndoTarget = ticket.project_id && ticket.worktree_bundle_id
432
+ ? resolveBundleReviewUndoTarget(ticket)
433
+ : {
434
+ owner: ticket,
435
+ stageChange: readStageChange(ticket.id, 'review'),
436
+ };
437
+ const reason = getReviewUndoReason(reviewUndoTarget.owner, reviewUndoTarget.stageChange);
438
+ return {
439
+ can_undo: reason === null,
440
+ stage: 'review',
441
+ reason,
442
+ };
443
+ }
444
+ if (ticket.state === 'build') {
445
+ const reason = getBuildUndoReason(ticket, readStageChange(ticket.id, 'build'));
446
+ return {
447
+ can_undo: reason === null,
448
+ stage: 'build',
449
+ reason,
450
+ };
451
+ }
452
+ return {
453
+ can_undo: false,
454
+ stage: null,
455
+ reason: null,
456
+ };
457
+ };
458
+ export const captureStageBaseline = async (ticketId, stage) => {
459
+ const ticket = getTicket(ticketId);
460
+ if (!ticket) {
461
+ return;
462
+ }
463
+ const existing = readStageChange(ticket.id, stage);
464
+ if (existing?.baseline_snapshot_path && existsSync(existing.baseline_snapshot_path)) {
465
+ return;
466
+ }
467
+ const baselineSnapshotPath = await captureBaselineSnapshotAsync(ticket, stage);
468
+ if (!baselineSnapshotPath) {
469
+ return;
470
+ }
471
+ const existingAfterBaseline = readStageChange(ticket.id, stage);
472
+ if (existingAfterBaseline) {
473
+ updateStageChangeStatement.run(ticket.project_id, ticket.worktree_bundle_id, resolveTicketBranch(ticket), baselineSnapshotPath, stage === 'review' ? ticket.build_completed_at : null, ticket.session_id, existingAfterBaseline.diff_text, existingAfterBaseline.changed_files_json, existingAfterBaseline.diff_stats_json, existingAfterBaseline.success_revision ?? 0, existingAfterBaseline.last_success_at, existingAfterBaseline.id);
474
+ return;
475
+ }
476
+ insertStageChangeStatement.run(randomUUID(), ticket.id, ticket.project_id, ticket.worktree_bundle_id, resolveTicketBranch(ticket), stage, baselineSnapshotPath, stage === 'review' ? ticket.build_completed_at : null, ticket.session_id, null, serializeFiles([]), serializeStats({ files_changed: 0, additions: 0, deletions: 0, is_dirty: false }), 0, null);
477
+ };
478
+ export const captureStageSuccess = (ticketId, stage) => {
479
+ const ticket = getTicket(ticketId);
480
+ if (!ticket) {
481
+ return;
482
+ }
483
+ const current = readStageChange(ticket.id, stage);
484
+ const baselineSnapshotPath = current?.baseline_snapshot_path ?? captureBaselineSnapshot(ticket, stage);
485
+ if (!baselineSnapshotPath) {
486
+ return;
487
+ }
488
+ writeStageChange({
489
+ ticket,
490
+ stage,
491
+ baselineSnapshotPath,
492
+ successRevision: bumpRevision(current),
493
+ });
494
+ };
495
+ export const clearStageSnapshot = (ticketId, stage) => {
496
+ deleteStageChangeStatement.run(ticketId, stage);
497
+ deleteStageSnapshotFiles(ticketId, stage);
498
+ };
499
+ export const undoTicketStage = (ticketId) => {
500
+ const ticket = getTicket(ticketId);
501
+ if (!ticket) {
502
+ return { ok: false, status: 404, error: 'Not found' };
503
+ }
504
+ const undo = getTicketUndo(ticket);
505
+ if (!undo.stage || !undo.can_undo) {
506
+ return { ok: false, status: 409, error: undo.reason ?? 'Undo is not available for this ticket' };
507
+ }
508
+ const stageChange = readStageChange(ticket.id, undo.stage);
509
+ if (!stageChange?.baseline_snapshot_path) {
510
+ return { ok: false, status: 409, error: 'Saved undo state is missing for this ticket' };
511
+ }
512
+ const project = getEffectiveProject(ticket);
513
+ const branch = resolveTicketBranch(ticket);
514
+ if (!project || !branch) {
515
+ return { ok: false, status: 400, error: 'Worktree not ready yet' };
516
+ }
517
+ const targetRoot = ticket.bundle?.kind === 'project_root' ? project.repo_path : resolveWorktreePath(branch, project);
518
+ restoreSnapshot(stageChange.baseline_snapshot_path, targetRoot);
519
+ if (undo.stage === 'review') {
520
+ const laneOrder = assignTicketLaneOrder({ ...ticket, state: 'build' });
521
+ db.prepare('UPDATE tickets SET state = ?, agent_status = ?, agent_log = NULL, streaming_response = NULL, build_completed_at = ?, lane_order = ?, updated_at = CURRENT_TIMESTAMP WHERE id = ?').run('build', 'done', stageChange.baseline_build_completed_at, laneOrder ?? null, ticket.id);
522
+ clearStageSnapshot(ticket.id, 'review');
523
+ const updated = getTicket(ticket.id);
524
+ if (!updated) {
525
+ return { ok: false, status: 404, error: 'Not found' };
526
+ }
527
+ return { ok: true, ticket: updated };
528
+ }
529
+ const laneOrder = assignTicketLaneOrder({ ...ticket, state: 'plan' });
530
+ db.prepare('UPDATE tickets SET state = ?, agent_status = NULL, agent_log = NULL, streaming_response = NULL, build_completed_at = NULL, lane_order = ?, updated_at = CURRENT_TIMESTAMP WHERE id = ?').run('plan', laneOrder ?? null, ticket.id);
531
+ clearStageSnapshot(ticket.id, 'review');
532
+ clearStageSnapshot(ticket.id, 'build');
533
+ const updated = getTicket(ticket.id);
534
+ if (!updated) {
535
+ return { ok: false, status: 404, error: 'Not found' };
536
+ }
537
+ return { ok: true, ticket: updated };
538
+ };
539
+ export const listSavedStageDiffFiles = (ticketId, stage) => {
540
+ return parseChangedFiles(readStageChange(ticketId, stage)?.changed_files_json ?? null);
541
+ };
542
+ export const getSavedStageDiffStats = (ticketId, stage) => {
543
+ const stats = parseDiffStats(readStageChange(ticketId, stage)?.diff_stats_json ?? null);
544
+ return stats ?? summarizeFiles(listSavedStageDiffFiles(ticketId, stage));
545
+ };
546
+ export const getSavedStageDiffText = (ticketId, stage) => {
547
+ return readStageChange(ticketId, stage)?.diff_text ?? '';
548
+ };
549
+ //# sourceMappingURL=ticketUndo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ticketUndo.js","sourceRoot":"","sources":["../../../server/lib/ticketUndo.ts"],"names":[],"mappings":"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"}