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
- Treat it as expected behavior in remote web — the action is intentionally a no-op there.
- Hide or disable the selection affordances when `useAppRuntime()` indicates remote runtime, so users don't click unavailable actions.
- 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
- Gate selection/dialog UI on app runtime capability instead of rendering desktop-only affordances in remote web.
- Consume ActionsContext only through components that check runtime support first.
- Keep a list of no-op remote actions and hide them from kanban/context menus.
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.