Description
The model whitelist unlock feature (codexAppModelWhitelistUnlock) fails to inject custom models into the Codex app model selector. The inject script cannot locate the app-server-manager-signals- module asset in the Codex app.
Error from Logs
renderer.model_app_server_request_patch_failed
Error: 鏈壘鍒?Codex App asset: app-server-manager-signals-
This error repeats on every scan cycle (model_whitelist_refresh_scheduled).
Environment
- Codex++ version: 1.2.31 (also reproducible on 1.2.30)
- Codex App version: 26.623.13972.0 (Windows x64)
- OS: Windows 11
Steps to Reproduce
- Install Codex++ 1.2.31
- Configure a relay profile with
modelList containing custom models (e.g. deepseek-v4-flash\ndeepseek-v4-pro)
- Set
codexAppModelWhitelistUnlock: true in settings.json
- Start Codex++ and open the Codex app
- Check the model selector - only default models appear, custom models are missing
Root Cause Analysis
In renderer-inject.js, the function installAppServerModelRequestPatch() calls loadCodexAppModule("app-server-manager-signals-") which uses codexAppAssetUrl() to search for a JS file matching /assets/app-server-manager-signals-*.js in the loaded scripts and performance entries.
In Codex version 26.623+, this module appears to have been renamed, removed, or restructured as a dynamic chunk. The asset discovery mechanism cannot find it, causing the patch to fail.
The /codex-model-catalog bridge endpoint also returns {"status":"not_configured"} despite the relay profile having a populated modelList, which suggests the Rust backend may also need adjustment to properly read and serve the model catalog from relay profiles.
Suggestion
- Update the asset discovery in
loadCodexAppModule() to handle the new Codex app module structure
- Add a graceful fallback in
installAppServerModelRequestPatch() so the other whitelist patch layers (Statsig config, React state, Response JSON) continue working when layer 3 fails
- Verify that
read_codex_model_catalog() in model_catalog.rs correctly serves models from relay_profile_model_ids() for relay profiles with populated modelList
Workaround
Currently using a batch script to switch between relay profiles by directly editing settings.json and restarting Codex++, bypassing the model selector UI entirely.
Description
The model whitelist unlock feature (
codexAppModelWhitelistUnlock) fails to inject custom models into the Codex app model selector. The inject script cannot locate theapp-server-manager-signals-module asset in the Codex app.Error from Logs
This error repeats on every scan cycle (
model_whitelist_refresh_scheduled).Environment
Steps to Reproduce
modelListcontaining custom models (e.g.deepseek-v4-flash\ndeepseek-v4-pro)codexAppModelWhitelistUnlock: truein settings.jsonRoot Cause Analysis
In
renderer-inject.js, the functioninstallAppServerModelRequestPatch()callsloadCodexAppModule("app-server-manager-signals-")which usescodexAppAssetUrl()to search for a JS file matching/assets/app-server-manager-signals-*.jsin the loaded scripts and performance entries.In Codex version 26.623+, this module appears to have been renamed, removed, or restructured as a dynamic chunk. The asset discovery mechanism cannot find it, causing the patch to fail.
The
/codex-model-catalogbridge endpoint also returns{"status":"not_configured"}despite the relay profile having a populatedmodelList, which suggests the Rust backend may also need adjustment to properly read and serve the model catalog from relay profiles.Suggestion
loadCodexAppModule()to handle the new Codex app module structureinstallAppServerModelRequestPatch()so the other whitelist patch layers (Statsig config, React state, Response JSON) continue working when layer 3 failsread_codex_model_catalog()inmodel_catalog.rscorrectly serves models fromrelay_profile_model_ids()for relay profiles with populatedmodelListWorkaround
Currently using a batch script to switch between relay profiles by directly editing
settings.jsonand restarting Codex++, bypassing the model selector UI entirely.