DSH Plugins Marketplace

DSH Plugins

Plugins

/

dsh-tui-skill-mcp-panel

d

dsh-tui-skill-mcp-panel

Identified★ 1

Visual skill & MCP manager for dsh-TUI: full-screen scene behind /skill-mcp (M0 probe / M1 skeleton)

dsh-tui-skill-mcp-panel

给 dsh-TUI 的技能(skill)与 MCP 服务器可视化管理面板:在终端里输入 /skill-mcp 打开全屏管理场景,不用离开 TUI 就能查看、启用/停用、添加、分组技能与 MCP 服务器;改动尽量热加载,不要求重启 TUI。

开发状态(2026-11-13):技能管理与 MCP 列表/启停已实现;M4 已支持本面板新增 MCP 的编辑、删除与撤销,含 stdio/HTTP 表单、共享锁、冲突检测、备份和热加载等待。已有 profile 行仍仅支持启停,home 层只读。已支持按 profile 隔离的 MCP 分组、搜索与状态筛选;M5 的 manifest、打包检查与准入自查已补齐,首版 P1 已确认延后,P0 细项整改及完整人工验收仍待完成,npm 尚未发布。完整范围以 docs/需求文档.md §14 为准。

功能与进度

模块能力状态
技能只读:全局/工作区列表、详情、作用域筛选、搜索;写入(M2 P0):启用/停用(*.disabled)、软删除 + 回收站撤销、本地路径添加/导入、分组、批量;迁移/复制、zip 导入为 P1(未实现)✅ 主要流程;P0 细项待补
MCP列表/启停;stdio/HTTP 新增表单;本面板受管行编辑、删除、撤销;!!js 保留与脱敏;home 全局层只读。按 profile 分组、搜索与状态筛选;连接测试为 P1 可选✅ 受管 CRUD / 分组筛选
分组显示层分组、加入/移出、按组过滤;技能分组与 web 版共享 groups.json(v1);MCP 分组存私有配置并按 profile 隔离;组内批量动作(P1)✅ 基础 / 🚧 批量
诊断发现根与路径、frontmatter 合法性、遮蔽/停用状态、宿主能力探测;锁 / 备份 / 回收站(M2+)✅ 基础
入口/skill-mcp 命令打开全屏场景✅

热加载:技能靠磁盘 watcher,MCP 靠 HMR 重组合。保存后面板显示「已保存,热加载中…」,生效后改为「已生效」,不承诺瞬时生效。

安装

尚未发布到 npm。 本插件以 trusted-in-process 方式运行:与宿主同进程、无沙箱,能读写下方披露的文件;permissions: [] 不构成文件系统隔离。请先确认信任来源。发布后:

dsh plugin --profile dsh-tui add dsh-tui-skill-mcp-panel

从源码安装、构建与真机验证流程见 AGENT.md §7。维护者可运行 pnpm check:release;发布前完整测试步骤见发布准备与人工验收。

使用

在 dsh-TUI 中输入 /skill-mcp 回车打开管理场景,Esc / q 关闭。当前版本提供:

  • 技能页:全局/工作区筛选、搜索、列表与详情;空格 启停、d 软删除、u 撤销、a 本地路径导入、v 多选后批量操作、g 管理分组。o 或点击工作区入口选择宿主登记的本地工作区,确认页显示完整目录与实际 Git 发现根;只切换面板管理目标,不切换聊天会话。窄终端下点击技能行或 Enter 进详情,Esc 或 [←返回] 返回列表。启停后仍选中同一来源的技能。撤销遇占用时默认取消,可选择覆盖前备份或恢复到另一作用域;二次确认页显示完整路径,成功后显示备份位置。
  • 诊断页:插件/宿主/DSH 内核/Node 的实际版本或 unavailable、发现根与路径、扫描统计、警告、宿主接缝能力探测;v 查看完整来源及不可读原因;按 c 或点击清理记录,查看清理前快照、结果和受保护项(只读)。
  • MCP 页:a 新增,Enter 编辑、d 删除、u 撤销本面板受管行;空格 启停 profile 行。已有行仅启停,home/表达式控制行只读。编辑与删除前确认;文件被外部修改时停止写入,按 r 重新加载后重试。g 加入/移出分组,f 按状态及分组筛选,/ 搜索名称、entryId、transport、来源层与分组名,x 清除 MCP 过滤。
  • 分组页:t 切换技能/MCP,可新建、重命名、删除分组,Enter 按组选出成员。共享技能分组保存遇到外部修改时会拒写,按大写 R 刷新后重试;写入备份路径可在诊断页查看。删除分组只改显示元数据;整组批量动作尚未实现。

界面按「焦点」操作,像文件管理器一样用方向键走过去:

  • ↑/↓:当前区域内的选择/滚动;
  • ←/→:把焦点移到左边/右边的区域(技能列表 ⇄ 作用域、列表 ⇄ 详情),在页签栏上则是切换页签;
  • 列表顶部再按 ↑ 会回到页签栏;在页签栏按 ↓↓ 或 ↓ 回到技能列表;
  • Tab:快速切换页签(1–4 直达),最后页签保存到私有配置,重新打开或重启后恢复;Enter:进入详情(窄终端下打开详情,Esc 返回);
  • / 搜索 · r 重新扫描 · ? 帮助 · q 关闭。

MCP 页按 i 打开已知配置字段的脱敏详情(只读,不展示未知配置键)。帮助、确认框和详情支持 ↑/↓、PgUp/PgDn、Home/End;长输入显示末尾,底部动作按钮随宽度换行。技能详情预览最多 16 KiB/前 400 行,路径与正文按终端宽度折行。按 i 或点击全文,读取原技能文件(含 frontmatter),支持 Home/End、翻页和滚轮;文件变化后按 r 重新读取。按 p 查看完整路径及所在目录的复制文本,长路径折行时请合并续行。全文只渲染当前页,建立索引时可关闭取消。场景可用区域至少需 40×16;更小时暂停操作并保留草稿,放大后继续,q/Esc 可关闭。该尺寸指宿主提供给场景的区域,终端窗口通常还需留出宿主边距。

当前焦点区域用主题色(accent)边框和 ❯ 指针标出;选中行用主题选中底色。fullscreen 布局下额外支持鼠标:点击页签/作用域/技能行,滚轮滚动列表、详情与诊断页(若终端未路由鼠标事件,键盘功能不受影响)。

MCP 表单点击字段或按 Enter 编辑,Ctrl+U 清空当前输入;选择框和输入框均提供可点击的 [Esc 取消],也可按 Esc 返回。args 使用 JSON 字符串数组,例如 ["--port", "3000"];env/headers 每行 KEY=VALUE,支持粘贴多行或 Shift+Enter 换行,${ENV} 保存为表达式。敏感值输入始终隐藏;留空保留原值、-KEY 删除单个键、! 清空该组。保存前只显示变更字段,不显示密钥。

MCP 分组存本插件的 config.json,按当前 profile patch 的绝对路径隔离,成员以 serverName + entryId 双键记录;同名服务器可独立归组。分组可包含只读行;服务器改名会同步本面板分组,删除服务器保留成员引用以便撤销恢复。搜索不读取密钥或命令参数,搜索词、状态与分组筛选可组合,且与技能页过滤独立。分组名不能重复于当前 profile;其他 profile 可使用同名分组。私有配置损坏时保留原文件并阻止写入,请先备份并手工修复;刷新可重新读取。

已知限制

限制说明
MCP 没有「工作区级」DSH 内核只有 profile 级 MCP 配置。面板提供「当前 profile(可写)+ home 全局层(跨 profile,只读)」;工作区维度只适用于技能。
MCP 编辑/删除边界只支持本面板新增的受管行;已有 profile 行保留启停。未知配置键与 !!js 保留;其他自定义 YAML 标签或歧义结构会拒写,请手工编辑。
技能只发现一层与 DSH 内核一致:<root>/<name>/SKILL.md 或 <root>/<name>.md,不递归嵌套分类目录。
热加载有延迟MCP 配置写入后需要 HMR 重组合(实测约 2–2.5 秒),面板如实显示状态,不假装瞬时。
外部修改冲突与 web 面板共用 patch 锁;写前核对 profile/home 内容,冲突后刷新重试。共享技能分组遇到文件变化时按大写 R 刷新后重试,写前备份并保留未编辑字段。MCP/分组没有强制覆盖入口;不遵守锁的写入与最终 rename 之间仍有极短竞争窗口。
旧版 MCP 启停配置旧覆盖行会导致 web 2.3.7 开关不一致。新版启停精确修改定义的 disabled;旧条目在下次启停时清理,也可在 MCP 页按 m 查看目标并确认迁移,保留保存的启停状态。迁移遇歧义整批停止,不自动改 home/表达式。完整共存验收状态见开发文档。
web / TTY 待验边界web 2.3.7 开关后的空值崩溃已由官方 2.3.12 修复;部分多行 flow 编辑缺陷在 2.3.12 仍存在。冷启动 Node MCP 继承终端 stderr、退出时恢复旧模式,可导致 TUI 按键失效,且宿主重复开启 raw 无法恢复。按现象确认、临时恢复及修复证据见 已知问题速查。当前选择保持原安装,未应用临时补丁,完整共存验收未通过。
场景内自绘交互场景内不依赖宿主对话框 / toast(实测不可用);确认与表单输入在场景内完成。
工作区管理边界优先读取场景的会话 cwd,再按最近 .git 求实际根。工作区列表来自公开 tuiWorkspaces;服务不可用/拒绝/超时可查看说明并继续管理当前本地目标和全局。远程 provider 目录不作本机路径扫描。其他工作区的写入只说明已保存,不声称当前会话已加载。工作区目标不跨进程记忆;最后页签会记忆。
面板只列文件来源技能运行期/agent scope 注册的技能不在扫盘结果内;customSkillDirs 在宿主层不可读(按未配置处理)。
迁移/复制、zip 导入首版未实现(P1);添加仅支持本地绝对路径的 .md 或目录束。
回收站保留面板启动及删除后自动按清单删除时间清理:默认 7 天或最近 100 个正常技能批次,清理后无法撤销。诊断页 c 保留执行前快照与结果。MCP、未知/损坏、链接批次、待恢复和清理中断数据保留,不占正常批次预算;备份不自动清理。配置/清理记录异常时停止自动清理。
首版 P0 细项删除确认已支持全部目标和完整路径;跨设备删除/撤销已支持复制校验及失败保护。撤销冲突已支持默认取消、确认后备份替换或另作用域恢复;清理生命周期已补齐;页签记忆与已知本地工作区入口已补齐;完整路径与分页全文已补齐;诊断版本已补齐;技能状态筛选、布局/性能核对和完整验收仍待完成,见范围与整改清单。P1 延后不取消这些 P0 要求。
全文读取边界只读普通 UTF-8 技能文件(含指向普通文件的链接);按块读取、稀疏索引,初次打开或改变宽度需重新扫描文件并显示进度,可取消。检测到文件修改/替换后停止旧视图,按 r 重读;不编辑、不自动打开文件管理器,也不自动写系统剪贴板。路径提供终端选择复制文本。
版本来源插件读取自身包元数据;宿主读取公开 host descriptor;内核读取已确认的当前 DSH CLI 入口解析到的 app-boot 包元数据;Node 读取当前进程。来源不可用/拒绝/无效时显示 unavailable,不以兼容范围或其他安装代替。包元数据不等于代码完整性校验,r 可重新读取。
首版不做技能正文编辑、插件安装/更新、MCP OAuth、单工具禁用、伴随 CLI。

兼容性

  • 目标宿主:@deepseek-harness-tui/dsh-tui >=0.19.0 <0.20.0
  • DSH 内核:0.2.2-rc.1 线;Node >=24.9
  • 与 web 版 dsh-skill-mcp-panel 共享磁盘约定(*.disabled、groups.json、补丁锁 <patch>.panel.lock,但受管块标记不同名);技能分组已有 TUI 锁与快照冲突保护;web 2.3.7 未使用该分组锁,避免两端同时改同一分组文件。

权限与信任

  • 插件 permissions: []:不申请额外权限,不安装插件、不执行用户命令、不 eval 用户表达式。
  • 插件直接读写 ~/.dsh 下的技能文件与当前 profile 的 cordis.patch.yml(trusted-in-process,非沙箱,安装前需信任);写前备份、原子写;配置编辑/删除限本面板受管行,已有 profile MCP 仅精确修改普通布尔 disabled,其他内容保留;删除走回收站可撤销。
  • 停用面板只释放面板的命令、场景和计时器;卸载面板保留技能、已保存的 MCP 配置、分组、备份和回收站,不提供 purge。MCP 与技能本身的启停状态不会随管理器卸载而恢复。
  • MCP 的 env / headers 可能含令牌:表单、诊断、dump 和日志脱敏。原配置、备份与回收站仍保留原值;插件新建的备份/清单使用私有目录与 0600 文件权限。

开发文档

需求与设计在 docs/:需求唯一权威 docs/需求文档.md、调研与真机实测 docs/research/README.md(含 M1 与内核发现一致性验证)、关键决策 docs/decisions/、仓库工作约定与开发流程 AGENT.md。

许可证

MIT。

Comments

Loading…