Skip to content

插件类型

MoodPet 有三种插件类型。在 manifest.json 里用 type 字段声明,决定了插件包的内部结构、容器怎么加载它、它能访问什么。

Friend 是伙伴的“灵魂”。它定义伙伴叫什么名字、什么性格、怎么感受情绪、怎么用 emoji 和颜色表达情绪、怎么和你说话。

Friend 不包含可执行代码。它是一组纯文本和 JSON 文件:

  • system_prompt.txt — 喂给 LLM 的系统提示词,定义伙伴性格和响应规则
  • emoji_mapping.json — 关键词到情绪响应的映射(离线模式用)
  • identity.json — 展示元数据(名字、emoji、tagline)
  • 可选的 ui_style.json、voice.json、rules/ 等社区扩展

容器同一时刻只有一个 Friend 处于“活跃”状态。切换 Friend 就是换一个伙伴——名字、性格、说话风格全变。

典型场景:写一个叫“小柴”的柴犬性格伙伴、写一个叫“喵酱”的傲娇猫伙伴、写一个动漫角色风格的伙伴。

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 是一组 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 必须唯一

manifest.json 里 "system": true 表示系统插件——随容器发布、不可卸载。默认 Friend(小黄脸)就是系统插件。社区插件不要设这个字段(默认 false)。