Codex++ 通过 Chromium DevTools Protocol (CDP) 运行时注入 技术,在不修改 Codex 原始安装文件的前提下,动态解除 API Key 模式下的插件限制,其核心实现逻辑如下:

一、技术实现原理

Codex++ 作为一个外部增强启动器,其核心是启动一个独立的 Launcher 进程。该进程通过 CDP 连接到 Codex 桌面应用(一个基于 Electron 的 Chromium 实例),并在其运行时上下文中注入 JavaScript 脚本,以覆盖或修改原生检查逻辑。

// 简化的注入脚本核心逻辑示意
(async function injectPluginUnlock() {
    // 1. 覆盖插件可用性检查函数
    const originalCheck = window.__checkPluginAvailability || function() { return false; };
    window.__checkPluginAvailability = function() {
        // 强制返回 true,欺骗前端界面认为插件可用
        return true;
    };

    // 2. 解除插件入口的 UI 禁用状态
    const observer = new MutationObserver(() => {
        // 查找所有被禁用的插件按钮或菜单项
        document.querySelectorAll('[data-testid*="plugin"], .plugin-item, button[disabled]').forEach(element => {
            if (element.textContent.includes('Plugin') || element.hasAttribute('data-plugin-locked')) {
                element.disabled = false;
                element.style.opacity = '1';
                element.style.pointerEvents = 'auto';
                // 移除表示不可用的 CSS 类
                element.classList.remove('disabled', 'locked', 'unavailable');
            }
        });
    });

    // 3. 开始监控 DOM 变化
    observer.observe(document.body, { childList: true, subtree: true });

    // 4. 模拟插件市场数据加载
    const originalFetch = window.fetch;
    window.fetch = function(...args) {
        // 拦截插件市场列表的请求
        if (args[0].includes('/api/plugins/marketplace') || args[0].includes('/api/features')) {
            // 可以在此处返回模拟的插件列表数据,或让请求正常进行但后续解锁UI
            console.log('[Codex++] Intercepted plugin marketplace request.');
        }
        return originalFetch.apply(this, args);
    };

    console.log('[Codex++] Plugin unlock script injected successfully.');
})();

二、关键步骤详解

步骤 技术动作 目的与效果
1. 启动与连接 Launcher 启动 Codex 应用,并通过 --remote-debugging-port=9222 参数开启 CDP 调试端口。 为后续脚本注入建立通信通道。
2. 脚本注入 通过 CDP 的 Runtime.evaluate 方法将解锁脚本注入到 Codex 的渲染进程。 使修改逻辑在 Codex 应用内部生效。
3. 覆盖检查函数 定位并重写 window.__checkPluginAvailability 等内部函数,使其始终返回 true 绕过 API Key 模式下的权限校验,这是解锁的核心。
4. UI 状态修复 通过 DOM 操作,将所有被 disabled 的插件按钮和菜单项重新启用,并移除灰色样式。 让插件入口在视觉和交互上恢复正常。
5. 请求拦截(可选) 选择性拦截插件市场或功能检查的 API 请求,确保返回支持插件的数据。 应对更严格的客户端检查,确保插件列表能正常加载。

三、配置与触发方式

解锁功能通常与特定的启动配置关联。用户需要在 Codex++ 的管理面板中启用“插件解锁”开关,或通过配置文件进行设置。

# Codex++ 配置文件示例 (config.toml)
[enhancements]
# 启用插件解锁功能
plugin_unlock = true

# 强制启用特定插件(适用于显示“App unavailable”的插件)
force_enable_plugins = ["Use Computer", "Code Interpreter", "Web Browsing"]

# 插件市场镜像(可选,用于加速或绕过区域限制)
plugin_marketplace_mirror = "https://mirror.example.com"

当用户通过 Codex++ Launcher 启动 Codex 后,上述配置生效,注入脚本自动执行,从而在 API Key 登录模式下,使插件市场从“未找到插件”或灰色不可用状态,变为完全可用。

四、方案优势与特点

  1. 非侵入式安全:不修改 app.asar 等原始文件,不影响 Codex 官方更新和完整性。
  2. 精准解锁:针对性地破解了 API Key 模式下的插件禁用逻辑,对官方账号登录模式无影响。
  3. 即时生效:注入在运行时完成,用户只需用 Codex++ 启动一次即可生效,无需复杂操作。
  4. 可逆性强:关闭 Codex++ 或使用原版启动方式,Codex 即恢复原始状态,无残留风险。

五、注意事项

  • 依赖 CDP:该方案依赖于 Codex 应用支持并开启远程调试端口,未来若官方禁用此端口,方案可能需要调整。
  • 版本适配:Codex 应用的前端代码结构更新后,注入脚本中用于定位检查函数和 UI 元素的选择器可能需要同步更新。
  • 安全警告:杀毒软件可能将此类注入行为标记为潜在风险,需要用户手动添加信任。

总之,Codex++ 通过 CDP 运行时注入脚本 这一“外科手术式”的方案,巧妙地绕过了原生限制,实现了 API Key 模式下插件的完全解锁,且保持了良好的安全性和可维护性。


参考来源

更多推荐