
chenchenandClaude Opus 4.8
a0616eaebf
feat(swarm): 按订阅套餐控制蜂群使用权(管理员可配)
需求:管理员在 HM 控制台按订阅套餐控制谁能用蜂群。照搬现有 MaxAgents(#8)模式
(per-plan、管理员设、不硬编码 tier)。
后端:
- model SubscriptionPlan 加 SwarmEnabled bool(default false;AutoMigrate 加列,跨三库)。
- model GetUserSwarmEnabled(userId):用户任一活跃套餐 SwarmEnabled=true 即放行(镜像
GetUserMaxAgents);无套餐/DB 不可用 => false(opt-in)。
- controller AgentCreateUserSwarm gate:普通用户须有开通套餐,管理员(role>=admin)绕过(测试/运维)。
- controller 套餐 admin upsert 字段映射加 swarm_enabled(create 整结构已自动带)。
前端(web/default 套餐编辑):
- plan-form schema/defaults/映射 + types 加 swarm_enabled。
- 套餐编辑抽屉加「蜂群使用权」Switch(镜像 enabled)。
- zh.json 加 "Swarm Access" → 蜂群使用权(en 用 key 兜底)。
默认关闭(opt-in)、管理员逐套餐勾选;gate 在 swarm 创建入口,与 swarm 运行时是否启用无关。
测试 TestGetUserSwarmEnabled(无套餐/开通/未开通/过期/多套餐/非法 user)。build+vet+model 测试全绿。
影响面:HM 订阅模型(加字段)+ swarm 创建鉴权 + admin UI;不涉计费扣费/密钥/swarm 契约。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-11 17:55:55 +08:00
..
2026-05-20 14:07:30 +08:00
2026-06-01 23:45:10 +08:00
2026-06-01 23:45:10 +08:00
2026-06-08 17:49:35 +08:00
2026-06-09 22:16:29 +08:00
2026-06-10 18:01:32 +08:00
2026-06-04 16:44:17 +08:00
2026-06-01 23:45:10 +08:00
2026-06-10 14:23:58 +08:00
2026-06-04 00:05:08 +08:00
2026-06-09 14:27:48 +08:00
2026-05-20 14:07:30 +08:00
2026-05-20 14:07:30 +08:00
2026-05-20 14:07:30 +08:00
2026-05-20 14:07:30 +08:00
2026-05-20 14:07:30 +08:00
2026-05-20 14:07:30 +08:00
2026-05-20 14:07:30 +08:00
2026-05-20 14:07:30 +08:00
2026-06-09 14:27:48 +08:00
2026-06-10 15:28:07 +08:00
2026-05-20 14:07:30 +08:00
2026-05-20 14:07:30 +08:00
2026-05-20 14:07:30 +08:00
2026-05-20 14:07:30 +08:00
2026-05-20 14:07:30 +08:00
2026-05-20 14:07:30 +08:00
2026-05-20 14:07:30 +08:00
2026-05-20 14:07:30 +08:00
2026-06-10 15:28:07 +08:00
2026-06-10 15:28:07 +08:00
2026-05-20 14:07:30 +08:00
2026-05-20 14:07:30 +08:00
2026-05-20 14:07:30 +08:00
2026-05-20 14:07:30 +08:00
2026-06-03 22:48:29 +08:00
2026-05-20 16:43:36 +08:00
2026-05-20 14:07:30 +08:00
2026-06-09 14:28:19 +08:00
2026-06-11 17:55:55 +08:00
2026-06-11 17:55:55 +08:00
2026-06-10 15:36:14 +08:00
2026-05-20 14:07:30 +08:00
2026-06-10 00:40:23 +08:00
2026-06-10 10:37:44 +08:00
2026-05-20 14:07:30 +08:00
2026-05-25 11:19:42 +08:00
2026-05-25 11:19:42 +08:00
2026-05-20 14:07:30 +08:00
2026-05-20 14:07:30 +08:00
2026-05-20 14:07:30 +08:00
2026-05-20 14:07:30 +08:00
2026-05-20 14:07:30 +08:00
2026-05-20 14:07:30 +08:00
2026-05-20 14:07:30 +08:00
2026-05-20 14:07:30 +08:00