stablyai/orca · error
Unable to load files
Error message
Unable to load files
What it means
Thrown by MobileFileExplorerPanel.loadDirectory when files.readDir failed with a method-unavailable error on a root load, the legacy files.list fallback was attempted, and the legacy call ALSO failed (legacy.ok === false) with no usable error message. This is the legacy-fallback exhaustion path — neither the modern nor the legacy directory-listing RPC worked.
Source
Thrown at mobile/src/files/MobileFileExplorerPanel.tsx:142
})
if (legacy.ok) {
if (
!isCurrentDirectoryLoad(
directoryLoadRevisionsRef.current,
scopeRef.current,
loadToken
)
) {
return
}
const legacyResult = (legacy as RpcSuccess).result as LegacyFilesListResult
setDirectoryCache(directoryCacheFromFileList(legacyResult.files))
// Why: the capped list silently omits files past the cap — keep
// the legacy explorer's "Showing first 5000" note.
setLegacyListTruncated(legacyResult.truncated)
return
}
throw new Error(
legacy.error?.message || response.error?.message || 'Unable to load files'
)
}
throw new Error(response.error?.message || 'Unable to load files')
}
if (
!isCurrentDirectoryLoad(directoryLoadRevisionsRef.current, scopeRef.current, loadToken)
) {
return
}
const entries = (response as RpcSuccess).result as MobileDirEntry[]
if (rootLoad) {
setLegacyListTruncated(false)
}
setDirectoryCache((prev) => ({
...prev,
[relativePath]: { entries }
}))View on GitHub (pinned to 1136503c6a)
Solutions
- Verify the host connection is still 'connected' (connState) and the worktreeId still exists via worktree.show before retrying loadDirectory.
- Use forceReconnect to re-establish the host client, then trigger a root reload.
- Check the desktop host logs — both RPCs failing usually indicates a host-side worktree or filesystem problem rather than a client issue.
- Surface the underlying error code to the user instead of the generic tail so support can diagnose.
Example fix
// before
throw new Error(
legacy.error?.message || response.error?.message || 'Unable to load files'
)
// after — keep the codes for diagnostics
const code = legacy.error?.code ?? response.error?.code
throw new Error(
legacy.error?.message || response.error?.message || `Unable to load files${code ? ` (${code})` : ''}`
) Defensive patterns
Strategy: fallback
Validate before calling
// Confirm the host is connected and the worktree exists before reload
if (!client || connState !== 'connected') return
const exists = await client.sendRequest('worktree.show', { worktree: `id:${worktreeId}` })
if (!exists.ok || !(exists as any).result?.worktree) return Type guard
function isFileListUnavailableError(err: unknown): boolean {
return err instanceof Error && err.message === 'Unable to load files'
} Try / catch
try {
await loadDirectory('')
} catch (err) {
if (isFileListUnavailableError(err)) {
setError('Could not load files. Reconnecting...')
await forceReconnect()
await loadDirectory('')
return
}
throw err
} Prevention
- Surface the underlying error code (response.error?.code) so support can distinguish 'not_found' from 'permission_denied'.
- Keep the cached tree visible on root-load failure so users can navigate while retrying in the background.
- Probe host capabilities once and cache whether files.readDir is supported, to avoid the legacy fallback round-trip on every load.
When it happens
Trigger: At root relativePath, client.sendRequest('files.readDir', ...) returns method_not_found / 'not available to mobile clients', then client.sendRequest('files.list', ...) also returns {ok:false}. Reached only when isMobileMethodUnavailableError matched on the first error AND rootLoad is true.
Common situations: The paired desktop is in a degraded state where both RPC methods reject (e.g., worktree unmounted, host mid-shutdown); the host build is so old that files.list also has a problem; the worktreeId is invalid and both RPCs refuse it.
Related errors
- Unable to read markdown
- Failed to load dictation models
- ${RPC error message}
- Unable to open diff
- ${commandLabel} ${args.join(' ')} failed to start: ${String(
AI-assisted analysis of stablyai/orca@1136503c6a (2026-08-12).
Data as JSON: /api/errors/4a57aa65c0bc3f58.
Report an issue: GitHub.