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

鏈接

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

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

小夜