{"record":{"id":"268fe2c3209575da","repo":"tinyhumansai/openhuman","slug":"core-rejected-the-meet-agent-get-call-detail-reque","errorCode":null,"errorMessage":"Core rejected the meet_agent_get_call_detail request.","messagePattern":"Core rejected the meet_agent_get_call_detail request\\.","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"app/src/services/meetCallService.ts","lineNumber":133,"sourceCode":"  if (!result?.ok) {\n    throw new Error('Core rejected the meet_agent_list_calls request.');\n  }\n  return result.calls ?? [];\n}\n\n/**\n * Fetch the transcript + summary for one completed call. Lazy-loaded when the\n * user expands a recent-call row. Returns `null` when the core has no detail\n * for this call (older calls recorded before the feature, or a failed write) —\n * the panel renders a \"no transcript yet\" state in that case.\n */\nexport async function getMeetCallDetail(requestId: string): Promise<MeetCallDetail | null> {\n  const result = await callCoreRpc<CoreGetCallDetailResponse>({\n    method: 'openhuman.meet_agent_get_call_detail',\n    params: { request_id: requestId },\n  });\n  if (!result?.ok) {\n    throw new Error('Core rejected the meet_agent_get_call_detail request.');\n  }\n  return result.detail ?? null;\n}\n\n// ---------------------------------------------------------------------------\n// Transcript parsing\n// ---------------------------------------------------------------------------\n\n/** A transcript line with its parsed timestamp/speaker prefix stripped out. */\ninterface ParsedTranscriptLine {\n  timestamp: string | null;\n  speaker: string | null;\n  text: string;\n  role: string;\n}\n\nconst TRANSCRIPT_PREFIX_RE = /^\\[(\\d{1,2}:\\d{2})\\]\\s*\\[([^\\]]+)\\]\\s*(.*)/s;\n","sourceCodeStart":115,"sourceCodeEnd":151,"githubUrl":"https://github.com/tinyhumansai/openhuman/blob/a221052e0df5b1f7598fceba7329fd1af95d6699/app/src/services/meetCallService.ts#L115-L151","documentation":"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.","triggerScenarios":"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.","commonSituations":"User or cleaner deleted files under the recordings directory; app crashed mid-write during a call; workspace migrated between machines with partial copy.","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"],"exampleFix":"// before\nconst detail = await getMeetCallDetail(requestId);\n\n// after — a failed read is indistinguishable from 'none' to the user\nlet detail: MeetCallDetail | null = null;\ntry { detail = await getMeetCallDetail(requestId); }\ncatch { detail = null; } // render 'no transcript yet'","handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"let detail: MeetCallDetail | null = null;\ntry { detail = await getMeetCallDetail(requestId); }\ncatch { detail = null; } // same UI state as 'no transcript yet'","preventionTips":["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"],"tags":["meet","core-rpc","json-rpc","transcript"],"backgroundTag":null,"analyzedSha":"a221052e0df5b1f7598fceba7329fd1af95d6699","analyzedAt":"2026-08-16T12:47:06.542Z","schemaVersion":2},"datasetVersion":"2026-08-16T13:17:31.715Z"}