Android native ChatGPT app: requestDisplayMode() remounts widget from scratch - internal navigation state is lost on fullscreen-to-inline transition

When a widget calls window.openai.requestDisplayMode({ mode: "inline" }) to transition from fullscreen back to inline, the Android native app destroys the fullscreen widget mount and remounts it from scratch using the original tool output props. This means any internal navigation performed inside the widget is lost - the new widget always starts at the initialView from the original tool output.

On iOS native app, desktop web, and Android mobile web (Chrome), the same widget instance is preserved and resized.

Steps to reproduce

  1. Create an MCP server with a widget that supports multiple internal views, controlled by an initialView prop from the tool output

  2. Have a tool return a widget with initialView: "viewA"

  3. Inside the widget, navigate internally to viewB

  4. Expand to fullscreen via requestDisplayMode("fullscreen") - widget instance is preserved (same on all platforms)

  5. From fullscreen, navigate to viewC and call requestDisplayMode("inline")

  6. Expected: Widget returns to inline showing viewC

  7. Actual (Android native app only): The fullscreen widget is destroyed. The widget is remounted from scratch, starting at initialView: "viewA", with no knowledge of the previous navigation

Evidence/ Debug

We render a unique mount ID (crypto.randomUUID()) inside our widget to track instance identity.

Transition iOS / Desktop / Android Chrome Android native app
inline → fullscreen Mount ID unchanged Mount ID unchanged
fullscreen → inline Mount ID unchanged Mount ID changes (fresh remount)

The new instance has empty navigation history, confirming it is a fresh mount, not a resize of the existing one.