Git and GitHub pull-request workflows for DeepSeek Harness, exposed both as model tools and as an integrated Web sidebar workbench.
Status: experimental. DeepSeek Harness is currently a developer preview and its plugin interfaces may change. This release targets the exact
0.1.0-rc.6DSH package line.
- Repository status, staged/unstaged diffs, history, and local branches
- Stage, unstage, safe restore, commit, branch create/switch/safe-delete
- Fetch, fast-forward pull by default, and push without force options
- GitHub pull requests: list, view, create, edit, checkout, merge, and comment
- A DSH Web sidebar panel for changes, text-file editing, commits, branches, history, and pull requests
- Model-facing tools for the same workflows:
git_status,git_diff,git_log,git_stage,git_commit,git_branch,git_sync, andgithub_pr
This project aims for Git/GitHub workflow parity with coding agents such as Codex. It does not claim to reproduce unrelated proprietary Codex features.
- Node.js
^22.19.0or>=24 - DeepSeek Harness
0.1.0-rc.6 - Git on
PATH - GitHub CLI on
PATHand authenticated withgh auth loginfor pull-request features
The plugin never stores GitHub tokens. Authentication remains owned by Git and gh.
Until an npm release exists, install from a GitHub repository:
dsh plugin --profile web add github:FlutterSoul/dsh-git-workbenchGit-source installation runs this package's prepare build. pnpm 10 and later intentionally reject that on the first attempt. Review the repository, then copy the exact package key printed by DSH into $DSH_HOME/profiles/web/pnpm-workspace.yaml and retry. With pnpm 11.19 or later, the repository-scoped form is:
allowBuilds:
'dsh-git-workbench@git+https://github.com/FlutterSoul/dsh-git-workbench.git': trueThis grants build permission only to this Git repository; do not disable pnpm's build safeguards globally. For reproducible installations, append a trusted commit or tag to the GitHub specifier.
Start DSH Web:
dsh --profile webThe Git entry appears in the sidebar footer. It follows the current task's registered workspace.
The bundle inserts the plugin with defaults through cordis.patch.yml. Configure its Loader entry in the DSH profile when non-default values are needed:
| Option | Default | Purpose |
|---|---|---|
gitBinary |
git |
Git executable |
ghBinary |
gh |
GitHub CLI executable |
commandTimeoutMs |
120000 |
Per-process timeout |
maxOutputBytes |
4194304 |
Maximum captured command output |
maxFileBytes |
1048576 |
Maximum file size accepted by the editor |
maxRequestBytes |
2097152 |
Maximum Web API request body |
defaultRemote |
origin |
Default fetch/pull/push remote |
defaultPullMode |
ff-only |
ff-only, rebase, or merge |
pushBeforePrCreate |
true |
Push the head before creating a PR |
mutationApproval |
all |
Model-tool approval policy: all, destructive, or none |
allowedRoots |
[] |
Additional absolute roots the browser UI may operate in |
The UI accepts registered DSH workspaces by default. allowedRoots is for deployments that intentionally expose additional workspace trees.
- Commands use
spawnwithshell: false; arguments are never concatenated into a shell command. - Git and GitHub CLI interactive prompts and pagers are disabled.
- Mutations are serialized per repository.
- Model-initiated mutations request approval by default. A missing approval service fails closed.
- Browser calls require same-origin requests and are constrained to registered/configured workspaces.
- Text-file saves use an expected SHA-256 hash, preventing silent overwrite after concurrent edits.
- Force push, forced branch deletion,
git clean, arbitrary Git arguments, and arbitrarygharguments are not exposed. - “Discard” only calls
git restore --worktreefor explicit tracked paths; it never deletes untracked files.
UI button clicks are direct user actions. The UI asks for confirmation before discard, branch deletion, and merge.
pnpm install --ignore-scripts
pnpm check
pnpm pack --dry-runFor a local DSH profile:
dsh plugin --profile web add ./path/to/dsh-git-workbench
npx @deepseek-ai/dsh webThe test suite creates disposable Git repositories and does not contact GitHub. Live PR verification requires a repository and authenticated gh account under your control.
DSH agent tools ─┐
├─ GitWorkbench ── git / gh child processes
DSH Web panel ─ API ┘
│
└─ sidebar.footer.action client slot
src/git.ts owns all Git/GitHub operations and path validation. src/tools.ts is the model-facing adapter. src/api.ts is the constrained same-origin Web adapter. src/client/ contains the sidebar UI.
- Text editing is UTF-8 only. Binary files and files over
maxFileBytesremain diff-only. - GitHub operations currently use GitHub CLI and GitHub-hosted pull requests; other forges are not implemented.
- Conflict resolution is shown through status and file editing, but no semantic merge editor is included.
- The plugin does not create repositories, rewrite history, manage credentials, or bypass branch protection.