Releases: Cmochance/codex-app-transfer
Release list
v2.2.1
Codex App Transfer v2.2.1
中文
为 Codex 模型新增联网抓取工具 web_fetch
本版本给 Codex 模型新增内置联网抓取工具 web_fetch:transfer 以最小 stdio MCP server 暴露,模型请求后由 transfer 代抓、抽正文、用总结模型针对 prompt 作答只回摘要,省 Codex context。三档后端按需升级,默认关闭、不擅自注册或下载 Chrome。
本次改动:
web_fetch三档后端:curl(静态)/wreq(Chrome120 指纹绕 Cloudflare)/headless(无头 Chromium 跑 JS);启用时幂等注册 MCP server 到~/.codex/config.toml,切档免重启。- 抓取后处理:
dom_smoothie抽正文 +htmd转 markdown + 总结模型作答;大页按相关性选块、二进制 / 16MB 闸门、剥<think>;失败回退原文不丢内容。 headless反检测 stealth:抹navigator.webdriver、伪造window.chrome、UA 去HeadlessChrome,过被动指纹与简单 JS 挑战(交互式 Turnstile 除外)。- 新增
crates/http(wreqChrome120 伪装)+ Dependabot 四层依赖跟踪(周 cron CF 金丝雀 / 升级 PR 验指纹 / pre-push 门禁)。 - 修复:proxy 强制
gateway key消除无鉴权;MiniMax compact 非法 JSON + 新增MiniMax-M3;Theme CSP 兼容;context footer live atom。
验证
cargo fmt --checkcargo check --workspace --exclude codex-app-transfercargo test --workspace --exclude codex-app-transfercargo test -p codex-app-transfer-http --test cf_bypass -- --include-ignored
English
New web_fetch tool: built-in web fetching for the Codex model
This release adds a built-in web_fetch tool for the Codex model: transfer exposes it via a minimal stdio MCP server, fetches the page, extracts main content, has a summarizer model answer the caller prompt, and returns only the summary — saving Codex context. Three backends escalate on demand; off by default, no tool registration or Chrome download without consent.
Changes in this release:
web_fetchthree backends:curl(static) /wreq(Chrome120 fingerprint past Cloudflare) /headless(headless Chromium running JS); when enabled it idempotently registers an MCP server into~/.codex/config.toml, switching needs no restart.- Post-fetch:
dom_smoothiecontent extraction +htmdmarkdown + a summarizer model; large pages use relevance selection, binary / over-16MB gating,<think>stripping; failures fall back to raw content. headlessstealth: clearsnavigator.webdriver, spoofswindow.chrome, stripsHeadlessChromefrom the UA, passing passive-fingerprint and simple JS-challenge Cloudflare (interactive Turnstile excepted).- New
crates/http(wreqChrome120 impersonation) plus four-tier Dependabot tracking (weekly CF canary / on-bump fingerprint check / pre-push gate). - Fixes: proxy forces a
gateway keyremoving no-auth mode; MiniMax compact invalid JSON plus newMiniMax-M3; Theme page CSP; context-usage footer live atom.
Verification
cargo fmt --checkcargo check --workspace --exclude codex-app-transfercargo test --workspace --exclude codex-app-transfercargo test -p codex-app-transfer-http --test cf_bypass -- --include-ignored
v2.2.0
Codex App Transfer v2.2.0
中文
真实 ChatGPT 账号 plugin 模式(relay)加系统代理连通 gate 与协议层修复
本版新增用真实 ChatGPT 账号原生解锁 Codex Plugins 的 relay 路径,替掉 CDP 伪造态的高启动延迟,配套系统代理连通检测,把"账号已登录但梯子没开"的静默失效显式化。
本版改动:
- 真实账号 plugin 模式(MOC-104):应用内
codex login/ 文件导入 / 强制兜底 / 清除账号;relay 保留auth_mode=chatgpt让 Codex 原生显示 Plugins、不启 CDP daemon。transfer 与本机 Codex 共享auth.json,双刷 single-use token 会refresh_token_reused烧号,故 transfer 不刷新、只由源头刷。 - 系统代理连通 gate(MOC-114):新增
GET /api/system-proxy/status,对代理端口做 800ms TCP 探测、不碰 chatgpt.com;仪表盘加网络代理状态卡,解锁 gate 于账号有效且代理可达。 /responses/compact透传(MOC-113):apiFormat=responsesprovider 的 compact 请求字节透传上游,不再强转本地 chat。- 稳定性:
config.toml内容无变化跳过写盘、消除设置页Configuration was modified误报(MOC-115);chat 路径非 2xx 改写为合规response.failed、永久错误不再卡 Thinking(MOC-103)。 - Plugins 注入重启健壮性(MOC-100):重新启用注入,修 daemon 退避、单实例重启、注入时序、端口重连等根因。
验证
cargo fmt --all -- --checkcargo test --workspacecargo test -p codex-app-transfer system_proxy
English
Real ChatGPT account plugin mode (relay) with a system-proxy reachability gate and protocol fixes
This release adds a relay path that unlocks Codex Plugins with a real ChatGPT account (not a CDP-spoofed login with its startup latency), plus a paired system-proxy reachability check that surfaces the "logged in but the proxy is down" silent failure.
Changes in this release:
- Real-account plugin mode (MOC-104): in-app
codex login/ import / force fallback / clear account; relay keepsauth_mode=chatgptso Codex shows Plugins natively with no CDP daemon. Transfer and the local Codex shareauth.json, and double-refreshing the single-use token tripsrefresh_token_reused, so transfer never refreshes — only the source does. - System-proxy reachability gate (MOC-114): new
GET /api/system-proxy/statusdoes an 800ms TCP probe of the proxy port, never touching chatgpt.com; a Network Proxy dashboard card is added and unlock gates on account-valid AND proxy-reachable. /responses/compactpassthrough (MOC-113): compact requests forapiFormat=responsesproviders pass through byte-for-byte, not a local chat call.- Stability: skip writing
config.tomlwhen unchanged, clearing theConfiguration was modifiedfalse alarm (MOC-115); chat-path non-2xx becomes a compliantresponse.failedstream so permanent errors surface instead of hanging on Thinking (MOC-103). - Plugins injection restart robustness (MOC-100): re-enabled injection; fixed daemon backoff, single-instance restart, inject timing, and reconnect.
Verification
cargo fmt --all -- --checkcargo test --workspacecargo test -p codex-app-transfer system_proxy
v2.1.18
Codex App Transfer v2.1.18
中文
主题引擎模块化(5 到 11)+ Gemini 系一致性 + Windows 原生进程提速
本版自 v2.1.17 起合入 14 个 PR:主题引擎模块化扩到 11 套,补齐 Gemini / antigravity 一致性,并用原生 Win32 替掉 PowerShell-WMI 路径。
本版改动:
- 主题引擎模块化(MOC-97):重写为每主题调色板,内置主题 5 到 11(新增
frost/nocturne/duet/rose/sonata/studio),按背景图调色并覆盖 Codex 设计令牌修好各视图,在重启 Codex 后自动重新应用(MOC-73)。 - Gemini / antigravity 一致性:传输指纹对齐官方客户端(MOC-59),模型列表补
displayName、recommended 排序与过滤两款 claude(MOC-69),上游非 2xx 对齐 Codex 重试白名单,永久错误 surface 不再卡死(MOC-79)。 - apply_patch 与 compact:freeform 工具补请求 input 与响应
custom_tool_call(MOC-75),chat 路径补截断检测与 V4A 后验(MOC-57),compact 删 disable-thinking 的reasoning_effort(MOC-87)并支持 Gemini 系上游(MOC-92)。 - Windows 原生进程:启动改用原生进程枚举替
tasklist加 AUMID 缓存提速(MOC-94),退出改用原生PostMessage(WM_CLOSE)(MOC-95)。 - 设置与配置:加开关默认隐藏灰色 provider preset(MOC-91),语言持久化与 endpoint 去重(MOC-70 / MOC-72),直连模式只写上游配置。
验证
cargo fmt --all -- --checkcargo test --workspacecargo test -p codex-app-transfer
English
Modular theme engine (5 to 11) plus Gemini-family consistency and native Windows process speedups
This release merges 14 PRs since v2.1.17: the theme engine goes modular and grows to 11 built-ins, Gemini / antigravity consistency is rounded out, and PowerShell-WMI is replaced with native Win32 calls.
Changes in this release:
- Modular theme engine (MOC-97): rewritten into per-theme palettes, the set grown from 5 to 11 (new
frost/nocturne/duet/rose/sonata/studio), each colored from its background, overriding the Codex design tokens to fix every view, reapplying after a Codex restart (MOC-73). - Gemini / antigravity consistency: the wire fingerprint matches the official client (MOC-59), the model list gains
displayName, recommended ordering and filtering of two claude entries (MOC-69), and non-2xx responses follow the Codex retry whitelist so permanent errors surface instead of hanging (MOC-79). - apply_patch and compact: freeform tools get request input and a
custom_tool_callresponse (MOC-75), the chat path gains truncation detection and V4A post-validation (MOC-57), and compact stripsreasoning_efforton disable-thinking (MOC-87) while supporting Gemini-family upstreams (MOC-92). - Native Windows process handling: startup uses native enumeration instead of
tasklistwith an AUMID cache (MOC-94), and quit uses nativePostMessage(WM_CLOSE)(MOC-95). - Settings and config: a toggle hides gray provider presets by default (MOC-91), language persists and endpoints are de-duplicated (MOC-70 / MOC-72), direct mode writes only upstream config.
Verification
cargo fmt --all -- --checkcargo test --workspacecargo test -p codex-app-transfer
v2.1.17
Codex App Transfer v2.1.17
中文
tool_search 工具链打通 + MCP 授权可移植保险箱 + Usage 命中率与稳定性修复
本版自 v2.1.16 起合入 16 个 PR:打通 Codex 0.130+ 的 tool_search MCP 工具链、把 MCP 授权做成可移植可恢复的保险箱,并补 Usage 缓存命中率与一批稳定性修复。
本版改动:
tool_search工具链全链路:Codex 0.130+ 把 server-side MCP 工具 defer 到tool_search、不再直接进tools[],代理此前会 silently drop;现 chat 路径打通(发现 → 注入 → 按namespace路由回上游),并加 dropped-tools 计数器与 observability。- MCP 授权可移植保险箱(默认开):凭据改存可移植
~/.codex/.credentials.json并维护~/.codex外镜像,整文件被切账号 / 误删 / 换机清掉时下次启动弹确认恢复,单 server 主动登出不复活;不解决 OAuth 过期。 - Usage 缓存命中率:按对话显示命中率与逐轮命中率直方图,模型列显示真实上游模型而非
gpt-5.x占位。 - Code Graph 自动生成:
cargo metadata出交互式 crate 依赖图,GitHub Actions 部署到 Pages。 - 稳定性修复:
apply_patchchat 长文档信封、启动防白屏 try-catch、model_catalog.json自动同步、关闭桌面宠物开关真正生效、残留扫描启动竞态与活跃度图单点态。
验证
cargo fmt --all -- --checkcargo test --workspacecargo test -p codex-app-transfer
English
tool_search tool chain wired + portable MCP auth vault + Usage hit rate and stability fixes
This release merges 16 PRs since v2.1.16: it wires the Codex 0.130+ tool_search MCP tool chain, turns MCP authorization into a portable recoverable vault, and adds Usage cache-hit-rate plus a batch of stability fixes.
Changes in this release:
tool_searchtool chain: Codex 0.130+ defers server-side MCP tools totool_searchinstead oftools[], which the proxy used to silently drop; the chat path is now wired (discover, inject, route back bynamespace), with a dropped-tools counter and observability.- Portable MCP auth vault (on by default): credentials move to a portable
~/.codex/.credentials.jsonwith a mirror kept outside~/.codex; if the whole file is wiped by an account switch, delete, or new machine, the next launch prompts to restore, while an intentional per-server logout is respected; OAuth expiry is not solved. - Usage cache hit rate: per-conversation hit rate with a per-prompt histogram, and the real upstream model shown instead of the
gpt-5.xplaceholder. - Code Graph:
cargo metadatagenerates an interactive crate dependency graph deployed to Pages via GitHub Actions. - Stability fixes:
apply_patchlong-document envelope on the chat path, white-screen try-catch on startup, automaticmodel_catalog.jsonsync, the desktop-pet toggle truly disabling, and the residual-scan startup race plus activity-chart single-point state.
Verification
cargo fmt --all -- --checkcargo test --workspacecargo test -p codex-app-transfer
v2.1.16
Codex App Transfer v2.1.16
中文
Token 用量统计 + 启用按钮重启解耦
本版主要补全两个长期用户痛点:① 新增独立 Usage tab 展示对话 token 用量(单对话 / 按日 / 按模型聚合,真实数据 28896 turns / 194 conversations / 3.8B tokens 测过);② 解耦『启用』按钮跟『重启 Codex Desktop』的强绑定 — 之前误点重启会让 Codex 进程被杀、对话上下文 / 草稿 / 思考过程全丢。
- 新增
Usagetab(MOC-15 / PR #280):sidebar 第 4 个入口,4 张顶部 KPI 卡(总 input / output / tokens / conversations)+ 三视图切换(按日 / 按模型 / 按对话)+ ccusage 同款表格形态(Date / Model / Input / Output / Reasoning / Total / Turns / Last)。零 chart lib 依赖。 - 用量解析层完全 vendor 自 ryoppippi/ccusage(MIT,v20.0.5,upstream commit
2b9599ca):新 cratecrates/usage_tracker/src/vendored_ccusage/直接 vendoradapter/codex/{parser,types,paths}.rs+types.rs/fast.rs/home.rs/date_utils.rs/utils.rs。详细借鉴清单见ACKNOWLEDGEMENTS.md。 - 后端 HTTP API
GET /api/usage/summary?tz=viatokio::task::spawn_blocking,不阻塞 axum runtime。本机 1.2GB / 261 文件 release build 扫 + 聚合 ~1-2s。 - 解耦『启用』按钮跟『重启 Codex』(MOC-20 / PR #282):移除
applyProviderToDesktop/set-defaultaction 内的强制showRestartReminder()modal 调用。Apply 现在只写配置 + toast 提示。 - header 右上角新增 ↻ icon-only 按钮(齿轮左侧,跟
.theme-btn同款样式),点击直接调POST /api/desktop/restart-codex-app。重启进行中 icon 旋转 + button disabled 视觉反馈。 restartCodexAppNow兼容三种按钮形态(modal 纯文本 / icon + label span / icon-only),避免之前button.textContent =抹掉 icon DOM 的 UI degrade bug。
验证
cargo fmt --check/cargo check --workspacecargo test -p codex-app-transfer-usage-tracker(7 tests pass,含 ccusage 原 fixture)- 真机
~/.codex/sessions/1.2GB / 261 rollout files smoke test - mac-app 本地 build 手测:Usage tab 三视图切换 / KPI 卡 / 列对齐 / 头部 ↻ 重启按钮 / 启用按钮静默 toast
English
Token usage stats + Enable button restart decoupling
This release closes two long-standing user pain points: ① a dedicated Usage tab showing per-conversation token consumption (daily / by-model / by-conversation aggregations, tested with real data — 28896 turns / 194 conversations / 3.8B tokens); ② decoupling Apply / Set-default from the forced "Restart Codex Desktop" modal — previously a misclick on the modal killed the Codex process and lost in-flight conversation context / drafts / reasoning.
- New
Usagetab (MOC-15 / PR #280): 4th sidebar entry, 4 top KPI cards (total input / output / tokens / conversations) + 3-view switcher (daily / by model / by conversation) + ccusage-style table (Date / Model / Input / Output / Reasoning / Total / Turns / Last). Zero chart-lib dependency. - Usage parsing layer vendored verbatim from ryoppippi/ccusage (MIT, v20.0.5, upstream commit
2b9599ca): new cratecrates/usage_tracker/src/vendored_ccusage/containingadapter/codex/{parser,types,paths}.rsplustypes.rs/fast.rs/home.rs/date_utils.rs/utils.rs. Full borrowing inventory inACKNOWLEDGEMENTS.md. - Backend HTTP API
GET /api/usage/summary?tz=runs viatokio::task::spawn_blocking, never blocking the axum runtime. Local 1.2GB / 261 files scans + aggregates in ~1-2s on release build. - Decoupled Apply from Restart Codex (MOC-20 / PR #282): removed forced
showRestartReminder()modal calls fromapplyProviderToDesktopand theset-defaultaction. Apply now silently writes config + shows a toast. - New ↻ icon-only button in the header top-right (left of the gear, same
.theme-btnstyle), directly callingPOST /api/desktop/restart-codex-app. Icon spins while restart is in progress + button is disabled for visual feedback. restartCodexAppNownow supports three button shapes (modal plain text / icon + label span / icon-only), fixing the previous UI degrade bug wherebutton.textContent =wiped out icon DOM children.
Verification
cargo fmt --check/cargo check --workspacecargo test -p codex-app-transfer-usage-tracker(7 tests pass, includes ccusage upstream fixtures)- Real-data smoke test on
~/.codex/sessions/1.2GB / 261 rollout files - Local mac-app build manual test: Usage tab three-view switch / KPI cards / column alignment / header ↻ restart button / silent Apply toast
v2.1.15
Codex App Transfer v2.1.15
中文
Codex Desktop UX 深化 + 通用 provider 修复综合更新
本版主要把 transfer 跟 Codex Desktop 的集成面继续做深(主题 / context 圆环 / system prompts i18n / plugin-unlock 强化),同时收掉一批 per-provider reasoning / autocompact 真机暴露的 bug。
- Codex Desktop 主题页(PR #265 / issue #264):Sidebar 加 Theme 页,内置 5 套主题(
carton带浮动看板娘 +changli/azurlane/nailin/zani单背景),通过 CDPPage.addScriptToEvaluateOnNewDocument一次注入持久(无 daemon)。资源include_bytes!嵌进 binary(~5MB),运行时 base64 → data URI。跟 Plugin Unlock 完全独立 toggle(默认关)。支持 user 上传自定义主题(1:1 crop)+ 隐藏 / 删除 + 缩略图实拍(GaussianBlur 防隐私) - system prompts 跟随 transfer UI 语言(PR #263 / issue #262):注入 Codex 的 system prompts 读 transfer UI 语言设置,中文 UI 下 Codex 不再固定英文回复
- Codex Desktop context 圆环 atom(PR #261 / issue #258):transfer 管理 context 使用率 atom,展示进度环 + 阈值告警 settings
CAT_SKIP_MODEL_PROVIDER_WRITEenv(PR #260):配 verify 环境跳过model_provider字段写入,验证 Codex 自己持久化时不被 transfer 反复覆盖- plugin-unlock 注入失败分流 + 15s 重试 + 心跳回收(PR #255 / issue #253):macOS 改用
--remote-debugging-port=0+ 异步 pollDevToolsActivePort,消除原try_bind预检跟 Chromium bind 之间的 race window - Per-provider
reasoning_effort策略(PR #256 / issue #254):新建crates/registry/src/reasoning_effort_policy.rs注册表,DeepSeek 真实xhigh→max到达;Kimi / GLM / MiMo / MiniMax / Qwen 不传该字段(LiteLLM 白名单实证不承认);自定义 provider 保守 fallback。Provider 识别改用id/name/base_urlsubstring 匹配(修 healing UUID 让 precise id 匹配永远不命中导致整修复失效的真机 bug),补阿里云百炼maas.aliyuncs/百炼needle - GLM-5.1 autocompact(PR #250 / issue #248):新建 model 级
compact_thinking_policy注册表 - docs/ 整目录 gitignored + followup 迁 Linear(PR #252):内部计划文档不入仓,跨 session followup 改 Linear (MOC-N) 跟踪
验证
cargo fmt --check/cargo check --workspacecargo test --bin codex-app-transfer codex_theme_injector::8 个单测 pass- 真机 macOS:Codex Desktop 主题 5 套切换 + Plugin Unlock 各自独立 toggle 无干扰;DeepSeek max 档实机抓 wire 验 reasoning_effort=max 真到达
- Devin pre-merge:ThemeStatus serde PascalCase 对齐前端 / 测试过滤 custom theme bug 修复
English
Codex Desktop UX integration + per-provider fixes — composite update
This release continues deepening the transfer / Codex Desktop integration surface (themes, context ring, system-prompts i18n, plugin-unlock hardening) while cleaning up per-provider reasoning and autocompact bugs surfaced by real-device usage.
- Codex Desktop Theme page (PR #265 / issue #264): new Theme entry in sidebar, 5 built-in themes (
cartonwith floating mascot +changli/azurlane/nailin/zanibackground-only), injected once via CDPPage.addScriptToEvaluateOnNewDocument(no daemon). Assetsinclude_bytes!-embedded in binary (~5MB), base64 → data URI at runtime. Independent toggle from Plugin Unlock (default off). User-uploaded custom themes (1:1 crop) + hide / delete + real-shot thumbnails (GaussianBlur for privacy) - System prompts follow transfer UI language (PR #263 / issue #262): Codex system prompts read the transfer UI locale, so Codex no longer always replies in English under a zh-CN UI
- Codex Desktop context ring atom (PR #261 / issue #258): transfer manages the context-usage atom, exposes a progress ring + threshold-alert settings
CAT_SKIP_MODEL_PROVIDER_WRITEenv (PR #260): verify-environment switch to skipmodel_providerwrites so we can confirm Codex's own persistence isn't being overwritten by transfer- plugin-unlock failure-reason classification + 15s retry + heartbeat reaping (PR #255 / issue #253): macOS switches to
--remote-debugging-port=0+ async polling ofDevToolsActivePort, eliminating the race window between the priortry_bindprecheck and Chromium's actual bind - Per-provider
reasoning_effortpolicy (PR #256 / issue #254): new registry atcrates/registry/src/reasoning_effort_policy.rs— DeepSeek truly reachesxhigh/max; Kimi / GLM / MiMo / MiniMax / Qwen drop the field (LiteLLM whitelist confirms upstream doesn't accept it); custom proxies clamp conservatively. Provider matching switches to substring onid/name/base_url(fixing the real-device bug where healing replaces builtin preset id with a UUID and precise id-match never fired); Alibaba Bailianmaas.aliyuncs/百炼needle added - GLM-5.1 autocompact (PR #250 / issue #248): new model-level
compact_thinking_policyregistry docs/directory gitignored + followups migrated to Linear (PR #252): internal planning docs no longer enter the repo; cross-session followups tracked in Linear (MOC-N)
Verification
cargo fmt --check/cargo check --workspacecargo test --bin codex-app-transfer codex_theme_injector::— 8 unit tests pass- Real-device macOS: 5 Codex Desktop themes switching + Plugin Unlock both toggle independently without interference; DeepSeek max-tier on-wire verified
reasoning_effort=maxactually reaches the provider - Devin pre-merge: ThemeStatus serde PascalCase aligned with frontend /
theme_ids_match_all_themes_metadatafiltered to skip custom theme
v2.1.14
Codex App Transfer v2.1.14
中文
Codex 文档管理 4 子页完整重做(Agents / Memories / Skills / MCP)
Sidebar → Codex 抛弃旧 marker 受管块模式,改成 4 个 sub-tab,每个 sub-tab 直接 raw 编辑对应 codex 资源,SHA-256 路径 hash 独立 history 互不交叉。
- Agents:任意位置
AGENTS.mdraw 全文 read/write,Tauri 文件选择 + 粘贴绝对路径;按.git/自动分类 project-root / subdir - Memories:固定管理 codex 唯二 user-editable 索引
~/.codex/memories/MEMORY.md+memory_summary.md,内部raw_memories.md/rollout_summaries/等 Phase 1-2 产物不暴露 - Skills:扫
~/.codex/skills/<name>/SKILL.md全列表 raw 编辑;"打开文件夹"调系统open让用户在 Finder 编辑 SKILL.md 之外的子文件 - MCP:
toml_editround-trip[mcp_servers.*]保留其他节 + 注释,前端 JSON 编辑,upsert_server保留未建模字段(tools/env_vars)不丢数据;Plugins 子页扫~/.codex/plugins/cache/enable toggle + uninstall;Marketplace + Deeplink(codex-app-transfer://URL scheme)后端就位前端隐藏
Devin pre-merge:tarball download 加 timeout + size cap 防 OOM;plugin path-safety(. .. 整字符串拒)防 traversal;restore 加 atomic tmp+rename;InstallInput serde camelCase;tarball wrapper collision FP 等。
验证
cargo fmt --check/cargo check -p codex-app-transfer- 真机 12 个 MCP server round-trip 不丢字段
- 22+ skill SKILL.md raw 编辑 + reveal macOS 走通
English
Codex doc management — 4 sub-tabs (Agents / Memories / Skills / MCP)
The Codex page drops the legacy marker-managed-block flow for 4 sub-tabs, each editing the matching codex resource in raw mode with independent history keyed by SHA-256 path hash.
- Agents: raw read/write
AGENTS.mdat any path, Tauri file picker + paste-absolute-path;.git/detection auto-classifies project-root vs subdir - Memories: fixed entries
~/.codex/memories/MEMORY.md+memory_summary.md— the only user-editable indexes codex actually reads;raw_memories.md/rollout_summaries/etc. are Phase 1-2 internal and not exposed - Skills: scans
~/.codex/skills/<name>/SKILL.mdfor raw editing; "Open folder" shells out toopenso users edit non-SKILL.md companions in Finder - MCP:
toml_editround-trips[mcp_servers.*]preserving other sections + comments; JSON editing;upsert_serverkeeps unmodeled fields (tools/env_vars) instead of dropping them; Plugins sub-tab scans~/.codex/plugins/cache/with enable toggle + uninstall; Marketplace + Deeplink (codex-app-transfer://URL scheme) wired on backend, frontend hidden
Devin pre-merge: tarball download adds timeout + size cap against OOM; plugin path-safety (full-string . / .. rejection) prevents traversal; restore paths use atomic tmp+rename; InstallInput serde camelCase; tarball wrapper collision false-positive, etc.
Verification
cargo fmt --check/cargo check -p codex-app-transfer- 12 production MCP servers round-trip-edited without field loss
- 22+ skills, SKILL.md raw editing + "Reveal in Finder" verified on macOS
v2.1.13
Codex App Transfer v2.1.13
中文
apply_patch diff UI 在 chat-completions provider 上工作
修复 Codex App 在 chat-completions provider(DeepSeek / Kimi / MiMo 等)调用 apply_patch 不渲染 diff UI 的问题。根因是 custom_tool_call ↔ function_call wire schema 不匹配,叠加旧 V4A 教学 prompt 多处误导,patch 被 V4A applier 报 Failed to find context 或 empty hunk。
本次修复:
- adapter 双向桥接
custom_tool_call↔ chat-completionsfunction_callSSE,补previous_response_id多轮历史回放,模型可见上一轮apply_patch调用。 - 重写 chat-path V4A 教学 prompt:单端
@@ <header>、minimal Update form、Add File 全+前缀、*** Begin Patchliteral 第一行、Update + Move ≥1 hunk(纯重命名用 Delete + Add)、强 normative 禁 shell>redirect 绕过(大改也用 Delete + Add)。 - envelope
output[]interruptedapply_patchstatus 跟流式 done event 一致(都incomplete),严格客户端不再误执行 partial patch。 - chat-path system guidance 仅 first turn 注入,后续 turn 由历史回放带回,消除每 turn 累积 ~2KB 上下文浪费。
- README 加测试覆盖说明、API key 征集、macOS 未签名提示。
验证
cargo fmt --checkcargo test -p codex-app-transfer-adapters --lib(510 tests pass)- Kimi For Coding 14 次
apply_patch调用 12 success - Xiaomi MiMo (Token Plan) 用户反馈无明显问题
- DeepSeek V4 Pro 9 次
apply_patch调用全 success
English
apply_patch diff UI now works on chat-completions providers
Fixes the missing diff UI when Codex App calls apply_patch on chat-completions providers (DeepSeek / Kimi / MiMo). Two compounding root causes: the custom_tool_call ↔ function_call wire schemas did not match, and the old V4A teaching prompt misled models in several places, so patches were rejected with Failed to find context or empty hunk.
Changes:
- Adapter bridges
custom_tool_call↔ chat-completionsfunction_callSSE bidirectionally, withprevious_response_idhistory replay so the model sees priorapply_patchcalls. - Rewrote the chat-path V4A teaching prompt: single-sided
@@ <header>, minimal Update form, Add File requires+on every line,*** Begin Patchmust be the literal first line, Update + Move needs at least one hunk (use Delete + Add for pure rename), strong normative ban on shell>redirect bypass (use Delete + Add for large rewrites too). - Envelope
output[]interruptedapply_patchstatus matches the streamingdoneevent (bothincomplete), so strict clients no longer execute partial patches. - chat-path system guidance is injected only on the first turn; later turns receive it via history replay, eliminating ~2KB accumulation per turn.
- README adds a test-coverage notice, an API-key-testing contact, and a macOS unsigned-build notice.
Verification
cargo fmt --checkcargo test -p codex-app-transfer-adapters --lib(510 tests pass)- Kimi For Coding 14
apply_patchcalls, 12 success - Xiaomi MiMo (Token Plan): user reported no apparent issues
- DeepSeek V4 Pro 9
apply_patchcalls, all success
v2.1.12
Codex App Transfer v2.1.12
中文
Codex 全局资产四合一管理 + 系统代理支持 + 后端模块化收口
本版聚焦 Codex CLI 全局资产管理 + 客户端代理透传 + 大文件拆分,自 v2.1.11 起合入 7 个 PR,close follow-up #23 #24 #25。
主要改动:
- Codex 资产四合一管理页(借鉴 borawong/AiMaMi managed-block 设计):侧栏 4 个 tab(Agents / MCP / Memories / Skills)+ lazy load + 转场动效,Agents / MCP / Memories 走
<!-- cas:managed:* -->marker 物理隔离 app 区跟用户手写区,绝不动用户手写内容;Skills 走 shelltar -czf文件级备份/还原。 - Managed Block Protected Mode:apply 时计算外围用户区 SHA-256 跟 load 时的 outer_signature 对比,不一致报
ProtectedCollision阻塞静默覆盖,防外部编辑器并改导致用户区被吞。 - Managed Block 原子化 + history corruption 防御:
apply()改成 write history first → target second + pop on failure;read_history()不unwrap_or_default改 propagateErr,防腐坏 history 静默吃掉新 snapshot。 - 客户端走系统代理 + SOCKS:
crates/gemini_oauth/crates/proxy/src-tauri三个 reqwest 配置加socks+system-proxyfeatures,Codex CLI OAuth / 代理转发 / 升级下载等所有出向 HTTP 自动接管HTTPS_PROXY/SOCKS_PROXY等系统级环境变量。 responses/request.rs模块拆分:3203 行的协议适配核心拆出request/tools.rs(filtered_tools过滤 / namespace 展平)+request/tests.rs(2900+ 行内置测试套件搬出),主业务逻辑文件缩到千行内。admin/handlers/desktop.rs模块拆分:1733 行桌面端管理拆出services/desktop/process.rs(多平台进程探测 / 启动 / 重启 / 强杀)+services/desktop/snapshot.rs(快照备份还原控制流),desktop.rs收口为 axum thin handler。- Grok Web
url_citation冗余清理:response.rs剥离accumulate_*_url_citations路径,完全依托正文 markdown link 渲染,消除末尾文献列表跟正文 inline link 的重复显示。 - Presets-Healing declarative
enforcedFields:每个 builtin preset 可声明enforcedFields数组,healing logic 按声明覆盖;enforcedFields: []当成 explicit no-enforcement 尊重用户配置,缺失才 fallbackENFORCED_BUILTIN_FIELDS。
验证
cargo fmt --checkcargo test --bin codex-app-transfer(117 passed)cargo test -p codex-app-transfer-registry(51 passed)- 4 平台 build 全过(macOS arm64 / macOS Intel / Linux x86_64 / Windows x64)
English
Codex global asset management (4-in-1) + system proxy support + backend module split
Since v2.1.11 this lands 7 PRs, closing follow-ups #23 #24 #25.
Changes:
- Codex 4-in-1 asset management page (borrowed from borawong/AiMaMi managed-block design): sidebar with 4 tabs (Agents / MCP / Memories / Skills) + lazy load + fade transition. Agents / MCP / Memories use
<!-- cas:managed:* -->markers to physically isolate the app-managed region from user-written content; the app never touches user content. Skills uses shelltar -czffor file-level backup/restore. - Managed Block Protected Mode: on
apply()the outer user region SHA-256 is compared against theouter_signaturecaptured at load time. Mismatch raisesProtectedCollisionto block silent overwrite when an external editor modifies the file concurrently. - Managed Block atomic write + history corruption defense:
apply()reordered to write history first → target second + pop on failure;read_history()propagatesErrinstead ofunwrap_or_default, preventing corrupt history files from silently dropping new snapshots. - Client uses system proxy + SOCKS: three reqwest configs (
crates/gemini_oauth/crates/proxy/src-tauri) addsocks+system-proxyfeatures. Codex CLI OAuth / proxy forwarding / update download — all outbound HTTP automatically honorsHTTPS_PROXY/SOCKS_PROXYand other system-level env vars. responses/request.rsmodule split: the 3203-line protocol adapter core is split intorequest/tools.rs(filtered_tools / namespace flattening) +request/tests.rs(2900+ lines of built-in test suite extracted), shrinking the main business logic file under 1000 lines.admin/handlers/desktop.rsmodule split: 1733-line desktop manager is split intoservices/desktop/process.rs(cross-platform process detect / launch / restart / kill) +services/desktop/snapshot.rs(snapshot backup-restore control flow);desktop.rsis now a thin axum handler wrapper.- Grok Web
url_citationredundancy cleanup:response.rsremoves theaccumulate_*_url_citationspaths, relying entirely on inline markdown links in the body to eliminate the duplicate display between the end-of-message citation list and inline links. - Presets-Healing declarative
enforcedFields: each builtin preset may declare anenforcedFieldsarray, healing logic enforces by declaration;enforcedFields: []is honored as explicit no-enforcement respecting the user config, falling back toENFORCED_BUILTIN_FIELDSonly when absent.
Verification
cargo fmt --checkcargo test --bin codex-app-transfer(117 passed)cargo test -p codex-app-transfer-registry(51 passed)- 4-platform builds all passed (macOS arm64 / macOS Intel / Linux x86_64 / Windows x64)
v2.1.11
Codex App Transfer v2.1.11
中文
升级链路 RSA 验签 + 账号还原 P0 守门 + 跨平台 Plugin Unlock / Update / 转发停止稳定性
本版聚焦"用户数据安全 + 自动升级链路防 MITM + 跨平台启停稳定性",自 v2.1.10 起合入 9 个 PR,close follow-up #26 #28 #29 #30 #34 #35 #36 #37。
主要改动:
- 升级链路 MITM 防护:
latest.json+ installer 全程 RSA-3072 PKCS#1-v1.5-SHA256 验签 (公钥 build-time embed);download_asset_impl走in_memory: Vec<u8>验签 + sha256 双 gate 通过才落盘,消除 Linux/tmpTOCTOU window。 - 账号还原 P0 守门:
desktop_clear加 has_snapshot noop guard 防新用户手写 managed key 被一键删;drop_all_snapshots软删除 →trash/<timestamp>/+ 30 天 GC,防误点 cleanup_all 删光真原始账号备份。 - 跨平台冗余备份:snapshot 镜像到 macOS
Application Support/ Windows%APPDATA%/ Linux$XDG_DATA_HOME。 - 停止转发真停:
ProxyManager.stopsend graceful signal 后立刻task.abort()强制 drop server future,listener 同步 drop 端口立即释放;不再卡在 SSE / keep-alive 上让 UI 报 stopped 但端口仍占。 - Windows 稳定性:
quit_command切 PowerShell CIM 绕 MSIX access-denied;PowerShell 调用加CREATE_NO_WINDOW防 console 黑框;NSIS/D=走 raw_arg 注入保留安装位置 bypass Rust auto-quoting。 - macOS Update:
update_install加 translocation 前置检查 + launch 前 stripcom.apple.quarantinexattr 防 Gatekeeper 二次弹窗。 - UI / 提示:Plugins 设置加协议转发路径生效说明;
frontend/css/style.css拆 17 组件 + 5 页面 + tokens,新增gallery.html预览页。
English
Update channel RSA + account-restore P0 + cross-platform stability (Plugin Unlock / Update / proxy stop)
Since v2.1.10 this lands 9 PRs, closing follow-ups #26 #28 #29 #30 #34 #35 #36 #37.
Changes:
- Update channel MITM protection:
latest.json+ installer go through RSA-3072 PKCS#1-v1.5-SHA256 verification (public key build-time embedded);download_asset_implstreams intoin_memory: Vec<u8>with signature + sha256 double-gate before disk write, eliminating Linux/tmpTOCTOU window. - Account restore P0 guards:
desktop_clearadds has_snapshot noop guard;drop_all_snapshotssoft-delete (trash/<timestamp>/) + 30-day GC. - Cross-platform redundant backup: snapshots mirror to macOS
Application Support/ Windows%APPDATA%/ Linux$XDG_DATA_HOME. - Stop forwarding truly stops:
ProxyManager.stopsends graceful signal then immediatelytask.abort()so the listener drops and port releases — no longer stuck on SSE / keep-alive while UI reports "stopped". - Windows stability:
quit_commandswitched to PowerShell CIM bypassing MSIX access-denied; PowerShell calls addCREATE_NO_WINDOW; NSIS/D=<install_dir>injected via raw_arg, bypassing Rust auto-quoting. - macOS Update:
update_installadds translocation precheck + stripscom.apple.quarantinexattr to suppress Gatekeeper second-prompt. - UI / hints: Plugins setting adds protocol-route-only note;
frontend/css/style.csssplit into 17 components + 5 pages + tokens, newgallery.htmlpreview page.