发布上架
写完插件后,要让它出现在所有客户端的市场里。流程很简单:打包 → 写 .meta.json → 做预览图 → Fork 仓库 → 提 PR → CI 过 → 合并即上架。
第一步:打包
Section titled “第一步:打包”把插件打包成 .moodfriend / .moodapp / .moodpack(本质是 ZIP)。
Friend
Section titled “Friend”# 所有文件在一个目录里ls my-friend/# manifest.json system_prompt.txt emoji_mapping.json identity.json icon.png
cd my-friendzip -r ../com.example.friend.xiaochai.moodfriend .ZIP 根目录直接放文件,不要 zip -r output.zip my-friend/(那样会多一层目录)。
Application
Section titled “Application”cd my-appzip -r ../com.example.app.elevenlabs_tts.moodapp .cd my-packzip -r ../com.example.pack.anime_collection.moodpack .验证 ZIP 结构:
unzip -l com.example.friend.xiaochai.moodfriend# manifest.json / system_prompt.txt 等应在根目录(Pack 的子插件在对应子目录)第二步:写 .meta.json
Section titled “第二步:写 .meta.json”.meta.json 是市场展示用的元数据。文件名主干和插件 id 一致,放在对应类型目录下。
{ "id": "com.example.friend.xiaochai", "type": "friend", "name": "小柴", "description": "一只热情的柴犬伙伴,永远元气满满", "version": "1.0.0", "author": "你的名字", "platforms": ["android", "wearos", "windows", "linux", "macos"], "fileSize": "8KB", "downloads": 0, "rating": 5.0}| 字段 | 说明 |
|---|---|
id |
必须和插件包内 manifest.json 的 id 一致 |
type |
"friend" / "application" / "pack",必须和 manifest 一致 |
name |
展示名称 |
description |
一句话描述 |
version |
必须和 manifest 的 version 一致 |
author |
作者 |
platforms |
支持平台数组,取值 android/wearos/windows/linux/macos |
| 字段 | 说明 |
|---|---|
icon |
包内图标路径(和 manifest 的 icon 一致) |
fileSize |
展示用大小,如 "8KB" |
downloads |
展示用下载量(虚荣指标) |
rating |
展示用评分,0–5 |
.meta.json的id必须和文件名主干一致(com.example.friend.xiaochai.meta.json→id必须是com.example.friend.xiaochai).meta.json的id/type必须和插件包内manifest.json的id/type一致- 同目录下不能有两个插件
id重复
CI 会检查所有这些。
第三步:做预览图
Section titled “第三步:做预览图”512×512 的 PNG,文件名主干和插件 id 一致。这是市场卡片和详情页顶部展示的图片。
可以用任何工具做——Figma、Photoshop、甚至手画后拍照裁剪。关键是:
- 方形(512×512),容器会做
BoxFit.cover裁剪 - 能代表插件的内容:Friend 用伙伴的头像/emoji 风格图、Application 用功能图标
- 不要放文字(太小看不清,多语言不友好)
# 检查是合法 PNGfile com.example.friend.xiaochai.png# 应输出: PNG image data, 512 x 512, ...第四步:本地验证
Section titled “第四步:本地验证”克隆市场仓库,把三个文件放进去,跑验证脚本:
git clone https://github.com/Tangmjiu/moodpet-plugin-marketcd moodpet-plugin-market
# 放文件(以 Friend 为例)cp /path/to/com.example.friend.xiaochai.moodfriend friend/cp /path/to/com.example.friend.xiaochai.meta.json friend/cp /path/to/com.example.friend.xiaochai.png friend/
# 跑验证python scripts/validate.py期望输出:
friend/: 1 plugin(s) OK application/: 0 plugin(s) OK packs/: 0 plugin(s) OK
Validated 1 plugin(s).✅ All plugins valid.如果有错,脚本会告诉你是哪个文件哪一条没过。修完再跑,直到全绿。
第五步:提 PR
Section titled “第五步:提 PR”-
Fork
Tangmjiu/moodpet-plugin-market仓库(GitHub 上点 Fork) -
Clone 你的 fork 到本地:
Terminal window git clone https://github.com/<你的用户名>/moodpet-plugin-marketcd moodpet-plugin-market -
加文件到对应目录:
Terminal window # Friend → friend/# Application → application/# Pack → packs/cp /path/to/com.example.friend.xiaochai.moodfriend friend/cp /path/to/com.example.friend.xiaochai.meta.json friend/cp /path/to/com.example.friend.xiaochai.png friend/ -
提交:
Terminal window git add friend/com.example.friend.xiaochai.*git commit -m "Add xiaochai friend plugin"git push origin main -
在 GitHub 上提 PR:从你的 fork 的 main 分支到
Tangmjiu/moodpet-plugin-market的 main 分支。 -
等 CI:GitHub Actions 会自动跑
scripts/validate.py。绿了等人工 review,红了按日志修。 -
合并即上架:PR 合并后,所有客户端下拉刷新就能看到你的插件。不需要任何额外操作。
已经上架的插件要发新版本:
- 改插件内容,
manifest.json的version升一位 - 重新打包 ZIP
- 更新
.meta.json的version(必须和 manifest 一致) - 提 PR 替换旧文件
客户端的 UpdateChecker 会 semver 比较已安装版本和市场版本,发现新版后在市场首页标红点提示用户更新。
从市场仓库删掉对应的那三个文件,提 PR。合并后客户端刷新就看不到这个插件了——但已经安装的用户不受影响(插件在他们本地磁盘上,市场下架不等于卸载)。
ZIP 里多了一层目录
Section titled “ZIP 里多了一层目录”最常见错误。zip -r output.zip my-friend/ 会让 ZIP 里多一层 my-friend/。正确做法是 cd my-friend && zip -r ../output.zip .。
验证脚本报 zip must contain manifest.json at its root 就是这个问题。
meta.json 的 id 和文件名不一致
Section titled “meta.json 的 id 和文件名不一致”文件名 com.example.friend.xiaochai.meta.json,里面的 id 必须是 com.example.friend.xiaochai。手抖写错会报 meta.id must match filename stem。
meta.json 和 manifest 的 version 不一致
Section titled “meta.json 和 manifest 的 version 不一致”升级版本时只改了 manifest.json 忘了改 .meta.json。验证脚本报 manifest.version (...) != meta.version (...)。两个都要改。
预览图不是 PNG
Section titled “预览图不是 PNG”存成了 JPG 或 WebP。验证脚本报 preview file is not a valid PNG。用 PNG。
Application 的 entry 文件触发安全扫描
Section titled “Application 的 entry 文件触发安全扫描”验证脚本会扫描 entry 文件里的可疑模式。如果你用了 os.system、subprocess(shell=True)、curl|sh 之类,会报 suspicious pattern。改用安全的 API。