{"record":{"id":"1576aadf2832c922","repo":"mastra-ai/mastra","slug":"keyboard-event-injection-not-supported-by-this-pro","errorCode":null,"errorMessage":"Keyboard event injection not supported by this provider","messagePattern":"Keyboard event injection not supported by this provider","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/core/src/browser/browser.ts","lineNumber":1512,"sourceCode":"  // Event Injection (optional - for Studio live view)\n  // ---------------------------------------------------------------------------\n\n  /**\n   * Inject a mouse event. Override in subclass if supported.\n   * @param event - Mouse event parameters\n   * @param threadId - Optional thread ID for thread-isolated sessions\n   */\n  async injectMouseEvent(_event: MouseEventParams, _threadId?: string): Promise<void> {\n    throw new Error('Mouse event injection not supported by this provider');\n  }\n\n  /**\n   * Inject a keyboard event. Override in subclass if supported.\n   * @param event - Keyboard event parameters\n   * @param threadId - Optional thread ID for thread-isolated sessions\n   */\n  async injectKeyboardEvent(_event: KeyboardEventParams, _threadId?: string): Promise<void> {\n    throw new Error('Keyboard event injection not supported by this provider');\n  }\n\n  // ---------------------------------------------------------------------------\n  // Abstract Methods (providers must implement)\n  // ---------------------------------------------------------------------------\n\n  /**\n   * Get the active page for a thread.\n   * Used by screencast reconnection to emit the current URL.\n   *\n   * @param threadId - Optional thread ID (uses current thread if not provided)\n   * @returns The active Playwright Page, or null if not available\n   */\n  protected abstract getActivePage(threadId?: string): Promise<{ url(): string } | null>;\n\n  /**\n   * Get the current browser state for a thread.\n   * Used to persist and restore browser state across sessions.","sourceCodeStart":1494,"sourceCodeEnd":1530,"githubUrl":"https://github.com/mastra-ai/mastra/blob/75dd419e613fe9c39f846ffc500716141b74fda6/packages/core/src/browser/browser.ts#L1494-L1530","documentation":"injectKeyboardEvent is a base-class stub that providers override when they support text/key event injection (e.g. CDP Input.dispatchKeyEvent). The default implementation always throws for providers without keyboard input support.","triggerScenarios":"Calling browser.injectKeyboardEvent(event, threadId?) on a provider that has not overridden the method.","commonSituations":"Typing into forms during agent automation against a provider lacking input injection; shared tooling that sends both mouse and keyboard events but runs on a launch-only provider.","solutions":["Use a provider that implements injectKeyboardEvent.","Check capability before calling and fall back to higher-level typing APIs.","Implement the override in a custom provider subclass.","Inject input directly on the page/session object the provider exposes."],"exampleFix":"// before\nawait browser.injectKeyboardEvent({ type: 'keyDown', key: 'Enter' });\n// after\nawait page.keyboard.press('Enter'); // via provider-exposed page handle","handlingStrategy":"validation","validationCode":"if (browser.injectKeyboardEvent === MastraBrowser.prototype.injectKeyboardEvent) {\n  throw new Error(`Provider ${browser.provider} cannot inject keyboard events`);\n}","typeGuard":"function supportsKeyboardInput(b: object): boolean {\n  return b.injectKeyboardEvent !== MastraBrowser.prototype.injectKeyboardEvent;\n}","tryCatchPattern":"try {\n  await browser.injectKeyboardEvent(ev, threadId);\n} catch (err) {\n  if (err instanceof Error && err.message.includes('Keyboard event injection not supported')) {\n    await page.keyboard.type(ev.key); // fallback via page handle\n  } else throw err;\n}","preventionTips":["Feature-detect input injection before enabling form-filling flows.","Bundle mouse/keyboard capability checks together since they usually co-vary.","Prefer providers that expose a page/session handle as a fallback path.","Add capability assertions to integration tests."],"tags":["input","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"}