baiduwangpan-cli 1.1.3 → 1.6.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/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  # baiduwangpan-cli
4
4
 
5
- **百度网盘 CLI — 全盘读写 · 免下载读取 · 群聊文件浏览**
5
+ **百度网盘 CLI — 全盘读写 · 免下载读取 · 群聊文件浏览/下载**
6
6
 
7
7
  专为 AI Agent 设计的百度网盘命令行工具
8
8
 
@@ -21,7 +21,7 @@
21
21
 
22
22
  - **🗂️ 全盘访问** — 不受 `/apps/` 目录限制,读写网盘任意路径
23
23
  - **📄 免下载读取** — 通过 HTTP Range 直接读取文件内容到 stdout,无需下载整个文件
24
- - **👥 群聊文件浏览** — 逆向 mbox API,列出群组、浏览群内分享库、搜索群文件
24
+ - **👥 群聊文件浏览 + 下载** — 逆向 mbox API,列出群组、浏览群内分享库、搜索群文件,并支持**直接下载群文件到本地**(免转存)
25
25
  - **🤖 Agent 友好** — 所有命令支持 `--json` 结构化输出,零解析成本
26
26
  - **🔧 双模式** — 既是 CLI 工具,也可作为 Node.js 库 `require()` 使用
27
27
  - **🔐 凭证安全** — 配置存储在 `~/.bdp/config.json`,不写入代码或日志
@@ -31,18 +31,26 @@
31
31
  | 能力 | 命令 | 说明 |
32
32
  |:-----|:------|:-----|
33
33
  | 列目录 | `bdp ls /` | 全盘任意目录 |
34
- | 搜索文件名 | `bdp search "报告"` | 递归全盘搜索 |
34
+ | 搜索文件名 | `bdp search "报告"` | 递归全盘搜索,支持 glob/正则 |
35
35
  | **读取文件内容** | `bdp cat /文档/data.json` | 免下载,限 1MB |
36
36
  | **读取前 N 行** | `bdp head -n 50 /文档/log.txt` | 免下载 |
37
37
  | **读取后 N 行** | `bdp tail -n 30 /文档/log.txt` | 免下载 |
38
38
  | **搜索文件内容** | `bdp grep "关键词" /文档/file.txt` | 免下载 |
39
- | 预览文件 | `bdp peek /文档/report.pdf` | 类型检测 + 前 10 行 |
40
- | 下载 | `bdp get /文档/file.zip` | 保存到本地 |
39
+ | 预览文件 | `bdp peek /文档/report.pdf` | 类型检测 + 前 10 行 + md5/ctime |
40
+ | 下载 | `bdp get /文档/file.zip` | 保存到本地,**size 校验 + 断点续传** |
41
41
  | 上传 | `bdp put ./file.txt /文档/` | 全盘任意位置 |
42
+ | 移动/重命名 | `bdp mv <src> <dst>` | 移动或重命名 |
43
+ | 拷贝 | `bdp cp <src> <dst>` | 网盘内复制 |
44
+ | 配额 | `bdp quota` | 总容量/已用/剩余 |
45
+ | 容量分析 | `bdp du [path]` | 递归统计目录大小,找空间大户 |
46
+ | 回收站 | `bdp recycle list/restore/clean` | 列出/还原/清空回收站 |
47
+ | 离线下载 | `bdp offline add <url>` | 百度服务器代下 |
48
+ | 分享管理 | `bdp share set/cancel` | 生成/取消分享链接 |
42
49
  | **列出群组** | `bdp groups` | 所有群聊 + gid |
43
50
  | **群内分享库** | `bdp gshares <gid>` | 顶层分享目录 |
44
51
  | **浏览群文件** | `bdp gls <gid> <fs_id>` | 分页 + 递归 |
45
52
  | **搜索群文件** | `bdp gsearch <gid> "关键词"` | 按文件名搜索(缓存命中秒回) |
53
+ | **下载群文件** | `bdp gdownload <gid> <fs_id>` | **直接下载到本地,免转存**(逆向 sharedownload API) |
46
54
  | 群目录树 | `bdp gtree <gid>` | BFS 构建目录树 |
47
55
  | 群缓存管理 | `bdp cache [clear]` | 查看 / 清空会话缓存 |
48
56
 
@@ -113,7 +121,8 @@ bdp cat /文档/config.json
113
121
  bdp groups
114
122
  bdp gshares 539478953581833690
115
123
  bdp gls 539478953581833690 742474845517885
116
- bdp gsearch 539478953581833690 "倪海厦"
124
+ # 下载群文件到本地 (免转存)
125
+ bdp gdownload 539478953581833690 954615608563687 -o ./downloads
117
126
  ```
118
127
 
119
128
  ## 📖 完整命令参考
@@ -123,15 +132,30 @@ bdp gsearch 539478953581833690 "倪海厦"
123
132
  ```
124
133
  bdp ls [path] 列出目录
125
134
  bdp search <keyword> [-p dir] 搜索文件名
135
+ [--regex 正则] [--glob 通配符] [--any-word] [--exact]
126
136
  bdp cat <path> 读取文件内容 (免下载, 限 1MB)
127
137
  bdp head [-n N] <path> 读取前 N 行 (默认 20)
128
138
  bdp tail [-n N] <path> 读取后 N 行 (默认 20)
129
139
  bdp grep <pattern> <path> 搜索文件内容
130
- bdp peek <path> 预览文件信息 + 前 10 行
131
- bdp get <path> [-o dir] 下载文件
132
- bdp put <local> <remote> 上传文件
140
+ bdp peek <path> 预览文件信息 + 前 10 行 (含 md5/ctime)
141
+ bdp get <path> [-o dir] 下载文件 (直链分块, size 校验, 断点续传)
142
+ [--resume] [--force] [--progress] [--no-verify-size] [--dry-run]
143
+ <gid>:<fs_id> 形式自动走群文件直下
144
+ bdp put <local> <remote> 上传文件 [--dry-run]
133
145
  bdp mkdir <path> 创建目录
134
- bdp rm <path> 删除文件/目录
146
+ bdp rm <path> 删除文件/目录 [--dry-run]
147
+ bdp mv <src> <dst> 移动/重命名文件/目录
148
+ bdp cp <src> <dst> 拷贝文件/目录
149
+ bdp quota 网盘配额 (总/已用/剩余)
150
+ bdp du [path] 目录容量分析 (递归统计, --depth/--top/--concurrency)
151
+ bdp recycle list / restore <id>... / clean 回收站管理 (clean 不可恢复)
152
+ bdp offline add <url> [--path D] 离线下载 (百度服务器代下)
153
+ bdp offline list 离线任务列表
154
+ bdp share set <path> [--pwd P] 创建分享链接 [--combined 输出带密码链接]
155
+ bdp share cancel <id>... 取消分享
156
+ bdp share list 列出分享 (受 BaiduPCS-Go v4.0.1 引擎 bug 限制)
157
+ bdp profile list / use <name> 多账号 profile 管理
158
+ bdp help [command] 帮助总览 / 单命令详情 (--json 结构化输出)
135
159
  ```
136
160
 
137
161
  ### 群聊文件操作
@@ -148,9 +172,18 @@ bdp gsearch <gid> <keyword> 搜索群文件名 (全量遍历目录)
148
172
  [--max-pages N] [--max-requests N] [--no-unique]
149
173
  [--all|--all-results] [--timeout N] [--save-partial]
150
174
  [--any-word] [--exact] [--no-cache]
175
+ bdp gdownload <gid> <fs_id>... 直接下载群文件到本地 (逆向 /api/sharedownload, 免转存)
176
+ 单文件直下;多个 fs_id(同消息)自动 zip 打包下载
177
+ [-o dir] [--filename NAME] [--from-uk X] [--msg-id Y] [--no-cache]
151
178
  bdp cache [clear] 查看 / 清空会话缓存 (~/.bdp/cache/)
152
179
  ```
153
180
 
181
+ > **群文件下载限制说明**(实测,2026-08):
182
+ > - 单文件 ≤ ~20MB:直接下载 ✅
183
+ > - 同消息多文件:zip 打包下载 ✅(总包 ≤ ~100MB)
184
+ > - 大文件(> ~100MB):网页端受百度限制(单文件加密 / zip 报 `31090 package is too large`),需用官方客户端;转存接口已被百度下线(`errno=-10`)
185
+ > - 详见 `docs/group-download-final-verdict.md`
186
+
154
187
  ### 通用选项
155
188
 
156
189
  ```
@@ -162,6 +195,17 @@ bdp cache [clear] 查看 / 清空会话缓存 (~/.bdp/cache/)
162
195
  -i 忽略大小写 (grep)
163
196
  -N 显示行号 (cat/grep)
164
197
  -o <dir> 输出目录 (get)
198
+ --resume 断点续传 (get;存在部分文件时自动续传)
199
+ --force 覆盖重下 (get;先删除旧文件)
200
+ --progress 显示实时进度 + 速度 (get,stderr)
201
+ --no-verify-size 关闭下载后 size 校验 (get;默认开启)
202
+ --regex / --glob 搜索模式: 正则 / 通配符 (search)
203
+ --any-word 空格分隔关键词命中任意一个 (search/gsearch)
204
+ --exact 整名精确匹配 (search/gsearch)
205
+ --pwd <P> 分享提取码 (share set)
206
+ --combined 输出带提取码的分享链接 (share set)
207
+ --dry-run 模拟执行不落盘 (get/put/rm)
208
+ --profile <name> 切换账号 profile (全局参数,命令前/后均可)
165
209
  --page <N> 页码 (gls/gsearch, 默认 1)
166
210
  --page-size <N> 每页条数 (gls, 默认 50, 最大 100)
167
211
  --limit <N> 每页条数 (gsearch, 默认 50)
@@ -181,9 +225,68 @@ bdp cache [clear] 查看 / 清空会话缓存 (~/.bdp/cache/)
181
225
  --no-cache 禁用会话缓存 (gsearch/gtree/gshares/gls)
182
226
  ```
183
227
 
228
+ ### get 下载可靠性(v1.2.0)
229
+
230
+ `bdp get` 已从裸跑 BaiduPCS-Go 升级为**直链分块下载 + 三重保障**(实测,2026-08):
231
+
232
+ ```
233
+ bdp get /文档/大文件.zip # 下载到当前目录,自动 size 校验
234
+ bdp get /文档/大文件.zip -o ./dl # 下载到指定目录 (自动创建)
235
+ bdp get /文档/大文件.zip --resume # 断点续传(存在部分文件时自动续传,无需该参数)
236
+ bdp get /文档/大文件.zip --force # 已有文件时覆盖重下
237
+ bdp get /文档/大文件.zip --progress # 实时进度 + 速度 (stderr)
238
+ bdp get /文档/大文件.zip --json # JSON 元信息: {path, localPath, size, md5, remoteMd5,
239
+ # md5Match, md5Obfuscated, dlinkExpiry, verified,
240
+ # skipped, resumed, avgSpeedBps}
241
+ ```
242
+
243
+ - **size 校验**(默认开启,`--no-verify-size` 可关):下载后比对远端/本地字节数,0 字节或大小不符即报错并**保留文件供排查**
244
+ - **断点续传**:curl 有界 Range 分块下载(4MB/块,实测部分 CDN 节点只接受 ≤5MB 的有界 Range,无界请求会 403),每块失败自动**换新 dlink 重试**;中断后重跑同一命令即从断点继续
245
+ - **并发分块**:大文件(>32MB)默认 3 路并发分块(`--concurrency 1` 可回串行)。实测百度对非 SVIP 是**账号级限速**,并发无法突破总量限速,但多 CDN 节点并行能提升稳定性(坏节点/单连接抖动不影响整体)
246
+ - **md5 软校验**:百度 `/api/list` 返回的 md5 是**混淆键**(含 `o`/`t` 等非 hex 字符,非内容哈希),无法作为完整性依据;CLI 计算本地 md5 供流水线比对,`md5Obfuscated:true` 标注远端不可信
247
+ - **默认保存位置**:`-o` 指定目录,否则当前目录(与 `gdownload` 一致)
248
+ - 目录下载 / 获取 dlink 失败等边界场景自动回退 BaiduPCS-Go 引擎(无校验/续传)
249
+
250
+ ### 多账号 profile(v1.3.0)
251
+
252
+ 多个百度账号切换,认证字段按 profile 隔离(pcsPath/ua 等配置保持全局):
253
+
254
+ ```
255
+ bdp --profile svip login --bduss X --stoken Y # 登录到 svip profile
256
+ bdp profile list # 列出所有 profile
257
+ bdp --profile svip quota # 用 svip 账号执行命令
258
+ bdp login --profile 备份 ... # --profile 也可放命令后
259
+ bdp profile unset # 切回全局账号
260
+ ```
261
+
262
+ - 存储在 `~/.bdp/config.json` 的 `profiles` + `activeProfile` 字段;无 profile 时行为与旧版完全一致
263
+ - `bdp whoami` 会显示当前 profile
264
+
265
+ ### 容量管理(v1.6.0)
266
+
267
+ 网盘容量见底时的排查三件套(百度无服务端目录大小接口,`du` 走 /api/list 并发遍历):
268
+
269
+ ```
270
+ bdp quota # 总/已用/剩余(实测 99.78% 时优先排查下面两项)
271
+ bdp recycle list # 回收站:删除的文件保留 60 天仍占容量,先看这里
272
+ bdp recycle restore <fs_id>... # 还原误删
273
+ bdp recycle clean # 清空回收站释放容量(不可恢复,务必确认)
274
+ bdp du / # 顶层目录容量分布(找空间大户)
275
+ bdp du /玄学 --depth 5 --top 20 # 深扫指定目录(深度封顶的子目录标 [深度封顶])
276
+ bdp du / --json # JSON 输出(Agent 可解析)
277
+ ```
278
+
279
+ > 注意:`du` 全盘扫描较慢(API 限制,深度 4 全盘约 10 分钟),建议先顶层后深扫;若 quota 已用量与全盘可见内容差距巨大,优先怀疑**百度扩容/福利空间到期**(总量缩水,历史总量需在网页端空间明细核实)。
280
+
184
281
  ## 🤖 Agent 集成示例
185
282
 
186
- 所有命令支持 `--json` 输出,适合 AI Agent 直接调用和解析:
283
+ 所有命令支持 `--json` 输出,适合 AI Agent 直接调用和解析。**Agent 运行时发现用法**:
284
+
285
+ ```bash
286
+ bdp help --json # 全部命令的 usage/desc/options/examples(结构化)
287
+ bdp help get --json # 单个命令的完整定义
288
+ bdp help gsearch --json # 群搜索的全部选项
289
+ ```
187
290
 
188
291
  ```bash
189
292
  # Agent 获取群组列表 (JSON)
@@ -224,12 +327,13 @@ const results = await group.searchFiles('539478953581833690', '倪海厦');
224
327
  │ (统一命令解析 + 路由) │
225
328
  ├──────────────────┬──────────────────────────────────┤
226
329
  │ lib/pan.js │ lib/group.js │
227
- │ 全盘文件操作 │ 群聊文件浏览 │
330
+ │ 全盘文件操作 │ 群聊文件浏览 + 下载 │
228
331
  ├──────────────────┼──────────────────────────────────┤
229
332
  │ BaiduPCS-Go │ lib/http.js (curl / browser) │
230
333
  │ (BDUSS 认证) │ mbox API (逆向) │
231
334
  │ locate → dlink │ /mbox/group/listshare │
232
335
  │ upload/download │ /mbox/msg/shareinfo │
336
+ │ │ /api/sharedownload → dlink │
233
337
  ├──────────────────┴──────────────────────────────────┤
234
338
  │ 百度网盘 CDN / API │
235
339
  └─────────────────────────────────────────────────────┘
@@ -281,25 +385,27 @@ bdp groups bdp gshares <gid>
281
385
 
282
386
  ```
283
387
  baiduwangpan-cli/
284
- ├── package.json # npm 配置 (bin: bdp)
388
+ ├── package.json # npm 配置 (bin: bdp,唯一入口)
285
389
  ├── bin/
286
- │ └── bdp.js # CLI 入口 (统一命令解析)
390
+ │ └── bdp.js # CLI 入口 (统一命令解析 + 命令注册表)
287
391
  ├── lib/
288
392
  │ ├── index.js # 库导出
289
- │ ├── config.js # 配置管理 (~/.bdp/config.json)
393
+ │ ├── config.js # 配置管理 (~/.bdp/config.json,含多账号 profile)
290
394
  │ ├── http.js # 网页 API 双传输 (curl / browser)
291
395
  │ ├── browser-login.js # 浏览器登录、持久 profile 与 CDP 请求
292
- │ ├── pan.js # 网盘操作 (BaiduPCS-Go 桥接)
293
- │ └── group.js # 群聊操作 (逆向 mbox API)
396
+ │ ├── pan.js # 网盘操作 (BaiduPCS-Go 桥接 + 直链分块下载)
397
+ │ ├── group.js # 群聊操作 (逆向 mbox API)
398
+ │ ├── pcs-extra.js # 引擎扩展命令 (mv/cp/quota/offline/share)
399
+ │ ├── name-match.js # 文件名匹配 (glob/正则/AND/OR)
400
+ │ └── console.js # Windows 控制台编码兜底 (chcp 65001)
294
401
  ├── test/ # Node.js 回归测试
295
402
  ├── skills/
296
403
  │ └── baiduwangpan/ # Agent Skill 源文件 (SKILL.md + reference + scripts)
297
- ├── baiduwangpan-skill.zip # Agent Skill 打包 (Releases 附件)
298
- ├── bdp.js # 早期独立版 (保留参考)
299
- ├── bdp-group.js # 早期独立版 (保留参考)
300
- └── bdp.py # Python 版 (备用)
404
+ └── baiduwangpan-skill.zip # Agent Skill 打包 (Releases 附件)
301
405
  ```
302
406
 
407
+ > **唯一入口**:`bdp` 命令(`bin/bdp.js`)。历史原型 `bdp.py` / `bdp.js` / `bdp-group.js` 已删除(git 历史可查),避免多入口行为不一致。Agent 不确定命令用法时用 `bdp help <命令> --json` 查询。
408
+
303
409
  ## 🤖 Agent Skill 使用
304
410
 
305
411
  本仓库附带一个标准格式的 Agent Skill,让 Claude Code / Codex / OpenClaw / Cursor 等 Agent 通过自然语言操作百度网盘。
@@ -350,6 +456,8 @@ skills/baiduwangpan/
350
456
  - **下载限速**:非 SVIP 用户下载受百度限速策略限制
351
457
  - **cat 限制**:为防止误读超大文件,`cat` 默认限制 1MB,可通过 `BDP_MAX_CAT_BYTES` 环境变量调整
352
458
  - **群聊文件**:群聊 API 为逆向获取,可能随百度服务端变更而失效
459
+ - **share list**:BaiduPCS-Go v4.0.1 的 `share list` 有引擎 bug(panic),CLI 会提示替代方案;`share set/cancel` 正常
460
+ - **PowerShell 中文乱码**:CLI 启动时自动 `chcp 65001`(仅 TTY 且非 UTF-8 代码页时),中文正常显示;管道/重定向场景无副作用
353
461
  - **1.1.0 升级**:若引擎丢失(postinstall 网络失败),CLI 会自动发现 `BaiduPCS-Go-v*` 版本子目录中的二进制;config 里失效的绝对 `pcsPath` 也会自动回退到自动发现,无需手改配置
354
462
 
355
463
  ## 🤝 致谢