预设编辑器(Preset Studio)
在 设置 → Agent 预设 → 自定义 里,点「🛠 预设编辑器」用表单维护自己的 Agent 预设。它是 @local/dsh-preset-studio 这个 bundle:Host 半边把预设注册进 agentPresets,Client 半边把编辑器挂进内置的 Agent 预设页。
预览图

安装
# 克隆项目到本地
git clone https://github.com/Yume-Hatsuyuki/dsh-preset-studio
# 添加到桌面客户端
dsh plugin --profile desktop add .\dsh-preset-studio\
# 添加到 WEBUI(可选)
dsh plugin --profile web add .\dsh-preset-studio\
用起来
- 打开 设置 → Agent 预设,在「自定义」分组里找到「🛠 预设编辑器」,它在「+ 让 Agent 帮我创建预设模式」上方,是两个创建/编辑入口中的第一项。
- 点开后是两栏编辑器:左侧「我的预设」列表,右侧空状态有醒目的「+ 新建预设」按钮;也可以点左侧的「新建」或「新建第一个预设」。
- 填写预设 ID、名称、描述、排序,然后在「插件组合」里点「+ 添加插件」;每个插件行是一张独立卡片,包含行 ID、包名、分组、停用、
isolate、config。包名输入框会展开一个可滚动的候选浮层,不会被对话框边缘裁掉。 - 在「模式说明与使用」卡片里可以填写 Markdown;保存后,自定义预设卡片会像内置预设一样出现「模式说明 / 如何使用」按钮。
- 保存后,Host 立即重新注册,内置的预设卡片也会刷新;新建会话可以在 Agent 预设列表里选到它,已开的会话不受影响。
- 关闭对话框即可回到 Agent 预设页。原来的「设置 → 预设编辑器」独立菜单已经移除。
编辑器按当前主题使用 DSH 的设计 token:有边框的卡片、悬停态、选中项左侧强调线、输入聚焦环,以及带边框的主/次/危险操作按钮。没有预设时会显示居中的引导卡和主按钮,不再只靠一行小字提示。
字段对照(与预设声明一一对应)
| 界面 | 声明字段 | 说明 |
|---|---|---|
| 预设 ID | id |
小写字母、数字、连字符;会话与日志保存的就是它 |
| 显示名称 | name |
可选 |
| 描述 | description |
可选 |
| 排序 | order |
可选,预设列表位置 |
| 插件组合 | plugins |
子插件条目数组,顺序即加载顺序 |
| 行 ID / 包名 | id / name |
name 必填;分组行填 cordis:group |
| 分组 | group: true |
该行 config 是子条目数组 |
| 停用 | disabled: true |
保留在模板里但不加载 |
| isolate | isolate |
服务隔离,例如 {"compaction": true} |
| config | config |
该插件的配置对象 |
| 模式说明 / 如何使用 | guide.explanation / guide.usage |
可选,Markdown;填写后自定义预设卡片会出现同款帮助按钮 |
数据放在哪
~/.dsh/agent-preset-studio.json($DSH_HOME 存在时用 $DSH_HOME/agent-preset-studio.json)。这个文件的唯一写入者是本插件的 Host 半边,写入后再注册,不做原地 YAML 编辑。
接口
GET /preset-studio/state→{ ok, value: { presets, shipped, failed } }POST /preset-studio/save(content-type: application/json)→ 同上
两条路由只接受同源请求(sec-fetch-site),写接口强制 JSON 内容类型。
集成方式
Client 半边不注册自己的 settings.section 菜单项。它在内置 Agent 预设页的 settings.section 条目注册后,给同一个条目包一层组件:原样渲染内置的 Agent 预设页,再把「🛠 预设编辑器」按钮投射进它的「自定义」分组、放在「+ 让 Agent 帮我创建预设模式」上方。按钮复用内置 Creator 按钮的类名,所以行高和边框样式与它完全一致;点开后用内置的 Modal 承载预设编辑器。对于填写了 guide 的自定义预设,包装层还会把「模式说明 / 如何使用」按钮注入对应卡片的底部,点开后用内置的 Modal、SegmentedTabs 和 Markdown 渲染器展示内容。宿主只负责预设注册和两条 HTTP 路由,不感知界面。
已知限制
- 不支持
!!js表达式:文档以 JSON 保存,disabled只能是布尔值。需要按平台开关的写法,请改用 profile patch 里的 YAML 声明。 - 保存成功 ≠ 插件可加载:注册表按需挂载,包名写错要到用这个预设开会话时才报错;设置页的「Agent 预设」会显示诊断。
- 不能覆盖内置预设(
standard/ptc/minimal/cordis)的 ID,请换新 ID;内置预设仍由官方 bundle 定义。 - 修改预设只影响之后新建的 Agent。
- 界面集成依赖内置 Agent 预设页的
settings.section条目 idagent-presets、「自定义」分组标题和自定义卡片的底部结构;官方若改动这些,编辑器入口或帮助按钮会安静地不出现,但不会影响内置预设页本身。
No comments yet. Be the first to write one.