@specforge/mcp 2.6.0 → 3.0.0

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 (237) hide show
  1. package/README.md +73 -0
  2. package/bin/{specforge-mcp → specforge} +0 -5
  3. package/dist/ai-provider/circuit-breaker.d.ts +63 -0
  4. package/dist/ai-provider/circuit-breaker.d.ts.map +1 -0
  5. package/dist/ai-provider/circuit-breaker.js +160 -0
  6. package/dist/ai-provider/circuit-breaker.js.map +1 -0
  7. package/dist/ai-provider/cli-version.d.ts +50 -0
  8. package/dist/ai-provider/cli-version.d.ts.map +1 -0
  9. package/dist/ai-provider/cli-version.js +141 -0
  10. package/dist/ai-provider/cli-version.js.map +1 -0
  11. package/dist/ai-provider/config-loader.d.ts +45 -0
  12. package/dist/ai-provider/config-loader.d.ts.map +1 -0
  13. package/dist/ai-provider/config-loader.js +106 -0
  14. package/dist/ai-provider/config-loader.js.map +1 -0
  15. package/dist/ai-provider/errors.d.ts +48 -0
  16. package/dist/ai-provider/errors.d.ts.map +1 -0
  17. package/dist/ai-provider/errors.js +102 -0
  18. package/dist/ai-provider/errors.js.map +1 -0
  19. package/dist/ai-provider/events.d.ts +73 -0
  20. package/dist/ai-provider/events.d.ts.map +1 -0
  21. package/dist/ai-provider/events.js +75 -0
  22. package/dist/ai-provider/events.js.map +1 -0
  23. package/dist/ai-provider/factory.d.ts +31 -0
  24. package/dist/ai-provider/factory.d.ts.map +1 -0
  25. package/dist/ai-provider/factory.js +100 -0
  26. package/dist/ai-provider/factory.js.map +1 -0
  27. package/dist/ai-provider/index.d.ts +24 -0
  28. package/dist/ai-provider/index.d.ts.map +1 -0
  29. package/dist/ai-provider/index.js +46 -0
  30. package/dist/ai-provider/index.js.map +1 -0
  31. package/dist/ai-provider/instance-coordinator.d.ts +54 -0
  32. package/dist/ai-provider/instance-coordinator.d.ts.map +1 -0
  33. package/dist/ai-provider/instance-coordinator.js +199 -0
  34. package/dist/ai-provider/instance-coordinator.js.map +1 -0
  35. package/dist/ai-provider/jsonl-parser.d.ts +43 -0
  36. package/dist/ai-provider/jsonl-parser.d.ts.map +1 -0
  37. package/dist/ai-provider/jsonl-parser.js +107 -0
  38. package/dist/ai-provider/jsonl-parser.js.map +1 -0
  39. package/dist/ai-provider/lifecycle.d.ts +50 -0
  40. package/dist/ai-provider/lifecycle.d.ts.map +1 -0
  41. package/dist/ai-provider/lifecycle.js +145 -0
  42. package/dist/ai-provider/lifecycle.js.map +1 -0
  43. package/dist/ai-provider/logger.d.ts +69 -0
  44. package/dist/ai-provider/logger.d.ts.map +1 -0
  45. package/dist/ai-provider/logger.js +161 -0
  46. package/dist/ai-provider/logger.js.map +1 -0
  47. package/dist/ai-provider/metrics.d.ts +91 -0
  48. package/dist/ai-provider/metrics.d.ts.map +1 -0
  49. package/dist/ai-provider/metrics.js +187 -0
  50. package/dist/ai-provider/metrics.js.map +1 -0
  51. package/dist/ai-provider/process-manager.d.ts +97 -0
  52. package/dist/ai-provider/process-manager.d.ts.map +1 -0
  53. package/dist/ai-provider/process-manager.js +477 -0
  54. package/dist/ai-provider/process-manager.js.map +1 -0
  55. package/dist/ai-provider/providers/claude-code.d.ts +64 -0
  56. package/dist/ai-provider/providers/claude-code.d.ts.map +1 -0
  57. package/dist/ai-provider/providers/claude-code.js +205 -0
  58. package/dist/ai-provider/providers/claude-code.js.map +1 -0
  59. package/dist/ai-provider/retry-executor.d.ts +52 -0
  60. package/dist/ai-provider/retry-executor.d.ts.map +1 -0
  61. package/dist/ai-provider/retry-executor.js +138 -0
  62. package/dist/ai-provider/retry-executor.js.map +1 -0
  63. package/dist/ai-provider/safe-args.d.ts +58 -0
  64. package/dist/ai-provider/safe-args.d.ts.map +1 -0
  65. package/dist/ai-provider/safe-args.js +176 -0
  66. package/dist/ai-provider/safe-args.js.map +1 -0
  67. package/dist/ai-provider/semaphore.d.ts +50 -0
  68. package/dist/ai-provider/semaphore.d.ts.map +1 -0
  69. package/dist/ai-provider/semaphore.js +97 -0
  70. package/dist/ai-provider/semaphore.js.map +1 -0
  71. package/dist/ai-provider/tracer.d.ts +67 -0
  72. package/dist/ai-provider/tracer.d.ts.map +1 -0
  73. package/dist/ai-provider/tracer.js +209 -0
  74. package/dist/ai-provider/tracer.js.map +1 -0
  75. package/dist/ai-provider/types.d.ts +181 -0
  76. package/dist/ai-provider/types.d.ts.map +1 -0
  77. package/dist/ai-provider/types.js +8 -0
  78. package/dist/ai-provider/types.js.map +1 -0
  79. package/dist/autopilot/agents/agent-runner.d.ts +109 -0
  80. package/dist/autopilot/agents/agent-runner.d.ts.map +1 -0
  81. package/dist/autopilot/agents/agent-runner.js +731 -0
  82. package/dist/autopilot/agents/agent-runner.js.map +1 -0
  83. package/dist/autopilot/agents/agent-selector.d.ts +59 -0
  84. package/dist/autopilot/agents/agent-selector.d.ts.map +1 -0
  85. package/dist/autopilot/agents/agent-selector.js +234 -0
  86. package/dist/autopilot/agents/agent-selector.js.map +1 -0
  87. package/dist/autopilot/agents/model-selector.d.ts +49 -0
  88. package/dist/autopilot/agents/model-selector.d.ts.map +1 -0
  89. package/dist/autopilot/agents/model-selector.js +62 -0
  90. package/dist/autopilot/agents/model-selector.js.map +1 -0
  91. package/dist/autopilot/agents/profiles/builtin.d.ts +55 -0
  92. package/dist/autopilot/agents/profiles/builtin.d.ts.map +1 -0
  93. package/dist/autopilot/agents/profiles/builtin.js +323 -0
  94. package/dist/autopilot/agents/profiles/builtin.js.map +1 -0
  95. package/dist/autopilot/agents/profiles/types.d.ts +98 -0
  96. package/dist/autopilot/agents/profiles/types.d.ts.map +1 -0
  97. package/dist/autopilot/agents/profiles/types.js +17 -0
  98. package/dist/autopilot/agents/profiles/types.js.map +1 -0
  99. package/dist/autopilot/api/autopilot-api-client.d.ts +217 -0
  100. package/dist/autopilot/api/autopilot-api-client.d.ts.map +1 -0
  101. package/dist/autopilot/api/autopilot-api-client.js +402 -0
  102. package/dist/autopilot/api/autopilot-api-client.js.map +1 -0
  103. package/dist/autopilot/cli/abort.d.ts +20 -0
  104. package/dist/autopilot/cli/abort.d.ts.map +1 -0
  105. package/dist/autopilot/cli/abort.js +201 -0
  106. package/dist/autopilot/cli/abort.js.map +1 -0
  107. package/dist/autopilot/cli/display.d.ts +63 -0
  108. package/dist/autopilot/cli/display.d.ts.map +1 -0
  109. package/dist/autopilot/cli/display.js +260 -0
  110. package/dist/autopilot/cli/display.js.map +1 -0
  111. package/dist/autopilot/cli/index.d.ts +24 -0
  112. package/dist/autopilot/cli/index.d.ts.map +1 -0
  113. package/dist/autopilot/cli/index.js +79 -0
  114. package/dist/autopilot/cli/index.js.map +1 -0
  115. package/dist/autopilot/cli/pause.d.ts +18 -0
  116. package/dist/autopilot/cli/pause.d.ts.map +1 -0
  117. package/dist/autopilot/cli/pause.js +110 -0
  118. package/dist/autopilot/cli/pause.js.map +1 -0
  119. package/dist/autopilot/cli/resume.d.ts +22 -0
  120. package/dist/autopilot/cli/resume.d.ts.map +1 -0
  121. package/dist/autopilot/cli/resume.js +172 -0
  122. package/dist/autopilot/cli/resume.js.map +1 -0
  123. package/dist/autopilot/cli/run.d.ts +25 -0
  124. package/dist/autopilot/cli/run.d.ts.map +1 -0
  125. package/dist/autopilot/cli/run.js +220 -0
  126. package/dist/autopilot/cli/run.js.map +1 -0
  127. package/dist/autopilot/cli/status.d.ts +20 -0
  128. package/dist/autopilot/cli/status.d.ts.map +1 -0
  129. package/dist/autopilot/cli/status.js +217 -0
  130. package/dist/autopilot/cli/status.js.map +1 -0
  131. package/dist/autopilot/config.d.ts +45 -0
  132. package/dist/autopilot/config.d.ts.map +1 -0
  133. package/dist/autopilot/config.js +269 -0
  134. package/dist/autopilot/config.js.map +1 -0
  135. package/dist/autopilot/core/dependency-resolver.d.ts +108 -0
  136. package/dist/autopilot/core/dependency-resolver.d.ts.map +1 -0
  137. package/dist/autopilot/core/dependency-resolver.js +394 -0
  138. package/dist/autopilot/core/dependency-resolver.js.map +1 -0
  139. package/dist/autopilot/core/dispatcher.d.ts +215 -0
  140. package/dist/autopilot/core/dispatcher.d.ts.map +1 -0
  141. package/dist/autopilot/core/dispatcher.js +594 -0
  142. package/dist/autopilot/core/dispatcher.js.map +1 -0
  143. package/dist/autopilot/core/failure-handler.d.ts +145 -0
  144. package/dist/autopilot/core/failure-handler.d.ts.map +1 -0
  145. package/dist/autopilot/core/failure-handler.js +308 -0
  146. package/dist/autopilot/core/failure-handler.js.map +1 -0
  147. package/dist/autopilot/core/rate-limit-handler.d.ts +108 -0
  148. package/dist/autopilot/core/rate-limit-handler.d.ts.map +1 -0
  149. package/dist/autopilot/core/rate-limit-handler.js +195 -0
  150. package/dist/autopilot/core/rate-limit-handler.js.map +1 -0
  151. package/dist/autopilot/core/state-manager.d.ts +160 -0
  152. package/dist/autopilot/core/state-manager.d.ts.map +1 -0
  153. package/dist/autopilot/core/state-manager.js +393 -0
  154. package/dist/autopilot/core/state-manager.js.map +1 -0
  155. package/dist/autopilot/core/timeout-manager.d.ts +95 -0
  156. package/dist/autopilot/core/timeout-manager.d.ts.map +1 -0
  157. package/dist/autopilot/core/timeout-manager.js +188 -0
  158. package/dist/autopilot/core/timeout-manager.js.map +1 -0
  159. package/dist/autopilot/git/branch-manager.d.ts +117 -0
  160. package/dist/autopilot/git/branch-manager.d.ts.map +1 -0
  161. package/dist/autopilot/git/branch-manager.js +238 -0
  162. package/dist/autopilot/git/branch-manager.js.map +1 -0
  163. package/dist/autopilot/git/index.d.ts +9 -0
  164. package/dist/autopilot/git/index.d.ts.map +1 -0
  165. package/dist/autopilot/git/index.js +9 -0
  166. package/dist/autopilot/git/index.js.map +1 -0
  167. package/dist/autopilot/git/merge-manager.d.ts +118 -0
  168. package/dist/autopilot/git/merge-manager.d.ts.map +1 -0
  169. package/dist/autopilot/git/merge-manager.js +304 -0
  170. package/dist/autopilot/git/merge-manager.js.map +1 -0
  171. package/dist/autopilot/git/worktree-manager.d.ts +128 -0
  172. package/dist/autopilot/git/worktree-manager.d.ts.map +1 -0
  173. package/dist/autopilot/git/worktree-manager.js +298 -0
  174. package/dist/autopilot/git/worktree-manager.js.map +1 -0
  175. package/dist/autopilot/index.d.ts +30 -0
  176. package/dist/autopilot/index.d.ts.map +1 -0
  177. package/dist/autopilot/index.js +55 -0
  178. package/dist/autopilot/index.js.map +1 -0
  179. package/dist/autopilot/sync/index.d.ts +7 -0
  180. package/dist/autopilot/sync/index.d.ts.map +1 -0
  181. package/dist/autopilot/sync/index.js +7 -0
  182. package/dist/autopilot/sync/index.js.map +1 -0
  183. package/dist/autopilot/sync/sync-manager.d.ts +168 -0
  184. package/dist/autopilot/sync/sync-manager.d.ts.map +1 -0
  185. package/dist/autopilot/sync/sync-manager.js +303 -0
  186. package/dist/autopilot/sync/sync-manager.js.map +1 -0
  187. package/dist/autopilot/types.d.ts +454 -0
  188. package/dist/autopilot/types.d.ts.map +1 -0
  189. package/dist/autopilot/types.js +26 -0
  190. package/dist/autopilot/types.js.map +1 -0
  191. package/dist/autopilot/utils/audit-logger.d.ts +176 -0
  192. package/dist/autopilot/utils/audit-logger.d.ts.map +1 -0
  193. package/dist/autopilot/utils/audit-logger.js +308 -0
  194. package/dist/autopilot/utils/audit-logger.js.map +1 -0
  195. package/dist/autopilot/utils/cost-tracker.d.ts +162 -0
  196. package/dist/autopilot/utils/cost-tracker.d.ts.map +1 -0
  197. package/dist/autopilot/utils/cost-tracker.js +269 -0
  198. package/dist/autopilot/utils/cost-tracker.js.map +1 -0
  199. package/dist/autopilot/utils/index.d.ts +9 -0
  200. package/dist/autopilot/utils/index.d.ts.map +1 -0
  201. package/dist/autopilot/utils/index.js +9 -0
  202. package/dist/autopilot/utils/index.js.map +1 -0
  203. package/dist/autopilot/utils/progress-reporter.d.ts +132 -0
  204. package/dist/autopilot/utils/progress-reporter.d.ts.map +1 -0
  205. package/dist/autopilot/utils/progress-reporter.js +290 -0
  206. package/dist/autopilot/utils/progress-reporter.js.map +1 -0
  207. package/dist/autopilot/worker/worker-pool.d.ts +179 -0
  208. package/dist/autopilot/worker/worker-pool.d.ts.map +1 -0
  209. package/dist/autopilot/worker/worker-pool.js +331 -0
  210. package/dist/autopilot/worker/worker-pool.js.map +1 -0
  211. package/dist/autopilot/worker/worker-session.d.ts +171 -0
  212. package/dist/autopilot/worker/worker-session.d.ts.map +1 -0
  213. package/dist/autopilot/worker/worker-session.js +295 -0
  214. package/dist/autopilot/worker/worker-session.js.map +1 -0
  215. package/dist/cli/index.d.ts +1 -1
  216. package/dist/cli/index.d.ts.map +1 -1
  217. package/dist/cli/index.js +4 -1
  218. package/dist/cli/index.js.map +1 -1
  219. package/dist/index.js +0 -1
  220. package/dist/index.js.map +1 -1
  221. package/dist/tools/core/epic.js +1 -1
  222. package/dist/tools/core/epic.js.map +1 -1
  223. package/dist/tools/core/lookup.d.ts.map +1 -1
  224. package/dist/tools/core/lookup.js +3 -2
  225. package/dist/tools/core/lookup.js.map +1 -1
  226. package/dist/tools/core/specification.js +1 -1
  227. package/dist/tools/core/specification.js.map +1 -1
  228. package/dist/tools/core/ticket.d.ts.map +1 -1
  229. package/dist/tools/core/ticket.js +4 -6
  230. package/dist/tools/core/ticket.js.map +1 -1
  231. package/dist/tools/index.d.ts.map +1 -1
  232. package/dist/tools/index.js +60 -0
  233. package/dist/tools/index.js.map +1 -1
  234. package/dist/validation/index.d.ts.map +1 -1
  235. package/dist/validation/index.js +4 -1
  236. package/dist/validation/index.js.map +1 -1
  237. package/package.json +8 -4
@@ -0,0 +1,304 @@
1
+ /**
2
+ * Merge Manager
3
+ *
4
+ * Handles squash merging for autopilot branches.
5
+ */
6
+ import { exec } from 'child_process';
7
+ import { promisify } from 'util';
8
+ import { EventEmitter } from 'events';
9
+ import { createBranchManager } from './branch-manager.js';
10
+ const execAsync = promisify(exec);
11
+ /**
12
+ * Merge Manager
13
+ *
14
+ * Handles squash merging of worker branches to epic branches,
15
+ * and epic branches to the base branch.
16
+ */
17
+ export class MergeManager extends EventEmitter {
18
+ workingDirectory;
19
+ branchManager;
20
+ constructor(options) {
21
+ super();
22
+ this.workingDirectory = options.workingDirectory;
23
+ this.branchManager = createBranchManager({
24
+ workingDirectory: options.workingDirectory,
25
+ branchPrefix: options.branchPrefix,
26
+ });
27
+ }
28
+ /**
29
+ * Squash merge a branch into another
30
+ */
31
+ async squashMerge(sourceBranch, targetBranch, commitMessage) {
32
+ this.emit('merge:started', { sourceBranch, targetBranch });
33
+ try {
34
+ // Store current branch to restore later
35
+ const originalBranch = await this.branchManager.getCurrentBranch();
36
+ // Checkout target branch
37
+ await execAsync(`git checkout ${targetBranch}`, {
38
+ cwd: this.workingDirectory,
39
+ });
40
+ // Perform squash merge
41
+ try {
42
+ await execAsync(`git merge --squash ${sourceBranch}`, {
43
+ cwd: this.workingDirectory,
44
+ });
45
+ }
46
+ catch (mergeError) {
47
+ // Check for conflicts
48
+ const conflictFiles = await this.getConflictFiles();
49
+ if (conflictFiles.length > 0) {
50
+ this.emit('merge:conflict', { sourceBranch, targetBranch, files: conflictFiles });
51
+ // Abort the merge
52
+ await this.abortMerge();
53
+ await this.checkoutBranch(originalBranch);
54
+ return {
55
+ success: false,
56
+ sourceBranch,
57
+ targetBranch,
58
+ error: 'Merge conflicts detected',
59
+ conflictFiles,
60
+ };
61
+ }
62
+ throw mergeError;
63
+ }
64
+ // Check if there are changes to commit
65
+ const hasChanges = await this.hasChangesToCommit();
66
+ if (!hasChanges) {
67
+ // Nothing to merge
68
+ await this.checkoutBranch(originalBranch);
69
+ return {
70
+ success: true,
71
+ sourceBranch,
72
+ targetBranch,
73
+ error: 'No changes to merge',
74
+ };
75
+ }
76
+ // Create the squash commit
77
+ const escapedMessage = commitMessage.replace(/"/g, '\\"');
78
+ await execAsync(`git commit -m "${escapedMessage}"`, {
79
+ cwd: this.workingDirectory,
80
+ });
81
+ // Get the commit hash
82
+ const commitHash = await this.branchManager.getLatestCommit();
83
+ // Restore original branch
84
+ await this.checkoutBranch(originalBranch);
85
+ const result = {
86
+ success: true,
87
+ sourceBranch,
88
+ targetBranch,
89
+ commitHash,
90
+ };
91
+ this.emit('merge:completed', { result });
92
+ return result;
93
+ }
94
+ catch (error) {
95
+ const errorMessage = error.message;
96
+ // Try to clean up
97
+ try {
98
+ await this.abortMerge();
99
+ }
100
+ catch {
101
+ // Ignore abort errors
102
+ }
103
+ const result = {
104
+ success: false,
105
+ sourceBranch,
106
+ targetBranch,
107
+ error: errorMessage,
108
+ };
109
+ this.emit('merge:completed', { result });
110
+ return result;
111
+ }
112
+ }
113
+ /**
114
+ * Merge worker branch to epic branch
115
+ */
116
+ async mergeWorkerToEpic(workerId, epicNumber, ticketTitle) {
117
+ const sourceBranch = this.branchManager.getWorkerBranchName(workerId);
118
+ const targetBranch = this.branchManager.getEpicBranchName(epicNumber);
119
+ const commitMessage = `feat: ${ticketTitle}\n\nMerged from worker ${workerId}`;
120
+ return this.squashMerge(sourceBranch, targetBranch, commitMessage);
121
+ }
122
+ /**
123
+ * Merge epic branch to base branch
124
+ */
125
+ async mergeEpicToBase(epicNumber, epicTitle, baseBranch) {
126
+ const sourceBranch = this.branchManager.getEpicBranchName(epicNumber);
127
+ const targetBranch = baseBranch || await this.branchManager.getBaseBranch();
128
+ const commitMessage = `feat: Epic ${epicNumber} - ${epicTitle}\n\nImplemented by SpecForge Autopilot`;
129
+ return this.squashMerge(sourceBranch, targetBranch, commitMessage);
130
+ }
131
+ /**
132
+ * Reset worker branch to epic branch
133
+ */
134
+ async resetWorkerToEpic(workerId, epicNumber) {
135
+ const workerBranch = this.branchManager.getWorkerBranchName(workerId);
136
+ const epicBranch = this.branchManager.getEpicBranchName(epicNumber);
137
+ // Reset worker branch to epic branch
138
+ await execAsync(`git branch -f ${workerBranch} ${epicBranch}`, {
139
+ cwd: this.workingDirectory,
140
+ });
141
+ }
142
+ /**
143
+ * Check if there are changes to commit
144
+ */
145
+ async hasChangesToCommit() {
146
+ try {
147
+ const { stdout } = await execAsync('git diff --staged --name-only', {
148
+ cwd: this.workingDirectory,
149
+ });
150
+ return stdout.trim().length > 0;
151
+ }
152
+ catch {
153
+ return false;
154
+ }
155
+ }
156
+ /**
157
+ * Get conflict files
158
+ */
159
+ async getConflictFiles() {
160
+ try {
161
+ const { stdout } = await execAsync('git diff --name-only --diff-filter=U', {
162
+ cwd: this.workingDirectory,
163
+ });
164
+ return stdout.split('\n').filter(f => f.trim().length > 0);
165
+ }
166
+ catch {
167
+ return [];
168
+ }
169
+ }
170
+ /**
171
+ * Abort current merge
172
+ */
173
+ async abortMerge() {
174
+ try {
175
+ await execAsync('git merge --abort', {
176
+ cwd: this.workingDirectory,
177
+ });
178
+ }
179
+ catch {
180
+ // Reset to clean state
181
+ await execAsync('git reset --hard HEAD', {
182
+ cwd: this.workingDirectory,
183
+ });
184
+ }
185
+ }
186
+ /**
187
+ * Checkout a branch
188
+ */
189
+ async checkoutBranch(branchName) {
190
+ await execAsync(`git checkout ${branchName}`, {
191
+ cwd: this.workingDirectory,
192
+ });
193
+ }
194
+ /**
195
+ * Cherry-pick a commit
196
+ */
197
+ async cherryPick(commitHash, targetBranch) {
198
+ const originalBranch = await this.branchManager.getCurrentBranch();
199
+ try {
200
+ await this.checkoutBranch(targetBranch);
201
+ await execAsync(`git cherry-pick ${commitHash}`, {
202
+ cwd: this.workingDirectory,
203
+ });
204
+ const newCommitHash = await this.branchManager.getLatestCommit();
205
+ await this.checkoutBranch(originalBranch);
206
+ return {
207
+ success: true,
208
+ sourceBranch: commitHash,
209
+ targetBranch,
210
+ commitHash: newCommitHash,
211
+ };
212
+ }
213
+ catch (error) {
214
+ // Abort cherry-pick on failure
215
+ try {
216
+ await execAsync('git cherry-pick --abort', {
217
+ cwd: this.workingDirectory,
218
+ });
219
+ }
220
+ catch {
221
+ // Ignore
222
+ }
223
+ await this.checkoutBranch(originalBranch);
224
+ return {
225
+ success: false,
226
+ sourceBranch: commitHash,
227
+ targetBranch,
228
+ error: error.message,
229
+ };
230
+ }
231
+ }
232
+ /**
233
+ * Rebase a branch onto another
234
+ */
235
+ async rebaseBranch(branchToRebase, ontoBranch) {
236
+ const originalBranch = await this.branchManager.getCurrentBranch();
237
+ try {
238
+ await this.checkoutBranch(branchToRebase);
239
+ await execAsync(`git rebase ${ontoBranch}`, {
240
+ cwd: this.workingDirectory,
241
+ });
242
+ const commitHash = await this.branchManager.getLatestCommit();
243
+ await this.checkoutBranch(originalBranch);
244
+ return {
245
+ success: true,
246
+ sourceBranch: branchToRebase,
247
+ targetBranch: ontoBranch,
248
+ commitHash,
249
+ };
250
+ }
251
+ catch (error) {
252
+ // Abort rebase on failure
253
+ try {
254
+ await execAsync('git rebase --abort', {
255
+ cwd: this.workingDirectory,
256
+ });
257
+ }
258
+ catch {
259
+ // Ignore
260
+ }
261
+ await this.checkoutBranch(originalBranch);
262
+ return {
263
+ success: false,
264
+ sourceBranch: branchToRebase,
265
+ targetBranch: ontoBranch,
266
+ error: error.message,
267
+ };
268
+ }
269
+ }
270
+ /**
271
+ * Update epic branch from base
272
+ */
273
+ async updateEpicFromBase(epicNumber, baseBranch) {
274
+ const epicBranch = this.branchManager.getEpicBranchName(epicNumber);
275
+ const base = baseBranch || await this.branchManager.getBaseBranch();
276
+ return this.rebaseBranch(epicBranch, base);
277
+ }
278
+ /**
279
+ * Get branch manager
280
+ */
281
+ getBranchManager() {
282
+ return this.branchManager;
283
+ }
284
+ /**
285
+ * Set working directory
286
+ */
287
+ setWorkingDirectory(dir) {
288
+ this.workingDirectory = dir;
289
+ this.branchManager.setWorkingDirectory(dir);
290
+ }
291
+ /**
292
+ * Get working directory
293
+ */
294
+ getWorkingDirectory() {
295
+ return this.workingDirectory;
296
+ }
297
+ }
298
+ /**
299
+ * Create a merge manager
300
+ */
301
+ export function createMergeManager(options) {
302
+ return new MergeManager(options);
303
+ }
304
+ //# sourceMappingURL=merge-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge-manager.js","sourceRoot":"","sources":["../../../src/autopilot/git/merge-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,128 @@
1
+ /**
2
+ * Worktree Manager
3
+ *
4
+ * Manages git worktrees for parallel autopilot workers.
5
+ */
6
+ import { EventEmitter } from 'events';
7
+ import { BranchManager } from './branch-manager.js';
8
+ /**
9
+ * Worktree info
10
+ */
11
+ export interface WorktreeInfo {
12
+ path: string;
13
+ branch: string;
14
+ head: string;
15
+ isLocked: boolean;
16
+ isPrunable: boolean;
17
+ }
18
+ /**
19
+ * Worktree Manager Options
20
+ */
21
+ export interface WorktreeManagerOptions {
22
+ workingDirectory: string;
23
+ worktreeBaseDir?: string;
24
+ branchPrefix?: string;
25
+ }
26
+ /**
27
+ * Worktree Manager Events
28
+ */
29
+ export interface WorktreeManagerEvents {
30
+ 'worktree:created': {
31
+ workerId: number;
32
+ path: string;
33
+ branch: string;
34
+ };
35
+ 'worktree:removed': {
36
+ workerId: number;
37
+ path: string;
38
+ };
39
+ 'worktree:error': {
40
+ workerId: number;
41
+ error: string;
42
+ };
43
+ }
44
+ /**
45
+ * Worktree Manager
46
+ *
47
+ * Creates and manages git worktrees for parallel worker execution.
48
+ */
49
+ export declare class WorktreeManager extends EventEmitter {
50
+ private workingDirectory;
51
+ private worktreeBaseDir;
52
+ private branchManager;
53
+ private workerPaths;
54
+ constructor(options: WorktreeManagerOptions);
55
+ /**
56
+ * Initialize the worktree base directory
57
+ */
58
+ initialize(): Promise<void>;
59
+ /**
60
+ * Ensure .worktrees is in .gitignore
61
+ */
62
+ private ensureGitignore;
63
+ /**
64
+ * Create a worktree for a worker
65
+ */
66
+ createWorkerWorktree(workerId: number, baseBranch?: string): Promise<string>;
67
+ /**
68
+ * Remove a worker's worktree
69
+ */
70
+ removeWorkerWorktree(workerId: number): Promise<void>;
71
+ /**
72
+ * Get worktree path for a worker
73
+ */
74
+ getWorkerPath(workerId: number): string;
75
+ /**
76
+ * List all git worktrees
77
+ */
78
+ listWorktrees(): Promise<WorktreeInfo[]>;
79
+ /**
80
+ * Get worktree for a specific worker
81
+ */
82
+ getWorkerWorktree(workerId: number): Promise<WorktreeInfo | undefined>;
83
+ /**
84
+ * Prune stale worktrees
85
+ */
86
+ pruneWorktrees(): Promise<void>;
87
+ /**
88
+ * Cleanup all worker worktrees
89
+ */
90
+ cleanupAllWorktrees(): Promise<void>;
91
+ /**
92
+ * Get number of active worktrees
93
+ */
94
+ getActiveWorktreeCount(): number;
95
+ /**
96
+ * Check if a path exists
97
+ */
98
+ private pathExists;
99
+ /**
100
+ * Lock a worktree
101
+ */
102
+ lockWorktree(workerId: number, reason?: string): Promise<void>;
103
+ /**
104
+ * Unlock a worktree
105
+ */
106
+ unlockWorktree(workerId: number): Promise<void>;
107
+ /**
108
+ * Move a worktree to a new location
109
+ */
110
+ moveWorktree(workerId: number, newPath: string): Promise<void>;
111
+ /**
112
+ * Get the branch manager
113
+ */
114
+ getBranchManager(): BranchManager;
115
+ /**
116
+ * Get worktree base directory
117
+ */
118
+ getWorktreeBaseDir(): string;
119
+ /**
120
+ * Get working directory
121
+ */
122
+ getWorkingDirectory(): string;
123
+ }
124
+ /**
125
+ * Create a worktree manager
126
+ */
127
+ export declare function createWorktreeManager(options: WorktreeManagerOptions): WorktreeManager;
128
+ //# sourceMappingURL=worktree-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worktree-manager.d.ts","sourceRoot":"","sources":["../../../src/autopilot/git/worktree-manager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,aAAa,EAAuB,MAAM,qBAAqB,CAAC;AAIzE;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,kBAAkB,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACvE,kBAAkB,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACvD,gBAAgB,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CACvD;AAED;;;;GAIG;AACH,qBAAa,eAAgB,SAAQ,YAAY;IAC/C,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,WAAW,CAAkC;gBAEzC,OAAO,EAAE,sBAAsB;IAU3C;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAOjC;;OAEG;YACW,eAAe;IAuB7B;;OAEG;IACG,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA6ClF;;OAEG;IACG,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgC3D;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAIvC;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAwC9C;;OAEG;IACG,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;IAM5E;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAMrC;;OAEG;IACG,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAuB1C;;OAEG;IACH,sBAAsB,IAAI,MAAM;IAIhC;;OAEG;YACW,UAAU;IASxB;;OAEG;IACG,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQpE;;OAEG;IACG,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOrD;;OAEG;IACG,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQpE;;OAEG;IACH,gBAAgB,IAAI,aAAa;IAIjC;;OAEG;IACH,kBAAkB,IAAI,MAAM;IAI5B;;OAEG;IACH,mBAAmB,IAAI,MAAM;CAG9B;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,sBAAsB,GAAG,eAAe,CAEtF"}