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,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":";;AAuBA,0DAiFC;AAxGD,0DAA6D;AAC7D;;GAEG;AAEH,iDAAwE;AACxE,mDAAuD;AAGvD,uDAAuD;AAOvD,SAAS,aAAa,CAAC,MAAc;IACnC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAC9B,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B,IAAI,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAChD,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC;AACpD,CAAC;AAED,SAAgB,uBAAuB,CACrC,OAA8C,EAC9C,SAAiB,EACjB,QAAgB,EAChB,SAAiB,EACjB,SAAiB,EACjB,MAAc,EACd,UAAkB,EAClB,WAAkC;IAElC,IAAA,iCAAkB,EAAC,CAAC,EAAE,EAAE,EAAE;QACxB,MAAM,aAAa,GAMd,EAAE,CAAC;QAER,IAAA,oCAAoB,EAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;QAE9D,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,WAAW,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YAC3D,IAAA,oCAAoB,EAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;YAC9D,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;YAClC,MAAM,OAAO,GAAG,IAAA,sCAAuB,EAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;YAC1F,MAAM,aAAa,GAAG,aAAa,CACjC,IAAA,4BAAa,EAAC,SAAS,EAAE,CAAC,WAAW,EAAE,GAAG,MAAM,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAClG,CAAC;YACF,MAAM,aAAa,GAAG,aAAa,CACjC,IAAA,4BAAa,EAAC,SAAS,EAAE,CAAC,YAAY,EAAE,GAAG,MAAM,IAAI,UAAU,EAAE,EAAE,GAAG,MAAM,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAC9H,CAAC;YAEF,IAAI,CAAC,aAAa,IAAI,CAAC,aAAa,EAAE,CAAC;gBACrC,MAAM,IAAI,oCAAkB,CAC1B,2CAA2C,MAAM,IAAI,MAAM,CAAC,UAAU,EAAE,EACxE,uBAAuB,CACxB,CAAC;YACJ,CAAC;YAED,aAAa,CAAC,IAAI,CAAC;gBACjB,QAAQ,EAAE,MAAM,CAAC,EAAE;gBACnB,aAAa;gBACb,aAAa;gBACb,OAAO;gBACP,eAAe,EAAE,KAAK,GAAG,CAAC;aAC3B,CAAC,CAAC;QACL,CAAC;QAED,MAAM,kBAAkB,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;YAC7C,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;gBAClC,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CACvB;;;;;;;;;oDAS0C,CAC3C,CAAC,GAAG,CACH,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,aAAa,EACnB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,EAC7B,KAAK,CAAC,eAAe,EACrB,SAAS,EACT,KAAK,CAAC,QAAQ,CACf,CAAC;gBAEF,IAAI,MAAM,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;oBACzB,MAAM,IAAI,oCAAkB,CAC1B,+CAA+C,KAAK,CAAC,QAAQ,EAAE,EAC/D,oBAAoB,CACrB,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,kBAAkB,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -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"}
@@ -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"}