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[] }) : nullView on GitHub (pinned to 1136503c6a)
Solutions
- Upgrade the Orca host to a version that implements repo.list.
- Check the SSH/host connection (the resume screen needs a live RPC channel).
- Retry after the host finishes initial repo indexing.
- 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
- Gate the resume screen on a status.get capability check first.
- Let the four optional RPCs degrade silently (already done via .catch(()=>null)).
- Ensure the host always returns a non-empty error.message on repo.list failures.
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
- Unable to create untitled markdown note
- Unable to read markdown
- Unable to reach host
- Unable to load agent sessions
- ${response.error.message}
AI-assisted analysis of stablyai/orca@1136503c6a (2026-08-12).
Data as JSON: /api/errors/70e55a4bfb0a908d.
Report an issue: GitHub.