.github/workflows/ci.yml | 3 + apps/desktop/src/backend/DesktopBackendConfiguration.ts | 2 + apps/desktop/src/backend/DesktopBackendManager.test.ts | 2 + apps/desktop/src/backend/DesktopBackendManager.ts | 42 + apps/desktop/src/backend/DesktopBackendPool.test.ts | 2 + apps/desktop/src/backend/DesktopBackendPool.ts | 2 + apps/desktop/src/ipc/channels.ts | 9 +- apps/desktop/src/ipc/methods/preview.test.ts | 26 - apps/desktop/src/ipc/methods/preview.ts | 110 +- apps/desktop/src/main.ts | 2 + apps/desktop/src/preload.ts | 21 +- apps/desktop/src/preview/CdpRelay.test.ts | 174 +++ apps/desktop/src/preview/CdpRelay.ts | 219 ++++ apps/desktop/src/preview/DesktopBrowserHost.test.ts | 122 ++ apps/desktop/src/preview/DesktopBrowserHost.ts | 225 ++++ apps/desktop/src/preview/Manager.test.ts | 942 +------------- apps/desktop/src/preview/Manager.ts | 1844 ++------------------------ apps/desktop/src/preview/PlaywrightInjectedRuntime.test.ts | 80 -- apps/desktop/src/preview/PlaywrightInjectedRuntime.ts | 214 ---- apps/desktop/src/preview/PreviewKeyboard.test.ts | 184 --- apps/desktop/src/preview/PreviewKeyboard.ts | 363 ------ apps/mobile/app.config.ts | 3 + apps/mobile/metro.config.js | 56 +- apps/mobile/scripts/generate-device-stream.mts | 20 +- apps/mobile/src/Stack.tsx | 11 + apps/mobile/src/features/browser/BrowserPreviewRouteScreen.tsx | 273 ++++ apps/mobile/src/features/browser/BrowserTabMenu.tsx | 157 +++ apps/mobile/src/features/browser/PreviewStreamWebView.tsx | 534 ++++++++ apps/mobile/src/features/browser/ThreadBrowserFloat.tsx | 126 ++ apps/mobile/src/features/browser/browser-preview-button.tsx | 37 + apps/mobile/src/features/browser/browserTabs.ts | 23 + apps/mobile/src/features/browser/preview-stream-document.ts | 84 ++ apps/mobile/src/features/browser/preview-stream.browser.ts | 711 +++++++++++ apps/mobile/src/features/threads/ThreadDetailScreen.tsx | 36 + apps/mobile/src/features/threads/floating-working-control.tsx | 36 +- apps/mobile/src/state/preview.ts | 166 +++ apps/mobile/src/types/mobile-preview-stream.d.ts | 4 + apps/server/package.json | 1 + apps/server/src/auth/RpcAuthorization.ts | 5 +- apps/server/src/auth/http.ts | 30 + apps/server/src/binCli.ts | 2 + apps/server/src/cli/browser.ts | 195 +++ apps/server/src/cli/config.ts | 4 + apps/server/src/cli/invocation.test.ts | 29 +- apps/server/src/cli/invocation.ts | 26 + apps/server/src/cli/pair.ts | 2 + apps/server/src/config.ts | 4 + apps/server/src/device/DeviceHubProxy.ts | 46 +- apps/server/src/environment/ServerEnvironment.ts | 1 + apps/server/src/htmlRender/HtmlRender.test.ts | 2 +- apps/server/src/htmlRender/HtmlRender.ts | 61 +- apps/server/src/htmlRender/PreviewBrowser.test.ts | 296 ----- apps/server/src/htmlRender/PreviewBrowser.ts | 462 ------- apps/server/src/htmlRender/headlessChrome.ts | 40 +- apps/server/src/mcp/McpHttpServer.test.ts | 39 + apps/server/src/mcp/McpHttpServer.ts | 19 +- apps/server/src/mcp/PreviewAutomationBroker.test.ts | 220 ++-- apps/server/src/mcp/PreviewAutomationBroker.ts | 54 +- apps/server/src/mcp/toolkits/core.test.ts | 2 + apps/server/src/mcp/toolkits/preview/handlers.ts | 7 + apps/server/src/mcp/toolkits/preview/tools.test.ts | 3 + apps/server/src/mcp/toolkits/preview/tools.ts | 82 +- apps/server/src/mcp/toolkits/previewControls/handlers.test.ts | 15 +- apps/server/src/mcp/toolkits/previewControls/handlers.ts | 11 + apps/server/src/mcp/toolkits/previewControls/tools.ts | 7 +- apps/server/src/mcp/toolkits/worktree/registration.test.ts | 2 + apps/server/src/preview/DesktopBrowserChannel.test.ts | 58 + apps/server/src/preview/DesktopBrowserChannel.ts | 225 ++++ apps/server/src/preview/Manager.test.ts | 119 +- apps/server/src/preview/Manager.ts | 198 +-- apps/server/src/preview/PreviewBrowser.test.ts | 292 +++++ apps/server/src/preview/PreviewBrowser.ts | 463 +++++++ apps/server/src/preview/PreviewBrowserHost.test.ts | 105 ++ apps/server/src/preview/PreviewBrowserHost.ts | 145 +++ apps/server/src/preview/ServerBrowser.test.ts | 1092 ++++++++++++++++ apps/server/src/preview/ServerBrowser.ts | 2202 ++++++++++++++++++++++++++++++++ apps/server/src/preview/ServerBrowserContexts.test.ts | 245 ++++ apps/server/src/preview/ServerBrowserContexts.ts | 180 +++ apps/server/src/preview/ServerBrowserPage.test.ts | 248 ++++ apps/server/src/preview/ServerBrowserPage.ts | 640 ++++++++++ apps/server/src/preview/ServerBrowserStream.test.ts | 358 ++++++ apps/server/src/preview/ServerBrowserStream.ts | 287 +++++ apps/server/src/preview/SessionControl.test.ts | 169 +++ apps/server/src/preview/SessionControl.ts | 135 ++ apps/server/src/server.ts | 9 + apps/server/src/ws.ts | 39 +- apps/web/src/AppRoot.tsx | 2 - apps/web/src/browser/ElectronBrowserHost.tsx | 45 +- apps/web/src/browser/HostedBrowserWebview.test.tsx | 2 +- apps/web/src/browser/HostedBrowserWebview.tsx | 44 +- apps/web/src/browser/ServerBrowserSurface.tsx | 930 ++++++++++++++ apps/web/src/browser/browserLinkTarget.ts | 10 +- apps/web/src/browser/browserRecordingUpload.ts | 84 -- apps/web/src/browser/desktopTabLifetime.ts | 19 +- apps/web/src/browser/openFileInPreview.ts | 11 +- apps/web/src/browser/previewRuntime.ts | 49 + apps/web/src/browser/serverPictureInPicture.ts | 177 +++ apps/web/src/browser/useOpenLink.ts | 2 +- apps/web/src/components/ChatMarkdown.tsx | 6 +- apps/web/src/components/ChatView.tsx | 96 +- apps/web/src/components/CommandBlock.tsx | 45 + apps/web/src/components/files/FilePreviewPanel.tsx | 5 +- apps/web/src/components/onboarding/WelcomeWizard.tsx | 41 +- apps/web/src/components/preview/AgentBrowserCursor.tsx | 33 +- apps/web/src/components/preview/PreviewAutomationHosts.test.tsx | 363 ------ apps/web/src/components/preview/PreviewAutomationHosts.tsx | 868 ------------- apps/web/src/components/preview/PreviewMoreMenu.tsx | 165 +-- apps/web/src/components/preview/PreviewPanel.tsx | 4 +- apps/web/src/components/preview/PreviewView.test.tsx | 8 +- apps/web/src/components/preview/PreviewView.tsx | 278 +++- apps/web/src/components/preview/ThreadPreviewMiniPlayer.tsx | 207 ++- apps/web/src/components/preview/openDiscoveredPort.ts | 7 +- apps/web/src/components/preview/openPreviewSession.ts | 3 + apps/web/src/components/preview/openTerminalLinkInPreview.ts | 7 +- apps/web/src/components/preview/previewAutomationClientId.ts | 4 - apps/web/src/components/preview/previewAutomationErrors.ts | 243 ---- apps/web/src/components/preview/previewAutomationHostBudget.test.ts | 136 -- apps/web/src/components/preview/previewAutomationHostBudget.ts | 42 - apps/web/src/components/preview/previewAutomationOpenReadiness.test.ts | 141 -- apps/web/src/components/preview/previewAutomationOpenReadiness.ts | 69 - apps/web/src/components/preview/previewAutomationRequestConsumer.test.ts | 407 ------ apps/web/src/components/preview/previewAutomationRequestConsumer.ts | 121 -- apps/web/src/components/preview/previewAutomationTarget.test.ts | 59 - apps/web/src/components/preview/previewAutomationTarget.ts | 37 - apps/web/src/components/preview/previewClickFocus.test.ts | 152 --- apps/web/src/components/preview/previewClickFocus.ts | 67 - apps/web/src/components/preview/previewNavigationReadiness.test.ts | 56 - apps/web/src/components/preview/previewNavigationReadiness.ts | 74 -- apps/web/src/components/preview/previewViewportReadiness.test.ts | 72 -- apps/web/src/components/preview/previewViewportReadiness.ts | 37 - apps/web/src/components/preview/usePreviewBridge.ts | 6 +- apps/web/src/components/preview/usePreviewSession.ts | 9 + apps/web/src/components/settings/IntegrationsSettings.logic.test.ts | 30 + apps/web/src/components/settings/IntegrationsSettings.tsx | 91 +- apps/web/src/previewStateStore.test.ts | 13 + apps/web/src/previewStateStore.ts | 8 +- apps/web/src/rightPanelStore.test.ts | 26 + apps/web/src/rightPanelStore.ts | 10 +- apps/web/src/routes/_chat.tsx | 4 +- apps/web/src/rpc/requestLatencyState.test.ts | 11 +- apps/web/src/rpc/requestLatencyState.ts | 5 +- apps/web/src/state/entities.ts | 17 + apps/web/src/state/previewStream.ts | 51 + docs/user/html-renders.md | 2 +- docs/user/remote-access.md | 48 + knip.jsonc | 1 + packages/client-runtime/package.json | 4 + packages/client-runtime/src/preview/serverBrowserStream.test.ts | 201 +++ packages/client-runtime/src/preview/serverBrowserStream.ts | 476 +++++++ packages/client-runtime/src/rpc/client.test.ts | 153 --- packages/client-runtime/src/rpc/client.ts | 11 +- packages/client-runtime/src/state/preview.test.ts | 18 - packages/client-runtime/src/state/preview.ts | 46 +- packages/contracts/src/desktopBootstrap.ts | 4 + packages/contracts/src/desktopBrowser.ts | 46 + packages/contracts/src/environment.ts | 4 + packages/contracts/src/index.ts | 1 + packages/contracts/src/ipc.ts | 68 +- packages/contracts/src/preview.ts | 90 +- packages/contracts/src/previewAutomation.ts | 241 +++- packages/contracts/src/rpc.ts | 49 +- packages/shared/src/t3McpToolPresentation.ts | 25 + pnpm-lock.yaml | 3 + scripts/lib/cli-external-packages.test.ts | 2 +- scripts/lib/cli-external-packages.ts | 2 + 165 files changed, 14298 insertions(+), 8447 deletions(-)