slavedriver 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/README.md +165 -0
- package/agents/executor.md +26 -0
- package/agents/planner.md +41 -0
- package/agents/researcher.md +28 -0
- package/agents/verifier.md +25 -0
- package/dist/agents/backends/claude-code.d.ts +2 -0
- package/dist/agents/backends/claude-code.js +215 -0
- package/dist/agents/backends/claude-code.js.map +1 -0
- package/dist/agents/backends/mock.d.ts +9 -0
- package/dist/agents/backends/mock.js +31 -0
- package/dist/agents/backends/mock.js.map +1 -0
- package/dist/agents/context-builder.d.ts +10 -0
- package/dist/agents/context-builder.js +61 -0
- package/dist/agents/context-builder.js.map +1 -0
- package/dist/agents/prompt-compiler.d.ts +27 -0
- package/dist/agents/prompt-compiler.js +549 -0
- package/dist/agents/prompt-compiler.js.map +1 -0
- package/dist/agents/runtime.d.ts +40 -0
- package/dist/agents/runtime.js +2 -0
- package/dist/agents/runtime.js.map +1 -0
- package/dist/cli/arg-parser.d.ts +6 -0
- package/dist/cli/arg-parser.js +59 -0
- package/dist/cli/arg-parser.js.map +1 -0
- package/dist/cli/commands/config.d.ts +9 -0
- package/dist/cli/commands/config.js +120 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/dashboard.d.ts +1 -0
- package/dist/cli/commands/dashboard.js +54 -0
- package/dist/cli/commands/dashboard.js.map +1 -0
- package/dist/cli/commands/find-root.d.ts +14 -0
- package/dist/cli/commands/find-root.js +55 -0
- package/dist/cli/commands/find-root.js.map +1 -0
- package/dist/cli/commands/init.d.ts +1 -0
- package/dist/cli/commands/init.js +65 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/next.d.ts +1 -0
- package/dist/cli/commands/next.js +61 -0
- package/dist/cli/commands/next.js.map +1 -0
- package/dist/cli/commands/plan.d.ts +2 -0
- package/dist/cli/commands/plan.js +53 -0
- package/dist/cli/commands/plan.js.map +1 -0
- package/dist/cli/commands/replan.d.ts +1 -0
- package/dist/cli/commands/replan.js +54 -0
- package/dist/cli/commands/replan.js.map +1 -0
- package/dist/cli/commands/run-pipeline.d.ts +2 -0
- package/dist/cli/commands/run-pipeline.js +74 -0
- package/dist/cli/commands/run-pipeline.js.map +1 -0
- package/dist/cli/commands/run.d.ts +2 -0
- package/dist/cli/commands/run.js +106 -0
- package/dist/cli/commands/run.js.map +1 -0
- package/dist/cli/commands/status.d.ts +1 -0
- package/dist/cli/commands/status.js +51 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/commands/verify.d.ts +1 -0
- package/dist/cli/commands/verify.js +63 -0
- package/dist/cli/commands/verify.js.map +1 -0
- package/dist/cli/commands/wizard.d.ts +8 -0
- package/dist/cli/commands/wizard.js +39 -0
- package/dist/cli/commands/wizard.js.map +1 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.js +82 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/wizard/index.d.ts +11 -0
- package/dist/cli/wizard/index.js +40 -0
- package/dist/cli/wizard/index.js.map +1 -0
- package/dist/cli/wizard/interview.d.ts +26 -0
- package/dist/cli/wizard/interview.js +284 -0
- package/dist/cli/wizard/interview.js.map +1 -0
- package/dist/cli/wizard/prompt.d.ts +18 -0
- package/dist/cli/wizard/prompt.js +72 -0
- package/dist/cli/wizard/prompt.js.map +1 -0
- package/dist/cli/wizard/template-generator.d.ts +8 -0
- package/dist/cli/wizard/template-generator.js +133 -0
- package/dist/cli/wizard/template-generator.js.map +1 -0
- package/dist/mcp/index.d.ts +2 -0
- package/dist/mcp/index.js +68 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/protocol.d.ts +33 -0
- package/dist/mcp/protocol.js +82 -0
- package/dist/mcp/protocol.js.map +1 -0
- package/dist/mcp/resources.d.ts +20 -0
- package/dist/mcp/resources.js +101 -0
- package/dist/mcp/resources.js.map +1 -0
- package/dist/mcp/run-manager.d.ts +36 -0
- package/dist/mcp/run-manager.js +179 -0
- package/dist/mcp/run-manager.js.map +1 -0
- package/dist/mcp/server.d.ts +13 -0
- package/dist/mcp/server.js +99 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools.d.ts +32 -0
- package/dist/mcp/tools.js +259 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/orchestrator/alert-types.d.ts +16 -0
- package/dist/orchestrator/alert-types.js +2 -0
- package/dist/orchestrator/alert-types.js.map +1 -0
- package/dist/orchestrator/alerts.d.ts +20 -0
- package/dist/orchestrator/alerts.js +76 -0
- package/dist/orchestrator/alerts.js.map +1 -0
- package/dist/orchestrator/checkpoints.d.ts +8 -0
- package/dist/orchestrator/checkpoints.js +24 -0
- package/dist/orchestrator/checkpoints.js.map +1 -0
- package/dist/orchestrator/engine.d.ts +71 -0
- package/dist/orchestrator/engine.js +420 -0
- package/dist/orchestrator/engine.js.map +1 -0
- package/dist/orchestrator/phase-gates.d.ts +6 -0
- package/dist/orchestrator/phase-gates.js +127 -0
- package/dist/orchestrator/phase-gates.js.map +1 -0
- package/dist/orchestrator/plan-approval.d.ts +10 -0
- package/dist/orchestrator/plan-approval.js +51 -0
- package/dist/orchestrator/plan-approval.js.map +1 -0
- package/dist/orchestrator/safety.d.ts +22 -0
- package/dist/orchestrator/safety.js +126 -0
- package/dist/orchestrator/safety.js.map +1 -0
- package/dist/orchestrator/task-graph.d.ts +17 -0
- package/dist/orchestrator/task-graph.js +156 -0
- package/dist/orchestrator/task-graph.js.map +1 -0
- package/dist/orchestrator/wave-executor.d.ts +37 -0
- package/dist/orchestrator/wave-executor.js +237 -0
- package/dist/orchestrator/wave-executor.js.map +1 -0
- package/dist/session/in-process.d.ts +2 -0
- package/dist/session/in-process.js +149 -0
- package/dist/session/in-process.js.map +1 -0
- package/dist/session/log-capture.d.ts +7 -0
- package/dist/session/log-capture.js +56 -0
- package/dist/session/log-capture.js.map +1 -0
- package/dist/session/manager.d.ts +20 -0
- package/dist/session/manager.js +2 -0
- package/dist/session/manager.js.map +1 -0
- package/dist/state/file-store.d.ts +3 -0
- package/dist/state/file-store.js +124 -0
- package/dist/state/file-store.js.map +1 -0
- package/dist/state/lock.d.ts +6 -0
- package/dist/state/lock.js +71 -0
- package/dist/state/lock.js.map +1 -0
- package/dist/state/plan-parser.d.ts +6 -0
- package/dist/state/plan-parser.js +54 -0
- package/dist/state/plan-parser.js.map +1 -0
- package/dist/state/store.d.ts +27 -0
- package/dist/state/store.js +2 -0
- package/dist/state/store.js.map +1 -0
- package/dist/steps/events.d.ts +49 -0
- package/dist/steps/events.js +2 -0
- package/dist/steps/events.js.map +1 -0
- package/dist/steps/pipeline.d.ts +14 -0
- package/dist/steps/pipeline.js +284 -0
- package/dist/steps/pipeline.js.map +1 -0
- package/dist/steps/plan-parser.d.ts +35 -0
- package/dist/steps/plan-parser.js +147 -0
- package/dist/steps/plan-parser.js.map +1 -0
- package/dist/steps/runner.d.ts +13 -0
- package/dist/steps/runner.js +155 -0
- package/dist/steps/runner.js.map +1 -0
- package/dist/steps/store.d.ts +26 -0
- package/dist/steps/store.js +164 -0
- package/dist/steps/store.js.map +1 -0
- package/dist/steps/types.d.ts +36 -0
- package/dist/steps/types.js +2 -0
- package/dist/steps/types.js.map +1 -0
- package/dist/tui/app.d.ts +15 -0
- package/dist/tui/app.js +297 -0
- package/dist/tui/app.js.map +1 -0
- package/dist/tui/banner.d.ts +1 -0
- package/dist/tui/banner.js +11 -0
- package/dist/tui/banner.js.map +1 -0
- package/dist/tui/colors.d.ts +22 -0
- package/dist/tui/colors.js +30 -0
- package/dist/tui/colors.js.map +1 -0
- package/dist/tui/components/agent-panel.d.ts +8 -0
- package/dist/tui/components/agent-panel.js +80 -0
- package/dist/tui/components/agent-panel.js.map +1 -0
- package/dist/tui/components/header.d.ts +15 -0
- package/dist/tui/components/header.js +69 -0
- package/dist/tui/components/header.js.map +1 -0
- package/dist/tui/components/status-bar.d.ts +2 -0
- package/dist/tui/components/status-bar.js +8 -0
- package/dist/tui/components/status-bar.js.map +1 -0
- package/dist/tui/components/task-board.d.ts +3 -0
- package/dist/tui/components/task-board.js +96 -0
- package/dist/tui/components/task-board.js.map +1 -0
- package/dist/tui/display.d.ts +23 -0
- package/dist/tui/display.js +125 -0
- package/dist/tui/display.js.map +1 -0
- package/dist/tui/input.d.ts +2 -0
- package/dist/tui/input.js +44 -0
- package/dist/tui/input.js.map +1 -0
- package/dist/tui/layout-master.d.ts +7 -0
- package/dist/tui/layout-master.js +31 -0
- package/dist/tui/layout-master.js.map +1 -0
- package/dist/tui/layout.d.ts +13 -0
- package/dist/tui/layout.js +37 -0
- package/dist/tui/layout.js.map +1 -0
- package/dist/tui/pane-formatter.d.ts +27 -0
- package/dist/tui/pane-formatter.js +153 -0
- package/dist/tui/pane-formatter.js.map +1 -0
- package/dist/tui/renderer.d.ts +8 -0
- package/dist/tui/renderer.js +30 -0
- package/dist/tui/renderer.js.map +1 -0
- package/dist/tui/screen.d.ts +12 -0
- package/dist/tui/screen.js +32 -0
- package/dist/tui/screen.js.map +1 -0
- package/dist/tui/structured-display.d.ts +5 -0
- package/dist/tui/structured-display.js +74 -0
- package/dist/tui/structured-display.js.map +1 -0
- package/dist/tui/tmux-display.d.ts +6 -0
- package/dist/tui/tmux-display.js +187 -0
- package/dist/tui/tmux-display.js.map +1 -0
- package/dist/tui/tmux.d.ts +26 -0
- package/dist/tui/tmux.js +265 -0
- package/dist/tui/tmux.js.map +1 -0
- package/dist/types.d.ts +15 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/git.d.ts +6 -0
- package/dist/utils/git.js +35 -0
- package/dist/utils/git.js.map +1 -0
- package/dist/utils/hello.d.ts +1 -0
- package/dist/utils/hello.js +4 -0
- package/dist/utils/hello.js.map +1 -0
- package/dist/utils/id.d.ts +1 -0
- package/dist/utils/id.js +5 -0
- package/dist/utils/id.js.map +1 -0
- package/dist/utils/jsonl.d.ts +2 -0
- package/dist/utils/jsonl.js +18 -0
- package/dist/utils/jsonl.js.map +1 -0
- package/dist/utils/logger.d.ts +20 -0
- package/dist/utils/logger.js +40 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/pricing.d.ts +3 -0
- package/dist/utils/pricing.js +26 -0
- package/dist/utils/pricing.js.map +1 -0
- package/dist/utils/xml.d.ts +13 -0
- package/dist/utils/xml.js +67 -0
- package/dist/utils/xml.js.map +1 -0
- package/dist/utils/yaml.d.ts +5 -0
- package/dist/utils/yaml.js +126 -0
- package/dist/utils/yaml.js.map +1 -0
- package/package.json +45 -0
- package/templates/CONSTITUTION.md +10 -0
- package/templates/STATE.md +3 -0
- package/templates/config.json +11 -0
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { AgentEvent } from '../agents/runtime.js';
|
|
2
|
+
export type PipelineMode = 'quick' | 'sprint';
|
|
3
|
+
export type StepEvent = {
|
|
4
|
+
readonly type: 'pipeline_started';
|
|
5
|
+
readonly goal: string;
|
|
6
|
+
readonly startedAt: string;
|
|
7
|
+
readonly mode?: PipelineMode;
|
|
8
|
+
} | {
|
|
9
|
+
readonly type: 'step_created';
|
|
10
|
+
readonly stepNumber: number;
|
|
11
|
+
readonly name: string;
|
|
12
|
+
readonly phase?: string;
|
|
13
|
+
} | {
|
|
14
|
+
readonly type: 'step_started';
|
|
15
|
+
readonly stepNumber: number;
|
|
16
|
+
readonly name: string;
|
|
17
|
+
readonly agent: string;
|
|
18
|
+
} | {
|
|
19
|
+
readonly type: 'step_completed';
|
|
20
|
+
readonly stepNumber: number;
|
|
21
|
+
readonly name: string;
|
|
22
|
+
readonly inputTokens: number;
|
|
23
|
+
readonly outputTokens: number;
|
|
24
|
+
} | {
|
|
25
|
+
readonly type: 'step_failed';
|
|
26
|
+
readonly stepNumber: number;
|
|
27
|
+
readonly name: string;
|
|
28
|
+
readonly error: string;
|
|
29
|
+
} | {
|
|
30
|
+
readonly type: 'agent_event';
|
|
31
|
+
readonly stepNumber: number;
|
|
32
|
+
readonly event: AgentEvent;
|
|
33
|
+
} | {
|
|
34
|
+
readonly type: 'phase_started';
|
|
35
|
+
readonly phase: string;
|
|
36
|
+
readonly description: string;
|
|
37
|
+
} | {
|
|
38
|
+
readonly type: 'phase_completed';
|
|
39
|
+
readonly phase: string;
|
|
40
|
+
} | {
|
|
41
|
+
readonly type: 'pipeline_complete';
|
|
42
|
+
readonly totalSteps: number;
|
|
43
|
+
readonly completedSteps: number;
|
|
44
|
+
readonly totalInputTokens: number;
|
|
45
|
+
readonly totalOutputTokens: number;
|
|
46
|
+
} | {
|
|
47
|
+
readonly type: 'pipeline_error';
|
|
48
|
+
readonly error: string;
|
|
49
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/steps/events.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { AgentRuntime } from '../agents/runtime.js';
|
|
2
|
+
import type { ProjectConfig } from '../types.js';
|
|
3
|
+
import type { StepStore } from './store.js';
|
|
4
|
+
import type { StepEvent } from './events.js';
|
|
5
|
+
export interface PipelineOptions {
|
|
6
|
+
readonly runtime: AgentRuntime;
|
|
7
|
+
readonly store: StepStore;
|
|
8
|
+
readonly config: ProjectConfig;
|
|
9
|
+
readonly sdRoot: string;
|
|
10
|
+
readonly workingDirectory: string;
|
|
11
|
+
readonly dryRun?: boolean;
|
|
12
|
+
readonly abortSignal?: AbortSignal;
|
|
13
|
+
}
|
|
14
|
+
export declare function runPipeline(goal: string, options: PipelineOptions): AsyncGenerator<StepEvent>;
|
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
import { join } from 'node:path';
|
|
2
|
+
import { readFile } from 'node:fs/promises';
|
|
3
|
+
import { runStep, runStepsParallel } from './runner.js';
|
|
4
|
+
import { parsePlanOutput, parseRoadmapOutput, detectPlanMode } from './plan-parser.js';
|
|
5
|
+
export async function* runPipeline(goal, options) {
|
|
6
|
+
const { runtime, store, config, sdRoot, workingDirectory, dryRun, abortSignal } = options;
|
|
7
|
+
const constitutionPath = join(sdRoot, 'CONSTITUTION.md');
|
|
8
|
+
const stepOpts = { runtime, store, constitutionPath, workingDirectory, abortSignal };
|
|
9
|
+
const concurrency = config.maxConcurrentAgents;
|
|
10
|
+
let totalInput = 0;
|
|
11
|
+
let totalOutput = 0;
|
|
12
|
+
function trackTokens(event) {
|
|
13
|
+
if (event.type === 'step_completed') {
|
|
14
|
+
totalInput += event.inputTokens;
|
|
15
|
+
totalOutput += event.outputTokens;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
try {
|
|
19
|
+
// ── 000: Plan or Roadmap (single step replaces research+scope+arch+plan) ──
|
|
20
|
+
const planStep = await store.createStep({
|
|
21
|
+
name: 'plan',
|
|
22
|
+
agent: 'planner',
|
|
23
|
+
prompt: [
|
|
24
|
+
`# Goal\n${goal}`,
|
|
25
|
+
'',
|
|
26
|
+
'Analyze this codebase and create an execution plan for the above goal.',
|
|
27
|
+
'Read project files to understand structure, conventions, and patterns.',
|
|
28
|
+
'',
|
|
29
|
+
'Then decide: is this a focused change or a multi-feature goal?',
|
|
30
|
+
'',
|
|
31
|
+
'**For focused tasks** — output step blocks:',
|
|
32
|
+
'',
|
|
33
|
+
'## Step: <short-name>',
|
|
34
|
+
'agent: <executor|frontend|backend|devops|database|writer|test-engineer|performance|migration|gitops>',
|
|
35
|
+
'reads: <comma-separated step numbers this step depends on>',
|
|
36
|
+
'',
|
|
37
|
+
'<detailed prompt for the implementing agent>',
|
|
38
|
+
'',
|
|
39
|
+
'**For multi-feature goals** — output phase blocks (roadmap):',
|
|
40
|
+
'',
|
|
41
|
+
'## Phase: <short-name>',
|
|
42
|
+
'description: <what this phase accomplishes>',
|
|
43
|
+
'priority: <1-based execution order>',
|
|
44
|
+
'depends: <comma-separated phase names this depends on>',
|
|
45
|
+
'',
|
|
46
|
+
'Guidelines:',
|
|
47
|
+
'- Group independent work as separate steps that can run in parallel (same reads values).',
|
|
48
|
+
'- Steps that depend on each other should reference earlier step numbers in their reads.',
|
|
49
|
+
'- Be specific in each step/phase prompt — include file paths, function signatures, test expectations.',
|
|
50
|
+
'- Assign specialized agents when the task clearly matches their domain.',
|
|
51
|
+
'- For phases: each phase should be a coherent unit of work (e.g., "auth system", "dashboard UI").',
|
|
52
|
+
'',
|
|
53
|
+
'IMPORTANT: Output ONLY the plan/roadmap. Do NOT write any files or use any tools.',
|
|
54
|
+
].join('\n'),
|
|
55
|
+
reads: [],
|
|
56
|
+
});
|
|
57
|
+
yield { type: 'step_created', stepNumber: planStep.number, name: 'plan' };
|
|
58
|
+
for await (const event of runStep(planStep, stepOpts)) {
|
|
59
|
+
trackTokens(event);
|
|
60
|
+
yield event;
|
|
61
|
+
}
|
|
62
|
+
const completedPlan = await store.getStep(planStep.number);
|
|
63
|
+
if (completedPlan?.meta.status === 'failed') {
|
|
64
|
+
yield { type: 'pipeline_error', error: 'Planning step failed' };
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
// ── Detect mode from planner output ──────────────────────────────────
|
|
68
|
+
const planOutput = await readFile(join(completedPlan.dir, 'output.md'), 'utf-8');
|
|
69
|
+
const mode = detectPlanMode(planOutput);
|
|
70
|
+
yield { type: 'pipeline_started', goal, startedAt: new Date().toISOString(), mode };
|
|
71
|
+
if (mode === 'sprint') {
|
|
72
|
+
// ── Sprint mode: phase-based execution ─────────────────────────────
|
|
73
|
+
yield* runSprintMode(planStep.number, planOutput, goal, {
|
|
74
|
+
store, stepOpts, concurrency, dryRun, abortSignal, trackTokens,
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
// ── Quick mode: direct step execution ──────────────────────────────
|
|
79
|
+
yield* runQuickMode(planStep.number, planOutput, goal, {
|
|
80
|
+
store, stepOpts, concurrency, dryRun, abortSignal, trackTokens,
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
// ── Done ────────────────────────────────────────────────────────────
|
|
84
|
+
const finalSteps = await store.listSteps();
|
|
85
|
+
yield {
|
|
86
|
+
type: 'pipeline_complete',
|
|
87
|
+
totalSteps: finalSteps.length,
|
|
88
|
+
completedSteps: finalSteps.filter((s) => s.meta.status === 'completed').length,
|
|
89
|
+
totalInputTokens: totalInput,
|
|
90
|
+
totalOutputTokens: totalOutput,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
catch (err) {
|
|
94
|
+
yield { type: 'pipeline_error', error: err instanceof Error ? err.message : String(err) };
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
async function* runQuickMode(planStepNumber, planOutput, goal, ctx) {
|
|
98
|
+
const { store, stepOpts, concurrency, dryRun, abortSignal, trackTokens } = ctx;
|
|
99
|
+
const implDefs = parsePlanOutput(planOutput, planStepNumber + 1);
|
|
100
|
+
// Create implementation steps
|
|
101
|
+
const implSteps = [];
|
|
102
|
+
for (const def of implDefs) {
|
|
103
|
+
const remappedReads = def.reads.length > 0 ? def.reads : [planStepNumber];
|
|
104
|
+
const step = await store.createStep({
|
|
105
|
+
name: def.name,
|
|
106
|
+
agent: def.agent,
|
|
107
|
+
prompt: def.prompt,
|
|
108
|
+
reads: remappedReads,
|
|
109
|
+
});
|
|
110
|
+
yield { type: 'step_created', stepNumber: step.number, name: def.name };
|
|
111
|
+
implSteps.push(step);
|
|
112
|
+
}
|
|
113
|
+
// Dry run stops here
|
|
114
|
+
if (dryRun)
|
|
115
|
+
return;
|
|
116
|
+
// Execute implementation steps (respecting dependencies)
|
|
117
|
+
yield* executeAllPending(store, concurrency, stepOpts, abortSignal, trackTokens);
|
|
118
|
+
// Final verify
|
|
119
|
+
yield* createAndRunVerify(goal, planStepNumber, store, stepOpts, trackTokens);
|
|
120
|
+
}
|
|
121
|
+
// ── Sprint mode ──────────────────────────────────────────────────────────────
|
|
122
|
+
async function* runSprintMode(roadmapStepNumber, roadmapOutput, goal, ctx) {
|
|
123
|
+
const { store, stepOpts, concurrency, dryRun, abortSignal, trackTokens } = ctx;
|
|
124
|
+
const phases = parseRoadmapOutput(roadmapOutput);
|
|
125
|
+
if (phases.length === 0) {
|
|
126
|
+
// Fallback to quick mode if no phases parsed
|
|
127
|
+
yield* runQuickMode(roadmapStepNumber, roadmapOutput, goal, ctx);
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
// Dry run: just create the phase plan steps
|
|
131
|
+
if (dryRun) {
|
|
132
|
+
for (const phase of phases) {
|
|
133
|
+
const step = await store.createStep({
|
|
134
|
+
name: `phase-${phase.name}-plan`,
|
|
135
|
+
agent: 'planner',
|
|
136
|
+
prompt: `Plan phase: ${phase.name} — ${phase.description}`,
|
|
137
|
+
reads: [roadmapStepNumber],
|
|
138
|
+
phase: phase.name,
|
|
139
|
+
});
|
|
140
|
+
yield { type: 'step_created', stepNumber: step.number, name: step.meta.name, phase: phase.name };
|
|
141
|
+
}
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
let prevVerifyStepNumber = null;
|
|
145
|
+
for (const phase of phases) {
|
|
146
|
+
if (abortSignal?.aborted) {
|
|
147
|
+
yield { type: 'pipeline_error', error: 'Pipeline aborted' };
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
yield { type: 'phase_started', phase: phase.name, description: phase.description };
|
|
151
|
+
// ── Phase plan step ──────────────────────────────────────────────
|
|
152
|
+
const planReads = [roadmapStepNumber];
|
|
153
|
+
if (prevVerifyStepNumber !== null)
|
|
154
|
+
planReads.push(prevVerifyStepNumber);
|
|
155
|
+
const phasePlan = await store.createStep({
|
|
156
|
+
name: `phase-${phase.name}-plan`,
|
|
157
|
+
agent: 'planner',
|
|
158
|
+
prompt: [
|
|
159
|
+
`# Goal\n${goal}`,
|
|
160
|
+
'',
|
|
161
|
+
`# Phase: ${phase.name}`,
|
|
162
|
+
`Description: ${phase.description}`,
|
|
163
|
+
'',
|
|
164
|
+
'Create implementation steps for this phase.',
|
|
165
|
+
'The roadmap and any previous phase verification output are provided as context.',
|
|
166
|
+
'',
|
|
167
|
+
'Output format — for each step:',
|
|
168
|
+
'',
|
|
169
|
+
'## Step: <short-name>',
|
|
170
|
+
'agent: <executor|frontend|backend|devops|database|writer|test-engineer|performance|migration|gitops>',
|
|
171
|
+
'reads: <comma-separated step numbers this step depends on>',
|
|
172
|
+
'',
|
|
173
|
+
'<detailed prompt for the implementing agent>',
|
|
174
|
+
'',
|
|
175
|
+
'IMPORTANT: Output ONLY the plan. Do NOT write any files or use any tools.',
|
|
176
|
+
].join('\n'),
|
|
177
|
+
reads: planReads,
|
|
178
|
+
phase: phase.name,
|
|
179
|
+
});
|
|
180
|
+
yield { type: 'step_created', stepNumber: phasePlan.number, name: phasePlan.meta.name, phase: phase.name };
|
|
181
|
+
for await (const event of runStep(phasePlan, stepOpts)) {
|
|
182
|
+
trackTokens(event);
|
|
183
|
+
yield event;
|
|
184
|
+
}
|
|
185
|
+
const completedPhasePlan = await store.getStep(phasePlan.number);
|
|
186
|
+
if (completedPhasePlan?.meta.status === 'failed') {
|
|
187
|
+
yield { type: 'pipeline_error', error: `Phase ${phase.name} planning failed` };
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
// ── Parse phase plan → create implementation steps ───────────────
|
|
191
|
+
const phasePlanOutput = await readFile(join(completedPhasePlan.dir, 'output.md'), 'utf-8');
|
|
192
|
+
const taskDefs = parsePlanOutput(phasePlanOutput, phasePlan.number + 1);
|
|
193
|
+
for (const def of taskDefs) {
|
|
194
|
+
const remappedReads = def.reads.length > 0 ? def.reads : [phasePlan.number];
|
|
195
|
+
const step = await store.createStep({
|
|
196
|
+
name: def.name,
|
|
197
|
+
agent: def.agent,
|
|
198
|
+
prompt: def.prompt,
|
|
199
|
+
reads: remappedReads,
|
|
200
|
+
phase: phase.name,
|
|
201
|
+
});
|
|
202
|
+
yield { type: 'step_created', stepNumber: step.number, name: def.name, phase: phase.name };
|
|
203
|
+
}
|
|
204
|
+
// ── Execute phase tasks ──────────────────────────────────────────
|
|
205
|
+
yield* executeAllPending(store, concurrency, stepOpts, abortSignal, trackTokens);
|
|
206
|
+
// ── Phase verify ─────────────────────────────────────────────────
|
|
207
|
+
const phaseSteps = await store.getPhaseSteps(phase.name);
|
|
208
|
+
const phaseImplNumbers = phaseSteps
|
|
209
|
+
.filter((s) => s.meta.status === 'completed' && s.number !== phasePlan.number)
|
|
210
|
+
.map((s) => s.number);
|
|
211
|
+
const phaseVerify = await store.createStep({
|
|
212
|
+
name: `phase-${phase.name}-verify`,
|
|
213
|
+
agent: 'verifier',
|
|
214
|
+
prompt: [
|
|
215
|
+
`# Goal\n${goal}`,
|
|
216
|
+
'',
|
|
217
|
+
`# Phase: ${phase.name}`,
|
|
218
|
+
`Description: ${phase.description}`,
|
|
219
|
+
'',
|
|
220
|
+
'Verify that this phase has been completed successfully.',
|
|
221
|
+
'Check the implementation outputs above and run tests to confirm correctness.',
|
|
222
|
+
'Report PASS or FAIL with detailed reasoning.',
|
|
223
|
+
].join('\n'),
|
|
224
|
+
reads: [phasePlan.number, ...phaseImplNumbers],
|
|
225
|
+
phase: phase.name,
|
|
226
|
+
});
|
|
227
|
+
yield { type: 'step_created', stepNumber: phaseVerify.number, name: phaseVerify.meta.name, phase: phase.name };
|
|
228
|
+
for await (const event of runStep(phaseVerify, stepOpts)) {
|
|
229
|
+
trackTokens(event);
|
|
230
|
+
yield event;
|
|
231
|
+
}
|
|
232
|
+
prevVerifyStepNumber = phaseVerify.number;
|
|
233
|
+
yield { type: 'phase_completed', phase: phase.name };
|
|
234
|
+
}
|
|
235
|
+
// ── Final verify ───────────────────────────────────────────────────
|
|
236
|
+
yield* createAndRunVerify(goal, roadmapStepNumber, store, stepOpts, trackTokens);
|
|
237
|
+
}
|
|
238
|
+
// ── Shared helpers ───────────────────────────────────────────────────────────
|
|
239
|
+
async function* executeAllPending(store, concurrency, stepOpts, abortSignal, trackTokens) {
|
|
240
|
+
let pending = await store.getNextPendingSteps();
|
|
241
|
+
while (pending.length > 0) {
|
|
242
|
+
if (abortSignal?.aborted) {
|
|
243
|
+
yield { type: 'pipeline_error', error: 'Pipeline aborted' };
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
246
|
+
if (pending.length === 1) {
|
|
247
|
+
for await (const event of runStep(pending[0], stepOpts)) {
|
|
248
|
+
trackTokens(event);
|
|
249
|
+
yield event;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
else {
|
|
253
|
+
for await (const event of runStepsParallel(pending, concurrency, stepOpts)) {
|
|
254
|
+
trackTokens(event);
|
|
255
|
+
yield event;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
pending = await store.getNextPendingSteps();
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
async function* createAndRunVerify(goal, planStepNumber, store, stepOpts, trackTokens) {
|
|
262
|
+
const allSteps = await store.listSteps();
|
|
263
|
+
const implOutputNumbers = allSteps
|
|
264
|
+
.filter((s) => s.number > planStepNumber && s.meta.status === 'completed')
|
|
265
|
+
.map((s) => s.number);
|
|
266
|
+
const verify = await store.createStep({
|
|
267
|
+
name: 'verify',
|
|
268
|
+
agent: 'verifier',
|
|
269
|
+
prompt: [
|
|
270
|
+
`# Goal\n${goal}`,
|
|
271
|
+
'',
|
|
272
|
+
'Verify that the goal has been achieved.',
|
|
273
|
+
'Check the implementation outputs above and run tests to confirm correctness.',
|
|
274
|
+
'Report PASS or FAIL with detailed reasoning.',
|
|
275
|
+
].join('\n'),
|
|
276
|
+
reads: [planStepNumber, ...implOutputNumbers],
|
|
277
|
+
});
|
|
278
|
+
yield { type: 'step_created', stepNumber: verify.number, name: 'verify' };
|
|
279
|
+
for await (const event of runStep(verify, stepOpts)) {
|
|
280
|
+
trackTokens(event);
|
|
281
|
+
yield event;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
//# sourceMappingURL=pipeline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../src/steps/pipeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { StepDef, PhaseDef } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Parse planner output into step definitions.
|
|
4
|
+
*
|
|
5
|
+
* Expected format — each step block:
|
|
6
|
+
* ```
|
|
7
|
+
* ## Step: <name>
|
|
8
|
+
* agent: <role>
|
|
9
|
+
* reads: <comma-separated step numbers>
|
|
10
|
+
*
|
|
11
|
+
* <prompt content>
|
|
12
|
+
* ```
|
|
13
|
+
*
|
|
14
|
+
* If no structured format is found, returns a single step with the entire plan as prompt.
|
|
15
|
+
*/
|
|
16
|
+
export declare function parsePlanOutput(markdown: string, baseStepNumber: number): StepDef[];
|
|
17
|
+
/**
|
|
18
|
+
* Parse roadmap output into phase definitions.
|
|
19
|
+
*
|
|
20
|
+
* Expected format:
|
|
21
|
+
* ```
|
|
22
|
+
* ## Phase: <name>
|
|
23
|
+
* description: <text>
|
|
24
|
+
* priority: <number>
|
|
25
|
+
* depends: <comma-separated phase names>
|
|
26
|
+
* ```
|
|
27
|
+
*
|
|
28
|
+
* Returns empty array if no phase blocks are found (indicating quick mode).
|
|
29
|
+
*/
|
|
30
|
+
export declare function parseRoadmapOutput(markdown: string): PhaseDef[];
|
|
31
|
+
/**
|
|
32
|
+
* Detect whether planner output is a roadmap (sprint mode) or a plan (quick mode).
|
|
33
|
+
* Returns 'sprint' if Phase blocks are found, 'quick' otherwise.
|
|
34
|
+
*/
|
|
35
|
+
export declare function detectPlanMode(markdown: string): 'quick' | 'sprint';
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parse planner output into step definitions.
|
|
3
|
+
*
|
|
4
|
+
* Expected format — each step block:
|
|
5
|
+
* ```
|
|
6
|
+
* ## Step: <name>
|
|
7
|
+
* agent: <role>
|
|
8
|
+
* reads: <comma-separated step numbers>
|
|
9
|
+
*
|
|
10
|
+
* <prompt content>
|
|
11
|
+
* ```
|
|
12
|
+
*
|
|
13
|
+
* If no structured format is found, returns a single step with the entire plan as prompt.
|
|
14
|
+
*/
|
|
15
|
+
export function parsePlanOutput(markdown, baseStepNumber) {
|
|
16
|
+
const stepBlocks = splitStepBlocks(markdown);
|
|
17
|
+
if (stepBlocks.length === 0) {
|
|
18
|
+
// Fallback: wrap the entire plan as a single implementation step
|
|
19
|
+
return [{
|
|
20
|
+
name: 'implement',
|
|
21
|
+
agent: 'executor',
|
|
22
|
+
prompt: markdown.trim(),
|
|
23
|
+
reads: baseStepNumber > 0 ? Array.from({ length: baseStepNumber }, (_, i) => i) : [],
|
|
24
|
+
}];
|
|
25
|
+
}
|
|
26
|
+
return stepBlocks;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Parse roadmap output into phase definitions.
|
|
30
|
+
*
|
|
31
|
+
* Expected format:
|
|
32
|
+
* ```
|
|
33
|
+
* ## Phase: <name>
|
|
34
|
+
* description: <text>
|
|
35
|
+
* priority: <number>
|
|
36
|
+
* depends: <comma-separated phase names>
|
|
37
|
+
* ```
|
|
38
|
+
*
|
|
39
|
+
* Returns empty array if no phase blocks are found (indicating quick mode).
|
|
40
|
+
*/
|
|
41
|
+
export function parseRoadmapOutput(markdown) {
|
|
42
|
+
const lines = markdown.split('\n');
|
|
43
|
+
const phases = [];
|
|
44
|
+
let current = null;
|
|
45
|
+
for (const line of lines) {
|
|
46
|
+
const phaseMatch = line.match(/^#{2,3}\s+Phase:\s*(.+)$/i);
|
|
47
|
+
if (phaseMatch) {
|
|
48
|
+
if (current) {
|
|
49
|
+
phases.push({ ...current, depends: current.depends });
|
|
50
|
+
}
|
|
51
|
+
current = { name: slugify(phaseMatch[1].trim()), description: '', priority: phases.length + 1, depends: [] };
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
if (!current)
|
|
55
|
+
continue;
|
|
56
|
+
const descMatch = line.match(/^description:\s*(.+)$/i);
|
|
57
|
+
if (descMatch) {
|
|
58
|
+
current.description = descMatch[1].trim();
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
const priorityMatch = line.match(/^priority:\s*(\d+)$/i);
|
|
62
|
+
if (priorityMatch) {
|
|
63
|
+
current.priority = parseInt(priorityMatch[1], 10);
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
const dependsMatch = line.match(/^depends:\s*(.+)$/i);
|
|
67
|
+
if (dependsMatch) {
|
|
68
|
+
current.depends = dependsMatch[1]
|
|
69
|
+
.split(',')
|
|
70
|
+
.map((s) => slugify(s.trim()))
|
|
71
|
+
.filter((s) => s.length > 0);
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
// Save last block
|
|
76
|
+
if (current) {
|
|
77
|
+
phases.push({ ...current, depends: current.depends });
|
|
78
|
+
}
|
|
79
|
+
return phases;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Detect whether planner output is a roadmap (sprint mode) or a plan (quick mode).
|
|
83
|
+
* Returns 'sprint' if Phase blocks are found, 'quick' otherwise.
|
|
84
|
+
*/
|
|
85
|
+
export function detectPlanMode(markdown) {
|
|
86
|
+
return /^#{2,3}\s+Phase:/im.test(markdown) ? 'sprint' : 'quick';
|
|
87
|
+
}
|
|
88
|
+
function splitStepBlocks(markdown) {
|
|
89
|
+
const lines = markdown.split('\n');
|
|
90
|
+
const blocks = [];
|
|
91
|
+
let current = null;
|
|
92
|
+
let promptLines = [];
|
|
93
|
+
for (const line of lines) {
|
|
94
|
+
// Match "## Step: <name>" or "### Step: <name>"
|
|
95
|
+
const stepMatch = line.match(/^#{2,3}\s+Step:\s*(.+)$/i);
|
|
96
|
+
if (stepMatch) {
|
|
97
|
+
// Save previous block
|
|
98
|
+
if (current) {
|
|
99
|
+
current.prompt = promptLines.join('\n').trim();
|
|
100
|
+
blocks.push(current);
|
|
101
|
+
}
|
|
102
|
+
current = { name: slugify(stepMatch[1].trim()), agent: 'executor', reads: [], prompt: '' };
|
|
103
|
+
promptLines = [];
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
if (!current)
|
|
107
|
+
continue;
|
|
108
|
+
// Parse metadata lines (only before prompt content starts)
|
|
109
|
+
const agentMatch = line.match(/^agent:\s*(.+)$/i);
|
|
110
|
+
if (agentMatch && promptLines.length === 0) {
|
|
111
|
+
current.agent = agentMatch[1].trim();
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
114
|
+
const readsMatch = line.match(/^reads:\s*(.+)$/i);
|
|
115
|
+
if (readsMatch && promptLines.length === 0) {
|
|
116
|
+
current.reads = readsMatch[1]
|
|
117
|
+
.split(',')
|
|
118
|
+
.map((s) => s.trim())
|
|
119
|
+
.filter((s) => s.length > 0 && !isNaN(Number(s)))
|
|
120
|
+
.map(Number);
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
123
|
+
// Skip blank lines before prompt content starts
|
|
124
|
+
if (promptLines.length === 0 && line.trim() === '')
|
|
125
|
+
continue;
|
|
126
|
+
promptLines.push(line);
|
|
127
|
+
}
|
|
128
|
+
// Save last block
|
|
129
|
+
if (current) {
|
|
130
|
+
current.prompt = promptLines.join('\n').trim();
|
|
131
|
+
blocks.push(current);
|
|
132
|
+
}
|
|
133
|
+
return blocks.map((b) => ({
|
|
134
|
+
name: b.name,
|
|
135
|
+
agent: b.agent,
|
|
136
|
+
prompt: b.prompt,
|
|
137
|
+
reads: b.reads,
|
|
138
|
+
}));
|
|
139
|
+
}
|
|
140
|
+
function slugify(text) {
|
|
141
|
+
return text
|
|
142
|
+
.toLowerCase()
|
|
143
|
+
.replace(/[^a-z0-9]+/g, '-')
|
|
144
|
+
.replace(/^-+|-+$/g, '')
|
|
145
|
+
.slice(0, 40);
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=plan-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan-parser.js","sourceRoot":"","sources":["../../src/steps/plan-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { AgentRuntime } from '../agents/runtime.js';
|
|
2
|
+
import type { StepStore } from './store.js';
|
|
3
|
+
import type { Step } from './types.js';
|
|
4
|
+
import type { StepEvent } from './events.js';
|
|
5
|
+
export interface RunStepOptions {
|
|
6
|
+
readonly runtime: AgentRuntime;
|
|
7
|
+
readonly store: StepStore;
|
|
8
|
+
readonly constitutionPath: string;
|
|
9
|
+
readonly workingDirectory: string;
|
|
10
|
+
readonly abortSignal?: AbortSignal;
|
|
11
|
+
}
|
|
12
|
+
export declare function runStep(step: Step, options: RunStepOptions): AsyncGenerator<StepEvent>;
|
|
13
|
+
export declare function runStepsParallel(steps: Step[], concurrency: number, options: RunStepOptions): AsyncGenerator<StepEvent>;
|