Skip to content

[Windows → iPhone Remote] History pagination times out and latest messages are missing; thread/items/list returns large image generation records #54751

Open

Description

@JaffarL

使用版本

  • 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)在两个已有会话中重复观察到:

  1. Windows 桌面可以正常打开会话,看到已完成的最新回复。
  2. iPhone Remote 能看到主机和会话,但打开这两个会话会超时。
  3. 强制关闭并重开手机应用后,其中一个会话可以显示少量旧的执行进度,同时仍报超时;无法充分向上浏览历史,桌面已完成的最新回复也没有同步到手机。
  4. 同时,一个可读取的对照会话仍能在这台手机上打开。
  5. 用户还观察到:尝试打开较大会话后可能出现主机离线,约 5—10 分钟后重新上线。该时长是用户观察,尚未逐次与主机日志精确对齐,不作为固定协议超时或已确认因果。

手机完整报错原文尚未采集,本报告中的“超时”是用户对现象的描述。

复现步骤

  1. 在 Windows 桌面准备一个包含多次图片生成和工具调用历史的已有会话。
  2. 确认桌面本地可以读取该会话,且已有已完成的最新回复。
  3. 用已配对的 iPhone Remote 连接这台主机,打开该会话。
  4. 观察手机历史加载超时、只显示旧片段或缺少最新回复;再打开一个对照会话比较。

以上步骤在现有两份会话中复现。尚无可以公开的最小合成会话,也未建立确定的大小阈值。

预期行为

手机应能够及时显示最新文字和完成状态,继续使用原会话;较早的消息及图片按需加载。单个大历史页不应使其他会话或整条远程连接长时间不可用。希望获得应用层面的修复,而不是依靠持续新建会话、迁移摘要或清理历史来使用 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 客户端身份调用接口:

  1. thread/turns/list,itemsView: "summary",获取回合。
  2. 对各回合调用 thread/items/list,省略 limit,使用默认每页 25 项。
  3. 跟随 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:

因此,首次恢复时省略的大图片生成记录,会在后续分页读取中重新出现。上述隔离测量已复现这种数据量差异。

待调查方向与结论边界

当前最强假设是:后续大分页在远程传输或手机处理阶段触发超时。尚不能断言网络速度、代理、手机解码/渲染或服务端排队中的哪一项是最终瓶颈,也不能断言这些大页已经被手机完整接收。

希望维护者检查:

  1. 手机 thread/resume 与 thread/items/list 是否应采用一致的轻量响应策略,并保持分页游标与项目语义正确。
  2. 图片数据能否按需读取,以及是否需要按字节而非仅按项目数限制分页。
  3. 单会话大响应、重试与共享 Remote 通道的心跳/恢复是否互相影响。
  4. 是否能提供受支持的诊断方式,按请求记录响应大小、发送完成、手机接收/解码结果及超时所在阶段,以完成因果验证。

相关报告

相关但未证明同根因:#50934(大历史影响 Remote)、#47148(图片较多的会话在手机加载失败)、#40249(图片生成结果经历史读取接口返回大块数据)。本报告补充 Windows→iPhone 的历史分页阶段证据,以及 thread/resume 与 thread/items/list 响应精简不一致的同版本测量。

隐私与操作范围

本报告经用户授权提交。公开内容仅包含匿名测量、版本、必要的网络背景和公共源码链接;原始聊天、图片、数据库、账号、设备/会话标识和私人文件路径均保留在本机。诊断使用独立副本,正式历史保持完整。

Activity

  1. added
    bugSomething isn't working
    iOSIssues related to the Codex iOS app
    windows-osIssues related to Codex on Windows systems
    app-serverIssues involving app server protocol or interfaces
    connectivityIssues involving networking or endpoint connectivity problems (disconnections)
    on Oct 17, 2026
  2. changed the title [-][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[/+] on Oct 17, 2026
  3. github-actions commented on Oct 17, 2026

    @github-actions
    Contributor

    English translation:

    Versions used

    • Windows desktop app internal build: 26.1013.31256 (from the installed app and startup records).
    • Windows installer version: 26.1013.3656.0.
    • Backend bundled with the app: codex-cli 0.163.0-alpha.10.2.
    • Phone: iPhone, using Codex Remote in ChatGPT; the specific iOS and mobile app versions have not yet been collected.
    • Subscription type: not collected during this investigation.

    Platform and network environment

    • Windows 11 x64; the system reports Microsoft Windows NT 10.0.26200.0.
    • Both the desktop and phone access the service through a proxy/VPN. The desktop backend explicitly configures HTTP_PROXY and HTTPS_PROXY to point to a local HTTP proxy.
    • The explicit proxy allows the desktop to come online. With this configuration retained, the phone can connect to the host and open a control conversation, but two other conversations containing generated images still cannot load completely.
    • This report focuses on history loading failures after the host comes online. The proxy's impact on large data transfers has not yet been ruled out.

    Actual behavior

    The following was repeatedly observed in two existing conversations on 2026-10-16 (UTC+08:00):

    1. The Windows desktop can open the conversations normally and display the latest completed replies.
    2. iPhone Remote can see the host and conversations, but opening these two conversations times out.
    3. After force-closing and reopening the mobile app, one conversation can display a small amount of old execution progress while still reporting a timeout. It is not possible to browse far enough back through the history, and the latest replies completed on the desktop have not synced to the phone.
    4. Meanwhile, a readable control conversation can still be opened on the same phone.
    5. The user also observed that attempting to open a larger conversation may cause the host to go offline, then come back online after approximately 5–10 minutes. This duration is a user observation and has not yet been precisely correlated with host logs for each occurrence; it should not be treated as a fixed protocol timeout or confirmed causality.

    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

    1. On the Windows desktop, prepare an existing conversation with a history containing multiple image generations and tool calls.
    2. Confirm that the conversation can be read locally on the desktop and already has a latest completed reply.
    3. Connect to this host using a paired iPhone Remote and open the conversation.
    4. Observe history loading timeouts, only old fragments being displayed, or missing latest replies on the phone; then open a control conversation for comparison.

    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:

    initialize → thread/resume → thread/turns/list → thread/items/list
    

    Each sample contains 3 thread/turns/list requests and 15–16 thread/items/list requests. 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/readFile or 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 the codex_chatgpt_ios_remote client identity:

    1. Call thread/turns/list with itemsView: "summary" to retrieve turns.
    2. Call thread/items/list for each turn, omitting limit to use the default of 25 items per page.
    3. Follow nextCursor through the final page, measuring only JSON RPC response bytes, elapsed time, and item types.
    Isolated copy Pages Total bytes across all paginated responses Largest page (bytes) Local RPC time for largest page Total bytes for imageGeneration items
    Affected conversation A 19 15,344,422 10,039,273 0.069 seconds 14,497,682 (6 items)
    Affected conversation B 22 7,687,304 4,467,941 0.034 seconds 6,492,954 (3 items)
    Control conversation that opens on the phone 33 1,295,915 150,630 0.003 seconds 0

    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 imageGeneration items 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:

    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:

    1. Whether mobile thread/resume and thread/items/list should use a consistent lightweight response strategy while preserving correct pagination cursor and item semantics.
    2. Whether image data can be read on demand, and whether pagination needs limits based on bytes rather than only item count.
    3. Whether large responses for a single conversation, retries, and heartbeat/recovery on the shared Remote channel affect one another.
    4. Whether a supported diagnostic method can be provided to record response size, transmission completion, phone reception/decoding results, and the stage at which a timeout occurs for each request, so that causality can be verified.

    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/resume and thread/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.

  4. parangsori commented on Oct 20, 2026

    @parangsori

    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

    1. Continue an existing desktop Codex chat containing many image/tool outputs.
    2. Open that same chat on mobile and load earlier messages.
    3. In this case, the user reports that new replies are visible, but messages after an afternoon 15:41 boundary cannot be loaded and a message-loading/timeout error persists. Other chats eventually load on the same mobile client. This affected chat is relatively recent.
    4. Return to the Mac: saved text replies are still readable locally. The mobile failure remains unresolved.

    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:

    Measurement Observed value
    JSONL file size 512,968,654 bytes
    Largest individual JSONL record 34,832,478 bytes
    Inline data:image/...;base64, markers 161 (marker count, not a unique-image count)

    The 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_thread diagnostic tool produced the following results for this chat, with includeOutputs: false and maxOutputCharsPerItem: 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, and thread/items/list responses. 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

    • Host: macOS on Apple silicon. Installed desktop bundle version: 26.730.61309 (bundle metadata; not confirmed as the active process version).
    • Shell CLI reports codex-cli 0.160.0; the desktop-bundled backend version was not established.
    • Installed OMO plugin: 5.1.38. This is not a clean-plugin-free reproduction.
    • Fresh source comparison: LazyCodex bca7c59b870b1d468e7d2ea869ef263661a2c8d8 and upstream Codex aa081afb1b044ee66c738b8808c07f13dfcff373. 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.
    • In the latest upstream snapshot, mobile resume redaction trims MCP payloads and removes image-generation entries, whereas the items-list path pages stored items by count and converts them to entries without invoking that redaction function. This supports investigating the boundary already discussed here; it does not establish which code version or stage caused this user's mobile timeout.

    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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    app-serverIssues involving app server protocol or interfacesbugSomething isn't workingconnectivityIssues involving networking or endpoint connectivity problems (disconnections)iOSIssues related to the Codex iOS appremotewindows-osIssues related to Codex on Windows systems

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions