dsh-github-sync:用私有 GitHub 倉同步 DSH 會話,跨設備接力

前言

本地部署的 DeepSeek Harness(DSH)把對話和會話落在本機磁盤上,沒有配套的雲端賬號或統一存儲。你在辦公室電腦聊到一半的任務,回到家另一臺機器上往往只能從頭開新會話,或靠手工拷貝 session 目錄,路徑和工作區登記還要自己對齊。

dsh-github-sync 做的是把會話(以及會話引用的附件)推到你自己的私有 GitHub 倉庫,在 B 機拉下來後改寫工作區路徑並登記進項目列表,接着聊。不依賴自建服務器,也沒有插件自帶的賬號體系,只有你的倉和 fine-grained 訪問令牌。

這是什麼

插件全名 dsh-github-sync,維護者爲 mount9527,在 DSH 社區目錄中歸類爲「記憶」。當前包版本爲 0.5.1(見倉庫 package.json),許可證 MIT。

一句話定位:把 DSH 會話同步到私有 GitHub 倉,用於 Windows / macOS 下的跨設備接力。同步是純手動的,不點不動,沒有後臺定時任務。

核心功能

裝好後左側邊欄會出現「GitHub 同步」面板。README 中歸納的能力如下。

能力 說明
上傳會話 勾選本地會話推送;連帶引用到的圖片等附件;一批文件合成一個原子提交
下載會話 從遠端拉回後改寫頭幀裏的 cwd 到本機工作區,並通過宿主服務註冊進項目列表,一般無需重啓即可繼續聊
上傳文件夾 默認關閉,在設置裏開啓後,可選工作區子目錄,按排除清單過濾後推到 <項目>/files/
下載文件 默認關閉,開啓後把遠端文件寫回工作區(同名衝突另存副本,路徑做了防穿越)
Agent 工具 可對 agent 說「把這條會話推到 GitHub」等;宿主側先 preview 出清單,確認後再 execute

傳輸過程帶文件級進度條,可展開明細、單文件跳過、在文件之間取消;面板裏的工作區選擇、勾選與開關會記在瀏覽器本地。每條會話旁有同步徽標(已同步、本地更新、遠端更新、未上傳、活躍等),便於判斷要不要推或先拉。

倉庫側典型佈局:

README.md                        # 自動生成的索引(每次上傳重寫)
manifest.json                    # 會話 id → 路徑、原始 cwd、sha、附件列表
<項目>/sessions/<id>.jsonl.zstd  # 會話本體
<項目>/attachments/<sha>.<ext>   # 附件
<項目>/files/<相對路徑>           # 可選的文件夾同步內容

多設備上傳前會合並遠端索引,避免互相覆蓋記錄;兩端都改過同一會話時,預覽會標 blocked,可先下載或明確選一邊覆蓋。

安裝與啓用

從插件市場安裝(推薦):在 DSH 的「插件」裏搜索 dsh-github-sync,安裝後啓用即可。

從本地目錄安裝(開發或自用)可按 README 任選其一:

  1. DSH →「插件」→ 添加插件 → 本地目錄,選中插件所在文件夾。
  2. 由 agent 調用 plugin_manager install_bundle,target 填該文件夾的絕對路徑。
  3. 在 profile 的 package.json 裏增加 "dsh-github-sync": "link:<路徑>",並把它加入 dsh.profile.bundles。

運行環境要求:node >= 20.0.0,dsh >= 0.2.1-rc.5(見 package.json 的 engines)。

大陸網絡若 npm 官方源較慢,README 建議用鏡像安裝包(與 DSH 插件市場安裝是不同路徑,按需使用):

npm install dsh-github-sync --registry=https://registry.npmmirror.com

鏡像同步有延遲,剛發版時可能沒有最新版。客戶端改動後按 F5 刷新頁面;宿主代碼改動需重載插件(重啓 DSH,或在插件管理器裏關閉再啓用)。

首次配置

  1. 建空的私有倉:在 GitHub 新建倉庫,不要勾 README、不要勾 .gitignore,類型選 Private。首次提交時倉裏已有文件會多一次合併。
  2. 建 fine-grained PAT:打開 https://github.com/settings/tokens?type=beta → Generate new token。Repository access 選 Only select repositories 且只勾這一個倉;Contents 爲 Read and write;Metadata Read-only(勾 Contents 後通常會帶上);其它權限保持 No access。令牌只顯示一次,複製後儘快填入面板。
  3. 面板填寫並測試:右上角設置 → 倉庫地址(owner/repo 或完整 URL)+ 訪問令牌 → 測試連接。成功時顯示 連接正常 · owner/repo。公開倉會被拒絕;401 常見爲令牌未粘全,404 多爲倉名錯誤或令牌未授權到該倉。

沒連上倉庫時,面板頂部有「開始配置」嚮導,步驟與上面一致。

典型用法

面板操作

所有寫操作必須先預覽:預覽會爲每個文件標註 upload / skip / blocked / copy 及原因,確認後才執行。被 blocked 遠端更新 擋住的行,行尾有「先下載」按鈕。

日常可在面板中:勾選本地會話 →「預覽上傳」;或勾選遠端會話 →「下載會話」。配合搜索、「只看未同步」「選未同步」「同步此工作區(N)」批量處理。頂部可查看遠端索引裏的設備與最近活動時間,以及歷史記錄(落盤在 $DSH_HOME/github-sync/history.jsonl)。

對 Agent 說

README 列出的自然語言示例包括:

  • 「把這條會話推到 GitHub」
  • 「遠端都有哪些會話」
  • 「從遠端把某某會話拉到這個工作區」

對應工具會先 phase=preview 給出清單,再在用戶確認後以 phase=execute 執行。

適用場景與注意

適合誰:在多臺電腦之間用同一套私有 GitHub 做「會話接力」的 DSH 用戶;希望對話和附件進自有倉、不經過第三方同步服務的團隊或個人。

安全與邊界(據 README):

  • 插件默認只同步對話;文件夾/文件同步需在設置裏顯式打開,未開啓時相關接口返回 403。
  • 只允許私有倉;密鑰類文件名(如 .env*、*.pem、id_rsa 等)上傳會被硬阻斷。
  • Token 由宿主保存在 $DSH_HOME/.credentials.yaml,面板不回顯。寫操作範圍主要限於 $DSH_HOME/github-sync/、下載/刪除會話與附件時的 $DSH_HOME/sessions/ 與 $DSH_HOME/attachments/,以及(開啓後)當前工作區。
  • 不啓動子進程、不執行外部命令、不訪問 GitHub 以外域名——上述不變量由倉庫內 tools/audit-safety.mjs 做發佈前靜態檢查。

安裝前建議:插件以當前 DSH 宿主進程權限運行,安裝前應自行查看源碼與 MIT 許可證,確認令牌權限範圍與倉的私密性符合你的安全要求。

其它限制:附件隨會話引用上傳,單文件超過 25MB 會跳過並在預覽告警;只處理 version: 4 的會話格式。Git 歷史會累積 blob,長期可用 git filter-repo 或重建空倉等方式回收空間;README 建議「一個項目一個倉」便於清理。

結尾

dsh-github-sync 用你自己的私有 GitHub 倉補上 DSH 本地版沒有云端存儲的空缺:手動上傳/下載、原子提交、跨機改寫 cwd 並登記會話,讓多臺設備在同一條對話上接力。社區目錄頁:https://www.skillhub.cn/plugins/mount9527/dsh-github-sync;源碼與完整說明:https://github.com/mount9527/dsh-github-sync。

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

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

小夜