Bundle
dsh-git-review
A Review tab plus fenced git workbench for DeepSeek Harness: workspace changes vs HEAD as a filterable file tree with per-file diffs, a commit graph, and guarded stage/commit/branch/tag/stash/conflict operations, served by an in-host fenced git API.
- Source
- HaoyueQin
- License
- MIT
- Updated
- Updated yesterday
Readme
<p align="center">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="docs/banner-dark.svg">
<img src="docs/banner.svg" alt="DSH Git Review" width="720">
</picture>
</p>
# DSH Git Review
<p align="center">English | <a href="README.zh.md">中文文档</a></p>
<p align="center">
<a href="https://www.npmjs.com/package/dsh-git-review"><img src="https://img.shields.io/npm/v/dsh-git-review?style=flat-square" alt="npm version"></a>
<a href="https://www.npmjs.com/package/dsh-git-review"><img src="https://img.shields.io/npm/dt/dsh-git-review?style=flat-square" alt="npm downloads"></a>
<img src="https://img.shields.io/badge/dsh-plugin-4D6BFE?style=flat-square&logo=deepseek&logoColor=white" alt="dsh plugin">
<img src="https://img.shields.io/badge/dsh-0.1.2--rc.1..0.1.5--rc.1-4D6BFE?style=flat-square" alt="harness 0.1.2-rc.1 through 0.1.5-rc.1">
<img src="https://img.shields.io/badge/platform-web-8A9CF5?style=flat-square" alt="platform: web">
<a href="LICENSE"><img src="https://img.shields.io/badge/License-MIT-yellow.svg?style=flat-square" alt="License: MIT"></a>
<img src="https://img.shields.io/badge/i18n-zh%20%7C%20en-success?style=flat-square" alt="i18n: zh | en">
<a href="https://awesome-dsh-plugin.com"><img src="https://awesome-dsh-plugin.com/badge.svg" alt="Awesome DSH Plugin"></a>
<a href="https://github.com/HaoyueQin/dsh-git-review/graphs/commit-activity"><img src="https://img.shields.io/github/commit-activity/t/HaoyueQin/dsh-git-review?style=flat-square" alt="Commit activity"></a>
<a href="https://github.com/HaoyueQin/dsh-git-review/commits"><img src="https://img.shields.io/github/last-commit/HaoyueQin/dsh-git-review?style=flat-square" alt="Last commit"></a>
</p>
A **Review tab plus fenced git workbench** for DeepSeek Harness: everything an agent changed, laid out for a decision — file tree, diffs, commit graph — with guarded git operations in the same place.
<p align="center">
<img src="docs/demo.svg" alt="DSH Git Review demo" width="720">
</p>
## Screenshots
<p align="center">
<img src="docs/review-changes.png" alt="Changes view: syntax-highlighted file with the filterable tree" width="720">
<br>
<em>Changes view — syntax-highlighted file with the filterable tree</em>
</p>
<p align="center">
<img src="docs/review-graph.png" alt="Graph view: commit detail with side-by-side diff and word highlights" width="720">
<br>
<em>Graph view — commit detail with side-by-side diff and word highlights</em>
</p>
## What it does
DSH Git Review registers a **Review** tab next to Chat and Trajectory in the session view. It shows the workspace repository against HEAD — or any two refs — and lets you act on what you see without leaving the tab:
- **Review first**: filterable file tree with status badges, side-by-side / unified / full-file diffs, hunk folding, word-level change highlights, syntax coloring, and diff search across file names, diff text, and file content. Keyboard-first: `j`/`k` move between files, `/` focuses search.
- **Decide with history**: a lane commit graph with per-commit files and diffs, blame gutters, per-file history, and reading any file version from history.
- **Act under guard**: stage / unstage / discard per file or per hunk, commit (plus amend, Ctrl+Enter), commit-and-push, and push; branches (create / switch / rename / delete / merge / track remotes) with fetch and pull; history operations (reset / revert / cherry-pick, per-commit actions from the graph); lightweight tags (create / delete / push); stash; and merge-conflict resolution (ours / theirs, continue / abort). Every write needs explicit confirmation, destructive ones ask twice, and everything locks while the agent is running.
- **Close the loop**: comment on any diff line and drop it into the composer draft, mark files reviewed (auto-cleared when the file changes again), and keep comment drafts per workspace.
- **Preview files**: markdown renders with the shell's own Markdown engine, HTML / images / SVG show inline, PDFs open sandboxed — every preview has a source view toggle, and office documents open in your external apps from the tree's right-click menu.
- **Picture diffs**: image changes (PNG / JPG / GIF / WebP / BMP / AVIF / ICO / SVG) render as pictures right inside the diff view — 2-up (side by side, or stacked in unified), swipe, onion skin and a difference blend, with the source diff one click away.
Preferences (diff layout, default search scope, graph shape, matching, whitespace, syntax) live in the harness settings Plugins tab and sync instantly with the Review tab.
## Install
From npm:
```bash
dsh plugin --profile web add dsh-git-review
dsh web
```
Or from a local tarball:
```bash
pnpm install
pnpm build
pnpm pack
dsh plugin --profile web add ./dsh-git-review-<version>.tgz # the exact filename pnpm pack prints
dsh web
```
Requires DeepSeek Harness `0.1.2-rc.1` through `0.1.5-rc.1` (prerelease series are pinned one by one in `peerDependencies`) and git on the host PATH. Outside a git repository the tab offers file browsing with one-click `git init` instead of the review workbench — never a blank screen.
## Checks
```bash
pnpm typecheck # strict, noEmit
pnpm check:parse # pure-function regression (Node >= 23.6 native TS stripping)
pnpm check:git # real-git fixture integration (repositories under .tmp-check-git/)
pnpm build # lib/index.js (node) + lib/client.js (browser factory bundle)
```
## How it works
- **Host half**: an in-process cordis plugin serving a fenced prefix route for versioned API actions over JSON (non-JSON bodies get 415, which also closes the classic no-cors write vectors). Every path is fenced inside the session workspace repository, every ref is re-resolved server-side, commit ids only travel as 40-hex, and GIT_DIR-style environment hijacks are scrubbed.
- **Client half**: a conversation-view slot component; the host route is optional — without it the tab says so instead of erroring.
- **Scale guards**: 20k-row render cap, 2 MiB per-file diff cap, 500-commit graph pages with load-more, an 8 MiB streaming byte cap on the largest git answers plus a separate 8 MiB preview cap (both truncate instead of buffering whole), and exact-count probing within a 32 MiB per-status budget.
- Interface languages: Simplified Chinese and English, following the harness locale; dark and light themes via semantic tokens.
## Activity
<p align="center">
<a href="https://gitstock.org/HaoyueQin/dsh-git-review"><img src="https://gitstock.org/HaoyueQin/dsh-git-review/stock.svg" alt="HaoyueQin/dsh-git-review GitStock K-Line Chart"></a>
</p>
MIT © HaoyueQin
Install
dsh plugin --profile web add github:HaoyueQin/dsh-git-review
Profile: web
With the hub plugin installed, ask your agent to install it by name — it resolves the same plan shown here.
dsh plugin --profile web add github:stvlynn/dsh.fish#path:packages/dsh-plugin-hub
install dsh-git-review from the hub
- This package builds from source on install. pnpm will ask you to allow its build script — that is permission to run the package’s code on your machine, outside the agent sandbox. Only allow sources you trust.
- This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.