ai-vault 3.4.0 → 3.5.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,420 @@
1
+ /**
2
+ * Gemini Provider
3
+ *
4
+ * Supports:
5
+ * - Cookie-based scraping of gemini.google.com
6
+ *
7
+ * Authentication: Google account cookies from gemini.google.com
8
+ * Method: DOM scraping via BrowserScraper (no public API available)
9
+ */
10
+ import { BaseProvider } from '../base.js';
11
+ import { AuthenticationError, NotFoundError } from '../../types/provider.js';
12
+ import { BrowserScraper } from '../../utils/scraper.js';
13
+ import chalk from 'chalk';
14
+ export class GeminiProvider extends BaseProvider {
15
+ name = 'gemini';
16
+ displayName = 'Gemini';
17
+ supportedAuthMethods = ['cookies'];
18
+ // Single shared page — must not be navigated concurrently
19
+ rateLimit = { maxConcurrent: 1 };
20
+ static CAPTCHA_COOLDOWN_MS = 60 * 60 * 1000; // 60 minutes
21
+ scraper;
22
+ cachedPage;
23
+ // Semaphore set when Google's sorry/CAPTCHA page is detected; expires after 60 minutes
24
+ captchaBlockedUntil = null;
25
+ // Timestamps from listConversations, used by fetchConversation to avoid new Date() fallback
26
+ conversationTimestamps = new Map();
27
+ /** Throws immediately if the CAPTCHA cooldown semaphore is still active. */
28
+ checkCaptchaBlock() {
29
+ if (!this.captchaBlockedUntil)
30
+ return;
31
+ if (Date.now() < this.captchaBlockedUntil.getTime()) {
32
+ const remaining = Math.ceil((this.captchaBlockedUntil.getTime() - Date.now()) / 60_000);
33
+ throw new Error(`Google bot-detection cooldown active — Gemini is blocked for ${remaining} more minute(s) ` +
34
+ `(until ${this.captchaBlockedUntil.toLocaleTimeString()}). Try again later.`);
35
+ }
36
+ // Semaphore has expired; clear it
37
+ this.captchaBlockedUntil = null;
38
+ }
39
+ /** Arms the CAPTCHA semaphore for 60 minutes and logs a warning. */
40
+ triggerCaptchaBlock() {
41
+ this.captchaBlockedUntil = new Date(Date.now() + GeminiProvider.CAPTCHA_COOLDOWN_MS);
42
+ process.stderr.write(`\n⚠ Google CAPTCHA detected. All Gemini operations are blocked until ` +
43
+ `${this.captchaBlockedUntil.toLocaleTimeString()} (60 minutes).\n`);
44
+ }
45
+ /**
46
+ * Get or create a reusable browser page.
47
+ * Does not navigate — callers are responsible for navigating to their target URL.
48
+ */
49
+ async getOrCreatePage() {
50
+ const cachedPage = this.cachedPage;
51
+ if (cachedPage) {
52
+ try {
53
+ await cachedPage.evaluate(() => true);
54
+ return cachedPage;
55
+ }
56
+ catch {
57
+ this.cachedPage = undefined;
58
+ }
59
+ }
60
+ const page = await this.scraper.createPage({
61
+ cookies: this.config.cookies,
62
+ domain: '.google.com',
63
+ });
64
+ this.cachedPage = page;
65
+ return page;
66
+ }
67
+ /**
68
+ * Authenticate with Gemini using Google account cookies
69
+ */
70
+ async authenticate(config) {
71
+ this.config = config;
72
+ if (config.authMethod !== 'cookies') {
73
+ throw new AuthenticationError('Only cookies authentication is supported for Gemini');
74
+ }
75
+ if (!config.cookies) {
76
+ throw new AuthenticationError('Google account cookies are required for Gemini');
77
+ }
78
+ this.scraper = new BrowserScraper();
79
+ await this.scraper.init();
80
+ return this.isAuthenticated();
81
+ }
82
+ /**
83
+ * Check if the current cookies give access to gemini.google.com
84
+ */
85
+ async isAuthenticated() {
86
+ this.requireAuth();
87
+ this.checkCaptchaBlock();
88
+ const page = await this.scraper.createPage({
89
+ cookies: this.config.cookies,
90
+ domain: '.google.com',
91
+ });
92
+ try {
93
+ await page.goto('https://gemini.google.com/app', {
94
+ waitUntil: 'domcontentloaded',
95
+ timeout: 20000,
96
+ });
97
+ const url = page.url();
98
+ if (url.includes('consent.google.com')) {
99
+ throw new AuthenticationError('Redirected to Google consent page. Your cookies are incomplete — export ALL cookies ' +
100
+ 'from gemini.google.com (including SOCS, SAPISID, SID, etc.) using a browser extension ' +
101
+ 'like Cookie-Editor and re-run: ai-vault setup gemini --cookies-file <path>');
102
+ }
103
+ return !url.includes('accounts.google.com');
104
+ }
105
+ finally {
106
+ await page.close();
107
+ }
108
+ }
109
+ /**
110
+ * List conversations via the internal batchexecute API (MaZiqc RPC).
111
+ * Avoids DOM scroll scraping — uses cursor-based pagination from the network API.
112
+ */
113
+ async listConversations(options = {}) {
114
+ this.requireAuth();
115
+ this.checkCaptchaBlock();
116
+ const page = await this.getOrCreatePage();
117
+ try {
118
+ await page.goto('https://gemini.google.com/app', {
119
+ waitUntil: 'domcontentloaded',
120
+ timeout: 30000,
121
+ });
122
+ const listUrl = page.url();
123
+ if (listUrl.includes('google.com/sorry')) {
124
+ this.triggerCaptchaBlock();
125
+ throw new Error('Google bot-detection triggered while listing conversations. ' +
126
+ `Gemini is blocked for 60 minutes (until ${this.captchaBlockedUntil.toLocaleTimeString()}).`);
127
+ }
128
+ if (listUrl.includes('accounts.google.com')) {
129
+ throw new AuthenticationError('Redirected to Google login — cookies may have expired');
130
+ }
131
+ // Extract WIZ_global_data session params required for batchexecute
132
+ const { sid, bl, at } = await page.evaluate(() => {
133
+ const wiz = window.WIZ_global_data ?? {};
134
+ return {
135
+ sid: String(wiz.FdrFJe ?? ''),
136
+ bl: String(wiz.cfb2h ?? ''),
137
+ at: String(wiz.SNlM0e ?? ''),
138
+ };
139
+ });
140
+ if (!sid || !bl || !at) {
141
+ throw new Error('Failed to extract Gemini session parameters from WIZ_global_data — ' +
142
+ 'try re-authenticating with fresh cookies');
143
+ }
144
+ // Execute a batchexecute MaZiqc call from the browser context (cookies are automatic)
145
+ const batchExecute = (fReqJson) => page.evaluate(async ({ sid, bl, at, fReqJson, }) => {
146
+ const reqId = Math.floor(Math.random() * 900000) + 100000;
147
+ const url = `https://gemini.google.com/_/BardChatUi/data/batchexecute` +
148
+ `?rpcids=MaZiqc&source-path=%2Fapp` +
149
+ `&bl=${encodeURIComponent(bl)}&f.sid=${encodeURIComponent(sid)}` +
150
+ `&hl=en&_reqid=${reqId}&rt=c`;
151
+ const resp = await fetch(url, {
152
+ method: 'POST',
153
+ headers: {
154
+ 'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8',
155
+ 'X-Same-Domain': '1',
156
+ },
157
+ body: `f.req=${encodeURIComponent(fReqJson)}&at=${encodeURIComponent(at)}`,
158
+ });
159
+ if (!resp.ok)
160
+ throw new Error(`batchexecute HTTP ${resp.status}`);
161
+ return resp.text();
162
+ }, { sid, bl, at, fReqJson });
163
+ // Parse the streaming batchexecute response to extract conversations and the next cursor.
164
+ // Response format: )]}' followed by SIZE\n[JSON]\n chunks.
165
+ const parseResponse = (text) => {
166
+ const startIdx = text.indexOf('[["wrb.fr","MaZiqc"');
167
+ if (startIdx === -1)
168
+ return { cursor: null, items: [] };
169
+ // Walk forward to find the matching closing bracket, skipping string contents
170
+ let depth = 0;
171
+ let inString = false;
172
+ let escaped = false;
173
+ let endIdx = startIdx;
174
+ for (let i = startIdx; i < text.length; i++) {
175
+ const ch = text[i];
176
+ if (escaped) {
177
+ escaped = false;
178
+ continue;
179
+ }
180
+ if (ch === '\\' && inString) {
181
+ escaped = true;
182
+ continue;
183
+ }
184
+ if (ch === '"') {
185
+ inString = !inString;
186
+ continue;
187
+ }
188
+ if (inString)
189
+ continue;
190
+ if (ch === '[' || ch === '{')
191
+ depth++;
192
+ else if (ch === ']' || ch === '}') {
193
+ if (--depth === 0) {
194
+ endIdx = i;
195
+ break;
196
+ }
197
+ }
198
+ }
199
+ let outer;
200
+ try {
201
+ outer = JSON.parse(text.substring(startIdx, endIdx + 1));
202
+ }
203
+ catch {
204
+ return { cursor: null, items: [] };
205
+ }
206
+ // outer = [["wrb.fr","MaZiqc","INNER_JSON_STRING",...]]
207
+ const entry = outer[0];
208
+ if (!Array.isArray(entry) || entry[1] !== 'MaZiqc' || typeof entry[2] !== 'string') {
209
+ return { cursor: null, items: [] };
210
+ }
211
+ let inner;
212
+ try {
213
+ inner = JSON.parse(entry[2]);
214
+ }
215
+ catch {
216
+ return { cursor: null, items: [] };
217
+ }
218
+ // inner = [null, cursor_or_null, [[conv_array, ...], ...]]
219
+ return {
220
+ cursor: inner[1] ?? null,
221
+ items: Array.isArray(inner[2]) ? inner[2] : [],
222
+ };
223
+ };
224
+ const toSummary = (conv) => {
225
+ // conv[0] = "c_<hex_id>", conv[1] = title, conv[5] = [sec, ns] timestamp
226
+ const rawId = String(conv[0] ?? '');
227
+ const id = rawId.replace(/^c_/, '');
228
+ if (!id)
229
+ return null;
230
+ const title = String(conv[1] ?? 'Untitled').trim() || 'Untitled';
231
+ const tsPair = Array.isArray(conv[5]) ? conv[5] : null;
232
+ const date = tsPair ? new Date(Number(tsPair[0]) * 1000) : new Date();
233
+ return { id, title, messageCount: 0, createdAt: date, updatedAt: date, hasMedia: false };
234
+ };
235
+ const allSummaries = [];
236
+ // 1. Pinned conversations (category flag [1,null,1])
237
+ try {
238
+ const fReq = JSON.stringify([
239
+ [['MaZiqc', JSON.stringify([13, null, [1, null, 1]]), null, 'generic']],
240
+ ]);
241
+ const { items } = parseResponse(await batchExecute(fReq));
242
+ for (const conv of items) {
243
+ const s = toSummary(conv);
244
+ if (s)
245
+ allSummaries.push(s);
246
+ }
247
+ }
248
+ catch {
249
+ // Pinned fetch is best-effort; continue with regular conversations
250
+ }
251
+ // 2. Regular conversations with cursor pagination (category flag [0,null,1])
252
+ const MAX_PAGES = 200;
253
+ let cursor = null;
254
+ let pageCount = 0;
255
+ while (true) {
256
+ if (++pageCount > MAX_PAGES) {
257
+ console.log(chalk.yellow(`\n⚠ Gemini: reached ${MAX_PAGES} pagination pages, stopping.`));
258
+ break;
259
+ }
260
+ const innerArg = cursor === null
261
+ ? JSON.stringify([13, null, [0, null, 1]])
262
+ : JSON.stringify([20, cursor, [0, null, 1]]);
263
+ const fReq = JSON.stringify([[['MaZiqc', innerArg, null, 'generic']]]);
264
+ const { cursor: nextCursor, items } = parseResponse(await batchExecute(fReq));
265
+ for (const conv of items) {
266
+ const s = toSummary(conv);
267
+ if (s)
268
+ allSummaries.push(s);
269
+ }
270
+ if (!nextCursor || nextCursor === cursor)
271
+ break;
272
+ cursor = nextCursor;
273
+ }
274
+ // Deduplicate: pinned conversations can also appear in the regular list
275
+ const dedupedMap = new Map();
276
+ for (const s of allSummaries) {
277
+ if (!dedupedMap.has(s.id))
278
+ dedupedMap.set(s.id, s);
279
+ }
280
+ // Cache timestamps for use in fetchConversation
281
+ for (const s of dedupedMap.values()) {
282
+ this.conversationTimestamps.set(s.id, { createdAt: s.createdAt, updatedAt: s.updatedAt });
283
+ }
284
+ let summaries = Array.from(dedupedMap.values());
285
+ if (options.since)
286
+ summaries = summaries.filter((c) => c.updatedAt >= options.since);
287
+ if (options.until)
288
+ summaries = summaries.filter((c) => c.updatedAt <= options.until);
289
+ if (options.limit)
290
+ summaries = summaries.slice(0, options.limit);
291
+ return summaries;
292
+ }
293
+ catch (error) {
294
+ this.cachedPage = undefined;
295
+ throw error;
296
+ }
297
+ }
298
+ /**
299
+ * Fetch a full conversation by navigating to its URL
300
+ */
301
+ async fetchConversation(id) {
302
+ this.requireAuth();
303
+ this.checkCaptchaBlock();
304
+ const page = await this.getOrCreatePage();
305
+ try {
306
+ await page.goto(`https://gemini.google.com/app/${id}`, {
307
+ waitUntil: 'domcontentloaded',
308
+ timeout: 30000,
309
+ });
310
+ // Brief pause to avoid triggering Google's bot detection
311
+ await page.waitForTimeout(2500);
312
+ const url = page.url();
313
+ if (url.includes('accounts.google.com')) {
314
+ throw new AuthenticationError('Redirected to Google login — cookies may have expired');
315
+ }
316
+ if (url.includes('google.com/sorry')) {
317
+ this.triggerCaptchaBlock();
318
+ throw new Error('Google bot-detection triggered. ' +
319
+ `Gemini is blocked for 60 minutes (until ${this.captchaBlockedUntil.toLocaleTimeString()}).`);
320
+ }
321
+ // Gemini redirects to /app when a conversation is not found
322
+ if (!url.includes(`/app/${id}`)) {
323
+ throw new NotFoundError(`Conversation '${id}' not found`);
324
+ }
325
+ // Wait for the message thread — use 'attached' since Angular animations prevent 'visible'
326
+ await page.waitForSelector('[data-conversation-id], .conversation-container, model-response, user-query', { state: 'attached', timeout: 15000 });
327
+ // Extract messages and title (with timeout to prevent hanging on problematic pages)
328
+ const evalPromise = page.evaluate(({ convId }) => {
329
+ // Collect all turn elements in document order, tagged by role
330
+ const allPairs = [
331
+ ...Array.from(document.querySelectorAll('user-query, [data-role="user"], .user-query-container')).map((el) => ({ el, role: 'user' })),
332
+ ...Array.from(document.querySelectorAll('model-response, [data-role="model"], .model-response-text')).map((el) => ({ el, role: 'assistant' })),
333
+ ].sort((a, b) => a.el.compareDocumentPosition(b.el) & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1);
334
+ const messages = allPairs
335
+ .map((p, i) => {
336
+ const content = p.el.textContent?.trim() ?? '';
337
+ return content ? { id: `${convId}-${i}`, role: p.role, content } : null;
338
+ })
339
+ .filter(Boolean);
340
+ // Extract title: prefer <title> tag minus " - Gemini" suffix, then h1
341
+ const isGenericTitle = (t) => /^(Google\s+)?Gemini$/i.test(t) || /^Chats$/i.test(t);
342
+ let title = document.title?.replace(/\s*[-|]\s*Gemini\s*$/, '').trim() || '';
343
+ if (isGenericTitle(title))
344
+ title = '';
345
+ if (!title) {
346
+ title = document.querySelector('h1')?.textContent?.trim() || '';
347
+ }
348
+ if (!title || isGenericTitle(title)) {
349
+ title = `Gemini conversation ${convId}`;
350
+ }
351
+ return { messages, title };
352
+ }, { convId: id });
353
+ let evalTimeoutHandle;
354
+ const evalTimeout = new Promise((_, reject) => {
355
+ evalTimeoutHandle = setTimeout(() => reject(new Error(`Timeout extracting messages from conversation ${id}`)), 30_000);
356
+ });
357
+ let rawMessages, rawTitle;
358
+ try {
359
+ ({ messages: rawMessages, title: rawTitle } = await Promise.race([
360
+ evalPromise,
361
+ evalTimeout,
362
+ ]));
363
+ }
364
+ finally {
365
+ clearTimeout(evalTimeoutHandle);
366
+ }
367
+ // Use timestamps from listConversations if available; fall back to now only as last resort
368
+ const cachedTs = this.conversationTimestamps.get(id);
369
+ const createdAt = cachedTs?.createdAt ?? new Date();
370
+ const updatedAt = cachedTs?.updatedAt ?? new Date();
371
+ const messages = rawMessages.map((m, i) => ({
372
+ id: m.id,
373
+ role: m.role,
374
+ content: m.content,
375
+ // Spread message timestamps evenly across the conversation window if we have real dates
376
+ timestamp: cachedTs
377
+ ? new Date(createdAt.getTime() +
378
+ (i / Math.max(rawMessages.length - 1, 1)) *
379
+ (updatedAt.getTime() - createdAt.getTime()))
380
+ : new Date(),
381
+ }));
382
+ return {
383
+ id,
384
+ provider: this.name,
385
+ title: rawTitle || `Gemini conversation ${id}`,
386
+ messages,
387
+ createdAt,
388
+ updatedAt,
389
+ metadata: {
390
+ messageCount: messages.length,
391
+ characterCount: messages.reduce((sum, m) => sum + m.content.length, 0),
392
+ mediaCount: 0,
393
+ },
394
+ };
395
+ }
396
+ catch (error) {
397
+ this.cachedPage = undefined;
398
+ throw error;
399
+ }
400
+ }
401
+ /**
402
+ * Cleanup browser resources
403
+ */
404
+ async cleanup() {
405
+ if (this.cachedPage) {
406
+ try {
407
+ await this.cachedPage.close();
408
+ }
409
+ catch {
410
+ // ignore
411
+ }
412
+ this.cachedPage = undefined;
413
+ }
414
+ if (this.scraper) {
415
+ await this.scraper.close();
416
+ this.scraper = undefined;
417
+ }
418
+ }
419
+ }
420
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/providers/gemini/index.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,7 @@ import { GrokWebProvider } from './grok-web/index.js';
5
5
  import { GrokXProvider } from './grok-x/index.js';
6
6
  import { ChatGPTProvider } from './chatgpt/index.js';
7
7
  import { ClaudeProvider } from './claude/index.js';
8
+ import { GeminiProvider } from './gemini/index.js';
8
9
  import type { Provider } from '../types/provider.js';
9
10
  import type { ProviderName } from '../types/index.js';
10
11
  export declare const providers: Record<string, new () => Provider>;
@@ -20,5 +21,5 @@ export declare function getAvailableProviders(): ProviderName[];
20
21
  * Check if a provider is available
21
22
  */
22
23
  export declare function isProviderAvailable(name: string): boolean;
23
- export { GrokWebProvider, GrokXProvider, ChatGPTProvider, ClaudeProvider };
24
+ export { GrokWebProvider, GrokXProvider, ChatGPTProvider, ClaudeProvider, GeminiProvider };
24
25
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGtD,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,QAAQ,CAMxD,CAAC;AAEF;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,YAAY,GAAG,QAAQ,CAUxD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,YAAY,EAAE,CAEtD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,eAAe,EAAE,cAAc,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGtD,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,QAAQ,CAMxD,CAAC;AAEF;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,YAAY,GAAG,QAAQ,CAUxD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,YAAY,EAAE,CAEtD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC"}
@@ -5,13 +5,14 @@ import { GrokWebProvider } from './grok-web/index.js';
5
5
  import { GrokXProvider } from './grok-x/index.js';
6
6
  import { ChatGPTProvider } from './chatgpt/index.js';
7
7
  import { ClaudeProvider } from './claude/index.js';
8
+ import { GeminiProvider } from './gemini/index.js';
8
9
  // Provider registry
9
10
  export const providers = {
10
11
  'grok-web': GrokWebProvider,
11
12
  'grok-x': GrokXProvider,
12
13
  chatgpt: ChatGPTProvider,
13
14
  claude: ClaudeProvider,
14
- // gemini: GeminiProvider, // Coming soon
15
+ gemini: GeminiProvider,
15
16
  };
16
17
  /**
17
18
  * Get a provider instance by name
@@ -35,5 +36,5 @@ export function getAvailableProviders() {
35
36
  export function isProviderAvailable(name) {
36
37
  return name in providers;
37
38
  }
38
- export { GrokWebProvider, GrokXProvider, ChatGPTProvider, ClaudeProvider };
39
+ export { GrokWebProvider, GrokXProvider, ChatGPTProvider, ClaudeProvider, GeminiProvider };
39
40
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAInD,oBAAoB;AACpB,MAAM,CAAC,MAAM,SAAS,GAAuC;IAC3D,UAAU,EAAE,eAAe;IAC3B,QAAQ,EAAE,aAAa;IACvB,OAAO,EAAE,eAAe;IACxB,MAAM,EAAE,cAAc;IACtB,yCAAyC;CAC1C,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,IAAkB;IAC5C,MAAM,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAEtC,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CACb,aAAa,IAAI,qCAAqC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC1F,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,aAAa,EAAE,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB;IACnC,OAAO,MAAM,CAAC,IAAI,CAAC,SAAS,CAAmB,CAAC;AAClD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,OAAO,IAAI,IAAI,SAAS,CAAC;AAC3B,CAAC;AAED,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,eAAe,EAAE,cAAc,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAInD,oBAAoB;AACpB,MAAM,CAAC,MAAM,SAAS,GAAuC;IAC3D,UAAU,EAAE,eAAe;IAC3B,QAAQ,EAAE,aAAa;IACvB,OAAO,EAAE,eAAe;IACxB,MAAM,EAAE,cAAc;IACtB,MAAM,EAAE,cAAc;CACvB,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,IAAkB;IAC5C,MAAM,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAEtC,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CACb,aAAa,IAAI,qCAAqC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC1F,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,aAAa,EAAE,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB;IACnC,OAAO,MAAM,CAAC,IAAI,CAAC,SAAS,CAAmB,CAAC;AAClD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,OAAO,IAAI,IAAI,SAAS,CAAC;AAC3B,CAAC;AAED,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC"}
@@ -25,6 +25,10 @@ export interface ArchiveOptions {
25
25
  downloadMedia?: boolean;
26
26
  /** Skip already archived conversations */
27
27
  skipExisting?: boolean;
28
+ /** Only download conversations not yet in local archive */
29
+ onlyNew?: boolean;
30
+ /** Add a random delay (1–30s) between fetching each conversation */
31
+ randomDelay?: boolean;
28
32
  /** Dry run (don't actually save anything) */
29
33
  dryRun?: boolean;
30
34
  /** Maximum number of conversations to archive */
@@ -1 +1 @@
1
- {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/types/storage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/types/storage.ts"],"names":[],"mappings":"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"}
@@ -91,7 +91,7 @@ describe('Scheduler', () => {
91
91
  // Should include full path, not just "ai-vault"
92
92
  expect(command).toContain('/opt/homebrew/bin/ai-vault');
93
93
  expect(command).toContain('backup');
94
- expect(command).toContain('--provider "grok-web"');
94
+ expect(command).toContain('"grok-web"');
95
95
  });
96
96
  it('should include skip-media flag when downloadMedia is false', () => {
97
97
  const schedule = {
@@ -1 +1 @@
1
- {"version":3,"file":"scheduler.spec.js","sourceRoot":"","sources":["../../src/utils/scheduler.spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scheduler.spec.js","sourceRoot":"","sources":["../../src/utils/scheduler.spec.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ai-vault",
3
- "version": "3.4.0",
3
+ "version": "3.5.0",
4
4
  "description": "Own your data. Open-source CLI tool for comprehensive backup of AI interactions—conversations, images, videos, code artifacts, and metadata—across ChatGPT, Claude, Grok, Gemini, and more.",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",