CoWork 文档
Skills 与插件

开发插件

清单参考、贡献点一览、打包与发布流程。

面向想把插件发到 CoWork 市场的作者。工具链:create-nextcowork-plugin 生成骨架,@aidotnet/plugin-api 提供类型,nextcowork-plugin 负责打包与发布。

快速开始

npm create nextcowork-plugin@latest

问三样(publisher / name / 显示名),生成一份已经能上架的骨架:清单字段齐全、两种语言的 l10n 都在、贡献点的 title 全是 %key%。骨架不会替你选能力——需要时再往 permissions 里加。

代码里通过类型包写宿主 API,nextcowork 打包时标 external,运行期由宿主注入:

src/extension.ts
import * as ncw from "nextcowork";

export function activate(context: ncw.ExtensionContext): void {
  context.subscriptions.push(
    ncw.commands.registerCommand("acme.hello", () =>
      ncw.window.showMessage("info", "acme.demo.hello"),
    ),
  );
}

宿主侧的运行时 API 按命名空间分:envappearancepermissionsworkspaceprocessnetstoragesecretswindowtabsconfigurationdiagnosticsplugins。类型文件里没有出现的 API,运行期会被白名单挡掉——所以编译通过就不会遇到「这个方法不存在」。

清单(package.json)

字段规则
name / publisher各匹配 ^[a-z0-9][a-z0-9-]{0,63}$;插件 id 是 publisher.name,全局唯一
versionsemver
kindextension(缺省,有代码)或 webapp(零代码,只有 contributes.webApps,写了 main 会被整份拒绝)
engines.nextcowork插件 API 版本 range(^x.y.z 等),比的是 API 版本不是应用版本
main单文件 ESM 的相对路径;webapp 为空串
activationEventsonCommand: / onView: / onCustomEditor: / onTool: / onWorkspaceContains: / onWebApp: / onSlashCommand:,及 onStartup(市场审核默认驳回)
permissions / optionalPermissions能力数组,见插件的权限模型
hostPermissions出网域名白名单
allowedCommands可执行命令白名单(裸命令名,不带路径后缀)
dependencies依赖的其它插件(pluginId → range),是 ncw.plugins.connect 的准入门,也决定激活顺序
l10n本地化目录;清单里的可见文案写 %key%,不写死文案

贡献点(contributes)

说明
commands命令(command + %title%),其他贡献点最终都落到命令
menus菜单挂载点:tabBar/newtabBar/contextexplorer/contextexplorer/newsidebar/navchat/composercommandPalette
slashCommands输入框 /xxx;每条背后必须是一条已声明的命令
toolsAgent 工具(registerTool + inputSchema;可标 readOnly / destructive / needsNetwork / interactive
cardViews工具返回 frame 卡片时的 HTML,按 viewType 索引
customEditorsfilenamePattern 接管文件类型的编辑器
views侧栏常驻视图 / 内层 Tab(editor / sidebar / panel
webApps写死地址的网页应用(仅 https,装载时过 URL 门)
skills包内自带 Skill,见插件 Skill
agents / modes / themes子代理、模式、主题(与 skills 同形)
keybindings快捷键(command + key + when
configuration配置项(boolean / string / number / enum)

清单的合并规则有安全约束:插件菜单项永远排在内置项之后;单插件单菜单最多直出 3 项,其余折叠进二级菜单;图标从白名单里选;when 条件用受限表达式求值,读不懂一律不显示。

每类贡献点上限 100 项;清单认得但这一版不实现的贡献点进 unsupported 诊断,不会静默消失。

打包与发布

npx nextcowork-plugin login       # 浏览器授权登录(与桌面端同一 OAuth + PKCE 流程)
npx nextcowork-plugin package .   # 校验清单并打出 ZIP
npx nextcowork-plugin publish .   # 打包 → 上传 → 提交审核
  • 本地校验与服务端的包校验逐条一致:路径穿越、单顶层目录、清单形状、能力白名单、skills 布局逐条重查,当场炸而不是上传后才被拒。
  • 包限制:ZIP ≤ 20 MB,展开 ≤ 50 MB,≤ 2000 个条目,目录深度 ≤ 12,路径 ≤ 512 字符,图标 ≤ 256 KB。
  • 发布的是 publisher.name@version--changelog 随版本提交更新说明。
  • CLI 登录会作为一条桌面端会话出现在网站「账户 › 会话」里,可以像踢掉一台设备一样踢掉它。

上架审核

  • 审核看到的是清单里那两个能力数组——请只声明你真实用到的能力。
  • onStartup 激活默认驳回(每个常驻插件是一个 renderer 进程);优先用具体事件激活。
  • 包自带 Skill 会在市场详情页列出名字,description 请认真写。

本页内容