From 3e2883b96403fda6282aa391e88b5348da9e3331 Mon Sep 17 00:00:00 2001 From: Daniel Visca Date: Wed, 2 Sep 2026 09:27:33 -0700 Subject: [PATCH 1/2] feat(desktop): browser tab alongside Chat and Terminal in task panels MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A new "browser" panel tab type backed by an Electron WebContentsView the main process owns; the renderer drives bounds/visibility/navigation over the host router. Layered per the desktop architecture rules: - @posthog/platform: IEmbeddedBrowser interface + EMBEDDED_BROWSER token, and a new embeddedBrowser host capability flag (desktop true, web false) - @posthog/core: EmbeddedBrowserService (single http(s)-only URL policy, normalizeBrowserUrl), zod schemas, DI module; "browser" TabData variant with addBrowserTab/updateBrowserTabUrl transforms - host-router: embeddedBrowser router (one-line forwards + event subscription), mounted in both the shared and desktop assemblies - apps/code: ElectronEmbeddedBrowser adapter — sandboxed guest on its own persist:embedded-browser partition, all permission requests denied, UA cleaned at session + network-header level so OAuth popups aren't rejected as embedded webviews, http(s) popups allowed as same-partition child windows (popup SSO), zoom-aware bounds - @posthog/ui: BrowserPanel (toolbar/URL bar/error banner + pure chrome for stories), slot hook gluing the native view to the panel rect, visibility gated on active-tab state (inactive tabs stay mounted with non-zero rects), layout-diff reconciler destroying views on every tab-close path, browser-view teardown on task deletion Tabs persist per task through the existing panel-layout store; each tab restores its last page across restarts, and page logins survive restarts on the persistent partition. The whole feature is capability-gated: the web host hides it entirely and existing layouts are untouched (additive TabData variant, no persistence version bump). Generated-By: PostHog Desktop Task-Id: 1120fcea-fc07-4c54-8dbb-50b7b712f9cb --- .../desktop/apps/code/src/main/di/bindings.ts | 3 + .../apps/code/src/main/di/container.ts | 8 + .../electron-embedded-browser.ts | 313 ++++++++++++++++++ .../desktop/apps/code/src/main/trpc/router.ts | 2 + .../code/src/renderer/desktop-services.ts | 7 +- .../desktop/apps/web/src/web-container.ts | 7 +- .../embedded-browser/01-real-view-posthog.png | Bin 0 -> 292567 bytes .../embedded-browser/02-story-fresh-tab.png | Bin 0 -> 16799 bytes .../embedded-browser/03-story-page-open.png | Bin 0 -> 6307 bytes .../embedded-browser/04-story-load-failed.png | Bin 0 -> 9755 bytes .../images/embedded-browser/05-tab-strip.png | Bin 0 -> 10381 bytes .../embedded-browser.module.ts | 7 + .../embedded-browser/embeddedBrowser.test.ts | 79 +++++ .../src/embedded-browser/embeddedBrowser.ts | 99 ++++++ .../core/src/embedded-browser/identifiers.ts | 3 + .../src/embedded-browser/normalizeUrl.test.ts | 39 +++ .../core/src/embedded-browser/normalizeUrl.ts | 49 +++ .../core/src/embedded-browser/schemas.ts | 42 +++ .../src/panels/panelLayoutTransforms.test.ts | 63 ++++ .../core/src/panels/panelLayoutTransforms.ts | 53 +++ .../packages/core/src/panels/panelTypes.ts | 5 + .../packages/host-router/src/router.ts | 2 + .../src/routers/embedded-browser.router.ts | 72 ++++ .../desktop/packages/platform/package.json | 4 + .../packages/platform/src/embedded-browser.ts | 62 ++++ .../platform/src/host-capabilities.ts | 6 + .../desktop/packages/platform/tsup.config.ts | 1 + .../embedded-browser/BrowserPanel.stories.tsx | 73 ++++ .../embedded-browser/BrowserPanel.test.tsx | 99 ++++++ .../embedded-browser/BrowserPanel.tsx | 281 ++++++++++++++++ .../embedded-browser/browserViewId.ts | 8 + .../embeddedBrowserObscuredStore.ts | 21 ++ .../useBrowserViewCleanup.test.tsx | 90 +++++ .../embedded-browser/useBrowserViewCleanup.ts | 80 +++++ .../embedded-browser/useEmbeddedBrowser.ts | 160 +++++++++ .../panels/components/LeafNodeRenderer.tsx | 19 +- .../panels/components/PanelLayout.tsx | 11 + .../panels/components/TabbedPanel.stories.tsx | 106 ++++++ .../panels/components/TabbedPanel.tsx | 16 +- .../panels/hooks/usePanelLayoutHooks.tsx | 5 + .../src/features/panels/panelLayoutStore.ts | 30 ++ .../components/TabContentRenderer.tsx | 10 + .../features/tasks/useTaskCrudMutations.ts | 6 + .../ui/src/shell/useHostCapabilities.ts | 5 +- 44 files changed, 1932 insertions(+), 14 deletions(-) create mode 100644 products/desktop/apps/code/src/main/platform-adapters/electron-embedded-browser.ts create mode 100644 products/desktop/docs/images/embedded-browser/01-real-view-posthog.png create mode 100644 products/desktop/docs/images/embedded-browser/02-story-fresh-tab.png create mode 100644 products/desktop/docs/images/embedded-browser/03-story-page-open.png create mode 100644 products/desktop/docs/images/embedded-browser/04-story-load-failed.png create mode 100644 products/desktop/docs/images/embedded-browser/05-tab-strip.png create mode 100644 products/desktop/packages/core/src/embedded-browser/embedded-browser.module.ts create mode 100644 products/desktop/packages/core/src/embedded-browser/embeddedBrowser.test.ts create mode 100644 products/desktop/packages/core/src/embedded-browser/embeddedBrowser.ts create mode 100644 products/desktop/packages/core/src/embedded-browser/identifiers.ts create mode 100644 products/desktop/packages/core/src/embedded-browser/normalizeUrl.test.ts create mode 100644 products/desktop/packages/core/src/embedded-browser/normalizeUrl.ts create mode 100644 products/desktop/packages/core/src/embedded-browser/schemas.ts create mode 100644 products/desktop/packages/host-router/src/routers/embedded-browser.router.ts create mode 100644 products/desktop/packages/platform/src/embedded-browser.ts create mode 100644 products/desktop/packages/ui/src/features/embedded-browser/BrowserPanel.stories.tsx create mode 100644 products/desktop/packages/ui/src/features/embedded-browser/BrowserPanel.test.tsx create mode 100644 products/desktop/packages/ui/src/features/embedded-browser/BrowserPanel.tsx create mode 100644 products/desktop/packages/ui/src/features/embedded-browser/browserViewId.ts create mode 100644 products/desktop/packages/ui/src/features/embedded-browser/embeddedBrowserObscuredStore.ts create mode 100644 products/desktop/packages/ui/src/features/embedded-browser/useBrowserViewCleanup.test.tsx create mode 100644 products/desktop/packages/ui/src/features/embedded-browser/useBrowserViewCleanup.ts create mode 100644 products/desktop/packages/ui/src/features/embedded-browser/useEmbeddedBrowser.ts create mode 100644 products/desktop/packages/ui/src/features/panels/components/TabbedPanel.stories.tsx diff --git a/products/desktop/apps/code/src/main/di/bindings.ts b/products/desktop/apps/code/src/main/di/bindings.ts index 3d80c5653a3c..61c64ebea734 100644 --- a/products/desktop/apps/code/src/main/di/bindings.ts +++ b/products/desktop/apps/code/src/main/di/bindings.ts @@ -119,6 +119,7 @@ import type { DEEP_LINK_SERVICE } from "@posthog/platform/deep-link"; import type { DEV_HOST_ACTIONS_SERVICE } from "@posthog/platform/dev-host-actions"; import type { DIALOG_SERVICE } from "@posthog/platform/dialog"; import type { DISK_CACHE_SERVICE } from "@posthog/platform/disk-cache"; +import type { EMBEDDED_BROWSER } from "@posthog/platform/embedded-browser"; import type { FILE_ICON_SERVICE } from "@posthog/platform/file-icon"; import type { IMAGE_PROCESSOR_SERVICE } from "@posthog/platform/image-processor"; import type { MAIN_WINDOW_SERVICE } from "@posthog/platform/main-window"; @@ -232,6 +233,7 @@ import type { ElectronContextMenu } from "../platform-adapters/electron-context- import type { ElectronCrypto } from "../platform-adapters/electron-crypto"; import type { ElectronDevHostActions } from "../platform-adapters/electron-dev-host-actions"; import type { ElectronDialog } from "../platform-adapters/electron-dialog"; +import type { ElectronEmbeddedBrowser } from "../platform-adapters/electron-embedded-browser"; import type { ElectronFileIcon } from "../platform-adapters/electron-file-icon"; import type { ElectronImageProcessor } from "../platform-adapters/electron-image-processor"; import type { ElectronMainWindow } from "../platform-adapters/electron-main-window"; @@ -327,6 +329,7 @@ export interface MainBindings { [FILE_ICON_SERVICE]: ElectronFileIcon; [SECURE_STORAGE_SERVICE]: ElectronSecureStorage; [MAIN_WINDOW_SERVICE]: ElectronMainWindow; + [EMBEDDED_BROWSER]: ElectronEmbeddedBrowser; [APP_LIFECYCLE_SERVICE]: ElectronAppLifecycle; [POWER_MANAGER_SERVICE]: ElectronPowerManager; [UPDATER_SERVICE]: ElectronUpdater; diff --git a/products/desktop/apps/code/src/main/di/container.ts b/products/desktop/apps/code/src/main/di/container.ts index bd315058bb24..87dacdf53d5f 100644 --- a/products/desktop/apps/code/src/main/di/container.ts +++ b/products/desktop/apps/code/src/main/di/container.ts @@ -30,6 +30,7 @@ import { CONTEXT_MENU_CONTROLLER, CONTEXT_MENU_EXTERNAL_APPS_SERVICE, } from "@posthog/core/context-menu/identifiers"; +import { embeddedBrowserCoreModule } from "@posthog/core/embedded-browser/embedded-browser.module"; import { FocusHostService } from "@posthog/core/focus/focus-service"; import { FocusServiceEvent } from "@posthog/core/focus/identifiers"; import { gitHostModule } from "@posthog/core/git/git-host.module"; @@ -109,6 +110,7 @@ import { DEEP_LINK_SERVICE } from "@posthog/platform/deep-link"; import { DEV_HOST_ACTIONS_SERVICE } from "@posthog/platform/dev-host-actions"; import { DIALOG_SERVICE } from "@posthog/platform/dialog"; import { DISK_CACHE_SERVICE } from "@posthog/platform/disk-cache"; +import { EMBEDDED_BROWSER } from "@posthog/platform/embedded-browser"; import { FILE_ICON_SERVICE } from "@posthog/platform/file-icon"; import { IMAGE_PROCESSOR_SERVICE } from "@posthog/platform/image-processor"; import { MAIN_WINDOW_SERVICE } from "@posthog/platform/main-window"; @@ -239,6 +241,7 @@ import { ElectronContextMenu } from "../platform-adapters/electron-context-menu" import { ElectronCrypto } from "../platform-adapters/electron-crypto"; import { ElectronDevHostActions } from "../platform-adapters/electron-dev-host-actions"; import { ElectronDialog } from "../platform-adapters/electron-dialog"; +import { ElectronEmbeddedBrowser } from "../platform-adapters/electron-embedded-browser"; import { ElectronFileIcon } from "../platform-adapters/electron-file-icon"; import { ElectronImageProcessor } from "../platform-adapters/electron-image-processor"; import { ElectronMainWindow } from "../platform-adapters/electron-main-window"; @@ -354,6 +357,7 @@ container.bind(ANALYTICS_SERVICE).toConstantValue(posthogNodeAnalytics); container.bind(FILE_ICON_SERVICE).to(ElectronFileIcon); container.bind(SECURE_STORAGE_SERVICE).to(ElectronSecureStorage); container.bind(MAIN_WINDOW_SERVICE).to(ElectronMainWindow); +container.bind(EMBEDDED_BROWSER).to(ElectronEmbeddedBrowser); container.bind(APP_LIFECYCLE_SERVICE).to(ElectronAppLifecycle); container.bind(POWER_MANAGER_SERVICE).to(ElectronPowerManager); container.bind(UPDATER_SERVICE).to(ElectronUpdater); @@ -809,6 +813,10 @@ container.bind(QUICK_ASK_RUN_DEFAULTS).toConstantValue(() => { // service in the main process; resolved by the host-router browserTabs router. container.load(browserTabsModule); +// Embedded browser: the URL-policy service (core) over the Electron +// WebContentsView adapter, resolved by the host-router embeddedBrowser router. +container.load(embeddedBrowserCoreModule); + container.bind(MAIN_DEV_FLAGS_SERVICE).to(DevFlagsService); container.bind(MAIN_DEV_METRICS_SERVICE).to(DevMetricsService); container.bind(MAIN_DEV_NETWORK_SERVICE).to(DevNetworkService); diff --git a/products/desktop/apps/code/src/main/platform-adapters/electron-embedded-browser.ts b/products/desktop/apps/code/src/main/platform-adapters/electron-embedded-browser.ts new file mode 100644 index 000000000000..063f041f8f7c --- /dev/null +++ b/products/desktop/apps/code/src/main/platform-adapters/electron-embedded-browser.ts @@ -0,0 +1,313 @@ +import type { + EmbeddedBrowserBounds, + EmbeddedBrowserCreateOptions, + EmbeddedBrowserEvent, + EmbeddedBrowserPageState, + IEmbeddedBrowser, +} from "@posthog/platform/embedded-browser"; +import { MAIN_WINDOW_SERVICE } from "@posthog/platform/main-window"; +import { TypedEventEmitter } from "@posthog/shared"; +import { app, session, shell, WebContentsView } from "electron"; +import { inject, injectable } from "inversify"; +import { logger } from "../utils/logger"; +import type { ElectronMainWindow } from "./electron-main-window"; + +const log = logger.scope("embedded-browser"); + +/** + * A separate persistent partition from the app's own session (`persist:main`): + * pages the user browses never see the app's cookies, and their logins + * survive app restarts. + */ +const PARTITION = "persist:embedded-browser"; + +type Events = { event: EmbeddedBrowserEvent }; + +function isWebUrl(raw: string): boolean { + try { + const url = new URL(raw); + return url.protocol === "http:" || url.protocol === "https:"; + } catch { + return false; + } +} + +/** + * A standard-Chrome user agent for embedded pages. Identity providers + * (notably Google) reject OAuth from anything that identifies as an embedded + * webview — the default UA carries `Electron/…` and the app token, which + * triggers `disallowed_useragent`. Stripping those tokens leaves the plain + * Chrome UA this build actually is. + */ +function browserlikeUserAgent(defaultUserAgent: string): string { + return defaultUserAgent + .split(" ") + .filter( + (token) => + !token.startsWith("Electron/") && + !token.toLowerCase().includes("posthog"), + ) + .join(" "); +} + +const GUEST_WEB_PREFERENCES = { + sandbox: true, + contextIsolation: true, + nodeIntegration: false, + partition: PARTITION, +} as const; + +/** + * Desktop implementation of the embedded browser: one `WebContentsView` per + * view id, attached to the single main window. The view paints natively ABOVE + * the renderer, so the renderer drives bounds and visibility over tRPC — + * nothing in the DOM can cover the view. + * + * Security posture: fully sandboxed guest with no preload and no Node, its + * own cookie partition (never `persist:main`), http(s)-only navigation, and + * all permission requests (camera, mic, geolocation, …) denied. + */ +@injectable() +export class ElectronEmbeddedBrowser + extends TypedEventEmitter + implements IEmbeddedBrowser +{ + private readonly views = new Map(); + private sessionHardened = false; + + constructor( + @inject(MAIN_WINDOW_SERVICE) + private readonly mainWindow: ElectronMainWindow, + ) { + super(); + this.setMaxListeners(0); + } + + async create(options: EmbeddedBrowserCreateOptions): Promise { + const existing = this.views.get(options.viewId); + if (existing && !existing.webContents.isDestroyed()) { + // Re-opening a kept-alive view (tab switch back): re-glue and re-show + // it exactly where the user left it. Never navigate here — options.url + // is a persisted snapshot that lags the live page, so "restoring" it + // would yank an in-progress flow (a multi-step login, a checkout) back + // to a stale page. Explicit navigation goes through navigate(). + this.setBounds(options.viewId, options.bounds); + existing.setVisible(true); + this.emitPageState(options.viewId, existing); + return; + } + if (existing) this.views.delete(options.viewId); + + const window = this.mainWindow.getBrowserWindow(); + if (!window) throw new Error("No main window to attach the view to"); + + this.hardenSession(); + const view = new WebContentsView({ + webPreferences: GUEST_WEB_PREFERENCES, + }); + this.views.set(options.viewId, view); + this.wireEvents(options.viewId, view); + window.contentView.addChildView(view); + this.setBounds(options.viewId, options.bounds); + + try { + await view.webContents.loadURL(options.url); + } catch (error) { + // Load failures (bad host, offline) keep the view alive — the + // load-failed event lets the UI explain, and the user can retry from + // the URL bar. + log.warn("initial load failed", { url: options.url, error }); + } + } + + async navigate(viewId: string, url: string): Promise { + const view = this.mustGet(viewId); + try { + await view.webContents.loadURL(url); + } catch (error) { + log.warn("navigation failed", { url, error }); + this.emitPageState(viewId, view); + } + } + + goBack(viewId: string): void { + this.views.get(viewId)?.webContents.navigationHistory.goBack(); + } + + goForward(viewId: string): void { + this.views.get(viewId)?.webContents.navigationHistory.goForward(); + } + + reload(viewId: string): void { + this.views.get(viewId)?.webContents.reload(); + } + + setBounds(viewId: string, bounds: EmbeddedBrowserBounds): void { + const view = this.views.get(viewId); + const window = this.mainWindow.getBrowserWindow(); + if (!view || !window) return; + // The renderer reports CSS pixels; the window may be zoomed (Cmd+/-), so + // scale by the host page's zoom factor to land on real window coordinates. + const zoom = window.webContents.getZoomFactor(); + view.setBounds({ + x: Math.round(bounds.x * zoom), + y: Math.round(bounds.y * zoom), + width: Math.max(0, Math.round(bounds.width * zoom)), + height: Math.max(0, Math.round(bounds.height * zoom)), + }); + } + + setVisible(viewId: string, visible: boolean): void { + this.views.get(viewId)?.setVisible(visible); + } + + openDevTools(viewId: string): void { + this.views.get(viewId)?.webContents.openDevTools({ mode: "detach" }); + } + + async destroy(viewId: string): Promise { + const view = this.views.get(viewId); + if (!view) return; + this.views.delete(viewId); + const window = this.mainWindow.getBrowserWindow(); + window?.contentView.removeChildView(view); + if (!view.webContents.isDestroyed()) view.webContents.close(); + this.emit("event", { type: "view-destroyed", viewId }); + } + + getPageState(viewId: string): EmbeddedBrowserPageState | null { + const view = this.views.get(viewId); + return view ? this.pageState(viewId, view) : null; + } + + events(signal?: AbortSignal): AsyncIterable { + return this.toIterable("event", { signal }); + } + + /** + * Electron approves page permission requests by default. Embedded pages get + * none: a browser panel has no business granting camera, mic, geolocation, + * or notifications, and the user has no permission UI to review grants. + */ + private hardenSession(): void { + if (this.sessionHardened) return; + this.sessionHardened = true; + const guestSession = session.fromPartition(PARTITION); + guestSession.setPermissionRequestHandler((_wc, _permission, callback) => + callback(false), + ); + guestSession.setPermissionCheckHandler(() => false); + // Identity providers (Google) reject OAuth when the request identifies as + // an embedded webview (`disallowed_useragent`). Three layers because no + // single one covers everything: the session UA covers views, the header + // rewrite covers every network request — including a popup's FIRST one, + // which is already in flight before any per-webContents override can run + // (did-create-window fires too late for it). + guestSession.setUserAgent(browserlikeUserAgent(app.userAgentFallback)); + guestSession.webRequest.onBeforeSendHeaders((details, callback) => { + const headers = details.requestHeaders; + const userAgent = headers["User-Agent"]; + if (typeof userAgent === "string") { + headers["User-Agent"] = browserlikeUserAgent(userAgent); + } + callback({ requestHeaders: headers }); + }); + } + + private mustGet(viewId: string): WebContentsView { + const view = this.views.get(viewId); + if (!view) throw new Error(`Unknown embedded browser view: ${viewId}`); + return view; + } + + private pageState( + viewId: string, + view: WebContentsView, + ): EmbeddedBrowserPageState { + const wc = view.webContents; + return { + viewId, + url: wc.getURL(), + title: wc.getTitle(), + canGoBack: wc.navigationHistory.canGoBack(), + canGoForward: wc.navigationHistory.canGoForward(), + isLoading: wc.isLoading(), + }; + } + + private emitPageState(viewId: string, view: WebContentsView): void { + this.emit("event", { + type: "page-state", + state: this.pageState(viewId, view), + }); + } + + private wireEvents(viewId: string, view: WebContentsView): void { + const wc = view.webContents; + const push = () => this.emitPageState(viewId, view); + wc.on("did-navigate", push); + wc.on("did-navigate-in-page", push); + wc.on("page-title-updated", push); + wc.on("did-start-loading", push); + wc.on("did-stop-loading", push); + + wc.on( + "did-fail-load", + (_event, errorCode, errorDescription, url, isMainFrame) => { + // -3 is ERR_ABORTED: fired for normal in-flight cancellations (user + // navigated again, SPA aborts) — not a failure worth surfacing. + if (!isMainFrame || errorCode === -3) return; + this.emit("event", { + type: "load-failed", + viewId, + url, + errorDescription: errorDescription || `Error ${errorCode}`, + }); + push(); + }, + ); + wc.on("render-process-gone", (_event, details) => { + this.emit("event", { + type: "load-failed", + viewId, + url: wc.getURL(), + errorDescription: `The page crashed (${details.reason})`, + }); + }); + + // The guest stays a plain web page: block non-web schemes. + wc.on("will-navigate", (event, url) => { + if (!isWebUrl(url)) event.preventDefault(); + }); + // Allow http(s) popups as real (sandboxed, preload-less) child windows on + // the SAME cookie partition — popup-based SSO (Google sign-in) needs the + // popup and the page to share a session, so bouncing it to the system + // browser can never complete the login. Non-web schemes stay denied. + wc.setWindowOpenHandler(({ url }) => { + log.info("popup requested", { viewId, url, allowed: isWebUrl(url) }); + if (!isWebUrl(url)) return { action: "deny" }; + return { + action: "allow", + overrideBrowserWindowOptions: { + autoHideMenuBar: true, + webPreferences: GUEST_WEB_PREFERENCES, + }, + }; + }); + wc.on("did-create-window", (child) => { + // Covers navigator.userAgent for scripts inside the popup; the header + // rewrite above already covers what servers see. + child.webContents.setUserAgent( + browserlikeUserAgent(child.webContents.getUserAgent()), + ); + child.webContents.on("will-navigate", (event, url) => { + if (!isWebUrl(url)) event.preventDefault(); + }); + // No nested popups from a popup; open anything further externally. + child.webContents.setWindowOpenHandler(({ url }) => { + if (isWebUrl(url)) void shell.openExternal(url); + return { action: "deny" }; + }); + }); + } +} diff --git a/products/desktop/apps/code/src/main/trpc/router.ts b/products/desktop/apps/code/src/main/trpc/router.ts index 8dc5bd1d7359..affe7db07b51 100644 --- a/products/desktop/apps/code/src/main/trpc/router.ts +++ b/products/desktop/apps/code/src/main/trpc/router.ts @@ -16,6 +16,7 @@ import { contextMenuRouter } from "@posthog/host-router/routers/context-menu.rou import { dashboardsRouter } from "@posthog/host-router/routers/dashboards.router"; import { deepLinkRouter } from "@posthog/host-router/routers/deep-link.router"; import { diskCacheRouter } from "@posthog/host-router/routers/disk-cache.router"; +import { embeddedBrowserRouter } from "@posthog/host-router/routers/embedded-browser.router"; import { enrichmentRouter } from "@posthog/host-router/routers/enrichment.router"; import { environmentRouter } from "@posthog/host-router/routers/environment.router"; import { externalAppsRouter } from "@posthog/host-router/routers/external-apps.router"; @@ -100,6 +101,7 @@ export const trpcRouter = router({ notification: notificationRouter, oauth: oauthRouter, logs: logsRouter, + embeddedBrowser: embeddedBrowserRouter, os: osRouter, piSession: piSessionRouter, processTracking: processTrackingRouter, diff --git a/products/desktop/apps/code/src/renderer/desktop-services.ts b/products/desktop/apps/code/src/renderer/desktop-services.ts index 617843e4e6e2..3de60f432bd9 100644 --- a/products/desktop/apps/code/src/renderer/desktop-services.ts +++ b/products/desktop/apps/code/src/renderer/desktop-services.ts @@ -446,8 +446,9 @@ container container.bind(SETUP_STORE).toConstantValue(setupStore); -container - .bind(HOST_CAPABILITIES) - .toConstantValue({ localWorkspaces: true } satisfies HostCapabilities); +container.bind(HOST_CAPABILITIES).toConstantValue({ + localWorkspaces: true, + embeddedBrowser: true, +} satisfies HostCapabilities); container.bind(DISK_CACHE_IMAGES).toConstantValue(desktopDiskCacheImages); diff --git a/products/desktop/apps/web/src/web-container.ts b/products/desktop/apps/web/src/web-container.ts index 4d4bed06a16f..775f88842290 100644 --- a/products/desktop/apps/web/src/web-container.ts +++ b/products/desktop/apps/web/src/web-container.ts @@ -464,9 +464,10 @@ container.bind(POWER_MANAGER_SERVICE).toConstantValue(webPowerManager); // The web host is cloud-only: no local filesystem, so the UI must use remote // (connected-GitHub-org) repositories and cloud workspaces everywhere it would // otherwise reach for local folders/worktrees/terminal. -container - .bind(HOST_CAPABILITIES) - .toConstantValue({ localWorkspaces: false } satisfies HostCapabilities); +container.bind(HOST_CAPABILITIES).toConstantValue({ + localWorkspaces: false, + embeddedBrowser: false, +} satisfies HostCapabilities); container.load(authUiModule); diff --git a/products/desktop/docs/images/embedded-browser/01-real-view-posthog.png b/products/desktop/docs/images/embedded-browser/01-real-view-posthog.png new file mode 100644 index 0000000000000000000000000000000000000000..400251c9a777e362e06279b47dd40d5b43150b79 GIT binary patch literal 292567 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

#F<&2*`F(K(l% zv*Y4ZBS&t$fMTR8OH_1orQ};I{kk=3In4EESbw_ zgJl2G4C=?-WY&wN@he&B)(JGYplV3x=)t<>WZEPoWB=FI5Wj}Uwvw;5y2plfm0eQd znX@r~Y*wdBeQ~tzrMVOMr(W;WmJAKHXP%4L3ekyKF;9Zq8^T-dG?(B& zH5(}Q_w`a_%+X^-z^$9so`25Hjf4HVHc@+KWCB)V6dWCuIHTH)y3KcQx8zzxW@aYK zafuC$PfuQT-4*BWeiEuatqNLEs8uC4<71Op$OED=9HR6U@-|QT%yh9BMPV4^a$y(- z1b{$q#x-jSxt!Jta}k+*LHBg`c8`vjo%ya!I|fu2BD!!eW=UWk zc=(fMY7n+8S`z!FwPtn)2_1=MC1k`15@|v~C1T-My4rQ(yT)S(UDRfJcF_vHT6a%m z02UBouWw@kt@md&T(M|YIcZt4X(Uik5J4F1nG@wbixB~l5d}nmki^K$OsO~DAL{%- z@7hNX-@9%7x}NT?KnGTpMwnw0Pt43b`esEV6L`0Du5VL_t)g z0E}S<5JD0F2A6*VGGrhk8Xs+FKn#l$EJXmZysK@EEM(@T`e|GRcPrC6ssUNwc6LQt zeV(Fi;gJ*>nni4*`R9qicp zG=Tp-c;d*$HEW0v2n@vmcWoZp-8V3<`zQ#Mh{SQ6kby~3gBrO}Lk zTE-wM7juZfXb?aV+1NB=nCdwJ)z)wxLdqnj&q~NRzei;6H|mz2kZiE7$B@qX)8a>k zPP+vKC6(8dSePuiW|1TUiq%;$%v`Qi@?il$a$%tom%9u3d>AUF09@bGrSks07hSsV z+JndM2Y~6~#Fq8DufF)Y@7#97Ku=GgHE9KcVW11SaAsyI7Zi%+>F#`Qr4lo0)(cqjtwe#+~V(;XO4Xm^4-UcwaAaKGu>$QIZt&x*03dyu} zik<4KX>68OY%ZX%`Kn9WW{0e}o&RI02 zX%Gp(AOwIS61&_MVgvvoaA?J~F9I+lB~(}{#lz!cm!E%e%xZXMq8vrSf;nwWOo)Ab z-E2&Me^)LHY&rz63CY=%XNpDuh>C<-K~4uCAi&JAqRHN#?I(xt80_y2v_eL}a-~Fi zfOV7t3UE4_I6F`dGJp_~YQkeg#Gs%gn9Kh!6T)VzE2WfD4dc5e&UhB&B#JlaeQli| zX#x>vJ<<0*r``{<#z2fQaU92S9I+7*m#@O<5s9!E!&(KU@{A%qIX$X~R0_!;GV#RJ z^yBtF_0-7Gq{kyCAHM36XKz}&u2`u!5gr1il-8*EFiL};Q>ukxa_-eM1?8IGb0+yeoPTm3VEV;d`TGqt>&G!+kVD!+2 z*{>XD(R#aCAxI^A+gZF|eMnUnE6|y#w7I2DG*^GGE9=YJ`Co+O7M0$~R_xEvEXdWV zkv2{NcAOhbZ2oJsH5j=>F)Gbg?BH#?g>xq>@Sf4+Onj0xD~O`}5o=ivL^2Mg1PC5F z*p0W%Mo$Qc5C9kuBn%PU2LMVSW-&I8c+yKHs+br{QR&pkSg~A*Vq*XpFc8iM4nVG1 z)4zWGP#9P==qWB1Au^Rn1V|A8OcbL?*ltZ&7=f7M@u}%b6p4?FQxfJO2Z>Y+0L)^8 zY7RSUrKnJha8cThg5~8|i32^YoXb z`4oKe4FTq4nt_JM#^x*_yu#ksM%?<5

2K?4Jz)5F%qozWpoqH+a?Rw1!nb&TgBRWb42R zw4ocB=l_c|&>E(i-(R#77e&1qug&zm#PndZ)!XEET^C^}3$FLFcz`$9>Fj{$HuTcD zPpeBLKm7H!(1tTIZxd}i+x0dzi)^zA*gDwbQqHcbPP(OQd6(2V{hO8JO4_6)3?U*a zvAUox*e_L@blQqy(1o_Kh*#9iH04*p5{cr(IR(LL%-9!JXjA}%6r-@P#8DI#%cUcy z4{z9TZ6!7Vo8Ej*k&A9i2)L>|1%&yoJR*{bNl1w7JOl&*5kTugxjY`lF>pFg9Z)m?WzZK@g|2gouO^3jo;s6Ql?c8pU@FGlW^{ zFH4lAs2vF0I1$7~2_pIzzL8`#s;b+UhK(^C$FVV{5=BuIMJA3-9Gln=0xD6-a9pkw z1D$hM1%QCWaWpwObIqmCK6>&I;Y4r;P~gOwLzkTQ#0z)ro|>8#V+c?I0!XNXN~NSp zPtS}CGslMGSPY9XCW<(U#TXQueG(NQ0Z<|gW85FdhGPS4WK4U-8+mVb({>KclnEaL$*V?Wmrzi;12#&|hN>WX|Fe^K~uM$~=*4@GlX}Z|%=3 z@^|V_GJj{sH_dB~ZbGBV`iok;=X2Fng_Tt;R<+oSyORA2 z1`rPzoRo`mYIUfriPO_?o{E~#xZ2DRfHluDv(b=BDP{ve)>~9W6e>n9DkCCngkxh2 z2x+Ad(U>?A33L!@L?mMjixAQD%mgA%OpWZ?dcI*c%mNU_W@2jQ+1Eb1kncS`a@_K# zRzUdU3k83CXa1P5m4+o6q6gd9^P<)201?f6 z+;YF|oMRiU<-R(?cg*RqJb$LMDkl=DuGc6n*Zh5QUNWmw9d^3q#iGcT945A-!&XA$ z0KmIjHI;a=If$Kct82sj8=h@@PP4ROCSIox8~8q_np7%aV8M0wIuTY z%%w^+F;h}R6Qzn_S<_SKE95|6&Dz02UpH5xuCA`Gt^%NQC{#*C(exj`^oFgRsojcQhG8 zo%pW#7{b}AI9bRGnfS=0q9+4gFKW>&-FK#`4P`Y3%0?qriXc(7jS+`9VY-gr!QJZ%gz60wkj@K2O4ZZpt1M&yfH@X6%Li6{ z=CB|8WD|s_l1CPZl;c3yOi$00N|kb@#2gukL}EqM-`zdf-Gwr_c4#Oc2KE+gD^?;i zJXsu%<5~`k-Z{|M9Vji}BL;OT zABH59b*`*=ofReVBS&O`Y6na~VByHb{4*uK(_jzOZI+)6r9p6w6bka#X5R#wVvQ*z-7M7uoI zP}59ZsI#MEX`e}xpm!8h*p@!s?h+%#*9o(l|*c;n%#)Z z#LOV5(83c%lu5u202l^c#q!8tUvF<$w@Mg70RT`+Cm9H8o+Bg($cn+#K4lOOll)N@ ziH(Wks1j8eL_i#8Mb_&Ol%=(*Jy7e!cMazuB=2Ht=U|~udd@@$Jn9pB?vWCX4aL+- zT-A!MDy0ztQE5_y7{>;{c#$EOpRv1;UpvtE?*IAtOlk6lTW&cuGJ455dy3`Cg?sj1 zzW>RGjy-^YHr<7F?iCTkam*Y9x$(&}ySH8Vg#B0CcksSK80N#^@80{*zx;v&@BG9k z_V3-<+tVEeI)S*x)Pley#xzTWTJT0xlQa{PX8;R?0wxy$0FY9N+AJX&HqCu)S3%&a zo&DCpwclQDu$8h>Q=*LoU#I;x8*wK+OJRXmI$xsh(%<#vUoV;GwR?;67GAI=Sm?)Q z#rlgb-fs&dYl$9g`cPe+wSyaMxQ(TZ8=R|RV{V^w6hL~YR)_?CBg zcp`pF4>Sv&Cd|BbSxDju0i1)V)p{{rWOQC3&Cmo4GHs@(izUO6q>`LQB(^6_5%qN! z{`?*P@u9zanx>!e8;0GHpV3R6)ZVsogS4^2vv#u5=7+Y%xQWJ@;o5=+>r#RNd;PkIt+s#&^plC zma@eyIjNKibuif1bHVN%AOG6_P8Un(?c5fI!E~{7;W<~8%f*D6_t+HxknHM+2*8Om zhpyQFwDF1QD2luDxqUmgee5e=zVy63o7N5Wc6Di`9XCm6JxEiZPnS#{t%GP71YsD4 zL7?%9QIdslnbg_Pyi5~16H`po~ zZ0D3Z3CBCe4K{UcSKSHbqJ37b)#-51s!_G$C?rCoSx1KK(g`@tMzn&WAb@j3y^Tzc z-~H%=!=;hQ%Ea`{Ol-;)3RXjR0)TuN4)*t4xO@BL^zmHSXFrGyPtO!%0bm}=>u!{w zTt*OupdA{qUaHMeBP5DxbA z5K$PaO2u4p{{9R1KJMU=`=DAoSX`hgDZfm`;?$0<`>wnE+S~5GwX0Cr5CrRn27^F% z<#K^mAObd_CAxfoV1Yh>LW0Z*WUu*x09G@JY$gz!mP8yfb$lP7LP*jTT6~yX6E=7< zR)~%mx0gAYMqG53;+DT6_8_bF*tW*d;L4!~YfIDx)Y{ZfxP-Hbs9X;vfZ3F?ruxD!e z<&@>Jw=dC&4uChjvq ze2fT+h;6zI002-*rKlHx0L4qTxHNkr0HBbRQkoRH>>;jAg=7~hQK7Z*n_-{_dV35r zB1BO>xEO(699k+_Nua1($-CTPo6nauFN1JuzUV@dicosd#=3c&YSytd%6mF z0C4a-k%SRM5u0PgOW2~<74^QLNybI{uUNF3a-;0oNfC0~GC+d(tt)AwTuN5N2CPUD zB7z8#)TR1!*4Hg6-5uWeR5KLvX*sV_3B$J z#Zdf<<+%4QEd9FRr#`9JiW+hAWo_verEoLV8)&JyPMaQTT@~k#+-c8cI@buQ)pTk# z`7Mo_d<67VrB|Zb8_3A{l5-c{CgMBbb-oM=e1OyG}ybzC^K6ZR~G%`FB^H4sw zw!dE>0-sYpGO_YpVm1>v5e8c20$nPPiQBM4WxAxb4%zhN!!QgL!n!pBnTh}?C=MIA zkptv&y{AX+8|dxn>+T7Zb1_ZOAOM76h-H_5F*%6YQ*TobBx0n(%vM(t5kaF$R!^ZQ z1*BA&BsNBv<2a5$2??MUBw-u7i;d#Dh8aRnZ6#C4d?aZ|VPZ+lq4*4YsRyoI92*5m zD%6^gKqR5jz{4l-IV}>;TLdHoMI<1VC@z*OfzHQqIeX1**{~ZBzxn-7Uw*-pHm%!! z_{2j_f)+7~D_RGoN+bYEk)`xlSS!yX&UO39PHncp6k9estC8gX1!h)=;#V&#!;?f{ zg3q8SwsQ~#Xyyp;ShZDqtXk`?lAY{vDY(dn`;dBCXny3KLC>w&3UC&kLjkX2Fk()a z*Ww<3c57`n*QR9Ow5`*X$d0y~)LR)%;hZm|Us_yk4Tm?#ov;ee>WuZJ9Um;E9L zVj^9Wg1OjKO69S97zRP$9Q@GYRY5?|r67+mnKom0{sdw{LBc9o|4Qpc7{?3(gs82S zry_7f6cSND7#cyZY8ginDKH2?3Yt|(P61)5R0M#0zED%5=D4N4lBG-{BUxeu6m|+i z*?fI-oPJxE2v~>|A*LaS%!&MFR>8$KmUwAOhHXX!5PA6E9p~-3Y-)NuHu2h_&D~vn z-@olEzxR)S6=)rqx4z-Ge*fCbpND`aP9GGJ4QsdGbo-ZG9!wTyHo`5-IR6{{a2m;#b;v7y{Sh!)%w}ZCAZdI%H*s>1C z4Q4u-^G(a0%L4D(*l;rinyWs~KkJa`4;sXfB|_BR4O-iey8C)c#o|=C zeEihN-t%^C9_rI1v2#&G5J})%g5nTCgo!XV9BAFw)AfUU9(?5R4g1e|A(77IHWN`U z475_|;QUaN0KMdhF%_l4hYo!0Pygi|FM8^=S}98!vc$;Bx)%aKh*}s77yz`wD>j-8 zJPvdsqAVaLn|#3_8evjO2_cd5SVa_q08l{~0kUD6uFeuq1PZHj!qo2j2A;|MpLBdextvzvl`>{LU?(|ECZC z$Kx(M4++_-7a<9VF$|!8T}M3v1mq-Gmz37vET>2=6D>svP8Y-S_m z%z+kJyE+{{m;HX$`~a3@r`w7Y%`&WQgIzX4P_>nUt+%nxqrnF8^MYTh`Ga8>5Dr}& z6E?O8wN&ApLtpl$<^w7#L>D&1f&PX}Q4!bl6@*VnPZ7y>_7Q;=Mcn;vMh%o8Oc|e(k;Y9$2?= z-TI*cA`&rB6~1VDv{*D@y)ZIUul|RBeAd-htQ+bN0|Ed=TEHMVolO7?RX~Vh*a#>h zalVj=)1w<5i`e{umT!wetYQnYQA%m2UI~aGEDA{ns1MbLZPVEVOE>h~&~5x&jU&Nus%uZ2?lLR`jq61w<3| zbmh`FvQ3qqPHl!xIyK^PYd+y=BwA zj~?vlDqOI8M^AS_D}{u_#K2<2N(1?nfv!ia=0elsnf10@DDf>m3!d2K#PlSM169BW8zW(j+3zT?HJokjklt^4{e2nE~L z=5kmE{YB@Uc}r;JZ1)$%dF!kYPtlH{L2Rm4-OV-lb!w*HbQA0K0^2l~wDEbpRol?R z@|*R6V~_bVv$CvRGFyaHErtXP0C^bZ!uVVEHygjRo z5tWDuwCd~W+Oc{4(;t7y-@NC;W0O-eGo>KVE-fKQCbT%kA=!qsQUkp`&%El2JzF;q z_4frTbRZC|8l~mTARp!xs1!j-HDa>BCP})Ga;BK*P};&46Z#lPAwfbCjhaM^m$G!M zR65Q&@m<3VAzD=&3){qs##$cBPE33ZoP$qUq*Q%r2m+>9Py`(iPuD1mmy*_qfLR=7 z^D-^HU0t}23b}A}V(JSwe*f}w_xAU6_xE;p=khvKCg$#ZzOSomO>gg+@rld#ozv4* z80hQi&gboj-4IaFVlm8wI{Kj`W61ilCTo&d@{s{nM3^Bw1AY3T4=1!VCe^?tU5${I`RB;0uIMxfxLBw>pn zu%VxWm4P?s8{9(kX>WvNeYWhsv~5L$%dmpW;9t7v6w^JLECj@xG3%pN#Sqk`|F?L< z3&6sfIWPM)+qhLK6|D=J01=qMr%13+i2MxgsS=x`r$@$SN|E5Eq5kbd{fe@SW&84s9LKpJSU1p5L~Hu`$ET)aW3s2i>XC}r z_(pq}AmM}rv{HS&g>{4dL;ZdEFhq39A?PCMh$SY}0Hlae2tDFpW=bR9{KzoP9*BY< zWY8cW3)?#4gCjv07zEg@os&3052v6;&!ryIrE+Pu=8R2JG3RmT7U~wuByiV3CJ;>A zY^$$nkEt>;u}K90U`enURJV}*)){}QM1Tmb-VY#zfgVuZg)kiK?b*I@y;775gFtDE zHfiEx3;T-ieq5_P$Dq^09dt~7{JP-2mmSy?M~m)MuZS(9ca`#P%4v?!k-mF zEy6lSNQfqNnG~t@KeoK01#*Z;f+V648H_QOFGJ@SY8f%Z2p~2qpMY{G%x1Xm784SJ z%Bh^zevy4XP@zEWI9SH>t-?XhJt=gYe5w4>inw6#2&^`#WCX;+cup$F@sPv-Gz zsjJVV{nl|{(!g?%W=my_i8n4}D=tK^t}(PRKJPK8BGZxvOdXxh_Z?jv)`=H4scmo( zWLW1Hc@e6x&UV{<(YM&14k%5Wo{4fpP>9L~&;clyY{B355*8_W+EJ;Lrlu#2iL#Be zb6Nxe7%rJqizAQOs!Mq&{bA(sXZ z2+&yiNt_~y_0Dv7vZ)}##`6%mxIv$SPs9>i=uTmJ&CCwE%bwBX6eiRd`m3NSO+_Y* z5D}FNIka*$!fdi%KT=4jMZhv_EG%5L;+Q;waMHF8aRQTq>0w3h>*L%Ao=LhMo;IeRoP0|0<7BH)(jeKM{kWIxK6W& z9c{Z|q%95AS~^?8A+>@A7i^-=s#R}0dJkKM0K&QFTyM?C$Q`}C?u*%`ns2W;tlAMY zC{5LB?@+T}!+G}AC<{KzXc*DW(@0A#EN~lYs?`>6!-U!gms!lCz4M%Sh6yaP10Vo{ z;ImLj3U7*~;>^sr;ncCyFlU1tv?c%y5F*0>FjFd7D5ab~qY)vS=a7h)Spnx z6chna4p;$_(k#X%y#NreZG(VJ7%&*i4OzJnLJ}|{Oq66$WSgm?E8nGg0&QaY`JNXf z@+_7a5>$ZT(q@Pi)kM!mp>h#?AY%O{EpD)&7ZEz1htR=Zu_15?rzh5}7Baz%lBr@f zNV9l2amf^P9+Zq$AqQ&!p(SN4f##G z>#`z#|5n5xR_!rrjr_u_K%CP2uv_*Q&8W3C9wgXkXN}fa38$)w+0BRJ>S08y>tY@C z7DbKq+NTb2nV2kGYw^)bcEWXAc7k)yYQcM5lkt8skLziwSh?`B z&X0|p=j0kkff_Ph{bfKFhM-8LBj0HP== zmZr;9W|gq)F7fz32+9eNTQpSi90g@DyIV_$Po~bXod_XaN;SmSUrz#5DI~NfEWMBkTP8J0{ zp(nz^R6R(mx`~9C$mW2J#B+~jM8t}$f&jBoN{O&@Iz<#g5w@xR>{+#}8aiKLMD0jn z+jz_do!crQfFf`YAAl4Rh>c`)!H{-t=z;+;`C8aW!kY7DJ!XXjQ4BB$B7!gjqA@Wu zE2TARfYcAxw#SA^$SSQS+N$>H11w|Ey zR;%7YwpOe0y9mzxg{>EHc}W|oeqTrJR-j$0RAGzOrXRZTkrFcysj8`<0*NtI69sTW zqBg^XoxYixDV8f`V^TE8!m%-m$Ygjk0LbNn^Do?e@1c`}gn6xZZ(7@(%T+x%5QC^K zCFJuTS~zCaNv!0I^AttU%#jxgQA&l0W{8M&)?@-lM*%v85vxPvTswggG@$f#cSZMA zPLwMs`3)N==(4e72;#!@(b?@(}D8Gr)7D2h=OBB3}EE}3$j z_)cfmXr2ez)yHj8^(=`8VD*A1@d>U`2Ne+n0ze`KVzR9z{-2N`5)+5aq_rv#RaG5r zD5)166^$r1nWMc#eA-9HuX-6GB2Zc@MOL=QfiXl81WF%zdEl2g#Hws?A+cABt~v7 z4i&3_)hu8CxoOvQ^EL~lwI2;;X9ocF+{)2>57EHyocTLpva9IGOdF$Qe@CYDWkw1rWh<+Sz^oS+$jBO`^ee z(1UGlw(i=C`HQyDe2ZW~8a&>5%PXU~+SZ#2_e*d4EJ`V1mp*s_YvNYAly~38VkDPv zU@OLcEGNBc?K7pcA|gdvJL0QRfY&Ma(WSDr>ju5@3MUWB2y=h{!r->h000sdLf}K= zM>SeS(5U8iXz4)&r(?+?0-}Aa9rzHyRGAd5bSEUJQiLrfh=@Mzp@@xH10#_7>md?z zgs8xID+*P`#1Xn^Ljf?x#F2@C#Q=2Yds1CfQ~;3SQCZ@PLTxXyhu8ghY-9&Z30@rLn9(000OZ-nRb0llDS?OsVe0}f`pQE?TNZ( z4eqMZn8|(wU@1Q3hmjPP>S7jaq4yF7%Ol!@X-O6U0ZepF(NTT=d35FhgM+C_7oO{d zWSqt@09YX$%S>iJwOv^Fm!z_owb-jaLe1LQde3|eTay>_%KQ$rV^p%p`_A^>`6gTK ztyzT|spo@we7xp4>~G7ObpJsArj47syL-Yg?9fuJ+N!PEW56nv%GC7ai4(_XiZgbv z_ZT4k8nVL=9@x2mcP^&^VgyYtkwfYoT8b+Zlam#ZV&%lC;WK%S8`rD}jChexXEtID zAQ2~Vq0|=LQ3jPjx@mV?c;AAEup;H57Xv7(K8mP3f5-qNVgNv?(8}HS5dj**C>C?+Bz1pvkvV+;}6boY?(jCQbu zL^k0^>W?p(eyh1b$^Kj8EmS``tptkK{)eEQRfh{KTm-UHf`9rWBcx9S)f&0wN*R2EDXb;aLv%* znga(P86G~J1T;Y%q+iz8ms7#Tg_2FwE%>u^_8U<$+Rr=_@Z z=)}=elhae7Ql$#AtnV8P(B7)!q!AWQvJ@hq74s(`M2y*h%UqDCeu(F;95=`!Go|uG zu~aUV`+K?udwV?gGj>;wh?Xj2w$%dAL!4j)=J>#=;UlNcOjXRr z!9KQ(5+I-mFftYLxo#ObJUrIj6Ve(Iv|fZ32}m5r0I8Tr64;t}O)g3idB9|6Esf&4 zh8e<82U$>y0*b7gtYt7c$=9A7R7zQ#m_kQHV+_XzEO1V_GN=i(%W{J?04%Y@@3JQ5 z5CH7@+A7AFFc&5uGu4C@0RXKvBAM6%#mE>@tiqhmbSH6aEb^S4b|U+&&V&NGnHj?( zkl_A=7|i0pq`JqzjF2*r%U~<#F0yK?)&W~-7-$)%*Ff2&ShXea-HC!h$g%5@$8@fS?47h$%(UvD3p- z6$1bp*A5^@faJ7Efe>-`j&1oh{rBDez{7`5Zi?2dTVK$Da=~Saa=Ba-$Eo|Fh(){> zJ3xjibOpE;3MqxmVvLDnV@$*FLC=PXFc)@Aj%y@K%`&h661c1p=(N8qo=cMndO0R_NN*XR*BYRUO3j*qjPZnqE1SP z2#7F_7|9I-0JYW$cCX-eL}irOE{O=kvH`+XG`MQ*wB-26)yd0(yiLJ*ebEWz$IBcRR zH(j1Qc=FV)O`GyMZx1pXua610fK+fFffv-So9u0OPPOsjUJMJ&qd;non-7Qevy}AGX10Ve07w)_Nz}`LEe(vX< zd(r-LTI-|H!8g3B*wivC=5-@3s%1fAHr?Glom!t&TeVetOj}P+k1-}_LdB!n&Mr*2 zbNkjyx9uNLy;eXaGDKnWO90JbYygVcx+((P|skvb*R6P3vGyCl23w=40D>G z0RbgZlyuTAB9f7}M6VgCgz(7N?w6%n;{Ql$)J zHyk~1@aV+M%=&?$Tu&|y4fFCd%ragq7Yg}3Yx=jW9nwk>Y0q*YLkt3_skf`Ykk5@o z6(!|UGldPY2-zGJjyf_KKg6v2VS;^~>Dh6Ku&@|1kb&vRR}p;@N~lI}Ud^Z$+-G~Q<`~mNnKhrTT4UDQvdzqt z{^HNyF)}g^0Jq+H-vbXGeE<9YdQIlB763#Q^U;rf`9mN6Qn_474sP7I=H)Mc-t(V- z-Ez-=V#Do3T0@pwUZ zO_wGq7hZM6MFZ;wLD81MzI>>yU#Lq7?lXidA~6CskkVs6=Gl4Y?F(Yzk?EOA6am1A zlV_$>SdL;gJfLCIx`A8}5-AVuVj>HO6e1u7lJQnm6dpQ#{0z&45R*%akqDMLyh`f) z?VAFnwYKAOXb?dWDkBvDgqTsQ!LHsg_MW0y_uPQpFTTtBhuS|I7Q@WU02Zku zqC(^-iZG)D1Jz$$B*bb!Xd@Uiklj?nzZ!PYP1C|xW?{o3OU~D=$Q#l9_Z_(LraSJu z>%lW;#)r?0p~AI8{cG0^UVhoW>#n(&jkt9;-;KmXy6e5q220AS~iO>cecAJtFa z-E+?)77bdPo+|$6mV2K0tgDkFGc%>%|NVb_;DLiR6;GTP?(1762@{hA-ZfIQ>7F|Q zovI*$G5m*r@Rqyoei#4{;c<`O|AyE9RvmpWziVcV-FM%k77bdPo-W>Y+kH=e+7sH_ z%hJqc-fm`l_0Lb#)<{)X zLKMtYrXM+WdL%NFpdgOQOh#C1MZy>F-qM%LDI%XfUJ^l30Q5*tTcJ@!AtRg`8JmoO zwB}qWC@e-Sx=G7JPgjqK5n(GuL#PFefDs@?fnNq(J2Z%g&J3u&t?NlEbbf$}5HWBW z3Jf!YrW&M>1yBhonl#JI9+NrW%0^F6!+8kpf)OGED1mGy3APj&f(>d!07Xhf0;O!; z6(a@(k{prt7uIUH2$BuG%xP`8GV4DnA~tP<3z2k8o>mIJhTt313Ek9eIC5gTLJEQ8DFO0t6o zkH6)uAH4I92WyT`PZbXyI&sS__rCi*pL+6>uXxp~UN$(;=RQLKfNy{IR*MD!;K0G- zci;2y)mL9!XQxAJYKf7x>xZ&$|L*VpV>TMJcFD!(-Fe4@x8MGNy#{ve-ulERUb@_? zxGdH@8eH0uHCMvfp@YXQ8Uz3lxcU2cjgCzY4)nIva?5LV^ysPYe((0U5&=M8fA7B(sT2*cosPrQ8nx;5>bZ3k>FVla_3I}0{m ztF~&Zc2?K|u6)Ys}2LV6`LjjB8TtY${a|mEWNRdXsxH23EENd?U|?{~z`97U-(3juq!b~bAshGys3;7A7||GGeMhZkPU0`hv0-LoSPV-L zri2{WG!qyF!Q*`;X=;ei83zx&<``%A|@5Vclw?Uwu^{i_auCjCI=I1=?>MwugM*H^at1rIf z;&aZ9#qgb_7 zTeY*w+>Uc0Ot=8`SDS-w0g_N=S6G%uacp9UpYV(;`Um@{Vj$1}pa21&I5Me*`qm8g z5#jjcOka0bE|*h?R*}TcjMJQLj)-C(?PWLZ<)Yrc`AKVrw)gd|othe3bN>&%c>k9r zjxO4G*|RQx-s?Z{7aNq>v30|aE$agp5hfx)h=z>~XtO!!#YxpLq9Rm8G!;iPlf_aV zHuv}B&=Hsd#^ON9#ETijIW!M;IO#x{FghD>31m(CaVIV+& zgaiauaTZBXY(Br)X9}w=dk_*$&olt8Vbi5@F`t{|S6VItzFYmKt`x7>f6Xuc%pbh#Lw|i{{D39#M1V+?VrCP^ z41ijNGgGAv+s+|UH{J5hhYsJ-JJ7|#3Y>NE-G2*AI8_^*UHmk%rD*a{a30wHRxlp@PG#w-9Rh(yF- zNGSmjF%}9crP40~3(U1j;`0_(Jq;4E(l#OrmeN+zKIh-w`SFi`{Ht{q9vh#0&1?SU zE&uTQyZ3BuOYeX1hrjr&XI^#x0|$5S-FEq9`?4QB^60VbTdnDLU-fg>KJn6lfxc6x zM#|+%77YTx@R_k6Ge9Vd9%!(Bn})HROR&g?4JyhkQha1|GW&LPbfTWlUiGS%KmBP> zc;KN!yLN54bRHF@`lp=$t}~=!L-rlUzJ7EH`P;et{>=CTeVeNwN|Z8p0L`m z{zg`aZQrqL1qrlLB3vw%^7&piR4P?Kg0jS72v7ngVJ^t!RH%X}3MYqW1arB(AR#Ftou=Hg zfG~NuEIw~T>I_;fgOXINdEY3$YhL5X{&3n<7X-CAA?6I0v$UaC<`H8|f7kl8LmNK! z+4ue6j&Fv!;EsF0_md+(4@jj-6zZ;LUi&lq_Fg8!x7_jVZ{GarI5NT_Bu}{X*)RL) z-vEGD{pxG)dEnOn`s|zRaR3xH#&A@QFWhtOHCH}o{o2jnzvUZjL|DqD=*7?e%`nLI z^$qUce%_n^?GJwUm;dBz-~ONJnemtW#IL{e!>^kv4vWY++pl=Z^MC#IZ~L{EJnuIN z>0@8`*Oxs1*DIBBccJ(Eb1xg882QpSKK#&;+lX+}nmtdu`o+6;oOkf>19#r@{bxM+ z#czB6@9RJbg3WoNwa%=SxQ84*afLmp_N-%uJxs)ST%hKX@eM2KR`SRrM`xqKzP_GI zE;(oO<_+a?<=D}ax7~h!rIMyAotT(<`@eqlEpPdQc8%epOU}LMk~v6{!-r2)6}#x% z=l{f$?CbUGho+~CHRbEyjIJ8AWv|`I=)IPzFV%%0)hwlOy&Ye;fA59+_qKO1T%AaY z>mE$oR%5X*pcf^Zx8&+Kc-2;I)!J{)sSd#3WabMgtUI2t1{JKVJJ1A-Iqy)TNhLBfB0zu)5XEMu zSl+(*8C~7|pZn6=C#H^SrH>rDb#(0blb-PW1IKRZ&*us0DUW~QW&58>q#k_arc=W= zhq*xGnmyaD-LP(#Qu?7se{lHtw~=_~=4Vu*C>M5Z-gHi}IQhWC-h!@!58qg>oGuk35UEt6ndwqo zp&eVV*|>hMB7Nf2!^ckkuo6YU`ngv=@BH(wTDNA?JrDjMj-#HQfp6dbAss3Nv}q?2 z=;XLi1P~z+BqZ??quCI)8kx_gHuN+bCIUb{SD5d3^~EP%C(#R{{qk#BtWb8mb1>jB_D|NCFw`N6;TeX)t-IOa+@-nZ-Om%Z?}4;*^%L!W#{ zE-YMd-lZa9V(IN3xa^{9?tAc#_kQ@zBV(s~d-{922Je6P&YteR{d=z|&XlL8iq~BJ zoTJAN7H3Mm-2=Vd15w5F6#5^3*;DR+_^vm+?bXLm9(nms|1L>R;@}s4`VU0l!=HS| zfrAe|>#6@=Z_hxnSh0SR z?|r|w+5j(MOU)i30hrK21HtcL}ZtYfMM{D)QHk@?*I7WAY*kp$852*pZARhzM9MN8eJ9^;p8l`D_1f)7{s~==nP#jEHIu)x7rX zJEi*%$2H&pTEsM?am|ukkf}4qm`M^5B>*zCEGrxeMI#aEr~@#xSw7JXKNKPsHH!)c z?mw`lxwR}aGmw#~XJ+{hmVNl_f9~)@Ob6gx8`6Km@>MVH+_iebnE5`fe@jzz)UY$9 zpch~J-TNOtJ9N;r4FAxk#t7%ZAp<9uRqTH0wcpj(S56*(ZYX5QxPHZX-_V)1Z25mG zs}7DEeR?2})zlOg@%$N6FKrEnmM#CcWm+dsy-He{kw^>xq@YksWWZc@2c{ugU`SIC`p_=_SArp8HvPV(ReIonx+XZr>G|YQWJzfX5x1SFC%Rq>M%5S6uYP zC;t5)01yxYG&EKNKx1%uiLbI(%6$ZHl7NwNA0H~+_rZ#n zfWd3;J~w&%%)*?0c{xQH!K}YN^~-21v}V09^uVdJ&Wy+6{(wf3am~(DRP3heSlu+X z#AqZ7Im%=`M)=sAODD>`B4K4^Ro<_|hYz^^y7N=&WM&3#zx@lFx9+W~taA(Z>@A%z zvEAG!GcI0#W7&J}tv!6WGSm_oI=ug&fxXWg2*R9)r`sp_SfTke=H!Ulr!oU9c_P_r5wqa(6i7t0$j$`O(K- zR4wP`WPSdcCFh@idfNWCwnn~t$M3dp+oviQ6y!Yl#Lsmj5m(&Y6ngp9Wvf?isjX|M zuWLq*g#|f9MftO5PhPn2WWPU^D8Hex<>s4zUS3uM0Gh@xxp={sZn&`Re&2Xw`R{)B zRBLM#0CI9Ne|YB&lP8S=fHiBj{`9AhG&hF;AU{9np1Z#`e8hlIYvidXUR|+bbLrtq z%aV`&^~VDTrjhVoy>{EroNaS*GJp8P8zxU088@w0Ut6|u{mugi%F8Qii;8ml_v>}q zylJP+ovs^6H>)*kw*Bm9iCy3Qv#$;xF)-8`dHTu3uK)VTkG#8HzhURAuP!@qpuC}> zrMWqjmz$NBpEG>Kfb-5hZOD+m9n8l42g_f1<-@I8_Ec5X0pO6qeTEMoc*&&;b8|aV zqI>%3*B*cT6~$~+SeSd?ec$L^Qq(r_TBexBC-`M!$9YulMgSOW8{}9R2FecLP9CasDsvz9pGp2FlB-UwLim z_U-!{n_3zhn*#noUVe6;-o^7yJ88yAC!Gw;AUQ*Rg`UyK9V*2sl$2hZ@H3GT*!d?ZMrlABhG-(MW z6roUy-{&(71CpcW5Kv06EMe&WaJa?q^Z5gs&+tpKgeBu~ zD;kX}F!|!Ezt?oR@4%|jBWGl0^scVk`Rd!hiN{PL9l>Xs@u0sb)Dk91)itHN_b%6U zZS(f`1`isKlobeO`+dO=mp>yZw!hRw)FzIf-O?PMIC^SbedWuq|4GyM&fRN1f5neV zipEw{9RL6!rN(mx^c(foyZ@-F-42M&&9#dc-N;0KVgAU9%0n-{{Rm^Yar=k8dkrF@ zc+6rPm_r@P7(*{iPzQ@h2ukf8030Dba+C7ZSH@WP*eDZgtVlEr00Dn6rAGR4XU@9h zF&;t`mhy1*Mv%HamPClaIBN>kKJ~(b04zH*Z}zlBS6%egxEX5+H37g)*M9q^YrpNb zlb2HjKnM&NB2#+@BAK7v|Jyg-r!+Sjo9n;#i);M8jJk$u#?_EwO?{QF8A=4gv`k&+ zTw|saZO9l~zUJ*)Z}@RxUjGTBPm0B(t2e&uC=-HZ3Id9oF|Ki@p=red0D%|g_m0NG z(O5{+IU&|HR0DtzQV6N*>Zt8wcLzbrqzK@Y*ir9rF{Wrp<;Ou#apIvt0I08P@_rpW zIQ@E^bH4bj*&8?R@|LvMW^+^Pw{QQAmmPHTrrn!2?SA#uWuL$L>?^K3i*x%L3blm2 zv@shu?kX>@dHbzZ9W&FIrgVfh(^x!ieXw+0T0qD&&271{spXG<{P+C%Gcz-TZEHUH zEg)RJe3L?h0MOJFTD@wE0)(qqZ&Q#A0P5?T)~?%LQc`g1t-m~Qu;PfP zc#UV)_5Onuzr6Rcoja3=VQXp|Yib*J?K=4KOG{_W828O@U6Ym_^vNe*`Rk)E zcuUrA*tLGcu6N&E{j;Bat%C#naM=d;T-4S!ZrZr3cS&k0>AwBt?t~6Y4fh? zs=DIhg0?@khQcly1c1$(cUM%@_U>H>04r8(a$~dCuGwB+-gW=WO4e(za+YY5c3}w`|#a`aHWct&!-14?g|D(zV_?@p!1I zIdtGa`A5q)^y^!E+pSlR95JYEQ|(d9bO{Z%Z6w{+Jy7s}-AIrXMj0g$0TD}AL6V3e z_jS4D9_z7GbMHDS65N34ZfZn?ozN0E0(4BUVqv1_W4W;n8$7rr)ZE+>I&JantlTU@ zCP|q?8no3rS>Irlx7Sp$W?b z0LzsA+?;qk8Z%o0euId$wA2AWb4%Fo&nn0-x#gw@-DAuM=2)hs972Yk1puMe2E))1 zS!<*L05}h3X5}?C*K^Le#(7>x|x&6l!Me3CQ$Q% zfKqUlkirWeI*ISRFWuXlK&fK!?k7+v7Jwo1BA=w%j-?Q30sv!taNjYb22XkQy=NlP z)=;?d`8OV)Kj)kw1IE1d;qw6Si{IX{Y5PjXkN`Mmn#LWGcSpF7GsbyCQ}x6DxZARX z8X_rWQ*(WBVIQ016QQV}q_L?^N~zLBkRj*HbSQWkW83$vt*xt?I&RLGQIl7#TPjH~ zhAK)~N?Yp!5ip@D0Zq*f!9Zq4Feh%c5l$K6AC zLZU$c=-aQ?!9$5uyZhM;pDehpxTSKYym0JgwpA zPk;L7l`A%Pu=h|)T_Zn@9{p%+> zg9h7f8;@I${p}?$8uZ%!{bje^^2^`-{yT+*x#@QuGk^1&C)4hF`HD^V{QS|@Pz2hy zl`FS=<))wA`Qw{LjU41HfAnw9Kk@jhX*a2&6!6v%`looSRY=mCU1cGTu2o5!@6uR)p5q*E9E=cRi901*tI?(^%?WP zW7*Afb-Ny}!a>3eYLA|0`irw$u2%bA%@F^@g$Kx`lF2q)n;u zRbY=TN5evbPnftdL+Jb>pp9;7=ys8cAPq}5IZKoUk{$M6|;f2Wp6G6+J(()M|I*s9bA{arJ^xv8ME-*U_gMpF^F_mYyb zLnb_!%1wv)Nfe(d+Jb^it#1#MRbDhqO)tii20ayozjfEy{VynO+Z6mB^?rqEckAt< zEOsW(mbLQ=I;R3!>|z%zuv@Ep>jE#iIjmLbgN3di$H+BHt8F|Uv8S5Brw`f4vlq{* zHVcOCkT!F!(#qoI>q$yzei5HoWSjX?;KOuYeS3Q`==EvKZmfetX03`WYQW!TiIQJB zc(h<|e$4-Lu*Ni3Ahra(uW2c-I1R%hTh1{z z)>Bi1w$}9nRPQK;7WKi1# z5*AovhG1)q*`rYwSaa)sLBpi*bjF1ghW{OcE>%_~U0A;lkZJMy&kY*8SWsu}`TZ$p z!`sN~b)dxW>29-0fSzWF%M1l0lD*7X#0l{?ewm?@nGn zW8C?$*^9s+5F@Igu+RDE{44>Ym{)zt98IO%8PAQjx z_7E+B81P*DdrR;p7|EHX^B^&^p}~nPBq_;x>6NLe+IUox zX4BwtQAo@B=_@JO$gGh#z>S4i@wKzVqWAlE!f>oVmv_h*lC>d`0qv7tm{=ld;deic zzyosH5(@W}Zx2yzCCtzfcW9^gWpm4>|8?hp4voZM8ouP%x~>&Bd=|ahkk^#gYDFqL z!N12!ab=TFr9ZFJouRiiE&BbD5!v^r?v=)%zonlX78#S2)45G=3f0IZ!<)H7Q=jjd za@b5I-P{JdeZzICJ~xbE0M=( zcVw(HOrQ^s74*8}K;hBXvGa78>(`G-)I70uyLyan$zt3#0BQGmIGTD z=A&7gwtRS|WQPZzQiQdOR)wSD>^Sju_Dszz)R3)6M~N zB4(gHvqIcUg9?29HD8>(gMmw8CH`$kwE=f{+I8Zvfo3P=(D-Sh z&@t*`v;Zcc$l2^PG1l?WRdSjo`c2zlH=143BXPLAY^}p@*ZYvAyNrIm)xKXKMu}Up zkBy5ONoJO-*zw{+c0A4Ns(xGyx$Ee6BIuRL@kPs~_jML$4GQYAzW;VvDy6XJt4)I? zi_OpSm3liHr48l&5_D?7g3X#)|9(8A4!u}OILY~ZJO5n28I(zgqN(Me-}d}xM`CbF zXg_PeVso|G+}G0beE}IynnwnGt2CTebZO);i7h&P4;-mD$|T=Ms{+^AMr*EF?S5g> z7*T#ZZ>?&!+#~`Sb$Qj1xBz*R>EkR!co%iFkr{h}!evL%-Dr%iPPa?S+}HGfyOKZ* zr@yL97;peGejC$Z6%KK$CRlQL7-I12!%go!$ruH_ZZxt@57 zhS!%Z!mlL+>aH=)?@>tOgkI21wr`K4^S4TT-%^);WS#Oe1T0!ZbS`0Tngi)k%tyDh1Q+SXDG>x zUx|1j%jth7{X$Xp9HobSG~nW281M-E{%W}<+Un|83pIw0mtAp1$xHKGuiz*5x0lzB zm6i0l;#d*^`=h&K^B332V@K#yiT_ivf&p3zEbv@+9D znm_7A!-NNx9@pD6)PbE!J$%@X2e5fB7G`CQ7k?xZ9@sq?{gZhxnSD^zFrQS91fY|H zVGV`*=9bP{HZX&`@ApE9B2kf(R}O8$n^q&N}is0ef>L8l?c^edV&z^W{$b)BuG=uVo1kqp_yX#iom$NqG&I@tF z7S^Kw6&{bOMd%FWk+Bc}_`So!XiAYjbQGCbVnJ(BWA{&e2}cz*zDIWc<44q6Pm}ka zZ7b!YQbgna4{b}7{v7O+S_}7-eytau5M%^Q5^Rz>C9+p)hhqOGAdUQ^&t8)ch)#+K zjDR2bV_Rn@%hvR?q#vt@JRk8C@D%@Yenp21;S!YcKGQIU9aLG_SSk2(bc7*><#-L9dk`R@ah(4UBUB`f0%ZK46x$J%q?7xsnn;Hm z{HqiRm)me^d=ibDhgJVR4lLrOh+FZ9AT2#T#I0@A)qb}?*oz@@$egz0|1{wpNyP-4 zoAeTO$|EwxcWA&=p<8n-$i(CfIq>I{h6cnrCu{Gu9r};+fsvas+OuoAx~NHG&iORC ztqzc8JP2@Z>Jeh{g($0e3xSB8Ie55Sx>Hci=3g6T+J06#yN##S!7r?|9EM9iVJdU4 z;=}c$_ch&bF225sb4OtnAcqXc)cAq-*rwJRRi8;*kT3O8q@v3j;+hX~V~Ds0wJ@rH zz(ia%o$KtBuj!3l7#i?q8TNW9@py%jl4As)?-HD=;eGIPB;YmK%MwuvmBjl=a2U74 z4J6o#jLlKxtHnJd_*#(8+j`Tm<>dcJ43k(Ha9BihawBFrPfQbQ)TNTrP{TbFn;Y=B zP}8k+G%+MKB64g;vrk5_i<(52V|-y!*}q3RgK&y`J9bCc6?j@L%-!`+nDY$jbc!XdByuU#g9ta?B?q$hvVJ{>5_#?JtebY?ksc(Rq3}uy7`u%&=2QI64@@;5e{Dd6Q4vc|$z3g1>hBq4yv8PU z_V+D2jB&5)6{Za8oNjZvA|3tSf}8B%^3nI&V^$*6Gf%{V8A4n?N+!|C;(x-LrNc$$ z=m@5sYy1J9MwO+rGak1tGmfl{*wi!AylF19XsEbcl_J8}@NzXXXy=z5N6i0NST@&3 zAiUqH=j9epjRL@%w10%7i=XmtMTzEgC9@=@l{={z-BEvIC|Hzb!W|nKxkolDw!xDd zRGn)T$Nv#pWs~Ljk-0Z*BA=!R?^tS(yNS&NC6O*~o@Ru}ln+ zBB^_`eP^xNdA;1O6&5AO!M=MAm(RNvb^@5}2?#1 z^GPf*ulk=r)t7UO!rcPLF++Pr*_2G#LV|WaCp38W!9<9mQ4XQ&Bp}PcLNAv%jGxdc z{}@m==FQSWmE zeV@~YDE;rd+;w=qHYwz`+HX9#o;K(DK4jJSL!8eypv8*hRZVb~NgrciL&I)vR)6u5 zVm$98)gnb%dcp0;jD5{;+MM!#4P61XZG4*Fw7CnFoW8-{=Cq1d(d%|t$tVnH z**jaY>yK`z=Tw1}#xYgK&r_zb!b4&d#$InhUlnCX%yf5qVbo`e;`03`4 z&sr5E_afBcaZwdq2)A5!C+aLPaLxnW3XB5zs4K=zCtVs;HA)|a<}*StxMMiO(0Uc{ z)MFy}f65JWSuqU~pN!M5Ae-&6U9jy((k03&XR&M0_GhIj(g4Ylz}|__ukd-K1QcGK zO(mom;-v^#Hp%^rc`oG?I#D{{qg=gE_}8DCb+h$|xQ;Q%L1Fg9u$5jKJFIjavNsTd z0FRGb2%`|2|I!CVctq=A2rGeOLiP{$*PU+njUl5&WM3}~8Z2L+kRoKPWE~xz#;T`T z1qElPh8oaCXXE)D3*%3H-6O}xPn^3SeZ&KP-IewRBZFPjpZgPzR$cY2CbROoiwC3l zKNNCn-EZC`CcZZMff5tNm3CA9czid~+hBw0QuYBVX1Y36{-8TY5abyw&uAlGQaSCm zl!8OJFZV&v*9#ovl2U(qa>5T-Tg$F0TnbCsv?w{+P%u@<3s;@9_bR3f-gumKnVevC4Z(G3BrSbm7o1$N77@e5zZ7JZBI+|-FIl|ngblD!+9!k4{U+7qqY{cafXHc@WBUBNSc?-rdH@Jb z(psj)b&<}e8|dT@!3C@pB$L!(!BW%_4jg%}5PYKguR%j@B(mFt{-_f)4xrUTZlwIz zAg-!xBwq4=@2C=!Bl2uAcpUKL;0u0NYp$&Z#1r$e>D`az$N^M=?3&Tlv-^8$=4gQA za9RPy_a1;Z&m|Y~yH+M&dd=DH5Rryh78q7Vlam}yH~pn__?d!`e3q0)2M6fX(}G2( z@;prQScy{9A<2pC)ig?RG1;HogD=Pqf1V`IXp}^28&}wpE>^ER+%PF-YQOq{=6}%=VK8GDNFTlgm7KymJ#xN?p_Vs1m zb;u49?(a8A&M&7mroINU>qN%IVQ59_d+K+(;#xZWRzfATlFO{yotIBNEmcA2?MVLli=OWVqF? z8xnSPOHR8A>GPIpOblA5hA6J7qK*TT|(G|oJ=X}lRlewT-&sU%akkZej_~1ExzImEU zDA}0{im1p&M*NBSBJrChP_f!^;xGvi6Td-PW%~R>0LS%xg$7u1|ESXxq${mhaYua&cMkFS!hI z4{}?Oa%4M#vEhh68+vKp)v-9E%b`|_qp!l_Z%0?%fYL1ubc+d6=osbD%98g&ebx9x zQ(+;2(vpkeoU7pymlC!3Ju*r(?NXY(wJ_)cn;06f13qofZ<8qa1`qVJb*43cp^fiv zMF=PrC?0%RHVDei@RlN~Z2fdu*bnH;M)uI;P7EwZoQZ$Y0+I9Xe5)}wDPTMsW~wnzac&t zOC+OMc5p5waYb=Q{f7|BjkT+-_Zg?zW{3Qc<8ki8%TzuLAEH>MoOXO}O@Mf({-T>N z+q&8;$q``UWa_`?V2@#B_o}`Pq04mg#FeEcEH)?AVDix?$mTRfwUHZSC+14SN~!(u z8c z2V}}p|#`x|HYqEycl2~iTMWQ6+Pmm%+l#;a%wk4}4YEtmgs0U_`(hsZBQZZ_c zv%0fVFdPwRQuEherPOMY=GPV`tM6vaUdRTkp#rk93j5!K%%;Ue1t2(dxGllo#qg+P z=e4klzNt`2&MB> z8F+dsL)J|?Q&KvkY3tOfftMVgn0P1`p7;1zxTJ0-AW++A{;BE?L0>gq<3P=<)XwVi z4Iw2rSK}h`tjgAkRI`cC9m&ooERv}798@jK0A4M|QeAx>vf$R%(|c+G33a=juf~w^ zz+f+xG&a-TpgCBNCrG*b!2h(${VR;VZksaH)6|?#f0l8;?(Wqu_*Zi|JQ&}4DvtnM z^;^lww_Q{nZRBG6yveco5P!p(P@vvK>u?CCb{CsT{JZ%@@YfrwzY`d8!YLpv9B=FJ za^5la(>J3t>+jwMJ)Yyn$xRb0pM(1Kfk@ z)pB!I)}HEni&jU0qHNn^W21K@{1UOUZk?w8{$oG9Te(X>!HDPG?TIITYWN~lfSZ&> zYra1CF)In7Oq16_JS^Z7HRrG=TG~yyDisHrG~c40k9#tMZlcn9!MlJ@*DRTQebgqD zq#T3OvF&vGhz-nQh}Ep~+BQ`1a-Zuoms})8QSs<-;1Z*92sbsU(hA|tP%Dv8>19Zw z(s_)1FT*R0^_s3-`%5bF6)A)Vf`VnUL~#;qGWrq`yyC<|M%#tjtKs-liyQw6MGohD z6Mc9!LlG7KV0vHqF!^DY98g6K{w&D9!<~HIjdWRi|5vamx3kKiZNE1h&kW(O45rsr zufS?W7T(yB>K2BKY3?I>E7Gls8yq$8bF-02fK%7V=rmk9Dq9oT3z+557J&or$A9*65{9f z;{C(J`6ZqrA#*ofnpoE%fl10x$*JQ z^3}$*_aCQD2;eZLHr*E%zuuqf3!11#ZXE`zKMcA*|BL|iQwA<-x$mF$_j$IdI zn};4pleK9iW82vsP8z}>M@OX?%m7$q3cKtfQ~uCXnAq_Ra!Gllh%N%XR%v$FO32Rk zh1?HGeJ!q%+AU0*&VB5eO@Hm(_XE_ind^MNpR!hCZ$eQDs)?He>FnM_Bt-~v95ub^ zuOIQJ02r`k=rr_&D03$4?+;7>z@n(uw!Xp!wH{|7%~jC~6~|f2ItJVY#5bO)yg9cH z#ddgxBCk#13D%z+m(c&>;yj9z{A)0Wy0X*1k35m~HVu7WVfx%DhvXX-Ao?xQ)COO z01h9WkRve%p`~OwcQP|)e7-GlQX&eyoWRR;KDL--H9TJLyFt+q#L~R_!ad|~Gz&O! zG%@K?G&{{j39_wSPGn~vp_<={8v~>17>jVkQFg*4`6orm=Dny3e)qWuRYiPWUkvk^ zO|+cnGS_Cd{N_lFBu6cm_#KVuqZ#g8v|b;hpyjt>)nK|1w%uY9{GCPJ zLhh75>G)UQ^^2p2nCBV`=>{}DGatJNP&AmSags*L(6WyaT&MA#HdY)=byso|#0@F^ z*hBM|$fmJzNbzx~NPOQ4cBmWOwwUE&9r5jNFhMLL%B2-5C5 z6zJ=XT~cL}VYX6_xtZ82@!VIkVmV2iy6frM<$Bu9ZQJ6-#LR163_cB!>+dp-+^%ZT zZnS%t;7LNmlpquGVgv421Wv7v8i3hm{;(xmqCYK(Lfs>DS|U(C3-4hfT`e0&$Ee#x8rn0aDuKG5Z*l*!ipiH8%<1~pXNQ6uD3 ze+krbQ3Do+&TbiFg?>vPjHg}VqxzIfy?Pd3I!(oEBuVp+|B%%E9(6{|(B$){gf+#F zpGA`c%q+R=GcL^5cKqSw903#SA>Y`eIse((gtqR0*ep&=5}MtBo^&`#lu}1pPMo7Z znTBb9ifn}k&st0=E)(Hp)a!zm$IJ4#MoHMkME{fJabZ-`RhOkM(#%gZTHkY{$ll|1 zU7{bLIdQ}&=hZ^$_#iugTUYT|eX5FwI*pD}^g@!5b+tlgq*S9am&7eIa=|KTfp}C% z6@=roUdw0Pc0%;`U5?M#;bq5phVfLoQ$j>A3E^Rm+b$A%x7Wmz`|H(#48k{~Vk3_W z5}tLxISC%4>p6{&IaUKBu&GU-Rnk46c1xS?FEOB8t{W~IoD{Czn@r>9^GDN?LG$9; zy(_pmkZZq$c9t1Cr!_$q=cU3{=T2aa&&9=@mBD)(ZdRk$Kiyr(m}fj^;VsaW-wM=- zfE*)UX}sh=aVfKLZ2=pHf$4WR?dyUkm_JXnS=N3qDF3#q_j$H^tPT9e;W$vW^|)_a z{Fvf_N~ueYHGe{%9wPhKF+9sHQZo3z(y@~-RRWRR5~AL zoQYxFL0{!nq(_a~OHgO*Ev-8+DHcY5?vE}2S4FIb z{wv>8-@ktkYx3W3dSA9Z{)>Wj@-(z9`~T=NKWqp4>(*{pQcFnZI8P#hH(x5OxzGS_ z@I@xacWDg`d_eGK_%GxId!^RYe6}Yg1&f5kX}0kA+T&lZ)%%;e~BNpTe;$!J7w0~HZG^zIN zxCi;m4~yXjM34O;BHwIy-~N5;`Jg2%Mo6ox;|V0-x8VJ{UjwoNefGM~Zqo62(&<<3 zKHj6>f(eZ2m=fs6=D$<>x1Abn1{LLPk^u6qs-rpzh2};s9mX`A4H3BuE9;k~ z3t{B|#Q(}qGVD6s_73-_ve}#5)hMh`0Ber^d2hn|QIvNCj(<4@Np=;HVpl(lTF6kB zhSs5dK#~y-qNA3m?)V3XwI^W~dy5*+jGIKq$3v`9&HrLd-7h{ENSD_bNkJkZ8n!O| zJtFHg>onR~>DD$wWzHv~n6r3=E1n8&xJb`5nzp=JUhpGfqI zP9E(f8TsuVx1>T_ii-A6c{cUc^q$vmf$Lgl-Lwj}OO6DZ#A24BccrzaKYDz0or;IqYOxg$nxntaWXr z>)EmQkRuuF4rALNq}|v4U}LY5pl->b)kx>)c>Q{`VzSP)9Um6af7Rwi?9#)Ldd|m?icIAzQ4bH>+^m{ z7Jm8pS!%j-uGrO2X09ZToX=@{GCNY|-IU;qm#_J4VPyX;x)bayQogL!It^G}euPO{ zR%;ws0b-8At?7KogO|aae)B~a(gdm*6uqoWN(Lx67aAwwBhIR zGrKvme(`$K>2_>3GK{61L!q~@vdVIPD0_oAh^IQiG;&){7Y;<@xhoZgJ=0ASnP9=E zJKIeq7%Ovzy$tuWO98FRv9?0n&iDL2&MTE*ae+I>?^$l>M9^*anGRw1RH9-f()73)A#y*UZZ+{Ejce402 zX3rS;#<}Q^8u3?x<;sF7(qHD$=*muAegc4$RA^IE(`6SJN}p<=scVfr){p(RS%rfY z&f5KWqgA2(;?rGcK2&McW%+bN2n$knl2o8V3=H1ut#xCmH9&wU6`R#$WnUj1*bk<( za{m8^f`WorAY|@h!&_-i(B%lHr_%T30e9wP!Pdz891}R&0&P9tlP%V4)xuu4%JnVp z5(YJ69Y&{wo8>L?ixT|c;(U(TFUr)cM#K^8r$%FEOCwj3525jyTe5#Up1REBvN6+< zu^Er({wssE((OzM?Co2skP6hg*9ZcS*S;zuk4H=Zn~RCuccoqPsm|NJ(~2Cw$IPTb zOt^q91(2yNZ{YRyjZvHfTTm{0(B*dhiAUVj7>i8+sY zc1FLffjeKHkzpMn9dl{SCilf%inF@O^ggzeznL5h${hK3PNMt^>b$bopE$GQz`tiv z4jQ=@f3Esci7;3#2LuMcjFEdk$oz9euj3|=?&VuTDP#*BC37*&$wvA}SBu!W+m&NfYl zf>@2WH?7?ONJ=plY*R9pp#tI-0A2zD4t$aY`+NW`QJ|u~v~DAfd9yAOBcesFZzkTr z2%(~92z7x=Yz8%gMVRTQaMC=B9vnTGurSpbWnp<``%gf8@|~bL1|Wuq!yf92B8s=f zm6*sBDl0W%rT`RB(M96P$ulyGP1*vC7J@%A9P@|Gb9|vH3A%GPO%4S6;B-#s84>8c zKBEonFJtYxrCVCgI##IXbiVXES(NRRni?UBvklPfPLk1A<=c=RW+Zdi>oxyf?Rt>iSA>_Z=jP}<6OCw&kY63U z^C!Uk-0^U0<*?rBJa#~5dObSYPGFf#0F!SmYbambJnyEh^+3D20)CC92*H9axBy|_ zD1HPKSa`?jHJ^7LYc+mz6`SR%ok7s5p^{y1Ju_0{UASOtOGf$J?|k0mf8KN$OPqi* zYFO{_@HbBQvTB<2cjv8rpY#4L$zhK3iSygt6*5J58;^;}WqrR^IF|P7g}X|Nj@97! zHAC)f=xv1~H2c!PeK$rVW(Ysp-=Vwib%H0Qq$)Qz*ZH(cr_~trurSsQjd|%Lbh{8d z3QYyroc02;1+a_k>?Y6T{JqaY!z>p5BNxCvTlVaMcun$^bU&Qb>oQ|f@3SthC!*F4`T>eZ<|#Y%#>gaQVHsg>VuZ@@}r`FOF!jRPaXA zrSE0OlCgh34Db|iJsGd4ZZ})3)KC`ol=kzZ*#$#iD0Q2D+=rm<=6an_c6r_NyOiDq zp|cp(neAWtzl952v_b}m-Z=eUlYjsI{q_P{v+p=hxwtoloq>*_>wtrwGbN4i^U+rK zebr^>?WDIu=k;P==een}ZudWd0%p6l*nnBCVi6IZr8hwH)OcM&qA-@fsjEoWx#8;$j>m;X882JpO4?v;{lcUpuMu%~G6UyCR!(-tMZkPmhde+MvoI~04ar!Wi z%!eZ+=_qbqUJcOWzvJQnG63QM^S0JWaW<&zf(@gUd^rLyFZfZ2jI#WiNnk5{nLn*gmqkWS*IEXuSA78vl@8ziT+*5TBN4q9|Vc7t^T(M~n5zQjJMHX~`7& zLY!g}ho9AIfsIY~3&Od%D3PBi;utTM*Uy5inLqsIVh=-6)zCSHNhYPW+2Yla>*+i2)BW?oO)KGnAa$%9N&sB~O5i-* zPDFIzD1{^gKHEr3=E^7k80Z==*xw29c{_yd-zoxtWFUxleMEj2Y@&~_((aG17C6;rO+n}JVifUek zxmnPk+o$Lbf48w(Q%KzMt!U5NUjc`^oWGn0xyegd_mi8xMKV9HmRBQo5QgH&avn-x zc@sjwRLR!;ZVeXs>}7-!5<>T-FE}j05EcD01r3RO;(&ZP-HOHMFq?;^`;mrmKNotJ zYFpiA|6fEMENXyeaJ#web502&!?xb*Y@;qOxSoLHL;Pg`2ms_H#Wdj{4&6@`z}2F@ zLj~FozjwhKQ)Ra=5cka|-+POvKB8(8PD?JJ^LjAz+#xXk)6ZqAl)csTkRNsn?XO>K zwin;rYGqIeHY__IVK*-1Z7l3S7^<&SdUa8(zQy@iFf5@iXAl=w$9Ife*x| ztU;b;%!N`cj)pDW1sIR4o6nP*Vl;}}pgNOx_LpBw zOsgC#5`B8n2?@;0QA+LoZ1HU zjz^oso>)1Gfuc>CC0q@daeczi`IH}7NTv71*abSbGJ zdt6(Tc}=f38hG;e-5W|ZcGOl@mLB3p#=dwtcQAgr^|pU_!hiDKG;y&GcTR7KtXt$o z4rn$=h4VMV#JwXshZO#V@k3jWps5n6hK`3q@W-O%S58Y(JC6PLEP`!a&%(KmL*VYm z0oI(Y6sq~A@yZ@|kn_gK}IpmcyIzH|CjGr_&3l{)B3M6I=axD-RHsRbz~^^ zwRHONu-eFJW}u`5V)KwSf-T}A6B!QA;JS1kKBkhz_AhYDuflv<08+>ff}FP?H>&Zp z9o!zSUw56N&z8;FlD>f6I@;ZHH6Q#PwxMMu$}bn>OW!Sv(@{xC0%6+QruB8^%bI9T z_n&Zit-NokU_W12aftlRXEb?653kcO3yS|Hxy18t7S-cC(i-q+Ue5R)CGaY9i zlW%CZ7~(vL&Q(wPJwYwP-5iaFG)v46=9HG}a+vuo)4WBM3 zfCpGWujPGxn2_#qbwO z==_)S@POqy25Rp44jn%$w`4QlY%&Eyi6}Itu76`-!nl{t=a)ql=sV#1pL?LzdCC-c zJU2E{7a_zn7WCdZTxi}W&69+^(UCj$&Q)*sh0}JbaSa`Xj%~#>x(pm zWgyx-7{pxG>&ta3D=VL>B0|G|NC-S=hlCmrRi=2IUiG4l)puf(957dDy#Hyi`*~IM zdK3WU)E$H3pN*zWFI1yBu)>nmsYC@SP`P;kgh>pC(h}O}p-xqNIKC4U*=MS9vb4N9amgyYJ8R4OGWbH-m6e_@;P8+LPU({W#N(jPbGR3(<+|^B z|EHmt6{k<#m)FB%E1I!{La@_H6=YhXn2QWV-!71C>DOPu4gq<7VKSN=9d0wZ=B`)- zfpeFjq){?ng!d%eEfI#4SwsPvQndaG$k4u6~7^I4W&5{v;X z*X=DR=#)#6ZnE=Vp7yhkC7~J5;AZ56C4=edfnzNCk5m5L^dXWV^j5hi^eE}hCygyz zMpf?@2L?P9CSk6xV+!x5as;eK(OJ7&>|UTk-dM0-r0xqrrR4{H8jX#k#eU%SXb9Jx zJ>*mtP=AIwzp@B>kCd^3+JD}Uera;Wymy@#uB)Xgft}oi&D{S~N6CM>Y&|_!+&Aw3 zEWu1W+%{q*!arkERDSwAO3qa}RlupDM%~J(lEY^I%0}2L;Gvp}bZaLc_jGH;Y+QFd zoi7gz4`XBrItzXXrT(YW?X!}`-k;-f^T*d43;DGhR^@=*QOuxyBwfEX{(d-|%B|~b zI88r4`(`Na`|@7oZrXjRX6t&jVhrm;rM0!SjXf3&6yD!I#2{O}Tz6I>``YR69k)8C zlKItYu@GB$z1D4_875o)z^jXU^>Q$g>2^JUu4!>lxssIP+bX7%f6NdwHlcJQJt<)K z3=AZ1d`UHzNfdRO96FxN#5J>6_!_Fn9>2ZlqV*t09D<1 z0aKq0lpgBfXDmwLUts$eb^iTixy{na&h@NZ$ld|>X)}v)oy{Bc1{U`W?9#BZT5b0T z+p7e@y`68p_G#%bdtUEjyIu0bcAOrJhC zGT9;KA2s=cE9AeD-($REZ9nRZVrge1K+ARtE3&CpAEgNnP&-YQroh6mn6^X^%s7`ccWsQ=~kDrIx7uQ=&*wKWPZQqn={IsSQe*I^xRJ%PeXO!4w-WRjH%6v_zPnPgJe2M;O8_Zjy## zBN6rU$fXP(n?8^?@}}9Su*1tTYRE1LHYO_qY&6uNzG;$Q`G4S#c(1#l6bYy|Z}Q8* z%Y3H}e21$h=fFGryS(Eh?38~9M=g-vMeL6bHBJxL1UH#*JG9(Ex?l%er~B#o|(zr91;}3C2us%({Wf>nH_Ih0r z!8j5bum2aO;{BS7?RW97#%~{etIW34b9dvAwPTxqkjh@l4>EL_+qFH)Y5=`Ap>lr8 za5wThMBSL)e7btNoqT=8%ze3#@P9LvuuVtX(MFhzZ)1_Xe@C)rpn5_Brr@TdqAZjO zqu62>EulPoTT8*cGyVnbyaP4)^Sr)tTlqsX8U*b1=9*xFKyMrW_UpkYSU&u(QRMz| z>ofrbJ&M?v97i+q-2X?bZ9ApzgIh9{nUn6g2dtiDjWe+ryA13{wbudBD$nH5T$jHyH z%gdvJ*`pAk!CXC73#8E7SN){J$mM3{=PPBuf792msL((%f4JCyK}hkbRv;o>kRJkY zce>=)Ssh)zw2h*>K!x!>Rh>gXod7lO`+|3OomJqiWKv?DU(t9bYW#5Y7bYeF@H#ro z2ni`wo?*f>Lc2s@%1sWm8M@|1Zq&h;pk<_{1@iVs0x*tr5Qm1*Zt7u`%KXKnPQ6{C z$?Wy!pp(Jc-mbUH;#)WXV5hy7eiy^FnkIyOO`%|0eJN8#M|f`L6xx_}wOfcUn4*!2 zLM+QkAvV}Q^EhdU{6cUr$#3H%p^#*gz9NBEoXb9vYsdS;9vF51-K-zVnUYArpxE1p z7*kZSd+w4=K;TlBk*xky_p_ap4v42B;n2_(4*ol}tnc-Sfm48oGl_F!V#PVIDE>Vl zTmPYik}jeNAa9|jVyjP=f(yV$1&Xb;BM>Df7K-M495MCQY4(NzDYT|aewH|+;B&v- z^+BxWqXM&8wdMD?Bsin?*+O4PV;s0^Mg3+SKu@ z`=>33O`99L2twkgOI6RSbYB)>VTMzT^JIFMFbKK~x{wO<%k3p54O=8Ge?6TOArhx4 zu(xiHvmtG+XJS_ zNYTn3YY)HdTCIwIsST76dY}@{zK?6DGLWl<* z_}%^Y{}K^@`qO(-qFss9pRp_M8&ch9KcPx% ztjfN9`)8IxOOqnsBO*~=3qw!A*mA{sCxM`T1>!US2m}Im-~E&O?)%NYefuxC;F1?! z__vEilgtW()sgzeS!Yar-| zodY5e=!RsB>4v62ATn^YCXtdodkh({B+s>5$Bl+{(Y1*`@mtA%V0DSkm-+t$v_qJ}`He<%D$&)8V zB9X0Iw`FH%j~ZoXU{0PqY5n>QfBfU0UwY}~Z+zp{3oba{Z6p{Be({Uf{qc`~e&UIz zo_OLZ0GK&*#>9yeHg4SH-Ph2eL)NWZUsU7<>%!c*a~3Z?v%PK~s)`NkchJn}Q{QaA zgO630*JYIC5I{?l@*ENn>{~%YPlncyoVWG%=3oBujaOfNRWKO1@y4%i-@fCbi!S@; zKcDs{G1?Y8f>`Sn=g;})OCK#;wfzgX{dV}^-jy|tEujbi{Pa6l1&&%`-fOpi?V@*< zZQi=8^yIU@J!$OVXf(ccS7~-uaMbYr0C4$vv;XzdM@v_3yYTv-j~doDCp$w?+FW<_ z1?bB=+I{!fXVE-RArUy5Y8?cQcDv?L^tRodcf4_JQ@9`}d-(7nL5VI8A&2Z$T7J=#WBjF zvFP@Lb%9aC-dVNbtW!_Q@(10JQ3dyGWdRb1%;64oDPOn>t|t|8YTp4-)s#{)raQr$ zWJ^{ML&SjJ%C+=*7Gb*Po;VjKkOwz;eQW?g2vXY86fG?+O^q$VV9>@*PHJFR@m;$* z744OK8H<=wiX;N*RbzC4VWRgkq2?|uDJ&@jNkLKqxqm9c)(e@4glWbNpKkax!>8$n zX6Tx&45@R*QPa7maoym4zwQg@e!s5ioEuy-G{dj^f_fm+mysRF%FD{k$p~ip83#>g zy1{*Z%@@%90mC0O`~k!8>4s1D2Mm9}@cRv)U)OcbFt~1T!>8#6M@8FX#~#~b=LYh& zmpVXcijuPjrNb?gh(+qIEm?Bb zJMX-4$t4$$8Z|N_BV*XGq34{lE*A=^pl+`kJz|pM{{-w z`h)0(W|4%0D_SVbKo1-cW8CU`U!w2_n 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

44Z8jhkc<7z}aT#aK0zufP8^GVYI#hNV$ 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 + ), + ], + args: { + onNavigate: () => {}, + onBack: () => {}, + onForward: () => {}, + onReload: () => {}, + onOpenExternal: () => {}, + onOpenDevTools: () => {}, + }, +} satisfies Meta; + +export default meta; +type Story = StoryObj; + +/** A brand-new browser tab: no page yet, the URL bar is the only affordance. */ +export const FreshTab: Story = { + args: { + hasPage: false, + currentUrl: "", + pageState: null, + loadError: null, + }, +}; + +/** + * A page is open (in the real app the host paints the live page into the grey + * slot area — natively, above the renderer, so it cannot appear here). + */ +export const PageOpen: Story = { + args: { + hasPage: true, + currentUrl: "http://localhost:3000/", + pageState: pageState(), + loadError: null, + }, +}; + +/** Main-frame load failure: banner with the error and a retry. */ +export const LoadFailed: Story = { + args: { + hasPage: true, + currentUrl: "http://localhost:3000/", + pageState: pageState({ canGoBack: false }), + loadError: "net::ERR_CONNECTION_REFUSED", + }, +}; diff --git a/products/desktop/packages/ui/src/features/embedded-browser/BrowserPanel.test.tsx b/products/desktop/packages/ui/src/features/embedded-browser/BrowserPanel.test.tsx new file mode 100644 index 000000000000..f5b9f170e8bd --- /dev/null +++ b/products/desktop/packages/ui/src/features/embedded-browser/BrowserPanel.test.tsx @@ -0,0 +1,99 @@ +import { fireEvent, render, screen } from "@testing-library/react"; +import { describe, expect, it, vi } from "vitest"; +import { BrowserPanelChrome } from "./BrowserPanel"; + +function isDisabled(el: HTMLElement): boolean { + return ( + el.hasAttribute("disabled") || el.getAttribute("aria-disabled") === "true" + ); +} + +function chromeProps(overrides = {}) { + return { + hasPage: false, + currentUrl: "", + pageState: null, + loadError: null, + onNavigate: vi.fn(), + onBack: vi.fn(), + onForward: vi.fn(), + onReload: vi.fn(), + onOpenExternal: vi.fn(), + onOpenDevTools: vi.fn(), + ...overrides, + }; +} + +describe("BrowserPanelChrome", () => { + it("shows the URL prompt for a fresh tab and disables page actions", () => { + render(); + expect(screen.getByText("Open a page")).toBeTruthy(); + expect(isDisabled(screen.getByLabelText("Reload"))).toBe(true); + expect(isDisabled(screen.getByLabelText("Open DevTools"))).toBe(true); + }); + + it("submits the typed URL on Enter", () => { + const onNavigate = vi.fn(); + render(); + const input = screen.getByLabelText("Page URL"); + fireEvent.change(input, { target: { value: "localhost:3000" } }); + fireEvent.keyDown(input, { key: "Enter" }); + expect(onNavigate).toHaveBeenCalledWith("localhost:3000"); + }); + + it("abandons the draft on Escape without navigating", () => { + const onNavigate = vi.fn(); + render( + , + ); + const input = screen.getByLabelText("Page URL") as HTMLInputElement; + fireEvent.change(input, { target: { value: "typo" } }); + fireEvent.keyDown(input, { key: "Escape" }); + expect(onNavigate).not.toHaveBeenCalled(); + expect(input.value).toBe("https://posthog.com/"); + }); + + it("enables history buttons from page state", () => { + render( + , + ); + expect(isDisabled(screen.getByLabelText("Back"))).toBe(false); + expect(isDisabled(screen.getByLabelText("Forward"))).toBe(true); + }); + + it("shows the load-failed banner with a retry", () => { + const onReload = vi.fn(); + render( + , + ); + expect(screen.getByText("net::ERR_CONNECTION_REFUSED")).toBeTruthy(); + fireEvent.click(screen.getByText("Retry")); + expect(onReload).toHaveBeenCalled(); + }); +}); diff --git a/products/desktop/packages/ui/src/features/embedded-browser/BrowserPanel.tsx b/products/desktop/packages/ui/src/features/embedded-browser/BrowserPanel.tsx new file mode 100644 index 000000000000..09462a607f2b --- /dev/null +++ b/products/desktop/packages/ui/src/features/embedded-browser/BrowserPanel.tsx @@ -0,0 +1,281 @@ +import { + ArrowClockwise, + ArrowLeft, + ArrowRight, + ArrowSquareOut, + Code, + Globe, +} from "@phosphor-icons/react"; +import { normalizeBrowserUrl } from "@posthog/core/embedded-browser/normalizeUrl"; +import type { PanelNode } from "@posthog/core/panels/panelTypes"; +import { useHostTRPC } from "@posthog/host-router/react"; +import { + Button, + Empty, + EmptyDescription, + EmptyHeader, + EmptyMedia, + EmptyTitle, + Input, +} from "@posthog/quill"; +import { useMutation } from "@tanstack/react-query"; +import { type RefObject, useEffect, useState } from "react"; +import { useCommandMenuStore } from "../../shell/commandMenuStore"; +import { openExternalUrl } from "../../shell/openExternal"; +import { usePanelLayoutStore } from "../panels/panelLayoutStore"; +import { browserViewId } from "./browserViewId"; +import { useEmbeddedBrowserObscuredStore } from "./embeddedBrowserObscuredStore"; +import { + type EmbeddedBrowserPageState, + useEmbeddedBrowserPageState, + useEmbeddedBrowserSlot, +} from "./useEmbeddedBrowser"; + +function isTabActiveInTree(node: PanelNode, tabId: string): boolean { + if (node.type === "leaf") { + return ( + node.content.activeTabId === tabId && + node.content.tabs.some((tab) => tab.id === tabId) + ); + } + return node.children.some((child) => isTabActiveInTree(child, tabId)); +} + +export interface BrowserPanelChromeProps { + /** False until the tab's first navigation; shows the URL prompt. */ + hasPage: boolean; + currentUrl: string; + pageState: EmbeddedBrowserPageState | null; + loadError: string | null; + onNavigate: (rawUrl: string) => void; + onBack: () => void; + onForward: () => void; + onReload: () => void; + onOpenExternal: () => void; + onOpenDevTools: () => void; + /** The host glues the native browser view to this element's rect. */ + slotRef?: RefObject; +} + +/** + * The browser panel's chrome: toolbar, load-error banner, and the slot the + * host paints the native page into. Pure — the container below owns tRPC and + * store wiring. + */ +export function BrowserPanelChrome(props: BrowserPanelChromeProps) { + const { + hasPage, + currentUrl, + pageState, + loadError, + onNavigate, + onBack, + onForward, + onReload, + onOpenExternal, + onOpenDevTools, + slotRef, + } = props; + const [draftUrl, setDraftUrl] = useState(null); + + const submitUrl = () => { + if (draftUrl == null) return; + const raw = draftUrl; + setDraftUrl(null); + onNavigate(raw); + }; + + return ( +
+
+ + + + setDraftUrl(event.target.value)} + onFocus={(event) => event.target.select()} + onBlur={() => setDraftUrl(null)} + onKeyDown={(event) => { + if (event.key === "Enter") submitUrl(); + if (event.key === "Escape") setDraftUrl(null); + }} + aria-label="Page URL" + spellCheck={false} + /> + + +
+ {loadError && ( +
+ {loadError} + +
+ )} + {/* The native browser view is glued to this slot's rect by the host. */} +
+ {!hasPage && ( + + + + + + Open a page + + Type a URL above — your local dev server or your live site. + Logins persist across restarts. + + + + )} +
+
+ ); +} + +/** + * A live browser inside a task panel, alongside Chat and Terminal. The page + * itself is painted by a host-owned native view glued to the chrome's slot + * div; this container wires the chrome to the host over tRPC and to the panel + * layout store. + */ +export function BrowserPanel(props: { + taskId: string; + tabId: string; + initialUrl: string; +}) { + const { taskId, tabId, initialUrl } = props; + const trpc = useHostTRPC(); + const viewId = browserViewId(taskId, tabId); + + // The URL the view opens with. Starts as the persisted tab URL (empty for a + // brand-new tab); intentionally NOT synced to later prop changes — the prop + // updates as we persist the current page, and reacting to that would loop. + const [openUrl, setOpenUrl] = useState(initialUrl || null); + + // Inactive tabs stay mounted with `visibility: hidden` and keep non-zero + // rects, so "is my tab the active one" must come from the layout store — + // the DOM cannot tell us. + const isActiveTab = usePanelLayoutStore((state) => { + const layout = state.taskLayouts[taskId]; + return layout ? isTabActiveInTree(layout.panelTree, tabId) : false; + }); + // Tab drags overlay drop zones on the panel content; hide the view so they + // are visible (and so the drag preview isn't painted over). + const isDraggingTab = usePanelLayoutStore( + (state) => (state.taskLayouts[taskId]?.draggingTabId ?? null) != null, + ); + const commandMenuOpen = useCommandMenuStore((state) => state.isOpen); + const obscuredCount = useEmbeddedBrowserObscuredStore((state) => state.count); + + const slotRef = useEmbeddedBrowserSlot({ + viewId, + url: openUrl, + visible: + isActiveTab && !isDraggingTab && !commandMenuOpen && obscuredCount === 0, + }); + const { pageState, loadError } = useEmbeddedBrowserPageState(viewId); + + const navigate = useMutation(trpc.embeddedBrowser.navigate.mutationOptions()); + const goBack = useMutation(trpc.embeddedBrowser.goBack.mutationOptions()); + const goForward = useMutation( + trpc.embeddedBrowser.goForward.mutationOptions(), + ); + const reload = useMutation(trpc.embeddedBrowser.reload.mutationOptions()); + const openDevTools = useMutation( + trpc.embeddedBrowser.openDevTools.mutationOptions(), + ); + + const currentUrl = pageState?.url || openUrl || ""; + + // Persist where this tab is parked (debounced) so it restores to the same + // page after a close/reopen or app restart. + const updateBrowserTabUrl = usePanelLayoutStore( + (state) => state.updateBrowserTabUrl, + ); + useEffect(() => { + if (!pageState?.url) return; + const handle = setTimeout(() => { + updateBrowserTabUrl(taskId, tabId, pageState.url); + }, 1000); + return () => clearTimeout(handle); + }, [pageState?.url, taskId, tabId, updateBrowserTabUrl]); + + // The tab label follows the page title, like the terminal tab follows its + // foreground process name. + const updateTabLabel = usePanelLayoutStore((state) => state.updateTabLabel); + useEffect(() => { + if (pageState?.title) updateTabLabel(taskId, tabId, pageState.title); + }, [pageState?.title, taskId, tabId, updateTabLabel]); + + const handleNavigate = (rawUrl: string) => { + const normalized = normalizeBrowserUrl(rawUrl); + if (!normalized) return; + updateBrowserTabUrl(taskId, tabId, normalized); + if (openUrl == null) { + // First navigation of a fresh tab: creates the view. + setOpenUrl(normalized); + } else if (normalized !== currentUrl) { + navigate.mutate({ viewId, url: normalized }); + } + }; + + return ( + goBack.mutate({ viewId })} + onForward={() => goForward.mutate({ viewId })} + onReload={() => reload.mutate({ viewId })} + onOpenExternal={() => openExternalUrl(currentUrl)} + onOpenDevTools={() => openDevTools.mutate({ viewId })} + slotRef={slotRef} + /> + ); +} diff --git a/products/desktop/packages/ui/src/features/embedded-browser/browserViewId.ts b/products/desktop/packages/ui/src/features/embedded-browser/browserViewId.ts new file mode 100644 index 000000000000..403dc7aab10f --- /dev/null +++ b/products/desktop/packages/ui/src/features/embedded-browser/browserViewId.ts @@ -0,0 +1,8 @@ +/** + * The host-side view id for a browser tab. Derived (not stored) so cleanup + * paths that only see the panel tree — tab close, close-others, task archive — + * can address the native view without extra bookkeeping. + */ +export function browserViewId(taskId: string, tabId: string): string { + return `task-browser:${taskId}:${tabId}`; +} diff --git a/products/desktop/packages/ui/src/features/embedded-browser/embeddedBrowserObscuredStore.ts b/products/desktop/packages/ui/src/features/embedded-browser/embeddedBrowserObscuredStore.ts new file mode 100644 index 000000000000..5a2655007f88 --- /dev/null +++ b/products/desktop/packages/ui/src/features/embedded-browser/embeddedBrowserObscuredStore.ts @@ -0,0 +1,21 @@ +import { create } from "zustand"; + +/** + * The embedded browser is a NATIVE view that paints above the renderer, so + * any renderer overlay that can overlap its rectangle (menus, popovers, + * dialogs) must hide the view while open. This counter is that cooperation + * point: acquire() on open, release() on close; the browser panel hides its + * view while count > 0. + */ +interface EmbeddedBrowserObscuredState { + count: number; + acquire: () => void; + release: () => void; +} + +export const useEmbeddedBrowserObscuredStore = + create((set) => ({ + count: 0, + acquire: () => set((state) => ({ count: state.count + 1 })), + release: () => set((state) => ({ count: Math.max(0, state.count - 1) })), + })); diff --git a/products/desktop/packages/ui/src/features/embedded-browser/useBrowserViewCleanup.test.tsx b/products/desktop/packages/ui/src/features/embedded-browser/useBrowserViewCleanup.test.tsx new file mode 100644 index 000000000000..575e7d6343cd --- /dev/null +++ b/products/desktop/packages/ui/src/features/embedded-browser/useBrowserViewCleanup.test.tsx @@ -0,0 +1,90 @@ +import { renderHook } from "@testing-library/react"; +import { afterEach, describe, expect, it, vi } from "vitest"; +import { usePanelLayoutStore } from "../panels/panelLayoutStore"; +import { useBrowserViewCleanup } from "./useBrowserViewCleanup"; + +const destroyMutate = vi.hoisted(() => vi.fn().mockResolvedValue(undefined)); + +vi.mock("@posthog/host-router/react", () => ({ + useHostTRPCClient: () => ({ + embeddedBrowser: { destroy: { mutate: destroyMutate } }, + }), +})); + +vi.mock("../../shell/useHostCapabilities", () => ({ + useHostCapabilities: () => ({ localWorkspaces: true, embeddedBrowser: true }), +})); + +function layoutWithBrowserTabs(tabIds: string[]) { + return { + panelTree: { + type: "leaf" as const, + id: "main-panel", + content: { + id: "main-panel", + activeTabId: tabIds[0] ?? "logs", + tabs: tabIds.map((id) => ({ + id, + label: "Browser", + data: { type: "browser" as const, browserId: id, url: "" }, + })), + }, + }, + openFiles: [], + recentFiles: [], + draggingTabId: null, + draggingTabPanelId: null, + focusedPanelId: null, + }; +} + +describe("useBrowserViewCleanup", () => { + afterEach(() => { + usePanelLayoutStore.setState({ taskLayouts: {} }); + destroyMutate.mockClear(); + }); + + it("destroys the view of a tab that leaves the layout, however it left", () => { + usePanelLayoutStore.setState({ + taskLayouts: { t1: layoutWithBrowserTabs(["browser-1", "browser-2"]) }, + }); + renderHook(() => useBrowserViewCleanup("t1")); + + // close-others style removal: browser-2 disappears without an onClose + usePanelLayoutStore.setState({ + taskLayouts: { t1: layoutWithBrowserTabs(["browser-1"]) }, + }); + + expect(destroyMutate).toHaveBeenCalledTimes(1); + expect(destroyMutate).toHaveBeenCalledWith({ + viewId: "task-browser:t1:browser-2", + }); + }); + + it("ignores other tasks' layout changes", () => { + usePanelLayoutStore.setState({ + taskLayouts: { + t1: layoutWithBrowserTabs(["browser-1"]), + t2: layoutWithBrowserTabs(["browser-9"]), + }, + }); + renderHook(() => useBrowserViewCleanup("t1")); + + usePanelLayoutStore.setState({ + taskLayouts: { t1: layoutWithBrowserTabs(["browser-1"]) }, + }); + + expect(destroyMutate).not.toHaveBeenCalled(); + }); + + it("stops reconciling after unmount (task switch must not destroy)", () => { + usePanelLayoutStore.setState({ + taskLayouts: { t1: layoutWithBrowserTabs(["browser-1"]) }, + }); + const { unmount } = renderHook(() => useBrowserViewCleanup("t1")); + unmount(); + + usePanelLayoutStore.setState({ taskLayouts: {} }); + expect(destroyMutate).not.toHaveBeenCalled(); + }); +}); diff --git a/products/desktop/packages/ui/src/features/embedded-browser/useBrowserViewCleanup.ts b/products/desktop/packages/ui/src/features/embedded-browser/useBrowserViewCleanup.ts new file mode 100644 index 000000000000..600dcc4d616d --- /dev/null +++ b/products/desktop/packages/ui/src/features/embedded-browser/useBrowserViewCleanup.ts @@ -0,0 +1,80 @@ +import type { PanelNode } from "@posthog/core/panels/panelTypes"; +import { resolveService } from "@posthog/di/container"; +import { + HOST_TRPC_CLIENT, + type HostTrpcClient, +} from "@posthog/host-router/client"; +import { useHostTRPCClient } from "@posthog/host-router/react"; +import { useEffect } from "react"; +import { useHostCapabilities } from "../../shell/useHostCapabilities"; +import { usePanelLayoutStore } from "../panels/panelLayoutStore"; +import { browserViewId } from "./browserViewId"; + +function collectBrowserTabIds(node: PanelNode | undefined): Set { + const ids = new Set(); + const walk = (current: PanelNode) => { + if (current.type === "leaf") { + for (const tab of current.content.tabs) { + if (tab.data.type === "browser") ids.add(tab.id); + } + return; + } + for (const child of current.children) walk(child); + }; + if (node) walk(node); + return ids; +} + +function destroyViews( + client: Pick, + taskId: string, + tabIds: Iterable, +): void { + for (const tabId of tabIds) { + // Destroying a view that was never created is a no-op host-side; a + // failure only means the view is already gone. + void client.embeddedBrowser.destroy + .mutate({ viewId: browserViewId(taskId, tabId) }) + .catch(() => {}); + } +} + +/** + * Native views outlive their tabs unless someone reconciles: a browser tab + * can leave the layout through paths that never tell its panel component it + * was closed rather than switched away from (close-others, close-to-right, + * closing a whole panel). Watching the layout and destroying views whose + * tabs disappeared covers every close path with one rule. + */ +export function useBrowserViewCleanup(taskId: string): void { + const client = useHostTRPCClient(); + const { embeddedBrowser } = useHostCapabilities(); + + useEffect(() => { + if (!embeddedBrowser) return; + let prev = collectBrowserTabIds( + usePanelLayoutStore.getState().taskLayouts[taskId]?.panelTree, + ); + return usePanelLayoutStore.subscribe((state) => { + const next = collectBrowserTabIds(state.taskLayouts[taskId]?.panelTree); + const removed = [...prev].filter((id) => !next.has(id)); + if (removed.length > 0) destroyViews(client, taskId, removed); + prev = next; + }); + }, [taskId, client, embeddedBrowser]); +} + +/** + * Destroy every browser view belonging to a task. Mirrors + * `destroyTaskTerminals`: called from task lifecycle (delete), not from tab + * close — the reconciler above owns that. Resolves the host client the same + * way `openExternalUrl` does so lifecycle code can call it as a plain + * function. + */ +export function destroyTaskBrowserViews(taskId: string): void { + const layout = usePanelLayoutStore.getState().taskLayouts[taskId]; + const tabIds = collectBrowserTabIds(layout?.panelTree); + if (tabIds.size === 0) return; + const client = resolveService(HOST_TRPC_CLIENT); + destroyViews(client, taskId, tabIds); +} diff --git a/products/desktop/packages/ui/src/features/embedded-browser/useEmbeddedBrowser.ts b/products/desktop/packages/ui/src/features/embedded-browser/useEmbeddedBrowser.ts new file mode 100644 index 000000000000..d9f5698837be --- /dev/null +++ b/products/desktop/packages/ui/src/features/embedded-browser/useEmbeddedBrowser.ts @@ -0,0 +1,160 @@ +import { useHostTRPC } from "@posthog/host-router/react"; +import { useMutation, useQuery } from "@tanstack/react-query"; +import { useSubscription } from "@trpc/tanstack-react-query"; +import { useEffect, useRef, useState } from "react"; + +export interface EmbeddedBrowserPageState { + viewId: string; + url: string; + title: string; + canGoBack: boolean; + canGoForward: boolean; + isLoading: boolean; +} + +/** + * Live page state of one embedded view, seeded by query, kept fresh by the + * host event stream. `loadError` carries the last main-frame load failure and + * clears when a new load starts. + */ +export function useEmbeddedBrowserPageState(viewId: string) { + const trpc = useHostTRPC(); + const [pageState, setPageState] = useState( + null, + ); + const [loadError, setLoadError] = useState(null); + + const { data: initial } = useQuery( + trpc.embeddedBrowser.getPageState.queryOptions({ viewId }), + ); + useEffect(() => { + if (initial) setPageState((prev) => prev ?? initial); + }, [initial]); + + useSubscription( + trpc.embeddedBrowser.onEvents.subscriptionOptions(undefined, { + onData: (event) => { + if (event.type === "page-state" && event.state.viewId === viewId) { + if (event.state.isLoading) setLoadError(null); + setPageState(event.state); + } + if (event.type === "load-failed" && event.viewId === viewId) { + setLoadError(event.errorDescription); + } + }, + }), + ); + + return { pageState, loadError }; +} + +/** + * Own an embedded view behind a slot element: open it once a URL is chosen + * and the slot has real bounds, keep the native view glued to the slot's + * rect, and drive visibility from `visible`. The native view paints ABOVE the + * renderer, so visibility must come from here — nothing in the DOM can cover + * it. Inactive panel tabs stay mounted with `visibility: hidden` (their rects + * stay non-zero), which is exactly why the caller must gate `visible` on the + * tab being active. + */ +export function useEmbeddedBrowserSlot(input: { + viewId: string; + /** null = no URL chosen yet; the view is not created until one is. */ + url: string | null; + visible: boolean; +}) { + const { viewId, url, visible } = input; + const trpc = useHostTRPC(); + const slotRef = useRef(null); + const openedRef = useRef(false); + + const open = useMutation(trpc.embeddedBrowser.open.mutationOptions()); + const setBounds = useMutation( + trpc.embeddedBrowser.setBounds.mutationOptions(), + ); + const setVisible = useMutation( + trpc.embeddedBrowser.setVisible.mutationOptions(), + ); + + const openMutate = open.mutateAsync; + const setBoundsMutate = setBounds.mutate; + const setVisibleMutate = setVisible.mutate; + + // The open URL is only consumed once, at creation; it must NOT re-run the + // effect. It tracks the persisted current URL as the user browses, and + // re-running on that would tear down and reopen the live view mid-session. + const urlRef = useRef(url); + urlRef.current = url; + // Applied after open resolves, so a visibility change that raced the open + // (user switched tabs while the first load was in flight) still lands. + const visibleRef = useRef(visible); + visibleRef.current = visible; + + const hasUrl = url != null; + + useEffect(() => { + const slot = slotRef.current; + if (!slot || !hasUrl) return; + + let frame: number | null = null; + let lastRect = ""; + + const report = () => { + frame = null; + const rect = slot.getBoundingClientRect(); + const bounds = { + x: Math.round(rect.x), + y: Math.round(rect.y), + width: Math.round(rect.width), + height: Math.round(rect.height), + }; + if (bounds.width === 0 || bounds.height === 0) return; + const key = JSON.stringify(bounds); + if (key === lastRect) return; + lastRect = key; + if (!openedRef.current) { + openedRef.current = true; + const openUrl = urlRef.current; + if (openUrl == null) return; + void openMutate({ viewId, url: openUrl, bounds }) + .then(() => { + setVisibleMutate({ viewId, visible: visibleRef.current }); + }) + .catch(() => { + openedRef.current = false; + }); + } else { + setBoundsMutate({ viewId, bounds }); + } + }; + const schedule = () => { + if (frame == null) frame = requestAnimationFrame(report); + }; + + schedule(); + const observer = new ResizeObserver(schedule); + observer.observe(slot); + // Layout shifts that move the slot without resizing it (sidebar toggle, + // panel collapse) resize an ancestor — observing the body catches them. + observer.observe(document.body); + window.addEventListener("resize", schedule); + + return () => { + observer.disconnect(); + window.removeEventListener("resize", schedule); + if (frame != null) cancelAnimationFrame(frame); + // Keep the view (and the page in it) alive across task switches; just + // stop painting over whatever replaces this slot. Actual destruction is + // owned by useBrowserViewCleanup / task archive. + setVisibleMutate({ viewId, visible: false }); + openedRef.current = false; + }; + }, [viewId, hasUrl, openMutate, setBoundsMutate, setVisibleMutate]); + + useEffect(() => { + if (!openedRef.current) return; + setVisibleMutate({ viewId, visible }); + }, [visible, viewId, setVisibleMutate]); + + return slotRef; +} diff --git a/products/desktop/packages/ui/src/features/panels/components/LeafNodeRenderer.tsx b/products/desktop/packages/ui/src/features/panels/components/LeafNodeRenderer.tsx index c9b9983fd429..771382f863e7 100644 --- a/products/desktop/packages/ui/src/features/panels/components/LeafNodeRenderer.tsx +++ b/products/desktop/packages/ui/src/features/panels/components/LeafNodeRenderer.tsx @@ -29,6 +29,7 @@ interface LeafNodeRendererProps { onActiveTabChange: (panelId: string, tabId: string) => void; onPanelFocus: (panelId: string) => void; onAddTerminal: (panelId: string) => void; + onAddBrowser: (panelId: string) => void; onSplitPanel: (panelId: string, direction: SplitDirection) => void; } @@ -45,18 +46,23 @@ export const LeafNodeRenderer: React.FC = ({ onActiveTabChange, onPanelFocus, onAddTerminal, + onAddBrowser, onSplitPanel, }) => { const isCloud = useIsCloudTask(task); - const { localWorkspaces } = useHostCapabilities(); - // Hide the terminal for cloud runs, and on cloud-only hosts (web). + const { localWorkspaces, embeddedBrowser } = useHostCapabilities(); + // Hide the terminal for cloud runs, and on cloud-only hosts (web). The + // browser only needs the host capability — it works for cloud runs too. const hideTerminal = isCloud || !localWorkspaces; + const hideBrowser = !embeddedBrowser; const inputTabs = useMemo( () => - hideTerminal - ? node.content.tabs.filter((t) => t.data.type !== "terminal") - : node.content.tabs, - [node.content.tabs, hideTerminal], + node.content.tabs.filter( + (t) => + !(hideTerminal && t.data.type === "terminal") && + !(hideBrowser && t.data.type === "browser"), + ), + [node.content.tabs, hideTerminal, hideBrowser], ); const tabs = useTabInjection(inputTabs, node.id, taskId, task, closeTab); const activeTabId = tabs.some((t) => t.id === node.content.activeTabId) @@ -109,6 +115,7 @@ export const LeafNodeRenderer: React.FC = ({ draggingTabPanelId={draggingTabPanelId} allowPanelSplit={!isCloud} onAddTerminal={hideTerminal ? undefined : () => onAddTerminal(node.id)} + onAddBrowser={hideBrowser ? undefined : () => onAddBrowser(node.id)} onSplitPanel={ isCloud ? undefined : (direction) => onSplitPanel(node.id, direction) } diff --git a/products/desktop/packages/ui/src/features/panels/components/PanelLayout.tsx b/products/desktop/packages/ui/src/features/panels/components/PanelLayout.tsx index 9141acdbc229..88780f469b8e 100644 --- a/products/desktop/packages/ui/src/features/panels/components/PanelLayout.tsx +++ b/products/desktop/packages/ui/src/features/panels/components/PanelLayout.tsx @@ -2,6 +2,7 @@ import { DragDropProvider } from "@dnd-kit/react"; import type { Task } from "@posthog/shared/domain-types"; import type React from "react"; import { useCallback, useEffect } from "react"; +import { useBrowserViewCleanup } from "../../embedded-browser/useBrowserViewCleanup"; import { useDragDropHandlers } from "../hooks/useDragDropHandlers"; import { usePanelKeyboardShortcuts } from "../hooks/usePanelKeyboardShortcuts"; import { @@ -72,6 +73,13 @@ const PanelLayoutRenderer: React.FC<{ [layoutState, taskId], ); + const handleAddBrowser = useCallback( + (panelId: string) => { + layoutState.addBrowserTab(taskId, panelId); + }, + [layoutState, taskId], + ); + const handleSplitPanel = useCallback( (panelId: string, direction: SplitDirection) => { const layout = usePanelLayoutStore.getState().getLayout(taskId); @@ -128,6 +136,7 @@ const PanelLayoutRenderer: React.FC<{ onActiveTabChange={handleSetActiveTab} onPanelFocus={handlePanelFocus} onAddTerminal={handleAddTerminal} + onAddBrowser={handleAddBrowser} onSplitPanel={handleSplitPanel} /> ); @@ -156,6 +165,7 @@ const PanelLayoutRenderer: React.FC<{ handleKeepTab, handlePanelFocus, handleAddTerminal, + handleAddBrowser, handleSplitPanel, setGroupRef, handleLayout, @@ -171,6 +181,7 @@ export const PanelLayout: React.FC = ({ taskId, task }) => { const dragDropHandlers = useDragDropHandlers(taskId); usePanelKeyboardShortcuts(taskId); + useBrowserViewCleanup(taskId); useEffect(() => { if (!layout) { diff --git a/products/desktop/packages/ui/src/features/panels/components/TabbedPanel.stories.tsx b/products/desktop/packages/ui/src/features/panels/components/TabbedPanel.stories.tsx new file mode 100644 index 000000000000..f3832b85b17c --- /dev/null +++ b/products/desktop/packages/ui/src/features/panels/components/TabbedPanel.stories.tsx @@ -0,0 +1,106 @@ +import { DragDropProvider } from "@dnd-kit/react"; +import { ChatCenteredText, Globe, Terminal } from "@phosphor-icons/react"; +import type { Meta, StoryObj } from "@storybook/react-vite"; +import { BrowserPanelChrome } from "../../embedded-browser/BrowserPanel"; +import type { PanelContent } from "../panelTypes"; +import { TabbedPanel } from "./TabbedPanel"; + +function placeholder(label: string) { + return ( +
+ {label} +
+ ); +} + +const content: PanelContent = { + id: "main-panel", + activeTabId: "browser-1", + droppable: true, + tabs: [ + { + id: "logs", + label: "Chat", + data: { type: "logs" }, + closeable: false, + draggable: true, + icon: , + component: placeholder("Chat"), + }, + { + id: "shell", + label: "Terminal", + data: { type: "terminal", terminalId: "shell", cwd: "" }, + closeable: true, + draggable: true, + icon: , + component: placeholder("Terminal"), + }, + { + id: "browser-1", + label: "PostHog", + data: { + type: "browser", + browserId: "browser-1", + url: "https://posthog.com", + }, + closeable: true, + draggable: true, + icon: , + component: ( + {}} + onBack={() => {}} + onForward={() => {}} + onReload={() => {}} + onOpenExternal={() => {}} + onOpenDevTools={() => {}} + /> + ), + }, + ], +}; + +const meta = { + title: "Panels/TabbedPanel", + component: TabbedPanel, + decorators: [ + (Story) => ( + +
+ +
+
+ ), + ], +} satisfies Meta; + +export default meta; +type Story = StoryObj; + +/** + * A browser tab alongside the Chat and Terminal tabs, with the "new terminal" + * and "new browser" tab-bar buttons. In the real app the host paints the live + * page into the grey area (natively, above the renderer, so it cannot appear + * in Storybook). + */ +export const WithBrowserTab: Story = { + args: { + panelId: "main-panel", + mountScopeKey: "story", + content, + onAddTerminal: () => {}, + onAddBrowser: () => {}, + }, +}; diff --git a/products/desktop/packages/ui/src/features/panels/components/TabbedPanel.tsx b/products/desktop/packages/ui/src/features/panels/components/TabbedPanel.tsx index e2ba4d8208ce..4698d0a2898c 100644 --- a/products/desktop/packages/ui/src/features/panels/components/TabbedPanel.tsx +++ b/products/desktop/packages/ui/src/features/panels/components/TabbedPanel.tsx @@ -1,5 +1,10 @@ import { useDroppable } from "@dnd-kit/react"; -import { Plus, SquareSplitHorizontalIcon, X } from "@phosphor-icons/react"; +import { + Globe, + Plus, + SquareSplitHorizontalIcon, + X, +} from "@phosphor-icons/react"; import { useHostTRPCClient } from "@posthog/host-router/react"; import { CONTENT_CHROME_RIGHT_VAR } from "@posthog/ui/features/navigation/rightPanelSide"; import { PanelDropZones } from "@posthog/ui/features/panels/components/PanelDropZones"; @@ -70,6 +75,7 @@ interface TabbedPanelProps { draggingTabPanelId?: string | null; allowPanelSplit?: boolean; onAddTerminal?: () => void; + onAddBrowser?: () => void; onSplitPanel?: (direction: SplitDirection) => void; onClosePanel?: () => void; rightContent?: React.ReactNode; @@ -89,6 +95,7 @@ export const TabbedPanel: React.FC = ({ draggingTabPanelId = null, allowPanelSplit = true, onAddTerminal, + onAddBrowser, onSplitPanel, onClosePanel, rightContent, @@ -271,6 +278,13 @@ export const TabbedPanel: React.FC = ({ )} + {content.droppable && onAddBrowser && ( + + + + + + )} {/* Spacer to increase DND area */} {content.droppable && ( diff --git a/products/desktop/packages/ui/src/features/panels/hooks/usePanelLayoutHooks.tsx b/products/desktop/packages/ui/src/features/panels/hooks/usePanelLayoutHooks.tsx index 7c8d07fe6fb1..b888995459fd 100644 --- a/products/desktop/packages/ui/src/features/panels/hooks/usePanelLayoutHooks.tsx +++ b/products/desktop/packages/ui/src/features/panels/hooks/usePanelLayoutHooks.tsx @@ -2,6 +2,7 @@ import { ChartLineUp, ChatCenteredText, FileText, + Globe, PackageIcon, Scroll, Terminal, @@ -32,6 +33,7 @@ export interface PanelLayoutState { keepTab: (taskId: string, panelId: string, tabId: string) => void; setFocusedPanel: (taskId: string, panelId: string) => void; addTerminalTab: (taskId: string, panelId: string) => void; + addBrowserTab: (taskId: string, panelId: string) => void; splitPanel: ( taskId: string, tabId: string, @@ -56,6 +58,7 @@ export function usePanelLayoutState(taskId: string): PanelLayoutState { keepTab: state.keepTab, setFocusedPanel: state.setFocusedPanel, addTerminalTab: state.addTerminalTab, + addBrowserTab: state.addBrowserTab, splitPanel: state.splitPanel, draggingTabId: state.getLayout(taskId)?.draggingTabId ?? null, draggingTabPanelId: state.getLayout(taskId)?.draggingTabPanelId ?? null, @@ -114,6 +117,8 @@ export function useTabInjection( icon = ; } else if (tab.data.type === "terminal") { icon = ; + } else if (tab.data.type === "browser") { + icon = ; } else if (tab.data.type === "logs") { icon = ; } else if (tab.data.type === "action") { diff --git a/products/desktop/packages/ui/src/features/panels/panelLayoutStore.ts b/products/desktop/packages/ui/src/features/panels/panelLayoutStore.ts index c608c459236e..af44a916dddd 100644 --- a/products/desktop/packages/ui/src/features/panels/panelLayoutStore.ts +++ b/products/desktop/packages/ui/src/features/panels/panelLayoutStore.ts @@ -3,6 +3,7 @@ import { contentHash } from "@posthog/core/code-review/contentHash"; import { addRecentFile, addActionTab as coreAddActionTab, + addBrowserTab as coreAddBrowserTab, addTerminalTab as coreAddTerminalTab, closeOtherTabs as coreCloseOtherTabs, closeTab as coreCloseTab, @@ -14,6 +15,7 @@ import { openTabInSplit as coreOpenTabInSplit, reorderTabs as coreReorderTabs, setActiveTab as coreSetActiveTab, + updateBrowserTabUrl as coreUpdateBrowserTabUrl, updateSizes as coreUpdateSizes, updateTabLabel as coreUpdateTabLabel, updateTabMetadata as coreUpdateTabMetadata, @@ -123,6 +125,8 @@ interface PanelLayoutStore { updateTabLabel: (taskId: string, tabId: string, label: string) => void; setFocusedPanel: (taskId: string, panelId: string) => void; addTerminalTab: (taskId: string, panelId: string) => void; + addBrowserTab: (taskId: string, panelId: string) => void; + updateBrowserTabUrl: (taskId: string, tabId: string, url: string) => void; addActionTab: ( taskId: string, panelId: string, @@ -545,6 +549,32 @@ export const usePanelLayoutStore = createWithEqualityFn()( ); }, + addBrowserTab: (taskId, panelId) => { + set((state) => + updateTaskLayout( + state, + taskId, + (layout) => + coreAddBrowserTab(layout, panelId) as Partial, + ), + ); + }, + + updateBrowserTabUrl: (taskId, tabId, url) => { + set((state) => + updateTaskLayout( + state, + taskId, + (layout) => + coreUpdateBrowserTabUrl( + layout, + tabId, + url, + ) as Partial, + ), + ); + }, + addActionTab: (taskId, panelId, action) => { set((state) => updateTaskLayout( diff --git a/products/desktop/packages/ui/src/features/task-detail/components/TabContentRenderer.tsx b/products/desktop/packages/ui/src/features/task-detail/components/TabContentRenderer.tsx index b8bccac95b93..d399b91f5f67 100644 --- a/products/desktop/packages/ui/src/features/task-detail/components/TabContentRenderer.tsx +++ b/products/desktop/packages/ui/src/features/task-detail/components/TabContentRenderer.tsx @@ -5,6 +5,7 @@ import { LazyCloudReviewPage as CloudReviewPage, LazyReviewPage as ReviewPage, } from "../../code-review/components/LazyReviewPages"; +import { BrowserPanel } from "../../embedded-browser/BrowserPanel"; import type { Tab } from "../../panels/panelTypes"; import { PiSessionView } from "../../pi-sessions/PiSessionView"; import { PostHogObjectPage } from "../../posthog-objects/PostHogObjectPage"; @@ -45,6 +46,15 @@ export function TabContentRenderer({ ); + case "browser": + return ( + + ); + case "file": return ( Date: Wed, 2 Sep 2026 09:27:36 -0700 Subject: [PATCH 2/2] fix(desktop): mirror embedded browser slot inputs on commit, not in render useEmbeddedBrowserSlot wrote urlRef.current and visibleRef.current straight in the render body. React can discard or replay a render, so a value from a render that never commits could leak into the live native view. Both refs are only ever read from async callbacks (the rAF-scheduled bounds reporter and the .then() after open resolves), which always run after the commit that produced the value, so mirroring them in an effect keeps the existing behavior while making the write happen on commit only. Clears the two no-ref-current-in-render errors React Doctor reported. Generated-By: PostHog Desktop Task-Id: 1a7fb1f9-a18e-46ce-87f9-ffb6ad3400c9 --- .../src/features/embedded-browser/useEmbeddedBrowser.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/products/desktop/packages/ui/src/features/embedded-browser/useEmbeddedBrowser.ts b/products/desktop/packages/ui/src/features/embedded-browser/useEmbeddedBrowser.ts index d9f5698837be..cf9fc061f275 100644 --- a/products/desktop/packages/ui/src/features/embedded-browser/useEmbeddedBrowser.ts +++ b/products/desktop/packages/ui/src/features/embedded-browser/useEmbeddedBrowser.ts @@ -84,11 +84,16 @@ export function useEmbeddedBrowserSlot(input: { // effect. It tracks the persisted current URL as the user browses, and // re-running on that would tear down and reopen the live view mid-session. const urlRef = useRef(url); - urlRef.current = url; // Applied after open resolves, so a visibility change that raced the open // (user switched tabs while the first load was in flight) still lands. const visibleRef = useRef(visible); - visibleRef.current = visible; + // Mirrored on commit, never during render: React can discard or replay a + // render, and a value from one that never committed must not leak into the + // live view. Both are read from async callbacks, which always run later. + useEffect(() => { + urlRef.current = url; + visibleRef.current = visible; + }, [url, visible]); const hasUrl = url != null;

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 LvVLuKBmVyY_2#?- literal 0 HcmV?d00001 diff --git a/products/desktop/docs/images/embedded-browser/02-story-fresh-tab.png b/products/desktop/docs/images/embedded-browser/02-story-fresh-tab.png new file mode 100644 index 0000000000000000000000000000000000000000..8a71455ce6ccd44ae8dc7e6656b65e3b3f631fd2 GIT binary patch literal 16799 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 literal 0 HcmV?d00001 diff --git a/products/desktop/docs/images/embedded-browser/03-story-page-open.png b/products/desktop/docs/images/embedded-browser/03-story-page-open.png new file mode 100644 index 0000000000000000000000000000000000000000..d6826c74e918603b87bb360622cda2b67590e3c7 GIT binary patch literal 6307 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%0DD7P~k^^XGRA`{aI{Vf#}u^Yf*UTZ=sIispj{ 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 { + bind(EMBEDDED_BROWSER_SERVICE).to(EmbeddedBrowserService).inSingletonScope(); +}); diff --git a/products/desktop/packages/core/src/embedded-browser/embeddedBrowser.test.ts b/products/desktop/packages/core/src/embedded-browser/embeddedBrowser.test.ts new file mode 100644 index 000000000000..e462cbfa419f --- /dev/null +++ b/products/desktop/packages/core/src/embedded-browser/embeddedBrowser.test.ts @@ -0,0 +1,79 @@ +import type { IEmbeddedBrowser } from "@posthog/platform/embedded-browser"; +import { beforeEach, describe, expect, it, vi } from "vitest"; +import { EmbeddedBrowserService } from "./embeddedBrowser"; + +function fakeBrowser(): IEmbeddedBrowser { + return { + create: vi.fn().mockResolvedValue(undefined), + navigate: vi.fn().mockResolvedValue(undefined), + goBack: vi.fn(), + goForward: vi.fn(), + reload: vi.fn(), + setBounds: vi.fn(), + setVisible: vi.fn(), + openDevTools: vi.fn(), + destroy: vi.fn().mockResolvedValue(undefined), + getPageState: vi.fn().mockReturnValue(null), + events: vi.fn(), + }; +} + +const bounds = { x: 0, y: 0, width: 800, height: 600 }; + +describe("EmbeddedBrowserService", () => { + let browser: IEmbeddedBrowser; + let service: EmbeddedBrowserService; + + beforeEach(() => { + browser = fakeBrowser(); + service = new EmbeddedBrowserService(browser); + }); + + it("normalizes the URL before opening", async () => { + await service.open({ viewId: "v1", url: "localhost:8000", bounds }); + expect(browser.create).toHaveBeenCalledWith({ + viewId: "v1", + url: "http://localhost:8000/", + bounds, + }); + }); + + it.each(["file:///etc/passwd", "javascript:alert(1)", "not a url"])( + "refuses to open %s", + async (url) => { + await expect(service.open({ viewId: "v1", url, bounds })).rejects.toThrow( + /not a loadable web url/i, + ); + expect(browser.create).not.toHaveBeenCalled(); + }, + ); + + it("normalizes the URL before navigating", async () => { + await service.navigate("v1", "posthog.com"); + expect(browser.navigate).toHaveBeenCalledWith("v1", "https://posthog.com/"); + }); + + it("refuses to navigate to a non-web URL", async () => { + await expect(service.navigate("v1", "file:///x")).rejects.toThrow( + /not a loadable web url/i, + ); + expect(browser.navigate).not.toHaveBeenCalled(); + }); + + it("forwards view lifecycle calls untouched", async () => { + service.goBack("v1"); + service.goForward("v1"); + service.reload("v1"); + service.setBounds("v1", bounds); + service.setVisible("v1", false); + service.openDevTools("v1"); + await service.destroy("v1"); + expect(browser.goBack).toHaveBeenCalledWith("v1"); + expect(browser.goForward).toHaveBeenCalledWith("v1"); + expect(browser.reload).toHaveBeenCalledWith("v1"); + expect(browser.setBounds).toHaveBeenCalledWith("v1", bounds); + expect(browser.setVisible).toHaveBeenCalledWith("v1", false); + expect(browser.openDevTools).toHaveBeenCalledWith("v1"); + expect(browser.destroy).toHaveBeenCalledWith("v1"); + }); +}); diff --git a/products/desktop/packages/core/src/embedded-browser/embeddedBrowser.ts b/products/desktop/packages/core/src/embedded-browser/embeddedBrowser.ts new file mode 100644 index 000000000000..feffa0a937aa --- /dev/null +++ b/products/desktop/packages/core/src/embedded-browser/embeddedBrowser.ts @@ -0,0 +1,99 @@ +import { + EMBEDDED_BROWSER, + type EmbeddedBrowserBounds, + type EmbeddedBrowserEvent, + type EmbeddedBrowserPageState, + type IEmbeddedBrowser, +} from "@posthog/platform/embedded-browser"; +import { inject, injectable } from "inversify"; +import { normalizeBrowserUrl } from "./normalizeUrl"; + +export interface IEmbeddedBrowserService { + open(input: { + viewId: string; + url: string; + bounds: EmbeddedBrowserBounds; + }): Promise; + navigate(viewId: string, url: string): Promise; + goBack(viewId: string): void; + goForward(viewId: string): void; + reload(viewId: string): void; + setBounds(viewId: string, bounds: EmbeddedBrowserBounds): void; + setVisible(viewId: string, visible: boolean): void; + openDevTools(viewId: string): void; + destroy(viewId: string): Promise; + getPageState(viewId: string): EmbeddedBrowserPageState | null; + events(signal?: AbortSignal): AsyncIterable; +} + +/** + * Policy layer over the host's embedded browser: every URL that reaches the + * native view passes http(s) validation here, so no caller — UI, router, or + * future automation — can point the view at file:, javascript:, or custom + * schemes. The host adapter enforces the same rule for page-initiated + * navigations (defense in depth). + */ +@injectable() +export class EmbeddedBrowserService implements IEmbeddedBrowserService { + constructor( + @inject(EMBEDDED_BROWSER) private readonly browser: IEmbeddedBrowser, + ) {} + + async open(input: { + viewId: string; + url: string; + bounds: EmbeddedBrowserBounds; + }): Promise { + await this.browser.create({ + viewId: input.viewId, + url: this.assertWebUrl(input.url), + bounds: input.bounds, + }); + } + + async navigate(viewId: string, url: string): Promise { + await this.browser.navigate(viewId, this.assertWebUrl(url)); + } + + goBack(viewId: string): void { + this.browser.goBack(viewId); + } + + goForward(viewId: string): void { + this.browser.goForward(viewId); + } + + reload(viewId: string): void { + this.browser.reload(viewId); + } + + setBounds(viewId: string, bounds: EmbeddedBrowserBounds): void { + this.browser.setBounds(viewId, bounds); + } + + setVisible(viewId: string, visible: boolean): void { + this.browser.setVisible(viewId, visible); + } + + openDevTools(viewId: string): void { + this.browser.openDevTools(viewId); + } + + async destroy(viewId: string): Promise { + await this.browser.destroy(viewId); + } + + getPageState(viewId: string): EmbeddedBrowserPageState | null { + return this.browser.getPageState(viewId); + } + + events(signal?: AbortSignal): AsyncIterable { + return this.browser.events(signal); + } + + private assertWebUrl(raw: string): string { + const normalized = normalizeBrowserUrl(raw); + if (!normalized) throw new Error(`Not a loadable web URL: ${raw}`); + return normalized; + } +} diff --git a/products/desktop/packages/core/src/embedded-browser/identifiers.ts b/products/desktop/packages/core/src/embedded-browser/identifiers.ts new file mode 100644 index 000000000000..efa8dbf8880d --- /dev/null +++ b/products/desktop/packages/core/src/embedded-browser/identifiers.ts @@ -0,0 +1,3 @@ +export const EMBEDDED_BROWSER_SERVICE = Symbol.for( + "posthog.embedded-browser.service", +); diff --git a/products/desktop/packages/core/src/embedded-browser/normalizeUrl.test.ts b/products/desktop/packages/core/src/embedded-browser/normalizeUrl.test.ts new file mode 100644 index 000000000000..75481ccd4a36 --- /dev/null +++ b/products/desktop/packages/core/src/embedded-browser/normalizeUrl.test.ts @@ -0,0 +1,39 @@ +import { describe, expect, it } from "vitest"; +import { normalizeBrowserUrl } from "./normalizeUrl"; + +describe("normalizeBrowserUrl", () => { + it.each([ + // already-complete web URLs pass through + ["https://posthog.com", "https://posthog.com/"], + ["http://example.com/a?b=1#c", "http://example.com/a?b=1#c"], + // bare domains get https + ["posthog.com", "https://posthog.com/"], + ["app.example.com/login", "https://app.example.com/login"], + // local dev hosts get http — dev servers rarely terminate TLS + ["localhost:8000", "http://localhost:8000/"], + ["localhost:3000/app", "http://localhost:3000/app"], + ["127.0.0.1:8010", "http://127.0.0.1:8010/"], + ["localhost", "http://localhost/"], + // surrounding whitespace is tolerated + [" posthog.com ", "https://posthog.com/"], + ])("%s → %s", (input, expected) => { + expect(normalizeBrowserUrl(input)).toBe(expected); + }); + + it.each([ + // non-web schemes are rejected outright, never scheme-prefixed + "file:///etc/passwd", + "javascript:alert(1)", + "mailto:user@example.com", + "chrome://settings", + "about:blank", + "data:text/html,hi", + // not URLs at all + "", + " ", + "not a url", + "https://", + ])("rejects %s", (input) => { + expect(normalizeBrowserUrl(input)).toBeNull(); + }); +}); diff --git a/products/desktop/packages/core/src/embedded-browser/normalizeUrl.ts b/products/desktop/packages/core/src/embedded-browser/normalizeUrl.ts new file mode 100644 index 000000000000..6488550e3c2b --- /dev/null +++ b/products/desktop/packages/core/src/embedded-browser/normalizeUrl.ts @@ -0,0 +1,49 @@ +/** Hosts whose dev servers almost never terminate TLS — default them to http. */ +const LOCAL_HOSTS = new Set(["localhost", "127.0.0.1", "0.0.0.0", "[::1]"]); + +function parseWebUrl(raw: string): string | null { + let url: URL; + try { + url = new URL(raw); + } catch { + return null; + } + if (url.protocol !== "http:" && url.protocol !== "https:") return null; + if (!url.hostname) return null; + return url.href; +} + +/** + * "localhost:8000" parses as a URL with the scheme "localhost", so a plain + * scheme check would misread host:port shorthand as a custom scheme. A real + * non-web scheme (javascript:, file:, mailto:) never continues with a bare + * port number. + */ +function hasNonWebScheme(input: string): boolean { + const match = input.match(/^([a-zA-Z][a-zA-Z0-9+.-]*):(.*)$/); + if (!match) return false; + const scheme = match[1].toLowerCase(); + if (scheme === "http" || scheme === "https") return false; + return !/^\d+([/?#].*)?$/.test(match[2]); +} + +/** + * Normalize user-typed input into a loadable http(s) URL, or null when it + * cannot be one. This is the single URL policy for the embedded browser: + * anything the native view loads must pass through here first. + */ +export function normalizeBrowserUrl(input: string): string | null { + const trimmed = input.trim(); + if (!trimmed || /\s/.test(trimmed)) return null; + if (hasNonWebScheme(trimmed)) return null; + + const direct = parseWebUrl(trimmed); + if (direct) return direct; + // Claimed a scheme but didn't parse to a valid web URL ("https://") — + // prefixing another scheme onto it would fabricate a bogus host. + if (/^[a-zA-Z][a-zA-Z0-9+.-]*:\/\//.test(trimmed)) return null; + + const host = trimmed.split(/[/:?#]/, 1)[0]?.toLowerCase() ?? ""; + const scheme = LOCAL_HOSTS.has(host) ? "http" : "https"; + return parseWebUrl(`${scheme}://${trimmed}`); +} diff --git a/products/desktop/packages/core/src/embedded-browser/schemas.ts b/products/desktop/packages/core/src/embedded-browser/schemas.ts new file mode 100644 index 000000000000..c5ffae601653 --- /dev/null +++ b/products/desktop/packages/core/src/embedded-browser/schemas.ts @@ -0,0 +1,42 @@ +import { z } from "zod"; + +export const embeddedBrowserBoundsSchema = z.object({ + x: z.number(), + y: z.number(), + width: z.number().nonnegative(), + height: z.number().nonnegative(), +}); + +export const openEmbeddedBrowserInput = z.object({ + viewId: z.string().min(1), + url: z.string().min(1), + bounds: embeddedBrowserBoundsSchema, +}); + +export const navigateEmbeddedBrowserInput = z.object({ + viewId: z.string().min(1), + url: z.string().min(1), +}); + +export const embeddedBrowserViewIdInput = z.object({ + viewId: z.string().min(1), +}); + +export const setEmbeddedBrowserBoundsInput = z.object({ + viewId: z.string().min(1), + bounds: embeddedBrowserBoundsSchema, +}); + +export const setEmbeddedBrowserVisibleInput = z.object({ + viewId: z.string().min(1), + visible: z.boolean(), +}); + +export const embeddedBrowserPageStateSchema = z.object({ + viewId: z.string(), + url: z.string(), + title: z.string(), + canGoBack: z.boolean(), + canGoForward: z.boolean(), + isLoading: z.boolean(), +}); diff --git a/products/desktop/packages/core/src/panels/panelLayoutTransforms.test.ts b/products/desktop/packages/core/src/panels/panelLayoutTransforms.test.ts index a7a2c3a2cdab..28678b7af70f 100644 --- a/products/desktop/packages/core/src/panels/panelLayoutTransforms.test.ts +++ b/products/desktop/packages/core/src/panels/panelLayoutTransforms.test.ts @@ -1,9 +1,11 @@ import { beforeEach, describe, expect, it } from "vitest"; import { + addBrowserTab, addRecentFile, closeTab, createInitialTaskLayout, openTab, + updateBrowserTabUrl, } from "./panelLayoutTransforms"; import { createFileTabId, resetPanelIdCounter } from "./panelStoreHelpers"; import { findTabInTree } from "./panelTree"; @@ -75,6 +77,67 @@ describe("panelLayoutTransforms", () => { }); }); + describe("addBrowserTab", () => { + it("adds an empty-url browser tab and activates it", () => { + const layout = createInitialTaskLayout(); + const added = applyUpdates(layout, addBrowserTab(layout, "main-panel")); + + expect(added.panelTree.type).toBe("leaf"); + if (added.panelTree.type !== "leaf") return; + const tab = added.panelTree.content.tabs.at(-1); + expect(tab?.data).toEqual({ + type: "browser", + browserId: tab?.id, + url: "", + }); + expect(tab?.closeable).toBe(true); + expect(added.panelTree.content.activeTabId).toBe(tab?.id); + }); + + it("does nothing for an unknown panel", () => { + const layout = createInitialTaskLayout(); + const result = applyUpdates(layout, addBrowserTab(layout, "nope")); + expect(result.panelTree).toEqual(layout.panelTree); + }); + }); + + describe("updateBrowserTabUrl", () => { + it("persists the current page into the tab data", () => { + const layout = createInitialTaskLayout(); + const added = applyUpdates(layout, addBrowserTab(layout, "main-panel")); + const tabId = + added.panelTree.type === "leaf" + ? (added.panelTree.content.tabs.at(-1)?.id ?? "") + : ""; + + const updated = applyUpdates( + added, + updateBrowserTabUrl(added, tabId, "http://localhost:8000/app"), + ); + const tab = findTabInTree(updated.panelTree, tabId)?.tab; + expect(tab?.data).toEqual({ + type: "browser", + browserId: tabId, + url: "http://localhost:8000/app", + }); + }); + + it("ignores unknown tabs and non-browser tabs", () => { + const layout = createInitialTaskLayout(); + expect(updateBrowserTabUrl(layout, "nope", "https://x.example")).toEqual( + {}, + ); + // "logs" exists but is not a browser tab — its data must not change. + const updated = applyUpdates( + layout, + updateBrowserTabUrl(layout, "logs", "https://x.example"), + ); + expect(findTabInTree(updated.panelTree, "logs")?.tab.data).toEqual({ + type: "logs", + }); + }); + }); + describe("addRecentFile", () => { it("dedupes and prepends, capping at the max", () => { const result = addRecentFile(["b", "a"], "a"); diff --git a/products/desktop/packages/core/src/panels/panelLayoutTransforms.ts b/products/desktop/packages/core/src/panels/panelLayoutTransforms.ts index 361b32b41ffa..eed56819a8b6 100644 --- a/products/desktop/packages/core/src/panels/panelLayoutTransforms.ts +++ b/products/desktop/packages/core/src/panels/panelLayoutTransforms.ts @@ -730,6 +730,59 @@ export function addTerminalTab( return { panelTree: updatedTree }; } +export function addBrowserTab( + layout: TaskLayout, + panelId: string, +): Partial { + const tabId = `browser-${Date.now()}`; + const updatedTree = updateTreeNode(layout.panelTree, panelId, (panel) => { + if (panel.type !== "leaf") return panel; + return addTabToPanel(panel, { + id: tabId, + label: "Browser", + // url starts empty: the panel shows a URL prompt and fills this in on + // the first navigation, so the tab restores to that page next launch. + data: { type: "browser", browserId: tabId, url: "" }, + component: null, + draggable: true, + closeable: true, + }); + }); + + return { panelTree: updatedTree }; +} + +/** Persist a browser tab's current page so a reopen/restart restores it. */ +export function updateBrowserTabUrl( + layout: TaskLayout, + tabId: string, + url: string, +): Partial { + const tabLocation = findTabInTree(layout.panelTree, tabId); + if (!tabLocation) return {}; + + const updatedTree = updateTreeNode( + layout.panelTree, + tabLocation.panelId, + (panel) => { + if (panel.type !== "leaf") return panel; + + const updatedTabs = panel.content.tabs.map((tab) => + tab.id === tabId && tab.data.type === "browser" + ? { ...tab, data: { ...tab.data, url } } + : tab, + ); + + return { + ...panel, + content: { ...panel.content, tabs: updatedTabs }, + }; + }, + ); + + return { panelTree: updatedTree }; +} + export function addActionTab( layout: TaskLayout, panelId: string, diff --git a/products/desktop/packages/core/src/panels/panelTypes.ts b/products/desktop/packages/core/src/panels/panelTypes.ts index ded6fe1b349a..1ce707356f92 100644 --- a/products/desktop/packages/core/src/panels/panelTypes.ts +++ b/products/desktop/packages/core/src/panels/panelTypes.ts @@ -14,6 +14,11 @@ export type TabData = terminalId: string; cwd: string; } + | { + type: "browser"; + browserId: string; + url: string; + } | { type: "action"; actionId: string; diff --git a/products/desktop/packages/host-router/src/router.ts b/products/desktop/packages/host-router/src/router.ts index 06fd5b661516..dc551e71dd17 100644 --- a/products/desktop/packages/host-router/src/router.ts +++ b/products/desktop/packages/host-router/src/router.ts @@ -15,6 +15,7 @@ import { contextMenuRouter } from "./routers/context-menu.router"; import { dashboardsRouter } from "./routers/dashboards.router"; import { deepLinkRouter } from "./routers/deep-link.router"; import { diskCacheRouter } from "./routers/disk-cache.router"; +import { embeddedBrowserRouter } from "./routers/embedded-browser.router"; import { enrichmentRouter } from "./routers/enrichment.router"; import { environmentRouter } from "./routers/environment.router"; import { externalAppsRouter } from "./routers/external-apps.router"; @@ -69,6 +70,7 @@ export const hostRouter = router({ deepLink: deepLinkRouter, diskCache: diskCacheRouter, enrichment: enrichmentRouter, + embeddedBrowser: embeddedBrowserRouter, environment: environmentRouter, externalApps: externalAppsRouter, fileWatcher: fileWatcherRouter, diff --git a/products/desktop/packages/host-router/src/routers/embedded-browser.router.ts b/products/desktop/packages/host-router/src/routers/embedded-browser.router.ts new file mode 100644 index 000000000000..35e48eee9407 --- /dev/null +++ b/products/desktop/packages/host-router/src/routers/embedded-browser.router.ts @@ -0,0 +1,72 @@ +import type { IEmbeddedBrowserService } from "@posthog/core/embedded-browser/embeddedBrowser"; +import { EMBEDDED_BROWSER_SERVICE } from "@posthog/core/embedded-browser/identifiers"; +import { + embeddedBrowserPageStateSchema, + embeddedBrowserViewIdInput, + navigateEmbeddedBrowserInput, + openEmbeddedBrowserInput, + setEmbeddedBrowserBoundsInput, + setEmbeddedBrowserVisibleInput, +} from "@posthog/core/embedded-browser/schemas"; +import type { ServiceResolver } from "@posthog/host-trpc/context"; +import { publicProcedure, router } from "@posthog/host-trpc/trpc"; + +const svc = (container: ServiceResolver) => + container.get(EMBEDDED_BROWSER_SERVICE); + +export const embeddedBrowserRouter = router({ + open: publicProcedure + .input(openEmbeddedBrowserInput) + .mutation(({ ctx, input }) => svc(ctx.container).open(input)), + + navigate: publicProcedure + .input(navigateEmbeddedBrowserInput) + .mutation(({ ctx, input }) => + svc(ctx.container).navigate(input.viewId, input.url), + ), + + goBack: publicProcedure + .input(embeddedBrowserViewIdInput) + .mutation(({ ctx, input }) => svc(ctx.container).goBack(input.viewId)), + + goForward: publicProcedure + .input(embeddedBrowserViewIdInput) + .mutation(({ ctx, input }) => svc(ctx.container).goForward(input.viewId)), + + reload: publicProcedure + .input(embeddedBrowserViewIdInput) + .mutation(({ ctx, input }) => svc(ctx.container).reload(input.viewId)), + + setBounds: publicProcedure + .input(setEmbeddedBrowserBoundsInput) + .mutation(({ ctx, input }) => + svc(ctx.container).setBounds(input.viewId, input.bounds), + ), + + setVisible: publicProcedure + .input(setEmbeddedBrowserVisibleInput) + .mutation(({ ctx, input }) => + svc(ctx.container).setVisible(input.viewId, input.visible), + ), + + openDevTools: publicProcedure + .input(embeddedBrowserViewIdInput) + .mutation(({ ctx, input }) => + svc(ctx.container).openDevTools(input.viewId), + ), + + destroy: publicProcedure + .input(embeddedBrowserViewIdInput) + .mutation(({ ctx, input }) => svc(ctx.container).destroy(input.viewId)), + + getPageState: publicProcedure + .input(embeddedBrowserViewIdInput) + .output(embeddedBrowserPageStateSchema.nullable()) + .query(({ ctx, input }) => svc(ctx.container).getPageState(input.viewId)), + + onEvents: publicProcedure.subscription(async function* (opts) { + for await (const event of svc(opts.ctx.container).events(opts.signal)) { + yield event; + } + }), +}); diff --git a/products/desktop/packages/platform/package.json b/products/desktop/packages/platform/package.json index 7f5b6ff85a36..30dc3a05e484 100644 --- a/products/desktop/packages/platform/package.json +++ b/products/desktop/packages/platform/package.json @@ -103,6 +103,10 @@ "./disk-cache": { "types": "./dist/disk-cache.d.ts", "import": "./dist/disk-cache.js" + }, + "./embedded-browser": { + "types": "./dist/embedded-browser.d.ts", + "import": "./dist/embedded-browser.js" } }, "scripts": { diff --git a/products/desktop/packages/platform/src/embedded-browser.ts b/products/desktop/packages/platform/src/embedded-browser.ts new file mode 100644 index 000000000000..3533c849f48c --- /dev/null +++ b/products/desktop/packages/platform/src/embedded-browser.ts @@ -0,0 +1,62 @@ +/** + * A live embedded browser surface the host paints natively above the shared + * UI. The renderer owns placement (bounds, visibility) and navigation intent; + * the host owns the actual web view, its session, and its security posture. + * + * Everything crossing this interface is display-ready navigation data — URLs, + * titles, loading flags. Nothing from the embedded page's content crosses it. + */ + +export interface EmbeddedBrowserBounds { + x: number; + y: number; + width: number; + height: number; +} + +export interface EmbeddedBrowserCreateOptions { + viewId: string; + url: string; + /** CSS pixels relative to the host window's web contents. */ + bounds: EmbeddedBrowserBounds; +} + +export interface EmbeddedBrowserPageState { + viewId: string; + url: string; + title: string; + canGoBack: boolean; + canGoForward: boolean; + isLoading: boolean; +} + +export type EmbeddedBrowserEvent = + | { type: "page-state"; state: EmbeddedBrowserPageState } + | { + type: "load-failed"; + viewId: string; + url: string; + errorDescription: string; + } + | { type: "view-destroyed"; viewId: string }; + +export interface IEmbeddedBrowser { + /** + * Create the view, or re-attach an existing one (a tab the user switched + * back to). Re-attaching must never re-navigate: the caller's URL is a + * persisted snapshot that lags the live page. + */ + create(options: EmbeddedBrowserCreateOptions): Promise; + navigate(viewId: string, url: string): Promise; + goBack(viewId: string): void; + goForward(viewId: string): void; + reload(viewId: string): void; + setBounds(viewId: string, bounds: EmbeddedBrowserBounds): void; + setVisible(viewId: string, visible: boolean): void; + openDevTools(viewId: string): void; + destroy(viewId: string): Promise; + getPageState(viewId: string): EmbeddedBrowserPageState | null; + events(signal?: AbortSignal): AsyncIterable; +} + +export const EMBEDDED_BROWSER = Symbol.for("posthog.platform.embeddedBrowser"); diff --git a/products/desktop/packages/platform/src/host-capabilities.ts b/products/desktop/packages/platform/src/host-capabilities.ts index a65a05bb9fcf..108a09fce2dd 100644 --- a/products/desktop/packages/platform/src/host-capabilities.ts +++ b/products/desktop/packages/platform/src/host-capabilities.ts @@ -11,6 +11,12 @@ export interface HostCapabilities { * (connected-GitHub-org) repositories and cloud workspaces. */ readonly localWorkspaces: boolean; + /** + * Whether the host can paint a live embedded browser view (a native web + * view layered over the shared UI). Desktop (Electron) can; the web and + * mobile hosts cannot, so the UI hides the browser panel entirely. + */ + readonly embeddedBrowser: boolean; } export const HOST_CAPABILITIES = Symbol.for( diff --git a/products/desktop/packages/platform/tsup.config.ts b/products/desktop/packages/platform/tsup.config.ts index 05315800e4e8..34b929b6c940 100644 --- a/products/desktop/packages/platform/tsup.config.ts +++ b/products/desktop/packages/platform/tsup.config.ts @@ -27,6 +27,7 @@ export default defineConfig({ "src/app-metrics.ts", "src/dev-host-actions.ts", "src/disk-cache.ts", + "src/embedded-browser.ts", ], format: ["esm"], dts: true, diff --git a/products/desktop/packages/ui/src/features/embedded-browser/BrowserPanel.stories.tsx b/products/desktop/packages/ui/src/features/embedded-browser/BrowserPanel.stories.tsx new file mode 100644 index 000000000000..ac345addf711 --- /dev/null +++ b/products/desktop/packages/ui/src/features/embedded-browser/BrowserPanel.stories.tsx @@ -0,0 +1,73 @@ +import type { Meta, StoryObj } from "@storybook/react-vite"; +import { BrowserPanelChrome } from "./BrowserPanel"; +import type { EmbeddedBrowserPageState } from "./useEmbeddedBrowser"; + +function pageState( + overrides: Partial = {}, +): EmbeddedBrowserPageState { + return { + viewId: "task-browser:t1:browser-1", + url: "http://localhost:3000/", + title: "My app", + canGoBack: true, + canGoForward: false, + isLoading: false, + ...overrides, + }; +} + +const meta = { + title: "Embedded Browser/BrowserPanelChrome", + component: BrowserPanelChrome, + decorators: [ + (Story) => ( +