← Back to home@MuFeng262

dsh-thinking-slider

Codex-style reasoning-effort slider for the DeepSeek Harness composer

Stars
0
Language
JavaScript
Created
Sep 30, 2026
Updated
Oct 7, 2026
GitHub repo

Introduction

dsh-thinking-slider

把 DeepSeek Harness(DSH)composer 里的模型选择器换成「模型 + 推理强度」: 平时显示 模型名 · 等级,点开是一张卡片 —— 上面是模型列表入口,下面是带渐变与粒子的强度滑块。

An opinionated model + reasoning-effort picker for the DSH composer, with a gradient particle rail.

四档对比

它做什么

  • 关闭态:正常的一行文字 deepseek-flash · Max,不占地方
  • 点开:卡片里大字显示当前等级,模型名 › 可切模型,下面一条厚滑块
  • 拖滑块:即时切换推理强度;视觉随等级变化(见下方三种模式)
  • 键盘:←/→、Home/End 切换,Esc 关闭
  • 降级:模型没有推理等级时只显示模型名,不出现滑块(不会给你一个假的控件)

等级不写死在插件里 —— 它读 DSH 上报的 model.reasoning.efforts, 所以任何在配置里声明了 reasoningEfforts 的供应商路由都会自动出现在滑块上。

三种模式

在 设置 → 通用 → 推理滑块 里切换。模式存在浏览器本地(localStorage), 切换即时生效,不需要重启。

模式效果
官方插件完全不注册座位,交还 DSH 官方的模型选择器原样
粒子轨道渐变 + 内部漂浮粒子,等级越高越密
能量充能深色轨道上的点阵充能场,前沿从左扫入旋钮,最高档持续燃烧

设置行独立于座位注册,所以即使选了「官方」也随时能切回来 —— 不会把自己锁在外面。

能量模式是 canvas 2D 的逐格衰减模拟(不是 WebGL,也没有引入依赖): 每格有自己的随机相位与速度,前沿扫过时依次点亮,靠近旋钮的格子落定成 「热核 + 曳光」,最高档则保持长记忆让整条轨道持续燃烧;中间档落定后 主动停掉渲染循环,静止不烧 CPU。

浅色 / 深色是两套分开的配色:深色下格子越热越漂向白色(靠近旋钮白热), 浅色下保持本色饱和度、靠对比度表达等级 —— 浅色轨道本身已接近白色, 再往白漂就等于把格子从视野里抹掉。配色跟随 data-ds-dark-theme 实时切换, 不用重开卡片。

深色浅色
能量充能 · 深色能量充能 · 浅色

让没有等级的模型真的能选等级

先说原因:等级要能真正生效,必须由 reasoningEfforts 给每个模型声明 「等级 → 发给网关的原始值」的映射。而 DSH 的「设置 → 模型」页面没有这个字段, 所以任何通过 GUI 添加的代理商,模型都永远不会有等级。

注意这不是"显示问题":DSH 会直接拒绝一个没有映射的等级( UNSUPPORTED_REASONING_EFFORT,不是静默忽略)。它的注释写明了设计意图 —— 它宁可不报告任何等级,也不愿意提供一个"做不到自己所说事情"的控件。 (本插件早期版本试图在界面上补四档,结果每次点选都报错,已回退。)

插件补上了这个缺口:设置 → 通用 → 模型推理等级 会列出「有模型没声明等级的 代理商」,逐个点「补四档」即可。

  • 写入的是 llm-pi-ai 的真实配置(与「设置 → 模型」同一份),所以等级真的生效
  • 适配器每个请求都重读配置,不需要重启
  • 只补没有声明的模型;已经声明过的原样保留
  • 逐代理商确认,不做全自动:若某个网关不接受 reasoning_effort,会让那个代理商 的请求全部失败。none / low / high / max 是实测可用的拼写,但换网关要先试一个模型

要求

  • DSH Desktop 或 dsh web,内核 0.2.x(开发时验证于 0.2.0-rc.1 / 0.2.0-rc.2)
  • 无第三方依赖:只用 DSH 自带的 react / react/jsx-runtime / react-dom

插件没有声明 peerDependencies,所以不会被 DSH 的版本门禁整包跳过; 代价是版本兼容由你自己判断,升级 DSH 后如果 UI 槽位变了可能失效。

安装

dsh plugin --profile desktop add github:MuFeng262/dsh-thinking-slider

装完完全退出 DSH Desktop 再打开(客户端插件在启动时组合加载)。

如果你的 profile 名不是 desktop,把 --profile desktop 换成实际名字。 插件管理器里添加同一条 github:MuFeng262/dsh-thinking-slider 也可以。

手动安装(命令不可用时)
  1. 克隆到插件源码目录:

    git clone https://github.com/MuFeng262/dsh-thinking-slider %USERPROFILE%\.dsh\plugins-src\dsh-thinking-slider
    
  2. 把 node_modules\dsh-thinking-slider 做成指向它的目录联结(junction):

    New-Item -ItemType Junction `
      -Path "$env:USERPROFILE\.dsh\profiles\desktop\node_modules\dsh-thinking-slider" `
      -Target "$env:USERPROFILE\.dsh\plugins-src\dsh-thinking-slider"
    
  3. 在 %USERPROFILE%\.dsh\profiles\desktop\package.json 里加两处:

    {
      "dependencies": {
        "dsh-thinking-slider": "file:../../plugins-src/dsh-thinking-slider"
      },
      "dsh": {
        "profile": {
          "bundles": [
            "dsh-thinking-slider"        // ← 加进这个数组
          ]
        }
      }
    }
    
  4. 重启 DSH Desktop。

让自定义模型也有推理等级

档位不在插件里。 插件是通用的,但 Off / Low / High / Max 来自你自己的 profile 配置。 DSH 的 Models 设置页刻意不提供这个字段,只能手写进 profile 的 cordis.patch.yml:

- id: llm-pi-ai
  name: "@deepseek-ai/dsh-llm-pi-ai"
  config:
    providers:
      your-gateway:
        displayName: 你的中转商
        apiKeyEnv: YOUR_API_KEY
        api: openai-completions
        baseURL: https://your-gateway.example/v1
        models:
          - id: some-model
            name: some-model
            reasoningEfforts:      # ← 关键:每个模型单独写
              off: none
              low: low
              high: high
              max: max

几点注意:

  • 右边那些值是原样发到网关的拼写,不是 DSH 的枚举。不同中转商认的词不一样, 填错可能 400 —— 建议先只给一个模型加上试。
  • 键名(off / minimal / low / medium / high / xhigh / max)决定了滑块上有几档。
  • 省略 reasoningEfforts 时,DSH 只会按模型 id 去查内置目录; 自定义模型名查不到 → 该模型就没有等级。
  • reasoningEfforts: false 可以显式声明为「非推理模型」。

卸载

dsh plugin --profile desktop remove dsh-thinking-slider

手动装的,要删三处:node_modules\dsh-thinking-slider、 package.json 的 dependencies 条目、以及 dsh.profile.bundles 里的同名项。 只删 dependencies 不够 —— bundles 里的条目不清掉,插件开机仍会被加载。

开发

git clone https://github.com/MuFeng262/dsh-thinking-slider
cd dsh-thinking-slider
node test/smoke.mjs      # 66 项行为测试,零依赖,不需要 DSH

test/smoke.mjs 自带一个迷你 React 运行时(hooks 槽位、类组件与错误边界、 跨渲染的 DOM 节点身份、真实执行的 effect 与 cleanup),所以 「节点重挂后动画有没有重新绑定」这类问题是可以断言的,不需要开浏览器。

许可

MIT