steroids-cli 0.15.3 → 0.15.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/ai-proxy.d.ts +6 -0
- package/dist/commands/ai-proxy.d.ts.map +1 -0
- package/dist/commands/ai-proxy.js +79 -0
- package/dist/commands/ai-proxy.js.map +1 -0
- package/dist/commands/ai-run.d.ts.map +1 -1
- package/dist/commands/ai-run.js +10 -7
- package/dist/commands/ai-run.js.map +1 -1
- package/dist/commands/ai.d.ts.map +1 -1
- package/dist/commands/ai.js +5 -0
- package/dist/commands/ai.js.map +1 -1
- package/dist/commands/completion.js +2 -1
- package/dist/commands/completion.js.map +1 -1
- package/dist/commands/features.d.ts +5 -0
- package/dist/commands/features.d.ts.map +1 -0
- package/dist/commands/features.js +255 -0
- package/dist/commands/features.js.map +1 -0
- package/dist/commands/llm-content.d.ts +1 -1
- package/dist/commands/llm-content.d.ts.map +1 -1
- package/dist/commands/llm-content.js +36 -6
- package/dist/commands/llm-content.js.map +1 -1
- package/dist/commands/llm.d.ts.map +1 -1
- package/dist/commands/llm.js +1 -0
- package/dist/commands/llm.js.map +1 -1
- package/dist/commands/web.d.ts.map +1 -1
- package/dist/commands/web.js +22 -3
- package/dist/commands/web.js.map +1 -1
- package/dist/database/queries.d.ts.map +1 -1
- package/dist/database/queries.js +13 -6
- package/dist/database/queries.js.map +1 -1
- package/dist/index.js +64 -1
- package/dist/index.js.map +1 -1
- package/dist/providers/api-models.d.ts +5 -1
- package/dist/providers/api-models.d.ts.map +1 -1
- package/dist/providers/api-models.js +10 -107
- package/dist/providers/api-models.js.map +1 -1
- package/dist/providers/claude.d.ts.map +1 -1
- package/dist/providers/claude.js +16 -1
- package/dist/providers/claude.js.map +1 -1
- package/dist/providers/codex.d.ts.map +1 -1
- package/dist/providers/codex.js +16 -1
- package/dist/providers/codex.js.map +1 -1
- package/dist/providers/interface.d.ts.map +1 -1
- package/dist/providers/interface.js +11 -1
- package/dist/providers/interface.js.map +1 -1
- package/dist/providers/mistral-models.d.ts +18 -0
- package/dist/providers/mistral-models.d.ts.map +1 -0
- package/dist/providers/mistral-models.js +145 -0
- package/dist/providers/mistral-models.js.map +1 -0
- package/dist/providers/mistral.d.ts +6 -0
- package/dist/providers/mistral.d.ts.map +1 -1
- package/dist/providers/mistral.js +31 -54
- package/dist/providers/mistral.js.map +1 -1
- package/dist/providers/opencode.d.ts.map +1 -1
- package/dist/providers/opencode.js +5 -1
- package/dist/providers/opencode.js.map +1 -1
- package/dist/proxy/daemon-entry.d.ts +9 -0
- package/dist/proxy/daemon-entry.d.ts.map +1 -0
- package/dist/proxy/daemon-entry.js +29 -0
- package/dist/proxy/daemon-entry.js.map +1 -0
- package/dist/proxy/hf-proxy.d.ts +16 -0
- package/dist/proxy/hf-proxy.d.ts.map +1 -0
- package/dist/proxy/hf-proxy.js +200 -0
- package/dist/proxy/hf-proxy.js.map +1 -0
- package/dist/proxy/hf-token.d.ts +18 -0
- package/dist/proxy/hf-token.d.ts.map +1 -0
- package/dist/proxy/hf-token.js +57 -0
- package/dist/proxy/hf-token.js.map +1 -0
- package/dist/proxy/lifecycle.d.ts +26 -0
- package/dist/proxy/lifecycle.d.ts.map +1 -0
- package/dist/proxy/lifecycle.js +129 -0
- package/dist/proxy/lifecycle.js.map +1 -0
- package/package.json +1 -1
- package/dist/commands/merge.d.ts +0 -3
- package/dist/commands/merge.d.ts.map +0 -1
- package/dist/commands/merge.js +0 -246
- package/dist/commands/merge.js.map +0 -1
- package/dist/parallel/merge-commit-checks.d.ts +0 -6
- package/dist/parallel/merge-commit-checks.d.ts.map +0 -1
- package/dist/parallel/merge-commit-checks.js +0 -28
- package/dist/parallel/merge-commit-checks.js.map +0 -1
- package/dist/parallel/merge-conflict-attempts.d.ts +0 -8
- package/dist/parallel/merge-conflict-attempts.d.ts.map +0 -1
- package/dist/parallel/merge-conflict-attempts.js +0 -60
- package/dist/parallel/merge-conflict-attempts.js.map +0 -1
- package/dist/parallel/merge-conflict-invoke.d.ts +0 -2
- package/dist/parallel/merge-conflict-invoke.d.ts.map +0 -1
- package/dist/parallel/merge-conflict-invoke.js +0 -41
- package/dist/parallel/merge-conflict-invoke.js.map +0 -1
- package/dist/parallel/merge-conflict-prompts.d.ts +0 -23
- package/dist/parallel/merge-conflict-prompts.d.ts.map +0 -1
- package/dist/parallel/merge-conflict-prompts.js +0 -40
- package/dist/parallel/merge-conflict-prompts.js.map +0 -1
- package/dist/parallel/merge-conflict-task.d.ts +0 -3
- package/dist/parallel/merge-conflict-task.d.ts.map +0 -1
- package/dist/parallel/merge-conflict-task.js +0 -59
- package/dist/parallel/merge-conflict-task.js.map +0 -1
- package/dist/parallel/merge-conflict.d.ts +0 -22
- package/dist/parallel/merge-conflict.d.ts.map +0 -1
- package/dist/parallel/merge-conflict.js +0 -176
- package/dist/parallel/merge-conflict.js.map +0 -1
- package/dist/parallel/merge-errors.d.ts +0 -12
- package/dist/parallel/merge-errors.d.ts.map +0 -1
- package/dist/parallel/merge-errors.js +0 -18
- package/dist/parallel/merge-errors.js.map +0 -1
- package/dist/parallel/merge-git.d.ts +0 -25
- package/dist/parallel/merge-git.d.ts.map +0 -1
- package/dist/parallel/merge-git.js +0 -141
- package/dist/parallel/merge-git.js.map +0 -1
- package/dist/parallel/merge-lock.d.ts +0 -28
- package/dist/parallel/merge-lock.d.ts.map +0 -1
- package/dist/parallel/merge-lock.js +0 -91
- package/dist/parallel/merge-lock.js.map +0 -1
- package/dist/parallel/merge-process.d.ts +0 -21
- package/dist/parallel/merge-process.d.ts.map +0 -1
- package/dist/parallel/merge-process.js +0 -104
- package/dist/parallel/merge-process.js.map +0 -1
- package/dist/parallel/merge-progress.d.ts +0 -22
- package/dist/parallel/merge-progress.d.ts.map +0 -1
- package/dist/parallel/merge-progress.js +0 -41
- package/dist/parallel/merge-progress.js.map +0 -1
- package/dist/parallel/merge-sealing.d.ts +0 -8
- package/dist/parallel/merge-sealing.d.ts.map +0 -1
- package/dist/parallel/merge-sealing.js +0 -60
- package/dist/parallel/merge-sealing.js.map +0 -1
- package/dist/parallel/merge-validation.d.ts +0 -6
- package/dist/parallel/merge-validation.d.ts.map +0 -1
- package/dist/parallel/merge-validation.js +0 -57
- package/dist/parallel/merge-validation.js.map +0 -1
- package/dist/parallel/merge-workspace.d.ts +0 -8
- package/dist/parallel/merge-workspace.d.ts.map +0 -1
- package/dist/parallel/merge-workspace.js +0 -37
- package/dist/parallel/merge-workspace.js.map +0 -1
- package/dist/parallel/merge.d.ts +0 -48
- package/dist/parallel/merge.d.ts.map +0 -1
- package/dist/parallel/merge.js +0 -228
- package/dist/parallel/merge.js.map +0 -1
- package/dist/workspace/git-lifecycle-merge.d.ts +0 -23
- package/dist/workspace/git-lifecycle-merge.d.ts.map +0 -1
- package/dist/workspace/git-lifecycle-merge.js +0 -159
- package/dist/workspace/git-lifecycle-merge.js.map +0 -1
- package/dist/workspace/merge-pipeline.d.ts +0 -21
- package/dist/workspace/merge-pipeline.d.ts.map +0 -1
- package/dist/workspace/merge-pipeline.js +0 -74
- package/dist/workspace/merge-pipeline.js.map +0 -1
package/dist/parallel/merge.js
DELETED
|
@@ -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":"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"}
|
|
@@ -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":"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"}
|