@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
@@ -0,0 +1,328 @@
1
+ /**
2
+ * Certificate Pinning for NotebookLM MCP Server
3
+ *
4
+ * Provides certificate pinning for HTTPS connections:
5
+ * - Pin Google's root CA certificates
6
+ * - Detect MITM attacks
7
+ * - Validate certificate chains
8
+ *
9
+ * Why this matters:
10
+ * - Prevents man-in-the-middle attacks
11
+ * - Protects against rogue CA certificates
12
+ * - Ensures only Google's real servers are trusted
13
+ *
14
+ * Added by Pantheon Security for hardened fork.
15
+ */
16
+ import https from "https";
17
+ import tls from "tls";
18
+ import crypto from "crypto";
19
+ import { log } from "./logger.js";
20
+ import { audit } from "./audit-logger.js";
21
+ /**
22
+ * Google's trusted root CA Subject Public Key Info (SPKI) hashes
23
+ * These are SHA-256 hashes of the Subject Public Key Info
24
+ *
25
+ * Updated: November 2025
26
+ * Sources:
27
+ * - Google Trust Services roots: https://pki.goog/
28
+ * - GTS Root R1, R2, R3, R4
29
+ * - GlobalSign Root CA (backup)
30
+ */
31
+ const PINNED_CERTIFICATES = {
32
+ // Google Trust Services roots
33
+ "*.google.com": [
34
+ // GTS Root R1
35
+ "hxqRlPTu1bMS/0DITB1SSu0vd4u/8l8TjPgfaAp63Gc=",
36
+ // GTS Root R2
37
+ "Vfd95BwDeSQo+NUYxVEEIBvvpOs/QbsFp7DeP0Cr1pE=",
38
+ // GTS Root R3
39
+ "QXnt2YHvdHR3tJYmQIr0Paosp6t/nggsEGD4QJZ3Q0g=",
40
+ // GTS Root R4
41
+ "mEflZT5enoR1FuXLgYYGqnVEoZvmf9c2bVBpiOjYQ0c=",
42
+ // GlobalSign Root CA - R2 (backup)
43
+ "iie1VXtL7HzAMF+/PVPR9xzT80kQxdZeJ+zduCB3uj0=",
44
+ // DigiCert Global Root G2 (backup)
45
+ "i7WTqTvh0OioIruIfFR4kMPnBqrS2rdiVPl/s2uC/CY=",
46
+ ],
47
+ "notebooklm.google.com": [
48
+ // Same as *.google.com
49
+ "hxqRlPTu1bMS/0DITB1SSu0vd4u/8l8TjPgfaAp63Gc=",
50
+ "Vfd95BwDeSQo+NUYxVEEIBvvpOs/QbsFp7DeP0Cr1pE=",
51
+ "QXnt2YHvdHR3tJYmQIr0Paosp6t/nggsEGD4QJZ3Q0g=",
52
+ "mEflZT5enoR1FuXLgYYGqnVEoZvmf9c2bVBpiOjYQ0c=",
53
+ "iie1VXtL7HzAMF+/PVPR9xzT80kQxdZeJ+zduCB3uj0=",
54
+ "i7WTqTvh0OioIruIfFR4kMPnBqrS2rdiVPl/s2uC/CY=",
55
+ ],
56
+ "accounts.google.com": [
57
+ // Same as *.google.com
58
+ "hxqRlPTu1bMS/0DITB1SSu0vd4u/8l8TjPgfaAp63Gc=",
59
+ "Vfd95BwDeSQo+NUYxVEEIBvvpOs/QbsFp7DeP0Cr1pE=",
60
+ "QXnt2YHvdHR3tJYmQIr0Paosp6t/nggsEGD4QJZ3Q0g=",
61
+ "mEflZT5enoR1FuXLgYYGqnVEoZvmf9c2bVBpiOjYQ0c=",
62
+ "iie1VXtL7HzAMF+/PVPR9xzT80kQxdZeJ+zduCB3uj0=",
63
+ "i7WTqTvh0OioIruIfFR4kMPnBqrS2rdiVPl/s2uC/CY=",
64
+ ],
65
+ };
66
+ /**
67
+ * Get certificate pinning configuration
68
+ */
69
+ function getPinningConfig() {
70
+ return {
71
+ enabled: process.env.NLMCP_CERT_PINNING !== "false",
72
+ failOpen: process.env.NLMCP_CERT_FAIL_OPEN === "true",
73
+ reportOnly: process.env.NLMCP_CERT_REPORT_ONLY === "true",
74
+ additionalPins: {},
75
+ };
76
+ }
77
+ /**
78
+ * Calculate SPKI hash for a certificate
79
+ */
80
+ export function calculateSPKIHash(cert) {
81
+ // Get the public key in DER format
82
+ const pubkey = cert.pubkey;
83
+ if (!pubkey) {
84
+ throw new Error("Certificate has no public key");
85
+ }
86
+ // Calculate SHA-256 hash and encode as base64
87
+ const hash = crypto.createHash("sha256").update(pubkey).digest("base64");
88
+ return hash;
89
+ }
90
+ /**
91
+ * Get all SPKI hashes from a certificate chain
92
+ */
93
+ export function getCertificateChainHashes(socket) {
94
+ const hashes = [];
95
+ const cert = socket.getPeerCertificate(true);
96
+ if (!cert || !cert.raw) {
97
+ return hashes;
98
+ }
99
+ // Walk the certificate chain
100
+ let current = cert;
101
+ const seen = new Set();
102
+ while (current && current.raw) {
103
+ const fingerprint = current.fingerprint256;
104
+ if (seen.has(fingerprint))
105
+ break;
106
+ seen.add(fingerprint);
107
+ try {
108
+ if (current.pubkey) {
109
+ const hash = crypto.createHash("sha256").update(current.pubkey).digest("base64");
110
+ hashes.push(hash);
111
+ }
112
+ }
113
+ catch {
114
+ // Skip certificates we can't hash
115
+ }
116
+ current = current.issuerCertificate;
117
+ }
118
+ return hashes;
119
+ }
120
+ /**
121
+ * Validate a certificate chain against pinned certificates
122
+ */
123
+ export function validateCertificatePin(hostname, chainHashes, config = getPinningConfig()) {
124
+ if (!config.enabled) {
125
+ return { valid: true };
126
+ }
127
+ // Get pins for this hostname
128
+ const pins = getPinsForHostname(hostname, config);
129
+ if (pins.length === 0) {
130
+ // No pins configured for this host
131
+ return { valid: true };
132
+ }
133
+ // Check if any certificate in the chain matches a pin
134
+ for (const hash of chainHashes) {
135
+ if (pins.includes(hash)) {
136
+ return { valid: true, matchedPin: hash };
137
+ }
138
+ }
139
+ // No match found
140
+ const error = `Certificate pinning failed for ${hostname}. ` +
141
+ `Chain hashes: [${chainHashes.join(", ")}]. ` +
142
+ `Expected one of: [${pins.join(", ")}]`;
143
+ return { valid: false, error };
144
+ }
145
+ /**
146
+ * Get pinned certificates for a hostname
147
+ */
148
+ function getPinsForHostname(hostname, config) {
149
+ const pins = [];
150
+ // Check exact match
151
+ if (PINNED_CERTIFICATES[hostname]) {
152
+ pins.push(...PINNED_CERTIFICATES[hostname]);
153
+ }
154
+ // Check wildcard match
155
+ const parts = hostname.split(".");
156
+ if (parts.length >= 2) {
157
+ const wildcard = "*." + parts.slice(1).join(".");
158
+ if (PINNED_CERTIFICATES[wildcard]) {
159
+ pins.push(...PINNED_CERTIFICATES[wildcard]);
160
+ }
161
+ }
162
+ // Check additional pins from config
163
+ if (config.additionalPins[hostname]) {
164
+ pins.push(...config.additionalPins[hostname]);
165
+ }
166
+ return [...new Set(pins)]; // Deduplicate
167
+ }
168
+ /**
169
+ * Certificate Pinning Manager
170
+ */
171
+ export class CertificatePinningManager {
172
+ config;
173
+ violationCount = 0;
174
+ lastViolation;
175
+ constructor(config) {
176
+ this.config = { ...getPinningConfig(), ...config };
177
+ }
178
+ /**
179
+ * Check if pinning is enabled
180
+ */
181
+ isEnabled() {
182
+ return this.config.enabled;
183
+ }
184
+ /**
185
+ * Validate a TLS connection
186
+ */
187
+ async validateConnection(socket, hostname) {
188
+ if (!this.config.enabled) {
189
+ return true;
190
+ }
191
+ const chainHashes = getCertificateChainHashes(socket);
192
+ const result = validateCertificatePin(hostname, chainHashes, this.config);
193
+ if (!result.valid) {
194
+ this.violationCount++;
195
+ this.lastViolation = {
196
+ hostname,
197
+ timestamp: new Date(),
198
+ chainHashes,
199
+ };
200
+ // Log the violation
201
+ log.error(`🔒 Certificate pinning violation for ${hostname}`);
202
+ log.error(` Chain hashes: ${chainHashes.join(", ")}`);
203
+ await audit.security("cert_pinning_violation", "critical", {
204
+ hostname,
205
+ chain_hashes: chainHashes,
206
+ error: result.error,
207
+ report_only: this.config.reportOnly,
208
+ });
209
+ if (this.config.reportOnly) {
210
+ log.warning(" (Report-only mode - connection allowed)");
211
+ return true;
212
+ }
213
+ if (this.config.failOpen) {
214
+ log.warning(" (Fail-open mode - connection allowed)");
215
+ return true;
216
+ }
217
+ return false;
218
+ }
219
+ if (result.matchedPin) {
220
+ log.info(`🔒 Certificate pinning verified for ${hostname}`);
221
+ }
222
+ return true;
223
+ }
224
+ /**
225
+ * Create an HTTPS agent with certificate pinning
226
+ */
227
+ createPinnedAgent(_hostname) {
228
+ const self = this;
229
+ return new https.Agent({
230
+ checkServerIdentity: (host, cert) => {
231
+ // First do normal hostname verification
232
+ const err = tls.checkServerIdentity(host, cert);
233
+ if (err) {
234
+ return err;
235
+ }
236
+ // Then check certificate pinning
237
+ if (self.config.enabled && cert.pubkey) {
238
+ const hash = crypto.createHash("sha256").update(cert.pubkey).digest("base64");
239
+ const pins = getPinsForHostname(host, self.config);
240
+ if (pins.length > 0 && !pins.includes(hash)) {
241
+ self.violationCount++;
242
+ if (!self.config.reportOnly && !self.config.failOpen) {
243
+ return new Error(`Certificate pinning failed for ${host}`);
244
+ }
245
+ }
246
+ }
247
+ return undefined;
248
+ },
249
+ });
250
+ }
251
+ /**
252
+ * Get violation statistics
253
+ */
254
+ getStats() {
255
+ return {
256
+ enabled: this.config.enabled,
257
+ reportOnly: this.config.reportOnly,
258
+ violationCount: this.violationCount,
259
+ lastViolation: this.lastViolation
260
+ ? {
261
+ hostname: this.lastViolation.hostname,
262
+ timestamp: this.lastViolation.timestamp,
263
+ }
264
+ : undefined,
265
+ };
266
+ }
267
+ /**
268
+ * Update configuration
269
+ */
270
+ updateConfig(config) {
271
+ this.config = { ...this.config, ...config };
272
+ }
273
+ /**
274
+ * Add a custom pin for a hostname
275
+ */
276
+ addPin(hostname, spkiHash) {
277
+ if (!this.config.additionalPins[hostname]) {
278
+ this.config.additionalPins[hostname] = [];
279
+ }
280
+ if (!this.config.additionalPins[hostname].includes(spkiHash)) {
281
+ this.config.additionalPins[hostname].push(spkiHash);
282
+ }
283
+ }
284
+ }
285
+ /**
286
+ * Global certificate pinning manager
287
+ */
288
+ let globalPinningManager = null;
289
+ /**
290
+ * Get or create the global pinning manager
291
+ */
292
+ export function getCertificatePinningManager() {
293
+ if (!globalPinningManager) {
294
+ globalPinningManager = new CertificatePinningManager();
295
+ }
296
+ return globalPinningManager;
297
+ }
298
+ /**
299
+ * Utility to extract and display certificate pins from a hostname
300
+ * Useful for updating pinned certificates
301
+ */
302
+ export async function extractCertificatePins(hostname) {
303
+ return new Promise((resolve, reject) => {
304
+ const options = {
305
+ host: hostname,
306
+ port: 443,
307
+ servername: hostname,
308
+ rejectUnauthorized: true,
309
+ };
310
+ const socket = tls.connect(options, () => {
311
+ try {
312
+ const hashes = getCertificateChainHashes(socket);
313
+ socket.end();
314
+ resolve(hashes);
315
+ }
316
+ catch (error) {
317
+ socket.end();
318
+ reject(error);
319
+ }
320
+ });
321
+ socket.on("error", reject);
322
+ socket.setTimeout(10000, () => {
323
+ socket.destroy();
324
+ reject(new Error("Connection timeout"));
325
+ });
326
+ });
327
+ }
328
+ //# sourceMappingURL=cert-pinning.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cert-pinning.js","sourceRoot":"","sources":["../../src/utils/cert-pinning.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,133 @@
1
+ /**
2
+ * Cleanup Manager for NotebookLM MCP Server
3
+ *
4
+ * ULTRATHINK EDITION - Complete cleanup across all platforms!
5
+ *
6
+ * Handles safe removal of:
7
+ * - Legacy data from notebooklm-mcp-nodejs
8
+ * - Current installation data
9
+ * - Browser profiles and session data
10
+ * - NPM/NPX cache
11
+ * - Claude CLI MCP logs
12
+ * - Claude Projects cache
13
+ * - Temporary backups
14
+ * - Editor logs (Cursor, VSCode)
15
+ * - Trash files (optional)
16
+ *
17
+ * Platform support: Linux, Windows, macOS
18
+ */
19
+ export type CleanupMode = "legacy" | "all" | "deep";
20
+ export interface CleanupResult {
21
+ success: boolean;
22
+ mode: CleanupMode;
23
+ deletedPaths: string[];
24
+ failedPaths: string[];
25
+ totalSizeBytes: number;
26
+ categorySummary: Record<string, {
27
+ count: number;
28
+ bytes: number;
29
+ }>;
30
+ }
31
+ export interface CleanupCategory {
32
+ name: string;
33
+ description: string;
34
+ paths: string[];
35
+ totalBytes: number;
36
+ optional: boolean;
37
+ }
38
+ export declare class CleanupManager {
39
+ private legacyPaths;
40
+ private currentPaths;
41
+ private homeDir;
42
+ private tempDir;
43
+ constructor();
44
+ /**
45
+ * Get NPM cache directory (platform-specific)
46
+ */
47
+ private getNpmCachePath;
48
+ /**
49
+ * Get Claude CLI cache directory (platform-specific)
50
+ */
51
+ private getClaudeCliCachePath;
52
+ /**
53
+ * Get Claude projects directory (platform-specific)
54
+ */
55
+ private getClaudeProjectsPath;
56
+ /**
57
+ * Get editor config paths (Cursor, VSCode)
58
+ */
59
+ private getEditorConfigPaths;
60
+ /**
61
+ * Get trash directory (platform-specific)
62
+ */
63
+ private getTrashPath;
64
+ /**
65
+ * Get manual legacy config paths that might not be caught by envPaths
66
+ * This ensures we catch ALL legacy installations including old config.json files
67
+ */
68
+ private getManualLegacyPaths;
69
+ /**
70
+ * Find NPM/NPX cache files
71
+ */
72
+ private findNpmCache;
73
+ /**
74
+ * Find Claude CLI MCP logs
75
+ */
76
+ private findClaudeCliLogs;
77
+ /**
78
+ * Find Claude projects cache
79
+ */
80
+ private findClaudeProjects;
81
+ /**
82
+ * Find temporary backups
83
+ */
84
+ private findTemporaryBackups;
85
+ /**
86
+ * Find editor logs (Cursor, VSCode)
87
+ */
88
+ private findEditorLogs;
89
+ /**
90
+ * Find trash files
91
+ */
92
+ private findTrashFiles;
93
+ /**
94
+ * Get all paths that would be deleted for a given mode (with categorization)
95
+ */
96
+ getCleanupPaths(mode: CleanupMode, preserveLibrary?: boolean): Promise<{
97
+ categories: CleanupCategory[];
98
+ totalPaths: string[];
99
+ totalSizeBytes: number;
100
+ }>;
101
+ /**
102
+ * Perform cleanup with safety checks and detailed reporting
103
+ */
104
+ performCleanup(mode: CleanupMode, preserveLibrary?: boolean): Promise<CleanupResult>;
105
+ /**
106
+ * Check if a path exists
107
+ */
108
+ private pathExists;
109
+ /**
110
+ * Get the size of a single file
111
+ */
112
+ private getFileSize;
113
+ /**
114
+ * Get the total size of a directory (recursive)
115
+ */
116
+ private getDirectorySize;
117
+ /**
118
+ * Format bytes to human-readable string
119
+ */
120
+ formatBytes(bytes: number): string;
121
+ /**
122
+ * Get platform-specific path info
123
+ */
124
+ getPlatformInfo(): {
125
+ platform: string;
126
+ legacyBasePath: string;
127
+ currentBasePath: string;
128
+ npmCachePath: string;
129
+ claudeCliCachePath: string;
130
+ claudeProjectsPath: string;
131
+ };
132
+ }
133
+ //# sourceMappingURL=cleanup-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cleanup-manager.d.ts","sourceRoot":"","sources":["../../src/utils/cleanup-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AASH,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;AAEpD,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,WAAW,CAAC;IAClB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACnE;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAUD,qBAAa,cAAc;IACzB,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,YAAY,CAAQ;IAC5B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAS;;IAmBxB;;OAEG;IACH,OAAO,CAAC,eAAe;IAIvB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAc7B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAc7B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA0B5B;;OAEG;IACH,OAAO,CAAC,YAAY;IAapB;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IA+C5B;;OAEG;YACW,YAAY;IAsB1B;;OAEG;YACW,iBAAiB;IA2B/B;;OAEG;YACW,kBAAkB;IAqBhC;;OAEG;YACW,oBAAoB;IAelC;;OAEG;YACW,cAAc;IAuB5B;;OAEG;YACW,cAAc;IA6B5B;;OAEG;IACG,eAAe,CACnB,IAAI,EAAE,WAAW,EACjB,eAAe,GAAE,OAAe,GAC/B,OAAO,CAAC;QACT,UAAU,EAAE,eAAe,EAAE,CAAC;QAC9B,UAAU,EAAE,MAAM,EAAE,CAAC;QACrB,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;IA0QF;;OAEG;IACG,cAAc,CAClB,IAAI,EAAE,WAAW,EACjB,eAAe,GAAE,OAAe,GAC/B,OAAO,CAAC,aAAa,CAAC;IAqEzB;;OAEG;YACW,UAAU;IASxB;;OAEG;YACW,WAAW;IASzB;;OAEG;YACW,gBAAgB;IA2B9B;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAQlC;;OAEG;IACH,eAAe,IAAI;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,cAAc,EAAE,MAAM,CAAC;QACvB,eAAe,EAAE,MAAM,CAAC;QACxB,YAAY,EAAE,MAAM,CAAC;QACrB,kBAAkB,EAAE,MAAM,CAAC;QAC3B,kBAAkB,EAAE,MAAM,CAAC;KAC5B;CAyBF"}