DeepSeek Harness plugin

dsh-git-mojiexua

Git source-control sidebar for the DeepSeek Harness web UI: repo init, staging, commit/push/pull, branch & remote management, AI-generated Conventional Commits messages, and a commit-history graph.

Jump to install

Source facts

Repository
mojiexuan/dsh-git
Latest update
Aug 17, 2026
Category
Notifications & Integrations
GitHub stars
1
Format
plugin
Catalog evidence
Upstream dsh.bundle evidence
Evidence path
package.json#dsh.bundle
Checked against
0.1.0-rc.8
Upstream check date
2026-08-20

This evidence comes from the upstream catalog. This site has not installed, run, or security-reviewed the plugin.

Install

Start with a prompt that asks an agent to review the GitHub repository and source. Switch to the command if you want to install it yourself.

Copy this prompt into DSH, Codex, or another agent and ask it to review the GitHub repository and source first.

Do not install or run any commands yet. Read this plugin's GitHub repository, README, and relevant source code. Then answer the questions below clearly and directly so I can decide whether it fits my needs:

1. What is this plugin, and what problem does it solve?
2. Who is it for, and what are its typical use cases?
3. How is it used after installation? Include one minimal example.
4. What known limitations or privacy, security, compatibility, or maintenance risks does it have?
5. Give a clear recommendation: recommend, conditionally recommend, or do not recommend, with reasons.

Distinguish statements documented by the repository, inferences from source code, and unknowns. If evidence is insufficient, say so explicitly. Do not guess or simply repeat the README.

GitHub: https://github.com/mojiexuan/dsh-git
Plugin: dsh-git-mojiexua
Author: mojiexuan

Check the source files

Read the README and other files from this plugin directory before installing.

File explorer3 files
README.mdSource · read only

@mojiexuan/dsh-git

A VS Code–like Git Source Control panel for the DeepSeek Harness web UI — repo init, per-file staging, commit/push/publish/pull, branch & remote management, AI commit messages, and a commit-history graph, all in the browser.

> 中文文档:[docs/README.zh.md](docs/README.zh.md)

Features

  • Toggleable panel — an entry above Settings in the sidebar foot opens/closes the panel.
  • Repo detect & init — a non-repo workspace shows a one-click "Initialize Git repository" (git init -b main).
  • Per-file staging — collapsible "Staged changes" / "Changes" lists with per-file +/, plus stage-all / unstage-all.
  • Git-semantic action button — "Commit" when there are uncommitted changes (auto-stages if nothing is staged), "Push" when the branch tracks a remote and is ahead, "Publish branch" when the branch has no upstream but has local commits.
  • Pull — one click to fetch the latest from all remotes and branches (git fetch --all --prune); shown only when a remote is configured.
  • Branch management — list / switch / create / delete (with confirmation).
  • Remote management — show / add / remove the origin remote (with confirmation).
  • AI commit messages — streaming, Conventional Commits, generated from the staged/working diff via the harness LLM (Chinese output by default).
  • Commit-history graph — a lazily-paged SVG lane graph of all branches + remotes (lane topology computed client-side, rounded bends, soft palette), expanded by default at the bottom of the panel to half the panel height, virtual-scrolls and loads the next page as you scroll, expands a commit inline to its changed files, and shows a hover popover with message / author / date / hash (full hash copyable).
  • Auto-refresh — polls git status every 2.5 s so edits, commits and pushes made outside the panel show up.
  • Self-update — on first open the panel silently checks the npm registry for a newer version; when one exists, an update badge appears on the sidebar entry and a one-click "update now" link shows in the panel header, followed by a restart prompt.
  • i18n — English and Chinese UI.
  • Cross-platform — Windows, macOS and Linux; git runs unconfined so native TLS and credential helpers work everywhere.

Screenshots

Source-control panelCommit history
![Source-control panel](docs/images/panel.png)![Commit history](docs/images/history.png)

Install

dsh plugin --profile web add @mojiexuan/dsh-git

Then start dsh web.

Uninstall / Update

# Uninstall (same command for the published package and a local link)
dsh plugin --profile web remove @mojiexuan/dsh-git

# Update to the latest published version
dsh plugin --profile web update @mojiexuan/dsh-git

For a linked local checkout (dsh plugin --profile web add .), there is no separate update step — rebuild with npm run build, then fully restart dsh web (host bundle) and refresh the browser (client bundle).

Build from source

npm install
npm run build       # lib/index.js (host) + lib/client.js (client)
npm run typecheck

Configuration

Optional overrides in your profile cordis.patch.yml:

- id: git
  config:
    maxDiffChars: 4000     # cap on the diff text sent to the model (default 4000)
    maxLogEntries: 2000    # max commits per page for the history graph (default 2000; scroll to load more)
    provider: deepseek     # optional — pin the provider (defaults to the deployment model)
    model: deepseek-chat   # optional — pin the model
    reasoningEffort: off   # 'off' (default) disables thinking; 'high'/'max'/'default' passthrough
    registryUrl: https://registry.npmjs.org  # optional — npm registry base for update checks (default npmjs.org)

Structure

src/
├── shared/rpc.ts             # endpoint names + DTOs, shared by both halves
├── host/                     # Node half
│   ├── index.ts              # git/* RPC endpoints (loopback-only)
│   ├── git.ts                # ctx.shell wrapper; paths/messages via stdin (no shell injection)
│   ├── commit-message.ts     # diff truncation + ctx.llm.stream generation
│   └── update.ts             # self-update: npm version check + dsh plugin update runner
└── client/                   # browser half
    ├── index.tsx             # slot registration + RPC + locale dictionary
    ├── GitPanel.tsx          # source-control panel UI
    ├── CommitGraph.tsx       # commit-history graph (paged, virtualized)
    ├── graph.ts              # client-side lane/topology calculator
    ├── BranchMenu.tsx        # branch dropdown
    ├── GitToggleButton.tsx   # sidebar-foot toggle
    ├── rpc.ts                # typed RPC wrapper
    ├── locale.ts             # zh/en dictionaries
    ├── fileIcons.tsx         # file-type icons
    ├── icons.tsx             # icon set
    └── styles.ts             # panel stylesheet

Security

  • All git/* endpoints are registered with authority: 'loopback' (127.0.0.1 only).
  • User data is never interpolated into command strings — messages go via git commit -F -, paths via --pathspec-from-file=-, and branch/remote names and URLs are validated against safe character classes.

Publish

npm publish

Tag the GitHub repo with dsh-plugin.

License

MIT