apps/mobile/src/Stack.tsx | 10 + apps/mobile/src/features/threads/McpAppFullscreenScreen.tsx | 168 +++++++++ apps/mobile/src/features/threads/McpAppWebView.tsx | 611 ++++++++++++++++++++++++++++++++ apps/mobile/src/features/threads/ThreadFeed.tsx | 16 + apps/mobile/src/lib/attachmentDownload.ts | 23 ++ apps/mobile/src/lib/openExternalUrl.ts | 1 + apps/mobile/src/lib/threadActivity.test.ts | 32 ++ apps/mobile/src/lib/threadActivity.ts | 47 ++- apps/mobile/src/state/mcpApps.ts | 5 + apps/server/scripts/record-codex-app-server-replay-fixture.ts | 1 + apps/server/src/attachmentStore.test.ts | 20 ++ apps/server/src/attachmentStore.ts | 10 +- apps/server/src/auth/RpcAuthorization.ts | 5 + apps/server/src/mcpApps/McpAppModelContext.test.ts | 68 ++++ apps/server/src/mcpApps/McpAppModelContext.ts | 105 ++++++ apps/server/src/mcpApps/McpAppRequests.test.ts | 284 +++++++++++++++ apps/server/src/mcpApps/McpAppRequests.ts | 240 +++++++++++++ apps/server/src/mcpApps/McpAppSnapshot.ts | 108 ++++++ apps/server/src/observability/RpcInstrumentation.ts | 4 + apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.test.ts | 289 +++++++++++++++ apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.ts | 323 ++++++++++++++++- apps/server/src/orchestration-v2/ProjectionStore.ts | 6 +- apps/server/src/orchestration-v2/ProviderAdapter.ts | 45 +++ apps/server/src/orchestration-v2/RunExecutionService.test.ts | 99 ++++++ apps/server/src/orchestration-v2/RunExecutionService.ts | 21 ++ apps/server/src/orchestration-v2/runtimeLayer.ts | 15 + apps/server/src/orchestration-v2/testkit/ProviderReplayHarness.ts | 2 + apps/server/src/orchestration-v2/testkit/fixtures/delegated_task_status/codex_transcript.ndjson | 2 +- apps/server/src/orchestration-v2/testkit/fixtures/message_steering/codex_transcript.ndjson | 2 +- apps/server/src/orchestration-v2/testkit/fixtures/multi_turn/codex_transcript.ndjson | 2 +- apps/server/src/orchestration-v2/testkit/fixtures/plan_questions/codex_transcript.ndjson | 2 +- apps/server/src/orchestration-v2/testkit/fixtures/proposed_plan/codex_transcript.ndjson | 2 +- apps/server/src/orchestration-v2/testkit/fixtures/provider_thread_resume/codex_transcript.ndjson | 4 +- apps/server/src/orchestration-v2/testkit/fixtures/queued_turn/codex_transcript.ndjson | 2 +- apps/server/src/orchestration-v2/testkit/fixtures/simple/codex_transcript.ndjson | 2 +- apps/server/src/orchestration-v2/testkit/fixtures/subagent/codex_transcript.ndjson | 2 +- apps/server/src/orchestration-v2/testkit/fixtures/subagent_continue/codex_transcript.ndjson | 2 +- apps/server/src/orchestration-v2/testkit/fixtures/subagent_v2/codex_transcript.ndjson | 2 +- apps/server/src/orchestration-v2/testkit/fixtures/subagent_v2_approval/codex_transcript.ndjson | 2 +- apps/server/src/orchestration-v2/testkit/fixtures/subagent_v2_nested/codex_transcript.ndjson | 2 +- apps/server/src/orchestration-v2/testkit/fixtures/subagent_v2_nested_approval/codex_transcript.ndjson | 2 +- apps/server/src/orchestration-v2/testkit/fixtures/thread_fork_native/codex_transcript.ndjson | 2 +- apps/server/src/orchestration-v2/testkit/fixtures/thread_fork_native_continue/codex_transcript.ndjson | 2 +- apps/server/src/orchestration-v2/testkit/fixtures/thread_fork_native_prior_turn/codex_transcript.ndjson | 2 +- apps/server/src/orchestration-v2/testkit/fixtures/thread_fork_native_siblings/codex_transcript.ndjson | 2 +- apps/server/src/orchestration-v2/testkit/fixtures/thread_merge_back_continue/codex_transcript.ndjson | 2 +- apps/server/src/orchestration-v2/testkit/fixtures/thread_merge_back_siblings/codex_transcript.ndjson | 2 +- apps/server/src/orchestration-v2/testkit/fixtures/thread_rollback/codex_transcript.ndjson | 2 +- apps/server/src/orchestration-v2/testkit/fixtures/thread_rollback_after_restart/codex_transcript.ndjson | 4 +- apps/server/src/orchestration-v2/testkit/fixtures/thread_rollback_to_stopped_turn/codex_transcript.ndjson | 2 +- apps/server/src/orchestration-v2/testkit/fixtures/todo_list/codex_transcript.ndjson | 2 +- apps/server/src/orchestration-v2/testkit/fixtures/tool_call_read_only_on_request/codex_transcript.ndjson | 2 +- apps/server/src/orchestration-v2/testkit/fixtures/tool_call_restricted_granular/codex_transcript.ndjson | 2 +- apps/server/src/orchestration-v2/testkit/fixtures/tool_call_workspace_never/codex_transcript.ndjson | 2 +- apps/server/src/orchestration-v2/testkit/fixtures/turn_interrupt/codex_transcript.ndjson | 2 +- apps/server/src/orchestration-v2/testkit/fixtures/turn_interrupt_mid_tool/codex_transcript.ndjson | 2 +- apps/server/src/orchestration-v2/testkit/fixtures/web_search/codex_transcript.ndjson | 2 +- apps/server/src/persistence/Migrations.ts | 2 + apps/server/src/persistence/Migrations/055_OrchestrationV2.test.ts | 4 +- apps/server/src/persistence/Migrations/059_McpAppModelContext.ts | 21 ++ apps/server/src/persistence/reconcileV2PreviewMigration.test.ts | 2 + apps/server/src/ws.ts | 6 + apps/web/src/components/ChatView.tsx | 35 +- apps/web/src/components/chat/McpAppFrame.tsx | 550 ++++++++++++++++++++++++++++ apps/web/src/components/chat/MessagesTimeline.logic.ts | 38 +- apps/web/src/components/chat/MessagesTimeline.tsx | 71 +++- apps/web/src/confirmDialog.test.ts | 4 + apps/web/src/confirmDialog.ts | 5 + apps/web/src/session-logic.test.ts | 19 + apps/web/src/session-logic.ts | 37 +- apps/web/src/state/mcpApps.ts | 5 + docs/user/html-renders.md | 8 + packages/client-runtime/package.json | 8 + packages/client-runtime/src/mcpApps/host.test.ts | 419 ++++++++++++++++++++++ packages/client-runtime/src/mcpApps/host.ts | 576 ++++++++++++++++++++++++++++++ packages/client-runtime/src/state/mcpApps.ts | 33 ++ packages/contracts/src/index.ts | 1 + packages/contracts/src/mcpApps.ts | 114 ++++++ packages/contracts/src/rpc.ts | 43 +++ packages/shared/package.json | 4 + packages/shared/src/mcpApp.test.ts | 150 ++++++++ packages/shared/src/mcpApp.ts | 236 ++++++++++++ packages/shared/src/toolOutput.ts | 32 +- 83 files changed, 4990 insertions(+), 55 deletions(-)