Skip to content

Releases: Cmochance/codex-app-transfer

v2.2.1

Choose a tag to compare

@github-actions github-actions released this 04 Jun 05:08
cb19615

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(wreq Chrome120 伪装)+ Dependabot 四层依赖跟踪(周 cron CF 金丝雀 / 升级 PR 验指纹 / pre-push 门禁)。
  • 修复:proxy 强制 gateway key 消除无鉴权;MiniMax compact 非法 JSON + 新增 MiniMax-M3;Theme CSP 兼容;context footer live atom。

验证

  • cargo fmt --check
  • cargo check --workspace --exclude codex-app-transfer
  • cargo test --workspace --exclude codex-app-transfer
  • cargo 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_fetch three 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_smoothie content extraction + htmd markdown + a summarizer model; large pages use relevance selection, binary / over-16MB gating, <think> stripping; failures fall back to raw content.
  • headless stealth: clears navigator.webdriver, spoofs window.chrome, strips HeadlessChrome from the UA, passing passive-fingerprint and simple JS-challenge Cloudflare (interactive Turnstile excepted).
  • New crates/http (wreq Chrome120 impersonation) plus four-tier Dependabot tracking (weekly CF canary / on-bump fingerprint check / pre-push gate).
  • Fixes: proxy forces a gateway key removing no-auth mode; MiniMax compact invalid JSON plus new MiniMax-M3; Theme page CSP; context-usage footer live atom.

Verification

  • cargo fmt --check
  • cargo check --workspace --exclude codex-app-transfer
  • cargo test --workspace --exclude codex-app-transfer
  • cargo test -p codex-app-transfer-http --test cf_bypass -- --include-ignored

v2.2.0

Choose a tag to compare

@github-actions github-actions released this 01 Jun 11:30
6aeebab

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=responses provider 的 compact 请求字节透传上游,不再强转本地 chat。
  • 稳定性:config.toml 内容无变化跳过写盘、消除设置页 Configuration was modified 误报(MOC-115);chat 路径非 2xx 改写为合规 response.failed、永久错误不再卡 Thinking(MOC-103)。
  • Plugins 注入重启健壮性(MOC-100):重新启用注入,修 daemon 退避、单实例重启、注入时序、端口重连等根因。

验证

  • cargo fmt --all -- --check
  • cargo test --workspace
  • cargo 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 keeps auth_mode=chatgpt so Codex shows Plugins natively with no CDP daemon. Transfer and the local Codex share auth.json, and double-refreshing the single-use token trips refresh_token_reused, so transfer never refreshes — only the source does.
  • System-proxy reachability gate (MOC-114): new GET /api/system-proxy/status does 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/compact passthrough (MOC-113): compact requests for apiFormat=responses providers pass through byte-for-byte, not a local chat call.
  • Stability: skip writing config.toml when unchanged, clearing the Configuration was modified false alarm (MOC-115); chat-path non-2xx becomes a compliant response.failed stream 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 -- --check
  • cargo test --workspace
  • cargo test -p codex-app-transfer system_proxy

v2.1.18

Choose a tag to compare

@github-actions github-actions released this 31 May 00:34
8951dee

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 -- --check
  • cargo test --workspace
  • cargo 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_call response (MOC-75), the chat path gains truncation detection and V4A post-validation (MOC-57), and compact strips reasoning_effort on disable-thinking (MOC-87) while supporting Gemini-family upstreams (MOC-92).
  • Native Windows process handling: startup uses native enumeration instead of tasklist with an AUMID cache (MOC-94), and quit uses native PostMessage(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 -- --check
  • cargo test --workspace
  • cargo test -p codex-app-transfer

v2.1.17

Choose a tag to compare

@github-actions github-actions released this 29 May 15:16
dfc958e

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_patch chat 长文档信封、启动防白屏 try-catch、model_catalog.json 自动同步、关闭桌面宠物开关真正生效、残留扫描启动竞态与活跃度图单点态。

验证

  • cargo fmt --all -- --check
  • cargo test --workspace
  • cargo 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_search tool chain: Codex 0.130+ defers server-side MCP tools to tool_search instead of tools[], which the proxy used to silently drop; the chat path is now wired (discover, inject, route back by namespace), with a dropped-tools counter and observability.
  • Portable MCP auth vault (on by default): credentials move to a portable ~/.codex/.credentials.json with 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.x placeholder.
  • Code Graph: cargo metadata generates an interactive crate dependency graph deployed to Pages via GitHub Actions.
  • Stability fixes: apply_patch long-document envelope on the chat path, white-screen try-catch on startup, automatic model_catalog.json sync, the desktop-pet toggle truly disabling, and the residual-scan startup race plus activity-chart single-point state.

Verification

  • cargo fmt --all -- --check
  • cargo test --workspace
  • cargo test -p codex-app-transfer

v2.1.16

Choose a tag to compare

@github-actions github-actions released this 26 May 18:46
a33f477

Codex App Transfer v2.1.16

中文

Token 用量统计 + 启用按钮重启解耦

本版主要补全两个长期用户痛点:① 新增独立 Usage tab 展示对话 token 用量(单对话 / 按日 / 按模型聚合,真实数据 28896 turns / 194 conversations / 3.8B tokens 测过);② 解耦『启用』按钮跟『重启 Codex Desktop』的强绑定 — 之前误点重启会让 Codex 进程被杀、对话上下文 / 草稿 / 思考过程全丢。

  • 新增 Usage tab(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):新 crate crates/usage_tracker/src/vendored_ccusage/ 直接 vendor adapter/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= via tokio::task::spawn_blocking,不阻塞 axum runtime。本机 1.2GB / 261 文件 release build 扫 + 聚合 ~1-2s。
  • 解耦『启用』按钮跟『重启 Codex』(MOC-20 / PR #282):移除 applyProviderToDesktop / set-default action 内的强制 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 --workspace
  • cargo 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 Usage tab (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 crate crates/usage_tracker/src/vendored_ccusage/ containing adapter/codex/{parser,types,paths}.rs plus types.rs / fast.rs / home.rs / date_utils.rs / utils.rs. Full borrowing inventory in ACKNOWLEDGEMENTS.md.
  • Backend HTTP API GET /api/usage/summary?tz= runs via tokio::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 from applyProviderToDesktop and the set-default action. Apply now silently writes config + shows a toast.
  • New ↻ icon-only button in the header top-right (left of the gear, same .theme-btn style), directly calling POST /api/desktop/restart-codex-app. Icon spins while restart is in progress + button is disabled for visual feedback.
  • restartCodexAppNow now supports three button shapes (modal plain text / icon + label span / icon-only), fixing the previous UI degrade bug where button.textContent = wiped out icon DOM children.

Verification

  • cargo fmt --check / cargo check --workspace
  • cargo 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

Choose a tag to compare

@github-actions github-actions released this 26 May 00:32
87638b1

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 单背景),通过 CDP Page.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_WRITE env(PR #260):配 verify 环境跳过 model_provider 字段写入,验证 Codex 自己持久化时不被 transfer 反复覆盖
  • plugin-unlock 注入失败分流 + 15s 重试 + 心跳回收(PR #255 / issue #253):macOS 改用 --remote-debugging-port=0 + 异步 poll DevToolsActivePort,消除原 try_bind 预检跟 Chromium bind 之间的 race window
  • Per-provider reasoning_effort 策略(PR #256 / issue #254):新建 crates/registry/src/reasoning_effort_policy.rs 注册表,DeepSeek 真实 xhighmax 到达;Kimi / GLM / MiMo / MiniMax / Qwen 不传该字段(LiteLLM 白名单实证不承认);自定义 provider 保守 fallback。Provider 识别改用 id / name / base_url substring 匹配(修 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 --workspace
  • cargo 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 (carton with floating mascot + changli / azurlane / nailin / zani background-only), injected once via CDP Page.addScriptToEvaluateOnNewDocument (no daemon). Assets include_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_WRITE env (PR #260): verify-environment switch to skip model_provider writes 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 of DevToolsActivePort, eliminating the race window between the prior try_bind precheck and Chromium's actual bind
  • Per-provider reasoning_effort policy (PR #256 / issue #254): new registry at crates/registry/src/reasoning_effort_policy.rs — DeepSeek truly reaches xhigh / 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 on id / name / base_url (fixing the real-device bug where healing replaces builtin preset id with a UUID and precise id-match never fired); Alibaba Bailian maas.aliyuncs / 百炼 needle added
  • GLM-5.1 autocompact (PR #250 / issue #248): new model-level compact_thinking_policy registry
  • 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 --workspace
  • cargo 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=max actually reaches the provider
  • Devin pre-merge: ThemeStatus serde PascalCase aligned with frontend / theme_ids_match_all_themes_metadata filtered to skip custom theme

v2.1.14

Choose a tag to compare

@github-actions github-actions released this 23 May 07:42
a440a6a

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.md raw 全文 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_edit round-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.md at 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.md for raw editing; "Open folder" shells out to open so users edit non-SKILL.md companions in Finder
  • MCP: toml_edit round-trips [mcp_servers.*] preserving other sections + comments; JSON editing; upsert_server keeps 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

Choose a tag to compare

@github-actions github-actions released this 21 May 20:29
f91a340

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_callfunction_call wire schema 不匹配,叠加旧 V4A 教学 prompt 多处误导,patch 被 V4A applier 报 Failed to find contextempty hunk

本次修复:

  • adapter 双向桥接 custom_tool_call ↔ chat-completions function_call SSE,补 previous_response_id 多轮历史回放,模型可见上一轮 apply_patch 调用。
  • 重写 chat-path V4A 教学 prompt:单端 @@ <header>、minimal Update form、Add File 全 + 前缀、*** Begin Patch literal 第一行、Update + Move ≥1 hunk(纯重命名用 Delete + Add)、强 normative 禁 shell > redirect 绕过(大改也用 Delete + Add)。
  • envelope output[] interrupted apply_patch status 跟流式 done event 一致(都 incomplete),严格客户端不再误执行 partial patch。
  • chat-path system guidance 仅 first turn 注入,后续 turn 由历史回放带回,消除每 turn 累积 ~2KB 上下文浪费。
  • README 加测试覆盖说明、API key 征集、macOS 未签名提示。

验证

  • cargo fmt --check
  • cargo 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_callfunction_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-completions function_call SSE bidirectionally, with previous_response_id history replay so the model sees prior apply_patch calls.
  • Rewrote the chat-path V4A teaching prompt: single-sided @@ <header>, minimal Update form, Add File requires + on every line, *** Begin Patch must 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[] interrupted apply_patch status matches the streaming done event (both incomplete), 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 --check
  • cargo test -p codex-app-transfer-adapters --lib (510 tests pass)
  • Kimi For Coding 14 apply_patch calls, 12 success
  • Xiaomi MiMo (Token Plan): user reported no apparent issues
  • DeepSeek V4 Pro 9 apply_patch calls, all success

v2.1.12

Choose a tag to compare

@github-actions github-actions released this 20 May 07:31
920eb15

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 走 shell tar -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 改 propagate Err,防腐坏 history 静默吃掉新 snapshot。
  • 客户端走系统代理 + SOCKS:crates/gemini_oauth / crates/proxy / src-tauri 三个 reqwest 配置加 socks + system-proxy features,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 尊重用户配置,缺失才 fallback ENFORCED_BUILTIN_FIELDS

验证

  • cargo fmt --check
  • cargo 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 shell tar -czf for file-level backup/restore.
  • Managed Block Protected Mode: on apply() the outer user region SHA-256 is compared against the outer_signature captured at load time. Mismatch raises ProtectedCollision to 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() propagates Err instead of unwrap_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) add socks + system-proxy features. Codex CLI OAuth / proxy forwarding / update download — all outbound HTTP automatically honors HTTPS_PROXY / SOCKS_PROXY and other system-level env vars.
  • responses/request.rs module split: the 3203-line protocol adapter core is split into request/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.rs module split: 1733-line desktop manager is split into services/desktop/process.rs (cross-platform process detect / launch / restart / kill) + services/desktop/snapshot.rs (snapshot backup-restore control flow); desktop.rs is now a thin axum handler wrapper.
  • Grok Web url_citation redundancy cleanup: response.rs removes the accumulate_*_url_citations paths, 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 an enforcedFields array, healing logic enforces by declaration; enforcedFields: [] is honored as explicit no-enforcement respecting the user config, falling back to ENFORCED_BUILTIN_FIELDS only when absent.

Verification

  • cargo fmt --check
  • cargo 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

Choose a tag to compare

@github-actions github-actions released this 19 May 10:41
9771940

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_implin_memory: Vec<u8> 验签 + sha256 双 gate 通过才落盘,消除 Linux /tmp TOCTOU 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.stop send 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 前 strip com.apple.quarantine xattr 防 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_impl streams into in_memory: Vec<u8> with signature + sha256 double-gate before disk write, eliminating Linux /tmp TOCTOU window.
  • Account restore P0 guards: desktop_clear adds has_snapshot noop guard; drop_all_snapshots soft-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.stop sends graceful signal then immediately task.abort() so the listener drops and port releases — no longer stuck on SSE / keep-alive while UI reports "stopped".
  • Windows stability: quit_command switched to PowerShell CIM bypassing MSIX access-denied; PowerShell calls add CREATE_NO_WINDOW; NSIS /D=<install_dir> injected via raw_arg, bypassing Rust auto-quoting.
  • macOS Update: update_install adds translocation precheck + strips com.apple.quarantine xattr to suppress Gatekeeper second-prompt.
  • UI / hints: Plugins setting adds protocol-route-only note; frontend/css/style.css split into 17 components + 5 pages + tokens, new gallery.html preview page.