前言¶
在使用 DeepSeek Harness(DSH)开发多智能体系统时,一个会话可能同时运行多个子代理和后台任务。当前 Web UI 在右侧栏仅有会话历史与文件、浏览器、终端等原生标签,缺少对「运行中任务」的统一视图。开发者需要切换到不同会话或查看控制台日志,才能确认子代理状态与任务进度。
DSH 的理念是「一切皆插件」。开发者可以通过注册右侧栏原生标签页,将自定义视图与官方 dock 体验(拖拽分栏、全屏、宽度调整、会话级布局记忆)集成在一起。下面介绍 ydlly224/dsh-ui-taskpanel 插件,它在官方「任务面板」标签页中聚合当前会话的三类运行信息:任务进度清单、子代理运行状态、后台运行任务。
插件定位¶
dsh-ui-taskpanel 是一个纯客户端插件,为 DSH Web UI(0.1.x ~ 0.2.x)注册一个原生右侧栏标签页「任务面板」。它通过 DSH 官方的 sidebarRightTabs 服务与 sidebar.right.pane.tab 槽位,将视图挂载到与「工作区文件/浏览器/终端」同一套 dock 体验中,支持拖拽分栏、全屏、宽度拖拽与会话级布局记忆。
插件无 npm 依赖,不发起网络请求,仅使用 localStorage["dsh.taskpanel.v4"] 持久化用户偏好(如面板分区开关),并在浏览器中渲染。
核心功能¶
任务进度清单¶
当前会话的 todo 投影(projectionValues.todos)通过「待办 → 进行中 → 已完成」排序展示。面板显示进度条、已完成数/总数、进行中数/待办数。如果会话不具备 todo 能力(键缺失),面板整体隐藏。
子代理运行状态¶
当前会话的直接子代理(origin === "subagent" 且 parentId === current)以列表形式展示。每行显示模型芯片、token 用量、轮次/步数、上下文占用百分比、耗时。运行中的子代理置顶,其余按更新时间倒序;超过 8 行时分页显示「其余 N 个」。
点击子代理行默认在右侧栏打开对应子代理会话(使用官方 dsh-resource://subagentchat/session/<childSessionId>?parent=…&mode=… 资源,通过 sidebarRight.openResource(resource, { kind: "subagentchat", preferNewPane: true }) 打开)。按住 Alt/⌘ 点击可在主视图打开。如果面板可见,会订阅 setSubagentCatalogOpen 推送并支持手动刷新。
后台运行任务¶
使用 0.2.1 的 jobs 服务快照(state.rows[sessionId] + watchRows)。运行中和停止中的任务置顶,每秒刷新已运行时长。展示任务进度行(JobView.progress)或终止原因(detail)。支持两段式终止:先点击「终止」待确认,3 秒内再次点击执行。已 settled 的任务折叠进「历史」分区。
安装与启用¶
插件通过 dsh plugin 命令安装到当前 profile,并在 ~/.dsh/profiles/web/package.json 中注册 bundle 名称。
1) 安装插件(本地目录或 Git 仓库)
dsh plugin --profile web add file:<本插件目录>
# 或使用 Git 仓库
dsh plugin --profile web add git+https://github.com/ydlly224/dsh-ui-taskpanel.git
2) 在 ~/.dsh/profiles/web/package.json 的 dsh.profile.bundles 数组里追加 "dsh-ui-taskpanel"。
3) 重启一次 dsh web,浏览器刷新后在右侧栏「+ 新标签页 → 任务面板」打开。此后仅改 lib/client.js 会自动 HMR 热重载。
行为细节¶
- 面板为填充式布局(
.dsh-tp-panel-rootheight:100% flex 列),宽度/分栏/全屏/标签页开关由官方 dockkit 提供。 - 面板数据范围:待办清单、子代理运行状态、后台运行任务;标签页归属会话即数据来源会话(
props.sessionId)。 - 面板分区开关持久化到
localStorage["dsh.taskpanel.v4"]:{ panels: { todos, subagents, jobs } },读写均有 try/catch 兜底。 - 主题只使用经核实的
--dsw-alias-*CSS 变量(如bg-layer-1、label-*、border-l2、state-*-primary、brand-primary等),暗色主题自动生效;面板底色随官方 dock 面板(bg-base)。 - CSS 经
<style data-plugin="dsh-ui-taskpanel" data-plugin-css="dsh-ui-taskpanel/taskpanel.css">注入,HMR 卸载标签后重载会重新注入。 - 所有快照选取器只返回原语或存量引用(数组/对象派生一律走
useMemo),避免useSyncExternalStoreWithSelector的引用不稳定循环。 - 所有文案走
t()(NS=taskpanel,zh 为键集真源),动态字符串一律以 React 文本节点渲染。
自检¶
插件包含以下自检脚本,可在安装后运行:
node --check lib/index.js
node --check lib/client.js
适用场景与注意¶
- 适合需要同时管理多个子代理与后台任务的 DSH 开发者与使用者。
- 插件以当前 dsh 进程权限运行,安装前建议检查源码与许可证。
- 依赖 DSH Web 0.1.x ~ 0.2.x,已在 0.2.1-rc.2 上验证。
结语¶
dsh-ui-taskpanel 将「任务进度清单」「子代理运行状态」「后台运行任务」统一到官方右侧栏原生标签页中,开发者无需切换会话或查看控制台,即可在当前视图中监控运行情况。它不引入额外依赖,直接复用 DSH 官方服务与 UI 基础设施,符合 DSH 「一切皆插件」的扩展理念。
- 插件目录页:https://www.skillhub.cn/plugins/ydlly224/dsh-ui-taskpanel
- GitHub 仓库:https://github.com/ydlly224/dsh-ui-taskpanel