OpenAI 构建了会在答案出现后继续运行的 ChatGPT 界面

Codex 客户端代码揭示了一个由服务器控制的 GenUI 通道,该通道可以在交付后刷新特定小部件,独立于 OpenAI 面向第三方 MCP 应用的公开 Apps SDK。

By · Published · Updated

RUNTIMEWIRE INVESTIGATION — Scoop

Original reporting by RuntimeWire, based on reverse engineering.

为何重要

将特定任务的软件直接嵌入回答中可以让用户留在ChatGPT内,而不是将他们引导到独立的工具和网站。由于当前架构是封闭且第一方的,OpenAI控制哪些界面可以获得分发,而外部开发者缺乏可比的途径。这使得客户端和界面层成为除模型质量之外的另一种锁定来源。

Reporting record

Finding

OpenAI’s Codex desktop client contains an undocumented GenUI architecture capable of delivering structured conversational interfaces, alongside a locally bundled catalog of 467 versioned “Learning Block” types.

How we verified

Methods: reverse engineering.

RuntimeWire independently extracted and analyzed the signed Windows distribution of OpenAI’s Codex desktop client. The package contains a 1.09 MB Learning Block runtime with 442 embedded manifests representing 467 unique type-and-version combinations. The client describes these objects to users as “Interactive learning block[s]” and includes dedicated rendering, control, caption, example, analytics and error-handling systems. Recovered metadata includes matched_type, server_learning_block_version, rendered_learning_block_version, initial_values, thumbnail_asset_key, widget_type and display_mode. Separate application code exposes a generic genui message type and an authenticated endpoint at: /conversation/{conversation_id}/message/{message_id}/genui/refresh_widget The associated client operation is named refreshGenUiWidget, with genui_refresh metadata. The code can also reinterpret a generic GenUI payload as a charts_widget_v2, indicating that GenUI is a broader delivery layer rather than another name for Learning Blocks. Learning Blocks identify their default render source as: CHATGPT_MATH_BLOCK_RENDER_SOURCE_GENUI_LEARNING_BLOCK This establishes the relationship supported by the code: GenUI is the underlying interface architecture, while Learning Blocks are a first-party family of interactive modules delivered through it. The package includes explicit fallback reasons—missing_matched_type, unsupported_matched_type and external_egress_blocked—showing that the server selects a block type and the client renders it only when the necessary local implementation and permissions are available. RuntimeWire found 901 visualization-related JavaScript chunks and 552 example-related chunks. Those numbers describe compiled files, not unique products. The defensible catalog count is 467 unique versioned types, recovered from the manifests themselves. Public OpenAI documentation describes the currently available Visualize feature, but does not document the GenUI name, its refresh endpoint, the Learning Blocks registry or the scale of the bundled catalog.

  1. Parsed the supplied Codex app.asar without modifying the signed installation.
  2. Verified its cryptographic hash against the installed package.
  3. Indexed the webview assets.
  4. Located the generic GenUI request and refresh paths.
  5. Traced generic genui references into recognized widget types.
  6. Identified the explicit GENUI_LEARNING_BLOCK source value.
  7. Followed the Learning Block content-reference renderer.
  8. Extracted the Learning Block manifest registry.
  9. Mapped minified manifest variables back to 467 unique identifiers.
  10. Counted manifest versions.
  11. Recovered subject-group labels.
  12. Traced visualization, controls, captions, thumbnails and examples.
  13. Examined fallback, analytics, feedback and follow-up behavior.
  14. Compared the findings with OpenAI’s public description of Visualize.
  15. Separated confirmed client behavior from claims requiring server-side evidence.

Tested versions:

  • Windows package: OpenAI.Codex_26.820.7780.0_x64__2p2nqsd0c76g0 Internal application version: 26.820.60940 Build: 7119

Reproduction

RuntimeWire independently reproduced the core finding.

Obtain the same signed Codex Windows package. Record the SHA-256 digest of app/resources/app.asar. Copy the archive to a separate analysis directory. Extract it using an Electron-compatible ASAR utility. Locate webview/assets/learning-block-Cr6UKzy-.js. Parse the embedded manifests and deduplicate entries by their type and version fields. Confirm 467 unique type/version combinations. Search the remaining compiled bundles for:- refreshGenUiWidget

  • genui_refresh
  • /genui/refresh_widget
  • charts_widget_v2
  • CHATGPT_MATH_BLOCK_RENDER_SOURCE_GENUI_LEARNING_BLOCK
  • missing_matched_type
  • unsupported_matched_type
  • external_egress_blocked

Preserve screenshots, extracted strings, parsing output and hashes as the reporting record. Do not modify the installed or signed application.

File hashes

  • 5DF8BF5A9D30742919390AB11FA419E83AAB0891152569A42C6EA4ABF15386C2

Company response

RuntimeWire requested comment; the company had not responded by publication time.

Conceptual interface showing an interactive educational module embedded inside a larger conversational widget.

OpenAI 构建了一个由服务器控制的界面系统,允许 ChatGPT 回答的一部分在答案出现后继续变化——这是 RuntimeWire 对随 Codex 桌面客户端捆绑的代码进行检验后发现的。

该架构在 OpenAI 的内部实现中被标识为 GenUI,可以将刷新指令附加到助手消息上、安排后续更新、定位到特定消息内的特定小部件,并仅在服务器声明该对象完成时停止。同一客户端包含 467 个针对称为 Learning Blocks 的打包交互模块的版本化清单。

代码指向 ChatGPT 内的两条不同界面通道。OpenAI 公开提供 Apps SDK、交互式第三方应用、开发者模式和基于 Model Context Protocol(MCP)构建的应用的应用目录提交通道。另有一条在 Codex 客户端中的特权 GenUI 通道,用于服务器选择并由 OpenAI 打包的界面,包括 Learning Blocks。

RuntimeWire 未发现 GenUI 或 Learning Blocks 本身的公开 SDK 或注册路径。OpenAI 另行提供面向第三方 MCP 应用的 Apps SDK 和目录,这些似乎使用不同的生态系统实现。…

When you purchase through links in our articles, we may earn a small commission. This doesn’t affect our editorial independence.

Reader comments

Conversation for this story loads after sign-in.