插件类型
MoodPet 有三种插件类型。在 manifest.json 里用 type 字段声明,决定了插件包的内部结构、容器怎么加载它、它能访问什么。
Friend — 情绪伙伴
Section titled “Friend — 情绪伙伴”Friend 是伙伴的“灵魂”。它定义伙伴叫什么名字、什么性格、怎么感受情绪、怎么用 emoji 和颜色表达情绪、怎么和你说话。
Friend 不包含可执行代码。它是一组纯文本和 JSON 文件:
system_prompt.txt— 喂给 LLM 的系统提示词,定义伙伴性格和响应规则emoji_mapping.json— 关键词到情绪响应的映射(离线模式用)identity.json— 展示元数据(名字、emoji、tagline)- 可选的
ui_style.json、voice.json、rules/等社区扩展
容器同一时刻只有一个 Friend 处于“活跃”状态。切换 Friend 就是换一个伙伴——名字、性格、说话风格全变。
典型场景:写一个叫“小柴”的柴犬性格伙伴、写一个叫“喵酱”的傲娇猫伙伴、写一个动漫角色风格的伙伴。
Application — 能力扩展
Section titled “Application — 能力扩展”Application 是容器的能力扩展插件。它可以:
- 提供新能力:比如 TTS(把伙伴的文字回复读出来)、语音识别、外部 API 集成
- 覆盖容器服务:用
overrides字段声明接管tts/memory/agent/renderer等内置服务 - 覆盖 UI 页面:用
overrides.ui声明接管home_page/settings_page等
Application 可以包含可执行代码。language 字段声明实现语言(dart / python / binary),entry 字段指向入口文件。容器会按语言选择对应的运行时加载它。
Application 可以同时装多个,每个独立 enable/disable。它们通过 provides(triggers / actions / interfaces)声明自己暴露什么能力,其他插件或容器可以消费。
典型场景:ElevenLabs TTS 插件、本地语音识别插件、一个给伙伴加 ASCII 动画的渲染器插件。
Pack — 整合包
Section titled “Pack — 整合包”Pack 是一组 Friend + Application 的打包集合。它让用户一键装上一套搭配好的插件组合,不用一个个找。
Pack 的 manifest.json 里用 plugins.friend 和 plugins.application 列出包含哪些子插件,每个子插件是整合包 ZIP 内的一个目录。安装时容器把每个子插件目录复制到 plugins root,整合包目录本身也复制进去。
recommended 字段可以声明装完后默认激活哪个 Friend、启用哪些 Application。
典型场景:“动漫合集”打包三个动漫风格 Friend + 一个动漫风 TTS、“极简套装”打包一个简洁 Friend + 一个本地语音识别。
| Friend | Application | Pack | |
|---|---|---|---|
| 含可执行代码 | 否 | 是 | 否(子插件各自含) |
| 同时激活数量 | 1 个 | 多个 | — |
| 文件扩展名 | .moodfriend |
.moodapp |
.moodpack |
| 市场目录 | friend/ |
application/ |
packs/ |
| 能覆盖容器服务 | 否 | 是 | 否 |
| 能覆盖 UI | 否 | 是 | 否 |
| 包内必须文件 | manifest.json + system_prompt.txt |
manifest.json + entry 入口 |
manifest.json + 子插件目录 |
每种插件都在 manifest.json 的 platforms 字段声明支持哪些平台:
"platforms": { "supported": ["android", "wearos", "windows", "linux", "macos"], "optimized": ["android"], "fallback": { "windows": "无震动反馈" }}容器在当前平台不在 supported 列表里时会拒绝 enable 该插件(但仍然加载和展示它,让用户看见)。optimized 是信息性字段,fallback 是给用户看的平台降级说明。
合法的平台 id:android / wearos / windows / linux / macos。
插件 id 用 reverse-DNS 风格:moodpet.friend.default_smiley。
- 建议前缀:
moodpet.friend.*/moodpet.app.*/moodpet.pack.* - 社区插件用自己的命名空间前缀,比如
com.example.friend.xxx - id 里的
/在落盘时会被替换成.(目录名安全) - 同一市场目录下 id 必须唯一
system 标记
Section titled “system 标记”manifest.json 里 "system": true 表示系统插件——随容器发布、不可卸载。默认 Friend(小黄脸)就是系统插件。社区插件不要设这个字段(默认 false)。