Repository navigation
[Windows → iPhone Remote] History pagination times out and latest messages are missing; thread/items/list returns large image generation records #54751
Description
使用版本
- Windows 桌面应用内部版本:
26.1013.31256(来自已安装应用及启动记录)。 - Windows 安装包版本:
26.1013.3656.0。 - 随应用运行的后端:
codex-cli 0.163.0-alpha.10.2。 - 手机:iPhone,使用 ChatGPT 的 Codex Remote;具体 iOS 和手机应用版本尚未采集。
- 订阅类型:本轮未采集。
平台与网络环境
- Windows 11 x64,系统报告
Microsoft Windows NT 10.0.26200.0。 - 桌面和手机通过代理/VPN 访问服务。桌面后端显式配置
HTTP_PROXY、HTTPS_PROXY,指向本机 HTTP 代理。 - 显式代理使桌面能够上线;保留该配置时,手机能连接主机并打开一个对照会话,但另外两个含生成图片的会话仍无法完整加载。
- 本报告聚焦上线之后的历史加载失败。代理对大数据传输的影响尚未排除。
实际现象
2026-10-16(UTC+08:00)在两个已有会话中重复观察到:
- Windows 桌面可以正常打开会话,看到已完成的最新回复。
- iPhone Remote 能看到主机和会话,但打开这两个会话会超时。
- 强制关闭并重开手机应用后,其中一个会话可以显示少量旧的执行进度,同时仍报超时;无法充分向上浏览历史,桌面已完成的最新回复也没有同步到手机。
- 同时,一个可读取的对照会话仍能在这台手机上打开。
- 用户还观察到:尝试打开较大会话后可能出现主机离线,约 5—10 分钟后重新上线。该时长是用户观察,尚未逐次与主机日志精确对齐,不作为固定协议超时或已确认因果。
手机完整报错原文尚未采集,本报告中的“超时”是用户对现象的描述。
复现步骤
- 在 Windows 桌面准备一个包含多次图片生成和工具调用历史的已有会话。
- 确认桌面本地可以读取该会话,且已有已完成的最新回复。
- 用已配对的 iPhone Remote 连接这台主机,打开该会话。
- 观察手机历史加载超时、只显示旧片段或缺少最新回复;再打开一个对照会话比较。
以上步骤在现有两份会话中复现。尚无可以公开的最小合成会话,也未建立确定的大小阈值。
预期行为
手机应能够及时显示最新文字和完成状态,继续使用原会话;较早的消息及图片按需加载。单个大历史页不应使其他会话或整条远程连接长时间不可用。希望获得应用层面的修复,而不是依靠持续新建会话、迁移摘要或清理历史来使用 Remote。
主机日志确认的阶段
在 2026-10-16 23:08—23:13(UTC+08:00)的三个连接样本中,主机依次收到:
initialize → thread/resume → thread/turns/list → thread/items/list
每个样本包含 3 条 thread/turns/list 和 15—16 条 thread/items/list 请求。手机重连时会同时恢复两个受影响会话和对照会话,所以不能把这些请求当作严格单会话试验。
这些日志证明已经进入历史分页阶段;没有记录每个分页请求的完整参数、实际响应发送完成或手机接收情况,因此无法把每条请求精确映射到下表中的某一页。本窗口未捕获 fs/readFile 或 Remote pong timeout;这不代表整个故障期间都不存在此类事件。
同版本后端的隔离副本测量
为避免把磁盘历史文件大小误当作传输量,使用相同的已安装后端,在独立临时 CODEX_HOME 中复制受测会话的历史和分页显示投影,以 codex_chatgpt_ios_remote 客户端身份调用接口:
thread/turns/list,itemsView: "summary",获取回合。- 对各回合调用
thread/items/list,省略limit,使用默认每页 25 项。 - 跟随
nextCursor读到末页,仅统计 JSON RPC 响应字节数、耗时和项目类型。
| 隔离副本 | 页数 | 全部分页响应合计(字节) | 最大单页(字节) | 最大页本机 RPC 耗时 | imageGeneration 项合计(字节) |
|---|---|---|---|---|---|
| 受影响会话 A | 19 | 15,344,422 | 10,039,273 | 0.069 秒 | 14,497,682(6 项) |
| 受影响会话 B | 22 | 7,687,304 | 4,467,941 | 0.034 秒 | 6,492,954(3 项) |
| 手机可打开的对照会话 | 33 | 1,295,915 | 150,630 | 0.003 秒 | 0 |
所有分页都成功读到末页,没有 API 错误。这些是本地未压缩 JSON RPC 响应的字节数,不是手机实际接收量、网络抓包量或手机内存用量。对照会话持续有新活动,测量反映当时快照。
只在响应的内存副本中模拟过滤 imageGeneration 项后,会话 A 的分页总量约降至 0.85 MB,会话 B 约降至 1.19 MB。这个模拟证明这些项贡献了大部分数据量;它未应用到正式会话,也不是手机端修复成功的证据。
对应源码线索
对照 rust-v0.163.0-alpha.10.2:
thread_resume_redaction.rs:对 iOS/Android Remote 的thread/resume省略imageGeneration,并精简 MCP 数据。thread_items_list_response_inner:thread/items/list读取并转换完整存储项,没有调用上述手机响应精简逻辑。- 分页数量常量:默认 25 项、最多 100 项;该路径按项目数量分页,没有对应的响应字节预算。
因此,首次恢复时省略的大图片生成记录,会在后续分页读取中重新出现。上述隔离测量已复现这种数据量差异。
待调查方向与结论边界
当前最强假设是:后续大分页在远程传输或手机处理阶段触发超时。尚不能断言网络速度、代理、手机解码/渲染或服务端排队中的哪一项是最终瓶颈,也不能断言这些大页已经被手机完整接收。
希望维护者检查:
- 手机
thread/resume与thread/items/list是否应采用一致的轻量响应策略,并保持分页游标与项目语义正确。 - 图片数据能否按需读取,以及是否需要按字节而非仅按项目数限制分页。
- 单会话大响应、重试与共享 Remote 通道的心跳/恢复是否互相影响。
- 是否能提供受支持的诊断方式,按请求记录响应大小、发送完成、手机接收/解码结果及超时所在阶段,以完成因果验证。
相关报告
相关但未证明同根因:#50934(大历史影响 Remote)、#47148(图片较多的会话在手机加载失败)、#40249(图片生成结果经历史读取接口返回大块数据)。本报告补充 Windows→iPhone 的历史分页阶段证据,以及 thread/resume 与 thread/items/list 响应精简不一致的同版本测量。
隐私与操作范围
本报告经用户授权提交。公开内容仅包含匿名测量、版本、必要的网络背景和公共源码链接;原始聊天、图片、数据库、账号、设备/会话标识和私人文件路径均保留在本机。诊断使用独立副本,正式历史保持完整。
Activity
[-][Windows → iPhone Remote] 历史分页加载超时、最新消息缺失;thread/items/list 返回大块图片生成记录[/-][+][Windows → iPhone Remote] History pagination times out and latest messages are missing; thread/items/list returns large image generation records[/+]github-actions commentedon Oct 17, 2026
English translation:
Versions used
26.1013.31256(from the installed app and startup records).26.1013.3656.0.codex-cli 0.163.0-alpha.10.2.Platform and network environment
Microsoft Windows NT 10.0.26200.0.HTTP_PROXYandHTTPS_PROXYto point to a local HTTP proxy.Actual behavior
The following was repeatedly observed in two existing conversations on 2026-10-16 (UTC+08:00):
The exact full error message on the phone has not yet been collected. “Timeout” in this report is the user's description of the behavior.
Steps to reproduce
These steps reproduce the issue in the two existing conversations. There is not yet a minimal synthetic conversation that can be shared publicly, nor has a definite size threshold been established.
Expected behavior
The phone should promptly display the latest text and completion status and allow continued use of the original conversation, loading older messages and images on demand. A single large history page should not make other conversations or the entire remote connection unavailable for an extended period. An application-level fix is desired, rather than having to keep creating new conversations, transfer summaries, or clear history to use Remote.
Stage confirmed by host logs
In three connection samples from 23:08–23:13 on 2026-10-16 (UTC+08:00), the host received the following sequence:
Each sample contains 3
thread/turns/listrequests and 15–16thread/items/listrequests. When the phone reconnects, it resumes both affected conversations and the control conversation simultaneously, so these requests cannot be treated as strictly single-conversation tests.These logs confirm that history pagination has begun. They do not record the full parameters of each pagination request, actual completion of response transmission, or reception on the phone, so individual requests cannot be mapped precisely to specific pages in the table below. No
fs/readFileor Remote pong timeout was captured in this window; this does not mean such events were absent throughout the entire failure period.Measurements using isolated copies with the same backend version
To avoid mistaking on-disk history file size for transfer volume, the same installed backend was used with an independent temporary
CODEX_HOME, containing copies of the tested conversations' history and paginated display projections. The APIs were called using thecodex_chatgpt_ios_remoteclient identity:thread/turns/listwithitemsView: "summary"to retrieve turns.thread/items/listfor each turn, omittinglimitto use the default of 25 items per page.nextCursorthrough the final page, measuring only JSON RPC response bytes, elapsed time, and item types.All paginated reads successfully reached the final page, with no API errors. These are byte counts of local, uncompressed JSON RPC responses, not actual bytes received by the phone, network packet capture volume, or phone memory usage. The control conversation continues to have new activity; the measurements reflect its snapshot at the time.
Simulating the removal of
imageGenerationitems only in in-memory copies of the responses reduced the total pagination volume to approximately 0.85 MB for conversation A and approximately 1.19 MB for conversation B. This simulation demonstrates that these items account for most of the data volume; it was not applied to the actual conversations and is not evidence of a successful fix on the phone.Relevant source code clues
Based on
rust-v0.163.0-alpha.10.2:thread_resume_redaction.rs: omitsimageGenerationfromthread/resumefor iOS/Android Remote and trims MCP data.thread_items_list_response_inner:thread/items/listreads and converts complete stored items without invoking the mobile response trimming logic above.As a result, the large image generation records omitted during the initial resume reappear in subsequent paginated reads. The isolated measurements above reproduced this difference in data volume.
Areas for investigation and limits of the conclusions
The strongest current hypothesis is that subsequent large pages trigger timeouts during remote transfer or processing on the phone. It is not yet possible to identify network speed, the proxy, phone decoding/rendering, or server-side queuing as the ultimate bottleneck, nor to assert that the phone has received these large pages in full.
Please investigate:
thread/resumeandthread/items/listshould use a consistent lightweight response strategy while preserving correct pagination cursor and item semantics.Related reports
Related, but not proven to share the same root cause: #50934 (large histories affecting Remote), #47148 (conversations with many images failing to load on mobile), and #40249 (image generation results returning large amounts of data through history read APIs). This report adds evidence from the Windows→iPhone history pagination stage and same-version measurements showing inconsistent response trimming between
thread/resumeandthread/items/list.Privacy and scope of operations
This report is submitted with the user's authorization. Public content includes only anonymized measurements, versions, necessary network context, and public source code links; raw chats, images, databases, accounts, device/conversation identifiers, and private file paths remain on the local machine. Diagnostics used independent copies, and the original history remains intact.
parangsori commentedon Oct 20, 2026
Additional macOS-to-mobile case: newest replies remain visible, but earlier history persistently times out in one image-heavy chat. Adding this here rather than opening a duplicate. The same root cause is not yet established.
Observed behavior and reproduction
The mobile observations above are user-reported, not an independently captured mobile trace. The report was collected on October 20–21, 2026 (Asia/Seoul). The exact date of the reported 15:41 boundary, mobile OS/app version, and full mobile error text were not collected. No public minimal synthetic reproduction or deterministic size threshold is available.
Local evidence
Read-only streaming inspection of one local rollout snapshot found:
data:image/...;base64,markersThe largest record occurred later than the reported 15:41 boundary; it has not been identified as the item failing on mobile. These are on-disk storage measurements, not measured RPC response sizes, mobile transfer volumes, or mobile memory usage.
A separate desktop
read_threaddiagnostic tool produced the following results for this chat, withincludeOutputs: falseandmaxOutputCharsPerItem: 500:turnLimit: 1: success; following the returned opaque cursor for another one-turn page also succeeded.turnLimit: 10:Thread history exceeds the read size limit. Try fewer turns. A single oversized turn cannot be read by this tool.This is the diagnostic tool's guard message, not the phone's error, and it does not prove that mobile uses the same failing path. A bounded desktop-log sample also contained successfully routed
thread/read,thread/turns/list, andthread/items/listresponses. No request-level mobile receive/decode timing was captured. Recovering seven completed text replies locally succeeded; this does not certify every stored record or fix mobile access.Environment and source comparison
26.730.61309(bundle metadata; not confirmed as the active process version).codex-cli 0.160.0; the desktop-bundled backend version was not established.5.1.38. This is not a clean-plugin-free reproduction.bca7c59b870b1d468e7d2ea869ef263661a2c8d8and upstream Codexaa081afb1b044ee66c738b8808c07f13dfcff373. The inspected LazyCodex snapshot did not contain an implementation of the mobile history reader or the diagnostic guard string. Reporting here also follows the official Codex issue-reporting guidance.Requested investigation
Please check whether the mobile pagination path can keep recent text accessible and load large image/tool payloads on demand, with byte-aware response budgets and request-correlated transfer/decode timing. A regression case should cover a recent image-heavy chat where new replies work while older pages repeatedly fail, alongside a normally loading control chat.
No original chats, images, account/device/thread identifiers, private file paths, or credentials are attached. The original conversation and settings were not rewritten, cleared, or restarted during this diagnosis.
This issue or PR was generated by LazyCodex.
Tag: lazycodex-generated