前言¶
用 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