跳转到正文
返回

dot 显示 Offline:一次本地 Codex 连接故障的排查与修复

本文首发于 X(Twitter)@chao_zhao_1985:原文链接

文章封面

桌面 Codex 能正常使用,dot 却把这台电脑标成 Offline。重启过应用,问题还在。这种情况下,从哪里查起?

这次 Windows 排查找到了两处问题:官方执行器没有继承电脑已有的代理环境;第一次生成的启动文件又因路径转义错误,没有真正启动桌面应用。

修正后,桌面应用与官方执行器都继承了代理环境,执行器日志记录了连接到 rendezvous。网络连接已有运行证据,dot 实际读取本机文件仍待验收。

下面记录完整的判断过程、最小修复,以及最后该如何验证。

先确定问题卡在哪一段

文章配图

dot 访问本机文件,至少要经过四个阶段:

网络连接 → dot 访问授权 → 本地任务工作目录准备 → 实际文件读取。

Offline 需要先查网络和执行器状态;可以连接却不能启动任务,要看授权与工作目录准备;任务启动后读不到文件,再查执行电脑、绝对路径和读取错误。

尤其不要只凭 DesktopTaskWorkspaceUnavailableError 就认定“目录权限不够”。它是上层错误,底层也可能是进程来源校验失败。完整错误链比错误名称更有用。

诊断必须针对当前桌面应用

我先核对了真正运行的应用路径、安装包版本、OpenAI 签名,以及桌面应用使用的 CLI。

本案产品名称是 Codex,桌面进程名称却是 ChatGPT.exe。安装包版本为 26.930.3930.0,实际使用的 CLI 为 codex-cli 0.160.0。运行时 CLI 的哈希与当前安装包中的文件一致。

这里的版本号只是案例快照。诊断时应该使用自己当前桌面应用的 CLI,不能随手调用终端里另一份旧 codex。

在确认来源后,用 CLI 的完整路径检查:

$CliPath = Read-Host ‘粘贴已确认的桌面运行时 CLI 完整路径’ & $CliPath —version & $CliPath doctor —help

帮助明确支持后,再运行 doctor —json。报告先在本机查看,分享时只提取脱敏结论。

网页能打开,执行器仍可能连不上

最近连接失败时间附近,日志反复出现:

Noise executor failed to connect to rendezvous noise_reason=“websocket_error”

这把本案故障定位到了网络阶段。官方诊断中的 HTTP 检查可以通过,WebSocket 检查却失败。

因此,普通网页能打开,不能证明执行器连接正常;未经认证的请求返回 403,也不足以判定登录失效。

接下来查到了真正关键的差异:电脑已经使用代理,但桌面主进程、app-server 和 exec-server 都没有继承相关代理环境变量。

在终端里查看环境,只能证明这个终端有什么变量。检查对象必须是正在运行的桌面应用及执行器,而且只读取必要的代理项,不输出完整环境。

用同一个 CLI 比较直连和现有代理

我核实了本机代理的实际协议、端口和监听进程,然后仅对诊断进程临时设置代理环境,进行对照:

文章配图

这支持了“代理环境缺失影响连接”的判断,但当时还不能宣布 dot 修好了。

原因是:doctor 这里检查的是 Responses WebSocket;dot 执行器的 rendezvous 连接,需要在真正启动桌面应用后核对实际日志。

如果直连和代理都成功,或两者都失败,就不能照搬这个修复方案。

最小修复:由签名桌面应用启动官方执行器

文章配图

修复方案很小:给本次启动的正确桌面应用设置已有代理环境,由桌面应用自己启动官方执行器。

保留的关系是:启动文件 → 签名桌面应用 → 官方执行器。

没有修改系统代理、登录、配置历史、防火墙或证书,也没有写入持久环境变量。

不要用 Python 或外部监督进程单独替代桌面执行器。网络连通以后,进程来源校验仍可能拒绝本地工具。若日志确实出现 untrusted-process-ancestry,应恢复官方启动链路,不伪造来源或就绪状态。本案没有出现这项错误。

第一次启动文件为什么失败?

第一次生成的启动文件经过多层字符串转义,Windows 路径中的反斜杠丢失了。签名检查于是报“找不到文件”,桌面应用根本没有通过该文件启动。

这是启动文件的路径缺陷,不能当成应用签名失效。

修正时,CMD 只保留简单入口,具体逻辑放进独立 PowerShell 文件;先用 Resolve-Path 解析绝对路径,再用同一路径校验签名、检查退出状态和启动。

只读验证通过后,保存工作,通过菜单或托盘完整退出桌面应用,保持已有代理运行,再回终端按回车。由启动文件打开应用。

真正重启后,证据发生了变化

新进程检查确认:桌面应用和官方执行器都继承了代理变量,执行器的父进程是桌面应用。

新进程对应的日志也出现了:

Local Work executor connected to rendezvous

这才是本案网络连接恢复的运行证据。connected 标签依然不能替代文件读取验收。

最后一步:让 dot 读取一个新的随机文件

先通过正式电脑设置检查授权:dot 详情 → Computers → 这台电脑 → Allow → Allow access。

已经成功的授权就保留。官方说明中,Offline 并不表示已有授权被撤销;功能适用范围及桌面版本要求也应按自己的场景核对。官方本地访问说明

接着在本机创建一个不含私人信息的随机文本文件:

只把绝对路径交给 dot,不要预先告诉它验收码。可以直接使用下面的要求:

请在我的这台 Windows 电脑上启动只读任务,实际读取文件:[替换为刚才生成的绝对路径]。不得使用云电脑的同名文件、历史结果、缓存或猜测内容替代。成功时返回执行电脑、读取路径、文件内的 acceptance_code、原始文件字节数、读取时间与时区,以及本次工具执行结果。失败时返回错误原文及底层错误链,标明失败发生在网络连接、访问授权、工作目录准备还是实际文件读取阶段。

收到回执后,用本机原始文件核对随机码和字节数,同时确认实际执行位置及本次工具结果。

只有这些证据吻合,才能宣布“这一次本机只读链路通过”。没有回执,就保持“待验收”;一次小文本读取通过,也不能扩大为所有项目或写入能力都已验证。

回退和以后重启

代理环境只作用于此次启动的桌面应用及子进程。完整退出应用,再从正常入口打开,即恢复原启动环境。

如果网络仍依赖该代理,完整退出应用或重启电脑后,需要再次使用这个启动方式。应用路径、版本或代理端口变更时,也要重新核实。

本案已经验证了代理继承和官方执行器连接恢复。最后的随机文件读取,仍等 dot 的实际回执。

这套排查方法的价值,是让每一步都有对应证据:知道故障发生在哪里,知道改动影响了什么,也知道距离真正验收还差什么。

———



上一篇
从流量入口,到决策入口:AI 正在重新定义电商竞争