@pan-sec/notebooklm-mcp 2026.2.11 → 2026.3.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.
- package/README.md +58 -17
- package/SECURITY.md +31 -61
- package/dist/auth/auth-manager.d.ts +2 -1
- package/dist/auth/auth-manager.d.ts.map +1 -1
- package/dist/auth/auth-manager.js +97 -42
- package/dist/auth/auth-manager.js.map +1 -1
- package/dist/auth/mcp-auth.d.ts +22 -4
- package/dist/auth/mcp-auth.d.ts.map +1 -1
- package/dist/auth/mcp-auth.js +120 -19
- package/dist/auth/mcp-auth.js.map +1 -1
- package/dist/compliance/alert-manager.d.ts.map +1 -1
- package/dist/compliance/alert-manager.js +7 -4
- package/dist/compliance/alert-manager.js.map +1 -1
- package/dist/compliance/breach-detection.d.ts.map +1 -1
- package/dist/compliance/breach-detection.js +14 -7
- package/dist/compliance/breach-detection.js.map +1 -1
- package/dist/compliance/change-log.d.ts.map +1 -1
- package/dist/compliance/change-log.js +7 -4
- package/dist/compliance/change-log.js.map +1 -1
- package/dist/compliance/compliance-logger.d.ts.map +1 -1
- package/dist/compliance/compliance-logger.js +11 -6
- package/dist/compliance/compliance-logger.js.map +1 -1
- package/dist/compliance/consent-manager.d.ts.map +1 -1
- package/dist/compliance/consent-manager.js +5 -3
- package/dist/compliance/consent-manager.js.map +1 -1
- package/dist/compliance/data-erasure.d.ts +1 -1
- package/dist/compliance/data-erasure.d.ts.map +1 -1
- package/dist/compliance/data-erasure.js +142 -83
- package/dist/compliance/data-erasure.js.map +1 -1
- package/dist/compliance/data-export.d.ts.map +1 -1
- package/dist/compliance/data-export.js +23 -12
- package/dist/compliance/data-export.js.map +1 -1
- package/dist/compliance/data-inventory.d.ts.map +1 -1
- package/dist/compliance/data-inventory.js +7 -6
- package/dist/compliance/data-inventory.js.map +1 -1
- package/dist/compliance/dsar-handler.d.ts +7 -1
- package/dist/compliance/dsar-handler.d.ts.map +1 -1
- package/dist/compliance/dsar-handler.js +74 -61
- package/dist/compliance/dsar-handler.js.map +1 -1
- package/dist/compliance/evidence-collector.d.ts.map +1 -1
- package/dist/compliance/evidence-collector.js +10 -6
- package/dist/compliance/evidence-collector.js.map +1 -1
- package/dist/compliance/health-monitor.d.ts.map +1 -1
- package/dist/compliance/health-monitor.js +15 -9
- package/dist/compliance/health-monitor.js.map +1 -1
- package/dist/compliance/incident-manager.d.ts.map +1 -1
- package/dist/compliance/incident-manager.js +5 -3
- package/dist/compliance/incident-manager.js.map +1 -1
- package/dist/compliance/policy-docs.d.ts.map +1 -1
- package/dist/compliance/policy-docs.js +14 -11
- package/dist/compliance/policy-docs.js.map +1 -1
- package/dist/compliance/privacy-notice-text.d.ts.map +1 -1
- package/dist/compliance/privacy-notice-text.js +3 -4
- package/dist/compliance/privacy-notice-text.js.map +1 -1
- package/dist/compliance/privacy-notice.d.ts.map +1 -1
- package/dist/compliance/privacy-notice.js +5 -3
- package/dist/compliance/privacy-notice.js.map +1 -1
- package/dist/compliance/report-generator.d.ts.map +1 -1
- package/dist/compliance/report-generator.js +5 -3
- package/dist/compliance/report-generator.js.map +1 -1
- package/dist/compliance/retention-engine.d.ts.map +1 -1
- package/dist/compliance/retention-engine.js +18 -10
- package/dist/compliance/retention-engine.js.map +1 -1
- package/dist/compliance/siem-exporter.d.ts.map +1 -1
- package/dist/compliance/siem-exporter.js +40 -16
- package/dist/compliance/siem-exporter.js.map +1 -1
- package/dist/config.d.ts +4 -31
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +25 -63
- package/dist/config.js.map +1 -1
- package/dist/errors.d.ts +21 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +54 -1
- package/dist/errors.js.map +1 -1
- package/dist/gemini/gemini-client.d.ts +1 -0
- package/dist/gemini/gemini-client.d.ts.map +1 -1
- package/dist/gemini/gemini-client.js +50 -49
- package/dist/gemini/gemini-client.js.map +1 -1
- package/dist/gemini/types.d.ts +3 -1
- package/dist/gemini/types.d.ts.map +1 -1
- package/dist/gemini/types.js.map +1 -1
- package/dist/index.d.ts +52 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +399 -85
- package/dist/index.js.map +1 -1
- package/dist/library/notebook-library.d.ts.map +1 -1
- package/dist/library/notebook-library.js +2 -1
- package/dist/library/notebook-library.js.map +1 -1
- package/dist/logging/query-logger.d.ts +13 -1
- package/dist/logging/query-logger.d.ts.map +1 -1
- package/dist/logging/query-logger.js +62 -10
- package/dist/logging/query-logger.js.map +1 -1
- package/dist/notebook-creation/audio-manager.d.ts.map +1 -1
- package/dist/notebook-creation/audio-manager.js +19 -24
- package/dist/notebook-creation/audio-manager.js.map +1 -1
- package/dist/notebook-creation/browser-options.d.ts +28 -0
- package/dist/notebook-creation/browser-options.d.ts.map +1 -0
- package/dist/notebook-creation/browser-options.js +75 -0
- package/dist/notebook-creation/browser-options.js.map +1 -0
- package/dist/notebook-creation/data-table-manager.d.ts.map +1 -1
- package/dist/notebook-creation/data-table-manager.js +20 -21
- package/dist/notebook-creation/data-table-manager.js.map +1 -1
- package/dist/notebook-creation/discover-creation-flow.d.ts +0 -6
- package/dist/notebook-creation/discover-creation-flow.d.ts.map +1 -1
- package/dist/notebook-creation/discover-creation-flow.js +10 -10
- package/dist/notebook-creation/discover-creation-flow.js.map +1 -1
- package/dist/notebook-creation/discover-quota.d.ts +0 -6
- package/dist/notebook-creation/discover-quota.d.ts.map +1 -1
- package/dist/notebook-creation/discover-quota.js +12 -13
- package/dist/notebook-creation/discover-quota.js.map +1 -1
- package/dist/notebook-creation/discover-sources.js +15 -16
- package/dist/notebook-creation/discover-sources.js.map +1 -1
- package/dist/notebook-creation/dom-scripts.d.ts +10 -0
- package/dist/notebook-creation/dom-scripts.d.ts.map +1 -0
- package/dist/notebook-creation/dom-scripts.js +58 -0
- package/dist/notebook-creation/dom-scripts.js.map +1 -0
- package/dist/notebook-creation/errors.d.ts +18 -0
- package/dist/notebook-creation/errors.d.ts.map +1 -0
- package/dist/notebook-creation/errors.js +20 -0
- package/dist/notebook-creation/errors.js.map +1 -0
- package/dist/notebook-creation/index.d.ts +2 -0
- package/dist/notebook-creation/index.d.ts.map +1 -1
- package/dist/notebook-creation/index.js +2 -0
- package/dist/notebook-creation/index.js.map +1 -1
- package/dist/notebook-creation/notebook-creator.d.ts +6 -82
- package/dist/notebook-creation/notebook-creator.d.ts.map +1 -1
- package/dist/notebook-creation/notebook-creator.js +49 -835
- package/dist/notebook-creation/notebook-creator.js.map +1 -1
- package/dist/notebook-creation/notebook-nav.d.ts +19 -0
- package/dist/notebook-creation/notebook-nav.d.ts.map +1 -0
- package/dist/notebook-creation/notebook-nav.js +239 -0
- package/dist/notebook-creation/notebook-nav.js.map +1 -0
- package/dist/notebook-creation/notebook-sync.d.ts.map +1 -1
- package/dist/notebook-creation/notebook-sync.js +36 -38
- package/dist/notebook-creation/notebook-sync.js.map +1 -1
- package/dist/notebook-creation/selector-discovery.d.ts.map +1 -1
- package/dist/notebook-creation/selector-discovery.js +17 -24
- package/dist/notebook-creation/selector-discovery.js.map +1 -1
- package/dist/notebook-creation/selectors.d.ts +23 -19
- package/dist/notebook-creation/selectors.d.ts.map +1 -1
- package/dist/notebook-creation/selectors.js +69 -33
- package/dist/notebook-creation/selectors.js.map +1 -1
- package/dist/notebook-creation/source-manager.d.ts +22 -0
- package/dist/notebook-creation/source-manager.d.ts.map +1 -1
- package/dist/notebook-creation/source-manager.js +716 -50
- package/dist/notebook-creation/source-manager.js.map +1 -1
- package/dist/notebook-creation/types.d.ts +4 -0
- package/dist/notebook-creation/types.d.ts.map +1 -1
- package/dist/notebook-creation/video-manager.d.ts.map +1 -1
- package/dist/notebook-creation/video-manager.js +33 -35
- package/dist/notebook-creation/video-manager.js.map +1 -1
- package/dist/observability/metrics.d.ts +19 -0
- package/dist/observability/metrics.d.ts.map +1 -0
- package/dist/observability/metrics.js +35 -0
- package/dist/observability/metrics.js.map +1 -0
- package/dist/quota/quota-manager.d.ts +11 -3
- package/dist/quota/quota-manager.d.ts.map +1 -1
- package/dist/quota/quota-manager.js +139 -47
- package/dist/quota/quota-manager.js.map +1 -1
- package/dist/resources/resource-handlers.d.ts.map +1 -1
- package/dist/resources/resource-handlers.js +29 -12
- package/dist/resources/resource-handlers.js.map +1 -1
- package/dist/session/browser-session.d.ts.map +1 -1
- package/dist/session/browser-session.js +22 -22
- package/dist/session/browser-session.js.map +1 -1
- package/dist/session/session-timeout.d.ts.map +1 -1
- package/dist/session/session-timeout.js +4 -2
- package/dist/session/session-timeout.js.map +1 -1
- package/dist/session/shared-context-manager.d.ts.map +1 -1
- package/dist/session/shared-context-manager.js +31 -30
- package/dist/session/shared-context-manager.js.map +1 -1
- package/dist/tools/annotations.js +9 -9
- package/dist/tools/annotations.js.map +1 -1
- package/dist/tools/definitions/ask-question.d.ts.map +1 -1
- package/dist/tools/definitions/ask-question.js +35 -100
- package/dist/tools/definitions/ask-question.js.map +1 -1
- package/dist/tools/definitions/chat-history.d.ts +47 -1
- package/dist/tools/definitions/chat-history.d.ts.map +1 -1
- package/dist/tools/definitions/chat-history.js +10 -1
- package/dist/tools/definitions/chat-history.js.map +1 -1
- package/dist/tools/definitions/data-tables.d.ts.map +1 -1
- package/dist/tools/definitions/data-tables.js +2 -0
- package/dist/tools/definitions/data-tables.js.map +1 -1
- package/dist/tools/definitions/gemini.d.ts.map +1 -1
- package/dist/tools/definitions/gemini.js +40 -10
- package/dist/tools/definitions/gemini.js.map +1 -1
- package/dist/tools/definitions/notebook-management.d.ts.map +1 -1
- package/dist/tools/definitions/notebook-management.js +100 -70
- package/dist/tools/definitions/notebook-management.js.map +1 -1
- package/dist/tools/definitions/query-history.d.ts +47 -1
- package/dist/tools/definitions/query-history.d.ts.map +1 -1
- package/dist/tools/definitions/query-history.js +7 -0
- package/dist/tools/definitions/query-history.js.map +1 -1
- package/dist/tools/definitions/session-management.d.ts.map +1 -1
- package/dist/tools/definitions/session-management.js +5 -0
- package/dist/tools/definitions/session-management.js.map +1 -1
- package/dist/tools/definitions/system.d.ts.map +1 -1
- package/dist/tools/definitions/system.js +71 -100
- package/dist/tools/definitions/system.js.map +1 -1
- package/dist/tools/definitions/video.d.ts.map +1 -1
- package/dist/tools/definitions/video.js +3 -0
- package/dist/tools/definitions/video.js.map +1 -1
- package/dist/tools/definitions.d.ts.map +1 -1
- package/dist/tools/definitions.js +4 -0
- package/dist/tools/definitions.js.map +1 -1
- package/dist/tools/handlers/ask-question.d.ts +1 -1
- package/dist/tools/handlers/ask-question.d.ts.map +1 -1
- package/dist/tools/handlers/ask-question.js +56 -12
- package/dist/tools/handlers/ask-question.js.map +1 -1
- package/dist/tools/handlers/audio-video.d.ts.map +1 -1
- package/dist/tools/handlers/audio-video.js +15 -7
- package/dist/tools/handlers/audio-video.js.map +1 -1
- package/dist/tools/handlers/auth.d.ts +14 -19
- package/dist/tools/handlers/auth.d.ts.map +1 -1
- package/dist/tools/handlers/auth.js +77 -121
- package/dist/tools/handlers/auth.js.map +1 -1
- package/dist/tools/handlers/error-utils.d.ts +7 -0
- package/dist/tools/handlers/error-utils.d.ts.map +1 -0
- package/dist/tools/handlers/error-utils.js +17 -0
- package/dist/tools/handlers/error-utils.js.map +1 -0
- package/dist/tools/handlers/gemini.d.ts +1 -0
- package/dist/tools/handlers/gemini.d.ts.map +1 -1
- package/dist/tools/handlers/gemini.js +81 -51
- package/dist/tools/handlers/gemini.js.map +1 -1
- package/dist/tools/handlers/index.d.ts +39 -47
- package/dist/tools/handlers/index.d.ts.map +1 -1
- package/dist/tools/handlers/index.js +13 -2
- package/dist/tools/handlers/index.js.map +1 -1
- package/dist/tools/handlers/notebook-creation.d.ts.map +1 -1
- package/dist/tools/handlers/notebook-creation.js +99 -20
- package/dist/tools/handlers/notebook-creation.js.map +1 -1
- package/dist/tools/handlers/notebook-management.d.ts +8 -8
- package/dist/tools/handlers/notebook-management.d.ts.map +1 -1
- package/dist/tools/handlers/notebook-management.js +34 -80
- package/dist/tools/handlers/notebook-management.js.map +1 -1
- package/dist/tools/handlers/session-management.d.ts.map +1 -1
- package/dist/tools/handlers/session-management.js +12 -5
- package/dist/tools/handlers/session-management.js.map +1 -1
- package/dist/tools/handlers/system.d.ts.map +1 -1
- package/dist/tools/handlers/system.js +45 -10
- package/dist/tools/handlers/system.js.map +1 -1
- package/dist/tools/handlers/types.d.ts +1 -1
- package/dist/tools/handlers/types.d.ts.map +1 -1
- package/dist/tools/handlers/webhooks.d.ts.map +1 -1
- package/dist/tools/handlers/webhooks.js +15 -13
- package/dist/tools/handlers/webhooks.js.map +1 -1
- package/dist/types.d.ts +7 -17
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/audit-logger.d.ts +19 -1
- package/dist/utils/audit-logger.d.ts.map +1 -1
- package/dist/utils/audit-logger.js +193 -27
- package/dist/utils/audit-logger.js.map +1 -1
- package/dist/utils/cleanup-manager.d.ts.map +1 -1
- package/dist/utils/cleanup-manager.js +6 -3
- package/dist/utils/cleanup-manager.js.map +1 -1
- package/dist/utils/crypto.d.ts +4 -1
- package/dist/utils/crypto.d.ts.map +1 -1
- package/dist/utils/crypto.js +32 -21
- package/dist/utils/crypto.js.map +1 -1
- package/dist/utils/file-lock.d.ts.map +1 -1
- package/dist/utils/file-lock.js +80 -16
- package/dist/utils/file-lock.js.map +1 -1
- package/dist/utils/file-permissions.d.ts +2 -0
- package/dist/utils/file-permissions.d.ts.map +1 -1
- package/dist/utils/file-permissions.js +2 -1
- package/dist/utils/file-permissions.js.map +1 -1
- package/dist/utils/logger.d.ts +4 -0
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +16 -0
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/page-utils.d.ts.map +1 -1
- package/dist/utils/page-utils.js +22 -39
- package/dist/utils/page-utils.js.map +1 -1
- package/dist/utils/response-validator.d.ts.map +1 -1
- package/dist/utils/response-validator.js +27 -22
- package/dist/utils/response-validator.js.map +1 -1
- package/dist/utils/secrets-scanner.d.ts +11 -0
- package/dist/utils/secrets-scanner.d.ts.map +1 -1
- package/dist/utils/secrets-scanner.js +63 -15
- package/dist/utils/secrets-scanner.js.map +1 -1
- package/dist/utils/secure-memory.d.ts +9 -31
- package/dist/utils/secure-memory.d.ts.map +1 -1
- package/dist/utils/secure-memory.js +17 -102
- package/dist/utils/secure-memory.js.map +1 -1
- package/dist/utils/security.d.ts +4 -3
- package/dist/utils/security.d.ts.map +1 -1
- package/dist/utils/security.js +41 -11
- package/dist/utils/security.js.map +1 -1
- package/dist/utils/stealth-utils.d.ts.map +1 -1
- package/dist/utils/stealth-utils.js +4 -4
- package/dist/utils/stealth-utils.js.map +1 -1
- package/dist/webhooks/types.d.ts +2 -0
- package/dist/webhooks/types.d.ts.map +1 -1
- package/dist/webhooks/webhook-dispatcher.d.ts +80 -12
- package/dist/webhooks/webhook-dispatcher.d.ts.map +1 -1
- package/dist/webhooks/webhook-dispatcher.js +472 -72
- package/dist/webhooks/webhook-dispatcher.js.map +1 -1
- package/docs/archive/ISSUES-legacy-2026-04-24.md +644 -0
- package/docs/dependency-risk.md +25 -0
- package/docs/testing-runbook.md +166 -0
- package/docs/usage-guide.md +2 -1
- package/package.json +32 -15
|
@@ -5,6 +5,7 @@ export const sessionManagementTools = [
|
|
|
5
5
|
"Use to continue the most relevant session instead of starting from scratch.",
|
|
6
6
|
inputSchema: {
|
|
7
7
|
type: "object",
|
|
8
|
+
additionalProperties: false,
|
|
8
9
|
properties: {},
|
|
9
10
|
},
|
|
10
11
|
},
|
|
@@ -13,9 +14,11 @@ export const sessionManagementTools = [
|
|
|
13
14
|
description: "Close a specific session by session ID. Ask before closing if the user might still need it.",
|
|
14
15
|
inputSchema: {
|
|
15
16
|
type: "object",
|
|
17
|
+
additionalProperties: false,
|
|
16
18
|
properties: {
|
|
17
19
|
session_id: {
|
|
18
20
|
type: "string",
|
|
21
|
+
maxLength: 128,
|
|
19
22
|
description: "The session ID to close",
|
|
20
23
|
},
|
|
21
24
|
},
|
|
@@ -28,9 +31,11 @@ export const sessionManagementTools = [
|
|
|
28
31
|
"Use for a clean slate when the task changes; ask the user before resetting.",
|
|
29
32
|
inputSchema: {
|
|
30
33
|
type: "object",
|
|
34
|
+
additionalProperties: false,
|
|
31
35
|
properties: {
|
|
32
36
|
session_id: {
|
|
33
37
|
type: "string",
|
|
38
|
+
maxLength: 128,
|
|
34
39
|
description: "The session ID to reset",
|
|
35
40
|
},
|
|
36
41
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-management.js","sourceRoot":"","sources":["../../../src/tools/definitions/session-management.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,sBAAsB,GAAW;IAC5C;QACE,IAAI,EAAE,eAAe;QACrB,WAAW,EACT,2EAA2E;YAC3E,6EAA6E;QAC/E,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,EAAE;SACf;KACF;IACD;QACE,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,6FAA6F;QAC1G,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,yBAAyB;iBACvC;aACF;YACD,QAAQ,EAAE,CAAC,YAAY,CAAC;SACzB;KACF;IACD;QACE,IAAI,EAAE,eAAe;QACrB,WAAW,EACT,yDAAyD;YACzD,6EAA6E;QAC/E,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,yBAAyB;iBACvC;aACF;YACD,QAAQ,EAAE,CAAC,YAAY,CAAC;SACzB;KACF;CACF,CAAC"}
|
|
1
|
+
{"version":3,"file":"session-management.js","sourceRoot":"","sources":["../../../src/tools/definitions/session-management.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,sBAAsB,GAAW;IAC5C;QACE,IAAI,EAAE,eAAe;QACrB,WAAW,EACT,2EAA2E;YAC3E,6EAA6E;QAC/E,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,oBAAoB,EAAE,KAAK;YAC3B,UAAU,EAAE,EAAE;SACf;KACF;IACD;QACE,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,6FAA6F;QAC1G,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,oBAAoB,EAAE,KAAK;YAC3B,UAAU,EAAE;gBACV,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,SAAS,EAAE,GAAG;oBACd,WAAW,EAAE,yBAAyB;iBACvC;aACF;YACD,QAAQ,EAAE,CAAC,YAAY,CAAC;SACzB;KACF;IACD;QACE,IAAI,EAAE,eAAe;QACrB,WAAW,EACT,yDAAyD;YACzD,6EAA6E;QAC/E,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,oBAAoB,EAAE,KAAK;YAC3B,UAAU,EAAE;gBACV,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,SAAS,EAAE,GAAG;oBACd,WAAW,EAAE,yBAAyB;iBACvC;aACF;YACD,QAAQ,EAAE,CAAC,YAAY,CAAC;SACzB;KACF;CACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system.d.ts","sourceRoot":"","sources":["../../../src/tools/definitions/system.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"system.d.ts","sourceRoot":"","sources":["../../../src/tools/definitions/system.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AA4C1D,eAAO,MAAM,WAAW,EAAE,IAAI,EAgR7B,CAAC"}
|
|
@@ -1,60 +1,28 @@
|
|
|
1
|
-
|
|
2
|
-
{
|
|
3
|
-
name
|
|
4
|
-
description
|
|
5
|
-
"Use this to verify the server is ready before starting research workflows.\n\n" +
|
|
6
|
-
"**Deep Check Mode (v2026.1.1)**\n" +
|
|
7
|
-
"Set `deep_check: true` to actually verify the NotebookLM chat UI loads. " +
|
|
8
|
-
"This catches stale sessions where cookies exist but the UI won't load. " +
|
|
9
|
-
"Returns `chat_ui_accessible: true/false`.\n\n" +
|
|
10
|
-
"If authenticated=false and having persistent issues:\n" +
|
|
11
|
-
"Consider running cleanup_data(preserve_library=true) + setup_auth for fresh start with clean browser session.",
|
|
12
|
-
inputSchema: {
|
|
13
|
-
type: "object",
|
|
14
|
-
properties: {
|
|
15
|
-
deep_check: {
|
|
16
|
-
type: "boolean",
|
|
17
|
-
description: "If true, actually navigates to NotebookLM and verifies the chat UI loads. More reliable but slower (~5s). Use this before important query sessions.",
|
|
18
|
-
},
|
|
19
|
-
notebook_id: {
|
|
20
|
-
type: "string",
|
|
21
|
-
description: "Notebook to check (for deep_check). Defaults to active notebook or first available.",
|
|
22
|
-
},
|
|
23
|
-
},
|
|
24
|
-
},
|
|
25
|
-
},
|
|
26
|
-
{
|
|
27
|
-
name: "setup_auth",
|
|
28
|
-
description: "Google authentication for NotebookLM access - opens a browser window for manual login to your Google account. " +
|
|
29
|
-
"Returns immediately after opening the browser. You have up to 10 minutes to complete the login. " +
|
|
30
|
-
"Use 'get_health' tool afterwards to verify authentication was saved successfully. " +
|
|
31
|
-
"Use this for first-time authentication or when auto-login credentials are not available. " +
|
|
32
|
-
"For switching accounts or rate-limit workarounds, use 're_auth' tool instead.\n\n" +
|
|
33
|
-
"TROUBLESHOOTING for persistent auth issues:\n" +
|
|
34
|
-
"If setup_auth fails or you encounter browser/session issues:\n" +
|
|
35
|
-
"1. Ask user to close ALL Chrome/Chromium instances\n" +
|
|
36
|
-
"2. Run cleanup_data(confirm=true, preserve_library=true) to clean old data\n" +
|
|
37
|
-
"3. Run setup_auth again for fresh start\n" +
|
|
38
|
-
"This helps resolve conflicts from old browser sessions and installation data.",
|
|
1
|
+
function buildAuthTool(name, description) {
|
|
2
|
+
return {
|
|
3
|
+
name,
|
|
4
|
+
description,
|
|
39
5
|
inputSchema: {
|
|
40
6
|
type: "object",
|
|
7
|
+
additionalProperties: false,
|
|
41
8
|
properties: {
|
|
42
9
|
show_browser: {
|
|
43
10
|
type: "boolean",
|
|
44
|
-
description:
|
|
11
|
+
description: `Show browser window (simple version). Default: true for ${name === "setup_auth" ? "setup" : "re-auth"}. ` +
|
|
45
12
|
"For advanced control, use browser_options instead.",
|
|
46
13
|
},
|
|
47
14
|
browser_options: {
|
|
48
15
|
type: "object",
|
|
49
16
|
description: "Optional browser settings. Control visibility, timeouts, and stealth behavior.",
|
|
17
|
+
additionalProperties: false,
|
|
50
18
|
properties: {
|
|
51
19
|
show: {
|
|
52
20
|
type: "boolean",
|
|
53
|
-
description:
|
|
21
|
+
description: `Show browser window (default: true for ${name === "setup_auth" ? "setup" : "re-auth"})`,
|
|
54
22
|
},
|
|
55
23
|
headless: {
|
|
56
24
|
type: "boolean",
|
|
57
|
-
description:
|
|
25
|
+
description: `Run browser in headless mode (default: false for ${name === "setup_auth" ? "setup" : "re-auth"})`,
|
|
58
26
|
},
|
|
59
27
|
timeout_ms: {
|
|
60
28
|
type: "number",
|
|
@@ -64,78 +32,71 @@ export const systemTools = [
|
|
|
64
32
|
},
|
|
65
33
|
},
|
|
66
34
|
},
|
|
67
|
-
}
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
export const systemTools = [
|
|
68
38
|
{
|
|
69
|
-
name: "
|
|
70
|
-
description: "
|
|
71
|
-
"Use this
|
|
72
|
-
"
|
|
73
|
-
"
|
|
74
|
-
"
|
|
75
|
-
"
|
|
76
|
-
"
|
|
77
|
-
"
|
|
78
|
-
"3. Open browser for fresh Google login\n\n" +
|
|
79
|
-
"After completion, use 'get_health' to verify authentication.\n\n" +
|
|
80
|
-
"TROUBLESHOOTING for persistent auth issues:\n" +
|
|
81
|
-
"If re_auth fails repeatedly:\n" +
|
|
82
|
-
"1. Ask user to close ALL Chrome/Chromium instances\n" +
|
|
83
|
-
"2. Run cleanup_data(confirm=false, preserve_library=true) to preview old files\n" +
|
|
84
|
-
"3. Run cleanup_data(confirm=true, preserve_library=true) to clean everything except library\n" +
|
|
85
|
-
"4. Run re_auth again for completely fresh start\n" +
|
|
86
|
-
"This removes old installation data and browser sessions that can cause conflicts.",
|
|
39
|
+
name: "get_health",
|
|
40
|
+
description: "Get server health status including authentication state, active sessions, and configuration. " +
|
|
41
|
+
"Use this to verify the server is ready before starting research workflows.\n\n" +
|
|
42
|
+
"**Deep Check Mode (v2026.1.1)**\n" +
|
|
43
|
+
"Set `deep_check: true` to actually verify the NotebookLM chat UI loads. " +
|
|
44
|
+
"This catches stale sessions where cookies exist but the UI won't load. " +
|
|
45
|
+
"Returns `chat_ui_accessible: true/false`.\n\n" +
|
|
46
|
+
"If authenticated=false and having persistent issues:\n" +
|
|
47
|
+
"Consider running cleanup_data(preserve_library=true) + setup_auth for fresh start with clean browser session.",
|
|
87
48
|
inputSchema: {
|
|
88
49
|
type: "object",
|
|
50
|
+
additionalProperties: false,
|
|
89
51
|
properties: {
|
|
90
|
-
|
|
52
|
+
deep_check: {
|
|
91
53
|
type: "boolean",
|
|
92
|
-
description: "
|
|
93
|
-
"For advanced control, use browser_options instead.",
|
|
54
|
+
description: "If true, actually navigates to NotebookLM and verifies the chat UI loads. More reliable but slower (~5s). Use this before important query sessions.",
|
|
94
55
|
},
|
|
95
|
-
|
|
96
|
-
type: "
|
|
97
|
-
description: "
|
|
98
|
-
properties: {
|
|
99
|
-
show: {
|
|
100
|
-
type: "boolean",
|
|
101
|
-
description: "Show browser window (default: true for re-auth)",
|
|
102
|
-
},
|
|
103
|
-
headless: {
|
|
104
|
-
type: "boolean",
|
|
105
|
-
description: "Run browser in headless mode (default: false for re-auth)",
|
|
106
|
-
},
|
|
107
|
-
timeout_ms: {
|
|
108
|
-
type: "number",
|
|
109
|
-
description: "Browser operation timeout in milliseconds (default: 30000)",
|
|
110
|
-
},
|
|
111
|
-
},
|
|
56
|
+
notebook_id: {
|
|
57
|
+
type: "string",
|
|
58
|
+
description: "Notebook to check (for deep_check). Defaults to active notebook or first available.",
|
|
112
59
|
},
|
|
113
60
|
},
|
|
114
61
|
},
|
|
115
62
|
},
|
|
63
|
+
buildAuthTool("setup_auth", "Google authentication for NotebookLM access - opens a browser window for manual login to your Google account. " +
|
|
64
|
+
"Returns immediately after opening the browser. You have up to 10 minutes to complete the login. " +
|
|
65
|
+
"Use 'get_health' tool afterwards to verify authentication was saved successfully. " +
|
|
66
|
+
"Use this for first-time authentication or when auto-login credentials are not available. " +
|
|
67
|
+
"For switching accounts or rate-limit workarounds, use 're_auth' tool instead.\n\n" +
|
|
68
|
+
"TROUBLESHOOTING for persistent auth issues:\n" +
|
|
69
|
+
"If setup_auth fails or you encounter browser/session issues:\n" +
|
|
70
|
+
"1. Ask user to close ALL Chrome/Chromium instances\n" +
|
|
71
|
+
"2. Run cleanup_data(confirm=true, preserve_library=true) to clean old data\n" +
|
|
72
|
+
"3. Run setup_auth again for fresh start\n" +
|
|
73
|
+
"This helps resolve conflicts from old browser sessions and installation data."),
|
|
74
|
+
buildAuthTool("re_auth", "Switch to a different Google account or re-authenticate. " +
|
|
75
|
+
"Use this when:\n" +
|
|
76
|
+
"- NotebookLM rate limit is reached (50 queries/day for free accounts)\n" +
|
|
77
|
+
"- You want to switch to a different Google account\n" +
|
|
78
|
+
"- Authentication is broken and needs a fresh start\n\n" +
|
|
79
|
+
"This will:\n" +
|
|
80
|
+
"1. Close all active browser sessions\n" +
|
|
81
|
+
"2. Delete all saved authentication data (cookies, Chrome profile)\n" +
|
|
82
|
+
"3. Open browser for fresh Google login\n\n" +
|
|
83
|
+
"After completion, use 'get_health' to verify authentication.\n\n" +
|
|
84
|
+
"TROUBLESHOOTING for persistent auth issues:\n" +
|
|
85
|
+
"If re_auth fails repeatedly:\n" +
|
|
86
|
+
"1. Ask user to close ALL Chrome/Chromium instances\n" +
|
|
87
|
+
"2. Run cleanup_data(confirm=false, preserve_library=true) to preview old files\n" +
|
|
88
|
+
"3. Run cleanup_data(confirm=true, preserve_library=true) to clean everything except library\n" +
|
|
89
|
+
"4. Run re_auth again for completely fresh start\n" +
|
|
90
|
+
"This removes old installation data and browser sessions that can cause conflicts."),
|
|
116
91
|
{
|
|
117
92
|
name: "cleanup_data",
|
|
118
|
-
description: "
|
|
119
|
-
"
|
|
120
|
-
"
|
|
121
|
-
"
|
|
122
|
-
"2. Current Installation (notebooklm-mcp) - Active data, browser profiles, library\n" +
|
|
123
|
-
"3. NPM/NPX Cache - Cached installations from npx\n" +
|
|
124
|
-
"4. Claude CLI MCP Logs - MCP server logs from Claude CLI\n" +
|
|
125
|
-
"5. Temporary Backups - Backup directories in system temp\n" +
|
|
126
|
-
"6. Claude Projects Cache - Project-specific cache (optional)\n" +
|
|
127
|
-
"7. Editor Logs (Cursor/VSCode) - MCP logs from code editors (optional)\n" +
|
|
128
|
-
"8. Trash Files - Deleted notebooklm files in system trash (optional)\n\n" +
|
|
129
|
-
"Works cross-platform (Linux, Windows, macOS). Safe by design: shows detailed preview before deletion, requires explicit confirmation.\n\n" +
|
|
130
|
-
"LIBRARY PRESERVATION: Set preserve_library=true to keep your notebook library.json file while cleaning everything else.\n\n" +
|
|
131
|
-
"RECOMMENDED WORKFLOW for fresh start:\n" +
|
|
132
|
-
"1. Ask user to close ALL Chrome/Chromium instances\n" +
|
|
133
|
-
"2. Run cleanup_data(confirm=false, preserve_library=true) to preview\n" +
|
|
134
|
-
"3. Run cleanup_data(confirm=true, preserve_library=true) to execute\n" +
|
|
135
|
-
"4. Run setup_auth or re_auth for fresh browser session\n\n" +
|
|
136
|
-
"Use cases: Clean reinstall, troubleshooting auth issues, removing all traces before uninstall, cleaning old browser sessions and installation data.",
|
|
93
|
+
description: "Preview or delete NotebookLM MCP data across known install, browser, cache, log, backup, and trash locations. " +
|
|
94
|
+
"Run first with confirm=false, then rerun with confirm=true after review. " +
|
|
95
|
+
"Close all Chrome/Chromium instances before deleting browser data. " +
|
|
96
|
+
"Set preserve_library=true to keep the local notebook library.",
|
|
137
97
|
inputSchema: {
|
|
138
98
|
type: "object",
|
|
99
|
+
additionalProperties: false,
|
|
139
100
|
properties: {
|
|
140
101
|
confirm: {
|
|
141
102
|
type: "boolean",
|
|
@@ -170,6 +131,7 @@ export const systemTools = [
|
|
|
170
131
|
"Query counts reset daily at midnight.",
|
|
171
132
|
inputSchema: {
|
|
172
133
|
type: "object",
|
|
134
|
+
additionalProperties: false,
|
|
173
135
|
properties: {
|
|
174
136
|
sync: {
|
|
175
137
|
type: "boolean",
|
|
@@ -192,6 +154,7 @@ export const systemTools = [
|
|
|
192
154
|
"- ultra: 500 notebooks, 600 sources, 5000 queries/day",
|
|
193
155
|
inputSchema: {
|
|
194
156
|
type: "object",
|
|
157
|
+
additionalProperties: false,
|
|
195
158
|
properties: {
|
|
196
159
|
tier: {
|
|
197
160
|
type: "string",
|
|
@@ -216,6 +179,7 @@ export const systemTools = [
|
|
|
216
179
|
"Use this to understand which library context is active.",
|
|
217
180
|
inputSchema: {
|
|
218
181
|
type: "object",
|
|
182
|
+
additionalProperties: false,
|
|
219
183
|
properties: {},
|
|
220
184
|
},
|
|
221
185
|
},
|
|
@@ -245,6 +209,7 @@ export const systemTools = [
|
|
|
245
209
|
"```",
|
|
246
210
|
inputSchema: {
|
|
247
211
|
type: "object",
|
|
212
|
+
additionalProperties: false,
|
|
248
213
|
properties: {
|
|
249
214
|
id: {
|
|
250
215
|
type: "string",
|
|
@@ -256,7 +221,10 @@ export const systemTools = [
|
|
|
256
221
|
},
|
|
257
222
|
url: {
|
|
258
223
|
type: "string",
|
|
259
|
-
|
|
224
|
+
// HTTPS-only; blocks localhost, 127.x, RFC1918 ranges (I046)
|
|
225
|
+
pattern: "^https://(?!localhost|127\\.|10\\.|172\\.(1[6-9]|2[0-9]|3[01])\\.|192\\.168\\.).+",
|
|
226
|
+
maxLength: 2048,
|
|
227
|
+
description: "Webhook endpoint URL (must be HTTPS, no localhost or private IPs)",
|
|
260
228
|
},
|
|
261
229
|
enabled: {
|
|
262
230
|
type: "boolean",
|
|
@@ -286,6 +254,7 @@ export const systemTools = [
|
|
|
286
254
|
"Returns array of webhooks with: id, name, url, enabled, events, format.",
|
|
287
255
|
inputSchema: {
|
|
288
256
|
type: "object",
|
|
257
|
+
additionalProperties: false,
|
|
289
258
|
properties: {},
|
|
290
259
|
},
|
|
291
260
|
},
|
|
@@ -295,6 +264,7 @@ export const systemTools = [
|
|
|
295
264
|
"Sends a sample 'question_answered' event and returns success/failure.",
|
|
296
265
|
inputSchema: {
|
|
297
266
|
type: "object",
|
|
267
|
+
additionalProperties: false,
|
|
298
268
|
properties: {
|
|
299
269
|
id: {
|
|
300
270
|
type: "string",
|
|
@@ -309,6 +279,7 @@ export const systemTools = [
|
|
|
309
279
|
description: "Remove a configured webhook by ID.",
|
|
310
280
|
inputSchema: {
|
|
311
281
|
type: "object",
|
|
282
|
+
additionalProperties: false,
|
|
312
283
|
properties: {
|
|
313
284
|
id: {
|
|
314
285
|
type: "string",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system.js","sourceRoot":"","sources":["../../../src/tools/definitions/system.ts"],"names":[],"mappings":"AAEA,
|
|
1
|
+
{"version":3,"file":"system.js","sourceRoot":"","sources":["../../../src/tools/definitions/system.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"video.d.ts","sourceRoot":"","sources":["../../../src/tools/definitions/video.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"video.d.ts","sourceRoot":"","sources":["../../../src/tools/definitions/video.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAqG/D;;GAEG;AACH,eAAO,MAAM,UAAU,EAAE,IAAI,EAG5B,CAAC"}
|
|
@@ -16,6 +16,7 @@ const generateVideoOverviewTool = {
|
|
|
16
16
|
- Supports multiple visual styles and formats
|
|
17
17
|
- Generation takes 3-10 minutes typically
|
|
18
18
|
- Returns immediately with status (check with get_video_status)
|
|
19
|
+
- NotebookLM does not currently expose a supported video download path through this MCP server; use the NotebookLM UI to download ready videos.
|
|
19
20
|
|
|
20
21
|
## Visual Styles
|
|
21
22
|
- **auto-select** — Let NotebookLM choose the best style (default)
|
|
@@ -43,6 +44,7 @@ const generateVideoOverviewTool = {
|
|
|
43
44
|
\`\`\``,
|
|
44
45
|
inputSchema: {
|
|
45
46
|
type: "object",
|
|
47
|
+
additionalProperties: false,
|
|
46
48
|
properties: {
|
|
47
49
|
notebook_id: {
|
|
48
50
|
type: "string",
|
|
@@ -85,6 +87,7 @@ const getVideoStatusTool = {
|
|
|
85
87
|
\`\`\``,
|
|
86
88
|
inputSchema: {
|
|
87
89
|
type: "object",
|
|
90
|
+
additionalProperties: false,
|
|
88
91
|
properties: {
|
|
89
92
|
notebook_id: {
|
|
90
93
|
type: "string",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"video.js","sourceRoot":"","sources":["../../../src/tools/definitions/video.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;GAEG;AACH,MAAM,yBAAyB,GAAS;IACtC,IAAI,EAAE,yBAAyB;IAC/B,WAAW,EAAE
|
|
1
|
+
{"version":3,"file":"video.js","sourceRoot":"","sources":["../../../src/tools/definitions/video.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;GAEG;AACH,MAAM,yBAAyB,GAAS;IACtC,IAAI,EAAE,yBAAyB;IAC/B,WAAW,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAiCR;IACL,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,oBAAoB,EAAE,KAAK;QAC3B,UAAU,EAAE;YACV,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,qBAAqB;aACnC;YACD,YAAY,EAAE;gBACZ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,gDAAgD;aAC9D;YACD,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,CAAC;gBACpI,OAAO,EAAE,aAAa;gBACtB,WAAW,EAAE,qCAAqC;aACnD;YACD,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,WAAW,EAAE,OAAO,CAAC;gBAC5B,OAAO,EAAE,WAAW;gBACpB,WAAW,EAAE,wDAAwD;aACtE;SACF;KACF;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,kBAAkB,GAAS;IAC/B,IAAI,EAAE,kBAAkB;IACxB,WAAW,EAAE;;;;;;;;;;OAUR;IACL,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,oBAAoB,EAAE,KAAK;QAC3B,UAAU,EAAE;YACV,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,qBAAqB;aACnC;YACD,YAAY,EAAE;gBACZ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,gDAAgD;aAC9D;SACF;KACF;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAW;IAChC,yBAAyB;IACzB,kBAAkB;CACnB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definitions.d.ts","sourceRoot":"","sources":["../../src/tools/definitions.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"definitions.d.ts","sourceRoot":"","sources":["../../src/tools/definitions.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAqCjE;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,EAAE,CAyBrE"}
|
|
@@ -15,6 +15,7 @@ import { videoTools } from "./definitions/video.js";
|
|
|
15
15
|
import { dataTableTools } from "./definitions/data-tables.js";
|
|
16
16
|
import { queryHistoryTools } from "./definitions/query-history.js";
|
|
17
17
|
import { chatHistoryTools } from "./definitions/chat-history.js";
|
|
18
|
+
import { getComplianceTools } from "../compliance/compliance-tools.js";
|
|
18
19
|
import { getToolIcons } from "./icons.js";
|
|
19
20
|
import { getToolMetadata } from "./annotations.js";
|
|
20
21
|
/**
|
|
@@ -56,6 +57,9 @@ export function buildToolDefinitions(library) {
|
|
|
56
57
|
...dataTableTools,
|
|
57
58
|
...queryHistoryTools,
|
|
58
59
|
...chatHistoryTools,
|
|
60
|
+
// Compliance tools (GDPR/SOC2/CSSF) — registered so the
|
|
61
|
+
// enterpriseCompliance claims in package.json are reachable via MCP.
|
|
62
|
+
...getComplianceTools(),
|
|
59
63
|
];
|
|
60
64
|
// Apply enhanced metadata to all tools
|
|
61
65
|
return allTools.map(enhanceTool);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/tools/definitions.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,EACL,eAAe,EACf,2BAA2B,GAC5B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAC/E,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD;;GAEG;AACH,SAAS,WAAW,CAAC,IAAU;IAC7B,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE5C,OAAO;QACL,GAAG,IAAI;QACP,yBAAyB;QACzB,GAAG,CAAC,KAAK,IAAI,EAAE,KAAK,EAAE,CAAC;QACvB,+CAA+C;QAC/C,GAAG,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC;QACjD,gDAAgD;QAChD,GAAG,CAAC,QAAQ,EAAE,WAAW,IAAI,EAAE,WAAW,EAAE,QAAQ,CAAC,WAAW,EAAE,CAAC;QACnE,wDAAwD;QACxD,GAAG,CAAC,QAAQ,EAAE,SAAS,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC;KAC9D,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAwB;IAC3D,qEAAqE;IACrE,MAAM,sBAAsB,GAAG;QAC7B,GAAG,eAAe;QAClB,WAAW,EAAE,2BAA2B,CAAC,OAAO,CAAC;KAClD,CAAC;IAEF,sBAAsB;IACtB,MAAM,QAAQ,GAAW;QACvB,sBAAsB;QACtB,GAAG,uBAAuB;QAC1B,GAAG,sBAAsB;QACzB,GAAG,WAAW;QACd,GAAG,WAAW;QACd,GAAG,UAAU;QACb,GAAG,cAAc;QACjB,GAAG,iBAAiB;QACpB,GAAG,gBAAgB;
|
|
1
|
+
{"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/tools/definitions.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,EACL,eAAe,EACf,2BAA2B,GAC5B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAC/E,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD;;GAEG;AACH,SAAS,WAAW,CAAC,IAAU;IAC7B,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE5C,OAAO;QACL,GAAG,IAAI;QACP,yBAAyB;QACzB,GAAG,CAAC,KAAK,IAAI,EAAE,KAAK,EAAE,CAAC;QACvB,+CAA+C;QAC/C,GAAG,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC;QACjD,gDAAgD;QAChD,GAAG,CAAC,QAAQ,EAAE,WAAW,IAAI,EAAE,WAAW,EAAE,QAAQ,CAAC,WAAW,EAAE,CAAC;QACnE,wDAAwD;QACxD,GAAG,CAAC,QAAQ,EAAE,SAAS,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC;KAC9D,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAwB;IAC3D,qEAAqE;IACrE,MAAM,sBAAsB,GAAG;QAC7B,GAAG,eAAe;QAClB,WAAW,EAAE,2BAA2B,CAAC,OAAO,CAAC;KAClD,CAAC;IAEF,sBAAsB;IACtB,MAAM,QAAQ,GAAW;QACvB,sBAAsB;QACtB,GAAG,uBAAuB;QAC1B,GAAG,sBAAsB;QACzB,GAAG,WAAW;QACd,GAAG,WAAW;QACd,GAAG,UAAU;QACb,GAAG,cAAc;QACjB,GAAG,iBAAiB;QACpB,GAAG,gBAAgB;QACnB,wDAAwD;QACxD,qEAAqE;QACrE,GAAG,kBAAkB,EAAE;KACxB,CAAC;IAEF,uCAAuC;IACvC,OAAO,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AACnC,CAAC"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Handler for the ask_question tool
|
|
3
3
|
*/
|
|
4
4
|
import type { HandlerContext } from "./types.js";
|
|
5
|
-
import {
|
|
5
|
+
import type { BrowserOptions } from "../../notebook-creation/browser-options.js";
|
|
6
6
|
import type { AskQuestionResult, ToolResult, ProgressCallback } from "../../types.js";
|
|
7
7
|
/**
|
|
8
8
|
* Handle ask_question tool
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ask-question.d.ts","sourceRoot":"","sources":["../../../src/tools/handlers/ask-question.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"ask-question.d.ts","sourceRoot":"","sources":["../../../src/tools/handlers/ask-question.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAC;AAEjF,OAAO,KAAK,EACV,iBAAiB,EACjB,UAAU,EACV,gBAAgB,EACjB,MAAM,gBAAgB,CAAC;AAuDxB;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE;IACJ,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,eAAe,CAAC,EAAE,cAAc,CAAC;CAClC,EACD,YAAY,CAAC,EAAE,gBAAgB,GAC9B,OAAO,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,CA8SxC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Handler for the ask_question tool
|
|
3
3
|
*/
|
|
4
|
+
import crypto from "node:crypto";
|
|
4
5
|
import { CONFIG } from "../../config.js";
|
|
5
6
|
import { log } from "../../utils/logger.js";
|
|
6
7
|
import { RateLimitError } from "../../errors.js";
|
|
@@ -9,6 +10,33 @@ import { audit } from "../../utils/audit-logger.js";
|
|
|
9
10
|
import { validateResponse } from "../../utils/response-validator.js";
|
|
10
11
|
import { getQuotaManager } from "../../quota/index.js";
|
|
11
12
|
import { getQueryLogger } from "../../logging/index.js";
|
|
13
|
+
import { getErrorAuditArgs, getSanitizedErrorMessage, } from "./error-utils.js";
|
|
14
|
+
function validateBrowserOptionRanges(browserOptions) {
|
|
15
|
+
const stealth = browserOptions?.stealth;
|
|
16
|
+
if (!stealth)
|
|
17
|
+
return null;
|
|
18
|
+
if (stealth.typing_wpm_min !== undefined &&
|
|
19
|
+
stealth.typing_wpm_max !== undefined &&
|
|
20
|
+
stealth.typing_wpm_min > stealth.typing_wpm_max) {
|
|
21
|
+
return "browser_options.stealth.typing_wpm_min must be less than or equal to typing_wpm_max";
|
|
22
|
+
}
|
|
23
|
+
if (stealth.delay_min_ms !== undefined &&
|
|
24
|
+
stealth.delay_max_ms !== undefined &&
|
|
25
|
+
stealth.delay_min_ms > stealth.delay_max_ms) {
|
|
26
|
+
return "browser_options.stealth.delay_min_ms must be less than or equal to delay_max_ms";
|
|
27
|
+
}
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
function getRateLimitKey(sessionId, notebookId, notebookUrl) {
|
|
31
|
+
if (sessionId)
|
|
32
|
+
return `session:${sessionId}`;
|
|
33
|
+
if (notebookId)
|
|
34
|
+
return `notebook:${notebookId}`;
|
|
35
|
+
if (notebookUrl) {
|
|
36
|
+
return `notebook_url:${crypto.createHash("sha256").update(notebookUrl).digest("hex").slice(0, 16)}`;
|
|
37
|
+
}
|
|
38
|
+
return "anonymous";
|
|
39
|
+
}
|
|
12
40
|
/**
|
|
13
41
|
* Handle ask_question tool
|
|
14
42
|
*/
|
|
@@ -41,16 +69,17 @@ export async function handleAskQuestion(ctx, args, sendProgress) {
|
|
|
41
69
|
log.info(` Notebook URL: ${safeNotebookUrl}`);
|
|
42
70
|
}
|
|
43
71
|
// Rate limiting check
|
|
44
|
-
const rateLimitKey = safeSessionId
|
|
72
|
+
const rateLimitKey = getRateLimitKey(safeSessionId, safeNotebookId, safeNotebookUrl);
|
|
45
73
|
if (!ctx.rateLimiter.isAllowed(rateLimitKey)) {
|
|
46
74
|
log.warning(`🚫 Rate limit exceeded for ${rateLimitKey}`);
|
|
47
75
|
await audit.security("rate_limit_exceeded", "warning", {
|
|
48
76
|
session_id: rateLimitKey,
|
|
49
77
|
remaining: ctx.rateLimiter.getRemaining(rateLimitKey),
|
|
50
78
|
});
|
|
51
|
-
await audit.tool("ask_question",
|
|
79
|
+
await audit.tool("ask_question", getErrorAuditArgs("ask_question", "Rate limit exceeded"), false, Date.now() - startTime, "Rate limit exceeded");
|
|
52
80
|
return {
|
|
53
81
|
success: false,
|
|
82
|
+
data: null,
|
|
54
83
|
error: `Rate limit exceeded. Please wait before making more requests. Remaining: ${ctx.rateLimiter.getRemaining(rateLimitKey)}`,
|
|
55
84
|
};
|
|
56
85
|
}
|
|
@@ -59,24 +88,37 @@ export async function handleAskQuestion(ctx, args, sendProgress) {
|
|
|
59
88
|
const canQuery = quotaManager.canMakeQuery();
|
|
60
89
|
if (!canQuery.allowed) {
|
|
61
90
|
log.warning(`⚠️ Quota limit: ${canQuery.reason}`);
|
|
62
|
-
|
|
91
|
+
const quotaError = canQuery.reason || "Query quota exceeded";
|
|
92
|
+
await audit.tool("ask_question", getErrorAuditArgs("ask_question", quotaError), false, Date.now() - startTime, quotaError);
|
|
93
|
+
return {
|
|
94
|
+
success: false,
|
|
95
|
+
data: null,
|
|
96
|
+
error: quotaError || "Daily query limit reached. Try again tomorrow or upgrade your plan.",
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
const browserOptionError = validateBrowserOptionRanges(browser_options);
|
|
100
|
+
if (browserOptionError) {
|
|
101
|
+
await audit.tool("ask_question", getErrorAuditArgs("ask_question", browserOptionError), false, Date.now() - startTime, browserOptionError);
|
|
63
102
|
return {
|
|
64
103
|
success: false,
|
|
65
|
-
|
|
104
|
+
data: null,
|
|
105
|
+
error: browserOptionError,
|
|
66
106
|
};
|
|
67
107
|
}
|
|
68
108
|
}
|
|
69
109
|
catch (error) {
|
|
70
110
|
if (error instanceof SecurityError) {
|
|
71
|
-
|
|
111
|
+
const errorMessage = getSanitizedErrorMessage(error);
|
|
112
|
+
log.error(`🛡️ [SECURITY] Validation failed: ${errorMessage}`);
|
|
72
113
|
await audit.security("validation_failed", "error", {
|
|
73
114
|
tool: "ask_question",
|
|
74
|
-
error:
|
|
115
|
+
error: errorMessage,
|
|
75
116
|
});
|
|
76
|
-
await audit.tool("ask_question",
|
|
117
|
+
await audit.tool("ask_question", getErrorAuditArgs("ask_question", errorMessage), false, Date.now() - startTime, errorMessage);
|
|
77
118
|
return {
|
|
78
119
|
success: false,
|
|
79
|
-
|
|
120
|
+
data: null,
|
|
121
|
+
error: `Security validation failed: ${errorMessage}`,
|
|
80
122
|
};
|
|
81
123
|
}
|
|
82
124
|
throw error;
|
|
@@ -207,16 +249,17 @@ export async function handleAskQuestion(ctx, args, sendProgress) {
|
|
|
207
249
|
};
|
|
208
250
|
}
|
|
209
251
|
catch (error) {
|
|
210
|
-
const errorMessage =
|
|
252
|
+
const errorMessage = getSanitizedErrorMessage(error);
|
|
211
253
|
// Special handling for rate limit errors
|
|
212
|
-
if (error instanceof RateLimitError
|
|
254
|
+
if (error instanceof RateLimitError) {
|
|
213
255
|
log.error(`🚫 [TOOL] Rate limit detected`);
|
|
214
256
|
await audit.security("notebooklm_rate_limit", "warning", {
|
|
215
257
|
session_id: safeSessionId,
|
|
216
258
|
});
|
|
217
|
-
await audit.tool("ask_question",
|
|
259
|
+
await audit.tool("ask_question", getErrorAuditArgs("ask_question", "NotebookLM rate limit"), false, Date.now() - startTime, "NotebookLM rate limit");
|
|
218
260
|
return {
|
|
219
261
|
success: false,
|
|
262
|
+
data: null,
|
|
220
263
|
error: "NotebookLM rate limit reached (50 queries/day for free accounts).\n\n" +
|
|
221
264
|
"You can:\n" +
|
|
222
265
|
"1. Use the 're_auth' tool to login with a different Google account\n" +
|
|
@@ -226,9 +269,10 @@ export async function handleAskQuestion(ctx, args, sendProgress) {
|
|
|
226
269
|
};
|
|
227
270
|
}
|
|
228
271
|
log.error(`❌ [TOOL] ask_question failed: ${errorMessage}`);
|
|
229
|
-
await audit.tool("ask_question",
|
|
272
|
+
await audit.tool("ask_question", getErrorAuditArgs("ask_question", errorMessage), false, Date.now() - startTime, errorMessage);
|
|
230
273
|
return {
|
|
231
274
|
success: false,
|
|
275
|
+
data: null,
|
|
232
276
|
error: errorMessage,
|
|
233
277
|
};
|
|
234
278
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ask-question.js","sourceRoot":"","sources":["../../../src/tools/handlers/ask-question.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"ask-question.js","sourceRoot":"","sources":["../../../src/tools/handlers/ask-question.ts"],"names":[],"mappings":"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"}
|