使用 dsh-status-rotator 为 DeepSeek Harness 网页界面轮播回合状态文案

前言

DeepSeek Harness(以下简称 dsh)是 DeepSeek 开源的智能体运行时,核心理念是「一切皆插件」:模型、工具、会话、沙箱,连网页界面本身,都可以用插件增删。目前它仍处于开发者预览阶段,接口会继续变动。社区里有人整理了一份插件目录(https://deepseek-harness-plugin.com/),方便按分类查找安装命令;该目录是独立站点,与 DeepSeek / 幻方没有官方从属关系,收录条目需要自行核对源码。

日常用 dsh web 跑智能体时,网页底部回合运行那一行,默认会一直显示 Deep diving...。任务刚启动、已经跑了十几秒、卡了很久,看起来都是同一句话。如果你只是想让这一行跟着阶段换文案、带一点打字机和渐变,而不去改 dsh 本体,可以看社区插件 dsh-status-rotator

这是什么

dsh-status-rotator 是一款面向 dsh 网页界面 的界面增强插件,由 01Virex 维护,仓库地址为 01Virex/dsh-status-rotator。许可证是 MIT,主要语言是 JavaScript,package.json 里的版本号为 0.2.0。截至 2026-08-17,GitHub 显示 20 星;社区目录页上的星标快照仍是 8,以仓库页面为准。

它做的事情很窄:把聊天界面底部回合运行时那行 Deep diving... 状态文字,替换成你在 JSON 里写好的文案。文案可以按回合阶段切换、打字机逐字输出、用流动炫彩渐变显示(可关),并按间隔定时轮换。回合运行时长时钟(大约 15 秒后出现)不会被改掉,插件反而靠这只时钟判断当前处在哪个阶段。

它不给模型增加工具,也不改智能体的推理或写代码行为。源码里如果拿不到任何文案来源,状态行会保持原来的 Deep diving...,相当于没装。

核心功能

仓库 README 与浏览器端 lib/client.js 对能力的描述一致,可以分成下面几块。

1、按回合阶段换文案。 判定依据是 TurnStatus 元素里有没有时钟、以及时钟读数。默认分成三组:

阶段 触发条件 默认时长
thinking 回合刚启动,还没有时钟 0 ~ 15 秒
running 时钟已经出现,尚未超时 15 秒 ~ longAfterMs
long 时钟超过 longAfterMs 默认 ≥ 60 秒

阶段一切换就立刻换文案,不用等到下一轮轮换间隔。某一阶段缺文案时,按 running → thinking → 任意非空组 回退。

2、打字机效果。 新文案逐字打出,间隔由 typeSpeedMs 控制,默认 30 毫秒;设成 0 就关闭,整句直接显示。

3、流动炫彩渐变。 默认开,只作用在文案上,不影响旁边的时钟。颜色序列和流速可配,也可以一键关掉。

4、文案和代码分开。 句子全部写在 JSON 里。插件的 Node 端会注册 HTTP 路由 /plugins/dsh-status-rotator/config.json,每次请求实时读插件目录里的 config.json(没有这个文件时回退到入库的 config.example.json)。改完文案刷新页面即可,不必改 lib/client.js,也不必配 localStorage。

5、中英文跟随界面语言。 文案分 zh / en 两套,跟随「设置 → 语言」切换;未知语言回退到中文。

6、定位比较克制。 浏览器端按 role="status"aria-live="polite" 去找 TurnStatus,并再加一层结构判断,避免误伤聊天记录里的代码片段、轨迹历史、模型保存提示等同样带 aria-live 的区域,也不去改时钟节点。

安装与启用

社区目录页给出的安装命令如下,在已经跑起来的 DeepSeek Harness 终端里执行即可:

dsh plugin add github:01Virex/dsh-status-rotator

dsh CLI 会从 GitHub 解析插件并装进当前 profile。来自 GitHub 的插件安装时可能执行代码,插件也会以当前 dsh 进程的权限运行。安装前应先看仓库源码和 MIT 许可证;只装自己信任的来源。若要可复现安装,可以固定 commit 哈希。本文核对仓库时,main 分支最新提交是 09836ff04330a17fc670c27a4bed6855547c88ad(2026-08-15),可以写成:

dsh plugin add github:01Virex/dsh-status-rotator#09836ff04330a17fc670c27a4bed6855547c88ad

哈希会随仓库更新变化,安装前到 GitHub 再确认一次更稳妥。目录页上的占位写法是 github:01Virex/dsh-status-rotator#commit

装好之后,按 README 的建议重启 dsh web,浏览器里用 Ctrl+F5 硬刷新。插件声明了 dsh.client.platform = "web",只作用于网页界面;纯 headless 跑任务看不到效果。

若不想走 dsh plugin add,README 还提供了手动挂载步骤,和 cordis.patch.yml 里的插入内容一致:

  1. 把项目目录放到当前 profile 的 node_modules 下(Windows 默认路径形如 C:\Users\<你>\.dsh\profiles\node_modules\dsh-status-rotator\)。
  2. 在该 profile 的 cordis.patch.yml 里插入:
- insert:
    - id: status-rotator
      name: dsh-status-rotator
  1. 在插件目录执行 node gen-config.cjs,从 config.example.json 生成本地 config.json(仅当文件不存在时创建,不会覆盖你已经改过的配置)。
  2. 重启 dsh web,浏览器 Ctrl+F5 硬刷新。

gen-config.cjs 这一步不是强制的:Node 端读不到 config.json 时会直接 serve config.example.json,所以用目录命令装完、硬刷新后,一般就能看到示例文案。想长期改自己的句子,再生成一份本地 config.json 更合适;该文件已被 .gitignore 忽略。

卸载时,从 cordis.patch.yml 删掉 status-rotator 那一行,重启 dsh web 即可。

配置与典型用法

项目根目录有两份配置:

  • config.example.json:入库的完整模板,带默认参数和中英、三阶段文案。
  • config.json:本地个性化配置,由 gen-config.cjs 初始化。

结构可以看成「参数 + 文案」两部分。下面是 README 给出的骨架(文案用省略号代替):

{
  "config": {
    "intervalMs": 10000,
    "typeSpeedMs": 30,
    "longAfterMs": 60000,
    "debug": false,
    "gradient": {
      "enabled": true,
      "colors": ["#ff5f6d", "#ffc371", "#ffdd55", "#7dff7d", "#5fd4ff", "#a78bfa", "#ff8adb"],
      "speed": 4
    }
  },
  "phrases": {
    "zh": {
      "thinking": ["…"],
      "running": ["…"],
      "long": ["…"]
    },
    "en": {
      "thinking": ["…"],
      "running": ["…"],
      "long": ["…"]
    }
  }
}

各字段含义如下:

默认 说明
intervalMs 10000 同一阶段内轮换间隔(毫秒)
typeSpeedMs 30 打字机每字符间隔(毫秒),0 关闭
longAfterMs 60000 进入 long 阶段的阈值
debug false 控制台诊断日志
gradient 见上 false 关闭;true 用默认配色;或 {enabled, colors, speed}
phrases 来自配置文件 中英 × 三阶段;可只写一部分,缺的按回退规则补

只想关掉彩虹字、其它保持默认时,把 gradient.enabled 设为 false 即可,例如:

"gradient": {
  "enabled": false
}

colors 至少两个颜色,首尾循环;speed 是流动一圈的秒数,默认 4。

示例仓库里的默认中文,偏社区梗和吐槽,例如 running 阶段有「正在自己玩Wordle…」「正在假装通过图灵测试…」,long 阶段有「正在服务器繁忙,请稍后再试…」。这些只是界面文案,不是插件真的在执行对应动作。如果要在工作环境里用,建议整表换成自己的句子,例如:

{
  "config": {
    "intervalMs": 8000,
    "typeSpeedMs": 0,
    "longAfterMs": 60000,
    "debug": false,
    "gradient": { "enabled": false }
  },
  "phrases": {
    "zh": {
      "thinking": ["正在读取任务…", "正在整理上下文…"],
      "running": ["正在调用工具…", "正在修改工作区文件…"],
      "long": ["这一回合比较久,请稍候…"]
    }
  }
}

改完保存 config.json,刷新页面就会重新 fetch 路由。不必重启 Node 进程;如果浏览器还在用旧缓存,再硬刷新一次。

文案来源有多层覆盖,优先级从高到低是:

  1. localStorage 单条覆盖:dsh-status-rotator.texts[.] / texts
  2. localStorage 完整配置:dsh-status-rotator.config(把整份 JSON 贴进去,刷新生效)
  3. 外部 JSON:dsh-status-rotator.url > 源码里的 EXTERNAL_URL 常量 > 本地自动加载 /plugins/dsh-status-rotator/config.json
  4. 内置默认值:仅 lib/client.js 顶部的 DEFAULT_CONFIG(不含文案)

旧格式的纯文案 JSON(例如 { "zh": [...], "en": [...] }{ "thinking": [...] })仍然兼容,会被当成「只带文案的配置」。日常改 config.json 就够用;localStorage 更适合临时试一句、不想动文件的情况。

另外,仓库还带了一个可选脚本 scripts/fetch-qq-group.cjs:若本机有 OneBot v11 兼容的 HTTP API(README 举例 NapCat / LLOneBot / go-cqhttp / OpenShamrock),或准备一份本地成员名单,可以生成「正在路由(某某)写代码…」这类句子。没有机器人时,把昵称按行写入 members.txt 再跑:

node scripts/fetch-qq-group.cjs --input members.txt

生成结果默认只有 zh.thinking 一组,其它阶段会按回退规则用同一组。这不是安装插件的必做步骤,用不到可以忽略。

适用场景与注意事项

比较适合已经在用 dsh 网页界面、觉得底部状态行过于单调,又希望自己写文案的人。它只改这一处展示,和侧边栏、主题皮肤、任务看板不是一类东西。

使用时有几点需要注意。

第一,这是 Web UI 插件。package.jsondsh.client.platformweb,在无界面的 headless 运行方式下没有对应的状态行。

第二,它不改变智能体做什么。阶段划分只看 TurnStatus 里的时钟,不是去解析模型输出或工具调用。时钟大约 15 秒后才出现,因此前十几秒会落在 thinking

第三,默认示例文案是玩笑口吻,个别句子带梗、带吐槽。装完如果直接拿 config.example.json 用,状态栏会轮播这些句子;对外演示或严肃环境里,应先换成自己的文案。

第四,插件以当前 dsh 进程权限运行,安装时可能执行来自 GitHub 的代码。安装前检查源码仓库和许可证;需要可复现环境时固定 commit。社区目录不是官方应用商店,收录不等于官方背书。

第五,dsh 本身仍是开发者预览,Web UI 的 DOM 结构若后续调整,按 role / aria-live 定位的方式有可能失效。遇到状态行不变,可先硬刷新,再打开 debug: true 看控制台日志。

小结

dsh-status-rotator 把网页界面底部那行固定的 Deep diving...,换成按阶段轮播、可打字、可渐变的自定义文案,时钟和智能体行为保持原样。安装命令以目录页为准:

dsh plugin add github:01Virex/dsh-status-rotator

目录详情页:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-status-rotator/

GitHub 仓库:https://github.com/01Virex/dsh-status-rotator

羽毛球分组比赛记分
小程序二维码

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

小夜