NEAZ71eve / dsh-tool-github

Listed

GitHub REST API tools + browser sidebar panel for DeepSeek Harness (DSH): repos, search, issues, PRs, comments, account binding, and workspace integration

mainTool View source

Installation

npx -y @deepseek-ai/dsh plugin --profile web add github:NEAZ71eve/dsh-tool-github

This installation command is an unverified starting point generated from the GitHub repository address.

README

Maintainer-authored documentation snapshot.

View on GitHub ↗
Commit c427972Synced Aug 18, 2026

dsh-tool-github

GitHub REST API tools for DeepSeek Harness (DSH). Registers model-facing github_* tools so the agent can bind a GitHub account, query repositories, search code/issues, read file content, create issues / pull requests / comments, and clone repositories into selectable workspaces. Also ships a browser-side GitHub panel for the web GUI (sidebar icon → account status, workspace list, bind / add-workspace actions) backed by /github-* commands.

Web GUI panel

After install and a full GUI restart (dsh web — the client plugin discovery only runs at process start and caches "not a client package" verdicts, so a running GUI will not pick up a newly added dsh.client declaration), a GitHub icon appears in the sidebar rail (next to the settings button). Click it to open the GitHub panel:

  • Status — bound account (@login, token source) and registered GitHub workspaces (from /github-status)
  • My reposlist the bound account's repositories as clickable rows; click one to clone and register it as a workspace (from /github-my-repos + /github-workspace-add)
  • Bind account… — paste a personal access token (runs /github-bind <token>)
  • Add workspace… — enter owner/repo (or owner repo [branch]) to clone and register a workspace (runs /github-workspace-add)
  • Refresh — re-read status

The panel talks to the host only through the /github-* commands (ctx.remote.commands.execute), so it never holds a token or touches the GitHub API itself. The same commands are also typed directly in the composer:

/github-status              Show account + workspace status
/github-bind ghp_xxx        Bind an account
/github-unbind              Remove the stored token
/github-workspace-add owner repo [branch]
/github-workspace-list      List cloned GitHub workspaces

Tools

Account binding

ToolDescription
github_bindValidate a personal access token against the API and persist it to the credential store. After binding, every github_* tool authenticates as that account automatically.
github_whoamiShow the bound account, token source (credential store / plugin config / environment), and public profile.
github_unbindRemove the stored token and disconnect the account.

GitHub API

ToolDescription
github_repoRepository metadata (stars, forks, language, license, topics, activity)
github_searchSearch repositories, code, or issues
github_my_reposList the bound account's repositories (public + private per token scope) — pick one to work on or add as a workspace
github_issuesList repository issues (state / label filters)
github_create_issueCreate an issue (requires a bound account / token)
github_prsList pull requests (state filter)
github_create_prCreate a pull request (requires a bound account / token)
github_contentRead a file or list a directory at any ref
github_commentComment on an issue or PR (requires a bound account / token)

Workspaces

ToolDescription
github_workspace_addClone a repository into the local workspace root (~/.dsh/github-workspaces) and register it with the harness workspace registry — it then appears in the workspace picker (sidebar / new-session hero) and can be selected as the working directory. Uses git clone when possible and falls back to a codeload tarball download when git TLS is unavailable.
github_workspace_listList repositories cloned by github_workspace_add, with local paths and registration state.

Install

# from this checkout directory
dsh plugin --profile web add .

Or via a local path:

dsh plugin --profile web add D:\keep_try\dsh-tool-github

Restart the web GUI (dsh web) after installing or updating so the new bundle loads.

Usage examples

"帮我绑定 GitHub 账号"                       → github_bind (输入 token)
"当前登录的 GitHub 账号是谁"                 → github_whoami
"把 deepseek-ai/DeepSeek-Harness 加为工作区" → github_workspace_add
"有哪些 GitHub 仓库可以作为工作区"           → github_workspace_list
"deepseek-harness 有多少 star"               → github_repo
"搜 python 的 PDF 解析库 stars:>3000"        → github_search

Configuration

The plugin accepts a Config with:

  • token — GitHub personal access token (default: ""). Prefer github_bind (credential store) or the GITHUB_TOKEN environment variable; resolution order is credential store → plugin config → environment.
  • baseUrl — API base URL (default https://api.github.com; set to your GitHub Enterprise URL, e.g. https://github.example.com/api/v3).
  • timeoutMs — per-call timeout (default 30000).
  • maxResults — list/search result cap (default 10).
  • workspaceRoot — where github_workspace_add clones repositories (default ~/.dsh/github-workspaces).

Example profile patch (~/.dsh/cordis.patch.yml or profiles/<name>/cordis.patch.yml):

- id: tool-github
  config:
    maxResults: 20
    workspaceRoot: D:\github-workspaces

How account binding works

github_bind validates the token against GET /user, then stores it through DSH's credential seam (ctx.credentials) under the GITHUB_TOKEN reference — the same store the Models page writes, persisted in $DSH_HOME/.credentials.yaml. Every other tool resolves the token per operation, so a changed credential takes effect on the next call without a restart. github_unbind removes only a credential-store binding; environment and plugin-config tokens are read-only sources.

How workspace integration works

github_workspace_add clones <owner>/<repo> into <workspaceRoot>/<owner>/<repo>, then calls ctx.workspaceRegistry.create(path, title) — the same registry the workspace picker renders. The repository immediately becomes a selectable workspace: sessions opened there use the repo as their working directory, with the agent's file tools operating inside the clone.

Development

npm install          # install dev/test dependencies
npm run check        # syntax-check both bundles
npm test             # full test suite (host + client + schema + contract)
npm run test:host    # host tests only (commands, schema, contracts)
npm run test:client  # client DOM integration test

CI (.github/workflows/ci.yml) runs on push/PR: syntax check + full test suite on Node 20 & 22, plus an npm pack --dry-run package sanity job.

License

MIT

Project files and signals

Shown items are public repository signals detected in the directory snapshot.

TestsDetected

Repository information

Language
JavaScript
License
MIT
Last updated
Aug 15, 2026, 2:07 PM

Install deliberately

Review source code, permissions, lifecycle hooks, dependencies and network access. Test untrusted plugins in an isolated environment.