前言¶
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並移除。