Back to marketplace

dsh-diff-stat

Coding Tools

HaoyueQin/dsh-diff-stat

Web plugin for DeepSeek Harness that adds inline +N −M diff badges on edit/write tool rows and a per-turn file change summary card, with scroll-windowed diffs, PTC/code-dispatch fallback, and undo, no git required.

  • ai-agent
  • code-review
  • cordis
  • deepseek
  • deepseek-harness
  • developer-tools
  • diff
  • diff-viewer
  • dsh
  • dsh-plugin
  • react
  • typescript
  • undo
  • web-plugin
GitHub Stars
6GitHub
Views
0DSH Plugin Hub
Forks
0GitHub
Open issues
0GitHub Issues
Manifest version
0.1.6dsh-diff-stat
Latest push
Sep 2, 2026GitHub
License
MITTypeScript
Plugin type
Host + ClientRuns in both Host and Web Client

Verification and compatibility

This section shows evidence collected by the catalog. Undeclared information is labeled as unknown.

Runtime verified
01Exact source: npm · dsh-diff-stat@0.1.602Validated: Sep 3, 202603Verified Harness: 0.1.0-rc.7
Current-version compatibility
Verified on the catalog Harness version
Declared Harness range
Not declared
Declared platforms
Not declared
Profiles
web
Build approval
No requirement detected
Permissions
Not declared
External services
Not declared
Telemetry
Unknown
No known risk flags found

This is not a security endorsement. Review source, permissions, and configuration before installing.

View evidence and scope

Verification covers only the named source, version, and Harness environment. It does not guarantee future compatibility.

  • dsh-diff-stat@0.1.6
  • The plugin completed a load check in an isolated environment.

README

View source

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

Comments

0
Newest first