@roomi-fields/notebooklm-mcp 1.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +548 -0
  3. package/dist/auth/auth-manager.d.ts +139 -0
  4. package/dist/auth/auth-manager.d.ts.map +1 -0
  5. package/dist/auth/auth-manager.js +981 -0
  6. package/dist/auth/auth-manager.js.map +1 -0
  7. package/dist/config.d.ts +89 -0
  8. package/dist/config.d.ts.map +1 -0
  9. package/dist/config.js +216 -0
  10. package/dist/config.js.map +1 -0
  11. package/dist/errors.d.ts +26 -0
  12. package/dist/errors.d.ts.map +1 -0
  13. package/dist/errors.js +41 -0
  14. package/dist/errors.js.map +1 -0
  15. package/dist/http-wrapper.d.ts +8 -0
  16. package/dist/http-wrapper.d.ts.map +1 -0
  17. package/dist/http-wrapper.js +221 -0
  18. package/dist/http-wrapper.js.map +1 -0
  19. package/dist/index.d.ts +32 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +499 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/library/notebook-library.d.ts +81 -0
  24. package/dist/library/notebook-library.d.ts.map +1 -0
  25. package/dist/library/notebook-library.js +362 -0
  26. package/dist/library/notebook-library.js.map +1 -0
  27. package/dist/library/types.d.ts +67 -0
  28. package/dist/library/types.d.ts.map +1 -0
  29. package/dist/library/types.js +8 -0
  30. package/dist/library/types.js.map +1 -0
  31. package/dist/session/browser-session.d.ts +108 -0
  32. package/dist/session/browser-session.d.ts.map +1 -0
  33. package/dist/session/browser-session.js +630 -0
  34. package/dist/session/browser-session.js.map +1 -0
  35. package/dist/session/session-manager.d.ts +76 -0
  36. package/dist/session/session-manager.d.ts.map +1 -0
  37. package/dist/session/session-manager.js +273 -0
  38. package/dist/session/session-manager.js.map +1 -0
  39. package/dist/session/shared-context-manager.d.ts +107 -0
  40. package/dist/session/shared-context-manager.d.ts.map +1 -0
  41. package/dist/session/shared-context-manager.js +447 -0
  42. package/dist/session/shared-context-manager.js.map +1 -0
  43. package/dist/tools/index.d.ts +225 -0
  44. package/dist/tools/index.d.ts.map +1 -0
  45. package/dist/tools/index.js +1396 -0
  46. package/dist/tools/index.js.map +1 -0
  47. package/dist/types.d.ts +82 -0
  48. package/dist/types.d.ts.map +1 -0
  49. package/dist/types.js +5 -0
  50. package/dist/types.js.map +1 -0
  51. package/dist/utils/cleanup-manager.d.ts +133 -0
  52. package/dist/utils/cleanup-manager.d.ts.map +1 -0
  53. package/dist/utils/cleanup-manager.js +673 -0
  54. package/dist/utils/cleanup-manager.js.map +1 -0
  55. package/dist/utils/logger.d.ts +61 -0
  56. package/dist/utils/logger.d.ts.map +1 -0
  57. package/dist/utils/logger.js +92 -0
  58. package/dist/utils/logger.js.map +1 -0
  59. package/dist/utils/page-utils.d.ts +54 -0
  60. package/dist/utils/page-utils.d.ts.map +1 -0
  61. package/dist/utils/page-utils.js +422 -0
  62. package/dist/utils/page-utils.js.map +1 -0
  63. package/dist/utils/stealth-utils.d.ts +135 -0
  64. package/dist/utils/stealth-utils.d.ts.map +1 -0
  65. package/dist/utils/stealth-utils.js +398 -0
  66. package/dist/utils/stealth-utils.js.map +1 -0
  67. package/package.json +71 -0
package/dist/index.js ADDED
@@ -0,0 +1,499 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * NotebookLM MCP Server
4
+ *
5
+ * MCP Server for Google NotebookLM - Chat with Gemini 2.5 through NotebookLM
6
+ * with session support and human-like behavior!
7
+ *
8
+ * Features:
9
+ * - Session-based contextual conversations
10
+ * - Auto re-login on session expiry
11
+ * - Human-like typing and mouse movements
12
+ * - Persistent browser fingerprint
13
+ * - Stealth mode with Patchright
14
+ * - Claude Code integration via npx
15
+ *
16
+ * Usage:
17
+ * npx notebooklm-mcp
18
+ * node dist/index.js
19
+ *
20
+ * Environment Variables:
21
+ * NOTEBOOK_URL - Default NotebookLM notebook URL
22
+ * AUTO_LOGIN_ENABLED - Enable automatic login (true/false)
23
+ * LOGIN_EMAIL - Google email for auto-login
24
+ * LOGIN_PASSWORD - Google password for auto-login
25
+ * HEADLESS - Run browser in headless mode (true/false)
26
+ * MAX_SESSIONS - Maximum concurrent sessions (default: 10)
27
+ * SESSION_TIMEOUT - Session timeout in seconds (default: 900)
28
+ *
29
+ * Based on the Python NotebookLM API implementation
30
+ */
31
+ import { Server } from "@modelcontextprotocol/sdk/server/index.js";
32
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
33
+ import { CallToolRequestSchema, ListToolsRequestSchema, ListResourcesRequestSchema, ListResourceTemplatesRequestSchema, ReadResourceRequestSchema, CompleteRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
34
+ import { AuthManager } from "./auth/auth-manager.js";
35
+ import { SessionManager } from "./session/session-manager.js";
36
+ import { NotebookLibrary } from "./library/notebook-library.js";
37
+ import { ToolHandlers, buildToolDefinitions } from "./tools/index.js";
38
+ import { CONFIG } from "./config.js";
39
+ import { log } from "./utils/logger.js";
40
+ /**
41
+ * Main MCP Server Class
42
+ */
43
+ class NotebookLMMCPServer {
44
+ server;
45
+ authManager;
46
+ sessionManager;
47
+ library;
48
+ toolHandlers;
49
+ toolDefinitions;
50
+ constructor() {
51
+ // Initialize MCP Server
52
+ this.server = new Server({
53
+ name: "notebooklm-mcp",
54
+ version: "1.1.2",
55
+ }, {
56
+ capabilities: {
57
+ tools: {},
58
+ resources: {},
59
+ resourceTemplates: {},
60
+ },
61
+ });
62
+ // Initialize managers
63
+ this.authManager = new AuthManager();
64
+ this.sessionManager = new SessionManager(this.authManager);
65
+ this.library = new NotebookLibrary();
66
+ this.toolHandlers = new ToolHandlers(this.sessionManager, this.authManager, this.library);
67
+ // Build tool definitions with library context
68
+ this.toolDefinitions = buildToolDefinitions(this.library);
69
+ // Setup handlers
70
+ this.setupHandlers();
71
+ this.setupShutdownHandlers();
72
+ log.info("🚀 NotebookLM MCP Server initialized");
73
+ log.info(` Version: 1.1.2`);
74
+ log.info(` Node: ${process.version}`);
75
+ log.info(` Platform: ${process.platform}`);
76
+ }
77
+ /**
78
+ * Return notebook IDs matching the provided input (case-insensitive contains)
79
+ */
80
+ completeNotebookIds(input) {
81
+ const query = String(input ?? "").toLowerCase();
82
+ return this.library
83
+ .listNotebooks()
84
+ .map((nb) => nb.id)
85
+ .filter((id) => id.toLowerCase().includes(query))
86
+ .slice(0, 50);
87
+ }
88
+ /**
89
+ * Build a completion payload for MCP responses
90
+ */
91
+ buildCompletion(values) {
92
+ return {
93
+ completion: {
94
+ values,
95
+ total: values.length,
96
+ },
97
+ };
98
+ }
99
+ /**
100
+ * Setup MCP request handlers
101
+ */
102
+ setupHandlers() {
103
+ // List available tools
104
+ this.server.setRequestHandler(ListToolsRequestSchema, async () => {
105
+ log.info("📋 [MCP] list_tools request received");
106
+ return {
107
+ tools: this.toolDefinitions,
108
+ };
109
+ });
110
+ // List available resources
111
+ this.server.setRequestHandler(ListResourcesRequestSchema, async () => {
112
+ log.info("📚 [MCP] list_resources request received");
113
+ const notebooks = this.library.listNotebooks();
114
+ const resources = [
115
+ {
116
+ uri: "notebooklm://library",
117
+ name: "Notebook Library",
118
+ description: "Complete notebook library with all available knowledge sources. " +
119
+ "Read this to discover what notebooks are available. " +
120
+ "⚠️ If you think a notebook might help with the user's task, " +
121
+ "ASK THE USER FOR PERMISSION before consulting it: " +
122
+ "'Should I consult the [notebook] for this task?'",
123
+ mimeType: "application/json",
124
+ },
125
+ ];
126
+ // Add individual notebook resources
127
+ for (const notebook of notebooks) {
128
+ resources.push({
129
+ uri: `notebooklm://library/${notebook.id}`,
130
+ name: notebook.name,
131
+ description: `${notebook.description} | Topics: ${notebook.topics.join(", ")} | ` +
132
+ `💡 Use ask_question to query this notebook (ask user permission first if task isn't explicitly about these topics)`,
133
+ mimeType: "application/json",
134
+ });
135
+ }
136
+ // Add legacy metadata resource for backwards compatibility
137
+ const active = this.library.getActiveNotebook();
138
+ if (active) {
139
+ resources.push({
140
+ uri: "notebooklm://metadata",
141
+ name: "Active Notebook Metadata (Legacy)",
142
+ description: "Information about the currently active notebook. " +
143
+ "DEPRECATED: Use notebooklm://library instead for multi-notebook support. " +
144
+ "⚠️ Always ask user permission before using notebooks for tasks they didn't explicitly mention.",
145
+ mimeType: "application/json",
146
+ });
147
+ }
148
+ return { resources };
149
+ });
150
+ // List resource templates
151
+ this.server.setRequestHandler(ListResourceTemplatesRequestSchema, async () => {
152
+ log.info("📑 [MCP] list_resource_templates request received");
153
+ return {
154
+ resourceTemplates: [
155
+ {
156
+ uriTemplate: "notebooklm://library/{id}",
157
+ name: "Notebook by ID",
158
+ description: "Access a specific notebook from your library by ID. " +
159
+ "Provides detailed metadata about the notebook including topics, use cases, and usage statistics. " +
160
+ "💡 Use the 'id' parameter from list_notebooks to access specific notebooks.",
161
+ mimeType: "application/json",
162
+ },
163
+ ],
164
+ };
165
+ });
166
+ // Read resource content
167
+ this.server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
168
+ const { uri } = request.params;
169
+ log.info(`📖 [MCP] read_resource request: ${uri}`);
170
+ // Handle library resource
171
+ if (uri === "notebooklm://library") {
172
+ const notebooks = this.library.listNotebooks();
173
+ const stats = this.library.getStats();
174
+ const active = this.library.getActiveNotebook();
175
+ const libraryData = {
176
+ active_notebook: active ? {
177
+ id: active.id,
178
+ name: active.name,
179
+ description: active.description,
180
+ topics: active.topics,
181
+ } : null,
182
+ notebooks: notebooks.map(nb => ({
183
+ id: nb.id,
184
+ name: nb.name,
185
+ description: nb.description,
186
+ topics: nb.topics,
187
+ content_types: nb.content_types,
188
+ use_cases: nb.use_cases,
189
+ url: nb.url,
190
+ use_count: nb.use_count,
191
+ last_used: nb.last_used,
192
+ tags: nb.tags,
193
+ })),
194
+ stats,
195
+ };
196
+ return {
197
+ contents: [
198
+ {
199
+ uri,
200
+ mimeType: "application/json",
201
+ text: JSON.stringify(libraryData, null, 2),
202
+ },
203
+ ],
204
+ };
205
+ }
206
+ // Handle individual notebook resource
207
+ if (uri.startsWith("notebooklm://library/")) {
208
+ const prefix = "notebooklm://library/";
209
+ const encodedId = uri.slice(prefix.length);
210
+ if (!encodedId) {
211
+ throw new Error("Notebook resource requires an ID (e.g. notebooklm://library/{id})");
212
+ }
213
+ let id;
214
+ try {
215
+ id = decodeURIComponent(encodedId);
216
+ }
217
+ catch {
218
+ throw new Error(`Invalid notebook identifier encoding: ${encodedId}`);
219
+ }
220
+ if (!/^[a-z0-9][a-z0-9-]{0,62}$/i.test(id)) {
221
+ throw new Error(`Invalid notebook identifier: ${encodedId}. Notebook IDs may only contain letters, numbers, and hyphens.`);
222
+ }
223
+ const notebook = this.library.getNotebook(id);
224
+ if (!notebook) {
225
+ throw new Error(`Notebook not found: ${id}`);
226
+ }
227
+ return {
228
+ contents: [
229
+ {
230
+ uri,
231
+ mimeType: "application/json",
232
+ text: JSON.stringify(notebook, null, 2),
233
+ },
234
+ ],
235
+ };
236
+ }
237
+ // Legacy metadata resource (backwards compatibility)
238
+ if (uri === "notebooklm://metadata") {
239
+ const active = this.library.getActiveNotebook();
240
+ if (!active) {
241
+ throw new Error("No active notebook. Use notebooklm://library to see all notebooks.");
242
+ }
243
+ const metadata = {
244
+ description: active.description,
245
+ topics: active.topics,
246
+ content_types: active.content_types,
247
+ use_cases: active.use_cases,
248
+ notebook_url: active.url,
249
+ notebook_id: active.id,
250
+ last_used: active.last_used,
251
+ use_count: active.use_count,
252
+ note: "DEPRECATED: Use notebooklm://library or notebooklm://library/{id} instead",
253
+ };
254
+ return {
255
+ contents: [
256
+ {
257
+ uri,
258
+ mimeType: "application/json",
259
+ text: JSON.stringify(metadata, null, 2),
260
+ },
261
+ ],
262
+ };
263
+ }
264
+ throw new Error(`Unknown resource: ${uri}`);
265
+ });
266
+ // Argument completions (for prompt arguments)
267
+ this.server.setRequestHandler(CompleteRequestSchema, async (request) => {
268
+ const { ref, argument } = request.params;
269
+ try {
270
+ if (ref?.type === "ref/resource") {
271
+ // Complete variables for resource templates
272
+ const uri = String(ref.uri || "");
273
+ // Notebook by ID template
274
+ if (uri === "notebooklm://library/{id}" && argument?.name === "id") {
275
+ const values = this.completeNotebookIds(argument?.value);
276
+ return this.buildCompletion(values);
277
+ }
278
+ }
279
+ }
280
+ catch (e) {
281
+ log.warning(`⚠️ [MCP] completion error: ${e}`);
282
+ }
283
+ return { completion: { values: [], total: 0 } };
284
+ });
285
+ // Handle tool calls
286
+ this.server.setRequestHandler(CallToolRequestSchema, async (request) => {
287
+ const { name, arguments: args } = request.params;
288
+ const progressToken = args?._meta?.progressToken;
289
+ log.info(`🔧 [MCP] Tool call: ${name}`);
290
+ if (progressToken) {
291
+ log.info(` 📊 Progress token: ${progressToken}`);
292
+ }
293
+ // Create progress callback function
294
+ const sendProgress = async (message, progress, total) => {
295
+ if (progressToken) {
296
+ await this.server.notification({
297
+ method: "notifications/progress",
298
+ params: {
299
+ progressToken,
300
+ message,
301
+ ...(progress !== undefined && { progress }),
302
+ ...(total !== undefined && { total }),
303
+ },
304
+ });
305
+ log.dim(` 📊 Progress: ${message}`);
306
+ }
307
+ };
308
+ try {
309
+ let result;
310
+ switch (name) {
311
+ case "ask_question":
312
+ result = await this.toolHandlers.handleAskQuestion(args, sendProgress);
313
+ break;
314
+ case "add_notebook":
315
+ result = await this.toolHandlers.handleAddNotebook(args);
316
+ break;
317
+ case "list_notebooks":
318
+ result = await this.toolHandlers.handleListNotebooks();
319
+ break;
320
+ case "get_notebook":
321
+ result = await this.toolHandlers.handleGetNotebook(args);
322
+ break;
323
+ case "select_notebook":
324
+ result = await this.toolHandlers.handleSelectNotebook(args);
325
+ break;
326
+ case "update_notebook":
327
+ result = await this.toolHandlers.handleUpdateNotebook(args);
328
+ break;
329
+ case "remove_notebook":
330
+ result = await this.toolHandlers.handleRemoveNotebook(args);
331
+ break;
332
+ case "search_notebooks":
333
+ result = await this.toolHandlers.handleSearchNotebooks(args);
334
+ break;
335
+ case "get_library_stats":
336
+ result = await this.toolHandlers.handleGetLibraryStats();
337
+ break;
338
+ case "list_sessions":
339
+ result = await this.toolHandlers.handleListSessions();
340
+ break;
341
+ case "close_session":
342
+ result = await this.toolHandlers.handleCloseSession(args);
343
+ break;
344
+ case "reset_session":
345
+ result = await this.toolHandlers.handleResetSession(args);
346
+ break;
347
+ case "get_health":
348
+ result = await this.toolHandlers.handleGetHealth();
349
+ break;
350
+ case "setup_auth":
351
+ result = await this.toolHandlers.handleSetupAuth(args, sendProgress);
352
+ break;
353
+ case "re_auth":
354
+ result = await this.toolHandlers.handleReAuth(args, sendProgress);
355
+ break;
356
+ case "cleanup_data":
357
+ result = await this.toolHandlers.handleCleanupData(args);
358
+ break;
359
+ default:
360
+ log.error(`❌ [MCP] Unknown tool: ${name}`);
361
+ return {
362
+ content: [
363
+ {
364
+ type: "text",
365
+ text: JSON.stringify({
366
+ success: false,
367
+ error: `Unknown tool: ${name}`,
368
+ }, null, 2),
369
+ },
370
+ ],
371
+ };
372
+ }
373
+ // Return result
374
+ return {
375
+ content: [
376
+ {
377
+ type: "text",
378
+ text: JSON.stringify(result, null, 2),
379
+ },
380
+ ],
381
+ };
382
+ }
383
+ catch (error) {
384
+ const errorMessage = error instanceof Error ? error.message : String(error);
385
+ log.error(`❌ [MCP] Tool execution error: ${errorMessage}`);
386
+ return {
387
+ content: [
388
+ {
389
+ type: "text",
390
+ text: JSON.stringify({
391
+ success: false,
392
+ error: errorMessage,
393
+ }, null, 2),
394
+ },
395
+ ],
396
+ };
397
+ }
398
+ });
399
+ }
400
+ /**
401
+ * Setup graceful shutdown handlers
402
+ */
403
+ setupShutdownHandlers() {
404
+ let shuttingDown = false;
405
+ const shutdown = async (signal) => {
406
+ if (shuttingDown) {
407
+ return;
408
+ }
409
+ shuttingDown = true;
410
+ log.info(`\n🛑 Received ${signal}, shutting down gracefully...`);
411
+ try {
412
+ // Cleanup tool handlers (closes all sessions)
413
+ await this.toolHandlers.cleanup();
414
+ // Close server
415
+ await this.server.close();
416
+ log.success("✅ Shutdown complete");
417
+ process.exit(0);
418
+ }
419
+ catch (error) {
420
+ log.error(`❌ Error during shutdown: ${error}`);
421
+ process.exit(1);
422
+ }
423
+ };
424
+ const requestShutdown = (signal) => {
425
+ void shutdown(signal);
426
+ };
427
+ process.on("SIGINT", () => requestShutdown("SIGINT"));
428
+ process.on("SIGTERM", () => requestShutdown("SIGTERM"));
429
+ process.on("uncaughtException", (error) => {
430
+ log.error(`💥 Uncaught exception: ${error}`);
431
+ log.error(error.stack || "");
432
+ requestShutdown("uncaughtException");
433
+ });
434
+ process.on("unhandledRejection", (reason, promise) => {
435
+ log.error(`💥 Unhandled rejection at: ${promise}`);
436
+ log.error(`Reason: ${reason}`);
437
+ requestShutdown("unhandledRejection");
438
+ });
439
+ }
440
+ /**
441
+ * Start the MCP server
442
+ */
443
+ async start() {
444
+ log.info("🎯 Starting NotebookLM MCP Server...");
445
+ log.info("");
446
+ log.info("📝 Configuration:");
447
+ log.info(` Config Dir: ${CONFIG.configDir}`);
448
+ log.info(` Data Dir: ${CONFIG.dataDir}`);
449
+ log.info(` Headless: ${CONFIG.headless}`);
450
+ log.info(` Max Sessions: ${CONFIG.maxSessions}`);
451
+ log.info(` Session Timeout: ${CONFIG.sessionTimeout}s`);
452
+ log.info(` Stealth: ${CONFIG.stealthEnabled}`);
453
+ log.info("");
454
+ // Create stdio transport
455
+ const transport = new StdioServerTransport();
456
+ // Connect server to transport
457
+ await this.server.connect(transport);
458
+ log.success("✅ MCP Server connected via stdio");
459
+ log.success("🎉 Ready to receive requests from Claude Code!");
460
+ log.info("");
461
+ log.info("💡 Available tools:");
462
+ for (const tool of this.toolDefinitions) {
463
+ const desc = tool.description ? tool.description.split('\n')[0] : 'No description'; // First line only
464
+ log.info(` - ${tool.name}: ${desc.substring(0, 80)}...`);
465
+ }
466
+ log.info("");
467
+ log.info("📖 For documentation, see: README.md");
468
+ log.info("📖 For MCP details, see: MCP_INFOS.md");
469
+ log.info("");
470
+ }
471
+ }
472
+ /**
473
+ * Main entry point
474
+ */
475
+ async function main() {
476
+ // Print banner
477
+ console.error("╔══════════════════════════════════════════════════════════╗");
478
+ console.error("║ ║");
479
+ console.error("║ NotebookLM MCP Server v1.1.2 ║");
480
+ console.error("║ ║");
481
+ console.error("║ Chat with Gemini 2.5 through NotebookLM via MCP ║");
482
+ console.error("║ ║");
483
+ console.error("╚══════════════════════════════════════════════════════════╝");
484
+ console.error("");
485
+ try {
486
+ const server = new NotebookLMMCPServer();
487
+ await server.start();
488
+ }
489
+ catch (error) {
490
+ log.error(`💥 Fatal error starting server: ${error}`);
491
+ if (error instanceof Error) {
492
+ log.error(error.stack || "");
493
+ }
494
+ process.exit(1);
495
+ }
496
+ }
497
+ // Run the server
498
+ main();
499
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * NotebookLM Library Manager
3
+ *
4
+ * Manages a persistent library of NotebookLM notebooks.
5
+ * Allows Claude to autonomously add, remove, and switch between
6
+ * multiple notebooks based on the task at hand.
7
+ */
8
+ import type { NotebookEntry, AddNotebookInput, UpdateNotebookInput, LibraryStats } from "./types.js";
9
+ import type { SessionManager } from "../session/session-manager.js";
10
+ export declare class NotebookLibrary {
11
+ private libraryPath;
12
+ private library;
13
+ private sessionManager?;
14
+ constructor(sessionManager?: SessionManager);
15
+ /**
16
+ * Load library from disk, or create default if not exists
17
+ */
18
+ private loadLibrary;
19
+ /**
20
+ * Create default library from current CONFIG
21
+ */
22
+ private createDefaultLibrary;
23
+ /**
24
+ * Save library to disk
25
+ */
26
+ private saveLibrary;
27
+ /**
28
+ * Generate a unique ID from a string (slug format)
29
+ */
30
+ private generateId;
31
+ /**
32
+ * Add a new notebook to the library
33
+ */
34
+ addNotebook(input: AddNotebookInput): Promise<NotebookEntry>;
35
+ /**
36
+ * Validate NotebookLM URL format
37
+ */
38
+ private isValidNotebookUrl;
39
+ /**
40
+ * Validate that the notebook exists and is accessible
41
+ * Opens the notebook briefly to check if it loads correctly
42
+ */
43
+ validateNotebookExists(url: string): Promise<void>;
44
+ /**
45
+ * List all notebooks in library
46
+ */
47
+ listNotebooks(): NotebookEntry[];
48
+ /**
49
+ * Get a specific notebook by ID
50
+ */
51
+ getNotebook(id: string): NotebookEntry | null;
52
+ /**
53
+ * Get the currently active notebook
54
+ */
55
+ getActiveNotebook(): NotebookEntry | null;
56
+ /**
57
+ * Select a notebook as active
58
+ */
59
+ selectNotebook(id: string): NotebookEntry;
60
+ /**
61
+ * Update notebook metadata
62
+ */
63
+ updateNotebook(input: UpdateNotebookInput): NotebookEntry;
64
+ /**
65
+ * Remove notebook from library
66
+ */
67
+ removeNotebook(id: string): boolean;
68
+ /**
69
+ * Increment use count for a notebook
70
+ */
71
+ incrementUseCount(id: string): NotebookEntry | null;
72
+ /**
73
+ * Get library statistics
74
+ */
75
+ getStats(): LibraryStats;
76
+ /**
77
+ * Search notebooks by query (searches name, description, topics)
78
+ */
79
+ searchNotebooks(query: string): NotebookEntry[];
80
+ }
81
+ //# sourceMappingURL=notebook-library.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notebook-library.d.ts","sourceRoot":"","sources":["../../src/library/notebook-library.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,OAAO,KAAK,EACV,aAAa,EAEb,gBAAgB,EAChB,mBAAmB,EACnB,YAAY,EACb,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAEpE,qBAAa,eAAe;IAC1B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,cAAc,CAAC,CAAiB;gBAE5B,cAAc,CAAC,EAAE,cAAc;IAa3C;;OAEG;IACH,OAAO,CAAC,WAAW;IAmBnB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAoC5B;;OAEG;IACH,OAAO,CAAC,WAAW;IAanB;;OAEG;IACH,OAAO,CAAC,UAAU;IAkBlB;;OAEG;IACG,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,aAAa,CAAC;IAsElE;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAa1B;;;OAGG;IACG,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAwDxD;;OAEG;IACH,aAAa,IAAI,aAAa,EAAE;IAIhC;;OAEG;IACH,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;IAI7C;;OAEG;IACH,iBAAiB,IAAI,aAAa,GAAG,IAAI;IAOzC;;OAEG;IACH,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa;IAwBzC;;OAEG;IACH,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,aAAa;IA4BzD;;OAEG;IACH,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAuBnC;;OAEG;IACH,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;IAoBnD;;OAEG;IACH,QAAQ,IAAI,YAAY;IAmBxB;;OAEG;IACH,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,EAAE;CAUhD"}