dsh-plugin-live-diff:DSH 文件编辑的流式 Diff 与磨砂玻璃背景

前言

在 DeepSeek Harness(DSH)里让模型改文件时,宿主会一边接收流式工具调用、一边把 argsRaw 拼起来。默认对话卡片却要在 JSON.parse 成功之后才能渲染 diff,流式过程中参数往往是截断的 JSON,于是卡片会一直空白,直到调用结束才一次性出现变更。

如果你希望在模型还在输出 edit / write 时就能看到逐字增长的 diff,并可选地把同一条流画在整个应用背后做磨砂玻璃效果,维护者 phoenixyun 的客户端插件 dsh-plugin-live-diff(当前包版本 0.2.1,MIT)针对的就是这个缺口。它只改渲染层,不写你的文件,也不动其他包。

这是什么

包自带 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 展示

  1. 浮动面板 Live Diffs:字符到达时原地修补 diff;左缘可拖宽度,刷新后记忆。
  2. 对话区卡片:对 edit / write 使用 DSH 自带的 DiffBlock,与壳层 diff 卡片一致;通过 keyed 注册替换内置的 FileMutationRow(升级 DSH 若改动 tool 键或 toolview 契约,可能表现为空面板而非报错)。
  3. 容错 JSON 读取:未闭合的字符串字段返回可用但不完整的结果,而不是 null。
  4. 流式语法高亮:支持 Python、JS/TS、JSON、YAML、shell、Markdown 等语言配置。
  5. 滚动与 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)。

典型用法

  1. 安装并重启(或按市场指引刷新 / 重启)。
  2. 在 DSH 会话中让模型对文件执行 edit 或 write。
  3. 观察右侧或浮动的 Live Diffs 面板随流式增长;对话区对应工具卡片亦以 DiffBlock 展示。
  4. 需要调背景时:点右下角调谐钮,或编辑插件目录下由宿主 serve 的 style.css(约 1 秒生效)。
  5. 面板空白时:看面板底部诊断,或查主机日志(默认 …/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 的空窗期。

羽毛球分组比赛记分
小程序二维码

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

小夜