dsh-mcloud 0.0.0-stage → 0.2.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/CHANGELOG.md +36 -0
- package/CONTRIBUTING.md +87 -0
- package/FAQ.md +152 -0
- package/LICENSE +51 -0
- package/README.md +223 -2
- package/cordis.patch.yml +19 -0
- package/icon.svg +14 -0
- package/lib/client.js +3694 -0
- package/lib/index.js +2321 -0
- package/lib/login.js +358 -0
- package/lib/scan-login.js +295 -0
- package/lib/transfer.js +182 -0
- package/locale/en.json +6 -0
- package/locale/zh.json +6 -0
- package/package.json +62 -4
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
本项目遵循 [语义化版本](https://semver.org/lang/zh-CN/)。
|
|
4
|
+
|
|
5
|
+
## 版本与 DSH 兼容性
|
|
6
|
+
|
|
7
|
+
| 插件版本 | 支持的 DeepSeek Harness | 支持的 Node |
|
|
8
|
+
| --- | --- | --- |
|
|
9
|
+
| **0.2.x** | **>= 0.2.1-rc.5,< 0.4.0** | >= 22 |
|
|
10
|
+
| 0.1.x | >= 0.2.1-rc.5,< 0.4.0 | >= 22 |
|
|
11
|
+
|
|
12
|
+
> 插件用到了 `tools/pre-execute`(写入审批闸)和 `webServer.register`(HTTP 路由)
|
|
13
|
+
> 这两个较新的宿主 API,因此下限是 `0.2.1-rc.5`。
|
|
14
|
+
> 用 `dsh --version` 或 `dsh plugin --profile <name> list` 查看你的 DSH 版本。
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## 0.2.0
|
|
19
|
+
|
|
20
|
+
**登录方式重做**:从「手动粘贴」变成面板内直接登录。
|
|
21
|
+
|
|
22
|
+
- 扫码登录:面板点一下,弹出浏览器扫码即可;凭据可自动续期,日常不需要反复扫码
|
|
23
|
+
- 账号密码登录:可选记住密码(加密保存在本机)
|
|
24
|
+
- 不再需要打开开发者工具抄请求头
|
|
25
|
+
|
|
26
|
+
其余能力(文件浏览、上传下载、转移、复制路径等)不变。
|
|
27
|
+
|
|
28
|
+
## 0.1.0
|
|
29
|
+
|
|
30
|
+
首个公开版本:把移动云盘接进 DeepSeek Harness。
|
|
31
|
+
|
|
32
|
+
- 会话页面板:目录浏览、容量、传输进度
|
|
33
|
+
- 模型工具:容量 / 列目录 / 搜索 / 上传 / 上传文件夹 / 下载 / 下载文件夹 /
|
|
34
|
+
下载直链 / 新建 / 重命名 / 转移 / 删除
|
|
35
|
+
- 右键菜单与拖拽上传
|
|
36
|
+
- 分片上传、秒传、流式下载
|
package/CONTRIBUTING.md
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# 贡献指南
|
|
2
|
+
|
|
3
|
+
感谢你愿意改进 `dsh-mcloud`。这个项目是社区逆向实现的移动云盘(139)接入,
|
|
4
|
+
所以对**稳定性**和**不泄露凭据**的要求高于一般项目。
|
|
5
|
+
|
|
6
|
+
## 开发环境
|
|
7
|
+
|
|
8
|
+
- Node.js **>= 22**(插件用了内置 `fetch`、`AbortSignal.timeout`、`node:stream/promises`)
|
|
9
|
+
- Windows(宿主端用 Puppeteer 无依赖的 PowerShell + WinForms 处理系统对话框与 DPAPI;
|
|
10
|
+
macOS / Linux 上凭据改用文件权限,但部分功能未验证)
|
|
11
|
+
- DeepSeek Harness `0.2.x`
|
|
12
|
+
|
|
13
|
+
## 本地开发
|
|
14
|
+
|
|
15
|
+
```powershell
|
|
16
|
+
git clone https://github.com/GIYN-S/dsh-mcloud.git
|
|
17
|
+
cd dsh-mcloud
|
|
18
|
+
dsh plugin --profile desktop add "link:$PWD"
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
改完代码要**重启 DSH 的 Web 服务**才生效(插件在 profile 启动时加载)。
|
|
22
|
+
|
|
23
|
+
## 代码结构
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
lib/index.js 宿主端:139 客户端、12 个工具、/api/dsh-mcloud/* 路由、凭据存储
|
|
27
|
+
lib/transfer.js 传输层纯函数:分片切分、SHA256、流式 PUT、流式落盘
|
|
28
|
+
lib/client.js 客户端:会话页标签面板(右键菜单、上传面板、传输进度)
|
|
29
|
+
cordis.patch.yml bundle patch
|
|
30
|
+
locale/*.json 面板标题与描述
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
**硬性约定:**
|
|
34
|
+
|
|
35
|
+
- `lib/client.js` 是**纯浏览器脚本**:不能用 `import` / `export`,不能写 JSX,
|
|
36
|
+
必须包在 `window.__ModuleLoader__.load({ id, factory })` 里。
|
|
37
|
+
- 每个 React `apply()` 都必须**永不抛异常**(宿主上抛一次整个面板就白屏)。
|
|
38
|
+
- 所有 POST 必须带 `x-dsh-mcloud: 1`(CSRF 闸,同时挡跨站预检)。
|
|
39
|
+
|
|
40
|
+
## 提交前自查
|
|
41
|
+
|
|
42
|
+
```powershell
|
|
43
|
+
# 语法
|
|
44
|
+
node --check lib/index.js
|
|
45
|
+
node --check lib/transfer.js
|
|
46
|
+
node --check lib/client.js
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
**必须确认没有把个人信息提交上去:**
|
|
50
|
+
|
|
51
|
+
```powershell
|
|
52
|
+
git diff --cached | Select-String -Pattern 'gh[pousr]_|1[3-9]\d{9}|\*\*\*\*\*|Authorization|ud_id'
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
`.dpapi` / `authorization.json` / `.env` 已在 `.gitignore` 里,别用 `git add -f` 绕过。
|
|
56
|
+
|
|
57
|
+
## 提交信息
|
|
58
|
+
|
|
59
|
+
用 [Conventional Commits](https://www.conventionalcommits.org/zh-hans/):
|
|
60
|
+
|
|
61
|
+
```
|
|
62
|
+
feat: 新增 xxx 能力
|
|
63
|
+
fix: 修复 xxx 问题
|
|
64
|
+
perf: 优化 xxx 性能
|
|
65
|
+
docs: 更新文档
|
|
66
|
+
refactor: 重构(不改变行为)
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## 关于逆向接口
|
|
70
|
+
|
|
71
|
+
移动云盘的接口不是公开 API,**随时可能变更**。改动协议相关代码时:
|
|
72
|
+
|
|
73
|
+
- 注释里写清为什么这么做(签名、分页、字段含义),不要只写「按文档来」——没有官方文档。
|
|
74
|
+
- 协议相关的改动需要你实际验证过再提交。
|
|
75
|
+
- 上游参考实现:[OpenList `drivers/139`](https://github.com/OpenListTeam/OpenList)
|
|
76
|
+
(AGPL-3.0)、[cloud_driver_sdk](https://github.com/kong-hen/cloud_driver_sdk)。
|
|
77
|
+
|
|
78
|
+
## Issue / PR
|
|
79
|
+
|
|
80
|
+
提 Issue 时请附上:
|
|
81
|
+
|
|
82
|
+
- DSH 版本、Node 版本、操作系统
|
|
83
|
+
- **报错原文**(面板上的红色提示,或 DSH 日志)
|
|
84
|
+
- 复现步骤
|
|
85
|
+
|
|
86
|
+
⚠️ **绝不要在 Issue / PR 里粘贴 `Authorization` 或任何 cookie。**
|
|
87
|
+
如果怀疑是授权问题,只描述现象即可,维护者会告诉你需要什么信息。
|
package/FAQ.md
ADDED
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
# 常见问题(FAQ)
|
|
2
|
+
|
|
3
|
+
## 安装与加载
|
|
4
|
+
|
|
5
|
+
### 装了插件,但标签栏没有「移动云盘」
|
|
6
|
+
|
|
7
|
+
1. **重启 DSH 的 Web 服务**。插件在 profile 启动时加载,装完不重启不会出现。
|
|
8
|
+
2. 确认装在了正确的 profile:`dsh plugin --profile <你的 profile> list`。
|
|
9
|
+
3. 看 DSH 日志有没有插件加载报错(菜单「⋯」→「打开日志目录」)。
|
|
10
|
+
|
|
11
|
+
### 面板打开了,但一片空白 / 报 red 错误
|
|
12
|
+
|
|
13
|
+
先看**报错原文**。宿主端所有异常都会透传到面板顶部横幅里,那行字比猜有用得多。
|
|
14
|
+
|
|
15
|
+
## 授权
|
|
16
|
+
|
|
17
|
+
### 登录方式有哪些
|
|
18
|
+
|
|
19
|
+
两种,都在面板的登录页里:
|
|
20
|
+
|
|
21
|
+
1. **扫码登录**(推荐)—— 点按钮 → 弹出浏览器 → 手机扫码。不用输密码,**扫一次长期有效**。
|
|
22
|
+
2. **账号密码登录** —— 直接填手机号/邮箱 + 密码。
|
|
23
|
+
|
|
24
|
+
> 早期版本的「手动粘贴 Authorization」入口已经移除。
|
|
25
|
+
|
|
26
|
+
### 扫码登录要多久扫一次
|
|
27
|
+
|
|
28
|
+
**正常只需要一次。**
|
|
29
|
+
|
|
30
|
+
插件保存的凭据会自动续期:每 15 天续一次,每次延长 30 天。
|
|
31
|
+
所以只要你**不是连续 30 天以上完全不用插件**,就一直不需要重扫。
|
|
32
|
+
|
|
33
|
+
### 扫码时弹出的浏览器是什么
|
|
34
|
+
|
|
35
|
+
插件自己拉起的一个**独立 profile** 浏览器实例:
|
|
36
|
+
|
|
37
|
+
- 不会影响你日常用的 Edge(不占用你的 profile 文件锁)
|
|
38
|
+
- 不会读到你别的网站的登录态
|
|
39
|
+
- 登录成功后会**自动关闭**,临时数据也会删掉
|
|
40
|
+
|
|
41
|
+
它看起来和普通 Edge 一样,只是配置是全新的 —— 所以需要你在里面登录一次。
|
|
42
|
+
|
|
43
|
+
### 扫码登录安全吗
|
|
44
|
+
|
|
45
|
+
- **密码全程不经过插件**,你是在浏览器里扫码
|
|
46
|
+
- 插件只读取登录后浏览器里的凭据 cookie
|
|
47
|
+
- 凭据用 Windows DPAPI 加密保存在本机
|
|
48
|
+
|
|
49
|
+
### 账号密码登录的密码存哪
|
|
50
|
+
|
|
51
|
+
- **默认不保存**:只在内存里用于换取令牌,用完即弃
|
|
52
|
+
- 勾选「**记住密码**」才会保存,同样用 DPAPI 加密(`~/.dsh-mcloud/authorization.dpapi`)
|
|
53
|
+
- 想反悔:面板里「退出登录」会一并清掉
|
|
54
|
+
|
|
55
|
+
### 提示「账号或密码不正确」
|
|
56
|
+
|
|
57
|
+
就是账号密码错了。注意:
|
|
58
|
+
|
|
59
|
+
- 账号填**手机号或 139 邮箱**,不是昵称
|
|
60
|
+
- 密码是**139邮箱的密码**(如果从没开通过邮箱,需要先去 mail.10086.cn 激活)
|
|
61
|
+
|
|
62
|
+
### 提示「触发了安全验证」
|
|
63
|
+
|
|
64
|
+
移动侧的风控。请先到 <https://mail.10086.cn> 或云盘官网登录一次、完成短信验证,再回来重试。
|
|
65
|
+
|
|
66
|
+
### 提示「登录已过期,请重新登录」
|
|
67
|
+
|
|
68
|
+
凭据彻底失效了(通常是超过 30 天没用,或在别处改了密码)。重新扫码即可。
|
|
69
|
+
|
|
70
|
+
### 怎么退出登录
|
|
71
|
+
|
|
72
|
+
面板里点「退出登录」/「清除凭据」,会删掉本机保存的凭据,回到未登录状态。
|
|
73
|
+
|
|
74
|
+
## 传输
|
|
75
|
+
|
|
76
|
+
### 上传支持哪些方式
|
|
77
|
+
|
|
78
|
+
| 方式 | 怎么用 | 字节路径 |
|
|
79
|
+
| --- | --- | --- |
|
|
80
|
+
| 右键 → 上传文件 | 浏览器原生文件对话框(可多选) | 磁盘 → 浏览器 → 宿主 → 网盘 |
|
|
81
|
+
| 右键 → 上传文件夹 | 浏览器原生文件夹选择器,保留目录结构 | 同上,逐个文件 |
|
|
82
|
+
| 右键 → 拖动上传 | 拖进弹出的面板 | 同上 |
|
|
83
|
+
| 模型工具 `mcloud_upload` | 给本机绝对路径 | **宿主直读磁盘**,少一趟拷贝 |
|
|
84
|
+
|
|
85
|
+
大文件或整个目录建议用最后一种(让 AI 帮你传)。
|
|
86
|
+
|
|
87
|
+
### 「下载整个文件夹」为什么不是压缩包
|
|
88
|
+
|
|
89
|
+
移动云盘**没有打包下载的公开接口**(上游 OpenList 的驱动遇到目录直接返回 `NotFile`)。
|
|
90
|
+
所以这里是**递归遍历 → 逐个文件下载 → 本地还原目录结构**。文件多会比较慢,
|
|
91
|
+
传输面板里能看到当前传到哪个文件。
|
|
92
|
+
|
|
93
|
+
### 上传显示「秒传」,是真的传了吗
|
|
94
|
+
|
|
95
|
+
没传数据。服务端发现内容完全相同(整文件 SHA256 一致),直接复用已有文件。
|
|
96
|
+
进度会直接记满,这是正常行为。
|
|
97
|
+
|
|
98
|
+
### 能不能续传
|
|
99
|
+
|
|
100
|
+
暂不支持。中断后需要重新上传(已传完的文件会命中秒传,所以重传通常很快)。
|
|
101
|
+
|
|
102
|
+
## 性能
|
|
103
|
+
|
|
104
|
+
### 点文件夹很慢 / 一直转圈
|
|
105
|
+
|
|
106
|
+
先确认是不是这几种情况:
|
|
107
|
+
|
|
108
|
+
- **目录条目特别多**(几千项)→ 需要多次「加载更多」
|
|
109
|
+
- **网络不稳** → 面板会给出错误提示,等几秒重试即可
|
|
110
|
+
- **刚登录后第一次访问** → 首次要解析服务地址,会稍慢
|
|
111
|
+
|
|
112
|
+
如果某个目录每次都很慢,把目录名和大概条目数告诉我。
|
|
113
|
+
|
|
114
|
+
### 为什么一次只显示 10 项
|
|
115
|
+
|
|
116
|
+
为了打开目录更快。点底部的「加载更多」看剩下的内容。
|
|
117
|
+
|
|
118
|
+
### 回到看过的目录会很快
|
|
119
|
+
|
|
120
|
+
已访问过的目录会被缓存,再次进入基本是瞬间打开。
|
|
121
|
+
|
|
122
|
+
## 权限与安全
|
|
123
|
+
|
|
124
|
+
### 为什么写入操作总要我确认
|
|
125
|
+
|
|
126
|
+
这是 **Harness 的审批闸**,设计如此。会改动网盘内容或往本机写文件的操作
|
|
127
|
+
(上传、下载、新建、改名、转移、删除)都会弹一次确认。
|
|
128
|
+
|
|
129
|
+
觉得太烦可以在配置里关掉,但**不建议**。
|
|
130
|
+
|
|
131
|
+
### 删除是永久的吗
|
|
132
|
+
|
|
133
|
+
**不是。** 走的是回收站(`/recyclebin/batchTrash`),可以在移动云盘里恢复。
|
|
134
|
+
|
|
135
|
+
### 会不会把我的数据传到别处
|
|
136
|
+
|
|
137
|
+
不会。插件只和 `*.yun.139.com`(你账号的网盘服务)以及
|
|
138
|
+
`*.eos.*.cmecloud.cn`(文件 CDN)通信,没有任何第三方上报。
|
|
139
|
+
|
|
140
|
+
## 其他
|
|
141
|
+
|
|
142
|
+
### 支持 macOS / Linux 吗
|
|
143
|
+
|
|
144
|
+
宿主端核心逻辑跨平台,但**部分功能只在 Windows 上验证过**:
|
|
145
|
+
|
|
146
|
+
- 凭据加密:Windows 用 DPAPI,其他平台退回文件权限
|
|
147
|
+
- 系统文件对话框:Windows 专用(其他平台请用拖拽或 `mcloud_upload`)
|
|
148
|
+
|
|
149
|
+
### 移动云盘官方支持吗
|
|
150
|
+
|
|
151
|
+
**不支持。** 这是社区逆向实现,与中国移动无关联。
|
|
152
|
+
接口随时可能变更或失效,请自行评估风险。
|
package/LICENSE
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 dsh-mcloud contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
22
|
+
|
|
23
|
+
================================================================================
|
|
24
|
+
ADDITIONAL NOTICE AND DISCLAIMER
|
|
25
|
+
================================================================================
|
|
26
|
+
|
|
27
|
+
This project is NOT affiliated with, endorsed by, sponsored by, or authorized
|
|
28
|
+
by China Mobile (中国移动) or China Mobile Cloud / 139 Cloud Drive (移动云盘).
|
|
29
|
+
|
|
30
|
+
It communicates with the service through UNOFFICIAL, reverse-engineered
|
|
31
|
+
interfaces that are not public APIs and carry no stability guarantee. Those
|
|
32
|
+
interfaces may change or be withdrawn at any time, with or without notice, and
|
|
33
|
+
the project may stop working as a result. Use of such interfaces may conflict
|
|
34
|
+
with the service's terms of use.
|
|
35
|
+
|
|
36
|
+
"China Mobile", "139", "移动云盘" and related marks belong to their respective
|
|
37
|
+
owners and are used here only descriptively, to identify the service this tool
|
|
38
|
+
connects to. No trademark rights are claimed.
|
|
39
|
+
|
|
40
|
+
THE SOFTWARE CAN MODIFY YOUR CLOUD DRIVE CONTENTS (upload, move, rename,
|
|
41
|
+
delete). Deletions go to the recycle bin and are usually recoverable, but this
|
|
42
|
+
is not guaranteed. Do not use this software on data you cannot afford to lose.
|
|
43
|
+
|
|
44
|
+
Credential storage relies on Windows DPAPI (current-user scope). It protects
|
|
45
|
+
against other users and other machines, but NOT against malware, physical
|
|
46
|
+
access, or a compromised account environment on the same machine.
|
|
47
|
+
|
|
48
|
+
BY INSTALLING OR USING THIS SOFTWARE YOU ACCEPT FULL RESPONSIBILITY for any
|
|
49
|
+
account restriction, service interruption, data loss, or terms-of-service
|
|
50
|
+
violation that may result. The authors provide no support obligation, no
|
|
51
|
+
service level, and no guarantee of fitness for any particular purpose.
|
package/README.md
CHANGED
|
@@ -1,3 +1,224 @@
|
|
|
1
|
-
#
|
|
1
|
+
# dsh-mcloud
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
把 **中国移动云盘(139)** 接进 DeepSeek Harness:在会话页顶部加一个「移动云盘」页签,
|
|
4
|
+
可以直接浏览、上传、下载、转移网盘文件;同时给模型提供一整套 `mcloud_*` 工具。
|
|
5
|
+
|
|
6
|
+
📖 [常见问题 FAQ](FAQ.md) · 📝 [更新日志](CHANGELOG.md) · 🤝 [贡献指南](CONTRIBUTING.md)
|
|
7
|
+
|
|
8
|
+
## 快速开始
|
|
9
|
+
|
|
10
|
+
**环境要求**
|
|
11
|
+
|
|
12
|
+
| 项目 | 要求 |
|
|
13
|
+
| --- | --- |
|
|
14
|
+
| DeepSeek Harness | **>= 0.2.1-rc.5,< 0.4.0**(`dsh --version` 查看) |
|
|
15
|
+
| Node.js | >= 22 |
|
|
16
|
+
| 系统 | Windows |
|
|
17
|
+
|
|
18
|
+
**五步用起来**
|
|
19
|
+
|
|
20
|
+
1. 装插件(见下方「安装」)
|
|
21
|
+
2. 重启 DSH —— 插件在 profile 启动时加载
|
|
22
|
+
3. 会话页顶部标签栏点「**移动云盘**」
|
|
23
|
+
4. 用**扫码**或**账号密码**登录(全新安装一定是未登录状态)
|
|
24
|
+
5. 看到容量和文件列表 → 可以用了
|
|
25
|
+
|
|
26
|
+
之后可以直接让 AI 操作网盘,也可以右键菜单自己动手。
|
|
27
|
+
|
|
28
|
+
## 安装
|
|
29
|
+
|
|
30
|
+
从 GitHub 装(推荐):
|
|
31
|
+
|
|
32
|
+
```powershell
|
|
33
|
+
dsh plugin --profile desktop add github:GIYN-S/dsh-mcloud
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
或下载 Release 里的 tgz:
|
|
37
|
+
|
|
38
|
+
```powershell
|
|
39
|
+
dsh plugin --profile desktop add https://github.com/GIYN-S/dsh-mcloud/releases/download/v0.2.0/dsh-mcloud-0.2.0.tgz
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
本地开发用 link:
|
|
43
|
+
|
|
44
|
+
```powershell
|
|
45
|
+
dsh plugin --profile desktop add "link:/path/to/dsh-mcloud"
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
装完**重启 DSH** 才生效。
|
|
49
|
+
|
|
50
|
+
## 登录
|
|
51
|
+
|
|
52
|
+
打开面板会看到登录页,两种方式任选。
|
|
53
|
+
|
|
54
|
+
### 扫码登录(推荐)
|
|
55
|
+
|
|
56
|
+
点「**开始扫码登录**」→ 弹出一个浏览器窗口 → 手机扫码 → 完成。
|
|
57
|
+
|
|
58
|
+
- 不需要输密码
|
|
59
|
+
- 凭据会自动续期,日常**不需要反复扫码**
|
|
60
|
+
- 弹出的是独立 profile 的浏览器,不影响你日常用的 Edge
|
|
61
|
+
|
|
62
|
+
### 账号密码登录
|
|
63
|
+
|
|
64
|
+
在「账号密码」页签填手机号/邮箱和密码。
|
|
65
|
+
|
|
66
|
+
- **密码默认只用一次**,登录成功后立刻丢弃
|
|
67
|
+
- 勾选「**记住密码**」才会保存,用 Windows DPAPI 加密存在本机
|
|
68
|
+
|
|
69
|
+
### 退出登录
|
|
70
|
+
|
|
71
|
+
面板里点「退出登录」,会清掉本机凭据,回到未登录状态。
|
|
72
|
+
|
|
73
|
+
### 凭据存在哪
|
|
74
|
+
|
|
75
|
+
`%USERPROFILE%\.dsh-mcloud\authorization.dpapi` —— 当前用户的 DPAPI 加密,
|
|
76
|
+
换用户或换机器都解不开。想换位置在配置里写 `credentialDir`。
|
|
77
|
+
|
|
78
|
+
**不要把凭据贴到 Issue、聊天记录或截图里。**
|
|
79
|
+
|
|
80
|
+
## 功能
|
|
81
|
+
|
|
82
|
+
### 面板内操作
|
|
83
|
+
|
|
84
|
+
| 操作 | 说明 |
|
|
85
|
+
| --- | --- |
|
|
86
|
+
| 浏览目录 | 点击文件夹进入,顶部面包屑可回退 |
|
|
87
|
+
| 容量 | 显示总量 / 已用 / 剩余 |
|
|
88
|
+
| 上传 | 右键 → 上传文件 / 上传文件夹 / 拖动上传 |
|
|
89
|
+
| 下载 | 右键 → 下载到本地 / 打开下载直链 / 下载整个文件夹 |
|
|
90
|
+
| 转移 | 右键 → 转移到…(选择目标文件夹) |
|
|
91
|
+
| 复制路径 | 右键 → 复制路径 |
|
|
92
|
+
| 重命名 / 删除 | 右键菜单 |
|
|
93
|
+
|
|
94
|
+
### 模型工具
|
|
95
|
+
|
|
96
|
+
| 工具 | 用途 |
|
|
97
|
+
| --- | --- |
|
|
98
|
+
| `mcloud_quota` | 查询容量 |
|
|
99
|
+
| `mcloud_list` | 列目录 |
|
|
100
|
+
| `mcloud_search` | 按文件名搜索 |
|
|
101
|
+
| `mcloud_upload` | 上传本地文件(按路径,直接从磁盘读) |
|
|
102
|
+
| `mcloud_upload_folder` | 上传整个本地文件夹 |
|
|
103
|
+
| `mcloud_download` | 下载到本地 |
|
|
104
|
+
| `mcloud_download_folder` | 递归下载整个文件夹 |
|
|
105
|
+
| `mcloud_download_link` | 获取下载直链 |
|
|
106
|
+
| `mcloud_mkdir` | 新建文件夹 |
|
|
107
|
+
| `mcloud_rename` | 重命名 |
|
|
108
|
+
| `mcloud_move` | 转移 |
|
|
109
|
+
| `mcloud_remove` | 删除(进回收站) |
|
|
110
|
+
|
|
111
|
+
## 使用提醒
|
|
112
|
+
|
|
113
|
+
- **大文件或整个目录**:让模型调用 `mcloud_upload`,走本机路径直传,效率最高。
|
|
114
|
+
面板里的上传需要经过浏览器中转一次。
|
|
115
|
+
- **下载整个文件夹**不是压缩包:移动云盘没有打包下载接口,插件会递归遍历后逐个下载。
|
|
116
|
+
- **删除进回收站**,可以在网盘里恢复。
|
|
117
|
+
- **写入类操作会弹审批**,这是 DSH 的安全机制,不是出错。
|
|
118
|
+
- **一次只显示 10 项**,点「加载更多」翻页;看过的目录会被缓存,再次进入很快。
|
|
119
|
+
- 如果长时间不用,登录凭据可能过期,届时重新登录即可。
|
|
120
|
+
|
|
121
|
+
## 配置
|
|
122
|
+
|
|
123
|
+
可选,在 profile 的 `cordis.patch.yml` 里:
|
|
124
|
+
|
|
125
|
+
```yaml
|
|
126
|
+
- id: dsh-mcloud
|
|
127
|
+
name: 'dsh-mcloud'
|
|
128
|
+
config:
|
|
129
|
+
credentialDir: '/custom/credential/dir' # 凭据目录
|
|
130
|
+
enableWrites: false # 设为 false 则关闭写入审批闸(不建议)
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
## 文件结构
|
|
134
|
+
|
|
135
|
+
```
|
|
136
|
+
lib/index.js 宿主端:网盘客户端、工具、HTTP 路由、凭据存储
|
|
137
|
+
lib/login.js 账号密码登录
|
|
138
|
+
lib/scan-login.js 扫码登录
|
|
139
|
+
lib/transfer.js 上传下载的传输层
|
|
140
|
+
lib/client.js 会话页面板(登录页、文件浏览、右键菜单、传输进度)
|
|
141
|
+
cordis.patch.yml bundle patch
|
|
142
|
+
locale/*.json 面板标题与描述
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
## 免责声明
|
|
146
|
+
|
|
147
|
+
**使用本项目即表示你已阅读、理解并同意以下全部内容。如果你不同意,请不要安装或使用。**
|
|
148
|
+
|
|
149
|
+
### 1. 与官方无关
|
|
150
|
+
|
|
151
|
+
本项目是一个**第三方社区项目**,由个人开发者在业余时间编写,**不是中国移动、中国移动云盘(139)
|
|
152
|
+
或其任何关联公司的官方产品**。我们与中国移动:
|
|
153
|
+
|
|
154
|
+
- 没有任何隶属、合作、赞助、背书或授权关系;
|
|
155
|
+
- 没有获得中国移动的任何许可、技术支持或数据访问权限;
|
|
156
|
+
- 不代表中国移动的立场,也不承担其任何义务。
|
|
157
|
+
|
|
158
|
+
「中国移动」「移动云盘」「139」等名称与标识是其各自权利人的商标,本项目仅作**描述性使用**
|
|
159
|
+
(说明本工具连接的是哪个服务),不主张任何商标权利。
|
|
160
|
+
|
|
161
|
+
### 2. 技术实现方式
|
|
162
|
+
|
|
163
|
+
本项目通过**非官方接口**与移动云盘通信。这些接口并非公开 API,而是社区通过观察网页端
|
|
164
|
+
行为整理得出(参考了 [OpenList](https://github.com/OpenListTeam/OpenList) 与
|
|
165
|
+
[cloud_driver_sdk](https://github.com/kong-hen/cloud_driver_sdk) 的开源实现)。
|
|
166
|
+
|
|
167
|
+
这意味着:
|
|
168
|
+
|
|
169
|
+
- 接口**没有任何稳定性承诺**,中国移动可以随时修改、限制或关闭,且无需通知;
|
|
170
|
+
- 接口变更可能导致本插件**完全失效**,且不保证能及时修复;
|
|
171
|
+
- 部分行为(如分页上限、请求频率限制)是观察到的现象,**不保证在所有账号上一致**。
|
|
172
|
+
|
|
173
|
+
### 3. 账号与合规风险
|
|
174
|
+
|
|
175
|
+
**你需要自行确认使用本插件不违反你与中国移动之间的服务协议。**
|
|
176
|
+
|
|
177
|
+
需要注意的现实风险包括但不限于:
|
|
178
|
+
|
|
179
|
+
- 服务协议通常禁止使用非官方客户端或自动化工具访问服务;
|
|
180
|
+
- 高频或异常调用可能触发风控,导致**账号被限制、临时封禁或功能受限**;
|
|
181
|
+
- 中国移动可能随时调整政策,使此类第三方工具不再可用。
|
|
182
|
+
|
|
183
|
+
**因使用本插件导致的任何账号处置、服务中断、数据丢失或协议违约后果,由使用者自行承担。**
|
|
184
|
+
|
|
185
|
+
### 4. 数据与隐私
|
|
186
|
+
|
|
187
|
+
- **你的凭据只存在你自己的机器上**,使用 Windows DPAPI(当前用户级)加密,
|
|
188
|
+
不会上传到任何第三方服务器,本项目的开发者也无法获取。
|
|
189
|
+
- 插件只与 `*.yun.139.com`、`*.10086.cn`(登录)及文件 CDN 通信,
|
|
190
|
+
**不含任何统计、埋点或遥测代码**。
|
|
191
|
+
- 账号在界面上以脱敏形式显示(只露前 3 位与末 2 位)。
|
|
192
|
+
- ⚠️ **但请注意**:本项目对凭据的保管仅做到「本机 DPAPI 加密」这一层。
|
|
193
|
+
如果你的电脑本身被入侵、被他人物理接触、或登录了不受信任的账号环境,
|
|
194
|
+
凭据仍可能被读取。**请自行评估你所在环境的安全水平。**
|
|
195
|
+
|
|
196
|
+
### 5. 数据完整性
|
|
197
|
+
|
|
198
|
+
本插件会**真实地修改你的网盘内容**(上传、移动、重命名、删除)。
|
|
199
|
+
|
|
200
|
+
- 删除操作走的是回收站,通常可以恢复,但**不保证**(例如回收站被清空、或服务端策略变化);
|
|
201
|
+
- 上传、移动等操作可能因网络中断、接口异常而产生**不完整或重复**的文件;
|
|
202
|
+
- **请勿把本插件用于你无法承受丢失的数据。重要数据请自行另行备份。**
|
|
203
|
+
|
|
204
|
+
### 6. 无担保
|
|
205
|
+
|
|
206
|
+
本项目按「**现状**」(AS IS)提供,**不附带任何明示或暗示的担保**,包括但不限于
|
|
207
|
+
适销性、特定用途适用性、以及不侵权的担保。
|
|
208
|
+
|
|
209
|
+
作者**不对任何直接、间接、偶然、特殊、惩罚性或后果性损害承担责任**,
|
|
210
|
+
包括但不限于数据丢失、利润损失、业务中断、账号损失——
|
|
211
|
+
无论这些损害是如何产生的、基于何种责任理论,也无论作者是否已被告知此类损害的可能性。
|
|
212
|
+
|
|
213
|
+
### 7. 关于 Issue 与支持
|
|
214
|
+
|
|
215
|
+
- 本项目**不提供任何形式的商业支持或 SLA**;
|
|
216
|
+
- 因接口变更导致的问题,作者**没有义务**修复;
|
|
217
|
+
- 提交 Issue 时**绝不要附带凭据(Authorization / cookie / token)或截图中的敏感信息**。
|
|
218
|
+
|
|
219
|
+
## 许可
|
|
220
|
+
|
|
221
|
+
本项目以 [MIT 许可](LICENSE) 发布。你可以在许可条款范围内自由使用、修改与分发,
|
|
222
|
+
但**必须保留原版权声明与许可声明**。MIT 许可同样包含上述免责条款。
|
|
223
|
+
|
|
224
|
+
详见 [LICENSE](LICENSE)。
|
package/cordis.patch.yml
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# ============================================================================
|
|
2
|
+
# dsh-mcloud — DSH bundle patch
|
|
3
|
+
# ============================================================================
|
|
4
|
+
# 宿主端(lib/index.js)注册 /api/dsh-mcloud/* 路由与移动云盘工具;
|
|
5
|
+
# 客户端(lib/client.js)由 package.json 的 dsh.client 自动发现,
|
|
6
|
+
# 在会话窗口顶部加一个「移动云盘」标签(conversation.view 槽位,order 30)。
|
|
7
|
+
#
|
|
8
|
+
# 默认凭据文件:~/.dsh-mcloud/authorization.dpapi(Windows DPAPI 加密)
|
|
9
|
+
# 想换位置就在这里写 config:
|
|
10
|
+
# - id: dsh-mcloud
|
|
11
|
+
# name: 'dsh-mcloud'
|
|
12
|
+
# config:
|
|
13
|
+
# credentialDir: '/custom/credential/dir'
|
|
14
|
+
# enableWrites: false
|
|
15
|
+
# ============================================================================
|
|
16
|
+
|
|
17
|
+
- insert:
|
|
18
|
+
- id: dsh-mcloud
|
|
19
|
+
name: 'dsh-mcloud'
|
package/icon.svg
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" width="64" height="64" role="img" aria-label="Mobile Cloud">
|
|
2
|
+
<defs>
|
|
3
|
+
<linearGradient id="mcbg" x1="0" y1="0" x2="1" y2="1">
|
|
4
|
+
<stop offset="0" stop-color="#0086d1"/>
|
|
5
|
+
<stop offset="1" stop-color="#00c2b8"/>
|
|
6
|
+
</linearGradient>
|
|
7
|
+
</defs>
|
|
8
|
+
<rect x="6" y="6" width="52" height="52" rx="14" fill="url(#mcbg)"/>
|
|
9
|
+
<path d="M22.5 42.5h19.4a6.6 6.6 0 0 0 .66-13.16 9.8 9.8 0 0 0-18.86-2.4A7.9 7.9 0 0 0 22.5 42.5Z"
|
|
10
|
+
fill="#fff" opacity="0.95"/>
|
|
11
|
+
<path d="M32 32.2v-8.4M32 23.8l-3.4 3.4M32 23.8l3.4 3.4"
|
|
12
|
+
stroke="#0086d1" stroke-width="2.6" stroke-linecap="round" stroke-linejoin="round" fill="none"/>
|
|
13
|
+
<path d="M27 36.6h10" stroke="#0086d1" stroke-width="2.4" stroke-linecap="round" opacity="0.65"/>
|
|
14
|
+
</svg>
|