@pan-sec/notebooklm-mcp 1.4.0

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 (145) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +289 -0
  3. package/SECURITY.md +539 -0
  4. package/dist/auth/auth-manager.d.ts +137 -0
  5. package/dist/auth/auth-manager.d.ts.map +1 -0
  6. package/dist/auth/auth-manager.js +984 -0
  7. package/dist/auth/auth-manager.js.map +1 -0
  8. package/dist/auth/mcp-auth.d.ts +102 -0
  9. package/dist/auth/mcp-auth.d.ts.map +1 -0
  10. package/dist/auth/mcp-auth.js +286 -0
  11. package/dist/auth/mcp-auth.js.map +1 -0
  12. package/dist/config.d.ts +89 -0
  13. package/dist/config.d.ts.map +1 -0
  14. package/dist/config.js +216 -0
  15. package/dist/config.js.map +1 -0
  16. package/dist/errors.d.ts +26 -0
  17. package/dist/errors.d.ts.map +1 -0
  18. package/dist/errors.js +41 -0
  19. package/dist/errors.js.map +1 -0
  20. package/dist/index.d.ts +32 -0
  21. package/dist/index.d.ts.map +1 -0
  22. package/dist/index.js +371 -0
  23. package/dist/index.js.map +1 -0
  24. package/dist/library/notebook-library.d.ts +70 -0
  25. package/dist/library/notebook-library.d.ts.map +1 -0
  26. package/dist/library/notebook-library.js +279 -0
  27. package/dist/library/notebook-library.js.map +1 -0
  28. package/dist/library/types.d.ts +67 -0
  29. package/dist/library/types.d.ts.map +1 -0
  30. package/dist/library/types.js +8 -0
  31. package/dist/library/types.js.map +1 -0
  32. package/dist/resources/resource-handlers.d.ts +22 -0
  33. package/dist/resources/resource-handlers.d.ts.map +1 -0
  34. package/dist/resources/resource-handlers.js +216 -0
  35. package/dist/resources/resource-handlers.js.map +1 -0
  36. package/dist/session/browser-session.d.ts +108 -0
  37. package/dist/session/browser-session.d.ts.map +1 -0
  38. package/dist/session/browser-session.js +621 -0
  39. package/dist/session/browser-session.js.map +1 -0
  40. package/dist/session/session-manager.d.ts +77 -0
  41. package/dist/session/session-manager.d.ts.map +1 -0
  42. package/dist/session/session-manager.js +314 -0
  43. package/dist/session/session-manager.js.map +1 -0
  44. package/dist/session/session-timeout.d.ts +122 -0
  45. package/dist/session/session-timeout.d.ts.map +1 -0
  46. package/dist/session/session-timeout.js +281 -0
  47. package/dist/session/session-timeout.js.map +1 -0
  48. package/dist/session/shared-context-manager.d.ts +107 -0
  49. package/dist/session/shared-context-manager.d.ts.map +1 -0
  50. package/dist/session/shared-context-manager.js +447 -0
  51. package/dist/session/shared-context-manager.js.map +1 -0
  52. package/dist/tools/definitions/ask-question.d.ts +8 -0
  53. package/dist/tools/definitions/ask-question.d.ts.map +1 -0
  54. package/dist/tools/definitions/ask-question.js +211 -0
  55. package/dist/tools/definitions/ask-question.js.map +1 -0
  56. package/dist/tools/definitions/notebook-management.d.ts +3 -0
  57. package/dist/tools/definitions/notebook-management.d.ts.map +1 -0
  58. package/dist/tools/definitions/notebook-management.js +243 -0
  59. package/dist/tools/definitions/notebook-management.js.map +1 -0
  60. package/dist/tools/definitions/session-management.d.ts +3 -0
  61. package/dist/tools/definitions/session-management.d.ts.map +1 -0
  62. package/dist/tools/definitions/session-management.js +41 -0
  63. package/dist/tools/definitions/session-management.js.map +1 -0
  64. package/dist/tools/definitions/system.d.ts +3 -0
  65. package/dist/tools/definitions/system.d.ts.map +1 -0
  66. package/dist/tools/definitions/system.js +143 -0
  67. package/dist/tools/definitions/system.js.map +1 -0
  68. package/dist/tools/definitions.d.ts +12 -0
  69. package/dist/tools/definitions.d.ts.map +1 -0
  70. package/dist/tools/definitions.js +26 -0
  71. package/dist/tools/definitions.js.map +1 -0
  72. package/dist/tools/handlers.d.ts +213 -0
  73. package/dist/tools/handlers.d.ts.map +1 -0
  74. package/dist/tools/handlers.js +813 -0
  75. package/dist/tools/handlers.js.map +1 -0
  76. package/dist/tools/index.d.ts +8 -0
  77. package/dist/tools/index.d.ts.map +1 -0
  78. package/dist/tools/index.js +8 -0
  79. package/dist/tools/index.js.map +1 -0
  80. package/dist/types.d.ts +82 -0
  81. package/dist/types.d.ts.map +1 -0
  82. package/dist/types.js +5 -0
  83. package/dist/types.js.map +1 -0
  84. package/dist/utils/audit-logger.d.ts +140 -0
  85. package/dist/utils/audit-logger.d.ts.map +1 -0
  86. package/dist/utils/audit-logger.js +361 -0
  87. package/dist/utils/audit-logger.js.map +1 -0
  88. package/dist/utils/cert-pinning.d.ts +97 -0
  89. package/dist/utils/cert-pinning.d.ts.map +1 -0
  90. package/dist/utils/cert-pinning.js +328 -0
  91. package/dist/utils/cert-pinning.js.map +1 -0
  92. package/dist/utils/cleanup-manager.d.ts +133 -0
  93. package/dist/utils/cleanup-manager.d.ts.map +1 -0
  94. package/dist/utils/cleanup-manager.js +673 -0
  95. package/dist/utils/cleanup-manager.js.map +1 -0
  96. package/dist/utils/cli-handler.d.ts +16 -0
  97. package/dist/utils/cli-handler.d.ts.map +1 -0
  98. package/dist/utils/cli-handler.js +102 -0
  99. package/dist/utils/cli-handler.js.map +1 -0
  100. package/dist/utils/crypto.d.ts +175 -0
  101. package/dist/utils/crypto.d.ts.map +1 -0
  102. package/dist/utils/crypto.js +612 -0
  103. package/dist/utils/crypto.js.map +1 -0
  104. package/dist/utils/logger.d.ts +61 -0
  105. package/dist/utils/logger.d.ts.map +1 -0
  106. package/dist/utils/logger.js +92 -0
  107. package/dist/utils/logger.js.map +1 -0
  108. package/dist/utils/page-utils.d.ts +54 -0
  109. package/dist/utils/page-utils.d.ts.map +1 -0
  110. package/dist/utils/page-utils.js +405 -0
  111. package/dist/utils/page-utils.js.map +1 -0
  112. package/dist/utils/response-validator.d.ts +98 -0
  113. package/dist/utils/response-validator.d.ts.map +1 -0
  114. package/dist/utils/response-validator.js +352 -0
  115. package/dist/utils/response-validator.js.map +1 -0
  116. package/dist/utils/secrets-scanner.d.ts +126 -0
  117. package/dist/utils/secrets-scanner.d.ts.map +1 -0
  118. package/dist/utils/secrets-scanner.js +443 -0
  119. package/dist/utils/secrets-scanner.js.map +1 -0
  120. package/dist/utils/secure-memory.d.ts +130 -0
  121. package/dist/utils/secure-memory.d.ts.map +1 -0
  122. package/dist/utils/secure-memory.js +279 -0
  123. package/dist/utils/secure-memory.js.map +1 -0
  124. package/dist/utils/security.d.ts +83 -0
  125. package/dist/utils/security.d.ts.map +1 -0
  126. package/dist/utils/security.js +272 -0
  127. package/dist/utils/security.js.map +1 -0
  128. package/dist/utils/settings-manager.d.ts +37 -0
  129. package/dist/utils/settings-manager.d.ts.map +1 -0
  130. package/dist/utils/settings-manager.js +125 -0
  131. package/dist/utils/settings-manager.js.map +1 -0
  132. package/dist/utils/stealth-utils.d.ts +135 -0
  133. package/dist/utils/stealth-utils.d.ts.map +1 -0
  134. package/dist/utils/stealth-utils.js +398 -0
  135. package/dist/utils/stealth-utils.js.map +1 -0
  136. package/dist/utils/tool-validation.d.ts +93 -0
  137. package/dist/utils/tool-validation.d.ts.map +1 -0
  138. package/dist/utils/tool-validation.js +277 -0
  139. package/dist/utils/tool-validation.js.map +1 -0
  140. package/docs/SECURITY_IMPLEMENTATION_PLAN.md +437 -0
  141. package/docs/configuration.md +94 -0
  142. package/docs/tools.md +34 -0
  143. package/docs/troubleshooting.md +59 -0
  144. package/docs/usage-guide.md +245 -0
  145. package/package.json +82 -0
package/dist/index.js ADDED
@@ -0,0 +1,371 @@
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, } 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 { ResourceHandlers } from "./resources/resource-handlers.js";
39
+ import { SettingsManager } from "./utils/settings-manager.js";
40
+ import { CliHandler } from "./utils/cli-handler.js";
41
+ import { CONFIG } from "./config.js";
42
+ import { log } from "./utils/logger.js";
43
+ import { audit, getAuditLogger } from "./utils/audit-logger.js";
44
+ import { checkSecurityContext } from "./utils/security.js";
45
+ import { getMCPAuthenticator, authenticateMCPRequest } from "./auth/mcp-auth.js";
46
+ /**
47
+ * Main MCP Server Class
48
+ */
49
+ class NotebookLMMCPServer {
50
+ server;
51
+ authManager;
52
+ sessionManager;
53
+ library;
54
+ toolHandlers;
55
+ resourceHandlers;
56
+ settingsManager;
57
+ toolDefinitions;
58
+ constructor() {
59
+ // Initialize MCP Server
60
+ this.server = new Server({
61
+ name: "notebooklm-mcp",
62
+ version: "1.1.0",
63
+ }, {
64
+ capabilities: {
65
+ tools: {},
66
+ resources: {},
67
+ resourceTemplates: {},
68
+ prompts: {}, // Required for completion/complete support in some clients
69
+ logging: {},
70
+ },
71
+ });
72
+ // Initialize managers
73
+ this.authManager = new AuthManager();
74
+ this.sessionManager = new SessionManager(this.authManager);
75
+ this.library = new NotebookLibrary();
76
+ this.settingsManager = new SettingsManager();
77
+ // Initialize handlers
78
+ this.toolHandlers = new ToolHandlers(this.sessionManager, this.authManager, this.library);
79
+ this.resourceHandlers = new ResourceHandlers(this.library);
80
+ // Build and Filter tool definitions
81
+ const allTools = buildToolDefinitions(this.library);
82
+ this.toolDefinitions = this.settingsManager.filterTools(allTools);
83
+ // Setup handlers
84
+ this.setupHandlers();
85
+ this.setupShutdownHandlers();
86
+ const activeSettings = this.settingsManager.getEffectiveSettings();
87
+ log.info("🚀 NotebookLM MCP Server initialized");
88
+ log.info(` Version: 1.1.0`);
89
+ log.info(` Node: ${process.version}`);
90
+ log.info(` Platform: ${process.platform}`);
91
+ log.info(` Profile: ${activeSettings.profile} (${this.toolDefinitions.length} tools active)`);
92
+ }
93
+ /**
94
+ * Setup MCP request handlers
95
+ */
96
+ setupHandlers() {
97
+ // Register Resource Handlers (Resources, Templates, Completions)
98
+ this.resourceHandlers.registerHandlers(this.server);
99
+ // List available tools
100
+ this.server.setRequestHandler(ListToolsRequestSchema, async () => {
101
+ log.info("📋 [MCP] list_tools request received");
102
+ return {
103
+ tools: this.toolDefinitions,
104
+ };
105
+ });
106
+ // Handle tool calls
107
+ this.server.setRequestHandler(CallToolRequestSchema, async (request) => {
108
+ const { name, arguments: args } = request.params;
109
+ const progressToken = args?._meta?.progressToken;
110
+ const authToken = args?._meta?.authToken || process.env.NLMCP_AUTH_TOKEN;
111
+ log.info(`🔧 [MCP] Tool call: ${name}`);
112
+ if (progressToken) {
113
+ log.info(` 📊 Progress token: ${progressToken}`);
114
+ }
115
+ // === SECURITY: MCP Authentication ===
116
+ const authResult = await authenticateMCPRequest(authToken, name);
117
+ if (!authResult.authenticated) {
118
+ log.warning(`🔒 [MCP] Authentication failed for tool: ${name}`);
119
+ return {
120
+ content: [
121
+ {
122
+ type: "text",
123
+ text: JSON.stringify({
124
+ success: false,
125
+ error: authResult.error || "Authentication required",
126
+ }),
127
+ },
128
+ ],
129
+ };
130
+ }
131
+ // Create progress callback function
132
+ const sendProgress = async (message, progress, total) => {
133
+ if (progressToken) {
134
+ await this.server.notification({
135
+ method: "notifications/progress",
136
+ params: {
137
+ progressToken,
138
+ message,
139
+ ...(progress !== undefined && { progress }),
140
+ ...(total !== undefined && { total }),
141
+ },
142
+ });
143
+ log.dim(` 📊 Progress: ${message}`);
144
+ }
145
+ };
146
+ try {
147
+ let result;
148
+ switch (name) {
149
+ case "ask_question":
150
+ result = await this.toolHandlers.handleAskQuestion(args, sendProgress);
151
+ break;
152
+ case "add_notebook":
153
+ result = await this.toolHandlers.handleAddNotebook(args);
154
+ break;
155
+ case "list_notebooks":
156
+ result = await this.toolHandlers.handleListNotebooks();
157
+ break;
158
+ case "get_notebook":
159
+ result = await this.toolHandlers.handleGetNotebook(args);
160
+ break;
161
+ case "select_notebook":
162
+ result = await this.toolHandlers.handleSelectNotebook(args);
163
+ break;
164
+ case "update_notebook":
165
+ result = await this.toolHandlers.handleUpdateNotebook(args);
166
+ break;
167
+ case "remove_notebook":
168
+ result = await this.toolHandlers.handleRemoveNotebook(args);
169
+ break;
170
+ case "search_notebooks":
171
+ result = await this.toolHandlers.handleSearchNotebooks(args);
172
+ break;
173
+ case "get_library_stats":
174
+ result = await this.toolHandlers.handleGetLibraryStats();
175
+ break;
176
+ case "list_sessions":
177
+ result = await this.toolHandlers.handleListSessions();
178
+ break;
179
+ case "close_session":
180
+ result = await this.toolHandlers.handleCloseSession(args);
181
+ break;
182
+ case "reset_session":
183
+ result = await this.toolHandlers.handleResetSession(args);
184
+ break;
185
+ case "get_health":
186
+ result = await this.toolHandlers.handleGetHealth();
187
+ break;
188
+ case "setup_auth":
189
+ result = await this.toolHandlers.handleSetupAuth(args, sendProgress);
190
+ break;
191
+ case "re_auth":
192
+ result = await this.toolHandlers.handleReAuth(args, sendProgress);
193
+ break;
194
+ case "cleanup_data":
195
+ result = await this.toolHandlers.handleCleanupData(args);
196
+ break;
197
+ default:
198
+ log.error(`❌ [MCP] Unknown tool: ${name}`);
199
+ return {
200
+ content: [
201
+ {
202
+ type: "text",
203
+ text: JSON.stringify({
204
+ success: false,
205
+ error: `Unknown tool: ${name}`,
206
+ }, null, 2),
207
+ },
208
+ ],
209
+ };
210
+ }
211
+ // Return result
212
+ return {
213
+ content: [
214
+ {
215
+ type: "text",
216
+ text: JSON.stringify(result, null, 2),
217
+ },
218
+ ],
219
+ };
220
+ }
221
+ catch (error) {
222
+ const errorMessage = error instanceof Error ? error.message : String(error);
223
+ log.error(`❌ [MCP] Tool execution error: ${errorMessage}`);
224
+ return {
225
+ content: [
226
+ {
227
+ type: "text",
228
+ text: JSON.stringify({
229
+ success: false,
230
+ error: errorMessage,
231
+ }, null, 2),
232
+ },
233
+ ],
234
+ };
235
+ }
236
+ });
237
+ }
238
+ /**
239
+ * Setup graceful shutdown handlers
240
+ */
241
+ setupShutdownHandlers() {
242
+ let shuttingDown = false;
243
+ const shutdown = async (signal) => {
244
+ if (shuttingDown) {
245
+ return;
246
+ }
247
+ shuttingDown = true;
248
+ log.info(`\n🛑 Received ${signal}, shutting down gracefully...`);
249
+ try {
250
+ // Cleanup tool handlers (closes all sessions)
251
+ await this.toolHandlers.cleanup();
252
+ // Close server
253
+ await this.server.close();
254
+ log.success("✅ Shutdown complete");
255
+ process.exit(0);
256
+ }
257
+ catch (error) {
258
+ log.error(`❌ Error during shutdown: ${error}`);
259
+ process.exit(1);
260
+ }
261
+ };
262
+ const requestShutdown = (signal) => {
263
+ void shutdown(signal);
264
+ };
265
+ process.on("SIGINT", () => requestShutdown("SIGINT"));
266
+ process.on("SIGTERM", () => requestShutdown("SIGTERM"));
267
+ process.on("uncaughtException", (error) => {
268
+ log.error(`💥 Uncaught exception: ${error}`);
269
+ log.error(error.stack || "");
270
+ requestShutdown("uncaughtException");
271
+ });
272
+ process.on("unhandledRejection", (reason, promise) => {
273
+ log.error(`💥 Unhandled rejection at: ${promise}`);
274
+ log.error(`Reason: ${reason}`);
275
+ requestShutdown("unhandledRejection");
276
+ });
277
+ }
278
+ /**
279
+ * Start the MCP server
280
+ */
281
+ async start() {
282
+ log.info("🎯 Starting NotebookLM MCP Server (Security Hardened)...");
283
+ log.info("");
284
+ // Security: Check security context and warn about issues
285
+ const securityCheck = checkSecurityContext();
286
+ if (!securityCheck.secure) {
287
+ log.warning("⚠️ Security warnings detected:");
288
+ for (const warning of securityCheck.warnings) {
289
+ log.warning(` - ${warning}`);
290
+ }
291
+ log.info("");
292
+ }
293
+ // Security: Initialize MCP authentication
294
+ const mcpAuth = getMCPAuthenticator();
295
+ await mcpAuth.initialize();
296
+ const authStatus = mcpAuth.getStatus();
297
+ // Audit: Log server startup
298
+ await audit.system("server_start", {
299
+ version: "1.2.0-secure.1",
300
+ security_warnings: securityCheck.warnings,
301
+ mcp_auth_enabled: authStatus.enabled,
302
+ config: {
303
+ headless: CONFIG.headless,
304
+ max_sessions: CONFIG.maxSessions,
305
+ session_timeout: CONFIG.sessionTimeout,
306
+ stealth_enabled: CONFIG.stealthEnabled,
307
+ },
308
+ });
309
+ log.info("📝 Configuration:");
310
+ log.info(` Config Dir: ${CONFIG.configDir}`);
311
+ log.info(` Data Dir: ${CONFIG.dataDir}`);
312
+ log.info(` Headless: ${CONFIG.headless}`);
313
+ log.info(` Max Sessions: ${CONFIG.maxSessions}`);
314
+ log.info(` Session Timeout: ${CONFIG.sessionTimeout}s`);
315
+ log.info(` Stealth: ${CONFIG.stealthEnabled}`);
316
+ log.info(` Audit Logging: ${getAuditLogger().getStats().totalEvents >= 0 ? 'enabled' : 'disabled'}`);
317
+ log.info(` MCP Authentication: ${authStatus.enabled ? 'enabled' : 'disabled'}`);
318
+ log.info("");
319
+ // Create stdio transport
320
+ const transport = new StdioServerTransport();
321
+ // Connect server to transport
322
+ await this.server.connect(transport);
323
+ log.success("✅ MCP Server connected via stdio");
324
+ log.success("🎉 Ready to receive requests from Claude Code!");
325
+ log.info("");
326
+ log.info("💡 Available tools:");
327
+ for (const tool of this.toolDefinitions) {
328
+ const desc = tool.description ? tool.description.split('\n')[0] : 'No description'; // First line only
329
+ log.info(` - ${tool.name}: ${desc.substring(0, 80)}...`);
330
+ }
331
+ log.info("");
332
+ log.info("📖 For documentation, see: README.md");
333
+ log.info("📖 For MCP details, see: MCP_INFOS.md");
334
+ log.info("");
335
+ }
336
+ }
337
+ /**
338
+ * Main entry point
339
+ */
340
+ async function main() {
341
+ // Handle CLI commands
342
+ const args = process.argv.slice(2);
343
+ if (args.length > 0 && args[0] === "config") {
344
+ const cli = new CliHandler();
345
+ await cli.handleCommand(args);
346
+ process.exit(0);
347
+ }
348
+ // Print banner
349
+ console.error("╔══════════════════════════════════════════════════════════╗");
350
+ console.error("║ ║");
351
+ console.error("║ NotebookLM MCP Server v1.0.0 ║");
352
+ console.error("║ ║");
353
+ console.error("║ Chat with Gemini 2.5 through NotebookLM via MCP ║");
354
+ console.error("║ ║");
355
+ console.error("╚══════════════════════════════════════════════════════════╝");
356
+ console.error("");
357
+ try {
358
+ const server = new NotebookLMMCPServer();
359
+ await server.start();
360
+ }
361
+ catch (error) {
362
+ log.error(`💥 Fatal error starting server: ${error}`);
363
+ if (error instanceof Error) {
364
+ log.error(error.stack || "");
365
+ }
366
+ process.exit(1);
367
+ }
368
+ }
369
+ // Run the server
370
+ main();
371
+ //# 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,70 @@
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
+ export declare class NotebookLibrary {
10
+ private libraryPath;
11
+ private library;
12
+ constructor();
13
+ /**
14
+ * Load library from disk, or create default if not exists
15
+ */
16
+ private loadLibrary;
17
+ /**
18
+ * Create default library from current CONFIG
19
+ */
20
+ private createDefaultLibrary;
21
+ /**
22
+ * Save library to disk
23
+ */
24
+ private saveLibrary;
25
+ /**
26
+ * Generate a unique ID from a string (slug format)
27
+ */
28
+ private generateId;
29
+ /**
30
+ * Add a new notebook to the library
31
+ */
32
+ addNotebook(input: AddNotebookInput): NotebookEntry;
33
+ /**
34
+ * List all notebooks in library
35
+ */
36
+ listNotebooks(): NotebookEntry[];
37
+ /**
38
+ * Get a specific notebook by ID
39
+ */
40
+ getNotebook(id: string): NotebookEntry | null;
41
+ /**
42
+ * Get the currently active notebook
43
+ */
44
+ getActiveNotebook(): NotebookEntry | null;
45
+ /**
46
+ * Select a notebook as active
47
+ */
48
+ selectNotebook(id: string): NotebookEntry;
49
+ /**
50
+ * Update notebook metadata
51
+ */
52
+ updateNotebook(input: UpdateNotebookInput): NotebookEntry;
53
+ /**
54
+ * Remove notebook from library
55
+ */
56
+ removeNotebook(id: string): boolean;
57
+ /**
58
+ * Increment use count for a notebook
59
+ */
60
+ incrementUseCount(id: string): NotebookEntry | null;
61
+ /**
62
+ * Get library statistics
63
+ */
64
+ getStats(): LibraryStats;
65
+ /**
66
+ * Search notebooks by query (searches name, description, topics)
67
+ */
68
+ searchNotebooks(query: string): NotebookEntry[];
69
+ }
70
+ //# 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;AAEpB,qBAAa,eAAe;IAC1B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,OAAO,CAAU;;IAczB;;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;IACH,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,aAAa;IAuCnD;;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"}