Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions .agents/skills/codex-app-parity/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -1303,3 +1303,17 @@ After each feature implementation session that uses this skill:
- CX-Codex now persists the pre-send signature count and reconstructs that boundary for older outbox rows before merging optimistic and authoritative messages. Stable `clientMessageId` ownership remains unchanged.
- Android resume keeps the first reconciliation attempt eager but makes later retries evidence-driven, avoiding three full active-conversation reloads that can starve interaction on long mobile threads. The native Activity probes renderer responsiveness, presents recovery copy, and recreates or reloads the exact current route when the renderer hangs or is reclaimed.
- Headless phone verification at 393 x 852 opened the waiting-state detail sheet with zero browser errors or failed responses. Native policy unit tests and a physical-device background/resume pass remain the Android release boundary.

## Findings: Compact GitHub Trending Discovery (2026-08-07)

- The installed Codex desktop bundle has no exact GitHub Trending surface, so this feature uses the closest current discovery and disclosure patterns instead of inventing false one-to-one parity.
- Codex file discovery uses a compact rounded bordered filter with an accessible label, while truncated message content uses explicit `aria-expanded`, “显示更多/收起” copy and a rotating disclosure affordance.
- CX-Codex adapts those patterns as a compact scope filter plus fixed two-column project cards. Expanded content spans the row to preserve reading width; CX-specific repository actions remain explicit because Codex has no equivalent surface.

## Findings: Cross-process Streaming Responsiveness (2026-08-07)

- Installed Codex `26.727.6591` virtualizes turn content, memoizes message subtrees, and batches dense deltas. CX-Codex keeps the same ownership boundary while adapting it to a browser/WebView that may mirror session files written by another desktop process.
- Two amplification paths caused the reported freeze: a quiet-window convergence repeatedly requested the complete long rollout during external execution, while every text-only delta also invalidated conversation height/cache and scroll-restore work. A bounded file projection alone was therefore insufficient.
- External session convergence now preserves `commentary/final` phase and requires the latest assistant item itself to be final. This remains correct when two Codex tasks interleave in one session file: an older sibling final cannot end a newer commentary stream.
- Conversation rendering now prunes structural caches and schedules scroll restoration only when message identity/order changes. Text-only deltas leave height correction to `ResizeObserver`, and per-message estimates use weak identity ownership instead of a small sequential LRU that thrashed on dense turns.
- At `393 x 852`, the final production stress fixture kept 1602 messages to 13 mounted items, sustained 48ms updates with 50-57ms maximum heartbeat lag, accepted an action during streaming, and produced no horizontal overflow. A real cross-process active conversation then updated from its session log without any full-history read during the observed windows.
23 changes: 4 additions & 19 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,25 +17,10 @@ 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.7.5 发布说明: [docs/release-notes-2.7.5.zh-CN.md](./docs/release-notes-2.7.5.zh-CN.md)
- 2.7.4 发布说明(已由 2.7.5 替代): [docs/release-notes-2.7.4.zh-CN.md](./docs/release-notes-2.7.4.zh-CN.md)
- 2.7.3 发布说明(已由 2.7.4 替代): [docs/release-notes-2.7.3.zh-CN.md](./docs/release-notes-2.7.3.zh-CN.md)
- 2.7.2 发布说明: [docs/release-notes-2.7.2.zh-CN.md](./docs/release-notes-2.7.2.zh-CN.md)
- 2.6.0 发布说明: [docs/release-notes-2.6.0.zh-CN.md](./docs/release-notes-2.6.0.zh-CN.md)
- 2.5.9 发布说明: [docs/release-notes-2.5.9.zh-CN.md](./docs/release-notes-2.5.9.zh-CN.md)
- 2.5.8 发布说明: [docs/release-notes-2.5.8.zh-CN.md](./docs/release-notes-2.5.8.zh-CN.md)
- 2.5.7 发布说明: [docs/release-notes-2.5.7.zh-CN.md](./docs/release-notes-2.5.7.zh-CN.md)
- 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)
- 2.5.2 发布说明: [docs/release-notes-2.5.2.zh-CN.md](./docs/release-notes-2.5.2.zh-CN.md)
- 2.5.1 发布说明: [docs/release-notes-2.5.1.zh-CN.md](./docs/release-notes-2.5.1.zh-CN.md)
- 2.5.0 发布说明: [docs/release-notes-2.5.0.zh-CN.md](./docs/release-notes-2.5.0.zh-CN.md)
- 2.4.1 发布说明: [docs/release-notes-2.4.1.zh-CN.md](./docs/release-notes-2.4.1.zh-CN.md)
- 2.4.0 发布说明: [docs/release-notes-2.4.0.zh-CN.md](./docs/release-notes-2.4.0.zh-CN.md)
- 2.3.1 发布说明: [docs/release-notes-2.3.1.zh-CN.md](./docs/release-notes-2.3.1.zh-CN.md)
- 2.3.0 发布说明: [docs/release-notes-2.3.0.zh-CN.md](./docs/release-notes-2.3.0.zh-CN.md)
- 2.7.6 发布说明: [docs/release-notes-2.7.6.zh-CN.md](./docs/release-notes-2.7.6.zh-CN.md)
- 可靠回滚版 2.7.4: [docs/release-notes-2.7.4.zh-CN.md](./docs/release-notes-2.7.4.zh-CN.md)
- 完整更新日志: [docs/changelog.zh-CN.md](./docs/changelog.zh-CN.md)
- 发行版保留策略: [docs/release-retention.zh-CN.md](./docs/release-retention.zh-CN.md)
- Windows 一条命令安装: [快速安装](#快速安装)
- Android 客户端说明: [docs/android-shell.zh-CN.md](./docs/android-shell.zh-CN.md)
- 平台兼容与 Slash Command 支持: [docs/platform-and-commands.zh-CN.md](./docs/platform-and-commands.zh-CN.md)
Expand Down
9 changes: 9 additions & 0 deletions docs/changelog.zh-CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,15 @@

## 未发布

## 2.7.6 - 2026-08-07

- 修复会话投影在没有可见乐观消息时直接复用持久消息数组的问题;后续流式消息合并不再反向修改权威历史,避免同一条消息重复出现并触发响应式更新放大。
- 外部 Codex 进程执行长任务时,只有最新助手消息已经进入最终阶段且没有运行、排队或待确认信号,才执行一次完整历史收敛;执行中持续使用有界会话日志投影,避免反复读取大型会话。
- 文本流式更新不再重复清理结构缓存或调度滚动恢复;1602 条消息的手机压力场景保持约 12–13 个实际挂载节点,并在 48ms 更新期间维持可交互。
- 已连接且只是打开着空闲会话时,不再因长时间没有通知就主动重启健康流;断线、重连或仍有同步需求时继续执行恢复,减少前后台切换中的无效重连。
- GitHub 热门页收敛为紧凑筛选栏和手机双列卡片,长介绍按需展开,减少重复标题和大卡片占用。
- GitHub Releases 建立稳定版保留策略:保留当前稳定版、可靠回滚版与每条历史版本线最后一个门禁全绿版本;清理只移除 Release 展示和二进制资产,Git 标签与提交历史继续保留。

## 2.7.5 - 2026-08-07

- 修复 Android 从后台恢复后,已进入权威历史的用户消息仍与本地待发送投影合并、导致同一问题显示两条的问题;恢复边界现在随请求持久化,旧记录也会安全推导发送前基线。
Expand Down
47 changes: 47 additions & 0 deletions docs/release-notes-2.7.6.zh-CN.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
# CX-Codex 2.7.6:会话执行更稳,长任务页面保持可操作

2.7.6 是聊天稳定性补丁版,修复 2.7.5 仍可能出现的重复消息与执行中页面卡顿,并收敛 GitHub Releases 的公开版本数量。升级后不需要清理会话、浏览器缓存或 Android 应用数据。

## 重复消息与流式执行

- 会话消息投影始终使用独立数组。没有待发送气泡时,新的流式消息也不会再被写回持久历史,避免一条消息变成两条或触发响应式更新循环。
- 外部 Codex 桌面任务持续写入时,7420 优先读取最近会话的有界增量;只有最新助手消息已经最终完成且没有运行、排队或待确认信号,才做一次权威完整历史收敛。
- 文本增量不再反复清理消息结构缓存、测量全部高度或恢复滚动位置。用户阅读历史时仍保留原位置,位于底部时继续跟随最新输出。
- 已连接的空闲页面不会仅因暂时没有通知就重建连接;真正断线、正在执行或仍有待同步内容时,恢复路径保持不变。

## 手机端响应与页面体验

- 生产压力场景在 393 × 852 视口加载 1602 条消息并每 48ms 更新回复,只挂载 12–13 个可见消息节点;最大事件循环延迟 64ms,执行中按钮仍可立即响应。
- 独立 headless Playwright 复核得到最大延迟 47ms,点击后流式更新继续增长,页面无横向溢出、控制台错误或失败请求。
- GitHub 热门页改为紧凑筛选栏和手机双列卡片;默认只展示摘要,展开后再显示完整介绍与仓库地址。

## 安装与升级

Windows 一条命令安装或升级:

```powershell
& ([scriptblock]::Create((irm 'https://raw.githubusercontent.com/Qjzn/CX-Codex/main/scripts/bootstrap-windows.ps1'))) -RemoteQuick -JsonOutput
```

需要卸载程序时使用官方入口;默认保留可恢复的用户配置,只有显式选择清理数据时才删除:

```powershell
& ([scriptblock]::Create((irm 'https://raw.githubusercontent.com/Qjzn/CX-Codex/main/scripts/uninstall-windows.ps1'))) -JsonOutput
```

Android 请从 [GitHub 最新 Release](https://github.com/Qjzn/CX-Codex/releases/latest) 下载 `cx-codex-android-v2.7.6.apk`。正式 APK 沿用 2.5.9 之后的固定发布证书,可覆盖升级并保留服务地址与设置。

## 发行版整理

- GitHub Releases 只保留当前稳定版、一个可靠回滚版,以及每条历史版本线最后一个发布门禁全绿的归档版本。
- 中间补丁、已撤回版本和发布门禁失败版本会从 Releases 页面移除,避免新人误装;Git 标签与提交历史不会删除,仍可审计和比对源码。
- 具体保留规则和版本清单见 [发行版保留策略](./release-retention.zh-CN.md)。

## 验证与边界

- 前端 normalizer、生产前端、CLI、服务模块和完整 38 场景前端回归通过;完整回归耗时 499.7 秒。
- 会话压力场景、消息投影不可变性、前台通知流恢复策略和外部会话最终阶段判断均有确定性回归。
- 正式稳定身份仍以主分支 CI、Release 工作流、公开 ZIP/APK、SHA-256、固定 Android 签名和公开下载复核全部通过为准。
- 浏览器与 Playwright 不能代替 Android 真机深度 Doze/进程回收验收;FCM 深度 Doze 能力仍按 issue #28 单独跟踪。

标签发布前,本版仍属于候选版本。只有主分支 CI、Release 工作流、公开 ZIP/APK、SHA-256、固定 Android 签名和公网 Windows 全新安装全部通过后,才视为正式稳定版本。
31 changes: 31 additions & 0 deletions docs/release-retention.zh-CN.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# GitHub 发行版保留策略

本项目减少 Releases 页面中的重复补丁和已知不稳定制品,让新人优先看到可安装、可回滚、可追溯的版本。

## 保留原则

1. 保留最新一个完成主分支 CI、Release 工作流、ZIP/APK、SHA-256 和固定签名复核的稳定版。
2. 保留当前版本线中最近一个可靠回滚版;若最新版出现安装或会话阻断问题,可快速退回。
3. 历史版本线只保留最后一个 GitHub 门禁全绿且主要资产完整的版本,用于兼容审计,不推荐新安装。
4. 已撤回、发布门禁失败、只有中间补丁价值或已被同版本线稳定补丁完全替代的 Release 会被移除。
5. 清理只删除 GitHub Release 展示对象及其二进制资产,不删除 Git 标签、提交历史、更新日志或源码发布说明。

## 稳定版判定

版本号更大不等于更稳定。至少需要同时满足:

- 对应提交的 Linux build 和 Windows bootstrap 检查成功;
- Release 工作流成功;
- ZIP 与 SHA-256 同时存在;需要 Android 的版本还应包含正式 APK 与 APK SHA-256;
- 没有已确认的安装阻断、签名冲突、重复执行或会话卡死问题;
- 新版本发布后完成公开资产复核,才替换 `latest` 稳定身份。

## 当前保留目标

- 当前稳定版:`v2.7.6`(完成正式发布复核后生效)。
- 可靠回滚版:`v2.7.4`。
- 历史稳定归档:`v2.6.1`、`v2.5.9`、`v2.4.1`、`v2.3.1`、`v2.2.7`、`2.1.17`、`v0.2.0-bridge.5`、`v0.1.58-bridge.6`。

其中 `v2.7.3` 已因 Release ZIP 缺少构建文件而撤回,`v2.7.5` 存在本版修复的残余消息投影风险,`v2.2.8` 的 Release 检查失败;三者都不作为稳定版保留。

旧版本仅用于回溯。新安装和日常升级始终使用 [GitHub 最新稳定 Release](https://github.com/Qjzn/CX-Codex/releases/latest)。
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "cx-codex",
"version": "2.7.5",
"version": "2.7.6",
"description": "CX-Codex Web UI and browser bridge for Windows, Linux, Android, LAN, and remote self-hosted access",
"type": "module",
"license": "MIT",
Expand Down
Loading