Skip to content
dsh.fish
Bundle

dsh-workshop

轻量插件开关:DeepSeek Harness 插件管理面板——官方/第三方身份判定、patch 层发声式开关、风险标签

Source
Zlyraz
License
MIT
Updated
Updated 2 days ago

Readme

# 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`](../插件开发踩坑手册.md)。要点:client bundle 的模块 id 必须等于包名;组件渲染抛错会被插槽错误边界「退位」摘除——面板安静消失时去浏览器 console 找 `slot entry crashed`;IDENTITY_LABEL/RISK_LABEL 用属性访问 `(L) => L.key`,别写成函数调用。

Install

dsh plugin --profile web add github:Zlyraz/dsh-workshop

Profile: web

  • This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.
Source