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.
- 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 +2 -2
- 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/index.js +7 -3
- 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
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Merge lock management for concurrent merge workers.
|
|
4
|
-
*/
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.isLockExpired = isLockExpired;
|
|
7
|
-
exports.getLatestMergeLock = getLatestMergeLock;
|
|
8
|
-
exports.acquireMergeLock = acquireMergeLock;
|
|
9
|
-
exports.refreshMergeLock = refreshMergeLock;
|
|
10
|
-
exports.assertMergeLockEpoch = assertMergeLockEpoch;
|
|
11
|
-
exports.releaseMergeLock = releaseMergeLock;
|
|
12
|
-
const merge_errors_js_1 = require("./merge-errors.js");
|
|
13
|
-
function getNowISOString() {
|
|
14
|
-
return new Date().toISOString();
|
|
15
|
-
}
|
|
16
|
-
function utcExpiresAt(timeoutMinutes) {
|
|
17
|
-
return new Date(Date.now() + timeoutMinutes * 60_000).toISOString();
|
|
18
|
-
}
|
|
19
|
-
function isLockExpired(lock) {
|
|
20
|
-
return new Date(lock.expires_at).getTime() < Date.now();
|
|
21
|
-
}
|
|
22
|
-
function getNextLockEpoch(db, sessionId) {
|
|
23
|
-
const row = db
|
|
24
|
-
.prepare('SELECT COALESCE(MAX(lock_epoch), 0) AS max_epoch FROM merge_locks WHERE session_id = ?')
|
|
25
|
-
.get(sessionId);
|
|
26
|
-
return (row?.max_epoch ?? 0) + 1;
|
|
27
|
-
}
|
|
28
|
-
function getLatestMergeLock(db, sessionId) {
|
|
29
|
-
return db
|
|
30
|
-
.prepare(`SELECT * FROM merge_locks
|
|
31
|
-
WHERE session_id = ?
|
|
32
|
-
ORDER BY acquired_at DESC
|
|
33
|
-
LIMIT 1`)
|
|
34
|
-
.get(sessionId);
|
|
35
|
-
}
|
|
36
|
-
function acquireMergeLock(db, options) {
|
|
37
|
-
const acquireTx = db.transaction(() => {
|
|
38
|
-
const lock = getLatestMergeLock(db, options.sessionId);
|
|
39
|
-
if (lock && !isLockExpired(lock)) {
|
|
40
|
-
if (lock.runner_id === options.runnerId) {
|
|
41
|
-
const refreshed = refreshMergeLock(db, lock.session_id, options.runnerId, options.timeoutMinutes, lock.lock_epoch);
|
|
42
|
-
return { acquired: true, lock: refreshed };
|
|
43
|
-
}
|
|
44
|
-
return { acquired: false, lock };
|
|
45
|
-
}
|
|
46
|
-
const lockEpoch = getNextLockEpoch(db, options.sessionId);
|
|
47
|
-
db.prepare('DELETE FROM merge_locks WHERE session_id = ?').run(options.sessionId);
|
|
48
|
-
const inserted = db.prepare('INSERT INTO merge_locks (session_id, runner_id, lock_epoch, acquired_at, expires_at, heartbeat_at) VALUES (?, ?, ?, ?, ?, ?)').run(options.sessionId, options.runnerId, lockEpoch, getNowISOString(), utcExpiresAt(options.timeoutMinutes), getNowISOString());
|
|
49
|
-
if (inserted.changes !== 1) {
|
|
50
|
-
return { acquired: false };
|
|
51
|
-
}
|
|
52
|
-
return { acquired: true, lock: getLatestMergeLock(db, options.sessionId) ?? undefined };
|
|
53
|
-
});
|
|
54
|
-
return acquireTx();
|
|
55
|
-
}
|
|
56
|
-
function refreshMergeLock(db, sessionId, runnerId, timeoutMinutes, lockEpoch) {
|
|
57
|
-
const result = db.prepare(`UPDATE merge_locks
|
|
58
|
-
SET heartbeat_at = ?, expires_at = ?
|
|
59
|
-
WHERE session_id = ? AND runner_id = ? AND lock_epoch = ?`).run(getNowISOString(), utcExpiresAt(timeoutMinutes), sessionId, runnerId, lockEpoch);
|
|
60
|
-
if (result.changes !== 1) {
|
|
61
|
-
throw new merge_errors_js_1.ParallelMergeError('Lost merge lock fence while refreshing heartbeat', 'MERGE_LOCK_FENCE_LOST');
|
|
62
|
-
}
|
|
63
|
-
const lock = getLatestMergeLock(db, sessionId);
|
|
64
|
-
if (!lock) {
|
|
65
|
-
throw new merge_errors_js_1.ParallelMergeError('Lost merge lock unexpectedly', 'MERGE_LOCK_NOT_FOUND');
|
|
66
|
-
}
|
|
67
|
-
if (lock.lock_epoch !== lockEpoch || lock.runner_id !== runnerId) {
|
|
68
|
-
throw new merge_errors_js_1.ParallelMergeError('Merge lock epoch mismatch detected', 'MERGE_LOCK_EPOCH_MISMATCH');
|
|
69
|
-
}
|
|
70
|
-
return lock;
|
|
71
|
-
}
|
|
72
|
-
function assertMergeLockEpoch(db, sessionId, runnerId, lockEpoch) {
|
|
73
|
-
const row = db
|
|
74
|
-
.prepare(`SELECT session_id, runner_id, lock_epoch, expires_at
|
|
75
|
-
FROM merge_locks
|
|
76
|
-
WHERE session_id = ? AND runner_id = ? AND lock_epoch = ?
|
|
77
|
-
LIMIT 1`)
|
|
78
|
-
.get(sessionId, runnerId, lockEpoch);
|
|
79
|
-
if (!row) {
|
|
80
|
-
throw new merge_errors_js_1.ParallelMergeError('Merge lock fence no longer owned by current runner', 'MERGE_LOCK_FENCE_LOST');
|
|
81
|
-
}
|
|
82
|
-
if (new Date(row.expires_at).getTime() < Date.now()) {
|
|
83
|
-
throw new merge_errors_js_1.ParallelMergeError('Merge lock expired', 'MERGE_LOCK_EXPIRED');
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
function releaseMergeLock(db, sessionId, runnerId, lockEpoch) {
|
|
87
|
-
db
|
|
88
|
-
.prepare('DELETE FROM merge_locks WHERE session_id = ? AND runner_id = ? AND lock_epoch = ?')
|
|
89
|
-
.run(sessionId, runnerId, lockEpoch);
|
|
90
|
-
}
|
|
91
|
-
//# sourceMappingURL=merge-lock.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"merge-lock.js","sourceRoot":"","sources":["../../src/parallel/merge-lock.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Per-workstream commit processing
|
|
3
|
-
*/
|
|
4
|
-
import { MergeProgressRow } from './merge-progress.js';
|
|
5
|
-
import { openDatabase } from '../database/connection.js';
|
|
6
|
-
interface MergeWorkstreamSpec {
|
|
7
|
-
id: string;
|
|
8
|
-
branchName: string;
|
|
9
|
-
}
|
|
10
|
-
export declare function processWorkstream(db: ReturnType<typeof openDatabase>['db'], projectPath: string, sessionId: string, workstream: MergeWorkstreamSpec, mainBranch: string, remote: string, progressRows: MergeProgressRow[], heartbeat: {
|
|
11
|
-
sessionId: string;
|
|
12
|
-
runnerId: string;
|
|
13
|
-
timeoutMinutes: number;
|
|
14
|
-
lockEpoch: number;
|
|
15
|
-
}): Promise<{
|
|
16
|
-
applied: number;
|
|
17
|
-
skipped: number;
|
|
18
|
-
conflicts: number;
|
|
19
|
-
}>;
|
|
20
|
-
export {};
|
|
21
|
-
//# sourceMappingURL=merge-process.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"merge-process.d.ts","sourceRoot":"","sources":["../../src/parallel/merge-process.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,OAAO,EAIL,gBAAgB,EACjB,MAAM,qBAAqB,CAAC;AAI7B,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,UAAU,mBAAmB;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,iBAAiB,CACrC,EAAE,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC,IAAI,CAAC,EACzC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,mBAAmB,EAC/B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,gBAAgB,EAAE,EAChC,SAAS,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAC5F,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAsHlE"}
|
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Per-workstream commit processing
|
|
4
|
-
*/
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.processWorkstream = processWorkstream;
|
|
7
|
-
const merge_git_js_1 = require("./merge-git.js");
|
|
8
|
-
const merge_progress_js_1 = require("./merge-progress.js");
|
|
9
|
-
const merge_conflict_js_1 = require("./merge-conflict.js");
|
|
10
|
-
const merge_commit_checks_js_1 = require("./merge-commit-checks.js");
|
|
11
|
-
const merge_lock_js_1 = require("./merge-lock.js");
|
|
12
|
-
async function processWorkstream(db, projectPath, sessionId, workstream, mainBranch, remote, progressRows, heartbeat) {
|
|
13
|
-
const summary = { applied: 0, skipped: 0, conflicts: 0 };
|
|
14
|
-
const commits = (0, merge_git_js_1.getWorkstreamCommitList)(projectPath, remote, workstream.branchName, mainBranch);
|
|
15
|
-
if (commits.length === 0) {
|
|
16
|
-
return summary;
|
|
17
|
-
}
|
|
18
|
-
const workstreamProgress = (0, merge_progress_js_1.getMergeProgressForWorkstream)(progressRows, workstream.id);
|
|
19
|
-
const workstreamLookup = new Map();
|
|
20
|
-
for (const row of workstreamProgress) {
|
|
21
|
-
workstreamLookup.set(row.position, row);
|
|
22
|
-
}
|
|
23
|
-
for (let position = 0; position < commits.length; position += 1) {
|
|
24
|
-
const commitSha = commits[position];
|
|
25
|
-
const shortSha = (0, merge_git_js_1.getCommitShortSha)(commitSha);
|
|
26
|
-
const prior = workstreamLookup.get(position);
|
|
27
|
-
if (prior?.status === 'applied' && prior.commit_sha === commitSha) {
|
|
28
|
-
if ((0, merge_commit_checks_js_1.isAppliedCommitIntegrated)(projectPath, prior.applied_commit_sha)) {
|
|
29
|
-
summary.applied += 1;
|
|
30
|
-
continue;
|
|
31
|
-
}
|
|
32
|
-
(0, merge_progress_js_1.clearProgressEntry)(db, sessionId, workstream.id, position);
|
|
33
|
-
}
|
|
34
|
-
if (prior?.status === 'skipped' && prior.commit_sha === commitSha) {
|
|
35
|
-
summary.skipped += 1;
|
|
36
|
-
continue;
|
|
37
|
-
}
|
|
38
|
-
if (prior?.status === 'conflict' && prior.commit_sha === commitSha) {
|
|
39
|
-
if ((0, merge_git_js_1.hasCherryPickInProgress)(projectPath)) {
|
|
40
|
-
const outcome = await (0, merge_conflict_js_1.runConflictResolutionCycle)({
|
|
41
|
-
db,
|
|
42
|
-
projectPath,
|
|
43
|
-
sessionId,
|
|
44
|
-
workstreamId: workstream.id,
|
|
45
|
-
runnerId: heartbeat.runnerId,
|
|
46
|
-
mergeLockHeartbeat: {
|
|
47
|
-
lockEpoch: heartbeat.lockEpoch,
|
|
48
|
-
timeoutMinutes: heartbeat.timeoutMinutes,
|
|
49
|
-
},
|
|
50
|
-
branchName: workstream.branchName,
|
|
51
|
-
position,
|
|
52
|
-
commitSha,
|
|
53
|
-
existingTaskId: prior.conflict_task_id ?? undefined,
|
|
54
|
-
});
|
|
55
|
-
if (outcome === 'skipped')
|
|
56
|
-
summary.skipped += 1;
|
|
57
|
-
else
|
|
58
|
-
summary.applied += 1;
|
|
59
|
-
summary.conflicts += 1;
|
|
60
|
-
continue;
|
|
61
|
-
}
|
|
62
|
-
(0, merge_progress_js_1.clearProgressEntry)(db, sessionId, workstream.id, position);
|
|
63
|
-
}
|
|
64
|
-
if (prior && prior.commit_sha !== commitSha) {
|
|
65
|
-
(0, merge_progress_js_1.clearProgressEntry)(db, sessionId, workstream.id, position);
|
|
66
|
-
}
|
|
67
|
-
try {
|
|
68
|
-
(0, merge_git_js_1.runGitCommand)(projectPath, ['cherry-pick', commitSha]);
|
|
69
|
-
const appliedCommitSha = (0, merge_git_js_1.runGitCommand)(projectPath, ['rev-parse', 'HEAD']).trim();
|
|
70
|
-
(0, merge_progress_js_1.upsertProgressEntry)(db, sessionId, workstream.id, position, commitSha, 'applied', null, appliedCommitSha);
|
|
71
|
-
summary.applied += 1;
|
|
72
|
-
}
|
|
73
|
-
catch (error) {
|
|
74
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
75
|
-
if (!/CONFLICT|merge conflict|could not apply|needs merge/i.test(message)) {
|
|
76
|
-
throw error;
|
|
77
|
-
}
|
|
78
|
-
const outcome = await (0, merge_conflict_js_1.runConflictResolutionCycle)({
|
|
79
|
-
db,
|
|
80
|
-
projectPath,
|
|
81
|
-
sessionId,
|
|
82
|
-
workstreamId: workstream.id,
|
|
83
|
-
runnerId: heartbeat.runnerId,
|
|
84
|
-
mergeLockHeartbeat: {
|
|
85
|
-
lockEpoch: heartbeat.lockEpoch,
|
|
86
|
-
timeoutMinutes: heartbeat.timeoutMinutes,
|
|
87
|
-
},
|
|
88
|
-
branchName: workstream.branchName,
|
|
89
|
-
position,
|
|
90
|
-
commitSha,
|
|
91
|
-
});
|
|
92
|
-
if (outcome === 'skipped') {
|
|
93
|
-
summary.skipped += 1;
|
|
94
|
-
}
|
|
95
|
-
else {
|
|
96
|
-
summary.applied += 1;
|
|
97
|
-
}
|
|
98
|
-
summary.conflicts += 1;
|
|
99
|
-
}
|
|
100
|
-
(0, merge_lock_js_1.refreshMergeLock)(db, heartbeat.sessionId, heartbeat.runnerId, heartbeat.timeoutMinutes, heartbeat.lockEpoch);
|
|
101
|
-
}
|
|
102
|
-
return summary;
|
|
103
|
-
}
|
|
104
|
-
//# sourceMappingURL=merge-process.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"merge-process.js","sourceRoot":"","sources":["../../src/parallel/merge-process.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Merge progress persistence for crash recovery.
|
|
3
|
-
*/
|
|
4
|
-
import type Database from 'better-sqlite3';
|
|
5
|
-
export interface MergeProgressRow {
|
|
6
|
-
id: number;
|
|
7
|
-
session_id: string;
|
|
8
|
-
workstream_id: string;
|
|
9
|
-
position: number;
|
|
10
|
-
commit_sha: string;
|
|
11
|
-
applied_commit_sha: string | null;
|
|
12
|
-
status: 'applied' | 'conflict' | 'skipped';
|
|
13
|
-
conflict_task_id: string | null;
|
|
14
|
-
created_at: string;
|
|
15
|
-
applied_at: string | null;
|
|
16
|
-
}
|
|
17
|
-
export declare function listMergeProgress(db: Database.Database, sessionId: string): MergeProgressRow[];
|
|
18
|
-
export declare function clearProgressEntry(db: Database.Database, sessionId: string, workstreamId: string, position: number): void;
|
|
19
|
-
export declare function upsertProgressEntry(db: Database.Database, sessionId: string, workstreamId: string, position: number, commitSha: string, status: MergeProgressRow['status'], conflictTaskId?: string | null, appliedCommitSha?: string | null): void;
|
|
20
|
-
export declare function getMergeProgressForWorkstream(rows: MergeProgressRow[], workstreamId: string): MergeProgressRow[];
|
|
21
|
-
export declare function findMergeProgressBySourceCommit(rows: MergeProgressRow[], workstreamId: string, sourceCommitSha: string): MergeProgressRow | undefined;
|
|
22
|
-
//# sourceMappingURL=merge-progress.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"merge-progress.d.ts","sourceRoot":"","sources":["../../src/parallel/merge-progress.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;IAC3C,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAMD,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,GAAG,gBAAgB,EAAE,CAS9F;AAED,wBAAgB,kBAAkB,CAChC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,GACf,IAAI,CAIN;AAED,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,gBAAgB,CAAC,QAAQ,CAAC,EAClC,cAAc,GAAE,MAAM,GAAG,IAAW,EACpC,gBAAgB,GAAE,MAAM,GAAG,IAAW,GACrC,IAAI,CAmBN;AAED,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,gBAAgB,EAAE,EACxB,YAAY,EAAE,MAAM,GACnB,gBAAgB,EAAE,CAIpB;AAED,wBAAgB,+BAA+B,CAC7C,IAAI,EAAE,gBAAgB,EAAE,EACxB,YAAY,EAAE,MAAM,EACpB,eAAe,EAAE,MAAM,GACtB,gBAAgB,GAAG,SAAS,CAI9B"}
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Merge progress persistence for crash recovery.
|
|
4
|
-
*/
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.listMergeProgress = listMergeProgress;
|
|
7
|
-
exports.clearProgressEntry = clearProgressEntry;
|
|
8
|
-
exports.upsertProgressEntry = upsertProgressEntry;
|
|
9
|
-
exports.getMergeProgressForWorkstream = getMergeProgressForWorkstream;
|
|
10
|
-
exports.findMergeProgressBySourceCommit = findMergeProgressBySourceCommit;
|
|
11
|
-
function getNowISOString() {
|
|
12
|
-
return new Date().toISOString();
|
|
13
|
-
}
|
|
14
|
-
function listMergeProgress(db, sessionId) {
|
|
15
|
-
return db
|
|
16
|
-
.prepare(`SELECT id, session_id, workstream_id, position, commit_sha, applied_commit_sha, status, conflict_task_id, created_at, applied_at
|
|
17
|
-
FROM merge_progress
|
|
18
|
-
WHERE session_id = ?
|
|
19
|
-
ORDER BY workstream_id, position ASC`)
|
|
20
|
-
.all(sessionId);
|
|
21
|
-
}
|
|
22
|
-
function clearProgressEntry(db, sessionId, workstreamId, position) {
|
|
23
|
-
db.prepare('DELETE FROM merge_progress WHERE session_id = ? AND workstream_id = ? AND position = ?').run(sessionId, workstreamId, position);
|
|
24
|
-
}
|
|
25
|
-
function upsertProgressEntry(db, sessionId, workstreamId, position, commitSha, status, conflictTaskId = null, appliedCommitSha = null) {
|
|
26
|
-
const payloadApplied = status === 'applied' ? getNowISOString() : null;
|
|
27
|
-
const payloadAppliedCommit = status === 'applied' ? appliedCommitSha : null;
|
|
28
|
-
clearProgressEntry(db, sessionId, workstreamId, position);
|
|
29
|
-
db.prepare(`INSERT INTO merge_progress
|
|
30
|
-
(session_id, workstream_id, position, commit_sha, applied_commit_sha, status, conflict_task_id, applied_at)
|
|
31
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?)`).run(sessionId, workstreamId, position, commitSha, payloadAppliedCommit, status, conflictTaskId, payloadApplied);
|
|
32
|
-
}
|
|
33
|
-
function getMergeProgressForWorkstream(rows, workstreamId) {
|
|
34
|
-
return rows
|
|
35
|
-
.filter((row) => row.workstream_id === workstreamId)
|
|
36
|
-
.sort((left, right) => left.position - right.position);
|
|
37
|
-
}
|
|
38
|
-
function findMergeProgressBySourceCommit(rows, workstreamId, sourceCommitSha) {
|
|
39
|
-
return rows.find((row) => row.workstream_id === workstreamId && row.commit_sha === sourceCommitSha);
|
|
40
|
-
}
|
|
41
|
-
//# sourceMappingURL=merge-progress.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"merge-progress.js","sourceRoot":"","sources":["../../src/parallel/merge-progress.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAqBH,8CASC;AAED,gDASC;AAED,kDA4BC;AAED,sEAOC;AAED,0EAQC;AAzED,SAAS,eAAe;IACtB,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AAClC,CAAC;AAED,SAAgB,iBAAiB,CAAC,EAAqB,EAAE,SAAiB;IACxE,OAAO,EAAE;SACN,OAAO,CACN;;;4CAGsC,CACvC;SACA,GAAG,CAAC,SAAS,CAAuB,CAAC;AAC1C,CAAC;AAED,SAAgB,kBAAkB,CAChC,EAAqB,EACrB,SAAiB,EACjB,YAAoB,EACpB,QAAgB;IAEhB,EAAE,CAAC,OAAO,CACR,wFAAwF,CACzF,CAAC,GAAG,CAAC,SAAS,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;AAC3C,CAAC;AAED,SAAgB,mBAAmB,CACjC,EAAqB,EACrB,SAAiB,EACjB,YAAoB,EACpB,QAAgB,EAChB,SAAiB,EACjB,MAAkC,EAClC,iBAAgC,IAAI,EACpC,mBAAkC,IAAI;IAEtC,MAAM,cAAc,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACvE,MAAM,oBAAoB,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC;IAE5E,kBAAkB,CAAC,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;IAC1D,EAAE,CAAC,OAAO,CACR;;qCAEiC,CAClC,CAAC,GAAG,CACH,SAAS,EACT,YAAY,EACZ,QAAQ,EACR,SAAS,EACT,oBAAoB,EACpB,MAAM,EACN,cAAc,EACd,cAAc,CACf,CAAC;AACJ,CAAC;AAED,SAAgB,6BAA6B,CAC3C,IAAwB,EACxB,YAAoB;IAEpB,OAAO,IAAI;SACR,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,aAAa,KAAK,YAAY,CAAC;SACnD,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;AAC3D,CAAC;AAED,SAAgB,+BAA+B,CAC7C,IAAwB,EACxB,YAAoB,EACpB,eAAuB;IAEvB,OAAO,IAAI,CAAC,IAAI,CACd,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,aAAa,KAAK,YAAY,IAAI,GAAG,CAAC,UAAU,KAAK,eAAe,CAClF,CAAC;AACJ,CAAC"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { openDatabase } from '../database/connection.js';
|
|
2
|
-
interface MergeWorkstreamSpec {
|
|
3
|
-
id: string;
|
|
4
|
-
branchName: string;
|
|
5
|
-
}
|
|
6
|
-
export declare function sealWorkstreamsForMerge(mergeDb: ReturnType<typeof openDatabase>['db'], sessionId: string, runnerId: string, lockEpoch: number, mergePath: string, remote: string, mainBranch: string, workstreams: MergeWorkstreamSpec[]): void;
|
|
7
|
-
export {};
|
|
8
|
-
//# sourceMappingURL=merge-sealing.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"merge-sealing.d.ts","sourceRoot":"","sources":["../../src/parallel/merge-sealing.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAIzD,UAAU,mBAAmB;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;CACpB;AASD,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC,IAAI,CAAC,EAC9C,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,mBAAmB,EAAE,GACjC,IAAI,CAwEN"}
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.sealWorkstreamsForMerge = sealWorkstreamsForMerge;
|
|
4
|
-
const global_db_js_1 = require("../runners/global-db.js");
|
|
5
|
-
/**
|
|
6
|
-
* Workstream sealing before cherry-pick merge
|
|
7
|
-
*/
|
|
8
|
-
const merge_git_js_1 = require("./merge-git.js");
|
|
9
|
-
const merge_lock_js_1 = require("./merge-lock.js");
|
|
10
|
-
const merge_errors_js_1 = require("./merge-errors.js");
|
|
11
|
-
function resolveGitSha(output) {
|
|
12
|
-
const trimmed = output.trim();
|
|
13
|
-
if (!trimmed)
|
|
14
|
-
return null;
|
|
15
|
-
if (/fatal:|error:/i.test(trimmed))
|
|
16
|
-
return null;
|
|
17
|
-
return trimmed.split('\n').at(-1)?.trim() ?? null;
|
|
18
|
-
}
|
|
19
|
-
function sealWorkstreamsForMerge(mergeDb, sessionId, runnerId, lockEpoch, mergePath, remote, mainBranch, workstreams) {
|
|
20
|
-
(0, global_db_js_1.withGlobalDatabase)((db) => {
|
|
21
|
-
const sealedEntries = [];
|
|
22
|
-
(0, merge_lock_js_1.assertMergeLockEpoch)(mergeDb, sessionId, runnerId, lockEpoch);
|
|
23
|
-
for (let index = 0; index < workstreams.length; index += 1) {
|
|
24
|
-
(0, merge_lock_js_1.assertMergeLockEpoch)(mergeDb, sessionId, runnerId, lockEpoch);
|
|
25
|
-
const stream = workstreams[index];
|
|
26
|
-
const commits = (0, merge_git_js_1.getWorkstreamCommitList)(mergePath, remote, stream.branchName, mainBranch);
|
|
27
|
-
const sealedHeadSha = resolveGitSha((0, merge_git_js_1.runGitCommand)(mergePath, ['rev-parse', `${remote}/${stream.branchName}`], { allowFailure: true }));
|
|
28
|
-
const sealedBaseSha = resolveGitSha((0, merge_git_js_1.runGitCommand)(mergePath, ['merge-base', `${remote}/${mainBranch}`, `${remote}/${stream.branchName}`], { allowFailure: true }));
|
|
29
|
-
if (!sealedHeadSha || !sealedBaseSha) {
|
|
30
|
-
throw new merge_errors_js_1.ParallelMergeError(`Could not resolve sealed merge SHAs for ${remote}/${stream.branchName}`, 'REMOTE_BRANCH_MISSING');
|
|
31
|
-
}
|
|
32
|
-
sealedEntries.push({
|
|
33
|
-
streamId: stream.id,
|
|
34
|
-
sealedBaseSha,
|
|
35
|
-
sealedHeadSha,
|
|
36
|
-
commits,
|
|
37
|
-
completionOrder: index + 1,
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
const applySealedUpdates = db.transaction(() => {
|
|
41
|
-
for (const entry of sealedEntries) {
|
|
42
|
-
const update = db.prepare(`UPDATE workstreams
|
|
43
|
-
SET sealed_base_sha = ?,
|
|
44
|
-
sealed_head_sha = ?,
|
|
45
|
-
sealed_commit_shas = ?,
|
|
46
|
-
completion_order = COALESCE(completion_order, ?),
|
|
47
|
-
completed_at = COALESCE(completed_at, datetime('now')),
|
|
48
|
-
status = 'completed'
|
|
49
|
-
WHERE session_id = ?
|
|
50
|
-
AND id = ?
|
|
51
|
-
AND status IN ('running', 'completed')`).run(entry.sealedBaseSha, entry.sealedHeadSha, JSON.stringify(entry.commits), entry.completionOrder, sessionId, entry.streamId);
|
|
52
|
-
if (update.changes !== 1) {
|
|
53
|
-
throw new merge_errors_js_1.ParallelMergeError(`Workstream lease check failed while sealing ${entry.streamId}`, 'LEASE_FENCE_FAILED');
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
});
|
|
57
|
-
applySealedUpdates();
|
|
58
|
-
});
|
|
59
|
-
}
|
|
60
|
-
//# sourceMappingURL=merge-sealing.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"merge-sealing.js","sourceRoot":"","sources":["../../src/parallel/merge-sealing.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Merge validation gate and workspace utilities
|
|
3
|
-
*/
|
|
4
|
-
export declare function runValidationGate(mergePath: string, validationCommand?: string): void;
|
|
5
|
-
export declare function snippet(value: string | null | undefined, limit?: number): string;
|
|
6
|
-
//# sourceMappingURL=merge-validation.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"merge-validation.d.ts","sourceRoot":"","sources":["../../src/parallel/merge-validation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CA2CrF;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,KAAK,SAA2B,GAAG,MAAM,CAWlG"}
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Merge validation gate and workspace utilities
|
|
4
|
-
*/
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.runValidationGate = runValidationGate;
|
|
7
|
-
exports.snippet = snippet;
|
|
8
|
-
const node_child_process_1 = require("node:child_process");
|
|
9
|
-
const merge_errors_js_1 = require("./merge-errors.js");
|
|
10
|
-
const VALIDATION_MAX_BUFFER_BYTES = 20 * 1024 * 1024;
|
|
11
|
-
const VALIDATION_SNIPPET_LIMIT = 8_000;
|
|
12
|
-
function runValidationGate(mergePath, validationCommand) {
|
|
13
|
-
if (!validationCommand || validationCommand.trim().length === 0) {
|
|
14
|
-
return;
|
|
15
|
-
}
|
|
16
|
-
try {
|
|
17
|
-
(0, node_child_process_1.execSync)(validationCommand, {
|
|
18
|
-
cwd: mergePath,
|
|
19
|
-
stdio: 'pipe',
|
|
20
|
-
encoding: 'utf-8',
|
|
21
|
-
maxBuffer: VALIDATION_MAX_BUFFER_BYTES,
|
|
22
|
-
});
|
|
23
|
-
}
|
|
24
|
-
catch (error) {
|
|
25
|
-
const err = error;
|
|
26
|
-
const stderr = typeof err.stderr === 'string' ? err.stderr : err.stderr?.toString() ?? '';
|
|
27
|
-
const stdout = typeof err.stdout === 'string' ? err.stdout : err.stdout?.toString() ?? '';
|
|
28
|
-
if (err.code === 'ENOBUFS') {
|
|
29
|
-
throw new merge_errors_js_1.ParallelMergeError('Validation gate output exceeded the maximum buffer size. Reduce output verbosity or split the command.', 'VALIDATION_FAILED', {
|
|
30
|
-
details: {
|
|
31
|
-
command: validationCommand.trim(),
|
|
32
|
-
stderr: stderr ?? '',
|
|
33
|
-
stdout: stdout ?? '',
|
|
34
|
-
},
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
const message = [stderr, stdout, err.message].filter(Boolean).join('\n') || String(error);
|
|
38
|
-
throw new merge_errors_js_1.ParallelMergeError(`Validation gate failed: ${message}`, 'VALIDATION_FAILED', {
|
|
39
|
-
details: {
|
|
40
|
-
command: validationCommand.trim(),
|
|
41
|
-
stderr,
|
|
42
|
-
stdout,
|
|
43
|
-
},
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
function snippet(value, limit = VALIDATION_SNIPPET_LIMIT) {
|
|
48
|
-
if (!value) {
|
|
49
|
-
return '';
|
|
50
|
-
}
|
|
51
|
-
const trimmed = value.trim();
|
|
52
|
-
if (trimmed.length <= limit) {
|
|
53
|
-
return trimmed;
|
|
54
|
-
}
|
|
55
|
-
return trimmed.slice(-limit);
|
|
56
|
-
}
|
|
57
|
-
//# sourceMappingURL=merge-validation.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"merge-validation.js","sourceRoot":"","sources":["../../src/parallel/merge-validation.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAQH,8CA2CC;AAED,0BAWC;AA9DD,2DAA8C;AAC9C,uDAAuD;AAEvD,MAAM,2BAA2B,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AACrD,MAAM,wBAAwB,GAAG,KAAK,CAAC;AAEvC,SAAgB,iBAAiB,CAAC,SAAiB,EAAE,iBAA0B;IAC7E,IAAI,CAAC,iBAAiB,IAAI,iBAAiB,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChE,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,IAAA,6BAAQ,EAAC,iBAAiB,EAAE;YAC1B,GAAG,EAAE,SAAS;YACd,KAAK,EAAE,MAAM;YACb,QAAQ,EAAE,OAAO;YACjB,SAAS,EAAE,2BAA2B;SACvC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,MAAM,GAAG,GAAG,KAAsF,CAAC;QACnG,MAAM,MAAM,GAAG,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC1F,MAAM,MAAM,GAAG,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC1F,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC3B,MAAM,IAAI,oCAAkB,CAC1B,wGAAwG,EACxG,mBAAmB,EACnB;gBACE,OAAO,EAAE;oBACP,OAAO,EAAE,iBAAiB,CAAC,IAAI,EAAE;oBACjC,MAAM,EAAE,MAAM,IAAI,EAAE;oBACpB,MAAM,EAAE,MAAM,IAAI,EAAE;iBACrB;aACF,CACF,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;QAC1F,MAAM,IAAI,oCAAkB,CAC1B,2BAA2B,OAAO,EAAE,EACpC,mBAAmB,EACnB;YACE,OAAO,EAAE;gBACP,OAAO,EAAE,iBAAiB,CAAC,IAAI,EAAE;gBACjC,MAAM;gBACN,MAAM;aACP;SACF,CACF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAgB,OAAO,CAAC,KAAgC,EAAE,KAAK,GAAG,wBAAwB;IACxF,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,OAAO,CAAC,MAAM,IAAI,KAAK,EAAE,CAAC;QAC5B,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Merge workspace preparation and cleanup
|
|
3
|
-
*/
|
|
4
|
-
export declare function ensureMergeWorkingTree(projectPath: string): void;
|
|
5
|
-
export declare function cleanupWorkspaceState(projectPath: string, workspaceRoot: string, workstreamIds: string[], options: {
|
|
6
|
-
cleanupOnSuccess: boolean;
|
|
7
|
-
}): void;
|
|
8
|
-
//# sourceMappingURL=merge-workspace.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"merge-workspace.d.ts","sourceRoot":"","sources":["../../src/parallel/merge-workspace.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAUhE;AAED,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,EACrB,aAAa,EAAE,MAAM,EAAE,EACvB,OAAO,EAAE;IAAE,gBAAgB,EAAE,OAAO,CAAA;CAAE,GACrC,IAAI,CAqBN"}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Merge workspace preparation and cleanup
|
|
4
|
-
*/
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.ensureMergeWorkingTree = ensureMergeWorkingTree;
|
|
7
|
-
exports.cleanupWorkspaceState = cleanupWorkspaceState;
|
|
8
|
-
const node_path_1 = require("node:path");
|
|
9
|
-
const node_fs_1 = require("node:fs");
|
|
10
|
-
const clone_js_1 = require("./clone.js");
|
|
11
|
-
const merge_git_js_1 = require("./merge-git.js");
|
|
12
|
-
const merge_errors_js_1 = require("./merge-errors.js");
|
|
13
|
-
function ensureMergeWorkingTree(projectPath) {
|
|
14
|
-
const lines = (0, merge_git_js_1.gitStatusLines)(projectPath);
|
|
15
|
-
if (lines.length === 0)
|
|
16
|
-
return;
|
|
17
|
-
if (!(0, merge_git_js_1.hasCherryPickInProgress)(projectPath)) {
|
|
18
|
-
throw new merge_errors_js_1.ParallelMergeError('Working tree is dirty. Commit or stash changes before merging.', 'DIRTY_WORKTREE');
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
function cleanupWorkspaceState(projectPath, workspaceRoot, workstreamIds, options) {
|
|
22
|
-
if (!options.cleanupOnSuccess)
|
|
23
|
-
return;
|
|
24
|
-
const baseRoot = (0, node_path_1.resolve)(workspaceRoot);
|
|
25
|
-
const hash = (0, clone_js_1.getProjectHash)(projectPath);
|
|
26
|
-
const projectWorkspaceRoot = (0, node_path_1.resolve)(baseRoot, hash);
|
|
27
|
-
if (!projectWorkspaceRoot.startsWith(baseRoot)) {
|
|
28
|
-
return;
|
|
29
|
-
}
|
|
30
|
-
for (const workstreamId of workstreamIds) {
|
|
31
|
-
const folder = (0, node_path_1.resolve)(projectWorkspaceRoot, workstreamId.startsWith('ws-') ? workstreamId : `ws-${workstreamId}`);
|
|
32
|
-
if ((0, node_path_1.resolve)(folder).startsWith(projectWorkspaceRoot)) {
|
|
33
|
-
(0, node_fs_1.rmSync)(folder, { recursive: true, force: true });
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
//# sourceMappingURL=merge-workspace.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"merge-workspace.js","sourceRoot":"","sources":["../../src/parallel/merge-workspace.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAQH,wDAUC;AAED,sDA0BC;AA5CD,yCAAoC;AACpC,qCAAiC;AACjC,yCAA4C;AAC5C,iDAAyE;AACzE,uDAAuD;AAEvD,SAAgB,sBAAsB,CAAC,WAAmB;IACxD,MAAM,KAAK,GAAG,IAAA,6BAAc,EAAC,WAAW,CAAC,CAAC;IAC1C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAE/B,IAAI,CAAC,IAAA,sCAAuB,EAAC,WAAW,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,oCAAkB,CAC1B,gEAAgE,EAChE,gBAAgB,CACjB,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAgB,qBAAqB,CACnC,WAAmB,EACnB,aAAqB,EACrB,aAAuB,EACvB,OAAsC;IAEtC,IAAI,CAAC,OAAO,CAAC,gBAAgB;QAAE,OAAO;IAEtC,MAAM,QAAQ,GAAG,IAAA,mBAAO,EAAC,aAAa,CAAC,CAAC;IACxC,MAAM,IAAI,GAAG,IAAA,yBAAc,EAAC,WAAW,CAAC,CAAC;IACzC,MAAM,oBAAoB,GAAG,IAAA,mBAAO,EAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAErD,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/C,OAAO;IACT,CAAC;IAED,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE,CAAC;QACzC,MAAM,MAAM,GAAG,IAAA,mBAAO,EACpB,oBAAoB,EACpB,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,YAAY,EAAE,CACrE,CAAC;QAEF,IAAI,IAAA,mBAAO,EAAC,MAAM,CAAC,CAAC,UAAU,CAAC,oBAAoB,CAAC,EAAE,CAAC;YACrD,IAAA,gBAAM,EAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;AACH,CAAC"}
|
package/dist/parallel/merge.d.ts
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Parallel merge orchestration
|
|
3
|
-
* Cherry-picks completed workstream branches into main with crash-safe progress tracking.
|
|
4
|
-
*/
|
|
5
|
-
import { MergeLockRecord } from './merge-lock.js';
|
|
6
|
-
import { ParallelMergeError } from './merge-errors.js';
|
|
7
|
-
import { cleanupWorkspaceState } from './merge-workspace.js';
|
|
8
|
-
export interface MergeWorkstreamSpec {
|
|
9
|
-
id: string;
|
|
10
|
-
branchName: string;
|
|
11
|
-
}
|
|
12
|
-
export interface MergeOptions {
|
|
13
|
-
projectPath: string;
|
|
14
|
-
sessionId: string;
|
|
15
|
-
runnerId: string;
|
|
16
|
-
workstreams: MergeWorkstreamSpec[];
|
|
17
|
-
remote?: string;
|
|
18
|
-
mainBranch?: string;
|
|
19
|
-
lockTimeoutMinutes?: number;
|
|
20
|
-
heartbeatIntervalMs?: number;
|
|
21
|
-
remoteWorkspaceRoot?: string;
|
|
22
|
-
cleanupOnSuccess?: boolean;
|
|
23
|
-
integrationBranchName?: string;
|
|
24
|
-
validationCommand?: string;
|
|
25
|
-
/**
|
|
26
|
-
* When true, do NOT mark the session as 'completed' after merging this
|
|
27
|
-
* workstream. The caller is responsible for checking whether all workstreams
|
|
28
|
-
* are done and marking the session complete. Used by autoMergeOnCompletion
|
|
29
|
-
* so that a single fast workstream finishing doesn't mark the whole session
|
|
30
|
-
* complete while other workstreams are still running.
|
|
31
|
-
*/
|
|
32
|
-
skipSessionComplete?: boolean;
|
|
33
|
-
}
|
|
34
|
-
export interface MergeResult {
|
|
35
|
-
success: boolean;
|
|
36
|
-
completedCommits: number;
|
|
37
|
-
conflicts: number;
|
|
38
|
-
skipped: number;
|
|
39
|
-
errors: string[];
|
|
40
|
-
validationEscalationId?: string;
|
|
41
|
-
validationWorkspacePath?: string;
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Run cherry-pick merge loop across completed workstreams.
|
|
45
|
-
*/
|
|
46
|
-
export declare function runParallelMerge(options: MergeOptions): Promise<MergeResult>;
|
|
47
|
-
export { MergeLockRecord, ParallelMergeError, cleanupWorkspaceState, };
|
|
48
|
-
//# sourceMappingURL=merge.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../src/parallel/merge.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAmBH,OAAO,EACL,eAAe,EAKhB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,OAAO,EAA0B,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAIrF,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,mBAAmB,EAAE,CAAC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;;;OAMG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAClC;AAOD;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CA+OlF;AAED,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,qBAAqB,GACtB,CAAC"}
|