cc-viewer 1.6.262 → 1.6.264

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 (94) hide show
  1. package/README.md +90 -78
  2. package/cli.js +5 -0
  3. package/dist/assets/App-CKzgXXd9.js +1 -0
  4. package/dist/assets/{MdxEditorPanel-j9aQWwCJ.js → MdxEditorPanel-BUWD79wR.js} +1 -1
  5. package/dist/assets/Mobile-Dwh-S57S.js +1 -0
  6. package/dist/assets/{_baseUniq-DiLy7vi3.js → _baseUniq-Dgkw4IXM.js} +1 -1
  7. package/dist/assets/{arc-CAB2oIHx.js → arc-AiHQLijx.js} +1 -1
  8. package/dist/assets/{architectureDiagram-Q4EWVU46-Cijl_JpW.js → architectureDiagram-Q4EWVU46-CPRvAIHK.js} +1 -1
  9. package/dist/assets/{blockDiagram-DXYQGD6D-Bk4yWCPQ.js → blockDiagram-DXYQGD6D-CK2cwrfX.js} +1 -1
  10. package/dist/assets/{c4Diagram-AHTNJAMY-Vz4JKuzi.js → c4Diagram-AHTNJAMY-BP-UBbgv.js} +1 -1
  11. package/dist/assets/{channel-BnYKz_zI.js → channel-Ny3Nm_-t.js} +1 -1
  12. package/dist/assets/{chunk-4BX2VUAB-DM3ZjqKX.js → chunk-4BX2VUAB-DdsULqPZ.js} +1 -1
  13. package/dist/assets/{chunk-4TB4RGXK-BTiJOoNa.js → chunk-4TB4RGXK-BDSjQHh0.js} +1 -1
  14. package/dist/assets/{chunk-55IACEB6-B4fMQcTE.js → chunk-55IACEB6-DrKr3wBa.js} +1 -1
  15. package/dist/assets/{chunk-EDXVE4YY-B_WylnyS.js → chunk-EDXVE4YY-o_0SUbAB.js} +1 -1
  16. package/dist/assets/{chunk-FMBD7UC4-Cx2lqZi9.js → chunk-FMBD7UC4-Ca_AgqWi.js} +1 -1
  17. package/dist/assets/{chunk-OYMX7WX6-CPZm7o6V.js → chunk-OYMX7WX6-CyWWbq5o.js} +1 -1
  18. package/dist/assets/{chunk-QZHKN3VN-DuYVzv7E.js → chunk-QZHKN3VN-5rXHErSL.js} +1 -1
  19. package/dist/assets/{chunk-YZCP3GAM-Bk3OysLK.js → chunk-YZCP3GAM-DznXBadU.js} +1 -1
  20. package/dist/assets/classDiagram-6PBFFD2Q-CLYcbnwx.js +1 -0
  21. package/dist/assets/classDiagram-v2-HSJHXN6E-CLYcbnwx.js +1 -0
  22. package/dist/assets/clone-5GFhU8Pv.js +1 -0
  23. package/dist/assets/{cose-bilkent-S5V4N54A-CQuaqKHt.js → cose-bilkent-S5V4N54A-BhGyix0v.js} +1 -1
  24. package/dist/assets/{dagre-KV5264BT-BFdoRcuo.js → dagre-KV5264BT-CzzHxIvc.js} +1 -1
  25. package/dist/assets/{diagram-5BDNPKRD-ByFdSFIu.js → diagram-5BDNPKRD-tu3BXl0c.js} +1 -1
  26. package/dist/assets/{diagram-G4DWMVQ6-C1TcKWp0.js → diagram-G4DWMVQ6-C6WkK7sj.js} +1 -1
  27. package/dist/assets/{diagram-MMDJMWI5-B5N1Sn5F.js → diagram-MMDJMWI5-DBeD_WW-.js} +1 -1
  28. package/dist/assets/{diagram-TYMM5635-B-payI0e.js → diagram-TYMM5635-BXUyHHJ4.js} +1 -1
  29. package/dist/assets/{erDiagram-SMLLAGMA-zziefklH.js → erDiagram-SMLLAGMA-Bye5tnW2.js} +1 -1
  30. package/dist/assets/{flowDiagram-DWJPFMVM-BOSomu1b.js → flowDiagram-DWJPFMVM-C3pYOs38.js} +1 -1
  31. package/dist/assets/{ganttDiagram-T4ZO3ILL-DILUsv0T.js → ganttDiagram-T4ZO3ILL-DxXkI_FW.js} +1 -1
  32. package/dist/assets/{gitGraphDiagram-UUTBAWPF-BKp2DE69.js → gitGraphDiagram-UUTBAWPF-nsxsXsGX.js} +1 -1
  33. package/dist/assets/{graph-NObGxitU.js → graph-Da-Z9hB7.js} +1 -1
  34. package/dist/assets/{index-Bq9Sic2n.js → index-4gmR7Eun.js} +1 -1
  35. package/dist/assets/{index-BI-0Lyyt.js → index-Brh2V8V0.js} +1 -1
  36. package/dist/assets/{index-0aPBVZuP.js → index-C0PhJcXG.js} +1 -1
  37. package/dist/assets/{index-BbXZgnby.js → index-C8w5Sxw3.js} +1 -1
  38. package/dist/assets/{index-VqFARC4A.js → index-CA8JGh5J.js} +1 -1
  39. package/dist/assets/{index-PsZiLKrC.js → index-CsuhosSl.js} +1 -1
  40. package/dist/assets/{index-C88BDuL0.js → index-D7XF7UJ8.js} +1 -1
  41. package/dist/assets/{index-Dzkxj8m_.css → index-_4BCXKKF.css} +1 -1
  42. package/dist/assets/{index-DX4SlYho.js → index-tHUiY0PG.js} +2 -2
  43. package/dist/assets/{infoDiagram-42DDH7IO-D409o-BL.js → infoDiagram-42DDH7IO-Ca9j90t5.js} +1 -1
  44. package/dist/assets/{ishikawaDiagram-UXIWVN3A-CMVPOGr3.js → ishikawaDiagram-UXIWVN3A-DhjV0XPD.js} +1 -1
  45. package/dist/assets/{journeyDiagram-VCZTEJTY-Bl_5WlaZ.js → journeyDiagram-VCZTEJTY-CRSHLZPV.js} +1 -1
  46. package/dist/assets/{jszip.min-C2654z9i.js → jszip.min-CcCCdMNW.js} +1 -1
  47. package/dist/assets/{kanban-definition-6JOO6SKY-BfCyUP29.js → kanban-definition-6JOO6SKY-Bg0CUwgc.js} +1 -1
  48. package/dist/assets/{layout-CgAMa0xE.js → layout-CWNu13XT.js} +1 -1
  49. package/dist/assets/{linear-J1N1npGr.js → linear-Dcmw1639.js} +1 -1
  50. package/dist/assets/{mermaid.core-YnqOkuoS.js → mermaid.core-1heNIJ5f.js} +2 -2
  51. package/dist/assets/{min-CowkZam8.js → min-CC9CkAxn.js} +1 -1
  52. package/dist/assets/{mindmap-definition-QFDTVHPH-D7yMfot2.js → mindmap-definition-QFDTVHPH-Gr0ex_Ny.js} +1 -1
  53. package/dist/assets/{pieDiagram-DEJITSTG-DKUHBCwB.js → pieDiagram-DEJITSTG-D7P3sUJY.js} +1 -1
  54. package/dist/assets/{quadrantDiagram-34T5L4WZ-DhRqBNfT.js → quadrantDiagram-34T5L4WZ-Bov3lcpV.js} +1 -1
  55. package/dist/assets/{requirementDiagram-MS252O5E-DVE3wKT7.js → requirementDiagram-MS252O5E-BcLptaOU.js} +1 -1
  56. package/dist/assets/{sankeyDiagram-XADWPNL6-Rn_9b5V_.js → sankeyDiagram-XADWPNL6-B2qAUsON.js} +1 -1
  57. package/dist/assets/{seqResourceLoaders-DSKrKxVy.css → seqResourceLoaders-BsgJ9V64.css} +2 -2
  58. package/dist/assets/seqResourceLoaders-LrrYgtsO.js +2 -0
  59. package/dist/assets/{sequenceDiagram-FGHM5R23-CemLRaXC.js → sequenceDiagram-FGHM5R23-Do62Uz-a.js} +1 -1
  60. package/dist/assets/{stateDiagram-FHFEXIEX-DNT1gAty.js → stateDiagram-FHFEXIEX-Wu8aqa8C.js} +1 -1
  61. package/dist/assets/{stateDiagram-v2-QKLJ7IA2-DPlMhu-M.js → stateDiagram-v2-QKLJ7IA2-BfYq7Jgo.js} +1 -1
  62. package/dist/assets/{timeline-definition-GMOUNBTQ-B-F8vgZN.js → timeline-definition-GMOUNBTQ-DYfz5xD6.js} +1 -1
  63. package/dist/assets/{vendor-antd-Dq3DHFa-.js → vendor-antd-BG1SvzuN.js} +2 -2
  64. package/dist/assets/{vendor-codemirror-DjMkT0sn.js → vendor-codemirror-8NDhydlF.js} +1 -1
  65. package/dist/assets/{vendor-mdxeditor-CrZ9SWce.js → vendor-mdxeditor-BB4hhpxM.js} +2 -2
  66. package/dist/assets/{vendor-qrcode-C_77dtHg.js → vendor-qrcode-DMsNGQ10.js} +1 -1
  67. package/dist/assets/{vendor-virtuoso-aMZPf2fi.js → vendor-virtuoso-BUT96ALa.js} +1 -1
  68. package/dist/assets/{vennDiagram-DHZGUBPP-K67JHnnN.js → vennDiagram-DHZGUBPP-CGr-cc7e.js} +1 -1
  69. package/dist/assets/{wardley-RL74JXVD-CCis01LD.js → wardley-RL74JXVD-BN899vMf.js} +1 -1
  70. package/dist/assets/{wardleyDiagram-NUSXRM2D-BjqRIOpN.js → wardleyDiagram-NUSXRM2D-xUsI1E7h.js} +1 -1
  71. package/dist/assets/{xychartDiagram-5P7HB3ND-CaXETYTI.js → xychartDiagram-5P7HB3ND-woQrslzB.js} +1 -1
  72. package/dist/index.html +5 -5
  73. package/dist/voice-packs/default/askQuestion.wav +0 -0
  74. package/dist/voice-packs/default/pack.json +34 -0
  75. package/dist/voice-packs/default/planApproval.wav +0 -0
  76. package/dist/voice-packs/default/timeoutWarning5min.wav +0 -0
  77. package/dist/voice-packs/default/timeoutWarning60s.wav +0 -0
  78. package/dist/voice-packs/default/turnEnd.wav +0 -0
  79. package/lib/approval-modal-prefs.js +71 -0
  80. package/lib/ask-bridge.js +19 -1
  81. package/lib/ensure-hooks.js +48 -4
  82. package/lib/sdk-manager.js +60 -6
  83. package/lib/turn-end-bridge.js +117 -0
  84. package/lib/voice-pack-events.js +32 -0
  85. package/lib/voice-pack-manager.js +246 -0
  86. package/package.json +1 -1
  87. package/pty-manager.js +8 -1
  88. package/server.js +414 -13
  89. package/dist/assets/App-DfhQt_ed.js +0 -1
  90. package/dist/assets/Mobile-0ZF71DQy.js +0 -1
  91. package/dist/assets/classDiagram-6PBFFD2Q-CeAAXpgl.js +0 -1
  92. package/dist/assets/classDiagram-v2-HSJHXN6E-CeAAXpgl.js +0 -1
  93. package/dist/assets/clone-BcGHaFBY.js +0 -1
  94. package/dist/assets/seqResourceLoaders-CH1DqmCg.js +0 -2
package/README.md CHANGED
@@ -3,14 +3,14 @@
3
3
 
4
4
  # CC-Viewer
5
5
 
6
- A Vibe Coding toolkit distilled from hands-on development experience, built on top of Claude Code:
6
+ Based on Claude Code, a Vibe Coding tool that distills and accumulates real development experience:
7
7
 
8
- 1. Push the capability ceiling run /ultraPlan and /ultraReview locally, so your project code never has to be fully exposed to Claude's cloud;
9
- 2. Multi-device adaptive code from mobile devices over your local network, the web build adapts to every scenario for embedding into browser extensions or OS split views, and a native installer is also provided;
10
- 3. Full audit trail full Claude Code payload interception and analysis, perfect for logging, debugging, learning, and reverse-engineering;
11
- 4. Knowledge sharing comes with accumulated study notes and hands-on experience (look for the "?" icons throughout the app);
12
- 5. Native experience preserved only augments Claude Code's capabilities without any substantive changes to its core, keeping the native experience intact;
13
- 6. Third-party model support works with deepseek-v4-*, GLM 5.1, Kimi K2.6, with built-in cc-switch capability for hot-swapping third-party tools at any time.
8
+ 1. Raise your capability ceiling: run /ultraPlan and /ultraReview locally, while avoiding fully exposing your project code to Claude's cloud;
9
+ 2. Multi-device compatibility: code on mobile devices (within your LAN), the web version adapts to all kinds of scenarios, easy to embed into browser extensions or OS split-screen, and native installers are provided;
10
+ 3. Complete log tracing: full Claude Code payload interception and analysis ideal for logging, troubleshooting, learning, and reverse engineering;
11
+ 4. Shared learning and experience: lots of learning material and development know-how are baked in (see the "?" icons throughout the system);
12
+ 5. Native experience preserved: only enhances Claude Code's capabilities without making any substantive changes to the core, keeping the native experience intact;
13
+ 6. Third-party model support: compatible with deepseek-v4-\*, GLM 5.1, Kimi K2.6, with cc-switch built in so you can hot-swap third-party tools at any time;
14
14
 
15
15
  English | [简体中文](./docs/README.zh.md) | [繁體中文](./docs/README.zh-TW.md) | [한국어](./docs/README.ko.md) | [日本語](./docs/README.ja.md) | [Deutsch](./docs/README.de.md) | [Español](./docs/README.es.md) | [Français](./docs/README.fr.md) | [Italiano](./docs/README.it.md) | [Dansk](./docs/README.da.md) | [Polski](./docs/README.pl.md) | [Русский](./docs/README.ru.md) | [العربية](./docs/README.ar.md) | [Norsk](./docs/README.no.md) | [Português (Brasil)](./docs/README.pt-BR.md) | [ไทย](./docs/README.th.md) | [Türkçe](./docs/README.tr.md) | [Українська](./docs/README.uk.md)
16
16
 
@@ -18,8 +18,8 @@ English | [简体中文](./docs/README.zh.md) | [繁體中文](./docs/README.zh-
18
18
 
19
19
  ### Prerequisites
20
20
 
21
- - Make sure Node.js 22.0.0+ is installed; [download & install](https://nodejs.org)
22
- - Make sure Claude Code is installed; [installation guide](https://github.com/anthropics/claude-code)
21
+ * Make sure nodejs 20.0.0+ is installed; [Download and install](https://nodejs.org)
22
+ * Make sure claude code is installed; [Installation guide](https://github.com/anthropics/claude-code)
23
23
 
24
24
  ### Install ccv
25
25
 
@@ -34,64 +34,65 @@ npm install -g cc-viewer --registry=https://registry.npmjs.org
34
34
  ```bash
35
35
  brew tap weiesky/cc-viewer
36
36
  brew install cc-viewer
37
- brew upgrade cc-viewer # for updates do NOT use npm install -g for brew installs
37
+ brew upgrade cc-viewer # use this to upgrade; do NOT use npm install -g to upgrade a brew-installed ccv
38
38
  ```
39
39
 
40
- ### Launch
40
+ ### How to start
41
41
 
42
- ccv is a drop-in replacement for claude — all arguments are passed through to claude while launching the Web Viewer.
42
+ ccv is a drop-in replacement for claude — all arguments are passed through to claude while the Web Viewer is launched alongside it.
43
43
 
44
44
  ```bash
45
45
  ccv # == claude (interactive mode)
46
46
  ```
47
47
 
48
- The author's most-used command is:
48
+ The command I use most often is:
49
+
49
50
  ```
50
51
  ccv -c --d # == claude --continue --dangerously-skip-permissions
51
- # ccv passes through all Claude Code launch arguments — combine them however you like
52
+ # ccv passes through every Claude Code launch argumentfeel free to combine them however you like
52
53
  ```
53
54
 
54
- After launching in programming mode, a web page will open automatically.
55
-
56
- CC-Viewer also ships as a native desktop app: [Download page](https://github.com/weiesky/cc-viewer/releases)
55
+ Once started in programming mode, the web page opens automatically.
57
56
 
57
+ cc-viewer also ships as a native desktop app: [download page](https://github.com/weiesky/cc-viewer/releases)
58
58
 
59
- ### Logger Mode
59
+ ### Logger mode
60
60
 
61
61
  If you still prefer the native claude tool or the VS Code extension, use this mode.
62
62
 
63
- In this mode, launching `claude` will automatically start a logging process that records request logs to ~/.claude/cc-viewer/*yourproject*/date.jsonl
63
+ In this mode, launching `claude` will automatically start a logging process that records request logs to \~/.claude/cc-viewer/*yourproject*/date.jsonl
64
64
 
65
65
  Enable logger mode:
66
+
66
67
  ```bash
67
68
  ccv -logger
68
69
  ```
69
70
 
70
- When the console cannot print the specific port, the default first port is 127.0.0.1:7008. Multiple instances use sequential ports like 7009, 7010.
71
+ When the console cannot print a specific port, the default first port is 127.0.0.1:7008. If multiple instances exist, ports increment sequentially — 7009, 7010, and so on.
71
72
 
72
73
  Uninstall logger mode:
74
+
73
75
  ```bash
74
76
  ccv --uninstall
75
77
  ```
76
78
 
77
79
  ### Troubleshooting
78
80
 
79
- If you encounter issues starting cc-viewer, here is the ultimate troubleshooting approach:
80
-
81
- Step 1: Open Claude Code in any directory.
82
-
81
+ If you run into start-up issues, here's the ultimate troubleshooting recipe:
82
+ Step 1: Open Claude Code in any directory;
83
83
  Step 2: Give Claude Code the following instruction:
84
84
 
85
85
  ```
86
- I have installed the cc-viewer npm package, but after running ccv it still doesn't work properly. Please check cc-viewer's cli.js and findcc.js, and adapt them to the local Claude Code deployment based on the specific environment. Keep the scope of changes as constrained as possible within findcc.js.
86
+ I have installed the cc-viewer npm package, but running ccv still doesn't work properly. Check cc-viewer's cli.js and findcc.js and adapt them to the local Claude Code deployment based on the specific environment. Keep the scope of changes confined to findcc.js as much as possible.
87
87
  ```
88
88
 
89
- Letting Claude Code diagnose the issue itself is more effective than asking anyone or reading any documentation!
89
+ Letting Claude Code diagnose the problem on its own is more effective than asking anyone or reading any documentation!
90
90
 
91
- After the above instruction is completed, `findcc.js` will be updated. If your project frequently requires local deployment, or if forked code often needs to resolve installation issues, keeping this file lets you simply copy it next time. At this stage, many projects and companies using Claude Code are not deploying on Mac but rather on server-side hosted environments, so the author has separated `findcc.js` to make it easier to track cc-viewer source code updates going forward.
91
+ Once the instruction is done, `findcc.js` will have been updated. If your project frequently needs local deployment, or your forked code often runs into installation issues, just keep this file next time you can simply copy it over. At this stage many projects and companies use Claude Code on server-side hosted deployments rather than on Mac, so I split out `findcc.js` to make it easier to keep tracking upstream cc-viewer source updates.
92
92
 
93
+ Note: this app conflicts with claude-code-switch and claude-code-router — there is a proxy contention problem, so make sure you turn off claude-code-switch and claude-code-router when using it. cc-viewer provides built-in proxy hot-reload that can replace them.
93
94
 
94
- ### Other Commands
95
+ ### Other helper commands
95
96
 
96
97
  See:
97
98
 
@@ -103,98 +104,109 @@ ccv -h
103
104
 
104
105
  By default, `ccv` runs in silent mode when wrapping `claude`, keeping your terminal output clean and consistent with the native experience. All logs are captured in the background and can be viewed at `http://localhost:7008`.
105
106
 
106
- Once configured, use the `claude` command as normal. Visit `http://localhost:7008` to access the monitoring interface.
107
-
107
+ Once configured, just use the `claude` command as usual. Visit `http://localhost:7008` to open the monitoring UI.
108
108
 
109
109
  ## Features
110
110
 
111
+ ### Programming mode
112
+
113
+ After launching with ccv you'll see:
114
+
115
+ <img height="765" width="1500" alt="image" src="https://github.com/user-attachments/assets/ab353a2b-f101-409d-a28c-6a4e41571ea2" />
111
116
 
112
- ### Programming Mode
117
+ You can view the code diff directly right after an edit:
113
118
 
114
- After launching with ccv, you can see:
119
+ <img height="728" width="1500" alt="image" src="https://github.com/user-attachments/assets/2a4acdaa-fc5f-4dc0-9e5f-f3273f0849b2" />
115
120
 
116
- <img width="1500" height="765" alt="image" src="https://github.com/user-attachments/assets/ab353a2b-f101-409d-a28c-6a4e41571ea2" />
121
+ While you can open files and code by hand, that's not recommended — that's the old-school way!
117
122
 
123
+ ### Mobile programming
118
124
 
119
- You can view code diffs directly after editing:
125
+ You can even scan a QR code and code from a mobile device:
120
126
 
121
- <img width="1500" height="728" alt="image" src="https://github.com/user-attachments/assets/2a4acdaa-fc5f-4dc0-9e5f-f3273f0849b2" />
127
+ <img height="1460" width="3018" alt="image" src="https://github.com/user-attachments/assets/8debf48e-daec-420c-b37a-609f8b81cd20" />
122
128
 
123
- While you can open files and code manually, manual coding is not recommended — that's old-school coding!
129
+ <img height="790" width="1700" alt="image" src="https://github.com/user-attachments/assets/da3e519f-ff66-4cd2-81d1-f4e131215f6c" />
124
130
 
125
- ### Mobile Programming
131
+ Everything you imagined about mobile coding — plus a plugin mechanism: if you need to customize for your own coding habits, stay tuned for plugin hook updates.
126
132
 
127
- You can even scan a QR code to code from your mobile device:
133
+ ### Logger mode (view the complete Claude Code session)
128
134
 
129
- <img width="3018" height="1460" alt="image" src="https://github.com/user-attachments/assets/8debf48e-daec-420c-b37a-609f8b81cd20" />
130
- <img width="1700" height="790" alt="image" src="https://github.com/user-attachments/assets/da3e519f-ff66-4cd2-81d1-f4e131215f6c" />
135
+ <img height="768" width="1500" alt="image" src="https://github.com/user-attachments/assets/a8a9f3f7-d876-4f6b-a64d-f323a05c4d21" />
131
136
 
132
- Fulfill your imagination of mobile programming. There's also a plugin mechanism if you need to customize for your coding habits, stay tuned for plugin hooks updates.
137
+ * Captures every API request from Claude Code in real time, guaranteeing the raw payload rather than a censored log (this matters a lot!!!)
138
+ * Automatically identifies and labels Main Agent and Sub Agent requests (subtypes: Plan, Search, Bash)
139
+ * MainAgent requests support Body Diff JSON, showing only the diff against the previous MainAgent request (only changed/added fields) in a collapsed view
140
+ * Each request inlines Token usage stats (input/output tokens, cache creation/read, hit rate)
141
+ * Compatible with Claude Code Router (CCR) and other proxy scenarios — falls back to matching requests by API path pattern
133
142
 
143
+ ### Conversation mode
134
144
 
135
- ### Logger Mode (View Complete Claude Code Sessions)
145
+ Click the "Conversation Mode" button at the top right to parse the Main Agent's full conversation history into a chat interface:
136
146
 
137
- <img width="1500" height="768" alt="image" src="https://github.com/user-attachments/assets/a8a9f3f7-d876-4f6b-a64d-f323a05c4d21" />
147
+ <img height="764" width="1500" alt="image" src="https://github.com/user-attachments/assets/725b57c8-6128-4225-b157-7dba2738b1c6" />
138
148
 
149
+ * Agent Team display is not yet supported
150
+ * User messages are right-aligned (blue bubbles), Main Agent replies are left-aligned (dark bubbles)
151
+ * `thinking` blocks are collapsed by default and rendered as Markdown — click to expand and view the reasoning; one-click translation is supported (still unstable)
152
+ * User-selection messages (AskUserQuestion) are displayed in Q&A form
153
+ * Two-way mode sync: switching to Conversation mode auto-scrolls to the conversation that matches the selected request; switching back to the raw mode auto-scrolls to the selected request
154
+ * Settings panel: toggle the default collapsed state of tool results and thinking blocks
155
+ * Mobile conversation browsing: in mobile CLI mode, tap the "Conversation Browse" button in the top bar to slide out a read-only conversation view and browse the full history on your phone
139
156
 
140
- - Captures all API requests from Claude Code in real time, ensuring raw text — not redacted logs (this is important!!!)
141
- - Automatically identifies and labels Main Agent and Sub Agent requests (subtypes: Plan, Search, Bash)
142
- - MainAgent requests support Body Diff JSON, showing collapsed differences from the previous MainAgent request (only changed/new fields)
143
- - Each request displays inline Token usage statistics (input/output tokens, cache creation/read, hit rate)
144
- - Compatible with Claude Code Router (CCR) and other proxy scenarios — falls back to API path pattern matching
157
+ ### Log management
145
158
 
146
- ### Conversation Mode
159
+ From the CC-Viewer dropdown menu in the top-left:
147
160
 
148
- Click the "Conversation Mode" button in the top-right corner to parse the Main Agent's complete conversation history into a chat interface:
161
+ <img height="760" width="1500" alt="image" src="https://github.com/user-attachments/assets/33295e2b-f2e0-4968-a6f1-6f3d1404454e" />
149
162
 
150
- <img width="1500" height="764" alt="image" src="https://github.com/user-attachments/assets/725b57c8-6128-4225-b157-7dba2738b1c6" />
163
+ **Log compression**
164
+ Regarding logs, I want to state clearly that I haven't modified Anthropic's official definition — log integrity is guaranteed.
165
+ However, individual log entries for the 1M Opus model can get extremely large in later stages. Thanks to some log optimizations applied to MainAgent, the size can be reduced by at least 66% even without gzip.
166
+ The parser for these compressed logs can be extracted from the current repository.
151
167
 
152
- - Agent Team display is not yet supported
153
- - User messages are right-aligned (blue bubbles), Main Agent replies are left-aligned (dark bubbles)
154
- - `thinking` blocks are collapsed by default, rendered as Markdown — click to expand and view the thinking process; one-click translation is supported (feature is still unstable)
155
- - User selection messages (AskUserQuestion) are displayed in Q&A format
156
- - Bidirectional mode sync: switching to conversation mode auto-scrolls to the conversation corresponding to the selected request; switching back to raw mode auto-scrolls to the selected request
157
- - Settings panel: toggle default collapse state for tool results and thinking blocks
158
- - Mobile conversation browsing: in mobile CLI mode, tap the "Conversation Browse" button in the top bar to slide out a read-only conversation view for browsing the complete conversation history on mobile
168
+ ### More handy useful features
159
169
 
160
- ### Log Management
170
+ <img height="767" width="1500" alt="image" src="https://github.com/user-attachments/assets/add558c5-9c4d-468a-ac6f-d8d64759fdbd" />
161
171
 
162
- Via the CC-Viewer dropdown menu in the top-left corner:
172
+ You can quickly locate your prompts via the sidebar tools.
163
173
 
164
- <img width="1500" height="760" alt="image" src="https://github.com/user-attachments/assets/33295e2b-f2e0-4968-a6f1-6f3d1404454e" />
174
+ ***
165
175
 
166
- **Log Compression**
167
- Regarding logs, the author wants to clarify that the official Anthropic definitions have not been modified, ensuring log integrity. However, since individual log entries from the 1M Opus model can become extremely large in later stages, thanks to certain log optimizations for MainAgent, at least 66% size reduction is achieved without gzip. The parsing method for these compressed logs can be extracted from the current repository.
176
+ <img height="765" width="1500" alt="image" src="https://github.com/user-attachments/assets/82b8eb67-82f5-41b1-89d6-341c95a047ed" />
168
177
 
169
- ### More Useful Features
178
+ The interesting KV-Cache-Text feature shows you exactly what Claude sees.
170
179
 
171
- <img width="1500" height="767" alt="image" src="https://github.com/user-attachments/assets/add558c5-9c4d-468a-ac6f-d8d64759fdbd" />
180
+ ***
172
181
 
173
- You can quickly locate your prompts using the sidebar tools.
182
+ <img height="765" width="1500" alt="image" src="https://github.com/user-attachments/assets/54cdfa4e-677c-4aed-a5bb-5fd946600c46" />
174
183
 
175
- ---
184
+ You can upload images and describe your needs — Claude's image understanding is remarkably strong, and as you know, you can paste images directly with Ctrl + V; the full content shows up in the conversation.
176
185
 
177
- <img width="1500" height="765" alt="image" src="https://github.com/user-attachments/assets/82b8eb67-82f5-41b1-89d6-341c95a047ed" />
186
+ ***
178
187
 
179
- The interesting KV-Cache-Text feature lets you see exactly what Claude sees.
188
+ <img height="370" width="600" alt="image" src="https://github.com/user-attachments/assets/87d332ea-3e34-4957-b442-f9d070211fbf" />
180
189
 
181
- ---
190
+ You can customize plugins directly, manage all cc-viewer processes, and cc-viewer supports hot-switching to third-party APIs (yes, you can use GLM, Kimi, MiniMax, Qwen, DeepSeek — though I think they're all rather weak at the moment).
182
191
 
183
- <img width="1500" height="765" alt="image" src="https://github.com/user-attachments/assets/54cdfa4e-677c-4aed-a5bb-5fd946600c46" />
192
+ ***
184
193
 
185
- You can upload images and describe your needs — Claude's image understanding is incredibly powerful. And as you know, you can paste images directly with Ctrl+V, and your complete content will be displayed in the conversation.
194
+ <img height="746" width="1500" alt="image" src="https://github.com/user-attachments/assets/b1f60c7c-1438-4ecc-8c64-193d21ee3445" />
186
195
 
187
- ---
196
+ More features waiting for you to discover... for example: the system supports Agent Team and ships with a built-in Code Reviewer. Codex Code Reviewer integration is coming very soon (I strongly recommend using Codex to review Claude Code's code).
188
197
 
189
- <img width="600" height="370" alt="image" src="https://github.com/user-attachments/assets/87d332ea-3e34-4957-b442-f9d070211fbf" />
198
+ ***
190
199
 
191
- You can customize plugins, manage all CC-Viewer processes, and CC-Viewer supports hot-switching to third-party APIs (yes, you can use GLM, Kimi, MiniMax, Qwen, DeepSeek although the author considers them all quite weak at this point).
200
+ **Voice pack** bind custom audio to Claude lifecycle events. Open *Settings → Voice pack* to pick a sound for plan approvals, askUserQuestion popups, 60-min timeout warnings (5-min and 60-s tiers are separate bindings — set both for full coverage), and turn-end notifications. In CLI/PTY mode turnEnd fires via Claude Code's Stop hook (the hook auto-installs into `~/.claude/settings.json`); in SDK mode it fires from the SDK `result` event directly. Either way, it lands at the real end of a user-prompt turn — not after each individual API call.
192
201
 
193
- ---
202
+ **Uninstalling cc-viewer hooks** — cc-viewer writes three entries into `~/.claude/settings.json` (`PreToolUse` × 2, `Stop` × 1), each tagged with the marker comment `# cc-viewer-managed`. If you uninstall cc-viewer (`npm uninstall -g cc-viewer`), strip the stale entries by hand or with:
194
203
 
195
- <img width="1500" height="746" alt="image" src="https://github.com/user-attachments/assets/b1f60c7c-1438-4ecc-8c64-193d21ee3445" />
204
+ ```bash
205
+ jq '(.hooks // {}) |= with_entries(.value |= map(select((.hooks[]?.command // "") | contains("cc-viewer-managed") | not)))' \
206
+ ~/.claude/settings.json > /tmp/settings.json && mv /tmp/settings.json ~/.claude/settings.json
207
+ ```
196
208
 
197
- More features waiting to be discovered... For example: the system supports Agent Team, and has a built-in Code Reviewer. Codex Code Reviewer integration is coming soon (the author highly recommends using Codex to review Claude Code's code).
209
+ This removes only the entries cc-viewer added; any third-party hooks you've configured are left alone. The bundled default pack ships with a **Pixel-Buddy chiptune SFX set** (5 short 8-bit cues, ~100 KB total). Drop your own recording into `public/voice-packs/default/<eventKey>.{wav|mp3|ogg|m4a}` to override, or upload via the Settings panel for a per-user binding. Each file 2 MB. Plays on iPad and phone too, with HTTP Range support for iOS Safari and an autoplay-block chime fallback.
198
210
 
199
211
  ## License
200
212
 
package/cli.js CHANGED
@@ -468,10 +468,15 @@ async function runSdkMode(extraClaudeArgs = [], cwd, noOpen = false) {
468
468
  broadcastWs: (msg) => serverMod.broadcastWsMessage(msg),
469
469
  permissionMode,
470
470
  runWaterfallHook: (await import('./lib/plugin-loader.js')).runWaterfallHook,
471
+ // Round-3 P0: SDK mode has no Stop hook (ensureHooks() skipped above), so
472
+ // the only place we learn a turn ended is the SDK 'result' message. Forward
473
+ // it to the same SSE channel the Stop hook bridge uses in PTY mode.
474
+ onTurnEnd: ({ sessionId, ts }) => serverMod.broadcastTurnEnd?.(sessionId, ts),
471
475
  });
472
476
 
473
477
  // 注册 SDK 回调到 server.js(WS 消息路由用)
474
478
  serverMod.setSdkResolveApproval(sdkManager.resolveApproval);
479
+ serverMod.setSdkCancelApproval(sdkManager.cancelApproval);
475
480
  serverMod.setSdkSendUserMessage(sdkManager.sendUserMessage);
476
481
 
477
482
  // 自动打开浏览器