🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

智能体配置加载器 CrazyPigHead/dsh-plugin-agents-loader

DeepSeek Harness
CrazyPigHead34 天前有提交已提供中文文档扫描:含敏感能力

自动加载 MCP 服务器与斜杠命令并热重载

29.8/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/9/30 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add CrazyPigHead/dsh-plugin-agents-loader
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:需留意
是什么
dsh 原生插件 · skill
装得上吗
实装验证未通过(dependency_conflict),装前请到仓库确认最近更新与 issue
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 34 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
⚠︎ 实装验证未通过(dependency_conflict · 2026/9/30) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件
查看扫描证据(共 4 处,展示前 4 条)
  • 读取本地文件
    src/mcp-loader.js:169
    if (!existsSync(configPath)) return
  • 读取本地文件
    src/mcp-loader.js:173
    parsed = JSON.parse(readFileSync(configPath, 'utf-8'))
  • 读取本地文件
    src/commands-loader.js:63
    files = readdirSync(commandsDir).sort()
  • 读取本地文件
    src/commands-loader.js:81
    content = readFileSync(join(commandsDir, file), 'utf-8')
扫描于 2026/11/1(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-mcp-client
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 加载MCP服务
  • 加载斜杠命令
  • 支持热重载

dsh 插件:自动加载 ~/.agents/mcp.json 里的 MCP 服务(http/stdio)、~/.agents/commands/ 下的斜杠命令和 AGENTS.md,支持热重载

README

由 DeepSeek 最新模型翻译生成
dsh-plugin-agents-loader License: MIT dsh 全局插件:启动时自动发现并加载 ~/.agents/mcp.json(MCP 服务器,支持 http 与 stdio)和 ~/.agents/commands/.md(斜杠命令)到运行中的 dsh Host,文件变更时自动重载。 适配 dsh 0.1.7-rc.2(cordis 4.0.4)。peer 依赖按 dsh 官方包惯例精确锁定版本,安装前请阅读「安装 · 前置要求」。 功能 | 来源 | 加载到 | 行为 | | ~/.agents/mcp.json | ctx.plugin(dsh-mcp-client, …) | 对每个 enabled !== false 的 MCP 服务器创建子 fiber,自动注册其工具为 mcp____;支持 http(streamable-http)与 stdio 两种 transport | | ~/.agents/commands/.md | commands.register(…
展开完整文档(README 剩余 1 节)
dsh-plugin-agents-loader

License: MIT

dsh 全局插件:启动时自动发现并加载 ~/.agents/mcp.json(MCP 服务器,支持 http 与 stdio)和 ~/.agents/commands/.md(斜杠命令)到运行中的 dsh Host,文件变更时自动重载。

适配 dsh 0.1.7-rc.2(cordis 4.0.4)。peer 依赖按 dsh 官方包惯例精确锁定版本,安装前请阅读「安装 · 前置要求」。

功能

| 来源 | 加载到 | 行为 |
| ~/.agents/mcp.json | ctx.plugin(dsh-mcp-client, …) | 对每个 enabled !== false 的 MCP 服务器创建子 fiber,自动注册其工具为 mcp____;支持 http(streamable-http)与 stdio 两种 transport |
| ~/.agents/commands/.md | commands.register(…) | 每个 .md 文件注册一个斜杠命令;frontmatter 的 description 用作命令描述,正文在触发时注入 agent |
| ~/.agents/AGENTS.md | ~/.dsh/AGENTS.md | 仅首次运行且目标不存在时创建软链接;之后源文件修改自动同步到 dsh 原生 dsh-agent-instructions |
| mcp.json / commands/ 变更 | generation fiber 重建 | 内置 fs.watch + 500ms 防抖:配置文件变化自动销毁并重建全部动态资源,无需重启 |

架构

src/
├── entry.js # apply() 主入口:generation fiber + fs.watch 自动重载 ├── mcp-loader.js # MCP 服务器加载(懒解析 dsh-mcp-client,http + stdio) ├── commands-loader.js # 斜杠命令注册(inject ['commands']) └── agents-md.js # AGENTS.md 一次性迁移

启动数据流

apply(ctx)
├── tryMigrateAgentsMd(ctx) # 同步:首次创建 AGENTS.md 软链接 ├── ctx.plugin(generation) # 动态资源的可整体销毁容器 │ ├── loadMcpServers(ctx) # 异步:读 mcp.json,逐个 ctx.plugin() │ └── ctx.inject(['commands']) # 扫描 commands/.md → register() └── fs.watch(mcp.json, commands/) # 变更 → 防抖 → dispose 旧 generation 重建

安装

前置要求

- dsh 0.1.7-rc.2(用 dsh --version 确认)。peer 依赖按 dsh 官方包惯例精确锁定版本,安装时 dsh 会在 pnpm 运行前按 peer 声明检查运行时版本:不匹配会直接失败并返回 incompatible-version,不下载任何内容。确需在其它 dsh 版本上使用时,按错误提示登记 version exemption(CLI:dsh plugin --profile allow-version …),风险自担。
- pnpm 可用(dsh 的插件安装经由 pnpm 完成)。

方式一:CLI 安装(推荐)

dsh plugin 是 dsh 自带的插件管理命令(不是 pnpm 的裸调用),与内置
Plugin Manager 共用同一套包操作和 profile 写锁,自动完成依赖安装、peer 版本检查、 dsh.profile.bundles 登记:

直接从 GitHub 安装,无需 clone:
dsh plugin --profile web add https://github.com/CrazyPigHead/dsh-plugin-agents-loader.git

或克隆后按本地路径安装(适合自行修改源码):
git clone https://github.com/CrazyPigHead/dsh-plugin-agents-loader.git
dsh plugin --profile web add /path/to/dsh-plugin-agents-loader

HMR 生效的 profile(如 web/tui)安装后无需重启即可加载;结果为 restart-required 的 profile 重启 dsh 后生效。

不要手改 profile 的 package.json / cordis.patch.yml,也不要在 profile 目录直接跑 pnpm——那会绕过写锁与版本检查,可能与运行中的 Host 产生写入竞争。

方式二:让 agent 安装

在启用了 plugin_manager 工具的会话(Creator 预设默认启用;其他预设需在 patch 中启用 tool-plugin-manager)里对 agent 说一句:

安装 https://github.com/CrazyPigHead/dsh-plugin-agents-loader

agent 会调用 plugin_manager 工具执行 install_bundle(本地路径同理,换成克隆目录即可)。看到 application: applied 即已挂载生效;restart-required 则重启
dsh 后生效。

方式三:Web 界面

dsh Web 界面侧边栏的「插件」页提供与上述完全相同的图形化安装 / 启停 / 卸载。

两种来源的行为差异

| 安装来源 | 形态 | 更新方式 |
| GitHub URL | 代码进入 profile 的 node_modules | 重新执行安装命令装新版本 |
| 本地路径 | link: 软链(可在 profile 的 package.json 确认),克隆目录需长期保留 | git pull 后重启 dsh(模块缓存原因,见「开发」) |

启停 / 卸载:Web「插件」页、agent(set_bundle / remove_bundle),卸载的 CLI 等价命令为 dsh plugin --profile remove dsh-plugin-agents-loader。

验证

dsh --profile --dump-config | grep -A1 agents-loader
应输出:
- id: agents-loader
name: dsh-plugin-agents-loader

附:安装到底做了什么(供排障,不作为操作指南)

一次成功安装只改 profile 的 package.json(dependencies 增加一行 dsh-plugin-agents-loader,本地路径安装时值为 link:)与 pnpm-lock.yaml,并把包名追加进 dsh.profile.bundles 数组;Host 随即加载包内 cordis.patch.yml 声明的插件行。bundle 名必须与插件 package.json 的 name 完全一致;profile 的 cordis.yml(组合产物)与用户级 cordis.patch.yml 都不用动。peer 依赖不会写进 profile(autoInstallPeers: false),运行时由插件的懒解析回退链从 dsh 自身依赖树解析(见「开发」)。若将来发布到 npm,安装命令的 spec 换成版本号(如 dsh-plugin-agents-loader@0.2.0)即可。

配置

mcp.json

放在 ~/.agents/mcp.json:

{
"mcpServers": {
"context-7": {
"type": "http",
"url": "https://mcp.context7.com/mcp",
"headers": { "Authorization": "Bearer {CONTEXT7_API_KEY}" },
"timeoutMs": 30000
},
"local-tool": {
"type": "stdio",
"command": "npx",
"args": ["-y", "some-mcp-server"],
"env": { "API_KEY": "{MY_API_KEY}" },
"cwd": "/opt/somewhere"
},
"legacy-server": {
"type": "http",
"url": "https://example.com/mcp",
"headers": {},
"enabled": false
}
}
}

- type:"http"(streamable-http)或 "stdio";省略时按字段推断——有 url 走 http,有 command 走 stdio。
- enabled:设为 false 跳过该项(默认启用)。
- serverName:自动从 key 生成(非法字符替换为 _,截断到 32 字符),需符合 /^[A-Za-z0-9_-]{1,32}$/。
- headers / env:值中的 {VAR} / ${VAR} 占位符用 Host 进程的 process.env 插值(日志不打印解析值);引用不存在的环境变量时该项丢弃并告警。
- timeoutMs:单次工具调用超时,默认 60000。

commands/.md

放在 ~/.agents/commands/:

description: 创建 conventional git commit(中文提交信息)

Goal

Create conventional git commits…

Workflow

1. git diff --staged 检查变更
2. git add 暂存
3. git commit -m "[scope]: "

- 文件名(去掉 .md)= 命令名,须匹配 /^[a-z][a-z0-9_-]$/
- description 取自 YAML frontmatter,未提供时 fallback 到文件名
- 正文 = frontmatter 之后的所有内容,触发时注入 agent 为一条 user 消息

开发

mcp-client 的模块解析(懒解析 + 回退链)

mcp-loader.js 依赖 @deepseek-ai/dsh-mcp-client,但该包只存在于 dsh 进程的依赖树中。pnpm link 使 Node.js 从插件源码真实路径解析静态 import,无法命中 dsh 的依赖。解析按以下顺序在运行时尝试(并且只在 mcp.json 确有服务器时才执行):

1. createRequire(process.argv[1]).resolve(...) — dsh bin 上下文(与 npx 缓存 hash 无关);
2. createRequire(import.meta.url).resolve(...) — 常规解析,install_bundle 正式安装(peer 依赖进 profile node_modules)时命中。

解析失败只记录 error 并放弃 MCP 加载,不影响斜杠命令——不会像旧版(模块顶层 await)那样让整个插件无法 import。

模块缓存与 HMR

pnpm link 的源码目录不在 HMR watch root 内,loader 以 URL 键控原生 import()。修改本插件源码后需重启 dsh 进程让 Node 加载新模块代次;改 ~/.agents/ 下的 mcp.json / commands 则由插件内置的 fs.watch 自动热重载。

命令名约束
- dsh 命令名:/^[a-z][a-z0-9_-]$/
- MCP serverName:/^[A-Za-z0-9_-]{1,32}$/,同一 scope 内唯一

调试

验证 profile 组合结果
dsh --profile web --dump-config | grep -A2 agents-loader

模块加载冒烟测试
node --check src/entry.js

运行时验证

1. 在 dsh GUI 中键入 / 查看命令列表,应看到 ~/.agents/commands/.md 中的命令
2. 执行 /git-commit 等命令,agent 应收到对应的 workflow 指令
3. MCP 工具以 mcp____ 前缀出现在工具列表中
4. 修改 ~/.agents/mcp.json 或增删 ~/.agents/commands/.md,Host 日志应出现 reload scheduled,随后资源自动重载

License

MIT © CrazyPigHead
预览分享卡片长什么样 ↓CrazyPigHead/dsh-plugin-agents-loader
分享 · DeepSeek Harness Hub
CrazyPigHead/dsh-plugin-agents-loader

自动加载 MCP 服务器与斜杠命令并热重载

回到顶部