apps/desktop/package.json | 1 + apps/desktop/src/ipc/channels.ts | 5 + apps/desktop/src/ipc/methods/preview.ts | 37 +- apps/desktop/src/playwright-injected-runtime.test.ts | 20 + apps/desktop/src/playwright-injected-runtime.ts | 49 ++ apps/desktop/src/preload.ts | 32 +- apps/desktop/src/preview-pick-preload.ts | 8 + apps/desktop/src/preview-view-manager.test.ts | 58 ++ apps/desktop/src/preview-view-manager.ts | 524 +++++++++++++++--- apps/desktop/src/window/DesktopWindow.ts | 5 +- apps/server/src/mcp/Layers/McpHttpServer.test.ts | 18 + apps/server/src/mcp/Layers/PreviewAutomationBroker.test.ts | 24 + apps/server/src/mcp/Layers/PreviewAutomationBroker.ts | 12 +- apps/server/src/mcp/toolkits/preview/handlers.ts | 4 + apps/server/src/mcp/toolkits/preview/tools.test.ts | 37 ++ apps/server/src/mcp/toolkits/preview/tools.ts | 75 ++- apps/server/src/provider/CodexDeveloperInstructions.ts | 13 + apps/server/src/provider/Layers/CodexAdapter.test.ts | 58 ++ apps/server/src/provider/Layers/CodexAdapter.ts | 7 +- apps/server/src/provider/Layers/CodexSessionRuntime.test.ts | 26 + apps/server/src/provider/Layers/CodexSessionRuntime.ts | 13 + apps/web/src/browser/BrowserSurfaceSlot.tsx | 45 ++ apps/web/src/browser/ElectronBrowserHost.tsx | 44 ++ apps/web/src/browser/HostedBrowserWebview.tsx | 116 ++++ apps/web/src/browser/browserRecording.ts | 115 ++++ apps/web/src/browser/browserSurfaceStore.ts | 53 ++ apps/web/src/browser/browserTargetResolver.test.ts | 81 +++ apps/web/src/browser/browserTargetResolver.ts | 81 +++ apps/web/src/browser/desktopTabLifetime.ts | 30 + apps/web/src/components/ChatView.tsx | 944 +++++++++++++++++--------------- apps/web/src/components/DiffPanelShell.tsx | 6 +- apps/web/src/components/PlanSidebar.tsx | 2 +- apps/web/src/components/RightPanelTabs.tsx | 148 +++++ apps/web/src/components/ThreadTerminalDrawer.tsx | 50 +- apps/web/src/components/chat/ChatHeader.tsx | 96 +--- apps/web/src/components/chat/MessagesTimeline.tsx | 23 +- apps/web/src/components/preview/PreviewAutomationOwner.tsx | 50 +- apps/web/src/components/preview/PreviewChromeRow.tsx | 51 +- apps/web/src/components/preview/PreviewEmptyState.tsx | 32 +- apps/web/src/components/preview/PreviewLocalServerCard.tsx | 12 +- apps/web/src/components/preview/PreviewMoreMenu.tsx | 2 - apps/web/src/components/preview/PreviewPanel.tsx | 12 +- apps/web/src/components/preview/PreviewPanelShell.tsx | 6 +- apps/web/src/components/preview/PreviewView.tsx | 105 +++- apps/web/src/components/preview/PreviewWebview.tsx | 142 ----- apps/web/src/components/preview/useDiscoveredLocalServers.ts | 8 +- apps/web/src/components/preview/usePreviewBridge.ts | 19 +- apps/web/src/components/preview/usePreviewSession.ts | 2 +- apps/web/src/main.tsx | 8 +- apps/web/src/previewStateStore.test.ts | 24 +- apps/web/src/previewStateStore.ts | 128 ++++- apps/web/src/rightPanelStore.test.ts | 43 +- apps/web/src/rightPanelStore.ts | 194 +++++-- apps/web/src/routes/_chat.$environmentId.$threadId.tsx | 244 +-------- apps/web/src/session-logic.test.ts | 61 +++ apps/web/src/session-logic.ts | 9 + packages/contracts/src/ipc.ts | 40 +- packages/contracts/src/previewAutomation.ts | 367 +++++++++++-- pnpm-lock.yaml | 3 + 59 files changed, 3222 insertions(+), 1200 deletions(-)