Skip to content

fix(service): persist CODEX_BIN across background service launches#7

Draft
wetlink wants to merge 1 commit into
modelzen:mainfrom
wetlink:codex/preserve-codex-bin-service
Draft

fix(service): persist CODEX_BIN across background service launches#7
wetlink wants to merge 1 commit into
modelzen:mainfrom
wetlink:codex/preserve-codex-bin-service

Conversation

@wetlink

@wetlink wetlink commented Jul 10, 2026

Copy link
Copy Markdown

背景

Bridge 通過 Codex App Server 的 model/list 動態獲取可用模型,因此無需在項目內硬編碼 GPT-5.6。當新版 Codex CLI 僅通過 CODEX_BIN 指定時,前台運行能正常發現 GPT-5.6,但安裝為後台服務後可能重新使用 PATH 中的舊版 Codex。

這會造成同一台機器上的前台與後台行為不一致:前台可以選擇 GPT-5.6,服務重啟或重新登錄後,模型列表中卻不再出現 GPT-5.6,以及新版 CLI 提供的 max / ultra 推理強度。

根因

resolveCodexBin() 已將 CODEX_BIN 作為最高優先級的顯式覆蓋,但三個後台服務適配器生成啟動配置時只保留了 PATH,沒有跨越服務邊界傳遞 CODEX_BIN

當前行為:shell CODEX_BIN -> install/start -> service 僅保存 PATH -> daemon 回退到舊版 codex
修復後:  shell CODEX_BIN -> install/start -> service 保存 CODEX_BIN -> daemon 使用指定 codex

修改內容

平台 服務適配器 修改
macOS launchd EnvironmentVariables 中寫入經 XML 轉義的 CODEX_BIN
Linux / WSL systemd user unit 增加經轉義的 Environment="CODEX_BIN=..."
Windows Startup .cmd 增加 set "CODEX_BIN=..."

同時在 test/service-definitions.test.ts 補充三個平台的專項測試,覆蓋路徑中的空格、反斜線與 XML 特殊字符。

行為與兼容性

  • 僅在調用安裝或啟動命令時顯式設置了 CODEX_BIN 才會寫入服務配置。
  • 未設置 CODEX_BIN 時,生成結果及現有二進制查找順序保持不變。
  • 不硬編碼任何 GPT-5.6 模型 ID,也不修改 model/list、模型選擇卡或默認模型邏輯。
  • 不改變 CODEX_BIN > PATH > 私有安裝 > App Bundle 的既有解析優先級。

用戶影響

依賴自定義或較新版 Codex 二進制的用戶,在服務重啟、系統重新登錄或後台自動拉起後,仍會使用安裝服務時明確指定的同一個 Codex。模型列表與推理強度因此和前台運行保持一致。

驗證

npx vitest run test/service-definitions.test.ts  # 9 tests passed
npm run typecheck                                # passed
npm run build                                    # passed

@wetlink wetlink changed the title fix(service): preserve CODEX_BIN override in background services fix(service): persist CODEX_BIN across background service launches Jul 10, 2026
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