前言¶
用 DeepSeek Harness(命令名 dsh)在网页里跑长任务时,主界面很快会堆出思考流、工具输出和待审批请求。真正需要一眼确认的,往往只有几件事:智能体现在是在想、在跑工具,还是卡在等你拍板;这一轮最后是成功、失败、被截断,还是目标被阻塞。这些信号散落在会话时间线和原生输入区里,切到别的窗口再回来,就要重新找。
DeepSeek Harness 由 DeepSeek AI 开源,仓库是 deepseek-ai/deepseek-harness。官方页面把它的架构写成 Everything is a Plugin(一切皆插件):模型、工具、技能、会话、沙箱、调度和界面都可以按 profile 增删,不必改 harness 源码。目前仍是面向开发者的预览版,接口还会变。社区站点 DeepSeek Harness 插件库 用来发现和对比插件,它和 DeepSeek / 幻方没有官方从属关系,不能当成官方应用商店。安装命令以目录页原文为准。
目录里有一个界面增强插件 dsh-dynamic-island。它把上述状态收进 Web GUI 边缘一块玻璃质感的小岛:思考时核心会呼吸,跑工具时边缘会脉冲,动手前展开「批准 / 暂不」。本文按该目录详情页、GitHub 仓库(含中英文 README、package.json、docs/integration.md、MIT 许可证)、npm 页面以及 DeepSeek Harness 官方资料交叉核对后整理。
这是什么¶
dsh-dynamic-island 是一款界面增强插件,由 ylifeonlyonce 维护(GitHub 用户名为 YLifeOnlyOnce),源码在 YLifeOnlyOnce/dsh-dynamic-island,许可证为 MIT,主要语言是 JavaScript。2026 年 8 月 18 日打开目录页和 GitHub 时,仓库星标均为 3;目录收录日期是 2026-08-15,最近一次推送是 2026-08-14。npm 包名同样是 dsh-dynamic-island,当前版本 0.3.5(2026-08-14 发布)。
它要解决的是「Agent 内心活动看不清」这件事:思考、工具调用、审批、异常、完成,本来都在 Harness 的会话快照和事件里,插件把它们映射成一块趴在屏幕边缘的轻量表面。目录页和 README 都强调:它不是一只和任务无关的桌宠,每一次形态变化都来自真实的 Harness 状态。
需要先把定位说清楚。仓库 README 把项目状态写成 高保真设计原型:同一仓库里既有 Vite 演示游乐场,也有可安装的双面包客户端插件。package.json 的描述也写明 design prototype + plugin in one repo。路线图里「真实 GUI 联调(桥实机核对 + retry / continue / unblock / approve 接上真实远端)」仍未勾选。下面介绍的能力,以仓库文档和桩测试为准,不要默认已经在生产 Web GUI 里全部跑通。
核心功能¶
插件挂在 Web GUI 的 shell.overlay 浮层槽上,不改 apps/web 源码。形态是双面包 npm 包:dsh.client 声明浏览器半场(exports["./client"] 指向构建出的 lib/client.js),node 半场是空的 apply(),只为让包成为 loader 入口。package.json 里 dsh.client.platform 为 web,也就是说它面向网页界面,不是 headless / TUI。
浏览器半场订阅当前会话快照和投影(goal、todos、tokenUsage、contextPressure、permissions),经 src/plugin/protocol.js 派生成岛模型,再交给与演示共用的那套 React 组件渲染。README 把 Harness 信号收成八种心情,而不是直接把原始事件流铺到屏幕上:
| 心情 | 对应信号(仓库文档) | 界面上大致长什么样 |
|---|---|---|
待命 idle |
agent/status: idle |
安静小点 |
思考 thinking |
运行中、步骤开始、推理增量 | 核心呼吸,胶囊显示当前任务和步骤 |
执行 working |
tool/call 到对应 tool/result |
青绿脉冲,显示工具名和进度 |
确认 approval |
输入区有待处理的审批 | 暖珊瑚边缘,展开「批准 / 暂不」 |
完成 complete |
成功的 turn/end 与用量信息 |
结果小票 |
异常 alert |
工具错误、请求错误、失败的 turn/end |
失败摘要和回到正轨的入口 |
阻塞 blocked |
turn/end {blocked} |
目标暂停,等解除 |
上限 max-tokens |
turn/end {max-tokens} |
输出被截断,可续跑 |
八态之上还有一组载荷:流式预览行(思考与正文分色)、工具命令卡、结果小票、目标进度环、三态任务清单、模型徽章(provider · model)。演示里可以拖拽小岛,位置会记住;⌘K / Ctrl+K 打开命令面板;Esc 收起。审批按仓库说明是原生输入区的镜像入口,不另起一套状态机,也不会替 Harness 做决定。
观感上,README 写的是手写 CSS 的 Liquid Glass:分层透明、弹性形态、会动的光,不引入额外 UI 组件库。所谓「零额外依赖」,指的是运行时不再叠一套组件框架,peer 依赖仍是 React 18 或 19。样式放在 Shadow DOM 里,与原生界面双向隔离。无障碍方面,文档写明尊重 prefers-reduced-motion,不单靠颜色表达状态,审批按钮是真实可点的按钮。
docs/integration.md 对「已经接到什么」更具体,写作时以它为准,不要把演示里能点的按钮都当成实机已接通:
- 展示侧:待命 / 思考 / 执行 / 审批情绪、审批文案、完成与异常等收尾原因、流式预览(受快照批处理粒度限制)、todo 清单、目标环、token 用量和小票时长、停止取消、解除阻塞,文档记为已按契约接入并经桩测试。
- 仍有缺口:工具卡在运行中只有名称,完整参数和退出码要订阅会话 log,live-bridge 尚未订阅;结果小票的 files / checks 当前没有投影;重试 / 继续的
session.prompt正文还没接到队列里最近一条用户消息;最近完成小票堆未实现。 - 最后一道验证是真实 GUI 联调。文档写明:桩测试不能替代浏览器里对
currentProvideInfo、快照和投影的实机核对。
安装与启用¶
社区目录页给出的安装命令如下,在 DeepSeek Harness 终端中运行:
dsh plugin add github:ylifeonlyonce/dsh-dynamic-island
这是目录页原文,不要自行改成别的 owner/repo 拼法。如需可复现安装,目录页的写法是在后面固定 commit 哈希:
dsh plugin add github:ylifeonlyonce/dsh-dynamic-island#commit
把 commit 换成实际哈希。2026-08-18 核对该仓库 main 分支时,最新提交为 d92f9bc83d20949b5f1beec1fd0051f9386a8b63(对应 npm 0.3.5)。哈希会随仓库更新变化,安装前应再打开 GitHub 确认。
仓库 README 另外写了面向 web profile 的装法,以及从 npm 装同名包:
dsh plugin --profile web add dsh-dynamic-island
dsh --profile web
本地从源码装时,先 npm run build:plugin 产出 lib/client.js,再执行 dsh plugin --profile web add /path/to/this-repo。装完需要重启 web profile:文档说明客户端模块的包元数据缓存不会自动失效,插件集变更必须重启。重启后可用下面这条检查配置树里是否出现该插件:
dsh --profile web --dump-config | grep dynamic-island
目录页有一条适用于所有插件的安全说明:插件以当前 dsh 进程的权限运行,安装时可能执行代码。安装前请检查源代码仓库和许可证。
典型用法¶
如果还没把它装进 Harness,仓库提供独立演示,用来看八种心情和交互,不经过真实 GUI:
git clone https://github.com/YLifeOnlyOnce/dsh-dynamic-island.git
cd dsh-dynamic-island
npm install
npm run dev
打开 Vite 打印的地址,底部有 灵动岛演示 栏,可以手动切换心情,也可以点「▶ 自动演示」走一遍 待命 → 思考 → 执行 → 确认(自动批准)→ 完成。仓库列出的可复现操作包括:
- 在确认态点「批准 / 暂不」,看小岛是否立刻同步结果。
- 点「查看过程」展开岛内活动流;演示里的工具卡带退出码、耗时,以及一键复制命令。
- 点「清单」展开三态任务清单,目标进度环显示 goal 轮次。
- 异常态点「重试」,阻塞态点「解除阻塞」,上限态点「继续」。停止操作按文档交给 Harness 原生界面。
- 按住岛的空白处拖到别处,刷新后位置仍在;
Esc随时收起。
装进 web profile 并重启后,文档预期小岛出现在工作区右上角浮层里,可拖拽、位置记忆。模型徽章显示当前 provider 与模型。这些是仓库对「安装后应看到什么」的说明;真实 GUI 联调尚未勾选,若浮层没有出现或按钮没有回执,应对照 docs/integration.md 第七节的缺口清单,而不是假定自己装错了。
适用场景与注意事项¶
适合已经在用 dsh --profile web、希望把 Agent 状态收到一块边缘表面的人,也适合想对照 Harness 信号设计 UI 插件的开发者:注入点、双面包形态和协议适配层都写在仓库里。不适合把它当成生产环境里已经稳定的状态栏,也不适合 headless / 纯终端 profile——dsh.client.platform 明确是 web。
使用前建议记住这几条边界:
- DeepSeek Harness 本身是开发者预览,内部
@deepseek-ai/*客户端包没有对外 SDK 版本承诺。第三方 UI 插件依赖的是仓库内契约,上游一改,岛的桥接层就要跟着改。 - 作者自己把项目标成高保真原型。展示侧在桩测试层面大体对齐,动作侧文档估计约七成:取消、审批回执、解除阻塞已接;重试和继续仍待接。files / checks 小票、过程时间线也还没有。
- 岛上的操作按设计是原生面的镜像,不替换 composer、输入栏或顶栏。审批与原生
ApprovalPanel共用同一条回执通道,谁先回执谁结算。 - 插件以当前 dsh 进程权限运行。安装前阅读 GitHub 源码和 MIT 许可证,需要可复现安装时固定 commit,不要只信目录页上的一句话简介。
小结¶
dsh-dynamic-island 把 DeepSeek Harness 网页里本来散落的思考、工具、审批和收尾原因,收成一块 Liquid Glass 风格的状态岛。社区目录的安装入口是 dsh plugin add github:ylifeonlyonce/dsh-dynamic-island;仓库同时提供 Vite 演示和 npm 0.3.5 的 web profile 装法。它目前仍是可安装的设计原型,真实 GUI 联调还在路线图上。若要试用,先看源码和许可证,再按目录页命令安装,并以仓库 docs/integration.md 的缺口清单核对实机行为。
目录页:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-dynamic-island/
GitHub:https://github.com/YLifeOnlyOnce/dsh-dynamic-island