stablyai/orca · warning · Error
Waiting for desktop...
Error message
Waiting for desktop...
What it means
Guard thrown by `persistMetadata` (saves diff comments + review state via `worktree.set`) when the mobile client has no live RPC client or is not `connected`. It blocks the optimistic write so the host is not called with a dead transport.
Source
Thrown at mobile/src/session/use-mobile-diff-review-comment-actions.ts:67
currentItem,
queue,
filteredQueue,
filter,
currentIndex,
composer,
composerBody,
setScreenState,
setCurrentIndex,
setComposer,
setComposerBody,
setActionError,
setShowCompletion
} = input
const persistMetadata = useCallback(
async (comments: readonly DiffComment[], reviewState: MobileDiffReviewState) => {
if (!client || connState !== 'connected') {
throw new Error('Waiting for desktop...')
}
const response = await client.sendRequest('worktree.set', {
worktree: `id:${worktreeId}`,
diffComments: comments,
mobileDiffReview: reviewState
})
if (!response.ok) {
throw new Error(response.error?.message || 'Failed to save review state')
}
},
[client, connState, worktreeId]
)
const updateReadyState = useCallback(
(updater: (state: Extract<ReviewScreenState, { kind: 'ready' }>) => ReviewScreenState) => {
setScreenState((prev) => (prev.kind === 'ready' ? updater(prev) : prev))
},
[setScreenState]View on GitHub (pinned to 1136503c6a)
Solutions
- Wait for the connection to return to 'connected'.
- The optimistic UI change will have been rolled back - re-apply after reconnect.
- Re-pair if auth-failed.
- Check network/relay reachability.
Example fix
// before
if (!client || connState !== 'connected') {
throw new Error('Waiting for desktop...')
}
// after - queue the write and replay once connected
if (!client || connState !== 'connected') {
enqueuePendingMetadata(comments, reviewState)
throw new Error('Waiting for desktop...')
} Defensive patterns
Strategy: validation
Validate before calling
if (!client || connState !== 'connected') {
setActionError('Waiting for desktop...')
return
} Try / catch
try {
await saveCommentsAndReviewState(comments, reviewState)
} catch (err) {
if ((err as Error).message === 'Waiting for desktop...') {
// keep local optimistic change; UI already shows waiting
} else throw err
} Prevention
- Disable the comment save button until connState==='connected'.
- Show a connection badge on the review screen.
- Queue mutations during reconnect and replay on 'connected'.
When it happens
Trigger: client is null (never paired / disconnected) or connState is anything other than 'connected' (connecting, handshaking, reconnecting, auth-failed, disconnected). Any comment add/edit/delete or mark-reviewed that triggers persistence while in those states.
Common situations: User edits a comment during a brief reconnect window; relay dropped and connState is reconnecting; first-paint before the transport finished handshaking; auth-failed after token expiry.
Related errors
- Waiting for desktop...
- Failed to save review state
- Source control action failed
- Failed to send notes
- Terminal input is locked
AI-assisted analysis of stablyai/orca@1136503c6a (2026-08-12).
Data as JSON: /api/errors/ecc421d3c28feefb.
Report an issue: GitHub.