dsh-show-diff
Expanded color-coded diff tool cards for the edit/write tools
安装
此插件尚未提供可验证的 bundle,或兼容性检查未通过。请先阅读仓库说明。 阅读完整 README ↗
说明文档
阅读完整 README ↗dsh-show-diff
English | 中文
可安装的插件包。
dsh-show-diff是 diff-viewer 客户端插件的独立可安装包名。它的正式上游归属地在 deepseek-harness monorepo 的packages/client/ui-diff-viewer/(在那里以@deepseek-ai/dsh-client-ui-diff-viewer发布);本仓库是它在dsh-show-diff名下的独立可安装副本。
展开式彩色 diff 工具卡片,浏览器端:把 edit 和 write 两个 wire 名称注册进 ui-tool 的 keyed tool.call.toolview slot。每一次文件修改都会在对话流中直接渲染成一张展开的 diff 卡片——头部标明修改动作(Edit/Write)及其路径,正文通过本包的行对齐 DiffLines 表面绘制被应用的 hunk,以错误/成功颜色分别呈现删除侧和新增侧,逐行显示旧文件与新文件的行号(以每个 hunk 的起始行为基准重定基,因此是真实的文件坐标),长正文按高度上限折叠,并提供复制与 └ +A -R · N file(s) 底部统计。
新旧两侧按行做有界 LCS 对齐,因此每一行在两侧一致时同时显示旧文件行号与新文件行号,删除行显示旧行号,新增行显示新行号——与 GitHub 风格 diff 的阅读体验一致。工具的结果视图携带每个 hunk 在文件中的起始行(FileDiff 契约上的 oldStart/newStart);调用时视图与旧数据没有这些字段时,退回在 hunk 内从第 1 行编号。
出厂自带的 file-mutation-toolview 行也会渲染同样的 hunk,但放在默认折叠的展开体内,且对话流里最多显示 8 行。本包接管这两个 key,让改动一览无余:卡片默认展开,并可通过头部开关收起整张卡片。注册一个出厂组合已覆盖的 key 会替换该占用者——这些行以 -1 优先级注册,遮蔽出厂单元格(同 key 同优先级会抛错);移除本 bundle 即可恢复出厂行。
数据来源
该行的 hunk 与生命周期只派生自 ui-tool 提供的冻结的工具调用/工具结果切片,绝不读取文件系统:
- 已结算:当
block.resultView的card为'diff'时,它携带edit/write工具返回的已应用上下文 hunk(edit 的真实前后文、create 的整文件 diff)。这是权威数据,并取代调用时的视图。 - 运行中:当
block.callView的card为'diff'时,它携带仅由参数派生的预期改动(覆盖写的oldText为null)。 - 畸形或缺失:
card: 'diff'视图的diffs不是良构 hunk 数组时,卡片落入空态;失败的修改把面向模型的错误文本留在输出表面,而不是显示 diff。
回放保持稳定:hunk 存于持久化的调用/结果视图上,因此窗口或会话重载会重绘同一处改动。
安装
这是 DeepSeek Harness web 部署的附加客户端插件,不是独立应用:它通过接管 edit/write 工具卡片来扩展已有的 DSH web 表面,因此你需要先有一个正在运行的 DSH 部署(它提供 bundle 导入的平台模块,如 @deepseek-ai/dsh-client-ui-primitives)。
为什么插件不能独立安装。
@deepseek-ai/*包声明为 peer 依赖——它们由你的 DSH 部署提供,不由本包安装。发布到 npm 的早期 rc 包依赖树不完整(例如dsh-client-runtime@0.0.1-rc.1引用了一个 registry 里不存在的包),因此你不应自行安装它们;请把本插件安装进一个已满足这些 peer 的部署,你的包管理器就绝不会从 npm 拉取@deepseek-ai平台。
包名是 dsh-show-diff(无 scope,任何人都能安装)。两种安装途径:
方式 A——从本 git 仓库安装(无需发布 npm)
把本仓库加为你 DSH 部署的依赖,然后加插件行。以 pnpm 为例:
# 在你的部署 package.json 里,或通过 pnpm add:
pnpm add dsh-show-diff@git+https://github.com/kaiarvin/dsh-show-diff.git
然后在 web 表面的 cordis.patch.yml(或任何更晚的 patch 层)加一行:
- id: ui-diff-viewer
name: 'dsh-show-diff'
方式 B——发布到 npm 后安装
# 一次,在本仓库内,用你的 npm 凭据:
npm publish
# 然后在任意 DSH 部署:
pnpm add dsh-show-diff
…并加上与上面相同的 cordis.patch.yml 行。
前置条件与说明
- 构建产物
lib/随仓库提交。lib/client.js浏览器 bundle 是 DSH 实际加载的部分,已提交到本仓库(从 deepseek-harness monorepo 的上游@deepseek-ai/dsh-client-ui-diff-viewer包构建,使用独立包 id)。因此 git 安装开箱即用。要从源码重建,请在 deepseek-harness checkout 内构建:pnpm --filter @deepseek-ai/dsh-client-ui-diff-viewer run bundle,然后把lib/以dsh-show-diff为 id 复制回来。 - node 半边是空
apply,使插件出现在 host 组合中;浏览器半边经由exports["./client"]提供,由package.json里的dsh.client声明发现。 - 是替换而非叠加。 以
-1优先级注册edit/write,遮蔽出厂file-mutation-toolview单元格;移除该行(或依赖)即恢复出厂卡片。 - 运行时平台包是 peer 依赖。
@deepseek-ai/*均为 peer 依赖:你的 DSH 部署已提供它们,无需自行安装。 - 加完行后重启 web 进程,让新的
dsh.client包被扫描进 boot manifest。
行为
- 状态:运行中的调用提示「正在应用修改」;失败显示错误首行与错误状态;中断的调用使用警告状态。仅颜色的提示都附带视觉隐藏的状态文字。
- 路径:修改的
file_path渲染为可点击的链接(工作区根路径相对会话cwd显示)。 - 收起:整张卡片可通过开关收起到只剩头部;
DiffLines对超长 diff 保留自己的高度上限。 - 查看详情:可用时提供标准的执行轨迹
Inspect入口。
模型体验
本包纯粹是客户端呈现表面:不注册任何工具,不发任何会话事件,不增加任何 token 或模型可见上下文。面向模型的 edit/write 工具及其结果文本不变;只是它们的调用在对话流中的呈现方式不同。
已知限制与暂缓事项
- 仅含工具结果的 history 页使用通用行:键控分派要求配对的工具调用位于运行时窗口内;分页将工具调用留在窗口外时,工具结果没有工具身份,这项呈现功能不会为恢复该身份而扩展 history 协议约定。
- 数据缺少文件坐标时行号是 hunk 内的相对行号:调用时视图与较早持久化的结果不带
oldStart/newStart,因此这些 hunk 在 hunk 内从第 1 行编号,而非文件行号;当前工具产生的结果视图携带真实文件行号。 - 接管而非叠加:占用
edit/write会替换同名下的出厂file-mutation-toolview。移除 bundle 即恢复出厂行为;没有共存模式。