@pan-sec/notebooklm-mcp 1.7.0 → 1.9.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.
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Gemini Interactions API Client
3
+ *
4
+ * Provides access to Gemini models and the Deep Research agent
5
+ * via the Interactions API for stable, API-based research capabilities.
6
+ */
7
+ import type { ProgressCallback } from "../types.js";
8
+ import type { GeminiQueryOptions, GeminiInteraction, DeepResearchOptions, UploadDocumentOptions, QueryDocumentOptions, GeminiFile, UploadDocumentResult, QueryDocumentResult, ListDocumentsResult } from "./types.js";
9
+ export { DEEP_RESEARCH_AGENT } from "./types.js";
10
+ /**
11
+ * Client for Gemini Interactions API
12
+ */
13
+ export declare class GeminiClient {
14
+ private client;
15
+ constructor(apiKey?: string);
16
+ /**
17
+ * Check if the client is available (API key configured)
18
+ */
19
+ isAvailable(): boolean;
20
+ /**
21
+ * Perform a quick query to Gemini
22
+ */
23
+ query(options: GeminiQueryOptions): Promise<GeminiInteraction>;
24
+ /**
25
+ * Start deep research using the Deep Research agent
26
+ */
27
+ deepResearch(options: DeepResearchOptions): Promise<GeminiInteraction>;
28
+ /**
29
+ * Get an existing interaction by ID
30
+ */
31
+ getInteraction(interactionId: string): Promise<GeminiInteraction>;
32
+ /**
33
+ * Poll for interaction completion
34
+ */
35
+ pollForCompletion(interactionId: string, maxWaitMs: number, progressCallback?: ProgressCallback): Promise<GeminiInteraction>;
36
+ /**
37
+ * Delete a stored interaction
38
+ */
39
+ deleteInteraction(interactionId: string): Promise<void>;
40
+ /**
41
+ * Map SDK response to our interface
42
+ */
43
+ private mapInteraction;
44
+ /**
45
+ * Upload a document to Gemini Files API
46
+ * Files are retained for 48 hours and can be used in multiple queries
47
+ */
48
+ uploadDocument(options: UploadDocumentOptions): Promise<UploadDocumentResult>;
49
+ /**
50
+ * Wait for file processing to complete
51
+ */
52
+ private waitForFileProcessing;
53
+ /**
54
+ * Get file metadata
55
+ */
56
+ getFile(fileName: string): Promise<GeminiFile>;
57
+ /**
58
+ * List all uploaded files
59
+ */
60
+ listFiles(pageSize?: number, pageToken?: string): Promise<ListDocumentsResult>;
61
+ /**
62
+ * Delete an uploaded file
63
+ */
64
+ deleteFile(fileName: string): Promise<void>;
65
+ /**
66
+ * Query an uploaded document
67
+ */
68
+ queryDocument(options: QueryDocumentOptions): Promise<QueryDocumentResult>;
69
+ /**
70
+ * Map SDK file response to our interface
71
+ */
72
+ private mapFile;
73
+ /**
74
+ * Detect MIME type from file extension
75
+ */
76
+ private detectMimeType;
77
+ /**
78
+ * Format bytes to human-readable string
79
+ */
80
+ private formatBytes;
81
+ /**
82
+ * Calculate expiration time (48 hours from now)
83
+ */
84
+ private calculateExpiration;
85
+ }
86
+ //# sourceMappingURL=gemini-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini-client.d.ts","sourceRoot":"","sources":["../../src/gemini/gemini-client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,KAAK,EACV,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EAGnB,qBAAqB,EACrB,oBAAoB,EACpB,UAAU,EAEV,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,YAAY,CAAC;AAKpB,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEjD;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAA4B;gBAE9B,MAAM,CAAC,EAAE,MAAM;IAU3B;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;OAEG;IACG,KAAK,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IA+CpE;;OAEG;IACG,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAwC5E;;OAEG;IACG,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAevE;;OAEG;IACG,iBAAiB,CACrB,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,EACjB,gBAAgB,CAAC,EAAE,gBAAgB,GAClC,OAAO,CAAC,iBAAiB,CAAC;IAgD7B;;OAEG;IACG,iBAAiB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAe7D;;OAEG;IACH,OAAO,CAAC,cAAc;IAkDtB;;;OAGG;IACG,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAoDnF;;OAEG;YACW,qBAAqB;IAsBnC;;OAEG;IACG,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAepD;;OAEG;IACG,SAAS,CAAC,QAAQ,SAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAyBjF;;OAEG;IACG,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAejD;;OAEG;IACG,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA6EhF;;OAEG;IACH,OAAO,CAAC,OAAO;IA0Bf;;OAEG;IACH,OAAO,CAAC,cAAc;IAyBtB;;OAEG;IACH,OAAO,CAAC,WAAW;IAMnB;;OAEG;IACH,OAAO,CAAC,mBAAmB;CAK5B"}
@@ -0,0 +1,473 @@
1
+ /**
2
+ * Gemini Interactions API Client
3
+ *
4
+ * Provides access to Gemini models and the Deep Research agent
5
+ * via the Interactions API for stable, API-based research capabilities.
6
+ */
7
+ import { GoogleGenAI } from "@google/genai";
8
+ import { log } from "../utils/logger.js";
9
+ import { CONFIG } from "../config.js";
10
+ import fs from "fs";
11
+ import path from "path";
12
+ // Re-export the agent constant
13
+ export { DEEP_RESEARCH_AGENT } from "./types.js";
14
+ /**
15
+ * Client for Gemini Interactions API
16
+ */
17
+ export class GeminiClient {
18
+ client = null;
19
+ constructor(apiKey) {
20
+ const key = apiKey || CONFIG.geminiApiKey;
21
+ if (key) {
22
+ this.client = new GoogleGenAI({ apiKey: key });
23
+ log.info("Gemini client initialized");
24
+ }
25
+ else {
26
+ log.info("Gemini client not initialized (no API key)");
27
+ }
28
+ }
29
+ /**
30
+ * Check if the client is available (API key configured)
31
+ */
32
+ isAvailable() {
33
+ return this.client !== null;
34
+ }
35
+ /**
36
+ * Perform a quick query to Gemini
37
+ */
38
+ async query(options) {
39
+ if (!this.client) {
40
+ throw new Error("Gemini API key not configured. Set GEMINI_API_KEY environment variable.");
41
+ }
42
+ const model = options.model || CONFIG.geminiDefaultModel || "gemini-2.5-flash";
43
+ log.info(`Gemini query to ${model}: ${options.query.substring(0, 50)}...`);
44
+ try {
45
+ // Build tools array - use 'as any' to bypass strict SDK typing
46
+ const tools = [];
47
+ if (options.tools) {
48
+ for (const tool of options.tools) {
49
+ tools.push({ type: tool });
50
+ }
51
+ }
52
+ // Build input - just use string for simplicity
53
+ let input = options.query;
54
+ // If URLs are provided, append them to the query
55
+ if (options.urls && options.urls.length > 0) {
56
+ input = `${options.query}\n\nPlease analyze these URLs:\n${options.urls.join("\n")}`;
57
+ }
58
+ // Create interaction - use 'as any' to handle SDK type strictness
59
+ const response = await this.client.interactions.create({
60
+ model,
61
+ input,
62
+ tools: tools.length > 0 ? tools : undefined,
63
+ previousInteractionId: options.previousInteractionId,
64
+ store: true,
65
+ generationConfig: options.generationConfig ? {
66
+ temperature: options.generationConfig.temperature,
67
+ maxOutputTokens: options.generationConfig.maxOutputTokens,
68
+ thinkingLevel: options.generationConfig.thinkingLevel,
69
+ } : undefined,
70
+ });
71
+ return this.mapInteraction(response);
72
+ }
73
+ catch (error) {
74
+ const msg = error instanceof Error ? error.message : String(error);
75
+ log.error(`Gemini query failed: ${msg}`);
76
+ throw error;
77
+ }
78
+ }
79
+ /**
80
+ * Start deep research using the Deep Research agent
81
+ */
82
+ async deepResearch(options) {
83
+ if (!this.client) {
84
+ throw new Error("Gemini API key not configured. Set GEMINI_API_KEY environment variable.");
85
+ }
86
+ if (!CONFIG.geminiDeepResearchEnabled) {
87
+ throw new Error("Deep Research is disabled. Set GEMINI_DEEP_RESEARCH_ENABLED=true to enable.");
88
+ }
89
+ log.info(`Starting deep research: ${options.query.substring(0, 50)}...`);
90
+ try {
91
+ // Start research in background - use 'as any' to handle SDK type strictness
92
+ const response = await this.client.interactions.create({
93
+ input: options.query,
94
+ agent: "deep-research-pro-preview-12-2025",
95
+ background: options.background !== false,
96
+ store: true,
97
+ });
98
+ const interaction = this.mapInteraction(response);
99
+ log.info(`Deep research started: ${interaction.id}`);
100
+ // If waiting for completion, poll
101
+ if (options.waitForCompletion !== false) {
102
+ return this.pollForCompletion(interaction.id, options.maxWaitMs || 300000, // 5 minutes default
103
+ options.progressCallback);
104
+ }
105
+ return interaction;
106
+ }
107
+ catch (error) {
108
+ const msg = error instanceof Error ? error.message : String(error);
109
+ log.error(`Deep research failed: ${msg}`);
110
+ throw error;
111
+ }
112
+ }
113
+ /**
114
+ * Get an existing interaction by ID
115
+ */
116
+ async getInteraction(interactionId) {
117
+ if (!this.client) {
118
+ throw new Error("Gemini API key not configured.");
119
+ }
120
+ try {
121
+ const response = await this.client.interactions.get(interactionId);
122
+ return this.mapInteraction(response);
123
+ }
124
+ catch (error) {
125
+ const msg = error instanceof Error ? error.message : String(error);
126
+ log.error(`Failed to get interaction ${interactionId}: ${msg}`);
127
+ throw error;
128
+ }
129
+ }
130
+ /**
131
+ * Poll for interaction completion
132
+ */
133
+ async pollForCompletion(interactionId, maxWaitMs, progressCallback) {
134
+ const startTime = Date.now();
135
+ const pollInterval = 10000; // 10 seconds
136
+ let lastStatus = null;
137
+ log.info(`Polling for completion: ${interactionId} (max ${maxWaitMs / 1000}s)`);
138
+ while (Date.now() - startTime < maxWaitMs) {
139
+ const interaction = await this.getInteraction(interactionId);
140
+ const elapsed = Math.round((Date.now() - startTime) / 1000);
141
+ // Report progress - ProgressCallback signature is (message, progress?, total?)
142
+ if (progressCallback && interaction.status !== lastStatus) {
143
+ const progress = Math.min(90, Math.round((elapsed / (maxWaitMs / 1000)) * 100));
144
+ await progressCallback(`Research ${interaction.status}... (${elapsed}s elapsed)`, progress, 100);
145
+ lastStatus = interaction.status;
146
+ }
147
+ // Check if done
148
+ if (interaction.status === "completed") {
149
+ if (progressCallback) {
150
+ await progressCallback("Research complete", 100, 100);
151
+ }
152
+ log.success(`Research completed in ${elapsed}s`);
153
+ return interaction;
154
+ }
155
+ if (interaction.status === "failed") {
156
+ if (progressCallback) {
157
+ await progressCallback("Research failed", 100, 100);
158
+ }
159
+ log.error(`Research failed: ${interaction.error || "Unknown error"}`);
160
+ return interaction;
161
+ }
162
+ // Wait before next poll
163
+ await new Promise(resolve => setTimeout(resolve, pollInterval));
164
+ }
165
+ // Timeout
166
+ const elapsed = Math.round((Date.now() - startTime) / 1000);
167
+ throw new Error(`Research timed out after ${elapsed} seconds`);
168
+ }
169
+ /**
170
+ * Delete a stored interaction
171
+ */
172
+ async deleteInteraction(interactionId) {
173
+ if (!this.client) {
174
+ throw new Error("Gemini API key not configured.");
175
+ }
176
+ try {
177
+ await this.client.interactions.delete(interactionId);
178
+ log.info(`Deleted interaction: ${interactionId}`);
179
+ }
180
+ catch (error) {
181
+ const msg = error instanceof Error ? error.message : String(error);
182
+ log.error(`Failed to delete interaction: ${msg}`);
183
+ throw error;
184
+ }
185
+ }
186
+ /**
187
+ * Map SDK response to our interface
188
+ */
189
+ mapInteraction(response) {
190
+ // The SDK returns an object with id, model, status, outputs, usage
191
+ const r = response;
192
+ const outputs = (r.outputs || []).map(o => ({
193
+ type: o.type || "text",
194
+ text: o.text,
195
+ name: o.name,
196
+ arguments: o.arguments,
197
+ id: o.id,
198
+ }));
199
+ return {
200
+ id: r.id || "",
201
+ model: r.model,
202
+ status: r.status || "pending",
203
+ outputs,
204
+ usage: r.usage ? {
205
+ totalTokens: r.usage.totalTokens || r.usage.total_tokens || 0,
206
+ promptTokens: r.usage.promptTokens || r.usage.prompt_tokens,
207
+ completionTokens: r.usage.completionTokens || r.usage.completion_tokens,
208
+ } : undefined,
209
+ error: r.error,
210
+ };
211
+ }
212
+ // ===========================================================================
213
+ // Files API Methods (v1.9.0)
214
+ // ===========================================================================
215
+ /**
216
+ * Upload a document to Gemini Files API
217
+ * Files are retained for 48 hours and can be used in multiple queries
218
+ */
219
+ async uploadDocument(options) {
220
+ if (!this.client) {
221
+ throw new Error("Gemini API key not configured. Set GEMINI_API_KEY environment variable.");
222
+ }
223
+ const { filePath, displayName, mimeType } = options;
224
+ // Verify file exists
225
+ if (!fs.existsSync(filePath)) {
226
+ throw new Error(`File not found: ${filePath}`);
227
+ }
228
+ // Get file stats
229
+ const stats = fs.statSync(filePath);
230
+ const fileName = displayName || path.basename(filePath);
231
+ // Auto-detect MIME type if not provided
232
+ const detectedMimeType = mimeType || this.detectMimeType(filePath);
233
+ log.info(`Uploading document: ${fileName} (${this.formatBytes(stats.size)})`);
234
+ try {
235
+ // Upload file using SDK
236
+ const uploadResult = await this.client.files.upload({
237
+ file: filePath,
238
+ config: {
239
+ displayName: fileName,
240
+ mimeType: detectedMimeType,
241
+ },
242
+ });
243
+ // Poll for processing completion
244
+ let file = await this.waitForFileProcessing(uploadResult.name);
245
+ log.success(`Document uploaded: ${file.name}`);
246
+ return {
247
+ fileName: file.name,
248
+ displayName: file.displayName || fileName,
249
+ uri: file.uri,
250
+ mimeType: file.mimeType,
251
+ sizeBytes: file.sizeBytes,
252
+ expiresAt: file.expirationTime || this.calculateExpiration(),
253
+ state: file.state,
254
+ };
255
+ }
256
+ catch (error) {
257
+ const msg = error instanceof Error ? error.message : String(error);
258
+ log.error(`Failed to upload document: ${msg}`);
259
+ throw error;
260
+ }
261
+ }
262
+ /**
263
+ * Wait for file processing to complete
264
+ */
265
+ async waitForFileProcessing(fileName, maxWaitMs = 60000) {
266
+ const startTime = Date.now();
267
+ const pollInterval = 2000; // 2 seconds
268
+ while (Date.now() - startTime < maxWaitMs) {
269
+ const file = await this.getFile(fileName);
270
+ if (file.state === "ACTIVE") {
271
+ return file;
272
+ }
273
+ if (file.state === "FAILED") {
274
+ throw new Error(`File processing failed: ${file.error || "Unknown error"}`);
275
+ }
276
+ // Still processing, wait and retry
277
+ await new Promise(resolve => setTimeout(resolve, pollInterval));
278
+ }
279
+ throw new Error(`File processing timed out after ${maxWaitMs / 1000} seconds`);
280
+ }
281
+ /**
282
+ * Get file metadata
283
+ */
284
+ async getFile(fileName) {
285
+ if (!this.client) {
286
+ throw new Error("Gemini API key not configured.");
287
+ }
288
+ try {
289
+ const response = await this.client.files.get({ name: fileName });
290
+ return this.mapFile(response);
291
+ }
292
+ catch (error) {
293
+ const msg = error instanceof Error ? error.message : String(error);
294
+ log.error(`Failed to get file ${fileName}: ${msg}`);
295
+ throw error;
296
+ }
297
+ }
298
+ /**
299
+ * List all uploaded files
300
+ */
301
+ async listFiles(pageSize = 100, pageToken) {
302
+ if (!this.client) {
303
+ throw new Error("Gemini API key not configured.");
304
+ }
305
+ try {
306
+ const response = await this.client.files.list({
307
+ pageSize,
308
+ pageToken,
309
+ });
310
+ const files = (response.files || []).map((f) => this.mapFile(f));
311
+ return {
312
+ files,
313
+ totalCount: files.length,
314
+ nextPageToken: response.nextPageToken,
315
+ };
316
+ }
317
+ catch (error) {
318
+ const msg = error instanceof Error ? error.message : String(error);
319
+ log.error(`Failed to list files: ${msg}`);
320
+ throw error;
321
+ }
322
+ }
323
+ /**
324
+ * Delete an uploaded file
325
+ */
326
+ async deleteFile(fileName) {
327
+ if (!this.client) {
328
+ throw new Error("Gemini API key not configured.");
329
+ }
330
+ try {
331
+ await this.client.files.delete({ name: fileName });
332
+ log.info(`Deleted file: ${fileName}`);
333
+ }
334
+ catch (error) {
335
+ const msg = error instanceof Error ? error.message : String(error);
336
+ log.error(`Failed to delete file ${fileName}: ${msg}`);
337
+ throw error;
338
+ }
339
+ }
340
+ /**
341
+ * Query an uploaded document
342
+ */
343
+ async queryDocument(options) {
344
+ if (!this.client) {
345
+ throw new Error("Gemini API key not configured. Set GEMINI_API_KEY environment variable.");
346
+ }
347
+ const { fileName, query, model, additionalFiles, generationConfig } = options;
348
+ const modelId = model || CONFIG.geminiDefaultModel || "gemini-2.5-flash";
349
+ log.info(`Querying document ${fileName}: ${query.substring(0, 50)}...`);
350
+ try {
351
+ // Get file metadata for URI
352
+ const file = await this.getFile(fileName);
353
+ if (file.state !== "ACTIVE") {
354
+ throw new Error(`File is not ready for querying. State: ${file.state}`);
355
+ }
356
+ // Build content parts with file references
357
+ const fileParts = [
358
+ { fileData: { fileUri: file.uri, mimeType: file.mimeType } },
359
+ ];
360
+ // Add additional files if specified
361
+ const filesUsed = [fileName];
362
+ if (additionalFiles) {
363
+ for (const additionalFileName of additionalFiles) {
364
+ const additionalFile = await this.getFile(additionalFileName);
365
+ if (additionalFile.state === "ACTIVE") {
366
+ fileParts.push({
367
+ fileData: { fileUri: additionalFile.uri, mimeType: additionalFile.mimeType },
368
+ });
369
+ filesUsed.push(additionalFileName);
370
+ }
371
+ }
372
+ }
373
+ // Generate content with the document
374
+ const response = await this.client.models.generateContent({
375
+ model: modelId,
376
+ contents: [
377
+ {
378
+ role: "user",
379
+ parts: [
380
+ ...fileParts,
381
+ { text: query },
382
+ ],
383
+ },
384
+ ],
385
+ generationConfig: generationConfig ? {
386
+ temperature: generationConfig.temperature,
387
+ maxOutputTokens: generationConfig.maxOutputTokens,
388
+ } : undefined,
389
+ });
390
+ // Extract response text
391
+ const answer = response.response?.text?.() ||
392
+ response.response?.candidates?.[0]?.content?.parts?.[0]?.text ||
393
+ "";
394
+ // Extract usage
395
+ const usage = response.response?.usageMetadata;
396
+ log.success(`Document query completed`);
397
+ return {
398
+ answer,
399
+ model: modelId,
400
+ tokensUsed: usage?.totalTokenCount,
401
+ filesUsed,
402
+ };
403
+ }
404
+ catch (error) {
405
+ const msg = error instanceof Error ? error.message : String(error);
406
+ log.error(`Document query failed: ${msg}`);
407
+ throw error;
408
+ }
409
+ }
410
+ /**
411
+ * Map SDK file response to our interface
412
+ */
413
+ mapFile(response) {
414
+ const r = response;
415
+ return {
416
+ name: r.name || "",
417
+ displayName: r.displayName,
418
+ mimeType: r.mimeType || "application/octet-stream",
419
+ sizeBytes: typeof r.sizeBytes === "string" ? parseInt(r.sizeBytes, 10) : r.sizeBytes,
420
+ createTime: r.createTime,
421
+ expirationTime: r.expirationTime,
422
+ state: r.state || "PROCESSING",
423
+ uri: r.uri || "",
424
+ error: r.error?.message,
425
+ };
426
+ }
427
+ /**
428
+ * Detect MIME type from file extension
429
+ */
430
+ detectMimeType(filePath) {
431
+ const ext = path.extname(filePath).toLowerCase();
432
+ const mimeTypes = {
433
+ ".pdf": "application/pdf",
434
+ ".txt": "text/plain",
435
+ ".md": "text/markdown",
436
+ ".html": "text/html",
437
+ ".htm": "text/html",
438
+ ".csv": "text/csv",
439
+ ".json": "application/json",
440
+ ".xml": "application/xml",
441
+ ".doc": "application/msword",
442
+ ".docx": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
443
+ ".png": "image/png",
444
+ ".jpg": "image/jpeg",
445
+ ".jpeg": "image/jpeg",
446
+ ".gif": "image/gif",
447
+ ".webp": "image/webp",
448
+ ".mp3": "audio/mpeg",
449
+ ".wav": "audio/wav",
450
+ ".mp4": "video/mp4",
451
+ };
452
+ return mimeTypes[ext] || "application/octet-stream";
453
+ }
454
+ /**
455
+ * Format bytes to human-readable string
456
+ */
457
+ formatBytes(bytes) {
458
+ if (bytes < 1024)
459
+ return `${bytes} B`;
460
+ if (bytes < 1024 * 1024)
461
+ return `${(bytes / 1024).toFixed(1)} KB`;
462
+ return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
463
+ }
464
+ /**
465
+ * Calculate expiration time (48 hours from now)
466
+ */
467
+ calculateExpiration() {
468
+ const expiration = new Date();
469
+ expiration.setHours(expiration.getHours() + 48);
470
+ return expiration.toISOString();
471
+ }
472
+ }
473
+ //# sourceMappingURL=gemini-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini-client.js","sourceRoot":"","sources":["../../src/gemini/gemini-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Gemini Module
3
+ *
4
+ * Exports for Gemini Interactions API integration.
5
+ */
6
+ export * from "./types.js";
7
+ export * from "./gemini-client.js";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/gemini/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Gemini Module
3
+ *
4
+ * Exports for Gemini Interactions API integration.
5
+ */
6
+ export * from "./types.js";
7
+ export * from "./gemini-client.js";
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/gemini/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC"}