{"record":{"id":"cd72d998d078e887","repo":"different-ai/openwork","slug":"browser-provider-is-not-available-yet-requested","errorCode":null,"errorMessage":"Browser provider is not available yet: ${requestedProvider}","messagePattern":"Browser provider is not available yet: (.+?)","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"apps/desktop/electron/browser-panel.mjs","lineNumber":153,"sourceCode":"    const deadline = Date.now() + BROWSER_TARGET_RESOLVE_TIMEOUT_MS;\n    while (Date.now() < deadline) {\n      const targets = await listCdpTargets().catch(() => []);\n      const target = targets.find((candidate) => (\n        candidate?.type === \"page\" &&\n        typeof candidate.id === \"string\" &&\n        typeof candidate.url === \"string\" &&\n        candidate.url.includes(marker)\n      ));\n      if (target?.id) return target.id;\n      await new Promise((resolve) => setTimeout(resolve, BROWSER_TARGET_RESOLVE_INTERVAL_MS));\n    }\n    throw new Error(\"Could not resolve built-in browser CDP target.\");\n  }\n\n  async function openBrowserUrlForAutomation(rawUrl, provider = \"auto\") {\n    const requestedProvider = String(provider || \"auto\").trim().toLowerCase();\n    if (requestedProvider && requestedProvider !== \"auto\" && requestedProvider !== \"builtin\") {\n      throw new Error(`Browser provider is not available yet: ${requestedProvider}`);\n    }\n    const url = normalizeBrowserUrl(rawUrl);\n    const tab = createBrowserTab(\"about:blank\", { select: true });\n    await tab.view.webContents.loadURL(browserTargetMarkerUrl(tab.tabId));\n    const targetId = await resolveBrowserCdpTargetId(tab.tabId);\n    await tab.view.webContents.loadURL(url);\n    return {\n      provider: \"builtin\",\n      browser_url: cdpBrowserUrl(),\n      target_id: targetId,\n      tab_id: tab.tabId,\n      url,\n    };\n  }\n\n  function getBrowserTab(tabId = activeBrowserTabId) {\n    return tabId ? browserTabs.get(tabId) ?? null : null;\n  }","sourceCodeStart":135,"sourceCodeEnd":171,"githubUrl":"https://github.com/different-ai/openwork/blob/2b7df46e8ae1517d64c896c7793d2d52ec845669/apps/desktop/electron/browser-panel.mjs#L135-L171","documentation":"openBrowserUrlForAutomation only accepts provider values 'auto' or 'builtin' (after trim/lowercase). Any other non-empty provider string throws this error because alternate browser providers are not implemented in this build.","triggerScenarios":"Calling the browser automation API with provider set to something like 'chrome', 'external', 'system', or a typo such as 'BuiltIn' spelled differently after normalization (e.g. 'built-in').","commonSituations":"Passing a provider name copied from docs for a future/planned provider; typos like 'built_in'; callers hardcoding a provider that an older/newer build expects but this one rejects.","solutions":["Omit the provider argument (defaults to 'auto')","Pass provider: 'builtin' explicitly","Fix the provider string casing/spelling so it normalizes to 'auto' or 'builtin'","Remove third-party provider selection — it is not supported yet in this build"],"exampleFix":"// before\nawait openBrowserUrlForAutomation(url, { provider: 'chrome' });\n// after\nawait openBrowserUrlForAutomation(url, { provider: 'builtin' });","handlingStrategy":"validation","validationCode":"const ALLOWED = new Set(['auto', 'builtin']);\nif (provider && !ALLOWED.has(String(provider).trim().toLowerCase())) {\n  throw new Error(`provider must be 'auto' or 'builtin', got ${provider}`);\n}","typeGuard":"function isBrowserProvider(v) { return typeof v === 'string' && ['auto','builtin'].includes(v.trim().toLowerCase()); }","tryCatchPattern":"try {\n  await openBrowserUrlForAutomation(url, { provider });\n} catch (e) {\n  if (e.message.startsWith('Browser provider is not available yet')) {\n    // fall back to default provider (omit the option)\n    await openBrowserUrlForAutomation(url);\n  } else throw e;\n}","preventionTips":["Omit provider unless you specifically need 'builtin'","Normalize case/underscores before passing provider values","Only use provider names documented for your app version","Add client-side validation against the allowed set"],"tags":["validation","unsupported-feature","browser-automation"],"backgroundTag":"unsupported-provider-value","analyzedSha":"2b7df46e8ae1517d64c896c7793d2d52ec845669","analyzedAt":"2026-09-01T07:59:23.713Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}