DeepSeek Harness Plugin Hub

发布与管理完整 Harness Profiles,发现适合你的插件。

探索

插件目录环境预设文档中心动态

社区

发布插件联系我们报告问题

相关链接

Plugin Hub GitHubDeepSeek Harness 官方项目系统状态隐私说明
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

独立、非官方社区项目,与 DeepSeek 官方无隶属、授权或背书关系。

Github Toolkit — DeepSeek Harness 插件(DSH Plugin)
DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录
← Plugins
G

dsh-github-toolkit

Github Toolkit

DeepSeek Harness 的 GitHub 工具:18 个面向代理的 github_* 工具,以及一个将 PAT 保存在 DSH 凭据存储中的 Web 设置页面。

插件会安装到这里;不确定时保持 web。

npx -y @deepseek-ai/dsh plugin --profile web add github:QDchuan/dsh-github-toolkit#52604c18bb905704f1a0a8dbe62eb0420998fd6f
README兼容性版本
The GitHub page in Web Settings: token status and source, Test connection / Save / Clear, default owner and repository, API base, timeout, page size, and the write-access switch

兼容性与来源证明

Github Toolkit 以 dsh-github-toolkit 发布,当前版本为 0.3.0。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

DSH 兼容范围
*
运行环境
web
发布来源
github
Registry 更新时间
2026/9/11

版本

0.3.0stable
2026/9/11

相关插件

正在加载相关插件…

最新版
0.3.0
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
未提供
文件数
未提供
Surface
web
许可证
MIT
发布源
github
GitHub
★ 0
周下载
0
最近提交
2026/9/11
查看源码 ↗
README Badge

点击下方 Badge 复制 Markdown,粘贴到 README 即可。

这是你的 Plugin?认领权益 · 优先安全扫描

验证 package.json 声明的 GitHub 仓库,即可管理这个公开页面。认领后,Hub 会优先安排当前版本的安全扫描,并在通过后公开展示结果。

认领这个 Plugin →
报告问题

相关插件

继续浏览 developer-tools 分类下经过校验的插件。

Web App@deepseek-ai/dsh-web-appdsh 浏览器界面捆绑包:位于 dsh-base 之上的 Web 补丁层,加上运行时粘合插件(提供前端 dist、Web 界面提示符、bash 运行时变量和 URL 行)Sdk Minimal@deepseek-ai/dsh-sdk-minimal独立的最小 SDK 配置包:JSON-RPC、一个 DeepSeek 适配器、持久化 Shell 和 JSONL 会话Sdk App@deepseek-ai/dsh-sdk-appdsh SDK 配置包:基于 dsh-base 提供 stdio JSON-RPC 服务和进程生命周期管理Subagent Codex@deepseek-ai/dsh-subagent-codex基于官方 app-server 协议的一次性 Codex 子代理提供程序

README

dsh-github-toolkit

English | 中文

GitHub for DeepSeek Harness: 18 agent-facing github_* tools, plus a GitHub page in Web Settings that stores your PAT in the DSH credential store and takes effect without a restart.

No build step, no runtime dependencies — the host half uses Node's built-in fetch, the browser half requires only react and the shell's static UI primitives.

  • The token never lives in configuration. It is resolved from the DSH credential store by reference (default GITHUB_TOKEN) on every request, so rotating the PAT applies to the next call and cordis.patch.yml never contains a secret.
  • Configured in the GUI, not the terminal. Paste the PAT, test it against api.github.com from the page before saving, bind a default repository, and switch the write tools on or off.
  • Failures name the fix. 401 → rotate the token; 403 with zero quota → when it resets; 403 otherwise → scopes or SAML SSO; 404 → missing or unauthorized; 422 → GitHub's own field-level errors.

Requirements

  • DeepSeek Harness 0.1.5-rc.1 or newer (@deepseek-ai/dsh-tools and @deepseek-ai/dsh-credentials are peers the harness provides).
  • Node.js 22+ (the host half uses AbortSignal.any).
  • A GitHub personal access token; fine-grained tokens are recommended.

Install

dsh plugin --profile web add dsh-github-toolkit

The package declares dsh.bundle, so the installer adds it to the profile's bundle list and the row in cordis.patch.yml mounts the host half. Then refresh the Web UI and open Settings → GitHub.

Without npm:

dsh plugin --profile web add github:<owner>/dsh-github-toolkit

No build scripts are involved, so this installs straight from the repository.

Set it up in the GUI

Open Settings from the bottom-left of the Web UI, then pick GitHub:

The GitHub page in Web Settings: token status and source, Test connection / Save / Clear, default owner and repository, API base, timeout, page size, and the write-access switch

  1. Refresh the Web UI and open Settings → GitHub.
  2. Paste the PAT → Test connection (the page calls api.github.com directly, so you see the account, scopes, and remaining quota before anything is stored) → Save token.
  3. Optionally set default owner / default repository and save the configuration.
SectionWhat it does
Access tokenShows whether a token is configured and where it comes from (credential store / launch environment); password field to paste one; Test connection; Save; Clear
Defaults & behaviourDefault owner, default repository, credential reference name, API base (GitHub Enterprise Server), request timeout, page size, write access switch; Save configuration; Reset to defaults

Interaction decisions worth knowing:

  • Testing happens in the browser. GitHub's REST API answers CORS preflights (Access-Control-Allow-Origin: *, and X-OAuth-Scopes / X-RateLimit-* are exposed), so a candidate token can be validated without handing it to the host first.
  • Stored tokens are never read back. The credential store reports only whether a value is configured, its source, and whether it accepts writes; the page cannot display the secret. Re-paste to re-test, or ask the model to call github_auth_status.
  • Saving applies immediately. Turning write access off unregisters the mutating tools and narrows github_api to GET; turning it on registers them again — no restart.
  • Empty means default. Clearing a text field and saving removes your override, so the value falls back to the composition default.

Tools

ToolPurposeRead-only
github_auth_statusToken identity, scopes, remaining quota — the credential diagnostic entry pointyes
github_get_repositoryRepository metadatayes
github_read_fileRead a file at a ref, or list a directoryyes
github_searchSearch repositories / code / issues / commits / usersyes
github_list_issuesList issues (state, labels, assignee, since)yes
github_get_issueOne issue or PR, optionally with its commentsyes
github_list_pull_requestsList pull requestsyes
github_get_pull_requestOne PR with changed files and an optional full diffyes
github_list_commitsList commits, optionally filtered by path or authoryes
github_list_branchesList branchesyes
github_get_checksCI status and check runs for a refyes
github_apiRaw REST escape hatch (GET-only when write access is off)depends
github_create_issueCreate an issueno
github_commentComment on an issue or PRno
github_update_issueChange title, body, state, labels, assigneesno
github_create_pull_requestCreate a pull requestno
github_create_reviewSubmit a review, with optional inline commentsno
github_write_fileCommit a file through the contents API (resolves the current sha)no

Read and write tools are modelled separately so permission presets can keep the mutating ones on ask, and one switch turns the plugin read-only.

Returned payloads are curated before they reach the model: GitHub objects carry far more than a model needs, so bodies, patches, and diffs are clipped to configured budgets and marked as truncated.

Configuration

The settings page writes the tool-github namespace in settings.yaml; the composition row only carries defaults:

FieldDefaultMeaning
tokenRefGITHUB_TOKENCredential reference name
apiBasehttps://api.github.comChange for GitHub Enterprise Server
defaultOwner / defaultRepo—Without them the model must pass owner/repo
timeoutMs30000Per-request timeout
perPage30Default page size (max 100)
maxTextChars6000Clip budget for bodies and ordinary responses
maxPatchChars3000Clip budget per file patch
maxDiffChars20000Clip budget for a full diff
maxFileBytes400000Larger files return metadata only
enableWritetrueWhether the mutating tools are registered
userAgentdsh-github-toolkit/0.3.0Request User-Agent

Credentials

The PAT lives in $DSH_HOME/.credentials.yaml:

refs:
  GITHUB_TOKEN: ghp_xxxxxxxx

Lookup precedence (owned by dsh-credentials-local): launch environment > credential file > project .env > $DSH_HOME/.env. A GITHUB_TOKEN exported before dsh starts therefore shadows the stored value, and the settings page reports that source.

Suggested fine-grained PAT permissions:

  • Read-only use: Contents: read, Issues: read, Pull requests: read, Metadata: read
  • Write tools as well: Contents: write, Issues: write, Pull requests: write
  • CI status: Actions: read, Checks: read
  • Organization repositories with SAML SSO need the token authorized for that organization, otherwise the API answers 403.

Troubleshooting

SymptomCause and fix
Test connection returns 401The token itself is invalid — truncated paste, expired or deleted, or an app secret instead of a PAT. Generate a new one
"No GitHub token was found"Neither the credential store, a .env, nor the process environment has a value. Save one in Settings → GitHub, or launch dsh with GITHUB_TOKEN=…
Reads work, writes or repo creation fail with 403 Resource not accessible by personal access tokenThe token lacks the permission (common with fine-grained tokens). Add it, or switch to a classic token
403 reporting a rate limitQuota exhausted; the message states when it resets
403 otherwiseUsually a missing scope, or an organization behind SAML SSO where the token is not authorized
404The resource does not exist, or the token cannot see private resources (needs repo / Contents: read)
422GitHub rejected the fields: missing branch, head equal to base, a label or assignee that is not a collaborator — the error carries GitHub's field-level detail
No GitHub page in SettingsRefresh the page first. If it is still absent, the running host has not published the new client-plugin graph yet (observed once); restart dsh
A saved token seems to have no effectCheck whether the launching shell already exports GITHUB_TOKEN (it shadows the stored value; the page reports which source is in use)
You installed someone else's plugindsh-tool-github on npm is a different project; this package is dsh-github-toolkit
git over HTTPS: schannel: AcquireCredentialsHandle failed: SEC_E_NO_CREDENTIALSWindows Schannel cannot acquire credentials in that environment (common inside sandboxes). git config --global http.sslBackend openssl switches git to OpenSSL; Node and pnpm are unaffected

Security notes

  • The token is resolved through ctx.credentials per request; the plugin never caches it, never logs it, and has no code path that writes it into configuration.
  • Test connection sends the typed value straight to api.github.com (not to the host); it stays in page memory and the field is cleared after a successful save.
  • github_api bypasses the purpose-built tools' field validation; with write access off it is restricted to GET.
  • The credential file is protected by file permissions, but the agent's tool processes run as the same OS user and can read it — keeping the location unadvertised is discretion, not isolation. A deployment that must keep keys away from its own agent needs a different store.

Development

npm install          # brings the @deepseek-ai peers the tests import
npm test             # host contracts + the browser bundle, offline (plus one live 401 check)
npm run test:installed
  • test/smoke.mjs needs no PAT: it drives the plugin the way the loader does, renders the settings section against a minimal React runtime, and asserts the error mapping against stubbed responses. With a network it also checks that a deliberately invalid token comes back as a mapped 401, and skips that part offline.
  • test/installed.mjs checks what the harness actually loads: node test/installed.mjs [profile] [pluginDir].

For a local checkout you can point a profile at this folder instead of publishing:

./install.ps1 -DryRun     # show what would be copied and written
./install.ps1             # copy into the web profile and add a manual row
./install.ps1 -Uninstall  # remove the copy and that row

Do not combine that with a dsh plugin add install: both resolve to the same package, and two active loader sources for one package are a composition error.

Layout

FileRole
cordis.patch.ymlBundle layer: the one row that mounts the host half
lib/index.jsHost half and package root: config, credential resolution, tool registration, settings namespace
lib/client.jsBrowser half: the Settings → GitHub page (hand-written client bundle, no build)
lib/rest.jsGitHub REST client: timeouts, pagination, error mapping
lib/tools-read.js, lib/tools-write.jsTool definitions
lib/format.js, lib/shared.jsPayload curation/rendering and parameter helpers
test/smoke.mjs, test/installed.mjsContract tests and an installed-copy check
screenshots.json, assets/Screenshots a storefront may show, declared inside the repository

Known limitations

  • The tools cover the REST surface this plugin models; anything else goes through github_api, which returns bounded JSON rather than a typed result.
  • GitHub Search's total_count is approximate for large result sets, and the plugin reports it as-is.
  • The browser half is a plain client bundle, so it renders its own controls rather than a schema-driven form; new options are added in lib/client.js and lib/index.js together.
  • A profile that has already loaded a client bundle needs a page refresh to pick up a new version of it.

License

MIT