dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
DeepSeek Harness (dsh) plugin: Git status pill in the session header — branch, dirty counts, ahead/behind, recent commits & changed files.
A Git status visualizer for DeepSeek Harness (dsh) Web UI — a session-header pill, a detail popover, and a full Git center. No terminal needed.
Read this in 简体中文
+N −N ?N) · ahead/behind at a glanceA status capsule in each session header. Click it for the detail popover — repository root, status counts, recent commits, changed files with inline stage / unstage / discard, and branch operations:
| State | Pill |
|---|---|
| Clean | ● main |
| Dirty | ● main · +2 −1 ?3 |
| Ahead / behind | ● main · ↑1 ↓2 |
| Detached HEAD | ● (detached HEAD) · a1b2c3d |
| Not a git repo | Dimmed 无 Git 仓库 |
Opened from the popover — the center keeps all four tabs mounted, so selections, filters and scroll positions survive tab switches. History is the default landing tab.
A paginated commit list with a rendered branch graph — windowed rendering keeps thousands of rows smooth, and the selected row lights up with a glowing track (cyber-style, reduced-motion aware):
feat/*, fix/*, remote origins) start collapsed for a tidy list; a fetch button syncs remote refs今天 means today since local midnight (not the last 24 h); 24 小时内 and 7/30/90-day ranges are separate optionsSelecting a commit shows its subject · body · changed-file tree (foldable, status-colored). Clicking a file in the tree jumps to the Changes tab and shows that file's diff as of that commit, marked by a commit-hash badge:
IDE-style groups (staged / unstaged / untracked), per-file & bulk stage / unstage / discard (two-step confirm), and a commit box:
The diff viewer:
对照 (side-by-side, default) / 变更前 / 变更后; the split divider is draggable (20%–80%).md files get a 渲染 mode: formatted headings, lists, tables and fenced-code highlighting; mermaid diagrams render natively (with a source/rendered toggle and a clear parse-error fallback)新增 / 已删除 badgeTurn work records answer "what did this round touch, and who touched it":
new N plus three-way counts: 本 this session's agent · 会 other sessions' AI · 外 human edits无变更产出 mark≈; hover and press ⇄ to reclassify authorship (persisted per repository)新Display presets (minimal / standard / full, purely derived — tweaks snap back when they match a preset again), per-component switches for pill and popover, popover section ordering, and diff-viewer options:
最近提交 count (0 = hidden)Requires a running DeepSeek Harness with the web profile:
dsh plugin --profile web add dsh-git-ui
Restart dsh web. Open a session in a git repository and the pill appears in the header. Remove with dsh plugin --profile web remove dsh-git-ui.
Local development install:
dsh plugin --profile web add ./links this repo. Keep the dev peer symlinks innode_modules/@deepseek-ai/*(see Development).
Each session shows the status of its own working directory; non-repository sessions show a dimmed placeholder.
All defaults work out of the box. Advanced users may override the plugin config in the profile's cordis.patch.yml:
- id: git-ui
config:
defaultRefreshIntervalMs: 60000 # polling interval (ms); 0 disables polling
maxChanges: 200 # max changed-file entries in a snapshot
timeoutMs: 3000 # per git-command timeout (ms)
maxStatusBytes: 8388608 # status-output cap before truncation
dshHome: /path/to/harness-home # optional: Harness home (default $DSH_HOME → ~/.dsh)
^22.19.0 || >=24.0.0>= 0.1.0-rc (developer preview)git on the host machinemaxChanges), with spill-file recovery for oversized status output.sessionId — the host resolves cwd and runs git with path guards.$(...), globs, eval) — they fall back to 外 with a visible ≈ mark; cold sessions are skipped; observation timelines are capped.pnpm install
# Link the host-provided peers so a local profile install resolves them:
mkdir -p node_modules/@deepseek-ai
for p in "$HOME"/.dsh/profiles/node_modules/@deepseek-ai/*; do
ln -sfn "$p" "node_modules/@deepseek-ai/$(basename "$p")"
done
pnpm run typecheck && pnpm test && pnpm run build
dsh plugin --profile web add ./ # local install; restart dsh web to verify
The plugin is layered to isolate the dsh platform behind a narrow adapter seam:
flowchart TB
subgraph Biz["Business Layer — zero dsh imports"]
HostBiz["src/host/ · core / actions / queries / parser"]
ClientBiz["src/client/ · controller / GitPill / GitCenter"]
end
subgraph Contracts["Contracts Layer — stable interfaces"]
C["src/contracts/ · host-endpoints / client-platform / ui-primitives"]
end
subgraph Adapters["Adapters Layer — the only dsh-aware code"]
A["src/adapters/dsh/ · client-adapter / ui-primitives / types"]
end
HostBiz --> C
ClientBiz --> C
C --> A
A --> DSH["dsh platform · cordis / typert / ui-primitives"]
src/contracts/ — the plugin's own stable interfaces, no dsh importssrc/host/ / src/client/ — business logic against those interfacessrc/adapters/dsh/ — the only place importing @deepseek-ai/*; a dsh upgrade only changes here