⚠️ ℹ️ {{ toast.message }}

🤔 系统确认

{{ confirmModal.message }}

Wenfxl Codex Manager

安全级控制台登录

{{ appVersion }}
模式: {{ stats.mode }} {{stats.success}}/{{stats.target}}
{{stats.progress_pct}}
{{ isExtConnected ? '✅ 浏览器插件已连接,可直接启动古法模式' : '⚠️ 浏览器插件未连接,请先解压 plugin/openai-cpa-plugin.zip,并在浏览器扩展页开启开发者模式后加载解压后的文件夹,再刷新页面' }}
运行中 已停止

本地 Web 服务进程

PID: {{ webProcessInfo.pid }} · 地址: {{ webProcessInfo.listen_url }}

脚本: {{ webProcessInfo.start_script_path }} / {{ webProcessInfo.stop_script_path }}

成功率 {{stats.success_rate}} 成功 {{stats.success}}/{{stats.target}} 失败 {{stats.failed}} 风控拦截 {{stats.retries}} 密码受阻 {{stats.pwd_blocked || 0}} 出现手机 {{stats.phone_verify || 0}} 总耗时 {{stats.elapsed}} 平均 {{stats.avg_time}}

实时运行日志

wfxl-openai-terminal
💻
系统待命,日志将在此打印...

📡 分布式节点通信配置

💡 提示:如果你想在 A 机器查看 B 和 C,只需在 B 和 C 这里填入 A 机器的网址(如 http://A机器的IP:8000)并保持密钥一致,保存后即可在 A 机器的此页面实时监控它们!

📡 等待远程节点接入... (请确保子机已配置上方的主控台地址)

子控列表

先从列表选择要查看的大面板,也可以单独隐藏某个子控详情。

总数 {{ clusterTotalCount }} 在线 {{ clusterOnlineCount }} 显示详情 {{ clusterVisibleDetailCount }}
{{ selectedClusterNodeName }} 模式: {{ selectedClusterNode.stats.mode }} | 成功 {{selectedClusterNode.stats.success}}/{{selectedClusterNode.stats.target}} | {{selectedClusterNode.stats.total}} 🕒 在线时长: {{ getOnlineDuration(selectedClusterNode.join_time) }} {{ isClusterNodeVisible(selectedClusterNodeName) ? '已连接显示' : '详情已断开显示' }}
成功率 {{selectedClusterNode.stats.success_rate}} 成功 {{selectedClusterNode.stats.success}}/{{selectedClusterNode.stats.target}} 失败 {{selectedClusterNode.stats.failed}} 风控拦截 {{selectedClusterNode.stats.retries}} 密码受阻 {{selectedClusterNode.stats.pwd_blocked}} 出现手机 {{selectedClusterNode.stats.phone_verify}} 耗时 {{selectedClusterNode.stats.elapsed}} 平均 {{selectedClusterNode.stats.avg_time}}
{{selectedClusterNode.stats.progress_pct}}
remote-stream: {{ selectedClusterNodeName }}
🧭 先从左侧子控列表选择一个节点 你也可以把某些子控切到“隐藏大页”,只保留列表概览。

本地账号库

已选 ({{ selectedAccounts.length }})
# 邮箱账号 登录密码 入库(北京时间) 操作
暂无本地记录
{{ index + 1 }} {{ showAccountsPlaintext ? acc.email : maskEmail(acc.email) }} {{ showAccountsPlaintext ? acc.password : '••••••••' }} {{ formatTime(acc.created_at) }}
{{ totalAccounts }} 个, {{ currentPage }}/{{ totalPages }} 页

📧 基础发信设置

支持逗号分隔多域名,此处必须填写你配置在 CF 的主域名

☁️ Cloudflare 身份鉴权 (全局)

获取提示:登录 Cloudflare 后,访问 https://dash.cloudflare.com/profile/api-tokens 获取 Global API Key。

多级域名泛解析模式

开启后将自动使用指定域名层级。

第一次使用请填写好上方发信域名池后点击下方推送按钮,如果加入新主域也要点推送,推送只需要一次永久生效

⚠️ 当前模式不支持此功能!仅限 cloudflare_temp_email, freemail, imap, cloudmail。

🔑 渠道专属参数

当前模式 Tempmail.lol

这是一个免费的公开临时邮箱 API。

系统已内置所有对接逻辑,无需您填写任何 API Key、账号或密码,选中后即可直接使用!

🔥 强烈建议:国内服务器请务必勾选左侧的【获取邮箱使用全局代理穿透】,否则极易获取失败!

当前模式 Temp-Mail.org

这是一个免费的公开临时邮箱 API

系统已内置所有对接逻辑,无需配置任何密钥,选中即可直接使用!

🔥 强烈建议:国内服务器请务必勾选左侧的【获取邮箱使用全局代理穿透】,然后开启节点切换,否则极易获取失败!

当前模式 CF 临时邮箱

⚠️ 若开启左边多级域名泛解析模式,必需部署魔改版:

github.com/wenfxl/cloudflare_temp_email_worker
当前模式 IMAP 接码
当前模式 本地微软邮箱库

说明:

1. 关闭“手动无限裂变”时,系统从本地微软邮箱库提取账号。

2. 开启后,系统将使用主邮箱 + Graph refresh_token 自动生成别名注册。

当前模式 FviaInboxes.com

已完美接入 FviaInboxes.com

请在浏览器中访问 https://FviaInboxes.com/,F12打开开发者工具,点击Get Email,复制messages请求里的authorization:Bearer后面的字符串内容。

🔥 提示:建议务必开启左侧的【获取邮箱使用全局代理穿透】!

当前模式 Inboxes.com

这是一个免费的公开临时邮箱

系统已内置所有对接逻辑,无需您填写任何 API Key、账号或密码,选中后即可直接使用!

🔥 提示:建议务必开启左侧的【获取邮箱使用全局代理穿透】!

当前模式 temporarymail.com

这是一个免费的公开临时邮箱

系统已内置所有对接逻辑,无需您填写任何 API Key、账号或密码,选中后即可直接使用!

🔥 提示:建议务必开启左侧的【获取邮箱使用全局代理穿透】!

?

Gmail OAuth 2.0 自动化配置向导

Step 1: 创建项目与 API 启用

1. 访问 Google Cloud 控制台

2. 点击顶部项目选择器,选择 "New Project" (新建项目),命名为 OpenAI-CPA-Mail

3. 搜索框里搜索 "Gmail API" 然后点启用(ENABLE),启用过就点管理。

Step 2: 配置 OAuth 权限请求页面

这是最关键的一步,决定谁能授权你的程序:

  • 选择 左侧菜单 OAuth 权限请求页面->开始
  • 应用名称:随便起,比如 OpenAI-CPA
  • 用户支持电子邮件:填你自己的 Gmail 地址。
  • 开发者联系信息:填你自己的 Gmail 地址。
  • 出现内部和外部选择记得选择 "外部"

Step 3: 创建凭据 (Credentials)

1. 点击左侧 "目标对象" > "测试用户" > "Add users"。添加你自己的Gmail邮箱

2. 点击左侧 "数据访问" > "添加或移除范围" > "右边手动添加范围"。填入 https://www.googleapis.com/auth/gmail.modify,点击 “添加到表” 并 “更新”

3. 点击左侧 "客户端" > "创建客户端" > "选择桌面应用程序"。创建

4. 创建成功后,页面会弹出一个包含客户端 ID 和密钥的窗口。直接点击旁边的 “下载 JSON” 按钮。

5. 下载生成的 JSON 文件,改名为 credentials.json,上传至本项目 /data/ 目录。

Step 4: 最终激活授权

点击生成按钮并在浏览器完成登录,复制地址栏 code= 后的字符。

复制链接并在浏览器打开授权:

{{ gmailOAuth.authUrl }}
当前模式 Freemail API

必需部署魔改版才能使用该邮箱:

github.com/wenfxl/freemail
当前模式 CloudMail

⚠️ 若开启左边多级域名泛解析模式,必需部署魔改版:

github.com/wenfxl/cloud-mail
当前模式 Mail Curl

💡 请选择 Duckmail 转发到的目标邮箱类型。
⚠️ 必须先去左侧对应的邮箱菜单里填写好该平台的 API 密钥等参数并保存生效!

系统将通过此地址去您选择的平台拉取验证码。

💡 提示:填入 API Token 即可直接使用;若填入 Cookie,系统可在 Token 失效时自动刷新。
当前模式 Generator.email

已接入 Generator.email

系统将请求获取邮箱,并提取验证码。

🔥 提示:此站可能存在强力的 Cloudflare 盾,建议开启“获取邮箱使用全局代理穿透”并使用优质代理。

当前模式 Temporam.com (Cookie 模式)

已切换至 Temporam.com 临时邮箱

请在浏览器中访问 temporam.com,按 F12 打开开发者工具,在网络请求的 Request Headers 中复制完整的 Cookie 字符串。

🔥 提示:Cookie 失效时会导致无法收取验证码,请定期更新此 Cookie!

当前模式 Tmailor.com

已完美接入 Tmailor.com 解密接口

请在浏览器中访问 https://tmailor.com/,点击Access Details,复制初始Access Token字符串填入下方。

🔥 提示:建议务必开启左侧的【获取邮箱使用全局代理穿透】!

模式: LuckMail 接码

绑定标签: {{ config.luckmail.tag_id || '未对账' }}
当前为 LuckMail 私有邮箱池模式:项目会调用你在 LuckMail 已导入的邮箱,使用 order/create 分配邮箱,再按订单轮询验证码。此模式不会使用“历史已购复用”和“手动囤号”。

🛒 手动囤号控制台

Tools

💡 提示:若不勾选“购后打标”,新号将保留“未用”状态,随后可被自动化脚本通过“历史复用”逻辑随机抽走。

🤖

AI 资料增强 (Codex)

💡 开启后系统将自主调用 AI 生成信息,并根据域名层级(当前: {{config.sub_domain_level + 1}} 级)自动脑暴。

🤖
AI 增强已关闭,将使用本地随机策略

📱 HeroSMS 手机接码

当前项目: {{ config.hero_sms.service }} 实时库存 (按价格升序)
国家 / ID 单价 ($) 余量 (个) 操作
{{ item.name }}
ID: {{ item.country }}
${{ item.cost }} {{ item.count }}
低于此值停止任务
超过此价不买号
失败多少次后彻底放弃
单个号等多久超时

🌐 基础代理设置

基础请求代理地址,如 socks5://127.0.0.1:10808

🧠 智能切点总控

先在这里决定当前使用哪种代理客户端,再进入对应子页做细项管理。

当前模式: {{ config.clash_proxy_pool.client_type || 'clash' }} 。切换后会自动跳到对应子页;保存配置后运行时会按该客户端类型执行。

🛰️ Clash 订阅更新

更新宿主机订阅并同步代理池状态。

{{ clashPoolInfo?.count || '未知' }}
{{ clashPoolInfo?.image || '未知' }}
点“填入”可直接写到下方 Clash 策略组名称
{{ clashPoolGroupError }}
{{ item.name }}
节点数:{{ item.node_count }} · 当前出口:{{ item.current }}
暂未读取到策略组,请先点击“刷新状态”或“一键更新订阅”。
后端真正写入并使用的是下面这条链接;如果你贴入的是普通订阅串,系统会自动修正成可用的 Mihomo 入口。
{{ clashPoolInfo?.effective_sub_url || clashPoolInfo?.sub_url || clashPoolSubUrl || '暂无' }}
{{ clashPoolRuntime.all_aligned === true ? '已全部对齐' : (clashPoolRuntime.all_aligned === false ? '存在未对齐实例' : '暂无路由组信息') }} {{ clashPoolRuntime.aligned_count || 0 }}/{{ clashPoolRuntime.instance_ok_count || clashPoolRuntime.instance_total || 0 }} 实例已对齐
业务组:{{ clashPoolRuntime.actual_group_name || config.clash_proxy_pool.group_name || '未知' }} · 默认总组:{{ clashPoolRuntime.default_route_groups.join(' / ') }}
暂未读取到运行态,请点击“刷新状态”。
{{ clashPoolRuntimeError }}
重点看“业务组当前节点”和“默认总组当前值”是否一致指向
{{ item.slot }}号机
{{ item.api }}
{{ !item.ok ? '读取失败' : (item.route_aligned === false ? '未完全对齐' : '已对齐') }}
业务组:{{ item.group || '未知' }}
当前节点:{{ item.current_node || '未知' }}
默认总组 {{ route.group }} 当前值:{{ route.now || '-' }}
路径:{{ route.path.join(' → ') }}
{{ item.error || '读取失败' }}

🌍 Clash 智能切点

互斥说明: 开启智能切点HTTP 动态代理池 不能同时生效。现在如果你开启智能切点,系统会自动关闭 HTTP 动态代理池;如果你开启 HTTP 动态代理池,系统会自动关闭智能切点。
订阅更新后会自动刷新为下拉可选列表;本网站交互本身不走你配置的注册代理。

🧩 v2rayA 配置与节点管理

连接 v2rayA 面板,读取节点、延迟和当前链路状态。

当前客户端类型不是 v2raya。先切到 v2rayA 模式,下面的读取与切换能力才会生效。
Actions

节点工具

{{ config.clash_proxy_pool.enable && config.clash_proxy_pool.client_type === 'v2raya' ? '已启用 v2rayA 自动切点' : '当前未启用 v2rayA 自动切点' }}
只要上方已开启 智能切点client_type=v2raya,业务运行时就会自动切换;下方按钮只是手动指定覆盖。
{{ v2rayANodes.length }}
{{ v2rayAStatusMessage || 'v2rayA 节点列表已刷新。' }}
失效 {{ v2rayAInvalidKeys.length }} 个 · 重复组 {{ v2rayADuplicateGroups.length }} 个
“移除重复”会把重复节点标记为失效,自动切点时会跳过它们。
面板地址
{{ v2rayARuntime.panel_url || '未填写' }}
API 登录
{{ v2rayARuntime.api_auth?.username ? v2rayARuntime.api_auth.username : '未配置' }}
{{ v2rayARuntime.api_auth?.password_configured ? '密码已配置' : '密码未配置' }}
Xray 路径
{{ v2rayARuntime.xray_bin?.path || '未填写' }}
默认代理
{{ v2rayARuntime.default_proxy || '未填写' }}
待确认项
{{ issue }}

节点列表

支持“全部节点”和“订阅分组”两种视图,运行时会按活节点池自动切换。

固定高度表格视图,支持内部滚动和分页;延迟数据来自 v2rayA API。
# 状态 节点 订阅 类型 延迟 操作
{{ ((v2rayAPage - 1) * v2rayAPageSize) + index + 1 }} {{ getV2rayAStatusMeta(node).text }}
{{ node.name || node.address || node.node_id || '-' }}
{{ node.address || '地址未知' }}:{{ node.port }}
节点 ID:{{ node.node_id || '-' }}
{{ node.subscription_name || node.subscription_id || '-' }} {{ node.node_type || '-' }} {{ formatV2rayALatency(node) }}
当前筛选 {{ v2rayAGroupFilter === 'all' ? '所有分组' : (v2rayASubscriptionTabs.find(item => item.key === v2rayAGroupFilter)?.name || '当前分组') }}, 共 {{ v2rayAFilteredNodes.length }} 个节点, 第 {{ v2rayAPage }}/{{ v2rayATotalPages }}
# 订阅分组 节点数 当前节点 最佳延迟 操作
{{ ((v2rayAGroupPage - 1) * v2rayAGroupPageSize) + index + 1 }}
{{ group.name }}
Key: {{ group.key }}
{{ group.nodeCount }} {{ group.currentCount > 0 ? group.currentCount : '-' }} {{ group.bestLatency === null ? '--' : formatV2rayALatency({ latency_ms: group.bestLatency }) }}
{{ v2rayAGroupedSubscriptions.length }} 个分组, 第 {{ v2rayAGroupPage }}/{{ v2rayAGroupTotalPages }}
还没有读取到 v2rayA 节点。先确认面板地址与登录信息,再点击“读取节点列表”。

🪟 v2rayN 节点池

仅保留 v2rayN 自己需要的节点切换与订阅管理项。

订阅更新方式
项目已内置更新脚本
这里不用再填写命令。需要时直接点击下方按钮即可。
运行说明
v2rayN 模式不依赖 Clash 控制 API
项目会按全局节点池切换当前节点,并在需要时重新筛选可用节点。
会在筛选和切点时跳过这些关键词命中的节点。

🚪 HTTP 动态代理池

适用于 http://用户名:密码@主机:端口 这类动态代理网关。开启后,多线程会从独立代理队列中取通道;如果你只填一条动态代理,系统会按通道数复制成多个独立工作位,更适合“按新建连接 / 会话自动换 IP”的服务商。
互斥说明: HTTP 动态代理池开启智能切点 不能同时生效。现在如果你开启 HTTP 动态代理池,系统会自动关闭智能切点;如果你再开启智能切点,系统也会自动关闭 HTTP 动态代理池。
{{ config.http_dynamic_proxy_runtime.loaded_channels || 0 }}
配置通道数:{{ config.http_dynamic_proxy_runtime.configured_pool_size || config.http_dynamic_proxy.pool_size || 0 }}
{{ config.http_dynamic_proxy_runtime.queue_owner === 'clash' ? '当前被 Clash 独享池接管' : (config.http_dynamic_proxy_runtime.using_default_fallback ? '回退 default_proxy' : (config.http_dynamic_proxy_runtime.single_source_cloned ? '单条代理复制通道' : (config.http_dynamic_proxy_runtime.source_count > 1 ? '多条代理轮询装载' : '未装载'))) }}
有效源代理数:{{ config.http_dynamic_proxy_runtime.source_count || 0 }}
{{ config.http_dynamic_proxy_runtime.queue_ready ? '队列已就绪' : '队列未就绪' }}
{{ config.http_dynamic_proxy_runtime.message || '暂无运行态说明' }}
{{ config.http_dynamic_proxy_runtime.error }}
建议与 reg_threads 保持一致
保存时会自动补全缺失的 http://。留空时会回退使用上方“全局默认代理”;如果两者都为空,后端会直接拒绝保存。如果你只提供一条动态代理,项目会复制为多个线程通道,但是否换 IP 取决于代理商是否按连接 / 会话轮换出口。

☁️ 云端库存

已选 ({{ selectedCloud.length }})
类型 远端凭证 (账号) 当前状态 额度用量大盘 最后检查 操作
暂无云端账号数据或未勾选平台
Sub2API CPA {{ showCloudPlaintext ? acc.credential : maskEmail(acc.credential) }}
存活
失效
已禁用
5h
{{ acc.details.codex_5h_used_percent }}% {{ (acc.details.codex_5h_reset_at || '').substring(5, 16).replace('-', '/') }}
7d
{{ acc.details.codex_7d_used_percent }}% {{ (acc.details.codex_7d_reset_at || '').substring(5, 16).replace('-', '/') }}
🏷️ PLAN: {{ acc.details.cpa_plan_type }}
💰 总额: {{ acc.details.cpa_total }} 🟢 剩余: {{ acc.details.cpa_remaining }}
周限额 剩余 {{ acc.details.cpa_primary_remain_pct }}%
代码审查周限额 剩余 {{ acc.details.cpa_codex_remain_pct }}%
{{ acc.account_type === 'cpa' ? '等待右侧测活获取数据...' : '暂无用量缓存' }}
{{ acc.last_check || '-' }}
{{ cloudTotal }} 个远端记录, {{ cloudPage }}/{{ cloudTotalPages }} 页

📦 CPA 仓管中心

🛸 Sub2API 仓管

新账号推送参数

账号并发上限
提高账号调度频率
数值越小越优先使用
0 = 不计费

仅对 OpenAI OAuth 账号生效。启用后并发数将作为该账号 WS 连接池上限。

已选: {{ config.sub2api_mode.account_group_ids }}

填写接口地址和 API Key 并保存后,点击「获取线上分组」以同步数据。

✈️ Telegram 机器人通知

* 默认直连 Telegram,更稳;仅当你的服务器直连 Telegram 不通时再开启代理。

邮箱脱敏
密码脱敏
可用变量: {email} (自动适配脱敏开关), {password} (自动适配脱敏开关), {time} 时间。
可用变量: {success_rate} 成功率, {success} 成功数, {target} 目标数, {failed} 失败数, {retries} 拦截数, {pwd_blocked} 密码受阻, {phone_verify} 出现手机, {elapsed_time} 总耗时, {avg_time} 平均耗时。

🧩 更新中心

左边是普通用户更新路径,右边是开发者 Git 更新路径。两条线分开,避免误操作。

普通用户更新

适合没有 Git 的使用者:检查版本、下载到 `updates/`、迁移当前配置。

当前运行版本
{{ appVersion }}
最新在线版本
{{ updateInfo.hasUpdate ? updateInfo.version : '当前已是最新或尚未发现更新' }}
{{ updateInfo.hasUpdate ? (updateInfo.changelog || '已检测到新版本,可直接下载到当前目录下的 updates 文件夹。') : '更新检查现在基于 Git tag,不依赖 GitHub Release。' }}

开发者更新

只针对当前 Git 工作区,要求 `main` 分支、工作区干净,并且只能 fast-forward。

当前环境未检测到 Git。这个区域只适合源码用户;如果你是普通用户,请使用左侧“普通用户更新”里的下载与迁移流程。
当前分支
{{ projectUpdateStatus.branch || '未知' }}
工作区状态
{{ projectUpdateStatus.dirty_count > 0 ? `有 ${projectUpdateStatus.dirty_count} 处未提交修改` : '干净' }}
{{ projectUpdateStatus.message || '尚未读取 Git 更新状态。' }}
本地:{{ projectUpdateStatus.local_head || '-' }}
远端:{{ projectUpdateStatus.remote_head || '-' }}
还没有读取 Git 工作区更新状态。

本地更新包

下载的新版本会解压到当前软件目录下的 updates/<版本>/source

{{ pkg.version }}
{{ pkg.extract_dir || '未解压' }}
{{ pkg.extract_exists ? '已解压' : '未就绪' }}
zip:{{ pkg.zip_exists ? '已保留' : '已清理' }} · 标记:{{ pkg.marker_exists ? '完成' : '无' }}
当前还没有本地更新包。先点击上面的“检查并下载更新包”。

🔒 杂项与安全控制

请妥善保管此密码,热重载后立即生效

并发与时延微调

⚙️ 常规量产模式边界控制

~