Skip to content

清单与权限 ​

plugin.toml 描述插件的身份、兼容范围、需要的宿主能力和配置表单。宿主在安装、应用和启动时读取它,未知字段和格式错误都会让清单无效。

必填字段 ​

字段内容
name插件名,等于安装后的目录名;仓库根目录或 ZIP 根目录不要求使用这个名字
version插件版本,按 Python packaging 的规范解析,推荐 X.Y.Z
interface插件接口代次,目前为 1
requires_lenbot、requires_python明确的版本范围,例如 ">=0.2,<1"、">=3.13",分别与实际的宿主和解释器版本比较
platforms支持的操作系统,用 sys.platform 的名称:linux、darwin、win32
reloadplugin 表示可以单独换版本;host 表示换版本需要重启宿主
authors、license、description作者列表、许可证和一句话介绍

部署包覆盖 Linux 和 Windows,Docker 镜像是 Linux,从源码运行时三者都可能出现。

可选字段 ​

字段内容
permissions需要的宿主能力,见下文
dependenciesPython 依赖,例如 ["httpx>=0.28"],由 uv 解析安装
isolationinline(默认,与宿主同进程)或 process
chat_platforms支持的聊天平台,例如 ["onebot"],不写时为全部平台,见多平台
data_version数据格式编号,默认 1,见数据与迁移
repository、homepageHTTP(S) 地址
[model] instructions模型工具的共享指南文件,见模型工具
[config.<字段名>]配置表单,见配置表单

依赖安装到实例的 .runtime/plugin-packages/<宿主版本>-py313,宿主换版本后重新安装;当前环境里已有的包作为约束,冲突时原样报告。依赖有变化时,应用新版本需要重启宿主。系统软件、外部服务和凭据的要求写在插件的 README 中。

权限 ​

permissions 列出插件通过宿主使用的能力。声明了这个字段,未列出的能力调用时抛出 PermissionError 并说明缺少哪一项。

名称能力
send在启用的群内发送消息,包括 ctx.reply
eventsemit_event 唤醒群聊
historyrecent_messages、messages_between、wait_message
memoryctx.memory
generatectx.generate 单次模型调用
delegatectx.delegate 以请求人的名义发起后台任务
networkfetch_image 从公网获取图片
schedulectx.cron 登记定点任务
configurectx.update_config 修改本插件的配置
quietctx.quiet 让启用的群临时安静

插件自己的 KV、数据目录、日志、命令、消息规则、工具和通知不需要权限。只用这些时写 permissions = []。没有这个字段的插件保留全部能力,面板显示为未声明权限。

权限约束的是宿主提供的能力。同进程的插件仍然可以直接使用 Python 的文件和网络访问,面板展示的权限清单让用户在安装前知道插件会用到哪些宿主能力。

进程隔离 ​

isolation = "process" 让插件在自己的子进程中运行。子进程崩溃时未完成的调用以失败结束,插件标记为失败,宿主和其他插件不受影响;在面板点重载会启动新的进程。

  • ctx 的能力都回到宿主执行,宿主按自己记录的插件名重新检查场景和权限。
  • 跨进程传递的值需要能编码为 JSON,图片按 base64 传递。插件的 print 写入标准错误。
  • 暂不支持 @tool、@memory_tool、ctx.cron 和 ctx.start_task,含有这些入口的插件加载时说明原因。
  • 子进程与宿主使用同一个 Python 环境和系统账号,进程隔离用于故障隔离。

以 AGPL-3.0-only 发布