different-ai/openwork · error

OpenWork server unavailable. Connect to manage imported clou

Error message

OpenWork server unavailable. Connect to manage imported cloud marketplaces.

What it means

When saving imported cloud marketplaces, createExtensionsStore persists the updated workspace config via writeWorkspaceOpenworkConfigRecord. That helper returns false when persistence is impossible (no desktop bridge for a local workspace and no OpenWork server connection). The store throws to prevent in-memory state from diverging from what would be lost on restart, telling the user to connect to the server.

Source

Thrown at apps/app/src/react-app/domains/settings/state/extensions-store.ts:642

    } catch {
      setStateField("importedCloudMarketplaces", {});
      setStateField("importedCloudPlugins", {});
      setStateField("pendingCloudPluginChanges", {});
      return {};
    }
  };

  const persistImportedCloudMarketplaces = async (nextMarketplaces: Record<string, CloudImportedMarketplace>) => {
    const config = await readWorkspaceOpenworkConfigRecord();
    const cloudImports = readWorkspaceCloudImports(config);
    const nextCloudImports = {
      ...cloudImports,
      marketplaces: nextMarketplaces,
    };
    const nextConfig = withWorkspaceCloudImports(config, nextCloudImports);
    const persisted = await writeWorkspaceOpenworkConfigRecord(nextConfig);
    if (!persisted) {
      throw new Error("OpenWork server unavailable. Connect to manage imported cloud marketplaces.");
    }
    setStateField("importedCloudMarketplaces", nextMarketplaces);
    void refreshPendingCloudPluginChanges();
  };

  const persistImportedCloudPlugins = async (nextPlugins: Record<string, CloudImportedPlugin>) => {
    const config = await readWorkspaceOpenworkConfigRecord();
    const cloudImports = readWorkspaceCloudImports(config);
    const nextCloudImports = {
      ...cloudImports,
      plugins: nextPlugins,
    };
    const nextConfig = withWorkspaceCloudImports(config, nextCloudImports);
    const persisted = await writeWorkspaceOpenworkConfigRecord(nextConfig);
    if (!persisted) {
      throw new Error("OpenWork server unavailable. Connect to manage imported cloud plugins.");
    }
    setStateField("importedCloudPlugins", nextPlugins);

View on GitHub (pinned to 2b7df46e8a)

Solutions

  1. Connect to the OpenWork server (Account/Settings → sign in) and retry the marketplace import.
  2. Verify network connectivity to the server endpoint.
  3. If on desktop with a local workspace, ensure the desktop runtime and workspace root are detected so the local file write path is used.
  4. Restart the app if the server connection state is stale.

Example fix

// before
const persisted = await writeWorkspaceOpenworkConfigRecord(nextConfig);
if (!persisted) {
  throw new Error("OpenWork server unavailable. Connect to manage imported cloud marketplaces.");
}
// after
const persisted = await writeWorkspaceOpenworkConfigRecord(nextConfig);
if (!persisted) {
  await requestServerConnection(); // prompt sign-in instead of a bare throw
  return;
}
Defensive patterns

Strategy: validation

Validate before calling

const canPersist = isDesktopRuntime() && !!workspaceRoot;
const serverOk = canUseOpenworkServer && !!openworkClient;
if (!canPersist && !serverOk) {
  // show 'connect to server' prompt before attempting the import
}

Try / catch

try {
  await importCloudMarketplace(id);
} catch (err) {
  if (err.message.includes("server unavailable")) openServerConnectDialog();
  else throw err;
}

Prevention

When it happens

Trigger: Adding/updating imported cloud marketplaces while writeWorkspaceOpenworkConfigRecord returns falsy: the workspace has an OpenWork target but the server is unreachable/not signed in, and the desktop local-write path doesn't apply (non-desktop runtime or no root).

Common situations: User signed out of OpenWork server/Den; server process stopped; network down; operating on a remote workspace without an active server connection; trying to manage cloud imports purely from web/mobile runtime.

Related errors


AI-assisted analysis of different-ai/openwork@2b7df46e8a (2026-09-01). Data as JSON: /api/errors/c1cad985f947896c. Report an issue: GitHub.