steroids-cli 0.15.4 → 0.15.6

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 (140) hide show
  1. package/dist/commands/ai-proxy.d.ts +6 -0
  2. package/dist/commands/ai-proxy.d.ts.map +1 -0
  3. package/dist/commands/ai-proxy.js +79 -0
  4. package/dist/commands/ai-proxy.js.map +1 -0
  5. package/dist/commands/ai-run.d.ts.map +1 -1
  6. package/dist/commands/ai-run.js +10 -7
  7. package/dist/commands/ai-run.js.map +1 -1
  8. package/dist/commands/ai.d.ts.map +1 -1
  9. package/dist/commands/ai.js +5 -0
  10. package/dist/commands/ai.js.map +1 -1
  11. package/dist/commands/completion.js +2 -1
  12. package/dist/commands/completion.js.map +1 -1
  13. package/dist/commands/features.d.ts +5 -0
  14. package/dist/commands/features.d.ts.map +1 -0
  15. package/dist/commands/features.js +255 -0
  16. package/dist/commands/features.js.map +1 -0
  17. package/dist/commands/llm-content.d.ts +1 -1
  18. package/dist/commands/llm-content.d.ts.map +1 -1
  19. package/dist/commands/llm-content.js +2 -2
  20. package/dist/commands/llm.d.ts.map +1 -1
  21. package/dist/commands/llm.js +1 -0
  22. package/dist/commands/llm.js.map +1 -1
  23. package/dist/commands/web.d.ts.map +1 -1
  24. package/dist/commands/web.js +22 -3
  25. package/dist/commands/web.js.map +1 -1
  26. package/dist/index.js +7 -3
  27. package/dist/index.js.map +1 -1
  28. package/dist/providers/api-models.d.ts +5 -1
  29. package/dist/providers/api-models.d.ts.map +1 -1
  30. package/dist/providers/api-models.js +10 -107
  31. package/dist/providers/api-models.js.map +1 -1
  32. package/dist/providers/claude.d.ts.map +1 -1
  33. package/dist/providers/claude.js +16 -1
  34. package/dist/providers/claude.js.map +1 -1
  35. package/dist/providers/codex.d.ts.map +1 -1
  36. package/dist/providers/codex.js +16 -1
  37. package/dist/providers/codex.js.map +1 -1
  38. package/dist/providers/interface.d.ts.map +1 -1
  39. package/dist/providers/interface.js +11 -1
  40. package/dist/providers/interface.js.map +1 -1
  41. package/dist/providers/mistral-models.d.ts +18 -0
  42. package/dist/providers/mistral-models.d.ts.map +1 -0
  43. package/dist/providers/mistral-models.js +145 -0
  44. package/dist/providers/mistral-models.js.map +1 -0
  45. package/dist/providers/mistral.d.ts +6 -0
  46. package/dist/providers/mistral.d.ts.map +1 -1
  47. package/dist/providers/mistral.js +31 -54
  48. package/dist/providers/mistral.js.map +1 -1
  49. package/dist/providers/opencode.d.ts.map +1 -1
  50. package/dist/providers/opencode.js +5 -1
  51. package/dist/providers/opencode.js.map +1 -1
  52. package/dist/proxy/daemon-entry.d.ts +9 -0
  53. package/dist/proxy/daemon-entry.d.ts.map +1 -0
  54. package/dist/proxy/daemon-entry.js +29 -0
  55. package/dist/proxy/daemon-entry.js.map +1 -0
  56. package/dist/proxy/hf-proxy.d.ts +16 -0
  57. package/dist/proxy/hf-proxy.d.ts.map +1 -0
  58. package/dist/proxy/hf-proxy.js +200 -0
  59. package/dist/proxy/hf-proxy.js.map +1 -0
  60. package/dist/proxy/hf-token.d.ts +18 -0
  61. package/dist/proxy/hf-token.d.ts.map +1 -0
  62. package/dist/proxy/hf-token.js +57 -0
  63. package/dist/proxy/hf-token.js.map +1 -0
  64. package/dist/proxy/lifecycle.d.ts +26 -0
  65. package/dist/proxy/lifecycle.d.ts.map +1 -0
  66. package/dist/proxy/lifecycle.js +129 -0
  67. package/dist/proxy/lifecycle.js.map +1 -0
  68. package/package.json +1 -1
  69. package/dist/commands/merge.d.ts +0 -3
  70. package/dist/commands/merge.d.ts.map +0 -1
  71. package/dist/commands/merge.js +0 -246
  72. package/dist/commands/merge.js.map +0 -1
  73. package/dist/parallel/merge-commit-checks.d.ts +0 -6
  74. package/dist/parallel/merge-commit-checks.d.ts.map +0 -1
  75. package/dist/parallel/merge-commit-checks.js +0 -28
  76. package/dist/parallel/merge-commit-checks.js.map +0 -1
  77. package/dist/parallel/merge-conflict-attempts.d.ts +0 -8
  78. package/dist/parallel/merge-conflict-attempts.d.ts.map +0 -1
  79. package/dist/parallel/merge-conflict-attempts.js +0 -60
  80. package/dist/parallel/merge-conflict-attempts.js.map +0 -1
  81. package/dist/parallel/merge-conflict-invoke.d.ts +0 -2
  82. package/dist/parallel/merge-conflict-invoke.d.ts.map +0 -1
  83. package/dist/parallel/merge-conflict-invoke.js +0 -41
  84. package/dist/parallel/merge-conflict-invoke.js.map +0 -1
  85. package/dist/parallel/merge-conflict-prompts.d.ts +0 -23
  86. package/dist/parallel/merge-conflict-prompts.d.ts.map +0 -1
  87. package/dist/parallel/merge-conflict-prompts.js +0 -40
  88. package/dist/parallel/merge-conflict-prompts.js.map +0 -1
  89. package/dist/parallel/merge-conflict-task.d.ts +0 -3
  90. package/dist/parallel/merge-conflict-task.d.ts.map +0 -1
  91. package/dist/parallel/merge-conflict-task.js +0 -59
  92. package/dist/parallel/merge-conflict-task.js.map +0 -1
  93. package/dist/parallel/merge-conflict.d.ts +0 -22
  94. package/dist/parallel/merge-conflict.d.ts.map +0 -1
  95. package/dist/parallel/merge-conflict.js +0 -176
  96. package/dist/parallel/merge-conflict.js.map +0 -1
  97. package/dist/parallel/merge-errors.d.ts +0 -12
  98. package/dist/parallel/merge-errors.d.ts.map +0 -1
  99. package/dist/parallel/merge-errors.js +0 -18
  100. package/dist/parallel/merge-errors.js.map +0 -1
  101. package/dist/parallel/merge-git.d.ts +0 -25
  102. package/dist/parallel/merge-git.d.ts.map +0 -1
  103. package/dist/parallel/merge-git.js +0 -141
  104. package/dist/parallel/merge-git.js.map +0 -1
  105. package/dist/parallel/merge-lock.d.ts +0 -28
  106. package/dist/parallel/merge-lock.d.ts.map +0 -1
  107. package/dist/parallel/merge-lock.js +0 -91
  108. package/dist/parallel/merge-lock.js.map +0 -1
  109. package/dist/parallel/merge-process.d.ts +0 -21
  110. package/dist/parallel/merge-process.d.ts.map +0 -1
  111. package/dist/parallel/merge-process.js +0 -104
  112. package/dist/parallel/merge-process.js.map +0 -1
  113. package/dist/parallel/merge-progress.d.ts +0 -22
  114. package/dist/parallel/merge-progress.d.ts.map +0 -1
  115. package/dist/parallel/merge-progress.js +0 -41
  116. package/dist/parallel/merge-progress.js.map +0 -1
  117. package/dist/parallel/merge-sealing.d.ts +0 -8
  118. package/dist/parallel/merge-sealing.d.ts.map +0 -1
  119. package/dist/parallel/merge-sealing.js +0 -60
  120. package/dist/parallel/merge-sealing.js.map +0 -1
  121. package/dist/parallel/merge-validation.d.ts +0 -6
  122. package/dist/parallel/merge-validation.d.ts.map +0 -1
  123. package/dist/parallel/merge-validation.js +0 -57
  124. package/dist/parallel/merge-validation.js.map +0 -1
  125. package/dist/parallel/merge-workspace.d.ts +0 -8
  126. package/dist/parallel/merge-workspace.d.ts.map +0 -1
  127. package/dist/parallel/merge-workspace.js +0 -37
  128. package/dist/parallel/merge-workspace.js.map +0 -1
  129. package/dist/parallel/merge.d.ts +0 -48
  130. package/dist/parallel/merge.d.ts.map +0 -1
  131. package/dist/parallel/merge.js +0 -228
  132. package/dist/parallel/merge.js.map +0 -1
  133. package/dist/workspace/git-lifecycle-merge.d.ts +0 -23
  134. package/dist/workspace/git-lifecycle-merge.d.ts.map +0 -1
  135. package/dist/workspace/git-lifecycle-merge.js +0 -159
  136. package/dist/workspace/git-lifecycle-merge.js.map +0 -1
  137. package/dist/workspace/merge-pipeline.d.ts +0 -21
  138. package/dist/workspace/merge-pipeline.d.ts.map +0 -1
  139. package/dist/workspace/merge-pipeline.js +0 -74
  140. package/dist/workspace/merge-pipeline.js.map +0 -1
@@ -1,228 +0,0 @@
1
- "use strict";
2
- /**
3
- * Parallel merge orchestration
4
- * Cherry-picks completed workstream branches into main with crash-safe progress tracking.
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.cleanupWorkspaceState = exports.ParallelMergeError = void 0;
8
- exports.runParallelMerge = runParallelMerge;
9
- const node_path_1 = require("node:path");
10
- const node_fs_1 = require("node:fs");
11
- const clone_js_1 = require("./clone.js");
12
- const pool_js_1 = require("../workspace/pool.js");
13
- const connection_js_1 = require("../database/connection.js");
14
- const global_db_js_1 = require("../runners/global-db.js");
15
- const merge_git_js_1 = require("./merge-git.js");
16
- const merge_lock_js_1 = require("./merge-lock.js");
17
- const merge_progress_js_1 = require("./merge-progress.js");
18
- const merge_errors_js_1 = require("./merge-errors.js");
19
- Object.defineProperty(exports, "ParallelMergeError", { enumerable: true, get: function () { return merge_errors_js_1.ParallelMergeError; } });
20
- const merge_validation_js_1 = require("./merge-validation.js");
21
- const merge_workspace_js_1 = require("./merge-workspace.js");
22
- Object.defineProperty(exports, "cleanupWorkspaceState", { enumerable: true, get: function () { return merge_workspace_js_1.cleanupWorkspaceState; } });
23
- const merge_sealing_js_1 = require("./merge-sealing.js");
24
- const merge_process_js_1 = require("./merge-process.js");
25
- const DEFAULT_REMOTE = 'origin';
26
- const DEFAULT_MAIN_BRANCH = 'main';
27
- const DEFAULT_LOCK_TIMEOUT_MINUTES = 120;
28
- const DEFAULT_HEARTBEAT_INTERVAL_MS = 30_000;
29
- /**
30
- * Run cherry-pick merge loop across completed workstreams.
31
- */
32
- async function runParallelMerge(options) {
33
- const projectPath = (0, node_path_1.resolve)(options.projectPath);
34
- const sessionId = options.sessionId;
35
- const runnerId = options.runnerId;
36
- const workstreams = options.workstreams;
37
- const remote = options.remote ?? DEFAULT_REMOTE;
38
- const mainBranch = options.mainBranch ?? DEFAULT_MAIN_BRANCH;
39
- const lockTimeoutMinutes = options.lockTimeoutMinutes ?? DEFAULT_LOCK_TIMEOUT_MINUTES;
40
- const heartbeatIntervalMs = options.heartbeatIntervalMs ?? DEFAULT_HEARTBEAT_INTERVAL_MS;
41
- const workspaceRoot = options.remoteWorkspaceRoot ?? (0, clone_js_1.getDefaultWorkspaceRoot)();
42
- const cleanupOnSuccess = options.cleanupOnSuccess ?? true;
43
- const integrationBranchName = options.integrationBranchName ?? `steroids/integration-${sessionId.slice(0, 8)}`;
44
- const validationCommand = options.validationCommand;
45
- let mergePath = projectPath;
46
- let integrationWorkspacePath = null;
47
- const { db, close } = (0, connection_js_1.openDatabase)(projectPath);
48
- const summary = {
49
- success: false,
50
- completedCommits: 0,
51
- conflicts: 0,
52
- skipped: 0,
53
- errors: [],
54
- };
55
- let heartbeatTimer = null;
56
- let lockEpoch = 0;
57
- try {
58
- const lock = (0, merge_lock_js_1.acquireMergeLock)(db, {
59
- sessionId,
60
- runnerId,
61
- timeoutMinutes: lockTimeoutMinutes,
62
- });
63
- if (!lock.acquired) {
64
- summary.errors.push(`Could not acquire merge lock (held by ${lock.lock?.runner_id ?? 'another process'})`);
65
- return summary;
66
- }
67
- lockEpoch = lock.lock?.lock_epoch ?? 0;
68
- (0, merge_lock_js_1.assertMergeLockEpoch)(db, sessionId, runnerId, lockEpoch);
69
- (0, global_db_js_1.updateParallelSessionStatus)(sessionId, 'merging');
70
- const canonicalRemoteUrl = (0, pool_js_1.resolveRemoteUrl)(projectPath);
71
- const integrationWorkspace = (0, clone_js_1.createIntegrationWorkspace)({
72
- projectPath,
73
- sessionId,
74
- baseBranch: mainBranch,
75
- remote,
76
- workspaceRoot,
77
- integrationBranchName,
78
- canonicalRemoteUrl: canonicalRemoteUrl ?? undefined,
79
- });
80
- mergePath = integrationWorkspace.workspacePath;
81
- integrationWorkspacePath = integrationWorkspace.workspacePath;
82
- const recoveringFromCherryPick = (0, merge_git_js_1.hasCherryPickInProgress)(mergePath);
83
- heartbeatTimer = setInterval(() => {
84
- try {
85
- (0, merge_lock_js_1.refreshMergeLock)(db, sessionId, runnerId, lockTimeoutMinutes, lockEpoch);
86
- (0, merge_lock_js_1.assertMergeLockEpoch)(db, sessionId, runnerId, lockEpoch);
87
- }
88
- catch {
89
- // If heartbeat fails, merge keeps running until lock-dependent operations fail.
90
- }
91
- }, heartbeatIntervalMs);
92
- (0, merge_workspace_js_1.ensureMergeWorkingTree)(mergePath);
93
- (0, merge_lock_js_1.assertMergeLockEpoch)(db, sessionId, runnerId, lockEpoch);
94
- const availableWorkstreams = [];
95
- for (const stream of workstreams) {
96
- (0, merge_lock_js_1.assertMergeLockEpoch)(db, sessionId, runnerId, lockEpoch);
97
- try {
98
- (0, merge_git_js_1.safeRunMergeCommand)(mergePath, remote, stream.branchName);
99
- availableWorkstreams.push(stream);
100
- }
101
- catch (error) {
102
- if (error instanceof merge_errors_js_1.ParallelMergeError && error.code === 'REMOTE_BRANCH_MISSING') {
103
- // Branch may already be deleted by a previous successful merge attempt.
104
- // Treat as non-fatal to avoid failing the whole session recovery.
105
- summary.skipped += 1;
106
- continue;
107
- }
108
- throw error;
109
- }
110
- }
111
- (0, merge_sealing_js_1.sealWorkstreamsForMerge)(db, sessionId, runnerId, lockEpoch, mergePath, remote, mainBranch, availableWorkstreams);
112
- if (!recoveringFromCherryPick) {
113
- const pullOutput = (0, merge_git_js_1.runGitCommand)(mergePath, ['pull', '--ff-only', remote, mainBranch], { allowFailure: true });
114
- const pullOutputLower = pullOutput.toLowerCase();
115
- if (pullOutputLower.includes('fatal:') || pullOutputLower.includes('error:') || pullOutputLower.includes('error ')) {
116
- if (pullOutputLower.includes('could not apply') ||
117
- pullOutputLower.includes('not possible to fast-forward')) {
118
- throw new merge_errors_js_1.ParallelMergeError('main is behind; local commits detected. Run "git pull --rebase" before merge.', 'NON_FAST_FORWARD');
119
- }
120
- throw new merge_errors_js_1.ParallelMergeError(`Failed to refresh main from ${remote}/${mainBranch}: ${pullOutput}`, 'PULL_FAILED');
121
- }
122
- }
123
- const progressRows = (0, merge_progress_js_1.listMergeProgress)(db, sessionId);
124
- for (const workstream of availableWorkstreams) {
125
- const stats = await (0, merge_process_js_1.processWorkstream)(db, mergePath, sessionId, workstream, mainBranch, remote, progressRows, { sessionId, runnerId, timeoutMinutes: lockTimeoutMinutes, lockEpoch });
126
- summary.completedCommits += stats.applied;
127
- summary.skipped += stats.skipped;
128
- summary.conflicts += stats.conflicts;
129
- }
130
- (0, merge_validation_js_1.runValidationGate)(mergePath, validationCommand);
131
- (0, merge_lock_js_1.assertMergeLockEpoch)(db, sessionId, runnerId, lockEpoch);
132
- const pushResult = (0, merge_git_js_1.runGitCommand)(mergePath, ['push', remote, mainBranch], { allowFailure: true });
133
- if ((0, merge_git_js_1.isNoPushError)(pushResult)) {
134
- summary.errors.push('Push to main failed.');
135
- throw new merge_errors_js_1.ParallelMergeError(pushResult, 'PUSH_FAILED');
136
- }
137
- (0, global_db_js_1.updateParallelSessionStatus)(sessionId, 'cleanup_draining');
138
- for (const stream of workstreams) {
139
- try {
140
- (0, merge_lock_js_1.assertMergeLockEpoch)(db, sessionId, runnerId, lockEpoch);
141
- (0, merge_git_js_1.runGitCommand)(mergePath, ['push', remote, '--delete', stream.branchName]);
142
- }
143
- catch {
144
- // Ignore branch delete failures; branch may already be deleted.
145
- }
146
- }
147
- (0, merge_git_js_1.runGitCommand)(mergePath, ['remote', 'prune', remote]);
148
- if (cleanupOnSuccess) {
149
- (0, merge_workspace_js_1.cleanupWorkspaceState)(projectPath, workspaceRoot, workstreams.map((stream) => stream.id), {
150
- cleanupOnSuccess,
151
- });
152
- if (integrationWorkspacePath) {
153
- (0, node_fs_1.rmSync)(integrationWorkspacePath, { recursive: true, force: true });
154
- integrationWorkspacePath = null;
155
- }
156
- }
157
- else {
158
- (0, global_db_js_1.updateParallelSessionStatus)(sessionId, 'cleanup_pending');
159
- }
160
- summary.success = true;
161
- try {
162
- (0, global_db_js_1.resolveValidationEscalationsForSession)(sessionId);
163
- }
164
- catch {
165
- // best-effort resolution marker; merge completion should not fail because of escalation bookkeeping.
166
- }
167
- if (options.skipSessionComplete) {
168
- // Caller will decide when to mark session complete (e.g. after all workstreams finish).
169
- // Reset to 'running' so wakeup does not see a terminal-ish status and spawn a new session.
170
- (0, global_db_js_1.updateParallelSessionStatus)(sessionId, 'running');
171
- }
172
- else {
173
- (0, global_db_js_1.updateParallelSessionStatus)(sessionId, 'completed', true);
174
- }
175
- return summary;
176
- }
177
- catch (error) {
178
- const message = error instanceof Error ? error.message : String(error);
179
- if (!summary.errors.includes(message)) {
180
- summary.errors.push(message);
181
- }
182
- if (error instanceof merge_errors_js_1.ParallelMergeError && error.code === 'VALIDATION_FAILED') {
183
- const commandFromError = typeof error.details?.command === 'string' ? error.details.command : null;
184
- const stderrFromError = typeof error.details?.stderr === 'string' ? error.details.stderr : null;
185
- const stdoutFromError = typeof error.details?.stdout === 'string' ? error.details.stdout : null;
186
- try {
187
- const escalation = (0, global_db_js_1.recordValidationEscalation)({
188
- sessionId,
189
- projectPath,
190
- workspacePath: integrationWorkspacePath ?? mergePath,
191
- validationCommand: commandFromError ?? (validationCommand?.trim() || '(not configured)'),
192
- errorMessage: message,
193
- stdoutSnippet: (0, merge_validation_js_1.snippet)(stdoutFromError),
194
- stderrSnippet: (0, merge_validation_js_1.snippet)(stderrFromError || message),
195
- });
196
- summary.validationEscalationId = escalation.id;
197
- summary.validationWorkspacePath = escalation.workspace_path;
198
- summary.errors.push(`Validation blocked for session ${sessionId}. Escalation ${escalation.id} created. Workspace preserved at ${escalation.workspace_path}.`);
199
- }
200
- catch (escalationError) {
201
- const escalationMessage = escalationError instanceof Error ? escalationError.message : String(escalationError);
202
- summary.errors.push(`Validation escalation persistence failed for session ${sessionId}: ${escalationMessage}. Workspace preserved at ${integrationWorkspacePath ?? mergePath}.`);
203
- }
204
- (0, global_db_js_1.updateParallelSessionStatus)(sessionId, 'blocked_validation', false);
205
- }
206
- else if (error instanceof merge_errors_js_1.ParallelMergeError && error.code === 'CONFLICT_ATTEMPT_LIMIT') {
207
- (0, global_db_js_1.updateParallelSessionStatus)(sessionId, 'blocked_conflict', false);
208
- }
209
- else {
210
- (0, global_db_js_1.updateParallelSessionStatus)(sessionId, 'failed', true);
211
- }
212
- return summary;
213
- }
214
- finally {
215
- if (heartbeatTimer) {
216
- clearInterval(heartbeatTimer);
217
- heartbeatTimer = null;
218
- }
219
- if (cleanupOnSuccess && integrationWorkspacePath && summary.success) {
220
- (0, node_fs_1.rmSync)(integrationWorkspacePath, { recursive: true, force: true });
221
- }
222
- if (lockEpoch > 0) {
223
- (0, merge_lock_js_1.releaseMergeLock)(db, sessionId, runnerId, lockEpoch);
224
- }
225
- close();
226
- }
227
- }
228
- //# sourceMappingURL=merge.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"merge.js","sourceRoot":"","sources":["../../src/parallel/merge.ts"],"names":[],"mappings":"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"}
@@ -1,23 +0,0 @@
1
- /**
2
- * Phase 5: Post-Review Merge Pipeline.
3
- *
4
- * Extracted from git-lifecycle.ts for 500-line compliance.
5
- * Implements rebase, push, ff-only merge, push base, verify, cleanup.
6
- */
7
- import type Database from 'better-sqlite3';
8
- import type { PoolSlot } from './types.js';
9
- export type MergeResult = {
10
- ok: true;
11
- mergedSha: string;
12
- } | {
13
- ok: false;
14
- reason: string;
15
- conflict: boolean;
16
- infrastructure?: boolean;
17
- };
18
- /**
19
- * Full merge pipeline: rebase, push, ff-only merge, push base, verify, cleanup.
20
- * Acquires merge lock for serialization.
21
- */
22
- export declare function mergeToBase(globalDb: Database.Database, slot: PoolSlot, taskId: string): MergeResult;
23
- //# sourceMappingURL=git-lifecycle-merge.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"git-lifecycle-merge.d.ts","sourceRoot":"","sources":["../../src/workspace/git-lifecycle-merge.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAmB3C,MAAM,MAAM,WAAW,GACnB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAC/B;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAC;IAAC,cAAc,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAM/E;;;GAGG;AACH,wBAAgB,WAAW,CACzB,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAC3B,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,MAAM,GACb,WAAW,CAkLb"}
@@ -1,159 +0,0 @@
1
- "use strict";
2
- /**
3
- * Phase 5: Post-Review Merge Pipeline.
4
- *
5
- * Extracted from git-lifecycle.ts for 500-line compliance.
6
- * Implements rebase, push, ff-only merge, push base, verify, cleanup.
7
- */
8
- Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.mergeToBase = mergeToBase;
10
- const git_helpers_js_1 = require("./git-helpers.js");
11
- const git_lifecycle_js_1 = require("./git-lifecycle.js");
12
- const pool_js_1 = require("./pool.js");
13
- const merge_lock_js_1 = require("./merge-lock.js");
14
- // ─────────────────────────────────────────────────────────────────────────────
15
- // Merge pipeline
16
- // ─────────────────────────────────────────────────────────────────────────────
17
- /**
18
- * Full merge pipeline: rebase, push, ff-only merge, push base, verify, cleanup.
19
- * Acquires merge lock for serialization.
20
- */
21
- function mergeToBase(globalDb, slot, taskId) {
22
- const slotPath = slot.slot_path;
23
- const localOnly = slot.remote_url === null;
24
- const remote = 'origin';
25
- const baseBranch = slot.base_branch;
26
- const taskBranch = slot.task_branch;
27
- const startingSha = slot.starting_sha;
28
- const baseRef = localOnly ? baseBranch : `${remote}/${baseBranch}`;
29
- // Step 2: Verify commits exist
30
- const log = (0, git_helpers_js_1.getLogOneline)(slotPath, `${startingSha}..HEAD`);
31
- if (!log || log.trim().length === 0) {
32
- return { ok: false, reason: 'No commits to merge', conflict: false };
33
- }
34
- // Step 3: Acquire merge lock
35
- const lockAcquired = (0, merge_lock_js_1.acquireWorkspaceMergeLock)(globalDb, slot.project_id, slot.runner_id, slot.id, 300_000, // 5 min timeout
36
- 5_000 // 5s poll
37
- );
38
- if (!lockAcquired) {
39
- return {
40
- ok: false,
41
- reason: 'Could not acquire merge lock within 5 minutes',
42
- conflict: false,
43
- };
44
- }
45
- // Update status to merging
46
- (0, pool_js_1.updateSlotStatus)(globalDb, slot.id, 'merging');
47
- try {
48
- // Step 4: Fetch base (skip for local-only)
49
- if (!localOnly) {
50
- const fetchResult = (0, git_helpers_js_1.execGit)(slotPath, ['fetch', remote], {
51
- tolerateFailure: true,
52
- timeoutMs: 120_000,
53
- });
54
- if (fetchResult === null) {
55
- // Transient fetch failure — existing retry path
56
- (0, merge_lock_js_1.releaseWorkspaceMergeLock)(globalDb, slot.project_id);
57
- return { ok: false, reason: 'git fetch origin failed during merge', conflict: false };
58
- }
59
- // Verify base branch exists after successful fetch
60
- if ((0, git_lifecycle_js_1.verifyBaseRef)(slotPath, baseBranch, localOnly) === 'missing') {
61
- (0, merge_lock_js_1.releaseWorkspaceMergeLock)(globalDb, slot.project_id);
62
- return {
63
- ok: false,
64
- reason: `Remote base branch '${baseBranch}' does not exist on origin`,
65
- conflict: false,
66
- infrastructure: true,
67
- };
68
- }
69
- }
70
- // Step 5: Rebase task branch onto base
71
- const rebaseResult = (0, git_helpers_js_1.execGit)(slotPath, ['rebase', baseRef], { tolerateFailure: true });
72
- if (rebaseResult === null) {
73
- // Rebase failed (likely conflicts)
74
- (0, git_helpers_js_1.abortRebase)(slotPath);
75
- (0, git_helpers_js_1.execGit)(slotPath, ['rebase', '--abort'], { tolerateFailure: true });
76
- (0, merge_lock_js_1.releaseWorkspaceMergeLock)(globalDb, slot.project_id);
77
- return { ok: false, reason: 'Rebase conflict', conflict: true };
78
- }
79
- if (!localOnly) {
80
- // Step 6: Push task branch with force-with-lease
81
- const pushTaskResult = (0, git_helpers_js_1.pushWithRetries)(slotPath, remote, taskBranch, 3, [1000, 4000, 16000], true // --force-with-lease
82
- );
83
- if (!pushTaskResult.success) {
84
- (0, merge_lock_js_1.releaseWorkspaceMergeLock)(globalDb, slot.project_id);
85
- return {
86
- ok: false,
87
- reason: pushTaskResult.error || 'Push task branch failed',
88
- conflict: false,
89
- };
90
- }
91
- }
92
- // Step 7: Merge to base branch (ff-only)
93
- (0, git_helpers_js_1.execGit)(slotPath, ['checkout', baseBranch]);
94
- (0, git_helpers_js_1.execGit)(slotPath, ['reset', '--hard', baseRef]);
95
- const mergeResult = (0, git_helpers_js_1.execGit)(slotPath, ['merge', '--ff-only', taskBranch], { tolerateFailure: true });
96
- if (mergeResult === null) {
97
- (0, merge_lock_js_1.releaseWorkspaceMergeLock)(globalDb, slot.project_id);
98
- return {
99
- ok: false,
100
- reason: 'ff-only merge failed (invariant violation)',
101
- conflict: false,
102
- };
103
- }
104
- if (!localOnly) {
105
- // Step 8: Push base branch
106
- const pushBaseResult = (0, git_helpers_js_1.pushWithRetries)(slotPath, remote, baseBranch, 3, [2000, 8000, 32000]);
107
- if (!pushBaseResult.success) {
108
- (0, merge_lock_js_1.releaseWorkspaceMergeLock)(globalDb, slot.project_id);
109
- return {
110
- ok: false,
111
- reason: pushBaseResult.error || 'Push base branch failed',
112
- conflict: false,
113
- };
114
- }
115
- }
116
- // Step 9: Release merge lock
117
- (0, merge_lock_js_1.releaseWorkspaceMergeLock)(globalDb, slot.project_id);
118
- // Step 10: Verify reachability (remote only)
119
- if (!localOnly) {
120
- (0, git_helpers_js_1.execGit)(slotPath, ['fetch', remote, baseBranch], {
121
- tolerateFailure: true,
122
- timeoutMs: 120_000,
123
- });
124
- const mergedSha = (0, git_helpers_js_1.execGit)(slotPath, ['rev-parse', taskBranch]);
125
- if (mergedSha) {
126
- const reachable = (0, git_helpers_js_1.isAncestor)(slotPath, mergedSha, `${remote}/${baseBranch}`);
127
- if (!reachable) {
128
- console.error(`[workspace] ERROR: merged SHA ${mergedSha} not reachable from ${remote}/${baseBranch} — push may have failed silently`);
129
- // Don't delete task branch — leave it for manual inspection
130
- return { ok: false, reason: `Merged SHA ${mergedSha} not reachable from remote base (push failed silently)`, conflict: false };
131
- }
132
- }
133
- }
134
- // Step 11: Cleanup
135
- const mergedSha = (0, git_helpers_js_1.execGit)(slotPath, ['rev-parse', taskBranch]) || '';
136
- if (!localOnly) {
137
- // Delete remote task branch (ignore failure)
138
- (0, git_helpers_js_1.execGit)(slotPath, ['push', remote, '--delete', taskBranch], {
139
- tolerateFailure: true,
140
- });
141
- }
142
- // Delete local task branch
143
- (0, git_helpers_js_1.execGit)(slotPath, ['branch', '-D', taskBranch], { tolerateFailure: true });
144
- // Reset worktree to base
145
- (0, git_helpers_js_1.execGit)(slotPath, ['checkout', baseBranch]);
146
- (0, git_helpers_js_1.execGit)(slotPath, ['reset', '--hard', baseRef]);
147
- return { ok: true, mergedSha };
148
- }
149
- catch (error) {
150
- // Release lock on any unexpected error
151
- (0, merge_lock_js_1.releaseWorkspaceMergeLock)(globalDb, slot.project_id);
152
- return {
153
- ok: false,
154
- reason: `Unexpected error: ${error instanceof Error ? error.message : String(error)}`,
155
- conflict: false,
156
- };
157
- }
158
- }
159
- //# sourceMappingURL=git-lifecycle-merge.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"git-lifecycle-merge.js","sourceRoot":"","sources":["../../src/workspace/git-lifecycle-merge.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAmCH,kCAsLC;AApND,qDAM0B;AAC1B,yDAAmD;AACnD,uCAA6C;AAC7C,mDAGyB;AAUzB,gFAAgF;AAChF,iBAAiB;AACjB,gFAAgF;AAEhF;;;GAGG;AACH,SAAgB,WAAW,CACzB,QAA2B,EAC3B,IAAc,EACd,MAAc;IAEd,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;IAChC,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC;IAC3C,MAAM,MAAM,GAAG,QAAQ,CAAC;IACxB,MAAM,UAAU,GAAG,IAAI,CAAC,WAAY,CAAC;IACrC,MAAM,UAAU,GAAG,IAAI,CAAC,WAAY,CAAC;IACrC,MAAM,WAAW,GAAG,IAAI,CAAC,YAAa,CAAC;IACvC,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,UAAU,EAAE,CAAC;IAEnE,+BAA+B;IAC/B,MAAM,GAAG,GAAG,IAAA,8BAAa,EAAC,QAAQ,EAAE,GAAG,WAAW,QAAQ,CAAC,CAAC;IAC5D,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,qBAAqB,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IACvE,CAAC;IAED,6BAA6B;IAC7B,MAAM,YAAY,GAAG,IAAA,yCAAyB,EAC5C,QAAQ,EACR,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,SAAU,EACf,IAAI,CAAC,EAAE,EACP,OAAO,EAAG,gBAAgB;IAC1B,KAAK,CAAK,UAAU;KACrB,CAAC;IACF,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,+CAA+C;YACvD,QAAQ,EAAE,KAAK;SAChB,CAAC;IACJ,CAAC;IAED,2BAA2B;IAC3B,IAAA,0BAAgB,EAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;IAE/C,IAAI,CAAC;QACH,2CAA2C;QAC3C,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,WAAW,GAAG,IAAA,wBAAO,EAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE;gBACvD,eAAe,EAAE,IAAI;gBACrB,SAAS,EAAE,OAAO;aACnB,CAAC,CAAC;YACH,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;gBACzB,gDAAgD;gBAChD,IAAA,yCAAyB,EAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;gBACrD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,sCAAsC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;YACxF,CAAC;YACD,mDAAmD;YACnD,IAAI,IAAA,gCAAa,EAAC,QAAQ,EAAE,UAAU,EAAE,SAAS,CAAC,KAAK,SAAS,EAAE,CAAC;gBACjE,IAAA,yCAAyB,EAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;gBACrD,OAAO;oBACL,EAAE,EAAE,KAAK;oBACT,MAAM,EAAE,uBAAuB,UAAU,4BAA4B;oBACrE,QAAQ,EAAE,KAAK;oBACf,cAAc,EAAE,IAAI;iBACrB,CAAC;YACJ,CAAC;QACH,CAAC;QAED,uCAAuC;QACvC,MAAM,YAAY,GAAG,IAAA,wBAAO,EAC1B,QAAQ,EACR,CAAC,QAAQ,EAAE,OAAO,CAAC,EACnB,EAAE,eAAe,EAAE,IAAI,EAAE,CAC1B,CAAC;QACF,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;YAC1B,mCAAmC;YACnC,IAAA,4BAAW,EAAC,QAAQ,CAAC,CAAC;YACtB,IAAA,wBAAO,EAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;YACpE,IAAA,yCAAyB,EAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YACrD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAClE,CAAC;QAED,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,iDAAiD;YACjD,MAAM,cAAc,GAAG,IAAA,gCAAe,EACpC,QAAQ,EACR,MAAM,EACN,UAAU,EACV,CAAC,EACD,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,EACnB,IAAI,CAAC,qBAAqB;aAC3B,CAAC;YACF,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;gBAC5B,IAAA,yCAAyB,EAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;gBACrD,OAAO;oBACL,EAAE,EAAE,KAAK;oBACT,MAAM,EAAE,cAAc,CAAC,KAAK,IAAI,yBAAyB;oBACzD,QAAQ,EAAE,KAAK;iBAChB,CAAC;YACJ,CAAC;QACH,CAAC;QAED,yCAAyC;QACzC,IAAA,wBAAO,EAAC,QAAQ,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC;QAC5C,IAAA,wBAAO,EAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;QAChD,MAAM,WAAW,GAAG,IAAA,wBAAO,EACzB,QAAQ,EACR,CAAC,OAAO,EAAE,WAAW,EAAE,UAAU,CAAC,EAClC,EAAE,eAAe,EAAE,IAAI,EAAE,CAC1B,CAAC;QACF,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;YACzB,IAAA,yCAAyB,EAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YACrD,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,MAAM,EAAE,4CAA4C;gBACpD,QAAQ,EAAE,KAAK;aAChB,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,2BAA2B;YAC3B,MAAM,cAAc,GAAG,IAAA,gCAAe,EACpC,QAAQ,EACR,MAAM,EACN,UAAU,EACV,CAAC,EACD,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CACpB,CAAC;YACF,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;gBAC5B,IAAA,yCAAyB,EAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;gBACrD,OAAO;oBACL,EAAE,EAAE,KAAK;oBACT,MAAM,EAAE,cAAc,CAAC,KAAK,IAAI,yBAAyB;oBACzD,QAAQ,EAAE,KAAK;iBAChB,CAAC;YACJ,CAAC;QACH,CAAC;QAED,6BAA6B;QAC7B,IAAA,yCAAyB,EAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAErD,6CAA6C;QAC7C,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,IAAA,wBAAO,EAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE;gBAC/C,eAAe,EAAE,IAAI;gBACrB,SAAS,EAAE,OAAO;aACnB,CAAC,CAAC;YACH,MAAM,SAAS,GAAG,IAAA,wBAAO,EAAC,QAAQ,EAAE,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC;YAC/D,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,SAAS,GAAG,IAAA,2BAAU,EAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,MAAM,IAAI,UAAU,EAAE,CAAC,CAAC;gBAC7E,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,OAAO,CAAC,KAAK,CACX,iCAAiC,SAAS,uBAAuB,MAAM,IAAI,UAAU,kCAAkC,CACxH,CAAC;oBACF,4DAA4D;oBAC5D,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,SAAS,wDAAwD,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;gBACjI,CAAC;YACH,CAAC;QACH,CAAC;QAED,mBAAmB;QACnB,MAAM,SAAS,GAAG,IAAA,wBAAO,EAAC,QAAQ,EAAE,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC;QAErE,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,6CAA6C;YAC7C,IAAA,wBAAO,EAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,CAAC,EAAE;gBAC1D,eAAe,EAAE,IAAI;aACtB,CAAC,CAAC;QACL,CAAC;QAED,2BAA2B;QAC3B,IAAA,wBAAO,EAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,UAAU,CAAC,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;QAE3E,yBAAyB;QACzB,IAAA,wBAAO,EAAC,QAAQ,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC;QAC5C,IAAA,wBAAO,EAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;QAEhD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IACjC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,uCAAuC;QACvC,IAAA,yCAAyB,EAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QACrD,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,qBAAqB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;YACrF,QAAQ,EAAE,KAAK;SAChB,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -1,21 +0,0 @@
1
- /**
2
- * Merge failure handling for the workspace pool lifecycle.
3
- * Encapsulates the logic for handling merge/push/rebase failures,
4
- * incrementing counters, and deciding whether to block or retry.
5
- */
6
- import type Database from 'better-sqlite3';
7
- import type { PoolSlotContext } from './types.js';
8
- import type { MergeResult } from './git-lifecycle-merge.js';
9
- export interface MergeFailureResult {
10
- taskBlocked: boolean;
11
- blockStatus?: 'blocked_conflict' | 'blocked_error';
12
- reason: string;
13
- }
14
- /**
15
- * Handle a merge pipeline failure: increment counters, check caps,
16
- * release slot, return task to pending or block.
17
- */
18
- export declare function handleMergeFailure(projectDb: Database.Database, ctx: PoolSlotContext, taskId: string, mergeResult: MergeResult & {
19
- ok: false;
20
- }): MergeFailureResult;
21
- //# sourceMappingURL=merge-pipeline.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"merge-pipeline.d.ts","sourceRoot":"","sources":["../../src/workspace/merge-pipeline.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAa5D,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,kBAAkB,GAAG,eAAe,CAAC;IACnD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,QAAQ,CAAC,QAAQ,EAC5B,GAAG,EAAE,eAAe,EACpB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,WAAW,GAAG;IAAE,EAAE,EAAE,KAAK,CAAA;CAAE,GACvC,kBAAkB,CAuFpB"}
@@ -1,74 +0,0 @@
1
- "use strict";
2
- /**
3
- * Merge failure handling for the workspace pool lifecycle.
4
- * Encapsulates the logic for handling merge/push/rebase failures,
5
- * incrementing counters, and deciding whether to block or retry.
6
- */
7
- Object.defineProperty(exports, "__esModule", { value: true });
8
- exports.handleMergeFailure = handleMergeFailure;
9
- const git_lifecycle_js_1 = require("./git-lifecycle.js");
10
- const queries_js_1 = require("../database/queries.js");
11
- const pool_js_1 = require("./pool.js");
12
- const MAX_CONFLICT_COUNT = 3;
13
- const MAX_MERGE_FAILURE_COUNT = 3;
14
- /**
15
- * Handle a merge pipeline failure: increment counters, check caps,
16
- * release slot, return task to pending or block.
17
- */
18
- function handleMergeFailure(projectDb, ctx, taskId, mergeResult) {
19
- // Infrastructure failure (e.g. missing remote base branch) — block immediately, PRESERVE branch for diagnosis
20
- if (mergeResult.infrastructure) {
21
- (0, pool_js_1.releaseSlot)(ctx.globalDb, ctx.slot.id);
22
- (0, queries_js_1.setTaskBlocked)(projectDb, taskId, 'blocked_error', `Infrastructure failure: ${mergeResult.reason}`);
23
- return {
24
- taskBlocked: true,
25
- blockStatus: 'blocked_error',
26
- reason: `Blocked: ${mergeResult.reason}`,
27
- };
28
- }
29
- if (mergeResult.conflict) {
30
- // ---- ORDERING CONSTRAINT: delete branch BEFORE releaseSlot ----
31
- // releaseSlot clears task_branch in DB; we read from the in-memory
32
- // ctx.slot which still has the value. Once the slot is idle, another
33
- // runner could claim it, so the branch must be gone first.
34
- const slot = ctx.slot;
35
- if (slot.task_branch && slot.slot_path) {
36
- (0, git_lifecycle_js_1.deleteTaskBranchFromSlot)(slot.slot_path, slot.task_branch);
37
- }
38
- (0, pool_js_1.releaseSlot)(ctx.globalDb, ctx.slot.id);
39
- // Rebase conflict path
40
- const conflictCount = (0, queries_js_1.incrementTaskConflictCount)(projectDb, taskId);
41
- if (conflictCount >= MAX_CONFLICT_COUNT) {
42
- (0, queries_js_1.setTaskBlocked)(projectDb, taskId, 'blocked_conflict', `Rebase conflict on ${conflictCount} consecutive attempts: ${mergeResult.reason}`);
43
- return {
44
- taskBlocked: true,
45
- blockStatus: 'blocked_conflict',
46
- reason: `Blocked after ${conflictCount} rebase conflicts`,
47
- };
48
- }
49
- // Return to pending for full retry
50
- (0, queries_js_1.returnTaskToPending)(projectDb, taskId, 'orchestrator', `Rebase conflict (attempt ${conflictCount}/${MAX_CONFLICT_COUNT}): ${mergeResult.reason}`);
51
- return {
52
- taskBlocked: false,
53
- reason: `Rebase conflict (attempt ${conflictCount}/${MAX_CONFLICT_COUNT})`,
54
- };
55
- }
56
- // General merge failure — PRESERVE branch, only release slot
57
- (0, pool_js_1.releaseSlot)(ctx.globalDb, ctx.slot.id);
58
- const mergeFailureCount = (0, queries_js_1.incrementMergeFailureCount)(projectDb, taskId);
59
- if (mergeFailureCount >= MAX_MERGE_FAILURE_COUNT) {
60
- (0, queries_js_1.setTaskBlocked)(projectDb, taskId, 'blocked_error', `Merge pipeline failed ${mergeFailureCount} times: ${mergeResult.reason}`);
61
- return {
62
- taskBlocked: true,
63
- blockStatus: 'blocked_error',
64
- reason: `Blocked after ${mergeFailureCount} merge failures`,
65
- };
66
- }
67
- // Return to pending for full retry
68
- (0, queries_js_1.returnTaskToPending)(projectDb, taskId, 'orchestrator', `Merge failure (attempt ${mergeFailureCount}/${MAX_MERGE_FAILURE_COUNT}): ${mergeResult.reason}`);
69
- return {
70
- taskBlocked: false,
71
- reason: `Merge failure (attempt ${mergeFailureCount}/${MAX_MERGE_FAILURE_COUNT})`,
72
- };
73
- }
74
- //# sourceMappingURL=merge-pipeline.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"merge-pipeline.js","sourceRoot":"","sources":["../../src/workspace/merge-pipeline.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;AA2BH,gDA4FC;AAlHD,yDAA8D;AAC9D,uDAKgC;AAChC,uCAAwC;AAExC,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAC7B,MAAM,uBAAuB,GAAG,CAAC,CAAC;AAQlC;;;GAGG;AACH,SAAgB,kBAAkB,CAChC,SAA4B,EAC5B,GAAoB,EACpB,MAAc,EACd,WAAwC;IAExC,8GAA8G;IAC9G,IAAI,WAAW,CAAC,cAAc,EAAE,CAAC;QAC/B,IAAA,qBAAW,EAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACvC,IAAA,2BAAc,EACZ,SAAS,EACT,MAAM,EACN,eAAe,EACf,2BAA2B,WAAW,CAAC,MAAM,EAAE,CAChD,CAAC;QACF,OAAO;YACL,WAAW,EAAE,IAAI;YACjB,WAAW,EAAE,eAAe;YAC5B,MAAM,EAAE,YAAY,WAAW,CAAC,MAAM,EAAE;SACzC,CAAC;IACJ,CAAC;IAED,IAAI,WAAW,CAAC,QAAQ,EAAE,CAAC;QACzB,kEAAkE;QAClE,mEAAmE;QACnE,qEAAqE;QACrE,2DAA2D;QAC3D,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;QACtB,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACvC,IAAA,2CAAwB,EAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAC7D,CAAC;QACD,IAAA,qBAAW,EAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEvC,uBAAuB;QACvB,MAAM,aAAa,GAAG,IAAA,uCAA0B,EAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAEpE,IAAI,aAAa,IAAI,kBAAkB,EAAE,CAAC;YACxC,IAAA,2BAAc,EACZ,SAAS,EACT,MAAM,EACN,kBAAkB,EAClB,sBAAsB,aAAa,0BAA0B,WAAW,CAAC,MAAM,EAAE,CAClF,CAAC;YACF,OAAO;gBACL,WAAW,EAAE,IAAI;gBACjB,WAAW,EAAE,kBAAkB;gBAC/B,MAAM,EAAE,iBAAiB,aAAa,mBAAmB;aAC1D,CAAC;QACJ,CAAC;QAED,mCAAmC;QACnC,IAAA,gCAAmB,EACjB,SAAS,EACT,MAAM,EACN,cAAc,EACd,4BAA4B,aAAa,IAAI,kBAAkB,MAAM,WAAW,CAAC,MAAM,EAAE,CAC1F,CAAC;QACF,OAAO;YACL,WAAW,EAAE,KAAK;YAClB,MAAM,EAAE,4BAA4B,aAAa,IAAI,kBAAkB,GAAG;SAC3E,CAAC;IACJ,CAAC;IAED,6DAA6D;IAC7D,IAAA,qBAAW,EAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACvC,MAAM,iBAAiB,GAAG,IAAA,uCAA0B,EAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAExE,IAAI,iBAAiB,IAAI,uBAAuB,EAAE,CAAC;QACjD,IAAA,2BAAc,EACZ,SAAS,EACT,MAAM,EACN,eAAe,EACf,yBAAyB,iBAAiB,WAAW,WAAW,CAAC,MAAM,EAAE,CAC1E,CAAC;QACF,OAAO;YACL,WAAW,EAAE,IAAI;YACjB,WAAW,EAAE,eAAe;YAC5B,MAAM,EAAE,iBAAiB,iBAAiB,iBAAiB;SAC5D,CAAC;IACJ,CAAC;IAED,mCAAmC;IACnC,IAAA,gCAAmB,EACjB,SAAS,EACT,MAAM,EACN,cAAc,EACd,0BAA0B,iBAAiB,IAAI,uBAAuB,MAAM,WAAW,CAAC,MAAM,EAAE,CACjG,CAAC;IACF,OAAO;QACL,WAAW,EAAE,KAAK;QAClB,MAAM,EAAE,0BAA0B,iBAAiB,IAAI,uBAAuB,GAAG;KAClF,CAAC;AACJ,CAAC"}