插件数据模型
当前 schema 恰好包含 23 张插件表。它们把代码身份、用户授权、设备执行和耐久投递分开,避免一个关注点的变化静默改变另一个关注点。
目录与发布
plugin_package_blob 是服务端发布存储,不是 Runner 的渠道隔离运行包缓存。Installation 会钉住一个 release,不会因为目录出现新版本而静默改变。
安装与授权
Device-local 飞书与 GitHub 凭据不得使用 plugin_secret。它们的 plugin_connection.device_id 必须存在,credential_id 保持为空,操作 secret 留在指定 Desktop 的系统安全存储。
Permission document 使用追加式 revision。它可以覆盖整个 installation(capability_id 为空),也可以限定一项 capability。Policy 字段是闭合的:
data_reads、device_access、inbound_events:allow或denylocal_reversible:prompt、allow或denyexternal_writes:prompt或deny,不允许无条件allow
设备与运行时
Enrollment 是长期身份,lease 是短期在线证明。正常重连复用原 enrollment;撤销会推进 generation 并 fence 旧连接与请求。
plugin_runtime_instance 只用于 agent_runtime。飞书、GitHub 等 local_provider 通常依赖 ready connection 和 Runner provider activator,不应人为创建 runtime instance。
副作用与入站投递
Effect 使用闭合状态机:
Dispatch 前还可能进入 expired、stale、cancelled_before_dispatch。failed_before_dispatch 可以安全重试;uncertain 可能已经跨过 provider 边界,必须先对账。
关系总览
图中省略了证据引用。Effect 和 Channel outbox 还会钉住 permission/connection revision、release/config/tool digest 与 device generation,确保审批 A 不会以授权 B 执行。
已删除的 Session 表
迁移 00093_remove_session_plugin_authority.sql 删除了:
plugin_session_snapshotplugin_session_capabilityagent_plugin_binding- Session 的
plugin_snapshot_id字段
当前工具可见性从已启用账户安装、默认连接和当前权限解析。Runtime Session、effect 与 Channel dispatch 各自冻结直接授权。不要增加兼容读取或重新创建旧 snapshot 模型。