source-list.js
1 import { cli, Strategy } from '@jackwener/opencli/registry'; 2 import { EmptyResultError } from '@jackwener/opencli/errors'; 3 import { NOTEBOOKLM_DOMAIN, NOTEBOOKLM_SITE } from './shared.js'; 4 import { getNotebooklmPageState, listNotebooklmSourcesFromPage, listNotebooklmSourcesViaRpc, requireNotebooklmSession, } from './utils.js'; 5 cli({ 6 site: NOTEBOOKLM_SITE, 7 name: 'source-list', 8 description: 'List sources for the currently opened NotebookLM notebook', 9 domain: NOTEBOOKLM_DOMAIN, 10 strategy: Strategy.COOKIE, 11 browser: true, 12 navigateBefore: false, 13 args: [], 14 columns: ['title', 'id', 'type', 'size', 'created_at', 'updated_at', 'url', 'source'], 15 func: async (page) => { 16 await requireNotebooklmSession(page); 17 const state = await getNotebooklmPageState(page); 18 if (state.kind !== 'notebook') { 19 throw new EmptyResultError('opencli notebooklm source-list', 'No NotebookLM notebook is open in the automation workspace. Run `opencli notebooklm open <notebook>` first.'); 20 } 21 const rpcRows = await listNotebooklmSourcesViaRpc(page).catch(() => []); 22 if (rpcRows.length > 0) 23 return rpcRows; 24 const domRows = await listNotebooklmSourcesFromPage(page); 25 if (domRows.length > 0) 26 return domRows; 27 throw new EmptyResultError('opencli notebooklm source-list', 'No NotebookLM sources were found on the current page.'); 28 }, 29 });