{"record":{"id":"04c0ab7937bde403","repo":"stablyai/orca","slug":"unsupported-capability","errorCode":"unsupported_capability","errorMessage":"${capabilities.provider} does not support windows.list","messagePattern":"(.+?) does not support windows\\.list","errorType":"error_code","errorClass":"RuntimeClientError","httpStatus":null,"severity":"error","filePath":"src/main/computer/desktop-script-provider-client.ts","lineNumber":83,"sourceCode":"      apps: (response.apps ?? []).map((app) => ({\n        name: app.name,\n        bundleId: app.bundleId ?? app.bundleIdentifier ?? null,\n        pid: app.pid,\n        isRunning: true,\n        lastUsedAt: null,\n        useCount: null\n      }))\n    }\n  }\n\n  async capabilities(): Promise<ComputerProviderCapabilities> {\n    return await this.readCapabilities()\n  }\n\n  async listWindows(params: Record<string, unknown>): Promise<ComputerListWindowsResult> {\n    const capabilities = await this.readCapabilities()\n    if (!capabilities.supports.windows.list) {\n      throw new RuntimeClientError(\n        'unsupported_capability',\n        `${capabilities.provider} does not support windows.list`\n      )\n    }\n    const response = await this.callBridge({\n      tool: 'list_windows',\n      app: stringParam(params, 'app')\n    })\n    return {\n      app: normalizeBridgeApp(response.app),\n      windows: (response.windows ?? []).map((window) => ({\n        index: window.index,\n        app: normalizeBridgeApp(window.app),\n        id: window.id ?? null,\n        title: window.title,\n        x: window.x ?? null,\n        y: window.y ?? null,\n        width: window.width,","sourceCodeStart":65,"sourceCodeEnd":101,"githubUrl":"https://github.com/stablyai/orca/blob/1136503c6a231a16dce8f921f6fadb63d181e8db/src/main/computer/desktop-script-provider-client.ts#L65-L101","documentation":"listWindows reads provider capabilities and throws unsupported_capability if supports.windows.list is false. Different desktop providers (macOS native vs script) advertise different capabilities, and not all support window enumeration. The handshake response declares which operations the active provider implements.","triggerScenarios":"Calling listWindows on a provider whose handshake capabilities lack windows.list=true; running an older or minimal provider script.","commonSituations":"Running on a platform or provider without window-list support; mismatched client and provider versions; assuming all providers enumerate windows.","solutions":["Check capabilities().supports.windows.list before calling listWindows.","Fall back to snapshot with windowId/windowIndex targeting instead.","Upgrade the desktop provider script to a version that advertises windows.list."],"exampleFix":"// before\nconst { windows } = await client.listWindows({ app: 'Safari' })\n// after\nconst caps = await client.capabilities()\nif (caps.supports.windows.list) {\n  const { windows } = await client.listWindows({ app: 'Safari' })\n} else {\n  const snap = await client.snapshot({ app: 'Safari' })\n  // target via snap.windowId / windowIndex\n}","handlingStrategy":"validation","validationCode":"const caps = await client.capabilities()\nif (!caps.supports.windows.list) {\n  // fall back to snapshot-based window targeting instead of listWindows\n}","typeGuard":null,"tryCatchPattern":"try {\n  return await client.listWindows(params)\n} catch (err) {\n  if (err instanceof RuntimeClientError && err.code === 'unsupported_capability') {\n    // fall back to snapshot and use windowId/windowIndex\n  }\n  throw err\n}","preventionTips":["Query capabilities once and cache the result.","Feature-detect before using optional provider operations."],"tags":["unsupported-capability","windows","provider"],"backgroundTag":null,"analyzedSha":"1136503c6a231a16dce8f921f6fadb63d181e8db","analyzedAt":"2026-08-12T23:15:58.167Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}