{"record":{"id":"0b20c624cbe19146","repo":"mastra-ai/mastra","slug":"screencast-not-supported-by-this-provider","errorCode":null,"errorMessage":"Screencast not supported by this provider","messagePattern":"Screencast not supported by this provider","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/core/src/browser/browser.ts","lineNumber":1354,"sourceCode":"  }\n\n  /**\n   * Get the browser scope mode.\n   * @returns The scope from threadManager or config, defaults to 'shared'\n   */\n  getScope(): BrowserScope {\n    return this.threadManager?.getScope() ?? this.config.scope ?? 'shared';\n  }\n\n  // ---------------------------------------------------------------------------\n  // Screencast (optional - for Studio live view)\n  // ---------------------------------------------------------------------------\n\n  /**\n   * Start screencast streaming. Override in subclass if supported.\n   */\n  async startScreencast(_options?: ScreencastOptions): Promise<ScreencastStream> {\n    throw new Error('Screencast not supported by this provider');\n  }\n\n  /**\n   * Check if a thread has an existing browser session.\n   * Used by startScreencastIfBrowserActive to prevent showing another thread's page.\n   *\n   * If threadManager is set, delegates to it. Otherwise returns true (no isolation).\n   * Subclasses can override for custom behavior.\n   *\n   * @returns true if session exists or thread isolation is not used\n   */\n  hasThreadSession(threadId: string): boolean {\n    if (!this.threadManager) {\n      // No thread manager - all threads share the same session\n      return true;\n    }\n\n    const scope = this.threadManager.getScope();","sourceCodeStart":1336,"sourceCodeEnd":1372,"githubUrl":"https://github.com/mastra-ai/mastra/blob/75dd419e613fe9c39f846ffc500716141b74fda6/packages/core/src/browser/browser.ts#L1336-L1372","documentation":"startScreencast is another capability stub on the base MastraBrowser. Providers that can stream frames (e.g. via CDP Page.startScreencast) override it; the default always throws. Like connectToExternalCdp, screencast is per-provider opt-in.","triggerScenarios":"Calling browser.startScreencast(options) on a provider subclass that does not implement screencast streaming.","commonSituations":"Building a UI that live-previews agent browsing sessions but running against a provider that only supports launching/automation; switching providers without auditing feature parity.","solutions":["Switch to a provider that overrides startScreencast (e.g. the CDP-capable provider).","Gate the feature at runtime on provider capability before calling.","Implement screencast in a custom provider subclass.","Use screenshots (captureScreenshot) as a lower-tech fallback."],"exampleFix":"// before\nconst stream = await baseProvider.startScreencast({ threadId }); // throws\n// after\nif (providerSupportsScreencast(browser)) {\n  const stream = await browser.startScreencast({ threadId });\n}","handlingStrategy":"fallback","validationCode":"if (browser.startScreencast === MastraBrowser.prototype.startScreencast) {\n  console.warn('Screencast unavailable for provider', browser.provider);\n  return null;\n}","typeGuard":"function supportsScreencast(b: object): boolean {\n  return b.startScreencast !== MastraBrowser.prototype.startScreencast;\n}","tryCatchPattern":"let stream: ScreencastStream | null = null;\ntry {\n  stream = await browser.startScreencast({ threadId });\n} catch (err) {\n  if (err instanceof Error && err.message === 'Screencast not supported by this provider') {\n    stream = null; // degrade to periodic screenshots\n  } else throw err;\n}","preventionTips":["Audit provider feature parity when switching providers.","Centralize capability checks in one helper module.","Design UI previews to degrade to screenshots gracefully.","Document required provider capabilities per feature."],"tags":["screencast","unsupported-operation","provider-capability"],"backgroundTag":"unsupported-provider-operation","analyzedSha":"75dd419e613fe9c39f846ffc500716141b74fda6","analyzedAt":"2026-08-30T00:15:31.844Z","schemaVersion":2},"datasetVersion":"2026-08-30T03:17:51.788Z"}