DSH Preset Authoring
- A preset is one directory:
agent.cordis.yml(required composition) plus optionalpreset.yml(display metadata:name,description, numericorder;ordersorts the roster). - Name the directory (the preset id)
[a-z0-9][a-z0-9-]*kebab-case — discovery skips any other id outright, and authoring APIs reject it. agent.cordis.ymlis a top-level YAML list of rows{id, name, config?}; everynameis an@deepseek-ai/*package (with optionalconfig) orcordis:groupwhoseconfigis a recursive row list.- Take each row and its config fields verbatim from an official shipped preset or an install you validated — never invent field names; unverified rows fail the package-existence gate or break the boot.
- Install under the harness-home user root
~/.dsh/.agent-presets/<id>/(files are the only composition editor;copy()is the API alternative and never overwrites). - Validate against a real install:
node tools/validate-presets.mjs --harness <dsh node_modules root>from awesome-dsh-presets — YAML (incl.!!jsdialect) parses, rows carryid+name,cordis:grouprecurses, every referenced@deepseek-ai/*package exists. - Expect live discovery:
list()/resolve()re-read roots per call, and each session tracks its composition file's mtime/size stamp — a new session picks up your edit, an already-joined session keeps the generation it started on. - A directory that is broken (missing/unreadable
agent.cordis.yml) is listed with its reason, occupying the id: fix the file or delete the directory; do not shadow it with a duplicate. - Switching presets applies only to a blank session (nothing produced yet); a produced session answers
agent-preset-locked— do not claim a switch happened. - Deliver the preset directory, the validation output against the harness version you used, and one blank-session verification that it boots with the intended tools.