jackwener/OpenCLI · error · CommandExecutionError
NotebookLM CreateArtifact (slides) RPC returned no slide-dec
Error message
NotebookLM CreateArtifact (slides) RPC returned no slide-deck id; the server may have rejected the request.
What it means
This CommandExecutionError is thrown when the CreateArtifact (slides) RPC ran but `parseSlidesIdFromResult` could not extract a slide-deck id from the response, indicating NotebookLM likely rejected the slide-generation request server-side.
Source
Thrown at clis/notebooklm/generate-slides.js:94
const language = String(kwargs.language ?? 'en').trim() || 'en';
requireNotebooklmExecute(kwargs.execute, 'generate NotebookLM slides');
try {
await page.goto(buildNotebooklmNotebookUrl(notebookId));
await page.wait(2);
}
catch (error) {
throw new CommandExecutionError(`Failed to open NotebookLM notebook ${notebookId}: ${error?.message || error}`);
}
await requireNotebooklmSession(page);
const sources = await listNotebooklmSourcesViaRpc(page);
const sourceIds = sources.map((s) => s.id).filter((id) => typeof id === 'string' && id);
if (sourceIds.length === 0) {
throw new EmptyResultError('notebooklm generate-slides', 'The notebook has no sources; add a source before generating a slide deck.');
}
const rpc = await callNotebooklmRpc(page, NOTEBOOKLM_CREATE_ARTIFACT_RPC_ID, buildCreateSlidesArgs(notebookId, sourceIds, { length, language }));
const slidesId = parseSlidesIdFromResult(rpc.result, [notebookId, ...sourceIds]);
if (!slidesId) {
throw new CommandExecutionError('NotebookLM CreateArtifact (slides) RPC returned no slide-deck id; the server may have rejected the request.');
}
return [{
notebook_id: notebookId,
slides_id: slidesId,
source_count: sourceIds.length,
status: 'pending',
notebook_url: buildNotebooklmNotebookUrl(notebookId),
}];
},
});
export const __test__ = { SLIDE_DECK_CONFIG_BLOCK, buildCreateSlidesArgs, parseSlideDeckLength, parseSlidesIdFromResult };
View on GitHub (pinned to 49907e53dc)
Solutions
- Retry after a delay (quota/capacity rejections are transient).
- Adjust options (fewer sources, supported language, standard --length) and re-run.
- Update opencli so parseSlidesIdFromResult matches the current NotebookLM response shape; inspect the raw rpc.result for an error message.
Example fix
// before
const slidesId = parseSlidesIdFromResult(rpc.result, ids) // null -> throw
// after
if (!rpc.result || rpc.result.error) throw new Error('NotebookLM rejected: ' + JSON.stringify(rpc.result))
const slidesId = parseSlidesIdFromResult(rpc.result, ids) Defensive patterns
Strategy: retry
Validate before calling
const sources = await listSources(notebookId);
if (!sources.length) throw new Error('no sources');
if (!Number.isInteger(length) || length <= 0) throw new Error('bad --length'); Type guard
const hasSlidesId = (result) => typeof result?.slidesId === 'string' && result.slidesId.length > 0;
Try / catch
try {
return await generateSlides({ notebookId, length });
} catch (e) {
if (String(e.message).includes('returned no slide-deck id')) {
await sleep(60000);
return await generateSlides({ notebookId, length });
}
throw e;
} Prevention
- Respect NotebookLM generation quotas; throttle requests.
- Use supported languages and standard lengths.
- Update opencli so the slides-id parser tracks the current RPC response format.
When it happens
Trigger: `callNotebooklmRpc` with NOTEBOOKLM_CREATE_ARTIFACT_RPC_ID returns a payload without a parseable slides id — quota limits, unsupported sources/language, invalid --length for the server, or an RPC response format change.
Common situations: Daily generation quota exhausted; requested deck length/language unsupported; NotebookLM returning an error payload the parser cannot read.
Related errors
- NotebookLM CreateAudioOverview RPC returned no audio id; ser
- NotebookLM CreateNote RPC returned no note id
- NotebookLM AddFileSource (o4cbdc) RPC returned no source id;
- NotebookLM AddSources RPC returned no source id; verify the
- NotebookLM CreateProject RPC returned no notebook id
AI-assisted analysis of jackwener/OpenCLI@49907e53dc (2026-08-29).
Data as JSON: /api/errors/60c71a1bb0d63dd4.
Report an issue: GitHub.