diff --git a/README.md b/README.md index e522622..9a95cfd 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,7 @@ Self-hosted OpenAI Codex Web UI and Android client bridge. ## 快速入口 - 最新 Release: [github.com/Qjzn/CX-Codex/releases/latest](https://github.com/Qjzn/CX-Codex/releases/latest) +- 2.5.6 发布说明: [docs/release-notes-2.5.6.zh-CN.md](./docs/release-notes-2.5.6.zh-CN.md) - 2.5.5 发布说明: [docs/release-notes-2.5.5.zh-CN.md](./docs/release-notes-2.5.5.zh-CN.md) - 2.5.4 发布说明: [docs/release-notes-2.5.4.zh-CN.md](./docs/release-notes-2.5.4.zh-CN.md) - 2.5.3 发布说明: [docs/release-notes-2.5.3.zh-CN.md](./docs/release-notes-2.5.3.zh-CN.md) diff --git a/docs/changelog.zh-CN.md b/docs/changelog.zh-CN.md index 6788536..f3013a9 100644 --- a/docs/changelog.zh-CN.md +++ b/docs/changelog.zh-CN.md @@ -2,6 +2,8 @@ ## 未发布 +## 2.5.6 - 2026-07-25 + - 长时稳定性浸泡现在持续验证本机事件回放结构与 `latestSeq` 单调性,并在配置公网地址时逐样本确认未登录 Codex API 始终返回 HTTP 401;JSON 报告新增回放失败、鉴权失败和事件序号倒退汇总,避免只看 `/health` 而漏掉消息接收链路或远程鉴权回归。 - 设置中的“手机访问”前置到基础设置之后,新人无需先滚过套餐余量和权限控制即可生成、复制、打开或停止临时地址;功能、安全验证和视觉样式保持不变。 - 仅限本机的手机配对页新增本地生成二维码,手机相机可直接打开已验证的临时地址;二维码不包含访问密码、不调用第三方二维码服务,配对页继续对公网请求返回 404。 diff --git a/docs/new-user-install-review-20260725.zh-CN.md b/docs/new-user-install-review-20260725.zh-CN.md index 53b5835..37dadc3 100644 --- a/docs/new-user-install-review-20260725.zh-CN.md +++ b/docs/new-user-install-review-20260725.zh-CN.md @@ -4,7 +4,7 @@ 从没有 CX-Codex 运行环境的 Windows 状态出发,按 README 的一行命令已经能够完成安装、构建、启动、免费临时公网访问、密码登录、发送消息和接收回复。 -首次源码预览安装最终成功用时 153.5 秒。正式 2.5.4 的公开资产、五进程无警告卸载和无安装状态重装均已通过;首次升级时 Cloudflare 临时地址一度完全不可达,手动再次开启约 20 秒即成功,2.5.5 已只对这种 `HTTP unreachable` 自动重试一次。当前 `main` 还补上了仅限本机的二维码配对页。项目仍不能称为真正“傻瓜式”,主要差距变为:下载阶段缺少连续进度、首次工作区选择不够明确,以及手机扫码后仍需手动输入密码。 +首次源码预览安装最终成功用时 153.5 秒。正式 2.5.5 已完成公开资产与安装回归,并只对 Cloudflare 临时地址的 `HTTP unreachable` 自动重试一次。2.5.6 候选还补上了仅限本机的二维码配对页。项目仍不能称为真正“傻瓜式”,主要差距变为:下载阶段缺少连续进度、首次工作区选择不够明确,以及手机扫码后仍需手动输入密码。 ## 测试边界 @@ -62,7 +62,8 @@ | 运行中升级与同版本重复升级 | 2.5.3 通过 | | 默认保留数据卸载与重装 | 2.5.3 通过;2.5.4 正式版关闭超时误警告 | | 正式五进程无警告卸载 | 2.5.4 通过 | -| Quick Tunnel 瞬时不可达恢复 | 2.5.5 候选自动重试一次 | +| Quick Tunnel 瞬时不可达恢复 | 正式 2.5.5 自动重试一次 | +| 本机二维码配对 | 2.5.6 候选已通过真实解码和公网 404 验证 | ## 实测发现并已经修复 @@ -85,7 +86,7 @@ - 2.5.1 正式 Release 已完成下载、SHA-256、首次安装、本机健康和公网鉴权回归。 - 2.5.3 正式 Release 已补齐运行中重复升级、默认保留数据卸载和无安装状态重装;Windows CI 会让旧服务及其子进程锁定目录后再次执行 bootstrap。 - 2.5.4 正式版让官方卸载器以子进程优先顺序关闭整棵受管进程树,真实五进程卸载与自动化夹具均无超时警告。 -- 2.5.5 候选在 Quick Tunnel 公网验证完全不可达时自动重试一次,但错误鉴权状态仍立即失败。 +- 正式 2.5.5 在 Quick Tunnel 公网验证完全不可达时自动重试一次,但错误鉴权状态仍立即失败。 - README 默认使用 Release + SHA-256 链路,不再依赖 `main` 源码归档。 - Release 工作流强制校验标签、`package.json` 和版本说明一致,避免误发错版本。 @@ -112,7 +113,7 @@ ### 第一阶段:发布即可用 -1. 已完成:2.5.3 正式 Release 已完成公网下载、运行中升级、同版本重复升级、卸载和重装验证;2.5.4 正式版关闭卸载的父子进程与误警告边界,2.5.5 候选继续收口临时公网传播抖动。 +1. 已完成:2.5.3 正式 Release 已完成公网下载、运行中升级、同版本重复升级、卸载和重装验证;2.5.4 正式版关闭卸载的父子进程与误警告边界,正式 2.5.5 收口临时公网传播抖动。 2. 已完成:bootstrap 读取同版本能力清单,确认归档支持 `RemoteQuick`、`JsonOutput` 和所需安装器契约,拒绝混用。 3. 已完成:stdout 最终只输出一行稳定 JSON;进度和诊断写入 stderr,失败提供固定错误码和阶段。 4. 已完成:增加官方 `uninstall-windows.ps1`,默认保留 Codex 登录态、工作区和 Android 签名,可选清除运行数据与托管 cloudflared。 diff --git a/docs/open-source-readiness-20260725.zh-CN.md b/docs/open-source-readiness-20260725.zh-CN.md index 7681e58..16a0c38 100644 --- a/docs/open-source-readiness-20260725.zh-CN.md +++ b/docs/open-source-readiness-20260725.zh-CN.md @@ -2,7 +2,7 @@ ## 结论 -2.5.3 与 2.5.4 已正式发布。2.5.4 六个公开资产全部通过校验,真实五进程卸载 `warnings` 为空,程序、端口与受管通道均清理完成且用户数据保留。正式升级首次遇到 Cloudflare 临时地址完全不可达,手动重试约 20 秒即成功;2.5.5 候选已将这条安全重试收进 CLI 与设置页。协议基线漂移与历史 Google/Firebase key 仍需按下述边界持续处置。 +2.5.3、2.5.4 与 2.5.5 已正式发布。2.5.4 六个公开资产全部通过校验,真实五进程卸载 `warnings` 为空,程序、端口与受管通道均清理完成且用户数据保留。正式升级首次遇到 Cloudflare 临时地址完全不可达,2.5.5 已将受限安全重试收进 CLI 与设置页;2.5.6 候选继续补齐手机访问入口、仅限本机的扫码配对和长时消息接收门禁。协议基线漂移与历史 Google/Firebase key 仍需按下述边界持续处置。 ## 已通过 @@ -22,10 +22,11 @@ - 正式 2.5.3 Release 工作流通过;公开下载的 Windows ZIP、正式签名 APK、调试 APK 及三组 SHA-256 共六个资产全部校验通过,ZIP 版本、双 HTML 入口、CLI 和产品化能力清单一致。 - 正式 2.5.3 从正在运行的 2.5.2 成功升级,再次执行同一命令完成 2.5.3 → 2.5.3 重复升级;两次均通过本机健康、公网健康、HTTP 鉴权和 WebSocket 鉴权。 - 官方卸载成功清理安装目录、启动器、PID 标记、受管进程和 7420 监听,同时保留配置、cloudflared 缓存和 Codex 登录态;随后从无安装状态重装 2.5.3 并再次通过三项验证。 -- 2.5.4 候选已在真实五进程运行树和自动化子进程夹具上通过无警告卸载,关闭正式回归发现的 `PROCESS_STOP_TIMEOUT` 误警告。 +- 正式 2.5.4 已在真实五进程运行树和自动化子进程夹具上通过无警告卸载,关闭正式回归发现的 `PROCESS_STOP_TIMEOUT` 误警告。 - 正式 2.5.4 的 Windows ZIP、正式签名 APK、调试 APK 和三组 SHA-256 共六个资产全部通过;公开归档内版本、双 HTML 入口、CLI 和官方卸载器一致。 - 正式 2.5.4 五进程卸载返回 `warnings: []`,安装目录、回滚目录、启动器、PID 标记、7420 监听和受管 cloudflared 均清理完成,配置与 Codex 登录态保留;随后无安装状态重装成功。 -- 2.5.5 候选只对公网验证的 `HTTP unreachable` 自动重试一次;错误鉴权 HTTP 状态仍不重试,服务模块和真实 Quick Tunnel 验证通过。 +- 正式 2.5.5 只对公网验证的 `HTTP unreachable` 自动重试一次;错误鉴权 HTTP 状态仍不重试,正式资产、服务模块和真实 Quick Tunnel 验证通过。 +- 2.5.6 候选已通过本地二维码真实解码、手机窄屏、配对页公网 404、Quick Tunnel 停止清理、长时事件回放/鉴权浸泡和双平台 CI。 - 当前工作树未发现 AWS、Google、GitHub、OpenAI 私钥或常见访问令牌格式。 - 文档中的历史真实公网地址、个人用户目录和本机工作区路径已替换为 RFC 5737 示例地址或通用示例路径。 - README 截图已人工查看;工作区、会话、地址和消息均为虚构内容。图片元数据未发现用户名、路径、GPS 或设备标识。 @@ -49,5 +50,5 @@ 1. 处置历史 Google/Firebase key 并保留处置证据。 2. 审阅 App Server schema 漂移,更新协议兼容说明。 3. 发布与当前 `main` 同一提交对应的新版本和 SHA-256 文件。 -4. 2.5.5 Release 发布后,从正式归档执行升级;如能复现首次公网不可达,确认自动第二次成功,否则至少确认普通一次成功、三项鉴权验证全绿和停止清理。 +4. 2.5.6 Release 发布后,从正式归档执行升级,确认二维码可扫码、三项公网鉴权验证全绿、消息浸泡无序号倒退并能停止清理。 5. 启用 Dependabot;条件允许时增加 CodeQL 或等价静态分析。 diff --git a/docs/release-notes-2.5.5.zh-CN.md b/docs/release-notes-2.5.5.zh-CN.md index 13fb9bb..151e69f 100644 --- a/docs/release-notes-2.5.5.zh-CN.md +++ b/docs/release-notes-2.5.5.zh-CN.md @@ -32,6 +32,6 @@ - 自动化验证 `PUBLIC_AUTH_VERIFY_FAILED + HTTP 200` 不重试,仍返回失败。 - 真实 Quick Tunnel 通过公网健康、未登录 HTTP 401、未登录 WebSocket 拒绝和停止清理。 -## 候选边界 +## 正式发布结果 -在 GitHub Release 工作流、正式资产校验和公开归档安装回归完成前,2.5.5 仍是候选版本。Quick Tunnel 是 Cloudflare 提供的临时免费入口,地址会变化且没有 SLA;自动重试只减少瞬时传播抖动,不能替代固定 Tunnel 或 Tailscale。 +GitHub Release 工作流、公开资产校验和正式归档安装回归均已完成,2.5.5 已正式发布。Quick Tunnel 是 Cloudflare 提供的临时免费入口,地址会变化且没有 SLA;自动重试只减少瞬时传播抖动,不能替代固定 Tunnel 或 Tailscale。 diff --git a/docs/release-notes-2.5.6.zh-CN.md b/docs/release-notes-2.5.6.zh-CN.md new file mode 100644 index 0000000..f8801ba --- /dev/null +++ b/docs/release-notes-2.5.6.zh-CN.md @@ -0,0 +1,53 @@ +# CX-Codex 2.5.6:手机扫码配对与更完整的稳定性门禁 + +2.5.6 聚焦新人第一次从电脑连接手机的实际步骤:手机访问入口现在更容易找到,本机配对页可以直接扫码打开临时地址。同时,长时浸泡测试开始持续核对消息事件回放和公网鉴权,避免服务看似健康但消息接收或访问边界已经退化。 + +## 本版变化 + +- 设置中的“手机访问”移动到基础设置之后,不再需要先滚过套餐余量和权限控制。 +- 仅限本机的 `/local-setup` 配对页新增二维码,手机相机可直接打开当前已验证的临时地址。 +- 二维码只包含公网地址,不包含访问密码;在本机生成,不请求第三方二维码服务。 +- 配对页继续使用 `no-store` 和禁止脚本的 CSP,通过公网 Host 访问仍返回 404。 +- 长时稳定性浸泡逐样本验证事件回放结构、`latestSeq` 单调性,以及公网未登录 Codex API 始终返回 HTTP 401。 +- 浸泡报告新增回放失败、鉴权失败和事件序号倒退汇总,便于区分服务健康、消息接收与公网安全问题。 + +## 安装或升级 + +```powershell +& ([scriptblock]::Create((irm 'https://raw.githubusercontent.com/Qjzn/CX-Codex/main/scripts/bootstrap-windows.ps1'))) -RemoteQuick -JsonOutput +``` + +同一条命令可用于首次安装、升级和修复。它会选择最新正式 Release、校验 SHA-256,并保留用户配置、Codex 登录态和工作区。 + +安装完成后,在电脑本机打开: + +```text +http://127.0.0.1:7420/local-setup +``` + +用手机相机扫描二维码,再输入页面单独显示的访问密码。不要截图或转发密码。 + +## 卸载 + +```powershell +& ([scriptblock]::Create((irm 'https://raw.githubusercontent.com/Qjzn/CX-Codex/main/scripts/uninstall-windows.ps1'))) -JsonOutput +``` + +默认卸载会停止 CX-Codex 和对应临时通道,删除程序与启动器,同时保留运行数据、Codex 登录态、工作区、Android 签名和已校验的 cloudflared 缓存。 + +## 验证 + +- Linux 构建与 Windows bootstrap smoke 均通过。 +- 本机配对页在 393 × 852 下无横向溢出,二维码宽度为 220px。 +- 从真实页面截图解码二维码,结果与服务端当前 `publicUrl` 完全一致。 +- 真实 Quick Tunnel 通过公网健康、未登录 HTTP 401、未登录 WebSocket 拒绝、配对页公网 404 和停止清理,残留 cloudflared 数量为 0。 +- 7420 前端 21 个表面回归通过,覆盖主页、手机抽屉、折叠屏、输入框、消息尾部、恢复与任务状态。 +- 完整 Release 验证通过构建、服务模块、CLI、Release 归档和 npm package smoke。 + +## 边界 + +Quick Tunnel 免费、免注册且不需要自有服务器,但地址临时、没有 SLA,也不支持 SSE;CX-Codex 会使用 WebSocket 和轮询恢复链路。二维码不会把密码写入 URL,因此扫码后仍需手动输入密码。 + +本版没有扩大对最新 Codex App Server 能力的公开承诺。当前 schema audit 仍记录上游漂移,协议能力继续以仓库兼容矩阵和 candidate review 为准。 + +正式标签发布前,本版仍按候选版本审查;只有 Release 工作流、公开资产校验和正式归档安装回归全部完成后,才视为正式可交付版本。 diff --git a/package-lock.json b/package-lock.json index 0e681b2..aeb22c2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "cx-codex", - "version": "2.5.5", + "version": "2.5.6", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "cx-codex", - "version": "2.5.5", + "version": "2.5.6", "license": "MIT", "dependencies": { "@capacitor/app": "^8.1.1", diff --git a/package.json b/package.json index ca8c916..88afffa 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cx-codex", - "version": "2.5.5", + "version": "2.5.6", "description": "CX-Codex Web UI and browser bridge for Windows, Linux, Android, LAN, and remote self-hosted access", "type": "module", "license": "MIT",