「游戏工作房 和 普通工作房,到底差在哪?」
普通工作房 = 一个容器。里面有人、有分身、有消息、有任务卡。它不知道你们在做什么 —— 换个话题它照样能用,这正是它的优点。
游戏工作房 = 这个容器有了主语。它绑定一个具体的游戏,于是房里发生的每件事都带上了同一个上下文:第几版、谁部署的、在测的是哪一版、谁在玩、谁提的意见改进了哪一版。
所以它不该是"普通房 + 多一条按钮",而应该是这个游戏的现场:状态看得见 · 动作按得到 · 事件自动落进聊天流。
为什么"多一条按钮"不够
你 08-14 早上看到的就是那个不够的版本:房里只有工作台卡,和普通房一模一样。当时还叠了一个硬 bug(见「② 现状」最后一节),但就算没那个 bug,你看到的也只是一条孤零零的按钮栏 —— 没有"这个游戏现在什么样"。
差别落到具体的:
| 问题 | 普通工作房 | 游戏工作房(该有的样子) |
|---|---|---|
| 我在哪 | 房名 + 成员 | 房名 + 这个游戏(图标/名字/上架状态) |
| 现在什么状态 | 分身在忙/闲 | 线上第几版 · 在测第几版 · 最近部署多久前 · 今天多少人玩 |
| 我能干嘛 | 说话、派活 | 玩正式版 · 玩测试版 · 发给朋友 · 上线 · 退回上一版 |
| 刚发生了什么 | 聊天记录 | 聊天记录里混着部署/上线/回退的事件条(谁、什么时候、第几版) |
| 意见去哪了 | 沉进聊天 | 一句反馈 → 一张卡 → 挂在某一版上 → 修完那条事件回到房里 |
现状:两边各自是什么(as-built)
A. 游戏工作台(开发者中心)
入口:App → 我的 → 开发者中心。它是全局视角:我名下所有游戏、数据、收入、审核。
| 能力 | 接口 | 状态 |
|---|---|---|
| 我的游戏列表(含线上/在测版本、两条现成地址) | GET /v1/dev/games | 已落地 |
| 上传新包(只动 staging,不碰线上) | POST /v1/dev/games/{id}/upload | 已落地 |
| 上线(把在测那版推成线上) | POST /v1/dev/games/{id}/promote | 已落地 |
| 退回上一版 | POST /v1/dev/games/{id}/rollback | 已落地 |
| 部署历史(最近 5 版) | GET /v1/dev/games/{id}/deploys | 已落地 |
| 数据(零埋点:打开/时长/留存) | GET /v1/dev/games/{id}/analytics | 已落地 |
| 把游戏挂到一间工作房上 | POST /v1/dev/games/{id}/workroom | 已落地 |
B. 工作房
入口:聊天列表里的一间房(conversations.type = 'workroom')。它是现场视角:谁在干活、干到哪、卡有没有交。
| 能力 | 接口 / 位置 | 状态 |
|---|---|---|
| 工作台(房里所有分身此刻在干嘛) | GET /v1/workrooms/{cid}/board | 已落地 |
| 任务卡(落卡/交活/认栽/子卡) | /v1/workrooms/{cid}/tasks… | 已落地 |
| 这房挂着哪个游戏 | GET /v1/workrooms/{cid}/game | 已落地 |
| 房里那张游戏卡(图标/状态/两版/最近部署/两个门/分享/进工作台) | app/lib/widgets/workroom_game_bar.dart | 已落地(要 build ≥ 下一班 TF) |
C. 绑定是怎么表达的
games.workroom_id —— 一列,加一条唯一索引(迁移 000205 / 000206)。
所以你问的「我不可能开四个房间做一个游戏,对不对」——对,而且数据库层面就做不到。
D. 是不是同一种房、同一套代码?是
Jeff 2026-08-14 问:「我们这游戏工作房与普通工作房是不是一样的房间?还是两个不一样的房间?是用同一套代码吗?」
答:同一个房间、同一套代码。「游戏工作房」不是第二种房型,它是普通工作房 + 一条绑定。
生产库实况(2026-08-15 查的):conversations.type 只有六个值 ——
direct 50 · workroom 23 · group 15 · music 13 · werewolf 13 · channel 10,没有 game 这一类。
那间 🎮 2048 房的 type 就是 workroom。差别只有 games.workroom_id 指着它。
App 侧同理:同一个聊天页、同一条工作台,只是多挂一个 WorkroomGameBar,没绑游戏时它整条不画。
判据:「这房在做什么」是一条数据,不该变成一种类型。
如果你要的是整屏都为游戏重做(进房默认看到游戏面板而不是聊天),那不是加卡片能解决的,得开一种新房型。这件事待你拍板(已加进「⑨ 待你拍板」)。
/v1/games/by-workroom/{cid} 改名成 /v1/workrooms/{cid}/game(旧的和 /v1/games/{id}/friends 冲突,注册时 panic),却没改 App 那行地址。App 每次都拿 404,而那层的规则是「拿不到就整条不画」→ 房里什么都没有,且不报任何错。证据:新地址回
404 {"error":{"code":"not_found"}}(路由活着);旧地址回 Go 的裸 404 page not found(压根没这条路)。教训已写进代码注释和 L2 记忆:「代码里有」≠「屏幕上走得到」,更不等于「两边说的是同一条路」。现在有一条跨语言测试盯着这件事。
分工:哪件事归工作台,哪件事归工作房
判据一句话:工作台管"所有游戏的账",工作房管"这一个游戏的现场"。
凡是要横着比(哪个游戏赚钱、哪个该下架)→ 工作台。凡是"我们几个正在把这一版弄好"→ 工作房。
| 事情 | 工作台 | 工作房 | 为什么这么分 |
|---|---|---|---|
| 看所有游戏 | ✅ 唯一入口 | ✗ | 房是单游戏的,天然没有"所有" |
| 建游戏 / 改名 / 改图标 | ✅ | ✗ | 低频、全局、要审核 |
| 上传新包 | ✅ | 🔜 待做 | 房里 AI 分身改完就该能直接传,不用绕出去 |
| 玩正式版 / 玩测试版 | ✅ 两颗按钮 | ✅ 两个门 | 入口决定版本:哪扇门进,拿哪一版 |
| 上线 / 退回上一版 | ✅ | 🔜 待做(只给主人) | 决定的人常常正在房里聊,让他跳出去=断线 |
| 把某一版发给朋友 | ✅ | ✅ | 两处同一张单子(一个组件) |
| 数据(DAU/时长/留存) | ✅ 完整 | 🔜 待做:只显三个数 | 房里要的是"今天有没有人玩",不是报表 |
| 收入 / 提现 | ✅ | ✗ 永不 | 钱的事不进群 —— 房里可能有外人 |
| 派活给分身、任务卡 | ✗ | ✅ | 工作台没有"人"的概念 |
| 反馈 → 变成一张卡 | ✗ | 🔜 待做 | 意见天然发生在聊天里 |
连接:三条线,缺一条就断
"连接"不是一个跳转按钮。工作台和工作房之间要通三样东西:状态、动作、事件。
线 1 · 状态(房里看得见)已落地
房一打开就问一次 GET /v1/workrooms/{cid}/game,拿到:图标 · 名字 · 上架状态 · 线上第几版 · 在测第几版 · 最近部署时间 · 我是不是主人。
/2048/v9/)只有一个出处。App 自己拼的话,后端哪天改了拼法,发出去的就是一条打不开的链接。线 2 · 动作(房里按得到)部分
已经能按的:玩正式版 · 玩测试版 · 发给朋友 · 进工作台(只给主人)。
还要补的 待做:上线 · 退回上一版 · 上传新包 · 把某条反馈转成卡。
影响全世界的那两颗(上线、回退)一律先弹确认,而且成功后回读再刷新 —— 接口说 200 不算数。
线 3 · 事件(房里自动看得到刚发生了什么)全部待做
这是现在完全没有的一条,也是"房里像没关系的东西"的真正原因:游戏那边发生了事,房里一个字都没有。
要落进房的事件(以系统消息形式,和 sys_* 那类同款):
| 事件 | 房里长什么样 | 触发点 |
|---|---|---|
| 部署了新版 | 🧪 v10 部署好了 · 谁 · 几点 · [玩玩看] | deployReady 成功后 |
| 上线 | 🚀 v10 上线了(原来是 v1)· 谁按的 · [玩正式版] | promote 成功后 |
| 退回 | ↩️ 退回 v1(从 v10)· 谁按的 · 原因(可选) | rollback 成功后 |
| 审核结果 | ✅/❌ 审核通过 / 被打回 + 理由 | 管理员审核 |
| 玩到崩 | 💥 有人在 v10 上报了一个错(前 3 条聚合成一条) | /v1/errlog 命中这个游戏 |
判据:房里的事件条要像同事说话,不像监控告警 —— 一天刷屏三十条,人就会把房静音,那这条线就白做了。
房里长什么样:三层
第 1 层 · 顶部游戏卡(一眼)已落地
规则:没绑游戏的房整张卡不画;没有在测版本时那颗写「无测试版」并且按不动(不写 v0 —— 不存在的版本写出来只会让人以为点不开)。
第 2 层 · 工作台里的第 5 页「Game」已落地 v0.474
我原来写的是「点开顶上那张卡 → 弹一个面板」——他这条更对:弹面板等于又造一个地方,放进已有的那排页签 = 同一个抽屉里多一格,人不用学新地方。图纸按他改了。
页签变成 5 个:💓 Pulse · 📋 Tasks · ⚙️ Setup · ℹ️ Info · 🎮 Game(只有绑了游戏的房才有第 5 格)。
DeskTab.values 画 → 所有工作房都多出一格空页签。所以「这间房该显示哪几页」抽成一个函数
deskTabsFor(hasGame:) 当唯一出处,条和页体都问它;game 排最后,前四页下标不变(不然老状态会串页)。页里四块,从上到下:
- 版本:线上 vN · 在测 vM · 最近 5 版列表(谁传的、几点、多大),每版右边一颗 [玩]
- 动作:玩正式版 / 玩测试版 / 发给朋友(人人可用)· 上线 vM · 退回上一版 · 进开发者中心(后三样只有游戏主人才画,不是画成灰的)已落地;上传新包 待做
- 今天:打开次数 · 玩的人数 · 平均时长(三个数,点一下才去工作台看全的)
- 这一版的意见:房里被标成反馈的那几条,挂在版本号上
第 3 层 · 聊天流里的事件条 待做
见「⑥ 事件流」。要点:事件条可点 —— 点「v10 上线了」直接开 v10。
事件流:一次改动的完整走法
这条流里有三处"不许省"
live_version 从 1 改成 10,零文件搬运,所以天然原子、秒级生效、可回退。已落地权限:谁看得到什么、谁按得动什么
| 游戏主人 | 房里的人 | 房外的人 | |
|---|---|---|---|
| 看到房里那张游戏卡 | ✅ | ✅ | —(进不了房) |
| 玩正式版 | ✅ | ✅ | ✅(游戏页) |
| 玩测试版 | ✅ | ✅ | ❌ 静默回落正式版 |
| 把某一版发给朋友 | ✅ | ✅ | — |
| 上线 / 退回 / 上传 | ✅ | ❌ 连按钮都不给 | ❌ |
| 进开发者中心 | ✅ | ❌ 连入口都不给 | ❌ |
| 看收入 | ✅(只在工作台) | ❌ | ❌ |
① 能看到测试版的人 = 房里的人,而不是另建一张"内测名单"。名单和房间成员必然会漂(有人退房了名单还留着),而"谁在房里"本来就有唯一出处 —— 直接问它。
② 按不动的按钮就别给。不是主人的人看到「上线」是灰的,他会一直试;干脆不画。(后端为此专门回一个
is_owner。)分阶段落地
P1 · 看得见(已经做完)已落地
- 绑定:
games.workroom_id一列 + 唯一索引 - 房里那张卡:图标/名字/状态/两版/最近部署/两个门/分享/进工作台
- 入口决定版本:游戏页永远正式版,房里那扇门才给测试版
- 工作台:上线 · 退回上一版 · 试玩正式/测试(两颗排在一起)
P2 · 事件通到房里(下一步,建议先做这个)待做
- 部署好 / 上线 / 退回 → 房里三种系统事件条(可点,点了就开那一版)
- 合并与限流:同分钟同类合并;错误上报每版每小时最多一条
- 后端:事件写进会话(和
sys_*同一条路),不新建通道
P3 · 房里能动手 待做
- 点开卡 = 游戏面板(版本列表 + 动作 + 今天三个数 + 这版的意见)
- 上线 / 退回 / 上传新包(只给主人,先弹确认,成功后回读)
- 把一条消息标成「这一版的意见」→ 自动成卡,挂在版本号上
P4 · 闭环 待做
- 意见 → 卡 → 改 → 部署 → 事件回到那条意见下面「这条在 v11 修了」
- 房里 AI 分身直接读游戏的错误日志和玩家数据
待你拍板(4 件)
1. 建房的路,只留一条吗?待拍板
现在有两条:工作台里「建这个游戏的工作房」(自动绑定),和你自己新建一间房再绑。后者目前 App 里没有"绑到现有房"的按钮 —— 你 08-14 那间房就是这么来的(我在库里手动改的绑定)。
我的建议:只留"工作台一键建房"这一条,另外给一颗「把这间房绑到某个游戏」放在房设置里(要主人身份)。两条都留但都做半截,是最坏的。
0. 游戏房要不要变成"第七种房型"?待拍板
现在:同一种 workroom + 一条绑定(见「② 现状 · D」)。
我的建议:先不开新房型。先把「④ 三条连接线」里的事件线做掉 —— 如果做完你仍觉得"进房第一眼不该是聊天",那才值得开新房型,因为那时我们已经知道到底缺的是什么。
反过来说:要是你现在就确定"游戏房进去应该先看到游戏面板、聊天是第二屏",那我按新房型设计,别拿卡片凑。
2. 事件条要不要算未读?待拍板
「v10 部署好了」这种,要不要让房在聊天列表里冒红点?
我的建议:部署=不冒红点(太频繁),上线/退回/审核结果=冒(那是"影响全世界"的事)。
3. 房里的人能不能按「上线」?待拍板
现在只有游戏主人能。要不要开一个"房里的管理员也能按"?
我的建议:暂时不开。上线影响所有玩家,而房里可能有外部测试的朋友。真要开,就做成主人显式指定某个成员。
4. 一个游戏一间房,那"这个游戏的第二期"呢?待拍板
结构上一个游戏只能挂一间房。如果一间房聊完了想换新房(换一批人做第二期),需要一个「把绑定移到新房」的动作 —— 旧房会变回普通工作房(历史消息都在,只是不再有游戏卡)。
我的建议:做这个动作,并在两边各落一条系统消息说明"这游戏的现场搬到那边了"。
已知薄弱点(我自己挑的刺)
房里有了 game_id 之后,还有哪些地方该跟着变
Jeff 2026-08-14 语音:「你除了有这一页之外,也应该在想我们还需要什么…虽然都是同一个代码, 甚至因为它有游戏的 ID,我们有一些地方就要增加一些关于这个游戏的。你在逻辑思维,再去深入地思考。」
所以这一节是把 App 里每一个"房会出现的地方"过一遍,问同一个问题: 这里知道了 game_id,该不该变? 分三档:必须有 / 值得有 / 永远不该有。
A. 必须有(不做就等于"绑了个寂寞")
| 地方 | 知道 game_id 之后该变成什么 | 依赖 |
|---|---|---|
| 聊天列表那一行 | 头像换成游戏图标;副标题写「在测 v9 · 3 小时前部署」——不进房就知道这房在做什么、新不新 | — |
| 房设置页 | 多一块「绑定的游戏」:看主页 · 换绑到别的房 · 解绑(解绑要问一句) | — |
| 聊天流里的事件条 | 部署 / 上线 / 退回 / 审核结果自动落进房(见「④ 三条连接线」) | 事件线 |
| 任务卡 | 房里落的卡自动带「针对 v9」;交活时能自动补一句「这条在 v10 修了」 | 事件线 |
| 通知 | 上线/退回/审核结果 才推;部署不推(太频繁,推了人就静音这房) | 事件线 |
| 成员页 | 显式写明:在这房里 = 能玩测试版。现在这是条隐藏规则,退房就没了也没人说 | — |
B. 值得有(第二轮再做)
| 地方 | 该变成什么 |
|---|---|
| 邀请进房 | 邀请文案带游戏名:「来一起做 2048」——对方进来前就知道是干嘛的,也知道他会拿到测试版 |
| 游戏详情页 | 反过来的那条路:主人/房成员在游戏页看到「这个游戏有工作房 →」,一键回房 |
| 房里搜索 | 搜 v9 能搜到和那一版有关的消息和卡 |
| 发进房的分享 | 把某一版做成卡片发进房(带图标/版本/一颗「玩」),而不是一条秃链接 |
| 错误上报 | H5 崩了带 game_id → 聚合成一条落进房「有人在 v10 上报了一个错」 |
| 玩了没 | 房里显示「今天有 3 个人玩过测试版」——测试反馈从哪来,一眼看得到 |
| 游戏下架 / 删除 | 房不跟着消失:变回普通工作房 + 一条系统消息说明。历史是人的,不是游戏的 |
C. 永远不该有(写下来,免得以后有人"顺手加上")
· 审核意见原文 —— 那是平台对开发者本人说的话。
· 玩家个人数据 —— 谁玩了多久、谁充了钱,一律不进房(影子身份那条红线)。
· 别的游戏的任何东西 —— 这房只有一个主语。
AI 能改到哪儿?—— 现在有没有"只准动这个游戏"的限制
Jeff 2026-08-14 问:「我们设计里有没有限制 AI 只能改该游戏范围之内的代码?」
答:分两种 AI。一种被结构限死,一种完全没限 —— 后者是真洞。
① 平台里的「AI 造游戏」天生受限
路径:POST /v1/dev/ai/build → 模型生成单文件 H5 → 按 game_id 存成那个游戏的新版本。
代码里每一步都带 id + dev_id:不是你的游戏直接不让动;产出只能落到 hosted/{那个游戏}/v{N}/。
它碰不到别的游戏,更碰不到仓库。
② 房里的 AI 分身(我、以及那些工人)完全没限
它们跑在我们自己的机器上,拿的是整个仓库 + 生产服务器的权限。所谓"只改这个游戏"现在纯靠自觉,没有任何闸门。
docs/AI_BOTS.md 里已有一条相关铁律:执行器绝不许和我们的 shell 同机器同身份。
但那条是给「外部 AI 接进群」写的,没覆盖到"房里给这个游戏干活的分身"。这是缺口,不是已解决的事。怎么补:一个专用系统账号 Jeff 2026-08-15 说「这个方法可行」
1. 建一个系统账号(只建这一次)
在 Mac 上加一个标准用户 hoopai。和有多少游戏无关 —— 50 个游戏也还是这一个账号。
- Jeff 现有的窗口、终端、目录一个字都不用改:新用户有自己的家
- macOS 家目录默认
700→ 它连读都读不到/Users/jeffchoong/…(不是"不许读",是open()直接失败) - Jeff 不用登出、不用切换用户:AI 进程用
sudo -u hoopai …在后台以那个身份跑
2. 一条常驻 AI,按单换目录(不是每个游戏一条)
那个账号下跑一条常驻 AI,它是「接单的」,不属于任何一个游戏:
只有两个游戏要同时动工时才多开一条 —— 按「同时忙几件活」开,不是按「有几个游戏」开 (和现在 `spawn_worker` 一条常驻 + 忙时起工人是同一套)。
3. 游戏代码从哪来?——云上,不是从 Jeff 的文件夹
Jeff 问过一句关键的:「它动不到我的文件夹,那游戏代码怎么办?」答案是游戏代码的老家本来就在云上:
- 平台自营游戏 → GitHub 的
HOOP-games仓库;线上文件在 Cloudflare - AI 造的 / 托管的游戏 → 上传到云存储的那个版本包(
hosted/{game}/v{N}/)
Jeff Mac 上那份 HOOP-games 只是他自己的工作副本。hoopai 从云上拉自己的一份,两份互不相干。
4. 钥匙:给它自己的,而且只开一扇门
| 它有什么 | 它没有什么 |
|---|---|
| 自己的 GitHub key(只开游戏仓) | Jeff 的 key(绝不拷贝过去 —— 拷了这道墙就白建) |
这个游戏的 deploy_token(发版本用) | 生产机 SSH key · 数据库密码 |
自己家目录 /Users/hoopai/ | 主仓、别的游戏、Jeff 的桌面 |
g2048 的部署令牌去打别的游戏,生产实测:ai-235991 → 403 bad_token · ai-26469e → 403 bad_token · 不带令牌 → 401 no_token · 打 g2048 自己 → 2005. 这套挡得住什么、挡不住什么
| 挡得住吗 | |
|---|---|
| 改别的游戏 | ✅ 令牌 403 + 目录里根本没有别人的代码 |
| 改主仓 / 后端 / App | ✅ 没有那把钥匙,拉都拉不下来 |
| 碰生产服务器、数据库 | ✅ 没有 key、没有密码 |
| 读 Jeff 的文件 | ✅ 家目录 700,内核挡 |
| 把它自己那个游戏改坏 | ❌ 挡不住 —— 那本来就是它的活。配套是「退回上一版」(已做好) |
| 被 prompt injection 骗着写坏代码 | ❌ 范围墙管不了语义,那是另一刀(AI_BOTS.md) |
| 我们几个运维分身(Vega/NOVA…) | ❌ 不在这套里 —— 我们本来就是全权。要收得连我们一起收,那是 Jeff 的决定 |
6. 开工要谁做什么
Jeff 做一步(建用户要管理员密码):系统设置 → 用户与群组 → 添加标准用户 hoopai。
剩下归我:建目录、配它自己的钥匙、把 AI 以那个身份跑起来、然后当场演示越界被拒
(让它试着改主仓和另一个游戏,把"权限不足"那一幕截图)。
外部 AI 接进来 —— 他改得到文件吗?
Jeff 2026-08-15 问:「工作房 setup 里可以把外面的 API 接进来,是不是已经完全做好了?
而且这个 API 进来之后,他是不是只是一个聊天工具?他改得到文件吗?」
答:没做完;而且按现在这份图纸,他改不到文件 —— 你的直觉是对的。
为什么会有这条路(先接上上一页)
· 我们自己人干活 → 留在 Mac 上那个
hoopai 账号里,吃订阅,成本近乎固定(⑪ 那一页)· 外部开发者按的 → 必须走服务器上的 API,按 token 记在他自己头上
订阅那条不能给外面用,三条理由,合规最硬:
| 为什么 | |
|---|---|
| 条款 | 订阅是给一个人用的。拿它给上千外部用户跑 = 账号共享/转售,封号就是整条线一起停。这条不能拿"能跑得动"去赌 |
| 并发 | 一台 Mac 同时能跑的 AI 会话就几个。1000 人排队 = 等一天 |
| 隔离 | 外面人的代码在自己家那台机器上跑,那台就变成公共设施了 |
成本算得出来(现价,每百万 token 进/出):Sonnet 5 $3/$15(2026-08-31 前 $2/$10)·
Opus 5 $5/$25 · Haiku 4.5 $1/$5。改一个单文件小游戏一轮进出加起来几万 token 量级 →
一轮一两毛到几毛钱。所以 1000 个活跃开发者不是成本问题,是定价问题 —— 给免费额度,超了拿绿能量买。
① 现在做到哪儿了 做了一半:配好了也不会说话
| 件 | 状态 |
|---|---|
🔑 保险箱(存 key,加密) secretbox.go | ✅ 在 |
🏷️ provider 目录(OpenAI / DeepSeek / Anthropic / OpenRouter…) providers.go | ✅ 在 |
🗄️ 库表 room_bots / room_bot_usage(迁移 000217 + 补发 000222) | ✅ 生产库里在(2026-08-15 打库核过,schema_migrations = 229) |
⚙️ 执行器(读 room_bots → 调外部 API → 把回复发进房) | ❌ 一行 Go 都没有 |
| 🔌 bots 路由(建/列/停一个 bot) | ❌ 一条都没有 |
grep -rn "room_bots" --include="*.go" backend/ 只命中 providers.go 里的一句注释;
mux.Handle 里没有任何 bots。所以现在在房里配好一个 bot,消息进来没人接,它一句话也不会回。② 「他改得到文件吗?」——改不到 这是结构,不是忘了给权限
room_bots那一行只有:哪一家 / 用哪把 key / 哪个模型 / 人设 / 什么时候开口 / 每天上限。 没有一个字段是「他能碰什么」 —— 想给他文件权限,库里根本没地方写- 走的是别人家的 chat 接口:文字进、文字出。我们把房里的消息喂过去、把回来的字发出来 —— 中间没有工具、没有文件系统、没有 shell
docs/AI_BOTS.md那条铁律「执行器绝不许和我们的 shell 同机器同身份」防的就是这件事
POST /v1/dev/ai/build:
后端自己调模型、生成 HTML、部署成新版本,范围写死在 dev_id + game_id 上。
那是平台的一条管线,不是"房里那个人"。③ 那要怎么让房里的外部 AI 真能改游戏?别给他文件,给他一颗按钮
换谁接进来都一样 —— 他永远碰不到文件,却改得到这一个游戏。而且那一轮花的是他自己那把 key 的钱。
这样做还顺手解决三件事:①「他怎么知道能改哪个游戏」→ 按钮自带 game_id,他不用知道,也无从选错;
②「prompt injection 骗他改别的」→ 骗到了也没用,按钮只通向这一个游戏;
③「谁付钱」→ 谁的 key 谁付,平台不垫。
④ 要动手的顺序(未开工,待 Jeff 点头)
| 刀 | 做什么 | 怎么算完 |
|---|---|---|
| 1 | bots 路由 + 执行器(只会说话,先不给按钮) | 房里 @ 一个 bot,它用房主自己的 key 回一句 |
| 2 | 记真实 token 用量(现在只记轮数,记不出钱) | 能按 bot / 按天查出花了多少钱 |
| 3 | 给 bot 加 build(说明) 这一件工具 | 房里叫它改游戏 → 真出新版本;叫它改别的 → 它根本没有那个动作 |
| 4 | 免费额度用完接绿能量 | 超额那一轮扣绿能量,扣完就停 |
build 那颗按钮,
还是要房主单独开一次(我倾向单独开 —— 会改代码和会聊天是两种信任)。