DeepSeek Harness Plugin

Kevin-McIsaac/dsh-workspace-git-badge#dsh-git-badge

Stars ★ 0 Downloads (30d) 2,142 Category Git & Code Review Added 2026-09-03 npm dsh-git-badge

Git status badges for DSH: sidebar workspace-row badges and an input-row chip showing the current conversation's workspace git state, with event-driven freshness over SSE.

Install

# from npm (prebuilt)

dsh plugin --profile web add dsh-git-badge

# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)

dsh plugin --profile web add github:Kevin-McIsaac/dsh-workspace-git-badge#path:/dsh-git-badge

Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time — pnpm blocks those until you allow them, so an install can stop with ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED or ERR_PNPM_IGNORED_BUILDS; dsh prints the exact key to add under allowBuilds in your profile’s pnpm-workspace.yaml, and the install works on the next run. Allowing a build is a trust decision: only install sources you trust, and pin a commit (github:owner/repo#sha).

README

Git status badges for DeepSeek Harness:

  • Input-row chip — ✚ main ↑0 ↓2 ✎3 next to the access picker, showing the git state of the workspace the current conversation is attached to. The leading glyph is the action the node half picked; with no action the chip starts at the branch name. Works on every install.
  • Hover card — rest a pointer on the chip for what won't fit: the file breakdown (✎3 split into staged / unstaged / untracked), the last ten commits, and the stash. Fetched only on hover, so the everyday badge pays nothing for it. Works on every install.
  • PR / CI token — ✚ main ↑0 ↓2 PR#142 ✓ when the branch has a GitHub pull request, read through your own gh CLI (the plugin never handles a credential). The token links to the PR — it opens in a new tab, and underlines when you hover or focus it. Invisible when gh cannot answer: not installed, not logged in, no GitHub remote, offline or rate-limited all render the unchanged chip, and a token with no URL to link to stays plain text.
  • Worktree-aware — a conversation's directory is fixed when it is created, so a conversation that does its work in a linked git worktree would otherwise keep reporting the main checkout. The session registers its checkout (npx dsh-git-badge checkout <path>, run by the git-worktree and /gh checkout paths), and the badge describes that worktree instead — its branch, counts and PR/CI token (chore/global-skills-tiering ↑0 ↓2 PR#391 ✓ rather than main). The hover card names the tree in a worktree row and adds an own checkout row with the conversation's own directory, so the main checkout's branch and dirty state stay one hover away. Registrations are advisory: git's own worktree list validates the path, entries expire after 24h, and a workspace-targeted row always reports the checkout the registry owns.
  • Sidebar session-row action glyph — each session row shows the ONE thing that conversation needs from you: resume, resolve, sync, pull, update, push, merge, commit, review, fix CI, or in sync when there is nothing to do. The node half is the single authority: it ranks the rules and attaches a rowToken and its rowSeverity to every status response, so the chip, the picker and the row cannot drift. It is triage rather than status: merge appears only when GitHub itself reports mergeStateStatus: CLEAN, and every waiting state (draft, blocked, checks still running) stays silent. The token renders as a single coloured icon, in the row's 16px leading cell and at the head of the input chip: red for a conflict, a paused operation or a failing build, amber for a requested review, green for merge, quiet blue for routine sync, and amber for the in sync disc when commits are not yet merged. It appears only when the session is idle — while a turn is running upstream shows its own status dots there, because the checkout is still moving and a suggestion would describe a state that is about to change. With nothing to do the node emits in sync, so a session is never iconless: a disc in both surfaces, green when the branch is the default branch or its work is merged, amber when commits are not yet merged. The same hover card explains it. Hovering the row opens the row's usual hover card, which renders the action as a label/value row — the icon, the word and the reason (↑ push — no upstream configured) — beside the checkout and the pull request. No patch and no install step: the glyph rides upstream's own sidebar.session.row.leading seat, and the explanation rides sidebar.session.row.hover, so both work on a pristine install.
  • Nothing on workspace rows. A workspace cannot know which worktree its conversations are using, so a per-workspace badge could only guess or report the main checkout. The token is on the session row for that reason.

There is no drawn status mark: the leading icon is the node half's action token, and its colour is the severity. The same icon leads the input chip and the session row's 16px cell. Four tokens are drawn arrows, the idle verdict is a drawn disc, and the rest are text glyphs. The card's worktree row names a linked checkout.

Event-driven freshness: working trees are watched and updates push over SSE — badges flip within ~1s of any commit, stage, or edit, including inside a linked worktree the session registered. One git status --porcelain=v2 per sample, shared by every surface pointing at the same checkout, plus at most one gh read per repository-and-branch per ~20s. The status API takes no path: the caller passes a session id (chip and sidebar rows) or a workspace id, and the server resolves the directory itself.

Diagrams, the hover card's full field list and a walkthrough for git newcomers live in the repo README — this file is the npm-facing summary.

Install

dsh plugin --profile web add dsh-git-badge

Restart the web process, refresh the browser. Requires Node ≥ 20 and git on PATH. gh, on PATH and authenticated, is optional — it only enables the PR/CI token.

No seam patch. npx dsh-git-badge checkout <path> (or the dsh-git-badge-checkout bin) is the only CLI verb: it registers the checkout a session is working in, so the badge follows a linked worktree.

Sidebar technical details

Both surfaces ride upstream seats: the status icon on sidebar.session.row.leading (a 16px, idle-only cell), the hover card on sidebar.session.row.hover.

Changelog

See CHANGELOG.md.

License

MIT

Content from the project README on GitHub ↗

Links

More in this category

View the whole category →

Community comments

Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.