dsh-model-capability-sync 0.0.0-stage → 0.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 +21 -0
- package/README.md +114 -3
- package/cordis.patch.yml +8 -0
- package/lib/client.js +746 -0
- package/lib/client.js.map +7 -0
- package/lib/index.js +332 -0
- package/lib/index.js.map +7 -0
- package/package.json +88 -4
- package/scripts/build-client.mjs +42 -0
- package/scripts/build-host.mjs +22 -0
- package/scripts/smoke.mjs +56 -0
- package/scripts/verify-package.mjs +64 -0
- package/scripts/warm-cache.mjs +15 -0
- package/src/catalog.ts +204 -0
- package/src/client/SyncSection.tsx +650 -0
- package/src/client/apply.ts +223 -0
- package/src/client/index.ts +6 -0
- package/src/client/locale.ts +124 -0
- package/src/index.ts +148 -0
- package/src/mapping.ts +71 -0
- package/src/match.ts +130 -0
- package/src/sort.ts +62 -0
- package/src/types.ts +120 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 dsh-model-capability-sync 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.
|
package/README.md
CHANGED
|
@@ -1,3 +1,114 @@
|
|
|
1
|
-
#
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
# dsh-model-capability-sync
|
|
2
|
+
|
|
3
|
+
给已经配好的 DeepSeek Harness LLM 供应商**补全模型能力参数**的插件。
|
|
4
|
+
|
|
5
|
+
它只做一件事:拿你已经配置的模型 id 去 [models.dev](https://models.dev) 查事实,把
|
|
6
|
+
`上下文窗口 / 输出上限 / 是否支持图片 / 推理档位` 写回官方适配器的配置里。
|
|
7
|
+
**它不发任何推理请求,也不注册 LLM 路由**——调用仍然由官方插件负责。
|
|
8
|
+
|
|
9
|
+
## 为什么需要它
|
|
10
|
+
|
|
11
|
+
中转网关(NewAPI 之类)的 `/models` 只返回模型 id,不告诉你上下文多大、能不能吃图片。
|
|
12
|
+
官方适配器把没声明的能力按"纯文本"处理,于是模型明明支持图片,界面上却提示不支持。
|
|
13
|
+
|
|
14
|
+
本插件把公开目录里的能力事实补进配置,让官方适配器能正确声明能力。
|
|
15
|
+
|
|
16
|
+
## 工作方式
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
设置页(浏览器) 宿主
|
|
20
|
+
┌──────────────────────┐ RPC ┌──────────────────────────┐
|
|
21
|
+
│ 读 llm-pi-ai 的配置 │ ───────► │ 下载 models.dev(带缓存) │
|
|
22
|
+
│ 列出模型 / 勾选 │ ◄─────── │ 匹配 id → 能力字段 │
|
|
23
|
+
│ 预览将写入的字段 │ └──────────────────────────┘
|
|
24
|
+
│ 应用 → settings.mutate│
|
|
25
|
+
└──────────────────────┘
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
- 写入走**官方 settings 服务**(`remote.settings.mutate`),落点是 profile 的
|
|
29
|
+
`cordis.patch.yml`,热生效,不用重启。
|
|
30
|
+
- 默认**只填空白字段**:你手填过的值不会被改写,除非勾选「覆盖已有值」。
|
|
31
|
+
空白包括 `undefined`、`''`、`[]`、`{}` —— 配置 schema 会给没填的字段补默认值
|
|
32
|
+
(例如没声明 `input` 会读成 `[]`),这些默认值不算「你填过」。
|
|
33
|
+
- 表里有两列图片:**「图片」= 目录声明将写入的值,「当前生效」= 真正接管这条路由的
|
|
34
|
+
适配器此刻上报的值**(也就是聊天请求看到的)。两列不一致,说明同一个 provider
|
|
35
|
+
路由被另一个插件抢占,写这份配置不会生效。
|
|
36
|
+
- **每个单元格显示 `旧值 → 新值`**,顶部汇总"将修改 N 行 · M 个字段";没有变化的行
|
|
37
|
+
不可勾选,「全选」只作用于可见且有变化的行。支持按模型 ID / 目录 ID 搜索,以及
|
|
38
|
+
「只看有变化的」筛选。
|
|
39
|
+
- **自动排序**:写入时按「前缀分组 + 组内名称」排序。有前缀的(`qoder-gj/xxx`)按
|
|
40
|
+
前缀字母序分组,组内按名称;没有前缀的直接按名称。比较忽略大小写,结果稳定。
|
|
41
|
+
- 匹配规则由严到松:别名 → 精确 → 忽略大小写 → 去供应商前缀 → 去变体后缀
|
|
42
|
+
(`-high/-low/-medium/-thinking/-preview`)。优先选**第一方厂商**的目录条目,
|
|
43
|
+
避免被聚合站的错误数字带偏。
|
|
44
|
+
- 目录下载失败会重试 3 次,仍失败则回落到本机缓存
|
|
45
|
+
`~/.dsh/model-capability-sync/catalog.json`,页面标注「正在使用本机缓存」。
|
|
46
|
+
手动预热:`node --experimental-strip-types scripts/warm-cache.mjs`。
|
|
47
|
+
宿主进程连不上 models.dev 时页面依然可用。
|
|
48
|
+
|
|
49
|
+
## 安装
|
|
50
|
+
|
|
51
|
+
从 npm 安装(发布后):
|
|
52
|
+
|
|
53
|
+
```sh
|
|
54
|
+
dsh plugin --profile web add dsh-model-capability-sync
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
**DSH 桌面版不要用命令行装**:桌面应用独占自己的 profile,CLI 改动不生效,
|
|
58
|
+
请在应用内 **设置 → 插件** 里安装。
|
|
59
|
+
|
|
60
|
+
从本地源码安装(开发用):
|
|
61
|
+
|
|
62
|
+
```sh
|
|
63
|
+
dsh plugin --profile desktop add "link:D:/code/dsh-model-capability-sync"
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
装完重启 dsh,设置页会出现「模型能力同步」。
|
|
67
|
+
|
|
68
|
+
要求:`dsh` 运行时 `^0.2.1-rc.2`(写在 `package.json` 的 `engines.dsh`,宿主会据此做兼容检查)。
|
|
69
|
+
|
|
70
|
+
## 目录结构
|
|
71
|
+
|
|
72
|
+
| 路径 | 用途 |
|
|
73
|
+
| --- | --- |
|
|
74
|
+
| `src/index.ts` | 宿主半:RPC 通道 `preview`(目录能力)+ `live`(当前生效) |
|
|
75
|
+
| `src/catalog.ts` | models.dev 下载 / 缓存(内存 + 本机文件)/ 索引 |
|
|
76
|
+
| `src/match.ts` | 网关 id → 目录条目的匹配规则 |
|
|
77
|
+
| `src/sort.ts` | 模型排序(前缀分组 + 名称) |
|
|
78
|
+
| `src/mapping.ts` | 目录条目 → 能力字段(纯函数) |
|
|
79
|
+
| `src/client/` | 设置页(React 组件 + 文案) |
|
|
80
|
+
| `scripts/` | 构建脚本 + 冒烟脚本 |
|
|
81
|
+
| `docs/` | 需求、技术选型、设计规范、开发计划 |
|
|
82
|
+
|
|
83
|
+
## 开发
|
|
84
|
+
|
|
85
|
+
```sh
|
|
86
|
+
npm install
|
|
87
|
+
npm run typecheck # 两端类型检查
|
|
88
|
+
npm run build # lib/index.js + lib/client.js
|
|
89
|
+
node --experimental-strip-types scripts/smoke.mjs # 真实目录冒烟(需联网)
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## 里程碑
|
|
93
|
+
|
|
94
|
+
| 阶段 | 内容 | 状态 |
|
|
95
|
+
| --- | --- | --- |
|
|
96
|
+
| P0 | 骨架、构建、文档 | ✅ |
|
|
97
|
+
| P1 | 目录拉取、匹配、映射、只读预览 | ✅ |
|
|
98
|
+
| P2 | 预览表 + 写入设置 | ✅ |
|
|
99
|
+
| P2.5 | 差异预览、筛选、排序、写入位置文案 | ✅ |
|
|
100
|
+
| P3 | 别名表、手动覆盖 | ⬜ |
|
|
101
|
+
| P4 | 迁移旧适配器的模型清单并停用它 | ⬜ |
|
|
102
|
+
| P5 | 打包发布(npm + 社区目录) | 🔄 仓库已就绪,待发布 |
|
|
103
|
+
|
|
104
|
+
发版步骤见仓库内的 `docs/publishing.md`。
|
|
105
|
+
|
|
106
|
+
## 已知边界
|
|
107
|
+
|
|
108
|
+
- models.dev 描述的是**官方模型**能力;中转网关背后实际路由到哪个上游,目录说了不算。
|
|
109
|
+
本插件给的是"最可能的答案",最终仍建议用一张真图验证。
|
|
110
|
+
- 未在目录中的模型(新模型、厂商自造别名)保持原样,可在 P3 的别名表里手工指定。
|
|
111
|
+
|
|
112
|
+
## 许可证
|
|
113
|
+
|
|
114
|
+
[MIT](LICENSE)
|