steroids-cli 0.9.11 → 0.9.12

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 (49) hide show
  1. package/dist/parallel/merge-commit-checks.d.ts +6 -0
  2. package/dist/parallel/merge-commit-checks.d.ts.map +1 -0
  3. package/dist/parallel/merge-commit-checks.js +28 -0
  4. package/dist/parallel/merge-commit-checks.js.map +1 -0
  5. package/dist/parallel/merge-process.d.ts +21 -0
  6. package/dist/parallel/merge-process.d.ts.map +1 -0
  7. package/dist/parallel/merge-process.js +104 -0
  8. package/dist/parallel/merge-process.js.map +1 -0
  9. package/dist/parallel/merge-sealing.d.ts +11 -0
  10. package/dist/parallel/merge-sealing.d.ts.map +1 -0
  11. package/dist/parallel/merge-sealing.js +64 -0
  12. package/dist/parallel/merge-sealing.js.map +1 -0
  13. package/dist/parallel/merge-validation.d.ts +6 -0
  14. package/dist/parallel/merge-validation.d.ts.map +1 -0
  15. package/dist/parallel/merge-validation.js +57 -0
  16. package/dist/parallel/merge-validation.js.map +1 -0
  17. package/dist/parallel/merge-workspace.d.ts +8 -0
  18. package/dist/parallel/merge-workspace.d.ts.map +1 -0
  19. package/dist/parallel/merge-workspace.js +37 -0
  20. package/dist/parallel/merge-workspace.js.map +1 -0
  21. package/dist/parallel/merge.d.ts +2 -5
  22. package/dist/parallel/merge.d.ts.map +1 -1
  23. package/dist/parallel/merge.js +14 -245
  24. package/dist/parallel/merge.js.map +1 -1
  25. package/dist/runners/wakeup-checks.d.ts +14 -0
  26. package/dist/runners/wakeup-checks.d.ts.map +1 -0
  27. package/dist/runners/wakeup-checks.js +85 -0
  28. package/dist/runners/wakeup-checks.js.map +1 -0
  29. package/dist/runners/wakeup-reconcile.d.ts +10 -0
  30. package/dist/runners/wakeup-reconcile.d.ts.map +1 -0
  31. package/dist/runners/wakeup-reconcile.js +84 -0
  32. package/dist/runners/wakeup-reconcile.js.map +1 -0
  33. package/dist/runners/wakeup-runner.d.ts +18 -0
  34. package/dist/runners/wakeup-runner.d.ts.map +1 -0
  35. package/dist/runners/wakeup-runner.js +47 -0
  36. package/dist/runners/wakeup-runner.js.map +1 -0
  37. package/dist/runners/wakeup-sanitise.d.ts +24 -0
  38. package/dist/runners/wakeup-sanitise.d.ts.map +1 -0
  39. package/dist/runners/wakeup-sanitise.js +247 -0
  40. package/dist/runners/wakeup-sanitise.js.map +1 -0
  41. package/dist/runners/wakeup-timing.d.ts +12 -0
  42. package/dist/runners/wakeup-timing.d.ts.map +1 -0
  43. package/dist/runners/wakeup-timing.js +37 -0
  44. package/dist/runners/wakeup-timing.js.map +1 -0
  45. package/dist/runners/wakeup.d.ts +7 -8
  46. package/dist/runners/wakeup.d.ts.map +1 -1
  47. package/dist/runners/wakeup.js +26 -464
  48. package/dist/runners/wakeup.js.map +1 -1
  49. package/package.json +1 -1
@@ -4,258 +4,27 @@
4
4
  * Cherry-picks completed workstream branches into main with crash-safe progress tracking.
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.ParallelMergeError = void 0;
7
+ exports.cleanupWorkspaceState = exports.ParallelMergeError = void 0;
8
8
  exports.runParallelMerge = runParallelMerge;
9
- exports.getNowISOString = getNowISOString;
10
- exports.cleanupWorkspaceState = cleanupWorkspaceState;
11
9
  const node_path_1 = require("node:path");
12
10
  const node_fs_1 = require("node:fs");
13
- const node_child_process_1 = require("node:child_process");
14
11
  const clone_js_1 = require("./clone.js");
15
- const clone_js_2 = require("./clone.js");
16
- const clone_js_3 = require("./clone.js");
17
12
  const connection_js_1 = require("../database/connection.js");
18
13
  const global_db_js_1 = require("../runners/global-db.js");
19
14
  const merge_git_js_1 = require("./merge-git.js");
20
15
  const merge_lock_js_1 = require("./merge-lock.js");
21
16
  const merge_progress_js_1 = require("./merge-progress.js");
22
- const merge_conflict_js_1 = require("./merge-conflict.js");
23
17
  const merge_errors_js_1 = require("./merge-errors.js");
24
18
  Object.defineProperty(exports, "ParallelMergeError", { enumerable: true, get: function () { return merge_errors_js_1.ParallelMergeError; } });
19
+ const merge_validation_js_1 = require("./merge-validation.js");
20
+ const merge_workspace_js_1 = require("./merge-workspace.js");
21
+ Object.defineProperty(exports, "cleanupWorkspaceState", { enumerable: true, get: function () { return merge_workspace_js_1.cleanupWorkspaceState; } });
22
+ const merge_sealing_js_1 = require("./merge-sealing.js");
23
+ const merge_process_js_1 = require("./merge-process.js");
25
24
  const DEFAULT_REMOTE = 'origin';
26
25
  const DEFAULT_MAIN_BRANCH = 'main';
27
26
  const DEFAULT_LOCK_TIMEOUT_MINUTES = 120;
28
27
  const DEFAULT_HEARTBEAT_INTERVAL_MS = 30_000;
29
- const VALIDATION_MAX_BUFFER_BYTES = 20 * 1024 * 1024;
30
- const VALIDATION_SNIPPET_LIMIT = 8_000;
31
- function getNowISOString() {
32
- return new Date().toISOString();
33
- }
34
- function ensureMergeWorkingTree(projectPath) {
35
- const lines = (0, merge_git_js_1.gitStatusLines)(projectPath);
36
- if (lines.length === 0)
37
- return;
38
- if (!(0, merge_git_js_1.hasCherryPickInProgress)(projectPath)) {
39
- throw new merge_errors_js_1.ParallelMergeError('Working tree is dirty. Commit or stash changes before merging.', 'DIRTY_WORKTREE');
40
- }
41
- }
42
- function cleanupWorkspaceState(projectPath, workspaceRoot, workstreamIds, options) {
43
- if (!options.cleanupOnSuccess)
44
- return;
45
- const baseRoot = (0, node_path_1.resolve)(workspaceRoot);
46
- const hash = (0, clone_js_2.getProjectHash)(projectPath);
47
- const projectWorkspaceRoot = (0, node_path_1.resolve)(baseRoot, hash);
48
- if (!projectWorkspaceRoot.startsWith(baseRoot)) {
49
- return;
50
- }
51
- for (const workstreamId of workstreamIds) {
52
- const folder = (0, node_path_1.resolve)(projectWorkspaceRoot, workstreamId.startsWith('ws-') ? workstreamId : `ws-${workstreamId}`);
53
- if ((0, node_path_1.resolve)(folder).startsWith(projectWorkspaceRoot)) {
54
- (0, node_fs_1.rmSync)(folder, { recursive: true, force: true });
55
- }
56
- }
57
- }
58
- function runValidationGate(mergePath, validationCommand) {
59
- if (!validationCommand || validationCommand.trim().length === 0) {
60
- return;
61
- }
62
- try {
63
- (0, node_child_process_1.execSync)(validationCommand, {
64
- cwd: mergePath,
65
- stdio: 'pipe',
66
- encoding: 'utf-8',
67
- maxBuffer: VALIDATION_MAX_BUFFER_BYTES,
68
- });
69
- }
70
- catch (error) {
71
- const err = error;
72
- const stderr = typeof err.stderr === 'string' ? err.stderr : err.stderr?.toString() ?? '';
73
- const stdout = typeof err.stdout === 'string' ? err.stdout : err.stdout?.toString() ?? '';
74
- if (err.code === 'ENOBUFS') {
75
- throw new merge_errors_js_1.ParallelMergeError('Validation gate output exceeded the maximum buffer size. Reduce output verbosity or split the command.', 'VALIDATION_FAILED', {
76
- details: {
77
- command: validationCommand.trim(),
78
- stderr: stderr ?? '',
79
- stdout: stdout ?? '',
80
- },
81
- });
82
- }
83
- const message = [stderr, stdout, err.message].filter(Boolean).join('\n') || String(error);
84
- throw new merge_errors_js_1.ParallelMergeError(`Validation gate failed: ${message}`, 'VALIDATION_FAILED', {
85
- details: {
86
- command: validationCommand.trim(),
87
- stderr,
88
- stdout,
89
- },
90
- });
91
- }
92
- }
93
- function snippet(value, limit = VALIDATION_SNIPPET_LIMIT) {
94
- if (!value) {
95
- return '';
96
- }
97
- const trimmed = value.trim();
98
- if (trimmed.length <= limit) {
99
- return trimmed;
100
- }
101
- return trimmed.slice(-limit);
102
- }
103
- function isAppliedCommitIntegrated(projectPath, commitSha) {
104
- if (!commitSha) {
105
- return false;
106
- }
107
- const output = (0, merge_git_js_1.runGitCommand)(projectPath, ['branch', '--contains', commitSha, '--list', 'HEAD'], { allowFailure: true });
108
- const lower = output.toLowerCase();
109
- if (lower.includes('fatal:') || lower.includes('error:')) {
110
- return false;
111
- }
112
- return output.trim().length > 0;
113
- }
114
- function resolveGitSha(output) {
115
- const trimmed = output.trim();
116
- if (!trimmed)
117
- return null;
118
- if (/fatal:|error:/i.test(trimmed))
119
- return null;
120
- return trimmed.split('\n').at(-1)?.trim() ?? null;
121
- }
122
- function sealWorkstreamsForMerge(mergeDb, sessionId, runnerId, lockEpoch, mergePath, remote, mainBranch, workstreams) {
123
- const { db, close } = (0, global_db_js_1.openGlobalDatabase)();
124
- try {
125
- const sealedEntries = [];
126
- (0, merge_lock_js_1.assertMergeLockEpoch)(mergeDb, sessionId, runnerId, lockEpoch);
127
- for (let index = 0; index < workstreams.length; index += 1) {
128
- (0, merge_lock_js_1.assertMergeLockEpoch)(mergeDb, sessionId, runnerId, lockEpoch);
129
- const stream = workstreams[index];
130
- const commits = (0, merge_git_js_1.getWorkstreamCommitList)(mergePath, remote, stream.branchName, mainBranch);
131
- const sealedHeadSha = resolveGitSha((0, merge_git_js_1.runGitCommand)(mergePath, ['rev-parse', `${remote}/${stream.branchName}`], { allowFailure: true }));
132
- const sealedBaseSha = resolveGitSha((0, merge_git_js_1.runGitCommand)(mergePath, ['merge-base', `${remote}/${mainBranch}`, `${remote}/${stream.branchName}`], { allowFailure: true }));
133
- if (!sealedHeadSha || !sealedBaseSha) {
134
- throw new merge_errors_js_1.ParallelMergeError(`Could not resolve sealed merge SHAs for ${remote}/${stream.branchName}`, 'REMOTE_BRANCH_MISSING');
135
- }
136
- sealedEntries.push({
137
- streamId: stream.id,
138
- sealedBaseSha,
139
- sealedHeadSha,
140
- commits,
141
- completionOrder: index + 1,
142
- });
143
- }
144
- const applySealedUpdates = db.transaction(() => {
145
- for (const entry of sealedEntries) {
146
- const update = db.prepare(`UPDATE workstreams
147
- SET sealed_base_sha = ?,
148
- sealed_head_sha = ?,
149
- sealed_commit_shas = ?,
150
- completion_order = COALESCE(completion_order, ?),
151
- completed_at = COALESCE(completed_at, datetime('now')),
152
- status = 'completed'
153
- WHERE session_id = ?
154
- AND id = ?
155
- AND status IN ('running', 'completed')`).run(entry.sealedBaseSha, entry.sealedHeadSha, JSON.stringify(entry.commits), entry.completionOrder, sessionId, entry.streamId);
156
- if (update.changes !== 1) {
157
- throw new merge_errors_js_1.ParallelMergeError(`Workstream lease check failed while sealing ${entry.streamId}`, 'LEASE_FENCE_FAILED');
158
- }
159
- }
160
- });
161
- applySealedUpdates();
162
- }
163
- finally {
164
- close();
165
- }
166
- }
167
- async function processWorkstream(db, projectPath, sessionId, workstream, mainBranch, remote, progressRows, heartbeat) {
168
- const summary = { applied: 0, skipped: 0, conflicts: 0 };
169
- const commits = (0, merge_git_js_1.getWorkstreamCommitList)(projectPath, remote, workstream.branchName, mainBranch);
170
- if (commits.length === 0) {
171
- return summary;
172
- }
173
- const workstreamProgress = (0, merge_progress_js_1.getMergeProgressForWorkstream)(progressRows, workstream.id);
174
- const workstreamLookup = new Map();
175
- for (const row of workstreamProgress) {
176
- workstreamLookup.set(row.position, row);
177
- }
178
- for (let position = 0; position < commits.length; position += 1) {
179
- const commitSha = commits[position];
180
- const shortSha = (0, merge_git_js_1.getCommitShortSha)(commitSha);
181
- const prior = workstreamLookup.get(position);
182
- if (prior?.status === 'applied' && prior.commit_sha === commitSha) {
183
- if (isAppliedCommitIntegrated(projectPath, prior.applied_commit_sha)) {
184
- summary.applied += 1;
185
- continue;
186
- }
187
- (0, merge_progress_js_1.clearProgressEntry)(db, sessionId, workstream.id, position);
188
- }
189
- if (prior?.status === 'skipped' && prior.commit_sha === commitSha) {
190
- summary.skipped += 1;
191
- continue;
192
- }
193
- if (prior?.status === 'conflict' && prior.commit_sha === commitSha) {
194
- if ((0, merge_git_js_1.hasCherryPickInProgress)(projectPath)) {
195
- const outcome = await (0, merge_conflict_js_1.runConflictResolutionCycle)({
196
- db,
197
- projectPath,
198
- sessionId,
199
- workstreamId: workstream.id,
200
- runnerId: heartbeat.runnerId,
201
- mergeLockHeartbeat: {
202
- lockEpoch: heartbeat.lockEpoch,
203
- timeoutMinutes: heartbeat.timeoutMinutes,
204
- },
205
- branchName: workstream.branchName,
206
- position,
207
- commitSha,
208
- existingTaskId: prior.conflict_task_id ?? undefined,
209
- });
210
- if (outcome === 'skipped')
211
- summary.skipped += 1;
212
- else
213
- summary.applied += 1;
214
- summary.conflicts += 1;
215
- continue;
216
- }
217
- (0, merge_progress_js_1.clearProgressEntry)(db, sessionId, workstream.id, position);
218
- }
219
- if (prior && prior.commit_sha !== commitSha) {
220
- (0, merge_progress_js_1.clearProgressEntry)(db, sessionId, workstream.id, position);
221
- }
222
- try {
223
- (0, merge_git_js_1.runGitCommand)(projectPath, ['cherry-pick', commitSha]);
224
- const appliedCommitSha = (0, merge_git_js_1.runGitCommand)(projectPath, ['rev-parse', 'HEAD']).trim();
225
- (0, merge_progress_js_1.upsertProgressEntry)(db, sessionId, workstream.id, position, commitSha, 'applied', null, appliedCommitSha);
226
- summary.applied += 1;
227
- }
228
- catch (error) {
229
- const message = error instanceof Error ? error.message : String(error);
230
- if (!/CONFLICT|merge conflict|could not apply|needs merge/i.test(message)) {
231
- throw error;
232
- }
233
- const outcome = await (0, merge_conflict_js_1.runConflictResolutionCycle)({
234
- db,
235
- projectPath,
236
- sessionId,
237
- workstreamId: workstream.id,
238
- runnerId: heartbeat.runnerId,
239
- mergeLockHeartbeat: {
240
- lockEpoch: heartbeat.lockEpoch,
241
- timeoutMinutes: heartbeat.timeoutMinutes,
242
- },
243
- branchName: workstream.branchName,
244
- position,
245
- commitSha,
246
- });
247
- if (outcome === 'skipped') {
248
- summary.skipped += 1;
249
- }
250
- else {
251
- summary.applied += 1;
252
- }
253
- summary.conflicts += 1;
254
- }
255
- (0, merge_lock_js_1.refreshMergeLock)(db, heartbeat.sessionId, heartbeat.runnerId, heartbeat.timeoutMinutes, heartbeat.lockEpoch);
256
- }
257
- return summary;
258
- }
259
28
  /**
260
29
  * Run cherry-pick merge loop across completed workstreams.
261
30
  */
@@ -297,7 +66,7 @@ async function runParallelMerge(options) {
297
66
  lockEpoch = lock.lock?.lock_epoch ?? 0;
298
67
  (0, merge_lock_js_1.assertMergeLockEpoch)(db, sessionId, runnerId, lockEpoch);
299
68
  (0, global_db_js_1.updateParallelSessionStatus)(sessionId, 'merging');
300
- const integrationWorkspace = (0, clone_js_3.createIntegrationWorkspace)({
69
+ const integrationWorkspace = (0, clone_js_1.createIntegrationWorkspace)({
301
70
  projectPath,
302
71
  sessionId,
303
72
  baseBranch: mainBranch,
@@ -317,13 +86,13 @@ async function runParallelMerge(options) {
317
86
  // If heartbeat fails, merge keeps running until lock-dependent operations fail.
318
87
  }
319
88
  }, heartbeatIntervalMs);
320
- ensureMergeWorkingTree(mergePath);
89
+ (0, merge_workspace_js_1.ensureMergeWorkingTree)(mergePath);
321
90
  (0, merge_lock_js_1.assertMergeLockEpoch)(db, sessionId, runnerId, lockEpoch);
322
91
  for (const stream of workstreams) {
323
92
  (0, merge_lock_js_1.assertMergeLockEpoch)(db, sessionId, runnerId, lockEpoch);
324
93
  (0, merge_git_js_1.safeRunMergeCommand)(mergePath, remote, stream.branchName);
325
94
  }
326
- sealWorkstreamsForMerge(db, sessionId, runnerId, lockEpoch, mergePath, remote, mainBranch, workstreams);
95
+ (0, merge_sealing_js_1.sealWorkstreamsForMerge)(db, sessionId, runnerId, lockEpoch, mergePath, remote, mainBranch, workstreams);
327
96
  if (!recoveringFromCherryPick) {
328
97
  const pullOutput = (0, merge_git_js_1.runGitCommand)(mergePath, ['pull', '--ff-only', remote, mainBranch], { allowFailure: true });
329
98
  const pullOutputLower = pullOutput.toLowerCase();
@@ -337,12 +106,12 @@ async function runParallelMerge(options) {
337
106
  }
338
107
  const progressRows = (0, merge_progress_js_1.listMergeProgress)(db, sessionId);
339
108
  for (const workstream of workstreams) {
340
- const stats = await processWorkstream(db, mergePath, sessionId, workstream, mainBranch, remote, progressRows, { sessionId, runnerId, timeoutMinutes: lockTimeoutMinutes, lockEpoch });
109
+ const stats = await (0, merge_process_js_1.processWorkstream)(db, mergePath, sessionId, workstream, mainBranch, remote, progressRows, { sessionId, runnerId, timeoutMinutes: lockTimeoutMinutes, lockEpoch });
341
110
  summary.completedCommits += stats.applied;
342
111
  summary.skipped += stats.skipped;
343
112
  summary.conflicts += stats.conflicts;
344
113
  }
345
- runValidationGate(mergePath, validationCommand);
114
+ (0, merge_validation_js_1.runValidationGate)(mergePath, validationCommand);
346
115
  (0, merge_lock_js_1.assertMergeLockEpoch)(db, sessionId, runnerId, lockEpoch);
347
116
  const pushResult = (0, merge_git_js_1.runGitCommand)(mergePath, ['push', remote, mainBranch], { allowFailure: true });
348
117
  if ((0, merge_git_js_1.isNoPushError)(pushResult)) {
@@ -361,7 +130,7 @@ async function runParallelMerge(options) {
361
130
  }
362
131
  (0, merge_git_js_1.runGitCommand)(mergePath, ['remote', 'prune', remote]);
363
132
  if (cleanupOnSuccess) {
364
- cleanupWorkspaceState(projectPath, workspaceRoot, workstreams.map((stream) => stream.id), {
133
+ (0, merge_workspace_js_1.cleanupWorkspaceState)(projectPath, workspaceRoot, workstreams.map((stream) => stream.id), {
365
134
  cleanupOnSuccess,
366
135
  });
367
136
  if (integrationWorkspacePath) {
@@ -405,8 +174,8 @@ async function runParallelMerge(options) {
405
174
  workspacePath: integrationWorkspacePath ?? mergePath,
406
175
  validationCommand: commandFromError ?? (validationCommand?.trim() || '(not configured)'),
407
176
  errorMessage: message,
408
- stdoutSnippet: snippet(stdoutFromError),
409
- stderrSnippet: snippet(stderrFromError || message),
177
+ stdoutSnippet: (0, merge_validation_js_1.snippet)(stdoutFromError),
178
+ stderrSnippet: (0, merge_validation_js_1.snippet)(stderrFromError || message),
410
179
  });
411
180
  summary.validationEscalationId = escalation.id;
412
181
  summary.validationWorkspacePath = escalation.workspace_path;
@@ -1 +1 @@
1
- {"version":3,"file":"merge.js","sourceRoot":"","sources":["../../src/parallel/merge.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"merge.js","sourceRoot":"","sources":["../../src/parallel/merge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Project state checks for wakeup
3
+ */
4
+ /**
5
+ * Check if a project has pending work
6
+ */
7
+ export declare function projectHasPendingWork(projectPath: string): Promise<boolean>;
8
+ /**
9
+ * Check if there's an active runner for a specific project
10
+ * Exported for use in daemon startup checks
11
+ */
12
+ export declare function hasActiveRunnerForProject(projectPath: string): boolean;
13
+ export declare function hasActiveParallelSessionForProject(projectPath: string): boolean;
14
+ //# sourceMappingURL=wakeup-checks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wakeup-checks.d.ts","sourceRoot":"","sources":["../../src/runners/wakeup-checks.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAuBjF;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAiBtE;AAED,wBAAgB,kCAAkC,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAkC/E"}
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ /**
3
+ * Project state checks for wakeup
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.projectHasPendingWork = projectHasPendingWork;
7
+ exports.hasActiveRunnerForProject = hasActiveRunnerForProject;
8
+ exports.hasActiveParallelSessionForProject = hasActiveParallelSessionForProject;
9
+ const node_fs_1 = require("node:fs");
10
+ const node_path_1 = require("node:path");
11
+ const global_db_js_1 = require("./global-db.js");
12
+ /**
13
+ * Check if a project has pending work
14
+ */
15
+ async function projectHasPendingWork(projectPath) {
16
+ const dbPath = (0, node_path_1.join)(projectPath, '.steroids', 'steroids.db');
17
+ if (!(0, node_fs_1.existsSync)(dbPath)) {
18
+ return false;
19
+ }
20
+ try {
21
+ // Use dynamic import for ESM compatibility
22
+ const { default: Database } = await import('better-sqlite3');
23
+ const db = new Database(dbPath, { readonly: true });
24
+ const result = db
25
+ .prepare(`SELECT COUNT(*) as count FROM tasks
26
+ WHERE status IN ('pending', 'in_progress', 'review')`)
27
+ .get();
28
+ db.close();
29
+ return result.count > 0;
30
+ }
31
+ catch {
32
+ return false;
33
+ }
34
+ }
35
+ /**
36
+ * Check if there's an active runner for a specific project
37
+ * Exported for use in daemon startup checks
38
+ */
39
+ function hasActiveRunnerForProject(projectPath) {
40
+ const { db, close } = (0, global_db_js_1.openGlobalDatabase)();
41
+ try {
42
+ const row = db
43
+ .prepare(`SELECT 1 FROM runners
44
+ WHERE project_path = ?
45
+ AND status != 'stopped'
46
+ AND heartbeat_at > datetime('now', '-5 minutes')
47
+ AND parallel_session_id IS NULL`)
48
+ .get(projectPath);
49
+ return row !== undefined;
50
+ }
51
+ finally {
52
+ close();
53
+ }
54
+ }
55
+ function hasActiveParallelSessionForProject(projectPath) {
56
+ const { db, close } = (0, global_db_js_1.openGlobalDatabase)();
57
+ try {
58
+ // Primary check: session record in non-terminal state.
59
+ const sessionRow = db
60
+ .prepare(`SELECT 1 FROM parallel_sessions
61
+ WHERE project_path = ?
62
+ AND status NOT IN ('completed', 'failed', 'aborted')
63
+ LIMIT 1`)
64
+ .get(projectPath);
65
+ if (sessionRow !== undefined)
66
+ return true;
67
+ // Belt-and-suspenders: if any runner for this project has an active
68
+ // parallel_session_id and a fresh heartbeat, treat it as active even if the
69
+ // session record somehow ended up in a terminal state. This prevents wakeup
70
+ // from spawning a new parallel session while workstream runners are still live.
71
+ const runnerRow = db
72
+ .prepare(`SELECT 1 FROM runners r
73
+ JOIN parallel_sessions ps ON ps.id = r.parallel_session_id
74
+ WHERE ps.project_path = ?
75
+ AND r.status != 'stopped'
76
+ AND r.heartbeat_at > datetime('now', '-5 minutes')
77
+ LIMIT 1`)
78
+ .get(projectPath);
79
+ return runnerRow !== undefined;
80
+ }
81
+ finally {
82
+ close();
83
+ }
84
+ }
85
+ //# sourceMappingURL=wakeup-checks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wakeup-checks.js","sourceRoot":"","sources":["../../src/runners/wakeup-checks.ts"],"names":[],"mappings":";AAAA;;GAEG;;AASH,sDAuBC;AAMD,8DAiBC;AAED,gFAkCC;AAzFD,qCAAqC;AACrC,yCAAiC;AACjC,iDAAoD;AAEpD;;GAEG;AACI,KAAK,UAAU,qBAAqB,CAAC,WAAmB;IAC7D,MAAM,MAAM,GAAG,IAAA,gBAAI,EAAC,WAAW,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;IAC7D,IAAI,CAAC,IAAA,oBAAU,EAAC,MAAM,CAAC,EAAE,CAAC;QACxB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,CAAC;QACH,2CAA2C;QAC3C,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;QAC7D,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAEpD,MAAM,MAAM,GAAG,EAAE;aACd,OAAO,CACN;8DACsD,CACvD;aACA,GAAG,EAAuB,CAAC;QAE9B,EAAE,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAgB,yBAAyB,CAAC,WAAmB;IAC3D,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,IAAA,iCAAkB,GAAE,CAAC;IAC3C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAE;aACX,OAAO,CACN;;;;yCAIiC,CAClC;aACA,GAAG,CAAC,WAAW,CAA8B,CAAC;QAEjD,OAAO,GAAG,KAAK,SAAS,CAAC;IAC3B,CAAC;YAAS,CAAC;QACT,KAAK,EAAE,CAAC;IACV,CAAC;AACH,CAAC;AAED,SAAgB,kCAAkC,CAAC,WAAmB;IACpE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,IAAA,iCAAkB,GAAE,CAAC;IAC3C,IAAI,CAAC;QACH,uDAAuD;QACvD,MAAM,UAAU,GAAG,EAAE;aAClB,OAAO,CACN;;;iBAGS,CACV;aACA,GAAG,CAAC,WAAW,CAA8B,CAAC;QAEjD,IAAI,UAAU,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;QAE1C,oEAAoE;QACpE,4EAA4E;QAC5E,4EAA4E;QAC5E,gFAAgF;QAChF,MAAM,SAAS,GAAG,EAAE;aACjB,OAAO,CACN;;;;;iBAKS,CACV;aACA,GAAG,CAAC,WAAW,CAA8B,CAAC;QAEjD,OAAO,SAAS,KAAK,SAAS,CAAC;IACjC,CAAC;YAAS,CAAC;QACT,KAAK,EAAE,CAAC;IACV,CAAC;AACH,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Parallel session reconciliation for wakeup
3
+ */
4
+ import { openGlobalDatabase } from './global-db.js';
5
+ export declare function releaseExpiredWorkstreamLeases(db: ReturnType<typeof openGlobalDatabase>['db']): number;
6
+ export declare function reconcileParallelSessionRecovery(db: ReturnType<typeof openGlobalDatabase>['db'], projectPath: string): {
7
+ scheduledRetries: number;
8
+ blockedWorkstreams: number;
9
+ };
10
+ //# sourceMappingURL=wakeup-reconcile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wakeup-reconcile.d.ts","sourceRoot":"","sources":["../../src/runners/wakeup-reconcile.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEpD,wBAAgB,8BAA8B,CAC5C,EAAE,EAAE,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC,IAAI,CAAC,GAC9C,MAAM,CAWR;AAED,wBAAgB,gCAAgC,CAC9C,EAAE,EAAE,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC,IAAI,CAAC,EAC/C,WAAW,EAAE,MAAM,GAClB;IAAE,gBAAgB,EAAE,MAAM,CAAC;IAAC,kBAAkB,EAAE,MAAM,CAAA;CAAE,CA4F1D"}
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ /**
3
+ * Parallel session reconciliation for wakeup
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.releaseExpiredWorkstreamLeases = releaseExpiredWorkstreamLeases;
7
+ exports.reconcileParallelSessionRecovery = reconcileParallelSessionRecovery;
8
+ function releaseExpiredWorkstreamLeases(db) {
9
+ const result = db.prepare(`UPDATE workstreams
10
+ SET runner_id = NULL,
11
+ lease_expires_at = NULL
12
+ WHERE status = 'running'
13
+ AND lease_expires_at IS NOT NULL
14
+ AND lease_expires_at <= datetime('now')`).run();
15
+ return result.changes;
16
+ }
17
+ function reconcileParallelSessionRecovery(db, projectPath) {
18
+ const sessions = db
19
+ .prepare(`SELECT id
20
+ FROM parallel_sessions
21
+ WHERE project_path = ?
22
+ AND status NOT IN ('completed', 'failed', 'aborted', 'blocked_validation', 'blocked_recovery')`)
23
+ .all(projectPath);
24
+ let scheduledRetries = 0;
25
+ let blockedWorkstreams = 0;
26
+ for (const session of sessions) {
27
+ let blockedInSession = 0;
28
+ const candidates = db
29
+ .prepare(`SELECT id, recovery_attempts
30
+ FROM workstreams
31
+ WHERE session_id = ?
32
+ AND status = 'running'
33
+ AND (lease_expires_at IS NULL OR lease_expires_at <= datetime('now'))
34
+ AND (next_retry_at IS NULL OR next_retry_at <= datetime('now'))`)
35
+ .all(session.id);
36
+ for (const candidate of candidates) {
37
+ const nextAttempts = (candidate.recovery_attempts ?? 0) + 1;
38
+ if (nextAttempts >= 5) {
39
+ db.prepare(`UPDATE workstreams
40
+ SET status = 'failed',
41
+ recovery_attempts = ?,
42
+ next_retry_at = NULL,
43
+ last_reconcile_action = 'blocked_recovery',
44
+ last_reconciled_at = datetime('now')
45
+ WHERE id = ?`).run(nextAttempts, candidate.id);
46
+ blockedWorkstreams += 1;
47
+ blockedInSession += 1;
48
+ continue;
49
+ }
50
+ const backoffMinutes = Math.min(2 ** nextAttempts, 30);
51
+ db.prepare(`UPDATE workstreams
52
+ SET recovery_attempts = ?,
53
+ next_retry_at = datetime('now', ?),
54
+ last_reconcile_action = 'retry_scheduled',
55
+ last_reconciled_at = datetime('now')
56
+ WHERE id = ?`).run(nextAttempts, `+${backoffMinutes} minutes`, candidate.id);
57
+ scheduledRetries += 1;
58
+ }
59
+ if (blockedInSession > 0) {
60
+ db.prepare(`UPDATE parallel_sessions
61
+ SET status = 'blocked_recovery',
62
+ completed_at = NULL
63
+ WHERE id = ?`).run(session.id);
64
+ continue;
65
+ }
66
+ // If all workstreams are in a terminal state but the session is still marked
67
+ // running (e.g. because autoMergeOnCompletion crashed before it could call
68
+ // updateParallelSessionStatus), close it out now so wakeup doesn't block.
69
+ const nonTerminal = db.prepare(`SELECT COUNT(*) as count FROM workstreams
70
+ WHERE session_id = ? AND status NOT IN ('completed', 'failed', 'aborted')`).get(session.id);
71
+ if (nonTerminal.count === 0) {
72
+ const total = db.prepare(`SELECT COUNT(*) as count FROM workstreams WHERE session_id = ?`).get(session.id);
73
+ if (total.count > 0) {
74
+ // All workstreams finished — mark session completed so wakeup can move on.
75
+ db.prepare(`UPDATE parallel_sessions
76
+ SET status = 'completed',
77
+ completed_at = COALESCE(completed_at, datetime('now'))
78
+ WHERE id = ?`).run(session.id);
79
+ }
80
+ }
81
+ }
82
+ return { scheduledRetries, blockedWorkstreams };
83
+ }
84
+ //# sourceMappingURL=wakeup-reconcile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wakeup-reconcile.js","sourceRoot":"","sources":["../../src/runners/wakeup-reconcile.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAIH,wEAaC;AAED,4EA+FC;AA9GD,SAAgB,8BAA8B,CAC5C,EAA+C;IAE/C,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CACvB;;;;;+CAK2C,CAC5C,CAAC,GAAG,EAAE,CAAC;IAER,OAAO,MAAM,CAAC,OAAO,CAAC;AACxB,CAAC;AAED,SAAgB,gCAAgC,CAC9C,EAA+C,EAC/C,WAAmB;IAEnB,MAAM,QAAQ,GAAG,EAAE;SAChB,OAAO,CACN;;;wGAGkG,CACnG;SACA,GAAG,CAAC,WAAW,CAA0B,CAAC;IAE7C,IAAI,gBAAgB,GAAG,CAAC,CAAC;IACzB,IAAI,kBAAkB,GAAG,CAAC,CAAC;IAE3B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,gBAAgB,GAAG,CAAC,CAAC;QACzB,MAAM,UAAU,GAAG,EAAE;aAClB,OAAO,CACN;;;;;2EAKmE,CACpE;aACA,GAAG,CAAC,OAAO,CAAC,EAAE,CAAqD,CAAC;QAEvE,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,MAAM,YAAY,GAAG,CAAC,SAAS,CAAC,iBAAiB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YAE5D,IAAI,YAAY,IAAI,CAAC,EAAE,CAAC;gBACtB,EAAE,CAAC,OAAO,CACR;;;;;;wBAMc,CACf,CAAC,GAAG,CAAC,YAAY,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;gBAClC,kBAAkB,IAAI,CAAC,CAAC;gBACxB,gBAAgB,IAAI,CAAC,CAAC;gBACtB,SAAS;YACX,CAAC;YAED,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,YAAY,EAAE,EAAE,CAAC,CAAC;YACvD,EAAE,CAAC,OAAO,CACR;;;;;sBAKc,CACf,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,cAAc,UAAU,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;YAChE,gBAAgB,IAAI,CAAC,CAAC;QACxB,CAAC;QAED,IAAI,gBAAgB,GAAG,CAAC,EAAE,CAAC;YACzB,EAAE,CAAC,OAAO,CACR;;;sBAGc,CACf,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAClB,SAAS;QACX,CAAC;QAED,6EAA6E;QAC7E,2EAA2E;QAC3E,0EAA0E;QAC1E,MAAM,WAAW,GAAG,EAAE,CAAC,OAAO,CAC5B;iFAC2E,CAC5E,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAsB,CAAC;QAEvC,IAAI,WAAW,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,EAAE,CAAC,OAAO,CACtB,gEAAgE,CACjE,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAsB,CAAC;YAEvC,IAAI,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;gBACpB,2EAA2E;gBAC3E,EAAE,CAAC,OAAO,CACR;;;wBAGc,CACf,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,CAAC;AAClD,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Runner management for wakeup
3
+ */
4
+ /**
5
+ * Kill a process by PID
6
+ */
7
+ export declare function killProcess(pid: number): boolean;
8
+ /**
9
+ * Start a new runner daemon
10
+ * Uses 'steroids runners start --detach' so the runner registers in the global DB
11
+ * and updates heartbeat, allowing hasActiveRunnerForProject() to detect it.
12
+ * When runners.parallel.enabled is true, launches a parallel session instead.
13
+ */
14
+ export declare function startRunner(projectPath: string): {
15
+ pid: number;
16
+ parallel?: boolean;
17
+ } | null;
18
+ //# sourceMappingURL=wakeup-runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wakeup-runner.d.ts","sourceRoot":"","sources":["../../src/runners/wakeup-runner.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAOhD;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAoB3F"}