stablyai/orca · error · Error

Unknown keybinding action "${actionId}".

Error message

Unknown keybinding action "${actionId}".

What it means

Thrown by writeKeybindingOverride when the actionId is not a recognized KeybindingActionId (isKeybindingActionId returns false). The keybinding schema is a closed set of action ids; writing an unknown one would create an entry no command listens for, so it is rejected before any normalization or file IO.

Source

Thrown at src/main/keybindings/keybinding-file.ts:433

  document.platforms = {
    ...platforms,
    darwin: isJsonObject(platforms.darwin) ? platforms.darwin : {},
    linux: isJsonObject(platforms.linux) ? platforms.linux : {},
    win32: isJsonObject(platforms.win32) ? platforms.win32 : {},
    [keybindingPlatform]: activePlatform
  }
  writeJsonDocument(path, document)
  return readKeybindingFile(path, platform)
}

export function writeKeybindingOverride(
  path: string,
  platform: NodeJS.Platform,
  actionId: string,
  bindings: unknown
): KeybindingFileSnapshot {
  if (!isKeybindingActionId(actionId)) {
    throw new Error(`Unknown keybinding action "${actionId}".`)
  }
  const normalizedBindings = normalizeWriteBindingValue(actionId, bindings)

  const keybindingPlatform = getKeybindingPlatform(platform)
  const currentSnapshot = readKeybindingFile(path, platform)
  const candidateOverrides = { ...currentSnapshot.overrides }
  if (normalizedBindings === null) {
    delete candidateOverrides[actionId]
  } else {
    candidateOverrides[actionId] = normalizedBindings
  }
  const blockingConflict = findKeybindingConflicts(keybindingPlatform, candidateOverrides).find(
    (conflict) => conflict.actionIds.includes(actionId)
  )
  if (blockingConflict) {
    throw new Error(
      `${formatKeybindingList([blockingConflict.binding], keybindingPlatform)} conflicts with another shortcut.`
    )

View on GitHub (pinned to 1136503c6a)

Solutions

  1. Use a current KeybindingActionId — enumerate valid ids from the keybinding registry.
  2. If the action was renamed, update the caller to the new id.
  3. Remove calls for actions that no longer exist.

Example fix

// before
writeKeybindingOverride(path, platform, 'commandPallet.open', ['Cmd+P'])
// after
writeKeybindingOverride(path, platform, 'command.palette.open', ['Cmd+P'])
Defensive patterns

Strategy: validation

Validate before calling

if (!isKeybindingActionId(actionId)) throw new Error(`unknown action: ${actionId}`)

Type guard

function isKnownActionId(actionId: string): actionId is KeybindingActionId {
  return isKeybindingActionId(actionId)
}

Try / catch

try { writeKeybindingOverride(path, platform, actionId, bindings) }
catch (e) { if (/Unknown keybinding action/.test(String((e as Error).message))) refreshActionRegistry(); else throw e }

Prevention

When it happens

Trigger: Calling writeKeybindingOverride with a typo'd, renamed, or invented actionId. Common after upgrading Orca where an action was renamed, or when a caller hardcodes an id that was never valid.

Common situations: Renderer bug sending an old action name. Custom plugin assuming an action exists. Action renamed across versions without updating caller.

Related errors


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