cc-viewer 1.6.97 → 1.6.99

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 (85) hide show
  1. package/cli.js +6 -1
  2. package/concepts/ar/GlobalSettings.md +232 -0
  3. package/concepts/da/GlobalSettings.md +232 -0
  4. package/concepts/de/GlobalSettings.md +232 -0
  5. package/concepts/en/GlobalSettings.md +232 -0
  6. package/concepts/es/GlobalSettings.md +232 -0
  7. package/concepts/fr/GlobalSettings.md +232 -0
  8. package/concepts/it/GlobalSettings.md +232 -0
  9. package/concepts/ja/GlobalSettings.md +232 -0
  10. package/concepts/ko/GlobalSettings.md +232 -0
  11. package/concepts/no/GlobalSettings.md +232 -0
  12. package/concepts/pl/GlobalSettings.md +232 -0
  13. package/concepts/pt-BR/GlobalSettings.md +232 -0
  14. package/concepts/ru/GlobalSettings.md +232 -0
  15. package/concepts/th/GlobalSettings.md +232 -0
  16. package/concepts/tr/GlobalSettings.md +232 -0
  17. package/concepts/uk/GlobalSettings.md +232 -0
  18. package/concepts/zh/GlobalSettings.md +232 -0
  19. package/concepts/zh-TW/GlobalSettings.md +232 -0
  20. package/dist/assets/App-D9tbz6gh.js +39 -0
  21. package/dist/assets/{AppHeader-CmLos5-f.css → AppHeader-CoP_9OY5.css} +1 -1
  22. package/dist/assets/{AppHeader.module-CTBJwgrr.js → AppHeader.module-NjKaHOFk.js} +93 -93
  23. package/dist/assets/{Mobile-AicWwDuy.js → Mobile-Kzk2YO-c.js} +1 -1
  24. package/dist/assets/{_basePickBy-BWXOF6Ri.js → _basePickBy-DloMkc-G.js} +1 -1
  25. package/dist/assets/{_baseUniq-CtBh9QNw.js → _baseUniq-DS0g4orB.js} +1 -1
  26. package/dist/assets/{arc-BZEM3DMb.js → arc-DjVGcsRC.js} +1 -1
  27. package/dist/assets/{architectureDiagram-2XIMDMQ5-BcsqHztP.js → architectureDiagram-2XIMDMQ5-C78NysdK.js} +1 -1
  28. package/dist/assets/{blockDiagram-WCTKOSBZ-xKCLQIlA.js → blockDiagram-WCTKOSBZ-D1eulsBg.js} +1 -1
  29. package/dist/assets/{c4Diagram-IC4MRINW-BMTzjp_O.js → c4Diagram-IC4MRINW-D_vDMNpu.js} +1 -1
  30. package/dist/assets/channel-DMPi3tRx.js +1 -0
  31. package/dist/assets/{chunk-4BX2VUAB-cu74dN32.js → chunk-4BX2VUAB-DvydnNaE.js} +1 -1
  32. package/dist/assets/{chunk-55IACEB6-Cn5pJZI7.js → chunk-55IACEB6-CAEBnB2g.js} +1 -1
  33. package/dist/assets/{chunk-FMBD7UC4-ClJXAago.js → chunk-FMBD7UC4-Ic2AFusw.js} +1 -1
  34. package/dist/assets/{chunk-JSJVCQXG-CvsqFIVj.js → chunk-JSJVCQXG-B6Pf0kWF.js} +1 -1
  35. package/dist/assets/{chunk-KX2RTZJC-By2tUg3C.js → chunk-KX2RTZJC-aqNHjszh.js} +1 -1
  36. package/dist/assets/{chunk-NQ4KR5QH-ryihu0iB.js → chunk-NQ4KR5QH-BRcgqkZb.js} +1 -1
  37. package/dist/assets/{chunk-QZHKN3VN-CkLeF_JG.js → chunk-QZHKN3VN-Dg6rNEne.js} +1 -1
  38. package/dist/assets/{chunk-WL4C6EOR-DGZ_HPlH.js → chunk-WL4C6EOR-BQztZi27.js} +1 -1
  39. package/dist/assets/classDiagram-VBA2DB6C-B6fMcVCH.js +1 -0
  40. package/dist/assets/classDiagram-v2-RAHNMMFH-B6fMcVCH.js +1 -0
  41. package/dist/assets/clone-NPdkGfRa.js +1 -0
  42. package/dist/assets/{cose-bilkent-S5V4N54A-Bug5hL7O.js → cose-bilkent-S5V4N54A-CpNbxUgF.js} +1 -1
  43. package/dist/assets/{dagre-KLK3FWXG-Bp95f3av.js → dagre-KLK3FWXG-DMV6CAiu.js} +1 -1
  44. package/dist/assets/{diagram-E7M64L7V-BnJcznPG.js → diagram-E7M64L7V-CzQpTBkT.js} +1 -1
  45. package/dist/assets/{diagram-IFDJBPK2-DTa6uDlT.js → diagram-IFDJBPK2-n98W4lW5.js} +1 -1
  46. package/dist/assets/{diagram-P4PSJMXO-BNjVizvt.js → diagram-P4PSJMXO-Da-Dxb0d.js} +1 -1
  47. package/dist/assets/{erDiagram-INFDFZHY-DeYo5Exx.js → erDiagram-INFDFZHY-DV6WDsOa.js} +1 -1
  48. package/dist/assets/{flowDiagram-PKNHOUZH-D8Rh5RJD.js → flowDiagram-PKNHOUZH-uPCoTO1u.js} +1 -1
  49. package/dist/assets/{ganttDiagram-A5KZAMGK-DZ0z2OiO.js → ganttDiagram-A5KZAMGK-C18veywB.js} +1 -1
  50. package/dist/assets/{gitGraphDiagram-K3NZZRJ6-DsoU0UJ3.js → gitGraphDiagram-K3NZZRJ6-CRgTEgJX.js} +1 -1
  51. package/dist/assets/{graph-FtHGSVXM.js → graph-E73hSxND.js} +1 -1
  52. package/dist/assets/{index-yvprqgUP.js → index-C7N4gnFf.js} +2 -2
  53. package/dist/assets/{infoDiagram-LFFYTUFH-BWptl6Gm.js → infoDiagram-LFFYTUFH-X_hBGUL2.js} +1 -1
  54. package/dist/assets/{ishikawaDiagram-PHBUUO56-DTN7vdFN.js → ishikawaDiagram-PHBUUO56-CUIYqfv2.js} +1 -1
  55. package/dist/assets/{journeyDiagram-4ABVD52K-C6rSfKFW.js → journeyDiagram-4ABVD52K-Ja_oFdN5.js} +1 -1
  56. package/dist/assets/{kanban-definition-K7BYSVSG-7zlzYuQI.js → kanban-definition-K7BYSVSG-CoxZi981.js} +1 -1
  57. package/dist/assets/{layout-DetVF_Xi.js → layout-CxyNCowe.js} +1 -1
  58. package/dist/assets/{linear-D7AP5ZM2.js → linear-BvMEMoa5.js} +1 -1
  59. package/dist/assets/{mermaid.core-BF7AL9QP.js → mermaid.core-yxi-tJV1.js} +4 -4
  60. package/dist/assets/{mindmap-definition-YRQLILUH-BAEZ_Kww.js → mindmap-definition-YRQLILUH-D0an_YiX.js} +1 -1
  61. package/dist/assets/{pieDiagram-SKSYHLDU-CTRIrNJJ.js → pieDiagram-SKSYHLDU-2_qKTz49.js} +1 -1
  62. package/dist/assets/{quadrantDiagram-337W2JSQ-DcUVHBRU.js → quadrantDiagram-337W2JSQ-DEdMIEZ6.js} +1 -1
  63. package/dist/assets/{requirementDiagram-Z7DCOOCP-nMrfF214.js → requirementDiagram-Z7DCOOCP-D34qZwqS.js} +1 -1
  64. package/dist/assets/{sankeyDiagram-WA2Y5GQK-BKM2oKi0.js → sankeyDiagram-WA2Y5GQK-CuWEPTrY.js} +1 -1
  65. package/dist/assets/{sequenceDiagram-2WXFIKYE-DcJnjEps.js → sequenceDiagram-2WXFIKYE-C_j_NZww.js} +1 -1
  66. package/dist/assets/{stateDiagram-RAJIS63D--wjhber7.js → stateDiagram-RAJIS63D-BQMmW3qX.js} +1 -1
  67. package/dist/assets/stateDiagram-v2-FVOUBMTO-C_b_318T.js +1 -0
  68. package/dist/assets/{timeline-definition-YZTLITO2-BzEHHLxX.js → timeline-definition-YZTLITO2-CQlUZTgI.js} +1 -1
  69. package/dist/assets/{treemap-KZPCXAKY-BKg_1Uvh.js → treemap-KZPCXAKY-Df9Nkrlt.js} +1 -1
  70. package/dist/assets/{vennDiagram-LZ73GAT5-BKfBvDlz.js → vennDiagram-LZ73GAT5-CaXvJV8t.js} +1 -1
  71. package/dist/assets/{xychartDiagram-JWTSCODW-2O6N9OtR.js → xychartDiagram-JWTSCODW-BWwflUcf.js} +1 -1
  72. package/dist/index.html +1 -1
  73. package/findcc.js +17 -1
  74. package/lib/perm-bridge.js +15 -14
  75. package/lib/plugin-loader.js +13 -12
  76. package/lib/sdk-manager.js +2 -2
  77. package/package.json +1 -1
  78. package/server.js +25 -14
  79. package/workspace-registry.js +11 -10
  80. package/dist/assets/App-BlTt-0pD.js +0 -39
  81. package/dist/assets/channel-UwYsH-gK.js +0 -1
  82. package/dist/assets/classDiagram-VBA2DB6C-BJV4gG6V.js +0 -1
  83. package/dist/assets/classDiagram-v2-RAHNMMFH-BJV4gG6V.js +0 -1
  84. package/dist/assets/clone-CjbFDS02.js +0 -1
  85. package/dist/assets/stateDiagram-v2-FVOUBMTO-BjJCClaV.js +0 -1
@@ -0,0 +1,232 @@
1
+ # CC-Viewer 全局配置参考
2
+
3
+ ## 一、全局设置面板(UI)
4
+
5
+ 通过左上角菜单 → "全局设置" 打开。
6
+
7
+ | 配置项 | 类型 | 默认值 | 说明 |
8
+ |--------|------|--------|------|
9
+ | 过滤无关请求 | 开关 | 开 | 隐藏心跳、count_tokens、子代理等非主代理请求 |
10
+ | 默认展开 Body Diff JSON | 开关 | 关 | 请求详情面板中的 Body Diff 区域默认展开 |
11
+ | 日志目录设置 | 文本输入 | `~/.claude/cc-viewer` | 项目日志的读写根目录,支持 `~/` 展开。修改后回车或失焦保存,立即生效 |
12
+
13
+ ## 二、显示设置面板(UI)
14
+
15
+ 通过左上角菜单 → "显示设置" 打开。
16
+
17
+ | 配置项 | 类型 | 默认值 | 说明 |
18
+ |--------|------|--------|------|
19
+ | 折叠工具结果 | 开关 | 开 | 聊天视图中折叠工具调用结果块 |
20
+ | 展开思考过程 | 开关 | 开 | 默认展开 Claude 的思考/推理过程块 |
21
+ | 完整展示所有内容 | 开关 | 关 | 显示完整的工具调用内容,不截断 |
22
+ | 自动恢复会话 | 开关 + 选项 | 关 | 遇到会话恢复提示时自动选择:`继续` 或 `新建` |
23
+
24
+ ## 三、偏好设置文件
25
+
26
+ 所有 UI 设置持久化到 `<日志目录>/preferences.json`,通过 `/api/preferences` 接口读写。
27
+
28
+ ```json
29
+ {
30
+ "lang": "zh",
31
+ "filterIrrelevant": true,
32
+ "expandDiff": false,
33
+ "collapseToolResults": true,
34
+ "expandThinking": true,
35
+ "showFullToolContent": false,
36
+ "logDir": "~/.claude/cc-viewer",
37
+ "resumeAutoChoice": null,
38
+ "disabledPlugins": [],
39
+ "presetShortcuts": []
40
+ }
41
+ ```
42
+
43
+ | 字段 | 类型 | 说明 |
44
+ |------|------|------|
45
+ | `lang` | string | 界面语言(zh/en/zh-TW/ko/ja/de/es/fr/it/da/pl/ru/ar/no/pt-BR/th/tr/uk) |
46
+ | `filterIrrelevant` | boolean | 过滤无关请求 |
47
+ | `expandDiff` | boolean | 默认展开 Body Diff JSON |
48
+ | `collapseToolResults` | boolean | 折叠工具结果 |
49
+ | `expandThinking` | boolean | 展开思考过程 |
50
+ | `showFullToolContent` | boolean | 完整展示内容 |
51
+ | `logDir` | string | 日志目录路径 |
52
+ | `resumeAutoChoice` | null / "continue" / "new" | 自动恢复会话选择 |
53
+ | `disabledPlugins` | string[] | 已禁用的插件文件名列表 |
54
+ | `presetShortcuts` | array | Agent Team 快捷指令预设 |
55
+
56
+ ## 四、环境变量
57
+
58
+ ### CC-Viewer 专有
59
+
60
+ | 变量名 | 默认值 | 说明 |
61
+ |--------|--------|------|
62
+ | `CCV_LOG_DIR` | `~/.claude/cc-viewer` | 日志存储根目录。特殊值:`tmp`/`temp` 使用系统临时目录 |
63
+ | `CCV_CLI_MODE` | 未设置 | `=1` 启用 CLI 模式(PTY 终端) |
64
+ | `CCV_SDK_MODE` | 未设置 | `=1` 启用 Agent SDK 模式(无终端) |
65
+ | `CCV_WORKSPACE_MODE` | 未设置 | `=1` 启用工作空间选择模式 |
66
+ | `CCV_PROJECT_DIR` | `process.cwd()` | 项目工作目录,用于文件操作和 Git 命令 |
67
+ | `CCV_PROXY_PORT` | 未设置 | 本地 MITM 代理端口 |
68
+ | `CCV_BYPASS_PERMISSIONS` | 未设置 | `=1` 跳过工具权限审批(配合 `--dangerously-skip-permissions`) |
69
+ | `CCV_DISABLE_DELTA` | 未设置 | `=1` 禁用增量日志存储,每次写入完整消息 |
70
+ | `CCV_DEBUG` | 未设置 | `=1` 启用 HTTP 代理调试日志 |
71
+ | `CCV_DEBUG_PLUGINS` | 未设置 | `=1` 启用插件加载调试日志 |
72
+
73
+ ### 内部 IPC
74
+
75
+ | 变量名 | 说明 |
76
+ |--------|------|
77
+ | `CCVIEWER_PORT` | 服务端口,供 ask-bridge/perm-bridge 通信 |
78
+ | `CCV_EDITOR_PORT` | 服务端口,供 ccv-editor 文件编辑桥接 |
79
+
80
+ ### 外部变量(读取)
81
+
82
+ | 变量名 | 说明 |
83
+ |--------|------|
84
+ | `ANTHROPIC_BASE_URL` | 自定义 Anthropic API 地址 |
85
+ | `SHELL` | 用户 Shell(PTY 启动和 Shell 配置检测) |
86
+ | `http_proxy` / `HTTPS_PROXY` 等 | HTTP 代理配置(通过 undici EnvHttpProxyAgent) |
87
+
88
+ ## 五、CLI 命令参数
89
+
90
+ ```
91
+ ccv [选项] [claude 参数...]
92
+ ```
93
+
94
+ ### CC-Viewer 专有选项
95
+
96
+ | 参数 | 说明 |
97
+ |------|------|
98
+ | `-logger` | 安装/修复 Claude Code hooks |
99
+ | `--uninstall` / `-uninstall` | 卸载所有 CC-Viewer 集成 |
100
+ | `--help` / `-h` / `help` | 显示帮助信息 |
101
+ | `--version` / `-v` | 显示版本号 |
102
+ | `-SDK` / `--sdk` | 使用 Agent SDK 模式 |
103
+ | `--d` | `--dangerously-skip-permissions` 简写 |
104
+ | `--ad` | `--allow-dangerously-skip-permissions` 简写 |
105
+ | `run` | 通过代理运行命令(`ccv run -- claude ...`) |
106
+
107
+ ### Claude 透传参数(常用)
108
+
109
+ | 参数 | 说明 |
110
+ |------|------|
111
+ | `-c` / `--continue` | 继续上一次会话 |
112
+ | `-r` / `--resume` | 恢复指定会话 |
113
+ | `-p` / `--print` | 非交互式输出 |
114
+ | `--model` | 指定模型 |
115
+ | `--permission-mode` | 权限模式 |
116
+ | `--system-prompt` | 自定义系统提示词 |
117
+ | `--max-budget-usd` | 最大预算 |
118
+
119
+ ## 六、Hook 配置
120
+
121
+ CC-Viewer 自动注册到 `~/.claude/settings.json` 的 `hooks.PreToolUse` 中:
122
+
123
+ ### 1. AskUserQuestion 桥接
124
+ - **匹配器**: `"AskUserQuestion"`
125
+ - **命令**: `node <安装目录>/lib/ask-bridge.js`
126
+ - **作用**: 将 Claude 的问题转发到 Web UI,等待用户回答
127
+
128
+ ### 2. 权限审批桥接
129
+ - **匹配器**: `""` (空 = 匹配所有工具)
130
+ - **命令**: `node <安装目录>/lib/perm-bridge.js`
131
+ - **作用**: 仅 `Bash`/`Edit`/`Write`/`NotebookEdit` 需要 Web UI 审批,其余自动放行
132
+
133
+ ## 七、Shell 集成
134
+
135
+ CC-Viewer 在 `~/.zshrc`(或 `.bashrc`)中注入 `claude()` 函数:
136
+
137
+ ```bash
138
+ # >>> CC-Viewer Auto-Inject >>>
139
+ claude() { ... }
140
+ # <<< CC-Viewer Auto-Inject <<<
141
+ ```
142
+
143
+ 所有 `claude` 命令自动通过 CC-Viewer 代理,实现日志捕获和 Web UI 功能。
144
+
145
+ 卸载:`ccv --uninstall` 或手动删除标记之间的内容。
146
+
147
+ ## 八、代理配置(Proxy Profile)
148
+
149
+ 存储在 `<日志目录>/profile.json`,通过 UI 的"代理切换"面板管理。
150
+
151
+ ```json
152
+ {
153
+ "active": "max",
154
+ "profiles": [
155
+ { "id": "max", "name": "Default" },
156
+ { "id": "my-proxy", "name": "自定义", "baseURL": "https://...", "apiKey": "sk-..." }
157
+ ]
158
+ }
159
+ ```
160
+
161
+ | 字段 | 说明 |
162
+ |------|------|
163
+ | `active` | 当前激活的配置 ID(`"max"` = 直连,无代理) |
164
+ | `id` | 唯一标识 |
165
+ | `name` | 显示名称 |
166
+ | `baseURL` | 代理 API 地址(替换请求 origin) |
167
+ | `apiKey` | 代理 API 密钥(替换认证头) |
168
+ | `models` | 可用模型列表 |
169
+ | `activeModel` | 当前选中的模型 |
170
+
171
+ ## 九、插件系统
172
+
173
+ 插件目录:`<日志目录>/plugins/`
174
+
175
+ ### 支持的 Hook 类型
176
+
177
+ | Hook | 类型 | 说明 |
178
+ |------|------|------|
179
+ | `httpsOptions` | 瀑布 | 提供 HTTPS 证书(返回 `{ cert, key }` 或 `{ pfx }`) |
180
+ | `localUrl` | 瀑布 | 修改本地访问 URL |
181
+ | `serverStarted` | 并行 | 服务器启动通知 |
182
+ | `serverStopping` | 并行 | 服务器停止通知 |
183
+ | `onNewEntry` | 并行 | 新日志条目写入通知 |
184
+
185
+ 插件启用/禁用通过 `preferences.json` 的 `disabledPlugins` 数组管理。
186
+
187
+ ## 十、目录结构
188
+
189
+ ```
190
+ ~/.claude/cc-viewer/ # 日志根目录
191
+ ├── preferences.json # 用户偏好设置
192
+ ├── workspaces.json # 工作空间注册表
193
+ ├── profile.json # 代理配置
194
+ ├── plugins/ # 插件目录
195
+ │ └── my-plugin.js
196
+ ├── <项目名>/ # 每个项目的日志目录
197
+ │ ├── <项目名>_20260404_123456.jsonl # JSONL 日志文件
198
+ │ ├── <项目名>.json # 统计数据(后台生成)
199
+ │ └── images/ # 上传图片的持久副本
200
+ └── ...
201
+
202
+ /tmp/cc-viewer-uploads/ # 临时上传文件目录
203
+ ```
204
+
205
+ ## 十一、服务器配置
206
+
207
+ | 配置 | 值 | 说明 |
208
+ |------|-----|------|
209
+ | 端口范围 | 7008-7099 | 自动扫描可用端口 |
210
+ | 绑定地址 | 0.0.0.0 | 所有网络接口 |
211
+ | 访问令牌 | 随机 16 字节 hex | 局域网访问需要 `?token=xxx`,本机免认证 |
212
+ | HTTPS | 仅通过插件 | 需要插件提供 `httpsOptions` hook |
213
+ | CORS | `*` | 允许所有来源 |
214
+ | 上传限制 | 50MB | 单文件最大上传大小 |
215
+
216
+ ## 十二、URL 参数
217
+
218
+ | 参数 | 说明 |
219
+ |------|------|
220
+ | `?token=xxx` | 局域网访问认证令牌 |
221
+ | `?logfile=path` | 打开指定历史日志文件(只读模式) |
222
+
223
+ ## 十三、localStorage 配置
224
+
225
+ | 键 | 说明 |
226
+ |-----|------|
227
+ | `ccv_cacheExpireAt` | 缓存倒计时到期时间 |
228
+ | `ccv_cacheType` | 缓存类型标签 |
229
+ | `ccv_sseSlim` | 启用 SSE 增量裁剪(桌面端性能优化) |
230
+ | `ccv_calibrationModel` | KV-Cache 上下文窗口校准模型 |
231
+ | `ccv_fileExplorerOpen` | 文件浏览器面板开关 |
232
+ | `cc-viewer-terminal-width` | 终端面板宽度(像素) |
@@ -0,0 +1,232 @@
1
+ # CC-Viewer Configuration Reference
2
+
3
+ ## 1. Global Settings Panel (UI)
4
+
5
+ Open via top-left menu → "Global Settings".
6
+
7
+ | Setting | Type | Default | Description |
8
+ |---------|------|---------|-------------|
9
+ | Filter Irrelevant Requests | Switch | On | Hide heartbeat, count_tokens, sub-agent and other non-main-agent requests |
10
+ | Expand Body Diff JSON | Switch | Off | Expand Body Diff section by default in request detail panel |
11
+ | Log Directory | Text Input | `~/.claude/cc-viewer` | Root directory for project log read/write. Supports `~/` expansion. Takes effect immediately on Enter or blur |
12
+
13
+ ## 2. Display Settings Panel (UI)
14
+
15
+ Open via top-left menu → "Display Settings".
16
+
17
+ | Setting | Type | Default | Description |
18
+ |---------|------|---------|-------------|
19
+ | Collapse Tool Results | Switch | On | Collapse tool call result blocks in chat view |
20
+ | Expand Thinking | Switch | On | Expand Claude's thinking/reasoning blocks by default |
21
+ | Show Full Tool Content | Switch | Off | Show full untruncated tool call content |
22
+ | Auto Resume Session | Switch + Options | Off | Automatically choose when session resume prompt appears: `Continue` or `New` |
23
+
24
+ ## 3. Preferences File
25
+
26
+ All UI settings are persisted to `<log_dir>/preferences.json` via the `/api/preferences` API.
27
+
28
+ ```json
29
+ {
30
+ "lang": "en",
31
+ "filterIrrelevant": true,
32
+ "expandDiff": false,
33
+ "collapseToolResults": true,
34
+ "expandThinking": true,
35
+ "showFullToolContent": false,
36
+ "logDir": "~/.claude/cc-viewer",
37
+ "resumeAutoChoice": null,
38
+ "disabledPlugins": [],
39
+ "presetShortcuts": []
40
+ }
41
+ ```
42
+
43
+ | Field | Type | Description |
44
+ |-------|------|-------------|
45
+ | `lang` | string | UI language (zh/en/zh-TW/ko/ja/de/es/fr/it/da/pl/ru/ar/no/pt-BR/th/tr/uk) |
46
+ | `filterIrrelevant` | boolean | Filter irrelevant requests |
47
+ | `expandDiff` | boolean | Expand Body Diff JSON by default |
48
+ | `collapseToolResults` | boolean | Collapse tool results |
49
+ | `expandThinking` | boolean | Expand thinking blocks |
50
+ | `showFullToolContent` | boolean | Show full content |
51
+ | `logDir` | string | Log directory path |
52
+ | `resumeAutoChoice` | null / "continue" / "new" | Auto resume session choice |
53
+ | `disabledPlugins` | string[] | Disabled plugin filenames |
54
+ | `presetShortcuts` | array | Agent Team preset shortcuts |
55
+
56
+ ## 4. Environment Variables
57
+
58
+ ### CC-Viewer Specific
59
+
60
+ | Variable | Default | Description |
61
+ |----------|---------|-------------|
62
+ | `CCV_LOG_DIR` | `~/.claude/cc-viewer` | Log storage root directory. Special values: `tmp`/`temp` use system temp dir |
63
+ | `CCV_CLI_MODE` | unset | `=1` enables CLI mode (PTY terminal) |
64
+ | `CCV_SDK_MODE` | unset | `=1` enables Agent SDK mode (no terminal) |
65
+ | `CCV_WORKSPACE_MODE` | unset | `=1` enables workspace selection mode |
66
+ | `CCV_PROJECT_DIR` | `process.cwd()` | Project working directory for file operations and Git commands |
67
+ | `CCV_PROXY_PORT` | unset | Local MITM proxy port |
68
+ | `CCV_BYPASS_PERMISSIONS` | unset | `=1` skip tool permission approval (with `--dangerously-skip-permissions`) |
69
+ | `CCV_DISABLE_DELTA` | unset | `=1` disable incremental log storage, write full messages every time |
70
+ | `CCV_DEBUG` | unset | `=1` enable HTTP proxy debug logging |
71
+ | `CCV_DEBUG_PLUGINS` | unset | `=1` enable plugin loading debug logging |
72
+
73
+ ### Internal IPC
74
+
75
+ | Variable | Description |
76
+ |----------|-------------|
77
+ | `CCVIEWER_PORT` | Server port for ask-bridge/perm-bridge communication |
78
+ | `CCV_EDITOR_PORT` | Server port for ccv-editor file editing bridge |
79
+
80
+ ### External (Read-only)
81
+
82
+ | Variable | Description |
83
+ |----------|-------------|
84
+ | `ANTHROPIC_BASE_URL` | Custom Anthropic API address |
85
+ | `SHELL` | User's shell (PTY spawn and shell config detection) |
86
+ | `http_proxy` / `HTTPS_PROXY` etc. | HTTP proxy config (via undici EnvHttpProxyAgent) |
87
+
88
+ ## 5. CLI Arguments
89
+
90
+ ```
91
+ ccv [options] [claude args...]
92
+ ```
93
+
94
+ ### CC-Viewer Options
95
+
96
+ | Argument | Description |
97
+ |----------|-------------|
98
+ | `-logger` | Install/repair Claude Code hooks |
99
+ | `--uninstall` / `-uninstall` | Remove all CC-Viewer integration |
100
+ | `--help` / `-h` / `help` | Show help text |
101
+ | `--version` / `-v` | Show version |
102
+ | `-SDK` / `--sdk` | Use Agent SDK mode |
103
+ | `--d` | Shortcut for `--dangerously-skip-permissions` |
104
+ | `--ad` | Shortcut for `--allow-dangerously-skip-permissions` |
105
+ | `run` | Run command through proxy (`ccv run -- claude ...`) |
106
+
107
+ ### Claude Pass-through (common)
108
+
109
+ | Argument | Description |
110
+ |----------|-------------|
111
+ | `-c` / `--continue` | Continue last session |
112
+ | `-r` / `--resume` | Resume specific session |
113
+ | `-p` / `--print` | Non-interactive output |
114
+ | `--model` | Specify model |
115
+ | `--permission-mode` | Permission mode |
116
+ | `--system-prompt` | Custom system prompt |
117
+ | `--max-budget-usd` | Maximum budget |
118
+
119
+ ## 6. Hook Configuration
120
+
121
+ CC-Viewer auto-registers hooks in `~/.claude/settings.json` under `hooks.PreToolUse`:
122
+
123
+ ### 1. AskUserQuestion Bridge
124
+ - **Matcher**: `"AskUserQuestion"`
125
+ - **Command**: `node <install_dir>/lib/ask-bridge.js`
126
+ - **Purpose**: Forward Claude's questions to Web UI, wait for user answers
127
+
128
+ ### 2. Permission Approval Bridge
129
+ - **Matcher**: `""` (empty = match all tools)
130
+ - **Command**: `node <install_dir>/lib/perm-bridge.js`
131
+ - **Purpose**: Only `Bash`/`Edit`/`Write`/`NotebookEdit` require Web UI approval; others pass through
132
+
133
+ ## 7. Shell Integration
134
+
135
+ CC-Viewer injects a `claude()` function into `~/.zshrc` (or `.bashrc`):
136
+
137
+ ```bash
138
+ # >>> CC-Viewer Auto-Inject >>>
139
+ claude() { ... }
140
+ # <<< CC-Viewer Auto-Inject <<<
141
+ ```
142
+
143
+ All `claude` commands are automatically routed through CC-Viewer proxy for log capture and Web UI features.
144
+
145
+ Uninstall: `ccv --uninstall` or manually delete content between the markers.
146
+
147
+ ## 8. Proxy Configuration (Proxy Profile)
148
+
149
+ Stored in `<log_dir>/profile.json`, managed via the "Proxy Switch" panel in the UI.
150
+
151
+ ```json
152
+ {
153
+ "active": "max",
154
+ "profiles": [
155
+ { "id": "max", "name": "Default" },
156
+ { "id": "my-proxy", "name": "Custom", "baseURL": "https://...", "apiKey": "sk-..." }
157
+ ]
158
+ }
159
+ ```
160
+
161
+ | Field | Description |
162
+ |-------|-------------|
163
+ | `active` | Active profile ID (`"max"` = direct connection, no proxy) |
164
+ | `id` | Unique identifier |
165
+ | `name` | Display name |
166
+ | `baseURL` | Proxy API address (replaces request origin) |
167
+ | `apiKey` | Proxy API key (replaces auth headers) |
168
+ | `models` | Available model list |
169
+ | `activeModel` | Currently selected model |
170
+
171
+ ## 9. Plugin System
172
+
173
+ Plugin directory: `<log_dir>/plugins/`
174
+
175
+ ### Supported Hook Types
176
+
177
+ | Hook | Type | Description |
178
+ |------|------|-------------|
179
+ | `httpsOptions` | Waterfall | Provide HTTPS certificate (return `{ cert, key }` or `{ pfx }`) |
180
+ | `localUrl` | Waterfall | Modify local access URL |
181
+ | `serverStarted` | Parallel | Server startup notification |
182
+ | `serverStopping` | Parallel | Server shutdown notification |
183
+ | `onNewEntry` | Parallel | New log entry written notification |
184
+
185
+ Plugin enable/disable managed via `disabledPlugins` array in `preferences.json`.
186
+
187
+ ## 10. Directory Structure
188
+
189
+ ```
190
+ ~/.claude/cc-viewer/ # Log root directory
191
+ ├── preferences.json # User preferences
192
+ ├── workspaces.json # Workspace registry
193
+ ├── profile.json # Proxy configuration
194
+ ├── plugins/ # Plugin directory
195
+ │ └── my-plugin.js
196
+ ├── <project>/ # Per-project log directory
197
+ │ ├── <project>_20260404_123456.jsonl # JSONL log files
198
+ │ ├── <project>.json # Stats data (background generated)
199
+ │ └── images/ # Persistent uploaded image copies
200
+ └── ...
201
+
202
+ /tmp/cc-viewer-uploads/ # Temporary upload file directory
203
+ ```
204
+
205
+ ## 11. Server Configuration
206
+
207
+ | Setting | Value | Description |
208
+ |---------|-------|-------------|
209
+ | Port range | 7008-7099 | Auto-scans for available port |
210
+ | Bind address | 0.0.0.0 | All network interfaces |
211
+ | Access token | Random 16-byte hex | LAN access requires `?token=xxx`; localhost is exempt |
212
+ | HTTPS | Plugin only | Requires plugin providing `httpsOptions` hook |
213
+ | CORS | `*` | All origins allowed |
214
+ | Upload limit | 50MB | Maximum single file upload size |
215
+
216
+ ## 12. URL Parameters
217
+
218
+ | Parameter | Description |
219
+ |-----------|-------------|
220
+ | `?token=xxx` | LAN access authentication token |
221
+ | `?logfile=path` | Open specific historical log file (read-only mode) |
222
+
223
+ ## 13. localStorage Settings
224
+
225
+ | Key | Description |
226
+ |-----|-------------|
227
+ | `ccv_cacheExpireAt` | Cache countdown expiration time |
228
+ | `ccv_cacheType` | Cache type label |
229
+ | `ccv_sseSlim` | Enable SSE incremental pruning (desktop performance optimization) |
230
+ | `ccv_calibrationModel` | KV-Cache context window calibration model |
231
+ | `ccv_fileExplorerOpen` | File explorer panel toggle |
232
+ | `cc-viewer-terminal-width` | Terminal panel width (pixels) |
@@ -0,0 +1,232 @@
1
+ # CC-Viewer 全局配置参考
2
+
3
+ ## 一、全局设置面板(UI)
4
+
5
+ 通过左上角菜单 → "全局设置" 打开。
6
+
7
+ | 配置项 | 类型 | 默认值 | 说明 |
8
+ |--------|------|--------|------|
9
+ | 过滤无关请求 | 开关 | 开 | 隐藏心跳、count_tokens、子代理等非主代理请求 |
10
+ | 默认展开 Body Diff JSON | 开关 | 关 | 请求详情面板中的 Body Diff 区域默认展开 |
11
+ | 日志目录设置 | 文本输入 | `~/.claude/cc-viewer` | 项目日志的读写根目录,支持 `~/` 展开。修改后回车或失焦保存,立即生效 |
12
+
13
+ ## 二、显示设置面板(UI)
14
+
15
+ 通过左上角菜单 → "显示设置" 打开。
16
+
17
+ | 配置项 | 类型 | 默认值 | 说明 |
18
+ |--------|------|--------|------|
19
+ | 折叠工具结果 | 开关 | 开 | 聊天视图中折叠工具调用结果块 |
20
+ | 展开思考过程 | 开关 | 开 | 默认展开 Claude 的思考/推理过程块 |
21
+ | 完整展示所有内容 | 开关 | 关 | 显示完整的工具调用内容,不截断 |
22
+ | 自动恢复会话 | 开关 + 选项 | 关 | 遇到会话恢复提示时自动选择:`继续` 或 `新建` |
23
+
24
+ ## 三、偏好设置文件
25
+
26
+ 所有 UI 设置持久化到 `<日志目录>/preferences.json`,通过 `/api/preferences` 接口读写。
27
+
28
+ ```json
29
+ {
30
+ "lang": "zh",
31
+ "filterIrrelevant": true,
32
+ "expandDiff": false,
33
+ "collapseToolResults": true,
34
+ "expandThinking": true,
35
+ "showFullToolContent": false,
36
+ "logDir": "~/.claude/cc-viewer",
37
+ "resumeAutoChoice": null,
38
+ "disabledPlugins": [],
39
+ "presetShortcuts": []
40
+ }
41
+ ```
42
+
43
+ | 字段 | 类型 | 说明 |
44
+ |------|------|------|
45
+ | `lang` | string | 界面语言(zh/en/zh-TW/ko/ja/de/es/fr/it/da/pl/ru/ar/no/pt-BR/th/tr/uk) |
46
+ | `filterIrrelevant` | boolean | 过滤无关请求 |
47
+ | `expandDiff` | boolean | 默认展开 Body Diff JSON |
48
+ | `collapseToolResults` | boolean | 折叠工具结果 |
49
+ | `expandThinking` | boolean | 展开思考过程 |
50
+ | `showFullToolContent` | boolean | 完整展示内容 |
51
+ | `logDir` | string | 日志目录路径 |
52
+ | `resumeAutoChoice` | null / "continue" / "new" | 自动恢复会话选择 |
53
+ | `disabledPlugins` | string[] | 已禁用的插件文件名列表 |
54
+ | `presetShortcuts` | array | Agent Team 快捷指令预设 |
55
+
56
+ ## 四、环境变量
57
+
58
+ ### CC-Viewer 专有
59
+
60
+ | 变量名 | 默认值 | 说明 |
61
+ |--------|--------|------|
62
+ | `CCV_LOG_DIR` | `~/.claude/cc-viewer` | 日志存储根目录。特殊值:`tmp`/`temp` 使用系统临时目录 |
63
+ | `CCV_CLI_MODE` | 未设置 | `=1` 启用 CLI 模式(PTY 终端) |
64
+ | `CCV_SDK_MODE` | 未设置 | `=1` 启用 Agent SDK 模式(无终端) |
65
+ | `CCV_WORKSPACE_MODE` | 未设置 | `=1` 启用工作空间选择模式 |
66
+ | `CCV_PROJECT_DIR` | `process.cwd()` | 项目工作目录,用于文件操作和 Git 命令 |
67
+ | `CCV_PROXY_PORT` | 未设置 | 本地 MITM 代理端口 |
68
+ | `CCV_BYPASS_PERMISSIONS` | 未设置 | `=1` 跳过工具权限审批(配合 `--dangerously-skip-permissions`) |
69
+ | `CCV_DISABLE_DELTA` | 未设置 | `=1` 禁用增量日志存储,每次写入完整消息 |
70
+ | `CCV_DEBUG` | 未设置 | `=1` 启用 HTTP 代理调试日志 |
71
+ | `CCV_DEBUG_PLUGINS` | 未设置 | `=1` 启用插件加载调试日志 |
72
+
73
+ ### 内部 IPC
74
+
75
+ | 变量名 | 说明 |
76
+ |--------|------|
77
+ | `CCVIEWER_PORT` | 服务端口,供 ask-bridge/perm-bridge 通信 |
78
+ | `CCV_EDITOR_PORT` | 服务端口,供 ccv-editor 文件编辑桥接 |
79
+
80
+ ### 外部变量(读取)
81
+
82
+ | 变量名 | 说明 |
83
+ |--------|------|
84
+ | `ANTHROPIC_BASE_URL` | 自定义 Anthropic API 地址 |
85
+ | `SHELL` | 用户 Shell(PTY 启动和 Shell 配置检测) |
86
+ | `http_proxy` / `HTTPS_PROXY` 等 | HTTP 代理配置(通过 undici EnvHttpProxyAgent) |
87
+
88
+ ## 五、CLI 命令参数
89
+
90
+ ```
91
+ ccv [选项] [claude 参数...]
92
+ ```
93
+
94
+ ### CC-Viewer 专有选项
95
+
96
+ | 参数 | 说明 |
97
+ |------|------|
98
+ | `-logger` | 安装/修复 Claude Code hooks |
99
+ | `--uninstall` / `-uninstall` | 卸载所有 CC-Viewer 集成 |
100
+ | `--help` / `-h` / `help` | 显示帮助信息 |
101
+ | `--version` / `-v` | 显示版本号 |
102
+ | `-SDK` / `--sdk` | 使用 Agent SDK 模式 |
103
+ | `--d` | `--dangerously-skip-permissions` 简写 |
104
+ | `--ad` | `--allow-dangerously-skip-permissions` 简写 |
105
+ | `run` | 通过代理运行命令(`ccv run -- claude ...`) |
106
+
107
+ ### Claude 透传参数(常用)
108
+
109
+ | 参数 | 说明 |
110
+ |------|------|
111
+ | `-c` / `--continue` | 继续上一次会话 |
112
+ | `-r` / `--resume` | 恢复指定会话 |
113
+ | `-p` / `--print` | 非交互式输出 |
114
+ | `--model` | 指定模型 |
115
+ | `--permission-mode` | 权限模式 |
116
+ | `--system-prompt` | 自定义系统提示词 |
117
+ | `--max-budget-usd` | 最大预算 |
118
+
119
+ ## 六、Hook 配置
120
+
121
+ CC-Viewer 自动注册到 `~/.claude/settings.json` 的 `hooks.PreToolUse` 中:
122
+
123
+ ### 1. AskUserQuestion 桥接
124
+ - **匹配器**: `"AskUserQuestion"`
125
+ - **命令**: `node <安装目录>/lib/ask-bridge.js`
126
+ - **作用**: 将 Claude 的问题转发到 Web UI,等待用户回答
127
+
128
+ ### 2. 权限审批桥接
129
+ - **匹配器**: `""` (空 = 匹配所有工具)
130
+ - **命令**: `node <安装目录>/lib/perm-bridge.js`
131
+ - **作用**: 仅 `Bash`/`Edit`/`Write`/`NotebookEdit` 需要 Web UI 审批,其余自动放行
132
+
133
+ ## 七、Shell 集成
134
+
135
+ CC-Viewer 在 `~/.zshrc`(或 `.bashrc`)中注入 `claude()` 函数:
136
+
137
+ ```bash
138
+ # >>> CC-Viewer Auto-Inject >>>
139
+ claude() { ... }
140
+ # <<< CC-Viewer Auto-Inject <<<
141
+ ```
142
+
143
+ 所有 `claude` 命令自动通过 CC-Viewer 代理,实现日志捕获和 Web UI 功能。
144
+
145
+ 卸载:`ccv --uninstall` 或手动删除标记之间的内容。
146
+
147
+ ## 八、代理配置(Proxy Profile)
148
+
149
+ 存储在 `<日志目录>/profile.json`,通过 UI 的"代理切换"面板管理。
150
+
151
+ ```json
152
+ {
153
+ "active": "max",
154
+ "profiles": [
155
+ { "id": "max", "name": "Default" },
156
+ { "id": "my-proxy", "name": "自定义", "baseURL": "https://...", "apiKey": "sk-..." }
157
+ ]
158
+ }
159
+ ```
160
+
161
+ | 字段 | 说明 |
162
+ |------|------|
163
+ | `active` | 当前激活的配置 ID(`"max"` = 直连,无代理) |
164
+ | `id` | 唯一标识 |
165
+ | `name` | 显示名称 |
166
+ | `baseURL` | 代理 API 地址(替换请求 origin) |
167
+ | `apiKey` | 代理 API 密钥(替换认证头) |
168
+ | `models` | 可用模型列表 |
169
+ | `activeModel` | 当前选中的模型 |
170
+
171
+ ## 九、插件系统
172
+
173
+ 插件目录:`<日志目录>/plugins/`
174
+
175
+ ### 支持的 Hook 类型
176
+
177
+ | Hook | 类型 | 说明 |
178
+ |------|------|------|
179
+ | `httpsOptions` | 瀑布 | 提供 HTTPS 证书(返回 `{ cert, key }` 或 `{ pfx }`) |
180
+ | `localUrl` | 瀑布 | 修改本地访问 URL |
181
+ | `serverStarted` | 并行 | 服务器启动通知 |
182
+ | `serverStopping` | 并行 | 服务器停止通知 |
183
+ | `onNewEntry` | 并行 | 新日志条目写入通知 |
184
+
185
+ 插件启用/禁用通过 `preferences.json` 的 `disabledPlugins` 数组管理。
186
+
187
+ ## 十、目录结构
188
+
189
+ ```
190
+ ~/.claude/cc-viewer/ # 日志根目录
191
+ ├── preferences.json # 用户偏好设置
192
+ ├── workspaces.json # 工作空间注册表
193
+ ├── profile.json # 代理配置
194
+ ├── plugins/ # 插件目录
195
+ │ └── my-plugin.js
196
+ ├── <项目名>/ # 每个项目的日志目录
197
+ │ ├── <项目名>_20260404_123456.jsonl # JSONL 日志文件
198
+ │ ├── <项目名>.json # 统计数据(后台生成)
199
+ │ └── images/ # 上传图片的持久副本
200
+ └── ...
201
+
202
+ /tmp/cc-viewer-uploads/ # 临时上传文件目录
203
+ ```
204
+
205
+ ## 十一、服务器配置
206
+
207
+ | 配置 | 值 | 说明 |
208
+ |------|-----|------|
209
+ | 端口范围 | 7008-7099 | 自动扫描可用端口 |
210
+ | 绑定地址 | 0.0.0.0 | 所有网络接口 |
211
+ | 访问令牌 | 随机 16 字节 hex | 局域网访问需要 `?token=xxx`,本机免认证 |
212
+ | HTTPS | 仅通过插件 | 需要插件提供 `httpsOptions` hook |
213
+ | CORS | `*` | 允许所有来源 |
214
+ | 上传限制 | 50MB | 单文件最大上传大小 |
215
+
216
+ ## 十二、URL 参数
217
+
218
+ | 参数 | 说明 |
219
+ |------|------|
220
+ | `?token=xxx` | 局域网访问认证令牌 |
221
+ | `?logfile=path` | 打开指定历史日志文件(只读模式) |
222
+
223
+ ## 十三、localStorage 配置
224
+
225
+ | 键 | 说明 |
226
+ |-----|------|
227
+ | `ccv_cacheExpireAt` | 缓存倒计时到期时间 |
228
+ | `ccv_cacheType` | 缓存类型标签 |
229
+ | `ccv_sseSlim` | 启用 SSE 增量裁剪(桌面端性能优化) |
230
+ | `ccv_calibrationModel` | KV-Cache 上下文窗口校准模型 |
231
+ | `ccv_fileExplorerOpen` | 文件浏览器面板开关 |
232
+ | `cc-viewer-terminal-width` | 终端面板宽度(像素) |