/** * Install bundled Chrome extension artifacts into {resolveBinDir()}/browser-ext/. * Fixed path — gateway upgrades overwrite in place so Chrome sideload paths stay stable. */ export declare const BROWSER_EXT_REQUIRED_FILES: readonly ["manifest.json", "popup.html", "dist/background.js", "dist/content.js", "dist/popup.js"]; export type BrowserExtBundledFrom = 'npm-dist' | 'git-dev' | 'electron-asar' | 'env-override'; export interface BrowserExtInstallMeta { xopcVersion: string; manifestVersion: string; source: 'bundled'; bundledFrom: BrowserExtBundledFrom; installedAt: string; installPath: string; } export interface BrowserExtDoctor { bundledAvailable: boolean; installed: boolean; xopcVersion: string; installedVersion?: string; manifestVersion?: string; extensionDir?: string; cacheDir: string; needsRefresh: boolean; needsChromeReload?: boolean; bundledFrom?: BrowserExtBundledFrom; runtimeExtensionVersion?: string; } export interface EnsureBrowserExtResult { extensionDir: string; xopcVersion: string; copied: boolean; } /** Validate a directory contains a loadable extension tree. */ export declare function validateBrowserExtLayout(dir: string): boolean; /** Resolve the installed extension directory (fixed `browser-ext/` root). */ export declare function resolveInstalledExtensionPath(cacheDir: string, _meta: BrowserExtInstallMeta | null): string | null; /** * Resolve the bundled extension source directory (read-only). */ export declare function resolveBundledBrowserExtDir(): Promise<{ dir: string; bundledFrom: BrowserExtBundledFrom; } | null>; export declare function computeNeedsRefresh(params: { force?: boolean; bundledManifestVersion: string; installedPath: string | null; meta: BrowserExtInstallMeta | null; }): boolean; export declare function browserExtDoctor(opts?: { cacheDir?: string; runtimeExtensionVersion?: string; }): Promise; export declare function ensureBrowserExtensionArtifacts(opts?: { force?: boolean; cacheDir?: string; }): Promise; /** Gateway startup hook: ensure extension artifacts for the fixed extension backend. */ export declare function ensureBrowserExtensionOnStartup(_config: unknown): Promise; export declare function readInstalledExtensionDir(cacheDir?: string): Promise; export type BrowserExtensionOpenAction = 'chrome' | 'folder' | 'both'; type ExtensionManagerBrowser = 'chrome' | 'edge'; interface ExtensionManagerTarget { browser: ExtensionManagerBrowser; executablePath: string; url: string; } export declare function resolveWindowsExtensionManager(env?: NodeJS.ProcessEnv): ExtensionManagerTarget | null; /** * Open the compatible browser's extension manager and/or reveal the installed extension folder * on the gateway host. */ export declare function openBrowserExtensionInstallUi(opts: { action: BrowserExtensionOpenAction; cacheDir?: string; }): Promise<{ extensionDir: string; browser?: ExtensionManagerBrowser; }>; export {};