zou82/dsh-plugin-git-sync:DeepSeek Harness 的 Git + GitHub 自动化插件

前言

DeepSeek Harness (DSH) 通过插件体系扩展功能。zou82/dsh-plugin-git-sync 是一个工作流插件,用于自动化本地 Git 仓库与 GitHub 之间的交互。它处理创建、同步和凭据管理,以减少手动操作。

核心功能

  • 项目启动询问建仓:新项目开始时,agent 先询问是否在 GitHub 建仓。仓库名必须经用户确认,不满意可直接输入想要的名称,建仓后随时可改名。
  • 每次改代码自动同步:agent 每轮修改后调用 git_sync 提交推送;漏掉时由「回合结束兜底」自动同步(可配置)。
  • 安全凭据处理:GitHub 令牌存储在 DSH 的凭据存储中,绝不进入对话、远程 URL、进程命令行或任何输出。
  • 文件监听与自动提交:工作区文件一变化就自动提交推送(可配置防抖毫秒数)。
  • 冲突处理:支持 pull --rebase,冲突时列出冲突文件清单并停下交由手动解决,绝不 force push。
  • Conventional Commits 支持:引导 agent 使用 feat/fix/chore(scope): summary 格式。
  • 敏感文件扫描:提交前扫描 .env、密钥等敏感文件以及大文件(警告阈值 50MB)并阻止提交。
  • 自动设置提交身份:自动根据 repo/local 配置设置 git 提交身份,不动全局配置。

环境要求

  • DeepSeek Harness Desktop (DSH) 2.x
  • 本机已安装 Git(git --version 可用)
  • 一个 GitHub 账号和 Personal Access Token (PAT)
    • 细粒度 PAT 需要权限:Administration: Read and write(建仓)、Contents: Read and write(推送)、Metadata: Read
    • 经典 PAT 需要权限:repo(整个 scope)

安装与启用

  1. 构建打包(如果需要)
   npm install
   npm run build       # 产出 lib/
   npm pack            # 产出 dsh-plugin-git-sync-<version>.tgz
  1. 装入 DSH profile
    假设你的 profile 目录是 ~/.dsh/profiles/web,将构建好的包安装进去:
   cd ~/.dsh/profiles/web
   pnpm add /path/to/dsh-plugin-git-sync-<version>.tgz
  1. 注册 bundle
    编辑 profile 的 package.json,把插件加入 dsh.profile.bundles:
   {
     "dsh": {
       "profile": {
         "bundles": [ "...其它 bundle...", "dsh-plugin-git-sync" ]
       }
     }
   }
  1. 重启 DSH Desktop
    完全退出并重新打开 DSH Desktop。插件装载后,日志会出现:
   [I] [git-sync] git-sync: 插件已加载(GitHub 同步已启用)

配置

插件有两类配置:GitHub 令牌(凭据)和插件设置。两者都可以在 DSH 设置界面(设置 → 插件 → 插件配置 → GitHub 同步)修改,也支持直接编辑文件。

1. 配置 GitHub 令牌

在 ~/.dsh/.credentials.yaml 文件的 refs: 下添加一行:

version: 1
refs:
  DEEPSEEK_API_KEY: 你的-其他-密钥
  GITHUB_TOKEN: github_pat_xxxxxxxxxxxx

2. 配置插件设置

在 ~/.dsh/settings.yaml 文件中添加 git-sync: 段:

git-sync:
  github:
    username: 你的GitHub用户名        # 建仓 owner;留空则用令牌对应账号
    visibility: private               # 默认仓库可见性:private / public
    defaultBranch: main
    insecureTls: false                # 本机 TLS 被拦截时设为 true
  auth:
    method: extraheader               # git 凭据注入方式
  git:
    committerName: ""                 # 提交作者名;留空用 GitHub 用户名
    committerEmail: ""                # 提交作者邮箱;留空用 GitHub noreply 邮箱
  autoSync: true                      # 回合结束兜底策略
  askBeforeInit: true                 # 项目启动时是否询问建仓
  init:
    createGitignore: true
    initialCommitMessage: "chore: initial commit"
  safety:
    scanForSecrets: true              # 提交前扫描敏感文件并阻止提交
    maxFileSizeMb: 50                 # 大文件告警阈值

典型用法

插件在 DSH 新开对话后即可使用。

  1. 建仓(含仓库名确认/自定义)

    我准备在 D:\my-project 开始一个新项目(目录为空),帮我建 GitHub 仓库并写一个 Python 脚本。

agent 会调用 git_init:
- 询问是否建仓
- 询问仓库名是否为 my-project,用户确认或输入自定义名称
- 名称冲突时自动建议后缀(如 my-project-2)
- 自动完成本地 init、GitHub 建仓、首次提交推送

  1. 改名

    把仓库名改成 better-name。

agent 调用 git_rename,确认后完成 GitHub 改名和本地 remote 同步。

  1. 改代码后自动同步

    加一个参数解析功能。

agent 改完代码调用 git_sync 提交推送;若未调用,回合结束时自动兜底推送。

注意事项

  • 插件以当前 DSH 进程权限运行,请确保 DSH Desktop 有权限读写工作目录和 Git 命令。
  • 插件状态存储在 <workspace>/.dsh-git-sync/ 目录,该目录已自动加入项目的 .gitignore。
  • 若本地 TLS 被拦截(如安全软件或代理),需设置 github.insecureTls: true。
  • 插件依赖 Cordis 插件体系,首次加载失败会被「启动恢复」机制自动禁用,需检查 startup-recovery/state.json 的 disabledBundles 并移除。

链接

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜