편집자 노트

kaiarvin/dsh-show-diff

Expanded color-coded diff tool cards for the edit/write tools — DeepSeek Harness client plugin with per-file line numbers

이것은 DeepSeek Harness(DSH) 플러그인입니다. 이 사이트는 GitHub 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 工具卡片,浏览器端:把 editwrite 两个 wire 名称注册进 ui-tool 的 keyed tool.call.toolview slot。每一次文件修改都会在对话流中直接渲染成一张展开的 diff 卡片——头部标明修改动作(EditWrite)及其路径,正文通过本包的行对齐 DiffLines 表面绘制被应用的 hunk,以错误/成功颜色分别呈现删除侧和新增侧,逐行显示旧文件与新文件的行号(以每个 hunk 的起始行为基准重定基,因此是真实的文件坐标),长正文按高度上限折叠,并提供复制与 └ +A -R · N file(s) 底部统计。

新旧两侧按行做有界 LCS 对齐,因此每一行在两侧一致时同时显示旧文件行号与新文件行号,删除行显示旧行号,新增行显示新行号——与 GitHub 风格 diff 的阅读体验一致。工具的结果视图携带每个 hunk 在文件中的起始行(FileDiff 契约上的 oldStartnewStart);调用时视图与旧数据没有这些字段时,退回在 hunk 内从第 1 行编号。

出厂自带的 file-mutation-toolview 行也会渲染同样的 hunk,但放在默认折叠的展开体内,且对话流里最多显示 8 行。本包接管这两个 key,让改动一览无余:卡片默认展开,并可通过头部开关收起整张卡片。注册一个出厂组合已覆盖的 key 会替换该占用者——这些行以 -1 优先级注册,遮蔽出厂单元格(同 key 同优先级会抛错);移除本 bundle 即可恢复出厂行。

数据来源

该行的 hunk 与生命周期只派生自 ui-tool 提供的冻结的工具调用/工具结果切片,绝不读取文件系统:

  • 已结算:当 block.resultViewcard'diff' 时,它携带 editwrite 工具返回的已应用上下文 hunk(edit 的真实前后文、create 的整文件 diff)。这是权威数据,并取代调用时的视图。
  • 运行中:当 block.callViewcard'diff' 时,它携带仅由参数派生的预期改动(覆盖写的 oldTextnull)。
  • 畸形或缺失card: 'diff' 视图的 diffs 不是良构 hunk 数组时,卡片落入空态;失败的修改把面向模型的错误文本留在输出表面,而不是显示 diff。

回放保持稳定:hunk 存于持久化的调用/结果视图上,因此窗口或会话重载会重绘同一处改动。

安装

这是 DeepSeek Harness web 部署的附加客户端插件,不是独立应用:它通过接管 editwrite 工具卡片来扩展已有的 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 优先级注册 editwrite,遮蔽出厂 file-mutation-toolview 单元格;移除该行(或依赖)即恢复出厂卡片。
  • 运行时平台包是 peer 依赖。 @deepseek-ai/* 均为 peer 依赖:你的 DSH 部署已提供它们,无需自行安装。
  • 加完行后重启 web 进程,让新的 dsh.client 包被扫描进 boot manifest。

行为

  • 状态:运行中的调用提示「正在应用修改」;失败显示错误首行与错误状态;中断的调用使用警告状态。仅颜色的提示都附带视觉隐藏的状态文字。
  • 路径:修改的 file_path 渲染为可点击的链接(工作区根路径相对会话 cwd 显示)。
  • 收起:整张卡片可通过开关收起到只剩头部;DiffLines 对超长 diff 保留自己的高度上限。
  • 查看详情:可用时提供标准的执行轨迹 Inspect 入口。

模型体验

本包纯粹是客户端呈现表面:不注册任何工具,不发任何会话事件,不增加任何 token 或模型可见上下文。面向模型的 editwrite 工具及其结果文本不变;只是它们的调用在对话流中的呈现方式不同。

已知限制与暂缓事项

  • 仅含工具结果的 history 页使用通用行:键控分派要求配对的工具调用位于运行时窗口内;分页将工具调用留在窗口外时,工具结果没有工具身份,这项呈现功能不会为恢复该身份而扩展 history 协议约定。
  • 数据缺少文件坐标时行号是 hunk 内的相对行号:调用时视图与较早持久化的结果不带 oldStartnewStart,因此这些 hunk 在 hunk 内从第 1 行编号,而非文件行号;当前工具产生的结果视图携带真实文件行号。
  • 接管而非叠加:占用 editwrite 会替换同名下的出厂 file-mutation-toolview。移除 bundle 即恢复出厂行为;没有共存模式。
REPOSITORY SIGNALS

보안 및 설치 증거

이 점수는 공개 저장소 메타데이터와 이 사이트에 등록된 설치 증거에만 기반하며, 코드 보안 감사와 다릅니다.

출처 추적 가능

공개 플러그인 카탈로그에서 왔으며, 공개 GitHub 저장소로 연결됩니다.

라이선스

저장소가 MIT 라이선스를 선언했습니다.

유지보수 활동

최근 180일 내 코드 업데이트가 있습니다.

설치 증거

재현 가능한 정확한 설치 메타데이터가 아직 등록되지 않았습니다. 저장소 설명에 따라 직접 확인하세요.

설치 라이프사이클 스크립트

검사한 패키지 메타데이터에 설치 라이프사이클 스크립트가 선언되지 않았습니다.