dsh-github-sync: 將 DSH 工作區發佈到 GitHub

DeepSeek Harness (DSH) 工作區的代碼通常在本地管理。如果要將其發佈到 GitHub,通常需要手動創建倉庫、初始化 git、配置認證信息並推送。dsh-github-sync 插件通過 DSH 的憑據庫管理 GitHub Personal Access Token (PAT),自動完成倉庫創建、初始化、提交和推送。該插件由 s-huizhuy-u 維護,採用 MIT 許可證。

核心功能

插件提供以下能力:

  1. 創建倉庫:GitHub 上不存在則創建,已存在則複用。
  2. 初始化 git:沿用項目當前所在分支;新倉庫默認使用 main。
  3. 提交:暫存整棵工作樹並提交;沒有變更時複用現有 HEAD,而不是報錯。
  4. 推送:歷史分叉時先 fetch 再 rebase 再推送。
  5. 自動配置:寫入賬號的提交身份,並把分支上游記錄下來。
  6. 只讀預覽:github_status 報告同步將要做什麼,不改動任何東西。

安裝與啓用

將插件包複製到 DSH profile 目錄,並執行安裝腳本:

node scripts/install.mjs

腳本會定位 DSH home,將插件複製到 <profile>/.local-plugins/ 和 <profile>/node_modules/,並更新 dsh.profile.bundles 和 cordis.patch.yml。安裝完成後重啓 DSH。

環境要求

運行此插件需要滿足以下條件:

  • DeepSeek Harness 0.1.5-rc.2 或更高版本
  • Node.js 20.12+(需要 AbortSignal.any)
  • PATH 中包含 git 可執行文件

典型用法

插件提供了三個主要工具:

  • github_sync:發佈當前工作區。
  • github_status:報告同步將會做什麼。
  • github_configure:向 GitHub API 校驗並存儲 token。

示例交互

用戶向助手發出指令:

你:把這個項目傳到 GitHub

助手執行 github_sync 後反饋:

DSH:已同步 12 個變更文件到 octocat/my-project(分支 main)。
倉庫:https://github.com/octocat/my-project

認證配置

使用前需要一個 GitHub Personal Access Token (PAT)。

提供方式

有三種方式提供 token:

  1. 環境變量:設置 GITHUB_TOKEN 或 GH_TOKEN。這是 CI 和共享機器上的最佳選擇,不會在磁盤留下痕跡。
  2. 助手存儲:說「存一下我的 GitHub token」,助手會使用 github_configure 存儲。
  3. HTTP API:向 POST /api/github-sync.token 發送請求,body 爲 {"token": "..."}。

權限要求

Token 類型 需要的權限
classic repo(僅發佈公開倉庫可用 public_repo)
fine-grained Contents: Read and write;若要創建倉庫,還需 Administration: Read and write

重要說明:存儲的 token 保存在 DSH 憑據庫中,不在 settings.yaml。所有 token 在日誌或對話記錄前都會被遮蔽。

設計取捨

爲了安全性和穩定性,插件做出了以下設計決定:

  1. token 永不落盤:origin 保存乾淨的倉庫 URL,認證信息僅在單次 git push 時使用。token 不會進入 .git/config。
  2. git 永不彈出提示:每次調用都設置 GIT_TERMINAL_PROMPT=0、GIT_ASKPASS= 和 GCM_INTERACTIVE=never,避免認證失敗時調用掛起。
  3. 遠端分叉是協調:衝突時使用 git rebase --abort 回滾,工作樹保持原樣,需手動解決衝突或顯式開啓 force 覆蓋。
  4. 非併發安全:同一工作區多次 git 操作會在索引鎖上衝突。

故障排查

現象 原因與處理
No GitHub token is configured 設置 GITHUB_TOKEN 環境變量,或使用 github_configure 存儲並重啓 DSH
GitHub rejected the request (HTTP 401) Token 過期或錯誤,需重新簽發
HTTP 403 且帶權限提示 檢查 token 權限。fine-grained token 需勾選倉庫並授予 Contents 和 Administration 寫權限
TLS_UNTRUSTED 若使用了 GitHub 加速器(如 Watt Toolkit、FastGithub),需配置 NODE_EXTRA_CA_CERTS
git push failed … non-fast-forward 遠端有新提交,可重試或傳 force 參數覆蓋

生態鏈接

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

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

小夜