前言¶
在 DeepSeek Harness(DSH)里,第三方插件装好后默认参与全局响应。插件一多,常驻能力(例如计量、样式类插件)和「只在某段对话里才需要」的能力会混在一起,既难按需启停,也不方便把若干插件当成一套工作流来管理。
kkaporn/dsh-session-composer(npm 包名 dsh-plugin-canvas)提供一块无限画布:把已安装的第三方插件拖进画布后脱离全局、在画布上组成「组合」,开启组合时再让组合内插件重新加入全局响应。维护者为 kkaporn,社区目录分类为工作流;仓库采用 MIT 许可,当前 package 版本为 1.0.0。
这是什么¶
一句话定位:无限画布插件仓库——在画布上编排第三方插件,用启停组合控制哪些插件参与全局响应。
它不修改各插件的代码、配置、依赖或数据;启停完全委托宿主 pluginManager.setBundleEnabled / setPluginEnabled,持久状态只写入 ~/.dsh/plugin-canvas/state.json,不写 YAML 或 package.json。
核心模型¶
下面表格描述插件状态与全局响应的关系(资料原文):
| 动作 | 结果 |
|---|---|
| 装完(不动) | 插件在本体库,全局响应 |
| 拖入画布 | 插件脱离全局,进入画布(休眠) |
| 开启组合 | 组合内插件进入全局响应 |
| 关闭组合 | 组合内插件退出全局 |
常驻插件(README 举例:ponytail、cost-meter)若不拖进画布,则一直保持全局响应。
安全与设计约束¶
- 本体硬隔离:
@deepseek-ai/*永不显示、永不操作。 - 只动开关:启停 100% 走宿主 pluginManager,不改插件本体。
- 不写配置文件:除
state.json外不写入其他项目配置。 - 重复 entry id 阻断:保存组合前检查;若 entry id 冲突可能导致启动崩溃,会直接拒绝保存。
架构概览¶
- 宿主半(
lib/index.js):5 个 HTTP 路由——/state、/drag、/activate、/save、/delete;启停委托pluginManager,状态写入~/.dsh/plugin-canvas/state.json。 - 客户端(
lib/client.js):在conversation.composer.dock注册入口;手写无限画布(节点拖拽、平移缩放、连线、拖入插件),无 React Flow 依赖。 - 运行时:零额外 npm 运行时依赖(纯
node:内置模块);要求 Node>=18;peer 依赖@deepseek-ai/dsh(>=0.2.0-rc.2 <0.3.0-0)及可选@deepseek-ai/cordis(~4.0.4)。
安装与启用¶
从 GitHub 安装(命令来自仓库 README):
dsh plugin add github:kkaporn/dsh-session-composer
若已在本地检出源码目录,也可指向该路径:
dsh plugin add /path/to/dsh-plugin-canvas
安装后,通过对话侧 composer 入口打开画布界面(客户端注册点 conversation.composer.dock),在画布上拖入插件、保存组合,并按需开启或关闭组合。
典型用法(可复现流程)¶
- 用
dsh plugin add安装本插件及需要的第三方插件;需要长期全局生效的插件留在本体库,不要拖进画布。 - 打开 composer 画布,从本体库把暂时不想全局响应的插件拖入画布(拖入后该插件脱离全局、处于休眠)。
- 在画布上把多个插件编排成一组,保存组合;保存前宿主会校验 entry id,避免重复 id 导致启动崩溃。
- 需要某套工作流时开启组合,组合内插件重新进入全局响应;用完后关闭组合,组合内插件退出全局。
宿主提供的 HTTP 接口(/state、/drag、/activate、/save、/delete)由客户端与画布交互调用,一般用户只需通过 UI 完成上述步骤。
适用场景与注意¶
适合谁:已在 DSH 里安装多个第三方插件、希望按会话或任务切换「哪几个插件同时生效」的开发者;需要把若干插件当成可开关组合来试工作流时,本插件的分类(工作流)与画布模型较对口。
务必注意:
- 插件与所编排的第三方插件均在当前 dsh 进程权限下运行;安装前应阅读源码与许可证(本仓库 MIT),并了解各被编排插件的行为。
- 社区目录 skillhub.cn 上的条目 与 GitHub 仓库 为独立社区信息来源,与 DeepSeek / 幻方无官方从属关系;DSH 生态理念是「一切皆插件」,目录站是社区聚合,不是官方应用商店。
- 开发自检(可选):在仓库根目录执行
node test-index.mjs(宿主半纯函数)、node test-client.mjs(客户端结构),无需额外测试框架。
结尾¶
dsh-session-composer 用画布把「全局响应」变成可编排、可开关的组合,适合在插件较多时做工作流隔离。进一步了解可查看社区目录页与 GitHub README:
- 目录页:https://www.skillhub.cn/plugins/kkaporn/dsh-session-composer
- GitHub:https://github.com/kkaporn/dsh-session-composer