plugin-builder
Build DeepSeek Harness (DSH) plugins end to end: ask-first requirements, dsh-xxx-xxx naming, UI layout selection, implementation, tests and privacy audit - delivered as a complete project, never auto-installed.
- Stars
- 0
- Language
- JavaScript
- Created
- Oct 23, 2026
- Updated
- Oct 23, 2026
Introduction
plugin-builder
一个用于 DeepSeek Harness(DSH)插件开发的全流程 Skill:把一个"我想做个插件"的想法,变成结构完整、经过测试与安全审计、可直接交付的插件项目。
状态:39 项脚本测试 + 58 项自检全部通过,Skill 已在真实 DSH 会话中加载使用。 尚未用它完整走完一个插件从需求到交付的全流程,因此端到端效果未经实机验证(见「已知限制」)。
它不会替你安装、启用、上传或发布任何东西。默认交付即停,环境修改必须单独授权。
这个 Skill 解决什么
直接让模型"做个 DSH 插件",常见的失败是:还没问清需求就开始写代码、自己替用户起名、凭印象编造 slot 名和配置字段、交付时说"已测试通过"但其实没跑、审计只在脑子里过一遍、最后顺手 install_bundle 把用户环境改了。
plugin-builder 用 11 个阶段和 4 道确认门把这些堵住,并且把"能自动化的检查"做成可执行的脚本,让测试与审计产出真实结果而不是口头结论。
核心原则:
先问清、再设计;先实现、再测试;先审计、再交付;默认不安装。
工作流程
接收需求
↓
阶段 0 事实核对(真实 API / 环境 / 已有项目)
阶段 1 需求提取与缺口分析 ── 缺 P0 信息 → 提问
阶段 2 插件命名 ── 无名称/不合规 → 选项确认 ★必须问
阶段 3 交互布局与配置位置 ── 未指定 → 选项确认 ★必须问
阶段 4 需求总结 ── ★确认门
阶段 5 架构设计 ── ★确认门
阶段 6 项目结构与代码实现
阶段 7 测试与构建
阶段 8 代码审计 + 隐私检查 + 脱敏
阶段 9 README 与文档
阶段 10 GitHub 发布准备(只准备,不执行)
阶段 11 交付报告 → 停止
用户已经给出的信息不会重复询问;关键决策(名称、布局、需求、架构)必须经用户确认。
目录结构
plugin-builder/
├── SKILL.md 核心流程、边界规则、交付格式
├── references/
│ ├── dsh-plugin-api.md 已核实的 DSH 插件 API 契约 + 待验证清单
│ ├── requirements.md P0/P1/P2 提问策略与选项写法
│ ├── ui-design.md 六种布局选型 + 真实 slot 候选表
│ ├── security-audit.md 审计清单、处置方式、脱敏手法
│ ├── github-release.md 发布准备与安装边界
│ └── scenarios.md 7 个行为验收场景
├── templates/
│ ├── bundle-skeleton/ 可直接复制的空插件骨架(已通过自检)
│ ├── README-template.md 插件项目 README 模板
│ ├── audit-report-template.md 审计报告模板
│ └── project-structure.md 项目结构选型
└── scripts/
├── check-project.mjs 结构与配置自检
├── audit-scan.mjs 凭据/隐私/危险写法扫描
├── check-project.test.mjs 20 项测试
├── audit-scan.test.mjs 19 项测试
└── self-check.mjs 验证 Skill 自身完整性
安装
Skill 就是磁盘上的一个目录。把它放进 DSH 会扫描的任一位置即可:
| 作用域 | 路径 |
|---|---|
| 当前项目 | <项目根>/.dsh/skills/plugin-builder/ |
| 当前项目(agents 约定) | <项目根>/.agents/skills/plugin-builder/ |
| 全局 | ~/.dsh/skills/plugin-builder/ |
| 全局(agents 约定) | ~/.agents/skills/plugin-builder/ |
说明:
- 项目根取最近的、含
.git的祖先目录;没有则用当前工作目录。 - 项目级(
.dsh/skills)优先级高于全局(~/.dsh/skills)。 - 只扫描一层:必须是
<root>/plugin-builder/SKILL.md,不能再嵌套一层。 - Skill 目录被监听,新增/重命名/删除会在下一个会话步骤生效,通常不用重启。
无需安装任何依赖,脚本只用 Node 内置模块。
使用
自动触发:直接说"帮我做一个 DSH 插件""我想给 DSH 加个 XX 功能",模型会读到这个 Skill 并按流程走。
显式触发:plugin-builder 也是可以直接调用的 Skill。
单独使用脚本(作用于任何 DSH 插件项目):
# 结构 / 配置 / 入口 / id 一致性 / JSON / locale / 图标 / 语法自检
node scripts/check-project.mjs "<插件项目目录>"
# 凭据、隐私、危险写法 + bundle 结构扫描
node scripts/audit-scan.mjs "<插件项目目录>"
node scripts/audit-scan.mjs "<插件项目目录>" --json # 结构化输出
node scripts/audit-scan.mjs "<插件项目目录>" --strict # 中危也算失败
# 验证本 Skill 自身(文件完整、frontmatter、引用无死链、模板可过检)
node scripts/self-check.mjs
退出码约定:0 通过 / 无高危项,1 有失败项 / 有高危项,2 参数或路径错误。
扫描器是筛查不是保证:命中需要人工判断(很多是刻意的正常用法),未命中也不代表安全。
<YOUR_API_KEY>、your-token-here、process.env.X 这类占位符会被降级为提示,不误报高危。
设计要点
- API 有出处:所有 DSH 契约(bundle 声明、Host/Client 出口、slot、主题 token、安装命令)都来自
cordis_inspect_query实测、官方包文档或本机已装插件。查不到的一律标「待验证」,集中列在references/dsh-plugin-api.md§9。 - 不伪造结果:测试结论强制四分(实际运行通过 / 运行失败 / 仅静态检查 / 尚未验证)。ESM 语法在无法校验的环境里报 warn,而不是假装通过。
- 审计有产物:必须生成可见的审计报告,包含范围、问题、已修复、未解决、是否发现真实凭据、能否安全交付。
- 交付即停:安装、启用、上传、commit、Release 全部分离出去,需要用户单独授权;授权后也要先说明"会改什么"。
- 隐私优先:不擅自增加遥测、上报或联网能力;发现凭据先修复再交付,并提示轮换。
测试与自检
node scripts/audit-scan.test.mjs # 19 项:规则命中、占位符降级、退出码、脱敏、结构检查
node scripts/check-project.test.mjs # 20 项:命名、patch、入口导出、Client id、locale、图标、语法
node scripts/self-check.mjs # 58 项:本 Skill 完整性
测试直接执行 node <file>,不需要 node --test——某些受限沙箱里测试 runner 会因为 spawn EPERM 失败,而这些测试在设计上就不启动子进程。
已知限制
- 端到端未验证:各阶段、脚本、模板都单独验证过,但没有用它完整交付过一个真实插件,流程衔接仍需实测。
- ESM 语法校验依赖运行环境:
check-project.mjs优先用vm.SourceTextModule;该模块在受限环境(含本机沙箱)不可用时,含import/export的文件会报「无法校验」,需要你自己跑node --check。这是刻意设计——宁可报未验证,也不伪造通过。 - UI 效果无法自动验证:slot 是否真的渲染、主题观感、深色模式对比度,必须真机确认。
- slot 名与主题 token 会随 DSH 升级变化:
references/ui-design.md与dsh-plugin-api.md里的是0.2.1-rc.2快照,Skill 要求每次开工重新 inspection 复核。 - 命名唯一性不做保证:没有可靠的 npm/GitHub 查重能力时,不会声称名称唯一。
- 扫描器有已知边界:基于逐行正则,无法识别跨行拼接、运行时构造、从远端拉取的配置,也无法证明"没有泄露"。
许可证
MIT,见 LICENSE。