DeepSeek Harness Plugin Hub

发布与管理完整 Harness Profiles,发现适合你的插件。

探索

插件目录环境预设文档中心动态

社区

发布插件联系我们报告问题

相关链接

Plugin Hub GitHubDeepSeek Harness 官方项目系统状态隐私说明
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

独立、非官方社区项目,与 DeepSeek 官方无隶属、授权或背书关系。

DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录
← Plugins
D

dsh-diff-view

Diff View

Diff view:适用于 DSH 客户端插件的可复用双文本差异查看器。diffView 客户端服务提供行级 LCS + 单词范围引擎,以及自包含的分栏/统一差异组件,支持行号、上下文折叠,并附带其自身的样式表。不持久化;不与审批耦合。

插件会安装到这里;不确定时保持 web。

npx -y @deepseek-ai/dsh plugin --profile web add github:joao-paulo-santos/dsh-diff-view#f1ba0ced78292038cefb7b5fb8b937c5d69773ba
README兼容性版本

兼容性与来源证明

Diff View 以 dsh-diff-view 发布,当前版本为 0.4.0。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

DSH 兼容范围
*
运行环境
web
发布来源
github
Registry 更新时间
2026/10/25

版本

0.4.0stable
2026/10/25
0.3.1stable
2026/10/1
0.3.0stable
2026/10/1
查看其余 3 个版本收起版本
0.2.0stable
2026/9/30
0.1.1stable
2026/8/30
0.1.0stable
2026/8/29

相关插件

正在加载相关插件…

最新版
0.4.0
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
未提供
文件数
未提供
Surface
web
许可证
MIT
发布源
github
GitHub
★ 1
周下载
0
最近提交
2026/10/25
查看源码 ↗
README Badge

点击下方 Badge 复制 Markdown,粘贴到 README 即可。

这是你的 Plugin?认领权益 · 优先安全扫描

验证 package.json 声明的 GitHub 仓库,即可管理这个公开页面。认领后,Hub 会优先安排当前版本的安全扫描,并在通过后公开展示结果。

认领这个 Plugin →
报告问题

相关插件

继续浏览 developer-tools 分类下经过校验的插件。

Web App@deepseek-ai/dsh-web-appdsh 浏览器界面捆绑包:位于 dsh-base 之上的 Web 补丁层,加上运行时粘合插件(提供前端 dist、Web 界面提示符、bash 运行时变量和 URL 行)Sdk Minimal@deepseek-ai/dsh-sdk-minimal独立的最小 SDK 配置包:JSON-RPC、一个 DeepSeek 适配器、持久化 Shell 和 JSONL 会话Sdk App@deepseek-ai/dsh-sdk-appdsh SDK 配置包:基于 dsh-base 提供 stdio JSON-RPC 服务和进程生命周期管理Experimental Inspector@deepseek-ai/dsh-experimental-inspector用于 Host 调试和 Client Runtime 检查的实验性跨 realm CDP hub

README

dsh-diff-view

A DeepSeek Harness (DSH) plugin: a reusable two-text diff viewer for client plugins, styled after the harness's native changed-files review. Hunk headers, true line numbers on both sides, split or unified, word-level highlights, and optional syntax highlighting through the same engine the native review uses.

There is no UI of its own to visit. Plugins inject the client service diffView:

// consumer client half, inject: ['diffView', …]

// 1. A FileDiff-styled component from two whole texts:
const Diff = ctx.diffView.diffFileComponent({
  path: 'src/a.ts',        // optional; selects the syntax grammar
  before: oldText,         // either before/after strings…
  after: newText,
  // …or pass precomputed hunks at render time instead:
  // hunks: ctx.diffView.hunksOf(oldText, newText)
  initialMode: 'split',    // 'split' (default) | 'unified'
  showToggle: true,        // false hides the Split/Unified pill
  wrap: false,             // true wraps long lines instead of scrolling
  wordHighlights: true,    // false disables per-word marks
})
return React.createElement(Diff, {})

// Controlled mode (the consumer owns the toggle): pass mode/onModeChange
// as render props, or hand hunks in per render:
Diff({ mode: 'unified', hunks })

// 2. Hunks in the native WorkspaceDiffHunk shape:
const hunks = ctx.diffView.hunksOf(oldText, newText)
//   [{ oldStart, oldLines, newStart, newLines, lines: [' ctx', '-old', '+new'] }]

// 3. The raw engine, for custom layouts:
const rows = ctx.diffView.engine.alignedEditRowsOf(beforeLines, afterLines)
//   rows: [{ kind: 'same'|'replace'|'delete'|'insert', removedLine?, addedLine? }]
const spans = ctx.diffView.engine.wordSpansOfLinePair(beforeLine, afterLine)
//   spans: { removedSpans, addedSpans }: arrays of { text, changed }
ctx.diffView.engine.wordSpanElements(spans.removedSpans, 'ddv-w-del')

Contract

  • Hunks follow the native WorkspaceDiffHunk shape, plus one extension: unnumbered: true draws no header and no numbers, for changes whose true position is unknown. Never lying numbers.
  • Multiple hunks render as ONE continuous file view: when consecutive hunks skip lines, a gap row ("⋯ 16 unchanged lines ⋯") stands in for the hidden region, and a leading gap appears when the first change starts deep in the file. Gaps need true coordinates, so they never render beside an unnumbered hunk.
  • Line numbers come from the diff itself, before any collapse, so they stay true across hunk boundaries.
  • Syntax highlighting reuses the useCodeHighlighter / languageForPath primitives from the platform seed module, so colors match the native review. Without a path, or without the primitives, lines render plain. Word highlights never depend on the primitives.
  • View mode is per component instance unless the consumer controls it.
  • Interactive surfaces pass render props: onLineToggle(hunkIndex, src) with isLinePicked makes +/− rows clickable with a picked marker; hunkExtras(hunkIndex) renders a control inside that hunk's @@ header row; lineMark(hunkIndex, src) renders the GitHub-Desktop-style stage checkmark column for changed lines (filled when the callback returns true); hunkMark(hunkIndex) -> boolean with onHunkToggle(hunkIndex) renders the section checkmark in its own column left of the line-mark column, drawn at the section's first changed row (in split view, in whichever pane holds that change).
  • The ddv-* stylesheet is installed once by this plugin; consumers render no CSS of their own for diff rows.
  • No persistence; no approval coupling; the host half is a stub.

How to install

Requires a DeepSeek Harness checkout and a profile, here web. The plugin has no dependencies:

mkdir -p ~/dsh-plugins && cd ~/dsh-plugins
git clone https://github.com/joao-paulo-santos/dsh-diff-view.git

# from the harness checkout
pnpm dsh plugin --profile web add ~/dsh-plugins/dsh-diff-view

# verify the profile still composes
pnpm dsh --profile web --dump-config

Restart the harness. Plugins that inject the diffView service can now render diffs.

Dependencies

(none)

Plugins dependent on this

  • dsh-approval-diff renders its approval-card hunks with diffFileComponent and the engine
  • dsh-scratchpad powers its mode: 'diff' pads with diffFileComponent (optional; degrades to plain text when absent)
  • dsh-wo-github renders commit patches with diffFileComponent (optional; falls back to the raw patch text)