Preface¶
When doing AI programming with DeepSeek Harness, conversations, traces, and workspace changes are often crowded into the same web interface. However, Git history is often still elsewhere: typing git log --graph in the terminal, or opening another VS Code or GitHub Desktop. Switching back and forth is not complicated, but the context breaks—you have to reconfirm which files the model just modified, which branch the current HEAD is on, and whether the workspace is clean or dirty.
DeepSeek Harness (dsh) is designed with “everything is a plugin”: models, tools, sessions, sandboxes, and UI can all be mounted and replaced. As a result, a number of enhancement plugins that only modify the UI without changing the core have emerged in the community. dsh-git-graph is one such Git visualization plugin for the web GUI: it embeds commit history graphs, branch filtering, file diffs, and VS Code-style uncommitted changes into the “Git Graph” tab on the session page.
This article is collated after cross-checking with the plugin directory page, GitHub repository README / package.json, and the DeepSeek Harness official repository. The community plugin directory is an independent site and has no official affiliation with DeepSeek / Magic Cube, so it will not be treated as an official app store in the following content.
What is this¶
dsh-git-graph is an embedded Git repository graph plugin for DeepSeek Harness’s web GUI, maintained by GitHub user 1841220388zzzcccxxx-star, with the repository address 1841220388zzzcccxxx-star/dsh-git-graph. The directory page categorizes it under “UI Enhancement”. The license is MIT. The version numbers in the repository’s package.json and dsh.plugin.json are both 0.10.0, and the client platform is declared as web.
The problem it aims to solve is very specific: directly view the commit topology, branch relationships, and uncommitted changes in the current conversation’s workspace without leaving the Harness interface. The positioning of the README is: embed GitHub-style commit history graphs, branch management, code diffs, and VS Code-style uncommitted changes panels within the conversation interface.
It is important to distinguish: there are other DSH Git plugins with the same or similar names on GitHub (such as read-only graphs, status floats). This article only covers the one listed on the directory page and maintained by 1841220388zzzcccxxx-star. As of the day of verification, the GitHub API showed 12 stars for this repository; the directory page still showed 7 stars at that time, so the star count shall prevail based on the repository page. The repository README states that this project was developed with AI assistance.
Core Features¶
The capabilities listed in the repository README can be divided into two sections: “view history” and “manage workspace”. Only the parts verified in the README and source code structure are covered below.
Commit History Graph and Branches¶
The graph lists commits in GitHub style, with local and remote branches grouped separately, collapsible, and colored by branch. Whichever session you open, the Git repository of that session’s workspace will be displayed; switching sessions will automatically follow suit. If the workspace is not a Git repository, only an empty state will be shown without drawing the graph.
Branch filtering is controlled by checkboxes: check to show the branch, uncheck to hide it completely; when none are checked, the list will be empty. The commit list is paginated, and the README specifies 200 items per page, with a “Load More” button provided. There is a dropdown box at the top of the graph page for switching between multiple repositories.
Commit Details and Diff¶
Click a commit row to open the details: commit message, list of changed files, and single-file diff. Ctrl+Click can select two commits for comparison. The file history entry in the details (marked with “📜” in the README) is used to view historical commits related to a single file.
Uncommitted Changes¶
The uncommitted changes section stays at the top of the graph, with a grouping approach similar to VS Code: Staged, Changed, and Untracked. Each row has a status badge (A / M / D / R / U / ?) and +/- line counts. Click a row to expand the single-file diff with syntax highlighting. Renamed files are displayed as Old → New; untracked files show their content directly. Group toggles can hide a specific group individually, and both the panel and groups can be collapsed.
You can stage, unstage, or revert files inline; the top bar can stage all or commit. After selecting checkboxes, you can batch stage, unstage, revert, ignore, or commit the selected files. The README states that a confirmation box will pop up before destructive operations. In the commit dialog, you can generate candidate commit messages based on the diff, and the generated results are editable; the English README describes this as a diff-based heuristic suggestion, rather than a separate model call explanation.
Right-click Menu and Remote Operations¶
The right-click menu for commit rows includes: copy hash or message, view details, tag (can rename/delete), create a new branch from this commit, open the GitHub commit page, copy repository path, and open in file explorer.
The top bar provides ⬇ Fetch (git fetch) and ⬆ Push (pushes the current branch, executes after confirmation). The branch group headers can also be right-clicked: local branches can be switched, pushed, or deleted (the README specifies that only merged branches can be deleted, and HEAD is protected); remote branches can be fetched and their names copied. The remote branch group will still be displayed even if it is fully synchronized with the local, and marked as “Synced” or “Included”.
Refresh, Shortcuts and Theme¶
When the page is visible, it listens for workspace changes and new commits every 5 seconds, and updates statistics and the list. Shortcuts include: Ctrl+F to search, Ctrl+/ to open the shortcut panel, Ctrl+B to collapse or expand all branch groups, ↑↓ / j / k to navigate, Enter to open details, and Esc to close.
The theme can automatically follow the system, or be fixed to dark or light mode; there are also 8 style schemes (Cherry Blossom, Ocean, Forest, Night Sky, Candy, Business, Galaxy, Tech). Branch filtering, group toggles, collapsed states, and theme are saved and retained after refresh. The README states that since v0.8, the storage keys have been unified as gg2-*, and branches are fully expanded by default when first opened.
When the graph is opened, it will silently check for the latest version on GitHub; if a new version is found, the top bar will display “🔄 New version vX.Y”, clicking it will download and replace the plugin files (the old version is backed up first, and rolled back if it fails), and it will take effect after restarting. This is a write permission operation, and you should review the source code together with the license before installing.
The mounting location is the “Git Graph” tab within the session page, next to the “Traces” tab. The client injection slot in package.json is slots, and the bundle patch is declared via cordis.patch.yml.
Installation and Activation¶
The installation command given on the directory page is as follows, run in the DeepSeek Harness terminal:
dsh plugin add github:1841220388zzzcccxxx-star/dsh-git-graph
The directory page also notes that for reproducible installations, you can pin the commit hash:
dsh plugin add github:1841220388zzzcccxxx-star/dsh-git-graph#commit
Replace #commit with the actual 40-digit commit hash, do not copy the placeholder as-is. The complete form of plugin management in the DeepSeek Harness official CLI documentation is dsh plugin --profile <profile> add .... This plugin declares the platform as web, so when installing to the web interface, you should target the web profile, for example:
dsh plugin --profile web add github:1841220388zzzcccxxx-star/dsh-git-graph
Installing from a Git source pulls the source code instead of the build artifacts. The official development documentation notes that pnpm ≥10 blocks the prepare script of git dependencies by default, so the first add may fail. You need to add the package name to the allowBuilds field of that profile’s pnpm-workspace.yaml as prompted and then execute the command again. This repository’s package.json does not declare a prepare script; if the installation reports an error, follow the terminal prompts and do not assume that builds must be allowed.
The security prompt on the directory page should be understood as-is: the plugin runs with the permissions of the current dsh process, and may execute code during installation. You should check the source code repository and license before installing.
The repository README also provides a method for mounting from local source code, suitable for cases where you have already copied the plugin to the profile directory.
- Add a dependency in the web profile’s
package.json(adjust the path as needed):
{
"dependencies": {
"dsh-git-graph": "file:./plugins/git-graph"
}
}
- Mount it in the profile’s
cordis.patch.yml. The example in the repository is:
- insert:
- id: git-graph
name: dsh-git-graph
config:
repo: "C:/path/to/your/repo"
config.repo / config.repos are the initial accessible repository whitelist for the graph panel. The README specifies: repositories discovered by the session workspace during runtime will also be automatically added to the accessible collection. The example path is in Windows style, replace it with your own repository path.
- Install and restart:
pnpm install
Then restart dsh web. The official default web UI address is http://127.0.0.1:3080. Open any session page and click the “Git Graph” tab next to “Traces” to use it.
Typical Usage¶
You can try the operations in the README in this order (the workspace must already be a Git repository, otherwise you will only see an empty state).
- Open the “Git Graph” tab on the session page and confirm that it displays the repository of the current conversation’s workspace.
- Use the branch group title to collapse or expand a specific branch; use the checkboxes to filter the branches you want to view.
- Look at the “Uncommitted Changes” at the top of the graph: Staged / Changed / Untracked. Click a row to expand the diff.
- When you need to stage or revert, use the inline buttons; when you need to commit, use the “Commit” button in the top bar. Destructive operations will first pop up a confirmation box.
- Click a commit to view the details; hold
Ctrland click another commit to compare the two. - Right-click on a commit row: copy the hash, tag it, create a new branch from this commit, or open the GitHub commit page.
- Use the top bar to fetch/push for remote synchronization; switch or delete local branches using the right-click menu on the branch group header.
- The “Uncommitted Changes” in the bottom status bar can scroll back to the top changes section;
↻ Refreshwill reload the repository data.
The repository structure is clearly written in the README, making it easy to cross-reference the source code:
git-graph/
├── index.js # Server-side git API
├── client.js # Session page "Git Graph" tab
├── web/index.html # Graph page within iframe
├── package.json # Plugin manifest
└── cordis.patch.yml # Profile mounting point
The source code file header comments state that the server provides an API under /git-graph, and commands are executed via execFile (without going through the shell), with a fixed parameter list. That is to say, the local machine needs to be able to call git. You need to restart dsh web after modifying the server (index.js) or client (client.js); only modifying web/index.html only requires refreshing the page.
Applicable Scenarios and Notes¶
It is suitable for these types of usage:
- Already using dsh web for AI programming, and want to view commit graphs and workspace changes on the same session page
- Need more intuitive branch filtering, file diffs, and two-commit comparison than git log --graph
- Occasionally need to perform staging, committing, fetching, and pushing in the interface without opening another Git client
It is not suitable, or requires extra caution, in these cases:
- It only declares the web client, not a TUI / headless plugin.
- There will be no graph if the workspace is not a Git repository, only an empty state.
- The plugin will perform write operations such as git fetch, git push, switching branches, deleting merged branches, and reverting files. Although the README mentions confirmation boxes and HEAD protection, the permissions are still equal to the current dsh process.
- The auto-update feature will download and replace plugin files. If your environment does not allow the plugin to modify the installation directory on disk, you should disable or not use this feature, and instead pin the commit hash and upgrade manually.
- config.repo is a whitelist, but repositories discovered by the session workspace will be added to the accessible collection at runtime. Do not point dsh to directories you do not want the Git panel to access.
- There are multiple Git visualization plugins on the community directory and GitHub, so the installation command must target github:1841220388zzzcccxxx-star/dsh-git-graph, do not randomly piece together the name.
Once again: the plugin runs with the permissions of the current dsh process, and may execute code during installation. Check the source code and MIT license before installing; for production or shared environments, it is recommended to pin the commit hash. DeepSeek Harness is still in developer preview, and the official README notes that there will be breaking changes, and plugin interfaces may also change accordingly.
Summary¶
dsh-git-graph embeds commit history, branch filtering, file diffs, and VS Code-style uncommitted views into DeepSeek Harness’s session page, reducing the back-and-forth of “editing code with the model while switching to another Git client”. It is a community MIT-licensed project, not an official built-in feature.
Directory page: https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-git-graph/
GitHub: https://github.com/1841220388zzzcccxxx-star/dsh-git-graph