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/executor.js
DELETED
|
@@ -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
|
package/dist/go/executor.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/go/executor.ts"],"names":[],"mappings":"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"}
|
package/dist/go/finalize.d.ts
DELETED
|
@@ -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;
|