deepminer-cli 0.1.26 → 0.1.28
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 +43 -100
- package/bin/dm-cli-darwin-amd64 +0 -0
- package/bin/dm-cli-darwin-arm64 +0 -0
- package/bin/dm-cli-linux-amd64 +0 -0
- package/bin/dm-cli-windows-amd64.exe +0 -0
- package/package.json +1 -1
- package/scripts/_dm-cli +11 -53
package/README.md
CHANGED
|
@@ -5,13 +5,9 @@ DeepMiner 系统的命令行工具,用于管理认证、配置和 AI 会话。
|
|
|
5
5
|
## 功能特性
|
|
6
6
|
|
|
7
7
|
- **跨平台支持**: macOS、Linux、Windows
|
|
8
|
-
-
|
|
9
|
-
-
|
|
10
|
-
-
|
|
11
|
-
- **配置管理**: API 端点配置
|
|
12
|
-
- **安全存储**: Token 以受限权限存储在本地
|
|
13
|
-
- **文件上传**: 上传文件到 OSS,带文件大小验证
|
|
14
|
-
- **AI 会话**: 启动/继续/停止 AI 助手会话,支持自定义消息、会话追问和 claw_param 参数
|
|
8
|
+
- **AccessKey 鉴权**: 通过 AccessKey 进行 API 认证
|
|
9
|
+
- **配置管理**: API 端点和 AccessKey 配置
|
|
10
|
+
- **AI 会话**: 启动/继续/停止 AI 助手会话,支持自定义消息、文件附件、会话追问和 claw_param 参数
|
|
15
11
|
- **JSON 输出**: 所有命令支持 `--json` 结构化输出,适合 AI agent 和脚本调用
|
|
16
12
|
- **错误提示**: 错误响应包含 `hint` 字段,提供可操作的修复建议
|
|
17
13
|
- **Dry Run**: `--dry-run` 预览 HTTP 请求而不实际执行
|
|
@@ -39,31 +35,22 @@ go build -o dm-cli .
|
|
|
39
35
|
|
|
40
36
|
```bash
|
|
41
37
|
# 1. 初始化配置
|
|
42
|
-
dm-cli config init --endpoint https://dm-dev.xmingai.com
|
|
38
|
+
dm-cli config init --endpoint https://dm-dev.xmingai.com --accesskey <your_access_key>
|
|
43
39
|
|
|
44
|
-
# 2.
|
|
45
|
-
dm-cli auth login --username user@example.com --password xxx
|
|
46
|
-
|
|
47
|
-
# 3. 选择空间
|
|
48
|
-
dm-cli auth switch <space_id>
|
|
49
|
-
|
|
50
|
-
# 4. 查看状态
|
|
51
|
-
dm-cli auth status
|
|
52
|
-
|
|
53
|
-
# 5. 启动 AI 会话(返回 agent_run_id、thread_id)
|
|
40
|
+
# 2. 启动 AI 会话(返回 agent_run_id、thread_id)
|
|
54
41
|
dm-cli agent start-thread --message "你好"
|
|
55
42
|
|
|
56
|
-
#
|
|
43
|
+
# 3. 带文件附件发送
|
|
44
|
+
dm-cli agent start-thread --message "请分析这个报告" --file ./report.ppt
|
|
45
|
+
|
|
46
|
+
# 4. 在已有会话中继续追问
|
|
57
47
|
dm-cli agent start-thread --message "继续聊" --thread-id <thread_id>
|
|
58
48
|
|
|
59
|
-
#
|
|
49
|
+
# 5. 停止正在运行的 Agent
|
|
60
50
|
dm-cli agent stop --agent-run-id <agent_run_id>
|
|
61
51
|
|
|
62
|
-
# 6.
|
|
63
|
-
dm-cli
|
|
64
|
-
|
|
65
|
-
# 7. 登出
|
|
66
|
-
dm-cli auth logout
|
|
52
|
+
# 6. 查看用户打开的 agent
|
|
53
|
+
dm-cli agent user-open
|
|
67
54
|
```
|
|
68
55
|
|
|
69
56
|
### JSON 模式(适合 AI agent / 脚本)
|
|
@@ -72,10 +59,10 @@ dm-cli auth logout
|
|
|
72
59
|
|
|
73
60
|
```bash
|
|
74
61
|
dm-cli auth status --json
|
|
75
|
-
# {"ok": true, "data": {"
|
|
62
|
+
# {"ok": true, "data": {"auth_mode": "accesskey", "access_key": "..."}}
|
|
76
63
|
|
|
77
|
-
dm-cli
|
|
78
|
-
# {"ok": true, "data": {"
|
|
64
|
+
dm-cli agent start-thread --message "分析" --file ./data.xlsx --json
|
|
65
|
+
# {"ok": true, "data": {"agent_run_id": "...", "thread_id": "...", ...}}
|
|
79
66
|
```
|
|
80
67
|
|
|
81
68
|
## 命令列表
|
|
@@ -83,29 +70,35 @@ dm-cli file upload --file data.xlsx --json
|
|
|
83
70
|
### 配置
|
|
84
71
|
|
|
85
72
|
```bash
|
|
86
|
-
dm-cli config init --endpoint <url>
|
|
87
|
-
dm-cli config
|
|
73
|
+
dm-cli config init --endpoint <url> # 初始化配置(设置 API 端点)
|
|
74
|
+
dm-cli config init --endpoint <url> --accesskey <key> # 初始化配置并设置 AccessKey
|
|
75
|
+
dm-cli config show # 显示当前配置
|
|
88
76
|
```
|
|
89
77
|
|
|
90
78
|
### 认证
|
|
91
79
|
|
|
92
80
|
```bash
|
|
93
|
-
dm-cli auth
|
|
94
|
-
dm-cli auth switch <space_id> # 切换工作空间
|
|
95
|
-
dm-cli auth status # 显示登录状态
|
|
96
|
-
dm-cli auth logout # 退出登录
|
|
81
|
+
dm-cli auth status # 显示鉴权状态
|
|
97
82
|
```
|
|
98
83
|
|
|
99
|
-
###
|
|
84
|
+
### AI 会话
|
|
100
85
|
|
|
101
86
|
```bash
|
|
102
|
-
dm-cli
|
|
103
|
-
dm-cli
|
|
104
|
-
dm-cli
|
|
105
|
-
dm-cli
|
|
87
|
+
dm-cli agent start-thread --message <消息> # 发送文本消息
|
|
88
|
+
dm-cli agent start-thread --message <消息> --file <路径> # 附带文件
|
|
89
|
+
dm-cli agent start-thread --message <消息> --file <路径1> --file <路径2> # 附带多个文件
|
|
90
|
+
dm-cli agent start-thread --message <消息> --thread-id <会话ID> # 在已有会话中继续追问
|
|
91
|
+
dm-cli agent start-thread --message <消息> --claw-param <JSON> # 附带渠道参数
|
|
92
|
+
dm-cli agent start-thread --message <消息> --agent-mode <模式> # 指定 agent_mode(默认 auto)
|
|
93
|
+
dm-cli agent stop --agent-run-id <运行ID> # 停止正在运行的 Agent
|
|
94
|
+
dm-cli agent user-open # 列出用户打开的 agent
|
|
106
95
|
```
|
|
107
96
|
|
|
108
|
-
####
|
|
97
|
+
#### 文件附件说明
|
|
98
|
+
|
|
99
|
+
使用 `--file` 参数附带本地文件,CLI 会自动上传并拼接到消息中。可多次指定以附带多个文件。
|
|
100
|
+
|
|
101
|
+
**文件大小限制**:
|
|
109
102
|
|
|
110
103
|
| 类型 | 扩展名 | 最大大小 |
|
|
111
104
|
|------|--------|----------|
|
|
@@ -113,16 +106,6 @@ dm-cli file upload --file <路径> --id <ID> # 上传文件(指
|
|
|
113
106
|
| 音频 | mp3/wav/aac | 100 MB |
|
|
114
107
|
| 其他 | * | 300 MB |
|
|
115
108
|
|
|
116
|
-
### AI 会话
|
|
117
|
-
|
|
118
|
-
```bash
|
|
119
|
-
dm-cli agent start-thread # 使用默认消息 "你好"
|
|
120
|
-
dm-cli agent start-thread --message <消息> # 自定义消息
|
|
121
|
-
dm-cli agent start-thread --message <消息> --thread-id <会话ID> # 在已有会话中继续追问
|
|
122
|
-
dm-cli agent start-thread --message <消息> --claw-param <JSON> # 附带渠道参数
|
|
123
|
-
dm-cli agent stop --agent-run-id <运行ID> # 停止正在运行的 Agent
|
|
124
|
-
```
|
|
125
|
-
|
|
126
109
|
#### claw_param 参数说明
|
|
127
110
|
|
|
128
111
|
可选的 `--claw-param` 用于指定 DM 系统的渠道和发送者信息:
|
|
@@ -176,7 +159,7 @@ dm-cli --help # 显示帮助信息
|
|
|
176
159
|
|
|
177
160
|
错误(含修复建议):
|
|
178
161
|
```json
|
|
179
|
-
{"ok": false, "error": {"type": "auth", "message": "
|
|
162
|
+
{"ok": false, "error": {"type": "auth", "message": "未配置 AccessKey", "hint": "运行 'dm-cli config init --endpoint <url> --accesskey <key>' 配置"}}
|
|
180
163
|
```
|
|
181
164
|
|
|
182
165
|
`hint` 字段提供可操作的修复建议,AI agent 可直接据此自动恢复。
|
|
@@ -185,16 +168,6 @@ dm-cli --help # 显示帮助信息
|
|
|
185
168
|
|
|
186
169
|
使用 `--dry-run` 预览请求而不实际执行,适合调试和 AI agent 安全验证:
|
|
187
170
|
|
|
188
|
-
```bash
|
|
189
|
-
dm-cli --dry-run auth login --username user --password pass
|
|
190
|
-
# [DRY RUN] POST https://api.example.com/api/auth/authentication/login
|
|
191
|
-
# Headers:
|
|
192
|
-
# Content-Type: application/json
|
|
193
|
-
# Body:
|
|
194
|
-
# {"username": "user", "password": "pass"}
|
|
195
|
-
```
|
|
196
|
-
|
|
197
|
-
JSON 模式:
|
|
198
171
|
```bash
|
|
199
172
|
dm-cli --dry-run --json agent start-thread --message "你好"
|
|
200
173
|
```
|
|
@@ -202,7 +175,7 @@ dm-cli --dry-run --json agent start-thread --message "你好"
|
|
|
202
175
|
{"ok": true, "dry_run": true, "data": {"method": "POST", "url": "...", "headers": {...}, "body": {...}}}
|
|
203
176
|
```
|
|
204
177
|
|
|
205
|
-
只读命令(`config show`、`auth status`、`version`、`schema`)和纯本地操作(`config init
|
|
178
|
+
只读命令(`config show`、`auth status`、`version`、`schema`)和纯本地操作(`config init`)不受 `--dry-run` 影响,正常执行。
|
|
206
179
|
|
|
207
180
|
## 文件说明
|
|
208
181
|
|
|
@@ -210,47 +183,26 @@ dm-cli --dry-run --json agent start-thread --message "你好"
|
|
|
210
183
|
|
|
211
184
|
```json
|
|
212
185
|
{
|
|
213
|
-
"api_endpoint": "https://dm-dev.xmingai.com/api"
|
|
186
|
+
"api_endpoint": "https://dm-dev.xmingai.com/api",
|
|
187
|
+
"access_key": "your_access_key"
|
|
214
188
|
}
|
|
215
189
|
```
|
|
216
190
|
|
|
217
|
-
### Token 文件:`~/.dm-cli/token.json` (权限 0600)
|
|
218
|
-
|
|
219
|
-
```json
|
|
220
|
-
{
|
|
221
|
-
"access_token": "eyJ...",
|
|
222
|
-
"refresh_token": "ey...",
|
|
223
|
-
"expires_at": 1716239022,
|
|
224
|
-
"user_id": "user_123",
|
|
225
|
-
"email": "user@example.com",
|
|
226
|
-
"current_space": "space_id"
|
|
227
|
-
}
|
|
228
|
-
```
|
|
229
|
-
|
|
230
|
-
## Token 管理工作原理
|
|
231
|
-
|
|
232
|
-
1. **认证**: 使用 `--username`/`--password` 凭证获得 `access_token` (JWT) 和 `refresh_token`
|
|
233
|
-
2. **空间选择**: 登录返回可用空间列表,使用 `auth switch` 选择
|
|
234
|
-
3. **存储**: Token 和元数据保存在 `~/.dm-cli/token.json`
|
|
235
|
-
4. **自动刷新**: API 调用前自动检查 Token 是否过期,过期则刷新
|
|
236
|
-
5. **401 处理**: 服务器拒绝 Token 时自动尝试刷新并重试
|
|
237
|
-
|
|
238
191
|
## 项目结构
|
|
239
192
|
|
|
240
193
|
```
|
|
241
194
|
dm-cli/
|
|
242
195
|
├── cmd/ # 命令定义
|
|
243
196
|
│ ├── root.go # 根命令
|
|
244
|
-
│ ├── auth/ #
|
|
197
|
+
│ ├── auth/ # 鉴权状态命令
|
|
245
198
|
│ ├── config/ # 配置命令
|
|
246
199
|
│ ├── agent/ # AI 命令
|
|
247
|
-
│ ├── file/ # 文件管理命令
|
|
248
200
|
│ └── schema/ # Schema 输出命令
|
|
249
201
|
├── internal/
|
|
250
|
-
│ ├── auth/ # 认证模块
|
|
251
202
|
│ ├── client/ # HTTP 客户端
|
|
252
203
|
│ ├── config/ # 配置管理
|
|
253
204
|
│ ├── cmdutil/ # 命令工具
|
|
205
|
+
│ ├── fileutil/ # 文件上传共享逻辑
|
|
254
206
|
│ ├── output/ # 输出处理
|
|
255
207
|
│ └── validate/ # 输入验证
|
|
256
208
|
├── schema/ # CLI Schema 定义(嵌入)
|
|
@@ -269,15 +221,9 @@ dm-cli/
|
|
|
269
221
|
go build -o dm-cli .
|
|
270
222
|
|
|
271
223
|
# 初始化配置
|
|
272
|
-
./dm-cli config init --endpoint https://dm-dev.xmingai.com
|
|
273
|
-
|
|
274
|
-
# 登录
|
|
275
|
-
./dm-cli auth login --username user@example.com --password xxx
|
|
276
|
-
|
|
277
|
-
# 选择空间
|
|
278
|
-
./dm-cli auth switch <space_id>
|
|
224
|
+
./dm-cli config init --endpoint https://dm-dev.xmingai.com --accesskey <your_access_key>
|
|
279
225
|
|
|
280
|
-
#
|
|
226
|
+
# 查看鉴权状态
|
|
281
227
|
./dm-cli auth status
|
|
282
228
|
```
|
|
283
229
|
|
|
@@ -296,10 +242,8 @@ make build-all
|
|
|
296
242
|
|
|
297
243
|
## 安全考虑
|
|
298
244
|
|
|
299
|
-
-
|
|
300
|
-
-
|
|
301
|
-
- Token 过期时自动刷新
|
|
302
|
-
- Refresh Token 过期后需要重新登录
|
|
245
|
+
- 配置文件存储在 `~/.dm-cli/` 目录,权限为 0600
|
|
246
|
+
- AccessKey 以明文存储在配置文件中,请确保文件权限安全
|
|
303
247
|
|
|
304
248
|
## zsh 补全
|
|
305
249
|
|
|
@@ -310,7 +254,6 @@ dm-cli <TAB> # 显示所有命令
|
|
|
310
254
|
dm-cli auth <TAB> # 显示 auth 子命令
|
|
311
255
|
dm-cli config <TAB> # 显示 config 子命令
|
|
312
256
|
dm-cli agent <TAB> # 显示 agent 子命令
|
|
313
|
-
dm-cli file <TAB> # 显示 file 子命令
|
|
314
257
|
```
|
|
315
258
|
|
|
316
259
|
## 许可证
|
package/bin/dm-cli-darwin-amd64
CHANGED
|
Binary file
|
package/bin/dm-cli-darwin-arm64
CHANGED
|
Binary file
|
package/bin/dm-cli-linux-amd64
CHANGED
|
Binary file
|
|
Binary file
|
package/package.json
CHANGED
package/scripts/_dm-cli
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#compdef dm-cli
|
|
2
2
|
|
|
3
3
|
_dm_cli() {
|
|
4
|
-
local
|
|
4
|
+
local curcontext="$curcontext" state state_descr line
|
|
5
5
|
typeset -A opt_args
|
|
6
6
|
|
|
7
7
|
_arguments -C \
|
|
@@ -17,7 +17,6 @@ _dm_cli() {
|
|
|
17
17
|
'config:管理配置'
|
|
18
18
|
'auth:用户认证'
|
|
19
19
|
'agent:AI 助手相关命令'
|
|
20
|
-
'file:文件管理'
|
|
21
20
|
'schema:输出 CLI Schema 定义'
|
|
22
21
|
'version:显示版本号'
|
|
23
22
|
)
|
|
@@ -28,7 +27,6 @@ _dm_cli() {
|
|
|
28
27
|
config) _dm_cli_config ;;
|
|
29
28
|
auth) _dm_cli_auth ;;
|
|
30
29
|
agent) _dm_cli_agent ;;
|
|
31
|
-
file) _dm_cli_file ;;
|
|
32
30
|
schema) _dm_cli_schema ;;
|
|
33
31
|
esac
|
|
34
32
|
;;
|
|
@@ -36,7 +34,7 @@ _dm_cli() {
|
|
|
36
34
|
}
|
|
37
35
|
|
|
38
36
|
_dm_cli_config() {
|
|
39
|
-
local
|
|
37
|
+
local curcontext="$curcontext" state state_descr line
|
|
40
38
|
typeset -A opt_args
|
|
41
39
|
|
|
42
40
|
_arguments -C \
|
|
@@ -56,6 +54,7 @@ _dm_cli_config() {
|
|
|
56
54
|
init)
|
|
57
55
|
_arguments \
|
|
58
56
|
'--endpoint=[API 端点 URL]:url' \
|
|
57
|
+
'--accesskey=[Access Key]:key' \
|
|
59
58
|
'--json[以 JSON 格式输出]' \
|
|
60
59
|
'--dry-run[预览请求]' \
|
|
61
60
|
'--help[显示帮助]'
|
|
@@ -72,7 +71,7 @@ _dm_cli_config() {
|
|
|
72
71
|
}
|
|
73
72
|
|
|
74
73
|
_dm_cli_auth() {
|
|
75
|
-
local
|
|
74
|
+
local curcontext="$curcontext" state state_descr line
|
|
76
75
|
typeset -A opt_args
|
|
77
76
|
|
|
78
77
|
_arguments -C \
|
|
@@ -82,32 +81,14 @@ _dm_cli_auth() {
|
|
|
82
81
|
case "$state" in
|
|
83
82
|
subcommand)
|
|
84
83
|
local -a subcommands=(
|
|
85
|
-
'
|
|
86
|
-
'logout:退出登录'
|
|
87
|
-
'status:显示登录状态'
|
|
88
|
-
'switch:切换空间'
|
|
84
|
+
'status:显示鉴权状态'
|
|
89
85
|
)
|
|
90
86
|
_describe -t subcommands 'subcommand' subcommands
|
|
91
87
|
;;
|
|
92
88
|
args)
|
|
93
89
|
case "${line[1]}" in
|
|
94
|
-
|
|
90
|
+
status)
|
|
95
91
|
_arguments \
|
|
96
|
-
'--username=[用户名]:username' \
|
|
97
|
-
'--password=[密码]:password' \
|
|
98
|
-
'--json[以 JSON 格式输出]' \
|
|
99
|
-
'--dry-run[预览请求]' \
|
|
100
|
-
'--help[显示帮助]'
|
|
101
|
-
;;
|
|
102
|
-
logout|status)
|
|
103
|
-
_arguments \
|
|
104
|
-
'--json[以 JSON 格式输出]' \
|
|
105
|
-
'--dry-run[预览请求]' \
|
|
106
|
-
'--help[显示帮助]'
|
|
107
|
-
;;
|
|
108
|
-
switch)
|
|
109
|
-
_arguments \
|
|
110
|
-
'1:space_id' \
|
|
111
92
|
'--json[以 JSON 格式输出]' \
|
|
112
93
|
'--dry-run[预览请求]' \
|
|
113
94
|
'--help[显示帮助]'
|
|
@@ -118,7 +99,7 @@ _dm_cli_auth() {
|
|
|
118
99
|
}
|
|
119
100
|
|
|
120
101
|
_dm_cli_agent() {
|
|
121
|
-
local
|
|
102
|
+
local curcontext="$curcontext" state state_descr line
|
|
122
103
|
typeset -A opt_args
|
|
123
104
|
|
|
124
105
|
_arguments -C \
|
|
@@ -130,6 +111,7 @@ _dm_cli_agent() {
|
|
|
130
111
|
local -a subcommands=(
|
|
131
112
|
'start-thread:发起 AI 会话'
|
|
132
113
|
'stop:停止 Agent 运行'
|
|
114
|
+
'user-open:列出用户打开的 agent'
|
|
133
115
|
)
|
|
134
116
|
_describe -t subcommands 'subcommand' subcommands
|
|
135
117
|
;;
|
|
@@ -138,6 +120,8 @@ _dm_cli_agent() {
|
|
|
138
120
|
start-thread)
|
|
139
121
|
_arguments \
|
|
140
122
|
'--message=[消息内容]:message' \
|
|
123
|
+
'*--file=[本地文件路径]:file:_files' \
|
|
124
|
+
'--agent-mode=[Agent 模式]:mode:(auto cooperation)' \
|
|
141
125
|
'--thread-id=[会话 ID]:thread_id' \
|
|
142
126
|
'--claw-param=[JSON 参数]:json' \
|
|
143
127
|
'--json[以 JSON 格式输出]' \
|
|
@@ -151,34 +135,8 @@ _dm_cli_agent() {
|
|
|
151
135
|
'--dry-run[预览请求]' \
|
|
152
136
|
'--help[显示帮助]'
|
|
153
137
|
;;
|
|
154
|
-
|
|
155
|
-
;;
|
|
156
|
-
esac
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
_dm_cli_file() {
|
|
160
|
-
local context state state_descr line
|
|
161
|
-
typeset -A opt_args
|
|
162
|
-
|
|
163
|
-
_arguments -C \
|
|
164
|
-
'(-): :->subcommand' \
|
|
165
|
-
'(-)*:: :->args'
|
|
166
|
-
|
|
167
|
-
case "$state" in
|
|
168
|
-
subcommand)
|
|
169
|
-
local -a subcommands=(
|
|
170
|
-
'upload:上传文件'
|
|
171
|
-
)
|
|
172
|
-
_describe -t subcommands 'subcommand' subcommands
|
|
173
|
-
;;
|
|
174
|
-
args)
|
|
175
|
-
case "${line[1]}" in
|
|
176
|
-
upload)
|
|
138
|
+
user-open)
|
|
177
139
|
_arguments \
|
|
178
|
-
'--file=[文件路径]:file:_files' \
|
|
179
|
-
'--name=[远程文件名]:name' \
|
|
180
|
-
'--feature=[功能类型]:feature' \
|
|
181
|
-
'--id=[文件 ID]:id' \
|
|
182
140
|
'--json[以 JSON 格式输出]' \
|
|
183
141
|
'--dry-run[预览请求]' \
|
|
184
142
|
'--help[显示帮助]'
|