@rcrsr/claude-code-runner 0.4.0 → 0.5.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 +103 -30
  2. package/dist/cli/args.d.ts +0 -3
  3. package/dist/cli/args.d.ts.map +1 -1
  4. package/dist/cli/args.js +51 -20
  5. package/dist/cli/args.js.map +1 -1
  6. package/dist/core/runner.d.ts +5 -2
  7. package/dist/core/runner.d.ts.map +1 -1
  8. package/dist/core/runner.js +27 -24
  9. package/dist/core/runner.js.map +1 -1
  10. package/dist/index.js +83 -41
  11. package/dist/index.js.map +1 -1
  12. package/dist/output/colors.d.ts +5 -11
  13. package/dist/output/colors.d.ts.map +1 -1
  14. package/dist/output/colors.js +7 -59
  15. package/dist/output/colors.js.map +1 -1
  16. package/dist/output/deaddrop-queue.d.ts +45 -0
  17. package/dist/output/deaddrop-queue.d.ts.map +1 -0
  18. package/dist/output/deaddrop-queue.js +82 -0
  19. package/dist/output/deaddrop-queue.js.map +1 -0
  20. package/dist/output/formatter.d.ts +4 -0
  21. package/dist/output/formatter.d.ts.map +1 -1
  22. package/dist/output/formatter.js +20 -17
  23. package/dist/output/formatter.js.map +1 -1
  24. package/dist/process/pty.d.ts.map +1 -1
  25. package/dist/process/pty.js +3 -2
  26. package/dist/process/pty.js.map +1 -1
  27. package/dist/script/index.d.ts +8 -0
  28. package/dist/script/index.d.ts.map +1 -0
  29. package/dist/script/index.js +10 -0
  30. package/dist/script/index.js.map +1 -0
  31. package/dist/script/loader.d.ts +13 -0
  32. package/dist/script/loader.d.ts.map +1 -0
  33. package/dist/script/loader.js +66 -0
  34. package/dist/script/loader.js.map +1 -0
  35. package/dist/script/parser.d.ts +63 -0
  36. package/dist/script/parser.d.ts.map +1 -0
  37. package/dist/script/parser.js +349 -0
  38. package/dist/script/parser.js.map +1 -0
  39. package/dist/script/types.d.ts +49 -0
  40. package/dist/script/types.d.ts.map +1 -0
  41. package/dist/script/types.js +5 -0
  42. package/dist/script/types.js.map +1 -0
  43. package/dist/script/variables.d.ts +27 -0
  44. package/dist/script/variables.d.ts.map +1 -0
  45. package/dist/script/variables.js +74 -0
  46. package/dist/script/variables.js.map +1 -0
  47. package/dist/templates/command.d.ts +18 -20
  48. package/dist/templates/command.d.ts.map +1 -1
  49. package/dist/templates/command.js +40 -61
  50. package/dist/templates/command.js.map +1 -1
  51. package/dist/types/index.d.ts +1 -0
  52. package/dist/types/index.d.ts.map +1 -1
  53. package/dist/types/index.js +1 -0
  54. package/dist/types/index.js.map +1 -1
  55. package/dist/types/runner.d.ts +12 -0
  56. package/dist/types/runner.d.ts.map +1 -1
  57. package/dist/types/runner.js +4 -3
  58. package/dist/types/runner.js.map +1 -1
  59. package/dist/types/tools.d.ts +64 -0
  60. package/dist/types/tools.d.ts.map +1 -0
  61. package/dist/types/tools.js +12 -0
  62. package/dist/types/tools.js.map +1 -0
  63. package/dist/utils/arguments.d.ts +19 -0
  64. package/dist/utils/arguments.d.ts.map +1 -0
  65. package/dist/utils/arguments.js +31 -0
  66. package/dist/utils/arguments.js.map +1 -0
  67. package/dist/utils/constants.d.ts +49 -0
  68. package/dist/utils/constants.d.ts.map +1 -0
  69. package/dist/utils/constants.js +54 -0
  70. package/dist/utils/constants.js.map +1 -0
  71. package/dist/utils/formatting.d.ts +10 -0
  72. package/dist/utils/formatting.d.ts.map +1 -0
  73. package/dist/utils/formatting.js +19 -0
  74. package/dist/utils/formatting.js.map +1 -0
  75. package/dist/utils/index.d.ts +7 -0
  76. package/dist/utils/index.d.ts.map +1 -0
  77. package/dist/utils/index.js +7 -0
  78. package/dist/utils/index.js.map +1 -0
  79. package/package.json +1 -1
package/README.md CHANGED
@@ -4,12 +4,12 @@ Deterministic, scripted, unattended Claude Code execution.
4
4
 
5
5
  ## Why Use This?
6
6
 
7
- - **Run unattended** — Execute Claude commands in CI/CD pipelines and automation scripts
8
- - **Script multiple commands** — Chain prompts together in a single run
9
- - **Iterative runs with fresh context per phase** — Each command starts with a clean slate, ideal for phase-based implementation plans
10
- - **Self-correcting loops** — Users can configure prompts with [runner signals](#runner-signals) to control execution, like retry, complete, or escalation to a human
11
- - **Full visibility** — Watch tool calls stream in real-time
12
- - **Complete logs** — Every session captured for debugging and review
7
+ - **Walk away** — Workflows run unattended in CI/CD pipelines
8
+ - **Chain results** — Capture output from one step, inject it into the next
9
+ - **Claude decides** — Signals control when to retry, escalate, or finish
10
+ - **No hitting context limits** — Fresh context per step keeps long workflows running
11
+ - **Watch live** — See tool calls stream as they execute
12
+ - **Replay later** — Full session logs for debugging
13
13
 
14
14
  ## Prerequisites
15
15
 
@@ -30,12 +30,6 @@ npm install -g @rcrsr/claude-code-runner
30
30
  claude-code-runner prompt "Refactor the auth module to use async/await"
31
31
  ```
32
32
 
33
- The `prompt` keyword is optional — bare strings work the same way:
34
-
35
- ```bash
36
- claude-code-runner "Fix the failing tests in src/utils"
37
- ```
38
-
39
33
  ### command — Run a slash command file
40
34
 
41
35
  Store prompts as markdown files in `.claude/commands/` and invoke them by name:
@@ -69,7 +63,7 @@ Output findings as a numbered list.
69
63
  ---
70
64
  description: Review code for issues
71
65
  argument-hint: <file> [severity]
72
- model: claude-sonnet-4-20250514
66
+ model: sonnet
73
67
  ---
74
68
 
75
69
  Review $1 with severity level $2...
@@ -79,24 +73,64 @@ Review $1 with severity level $2...
79
73
  - `model` — Default model for this command (CLI `--model` takes precedence)
80
74
  - `description` — Command description
81
75
 
82
- ### script — Run multiple commands in sequence
76
+ ### script — Run multi-phase workflows
83
77
 
84
- Create a script file with one command per line:
78
+ Scripts chain commands where each phase builds on the previous. Output from one step can be captured and reused in subsequent steps via variable substitution.
85
79
 
86
80
  ```bash
87
- claude-code-runner script deploy-tasks.txt
81
+ claude-code-runner script refactor-workflow.txt src/api/
88
82
  ```
89
83
 
90
- **Example script** (`deploy-tasks.txt`):
84
+ **Script syntax:**
85
+
86
+ | Syntax | Description |
87
+ | ----------------------------------- | ----------------------------------------- |
88
+ | `prompt("text")` | Run a prompt (supports `\n` for newlines) |
89
+ | `prompt(<<EOF...EOF)` | Multi-line prompt using heredoc |
90
+ | `command("name")` | Run a command template |
91
+ | `command("name", ["arg1", "arg2"])` | Run command with arguments |
92
+ | `-> $varname` | Capture output into a variable |
93
+ | `$_` | Previous step's output (auto-captured) |
94
+ | `$varname` | Named captured variable |
95
+ | `$1`, `$2`, `$ARGUMENTS` | Script arguments |
96
+ | `# comment` | Comments (ignored) |
97
+
98
+ **Example: Variable capture and chaining** (`refactor-workflow.txt`):
91
99
 
92
100
  ```text
93
- # Comments start with #
94
- prompt Run the test suite and fix any failures
95
- command review-code src/api/handlers.ts
96
- prompt Update the changelog for version 2.1.0
101
+ ---
102
+ argument-hint: <directory>
103
+ ---
104
+ # Phase 1: Analyze - capture issues list
105
+ prompt("Review $1 for error handling issues. List each issue with file:line.") -> $issues
106
+
107
+ # Phase 2: Fix - use captured issues (no temp file needed)
108
+ prompt(<<EOF
109
+ Fix these issues:
110
+ $issues
111
+
112
+ For each fix, make minimal changes.
113
+ EOF
114
+ )
115
+
116
+ # Phase 3: Verify - $_ contains previous output
117
+ prompt("Run tests. Confirm fixes are correct. Previous output: $_")
97
118
  ```
98
119
 
99
- Scripts stop on `BLOCKED` or `ERROR` signals, letting you catch issues before continuing.
120
+ **Example: Command with capture** (`test-and-fix.txt`):
121
+
122
+ ```text
123
+ # Run tests, capture failures
124
+ command("run-tests", [$1]) -> $failures
125
+
126
+ # Fix any failures
127
+ prompt("Fix these test failures:\n$failures")
128
+
129
+ # Verify
130
+ command("run-tests", [$1])
131
+ ```
132
+
133
+ Scripts stop on `BLOCKED` or `ERROR` signals, catching issues before continuing to the next phase.
100
134
 
101
135
  ### Options
102
136
 
@@ -113,7 +147,7 @@ Scripts stop on `BLOCKED` or `ERROR` signals, letting you catch issues before co
113
147
  **Example with model selection:**
114
148
 
115
149
  ```bash
116
- claude-code-runner -m sonnet "Explain this codebase"
150
+ claude-code-runner -m sonnet prompt "Explain this codebase"
117
151
  ```
118
152
 
119
153
  ## Runner Signals
@@ -128,23 +162,62 @@ Signals give Claude a way to control execution flow. Instruct Claude to output t
128
162
 
129
163
  No signal means success—the runner exits when Claude finishes without outputting a signal.
130
164
 
131
- **Example prompt using signals:**
165
+ ### Document-Driven Workflows
166
+
167
+ The real power of runner signals is **checklist-based execution**. Create a document with implementation steps, and Claude works through them one at a time across multiple invocations.
168
+
169
+ **Implementation plan** (`PLAN.md`):
170
+
171
+ ```markdown
172
+ # Feature: User Authentication
173
+
174
+ - [ ] Create `src/auth/types.ts` with User and Session interfaces
175
+ - [ ] Implement `src/auth/session.ts` with createSession and validateSession
176
+ - [ ] Add JWT signing in `src/auth/jwt.ts`
177
+ - [ ] Write tests in `src/auth/__tests__/session.test.ts`
178
+ - [ ] Update `src/index.ts` to export auth module
179
+ ```
180
+
181
+ **Command template** (`.claude/commands/work-plan.md`):
182
+
183
+ ```markdown
184
+ Read $1 and find the first unchecked item (- [ ]).
185
+
186
+ 1. Implement that single item
187
+ 2. Mark it complete by changing `- [ ]` to `- [x]`
188
+ 3. Check if any unchecked items remain:
189
+ - If YES: output :::RUNNER::REPEAT_STEP:::
190
+ - If NO: output "All tasks complete"
191
+
192
+ If blocked, output :::RUNNER::BLOCKED::: with what you need.
193
+ ```
194
+
195
+ **Run it:**
132
196
 
133
197
  ```bash
134
- claude-code-runner "Fix all lint errors in src/. Output :::RUNNER::BLOCKED::: if you need human input."
198
+ claude-code-runner command work-plan PLAN.md
135
199
  ```
136
200
 
137
- **Example template with signals** (`.claude/commands/fix-tests.md`):
201
+ Each invocation: Claude finds the next unchecked step → implements it → marks it done → signals `REPEAT_STEP`. The loop continues until all boxes are checked. The document itself becomes persistent state across runs.
202
+
203
+ ### Self-Correcting Loops
204
+
205
+ For retry-based patterns where Claude validates its own work:
206
+
207
+ ```bash
208
+ claude-code-runner "Fix all lint errors. Run the linter after each fix. Output :::RUNNER::REPEAT_STEP::: if errors remain, nothing if clean."
209
+ ```
210
+
211
+ Or as a template (`.claude/commands/fix-tests.md`):
138
212
 
139
213
  ```markdown
140
214
  Run the test suite for $1.
141
215
 
142
- - If tests fail and you can fix them, fix them and output :::RUNNER::REPEAT_STEP::: to re-run
143
- - If tests fail and you need help, output :::RUNNER::BLOCKED::: with an explanation
216
+ - If tests pass: done
217
+ - If tests fail and fixable: fix them, output :::RUNNER::REPEAT_STEP:::
218
+ - If tests fail and stuck: output :::RUNNER::BLOCKED::: with explanation
144
219
  ```
145
220
 
146
- This pattern enables self-correcting loops: Claude attempts a fix, signals `REPEAT_STEP` to retry, and exits when done or stuck.
147
-
148
221
  **Defaults:**
149
222
 
150
223
  - Max 10 iterations per command (prevents runaway loops)
@@ -9,9 +9,6 @@ import type { ParsedArgs } from '../types/index.js';
9
9
  export declare function parseCommandLine(line: string): {
10
10
  prompt: string;
11
11
  };
12
- /**
13
- * Parse CLI arguments
14
- */
15
12
  export declare function parseArgs(args: string[]): ParsedArgs;
16
13
  /**
17
14
  * Print usage information
@@ -1 +1 @@
1
- {"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../../src/cli/args.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH,OAAO,KAAK,EACV,UAAU,EAIX,MAAM,mBAAmB,CAAC;AAkD3B;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAmBjE;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAsEpD;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,IAAI,CA2BjC"}
1
+ {"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../../src/cli/args.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH,OAAO,KAAK,EACV,UAAU,EAIX,MAAM,mBAAmB,CAAC;AAkD3B;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAmBjE;AAWD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAwGpD;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,IAAI,CA2BjC"}
package/dist/cli/args.js CHANGED
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * CLI argument parsing
3
3
  */
4
- import * as fs from 'fs';
5
4
  import { createRequire } from 'module';
5
+ import { loadScript } from '../script/index.js';
6
6
  import { loadCommandTemplate } from '../templates/command.js';
7
7
  const require = createRequire(import.meta.url);
8
8
  const pkg = require('../../package.json');
@@ -78,13 +78,32 @@ export function parseCommandLine(line) {
78
78
  /**
79
79
  * Parse CLI arguments
80
80
  */
81
+ const VALID_SUBCOMMANDS = ['prompt', 'command', 'script'];
82
+ function isValidSubcommand(value) {
83
+ return VALID_SUBCOMMANDS.includes(value);
84
+ }
81
85
  export function parseArgs(args) {
82
86
  const { positionalArgs, verbosity, enableLog, model, deaddrop } = extractOptions(args);
83
- const subcommand = (positionalArgs[0] ?? 'prompt');
87
+ const firstArg = positionalArgs[0];
88
+ // Validate subcommand
89
+ if (!firstArg) {
90
+ console.error('Error: subcommand required');
91
+ console.error('Usage: claude-code-runner <prompt|command|script> [args...]');
92
+ process.exit(1);
93
+ }
94
+ if (!isValidSubcommand(firstArg)) {
95
+ console.error(`Error: unknown subcommand '${firstArg}'`);
96
+ console.error('Valid subcommands: prompt, command, script');
97
+ console.error('Usage: claude-code-runner <prompt|command|script> [args...]');
98
+ process.exit(1);
99
+ }
100
+ const subcommand = firstArg;
84
101
  let prompt = '';
85
102
  let displayCommand = '';
86
103
  let scriptMode = false;
87
104
  let scriptLines = [];
105
+ let scriptFile = null;
106
+ let scriptArgs = [];
88
107
  let frontmatterModel = null;
89
108
  switch (subcommand) {
90
109
  case 'command': {
@@ -101,30 +120,40 @@ export function parseArgs(args) {
101
120
  break;
102
121
  }
103
122
  case 'script': {
104
- const scriptFile = positionalArgs[1];
105
- if (!scriptFile) {
123
+ const file = positionalArgs[1];
124
+ if (!file) {
106
125
  console.error('Error: script file required');
107
- console.error('Usage: claude-code-runner script <file>');
108
- process.exit(1);
109
- }
110
- if (!fs.existsSync(scriptFile)) {
111
- console.error(`Error: script file not found: ${scriptFile}`);
126
+ console.error('Usage: claude-code-runner script <file> [args...]');
112
127
  process.exit(1);
113
128
  }
114
- scriptLines = fs
115
- .readFileSync(scriptFile, 'utf-8')
116
- .split('\n')
117
- .map((l) => l.trim())
118
- .filter((l) => l && !l.startsWith('#')); // Skip empty lines and comments
129
+ scriptFile = file;
130
+ scriptArgs = positionalArgs.slice(2);
131
+ const parsed = loadScript(file, scriptArgs);
132
+ // Convert parsed lines to display strings for backward compat
133
+ scriptLines = parsed.lines.map((line) => {
134
+ if (line.type === 'prompt') {
135
+ const text = line.text.length > 50 ? line.text.slice(0, 50) + '...' : line.text;
136
+ return `prompt("${text}")${line.capture ? ` -> $${line.capture}` : ''}`;
137
+ }
138
+ else {
139
+ return `command("${line.name}")${line.capture ? ` -> $${line.capture}` : ''}`;
140
+ }
141
+ });
142
+ frontmatterModel = parsed.frontmatter.model ?? null;
119
143
  scriptMode = true;
120
- displayCommand = `script ${scriptFile}`;
144
+ displayCommand = positionalArgs.slice(1).join(' ');
121
145
  break;
122
146
  }
123
- case 'prompt':
124
- prompt =
125
- positionalArgs.slice(1).join(' ') || 'Tell me about this project';
147
+ case 'prompt': {
148
+ prompt = positionalArgs.slice(1).join(' ');
149
+ if (!prompt) {
150
+ console.error('Error: prompt text required');
151
+ console.error('Usage: claude-code-runner prompt <text>');
152
+ process.exit(1);
153
+ }
126
154
  displayCommand = `"${prompt}"`;
127
155
  break;
156
+ }
128
157
  }
129
158
  const config = {
130
159
  verbosity,
@@ -139,6 +168,8 @@ export function parseArgs(args) {
139
168
  scriptLines,
140
169
  scriptMode,
141
170
  config,
171
+ scriptFile,
172
+ scriptArgs,
142
173
  };
143
174
  }
144
175
  /**
@@ -151,12 +182,12 @@ Claude Code Runner - executes claude CLI with proper TTY handling
151
182
  Usage:
152
183
  claude-code-runner [options] prompt <prompt>
153
184
  claude-code-runner [options] command <name> [args...]
154
- claude-code-runner [options] script <file>
185
+ claude-code-runner [options] script <file> [args...]
155
186
 
156
187
  Subcommands:
157
188
  prompt <text> Run with the given prompt (supports RUNNER signals)
158
189
  command <name> [args] Load .claude/commands/<name>.md (supports RUNNER signals)
159
- script <file> Run commands from file, stop on ERROR/BLOCKED
190
+ script <file> [args] Run commands from file, stop on ERROR/BLOCKED
160
191
 
161
192
  Iteration Signals (control runner execution):
162
193
  :::RUNNER::REPEAT_STEP::: Run the same step again
@@ -1 +1 @@
1
- {"version":3,"file":"args.js","sourceRoot":"","sources":["../../src/cli/args.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"args.js","sourceRoot":"","sources":["../../src/cli/args.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@
3
3
  */
4
4
  import type { FormatterState } from '../output/formatter.js';
5
5
  import type { Logger } from '../output/logger.js';
6
- import type { RunnerConfig, SignalResult } from '../types/runner.js';
6
+ import type { RunnerConfig, SignalRunResult } from '../types/runner.js';
7
7
  export interface RunnerContext {
8
8
  config: RunnerConfig;
9
9
  logger: Logger;
@@ -11,9 +11,12 @@ export interface RunnerContext {
11
11
  cwd: string;
12
12
  runId: string | null;
13
13
  }
14
+ export interface StepContext {
15
+ stepNum: number;
16
+ }
14
17
  /**
15
18
  * Run a command with RUNNER signal support
16
19
  * Handles iteration loop and signal detection
17
20
  */
18
- export declare function runWithSignals(promptText: string, displayCommand: string, startTime: number, context: RunnerContext): Promise<SignalResult>;
21
+ export declare function runWithSignals(promptText: string, displayCommand: string, startTime: number, context: RunnerContext, step?: StepContext): Promise<SignalRunResult>;
19
22
  //# sourceMappingURL=runner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/core/runner.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAGlD,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAErE,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,cAAc,CAAC;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,YAAY,CAAC,CAwFvB"}
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/core/runner.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAGlD,OAAO,KAAK,EACV,YAAY,EAEZ,eAAe,EAChB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,cAAc,CAAC;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,aAAa,EACtB,IAAI,GAAE,WAA4B,GACjC,OAAO,CAAC,eAAe,CAAC,CAuF1B"}
@@ -8,10 +8,11 @@ import { spawnClaude } from '../process/pty.js';
8
8
  * Run a command with RUNNER signal support
9
9
  * Handles iteration loop and signal detection
10
10
  */
11
- export async function runWithSignals(promptText, displayCommand, startTime, context) {
12
- const { config, logger, formatterState, cwd, runId } = context;
11
+ export async function runWithSignals(promptText, displayCommand, startTime, context, step = { stepNum: 1 }) {
12
+ const { config, logger, formatterState, cwd } = context;
13
13
  const { verbosity, maxIterations, parallelThresholdMs, iterationPauseMs, model, } = config;
14
14
  let iteration = 0;
15
+ let lastClaudeText = '';
15
16
  // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- intentional infinite loop with internal exits
16
17
  while (true) {
17
18
  iteration++;
@@ -20,7 +21,7 @@ export async function runWithSignals(promptText, displayCommand, startTime, cont
20
21
  const totalDuration = Date.now() - startTime;
21
22
  printRunner(`${colors.red}Run stopped${colors.reset} max iterations (${maxIterations}) in ${formatDuration(totalDuration)}`);
22
23
  logger.log(`\nMAX ITERATIONS reached after ${maxIterations}`);
23
- return 'error';
24
+ return { status: 'error', claudeText: lastClaudeText };
24
25
  }
25
26
  // Log iteration for subsequent iterations
26
27
  if (iteration > 1) {
@@ -28,7 +29,9 @@ export async function runWithSignals(promptText, displayCommand, startTime, cont
28
29
  }
29
30
  // Print running message
30
31
  if (verbosity !== 'quiet') {
31
- printRunner(`Running step ${iteration}: ${displayCommand}`);
32
+ const iterLabel = iteration > 1 ? ` (iter ${iteration})` : '';
33
+ const separator = displayCommand.startsWith('with ') ? ' ' : ': ';
34
+ printRunner(`Running step ${step.stepNum}${iterLabel}${separator}${displayCommand}`);
32
35
  }
33
36
  // Update formatter with current step
34
37
  formatterState.currentStep = iteration;
@@ -42,32 +45,32 @@ export async function runWithSignals(promptText, displayCommand, startTime, cont
42
45
  parallelThresholdMs,
43
46
  model,
44
47
  });
45
- const status = detectRunnerSignal(claudeText);
46
- const totalDuration = Date.now() - startTime;
47
- const totalSeconds = Math.round(totalDuration / 1000);
48
- const runLabel = runId ? ` ${runId}` : '';
49
- const stepLabel = ` (${iteration} step${iteration > 1 ? 's' : ''})`;
50
- if (status === 'blocked') {
51
- printRunner(`${colors.red}Blocked run${runLabel}${colors.reset}${stepLabel} in ${formatDuration(totalDuration)}`);
52
- logger.log(`\nBLOCKED after ${iteration} iterations, ${totalSeconds}s total`);
53
- return 'blocked';
48
+ lastClaudeText = claudeText;
49
+ const signal = detectRunnerSignal(claudeText);
50
+ const stepDuration = Date.now() - startTime;
51
+ if (signal === 'blocked') {
52
+ printRunner(`${colors.red}Blocked${colors.reset} step ${step.stepNum} in ${formatDuration(stepDuration)}`);
53
+ logger.log(`\nBLOCKED at step ${step.stepNum}`);
54
+ return { status: 'blocked', claudeText };
54
55
  }
55
- else if (status === 'error') {
56
- printRunner(`${colors.red}Failed run${runLabel}${colors.reset}${stepLabel} in ${formatDuration(totalDuration)}`);
57
- logger.log(`\nERROR after ${iteration} iterations, ${totalSeconds}s total`);
58
- return 'error';
56
+ else if (signal === 'error') {
57
+ printRunner(`${colors.red}Failed${colors.reset} step ${step.stepNum} in ${formatDuration(stepDuration)}`);
58
+ logger.log(`\nERROR at step ${step.stepNum}`);
59
+ return { status: 'error', claudeText };
59
60
  }
60
- else if (status === 'repeat_step') {
61
- printRunner(`Claude requested to repeat the step`);
62
- logger.log(`Iteration ${iteration} complete, continuing...`);
61
+ else if (signal === 'repeat_step') {
62
+ printRunner(`Repeating step ${step.stepNum}`);
63
+ logger.log(`Iteration ${iteration} complete, repeating...`);
63
64
  await sleep(iterationPauseMs);
64
65
  }
65
66
  else {
66
- // No status signal - treat as successful single run
67
+ // No signal - step completed
67
68
  const exitStatus = exitCode === 0 ? 'ok' : 'error';
68
- printRunner(`${exitCode === 0 ? colors.green + 'Completed run' : colors.red + 'Failed run'}${runLabel}${colors.reset}${stepLabel} in ${formatDuration(totalDuration)}`);
69
- logger.log(`\nCompleted after ${iteration} iteration(s), exit=${exitCode}`);
70
- return exitStatus;
69
+ if (exitCode !== 0) {
70
+ printRunner(`${colors.red}Failed${colors.reset} step ${step.stepNum} in ${formatDuration(stepDuration)}`);
71
+ }
72
+ logger.log(`\nStep ${step.stepNum} complete, exit=${exitCode}`);
73
+ return { status: exitStatus, claudeText };
71
74
  }
72
75
  }
73
76
  }
@@ -1 +1 @@
1
- {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/core/runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/core/runner.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAG1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAmBhD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,UAAkB,EAClB,cAAsB,EACtB,SAAiB,EACjB,OAAsB,EACtB,OAAoB,EAAE,OAAO,EAAE,CAAC,EAAE;IAElC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;IACxD,MAAM,EACJ,SAAS,EACT,aAAa,EACb,mBAAmB,EACnB,gBAAgB,EAChB,KAAK,GACN,GAAG,MAAM,CAAC;IAEX,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,cAAc,GAAG,EAAE,CAAC;IAExB,wHAAwH;IACxH,OAAO,IAAI,EAAE,CAAC;QACZ,SAAS,EAAE,CAAC;QAEZ,uBAAuB;QACvB,IAAI,SAAS,GAAG,aAAa,EAAE,CAAC;YAC9B,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YAC7C,WAAW,CACT,GAAG,MAAM,CAAC,GAAG,cAAc,MAAM,CAAC,KAAK,oBAAoB,aAAa,QAAQ,cAAc,CAAC,aAAa,CAAC,EAAE,CAChH,CAAC;YACF,MAAM,CAAC,GAAG,CAAC,kCAAkC,aAAa,EAAE,CAAC,CAAC;YAC9D,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC;QACzD,CAAC;QAED,0CAA0C;QAC1C,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;YAClB,MAAM,CAAC,GAAG,CAAC,mBAAmB,SAAS,QAAQ,CAAC,CAAC;QACnD,CAAC;QAED,wBAAwB;QACxB,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;YAC1B,MAAM,SAAS,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9D,MAAM,SAAS,GAAG,cAAc,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;YAClE,WAAW,CACT,gBAAgB,IAAI,CAAC,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,cAAc,EAAE,CACxE,CAAC;QACJ,CAAC;QAED,qCAAqC;QACrC,cAAc,CAAC,WAAW,GAAG,SAAS,CAAC;QAEvC,aAAa;QACb,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,MAAM,WAAW,CAAC;YACjD,MAAM,EAAE,UAAU;YAClB,GAAG;YACH,SAAS;YACT,MAAM;YACN,cAAc;YACd,mBAAmB;YACnB,KAAK;SACN,CAAC,CAAC;QAEH,cAAc,GAAG,UAAU,CAAC;QAC5B,MAAM,MAAM,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;QAC9C,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QAE5C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,WAAW,CACT,GAAG,MAAM,CAAC,GAAG,UAAU,MAAM,CAAC,KAAK,SAAS,IAAI,CAAC,OAAO,OAAO,cAAc,CAAC,YAAY,CAAC,EAAE,CAC9F,CAAC;YACF,MAAM,CAAC,GAAG,CAAC,qBAAqB,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;YAChD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;QAC3C,CAAC;aAAM,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;YAC9B,WAAW,CACT,GAAG,MAAM,CAAC,GAAG,SAAS,MAAM,CAAC,KAAK,SAAS,IAAI,CAAC,OAAO,OAAO,cAAc,CAAC,YAAY,CAAC,EAAE,CAC7F,CAAC;YACF,MAAM,CAAC,GAAG,CAAC,mBAAmB,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;YAC9C,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;QACzC,CAAC;aAAM,IAAI,MAAM,KAAK,aAAa,EAAE,CAAC;YACpC,WAAW,CAAC,kBAAkB,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;YAC9C,MAAM,CAAC,GAAG,CAAC,aAAa,SAAS,yBAAyB,CAAC,CAAC;YAC5D,MAAM,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAChC,CAAC;aAAM,CAAC;YACN,6BAA6B;YAC7B,MAAM,UAAU,GAAiB,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;YACjE,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;gBACnB,WAAW,CACT,GAAG,MAAM,CAAC,GAAG,SAAS,MAAM,CAAC,KAAK,SAAS,IAAI,CAAC,OAAO,OAAO,cAAc,CAAC,YAAY,CAAC,EAAE,CAC7F,CAAC;YACJ,CAAC;YACD,MAAM,CAAC,GAAG,CAAC,UAAU,IAAI,CAAC,OAAO,mBAAmB,QAAQ,EAAE,CAAC,CAAC;YAChE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC;QAC5C,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC"}