前言¶
DeepSeek Harness(DSH)把智能体跑在真实环境里:模型可以调 bash、起后台作业、并行干几件事。Web 界面里,对话页负责提问和看回复,任务看板、轨迹视图则负责另一套观察。后台任务一旦跑起来,输入框附近往往只剩「模型还在工作」这一层状态,具体是哪条命令、跑了多久、终端此刻打出了什么,要切到别的视图才看得见。
DSH 的设计口号是「一切皆插件」:模型适配、工具、会话、沙箱、调度和 UI 都可以换成插件,不必改 Harness 源码。社区目录 DeepSeek Harness 插件库 是独立站点,和 DeepSeek / 幻方没有官方从属关系,用来检索、安装社区插件。dsh-task-status 就挂在这个目录的「界面增强」分类下:它不给模型增加新工具,只在对话页输入区上方加一条后台任务状态条,并带实时输出 tail。
本文按插件目录页、GitHub 仓库 README、package.json 与源码交叉核对后整理:它是什么、装在哪、怎么用,以及安装前需要知道的边界。
这是什么¶
dsh-task-status 是一款面向 DSH Web 界面的界面增强插件,npm 包名为 @vlln/dsh-task-status,当前版本 0.3.1,由 vlln(LICENSE 署名 Sam Gao)维护,许可证 MIT。GitHub 仓库 vlln/dsh-task-status 在 2026-08-18 查询时为 9 颗星。目录页收录在「界面增强」分类,并标明它是 bundle 形态的插件:package.json 里声明了 dsh.bundle,客户端走 dshClient 通道,平台字段为 web。
它解决的问题很具体:智能体用后台方式跑任务时,开发者仍停留在对话页,也能看到:
- 当前会话有几条后台任务在跑
- 每条任务的状态、耗时和详情
- 展开后的终端输出 tail(类似
tail -f,自动刷新)
目录页和 README 把它写成「官方 bundle 插件」。这里的「官方」指的是 DSH 规定的 bundle 打包方式(dsh.bundle + 客户端注入),不是 DeepSeek 官方发行、也不是 Harness 内置组件。README 自己的定位是「DSH 生态示例插件」。
核心功能¶
插件分成两半:Node 端提供只读数据路由,浏览器端把状态条挂进对话输入区的官方槽位 conversation.input.dock(与 queue、todo 等 dock 组件同一条带)。cordis.patch.yml 只插入自身这一行,不改其他插件的配置。
对话页状态条¶
浏览器端源码 src/client/task-status.tsx 的行为如下。
- 位置:对话页输入框上方的 dock 卡片,布局变量对齐官方 composer(侧边留白、卡片最大宽度等)。
- 计数:多条任务时显示「⚙ N 个后台任务运行中」;只有一条时直接画出该任务行,不再套一层计数头。
- 展开详情:点击任务行展开,可见状态、起始时间、可选详情,以及输出 tail。
- 只显示活跃任务:
running/stopping才会出现在条上;completed/killed/failed到达后,该条从界面消失。任务全部结束后,状态条自动隐藏。 - 仅对话页:用页面上是否存在
[data-chat-flow=""]判断当前是不是 Chat 视图。切到 trajectory、taskboard 等视图时自动隐藏,切回对话页再显示。 - 按会话过滤:列表按
ownerSession对齐当前对话的sessionId,不会把别的会话的后台任务画到这一页。
状态文案带中英文案:运行中、停止中、已完成、已终止、失败。视觉点使用官方 StateDot 组件。
实时输出 tail¶
展开某一条任务后,客户端每 1 秒轮询输出路由,拿到全文后整段替换渲染,效果接近终端里的 tail -f。输出区高度上限约 10 行(160px),超出出现滚动条,并尽量保住尾部,方便回看最近日志。
对应的 HTTP 路由由 Node 端 src/index.mjs 注册:
| 路径 | 作用 |
|---|---|
/plugins/dsh-task-status/tasks |
只读任务列表(owned + unowned 并集,按 id 去重) |
/plugins/dsh-task-status/output |
指定任务的输出 tail(full: true 表示累积全文;未知 id 返回 404) |
列表接口不消耗任务输出游标。输出接口走宿主的 jobs.read:这是消耗式增量读取,和官方 task_output / job 工具共用每条任务上的游标。插件因此给 ctx.jobs.read 打了运行时镜像包装——官方侧优先从缓冲里读「尚未被官方消费」的增量,插件自己则走底层 rawRead 并累积全文。README 里仍写 ctx.tasks.read,与当前源码中的 ctx.jobs 命名不一致;以仓库源码为准。
输出缓冲上限 64KB,超限丢掉最旧的内容,只保尾。这是实现约束,不是可配置项。
安装与启用¶
package.json 声明:Node.js >= 22.19.0,DSH >= 0.1.0-rc.5,客户端平台为 web。请在已能打开 DSH Web UI 的环境里安装。
目录页给出的安装命令是:
dsh plugin add github:vlln/dsh-task-status
仓库 README 推荐显式指定 web profile,并且把分支钉在 main(git 源已包含构建产物 lib/,安装时不触发本地构建):
dsh plugin --profile web add "github:vlln/dsh-task-status#main"
本地已有源码时,也可以 git clone 之后在仓库目录执行:
dsh plugin --profile web add .
需要可复现安装时,按目录页说明把 GitHub 源钉到 commit。当前 main 最新提交为 b4fc6625362498bc230953df5e3a0e37b2104def(2026-08-17,版本 0.3.1),写法如下:
dsh plugin add github:vlln/dsh-task-status#b4fc6625362498bc230953df5e3a0e37b2104def
装完后 重启 web 才会生效。之后可在设置页的「插件」面板停用或重新启用。
目录页和 README 都提醒:插件以当前 dsh 进程的权限运行,安装时可能执行代码。安装前应阅读源代码仓库和许可证。
典型用法¶
不需要额外配置文件。按 README,让模型侧用后台方式跑一条任务即可,例如 bash 工具带 run_in_background: true。对话页输入框上方会出现类似:
⚙ 1 个后台任务运行中
● bash-1 for i in $(seq 1 20)… 21:30:15 起 运行中
操作顺序:
- 在对话里让智能体后台执行一条会持续输出的命令。
- 状态条出现后,点击该任务行展开。
- 输出区按约 1 秒间隔刷新;超过 10 行时用滚动条看尾部。
- 任务结束后状态条消失。
多条后台任务同时运行时,先点计数头展开列表,再点其中一行看 tail。
适用场景与注意事项¶
适合这几类使用方式:
- 日常在 DSH Web 对话页里写代码、跑测试、装依赖,希望后台
bash的进度留在输入框附近,而不是切到任务看板。 - 需要边看模型回复、边扫一眼命令输出是否卡住或报错。
- 想参考「官方 dock 槽 + bundle + 自建只读路由」写自己的界面插件。源码注释也把它标成示例。
使用前注意这些边界:
- 只覆盖 Web 对话页。
dsh.client.platform为web,headless / TUI 用不上这条状态条;trajectory、taskboard 上也会隐藏。 - 不给模型增加能力。它不注册新的 model-facing 工具,只观察已有后台任务。
- 运行时包装了
jobs.read。插件卸载时会恢复原方法,但装上期间官方读取与插件 tail 共用同一套增量游标。源码写明:展开任务并主动自读时,官方「首次消耗式 read 交付终态通知」可能被提前触发,窗口有限、作者视为可接受。若你同时依赖官方task_output工具的精确时序,先读src/index.mjs顶部的注释再决定是否安装。 - DSH 仍处于 developer preview。官方文档写明核心插件和 API 还会变。本插件注释里出现过「0809 官方 API」这类针对当时快照的约束,升级 Harness 后应再核对仓库是否跟进。
- 权限与许可证。插件以当前 dsh 进程权限运行,安装可能执行代码。许可证为 MIT,源码公开,安装前自行审查 GitHub 仓库。
小结¶
后台任务在 DSH 里并不少见,但对话页默认不怎么展示它们的进度和输出。dsh-task-status 用官方 conversation.input.dock 槽加一条状态条,再配上每秒刷新的输出 tail,让人不用离开当前对话也能看到后台作业在干什么。它是 vlln 维护的社区 MIT 插件,形态是 DSH 的 bundle + 客户端通道,不是 DeepSeek 官方应用商店里的内置功能。
目录页:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-task-status/
GitHub:https://github.com/vlln/dsh-task-status