前言¶
在 DeepSeek Harness(DSH)里让模型改文件时,宿主会一边接收流式工具调用、一边把 argsRaw 拼起来。默认对话卡片却要在 JSON.parse 成功之后才能渲染 diff,流式过程中参数往往是截断的 JSON,于是卡片会一直空白,直到调用结束才一次性出现变更。
如果你希望在模型还在输出 edit / write 时就能看到逐字增长的 diff,并可选地把同一条流画在整个应用背后做磨砂玻璃效果,维护者 phoenixyun 的客户端插件 dsh-plugin-live-diff(当前包版本 0.2.1,MIT)针对的就是这个缺口。它只改渲染层,不写你的文件,也不动其他包。
这是什么¶
- 名称:
dsh-plugin-live-diff(市场搜索可用 Live Diffs) - 分类:客户端插件(
dsh.client,Web 平台注入) - 维护者:phoenixyun
- 目录页:SkillHub 插件页
- 源码:github.com/phoenixyun/dsh-plugin-live-diff
包自带 cordis.patch.yml 并声明 dsh.bundle.patch,安装后一步挂载,无需手写 patch 行或手动 junction(旧版手装方式需先清理,否则会加载两次)。
它解决什么问题¶
DSH 已有 diff 卡片,且宿主会用 argsRaw: base.argsRaw + chunk.argumentsDelta 累积流式参数。客户端 UI 在解析时若遇到未完成 JSON 会直接失败:
// dsh-client-ui-tool
value = JSON.parse(call.argsRaw); // throws on a truncated document
if (typeof oldText !== "string" || typeof newText !== "string") return null;
本插件提供对半到达参数字符串的容错读取器,并把结果放到可读的界面上;自 0.2.0 起,同一条流还可作为全窗磨砂玻璃背景绘制。
核心功能¶
流式 Diff 展示¶
- 浮动面板
Live Diffs:字符到达时原地修补 diff;左缘可拖宽度,刷新后记忆。 - 对话区卡片:对
edit/write使用 DSH 自带的DiffBlock,与壳层 diff 卡片一致;通过 keyed 注册替换内置的FileMutationRow(升级 DSH 若改动 tool 键或toolview契约,可能表现为空面板而非报错)。 - 容错 JSON 读取:未闭合的字符串字段返回可用但不完整的结果,而不是
null。 - 流式语法高亮:支持 Python、JS/TS、JSON、YAML、shell、Markdown 等语言配置。
- 滚动与 DOM:流式时盯住最新行;编辑结束后面板不立刻清空;已完成编辑按增量 patch DOM,避免每轮轮询重播淡入。
全窗磨砂玻璃背景(0.2.0+)¶
同一份 diff 流画在应用背后。大不透明区域按视口面积与计算背景测量(不靠类名匹配):覆盖 ≥85% 窗口的表面被清空以便透出背景,不透明面板 ≥0.1% 变为磨砂玻璃;祖先已玻璃化的嵌套表面会跳过,避免双层发灰。
- 支持 液态玻璃(
backdrop-filter: url(#dshld-lg-lens)折射)或退化为普通模糊。 - 指针高光、默认白色前景(可调透明度)等可在调谐面板中改。
- 标题栏保持壳层原样;样式表从磁盘 serve,浏览器约每 1.5 s 重拉,
style.css改动约 1 秒内生效,无需重启或重构建。
右下角圆钮打开 外观调谐(中文,9 个滑条 + 2 个开关),取值写入 localStorage 键 dshld.tuner.v2;重置恢复默认。
Windows 桌面标题栏(可选样式)¶
在标记了 data-windows-titlebar 的 Windows 桌面应用中,插件用纯 CSS 将会话头整体上移到原生标题栏保留带,与侧栏、原生最小化/关闭按钮留白配合;全屏与普通浏览器页面不启用此规则。
逃生与调试¶
- 在 serve 的
style.css中加入/* dshld-off */可即时关闭整套背景效果。 - URL 加
?dshld-demo=1可播放合成、持续增长的 diff,便于调样式。 - 控制台:
window.__dshldDebug.state()/.probe()/.scan()/.demo()。
演示视频见 README 中的 Bilibili 26 秒 Demo。
环境要求¶
README 写明在 DSH 0.1.5-rc.1、桌面端 0.2.1-rc.5(Windows,cordis 4.0.2)上构建验证。package.json 中 engines.dsh 为 >=0.1.5-rc.1,peerDependencies 含 @deepseek-ai/cordis ^4.0.2。
插件通过 DSH 内部客户端面(ctx.sessions、ctx.slots、ctx.webServer 等)工作,无稳定公开扩展 API;换 DSH 构建后建议查看诊断信息。
安装与启用¶
插件市场(推荐):打开 Settings → Plugins → Plugin Market(设置 → 插件 → 插件市场),搜索 Live Diffs 或 dsh-plugin-live-diff 安装。多数客户端插件刷新页面即可;若市场提示,需一键重启进程。
命令行(dsh web 或自定义 profile):
dsh plugin --profile <profile> add github:phoenixyun/dsh-plugin-live-diff
DSH Desktop:使用应用内 Settings → Plugins;桌面端自有插件管理器与 profile,CLI 装到 web profile 不会作用到桌面端。
新装的主机包需在启动时被看见,安装后请重启;插件内容支持 patchReload: live,但 client bundle 变更仍需重启并硬刷新(Ctrl+Shift+R)。
典型用法¶
- 安装并重启(或按市场指引刷新 / 重启)。
- 在 DSH 会话中让模型对文件执行
edit或write。 - 观察右侧或浮动的 Live Diffs 面板随流式增长;对话区对应工具卡片亦以
DiffBlock展示。 - 需要调背景时:点右下角调谐钮,或编辑插件目录下由宿主 serve 的
style.css(约 1 秒生效)。 - 面板空白时:看面板底部诊断,或查主机日志(默认
…/dsh-plugin-live-diff/diag.log,可用环境变量DSH_LIVE_DIFF_LOG覆盖);亦可访问宿主路由/live-diff-diag。
开发者在仓库根目录可运行:
npm test
README 说明会跑六套测试并各打印一行,全部 exit 0。
适用场景与注意¶
适合谁:经常在 DSH 里看模型改代码、希望流式过程可见、或想用 diff 流做沉浸式背景的开发者。
务必知晓:
- 插件在当前 DSH 进程权限下运行,安装前请阅读 源码 与 MIT 许可证,自行判断信任边界。
- 仅替换 UI 渲染,不写入工作区文件。
- 依赖未文档化的内部钩子;DSH 大版本升级后先试用并看诊断。
- 社区目录 SkillHub 为独立站点,与 DeepSeek / 幻方无官方从属关系;生态上 DSH 倾向「一切皆插件」,本插件可从市场或上述命令安装。
结尾¶
dsh-plugin-live-diff 补上 DSH 流式 edit / write 的容错 diff 阅读器,并把同一流延伸到浮动面板、对话卡片与可选的全窗磨砂背景;对跟模型一起「边写边看」改文件的场景,能减少等到工具调用结束才看到 diff 的空窗期。