前言¶
本地部署的 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 任選其一:
- DSH →「插件」→ 添加插件 → 本地目錄,選中插件所在文件夾。
- 由 agent 調用
plugin_manager install_bundle,target填該文件夾的絕對路徑。 - 在 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,或在插件管理器裏關閉再啓用)。
首次配置¶
- 建空的私有倉:在 GitHub 新建倉庫,不要勾 README、不要勾
.gitignore,類型選 Private。首次提交時倉裏已有文件會多一次合併。 - 建 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。令牌只顯示一次,複製後儘快填入面板。 - 面板填寫並測試:右上角設置 → 倉庫地址(
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。