BloopAI/vibe-kanban · info

[RemoteActionsProvider] ${name} is unavailable in remote web

Error message

[RemoteActionsProvider] ${name} is unavailable in remote web.

What it means

Remote web replaces the local desktop ActionsProvider with a stub provider. Interactive selection dialogs that only work in the local (Tauri/desktop) app — status, priority, assignee, sub-issue, workspace, and relationship selection — are wired to `noOpSelection`, which does nothing but log this console.warn. No dialog opens and no state changes.

Source

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

  resolveLabel,
  type ProjectMutations,
} from "@/shared/types/actions";
import { SettingsDialog } from "@/shared/dialogs/settings/SettingsDialog";
import { useAppNavigation } from "@/shared/hooks/useAppNavigation";
import { useAppRuntime } from "@/shared/hooks/useAppRuntime";
import { useOrganizationStore } from "@/shared/stores/useOrganizationStore";
import {
  buildKanbanIssueComposerKey,
  openKanbanIssueComposer,
  type ProjectIssueCreateOptions,
} from "@/shared/stores/useKanbanIssueComposerStore";

interface RemoteActionsProviderProps {
  children: ReactNode;
}

function noOpSelection(name: string) {
  console.warn(`[RemoteActionsProvider] ${name} is unavailable in remote web.`);
}

export function RemoteActionsProvider({
  children,
}: RemoteActionsProviderProps) {
  const appRuntime = useAppRuntime();
  const appNavigation = useAppNavigation();
  const queryClient = useQueryClient();
  const { projectId, hostId } = useParams({ strict: false });
  const userCtx = useContext(UserContext);
  const selectedOrgId = useOrganizationStore((s) => s.selectedOrgId);
  const [defaultCreateStatusId, setDefaultCreateStatusId] = useState<
    string | undefined
  >();
  const [projectMutations, setProjectMutations] =
    useState<ProjectMutations | null>(null);

  const registerProjectMutations = useCallback(

View on GitHub (pinned to 4deb7eca8f)

Solutions

  1. Treat it as expected behavior in remote web — the action is intentionally a no-op there.
  2. Hide or disable the selection affordances when `useAppRuntime()` indicates remote runtime, so users don't click unavailable actions.
  3. Implement remote equivalents (e.g. inline dropdowns fetching from the remote API) if the feature is needed in remote web.

Example fix

// before
<MenuItem onClick={() => openStatusSelection(issue)} />

// after
const appRuntime = useAppRuntime();
{appRuntime.isLocal && (
  <MenuItem onClick={() => openStatusSelection(issue)} />
)}
Defensive patterns

Strategy: type-guard

Validate before calling

const appRuntime = useAppRuntime();
const canOpenSelections = !appRuntime.isRemote; // only render selection triggers locally

Type guard

function isLocalRuntime(rt: AppRuntime): rt is LocalAppRuntime {
  return rt.kind === 'local';
}
// usage: if (isLocalRuntime(appRuntime)) openStatusSelection();

Prevention

When it happens

Trigger: Triggering a selection action from shared UI while running in remote web (e.g. opening the status/priority/assignee picker on an issue card, choosing 'select workspace' from a workspace action, opening sub-issue or relationship pickers).

Common situations: Users of the hosted/remote web UI clicking context-menu or kanban-card actions that are desktop-only; shared components invoking ActionsContext selection functions without checking runtime capability.

Related errors


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