Skip to content

发布上架

写完插件后,要让它出现在所有客户端的市场里。流程很简单:打包 → 写 .meta.json → 做预览图 → Fork 仓库 → 提 PR → CI 过 → 合并即上架。

把插件打包成 .moodfriend / .moodapp / .moodpack(本质是 ZIP)。

Terminal window
# 所有文件在一个目录里
ls my-friend/
# manifest.json system_prompt.txt emoji_mapping.json identity.json icon.png
cd my-friend
zip -r ../com.example.friend.xiaochai.moodfriend .

ZIP 根目录直接放文件,不要 zip -r output.zip my-friend/(那样会多一层目录)。

Terminal window
cd my-app
zip -r ../com.example.app.elevenlabs_tts.moodapp .
Terminal window
cd my-pack
zip -r ../com.example.pack.anime_collection.moodpack .

验证 ZIP 结构:

Terminal window
unzip -l com.example.friend.xiaochai.moodfriend
# manifest.json / system_prompt.txt 等应在根目录(Pack 的子插件在对应子目录)

.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 会检查所有这些。

512×512 的 PNG,文件名主干和插件 id 一致。这是市场卡片和详情页顶部展示的图片。

可以用任何工具做——Figma、Photoshop、甚至手画后拍照裁剪。关键是:

  • 方形(512×512),容器会做 BoxFit.cover 裁剪
  • 能代表插件的内容:Friend 用伙伴的头像/emoji 风格图、Application 用功能图标
  • 不要放文字(太小看不清,多语言不友好)
Terminal window
# 检查是合法 PNG
file com.example.friend.xiaochai.png
# 应输出: PNG image data, 512 x 512, ...

克隆市场仓库,把三个文件放进去,跑验证脚本:

Terminal window
git clone https://github.com/Tangmjiu/moodpet-plugin-market
cd 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.

如果有错,脚本会告诉你是哪个文件哪一条没过。修完再跑,直到全绿。

  1. Fork Tangmjiu/moodpet-plugin-market 仓库(GitHub 上点 Fork)

  2. Clone 你的 fork 到本地:

    Terminal window
    git clone https://github.com/<你的用户名>/moodpet-plugin-market
    cd moodpet-plugin-market
  3. 加文件到对应目录:

    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/
  4. 提交:

    Terminal window
    git add friend/com.example.friend.xiaochai.*
    git commit -m "Add xiaochai friend plugin"
    git push origin main
  5. 在 GitHub 上提 PR:从你的 fork 的 main 分支到 Tangmjiu/moodpet-plugin-market 的 main 分支。

  6. 等 CI:GitHub Actions 会自动跑 scripts/validate.py。绿了等人工 review,红了按日志修。

  7. 合并即上架:PR 合并后,所有客户端下拉刷新就能看到你的插件。不需要任何额外操作。

已经上架的插件要发新版本:

  1. 改插件内容,manifest.json 的 version 升一位
  2. 重新打包 ZIP
  3. 更新 .meta.json 的 version(必须和 manifest 一致)
  4. 提 PR 替换旧文件

客户端的 UpdateChecker 会 semver 比较已安装版本和市场版本,发现新版后在市场首页标红点提示用户更新。

从市场仓库删掉对应的那三个文件,提 PR。合并后客户端刷新就看不到这个插件了——但已经安装的用户不受影响(插件在他们本地磁盘上,市场下架不等于卸载)。

最常见错误。zip -r output.zip my-friend/ 会让 ZIP 里多一层 my-friend/。正确做法是 cd my-friend && zip -r ../output.zip .。

验证脚本报 zip must contain manifest.json at its root 就是这个问题。

文件名 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 (...)。两个都要改。

存成了 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。