vizier 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/settings.local.json +9 -0
- package/AGENTS.md +14 -0
- package/Makefile +15 -0
- package/README.md +94 -0
- package/assets/vizier.png +0 -0
- package/bun.lock +120 -0
- package/demo.sh +26 -0
- package/package.json +21 -0
- package/src/app.tsx +413 -0
- package/src/components/CommandInput.tsx +26 -0
- package/src/components/DetailsPanel.tsx +200 -0
- package/src/components/SessionList.tsx +39 -0
- package/src/components/StatusBar.tsx +38 -0
- package/src/components/Timeline.tsx +522 -0
- package/src/components/ToolPrompt.tsx +22 -0
- package/src/core/graph.ts +153 -0
- package/src/core/parser.ts +126 -0
- package/src/core/types.ts +76 -0
- package/src/core/watcher.ts +111 -0
- package/src/core/zoom.ts +126 -0
- package/src/index.tsx +70 -0
- package/src/sdk/claude.ts +36 -0
- package/tsconfig.json +15 -0
package/AGENTS.md
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Agents
|
|
2
|
+
|
|
3
|
+
Vizier visualizes Claude Code agent and subagent activity by merging agent JSONL files into the main session stream.
|
|
4
|
+
|
|
5
|
+
## Where Agent Data Lives
|
|
6
|
+
|
|
7
|
+
- Main session file: `~/.claude/projects/<project>/<sessionId>.jsonl`
|
|
8
|
+
- Agent files: `~/.claude/projects/<project>/<sessionId>/subagents/*.jsonl`
|
|
9
|
+
|
|
10
|
+
## How We Merge It
|
|
11
|
+
|
|
12
|
+
- We read the main session file and all agent files, then sort events by timestamp.
|
|
13
|
+
- Agent events carry an `agentId`, and progress entries include `data.type = "agent_progress"` with a `parentToolUseID`.
|
|
14
|
+
- The graph builder links the first agent node back to its parent tool call and assigns a branch level so parallel agents render on separate lanes.
|
package/Makefile
ADDED
package/README.md
ADDED
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# Vizier
|
|
2
|
+
|
|
3
|
+
**Timeline visualizer for Claude Code sessions.**
|
|
4
|
+
|
|
5
|
+
Watch your sessions unfold on a horizontal timeline — zoom between high-level conversation flow and full execution detail. Built with TypeScript, Bun, and React Ink.
|
|
6
|
+
|
|
7
|
+

|
|
8
|
+
|
|
9
|
+
## Requirements
|
|
10
|
+
|
|
11
|
+
- Bun (to run the CLI)
|
|
12
|
+
- Claude Code sessions available under `~/.claude/projects`
|
|
13
|
+
|
|
14
|
+
## Quick Start
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
bun install
|
|
18
|
+
make dev
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Or point at a specific project/session:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
bun run src/index.tsx -- --project /path/to/project
|
|
25
|
+
bun run src/index.tsx -- --session <session-id> --project /path/to/project
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Zoom Levels
|
|
29
|
+
|
|
30
|
+
Navigate four levels of abstraction with `z` (zoom in) and `x` (zoom out):
|
|
31
|
+
|
|
32
|
+
| Level | What you see |
|
|
33
|
+
|---|---|
|
|
34
|
+
| **SESSIONS** | Bird's-eye view — first and last nodes only |
|
|
35
|
+
| **CONVERSATIONS** | User ↔ Assistant turns |
|
|
36
|
+
| **DETAILS** | Full execution tree — tools, agents, everything |
|
|
37
|
+
| **FOCUS** | Deep dive into a single selected node |
|
|
38
|
+
|
|
39
|
+
## Controls
|
|
40
|
+
|
|
41
|
+
### Navigation
|
|
42
|
+
|
|
43
|
+
| Key | Action |
|
|
44
|
+
|---|---|
|
|
45
|
+
| `h` / `l` | Chronological prev/next (across all levels) |
|
|
46
|
+
| `j` / `k` | Move down/up one branch level |
|
|
47
|
+
| `Shift+←` / `Shift+→` | Navigate within same level |
|
|
48
|
+
| `g` / `G` | Jump to start/end of current level |
|
|
49
|
+
|
|
50
|
+
### Views & Modes
|
|
51
|
+
|
|
52
|
+
| Key | Action |
|
|
53
|
+
|---|---|
|
|
54
|
+
| `z` / `x` | Zoom in / out |
|
|
55
|
+
| `w` | Toggle preview mode (content snippets in timeline) |
|
|
56
|
+
| `f` | Toggle follow mode (auto-track latest node) |
|
|
57
|
+
| `t` | Toggle timeline panel |
|
|
58
|
+
| `d` | Toggle details panel |
|
|
59
|
+
| `s` | Toggle session list |
|
|
60
|
+
| `J` / `K` | Scroll details panel |
|
|
61
|
+
| `q` | Quit |
|
|
62
|
+
|
|
63
|
+
## Symbols
|
|
64
|
+
|
|
65
|
+
| Symbol | Meaning |
|
|
66
|
+
|---|---|
|
|
67
|
+
| `●` | User message |
|
|
68
|
+
| `◉` | Assistant message |
|
|
69
|
+
| `⬢` | Tool call (Read, Write, Grep, etc.) |
|
|
70
|
+
| `✓` / `✗` | Tool success / error |
|
|
71
|
+
| `⟐` | Agent start/end |
|
|
72
|
+
| `○` | Progress |
|
|
73
|
+
|
|
74
|
+
## Features
|
|
75
|
+
|
|
76
|
+
- **Real-time updates** — watches session files as Claude Code runs
|
|
77
|
+
- **Session switching** — auto-discovers sessions, press `s` to browse
|
|
78
|
+
- **Follow mode** — `f` to auto-track the latest node in a live session
|
|
79
|
+
- **Preview mode** — `w` to see content snippets inline on the timeline
|
|
80
|
+
- **Token stats** — input/output/cache token counts in the status bar
|
|
81
|
+
- **Sticky context** — shows the most recent parent node before the viewport
|
|
82
|
+
- **Agent discovery** — automatically finds and visualizes subagent branches (see `AGENTS.md`)
|
|
83
|
+
|
|
84
|
+
## Install
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
make install
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
This runs `bun link` to make the `vizier` command available globally.
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
If something looks off in your timeline, double‑check the project path or session ID.
|
|
Binary file
|
package/bun.lock
ADDED
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
{
|
|
2
|
+
"lockfileVersion": 1,
|
|
3
|
+
"configVersion": 1,
|
|
4
|
+
"workspaces": {
|
|
5
|
+
"": {
|
|
6
|
+
"name": "vizier",
|
|
7
|
+
"dependencies": {
|
|
8
|
+
"chokidar": "^4.0.3",
|
|
9
|
+
"ink": "^5.2.1",
|
|
10
|
+
"ink-text-input": "^6.0.0",
|
|
11
|
+
"react": "^18.3.1",
|
|
12
|
+
},
|
|
13
|
+
"devDependencies": {
|
|
14
|
+
"@types/react": "^18.3.0",
|
|
15
|
+
"bun-types": "latest",
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
"packages": {
|
|
20
|
+
"@alcalzone/ansi-tokenize": ["@alcalzone/ansi-tokenize@0.1.3", "", { "dependencies": { "ansi-styles": "^6.2.1", "is-fullwidth-code-point": "^4.0.0" } }, "sha512-3yWxPTq3UQ/FY9p1ErPxIyfT64elWaMvM9lIHnaqpyft63tkxodF5aUElYHrdisWve5cETkh1+KBw1yJuW0aRw=="],
|
|
21
|
+
|
|
22
|
+
"@types/node": ["@types/node@25.2.1", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-CPrnr8voK8vC6eEtyRzvMpgp3VyVRhgclonE7qYi6P9sXwYb59ucfrnmFBTaP0yUi8Gk4yZg/LlTJULGxvTNsg=="],
|
|
23
|
+
|
|
24
|
+
"@types/prop-types": ["@types/prop-types@15.7.15", "", {}, "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw=="],
|
|
25
|
+
|
|
26
|
+
"@types/react": ["@types/react@18.3.28", "", { "dependencies": { "@types/prop-types": "*", "csstype": "^3.2.2" } }, "sha512-z9VXpC7MWrhfWipitjNdgCauoMLRdIILQsAEV+ZesIzBq/oUlxk0m3ApZuMFCXdnS4U7KrI+l3WRUEGQ8K1QKw=="],
|
|
27
|
+
|
|
28
|
+
"ansi-escapes": ["ansi-escapes@7.3.0", "", { "dependencies": { "environment": "^1.0.0" } }, "sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg=="],
|
|
29
|
+
|
|
30
|
+
"ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="],
|
|
31
|
+
|
|
32
|
+
"ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="],
|
|
33
|
+
|
|
34
|
+
"auto-bind": ["auto-bind@5.0.1", "", {}, "sha512-ooviqdwwgfIfNmDwo94wlshcdzfO64XV0Cg6oDsDYBJfITDz1EngD2z7DkbvCWn+XIMsIqW27sEVF6qcpJrRcg=="],
|
|
35
|
+
|
|
36
|
+
"bun-types": ["bun-types@1.3.8", "", { "dependencies": { "@types/node": "*" } }, "sha512-fL99nxdOWvV4LqjmC+8Q9kW3M4QTtTR1eePs94v5ctGqU8OeceWrSUaRw3JYb7tU3FkMIAjkueehrHPPPGKi5Q=="],
|
|
37
|
+
|
|
38
|
+
"chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="],
|
|
39
|
+
|
|
40
|
+
"chokidar": ["chokidar@4.0.3", "", { "dependencies": { "readdirp": "^4.0.1" } }, "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA=="],
|
|
41
|
+
|
|
42
|
+
"cli-boxes": ["cli-boxes@3.0.0", "", {}, "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g=="],
|
|
43
|
+
|
|
44
|
+
"cli-cursor": ["cli-cursor@4.0.0", "", { "dependencies": { "restore-cursor": "^4.0.0" } }, "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg=="],
|
|
45
|
+
|
|
46
|
+
"cli-truncate": ["cli-truncate@4.0.0", "", { "dependencies": { "slice-ansi": "^5.0.0", "string-width": "^7.0.0" } }, "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA=="],
|
|
47
|
+
|
|
48
|
+
"code-excerpt": ["code-excerpt@4.0.0", "", { "dependencies": { "convert-to-spaces": "^2.0.1" } }, "sha512-xxodCmBen3iy2i0WtAK8FlFNrRzjUqjRsMfho58xT/wvZU1YTM3fCnRjcy1gJPMepaRlgm/0e6w8SpWHpn3/cA=="],
|
|
49
|
+
|
|
50
|
+
"convert-to-spaces": ["convert-to-spaces@2.0.1", "", {}, "sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ=="],
|
|
51
|
+
|
|
52
|
+
"csstype": ["csstype@3.2.3", "", {}, "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ=="],
|
|
53
|
+
|
|
54
|
+
"emoji-regex": ["emoji-regex@10.6.0", "", {}, "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A=="],
|
|
55
|
+
|
|
56
|
+
"environment": ["environment@1.1.0", "", {}, "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q=="],
|
|
57
|
+
|
|
58
|
+
"es-toolkit": ["es-toolkit@1.44.0", "", {}, "sha512-6penXeZalaV88MM3cGkFZZfOoLGWshWWfdy0tWw/RlVVyhvMaWSBTOvXNeiW3e5FwdS5ePW0LGEu17zT139ktg=="],
|
|
59
|
+
|
|
60
|
+
"escape-string-regexp": ["escape-string-regexp@2.0.0", "", {}, "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w=="],
|
|
61
|
+
|
|
62
|
+
"get-east-asian-width": ["get-east-asian-width@1.4.0", "", {}, "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q=="],
|
|
63
|
+
|
|
64
|
+
"indent-string": ["indent-string@5.0.0", "", {}, "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg=="],
|
|
65
|
+
|
|
66
|
+
"ink": ["ink@5.2.1", "", { "dependencies": { "@alcalzone/ansi-tokenize": "^0.1.3", "ansi-escapes": "^7.0.0", "ansi-styles": "^6.2.1", "auto-bind": "^5.0.1", "chalk": "^5.3.0", "cli-boxes": "^3.0.0", "cli-cursor": "^4.0.0", "cli-truncate": "^4.0.0", "code-excerpt": "^4.0.0", "es-toolkit": "^1.22.0", "indent-string": "^5.0.0", "is-in-ci": "^1.0.0", "patch-console": "^2.0.0", "react-reconciler": "^0.29.0", "scheduler": "^0.23.0", "signal-exit": "^3.0.7", "slice-ansi": "^7.1.0", "stack-utils": "^2.0.6", "string-width": "^7.2.0", "type-fest": "^4.27.0", "widest-line": "^5.0.0", "wrap-ansi": "^9.0.0", "ws": "^8.18.0", "yoga-layout": "~3.2.1" }, "peerDependencies": { "@types/react": ">=18.0.0", "react": ">=18.0.0", "react-devtools-core": "^4.19.1" }, "optionalPeers": ["@types/react", "react-devtools-core"] }, "sha512-BqcUyWrG9zq5HIwW6JcfFHsIYebJkWWb4fczNah1goUO0vv5vneIlfwuS85twyJ5hYR/y18FlAYUxrO9ChIWVg=="],
|
|
67
|
+
|
|
68
|
+
"ink-text-input": ["ink-text-input@6.0.0", "", { "dependencies": { "chalk": "^5.3.0", "type-fest": "^4.18.2" }, "peerDependencies": { "ink": ">=5", "react": ">=18" } }, "sha512-Fw64n7Yha5deb1rHY137zHTAbSTNelUKuB5Kkk2HACXEtwIHBCf9OH2tP/LQ9fRYTl1F0dZgbW0zPnZk6FA9Lw=="],
|
|
69
|
+
|
|
70
|
+
"is-fullwidth-code-point": ["is-fullwidth-code-point@4.0.0", "", {}, "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ=="],
|
|
71
|
+
|
|
72
|
+
"is-in-ci": ["is-in-ci@1.0.0", "", { "bin": { "is-in-ci": "cli.js" } }, "sha512-eUuAjybVTHMYWm/U+vBO1sY/JOCgoPCXRxzdju0K+K0BiGW0SChEL1MLC0PoCIR1OlPo5YAp8HuQoUlsWEICwg=="],
|
|
73
|
+
|
|
74
|
+
"js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="],
|
|
75
|
+
|
|
76
|
+
"loose-envify": ["loose-envify@1.4.0", "", { "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, "bin": { "loose-envify": "cli.js" } }, "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q=="],
|
|
77
|
+
|
|
78
|
+
"mimic-fn": ["mimic-fn@2.1.0", "", {}, "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="],
|
|
79
|
+
|
|
80
|
+
"onetime": ["onetime@5.1.2", "", { "dependencies": { "mimic-fn": "^2.1.0" } }, "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg=="],
|
|
81
|
+
|
|
82
|
+
"patch-console": ["patch-console@2.0.0", "", {}, "sha512-0YNdUceMdaQwoKce1gatDScmMo5pu/tfABfnzEqeG0gtTmd7mh/WcwgUjtAeOU7N8nFFlbQBnFK2gXW5fGvmMA=="],
|
|
83
|
+
|
|
84
|
+
"react": ["react@18.3.1", "", { "dependencies": { "loose-envify": "^1.1.0" } }, "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ=="],
|
|
85
|
+
|
|
86
|
+
"react-reconciler": ["react-reconciler@0.29.2", "", { "dependencies": { "loose-envify": "^1.1.0", "scheduler": "^0.23.2" }, "peerDependencies": { "react": "^18.3.1" } }, "sha512-zZQqIiYgDCTP/f1N/mAR10nJGrPD2ZR+jDSEsKWJHYC7Cm2wodlwbR3upZRdC3cjIjSlTLNVyO7Iu0Yy7t2AYg=="],
|
|
87
|
+
|
|
88
|
+
"readdirp": ["readdirp@4.1.2", "", {}, "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg=="],
|
|
89
|
+
|
|
90
|
+
"restore-cursor": ["restore-cursor@4.0.0", "", { "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" } }, "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg=="],
|
|
91
|
+
|
|
92
|
+
"scheduler": ["scheduler@0.23.2", "", { "dependencies": { "loose-envify": "^1.1.0" } }, "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ=="],
|
|
93
|
+
|
|
94
|
+
"signal-exit": ["signal-exit@3.0.7", "", {}, "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="],
|
|
95
|
+
|
|
96
|
+
"slice-ansi": ["slice-ansi@7.1.2", "", { "dependencies": { "ansi-styles": "^6.2.1", "is-fullwidth-code-point": "^5.0.0" } }, "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w=="],
|
|
97
|
+
|
|
98
|
+
"stack-utils": ["stack-utils@2.0.6", "", { "dependencies": { "escape-string-regexp": "^2.0.0" } }, "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ=="],
|
|
99
|
+
|
|
100
|
+
"string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="],
|
|
101
|
+
|
|
102
|
+
"strip-ansi": ["strip-ansi@7.1.2", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA=="],
|
|
103
|
+
|
|
104
|
+
"type-fest": ["type-fest@4.41.0", "", {}, "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA=="],
|
|
105
|
+
|
|
106
|
+
"undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="],
|
|
107
|
+
|
|
108
|
+
"widest-line": ["widest-line@5.0.0", "", { "dependencies": { "string-width": "^7.0.0" } }, "sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA=="],
|
|
109
|
+
|
|
110
|
+
"wrap-ansi": ["wrap-ansi@9.0.2", "", { "dependencies": { "ansi-styles": "^6.2.1", "string-width": "^7.0.0", "strip-ansi": "^7.1.0" } }, "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww=="],
|
|
111
|
+
|
|
112
|
+
"ws": ["ws@8.19.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg=="],
|
|
113
|
+
|
|
114
|
+
"yoga-layout": ["yoga-layout@3.2.1", "", {}, "sha512-0LPOt3AxKqMdFBZA3HBAt/t/8vIKq7VaQYbuA8WxCgung+p9TVyKRYdpvCb80HcdTN2NkbIKbhNwKUfm3tQywQ=="],
|
|
115
|
+
|
|
116
|
+
"cli-truncate/slice-ansi": ["slice-ansi@5.0.0", "", { "dependencies": { "ansi-styles": "^6.0.0", "is-fullwidth-code-point": "^4.0.0" } }, "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ=="],
|
|
117
|
+
|
|
118
|
+
"slice-ansi/is-fullwidth-code-point": ["is-fullwidth-code-point@5.1.0", "", { "dependencies": { "get-east-asian-width": "^1.3.1" } }, "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ=="],
|
|
119
|
+
}
|
|
120
|
+
}
|
package/demo.sh
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
|
|
3
|
+
echo "╔════════════════════════════════════════════════════════════╗"
|
|
4
|
+
echo "║ VIZIER - Claude Code Visualizer ║"
|
|
5
|
+
echo "╚════════════════════════════════════════════════════════════╝"
|
|
6
|
+
echo ""
|
|
7
|
+
echo "Horizontal Timeline Visualization:"
|
|
8
|
+
echo ""
|
|
9
|
+
echo "L0 ●──◉──⬢──✓──◉──⬢──✓──●──◉──"
|
|
10
|
+
echo " │ │ └──────────┐"
|
|
11
|
+
echo "L1 │ └──⟐──⬢──⬢──✓──⟐ │"
|
|
12
|
+
echo " │ │ │"
|
|
13
|
+
echo "L2 │ └──○──✓ │"
|
|
14
|
+
echo " │ │"
|
|
15
|
+
echo " User starts conversation Agent explores"
|
|
16
|
+
echo ""
|
|
17
|
+
echo "Legend:"
|
|
18
|
+
echo " ● User ◉ Assistant ⬢ Tool ✓ Success"
|
|
19
|
+
echo " ✗ Error ⟐ Agent ○ Progress"
|
|
20
|
+
echo ""
|
|
21
|
+
echo "Controls:"
|
|
22
|
+
echo " h/l or ←/→ Scroll timeline"
|
|
23
|
+
echo " j/k or ↑/↓ Select nodes"
|
|
24
|
+
echo " q Quit"
|
|
25
|
+
echo ""
|
|
26
|
+
echo "Run: make dev"
|
package/package.json
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "vizier",
|
|
3
|
+
"version": "2.0.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"bin": {
|
|
6
|
+
"vizier": "./src/index.tsx"
|
|
7
|
+
},
|
|
8
|
+
"scripts": {
|
|
9
|
+
"dev": "bun run src/index.tsx"
|
|
10
|
+
},
|
|
11
|
+
"dependencies": {
|
|
12
|
+
"ink": "^5.2.1",
|
|
13
|
+
"ink-text-input": "^6.0.0",
|
|
14
|
+
"react": "^18.3.1",
|
|
15
|
+
"chokidar": "^4.0.3"
|
|
16
|
+
},
|
|
17
|
+
"devDependencies": {
|
|
18
|
+
"@types/react": "^18.3.0",
|
|
19
|
+
"bun-types": "latest"
|
|
20
|
+
}
|
|
21
|
+
}
|