插件应用提交与发布
上线奖励
活动是否启用以开放平台“上线奖励”页为准。每个应用首次实际上线,退还此前实际扣除且未退的审核费,再额外奖励1000积分一次。免费审核也有首次奖励;后续版本上线仍退审核费,不再重复奖励。
例如两次付费审核共扣2000积分,最终上线后到账“退款2000+奖励1000”。审核失败不会立即退款,仅审核通过也不会发钱;重复发布、重新上架和多个Client不会重复领奖。
退款回原付款团队和原赠送/购买分项,奖励进入应用团队的赠送积分。历史已上线应用由管理员核对后补发;活动前已提交的应用也纳入。目前不设结束日期,结束时会公告;结束前已提交的版本,之后上线仍可兑现。到账详情可在“审核记录”中查询。
插件应用和网页 OAuth App 都从 Team 工作区注册。每个 Product 必须绑定一个 Project。插件渠道只创建 一个稳定 OAuth Client ID;插件不一定需要 OAuth 业务权限,但必须有这个鉴权身份,供审核、安装和统计关联。
提交流程
- 从左侧「工作区」进入「开放平台」,创建 Product,选择 Project 和「插件」。
- 正常开发和自测,没有开发阶段次数限制,也不要求按固定阶段提交。
- 把图标、截图和
.reaiapp上传到绑定 Project 的文件存储;开放平台会复用 Project 文件,不复制物理字节。 - 按「上架信息 → 图片与插件包 → 确认提交」完成审核申请。每个 Team 每月 2 次免费审核,之后每次 1000 积分;每个 Team 最多 10 个未删除 Product,Client 不计数。
- 审核批准后,由 Team Owner/Admin 点击发布。批准不会自动上架。
- V1 在线时仍可独立开发、测试和审核 V2;只有显式发布 V2 才会原子替换 V1。
网页 App 不需要上传 .reaiapp,可直接提交;网页 App 不会进入 Driver 插件 Catalog。
包格式
.reaiapp 是 ZIP,根目录必须有一个 app.manifest.json。Manifest 必须满足 Driver V2 Host 1.1 完整合同;旧的五字段占位 Manifest 不再接受:
{
"manifestVersion": "1.1",
"appId": "com.example.demo",
"publisherId": "你的 Team UUID",
"oauthAppId": "你的 OAuth Client ID",
"version": "1.0.0",
"name": "示例插件",
"targets": [
{ "platform": "macos", "architectures": ["aarch64", "x86_64"] },
{ "platform": "windows", "architectures": ["aarch64", "x86_64"] }
],
"hostApi": { "range": ">=1.2.0 <2.0.0" },
"requires": { "hostCapabilities": ["surface.main@1"] },
"runtime": {
"components": [{
"id": "ui", "kind": "web-surface", "protocol": "web-surface@1",
"required": true, "headless": false, "activation": "on-demand",
"entry": "dist/app.js",
"lifecycle": { "activate": "default.activate", "deactivate": "default.deactivate" }
}]
},
"contributes": {
"surfaces": [{ "id": "main", "componentId": "ui", "location": "app.main" }]
}
}审核附件当前只支持 target=universal 的一个包,最大 64 MiB;Manifest 的 targets 必须按上例声明 Host 平台和架构。appId 是永久不变的 packageAppId,第一次有效包 上传时锁定;创建 Product 时不手填。oauthAppId 是稳定鉴权身份,version 是本次 semver 版本身份。 publisherId、oauthAppId 和版本必须与本次提交一致。官方插件的 publisherId 固定为 reai, 官方插件同样需要审核。
声明 i18n 的插件包需提供 zh、en 语言文件,普通插件同时声明 metadata.i18n@1。 语言文件位于 assets/locales/<语言>.json,必须使用非空字符串叶子;各语言的键和插值变量一致。 元数据引用必须完整、唯一且指向存在的内容,静态元数据不能插值。最多 16 种语言,每文件 256 KiB、 最多 16 层;静态元数据最多 1024 UTF-8 字节,标题栏文字另有 48/12/24 字符限制。 后台也校验额外语言文件,并拒绝重复 JSON 键、HTML 和不支持的消息语法。
这类包全部资源展开后最多 64 MiB,单资源最多 32 MiB;超限会在解压前拒绝。 build-manifest.json 必须与包身份及全部资源的路径、大小、SHA-256 完全一致。 出现“插件包文件与构建清单不一致”时,请重新打包后提交;不要手工删除 i18n 绕过检查。 历史无 i18n 包继续兼容。语言检查通过仍需独立完成身份核对和受控能力审核。
Manifest schema 校验失败时会显示出错路径、规则关键字和 schema 基线,但不会回显原始字段值; 缺少 oauthAppId 会单独提示。建议提交前先使用与目标 Driver 同版本的 CLI 执行 validate/build/ contract-test/pack,并确认 Host 标准 prepare 通过。
图标必须有 1 张,插件截图必须有 1..9 张,只支持 PNG、JPEG、WebP,单张最大 10 MiB。所有文件都从 绑定 Project 选择,不能填写外部图片 URL。
文件和版本
提交后,平台锁定本次 OAuth 配置、包、图标和截图。项目文件与审核归档共用同一份物理文件, 平台通过独立指针保护审核版本;删除项目里的文件不会破坏已冻结版本。
批准版本永久保留,不能替换字节。拒绝、撤回或取消的文件保留 180 天后才可能清理,审核记录和 SHA-256 摘要永久保留。下架只停止 Catalog 和下载,不删除历史版本。
下架不抹掉审核结果,可直接重新上架。新版本发布时旧版本进入 superseded 历史状态;历史已审核 版本也可重新发布,切换过程不会先让当前版本下线。
开发体验者
创建者固定可测试且不占名额;还可添加最多 5 个体验者 UID。加入名单并不自动授权,体验者仍须在 签名 Driver 中确认 consent。开发授权同时检查当前 Team membership、绑定 Project execute 权限和 每个 Scope 的实时资格。移除后 authorization、exchange、refresh 和云能力运行时调用立即失效。