kyorakuyk/dsh-hotreload-plugin-manager ↗★ 1
@kyorakuyk/dsh-plugin-manager
Web UI plugin hot lifecycle for DeepSeek Harness: hot install / uninstall / update / enable-disable of profile plugin bundles without restart. Out-of-tree dual-face bundle: host gateway + browser settings tab over a plugin-owned HTTP transport.
安装
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:kyorakuyk/dsh-hotreload-plugin-manager说明文档
阅读完整 README ↗dsh-hotreload-plugin-manager
中文 | English
一个树外(out-of-tree)DeepSeek Harness 插件:在运行中的实例上直接完成插件的热安装、热卸载、禁用/启用——无需重启, 并提供 Web 设置页标签页:
- 🔥 热安装:按 spec(npm 包名 / git URL /
github:owner/repo/file:路径) 安装插件 bundle,立即热生效于运行中的dsh web,且重启后保留。 - 🔥 热卸载:移除 bundle——行与 fiber 即刻卸载、依赖被清理、陈旧的 bundle 层条目一并移除。
- 🔥 禁用 / 启用:在 UI 上一键切换已安装 bundle 的条目开关,状态持久化且立即生效。
- 热更新:热替换 bundle 的补丁行并实时重放配置(模块代码变更按 Node 进程内 缓存特性仍需重启)。
- 零内核改动:纯树外 bundle,dsh checkout 完全不被触碰。
- 双面包:一个 npm 包同时是 host 网关与浏览器设置标签页。
架构
┌────────────────────────────── 浏览器(React)──────────────────────────────┐
│ 设置 → 插件 → "插件管理"标签页(槽位 settings.plugins.tab) │
│ │ fetch('/plugin-manager/*') │
└────────┼──────────────────────────────────────────────────────────────────┘
▼
┌──────────────────────────── dsh web 进程 ──────────────────────────────────┐
│ webserver 路由(node:http)──▶ manager 核心 │
│ ① pnpm add/remove(profile 内的真实依赖) │
│ ② 行写入 profile 用户补丁层(cordis.patch.yml) │
│ ③ 根 Include entry.update → Loader 挂载/卸载 fiber │
│ 网关:TypertRemoteService(源码模式反射,无代码生成) │
└────────────────────────────────────────────────────────────────────────────┘
包是双面的:
- Node 半(
lib/index.js,tsc 编译)——PluginManagerGateway,一个注册为pluginManager的TypertRemoteService。api-gateway 可通过源码模式反射 分发它的@Remote方法(无需生成产物);同时它在 webServer 服务上注册浏览器 HTTP 传输。 - 浏览器半(
lib/client.js,esbuild 打包)——注册进settings.plugins.tab槽位(idmanager)的 Web 设置标签页,由dsh-client-modules发现,并以普通 模块表 bundle(window.__ModuleLoader__.load)形式服务。