forge-cc 1.0.0 → 1.0.1
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/package.json +3 -2
- package/dist/gates/codex-gate.d.ts +0 -51
- package/dist/gates/codex-gate.js +0 -121
- package/dist/gates/codex-gate.js.map +0 -1
- package/dist/gates/prd-gate.d.ts +0 -7
- package/dist/gates/prd-gate.js +0 -193
- package/dist/gates/prd-gate.js.map +0 -1
- package/dist/gates/remediation.d.ts +0 -46
- package/dist/gates/remediation.js +0 -423
- package/dist/gates/remediation.js.map +0 -1
- package/dist/gates/review-gate.d.ts +0 -16
- package/dist/gates/review-gate.js +0 -479
- package/dist/gates/review-gate.js.map +0 -1
- package/dist/gates/runtime-gate.d.ts +0 -5
- package/dist/gates/runtime-gate.js +0 -99
- package/dist/gates/runtime-gate.js.map +0 -1
- package/dist/gates/test-analysis.d.ts +0 -21
- package/dist/gates/test-analysis.js +0 -394
- package/dist/gates/test-analysis.js.map +0 -1
- package/dist/gates/visual-capture.d.ts +0 -24
- package/dist/gates/visual-capture.js +0 -144
- package/dist/gates/visual-capture.js.map +0 -1
- package/dist/gates/visual-gate.d.ts +0 -18
- package/dist/gates/visual-gate.js +0 -234
- package/dist/gates/visual-gate.js.map +0 -1
- package/dist/gates/visual-reviewer.d.ts +0 -11
- package/dist/gates/visual-reviewer.js +0 -211
- package/dist/gates/visual-reviewer.js.map +0 -1
- package/dist/go/auto-chain.d.ts +0 -136
- package/dist/go/auto-chain.js +0 -389
- package/dist/go/auto-chain.js.map +0 -1
- package/dist/go/executor.d.ts +0 -137
- package/dist/go/executor.js +0 -447
- package/dist/go/executor.js.map +0 -1
- package/dist/go/finalize.d.ts +0 -108
- package/dist/go/finalize.js +0 -331
- package/dist/go/finalize.js.map +0 -1
- package/dist/go/linear-sync-cli.d.ts +0 -55
- package/dist/go/linear-sync-cli.js +0 -192
- package/dist/go/linear-sync-cli.js.map +0 -1
- package/dist/go/linear-sync.d.ts +0 -112
- package/dist/go/linear-sync.js +0 -375
- package/dist/go/linear-sync.js.map +0 -1
- package/dist/go/prd-queue.d.ts +0 -43
- package/dist/go/prd-queue.js +0 -67
- package/dist/go/prd-queue.js.map +0 -1
- package/dist/go/prd-selector.d.ts +0 -57
- package/dist/go/prd-selector.js +0 -101
- package/dist/go/prd-selector.js.map +0 -1
- package/dist/go/verify-loop.d.ts +0 -64
- package/dist/go/verify-loop.js +0 -327
- package/dist/go/verify-loop.js.map +0 -1
- package/dist/hooks/pre-commit.d.ts +0 -5
- package/dist/hooks/pre-commit.js +0 -75
- package/dist/hooks/pre-commit.js.map +0 -1
- package/dist/linear/issues.d.ts +0 -22
- package/dist/linear/issues.js +0 -51
- package/dist/linear/issues.js.map +0 -1
- package/dist/linear/milestones.d.ts +0 -11
- package/dist/linear/milestones.js +0 -32
- package/dist/linear/milestones.js.map +0 -1
- package/dist/linear/projects.d.ts +0 -16
- package/dist/linear/projects.js +0 -51
- package/dist/linear/projects.js.map +0 -1
- package/dist/reporter/human.d.ts +0 -7
- package/dist/reporter/human.js +0 -93
- package/dist/reporter/human.js.map +0 -1
- package/dist/reporter/json.d.ts +0 -2
- package/dist/reporter/json.js +0 -4
- package/dist/reporter/json.js.map +0 -1
- package/dist/setup/structural-templates.d.ts +0 -12
- package/dist/setup/structural-templates.js +0 -288
- package/dist/setup/structural-templates.js.map +0 -1
- package/dist/setup/templates.d.ts +0 -17
- package/dist/setup/templates.js +0 -109
- package/dist/setup/templates.js.map +0 -1
- package/dist/setup/test-planner.d.ts +0 -38
- package/dist/setup/test-planner.js +0 -91
- package/dist/setup/test-planner.js.map +0 -1
- package/dist/setup/test-scaffold.d.ts +0 -31
- package/dist/setup/test-scaffold.js +0 -209
- package/dist/setup/test-scaffold.js.map +0 -1
- package/dist/setup/test-templates.d.ts +0 -37
- package/dist/setup/test-templates.js +0 -313
- package/dist/setup/test-templates.js.map +0 -1
- package/dist/spec/generator.d.ts +0 -34
- package/dist/spec/generator.js +0 -227
- package/dist/spec/generator.js.map +0 -1
- package/dist/spec/interview.d.ts +0 -142
- package/dist/spec/interview.js +0 -287
- package/dist/spec/interview.js.map +0 -1
- package/dist/spec/linear-sync.d.ts +0 -48
- package/dist/spec/linear-sync.js +0 -125
- package/dist/spec/linear-sync.js.map +0 -1
- package/dist/spec/scanner.d.ts +0 -79
- package/dist/spec/scanner.js +0 -566
- package/dist/spec/scanner.js.map +0 -1
- package/dist/spec/templates.d.ts +0 -375
- package/dist/spec/templates.js +0 -95
- package/dist/spec/templates.js.map +0 -1
- package/dist/state/prd-status.d.ts +0 -62
- package/dist/state/prd-status.js +0 -122
- package/dist/state/prd-status.js.map +0 -1
- package/dist/state/reader.d.ts +0 -7
- package/dist/state/reader.js +0 -43
- package/dist/state/reader.js.map +0 -1
- package/dist/state/writer.d.ts +0 -21
- package/dist/state/writer.js +0 -106
- package/dist/state/writer.js.map +0 -1
- package/dist/team/consensus.d.ts +0 -28
- package/dist/team/consensus.js +0 -130
- package/dist/team/consensus.js.map +0 -1
- package/dist/team/index.d.ts +0 -4
- package/dist/team/index.js +0 -5
- package/dist/team/index.js.map +0 -1
- package/dist/team/lifecycle.d.ts +0 -37
- package/dist/team/lifecycle.js +0 -92
- package/dist/team/lifecycle.js.map +0 -1
- package/dist/team/reviewer.d.ts +0 -10
- package/dist/team/reviewer.js +0 -345
- package/dist/team/reviewer.js.map +0 -1
- package/dist/team/types.d.ts +0 -269
- package/dist/team/types.js +0 -70
- package/dist/team/types.js.map +0 -1
- package/dist/utils/browser.d.ts +0 -10
- package/dist/utils/browser.js +0 -96
- package/dist/utils/browser.js.map +0 -1
- package/dist/utils/platform.d.ts +0 -29
- package/dist/utils/platform.js +0 -90
- package/dist/utils/platform.js.map +0 -1
- package/dist/worktree/identity.d.ts +0 -9
- package/dist/worktree/identity.js +0 -32
- package/dist/worktree/identity.js.map +0 -1
- package/dist/worktree/parallel.d.ts +0 -87
- package/dist/worktree/parallel.js +0 -328
- package/dist/worktree/parallel.js.map +0 -1
- package/dist/worktree/session.d.ts +0 -67
- package/dist/worktree/session.js +0 -194
- package/dist/worktree/session.js.map +0 -1
- package/dist/worktree/state-merge.d.ts +0 -43
- package/dist/worktree/state-merge.js +0 -162
- package/dist/worktree/state-merge.js.map +0 -1
package/dist/go/auto-chain.js
DELETED
|
@@ -1,389 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Auto-Chain — Multi-Milestone Execution Orchestrator
|
|
3
|
-
*
|
|
4
|
-
* After a milestone completes, spawns a fresh agent with clean context for the
|
|
5
|
-
* next milestone. Fresh agent reads CLAUDE.md + next milestone section only.
|
|
6
|
-
* Loops until all milestones done or a failure stops the chain.
|
|
7
|
-
*
|
|
8
|
-
* This module is the data/logic layer. It does NOT spawn agents — that is
|
|
9
|
-
* the skill file's job (via Claude Code's Task tool). Auto-chain prepares
|
|
10
|
-
* the context and tracks results across milestones.
|
|
11
|
-
*/
|
|
12
|
-
import { readFile } from "node:fs/promises";
|
|
13
|
-
import { execSync } from "node:child_process";
|
|
14
|
-
import { join } from "node:path";
|
|
15
|
-
import { readCurrentMilestone } from "../state/reader.js";
|
|
16
|
-
import { findNextPendingMilestone, countPendingMilestones, updateMilestoneStatus, } from "../state/prd-status.js";
|
|
17
|
-
import { isLastMilestone, commitMilestoneWork, } from "../state/writer.js";
|
|
18
|
-
import { buildMilestoneContext } from "./executor.js";
|
|
19
|
-
import { createWorktree, removeWorktree, deleteBranch, getRepoRoot, } from "../worktree/manager.js";
|
|
20
|
-
import { registerSession, deregisterSession, updateSessionStatus, } from "../worktree/session.js";
|
|
21
|
-
import { getCurrentUser } from "../worktree/identity.js";
|
|
22
|
-
import { buildScheduleFromPRD } from "../worktree/parallel.js";
|
|
23
|
-
// ---------------------------------------------------------------------------
|
|
24
|
-
// Helpers
|
|
25
|
-
// ---------------------------------------------------------------------------
|
|
26
|
-
async function safeRead(filePath) {
|
|
27
|
-
try {
|
|
28
|
-
return await readFile(filePath, "utf-8");
|
|
29
|
-
}
|
|
30
|
-
catch {
|
|
31
|
-
return "";
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Extract the "Quick Context" section from CLAUDE.md.
|
|
36
|
-
*
|
|
37
|
-
* Returns just the abbreviated context block (from "## Quick Context" to the
|
|
38
|
-
* next `##` heading or end of file). Falls back to the first 30 lines of
|
|
39
|
-
* the file if the section header isn't found.
|
|
40
|
-
*/
|
|
41
|
-
function extractQuickContext(claudeMd) {
|
|
42
|
-
if (!claudeMd)
|
|
43
|
-
return "";
|
|
44
|
-
const quickMatch = claudeMd.match(/##\s*Quick Context\s*\n([\s\S]*?)(?=\n##\s|$)/);
|
|
45
|
-
if (quickMatch) {
|
|
46
|
-
return `## Quick Context\n${quickMatch[1].trim()}`;
|
|
47
|
-
}
|
|
48
|
-
// Fallback: first 30 lines (enough context without bloating the prompt)
|
|
49
|
-
const lines = claudeMd.split("\n").slice(0, 30);
|
|
50
|
-
return lines.join("\n").trim();
|
|
51
|
-
}
|
|
52
|
-
// ---------------------------------------------------------------------------
|
|
53
|
-
// buildFreshSessionPrompt
|
|
54
|
-
// ---------------------------------------------------------------------------
|
|
55
|
-
/**
|
|
56
|
-
* Build the fresh-context prompt for a milestone agent (Ralph Loop pattern).
|
|
57
|
-
*
|
|
58
|
-
* Reads CLAUDE.md (abbreviated to Quick Context) and the current milestone
|
|
59
|
-
* section from the PRD. The total is kept as small as possible (~200-300
|
|
60
|
-
* lines) while giving the agent enough context to work.
|
|
61
|
-
*/
|
|
62
|
-
export async function buildFreshSessionPrompt(projectDir, prdPath, milestoneNumber) {
|
|
63
|
-
const [claudeMd, milestoneSection] = await Promise.all([
|
|
64
|
-
safeRead(join(projectDir, "CLAUDE.md")),
|
|
65
|
-
readCurrentMilestone(prdPath, milestoneNumber),
|
|
66
|
-
]);
|
|
67
|
-
const lines = [];
|
|
68
|
-
// 1. Abbreviated CLAUDE.md
|
|
69
|
-
const quickContext = extractQuickContext(claudeMd);
|
|
70
|
-
if (quickContext) {
|
|
71
|
-
lines.push("# Project Context");
|
|
72
|
-
lines.push("");
|
|
73
|
-
lines.push(quickContext);
|
|
74
|
-
lines.push("");
|
|
75
|
-
}
|
|
76
|
-
// 2. Current milestone section from PRD
|
|
77
|
-
if (milestoneSection) {
|
|
78
|
-
lines.push("# Current Milestone");
|
|
79
|
-
lines.push("");
|
|
80
|
-
lines.push(milestoneSection.trim());
|
|
81
|
-
lines.push("");
|
|
82
|
-
}
|
|
83
|
-
else {
|
|
84
|
-
lines.push(`# Current Milestone`);
|
|
85
|
-
lines.push("");
|
|
86
|
-
lines.push(`Milestone ${milestoneNumber} section not found in PRD at ${prdPath}.`);
|
|
87
|
-
lines.push("");
|
|
88
|
-
}
|
|
89
|
-
// 3. Session instructions (minimal)
|
|
90
|
-
lines.push("# Session Instructions");
|
|
91
|
-
lines.push("");
|
|
92
|
-
lines.push("You are executing the milestone described above. Follow the PRD precisely.");
|
|
93
|
-
lines.push("- Run `npx tsc --noEmit` after all changes to verify types.");
|
|
94
|
-
lines.push("- Stage only files you create/modify (never `git add .`).");
|
|
95
|
-
lines.push("- Do not commit — the orchestrator handles commits.");
|
|
96
|
-
lines.push("- On completion, the orchestrator will update the status JSON automatically.");
|
|
97
|
-
lines.push("- NEVER modify .forge.json, CLAUDE.md, or tasks/lessons.md to resolve verification errors.");
|
|
98
|
-
lines.push("");
|
|
99
|
-
return lines.join("\n");
|
|
100
|
-
}
|
|
101
|
-
// Re-export findNextPendingMilestone and countPendingMilestones from prd-status
|
|
102
|
-
// so that existing consumers (cli.ts, tests) can continue importing from auto-chain.
|
|
103
|
-
export { findNextPendingMilestone, countPendingMilestones };
|
|
104
|
-
// ---------------------------------------------------------------------------
|
|
105
|
-
// runAutoChain
|
|
106
|
-
// ---------------------------------------------------------------------------
|
|
107
|
-
/**
|
|
108
|
-
* Auto-chain orchestrator: manages multi-milestone execution with context resets.
|
|
109
|
-
*
|
|
110
|
-
* For each pending milestone:
|
|
111
|
-
* 1. Determines the starting milestone (from options or per-PRD status)
|
|
112
|
-
* 2. Creates a git worktree for isolated execution
|
|
113
|
-
* 3. Registers a session in the session registry
|
|
114
|
-
* 4. Builds a fresh-context prompt for the milestone agent
|
|
115
|
-
* 5. Calls the milestone context builder for structured data
|
|
116
|
-
* 6. Returns results so the calling skill can spawn agents and drive execution
|
|
117
|
-
* 7. On completion or failure, deregisters the session and cleans up the worktree
|
|
118
|
-
*
|
|
119
|
-
* The worktree is created ONCE per /forge:go session, not per milestone.
|
|
120
|
-
* All milestones in the chain execute in the same worktree.
|
|
121
|
-
*
|
|
122
|
-
* The chain stops on the first milestone failure, or when all milestones
|
|
123
|
-
* are complete. The caller is responsible for actually executing each
|
|
124
|
-
* milestone (spawning agents, running waves) — this function provides the
|
|
125
|
-
* orchestration loop and context management.
|
|
126
|
-
*/
|
|
127
|
-
export async function runAutoChain(options) {
|
|
128
|
-
const { projectDir, prdPath, config, branch, project, prdSlug, activePrd, developer, onMilestoneStart, onMilestoneComplete, onChainComplete, } = options;
|
|
129
|
-
const completed = [];
|
|
130
|
-
// Determine starting milestone
|
|
131
|
-
let currentMilestoneNumber;
|
|
132
|
-
if (options.startMilestone !== undefined) {
|
|
133
|
-
currentMilestoneNumber = options.startMilestone;
|
|
134
|
-
}
|
|
135
|
-
else {
|
|
136
|
-
// Auto-detect from per-PRD status
|
|
137
|
-
const nextPending = await findNextPendingMilestone(projectDir, prdSlug);
|
|
138
|
-
if (!nextPending) {
|
|
139
|
-
// All milestones are already complete
|
|
140
|
-
const result = {
|
|
141
|
-
completed: [],
|
|
142
|
-
stopped: false,
|
|
143
|
-
allComplete: true,
|
|
144
|
-
};
|
|
145
|
-
onChainComplete?.([]);
|
|
146
|
-
return result;
|
|
147
|
-
}
|
|
148
|
-
currentMilestoneNumber = nextPending.number;
|
|
149
|
-
}
|
|
150
|
-
// --- Worktree lifecycle: create once for the entire chain ---
|
|
151
|
-
const repoRoot = options.repoRoot ?? getRepoRoot(projectDir);
|
|
152
|
-
const user = getCurrentUser(projectDir);
|
|
153
|
-
const slug = `${project}-m${currentMilestoneNumber}`;
|
|
154
|
-
const worktreeResult = createWorktree(repoRoot, slug, user.name, {
|
|
155
|
-
baseBranch: branch,
|
|
156
|
-
});
|
|
157
|
-
const { worktreePath, branch: worktreeBranch } = worktreeResult;
|
|
158
|
-
const session = registerSession(repoRoot, {
|
|
159
|
-
user,
|
|
160
|
-
skill: "go",
|
|
161
|
-
milestone: `M${currentMilestoneNumber}`,
|
|
162
|
-
prdSlug,
|
|
163
|
-
branch: worktreeBranch,
|
|
164
|
-
worktreePath,
|
|
165
|
-
});
|
|
166
|
-
// Use worktree path as the effective project directory for code execution.
|
|
167
|
-
// CLAUDE.md is read from the main projectDir (see buildFreshSessionPrompt),
|
|
168
|
-
// PRD files and milestone context come from the worktree.
|
|
169
|
-
const effectiveProjectDir = worktreePath;
|
|
170
|
-
try {
|
|
171
|
-
// Loop through milestones until we run out or hit a failure
|
|
172
|
-
while (true) {
|
|
173
|
-
// Update session milestone tracking
|
|
174
|
-
updateSessionStatus(repoRoot, session.id, "active");
|
|
175
|
-
// Build fresh-context prompt: CLAUDE.md from main project,
|
|
176
|
-
// PRD path resolved relative to the worktree
|
|
177
|
-
const effectivePrdPath = join(effectiveProjectDir, prdPath);
|
|
178
|
-
const freshPrompt = await buildFreshSessionPrompt(projectDir, effectivePrdPath, currentMilestoneNumber);
|
|
179
|
-
// Build structured context from the worktree (validates milestone exists in PRD)
|
|
180
|
-
let context;
|
|
181
|
-
try {
|
|
182
|
-
context = await buildMilestoneContext({
|
|
183
|
-
projectDir: effectiveProjectDir,
|
|
184
|
-
prdPath,
|
|
185
|
-
milestoneNumber: currentMilestoneNumber,
|
|
186
|
-
config,
|
|
187
|
-
prdSlug,
|
|
188
|
-
});
|
|
189
|
-
// Attach worktree path to context
|
|
190
|
-
context.worktreePath = worktreePath;
|
|
191
|
-
}
|
|
192
|
-
catch (err) {
|
|
193
|
-
// Milestone not found in PRD — chain cannot continue
|
|
194
|
-
const errorMessage = err instanceof Error ? err.message : String(err);
|
|
195
|
-
const failResult = {
|
|
196
|
-
milestoneNumber: currentMilestoneNumber,
|
|
197
|
-
milestoneName: "Unknown",
|
|
198
|
-
success: false,
|
|
199
|
-
isLast: false,
|
|
200
|
-
freshPrompt,
|
|
201
|
-
worktreePath,
|
|
202
|
-
errors: [errorMessage],
|
|
203
|
-
};
|
|
204
|
-
completed.push(failResult);
|
|
205
|
-
onMilestoneComplete?.(currentMilestoneNumber, failResult);
|
|
206
|
-
const chainResult = {
|
|
207
|
-
completed,
|
|
208
|
-
stopped: true,
|
|
209
|
-
stoppedAt: currentMilestoneNumber,
|
|
210
|
-
allComplete: false,
|
|
211
|
-
};
|
|
212
|
-
onChainComplete?.(completed);
|
|
213
|
-
return chainResult;
|
|
214
|
-
}
|
|
215
|
-
// Notify: milestone starting
|
|
216
|
-
onMilestoneStart?.(currentMilestoneNumber, context.milestoneName);
|
|
217
|
-
// Build the milestone result with the fresh prompt.
|
|
218
|
-
// The caller uses `freshPrompt` to spawn an agent, then calls
|
|
219
|
-
// `completeMilestone()` after the agent finishes.
|
|
220
|
-
const milestoneResult = {
|
|
221
|
-
milestoneNumber: currentMilestoneNumber,
|
|
222
|
-
milestoneName: context.milestoneName,
|
|
223
|
-
success: true, // Optimistic; caller updates via completeMilestone
|
|
224
|
-
isLast: await isLastMilestone(effectiveProjectDir, prdSlug, currentMilestoneNumber),
|
|
225
|
-
freshPrompt,
|
|
226
|
-
worktreePath,
|
|
227
|
-
errors: [],
|
|
228
|
-
};
|
|
229
|
-
completed.push(milestoneResult);
|
|
230
|
-
// Notify: milestone complete (caller will drive actual execution)
|
|
231
|
-
onMilestoneComplete?.(currentMilestoneNumber, milestoneResult);
|
|
232
|
-
// If this was the last milestone, we're done
|
|
233
|
-
if (milestoneResult.isLast) {
|
|
234
|
-
const chainResult = {
|
|
235
|
-
completed,
|
|
236
|
-
stopped: false,
|
|
237
|
-
allComplete: true,
|
|
238
|
-
};
|
|
239
|
-
onChainComplete?.(completed);
|
|
240
|
-
return chainResult;
|
|
241
|
-
}
|
|
242
|
-
// Find the next pending milestone
|
|
243
|
-
const nextPending = await findNextPendingMilestone(effectiveProjectDir, prdSlug);
|
|
244
|
-
if (!nextPending) {
|
|
245
|
-
// All milestones are complete
|
|
246
|
-
const chainResult = {
|
|
247
|
-
completed,
|
|
248
|
-
stopped: false,
|
|
249
|
-
allComplete: true,
|
|
250
|
-
};
|
|
251
|
-
onChainComplete?.(completed);
|
|
252
|
-
return chainResult;
|
|
253
|
-
}
|
|
254
|
-
currentMilestoneNumber = nextPending.number;
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
finally {
|
|
258
|
-
// --- Worktree cleanup: always runs, even on error ---
|
|
259
|
-
try {
|
|
260
|
-
deregisterSession(repoRoot, session.id);
|
|
261
|
-
}
|
|
262
|
-
catch {
|
|
263
|
-
// Non-fatal: best-effort deregistration
|
|
264
|
-
}
|
|
265
|
-
try {
|
|
266
|
-
removeWorktree(repoRoot, worktreePath);
|
|
267
|
-
}
|
|
268
|
-
catch {
|
|
269
|
-
// Non-fatal: best-effort cleanup
|
|
270
|
-
}
|
|
271
|
-
// Delete the worktree branch — force-delete since it was merged via worktree flow
|
|
272
|
-
deleteBranch(repoRoot, worktreeBranch, { force: true });
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
// ---------------------------------------------------------------------------
|
|
276
|
-
// completeMilestone — post-execution bookkeeping
|
|
277
|
-
// ---------------------------------------------------------------------------
|
|
278
|
-
/**
|
|
279
|
-
* Called after a milestone's agent finishes execution.
|
|
280
|
-
*
|
|
281
|
-
* Handles:
|
|
282
|
-
* 1. Updating milestone status in per-PRD status JSON
|
|
283
|
-
* 2. Committing milestone work to git (in the worktree if one was used)
|
|
284
|
-
* 3. Merging worktree branch into the feature branch (if worktree was used)
|
|
285
|
-
* 4. Returning the commit SHA for the milestone result
|
|
286
|
-
*
|
|
287
|
-
* The caller should update the MilestoneResult with the returned commit info.
|
|
288
|
-
*/
|
|
289
|
-
export async function completeMilestone(options) {
|
|
290
|
-
const { projectDir, prdSlug, milestoneNumber, milestoneName, branch, filesToStage, push, worktreePath, repoRoot, } = options;
|
|
291
|
-
// The effective directory for status updates and commits:
|
|
292
|
-
// if a worktree was used, commit there; otherwise use projectDir
|
|
293
|
-
const commitDir = worktreePath ?? projectDir;
|
|
294
|
-
// Check if this is the last milestone
|
|
295
|
-
const last = await isLastMilestone(commitDir, prdSlug, milestoneNumber);
|
|
296
|
-
// Update per-PRD status JSON
|
|
297
|
-
await updateMilestoneStatus(commitDir, prdSlug, milestoneNumber, "complete");
|
|
298
|
-
// Commit milestone work (in the worktree if one was used)
|
|
299
|
-
const commitResult = commitMilestoneWork({
|
|
300
|
-
projectDir: commitDir,
|
|
301
|
-
milestoneNumber,
|
|
302
|
-
milestoneName,
|
|
303
|
-
filesToStage,
|
|
304
|
-
push: false, // Don't push from worktree; push happens after merge
|
|
305
|
-
branch,
|
|
306
|
-
});
|
|
307
|
-
// If a worktree was used, merge the worktree branch into the feature branch
|
|
308
|
-
if (worktreePath && repoRoot) {
|
|
309
|
-
const worktreeBranch = execSync("git rev-parse --abbrev-ref HEAD", {
|
|
310
|
-
cwd: worktreePath,
|
|
311
|
-
encoding: "utf-8",
|
|
312
|
-
stdio: "pipe",
|
|
313
|
-
}).trim();
|
|
314
|
-
mergeWorktreeBranch(repoRoot, worktreeBranch, branch);
|
|
315
|
-
// Optionally push the feature branch after merge
|
|
316
|
-
if (push) {
|
|
317
|
-
try {
|
|
318
|
-
execSync(`git push origin ${branch}`, {
|
|
319
|
-
cwd: repoRoot,
|
|
320
|
-
stdio: "pipe",
|
|
321
|
-
encoding: "utf-8",
|
|
322
|
-
});
|
|
323
|
-
}
|
|
324
|
-
catch {
|
|
325
|
-
// Non-fatal: push failure doesn't invalidate the milestone
|
|
326
|
-
}
|
|
327
|
-
}
|
|
328
|
-
}
|
|
329
|
-
else if (push) {
|
|
330
|
-
// No worktree — push directly from projectDir (original behavior)
|
|
331
|
-
try {
|
|
332
|
-
execSync(`git push origin ${branch}`, {
|
|
333
|
-
cwd: projectDir,
|
|
334
|
-
stdio: "pipe",
|
|
335
|
-
encoding: "utf-8",
|
|
336
|
-
});
|
|
337
|
-
}
|
|
338
|
-
catch {
|
|
339
|
-
// Non-fatal
|
|
340
|
-
}
|
|
341
|
-
}
|
|
342
|
-
return { commitResult, isLast: last };
|
|
343
|
-
}
|
|
344
|
-
// ---------------------------------------------------------------------------
|
|
345
|
-
// mergeWorktreeBranch — brings worktree commits into the feature branch
|
|
346
|
-
// ---------------------------------------------------------------------------
|
|
347
|
-
/**
|
|
348
|
-
* Merge worktree branch commits into the target branch.
|
|
349
|
-
* Used after milestone completion to bring worktree work back to the feature branch.
|
|
350
|
-
*
|
|
351
|
-
* Checks out the target branch in the main repo, merges the worktree branch,
|
|
352
|
-
* then returns. The caller is responsible for pushing if desired.
|
|
353
|
-
*/
|
|
354
|
-
function mergeWorktreeBranch(repoRoot, worktreeBranch, targetBranch) {
|
|
355
|
-
// Ensure we're on the target branch in the main repo
|
|
356
|
-
execSync(`git checkout ${targetBranch}`, {
|
|
357
|
-
cwd: repoRoot,
|
|
358
|
-
stdio: "pipe",
|
|
359
|
-
encoding: "utf-8",
|
|
360
|
-
});
|
|
361
|
-
// Merge the worktree branch into the target branch
|
|
362
|
-
execSync(`git merge ${worktreeBranch} --no-edit`, {
|
|
363
|
-
cwd: repoRoot,
|
|
364
|
-
stdio: "pipe",
|
|
365
|
-
encoding: "utf-8",
|
|
366
|
-
});
|
|
367
|
-
}
|
|
368
|
-
// ---------------------------------------------------------------------------
|
|
369
|
-
// buildParallelPlan — parallel execution planner
|
|
370
|
-
// ---------------------------------------------------------------------------
|
|
371
|
-
/**
|
|
372
|
-
* Build a parallel execution plan for all milestones in a PRD.
|
|
373
|
-
*
|
|
374
|
-
* Parses the PRD markdown for milestone definitions and `dependsOn` fields,
|
|
375
|
-
* builds a dependency DAG, and computes parallel execution waves showing
|
|
376
|
-
* which milestones can run simultaneously.
|
|
377
|
-
*
|
|
378
|
-
* If no `dependsOn` fields are found in the PRD, all milestones are treated
|
|
379
|
-
* as roots (no dependencies) and placed in a single wave. This is backward
|
|
380
|
-
* compatible — the caller can process them sequentially by milestone number.
|
|
381
|
-
*
|
|
382
|
-
* @param prdPath - Absolute path to the PRD markdown file
|
|
383
|
-
* @returns The wave schedule showing which milestones can run simultaneously
|
|
384
|
-
* @throws If a dependency cycle is detected or a referenced dependency doesn't exist
|
|
385
|
-
*/
|
|
386
|
-
export async function buildParallelPlan(prdPath) {
|
|
387
|
-
return buildScheduleFromPRD(prdPath);
|
|
388
|
-
}
|
|
389
|
-
//# sourceMappingURL=auto-chain.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auto-chain.js","sourceRoot":"","sources":["../../src/go/auto-chain.ts"],"names":[],"mappings":"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"}
|
package/dist/go/executor.d.ts
DELETED
|
@@ -1,137 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Milestone Execution Engine
|
|
3
|
-
*
|
|
4
|
-
* Programmatic module that reads a PRD milestone definition, prepares
|
|
5
|
-
* wave-based agent prompts, tracks results, runs verification between
|
|
6
|
-
* waves, and produces structured output.
|
|
7
|
-
*
|
|
8
|
-
* This module does NOT spawn agents — that is the skill file's job
|
|
9
|
-
* (via Claude Code's Task tool). The executor is the data/logic layer.
|
|
10
|
-
*/
|
|
11
|
-
import type { SessionContext } from "../state/reader.js";
|
|
12
|
-
import type { TeamConfig } from "../team/types.js";
|
|
13
|
-
import type { ForgeConfig, PipelineResult } from "../types.js";
|
|
14
|
-
import type { MilestoneWave } from "../spec/templates.js";
|
|
15
|
-
export interface ExecuteMilestoneOptions {
|
|
16
|
-
projectDir: string;
|
|
17
|
-
prdPath: string;
|
|
18
|
-
milestoneNumber: number;
|
|
19
|
-
config: ForgeConfig;
|
|
20
|
-
/** PRD slug for per-PRD status tracking */
|
|
21
|
-
prdSlug?: string;
|
|
22
|
-
/** Log prompts but don't run verification (for testing) */
|
|
23
|
-
dryRun?: boolean;
|
|
24
|
-
}
|
|
25
|
-
export interface AgentPrompt {
|
|
26
|
-
name: string;
|
|
27
|
-
task: string;
|
|
28
|
-
files: string[];
|
|
29
|
-
prompt: string;
|
|
30
|
-
}
|
|
31
|
-
export interface WaveExecution {
|
|
32
|
-
waveNumber: number;
|
|
33
|
-
agents: AgentPrompt[];
|
|
34
|
-
}
|
|
35
|
-
export interface AgentResult {
|
|
36
|
-
name: string;
|
|
37
|
-
task: string;
|
|
38
|
-
success: boolean;
|
|
39
|
-
error?: string;
|
|
40
|
-
filesCreated: string[];
|
|
41
|
-
filesModified: string[];
|
|
42
|
-
}
|
|
43
|
-
export interface WaveResult {
|
|
44
|
-
waveNumber: number;
|
|
45
|
-
agents: AgentResult[];
|
|
46
|
-
verification: PipelineResult | null;
|
|
47
|
-
}
|
|
48
|
-
export interface ExecutionResult {
|
|
49
|
-
milestoneNumber: number;
|
|
50
|
-
milestoneName: string;
|
|
51
|
-
success: boolean;
|
|
52
|
-
waves: WaveResult[];
|
|
53
|
-
totalFilesCreated: number;
|
|
54
|
-
totalFilesModified: number;
|
|
55
|
-
errors: string[];
|
|
56
|
-
}
|
|
57
|
-
export interface MilestoneContext {
|
|
58
|
-
milestoneNumber: number;
|
|
59
|
-
milestoneName: string;
|
|
60
|
-
milestoneGoal: string;
|
|
61
|
-
milestoneSection: string;
|
|
62
|
-
waves: MilestoneWave[];
|
|
63
|
-
verificationCommands: string[];
|
|
64
|
-
sessionContext: SessionContext;
|
|
65
|
-
lessons: string;
|
|
66
|
-
claudeMd: string;
|
|
67
|
-
/** Path to the worktree used for isolated execution (if any) */
|
|
68
|
-
worktreePath?: string;
|
|
69
|
-
/** Team configuration for agent team lifecycle (M2 integration) */
|
|
70
|
-
teamConfig?: TeamConfig;
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* Build the full context needed to execute a milestone.
|
|
74
|
-
* Reads PRD milestone section, CLAUDE.md, lessons, and per-PRD status JSON.
|
|
75
|
-
*/
|
|
76
|
-
export declare function buildMilestoneContext(options: ExecuteMilestoneOptions): Promise<MilestoneContext>;
|
|
77
|
-
/**
|
|
78
|
-
* Build a prompt for a single agent within a milestone wave.
|
|
79
|
-
*
|
|
80
|
-
* The prompt includes:
|
|
81
|
-
* - The agent's specific task and files
|
|
82
|
-
* - Milestone goal and context
|
|
83
|
-
* - Key existing code (inlined, not just paths)
|
|
84
|
-
* - Lessons from tasks/lessons.md
|
|
85
|
-
* - CLAUDE.md rules (abbreviated)
|
|
86
|
-
*/
|
|
87
|
-
export declare function buildAgentPrompt(agent: MilestoneWave["agents"][number], context: MilestoneContext, existingCode?: string): string;
|
|
88
|
-
/**
|
|
89
|
-
* Prepare all waves for execution.
|
|
90
|
-
* Returns structured wave data with agent prompts ready for the skill
|
|
91
|
-
* to pass to Claude Code's Task tool.
|
|
92
|
-
*/
|
|
93
|
-
export declare function prepareWaves(context: MilestoneContext, existingCodeMap?: Map<string, string>): WaveExecution[];
|
|
94
|
-
/**
|
|
95
|
-
* Run forge verification pipeline after a wave completes.
|
|
96
|
-
* Returns the pipeline result with human-readable report.
|
|
97
|
-
*/
|
|
98
|
-
export declare function runWaveVerification(options: ExecuteMilestoneOptions): Promise<PipelineResult>;
|
|
99
|
-
/**
|
|
100
|
-
* Create an empty execution result for a milestone.
|
|
101
|
-
*/
|
|
102
|
-
export declare function createExecutionResult(context: MilestoneContext): ExecutionResult;
|
|
103
|
-
/**
|
|
104
|
-
* Record a completed wave's results into the execution result.
|
|
105
|
-
*/
|
|
106
|
-
export declare function recordWaveResult(execution: ExecutionResult, waveResult: WaveResult): ExecutionResult;
|
|
107
|
-
/**
|
|
108
|
-
* Execute a single milestone end-to-end.
|
|
109
|
-
*
|
|
110
|
-
* In dryRun mode: builds context and prompts, runs no verification, returns
|
|
111
|
-
* the prepared execution plan.
|
|
112
|
-
*
|
|
113
|
-
* In normal mode: the caller (skill file) should use this module's functions
|
|
114
|
-
* step by step:
|
|
115
|
-
* 1. `buildMilestoneContext()` — read PRD and build context
|
|
116
|
-
* 2. `prepareWaves()` — get agent prompts for each wave
|
|
117
|
-
* 3. For each wave: spawn agents, collect results
|
|
118
|
-
* 4. `runWaveVerification()` — verify after each wave
|
|
119
|
-
* 5. `recordWaveResult()` — track results
|
|
120
|
-
*
|
|
121
|
-
* This `executeMilestone` function is the simplified orchestrator for
|
|
122
|
-
* programmatic/testing use. For real execution, the skill drives each step.
|
|
123
|
-
*/
|
|
124
|
-
export declare function executeMilestone(options: ExecuteMilestoneOptions): Promise<{
|
|
125
|
-
context: MilestoneContext;
|
|
126
|
-
waves: WaveExecution[];
|
|
127
|
-
result: ExecutionResult;
|
|
128
|
-
}>;
|
|
129
|
-
/**
|
|
130
|
-
* Format an execution result as a human-readable summary.
|
|
131
|
-
*/
|
|
132
|
-
export declare function formatExecutionSummary(result: ExecutionResult): string;
|
|
133
|
-
/**
|
|
134
|
-
* Format verification errors into a structured prompt for fix agents.
|
|
135
|
-
* Used by the self-healing verify loop.
|
|
136
|
-
*/
|
|
137
|
-
export declare function formatErrorsForFixAgent(verification: PipelineResult): string;
|