@adversity/coding-tool-x 2.2.0 → 2.3.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.
@@ -1,396 +0,0 @@
1
- # 项目结构
2
-
3
- ## 目录结构
4
-
5
- ```
6
- cc-tool/
7
- ├── bin/
8
- │ └── cc.js # CLI 入口脚本
9
- ├── src/
10
- │ ├── commands/ # CLI 命令处理模块
11
- │ │ ├── list.js # 列出会话
12
- │ │ ├── search.js # 搜索会话
13
- │ │ ├── switch.js # 切换项目
14
- │ │ └── resume.js # 恢复会话
15
- │ ├── utils/ # 工具函数
16
- │ │ ├── session.js # 会话相关工具
17
- │ │ └── format.js # 格式化工具
18
- │ ├── ui/ # CLI UI 相关
19
- │ │ ├── menu.js # 主菜单
20
- │ │ └── prompts.js # 交互提示
21
- │ ├── config/ # 配置管理
22
- │ │ ├── default.js # 默认配置
23
- │ │ └── loader.js # 配置加载器
24
- │ ├── server/ # 后端服务(v2.0 新增)
25
- │ │ ├── index.js # 服务入口
26
- │ │ ├── proxy-server.js # HTTP 代理服务器
27
- │ │ ├── websocket-server.js # WebSocket 服务器
28
- │ │ └── api/ # RESTful API 路由
29
- │ │ ├── projects.js # 项目管理 API
30
- │ │ ├── sessions.js # 会话管理 API
31
- │ │ ├── channels.js # 渠道管理 API
32
- │ │ └── proxy.js # 代理控制 API
33
- │ ├── web/ # 前端 Web UI(v2.0 新增)
34
- │ │ ├── src/
35
- │ │ │ ├── components/ # Vue 组件
36
- │ │ │ │ ├── Layout.vue # 主布局
37
- │ │ │ │ ├── RightPanel.vue # 右侧面板(渠道+日志)
38
- │ │ │ │ ├── ProjectCard.vue # 项目卡片
39
- │ │ │ │ ├── SessionCard.vue # 会话卡片
40
- │ │ │ │ ├── ProxyLogs.vue # 实时日志
41
- │ │ │ │ └── RecentSessionsDrawer.vue # 最近对话
42
- │ │ │ ├── views/ # 页面视图
43
- │ │ │ │ ├── ProjectList.vue # 项目列表页
44
- │ │ │ │ └── SessionList.vue # 会话列表页
45
- │ │ │ ├── stores/ # Pinia 状态管理
46
- │ │ │ │ └── sessions.js # 会话状态
47
- │ │ │ ├── api/ # API 客户端
48
- │ │ │ │ └── index.js # Axios 封装
49
- │ │ │ ├── router/ # 路由配置
50
- │ │ │ │ └── index.js
51
- │ │ │ ├── utils/ # 前端工具
52
- │ │ │ │ └── message.js # 消息提示
53
- │ │ │ ├── App.vue # 根组件
54
- │ │ │ └── main.js # 入口文件
55
- │ │ ├── public/ # 静态资源
56
- │ │ │ ├── logo.png # Logo
57
- │ │ │ └── favicon.ico # 图标
58
- │ │ ├── index.html
59
- │ │ ├── package.json
60
- │ │ └── vite.config.js # Vite 配置
61
- │ └── index.js # CLI 主入口
62
- ├── docs/ # 文档
63
- │ ├── CHANGELOG.md # 更新日志
64
- │ ├── PROJECT_STRUCTURE.md # 本文件
65
- │ ├── logo.png # Logo 图片
66
- │ └── cc-tool.png # 截图
67
- ├── test/ # 测试文件
68
- ├── .gitignore
69
- ├── .npmignore
70
- ├── package.json
71
- ├── config.json
72
- └── README.md
73
- ```
74
-
75
- ## 架构说明
76
-
77
- ### v2.0 三层架构
78
-
79
- ```
80
- ┌─────────────────────────────────────────────────────┐
81
- │ 前端层 (Vue 3) │
82
- │ ┌──────────────┐ ┌──────────────┐ ┌──────────┐ │
83
- │ │ 项目列表 │ │ 会话列表 │ │ 全局搜索 │ │
84
- │ └──────────────┘ └──────────────┘ └──────────┘ │
85
- │ ┌──────────────┐ ┌──────────────┐ │
86
- │ │ 渠道管理 │ │ 实时日志 │ │
87
- │ └──────────────┘ └──────────────┘ │
88
- └─────────────────────────────────────────────────────┘
89
- ↕ HTTP/WebSocket
90
- ┌─────────────────────────────────────────────────────┐
91
- │ 后端服务层 (Express) │
92
- │ ┌──────────────┐ ┌──────────────┐ ┌──────────┐ │
93
- │ │ Web Server │ │ Proxy Server │ │ WebSocket│ │
94
- │ │ (port 9999) │ │ (动态端口) │ │(port 10099)│
95
- │ └──────────────┘ └──────────────┘ └──────────┘ │
96
- │ ↓ ↓ ↓ │
97
- │ ┌──────────────────────────────────────────────┐ │
98
- │ │ RESTful API 路由 │ │
99
- │ │ /api/projects /api/sessions │ │
100
- │ │ /api/channels /api/proxy │ │
101
- │ └──────────────────────────────────────────────┘ │
102
- └─────────────────────────────────────────────────────┘
103
-
104
- ┌─────────────────────────────────────────────────────┐
105
- │ 数据层 (File System) │
106
- │ ~/.claude/projects/ - ClaudeCode 项目 │
107
- │ ~/.claude/cc-tool/ - 配置文件 │
108
- │ ├── aliases.json - 会话别名 │
109
- │ ├── channels.json - API 渠道 │
110
- │ ├── proxy-logs.json - 实时日志 │
111
- │ └── project-order.json - 项目排序 │
112
- └─────────────────────────────────────────────────────┘
113
- ```
114
-
115
- ## 模块说明
116
-
117
- ### CLI 模块 (src/commands/, src/ui/)
118
-
119
- **传统命令行模式,v1.x 功能保留**
120
-
121
- - **list.js**: 列出会话,处理会话列表显示和选择
122
- - **search.js**: 搜索会话,支持关键词搜索
123
- - **switch.js**: 切换项目,管理多个 Claude 项目
124
- - **resume.js**: 恢复会话,启动 Claude CLI
125
- - **menu.js**: 主菜单显示
126
- - **prompts.js**: 各种交互提示
127
-
128
- ### 后端服务 (src/server/)
129
-
130
- **v2.0 新增的 Web 服务器**
131
-
132
- #### 核心服务
133
-
134
- - **index.js**: 服务主入口,启动 Express 服务器、WebSocket 服务器
135
- - **proxy-server.js**: HTTP 代理服务器,实现动态切换渠道的核心功能
136
- - **websocket-server.js**: WebSocket 服务器,实时推送日志
137
-
138
- #### API 路由
139
-
140
- ##### /api/projects
141
- - `GET /api/projects` - 获取所有项目列表
142
- - `POST /api/projects/:name` - 删除项目
143
-
144
- ##### /api/sessions
145
- - `GET /api/sessions/:projectName` - 获取项目的会话列表
146
- - `POST /api/sessions/:projectName/:sessionId/launch` - 启动会话
147
- - `POST /api/sessions/:projectName/:sessionId/fork` - Fork 会话
148
- - `POST /api/sessions/:projectName/:sessionId/alias` - 设置别名
149
- - `DELETE /api/sessions/:projectName/:sessionId` - 删除会话
150
- - `POST /api/sessions/search` - 全局搜索会话
151
- - `GET /api/sessions/recent` - 获取最近会话
152
-
153
- ##### /api/channels
154
- - `GET /api/channels` - 获取所有渠道
155
- - `POST /api/channels` - 创建渠道
156
- - `PUT /api/channels/:id` - 更新渠道
157
- - `DELETE /api/channels/:id` - 删除渠道
158
- - `POST /api/channels/:id/activate` - 激活渠道
159
-
160
- ##### /api/proxy
161
- - `GET /api/proxy/status` - 获取代理状态
162
- - `POST /api/proxy/start` - 启动代理
163
- - `POST /api/proxy/stop` - 停止代理
164
- - `POST /api/proxy/logs/clear` - 清空日志
165
-
166
- ### 前端模块 (src/web/)
167
-
168
- **v2.0 全新的 Web UI**
169
-
170
- #### 组件层
171
-
172
- **布局组件**
173
- - `Layout.vue`: 主布局,包含 header 和面板控制
174
- - `RightPanel.vue`: 右侧面板,集成渠道管理和实时日志
175
-
176
- **功能组件**
177
- - `ProjectCard.vue`: 项目卡片,支持拖拽排序
178
- - `SessionCard.vue`: 会话卡片,显示会话信息
179
- - `ProxyLogs.vue`: 实时日志组件,WebSocket 连接
180
- - `RecentSessionsDrawer.vue`: 最近对话抽屉
181
-
182
- #### 视图层
183
-
184
- - `ProjectList.vue`: 项目列表页,支持搜索和全局搜索
185
- - `SessionList.vue`: 会话列表页,显示项目的所有会话
186
-
187
- #### 状态管理
188
-
189
- **Pinia Store (stores/sessions.js)**
190
- - 项目列表状态
191
- - 会话列表状态
192
- - 加载状态和错误处理
193
- - 项目排序管理
194
-
195
- #### 路由
196
-
197
- ```javascript
198
- / → ProjectList (项目列表)
199
- /sessions/:projectName → SessionList (会话列表)
200
- /:pathMatch(.*) → 重定向到 /
201
- ```
202
-
203
- ### 工具模块 (src/utils/)
204
-
205
- - **session.js**: 会话文件读取、解析、信息提取
206
- - **format.js**: 时间、大小、文本格式化
207
-
208
- ### 配置模块 (src/config/)
209
-
210
- - **default.js**: 默认配置定义
211
- - **loader.js**: 配置加载和保存
212
-
213
- ## 数据流
214
-
215
- ### CLI 模式数据流
216
-
217
- ```
218
- 用户启动 cc
219
-
220
- bin/cc.js → src/index.js
221
-
222
- 显示主菜单 (ui/menu.js)
223
-
224
- 用户选择操作
225
-
226
- 调用对应命令 (commands/*)
227
-
228
- 使用工具函数处理 (utils/*)
229
-
230
- 显示交互提示 (ui/prompts.js)
231
-
232
- 恢复会话 (commands/resume.js)
233
-
234
- 启动 Claude CLI
235
- ```
236
-
237
- ### Web UI 模式数据流
238
-
239
- ```
240
- 用户访问 http://localhost:9999
241
-
242
- Vue Router 路由到对应页面
243
-
244
- 组件调用 API 客户端 (api/index.js)
245
-
246
- 发送 HTTP 请求到后端 API
247
-
248
- Express 路由处理请求 (server/api/*)
249
-
250
- 读取/修改文件系统数据
251
-
252
- 返回 JSON 数据
253
-
254
- Pinia Store 更新状态
255
-
256
- Vue 组件响应式更新 UI
257
- ```
258
-
259
- ### 动态切换渠道流程
260
-
261
- ```
262
- 用户在 Web UI 切换渠道
263
-
264
- POST /api/channels/:id/activate
265
-
266
- 更新 channels.json,标记新渠道为 active
267
-
268
- WebSocket 推送切换日志
269
-
270
- ClaudeCode 下次 API 请求
271
-
272
- 经过代理服务器 (127.0.0.1:代理端口)
273
-
274
- 代理服务器读取 active 渠道配置
275
-
276
- 转发请求到新的 API 端点
277
-
278
- 返回响应
279
-
280
- WebSocket 推送请求日志(Token 统计)
281
- ```
282
-
283
- ### WebSocket 实时日志流程
284
-
285
- ```
286
- 浏览器连接 ws://localhost:10099/ws
287
-
288
- WebSocket 服务器接受连接
289
-
290
- 发送历史日志(最多100条)
291
-
292
- 监听后端事件:
293
- - 渠道切换事件 → broadcastLog(action)
294
- - 会话启动事件 → broadcastLog(action)
295
- - 代理请求事件 → broadcastLog(request data)
296
-
297
- 实时推送到所有连接的客户端
298
-
299
- 前端接收日志 → 更新 UI → 自动滚动
300
- ```
301
-
302
- ## 技术栈
303
-
304
- ### 后端
305
- - **Node.js** - 运行环境
306
- - **Express.js** - Web 服务器框架
307
- - **ws** - WebSocket 库
308
- - **http-proxy** - HTTP 代理库
309
- - **inquirer** - CLI 交互(v1.x)
310
- - **chalk** - 彩色输出(v1.x)
311
- - **ora** - 加载动画(v1.x)
312
-
313
- ### 前端
314
- - **Vue 3** - 渐进式框架
315
- - **Naive UI** - UI 组件库
316
- - **Pinia** - 状态管理
317
- - **Vue Router** - 路由管理
318
- - **VueDraggable** - 拖拽排序
319
- - **Axios** - HTTP 客户端
320
- - **Vite** - 构建工具
321
-
322
- ## 扩展指南
323
-
324
- ### 添加新的 API 路由
325
-
326
- 1. 在 `src/server/api/` 创建新路由文件
327
- 2. 定义路由处理函数
328
- 3. 在 `src/server/index.js` 中注册路由
329
- 4. 在前端 `src/web/src/api/index.js` 添加对应方法
330
-
331
- 示例:
332
- ```javascript
333
- // src/server/api/example.js
334
- const express = require('express');
335
- const router = express.Router();
336
-
337
- router.get('/', (req, res) => {
338
- res.json({ message: 'Hello' });
339
- });
340
-
341
- module.exports = router;
342
-
343
- // src/server/index.js
344
- const exampleRouter = require('./api/example');
345
- app.use('/api/example', exampleRouter);
346
-
347
- // src/web/src/api/index.js
348
- async getExample() {
349
- const response = await client.get('/example')
350
- return response.data
351
- }
352
- ```
353
-
354
- ### 添加新的 Vue 组件
355
-
356
- 1. 在 `src/web/src/components/` 创建组件文件
357
- 2. 使用 Vue 3 Composition API
358
- 3. 引入 Naive UI 组件
359
- 4. 在需要的页面中导入使用
360
-
361
- ### 添加 WebSocket 事件
362
-
363
- 1. 在后端代码中调用 `broadcastLog(data)`
364
- 2. 数据会自动推送到所有连接的客户端
365
- 3. 前端 `ProxyLogs.vue` 会自动接收并显示
366
-
367
- 示例:
368
- ```javascript
369
- // 后端任意位置
370
- const { broadcastLog } = require('./websocket-server');
371
-
372
- broadcastLog({
373
- type: 'action',
374
- action: 'custom_event',
375
- message: '自定义事件发生',
376
- timestamp: Date.now()
377
- });
378
- ```
379
-
380
- ## 设计原则
381
-
382
- - **单一职责**: 每个模块只负责一个功能
383
- - **低耦合**: 通过参数传递依赖,避免全局状态
384
- - **可测试**: 纯函数设计,易于单元测试
385
- - **可扩展**: 模块化架构,易于添加新功能
386
- - **响应式**: 前端使用 Vue 3 响应式系统
387
- - **实时性**: WebSocket 实时通信
388
- - **持久化**: 所有配置和状态自动保存
389
-
390
- ## 性能优化
391
-
392
- - **大文件优化**: 会话文件大于 10MB 时,只读取必要部分
393
- - **WebSocket 重连**: 最多 3 次重连,指数退避(5s, 10s, 15s)
394
- - **API 轮询**: 从 5s 优化到 30s,减少服务器压力
395
- - **日志限制**: 最多保留 100 条日志,防止内存溢出
396
- - **按需加载**: 路由懒加载,组件按需引入