前言¶
用 DeepSeek Harness(DSH)做 AI 編程時,工作區裏往往有源碼、.git 歷史,還有 .env、密鑰之類敏感文件。把整倉備份到雲端可以方便跨設備恢復或對話級回退,但常見做法是靜默上傳、密鑰在服務端、敏感文件照樣進包——用戶既關不掉,也解不了密。
下面介紹社區插件 dsh-plugin-repo-snapshot(維護者 isayrhythm,SkillHub 分類爲聯網工具):在 DSH 裏把當前項目打包、加密,存到本機目錄或你自己的阿里雲 OSS;解密私鑰只留在本機。設置頁可開關、可測連、可立即備份。插件以當前 dsh 進程權限運行,安裝前建議通讀 GitHub 倉庫 源碼與 MIT 許可證。
這是什麼¶
dsh-plugin-repo-snapshot 是面向 DeepSeek Harness 的工作區加密快照備份插件(npm 包名 dsh-plugin-repo-snapshot,當前資料中版本爲 1.0.0)。它解決的是:在「需要備份工作區(含可選 .git)」的前提下,讓數據去向、是否上傳、能否解密都由用戶自己控制,而不是交給不可見的雲端邏輯。
DSH 生態理念是「一切皆插件」;SkillHub 目錄頁 是社區站點,與 DeepSeek / 幻方無官方從屬關係。
核心功能¶
資料中明確的能力如下。
- 加密快照:AES-256-GCM 歸檔(可選 AES-256-CTR);AES 密鑰用本機 RSA-4096 公鑰封裝(RSA-OAEP-SHA256)。私鑰位於
<DSH_HOME>/repo-snapshot/keys/private.pem,不上傳。 - 兩種目的地:本機目錄,或阿里雲 OSS(零
ali-ossSDK,用 Node 內置fetch+node:crypto做 V1/V4 簽名 PUT)。 - 設置界面:DSH Web 設置頁內「倉庫快照備份」分區——開關、OSS 參數、保存並測試連接、立即備份。
- 敏感文件攔截:默認攔截
*.pem、*.key、id_rsa、*_rsa、.env、.npmrc、.git-credentials、.ssh等;跳過項會在對話中計數說明。 - 其它行爲:超大文件按
scan.maxFileSizeMB跳過並計數;內容未變可 dedupe 跳過重複上傳;可選包含完整.git;觸發時機支持session-start/pre-step/both/manual。
安裝與啓用¶
從 npm / GitHub 安裝¶
包內聲明瞭 dsh.bundle.patch,安裝時會自動把插件行插入 composition,無需手工改 profile 配置(本地 link 開發時除外)。
dsh plugin --profile web add dsh-plugin-repo-snapshot
依賴側:打包用 archiver;OSS 不依賴阿里雲官方 Node SDK。宿主要求 Node >=20.0.0。
本地開發掛載(可選)¶
若從本地目錄 link 開發,需在 profile 的 cordis.patch.yml 裏掛載插件行,並重啓 dsh web——插件本體是 ESM,客戶端 bundle 只在啓動時加載,熱重載不會重新導入。
cd <你的 DSH profile 目錄> # 例如 ~/.dsh/profiles/web
pnpm add link:/path/to/dsh-plugin-repo-snapshot
- insert:
- id: repo-snapshot
name: dsh-plugin-repo-snapshot
典型用法¶
經過上面的安裝步驟並重啓 dsh web 後,打開 設置 → 倉庫快照備份。
- 打開 啓用 開關,決定是否創建快照。
- 存儲位置 選「本機目錄」或「阿里雲 OSS」。
- OSS 需填Region(如oss-cn-hangzhou)、Bucket、AccessKey ID、AccessKey Secret;建議用僅對該 bucket 有寫權限的 RAM 子賬號。
- 若不想讓 AK/SK 寫入settings.json,可在設置頁留空,改用環境變量:
export ALIYUN_OSS_ACCESS_KEY_ID=LTAI...
export ALIYUN_OSS_ACCESS_KEY_SECRET=...
- 點 保存並測試連接:會在目標位置寫入並刪除探針文件以驗證可用性。
- 點 立即備份一次 立刻生成快照;也可按
trigger配置在會話開始等時機自動觸發。
快照在目的地的大致結構:
<目的地>/<prefix>/<日期>/<會話ID>/<snap_...>/
├── snapshot.tar.gz.enc # 加密後的歸檔
└── snapshot.key.enc # 被本機公鑰封裝過的 AES 密鑰
歸檔內包含 manifest.json(時間、工作區、清單、跳過統計)以及 files/<相對路徑> 下的文件內容。
恢復¶
從目的地取回某次快照的 snapshot.tar.gz.enc 與 snapshot.key.enc 後,在本機用倉庫自帶腳本解密(需保留 private.pem;丟失則無法恢復,無後門):
node scripts/decrypt.mjs \
--input snapshot.tar.gz.enc \
--key snapshot.key.enc \
--private-key ~/.dsh/repo-snapshot/keys/private.pem \
--output ./restored
Windows 下私鑰默認路徑爲 C:\Users\<你>\.dsh\repo-snapshot\keys\private.pem。資料註明:尚未提供「從 OSS 一鍵下載並恢復」的腳本,需從控制台或 ossutil 取回兩個文件後再跑 decrypt.mjs。
配置與 HTTP 接口(腳本化)¶
設置頁寫入 <DSH_HOME>/repo-snapshot/settings.json,優先於 cordis.patch.yml。常用項包括 enabled、oss.provider(local / aliyun)、oss.prefix(默認 repo-snapshots/)、scan.includeGit、scan.excludeSensitiveFiles、trigger、dedupe 等;完整表格見 GitHub README。
宿主還註冊了供設置頁或腳本調用的路由,例如:
| 方法 | 路徑 | 說明 |
|---|---|---|
GET |
/plugins/repo-snapshot/status |
配置(密鑰脫敏)、指紋、最近快照 |
POST |
/plugins/repo-snapshot/backup-now |
立即備份,可傳 workspacePath |
適用場景與注意¶
適合誰:希望在 DSH Web 場景下,把當前工作區(可選含 .git)做加密、可審計備份到自有存儲的開發者;尤其關注 .env、密鑰等默認攔截、以及 OSS 權限最小化(PutObject / DeleteObject)的用戶。
務必注意:
- 插件以當前
dsh進程權限讀寫工作區並上傳;安裝前應自行審查源碼與 MIT 許可證。 - 快照爲全量打包,增量備份尚未實現;大倉庫 Git pack 可能因
maxFileSizeMB(默認 5)被跳過,必要時調大。 - 快照只增不減,舊快照清理需自行制定策略。
- OSS 簽名默認
auto(先試 V4 再回退 V1);403 或簽名錯誤時 README 提供了signatureVersion與 RAM 權限排查說明。