前言¶
用 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 |
某阶段缺文案时会自动回退(running → thinking → 任意非空组)。
打字机、渐变与轮换¶
- 文案可逐字打出,
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.cjs 从 config.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