npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@dsh-xhl/dsh-git-gui

v0.2.0

Published

Git GUI panel for the DeepSeek Harness web surface: visualize working-tree changes (including every modification the agent makes), stage/commit/branch/merge/log/pull/push/stash/revert — all from the browser.

Readme

dsh-git-gui

A Git graphical interface plugin for the DeepSeek Harness Web UI: view, stage, commit, and revert project changes directly in the browser, while seeing every modification the Agent (harness) makes to workspace files in real time.

Current version: v0.1.2 — Visual operations for viewing changes, committing/reverting, remote synchronization, and more are now available. Branch management, stash, and the AI modification timeline are planned to be completed and released in v0.2.0. See the Roadmap below for details.

Features

  • Changes View: Changes are grouped into "Staged / Modified / Untracked / Merge Conflicts". Click to view line-level diffs, stage/unstage changes with one click, and discard changes or delete untracked files with confirmation dialogs.
  • File Tree View: Browse all files in the workspace (automatically respecting .gitignore). File names are color-coded by status — unmodified files use the default text color (black in light mode / white in dark mode), modified but uncommitted files are blue, and untracked files are red. Supports directory collapsing and name filtering. Click an unmodified file to preview its contents directly.
  • Log View: View commit history (hash / reference badges / author / relative time), with support for reverting individual commits using revert.
  • Nested Repository Detection: When the session workspace itself is not a Git repository, the plugin automatically searches subdirectories for a single nested repository and uses it as the operation root (for example, when the repository is located in the dsh-git-gui/ subdirectory of the workspace). If multiple nested repositories are found, the plugin explicitly prompts the user instead of guessing which one to use.

Installation

GitHub Source

dsh plugin --profile web add github:wojiaoxiaomayun/dsh-git-gui

npm Source

dsh plugin --profile web add @dsh-xhl/dsh-git-gui

After installation, restart dsh web and refresh the browser page.

Update

dsh plugin --profile web update @dsh-xhl/dsh-git-gui

Uninstall

dsh plugin --profile web remove @dsh-xhl/dsh-git-gui

Troubleshooting

The Git panel is stuck on "Detecting repository…"?

This is a known issue when the plugin is installed as a link: symlink (e.g. dsh plugin --profile <name> add <local path>): the host half resolves @deepseek-ai/* from the plugin repo's own node_modules instead of the DSH runtime's copies, so the git/* endpoint registration is invisible to the gateway.

Use the official install methods instead (a real install automatically links the host's packages):

dsh plugin --profile web add github:wojiaoxiaomayun/dsh-git-gui
# or
dsh plugin --profile web add @dsh-xhl/dsh-git-gui

To mimic a real install locally, pack a tarball and install that (do not add a local directory):

npm pack
dsh plugin --profile web add .\dsh-xhl-dsh-git-gui-0.1.3.tgz

If you do want a link: dev loop, run scripts/link-host-deps.ps1 after every npm install / pnpm install, then fully restart DSH.

The panel is stuck on "Detecting repository…" right after upgrading DSH itself?

The host half needs @deepseek-ai/cordis, @deepseek-ai/dsh-llm and @deepseek-ai/dsh-typert-protocol, resolved through the shared module fallback at $DSH_HOME/profiles/node_modules. A DSH upgrade can leave stale pnpm links in that directory (symlinks pointing into a deleted .pnpm store), so the plugin host half fails to import and the git/* endpoints never register — the browser panel then stays on "正在检测仓库…" forever.

Verify from a directory that does not shadow the profile (e.g. %TEMP%):

node --input-type=module -e "await import('file:///' + (process.env.USERPROFILE + '/.dsh/profiles/web/node_modules/@dsh-xhl/dsh-git-gui/lib/service.js').replaceAll('\\\\', '/')); console.log('host half loads')"

If it throws ERR_MODULE_NOT_FOUND for one of the @deepseek-ai/* packages, heal the broken fallback links (point them at the installed DSH copy, as DSH's own boot repair does):

$shared = "$env:USERPROFILE\.dsh\profiles\node_modules\@deepseek-ai"
$img = "$env:USERPROFILE\AppData\Local\Volta\tools\image\packages\@deepseek-ai\dsh\node_modules\@deepseek-ai\dsh\node_modules\@deepseek-ai"
foreach ($n in 'cordis','dsh-llm','dsh-typert-protocol') {
  Remove-Item "$shared\$n" -Force -ErrorAction SilentlyContinue
  cmd /c "mklink /J `"$shared\$n`" `"$img\$n`""
}

Then fully restart dsh web (the running process caches the failed module load) and refresh the browser page. The plugin also hardens the browser half against DSH session-list API changes (sessions.current was removed; the active session is now derived from the session-scoped sessionId / the ids + retainedBy.mainView list fields), so a stale or renamed session field no longer leaves the panel stuck either.

Where to start

After installing the plugin, open the DeepSeek Harness Web UI and click the Git button (with a changed-files count badge) in the top-right corner of the conversation header to open the floating panel. On the hero / new-chat page (before a conversation exists) the same button shows in the top-right spot through the hero.flex slot declared by the dsh-hero-flex plugin — without that plugin installed, the hero shows nothing.

Structure

Host (Node):  GitService (@Remote, namespace `git`, Typert SRC mode → git/* endpoints)
               ├─ runner.js   spawn git (no shell) + per-workspace queue + output limit + error classification
               ├─ parse.js    porcelain v2 / unified diff / log / refs / stash parsing
               └─ activity.js session/event → (session, turn, tool, file) timeline (Stage 2)

Client (Browser): conversation.session.header.utilities entry button (uncommitted-count badge) + shell.overlay floating panel + hero.flex entry (via dsh-hero-flex)
               ├─ control.js  session cwd synchronization + polling + operation runner + confirmation dialogs
               ├─ v-*.js      view components (React.createElement, no JSX)
               └─ styles.js   theme tokens (--dsw-alias-*) and styles, adaptive to light/dark mode

Roadmap

| Stage | Content | Status | |--------------|---|---| | v0.1.1 | Changes / file tree / log + commit, stage, discard, revert, Pull/Push/Fetch + Add Remote, dark mode, nested repository detection | ✅ Current version | | v0.2.0 (unreleased) | Branch management (local/remote lists, switch/create, merge, ahead/behind) | 🔧 In progress | | v0.2.0 (unreleased) | Stash (push/pop/apply/drop) | 🔧 In progress | | v0.2.0 (unreleased) | AI modification timeline (session × turn × tool → file attribution view) | 🔧 In progress | | Future ideas | Reset entry point, file history (git log -- <path>), settings card (polling interval / Git path / identity fallback), interactive rebase (PTY) | 💡 To be designed |

Limitations

  • When panel operations and Agent edits occur concurrently, Git's own state is treated as authoritative. A warning bar is displayed while the session is running, and operations such as discarding changes require confirmation.
  • Untracked file content previews are limited to 512 KiB; diff output is limited to 4 MiB (truncation is marked); the file tree supports a maximum of 3,000 files.
  • Credentials rely on existing Git credential helpers (WinCred / SSH agent). Interactive password input is disabled (GIT_TERMINAL_PROMPT=0) to ensure operations do not hang.
  • On Windows, if the repository's .git directory was created by a process running with administrator privileges, tools running with normal privileges, such as PyCharm, need to execute git config --global --add safe.directory '<path>' (Git 2.35+ hijacking protection).
  • The plugin has not yet been tested on macOS or Linux. Please report any issues you encounter.