前言¶
在 DeepSeek Harness(DSH)里,一次会话实际跑什么,不只取决于你装了哪些插件,还取决于 profile 上的依赖集合、有序 bundle 组合、pnpm-lock.yaml 解析结果,以及用户侧的 cordis.patch.yml 补丁层。安装前扫描可以回答「这个包能不能装」,但很难直接回答:今天启动的 agent 组合,是否和当时审过、测过的那一套字节级一致?
社区插件 dsh-freeze(维护者 zhengqiuyang,分类 admin-security)针对的就是这个问题:对启动后的 profile 做确定性指纹,建立基线,并在每次启动时对比;组合发生漂移时会明确告警,或在严格模式下直接拒绝启动。
这是什么¶
dsh-freeze 是 DSH 上的 Hermetic composition lock(封闭组合锁)。README 中的定位是:对「已启动 profile」做指纹——已安装依赖(按名称排序)、有序 bundle 组合、pnpm lockfile 哈希、用户 patch 层——写入基线,并在每次 boot 时比较。信任路径上不调用 LLM。
与同属「可审计 agent 运行面」思路的插件相比,README 将其与 mcp-test(agent 能调用什么)、prompt-drift(agent 被告知什么)并列,freeze 关注的是「究竟在跑什么」。
核心功能¶
下面介绍插件会监控哪些变化,以及行为模式。
指纹覆盖范围¶
README 用表格说明了会触发告警的字段:
| 字段 | 含义 |
|---|---|
dependencies |
依赖被增删或指向变更 |
bundles |
有序组合发生变化 |
pnpm-lock |
解析版本移动(例如升级) |
cordis.patch.yml |
用户层 patch 变更 |
启动时对比¶
- 首次或基线缺失时,将当前组合指纹写入基线文件(默认路径见配置)。
- 之后每次 boot 读取当前 profile 状态,与基线对比。
- 若存在漂移:默认模式下会话会明确提示组合已与基线不一致;
strict: true时整次 boot 失败,适合 CI 等「frozen」 posture。
README 说明:dsh --dump-config 在多次运行间字节稳定,且 package.json / pnpm-lock.yaml / cordis.patch.yml 足以作为组合真相,因此确定性指纹在设计上成立。
与供应链扫描的分工¶
资料中(checked 2026-10-12)提到:安装侧已有多种扫描与只读插件账本(如 dsh-harbor),回答的是「包是否适合安装」。dsh-freeze 补的是运行态:当前运行的 composition 是否等于曾被审计的那一套。
安装与启用¶
仓库自带预构建的 lib/,通过 dsh plugin add 从 GitHub 安装时无需构建步骤,也无需 allowBuilds 授权。
在目标 profile 上执行官方安装命令:
dsh plugin --profile default add github:zhengqiuyang/dsh-freeze
兼容性(来自 README):
- DSH:在 0.2.x 线验证(源码快照 0.2.1-alpha.2);任意 profile 可通过
dsh plugin add安装。 - Node:
>= 20(CI 矩阵含 Node 20/22/24,Ubuntu 与 Windows)。
在 profile 配置中启用并调整行为,示例:
- id: dsh-freeze
name: dsh-freeze
config:
baselinePath: .dsh-freeze/baseline.json
strict: false # true: drift fails the boot (CI posture)
profile: "" # '' auto-detects from argv (--profile, else 'web')
说明:基线默认写在会话的工作目录下;若在 CI 中使用,应将 baselinePath 指向持久化位置并纳入版本管理。
典型用法¶
本地开发:先告警、不拦启动¶
- 安装插件后正常启动 DSH,让插件生成或更新基线(路径由
baselinePath决定)。 - 在审阅并认可当前组合后,将
.dsh-freeze/baseline.json(或你配置的路径)提交到仓库,作为「已审组合」的参照。 - 保持
strict: false。之后若有人改依赖、改 bundle、升级 lockfile 或改 patch,启动时会看到 dsh-freeze 的漂移提示,便于人工处理。
CI:严格模式拒绝漂移启动¶
- 在 CI 使用的 profile 上同样安装插件。
- 将已审基线文件放在仓库内,配置
baselinePath指向该文件。 - 设置
strict: true,使组合与基线不一致时 boot 直接失败,等价于 README 所说的--frozenposture。
资料中的 disposable-profile 验证(2026-10-19):在新 profile 上 add 约 30 秒内完成;boot 日志会出现 [dsh-freeze] active: …;remove dsh-freeze 后依赖与 bundle 可恢复。
适用场景与注意¶
适合谁
- 需要在团队或 CI 中固定「审过的 agent 组合」,避免 silent drift 的 DSH 用户。
- 已在用安装期扫描 / harbor 账本,仍希望在每次启动再核对运行态 composition 的场景。
使用前请注意
- 插件随当前 DSH 进程权限运行;安装前应自行查看 GitHub 仓库 源码与 MIT 许可证(package.json 版本 0.1.0)。
- 基线反映的是「你写入基线那一刻」的组合;依赖、lockfile 或 patch 的合法升级都需要更新基线并重新审阅。
- README 中的 kill criteria:若 DSH 官方提供一等价的 profile pinning(如
--frozenboot),该插件可能停在其最后可用版本并在此留 postmortem——选型时可留意上游动向。
DSH 社区插件目录为独立站点 SkillHub,与 DeepSeek / 幻方无官方从属关系;安装与配置以仓库 README 为准。
结尾¶
dsh-freeze 用 profile 级指纹把「今天 boot 的组合」和「基线里的组合」绑在一起:漂移可见,必要时可 fail-closed。若你的痛点是「装的时候查过了,跑的时候却变了」,可以在默认 profile 或 CI profile 上按 README 安装并配置 strict。
- 目录页:https://www.skillhub.cn/plugins/zhengqiuyang/dsh-freeze
- GitHub:https://github.com/zhengqiuyang/dsh-freeze