前言¶
DeepSeek Harness(DSH)的 agent preset 会随产品更新增减条目。若把覆盖写死在 YAML 里,一次升级就可能和上游快照脱节:新 preset 不会出现,旧覆盖仍留着,排查成本高。DSH 的分层补丁模型里,profile 之上还可以叠 cordis.patch.yml 这类补丁层;问题在于补丁若全靠手写维护,容易过时。
dsh-preset-rules 把工作流收窄为:维护一份短小的规则文件,在每次启动时按当前安装自带的 preset 声明重新生成补丁,输出仍是普通 YAML,可读、可 diff、可删。下面介绍它的定位、规则语法与使用步骤。
这是什么¶
dsh-preset-rules 是 DSH 的一个 bundle 插件(单 host 插件)。启动时读取当前安装附带的 preset 声明,应用你在 $DSH_HOME/preset-rules.rules 里写的规则,把结果写到 $DSH_HOME/cordis.patch.yml。该文件是常规 dsh 补丁层:DSH 在 profile 层之后应用它,文件监视器会在内容变化时重组树。
维护者为 wannaknowhys,仓库 wannaknowhys/dsh-preset-rules,社区目录页 SkillHub 条目。分类属于工作流:用声明式规则驱动 preset 层面的批量调整,而不是在 UI 里逐项点选。许可证 MIT(见仓库 README)。
为何要生成而非手写补丁¶
手写 override 会「冻结」在某个时间点的结构。DSH 发版新增 preset 行时,冻结副本不会自动跟上,用户往往要等到行为异常才发现。每次启动按规则重新生成,可以在不增加日常手工步骤的前提下让快照与当前安装对齐;生成物仍是明文 YAML,便于审查。相同输入产生相同字节,无事可做时不会无意义地重写文件。
环境与依赖¶
- DSH 0.2.x
- Node.js >= 20(bundle 内运行时版本可能更高)
插件在 DSH 进程权限下运行;安装前宜自行查看仓库源码与 LICENSE。
安装¶
官方 README 给出的安装方式如下。
通过 DSH 插件命令(desktop profile):
dsh plugin --profile desktop add dsh-preset-rules
从 GitHub 检出路径安装(非 npm 场景):
dsh plugin --profile desktop add github:wannaknowhys/dsh-preset-rules
也可在 Harness UI 的插件管理器中安装(Creator 模式会写入相同的 bundle patch)。
规则文件与首次初始化¶
插件不会自动创建规则:没有规则文件时,每次启动只打一行日志,不改动任何文件,避免首次安装「静默无感」。
初始化示例规则文件(带注释):
node bin/preset-rules.js --init
默认规则路径为 $DSH_HOME/preset-rules.rules。最小示例如下:
# $DSH_HOME/preset-rules.rules
presets = all; entry = id: time-context; action = hide()
建议先用 check 模式确认影响,再切回默认 apply。可在插件配置里设 mode: check,或直接用 CLI:
node bin/preset-rules.js --check
check 只打印将要发生的变更,不写盘;确认无误后使用默认的 apply。
规则语法¶
一行一条规则,三个子句用分号分隔,顺序不限:
presets = all; entry = id: time-context; action = hide()
| 子句 | 取值说明 |
|---|---|
presets |
all、单个 id、{a, b}、not(x),以及子句之间的 + / - |
entry |
*、id: value、name: value、{a, b}、not(...)、+ / - |
action |
当前可用 hide();disable()、enable()、set(path, value) 为 0.2 预留 |
二元 +、- 两侧需有空格;标识符可含 -、.、@、/。# 起行内注释。
README 中的示例:
presets = not(minimal); entry = id: time-context; action = hide()
presets = {standard, cordis}; entry = not(id: persona); action = hide()
诊断信息含 file:line:column。未知 preset 或规则未匹配任何项为警告;语法错误、未知 action 或误用预留 action 会中止运行,且不覆盖先前的输出文件。
运行模式¶
| mode | 行为 |
|---|---|
apply(默认) |
校验通过且字节有变化时才写入 |
check |
计算并打印结果,不写文件 |
off |
不做任何事 |
CLI 参数¶
node bin/preset-rules.js [--check|--apply] [--rules <file>] [--target <file>] [--source <dir>] [--json]
node bin/preset-rules.js --init [--rules <file>]
默认:--rules 指向 $DSH_HOME/preset-rules.rules,--target 指向 $DSH_HOME/cordis.patch.yml。--source 指定 @deepseek-ai/dsh-web-app 包目录;桌面安装与 npm 安装均可自动探测。读取打包在 app.asar 内的文件需要 Electron-as-node,桌面应用已具备该环境。
生成文件与安全边界¶
生成文件头部带标记,例如(结构摘自 README,版本与 hash 随环境变化):
# generated by dsh-preset-rules 0.1.0 — do not edit
# source: @deepseek-ai/dsh-web-app 0.2.2-rc.1
# source-hash: sha256:…
# rules-hash: sha256:…
- id: preset-cordis
name: '@deepseek-ai/dsh-agent-preset'
config:
id: cordis
order: 4
plugins: [ … ]
该文件由本插件「认领」:若目标文件不是以上述生成标记开头,插件拒绝覆盖——手写补丁应放在 profile 层而非与此生成物混用。
生成的补丁层在本机全局共享:同一机器上的各 profile 共用 $DSH_HOME/cordis.patch.yml。
卸载¶
移除插件后,删除 $DSH_HOME/cordis.patch.yml;或清空规则文件并启动一次。按需清理 $DSH_HOME/preset-rules.rules。
适用场景与注意¶
适合希望在 DSH 升级后仍用少量规则(例如按 preset 隐藏 time-context 等 entry)稳定复现 preset 树形态的用户。不适合把复杂、一次性的手工 YAML 补丁塞进本插件的目标文件——那些应走 profile 层。
社区目录 SkillHub 与 GitHub 仓库独立于 DeepSeek / 幻方,并非官方应用商店;安装与规则生效仍以本机 DSH 进程为准,使用前请核对仓库版本(当前 npm 包版本 0.1.0)与许可证。
结尾¶
dsh-preset-rules 把 agent preset 的个性化收成可编辑规则,在每次启动时生成 cordis.patch.yml,减轻 dsh 更新后补丁过时的风险。进一步细节见 GitHub README(含 简体中文)与 SkillHub 目录页。