{"record":{"id":"106d283121c9bb5a","repo":"jackwener/OpenCLI","slug":"no-notebooklm-sources-were-found-on-the-current-pa-106d28","errorCode":null,"errorMessage":"No NotebookLM sources were found on the current page.","messagePattern":"No NotebookLM sources were found on the current page\\.","errorType":"exception","errorClass":"EmptyResultError","httpStatus":null,"severity":"error","filePath":"clis/notebooklm/source-list.js","lineNumber":28,"sourceCode":"    domain: NOTEBOOKLM_DOMAIN,\n    strategy: Strategy.COOKIE,\n    browser: true,\n    navigateBefore: false,\n    args: [],\n    columns: ['title', 'id', 'type', 'size', 'created_at', 'updated_at', 'url', 'source'],\n    func: async (page) => {\n        await requireNotebooklmSession(page);\n        const state = await getNotebooklmPageState(page);\n        if (state.kind !== 'notebook') {\n            throw new EmptyResultError('opencli notebooklm source-list', 'No NotebookLM notebook is open in the adapter session. Run `opencli notebooklm open <notebook>` first.');\n        }\n        const rpcRows = await listNotebooklmSourcesViaRpc(page).catch(() => []);\n        if (rpcRows.length > 0)\n            return rpcRows;\n        const domRows = await listNotebooklmSourcesFromPage(page);\n        if (domRows.length > 0)\n            return domRows;\n        throw new EmptyResultError('opencli notebooklm source-list', 'No NotebookLM sources were found on the current page.');\n    },\n});\n","sourceCodeStart":10,"sourceCodeEnd":31,"githubUrl":"https://github.com/jackwener/OpenCLI/blob/49907e53dc3ade5c223ff0c4c2c2785687cec4e6/clis/notebooklm/source-list.js#L10-L31","documentation":"opencli notebooklm source-list throws this EmptyResultError when a notebook page is open but both the RPC-based listing (listNotebooklmSourcesViaRpc, errors swallowed to []) and the DOM fallback (listNotebooklmSourcesFromPage) returned zero rows. There are genuinely no sources visible to the adapter.","triggerScenarios":"source-list on an empty notebook; both listing strategies fail during page load/animation; NotebookLM UI change breaks DOM selectors while the RPC endpoint errors; sources section collapsed/not rendered at scrape time.","commonSituations":"Newly created empty notebook; flaky network preventing the internal batchexecute RPC; adapter outdated after a NotebookLM frontend update; scraping raced ahead of the source panel rendering.","solutions":["Add a source (`opencli notebooklm add-source`) if the notebook is truly empty.","Reopen/reload the notebook (`opencli notebooklm open <notebook>`) and retry after the UI settles.","Retry after a delay; if both strategies keep failing on a non-empty notebook, update opencli to match the current NotebookLM UI/RPC."],"exampleFix":"// before\nopencli notebooklm source-list   # empty notebook\n// after\nopencli notebooklm add-source \"overview.md\"\nopencli notebooklm source-list","handlingStrategy":"fallback","validationCode":"const sources = await exec('opencli notebooklm source-list --json');\nif (!Array.isArray(sources) || sources.length === 0) {\n  console.warn('No sources listed — notebook may be empty or still loading');\n}","typeGuard":"function hasSources(rows) {\n  return Array.isArray(rows) && rows.length > 0 && typeof rows[0]?.id === 'string';\n}","tryCatchPattern":"let sources = [];\ntry {\n  sources = await run('opencli notebooklm source-list');\n} catch (err) {\n  if (/No NotebookLM sources were found/.test(err.message)) {\n    await run('opencli notebooklm open', [notebook]);\n    await delay(3000);\n    sources = await run('opencli notebooklm source-list').catch(() => []);\n  } else {\n    throw err;\n  }\n}","preventionTips":["Populate the notebook with add-source before listing in pipelines.","Reopen and wait for render if the notebook was just opened.","Retry once on empty results before failing the pipeline.","Track NotebookLM UI updates; empty listings on populated notebooks indicate an outdated adapter."],"tags":["notebooklm","empty-result","browser-scraping"],"backgroundTag":"notebooklm-empty-source-list","analyzedSha":"49907e53dc3ade5c223ff0c4c2c2785687cec4e6","analyzedAt":"2026-08-29T08:14:47.543Z","schemaVersion":2},"datasetVersion":"2026-08-29T12:17:43.993Z"}