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,447 +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 { readFile } from "node:fs/promises";
12
- import { join } from "node:path";
13
- import { readSessionContext } from "../state/reader.js";
14
- import { runPipeline } from "../gates/index.js";
15
- import { formatHumanReport } from "../reporter/human.js";
16
- import { createTeamConfig, shouldIncludeNotetaker } from "../team/lifecycle.js";
17
- // ---------------------------------------------------------------------------
18
- // Helpers
19
- // ---------------------------------------------------------------------------
20
- async function safeRead(filePath) {
21
- try {
22
- return await readFile(filePath, "utf-8");
23
- }
24
- catch {
25
- return "";
26
- }
27
- }
28
- /**
29
- * Parse a milestone section from PRD markdown into structured wave data.
30
- *
31
- * The PRD milestone section has this structure:
32
- * ```
33
- * ### Milestone N: Name
34
- * **Assigned To:** ...
35
- * **Goal:** ...
36
- *
37
- * **Wave 1 (N agents parallel):**
38
- * 1. **agent-name**: task description
39
- * - Files: file1, file2
40
- * ```
41
- *
42
- * If a structured Milestone object is available (from templates.ts schema),
43
- * prefer using it directly. This parser handles the markdown fallback.
44
- */
45
- function parseMilestoneSection(section) {
46
- // Extract milestone name
47
- const nameMatch = section.match(/###\s*Milestone\s+\d+\s*[:\u2014\u2013-]\s*(.+)/);
48
- const name = nameMatch ? nameMatch[1].trim() : "Unknown Milestone";
49
- // Extract goal
50
- const goalMatch = section.match(/\*\*Goal:\*\*\s*(.+)/);
51
- const goal = goalMatch ? goalMatch[1].trim() : "";
52
- // Parse waves
53
- const waves = [];
54
- const wavePattern = /\*\*Wave\s+(\d+)\s*[^*]*\*\*:?\s*\n([\s\S]*?)(?=\*\*Wave\s+\d+|\*\*Verification|\*\*Acceptance|$)/g;
55
- let waveMatch;
56
- while ((waveMatch = wavePattern.exec(section)) !== null) {
57
- const waveNumber = parseInt(waveMatch[1], 10);
58
- const waveBody = waveMatch[2];
59
- const agents = [];
60
- // Parse agent entries: "1. **agent-name**: task description"
61
- const agentPattern = /\d+\.\s+\*\*([^*]+)\*\*[:\s]+([^\n]+)\n(?:\s+-\s+(?:Files|Creates|Modifies|Deletes):\s*([^\n]+)\n?)*/g;
62
- let agentMatch;
63
- while ((agentMatch = agentPattern.exec(waveBody)) !== null) {
64
- const agentName = agentMatch[1].trim();
65
- const agentTask = agentMatch[2].trim();
66
- // Collect all file references from sub-items
67
- const files = [];
68
- const fileLinePattern = /\s+-\s+(?:Files|Creates|Modifies|Deletes):\s*([^\n]+)/g;
69
- const agentBlock = waveBody.slice(agentMatch.index, agentPattern.lastIndex);
70
- let fileMatch;
71
- while ((fileMatch = fileLinePattern.exec(agentBlock)) !== null) {
72
- const fileList = fileMatch[1]
73
- .split(",")
74
- .map((f) => f.trim())
75
- .filter(Boolean);
76
- files.push(...fileList);
77
- }
78
- agents.push({ name: agentName, task: agentTask, files });
79
- }
80
- if (agents.length > 0) {
81
- waves.push({ waveNumber, agents });
82
- }
83
- }
84
- // Parse verification commands
85
- const verificationCommands = [];
86
- const verifySection = section.match(/\*\*Verification:\*\*\s*\n```(?:bash)?\s*\n([\s\S]*?)```/);
87
- if (verifySection) {
88
- const lines = verifySection[1].split("\n");
89
- for (const line of lines) {
90
- const trimmed = line.trim();
91
- if (trimmed && !trimmed.startsWith("#")) {
92
- verificationCommands.push(trimmed);
93
- }
94
- }
95
- }
96
- // Compute max agents across all waves for team sizing
97
- const maxAgentsPerWave = waves.reduce((max, w) => Math.max(max, w.agents.length), 0);
98
- return { name, goal, waves, verificationCommands, maxAgentsPerWave };
99
- }
100
- // ---------------------------------------------------------------------------
101
- // Context Building
102
- // ---------------------------------------------------------------------------
103
- /**
104
- * Build the full context needed to execute a milestone.
105
- * Reads PRD milestone section, CLAUDE.md, lessons, and per-PRD status JSON.
106
- */
107
- export async function buildMilestoneContext(options) {
108
- const { projectDir, prdPath, milestoneNumber } = options;
109
- // Read session context (milestone section from PRD)
110
- const sessionContext = await readSessionContext(prdPath, milestoneNumber, options.prdSlug ?? "unknown");
111
- const milestoneSection = sessionContext.currentMilestoneSection;
112
- if (!milestoneSection) {
113
- throw new Error(`Milestone ${milestoneNumber} not found in PRD at ${prdPath}`);
114
- }
115
- // Parse the milestone section into structured data
116
- const parsed = parseMilestoneSection(milestoneSection);
117
- const prdSlug = options.prdSlug ?? "unknown";
118
- // Read supporting files and PRD status in parallel
119
- const [lessons, claudeMd] = await Promise.all([
120
- safeRead(join(projectDir, "tasks", "lessons.md")),
121
- safeRead(join(projectDir, "CLAUDE.md")),
122
- ]);
123
- // Build team config based on wave structure
124
- const builderCount = parsed.maxAgentsPerWave;
125
- const includeNotetaker = shouldIncludeNotetaker(parsed.waves.length, parsed.maxAgentsPerWave);
126
- const teamConfig = createTeamConfig({
127
- prdSlug,
128
- milestoneNumber,
129
- builderCount,
130
- includeNotetaker,
131
- });
132
- return {
133
- milestoneNumber,
134
- milestoneName: parsed.name,
135
- milestoneGoal: parsed.goal,
136
- milestoneSection,
137
- waves: parsed.waves,
138
- verificationCommands: parsed.verificationCommands,
139
- sessionContext,
140
- lessons,
141
- claudeMd,
142
- teamConfig,
143
- };
144
- }
145
- // ---------------------------------------------------------------------------
146
- // Agent Prompt Building
147
- // ---------------------------------------------------------------------------
148
- /**
149
- * Build a prompt for a single agent within a milestone wave.
150
- *
151
- * The prompt includes:
152
- * - The agent's specific task and files
153
- * - Milestone goal and context
154
- * - Key existing code (inlined, not just paths)
155
- * - Lessons from tasks/lessons.md
156
- * - CLAUDE.md rules (abbreviated)
157
- */
158
- export function buildAgentPrompt(agent, context, existingCode) {
159
- const lines = [];
160
- // Header
161
- lines.push(`# Agent: ${agent.name}`);
162
- lines.push("");
163
- lines.push(`You are working on **Milestone ${context.milestoneNumber}: ${context.milestoneName}**.`);
164
- lines.push("");
165
- lines.push(`**Milestone Goal:** ${context.milestoneGoal}`);
166
- lines.push("");
167
- // Agent-specific task
168
- lines.push("## Your Task");
169
- lines.push("");
170
- lines.push(agent.task);
171
- lines.push("");
172
- // Files to create/modify
173
- if (agent.files.length > 0) {
174
- lines.push("## Files");
175
- lines.push("");
176
- for (const file of agent.files) {
177
- lines.push(`- ${file}`);
178
- }
179
- lines.push("");
180
- }
181
- // Inline existing code if provided
182
- if (existingCode) {
183
- lines.push("## Existing Code (Reference)");
184
- lines.push("");
185
- lines.push(existingCode);
186
- lines.push("");
187
- }
188
- // Lessons
189
- if (context.lessons) {
190
- lines.push("## Lessons (Follow These)");
191
- lines.push("");
192
- lines.push(context.lessons);
193
- lines.push("");
194
- }
195
- // Rules from CLAUDE.md (abbreviated to key rules only)
196
- if (context.claudeMd) {
197
- // Extract just the critical rules section if present
198
- const rulesMatch = context.claudeMd.match(/## Critical Rules\s*\n([\s\S]*?)(?=\n##\s|$)/);
199
- if (rulesMatch) {
200
- lines.push("## Rules");
201
- lines.push("");
202
- lines.push(rulesMatch[1].trim());
203
- lines.push("");
204
- }
205
- }
206
- // Team Communication (M2 integration)
207
- if (context.teamConfig) {
208
- const teamName = context.teamConfig.teamName;
209
- lines.push("## Team Communication");
210
- lines.push("");
211
- lines.push(`You are part of team **${teamName}**.`);
212
- lines.push("");
213
- lines.push("Use the **SendMessage** tool to communicate with teammates:");
214
- lines.push('- Send a direct message: `{ "type": "message", "recipient": "<name>", "content": "...", "summary": "..." }`');
215
- lines.push("- Only use broadcast for critical blocking issues that affect all teammates.");
216
- lines.push("- When your task is complete, send a message to the executive summarizing what you did.");
217
- lines.push("- If you encounter a blocker, message the executive immediately rather than guessing.");
218
- lines.push("");
219
- lines.push("## Subagent Spawning");
220
- lines.push("");
221
- lines.push("You may spawn subagents for research or exploration using the **Task** tool:");
222
- lines.push('- Use `subagent_type: "Explore"` for read-only research tasks (searching code, reading files).');
223
- lines.push('- Use `subagent_type: "general-purpose"` for tasks that require file edits or shell commands.');
224
- lines.push("- Always provide a clear, self-contained prompt — subagents do not share your conversation context.");
225
- lines.push("- Prefer subagents for tasks like: finding usage patterns, reading large files, running diagnostic commands.");
226
- lines.push("");
227
- }
228
- // Verification
229
- lines.push("## Verification");
230
- lines.push("");
231
- lines.push("After completing your work, verify:");
232
- lines.push("- `npx tsc --noEmit` passes");
233
- if (context.verificationCommands.length > 0) {
234
- for (const cmd of context.verificationCommands) {
235
- lines.push(`- \`${cmd}\``);
236
- }
237
- }
238
- lines.push("");
239
- // Git rules
240
- lines.push("## Git Rules");
241
- lines.push("");
242
- lines.push("- Stage only the files you created/modified (never use `git add .`)");
243
- lines.push("- Do not commit — the orchestrator handles commits");
244
- lines.push("- Use ES module imports with `.js` extension in import paths");
245
- lines.push("");
246
- return lines.join("\n");
247
- }
248
- // ---------------------------------------------------------------------------
249
- // Wave Execution Preparation
250
- // ---------------------------------------------------------------------------
251
- /**
252
- * Prepare all waves for execution.
253
- * Returns structured wave data with agent prompts ready for the skill
254
- * to pass to Claude Code's Task tool.
255
- */
256
- export function prepareWaves(context, existingCodeMap) {
257
- return context.waves.map((wave) => ({
258
- waveNumber: wave.waveNumber,
259
- agents: wave.agents.map((agent) => ({
260
- name: agent.name,
261
- task: agent.task,
262
- files: agent.files,
263
- prompt: buildAgentPrompt(agent, context, existingCodeMap?.get(agent.name)),
264
- })),
265
- }));
266
- }
267
- // ---------------------------------------------------------------------------
268
- // Verification
269
- // ---------------------------------------------------------------------------
270
- /**
271
- * Run forge verification pipeline after a wave completes.
272
- * Returns the pipeline result with human-readable report.
273
- */
274
- export async function runWaveVerification(options) {
275
- const { projectDir, config, prdPath } = options;
276
- // Filter out post-pipeline gates (codex is handled after PR creation, not during waves)
277
- const waveGates = config.gates?.filter((g) => g !== "codex");
278
- const pipelineInput = {
279
- projectDir,
280
- gates: waveGates,
281
- prdPath: config.prdPath ?? prdPath,
282
- maxIterations: config.maxIterations,
283
- devServerCommand: config.devServer?.command,
284
- devServerPort: config.devServer?.port,
285
- };
286
- const result = await runPipeline(pipelineInput);
287
- // Attach human-readable report
288
- if (!result.report) {
289
- result.report = formatHumanReport(result);
290
- }
291
- return result;
292
- }
293
- // ---------------------------------------------------------------------------
294
- // Result Tracking
295
- // ---------------------------------------------------------------------------
296
- /**
297
- * Create an empty execution result for a milestone.
298
- */
299
- export function createExecutionResult(context) {
300
- return {
301
- milestoneNumber: context.milestoneNumber,
302
- milestoneName: context.milestoneName,
303
- success: false,
304
- waves: [],
305
- totalFilesCreated: 0,
306
- totalFilesModified: 0,
307
- errors: [],
308
- };
309
- }
310
- /**
311
- * Record a completed wave's results into the execution result.
312
- */
313
- export function recordWaveResult(execution, waveResult) {
314
- const updatedWaves = [...execution.waves, waveResult];
315
- let totalCreated = 0;
316
- let totalModified = 0;
317
- const allErrors = [];
318
- for (const wave of updatedWaves) {
319
- for (const agent of wave.agents) {
320
- totalCreated += agent.filesCreated.length;
321
- totalModified += agent.filesModified.length;
322
- if (agent.error) {
323
- allErrors.push(`[${agent.name}] ${agent.error}`);
324
- }
325
- }
326
- if (wave.verification && !wave.verification.passed) {
327
- const failedGates = wave.verification.gates
328
- .filter((g) => !g.passed)
329
- .map((g) => g.gate);
330
- allErrors.push(`Wave ${wave.waveNumber} verification failed: ${failedGates.join(", ")}`);
331
- }
332
- }
333
- // Success = all waves complete + last wave verification passed (if any)
334
- const lastWave = updatedWaves[updatedWaves.length - 1];
335
- const lastVerificationPassed = lastWave?.verification?.passed ?? true;
336
- const allAgentsSucceeded = updatedWaves.every((w) => w.agents.every((a) => a.success));
337
- const success = allAgentsSucceeded && lastVerificationPassed;
338
- return {
339
- ...execution,
340
- waves: updatedWaves,
341
- success,
342
- totalFilesCreated: totalCreated,
343
- totalFilesModified: totalModified,
344
- errors: allErrors,
345
- };
346
- }
347
- // ---------------------------------------------------------------------------
348
- // Execution Orchestrator
349
- // ---------------------------------------------------------------------------
350
- /**
351
- * Execute a single milestone end-to-end.
352
- *
353
- * In dryRun mode: builds context and prompts, runs no verification, returns
354
- * the prepared execution plan.
355
- *
356
- * In normal mode: the caller (skill file) should use this module's functions
357
- * step by step:
358
- * 1. `buildMilestoneContext()` — read PRD and build context
359
- * 2. `prepareWaves()` — get agent prompts for each wave
360
- * 3. For each wave: spawn agents, collect results
361
- * 4. `runWaveVerification()` — verify after each wave
362
- * 5. `recordWaveResult()` — track results
363
- *
364
- * This `executeMilestone` function is the simplified orchestrator for
365
- * programmatic/testing use. For real execution, the skill drives each step.
366
- */
367
- export async function executeMilestone(options) {
368
- // 1. Build context
369
- const context = await buildMilestoneContext(options);
370
- // 2. Prepare waves
371
- const waves = prepareWaves(context);
372
- // 3. Create result tracker
373
- const result = createExecutionResult(context);
374
- if (options.dryRun) {
375
- // In dry run, return the plan without executing
376
- return { context, waves, result };
377
- }
378
- // In non-dry-run mode, the executor only runs verification.
379
- // Agent spawning is the caller's (skill's) responsibility.
380
- // This path is for programmatic testing only.
381
- return { context, waves, result };
382
- }
383
- // ---------------------------------------------------------------------------
384
- // Formatting
385
- // ---------------------------------------------------------------------------
386
- /**
387
- * Format an execution result as a human-readable summary.
388
- */
389
- export function formatExecutionSummary(result) {
390
- const lines = [];
391
- const status = result.success ? "COMPLETE" : "FAILED";
392
- lines.push(`## Milestone ${result.milestoneNumber}: ${result.milestoneName} -- ${status}`);
393
- lines.push("");
394
- // Wave summary
395
- for (const wave of result.waves) {
396
- const agentStatus = wave.agents
397
- .map((a) => `${a.name}: ${a.success ? "OK" : "FAIL"}`)
398
- .join(", ");
399
- const verifyStatus = wave.verification
400
- ? wave.verification.passed
401
- ? "PASSED"
402
- : "FAILED"
403
- : "SKIPPED";
404
- lines.push(`**Wave ${wave.waveNumber}:** ${agentStatus} | Verify: ${verifyStatus}`);
405
- }
406
- lines.push("");
407
- // Stats
408
- lines.push(`**Files Created:** ${result.totalFilesCreated}`);
409
- lines.push(`**Files Modified:** ${result.totalFilesModified}`);
410
- lines.push("");
411
- // Errors
412
- if (result.errors.length > 0) {
413
- lines.push("### Errors");
414
- for (const error of result.errors) {
415
- lines.push(`- ${error}`);
416
- }
417
- lines.push("");
418
- }
419
- return lines.join("\n");
420
- }
421
- /**
422
- * Format verification errors into a structured prompt for fix agents.
423
- * Used by the self-healing verify loop.
424
- */
425
- export function formatErrorsForFixAgent(verification) {
426
- const lines = [];
427
- lines.push("## Verification Errors to Fix");
428
- lines.push("");
429
- for (const gate of verification.gates) {
430
- if (gate.passed)
431
- continue;
432
- lines.push(`### ${gate.gate} Gate — FAILED`);
433
- for (const error of gate.errors) {
434
- const loc = error.file
435
- ? `${error.file}${error.line ? `:${error.line}` : ""}`
436
- : "";
437
- const prefix = loc ? `**${loc}:** ` : "";
438
- lines.push(`- ${prefix}${error.message}`);
439
- if (error.remediation) {
440
- lines.push(` > Fix: ${error.remediation}`);
441
- }
442
- }
443
- lines.push("");
444
- }
445
- return lines.join("\n");
446
- }
447
- //# sourceMappingURL=executor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/go/executor.ts"],"names":[],"mappings":"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"}
@@ -1,108 +0,0 @@
1
- /**
2
- * Final Milestone Detection and PR Creation
3
- *
4
- * Handles the transition from "last milestone complete" to "PR ready for review".
5
- * Uses `gh pr create` to open a pull request with a forge verification report
6
- * in the body. Designed to be called by the execution engine after the final
7
- * milestone passes verification.
8
- */
9
- import type { PipelineResult, GateResult, CodexComment } from "../types.js";
10
- export interface CreatePROptions {
11
- projectDir: string;
12
- branch: string;
13
- baseBranch?: string;
14
- title: string;
15
- milestones: Array<{
16
- number: number;
17
- name: string;
18
- success: boolean;
19
- }>;
20
- verificationReport?: string;
21
- commitSha?: string;
22
- linearIssueIdentifiers?: string[];
23
- }
24
- export interface PRResult {
25
- url: string;
26
- number: number;
27
- title: string;
28
- created: boolean;
29
- }
30
- export interface PRError {
31
- url: "";
32
- number: 0;
33
- title: string;
34
- created: false;
35
- error: string;
36
- }
37
- export interface FinalizeWithCodexOptions extends CreatePROptions {
38
- /** GitHub owner/org for the repo */
39
- owner: string;
40
- /** GitHub repo name */
41
- repo: string;
42
- /** Codex gate poll interval in milliseconds (default: 60_000) */
43
- codexPollIntervalMs?: number;
44
- /** Maximum number of poll cycles (default: 8) */
45
- codexMaxPolls?: number;
46
- /** Called for each unresolved PR comment; return true if fix was pushed */
47
- onFixComment?: (comment: CodexComment) => Promise<boolean>;
48
- }
49
- export interface FinalizeResult {
50
- pr: PRResult | PRError;
51
- codexGate?: GateResult;
52
- allCommentsResolved: boolean;
53
- }
54
- /**
55
- * Extract the owner and repo name from the current Git remote using `gh`.
56
- * Returns `null` if `gh` is unavailable or the command fails.
57
- */
58
- export declare function extractRepoInfo(projectDir: string): {
59
- owner: string;
60
- repo: string;
61
- } | null;
62
- /**
63
- * Poll for Codex review comments on a PR and attempt to resolve them
64
- * using the provided `onFixComment` callback. Returns the list of
65
- * comments that remain unresolved after the fix cycle.
66
- */
67
- export declare function pollAndResolvePRComments(options: {
68
- owner: string;
69
- repo: string;
70
- prNumber: number;
71
- projectDir?: string;
72
- pollIntervalMs?: number;
73
- maxPolls?: number;
74
- onFixComment?: (comment: CodexComment) => Promise<boolean>;
75
- }): Promise<{
76
- unresolved: CodexComment[];
77
- gateResult: GateResult;
78
- }>;
79
- /**
80
- * Create a PR and run the Codex review gate. The milestone only marks
81
- * complete when 0 unresolved PR comments remain. If the Codex gate
82
- * times out with no comments, the milestone still completes (gate is
83
- * optional).
84
- */
85
- export declare function finalizeWithCodexGate(options: FinalizeWithCodexOptions): Promise<FinalizeResult>;
86
- /**
87
- * Generate a PR title summarizing all completed milestones.
88
- *
89
- * Examples:
90
- * - `feat: my-project — Milestone 1 complete`
91
- * - `feat: my-project — Milestones 1-5 complete`
92
- */
93
- export declare function buildPRTitle(project: string, milestoneCount: number): string;
94
- /**
95
- * Format a PipelineResult into a PR-ready verification section.
96
- *
97
- * Includes gate-level pass/fail status with error counts and
98
- * duration information. Designed to be embedded in a PR body.
99
- */
100
- export declare function buildVerificationSection(result: PipelineResult): string;
101
- /**
102
- * Create a GitHub pull request using the `gh` CLI.
103
- *
104
- * Builds a structured PR body with milestone status, verification report,
105
- * and metadata, then calls `gh pr create`. If `gh` is not installed or the
106
- * command fails, returns a descriptive error result instead of throwing.
107
- */
108
- export declare function createPullRequest(options: CreatePROptions): PRResult | PRError;