claude_stream_viewer 1.0.16 → 1.0.18

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 (59) hide show
  1. package/README.md +38 -10
  2. package/demo_vhs/claude_stream_viewer.gif +0 -0
  3. package/dist/cli.js +46 -364
  4. package/dist/cli.js.map +1 -1
  5. package/dist/libs/colors.d.ts +15 -0
  6. package/dist/libs/colors.d.ts.map +1 -0
  7. package/dist/libs/colors.js +16 -0
  8. package/dist/libs/colors.js.map +1 -0
  9. package/dist/libs/terminal_output.d.ts +8 -0
  10. package/dist/libs/terminal_output.d.ts.map +1 -0
  11. package/dist/libs/terminal_output.js +13 -0
  12. package/dist/libs/terminal_output.js.map +1 -0
  13. package/dist/log_viewer/log_renderer.d.ts +28 -0
  14. package/dist/log_viewer/log_renderer.d.ts.map +1 -0
  15. package/dist/log_viewer/log_renderer.js +163 -0
  16. package/dist/log_viewer/log_renderer.js.map +1 -0
  17. package/dist/log_viewer/tool_input_formatter.d.ts +31 -0
  18. package/dist/log_viewer/tool_input_formatter.d.ts.map +1 -0
  19. package/dist/log_viewer/tool_input_formatter.js +190 -0
  20. package/dist/log_viewer/tool_input_formatter.js.map +1 -0
  21. package/dist/stats/stats_collector.d.ts +28 -0
  22. package/dist/stats/stats_collector.d.ts.map +1 -0
  23. package/dist/stats/stats_collector.js +165 -0
  24. package/dist/stats/stats_collector.js.map +1 -0
  25. package/dist/stats/stats_renderer.d.ts +13 -0
  26. package/dist/stats/stats_renderer.d.ts.map +1 -0
  27. package/dist/stats/stats_renderer.js +193 -0
  28. package/dist/stats/stats_renderer.js.map +1 -0
  29. package/dist/types/claude_event.d.ts +75 -0
  30. package/dist/types/claude_event.d.ts.map +1 -0
  31. package/dist/types/claude_event.js +2 -0
  32. package/dist/types/claude_event.js.map +1 -0
  33. package/dist/types/stats_report.d.ts +68 -0
  34. package/dist/types/stats_report.d.ts.map +1 -0
  35. package/dist/types/stats_report.js +2 -0
  36. package/dist/types/stats_report.js.map +1 -0
  37. package/package.json +4 -5
  38. package/src/cli.ts +53 -409
  39. package/src/libs/colors.ts +16 -0
  40. package/src/libs/terminal_output.ts +14 -0
  41. package/src/log_viewer/log_renderer.ts +160 -0
  42. package/src/log_viewer/tool_input_formatter.ts +183 -0
  43. package/src/stats/stats_collector.ts +175 -0
  44. package/src/stats/stats_renderer.ts +185 -0
  45. package/src/types/claude_event.ts +74 -0
  46. package/src/types/stats_report.ts +66 -0
  47. package/dist/claude-stream-viewer.d.ts +0 -3
  48. package/dist/claude-stream-viewer.d.ts.map +0 -1
  49. package/dist/claude-stream-viewer.js +0 -100
  50. package/dist/claude-stream-viewer.js.map +0 -1
  51. package/dist/claude_stream_viewer copy.d.ts +0 -3
  52. package/dist/claude_stream_viewer copy.d.ts.map +0 -1
  53. package/dist/claude_stream_viewer copy.js +0 -228
  54. package/dist/claude_stream_viewer copy.js.map +0 -1
  55. package/dist/claude_stream_viewer.d.ts +0 -3
  56. package/dist/claude_stream_viewer.d.ts.map +0 -1
  57. package/dist/claude_stream_viewer.js +0 -155
  58. package/dist/claude_stream_viewer.js.map +0 -1
  59. package/src/claude_stream_viewer copy.ts +0 -287
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Pretty-prints [Claude Code](https://claude.com/claude-code) `stream-json` events from stdin with colorized output. Drop it at the end of a `claude --output-format stream-json` pipe to read the stream as a human instead of as raw JSON.
4
4
 
5
- ![claude_stream_viewer demo](demo/claude_stream_viewer.gif)
5
+ ![claude_stream_viewer demo](demo_vhs/claude_stream_viewer.gif)
6
6
 
7
7
  ## Requirements
8
8
 
@@ -16,7 +16,7 @@ Pretty-prints [Claude Code](https://claude.com/claude-code) `stream-json` events
16
16
  ```bash
17
17
  npm install -g claude_stream_viewer
18
18
  # or run on demand without installing
19
- npx claude_stream_viewer@latest
19
+ npx -y claude_stream_viewer@latest
20
20
  ```
21
21
 
22
22
  ## Usage
@@ -26,7 +26,7 @@ Pipe any source of stream-json events into the viewer:
26
26
  ```bash
27
27
  claude --output-format stream-json --verbose \
28
28
  --permission-mode auto -p "explain quantum computing like I'm 5" \
29
- | npx claude_stream_viewer@latest
29
+ | npx -y claude_stream_viewer@latest
30
30
  ```
31
31
 
32
32
  The viewer reads one JSON event per line from stdin and writes a colorized, human-readable rendering to stdout. It exits when stdin closes, printing `[stream ended]`.
@@ -41,7 +41,7 @@ The viewer consumes Claude Code's **consolidated event layer** (`system`, `assis
41
41
  | `assistant` | One block per content type: `--- thinking ---`, plain assistant text, or `→ <tool>` with a per-tool compact body (Bash → `$ <command>`, Read/Write/Edit → file path, Grep/Glob → pattern, TodoWrite → checkbox list, etc.). Unknown tools fall back to a JSON dump. |
42
42
  | `user` | `← <tool> result` (or `← <tool> ERROR`) followed by the tool output, truncated past 40 lines |
43
43
  | `rate_limit_event` | One-line `[rate_limit] <status>` notice |
44
- | `result` | `=== RESULT ===` summary with terminal_reason, turns, duration, cost, token totals |
44
+ | `result` | `=== RESULT ===` summary with terminal_reason, stop_reason, turns, duration, cost (full token/latency/tool stats via `--stats`) |
45
45
  | `stream_event` | Silently skipped |
46
46
  | Anything else | `=== <type> ===` header followed by the raw JSON |
47
47
 
@@ -49,20 +49,48 @@ Tool calls and their results are paired by `tool_use_id`, so each `← <tool> re
49
49
 
50
50
  Malformed lines are reported on stderr (`Invalid JSON: …`) without aborting the stream.
51
51
 
52
+ ## Stats summary
53
+
54
+ Pass `--stats` (`-s`) to suppress the streamed log and print **only** an end-of-stream summary, computed from the `result` event:
55
+
56
+ ```bash
57
+ cat session.jsonl | npx -y claude_stream_viewer@latest --stats
58
+ ```
59
+
60
+ It reports:
61
+
62
+ - **RESULT** — terminal_reason, stop_reason, turns, duration, cost, and health signals (is_error, permission_denials)
63
+ - **LATENCY** — wall vs API vs local (tools + overhead) split, plus output throughput
64
+ - **TOKENS** — input / output / cache read / cache create / total, cache-hit %, and a per-model breakdown with per-model cost
65
+ - **CONTEXT** — peak prompt size and % of the context window used at peak
66
+ - **TOOLS** — call count per tool and tool-result error rate
67
+
68
+ Choose the output format with `--json` or `--markdown` (both imply `--stats`):
69
+
70
+ ```bash
71
+ cat session.jsonl | npx -y claude_stream_viewer@latest --json | jq .tokens
72
+ cat session.jsonl | npx -y claude_stream_viewer@latest --markdown
73
+ ```
74
+
75
+ Truncated streams (no `result` event) still print CONTEXT and TOOLS from what was observed, with a "stream truncated" note.
76
+
52
77
  ## Options
53
78
 
54
- | Flag | Description | Default |
55
- |--------------|--------------------------|---------|
56
- | `--no-color` | Disable colored output | colored |
57
- | `--version` | Print the package version | — |
58
- | `--help` | Print usage help | — |
79
+ | Flag | Description | Default |
80
+ |---------------|---------------------------------------------------------|---------|
81
+ | `-s, --stats` | Print only the summary stats; suppress the streamed log | off |
82
+ | `--json` | Output stats as JSON (implies `--stats`) | — |
83
+ | `--markdown` | Output stats as Markdown (implies `--stats`) | — |
84
+ | `--no-color` | Disable colored output | colored |
85
+ | `--version` | Print the package version | — |
86
+ | `--help` | Print usage help | — |
59
87
 
60
88
  ## Development
61
89
 
62
90
  ```bash
63
91
  cd packages/claude_stream_viewer
64
92
  npm install
65
- npm run dev # tsx ./src/claude_stream_viewer.ts
93
+ npm run dev # tsx ./src/cli.ts
66
94
  npm run build # compile TypeScript → dist/
67
95
  npm run typecheck # type-check without emitting
68
96
  ```
Binary file
package/dist/cli.js CHANGED
@@ -4,367 +4,30 @@
4
4
  // `stream_event` SSE envelopes are ignored — the consolidated events already
5
5
  // carry fully assembled content blocks.
6
6
  //
7
+ // With --stats/-s (or --json / --markdown) the streamed log is suppressed and
8
+ // only a summary report is printed at the end.
9
+ //
7
10
  // Usage:
8
- // claude --output-format stream-json --verbose --permission-mode auto -p "explain quantum computing like I'm 5" | npx claude_stream_viewer
11
+ // claude --output-format stream-json --verbose -p "explain quantum computing" | npx claude_stream_viewer
12
+ // … | npx claude_stream_viewer --stats
13
+ // … | npx claude_stream_viewer --json
9
14
  import Readline from 'node:readline';
10
15
  import Fs from 'node:fs';
16
+ import Path from 'node:path';
11
17
  import * as Commander from 'commander';
12
18
  import Chalk from 'chalk';
13
- import Path from 'node:path';
19
+ import { colors } from './libs/colors.js';
20
+ import { TerminalOutput } from './libs/terminal_output.js';
21
+ import { LogRenderer } from './log_viewer/log_renderer.js';
22
+ import { StatsCollector } from './stats/stats_collector.js';
23
+ import { StatsRenderer } from './stats/stats_renderer.js';
14
24
  const __dirname = new URL('.', import.meta.url).pathname;
15
- const MAX_TOOL_RESULT_LINES = 40;
16
- const colors = {
17
- text: Chalk.white,
18
- tool: Chalk.cyan,
19
- system: Chalk.gray,
20
- error: Chalk.red,
21
- json: Chalk.dim,
22
- header: Chalk.yellow.bold,
23
- thinking: Chalk.gray.italic,
24
- };
25
- ///////////////////////////////////////////////////////////////////////////////
26
- ///////////////////////////////////////////////////////////////////////////////
27
- // class MainHelper
28
- ///////////////////////////////////////////////////////////////////////////////
29
- ///////////////////////////////////////////////////////////////////////////////
30
- class MainHelper {
31
- constructor() {
32
- this.toolNamesById = new Map();
33
- }
34
- printHeader(label) {
35
- console.log(colors.header(`\n=== ${label} ===`));
36
- }
37
- printJSON(obj) {
38
- console.log(colors.json(JSON.stringify(obj, null, 2)));
39
- }
40
- ///////////////////////////////////////////////////////////////////////////////
41
- ///////////////////////////////////////////////////////////////////////////////
42
- // per-event-type renderers
43
- ///////////////////////////////////////////////////////////////////////////////
44
- ///////////////////////////////////////////////////////////////////////////////
45
- renderSystem(event) {
46
- if (event.subtype !== 'init') {
47
- this.printHeader(`SYSTEM: ${event.subtype ?? 'unknown'}`);
48
- this.printJSON(event);
49
- return;
50
- }
51
- this.printHeader('SESSION');
52
- const sessionPrefix = event.session_id !== undefined ? event.session_id.slice(0, 8) : 'unknown';
53
- const toolsCount = event.tools !== undefined ? event.tools.length : 0;
54
- console.log(colors.system(`model: ${event.model ?? 'unknown'}`));
55
- console.log(colors.system(`cwd: ${event.cwd ?? 'unknown'}`));
56
- console.log(colors.system(`tools: ${toolsCount}`));
57
- console.log(colors.system(`session: ${sessionPrefix}`));
58
- if (event.claude_code_version !== undefined) {
59
- console.log(colors.system(`claude-code: v${event.claude_code_version}`));
60
- }
61
- }
62
- renderAssistant(event) {
63
- const content = event.message?.content;
64
- if (content === undefined)
65
- return;
66
- for (const block of content) {
67
- this.renderAssistantBlock(block);
68
- }
69
- }
70
- renderAssistantBlock(block) {
71
- if (block.type === 'thinking') {
72
- console.log(colors.system('\n--- thinking ---'));
73
- console.log(colors.thinking(block.thinking ?? ''));
74
- return;
75
- }
76
- if (block.type === 'text') {
77
- console.log(colors.text(`\n${block.text ?? ''}`));
78
- return;
79
- }
80
- if (block.type === 'tool_use') {
81
- this.renderToolUse(block);
82
- return;
83
- }
84
- console.log(colors.system(`\n[assistant block: ${block.type ?? 'unknown'}]`));
85
- this.printJSON(block);
86
- }
87
- renderToolUse(block) {
88
- const name = block.name ?? 'tool';
89
- if (block.id !== undefined) {
90
- this.toolNamesById.set(block.id, name);
91
- }
92
- console.log(colors.tool(`\n→ ${name}`));
93
- const rawInput = block.input;
94
- const input = (rawInput !== null && typeof rawInput === 'object')
95
- ? rawInput
96
- : {};
97
- const bodyLines = MainHelper.formatToolBody(name, input);
98
- for (const line of bodyLines) {
99
- console.log(` ${line}`);
100
- }
101
- }
102
- static formatToolBody(name, input) {
103
- if (name === 'Bash')
104
- return MainHelper.formatBashInput(input);
105
- if (name === 'Read')
106
- return MainHelper.formatReadInput(input);
107
- if (name === 'Write')
108
- return MainHelper.formatWriteInput(input);
109
- if (name === 'Edit')
110
- return MainHelper.formatEditInput(input);
111
- if (name === 'Grep')
112
- return MainHelper.formatGrepInput(input);
113
- if (name === 'Glob')
114
- return MainHelper.formatGlobInput(input);
115
- if (name === 'TodoWrite')
116
- return MainHelper.formatTodoWriteInput(input);
117
- if (name === 'WebFetch')
118
- return MainHelper.formatWebFetchInput(input);
119
- if (name === 'WebSearch')
120
- return MainHelper.formatWebSearchInput(input);
121
- if (name === 'Task' || name === 'Agent')
122
- return MainHelper.formatTaskInput(input);
123
- return MainHelper.formatFallbackInput(input);
124
- }
125
- static formatBashInput(input) {
126
- const command = MainHelper.readString(input, 'command') ?? '';
127
- const description = MainHelper.readString(input, 'description');
128
- const lines = [];
129
- const cmdLines = command.split('\n');
130
- lines.push(colors.text(`$ ${cmdLines[0] ?? ''}`));
131
- for (let i = 1; i < cmdLines.length; i++) {
132
- lines.push(colors.text(cmdLines[i]));
133
- }
134
- if (description !== undefined) {
135
- lines.push(colors.system(`# ${description}`));
136
- }
137
- return lines;
138
- }
139
- static formatReadInput(input) {
140
- const filePath = MainHelper.readString(input, 'file_path') ?? '';
141
- const offset = MainHelper.readNumber(input, 'offset');
142
- const limit = MainHelper.readNumber(input, 'limit');
143
- let suffix = '';
144
- if (offset !== undefined && limit !== undefined) {
145
- suffix = `:${offset}-${offset + limit - 1}`;
146
- }
147
- else if (offset !== undefined) {
148
- suffix = `:${offset}+`;
149
- }
150
- return [colors.text(`${filePath}${suffix}`)];
151
- }
152
- static formatWriteInput(input) {
153
- const filePath = MainHelper.readString(input, 'file_path') ?? '';
154
- return [colors.text(filePath)];
155
- }
156
- static formatEditInput(input) {
157
- const filePath = MainHelper.readString(input, 'file_path') ?? '';
158
- const lines = [colors.text(filePath)];
159
- if (MainHelper.readBoolean(input, 'replace_all') === true) {
160
- lines.push(colors.system('replace_all=true'));
161
- }
162
- return lines;
163
- }
164
- static formatGrepInput(input) {
165
- const pattern = MainHelper.readString(input, 'pattern') ?? '';
166
- const path = MainHelper.readString(input, 'path');
167
- const head = path !== undefined ? `"${pattern}" in ${path}` : `"${pattern}"`;
168
- const flags = [];
169
- const outputMode = MainHelper.readString(input, 'output_mode');
170
- if (outputMode !== undefined)
171
- flags.push(`output_mode=${outputMode}`);
172
- if (MainHelper.readBoolean(input, '-n') === true)
173
- flags.push('-n');
174
- if (MainHelper.readBoolean(input, '-i') === true)
175
- flags.push('-i');
176
- const headLimit = MainHelper.readNumber(input, 'head_limit');
177
- if (headLimit !== undefined)
178
- flags.push(`head_limit=${headLimit}`);
179
- const glob = MainHelper.readString(input, 'glob');
180
- if (glob !== undefined)
181
- flags.push(`glob=${glob}`);
182
- const fileType = MainHelper.readString(input, 'type');
183
- if (fileType !== undefined)
184
- flags.push(`type=${fileType}`);
185
- if (flags.length === 0) {
186
- return [colors.text(head)];
187
- }
188
- return [`${colors.text(head)} ${colors.system(`(${flags.join(', ')})`)}`];
189
- }
190
- static formatGlobInput(input) {
191
- const pattern = MainHelper.readString(input, 'pattern') ?? '';
192
- const path = MainHelper.readString(input, 'path');
193
- const text = path !== undefined ? `${pattern} in ${path}` : pattern;
194
- return [colors.text(text)];
195
- }
196
- static formatTodoWriteInput(input) {
197
- const todos = input['todos'];
198
- if (Array.isArray(todos) === false) {
199
- return [colors.system('(no todos)')];
200
- }
201
- return todos.map((todo) => {
202
- if (typeof todo !== 'object' || todo === null) {
203
- return colors.text(String(todo));
204
- }
205
- const t = todo;
206
- const status = typeof t['status'] === 'string' ? t['status'] : '?';
207
- const content = typeof t['content'] === 'string' ? t['content'] : '';
208
- let mark = '?';
209
- if (status === 'pending')
210
- mark = ' ';
211
- else if (status === 'in_progress')
212
- mark = '~';
213
- else if (status === 'completed')
214
- mark = 'x';
215
- return colors.text(`[${mark}] ${content}`);
216
- });
217
- }
218
- static formatWebFetchInput(input) {
219
- const url = MainHelper.readString(input, 'url') ?? '';
220
- const prompt = MainHelper.readString(input, 'prompt');
221
- const lines = [colors.text(url)];
222
- if (prompt !== undefined) {
223
- lines.push(colors.system(`prompt: ${prompt}`));
224
- }
225
- return lines;
226
- }
227
- static formatWebSearchInput(input) {
228
- const query = MainHelper.readString(input, 'query') ?? '';
229
- const flags = [];
230
- const allowed = input['allowed_domains'];
231
- if (Array.isArray(allowed) && allowed.length > 0) {
232
- flags.push(`allowed_domains=[${allowed.map((d) => String(d)).join(', ')}]`);
233
- }
234
- const blocked = input['blocked_domains'];
235
- if (Array.isArray(blocked) && blocked.length > 0) {
236
- flags.push(`blocked_domains=[${blocked.map((d) => String(d)).join(', ')}]`);
237
- }
238
- const head = colors.text(`"${query}"`);
239
- if (flags.length === 0)
240
- return [head];
241
- return [`${head} ${colors.system(`(${flags.join(', ')})`)}`];
242
- }
243
- static formatTaskInput(input) {
244
- const description = MainHelper.readString(input, 'description') ?? '';
245
- const subagentType = MainHelper.readString(input, 'subagent_type') ?? 'agent';
246
- const prompt = MainHelper.readString(input, 'prompt');
247
- const lines = [colors.text(`[${subagentType}] ${description}`)];
248
- if (prompt !== undefined) {
249
- const PROMPT_PREVIEW_LIMIT = 200;
250
- if (prompt.length <= PROMPT_PREVIEW_LIMIT) {
251
- lines.push(colors.system(`prompt: ${prompt}`));
252
- }
253
- else {
254
- const head = prompt.slice(0, PROMPT_PREVIEW_LIMIT);
255
- lines.push(colors.system(`prompt: ${head}… (${prompt.length} chars)`));
256
- }
257
- }
258
- return lines;
259
- }
260
- static formatFallbackInput(input) {
261
- const json = JSON.stringify(input, null, 2);
262
- return json.split('\n').map((line) => colors.json(line));
263
- }
264
- static readString(input, key) {
265
- const value = input[key];
266
- return typeof value === 'string' ? value : undefined;
267
- }
268
- static readNumber(input, key) {
269
- const value = input[key];
270
- return typeof value === 'number' ? value : undefined;
271
- }
272
- static readBoolean(input, key) {
273
- const value = input[key];
274
- return typeof value === 'boolean' ? value : undefined;
275
- }
276
- renderUser(event) {
277
- const content = event.message?.content;
278
- if (content === undefined)
279
- return;
280
- for (const block of content) {
281
- if (block.type === 'tool_result') {
282
- this.renderToolResult(block);
283
- continue;
284
- }
285
- console.log(colors.system(`\n[user block: ${block.type ?? 'unknown'}]`));
286
- this.printJSON(block);
287
- }
288
- }
289
- renderToolResult(block) {
290
- const toolName = block.tool_use_id !== undefined
291
- ? this.toolNamesById.get(block.tool_use_id) ?? block.tool_use_id.slice(0, 12)
292
- : 'unknown';
293
- const isError = block.is_error === true;
294
- const label = isError ? `← ${toolName} ERROR` : `← ${toolName} result`;
295
- console.log(colors.tool(`\n${label}`));
296
- const text = MainHelper.toolResultToText(block.content);
297
- const lines = text.split('\n');
298
- const colorFn = isError ? colors.error : colors.text;
299
- if (lines.length <= MAX_TOOL_RESULT_LINES) {
300
- console.log(colorFn(text));
301
- return;
302
- }
303
- const head = lines.slice(0, MAX_TOOL_RESULT_LINES).join('\n');
304
- const moreCount = lines.length - MAX_TOOL_RESULT_LINES;
305
- console.log(colorFn(head));
306
- console.log(colors.system(`… (truncated, ${moreCount} more lines)`));
307
- }
308
- static toolResultToText(content) {
309
- if (content === undefined)
310
- return '';
311
- if (typeof content === 'string')
312
- return content;
313
- return content.map((b) => b.text ?? '').join('');
314
- }
315
- renderRateLimit(event) {
316
- const status = event.rate_limit_info?.status ?? 'unknown';
317
- console.log(colors.system(`\n[rate_limit] ${status}`));
318
- }
319
- renderResult(event) {
320
- this.printHeader('RESULT');
321
- if (event.terminal_reason !== undefined)
322
- console.log(colors.system(`terminal_reason: ${event.terminal_reason}`));
323
- if (event.num_turns !== undefined)
324
- console.log(colors.system(`turns: ${event.num_turns}`));
325
- if (event.duration_ms !== undefined)
326
- console.log(colors.system(`duration: ${(event.duration_ms / 1000).toFixed(2)}s`));
327
- if (event.total_cost_usd !== undefined)
328
- console.log(colors.system(`cost: $${event.total_cost_usd.toFixed(4)}`));
329
- const usage = event.usage;
330
- if (usage !== undefined) {
331
- console.log(colors.system(`tokens: in=${usage.input_tokens ?? 0} out=${usage.output_tokens ?? 0} cache_read=${usage.cache_read_input_tokens ?? 0} cache_create=${usage.cache_creation_input_tokens ?? 0}`));
332
- }
333
- }
334
- ///////////////////////////////////////////////////////////////////////////////
335
- ///////////////////////////////////////////////////////////////////////////////
336
- // dispatcher
337
- ///////////////////////////////////////////////////////////////////////////////
338
- ///////////////////////////////////////////////////////////////////////////////
339
- handleEvent(claudeEvent) {
340
- try {
341
- const type = claudeEvent.type;
342
- if (type === 'stream_event')
343
- return;
344
- if (type === 'system')
345
- return this.renderSystem(claudeEvent);
346
- if (type === 'assistant')
347
- return this.renderAssistant(claudeEvent);
348
- if (type === 'user')
349
- return this.renderUser(claudeEvent);
350
- if (type === 'rate_limit_event')
351
- return this.renderRateLimit(claudeEvent);
352
- if (type === 'result')
353
- return this.renderResult(claudeEvent);
354
- this.printHeader(`${type ?? 'unknown'}`);
355
- this.printJSON(claudeEvent);
356
- }
357
- catch (err) {
358
- console.error(colors.error('Error processing event:'), err);
359
- this.printJSON(claudeEvent);
360
- }
361
- }
362
- }
363
- ///////////////////////////////////////////////////////////////////////////////
364
- ///////////////////////////////////////////////////////////////////////////////
365
- // function main
366
- ///////////////////////////////////////////////////////////////////////////////
367
- ///////////////////////////////////////////////////////////////////////////////
25
+ /**
26
+ * Entry point: parses options, then reads stream-json events line-by-line from
27
+ * stdin. Every event is fed to the {@link StatsCollector}; unless a stats-only
28
+ * mode is active it is also rendered by the {@link LogRenderer}. On stdin close
29
+ * it prints either the stats summary or the `[stream ended]` marker.
30
+ */
368
31
  async function main() {
369
32
  const packageJsonPath = Path.join(__dirname, '..', 'package.json');
370
33
  const packageJson = JSON.parse(await Fs.promises.readFile(packageJsonPath, 'utf-8'));
@@ -375,12 +38,18 @@ async function main() {
375
38
  .description('Pretty-prints Claude Code consolidated stream-json events from stdin with colorized output.')
376
39
  .version(packageVersion)
377
40
  .option('--no-color', 'disable colored output')
41
+ .option('-s, --stats', 'output only the summary stats (latency, tokens, context, tools); suppresses the streamed log')
42
+ .option('--json', 'output stats as JSON (implies --stats)')
43
+ .option('--markdown', 'output stats as Markdown (implies --stats)')
378
44
  .parse(process.argv);
379
45
  const options = program.opts();
380
46
  if (options.color === false) {
381
47
  Chalk.level = 0;
382
48
  }
383
- const helper = new MainHelper();
49
+ const format = options.json === true ? 'json' : options.markdown === true ? 'markdown' : 'text';
50
+ const statsMode = options.stats === true || options.json === true || options.markdown === true;
51
+ const collector = new StatsCollector();
52
+ const logRenderer = new LogRenderer();
384
53
  const readline = Readline.createInterface({
385
54
  input: process.stdin,
386
55
  crlfDelay: Infinity,
@@ -388,25 +57,38 @@ async function main() {
388
57
  readline.on('line', (line) => {
389
58
  if (line.trim() === '')
390
59
  return;
60
+ let event;
391
61
  try {
392
- const parsed = JSON.parse(line);
393
- helper.handleEvent(parsed);
62
+ event = JSON.parse(line);
394
63
  }
395
64
  catch (err) {
396
65
  console.error(colors.error('Invalid JSON:'), line);
66
+ return;
67
+ }
68
+ try {
69
+ collector.track(event);
70
+ if (statsMode === false) {
71
+ logRenderer.render(event);
72
+ }
73
+ }
74
+ catch (err) {
75
+ console.error(colors.error('Error processing event:'), err);
76
+ if (statsMode === false) {
77
+ console.log(TerminalOutput.json(event));
78
+ }
397
79
  }
398
80
  });
399
81
  await new Promise((resolve) => {
400
82
  readline.on('close', () => {
401
- console.log(colors.system('\n[stream ended]'));
83
+ if (statsMode === true) {
84
+ console.log(StatsRenderer.render(collector.buildReport(), format));
85
+ }
86
+ else {
87
+ console.log(colors.system('\n[stream ended]'));
88
+ }
402
89
  resolve();
403
90
  });
404
91
  });
405
92
  }
406
- ///////////////////////////////////////////////////////////////////////////////
407
- ///////////////////////////////////////////////////////////////////////////////
408
- //
409
- ///////////////////////////////////////////////////////////////////////////////
410
- ///////////////////////////////////////////////////////////////////////////////
411
93
  await main();
412
94
  //# sourceMappingURL=cli.js.map
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Chalk color palette shared by every renderer. Colors are disabled globally by
3
+ * setting `Chalk.level = 0` (via `--no-color`), which these bound functions
4
+ * honor at call time.
5
+ */
6
+ export declare const colors: {
7
+ text: import("chalk").ChalkInstance;
8
+ tool: import("chalk").ChalkInstance;
9
+ system: import("chalk").ChalkInstance;
10
+ error: import("chalk").ChalkInstance;
11
+ json: import("chalk").ChalkInstance;
12
+ header: import("chalk").ChalkInstance;
13
+ thinking: import("chalk").ChalkInstance;
14
+ };
15
+ //# sourceMappingURL=colors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"colors.d.ts","sourceRoot":"","sources":["../../src/libs/colors.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,eAAO,MAAM,MAAM;;;;;;;;CAQlB,CAAC"}
@@ -0,0 +1,16 @@
1
+ import Chalk from 'chalk';
2
+ /**
3
+ * Chalk color palette shared by every renderer. Colors are disabled globally by
4
+ * setting `Chalk.level = 0` (via `--no-color`), which these bound functions
5
+ * honor at call time.
6
+ */
7
+ export const colors = {
8
+ text: Chalk.white,
9
+ tool: Chalk.cyan,
10
+ system: Chalk.gray,
11
+ error: Chalk.red,
12
+ json: Chalk.dim,
13
+ header: Chalk.yellow.bold,
14
+ thinking: Chalk.gray.italic,
15
+ };
16
+ //# sourceMappingURL=colors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"colors.js","sourceRoot":"","sources":["../../src/libs/colors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B;;;;GAIG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG;IACrB,IAAI,EAAE,KAAK,CAAC,KAAK;IACjB,IAAI,EAAE,KAAK,CAAC,IAAI;IAChB,MAAM,EAAE,KAAK,CAAC,IAAI;IAClB,KAAK,EAAE,KAAK,CAAC,GAAG;IAChB,IAAI,EAAE,KAAK,CAAC,GAAG;IACf,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;IACzB,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM;CAC3B,CAAC"}
@@ -0,0 +1,8 @@
1
+ /** Builds the colorized string primitives shared by the log and stats renderers. */
2
+ export declare class TerminalOutput {
3
+ /** Returns a colorized `=== LABEL ===` section header, preceded by a blank line. */
4
+ static header(label: string): string;
5
+ /** Returns a dimmed, pretty-printed (2-space) JSON rendering of `obj`. */
6
+ static json(obj: unknown): string;
7
+ }
8
+ //# sourceMappingURL=terminal_output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal_output.d.ts","sourceRoot":"","sources":["../../src/libs/terminal_output.ts"],"names":[],"mappings":"AAEA,oFAAoF;AACpF,qBAAa,cAAc;IAC1B,oFAAoF;IACpF,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAIpC,0EAA0E;IAC1E,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM;CAGjC"}