@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
@@ -8,7 +8,12 @@
8
8
  * Adding a new agent: add a case to AGENT_CLI_MAP and buildAgentArgs().
9
9
  */
10
10
  import { type ChildProcess } from 'node:child_process';
11
- import type { AgentConfig } from './config.js';
11
+ /** Minimal config needed to build agent CLI args. */
12
+ export type AgentConfig = {
13
+ agent: string;
14
+ model: string;
15
+ maxTurns?: number;
16
+ };
12
17
  /**
13
18
  * CLI reference for each supported agent.
14
19
  * Extend this map to add new agent types.
@@ -26,9 +26,9 @@ export const AGENT_CLI_MAP = {
26
26
  },
27
27
  codex: {
28
28
  command: 'codex',
29
- promptFlag: '-q',
29
+ promptFlag: 'exec',
30
30
  modelFlag: '--model',
31
- permissionFlag: '--auto-edit',
31
+ permissionFlag: '--full-auto',
32
32
  supportsMaxTurns: false,
33
33
  },
34
34
  opencode: {
@@ -48,12 +48,15 @@ export function buildAgentArgs(config, prompt) {
48
48
  throw new Error(`Unknown agent type: "${config.agent}". Supported agents: ${Object.keys(AGENT_CLI_MAP).join(', ')}`);
49
49
  }
50
50
  const args = [];
51
- // For opencode, "run" is a subcommand, not a flag
52
- if (config.agent === 'opencode') {
53
- args.push(agentDef.promptFlag); // 'run'
51
+ // For agents that use subcommands (codex 'exec', opencode 'run'), add it first
52
+ const isSubcommand = config.agent === 'codex' || config.agent === 'opencode';
53
+ if (isSubcommand) {
54
+ args.push(agentDef.promptFlag);
55
+ }
56
+ // Model flag (skip if empty — let agent CLI use its default)
57
+ if (config.model) {
58
+ args.push(agentDef.modelFlag, config.model);
54
59
  }
55
- // Model flag
56
- args.push(agentDef.modelFlag, config.model);
57
60
  // Permission flag (if agent supports it)
58
61
  if (agentDef.permissionFlag) {
59
62
  args.push(agentDef.permissionFlag);
@@ -62,13 +65,12 @@ export function buildAgentArgs(config, prompt) {
62
65
  if (config.maxTurns != null && agentDef.supportsMaxTurns && agentDef.maxTurnsFlag) {
63
66
  args.push(agentDef.maxTurnsFlag, String(config.maxTurns));
64
67
  }
65
- // Prompt flag for claude/codex it's a flag before the prompt text
66
- if (config.agent !== 'opencode') {
67
- args.push(agentDef.promptFlag, prompt);
68
+ // Prompt: subcommand agents take it as positional arg; flag agents use promptFlag
69
+ if (isSubcommand) {
70
+ args.push(prompt);
68
71
  }
69
72
  else {
70
- // opencode takes prompt as a positional arg after 'run'
71
- args.push(prompt);
73
+ args.push(agentDef.promptFlag, prompt);
72
74
  }
73
75
  return { command: agentDef.command, args };
74
76
  }
@@ -1 +1 @@
1
- {"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/engine/agents.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,KAAK,EAAqB,MAAM,oBAAoB,CAAC;AAG9D,+EAA+E;AAC/E,oBAAoB;AACpB,+EAA+E;AAE/E;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAOrB;IACH,MAAM,EAAE;QACN,OAAO,EAAE,QAAQ;QACjB,UAAU,EAAE,IAAI;QAChB,SAAS,EAAE,SAAS;QACpB,cAAc,EAAE,gCAAgC;QAChD,gBAAgB,EAAE,IAAI;QACtB,YAAY,EAAE,aAAa;KAC5B;IACD,KAAK,EAAE;QACL,OAAO,EAAE,OAAO;QAChB,UAAU,EAAE,IAAI;QAChB,SAAS,EAAE,SAAS;QACpB,cAAc,EAAE,aAAa;QAC7B,gBAAgB,EAAE,KAAK;KACxB;IACD,QAAQ,EAAE;QACR,OAAO,EAAE,UAAU;QACnB,UAAU,EAAE,KAAK;QACjB,SAAS,EAAE,SAAS;QACpB,gBAAgB,EAAE,KAAK;KACxB;CACF,CAAC;AAWF;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,MAAuC,EAAE,MAAc;IACpF,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CACb,wBAAwB,MAAM,CAAC,KAAK,wBAAwB,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACpG,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAa,EAAE,CAAC;IAE1B,kDAAkD;IAClD,IAAI,MAAM,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;QAChC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ;IAC1C,CAAC;IAED,aAAa;IACb,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IAE5C,yCAAyC;IACzC,IAAI,QAAQ,CAAC,cAAc,EAAE,CAAC;QAC5B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IACrC,CAAC;IAED,8DAA8D;IAC9D,IAAI,MAAM,CAAC,QAAQ,IAAI,IAAI,IAAI,QAAQ,CAAC,gBAAgB,IAAI,QAAQ,CAAC,YAAY,EAAE,CAAC;QAClF,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED,oEAAoE;IACpE,IAAI,MAAM,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;QAChC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACzC,CAAC;SAAM,CAAC;QACN,wDAAwD;QACxD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACpB,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC;AAC7C,CAAC;AAED,+EAA+E;AAC/E,cAAc;AACd,+EAA+E;AAE/E;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,MAAuC,EAAE,MAAc,EAAE,GAAW;IAC7F,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEzD,OAAO,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE;QAC1B,GAAG;QACH,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;QAC/B,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE;KACxB,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/engine/agents.ts"],"names":[],"mappings":"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"}
@@ -2,14 +2,12 @@
2
2
  * Prerequisites Module
3
3
  * ====================
4
4
  *
5
- * Verifies that all configured AI CLI agents are installed before starting the pipeline.
6
- * Groups stages by agent for clear diagnostic output.
5
+ * Verifies that the configured AI CLI agent is installed before starting the pipeline.
7
6
  */
8
- import { type Config, type StageName } from './config.js';
7
+ import type { Config } from '../lib/config.js';
9
8
  export interface AgentCheckResult {
10
9
  agent: string;
11
10
  installed: boolean;
12
- stages: StageName[];
13
11
  }
14
12
  export interface PrerequisiteResult {
15
13
  ok: boolean;
@@ -20,8 +18,7 @@ export interface PrerequisiteResult {
20
18
  */
21
19
  export declare function isCommandAvailable(command: string): boolean;
22
20
  /**
23
- * Checks all agents configured across pipeline stages.
24
- * Returns structured results showing which agents are installed and which stages they serve.
21
+ * Checks that the configured agent CLI is installed.
25
22
  */
26
23
  export declare function checkAgents(config: Config): PrerequisiteResult;
27
24
  /**
@@ -29,6 +26,6 @@ export declare function checkAgents(config: Config): PrerequisiteResult;
29
26
  */
30
27
  export declare function formatCheckResults(result: PrerequisiteResult): string;
31
28
  /**
32
- * Formats the pipeline startup summary showing per-stage configuration.
29
+ * Formats the pipeline startup summary.
33
30
  */
34
31
  export declare function formatPipelineSummary(config: Config): string;
@@ -2,11 +2,9 @@
2
2
  * Prerequisites Module
3
3
  * ====================
4
4
  *
5
- * Verifies that all configured AI CLI agents are installed before starting the pipeline.
6
- * Groups stages by agent for clear diagnostic output.
5
+ * Verifies that the configured AI CLI agent is installed before starting the pipeline.
7
6
  */
8
7
  import { execSync } from 'node:child_process';
9
- import { STAGE_NAMES, resolveStageConfig } from './config.js';
10
8
  // ============================================================================
11
9
  // Agent Check
12
10
  // ============================================================================
@@ -27,30 +25,16 @@ export function isCommandAvailable(command) {
27
25
  }
28
26
  }
29
27
  /**
30
- * Checks all agents configured across pipeline stages.
31
- * Returns structured results showing which agents are installed and which stages they serve.
28
+ * Checks that the configured agent CLI is installed.
32
29
  */
33
30
  export function checkAgents(config) {
34
- // Collect stages grouped by agent
35
- const agentStages = new Map();
36
- for (const stage of STAGE_NAMES) {
37
- const { agent } = resolveStageConfig(config, stage);
38
- const stages = agentStages.get(agent) ?? [];
39
- stages.push(stage);
40
- agentStages.set(agent, stages);
41
- }
42
- // Check each unique agent
43
- const results = [];
44
- for (const [agent, stages] of agentStages) {
45
- results.push({
46
- agent,
47
- installed: isCommandAvailable(agent),
48
- stages,
49
- });
50
- }
31
+ const result = {
32
+ agent: config.agent,
33
+ installed: isCommandAvailable(config.agent),
34
+ };
51
35
  return {
52
- ok: results.every(r => r.installed),
53
- results,
36
+ ok: result.installed,
37
+ results: [result],
54
38
  };
55
39
  }
56
40
  // ============================================================================
@@ -63,28 +47,20 @@ export function formatCheckResults(result) {
63
47
  const lines = ['Checking agents...'];
64
48
  for (const r of result.results) {
65
49
  const icon = r.installed ? '\u2713' : '\u2717';
66
- const stageList = r.stages.join(', ');
67
- lines.push(` ${icon} ${r.agent} (${stageList})`);
50
+ lines.push(` ${icon} ${r.agent}`);
68
51
  }
69
52
  if (!result.ok) {
70
53
  const missing = result.results.filter(r => !r.installed);
71
54
  for (const m of missing) {
72
- lines.push(`\nError: "${m.agent}" is not installed. Affected stages: ${m.stages.join(', ')}`);
55
+ lines.push(`\nError: "${m.agent}" is not installed.`);
73
56
  }
74
57
  }
75
58
  return lines.join('\n');
76
59
  }
77
60
  /**
78
- * Formats the pipeline startup summary showing per-stage configuration.
61
+ * Formats the pipeline startup summary.
79
62
  */
80
63
  export function formatPipelineSummary(config) {
81
- const lines = ['Pipeline:'];
82
- for (const stage of STAGE_NAMES) {
83
- const sc = resolveStageConfig(config, stage);
84
- const turns = sc.maxTurns ? ` (${sc.maxTurns} turns)` : '';
85
- const padded = `${stage}:`.padEnd(14);
86
- lines.push(` ${padded}${sc.agent}/${sc.model}${turns}`);
87
- }
88
- return lines.join('\n');
64
+ return `Pipeline: ${config.agent}/${config.model}`;
89
65
  }
90
66
  //# sourceMappingURL=prerequisites.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"prerequisites.js","sourceRoot":"","sources":["../../src/engine/prerequisites.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prerequisites.js","sourceRoot":"","sources":["../../src/engine/prerequisites.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAiB9C,+EAA+E;AAC/E,cAAc;AACd,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAe;IAChD,+EAA+E;IAC/E,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACtC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,CAAC;QACH,QAAQ,CAAC,SAAS,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,MAAc;IACxC,MAAM,MAAM,GAAqB;QAC/B,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,SAAS,EAAE,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC;KAC5C,CAAC;IAEF,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,SAAS;QACpB,OAAO,EAAE,CAAC,MAAM,CAAC;KAClB,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,aAAa;AACb,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAA0B;IAC3D,MAAM,KAAK,GAAa,CAAC,oBAAoB,CAAC,CAAC;IAE/C,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC/C,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IACrC,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACzD,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,KAAK,qBAAqB,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAc;IAClD,OAAO,aAAa,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;AACrD,CAAC"}
@@ -2,6 +2,14 @@ export type AgentResult = {
2
2
  exitCode: number;
3
3
  output: string;
4
4
  duration: number;
5
+ /** Total cost in USD (parsed from agent output, if available). */
6
+ costUsd?: number;
7
+ /** Input tokens consumed (parsed from agent output, if available). */
8
+ inputTokens?: number;
9
+ /** Output tokens generated (parsed from agent output, if available). */
10
+ outputTokens?: number;
11
+ /** Model used for the invocation. */
12
+ model?: string;
5
13
  };
6
14
  export type AgentOptions = {
7
15
  agent: 'claude' | 'codex' | 'opencode';
@@ -14,6 +22,8 @@ export type AgentOptions = {
14
22
  timeout?: number;
15
23
  /** Max conversation turns for the agent. Only supported by claude. */
16
24
  maxTurns?: number;
25
+ /** Resume the most recent agent session in the CWD instead of starting fresh. */
26
+ resume?: boolean;
17
27
  };
18
28
  /**
19
29
  * Build CLI command and args for a given agent type.
@@ -22,8 +32,16 @@ export declare function buildAgentArgs(options: AgentOptions): {
22
32
  command: string;
23
33
  args: string[];
24
34
  };
35
+ /**
36
+ * Build a shell command string for one-shot agent prompts (scan, vision).
37
+ * Reads prompt from stdin. Returns the command to pipe into.
38
+ */
39
+ export declare function buildOneShotCommand(agent: 'claude' | 'codex' | 'opencode', model: string): string;
25
40
  /**
26
41
  * Spawn an AI agent with a prompt.
27
42
  * Streams output to terminal in real-time while capturing it.
43
+ *
44
+ * For Claude, uses stream-json format and parses it into readable log lines.
45
+ * For other agents, captures raw stdout/stderr directly.
28
46
  */
29
47
  export declare function spawnAgent(options: AgentOptions): Promise<AgentResult>;
package/dist/lib/agent.js CHANGED
@@ -4,6 +4,67 @@
4
4
  import { spawn } from 'node:child_process';
5
5
  import { createWriteStream } from 'node:fs';
6
6
  import { log } from './logger.js';
7
+ /**
8
+ * Parse a Claude stream-json line into a human-readable log line.
9
+ * Returns null for lines that shouldn't be logged.
10
+ */
11
+ function formatStreamJsonLine(line) {
12
+ try {
13
+ const obj = JSON.parse(line);
14
+ const type = obj.type;
15
+ if (type === 'assistant') {
16
+ const msg = obj.message;
17
+ const content = (msg?.content ?? []);
18
+ const parts = [];
19
+ for (const block of content) {
20
+ if (block.type === 'tool_use') {
21
+ const input = block.input;
22
+ const name = block.name;
23
+ // Show the most useful input field for common tools
24
+ if (name === 'Read' && input?.file_path) {
25
+ parts.push(`[${name}] ${input.file_path}`);
26
+ }
27
+ else if (name === 'Write' && input?.file_path) {
28
+ parts.push(`[${name}] ${input.file_path}`);
29
+ }
30
+ else if (name === 'Edit' && input?.file_path) {
31
+ parts.push(`[${name}] ${input.file_path}`);
32
+ }
33
+ else if (name === 'Bash' && input?.command) {
34
+ parts.push(`[${name}] ${String(input.command).slice(0, 200)}`);
35
+ }
36
+ else if (name === 'Glob' && input?.pattern) {
37
+ parts.push(`[${name}] ${input.pattern}`);
38
+ }
39
+ else if (name === 'Grep' && input?.pattern) {
40
+ parts.push(`[${name}] ${input.pattern}`);
41
+ }
42
+ else {
43
+ parts.push(`[${name}]`);
44
+ }
45
+ }
46
+ else if (block.type === 'text') {
47
+ const text = String(block.text ?? '').trim();
48
+ if (text)
49
+ parts.push(text);
50
+ }
51
+ }
52
+ if (parts.length > 0)
53
+ return parts.join('\n');
54
+ }
55
+ if (type === 'result') {
56
+ const result = String(obj.result ?? '').trim();
57
+ const cost = obj.total_cost_usd;
58
+ const costStr = cost ? ` ($${cost.toFixed(4)})` : '';
59
+ if (result)
60
+ return `\n--- RESULT${costStr} ---\n${result}`;
61
+ }
62
+ return null;
63
+ }
64
+ catch {
65
+ return null;
66
+ }
67
+ }
7
68
  /** Default agent timeout: 30 minutes */
8
69
  const DEFAULT_AGENT_TIMEOUT_MS = 30 * 60 * 1000;
9
70
  /**
@@ -12,43 +73,81 @@ const DEFAULT_AGENT_TIMEOUT_MS = 30 * 60 * 1000;
12
73
  export function buildAgentArgs(options) {
13
74
  switch (options.agent) {
14
75
  case 'claude': {
15
- const args = [
16
- '-p',
17
- '--model', options.model,
18
- '--dangerously-skip-permissions',
19
- '--verbose',
20
- '--output-format', 'text',
21
- ];
76
+ const args = [];
77
+ if (options.resume)
78
+ args.push('--continue');
79
+ args.push('-p');
80
+ if (options.model)
81
+ args.push('--model', options.model);
82
+ args.push('--dangerously-skip-permissions', '--verbose', '--output-format', 'stream-json');
22
83
  if (options.maxTurns) {
23
84
  args.push('--max-turns', String(options.maxTurns));
24
85
  }
25
86
  return { command: 'claude', args };
26
87
  }
27
88
  case 'codex': {
28
- const args = [
29
- '-q',
30
- '--model', options.model,
31
- '--auto-edit',
32
- ];
89
+ const args = [];
90
+ if (options.resume) {
91
+ args.push('exec', 'resume', '--last');
92
+ }
93
+ else {
94
+ args.push('exec');
95
+ }
96
+ if (options.model)
97
+ args.push('--model', options.model);
98
+ args.push('--full-auto');
33
99
  return { command: 'codex', args };
34
100
  }
35
101
  case 'opencode': {
36
- const args = [
37
- 'run',
38
- '--model', options.model,
39
- ];
102
+ const args = ['run'];
103
+ if (options.model)
104
+ args.push('--model', options.model);
40
105
  return { command: 'opencode', args };
41
106
  }
42
107
  default:
43
108
  throw new Error(`Unknown agent type: ${options.agent}`);
44
109
  }
45
110
  }
111
+ /**
112
+ * Build a shell command string for one-shot agent prompts (scan, vision).
113
+ * Reads prompt from stdin. Returns the command to pipe into.
114
+ */
115
+ export function buildOneShotCommand(agent, model) {
116
+ switch (agent) {
117
+ case 'claude': {
118
+ const parts = ['claude', '-p'];
119
+ if (model)
120
+ parts.push('--model', model);
121
+ parts.push('--dangerously-skip-permissions', '--output-format', 'text');
122
+ return parts.join(' ');
123
+ }
124
+ case 'codex': {
125
+ const parts = ['codex', 'exec'];
126
+ if (model)
127
+ parts.push('--model', model);
128
+ parts.push('--full-auto');
129
+ return parts.join(' ');
130
+ }
131
+ case 'opencode': {
132
+ const parts = ['opencode', 'run'];
133
+ if (model)
134
+ parts.push('--model', model);
135
+ return parts.join(' ');
136
+ }
137
+ default:
138
+ throw new Error(`Unknown agent type: ${agent}`);
139
+ }
140
+ }
46
141
  /**
47
142
  * Spawn an AI agent with a prompt.
48
143
  * Streams output to terminal in real-time while capturing it.
144
+ *
145
+ * For Claude, uses stream-json format and parses it into readable log lines.
146
+ * For other agents, captures raw stdout/stderr directly.
49
147
  */
50
148
  export async function spawnAgent(options) {
51
149
  const { command, args } = buildAgentArgs(options);
150
+ const useStreamJson = options.agent === 'claude';
52
151
  log.info(`Agent: ${options.agent} | Model: ${options.model} | CWD: ${options.cwd}`);
53
152
  const startTime = Date.now();
54
153
  const chunks = [];
@@ -63,42 +162,124 @@ export async function spawnAgent(options) {
63
162
  stdio: ['pipe', 'pipe', 'pipe'],
64
163
  });
65
164
  let resolved = false;
165
+ // For stream-json: accumulate partial lines, extract final result text
166
+ let lineBuffer = '';
167
+ let finalResultText = '';
168
+ // Cost/token tracking (parsed from stream-json result blocks)
169
+ let parsedCostUsd;
170
+ let parsedInputTokens;
171
+ let parsedOutputTokens;
66
172
  // Pipe prompt via stdin (like: echo "$prompt" | claude -p)
67
173
  child.stdin.write(options.prompt);
68
174
  child.stdin.end();
69
- const handleData = (stream) => (data) => {
175
+ /**
176
+ * Write a string to the log file, handling backpressure.
177
+ */
178
+ const writeToLog = (stream, text) => {
179
+ if (!logStream)
180
+ return;
181
+ const ok = logStream.write(text);
182
+ if (!ok) {
183
+ stream.pause();
184
+ logStream.once('drain', () => stream.resume());
185
+ }
186
+ };
187
+ /**
188
+ * Handle raw data for non-Claude agents (pass-through).
189
+ */
190
+ const handleRawData = (stream) => (data) => {
70
191
  chunks.push(data);
71
- if (options.verbose) {
192
+ if (options.verbose)
72
193
  process.stderr.write(data);
73
- }
74
- if (logStream) {
75
- const ok = logStream.write(data);
76
- // Handle backpressure: pause the source stream until the log drains
77
- if (!ok) {
78
- stream.pause();
79
- logStream.once('drain', () => stream.resume());
194
+ writeToLog(stream, data.toString());
195
+ };
196
+ /**
197
+ * Handle stream-json data for Claude parse JSON lines into readable output.
198
+ */
199
+ const handleStreamJson = (stream) => (data) => {
200
+ chunks.push(data);
201
+ lineBuffer += data.toString();
202
+ // Process complete lines
203
+ let newlineIdx;
204
+ while ((newlineIdx = lineBuffer.indexOf('\n')) !== -1) {
205
+ const line = lineBuffer.slice(0, newlineIdx).trim();
206
+ lineBuffer = lineBuffer.slice(newlineIdx + 1);
207
+ if (!line)
208
+ continue;
209
+ // Extract the final result text and cost/token data for the return value
210
+ try {
211
+ const obj = JSON.parse(line);
212
+ if (obj.type === 'result') {
213
+ finalResultText = typeof obj.result === 'string' ? obj.result : '';
214
+ // Capture error info so transient error detection works
215
+ if (obj.is_error || obj.subtype === 'error') {
216
+ finalResultText = finalResultText || JSON.stringify(obj);
217
+ }
218
+ // Parse cost from result block
219
+ if (typeof obj.total_cost_usd === 'number') {
220
+ parsedCostUsd = obj.total_cost_usd;
221
+ }
222
+ // Parse token usage from result block
223
+ const usage = obj.usage;
224
+ if (usage) {
225
+ if (typeof usage.input_tokens === 'number')
226
+ parsedInputTokens = usage.input_tokens;
227
+ if (typeof usage.output_tokens === 'number')
228
+ parsedOutputTokens = usage.output_tokens;
229
+ }
230
+ }
231
+ }
232
+ catch { /* not valid JSON, ignore */ }
233
+ const formatted = formatStreamJsonLine(line);
234
+ if (formatted) {
235
+ const logLine = formatted + '\n';
236
+ if (options.verbose)
237
+ process.stderr.write(logLine);
238
+ writeToLog(stream, logLine);
80
239
  }
81
240
  }
82
241
  };
83
- child.stdout.on('data', handleData(child.stdout));
84
- child.stderr.on('data', handleData(child.stderr));
242
+ if (useStreamJson) {
243
+ child.stdout.on('data', handleStreamJson(child.stdout));
244
+ // stderr from Claude in stream-json mode is typically empty, but capture it
245
+ child.stderr.on('data', handleRawData(child.stderr));
246
+ }
247
+ else {
248
+ child.stdout.on('data', handleRawData(child.stdout));
249
+ child.stderr.on('data', handleRawData(child.stderr));
250
+ }
85
251
  // Prevent unhandled stream errors from crashing the process
86
252
  child.stdout.on('error', () => { });
87
253
  child.stderr.on('error', () => { });
88
- const getOutput = () => Buffer.concat(chunks).toString();
254
+ const getOutput = () => {
255
+ if (useStreamJson) {
256
+ // Return the parsed result text, not raw JSON
257
+ return finalResultText || Buffer.concat(chunks).toString();
258
+ }
259
+ return Buffer.concat(chunks).toString();
260
+ };
89
261
  const finish = (exitCode, output) => {
90
262
  if (resolved)
91
263
  return;
92
264
  resolved = true;
93
265
  clearTimeout(timer);
94
266
  const duration = Date.now() - startTime;
267
+ const result = {
268
+ exitCode,
269
+ output,
270
+ duration,
271
+ model: options.model || undefined,
272
+ costUsd: parsedCostUsd,
273
+ inputTokens: parsedInputTokens,
274
+ outputTokens: parsedOutputTokens,
275
+ };
95
276
  if (logStream) {
96
277
  logStream.end(() => {
97
- resolve({ exitCode, output, duration });
278
+ resolve(result);
98
279
  });
99
280
  }
100
281
  else {
101
- resolve({ exitCode, output, duration });
282
+ resolve(result);
102
283
  }
103
284
  };
104
285
  // Kill the agent if it exceeds the timeout
@@ -1 +1 @@
1
- {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/lib/agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/lib/agent.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,18 @@
1
+ /** Per-model pricing (cost per million tokens). */
2
+ export type ModelPricing = {
3
+ input: number;
4
+ output: number;
5
+ };
6
+ /**
7
+ * Estimate cost in USD from token counts and a pricing table.
8
+ * Returns 0 if the model is not in the pricing table.
9
+ */
10
+ export declare function estimateCost(model: string, inputTokens: number, outputTokens: number, pricing: Record<string, ModelPricing>): number;
1
11
  export type Config = {
2
12
  repo: string;
3
13
  repoOwner: string;
4
14
  project: number;
15
+ agent: 'claude' | 'codex' | 'opencode';
5
16
  model: string;
6
17
  reviewModel: string;
7
18
  pollInterval: number;
@@ -12,7 +23,6 @@ export type Config = {
12
23
  maxTestRetries: number;
13
24
  testCommand: string;
14
25
  devCommand: string;
15
- port: number;
16
26
  skipTests: boolean;
17
27
  skipReview: boolean;
18
28
  skipInstall: boolean;
@@ -29,8 +39,21 @@ export type Config = {
29
39
  runFull: boolean;
30
40
  verbose: boolean;
31
41
  harnesses: string[];
42
+ setupCommand: string;
43
+ evalDir: string;
44
+ evalModel: string;
45
+ skipEval: boolean;
46
+ evalTimeout: number;
47
+ /** Auto-capture failures as eval cases at end of session (default: true). */
48
+ autoCapture: boolean;
49
+ /** Skip post-session holistic code review (default: false). */
50
+ skipPostSessionReview: boolean;
51
+ /** Skip security scanning in post-session review (default: false). */
52
+ skipPostSessionSecurity: boolean;
53
+ /** Per-model pricing table (cost per million tokens). */
54
+ pricing: Record<string, ModelPricing>;
32
55
  };
33
- /** Validate a string contains only safe shell characters. */
56
+ /** Validate a string contains only safe shell characters. Empty strings are allowed (model is optional). */
34
57
  export declare function assertSafeShellArg(value: string, name: string): string;
35
58
  export declare function detectRepo(): string | null;
36
59
  export declare function loadConfig(overrides?: Partial<Config>): Config;