Cell 配额系统

wesgine 的 CellQuotas 多维配额管理机制。


配额维度

计算配额

配额说明超限行为
MaxConcurrentRuns最大并发 Run 数429
TokensPerMinute每分钟 Token 上限429
TokensPerDay每日 Token 上限429

存储配额

超限行为:GC 清理 / 拒绝写入。

外设配额

配额管理的资源
MaxIMChannelsIM 渠道数量
MaxMCPServersMCP Server 数量
MaxCronJobs定时任务数量
MaxEmailAccounts邮箱账号数量
MaxSkillsInstalled已安装技能数量
MaxPlugins插件数量

Exec 配额

执行相关的资源限制。


配额判点位置(INV-QUOTA-05)

五个外设 cap 在唯一增长点判定,且与增长同临界区。

核心原则

适配器不知道 cap 的数值,只收 QuotaFn(current, delta) error 提问。

数值留在 internal/cell/quotas.go 的 CheckAdapterCount。

判据位置

每子系统恰好一处能让集合变大。那一处握着这次写入自己的锁跨越「问」和「长」。

upsert 语义

覆盖已有名字 delta=0——upsert 是编辑手势,卡在上限的 Cell 必须还能轮换凭据。


配额查询与更新

查询配额

GET /cells/{id}/quotas

更新配额

PATCH /cells/{id}/quotas

超限策略(INV-QUOTA-03)

资源类型超限行为
计算429 Too Many Requests
存储GC 清理 / 拒绝写入
外设拒绝 Install / 截断
Exec拒绝执行

与 CellSpec 的关系

配额通过 CellSpec.Quotas 声明:

spec := wesgine.CellSpec{
    Quotas: wesgine.CellQuotas{
        MaxConcurrentRuns: 5,
        MaxIMChannels:     10,
        MaxCronJobs:       20,
        // ...
    },
}

运行时可通过 PATCH /cells/{id}/quotas 动态调整。