easycode-ai 1.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.
- package/LICENSE +202 -0
- package/README.md +1344 -0
- package/bundle/assets/help/cli-help-knowledge.md +1971 -0
- package/bundle/assets/sounds/confirmation-required.wav +0 -0
- package/bundle/assets/sounds/response-complete.wav +0 -0
- package/bundle/assets/sounds/selection-made.wav +0 -0
- package/bundle/dvcode.js +14 -0
- package/bundle/easycode.js +7450 -0
- package/bundle/fix-binary-permissions.js +215 -0
- package/bundle/login/templates/authSelectPage.html +1123 -0
- package/bundle/login/templates/deepv.ico +0 -0
- package/bundle/login/templates/feishu.ico +0 -0
- package/bundle/node_modules/@vscode/ripgrep/bin/darwin-arm64-rg +0 -0
- package/bundle/node_modules/@vscode/ripgrep/bin/darwin-x64-rg +0 -0
- package/bundle/node_modules/@vscode/ripgrep/bin/linux-arm-rg +0 -0
- package/bundle/node_modules/@vscode/ripgrep/bin/linux-arm64-rg +0 -0
- package/bundle/node_modules/@vscode/ripgrep/bin/linux-x64-rg +0 -0
- package/bundle/node_modules/@vscode/ripgrep/bin/rg.exe +0 -0
- package/bundle/node_modules/@vscode/ripgrep/bin/win32-arm64-rg.exe +0 -0
- package/bundle/node_modules/@vscode/ripgrep/bin/win32-ia32-rg.exe +0 -0
- package/bundle/node_modules/@vscode/ripgrep/bin/win32-x64-rg.exe +0 -0
- package/bundle/node_modules/@vscode/ripgrep/lib/download.js +357 -0
- package/bundle/node_modules/@vscode/ripgrep/lib/index.d.ts +1 -0
- package/bundle/node_modules/@vscode/ripgrep/lib/index.js +42 -0
- package/bundle/node_modules/@vscode/ripgrep/lib/postinstall.js +121 -0
- package/bundle/node_modules/@vscode/ripgrep/package.json +24 -0
- package/bundle/sandbox-macos-permissive-closed.sb +26 -0
- package/bundle/sandbox-macos-permissive-open.sb +19 -0
- package/bundle/sandbox-macos-permissive-proxied.sb +31 -0
- package/bundle/sandbox-macos-restrictive-closed.sb +87 -0
- package/bundle/sandbox-macos-restrictive-open.sb +90 -0
- package/bundle/sandbox-macos-restrictive-proxied.sb +92 -0
- package/package.json +156 -0
|
@@ -0,0 +1,1971 @@
|
|
|
1
|
+
# DeepV Code CLI 帮助知识库
|
|
2
|
+
|
|
3
|
+
> 本知识库包含 DeepV Code CLI 的所有命令和功能详细说明,供智能帮助系统使用。
|
|
4
|
+
|
|
5
|
+
## 📌 常见问题快速索引
|
|
6
|
+
|
|
7
|
+
### Q1: 如何切换 AI 模型?
|
|
8
|
+
**A:** 使用 `/model` 命令进行交互式切换:
|
|
9
|
+
1. 输入 `/model` 后按空格
|
|
10
|
+
2. 会显示可用模型列表
|
|
11
|
+
3. 使用方向键选择目标模型
|
|
12
|
+
4. 按回车确认切换,或者直接输入可用的模型名称后按回车
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
### Q2: 如何回滚到某个代码检查点?
|
|
19
|
+
**A:** 使用 `/restore` 命令:
|
|
20
|
+
1. 直接输入 `/restore` 后按空格,你可以用方向键查看所有可恢复的检查点
|
|
21
|
+
2. 输入 `/restore <检查点ID>` 回滚到指定检查点(在创建检查点时屏幕上会显示)
|
|
22
|
+
**用途:**
|
|
23
|
+
- 撤销文件编辑、回滚代码变更
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
### Q3: 如何保存和恢复会话?
|
|
30
|
+
**A:** 使用 `/session` 命令的子命令:
|
|
31
|
+
- **恢复会话:** `/chat select <ID>`
|
|
32
|
+
- 示例:`/chat select 1`
|
|
33
|
+
- **查看所有会话详情:** `/session list`
|
|
34
|
+
- **新建干净的会话:** `/session new`
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
### Q4: 如何升级 DeepV Code CLI?
|
|
40
|
+
**A:** 使用 `dvcode -u` 命令进行升级。
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
### Q5: 如何让 CLI 感知 VS Code 中打开的文件或选中的代码?
|
|
46
|
+
**A:** DeepV Code CLI 可以通过 VS Code 扩展与编辑器进行深度集成。
|
|
47
|
+
1. **安装扩展:** 在 VS Code 扩展市场搜索并安装 `DeepV Code Companion` 扩展。
|
|
48
|
+
2. **启动 CLI:** 在 VS Code 的内置终端中启动 DeepV Code CLI。
|
|
49
|
+
3. **确认连接:** 当 CLI 成功启动后,你会在 VS Code 右下角看到一个绿色的指示器,显示 `IDE 已连接`。这表示 CLI 已成功与 VS Code 建立连接,可以感知你打开的文件和选中的代码。
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
### Q6: 如何添加自定义斜杠命令?
|
|
55
|
+
**A:** 创建 TOML 格式的命令定义文件:
|
|
56
|
+
|
|
57
|
+
**位置选择:**
|
|
58
|
+
- 全局命令:`~/.deepv/commands/`(所有项目可用)
|
|
59
|
+
- 项目命令:`<项目根目录>/.deepvcode/commands/`(仅当前项目)
|
|
60
|
+
|
|
61
|
+
**文件格式示例:**
|
|
62
|
+
```toml
|
|
63
|
+
# 文件:~/.deepv/commands/git/commit.toml
|
|
64
|
+
# 命令名:/git:commit
|
|
65
|
+
|
|
66
|
+
description = "生成符合规范的 git commit 消息"
|
|
67
|
+
prompt = """
|
|
68
|
+
请分析当前的 git staged 变更,生成一条符合 Conventional Commits 规范的 commit 消息。
|
|
69
|
+
|
|
70
|
+
格式要求:
|
|
71
|
+
- type(scope): subject
|
|
72
|
+
- type 可以是:feat、fix、docs、style、refactor、test、chore
|
|
73
|
+
- subject 简洁明确,不超过 50 字符
|
|
74
|
+
"""
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
**使用参数:**
|
|
78
|
+
```toml
|
|
79
|
+
prompt = "请重构以下代码为纯函数:{{args}}"
|
|
80
|
+
```
|
|
81
|
+
调用:`/refactor:pure some code here`
|
|
82
|
+
|
|
83
|
+
**相关文档:** 查看 `docs/cli/commands.md` 的 "Custom Commands" 章节
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
### Q7: 如何配置 MCP 服务器?
|
|
88
|
+
**A:** 在 `settings.json` 中配置 `mcpServers` 字段:
|
|
89
|
+
|
|
90
|
+
**位置选择:**
|
|
91
|
+
- 全局配置:`~/.deepv/settings.json`(所有项目可用)
|
|
92
|
+
- 项目配置:`<项目根目录>/.deepvcode/settings.json`(仅当前项目)
|
|
93
|
+
|
|
94
|
+
#### 方式一:标准模式(通过命令启动)
|
|
95
|
+
|
|
96
|
+
适用于本地 MCP 服务器,通过命令行启动进程。
|
|
97
|
+
|
|
98
|
+
```json
|
|
99
|
+
{
|
|
100
|
+
"mcpServers": {
|
|
101
|
+
"myPythonServer": {
|
|
102
|
+
"command": "python",
|
|
103
|
+
"args": ["mcp_server.py", "--port", "8080"],
|
|
104
|
+
"cwd": "./mcp_tools/python",
|
|
105
|
+
"timeout": 5000,
|
|
106
|
+
"includeTools": ["safe_tool", "file_reader"]
|
|
107
|
+
},
|
|
108
|
+
"myNodeServer": {
|
|
109
|
+
"command": "node",
|
|
110
|
+
"args": ["mcp_server.js"],
|
|
111
|
+
"excludeTools": ["dangerous_tool"]
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
**字段说明:**
|
|
118
|
+
- `command`(必需):启动服务器的命令
|
|
119
|
+
- `args`(可选):命令参数数组
|
|
120
|
+
- `env`(可选):环境变量对象
|
|
121
|
+
- `cwd`(可选):工作目录
|
|
122
|
+
- `timeout`(可选):请求超时(毫秒)
|
|
123
|
+
- `trust`(可选):信任服务器,跳过确认
|
|
124
|
+
- `includeTools`(可选):白名单,仅启用指定工具
|
|
125
|
+
- `excludeTools`(可选):黑名单,排除指定工具
|
|
126
|
+
|
|
127
|
+
#### 方式二:Streamable HTTP 模式(推荐用于云服务)
|
|
128
|
+
|
|
129
|
+
适用于支持 HTTP 的远程 MCP 服务器,无需本地启动进程。
|
|
130
|
+
|
|
131
|
+
```json
|
|
132
|
+
{
|
|
133
|
+
"mcpServers": {
|
|
134
|
+
"Web-Search-by-Z.ai": {
|
|
135
|
+
"httpUrl": "https://open.bigmodel.cn/api/mcp-broker/proxy/web-search/mcp",
|
|
136
|
+
"headers": {
|
|
137
|
+
"Authorization": "Bearer **************************"
|
|
138
|
+
}
|
|
139
|
+
},
|
|
140
|
+
"myHttpServer": {
|
|
141
|
+
"httpUrl": "https://api.example.com/mcp/endpoint",
|
|
142
|
+
"headers": {
|
|
143
|
+
"Authorization": "Bearer YOUR_API_KEY",
|
|
144
|
+
"Custom-Header": "custom-value"
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
**Streamable HTTP 模式字段说明:**
|
|
152
|
+
- `httpUrl`(必需):MCP 服务器的 HTTP 端点 URL
|
|
153
|
+
- `headers`(可选):HTTP 请求头对象,用于认证或传递自定义信息
|
|
154
|
+
- 常用认证方式:`Authorization: Bearer <token>`
|
|
155
|
+
- 其他字段(`includeTools`、`excludeTools`、`trust` 等)同样适用
|
|
156
|
+
|
|
157
|
+
**两种模式对比:**
|
|
158
|
+
|
|
159
|
+
| 特性 | 标准模式 | Streamable HTTP 模式 |
|
|
160
|
+
|-----|---------|---------------------|
|
|
161
|
+
| **连接方式** | 本地启动进程 | HTTP 请求 |
|
|
162
|
+
| **适用场景** | 本地 MCP 服务器 | 云服务、远程 MCP |
|
|
163
|
+
| **配置复杂度** | 需要配置命令、路径 | 只需 URL 和可选 Headers |
|
|
164
|
+
| **资源占用** | 本地进程资源 | 无本地进程 |
|
|
165
|
+
| **网络要求** | 无需网络 | 需要网络连接 |
|
|
166
|
+
|
|
167
|
+
**查看 MCP 状态:** `/mcp` 或 `/mcp desc`
|
|
168
|
+
|
|
169
|
+
**快捷键:** `Ctrl+T` 切换工具描述显示
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
### Q8: 如何切换主题?
|
|
174
|
+
**A:** 使用 `/theme` 命令:
|
|
175
|
+
1. 输入 `/theme` 打开主题选择对话框
|
|
176
|
+
2. 浏览可用主题
|
|
177
|
+
3. 选择并应用
|
|
178
|
+
|
|
179
|
+
---
|
|
180
|
+
|
|
181
|
+
### Q9: 有没有在 VSCode 中使用的图形化界面版/扩展/插件/GUI 版?
|
|
182
|
+
**A:** 是的,DeepV Code 也支持 VSCode 扩展!
|
|
183
|
+
你可以在 VSCode 扩展市场中搜索 **DeepV Code for VSCode** 在线安装,即可在 VSCode 中使用图形化界面版本。
|
|
184
|
+
|
|
185
|
+
**安装方式:**
|
|
186
|
+
1. 打开 VSCode
|
|
187
|
+
2. 进入扩展市场(快捷键:`Ctrl+Shift+X` 或 `Cmd+Shift+X`)
|
|
188
|
+
3. 搜索 `DeepV Code for VSCode`
|
|
189
|
+
4. 点击安装
|
|
190
|
+
|
|
191
|
+
**特点:**
|
|
192
|
+
- 图形化界面操作,更直观便捷
|
|
193
|
+
- 与 VSCode 深度集成
|
|
194
|
+
- 支持文件感知、代码选中等 IDE 功能
|
|
195
|
+
- 与 CLI 版本功能互补,可根据需求选择使用
|
|
196
|
+
|
|
197
|
+
---
|
|
198
|
+
|
|
199
|
+
### Q10: 如何快速调整主题、模型、Agent风格等常用设置?
|
|
200
|
+
**A:** 使用 `/config` 命令打开**交互式设置面板**:
|
|
201
|
+
1. 直接输入 `/config` 并按回车。
|
|
202
|
+
2. 你将看到一个可视化菜单,集成了所有常用设置:
|
|
203
|
+
- **🎨 主题 (Theme)**:快速切换界面配色。
|
|
204
|
+
- **🤖 AI 模型 (Model)**:在不同的 AI 模型间切换。
|
|
205
|
+
- **🧠 Agent 风格 (Style)**:调整助手的行为风格(如默认、Codex、Cursor、Windsurf、Claude Code 等)。
|
|
206
|
+
- **🚀 YOLO 模式**:开启/关闭工具调用自动批准。
|
|
207
|
+
- **Vim 模式**:切换内置输入的 Vim 体验。
|
|
208
|
+
- **🌐 语言偏好**:设置 AI 的回复语言。
|
|
209
|
+
3. 使用方向键上下移动,按回车进入子菜单或确认选择,按 `Esc` 返回或退出。
|
|
210
|
+
|
|
211
|
+
---
|
|
212
|
+
|
|
213
|
+
### Q11: 如何配置自定义模型(OpenAI/Claude API)?
|
|
214
|
+
**A:** DeepV Code 支持配置 OpenAI 兼容格式和 Anthropic Claude API 格式的自定义模型。
|
|
215
|
+
|
|
216
|
+
#### 📝 配置文件位置
|
|
217
|
+
|
|
218
|
+
自定义模型配置保存在:`~/.deepv/custom-models.json`
|
|
219
|
+
|
|
220
|
+
**为什么使用独立文件?**
|
|
221
|
+
- 避免与 `settings.json` 产生冲突
|
|
222
|
+
- 防止云端模型更新覆盖自定义配置
|
|
223
|
+
- 支持多个 DeepV Code 实例并发运行
|
|
224
|
+
|
|
225
|
+
#### 🚀 方式一:使用配置向导(推荐)
|
|
226
|
+
|
|
227
|
+
在 CLI 中输入:
|
|
228
|
+
|
|
229
|
+
```
|
|
230
|
+
/add-model
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
按照向导提示填写:
|
|
234
|
+
1. **选择提供商类型**:OpenAI Compatible / Anthropic Claude
|
|
235
|
+
2. **输入显示名称**:如 `GPT-4 Turbo`
|
|
236
|
+
3. **输入 API 基础 URL**:如 `https://api.openai.com/v1`
|
|
237
|
+
4. **输入 API 密钥**:推荐使用环境变量格式 `${OPENAI_API_KEY}`
|
|
238
|
+
5. **输入模型 ID**:如 `gpt-4-turbo`
|
|
239
|
+
6. **最大 Token 数**(可选):如 `128000`
|
|
240
|
+
7. **确认配置**:输入 `y` 保存
|
|
241
|
+
|
|
242
|
+
#### ⚙️ 方式二:手动编辑配置文件
|
|
243
|
+
|
|
244
|
+
编辑 `~/.deepv/custom-models.json`:
|
|
245
|
+
|
|
246
|
+
```json
|
|
247
|
+
{
|
|
248
|
+
"models": [
|
|
249
|
+
{
|
|
250
|
+
"displayName": "GPT-4 Turbo",
|
|
251
|
+
"provider": "openai",
|
|
252
|
+
"baseUrl": "https://api.openai.com/v1",
|
|
253
|
+
"apiKey": "${OPENAI_API_KEY}",
|
|
254
|
+
"modelId": "gpt-4-turbo",
|
|
255
|
+
"maxTokens": 128000,
|
|
256
|
+
"enabled": true
|
|
257
|
+
},
|
|
258
|
+
{
|
|
259
|
+
"displayName": "Claude Sonnet",
|
|
260
|
+
"provider": "anthropic",
|
|
261
|
+
"baseUrl": "https://api.anthropic.com",
|
|
262
|
+
"apiKey": "${ANTHROPIC_API_KEY}",
|
|
263
|
+
"modelId": "claude-sonnet-4-5",
|
|
264
|
+
"maxTokens": 200000,
|
|
265
|
+
"enabled": true
|
|
266
|
+
},
|
|
267
|
+
{
|
|
268
|
+
"displayName": "Local Llama",
|
|
269
|
+
"provider": "openai",
|
|
270
|
+
"baseUrl": "http://localhost:1234/v1",
|
|
271
|
+
"apiKey": "not-needed",
|
|
272
|
+
"modelId": "llama-3-70b",
|
|
273
|
+
"maxTokens": 8192,
|
|
274
|
+
"enabled": true
|
|
275
|
+
}
|
|
276
|
+
]
|
|
277
|
+
}
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
#### 📋 配置字段说明
|
|
281
|
+
|
|
282
|
+
**必需字段:**
|
|
283
|
+
- `displayName` - 显示名称(也作为唯一标识符)
|
|
284
|
+
- `provider` - 提供商类型:`openai` 或 `anthropic`
|
|
285
|
+
- `baseUrl` - API 基础 URL(不要以 `/` 结尾)
|
|
286
|
+
- `apiKey` - API 密钥(支持环境变量:`${VAR_NAME}`)
|
|
287
|
+
- `modelId` - 实际的模型名称(传递给 API)
|
|
288
|
+
|
|
289
|
+
**可选字段:**
|
|
290
|
+
- `maxTokens` - 最大上下文窗口大小(数字)
|
|
291
|
+
- `enabled` - 是否启用(`true`/`false`,默认 `true`)
|
|
292
|
+
- `headers` - 额外的 HTTP 请求头(键值对对象)
|
|
293
|
+
- `timeout` - 请求超时时间(毫秒)
|
|
294
|
+
- `enableThinking` - 启用 Anthropic 扩展思考(仅 `anthropic` 提供商,默认启用)
|
|
295
|
+
|
|
296
|
+
#### 🔌 支持的提供商类型
|
|
297
|
+
|
|
298
|
+
**OpenAI Compatible (`openai`):**
|
|
299
|
+
- OpenAI 官方 API
|
|
300
|
+
- Azure OpenAI
|
|
301
|
+
- 本地模型(LM Studio, Ollama, text-generation-webui)
|
|
302
|
+
- 第三方兼容服务(Groq, Together AI, DeepInfra 等)
|
|
303
|
+
|
|
304
|
+
**Anthropic Claude (`anthropic`):**
|
|
305
|
+
- Claude API 官方端点
|
|
306
|
+
- 自动启用 Anthropic 扩展思考(所有模型默认开启,不支持的模型会自动忽略)
|
|
307
|
+
- 可通过 `enableThinking: false` 明确禁用
|
|
308
|
+
|
|
309
|
+
#### 💡 常见配置示例
|
|
310
|
+
|
|
311
|
+
**OpenAI 官方 API:**
|
|
312
|
+
```json
|
|
313
|
+
{
|
|
314
|
+
"displayName": "GPT-4 Turbo",
|
|
315
|
+
"provider": "openai",
|
|
316
|
+
"baseUrl": "https://api.openai.com/v1",
|
|
317
|
+
"apiKey": "${OPENAI_API_KEY}",
|
|
318
|
+
"modelId": "gpt-4-turbo"
|
|
319
|
+
}
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
**Azure OpenAI:**
|
|
323
|
+
```json
|
|
324
|
+
{
|
|
325
|
+
"displayName": "Azure GPT-4",
|
|
326
|
+
"provider": "openai",
|
|
327
|
+
"baseUrl": "https://your-resource.openai.azure.com/openai/deployments/your-deployment",
|
|
328
|
+
"apiKey": "${AZURE_OPENAI_KEY}",
|
|
329
|
+
"modelId": "gpt-4",
|
|
330
|
+
"headers": {
|
|
331
|
+
"api-version": "2024-02-01"
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
**Groq:**
|
|
337
|
+
```json
|
|
338
|
+
{
|
|
339
|
+
"displayName": "Groq Llama 3",
|
|
340
|
+
"provider": "openai",
|
|
341
|
+
"baseUrl": "https://api.groq.com/openai/v1",
|
|
342
|
+
"apiKey": "${GROQ_API_KEY}",
|
|
343
|
+
"modelId": "llama-3-70b-8192"
|
|
344
|
+
}
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
**本地 LM Studio:**
|
|
348
|
+
```json
|
|
349
|
+
{
|
|
350
|
+
"displayName": "Local Llama",
|
|
351
|
+
"provider": "openai",
|
|
352
|
+
"baseUrl": "http://localhost:1234/v1",
|
|
353
|
+
"apiKey": "not-needed",
|
|
354
|
+
"modelId": "local-model"
|
|
355
|
+
}
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
**Claude API(自动启用扩展思考):**
|
|
359
|
+
```json
|
|
360
|
+
{
|
|
361
|
+
"displayName": "Claude Sonnet 4.5",
|
|
362
|
+
"provider": "anthropic",
|
|
363
|
+
"baseUrl": "https://api.anthropic.com",
|
|
364
|
+
"apiKey": "${ANTHROPIC_API_KEY}",
|
|
365
|
+
"modelId": "claude-sonnet-4-5"
|
|
366
|
+
// enableThinking 默认为 true,所有 Anthropic 模型自动启用
|
|
367
|
+
// 不支持的模型会自动忽略此参数
|
|
368
|
+
}
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
#### 🎯 使用自定义模型
|
|
372
|
+
|
|
373
|
+
**通过模型选择对话框:**
|
|
374
|
+
```
|
|
375
|
+
/model
|
|
376
|
+
```
|
|
377
|
+
自定义模型会显示 `[Custom]` 标签和青色,使用方向键选择。
|
|
378
|
+
|
|
379
|
+
**直接切换:**
|
|
380
|
+
```
|
|
381
|
+
/model custom:openai:gpt-4-turbo@abc123
|
|
382
|
+
```
|
|
383
|
+
|
|
384
|
+
#### 🔧 环境变量设置
|
|
385
|
+
|
|
386
|
+
**Linux/macOS:**
|
|
387
|
+
```bash
|
|
388
|
+
export OPENAI_API_KEY="sk-your-key-here"
|
|
389
|
+
export ANTHROPIC_API_KEY="sk-ant-your-key-here"
|
|
390
|
+
```
|
|
391
|
+
|
|
392
|
+
**Windows PowerShell:**
|
|
393
|
+
```powershell
|
|
394
|
+
$env:OPENAI_API_KEY="sk-your-key-here"
|
|
395
|
+
$env:ANTHROPIC_API_KEY="sk-ant-your-key-here"
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
**Windows CMD:**
|
|
399
|
+
```cmd
|
|
400
|
+
set OPENAI_API_KEY=sk-your-key-here
|
|
401
|
+
set ANTHROPIC_API_KEY=sk-ant-your-key-here
|
|
402
|
+
```
|
|
403
|
+
|
|
404
|
+
#### ⚠️ 注意事项
|
|
405
|
+
|
|
406
|
+
- **安全性**:推荐使用环境变量存储 API 密钥,避免明文写入配置文件
|
|
407
|
+
- **Base URL 格式**:必须以 `http://` 或 `https://` 开头,不要以 `/` 结尾
|
|
408
|
+
- **重启生效**:修改配置后需要重启 DeepV Code
|
|
409
|
+
- **Token 计费**:自定义模型不消耗 DeepV 积分,直接向提供商付费
|
|
410
|
+
- **功能限制**:某些高级功能可能因提供商 API 限制而不可用
|
|
411
|
+
|
|
412
|
+
#### 🐛 故障排除
|
|
413
|
+
|
|
414
|
+
| 问题 | 解决方案 |
|
|
415
|
+
|-----|---------|
|
|
416
|
+
| 模型不显示 | 检查 `enabled` 是否为 `true`,重启 CLI |
|
|
417
|
+
| API 调用失败 | 验证 API Key、Base URL、Model ID 是否正确 |
|
|
418
|
+
| 环境变量未生效 | 确保使用 `${VAR_NAME}` 格式(带花括号) |
|
|
419
|
+
| 网络错误 | 检查网络连接,确认 URL 可访问 |
|
|
420
|
+
|
|
421
|
+
#### 📚 更多文档
|
|
422
|
+
|
|
423
|
+
- [自定义模型快速入门](../../docs/custom-models-quickstart.md)
|
|
424
|
+
- [自定义模型完整指南](../../docs/custom-models-guide.md)
|
|
425
|
+
- [自定义模型架构说明](../../docs/custom-models-architecture.md)
|
|
426
|
+
|
|
427
|
+
---
|
|
428
|
+
|
|
429
|
+
### Q12: 如何启动和使用飞书 (Feishu) / Lark 机器人接入?
|
|
430
|
+
**A:** 使用 `/feishu` 子命令系列,可以将 DeepV Code 直接作为一个智能群聊或私聊 Bot 接入到你的飞书工作区:
|
|
431
|
+
1. **启动配置:** 输入 `/feishu`,选择 QR 扫码自动建应用或手动配置。
|
|
432
|
+
2. **凭据安全:** 凭证经过 AES-256-GCM 高强度加密并存放在 `~/.deepv/` 全局目录下,自动采用 0o600 权限锁闭。
|
|
433
|
+
3. **日常管控:**
|
|
434
|
+
- 启动网关:`/feishu start` (免内网穿透,直接利用 WebSocket 双向长连接,安全且免配置 webhook)
|
|
435
|
+
- 查看状态与审批:`/feishu status` (实时展示 bound 工作区、机器人名称、及缺少的授权权限申请链接)
|
|
436
|
+
- 关闭连接:`/feishu stop`
|
|
437
|
+
- 清理登录:`/feishu logout`
|
|
438
|
+
|
|
439
|
+
---
|
|
440
|
+
|
|
441
|
+
### Q13: 什么是目标驱动模式 (/goal),如何控制它的执行?
|
|
442
|
+
**A:** `/goal` 是一个承诺机制,它将 Agent 锁定在“达成特定目标”的强契约中,直到所有验收指标都被客观达成。
|
|
443
|
+
1. **开启契约:** 输入 `/goal` 或 `/goal new` 调出表单,指定目标描述、禁止操作(如禁止 Force Push)、达标判定条件和最少工时。
|
|
444
|
+
2. **看门狗守护(Watchdog):** 在运行中,如果 AI 遭遇逻辑阻塞或陷入盲目空转,系统内嵌的空闲看门狗将自动触发并提示 `[GOAL WATCHDOG]`,强制 AI 评估障碍、寻找备用方案,而不是无限期卡死。
|
|
445
|
+
3. **达成与销毁:**
|
|
446
|
+
- 结束契约:目标全量达成时,AI 会自主调用 `goal_achieved` 验证工具并自动宣告 `/goal clear` 销毁契约,后续压缩将不再向上下文残留旧目标。
|
|
447
|
+
- 主动清理:用户可以使用 `/goal clear` 手动提前释放当前契约约束。
|
|
448
|
+
|
|
449
|
+
---
|
|
450
|
+
|
|
451
|
+
### Q14: 如何使用多模型对决/对审模式 (/debate) 进行代码审查?
|
|
452
|
+
**A:** `/debate` 允许多个模型针对复杂的重构、设计或 Bug 修复场景展开多轮激辩,最后由轻量级 Flash 模型自动汇总输出高水平设计方案。
|
|
453
|
+
1. **启动对审:** 输入 `/debate` 打开向导,配置参与的辩手模型(如 Claude 与 Gemini)、辩论主题及辩论轮数(推荐 2-3 模型,1-2 轮)。
|
|
454
|
+
2. **自动汇总:** 辩论结束后,系统会调用极速模型整理辩论纪要并生成一份正式的 `DEBATE_SUMMARY.md` 报告,极具参考价值。
|
|
455
|
+
|
|
456
|
+
---
|
|
457
|
+
|
|
458
|
+
### Q15: 如何开启和配置 AI 的自适应思考与推理深度 (/thinking)?
|
|
459
|
+
**A:** 使用 `/thinking` 命令配置推理引擎,为 Anthropic Claude 3.7+ 的 Thinking Budget、OpenAI 的 Reasoning Effort,及 Gemini 的思维链提供自适应参数映射:
|
|
460
|
+
1. **修改深度:** 输入 `/thinking`,选择推理强度(`none`、`low`、`medium`、`high`、`xhigh` 等)。
|
|
461
|
+
2. **防灾与清洗(cleanContents):**
|
|
462
|
+
- 自动 Bypass:针对不支持 Thinking Budget 的模型(如 Claude Haiku 等),系统自动识别并降级直连,防止 400 崩溃。
|
|
463
|
+
- 历史清洗:像 Kimi 等第三方代理网关,在接收带推理标记 of 上下文时极易返回 400 格式错误。系统的 `cleanContents` 在中继时会自动合并推理数据到 Primary Message 块,提供 100% 的兼容性。
|
|
464
|
+
|
|
465
|
+
---
|
|
466
|
+
|
|
467
|
+
## 📖 斜杠命令完整列表 (Slash Commands `/`)
|
|
468
|
+
1. 输入斜杠则可以看到所有支持的斜杠命令
|
|
469
|
+
|
|
470
|
+
---
|
|
471
|
+
|
|
472
|
+
|
|
473
|
+
### `/clear` - 清空屏幕
|
|
474
|
+
清空终端显示,包括可见的会话历史和滚动缓冲区。
|
|
475
|
+
|
|
476
|
+
**用法:** `/clear`
|
|
477
|
+
|
|
478
|
+
**快捷键:** `Ctrl+L`
|
|
479
|
+
|
|
480
|
+
**注意:** 上下文数据会保留,仅清除视觉显示。
|
|
481
|
+
|
|
482
|
+
---
|
|
483
|
+
|
|
484
|
+
### `/compress` - 压缩上下文
|
|
485
|
+
用摘要替换整个聊天上下文,节省 token 用量。
|
|
486
|
+
当上下文不足 20% 时,CLI也会自动执行压缩。
|
|
487
|
+
|
|
488
|
+
**用法:** `/compress`
|
|
489
|
+
|
|
490
|
+
**作用:**
|
|
491
|
+
- 保留高层次摘要
|
|
492
|
+
- 大幅减少 token 消耗
|
|
493
|
+
- 适用于长时间会话
|
|
494
|
+
|
|
495
|
+
**注意:** 会丢失详细的历史记录,不可逆操作。
|
|
496
|
+
|
|
497
|
+
---
|
|
498
|
+
|
|
499
|
+
### `/copy` - 复制最后输出
|
|
500
|
+
将 AI 的最后一条输出复制到剪贴板。
|
|
501
|
+
|
|
502
|
+
**用法:** `/copy`
|
|
503
|
+
|
|
504
|
+
**使用场景:**
|
|
505
|
+
- 快速复制生成的代码
|
|
506
|
+
- 分享 AI 的回答
|
|
507
|
+
- 保存重要输出
|
|
508
|
+
|
|
509
|
+
---
|
|
510
|
+
|
|
511
|
+
### `/editor` - 选择编辑器
|
|
512
|
+
打开编辑器选择对话框,用于查看 diff。
|
|
513
|
+
|
|
514
|
+
**用法:** `/editor`
|
|
515
|
+
|
|
516
|
+
**支持的编辑器:**
|
|
517
|
+
- VSCode
|
|
518
|
+
- Sublime Text
|
|
519
|
+
- Vim
|
|
520
|
+
- 其他...
|
|
521
|
+
|
|
522
|
+
**配置:** 在 `settings.json` 中设置 `preferredEditor`
|
|
523
|
+
|
|
524
|
+
---
|
|
525
|
+
|
|
526
|
+
### `/help` 或 `/?` - 显示帮助
|
|
527
|
+
显示传统的命令列表帮助对话框。
|
|
528
|
+
|
|
529
|
+
**用法:** `/help` 或 `/?`
|
|
530
|
+
|
|
531
|
+
---
|
|
532
|
+
|
|
533
|
+
### `/help-ask` - AI 智能帮助助手
|
|
534
|
+
**(你现在正在使用的功能!)**
|
|
535
|
+
|
|
536
|
+
启动 AI 智能帮助系统,可以询问任何关于 CLI 功能的问题。
|
|
537
|
+
|
|
538
|
+
**用法:** `/help-ask`
|
|
539
|
+
|
|
540
|
+
**特点:**
|
|
541
|
+
- 基于完整的 CLI 知识库回答问题
|
|
542
|
+
- 使用 Auto 模型(会消耗 token)
|
|
543
|
+
- 支持中英文问答
|
|
544
|
+
- 按 Esc 键退出帮助模式
|
|
545
|
+
|
|
546
|
+
**退出帮助:** 按 `Esc` 键
|
|
547
|
+
|
|
548
|
+
**注意:** 此功能会消耗 API token,如果只想查看命令列表,请使用 `/help`
|
|
549
|
+
|
|
550
|
+
---
|
|
551
|
+
|
|
552
|
+
### `/issue` - 提交 Issue 反馈
|
|
553
|
+
快速提交 GitHub Issue,并自动附加当前会话的错误日志(已脱敏)。
|
|
554
|
+
|
|
555
|
+
**用法:** `/issue <问题描述>`
|
|
556
|
+
|
|
557
|
+
**说明:**
|
|
558
|
+
- 会自动打开 GitHub Issue 页面
|
|
559
|
+
- 仅附带 error 日志,敏感内容将以 `*` 脱敏
|
|
560
|
+
|
|
561
|
+
---
|
|
562
|
+
|
|
563
|
+
### `/init` - 初始化项目上下文
|
|
564
|
+
自动分析项目并生成 `DEEPV.md` 文件,提供项目上下文。
|
|
565
|
+
|
|
566
|
+
**用法:** `/init`
|
|
567
|
+
|
|
568
|
+
**功能:**
|
|
569
|
+
1. 分析项目结构
|
|
570
|
+
2. 识别项目类型(代码项目 vs 非代码项目)
|
|
571
|
+
3. 生成包含以下内容的 `DEEPV.md`:
|
|
572
|
+
- 项目概述
|
|
573
|
+
- 主要技术栈
|
|
574
|
+
- 构建/运行命令
|
|
575
|
+
- 开发规范
|
|
576
|
+
- 特殊配置
|
|
577
|
+
|
|
578
|
+
**注意:** 如果 `DEEPV.md` 已存在,此命令则无法执行。
|
|
579
|
+
|
|
580
|
+
**相关:** `/memory refresh`
|
|
581
|
+
|
|
582
|
+
---
|
|
583
|
+
|
|
584
|
+
### `/mcp` - MCP 服务器管理
|
|
585
|
+
列出配置的 Model Context Protocol (MCP) 服务器及其工具。
|
|
586
|
+
|
|
587
|
+
**用法:** `/mcp [子命令]`
|
|
588
|
+
|
|
589
|
+
**子命令:**
|
|
590
|
+
- `desc` / `descriptions`:显示详细的工具描述
|
|
591
|
+
- `nodesc` / `nodescriptions`:隐藏工具描述,仅显示名称
|
|
592
|
+
- `schema`:显示工具参数的完整 JSON schema
|
|
593
|
+
|
|
594
|
+
**快捷键:** `Ctrl+T` - 切换工具描述显示
|
|
595
|
+
|
|
596
|
+
**配置:** 参见 Q5 或 `docs/cli/configuration.md`
|
|
597
|
+
|
|
598
|
+
---
|
|
599
|
+
|
|
600
|
+
### `/memory` - 记忆管理
|
|
601
|
+
管理 AI 的指令上下文(从 `DEEPV.md` 文件加载)。
|
|
602
|
+
|
|
603
|
+
**子命令:**
|
|
604
|
+
- `add <text>` - 添加文本到 AI 记忆
|
|
605
|
+
- `show` - 显示当前加载的完整分层记忆
|
|
606
|
+
- `refresh` - 重新加载所有 `DEEPV.md` 文件
|
|
607
|
+
|
|
608
|
+
**用法示例:**
|
|
609
|
+
```
|
|
610
|
+
/memory add 使用 TypeScript strict 模式
|
|
611
|
+
/memory show
|
|
612
|
+
/memory refresh
|
|
613
|
+
```
|
|
614
|
+
|
|
615
|
+
**记忆文件层次(优先级递增):**
|
|
616
|
+
1. 全局:`~/.deepv/DEEPV.md`
|
|
617
|
+
2. 项目根及父目录:`<项目路径>/DEEPV.md`
|
|
618
|
+
3. 子目录:项目内各子目录的 `DEEPV.md`
|
|
619
|
+
|
|
620
|
+
|
|
621
|
+
|
|
622
|
+
---
|
|
623
|
+
|
|
624
|
+
### `/model` - 切换模型
|
|
625
|
+
交互式选择 AI 模型。
|
|
626
|
+
|
|
627
|
+
**用法:** `/model [模型名]`
|
|
628
|
+
|
|
629
|
+
**交互式:**
|
|
630
|
+
1. 输入 `/model` 后按空格
|
|
631
|
+
2. 显示可用模型列表
|
|
632
|
+
3. 方向键选择
|
|
633
|
+
4. 回车确认
|
|
634
|
+
|
|
635
|
+
**直接指定:** `/model Claude-Sonnet-4.5`
|
|
636
|
+
|
|
637
|
+
**查看统计:** `/stats model`
|
|
638
|
+
|
|
639
|
+
---
|
|
640
|
+
|
|
641
|
+
### `/quit` 或 `/exit` - 退出 CLI
|
|
642
|
+
退出 DeepV Code CLI。
|
|
643
|
+
|
|
644
|
+
**用法:** `/quit` 或 `/exit`
|
|
645
|
+
|
|
646
|
+
**注意:** 未保存的会话状态将丢失
|
|
647
|
+
|
|
648
|
+
---
|
|
649
|
+
|
|
650
|
+
### `/restore` - 恢复检查点
|
|
651
|
+
将项目文件恢复到某个工具执行前的状态。
|
|
652
|
+
|
|
653
|
+
**用法:** `/restore [checkpoint_id]`
|
|
654
|
+
|
|
655
|
+
**无参数:** 列出所有可用的检查点
|
|
656
|
+
|
|
657
|
+
**指定 ID:** 恢复到指定检查点
|
|
658
|
+
|
|
659
|
+
|
|
660
|
+
**用途:**
|
|
661
|
+
- 撤销文件编辑
|
|
662
|
+
- 回滚代码变更
|
|
663
|
+
- 恢复删除的文件
|
|
664
|
+
|
|
665
|
+
**相关文档:** `docs/checkpointing.md`
|
|
666
|
+
|
|
667
|
+
---
|
|
668
|
+
|
|
669
|
+
### `/stats` - 统计信息
|
|
670
|
+
显示当前会话的详细统计信息。
|
|
671
|
+
|
|
672
|
+
**用法:** `/stats [子命令]`
|
|
673
|
+
|
|
674
|
+
**子命令:**
|
|
675
|
+
- 无参数:显示总体统计(token 用量、缓存节省、会话时长)
|
|
676
|
+
- `model [模型名]`:显示模型统计(支持 Tab 补全)
|
|
677
|
+
- `tools`:显示工具使用统计
|
|
678
|
+
|
|
679
|
+
**示例:**
|
|
680
|
+
```
|
|
681
|
+
/stats
|
|
682
|
+
/stats model gemini-2.0-flash-exp
|
|
683
|
+
/stats tools
|
|
684
|
+
```
|
|
685
|
+
|
|
686
|
+
**注意:** 缓存 token 信息仅在使用 API key 认证时显示。
|
|
687
|
+
|
|
688
|
+
---
|
|
689
|
+
|
|
690
|
+
### `/theme` - 切换主题
|
|
691
|
+
打开主题选择对话框。
|
|
692
|
+
|
|
693
|
+
**用法:** `/theme`
|
|
694
|
+
|
|
695
|
+
**配置:**
|
|
696
|
+
```json
|
|
697
|
+
{
|
|
698
|
+
"theme": "GitHub"
|
|
699
|
+
}
|
|
700
|
+
```
|
|
701
|
+
|
|
702
|
+
**自定义主题:**
|
|
703
|
+
```json
|
|
704
|
+
{
|
|
705
|
+
"customThemes": {
|
|
706
|
+
"MyTheme": {
|
|
707
|
+
"primary": "#00FF00",
|
|
708
|
+
"background": "#000000"
|
|
709
|
+
}
|
|
710
|
+
}
|
|
711
|
+
}
|
|
712
|
+
```
|
|
713
|
+
|
|
714
|
+
**相关文档:** `docs/cli/themes.md`
|
|
715
|
+
|
|
716
|
+
---
|
|
717
|
+
|
|
718
|
+
### `/auth` - 认证设置
|
|
719
|
+
打开认证对话框,用于重新登录认证。
|
|
720
|
+
|
|
721
|
+
**用法:** `/auth`
|
|
722
|
+
|
|
723
|
+
**支持的认证方式:**
|
|
724
|
+
- 根据您所在的组织会有不同的认证支持,具体看界面引导即可。
|
|
725
|
+
|
|
726
|
+
---
|
|
727
|
+
|
|
728
|
+
### `/config` - 统一配置菜单
|
|
729
|
+
打开交互式设置面板,让您可以直观地配置 DeepV Code 的各种设置。常用的设置如主题、模型、Agent 风格等都在这里了。
|
|
730
|
+
|
|
731
|
+
**用法:** `/config [子命令]`
|
|
732
|
+
|
|
733
|
+
**功能:**
|
|
734
|
+
- **交互式面板:** 直接输入 `/config` 回车,打开可视化菜单。
|
|
735
|
+
- **常用设置:** 面板集成了主题、编辑器、模型切换、Vim 模式、Agent 风格、YOLO 模式、健康使用提醒及语言偏好。
|
|
736
|
+
- **快捷操作:** 支持键盘上下移动、回车进入子菜单、`Esc` 返回或关闭。
|
|
737
|
+
|
|
738
|
+
**子命令:**
|
|
739
|
+
- `/config theme` - 打开主题选择
|
|
740
|
+
- `/config model` - 打开模型选择
|
|
741
|
+
- `/config agent-style` - 切换 Agent 风格
|
|
742
|
+
- `/config yolo [on|off]` - 切换 YOLO 自动批准模式
|
|
743
|
+
- `/config language [name]` - 设置回复语言偏好
|
|
744
|
+
|
|
745
|
+
**示例:**
|
|
746
|
+
```
|
|
747
|
+
/config
|
|
748
|
+
/config model claude
|
|
749
|
+
/config yolo on
|
|
750
|
+
```
|
|
751
|
+
|
|
752
|
+
---
|
|
753
|
+
|
|
754
|
+
### `/tools` - 工具列表
|
|
755
|
+
显示当前可用的所有工具(内置 + MCP)。
|
|
756
|
+
|
|
757
|
+
**用法:** `/tools [子命令]`
|
|
758
|
+
|
|
759
|
+
**子命令:**
|
|
760
|
+
- 默认:显示工具名称和描述
|
|
761
|
+
- `nodesc` / `nodescriptions`:仅显示工具名称
|
|
762
|
+
- `desc` / `descriptions`:显示详细描述(旧版,现为默认)
|
|
763
|
+
|
|
764
|
+
**示例:**
|
|
765
|
+
```
|
|
766
|
+
/tools
|
|
767
|
+
/tools nodesc
|
|
768
|
+
```
|
|
769
|
+
|
|
770
|
+
**相关:** `/mcp`、`/mcp schema`
|
|
771
|
+
|
|
772
|
+
---
|
|
773
|
+
|
|
774
|
+
### `/extensions` - 扩展管理
|
|
775
|
+
管理 DeepV Code 的扩展。
|
|
776
|
+
|
|
777
|
+
**用法:** `/extensions [子命令]`
|
|
778
|
+
|
|
779
|
+
**子命令:**
|
|
780
|
+
- `list` - 列出所有可用的扩展
|
|
781
|
+
- `info` - 查看扩展的安装和卸载相关知识
|
|
782
|
+
|
|
783
|
+
**示例:**
|
|
784
|
+
```
|
|
785
|
+
/extensions list
|
|
786
|
+
/extensions info
|
|
787
|
+
```
|
|
788
|
+
|
|
789
|
+
**功能说明:**
|
|
790
|
+
- `/extensions list`:显示当前可用的所有扩展列表
|
|
791
|
+
- `/extensions info`:获取关于如何安装、配置和卸载扩展的详细信息
|
|
792
|
+
|
|
793
|
+
---
|
|
794
|
+
|
|
795
|
+
### `/ext:` - 使用已安装的扩展命令
|
|
796
|
+
调用已安装的 context 类型扩展提供的斜杠命令。
|
|
797
|
+
|
|
798
|
+
**用法:** `/ext:<扩展名> [参数]`
|
|
799
|
+
|
|
800
|
+
**说明:**
|
|
801
|
+
- 当安装了扩展后,扩展可能提供自定义的斜杠命令
|
|
802
|
+
- 使用 `/ext:` 前缀可以调用这些已安装的 context 类型扩展
|
|
803
|
+
- 扩展命令会在已安装扩展列表中显示
|
|
804
|
+
|
|
805
|
+
**示例:**
|
|
806
|
+
```
|
|
807
|
+
/ext:myExtension
|
|
808
|
+
/ext:customCommand --option value
|
|
809
|
+
```
|
|
810
|
+
|
|
811
|
+
---
|
|
812
|
+
|
|
813
|
+
### `/vim` - Vim 模式
|
|
814
|
+
切换 vim 模式。
|
|
815
|
+
|
|
816
|
+
**用法:** `/vim`
|
|
817
|
+
|
|
818
|
+
**功能:**
|
|
819
|
+
- **NORMAL 模式:** `h`、`j`、`k`、`l` 导航;`w`、`b`、`e` 跳词;`0`、`^` 行首尾;`G`、`gg` 跳行
|
|
820
|
+
- **INSERT 模式:** 标准输入,`Esc` 返回 NORMAL
|
|
821
|
+
- **编辑:** `x`(删除)、`d`(删除)、`c`(修改)、`i`、`a`、`o`、`O`(插入)
|
|
822
|
+
- **复合:** `dd`、`cc`、`dw`、`cw`
|
|
823
|
+
- **计数:** `3h`、`5w`、`10G`
|
|
824
|
+
- **重复:** `.` 重复上次编辑
|
|
825
|
+
|
|
826
|
+
**状态指示:** 页脚显示 `[NORMAL]` 或 `[INSERT]`
|
|
827
|
+
|
|
828
|
+
**持久化:** 偏好保存到 `~/.deepv/settings.json`
|
|
829
|
+
|
|
830
|
+
**配置:**
|
|
831
|
+
```json
|
|
832
|
+
{
|
|
833
|
+
"vimMode": true
|
|
834
|
+
}
|
|
835
|
+
```
|
|
836
|
+
|
|
837
|
+
---
|
|
838
|
+
|
|
839
|
+
### `/agent-style` - AI 风格切换
|
|
840
|
+
切换 AI 工作风格:包括默认风格、Codex 极速风格,以及受 Cursor、Augment 等工具启发的一系列专业风格。
|
|
841
|
+
|
|
842
|
+
**用法:** `/agent-style [子命令]`
|
|
843
|
+
|
|
844
|
+
**子命令:**
|
|
845
|
+
- 无参数或 `status` - 显示当前风格及使用说明
|
|
846
|
+
- `default` - 切换到默认风格(🧠 强调计划、解释)
|
|
847
|
+
- `codex` - 切换到 Codex 风格(⚡ 快速确认后静默执行)
|
|
848
|
+
- `cursor` - 切换到 Cursor 风格(🎯 语义搜索优先,高并发调用)
|
|
849
|
+
- `augment` - 切换到 Augment 风格(🚀 任务列表驱动,严格验证)
|
|
850
|
+
- `claude-code` - 切换到 Claude Code 风格(⌨️ 极致极简,极高响应效率)
|
|
851
|
+
- `antigravity` - 切换到 Antigravity 风格(💎 知识库优先,高端协作流程)
|
|
852
|
+
- `windsurf` - 切换到 Windsurf 风格(🌊 基于 AI Flow 范式的独立与协作平衡)
|
|
853
|
+
|
|
854
|
+
**工作模式对比:**
|
|
855
|
+
|
|
856
|
+
| 风格 | 特点 | 适合场景 |
|
|
857
|
+
|-----|------|---------|
|
|
858
|
+
| **Default** 🧠 | 详细计划、充分解释、步骤确认 | 学习、复杂任务、需要理解过程 |
|
|
859
|
+
| **Codex** ⚡ | 快速执行、最少输出、静默完成 | 熟练场景、重复任务、追求效率 |
|
|
860
|
+
| **Cursor** 🎯 | 语义搜索增强、详细代码风格规范 | 大规模代码库探索、对代码质量有极高要求 |
|
|
861
|
+
| **Augment** 🚀 | 任务列表驱动、严格的版本控制和验证 | 复杂多步骤重构、需要严格执行流程的场景 |
|
|
862
|
+
| **Claude Code** ⌨️ | 极简响应、直接行动、杜绝废话 | 高频 CLI 交互、追求极致开发心流 |
|
|
863
|
+
| **Antigravity** 💎 | 知识发现优先、高端协作美学 | 深度研究、追求极致协同体验 |
|
|
864
|
+
| **Windsurf** 🌊 | AI Flow 范式、独立与协作平衡 | 现代 AI 驱动的全流程开发 |
|
|
865
|
+
|
|
866
|
+
**示例:**
|
|
867
|
+
```
|
|
868
|
+
/agent-style # 查看当前状态
|
|
869
|
+
/agent-style cursor # 切换到 Cursor 风格
|
|
870
|
+
/agent-style status # 查看当前状态
|
|
871
|
+
```
|
|
872
|
+
|
|
873
|
+
**注意:**
|
|
874
|
+
- Codex 模式自动启用 YOLO(跳过工具确认)
|
|
875
|
+
- 切换后配置会持久化,重启后保持
|
|
876
|
+
- 立即生效于当前会话
|
|
877
|
+
|
|
878
|
+
---
|
|
879
|
+
|
|
880
|
+
### `/plan` - 计划模式(只读分析)
|
|
881
|
+
启用计划模式,让 AI 只能读取和分析代码,不能执行修改操作。
|
|
882
|
+
|
|
883
|
+
**用法:** `/plan [子命令]`
|
|
884
|
+
|
|
885
|
+
**子命令:**
|
|
886
|
+
- `/plan` 或 `/plan on` - 启用计划模式
|
|
887
|
+
- `/plan off` - 退出计划模式
|
|
888
|
+
- `/plan status` - 查看当前状态
|
|
889
|
+
|
|
890
|
+
**适用场景:**
|
|
891
|
+
- 项目初期的需求讨论和架构规划
|
|
892
|
+
- 纯代码审查和分析
|
|
893
|
+
- 担心 AI 误修改代码时使用
|
|
894
|
+
- 想让 AI "先动脑不动手"的场景
|
|
895
|
+
|
|
896
|
+
**计划模式特性:**
|
|
897
|
+
- ✅ **允许使用读取类工具:** `read_file`、`read_many_files`、`list_directory`、`glob`、`search_file_content`、`task` 等
|
|
898
|
+
- 🚫 **禁用修改类工具:** `write_file`、`replace`、`run_shell_command`、`lint_fix`、`delete_file` 等
|
|
899
|
+
- 💡 **专注于:** 需求理解、方案讨论、架构设计、代码分析
|
|
900
|
+
- 🎨 **界面提示:** 显示绿色边框指示器 "📋 plan mode - read only"
|
|
901
|
+
- 📝 **输入提示:** "计划模式:可读取代码分析,禁止修改 (/plan off 退出)"
|
|
902
|
+
|
|
903
|
+
**典型使用流程:**
|
|
904
|
+
```
|
|
905
|
+
你: /plan on
|
|
906
|
+
系统: 📋 已进入计划模式(只读分析)
|
|
907
|
+
|
|
908
|
+
你: 帮我分析这个项目的认证模块设计
|
|
909
|
+
AI: [使用 read_file、search_file_content 等工具分析代码]
|
|
910
|
+
AI: [给出架构分析和改进建议]
|
|
911
|
+
|
|
912
|
+
你: /plan off
|
|
913
|
+
系统: [向 AI 发送退出通知]
|
|
914
|
+
|
|
915
|
+
你: 按照刚才的建议帮我重构认证模块
|
|
916
|
+
AI: [使用 write_file、replace 等工具执行修改]
|
|
917
|
+
```
|
|
918
|
+
|
|
919
|
+
**注意事项:**
|
|
920
|
+
- 启用计划模式后,AI 会在每条消息前收到模式提示
|
|
921
|
+
- 退出计划模式时,系统会自动通知 AI 恢复正常权限
|
|
922
|
+
- 计划模式不影响对话历史记录
|
|
923
|
+
|
|
924
|
+
**配置:**
|
|
925
|
+
计划模式状态会自动保存到配置中,重启 CLI 后会保持。
|
|
926
|
+
|
|
927
|
+
**一句话总结:** 让 AI 先动脑不动手,确认方案后再让它干活!
|
|
928
|
+
|
|
929
|
+
---
|
|
930
|
+
|
|
931
|
+
### `/feishu` - 飞书机器人管理
|
|
932
|
+
管理 DeepV Code 与飞书 (Feishu) / Lark 的机器人长连接及接入。
|
|
933
|
+
|
|
934
|
+
**用法:** `/feishu [子命令]`
|
|
935
|
+
|
|
936
|
+
**子命令:**
|
|
937
|
+
- `/feishu` 或 `/feishu setup` - 交互式启动设置,获取机器人配置凭据。
|
|
938
|
+
- `/feishu start` - 开启与飞书的高速 WebSocket 长连接消息网关。
|
|
939
|
+
- `/feishu stop` - 关闭飞书连接网关。
|
|
940
|
+
- `/feishu status` - 实时查看机器人运行、bound 工作区、绑定的项目、及权限申请状态。
|
|
941
|
+
- `/feishu logout` - 清理并注销当前存储的飞书机器人密钥及凭据。
|
|
942
|
+
|
|
943
|
+
---
|
|
944
|
+
|
|
945
|
+
### `/goal` - 目标驱动模式
|
|
946
|
+
开启对多步骤高复杂任务的契约型自动迭代执行,承诺不达目的誓不罢休。
|
|
947
|
+
|
|
948
|
+
**用法:** `/goal [子命令]`
|
|
949
|
+
|
|
950
|
+
**子命令:**
|
|
951
|
+
- `/goal` 或 `/goal new` - 打开 GoalWizard 多步配置向导并开启目标执行。
|
|
952
|
+
- `/goal clear` - 主动打破目标契约、释放锁定。
|
|
953
|
+
|
|
954
|
+
**工作原理:**
|
|
955
|
+
- 开启后,系统在每轮会话都自动对 AI 持续注流当前活动的目标约束、禁止项和验收指标。
|
|
956
|
+
- AI 达标后必须调用 `goal_achieved` 验证工具,由系统验证无误后自动解除契约。
|
|
957
|
+
- **看门狗(Watchdog):** 在执行过程中,若 AI 空转或无实质动作,空闲看门狗将触发系统警告提示 AI 评估路线,从而防止 AI 卡死。
|
|
958
|
+
|
|
959
|
+
---
|
|
960
|
+
|
|
961
|
+
### `/debate` - 多模型对决代码审查
|
|
962
|
+
让多名 AI 专家(不同模型)针对关键代码段、设计方案或 Bug 修复进行激辩、多维评估与对审。
|
|
963
|
+
|
|
964
|
+
**用法:** `/debate`
|
|
965
|
+
|
|
966
|
+
**说明:**
|
|
967
|
+
- 该命令会打开交互式多模型激辩向导。
|
|
968
|
+
- 引导你选择参与论战的模型、激辩的主题以及辩论的轮数。
|
|
969
|
+
- 结束辩论后,系统会自动组织轻量级高速模型提炼论战核心成果并输出正式的 `DEBATE_SUMMARY.md`。
|
|
970
|
+
|
|
971
|
+
---
|
|
972
|
+
|
|
973
|
+
### `/thinking` - 自适应思考深度配置
|
|
974
|
+
一键调整模型思考与推理的深度,从而自适应各大模型的思维深度。
|
|
975
|
+
|
|
976
|
+
**用法:** `/thinking [子命令]`
|
|
977
|
+
|
|
978
|
+
**子命令:**
|
|
979
|
+
- `/thinking` - 打开交互式滑块菜单选择思考级别(None, Low, Medium, High, Extreme)。
|
|
980
|
+
- `/thinking on` - 开启最大深度思考模式。
|
|
981
|
+
- `/thinking off` - 关闭思考,转为快速直连回答模式。
|
|
982
|
+
|
|
983
|
+
**配置优势:**
|
|
984
|
+
- 支持 Claude 3.7+ 的 Thinking Budget,OpenAI 级别 Effort 及 Gemini 的自适应思维映射。
|
|
985
|
+
- 自动绕过 Haiku 等不支持思考的模型,提供对 Kimi 等中继网关的自动推理块重组与格式清洗(防 400 格式崩溃)。
|
|
986
|
+
|
|
987
|
+
---
|
|
988
|
+
|
|
989
|
+
### Q9: 自定义命令
|
|
990
|
+
用户可创建自定义斜杠命令。
|
|
991
|
+
|
|
992
|
+
---
|
|
993
|
+
|
|
994
|
+
**位置:**
|
|
995
|
+
- 全局:`~/.deepv/commands/`
|
|
996
|
+
- 项目:`<项目根>/.deepvcode/commands/`
|
|
997
|
+
|
|
998
|
+
#### 文件格式:TOML(`.toml` 扩展名)
|
|
999
|
+
|
|
1000
|
+
#### 命名:文件路径决定命令名
|
|
1001
|
+
- `~/.deepv/commands/test.toml` → `/test`
|
|
1002
|
+
- `<项目>/.deepvcode/commands/git/commit.toml` → `/git:commit`
|
|
1003
|
+
|
|
1004
|
+
#### 必需字段:
|
|
1005
|
+
- `prompt`(字符串):发送给模型的 prompt
|
|
1006
|
+
|
|
1007
|
+
#### 可选字段:
|
|
1008
|
+
- `description`(字符串):命令描述(显示在帮助中)
|
|
1009
|
+
|
|
1010
|
+
#### 参数处理:
|
|
1011
|
+
1. **简写注入 `{{args}}`**
|
|
1012
|
+
```toml
|
|
1013
|
+
prompt = "分析代码并修复:{{args}}"
|
|
1014
|
+
```
|
|
1015
|
+
调用:`/fix TypeError in line 42`
|
|
1016
|
+
|
|
1017
|
+
2. **默认追加**(无 `{{args}}`)
|
|
1018
|
+
- 有参数:追加到 prompt 末尾(两个换行分隔)
|
|
1019
|
+
- 无参数:原样发送 prompt
|
|
1020
|
+
|
|
1021
|
+
**示例:**
|
|
1022
|
+
```toml
|
|
1023
|
+
# ~/.deepv/commands/changelog.toml
|
|
1024
|
+
description = "添加新条目到 CHANGELOG.md"
|
|
1025
|
+
prompt = """
|
|
1026
|
+
请将用户提供的变更添加到 CHANGELOG.md。
|
|
1027
|
+
格式:/changelog <version> <type> <message>
|
|
1028
|
+
type 可以是:added、changed、fixed、removed
|
|
1029
|
+
"""
|
|
1030
|
+
```
|
|
1031
|
+
|
|
1032
|
+
**相关文档:** `docs/cli/commands.md` 的 "Custom Commands" 章节
|
|
1033
|
+
|
|
1034
|
+
---
|
|
1035
|
+
|
|
1036
|
+
## 📄 At 命令 (File Inclusion `@`)
|
|
1037
|
+
|
|
1038
|
+
### `@<路径>` - 包含文件内容
|
|
1039
|
+
将文件或目录内容注入到 prompt 中。支持多种文件格式,包括代码文件、文档文件等。
|
|
1040
|
+
|
|
1041
|
+
**支持的文件格式:**
|
|
1042
|
+
- **代码文件:** `.ts`, `.js`, `.py`, `.java`, `.cpp` 等所有文本文件
|
|
1043
|
+
- **文档文件:** `.pdf`, `.docx` (Word), `.xlsx` / `.xls` (Excel)
|
|
1044
|
+
- **图片文件:** `.png`, `.jpg`, `.gif`, `.webp`, `.svg`, `.bmp`
|
|
1045
|
+
- **Markdown:** `.md`
|
|
1046
|
+
|
|
1047
|
+
**用法:**
|
|
1048
|
+
- `@path/to/file.txt` - 单个文件
|
|
1049
|
+
- `@src/components/` - 整个目录
|
|
1050
|
+
- `@README.md 解释这个文件` - 结合问题
|
|
1051
|
+
- `@report.pdf` - PDF 文档
|
|
1052
|
+
- `@data.xlsx` - Excel 表格
|
|
1053
|
+
- `@document.docx` - Word 文档
|
|
1054
|
+
|
|
1055
|
+
**示例:**
|
|
1056
|
+
```
|
|
1057
|
+
@src/utils/helper.ts 重构这个文件
|
|
1058
|
+
@docs/ 总结这个目录的文档
|
|
1059
|
+
解释这段代码 @main.py
|
|
1060
|
+
@项目报告.pdf 总结这份报告的关键内容
|
|
1061
|
+
@数据统计.xlsx 分析这个表格中的数据趋势
|
|
1062
|
+
@需求文档.docx 提取功能需求列表
|
|
1063
|
+
```
|
|
1064
|
+
|
|
1065
|
+
**智能文件识别:**
|
|
1066
|
+
- AI 会根据文件扩展名自动识别文件类型
|
|
1067
|
+
- 无需特殊语法,像读取代码文件一样使用 `@` 命令即可
|
|
1068
|
+
- AI 也可以在认为有必要时主动读取这些文档文件
|
|
1069
|
+
|
|
1070
|
+
### `@` - 粘贴剪贴板中的截图
|
|
1071
|
+
使用 `@` 符号可以将剪贴板中的截图或图片内容粘贴到对话中。
|
|
1072
|
+
|
|
1073
|
+
**用法:**
|
|
1074
|
+
1. 输入 `@` 符号
|
|
1075
|
+
2. 系统会弹出选项菜单
|
|
1076
|
+
3. 选择 `clipboardPaste clipboard content` 选项
|
|
1077
|
+
4. 剪贴板中的截图会被插入到对话中
|
|
1078
|
+
|
|
1079
|
+
**快捷键(直接粘贴,无需菜单):**
|
|
1080
|
+
- **macOS/Linux:** `Ctrl+V` - 直接粘贴剪贴板中的截图
|
|
1081
|
+
- **Windows:** `Ctrl+G` - 直接粘贴剪贴板中的截图
|
|
1082
|
+
|
|
1083
|
+
**示例:**
|
|
1084
|
+
```
|
|
1085
|
+
# 方法一:使用快捷键(推荐)
|
|
1086
|
+
截取屏幕截图后:
|
|
1087
|
+
Ctrl+V # macOS/Linux 下直接粘贴
|
|
1088
|
+
Ctrl+G # Windows 下直接粘贴
|
|
1089
|
+
|
|
1090
|
+
# 方法二:使用 @ 符号
|
|
1091
|
+
@ # 输入 @ 符号
|
|
1092
|
+
# 在弹出的菜单中选择 "clipboardPaste clipboard content"
|
|
1093
|
+
|
|
1094
|
+
# 截图插入后,继续输入问题
|
|
1095
|
+
分析这个截图中的错误信息
|
|
1096
|
+
```
|
|
1097
|
+
|
|
1098
|
+
**注意:**
|
|
1099
|
+
- 快捷键可以直接粘贴,无需选择菜单
|
|
1100
|
+
- 如果快捷键不起作用,使用 `@` 符号通过菜单选择是可靠的备用方案
|
|
1101
|
+
- 支持的图片格式取决于你的操作系统剪贴板
|
|
1102
|
+
|
|
1103
|
+
**特性:**
|
|
1104
|
+
- **Git 感知:** 默认排除 `.gitignore` 文件(如 `node_modules/`、`dist/`、`.env`)
|
|
1105
|
+
- **路径空格:** 使用反斜杠转义:`@My\ Documents/file.txt`
|
|
1106
|
+
- **工具调用:** 内部使用 `read_many_files` 工具
|
|
1107
|
+
|
|
1108
|
+
**配置:**
|
|
1109
|
+
```json
|
|
1110
|
+
{
|
|
1111
|
+
"fileFiltering": {
|
|
1112
|
+
"respectGitIgnore": true,
|
|
1113
|
+
"enableRecursiveFileSearch": true
|
|
1114
|
+
}
|
|
1115
|
+
}
|
|
1116
|
+
```
|
|
1117
|
+
|
|
1118
|
+
**错误处理:**
|
|
1119
|
+
- 路径不存在:显示错误,不发送 query
|
|
1120
|
+
- 权限问题:报告错误
|
|
1121
|
+
|
|
1122
|
+
### `@` - 纯 @ 符号
|
|
1123
|
+
单独的 `@` 会原样传递给模型(不作为命令处理)。
|
|
1124
|
+
|
|
1125
|
+
---
|
|
1126
|
+
|
|
1127
|
+
## 🖥️ Shell 模式 (Shell Commands `!`)
|
|
1128
|
+
|
|
1129
|
+
### `!<命令>` - 执行 Shell 命令
|
|
1130
|
+
在 CLI 内直接执行 shell 命令。
|
|
1131
|
+
|
|
1132
|
+
**用法:** `!<shell_command>`
|
|
1133
|
+
|
|
1134
|
+
**示例:**
|
|
1135
|
+
```
|
|
1136
|
+
!ls -la
|
|
1137
|
+
!git status
|
|
1138
|
+
!npm install
|
|
1139
|
+
!python script.py
|
|
1140
|
+
```
|
|
1141
|
+
|
|
1142
|
+
**平台:**
|
|
1143
|
+
- Linux/macOS:使用 `bash`
|
|
1144
|
+
- Windows:使用 `cmd.exe`
|
|
1145
|
+
|
|
1146
|
+
**环境变量:** 执行时自动设置 `GEMINI_CLI=1`
|
|
1147
|
+
|
|
1148
|
+
**注意:** 命令具有与终端相同的权限和影响。
|
|
1149
|
+
|
|
1150
|
+
### `!` - 切换 Shell 模式
|
|
1151
|
+
单独的 `!` 切换 shell 模式。
|
|
1152
|
+
|
|
1153
|
+
**用法:** `!`
|
|
1154
|
+
|
|
1155
|
+
**Shell 模式特性:**
|
|
1156
|
+
- 不同的颜色提示
|
|
1157
|
+
- Shell 模式指示器
|
|
1158
|
+
- 输入直接作为 shell 命令执行
|
|
1159
|
+
- 再次输入 `!` 退出 shell 模式
|
|
1160
|
+
|
|
1161
|
+
**使用场景:**
|
|
1162
|
+
- 需要执行多个连续 shell 命令
|
|
1163
|
+
- 临时进入 shell 环境
|
|
1164
|
+
|
|
1165
|
+
---
|
|
1166
|
+
|
|
1167
|
+
## ⚙️ 配置系统
|
|
1168
|
+
|
|
1169
|
+
### 配置层次(优先级递增)
|
|
1170
|
+
1. **默认值**:硬编码默认值
|
|
1171
|
+
2. **用户设置**:`~/.deepv/settings.json`(全局)
|
|
1172
|
+
3. **项目设置**:`<项目根>/.deepvcode/settings.json`(项目专用)
|
|
1173
|
+
|
|
1174
|
+
|
|
1175
|
+
### 环境变量
|
|
1176
|
+
|
|
1177
|
+
#### 从 `.env` 文件加载
|
|
1178
|
+
CLI 自动加载 `.env` 文件,搜索顺序:
|
|
1179
|
+
1. 当前工作目录
|
|
1180
|
+
2. 父目录(直到项目根或用户主目录)
|
|
1181
|
+
3. 用户主目录 `~/.env`
|
|
1182
|
+
|
|
1183
|
+
#### 变量引用
|
|
1184
|
+
在 `settings.json` 中可引用环境变量:
|
|
1185
|
+
```json
|
|
1186
|
+
{
|
|
1187
|
+
"apiKey": "$MY_API_TOKEN"
|
|
1188
|
+
}
|
|
1189
|
+
```
|
|
1190
|
+
|
|
1191
|
+
或:
|
|
1192
|
+
```json
|
|
1193
|
+
{
|
|
1194
|
+
"apiKey": "${MY_API_TOKEN}"
|
|
1195
|
+
}
|
|
1196
|
+
```
|
|
1197
|
+
|
|
1198
|
+
|
|
1199
|
+
|
|
1200
|
+
### 命令行参数
|
|
1201
|
+
|
|
1202
|
+
- `--model <name>` / `-m <name>`:指定模型
|
|
1203
|
+
- `--prompt <text>` / `-p <text>`:非交互模式 prompt
|
|
1204
|
+
- `--output-format <format>`:非交互模式的输出格式
|
|
1205
|
+
- `stream-json`:以 JSONL 格式(一行一个 JSON 对象)输出结果,适合自动化和第三方工具集成
|
|
1206
|
+
- 示例:`dvcode --output-format stream-json --yolo "你的prompt内容"`
|
|
1207
|
+
- `--yolo`:自动批准所有工具调用
|
|
1208
|
+
- `--cloud-mode`:云模式,以便从Web上远程控制本机CLI工作
|
|
1209
|
+
|
|
1210
|
+
**非交互式模式适用场景:**
|
|
1211
|
+
- **CI/CD 集成**:在自动化工作流中无需人工确认
|
|
1212
|
+
- **第三方工具集成**:通过 JSONL 格式与其他程序交互
|
|
1213
|
+
- **批量处理**:在脚本中自动处理大量代码文件
|
|
1214
|
+
- **监控和告警**:自动分析日志和代码并触发告警
|
|
1215
|
+
- **自动化代码审查**:在代码提交时自动审查代码质量
|
|
1216
|
+
|
|
1217
|
+
**非交互式模式示例:**
|
|
1218
|
+
```bash
|
|
1219
|
+
# 标准输出
|
|
1220
|
+
dvcode --prompt "解释 main.py" -a
|
|
1221
|
+
|
|
1222
|
+
# JSONL 格式(一行一个 JSON 对象)
|
|
1223
|
+
dvcode --output-format stream-json --yolo "分析代码并生成改进建议" @src/
|
|
1224
|
+
|
|
1225
|
+
# 与其他工具组合
|
|
1226
|
+
dvcode --output-format stream-json --yolo "生成代码" @schema.json | jq '.content'
|
|
1227
|
+
```
|
|
1228
|
+
|
|
1229
|
+
**其他参数示例:**
|
|
1230
|
+
```bash
|
|
1231
|
+
dvcode --model gemini-2.0-flash-exp --debug
|
|
1232
|
+
dvcode --checkpointing --sandbox
|
|
1233
|
+
dvcode -e my-extension -e another
|
|
1234
|
+
```
|
|
1235
|
+
|
|
1236
|
+
---
|
|
1237
|
+
|
|
1238
|
+
## 🗂️ 上下文文件(分层记忆)
|
|
1239
|
+
|
|
1240
|
+
### 文件名
|
|
1241
|
+
默认:`GEMINI.md`
|
|
1242
|
+
|
|
1243
|
+
可通过 `contextFileName` 设置自定义:
|
|
1244
|
+
```json
|
|
1245
|
+
{
|
|
1246
|
+
"contextFileName": "DEEPV.md"
|
|
1247
|
+
}
|
|
1248
|
+
```
|
|
1249
|
+
|
|
1250
|
+
### 作用
|
|
1251
|
+
向 AI 提供项目特定的指令、编码规范、背景信息。
|
|
1252
|
+
|
|
1253
|
+
### 层次结构(优先级递增)
|
|
1254
|
+
1. **全局:** `~/.deepv/GEMINI.md`(所有项目)
|
|
1255
|
+
2. **项目根及父目录:** 从当前目录向上搜索(直到项目根或主目录)
|
|
1256
|
+
3. **子目录:** 项目内的子目录(限制 200 个目录,可通过 `memoryDiscoveryMaxDirs` 配置)
|
|
1257
|
+
|
|
1258
|
+
### 内容示例
|
|
1259
|
+
```markdown
|
|
1260
|
+
# 项目:My TypeScript Library
|
|
1261
|
+
|
|
1262
|
+
## 通用指令
|
|
1263
|
+
- 遵循现有代码风格
|
|
1264
|
+
- 函数和类需要 JSDoc 注释
|
|
1265
|
+
- 优先使用函数式编程
|
|
1266
|
+
- 兼容 TypeScript 5.0 和 Node.js 20+
|
|
1267
|
+
|
|
1268
|
+
## 编码规范
|
|
1269
|
+
- 2 空格缩进
|
|
1270
|
+
- 接口名前缀 `I`(如 `IUserService`)
|
|
1271
|
+
- 私有成员前缀 `_`
|
|
1272
|
+
- 使用严格相等 `===` 和 `!==`
|
|
1273
|
+
|
|
1274
|
+
## 特定组件:src/api/client.ts
|
|
1275
|
+
- 处理所有出站 API 请求
|
|
1276
|
+
- 新增 API 函数需包含错误处理和日志
|
|
1277
|
+
- GET 请求使用 `fetchWithRetry` 工具
|
|
1278
|
+
|
|
1279
|
+
## 依赖
|
|
1280
|
+
- 避免引入新依赖(除非必要)
|
|
1281
|
+
- 如需新依赖,请说明原因
|
|
1282
|
+
```
|
|
1283
|
+
|
|
1284
|
+
### 管理命令
|
|
1285
|
+
- `/memory show`:查看当前加载的完整记忆
|
|
1286
|
+
- `/memory refresh`:重新加载所有上下文文件
|
|
1287
|
+
- `/memory add <text>`:添加临时记忆
|
|
1288
|
+
|
|
1289
|
+
### UI 指示
|
|
1290
|
+
页脚显示已加载的上下文文件数量。
|
|
1291
|
+
|
|
1292
|
+
---
|
|
1293
|
+
|
|
1294
|
+
## 🔒 沙箱模式
|
|
1295
|
+
|
|
1296
|
+
### 启用方式
|
|
1297
|
+
- 命令行:`dvcode --sandbox` 或 `dvcode -s`
|
|
1298
|
+
- 环境变量:`GEMINI_SANDBOX=true`
|
|
1299
|
+
- 配置:`{"sandbox": true}` 或 `{"sandbox": "docker"}`
|
|
1300
|
+
- YOLO 模式:默认启用沙箱
|
|
1301
|
+
|
|
1302
|
+
### 默认行为
|
|
1303
|
+
使用预构建的 `gemini-cli-sandbox` Docker 镜像。
|
|
1304
|
+
|
|
1305
|
+
### 自定义沙箱
|
|
1306
|
+
在项目根创建 `.deepvcode/sandbox.Dockerfile`:
|
|
1307
|
+
```dockerfile
|
|
1308
|
+
FROM gemini-cli-sandbox
|
|
1309
|
+
|
|
1310
|
+
RUN apt-get update && apt-get install -y some-package
|
|
1311
|
+
COPY ./my-config /app/my-config
|
|
1312
|
+
```
|
|
1313
|
+
|
|
1314
|
+
构建并使用:
|
|
1315
|
+
```bash
|
|
1316
|
+
BUILD_SANDBOX=1 dvcode -s
|
|
1317
|
+
```
|
|
1318
|
+
|
|
1319
|
+
### macOS Seatbelt
|
|
1320
|
+
使用 `SEATBELT_PROFILE` 环境变量:
|
|
1321
|
+
- `permissive-open`(默认):限制写入项目文件夹
|
|
1322
|
+
- `strict`:严格模式
|
|
1323
|
+
- `<profile_name>`:自定义 profile(`.deepvcode/sandbox-macos-<profile_name>.sb`)
|
|
1324
|
+
|
|
1325
|
+
---
|
|
1326
|
+
|
|
1327
|
+
## 📊 使用统计
|
|
1328
|
+
|
|
1329
|
+
### 收集内容
|
|
1330
|
+
- **工具调用:** 名称、成功/失败、耗时(不含参数和返回值)
|
|
1331
|
+
- **API 请求:** 模型、时长、成功状态(不含 prompt/response)
|
|
1332
|
+
- **会话信息:** 配置、启用工具、审批模式
|
|
1333
|
+
|
|
1334
|
+
### 不收集内容
|
|
1335
|
+
- 个人身份信息 (PII)
|
|
1336
|
+
- Prompt 和 Response 内容
|
|
1337
|
+
- 文件内容
|
|
1338
|
+
|
|
1339
|
+
### 关闭统计
|
|
1340
|
+
```json
|
|
1341
|
+
{
|
|
1342
|
+
"usageStatisticsEnabled": false
|
|
1343
|
+
}
|
|
1344
|
+
```
|
|
1345
|
+
|
|
1346
|
+
---
|
|
1347
|
+
|
|
1348
|
+
## 🎓 常见使用场景
|
|
1349
|
+
|
|
1350
|
+
### 场景 1:开始新项目
|
|
1351
|
+
```bash
|
|
1352
|
+
cd my-new-project
|
|
1353
|
+
dvcode --init # 生成 DEEPV.md
|
|
1354
|
+
dvcode # 启动 CLI
|
|
1355
|
+
```
|
|
1356
|
+
|
|
1357
|
+
CLI 内:
|
|
1358
|
+
```
|
|
1359
|
+
/memory show # 查看加载的上下文
|
|
1360
|
+
@src/ 分析这个项目的架构
|
|
1361
|
+
```
|
|
1362
|
+
|
|
1363
|
+
### 场景 2:调试代码
|
|
1364
|
+
```
|
|
1365
|
+
@src/buggy-file.ts 这里有个 TypeError,帮我找出原因
|
|
1366
|
+
|
|
1367
|
+
# AI 分析后给出修复建议
|
|
1368
|
+
|
|
1369
|
+
/chat save debug-session # 保存会话以便后续继续
|
|
1370
|
+
```
|
|
1371
|
+
|
|
1372
|
+
### 场景 3:切换任务
|
|
1373
|
+
```
|
|
1374
|
+
/chat save feature-login # 保存当前任务
|
|
1375
|
+
/chat list # 查看所有保存的会话
|
|
1376
|
+
/chat resume feature-payment # 切换到支付功能任务
|
|
1377
|
+
```
|
|
1378
|
+
|
|
1379
|
+
### 场景 4:配置 MCP 服务器
|
|
1380
|
+
编辑 `.deepvcode/settings.json` 或 `~/.deepv/settings.json`:
|
|
1381
|
+
```json
|
|
1382
|
+
{
|
|
1383
|
+
"mcpServers": {
|
|
1384
|
+
"database": {
|
|
1385
|
+
"command": "python",
|
|
1386
|
+
"args": ["db_mcp_server.py"],
|
|
1387
|
+
"env": {
|
|
1388
|
+
"DB_URL": "$DATABASE_URL"
|
|
1389
|
+
}
|
|
1390
|
+
}
|
|
1391
|
+
}
|
|
1392
|
+
}
|
|
1393
|
+
```
|
|
1394
|
+
|
|
1395
|
+
重启 CLI,然后:
|
|
1396
|
+
```
|
|
1397
|
+
/mcp # 查看服务器状态
|
|
1398
|
+
/tools # 查看新增的数据库工具
|
|
1399
|
+
```
|
|
1400
|
+
|
|
1401
|
+
### 场景 5:创建自定义命令
|
|
1402
|
+
创建 `~/.deepv/commands/docs/generate.toml`:
|
|
1403
|
+
```toml
|
|
1404
|
+
description = "生成 API 文档"
|
|
1405
|
+
prompt = """
|
|
1406
|
+
请为以下代码生成详细的 API 文档:{{args}}
|
|
1407
|
+
|
|
1408
|
+
文档格式:
|
|
1409
|
+
- 函数签名
|
|
1410
|
+
- 参数说明
|
|
1411
|
+
- 返回值说明
|
|
1412
|
+
- 使用示例
|
|
1413
|
+
- 注意事项
|
|
1414
|
+
"""
|
|
1415
|
+
```
|
|
1416
|
+
|
|
1417
|
+
使用:
|
|
1418
|
+
```
|
|
1419
|
+
/docs:generate @src/api/users.ts
|
|
1420
|
+
```
|
|
1421
|
+
|
|
1422
|
+
---
|
|
1423
|
+
|
|
1424
|
+
## 🚨 故障排查
|
|
1425
|
+
|
|
1426
|
+
### 问题:模型返回错误或无法连接
|
|
1427
|
+
**检查:**
|
|
1428
|
+
1. 是否有足够的额度
|
|
1429
|
+
2. 网络连接是否正常
|
|
1430
|
+
3. 是否登录已过期,可以尝试 `/auth` 重新登录
|
|
1431
|
+
4. 尝试切换模型:`/model`
|
|
1432
|
+
|
|
1433
|
+
|
|
1434
|
+
### 问题:MCP 服务器无法连接
|
|
1435
|
+
**检查:**
|
|
1436
|
+
1. 服务器命令路径是否正确
|
|
1437
|
+
2. 环境变量是否设置
|
|
1438
|
+
3. 服务器日志(启用调试模式)
|
|
1439
|
+
4. 使用 `/mcp` 查看连接状态
|
|
1440
|
+
|
|
1441
|
+
|
|
1442
|
+
### 问题:自定义命令不显示
|
|
1443
|
+
**检查:**
|
|
1444
|
+
1. 文件位置:`~/.deepv/commands/` 或 `<项目>/.deepvcode/commands/`
|
|
1445
|
+
2. 文件扩展名:必须是 `.toml`
|
|
1446
|
+
3. 文件格式:必须包含 `prompt` 字段
|
|
1447
|
+
4. 重启 CLI
|
|
1448
|
+
|
|
1449
|
+
### 问题:记忆文件未加载
|
|
1450
|
+
**检查:**
|
|
1451
|
+
1. 文件名是否正确(默认 `DEEPV.md`)
|
|
1452
|
+
2. 使用 `/memory show` 查看加载状态
|
|
1453
|
+
3. 使用 `/memory refresh` 重新加载
|
|
1454
|
+
4. 检查格式是否为合法的 markdown
|
|
1455
|
+
|
|
1456
|
+
---
|
|
1457
|
+
|
|
1458
|
+
## 🔚 结语
|
|
1459
|
+
|
|
1460
|
+
这份知识库涵盖了 DeepV Code CLI 的所有核心功能。如果你有任何问题,请随时询问!
|
|
1461
|
+
|
|
1462
|
+
---
|
|
1463
|
+
|
|
1464
|
+
### Q10: 如何快速切换 AI 模型?
|
|
1465
|
+
**A:** 按 **`Ctrl+L`** 快捷键即可快速打开模型选择菜单。
|
|
1466
|
+
|
|
1467
|
+
无需输入 `/model` 命令,直接按下 `Ctrl+L` 后,系统会立即弹出可用模型列表,你可以用方向键选择要切换的模型,然后按回车确认。这是切换模型最快的方式。
|
|
1468
|
+
|
|
1469
|
+
**快捷键优势:**
|
|
1470
|
+
- ⚡ 比输入命令更快
|
|
1471
|
+
- 🎯 随时随地快速切换模型
|
|
1472
|
+
- 🖱️ 与 `/model` 命令功能完全相同
|
|
1473
|
+
|
|
1474
|
+
---
|
|
1475
|
+
|
|
1476
|
+
### Q11: 如何在输入时快速移动光标?
|
|
1477
|
+
**A:** 使用 **`Alt+Left`** 和 **`Alt+Right`** 快捷键可以按单词快速前后移动光标。
|
|
1478
|
+
|
|
1479
|
+
- **`Alt+Left`**:光标向左移动一个单词
|
|
1480
|
+
- **`Alt+Right`**:光标向右移动一个单词
|
|
1481
|
+
|
|
1482
|
+
这对于编辑长句子或复杂的代码非常有用,特别是当你需要快速定位到特定单词进行修改时。
|
|
1483
|
+
|
|
1484
|
+
**使用场景:**
|
|
1485
|
+
- 编辑长提示词时快速定位
|
|
1486
|
+
- 修改多行输入中的特定单词
|
|
1487
|
+
- 快速跳过空格和符号,精准定位到单词位置
|
|
1488
|
+
|
|
1489
|
+
---
|
|
1490
|
+
|
|
1491
|
+
### Q12: 如何将 Shell 命令放到后台执行?
|
|
1492
|
+
**A:** 在 Shell 命令执行过程中按 **`Ctrl+B`** 可以将当前命令转为后台执行。
|
|
1493
|
+
|
|
1494
|
+
**使用场景:**
|
|
1495
|
+
- 执行耗时的 `npm install`、`pip install` 等安装命令
|
|
1496
|
+
- 运行长时间的 `ping`、`curl` 测试
|
|
1497
|
+
- 执行编译、构建等需要较长时间的任务
|
|
1498
|
+
- 不想等待命令完成,想继续和 AI 对话
|
|
1499
|
+
|
|
1500
|
+
**操作步骤:**
|
|
1501
|
+
1. AI 执行 Shell 命令时(如 `ping -n 100 127.0.0.1`)
|
|
1502
|
+
2. 在命令执行过程中按下 `Ctrl+B`
|
|
1503
|
+
3. 命令会转入后台继续执行,界面显示 `▸ Running in background...`
|
|
1504
|
+
4. 你可以继续与 AI 对话,不受影响
|
|
1505
|
+
5. 后台任务完成后,AI 会自动感知并汇报结果
|
|
1506
|
+
|
|
1507
|
+
**后台任务管理:**
|
|
1508
|
+
- **`↓` 键**:当有后台任务运行时,按下向下箭头打开任务管理面板
|
|
1509
|
+
- **任务管理面板操作:**
|
|
1510
|
+
- `↑`/`↓`:选择任务
|
|
1511
|
+
- `K`:终止(Kill)选中的任务
|
|
1512
|
+
- `Esc`:关闭面板
|
|
1513
|
+
|
|
1514
|
+
**界面提示:**
|
|
1515
|
+
- 输入框下方会显示:`⎿ Running in background (↓ to manage)`
|
|
1516
|
+
- 任务 ID 使用短哈希(如 `22e53c2`)便于识别
|
|
1517
|
+
|
|
1518
|
+
**AI 自动感知:**
|
|
1519
|
+
- 后台任务完成、失败或被终止后,AI 会自动收到通知
|
|
1520
|
+
- 如果当前处于空闲状态,AI 会主动汇报任务结果
|
|
1521
|
+
- 任务输出(stdout/stderr)会完整保留并展示
|
|
1522
|
+
|
|
1523
|
+
**示例:**
|
|
1524
|
+
```
|
|
1525
|
+
你:帮我 ping 本地 100 次
|
|
1526
|
+
AI:[开始执行 ping -n 100 127.0.0.1]
|
|
1527
|
+
你:[按下 Ctrl+B]
|
|
1528
|
+
系统:[命令转入后台,Task ID: 22e53c2]
|
|
1529
|
+
你:继续帮我看看这个代码...
|
|
1530
|
+
AI:[继续回答你的问题]
|
|
1531
|
+
...
|
|
1532
|
+
系统:[后台任务完成通知]
|
|
1533
|
+
AI:Ping 任务已完成,100 包全部收到,0% 丢包。
|
|
1534
|
+
```
|
|
1535
|
+
|
|
1536
|
+
---
|
|
1537
|
+
|
|
1538
|
+
### Q14: 如何在 CLI 中生成图片?
|
|
1539
|
+
**A:** 使用 `/nanobanana` 命令可以直接在 CLI 中生成图片。
|
|
1540
|
+
|
|
1541
|
+
**语法:** `/nanobanana <宽高比> <提示词描述>`
|
|
1542
|
+
|
|
1543
|
+
**支持的宽高比:**
|
|
1544
|
+
- `1:1` - 正方形
|
|
1545
|
+
- `16:9` - 宽屏横向
|
|
1546
|
+
- `9:16` - 竖屏纵向
|
|
1547
|
+
- `4:3` - 传统横向
|
|
1548
|
+
- `3:4` - 传统纵向
|
|
1549
|
+
|
|
1550
|
+
**使用示例:**
|
|
1551
|
+
```
|
|
1552
|
+
/nanobanana 16:9 一只可爱的柴犬在樱花树下奔跑
|
|
1553
|
+
/nanobanana 1:1 赛博朋克风格的城市夜景,霓虹灯闪烁
|
|
1554
|
+
/nanobanana 9:16 手机壁纸,星空下的雪山
|
|
1555
|
+
```
|
|
1556
|
+
|
|
1557
|
+
**注意事项:**
|
|
1558
|
+
- 生成后会显示可访问的 URL,如果系统支持也会自动打开浏览器
|
|
1559
|
+
- 提示词越详细,生成的图片质量越高
|
|
1560
|
+
- 此功能会消耗一定的积分
|
|
1561
|
+
|
|
1562
|
+
---
|
|
1563
|
+
|
|
1564
|
+
### Q15: 如何清理 Checkpoint 历史记录释放磁盘空间?
|
|
1565
|
+
**A:** 使用 `dvcode checkpoint clean` 命令清理所有历史检查点。
|
|
1566
|
+
|
|
1567
|
+
**命令用法:**
|
|
1568
|
+
```bash
|
|
1569
|
+
# 清理所有 checkpoint 历史(会提示确认)
|
|
1570
|
+
dvcode checkpoint clean
|
|
1571
|
+
|
|
1572
|
+
# 预览将要删除的内容(不实际删除)
|
|
1573
|
+
dvcode checkpoint clean --dry-run
|
|
1574
|
+
|
|
1575
|
+
# 跳过确认直接删除
|
|
1576
|
+
dvcode checkpoint clean --force
|
|
1577
|
+
```
|
|
1578
|
+
|
|
1579
|
+
**别名:** 可以使用 `dvcode cp clean` 作为简写。
|
|
1580
|
+
|
|
1581
|
+
**输出示例:**
|
|
1582
|
+
```
|
|
1583
|
+
📊 Checkpoint History Summary:
|
|
1584
|
+
Projects: 73
|
|
1585
|
+
Total Size: 4.18 GB
|
|
1586
|
+
Location: C:\Users\username\.deepv\history
|
|
1587
|
+
|
|
1588
|
+
⚠️ This will permanently delete all checkpoint history.
|
|
1589
|
+
Are you sure? (y/N):
|
|
1590
|
+
```
|
|
1591
|
+
|
|
1592
|
+
**注意事项:**
|
|
1593
|
+
- 此操作会永久删除所有项目的 checkpoint 历史记录
|
|
1594
|
+
- 删除后无法恢复,建议先使用 `--dry-run` 预览
|
|
1595
|
+
- 如果磁盘空间紧张,这是释放空间的有效方式
|
|
1596
|
+
|
|
1597
|
+
---
|
|
1598
|
+
|
|
1599
|
+
### Q16: 如何使用 `/skills` 命令管理 AI Skills?
|
|
1600
|
+
**A:** `/skills` 是一套完整的技能管理系统,采用三层架构管理:**Marketplace → Plugin → Skill**。
|
|
1601
|
+
|
|
1602
|
+
**核心概念:**
|
|
1603
|
+
- **Marketplace(市场):** 技能仓库源,可从 Git 仓库或本地路径加载
|
|
1604
|
+
- **Plugin(插件):** 技能集合,一个 Plugin 可包含多个 Skill
|
|
1605
|
+
- **Skill(技能):** 最小单位,包含 SKILL.md、可执行脚本等
|
|
1606
|
+
|
|
1607
|
+
**快速开始:**
|
|
1608
|
+
```
|
|
1609
|
+
# 1. 添加官方 Marketplace
|
|
1610
|
+
/skill marketplace add anthropics/claude-code
|
|
1611
|
+
|
|
1612
|
+
# 成功后会看到类似这样的显示:
|
|
1613
|
+
# ℹ️✅ Successfully added: claude-code-plugins
|
|
1614
|
+
# ID: claude-code
|
|
1615
|
+
# Plugins: 13
|
|
1616
|
+
|
|
1617
|
+
# 2. 安装具体的 Skill(比如 feature-dev)
|
|
1618
|
+
/skill plugin install claude-code:feature-dev
|
|
1619
|
+
|
|
1620
|
+
# 过程中斜杠命令会自动补全
|
|
1621
|
+
|
|
1622
|
+
# 3. 安装后,重启 CLI
|
|
1623
|
+
|
|
1624
|
+
# 4. 查看所有已安装的 Skills
|
|
1625
|
+
/skill list
|
|
1626
|
+
|
|
1627
|
+
# 4. 查看单个 Skill 详情
|
|
1628
|
+
/skill info <skill-id>
|
|
1629
|
+
|
|
1630
|
+
# 5. 卸载 Skill
|
|
1631
|
+
/skill plugin uninstall <marketplace-name> <plugin-name>
|
|
1632
|
+
|
|
1633
|
+
**配置和存储:**
|
|
1634
|
+
|
|
1635
|
+
Skills 系统数据存储在:
|
|
1636
|
+
- **目录:** `~/.deepv/skills/` 和 `~/.deepv/marketplace/`
|
|
1637
|
+
- **配置:** `~/.deepv/skills/settings.json`
|
|
1638
|
+
- **已安装记录:** `~/.deepv/skills/installed_plugins.json`
|
|
1639
|
+
- **备份:** `~/.deepv/skills/backups/`
|
|
1640
|
+
|
|
1641
|
+
**AI 如何使用 Skills:**
|
|
1642
|
+
|
|
1643
|
+
启用的 Plugins 中的 Skills 会在启动时自动注入到 AI 上下文中。AI 可以:
|
|
1644
|
+
1. 查看所有可用 Skills 的元数据和脚本列表
|
|
1645
|
+
2. 通过 `/use_skill` 工具加载完整的 SKILL.md 文档
|
|
1646
|
+
3. 执行 Skill 中的脚本(需要先加载文档)
|
|
1647
|
+
4. 根据 Skills 提供的工具和指引协助用户
|
|
1648
|
+
|
|
1649
|
+
---
|
|
1650
|
+
|
|
1651
|
+
### Q17: 如何使用 Hooks 系统进行安全控制和行为自定义?
|
|
1652
|
+
|
|
1653
|
+
**A:** DeepV Code 提供了强大的 Hooks 系统,允许你用任何脚本语言(Python、Bash、PowerShell、Batch 等)在关键操作点插入自定义脚本来监控、控制和修改系统行为。
|
|
1654
|
+
|
|
1655
|
+
#### 什么是 Hooks?
|
|
1656
|
+
|
|
1657
|
+
Hooks 是在 11 个关键事件触发的自定义脚本:
|
|
1658
|
+
- **工具:** `BeforeTool`(前)、`AfterTool`(后)
|
|
1659
|
+
- **LLM:** `BeforeAgent`、`AfterAgent`、`BeforeModel`、`AfterModel`
|
|
1660
|
+
- **工具选择:** `BeforeToolSelection`(限制可用工具)
|
|
1661
|
+
- **会话:** `SessionStart`、`SessionEnd`
|
|
1662
|
+
- **其他:** `PreCompress`、`Notification`
|
|
1663
|
+
|
|
1664
|
+
#### 快速开始(任选一种语言)
|
|
1665
|
+
|
|
1666
|
+
**第 1 步:创建 hooks 目录**
|
|
1667
|
+
```bash
|
|
1668
|
+
mkdir -p .deepvcode/hooks
|
|
1669
|
+
```
|
|
1670
|
+
|
|
1671
|
+
**第 2 步:选择你的脚本语言编写 Hook**
|
|
1672
|
+
|
|
1673
|
+
**🐧 Linux/macOS(Bash)**
|
|
1674
|
+
```bash
|
|
1675
|
+
#!/bin/bash
|
|
1676
|
+
read INPUT
|
|
1677
|
+
TOOL=$(echo "$INPUT" | jq -r '.tool_name // empty')
|
|
1678
|
+
if [[ "$TOOL" == "delete_file" ]]; then
|
|
1679
|
+
echo '{"decision":"deny","reason":"Forbidden"}'
|
|
1680
|
+
else
|
|
1681
|
+
echo '{"decision":"allow"}'
|
|
1682
|
+
fi
|
|
1683
|
+
```
|
|
1684
|
+
配置:`"command": "bash .deepvcode/hooks/security.sh"`
|
|
1685
|
+
|
|
1686
|
+
**🪟 Windows(Python - 推荐跨平台)**
|
|
1687
|
+
```python
|
|
1688
|
+
#!/usr/bin/env python3
|
|
1689
|
+
import json
|
|
1690
|
+
import sys
|
|
1691
|
+
|
|
1692
|
+
input_data = json.loads(sys.stdin.read())
|
|
1693
|
+
tool_name = input_data.get('tool_name')
|
|
1694
|
+
|
|
1695
|
+
if tool_name == 'delete_file':
|
|
1696
|
+
output = {'decision': 'deny', 'reason': 'Forbidden'}
|
|
1697
|
+
else:
|
|
1698
|
+
output = {'decision': 'allow'}
|
|
1699
|
+
|
|
1700
|
+
print(json.dumps(output))
|
|
1701
|
+
sys.exit(0)
|
|
1702
|
+
```
|
|
1703
|
+
配置:`"command": "python .deepvcode/hooks/security.py"`
|
|
1704
|
+
|
|
1705
|
+
**🪟 Windows(PowerShell)**
|
|
1706
|
+
```powershell
|
|
1707
|
+
$input_text = [Console]::In.ReadToEnd()
|
|
1708
|
+
$input_data = $input_text | ConvertFrom-Json
|
|
1709
|
+
|
|
1710
|
+
if ($input_data.tool_name -eq 'delete_file') {
|
|
1711
|
+
$output = @{'decision' = 'deny'; 'reason' = 'Forbidden'}
|
|
1712
|
+
} else {
|
|
1713
|
+
$output = @{'decision' = 'allow'}
|
|
1714
|
+
}
|
|
1715
|
+
|
|
1716
|
+
$output | ConvertTo-Json | Write-Output
|
|
1717
|
+
```
|
|
1718
|
+
配置:`"command": "powershell -ExecutionPolicy Bypass .deepvcode/hooks/security.ps1"`
|
|
1719
|
+
|
|
1720
|
+
**第 3 步:配置到 `.deepvcode/settings.json`**
|
|
1721
|
+
```json
|
|
1722
|
+
{
|
|
1723
|
+
"hooks": {
|
|
1724
|
+
"BeforeTool": [
|
|
1725
|
+
{
|
|
1726
|
+
"hooks": [
|
|
1727
|
+
{
|
|
1728
|
+
"type": "command",
|
|
1729
|
+
"command": "python .deepvcode/hooks/security.py",
|
|
1730
|
+
"timeout": 5000
|
|
1731
|
+
}
|
|
1732
|
+
]
|
|
1733
|
+
}
|
|
1734
|
+
]
|
|
1735
|
+
}
|
|
1736
|
+
}
|
|
1737
|
+
```
|
|
1738
|
+
|
|
1739
|
+
**第 4 步:测试**
|
|
1740
|
+
```bash
|
|
1741
|
+
echo '{"tool_name":"delete_file"}' | python .deepvcode/hooks/security.py
|
|
1742
|
+
# 输出:{"decision":"deny","reason":"Forbidden"}
|
|
1743
|
+
```
|
|
1744
|
+
|
|
1745
|
+
#### 常见实用场景
|
|
1746
|
+
|
|
1747
|
+
**场景 1:权限控制(基于角色)**
|
|
1748
|
+
|
|
1749
|
+
Python 版本:
|
|
1750
|
+
```python
|
|
1751
|
+
import json, sys, os
|
|
1752
|
+
input_data = json.loads(sys.stdin.read())
|
|
1753
|
+
user_role = os.environ.get('USER_ROLE', 'viewer')
|
|
1754
|
+
|
|
1755
|
+
if user_role == 'admin':
|
|
1756
|
+
print(json.dumps({'decision': 'allow'}))
|
|
1757
|
+
else:
|
|
1758
|
+
# 限制工具
|
|
1759
|
+
print(json.dumps({
|
|
1760
|
+
'hookSpecificOutput': {
|
|
1761
|
+
'toolConfig': {
|
|
1762
|
+
'allowedFunctionNames': ['read_file', 'list_directory']
|
|
1763
|
+
}
|
|
1764
|
+
}
|
|
1765
|
+
}))
|
|
1766
|
+
```
|
|
1767
|
+
使用:`USER_ROLE=viewer deepv-cli`
|
|
1768
|
+
|
|
1769
|
+
**场景 2:审计日志(记录所有操作)**
|
|
1770
|
+
|
|
1771
|
+
Python 版本:
|
|
1772
|
+
```python
|
|
1773
|
+
import json, sys
|
|
1774
|
+
from datetime import datetime
|
|
1775
|
+
|
|
1776
|
+
input_data = json.loads(sys.stdin.read())
|
|
1777
|
+
tool = input_data.get('tool_name')
|
|
1778
|
+
timestamp = input_data.get('timestamp')
|
|
1779
|
+
|
|
1780
|
+
# 记录日志
|
|
1781
|
+
with open('logs/audit.log', 'a') as f:
|
|
1782
|
+
f.write(f"[{timestamp}] Tool: {tool}\n")
|
|
1783
|
+
|
|
1784
|
+
print(json.dumps({'decision': 'allow'}))
|
|
1785
|
+
```
|
|
1786
|
+
|
|
1787
|
+
**场景 3:提示安全加固**
|
|
1788
|
+
|
|
1789
|
+
Python 版本:
|
|
1790
|
+
```python
|
|
1791
|
+
import json, sys
|
|
1792
|
+
|
|
1793
|
+
input_data = json.loads(sys.stdin.read())
|
|
1794
|
+
safety_instruction = """[SECURITY]
|
|
1795
|
+
- Verify before destructive operations
|
|
1796
|
+
- Never modify system-critical files
|
|
1797
|
+
[/SECURITY]"""
|
|
1798
|
+
|
|
1799
|
+
print(json.dumps({
|
|
1800
|
+
'decision': 'allow',
|
|
1801
|
+
'hookSpecificOutput': {
|
|
1802
|
+
'additionalContext': safety_instruction
|
|
1803
|
+
}
|
|
1804
|
+
}))
|
|
1805
|
+
```
|
|
1806
|
+
|
|
1807
|
+
**场景 4:LLM 参数优化**
|
|
1808
|
+
|
|
1809
|
+
Python 版本:
|
|
1810
|
+
```python
|
|
1811
|
+
import json, sys
|
|
1812
|
+
|
|
1813
|
+
input_data = json.loads(sys.stdin.read())
|
|
1814
|
+
prompt = input_data.get('llm_request', {}).get('messages', [{}])[0].get('content', '')
|
|
1815
|
+
|
|
1816
|
+
# 根据长度调整参数
|
|
1817
|
+
temperature = 0.8 if len(prompt) > 2000 else 0.3
|
|
1818
|
+
max_tokens = 4096 if 'code' in prompt.lower() else 2048
|
|
1819
|
+
|
|
1820
|
+
print(json.dumps({
|
|
1821
|
+
'hookSpecificOutput': {
|
|
1822
|
+
'llm_request': {
|
|
1823
|
+
'config': {
|
|
1824
|
+
'temperature': temperature,
|
|
1825
|
+
'maxOutputTokens': max_tokens
|
|
1826
|
+
}
|
|
1827
|
+
}
|
|
1828
|
+
}
|
|
1829
|
+
}))
|
|
1830
|
+
```
|
|
1831
|
+
|
|
1832
|
+
#### Hook 数据格式
|
|
1833
|
+
|
|
1834
|
+
**输入格式(via stdin)**
|
|
1835
|
+
```json
|
|
1836
|
+
{
|
|
1837
|
+
"session_id": "abc123",
|
|
1838
|
+
"cwd": "/current/dir",
|
|
1839
|
+
"hook_event_name": "BeforeTool",
|
|
1840
|
+
"timestamp": "2025-01-15T10:00:00Z",
|
|
1841
|
+
"tool_name": "write_file",
|
|
1842
|
+
"tool_input": {"path": "/tmp/file.txt"}
|
|
1843
|
+
}
|
|
1844
|
+
```
|
|
1845
|
+
|
|
1846
|
+
**输出格式(via stdout,必须是 JSON)**
|
|
1847
|
+
```json
|
|
1848
|
+
{
|
|
1849
|
+
"decision": "allow",
|
|
1850
|
+
"reason": "optional",
|
|
1851
|
+
"hookSpecificOutput": {}
|
|
1852
|
+
}
|
|
1853
|
+
```
|
|
1854
|
+
|
|
1855
|
+
**Exit codes:** `0` (成功) | `1` (警告) | `2` (阻止)
|
|
1856
|
+
|
|
1857
|
+
#### 配置参考
|
|
1858
|
+
|
|
1859
|
+
```json
|
|
1860
|
+
{
|
|
1861
|
+
"hooks": {
|
|
1862
|
+
"BeforeTool": [{
|
|
1863
|
+
"matcher": "delete_file|remove_directory", // 可选:工具名正则
|
|
1864
|
+
"sequential": false, // 可选:顺序/并行
|
|
1865
|
+
"hooks": [{
|
|
1866
|
+
"type": "command",
|
|
1867
|
+
"command": "python .deepvcode/hooks/hook.py",
|
|
1868
|
+
"timeout": 5000 // 可选:超时毫秒数
|
|
1869
|
+
}]
|
|
1870
|
+
}]
|
|
1871
|
+
}
|
|
1872
|
+
}
|
|
1873
|
+
```
|
|
1874
|
+
|
|
1875
|
+
#### 最佳实践
|
|
1876
|
+
|
|
1877
|
+
1. ✅ 使用 Python 编写(跨平台最简单)
|
|
1878
|
+
2. ✅ 验证 JSON 输入有效性
|
|
1879
|
+
3. ✅ 输出必须是有效的 JSON
|
|
1880
|
+
4. ✅ 设置合理的超时防止卡顿
|
|
1881
|
+
5. ✅ Hook 失败不会阻止系统运行
|
|
1882
|
+
6. ✅ 用版本控制管理 Hooks 脚本
|
|
1883
|
+
7. ✅ 轻量级脚本,复杂逻辑调用外部 API
|
|
1884
|
+
|
|
1885
|
+
#### 支持的脚本语言
|
|
1886
|
+
|
|
1887
|
+
| 语言 | 平台 | 推荐度 | 示例命令 |
|
|
1888
|
+
|-----|------|--------|--------|
|
|
1889
|
+
| **Python** | Windows/Mac/Linux | ⭐⭐⭐ | `python ./hook.py` |
|
|
1890
|
+
| **Bash** | Mac/Linux | ⭐⭐⭐ | `bash ./hook.sh` |
|
|
1891
|
+
| **PowerShell** | Windows | ⭐⭐ | `powershell -ExecutionPolicy Bypass ./hook.ps1` |
|
|
1892
|
+
| Batch | Windows | ⭐ | `cmd /c hook.bat` |
|
|
1893
|
+
| Node.js | 全平台 | ⭐⭐ | `node ./hook.js` |
|
|
1894
|
+
|
|
1895
|
+
**提示:** Python 最推荐,因为一份代码在所有平台都能运行,且有内置的 JSON 模块。
|
|
1896
|
+
|
|
1897
|
+
#### 常见问题
|
|
1898
|
+
|
|
1899
|
+
**Q:Hook 脚本可以用其他语言吗?**
|
|
1900
|
+
A:可以!任何能读 stdin、写 stdout 的脚本都支持。Python、Bash、PowerShell、Node.js、Ruby、Go 等都可以。
|
|
1901
|
+
|
|
1902
|
+
**Q:Windows 上不能用 Bash 吗?**
|
|
1903
|
+
A:可以用。安装 WSL(Windows Subsystem for Linux)或 Git Bash 后支持。但推荐用 Python 更方便。
|
|
1904
|
+
|
|
1905
|
+
**Q:Hook 失败会导致系统停止吗?**
|
|
1906
|
+
A:不会。Hook 失败只会记录警告,系统继续运行。除非你的 Hook 返回 exit code 2 并设置了 `decision: deny`。
|
|
1907
|
+
|
|
1908
|
+
**Q:多个 Hook 怎样按顺序执行?**
|
|
1909
|
+
A:在配置中设置 `"sequential": true`,后一个 Hook 可以看到前一个的修改。
|
|
1910
|
+
|
|
1911
|
+
#### 更多帮助
|
|
1912
|
+
|
|
1913
|
+
- 完整文档:`docs/hooks-user-guide.md`
|
|
1914
|
+
- 代码示例:`docs/hooks-examples.md`
|
|
1915
|
+
- 架构说明:`HOOKS_ARCHITECTURE.md`
|
|
1916
|
+
- **详细用法和配置:** 使用 `/hooks` 命令打开官方文档,或访问 https://dvcode.deepvlab.ai/hooks-help
|
|
1917
|
+
|
|
1918
|
+
---
|
|
1919
|
+
|
|
1920
|
+
## 🚀 LSP (语言服务协议) 支持
|
|
1921
|
+
|
|
1922
|
+
DeepV Code 现在集成了强大的 **LSP (Language Server Protocol)** 能力。这意味着 AI 不再仅仅是通过“搜索字符串”来猜你的代码,而是像真正的 IDE 一样,能够完全“读懂”代码的语义。
|
|
1923
|
+
|
|
1924
|
+
### 什么是 LSP?
|
|
1925
|
+
**LSP** 是由微软、Google 和 RedHat 共同推出的行业标准。它将代码分析逻辑与编辑器分离。通过 LSP,DeepV Code 可以调用各语言官方最专业的分析引擎(如 `typescript-language-server`, `pyright`, `rust-analyzer` 等),为 AI 提供极致的代码感知力。
|
|
1926
|
+
|
|
1927
|
+
### 为什么 LSP 比传统搜索更强?
|
|
1928
|
+
- **语义感知**:理解变量、函数、类和作用域,而不仅仅是匹配文本。
|
|
1929
|
+
- **准确度高**:只返回真实的定义和类型,不会被同名注释或字符串干扰。
|
|
1930
|
+
- **跨文件追踪**:准确追踪 `import` 和依赖链,支持跨文件跳转定义。
|
|
1931
|
+
- **深度信息**:提供详细的类型推导和文档注释。
|
|
1932
|
+
|
|
1933
|
+
### 核心特性:小白式“零配置”体验
|
|
1934
|
+
- **按需触发**:当你第一次询问某种语言的问题时,系统才会启动。
|
|
1935
|
+
- **自动安装**:如果你的电脑没装对应的 LSP 服务端,DeepV Code 会**自动在后台下载并安装**到隔离目录。
|
|
1936
|
+
- **无感运行**:用户无需配置环境变量,真正做到“开箱即用”。
|
|
1937
|
+
|
|
1938
|
+
### 已支持的语言矩阵
|
|
1939
|
+
- **通用编程**:TypeScript, JavaScript, Python, Rust, Go
|
|
1940
|
+
- **底层开发**:C, C++ (`clangd`)
|
|
1941
|
+
- **Web 前端**:HTML, CSS
|
|
1942
|
+
- **配置与数据**:JSON, YAML, SQL, Dockerfile
|
|
1943
|
+
|
|
1944
|
+
### 核心功能与工具集
|
|
1945
|
+
DeepV Code 提供了一套完整的语义化工具,帮助 AI 实现“手术刀”级的代码操作:
|
|
1946
|
+
|
|
1947
|
+
1. **`lsp_hover` (悬停详情)**:获取变量、函数或类的类型定义、文档注释和函数签名。
|
|
1948
|
+
2. **`lsp_goto_definition` (跳转定义)**:精准定位符号的声明位置,支持跨文件追踪。
|
|
1949
|
+
3. **`lsp_find_references` (查找引用)**:分析符号在整个项目中的所有使用位置,是代码重构的必备利器。
|
|
1950
|
+
4. **`lsp_document_symbols` (文件大纲)**:一键列出文件内的所有函数、类、变量及其层级结构,快速掌握大文件逻辑。
|
|
1951
|
+
5. **`lsp_workspace_symbols` (全局搜索)**:在整个项目中按名称搜索符号,无需打开文件即可精确定位。
|
|
1952
|
+
6. **`lsp_implementation` (查找实现)**:查找接口(Interface)或抽象方法的具体实现类。
|
|
1953
|
+
|
|
1954
|
+
### 极致的智能体验
|
|
1955
|
+
- **1-based 坐标系**:所有工具使用的行号/列号与编辑器(如 VS Code)完全一致,AI 感知不再有偏差。
|
|
1956
|
+
- **自动激活与索引**:当 AI 需要分析代码时,会自动探测项目语言并启动 LSP Server。
|
|
1957
|
+
- **智能暖机与重试**:针对大型项目索引慢的问题,系统内置了“自动暖机”和“空结果自动重试”机制,确保在服务器扫描项目期间依然能获得稳健的响应。
|
|
1958
|
+
|
|
1959
|
+
### 如何测试与体验?
|
|
1960
|
+
1. **类型查询**:“`packages/core/src/lsp/index.ts` 中的 `syncDocument` 方法的返回值类型是什么?”
|
|
1961
|
+
2. **查找引用**:“项目中哪些地方调用了 `LSPManager` 类?”
|
|
1962
|
+
3. **结构分析**:“给我一份 `packages/core/src/config/config.ts` 的结构大纲。”
|
|
1963
|
+
4. **全局定位**:“在整个项目中搜索名为 `performAutoLintCheck` 的符号。”
|
|
1964
|
+
|
|
1965
|
+
---
|
|
1966
|
+
|
|
1967
|
+
**DeepV Code 出品方信息:**
|
|
1968
|
+
- 官网:https://dvcode.deepvlab.ai/
|
|
1969
|
+
- 出品公司:Deep X Corporation Limited
|
|
1970
|
+
|
|
1971
|
+
**退出智能帮助系统:** 按下ESC键
|