前言¶
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)
- 细粒度 PAT 需要权限:
安装与启用¶
- 构建打包(如果需要)
npm install
npm run build # 产出 lib/
npm pack # 产出 dsh-plugin-git-sync-<version>.tgz
- 装入 DSH profile
假设你的 profile 目录是~/.dsh/profiles/web,将构建好的包安装进去:
cd ~/.dsh/profiles/web
pnpm add /path/to/dsh-plugin-git-sync-<version>.tgz
- 注册 bundle
编辑 profile 的package.json,把插件加入dsh.profile.bundles:
{
"dsh": {
"profile": {
"bundles": [ "...其它 bundle...", "dsh-plugin-git-sync" ]
}
}
}
- 重启 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 新开对话后即可使用。
- 建仓(含仓库名确认/自定义)
我准备在 D:\my-project 开始一个新项目(目录为空),帮我建 GitHub 仓库并写一个 Python 脚本。
agent 会调用 git_init:
- 询问是否建仓
- 询问仓库名是否为 my-project,用户确认或输入自定义名称
- 名称冲突时自动建议后缀(如 my-project-2)
- 自动完成本地 init、GitHub 建仓、首次提交推送
- 改名
把仓库名改成 better-name。
agent 调用 git_rename,确认后完成 GitHub 改名和本地 remote 同步。
- 改代码后自动同步
加一个参数解析功能。
agent 改完代码调用 git_sync 提交推送;若未调用,回合结束时自动兜底推送。
注意事项¶
- 插件以当前 DSH 进程权限运行,请确保 DSH Desktop 有权限读写工作目录和 Git 命令。
- 插件状态存储在
<workspace>/.dsh-git-sync/目录,该目录已自动加入项目的.gitignore。 - 若本地 TLS 被拦截(如安全软件或代理),需设置
github.insecureTls: true。 - 插件依赖 Cordis 插件体系,首次加载失败会被「启动恢复」机制自动禁用,需检查
startup-recovery/state.json的disabledBundles并移除。