3.7 KiB
3.7 KiB
Webterm 配置与受控部署
- 唯一配置来源:
config/platform-infra/webterm.yaml是端口、自动标签、启动模式、浏览器历史和输出聚合策略的 owning YAML;build/docker-compose.<port>.yaml是受控 CLI 渲染产物,禁止手工维护或在部署后恢复旧内容。
- 受控入口:
- 预览使用
bun scripts/cli.ts platform-infra webterm plan --target <target>; - 部署使用
bun scripts/cli.ts platform-infra webterm apply --target <target> --confirm; - 收口使用同一入口的
status与validate。 - 日志使用
bun scripts/cli.ts platform-infra webterm logs --target <target> --tail <lines>; - 日志默认返回最近 100 行,
--tail允许范围为 1 到 1000 行,且总输出保持有界。
- 预览使用
- 匿名健康与 provider 判定:
- Webterm
/healthz无需登录,返回ok、providers与sessions; apply、status和validate必须读取/healthz,且只在ok=true、providers>=1时判定本地运行面健康;/login可访问不能替代 provider 健康证据。
- Webterm
- 浏览器历史策略:
browserTerminalHistory.desktopScrollbackLines控制桌面端 xterm 历史行数;browserTerminalHistory.mobileScrollbackLines控制移动端 xterm 历史行数;browserTerminalHistory.mobileMaxWidthPx与粗指针特征共同决定移动端策略;- 视口类型变化后,已有终端必须同步新上限并截断超出上限的旧行。
- 输出聚合策略:
browserOutputPolicy.maxFramesPerSecond是每个浏览器连接、每个终端的最大输出消息频率;browserOutputPolicy.maxFrameBytes是单条聚合输出消息的字节上限;- 后端必须按终端独立排队,小数据在频率窗口内合并,积压数据按窗口顺序发送,禁止用字节阈值绕过频率上限。
- 持久 Codex Session 创建:
- 适用于本地 provider 的
mycx与oncxruntime 自动恢复标签; - 新建必须直接调用原生
codex app-server,按顺序完成initialize、initialized、thread/start与thread/name/set; thread/start必须显式传入ephemeral=false,并以返回的 thread ID 作为后续恢复 Session ID;- 禁止通过附带
--profile的mycx或oncx包装器启动 app-server,当前 Codex 只允许 profile 用于 runtime 命令; mycx创建沿用默认 Codex home,oncx创建必须沿用包装器声明的CODEX_HOME、CODEX_SQLITE_HOME和凭据环境清理规则;- Webterm 运行在使用
/usr/local/bin/host-shell的容器中时,app-server 必须通过宿主 namespace 执行原生 Codex; - 容器与宿主工作目录分层:
- 容器进程工作目录必须使用容器内存在的目录;
- 目标工作目录只通过
thread/start.cwd传给宿主 Codex; - 禁止把仅宿主存在的路径直接作为容器
spawn.cwd;
- 只有
thread/name/set成功后才能把 Session ID 写入 runtime 数据域,再通过mycx|oncx resume <session-id> <prompt>启动终端; - 恢复 prompt 必须作为 CLI 参数传入,禁止在 xterm 中模拟键盘输入;
- runtime 记录与 YAML 预置恢复标签必须共存,runtime 数据域不得改变 owning YAML 的预置定义。
- 适用于本地 provider 的
- 持久 Session 最小验收:
- 先执行目标的受控
status,确认 provider 健康和 runtime 数据域正确; - 再从真实浏览器加号入口创建一个持久 Session,关闭标签后从恢复列表重新打开;
- 创建与恢复后的 Session ID 相同、标签为 runtime 自动恢复且终端进入 running,才判定端到端合同成立;
- 单元测试只验证 app-server 消息顺序、模式环境和宿主 namespace 启动参数,不能替代真实浏览器验收。
- 先执行目标的受控