在原位置将 DSH 原生推理等级选项替换为可拖动的 Off、Low、High、Max 滑块,并保留官方模型选择流程。
安装
# Release 预构建包
dsh plugin --profile web add "https://github.com/SmailPang/dsh-effort-slider/releases/download/v0.1.1/dsh-effort-slider-0.1.1.tgz"
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:SmailPang/dsh-effort-slider
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
给 DeepSeek Harness Web 界面就地替换思考强度控件:DSH 原生在「模型座位 → 弹层 →
推理等级/Effort」面板里用一组单选行(Default / Off / Low / High / Max)选择思考强度;
本插件监视该面板,面板一打开就把原生单选行替换成参考 Claude Effort 卡片 /
claude-range-slider 项目的美观滑块:
- DSH 原生菜单字号、间距、圆角和主题变量 + 状态字动画 + 更快/更强发光轨道;
- 拖到最右 Max,轨道内燃起 DeepSeek 蓝 WebGL 火焰(参考项目 4-pass 火焰模拟的 vanilla 移植;无 WebGL 时自动回退为 CSS 辉光);
- 选择仍走 DSH 官方链路:点击隐藏的原生档位行,执行会话级
selectModel、默认保存 和座位标签更新,但只抑制chooseEffort()成功结算时的强制关窗;保存前后面板保持 原位,不闪烁、不回弹。 - 自动适配 DSH 深色/浅色主题,并提供「返回」按钮回到模型与思考强度主菜单。
档位含义与官方一致(
off | low | high | max)。原生的 Default 档会被标出 「Default · 跟随模型」,并提供「恢复默认」按钮。
效果预览
High 档

Max 档

它做了什么
| 层 | 实现 |
|---|---|
| 宿主插件(Node) | lib/index.js:把 web/widget.js 注入界面 HTML;提供 /dsh-effort-slider/state.json(档位元数据) |
| 浏览器端 | web/widget.js:监视「模型座位」弹层,就地替换「推理等级」面板内容(零依赖、无打包) |
| 写入语义 | 不另发请求 —— 点击原生档位行,保留会话级 selectModel、默认保存和事件投影,只跳过成功后的 close 回调 |
| 兜底 | 面板结构识别不到、无推理能力模型、或 WebGL 不可用时,原生 UI 原样保留,绝不破坏界面 |
安装
需要已安装 DSH(dsh 命令可用)。推荐安装已发布的预构建包:
dsh plugin --profile web add https://github.com/SmailPang/dsh-effort-slider/releases/download/v0.1.1/dsh-effort-slider-0.1.1.tgz
该命令会把插件安装进 profile 的 node_modules,并把它追加到 dsh.profile.bundles
(插件自带 cordis.patch.yml,无需手改 profile)。
也可以直接从 GitHub 源码安装:
dsh plugin --profile web add github:SmailPang/dsh-effort-slider
如果出现
ERR_PNPM_MINIMUM_RELEASE_AGE_VIOLATION,请查看错误中列出的包名。 这是当前 DSH profile 的供应链策略拒绝了发布时间过近的依赖,并不表示本插件损坏。 等这些依赖超过策略等待时间后重试即可;不要为了安装本插件随意放宽全局供应链策略。
可选校验:
dsh --profile web --dump-config(只组合配置树,不启动服务),应能看到effort-slider行。
最后重启 dsh web(Ctrl+C 后重新 dsh web),刷新浏览器后生效:
打开任意会话 → 点击输入框上方的「模型座位」→ 点「推理等级/Effort」,即可看到被替换后的滑块。
本插件不修改 DSH 本体代码,无需重新构建前端。
使用
- 点击输入区模型座位(显示当前模型与档位)→ 弹层里选择「推理等级 / Effort」;
- 原生的单选行会被我们的滑块卡片替代,显示当前档位(若为 Default 会标注「跟随模型」);
- 拖动滑块到目标档位 → 松手即应用(本会话生效,并同步为默认),面板保持打开;
- 想回到跟随模型默认,点卡片右下「恢复默认」;
- 点「返回」可回到模型与思考强度主菜单;拖到最右 Max 可以看到轨道里的蓝色火焰。
卸载
dsh plugin --profile web remove dsh-effort-slider
或删除 package.json 依赖与 dsh.profile.bundles 里的条目、移除 cordis.patch.yml
中的 insert 行,然后重启 dsh web。
开发 / 测试
node --check lib\index.js
node --check web\widget.js
node test\smoke.mjs # 宿主逻辑冒烟测试(stub 掉 cordis 服务)
node test\detect-sanity.mjs # 推理等级面板识别逻辑的独立校验
实现细节
- 识别:用
MutationObserver+ 兜底轮询监听弹层;只有出现role=menuitemradio且含 ≥2 个标准档位行(Off/Low/High/Max),或「Default 行 + 位于 composer 卡片内」 的菜单才被当作推理等级面板,避免误伤其它菜单。 - 替换:隐藏原生单选行,在弹层同一位置挂入滑块卡片;React 关闭/重开弹层时自动 清理/重建,不残留。
- 顺序:标准档位按
Off → Low → High → Max的语义顺序排列,不依赖供应商或 模型目录返回的 DOM 顺序,保证滑块始终是从 Faster 到 Smarter。 - 提交:触发原生选项的 React
onClick,官方链路完整执行;仅在这一次同步点击期间 跳过settleSelection(true)里的close。因此「下一轮生效」「保存默认」和 「座位标签/事件投影」仍与原生一致,滑块面板则保持打开。 - 视觉:移植自
claude-range-slider(状态字翻转、刻度圆点、WebGL 火焰 4-pass 的 vanilla 版,配色改为 DeepSeek 蓝);引擎 180 帧空闲自动停止、ResizeObserver防抖 重建 FBO、webglcontextrestored自动恢复。 - 所有服务访问与 DOM 探测均 try/catch + 静默降级,插件不阻塞、不破坏 Web 界面。
兼容性
- DSH
>= 0.1.0-rc.5(已在 0.1.2-rc.1 与 0.1.5-rc.2 前端验证)。 - Node >= 20(宿主侧);浏览器需支持 WebGL2(无则自动回退 CSS 辉光)。
链接
同类插件
zhu1090093659/dsh-web#packages/dsh-task-board★ 7488
侧边栏多列任务看板:卡片交给真实 DSH 智能体会话执行,支持 cron 定时(Host 侧到点执行,关浏览器也生效)。
zhu1090093659/dsh-web#packages/dsh-web-all★ 7488
DSH Web UI 插件与皮肤合集:任务看板、git 图、右侧面板、远程移动端 UI、桌宠、实时 token 统计与皮肤中心。
omdsh-dev/DSH-better-sidebar★ 3555
侧边栏完整工作台:内置文件渲染编辑、终端、Git 与子代理,支持三方插件注册新 Tab。
ccch1mneyyy/dsh-TUI★ 2994
Claude Code 风格全屏终端 UI:像素鲸鱼顶栏、实时工作状态行、思考流式展开。
MeteorNOX/DeepSeek-Balance-Whale-Widget★ 2274
右下角常驻的小鲸鱼余额挂件:显示余额、今日已用、每轮对话消耗与随机台词,带音效与设置菜单。
Devin-AXIS/deepseek-design#deepseek-idesign★ 1072
可视化设计工作室,支持网站、App 原型、海报、信息卡、报告和杂志的模板创建、元素编辑、选区级 AI 草稿衔接与导出。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。