Skip to content

fix: discover Codex account models and await desktop runtime readiness - #2134

Open
jerrydong1988 wants to merge 1 commit into
TencentCloud:developfrom
jerrydong1988:codex/codex-catalog-desktop-startup
Open

jerrydong1988 wants to merge 1 commit into
TencentCloud:developfrom
jerrydong1988:codex/codex-catalog-desktop-startup

Conversation

@jerrydong1988

Copy link
Copy Markdown

Summary

ChatGPT 设备登录成功后,Octop 仍将模型列表与默认模型重置为固定的三个旧模型;手动获取列表又未适配 Codex 的查询参数和响应格式。Windows 桌面另有一个启动时序问题:已有后端立即通过健康检查时,导航可能早于 WebView2 初始化完成,导致窗口出现前退出。本 PR 将同一次本地修复中的两部分整理到当前 develop。

Fixes #1992
Fixes #1156

模型初始化问题的前期诊断见 #1992 中的补充评论。连接探测也与 #1821 相关。

Changes

  • 登录时查询当前账号的 Codex 模型目录;刷新列表与登录共用解析器,传递现有可配置的 client_version,解析 models[].slug,保留显示名称、服务端顺序、输入类型与上下文长度,过滤隐藏模型并去重。
  • 同账号重新登录保留仍有效的选择和用户模型选项;切换账号重新校验。目录请求失败或登录目录为空时,不覆盖之前的凭证、提供商或活动模型。网络查询在工作线程执行。
  • 连接探测使用现有 Harness 模型工厂,使 Codex 流式 Responses、store=false 和 system → instructions 的适配与实际对话一致;普通 OpenAI /models 行为保持原样。
  • 桌面从主窗口的 WindowRuntimeReady 事件启动后端连接,并以 sync.Once 防止导航后的重复启动。移除初始化前的拖拽覆盖层脚本调度,保留页面加载后的处理。
  • 修复 Windows WSAEADDRINUSE (10048) 检测;移除桌面现有测试的重复 err 声明,以恢复 Windows Go 测试编译。

Related open work

#2001 / #2013 已覆盖模型发现协议的一部分,未覆盖 codex_apply.py 的固定列表、重新登录及默认模型重置。#1837 关注探测参数;这里直接复用 Harness 的实际适配器。#1518 使用相同的 WebView ready 启动方案;这里还移除了就绪前的覆盖层脚本调用,并包含端口识别修复和冷启动/对话/工具实测。

这些是明确重叠的工作,不表示此前 PR 没有处理相关问题。维护者可按合并顺序选择保留已有 PR 的部分;本 PR 的新增覆盖范围是完整的登录初始化、配置保留和经过验证的本地端到端流程。

Reproduction

Codex models

  1. 在未修复的 Octop 1.0.2b8 中,通过内置 ChatGPT 设备码流程完成登录。
  2. 查看 openai-codex:列表固定为 GPT-5.4、GPT-5.4 mini、GPT-5.5;活动模型固定为 gpt-5.4。
  3. 点击“获取模型列表”。Bug: Codex 获取模型列表缺少 client_version,且未适配返回格式 #1992 已记录缺少 client_version 的 HTTP 400;仅补参数仍会因 models[].slug 与 data[].id 格式不同而失败。
  4. 已有模型选择时重新登录:原实现的更新路径再次写入固定列表并重置活动模型。此步骤的原始依据为源码;修复后行为由自动化测试覆盖。

预期:以当前账号目录为准,同账号重新登录保留有效设置,失败时保留之前的数据并显示错误。

Windows desktop

  1. 保持 Octop 后端运行,确认 http://127.0.0.1:8088/api/health 立即返回成功,同时关闭桌面壳。
  2. 启动 Octop.exe;可用进程级 OCTOP_DESKTOP_URL=http://127.0.0.1:8088 隔离后端启动因素。
  3. 未修复程序在窗口出现前以退出码 1 结束,后台仍可访问。[bug] Windows 桌面在后台已就绪时启动闪退:WebView2 初始化期间 SetURL/Navigate 空指针 #1156 包含 WebView2 SetURL → Navigate 在初始化期间发生空指针的调试栈;普通日志中的 Chrome_WidgetWin_0 注销错误不被当作根因。

预期:等待 WebView 就绪后导航;已有后端与无后端两种启动路径都可正常显示桌面。

Target branch

  • Base is develop
  • Base is main

Type of change

  • Bug fix
  • New feature
  • Breaking change
  • Documentation
  • Refactor / chore
  • Release / hotfix

Test plan

Current develop-based branch

基于 develop 的 e244ec15,使用独立开发环境(Windows、Python 3.12.9、octop-harness 1.0.4)。

  • 新增 26 个回归用例,使用临时 SQLite 数据库和 HTTP MockTransport,覆盖目录协议、普通 OpenAI 接口隔离、账号切换、同账号设置保留、目录失败时无写入,以及设备登录不阻塞事件循环。

  • 定向运行模型、OAuth、连接探测、获取模型接口及 i18n 测试:142 passed(2 条依赖弃用警告)。

  • Windows 桌面:go test ./...、go vet ./...、go build -mod=readonly -buildvcs=false 均通过。

  • Ruff 检查及格式检查通过;mypy 检查 596 个源文件通过。

  • 完整 make all PYTEST_JOBS=4:4,797 passed, 222 skipped, 17 warnings,退出码 0。警告来自 ldap3 / pyasn1、lark_oapi 与 discord 的依赖弃用提示。

  • 正常执行仓库 pre-commit 钩子:pytest --testmon -n 4 4,798 passed, 256 skipped, 17 warnings,随后 tsc -b && vite build 成功;钩子退出码 0。前端有大 chunk 体积提示。未跳过提交钩子。

Authenticated local validation, 2026-10-17

以下实测来自本机已部署的 1.0.2b8 补丁版(Python 3.12.12、octop-harness 1.0.3、Windows 11 x64、Go 1.25.14 / Wails v3.0.0-beta.13),不将其冒充为当前 develop 全量源码的重新部署实测:

  • ChatGPT Pro 100 设备登录渠道返回 7 个可选择模型;界面“获取模型列表”和“测试连接”成功,未使用 Platform API Key。列表随账号和服务端变化,不在补丁或测试中固定为这 7 个名称。
  • GPT-6.1-Sol、GPT-6-Astra、GPT-6-Sol、GPT-6-Luna 完成真实流式对话,响应元数据匹配所选模型;Sol/Luna 完成 Harness 工具执行和结果回传闭环。
  • 原安装程序复现 exit code 1;修复桌面连续 3 次已有后端启动通过,另一次无后端冷启动自动启动 Python 服务并显示已登录的原有界面。
  • 原生桌面 GPT-6.1-Sol 新对话返回 OCTOP_DESKTOP_OK_73;真实 write_todos 调用返回 status=success,UI 显示“已完成 1/1”,最终回复 OCTOP_DESKTOP_TOOL_OK_73。
  • 核对原有配置、提供商设置、专家绑定、原有消息以及之前模型补丁的文件哈希,均保留(专家启动时间戳正常更新)。

验证范围为短对话和工具闭环;未逐一测试全部模型的全部工具、长上下文、图像输入、令牌过期续期或 macOS/Linux 原生桌面。没有上传 OAuth 凭证、私有数据库、用户配置或原始私人会话。

Checklist

  • Updated CHANGELOG.md
  • Added/updated regression tests
  • New catalog errors use backend English/Chinese i18n bundles
  • Reproduction steps and validation scope documented above

Prepared with AI assistance.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant