DeepSeek Harness 插件

Shyboy0499/dsh-git-tools

Star 数 ★ 2 分类 Git 与代码评审 收录于 2026-08-27

为 DeepSeek Harness 提供四个零依赖本地 git 工具(status、diff、log、commit),作用于会话工作区。

安装

# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)

dsh plugin --profile web add github:Shyboy0499/dsh-git-tools

装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。

README

该插件的 README 只有英文版本。

CI

Local git tools for DeepSeek Harness (dsh).

dsh-git-tools is a dependency-free DeepSeek Harness plugin that gives the coding agent four local git tools — git_status, git_diff, git_log, and git_commit — so it can inspect the repo in the session workspace and create commits, all through the official tool API. No UI, Host-side only.

Features

Tool What it does
git_status Branch, ahead/behind, and staged / unstaged / untracked files
git_diff Stat summary or full patch, staged or unstaged, optional path filter
git_log Recent commits as { hash, author, date, subject }
git_commit Stage specific paths (or all) and commit with a required message

Installation

dsh plugin --profile web add dsh-git-tools

Requires git on your PATH (present in any development environment).

Tool reference

All tools accept an optional cwd (defaults to the session workspace).

git_status

Inspect the working tree and branch state.

{
  "branch": "main",
  "ahead": 0,
  "behind": 2,
  "staged": [{ "path": "src/index.ts", "status": "M" }],
  "unstaged": [],
  "untracked": ["scratch.txt"]
}

git_diff

View changes. staged diffs the index, statOnly: true (default) returns a stat summary, statOnly: false returns the full patch. path filters to a single file.

{
  "stat": [{ "file": "src/index.ts", "added": 3, "deleted": 1 }],
  "total": { "files": 1, "insertions": 3, "deletions": 1 },
  "patch": null
}

git_log

List recent commits. count defaults to 10 (max 100); path filters to a file.

{
  "commits": [
    {
      "hash": "a1b2c3d4e5f67890abcdef1234567890abcdef12",
      "author": "Shyboy0499",
      "date": "2026-08-26",
      "subject": "Fix typo"
    }
  ],
  "total": 1
}

git_commit

Create a commit. message is required (non-empty). Stage specific files with paths, or everything with all: true. Never stages implicitly.

{
  "success": true,
  "hash": "e5f6g7h0123456789abcdef0123456789abcdef01",
  "branch": "main",
  "filesStaged": 2
}

Safety

  • All git calls run through execFile with arguments passed as arrays — no shell interpolation, so user/model-controlled values are injection-safe.
  • git_commit requires an explicit message and never stages files on its own (pass paths or all: true).
  • No destructive operations (--amend, --force, rebase, reset) in the core scope.

Development

pnpm install
pnpm run build        # tsdown → lib/
pnpm test             # vitest against real throwaway git repos
pnpm run lint         # oxlint
pnpm run format       # prettier --write .

License

MIT

内容来自项目 README(GitHub)↗

链接

同类插件

查看整个分类 →

社区评论

评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。