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.
Files changed (142) hide show
  1. package/package.json +3 -2
  2. package/dist/gates/codex-gate.d.ts +0 -51
  3. package/dist/gates/codex-gate.js +0 -121
  4. package/dist/gates/codex-gate.js.map +0 -1
  5. package/dist/gates/prd-gate.d.ts +0 -7
  6. package/dist/gates/prd-gate.js +0 -193
  7. package/dist/gates/prd-gate.js.map +0 -1
  8. package/dist/gates/remediation.d.ts +0 -46
  9. package/dist/gates/remediation.js +0 -423
  10. package/dist/gates/remediation.js.map +0 -1
  11. package/dist/gates/review-gate.d.ts +0 -16
  12. package/dist/gates/review-gate.js +0 -479
  13. package/dist/gates/review-gate.js.map +0 -1
  14. package/dist/gates/runtime-gate.d.ts +0 -5
  15. package/dist/gates/runtime-gate.js +0 -99
  16. package/dist/gates/runtime-gate.js.map +0 -1
  17. package/dist/gates/test-analysis.d.ts +0 -21
  18. package/dist/gates/test-analysis.js +0 -394
  19. package/dist/gates/test-analysis.js.map +0 -1
  20. package/dist/gates/visual-capture.d.ts +0 -24
  21. package/dist/gates/visual-capture.js +0 -144
  22. package/dist/gates/visual-capture.js.map +0 -1
  23. package/dist/gates/visual-gate.d.ts +0 -18
  24. package/dist/gates/visual-gate.js +0 -234
  25. package/dist/gates/visual-gate.js.map +0 -1
  26. package/dist/gates/visual-reviewer.d.ts +0 -11
  27. package/dist/gates/visual-reviewer.js +0 -211
  28. package/dist/gates/visual-reviewer.js.map +0 -1
  29. package/dist/go/auto-chain.d.ts +0 -136
  30. package/dist/go/auto-chain.js +0 -389
  31. package/dist/go/auto-chain.js.map +0 -1
  32. package/dist/go/executor.d.ts +0 -137
  33. package/dist/go/executor.js +0 -447
  34. package/dist/go/executor.js.map +0 -1
  35. package/dist/go/finalize.d.ts +0 -108
  36. package/dist/go/finalize.js +0 -331
  37. package/dist/go/finalize.js.map +0 -1
  38. package/dist/go/linear-sync-cli.d.ts +0 -55
  39. package/dist/go/linear-sync-cli.js +0 -192
  40. package/dist/go/linear-sync-cli.js.map +0 -1
  41. package/dist/go/linear-sync.d.ts +0 -112
  42. package/dist/go/linear-sync.js +0 -375
  43. package/dist/go/linear-sync.js.map +0 -1
  44. package/dist/go/prd-queue.d.ts +0 -43
  45. package/dist/go/prd-queue.js +0 -67
  46. package/dist/go/prd-queue.js.map +0 -1
  47. package/dist/go/prd-selector.d.ts +0 -57
  48. package/dist/go/prd-selector.js +0 -101
  49. package/dist/go/prd-selector.js.map +0 -1
  50. package/dist/go/verify-loop.d.ts +0 -64
  51. package/dist/go/verify-loop.js +0 -327
  52. package/dist/go/verify-loop.js.map +0 -1
  53. package/dist/hooks/pre-commit.d.ts +0 -5
  54. package/dist/hooks/pre-commit.js +0 -75
  55. package/dist/hooks/pre-commit.js.map +0 -1
  56. package/dist/linear/issues.d.ts +0 -22
  57. package/dist/linear/issues.js +0 -51
  58. package/dist/linear/issues.js.map +0 -1
  59. package/dist/linear/milestones.d.ts +0 -11
  60. package/dist/linear/milestones.js +0 -32
  61. package/dist/linear/milestones.js.map +0 -1
  62. package/dist/linear/projects.d.ts +0 -16
  63. package/dist/linear/projects.js +0 -51
  64. package/dist/linear/projects.js.map +0 -1
  65. package/dist/reporter/human.d.ts +0 -7
  66. package/dist/reporter/human.js +0 -93
  67. package/dist/reporter/human.js.map +0 -1
  68. package/dist/reporter/json.d.ts +0 -2
  69. package/dist/reporter/json.js +0 -4
  70. package/dist/reporter/json.js.map +0 -1
  71. package/dist/setup/structural-templates.d.ts +0 -12
  72. package/dist/setup/structural-templates.js +0 -288
  73. package/dist/setup/structural-templates.js.map +0 -1
  74. package/dist/setup/templates.d.ts +0 -17
  75. package/dist/setup/templates.js +0 -109
  76. package/dist/setup/templates.js.map +0 -1
  77. package/dist/setup/test-planner.d.ts +0 -38
  78. package/dist/setup/test-planner.js +0 -91
  79. package/dist/setup/test-planner.js.map +0 -1
  80. package/dist/setup/test-scaffold.d.ts +0 -31
  81. package/dist/setup/test-scaffold.js +0 -209
  82. package/dist/setup/test-scaffold.js.map +0 -1
  83. package/dist/setup/test-templates.d.ts +0 -37
  84. package/dist/setup/test-templates.js +0 -313
  85. package/dist/setup/test-templates.js.map +0 -1
  86. package/dist/spec/generator.d.ts +0 -34
  87. package/dist/spec/generator.js +0 -227
  88. package/dist/spec/generator.js.map +0 -1
  89. package/dist/spec/interview.d.ts +0 -142
  90. package/dist/spec/interview.js +0 -287
  91. package/dist/spec/interview.js.map +0 -1
  92. package/dist/spec/linear-sync.d.ts +0 -48
  93. package/dist/spec/linear-sync.js +0 -125
  94. package/dist/spec/linear-sync.js.map +0 -1
  95. package/dist/spec/scanner.d.ts +0 -79
  96. package/dist/spec/scanner.js +0 -566
  97. package/dist/spec/scanner.js.map +0 -1
  98. package/dist/spec/templates.d.ts +0 -375
  99. package/dist/spec/templates.js +0 -95
  100. package/dist/spec/templates.js.map +0 -1
  101. package/dist/state/prd-status.d.ts +0 -62
  102. package/dist/state/prd-status.js +0 -122
  103. package/dist/state/prd-status.js.map +0 -1
  104. package/dist/state/reader.d.ts +0 -7
  105. package/dist/state/reader.js +0 -43
  106. package/dist/state/reader.js.map +0 -1
  107. package/dist/state/writer.d.ts +0 -21
  108. package/dist/state/writer.js +0 -106
  109. package/dist/state/writer.js.map +0 -1
  110. package/dist/team/consensus.d.ts +0 -28
  111. package/dist/team/consensus.js +0 -130
  112. package/dist/team/consensus.js.map +0 -1
  113. package/dist/team/index.d.ts +0 -4
  114. package/dist/team/index.js +0 -5
  115. package/dist/team/index.js.map +0 -1
  116. package/dist/team/lifecycle.d.ts +0 -37
  117. package/dist/team/lifecycle.js +0 -92
  118. package/dist/team/lifecycle.js.map +0 -1
  119. package/dist/team/reviewer.d.ts +0 -10
  120. package/dist/team/reviewer.js +0 -345
  121. package/dist/team/reviewer.js.map +0 -1
  122. package/dist/team/types.d.ts +0 -269
  123. package/dist/team/types.js +0 -70
  124. package/dist/team/types.js.map +0 -1
  125. package/dist/utils/browser.d.ts +0 -10
  126. package/dist/utils/browser.js +0 -96
  127. package/dist/utils/browser.js.map +0 -1
  128. package/dist/utils/platform.d.ts +0 -29
  129. package/dist/utils/platform.js +0 -90
  130. package/dist/utils/platform.js.map +0 -1
  131. package/dist/worktree/identity.d.ts +0 -9
  132. package/dist/worktree/identity.js +0 -32
  133. package/dist/worktree/identity.js.map +0 -1
  134. package/dist/worktree/parallel.d.ts +0 -87
  135. package/dist/worktree/parallel.js +0 -328
  136. package/dist/worktree/parallel.js.map +0 -1
  137. package/dist/worktree/session.d.ts +0 -67
  138. package/dist/worktree/session.js +0 -194
  139. package/dist/worktree/session.js.map +0 -1
  140. package/dist/worktree/state-merge.d.ts +0 -43
  141. package/dist/worktree/state-merge.js +0 -162
  142. package/dist/worktree/state-merge.js.map +0 -1
@@ -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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"}
@@ -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;