# 平台

> 隔离、客户端与预览、额度与用量、更新

## 隔离

*每个项目、每个 Assistant、每个共享域，在主机上都是一个独立的 Linux 用户。*

- 平台服务用自己的用户运行；平台代码和备份放在这些用户读不到的目录里。主机构建完就删掉源码，只留构建产物。
- 进程之间在 `/proc` 里互相看不见；每个席位进程都有内存上限，CPU 在席位之间公平分（一只席位饿不死邻居，空闲的核也不会闲着）；预览端口只有拥有它的项目连得上；AI 用户访问不了云主机的元数据服务。
- AI 的某一轮要用 root（`sudo`），要逐轮申请，由所有者或 Admin 团队批准。
- 审查者和评分器只读；Assistant 只能用只读工具看项目，要改东西就排队；Auto-Run 占着项目时，对话席只读。
- 成员只看得到分给自己团队的项目，以及分享给自己的 Assistant。

## 客户端与预览

*网页版是完整的 Studio，iPhone 上有原生 App；做出来的东西在 Preview 面板里直接看。*

- **网页**: 完整的 Studio
- **iOS**: GenkiAI App，目前通过 TestFlight 分发；iPhone 用原生页签，iPad 打开完整的网页版 Studio。首次打开是 Space 目录，在这里建、删、切换 Space
- **推送**: iPhone 走 APNs，浏览器走 Web Push，内容一样
- **网页预览**: 每个项目一个托管的开发服务器（最多同时 4 个，闲置 60 分钟回收）；在 Space 上以新标签打开一个只有持链接者能访问的独立地址
- **iPhone 模拟器**: 无头模拟器的画面流进 Preview 面板，AI 通过 `sim-debug` 驱动同一台设备；需要 Mac，所以 Linux 上的 Space 要由团队配对一台自己的 Mac

## 额度与用量

*模型跑在所有者登录的 Claude / Codex 订阅账号上。额度用完，它原地等，恢复后接着跑。*

- 所有者可以登录多个账号。
- Auto-Run 碰到上限就暂停在当前步骤。另一个已登录的账号还有余量（用量低于 95%）就切过去、在聊天里说一声，等你点继续接着跑；都没有余量，就到额度重置时自己接着跑，不知道重置时间就等你点继续。
- 对话的一轮碰到上限时不自动重试，只记日志。
- Status 页的 USAGE 卡：每个账号的用量窗口（Claude 账号有 5 小时和 7 天两个，Codex 账号只有 7 天一个），加上按项目统计的 7 天 token 用量。
- 通话和会议的分钟数按人按周计；存储超出方案时，新的 Auto-Run 暂不开跑，对话照常。

## 更新

*Space 自己更新：后台构建，等到空闲，快照，原子切换；失败就回滚。*

1. 平台发布新版本后，在线的 Space 收到通知，在后台下载并构建。
2. 等到空闲，也就是没有正在跑的 Auto-Run、对话、定时任务或 Assistant 轮次；切换期间不接新的运行。
3. 切换前快照数据库、暂停新的轮次，然后原子切换版本并重启；失败就回滚。
4. 客户端显示「正在更新」，结束后自己恢复。
