tinyhumansai/openhuman · error
Core rejected the meet_agent_get_call_detail request.
Error message
Core rejected the meet_agent_get_call_detail request.
What it means
Same contract shape as the list call: `openhuman.meet_agent_get_call_detail` resolved but reported `ok` falsy. Note the distinction baked into the API: `detail === null` is the designed 'no transcript recorded' case, while this throw means the handler itself failed (could not read/parse the recording it was asked for). Transport errors (unknown method, timeout) surface as `CoreRpcError` before this line.
Source
Thrown at app/src/services/meetCallService.ts:133
if (!result?.ok) {
throw new Error('Core rejected the meet_agent_list_calls request.');
}
return result.calls ?? [];
}
/**
* Fetch the transcript + summary for one completed call. Lazy-loaded when the
* user expands a recent-call row. Returns `null` when the core has no detail
* for this call (older calls recorded before the feature, or a failed write) —
* the panel renders a "no transcript yet" state in that case.
*/
export async function getMeetCallDetail(requestId: string): Promise<MeetCallDetail | null> {
const result = await callCoreRpc<CoreGetCallDetailResponse>({
method: 'openhuman.meet_agent_get_call_detail',
params: { request_id: requestId },
});
if (!result?.ok) {
throw new Error('Core rejected the meet_agent_get_call_detail request.');
}
return result.detail ?? null;
}
// ---------------------------------------------------------------------------
// Transcript parsing
// ---------------------------------------------------------------------------
/** A transcript line with its parsed timestamp/speaker prefix stripped out. */
interface ParsedTranscriptLine {
timestamp: string | null;
speaker: string | null;
text: string;
role: string;
}
const TRANSCRIPT_PREFIX_RE = /^\[(\d{1,2}:\d{2})\]\s*\[([^\]]+)\]\s*(.*)/s;
View on GitHub (pinned to a221052e0d)
Solutions
- Check core logs for the specific request_id read failure
- Verify the recording file for that request_id exists and is valid JSONL in the workspace
- Treat as non-fatal in UI: catch and render the same 'no transcript yet' state used for null
- If it affects every call, re-check the recordings directory configuration
Example fix
// before
const detail = await getMeetCallDetail(requestId);
// after — a failed read is indistinguishable from 'none' to the user
let detail: MeetCallDetail | null = null;
try { detail = await getMeetCallDetail(requestId); }
catch { detail = null; } // render 'no transcript yet' Defensive patterns
Strategy: try-catch
Try / catch
let detail: MeetCallDetail | null = null;
try { detail = await getMeetCallDetail(requestId); }
catch { detail = null; } // same UI state as 'no transcript yet' Prevention
- Distinguish null (no recording — normal) from a thrown error (read failure) in UI copy
- Lazy-load details and isolate failures per row so one bad recording does not break the list
- Keep recordings directory out of user-cleaned temp paths
When it happens
Trigger: The detail JSONL for `request_id` exists in the index but its file cannot be opened/parsed (partial write after a crash, permission change, file locked by another process), or `request_id` references a recording whose backing file was deleted while its index row survived.
Common situations: User or cleaner deleted files under the recordings directory; app crashed mid-write during a call; workspace migrated between machines with partial copy.
Related errors
- Core rejected the meet_agent_list_calls request.
- Core RPC returned an error
- Core RPC response missing result
- Core rejected the agent_meetings_join request.
- Core rejected the meet_list_upcoming request.
AI-assisted analysis of tinyhumansai/openhuman@a221052e0d (2026-08-16).
Data as JSON: /api/errors/268fe2c3209575da.
Report an issue: GitHub.