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

@linxin666/dsh-client-ui-git-graph

Client Ui Git Graph

外部 dsh Web GUI 插件:空会话 Git 分支选择器和 Git 图,包含实际的主机端 Git 操作与防护,作为 dsh 配置文件包

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

npx -y @deepseek-ai/dsh plugin --profile web add @linxin666/dsh-client-ui-git-graph@0.4.14
README兼容性版本

兼容性与来源证明

Client Ui Git Graph 以 @linxin666/dsh-client-ui-git-graph 发布,当前版本为 0.4.14。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

DSH 兼容范围
*
运行环境
web
发布来源
npm
Registry 更新时间
2026/11/4

版本

0.4.14stable
2026/11/2
0.4.13stable
2026/10/31
0.4.12stable
2026/10/29
查看其余 62 个版本收起版本
0.4.11stable
2026/10/27
0.4.10stable
2026/10/26
0.4.9stable
2026/10/26
0.4.8stable
2026/10/20
0.4.7stable
2026/10/17
0.4.6stable
2026/10/10
0.4.5stable
2026/10/5
0.4.4stable
2026/9/29
0.4.3stable
2026/9/26
0.4.2stable
2026/9/24
0.4.1stable
2026/9/23
0.4.0stable
2026/9/23
0.3.24stable
2026/9/20
0.3.23stable
2026/9/16
0.3.22stable
2026/9/13
0.3.21stable
2026/9/12
0.3.20stable
2026/9/10
0.3.19stable
2026/9/9

相关插件

正在加载相关插件…

最新版
0.4.14
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
925.3 kB
文件数
142
Surface
web
许可证
Apache-2.0
发布源
npm
GitHub
★ 10.1k
周下载
35,572
安全扫描
✓ v0.4.14 扫描通过
最近提交
2026/11/4
查看源码 ↗
README Badge

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

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

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

认领这个 Plugin →
报告问题
0.3.18
stable
2026/9/8
0.3.17stable
2026/9/7
0.3.16stable
2026/9/5
0.3.15stable
2026/9/5
0.3.14stable
2026/9/3
0.3.13stable
2026/9/3
0.3.12stable
2026/9/2
0.3.11stable
2026/9/1
0.3.10stable
2026/8/31
0.3.9stable
2026/8/30
0.3.6stable
2026/8/27
0.3.5stable
2026/8/26
0.3.4stable
2026/8/25
0.3.3stable
2026/8/24
0.3.2stable
2026/8/23
0.3.1stable
2026/8/23
0.3.0stable
2026/8/23
0.2.9stable
2026/8/22
0.2.8stable
2026/8/22
0.2.7stable
2026/8/21
0.2.6stable
2026/8/21
0.2.5stable
2026/8/20
0.2.4stable
2026/8/19
0.2.3stable
2026/8/19
0.2.2stable
2026/8/19
0.2.1stable
2026/8/18
0.2.0stable
2026/8/18
0.1.20stable
2026/8/17
0.1.19stable
2026/8/16
0.1.18stable
2026/8/16
0.1.17stable
2026/8/16
0.1.16stable
2026/8/15
0.1.15stable
2026/8/15
0.1.14stable
2026/8/15
0.1.13stable
2026/8/15
0.1.12stable
2026/8/14
0.1.11stable
2026/8/14
0.1.10stable
2026/8/14
0.1.9stable
2026/8/14
0.1.8stable
2026/8/14
0.1.7stable
2026/8/14
0.1.6stable
2026/8/14
0.1.3stable
2026/8/13
0.1.2stable
2026/8/13

相关插件

继续浏览 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 Profile@deepseek-ai/dsh-experimental-inspector-profile用于原始 Session 日志和 Chat 节点检查的可选 Web 捆绑包

README

dsh-git-graph · Visual Git Commit Graph & Multi-Agent Worktree Isolation for DeepSeek Harness (DSH)

English | 中文

   

Visual Git Commit Graph & Multi-Agent Worktree Isolation for DeepSeek Harness (DSH)
Interactive Commit Graph · Blank-Session Branch Switcher · Worktree Isolation · Conflict Prevention · Security Guards

An external plugin for DeepSeek Harness (DSH) Web GUI and official desktop client: featuring an interactive Git branch switcher and a visual Git commit graph panel. The branch switcher appears exclusively on blank conversations, mounting on the shell's composer dock (conversation.input.dock), the seam every shipped shell declares. In blank conversation hero state, the chip elevates into the hero row directly right of the agent-preset chip, styled with authentic 28px pill layout and --dsw-* theme tokens. Active sessions hide the switcher. Git operations run in the host process (git switch) while the UI renders via React.

Mirrors ZCode's GitBranchSwitcher behavior: searchable dropdown, active checkmark, "Create and switch branch... / Git Graph" footer actions, safety guards (unresolved merge conflicts, operations in progress, branch locked by other worktrees), and clear error diagnostics.

Repository layout and build

The plugin is a self-contained cordis plugin package inside the dsh-web family monorepo (see "Generic install" below); no DeepSeek Harness source checkout is involved. All peer APIs come from the official @deepseek-ai/* npm SDK declared in devDependencies, resolved from node_modules, and the type gate is pnpm run typecheck (tsc -b over the package's own host and client programs).

pnpm install
pnpm run typecheck   # tsc -b (host + client programs)
pnpm test            # vitest (core pure functions / real git service / jsdom components)
pnpm run build       # tsc -b && tsdown (lib/index.js + lib/client.js)

lib/client.js is the browser bundle (a closure-factory artifact, window.__ModuleLoader__.load), served by the host's client-modules at /plugins/<id>/client.js; both tsdown.config.ts and tsdown.prepare.config.ts import the one shared client preset at shared/tsdown.client.ts (with the browser platform seed table it reads), and the package keeps no copy of either.

Git installs go through the prepare script: tsdown --config tsdown.prepare.config.ts transpiles directly from src without type checking (tsconfig.prepare.json is self-contained).

Activation

This package is a dsh profile bundle (package.json declares "dsh": { "bundle": { "patch": "./cordis.patch.yml" } }). After activation, the next dsh web (or corresponding profile) startup has the bundle patch's insert line mount ui-git-graph (host half: git service + /git/* routes) together with the browser half (dsh.client declaration) into the Web composition; after a page refresh, the branch pill appears in the hero row after the agent-preset seat for a blank session and is absent from an active session.

Generic install (any machine)

This plugin is merged into the dsh-web family monorepo (github.com/zhu1090093659/dsh-web). The plugin is published to npm; one-line install recommended:

dsh plugin --profile web add @linxin666/dsh-client-ui-git-graph@latest

Or install the family aggregate package @linxin666/dsh-web-all all at once (same one-line dsh plugin --profile web add @linxin666/dsh-web-all@latest).

Install from the repository when you need to debug code:

git clone https://github.com/zhu1090093659/dsh-web.git
cd dsh-web
pnpm install && pnpm -r build
dsh plugin --profile web add link:$(pwd)/packages/dsh-git-graph

The github: install form applies to a standalone repo whose package sits at the repository root (the prepare script builds self-contained; pnpm ≥10 rejects it the first time, add the package key to the profile's pnpm-workspace.yaml allowBuilds per the printed error and retry). For subpackages of a monorepo use the link: form above.

Local development loop (this repo checkout)

dsh plugin --profile <name> add link:/absolute/path/to/dsh-git-graph

A link: install references the local directory directly; a rebuild takes effect immediately without reinstalling (after a code change, pnpm run build then refresh the page). Note that link: takes an absolute path (~ is expanded by the shell, not by pnpm semantics).

Worktree isolation

The branch popover carries two worktree entries (a worktree is a linked git checkout that shares the repository history but owns its files and branch, so parallel sessions never touch each other's tree):

  • Start a new session in a worktree… opens a dialog: name the worktree and pick the base branch (the current branch is preselected). The host creates the worktree at $DSH_HOME/worktrees/<repo-key>/<name>/ on a NEW branch wt/<name> (git forbids checking out one branch in two places), registers it as a workspace, and opens its blank session. The current checkout never moves.
  • Manage worktrees… lists every linked worktree of the repository with branch/head. Managed worktrees can be removed: a dirty worktree rejects once and then offers an inline force-confirm; the wt/ branch survives removal unless the row's delete-branch checkbox is on. The primary checkout row is display-only.

Two gates live in the plugin's settings card (both off by default):

  • Auto-isolation (autoIsolate): the New Session action of a git workspace silently creates a fresh managed worktree and starts the session there — the Claude-desktop-style automatic shape. autoBaseline picks the base: the checkout's current HEAD (current) or the remote default branch (default, resolved as origin/HEAD with a HEAD fallback when no remote exists). Workspaces already inside the managed home are never re-isolated, and any failure degrades to the official new-session behavior. This wraps the browser-side workspaces service at runtime — a shape-probed patch, not a source change; an SDK update that changes that service disables the feature with a console diagnostic instead of breaking anything.
  • Agent tool (agentTool): registers the model-facing git_worktree tool (create/list/remove over the same managed home, workspace-gated by the calling session's cwd). This deliberately lifts the package's "git stays off the model-visible surface" rule for opted-in users. Mind the sandbox boundary: a session's cwd is immutable, so the current session cannot move into the worktree, and under workspace-write sandboxing the agent cannot write outside its session root — create therefore also registers the worktree as a workspace and its reply tells the model to open a new session there. Under danger-full-access the agent may work in the returned path directly.

Removal only ever targets direct children of the repository's managed directory (canonical-path containment on both sides) and unregisters the linked workspace after the disk removal succeeds.

Uninstall

dsh plugin --profile web remove @linxin666/dsh-client-ui-git-graph

Design notes

  • Boundary and load-chain research and key decisions: see docs/ADR-001-plugin-boundary.md.
  • The host half's /git/* only accepts paths of registered workspaces (realpath check) and trusted clients (loopback socket + loopback Host, the same fence as dsh-ssh, plus a live paired-device cookie when dsh-remote-web-ui is loaded); the browser cannot run git against arbitrary directories, and a LAN-exposed dsh web answers unpaired non-loopback clients with 403.
  • The switch semantics are workspace-level: git switch --no-guess <branch> operates on the repoRoot checkout tree and affects all sessions of that workspace; project switch = activate the target workspace and open its (reused or newly created) blank session, without changing the cwd of existing sessions.
  • Mount seam: conversation.input.dock, the composer dock the shell declares for its own queue and todo docks. Registration waits for that declaration through slots.inject (a bare register is rejected for undeclared slots) and there is no second seat. The branch pill renders only for blank sessions and hides when there is no session cwd, the workspace is not a Git repository, or the session is no longer blank. There the chip re-anchors into the official hero row after the agent-preset seat (2px row gap, vertically centered, with matching workspace/preset chip metrics and tokens) and opens its picker downward like the official workspace menu. React appends portal children at the end of that row, so the chip re-orders itself immediately before the row's trailing options group, which is pinned to the right edge with margin-left: auto; without that step it would render above the composer card's right corner instead of beside the preset chip. Active sessions have no branch-selection control.
  • Workspace selection is not inside this plugin: the official workspace pill (conversation.input.selector.workspace) is the only entry; this plugin only provides git branch context.
  • Branch state refresh: fetch when the blank-session chip mounts / the popover opens / a switch succeeds, plus host SSE (/git/events, polling workspace state every 30s while subscribed, each probe bounded by a 15s deadline so a hung git never stalls the stream) pushing external changes and a window-focus refresh (throttled to once per 5s). Active sessions do not subscribe. The SSE stream is shared across tabs through a cross-tab leader relay (Web Locks + BroadcastChannel): one stream per URL browser-wide, so extra tabs never exhaust the same-origin HTTP connection pool (#383).

Check chain

pnpm run typecheck
pnpm test
pnpm run build

Telemetry

The browser half sends one anonymous install heartbeat per UTC day to dsh-market.com: a random localStorage id plus this package's name, nothing else. The server stores only a salted hash of that id, never IP addresses, and exposes aggregate counts only. See docs/telemetry.md for the full contract.