@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.
- package/README.md +73 -0
- package/bin/{specforge-mcp → specforge} +0 -5
- package/dist/ai-provider/circuit-breaker.d.ts +63 -0
- package/dist/ai-provider/circuit-breaker.d.ts.map +1 -0
- package/dist/ai-provider/circuit-breaker.js +160 -0
- package/dist/ai-provider/circuit-breaker.js.map +1 -0
- package/dist/ai-provider/cli-version.d.ts +50 -0
- package/dist/ai-provider/cli-version.d.ts.map +1 -0
- package/dist/ai-provider/cli-version.js +141 -0
- package/dist/ai-provider/cli-version.js.map +1 -0
- package/dist/ai-provider/config-loader.d.ts +45 -0
- package/dist/ai-provider/config-loader.d.ts.map +1 -0
- package/dist/ai-provider/config-loader.js +106 -0
- package/dist/ai-provider/config-loader.js.map +1 -0
- package/dist/ai-provider/errors.d.ts +48 -0
- package/dist/ai-provider/errors.d.ts.map +1 -0
- package/dist/ai-provider/errors.js +102 -0
- package/dist/ai-provider/errors.js.map +1 -0
- package/dist/ai-provider/events.d.ts +73 -0
- package/dist/ai-provider/events.d.ts.map +1 -0
- package/dist/ai-provider/events.js +75 -0
- package/dist/ai-provider/events.js.map +1 -0
- package/dist/ai-provider/factory.d.ts +31 -0
- package/dist/ai-provider/factory.d.ts.map +1 -0
- package/dist/ai-provider/factory.js +100 -0
- package/dist/ai-provider/factory.js.map +1 -0
- package/dist/ai-provider/index.d.ts +24 -0
- package/dist/ai-provider/index.d.ts.map +1 -0
- package/dist/ai-provider/index.js +46 -0
- package/dist/ai-provider/index.js.map +1 -0
- package/dist/ai-provider/instance-coordinator.d.ts +54 -0
- package/dist/ai-provider/instance-coordinator.d.ts.map +1 -0
- package/dist/ai-provider/instance-coordinator.js +199 -0
- package/dist/ai-provider/instance-coordinator.js.map +1 -0
- package/dist/ai-provider/jsonl-parser.d.ts +43 -0
- package/dist/ai-provider/jsonl-parser.d.ts.map +1 -0
- package/dist/ai-provider/jsonl-parser.js +107 -0
- package/dist/ai-provider/jsonl-parser.js.map +1 -0
- package/dist/ai-provider/lifecycle.d.ts +50 -0
- package/dist/ai-provider/lifecycle.d.ts.map +1 -0
- package/dist/ai-provider/lifecycle.js +145 -0
- package/dist/ai-provider/lifecycle.js.map +1 -0
- package/dist/ai-provider/logger.d.ts +69 -0
- package/dist/ai-provider/logger.d.ts.map +1 -0
- package/dist/ai-provider/logger.js +161 -0
- package/dist/ai-provider/logger.js.map +1 -0
- package/dist/ai-provider/metrics.d.ts +91 -0
- package/dist/ai-provider/metrics.d.ts.map +1 -0
- package/dist/ai-provider/metrics.js +187 -0
- package/dist/ai-provider/metrics.js.map +1 -0
- package/dist/ai-provider/process-manager.d.ts +97 -0
- package/dist/ai-provider/process-manager.d.ts.map +1 -0
- package/dist/ai-provider/process-manager.js +477 -0
- package/dist/ai-provider/process-manager.js.map +1 -0
- package/dist/ai-provider/providers/claude-code.d.ts +64 -0
- package/dist/ai-provider/providers/claude-code.d.ts.map +1 -0
- package/dist/ai-provider/providers/claude-code.js +205 -0
- package/dist/ai-provider/providers/claude-code.js.map +1 -0
- package/dist/ai-provider/retry-executor.d.ts +52 -0
- package/dist/ai-provider/retry-executor.d.ts.map +1 -0
- package/dist/ai-provider/retry-executor.js +138 -0
- package/dist/ai-provider/retry-executor.js.map +1 -0
- package/dist/ai-provider/safe-args.d.ts +58 -0
- package/dist/ai-provider/safe-args.d.ts.map +1 -0
- package/dist/ai-provider/safe-args.js +176 -0
- package/dist/ai-provider/safe-args.js.map +1 -0
- package/dist/ai-provider/semaphore.d.ts +50 -0
- package/dist/ai-provider/semaphore.d.ts.map +1 -0
- package/dist/ai-provider/semaphore.js +97 -0
- package/dist/ai-provider/semaphore.js.map +1 -0
- package/dist/ai-provider/tracer.d.ts +67 -0
- package/dist/ai-provider/tracer.d.ts.map +1 -0
- package/dist/ai-provider/tracer.js +209 -0
- package/dist/ai-provider/tracer.js.map +1 -0
- package/dist/ai-provider/types.d.ts +181 -0
- package/dist/ai-provider/types.d.ts.map +1 -0
- package/dist/ai-provider/types.js +8 -0
- package/dist/ai-provider/types.js.map +1 -0
- package/dist/autopilot/agents/agent-runner.d.ts +109 -0
- package/dist/autopilot/agents/agent-runner.d.ts.map +1 -0
- package/dist/autopilot/agents/agent-runner.js +731 -0
- package/dist/autopilot/agents/agent-runner.js.map +1 -0
- package/dist/autopilot/agents/agent-selector.d.ts +59 -0
- package/dist/autopilot/agents/agent-selector.d.ts.map +1 -0
- package/dist/autopilot/agents/agent-selector.js +234 -0
- package/dist/autopilot/agents/agent-selector.js.map +1 -0
- package/dist/autopilot/agents/model-selector.d.ts +49 -0
- package/dist/autopilot/agents/model-selector.d.ts.map +1 -0
- package/dist/autopilot/agents/model-selector.js +62 -0
- package/dist/autopilot/agents/model-selector.js.map +1 -0
- package/dist/autopilot/agents/profiles/builtin.d.ts +55 -0
- package/dist/autopilot/agents/profiles/builtin.d.ts.map +1 -0
- package/dist/autopilot/agents/profiles/builtin.js +323 -0
- package/dist/autopilot/agents/profiles/builtin.js.map +1 -0
- package/dist/autopilot/agents/profiles/types.d.ts +98 -0
- package/dist/autopilot/agents/profiles/types.d.ts.map +1 -0
- package/dist/autopilot/agents/profiles/types.js +17 -0
- package/dist/autopilot/agents/profiles/types.js.map +1 -0
- package/dist/autopilot/api/autopilot-api-client.d.ts +217 -0
- package/dist/autopilot/api/autopilot-api-client.d.ts.map +1 -0
- package/dist/autopilot/api/autopilot-api-client.js +402 -0
- package/dist/autopilot/api/autopilot-api-client.js.map +1 -0
- package/dist/autopilot/cli/abort.d.ts +20 -0
- package/dist/autopilot/cli/abort.d.ts.map +1 -0
- package/dist/autopilot/cli/abort.js +201 -0
- package/dist/autopilot/cli/abort.js.map +1 -0
- package/dist/autopilot/cli/display.d.ts +63 -0
- package/dist/autopilot/cli/display.d.ts.map +1 -0
- package/dist/autopilot/cli/display.js +260 -0
- package/dist/autopilot/cli/display.js.map +1 -0
- package/dist/autopilot/cli/index.d.ts +24 -0
- package/dist/autopilot/cli/index.d.ts.map +1 -0
- package/dist/autopilot/cli/index.js +79 -0
- package/dist/autopilot/cli/index.js.map +1 -0
- package/dist/autopilot/cli/pause.d.ts +18 -0
- package/dist/autopilot/cli/pause.d.ts.map +1 -0
- package/dist/autopilot/cli/pause.js +110 -0
- package/dist/autopilot/cli/pause.js.map +1 -0
- package/dist/autopilot/cli/resume.d.ts +22 -0
- package/dist/autopilot/cli/resume.d.ts.map +1 -0
- package/dist/autopilot/cli/resume.js +172 -0
- package/dist/autopilot/cli/resume.js.map +1 -0
- package/dist/autopilot/cli/run.d.ts +25 -0
- package/dist/autopilot/cli/run.d.ts.map +1 -0
- package/dist/autopilot/cli/run.js +220 -0
- package/dist/autopilot/cli/run.js.map +1 -0
- package/dist/autopilot/cli/status.d.ts +20 -0
- package/dist/autopilot/cli/status.d.ts.map +1 -0
- package/dist/autopilot/cli/status.js +217 -0
- package/dist/autopilot/cli/status.js.map +1 -0
- package/dist/autopilot/config.d.ts +45 -0
- package/dist/autopilot/config.d.ts.map +1 -0
- package/dist/autopilot/config.js +269 -0
- package/dist/autopilot/config.js.map +1 -0
- package/dist/autopilot/core/dependency-resolver.d.ts +108 -0
- package/dist/autopilot/core/dependency-resolver.d.ts.map +1 -0
- package/dist/autopilot/core/dependency-resolver.js +394 -0
- package/dist/autopilot/core/dependency-resolver.js.map +1 -0
- package/dist/autopilot/core/dispatcher.d.ts +215 -0
- package/dist/autopilot/core/dispatcher.d.ts.map +1 -0
- package/dist/autopilot/core/dispatcher.js +594 -0
- package/dist/autopilot/core/dispatcher.js.map +1 -0
- package/dist/autopilot/core/failure-handler.d.ts +145 -0
- package/dist/autopilot/core/failure-handler.d.ts.map +1 -0
- package/dist/autopilot/core/failure-handler.js +308 -0
- package/dist/autopilot/core/failure-handler.js.map +1 -0
- package/dist/autopilot/core/rate-limit-handler.d.ts +108 -0
- package/dist/autopilot/core/rate-limit-handler.d.ts.map +1 -0
- package/dist/autopilot/core/rate-limit-handler.js +195 -0
- package/dist/autopilot/core/rate-limit-handler.js.map +1 -0
- package/dist/autopilot/core/state-manager.d.ts +160 -0
- package/dist/autopilot/core/state-manager.d.ts.map +1 -0
- package/dist/autopilot/core/state-manager.js +393 -0
- package/dist/autopilot/core/state-manager.js.map +1 -0
- package/dist/autopilot/core/timeout-manager.d.ts +95 -0
- package/dist/autopilot/core/timeout-manager.d.ts.map +1 -0
- package/dist/autopilot/core/timeout-manager.js +188 -0
- package/dist/autopilot/core/timeout-manager.js.map +1 -0
- package/dist/autopilot/git/branch-manager.d.ts +117 -0
- package/dist/autopilot/git/branch-manager.d.ts.map +1 -0
- package/dist/autopilot/git/branch-manager.js +238 -0
- package/dist/autopilot/git/branch-manager.js.map +1 -0
- package/dist/autopilot/git/index.d.ts +9 -0
- package/dist/autopilot/git/index.d.ts.map +1 -0
- package/dist/autopilot/git/index.js +9 -0
- package/dist/autopilot/git/index.js.map +1 -0
- package/dist/autopilot/git/merge-manager.d.ts +118 -0
- package/dist/autopilot/git/merge-manager.d.ts.map +1 -0
- package/dist/autopilot/git/merge-manager.js +304 -0
- package/dist/autopilot/git/merge-manager.js.map +1 -0
- package/dist/autopilot/git/worktree-manager.d.ts +128 -0
- package/dist/autopilot/git/worktree-manager.d.ts.map +1 -0
- package/dist/autopilot/git/worktree-manager.js +298 -0
- package/dist/autopilot/git/worktree-manager.js.map +1 -0
- package/dist/autopilot/index.d.ts +30 -0
- package/dist/autopilot/index.d.ts.map +1 -0
- package/dist/autopilot/index.js +55 -0
- package/dist/autopilot/index.js.map +1 -0
- package/dist/autopilot/sync/index.d.ts +7 -0
- package/dist/autopilot/sync/index.d.ts.map +1 -0
- package/dist/autopilot/sync/index.js +7 -0
- package/dist/autopilot/sync/index.js.map +1 -0
- package/dist/autopilot/sync/sync-manager.d.ts +168 -0
- package/dist/autopilot/sync/sync-manager.d.ts.map +1 -0
- package/dist/autopilot/sync/sync-manager.js +303 -0
- package/dist/autopilot/sync/sync-manager.js.map +1 -0
- package/dist/autopilot/types.d.ts +454 -0
- package/dist/autopilot/types.d.ts.map +1 -0
- package/dist/autopilot/types.js +26 -0
- package/dist/autopilot/types.js.map +1 -0
- package/dist/autopilot/utils/audit-logger.d.ts +176 -0
- package/dist/autopilot/utils/audit-logger.d.ts.map +1 -0
- package/dist/autopilot/utils/audit-logger.js +308 -0
- package/dist/autopilot/utils/audit-logger.js.map +1 -0
- package/dist/autopilot/utils/cost-tracker.d.ts +162 -0
- package/dist/autopilot/utils/cost-tracker.d.ts.map +1 -0
- package/dist/autopilot/utils/cost-tracker.js +269 -0
- package/dist/autopilot/utils/cost-tracker.js.map +1 -0
- package/dist/autopilot/utils/index.d.ts +9 -0
- package/dist/autopilot/utils/index.d.ts.map +1 -0
- package/dist/autopilot/utils/index.js +9 -0
- package/dist/autopilot/utils/index.js.map +1 -0
- package/dist/autopilot/utils/progress-reporter.d.ts +132 -0
- package/dist/autopilot/utils/progress-reporter.d.ts.map +1 -0
- package/dist/autopilot/utils/progress-reporter.js +290 -0
- package/dist/autopilot/utils/progress-reporter.js.map +1 -0
- package/dist/autopilot/worker/worker-pool.d.ts +179 -0
- package/dist/autopilot/worker/worker-pool.d.ts.map +1 -0
- package/dist/autopilot/worker/worker-pool.js +331 -0
- package/dist/autopilot/worker/worker-pool.js.map +1 -0
- package/dist/autopilot/worker/worker-session.d.ts +171 -0
- package/dist/autopilot/worker/worker-session.d.ts.map +1 -0
- package/dist/autopilot/worker/worker-session.js +295 -0
- package/dist/autopilot/worker/worker-session.js.map +1 -0
- package/dist/cli/index.d.ts +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +4 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/tools/core/epic.js +1 -1
- package/dist/tools/core/epic.js.map +1 -1
- package/dist/tools/core/lookup.d.ts.map +1 -1
- package/dist/tools/core/lookup.js +3 -2
- package/dist/tools/core/lookup.js.map +1 -1
- package/dist/tools/core/specification.js +1 -1
- package/dist/tools/core/specification.js.map +1 -1
- package/dist/tools/core/ticket.d.ts.map +1 -1
- package/dist/tools/core/ticket.js +4 -6
- package/dist/tools/core/ticket.js.map +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +60 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/validation/index.d.ts.map +1 -1
- package/dist/validation/index.js +4 -1
- package/dist/validation/index.js.map +1 -1
- 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"}
|