Skills Plugins MCP Prompt Model 导航 博客 资讯 我的中心

dsh-plugin-admin

dsh web UI plugin: unified administration panel — plugin and session management with modern tabbed Web UI (host remote + browser panel)

zerosloney @zerosloney ⬇ 1 ★ 0 master

安装

dsh plugin --profile web add github:zerosloney/dsh-plugin-admin
下载安装清单

需要可复现安装时,可在仓库后追加 #commit 固定提交。

dsh web UI plugin: unified administration panel — plugin and session management with modern tabbed Web UI (host remote + browser panel)

该插件未提供要点说明,请参考仓库 README。

  1. 安装并启动 DeepSeek Harness:npx @deepseek-ai/dsh web
  2. 在终端执行上面的安装命令(CLI 会解析插件并核验来源)
  3. 用 dsh plugins list 确认已安装,必要时重启 Harness 生效

插件以当前 dsh 进程的权限运行,安装时可能执行代码。请先通读仓库源码与许可证,确认无破坏性命令与越权访问;本站只做索引,不对第三方插件安全性作担保。

代码仓库github.com/zerosloney/dsh-plugin-admin
许可证未标注(见仓库)
主要语言master
下载量1
GitHub 星标0
最近推送2026-08-27
收录日期2026-09-19
分类界面增强

事实信息来自公开插件目录快照(2026-10-01),介绍文案由本站再加工。

以下为插件仓库 README 全文(原始内容,由公开目录抓取整理)。

# dsh-plugin-admin

dsh web UI 插件:在浏览器设置弹窗(侧边栏底部“设置”)中新增一个**管理中心**设置页,内含**插件管理**、**会话管理**、**MCP 配置**三个 Tab,按需加载当前面板。

- **🔌 插件管理**:
  - 顶部输入框支持 npm 包名(如 `dsh-xxx`)或本地绝对路径安装插件(回车或点击提交);
  - 列表展示当前 profile 下的全部 bundle 层(名称、版本,以及**内置 / 包安装 / 本地安装**标记;本地安装的插件额外显示其源路径,依据 profile 依赖清单中的 `link:` / `file:` / 绝对路径 spec 判定);
  - **名称模糊搜索**:列表上方搜索框支持按插件名 / 版本号 / 本地路径模糊过滤(大小写不敏感子串匹配),可叠加「全部 / 扩展插件 / 系统内置」筛选胶囊,无结果时给出专属空状态提示;
  - 支持扩展插件一键卸载(带有优雅的行内二次确认);
  - **远程更新检测(自动)**:打开「插件管理」Tab 即自动按 profile 实际使用的 npm registry(`npm_config_registry` → 项目/用户 `.npmrc` → 官方源)查询每个 **registry 安装**的插件(跳过内置与本地路径安装)的 `latest` 版本,与本地版本比对——有新版时卡片显示琥珀色「⬆ 有新版本 vX.Y.Z」徽标并出现一键「⬆ 更新」按钮(`npm install @latest`);工具栏「⬆ 检查更新」是唯一的手动重查入口,**强制绕过 5 分钟缓存直接重查 registry 并刷新缓存内容**(自动检查走缓存,手动检查才是真查);查询带超时与 5 分钟缓存(host 侧缓存,**缓存命中时按当前安装版本重算 `updateAvailable`**,重启 dsh 后首次打开自动重查),网络失败按条目提示而非报错;**「有新版本」提醒会保存下来(浏览器 localStorage 持久化)**——关闭再进入管理中心、甚至重启 dsh 后依然显示(含本次检查网络失败时),**只有点「更新」真正升级、或后续检查确认已是最新版本后,提醒才自动消除并同步清掉持久化记录;更新其中一个插件不会影响其余插件的提醒;升级完成后的自动复核同样**强制绕过缓存**重新查询,registry 在 TTL 窗口内刚发布更新的情况下也不会把刚升完级的插件误标回「有新版本」,检查与升级并发交错时,检查刚发现的提醒也不会被升级提交用旧快照覆盖(合并一律基于当前 state 的函数式更新,持久化由统一的镜像 effect 收口);
  - 安装/卸载在 host 侧编排 profile 目录下的 pnpm 并自动同步 `package.json` 的 `dsh.profile.bundles` 清单(变更在重启 dsh 后生效)。
- **💬 会话管理**:
  - **标题与内容摘要**:自动解析会话标题(`session/title` 或首条用户提问)并渲染首条消息的文本摘要气泡预览(带折行省略与多行保护);
  - **元信息直观展示**:显示对话消息计数(如 `5 条消息`)、工作目录路径(`📁 项目名 (完整路径)`)、创建时间及短 Session ID;
  - **状态呼吸灯与徽标**:绿色呼吸光晕(**会话在线**,悬停提示说明"在线 = 仍挂载于 dsh host 内存,非正在运行")、琥珀色标签(**已归档**)、灰色默认点(**已结束**);
  - **多维快捷搜索与筛选**:输入框支持同时模糊匹配标题、对话摘要、工作目录或 Session ID;支持按状态胶囊筛选(全部、在线、已归档、已结束);
  - **会话清理与恢复**:支持会话永久物理删除(行内二次防误触确认,彻底清理磁盘日志、工作区记账与归档集合);**在线会话不再需要重启 dsh**——「关停并删除」通过插件在 host 侧透明捕获的 `AgentHandle` 走 dsh 官方 dispose 链(停止 agent 运行、等待静止、注销 agent、从内存 SessionStore 移除并触发 `session/disposed`,持久化层随即 flush 缓冲事件并释放写路径),然后才删除日志,因此日志不会在下次 flush 复活;支持已归档会话一键取消归档,侧边栏即时联动刷新。
  - **🔌 MCP 配置**:管理中心中的独立 Tab——列出 profile 的 `cordis.patch.yml` 中所有 `@deepseek-ai/dsh-mcp-client` 实例,支持添加(stdio 子进程 / streamable-http)、编辑与移除,配置写回后重启 dsh 生效;新增**连通性检测**(🔌 测试)——host 侧按条目配置发起一次真实的 MCP 握手(`initialize` → `notifications/initialized` → `tools/list`),stdio 走新行分隔 JSON-RPC 子进程(Windows 下与 real 插件同样经 `cmd.exe` 解析 `.cmd` shim,超时强杀进程树、捕获 stderr 尾部便于诊断),streamable-http 走 `initialize` POST(兼容 SSE / 纯 JSON 响应);成功后行内显示服务器标识、**工具数量与工具名列表**,失败给出可诊断错误(命令不存在 / 连接被拒 / 超时等);若 `command` 写成整行调用(如 `npx -y fetcher-mcp`),探测会自动拆分执行并给出**警告**提示需拆分为 `command` + `args`(否则 dsh 启动该 MCP 服务器会失败);结果经 typert 边界 JSON 安全清洗,绝无 `undefined` 字段;
  - **测试结果的缓存边界**:只有**成功**的探测结果持久化到 localStorage(重开面板/重启后恢复上次状态并标注「缓存于」时刻);**失败(❌ 不通)只在当前会话内显示、不落盘**——瞬时故障不会变成跨会话的过期 ❌,旧版本遗留的失败记录会在载入时自动清除;新增表单中手输与既有条目相同的 id 会被**直接拒绝并提示换名**——host 的 upsert 按 id 原位覆盖,不拦截就是静默毁掉该条目的既有配置。
- **侧边栏右键菜单(会话 & 工作区)**:
  - **会话行右键**:在原生菜单末尾追加**复制会话 ID**与**删除会话**(危险操作);删除按标题**精确匹配**解析目标,存在同名会话时拒绝执行并引导到管理中心按 ID 删除,且菜单项需**4 秒内两次点击**确认;删除复用 `sessionAdmin` 的安全语义——在线会话走 `closeSession`(先 dispose 捕获的 agent handle 再删日志,不再要求重启),非在线会话走 `deleteSession`,均定向 detach。
  - **工作区行右键**:新增**在资源管理器打开**——调用 `fsAdmin.reveal` 在系统文件管理器中定位该工作区目录(Windows `explorer /select`、macOS `open -R`、Linux `xdg-open`)。

---

## 架构

- **Host 端(`lib/index.js`,零 dsh 依赖)**:
  - 注入 `['typert', 'workspaceRegistry', 'sessionPersistence']`;
  - 提供并注册四个 RPC 命名空间:
    - `pluginAdmin`(`list` / `install` / `remove` / `checkUpdates`):异步 `spawn` pnpm(Windows 走 shell 解析 .cmd shim,5 分钟超时且**进程树强杀**(`taskkill /T /F`,避免超时后残留 pnpm/node 子进程继续写盘),Promise 尾链串行化防并发),镜像 CLI `reconcileBundles` 同步清单,清单写回为**原子写**(临时文件 + rename,崩溃不截断 profile 的 package.json);安装/卸载参数经**字符白名单**校验(`assertPnpmOperand`),从根上排除 `&` `|` `>` `<` `%` 引号等 cmd 元字符注入向量;`install` / `remove` 返回真实 pnpm 输出尾部(`output` 字段),前端作为提示气泡的悬浮诊断信息展示;`checkUpdates` 对 registry 安装的 bundle 并发查询 npm registry 的 `latest`(registry 解析:`npm_config_registry` env → 项目/用户 `.npmrc` → 官方源;有界并发 4 路、8s 超时、5 分钟缓存;`force` 参数为 true 时**绕过缓存强制重查并刷新缓存内容**),返回 `updateAvailable` / `latest` / `error`,本地路径与内置插件跳过;
    - `sessionAdmin` (`list` / `archive` / `unarchive` / `deleteSession` / `closeSession`):直接对接 `workspaceRegistry` 与 `sessionPersistence`,提供安全幂等的持久化日志清理与归档状态流转;`list` 采用**修订号驱动的摘要缓存**(`listSnapshots` 的 revision token,未变化会话不重读事件日志)与**有界并发**(最多 4 路并行 inspect),并设单会话事件扫描上限兜底;`archive` 校验会话真实存在,拒绝向归档集写入垃圾 id;对 registry 软私有写路径(`requireState` / `setState` / `enqueueOperation`)在 `apply()` 挂载时即做**兼容性探测**,dsh 版本变更会明确报出缺失成员,而不是首次归档时才静默失败。`closeSession` 使**在线会话免重启删除**成为可能:`installAgentHandleCapture` 在挂载时透明包装公开的 `ctx.agents.create` / `resume`(原样调用并返回,仅把返回的 `AgentHandle` 按 session id 存入插件私有 Map),删除在线会话时先 `handle.dispose()` 走 dsh 官方 teardown 链(停止 loop → 等待静止 → 注销 agent → 从 SessionStore 移除 → 触发 `session/disposed` → 持久化层 `retire()` flush 缓冲事件并释放写路径),再删日志——日志不会被下次 flush 复活;未被捕获 handle 的在线会话(如插件挂载前已创建)会明确报错并引导重启,绝不误删。
    - `fsAdmin` (`reveal`):跨平台在系统文件管理器中定位一个绝对路径(Windows `explorer /select`、macOS `open -R`、Linux `xdg-open`),供工作区右键菜单「在资源管理器打开」使用;
    - `mcpAdmin` (`list` / `upsert` / `remove` / `test`):管理 profile 的 `cordis.patch.yml` 中的 MCP 客户端实例(`@deepseek-ai/dsh-mcp-client`)。基于行级 YAML 块编辑(零依赖):识别顶层 `- id:` 块并仅改动 `name` 为 MCP 客户端插件的条目,`upsert` 按 id 原位替换或追加,`remove` 整块删除,写回走**原子写**;校验 id / serverName / transport / command / url,拒绝畸形输入;文件变更与插件安装共用同一**串行操作队列**(读-改-写不交错)。`test` 按条目 id 发起**连通性探测**:stdio 子进程(newline JSON-RPC,`initialize` → `initialized` → `tools/list`,超时 `taskkill /T /F` 强杀进程树,捕获 stderr 尾部)或 streamable-http(`fetch` POST `initialize`,兼容 SSE 与纯 JSON,超时 AbortController),返回服务器标识 / 工具数量 / 耗时,或失败原因(命令不存在、连接拒绝、超时等),全程不抛异常。
- **浏览器前端(`lib/client.js`)**:
  - 注入 `slots` + `connection`,向设置弹窗注册一个 `settings.section`:`plugin-admin`(管理中心, order 25);页内 Tab 仅挂载当前面板;
  - 采用模块表平台词 `require('react')` 与 Shell 共享同一 React 实例;
  - 深度利用 `--dsw-*` design tokens,自适应浅色/深色主题,支持卡片式布局、状态呼吸灯、加载动效(Spinner)、危险操作防误触确认条与空状态提示;
  - 经 `/api` RPC Gateway 调用 Host 对应服务的 Remote 方法;
  - 新增**侧边栏菜单注入**(纯 DOM,无需 dsh 源码改造):MutationObserver 监听原生三点菜单弹层的出现,识别会话/工作区菜单并在末尾追加自定义项;会话行按标题解析身份(复制 ID 允许模糊匹配,删除仅**精确匹配**且同名拒绝、两次点击确认),工作区行按标题解析路径后调 `fsAdmin/reveal`。

---

## 安装与启用

```sh
# 将本插件添加到 profile(以 web 为例)
pnpm dsh plugin --profile web add E:/Demo/cli-tools/dsh-plugin-admin

# 重启 dsh 生效
pnpm dsh --profile web
```

---

## 发布到 npm(CI/CD)

该仓库已配置 GitHub Actions:**CI** 在每次 push / PR 上跑 `npm ci && npm test`(Node 22/24 矩阵);**发布**在推送 `v*` tag 时触发,校验 tag 与 `package.json` 版本一致后 `npm publish --provenance`。

```sh
# 1. 本地发版:bump 版本并打 tag(同时更新 package.json)
npm version patch -m "chore: release v%s"
git push origin master --tags

# 2. GitHub Actions 自动:测试 → 校验版本一致 → 发布到 npm
```

前提:
- 仓库需配置 npm 发布密钥:**Settings → Secrets and variables → Actions**,添加 `NPM_TOKEN`(npmjs.com 的自动化 token,`--provenance` 需要 npm ≥9.5 且发布 job 具备 OIDC `id-token: write`,工作流已声明)。
- 首次发布若包名被占用,需先在 npmjs.com 认领。

---

## 自动化自检

```sh
node scripts/self-check.mjs
node scripts/host-check.mjs
```

自检套件覆盖:
1. Bundle 工厂加载与模块导出校验;
2. 单个“管理中心” `settings.section` 声明与注册,以及插件管理 / 会话管理 / MCP 配置 Tab 的按需切换;
3. 现代化统一样式注入(`

数据来源:公开的 DeepSeek Harness 插件目录与各插件 GitHub 仓库。本站为独立第三方目录,与 DeepSeek、幻方(High-Flyer)及插件作者均无隶属或背书关系。

每日精选 Skill 推荐,免费送到你邮箱

输入邮箱,每天接收一个精选 AI Agent 技能推荐。完全免费,持续更新。

提交后我们会发送一封确认邮件,点击邮件里的链接才会开始收信。

完全免费,取消任意时间。我们不会发送垃圾邮件。