全部插件

DSH / BUNDLE / CLIENT-UI

dsh-plugin-catalog

v0.35.0JHboy203 / dsh-plugin-catalog3d5f8670da

可安装组合包UI 与客户端插件社区 · Topic 自动分析Web UI

概览

dsh-plugin-catalog

DSH 插件/Skill 目录面板:卡片式列出全部插件与 Skill 与 MCP(官方/自写/第三方/混血四分类)、按会话日志统计 90 天内每个工具的调用次数/报错/耗时/涉及会话(子代理单独标记)、读运行期真相(Loader 的 fiberPhase 与声明层对账)、在卡片底部直接卸载插件 / 停用启用 / 删除 Skill(回收站可还原)/ 停用或删除 MCP 条目(两段式 + 备份 + 写后校验)、自定义标签 + AI 分类、每周缺口分析与安全审核、自写与混血一键备份到 GitHub 私有仓(双语 README,密钥命中即停)。官方插件入口保留不隐藏。

README / ZH

插件文档

目录摘要

DSH 插件/Skill 目录面板:卡片式列出全部插件与 Skill 与 MCP(官方/自写/第三方/混血四分类)、按会话日志统计 90 天内每个工具的调用次数/报错/耗时/涉及会话(子代理单独标记)、读运行期真相(Loader 的 fiberPhase 与声明层对账)、在卡片底部直接卸载插件 / 停用启用 / 删除 Skill(回收站可还原)/ 停用或删除 MCP 条目(两段式 + 备份 + 写后校验)、自定义标签 + AI 分类、每周缺口分析与安全审核、自写与混血一键备份到 GitHub 私有仓(双语 README,密钥命中即停)。官方插件入口保留不隐藏。

dsh.pub 核对固定版本的组合包契约、运行时事实与分发语义;完整 README 请查看源仓库。

在 GitHub 阅读完整 README

LIMITATIONS

已知限制

0. **安装 / 升级 / 卸载插件与 Skill 不归本插件管(刻意如此)**:装东西走 `dsh-plugin-installer` (`install_hub_search_plugins` / `install_hub_submit_request` / `install_hub_status`)或官方 `plugin_manager`。 本插件只做**清点、判据、处置清单、对账、导出**。★ 曾计划过一个 `catalog_import`,评估后**主动不做**: 两套安装路径会各写各的快照与回滚,出问题时谁也没法证明是哪一套写的。两边的关系是"它装、我核"—— 装完回面板看 `loadState` 是否 loaded、进了 `catalog_mcp` / `catalog_list` 没有。 **R35 的卡片动作是例外,且只走面板**:卸载 / 停用 / 删 Skill / 删 MCP 由人点、服务端两段式确认; 它们**没有注册成工具**(模型拿不到"删用户东西"这个动作)。 0b. **R35 动作层的三条边界**:MCP 只处置 profile 自己那两份组合文件(bundle 自带的 patch 层阻断); 插件卸载不删源码(junction 只去掉依赖与入口);随插件安装的 Skill 不给删。详见「运行期真相与卡片操作(R35)」。 0c. **运行期真相依赖宿主 `pluginManager.listPlugins()`**:没有它的老宿主上这一层退化为「读不到」 (面板与工具都会如实说原因),其余功能不受影响。`fiberPhase=failed` 只能告诉你"它失败了", 具体错误仍在宿主日志 / `plugin_manager set_plugin` 的 `diagnostic` 里。 1. **私有仓拿不到平台级安全扫描**:GitHub 的 Secret Scanning / Dependabot / Push Protection 需要付费 GHAS。 所以「依赖已知高危」只能靠本地规则与模型常识,**准确度低于平台级扫描**。 2. **Skill 的调用统计只能到「次数 + 最近一次时间」**,无法细分到会话 —— 这是机制限制,界面上有标注。 3. **个人免费账户的私有仓没有「只读分享」档位**:要么私有(仅本人/受邀协作者),要么公开(所有人可读)。 需要精细权限得建 Organization。 4. **工具归属是推断**,但实测覆盖率很高(196 个工具里 193 个靠描述指纹唯一命中,覆盖 85.2% 的调用量; 歧义 0、未归属 0)。剩下 2 个判为宿主核心(`plugin_manager` / `exit_plan_mode`), 仍可在面板手工指定工具归属覆盖。 5. **星标/下载量等生态数据不采集**(本插件不联网,只读本机事实)。 6. **官方包(asar 内)的磁盘体积量不到**:它们在宿主安装包里,没有独立目录,所以列表与合计都按"不参与"处理。 要知道它们占多少,只能看 DSH 安装包本身的大小。 7. **体积快照是"上次量的时候"**:装/删/升级插件后,面板不会立刻知道变化 —— 超过 24 小时自动重量一次,也可以随时点「重量体积」(量完覆盖快照)。 8. **体积有预算**:单个目录最多 2 万文件 / 1.5 秒。超过的条目报下限(界面上带「+」,本机实测 1 条)。 这是为了不让一个巨型目录把整次测量拖住。 9. **「无人依赖」是启发式**:只读 profile 里 `node_modules` 下**一层**嵌套的 `package.json`, 更深的嵌套(`a/node_modules/b/node_modules/c`)或运行时 `require` 出来的包可能漏判成"没人依赖"。 所以它只做**候选**,界面上永远带"用 `npm ls` / `pnpm why` 确认"。本机实测 220 个包里 2 个候选 (`dpi-probe-bundle`、`dsh-toolfold`),都被更深的依赖链排除过一轮。 10. **依赖图不区分 devDependencies**:装进 profile 的包本来就不该有 dev 依赖,这里只按运行时声明判断。 11. **pnpm 的 `.pnpm` 虚拟仓库不展开**(本机 `nodeLinker: hoisted`,不存在该目录);换成 isolated 链接模式时,依赖图会退化。 12. **MCP 的「来源」是启发式**(R30):本地路径 / 环回 url → 自己配置,`@deepseek-ai/` → 官方,其余 → 第三方。 它判的是"这条声明长什么样",不是"这个服务器的作者是谁";判错可在浮窗里手工改。 13. **MCP 读的是声明层,不是运行态**:条目写了 `command` 也可能启动失败(缺依赖、端口占用、token 过期), 本面板不连服务器、不握手。真正的连接状态看宿主日志与工具是否出现。 14. **MCP 的 `disabled` 若是 `!!js` 表达式不求值**:面板只显示原文,到底开没开以宿主为准。 15. **MCP 的调用归属按第一个 `__` 切 serverName**:`serverName` 与工具名都允许下划线, 理论上存在歧义(`mcp__a__b__c`);本面板与报告用同一个切法,不在别处再猜一次。 16. **MCP 没有体积 / 依赖 / 加载态**:它是组合文件里的一条声明,不在 `node_modules` 里, 所以「量体积」「无人依赖」「不会被加载」这三档对它一律不适用(卡片上也不会出现)。