[English](README.md) | [简体中文](README.zh.md)
# dsh-models
dsh-models 总览:三分区触发——推理层级、子代理路由、主模型选择
## 一句话 dsh 网页端的模型菜单——模型、思考强度、子代理用什么模型,都在输入框的模型座上点一下搞定。 ## 这是什么 [ttmouse/dsh-model-picker](https://github.com/ttmouse/dsh-model-picker) (v1.18.0 基线)的更名维护分支。上游把输入框模型座换成了搜索优先的弹窗;本分支保留这一点,并补上多模型日常使用的几个部件。 **三区触发按钮**,三个 concerns 三个弹窗: | 区域 | 点击 | 弹窗内容 | |------|------|----------| | **左**(模型名) | 打开模型选择器 | 搜索框(自动聚焦)+供应商列+模型列表(含价格徽章与 `dim` 发现行) | | **中**(子代理图标) | 打开子代理选择器 | 按会话覆盖子代理(depth ≥ 1)用的模型 | | **右**(强度) | 打开强度选择器 | 可用的 reasoning-effort 档位 | 另有设置页「模型选择」卡片:发现总开关、发现模型的忽略/恢复、隐藏模型管理——与选择器实时联动。 ## 来源说明 上游:[ttmouse/dsh-model-picker](https://github.com/ttmouse/dsh-model-picker) (MIT)。本仓把包改名为 `dsh-models` 并维护增强构建(子代理路由、`dim` 桥、设置卡片、中英双语、自定义背景色、主题可读性修复)。HTTP 路由 (`/api/model-picker/…`)与 `dsh.modelPicker.*` 存储键保留上游命名,旧偏好 (收藏、隐藏、子代理路由)无缝迁移。 ## 安装 需要 harness ≥ 0.2.0-rc.1(在 0.2.0-rc.2 上实测,0.2.1-alpha.3 在跑)。 ```sh curl -fsSL https://raw.githubusercontent.com/taxueseek/dsh-models/main/install.sh | sh # 重启 dsh web ``` 等价手工操作: ```sh dsh plugin --profile web add git+https://github.com/taxueseek/dsh-models.git # 重启 dsh web ``` > npm 上的 `dsh-models` 是无关的第三方占位包——只许用上面的脚本或 git > 命令安装。 ## 兼容性 | dsh-models | Harness | 说明 | | --- | --- | --- | | 0.1.2 | **0.2.1-alpha.3(当前,在跑)** | 新增测试与冷启动改造;座位与路由面不变。 | | 0.1.0 | 0.2.0-rc.2(实测) | 与线上在跑的增强构建代码一致;客户端按官方版本座位表解析。 | 需要 Node.js ≥ 22.19。 在 0.2.0-rc.2 上实际验证过(更名前构建,代码一致): - **座位有效**:`conversation.input.model`、`web-ui.plugin.item`;用到的图标 都在官方浏览器名册里。 - **避开已死座位**:不使用 alpha.2 已移除的 `settings.plugin.item`;设置卡片 以无 `locale` 字段的平铺 section 渲染(带 `locale` 的条目会整卡隐形)。 - **服务端设置通道当前不可用**(`scope.set()` 恒 false),卡片偏好走 `localStorage`(`dsh.modelPicker.*` +跨标签页事件),不走 `webUiSettings`。 ## 配置 宿主侧暂无配置项——bundle 条目不带 `config` 段。用户偏好(发现开关、 忽略/发现模型、隐藏模型、背景色、按会话子代理路由)都在设置页卡片和选择 器里管理。 ## `dim` 桥(可选) 检测到 `dim` CLI(`PATH` 里的 `dim` 或 `~/.local/bin/dim`)时,宿主把它的 目录并入模型事实:价格徽章、maxOut/发布时间,以及 dsh 目录没有而 `dim` 有的新模型发现行(每家最多 30 个,按最新排序)。没有 `dim` 时选择器与上游 行为一致——桥接自动降级为纯目录事实。 ## 测试与性能 - **`npm test`** — 两套纯 Node 测试:`scripts/host-route.mjs` 驱动真实路由 处理器(事实缓存、子代理路由、错误守卫),`scripts/interaction.mjs` 在 jsdom 里渲染选择器并驱动打开/搜索/收藏/强度,共 44 项断言。宿主 peer 依赖缺失时自动 SKIP,任何机器上都是绿的。 - **冷启动不阻塞** — `/api/model-picker/models` 冷缓存时先回快 503,目录 重建放后台跑(实测:首次响应 ~3ms,~3 秒内暖到 200);客户端对 503 退避 重试,事实一落地价格徽章就出现。暖缓存走 stale-while-revalidate。 - **渲染路径优化** — 稳定回调 + 派生列表 memo 化:方向键一次从重渲全部 ~306 行降到 2 行;按键过滤列表从 ~1124 行降到 ~258 行。细节见 [CHANGELOG](CHANGELOG.md)。