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.
- package/README.md +38 -10
- package/demo_vhs/claude_stream_viewer.gif +0 -0
- package/dist/cli.js +46 -364
- package/dist/cli.js.map +1 -1
- package/dist/libs/colors.d.ts +15 -0
- package/dist/libs/colors.d.ts.map +1 -0
- package/dist/libs/colors.js +16 -0
- package/dist/libs/colors.js.map +1 -0
- package/dist/libs/terminal_output.d.ts +8 -0
- package/dist/libs/terminal_output.d.ts.map +1 -0
- package/dist/libs/terminal_output.js +13 -0
- package/dist/libs/terminal_output.js.map +1 -0
- package/dist/log_viewer/log_renderer.d.ts +28 -0
- package/dist/log_viewer/log_renderer.d.ts.map +1 -0
- package/dist/log_viewer/log_renderer.js +163 -0
- package/dist/log_viewer/log_renderer.js.map +1 -0
- package/dist/log_viewer/tool_input_formatter.d.ts +31 -0
- package/dist/log_viewer/tool_input_formatter.d.ts.map +1 -0
- package/dist/log_viewer/tool_input_formatter.js +190 -0
- package/dist/log_viewer/tool_input_formatter.js.map +1 -0
- package/dist/stats/stats_collector.d.ts +28 -0
- package/dist/stats/stats_collector.d.ts.map +1 -0
- package/dist/stats/stats_collector.js +165 -0
- package/dist/stats/stats_collector.js.map +1 -0
- package/dist/stats/stats_renderer.d.ts +13 -0
- package/dist/stats/stats_renderer.d.ts.map +1 -0
- package/dist/stats/stats_renderer.js +193 -0
- package/dist/stats/stats_renderer.js.map +1 -0
- package/dist/types/claude_event.d.ts +75 -0
- package/dist/types/claude_event.d.ts.map +1 -0
- package/dist/types/claude_event.js +2 -0
- package/dist/types/claude_event.js.map +1 -0
- package/dist/types/stats_report.d.ts +68 -0
- package/dist/types/stats_report.d.ts.map +1 -0
- package/dist/types/stats_report.js +2 -0
- package/dist/types/stats_report.js.map +1 -0
- package/package.json +4 -5
- package/src/cli.ts +53 -409
- package/src/libs/colors.ts +16 -0
- package/src/libs/terminal_output.ts +14 -0
- package/src/log_viewer/log_renderer.ts +160 -0
- package/src/log_viewer/tool_input_formatter.ts +183 -0
- package/src/stats/stats_collector.ts +175 -0
- package/src/stats/stats_renderer.ts +185 -0
- package/src/types/claude_event.ts +74 -0
- package/src/types/stats_report.ts +66 -0
- package/dist/claude-stream-viewer.d.ts +0 -3
- package/dist/claude-stream-viewer.d.ts.map +0 -1
- package/dist/claude-stream-viewer.js +0 -100
- package/dist/claude-stream-viewer.js.map +0 -1
- package/dist/claude_stream_viewer copy.d.ts +0 -3
- package/dist/claude_stream_viewer copy.d.ts.map +0 -1
- package/dist/claude_stream_viewer copy.js +0 -228
- package/dist/claude_stream_viewer copy.js.map +0 -1
- package/dist/claude_stream_viewer.d.ts +0 -3
- package/dist/claude_stream_viewer.d.ts.map +0 -1
- package/dist/claude_stream_viewer.js +0 -155
- package/dist/claude_stream_viewer.js.map +0 -1
- 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
|
-

|
|
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
|
|
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
|
|
55
|
-
|
|
56
|
-
|
|
|
57
|
-
| `--
|
|
58
|
-
| `--
|
|
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/
|
|
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
|
|
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
|
|
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
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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"}
|