配额管理

wesgine 为每个 Cell 提供细粒度的资源配额控制,防止资源滥用和失控增长。


配额维度

计算配额

字段说明超限行为
MaxConcurrentRuns最大并发 Run 数429 拒绝
TokensPerMinute每分钟 Token 限额429 排队
TokensPerDay每日 Token 限额429 拒绝

存储配额

字段说明超限行为
磁盘总量Cell 磁盘使用上限触发 GC / 拒绝写入

外设配额

字段说明超限行为
MaxIMChannels最大 IM 渠道数拒绝添加
MaxMCPServers最大 MCP Server 数拒绝注册
MaxCronJobs最大定时任务数拒绝添加
MaxEmailAccounts最大邮箱账号数拒绝添加
MaxSkillsInstalled最大已装技能数拒绝安装
MaxPlugins最大插件数Boot 时截断

执行配额

字段说明
Exec 超时单次命令执行的最大时间

判据位置原则

INV-QUOTA-05

配额判据在唯一增长点,与增长操作在同一个临界区:

适配器 → QuotaFn(current, delta) error → 增长操作
原则说明
适配器不知道 cap 的数值只通过 QuotaFn 提问
每个子系统恰好一处能让集合变大唯一写入点
问与长同一临界区防止并发越界
覆盖已有名字 delta=0upsert 是编辑不是增长

反模式

禁止正确做法
在调用方检查配额在唯一增长点检查
先 count 再 append 无锁问与长同临界区
让适配器持有 cap 值适配器只收 QuotaFn

各子系统配额

IM 渠道

// adapter/channel 的增长点
channelAdapter.Add(ctx, config) // 内部调 QuotaFn

MCP Server

// adapter/mcp 的增长点
cell.MCPs().Upsert(ctx, serverConfig) // 内部调 QuotaFn

定时任务

// adapter/cron 的增长点
cron.Scheduler.Add(ctx, job) // 内部调 QuotaFn

邮箱账号

// adapter/email 的增长点
email.Store.PutAccount(ctx, account) // 内部调 QuotaFn

技能

// skills 的增长点
cell.Skills().InstallPackage(ctx, pkg) // 内部调 QuotaFn

创建时声明检查

validateSeedDeclarationCaps 在 Cell 创建时验证声明不超出配额:

检查说明
CellSpec.Cron声明的定时任务数 ≤ MaxCronJobs
CellSpec.Email声明的邮箱数 ≤ MaxEmailAccounts
CellSpec.Channels声明的渠道数 ≤ MaxIMChannels
CellSpec.MCPs声明的 MCP 数 ≤ MaxMCPServers

配额查询

API

GET /cells/{id}/quotas

返回当前 Cell 的配额配置。

修改配额

PATCH /cells/{id}/quotas
{
    "max_concurrent_runs": 5,
    "tokens_per_day": 1000000
}

在各产品中的配置

wescode

quotas:
  max_concurrent_runs: 1      # 单 workspace 通常够用
  max_skills_installed: 50
  max_mcp_servers: 10

wesclaw 桌面版

quotas:
  max_concurrent_runs: 3
  max_im_channels: 5
  max_email_accounts: 3
  max_cron_jobs: 20

企业版 (teleclaw)

按部门差异化配置:

部门MaxConcurrentRunsTokensPerDay
法务5500,000
业务101,000,000
HR3200,000

注意事项