返回插件市场

dsh-diff-stat

编程与工具

HaoyueQin/dsh-diff-stat

DeepSeek Harness 网页插件:在编辑/写入工具行上显示内联 +N −M 差异徽章,并展示每轮文件变更摘要卡片,支持滚动窗口差异、PTC/代码分发回退和撤销,无需 git。

  • ai-agent
  • code-review
  • cordis
  • deepseek
  • deepseek-harness
  • developer-tools
  • diff
  • diff-viewer
  • dsh
  • dsh-plugin
  • react
  • typescript
  • undo
  • web-plugin
GitHub Stars
6GitHub
浏览量
0DSH Plugin Hub
Forks
0GitHub
开放问题
0GitHub Issues
Manifest 版本
0.1.6dsh-diff-stat
最近推送
2026年9月2日GitHub
许可证
MITTypeScript
插件类型
Host + Client同时运行于 Host 与 Web Client

验证与兼容性

这里展示目录实际采集到的证据;未声明的信息会明确标为未知。

运行时已验证
01精确来源: npm · dsh-diff-stat@0.1.602验证时间: 2026年9月3日03验证版本: 0.1.0-rc.7
当前版本兼容性
已在当前目录版本验证
声明的 Harness 范围
未声明
声明的平台
未声明
适用 Profile
web
构建授权
未检测到需要
权限声明
未声明
外部服务
未声明
遥测声明
未知
未发现已知风险标记

这不是安全背书;安装前仍应查看源码、权限和配置。

查看证据与判定范围

验证仅覆盖标出的来源、版本和 Harness 环境,不代表未来版本仍然兼容。

  • dsh-diff-stat@0.1.6
  • 插件已在隔离环境完成加载检查。

README

查看源文件

DSH Diff Stat

English | 中文

Awesome DSH Plugin dsh plugin npm npm downloads dsh platform License: MIT i18n Commit activity Last commit

A DeepSeek Harness Web plugin that visualizes agent file changes: inline +N −M badges on mutation tool rows, a per-turn file-change summary card, and full aligned diffs on click. Covers native edit/write calls, the minimal preset's str_replace_editor, and Code Dispatch (PTC) sub-calls end to end. No git dependency, no third-party plugin dependencies.

Features

  • Kernel target: harness ≥ 0.1.2-rc.1 — one build for the current production line only: the uiConversation event registry, tool.call.toolview keyed slot and conversation.chat.turnTail chain ship their 0.1.2-rc.1+ shapes, and diff hunks are read from the tools' persisted wire meta. Harness 0.1.1-rc.x and earlier (including the pre-0.1.2-alpha.5 alpha line) are NOT supported by this version — install dsh-diff-stat@0.1.6 (or an older release that covers them) on those kernels
  • Inline +N −M badges — takes over the stock mutation rows for edit, write and str_replace_editor (keyed lower-priority shadow; uninstall restores stock). Counts are the real changed lines — the same LCS walk the diff renders — estimated from the arguments while running, exact once the result settles
  • Aligned diff window — expanding a row opens a height-capped scrollable unified view. Both sides are LCS-aligned first: shared lines render as up to ±3 lines of context around each change, untouched runs collapse into ⋯, and the footer counts exactly the rendered rows
  • Line-number gutters — the file view numbers its lines 1..N and the diff window pins each hunk to its real position in the current file (one cached fenced read, uniqueness-checked): deleted rows read the old side, context/added rows the new side, with the changed rows' accent bars. A hunk that cannot be located (host absent, drifted file, over budget) numbers window-relatively 1..N, so the gutter always renders
  • Per-turn summary card — a collapsible "N files changed +X −Y" bar at each turn's tail; per-file rows with type icons, directory, ±lines, review, open ▾ and undo. Same-file edits merge and accumulate in settlement order
  • Code Dispatch (PTC), end to end — dispatch sub-calls carry no wire diff view: rows fall back to the argument-derived diff, and the summary card joins their files from the stock chat tool tree, so a pure Code-Mode turn still gets its card. subCallId dedup keeps replays from double-counting
  • File-context boost — bare argument fragments gain up to ±3 lines of real file context when expanded: the booster reads the file through the host's fenced API, locates the fragment's post-image and rebuilds the hunk (best-effort; unlocatable fragments keep their bare form)
  • Undo — reverts the turn's files to their pre-turn state: reverse uniqueness-checked hunk peeling, turn-start snapshots prove a file was CREATED (not overwritten) before its deletion, drifted files rejected before any write, atomic commits
  • Inline view & open-with — "open" expands a height-capped file preview below the row; the ▾ menu keeps system open, Explorer reveal, VS Code, and absolute/relative path copy
  • Frosted glass (optional) — with deepseek-harness-background installed, every plugin surface joins its shared glass recipe; without it the stock opaque look stays untouched — graceful degradation, zero third-party runtime additions (peer modules come from the harness)
  • zh / en — copy follows the Web UI language (locale service)

Screenshots

Turn summary cardTaken-over row & aligned diff
turn summary card with per-file rows and inline previewtaken-over edit row with badge and aligned diff

Per-turn card with review / open / undo per file (left); an inline badge with its aligned diff window (right), both under the optional background glass.

How it works

  • Badges & diffs: registers the edit/write/str_replace_editor keys of the tool.call.toolview keyed slot at priority −1 (shadows the shipped rows). Diff data follows the applied wire meta (oldText/newText with ±3 file context) with the call-time argument fallback for PTC sub-calls, so a truncated window that dropped the call head still renders from the result meta
  • Turn summary card: a ConversationNodeDefinition accumulator (turn/start, tool/call, tool/result(append), tool/code-dispatch) publishes Turn data; the conversation.chat.turnTail chain claims rendering — modeled on the official ui-deliverables plugin. Code-Dispatch files join from the stock chat tool tree, whose tool-call nodes already fold every dispatch into its root call's subCalls
  • Context boost: argument-derived hunks are marked by object identity at construction; on expand the booster reads the file through the fenced API (LRU-cached), locates the fragment's post-image and rebuilds the hunk with shared lines. Anything unlocatable renders as-is
  • Host half (optional): a same-origin prefix route serves a fenced API (files.read, capture-snapshot per turn, undo, open-with) — realpath containment checked before and after resolution, symlink rejection, UTF-8 round-trip validation, display reads capped at 512 KiB with a truncation flag, a 32 MiB undo gate, and atomic writes. When the host half is absent the dependent actions hide themselves
  • Frosted glass bridge (optional): a zero-dependency consumer of the background plugin's window.__DSH_BACKGROUND_GLASS__ registry — subscribing to its ready event (both arrival orders + hot reload); the bridge never appearing leaves the ordinary UI untouched

Install

# from npm
dsh plugin --profile web add dsh-diff-stat

# or from GitHub
dsh plugin --profile web add github:HaoyueQin/dsh-diff-stat

# restart dsh web to take effect
dsh web

Uninstall:

dsh plugin --profile web remove dsh-diff-stat

Development

pnpm install        # devDependencies; prepare builds lib/ automatically
pnpm build          # host half → lib/index.js + browser half → lib/client.js (one tsdown run)
pnpm typecheck      # both halves via tsc
pnpm check:align    # diff aligner & data-model assertions (needs Node >= 23.6)

Kernel compatibility: this build targets harness >= 0.1.2-rc.1 (compile-time types pinned to the 0.1.2-rc.1 devDependencies). Every 0.1.2-rc kernel so far shares every surface this plugin touches — verified against DSH master 76fda72979 (rc.1 + 99 commits); re-verify against each new rc before shipping. Older kernels (0.1.1-rc.x, the pre-0.1.2-alpha.5 alpha line) need an older plugin release — install dsh-diff-stat@0.1.6 there. Every future release note repeats this hint.

Activity

HaoyueQin/dsh-diff-stat GitStock K-Line Chart

License

MIT

评论

0
最新优先