BloopAI/vibe-kanban · info

[RemoteActionsProvider] Action "${action.id}" is unavailable

Error message

[RemoteActionsProvider] Action "${action.id}" is unavailable in remote web.

What it means

`RemoteActionsProvider.executeAction` handles only the `settings` and `project-settings` action ids in remote web. Any other ActionDefinition dispatched through the shared ActionsContext reaches the final fallback, which logs this console.warn and does nothing — the action is silently dropped.

Source

Thrown at packages/remote-web/src/app/providers/RemoteActionsProvider.tsx:173

      if (action.id === "settings") {
        await SettingsDialog.show({
          initialSection: "organizations",
        });
        return;
      }

      if (action.id === "project-settings") {
        await SettingsDialog.show({
          initialSection: "remote-projects",
          initialState: {
            organizationId: selectedOrgId ?? undefined,
            projectId: projectId ?? undefined,
          },
        });
        return;
      }

      console.warn(
        `[RemoteActionsProvider] Action "${action.id}" is unavailable in remote web.`,
      );
    },
    [projectId, selectedOrgId],
  );

  const getLabel = useCallback(
    (
      action: ActionDefinition,
      workspace?: Workspace,
      ctx?: ActionVisibilityContext,
    ) => {
      if (ctx) {
        return getActionLabel(action, ctx, workspace);
      }
      return resolveLabel(action, workspace);
    },
    [],

View on GitHub (pinned to 4deb7eca8f)

Solutions

  1. Hide desktop-only actions from command palettes/menus when running in remote web (filter by runtime).
  2. If the action should work remotely, add an implementation branch in RemoteActionsProvider.executeAction for that action.id.
  3. Extend the ActionDefinition type with a `remoteSupported` flag (or similar) and gate visibility/resolution on it.

Example fix

// before
executeAction({ id: 'open-in-editor' }); // warns and no-ops

// after
if (action.remoteSupported) executeAction(action);
else hideAction(action); // don't render in remote web
Defensive patterns

Strategy: type-guard

Validate before calling

const REMOTE_SUPPORTED = new Set(['settings', 'project-settings']);
const visibleActions = actions.filter((a) => REMOTE_SUPPORTED.has(a.id));

Type guard

function isRemoteSupported(action: ActionDefinition): boolean {
  return action.id === 'settings' || action.id === 'project-settings';
}

Prevention

When it happens

Trigger: Executing a shared action (e.g. workspace start/stop, open-in-editor, dev-server actions, archive, etc.) via executeAction from command palette, context menus, or keyboard shortcuts while in remote web, when the action id is not 'settings' or 'project-settings'.

Common situations: Shared action registries listing desktop-only actions; users invoking them from the command palette in the hosted web UI; new actions added to shared/types/actions but not implemented in the remote provider.

Related errors


AI-assisted analysis of BloopAI/vibe-kanban@4deb7eca8f (2026-08-29). Data as JSON: /api/errors/8c8bc5d01d486e44. Report an issue: GitHub.