dsh-cmtoken-oauth 1.0.1 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.md +37 -29
  2. package/lib/index.js +4 -1
  3. package/package.json +2 -2
package/README.md CHANGED
@@ -1,51 +1,59 @@
1
- # cmtoken 一键认证(DeepSeek Harness 插件)
1
+ # dsh-cmtoken-oauth
2
2
 
3
- 在 **DeepSeek Harness 设置**里一键认证广东移动 MaaS(cmtoken),自动发现模型并接入 DSH:
3
+ DeepSeek Harness(DSH)插件:在 **DSH 设置页**内一键认证广东移动 MaaS(cmtoken),自动发现并接入模型,无需手动填写 API Key 或模型列表。
4
4
 
5
- - 🔑 **一键认证**:标准 OAuth 2.0 Device Grant (RFC 8628) + PKCE (S256),扫码即完成
6
- - 📷 **二维码**:内联 QR 编码器(零依赖)生成 SVG 二维码
7
- - 🔄 **自动发现模型**:认证后拉取可用模型列表写入 provider 配置
8
- - 🗝 **安全存储**:token 存 DSH 凭据服务(OS keyring / env),不落盘明文
9
- - 🔁 **刷新 / 注销**:令牌过期可一键刷新,可随时注销
5
+ ## 功能
10
6
 
11
- 零第三方运行时依赖(仅 Node 内置模块)。
7
+ - **一键认证**:基于 OAuth 2.0 Device Authorization Grant(RFC 8628)+ PKCE (S256),扫码或输入用户码即可完成,无需配置脚本。
8
+ - **内联二维码**:认证流程内置 QR 生成(零依赖),无需额外安装二维码工具。
9
+ - **自动发现模型**:认证成功后自动拉取可用模型列表,写入 `llm-pi-ai` 的 `providers.cmtoken` 配置(merge,不影响其他 provider)。
10
+ - **安全存储**:token 存入 DSH 凭据服务(OS keyring / env),不落盘明文。
11
+ - **自动续期 / 注销**:令牌临近过期自动 refresh;可随时注销清空凭据。
12
12
 
13
- ---
13
+ 零第三方运行时依赖(仅使用 Node 内置模块)。
14
14
 
15
- ## 安装(分享给别人)
15
+ ## 安装
16
+
17
+ 在 DSH profile 目录(默认 `~/.dsh/profiles/web`)执行:
16
18
 
17
19
  ```bash
18
- # DSH profile 目录(默认 ~/.dsh/profiles/web)执行
19
- dsh plugin --profile web add github:你的用户名/dsh-cmtoken-oauth
20
- # 或 npm:
20
+ # npm 安装
21
21
  dsh plugin --profile web add dsh-cmtoken-oauth
22
+
23
+ # 或从 GitHub 仓库安装(若已发布到 GitHub)
24
+ dsh plugin --profile web add github:your-username/dsh-cmtoken-oauth
22
25
  ```
23
26
 
24
- `dsh plugin add` 会自动加入 profile 的 `dsh.profile.bundles`,重启 `dsh web` 生效。
27
+ `dsh plugin add` 会自动:
28
+ 1. 安装依赖;
29
+ 2. 根据 `dsh.bundle.patch` 声明,自动加入 profile 的 `dsh.profile.bundles`;
30
+ 3. 重启 `dsh web` 后生效。
25
31
 
26
32
  ## 使用
27
33
 
28
- 1. 打开 DSH Web → 设置(左下角齿轮)→ 左侧导航点「**cmtoken 认证**」。
29
- 2. 点「开始一键认证」→ 用手机扫描二维码(或打开链接输入用户码)→ 在中国移动 IDaaS 页确认授权。
30
- 3. 自动完成:发现模型 → 写入 `llm-pi-ai.providers.cmtoken` → 存凭据。
31
- 4. 在 DSH 模型选择器里选用 cmtoken 模型即可。
34
+ 1. 打开 DSH Web → 设置(左下角齿轮)→ 左侧导航选择「**cmtoken 认证**」。
35
+ 2. 点击「开始一键认证」→ 用手机扫描二维码(或打开链接输入用户码),在广东移动 IDaaS 页面确认授权。
36
+ 3. 插件自动完成:发现模型 → 写入 `llm-pi-ai.providers.cmtoken` → 保存凭据。
37
+ 4. 在 DSH 的模型选择器中选择 cmtoken 模型即可使用。
32
38
 
33
- ## 技术说明
39
+ ## 数据与配置
34
40
 
35
- - 协议端点(分析自 cmtoken@1.0.7):
36
- - 授权服务器 `https://agentlink.idaas.cmpassport.com/oauth2-service`
37
- - 设备码 `POST /oauth/device/code`、令牌 `POST /oauth/device/token`
38
- - 模型发现 `GET https://maas.gd.chinamobile.com:36007/ai/uifm/open/v1/models`
39
- - 凭据引用:`CMTOKEN_API_KEY` / `CMTOKEN_REFRESH_TOKEN` / `CMTOKEN_EXPIRES`
40
- - 写配置:`llm-pi-ai` 设置 namespace `providers.cmtoken`(merge,不覆盖其他 provider)
41
+ | 项目 | 说明 |
42
+ |---|---|
43
+ | 授权服务器 | `https://agentlink.idaas.cmpassport.com/oauth2-service` |
44
+ | 设备码 / 令牌端点 | `POST /oauth/device/code`、`POST /oauth/device/token` |
45
+ | 模型发现端点 | `GET https://maas.gd.chinamobile.com:36007/ai/uifm/open/v1/models` |
46
+ | 凭据引用 | `CMTOKEN_API_KEY` / `CMTOKEN_REFRESH_TOKEN` / `CMTOKEN_EXPIRES` |
47
+ | 写配置 | `llm-pi-ai` 设置 namespace 的 `providers.cmtoken`(merge,不覆盖其他 provider) |
41
48
 
42
49
  ## 开发
43
50
 
44
- ```bash
45
- lib/index.js # host:OAuth 核心(PKCE/设备码/轮询/刷新/模型发现)+ RPC
46
- lib/client.js # web:设置页「cmtoken 认证」向导(二维码+轮询+完成)
47
- lib/qr-core.cjs # 内联 QR 编码器(提取自 qrcode-terminal,输出 SVG)
51
+ ```text
52
+ lib/index.js host:OAuth 核心(PKCE / 设备码 / 轮询 / 刷新 / 模型发现)+ RPC
53
+ lib/client.js web:设置页「cmtoken 认证」向导(二维码 + 轮询 + 完成)
54
+ lib/qr-core.cjs 内联 QR 编码器(输出 SVG)
48
55
  ```
49
56
 
50
57
  ## License
58
+
51
59
  MIT
package/lib/index.js CHANGED
@@ -339,10 +339,13 @@ export function apply(ctx, cfg = {}) {
339
339
  ctx.effect(() => {
340
340
  removeRpc = registerRpc(ctx);
341
341
  stopTimer = startAutoRefresh(ctx);
342
+ // 启动时立即补刷一次:若停机期间 access 过期、但 refresh 仍有效,马上恢复,
343
+ // 不必等 60 秒定时器;失败只记日志,不影响启动。
344
+ void autoRefresh(ctx).catch((e) => ctx.logger?.warn?.('[cmtoken-oauth] 启动补刷失败: ' + String(e?.message || e)));
342
345
  return () => {
343
346
  removeRpc();
344
347
  stopTimer();
345
348
  };
346
349
  }, 'cmtoken-oauth: host service');
347
- ctx.logger?.info?.('[cmtoken-oauth] host 服务已启动(自动刷新已开启:每 1 分钟检查 + status 查询按需触发,剩余 <1 小时或已过期即刷新)');
350
+ ctx.logger?.info?.('[cmtoken-oauth] host 服务已启动(自动刷新已开启:启动即补刷 + 每 1 分钟检查 + status 查询按需触发,剩余 <1 小时或已过期即刷新)');
348
351
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "dsh-cmtoken-oauth",
3
- "version": "1.0.1",
4
- "description": "cmtoken 一键认证 通过 OAuth 2.0 Device Grant (RFC 8628) + PKCE 一键认证广东移动 MaaS(cmtoken),自动发现模型并写入 DSH 的 llm-pi-ai provider 配置。零第三方运行时依赖。",
3
+ "version": "1.0.3",
4
+ "description": "DeepSeek Harness 插件:在 DSH 设置页一键完成广东移动 MaaS(cmtoken)的 OAuth 2.0 Device Grant + PKCE 认证,自动发现模型并写入 llm-pi-ai provider 配置,凭据安全保存并自动续期。零第三方运行时依赖。",
5
5
  "type": "module",
6
6
  "main": "./lib/index.js",
7
7
  "types": "./lib/types/index.d.ts",