dsh-engine-switch
by Yuki-takuya-kun
给 DSH 会话换「引擎」——按预设决定由谁来驱动 DSH 默认只用 DeepSeek。装上本插件 + 一个引擎插件, 就能在同一个客户端里按预设切换驱动(DeepSeek ↔ Claude Code ↔ 自定义),不用全局替换、不用改 DSH。
Route DeepSeek Harness top-level sessions to pluggable loop engines by agent-preset — Claude Code ships as a built-in engine.
安装
dsh plugin --profile web add github:Yuki-takuya-kun/dsh-engine-switchGitHub 源码安装:首次需按提示配置 allowBuilds 构建授权后重试
安装与环境配置指引、插件开发教程见 DSH 中文社区文档 ↗
安装即在你的机器上以你的权限运行第三方代码——它可读写文件、使用凭据、访问网络,DSH 的工具审批不会为插件代码加沙箱。「检测到 manifest」仅代表发现 dsh.bundle / dsh.plugin 清单,不构成兼容性或安全审查;安装前请审阅源码,不熟悉的插件先在不含密钥的环境试用。
README
✨ 能干什么
- 🔀 按预设选引擎:每个会话用哪个引擎,由它当前的预设决定。优先级从高到低:预设自己声明 → 配置里点名 → 预设名等于引擎名 → 默认 DeepSeek。
- 🔁 发消息前可切换:在会话里发第一条消息之前切换预设,会当场换成对应的引擎(两个方向都行),不用重开会话、不用重启。
- 📦 预设自动装好:引擎装好后,它自带的预设会被自动复制进 DSH 的预设目录,立刻出现在预设列表里。
- 🤝 引擎和会话互不打扰:引擎不知道「预设」这回事,会话也不知道「被换过引擎」——两边各自干自己的事。
- 🌐 子代理始终用 DeepSeek:不管顶层会话选了谁,子代理都照旧走 DeepSeek。
- ⏯️ 续聊自动还原:接着上次的会话聊,会按日志里记下的预设自动找回对应的引擎。
🔌 一句话:本插件本身不带任何引擎、也不带任何预设。它只规定「引擎怎么接入」,然后负责三件事——按预设选引擎、发消息前切换、把预设装好。真正的引擎由别的插件通过
ctx.engineSwitch.register(engine)注册进来。deepseek是个特殊名字,意思是「退回 DeepSeek 原来的循环」。
🚀 安装
dsh plugin --profile web add github:Yuki-takuya-kun/dsh-engine-switch
# 再装至少一个引擎插件,例如:
dsh plugin --profile web add github:Yuki-takuya-kun/dsh-claude-code
⚙️ 启用
编辑 ~/.dsh/profiles/web/cordis.patch.yml:
- id: dsh-engine-switch
config:
enabled: true
重启 web 应用。引擎插件带来的预设会出现在预设列表里;选中它 → 用该引擎,选其它 → 用 DeepSeek。
🎯 预设怎么指定引擎
大多数时候什么都不用做:引擎自带的预设,它的目录名就是引擎名,会自动对上(比如 dsh-claude-code 的预设目录叫 claude-code,引擎也叫 claude-code)。
想手动指定,有两种方式(优先级从高到低):
在预设里写:编辑该预设的
agent.cordis.yml,加一条dsh-engine-switch并写engine:# ~/.dsh/.agent-presets/<预设名>/agent.cordis.yml - name: dsh-engine-switch config: engine: claude-code # 这个预设用 claude-code 引擎在配置里点名:在
engineByPreset里写「预设名 → 引擎名」,不用改预设文件:config: engineByPreset: research: claude-code
都没写时,退回 defaultEngine(默认 deepseek,即 DeepSeek)。
🔌 引擎怎么注册
写一个插件,inject: ["engineSwitch"],然后在 apply 里调用 ctx.engineSwitch.register(...) 注册一个引擎:
export const inject = ["engineSwitch"];
export function apply(ctx) {
ctx.engineSwitch.register({
id: "claude-code", // 引擎名 = 它自带预设的目录名
name: "Claude Code",
description: "…",
presetDir: fileURLToPath(new URL("./presets/claude-code/", import.meta.url)),
makeAgent(loopCtx, id, options, session, engineConfig) {
return new ClaudeCodeAgent(loopCtx, id, options, session, engineConfig);
},
});
}
presetDir 里放 agent.cordis.yml + preset.yml,框架会自动把它装到 ~/.dsh/.agent-presets/<id>/。引擎要实现的完整接口见 引擎 API。
参考引擎:dsh-claude-code —— 一个真实注册了
claude-code引擎的插件,用本机 Claude Code CLI 驱动会话。
⚙️ 配置
| 键 | 默认 | 含义 |
|---|---|---|
| enabled | false | 总开关:false = 插件不生效,所有会话照旧走 DeepSeek |
| defaultEngine | "deepseek" | 没指定引擎的预设(以及没有预设的会话)用谁;deepseek = 退回 DeepSeek |
| engineByPreset | {} | 「预设名 → 引擎名」的点名表 |
| engines | {} | 「引擎名 → 引擎自己的配置」(原样转给引擎,插件不解析) |
🔍 原理(可选阅读)
- 启动时,插件换掉 DSH 原来的「会话驱动工厂」,改成按预设决定引擎的路由器。
- 创建会话、续聊、切换预设时,都会按上面的优先级算出该用哪个引擎,再造出对应的驱动。
deepseek不是真引擎,而是「退回 DSH 原来的 DeepSeek 循环」。
📄 许可证
MIT。见 THIRD_PARTY_NOTICES.md。
原始 README: https://github.com/Yuki-takuya-kun/dsh-engine-switch/blob/main/README.md ↗
同类插件
查看全部 →
archify
Agent 技能:生成美观、可校验的架构图、工作流图、时序图、数据流图与生命周期图——自包含 HTML、带动画与清晰导出

dsh-turn-rewind
对话回退:基于持久 Change Ledger 回滚会话与工作区状态。

dsh-plugin-cc
把 DeepSeek Harness 接入 Claude Code:评审、批评、委派与会话导入

dsh-interconnect
跨实例互联:经 interconnect 服务在多个 DSH 实例间转发消息与事件。

dsh-chat-import
把 13 家 coding agent(Claude Code、Codex、ChatGPT、Cursor、Gemini、opencode 等)的完整对话历史导入为可续聊的 DeepSeek Harness 会话,并支持反向导出回 Claude Code。

dsh-crew
DSH 插件:从 Claude Code / Codex 向 DSH agent 派活——原生 subagent 进度、宿主内 worker 会话(分级预设),以及为纯文本宿主补上视觉与图像生成的多模态桥