@roomi-fields/notebooklm-mcp 1.5.4 → 1.5.8

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 (133) hide show
  1. package/README.md +2 -2
  2. package/deployment/docs/01-INSTALL.md +21 -1
  3. package/deployment/docs/03-API.md +16 -10
  4. package/deployment/docs/05-TROUBLESHOOTING.md +19 -1
  5. package/deployment/docs/06-NOTEBOOK-LIBRARY.md +9 -9
  6. package/deployment/docs/07-AUTO-DISCOVERY.md +6 -15
  7. package/deployment/docs/08-WSL-USAGE.md +7 -7
  8. package/deployment/docs/09-MULTI-INTERFACE.md +6 -6
  9. package/deployment/docs/11-MULTI-ACCOUNT.md +1 -1
  10. package/dist/accounts/account-manager.d.ts +15 -0
  11. package/dist/accounts/account-manager.d.ts.map +1 -1
  12. package/dist/accounts/account-manager.js +104 -0
  13. package/dist/accounts/account-manager.js.map +1 -1
  14. package/dist/accounts/auto-login-manager.d.ts.map +1 -1
  15. package/dist/accounts/auto-login-manager.js +29 -25
  16. package/dist/accounts/auto-login-manager.js.map +1 -1
  17. package/dist/auth/auth-manager.d.ts +1 -1
  18. package/dist/auth/auth-manager.d.ts.map +1 -1
  19. package/dist/auth/auth-manager.js +14 -9
  20. package/dist/auth/auth-manager.js.map +1 -1
  21. package/dist/cli/help.js +5 -0
  22. package/dist/cli/help.js.map +1 -1
  23. package/dist/cli/setup-auth.js +18 -10
  24. package/dist/cli/setup-auth.js.map +1 -1
  25. package/dist/content/content-manager.d.ts +8 -0
  26. package/dist/content/content-manager.d.ts.map +1 -1
  27. package/dist/content/content-manager.js +411 -67
  28. package/dist/content/content-manager.js.map +1 -1
  29. package/dist/http-wrapper.d.ts.map +1 -1
  30. package/dist/http-wrapper.js +148 -3
  31. package/dist/http-wrapper.js.map +1 -1
  32. package/dist/session/browser-session.d.ts +12 -0
  33. package/dist/session/browser-session.d.ts.map +1 -1
  34. package/dist/session/browser-session.js +313 -65
  35. package/dist/session/browser-session.js.map +1 -1
  36. package/dist/session/shared-context-manager.d.ts.map +1 -1
  37. package/dist/session/shared-context-manager.js +22 -2
  38. package/dist/session/shared-context-manager.js.map +1 -1
  39. package/dist/startup/startup-manager.d.ts +8 -0
  40. package/dist/startup/startup-manager.d.ts.map +1 -1
  41. package/dist/startup/startup-manager.js +176 -28
  42. package/dist/startup/startup-manager.js.map +1 -1
  43. package/dist/stdio-http-proxy.js +91 -16
  44. package/dist/stdio-http-proxy.js.map +1 -1
  45. package/dist/tools/index.d.ts +1 -0
  46. package/dist/tools/index.d.ts.map +1 -1
  47. package/dist/tools/index.js +52 -32
  48. package/dist/tools/index.js.map +1 -1
  49. package/dist/utils/citation-extractor.d.ts +6 -7
  50. package/dist/utils/citation-extractor.d.ts.map +1 -1
  51. package/dist/utils/citation-extractor.js +138 -329
  52. package/dist/utils/citation-extractor.js.map +1 -1
  53. package/dist/utils/page-utils.d.ts +5 -0
  54. package/dist/utils/page-utils.d.ts.map +1 -1
  55. package/dist/utils/page-utils.js +73 -16
  56. package/dist/utils/page-utils.js.map +1 -1
  57. package/package.json +6 -2
  58. package/scripts/archive/add-and-activate-notebook.ps1 +4 -4
  59. package/scripts/archive/add-new-notebook.ps1 +4 -4
  60. package/scripts/archive/add-rom1pey.ps1 +2 -2
  61. package/scripts/archive/add-rpmonster.ps1 +2 -2
  62. package/scripts/archive/add-source-debug.ps1 +1 -1
  63. package/scripts/archive/add-source-e2e.ps1 +1 -1
  64. package/scripts/archive/add-source-visible.ps1 +1 -1
  65. package/scripts/archive/add-test-notebook.ps1 +1 -1
  66. package/scripts/archive/add-test-source.ps1 +1 -1
  67. package/scripts/archive/capture-screen.ps1 +1 -1
  68. package/scripts/archive/change-language.mjs +4 -3
  69. package/scripts/archive/change-language.ts +5 -3
  70. package/scripts/archive/create-notebook.ps1 +2 -2
  71. package/scripts/archive/create-rom1pey-notebook.ps1 +2 -2
  72. package/scripts/archive/create-rom1pey.ps1 +2 -2
  73. package/scripts/archive/debug-add-text-source.ps1 +4 -4
  74. package/scripts/archive/debug-selectors.ps1 +1 -1
  75. package/scripts/archive/discover-home.ps1 +2 -2
  76. package/scripts/archive/navigate-home-visible.ps1 +1 -1
  77. package/scripts/archive/navigate-home.ps1 +1 -1
  78. package/scripts/archive/run-e2e-english.ps1 +3 -3
  79. package/scripts/archive/run-e2e-rom1pey-v2.ps1 +4 -4
  80. package/scripts/archive/run-e2e-rom1pey.ps1 +4 -4
  81. package/scripts/archive/setup-english-test.ps1 +6 -6
  82. package/scripts/archive/setup-test-notebook.ps1 +1 -1
  83. package/scripts/archive/simple-add-source.ps1 +1 -1
  84. package/scripts/archive/t10.ps1 +1 -1
  85. package/scripts/archive/t20.ps1 +1 -1
  86. package/scripts/archive/t30.ps1 +1 -1
  87. package/scripts/archive/t31.ps1 +1 -1
  88. package/scripts/archive/t32.ps1 +1 -1
  89. package/scripts/archive/t53.ps1 +1 -1
  90. package/scripts/archive/test-access.ps1 +1 -1
  91. package/scripts/archive/test-add-delete-source.ps1 +4 -4
  92. package/scripts/archive/test-add-source-visible.ps1 +1 -1
  93. package/scripts/archive/test-add-source.ps1 +1 -1
  94. package/scripts/archive/test-add-text-debug.ps1 +2 -2
  95. package/scripts/archive/test-ask-headed.ps1 +1 -1
  96. package/scripts/archive/test-delete-source.ps1 +4 -4
  97. package/scripts/archive/test-e2e-notebook.ps1 +2 -2
  98. package/scripts/archive/test-english-notebook.ps1 +4 -4
  99. package/scripts/archive/test-english.ps1 +1 -1
  100. package/scripts/archive/test-full-custom-instructions.ps1 +1 -1
  101. package/scripts/archive/test-full-infographic.ps1 +1 -1
  102. package/scripts/archive/test-full-language.ps1 +1 -1
  103. package/scripts/archive/test-full-presentation.ps1 +1 -1
  104. package/scripts/archive/test-full-report.ps1 +1 -1
  105. package/scripts/archive/test-full-source-selection.ps1 +1 -1
  106. package/scripts/archive/test-full-video-brief.ps1 +1 -1
  107. package/scripts/archive/test-full-video-explainer.ps1 +1 -1
  108. package/scripts/archive/test-full-video-styles.ps1 +1 -1
  109. package/scripts/archive/test-headed-ask.ps1 +1 -1
  110. package/scripts/archive/test-headed-now.ps1 +2 -2
  111. package/scripts/archive/test-headed.ps1 +2 -2
  112. package/scripts/archive/test-hello.ps1 +1 -1
  113. package/scripts/archive/test-manual-headed.ps1 +1 -1
  114. package/scripts/archive/test-mathieu-quota.ps1 +1 -1
  115. package/scripts/archive/test-personal-notebook.ps1 +1 -1
  116. package/scripts/archive/test-rate-limit.ps1 +1 -1
  117. package/scripts/archive/test-real-ask.ps1 +1 -1
  118. package/scripts/archive/test-real-ask2.ps1 +1 -1
  119. package/scripts/archive/test-rom1pey.ps1 +1 -1
  120. package/scripts/archive/test-rotation-complete.ps1 +1 -1
  121. package/scripts/archive/test-rotation.ps1 +2 -2
  122. package/scripts/archive/test-show-browser.ps1 +1 -1
  123. package/scripts/archive/test-update-notebook.ps1 +1 -1
  124. package/scripts/archive/verify-language-slow.ps1 +1 -1
  125. package/scripts/archive/verify-language.ps1 +1 -1
  126. package/scripts/docker-entrypoint.sh +3 -7
  127. package/scripts/doctor.mjs +257 -0
  128. package/scripts/mcp-proxy-hidden.ps1 +31 -0
  129. package/scripts/mcp-wsl-helper.sh +1 -1
  130. package/scripts/start-server-hidden.vbs +16 -0
  131. package/scripts/start-server.ps1 +1 -1
  132. package/scripts/stop-server.bat +5 -0
  133. package/scripts/switch-account-language.sh +87 -128
@@ -1,74 +1,18 @@
1
1
  /**
2
2
  * Citation Extractor for NotebookLM
3
3
  *
4
- * Extracts source citations by hovering over citation markers [1], [2], etc.
5
- * and capturing the tooltip content.
4
+ * Extracts source citations from NotebookLM responses:
5
+ * - Source names from citation button aria-labels (instant, 100% reliable)
6
+ * - Source excerpts by clicking citations to open the source panel (reads .highlighted)
7
+ * - All done via page.evaluate() — no ElementHandle references that can go stale
6
8
  *
7
- * Features:
8
- * - Hover-based extraction (no additional API calls)
9
- * - Multiple output formats (inline, footnotes, json, expanded)
10
- * - Graceful fallback if citations can't be extracted
9
+ * Multiple output formats: inline, footnotes, json, expanded
11
10
  */
12
11
  import { log } from './logger.js';
13
12
  import { randomDelay } from './stealth-utils.js';
14
13
  // ============================================================================
15
14
  // CSS Selectors for NotebookLM Citations
16
15
  // ============================================================================
17
- /**
18
- * Selectors to find citation markers in the response
19
- * NotebookLM uses button.citation-marker with aria-label containing source text
20
- * Updated January 2026 based on actual NotebookLM DOM structure
21
- */
22
- const CITATION_SELECTORS = [
23
- // PRIMARY: NotebookLM citation buttons (January 2026)
24
- 'button.citation-marker',
25
- 'button.xap-inline-dialog.citation-marker',
26
- // Fallback selectors
27
- '.citation-marker',
28
- '[data-citation]',
29
- '[data-citation-id]',
30
- // Legacy selectors (kept for backwards compatibility)
31
- '.citation-link',
32
- '[data-source-id]',
33
- 'sup.citation',
34
- 'sup[data-citation]',
35
- '.reference-marker',
36
- '[role="button"][aria-label*="citation"]',
37
- '[role="button"][aria-label*="source"]',
38
- '.source-citation',
39
- '.inline-citation',
40
- 'button.citation',
41
- '[class*="source-ref"]',
42
- ];
43
- /**
44
- * Selectors for the tooltip/popover that appears on hover
45
- * Updated January 2026: NotebookLM uses i.highlighted for source text
46
- */
47
- const TOOLTIP_SELECTORS = [
48
- // PRIMARY: NotebookLM source highlight (January 2026)
49
- 'i.highlighted',
50
- '.paragraph i.highlighted',
51
- '.paragraph.normal i.highlighted',
52
- // Common tooltip patterns
53
- '[role="tooltip"]',
54
- '.tooltip',
55
- '.popover',
56
- '.citation-tooltip',
57
- '.citation-popover',
58
- '.source-preview',
59
- '.source-tooltip',
60
- // Material Design / Google patterns
61
- '.mdc-tooltip',
62
- '.mat-tooltip',
63
- '[class*="tooltip"]',
64
- '[class*="popover"]',
65
- // NotebookLM specific
66
- '.citation-preview',
67
- '.source-card',
68
- '.source-snippet',
69
- '[data-tooltip]',
70
- '[aria-describedby]',
71
- ];
72
16
  // ============================================================================
73
17
  // Main Extraction Function
74
18
  // ============================================================================
@@ -81,7 +25,7 @@ const TOOLTIP_SELECTORS = [
81
25
  * @param format Desired output format
82
26
  * @returns Extraction result with formatted answer and citations
83
27
  */
84
- export async function extractCitations(page, answerText, responseContainer, format = 'none') {
28
+ export async function extractCitations(page, answerText, _responseContainer, format = 'none') {
85
29
  // Early return if no extraction requested
86
30
  if (format === 'none') {
87
31
  return {
@@ -95,9 +39,53 @@ export async function extractCitations(page, answerText, responseContainer, form
95
39
  log.info(`📚 [CITATIONS] Extracting sources (format: ${format})...`);
96
40
  const citations = [];
97
41
  try {
98
- // Find citation markers in the response
99
- const citationElements = await findCitationElements(page, responseContainer);
100
- if (citationElements.length === 0) {
42
+ // ================================================================
43
+ // SIMPLE APPROACH: Extract all citation data in ONE page.evaluate()
44
+ // No hover, no click, no ElementHandle — just read the DOM directly.
45
+ //
46
+ // NotebookLM citation buttons have:
47
+ // - innerText: the citation number (e.g. "1")
48
+ // - child span[aria-label]: "N: Source Name.pdf"
49
+ //
50
+ // For source excerpts, we click each citation to open the source panel.
51
+ // ================================================================
52
+ // IMPORTANT: Scope to the LAST response container only!
53
+ // After multiple questions, the page has citation buttons from ALL previous answers.
54
+ // If we querySelectorAll('button.citation-marker') globally, we click old citations
55
+ // from previous responses → wrong source panel → no highlights for current answer.
56
+ const rawCitations = await page.evaluate(`
57
+ (() => {
58
+ // Find the last response container (most recent answer)
59
+ const containers = document.querySelectorAll('.to-user-container .message-text-content');
60
+ const lastContainer = containers.length > 0 ? containers[containers.length - 1] : document;
61
+
62
+ const buttons = lastContainer.querySelectorAll('button.citation-marker');
63
+ const seen = new Set();
64
+ const results = [];
65
+
66
+ buttons.forEach((btn) => {
67
+ const text = btn.textContent || '';
68
+ const match = text.match(/(\\d+)/);
69
+ if (!match) return;
70
+ const num = parseInt(match[1], 10);
71
+ if (seen.has(num)) return;
72
+ seen.add(num);
73
+
74
+ const span = btn.querySelector('span[aria-label]');
75
+ let sourceName = '';
76
+ if (span) {
77
+ const label = span.getAttribute('aria-label') || '';
78
+ const colonIdx = label.indexOf(': ');
79
+ sourceName = colonIdx > 0 ? label.substring(colonIdx + 2).trim() : label.trim();
80
+ }
81
+
82
+ results.push({ number: num, sourceName });
83
+ });
84
+
85
+ return results.sort((a, b) => a.number - b.number);
86
+ })()
87
+ `);
88
+ if (rawCitations.length === 0) {
101
89
  log.info(`📚 [CITATIONS] No citation markers found in response`);
102
90
  return {
103
91
  originalAnswer: answerText,
@@ -107,33 +95,99 @@ export async function extractCitations(page, answerText, responseContainer, form
107
95
  success: true,
108
96
  };
109
97
  }
110
- log.info(`📚 [CITATIONS] Found ${citationElements.length} citation markers`);
111
- // Extract source info for each citation (name from aria-label, text from hover)
112
- for (const { element, marker, number } of citationElements) {
98
+ log.info(`📚 [CITATIONS] Found ${rawCitations.length} citation markers`);
99
+ // Extract source excerpts by CLICKING each citation button.
100
+ // Click opens the source panel with .highlighted marking the cited passage.
101
+ // Use JS .click() — real mouse clicks and hover don't work reliably in headless.
102
+ for (const { number, sourceName } of rawCitations) {
103
+ const marker = `[${number}]`;
104
+ let sourceText = '';
113
105
  try {
114
- const extracted = await extractSourceFromElement(page, element);
115
- if (extracted.sourceText || extracted.sourceName) {
116
- citations.push({
117
- marker,
118
- number,
119
- sourceText: extracted.sourceText || extracted.sourceName || '',
120
- sourceName: extracted.sourceName || undefined,
121
- });
122
- log.success(` ✅ [${marker}] Extracted: "${(extracted.sourceText || extracted.sourceName || '').substring(0, 50)}..."`);
123
- }
124
- else {
125
- log.warning(` ⚠️ [${marker}] Could not extract source info`);
106
+ // Step 1: Click the citation button (scoped to LAST response container)
107
+ const clicked = await page.evaluate(`
108
+ (() => {
109
+ const containers = document.querySelectorAll('.to-user-container .message-text-content');
110
+ const scope = containers.length > 0 ? containers[containers.length - 1] : document;
111
+ const num = ${number};
112
+ const buttons = scope.querySelectorAll('button.citation-marker');
113
+ for (const btn of buttons) {
114
+ const text = btn.textContent || '';
115
+ const match = text.match(/(\\d+)/);
116
+ if (match && parseInt(match[1], 10) === num) {
117
+ btn.scrollIntoView({ block: 'center' });
118
+ btn.click();
119
+ return true;
120
+ }
121
+ }
122
+ return false;
123
+ })()
124
+ `);
125
+ if (clicked) {
126
+ // Step 2: Wait for .highlighted to appear (poll with timeout)
127
+ const maxWaitMs = 3000;
128
+ const pollMs = 200;
129
+ const startTime = Date.now();
130
+ while (Date.now() - startTime < maxWaitMs) {
131
+ sourceText = await page.evaluate(`
132
+ (() => {
133
+ const highlights = document.querySelectorAll('.highlighted');
134
+ if (highlights.length === 0) return '';
135
+
136
+ const hTexts = Array.from(highlights).map(el => el.innerText?.trim()).filter(Boolean);
137
+ if (hTexts.length === 0) return '';
138
+
139
+ const parent = highlights[0].closest('.paragraph') || highlights[0].parentElement;
140
+ const pText = parent?.innerText?.trim() || '';
141
+ const hText = hTexts.join(' ');
142
+
143
+ return pText.length > hText.length ? pText : hText;
144
+ })()
145
+ `);
146
+ if (sourceText)
147
+ break;
148
+ await new Promise((r) => setTimeout(r, pollMs));
149
+ }
150
+ // Step 3: Dismiss the source panel
151
+ await page.keyboard.press('Escape');
152
+ await randomDelay(200, 400);
126
153
  }
127
154
  }
128
155
  catch (error) {
129
- log.warning(` ⚠️ [${marker}] Error extracting: ${error}`);
156
+ log.warning(` ⚠️ [${marker}] Click/extract failed: ${error}`);
157
+ }
158
+ // Always add the citation (with excerpt or just source name)
159
+ citations.push({
160
+ marker,
161
+ number,
162
+ sourceText: sourceText || sourceName,
163
+ sourceName: sourceName || undefined,
164
+ });
165
+ if (sourceText && sourceText !== sourceName) {
166
+ log.success(` ✅ [${marker}] ${sourceName}: "${sourceText.substring(0, 80)}..."`);
167
+ }
168
+ else {
169
+ log.info(` 📄 [${marker}] ${sourceName} (no excerpt)`);
130
170
  }
131
- // Small delay between hovers to avoid detection
132
- await randomDelay(100, 200);
171
+ }
172
+ // Dismiss any leftover source panel to ensure chat input is accessible for next question
173
+ try {
174
+ await page.keyboard.press('Escape');
175
+ await randomDelay(300, 500);
176
+ // Click on the chat area to ensure focus returns there
177
+ await page.evaluate(`
178
+ (() => {
179
+ const input = document.querySelector('textarea.query-box-input');
180
+ if (input) input.focus();
181
+ })()
182
+ `);
183
+ }
184
+ catch {
185
+ // Best effort
133
186
  }
134
187
  // Format the answer based on requested format
135
188
  const formattedAnswer = formatAnswerWithSources(answerText, citations, format);
136
- log.success(`📚 [CITATIONS] Extracted ${citations.length}/${citationElements.length} sources`);
189
+ const withExcerpt = citations.filter((c) => c.sourceText && c.sourceText !== c.sourceName).length;
190
+ log.success(`📚 [CITATIONS] Extracted ${citations.length}/${rawCitations.length} sources (${withExcerpt} with excerpts)`);
137
191
  return {
138
192
  originalAnswer: answerText,
139
193
  formattedAnswer,
@@ -155,251 +209,6 @@ export async function extractCitations(page, answerText, responseContainer, form
155
209
  };
156
210
  }
157
211
  }
158
- /**
159
- * Find citation marker elements in the response
160
- */
161
- async function findCitationElements(page, container) {
162
- const results = [];
163
- const seenNumbers = new Set();
164
- // Search context: container if available, otherwise full page
165
- const searchContext = container || page;
166
- // Try each selector
167
- for (const selector of CITATION_SELECTORS) {
168
- try {
169
- const elements = await searchContext.$$(selector);
170
- for (const element of elements) {
171
- try {
172
- // Get the text content to identify the citation number
173
- const text = await element.innerText();
174
- const match = text.match(/\[?(\d+)\]?/);
175
- if (match) {
176
- const number = parseInt(match[1], 10);
177
- // Skip if we've already found this citation
178
- if (seenNumbers.has(number))
179
- continue;
180
- seenNumbers.add(number);
181
- const marker = `[${number}]`;
182
- results.push({ element, marker, number });
183
- }
184
- }
185
- catch {
186
- continue;
187
- }
188
- }
189
- }
190
- catch {
191
- continue;
192
- }
193
- }
194
- // Also try to find citations by regex pattern in the page
195
- if (results.length === 0) {
196
- const regexResults = await findCitationsByRegex(page, container);
197
- results.push(...regexResults);
198
- }
199
- // Sort by citation number
200
- results.sort((a, b) => a.number - b.number);
201
- return results;
202
- }
203
- /**
204
- * Find citations using regex matching on text content
205
- * Fallback method when CSS selectors don't work
206
- *
207
- * This improved version:
208
- * 1. Detects citation markers [n] in the text
209
- * 2. Finds clickable elements containing those markers
210
- * 3. Returns element handles for hover extraction
211
- */
212
- async function findCitationsByRegex(page, container) {
213
- const results = [];
214
- const seenNumbers = new Set();
215
- try {
216
- // First, detect unique citation numbers in the response text
217
- const citationNumbers = await page.evaluate((containerSelector) => {
218
- const searchRoot = containerSelector
219
- ? // @ts-expect-error - document available in browser context
220
- document.querySelector(containerSelector)
221
- : // @ts-expect-error - document available in browser context
222
- document.body;
223
- if (!searchRoot)
224
- return [];
225
- const text = searchRoot.textContent || '';
226
- const matches = text.matchAll(/\[(\d+)\]/g);
227
- const numbers = new Set();
228
- for (const match of matches) {
229
- numbers.add(parseInt(match[1], 10));
230
- }
231
- return Array.from(numbers).sort((a, b) => a - b);
232
- }, container ? '.to-user-container .message-text-content' : null);
233
- log.info(`📚 [CITATIONS] Regex found ${citationNumbers.length} unique citation markers: [${citationNumbers.join(', ')}]`);
234
- // For each citation number, try to find a clickable element
235
- // NotebookLM typically wraps citations in <a>, <button>, or <span> with click handlers
236
- const searchContext = container || page;
237
- for (const num of citationNumbers) {
238
- if (seenNumbers.has(num))
239
- continue;
240
- // Try multiple strategies to find the citation element
241
- const strategies = [
242
- // Strategy 1: Look for links with the citation number
243
- `a:has-text("[${num}]")`,
244
- `button:has-text("[${num}]")`,
245
- `span:has-text("[${num}]")`,
246
- // Strategy 2: Look for elements with citation-related attributes
247
- `[data-citation="${num}"]`,
248
- `[data-source="${num}"]`,
249
- `[aria-label*="${num}"]`,
250
- // Strategy 3: Look for superscript elements
251
- `sup:has-text("${num}")`,
252
- // Strategy 4: Generic clickable elements with the number
253
- `[role="button"]:has-text("[${num}]")`,
254
- `[role="link"]:has-text("[${num}]")`,
255
- ];
256
- for (const selector of strategies) {
257
- try {
258
- const element = await searchContext.$(selector);
259
- if (element) {
260
- const isVisible = await element.isVisible();
261
- if (isVisible) {
262
- seenNumbers.add(num);
263
- results.push({
264
- element,
265
- marker: `[${num}]`,
266
- number: num,
267
- });
268
- log.info(` 📌 Found element for [${num}] using selector: ${selector}`);
269
- break;
270
- }
271
- }
272
- }
273
- catch {
274
- continue;
275
- }
276
- }
277
- // If no element found with specific selectors, try XPath as last resort
278
- if (!seenNumbers.has(num)) {
279
- try {
280
- // Find any element that contains exactly [n]
281
- const xpath = `//*[contains(text(), '[${num}]')]`;
282
- const elements = await page.$$(`::-p-xpath(${xpath})`);
283
- for (const element of elements) {
284
- try {
285
- const text = await element.innerText();
286
- // Make sure it's the citation marker, not just any text with [n]
287
- if (text.includes(`[${num}]`) && text.length < 50) {
288
- const isVisible = await element.isVisible();
289
- if (isVisible) {
290
- seenNumbers.add(num);
291
- results.push({
292
- element,
293
- marker: `[${num}]`,
294
- number: num,
295
- });
296
- log.info(` 📌 Found element for [${num}] using XPath fallback`);
297
- break;
298
- }
299
- }
300
- }
301
- catch {
302
- continue;
303
- }
304
- }
305
- }
306
- catch {
307
- // XPath failed, continue without this citation
308
- }
309
- }
310
- if (!seenNumbers.has(num)) {
311
- log.warning(` ⚠️ Could not find DOM element for [${num}]`);
312
- }
313
- }
314
- log.info(`📚 [CITATIONS] Found ${results.length}/${citationNumbers.length} citation elements`);
315
- }
316
- catch (error) {
317
- log.warning(`⚠️ [CITATIONS] Regex search failed: ${error}`);
318
- }
319
- // Sort by citation number
320
- results.sort((a, b) => a.number - b.number);
321
- return results;
322
- }
323
- /**
324
- * Extract source information from citation element
325
- *
326
- * NotebookLM (January 2026):
327
- * - aria-label contains source document name: "17: Filename.pdf"
328
- * - hover shows excerpt in i.highlighted element
329
- */
330
- async function extractSourceFromElement(page, element) {
331
- const result = { sourceName: null, sourceText: null };
332
- try {
333
- // Step 1: Extract source name from aria-label
334
- const spanWithLabel = await element.$('span[aria-label]');
335
- if (spanWithLabel) {
336
- const ariaLabel = await spanWithLabel.getAttribute('aria-label');
337
- if (ariaLabel) {
338
- // Parse format "17: Source Name.pdf"
339
- const colonIndex = ariaLabel.indexOf(': ');
340
- if (colonIndex > 0) {
341
- result.sourceName = ariaLabel.substring(colonIndex + 2).trim();
342
- }
343
- else {
344
- result.sourceName = ariaLabel.trim();
345
- }
346
- log.info(` 📄 Source name: "${result.sourceName?.substring(0, 50)}..."`);
347
- }
348
- }
349
- // Step 2: Hover to extract text excerpt
350
- await element.scrollIntoViewIfNeeded();
351
- await randomDelay(50, 100);
352
- await element.hover();
353
- await randomDelay(300, 500);
354
- // Try to find and read the tooltip content
355
- for (const tooltipSelector of TOOLTIP_SELECTORS) {
356
- try {
357
- const tooltip = await page.$(tooltipSelector);
358
- if (tooltip) {
359
- const isVisible = await tooltip.isVisible();
360
- if (isVisible) {
361
- const text = await tooltip.innerText();
362
- if (text && text.trim()) {
363
- result.sourceText = text.trim();
364
- log.info(` 📖 Source text: "${result.sourceText.substring(0, 50)}..."`);
365
- await page.mouse.move(0, 0);
366
- await randomDelay(100, 150);
367
- return result;
368
- }
369
- }
370
- }
371
- }
372
- catch {
373
- continue;
374
- }
375
- }
376
- // Fallback: Check for aria-describedby attribute
377
- try {
378
- const describedBy = await element.getAttribute('aria-describedby');
379
- if (describedBy) {
380
- const tooltipById = await page.$(`#${describedBy}`);
381
- if (tooltipById) {
382
- const text = await tooltipById.innerText();
383
- if (text && text.trim()) {
384
- result.sourceText = text.trim();
385
- await page.mouse.move(0, 0);
386
- return result;
387
- }
388
- }
389
- }
390
- }
391
- catch {
392
- // Ignore
393
- }
394
- // Move mouse away even if we didn't find content
395
- await page.mouse.move(0, 0);
396
- return result;
397
- }
398
- catch (error) {
399
- log.warning(`⚠️ [CITATIONS] Extraction failed: ${error}`);
400
- return result;
401
- }
402
- }
403
212
  // ============================================================================
404
213
  // Formatting Functions
405
214
  // ============================================================================
@@ -1 +1 @@
1
- {"version":3,"file":"citation-extractor.js","sourceRoot":"","sources":["../../src/utils/citation-extractor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"citation-extractor.js","sourceRoot":"","sources":["../../src/utils/citation-extractor.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,10 @@ export declare function isErrorMessage(text: string): boolean;
18
18
  * Check if text indicates a rate limit error (should trigger account rotation)
19
19
  */
20
20
  export declare function isRateLimitMessage(text: string): boolean;
21
+ /**
22
+ * Remove leaked UI-control text from NotebookLM responses.
23
+ */
24
+ export declare function sanitizeResponseText(text: string): string;
21
25
  /**
22
26
  * Snapshot the latest response text currently visible
23
27
  * Returns null if no response found
@@ -56,6 +60,7 @@ declare const _default: {
56
60
  snapshotLatestResponse: typeof snapshotLatestResponse;
57
61
  snapshotAllResponses: typeof snapshotAllResponses;
58
62
  countResponseElements: typeof countResponseElements;
63
+ sanitizeResponseText: typeof sanitizeResponseText;
59
64
  waitForLatestAnswer: typeof waitForLatestAnswer;
60
65
  };
61
66
  export default _default;
@@ -1 +1 @@
1
- {"version":3,"file":"page-utils.d.ts","sourceRoot":"","sources":["../../src/utils/page-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAkFvC;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGpD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGxD;AA4CD;;;GAGG;AACH,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAE/E;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CA4BxE;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CA2BvE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,IAAI,EACV,OAAO,GAAE;IACP,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,OAAO,CAAC;CACZ,GACL,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA8IxB;;;;;;;AA+MD,wBAKE"}
1
+ {"version":3,"file":"page-utils.d.ts","sourceRoot":"","sources":["../../src/utils/page-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAgGvC;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGpD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGxD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAsCzD;AA4CD;;;GAGG;AACH,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAE/E;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CA+BxE;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CA2BvE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,IAAI,EACV,OAAO,GAAE;IACP,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,OAAO,CAAC;CACZ,GACL,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA8IxB;;;;;;;;AAoND,wBAME"}