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
- Use a current KeybindingActionId — enumerate valid ids from the keybinding registry.
- If the action was renamed, update the caller to the new id.
- 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
- Source actionIds from the live keybinding registry, not hardcoded strings.
- Update callers when actions are renamed across Orca versions.
- Drop writes for actions that no longer exist.
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
- Use a string array or null.
- ${formatKeybindingList([blockingConflict.binding], keybindin
- Could not read keybindings file.
- Package version is not valid semver: ${baseVersion}
- Adhoc build timestamp is invalid.
AI-assisted analysis of stablyai/orca@1136503c6a (2026-08-12).
Data as JSON: /api/errors/787de93c9d7b3a31.
Report an issue: GitHub.