stablyai/orca · error
${RPC error message}
Error message
${RPC error message} What it means
Re-thrown host error when the paired desktop returns an RPC failure (ok:false) for `settings.get`, the first leg of the mobile new-tab agent loader. The loader fans out `settings.get` and an agent-detection request concurrently via Promise.all and propagates the host's `error.message` verbatim so the new-tab screen can surface it. It is a passthrough of a host-side or transport failure, not a client bug.
Source
Thrown at mobile/src/session/mobile-new-tab-agent-loader.ts:30
id: string
connectionId?: string | null
}
export async function loadMobileNewTabAgentOptions(args: {
client: RpcClient
worktreeId: string
}): Promise<MobileNewTabAgentOption[]> {
const { client, worktreeId } = args
// Why: the floating workspace runs on the paired host, so it has no repo connection to resolve.
const detectedAgentsRequest = isFloatingWorkspaceWorktreeId(worktreeId)
? client.sendRequest('preflight.detectAgents')
: loadWorkspaceDetectedAgents(client, worktreeId)
const [settingsResponse, detectedResponse] = await Promise.all([
client.sendRequest('settings.get'),
detectedAgentsRequest
])
if (!settingsResponse.ok) {
throw new Error((settingsResponse as RpcFailure).error.message)
}
if (!detectedResponse.ok) {
throw new Error((detectedResponse as RpcFailure).error.message)
}
const settings = (
(settingsResponse as RpcSuccess).result as {
settings?: MobileNewTabAgentSettings
}
).settings
return buildMobileNewTabAgentOptions(
settings,
(detectedResponse as RpcSuccess).result as unknown[]
)
}
async function loadWorkspaceDetectedAgents(client: RpcClient, worktreeId: string) {
const repoResponse = await client.sendRequest('repo.list')
if (!repoResponse.ok) {View on GitHub (pinned to 1136503c6a)
Solutions
- Reconnect to the host (usually transient).
- Check desktop host logs for the settings.get error code/message.
- Verify client/host version compatibility (remote wire compat).
- Inspect the host settings store if persistent.
Example fix
// before
const [settingsResponse, detectedResponse] = await Promise.all([...])
if (!settingsResponse.ok) {
throw new Error((settingsResponse as RpcFailure).error.message)
}
// after - preserve the host error code so the screen can branch
if (!settingsResponse.ok) {
const f = settingsResponse as RpcFailure
throw new MobileRpcError('settings.get', f.error.code, f.error.message)
} Defensive patterns
Strategy: try-catch
Validate before calling
if (connState !== 'connected' || !client) return // defer until connected
Type guard
function isRpcFailure(r: RpcResponse): r is RpcFailure {
return r.ok === false
} Try / catch
try {
const options = await loadMobileNewTabAgentOptions({ client, worktreeId })
} catch (err) {
setNewTabError(err instanceof Error ? err.message : 'Could not load agents')
} Prevention
- Gate the new-tab loader on connState==='connected'.
- Offer a retry control on RPC failure.
- Keep client and host on compatible wire versions.
When it happens
Trigger: Opening the mobile new-tab sheet while the host rejects `settings.get` (settings store read error, permission failure, host shutting down); or the relay/direct socket drops mid-Promise.all and the host returns an error envelope.
Common situations: Host just restarted or is mid-shutdown when the user taps new tab; relay->direct cutover rejects the in-flight one-shot; host settings file corrupt/unreadable; mixed client/host versions where the desktop does not yet implement `settings.get`.
Related errors
- Failed to save quick command
- response.error.message
- Unable to read markdown
- Waiting for desktop...
- Failed to save review notes
AI-assisted analysis of stablyai/orca@1136503c6a (2026-08-12).
Data as JSON: /api/errors/15c9c5d3a05826f2.
Report an issue: GitHub.