steroids-cli 0.14.3 → 0.15.1

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 (112) hide show
  1. package/dist/commands/ai-run.d.ts +10 -0
  2. package/dist/commands/ai-run.d.ts.map +1 -0
  3. package/dist/commands/ai-run.js +255 -0
  4. package/dist/commands/ai-run.js.map +1 -0
  5. package/dist/commands/ai.d.ts.map +1 -1
  6. package/dist/commands/ai.js +7 -1
  7. package/dist/commands/ai.js.map +1 -1
  8. package/dist/commands/coder-noop-submission.d.ts +2 -2
  9. package/dist/commands/coder-noop-submission.d.ts.map +1 -1
  10. package/dist/commands/coder-noop-submission.js +8 -1
  11. package/dist/commands/coder-noop-submission.js.map +1 -1
  12. package/dist/commands/completion.d.ts.map +1 -1
  13. package/dist/commands/completion.js +9 -0
  14. package/dist/commands/completion.js.map +1 -1
  15. package/dist/commands/loop-phases-coder-decision.d.ts +2 -0
  16. package/dist/commands/loop-phases-coder-decision.d.ts.map +1 -1
  17. package/dist/commands/loop-phases-coder-decision.js +18 -41
  18. package/dist/commands/loop-phases-coder-decision.js.map +1 -1
  19. package/dist/commands/loop-phases-coder.d.ts.map +1 -1
  20. package/dist/commands/loop-phases-coder.js +2 -1
  21. package/dist/commands/loop-phases-coder.js.map +1 -1
  22. package/dist/commands/loop-phases-reviewer.d.ts.map +1 -1
  23. package/dist/commands/loop-phases-reviewer.js +42 -71
  24. package/dist/commands/loop-phases-reviewer.js.map +1 -1
  25. package/dist/commands/loop.d.ts.map +1 -1
  26. package/dist/commands/loop.js +6 -0
  27. package/dist/commands/loop.js.map +1 -1
  28. package/dist/commands/push-task-branch.d.ts +12 -0
  29. package/dist/commands/push-task-branch.d.ts.map +1 -0
  30. package/dist/commands/push-task-branch.js +24 -0
  31. package/dist/commands/push-task-branch.js.map +1 -0
  32. package/dist/commands/tasks.js +1 -1
  33. package/dist/commands/tasks.js.map +1 -1
  34. package/dist/database/queries.d.ts +8 -2
  35. package/dist/database/queries.d.ts.map +1 -1
  36. package/dist/database/queries.js +17 -1
  37. package/dist/database/queries.js.map +1 -1
  38. package/dist/git/section-pr.js +1 -1
  39. package/dist/health/stuck-task-detector-types.d.ts +3 -3
  40. package/dist/health/stuck-task-detector-types.d.ts.map +1 -1
  41. package/dist/health/stuck-task-detector.js +21 -5
  42. package/dist/health/stuck-task-detector.js.map +1 -1
  43. package/dist/index.js +0 -4
  44. package/dist/index.js.map +1 -1
  45. package/dist/monitor/investigator-actions.d.ts.map +1 -1
  46. package/dist/monitor/investigator-actions.js +44 -39
  47. package/dist/monitor/investigator-actions.js.map +1 -1
  48. package/dist/monitor/investigator-agent.d.ts +9 -0
  49. package/dist/monitor/investigator-agent.d.ts.map +1 -1
  50. package/dist/monitor/investigator-agent.js +2 -0
  51. package/dist/monitor/investigator-agent.js.map +1 -1
  52. package/dist/monitor/investigator-helpers.d.ts +5 -0
  53. package/dist/monitor/investigator-helpers.d.ts.map +1 -0
  54. package/dist/monitor/investigator-helpers.js +44 -0
  55. package/dist/monitor/investigator-helpers.js.map +1 -0
  56. package/dist/monitor/investigator-prompt.d.ts.map +1 -1
  57. package/dist/monitor/investigator-prompt.js +11 -3
  58. package/dist/monitor/investigator-prompt.js.map +1 -1
  59. package/dist/monitor/scanner-queries.d.ts +3 -0
  60. package/dist/monitor/scanner-queries.d.ts.map +1 -1
  61. package/dist/monitor/scanner-queries.js +57 -0
  62. package/dist/monitor/scanner-queries.js.map +1 -1
  63. package/dist/monitor/scanner.d.ts +1 -1
  64. package/dist/monitor/scanner.d.ts.map +1 -1
  65. package/dist/monitor/scanner.js +10 -2
  66. package/dist/monitor/scanner.js.map +1 -1
  67. package/dist/orchestrator/merge-queue-rebase.d.ts +27 -0
  68. package/dist/orchestrator/merge-queue-rebase.d.ts.map +1 -0
  69. package/dist/orchestrator/merge-queue-rebase.js +355 -0
  70. package/dist/orchestrator/merge-queue-rebase.js.map +1 -0
  71. package/dist/orchestrator/merge-queue.d.ts +40 -0
  72. package/dist/orchestrator/merge-queue.d.ts.map +1 -0
  73. package/dist/orchestrator/merge-queue.js +352 -0
  74. package/dist/orchestrator/merge-queue.js.map +1 -0
  75. package/dist/orchestrator/task-selector.d.ts +2 -1
  76. package/dist/orchestrator/task-selector.d.ts.map +1 -1
  77. package/dist/orchestrator/task-selector.js +20 -5
  78. package/dist/orchestrator/task-selector.js.map +1 -1
  79. package/dist/parallel/clone.d.ts +0 -15
  80. package/dist/parallel/clone.d.ts.map +1 -1
  81. package/dist/parallel/clone.js +0 -37
  82. package/dist/parallel/clone.js.map +1 -1
  83. package/dist/providers/invocation-logger.d.ts +2 -2
  84. package/dist/providers/invocation-logger.d.ts.map +1 -1
  85. package/dist/providers/invocation-logger.js +1 -1
  86. package/dist/providers/invocation-logger.js.map +1 -1
  87. package/dist/runners/daemon.d.ts.map +1 -1
  88. package/dist/runners/daemon.js +0 -79
  89. package/dist/runners/daemon.js.map +1 -1
  90. package/dist/runners/orchestrator-loop.d.ts.map +1 -1
  91. package/dist/runners/orchestrator-loop.js +11 -29
  92. package/dist/runners/orchestrator-loop.js.map +1 -1
  93. package/dist/runners/wakeup-checks.js +1 -1
  94. package/dist/runners/wakeup-checks.js.map +1 -1
  95. package/dist/runners/wakeup-sanitise-recovery.d.ts.map +1 -1
  96. package/dist/runners/wakeup-sanitise-recovery.js +39 -5
  97. package/dist/runners/wakeup-sanitise-recovery.js.map +1 -1
  98. package/dist/runners/wakeup-sanitise.d.ts +1 -0
  99. package/dist/runners/wakeup-sanitise.d.ts.map +1 -1
  100. package/dist/runners/wakeup-sanitise.js +66 -8
  101. package/dist/runners/wakeup-sanitise.js.map +1 -1
  102. package/dist/workspace/git-helpers.d.ts +8 -0
  103. package/dist/workspace/git-helpers.d.ts.map +1 -1
  104. package/dist/workspace/git-helpers.js +34 -0
  105. package/dist/workspace/git-helpers.js.map +1 -1
  106. package/dist/workspace/merge-lock.d.ts +5 -3
  107. package/dist/workspace/merge-lock.d.ts.map +1 -1
  108. package/dist/workspace/merge-lock.js +16 -15
  109. package/dist/workspace/merge-lock.js.map +1 -1
  110. package/migrations/028_add_merge_queue_fields.sql +8 -0
  111. package/migrations/manifest.json +9 -1
  112. package/package.json +1 -1
@@ -10,6 +10,7 @@ exports.runPeriodicSanitiseForProject = runPeriodicSanitiseForProject;
10
10
  exports.sanitisedActionCount = sanitisedActionCount;
11
11
  const loader_js_1 = require("../config/loader.js");
12
12
  const wakeup_sanitise_recovery_js_1 = require("./wakeup-sanitise-recovery.js");
13
+ const clone_js_1 = require("../parallel/clone.js");
13
14
  const DEFAULT_SANITISE_INTERVAL_MINUTES = 5;
14
15
  const DEFAULT_SANITISE_INVOCATION_TIMEOUT_SEC = 1800;
15
16
  function getSanitiseSettings(projectPath) {
@@ -53,6 +54,7 @@ function sanitiseProjectState(globalDb, projectDb, projectPath, dryRun, staleInv
53
54
  releasedTaskLocks: 0,
54
55
  releasedSectionLocks: 0,
55
56
  recoveredDisputedTasks: 0,
57
+ recoveredFailedTasks: 0,
56
58
  };
57
59
  const staleCutoffMs = Date.now() - staleInvocationTimeoutSec * 1000;
58
60
  // S1/S2: Include parallel session runners (workspace-prefixed paths don't match project_path directly)
@@ -71,13 +73,15 @@ function sanitiseProjectState(globalDb, projectDb, projectPath, dryRun, staleInv
71
73
  const hasActiveParallelRunner = activeRunnerTaskRows.some((row) => typeof row.parallel_session_id === 'string' && row.parallel_session_id.length > 0);
72
74
  let hasActiveMergeLock = false;
73
75
  try {
74
- const mergeLockRows = projectDb
75
- .prepare('SELECT expires_at FROM merge_locks')
76
- .all();
76
+ const STALE_LOCK_TTL_MS = 90_000;
77
+ const projectId = (0, clone_js_1.getProjectHash)(projectPath);
78
+ const mergeLockRows = globalDb
79
+ .prepare('SELECT heartbeat_at FROM workspace_merge_locks WHERE project_id = ?')
80
+ .all(projectId);
77
81
  const nowMs = Date.now();
78
82
  hasActiveMergeLock = mergeLockRows.some((row) => {
79
- const expiresAtMs = Date.parse(row.expires_at);
80
- return Number.isFinite(expiresAtMs) && expiresAtMs > nowMs;
83
+ const hbMs = Date.parse(row.heartbeat_at);
84
+ return Number.isFinite(hbMs) && (nowMs - hbMs) < STALE_LOCK_TTL_MS;
81
85
  });
82
86
  }
83
87
  catch {
@@ -113,7 +117,8 @@ function sanitiseProjectState(globalDb, projectDb, projectPath, dryRun, staleInv
113
117
  ORDER BY i.started_at_ms ASC`)
114
118
  .all(staleCutoffMs, deadRunnerCutoffMs);
115
119
  for (const row of recentRunningInvocations) {
116
- if (activeTaskIds.has(row.task_id) || hasActiveMergeLock) {
120
+ const isRebaseRole = row.role === 'rebase_coder' || row.role === 'rebase_reviewer';
121
+ if (activeTaskIds.has(row.task_id) || (hasActiveMergeLock && !isRebaseRole)) {
117
122
  continue;
118
123
  }
119
124
  // Only recover if we can confirm the runner process is dead
@@ -169,7 +174,7 @@ function sanitiseProjectState(globalDb, projectDb, projectPath, dryRun, staleInv
169
174
  const ids = disputedRows.map((r) => r.id);
170
175
  const placeholders = ids.map(() => '?').join(',');
171
176
  projectDb
172
- .prepare(`UPDATE tasks SET status = 'pending', updated_at = datetime('now')
177
+ .prepare(`UPDATE tasks SET status = 'pending', merge_phase = NULL, approved_sha = NULL, rebase_attempts = 0, updated_at = datetime('now')
173
178
  WHERE id IN (${placeholders})`)
174
179
  .run(...ids);
175
180
  const auditStmt = projectDb.prepare(`INSERT INTO audit (task_id, from_status, to_status, actor, actor_type, notes, created_at)
@@ -189,6 +194,56 @@ function sanitiseProjectState(globalDb, projectDb, projectPath, dryRun, staleInv
189
194
  catch {
190
195
  // task_invocations may lack role column or audit table schema mismatch — safe to skip
191
196
  }
197
+ // S4: Recover failed/skipped tasks stuck > 30 min.
198
+ // Resets to 'pending' — the task selector's S7 logic will route to 'review'
199
+ // (skipping the coder) if the coder already succeeded for the task.
200
+ // Clears failure_count/rejection_count and merge columns for a fresh attempt.
201
+ // Guard: skip tasks with >30 total invocations — they likely have a systemic
202
+ // issue (infrastructure block, repeated provider failures) and should not
203
+ // be retried automatically to avoid burning credits.
204
+ try {
205
+ const failedRows = projectDb
206
+ .prepare(`SELECT t.id, t.status FROM tasks t
207
+ WHERE t.status IN ('failed', 'skipped')
208
+ AND t.updated_at < datetime('now', '-30 minutes')
209
+ AND (
210
+ SELECT COUNT(*) FROM task_invocations i WHERE i.task_id = t.id
211
+ ) <= 30`)
212
+ .all();
213
+ if (failedRows.length > 0) {
214
+ const ids = failedRows.map((r) => r.id);
215
+ const placeholders = ids.map(() => '?').join(',');
216
+ projectDb
217
+ .prepare(`UPDATE tasks
218
+ SET status = 'pending',
219
+ failure_count = 0,
220
+ rejection_count = 0,
221
+ merge_phase = NULL,
222
+ approved_sha = NULL,
223
+ rebase_attempts = 0,
224
+ merge_failure_count = 0,
225
+ conflict_count = 0,
226
+ blocked_reason = NULL,
227
+ last_failure_at = NULL,
228
+ updated_at = datetime('now')
229
+ WHERE id IN (${placeholders})`)
230
+ .run(...ids);
231
+ const auditStmt = projectDb.prepare(`INSERT INTO audit (task_id, from_status, to_status, actor, actor_type, notes, created_at)
232
+ VALUES (?, ?, 'pending', 'orchestrator', 'orchestrator',
233
+ 'Recovered by periodic sanitise — failed/skipped task reset for retry (S7 routes to correct phase).',
234
+ datetime('now'))`);
235
+ for (const row of failedRows) {
236
+ auditStmt.run(row.id, row.status);
237
+ }
238
+ projectDb
239
+ .prepare(`DELETE FROM task_locks WHERE task_id IN (${placeholders})`)
240
+ .run(...ids);
241
+ }
242
+ summary.recoveredFailedTasks = failedRows.length;
243
+ }
244
+ catch {
245
+ // Safe to skip on schema mismatch
246
+ }
192
247
  }
193
248
  return summary;
194
249
  }
@@ -204,6 +259,7 @@ function runPeriodicSanitiseForProject(globalDb, projectDb, projectPath, dryRun)
204
259
  releasedTaskLocks: 0,
205
260
  releasedSectionLocks: 0,
206
261
  recoveredDisputedTasks: 0,
262
+ recoveredFailedTasks: 0,
207
263
  };
208
264
  }
209
265
  if (!shouldRunPeriodicSanitise(globalDb, projectPath, settings.intervalMinutes)) {
@@ -216,6 +272,7 @@ function runPeriodicSanitiseForProject(globalDb, projectDb, projectPath, dryRun)
216
272
  releasedTaskLocks: 0,
217
273
  releasedSectionLocks: 0,
218
274
  recoveredDisputedTasks: 0,
275
+ recoveredFailedTasks: 0,
219
276
  };
220
277
  }
221
278
  const summary = sanitiseProjectState(globalDb, projectDb, projectPath, dryRun, settings.staleInvocationTimeoutSec);
@@ -230,6 +287,7 @@ function sanitisedActionCount(summary) {
230
287
  summary.closedStaleInvocations +
231
288
  summary.releasedTaskLocks +
232
289
  summary.releasedSectionLocks +
233
- summary.recoveredDisputedTasks);
290
+ summary.recoveredDisputedTasks +
291
+ summary.recoveredFailedTasks);
234
292
  }
235
293
  //# sourceMappingURL=wakeup-sanitise.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"wakeup-sanitise.js","sourceRoot":"","sources":["../../src/runners/wakeup-sanitise.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wakeup-sanitise.js","sourceRoot":"","sources":["../../src/runners/wakeup-sanitise.ts"],"names":[],"mappings":"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"}
@@ -42,6 +42,14 @@ export declare function pushWithRetries(cwd: string, remote: string, refspec: st
42
42
  success: boolean;
43
43
  error?: string;
44
44
  };
45
+ /**
46
+ * Async version of pushWithRetries — uses setTimeout instead of busy-wait
47
+ * so heartbeat timers can fire during backoff delays.
48
+ */
49
+ export declare function pushWithRetriesAsync(cwd: string, remote: string, refspec: string, retries?: number, backoffMs?: number[], forceWithLease?: boolean): Promise<{
50
+ success: boolean;
51
+ error?: string;
52
+ }>;
45
53
  /**
46
54
  * Check if `ancestor` is an ancestor of `descendant`.
47
55
  */
@@ -1 +1 @@
1
- {"version":3,"file":"git-helpers.d.ts","sourceRoot":"","sources":["../../src/workspace/git-helpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,WAAW,cAAc;IAC7B,iDAAiD;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iEAAiE;IACjE,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;;GAGG;AACH,wBAAgB,OAAO,CACrB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,CAAC,EAAE,cAAc,GACvB,MAAM,GAAG,IAAI,CAef;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAKxD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAMjD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAE7C;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,YAAY,GAAE,MAAM,GAAG,IAAW,GACjC,MAAM,CAER;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,MAAU,EACnB,SAAS,GAAE,MAAM,EAAwB,EACzC,cAAc,GAAE,OAAe,GAC9B;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAmCtC;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAQrF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAEvE"}
1
+ {"version":3,"file":"git-helpers.d.ts","sourceRoot":"","sources":["../../src/workspace/git-helpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,MAAM,WAAW,cAAc;IAC7B,iDAAiD;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iEAAiE;IACjE,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;;GAGG;AACH,wBAAgB,OAAO,CACrB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,CAAC,EAAE,cAAc,GACvB,MAAM,GAAG,IAAI,CAef;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAKxD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAMjD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAE7C;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,YAAY,GAAE,MAAM,GAAG,IAAW,GACjC,MAAM,CAER;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,MAAU,EACnB,SAAS,GAAE,MAAM,EAAwB,EACzC,cAAc,GAAE,OAAe,GAC9B;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAmCtC;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,MAAU,EACnB,SAAS,GAAE,MAAM,EAAwB,EACzC,cAAc,GAAE,OAAe,GAC9B,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA4B/C;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAQrF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAEvE"}
@@ -10,12 +10,15 @@ exports.hasMidRebase = hasMidRebase;
10
10
  exports.abortRebase = abortRebase;
11
11
  exports.resolveBaseBranch = resolveBaseBranch;
12
12
  exports.pushWithRetries = pushWithRetries;
13
+ exports.pushWithRetriesAsync = pushWithRetriesAsync;
13
14
  exports.isAncestor = isAncestor;
14
15
  exports.getStatusPorcelain = getStatusPorcelain;
15
16
  exports.getLogOneline = getLogOneline;
16
17
  const node_child_process_1 = require("node:child_process");
17
18
  const node_fs_1 = require("node:fs");
18
19
  const node_path_1 = require("node:path");
20
+ const node_util_1 = require("node:util");
21
+ const execFileAsync = (0, node_util_1.promisify)(node_child_process_1.execFile);
19
22
  /**
20
23
  * Run a git command synchronously. Returns trimmed stdout on success.
21
24
  * Throws on non-zero exit unless `tolerateFailure` is set.
@@ -109,6 +112,37 @@ function pushWithRetries(cwd, remote, refspec, retries = 3, backoffMs = [1000, 4
109
112
  }
110
113
  return { success: false, error: `Push failed after ${retries} attempts: ${lastError}` };
111
114
  }
115
+ /**
116
+ * Async version of pushWithRetries — uses setTimeout instead of busy-wait
117
+ * so heartbeat timers can fire during backoff delays.
118
+ */
119
+ async function pushWithRetriesAsync(cwd, remote, refspec, retries = 3, backoffMs = [1000, 4000, 16000], forceWithLease = false) {
120
+ const pushArgs = ['push', remote, refspec];
121
+ if (forceWithLease) {
122
+ pushArgs.push('--force-with-lease');
123
+ }
124
+ let lastError = '';
125
+ for (let attempt = 0; attempt < retries; attempt++) {
126
+ try {
127
+ await execFileAsync('git', pushArgs, {
128
+ cwd,
129
+ encoding: 'utf-8',
130
+ timeout: 120_000,
131
+ env: { ...process.env, GIT_TERMINAL_PROMPT: '0' },
132
+ });
133
+ return { success: true };
134
+ }
135
+ catch (err) {
136
+ const msg = err instanceof Error ? err.message : String(err);
137
+ const stderr = err?.stderr ?? '';
138
+ lastError = stderr.trim() || msg;
139
+ }
140
+ if (attempt < retries - 1 && attempt < backoffMs.length) {
141
+ await new Promise(r => setTimeout(r, backoffMs[attempt]));
142
+ }
143
+ }
144
+ return { success: false, error: `Push failed after ${retries} attempts: ${lastError}` };
145
+ }
112
146
  /**
113
147
  * Check if `ancestor` is an ancestor of `descendant`.
114
148
  */
@@ -1 +1 @@
1
- {"version":3,"file":"git-helpers.js","sourceRoot":"","sources":["../../src/workspace/git-helpers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"git-helpers.js","sourceRoot":"","sources":["../../src/workspace/git-helpers.ts"],"names":[],"mappings":"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"}
@@ -7,12 +7,14 @@
7
7
  import type Database from 'better-sqlite3';
8
8
  /**
9
9
  * Attempt to acquire the merge lock for a project.
10
- * Polls every `pollMs` until `timeoutMs` elapses.
11
- * Reclaims stale locks older than 3 minutes.
10
+ *
11
+ * When `tryOnce` is true, makes a single attempt and returns immediately.
12
+ * Otherwise polls every `pollMs` until `timeoutMs` elapses.
13
+ * Reclaims stale locks older than 90 seconds.
12
14
  *
13
15
  * Returns true if the lock was acquired.
14
16
  */
15
- export declare function acquireWorkspaceMergeLock(globalDb: Database.Database, projectId: string, runnerId: string, slotId: number, timeoutMs?: number, pollMs?: number): boolean;
17
+ export declare function acquireWorkspaceMergeLock(globalDb: Database.Database, projectId: string, runnerId: string, slotId: number, timeoutMs?: number, pollMs?: number, tryOnce?: boolean): boolean;
16
18
  /**
17
19
  * Release the merge lock for a project.
18
20
  */
@@ -1 +1 @@
1
- {"version":3,"file":"merge-lock.d.ts","sourceRoot":"","sources":["../../src/workspace/merge-lock.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAC3B,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,SAAS,GAAE,MAAgB,EAC3B,MAAM,GAAE,MAAc,GACrB,OAAO,CAgET;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAC3B,SAAS,EAAE,MAAM,GAChB,IAAI,CAIN;AAED;;;GAGG;AACH,wBAAgB,kCAAkC,CAChD,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAC3B,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GACf,IAAI,CAQN"}
1
+ {"version":3,"file":"merge-lock.d.ts","sourceRoot":"","sources":["../../src/workspace/merge-lock.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAI3C;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAC3B,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,SAAS,GAAE,MAAgB,EAC3B,MAAM,GAAE,MAAc,EACtB,OAAO,GAAE,OAAe,GACvB,OAAO,CA8DT;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAC3B,SAAS,EAAE,MAAM,GAChB,IAAI,CAIN;AAED;;;GAGG;AACH,wBAAgB,kCAAkC,CAChD,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAC3B,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GACf,IAAI,CAQN"}
@@ -9,37 +9,33 @@ Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.acquireWorkspaceMergeLock = acquireWorkspaceMergeLock;
10
10
  exports.releaseWorkspaceMergeLock = releaseWorkspaceMergeLock;
11
11
  exports.refreshWorkspaceMergeLockHeartbeat = refreshWorkspaceMergeLockHeartbeat;
12
+ const STALE_LOCK_TTL_MS = 90_000; // 90s — merge queue uses heartbeats, so stale = missed ~3 heartbeat cycles
12
13
  /**
13
14
  * Attempt to acquire the merge lock for a project.
14
- * Polls every `pollMs` until `timeoutMs` elapses.
15
- * Reclaims stale locks older than 3 minutes.
15
+ *
16
+ * When `tryOnce` is true, makes a single attempt and returns immediately.
17
+ * Otherwise polls every `pollMs` until `timeoutMs` elapses.
18
+ * Reclaims stale locks older than 90 seconds.
16
19
  *
17
20
  * Returns true if the lock was acquired.
18
21
  */
19
- function acquireWorkspaceMergeLock(globalDb, projectId, runnerId, slotId, timeoutMs = 300_000, pollMs = 5_000) {
20
- const deadline = Date.now() + timeoutMs;
21
- const STALE_LOCK_TTL_MS = 10 * 60 * 1000; // 10 minutes — must exceed worst-case push retry (3×120s = 360s)
22
- while (Date.now() < deadline) {
23
- const acquired = globalDb.transaction(() => {
24
- // Check for existing lock
22
+ function acquireWorkspaceMergeLock(globalDb, projectId, runnerId, slotId, timeoutMs = 300_000, pollMs = 5_000, tryOnce = false) {
23
+ const attemptAcquire = () => {
24
+ return globalDb.transaction(() => {
25
25
  const existing = globalDb
26
26
  .prepare('SELECT * FROM workspace_merge_locks WHERE project_id = ?')
27
27
  .get(projectId);
28
28
  if (existing) {
29
- // Check if stale
30
29
  const age = Date.now() - existing.heartbeat_at;
31
30
  if (age > STALE_LOCK_TTL_MS) {
32
- // Reclaim stale lock
33
31
  globalDb
34
32
  .prepare('DELETE FROM workspace_merge_locks WHERE id = ?')
35
33
  .run(existing.id);
36
34
  }
37
35
  else {
38
- // Lock is held by another runner
39
36
  return false;
40
37
  }
41
38
  }
42
- // Insert new lock
43
39
  const now = Date.now();
44
40
  try {
45
41
  globalDb
@@ -51,15 +47,20 @@ function acquireWorkspaceMergeLock(globalDb, projectId, runnerId, slotId, timeou
51
47
  }
52
48
  catch (error) {
53
49
  if (error.message?.includes('UNIQUE constraint')) {
54
- return false; // Another runner acquired it
50
+ return false;
55
51
  }
56
52
  throw error;
57
53
  }
58
54
  }).immediate();
59
- if (acquired) {
55
+ };
56
+ if (tryOnce) {
57
+ return attemptAcquire();
58
+ }
59
+ const deadline = Date.now() + timeoutMs;
60
+ while (Date.now() < deadline) {
61
+ if (attemptAcquire()) {
60
62
  return true;
61
63
  }
62
- // Wait before retrying
63
64
  const remaining = deadline - Date.now();
64
65
  if (remaining <= 0)
65
66
  break;
@@ -1 +1 @@
1
- {"version":3,"file":"merge-lock.js","sourceRoot":"","sources":["../../src/workspace/merge-lock.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAWH,8DAuEC;AAKD,8DAOC;AAMD,gFAYC;AA5GD;;;;;;GAMG;AACH,SAAgB,yBAAyB,CACvC,QAA2B,EAC3B,SAAiB,EACjB,QAAgB,EAChB,MAAc,EACd,YAAoB,OAAO,EAC3B,SAAiB,KAAK;IAEtB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IACxC,MAAM,iBAAiB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,iEAAiE;IAE3G,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,EAAE;YACzC,0BAA0B;YAC1B,MAAM,QAAQ,GAAG,QAAQ;iBACtB,OAAO,CAAC,0DAA0D,CAAC;iBACnE,GAAG,CAAC,SAAS,CAIH,CAAC;YAEd,IAAI,QAAQ,EAAE,CAAC;gBACb,iBAAiB;gBACjB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,YAAY,CAAC;gBAC/C,IAAI,GAAG,GAAG,iBAAiB,EAAE,CAAC;oBAC5B,qBAAqB;oBACrB,QAAQ;yBACL,OAAO,CAAC,gDAAgD,CAAC;yBACzD,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;gBACtB,CAAC;qBAAM,CAAC;oBACN,iCAAiC;oBACjC,OAAO,KAAK,CAAC;gBACf,CAAC;YACH,CAAC;YAED,kBAAkB;YAClB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,IAAI,CAAC;gBACH,QAAQ;qBACL,OAAO,CACN;;oCAEwB,CACzB;qBACA,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;gBAC9C,OAAO,IAAI,CAAC;YACd,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,IAAI,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;oBACjD,OAAO,KAAK,CAAC,CAAC,6BAA6B;gBAC7C,CAAC;gBACD,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;QAEf,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,IAAI,CAAC;QACd,CAAC;QAED,uBAAuB;QACvB,MAAM,SAAS,GAAG,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACxC,IAAI,SAAS,IAAI,CAAC;YAAE,MAAM;QAE1B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;QAC/B,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC;YACxB,gDAAgD;QAClD,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,SAAgB,yBAAyB,CACvC,QAA2B,EAC3B,SAAiB;IAEjB,QAAQ;SACL,OAAO,CAAC,wDAAwD,CAAC;SACjE,GAAG,CAAC,SAAS,CAAC,CAAC;AACpB,CAAC;AAED;;;GAGG;AACH,SAAgB,kCAAkC,CAChD,QAA2B,EAC3B,SAAiB,EACjB,QAAgB;IAEhB,QAAQ;SACL,OAAO,CACN;;8CAEwC,CACzC;SACA,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AAC1C,CAAC"}
1
+ {"version":3,"file":"merge-lock.js","sourceRoot":"","sources":["../../src/workspace/merge-lock.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAeH,8DAsEC;AAKD,8DAOC;AAMD,gFAYC;AA/GD,MAAM,iBAAiB,GAAG,MAAM,CAAC,CAAC,2EAA2E;AAE7G;;;;;;;;GAQG;AACH,SAAgB,yBAAyB,CACvC,QAA2B,EAC3B,SAAiB,EACjB,QAAgB,EAChB,MAAc,EACd,YAAoB,OAAO,EAC3B,SAAiB,KAAK,EACtB,UAAmB,KAAK;IAExB,MAAM,cAAc,GAAG,GAAY,EAAE;QACnC,OAAO,QAAQ,CAAC,WAAW,CAAC,GAAG,EAAE;YAC/B,MAAM,QAAQ,GAAG,QAAQ;iBACtB,OAAO,CAAC,0DAA0D,CAAC;iBACnE,GAAG,CAAC,SAAS,CAIH,CAAC;YAEd,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,YAAY,CAAC;gBAC/C,IAAI,GAAG,GAAG,iBAAiB,EAAE,CAAC;oBAC5B,QAAQ;yBACL,OAAO,CAAC,gDAAgD,CAAC;yBACzD,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;gBACtB,CAAC;qBAAM,CAAC;oBACN,OAAO,KAAK,CAAC;gBACf,CAAC;YACH,CAAC;YAED,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,IAAI,CAAC;gBACH,QAAQ;qBACL,OAAO,CACN;;oCAEwB,CACzB;qBACA,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;gBAC9C,OAAO,IAAI,CAAC;YACd,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,IAAI,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;oBACjD,OAAO,KAAK,CAAC;gBACf,CAAC;gBACD,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;IACjB,CAAC,CAAC;IAEF,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,cAAc,EAAE,CAAC;IAC1B,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IACxC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC7B,IAAI,cAAc,EAAE,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,SAAS,GAAG,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACxC,IAAI,SAAS,IAAI,CAAC;YAAE,MAAM;QAE1B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;QAC/B,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC;YACxB,gDAAgD;QAClD,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,SAAgB,yBAAyB,CACvC,QAA2B,EAC3B,SAAiB;IAEjB,QAAQ;SACL,OAAO,CAAC,wDAAwD,CAAC;SACjE,GAAG,CAAC,SAAS,CAAC,CAAC;AACpB,CAAC;AAED;;;GAGG;AACH,SAAgB,kCAAkC,CAChD,QAA2B,EAC3B,SAAiB,EACjB,QAAgB;IAEhB,QAAQ;SACL,OAAO,CACN;;8CAEwC,CACzC;SACA,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AAC1C,CAAC"}
@@ -0,0 +1,8 @@
1
+ -- UP
2
+ ALTER TABLE tasks ADD COLUMN merge_phase TEXT;
3
+ ALTER TABLE tasks ADD COLUMN approved_sha TEXT;
4
+ ALTER TABLE tasks ADD COLUMN rebase_attempts INTEGER DEFAULT 0;
5
+
6
+ -- DOWN
7
+ -- SQLite does not support DROP COLUMN; these columns are nullable/defaulted
8
+ -- and harmless if left in place after rollback.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": "0.2.3",
3
- "latestDbVersion": 27,
3
+ "latestDbVersion": 28,
4
4
  "migrations": [
5
5
  {
6
6
  "id": 1,
@@ -217,6 +217,14 @@
217
217
  "description": "Add task_dependencies table for explicit task-level dependency tracking",
218
218
  "checksum": "",
219
219
  "cliVersion": "0.12.7"
220
+ },
221
+ {
222
+ "id": 28,
223
+ "name": "028_add_merge_queue_fields",
224
+ "file": "028_add_merge_queue_fields.sql",
225
+ "description": "Add merge_phase, approved_sha, rebase_attempts columns for merge queue pipeline",
226
+ "checksum": "",
227
+ "cliVersion": "0.14.3"
220
228
  }
221
229
  ]
222
230
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "steroids-cli",
3
- "version": "0.14.3",
3
+ "version": "0.15.1",
4
4
  "description": "Automated task execution system with coder/reviewer loop",
5
5
  "main": "dist/index.js",
6
6
  "bin": {