dsh-status-rotator:把 DSH 回合状态行换成可配置的趣味文案

前言

用 DeepSeek Harness(dsh)跑 Web 界面时,回合进行中底部会固定显示 Deep diving... 这类状态文字。对长期盯着界面的人来说,这行字功能上够用,但几乎不可定制,也读不出当前阶段或会话上下文。

下面介绍 dsh-status-rotator。它只替换 TurnStatus 那一行文案,不动 15 秒后才出现的运行时长时钟,也不碰聊天记录里的代码块或其它 aria-live 区域。文案、渐变、标签页标题、悬浮 Pill 和预设调度,都可以从 JSON 或 DSH 设置页改,改完通常不用重启进程。

这是什么

dsh-status-rotator 是 maintainer 01Virex 维护的 DSH Web 插件,在 SkillHub 社区目录归类为「趣味换装」。GitHub 仓库当前约 52 stars。

一句话定位:把 dsh Web UI 回合底部的 Deep diving... 状态标签,替换成按阶段切换、可打字机动画、可炫彩渐变的自定义短语,并支持模板占位符实时取值。

许可证为 MIT。插件随 dsh 进程运行,安装前建议自行查看源码与许可证。

核心功能

经过上面的定位,下面按能力拆开说明。以下均来自项目 README 与 package.json 声明。

阶段感知文案

文案按回合进展分三组,阶段切换时立即换句,不用等轮换间隔:

阶段 触发条件 默认时长
thinking 回合刚启动,TurnStatus 里还没有时钟 0 ~ 15s
running 时钟出现,未超过 longAfterMs 15s ~ 60s
long 时钟读数超过 longAfterMs ≥ 60s

某阶段缺文案时会自动回退(runningthinking → 任意非空组)。

打字机、渐变与轮换

  • 文案可逐字打出,typeSpeedMs 控制速度,设为 0 关闭打字机。
  • 默认启用流动炫彩渐变,仅作用于状态文字,不影响时钟;可在配置里关闭或改颜色序列与 speed
  • intervalMs(默认 10000 ms)控制同一阶段内多条文案的轮换间隔。

模板占位符与实时引擎

任意文案、标题模板、Pill 模板都支持占位符。随时间变化的字段(如 {elapsed}{tps})按 liveTickMs(默认 1000 ms)刷新;设为 0 则只在轮换时更新。

常用占位符包括:

占位符 含义
{elapsed} 当前回合已运行时长,风格与界面时钟一致
{phase} / {phaseLabel} 阶段 id 或本地化短标签
{model} / {provider} 当前会话模型与供应商路由
{tps} 流式 token/秒 估算
{pending} / {tools} / {running} 待审批数、运行中工具名、运行状态
{locale} / {date} / {time} 界面语言、本地日期与时间

实时值来自订阅 dsh 会话快照与模型 RPC 的状态引擎;会话 API 不可用时相关字段显示 ,插件其余功能继续工作。

示例:

"phrases": {
  "zh": {
    "thinking": ["正在写代码 {elapsed}…", "正在{phaseLabel}中 ({elapsed})…"]
  }
}

标签页标题、悬浮 Pill 与预设

  • 浏览器标签页标题:可选在回合进行中轮换 document.title,空闲时恢复原标题或显示 idleTemplate
  • 悬浮状态 Pill:注册在官方 shell.overlay 座位,默认模板形如 {model} · {phaseLabel} · {elapsed} · ⚡{tps} tok/s,位置与透明度可配。
  • 预设与调度:多套命名词库可带独立 config / phrases;设置页可手动切换,也可按星期与时段(schedule)自动切换。

设置页、热更新与多语言

DSH「设置」里会多出 状态文案 页:中英 × 三阶段词库可视化编辑,基本参数、渐变、Pill、预设与调度规则也在同一页。保存后通过 node half 注册的 HTTP 路由写回配置,已打开页面无需刷新即可热应用。

文案跟随「设置 → 语言」在中英文间切换,未知语言回退中文。插件通过 role="status"aria-live="polite" 精确定位 TurnStatus,避免误改聊天内容。

安装与启用

推荐用官方一行命令从 npm 安装最新版:

dsh plugin --profile web add dsh-status-rotator

package.json 里声明了 dsh.bundle.patch,安装后会被 dsh 自动识别,无需额外标志。首次安装后需要重启一次 dsh web,浏览器建议 Ctrl+F5 硬刷新。

也可从本地克隆目录或 Release 的 .tgz 包安装,语法相同:

dsh plugin --profile web add ./dsh-status-rotator
dsh plugin --profile web add /path/to/dsh-status-rotator-<版本>.tgz

手动安装时,需把项目放到 profile 的 node_modules 下,在 cordis.patch.yml 插入插件条目,运行 node gen-config.cjs 初始化 config.json,再重启 dsh web

卸载时从 cordis.patch.yml 删除 status-rotator 条目并重启即可。

典型用法

1. 在设置页改词库(上手最快)

打开 DSH 左下角「设置」→ 状态文案,在中文 / English 标签下分别编辑 thinking / running / long 三个文本框(每行一句),调整轮换间隔、打字机速度、渐变与 Pill,点「保存词库」。保存后当前页面立即生效。

2. 直接编辑 config.json

首次可用 node gen-config.cjsconfig.example.json 生成本地 config.json。顶层结构示意:

{
  "config": {
    "intervalMs": 10000,
    "typeSpeedMs": 30,
    "longAfterMs": 60000,
    "reloadIntervalMs": 15000,
    "liveTickMs": 1000,
    "gradient": { "enabled": true, "speed": 4 },
    "title": { "enabled": false },
    "pill": {
      "enabled": true,
      "template": "{model} · {phaseLabel} · {elapsed} · ⚡{tps} tok/s",
      "position": "right-bottom"
    }
  },
  "phrases": {
    "zh": { "thinking": ["…"], "running": ["…"], "long": ["…"] },
    "en": { "thinking": ["…"], "running": ["…"], "long": ["…"] }
  }
}

页面保持打开时,插件会按 reloadIntervalMs 自动重读配置;切回标签页也会立即重读,一般不必刷新浏览器。

3. 工作 / 摸鱼预设按时段切换

{
  "activePreset": "work",
  "presets": [
    {
      "id": "work",
      "label": { "zh": "工作模式", "en": "Work" },
      "config": { "intervalMs": 12000, "gradient": false },
      "phrases": { "zh": { "thinking": ["正在认真写代码…"] } }
    },
    {
      "id": "fun",
      "label": { "zh": "摸鱼模式", "en": "Fun" },
      "phrases": { "zh": { "thinking": ["正在摸鱼…"] } }
    }
  ],
  "schedule": [
    { "preset": "work", "days": ["mon", "tue", "wed", "thu", "fri"], "from": "09:00", "to": "18:00" },
    { "preset": "fun", "days": ["sat", "sun"], "from": "00:00", "to": "23:59" }
  ]
}

4. 关闭炫彩渐变

"gradient": {
  "enabled": false,
  "colors": ["#ff5f6d", "#00ff88", "#4da6ff"],
  "speed": 4
}

适用场景与注意

适合谁

  • 长期在 dsh Web UI 前等待模型输出,希望状态行更有信息量或更个性化的开发者。
  • 需要按阶段(刚启动 / 运行中 / 长任务)展示不同语气文案,或想把 {model}{tps} 等实时字段写进状态行的用户。
  • 想在不改 dsh 本体的情况下,给界面做轻量「趣味换装」的 DSH 用户。

使用前请注意

  • 插件以当前 dsh 进程权限 运行;从 npm 或 GitHub 安装前,应自行审查源码与 MIT 许可证。
  • SkillHub(https://www.skillhub.cn/plugins/01Virex/dsh-status-rotator)是社区插件目录,与 DeepSeek / 幻方无官方从属关系;DSH 生态遵循「一切皆插件」,本插件是社区贡献,不是官方内置功能。
  • 若浏览器控制台出现 [status-rotator] ⚠ localStorage 覆盖生效,说明 localStorage 里的旧覆盖仍在生效,可能压住外部 config.json;需要时可清理对应键。
  • 升级到带设置页与写接口的版本后,需重启一次 dsh web 让 node half 注册 PUT 路由;之后日常改词库可在设置页完成。

链接

  • SkillHub 目录页:https://www.skillhub.cn/plugins/01Virex/dsh-status-rotator
  • GitHub 仓库:https://github.com/01Virex/dsh-status-rotator
  • npm 包名:dsh-status-rotator
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜