READMESource: main@e10452e6
dsh-workshop(轻量插件开关)
DeepSeek Harness 的插件管理面板:给每个已装载的插件条目贴身份标签(官方内置 / 第三方 npm / 第三方 GitHub / 本地开发),提供"发声式"开关(写用户 patch 层,不卸载),并显示手工维护的风险标签。
功能(V1)
- 身份判定:
ctx.loader.entries()枚举条目 →pnpm-lock.yaml查来源。lockfile 里查不到 = 官方内置(随 dsh 发行);npm 语义版本 = npm;codeload.github.com = GitHub tarball(锁定 commit);file:= 本地目录。GitHub 来源但冒用@deepseek-ai/scope 的(如 dsh-plugin-hub)会打上"冒用官方scope"警告标。 - 开关:POST
/api/workshop/v1/toggle→ 往$DSH_HOME/profiles/<profile>/cordis.patch.yml追加/移除- id: X / disabled: true块。HMR 约 1-3 秒自动重组,无需重启。基础设施行(loader/webserver/ui/storage 等 44 个模式)与开关自身锁定不可关。 - 风险标签:手工清单
risk-list.json(改了即时生效,无需重启);未收录的第三方显示"未评级",官方内置显示"官方维护"。 - 安全:路由仅限环回 + same-origin + Origin 校验;写入经串行队列 + 临时文件原子替换。
安装
dsh plugin --profile web add github:Zlyraz/dsh-workshop
重启 dsh web → 设置 → 插件 → "轻量插件开关" tab。
结构
package.json # dsh.bundle + dsh.client 双清单
cordis.patch.yml # 把自己 insert 进 profile
risk-list.json # 手工风险清单
lib/index.js # host:/api/workshop 路由
lib/client.js # client:settings.plugins.tab 插槽面板
设计取舍(相对 dsh-plugin-hub / dsh-builtin-toggles)
- 注册 API 与两者一致(官方
settings.plugins.tab插槽 +window.__ModuleLoader__bundle 契约)。 - YAML 写入取 hub 的简单追加/正则移除(V1 够用)+ 临时文件原子替换;未采用 builtin-toggles 的 570 行保守写器(V2 再议)。
- 身份判定是其独有能力:不轻信 scope 前缀,以 lockfile 来源为准。
二次开发必读
本插件的完整踩坑记录(含一次三层叠加的渲染崩溃排查)在 ../插件开发踩坑手册.md。要点:client bundle 的模块 id 必须等于包名;组件渲染抛错会被插槽错误边界「退位」摘除——面板安静消失时去浏览器 console 找 slot entry crashed;IDENTITY_LABEL/RISK_LABEL 用属性访问 (L) => L.key,别写成函数调用。
No comments yet. Be the first to write one.