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.
- 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 +2 -5
- package/dist/parallel/merge.d.ts.map +1 -1
- package/dist/parallel/merge.js +14 -245
- package/dist/parallel/merge.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 -464
- 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,460 +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
|
-
// Primary check: session record in non-terminal state.
|
|
72
|
-
const sessionRow = db
|
|
73
|
-
.prepare(`SELECT 1 FROM parallel_sessions
|
|
74
|
-
WHERE project_path = ?
|
|
75
|
-
AND status NOT IN ('completed', 'failed', 'aborted')
|
|
76
|
-
LIMIT 1`)
|
|
77
|
-
.get(projectPath);
|
|
78
|
-
if (sessionRow !== undefined)
|
|
79
|
-
return true;
|
|
80
|
-
// Belt-and-suspenders: if any runner for this project has an active
|
|
81
|
-
// parallel_session_id and a fresh heartbeat, treat it as active even if the
|
|
82
|
-
// session record somehow ended up in a terminal state. This prevents wakeup
|
|
83
|
-
// from spawning a new parallel session while workstream runners are still live.
|
|
84
|
-
const runnerRow = db
|
|
85
|
-
.prepare(`SELECT 1 FROM runners r
|
|
86
|
-
JOIN parallel_sessions ps ON ps.id = r.parallel_session_id
|
|
87
|
-
WHERE ps.project_path = ?
|
|
88
|
-
AND r.status != 'stopped'
|
|
89
|
-
AND r.heartbeat_at > datetime('now', '-5 minutes')
|
|
90
|
-
LIMIT 1`)
|
|
91
|
-
.get(projectPath);
|
|
92
|
-
return runnerRow !== undefined;
|
|
93
|
-
}
|
|
94
|
-
finally {
|
|
95
|
-
close();
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
function releaseExpiredWorkstreamLeases(db) {
|
|
99
|
-
const result = db.prepare(`UPDATE workstreams
|
|
100
|
-
SET runner_id = NULL,
|
|
101
|
-
lease_expires_at = NULL
|
|
102
|
-
WHERE status = 'running'
|
|
103
|
-
AND lease_expires_at IS NOT NULL
|
|
104
|
-
AND lease_expires_at <= datetime('now')`).run();
|
|
105
|
-
return result.changes;
|
|
106
|
-
}
|
|
107
|
-
function reconcileParallelSessionRecovery(db, projectPath) {
|
|
108
|
-
const sessions = db
|
|
109
|
-
.prepare(`SELECT id
|
|
110
|
-
FROM parallel_sessions
|
|
111
|
-
WHERE project_path = ?
|
|
112
|
-
AND status NOT IN ('completed', 'failed', 'aborted', 'blocked_validation', 'blocked_recovery')`)
|
|
113
|
-
.all(projectPath);
|
|
114
|
-
let scheduledRetries = 0;
|
|
115
|
-
let blockedWorkstreams = 0;
|
|
116
|
-
for (const session of sessions) {
|
|
117
|
-
let blockedInSession = 0;
|
|
118
|
-
const candidates = db
|
|
119
|
-
.prepare(`SELECT id, recovery_attempts
|
|
120
|
-
FROM workstreams
|
|
121
|
-
WHERE session_id = ?
|
|
122
|
-
AND status = 'running'
|
|
123
|
-
AND (lease_expires_at IS NULL OR lease_expires_at <= datetime('now'))
|
|
124
|
-
AND (next_retry_at IS NULL OR next_retry_at <= datetime('now'))`)
|
|
125
|
-
.all(session.id);
|
|
126
|
-
for (const candidate of candidates) {
|
|
127
|
-
const nextAttempts = (candidate.recovery_attempts ?? 0) + 1;
|
|
128
|
-
if (nextAttempts >= 5) {
|
|
129
|
-
db.prepare(`UPDATE workstreams
|
|
130
|
-
SET status = 'failed',
|
|
131
|
-
recovery_attempts = ?,
|
|
132
|
-
next_retry_at = NULL,
|
|
133
|
-
last_reconcile_action = 'blocked_recovery',
|
|
134
|
-
last_reconciled_at = datetime('now')
|
|
135
|
-
WHERE id = ?`).run(nextAttempts, candidate.id);
|
|
136
|
-
blockedWorkstreams += 1;
|
|
137
|
-
blockedInSession += 1;
|
|
138
|
-
continue;
|
|
139
|
-
}
|
|
140
|
-
const backoffMinutes = Math.min(2 ** nextAttempts, 30);
|
|
141
|
-
db.prepare(`UPDATE workstreams
|
|
142
|
-
SET recovery_attempts = ?,
|
|
143
|
-
next_retry_at = datetime('now', ?),
|
|
144
|
-
last_reconcile_action = 'retry_scheduled',
|
|
145
|
-
last_reconciled_at = datetime('now')
|
|
146
|
-
WHERE id = ?`).run(nextAttempts, `+${backoffMinutes} minutes`, candidate.id);
|
|
147
|
-
scheduledRetries += 1;
|
|
148
|
-
}
|
|
149
|
-
if (blockedInSession > 0) {
|
|
150
|
-
db.prepare(`UPDATE parallel_sessions
|
|
151
|
-
SET status = 'blocked_recovery',
|
|
152
|
-
completed_at = NULL
|
|
153
|
-
WHERE id = ?`).run(session.id);
|
|
154
|
-
continue;
|
|
155
|
-
}
|
|
156
|
-
// If all workstreams are in a terminal state but the session is still marked
|
|
157
|
-
// running (e.g. because autoMergeOnCompletion crashed before it could call
|
|
158
|
-
// updateParallelSessionStatus), close it out now so wakeup doesn't block.
|
|
159
|
-
const nonTerminal = db.prepare(`SELECT COUNT(*) as count FROM workstreams
|
|
160
|
-
WHERE session_id = ? AND status NOT IN ('completed', 'failed', 'aborted')`).get(session.id);
|
|
161
|
-
if (nonTerminal.count === 0) {
|
|
162
|
-
const total = db.prepare(`SELECT COUNT(*) as count FROM workstreams WHERE session_id = ?`).get(session.id);
|
|
163
|
-
if (total.count > 0) {
|
|
164
|
-
// All workstreams finished — mark session completed so wakeup can move on.
|
|
165
|
-
db.prepare(`UPDATE parallel_sessions
|
|
166
|
-
SET status = 'completed',
|
|
167
|
-
completed_at = COALESCE(completed_at, datetime('now'))
|
|
168
|
-
WHERE id = ?`).run(session.id);
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
return { scheduledRetries, blockedWorkstreams };
|
|
173
|
-
}
|
|
174
|
-
/**
|
|
175
|
-
* Kill a process by PID
|
|
176
|
-
*/
|
|
177
|
-
function killProcess(pid) {
|
|
178
|
-
try {
|
|
179
|
-
process.kill(pid, 'SIGTERM');
|
|
180
|
-
return true;
|
|
181
|
-
}
|
|
182
|
-
catch {
|
|
183
|
-
return false;
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
/**
|
|
187
|
-
* Start a new runner daemon
|
|
188
|
-
* Uses 'steroids runners start --detach' so the runner registers in the global DB
|
|
189
|
-
* and updates heartbeat, allowing hasActiveRunnerForProject() to detect it.
|
|
190
|
-
* When runners.parallel.enabled is true, launches a parallel session instead.
|
|
191
|
-
*/
|
|
192
|
-
function startRunner(projectPath) {
|
|
193
|
-
try {
|
|
194
|
-
const config = (0, loader_js_1.loadConfig)(projectPath);
|
|
195
|
-
const parallelEnabled = config.runners?.parallel?.enabled === true;
|
|
196
|
-
const args = parallelEnabled
|
|
197
|
-
? ['runners', 'start', '--parallel', '--project', projectPath]
|
|
198
|
-
: ['runners', 'start', '--detach', '--project', projectPath];
|
|
199
|
-
const child = (0, node_child_process_1.spawn)('steroids', args, {
|
|
200
|
-
cwd: projectPath,
|
|
201
|
-
detached: true,
|
|
202
|
-
stdio: 'ignore',
|
|
203
|
-
});
|
|
204
|
-
child.unref();
|
|
205
|
-
return { pid: child.pid ?? 0, parallel: parallelEnabled };
|
|
206
|
-
}
|
|
207
|
-
catch {
|
|
208
|
-
return null;
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
function getSanitiseSettings(projectPath) {
|
|
212
|
-
const config = (0, loader_js_1.loadConfig)(projectPath);
|
|
213
|
-
const health = config.health ?? {};
|
|
214
|
-
const enabled = health.sanitiseEnabled ?? true;
|
|
215
|
-
const intervalMinutes = Math.max(1, Number(health.sanitiseIntervalMinutes ?? DEFAULT_SANITISE_INTERVAL_MINUTES));
|
|
216
|
-
const staleInvocationTimeoutSec = Math.max(60, Number(health.sanitiseInvocationTimeoutSec ?? DEFAULT_SANITISE_INVOCATION_TIMEOUT_SEC));
|
|
217
|
-
return { enabled, intervalMinutes, staleInvocationTimeoutSec };
|
|
218
|
-
}
|
|
219
|
-
function getSanitiseSchemaKey(projectPath) {
|
|
220
|
-
return `wakeup_sanitise_last_run::${projectPath}`;
|
|
221
|
-
}
|
|
222
|
-
function shouldRunPeriodicSanitise(db, projectPath, intervalMinutes) {
|
|
223
|
-
const key = getSanitiseSchemaKey(projectPath);
|
|
224
|
-
const row = db
|
|
225
|
-
.prepare('SELECT value FROM _global_schema WHERE key = ?')
|
|
226
|
-
.get(key);
|
|
227
|
-
if (!row?.value) {
|
|
228
|
-
return true;
|
|
229
|
-
}
|
|
230
|
-
const due = db.prepare(`SELECT CASE
|
|
231
|
-
WHEN datetime(?) <= datetime('now', ?)
|
|
232
|
-
THEN 1 ELSE 0
|
|
233
|
-
END AS due`).get(row.value, `-${intervalMinutes} minutes`);
|
|
234
|
-
return (due?.due ?? 0) === 1;
|
|
235
|
-
}
|
|
236
|
-
function markPeriodicSanitiseRun(db, projectPath) {
|
|
237
|
-
db.prepare(`INSERT INTO _global_schema (key, value) VALUES (?, datetime('now'))
|
|
238
|
-
ON CONFLICT(key) DO UPDATE SET value = excluded.value`).run(getSanitiseSchemaKey(projectPath));
|
|
239
|
-
}
|
|
240
|
-
function parseReviewerDecisionFromLog(projectPath, invocationId) {
|
|
241
|
-
const logPath = (0, node_path_1.join)(projectPath, '.steroids', 'invocations', `${invocationId}.log`);
|
|
242
|
-
if (!(0, node_fs_1.existsSync)(logPath)) {
|
|
243
|
-
return null;
|
|
244
|
-
}
|
|
245
|
-
try {
|
|
246
|
-
const raw = (0, node_fs_2.readFileSync)(logPath, 'utf-8');
|
|
247
|
-
if (raw.includes('DECISION: APPROVE')) {
|
|
248
|
-
return 'approve';
|
|
249
|
-
}
|
|
250
|
-
if (raw.includes('DECISION: REJECT')) {
|
|
251
|
-
return 'reject';
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
catch {
|
|
255
|
-
return null;
|
|
256
|
-
}
|
|
257
|
-
return null;
|
|
258
|
-
}
|
|
259
|
-
function sanitiseProjectState(globalDb, projectDb, projectPath, dryRun, staleInvocationTimeoutSec) {
|
|
260
|
-
const summary = {
|
|
261
|
-
ran: true,
|
|
262
|
-
reason: 'ok',
|
|
263
|
-
recoveredApprovals: 0,
|
|
264
|
-
recoveredRejects: 0,
|
|
265
|
-
closedStaleInvocations: 0,
|
|
266
|
-
releasedTaskLocks: 0,
|
|
267
|
-
releasedSectionLocks: 0,
|
|
268
|
-
};
|
|
269
|
-
const staleCutoffMs = Date.now() - staleInvocationTimeoutSec * 1000;
|
|
270
|
-
const activeRunnerTaskRows = globalDb
|
|
271
|
-
.prepare(`SELECT current_task_id, parallel_session_id
|
|
272
|
-
FROM runners
|
|
273
|
-
WHERE project_path = ?
|
|
274
|
-
AND status = 'running'
|
|
275
|
-
AND heartbeat_at > datetime('now', '-5 minutes')
|
|
276
|
-
AND (current_task_id IS NOT NULL OR parallel_session_id IS NOT NULL)`)
|
|
277
|
-
.all(projectPath);
|
|
278
|
-
const activeTaskIds = new Set(activeRunnerTaskRows
|
|
279
|
-
.map((row) => row.current_task_id)
|
|
280
|
-
.filter((taskId) => typeof taskId === 'string' && taskId.length > 0));
|
|
281
|
-
const hasActiveParallelRunner = activeRunnerTaskRows.some((row) => typeof row.parallel_session_id === 'string' && row.parallel_session_id.length > 0);
|
|
282
|
-
let hasActiveMergeLock = false;
|
|
283
|
-
try {
|
|
284
|
-
const mergeLockRows = projectDb
|
|
285
|
-
.prepare('SELECT expires_at FROM merge_locks')
|
|
286
|
-
.all();
|
|
287
|
-
const nowMs = Date.now();
|
|
288
|
-
hasActiveMergeLock = mergeLockRows.some((row) => {
|
|
289
|
-
const expiresAtMs = Date.parse(row.expires_at);
|
|
290
|
-
return Number.isFinite(expiresAtMs) && expiresAtMs > nowMs;
|
|
291
|
-
});
|
|
292
|
-
}
|
|
293
|
-
catch {
|
|
294
|
-
hasActiveMergeLock = false;
|
|
295
|
-
}
|
|
296
|
-
const hasActiveParallelContext = hasActiveParallelRunner || hasActiveMergeLock;
|
|
297
|
-
const staleInvocations = projectDb
|
|
298
|
-
.prepare(`SELECT i.id, i.task_id, i.role, i.started_at_ms, t.status AS task_status
|
|
299
|
-
FROM task_invocations i
|
|
300
|
-
LEFT JOIN tasks t ON t.id = i.task_id
|
|
301
|
-
WHERE i.status = 'running'
|
|
302
|
-
AND i.started_at_ms IS NOT NULL
|
|
303
|
-
AND i.started_at_ms <= ?
|
|
304
|
-
ORDER BY i.started_at_ms ASC`)
|
|
305
|
-
.all(staleCutoffMs);
|
|
306
|
-
for (const row of staleInvocations) {
|
|
307
|
-
if (activeTaskIds.has(row.task_id) || hasActiveParallelContext) {
|
|
308
|
-
continue;
|
|
309
|
-
}
|
|
310
|
-
const completedAtMs = Date.now();
|
|
311
|
-
const durationMs = Math.max(0, completedAtMs - row.started_at_ms);
|
|
312
|
-
const reviewerDecision = row.role === 'reviewer'
|
|
313
|
-
? parseReviewerDecisionFromLog(projectPath, row.id)
|
|
314
|
-
: null;
|
|
315
|
-
if (!dryRun) {
|
|
316
|
-
if (reviewerDecision === 'approve' && row.task_status === 'review') {
|
|
317
|
-
projectDb
|
|
318
|
-
.prepare(`UPDATE task_invocations
|
|
319
|
-
SET status = 'completed',
|
|
320
|
-
success = 1,
|
|
321
|
-
timed_out = 0,
|
|
322
|
-
exit_code = 0,
|
|
323
|
-
completed_at_ms = ?,
|
|
324
|
-
duration_ms = ?,
|
|
325
|
-
error = COALESCE(error, 'Recovered by periodic sanitise (review approve token found).')
|
|
326
|
-
WHERE id = ? AND status = 'running'`)
|
|
327
|
-
.run(completedAtMs, durationMs, row.id);
|
|
328
|
-
projectDb
|
|
329
|
-
.prepare(`UPDATE tasks
|
|
330
|
-
SET status = 'completed',
|
|
331
|
-
updated_at = datetime('now')
|
|
332
|
-
WHERE id = ? AND status = 'review'`)
|
|
333
|
-
.run(row.task_id);
|
|
334
|
-
projectDb
|
|
335
|
-
.prepare(`INSERT INTO audit (task_id, from_status, to_status, actor, actor_type, notes, created_at)
|
|
336
|
-
SELECT ?, 'review', 'completed', 'orchestrator', 'orchestrator',
|
|
337
|
-
'Recovered by periodic sanitise from reviewer decision log (DECISION: APPROVE).',
|
|
338
|
-
datetime('now')
|
|
339
|
-
WHERE EXISTS (SELECT 1 FROM tasks WHERE id = ? AND status = 'completed')`)
|
|
340
|
-
.run(row.task_id, row.task_id);
|
|
341
|
-
}
|
|
342
|
-
else if (reviewerDecision === 'reject' && row.task_status === 'review') {
|
|
343
|
-
projectDb
|
|
344
|
-
.prepare(`UPDATE task_invocations
|
|
345
|
-
SET status = 'completed',
|
|
346
|
-
success = 1,
|
|
347
|
-
timed_out = 0,
|
|
348
|
-
exit_code = 0,
|
|
349
|
-
completed_at_ms = ?,
|
|
350
|
-
duration_ms = ?,
|
|
351
|
-
error = COALESCE(error, 'Recovered by periodic sanitise (review reject token found).')
|
|
352
|
-
WHERE id = ? AND status = 'running'`)
|
|
353
|
-
.run(completedAtMs, durationMs, row.id);
|
|
354
|
-
projectDb
|
|
355
|
-
.prepare(`UPDATE tasks
|
|
356
|
-
SET status = 'in_progress',
|
|
357
|
-
rejection_count = COALESCE(rejection_count, 0) + 1,
|
|
358
|
-
updated_at = datetime('now')
|
|
359
|
-
WHERE id = ? AND status = 'review'`)
|
|
360
|
-
.run(row.task_id);
|
|
361
|
-
projectDb
|
|
362
|
-
.prepare(`INSERT INTO audit (task_id, from_status, to_status, actor, actor_type, notes, created_at)
|
|
363
|
-
SELECT ?, 'review', 'in_progress', 'orchestrator', 'orchestrator',
|
|
364
|
-
'Recovered by periodic sanitise from reviewer decision log (DECISION: REJECT).',
|
|
365
|
-
datetime('now')
|
|
366
|
-
WHERE EXISTS (SELECT 1 FROM tasks WHERE id = ? AND status = 'in_progress')`)
|
|
367
|
-
.run(row.task_id, row.task_id);
|
|
368
|
-
}
|
|
369
|
-
else {
|
|
370
|
-
projectDb
|
|
371
|
-
.prepare(`UPDATE task_invocations
|
|
372
|
-
SET status = 'failed',
|
|
373
|
-
success = 0,
|
|
374
|
-
timed_out = 1,
|
|
375
|
-
exit_code = 1,
|
|
376
|
-
completed_at_ms = ?,
|
|
377
|
-
duration_ms = ?,
|
|
378
|
-
error = COALESCE(error, 'Periodic sanitise closed stale running invocation.')
|
|
379
|
-
WHERE id = ? AND status = 'running'`)
|
|
380
|
-
.run(completedAtMs, durationMs, row.id);
|
|
381
|
-
}
|
|
382
|
-
}
|
|
383
|
-
if (reviewerDecision === 'approve' && row.task_status === 'review') {
|
|
384
|
-
summary.recoveredApprovals += 1;
|
|
385
|
-
}
|
|
386
|
-
else if (reviewerDecision === 'reject' && row.task_status === 'review') {
|
|
387
|
-
summary.recoveredRejects += 1;
|
|
388
|
-
}
|
|
389
|
-
else {
|
|
390
|
-
summary.closedStaleInvocations += 1;
|
|
391
|
-
}
|
|
392
|
-
}
|
|
393
|
-
if (!dryRun) {
|
|
394
|
-
const releasedTaskLocks = projectDb
|
|
395
|
-
.prepare(`DELETE FROM task_locks WHERE expires_at <= datetime('now')`)
|
|
396
|
-
.run();
|
|
397
|
-
summary.releasedTaskLocks = releasedTaskLocks.changes;
|
|
398
|
-
const releasedSectionLocks = projectDb
|
|
399
|
-
.prepare(`DELETE FROM section_locks WHERE expires_at <= datetime('now')`)
|
|
400
|
-
.run();
|
|
401
|
-
summary.releasedSectionLocks = releasedSectionLocks.changes;
|
|
402
|
-
}
|
|
403
|
-
return summary;
|
|
404
|
-
}
|
|
405
|
-
function runPeriodicSanitiseForProject(globalDb, projectDb, projectPath, dryRun) {
|
|
406
|
-
const settings = getSanitiseSettings(projectPath);
|
|
407
|
-
if (!settings.enabled) {
|
|
408
|
-
return {
|
|
409
|
-
ran: false,
|
|
410
|
-
reason: 'disabled',
|
|
411
|
-
recoveredApprovals: 0,
|
|
412
|
-
recoveredRejects: 0,
|
|
413
|
-
closedStaleInvocations: 0,
|
|
414
|
-
releasedTaskLocks: 0,
|
|
415
|
-
releasedSectionLocks: 0,
|
|
416
|
-
};
|
|
417
|
-
}
|
|
418
|
-
if (!shouldRunPeriodicSanitise(globalDb, projectPath, settings.intervalMinutes)) {
|
|
419
|
-
return {
|
|
420
|
-
ran: false,
|
|
421
|
-
reason: 'interval_not_due',
|
|
422
|
-
recoveredApprovals: 0,
|
|
423
|
-
recoveredRejects: 0,
|
|
424
|
-
closedStaleInvocations: 0,
|
|
425
|
-
releasedTaskLocks: 0,
|
|
426
|
-
releasedSectionLocks: 0,
|
|
427
|
-
};
|
|
428
|
-
}
|
|
429
|
-
const summary = sanitiseProjectState(globalDb, projectDb, projectPath, dryRun, settings.staleInvocationTimeoutSec);
|
|
430
|
-
if (!dryRun) {
|
|
431
|
-
markPeriodicSanitiseRun(globalDb, projectPath);
|
|
432
|
-
}
|
|
433
|
-
return summary;
|
|
434
|
-
}
|
|
435
|
-
function sanitisedActionCount(summary) {
|
|
436
|
-
return (summary.recoveredApprovals +
|
|
437
|
-
summary.recoveredRejects +
|
|
438
|
-
summary.closedStaleInvocations +
|
|
439
|
-
summary.releasedTaskLocks +
|
|
440
|
-
summary.releasedSectionLocks);
|
|
441
|
-
}
|
|
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; } });
|
|
442
27
|
/**
|
|
443
28
|
* Main wake-up function
|
|
444
29
|
* Called by cron every minute to ensure runners are healthy
|
|
445
30
|
* Iterates over ALL registered projects and starts runners as needed
|
|
446
31
|
* Returns per-project results
|
|
447
32
|
*/
|
|
448
|
-
/**
|
|
449
|
-
* Record the last wakeup invocation time
|
|
450
|
-
*/
|
|
451
|
-
function recordWakeupTime() {
|
|
452
|
-
const { db, close } = (0, global_db_js_1.openGlobalDatabase)();
|
|
453
|
-
try {
|
|
454
|
-
db.prepare(`INSERT INTO _global_schema (key, value) VALUES ('last_wakeup_at', datetime('now'))
|
|
455
|
-
ON CONFLICT(key) DO UPDATE SET value = datetime('now')`).run();
|
|
456
|
-
}
|
|
457
|
-
finally {
|
|
458
|
-
close();
|
|
459
|
-
}
|
|
460
|
-
}
|
|
461
|
-
/**
|
|
462
|
-
* Get the last wakeup invocation time
|
|
463
|
-
*/
|
|
464
|
-
function getLastWakeupTime() {
|
|
465
|
-
const { db, close } = (0, global_db_js_1.openGlobalDatabase)();
|
|
466
|
-
try {
|
|
467
|
-
const row = db
|
|
468
|
-
.prepare("SELECT value FROM _global_schema WHERE key = 'last_wakeup_at'")
|
|
469
|
-
.get();
|
|
470
|
-
return row?.value ?? null;
|
|
471
|
-
}
|
|
472
|
-
finally {
|
|
473
|
-
close();
|
|
474
|
-
}
|
|
475
|
-
}
|
|
476
33
|
async function wakeup(options = {}) {
|
|
477
34
|
const { quiet = false, dryRun = false } = options;
|
|
478
35
|
const results = [];
|
|
@@ -482,7 +39,7 @@ async function wakeup(options = {}) {
|
|
|
482
39
|
};
|
|
483
40
|
// Record wakeup invocation time (even for dry runs)
|
|
484
41
|
if (!dryRun) {
|
|
485
|
-
recordWakeupTime();
|
|
42
|
+
(0, wakeup_timing_js_1.recordWakeupTime)();
|
|
486
43
|
}
|
|
487
44
|
// Step 1: Clean up stale runners first
|
|
488
45
|
const global = (0, global_db_js_1.openGlobalDatabase)();
|
|
@@ -494,7 +51,7 @@ async function wakeup(options = {}) {
|
|
|
494
51
|
if (!dryRun) {
|
|
495
52
|
for (const runner of staleRunners) {
|
|
496
53
|
if (runner.pid) {
|
|
497
|
-
killProcess(runner.pid);
|
|
54
|
+
(0, wakeup_runner_js_1.killProcess)(runner.pid);
|
|
498
55
|
}
|
|
499
56
|
global.db.prepare(`UPDATE workstreams
|
|
500
57
|
SET runner_id = NULL,
|
|
@@ -514,7 +71,12 @@ async function wakeup(options = {}) {
|
|
|
514
71
|
// ignore global DB issues; wakeup will still attempt per-project checks
|
|
515
72
|
}
|
|
516
73
|
try {
|
|
517
|
-
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;
|
|
518
80
|
if (releasedLeases > 0) {
|
|
519
81
|
log(`Released ${releasedLeases} expired workstream lease(s)`);
|
|
520
82
|
}
|
|
@@ -574,8 +136,8 @@ async function wakeup(options = {}) {
|
|
|
574
136
|
try {
|
|
575
137
|
const { db: projectDb, close: closeProjectDb } = (0, connection_js_1.openDatabase)(project.path);
|
|
576
138
|
try {
|
|
577
|
-
const sanitiseSummary = runPeriodicSanitiseForProject(global.db, projectDb, project.path, dryRun);
|
|
578
|
-
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);
|
|
579
141
|
if (sanitisedActions > 0 && !quiet) {
|
|
580
142
|
log(`Sanitised ${sanitisedActions} stale item(s) in ${project.path}`);
|
|
581
143
|
}
|
|
@@ -606,7 +168,7 @@ async function wakeup(options = {}) {
|
|
|
606
168
|
// If sanitise/recovery can't run (DB missing/corrupt), we still proceed with runner checks.
|
|
607
169
|
}
|
|
608
170
|
// Check for pending work after sanitise/recovery
|
|
609
|
-
const hasWork = await projectHasPendingWork(project.path);
|
|
171
|
+
const hasWork = await (0, wakeup_checks_js_1.projectHasPendingWork)(project.path);
|
|
610
172
|
if (!hasWork) {
|
|
611
173
|
const noWorkReason = sanitisedActions > 0
|
|
612
174
|
? `No pending tasks after sanitise (${sanitisedActions} action(s))`
|
|
@@ -625,10 +187,10 @@ async function wakeup(options = {}) {
|
|
|
625
187
|
}
|
|
626
188
|
// Skip projects currently executing a parallel session before attempting recovery/startup.
|
|
627
189
|
// This prevents parallel runners from being interfered with by a cron-managed runner.
|
|
628
|
-
if (hasActiveParallelSessionForProject(project.path)) {
|
|
190
|
+
if ((0, wakeup_checks_js_1.hasActiveParallelSessionForProject)(project.path)) {
|
|
629
191
|
let retrySummary = '';
|
|
630
192
|
if (!dryRun) {
|
|
631
|
-
const recovery = reconcileParallelSessionRecovery(global.db, project.path);
|
|
193
|
+
const recovery = (0, wakeup_reconcile_js_1.reconcileParallelSessionRecovery)(global.db, project.path);
|
|
632
194
|
if (recovery.scheduledRetries > 0) {
|
|
633
195
|
retrySummary += `, scheduled ${recovery.scheduledRetries} recovery retry(s)`;
|
|
634
196
|
}
|
|
@@ -646,7 +208,7 @@ async function wakeup(options = {}) {
|
|
|
646
208
|
continue;
|
|
647
209
|
}
|
|
648
210
|
// Skip if project already has an active runner (after recovery, which may have killed/removed it).
|
|
649
|
-
if (hasActiveRunnerForProject(project.path)) {
|
|
211
|
+
if ((0, wakeup_checks_js_1.hasActiveRunnerForProject)(project.path)) {
|
|
650
212
|
log(`Skipping ${project.path}: runner already active`);
|
|
651
213
|
results.push({
|
|
652
214
|
action: 'none',
|
|
@@ -677,7 +239,7 @@ async function wakeup(options = {}) {
|
|
|
677
239
|
});
|
|
678
240
|
continue;
|
|
679
241
|
}
|
|
680
|
-
const startResult = startRunner(project.path);
|
|
242
|
+
const startResult = (0, wakeup_runner_js_1.startRunner)(project.path);
|
|
681
243
|
if (startResult) {
|
|
682
244
|
const mode = startResult.parallel ? 'parallel session' : 'runner';
|
|
683
245
|
results.push({
|
|
@@ -744,7 +306,7 @@ async function checkWakeupNeeded() {
|
|
|
744
306
|
const registeredProjects = (0, projects_js_1.getRegisteredProjects)(false);
|
|
745
307
|
let projectsWithWork = 0;
|
|
746
308
|
for (const project of registeredProjects) {
|
|
747
|
-
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))) {
|
|
748
310
|
projectsWithWork++;
|
|
749
311
|
}
|
|
750
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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"}
|