dsh-preset-mixed
一个面向 dsh web 的 agent preset 插件:激活时向宿主的 agent-preset registry 声明一个打包在
本包内的预设,预设 id 为 mixed,显示名为 混合模式,在预设选择器里的排序为 order: 5。
它是一套精简装配的预设:极简 persona 搭配标准工作纪律(思考熔断、行动导向、并发探索、YAGNI/PDCA、
有界收敛),工具面与上下文注入由预设自身的行(presets/mixed/agent.cordis.yml)掌控,而不是由
宿主配置界面掌控。
不含浏览器半边
本包只有宿主半边。具体来说:
- 没有
lib/client.js,package.json里没有dsh.client字段,也没有 client 注入清单; - 没有 GUI 开关(没有新会话页上的滑块/开关),没有设置卡片,没有设置命名空间;
- 插件的宿主入口没有 Config:不声明 schemastery schema、不读任何配置、不注册系统提示词段、 不注册任何工具。声明即启用——卸载插件(或停用该行)即注销预设。
因此「启用/停用」只能通过插件的安装与停用(profile 的插件行)来做,不能在界面里切开关;预设自身
那点可调项都在 presets/mixed/agent.cordis.yml 的行配置里(例如 tool-catalog 的
presentation、minimal-prompt 的 dispatcher、guard 的 sensitivity),要改就改文件。
目录结构
dsh-preset-mixed/
├── lib/
│ ├── index.js # 宿主入口:解析目录 → 读 YAML → register → ctx.effect 释放
│ └── composition.js # 自带的最小 YAML 读取器(无第三方依赖,纯 ESM JS)
├── presets/mixed/
│ ├── agent.cordis.yml # 预设的组成(persona、工具面、guard、分页、上下文注入)
│ ├── preset.yml # 显示名 / 描述 / 排序
│ ├── NOTICE # 上游署名与改编说明
│ └── *.mjs # 预设自带的 8 个插件实现
├── cordis.patch.yml # bundle patch:向 profile 名册插入本插件行
├── LICENSE # Apache-2.0
├── README.md # 用户向说明
└── AGENTS.md # 开发指导:给接手本仓库的 Agent
宿主入口只做四件事,一件不多:
- 用
import.meta.url解析出本包的presets/mixed/目录(不依赖process.cwd()); - 把
agent.cordis.yml与preset.yml解析成一个PresetDefinition({ id, name, description, order, plugins },相对模块名解析为file://URL); - 调
ctx.agentPresets.register(definition),保存它返回的 disposer; - 在
ctx.effect(...)里释放该 disposer,插件卸载时预设随之注销。
registry 尚未就绪(它由自己的依赖链发布,可能晚于本行的激活)时,插件不会抛异常炸掉宿主:它只
logger.warn 一行,并通过 ctx.inject(['agentPresets'], cb) 的回调形式在服务出现后补一次声明
(回调形式不是硬依赖,不会把本行挂起,因此一个根本没有 registry 的部署照常启动)。
安装
零依赖零构建:package.json 没有 dependencies,也没有 scripts.build,克隆下来即可用。
桌面端(desktop profile)注意
desktop profile 由 Electron 应用独占管理,CLI 不能直接往里装:
dsh plugin --profile desktop add ...
# error: profile "desktop" is managed exclusively by the Electron application
两条可行路径:
- 市场安装(推荐):在 dsh 的市场/插件来源里使用仓库 URL 安装本包
(
https://github.com/Shiro-Design-16/dsh-preset-mixed,本仓库地址),由应用自己把它写进 desktop profile。 - 手工写入 profile:在目标 profile 的
package.json里把本包加进dependencies(例如"dsh-preset-mixed": "link:/绝对路径/dsh-preset-mixed"或一个file:说明符), 并确保该 profile 的 bundle patch 层包含本包的cordis.patch.yml(即名册里出现- id: dsh-preset-mixed/name: 'dsh-preset-mixed'),然后重启宿主。
对 CLI 可以管理的 profile,直接:
dsh plugin --profile <profile> add link:/绝对路径/dsh-preset-mixed
切换到 mixed 预设
预设是按会话选择的,不写任何全局默认:
- 重启(或重载)宿主,确认插件行已激活——宿主日志里会出现
dsh-preset-mixed: preset mixed declared; - 新建一个会话,在预设选择器里选「混合模式」(
order: 5,排在内置项之后); - 若要改回,任何已有会话只是当初选了哪个预设就用哪个;新会话重新选即可。
若选择器里看不到「混合模式」,先看日志里是否有
the agent-preset registry is unavailable; the preset is not declared,再确认插件行确实被装载。
License 与来源
- 本仓库整体以 Apache-2.0 授权,
LICENSE为 Apache License 2.0 全文。 - 本包 fork 自
@linxin666/dsh-liangshen0.4.6 的presets/liangshen/,并已修改:- 按 Apache-2.0 §4(c) 声明:被 fork 的文件均已改动或重命名,改动范围为——预设目录名改为
presets/mixed/;preset.yml的显示名、描述与order全部重写;agent.cordis.yml开头注释块中的预设自指名称同步为新名;两个 YAML 文件内已各自按 §4(c) 携带改动声明 (preset.yml顶部的注释、agent.cordis.yml开头注释块的首段),声明不再只写在 README 里; 其余 8 个.mjs实现与NOTICE逐字节未改动。 presets/mixed/NOTICE保留了上游对 DeepSeek Harness 内置 preset(MIT)与 xiaobright/dsh-anchored-standard(MIT)的署名,请一并保留。
- 按 Apache-2.0 §4(c) 声明:被 fork 的文件均已改动或重命名,改动范围为——预设目录名改为
- 本仓库不含上游的浏览器半边(
lib/client.js)、TypeScript 源码(src/)、构建期元数据 (README.i18n.yaml)与tools/。
No comments yet. Be the first to write one.