Cell 配额系统
wesgine 的 CellQuotas 多维配额管理机制。
配额维度
计算配额
| 配额 | 说明 | 超限行为 |
|---|---|---|
| MaxConcurrentRuns | 最大并发 Run 数 | 429 |
| TokensPerMinute | 每分钟 Token 上限 | 429 |
| TokensPerDay | 每日 Token 上限 | 429 |
存储配额
超限行为:GC 清理 / 拒绝写入。
外设配额
| 配额 | 管理的资源 |
|---|---|
| MaxIMChannels | IM 渠道数量 |
| MaxMCPServers | MCP 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 动态调整。