dsh-s-m-c-center
Verifieddsh-s-m-c-center · v0.1.2 · MIT · Web UI
Skills, MCP & CLI manager for the dsh web GUI: browse/enable/import/delete skills across project and user roots; manage MCP servers with a REAL connection through @deepseek-ai/dsh-mcp-client (enabled servers connect and register their tools on ctx.tools;
Install
dsh plugin add dsh-s-m-c-center Confirm the layer applied with dsh --profile default --dump-config — see the install guide.
Source
Tags
Readme
[!NOTE] 0.1.2 起技能目录由本插件接管(影子目录):目录成员严格跟随会话的注入选择;目录变化只发一条替换帧,不再每步追加;容器目录(只有 DESCRIPTION.md)可注入、可加载。已经过三轮外部实测(16/16 通过)。
三合一工具台 · dsh-s-m-c-center
中文名:三合一工具台 | 界面入口:「Web UI 插件 → 工具管理」 | 别名:工具管理、工具中心、技能管理、MCP 服务器管理、CLI 工具管理、Skills / MCP / CLI 管理器
一个自包含的 DSH Web 插件:在设置页新增一个一级页面,统一管理 agent 的三类工具(技能 / MCP 服务器 / 本地 CLI),并新增一层按对话生效的技能注入;另有一个使用说明页,讲清三者各自的工作方式,并在最下方负责把它们干净地还回去。
仅通过 profile bundle patch + 包安装挂载 —— 不改任何 DeepSeek Harness 源码。
✨ 它是什么
| 页签 | 管理 | 底层 |
|---|---|---|
| Skills 技能 | 浏览 / 启用 / 不启用 / 删除 / 导入技能;**「会话默认」**决定新对话起始注入哪些技能 | 用户级走 ~/.dsh/S-M-C/skills 正本 + 目录联接;项目级改写 SKILL.md 前言 |
| MCP 服务 | 新建 / 编辑 / 测试 / 激活 / 归档 / 删除 MCP 服务器 | 真实 @deepseek-ai/dsh-mcp-client 连接(mcp__<server>__<tool>);归档移入 S-M-C/mcp-archive.json |
| CLI 工具 | 发现 / 探测本地 CLI 工具;登记系统 CLI | skill 内嵌 scripts/run-cli + S-M-C/cli.json |
| 使用说明 | 三类工具各自的工作方式,以及卸载前的准备 | 说明集中在此页;卸载准备在最下方 |
完整说明见
docs/功能介绍.md、docs/架构.md。
💡 功能
- 技能:按项目级 / 用户级与来源分组(
.dsh/skills、.agents/skills、~/.dsh/skills、~/.agents/skills)。用户级技能迁入统一储存库~/.dsh/S-M-C/skills,「启用」= 在技能根目录注入目录联接,「不启用」= 移除联接(SKILL.md一字不改);项目级技能就地管理,仍用前言开关。删除为两步确认的物理删除,且只删储存库里的正本(见下)。点开可看详情(description / whenToUse / 正文);支持从任意目录扫描导入。 - 会话默认与按对话注入:
会话默认是新对话的起始技能;每个对话还能有自己的差异(关掉某个、追加某个)。对话里的 agent 可以自己开关(写入该对话自己的配置),侧边栏还有一个「会话技能」小窗供你随时手动调整——两处列表都只列已联接的技能。详见下一节。 - MCP:分「管理 / 新建」两个子页——管理页一台服务器一个 激活 / 归档 开关(外加删除),新建页提供表单或 JSON 编辑,保存前可测试连接(一次性真实探测);激活 / 归档真实连接 / 断开并注册
mcp__<server>__<tool>工具;实时状态(连接中 / 运行中 / 失败 / 已停止)。 - CLI:自动发现 skill 包装的 CLI(
scripts/run-cli.*/cli-state.*),并登记系统 CLI(gh、git…,存于S-M-C/cli.json)。每条都会探测:是否安装 / 版本 / 是否需更新 / API-Key 状态 / 子命令,并在行上标出来源与位置。公告 / 隐藏开关只决定是否把这个 CLI 写进给 AI 的公告(插件无法启停系统装的 CLI,因此默认隐藏)。 - 使用说明:按三类讲清工作方式,最下方是卸载前的总撤退口。「撤销迁移」把储存库技能移回原始位置;储存库空着时同一按钮变为绿色的「迁移」,双向可逆;「MCP 全部注入」把归档服务器一次性移回并重连;页面同时列出卸载后需手动删除的目录与配置块。
- 界面:全量文案 zh / en 双语(各 198 键,英文环境零中文);破坏性操作两步确认,且点开别处即复位。
🧠 两条通道:联接 vs 注入
| 启用(联接) | 注入(会话选择) | |
|---|---|---|
| 载体 | ~/.dsh/skills/<slug> 目录联接 |
会话技能表 ~/.dsh/S-M-C/contexts.json 里每个对话一行 |
| 作用范围 | 全局:所有对话、所有工作区、含子智能体 | 仅本对话 |
| 谁维护 | 技能页的「启用 / 不启用」 | 「会话默认」开关、小窗、以及模型自己的 skill_select |
| 谁看得见 | dsh 原生文件系统扫描 | 本插件的会话注入 |
会话选择的存储方式:文件里存的是与默认的差异(overrides: { on, off }),有效集合 = 默认 ∪ on \ off。这样改了默认,未单独配置过的对话立刻跟着变;而你在某个对话里手动关掉的技能不会被默认拉回来。
📷 界面预览
四个页签:技能(统一储存库 + 联接 + 会话默认)、MCP(真实连接)、CLI(发现 / 探测 / 登记)、使用说明。个人路径已打码。
🤖 交给 agent 的两个工具
| 工具 | 作用 |
|---|---|
skill_select |
为本对话启用 / 停用某个技能;写入该对话自己的差异并立即生效。接受所有已联接的条目——容器目录同样可以(其 DESCRIPTION.md 即可加载的正文)。 |
skill_query |
只读查询本工作区可见的技能清单(名称 / 描述 / 分组 / 是否已联接 / 本对话是否已注入),调用时动态计算,可关键词与分组过滤。 |
此外,「使用说明」页可开启向 AI 公告:把插件能力与三类工具的现状写进每个 agent 的系统提示。技能目录也由本插件生成(影子目录):目录里会多出一行 smc-skill-index —— 索引技能,加载它即可拿到本工作区的完整技能列表(格式与目录层一致);未注入的技能不能加载(提示 "not enabled in this conversation");/技能名 手势不受影响。
🏗️ 架构
挂载与双面结构 —— 插件只是一个 npm 包 + 一行 profile bundle patch,dsh 源码零改动:
Host 半区注册路由、公告 agent、真连 MCP;Client 半区只提供设置页,两者通过 /api/dsh-s-m-c-center/* 通信。
储存库布局 —— 插件的数据全部收在 ~/.dsh/S-M-C,而 dsh 扫描的两个目录刻意留在库外(插件只往里面注入 / 移除联接):
技能的「正本」始终在储存库里;~/.dsh/skills 下那个条目只是指向正本的联接。
三个开关在磁盘上的真实动作 —— 不是改配置字段,是真的动文件 / 动连接:
技能 = 增删联接;MCP 激活 / 归档 = 定义在 mcp.json 与 mcp-archive.json 之间搬家;CLI = 只切可见性。
🚀 安装
环境要求:DeepSeek Harness
>= 0.1.2-alpha.2(@deepseek-ai/*统一发版);Node^22.19.0 || >=24。 现状:0.1.6-alpha.1与0.1.5-rc.2上完整实测;0.1.2-alpha.2起所用 API 已逐一核对存在且签名一致。
必须按普通包安装 —— 切勿 junction 链接。 junction 会让依赖(
schemastery/react等)无法向上解析,并导致包名与cordis.patch.yml不一致;两者都会让 DSH 启动失败。
# 从 npm 安装
dsh plugin --profile web add dsh-s-m-c-center
# 或:npm install dsh-s-m-c-center
# 从源码(本仓库 / 克隆后)
dsh plugin --profile web add <本文件夹绝对路径>
# 或安装打包产物
dsh plugin --profile web add <path>/dsh-s-m-c-center-0.1.2.tgz
# 或使用一键脚本
bash scripts/install.sh # macOS / Linux / Git Bash
powershell -ExecutionPolicy Bypass -File scripts/install.ps1 # Windows
首次安装后需要重启 DSH 并硬刷新浏览器(Cmd/Ctrl+Shift+R),然后进入「设置 → Web UI 插件 → 工具管理」。
升级:只改界面时,覆盖文件 + 硬刷新即可;改到 Host 侧(路由 / 引擎 / 工具)时需要重启一次 DSH 进程。
⚙️ 配置
# 本插件自己的设置命名空间(dsh settings)
dsh-s-m-c-center:
enabled: true # 总开关(路由、MCP 连接、CLI 探测)
announceToAgent: true # 向每个 agent 的系统提示说明本插件
运行时状态:
- 统一外挂储存库:
~/.dsh/S-M-C/(Skills / MCP / CLI)——skills/(正本与index.json清单)、skills-links.json(联接账本)、skills-registry.json(登记的外部技能)、mcp.json、mcp-archive.json、cli.json。旧位置在首次启动时自动迁入;整个库可用DSH_STORE_ROOT挪到别处(插件会重建目录联接)。 - 会话选择:全机一张表 ——
~/.dsh/S-M-C/contexts.json,default是会话默认,sessions.<sessionId>是该对话与默认的差异(on/off)。不涉及工作区:键就是会话 id,所以设置页与小窗读的是同一份文档。旧版每个工作区一份文件,首次挂载(表不存在时)会一次性并入。 - MCP:激活的
S-M-C/mcp.json,归档的S-M-C/mcp-archive.json(凭证 / headers 明文保存 —— 请保持这两个文件0600)。 - CLI 注册表:
S-M-C/cli.json。
🔒 权限与依赖声明
插件以 DSH 进程权限运行,会用到文件、网络、命令与凭据四类能力 —— 逐项说明用途与边界:
| 能力 | 做什么 | 范围与边界 |
|---|---|---|
| 文件 | 读写储存库 ~/.dsh/S-M-C/**;在技能根目录创建 / 移除目录联接;读写会话技能表 ~/.dsh/S-M-C/contexts.json(以及旧布局的 <workspace>/.dsh/S-M-C/contexts/*.json,仅由导入读取一次);读取 SKILL.md 与 skill 内嵌脚本 |
只动储存库与 dsh 扫描的四个技能根目录;就地技能只改写前言标记;不读写其它路径 |
| 网络 | 连接用户自己配置的 MCP 服务器(stdio 走子进程,streamable-http 走 HTTP) | 只连用户在管理页填写的服务器地址;插件自身无内置外部服务、无遥测、不上报任何数据 |
| 命令 | 探测本地 CLI 工具:执行其 --help / --version 或 cli-state 声明的探测命令 |
只执行注册表内、管理页可见的命令;不执行用户未登记的其它命令 |
| 凭据 | 保存 MCP 的 env / headers / API-Key,读取 CLI 的 cli-state |
只在本机 ~/.dsh/S-M-C/*.json 明文读写、不外发;建议将这两个文件权限设为 0600 |
外部依赖:运行时依赖仅 schemastery(设置项校验);@deepseek-ai/* 与 react 是 peer 依赖,由 DSH 提供;无原生模块,无 postinstall / prepare 等生命周期脚本。
失败边界:目录扫描或路由失败降级为空列表与占位提示;迁移失败只记入 failures 并继续,不阻塞 DSH 启动;MCP 连接失败只改变状态显示、不动文件;会话注入失败不会否决会话创建,只在日志里说明原因。任何一项都不会让 DSH 启动失败。
已知风险:技能删除是物理删除、不可恢复(且只删储存库正本:native 技能需先「迁移入库」,registered 用「取消登记」,「删除联接」只解联、从不删目标);MCP 凭证明文保存;技能启用 / 禁用经目录联接生效,手动剪切储存库会让联接失效(需要时用 DSH_STORE_ROOT 搬迁,插件会自建联接)。
🗂️ 仓库结构
dsh-s-m-c-center/
├── src/
│ ├── index.ts # 宿主组合根(挂载、设置、公告、工具注册)
│ ├── routes.ts # 路由汇总(按域拼装)
│ ├── setup.ts # 身份常量 + 面向 agent 的说明文案
│ ├── shared/ # 跨域原语:paths / fs-utils / frontmatter / http / protocol
│ ├── features/ # 垂直切片,每域自持 manager + routes + index 桶
│ │ ├── skills/ # 技能:roots / scanner / linking / links / registry /
│ │ │ # adopt / delete / migration / store-index / catalog
│ │ ├── mcp/ # MCP:document / manager / routes
│ │ ├── cli/ # CLI:probe / registry / manager / routes
│ │ ├── context/ # 会话注入:engine / apply / tools / routes
│ │ ├── announce/ # 系统提示公告
│ │ └── settings/ # 插件设置命名空间
│ └── client/ # 浏览器半区
│ ├── shell/ # 设置卡片外壳、侧边栏「会话技能」小窗
│ ├── shared/ # api / ui / locales(zh+en) / format / css module
│ └── features/ # 四个页签各自的面板 + hook
├── lib/ # 构建产物(宿主 index.js;客户端 client.js;types/*)
├── tests/ # vitest(13 个文件)
├── cordis.patch.yml # DSH bundle patch(包名必须与 package.json 一致)
├── dsh.plugin.json # DSH 插件清单(id / version / main / client.main)
├── package.json # npm 包(dsh.bundle.patch + dsh.client + compatibility)
├── LICENSE # MIT
├── README.md / README.zh.md
├── docs/
│ ├── 功能介绍.md / 架构.md / development.md
│ ├── arch-*.svg # 架构图(本文档引用)
│ ├── social-preview.png # 仓库社交预览图
│ └── shots/ # 界面截图(本文档引用)
└── scripts/install.* # 一键安装进 DSH profile
🛠️ 开发
见 docs/development.md:双半区构建(tsdown 重建 lib/index.js + lib/client.js)、类型检查(tsc --noEmit)与测试套件(vitest,13 个文件 / 191 个用例)。
📄 许可
MIT。
English: README.md.