tinyhumansai/openhuman · error
[transport:lan] response missing result
Error message
[transport:lan] response missing result
What it means
LAN transport protocol check: 2xx response, valid JSON, no `error` field, and no own `result` property — a malformed success frame. Identical semantics to the cloud/local variants: JSON-RPC 2.0 requires exactly one of `result`/`error`, and the transport fails rather than returning `undefined` as `T`.
Source
Thrown at app/src/services/transport/LanHttpTransport.ts:79
}
throw err;
} finally {
clearTimeout(timeoutId);
}
if (!response.ok) {
const text = await response.text();
throw new Error(`[transport:lan] HTTP ${response.status}: ${text || response.statusText}`);
}
const json = (await response.json()) as JsonRpcResponse<T>;
if (json.error) {
logErr('[transport:lan] ← %s error: %s', method, json.error.message);
throw new Error(json.error.message ?? 'LAN RPC returned an error');
}
if (!Object.prototype.hasOwnProperty.call(json, 'result')) {
throw new Error('[transport:lan] response missing result');
}
log('[transport:lan] ← %s id=%d ok', method, id);
return json.result as T;
}
async *stream<T>(
method: string,
params: unknown,
opts?: { signal?: AbortSignal }
): AsyncIterable<T> {
const result = await this.call<T>(method, params, opts);
yield result;
}
async isHealthy(): Promise<boolean> {
try {
await this.call('openhuman.ping', {}, { signal: AbortSignal.timeout(2000) });View on GitHub (pinned to a221052e0d)
Solutions
- curl the rpcUrl from the client device with a `openhuman.ping` frame and inspect the raw response
- Confirm the profile's rpcUrl is the desktop core's `/rpc` route
- Remove or bypass LAN middleboxes (router portals, proxies) for that host:port
- Update both ends to matching versions
Defensive patterns
Strategy: try-catch
Try / catch
try { return await lan.call<T>(m, p); }
catch (e) {
if (e instanceof Error && e.message === '[transport:lan] response missing result') {
throw new Error(`LAN rpc url is not a JSON-RPC endpoint (method ${m}) — re-pair the connection profile`);
}
throw e;
} Prevention
- Health-check with openhuman.ping when creating a LAN profile to catch wrong-endpoint configs at setup
- Keep router portals/proxies off the core host:port — they rewrite frames
- Update both ends together; old cores may emit frames without result
When it happens
Trigger: Desktop core (or something impersonating it on that port) answering `{}` or `{jsonrpc, id}` with no payload; a proxy on the LAN path rewriting the body; a very old core whose success shape predates the strict check.
Common situations: Captive portal or 'smart' router middleware intercepting HTTP on LAN; wrong port in the connection profile landing on another local service; version mismatch after updating only one side.
Related errors
- [transport:cloud] response missing result
- LAN RPC returned an error
- Core RPC response missing result
- Cloud RPC returned an error
- [transport:lan] ${method} timed out after ${this.timeoutMs}m
AI-assisted analysis of tinyhumansai/openhuman@a221052e0d (2026-08-16).
Data as JSON: /api/errors/298edcce806af82f.
Report an issue: GitHub.