@kavienw/deepseek-cli 0.1.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.
Files changed (64) hide show
  1. package/README.md +470 -0
  2. package/dist/agent.js +864 -0
  3. package/dist/agent.js.map +1 -0
  4. package/dist/attachments.js +54 -0
  5. package/dist/attachments.js.map +1 -0
  6. package/dist/btw.js +52 -0
  7. package/dist/btw.js.map +1 -0
  8. package/dist/client.js +88 -0
  9. package/dist/client.js.map +1 -0
  10. package/dist/commands.js +922 -0
  11. package/dist/commands.js.map +1 -0
  12. package/dist/config.js +98 -0
  13. package/dist/config.js.map +1 -0
  14. package/dist/hooks.js +90 -0
  15. package/dist/hooks.js.map +1 -0
  16. package/dist/index.js +149 -0
  17. package/dist/index.js.map +1 -0
  18. package/dist/mcp.js +408 -0
  19. package/dist/mcp.js.map +1 -0
  20. package/dist/permissions.js +30 -0
  21. package/dist/permissions.js.map +1 -0
  22. package/dist/plugins.js +341 -0
  23. package/dist/plugins.js.map +1 -0
  24. package/dist/project.js +114 -0
  25. package/dist/project.js.map +1 -0
  26. package/dist/session.js +57 -0
  27. package/dist/session.js.map +1 -0
  28. package/dist/skills.js +147 -0
  29. package/dist/skills.js.map +1 -0
  30. package/dist/todo.js +67 -0
  31. package/dist/todo.js.map +1 -0
  32. package/dist/tools/bash.js +61 -0
  33. package/dist/tools/bash.js.map +1 -0
  34. package/dist/tools/diff.js +26 -0
  35. package/dist/tools/diff.js.map +1 -0
  36. package/dist/tools/edit.js +73 -0
  37. package/dist/tools/edit.js.map +1 -0
  38. package/dist/tools/glob.js +47 -0
  39. package/dist/tools/glob.js.map +1 -0
  40. package/dist/tools/grep.js +133 -0
  41. package/dist/tools/grep.js.map +1 -0
  42. package/dist/tools/index.js +60 -0
  43. package/dist/tools/index.js.map +1 -0
  44. package/dist/tools/read.js +62 -0
  45. package/dist/tools/read.js.map +1 -0
  46. package/dist/tools/setThinking.js +46 -0
  47. package/dist/tools/setThinking.js.map +1 -0
  48. package/dist/tools/task.js +40 -0
  49. package/dist/tools/task.js.map +1 -0
  50. package/dist/tools/todo.js +73 -0
  51. package/dist/tools/todo.js.map +1 -0
  52. package/dist/tools/types.js +2 -0
  53. package/dist/tools/types.js.map +1 -0
  54. package/dist/tools/webFetch.js +64 -0
  55. package/dist/tools/webFetch.js.map +1 -0
  56. package/dist/tools/webSearch.js +200 -0
  57. package/dist/tools/webSearch.js.map +1 -0
  58. package/dist/tools/write.js +46 -0
  59. package/dist/tools/write.js.map +1 -0
  60. package/dist/ui/render.js +248 -0
  61. package/dist/ui/render.js.map +1 -0
  62. package/dist/ui/repl.js +429 -0
  63. package/dist/ui/repl.js.map +1 -0
  64. package/package.json +48 -0
package/README.md ADDED
@@ -0,0 +1,470 @@
1
+ # DeepSeek CLI
2
+
3
+ 基于 DeepSeek 模型的智能体编程命令行工具,提供类似 Claude Code 的交互体验——直接在终端里让 AI 阅读你的代码库、编辑文件、执行命令、联网搜索。内置工具调用、权限确认、项目记忆、会话管理、上下文压缩、**检查点回溯**、**子代理**、**MCP 服务器**、**工具钩子**与**插件系统**。
4
+
5
+ ## 目录
6
+
7
+ - [快速开始](#快速开始)
8
+ - [核心概念](#核心概念)
9
+ - [智能体循环](#智能体循环)
10
+ - [工作模式](#工作模式)
11
+ - [项目记忆](#项目记忆)
12
+ - [输入与交互快捷方式](#输入与交互快捷方式)
13
+ - [会话管理](#会话管理)
14
+ - [检查点与回溯](#检查点与回溯)
15
+ - [上下文压缩](#上下文压缩)
16
+ - [内置工具](#内置工具)
17
+ - [斜杠命令](#斜杠命令)
18
+ - [扩展能力](#扩展能力)
19
+ - [自定义技能](#自定义技能)
20
+ - [子代理](#子代理)
21
+ - [MCP 服务器](#mcp-服务器)
22
+ - [工具钩子](#工具钩子)
23
+ - [插件系统](#插件系统)
24
+ - [配置](#配置)
25
+ - [配置文件](#配置文件)
26
+ - [环境变量](#环境变量)
27
+ - [联网搜索](#联网搜索)
28
+ - [图片与多模态](#图片与多模态)
29
+ - [CLI 参数](#cli-参数)
30
+ - [支持的模型](#支持的模型)
31
+ - [开发](#开发)
32
+
33
+ ## 快速开始
34
+
35
+ ### 前置要求
36
+
37
+ - **Node.js** >= 18
38
+ - **DeepSeek API Key**(在 [platform.deepseek.com](https://platform.deepseek.com/api_keys) 获取)
39
+
40
+ ### 安装与启动
41
+
42
+ ```bash
43
+ # 克隆并安装依赖
44
+ git clone <repo-url> deepseek-cli
45
+ cd deepseek-cli
46
+ npm install
47
+
48
+ # 编译 TypeScript
49
+ npm run build
50
+
51
+ # 设置 API 密钥
52
+ export DEEPSEEK_API_KEY="sk-xxxxxxxxxxxxxxxx"
53
+
54
+ # 启动交互式 REPL
55
+ npm start
56
+ # 或者开发模式直跑
57
+ npm run dev
58
+ ```
59
+
60
+ 首次启动时若未设置环境变量,CLI 会提示你输入 API 密钥并可选保存到配置文件。
61
+ 编译后 `dist/index.js` 注册为 `deepseek` 命令(package.json 的 `bin` 字段),可 `npm link` 后全局使用。
62
+
63
+ ### 第一个任务
64
+
65
+ ```bash
66
+ # 单次提问模式(问完即退出)
67
+ deepseek "总结一下这个项目的功能和结构"
68
+
69
+ # 交互模式
70
+ deepseek
71
+ ▸ 帮我看看 src/index.ts 的入口逻辑
72
+ ▸ 写一个对 agent.ts 的单元测试
73
+ ```
74
+
75
+ ## 核心概念
76
+
77
+ ### 智能体循环
78
+
79
+ DeepSeek CLI 运行一个**智能体循环(Agent Loop)**:
80
+
81
+ 1. **接收**你的自然语言指令
82
+ 2. **理解**——自动读取项目指令文件(`DEEPSEEK.md`)、Git 状态、上次会话摘要
83
+ 3. **规划**——需要多步骤时自动创建待办列表(`todo_write`)
84
+ 4. **执行**——调用内置工具读取文件、搜索代码、运行命令、编辑文件
85
+ 5. **验证**——每步操作都有结果反馈,出错会自行修复
86
+ 6. **循环**——反复执行直到完成任务(最多 25 轮工具调用)
87
+
88
+ 核心循环位于 `src/agent.ts`,包含流式响应、推理内容管理、权限控制、Hook 触发、检查点快照与自动压缩。生成过程中按 **Esc** 或 **Ctrl-C** 可随时中断当前回合。
89
+
90
+ ### 工作模式
91
+
92
+ | 模式 | 用法 | 说明 |
93
+ |------|------|------|
94
+ | **交互 REPL** | `deepseek` | 多轮对话,支持多行输入(行末 `\` 续行) |
95
+ | **单次提问** | `deepseek "任务描述"` | 执行一次后打印结果退出 |
96
+ | **管道输入** | `echo "log内容" \| deepseek` | 标准输入作为提示词 |
97
+ | **恢复会话** | `deepseek --continue` | 恢复上次保存的项目会话后再执行 |
98
+ | **自动审批** | `deepseek --yes "修复lint错误"` | 跳过所有权限确认(谨慎使用) |
99
+
100
+ ### 项目记忆
101
+
102
+ CLI 启动时会自动从项目目录加载指令文件,优先级从根到当前目录:
103
+
104
+ - `DEEPSEEK.md` —— 项目专属指令文件
105
+ - `CLAUDE.md` —— 兼容 Claude Code 格式
106
+ - `AGENTS.md` —— 兼容其他 Agent CLI
107
+
108
+ 这些内容会注入系统提示词,让模型了解项目的技术栈、目录结构、构建命令与编码规范。
109
+
110
+ **智能初始化**:运行 `/init`,Agent 会主动勘探项目(列目录、读 `package.json`/README/配置/入口),据此生成一份基于真实内容的 `DEEPSEEK.md`,而非套模板。
111
+
112
+ ### 输入与交互快捷方式
113
+
114
+ | 快捷方式 | 作用 |
115
+ |------|------|
116
+ | `@path/to/file.ts` | 在提示词中内联引用文件内容(单文件上限 50,000 字符) |
117
+ | **拖拽文件/图片到窗口** | 终端会插入绝对路径,CLI 自动识别为附件,无需 `@` 前缀(支持空格转义/引号路径、混合文本、多文件) |
118
+ | `# 这个项目用 PostgreSQL` | 一句话写入项目记忆,自动追加到 `DEEPSEEK.md` 的 `## Notes` |
119
+ | `! ls -la` | 直接执行 Shell 命令,不经过 Agent |
120
+ | **Esc / Ctrl-C** | 中断正在进行的生成 |
121
+
122
+ 文件编辑(`write_file`/`edit_file`)会以**彩色 diff** 展示具体改动。
123
+
124
+ ### 会话管理
125
+
126
+ 每个项目的会话自动保存到 `~/.deepseek-cli/sessions/<hash>.json`(以项目绝对路径的 SHA256 哈希为键),进入 REPL 时自动恢复。
127
+
128
+ ```bash
129
+ # 交互模式中
130
+ /save # 手动保存当前会话
131
+ /resume # 恢复上次保存的会话
132
+ /clear # 清除对话历史及持久会话
133
+
134
+ # CLI 参数
135
+ deepseek --continue "继续上次的登录模块开发"
136
+ deepseek --resume # 别名
137
+ ```
138
+
139
+ ### 检查点与回溯
140
+
141
+ CLI 在**每个用户回合开始前自动创建检查点**,快照当时的对话;回合内 `write_file`/`edit_file` 修改文件前会记录文件原内容。你可以随时回退:
142
+
143
+ ```bash
144
+ /rewind # 交互式选择回退到哪个检查点
145
+ /rewind 2 # 直接回退到第 2 个检查点
146
+ /undo # 回退最近一个回合
147
+ ```
148
+
149
+ 回退会**同时还原对话历史和文件**——把改过的文件还原到该检查点时的内容,回合内**新建的文件会被删除**,并丢弃该点之后的检查点。
150
+
151
+ > 说明:检查点为**会话内内存态**(进程退出即失,与 Claude Code 的会话内回溯一致),不写盘以避免会话膨胀;文件 undo 仅覆盖经 `write_file`/`edit_file` 工具的改动,不含 `!shell` 原始命令。
152
+
153
+ ### 上下文压缩
154
+
155
+ 当对话达到约 **48,000 token** 或 **80 条消息**时,系统会自动压缩上下文:
156
+
157
+ - 将完整对话发送给模型生成**持续性摘要**
158
+ - 清空消息历史,把摘要注入下一轮系统提示词
159
+ - 也可手动触发:`/compress`
160
+
161
+ 压缩摘要随会话持久化,恢复会话时继续有效。
162
+
163
+ ## 内置工具
164
+
165
+ | 工具 | 功能 | 需审批 |
166
+ |------|------|--------|
167
+ | `read_file` | 读取文件内容(支持偏移量和行数限制) | ✗ |
168
+ | `write_file` | 创建或覆盖文件(自动建父目录,展示 diff) | ✓ |
169
+ | `edit_file` | 精确字符串替换编辑(展示 diff) | ✓ |
170
+ | `bash` | 执行 Shell 命令(超时默认 120s,最长 600s) | ✓ |
171
+ | `search_text` | 正则搜索文件内容(优先 ripgrep,回退 JS) | ✗ |
172
+ | `list_files` | Glob 模式文件列表 | ✗ |
173
+ | `web_search` | 联网搜索(博查 / Tavily / DuckDuckGo,见[联网搜索](#联网搜索)) | ✗ |
174
+ | `web_fetch` | 抓取网页并转纯文本 | ✗ |
175
+ | `set_thinking` | 用对话开关推理显示(off/collapsed/full) | ✗ |
176
+ | `todo_read` | 读取当前待办列表 | ✗ |
177
+ | `todo_write` | 创建/更新待办列表(同时只有一个 in_progress) | ✗ |
178
+ | `task` | 委派一个**隔离子代理**完成子任务并返回结果(见[子代理](#子代理)) | ✗ |
179
+
180
+ 只读工具(`read_file`、`list_files`、`search_text`、`web_search`、`web_fetch`)**无需审批**;有副作用的工具(`write_file`、`edit_file`、`bash`、以及 MCP 工具)**需用户确认**。`--yes` 可跳过所有确认。
181
+
182
+ ## 斜杠命令
183
+
184
+ 在交互模式中输入 `/` 前缀的命令:
185
+
186
+ | 命令 | 功能 |
187
+ |------|------|
188
+ | `/help`、`/?` | 显示帮助和命令列表 |
189
+ | `/init` | 勘探项目并创建/更新 `DEEPSEEK.md` 指令文件 |
190
+ | `/model` | 方向键选择模型(从 API 获取或本地回退) |
191
+ | `/models` | 列出可用的 DeepSeek 模型 |
192
+ | `/thinking [on\|off\|collapsed\|full]` | 控制推理过程显示(裸命令切换 on/off) |
193
+ | `/config` | 显示当前配置 |
194
+ | `/mcp <list\|init\|reload>` | 管理 MCP 服务器 |
195
+ | `/skills` | 列出所有自定义技能 |
196
+ | `/skill-new <name>` | 创建项目级技能模板 |
197
+ | `/plugin <list\|search\|install\|new\|remove\|enable\|disable\|update>` | 管理插件 |
198
+ | `/hooks [init\|list]` | 管理工具执行钩子 |
199
+ | `/review [ref]` | 审查 Git 改动(默认 `git diff HEAD`) |
200
+ | `/task <prompt>` | 在隔离上下文中跑一个子任务(不污染主对话) |
201
+ | `/btw [note\|list\|done <n>\|clear]` | 记录"顺便提一句"的题外待办,不打断当前任务 |
202
+ | `/rewind [n]`、`/undo` | 回退对话并撤销文件改动到某个检查点 |
203
+ | `/doctor` | 检查环境和配置健康状态 |
204
+ | `/compress` | 手动压缩上下文为持续摘要 |
205
+ | `/todos`、`/todo` | 显示当前待办任务列表 |
206
+ | `/tools` | 列出所有可用工具及审批要求 |
207
+ | `/memory` | 显示加载的项目指令文件 |
208
+ | `/save`、`/resume` | 保存 / 恢复会话 |
209
+ | `/usage` | 显示本次会话的 Token 用量与费用估算 |
210
+ | `/clear` | 清除对话历史和已保存会话 |
211
+ | `/exit`、`/quit`、`/q`、`exit`、`quit` | 退出(自动保存会话) |
212
+
213
+ **使用技巧**:
214
+ - 输入 `/` 后按 **Tab** 自动补全命令名
215
+ - 单独输入 `/` 浏览所有可用命令
216
+ - 输入错误命令会自动给出模糊匹配建议
217
+
218
+ ## 扩展能力
219
+
220
+ ### 自定义技能
221
+
222
+ 技能是带 YAML 前置元数据的 Markdown 文件,存放于:
223
+
224
+ - **项目级**:`.deepseek/skills/*.md`
225
+ - **全局级**:`~/.deepseek-cli/skills/*.md`
226
+
227
+ ```bash
228
+ deepseek
229
+ /skill-new deploy-staging
230
+ # 编辑 .deepseek/skills/deploy-staging.md
231
+ ```
232
+
233
+ 支持 `{{input}}`、`{{args}}`、`{{cwd}}` 占位符:
234
+
235
+ ```markdown
236
+ ---
237
+ name: deploy-staging
238
+ description: 部署到预发环境
239
+ ---
240
+
241
+ 执行以下部署步骤(当前 cwd: {{cwd}}):
242
+ 1. 运行 `npm run build`
243
+ 2. 运行 `npm run deploy:staging`
244
+
245
+ 用户的额外参数:
246
+ {{input}}
247
+ ```
248
+
249
+ 创建后自动注册为 `/deploy-staging` 命令。优先级:全局技能 < 插件技能 < 项目技能(同名覆盖)。
250
+
251
+ ### 子代理
252
+
253
+ `task` 工具让模型把一个**自包含的子任务**委派给一个独立子代理:
254
+
255
+ - 子代理拥有**全新上下文**和标准工具(自动排除 `task` 以防递归,深度上限 2)
256
+ - 跑完把**最终答复**返回给主代理,不污染主对话
257
+ - 可选 `tools` 白名单限定子代理可用工具子集
258
+ - 当前为**顺序执行**(单终端下不并行流式输出)
259
+
260
+ 模型会在合适时自动调用;你也可以用 `/task <prompt>` 手动触发一次隔离运行。
261
+
262
+ ### MCP 服务器
263
+
264
+ Model Context Protocol (MCP) 支持加载外部工具,让模型访问数据库、API、设计稿等。支持两种传输:**stdio**(本地子进程)与 **Streamable HTTP/SSE**(远程服务器)。
265
+
266
+ ```bash
267
+ deepseek
268
+ /mcp init # 创建 .deepseek/mcp.json 模板
269
+ /mcp reload # 重新加载 MCP 工具
270
+ /mcp list # 查看加载的工具与配置路径
271
+ ```
272
+
273
+ 配置文件(项目:`.deepseek/mcp.json` 或 Claude 兼容的 `.mcp.json`;全局:`~/.deepseek-cli/mcp.json`):
274
+
275
+ ```json
276
+ {
277
+ "mcpServers": {
278
+ "filesystem": {
279
+ "command": "npx",
280
+ "args": ["-y", "@modelcontextprotocol/server-filesystem", "/path"]
281
+ },
282
+ "remote-api": {
283
+ "url": "https://example.com/mcp",
284
+ "type": "http",
285
+ "headers": { "Authorization": "Bearer xxx" }
286
+ }
287
+ }
288
+ }
289
+ ```
290
+
291
+ - 给 `command` 走 stdio;给 `url`(或 `type: "http"/"sse"`)走 HTTP,自动处理 `Mcp-Session-Id` 与 SSE 响应。
292
+ - `servers` 与 `mcpServers` 两种键名都支持;`disabled: true` 可临时禁用。
293
+ - 加载后的工具以 `mcp__<server>__<tool>` 命名,执行前同样经过权限确认。
294
+
295
+ ### 工具钩子
296
+
297
+ 在生命周期节点自动运行 Shell 脚本(配置于 `.deepseek/hooks.json`):
298
+
299
+ ```bash
300
+ /hooks init # 创建钩子配置模板
301
+ /hooks list # 查看当前钩子
302
+ ```
303
+
304
+ 支持事件:
305
+
306
+ | 事件 | 触发时机 | 可阻断 |
307
+ |------|---------|--------|
308
+ | `sessionStart` | 会话开始 | ✗ |
309
+ | `userPromptSubmit` | 用户提交提示词后、模型处理前 | ✓ |
310
+ | `preToolUse` | 工具执行前 | ✓ |
311
+ | `postToolUse` | 工具执行后 | ✗ |
312
+ | `stop` | 一轮回答结束 | ✗ |
313
+
314
+ ```json
315
+ {
316
+ "userPromptSubmit": [
317
+ { "command": "echo prompt: $DEEPSEEK_PROMPT", "continueOnError": true }
318
+ ],
319
+ "preToolUse": [
320
+ { "command": "eslint $DEEPSEEK_TOOL_PREVIEW", "continueOnError": true }
321
+ ],
322
+ "postToolUse": [
323
+ { "command": "echo $DEEPSEEK_TOOL_NAME:$DEEPSEEK_TOOL_STATUS" }
324
+ ]
325
+ }
326
+ ```
327
+
328
+ 注入的环境变量:`DEEPSEEK_HOOK_EVENT`、`DEEPSEEK_TOOL_NAME`、`DEEPSEEK_TOOL_PREVIEW`、`DEEPSEEK_TOOL_STATUS`(`success`/`error`)、`DEEPSEEK_PROMPT`。可阻断事件在钩子失败且未设 `continueOnError: true` 时会拦截后续动作。
329
+
330
+ ### 插件系统
331
+
332
+ 通过 `/plugin` 安装和管理可复用扩展包,插件可打包多个技能:
333
+
334
+ ```bash
335
+ /plugin search formatter # 搜索插件市场
336
+ /plugin install <name|git-url|本地路径> # 安装(按名走市场,或直接给 git/路径)
337
+ /plugin new my-code-style # 一键脚手架生成插件模板
338
+ /plugin list # 列出已安装插件
339
+ /plugin enable|disable <name> # 启用/禁用(不删除)
340
+ /plugin update <name> # git 来源执行 git pull
341
+ /plugin remove <name> # 卸载
342
+ ```
343
+
344
+ - 插件装在 `~/.deepseek-cli/plugins/<name>/`,清单记录于 `~/.deepseek-cli/plugins.json`。
345
+ - 插件目录含 `plugin.json` 清单 + `skills/*.md`;启用后其技能自动成为斜杠命令。
346
+ - 市场索引通过环境变量 `DEEPSEEK_PLUGIN_REGISTRY` 指向一个 `index.json`(URL 或本地路径)。
347
+
348
+ ## 配置
349
+
350
+ ### 配置文件
351
+
352
+ 配置存储于 `~/.deepseek-cli/config.json`:
353
+
354
+ ```json
355
+ {
356
+ "baseURL": "https://api.deepseek.com",
357
+ "model": "deepseek-v4-pro",
358
+ "alwaysAllow": [],
359
+ "thinkingMode": "collapsed"
360
+ }
361
+ ```
362
+
363
+ - `apiKey`:可写入文件,但**从环境变量读取的密钥不会被持久化到磁盘**。
364
+ - `thinkingMode`:`off`(隐藏推理)/ `collapsed`(折叠显示前几行)/ `full`(完整显示)。
365
+ - `alwaysAllow`:始终免审批的工具名称列表。
366
+
367
+ ### 环境变量
368
+
369
+ | 变量 | 说明 | 默认值 |
370
+ |------|------|--------|
371
+ | `DEEPSEEK_API_KEY` | DeepSeek API 密钥 | 无(必填) |
372
+ | `DEEPSEEK_BASE_URL` | API 端点地址 | `https://api.deepseek.com` |
373
+ | `DEEPSEEK_MODEL` | 默认模型 | `deepseek-v4-pro` |
374
+ | `DEEPSEEK_THINKING` | 推理显示模式(off/collapsed/full) | 配置文件设定 |
375
+ | `DEEPSEEK_VISION` | 设为 `1` 时把当前模型当作支持视觉(发送图片) | 关闭 |
376
+ | `DEEPSEEK_PLUGIN_REGISTRY` | 插件市场索引地址 | 无(可选) |
377
+ | `WEB_SEARCH_PROVIDER` | 强制搜索后端(bocha/tavily/duckduckgo) | 自动 |
378
+ | `BOCHA_API_KEY` | 博查搜索 API 密钥 | 无 |
379
+ | `TAVILY_API_KEY` | Tavily 搜索 API 密钥 | 无 |
380
+
381
+ 环境变量优先级**高于**配置文件。旧版兼容:`DEEPSEEK_SHOW_THINKING` 仍可工作。
382
+
383
+ ### 联网搜索
384
+
385
+ `web_search` 支持可插拔后端,按以下顺序选择:
386
+
387
+ 1. `WEB_SEARCH_PROVIDER` 显式指定
388
+ 2. 设置了 `BOCHA_API_KEY` → **博查**(国内网络友好,推荐)
389
+ 3. 设置了 `TAVILY_API_KEY` → **Tavily**(海外)
390
+ 4. 都未配置 → **DuckDuckGo**(免 key,但国内常不稳定)
391
+
392
+ ```bash
393
+ export BOCHA_API_KEY="sk-你的博查key" # 推荐
394
+ ```
395
+
396
+ ### 图片与多模态
397
+
398
+ 拖入图片即会作为附件处理。**当前 DeepSeek 对话 API 为纯文本**:未启用视觉时,图片不会发送,CLI 会给出文本提示而非报错。多模态管线(base64 `image_url`)已就绪——当你使用支持视觉的模型时,在 `ModelInfo.supportsVision` 标记,或设 `DEEPSEEK_VISION=1` 即可直接发送图片。
399
+
400
+ ### CLI 参数
401
+
402
+ ```
403
+ deepseek [prompt...] [options]
404
+
405
+ 参数:
406
+ [prompt...] 单次提问的提示词(留空进入交互模式)
407
+
408
+ 选项:
409
+ -m, --model <model> 指定模型 (deepseek-v4-pro / deepseek-v4-flash)
410
+ -p, --print 打印模式:执行提示词后退出
411
+ -y, --yes 自动批准所有工具操作(谨慎使用)
412
+ --api-key <key> API 密钥(覆盖环境变量和配置文件)
413
+ --thinking <mode> 推理显示:off | collapsed | full
414
+ --show-thinking --thinking full 的别名
415
+ --hide-thinking --thinking off 的别名
416
+ --continue, --resume 恢复该项目上次保存的会话后执行
417
+ -h, --help 显示帮助
418
+ -V, --version 显示版本号
419
+ ```
420
+
421
+ ### 支持的模型
422
+
423
+ | 模型 ID | 名称 | 说明 |
424
+ |---------|------|------|
425
+ | `deepseek-v4-pro` | DeepSeek-V4 Pro | 旗舰版,适合复杂编程、推理和智能体工作 |
426
+ | `deepseek-v4-flash` | DeepSeek-V4 Flash | 快速经济版,适合日常编码任务 |
427
+
428
+ 旧版别名 `deepseek-chat`、`deepseek-reasoner` 自动映射到默认模型。
429
+ 对于 thinking 模型,CLI 会在带工具调用的回合里正确回传 `reasoning_content`,并在回合结束后清除,符合 DeepSeek 的接口约定。
430
+
431
+ ## 开发
432
+
433
+ ### 技术栈
434
+
435
+ - **语言**:TypeScript(strict,ES2022,NodeNext ESM)
436
+ - **运行时**:Node.js >= 18
437
+ - **核心依赖**:`openai`、`commander`、`chalk`、`@inquirer/prompts`、`diff`、`glob`
438
+ - **开发工具**:`tsx`(直跑 TS)、`tsc`(编译)
439
+
440
+ ### 项目结构
441
+
442
+ ```
443
+ src/
444
+ ├── index.ts 入口:CLI 解析、API key 引导、一次性/REPL 分流、MCP 加载
445
+ ├── agent.ts 智能体循环、检查点、子代理、Hook 触发、压缩
446
+ ├── client.ts DeepSeek 流式客户端(OpenAI 兼容,支持中断)
447
+ ├── config.ts 配置、模型、thinking 模式、env 覆盖
448
+ ├── permissions.ts 工具权限确认
449
+ ├── commands.ts 全部斜杠命令
450
+ ├── project.ts 项目记忆(DEEPSEEK.md)加载/初始化目标
451
+ ├── session.ts 会话保存/恢复
452
+ ├── skills.ts 自定义技能加载
453
+ ├── plugins.ts 插件安装/市场/脚手架
454
+ ├── mcp.ts MCP stdio + HTTP/SSE 客户端
455
+ ├── hooks.ts 工具/生命周期钩子
456
+ ├── todo.ts 待办列表
457
+ ├── btw.ts "顺便提一句"待办 backlog
458
+ ├── attachments.ts 拖拽路径解析
459
+ └── tools/ read/write/edit/bash/search_text/list_files/web_*/set_thinking/todo_*/task
460
+ ```
461
+
462
+ ### 常用命令
463
+
464
+ ```bash
465
+ npm run dev # 开发模式运行(tsx 即时编译)
466
+ npm run dev -- "提示词" # 开发模式单次提问
467
+ npm run typecheck # 仅类型检查,不生成文件
468
+ npm run build # 编译 TypeScript 到 dist/
469
+ npm start # 运行编译产物
470
+ ```