@bradtaylorsf/alpha-loop 1.2.0 → 1.4.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.
Files changed (79) hide show
  1. package/README.md +60 -19
  2. package/dist/cli.js +83 -1
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/auth.js +1 -1
  5. package/dist/commands/auth.js.map +1 -1
  6. package/dist/commands/eval.d.ts +53 -0
  7. package/dist/commands/eval.js +538 -0
  8. package/dist/commands/eval.js.map +1 -0
  9. package/dist/commands/evolve.d.ts +25 -0
  10. package/dist/commands/evolve.js +270 -0
  11. package/dist/commands/evolve.js.map +1 -0
  12. package/dist/commands/history.d.ts +1 -1
  13. package/dist/commands/history.js +4 -4
  14. package/dist/commands/history.js.map +1 -1
  15. package/dist/commands/init.d.ts +14 -0
  16. package/dist/commands/init.js +199 -30
  17. package/dist/commands/init.js.map +1 -1
  18. package/dist/commands/resume.js +1 -0
  19. package/dist/commands/resume.js.map +1 -1
  20. package/dist/commands/run.js +170 -12
  21. package/dist/commands/run.js.map +1 -1
  22. package/dist/commands/scan.d.ts +1 -1
  23. package/dist/commands/scan.js +12 -9
  24. package/dist/commands/scan.js.map +1 -1
  25. package/dist/commands/sync.d.ts +5 -0
  26. package/dist/commands/sync.js +24 -5
  27. package/dist/commands/sync.js.map +1 -1
  28. package/dist/commands/vision.js +5 -3
  29. package/dist/commands/vision.js.map +1 -1
  30. package/dist/engine/agents.d.ts +6 -1
  31. package/dist/engine/agents.js +14 -12
  32. package/dist/engine/agents.js.map +1 -1
  33. package/dist/engine/prerequisites.d.ts +4 -7
  34. package/dist/engine/prerequisites.js +12 -36
  35. package/dist/engine/prerequisites.js.map +1 -1
  36. package/dist/lib/agent.d.ts +18 -0
  37. package/dist/lib/agent.js +211 -30
  38. package/dist/lib/agent.js.map +1 -1
  39. package/dist/lib/config.d.ts +25 -2
  40. package/dist/lib/config.js +80 -7
  41. package/dist/lib/config.js.map +1 -1
  42. package/dist/lib/eval-checks.d.ts +91 -0
  43. package/dist/lib/eval-checks.js +254 -0
  44. package/dist/lib/eval-checks.js.map +1 -0
  45. package/dist/lib/eval-runner.d.ts +29 -0
  46. package/dist/lib/eval-runner.js +439 -0
  47. package/dist/lib/eval-runner.js.map +1 -0
  48. package/dist/lib/eval.d.ts +170 -0
  49. package/dist/lib/eval.js +507 -0
  50. package/dist/lib/eval.js.map +1 -0
  51. package/dist/lib/learning.js +2 -2
  52. package/dist/lib/learning.js.map +1 -1
  53. package/dist/lib/pipeline.d.ts +44 -0
  54. package/dist/lib/pipeline.js +607 -138
  55. package/dist/lib/pipeline.js.map +1 -1
  56. package/dist/lib/prompts.d.ts +19 -0
  57. package/dist/lib/prompts.js +56 -5
  58. package/dist/lib/prompts.js.map +1 -1
  59. package/dist/lib/score.d.ts +80 -0
  60. package/dist/lib/score.js +172 -0
  61. package/dist/lib/score.js.map +1 -0
  62. package/dist/lib/session.d.ts +2 -1
  63. package/dist/lib/session.js +70 -19
  64. package/dist/lib/session.js.map +1 -1
  65. package/dist/lib/traces.d.ts +173 -0
  66. package/dist/lib/traces.js +272 -0
  67. package/dist/lib/traces.js.map +1 -0
  68. package/dist/lib/verify.d.ts +7 -1
  69. package/dist/lib/verify.js +109 -157
  70. package/dist/lib/verify.js.map +1 -1
  71. package/dist/lib/worktree.d.ts +1 -0
  72. package/dist/lib/worktree.js +9 -1
  73. package/dist/lib/worktree.js.map +1 -1
  74. package/package.json +1 -1
  75. package/templates/agents/implementer.md +1 -1
  76. package/templates/agents/reviewer.md +1 -1
  77. package/dist/engine/config.d.ts +0 -71
  78. package/dist/engine/config.js +0 -73
  79. package/dist/engine/config.js.map +0 -1
@@ -1,43 +1,70 @@
1
1
  /**
2
- * Live Verification — start the app, use playwright-cli to test it like a real user.
2
+ * Live Verification — use playwright-cli to test the app like a real user.
3
3
  *
4
- * This is NOT running E2E test suites. This is an AI agent using playwright-cli
5
- * to interactively verify that the implemented feature actually works by:
6
- * 1. Starting the dev server
7
- * 2. Opening the app in a browser via playwright-cli
8
- * 3. Navigating, clicking, typing, taking screenshots
9
- * 4. Reporting PASS or FAIL
4
+ * The agent handles everything: starting the dev server, figuring out the URL
5
+ * from the output, testing with playwright-cli, and shutting down.
6
+ *
7
+ * Verification is skipped for non-UI changes (config, docs, tests, etc.).
10
8
  */
11
9
  import { existsSync, readFileSync, mkdirSync } from 'node:fs';
12
10
  import { join } from 'node:path';
13
11
  import { exec } from './shell.js';
14
12
  import { log } from './logger.js';
15
13
  import { spawnAgent } from './agent.js';
16
- /** Max seconds to wait for app to become ready. */
17
- const APP_READY_TIMEOUT_S = 60;
14
+ /** File extensions that never need UI verification. */
15
+ const NON_UI_EXTENSIONS = new Set([
16
+ '.md', '.yaml', '.yml', '.json', '.toml', '.cfg', '.ini', '.env',
17
+ '.txt', '.csv', '.lock', '.gitignore', '.dockerignore',
18
+ '.test.ts', '.test.tsx', '.test.js', '.test.jsx', '.spec.ts', '.spec.tsx',
19
+ ]);
20
+ /**
21
+ * Check if a diff only touches non-UI files.
22
+ */
23
+ export function isNonUiChange(diffStat) {
24
+ if (!diffStat.trim())
25
+ return true;
26
+ const lines = diffStat.trim().split('\n');
27
+ // Last line is summary like " 5 files changed, 100 insertions(+), 20 deletions(-)"
28
+ const fileLines = lines.slice(0, -1);
29
+ for (const line of fileLines) {
30
+ const filePath = line.trim().split(/\s+\|/)[0]?.trim();
31
+ if (!filePath)
32
+ continue;
33
+ // Check if file has a non-UI extension
34
+ const isNonUi = [...NON_UI_EXTENSIONS].some(ext => filePath.endsWith(ext));
35
+ if (!isNonUi)
36
+ return false;
37
+ }
38
+ return true;
39
+ }
18
40
  /**
19
41
  * Run live verification using playwright-cli.
20
- * Starts the app, sends agent to test it, returns result.
42
+ * The agent starts the dev server, tests the app, and reports results.
21
43
  */
22
44
  export async function runVerify(options) {
23
- const { worktree, logFile, issueNum, title, body, config, sessionDir } = options;
45
+ const { worktree, logFile, issueNum, title, body, config, sessionDir, verifyInstructions } = options;
24
46
  if (config.skipVerify) {
25
47
  log.info('Verification skipped (skipVerify=true)');
26
- return { passed: true, output: 'Verification skipped' };
48
+ return { passed: true, skipped: true, output: 'Verification skipped' };
27
49
  }
28
50
  if (config.dryRun) {
29
51
  log.dry('Would run live verification');
30
- return { passed: true, output: 'Verification skipped (dry run)' };
52
+ return { passed: true, skipped: true, output: 'Verification skipped (dry run)' };
31
53
  }
32
- log.step(`Running live verification for issue #${issueNum}`);
33
54
  // Check if playwright-cli is available
34
55
  const whichResult = exec('which playwright-cli');
35
56
  if (whichResult.exitCode !== 0) {
36
- log.warn('playwright-cli not installed. Install with: npm install -g @anthropic-ai/claude-code');
37
- log.info('Skipping live verification (no playwright-cli)');
38
- return { passed: true, output: 'Verification skipped (playwright-cli not installed)' };
57
+ log.warn('playwright-cli not installed skipping verification');
58
+ return { passed: true, skipped: true, output: 'Verification skipped (playwright-cli not installed)' };
59
+ }
60
+ // Check if the diff only touches non-UI files
61
+ const diffStat = exec(`git diff --stat "origin/${config.baseBranch}...HEAD"`, { cwd: worktree });
62
+ if (isNonUiChange(diffStat.stdout)) {
63
+ log.info('Changes are non-UI (config, docs, tests) — skipping verification');
64
+ return { passed: true, skipped: true, output: 'Verification skipped (non-UI changes only)' };
39
65
  }
40
- // Detect how to start the app
66
+ log.step(`Running live verification for issue #${issueNum}`);
67
+ // Detect dev command
41
68
  let devCmd = config.devCommand;
42
69
  if (!devCmd) {
43
70
  const pkgJsonPath = join(worktree, 'package.json');
@@ -54,57 +81,29 @@ export async function runVerify(options) {
54
81
  }
55
82
  if (!devCmd) {
56
83
  log.info('No dev/start/preview command found, skipping verification');
57
- return { passed: true, output: 'Verification skipped (no start command)' };
58
- }
59
- const port = config.port ?? 3000;
60
- // Start the app in the background
61
- log.info(`Starting app with '${devCmd}' on port ${port}...`);
62
- const { spawn } = await import('node:child_process');
63
- const appProcess = spawn('sh', ['-c', `PORT=${port} ${devCmd}`], {
64
- cwd: worktree,
65
- stdio: ['ignore', 'pipe', 'pipe'],
66
- detached: true,
67
- });
68
- const appPid = appProcess.pid;
69
- // Wait for app to be ready
70
- let ready = false;
71
- for (let i = 0; i < APP_READY_TIMEOUT_S; i++) {
72
- const check = exec(`curl -s -o /dev/null http://localhost:${port}`);
73
- if (check.exitCode === 0) {
74
- ready = true;
75
- break;
76
- }
77
- // Check if process is still alive
78
- try {
79
- process.kill(appPid, 0);
80
- }
81
- catch {
82
- log.error('App process exited before becoming ready');
83
- return { passed: false, output: 'App failed to start' };
84
- }
85
- await new Promise((r) => setTimeout(r, 1000));
86
- }
87
- if (!ready) {
88
- log.error(`App did not become ready on port ${port} within ${APP_READY_TIMEOUT_S}s`);
89
- killProcess(appPid);
90
- return { passed: false, output: `App failed to start on port ${port}` };
91
- }
92
- log.success(`App is ready on port ${port}`);
93
- // Load saved auth state if it exists
94
- const authStateDir = join(process.cwd(), '.alpha-loop', 'auth');
95
- if (existsSync(join(authStateDir, 'state.json'))) {
96
- log.info('Loading saved auth state...');
97
- exec(`playwright-cli state-load "${authStateDir}/state.json"`);
84
+ return { passed: true, skipped: true, output: 'Verification skipped (no start command)' };
98
85
  }
99
86
  // Save screenshots to session directory
100
87
  const screenshotDir = join(sessionDir, 'screenshots', `issue-${issueNum}`);
101
88
  mkdirSync(screenshotDir, { recursive: true });
102
- // Get the diff to understand what changed
103
- const diffStat = exec(`git diff --stat "origin/${config.baseBranch}...HEAD"`, { cwd: worktree });
104
89
  // Get vision context
105
90
  const visionFile = join(process.cwd(), '.alpha-loop', 'vision.md');
106
91
  const visionContext = existsSync(visionFile) ? readFileSync(visionFile, 'utf-8') : '';
107
- // Build the verification prompt
92
+ // Load saved auth state if it exists
93
+ const authStateDir = join(process.cwd(), '.alpha-loop', 'auth');
94
+ if (existsSync(join(authStateDir, 'state.json'))) {
95
+ log.info('Loading saved auth state...');
96
+ exec(`playwright-cli state-load "${authStateDir}/state.json"`);
97
+ }
98
+ // Build the verification prompt — use plan instructions if available, otherwise generic
99
+ const verifySteps = verifyInstructions
100
+ ? `## Verification Steps (from plan)\n\n${verifyInstructions}`
101
+ : `## Your Task
102
+
103
+ 1. Start the dev server: \`${devCmd}\`
104
+ 2. Read the server output to find what URL/port it starts on
105
+ 3. Use playwright-cli to open the app and test the feature
106
+ 4. When done, kill the dev server process`;
108
107
  const verifyPrompt = `You are a QA tester verifying that issue #${issueNum} was implemented correctly.
109
108
 
110
109
  ## Issue: ${title}
@@ -115,126 +114,79 @@ ${body}
115
114
  ${diffStat.stdout || 'No diff available'}
116
115
 
117
116
  ${visionContext ? `## Product Vision\n${visionContext}\n` : ''}
118
- ## Your Task
117
+ ${verifySteps}
119
118
 
120
- The app is running at http://localhost:${port}. Use the playwright-cli to test it.
121
-
122
- ### Playwright CLI Commands Available
123
- - \`playwright-cli open http://localhost:${port}\`Open the app in a browser
124
- - \`playwright-cli goto <url>\` — Navigate to a page
125
- - \`playwright-cli snapshot\` — Get a snapshot of the current page with element refs
126
- - \`playwright-cli click <ref>\` — Click an element (use ref from snapshot, e.g. \`e15\`)
127
- - \`playwright-cli type <text>\` — Type text into the focused element
128
- - \`playwright-cli screenshot --path <file>\` — Take a screenshot and save to file
119
+ ### Playwright CLI Commands
120
+ - \`playwright-cli open <url>\` — Open the app
121
+ - \`playwright-cli snapshot\` Get page structure with element refs
122
+ - \`playwright-cli click <ref>\`Click an element
123
+ - \`playwright-cli type <text>\` — Type into focused element
129
124
  - \`playwright-cli fill <ref> <text>\` — Fill a form field
130
- - \`playwright-cli select <ref> <value>\` — Select a dropdown option
131
- - \`playwright-cli wait <selector>\` — Wait for an element to appear
125
+ - \`playwright-cli screenshot --path <file>\` — Take a screenshot
132
126
  - \`playwright-cli console\` — Check browser console for errors
133
- - \`playwright-cli network\` — Check network requests/responses
127
+ - \`playwright-cli network\` — Check network requests
134
128
 
135
- ### Testing Steps
129
+ ### Screenshots
130
+ Save to: ${screenshotDir}
136
131
 
137
- 1. Open the app: \`playwright-cli open http://localhost:${port}\`
138
- 2. Take a snapshot to see the page structure: \`playwright-cli snapshot\`
139
- 3. Navigate to the feature that was changed
140
- 4. Test the ACTUAL user flow described in the issue:
141
- - Can you do what the issue says should work?
142
- - Does the UI render correctly?
143
- - Do form submissions work end-to-end?
144
- - Check console for errors: \`playwright-cli console\`
145
- - Check network for failed requests: \`playwright-cli network\`
146
- 5. Take screenshots at key states (save to the screenshot directory below)
147
- 6. Check for functional gaps:
148
- - Is the backend wired to the frontend?
149
- - Are there UI elements that don't respond?
150
- - Does data persist after submission?
132
+ ## Gate Result (REQUIRED)
151
133
 
152
- ### Auth / Login
153
- ${existsSync(authStateDir) ? 'Auth state is pre-loaded. If you need to log in, use the credentials from the environment or .env file.' : 'No auth state saved.'}
134
+ After testing, write a JSON file to: verify-issue-${issueNum}.json
154
135
 
155
- ## Report
136
+ The file must contain ONLY valid JSON with this exact schema:
156
137
 
157
- After testing, output a verification report:
138
+ {
139
+ "passed": true,
140
+ "summary": "One-line summary of verification outcome",
141
+ "findings": [
142
+ {
143
+ "severity": "critical",
144
+ "description": "What failed or didn't work",
145
+ "fixed": false,
146
+ "file": "path/to/affected/file.ts"
147
+ }
148
+ ]
149
+ }
158
150
 
159
- ### Status: PASS or FAIL
151
+ Rules:
152
+ - passed: true if the feature works as expected. false if there are failures.
153
+ - findings: list ALL checks performed, with severity and pass/fail status.
154
+ - If everything works, set passed=true with an empty findings array.
155
+ - If there are failures, set passed=false — the implementer will be sent back to fix them.
160
156
 
161
- ### What Was Tested
162
- - (list each action you took with playwright-cli)
157
+ Also output a human-readable summary:
163
158
 
159
+ ### Status: PASS or FAIL
160
+ ### What Was Tested
164
161
  ### What Worked
165
- - (list what functioned correctly)
166
-
167
162
  ### What Failed
168
- - (list what didn't work, with details and screenshots)
169
-
170
- ### Console Errors
171
- - (any browser console errors found)
172
-
173
- ### Network Issues
174
- - (any failed API calls or missing endpoints)
175
-
176
- ### Gaps Found
177
- - (any disconnects between frontend and backend, missing pieces, etc.)
178
-
179
- ### Screenshots
180
- Save screenshots to this directory: ${screenshotDir}
181
- Use descriptive filenames:
182
- - \`playwright-cli screenshot --path "${screenshotDir}/01-initial-load.png"\`
183
- - \`playwright-cli screenshot --path "${screenshotDir}/02-after-action.png"\`
184
- - \`playwright-cli screenshot --path "${screenshotDir}/03-final-state.png"\`
185
-
186
- IMPORTANT: Use playwright-cli commands to actually interact with the app.
187
- Navigate, click, type, submit forms. Verify the feature works as a real user would use it.`;
188
- log.info(`Verification agent: claude + playwright-cli | Testing live at http://localhost:${port}`);
189
- // Run the verification agent with timeout and turn limit to prevent hangs
190
- let agentResult;
191
- try {
192
- agentResult = await spawnAgent({
193
- agent: 'claude',
194
- model: config.model,
195
- prompt: verifyPrompt,
196
- cwd: worktree,
197
- logFile,
198
- });
199
- }
200
- finally {
201
- // Always clean up the app process, even if the agent times out or errors
202
- log.info('Shutting down app...');
203
- killProcess(appPid);
204
- // Close playwright-cli browser sessions
205
- exec('playwright-cli close-all');
206
- }
163
+ ### Console/Network Errors`;
164
+ log.info(`Verification agent: ${config.agent} + playwright-cli`);
165
+ const agentResult = await spawnAgent({
166
+ agent: config.agent,
167
+ model: config.model,
168
+ prompt: verifyPrompt,
169
+ cwd: worktree,
170
+ logFile,
171
+ });
172
+ // Close any lingering playwright-cli browser sessions
173
+ exec('playwright-cli close-all');
207
174
  const verifyOutput = agentResult.output;
208
- // Check if verification passed based on agent output
209
175
  if (/Status:.*FAIL/i.test(verifyOutput)) {
210
176
  log.error('Live verification FAILED');
211
- return { passed: false, output: verifyOutput };
177
+ return { passed: false, skipped: false, output: verifyOutput };
212
178
  }
213
179
  else if (/Status:.*PASS/i.test(verifyOutput)) {
214
180
  log.success('Live verification PASSED');
215
- return { passed: true, output: verifyOutput };
181
+ return { passed: true, skipped: false, output: verifyOutput };
216
182
  }
217
183
  else if (agentResult.exitCode === 0) {
218
184
  log.success('Verification completed (agent exit 0)');
219
- return { passed: true, output: verifyOutput };
185
+ return { passed: true, skipped: false, output: verifyOutput };
220
186
  }
221
187
  else {
222
188
  log.warn(`Verification unclear (agent exit ${agentResult.exitCode})`);
223
- return { passed: false, output: verifyOutput };
224
- }
225
- }
226
- function killProcess(pid) {
227
- try {
228
- // Kill process group (negative pid)
229
- process.kill(-pid, 'SIGTERM');
230
- }
231
- catch {
232
- try {
233
- process.kill(pid, 'SIGTERM');
234
- }
235
- catch {
236
- // Process already dead
237
- }
189
+ return { passed: false, skipped: false, output: verifyOutput };
238
190
  }
239
191
  }
240
192
  //# sourceMappingURL=verify.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/lib/verify.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/lib/verify.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,7 @@ export type SetupWorktreeOptions = {
9
9
  sessionBranch?: string;
10
10
  autoMerge?: boolean;
11
11
  skipInstall?: boolean;
12
+ setupCommand?: string;
12
13
  dryRun?: boolean;
13
14
  };
14
15
  export type CleanupWorktreeOptions = {
@@ -12,7 +12,7 @@ const ENV_FILES = ['.env', '.env.local', '.env.development', '.env.development.l
12
12
  * branches from session branch so changes stack across issues.
13
13
  */
14
14
  export async function setupWorktree(options) {
15
- const { issueNum, projectDir, baseBranch, sessionBranch, autoMerge, skipInstall, dryRun } = options;
15
+ const { issueNum, projectDir, baseBranch, sessionBranch, autoMerge, skipInstall, setupCommand, dryRun } = options;
16
16
  const branch = `agent/issue-${issueNum}`;
17
17
  const worktreesDir = resolve(projectDir, '.worktrees');
18
18
  mkdirSync(worktreesDir, { recursive: true });
@@ -85,6 +85,14 @@ export async function setupWorktree(options) {
85
85
  }
86
86
  }
87
87
  }
88
+ // Run custom setup command (e.g., Python venv, Ruby bundler, Go modules)
89
+ if (setupCommand) {
90
+ log.info(`Running setup command: ${setupCommand}`);
91
+ const setupResult = exec(setupCommand, { cwd: worktreePath });
92
+ if (setupResult.exitCode !== 0) {
93
+ log.warn(`Setup command failed (exit ${setupResult.exitCode}), continuing anyway...`);
94
+ }
95
+ }
88
96
  log.info(`Worktree ready at ${worktreePath}`);
89
97
  return { path: worktreePath, branch };
90
98
  }
@@ -1 +1 @@
1
- {"version":3,"file":"worktree.js","sourceRoot":"","sources":["../../src/lib/worktree.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"worktree.js","sourceRoot":"","sources":["../../src/lib/worktree.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bradtaylorsf/alpha-loop",
3
- "version": "1.2.0",
3
+ "version": "1.4.0",
4
4
  "description": "Agent-agnostic automated development loop: Plan → Build → Test → Review → Ship",
5
5
  "type": "module",
6
6
  "packageManager": "pnpm@9.0.0",
@@ -2,7 +2,7 @@
2
2
  name: implementer
3
3
  description: Implements GitHub issues by writing code, tests, and committing. The primary coding agent in the loop.
4
4
  tools: Read, Write, Edit, Glob, Grep, Bash
5
- model: opus
5
+
6
6
  skills: testing-patterns, test-robustness, implementation-planning, git-workflow, security-analysis
7
7
  ---
8
8
 
@@ -2,7 +2,7 @@
2
2
  name: reviewer
3
3
  description: Reviews code changes, fixes issues found, and produces a review summary. Runs after implementation.
4
4
  tools: Read, Write, Edit, Glob, Grep, Bash
5
- model: opus
5
+
6
6
  skills: code-review, security-analysis, testing-patterns, test-robustness, api-patterns, docs-sync
7
7
  ---
8
8
 
@@ -1,71 +0,0 @@
1
- /**
2
- * Configuration Module
3
- * ====================
4
- *
5
- * Loads and validates .alpha-loop.yaml with per-stage agent/model configuration.
6
- * Uses Zod for schema validation with sensible defaults.
7
- */
8
- import { z } from 'zod';
9
- export declare const STAGE_NAMES: readonly ["implement", "fix", "review", "verify", "learn", "aggregate"];
10
- export type StageName = (typeof STAGE_NAMES)[number];
11
- export declare const DEFAULT_AGENT = "claude";
12
- export declare const DEFAULT_MODEL = "opus";
13
- export declare const AgentConfigSchema: z.ZodObject<{
14
- agent: z.ZodDefault<z.ZodString>;
15
- model: z.ZodOptional<z.ZodString>;
16
- maxTurns: z.ZodOptional<z.ZodNumber>;
17
- }, z.core.$strip>;
18
- export type AgentConfig = z.infer<typeof AgentConfigSchema>;
19
- export declare const ConfigSchema: z.ZodObject<{
20
- repo: z.ZodString;
21
- project: z.ZodOptional<z.ZodNumber>;
22
- model: z.ZodDefault<z.ZodString>;
23
- review_model: z.ZodOptional<z.ZodString>;
24
- max_turns: z.ZodOptional<z.ZodNumber>;
25
- label: z.ZodDefault<z.ZodString>;
26
- base_branch: z.ZodDefault<z.ZodString>;
27
- test_command: z.ZodDefault<z.ZodString>;
28
- poll_interval: z.ZodDefault<z.ZodNumber>;
29
- stages: z.ZodDefault<z.ZodOptional<z.ZodObject<{
30
- implement: z.ZodOptional<z.ZodObject<{
31
- agent: z.ZodDefault<z.ZodString>;
32
- model: z.ZodOptional<z.ZodString>;
33
- maxTurns: z.ZodOptional<z.ZodNumber>;
34
- }, z.core.$strip>>;
35
- fix: z.ZodOptional<z.ZodObject<{
36
- agent: z.ZodDefault<z.ZodString>;
37
- model: z.ZodOptional<z.ZodString>;
38
- maxTurns: z.ZodOptional<z.ZodNumber>;
39
- }, z.core.$strip>>;
40
- review: z.ZodOptional<z.ZodObject<{
41
- agent: z.ZodDefault<z.ZodString>;
42
- model: z.ZodOptional<z.ZodString>;
43
- maxTurns: z.ZodOptional<z.ZodNumber>;
44
- }, z.core.$strip>>;
45
- verify: z.ZodOptional<z.ZodObject<{
46
- agent: z.ZodDefault<z.ZodString>;
47
- model: z.ZodOptional<z.ZodString>;
48
- maxTurns: z.ZodOptional<z.ZodNumber>;
49
- }, z.core.$strip>>;
50
- learn: z.ZodOptional<z.ZodObject<{
51
- agent: z.ZodDefault<z.ZodString>;
52
- model: z.ZodOptional<z.ZodString>;
53
- maxTurns: z.ZodOptional<z.ZodNumber>;
54
- }, z.core.$strip>>;
55
- aggregate: z.ZodOptional<z.ZodObject<{
56
- agent: z.ZodDefault<z.ZodString>;
57
- model: z.ZodOptional<z.ZodString>;
58
- maxTurns: z.ZodOptional<z.ZodNumber>;
59
- }, z.core.$strip>>;
60
- }, z.core.$strict>>>;
61
- }, z.core.$strip>;
62
- export type Config = z.infer<typeof ConfigSchema>;
63
- export declare function loadConfig(cwd: string): Config;
64
- /**
65
- * Resolves the agent configuration for a given pipeline stage.
66
- * Merges stage-specific config with global defaults:
67
- * - agent: stage.agent → 'claude'
68
- * - model: stage.model → config.model → 'opus'
69
- * - maxTurns: stage.maxTurns → config.max_turns → undefined
70
- */
71
- export declare function resolveStageConfig(config: Config, stage: StageName): Required<Pick<AgentConfig, 'agent' | 'model'>> & Pick<AgentConfig, 'maxTurns'>;
@@ -1,73 +0,0 @@
1
- /**
2
- * Configuration Module
3
- * ====================
4
- *
5
- * Loads and validates .alpha-loop.yaml with per-stage agent/model configuration.
6
- * Uses Zod for schema validation with sensible defaults.
7
- */
8
- import { readFileSync } from 'node:fs';
9
- import { resolve } from 'node:path';
10
- import { z } from 'zod';
11
- import { parse as parseYaml } from 'yaml';
12
- // ============================================================================
13
- // Constants
14
- // ============================================================================
15
- export const STAGE_NAMES = ['implement', 'fix', 'review', 'verify', 'learn', 'aggregate'];
16
- export const DEFAULT_AGENT = 'claude';
17
- export const DEFAULT_MODEL = 'opus';
18
- // ============================================================================
19
- // Schemas
20
- // ============================================================================
21
- export const AgentConfigSchema = z.object({
22
- agent: z.string().default(DEFAULT_AGENT),
23
- model: z.string().optional(),
24
- maxTurns: z.number().optional(),
25
- });
26
- const StagesSchema = z.object({
27
- implement: AgentConfigSchema.optional(),
28
- fix: AgentConfigSchema.optional(),
29
- review: AgentConfigSchema.optional(),
30
- verify: AgentConfigSchema.optional(),
31
- learn: AgentConfigSchema.optional(),
32
- aggregate: AgentConfigSchema.optional(),
33
- }).strict().optional().default({});
34
- export const ConfigSchema = z.object({
35
- repo: z.string(),
36
- project: z.number().optional(),
37
- model: z.string().default(DEFAULT_MODEL),
38
- review_model: z.string().optional(),
39
- max_turns: z.number().optional(),
40
- label: z.string().default('ready'),
41
- base_branch: z.string().default('master'),
42
- test_command: z.string().default('pnpm test'),
43
- poll_interval: z.number().default(60),
44
- stages: StagesSchema,
45
- });
46
- // ============================================================================
47
- // Config Loading
48
- // ============================================================================
49
- export function loadConfig(cwd) {
50
- const configPath = resolve(cwd, '.alpha-loop.yaml');
51
- const raw = readFileSync(configPath, 'utf-8');
52
- const parsed = parseYaml(raw);
53
- return ConfigSchema.parse(parsed);
54
- }
55
- // ============================================================================
56
- // Stage Config Resolution
57
- // ============================================================================
58
- /**
59
- * Resolves the agent configuration for a given pipeline stage.
60
- * Merges stage-specific config with global defaults:
61
- * - agent: stage.agent → 'claude'
62
- * - model: stage.model → config.model → 'opus'
63
- * - maxTurns: stage.maxTurns → config.max_turns → undefined
64
- */
65
- export function resolveStageConfig(config, stage) {
66
- const stageConfig = config.stages[stage];
67
- return {
68
- agent: stageConfig?.agent ?? DEFAULT_AGENT,
69
- model: stageConfig?.model ?? config.model ?? DEFAULT_MODEL,
70
- maxTurns: stageConfig?.maxTurns ?? config.max_turns,
71
- };
72
- }
73
- //# sourceMappingURL=config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/engine/config.ts"],"names":[],"mappings":"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"}