steroids-cli 0.9.10 → 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.
- package/dist/commands/runners-parallel.d.ts.map +1 -1
- package/dist/commands/runners-parallel.js +16 -4
- package/dist/commands/runners-parallel.js.map +1 -1
- package/dist/parallel/merge-commit-checks.d.ts +6 -0
- package/dist/parallel/merge-commit-checks.d.ts.map +1 -0
- package/dist/parallel/merge-commit-checks.js +28 -0
- package/dist/parallel/merge-commit-checks.js.map +1 -0
- package/dist/parallel/merge-process.d.ts +21 -0
- package/dist/parallel/merge-process.d.ts.map +1 -0
- package/dist/parallel/merge-process.js +104 -0
- package/dist/parallel/merge-process.js.map +1 -0
- package/dist/parallel/merge-sealing.d.ts +11 -0
- package/dist/parallel/merge-sealing.d.ts.map +1 -0
- package/dist/parallel/merge-sealing.js +64 -0
- package/dist/parallel/merge-sealing.js.map +1 -0
- package/dist/parallel/merge-validation.d.ts +6 -0
- package/dist/parallel/merge-validation.d.ts.map +1 -0
- package/dist/parallel/merge-validation.js +57 -0
- package/dist/parallel/merge-validation.js.map +1 -0
- package/dist/parallel/merge-workspace.d.ts +8 -0
- package/dist/parallel/merge-workspace.d.ts.map +1 -0
- package/dist/parallel/merge-workspace.js +37 -0
- package/dist/parallel/merge-workspace.js.map +1 -0
- package/dist/parallel/merge.d.ts +10 -5
- package/dist/parallel/merge.d.ts.map +1 -1
- package/dist/parallel/merge.js +22 -246
- package/dist/parallel/merge.js.map +1 -1
- package/dist/runners/daemon.d.ts.map +1 -1
- package/dist/runners/daemon.js +16 -0
- package/dist/runners/daemon.js.map +1 -1
- package/dist/runners/wakeup-checks.d.ts +14 -0
- package/dist/runners/wakeup-checks.d.ts.map +1 -0
- package/dist/runners/wakeup-checks.js +85 -0
- package/dist/runners/wakeup-checks.js.map +1 -0
- package/dist/runners/wakeup-reconcile.d.ts +10 -0
- package/dist/runners/wakeup-reconcile.d.ts.map +1 -0
- package/dist/runners/wakeup-reconcile.js +84 -0
- package/dist/runners/wakeup-reconcile.js.map +1 -0
- package/dist/runners/wakeup-runner.d.ts +18 -0
- package/dist/runners/wakeup-runner.d.ts.map +1 -0
- package/dist/runners/wakeup-runner.js +47 -0
- package/dist/runners/wakeup-runner.js.map +1 -0
- package/dist/runners/wakeup-sanitise.d.ts +24 -0
- package/dist/runners/wakeup-sanitise.d.ts.map +1 -0
- package/dist/runners/wakeup-sanitise.js +247 -0
- package/dist/runners/wakeup-sanitise.js.map +1 -0
- package/dist/runners/wakeup-timing.d.ts +12 -0
- package/dist/runners/wakeup-timing.d.ts.map +1 -0
- package/dist/runners/wakeup-timing.js +37 -0
- package/dist/runners/wakeup-timing.js.map +1 -0
- package/dist/runners/wakeup.d.ts +7 -8
- package/dist/runners/wakeup.d.ts.map +1 -1
- package/dist/runners/wakeup.js +26 -433
- package/dist/runners/wakeup.js.map +1 -1
- package/package.json +1 -1
package/dist/runners/wakeup.js
CHANGED
|
@@ -3,14 +3,10 @@
|
|
|
3
3
|
* Cron wake-up command for restarting stale/dead runners
|
|
4
4
|
*/
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.hasActiveRunnerForProject =
|
|
7
|
-
exports.hasActiveParallelSessionForProject = hasActiveParallelSessionForProject;
|
|
8
|
-
exports.getLastWakeupTime = getLastWakeupTime;
|
|
6
|
+
exports.hasActiveParallelSessionForProject = exports.hasActiveRunnerForProject = exports.getLastWakeupTime = void 0;
|
|
9
7
|
exports.wakeup = wakeup;
|
|
10
8
|
exports.checkWakeupNeeded = checkWakeupNeeded;
|
|
11
9
|
const node_fs_1 = require("node:fs");
|
|
12
|
-
const node_path_1 = require("node:path");
|
|
13
|
-
const node_child_process_1 = require("node:child_process");
|
|
14
10
|
const lock_js_1 = require("./lock.js");
|
|
15
11
|
const global_db_js_1 = require("./global-db.js");
|
|
16
12
|
const heartbeat_js_1 = require("./heartbeat.js");
|
|
@@ -19,429 +15,21 @@ const connection_js_1 = require("../database/connection.js");
|
|
|
19
15
|
const loader_js_1 = require("../config/loader.js");
|
|
20
16
|
const stuck_task_recovery_js_1 = require("../health/stuck-task-recovery.js");
|
|
21
17
|
const invocation_logs_js_1 = require("../cleanup/invocation-logs.js");
|
|
22
|
-
|
|
23
|
-
const
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
return false;
|
|
32
|
-
}
|
|
33
|
-
try {
|
|
34
|
-
// Use dynamic import for ESM compatibility
|
|
35
|
-
const { default: Database } = await import('better-sqlite3');
|
|
36
|
-
const db = new Database(dbPath, { readonly: true });
|
|
37
|
-
const result = db
|
|
38
|
-
.prepare(`SELECT COUNT(*) as count FROM tasks
|
|
39
|
-
WHERE status IN ('pending', 'in_progress', 'review')`)
|
|
40
|
-
.get();
|
|
41
|
-
db.close();
|
|
42
|
-
return result.count > 0;
|
|
43
|
-
}
|
|
44
|
-
catch {
|
|
45
|
-
return false;
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Check if there's an active runner for a specific project
|
|
50
|
-
* Exported for use in daemon startup checks
|
|
51
|
-
*/
|
|
52
|
-
function hasActiveRunnerForProject(projectPath) {
|
|
53
|
-
const { db, close } = (0, global_db_js_1.openGlobalDatabase)();
|
|
54
|
-
try {
|
|
55
|
-
const row = db
|
|
56
|
-
.prepare(`SELECT 1 FROM runners
|
|
57
|
-
WHERE project_path = ?
|
|
58
|
-
AND status != 'stopped'
|
|
59
|
-
AND heartbeat_at > datetime('now', '-5 minutes')
|
|
60
|
-
AND parallel_session_id IS NULL`)
|
|
61
|
-
.get(projectPath);
|
|
62
|
-
return row !== undefined;
|
|
63
|
-
}
|
|
64
|
-
finally {
|
|
65
|
-
close();
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
function hasActiveParallelSessionForProject(projectPath) {
|
|
69
|
-
const { db, close } = (0, global_db_js_1.openGlobalDatabase)();
|
|
70
|
-
try {
|
|
71
|
-
const row = db
|
|
72
|
-
.prepare(`SELECT 1 FROM parallel_sessions
|
|
73
|
-
WHERE project_path = ?
|
|
74
|
-
AND status NOT IN ('completed', 'failed', 'aborted')
|
|
75
|
-
LIMIT 1`)
|
|
76
|
-
.get(projectPath);
|
|
77
|
-
return row !== undefined;
|
|
78
|
-
}
|
|
79
|
-
finally {
|
|
80
|
-
close();
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
function releaseExpiredWorkstreamLeases(db) {
|
|
84
|
-
const result = db.prepare(`UPDATE workstreams
|
|
85
|
-
SET runner_id = NULL,
|
|
86
|
-
lease_expires_at = NULL
|
|
87
|
-
WHERE status = 'running'
|
|
88
|
-
AND lease_expires_at IS NOT NULL
|
|
89
|
-
AND lease_expires_at <= datetime('now')`).run();
|
|
90
|
-
return result.changes;
|
|
91
|
-
}
|
|
92
|
-
function reconcileParallelSessionRecovery(db, projectPath) {
|
|
93
|
-
const sessions = db
|
|
94
|
-
.prepare(`SELECT id
|
|
95
|
-
FROM parallel_sessions
|
|
96
|
-
WHERE project_path = ?
|
|
97
|
-
AND status NOT IN ('completed', 'failed', 'aborted', 'blocked_validation', 'blocked_recovery')`)
|
|
98
|
-
.all(projectPath);
|
|
99
|
-
let scheduledRetries = 0;
|
|
100
|
-
let blockedWorkstreams = 0;
|
|
101
|
-
for (const session of sessions) {
|
|
102
|
-
let blockedInSession = 0;
|
|
103
|
-
const candidates = db
|
|
104
|
-
.prepare(`SELECT id, recovery_attempts
|
|
105
|
-
FROM workstreams
|
|
106
|
-
WHERE session_id = ?
|
|
107
|
-
AND status = 'running'
|
|
108
|
-
AND (lease_expires_at IS NULL OR lease_expires_at <= datetime('now'))
|
|
109
|
-
AND (next_retry_at IS NULL OR next_retry_at <= datetime('now'))`)
|
|
110
|
-
.all(session.id);
|
|
111
|
-
for (const candidate of candidates) {
|
|
112
|
-
const nextAttempts = (candidate.recovery_attempts ?? 0) + 1;
|
|
113
|
-
if (nextAttempts >= 5) {
|
|
114
|
-
db.prepare(`UPDATE workstreams
|
|
115
|
-
SET status = 'failed',
|
|
116
|
-
recovery_attempts = ?,
|
|
117
|
-
next_retry_at = NULL,
|
|
118
|
-
last_reconcile_action = 'blocked_recovery',
|
|
119
|
-
last_reconciled_at = datetime('now')
|
|
120
|
-
WHERE id = ?`).run(nextAttempts, candidate.id);
|
|
121
|
-
blockedWorkstreams += 1;
|
|
122
|
-
blockedInSession += 1;
|
|
123
|
-
continue;
|
|
124
|
-
}
|
|
125
|
-
const backoffMinutes = Math.min(2 ** nextAttempts, 30);
|
|
126
|
-
db.prepare(`UPDATE workstreams
|
|
127
|
-
SET recovery_attempts = ?,
|
|
128
|
-
next_retry_at = datetime('now', ?),
|
|
129
|
-
last_reconcile_action = 'retry_scheduled',
|
|
130
|
-
last_reconciled_at = datetime('now')
|
|
131
|
-
WHERE id = ?`).run(nextAttempts, `+${backoffMinutes} minutes`, candidate.id);
|
|
132
|
-
scheduledRetries += 1;
|
|
133
|
-
}
|
|
134
|
-
if (blockedInSession > 0) {
|
|
135
|
-
db.prepare(`UPDATE parallel_sessions
|
|
136
|
-
SET status = 'blocked_recovery',
|
|
137
|
-
completed_at = NULL
|
|
138
|
-
WHERE id = ?`).run(session.id);
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
return { scheduledRetries, blockedWorkstreams };
|
|
142
|
-
}
|
|
143
|
-
/**
|
|
144
|
-
* Kill a process by PID
|
|
145
|
-
*/
|
|
146
|
-
function killProcess(pid) {
|
|
147
|
-
try {
|
|
148
|
-
process.kill(pid, 'SIGTERM');
|
|
149
|
-
return true;
|
|
150
|
-
}
|
|
151
|
-
catch {
|
|
152
|
-
return false;
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
/**
|
|
156
|
-
* Start a new runner daemon
|
|
157
|
-
* Uses 'steroids runners start --detach' so the runner registers in the global DB
|
|
158
|
-
* and updates heartbeat, allowing hasActiveRunnerForProject() to detect it.
|
|
159
|
-
* When runners.parallel.enabled is true, launches a parallel session instead.
|
|
160
|
-
*/
|
|
161
|
-
function startRunner(projectPath) {
|
|
162
|
-
try {
|
|
163
|
-
const config = (0, loader_js_1.loadConfig)(projectPath);
|
|
164
|
-
const parallelEnabled = config.runners?.parallel?.enabled === true;
|
|
165
|
-
const args = parallelEnabled
|
|
166
|
-
? ['runners', 'start', '--parallel', '--project', projectPath]
|
|
167
|
-
: ['runners', 'start', '--detach', '--project', projectPath];
|
|
168
|
-
const child = (0, node_child_process_1.spawn)('steroids', args, {
|
|
169
|
-
cwd: projectPath,
|
|
170
|
-
detached: true,
|
|
171
|
-
stdio: 'ignore',
|
|
172
|
-
});
|
|
173
|
-
child.unref();
|
|
174
|
-
return { pid: child.pid ?? 0, parallel: parallelEnabled };
|
|
175
|
-
}
|
|
176
|
-
catch {
|
|
177
|
-
return null;
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
function getSanitiseSettings(projectPath) {
|
|
181
|
-
const config = (0, loader_js_1.loadConfig)(projectPath);
|
|
182
|
-
const health = config.health ?? {};
|
|
183
|
-
const enabled = health.sanitiseEnabled ?? true;
|
|
184
|
-
const intervalMinutes = Math.max(1, Number(health.sanitiseIntervalMinutes ?? DEFAULT_SANITISE_INTERVAL_MINUTES));
|
|
185
|
-
const staleInvocationTimeoutSec = Math.max(60, Number(health.sanitiseInvocationTimeoutSec ?? DEFAULT_SANITISE_INVOCATION_TIMEOUT_SEC));
|
|
186
|
-
return { enabled, intervalMinutes, staleInvocationTimeoutSec };
|
|
187
|
-
}
|
|
188
|
-
function getSanitiseSchemaKey(projectPath) {
|
|
189
|
-
return `wakeup_sanitise_last_run::${projectPath}`;
|
|
190
|
-
}
|
|
191
|
-
function shouldRunPeriodicSanitise(db, projectPath, intervalMinutes) {
|
|
192
|
-
const key = getSanitiseSchemaKey(projectPath);
|
|
193
|
-
const row = db
|
|
194
|
-
.prepare('SELECT value FROM _global_schema WHERE key = ?')
|
|
195
|
-
.get(key);
|
|
196
|
-
if (!row?.value) {
|
|
197
|
-
return true;
|
|
198
|
-
}
|
|
199
|
-
const due = db.prepare(`SELECT CASE
|
|
200
|
-
WHEN datetime(?) <= datetime('now', ?)
|
|
201
|
-
THEN 1 ELSE 0
|
|
202
|
-
END AS due`).get(row.value, `-${intervalMinutes} minutes`);
|
|
203
|
-
return (due?.due ?? 0) === 1;
|
|
204
|
-
}
|
|
205
|
-
function markPeriodicSanitiseRun(db, projectPath) {
|
|
206
|
-
db.prepare(`INSERT INTO _global_schema (key, value) VALUES (?, datetime('now'))
|
|
207
|
-
ON CONFLICT(key) DO UPDATE SET value = excluded.value`).run(getSanitiseSchemaKey(projectPath));
|
|
208
|
-
}
|
|
209
|
-
function parseReviewerDecisionFromLog(projectPath, invocationId) {
|
|
210
|
-
const logPath = (0, node_path_1.join)(projectPath, '.steroids', 'invocations', `${invocationId}.log`);
|
|
211
|
-
if (!(0, node_fs_1.existsSync)(logPath)) {
|
|
212
|
-
return null;
|
|
213
|
-
}
|
|
214
|
-
try {
|
|
215
|
-
const raw = (0, node_fs_2.readFileSync)(logPath, 'utf-8');
|
|
216
|
-
if (raw.includes('DECISION: APPROVE')) {
|
|
217
|
-
return 'approve';
|
|
218
|
-
}
|
|
219
|
-
if (raw.includes('DECISION: REJECT')) {
|
|
220
|
-
return 'reject';
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
catch {
|
|
224
|
-
return null;
|
|
225
|
-
}
|
|
226
|
-
return null;
|
|
227
|
-
}
|
|
228
|
-
function sanitiseProjectState(globalDb, projectDb, projectPath, dryRun, staleInvocationTimeoutSec) {
|
|
229
|
-
const summary = {
|
|
230
|
-
ran: true,
|
|
231
|
-
reason: 'ok',
|
|
232
|
-
recoveredApprovals: 0,
|
|
233
|
-
recoveredRejects: 0,
|
|
234
|
-
closedStaleInvocations: 0,
|
|
235
|
-
releasedTaskLocks: 0,
|
|
236
|
-
releasedSectionLocks: 0,
|
|
237
|
-
};
|
|
238
|
-
const staleCutoffMs = Date.now() - staleInvocationTimeoutSec * 1000;
|
|
239
|
-
const activeRunnerTaskRows = globalDb
|
|
240
|
-
.prepare(`SELECT current_task_id, parallel_session_id
|
|
241
|
-
FROM runners
|
|
242
|
-
WHERE project_path = ?
|
|
243
|
-
AND status = 'running'
|
|
244
|
-
AND heartbeat_at > datetime('now', '-5 minutes')
|
|
245
|
-
AND (current_task_id IS NOT NULL OR parallel_session_id IS NOT NULL)`)
|
|
246
|
-
.all(projectPath);
|
|
247
|
-
const activeTaskIds = new Set(activeRunnerTaskRows
|
|
248
|
-
.map((row) => row.current_task_id)
|
|
249
|
-
.filter((taskId) => typeof taskId === 'string' && taskId.length > 0));
|
|
250
|
-
const hasActiveParallelRunner = activeRunnerTaskRows.some((row) => typeof row.parallel_session_id === 'string' && row.parallel_session_id.length > 0);
|
|
251
|
-
let hasActiveMergeLock = false;
|
|
252
|
-
try {
|
|
253
|
-
const mergeLockRows = projectDb
|
|
254
|
-
.prepare('SELECT expires_at FROM merge_locks')
|
|
255
|
-
.all();
|
|
256
|
-
const nowMs = Date.now();
|
|
257
|
-
hasActiveMergeLock = mergeLockRows.some((row) => {
|
|
258
|
-
const expiresAtMs = Date.parse(row.expires_at);
|
|
259
|
-
return Number.isFinite(expiresAtMs) && expiresAtMs > nowMs;
|
|
260
|
-
});
|
|
261
|
-
}
|
|
262
|
-
catch {
|
|
263
|
-
hasActiveMergeLock = false;
|
|
264
|
-
}
|
|
265
|
-
const hasActiveParallelContext = hasActiveParallelRunner || hasActiveMergeLock;
|
|
266
|
-
const staleInvocations = projectDb
|
|
267
|
-
.prepare(`SELECT i.id, i.task_id, i.role, i.started_at_ms, t.status AS task_status
|
|
268
|
-
FROM task_invocations i
|
|
269
|
-
LEFT JOIN tasks t ON t.id = i.task_id
|
|
270
|
-
WHERE i.status = 'running'
|
|
271
|
-
AND i.started_at_ms IS NOT NULL
|
|
272
|
-
AND i.started_at_ms <= ?
|
|
273
|
-
ORDER BY i.started_at_ms ASC`)
|
|
274
|
-
.all(staleCutoffMs);
|
|
275
|
-
for (const row of staleInvocations) {
|
|
276
|
-
if (activeTaskIds.has(row.task_id) || hasActiveParallelContext) {
|
|
277
|
-
continue;
|
|
278
|
-
}
|
|
279
|
-
const completedAtMs = Date.now();
|
|
280
|
-
const durationMs = Math.max(0, completedAtMs - row.started_at_ms);
|
|
281
|
-
const reviewerDecision = row.role === 'reviewer'
|
|
282
|
-
? parseReviewerDecisionFromLog(projectPath, row.id)
|
|
283
|
-
: null;
|
|
284
|
-
if (!dryRun) {
|
|
285
|
-
if (reviewerDecision === 'approve' && row.task_status === 'review') {
|
|
286
|
-
projectDb
|
|
287
|
-
.prepare(`UPDATE task_invocations
|
|
288
|
-
SET status = 'completed',
|
|
289
|
-
success = 1,
|
|
290
|
-
timed_out = 0,
|
|
291
|
-
exit_code = 0,
|
|
292
|
-
completed_at_ms = ?,
|
|
293
|
-
duration_ms = ?,
|
|
294
|
-
error = COALESCE(error, 'Recovered by periodic sanitise (review approve token found).')
|
|
295
|
-
WHERE id = ? AND status = 'running'`)
|
|
296
|
-
.run(completedAtMs, durationMs, row.id);
|
|
297
|
-
projectDb
|
|
298
|
-
.prepare(`UPDATE tasks
|
|
299
|
-
SET status = 'completed',
|
|
300
|
-
updated_at = datetime('now')
|
|
301
|
-
WHERE id = ? AND status = 'review'`)
|
|
302
|
-
.run(row.task_id);
|
|
303
|
-
projectDb
|
|
304
|
-
.prepare(`INSERT INTO audit (task_id, from_status, to_status, actor, actor_type, notes, created_at)
|
|
305
|
-
SELECT ?, 'review', 'completed', 'orchestrator', 'orchestrator',
|
|
306
|
-
'Recovered by periodic sanitise from reviewer decision log (DECISION: APPROVE).',
|
|
307
|
-
datetime('now')
|
|
308
|
-
WHERE EXISTS (SELECT 1 FROM tasks WHERE id = ? AND status = 'completed')`)
|
|
309
|
-
.run(row.task_id, row.task_id);
|
|
310
|
-
}
|
|
311
|
-
else if (reviewerDecision === 'reject' && row.task_status === 'review') {
|
|
312
|
-
projectDb
|
|
313
|
-
.prepare(`UPDATE task_invocations
|
|
314
|
-
SET status = 'completed',
|
|
315
|
-
success = 1,
|
|
316
|
-
timed_out = 0,
|
|
317
|
-
exit_code = 0,
|
|
318
|
-
completed_at_ms = ?,
|
|
319
|
-
duration_ms = ?,
|
|
320
|
-
error = COALESCE(error, 'Recovered by periodic sanitise (review reject token found).')
|
|
321
|
-
WHERE id = ? AND status = 'running'`)
|
|
322
|
-
.run(completedAtMs, durationMs, row.id);
|
|
323
|
-
projectDb
|
|
324
|
-
.prepare(`UPDATE tasks
|
|
325
|
-
SET status = 'in_progress',
|
|
326
|
-
rejection_count = COALESCE(rejection_count, 0) + 1,
|
|
327
|
-
updated_at = datetime('now')
|
|
328
|
-
WHERE id = ? AND status = 'review'`)
|
|
329
|
-
.run(row.task_id);
|
|
330
|
-
projectDb
|
|
331
|
-
.prepare(`INSERT INTO audit (task_id, from_status, to_status, actor, actor_type, notes, created_at)
|
|
332
|
-
SELECT ?, 'review', 'in_progress', 'orchestrator', 'orchestrator',
|
|
333
|
-
'Recovered by periodic sanitise from reviewer decision log (DECISION: REJECT).',
|
|
334
|
-
datetime('now')
|
|
335
|
-
WHERE EXISTS (SELECT 1 FROM tasks WHERE id = ? AND status = 'in_progress')`)
|
|
336
|
-
.run(row.task_id, row.task_id);
|
|
337
|
-
}
|
|
338
|
-
else {
|
|
339
|
-
projectDb
|
|
340
|
-
.prepare(`UPDATE task_invocations
|
|
341
|
-
SET status = 'failed',
|
|
342
|
-
success = 0,
|
|
343
|
-
timed_out = 1,
|
|
344
|
-
exit_code = 1,
|
|
345
|
-
completed_at_ms = ?,
|
|
346
|
-
duration_ms = ?,
|
|
347
|
-
error = COALESCE(error, 'Periodic sanitise closed stale running invocation.')
|
|
348
|
-
WHERE id = ? AND status = 'running'`)
|
|
349
|
-
.run(completedAtMs, durationMs, row.id);
|
|
350
|
-
}
|
|
351
|
-
}
|
|
352
|
-
if (reviewerDecision === 'approve' && row.task_status === 'review') {
|
|
353
|
-
summary.recoveredApprovals += 1;
|
|
354
|
-
}
|
|
355
|
-
else if (reviewerDecision === 'reject' && row.task_status === 'review') {
|
|
356
|
-
summary.recoveredRejects += 1;
|
|
357
|
-
}
|
|
358
|
-
else {
|
|
359
|
-
summary.closedStaleInvocations += 1;
|
|
360
|
-
}
|
|
361
|
-
}
|
|
362
|
-
if (!dryRun) {
|
|
363
|
-
const releasedTaskLocks = projectDb
|
|
364
|
-
.prepare(`DELETE FROM task_locks WHERE expires_at <= datetime('now')`)
|
|
365
|
-
.run();
|
|
366
|
-
summary.releasedTaskLocks = releasedTaskLocks.changes;
|
|
367
|
-
const releasedSectionLocks = projectDb
|
|
368
|
-
.prepare(`DELETE FROM section_locks WHERE expires_at <= datetime('now')`)
|
|
369
|
-
.run();
|
|
370
|
-
summary.releasedSectionLocks = releasedSectionLocks.changes;
|
|
371
|
-
}
|
|
372
|
-
return summary;
|
|
373
|
-
}
|
|
374
|
-
function runPeriodicSanitiseForProject(globalDb, projectDb, projectPath, dryRun) {
|
|
375
|
-
const settings = getSanitiseSettings(projectPath);
|
|
376
|
-
if (!settings.enabled) {
|
|
377
|
-
return {
|
|
378
|
-
ran: false,
|
|
379
|
-
reason: 'disabled',
|
|
380
|
-
recoveredApprovals: 0,
|
|
381
|
-
recoveredRejects: 0,
|
|
382
|
-
closedStaleInvocations: 0,
|
|
383
|
-
releasedTaskLocks: 0,
|
|
384
|
-
releasedSectionLocks: 0,
|
|
385
|
-
};
|
|
386
|
-
}
|
|
387
|
-
if (!shouldRunPeriodicSanitise(globalDb, projectPath, settings.intervalMinutes)) {
|
|
388
|
-
return {
|
|
389
|
-
ran: false,
|
|
390
|
-
reason: 'interval_not_due',
|
|
391
|
-
recoveredApprovals: 0,
|
|
392
|
-
recoveredRejects: 0,
|
|
393
|
-
closedStaleInvocations: 0,
|
|
394
|
-
releasedTaskLocks: 0,
|
|
395
|
-
releasedSectionLocks: 0,
|
|
396
|
-
};
|
|
397
|
-
}
|
|
398
|
-
const summary = sanitiseProjectState(globalDb, projectDb, projectPath, dryRun, settings.staleInvocationTimeoutSec);
|
|
399
|
-
if (!dryRun) {
|
|
400
|
-
markPeriodicSanitiseRun(globalDb, projectPath);
|
|
401
|
-
}
|
|
402
|
-
return summary;
|
|
403
|
-
}
|
|
404
|
-
function sanitisedActionCount(summary) {
|
|
405
|
-
return (summary.recoveredApprovals +
|
|
406
|
-
summary.recoveredRejects +
|
|
407
|
-
summary.closedStaleInvocations +
|
|
408
|
-
summary.releasedTaskLocks +
|
|
409
|
-
summary.releasedSectionLocks);
|
|
410
|
-
}
|
|
18
|
+
// Import from helper files
|
|
19
|
+
const wakeup_sanitise_js_1 = require("./wakeup-sanitise.js");
|
|
20
|
+
const wakeup_reconcile_js_1 = require("./wakeup-reconcile.js");
|
|
21
|
+
const wakeup_checks_js_1 = require("./wakeup-checks.js");
|
|
22
|
+
Object.defineProperty(exports, "hasActiveRunnerForProject", { enumerable: true, get: function () { return wakeup_checks_js_1.hasActiveRunnerForProject; } });
|
|
23
|
+
Object.defineProperty(exports, "hasActiveParallelSessionForProject", { enumerable: true, get: function () { return wakeup_checks_js_1.hasActiveParallelSessionForProject; } });
|
|
24
|
+
const wakeup_runner_js_1 = require("./wakeup-runner.js");
|
|
25
|
+
const wakeup_timing_js_1 = require("./wakeup-timing.js");
|
|
26
|
+
Object.defineProperty(exports, "getLastWakeupTime", { enumerable: true, get: function () { return wakeup_timing_js_1.getLastWakeupTime; } });
|
|
411
27
|
/**
|
|
412
28
|
* Main wake-up function
|
|
413
29
|
* Called by cron every minute to ensure runners are healthy
|
|
414
30
|
* Iterates over ALL registered projects and starts runners as needed
|
|
415
31
|
* Returns per-project results
|
|
416
32
|
*/
|
|
417
|
-
/**
|
|
418
|
-
* Record the last wakeup invocation time
|
|
419
|
-
*/
|
|
420
|
-
function recordWakeupTime() {
|
|
421
|
-
const { db, close } = (0, global_db_js_1.openGlobalDatabase)();
|
|
422
|
-
try {
|
|
423
|
-
db.prepare(`INSERT INTO _global_schema (key, value) VALUES ('last_wakeup_at', datetime('now'))
|
|
424
|
-
ON CONFLICT(key) DO UPDATE SET value = datetime('now')`).run();
|
|
425
|
-
}
|
|
426
|
-
finally {
|
|
427
|
-
close();
|
|
428
|
-
}
|
|
429
|
-
}
|
|
430
|
-
/**
|
|
431
|
-
* Get the last wakeup invocation time
|
|
432
|
-
*/
|
|
433
|
-
function getLastWakeupTime() {
|
|
434
|
-
const { db, close } = (0, global_db_js_1.openGlobalDatabase)();
|
|
435
|
-
try {
|
|
436
|
-
const row = db
|
|
437
|
-
.prepare("SELECT value FROM _global_schema WHERE key = 'last_wakeup_at'")
|
|
438
|
-
.get();
|
|
439
|
-
return row?.value ?? null;
|
|
440
|
-
}
|
|
441
|
-
finally {
|
|
442
|
-
close();
|
|
443
|
-
}
|
|
444
|
-
}
|
|
445
33
|
async function wakeup(options = {}) {
|
|
446
34
|
const { quiet = false, dryRun = false } = options;
|
|
447
35
|
const results = [];
|
|
@@ -451,7 +39,7 @@ async function wakeup(options = {}) {
|
|
|
451
39
|
};
|
|
452
40
|
// Record wakeup invocation time (even for dry runs)
|
|
453
41
|
if (!dryRun) {
|
|
454
|
-
recordWakeupTime();
|
|
42
|
+
(0, wakeup_timing_js_1.recordWakeupTime)();
|
|
455
43
|
}
|
|
456
44
|
// Step 1: Clean up stale runners first
|
|
457
45
|
const global = (0, global_db_js_1.openGlobalDatabase)();
|
|
@@ -463,7 +51,7 @@ async function wakeup(options = {}) {
|
|
|
463
51
|
if (!dryRun) {
|
|
464
52
|
for (const runner of staleRunners) {
|
|
465
53
|
if (runner.pid) {
|
|
466
|
-
killProcess(runner.pid);
|
|
54
|
+
(0, wakeup_runner_js_1.killProcess)(runner.pid);
|
|
467
55
|
}
|
|
468
56
|
global.db.prepare(`UPDATE workstreams
|
|
469
57
|
SET runner_id = NULL,
|
|
@@ -483,7 +71,12 @@ async function wakeup(options = {}) {
|
|
|
483
71
|
// ignore global DB issues; wakeup will still attempt per-project checks
|
|
484
72
|
}
|
|
485
73
|
try {
|
|
486
|
-
const releasedLeases =
|
|
74
|
+
const releasedLeases = global.db.prepare(`UPDATE workstreams
|
|
75
|
+
SET runner_id = NULL,
|
|
76
|
+
lease_expires_at = NULL
|
|
77
|
+
WHERE status = 'running'
|
|
78
|
+
AND lease_expires_at IS NOT NULL
|
|
79
|
+
AND lease_expires_at <= datetime('now')`).run().changes;
|
|
487
80
|
if (releasedLeases > 0) {
|
|
488
81
|
log(`Released ${releasedLeases} expired workstream lease(s)`);
|
|
489
82
|
}
|
|
@@ -543,8 +136,8 @@ async function wakeup(options = {}) {
|
|
|
543
136
|
try {
|
|
544
137
|
const { db: projectDb, close: closeProjectDb } = (0, connection_js_1.openDatabase)(project.path);
|
|
545
138
|
try {
|
|
546
|
-
const sanitiseSummary = runPeriodicSanitiseForProject(global.db, projectDb, project.path, dryRun);
|
|
547
|
-
sanitisedActions = sanitisedActionCount(sanitiseSummary);
|
|
139
|
+
const sanitiseSummary = (0, wakeup_sanitise_js_1.runPeriodicSanitiseForProject)(global.db, projectDb, project.path, dryRun);
|
|
140
|
+
sanitisedActions = (0, wakeup_sanitise_js_1.sanitisedActionCount)(sanitiseSummary);
|
|
548
141
|
if (sanitisedActions > 0 && !quiet) {
|
|
549
142
|
log(`Sanitised ${sanitisedActions} stale item(s) in ${project.path}`);
|
|
550
143
|
}
|
|
@@ -575,7 +168,7 @@ async function wakeup(options = {}) {
|
|
|
575
168
|
// If sanitise/recovery can't run (DB missing/corrupt), we still proceed with runner checks.
|
|
576
169
|
}
|
|
577
170
|
// Check for pending work after sanitise/recovery
|
|
578
|
-
const hasWork = await projectHasPendingWork(project.path);
|
|
171
|
+
const hasWork = await (0, wakeup_checks_js_1.projectHasPendingWork)(project.path);
|
|
579
172
|
if (!hasWork) {
|
|
580
173
|
const noWorkReason = sanitisedActions > 0
|
|
581
174
|
? `No pending tasks after sanitise (${sanitisedActions} action(s))`
|
|
@@ -594,10 +187,10 @@ async function wakeup(options = {}) {
|
|
|
594
187
|
}
|
|
595
188
|
// Skip projects currently executing a parallel session before attempting recovery/startup.
|
|
596
189
|
// This prevents parallel runners from being interfered with by a cron-managed runner.
|
|
597
|
-
if (hasActiveParallelSessionForProject(project.path)) {
|
|
190
|
+
if ((0, wakeup_checks_js_1.hasActiveParallelSessionForProject)(project.path)) {
|
|
598
191
|
let retrySummary = '';
|
|
599
192
|
if (!dryRun) {
|
|
600
|
-
const recovery = reconcileParallelSessionRecovery(global.db, project.path);
|
|
193
|
+
const recovery = (0, wakeup_reconcile_js_1.reconcileParallelSessionRecovery)(global.db, project.path);
|
|
601
194
|
if (recovery.scheduledRetries > 0) {
|
|
602
195
|
retrySummary += `, scheduled ${recovery.scheduledRetries} recovery retry(s)`;
|
|
603
196
|
}
|
|
@@ -615,7 +208,7 @@ async function wakeup(options = {}) {
|
|
|
615
208
|
continue;
|
|
616
209
|
}
|
|
617
210
|
// Skip if project already has an active runner (after recovery, which may have killed/removed it).
|
|
618
|
-
if (hasActiveRunnerForProject(project.path)) {
|
|
211
|
+
if ((0, wakeup_checks_js_1.hasActiveRunnerForProject)(project.path)) {
|
|
619
212
|
log(`Skipping ${project.path}: runner already active`);
|
|
620
213
|
results.push({
|
|
621
214
|
action: 'none',
|
|
@@ -646,7 +239,7 @@ async function wakeup(options = {}) {
|
|
|
646
239
|
});
|
|
647
240
|
continue;
|
|
648
241
|
}
|
|
649
|
-
const startResult = startRunner(project.path);
|
|
242
|
+
const startResult = (0, wakeup_runner_js_1.startRunner)(project.path);
|
|
650
243
|
if (startResult) {
|
|
651
244
|
const mode = startResult.parallel ? 'parallel session' : 'runner';
|
|
652
245
|
results.push({
|
|
@@ -713,7 +306,7 @@ async function checkWakeupNeeded() {
|
|
|
713
306
|
const registeredProjects = (0, projects_js_1.getRegisteredProjects)(false);
|
|
714
307
|
let projectsWithWork = 0;
|
|
715
308
|
for (const project of registeredProjects) {
|
|
716
|
-
if ((0, node_fs_1.existsSync)(project.path) && (await projectHasPendingWork(project.path))) {
|
|
309
|
+
if ((0, node_fs_1.existsSync)(project.path) && (await (0, wakeup_checks_js_1.projectHasPendingWork)(project.path))) {
|
|
717
310
|
projectsWithWork++;
|
|
718
311
|
}
|
|
719
312
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wakeup.js","sourceRoot":"","sources":["../../src/runners/wakeup.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"wakeup.js","sourceRoot":"","sources":["../../src/runners/wakeup.ts"],"names":[],"mappings":"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"}
|