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

  1. Check core logs for the specific request_id read failure
  2. Verify the recording file for that request_id exists and is valid JSONL in the workspace
  3. Treat as non-fatal in UI: catch and render the same 'no transcript yet' state used for null
  4. 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

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


AI-assisted analysis of tinyhumansai/openhuman@a221052e0d (2026-08-16). Data as JSON: /api/errors/268fe2c3209575da. Report an issue: GitHub.