@deepseekcode/cli 3.0.2 → 3.0.4

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  # @jwcode/cli — JWCode TypeScript CLI
2
2
 
3
- > **JWCode** 是一款 AI 编程助手 CLI 工具,基于 TypeScript + React/Ink 构建,提供交互式终端界面(TUI),与 Java 后端通过 WebSocket 通信,实现 AI 驱动的代码辅助能力。
3
+ > **JWCode** 是一款 AI 编程助手 CLI 工具,基于 TypeScript + Solid/OpenTUI 构建,提供交互式终端界面(TUI),与 Java 后端通过 WebSocket 通信,实现 AI 驱动的代码辅助能力。
4
4
 
5
5
  ---
6
6
 
@@ -160,61 +160,61 @@ export JWCODE_THEME_COLORS='{"primary":"#00ff00","bg":"#1a1a2e"}'
160
160
  ```
161
161
  ts-cli/
162
162
  ├── src/
163
- │ ├── main.ts # 入口文件
164
- │ ├── App.tsx # React 根组件 (Ink)
165
- │ ├── client.ts # WebSocket 客户端
166
- │ ├── config.ts # 配置管理
167
- │ ├── launcher.ts # 后端进程启动器
168
- │ ├── pasteBuffer.ts # 粘贴缓冲区
169
- │ ├── protocol.ts # WebSocket 消息协议
170
- │ ├── store.ts # 全局状态管理
171
- │ ├── theme.ts # 主题系统
172
- │ ├── commands/ # CLI 命令实现
173
- │ ├── components/ # React/Ink UI 组件
174
- │ │ ├── SetupWizard.tsx # 安装向导
175
- │ │ ├── CommandPalette.tsx # 命令面板
176
- │ │ ├── StatusLine.tsx # 状态栏
177
- │ │ ├── TextInput.tsx # 文本输入框
178
- │ │ ├── ApprovalModal.tsx # 审批弹窗
179
- │ │ ├── FilePalette.tsx # 文件选择面板
180
- │ │ └── PlanTaskBoard.tsx # 计划任务面板
181
- ├── hooks/ # React Hooks
182
- │ │ ├── useMouseWheel.ts
183
- │ │ ├── useStreamHandlers.ts
184
- │ │ └── useWebSocket.ts
185
- │ └── __tests__/ # 单元测试
186
- ├── backend/ # Java 后端(独立项目)
187
- ├── .github/workflows/ci.yml # CI 工作流配置
188
- ├── build.mjs # esbuild 构建脚本
163
+ │ ├── main.tsx # 入口 (Bun 打包, Solid+OpenTUI)
164
+ │ ├── client.ts # WebSocket 客户端
165
+ │ ├── config.ts # 配置加载
166
+ │ ├── launcher.ts # Java 后端进程管理
167
+ │ ├── pasteBuffer.ts # 粘贴缓冲
168
+ │ ├── fuzzyMatch.ts # 文件名模糊匹配
169
+ │ ├── textInputGrapheme.ts # grapheme 感知输入
170
+ │ ├── protocol.ts # WebSocket 消息协议
171
+ │ ├── update.ts # npm 版本自检
172
+ │ ├── commands/ # 斜杠命令定义
173
+ │ ├── solid/
174
+ │ │ ├── components/ # 17 个 UI 组件 (含 messages/ 子目录)
175
+ │ │ ├── hooks/ # AppStateProvider, ClientProvider, ...
176
+ │ │ ├── context/ # theme, kv, language, route, ...
177
+ │ │ ├── ui/ # dialog, toast
178
+ │ │ ├── util/ # clipboard, keybind, ...
179
+ │ │ ├── i18n/ # en, zh
180
+ │ │ └── theme/ # 33 个 JSON 主题
181
+ └── __tests__/ # vitest
182
+ ├── backend/ # 打包后的 Java jar + jre/
183
+ ├── .github/workflows/ci.yml # CI 工作流配置
184
+ ├── build.mjs # Bun + ProGuard + jlink 构建
189
185
  ├── package.json
190
186
  ├── tsconfig.json
191
- └── proguard.conf # Java 后端混淆配置
187
+ └── proguard.conf # Java 后端混淆配置
192
188
  ```
193
189
 
194
190
  ### 架构流程图
195
191
 
196
192
  ```
197
- ┌─────────────────────────────────────────────┐
198
- │ 终端用户 (Terminal)
199
- └──────────────────┬──────────────────────────┘
193
+ ┌────────────────────────────────────────────┐
194
+ │ 终端用户 (Terminal)
195
+ └──────────────────┬─────────────────────────┘
200
196
  │ stdin/stdout
201
- ┌──────────────────▼──────────────────────────┐
202
- @jwcode/cli (TypeScript TUI) │
203
- ┌──────────┐ ┌──────────────────────┐
204
- │ Commands │ │ React/Ink UI
205
- │ (CLI) │ │ (组件树)
206
- └─────┬────┘ └──────────┬───────────┘
207
- │ │ │
208
- ┌─────▼──────────────────▼───────────┐
209
- JwCodeClient
210
- │ │ (WebSocket 客户端) │ │
211
- └─────────────────┬──────────────────┘
212
- └─────────────────────┼───────────────────────┘
213
- WebSocket (ws://)
214
- ┌─────────────────────▼───────────────────────┐
215
- Java 后端服务
216
- │ (WebSocket Server + AI 引擎) │
217
- └─────────────────────────────────────────────┘
197
+ ┌──────────────────▼─────────────────────────┐
198
+ @jwcode/cli (TypeScript TUI) │
199
+ ┌──────────┐ ┌───────────────────────┐
200
+ │ Commands │ │ Solid/OpenTUI UI
201
+ │ (CLI) │ │ (12 个组件 + 33 主题)
202
+ └─────┬────┘ └──────────┬────────────┘
203
+ │ │ │
204
+ ┌─────▼──────────────────▼────────────┐
205
+ Providers: AppState/Client/KV/Theme
206
+ └─────────────────┬───────────────────┘
207
+
208
+ │ ┌─────────────────▼───────────────────┐ │
209
+ │ JwCodeClient │ │
210
+ │ │ (WebSocket 客户端) │ │
211
+ └─────────────────┬───────────────────┘
212
+ └────────────────────┼──────────────────────┘
213
+ │ WebSocket (ws://)
214
+ ┌────────────────────┼──────────────────────┐
215
+ │ ▼ │
216
+ │ Java 后端服务 (WebSocket + AI) │
217
+ └───────────────────────────────────────────┘
218
218
  ```
219
219
 
220
220
  ---
@@ -258,7 +258,7 @@ npm run build
258
258
  node dist/cli.js version
259
259
  ```
260
260
 
261
- 构建产物输出到 `dist/cli.js`,使用 **esbuild** 打包为单个 ESM 文件,外部依赖不打包。
261
+ 构建产物输出到 `dist/cli.js`,使用 **Bun bundler** + `@opentui/solid/bun-plugin` 打包,外部依赖不打包。
262
262
 
263
263
  ### 代码风格
264
264
 
@@ -282,10 +282,10 @@ node dist/cli.js version
282
282
 
283
283
  | 测试文件 | 覆盖模块 | 说明 |
284
284
  |---------|---------|------|
285
- | `store.test.ts` | `store.ts` | 全局状态管理单元测试 |
286
- | `theme.test.ts` | `theme.ts` | 主题系统单元测试 |
285
+ | `store.test.ts` | `useStreamHandlers` | appendMessage 队列及 cleanArgs 测试 |
286
+ | `theme.test.ts` | `context/theme` | 33 主题 JSON 校验及颜色引用验证 |
287
287
  | `pasteBuffer.test.ts` | `pasteBuffer.ts` | 粘贴缓冲区测试 |
288
- | `tokenEstimate.test.ts` | 工具函数 | Token 估算测试 |
288
+ | `tokenEstimate.test.ts` | `TextInput` | Token 估算测试 (CJK/English) |
289
289
 
290
290
  ### 编写新测试
291
291
 
@@ -344,7 +344,27 @@ jwcode start -p 8080
344
344
  jwcode run -b http://localhost:17340
345
345
  ```
346
346
 
347
- ### 3. 构建后运行报错
347
+ ### 3. 鼠标右键/粘贴
348
+
349
+ - **有选中文本时右键**:复制选中内容到剪贴板
350
+ - **无选中文本时右键**:从剪贴板粘贴内容到输入框
351
+ - **长按左键(300ms)**:选中光标处单词并自动复制
352
+
353
+ ### 4. @ 文件引用
354
+
355
+ 输入 @ 后自动弹出文件选择面板,支持:
356
+ - 通过后端 API 获取文件列表
357
+ - API 不可用时自动回退到本地文件系统扫描(最多 3 层,跳过 node_modules/.git 等目录)
358
+
359
+ ### 5. 退出行为
360
+
361
+ CLI 退出时(Ctrl+C 或 /exit)自动执行:
362
+ 1. 通过 WebSocket 发送 exit 信号通知后端清理会话
363
+ 2. 优雅关闭 WebSocket 连接
364
+ 3. 优雅关闭 Java 后端进程(先 taskkill 再 /F 兜底)
365
+ 4. 清理 daemon 缓存文件
366
+
367
+ ### 6. 构建后运行报错
348
368
 
349
369
  ```bash
350
370
  # 清理后重新构建
@@ -352,7 +372,7 @@ rm -rf dist
352
372
  npm run build
353
373
  ```
354
374
 
355
- ### 4. `EPIPE` / `ECONNRESET` 错误
375
+ ### 7. `EPIPE` / `ECONNRESET` 错误
356
376
 
357
377
  这是终端断开时的正常行为,不影响程序运行。项目已自动处理这些信号。
358
378
 
@@ -368,6 +388,7 @@ npm run build
368
388
 
369
389
  | 版本 | 日期 | 说明 |
370
390
  |------|------|------|
371
- | 3.0.0 | | 当前版本,TypeScript 重写,React/Ink TUI |
391
+ | 3.1.0 | 2026-06 | 消息组件拆分、输入框修复、右键粘贴、退出同步 |
392
+ | 3.0.0 | — | 当前版本,TypeScript 重写,Solid/OpenTUI TUI |
372
393
  | 2.x | — | Python 版本 CLI |
373
394
  | 1.x | — | 初版 CLI |
Binary file