【免费下载链接】Codex-App-Manager
跨平台官方 Codex 桌面应用的安装 / 增量更新 / 干净卸载管理器,内置国内可达的镜像自更新。Cross-platform installer & updater for the official Codex desktop app — incremental updates, clean uninstall, China-reachable self-update.
Codex App Manager 主题引擎(codex-theme-engine)能让官方 Codex 桌面应用直接"穿上"皮肤,而全程不修改、不解包、不替换任何一个应用文件——app.asar 原样保留,公证签名持续有效,关掉主题即恢复官方外观。它靠的核心技术是 CDP(Chrome DevTools Protocol,Chrome 开发者工具协议)注入:通过本机回环地址把主题的 CSS、图片素材和装饰层"运行期注入"到正在运行的 Codex 渲染器里。本文带你完整走一遍这套皮肤注入机制的设计与实战细节。
🧩 核心原理:是"注入",不是"修改"
很多第三方皮肤工具的思路是改动应用安装文件(解包 asar、替换资源、再重新打包)。这类做法有三个硬伤:破坏签名校验、升级后皮肤失效、出问题无法一键还原。
Codex App Manager 主题引擎选择了完全不同的路线:
| 对比维度 | 传统改文件方案 | codex-theme-engine 的 CDP 注入 |
|---|---|---|
| 应用文件 | 解包/替换/重打包 | 一个字节都不动 |
| 签名与公证 | 破坏 | 保持有效 |
| 官方升级 | 皮肤可能失效 | 升级后重新注入即可 |
| 还原方式 | 手动恢复 | 关闭主题,立即恢复官方外观 |
Codex 桌面应用基于 Chromium 渲染器,天生带有 Chrome 开发者调试通道。Manager 在需要皮肤时,会让 Codex 以调试模式启动——在 macOS 上等价于追加参数 --remote-debugging-address=127.0.0.1 --remote-debugging-port=9345(见 codex_theme.rs),固定使用本地端口 9345(THEME_CDP_PORT)。之后所有注入都走这条只监听在 127.0.0.1 的通道。
📦 皮肤包解剖:一个目录就是一套皮肤
主题引擎里的一个皮肤就是一个目录,结构极其简单(加载逻辑在 theme.rs):
<主题id>/
theme.json 必需 —— 元数据、配色、文案、素材映射
theme.css 必需 —— 选择器必须限定在 html.codex-theme-studio 下
chrome.html 可选 —— 装饰性覆盖层片段
assets/*.webp 位图素材
assets/*.mp4 可选 —— 动效素材(如开场视频)
官方测试夹具 golden/theme.json 就是一个最小可用的真实示例:
{
"schemaVersion": 2,
"id": "golden-fixture",
"name": "Golden fixture",
"chrome": "chrome.html",
"assets": { "wall": "assets/wall.png" },
"motionAssets": { "intro-video": "assets/intro.mp4" }
}
为了控制注入体积,加载时会做严格校验(theme.rs):
- 单张静态图片上限 1.4 MB(Chromium 对超过 2 MB 的 data URL 会静默失效,所以留了余量)
- 全部素材合计上限 24 MB
- 引用的文件必须留在主题目录内,禁止
../路径逃逸
皮肤最终呈现的效果,可以看看社区皮肤在真实 Codex 窗口里的样子——整套界面(壁纸、侧栏、输入框材质、图标)全部来自注入的样式层:
🔌 CDP 注入流程:三步定位"真正的 Codex 窗口"
拿到 9345 端口后,cdp.rs 里的客户端按三步工作:
第 1 步:只信任本机回环。 每个调试目标都会先经过 validated_debugger_url 检查——不是 ws://127.0.0.1:9345 开头的地址一律拒绝,守护进程绝不会被"诱骗"去连接网络上的任何调试端口。
第 2 步:列出候选目标。 通过回环 HTTP 请求 /json/list 拿到所有 app:// 页面目标,主窗口排在前、预热窗口排在后。
第 3 步:探测确认是 Codex 壳。 连上每个候选目标后,执行一段探测表达式 PROBE_EXPRESSION,检查页面里是否存在 Codex 特有的壳标记(主内容区、左侧栏、输入框容器)。探测不通过的目标直接断开,避免把皮肤注入到不相干的窗口。
还有一个贴心细节:Codex 的桌面宠物窗口是独立透明渲染器,一旦套上带背景的皮肤会变成不透明色块,所以 is_theme_excluded_target 会把宠物窗口精确排除在主题范围之外。
🎨 载荷组装:把整套皮肤打包成一次 evaluate
真正注入时,payload.rs 会把主题目录组装成一个可执行的 JS 载荷:
- 静态图片全部内联成 CSS 自定义属性里的
data:URL(--cts-asset-*),绕开运行时取文件的网络依赖; - 动效素材(如开场视频)走独立的 data URL 槽位,天然兼容 Codex 页面已有的媒体策略,无需绕过 CSP;
- 渲染器运行时(theme-runtime.js)负责在页面里安装样式层、装饰层(overlay/stage 两层)、图标标注,并且幂等、可重入、可完全回滚;
- 整个载荷会被打上一个指纹 stamp,格式是
引擎版本:主题id:SHA1前12位。皮肤里任何字节变化(哪怕换一段视频)都会改变指纹,从而触发重新注入。
运行时的"防闪烁纪律"也值得一说:注入的运行时会在每次 DOM 变更时重新对账,所有写操作都先比较值——重复写相同值也会触发 Chromium 重绘闪烁,这套纪律保证了皮肤在日常操作中肉眼不可见的稳定。
🔄 常驻守护:页面刷新后自动"补妆"
Codex 的 quick-chat 窗口、预热窗口会随时出现和消失,页面刷新还会把注入状态清空。这些全部由进程内守护进程 daemon.rs 兜底:
- 每 900 ms 清点一次目标:新窗口出现就连上并注入,失效会话就关闭;
- 每个窗口读取自己携带的 stamp,只有不一致时才重新注入或卸载——避免无谓地反复传输几十 MB 的载荷;
- 页面刷新后 stamp 归零,最多滞后一个 tick 就会自动恢复;
- Manager 退出时刻意不卸载皮肤:运行中的 Codex 继续保持主题,只有显式的"关闭"指令才会移除。
🧹 干净卸载与安全边界
想恢复原貌?payload.rs 里的 REMOVE_EXPRESSION 会拆除所有注入层(样式节点、装饰层、舞台、开场动画、全部语义标记和 CSS 变量),并逐条验证"确实干净了"(VERIFY_REMOVED_EXPRESSION)。由于从没动过应用文件,卸载后 Codex 就是出厂状态。
围绕皮肤导入与原生配置,还有两层安全机制:
.codexskin导入(import.rs):压缩包限 50 MB、解压限 100 MB、条目限 500 个,zip-slip 路径逃逸全部拒绝;- 原生外观配置事务(transaction.rs、native.rs):修改
~/.codex/config.toml时按行级保留用户原有注释与空白,每一步都有日志、预写镜像与自动回滚,失败会进入recovery_required状态拒绝后续写入而不是留下半成品。
📁 模块地图:去哪里读这些代码
| 职责 | 文件 |
|---|---|
| 引擎总览与错误定义 | crates/codex-theme-engine/src/lib.rs |
| 主题包加载与校验 | crates/codex-theme-engine/src/theme.rs |
| CDP 客户端、目标发现与探测 | crates/codex-theme-engine/src/cdp.rs |
| 载荷组装与 stamp 指纹 | crates/codex-theme-engine/src/payload.rs |
| 渲染器侧注入运行时 | crates/codex-theme-engine/src/runtime/theme-runtime.js |
| 常驻守护与对账 | crates/codex-theme-engine/src/daemon.rs |
| 原生外观(config.toml / 热同步) | native.rs、native_hot.rs |
| 应用层编排(调试端口、重启注入) | src-tauri/src/app/codex_theme.rs |
| 输入框兼容设计说明 | docs/composer-compatibility.md |
📝 一句话总结
codex-theme-engine 的精髓,是把"换皮肤"从磁盘操作变成了运行期会话:一条只监听 127.0.0.1:9345 的 CDP 通道、一套严格校验的主题目录、一个 900 ms 对账的守护进程,再加上一份可逐字节回滚的卸载契约——皮肤想穿就穿、想摘就摘,官方应用始终纤尘不染。
【免费下载链接】Codex-App-Manager
跨平台官方 Codex 桌面应用的安装 / 增量更新 / 干净卸载管理器,内置国内可达的镜像自更新。Cross-platform installer & updater for the official Codex desktop app — incremental updates, clean uninstall, China-reachable self-update.
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考








