@alevental/cccp 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/skills/cccp-pipeline/SKILL.md +562 -0
- package/.claude/skills/cccp-run/SKILL.md +111 -0
- package/README.md +280 -0
- package/dist/activity-bus.d.ts +9 -0
- package/dist/activity-bus.js +10 -0
- package/dist/activity-bus.js.map +1 -0
- package/dist/agent-resolver.d.ts +29 -0
- package/dist/agent-resolver.js +122 -0
- package/dist/agent-resolver.js.map +1 -0
- package/dist/agent.d.ts +39 -0
- package/dist/agent.js +117 -0
- package/dist/agent.js.map +1 -0
- package/dist/autoresearch.d.ts +11 -0
- package/dist/autoresearch.js +295 -0
- package/dist/autoresearch.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +157 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +126 -0
- package/dist/config.js +76 -0
- package/dist/config.js.map +1 -0
- package/dist/context.d.ts +24 -0
- package/dist/context.js +82 -0
- package/dist/context.js.map +1 -0
- package/dist/contract.d.ts +26 -0
- package/dist/contract.js +65 -0
- package/dist/contract.js.map +1 -0
- package/dist/db.d.ts +70 -0
- package/dist/db.js +358 -0
- package/dist/db.js.map +1 -0
- package/dist/dispatcher.d.ts +9 -0
- package/dist/dispatcher.js +7 -0
- package/dist/dispatcher.js.map +1 -0
- package/dist/errors.d.ts +16 -0
- package/dist/errors.js +30 -0
- package/dist/errors.js.map +1 -0
- package/dist/evaluator.d.ts +23 -0
- package/dist/evaluator.js +49 -0
- package/dist/evaluator.js.map +1 -0
- package/dist/gate/auto-approve.d.ts +9 -0
- package/dist/gate/auto-approve.js +11 -0
- package/dist/gate/auto-approve.js.map +1 -0
- package/dist/gate/gate-strategy.d.ts +22 -0
- package/dist/gate/gate-strategy.js +2 -0
- package/dist/gate/gate-strategy.js.map +1 -0
- package/dist/gate/gate-watcher.d.ts +15 -0
- package/dist/gate/gate-watcher.js +64 -0
- package/dist/gate/gate-watcher.js.map +1 -0
- package/dist/logger.d.ts +24 -0
- package/dist/logger.js +22 -0
- package/dist/logger.js.map +1 -0
- package/dist/mcp/gate-notifier.d.ts +26 -0
- package/dist/mcp/gate-notifier.js +161 -0
- package/dist/mcp/gate-notifier.js.map +1 -0
- package/dist/mcp/mcp-config.d.ts +25 -0
- package/dist/mcp/mcp-config.js +80 -0
- package/dist/mcp/mcp-config.js.map +1 -0
- package/dist/mcp/mcp-server.d.ts +1 -0
- package/dist/mcp/mcp-server.js +262 -0
- package/dist/mcp/mcp-server.js.map +1 -0
- package/dist/pge.d.ts +12 -0
- package/dist/pge.js +361 -0
- package/dist/pge.js.map +1 -0
- package/dist/pipeline.d.ts +6 -0
- package/dist/pipeline.js +120 -0
- package/dist/pipeline.js.map +1 -0
- package/dist/prompt.d.ts +67 -0
- package/dist/prompt.js +121 -0
- package/dist/prompt.js.map +1 -0
- package/dist/runner.d.ts +11 -0
- package/dist/runner.js +494 -0
- package/dist/runner.js.map +1 -0
- package/dist/scaffold/index.d.ts +14 -0
- package/dist/scaffold/index.js +260 -0
- package/dist/scaffold/index.js.map +1 -0
- package/dist/scaffold/templates.d.ts +47 -0
- package/dist/scaffold/templates.js +2177 -0
- package/dist/scaffold/templates.js.map +1 -0
- package/dist/stage-helpers.d.ts +7 -0
- package/dist/stage-helpers.js +27 -0
- package/dist/stage-helpers.js.map +1 -0
- package/dist/state.d.ts +43 -0
- package/dist/state.js +177 -0
- package/dist/state.js.map +1 -0
- package/dist/stream/stream-tail.d.ts +17 -0
- package/dist/stream/stream-tail.js +95 -0
- package/dist/stream/stream-tail.js.map +1 -0
- package/dist/stream/stream.d.ts +142 -0
- package/dist/stream/stream.js +251 -0
- package/dist/stream/stream.js.map +1 -0
- package/dist/temp-tracker.d.ts +6 -0
- package/dist/temp-tracker.js +24 -0
- package/dist/temp-tracker.js.map +1 -0
- package/dist/tui/cmux.d.ts +22 -0
- package/dist/tui/cmux.js +82 -0
- package/dist/tui/cmux.js.map +1 -0
- package/dist/tui/components.d.ts +21 -0
- package/dist/tui/components.js +108 -0
- package/dist/tui/components.js.map +1 -0
- package/dist/tui/dashboard.d.ts +6 -0
- package/dist/tui/dashboard.js +125 -0
- package/dist/tui/dashboard.js.map +1 -0
- package/dist/tui/detail-log.d.ts +10 -0
- package/dist/tui/detail-log.js +171 -0
- package/dist/tui/detail-log.js.map +1 -0
- package/dist/types.d.ts +273 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/examples/agents/diff-evaluator.md +57 -0
- package/examples/agents/prompt-tuner.md +30 -0
- package/examples/agents/summarizer.md +14 -0
- package/examples/autoresearch-artifacts/expected-output.md +17 -0
- package/examples/autoresearch-artifacts/prompt.md +35 -0
- package/examples/autoresearch-artifacts/source-material.md +28 -0
- package/examples/business-case.yaml +41 -0
- package/examples/cccp.yaml +48 -0
- package/examples/content-calendar.yaml +59 -0
- package/examples/customer-feedback-loop.yaml +44 -0
- package/examples/design-sprint.yaml +54 -0
- package/examples/feature-development.yaml +96 -0
- package/examples/growth-experiment.yaml +49 -0
- package/examples/incident-runbook.yaml +43 -0
- package/examples/product-launch.yaml +85 -0
- package/examples/prompt-tuning.yaml +25 -0
- package/examples/quarterly-planning.yaml +51 -0
- package/examples/sprint-cycle.yaml +67 -0
- package/package.json +47 -0
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
import { resolve } from "node:path";
|
|
2
|
+
import { copyFile, mkdir } from "node:fs/promises";
|
|
3
|
+
import { activityBus } from "./activity-bus.js";
|
|
4
|
+
import { DefaultAgentDispatcher } from "./dispatcher.js";
|
|
5
|
+
import { parseEvaluation } from "./evaluator.js";
|
|
6
|
+
import { AgentCrashError, MissingOutputError } from "./errors.js";
|
|
7
|
+
import { ConsoleLogger } from "./logger.js";
|
|
8
|
+
import { interpolate, resolveTaskBody, buildTaskContext, writeSystemPromptFile, } from "./prompt.js";
|
|
9
|
+
import { mergeInputs, resolveAndLoad } from "./stage-helpers.js";
|
|
10
|
+
import { updatePgeProgress, setStageArtifact } from "./state.js";
|
|
11
|
+
function getLogger(ctx) {
|
|
12
|
+
return ctx.logger ?? new ConsoleLogger();
|
|
13
|
+
}
|
|
14
|
+
function getDispatcher(ctx) {
|
|
15
|
+
return ctx.dispatcher ?? new DefaultAgentDispatcher();
|
|
16
|
+
}
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
// Autoresearch cycle
|
|
19
|
+
// ---------------------------------------------------------------------------
|
|
20
|
+
/**
|
|
21
|
+
* Execute a full Adjust-Execute-Evaluate cycle for an autoresearch stage.
|
|
22
|
+
*
|
|
23
|
+
* 1. [iter > 1] Dispatch adjuster → modifies the artifact
|
|
24
|
+
* 2. Dispatch executor → produces output using current artifact
|
|
25
|
+
* 3. Dispatch evaluator → compares output against ground truth
|
|
26
|
+
* 4. Parse evaluation (regex on ### Overall: PASS/FAIL)
|
|
27
|
+
* 5. Route: PASS → done, FAIL + max reached → escalate, FAIL → continue
|
|
28
|
+
*/
|
|
29
|
+
export async function runAutoresearchCycle(stage, ctx, state, onProgress) {
|
|
30
|
+
const start = Date.now();
|
|
31
|
+
const vars = { ...ctx.variables, ...(stage.variables ?? {}) };
|
|
32
|
+
const maxIter = stage.max_iterations; // undefined = unlimited
|
|
33
|
+
const artifactPath = resolve(ctx.projectDir, interpolate(stage.artifact, vars));
|
|
34
|
+
const groundTruthPath = resolve(ctx.projectDir, interpolate(stage.ground_truth, vars));
|
|
35
|
+
const outputPath = resolve(ctx.projectDir, interpolate(stage.output, vars));
|
|
36
|
+
const stageDir = resolve(ctx.artifactDir, stage.name);
|
|
37
|
+
await mkdir(stageDir, { recursive: true });
|
|
38
|
+
// --- Dry-run ---
|
|
39
|
+
if (ctx.dryRun) {
|
|
40
|
+
const logger = getLogger(ctx);
|
|
41
|
+
logger.log("\n[dry-run] Autoresearch Stage:", stage.name);
|
|
42
|
+
logger.log(" artifact: ", artifactPath);
|
|
43
|
+
logger.log(" ground_truth: ", groundTruthPath);
|
|
44
|
+
logger.log(" output: ", outputPath);
|
|
45
|
+
logger.log(" adjuster: ", stage.adjuster.agent);
|
|
46
|
+
logger.log(" executor: ", stage.executor.agent);
|
|
47
|
+
logger.log(" evaluator: ", stage.evaluator.agent);
|
|
48
|
+
logger.log(" max_iters: ", maxIter ?? "unlimited");
|
|
49
|
+
logger.log(" on_fail: ", stage.on_fail ?? "stop");
|
|
50
|
+
return {
|
|
51
|
+
outcome: "pass",
|
|
52
|
+
iterations: 0,
|
|
53
|
+
maxIterations: maxIter,
|
|
54
|
+
artifactPath,
|
|
55
|
+
outputPath,
|
|
56
|
+
durationMs: 0,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
// --- Resolve all agents ---
|
|
60
|
+
const adjAgent = await resolveAndLoad(stage.adjuster, ctx, stage.mcp_profile);
|
|
61
|
+
const execAgent = await resolveAndLoad(stage.executor, ctx, stage.mcp_profile);
|
|
62
|
+
const evalAgent = await resolveAndLoad(stage.evaluator, ctx, stage.mcp_profile);
|
|
63
|
+
// Save initial artifact version
|
|
64
|
+
const artifactV0 = resolve(stageDir, "artifact-v0.md");
|
|
65
|
+
await copyFile(artifactPath, artifactV0);
|
|
66
|
+
setStageArtifact(state, stage.name, "artifact-v0", artifactV0);
|
|
67
|
+
await onProgress?.("autoresearch_start", {
|
|
68
|
+
adjuster: stage.adjuster.agent,
|
|
69
|
+
executor: stage.executor.agent,
|
|
70
|
+
evaluator: stage.evaluator.agent,
|
|
71
|
+
artifact: artifactPath,
|
|
72
|
+
groundTruth: groundTruthPath,
|
|
73
|
+
maxIterations: maxIter ?? null,
|
|
74
|
+
});
|
|
75
|
+
// --- Resolve task body (file or inline) ---
|
|
76
|
+
const taskBody = await resolveTaskBody(stage, vars, `Execute the task using the artifact at ${artifactPath}`);
|
|
77
|
+
// --- AEE Iteration loop ---
|
|
78
|
+
let lastEvalPath;
|
|
79
|
+
for (let iter = 1; maxIter === undefined || iter <= maxIter; iter++) {
|
|
80
|
+
getLogger(ctx).log(` iteration ${iter}${maxIter ? `/${maxIter}` : ""}`);
|
|
81
|
+
const evalPath = resolve(stageDir, `evaluation-${iter}.md`);
|
|
82
|
+
// --- Step 1: Dispatch adjuster (skip on iteration 1) ---
|
|
83
|
+
if (iter > 1) {
|
|
84
|
+
getLogger(ctx).log(` dispatching adjuster: ${stage.adjuster.agent}`);
|
|
85
|
+
await onProgress?.("autoresearch_adjuster_start", {
|
|
86
|
+
iteration: iter, maxIterations: maxIter ?? null, agent: stage.adjuster.agent,
|
|
87
|
+
});
|
|
88
|
+
const adjSystemFile = await writeSystemPromptFile(adjAgent.markdown, ctx.tempTracker);
|
|
89
|
+
const adjInputs = mergeInputs(stage.inputs, stage.adjuster.inputs, vars, [artifactPath, groundTruthPath]);
|
|
90
|
+
const adjPrompt = buildTaskContext({
|
|
91
|
+
task: `Adjust the artifact to improve results. Original task: ${taskBody}`,
|
|
92
|
+
groundTruthPath,
|
|
93
|
+
inputs: adjInputs.length > 0 ? adjInputs : undefined,
|
|
94
|
+
output: artifactPath,
|
|
95
|
+
previousEvaluation: lastEvalPath,
|
|
96
|
+
iteration: iter,
|
|
97
|
+
maxIterations: maxIter,
|
|
98
|
+
});
|
|
99
|
+
const adjResult = await getDispatcher(ctx).dispatch({
|
|
100
|
+
userPrompt: adjPrompt,
|
|
101
|
+
systemPromptFile: adjSystemFile,
|
|
102
|
+
mcpConfigFile: adjAgent.mcpFile,
|
|
103
|
+
expectedOutput: artifactPath,
|
|
104
|
+
cwd: ctx.projectDir,
|
|
105
|
+
allowedTools: stage.adjuster.allowed_tools,
|
|
106
|
+
claudeConfigDir: ctx.projectConfig?.claude_config_dir,
|
|
107
|
+
permissionMode: ctx.projectConfig?.permission_mode,
|
|
108
|
+
agentName: `${stage.name}-adjuster`,
|
|
109
|
+
streamLogDir: resolve(ctx.artifactDir, ".cccp"),
|
|
110
|
+
onActivity: (activity) => activityBus.emit("activity", activity),
|
|
111
|
+
quiet: ctx.quiet,
|
|
112
|
+
});
|
|
113
|
+
if (adjResult.exitCode !== 0) {
|
|
114
|
+
throw new AgentCrashError(stage.adjuster.agent, adjResult.exitCode);
|
|
115
|
+
}
|
|
116
|
+
if (!adjResult.outputExists) {
|
|
117
|
+
throw new MissingOutputError(stage.adjuster.agent, artifactPath);
|
|
118
|
+
}
|
|
119
|
+
// Version the adjusted artifact
|
|
120
|
+
const artifactVersionPath = resolve(stageDir, `artifact-v${iter}.md`);
|
|
121
|
+
await copyFile(artifactPath, artifactVersionPath);
|
|
122
|
+
setStageArtifact(state, stage.name, `artifact-v${iter}`, artifactVersionPath);
|
|
123
|
+
updatePgeProgress(state, stage.name, iter, "adjuster_dispatched");
|
|
124
|
+
await onProgress?.("autoresearch_adjuster_done", {
|
|
125
|
+
iteration: iter, maxIterations: maxIter ?? null,
|
|
126
|
+
agent: stage.adjuster.agent, artifactPath,
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
// --- Step 2: Dispatch executor ---
|
|
130
|
+
getLogger(ctx).log(` dispatching executor: ${stage.executor.agent}`);
|
|
131
|
+
await onProgress?.("autoresearch_executor_start", {
|
|
132
|
+
iteration: iter, maxIterations: maxIter ?? null, agent: stage.executor.agent,
|
|
133
|
+
});
|
|
134
|
+
const execSystemFile = await writeSystemPromptFile(execAgent.markdown, ctx.tempTracker);
|
|
135
|
+
const execInputs = mergeInputs(stage.inputs, stage.executor.inputs, vars, [artifactPath]);
|
|
136
|
+
const execPrompt = buildTaskContext({
|
|
137
|
+
task: taskBody,
|
|
138
|
+
inputs: execInputs.length > 0 ? execInputs : undefined,
|
|
139
|
+
output: interpolate(stage.output, vars),
|
|
140
|
+
iteration: iter,
|
|
141
|
+
maxIterations: maxIter,
|
|
142
|
+
});
|
|
143
|
+
const execResult = await getDispatcher(ctx).dispatch({
|
|
144
|
+
userPrompt: execPrompt,
|
|
145
|
+
systemPromptFile: execSystemFile,
|
|
146
|
+
mcpConfigFile: execAgent.mcpFile,
|
|
147
|
+
expectedOutput: outputPath,
|
|
148
|
+
cwd: ctx.projectDir,
|
|
149
|
+
allowedTools: stage.executor.allowed_tools,
|
|
150
|
+
claudeConfigDir: ctx.projectConfig?.claude_config_dir,
|
|
151
|
+
permissionMode: ctx.projectConfig?.permission_mode,
|
|
152
|
+
agentName: `${stage.name}-executor`,
|
|
153
|
+
streamLogDir: resolve(ctx.artifactDir, ".cccp"),
|
|
154
|
+
onActivity: (activity) => activityBus.emit("activity", activity),
|
|
155
|
+
quiet: ctx.quiet,
|
|
156
|
+
});
|
|
157
|
+
if (execResult.exitCode !== 0) {
|
|
158
|
+
throw new AgentCrashError(stage.executor.agent, execResult.exitCode);
|
|
159
|
+
}
|
|
160
|
+
if (!execResult.outputExists) {
|
|
161
|
+
throw new MissingOutputError(stage.executor.agent, interpolate(stage.output, vars));
|
|
162
|
+
}
|
|
163
|
+
updatePgeProgress(state, stage.name, iter, "executor_dispatched");
|
|
164
|
+
setStageArtifact(state, stage.name, "output", outputPath);
|
|
165
|
+
await onProgress?.("autoresearch_executor_done", {
|
|
166
|
+
iteration: iter, maxIterations: maxIter ?? null,
|
|
167
|
+
agent: stage.executor.agent, outputPath,
|
|
168
|
+
});
|
|
169
|
+
// --- Step 3: Dispatch evaluator ---
|
|
170
|
+
getLogger(ctx).log(` dispatching evaluator: ${stage.evaluator.agent}`);
|
|
171
|
+
await onProgress?.("autoresearch_evaluator_start", {
|
|
172
|
+
iteration: iter, maxIterations: maxIter ?? null, agent: stage.evaluator.agent,
|
|
173
|
+
});
|
|
174
|
+
const evalSystemFile = await writeSystemPromptFile(evalAgent.markdown, ctx.tempTracker);
|
|
175
|
+
const evalInputs = mergeInputs(stage.inputs, stage.evaluator.inputs, vars, [interpolate(stage.output, vars), groundTruthPath]);
|
|
176
|
+
const evalPrompt = buildTaskContext({
|
|
177
|
+
task: `Evaluate the output against the ground truth for: ${stage.name}`,
|
|
178
|
+
groundTruthPath,
|
|
179
|
+
inputs: evalInputs.length > 0 ? evalInputs : undefined,
|
|
180
|
+
output: evalPath,
|
|
181
|
+
iteration: iter,
|
|
182
|
+
maxIterations: maxIter,
|
|
183
|
+
evaluatorFormat: true,
|
|
184
|
+
});
|
|
185
|
+
const evalResult = await getDispatcher(ctx).dispatch({
|
|
186
|
+
userPrompt: evalPrompt,
|
|
187
|
+
systemPromptFile: evalSystemFile,
|
|
188
|
+
mcpConfigFile: evalAgent.mcpFile,
|
|
189
|
+
expectedOutput: evalPath,
|
|
190
|
+
cwd: ctx.projectDir,
|
|
191
|
+
allowedTools: stage.evaluator.allowed_tools,
|
|
192
|
+
claudeConfigDir: ctx.projectConfig?.claude_config_dir,
|
|
193
|
+
permissionMode: ctx.projectConfig?.permission_mode,
|
|
194
|
+
agentName: `${stage.name}-evaluator`,
|
|
195
|
+
streamLogDir: resolve(ctx.artifactDir, ".cccp"),
|
|
196
|
+
onActivity: (activity) => activityBus.emit("activity", activity),
|
|
197
|
+
quiet: ctx.quiet,
|
|
198
|
+
});
|
|
199
|
+
if (evalResult.exitCode !== 0) {
|
|
200
|
+
throw new AgentCrashError(stage.evaluator.agent, evalResult.exitCode);
|
|
201
|
+
}
|
|
202
|
+
if (!evalResult.outputExists) {
|
|
203
|
+
throw new MissingOutputError(stage.evaluator.agent, evalPath);
|
|
204
|
+
}
|
|
205
|
+
updatePgeProgress(state, stage.name, iter, "evaluator_dispatched");
|
|
206
|
+
setStageArtifact(state, stage.name, `evaluation-${iter}`, evalPath);
|
|
207
|
+
await onProgress?.("autoresearch_evaluator_done", {
|
|
208
|
+
iteration: iter, maxIterations: maxIter ?? null,
|
|
209
|
+
agent: stage.evaluator.agent, evaluationPath: evalPath,
|
|
210
|
+
});
|
|
211
|
+
// --- Step 4: Parse evaluation ---
|
|
212
|
+
const evaluation = await parseEvaluation(evalPath);
|
|
213
|
+
if (evaluation.outcome === "parse_error") {
|
|
214
|
+
getLogger(ctx).error(` evaluation parse error: ${evaluation.error}`);
|
|
215
|
+
await onProgress?.("autoresearch_evaluation", {
|
|
216
|
+
iteration: iter, maxIterations: maxIter ?? null,
|
|
217
|
+
outcome: "parse_error", error: evaluation.error,
|
|
218
|
+
});
|
|
219
|
+
return {
|
|
220
|
+
outcome: "error",
|
|
221
|
+
iterations: iter,
|
|
222
|
+
maxIterations: maxIter,
|
|
223
|
+
evaluationPath: evalPath,
|
|
224
|
+
artifactPath,
|
|
225
|
+
outputPath,
|
|
226
|
+
durationMs: Date.now() - start,
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
// --- Step 5: Route ---
|
|
230
|
+
updatePgeProgress(state, stage.name, iter, "routed");
|
|
231
|
+
if (evaluation.outcome === "pass") {
|
|
232
|
+
getLogger(ctx).log(` evaluation: PASS`);
|
|
233
|
+
await onProgress?.("autoresearch_evaluation", {
|
|
234
|
+
iteration: iter, maxIterations: maxIter ?? null,
|
|
235
|
+
outcome: "pass",
|
|
236
|
+
evaluationContent: evaluation.content ?? "",
|
|
237
|
+
evaluationPath: evalPath,
|
|
238
|
+
rawLine: evaluation.rawLine,
|
|
239
|
+
});
|
|
240
|
+
return {
|
|
241
|
+
outcome: "pass",
|
|
242
|
+
iterations: iter,
|
|
243
|
+
maxIterations: maxIter,
|
|
244
|
+
evaluationPath: evalPath,
|
|
245
|
+
artifactPath,
|
|
246
|
+
outputPath,
|
|
247
|
+
durationMs: Date.now() - start,
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
// FAIL
|
|
251
|
+
getLogger(ctx).log(` evaluation: FAIL`);
|
|
252
|
+
lastEvalPath = evalPath;
|
|
253
|
+
if (maxIter !== undefined && iter === maxIter) {
|
|
254
|
+
getLogger(ctx).log(` max iterations reached — escalating (${stage.on_fail ?? "stop"})`);
|
|
255
|
+
await onProgress?.("autoresearch_evaluation", {
|
|
256
|
+
iteration: iter, maxIterations: maxIter,
|
|
257
|
+
outcome: "fail",
|
|
258
|
+
evaluationContent: evaluation.content ?? "",
|
|
259
|
+
evaluationPath: evalPath,
|
|
260
|
+
rawLine: evaluation.rawLine,
|
|
261
|
+
willRetry: false,
|
|
262
|
+
escalation: stage.on_fail ?? "stop",
|
|
263
|
+
});
|
|
264
|
+
return {
|
|
265
|
+
outcome: "fail",
|
|
266
|
+
iterations: iter,
|
|
267
|
+
maxIterations: maxIter,
|
|
268
|
+
evaluationPath: evalPath,
|
|
269
|
+
artifactPath,
|
|
270
|
+
outputPath,
|
|
271
|
+
durationMs: Date.now() - start,
|
|
272
|
+
};
|
|
273
|
+
}
|
|
274
|
+
getLogger(ctx).log(` retrying...`);
|
|
275
|
+
await onProgress?.("autoresearch_evaluation", {
|
|
276
|
+
iteration: iter, maxIterations: maxIter ?? null,
|
|
277
|
+
outcome: "fail",
|
|
278
|
+
evaluationContent: evaluation.content ?? "",
|
|
279
|
+
evaluationPath: evalPath,
|
|
280
|
+
rawLine: evaluation.rawLine,
|
|
281
|
+
willRetry: true,
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
// Should only reach here if maxIter is set (loop condition handles it),
|
|
285
|
+
// but TypeScript needs the return.
|
|
286
|
+
return {
|
|
287
|
+
outcome: "error",
|
|
288
|
+
iterations: maxIter ?? 0,
|
|
289
|
+
maxIterations: maxIter,
|
|
290
|
+
artifactPath,
|
|
291
|
+
outputPath,
|
|
292
|
+
durationMs: Date.now() - start,
|
|
293
|
+
};
|
|
294
|
+
}
|
|
295
|
+
//# sourceMappingURL=autoresearch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autoresearch.js","sourceRoot":"","sources":["../src/autoresearch.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts
ADDED
package/dist/cli.js
ADDED
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { resolve } from "node:path";
|
|
3
|
+
import { Command } from "commander";
|
|
4
|
+
import { loadProjectConfig } from "./config.js";
|
|
5
|
+
import { loadPipeline } from "./pipeline.js";
|
|
6
|
+
import { runPipeline } from "./runner.js";
|
|
7
|
+
import { buildRunContext, resolveArtifactDir, parseCLIVars } from "./context.js";
|
|
8
|
+
const program = new Command();
|
|
9
|
+
program
|
|
10
|
+
.name("cccp")
|
|
11
|
+
.description("Claude Code and Cmux Pipeline Reagent — deterministic YAML-based pipeline orchestration")
|
|
12
|
+
.version("0.1.0");
|
|
13
|
+
program
|
|
14
|
+
.command("run")
|
|
15
|
+
.description("Run a pipeline from a YAML definition")
|
|
16
|
+
.requiredOption("-f, --file <path>", "Path to the pipeline YAML file")
|
|
17
|
+
.requiredOption("-p, --project <name>", "Project name")
|
|
18
|
+
.option("-d, --project-dir <path>", "Project directory (defaults to cwd)")
|
|
19
|
+
.option("-a, --artifact-dir <path>", "Artifact output directory (overrides cccp.yaml and default)")
|
|
20
|
+
.option("--dry-run", "Show assembled prompts without executing agents")
|
|
21
|
+
.option("--headless", "Auto-approve all gates (no human interaction)")
|
|
22
|
+
.option("-v, --var <key=value...>", "Set pipeline variables (repeatable)")
|
|
23
|
+
.action(async (opts) => {
|
|
24
|
+
const pipelineFile = resolve(opts.file);
|
|
25
|
+
const projectDir = resolve(opts.projectDir ?? process.cwd());
|
|
26
|
+
const projectConfig = await loadProjectConfig(projectDir);
|
|
27
|
+
const pipeline = await loadPipeline(pipelineFile);
|
|
28
|
+
let cliVars;
|
|
29
|
+
try {
|
|
30
|
+
cliVars = parseCLIVars(opts.var);
|
|
31
|
+
}
|
|
32
|
+
catch (err) {
|
|
33
|
+
console.error(err.message);
|
|
34
|
+
process.exit(1);
|
|
35
|
+
}
|
|
36
|
+
const artifactDir = resolveArtifactDir({
|
|
37
|
+
artifactDir: opts.artifactDir,
|
|
38
|
+
projectDir,
|
|
39
|
+
projectConfig,
|
|
40
|
+
project: opts.project,
|
|
41
|
+
pipelineName: pipeline.name,
|
|
42
|
+
});
|
|
43
|
+
const showTui = !opts.headless && !opts.dryRun;
|
|
44
|
+
const ctx = buildRunContext({
|
|
45
|
+
project: opts.project,
|
|
46
|
+
projectDir,
|
|
47
|
+
pipelineFile,
|
|
48
|
+
pipeline,
|
|
49
|
+
artifactDir,
|
|
50
|
+
projectConfig,
|
|
51
|
+
dryRun: opts.dryRun,
|
|
52
|
+
headless: opts.headless,
|
|
53
|
+
showTui,
|
|
54
|
+
cliVars,
|
|
55
|
+
});
|
|
56
|
+
if (showTui) {
|
|
57
|
+
const { createState, saveState } = await import("./state.js");
|
|
58
|
+
const { startDashboard } = await import("./tui/dashboard.js");
|
|
59
|
+
// Create initial state so the dashboard has something to render.
|
|
60
|
+
const initialState = createState(pipeline.name, opts.project, pipelineFile, pipeline.stages.map((s) => ({ name: s.name, type: s.type })), artifactDir, projectDir);
|
|
61
|
+
await saveState(initialState);
|
|
62
|
+
// Start dashboard, then run pipeline. Dashboard watches state.json.
|
|
63
|
+
const dashboard = startDashboard(initialState.runId, projectDir, initialState);
|
|
64
|
+
const result = await runPipeline(ctx, { existingState: initialState });
|
|
65
|
+
// Brief pause for final render, then unmount.
|
|
66
|
+
await new Promise((r) => setTimeout(r, 500));
|
|
67
|
+
dashboard.unmount();
|
|
68
|
+
process.exit(result.status === "passed" ? 0 : 1);
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
const result = await runPipeline(ctx);
|
|
72
|
+
process.exit(result.status === "passed" ? 0 : 1);
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
program
|
|
76
|
+
.command("resume")
|
|
77
|
+
.description("Resume an interrupted pipeline run")
|
|
78
|
+
.requiredOption("-p, --project <name>", "Project name")
|
|
79
|
+
.requiredOption("-r, --run <id-prefix>", "Run ID or prefix (8+ chars) to resume")
|
|
80
|
+
.option("-d, --project-dir <path>", "Project directory (defaults to cwd)")
|
|
81
|
+
.option("--headless", "Auto-approve all gates")
|
|
82
|
+
.action(async (opts) => {
|
|
83
|
+
const projectDir = resolve(opts.projectDir ?? process.cwd());
|
|
84
|
+
const projectConfig = await loadProjectConfig(projectDir);
|
|
85
|
+
const { openDatabase } = await import("./db.js");
|
|
86
|
+
const db = await openDatabase(projectDir);
|
|
87
|
+
const existingState = db.getRunByIdPrefix(opts.run);
|
|
88
|
+
if (!existingState) {
|
|
89
|
+
console.error(`No run matching "${opts.run}". Use \`cccp runs\` to list available runs.`);
|
|
90
|
+
process.exit(1);
|
|
91
|
+
}
|
|
92
|
+
console.log(`Resuming run ${existingState.runId.slice(0, 8)}: pipeline "${existingState.pipeline}", ` +
|
|
93
|
+
`status "${existingState.status}", started ${existingState.startedAt}`);
|
|
94
|
+
const pipelineFile = resolve(existingState.pipelineFile);
|
|
95
|
+
const pipeline = await loadPipeline(pipelineFile);
|
|
96
|
+
const ctx = buildRunContext({
|
|
97
|
+
project: opts.project,
|
|
98
|
+
projectDir,
|
|
99
|
+
pipelineFile,
|
|
100
|
+
pipeline,
|
|
101
|
+
artifactDir: existingState.artifactDir,
|
|
102
|
+
projectConfig,
|
|
103
|
+
headless: opts.headless,
|
|
104
|
+
});
|
|
105
|
+
const result = await runPipeline(ctx, { existingState });
|
|
106
|
+
process.exit(result.status === "passed" ? 0 : 1);
|
|
107
|
+
});
|
|
108
|
+
program
|
|
109
|
+
.command("dashboard")
|
|
110
|
+
.description("Launch the TUI dashboard to monitor a running pipeline")
|
|
111
|
+
.requiredOption("-r, --run <id-prefix>", "Run ID or prefix (8+ chars) to monitor")
|
|
112
|
+
.option("-d, --project-dir <path>", "Project directory (defaults to cwd)")
|
|
113
|
+
.action(async (opts) => {
|
|
114
|
+
const dashProjectDir = resolve(opts.projectDir ?? process.cwd());
|
|
115
|
+
const { openDatabase } = await import("./db.js");
|
|
116
|
+
const db = await openDatabase(dashProjectDir);
|
|
117
|
+
const existingState = db.getRunByIdPrefix(opts.run);
|
|
118
|
+
if (!existingState) {
|
|
119
|
+
console.error(`No run matching "${opts.run}". Use \`cccp runs\` to list available runs.`);
|
|
120
|
+
process.exit(1);
|
|
121
|
+
}
|
|
122
|
+
const { launchDashboard } = await import("./tui/dashboard.js");
|
|
123
|
+
await launchDashboard(existingState.runId, dashProjectDir, existingState);
|
|
124
|
+
});
|
|
125
|
+
program
|
|
126
|
+
.command("mcp-server")
|
|
127
|
+
.description("Start the CCCP MCP server. Exposes pipeline runs, status, gate interaction, " +
|
|
128
|
+
"logs, and artifacts. Register in .mcp.json for Claude Code integration.")
|
|
129
|
+
.action(async () => {
|
|
130
|
+
const { startMcpServer } = await import("./mcp/mcp-server.js");
|
|
131
|
+
await startMcpServer();
|
|
132
|
+
});
|
|
133
|
+
program
|
|
134
|
+
.command("init")
|
|
135
|
+
.description("Scaffold a minimal cccp.yaml, example pipeline, and core agents")
|
|
136
|
+
.option("-d, --dir <path>", "Directory to scaffold in (defaults to cwd)")
|
|
137
|
+
.action(async (opts) => {
|
|
138
|
+
const dir = resolve(opts.dir ?? process.cwd());
|
|
139
|
+
const { scaffoldProject } = await import("./scaffold/index.js");
|
|
140
|
+
await scaffoldProject(dir);
|
|
141
|
+
});
|
|
142
|
+
program
|
|
143
|
+
.command("examples")
|
|
144
|
+
.description("Scaffold the full set of template agents and example pipelines")
|
|
145
|
+
.option("-d, --dir <path>", "Directory to scaffold in (defaults to cwd)")
|
|
146
|
+
.option("--agents-only", "Scaffold agents only, no pipelines")
|
|
147
|
+
.option("--pipelines-only", "Scaffold pipelines only, no agents")
|
|
148
|
+
.action(async (opts) => {
|
|
149
|
+
const dir = resolve(opts.dir ?? process.cwd());
|
|
150
|
+
const { scaffoldExamples } = await import("./scaffold/index.js");
|
|
151
|
+
await scaffoldExamples(dir, {
|
|
152
|
+
agentsOnly: opts.agentsOnly,
|
|
153
|
+
pipelinesOnly: opts.pipelinesOnly,
|
|
154
|
+
});
|
|
155
|
+
});
|
|
156
|
+
program.parse();
|
|
157
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
declare const McpServerSchema: z.ZodObject<{
|
|
3
|
+
command: z.ZodString;
|
|
4
|
+
args: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
5
|
+
env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
6
|
+
}, "strip", z.ZodTypeAny, {
|
|
7
|
+
command: string;
|
|
8
|
+
args?: string[] | undefined;
|
|
9
|
+
env?: Record<string, string> | undefined;
|
|
10
|
+
}, {
|
|
11
|
+
command: string;
|
|
12
|
+
args?: string[] | undefined;
|
|
13
|
+
env?: Record<string, string> | undefined;
|
|
14
|
+
}>;
|
|
15
|
+
declare const McpProfileSchema: z.ZodObject<{
|
|
16
|
+
extends: z.ZodOptional<z.ZodString>;
|
|
17
|
+
servers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
18
|
+
command: z.ZodString;
|
|
19
|
+
args: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
20
|
+
env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
21
|
+
}, "strip", z.ZodTypeAny, {
|
|
22
|
+
command: string;
|
|
23
|
+
args?: string[] | undefined;
|
|
24
|
+
env?: Record<string, string> | undefined;
|
|
25
|
+
}, {
|
|
26
|
+
command: string;
|
|
27
|
+
args?: string[] | undefined;
|
|
28
|
+
env?: Record<string, string> | undefined;
|
|
29
|
+
}>>>;
|
|
30
|
+
}, "strip", z.ZodTypeAny, {
|
|
31
|
+
extends?: string | undefined;
|
|
32
|
+
servers?: Record<string, {
|
|
33
|
+
command: string;
|
|
34
|
+
args?: string[] | undefined;
|
|
35
|
+
env?: Record<string, string> | undefined;
|
|
36
|
+
}> | undefined;
|
|
37
|
+
}, {
|
|
38
|
+
extends?: string | undefined;
|
|
39
|
+
servers?: Record<string, {
|
|
40
|
+
command: string;
|
|
41
|
+
args?: string[] | undefined;
|
|
42
|
+
env?: Record<string, string> | undefined;
|
|
43
|
+
}> | undefined;
|
|
44
|
+
}>;
|
|
45
|
+
declare const ProjectConfigSchema: z.ZodObject<{
|
|
46
|
+
/** Ordered list of directories to search for agent definitions. */
|
|
47
|
+
agent_paths: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
48
|
+
/** Named MCP server profiles. */
|
|
49
|
+
mcp_profiles: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
50
|
+
extends: z.ZodOptional<z.ZodString>;
|
|
51
|
+
servers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
52
|
+
command: z.ZodString;
|
|
53
|
+
args: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
54
|
+
env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
55
|
+
}, "strip", z.ZodTypeAny, {
|
|
56
|
+
command: string;
|
|
57
|
+
args?: string[] | undefined;
|
|
58
|
+
env?: Record<string, string> | undefined;
|
|
59
|
+
}, {
|
|
60
|
+
command: string;
|
|
61
|
+
args?: string[] | undefined;
|
|
62
|
+
env?: Record<string, string> | undefined;
|
|
63
|
+
}>>>;
|
|
64
|
+
}, "strip", z.ZodTypeAny, {
|
|
65
|
+
extends?: string | undefined;
|
|
66
|
+
servers?: Record<string, {
|
|
67
|
+
command: string;
|
|
68
|
+
args?: string[] | undefined;
|
|
69
|
+
env?: Record<string, string> | undefined;
|
|
70
|
+
}> | undefined;
|
|
71
|
+
}, {
|
|
72
|
+
extends?: string | undefined;
|
|
73
|
+
servers?: Record<string, {
|
|
74
|
+
command: string;
|
|
75
|
+
args?: string[] | undefined;
|
|
76
|
+
env?: Record<string, string> | undefined;
|
|
77
|
+
}> | undefined;
|
|
78
|
+
}>>>;
|
|
79
|
+
/** Artifact output directory pattern (supports {project}, {pipeline_name}). */
|
|
80
|
+
artifact_dir: z.ZodOptional<z.ZodString>;
|
|
81
|
+
/** Default MCP profile applied when a stage doesn't specify one. */
|
|
82
|
+
default_mcp_profile: z.ZodOptional<z.ZodString>;
|
|
83
|
+
/** Claude config directory (default: inherits CLAUDE_CONFIG_DIR or ~/.claude). */
|
|
84
|
+
claude_config_dir: z.ZodOptional<z.ZodString>;
|
|
85
|
+
/** Permission mode for agent subprocesses (default: bypassPermissions). */
|
|
86
|
+
permission_mode: z.ZodOptional<z.ZodEnum<["default", "acceptEdits", "bypassPermissions", "auto"]>>;
|
|
87
|
+
}, "strip", z.ZodTypeAny, {
|
|
88
|
+
agent_paths?: string[] | undefined;
|
|
89
|
+
mcp_profiles?: Record<string, {
|
|
90
|
+
extends?: string | undefined;
|
|
91
|
+
servers?: Record<string, {
|
|
92
|
+
command: string;
|
|
93
|
+
args?: string[] | undefined;
|
|
94
|
+
env?: Record<string, string> | undefined;
|
|
95
|
+
}> | undefined;
|
|
96
|
+
}> | undefined;
|
|
97
|
+
artifact_dir?: string | undefined;
|
|
98
|
+
default_mcp_profile?: string | undefined;
|
|
99
|
+
claude_config_dir?: string | undefined;
|
|
100
|
+
permission_mode?: "default" | "acceptEdits" | "bypassPermissions" | "auto" | undefined;
|
|
101
|
+
}, {
|
|
102
|
+
agent_paths?: string[] | undefined;
|
|
103
|
+
mcp_profiles?: Record<string, {
|
|
104
|
+
extends?: string | undefined;
|
|
105
|
+
servers?: Record<string, {
|
|
106
|
+
command: string;
|
|
107
|
+
args?: string[] | undefined;
|
|
108
|
+
env?: Record<string, string> | undefined;
|
|
109
|
+
}> | undefined;
|
|
110
|
+
}> | undefined;
|
|
111
|
+
artifact_dir?: string | undefined;
|
|
112
|
+
default_mcp_profile?: string | undefined;
|
|
113
|
+
claude_config_dir?: string | undefined;
|
|
114
|
+
permission_mode?: "default" | "acceptEdits" | "bypassPermissions" | "auto" | undefined;
|
|
115
|
+
}>;
|
|
116
|
+
export type McpServer = z.infer<typeof McpServerSchema>;
|
|
117
|
+
export type McpProfile = z.infer<typeof McpProfileSchema>;
|
|
118
|
+
export type ProjectConfig = z.infer<typeof ProjectConfigSchema>;
|
|
119
|
+
/**
|
|
120
|
+
* Load a cccp.yaml project config from the given directory.
|
|
121
|
+
* Returns an empty config (all defaults) if the file doesn't exist.
|
|
122
|
+
*
|
|
123
|
+
* Paths in `agent_paths` are resolved relative to the config file's directory.
|
|
124
|
+
*/
|
|
125
|
+
export declare function loadProjectConfig(projectDir: string): Promise<ProjectConfig>;
|
|
126
|
+
export {};
|