# 实时语音与本机 Codex Agent

语音与本机工具运行在同一个原生 Codex app-server thread。V3 实时会话保留原生指令、启动上下文与自动回答转接；网页不再重复委派或自行注入最终回答。可直接询问“查看这台电脑的磁盘剩余空间”，Codex 调用真实工具后自动在实时语音中回复。

## 权限与工作范围

- 工作目录为启动 Application 的当前目录。沿用本机明确选择的模型/供应商、标准工具、插件和 MCP 配置；不根据其他供应商凭证的存在猜测切换供应商。该应用创建 thread 时按已有授权设置 `sandbox="danger-full-access"`、`approvalPolicy="never"`。应用不修改全局配置。
- 页面继续支持服务端补充信息和其他交互。兼容审批请求会显示具体命令、文件差异或权限，由单次回复处理；不会将所有服务端请求自动批准。完整本机访问不替代外部服务登录、插件认证或操作系统管理员权限。
- 用户输入按问题 ID 返回，支持选项、自由输入及密码字段；密码不加入聊天记录。未支持的服务端交互会明确拒绝，不静默批准。
- 独立 app-server 不自动继承当前 Codex 桌面聊天的历史、目标项目或全部宿主注入工具。某个插件是否可用仍取决于其配置、认证和宿主要求。
- Windows 的已有系统代理只复制到 Codex 子进程环境，解决 HTTP 通畅但语音控制 WebSocket 直连超时；显式代理与旁路设置优先，不保存或显示代理凭证。

## 交互与生命周期

页面显示原生任务进度和待处理请求。运行中保持文字输入可用：空闲走 `turn/start`，运行中走带 `expectedTurnId` 的 `turn/steer`。语音接话与工具转接由原生实时会话处理。“停止当前任务”调用 `turn/interrupt`，保留 RTC、麦克风和会话；“结束对话”才释放整个会话。工具请求由 RPC 异步分派，等待用户期间仍可读取原生完成事件和响应。

每个审批映射独立随机令牌，只对应当前 thread/turn；重复、过期、其他 thread 的回复不能执行。服务端自行解决请求时页面移除待办。中断捕获原 turn 的完成事件，迟到结果不会覆盖新 turn；无法确认中断时关闭拥有的 app-server。控制通道异常会明确提示重新连接，不能以仍有媒体声音掩盖工具链路中断。旧直接 `delegate` 辅助接口只保留兼容测试，实时网页不使用它的串行任务门禁。

设备业务继续由 Application Device channel 经 SDK Daemon 下发。电脑工具能力不改变 Daemon 路由，不建立另一条设备业务连接。

## 本次验证

2026-10-14：真实 WebRTC、同线程本机只读磁盘命令、原生运行中补充输入、自动非静音回复及真实终端任务中断后保持 RTC/接受下一条输入均已验收。实际网页完成任务中补充、停止后继续交流与非静音回复。常规回归明确使用 workspace SDK，156 项通过、4 项真实服务默认跳过。自然人声打断、回声与机器人现场声学体验由用户复测；独立会话不继承 Codex 桌面当前聊天历史。详情见 [原生交互档案](documents/dev_log/2026-10-14/2026-10-14_175823_KID_无Issue_原生Codex语音交互/index.md)。

2026-10-13 初始审批模式：通过真实页面提交只读磁盘查询，原生 Codex 请求执行 Get-CimInstance Win32_LogicalDisk；检查具体命令后单次批准。返回 C/D 盘真实总空间与剩余空间，机器人朗读结果；采样确认非静音 PCM、嘴型及运动目标。随后真人直接对机器人提出磁盘查询，后台执行并由机器人读出结果，用户确认处理完成。

用户随后明确要求完整本机权限。新后台会话已改用 `danger-full-access` / `never`；真实原生工具验收成功执行磁盘查询，取得命令输出且没有任何审批请求。常规 Python 回归 92 项通过、3 项真实服务测试默认跳过；该磁盘验收另行显式运行通过。容量是查询时点的值，会随本机文件变化。

代码回归与语音输入委派验收见 [本次开发档案](documents/dev_log/2026-10-13/2026-10-13_003217_KID_无Issue_语音Codex本机工具能力/index.md)。
