different-ai/openwork · error

Workspace export is only supported for local workspaces

Error message

Workspace export is only supported for local workspaces

What it means

exportWorkspaceConfig packages a workspace's local config (opencode.json and .opencode/) into a ZIP. It only supports local workspaces: if the workspace object has no path, or its workspaceType is 'remote', exporting is refused because there is no local filesystem tree to archive.

Solutions

  1. Call exportWorkspaceConfig only for workspaces whose workspaceType is 'local' and which have a valid path
  2. For remote workspaces, clone/checkout the content locally first, then export that directory
  3. Ensure the workspace object is fully loaded (path populated) before exporting

Example fix

// before
await exportWorkspaceConfig({ workspace: { id: 'remote-1', workspaceType: 'remote' } })
// after
if (ws.workspaceType !== 'remote' && ws.path) {
  await exportWorkspaceConfig({ workspace: ws })
}
Defensive patterns

Strategy: type-guard

Validate before calling

function canExport(ws) {
  return Boolean(ws?.path) && ws.workspaceType !== 'remote';
}

Type guard

function isExportableWorkspace(ws) {
  return typeof ws?.path === 'string' && ws.path.length > 0 && ws.workspaceType !== 'remote';
}

Try / catch

try {
  await exportWorkspaceConfig({ workspace });
} catch (err) {
  if (err.message === 'Workspace export is only supported for local workspaces') {
    // surface 'choose a local workspace' to the user
  } else throw err;
}

Prevention

When it happens

Trigger: Calling exportWorkspaceConfig with workspace.workspaceType === 'remote', or with a workspace object missing the path property (null/undefined path).

Common situations: Selecting a cloud/remote workspace in the UI and attempting an export; passing a partially-constructed workspace object without path; version changes where workspaceType was added and older callers omit it with no path.

Related errors


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

Appendix: source

Thrown at apps/desktop/electron/workspace-archive.mjs:258

  return !normalized.split("/").some((part) => part === ".." || part === "");
}

function defaultOpenworkConfig(targetDir, preset = "starter") {
  return {
    version: 1,
    workspace: {
      name: path.basename(targetDir) || "Workspace",
      createdAt: nowMs(),
      preset,
    },
    authorizedRoots: [targetDir],
    reload: null,
  };
}

export async function exportWorkspaceConfig({ workspace, outputPath }) {
  if (!workspace?.path || workspace.workspaceType === "remote") {
    throw new Error("Workspace export is only supported for local workspaces");
  }
  const workspaceRoot = workspace.path;
  if (!(await pathExists(workspaceRoot))) {
    throw new Error(`Workspace path not found: ${workspaceRoot}`);
  }

  const { entries, excluded } = await collectWorkspaceEntries(workspaceRoot);
  if (entries.length === 0) throw new Error("No workspace config files found to export");

  const files = [];
  const included = [];
  for (const entry of entries) {
    files.push({ name: entry.rel, data: await readFile(entry.absolute) });
    included.push(entry.rel);
  }
  files.push({
    name: "manifest.json",
    data: `${JSON.stringify({

View on GitHub (pinned to 2b7df46e8a)