用途:仅在 github/awesome-copilot 仓库内使用,用于脚手架式创建或迁移 canvas 扩展。canvas 扩展是可复用的源码组件,本身不在 extensions/ 下放置 plugin.json。
使用前需确认的必填信息:扩展 ID(小写 kebab-case,需与源码目录和插件名一致);显示元数据(description、version 默认 1.0.0、作者名与可选 URL、keywords 小写连字符且最多 10 个、repository 与 license 默认仓库 URL 和 MIT);canvas 入口(确认是否已有 extension.mjs,没有则仅在信息充分时创建最小入口,否则留显式 TODO);预览图(需已有 assets/preview.png 或请用户提供,不得伪造二进制图片或用误导性占位图);插件注册方式(独立插件创建 plugins/<extension-id>,归属已有插件则把 ./extensions/<extension-id> 加入该插件的 extensions.com.github.awesome-copilot.extensions,多插件可重复登记)。
新建插件的目录结构:extensions/<extension-id>/ 下放 extension.mjs 与 assets/preview.png,plugins/<extension-id>/ 下放 plugin.json 与 README.md。plugin.json 采用 Agent Plugins 顶层字段,并含 extensions.com.github.copilot.logo 与 extensions.com.github.awesome-copilot.extensions(数组、仓库相对路径按字母排序且唯一);MCP 服务器写在插件根目录 mcp.json,不写进 plugin.json;不得使用 x-awesome-copilot 等仓库专属顶层字段,也不要在 extensions 下直接放 agents、commands、hooks、skills。不要复制扩展源码到父插件。
工作流:先检查是否与既有目录冲突、查看目标父插件、确认预览图与入口是否已存在;只补问缺失项;创建目录与文件;更新所有应发布该扩展的父插件映射并保持路径有序;确保不存在 extensions/<extension-id>/.github/plugin/plugin.json;然后运行:npm run plugin:validate、npm run build、npm run website:data;最后报告创建路径、发布插件和缺失资源或 TODO。
迁移已有扩展:把旧 manifest 移到 plugins/<extension-id>/plugin.json,改为基于命名空间的 extensions.com.github.copilot.logo 形式,从 extensions/<extension-id> 删除旧 manifest,在父插件中登记,并运行上述校验与构建命令。