@rcrsr/claude-code-runner 0.5.0 → 0.6.1

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 CHANGED
@@ -205,7 +205,7 @@ Each invocation: Claude finds the next unchecked step → implements it → mark
205
205
  For retry-based patterns where Claude validates its own work:
206
206
 
207
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."
208
+ claude-code-runner prompt "Fix all lint errors. Run the linter after each fix. Output :::RUNNER::REPEAT_STEP::: if errors remain, nothing if clean."
209
209
  ```
210
210
 
211
211
  Or as a template (`.claude/commands/fix-tests.md`):
@@ -229,7 +229,7 @@ For CI/CD integration:
229
229
 
230
230
  | Code | Meaning |
231
231
  | ---- | -------------------------------------------- |
232
- | 0 | Success (`DONE` signal or clean exit) |
232
+ | 0 | Success (no signal or clean exit) |
233
233
  | 1 | Error (`ERROR`, `BLOCKED`, or non-zero exit) |
234
234
 
235
235
  ## Logs
@@ -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,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"}
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,CAwG1B"}
@@ -20,12 +20,20 @@ export async function runWithSignals(promptText, displayCommand, startTime, cont
20
20
  if (iteration > maxIterations) {
21
21
  const totalDuration = Date.now() - startTime;
22
22
  printRunner(`${colors.red}Run stopped${colors.reset} max iterations (${maxIterations}) in ${formatDuration(totalDuration)}`);
23
- logger.log(`\nMAX ITERATIONS reached after ${maxIterations}`);
23
+ logger.logEvent({
24
+ event: 'max_iterations',
25
+ step: step.stepNum,
26
+ maxIterations,
27
+ });
24
28
  return { status: 'error', claudeText: lastClaudeText };
25
29
  }
26
30
  // Log iteration for subsequent iterations
27
31
  if (iteration > 1) {
28
- logger.log(`\n--- Iteration ${iteration} ---\n`);
32
+ logger.logEvent({
33
+ event: 'iteration_start',
34
+ step: step.stepNum,
35
+ iteration,
36
+ });
29
37
  }
30
38
  // Print running message
31
39
  if (verbosity !== 'quiet') {
@@ -50,17 +58,22 @@ export async function runWithSignals(promptText, displayCommand, startTime, cont
50
58
  const stepDuration = Date.now() - startTime;
51
59
  if (signal === 'blocked') {
52
60
  printRunner(`${colors.red}Blocked${colors.reset} step ${step.stepNum} in ${formatDuration(stepDuration)}`);
53
- logger.log(`\nBLOCKED at step ${step.stepNum}`);
61
+ logger.logEvent({ event: 'blocked', step: step.stepNum });
54
62
  return { status: 'blocked', claudeText };
55
63
  }
56
64
  else if (signal === 'error') {
57
65
  printRunner(`${colors.red}Failed${colors.reset} step ${step.stepNum} in ${formatDuration(stepDuration)}`);
58
- logger.log(`\nERROR at step ${step.stepNum}`);
66
+ logger.logEvent({ event: 'error', step: step.stepNum });
59
67
  return { status: 'error', claudeText };
60
68
  }
61
69
  else if (signal === 'repeat_step') {
62
70
  printRunner(`Repeating step ${step.stepNum}`);
63
- logger.log(`Iteration ${iteration} complete, repeating...`);
71
+ logger.logEvent({
72
+ event: 'iteration_complete',
73
+ step: step.stepNum,
74
+ iteration,
75
+ repeating: true,
76
+ });
64
77
  await sleep(iterationPauseMs);
65
78
  }
66
79
  else {
@@ -69,7 +82,11 @@ export async function runWithSignals(promptText, displayCommand, startTime, cont
69
82
  if (exitCode !== 0) {
70
83
  printRunner(`${colors.red}Failed${colors.reset} step ${step.stepNum} in ${formatDuration(stepDuration)}`);
71
84
  }
72
- logger.log(`\nStep ${step.stepNum} complete, exit=${exitCode}`);
85
+ logger.logEvent({
86
+ event: 'step_complete',
87
+ step: step.stepNum,
88
+ exit: exitCode,
89
+ });
73
90
  return { status: exitStatus, claudeText };
74
91
  }
75
92
  }
@@ -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":"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"}
package/dist/index.js CHANGED
@@ -8,12 +8,11 @@ import { parseArgs } from './cli/args.js';
8
8
  import { runWithSignals, } from './core/runner.js';
9
9
  import { createDeadDropClientFromEnv } from './deaddrop/index.js';
10
10
  import { configureDeadDrop, flushDeadDrop, printRunner, printRunnerInfo, } from './output/colors.js';
11
- import { createFormatterState } from './output/formatter.js';
11
+ import { createFormatterState, finalizeStepStats, getRunStatsSummary, resetFormatterState, } from './output/formatter.js';
12
12
  import { createLogger } from './output/logger.js';
13
13
  import { captureOutput, createVariableStore, getSubstitutionList, loadScript, substituteVariables, } from './script/index.js';
14
14
  import { loadCommandTemplate } from './templates/command.js';
15
15
  import { DEFAULT_CONFIG } from './types/runner.js';
16
- import { formatSize } from './utils/formatting.js';
17
16
  /**
18
17
  * Generate a short unique run ID (8 chars, uppercase)
19
18
  */
@@ -80,7 +79,7 @@ async function main() {
80
79
  if (logger.filePath) {
81
80
  printRunnerInfo(`Log: ${logger.filePath}`);
82
81
  }
83
- logger.log(`Started: ${new Date().toISOString()}`);
82
+ logger.logEvent({ event: 'run_start', runId });
84
83
  // Build script lines - single prompt/command becomes a 1-step script
85
84
  let lines;
86
85
  let scriptArgs = [];
@@ -104,7 +103,9 @@ async function main() {
104
103
  */
105
104
  function getDisplayLine(line) {
106
105
  if (line.type === 'prompt') {
107
- const preview = line.text.length > 50 ? line.text.slice(0, 50) + '...' : line.text;
106
+ // Replace newlines with spaces for single-line display
107
+ const cleaned = line.text.replace(/[\r\n]+/g, ' ').trim();
108
+ const preview = cleaned.length > 50 ? cleaned.slice(0, 50) + '...' : cleaned;
108
109
  return `"${preview}"`;
109
110
  }
110
111
  return `command("${line.name}")`;
@@ -114,11 +115,14 @@ function getDisplayLine(line) {
114
115
  */
115
116
  async function runScript(lines, scriptArgs, context, startTime) {
116
117
  const store = createVariableStore();
117
- let completedSteps = 0;
118
118
  for (const [i, line] of lines.entries()) {
119
119
  const stepNum = i + 1;
120
120
  const displayLine = getDisplayLine(line);
121
- context.logger.log(`\n=== Step ${stepNum}: ${displayLine} ===\n`);
121
+ context.logger.logEvent({
122
+ event: 'step_start',
123
+ step: stepNum,
124
+ prompt: displayLine,
125
+ });
122
126
  // Get the prompt text
123
127
  let promptText;
124
128
  if (line.type === 'prompt') {
@@ -137,30 +141,31 @@ async function runScript(lines, scriptArgs, context, startTime) {
137
141
  text: finalPrompt,
138
142
  });
139
143
  const withClause = formatVarsUsed(varsUsed);
140
- // Set step number for formatter output
144
+ // Set step number and start time for formatter output
141
145
  context.formatterState.currentStep = stepNum;
146
+ context.formatterState.stepStartTime = Date.now();
142
147
  // Run via runWithSignals (handles iterations, signals, output)
143
148
  const stepContext = { stepNum };
144
149
  const result = await runWithSignals(finalPrompt, `${withClause}${substitutedDisplay}`, startTime, context, stepContext);
145
150
  // Capture output for variable store
146
151
  captureOutput(store, result.claudeText, line.capture);
147
- // Print step completion with result size
148
- const durationMs = context.formatterState.lastStepDurationMs;
149
- const duration = durationMs ? `${(durationMs / 1000).toFixed(1)}s` : '?';
150
- const size = formatSize(result.claudeText.length);
151
- const captureLabel = line.capture ? `$${line.capture}` : 'result';
152
- printRunner(`Completed step ${stepNum} in ${duration}, ${captureLabel} = ${size}`);
152
+ // Finalize step stats and print completion
153
+ const stepDurationMs = context.formatterState.stepStartTime
154
+ ? Date.now() - context.formatterState.stepStartTime
155
+ : (context.formatterState.lastStepDurationMs ?? 0);
156
+ const stepSummary = finalizeStepStats(context.formatterState, stepDurationMs);
157
+ printRunner(`Step ${stepNum} complete: ${stepSummary}`);
153
158
  // Handle failure (runWithSignals already printed the error)
154
159
  if (result.status !== 'ok') {
155
160
  return false;
156
161
  }
157
- completedSteps++;
162
+ // Reset step stats for next step (preserves runStats)
163
+ resetFormatterState(context.formatterState);
158
164
  }
159
- // Print completion with run ID, step count, and duration
165
+ // Print run completion with overall stats
160
166
  const totalDuration = Date.now() - startTime;
161
- const stepWord = completedSteps === 1 ? 'step' : 'steps';
162
- const durationSec = (totalDuration / 1000).toFixed(1);
163
- printRunner(`Completed run ${context.runId} (${completedSteps} ${stepWord}) in ${durationSec}s`);
167
+ const runSummary = getRunStatsSummary(context.formatterState, totalDuration);
168
+ printRunner(`Run ${context.runId} complete: ${runSummary}`);
164
169
  return true;
165
170
  }
166
171
  // Run main
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -16,6 +16,16 @@ export declare const colors: {
16
16
  };
17
17
  export type ColorName = keyof typeof colors;
18
18
  export declare function stripAnsi(str: string): string;
19
+ /**
20
+ * Strip carriage returns for cleaner terminal display
21
+ * Tool outputs sometimes contain CRs that cause display issues
22
+ */
23
+ export declare function stripCR(str: string): string;
24
+ /**
25
+ * Log to terminal with CR stripping for clean display
26
+ * Use this for all terminal output in the formatter
27
+ */
28
+ export declare function terminalLog(line: string): void;
19
29
  /**
20
30
  * Apply color to a string
21
31
  */
@@ -26,7 +36,7 @@ export declare function colorize(text: string, color: ColorName): string;
26
36
  export declare function truncate(str: string, len: number): string;
27
37
  /**
28
38
  * Format duration in human-readable form
29
- * Examples: 450ms, 2.5s, 1m30s, 1h2m3s
39
+ * Examples: 450ms, 2.5s, 1m 30s, 1h 2m 3s
30
40
  */
31
41
  export declare function formatDuration(ms: number): string;
32
42
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"colors.d.ts","sourceRoot":"","sources":["../../src/output/colors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,iBAAiB,EACjB,aAAa,EAEd,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,CAAC;AAE5C,eAAO,MAAM,MAAM;;;;;;;;;;CAUT,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,MAAM,OAAO,MAAM,CAAC;AAQ5C,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,MAAM,CAE/D;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAKzD;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAejD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAOpD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,GAAE,IAAiB,GAAG,MAAM,CAM/D;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,aAAa,CAAC;AAEpD;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,CAC3B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,YAAY,KACf,OAAO,CAAC,IAAI,CAAC,CAAC;AAEnB;;;GAGG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAKjD;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAIrD;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAK1E"}
1
+ {"version":3,"file":"colors.d.ts","sourceRoot":"","sources":["../../src/output/colors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,iBAAiB,EACjB,aAAa,EAEd,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,CAAC;AAE5C,eAAO,MAAM,MAAM;;;;;;;;;;CAUT,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,MAAM,OAAO,MAAM,CAAC;AAQ5C,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE3C;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAE9C;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,MAAM,CAE/D;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAKzD;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAejD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAOpD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,GAAE,IAAiB,GAAG,MAAM,CAM/D;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,aAAa,CAAC;AAEpD;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,CAC3B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,YAAY,KACf,OAAO,CAAC,IAAI,CAAC,CAAC;AAEnB;;;GAGG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAKjD;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAIrD;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAK1E"}
@@ -23,6 +23,20 @@ const ANSI_REGEX = /\x1b\[[0-9;]*[a-zA-Z]/g;
23
23
  export function stripAnsi(str) {
24
24
  return str.replace(ANSI_REGEX, '');
25
25
  }
26
+ /**
27
+ * Strip carriage returns for cleaner terminal display
28
+ * Tool outputs sometimes contain CRs that cause display issues
29
+ */
30
+ export function stripCR(str) {
31
+ return str.replace(/\r/g, '');
32
+ }
33
+ /**
34
+ * Log to terminal with CR stripping for clean display
35
+ * Use this for all terminal output in the formatter
36
+ */
37
+ export function terminalLog(line) {
38
+ console.log(stripCR(line));
39
+ }
26
40
  /**
27
41
  * Apply color to a string
28
42
  */
@@ -40,7 +54,7 @@ export function truncate(str, len) {
40
54
  }
41
55
  /**
42
56
  * Format duration in human-readable form
43
- * Examples: 450ms, 2.5s, 1m30s, 1h2m3s
57
+ * Examples: 450ms, 2.5s, 1m 30s, 1h 2m 3s
44
58
  */
45
59
  export function formatDuration(ms) {
46
60
  if (ms < 1000) {
@@ -54,9 +68,9 @@ export function formatDuration(ms) {
54
68
  const mins = Math.floor((totalSeconds % 3600) / 60);
55
69
  const secs = Math.round(totalSeconds % 60);
56
70
  if (hours > 0) {
57
- return `${hours}h${mins}m${secs}s`;
71
+ return `${hours}h ${mins}m ${secs}s`;
58
72
  }
59
- return `${mins}m${secs}s`;
73
+ return `${mins}m ${secs}s`;
60
74
  }
61
75
  /**
62
76
  * Shorten file paths by removing common prefixes
@@ -90,7 +104,7 @@ export function timestampPrefix() {
90
104
  * Automatically sends to Deaddrop if configured (without prefix)
91
105
  */
92
106
  export function printRunner(message) {
93
- console.log(`${timestampPrefix()}${colors.magenta}[RUNNER]${colors.reset} ${message}`);
107
+ terminalLog(`${timestampPrefix()}${colors.magenta}[runner]${colors.reset} ${message}`);
94
108
  sendToDeadDrop(stripAnsi(message), 'Runner');
95
109
  }
96
110
  /**
@@ -98,7 +112,7 @@ export function printRunner(message) {
98
112
  * Does NOT send to Deaddrop (used for startup config, debug info)
99
113
  */
100
114
  export function printRunnerInfo(message) {
101
- console.log(`${timestampPrefix()}${colors.magenta}[RUNNER]${colors.reset} ${message}`);
115
+ terminalLog(`${timestampPrefix()}${colors.magenta}[runner]${colors.reset} ${message}`);
102
116
  }
103
117
  /**
104
118
  * Print a [CLAUDE] message with timestamp
@@ -107,7 +121,7 @@ export function printRunnerInfo(message) {
107
121
  * @param rawForDeaddrop - Original unmodified text to send to deaddrop (preserves newlines)
108
122
  */
109
123
  export function printClaude(message, rawForDeaddrop) {
110
- console.log(`${timestampPrefix()}${colors.green}[CLAUDE]${colors.reset} ${message}`);
124
+ terminalLog(`${timestampPrefix()}${colors.green}[claude]${colors.reset} ${message}`);
111
125
  sendToDeadDrop(stripAnsi(rawForDeaddrop ?? message), 'Claude Code');
112
126
  }
113
127
  //# sourceMappingURL=colors.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"colors.js","sourceRoot":"","sources":["../../src/output/colors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"colors.js","sourceRoot":"","sources":["../../src/output/colors.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@
4
4
  import { type ClaudeMessage } from '../types/claude.js';
5
5
  import { type ActiveTask, type PendingTool, type Verbosity } from '../types/runner.js';
6
6
  import type { Logger } from './logger.js';
7
+ import { type RunStats } from './stats.js';
7
8
  /**
8
9
  * State for tracking parallel tool calls and active tasks
9
10
  */
@@ -17,9 +18,27 @@ export interface FormatterState {
17
18
  suppressStepCompletion: boolean;
18
19
  /** Duration from last result message (for caller to use) */
19
20
  lastStepDurationMs: number | null;
21
+ /** Run statistics for current step */
22
+ stats: RunStats;
23
+ /** Overall run statistics (accumulated across steps) */
24
+ runStats: RunStats;
25
+ /** Step start time */
26
+ stepStartTime: number | null;
27
+ /** Task statistics (for nested task tracking) */
28
+ taskStats: RunStats | null;
29
+ /** Task start time */
30
+ taskStartTime: number | null;
20
31
  }
21
32
  export declare function createFormatterState(): FormatterState;
22
33
  export declare function resetFormatterState(state: FormatterState): void;
34
+ /**
35
+ * Finalize step stats: merge into runStats and return step summary
36
+ */
37
+ export declare function finalizeStepStats(state: FormatterState, stepDurationMs: number): string;
38
+ /**
39
+ * Get the overall run stats summary
40
+ */
41
+ export declare function getRunStatsSummary(state: FormatterState, runDurationMs: number): string;
23
42
  /**
24
43
  * Flush pending tools, grouping parallel calls
25
44
  */
@@ -1 +1 @@
1
- {"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../src/output/formatter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,KAAK,aAAa,EASnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,KAAK,UAAU,EAEf,KAAK,WAAW,EAChB,KAAK,SAAS,EACf,MAAM,oBAAoB,CAAC;AAuB5B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IAC9B,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,oEAAoE;IACpE,sBAAsB,EAAE,OAAO,CAAC;IAChC,4DAA4D;IAC5D,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AAED,wBAAgB,oBAAoB,IAAI,cAAc,CAUrD;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CAK/D;AA2ED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,cAAc,EACrB,SAAS,EAAE,SAAS,GACnB,IAAI,CAuBN;AAoFD;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,aAAa,EAClB,KAAK,EAAE,cAAc,EACrB,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,MAAM,EAAE,sCAAsC;AACvD,mBAAmB,EAAE,MAAM,GAC1B,MAAM,CA4GR"}
1
+ {"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../src/output/formatter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,KAAK,aAAa,EASnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,KAAK,UAAU,EAEf,KAAK,WAAW,EAChB,KAAK,SAAS,EACf,MAAM,oBAAoB,CAAC;AAuB5B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAQL,KAAK,QAAQ,EAEd,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IAC9B,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,oEAAoE;IACpE,sBAAsB,EAAE,OAAO,CAAC;IAChC,4DAA4D;IAC5D,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,sCAAsC;IACtC,KAAK,EAAE,QAAQ,CAAC;IAChB,wDAAwD;IACxD,QAAQ,EAAE,QAAQ,CAAC;IACnB,sBAAsB;IACtB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,iDAAiD;IACjD,SAAS,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC3B,sBAAsB;IACtB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,wBAAgB,oBAAoB,IAAI,cAAc,CAerD;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CAU/D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,cAAc,EACrB,cAAc,EAAE,MAAM,GACrB,MAAM,CAKR;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,cAAc,EACrB,aAAa,EAAE,MAAM,GACpB,MAAM,CAER;AAoED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,cAAc,EACrB,SAAS,EAAE,SAAS,GACnB,IAAI,CAuBN;AAgFD;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,aAAa,EAClB,KAAK,EAAE,cAAc,EACrB,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,MAAM,EAAE,sCAAsC;AACvD,mBAAmB,EAAE,MAAM,GAC1B,MAAM,CAoKR"}
@@ -3,8 +3,9 @@
3
3
  */
4
4
  import { isAssistantMessage, isResultMessage, isSystemInitMessage, isTextBlock, isToolResultBlock, isToolUseBlock, isUserMessage, } from '../types/claude.js';
5
5
  import { NOISE_PATTERNS, } from '../types/runner.js';
6
- import { MAX_RESULT_LINES, TRUNCATE_ANSWER, TRUNCATE_BASH_CMD, TRUNCATE_ERROR, TRUNCATE_GREP_PATTERN, TRUNCATE_MESSAGE, TRUNCATE_TASK_DESC, TRUNCATE_TASK_SUMMARY, TRUNCATE_TASK_VERBOSE, TRUNCATE_TOOL_JSON, TRUNCATE_VERBOSE_LINE, } from '../utils/constants.js';
7
- import { colors, formatDuration, printClaude, printRunner, shortenPath, timestampPrefix, truncate, } from './colors.js';
6
+ import { MAX_RESULT_LINES, TRUNCATE_ANSWER, TRUNCATE_BASH_CMD, TRUNCATE_ERROR, TRUNCATE_GREP_PATTERN, TRUNCATE_MESSAGE, TRUNCATE_TASK_DESC, TRUNCATE_TERMINAL_LINE, TRUNCATE_TOOL_JSON, TRUNCATE_VERBOSE_LINE, } from '../utils/constants.js';
7
+ import { colors, formatDuration, printClaude, printRunner, shortenPath, terminalLog, timestampPrefix, truncate, } from './colors.js';
8
+ import { createRunStats, formatStatsSummary, incrementMessageCount, mergeStats, recordOutput, recordToolUse, resetRunStats, updateTokenStats, } from './stats.js';
8
9
  export function createFormatterState() {
9
10
  return {
10
11
  pendingTools: [],
@@ -14,6 +15,11 @@ export function createFormatterState() {
14
15
  currentStep: 1,
15
16
  suppressStepCompletion: true,
16
17
  lastStepDurationMs: null,
18
+ stats: createRunStats(),
19
+ runStats: createRunStats(),
20
+ stepStartTime: null,
21
+ taskStats: null,
22
+ taskStartTime: null,
17
23
  };
18
24
  }
19
25
  export function resetFormatterState(state) {
@@ -21,6 +27,26 @@ export function resetFormatterState(state) {
21
27
  state.lastToolTime = null;
22
28
  state.activeTask = null;
23
29
  state.toolStartTimes.clear();
30
+ resetRunStats(state.stats);
31
+ state.stepStartTime = null;
32
+ state.taskStats = null;
33
+ state.taskStartTime = null;
34
+ // Note: runStats is NOT reset - it accumulates across steps
35
+ }
36
+ /**
37
+ * Finalize step stats: merge into runStats and return step summary
38
+ */
39
+ export function finalizeStepStats(state, stepDurationMs) {
40
+ // Merge step stats into run stats
41
+ mergeStats(state.runStats, state.stats);
42
+ // Format and return the step summary
43
+ return formatStatsSummary(state.stats, stepDurationMs);
44
+ }
45
+ /**
46
+ * Get the overall run stats summary
47
+ */
48
+ export function getRunStatsSummary(state, runDurationMs) {
49
+ return formatStatsSummary(state.runStats, runDurationMs);
24
50
  }
25
51
  /**
26
52
  * Check if a line contains noise patterns (node_modules, venv, etc.)
@@ -42,10 +68,9 @@ function filterNoiseLines(text) {
42
68
  */
43
69
  function formatToolUse(tool, indented, state) {
44
70
  const inTask = state.activeTask !== null;
45
- const indent = inTask ? ' │ ' : '';
46
71
  const prefix = indented
47
- ? `${timestampPrefix()}${indent} → `
48
- : `${timestampPrefix()}${indent}${colors.yellow}[TOOL]${colors.reset} `;
72
+ ? `${timestampPrefix()}${inTask ? '│ ' : ' '} → `
73
+ : `${timestampPrefix()}${inTask ? '│ ' : ''}`;
49
74
  const name = tool.name;
50
75
  const input = tool.input;
51
76
  let summary = '';
@@ -59,18 +84,15 @@ function formatToolUse(tool, indented, state) {
59
84
  summary = `"${truncate(input['pattern'] ?? '', TRUNCATE_GREP_PATTERN)}"`;
60
85
  }
61
86
  else if (name === 'Bash') {
62
- summary = truncate(input['command'] ?? '', TRUNCATE_BASH_CMD);
87
+ const cmd = (input['command'] ?? '').replace(/[\r\n]+/g, ' ');
88
+ summary = truncate(cmd, TRUNCATE_BASH_CMD);
63
89
  }
64
90
  else if (name === 'Task') {
65
- const taskType = input['subagent_type'] ?? 'agent';
66
- const taskDesc = truncate(input['description'] ??
67
- input['prompt'] ??
68
- '', TRUNCATE_TASK_DESC);
69
- summary = `${colors.magenta}${taskType}${colors.reset}: ${taskDesc}`;
70
- // Mark task as active and print task header
71
- state.activeTask = { name: taskType, description: taskDesc, id: tool.id };
72
- console.log(`${timestampPrefix()}${colors.yellow}[TASK]${colors.reset} ${colors.magenta}${taskType}${colors.reset} ${taskDesc}`);
73
- console.log(`${timestampPrefix()} ${colors.dim}┌─────────────────────────────────────────────────${colors.reset}`);
91
+ // Task state already initialized in pre-scan, just print header
92
+ const task = state.activeTask;
93
+ if (task) {
94
+ terminalLog(`${timestampPrefix()}${colors.yellow}[${task.name}]${colors.reset} ${task.description}`);
95
+ }
74
96
  return;
75
97
  }
76
98
  else if (name === 'Write' || name === 'Edit') {
@@ -79,7 +101,10 @@ function formatToolUse(tool, indented, state) {
79
101
  else {
80
102
  summary = truncate(JSON.stringify(input), TRUNCATE_TOOL_JSON);
81
103
  }
82
- console.log(`${prefix}${colors.cyan}${name}${colors.reset} ${summary}`);
104
+ const nameDisplay = indented
105
+ ? `${colors.cyan}${name}${colors.reset}`
106
+ : `${colors.blue}[${name}]${colors.reset}`;
107
+ terminalLog(`${prefix}${nameDisplay} ${summary}`);
83
108
  }
84
109
  /**
85
110
  * Flush pending tools, grouping parallel calls
@@ -98,7 +123,7 @@ export function flushPendingTools(state, verbosity) {
98
123
  }
99
124
  else {
100
125
  // Group parallel tools
101
- console.log(`${timestampPrefix()}${colors.yellow}[TOOL ×${state.pendingTools.length}]${colors.reset} ${colors.dim}(parallel)${colors.reset}`);
126
+ terminalLog(`${timestampPrefix()}${colors.blue}[×${state.pendingTools.length}]${colors.reset} ${colors.dim}(parallel)${colors.reset}`);
102
127
  for (const tool of state.pendingTools) {
103
128
  formatToolUse(tool, true, state);
104
129
  }
@@ -113,7 +138,7 @@ function printToolResult(result, durationStr, verbosity, state) {
113
138
  return;
114
139
  }
115
140
  const inTask = state.activeTask !== null;
116
- const indent = inTask ? ' ' : '';
141
+ const indent = inTask ? '│' : '';
117
142
  if (verbosity === 'normal') {
118
143
  // In normal mode, suppress per-tool timing
119
144
  return;
@@ -126,36 +151,37 @@ function printToolResult(result, durationStr, verbosity, state) {
126
151
  const lines = filtered.split('\n').filter((l) => l.trim());
127
152
  const showLines = lines.slice(0, MAX_RESULT_LINES);
128
153
  for (const line of showLines) {
129
- console.log(`${timestampPrefix()}${indent} ${colors.dim}${truncate(line, TRUNCATE_VERBOSE_LINE)}${colors.reset}`);
154
+ terminalLog(`${timestampPrefix()}${indent} ${colors.dim}${truncate(line, TRUNCATE_VERBOSE_LINE)}${colors.reset}`);
130
155
  }
131
156
  if (lines.length > MAX_RESULT_LINES) {
132
- console.log(`${timestampPrefix()}${indent} ${colors.dim}... (${lines.length - MAX_RESULT_LINES} more lines)${colors.reset}${durationStr}`);
157
+ terminalLog(`${timestampPrefix()}${indent} ${colors.dim}... (${lines.length - MAX_RESULT_LINES} more lines)${colors.reset}${durationStr}`);
133
158
  }
134
159
  else if (durationStr) {
135
- console.log(`${timestampPrefix()}${indent} ${durationStr}`);
160
+ terminalLog(`${timestampPrefix()}${indent} ${durationStr}`);
136
161
  }
137
162
  }
138
163
  /**
139
164
  * Print a task result
140
165
  */
141
- function printTaskResult(result, durationStr, verbosity, state) {
142
- const content = typeof result.content === 'string'
143
- ? result.content
144
- : JSON.stringify(result.content);
145
- // Close the task visual box with duration
146
- console.log(`${timestampPrefix()} ${colors.dim}└─────────────────────────────────────────────────${colors.reset}${durationStr}`);
147
- // Extract the text part of task result, skip agentId line
148
- const lines = content
149
- .split('\n')
150
- .filter((l) => l.trim() && !l.includes('agentId:'));
151
- // Show task result summary
152
- if (lines.length > 0) {
153
- const maxLen = verbosity === 'verbose' ? TRUNCATE_TASK_VERBOSE : TRUNCATE_TASK_SUMMARY;
154
- const summary = lines.join(' ').replace(/\s+/g, ' ');
155
- console.log(`${timestampPrefix()} ${colors.green}→ ${truncate(summary, maxLen)}${colors.reset}`);
166
+ function printTaskResult(_result, _durationStr, _verbosity, state) {
167
+ // Calculate task duration and format stats summary
168
+ const taskDuration = state.taskStartTime
169
+ ? Date.now() - state.taskStartTime
170
+ : 0;
171
+ const statsSummary = state.taskStats
172
+ ? formatStatsSummary(state.taskStats, taskDuration)
173
+ : formatDuration(taskDuration);
174
+ // Print task completion with stats
175
+ const taskName = state.activeTask?.name ?? 'task';
176
+ terminalLog(`${timestampPrefix()}└─${colors.yellow}[${taskName}]${colors.reset} Complete: ${statsSummary}`);
177
+ // Merge task stats into step stats before clearing
178
+ if (state.taskStats) {
179
+ mergeStats(state.stats, state.taskStats);
156
180
  }
157
- // Clear active task
181
+ // Clear active task and stats
158
182
  state.activeTask = null;
183
+ state.taskStats = null;
184
+ state.taskStartTime = null;
159
185
  }
160
186
  /**
161
187
  * Format and display a Claude message
@@ -169,26 +195,56 @@ parallelThresholdMs) {
169
195
  }
170
196
  else if (isAssistantMessage(msg)) {
171
197
  flushPendingTools(state, verbosity);
198
+ // Check for Task tool first to initialize taskStats before tracking
199
+ for (const block of msg.message.content) {
200
+ if (isToolUseBlock(block) && block.name === 'Task') {
201
+ const input = block.input;
202
+ const taskType = input['subagent_type'] ?? 'agent';
203
+ const taskDesc = truncate(input['description'] ??
204
+ input['prompt'] ??
205
+ '', TRUNCATE_TASK_DESC);
206
+ state.activeTask = {
207
+ name: taskType,
208
+ description: taskDesc,
209
+ id: block.id,
210
+ };
211
+ state.taskStats = createRunStats();
212
+ state.taskStartTime = Date.now();
213
+ break;
214
+ }
215
+ }
216
+ // Track message and token usage in stats
217
+ const stats = state.taskStats ?? state.stats;
218
+ incrementMessageCount(stats);
219
+ if (msg.message.usage) {
220
+ updateTokenStats(stats, msg.message.usage);
221
+ }
172
222
  for (const block of msg.message.content) {
173
223
  if (isTextBlock(block)) {
174
224
  claudeText += block.text + '\n';
225
+ // Track output characters for token estimation
226
+ recordOutput(stats, block.text.length);
175
227
  if (verbosity === 'quiet') {
176
228
  // Show answers but not thinking/status updates
177
229
  if (!block.text.startsWith("I'll ") &&
178
230
  !block.text.startsWith('Let me ')) {
179
231
  const displayText = block.text.replace(/[\r\n]+/g, ' ').trim();
180
- console.log(`${timestampPrefix()}${colors.green}[ANSWER]${colors.reset} ${truncate(displayText, TRUNCATE_ANSWER)}`);
232
+ terminalLog(`${timestampPrefix()}${colors.green}[answer]${colors.reset} ${truncate(displayText, TRUNCATE_ANSWER)}`);
181
233
  }
182
234
  }
183
235
  else {
184
236
  const displayText = block.text.replace(/[\r\n]+/g, ' ').trim();
185
- printClaude(displayText, block.text);
237
+ printClaude(truncate(displayText, TRUNCATE_TERMINAL_LINE), block.text);
186
238
  }
187
239
  }
188
240
  else if (isToolUseBlock(block)) {
189
241
  const now = Date.now();
190
242
  // Record start time
191
243
  state.toolStartTimes.set(block.id, now);
244
+ // Track tool use in stats (skip Task - it's the container, not a tool within)
245
+ if (block.name !== 'Task') {
246
+ recordToolUse(stats, block.name);
247
+ }
192
248
  if (state.lastToolTime &&
193
249
  now - state.lastToolTime < parallelThresholdMs) {
194
250
  // Part of parallel batch
@@ -213,6 +269,11 @@ parallelThresholdMs) {
213
269
  }
214
270
  else if (isUserMessage(msg)) {
215
271
  flushPendingTools(state, verbosity);
272
+ // Track usage from task results (tool_use_result has aggregated stats)
273
+ if (msg.tool_use_result?.usage) {
274
+ const stats = state.taskStats ?? state.stats;
275
+ updateTokenStats(stats, msg.tool_use_result.usage);
276
+ }
216
277
  for (const block of msg.message.content) {
217
278
  if (isToolResultBlock(block)) {
218
279
  const toolUseId = block.tool_use_id;
@@ -232,7 +293,11 @@ parallelThresholdMs) {
232
293
  content.startsWith('Error:') ||
233
294
  content.startsWith('error:');
234
295
  if (isError) {
235
- console.log(`${timestampPrefix()} ${colors.red}ERROR: ${truncate(content, TRUNCATE_ERROR)}${colors.reset}${durationStr}`);
296
+ const inTask = state.activeTask !== null;
297
+ const indent = inTask ? '│' : '';
298
+ // Strip <tool_use_error> tags for cleaner display
299
+ const cleanError = content.replace(/<\/?tool_use_error>/g, '').trim();
300
+ terminalLog(`${timestampPrefix()}${indent} ${colors.red}ERROR: ${truncate(cleanError, TRUNCATE_ERROR)}${colors.reset}${durationStr}`);
236
301
  }
237
302
  else if (state.activeTask?.id === toolUseId) {
238
303
  // Task completing
@@ -246,6 +311,11 @@ parallelThresholdMs) {
246
311
  }
247
312
  else if (isResultMessage(msg)) {
248
313
  flushPendingTools(state, verbosity);
314
+ // Track usage from result message
315
+ if (msg.usage) {
316
+ const stats = state.taskStats ?? state.stats;
317
+ updateTokenStats(stats, msg.usage);
318
+ }
249
319
  state.lastStepDurationMs = msg.duration_ms ?? null;
250
320
  if (!state.suppressStepCompletion && verbosity !== 'quiet') {
251
321
  const duration = msg.duration_ms ? formatDuration(msg.duration_ms) : '?';
@@ -254,7 +324,7 @@ parallelThresholdMs) {
254
324
  }
255
325
  else {
256
326
  if (verbosity === 'verbose') {
257
- console.log(`${timestampPrefix()}${colors.dim}[${msg.type.toUpperCase()}] ${truncate(JSON.stringify(msg), TRUNCATE_MESSAGE)}${colors.reset}`);
327
+ terminalLog(`${timestampPrefix()}${colors.dim}[${msg.type.toUpperCase()}] ${truncate(JSON.stringify(msg), TRUNCATE_MESSAGE)}${colors.reset}`);
258
328
  }
259
329
  }
260
330
  return claudeText;
@@ -1 +1 @@
1
- {"version":3,"file":"formatter.js","sourceRoot":"","sources":["../../src/output/formatter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"formatter.js","sourceRoot":"","sources":["../../src/output/formatter.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  export * from './colors.js';
2
2
  export * from './formatter.js';
3
3
  export * from './logger.js';
4
+ export * from './stats.js';
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/output/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/output/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC"}
@@ -1,4 +1,5 @@
1
1
  export * from './colors.js';
2
2
  export * from './formatter.js';
3
3
  export * from './logger.js';
4
+ export * from './stats.js';
4
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/output/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/output/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC"}
@@ -1,8 +1,18 @@
1
1
  /**
2
2
  * File logging with ANSI stripping
3
3
  */
4
+ /**
5
+ * Runner event for structured logging
6
+ */
7
+ export interface RunnerEvent {
8
+ type: 'runner';
9
+ event: string;
10
+ timestamp: string;
11
+ [key: string]: unknown;
12
+ }
4
13
  export interface Logger {
5
14
  log(msg: string): void;
15
+ logEvent(event: Omit<RunnerEvent, 'type' | 'timestamp'>): void;
6
16
  close(): void;
7
17
  filePath: string | null;
8
18
  }
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/output/logger.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,MAAM,WAAW,MAAM;IACrB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,KAAK,IAAI,IAAI,CAAC;IACd,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,GAClB,MAAM,CA+BR"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/output/logger.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,MAAM;IACrB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,WAAW,CAAC,GAAG,IAAI,CAAC;IAC/D,KAAK,IAAI,IAAI,CAAC;IACd,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,GAClB,MAAM,CAwCR"}
@@ -11,6 +11,7 @@ export function createLogger(enabled, logDir, commandName) {
11
11
  if (!enabled) {
12
12
  return {
13
13
  log: () => undefined,
14
+ logEvent: () => undefined,
14
15
  close: () => undefined,
15
16
  filePath: null,
16
17
  };
@@ -26,10 +27,18 @@ export function createLogger(enabled, logDir, commandName) {
26
27
  const logStream = fs.createWriteStream(logFile, { flags: 'a' });
27
28
  return {
28
29
  log(msg) {
29
- // Strip ANSI codes and CR for clean log file
30
- const clean = stripAnsi(msg).replace(/\r/g, '');
30
+ // Strip ANSI codes but preserve CRs for full fidelity
31
+ const clean = stripAnsi(msg);
31
32
  logStream.write(clean + '\n');
32
33
  },
34
+ logEvent(eventData) {
35
+ const fullEvent = {
36
+ type: 'runner',
37
+ timestamp: new Date().toISOString(),
38
+ ...eventData,
39
+ };
40
+ logStream.write(JSON.stringify(fullEvent) + '\n');
41
+ },
33
42
  close() {
34
43
  logStream.end();
35
44
  },
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/output/logger.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAQxC;;GAEG;AACH,MAAM,UAAU,YAAY,CAC1B,OAAgB,EAChB,MAAc,EACd,WAAmB;IAEnB,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO;YACL,GAAG,EAAE,GAAG,EAAE,CAAC,SAAS;YACpB,KAAK,EAAE,GAAG,EAAE,CAAC,SAAS;YACtB,QAAQ,EAAE,IAAI;SACf,CAAC;IACJ,CAAC;IAED,8BAA8B;IAC9B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,8BAA8B;IAC9B,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC9E,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACzD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,aAAa,IAAI,SAAS,MAAM,CAAC,CAAC;IACvE,MAAM,SAAS,GAAG,EAAE,CAAC,iBAAiB,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;IAEhE,OAAO;QACL,GAAG,CAAC,GAAW;YACb,6CAA6C;YAC7C,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAChD,SAAS,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;QAChC,CAAC;QACD,KAAK;YACH,SAAS,CAAC,GAAG,EAAE,CAAC;QAClB,CAAC;QACD,QAAQ,EAAE,OAAO;KAClB,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/output/logger.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAmBxC;;GAEG;AACH,MAAM,UAAU,YAAY,CAC1B,OAAgB,EAChB,MAAc,EACd,WAAmB;IAEnB,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO;YACL,GAAG,EAAE,GAAG,EAAE,CAAC,SAAS;YACpB,QAAQ,EAAE,GAAG,EAAE,CAAC,SAAS;YACzB,KAAK,EAAE,GAAG,EAAE,CAAC,SAAS;YACtB,QAAQ,EAAE,IAAI;SACf,CAAC;IACJ,CAAC;IAED,8BAA8B;IAC9B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,8BAA8B;IAC9B,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC9E,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACzD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,aAAa,IAAI,SAAS,MAAM,CAAC,CAAC;IACvE,MAAM,SAAS,GAAG,EAAE,CAAC,iBAAiB,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;IAEhE,OAAO;QACL,GAAG,CAAC,GAAW;YACb,sDAAsD;YACtD,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;YAC7B,SAAS,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;QAChC,CAAC;QACD,QAAQ,CAAC,SAAkD;YACzD,MAAM,SAAS,GAAG;gBAChB,IAAI,EAAE,QAAiB;gBACvB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACnC,GAAG,SAAS;aACb,CAAC;YACF,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC;QACpD,CAAC;QACD,KAAK;YACH,SAAS,CAAC,GAAG,EAAE,CAAC;QAClB,CAAC;QACD,QAAQ,EAAE,OAAO;KAClB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Run statistics tracking and summary formatting
3
+ * Tracks messages, tokens, and tool usage for display
4
+ */
5
+ import type { TokenUsage } from '../types/claude.js';
6
+ /**
7
+ * Aggregated token counts
8
+ */
9
+ export interface TokenCounts {
10
+ /** Prompt tokens (non-cached input) */
11
+ prompt: number;
12
+ /** Cache write 5m tokens */
13
+ cacheWrite5m: number;
14
+ /** Cache write 1h tokens */
15
+ cacheWrite1h: number;
16
+ /** Cache read tokens */
17
+ cacheRead: number;
18
+ /** Output tokens (estimated from content) */
19
+ output: number;
20
+ }
21
+ /**
22
+ * Run statistics
23
+ */
24
+ export interface RunStats {
25
+ /** Message count */
26
+ messageCount: number;
27
+ /** Token usage */
28
+ tokens: TokenCounts;
29
+ /** Tool names used */
30
+ toolsUsed: Set<string>;
31
+ /** Tool use count */
32
+ toolUseCount: number;
33
+ /** Characters of output (for token estimation) */
34
+ outputChars: number;
35
+ }
36
+ /**
37
+ * Create empty run stats
38
+ */
39
+ export declare function createRunStats(): RunStats;
40
+ /**
41
+ * Reset run stats (for new step/task)
42
+ */
43
+ export declare function resetRunStats(stats: RunStats): void;
44
+ /**
45
+ * Update stats from token usage
46
+ */
47
+ export declare function updateTokenStats(stats: RunStats, usage: TokenUsage): void;
48
+ /**
49
+ * Record a tool use
50
+ */
51
+ export declare function recordToolUse(stats: RunStats, toolName: string): void;
52
+ /**
53
+ * Record output characters for token estimation
54
+ */
55
+ export declare function recordOutput(stats: RunStats, chars: number): void;
56
+ /**
57
+ * Increment message count
58
+ */
59
+ export declare function incrementMessageCount(stats: RunStats): void;
60
+ /**
61
+ * Merge source stats into target (accumulates values)
62
+ */
63
+ export declare function mergeStats(target: RunStats, source: RunStats): void;
64
+ /**
65
+ * Clone stats (creates a copy)
66
+ */
67
+ export declare function cloneStats(stats: RunStats): RunStats;
68
+ /**
69
+ * Format stats summary for display
70
+ * Example: 33s | 14 msgs | 319,449 in (32 p / 6,579 cw5m / 312,838 cr) | ~931 out | 3 tools (Bash, Edit, Read)
71
+ */
72
+ export declare function formatStatsSummary(stats: RunStats, durationMs: number): string;
73
+ //# sourceMappingURL=stats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../src/output/stats.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGrD;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,uCAAuC;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,4BAA4B;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,4BAA4B;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,wBAAwB;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,6CAA6C;IAC7C,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,oBAAoB;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB;IAClB,MAAM,EAAE,WAAW,CAAC;IACpB,sBAAsB;IACtB,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACvB,qBAAqB;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,kDAAkD;IAClD,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,QAAQ,CAczC;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAYnD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI,CAQzE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAGrE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAEjE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAE3D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,CAYnE;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,QAAQ,GAAG,QAAQ,CAQpD;AA0BD;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,QAAQ,EACf,UAAU,EAAE,MAAM,GACjB,MAAM,CA2CR"}
@@ -0,0 +1,160 @@
1
+ /**
2
+ * Run statistics tracking and summary formatting
3
+ * Tracks messages, tokens, and tool usage for display
4
+ */
5
+ import { formatDuration } from './colors.js';
6
+ /**
7
+ * Create empty run stats
8
+ */
9
+ export function createRunStats() {
10
+ return {
11
+ messageCount: 0,
12
+ tokens: {
13
+ prompt: 0,
14
+ cacheWrite5m: 0,
15
+ cacheWrite1h: 0,
16
+ cacheRead: 0,
17
+ output: 0,
18
+ },
19
+ toolsUsed: new Set(),
20
+ toolUseCount: 0,
21
+ outputChars: 0,
22
+ };
23
+ }
24
+ /**
25
+ * Reset run stats (for new step/task)
26
+ */
27
+ export function resetRunStats(stats) {
28
+ stats.messageCount = 0;
29
+ stats.tokens = {
30
+ prompt: 0,
31
+ cacheWrite5m: 0,
32
+ cacheWrite1h: 0,
33
+ cacheRead: 0,
34
+ output: 0,
35
+ };
36
+ stats.toolsUsed.clear();
37
+ stats.toolUseCount = 0;
38
+ stats.outputChars = 0;
39
+ }
40
+ /**
41
+ * Update stats from token usage
42
+ */
43
+ export function updateTokenStats(stats, usage) {
44
+ stats.tokens.prompt += usage.input_tokens ?? 0;
45
+ stats.tokens.output += usage.output_tokens ?? 0;
46
+ stats.tokens.cacheWrite5m +=
47
+ usage.cache_creation?.ephemeral_5m_input_tokens ?? 0;
48
+ stats.tokens.cacheWrite1h +=
49
+ usage.cache_creation?.ephemeral_1h_input_tokens ?? 0;
50
+ stats.tokens.cacheRead += usage.cache_read_input_tokens ?? 0;
51
+ }
52
+ /**
53
+ * Record a tool use
54
+ */
55
+ export function recordToolUse(stats, toolName) {
56
+ stats.toolsUsed.add(toolName);
57
+ stats.toolUseCount++;
58
+ }
59
+ /**
60
+ * Record output characters for token estimation
61
+ */
62
+ export function recordOutput(stats, chars) {
63
+ stats.outputChars += chars;
64
+ }
65
+ /**
66
+ * Increment message count
67
+ */
68
+ export function incrementMessageCount(stats) {
69
+ stats.messageCount++;
70
+ }
71
+ /**
72
+ * Merge source stats into target (accumulates values)
73
+ */
74
+ export function mergeStats(target, source) {
75
+ target.messageCount += source.messageCount;
76
+ target.tokens.prompt += source.tokens.prompt;
77
+ target.tokens.cacheWrite5m += source.tokens.cacheWrite5m;
78
+ target.tokens.cacheWrite1h += source.tokens.cacheWrite1h;
79
+ target.tokens.cacheRead += source.tokens.cacheRead;
80
+ target.tokens.output += source.tokens.output;
81
+ for (const tool of source.toolsUsed) {
82
+ target.toolsUsed.add(tool);
83
+ }
84
+ target.toolUseCount += source.toolUseCount;
85
+ target.outputChars += source.outputChars;
86
+ }
87
+ /**
88
+ * Clone stats (creates a copy)
89
+ */
90
+ export function cloneStats(stats) {
91
+ return {
92
+ messageCount: stats.messageCount,
93
+ tokens: { ...stats.tokens },
94
+ toolsUsed: new Set(stats.toolsUsed),
95
+ toolUseCount: stats.toolUseCount,
96
+ outputChars: stats.outputChars,
97
+ };
98
+ }
99
+ /**
100
+ * Calculate total input tokens
101
+ */
102
+ function totalInputTokens(tokens) {
103
+ return (tokens.prompt + tokens.cacheWrite5m + tokens.cacheWrite1h + tokens.cacheRead);
104
+ }
105
+ /**
106
+ * Estimate output tokens from character count
107
+ * Rough estimate: ~4 chars per token
108
+ */
109
+ function estimateOutputTokens(chars) {
110
+ return Math.ceil(chars / 4);
111
+ }
112
+ /**
113
+ * Format number with commas
114
+ */
115
+ function formatNumber(n) {
116
+ return n.toLocaleString();
117
+ }
118
+ /**
119
+ * Format stats summary for display
120
+ * Example: 33s | 14 msgs | 319,449 in (32 p / 6,579 cw5m / 312,838 cr) | ~931 out | 3 tools (Bash, Edit, Read)
121
+ */
122
+ export function formatStatsSummary(stats, durationMs) {
123
+ const parts = [];
124
+ // Duration
125
+ parts.push(formatDuration(durationMs));
126
+ // Message count
127
+ parts.push(`${stats.messageCount} msgs`);
128
+ // Input tokens with breakdown
129
+ const totalIn = totalInputTokens(stats.tokens);
130
+ const breakdownParts = [];
131
+ if (stats.tokens.prompt > 0) {
132
+ breakdownParts.push(`${formatNumber(stats.tokens.prompt)} p`);
133
+ }
134
+ if (stats.tokens.cacheWrite5m > 0) {
135
+ breakdownParts.push(`${formatNumber(stats.tokens.cacheWrite5m)} cw5m`);
136
+ }
137
+ if (stats.tokens.cacheWrite1h > 0) {
138
+ breakdownParts.push(`${formatNumber(stats.tokens.cacheWrite1h)} cw1h`);
139
+ }
140
+ if (stats.tokens.cacheRead > 0) {
141
+ breakdownParts.push(`${formatNumber(stats.tokens.cacheRead)} cr`);
142
+ }
143
+ const breakdown = breakdownParts.length > 0 ? ` (${breakdownParts.join(' / ')})` : '';
144
+ parts.push(`${formatNumber(totalIn)} in${breakdown}`);
145
+ // Output tokens (actual if available, otherwise estimated from chars)
146
+ if (stats.tokens.output > 0) {
147
+ parts.push(`${formatNumber(stats.tokens.output)} out`);
148
+ }
149
+ else {
150
+ const outputTokens = estimateOutputTokens(stats.outputChars);
151
+ parts.push(`~${formatNumber(outputTokens)} out`);
152
+ }
153
+ // Tools
154
+ if (stats.toolUseCount > 0) {
155
+ const toolList = Array.from(stats.toolsUsed).sort().join(', ');
156
+ parts.push(`${stats.toolUseCount} tools (${toolList})`);
157
+ }
158
+ return parts.join(' | ');
159
+ }
160
+ //# sourceMappingURL=stats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/output/stats.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAkC7C;;GAEG;AACH,MAAM,UAAU,cAAc;IAC5B,OAAO;QACL,YAAY,EAAE,CAAC;QACf,MAAM,EAAE;YACN,MAAM,EAAE,CAAC;YACT,YAAY,EAAE,CAAC;YACf,YAAY,EAAE,CAAC;YACf,SAAS,EAAE,CAAC;YACZ,MAAM,EAAE,CAAC;SACV;QACD,SAAS,EAAE,IAAI,GAAG,EAAE;QACpB,YAAY,EAAE,CAAC;QACf,WAAW,EAAE,CAAC;KACf,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,KAAe;IAC3C,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC;IACvB,KAAK,CAAC,MAAM,GAAG;QACb,MAAM,EAAE,CAAC;QACT,YAAY,EAAE,CAAC;QACf,YAAY,EAAE,CAAC;QACf,SAAS,EAAE,CAAC;QACZ,MAAM,EAAE,CAAC;KACV,CAAC;IACF,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IACxB,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC;IACvB,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAe,EAAE,KAAiB;IACjE,KAAK,CAAC,MAAM,CAAC,MAAM,IAAI,KAAK,CAAC,YAAY,IAAI,CAAC,CAAC;IAC/C,KAAK,CAAC,MAAM,CAAC,MAAM,IAAI,KAAK,CAAC,aAAa,IAAI,CAAC,CAAC;IAChD,KAAK,CAAC,MAAM,CAAC,YAAY;QACvB,KAAK,CAAC,cAAc,EAAE,yBAAyB,IAAI,CAAC,CAAC;IACvD,KAAK,CAAC,MAAM,CAAC,YAAY;QACvB,KAAK,CAAC,cAAc,EAAE,yBAAyB,IAAI,CAAC,CAAC;IACvD,KAAK,CAAC,MAAM,CAAC,SAAS,IAAI,KAAK,CAAC,uBAAuB,IAAI,CAAC,CAAC;AAC/D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,KAAe,EAAE,QAAgB;IAC7D,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC9B,KAAK,CAAC,YAAY,EAAE,CAAC;AACvB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,KAAe,EAAE,KAAa;IACzD,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAe;IACnD,KAAK,CAAC,YAAY,EAAE,CAAC;AACvB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,MAAgB,EAAE,MAAgB;IAC3D,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,YAAY,CAAC;IAC3C,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;IAC7C,MAAM,CAAC,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC;IACzD,MAAM,CAAC,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC;IACzD,MAAM,CAAC,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC;IACnD,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;IAC7C,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACpC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IACD,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,YAAY,CAAC;IAC3C,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,WAAW,CAAC;AAC3C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,KAAe;IACxC,OAAO;QACL,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,MAAM,EAAE,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE;QAC3B,SAAS,EAAE,IAAI,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC;QACnC,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,WAAW,EAAE,KAAK,CAAC,WAAW;KAC/B,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,MAAmB;IAC3C,OAAO,CACL,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC,SAAS,CAC7E,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAS,oBAAoB,CAAC,KAAa;IACzC,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;AAC9B,CAAC;AAED;;GAEG;AACH,SAAS,YAAY,CAAC,CAAS;IAC7B,OAAO,CAAC,CAAC,cAAc,EAAE,CAAC;AAC5B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAChC,KAAe,EACf,UAAkB;IAElB,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,WAAW;IACX,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;IAEvC,gBAAgB;IAChB,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,YAAY,OAAO,CAAC,CAAC;IAEzC,8BAA8B;IAC9B,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC/C,MAAM,cAAc,GAAa,EAAE,CAAC;IACpC,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,cAAc,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAChE,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC;QAClC,cAAc,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IACzE,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC;QAClC,cAAc,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IACzE,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;QAC/B,cAAc,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACpE,CAAC;IACD,MAAM,SAAS,GACb,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACtE,KAAK,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,SAAS,EAAE,CAAC,CAAC;IAEtD,sEAAsE;IACtE,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACzD,CAAC;SAAM,CAAC;QACN,MAAM,YAAY,GAAG,oBAAoB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC7D,KAAK,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IACnD,CAAC;IAED,QAAQ;IACR,IAAI,KAAK,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/D,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,YAAY,WAAW,QAAQ,GAAG,CAAC,CAAC;IAC1D,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC3B,CAAC"}
@@ -22,9 +22,21 @@ export interface McpServer {
22
22
  name: string;
23
23
  status: 'connected' | 'failed' | 'connecting';
24
24
  }
25
+ export interface CacheCreation {
26
+ ephemeral_5m_input_tokens?: number;
27
+ ephemeral_1h_input_tokens?: number;
28
+ }
29
+ export interface TokenUsage {
30
+ input_tokens?: number;
31
+ output_tokens?: number;
32
+ cache_creation_input_tokens?: number;
33
+ cache_read_input_tokens?: number;
34
+ cache_creation?: CacheCreation;
35
+ }
25
36
  export interface MessageEnvelope {
26
37
  role: 'assistant' | 'user';
27
38
  content: ContentBlock[];
39
+ usage?: TokenUsage;
28
40
  }
29
41
  export interface SystemInitMessage {
30
42
  type: 'system';
@@ -37,15 +49,21 @@ export interface AssistantMessage {
37
49
  type: 'assistant';
38
50
  message: MessageEnvelope;
39
51
  }
52
+ export interface ToolUseResult {
53
+ usage?: TokenUsage;
54
+ [key: string]: unknown;
55
+ }
40
56
  export interface UserMessage {
41
57
  type: 'user';
42
58
  message: MessageEnvelope;
59
+ tool_use_result?: ToolUseResult;
43
60
  }
44
61
  export interface ResultMessage {
45
62
  type: 'result';
46
63
  duration_ms?: number;
47
64
  cost_usd?: number;
48
65
  is_error?: boolean;
66
+ usage?: TokenUsage;
49
67
  }
50
68
  export interface GenericMessage {
51
69
  type: string;
@@ -1 +1 @@
1
- {"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../src/types/claude.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,UAAU,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,aAAa,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,GAAG,OAAO,EAAE,CAAC;IAC5B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,YAAY,GAAG,eAAe,CAAC;AAGtE,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,GAAG,QAAQ,GAAG,YAAY,CAAC;CAC/C;AAGD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,WAAW,GAAG,MAAM,CAAC;IAC3B,OAAO,EAAE,YAAY,EAAE,CAAC;CACzB;AAGD,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,CAAC,EAAE,SAAS,EAAE,CAAC;CAC3B;AAGD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,eAAe,CAAC;CAC1B;AAGD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,eAAe,CAAC;CAC1B;AAGD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,QAAQ,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAGD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,MAAM,aAAa,GACrB,iBAAiB,GACjB,gBAAgB,GAChB,WAAW,GACX,aAAa,GACb,cAAc,CAAC;AAEnB;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,aAAa,GACjB,GAAG,IAAI,iBAAiB,CAE1B;AAED,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,aAAa,GACjB,GAAG,IAAI,gBAAgB,CAEzB;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,aAAa,GAAG,GAAG,IAAI,WAAW,CAEpE;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,aAAa,GAAG,GAAG,IAAI,aAAa,CAExE;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,YAAY,GAAG,KAAK,IAAI,YAAY,CAEzE;AAED,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,YAAY,GAClB,KAAK,IAAI,eAAe,CAE1B;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,YAAY,GAAG,KAAK,IAAI,SAAS,CAEnE"}
1
+ {"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../src/types/claude.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/types/claude.ts"],"names":[],"mappings":"AAAA;;GAEG;AA+EH;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,GAAkB;IAElB,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,SAAS,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,KAAK,MAAM,CAAC;AAC7E,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,GAAkB;IAElB,OAAO,GAAG,CAAC,IAAI,KAAK,WAAW,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,GAAkB;IAC9C,OAAO,GAAG,CAAC,IAAI,KAAK,MAAM,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,GAAkB;IAChD,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAmB;IAChD,OAAO,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,KAAmB;IAEnB,OAAO,KAAK,CAAC,IAAI,KAAK,aAAa,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAmB;IAC7C,OAAO,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC;AAC/B,CAAC"}
1
+ {"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/types/claude.ts"],"names":[],"mappings":"AAAA;;GAEG;AAsGH;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,GAAkB;IAElB,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,SAAS,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,KAAK,MAAM,CAAC;AAC7E,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,GAAkB;IAElB,OAAO,GAAG,CAAC,IAAI,KAAK,WAAW,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,GAAkB;IAC9C,OAAO,GAAG,CAAC,IAAI,KAAK,MAAM,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,GAAkB;IAChD,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAmB;IAChD,OAAO,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,KAAmB;IAEnB,OAAO,KAAK,CAAC,IAAI,KAAK,aAAa,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAmB;IAC7C,OAAO,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC;AAC/B,CAAC"}
@@ -24,6 +24,8 @@ export declare const TRUNCATE_ERROR = 100;
24
24
  export declare const TRUNCATE_MESSAGE = 100;
25
25
  /** Truncation length for verbose tool result lines */
26
26
  export declare const TRUNCATE_VERBOSE_LINE = 150;
27
+ /** Truncation length for terminal output lines (Claude messages, runner messages) */
28
+ export declare const TRUNCATE_TERMINAL_LINE = 150;
27
29
  /** Truncation length for normal task result summary */
28
30
  export declare const TRUNCATE_TASK_SUMMARY = 200;
29
31
  /** Truncation length for quiet mode answer display */
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,sDAAsD;AACtD,eAAO,MAAM,gBAAgB,OAAO,CAAC;AACrC,yDAAyD;AACzD,eAAO,MAAM,gBAAgB,UAAU,CAAC;AAGxC,gDAAgD;AAChD,eAAO,MAAM,gBAAgB,KAAK,CAAC;AACnC,iDAAiD;AACjD,eAAO,MAAM,qBAAqB,KAAK,CAAC;AACxC,6CAA6C;AAC7C,eAAO,MAAM,kBAAkB,KAAK,CAAC;AACrC,iDAAiD;AACjD,eAAO,MAAM,iBAAiB,KAAK,CAAC;AACpC,yCAAyC;AACzC,eAAO,MAAM,gBAAgB,KAAK,CAAC;AACnC,8CAA8C;AAC9C,eAAO,MAAM,kBAAkB,KAAK,CAAC;AACrC,2CAA2C;AAC3C,eAAO,MAAM,cAAc,MAAM,CAAC;AAClC,6CAA6C;AAC7C,eAAO,MAAM,gBAAgB,MAAM,CAAC;AACpC,sDAAsD;AACtD,eAAO,MAAM,qBAAqB,MAAM,CAAC;AACzC,uDAAuD;AACvD,eAAO,MAAM,qBAAqB,MAAM,CAAC;AACzC,sDAAsD;AACtD,eAAO,MAAM,eAAe,MAAM,CAAC;AACnC,wDAAwD;AACxD,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAGzC,4BAA4B;AAC5B,eAAO,MAAM,QAAQ,MAAM,CAAC;AAC5B,yBAAyB;AACzB,eAAO,MAAM,QAAQ,KAAK,CAAC;AAG3B,8BAA8B;AAC9B,eAAO,MAAM,aAAa,OAAO,CAAC;AAClC,yBAAyB;AACzB,eAAO,MAAM,kBAAkB,KAAK,CAAC;AACrC,uBAAuB;AACvB,eAAO,MAAM,gBAAgB,OAAO,CAAC;AAGrC,6CAA6C;AAC7C,eAAO,MAAM,sBAAsB,KAAK,CAAC;AACzC,sDAAsD;AACtD,eAAO,MAAM,6BAA6B,MAAM,CAAC;AACjD,6CAA6C;AAC7C,eAAO,MAAM,0BAA0B,OAAO,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,sDAAsD;AACtD,eAAO,MAAM,gBAAgB,OAAO,CAAC;AACrC,yDAAyD;AACzD,eAAO,MAAM,gBAAgB,UAAU,CAAC;AAGxC,gDAAgD;AAChD,eAAO,MAAM,gBAAgB,KAAK,CAAC;AACnC,iDAAiD;AACjD,eAAO,MAAM,qBAAqB,KAAK,CAAC;AACxC,6CAA6C;AAC7C,eAAO,MAAM,kBAAkB,KAAK,CAAC;AACrC,iDAAiD;AACjD,eAAO,MAAM,iBAAiB,KAAK,CAAC;AACpC,yCAAyC;AACzC,eAAO,MAAM,gBAAgB,KAAK,CAAC;AACnC,8CAA8C;AAC9C,eAAO,MAAM,kBAAkB,KAAK,CAAC;AACrC,2CAA2C;AAC3C,eAAO,MAAM,cAAc,MAAM,CAAC;AAClC,6CAA6C;AAC7C,eAAO,MAAM,gBAAgB,MAAM,CAAC;AACpC,sDAAsD;AACtD,eAAO,MAAM,qBAAqB,MAAM,CAAC;AACzC,qFAAqF;AACrF,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAC1C,uDAAuD;AACvD,eAAO,MAAM,qBAAqB,MAAM,CAAC;AACzC,sDAAsD;AACtD,eAAO,MAAM,eAAe,MAAM,CAAC;AACnC,wDAAwD;AACxD,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAGzC,4BAA4B;AAC5B,eAAO,MAAM,QAAQ,MAAM,CAAC;AAC5B,yBAAyB;AACzB,eAAO,MAAM,QAAQ,KAAK,CAAC;AAG3B,8BAA8B;AAC9B,eAAO,MAAM,aAAa,OAAO,CAAC;AAClC,yBAAyB;AACzB,eAAO,MAAM,kBAAkB,KAAK,CAAC;AACrC,uBAAuB;AACvB,eAAO,MAAM,gBAAgB,OAAO,CAAC;AAGrC,6CAA6C;AAC7C,eAAO,MAAM,sBAAsB,KAAK,CAAC;AACzC,sDAAsD;AACtD,eAAO,MAAM,6BAA6B,MAAM,CAAC;AACjD,6CAA6C;AAC7C,eAAO,MAAM,0BAA0B,OAAO,CAAC"}
@@ -26,6 +26,8 @@ export const TRUNCATE_ERROR = 100;
26
26
  export const TRUNCATE_MESSAGE = 100;
27
27
  /** Truncation length for verbose tool result lines */
28
28
  export const TRUNCATE_VERBOSE_LINE = 150;
29
+ /** Truncation length for terminal output lines (Claude messages, runner messages) */
30
+ export const TRUNCATE_TERMINAL_LINE = 150;
29
31
  /** Truncation length for normal task result summary */
30
32
  export const TRUNCATE_TASK_SUMMARY = 200;
31
33
  /** Truncation length for quiet mode answer display */
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,0BAA0B;AAC1B,sDAAsD;AACtD,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC;AACrC,yDAAyD;AACzD,MAAM,CAAC,MAAM,gBAAgB,GAAG,OAAO,CAAC;AAExC,yBAAyB;AACzB,gDAAgD;AAChD,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC;AACnC,iDAAiD;AACjD,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,CAAC;AACxC,6CAA6C;AAC7C,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,CAAC;AACrC,iDAAiD;AACjD,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,CAAC;AACpC,yCAAyC;AACzC,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC;AACnC,8CAA8C;AAC9C,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,CAAC;AACrC,2CAA2C;AAC3C,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,CAAC;AAClC,6CAA6C;AAC7C,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAC;AACpC,sDAAsD;AACtD,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,CAAC;AACzC,uDAAuD;AACvD,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,CAAC;AACzC,sDAAsD;AACtD,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,CAAC;AACnC,wDAAwD;AACxD,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAEzC,4BAA4B;AAC5B,4BAA4B;AAC5B,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAG,CAAC;AAC5B,yBAAyB;AACzB,MAAM,CAAC,MAAM,QAAQ,GAAG,EAAE,CAAC;AAE3B,yBAAyB;AACzB,8BAA8B;AAC9B,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC;AAClC,yBAAyB;AACzB,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,CAAC;AACrC,uBAAuB;AACvB,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAErC,gCAAgC;AAChC,6CAA6C;AAC7C,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,CAAC;AACzC,sDAAsD;AACtD,MAAM,CAAC,MAAM,6BAA6B,GAAG,GAAG,CAAC;AACjD,6CAA6C;AAC7C,MAAM,CAAC,MAAM,0BAA0B,GAAG,IAAI,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,0BAA0B;AAC1B,sDAAsD;AACtD,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC;AACrC,yDAAyD;AACzD,MAAM,CAAC,MAAM,gBAAgB,GAAG,OAAO,CAAC;AAExC,yBAAyB;AACzB,gDAAgD;AAChD,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC;AACnC,iDAAiD;AACjD,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,CAAC;AACxC,6CAA6C;AAC7C,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,CAAC;AACrC,iDAAiD;AACjD,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,CAAC;AACpC,yCAAyC;AACzC,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC;AACnC,8CAA8C;AAC9C,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,CAAC;AACrC,2CAA2C;AAC3C,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,CAAC;AAClC,6CAA6C;AAC7C,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAC;AACpC,sDAAsD;AACtD,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,CAAC;AACzC,qFAAqF;AACrF,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,CAAC;AAC1C,uDAAuD;AACvD,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,CAAC;AACzC,sDAAsD;AACtD,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,CAAC;AACnC,wDAAwD;AACxD,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAEzC,4BAA4B;AAC5B,4BAA4B;AAC5B,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAG,CAAC;AAC5B,yBAAyB;AACzB,MAAM,CAAC,MAAM,QAAQ,GAAG,EAAE,CAAC;AAE3B,yBAAyB;AACzB,8BAA8B;AAC9B,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC;AAClC,yBAAyB;AACzB,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,CAAC;AACrC,uBAAuB;AACvB,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAErC,gCAAgC;AAChC,6CAA6C;AAC7C,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,CAAC;AACzC,sDAAsD;AACtD,MAAM,CAAC,MAAM,6BAA6B,GAAG,GAAG,CAAC;AACjD,6CAA6C;AAC7C,MAAM,CAAC,MAAM,0BAA0B,GAAG,IAAI,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rcrsr/claude-code-runner",
3
- "version": "0.5.0",
3
+ "version": "0.6.1",
4
4
  "description": "Execute Claude CLI with PTY handling, real-time tool visualization, and iterative execution support",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",