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,40 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.parseReviewDecision = parseReviewDecision;
4
- exports.createPromptForConflictCoder = createPromptForConflictCoder;
5
- exports.createPromptForConflictReviewer = createPromptForConflictReviewer;
6
- function parseReviewDecision(raw) {
7
- const trimmed = raw.trim();
8
- const upper = trimmed.toUpperCase();
9
- const hasApprove = upper.includes('APPROVE');
10
- const hasReject = upper.includes('REJECT');
11
- if (hasApprove && !hasReject) {
12
- return {
13
- decision: 'approve',
14
- notes: trimmed || 'APPROVED by merge-conflict reviewer',
15
- };
16
- }
17
- if (hasReject) {
18
- return {
19
- decision: 'reject',
20
- notes: trimmed || 'Please review and correct conflict resolution',
21
- };
22
- }
23
- return {
24
- decision: 'reject',
25
- notes: trimmed || 'Decision was not clear. Please provide explicit APPROVE/REJECT.',
26
- };
27
- }
28
- function createPromptForConflictCoder(options) {
29
- const notesSection = options.rejectionNotes
30
- ? `\n\nLatest review note from the resolver:\n${options.rejectionNotes}\n`
31
- : '';
32
- return `You are resolving a merge conflict for a cherry-pick during parallel merge.\n\n## Conflict context\nWorkstream: ${options.workstreamId}\nBranch: ${options.branchName}\nCommit: ${options.shortSha}\nCommit Message:\n${options.commitMessage}\n\nConflicted files:\n${options.conflictedFiles.map((file) => `- ${file}`).join('\n')}\n\nIntended patch:\n${options.conflictPatch}\n\nRules:\n1) Edit conflicted files to a correct resolution.\n2) Remove ALL conflict markers (<<<<<<, =======, >>>>>>) in resolved files.\n3) Stage only the resolved files using git add.\n4) Do NOT commit.\n5) Be surgical; change only files required for this commit.\n${notesSection}\n\nRespond with a short confirmation when done.`;
33
- }
34
- function createPromptForConflictReviewer(options) {
35
- const files = options.stagedFiles.length > 0
36
- ? options.stagedFiles.map((file) => `- ${file}`).join('\n')
37
- : 'No files staged yet';
38
- return `You are reviewing a staged resolution for a cherry-pick conflict in parallel merge.\n\nWorkstream: ${options.workstreamId}\nBranch: ${options.branchName}\nCommit: ${options.shortSha}\nOriginal message: ${options.commitMessage}\n\nCurrent staged diff to be committed by cherry-pick --continue:\n${options.stagedDiff || '(empty diff)'}\n\nFiles staged:\n${files}\n\nDecision rules:\n- Reply with APPROVE if the resolution is correct.\n- Reply with REJECT and actionable notes if any conflict marker remains or logic is incorrect.\n\nFormat:\nAPPROVE - <optional note> or\nREJECT - <checklist itemized note>`;
39
- }
40
- //# sourceMappingURL=merge-conflict-prompts.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"merge-conflict-prompts.js","sourceRoot":"","sources":["../../src/parallel/merge-conflict-prompts.ts"],"names":[],"mappings":";;AAKA,kDAwBC;AAED,oEAcC;AAED,0EAaC;AAvDD,SAAgB,mBAAmB,CAAC,GAAW;IAC7C,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IACpC,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC7C,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAE3C,IAAI,UAAU,IAAI,CAAC,SAAS,EAAE,CAAC;QAC7B,OAAO;YACL,QAAQ,EAAE,SAAS;YACnB,KAAK,EAAE,OAAO,IAAI,qCAAqC;SACxD,CAAC;IACJ,CAAC;IAED,IAAI,SAAS,EAAE,CAAC;QACd,OAAO;YACL,QAAQ,EAAE,QAAQ;YAClB,KAAK,EAAE,OAAO,IAAI,+CAA+C;SAClE,CAAC;IACJ,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,QAAQ;QAClB,KAAK,EAAE,OAAO,IAAI,iEAAiE;KACpF,CAAC;AACJ,CAAC;AAED,SAAgB,4BAA4B,CAAC,OAQ5C;IACC,MAAM,YAAY,GAAG,OAAO,CAAC,cAAc;QACzC,CAAC,CAAC,8CAA8C,OAAO,CAAC,cAAc,IAAI;QAC1E,CAAC,CAAC,EAAE,CAAC;IAEP,OAAO,mHAAmH,OAAO,CAAC,YAAY,aAAa,OAAO,CAAC,UAAU,aAAa,OAAO,CAAC,QAAQ,sBAAsB,OAAO,CAAC,aAAa,0BAA0B,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,wBAAwB,OAAO,CAAC,aAAa,gRAAgR,YAAY,kDAAkD,CAAC;AAC1sB,CAAC;AAED,SAAgB,+BAA+B,CAAC,OAO/C;IACC,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;QAC1C,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAC3D,CAAC,CAAC,qBAAqB,CAAC;IAE1B,OAAO,sGAAsG,OAAO,CAAC,YAAY,aAAa,OAAO,CAAC,UAAU,aAAa,OAAO,CAAC,QAAQ,uBAAuB,OAAO,CAAC,aAAa,uEAAuE,OAAO,CAAC,UAAU,IAAI,cAAc,sBAAsB,KAAK,sPAAsP,CAAC;AACxmB,CAAC"}
@@ -1,3 +0,0 @@
1
- import type Database from 'better-sqlite3';
2
- export declare function ensureMergeConflictTask(db: Database.Database, workstreamId: string, shortSha: string, branchName: string, commitMessage: string, conflictedFiles: string[], conflictPatch: string, forceNew?: boolean): string;
3
- //# sourceMappingURL=merge-conflict-task.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"merge-conflict-task.d.ts","sourceRoot":"","sources":["../../src/parallel/merge-conflict-task.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAqC3C,wBAAgB,uBAAuB,CACrC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,EACrB,eAAe,EAAE,MAAM,EAAE,EACzB,aAAa,EAAE,MAAM,EACrB,QAAQ,UAAQ,GACf,MAAM,CA2CR"}
@@ -1,59 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ensureMergeConflictTask = ensureMergeConflictTask;
4
- const node_crypto_1 = require("node:crypto");
5
- const queries_js_1 = require("../database/queries.js");
6
- function buildMergeConflictSectionName() {
7
- return 'merge-conflicts';
8
- }
9
- function getNowISOString() {
10
- return new Date().toISOString();
11
- }
12
- function createMergeConflictSection(db) {
13
- const sectionName = buildMergeConflictSectionName();
14
- const existing = db
15
- .prepare('SELECT id FROM sections WHERE name = ? LIMIT 1')
16
- .get(sectionName);
17
- if (existing) {
18
- return existing.id;
19
- }
20
- const maxPosRow = db
21
- .prepare('SELECT MAX(position) as maxPos FROM sections')
22
- .get();
23
- const position = (maxPosRow?.maxPos ?? -1) + 1;
24
- const sectionId = (0, node_crypto_1.createHash)('sha1').update(sectionName + position).digest('hex');
25
- db.prepare(`INSERT INTO sections (id, name, position, priority, skipped, created_at)
26
- VALUES (?, ?, ?, ?, ?, ?)`).run(sectionId, sectionName, position, 80, 0, getNowISOString());
27
- return sectionId;
28
- }
29
- function ensureMergeConflictTask(db, workstreamId, shortSha, branchName, commitMessage, conflictedFiles, conflictPatch, forceNew = false) {
30
- const sectionId = createMergeConflictSection(db);
31
- if (!forceNew) {
32
- const existing = db
33
- .prepare(`SELECT t.id
34
- FROM tasks t
35
- INNER JOIN sections s ON s.id = t.section_id
36
- WHERE s.name = ? AND t.title LIKE ?
37
- ORDER BY t.created_at DESC
38
- LIMIT 1`)
39
- .get(buildMergeConflictSectionName(), `Merge conflict: cherry-pick ${shortSha}%`);
40
- if (existing?.id) {
41
- return existing.id;
42
- }
43
- }
44
- const title = `Merge conflict: cherry-pick ${shortSha} from ${branchName}`;
45
- const created = (0, queries_js_1.createTask)(db, title, {
46
- sectionId,
47
- sourceFile: `merge-conflict (${workstreamId})`,
48
- filePath: conflictedFiles.join(', '),
49
- status: 'pending',
50
- fileContentHash: conflictPatch.substring(0, 2048),
51
- fileCommitSha: commitMessage,
52
- });
53
- (0, queries_js_1.addAuditEntry)(db, created.id, 'null', 'pending', 'merge', {
54
- actorType: 'orchestrator',
55
- notes: `Generated from conflict while cherry-picking ${shortSha} from ${branchName}:\n${commitMessage}`,
56
- });
57
- return created.id;
58
- }
59
- //# sourceMappingURL=merge-conflict-task.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"merge-conflict-task.js","sourceRoot":"","sources":["../../src/parallel/merge-conflict-task.ts"],"names":[],"mappings":";;AAqCA,0DAoDC;AAxFD,6CAAyC;AACzC,uDAAmE;AAEnE,SAAS,6BAA6B;IACpC,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAED,SAAS,eAAe;IACtB,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AAClC,CAAC;AAED,SAAS,0BAA0B,CAAC,EAAqB;IACvD,MAAM,WAAW,GAAG,6BAA6B,EAAE,CAAC;IACpD,MAAM,QAAQ,GAAG,EAAE;SAChB,OAAO,CAAC,gDAAgD,CAAC;SACzD,GAAG,CAAC,WAAW,CAA+B,CAAC;IAElD,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,QAAQ,CAAC,EAAE,CAAC;IACrB,CAAC;IAED,MAAM,SAAS,GAAG,EAAE;SACjB,OAAO,CAAC,8CAA8C,CAAC;SACvD,GAAG,EAA+B,CAAC;IAEtC,MAAM,QAAQ,GAAG,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC/C,MAAM,SAAS,GAAG,IAAA,wBAAU,EAAC,MAAM,CAAC,CAAC,MAAM,CAAC,WAAW,GAAG,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAElF,EAAE,CAAC,OAAO,CACR;+BAC2B,CAC5B,CAAC,GAAG,CAAC,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC;IAElE,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAgB,uBAAuB,CACrC,EAAqB,EACrB,YAAoB,EACpB,QAAgB,EAChB,UAAkB,EAClB,aAAqB,EACrB,eAAyB,EACzB,aAAqB,EACrB,QAAQ,GAAG,KAAK;IAEhB,MAAM,SAAS,GAAG,0BAA0B,CAAC,EAAE,CAAC,CAAC;IAEjD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,QAAQ,GAAG,EAAE;aAChB,OAAO,CACN;;;;;iBAKS,CACV;aACA,GAAG,CAAC,6BAA6B,EAAE,EAAE,+BAA+B,QAAQ,GAAG,CAA+B,CAAC;QAElH,IAAI,QAAQ,EAAE,EAAE,EAAE,CAAC;YACjB,OAAO,QAAQ,CAAC,EAAE,CAAC;QACrB,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAG,+BAA+B,QAAQ,SAAS,UAAU,EAAE,CAAC;IAC3E,MAAM,OAAO,GAAG,IAAA,uBAAU,EAAC,EAAE,EAAE,KAAK,EAAE;QACpC,SAAS;QACT,UAAU,EAAE,mBAAmB,YAAY,GAAG;QAC9C,QAAQ,EAAE,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;QACpC,MAAM,EAAE,SAAS;QACjB,eAAe,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC;QACjD,aAAa,EAAE,aAAa;KAC7B,CAAC,CAAC;IAEH,IAAA,0BAAa,EACX,EAAE,EACF,OAAO,CAAC,EAAE,EACV,MAAM,EACN,SAAS,EACT,OAAO,EACP;QACE,SAAS,EAAE,cAAc;QACzB,KAAK,EAAE,gDAAgD,QAAQ,SAAS,UAAU,MAAM,aAAa,EAAE;KACxG,CACF,CAAC;IAEF,OAAO,OAAO,CAAC,EAAE,CAAC;AACpB,CAAC"}
@@ -1,22 +0,0 @@
1
- /**
2
- * Merge conflict resolution orchestrator.
3
- */
4
- import type Database from 'better-sqlite3';
5
- export { parseReviewDecision } from './merge-conflict-prompts.js';
6
- export interface ConflictRunOptions {
7
- db: Database.Database;
8
- projectPath: string;
9
- sessionId: string;
10
- workstreamId: string;
11
- runnerId: string;
12
- mergeLockHeartbeat?: {
13
- lockEpoch: number;
14
- timeoutMinutes: number;
15
- };
16
- branchName: string;
17
- position: number;
18
- commitSha: string;
19
- existingTaskId?: string;
20
- }
21
- export declare function runConflictResolutionCycle(options: ConflictRunOptions): Promise<'continued' | 'skipped'>;
22
- //# sourceMappingURL=merge-conflict.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"merge-conflict.d.ts","sourceRoot":"","sources":["../../src/parallel/merge-conflict.ts"],"names":[],"mappings":"AACA;;GAEG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAkC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAElE,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,CAAC,EAAE;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAqGD,wBAAsB,0BAA0B,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAyN9G"}
@@ -1,176 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.parseReviewDecision = void 0;
4
- exports.runConflictResolutionCycle = runConflictResolutionCycle;
5
- const global_db_js_1 = require("../runners/global-db.js");
6
- const queries_js_1 = require("../database/queries.js");
7
- const merge_git_js_1 = require("./merge-git.js");
8
- const merge_errors_js_1 = require("./merge-errors.js");
9
- const merge_progress_js_1 = require("./merge-progress.js");
10
- const merge_conflict_attempts_js_1 = require("./merge-conflict-attempts.js");
11
- const merge_conflict_invoke_js_1 = require("./merge-conflict-invoke.js");
12
- const merge_conflict_prompts_js_1 = require("./merge-conflict-prompts.js");
13
- const merge_conflict_task_js_1 = require("./merge-conflict-task.js");
14
- const merge_lock_js_1 = require("./merge-lock.js");
15
- var merge_conflict_prompts_js_2 = require("./merge-conflict-prompts.js");
16
- Object.defineProperty(exports, "parseReviewDecision", { enumerable: true, get: function () { return merge_conflict_prompts_js_2.parseReviewDecision; } });
17
- function refreshMergeConflictLease(sessionId, workstreamId, projectPath, runnerId) {
18
- (0, global_db_js_1.withGlobalDatabase)((db) => {
19
- const row = db
20
- .prepare(`SELECT id, claim_generation, runner_id
21
- FROM workstreams
22
- WHERE session_id = ?
23
- AND id = ?
24
- AND clone_path = ?
25
- AND status IN ('running', 'completed')
26
- LIMIT 1`)
27
- .get(sessionId, workstreamId, projectPath);
28
- if (!row) {
29
- throw new merge_errors_js_1.ParallelMergeError('Parallel workstream lease row not found during conflict resolution', 'LEASE_ROW_MISSING');
30
- }
31
- if (row.runner_id !== null && row.runner_id !== runnerId) {
32
- throw new merge_errors_js_1.ParallelMergeError(`Parallel workstream lease owned by ${row.runner_id}, not ${runnerId}`, 'LEASE_FENCE_FAILED');
33
- }
34
- const update = db
35
- .prepare(`UPDATE workstreams
36
- SET runner_id = ?,
37
- lease_expires_at = datetime('now', '+120 seconds')
38
- WHERE id = ?
39
- AND status IN ('running', 'completed')
40
- AND claim_generation = ?
41
- AND (runner_id IS NULL OR runner_id = ?)`)
42
- .run(runnerId, row.id, row.claim_generation, runnerId);
43
- if (update.changes !== 1) {
44
- throw new merge_errors_js_1.ParallelMergeError('Parallel workstream lease fence check failed during conflict resolution', 'LEASE_FENCE_FAILED');
45
- }
46
- });
47
- }
48
- function delay(ms) {
49
- return new Promise((resolve) => {
50
- setTimeout(resolve, ms);
51
- });
52
- }
53
- async function waitForConflictRetryWindow(db, sessionId, workstreamId, projectPath, runnerId, backoffMinutes, mergeLockHeartbeat) {
54
- if (backoffMinutes <= 0) {
55
- return;
56
- }
57
- let remainingMs = backoffMinutes * 60_000;
58
- const heartbeatSliceMs = 30_000;
59
- while (remainingMs > 0) {
60
- const waitMs = Math.min(heartbeatSliceMs, remainingMs);
61
- await delay(waitMs);
62
- remainingMs -= waitMs;
63
- refreshMergeConflictLease(sessionId, workstreamId, projectPath, runnerId);
64
- if (mergeLockHeartbeat) {
65
- (0, merge_lock_js_1.refreshMergeLock)(db, sessionId, runnerId, mergeLockHeartbeat.timeoutMinutes, mergeLockHeartbeat.lockEpoch);
66
- }
67
- }
68
- }
69
- async function runConflictResolutionCycle(options) {
70
- const { db, projectPath, sessionId, workstreamId, runnerId, mergeLockHeartbeat, branchName, position, commitSha, existingTaskId, } = options;
71
- const shortSha = commitSha.slice(0, 7);
72
- const conflictedFiles = (0, merge_git_js_1.getConflictedFiles)(projectPath);
73
- const conflictPatch = (0, merge_git_js_1.getCommitPatch)(projectPath, commitSha);
74
- const commitMessage = (0, merge_git_js_1.getCommitMessage)(projectPath, commitSha);
75
- const taskId = (0, merge_conflict_task_js_1.ensureMergeConflictTask)(db, workstreamId, shortSha, branchName, commitMessage, conflictedFiles, conflictPatch, !existingTaskId);
76
- let conflictTaskId = existingTaskId ?? taskId;
77
- if (conflictTaskId !== taskId) {
78
- conflictTaskId = taskId;
79
- }
80
- (0, merge_progress_js_1.upsertProgressEntry)(db, sessionId, workstreamId, position, commitSha, 'conflict', conflictTaskId);
81
- const currentConflictTask = (0, queries_js_1.getTask)(db, conflictTaskId);
82
- if (!currentConflictTask) {
83
- throw new merge_errors_js_1.ParallelMergeError('Created merge-conflict task not found', 'TASK_MISSING');
84
- }
85
- refreshMergeConflictLease(sessionId, workstreamId, projectPath, runnerId);
86
- if (currentConflictTask.status === 'completed') {
87
- const appliedCommitSha = (0, merge_git_js_1.runGitCommand)(projectPath, ['rev-parse', 'HEAD'], { allowFailure: true }).trim();
88
- (0, merge_progress_js_1.upsertProgressEntry)(db, sessionId, workstreamId, position, commitSha, 'applied', conflictTaskId, appliedCommitSha || null);
89
- (0, merge_conflict_attempts_js_1.clearConflictAttemptState)(sessionId, workstreamId);
90
- return 'continued';
91
- }
92
- (0, queries_js_1.updateTaskStatus)(db, currentConflictTask.id, 'in_progress', 'merge-conflict-orchestrator');
93
- while (true) {
94
- const conflictAttempt = (0, merge_conflict_attempts_js_1.recordConflictAttempt)(sessionId, workstreamId);
95
- if (conflictAttempt.blocked) {
96
- (0, queries_js_1.rejectTask)(db, currentConflictTask.id, 'merge-conflict-reviewer', `Conflict resolution attempt limit reached (${merge_conflict_attempts_js_1.MAX_CONFLICT_ATTEMPTS}). Session moved to blocked_conflict.`);
97
- throw new merge_errors_js_1.ParallelMergeError(`Conflict resolution exceeded ${merge_conflict_attempts_js_1.MAX_CONFLICT_ATTEMPTS} attempts for ${shortSha}`, 'CONFLICT_ATTEMPT_LIMIT');
98
- }
99
- refreshMergeConflictLease(sessionId, workstreamId, projectPath, runnerId);
100
- if (conflictAttempt.attempts > 1 && (conflictAttempt.backoffMinutes ?? 0) > 0) {
101
- (0, queries_js_1.updateTaskStatus)(db, currentConflictTask.id, 'in_progress', 'merge-conflict-orchestrator', `Waiting ${conflictAttempt.backoffMinutes} minute(s) before retry ${conflictAttempt.attempts}.`);
102
- await waitForConflictRetryWindow(db, sessionId, workstreamId, projectPath, runnerId, conflictAttempt.backoffMinutes ?? 0, mergeLockHeartbeat);
103
- }
104
- const existingTask = (0, queries_js_1.getTask)(db, currentConflictTask.id);
105
- const noteParts = [`Attempt ${conflictAttempt.attempts}/${merge_conflict_attempts_js_1.MAX_CONFLICT_ATTEMPTS}.`];
106
- if (existingTask?.rejection_count) {
107
- noteParts.push(`After ${existingTask.rejection_count} rejection(s).`);
108
- }
109
- const lastNotes = noteParts.join(' ');
110
- const coderPrompt = (0, merge_conflict_prompts_js_1.createPromptForConflictCoder)({
111
- workstreamId,
112
- shortSha,
113
- branchName,
114
- commitMessage,
115
- conflictedFiles,
116
- conflictPatch,
117
- rejectionNotes: lastNotes,
118
- });
119
- await (0, merge_conflict_invoke_js_1.invokeMergeConflictModel)('coder', projectPath, currentConflictTask.id, coderPrompt);
120
- const remaining = (0, merge_git_js_1.getConflictedFiles)(projectPath);
121
- if (remaining.length > 0) {
122
- (0, queries_js_1.updateTaskStatus)(db, currentConflictTask.id, 'in_progress', 'merge-conflict-orchestrator', `Conflict markers still present: ${remaining.join(', ')}`);
123
- continue;
124
- }
125
- const stagedFiles = (0, merge_git_js_1.getCachedFiles)(projectPath);
126
- const stagedDiff = (0, merge_git_js_1.getCachedDiff)(projectPath);
127
- if (stagedFiles.length === 0 || stagedDiff.trim().length === 0) {
128
- (0, queries_js_1.updateTaskStatus)(db, currentConflictTask.id, 'in_progress', 'merge-conflict-orchestrator', 'No staged diff found. Stage resolved files before requesting review.');
129
- continue;
130
- }
131
- (0, queries_js_1.updateTaskStatus)(db, currentConflictTask.id, 'review', 'merge-conflict-orchestrator');
132
- const reviewerPrompt = (0, merge_conflict_prompts_js_1.createPromptForConflictReviewer)({
133
- workstreamId,
134
- shortSha,
135
- branchName,
136
- commitMessage,
137
- stagedDiff,
138
- stagedFiles,
139
- });
140
- const decisionText = await (0, merge_conflict_invoke_js_1.invokeMergeConflictModel)('reviewer', projectPath, currentConflictTask.id, reviewerPrompt);
141
- const decision = (0, merge_conflict_prompts_js_1.parseReviewDecision)(decisionText);
142
- if (decision.decision === 'reject') {
143
- (0, queries_js_1.rejectTask)(db, currentConflictTask.id, 'merge-conflict-reviewer', decision.notes);
144
- continue;
145
- }
146
- if ((0, merge_git_js_1.hasUnmergedFiles)(projectPath)) {
147
- (0, queries_js_1.rejectTask)(db, currentConflictTask.id, 'merge-conflict-reviewer', 'Conflict markers still present. Please fix.');
148
- continue;
149
- }
150
- if (!(0, merge_git_js_1.hasCherryPickInProgress)(projectPath)) {
151
- throw new merge_errors_js_1.ParallelMergeError('Cherry-pick no longer in progress while resolving conflict', 'CHERRY_PICK_CONTEXT_LOST');
152
- }
153
- try {
154
- refreshMergeConflictLease(sessionId, workstreamId, projectPath, runnerId);
155
- (0, merge_git_js_1.runGitCommand)(projectPath, ['-c', 'core.editor=true', 'cherry-pick', '--continue']);
156
- (0, queries_js_1.approveTask)(db, currentConflictTask.id, 'merge-conflict-reviewer', decision.notes);
157
- const appliedCommitSha = (0, merge_git_js_1.runGitCommand)(projectPath, ['rev-parse', 'HEAD'], { allowFailure: true }).trim();
158
- (0, merge_progress_js_1.upsertProgressEntry)(db, sessionId, workstreamId, position, commitSha, 'applied', currentConflictTask.id, appliedCommitSha || null);
159
- (0, merge_conflict_attempts_js_1.clearConflictAttemptState)(sessionId, workstreamId);
160
- return 'continued';
161
- }
162
- catch (error) {
163
- const message = error instanceof Error ? error.message : String(error);
164
- if (/nothing to commit|previous cherry-pick is empty/i.test(message)) {
165
- refreshMergeConflictLease(sessionId, workstreamId, projectPath, runnerId);
166
- (0, merge_git_js_1.runGitCommand)(projectPath, ['cherry-pick', '--skip']);
167
- (0, merge_progress_js_1.upsertProgressEntry)(db, sessionId, workstreamId, position, commitSha, 'skipped', currentConflictTask.id);
168
- (0, queries_js_1.updateTaskStatus)(db, currentConflictTask.id, 'completed', 'merge-conflict-reviewer', 'Cherry-pick is now empty after resolution; skipped this commit.');
169
- (0, merge_conflict_attempts_js_1.clearConflictAttemptState)(sessionId, workstreamId);
170
- return 'skipped';
171
- }
172
- throw error;
173
- }
174
- }
175
- }
176
- //# sourceMappingURL=merge-conflict.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"merge-conflict.js","sourceRoot":"","sources":["../../src/parallel/merge-conflict.ts"],"names":[],"mappings":"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"}
@@ -1,12 +0,0 @@
1
- /**
2
- * Merge orchestration error type.
3
- */
4
- export declare class ParallelMergeError extends Error {
5
- readonly code: string;
6
- readonly details?: Record<string, string | number | boolean | null>;
7
- constructor(message: string, code?: string, options?: {
8
- cause?: unknown;
9
- details?: Record<string, string | number | boolean | null>;
10
- });
11
- }
12
- //# sourceMappingURL=merge-errors.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"merge-errors.d.ts","sourceRoot":"","sources":["../../src/parallel/merge-errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,SAAgB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC;gBAGzE,OAAO,EAAE,MAAM,EACf,IAAI,SAAyB,EAC7B,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,CAAA;KAAE;CAO5F"}
@@ -1,18 +0,0 @@
1
- "use strict";
2
- /**
3
- * Merge orchestration error type.
4
- */
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.ParallelMergeError = void 0;
7
- class ParallelMergeError extends Error {
8
- code;
9
- details;
10
- constructor(message, code = 'PARALLEL_MERGE_ERROR', options) {
11
- super(message, options);
12
- this.name = 'ParallelMergeError';
13
- this.code = code;
14
- this.details = options?.details;
15
- }
16
- }
17
- exports.ParallelMergeError = ParallelMergeError;
18
- //# sourceMappingURL=merge-errors.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"merge-errors.js","sourceRoot":"","sources":["../../src/parallel/merge-errors.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,MAAa,kBAAmB,SAAQ,KAAK;IAC3B,IAAI,CAAS;IACb,OAAO,CAAoD;IAE3E,YACE,OAAe,EACf,IAAI,GAAG,sBAAsB,EAC7B,OAAyF;QAEzF,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;QACjC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,EAAE,OAAO,CAAC;IAClC,CAAC;CACF;AAdD,gDAcC"}
@@ -1,25 +0,0 @@
1
- /**
2
- * Git helper operations used by parallel merge orchestration.
3
- */
4
- export interface GitCommandOptions {
5
- allowFailure?: boolean;
6
- maxBuffer?: number;
7
- timeoutMs?: number;
8
- }
9
- export declare function runGitCommand(cwd: string, args: string[], options?: GitCommandOptions): string;
10
- export declare function cleanTreeHasConflicts(projectPath: string): boolean;
11
- export declare function hasUnmergedFiles(projectPath: string): boolean;
12
- export declare function gitStatusLines(projectPath: string): string[];
13
- export declare function hasCherryPickInProgress(projectPath: string): boolean;
14
- export declare function getWorkstreamCommitList(projectPath: string, remote: string, workstreamBranch: string, mainBranch: string): string[];
15
- export declare function getCommitPatch(projectPath: string, commitSha: string): string;
16
- export declare function getCommitMessage(projectPath: string, commitSha: string): string;
17
- export declare function getCommitShortSha(commitSha: string): string;
18
- export declare function getConflictedFiles(projectPath: string): string[];
19
- export declare function getCachedDiff(projectPath: string): string;
20
- export declare function getCachedFiles(projectPath: string): string[];
21
- export declare function isNonFatalFetchResult(output: string): boolean;
22
- export declare function isMissingRemoteBranchFailure(output: string): boolean;
23
- export declare function safeRunMergeCommand(projectPath: string, remote: string, branchName: string): void;
24
- export declare function isNoPushError(output: string): boolean;
25
- //# sourceMappingURL=merge-git.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"merge-git.d.ts","sourceRoot":"","sources":["../../src/parallel/merge-git.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,MAAM,WAAW,iBAAiB;IAChC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,aAAa,CAC3B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,GAAE,iBAAsB,GAC9B,MAAM,CA+BR;AAED,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAGlE;AAED,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAG7D;AAED,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAM5D;AAED,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAEpE;AAED,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,gBAAgB,EAAE,MAAM,EACxB,UAAU,EAAE,MAAM,GACjB,MAAM,EAAE,CA0BV;AAED,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAE7E;AAED,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAE/E;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAGhE;AAED,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAG5D;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAO7D;AAED,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CASpE;AAED,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAoBjG;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAGrD"}
@@ -1,141 +0,0 @@
1
- "use strict";
2
- /**
3
- * Git helper operations used by parallel merge orchestration.
4
- */
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.runGitCommand = runGitCommand;
7
- exports.cleanTreeHasConflicts = cleanTreeHasConflicts;
8
- exports.hasUnmergedFiles = hasUnmergedFiles;
9
- exports.gitStatusLines = gitStatusLines;
10
- exports.hasCherryPickInProgress = hasCherryPickInProgress;
11
- exports.getWorkstreamCommitList = getWorkstreamCommitList;
12
- exports.getCommitPatch = getCommitPatch;
13
- exports.getCommitMessage = getCommitMessage;
14
- exports.getCommitShortSha = getCommitShortSha;
15
- exports.getConflictedFiles = getConflictedFiles;
16
- exports.getCachedDiff = getCachedDiff;
17
- exports.getCachedFiles = getCachedFiles;
18
- exports.isNonFatalFetchResult = isNonFatalFetchResult;
19
- exports.isMissingRemoteBranchFailure = isMissingRemoteBranchFailure;
20
- exports.safeRunMergeCommand = safeRunMergeCommand;
21
- exports.isNoPushError = isNoPushError;
22
- const node_child_process_1 = require("node:child_process");
23
- const node_fs_1 = require("node:fs");
24
- const node_path_1 = require("node:path");
25
- const merge_errors_js_1 = require("./merge-errors.js");
26
- function runGitCommand(cwd, args, options = {}) {
27
- const { allowFailure = false, timeoutMs = 120_000 } = options;
28
- try {
29
- return (0, node_child_process_1.execFileSync)('git', args, {
30
- cwd,
31
- encoding: 'utf-8',
32
- stdio: ['pipe', 'pipe', 'pipe'],
33
- timeout: timeoutMs,
34
- maxBuffer: options.maxBuffer,
35
- env: { ...process.env, GIT_TERMINAL_PROMPT: '0' },
36
- }).trim();
37
- }
38
- catch (error) {
39
- if (allowFailure) {
40
- if (error instanceof Error) {
41
- const err = error;
42
- return [err.stdout, err.stderr]
43
- .map((value) => (typeof value === 'string' ? value : value?.toString()))
44
- .filter(Boolean)
45
- .join('\n')
46
- .trim();
47
- }
48
- return '';
49
- }
50
- const err = error;
51
- const stderr = err.stderr ? err.stderr.toString() : '';
52
- const stdout = err.stdout ? err.stdout.toString() : '';
53
- const details = [stderr, stdout].filter(Boolean).join('\n') || err.message || 'Unknown git error';
54
- throw new merge_errors_js_1.ParallelMergeError(`Git command failed: git ${args.join(' ')}\n${details}`, 'GIT_ERROR');
55
- }
56
- }
57
- function cleanTreeHasConflicts(projectPath) {
58
- const status = runGitCommand(projectPath, ['status', '--porcelain']);
59
- return status.split('\n').some((line) => line.startsWith('UU') || line.includes('U'));
60
- }
61
- function hasUnmergedFiles(projectPath) {
62
- const unmerged = runGitCommand(projectPath, ['diff', '--name-only', '--diff-filter=U']);
63
- return unmerged.trim().length > 0;
64
- }
65
- function gitStatusLines(projectPath) {
66
- // Merge preflight only needs to block on tracked changes/conflicts.
67
- // Untracked files (for example runtime metadata folders) should not block
68
- // cherry-pick merge execution in integration workspaces.
69
- const status = runGitCommand(projectPath, ['status', '--porcelain', '--untracked-files=no']);
70
- return status.split('\n').filter(Boolean);
71
- }
72
- function hasCherryPickInProgress(projectPath) {
73
- return (0, node_fs_1.existsSync)((0, node_path_1.resolve)(projectPath, '.git', 'CHERRY_PICK_HEAD'));
74
- }
75
- function getWorkstreamCommitList(projectPath, remote, workstreamBranch, mainBranch) {
76
- const arg = `${mainBranch}..${remote}/${workstreamBranch}`;
77
- const output = runGitCommand(projectPath, ['log', arg, '--format=%H', '--reverse'], { allowFailure: true });
78
- if (/error:|fatal:|error /.test(output.toLowerCase()) && !isMissingRemoteBranchFailure(output)) {
79
- throw new merge_errors_js_1.ParallelMergeError(`Failed to list commits from ${remote}/${workstreamBranch}: ${output}`, 'COMMIT_LIST_FAILED');
80
- }
81
- if (isMissingRemoteBranchFailure(output)) {
82
- throw new merge_errors_js_1.ParallelMergeError(`Remote branch is missing: ${remote}/${workstreamBranch}`, 'REMOTE_BRANCH_MISSING');
83
- }
84
- return output
85
- .split('\n')
86
- .map((line) => line.trim())
87
- .filter(Boolean);
88
- }
89
- function getCommitPatch(projectPath, commitSha) {
90
- return runGitCommand(projectPath, ['show', commitSha, '--']);
91
- }
92
- function getCommitMessage(projectPath, commitSha) {
93
- return runGitCommand(projectPath, ['log', '-1', '--format=%s%n%b', commitSha]);
94
- }
95
- function getCommitShortSha(commitSha) {
96
- return commitSha.length > 7 ? commitSha.slice(0, 7) : commitSha;
97
- }
98
- function getConflictedFiles(projectPath) {
99
- const output = runGitCommand(projectPath, ['diff', '--name-only', '--diff-filter=U']);
100
- return output.split('\n').filter(Boolean);
101
- }
102
- function getCachedDiff(projectPath) {
103
- return runGitCommand(projectPath, ['diff', '--cached']);
104
- }
105
- function getCachedFiles(projectPath) {
106
- const output = runGitCommand(projectPath, ['diff', '--cached', '--name-only']);
107
- return output.split('\n').filter(Boolean);
108
- }
109
- function isNonFatalFetchResult(output) {
110
- const lower = output.toLowerCase();
111
- return (lower.includes('couldn\'t find remote ref') ||
112
- lower.includes('does not exist') ||
113
- lower.includes('fatal: remote ref does not exist'));
114
- }
115
- function isMissingRemoteBranchFailure(output) {
116
- const lower = output.toLowerCase();
117
- return (lower.includes('couldn\'t find remote ref') ||
118
- (lower.includes('remote branch') && lower.includes('not found')) ||
119
- lower.includes('unknown revision or path not in the working tree') ||
120
- lower.includes('does not exist') ||
121
- lower.includes('fatal: remote ref does not exist'));
122
- }
123
- function safeRunMergeCommand(projectPath, remote, branchName) {
124
- const output = runGitCommand(projectPath, ['fetch', '--prune', remote, branchName], { allowFailure: true });
125
- const lower = output.toLowerCase();
126
- if (!/error:|fatal:/.test(lower)) {
127
- return;
128
- }
129
- if (isMissingRemoteBranchFailure(lower)) {
130
- throw new merge_errors_js_1.ParallelMergeError(`Remote branch is missing: ${remote}/${branchName}. Refusing to continue merge.`, 'REMOTE_BRANCH_MISSING');
131
- }
132
- if (isNonFatalFetchResult(lower)) {
133
- return;
134
- }
135
- throw new merge_errors_js_1.ParallelMergeError(`Failed to fetch ${branchName} from ${remote}: ${output}`, 'FETCH_FAILED');
136
- }
137
- function isNoPushError(output) {
138
- const lower = output.toLowerCase();
139
- return lower.includes('error:') || lower.includes('fatal:');
140
- }
141
- //# sourceMappingURL=merge-git.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"merge-git.js","sourceRoot":"","sources":["../../src/parallel/merge-git.ts"],"names":[],"mappings":"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"}
@@ -1,28 +0,0 @@
1
- /**
2
- * Merge lock management for concurrent merge workers.
3
- */
4
- import type Database from 'better-sqlite3';
5
- export interface MergeLockRecord {
6
- id: number;
7
- session_id: string;
8
- runner_id: string;
9
- lock_epoch: number;
10
- acquired_at: string;
11
- expires_at: string;
12
- heartbeat_at: string;
13
- }
14
- export interface MergeLockOptions {
15
- sessionId: string;
16
- runnerId: string;
17
- timeoutMinutes: number;
18
- }
19
- export declare function isLockExpired(lock: MergeLockRecord): boolean;
20
- export declare function getLatestMergeLock(db: Database.Database, sessionId: string): MergeLockRecord | null;
21
- export declare function acquireMergeLock(db: Database.Database, options: MergeLockOptions): {
22
- acquired: boolean;
23
- lock?: MergeLockRecord;
24
- };
25
- export declare function refreshMergeLock(db: Database.Database, sessionId: string, runnerId: string, timeoutMinutes: number, lockEpoch: number): MergeLockRecord;
26
- export declare function assertMergeLockEpoch(db: Database.Database, sessionId: string, runnerId: string, lockEpoch: number): void;
27
- export declare function releaseMergeLock(db: Database.Database, sessionId: string, runnerId: string, lockEpoch: number): void;
28
- //# sourceMappingURL=merge-lock.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"merge-lock.d.ts","sourceRoot":"","sources":["../../src/parallel/merge-lock.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAG3C,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;CACxB;AAUD,wBAAgB,aAAa,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAE5D;AAUD,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CASnG;AAED,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,OAAO,EAAE,gBAAgB,GACxB;IAAE,QAAQ,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,eAAe,CAAA;CAAE,CAyC/C;AAED,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM,GAChB,eAAe,CAqBjB;AAED,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAChB,IAAI,CAmBN;AAED,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAIpH"}