前言¶
在 DeepSeek Harness(DSH)里跑智能体会话时,界面侧栏和消息流能反映进度,但缺少一个始终可见、且与「当前主会话」绑定的轻量反馈。若只靠扫日志或等通知,很难一眼区分「在推理」「在跑工具」「在等你点确认」还是已经收工。
下面介绍的 dsh-ai-worker(仓库 jiang-yang/dsh-ai-worker)是维护者 jiang-yang 发布的纯客户端 DSH 插件:在 Web 界面右下角挂一个像素风「AI 打工人」悬浮挂件,动作随当前会话状态切换,并在任务完成时撒花、统计「今日完成」件数。它不替代 DSH 自带 UI,也不发起额外网络请求。
这是什么¶
- 定位:挂在 DSH Web shell 的
shell.overlay插槽上的悬浮小部件,不是独立网页,也不是 iframe。 - 维护与许可:GitHub 仓库 jiang-yang/dsh-ai-worker,
package.json标明版本 0.2.1、许可证 MIT。 - 运行环境:
engines.dsh为>=0.1.0-rc.6 <0.2.0-0 || >=0.2.0-rc.0 <0.3.0-0,engines.node为>=20。插件以当前 DSH 进程及其浏览器端加载方式运行;安装前建议通读源码并确认许可证与权限边界。
社区插件目录页:https://www.skillhub.cn/plugins/jiang-yang/dsh-ai-worker(SkillHub 为社区目录站点,与 DeepSeek / 幻方无官方从属关系)。
核心功能¶
视觉与实现方式¶
- 图形全部由 DOM + CSS 关键帧 绘制:无外部图片、无 CDN、无网络请求、无额外 npm 依赖(除 DSH 宿主提供的 UI peer)。
- 颜色读取 DSH 主题变量
--dsw-*,随浅色 / 深色主题自动适配。 - 可拖动、可折叠成小头像、可关闭;关闭 / 折叠 / 位置 / 今日完成数写入浏览器 localStorage,刷新或重启 DSH 后仍保留(换浏览器或清缓存会重置)。
五种显示状态(由会话数据推导,非随机动画)¶
| 显示 | 触发条件 |
|---|---|
| 等待确认 | useSessionStatus 中当前会话的 pendingInteraction 非空 |
| 敲代码中 | 当前会话 running,且行内 updatedAt(或本轮开始时间)在 2 秒内 |
| 思考中 | 当前会话 running,但已安静超过 2 秒(常见于推理阶段) |
| 完成任务 | 会话从 running 变为非 running 的那次跳变(计数 +1,撒花约 7 秒) |
| 摸鱼中 | 空闲且超过 45 秒无动静 |
| 待命中 | 未选中任何会话 |
「当前会话」优先取 useSessions 快照里 byId 中 retainedBy.mainView > 0 的行(与 DSH 侧边栏找主会话一致);无该字段时退回 current,再退回「列表里只有一个会话」。
数据来源为两个 slot 标准属性:
useSessions:会话列表快照{ ids, byId, phase, projectionsBySession };useSessionStatus:实时状态表Map<sessionId, { running, pendingInteraction, completionUnread }>,由宿主经api-session/status推送,是会话进行中变化的主要状态源。
交互¶
- 拖动:按住标题栏拖动;聚焦标题栏后可用方向键(Shift 加大步长)。
- 撒花:任务完成自动播放;点击挂件本体或聚焦后按 Enter / 空格可再放一次(纯动画,不计入「今日完成」)。
- 折叠:标题栏
—或Esc→ 右下角小头像(角标为今日完成数);点小头像展开。 - 关闭:点
✕,下次打开 DSH 默认不再出现。 - 重新打开:清除
localStorage键dsh.aiWorker.closed.v1后刷新,或在浏览器控制台执行:
localStorage.removeItem('dsh.aiWorker.closed.v1')
安装与启用¶
插件按 DSH 规范打包:自带 cordis.patch.yml,通过 package.json 的 dsh.bundle.patch 在安装进 profile 时自动登记 id: ai-worker,无需手工改 profile 的 cordis.patch.yml。README 说明从 0.2.0 起不再使用「复制目录 + 手工登记」的老办法,以免重复 id 导致 DSH 拒绝加载。
在已克隆或解压的插件目录内执行(命令来自仓库 README,勿凭插件名拼接 github:owner/repo):
cd plugins/dsh-ai-worker
bash install.sh # 默认装进 web profile(认 DSH_PROFILE / DSH_BIN)
桌面版 DSH 可指定 profile:
DSH_PROFILE=desktop bash install.sh
卸载:
bash uninstall.sh
install.sh 本质是对官方 CLI 的包装,例如:
dsh plugin --profile desktop add "$(pwd)"
装包后 DSH 扫描 dsh.client 声明,将 lib/client.js 下发浏览器;apply(ctx) 把挂件注册进 shell.overlay。
若自行改源码,需先构建再刷新页面:
node build.mjs # 重新生成 lib/client.js
node verify.mjs # 离线自检(无需浏览器)
典型用法¶
- 按上一节在目标 profile 执行
bash install.sh,重启或刷新 DSH Web 界面。 - 打开或选中一个主会话,观察右下角挂件随
running/pendingInteraction等在「思考中」「敲代码中」「等待确认」等之间切换。 - 等会话从运行中结束,应看到完成任务动画与「今日完成 N 件」递增;跨天计数自动归零。
- 需要收纳界面时折叠为小头像;长期不用可关闭,并按上文清除
dsh.aiWorker.closed.v1恢复。
开发或验收时可运行 node verify.mjs,在无浏览器环境下模拟加载并跑通各状态(README 中截图即同一份 lib/client.js 在无头 Chrome 中的渲染结果)。
适用场景与注意¶
适合谁
- 经常在 DSH Web 里长时间盯会话、希望用固定角落反馈区分「在等确认」与「在安静推理」的开发者。
- 希望零额外网络与图片依赖、仅增强 shell overlay 的用户。
边界与限制
- 仅 DSH Web 界面;终端 TUI 没有
shell.overlay插槽,插件不会出现。 - 「思考中 / 敲代码中」依赖会话行活跃度启发式(2 秒阈值),不是模型内部状态的精确映射。
- 0.2.1 起改用宿主提供的
useSessionStatus;更早版本若依赖不存在的 API,挂件可能一直停在「待命中」。 - 折叠、关闭、位置、计数均在本机浏览器 localStorage,与 DSH 服务端配置无关。
安装插件等同于让 DSH 加载其声明的客户端 bundle;请在信任维护者与 MIT 许可的前提下自行审阅 源码(核心逻辑在 src/client/ai-worker.js)。
结尾¶
dsh-ai-worker 把「当前主会话在干什么」收成右下角像素小人的几种动作,并用 localStorage 记住你的布局与今日完成数,适合作为 DSH Web 上的轻量状态 companion。目录与源码: