DeepSeek Harness profile 怎么重建?from-default-profile 与失败回滚

更新与升级发布于 2026-10-21作者: DeepSeek Plugin 插件市场
DeepSeek Harnessprofilefrom-default-profile回滚dsh rescue
DeepSeek Harness 的 --from-default-profile 会用随附模板替换一个自定义 profile,删掉原有依赖与用户 patch。它在暂存目录组装后再切换,失败可从 .staging previous 手动恢复。

--from-default-profile 不是“把旧 profile 升级到新模板”,而是“用一个全新模板副本把旧目录替换掉”。 新 profile 只保留模板当前的组合包列表,原有依赖、用户 patch 和本地改动都会被删除。它适合把损坏或严重跑偏的自定义 profile 拉回可用状态,不适合想保留配置的日常升级。

DeepSeek Harness:它到底替换什么、保留什么

替换的边界很硬:模板带来的留下,旧目录里的东西全部消失。 对照如下:(来源)

内容重建后
模板当前的组合包列表写入新 manifest
已安装依赖清空
用户 cordis.patch.yml清空
旧 profile 的继承字段不保留
内置组合包仍从当前 dsh 安装目录解析

新副本的 manifest 依赖为空、用户 patch 为空。它不会读取同名的本地模板 profile,也不会复制那个 profile 的依赖或 patch。模板列表之后的变化,也不会自动改写已经建好的新 profile。

这就是为什么它更像“重置”而不是“升级”。如果你的目标是保留插件、只更新基础组合,应该改 dsh.profile.bundles 或重装插件,而不是用这个参数。

DeepSeek Harness:三种适用场景

它最适合“目标 profile 已经不可信,但我想从干净模板重新开始”的情况。 三种场景:(来源)

  1. 救援 profile — dsh rescue --from-default-profile web,把 rescue 按 web 模板重建。预期:得到一个干净、可启动的 Web profile。
  2. 复现默认行为 — 怀疑自定义 profile 被 patch 污染,重建后对比默认表现。预期:排除本地配置干扰。
  3. 废弃实验 profile — 实验失败后不想逐项清理,直接按模板重置。预期:目录回到初始状态,再按需重装。

如果只是想新建一个 profile,不需要先建再替换;直接用 --from-default-profile 建一个新名字即可。这个参数在“目标已存在”时才是破坏性的。

DeepSeek Harness:命令与执行顺序

启动器不是直接删目录,而是先在旁边组装,再移动替换;理解这个顺序才能理解失败时为什么还能找回旧目录。 执行链路:(来源)

  1. 校验目标名 — 目标不能是 web、headless、sdk、sdk-minimal、acp 的任何大小写形式。预期:用自定义名字,例如 rescue。
  2. 在暂存目录组装 — 在目标旁边创建 .staging-* 目录,写入模板副本。预期:组装期间旧目录仍然可用。
  3. 移动到目标位置 — 先把新目录移到目标,再删除旧目录。预期:目标只保留一份完整副本。
  4. 提交后再启动 — 替换在组合包解析和启动之前完成。预期:后续启动失败不会自动回滚。

示例:

sh
# 把 rescue 这个自定义 profile 按 web 模板重建
dsh rescue --from-default-profile web

# 之后正常启动(不再带替换参数)
dsh rescue

成功后启动器不会额外输出“已替换”之类的提示;不要因为没看到提示就重复执行。

如果重建后马上要装回插件,建议先启动一次确认 profile 可用,再批量安装。这样能把“模板本身有问题”和“插件把配置弄坏”分开,排错时少一层变量。重建后的第一次启动也不要带额外的 --patch,先把模板基线跑通。

确认基线的标志很简单:能进界面、能新建会话、没有插件解析错误。三条都满足,再去装东西。

DeepSeek Harness:失败与回滚

官方给了两层恢复:移动失败先自动恢复,恢复不了再保留 previous 目录。 处理顺序:(来源)

  1. 移动失败 — 启动器尝试恢复原目录。预期:目标仍是旧 profile。
  2. 恢复也失败 — 原目录保留在 $DSH_HOME/profiles/.<name>.staging-*/previous。预期:可以手动移回。
  3. 进程在两次重命名之间停止 — 同样会留下 previous 目录。预期:不要清空 .staging-*,先检查里面有没有完整副本。
  4. 并发替换同一目标 — 至少一个会成功,目标中只保留一份完整副本。预期:不要并行跑多个重建命令。

手动恢复时,先停掉使用该 profile 的进程,再把 previous 目录移回目标名;确认新目录不完整后再删除。

具体操作可以先找目录,再改名:

sh
ls -d "$DSH_HOME"/profiles/.rescue.staging-*/previous
# 确认里面有 package.json 与 cordis.patch.yml 后,再移回目标名
mv "$DSH_HOME/profiles/.rescue.staging-xxxx/previous" "$DSH_HOME/profiles/rescue"

移动前先把不完整的新目录改名留证,不要直接删除;否则一旦 previous 也不完整,就同时失去两份。

DeepSeek Harness:不适合的场景与替代做法

如果你的目标是“保留配置升级”,这个参数是错的工具。 三种替代:(来源)

  1. 只更新组合包列表 — 编辑 profile manifest 的 dsh.profile.bundles,再重启。预期:保留依赖与 patch。
  2. 重装指定插件 — 用 dsh plugin --profile <name> add/update。预期:只动插件,不动整棵配置。
  3. 清空单个 patch 文件 — 只删或重写 cordis.patch.yml。预期:保留已安装依赖。

真正需要重建时,也建议先备份整个 profile 目录。官方虽然提供了 previous 恢复,但它只覆盖替换失败,不覆盖“你重建后才发现忘了备份配置”的情况。

DeepSeek Harness 常见问题

Q:重建后为什么插件列表是空的? 因为新 manifest 依赖为空,只保留模板的组合包。插件要重新安装,装完再重启。

Q:能不能对 web 直接用这个参数? 不能。目标名称不能是任何随附 profile 名;要重建 web,应使用自定义名字加模板,例如 dsh web2 --from-default-profile web。

Q:重建成功但启动失败,会自动回到旧 profile 吗? 不会。替换先提交,启动后失败仍保留新 profile;需要手动用 previous 目录恢复。

一句话收束: --from-default-profile 是“按模板重造”,不是“按模板升级”;用它之前先备份,确认你要的是清空重来,而不是保留配置往前修。

常见问题

DeepSeek Harness 的 --from-default-profile 是升级还是重置?

DeepSeek Harness 里,它是用随附模板替换目标 profile,属于重建而不是原地升级。新 profile 只保留模板当前的组合包列表,原有依赖和用户 patch 都会被删除;启动前会先在暂存目录组装,再移动到目标位置。

哪些 profile 不能用 --from-default-profile 替换?

DeepSeek Harness 里,目标名称不能是 web、headless、sdk、sdk-minimal、acp 这些随附 profile 的任何大小写形式。该参数用于自定义目标,例如 dsh rescue --from-default-profile web,把 rescue 这个自定义 profile 按 web 模板重建。

重建失败后原来的 profile 还能找回来吗,在 DeepSeek Harness 中如何处理?

DeepSeek Harness 里,移动失败时启动器会尝试恢复原目录;如果恢复也失败,或进程在两次重命名之间停止,原目录会保留在 $DSH_HOME/profiles/.<name>.staging-*/previous,供手动恢复。

重建后插件和配置都没了,正常吗,在 DeepSeek Harness 中如何处理?

DeepSeek Harness 里,正常。新 profile 的依赖为空、用户 patch 为空,只写入模板当前的组合包列表。插件需要重新安装,配置需要重新写;内置组合包仍从当前 dsh 安装目录解析。

重建成功但随后启动失败,原 profile 会回来吗,在 DeepSeek Harness 中如何处理?

DeepSeek Harness 里,不会。替换在组合包解析和应用启动之前提交,因此后续失败仍会把新 profile 留在磁盘上。启动失败要按新 profile 排查,不能用它自动回滚。

相关术语

--from-default-profile
--from-default-profile 是 dsh 启动参数,用于在启动前用五个随附模板之一的全新副本替换一个自定义 profile,目标目录中的依赖与用户 patch 会被删除。— DeepSeek Harness 官方参考 - dsh CLI 行为
暂存目录
暂存目录是启动器在目标 profile 旁边创建的组装位置,用于先写入完整新 profile 再移动到目标;失败时原目录可能保留在 .staging-*/previous。— DeepSeek Harness 官方参考 - dsh CLI 行为
dsh.profile.bundles
dsh.profile.bundles 是 Profile manifest 中按顺序列出组合包的字段;用模板重建时,新 manifest 只写入模板当前的组合包列表,不复制旧依赖。— DeepSeek Harness 官方参考 - dsh CLI 行为
dsh rescue
dsh rescue 是官方示例里的自定义 profile 名称,常与 --from-default-profile web 搭配,用来按 web 模板重建一个可启动的救援 profile。— DeepSeek Harness 官方参考 - dsh CLI 行为

来源