Skip to content

fix(codex): honor custom provider context windows - #3497

Open
xujun0915 wants to merge 3 commits into
makecindy:mainfrom
xujun0915:fix/codex-custom-context-window-3470
Open

fix(codex): honor custom provider context windows#3497
xujun0915 wants to merge 3 commits into
makecindy:mainfrom
xujun0915:fix/codex-custom-context-window-3470

Conversation

@xujun0915

@xujun0915 xujun0915 commented Aug 27, 2026

Copy link
Copy Markdown

这次改了什么

摘要

修复自定义 Codex Provider 的 contextWindow 只影响 Cindy 展示、却仍被 Codex 内置 272K 模型目录夹紧的问题。

Codex 0.145 会用模型目录里的 max_context_window 约束 thread/start|resume 传入的 model_context_window。本 PR 对显式配置窗口的本地自定义 Provider 使用单任务 App Server,从当前 bundled Codex 二进制提取完整静态模型目录,只抬高所选真实 model slug 的 max_context_window,并向 thread 注入实际窗口及 95% 自动压缩阈值。官方订阅、网关和远端 Codex 路径保持原行为。

变更类型

  • feat 新功能
  • fix 缺陷修复
  • refactor / perf 重构或性能优化
  • docs / test / chore 文档、测试或工程维护
  • 其他:

范围

  • 关联 Issue / 需求:Closes Pass custom Codex provider contextWindow to model_context_window #3470
  • 本 PR 包含:显式自定义窗口解析;单任务 App Server;bundled 模型目录提取与定点修补;thread 窗口注入;目录身份预检;同任务 Turn 边界 Handle 重建;启动失败 Host 回收;目录外 slug fallback 兼容;回归测试。
  • 明确不包含:UI 改动;远端 Codex;官方 ChatGPT live catalog;网关已核实窗口的启动覆盖。
  • 用户可见变化:自定义 Provider 填写的 Context window 真正控制 Codex 运行窗口和 auto-compact;例如 700000 对应运行期 665000
  • 是否存在 breaking change:无。跨 custom-context 目录身份切换时复用主干运行时控制事务:空闲任务关闭旧 Handle,忙碌任务在 Turn 结束后关闭;下一条消息仍在同一任务中 cold resume,无需新建任务。

UI 变化

不涉及。

  • 引用的设计规范:不涉及。

怎么验证的

自动验证

pnpm --filter desktop exec vitest run src/main/maker-host/__tests__/codexCustomContextCatalog.test.ts src/main/maker-host/__tests__/catalogDerivedModels.test.ts
结果:36 tests passed

pnpm --filter @cindy/maker-core exec vitest run src/agents/codex/index.test.ts
结果:569 tests passed

pnpm --filter desktop exec vitest run src/main/maker-ipc/__tests__/runtimeSetModel.test.ts
结果:29 tests passed

pnpm --filter @cindy/maker-core exec vitest run src/agents/codex/app-server/host.test.ts src/agents/codex/index.test.ts
结果:594 tests passed

pnpm test:unit:related
结果:全部通过(Desktop、maker-core 及相关 workspace)

pnpm --filter desktop run --if-present typecheck
结果:通过

pnpm --filter @cindy/maker-core run --if-present typecheck
结果:通过(该 package 当前无 typecheck script,按 --if-present 跳过)

git diff --check
结果:通过

pnpm check:dco
结果:1 commit signed off

手工验证

Windows 11(10.0.22631)完整重启 Desktop 后,使用自定义 Provider 的 gpt-5.6-sol,配置 contextWindow=700000。运行期首次及后续窗口回报均为 665000,不再是 258400;实际对话已验证可正常运行。

另外用仓库 bundled codex.exe 完成 App Server 握手与 mock turn:原目录 context_window=272000,修补后 max_context_window=700000,运行期及 rollout token count 均为 665000

未执行的验证

未在 macOS / Linux 上做 Desktop 实机验证;单测覆盖 LF / CRLF bundled 目录、目录跨 chunk 提取、并发持久化与缺失 slug 的 fail-closed 行为。

风险

风险分类

  • 无已知风险
  • SQLite / migration
  • system prompt
  • 协议兼容
  • 权限 / 安全 / 用户数据
  • 存量插件兼容(批准状态 / 指纹 / manifest 校验 / 安装布局 / 包格式)
  • 原生层 / fingerprint / OTA
  • 跨平台差异
  • 其他:依赖 bundled Codex 模型目录的 JSON 格式

影响与回滚

  • 影响范围:仅本地 Codex、自定义 Provider、且模型显式填写 Context window 的新任务。官方订阅、网关、远端任务和未显式填写窗口的自定义模型不受影响。派生目录按内容哈希写入 CODEX_HOME/cindy-runtime/model-catalogs,不含凭证;目录外 slug 或目录预检失败时保留原共享 Host + Codex fallback metadata,精确目录修补阶段异常仍 fail closed。
  • 核心指标:不改 system prompt、tool/MCP 顺序或 translator,缓存率与返回内容不受影响;首次自定义任务扫描 bundled binary,随后进程内缓存并复用内容寻址文件,不进入逐 token 热路径;真实 model slug 保持不变。
  • 回滚 / 降级方式:回退本 PR 提交即可恢复共享 App Server 和 Codex 默认模型目录行为。

提交前检查

  • 已 review 完整 diff
  • 每个 commit 都带 DCO 签名(git commit -s,见 DCO
  • UI 改动已在「UI 变化」注明引用的设计规范(不涉及 UI 则跳过)
  • 未提交凭证、令牌或授权文件
  • 已补充必要文档
  • 已确认测试结果或说明未执行原因

@xujun0915
xujun0915 requested a review from a team as a code owner August 27, 2026 07:27
@greptile-apps

greptile-apps Bot commented Aug 27, 2026

Copy link
Copy Markdown

Greptile Summary

此 PR 为显式配置 Context window 的本地自定义 Codex Provider 创建单任务 App Server,修补 bundled 模型目录上限,并向 thread/startthread/resume 注入实际窗口和自动压缩阈值。

  • 新增 bundled Codex 模型目录提取、定点修补及内容寻址持久化
  • 为 custom-context 会话增加独立 Host、隔离代理和模型切换边界
  • 增加自定义窗口解析、线程配置注入及相关回归测试
  • 当前启动失败路径未回收新建的单任务 App Server

Confidence Score: 4/5

合并前应补齐 custom-context 启动失败时的 Host 回收,否则失败尝试会残留 Codex App Server,并可能在同 sessionId 重试时复用旧目录。

自定义窗口的正常启动和关闭路径具备隔离与回收,但 Handle 返回前的多个失败出口只释放 lease,没有注销并 retire 已登记的单任务 Host。

Files Needing Attention: packages/maker-core/src/agents/codex/index.ts

Important Files Changed

Filename Overview
apps/desktop/src/main/maker-host/codex-custom-context-catalog.ts 新增模型目录提取、目标 slug 上限修补和不可变目录持久化,校验与并发写入处理较完整。
apps/desktop/src/main/maker-host/catalog-to-descriptors.ts 仅为用户 Provider 中显式配置窗口的模型启用运行期覆盖,保持官方及网关路径不变。
apps/desktop/src/main/maker-host/index.ts 将 custom-context Host 接入隔离代理和派生模型目录启动参数,未发现独立的确定性路由错误。
packages/maker-core/src/agents/codex/index.ts 增加单会话 Host、窗口注入和模型切换保护,但启动失败后不会回收已创建的 custom-context Host。
packages/maker-core/src/agents/base-agent.ts 扩展 Host 依赖契约以传递 custom-context 目的、模型和窗口参数。
packages/maker-core/src/agents/codex/index.test.ts 覆盖成功启动、关闭回收和模型切换边界,但没有覆盖启动失败后的 Host 回收。

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart LR
  A[自定义 Provider 会话] --> B[解析显式 Context window]
  B --> C[提取 bundled 模型目录]
  C --> D[抬高目标模型 max_context_window]
  D --> E[创建单任务 App Server]
  E --> F[thread/start 或 thread/resume]
  F -->|成功| G[注入窗口与 95% 压缩阈值]
  F -->|失败| H[当前仅释放 binding lease]
  H --> I[Host 与 App Server 残留]
Loading
Prompt To Fix All With AI
### Issue 1
packages/maker-core/src/agents/codex/index.ts:4213
**启动失败遗留 Host**

当 custom-context App Server 创建后在 initialize、能力准备、`thread/start``thread/resume` 阶段失败时,这些分支只释放 binding lease 并抛错,而 Host 仅能通过成功返回的 handle 的 `close()` 回收,导致失败尝试遗留 Codex 进程;使用同一 sessionId 重试时还会复用首次尝试的静态模型目录。

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.

Reviews (1): Last reviewed commit: "fix(codex): honor custom provider contex..." | Re-trigger Greptile

Comment thread packages/maker-core/src/agents/codex/index.ts

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: a0b5c1b703

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment thread apps/desktop/src/main/maker-host/codex-custom-context-catalog.ts
Comment thread packages/maker-core/src/agents/codex/index.ts
@xujun0915

Copy link
Copy Markdown
Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Bravo.

Reviewed commit: d1bee0fd09

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

@MagicLizi MagicLizi added awaiting-discussion 等待维护者讨论(review-pr) touches:core 改动碰到架构核心路径(review-pr 自动维护,仅展示) labels Aug 27, 2026
@xujun0915

Copy link
Copy Markdown
Author

@makecindy/maintainers 麻烦复审最新提交 d1bee0fd0。此前两条 P1 已修复,review threads 已 resolved,DCO 和本地门禁均通过。

@MagicLizi

Copy link
Copy Markdown
Contributor

本 PR 被维护者确认门拦住(架构:核心路径 + 大 diff)。

虽然标成 fix,但引入了自定义 Provider 的单任务 App Server、bundled 模型目录提取与定点修补,会改变本地 Codex 的宿主/目录行为。需要维护者确认这条路径可以合入。

讨论 issue:#3498

放行方式:维护者直接在本 PR 上 Approve。若要改,请 Request Changes;作者改完后再 Approve。评论或摘标签不能代替 Approve。

@xujun0915
xujun0915 force-pushed the fix/codex-custom-context-window-3470 branch from d1bee0f to 552a7a2 Compare August 27, 2026 09:53
@xujun0915

Copy link
Copy Markdown
Author

@makecindy/maintainers 已按 #3498 更新并 rebase 最新 main。最新提交 552a7a2dd 保留同一任务内热切换:目录身份变化时复用主干 Session close/defer + cold resume 事务,不再要求新建任务;生命周期与失败回收测试已补齐,烦请复审。

@xujun0915

Copy link
Copy Markdown
Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Breezy!

Reviewed commit: 552a7a2dd6

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

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

Labels

awaiting-discussion 等待维护者讨论(review-pr) touches:core 改动碰到架构核心路径(review-pr 自动维护,仅展示)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Pass custom Codex provider contextWindow to model_context_window

2 participants