dsh-session-composer:用无限画布组装可开关的 DSH 插件组合

前言

在 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),在画布上拖入插件、保存组合,并按需开启或关闭组合。

典型用法(可复现流程)

  1. 用 dsh plugin add 安装本插件及需要的第三方插件;需要长期全局生效的插件留在本体库,不要拖进画布。
  2. 打开 composer 画布,从本体库把暂时不想全局响应的插件拖入画布(拖入后该插件脱离全局、处于休眠)。
  3. 在画布上把多个插件编排成一组,保存组合;保存前宿主会校验 entry id,避免重复 id 导致启动崩溃。
  4. 需要某套工作流时开启组合,组合内插件重新进入全局响应;用完后关闭组合,组合内插件退出全局。

宿主提供的 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
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜