{"record":{"id":"03f2235e524a06d9","repo":"jackwener/OpenCLI","slug":"notebooklm-guide-was-not-available-for-source-m","errorCode":null,"errorMessage":"NotebookLM guide was not available for source \"${matched.title}\".","messagePattern":"NotebookLM guide was not available for source \"(.+?)\"\\.","errorType":"exception","errorClass":"EmptyResultError","httpStatus":null,"severity":"error","filePath":"clis/notebooklm/source-guide.js","lineNumber":42,"sourceCode":"        await requireNotebooklmSession(page);\n        const state = await getNotebooklmPageState(page);\n        if (state.kind !== 'notebook') {\n            throw new EmptyResultError('opencli notebooklm source-guide', 'No NotebookLM notebook is open in the adapter session. Run `opencli notebooklm open <notebook>` first.');\n        }\n        const rpcRows = await listNotebooklmSourcesViaRpc(page).catch(() => []);\n        const rows = rpcRows.length > 0 ? rpcRows : await listNotebooklmSourcesFromPage(page);\n        if (rows.length === 0) {\n            throw new EmptyResultError('opencli notebooklm source-guide', 'No NotebookLM sources were found on the current page.');\n        }\n        const query = typeof kwargs.source === 'string' ? kwargs.source : String(kwargs.source ?? '');\n        const matched = findNotebooklmSourceRow(rows, query);\n        if (!matched) {\n            throw new EmptyResultError('opencli notebooklm source-guide', `Source \"${query}\" was not found in the current notebook.`);\n        }\n        const guide = await getNotebooklmSourceGuideViaRpc(page, matched).catch(() => null);\n        if (guide)\n            return [guide];\n        throw new EmptyResultError('opencli notebooklm source-guide', `NotebookLM guide was not available for source \"${matched.title}\".`);\n    },\n});\n","sourceCodeStart":24,"sourceCodeEnd":45,"githubUrl":"https://github.com/jackwener/OpenCLI/blob/49907e53dc3ade5c223ff0c4c2c2785687cec4e6/clis/notebooklm/source-guide.js#L24-L45","documentation":"opencli notebooklm source-guide throws this EmptyResultError when the source row matched, but getNotebooklmSourceGuideViaRpc returned null (it failed or produced no guide, after .catch(() => null)). NotebookLM may not have generated an Audio Overview/FAQ-style guide for that source, or the guide RPC was unavailable.","triggerScenarios":"Guide for the matched source was never generated by NotebookLM, the guide RPC call failed (network/auth/server error swallowed by the catch), or NotebookLM's guide data shape changed so parsing returned nothing.","commonSituations":"Very recently added source whose guide hasn't been computed yet; transient Google-side RPC failure; adapter outdated after a NotebookLM protocol change; account lacks access to the guide feature.","solutions":["Retry the command after a short delay to let NotebookLM generate the guide or clear a transient RPC failure.","Confirm the source opens correctly in the NotebookLM web UI and that a guide exists there.","Reopen the notebook (`opencli notebooklm open <notebook>`) to refresh the session, then retry; if persistent, update opencli for NotebookLM changes."],"exampleFix":"// before\nopencli notebooklm source-guide --source \"New Doc\"   # guide not yet generated\n// after\nsleep 30 && opencli notebooklm open \"Product Docs\" && opencli notebooklm source-guide --source \"New Doc\"","handlingStrategy":"retry","validationCode":"const guide = await exec(`opencli notebooklm source-guide --source ${JSON.stringify(title)} --json`).catch(() => null);\nif (!guide) console.warn('Guide unavailable yet; will retry after generation delay');","typeGuard":"function hasGuide(guide) {\n  return guide != null && typeof guide === 'object' && (typeof guide.summary === 'string' || Array.isArray(guide.faq));\n}","tryCatchPattern":"let guide = null;\nfor (let attempt = 0; attempt < 3 && !guide; attempt++) {\n  try {\n    guide = await run('opencli notebooklm source-guide', ['--source', title]);\n  } catch (err) {\n    if (/guide was not available/.test(err.message) && attempt < 2) {\n      await delay(15000 * (attempt + 1));\n      continue;\n    }\n    throw err;\n  }\n}","preventionTips":["Wait after adding a new source before requesting its guide (generation is async on Google's side).","Retry with backoff on guide-unavailable errors.","Confirm in the NotebookLM web UI that a guide exists for the source.","Keep opencli updated for NotebookLM RPC/protocol changes."],"tags":["notebooklm","rpc-failure","empty-result"],"backgroundTag":"notebooklm-guide-unavailable","analyzedSha":"49907e53dc3ade5c223ff0c4c2c2785687cec4e6","analyzedAt":"2026-08-29T08:14:47.543Z","schemaVersion":2},"datasetVersion":"2026-08-29T12:17:43.993Z"}