dsh-worksite-plugin:把 DSH 会话进度翻译成一座施工工地

前言

DSH 的会话视图默认以对话流呈现。一次长任务跑下来,你能看到模型每一轮的输出,但很难一眼看出工程进度:哪些任务做完了、当前在哪个阶段、上一个出错是不是返工、这轮用了多少 token。用文本 todo 列表或日志去补,就得在对话和笔记之间来回切。

下面介绍 luotaiyu/dsh-worksite-plugin(工程现场插件,DSH Web GUI 会话视图插件)。它把当前 Session 的持久事件、任务清单和运行状态,翻译成一座正在施工的工地:拟人化工程师“小匠”、施工塔、工序航线、现场动态和工程仪表盘。项目由 LuoTaiyu 维护,版本 0.1.0,许可证 MIT。

这是什么

一句话定位:一个挂在 DSH 会话视图切换环里的主题化可视化插件,不改模型行为,只负责把会话信号渲染成工地视图。

  • 包名:@local/dsh-site-view
  • 仓库:https://github.com/LuoTaiyu/dsh-worksite-plugin
  • 状态视图:安装后打开任意会话,顶部会话视图切换环会出现“工程现场 / Worksite”

环境要求写在 package.json 的 engines 里:

"engines": {
  "dsh": ">=0.2.1-rc.5 <0.3.0"
}

GitHub 仓库名只接受 ASCII 字符,中文名会被清洗成 -,所以实际仓库使用稳定 slug dsh-worksite-plugin,项目中文名仍是“工程现场插件”。

核心功能

拟人化现场工程师“小匠”

六种状态:思考、施工、验收、交付、返工、待命。每种状态带表情、安全帽、图纸、扳手和状态气泡,状态直接来自 useSession() 的 running、blank、promptAttempted 和错误状态。

施工塔

把 todo 或会话阶段映射成楼层,楼层分已完成、施工中、待建三种状态,附带塔吊和作业面提示。多任务楼层会做折叠。

工序航线

四段式阶段轨:图纸会审 → 主体施工 → 质量验收 → 交付使用,对应 deriveSite() 推导出的会话阶段。

现场动态

最近 5 次工具调用,按改图、看图、勘测、施工、外勤、排期、分包、交付分类展示,数据来自 Session binding 的 eventSource(resident 会话事件窗口)。

施工清单与进度估算

直接读取 useProjection('todos') 的当前任务清单。没有 todo 时降级为按会话阶段估算。

需要明确的一点:这里的进度是会话信号估算,不是模型自报的完成度。todo 占主导,工具活动与验收信号作补充;界面上明确标注了这一点。

工程仪表盘

展示工序、改图、轮次、用时、令牌、异常六项。

主题与无障碍

全部 UI 使用 --dsw-alias-* 主题令牌,支持浅色/深色、键盘焦点与 prefers-reduced-motion。

安装与启用

README 给了三种方式,都没有 dsh plugin add 这样的单行命令,不要凭插件名拼接。

方式一:从 GitHub 安装

在 DSH 的 Plugin Manager 中使用“安装第三方插件”,填入 commit-pinned Git 地址:

git+https://github.com/LuoTaiyu/dsh-worksite-plugin.git#5c52c9019e461399feddcf060b4e86522d0c7b06

如果更希望跟随仓库更新,可以先用仓库地址安装,再做一次更新:

git+https://github.com/LuoTaiyu/dsh-worksite-plugin.git

方式二:从插件市场安装

DSH 当前没有官方中心市场;Plugin Manager 的 Discover 只列出用户自己添加的索引。该仓库自带一个 format 1 市场索引:

https://cdn.jsdelivr.net/gh/LuoTaiyu/dsh-worksite-plugin@main/market.json

启用 Plugins → Experimental plugins → Custom plugin markets,在 Discover 中添加这个索引,即可搜索并安装“工程现场”。

下面是插件市场索引地址,可用 web_fetch 打开核对:

https://cdn.jsdelivr.net/gh/LuoTaiyu/dsh-worksite-plugin@main/market.json

方式三:本地安装

本包是一个本地 Bundle。通过 Plugin Manager 的“安装第三方插件 → 本地目录”安装 dsh-site-view 目录的绝对路径,或由宿主侧 install_bundle 完成。

当前桌面 profile 以 link: 方式安装到本工作区;移动或重命名 dsh-site-view 目录后,需要重新安装一次。

装完后打开任意会话,顶部视图切换环里找“工程现场 / Worksite”。若暂时看不到,刷新一次页面即可加载新客户端 Bundle。

数据来源与文件结构

数据由五个入口喂给浏览器侧的 client.js:

数据源 用途
useSession() running、blank、promptAttempted、错误状态
useProjection('todos') 当前任务清单
useProjection('goal') 持久目标(可选)
useProjection('title') 会话标题(可选)
Binding 的 eventSource resident 会话事件窗口:工具调用、轮次、错误、token 用量

仓库文件分工:

文件 作用
package.json Bundle 清单、dsh.bundle.patch、dsh.client
cordis.patch.yml 插入 site-view 行
index.js Host 半侧(空实现,负责 Loader 行)
client.js 浏览器半侧:conversation.view 注册、数据推导、React 组件、CSS
locale/{en,zh}.json Plugin Manager / Settings 显示元数据
icon.svg 原创图标
market.json DSH 插件市场索引(format 1)

浏览器侧通过 deriveSite()、buildFloors() 和 Client apply() 注册契约把数据推导成视图模型。

典型用法与验证

装好后不需要额外配置,进任意会话切换到“工程现场”即可。要看推导逻辑本身是否成立,可以跑仓库自带的纯函数测试:

node test/derive.test.mjs

README 记录的已完成验证:

  • node --check 通过;
  • package.json / locale JSON 解析通过;
  • deriveSite()、buildFloors() 与 Client apply() 注册契约的断言通过,覆盖空闲、施工、部分完成、全部完成、错误返工、多任务楼层折叠、slot 注册;
  • 已安装到 desktop profile,dsh.profile.bundles 包含 @local/dsh-site-view;
  • 运行中的 Host /plugins/events 图已包含 @local/dsh-site-view,最终客户端 Bundle 以 200 返回并通过语法检查;
  • Bundle 清单、locale 与 icon 导出检查通过。

未完成的验证:真实浏览器中的最终视觉验收(当前环境没有可用的页面控制/截图通道)。装上之后应以实际页面为准,检查浅色/深色主题、窄窗口、无 todo 会话与错误会话。

适用场景与注意

适合想在长会话中直接看到任务进度、工具活动和轮次消耗的 DSH 用户。它对模型能力没有要求,也不改变会话行为。

几点需要注意:

  1. 插件以当前 dsh 进程的权限运行,安装前应先检查源码与许可证(MIT),确认第三方索引和 commit pin 可信;
  2. 界面上的进度是会话信号估算,不是精确完成度,不要把它当作验收清单;
  3. 市场索引是用户自己添加的,DSH 没有官方中心市场,社区目录属于独立站点,与 DeepSeek / 幻方无官方从属关系;
  4. 版本仍是 0.1.0,视觉验收尚未在真实浏览器里做过,建议先在测试 profile 上装。

小结

这个插件的价值在于把零散的会话信号收拢成一个统一的工地视图:todo 变成施工塔楼层,阶段变成工序航线,工具调用变成现场动态,进度条变成仪表盘的轮次与令牌。它不替代 todo 列表,而是给长会话补了一块可扫读的进度面板。

  • 目录页:https://www.skillhub.cn/plugins/LuoTaiyu/dsh-worksite-plugin
  • GitHub:https://github.com/LuoTaiyu/dsh-worksite-plugin
羽毛球分组比赛记分
小程序二维码

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

小夜