dsh-packer:把 DSH 本地配置按模塊打包成標準 zip

前言

用 DeepSeek Harness(DSH)一段時間後,本地 ~/.dsh 下會積累不少資產:自己寫的 skills、歷史會話、profile 配置、全局設置、記憶數據。換機器或重裝時,這些文件散落在不同目錄,手動找齊再拷過去很容易遺漏;想把幾個 skill 發給別人,又不確定文件裏是否帶着本地路徑或密鑰。

dsh-packer 針對的就是這兩件事:把本地 DSH 資產按模塊打包成標準 zip,一條鏈路覆蓋遷移(整套環境搬過去)與分享(只把該給的給別人),打包前的隱私掃描貫穿兩種場景。

這是什麼

dsh-packer 是 DSH 的「Agent 配置打包器」插件,由 KLRSL 維護,MIT 許可證,當前版本 v0.2.2(2026-09-05)。DSH 的理念是「一切皆插件」,插件通過 dsh plugin 命令安裝進 profile,這個插件本身也遵循同一套機制。

它的能力分三塊:按模塊組合打包、打包與恢復前後的預覽校驗、隱私安全掃描,全部按需開啓。下面分別介紹。

核心功能

模塊化打包與雙模式預設

六個模塊任意組合:

模塊 內容
skills Skills,位於 ~/.dsh/skills
sessions 會話記錄(.zstd 格式),位於 ~/.dsh/sessions
profiles Profile 配置(不含 node_modules),位於 ~/.dsh/profiles
settings 全局設置(settings.yaml)
presets Agent 預設(.agent-presets)
memory 記憶數據(DSH_MEMORY_ROOT 或 ~/.dsh/memory,不含 backups/)

兩個預設模式:

1、遷移(migrate):全部模塊默認勾選,適合搬遷整套環境;

2、分享(share):只勾 skills,會話與記憶自動排除,個人 skill 子目錄 _shared 也會排除,讓敏感內容儘可能少進包。

隱私安全掃描

打包前對文本文件做掃描,規則包括:本地絕對路徑、用戶目錄路徑、疑似密鑰 / Token(api_key、secret、password、token、bearer、authorization 等賦值)、個人暱稱、Windows 用戶名路徑。

攔截策略按模式區分:分享模式命中任何規則即報錯、強制攔截、不生成包;遷移模式僅報告不攔截,可以先用 /pack scan 或 --dry-run 查看命中點,自行判斷。

另外,.credentials.yaml 與 .anonymous-user-id 永不進包——遍歷任何模塊時一律跳過,無論遷移還是分享。

打包與恢復的可預覽性

打包前可以預覽文件級清單,--dry-run 模式不生成 zip;恢復前先出差異報告,按新增 / 變更 / 相同 / 跳過四類列出文件,確認後再應用。

恢復衝突策略

對沖突文件三選一:overwrite(覆蓋)、skip(跳過)、merge(文本追加,不覆蓋已有內容)。注意 JSON / YAML 等結構化配置不支持 merge——追加即損壞,這類文件請用覆蓋或手工合併。

清單完整性校驗與路徑安全

包內清單 manifest.json 記錄 schemaVersion 與每個文件的 SHA-256 指紋;恢復前做 fail-closed 校驗,任何一項不匹配就整體拒絕、不應用任何文件。恢復路徑還做 containment 校驗,zip-slip 或篡改清單的 ../ 越界一律拒絕。

包管理

包列表展示創建時間、大小、包含模塊、備註,支持刪除、重命名,打包時可以填寫備註。分享包會自動生成並附帶一份 README.md 說明包內容。

界面與實現

1、設置頁提供「配置打包」標籤頁(模塊勾選 / 預設切換 / 預覽 / 打包 / 恢復 / 包管理),與 /pack 命令等價;

2、打包工作流面板跟隨 DSH 主題做深色模式適配(--dsw-alias-* 變量,雙通道探測);

3、零原生 npm 依賴:使用系統 bsdtar(libarchive)生成標準 zip,任何解壓工具可打開。Windows 10+ 自帶 tar.exe(即 bsdtar),macOS 的 tar 就是 bsdtar。

安裝與啓用

從 GitHub 安裝,需要機器上已裝 git:

dsh plugin --profile web add github:KLRSL/dsh-packer

其中 --profile web 是示例,換成自己的 profile 名。安裝完成後需重啓 DSH。

本地開發可以直接 link:

dsh plugin --profile web add link:./dsh-packer

環境要求:

Node.js ≥ 22.19.0
DSH 依賴 ≥ 0.1.1-rc.2(v0.2.2 已適配並實測 0.1.2-rc.1)
peer 依賴:@deepseek-ai/cordis ^4.0.2、@deepseek-ai/dsh-tools ≥0.1.1-rc.2、@deepseek-ai/dsh-session ≥0.1.1-rc.2

安裝後驗證,任選其一:

1、打開設置頁的「配置打包」標籤頁,能看到模塊勾選界面即安裝成功;

2、運行 /pack list,返回包列表(首次爲空)即命令已註冊;

3、運行 /pack create --dry-run,預覽文件清單與掃描結果,確認各模塊路徑可讀。

典型用法

先做預覽,確認要打包的內容:

/pack create --mode migrate --dry-run

這一步不生成 zip,只輸出文件清單與掃描結果。確認無誤後再創建遷移包,默認全選模塊:

/pack create --note "遷移到新機器"

或者創建分享包,只含 Skills:

/pack create --share --note "分享給朋友"

打包結果寫入 ~/.dsh/packs/。

恢復時先導入包並查看差異報告:

/pack restore ~/.dsh/packs/dsh-packer-2026-09-05-223045-migrate.zip

再指定衝突策略應用:

/pack restore <zip路徑> --strategy merge

策略取值 overwrite | skip | merge。

其餘兩個常用命令:

/pack list    # 列出已有包:時間/大小/模塊/備註
/pack scan    # 對所有可打包模塊做隱私掃描

輸出位置由三個環境變量控制,均有默認值:

環境變量 默認值 說明
DSH_PACKS_DIR ~/.dsh/packs 打包輸出目錄
DSH_MEMORY_ROOT ~/.dsh/memory memory 模塊數據位置
DSH_HOME ~/.dsh 各模塊路徑基準

適用場景與注意

適合兩類人:一是要換機器或重裝、想把整套 DSH 環境完整搬走的用戶;二是想把 skills 分享給別人、又不想手工排查敏感內容的用戶。個人備份用遷移模式即可(僅報告隱私命中),但這類包不要發給別人。

幾點注意:

1、分享模式刻意嚴格,命中任何隱私規則都會攔截。先跑 /pack scan 看哪些文件命中,清理後再打包;

2、JSON / YAML 等結構化配置恢復時不能用 merge,選覆蓋或手工合併;

3、恢復時若 manifest 校驗失敗,說明包缺失清單、版本不兼容或包被改動過,重新生成或重新分發原包,不要手工解壓修改 zip 內容;

4、插件以當前 dsh 進程的權限運行,能讀寫 ~/.dsh 下的文件。安裝任何第三方插件前,建議先檢查其源碼與許可證(本項目爲 MIT)。

小結

經過上面的步驟,DSH 本地配置的遷移與分享可以收攏成一條命令鏈路:--dry-run 預覽、/pack create 打包、/pack restore 校驗後恢復,隱私掃描在分享場景強制把關。如果你在維護多臺機器上的 DSH 環境,或者經常給別人發 skill,可以裝一份試試。

倉庫地址:https://github.com/KLRSL/dsh-packer

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

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

小夜