Core 与扩展

July 27, 2026 · View on GitHub

本页帮助判断新能力应放进 core、官方插件还是社区插件。不以「写起来方便」决定归属。

若目标是站点私有或社区插件,可先跳过判定表,直接从 写第一个插件 开始;只有要改主仓边界或发官方包时,再按本页执行。

四层(含 bundled play)

MUST 放入MUST NOT
Core全部署形态依赖的运行时;cmd_perm / help / 热载 / 分片;产品底盘(语料、ingress、多牛协同等)独立玩法、可按需安装的媒体能力、强垂直外部集成
Bundled play主仓 packages/ 默认随发行版加载的轻量玩法(BUNDLED_PLAY_PLUGIN_NAMES:drink、greeting、roulette、take_name);identity/catalog kind 为 bundled不是 core平台共性(应回 core);与 official extra 混称
Official Extension官方长期维护、可独立 PyPI 安装的玩法或能力包(EXTRA_PLUGIN_PACKAGES平台共性(应回 core)
Community Extension第三方、站点定制、实验功能伪装成平台默认能力

Core 准入(满足任一条 → 优先 core)

  1. 无此能力,平台无法正常启动或治理
  2. 所有站点默认应具备
  3. 被大量插件复用,且不适合作为可选依赖
  4. 直接定义产品底盘语义

示例:插件加载与治理、WebUI 后端、命令权限与 cooldown、分片 / ingress、核心 help、pb_core / pb_webui / pb_stats / llm_chat 类能力(见 CORE_PLUGIN_NAMES)。

Bundled play 示例:drinkgreetingroulettetake_name——仍默认加载,但不计入 core 矩阵。

Official Extension 准入

满足多数条目 → 官方插件,不进 core:

  • 独立玩法或外部服务集成
  • 可按需安装 / 升级
  • 需要独立 semver、README、PyPI

示例包:duelwho_is_spymaadrawdreamai_media 及协议相关扩展包。

Community 准入

  • 维护者不在主仓核心团队
  • 与特定站点 / 群体 / 外部系统强耦合
  • 尚未决定是否进入官方生态

判定表

问题Yes →No →
没有它平台能否成立?Core继续
是否所有站点默认拥有?CoreExtension
是否显著增加 core 发布 / 测试负担?Extension继续
是否适合独立安装与文档?Extension再评估

禁止回退

回退后果
大一统 core破坏分层边界,发布与测试不可控
插件自造权限 / 冷却 / 配置页 / 热载 / 帮助治理与 WebUI 分叉

平台共性统一走 core 提供的入口;玩法走扩展仓。

与治理的关系

结构约束分发
CoreGolden Plugin + 强元数据随主仓
Bundled play与 core 同目录约定;catalog kind bundled随主仓 packages/
Official元数据 + activation_policy + PyPI独立仓
Community公开 pallas.api.* + README / 索引Git / 本地 / 商店

顺序:归属层 → 目录与发布路径 → 代码。

后续阅读