stablyai/orca · error · Error

Unable to load workspace metadata.

Error message

Unable to load workspace metadata.

What it means

Thrown when the mobile AI-vault resume screen's parallel RPC fan-out (`Promise.all` of repo.list, folderWorkspace.list, projectGroup.list, settings.get, worktree.ps) gets a failure on the repo.list call specifically. The other four calls use `.catch(() => null)` so they degrade silently, but repo.list is mandatory — its failure aborts loading with the host's message or this generic fallback.

Source

Thrown at mobile/src/agent-history/MobileAgentSessionHistoryPanel.tsx:393

    settingsResponse,
    worktreeResponse
  ] = await Promise.all([
    client.sendRequest('repo.list', undefined, { timeoutMs: RESUME_RPC_TIMEOUT_MS }),
    client
      .sendRequest('folderWorkspace.list', undefined, { timeoutMs: RESUME_RPC_TIMEOUT_MS })
      .catch(() => null),
    client
      .sendRequest('projectGroup.list', undefined, { timeoutMs: RESUME_RPC_TIMEOUT_MS })
      .catch(() => null),
    client
      .sendRequest('settings.get', undefined, { timeoutMs: RESUME_RPC_TIMEOUT_MS })
      .catch(() => null),
    client
      .sendRequest('worktree.ps', { limit: 10000 }, { timeoutMs: RESUME_RPC_TIMEOUT_MS })
      .catch(() => null)
  ])
  if (!repoResponse.ok) {
    throw new Error(repoResponse.error?.message || 'Unable to load workspace metadata.')
  }
  const repoResult = repoResponse.result as { repos?: MobileAiVaultResumeRepo[] }
  const folderWorkspaceResult =
    folderWorkspaceResponse?.ok === true
      ? (folderWorkspaceResponse.result as {
          folderWorkspaces?: MobileAiVaultResumeFolderWorkspace[]
        })
      : null
  const projectGroupResult =
    projectGroupResponse?.ok === true
      ? (projectGroupResponse.result as { groups?: MobileAiVaultResumeProjectGroup[] })
      : null
  const settingsResult =
    settingsResponse?.ok === true
      ? (settingsResponse.result as { settings?: MobileAiVaultResumeSettings })
      : null
  const worktreeResult =
    worktreeResponse?.ok === true ? (worktreeResponse.result as { worktrees?: Worktree[] }) : null

View on GitHub (pinned to 1136503c6a)

Solutions

  1. Upgrade the Orca host to a version that implements repo.list.
  2. Check the SSH/host connection (the resume screen needs a live RPC channel).
  3. Retry after the host finishes initial repo indexing.
  4. If authoring the host method, ensure it always returns a non-empty error.message on failure.

Example fix

// before
if (!repoResponse.ok) {
  throw new Error(repoResponse.error?.message || 'Unable to load workspace metadata.')
}

// after — degrade gracefully on missing capability vs hard error
if (!repoResponse.ok) {
  if (repoResponse.error?.code === 'METHOD_NOT_FOUND') {
    setScreenState({ kind: 'unsupported' })
    return
  }
  throw new Error(repoResponse.error?.message || 'Unable to load workspace metadata.')
}
Defensive patterns

Strategy: try-catch

Validate before calling

// Capability pre-check before the fan-out
const status = await client.sendRequest('status.get', undefined, { timeoutMs: RESUME_RPC_TIMEOUT_MS })
if (!status.ok || !((status as RpcSuccess).result as any).capabilities?.includes('repo.list')) {
  setScreenState({ kind: 'unsupported' }); return
}

Type guard

function isRepoListSuccess(r: RpcSuccess | RpcFailure): r is RpcSuccess & { result: { repos?: MobileAiVaultResumeRepo[] } } {
  return r.ok
}

Try / catch

try {
  const [repoResponse] = await Promise.all([...])
  if (!repoResponse.ok) throw new Error(repoResponse.error?.message || 'Unable to load workspace metadata.')
} catch (err) {
  setScreenState({ kind: 'error', message: (err as Error).message })
}

Prevention

When it happens

Trigger: The `repo.list` RPC returns ok=false (host error, capability missing on older host, network/RPC timeout at RESUME_RPC_TIMEOUT_MS), or the response's error.message is empty so the fallback string is used.

Common situations: Connecting to an older Orca host that lacks repo.list, an SSH relay drop mid-request, the host still indexing repos on startup, or an empty error message from the host making the fallback kick in.

Related errors


AI-assisted analysis of stablyai/orca@1136503c6a (2026-08-12). Data as JSON: /api/errors/70e55a4bfb0a908d. Report an issue: GitHub.