stablyai/orca · error · RuntimeClientError

invalid_argument

invalid_argument

Error message

unknown computer sidecar method '${method}'

What it means

sidecar-entry dispatch's switch falls through to default when message.method is not one of the known ComputerSidecarMethod values. It throws 'invalid_argument' with the offending method name. The caller is the parent sidecar-client which only ever sends typed ComputerSidecarMethod values, so reaching here means a contract drift or external IPC.

Source

Thrown at src/main/computer/sidecar-entry.ts:90

      return await provider.action('drag', params)
    }
    case 'typeText': {
      return await provider.action('typeText', params)
    }
    case 'pressKey': {
      return await provider.action('pressKey', params)
    }
    case 'hotkey': {
      return await provider.action('hotkey', params)
    }
    case 'pasteText': {
      return await provider.action('pasteText', params)
    }
    case 'setValue': {
      return await provider.action('setValue', params)
    }
    default:
      throw new RuntimeClientError(
        'invalid_argument',
        `unknown computer sidecar method '${method}'`
      )
  }
}

function isRequest(message: unknown): message is SidecarRequest {
  if (!message || typeof message !== 'object') {
    return false
  }
  const record = message as Record<string, unknown>
  return (
    typeof record.id === 'number' &&
    typeof record.method === 'string' &&
    (record.params === undefined || (typeof record.params === 'object' && record.params !== null))
  )
}

View on GitHub (pinned to 1136503c6a)

Solutions

  1. Rebuild so parent (sidecar-client) and child (sidecar-entry) ship from the same commit — the ComputerSidecarMethod union and the dispatch switch must stay in sync.
  2. If you added a new method, add the matching case to dispatch in the same change.
  3. Do not drive the sidecar IPC channel from outside the sidecar-client wrapper; treat it as private.

Example fix

// before: parent sends a method the child does not know yet
await sidecar.call('highlightElement' as ComputerSidecarMethod, params)

// after: add the case in sidecar-entry.ts dispatch and rebuild both sides
case 'highlightElement': {
  return await provider.action('highlightElement', params)
}
Defensive patterns

Strategy: validation

Validate before calling

const KNOWN_METHODS = new Set<ComputerSidecarMethod>([
  'capabilities', 'listApps', 'listWindows', 'getAppState',
  'click', 'performSecondaryAction', 'scroll', 'drag',
  'typeText', 'pressKey', 'hotkey', 'pasteText', 'setValue'
])

function isKnownSidecarMethod(method: string): method is ComputerSidecarMethod {
  return KNOWN_METHODS.has(method as ComputerSidecarMethod)
}

// guard at the call boundary
if (!isKnownSidecarMethod(method)) throw new TypeError(`unknown method ${method}`)

Type guard

function isKnownSidecarMethod(method: string): method is ComputerSidecarMethod {
  return KNOWN_METHODS.has(method as ComputerSidecarMethod)
}

Try / catch

try {
  await dispatch(method, params)
} catch (e) {
  if (e instanceof RuntimeClientError && e.code === 'invalid_argument' && /^unknown computer sidecar method/.test(e.message)) {
    // parent/child skew — rebuild both; do not retry
  } else throw e
}

Prevention

When it happens

Trigger: A new method was added to ComputerSidecarMethod in the parent but the sidecar entry's switch was not updated (skewed builds); an external process sent a raw IPC message to the sidecar child; a typo or stale cached codepath dispatching an old method name.

Common situations: See trigger scenarios.

Related errors


AI-assisted analysis of stablyai/orca@1136503c6a (2026-08-12). Data as JSON: /api/errors/b22445dca6d9da35. Report an issue: GitHub.