前言¶
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 目錄頁。