跳到主要内容

Wework 后台终端

Codex 命令可以在 AI 轮次结束后继续运行。会话的环境摘要在“后台进程”中显示这些命令及数量;点击命令会打开右侧只读终端标签,持续显示该命令的输出。暂无输出时显示占位文字。进程退出后从运行列表移除,已打开的日志标签仍可查看和关闭。

列表和日志标签复用工具卡片的命令展示规则,去掉 /opt/homebrew/bin/zsh -lc 等 shell 包装,显示实际执行的命令。悬停保留完整原始命令;此处理只改变显示,不修改执行参数或进程身份。

每一行的停止按钮调用“停止全部后台终端”。此操作作用于当前任务的整个 Codex 线程,不是单独停止该行的进程,也不等同于中断 AI 轮次。停止失败时保留运行列表并显示错误。

状态与事件​

  • 原生 commandExecution 是进程身份、状态和输出的信源,render_payload.kind = command_execution 保留 processId、原生状态、来源、退出码和命令操作信息。
  • 只列出已结束轮次中仍为 inProgress 的顶层命令;活跃轮次中的命令和嵌套智能体命令不加入此摘要。
  • AI 轮次完成不能证明进程退出。只有原生命令完成事件可以结束该命令;后续输出更新原工具记录,不重新开启 AI 轮次。
  • terminalInteraction 合并到原命令元数据,不产生额外的后台进程行。部分元数据更新不能清除原进程身份或运行状态。
  • 刷新读取原生线程的最新命令记录。缓存的轮次完成快照不能覆盖同一命令后续的输出和退出状态。
  • 运行中的线程快照可能只包含命令首次让出控制权时的输出,刷新时用持续更新的事件缓冲补全;原生命令完成快照中的退出状态和完整输出优先于运行缓存;完成通知未携带输出时保留已有缓冲。前端合并读取快照时也保留已收到的后续输出,避免读取与实时事件竞态造成日志回退。
  • 原生轮次完成通知可能只包含最终回答;executor 保留此前流式收到的命令项。后台输出和退出事件使用命令的原生 turnId,即使线程路由随后登记为上下文压缩,也不能更新到压缩的合成轮次。
  • 回合结束到执行任务收尾之间的输出仍归原命令处理;有后台命令时,模型目录同步等自动操作不能按空闲状态重启 Codex app-server,避免刷新会话中断进程。

终端复用现有 xterm 主题、字体及链接处理,只展示工具输出,不创建新 shell,也不接受进程输入。

停止路由​

前端通过当前任务的设备地址调用 runtime.tasks.background_terminals.clean。对应 executor 调用 Codex thread/backgroundTerminals/clean。不支持该能力的运行时不能展示有效的停止按钮;设备或执行失败必须传回 UI,不能假报停止成功。

验证​

定向单元测试覆盖轮次结束、增量输出、部分元数据合并、退出、旧快照合并、停止失败及设备路由。桌面 checkpoint background-terminals 已注册到现有 CI runner,使用真实 Electron、executor、Codex 和持续运行的 shell 进程,仅模型响应使用测试服务。

核心验证依次检查进程列表、只读日志、刷新恢复、停止全部及停止后保留日志。截图和会话日志属于验证证据,保存在测试结果目录或仓库外,不提交到源码。