ai-vault 1.2.2 → 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 (105) hide show
  1. package/README.md +260 -33
  2. package/dist/cli.js +140 -18
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/archive.d.ts +16 -0
  5. package/dist/commands/archive.d.ts.map +1 -0
  6. package/dist/commands/archive.js +176 -0
  7. package/dist/commands/archive.js.map +1 -0
  8. package/dist/commands/import.d.ts +12 -0
  9. package/dist/commands/import.d.ts.map +1 -0
  10. package/dist/commands/import.js +154 -0
  11. package/dist/commands/import.js.map +1 -0
  12. package/dist/commands/list.d.ts +13 -0
  13. package/dist/commands/list.d.ts.map +1 -0
  14. package/dist/commands/list.js +89 -0
  15. package/dist/commands/list.js.map +1 -0
  16. package/dist/commands/schedule.d.ts +16 -0
  17. package/dist/commands/schedule.d.ts.map +1 -0
  18. package/dist/commands/schedule.js +346 -0
  19. package/dist/commands/schedule.js.map +1 -0
  20. package/dist/commands/setup.d.ts +9 -0
  21. package/dist/commands/setup.d.ts.map +1 -0
  22. package/dist/commands/setup.js +233 -0
  23. package/dist/commands/setup.js.map +1 -0
  24. package/dist/core/archiver.d.ts +37 -0
  25. package/dist/core/archiver.d.ts.map +1 -0
  26. package/dist/core/archiver.js +203 -0
  27. package/dist/core/archiver.js.map +1 -0
  28. package/dist/core/archiver.spec.d.ts +5 -0
  29. package/dist/core/archiver.spec.d.ts.map +1 -0
  30. package/dist/core/archiver.spec.js +439 -0
  31. package/dist/core/archiver.spec.js.map +1 -0
  32. package/dist/core/media.d.ts +77 -0
  33. package/dist/core/media.d.ts.map +1 -0
  34. package/dist/core/media.js +286 -0
  35. package/dist/core/media.js.map +1 -0
  36. package/dist/core/media.spec.d.ts +5 -0
  37. package/dist/core/media.spec.d.ts.map +1 -0
  38. package/dist/core/media.spec.js +401 -0
  39. package/dist/core/media.spec.js.map +1 -0
  40. package/dist/core/storage.d.ts +74 -0
  41. package/dist/core/storage.d.ts.map +1 -0
  42. package/dist/core/storage.js +199 -0
  43. package/dist/core/storage.js.map +1 -0
  44. package/dist/core/storage.spec.d.ts +5 -0
  45. package/dist/core/storage.spec.d.ts.map +1 -0
  46. package/dist/core/storage.spec.js +268 -0
  47. package/dist/core/storage.spec.js.map +1 -0
  48. package/dist/providers/base.d.ts +2 -2
  49. package/dist/providers/base.d.ts.map +1 -1
  50. package/dist/providers/grok-web/index.d.ts +36 -0
  51. package/dist/providers/grok-web/index.d.ts.map +1 -0
  52. package/dist/providers/grok-web/index.js +186 -0
  53. package/dist/providers/grok-web/index.js.map +1 -0
  54. package/dist/providers/grok-web/index.spec.d.ts +11 -0
  55. package/dist/providers/grok-web/index.spec.d.ts.map +1 -0
  56. package/dist/providers/grok-web/index.spec.js +260 -0
  57. package/dist/providers/grok-web/index.spec.js.map +1 -0
  58. package/dist/providers/grok-x/index.d.ts +36 -0
  59. package/dist/providers/grok-x/index.d.ts.map +1 -0
  60. package/dist/providers/{grok → grok-x}/index.js +50 -113
  61. package/dist/providers/grok-x/index.js.map +1 -0
  62. package/dist/providers/grok-x/index.spec.d.ts +12 -0
  63. package/dist/providers/grok-x/index.spec.d.ts.map +1 -0
  64. package/dist/providers/grok-x/index.spec.js +251 -0
  65. package/dist/providers/grok-x/index.spec.js.map +1 -0
  66. package/dist/providers/index.d.ts +5 -4
  67. package/dist/providers/index.d.ts.map +1 -1
  68. package/dist/providers/index.js +5 -3
  69. package/dist/providers/index.js.map +1 -1
  70. package/dist/types/index.d.ts +12 -4
  71. package/dist/types/index.d.ts.map +1 -1
  72. package/dist/types/provider.d.ts +6 -2
  73. package/dist/types/provider.d.ts.map +1 -1
  74. package/dist/types/provider.js.map +1 -1
  75. package/dist/types/schedule.d.ts +50 -0
  76. package/dist/types/schedule.d.ts.map +1 -0
  77. package/dist/types/schedule.js +5 -0
  78. package/dist/types/schedule.js.map +1 -0
  79. package/dist/types/schemas.d.ts +30 -30
  80. package/dist/types/storage.d.ts +85 -0
  81. package/dist/types/storage.d.ts.map +1 -0
  82. package/dist/types/storage.js +5 -0
  83. package/dist/types/storage.js.map +1 -0
  84. package/dist/utils/api-client.js +1 -1
  85. package/dist/utils/api-client.js.map +1 -1
  86. package/dist/utils/api-client.spec.d.ts +5 -0
  87. package/dist/utils/api-client.spec.d.ts.map +1 -0
  88. package/dist/utils/api-client.spec.js +115 -0
  89. package/dist/utils/api-client.spec.js.map +1 -0
  90. package/dist/utils/config.d.ts +45 -0
  91. package/dist/utils/config.d.ts.map +1 -0
  92. package/dist/utils/config.js +69 -0
  93. package/dist/utils/config.js.map +1 -0
  94. package/dist/utils/schedule-manager.d.ts +59 -0
  95. package/dist/utils/schedule-manager.d.ts.map +1 -0
  96. package/dist/utils/schedule-manager.js +152 -0
  97. package/dist/utils/schedule-manager.js.map +1 -0
  98. package/dist/utils/scheduler.d.ts +78 -0
  99. package/dist/utils/scheduler.d.ts.map +1 -0
  100. package/dist/utils/scheduler.js +299 -0
  101. package/dist/utils/scheduler.js.map +1 -0
  102. package/package.json +12 -4
  103. package/dist/providers/grok/index.d.ts +0 -47
  104. package/dist/providers/grok/index.d.ts.map +0 -1
  105. package/dist/providers/grok/index.js.map +0 -1
package/README.md CHANGED
@@ -24,20 +24,27 @@ Your AI interactions are valuable assets. They contain your thoughts, research,
24
24
 
25
25
  ### Supported Platforms
26
26
 
27
- | Platform | Status | API Support | Web Scraping | Media Download |
28
- | --------------- | -------------- | ----------- | ------------ | -------------- |
29
- | **Grok (X.AI)** | 🚧 In Progress | | ✅ | ✅ |
30
- | **ChatGPT** | 📋 Planned | | ✅ | ✅ |
31
- | **Claude** | 📋 Planned | ✅ | ✅ | ✅ |
32
- | **Gemini** | 📋 Planned | ⚠️ Partial | ✅ | ✅ |
33
- | **Perplexity** | 📋 Planned | | ✅ | ✅ |
27
+ | Platform | Status | API Support | Web Scraping | Media Download |
28
+ | ------------------- | -------------- | ----------- | ------------ | -------------- |
29
+ | **Grok (grok.com)** | 🚧 In Progress | | ✅ | ✅ |
30
+ | **Grok on X** | 🚧 In Progress | | ✅ | ✅ |
31
+ | **ChatGPT** | 📋 Planned | ✅ | ✅ | ✅ |
32
+ | **Claude** | 📋 Planned | | ✅ | ✅ |
33
+ | **Gemini** | 📋 Planned | ⚠️ Partial | ✅ | ✅ |
34
+ | **Perplexity** | 📋 Planned | ❌ | ✅ | ✅ |
35
+
36
+ **Note:** Grok has two separate providers due to separate account systems:
37
+
38
+ - `grok-web`: Standalone grok.com platform (cookies authentication)
39
+ - `grok-x`: X-integrated Grok at x.com/grok (cookies authentication)
34
40
 
35
41
  ### Smart Features
36
42
 
43
+ - **Native Import Support** - Import from official platform exports (Grok, ChatGPT, Claude)
37
44
  - **Incremental Backups** - Only fetch new/updated conversations
38
45
  - **Media Deduplication** - Don't store the same image twice
39
46
  - **Flexible Scheduling** - Daily, weekly, or custom cron expressions
40
- - **Rich Export Formats** - JSON, Markdown, HTML with metadata
47
+ - **Rich Export Formats** - JSON + Markdown for maximum compatibility
41
48
  - **Automatic Cookie Management** - Extract session cookies from your browser
42
49
  - **Filtering & Targeting** - Date ranges, conversation importance, custom queries
43
50
 
@@ -88,7 +95,18 @@ pnpm install && pnpm run build
88
95
 
89
96
  ### Updating
90
97
 
91
- **npm/pnpm**
98
+ **Built-in upgrade command (recommended)**
99
+
100
+ ```bash
101
+ ai-vault upgrade
102
+ # or
103
+ ai-vault update
104
+
105
+ # Skip confirmation prompt
106
+ ai-vault upgrade --yes
107
+ ```
108
+
109
+ **Manual update**
92
110
 
93
111
  ```bash
94
112
  npm update -g ai-vault
@@ -106,6 +124,8 @@ brew upgrade ai-vault
106
124
 
107
125
  ```bash
108
126
  ai-vault --version
127
+ # or
128
+ ai-vault -v
109
129
  ```
110
130
 
111
131
  ### Uninstalling
@@ -142,14 +162,20 @@ rmdir /s %USERPROFILE%\ai-vault-data
142
162
  # Interactive setup wizard
143
163
  ai-vault setup
144
164
 
145
- # Run your first archive
165
+ # Option 1: Import from native export (fastest way to start)
166
+ ai-vault import --provider grok-web --file ~/Downloads/grok-export/ --yes
167
+
168
+ # Option 2: Archive via automated scraping
146
169
  ai-vault archive
147
170
 
148
171
  # Schedule automated backups
149
- ai-vault schedule --daily
172
+ ai-vault schedule add
150
173
 
151
174
  # List archived conversations
152
175
  ai-vault list
176
+
177
+ # Check for updates
178
+ ai-vault upgrade
153
179
  ```
154
180
 
155
181
  ## 📖 Usage
@@ -157,15 +183,30 @@ ai-vault list
157
183
  ### Setup
158
184
 
159
185
  ```bash
186
+ # Interactive setup
160
187
  ai-vault setup
188
+
189
+ # Setup with cookies from file (easier for cookie-based auth)
190
+ ai-vault setup --cookies-file ~/Downloads/cookies.json
161
191
  ```
162
192
 
193
+ **For cookie-based authentication:**
194
+
195
+ 1. Install [Cookie-Editor](https://chrome.google.com/webstore/detail/cookie-editor/hlkenndednhfkekhgcdicdfddnkalmdm) extension
196
+ 2. Go to the provider's website and log in:
197
+ - **grok-web**: grok.com
198
+ - **grok-x**: x.com/grok
199
+ - Other providers as applicable
200
+ 3. Click Cookie-Editor → Export → JSON
201
+ 4. Save to a file
202
+ 5. Run `ai-vault setup --cookies-file <path>`
203
+
163
204
  The interactive wizard will:
164
205
 
165
206
  1. Choose which AI platforms to archive
166
207
  2. Configure authentication (API keys or browser cookies)
167
- 3. Set your backup preferences
168
- 4. Choose export formats
208
+ 3. Set your archive directory (default: `~/ai-vault-data`)
209
+ 4. Test your connection
169
210
 
170
211
  ### Archive Now
171
212
 
@@ -174,28 +215,100 @@ The interactive wizard will:
174
215
  ai-vault archive
175
216
 
176
217
  # Archive specific platform
177
- ai-vault archive --provider grok
218
+ ai-vault archive --provider grok-web
178
219
 
179
220
  # Archive with date filter
180
221
  ai-vault archive --since 2025-01-01
181
222
 
223
+ # Archive with custom output directory
224
+ ai-vault archive --output ~/Dropbox/AI-Backups
225
+ ai-vault archive -o /mnt/external/backups
226
+
227
+ # Limit number of conversations
228
+ ai-vault archive --limit 10
229
+
230
+ # Skip media downloads (faster, text only)
231
+ ai-vault archive --skip-media
232
+
182
233
  # Dry run (see what would be archived)
183
234
  ai-vault archive --dry-run
184
235
  ```
185
236
 
186
- ### Schedule Automated Backups
237
+ ### Import from Native Exports
238
+
239
+ Many platforms offer one-time data exports. AI Vault can import these and convert to its standardized format:
187
240
 
188
241
  ```bash
189
- # Set up daily backups
190
- ai-vault schedule --daily
242
+ # Import from Grok's native export
243
+ ai-vault import --provider grok-web --file ~/Downloads/grok-export/
244
+
245
+ # Import with custom output directory
246
+ ai-vault import --provider grok-web --file ~/Downloads/grok-export/ --output ~/Dropbox/AI-Backups
247
+
248
+ # Skip confirmation prompt
249
+ ai-vault import --provider grok-web --file ~/Downloads/grok-export/ --yes
250
+ ```
251
+
252
+ **Supported import formats:**
253
+
254
+ - **Grok (grok.com)**: Export from grok.com → Profile → Data & Privacy → Download your data
255
+ - Use `--provider grok-web` for standalone Grok conversations
256
+ - **Grok on X**: Export from x.com/grok (if available)
257
+ - Use `--provider grok-x` for X-integrated Grok conversations
258
+ - **ChatGPT**: _(coming soon)_ Export from settings → Data controls → Export data
259
+ - **Claude**: _(coming soon)_ Export from settings
260
+
261
+ **Why import vs scraping?**
262
+
263
+ - ✅ Faster - no web automation needed
264
+ - ✅ More reliable - uses official export format
265
+ - ✅ Complete data - includes metadata that might not be visible in UI
266
+ - ✅ Works alongside automated scraping for incremental updates
191
267
 
192
- # Custom cron expression
193
- ai-vault schedule --cron "0 2 * * *" # Every day at 2 AM
268
+ ### Schedule Automated Backups
269
+
270
+ AI Vault uses native OS schedulers (cron on Unix, Task Scheduler on Windows) for automated backups. No long-running daemon required!
194
271
 
195
- # View scheduled jobs
196
- ai-vault schedule --list
272
+ ```bash
273
+ # Add a new schedule (interactive)
274
+ ai-vault schedule add
275
+
276
+ # Add schedule with options
277
+ ai-vault schedule add --provider grok-web --cron "0 2 * * *" --description "Daily Grok backup"
278
+
279
+ # List all schedules
280
+ ai-vault schedule list
281
+ # or simply
282
+ ai-vault schedule
283
+
284
+ # Show detailed status (includes system scheduler info)
285
+ ai-vault schedule status
286
+
287
+ # Remove a schedule
288
+ ai-vault schedule remove --id abc123
289
+
290
+ # Enable/disable schedules
291
+ ai-vault schedule enable --id abc123
292
+ ai-vault schedule disable --id abc123
293
+
294
+ # Advanced options
295
+ ai-vault schedule add \
296
+ --provider grok-web \
297
+ --cron "0 */6 * * *" \
298
+ --limit 100 \
299
+ --since-days 7 \
300
+ --skip-media
197
301
  ```
198
302
 
303
+ **Schedule Options:**
304
+
305
+ - `--cron`: Cron expression (e.g., `"0 2 * * *"` for daily at 2 AM)
306
+ - `--limit`: Maximum conversations per run
307
+ - `--since-days`: Only archive conversations from last N days
308
+ - `--skip-media`: Skip downloading media files
309
+
310
+ **Logs:** Scheduled runs write logs to `~/.ai-vault/logs/<schedule-id>.log`
311
+
199
312
  ### List Archived Conversations
200
313
 
201
314
  ```bash
@@ -209,6 +322,95 @@ ai-vault list --provider chatgpt
209
322
  ai-vault list --search "machine learning"
210
323
  ```
211
324
 
325
+ ## ⚙️ Configuration
326
+
327
+ ### File Locations
328
+
329
+ **Configuration file:** `~/.ai-vault/config.json`
330
+
331
+ ```json
332
+ {
333
+ "version": "1.0.0",
334
+ "providers": {
335
+ "grok-web": {
336
+ "providerName": "grok-web",
337
+ "authMethod": "cookies",
338
+ "cookies": {
339
+ "auth_token": "your-session-cookie"
340
+ }
341
+ }
342
+ },
343
+ "settings": {
344
+ "archiveDir": "~/ai-vault-data"
345
+ }
346
+ }
347
+ ```
348
+
349
+ **Default archive directory:** `~/ai-vault-data`
350
+
351
+ ```
352
+ ~/ai-vault-data/
353
+ ├── grok-web/ # Standalone grok.com conversations
354
+ │ ├── conversations/
355
+ │ │ └── conv-123/
356
+ │ │ ├── conversation.json
357
+ │ │ └── conversation.md
358
+ │ ├── media/
359
+ │ │ ├── images/
360
+ │ │ ├── videos/
361
+ │ │ └── documents/
362
+ │ ├── index.json
363
+ │ └── media-registry.json
364
+ ├── grok-x/ # X-integrated Grok conversations
365
+ │ └── ... (same structure)
366
+ ├── chatgpt/
367
+ └── claude/
368
+ ```
369
+
370
+ ### Customizing Archive Directory
371
+
372
+ **Three ways to set the output directory** (in priority order):
373
+
374
+ 1. **CLI option** (per-command override):
375
+
376
+ ```bash
377
+ ai-vault archive --output ~/Dropbox/AI-Backups
378
+ ai-vault archive -o /mnt/external/backups
379
+ ```
380
+
381
+ 2. **Config file** (persistent setting):
382
+ Manually edit `~/.ai-vault/config.json`:
383
+
384
+ ```json
385
+ {
386
+ "settings": {
387
+ "archiveDir": "~/Documents/my-ai-archives"
388
+ }
389
+ }
390
+ ```
391
+
392
+ Or set during `ai-vault setup`
393
+
394
+ 3. **Default**: `~/ai-vault-data` (if nothing configured)
395
+
396
+ ### Export Format
397
+
398
+ Conversations are saved in **Markdown** by default:
399
+
400
+ - Human-readable and portable
401
+ - Works with Obsidian, Notion, VS Code, and any text editor
402
+ - Includes full conversation text + metadata
403
+
404
+ To change the format, edit `~/.ai-vault/config.json`:
405
+
406
+ ```json
407
+ {
408
+ "settings": {
409
+ "formats": ["markdown"] // Options: "markdown", "json", or both ["markdown", "json"]
410
+ }
411
+ }
412
+ ```
413
+
212
414
  ## 🏗️ Architecture
213
415
 
214
416
  AI Vault uses a **plugin-based provider architecture** that makes it easy to add new AI platforms:
@@ -217,7 +419,8 @@ AI Vault uses a **plugin-based provider architecture** that makes it easy to add
217
419
  src/
218
420
  ├── providers/ # Pluggable AI platform providers
219
421
  │ ├── base.ts # Abstract Provider interface
220
- │ ├── grok/ # Grok (X.AI) implementation
422
+ │ ├── grok-web/ # Grok (grok.com) implementation
423
+ │ ├── grok-x/ # Grok on X (x.com/grok) implementation
221
424
  │ ├── chatgpt/ # ChatGPT implementation
222
425
  │ └── claude/ # Claude implementation
223
426
  ├── core/ # Core archival logic
@@ -256,18 +459,42 @@ See [docs/providers.md](docs/providers.md) for a detailed guide.
256
459
 
257
460
  ## 📋 Roadmap
258
461
 
462
+ ### Completed ✅
463
+
259
464
  - [x] Project setup and architecture
260
- - [ ] Grok provider (API + scraping)
261
- - [ ] ChatGPT provider
262
- - [ ] Claude provider
263
- - [ ] Media downloader with deduplication
264
- - [ ] Smart filtering system
265
- - [ ] Scheduling with cron/launchd
266
- - [ ] Gemini provider
267
- - [ ] Perplexity provider
268
- - [ ] Export to knowledge management tools (Obsidian, Notion)
269
- - [ ] Search across all archived conversations
270
- - [ ] Web UI for browsing archives
465
+ - [x] Storage layer with JSON + Markdown export
466
+ - [x] Media downloader with SHA256 deduplication
467
+ - [x] Native import support (Grok ✓, ChatGPT & Claude coming soon)
468
+ - [x] Grok provider - two separate implementations:
469
+ - [x] **grok-web**: Standalone grok.com (cookies + scraping)
470
+ - [x] **grok-x**: X-integrated Grok at x.com/grok (cookies + scraping)
471
+ - [x] Smart filtering system:
472
+ - [x] Date range filtering (since/until)
473
+ - [x] Search query filtering (title/preview)
474
+ - [x] Conversation limit controls
475
+ - [x] List command for browsing before archiving
476
+ - [x] Scheduling system:
477
+ - [x] Platform-agnostic (cron on Unix, Task Scheduler on Windows)
478
+ - [x] Full CRUD operations (add, list, remove, enable, disable)
479
+ - [x] Per-provider schedule configuration
480
+ - [x] Logging infrastructure
481
+
482
+ ### In Progress 🚧
483
+
484
+ - [ ] Additional provider implementations:
485
+ - [ ] ChatGPT provider (import + API + scraping)
486
+ - [ ] Claude provider (import + API + scraping)
487
+ - [ ] Gemini provider (API + scraping)
488
+ - [ ] Perplexity provider (scraping)
489
+
490
+ ### Planned 📋
491
+
492
+ - [ ] Export to knowledge management tools (Obsidian, Notion, Roam)
493
+ - [ ] Full-text search across all archived conversations
494
+ - [ ] Web UI for browsing and exploring archives
495
+ - [ ] Conversation analytics and insights
496
+ - [ ] Automatic tagging and categorization
497
+ - [ ] Differential sync (only download changes)
271
498
 
272
499
  ## 📄 License
273
500
 
package/dist/cli.js CHANGED
@@ -4,46 +4,168 @@
4
4
  */
5
5
  import { Command } from 'commander';
6
6
  import chalk from 'chalk';
7
+ import { readFileSync } from 'fs';
8
+ import { fileURLToPath } from 'url';
9
+ import { dirname, join } from 'path';
10
+ // Get package.json path
11
+ const __filename = fileURLToPath(import.meta.url);
12
+ const __dirname = dirname(__filename);
13
+ const packageJson = JSON.parse(readFileSync(join(__dirname, '../package.json'), 'utf-8'));
7
14
  const program = new Command();
8
15
  program
9
16
  .name('ai-vault')
10
17
  .description('Own your data. Comprehensive archival of AI interactions—conversations, images, videos, code artifacts, and metadata—across multiple platforms.')
11
- .version('1.0.0');
18
+ .version(packageJson.version, '-v, -V, --version', 'Output the current version');
12
19
  program
13
20
  .command('setup')
14
21
  .description('Interactive setup wizard')
15
- .action(async () => {
16
- console.log(chalk.blue('Setup wizard coming soon!'));
17
- console.log(chalk.gray('This will help you configure providers and authentication.'));
22
+ .option('--cookies-file <path>', 'Path to cookies JSON file (for cookie-based auth)')
23
+ .action(async (options) => {
24
+ const { setupCommand } = await import('./commands/setup.js');
25
+ await setupCommand(options);
18
26
  });
19
27
  program
20
28
  .command('archive')
21
29
  .description('Archive conversations from configured providers')
22
30
  .option('-p, --provider <provider>', 'Specific provider to archive')
23
- .option('--since <date>', 'Archive conversations since date')
31
+ .option('-o, --output <directory>', 'Output directory (overrides config)')
32
+ .option('--since <date>', 'Archive conversations since date (YYYY-MM-DD)')
33
+ .option('--until <date>', 'Archive conversations until date (YYYY-MM-DD)')
34
+ .option('--limit <number>', 'Maximum number of conversations to archive')
24
35
  .option('--dry-run', 'Preview what would be archived without downloading')
36
+ .option('--skip-media', 'Skip downloading media files (images, videos)')
37
+ .option('--ids <ids...>', 'Specific conversation IDs to archive')
38
+ .action(async (options) => {
39
+ const { archiveCommand } = await import('./commands/archive.js');
40
+ await archiveCommand({
41
+ provider: options.provider,
42
+ outputDir: options.output,
43
+ since: options.since,
44
+ until: options.until,
45
+ limit: options.limit,
46
+ dryRun: options.dryRun,
47
+ skipMedia: options.skipMedia,
48
+ conversationIds: options.ids,
49
+ });
50
+ });
51
+ program
52
+ .command('import')
53
+ .description('Import conversations from native platform exports')
54
+ .requiredOption('-p, --provider <provider>', 'Provider (grok, chatgpt, claude, etc.)')
55
+ .requiredOption('-f, --file <path>', 'Path to export file or directory')
56
+ .option('-o, --output <directory>', 'Output directory (overrides config)')
57
+ .option('-y, --yes', 'Skip confirmation prompt')
25
58
  .action(async (options) => {
26
- console.log(chalk.blue('Archive command coming soon!'));
27
- console.log(chalk.gray('Options:'), options);
59
+ const { importCommand } = await import('./commands/import.js');
60
+ await importCommand(options);
28
61
  });
29
62
  program
30
63
  .command('list')
31
- .description('List archived conversations')
32
- .option('-p, --provider <provider>', 'Filter by provider')
33
- .option('--search <query>', 'Search conversations')
64
+ .description('List conversations from configured providers')
65
+ .option('-p, --provider <provider>', 'Provider to list from (grok-web, grok-x, etc.)')
66
+ .option('--search <query>', 'Search conversations by title or preview')
67
+ .option('--since <date>', 'List conversations since date (YYYY-MM-DD)')
68
+ .option('--until <date>', 'List conversations until date (YYYY-MM-DD)')
69
+ .option('--limit <number>', 'Maximum number of conversations to list')
34
70
  .action(async (options) => {
35
- console.log(chalk.blue('List command coming soon!'));
36
- console.log(chalk.gray('Options:'), options);
71
+ const { listCommand } = await import('./commands/list.js');
72
+ await listCommand(options);
37
73
  });
38
74
  program
39
75
  .command('schedule')
40
- .description('Configure automated backup schedule')
41
- .option('--daily', 'Schedule daily backups')
42
- .option('--cron <expression>', 'Custom cron expression')
43
- .option('--list', 'List scheduled jobs')
76
+ .description('Manage automated archiving schedules')
77
+ .argument('[action]', 'Action: add, list, remove, enable, disable, status')
78
+ .option('--id <id>', 'Schedule ID (for remove/enable/disable)')
79
+ .option('-p, --provider <provider>', 'Provider to schedule')
80
+ .option('--cron <expression>', 'Cron expression (e.g., "0 2 * * *")')
81
+ .option('--description <text>', 'Schedule description')
82
+ .option('--limit <number>', 'Maximum conversations to archive per run')
83
+ .option('--since-days <days>', 'Only archive conversations from last N days')
84
+ .option('--skip-media', 'Skip downloading media files')
85
+ .action(async (action, options) => {
86
+ const { scheduleCommand } = await import('./commands/schedule.js');
87
+ await scheduleCommand({
88
+ action: action || 'list',
89
+ id: options.id,
90
+ provider: options.provider,
91
+ cron: options.cron,
92
+ description: options.description,
93
+ limit: options.limit,
94
+ sinceDays: options.sinceDays,
95
+ skipMedia: options.skipMedia,
96
+ });
97
+ });
98
+ program
99
+ .command('upgrade')
100
+ .alias('update')
101
+ .description('Check for and install the latest version')
102
+ .option('-y, --yes', 'Skip confirmation prompt')
44
103
  .action(async (options) => {
45
- console.log(chalk.blue('Schedule command coming soon!'));
46
- console.log(chalk.gray('Options:'), options);
104
+ const ora = (await import('ora')).default;
105
+ const axios = (await import('axios')).default;
106
+ const { execSync } = await import('child_process');
107
+ const spinner = ora('Checking for updates...').start();
108
+ try {
109
+ // Check latest version on npm
110
+ const response = await axios.get('https://registry.npmjs.org/ai-vault/latest', {
111
+ timeout: 5000,
112
+ });
113
+ const latestVersion = response.data.version;
114
+ const currentVersion = packageJson.version;
115
+ spinner.stop();
116
+ if (latestVersion === currentVersion) {
117
+ console.log(chalk.green('✓ You are already on the latest version!'));
118
+ console.log(chalk.gray(` Current: v${currentVersion}`));
119
+ return;
120
+ }
121
+ console.log(chalk.yellow('\nUpdate available!'));
122
+ console.log(chalk.gray(` Current: v${currentVersion}`));
123
+ console.log(chalk.green(` Latest: v${latestVersion}\n`));
124
+ // Show release notes URL
125
+ console.log(chalk.gray(`Release notes: https://github.com/dotCipher/ai-vault/releases/tag/v${latestVersion}\n`));
126
+ // Prompt for confirmation if -y not provided
127
+ if (!options.yes) {
128
+ console.log(chalk.cyan('Run with --yes to skip this prompt\n'));
129
+ const readline = await import('readline');
130
+ const rl = readline.createInterface({
131
+ input: process.stdin,
132
+ output: process.stdout,
133
+ });
134
+ const answer = await new Promise((resolve) => {
135
+ rl.question(chalk.bold('Upgrade now? (y/N): '), (ans) => {
136
+ rl.close();
137
+ resolve(ans);
138
+ });
139
+ });
140
+ if (answer.toLowerCase() !== 'y' && answer.toLowerCase() !== 'yes') {
141
+ console.log(chalk.gray('Upgrade cancelled.'));
142
+ return;
143
+ }
144
+ }
145
+ // Perform upgrade
146
+ console.log();
147
+ const upgradeSpinner = ora('Installing latest version...').start();
148
+ try {
149
+ execSync('npm install -g ai-vault@latest', {
150
+ stdio: 'pipe',
151
+ env: { ...process.env, NODE_NO_WARNINGS: '1' },
152
+ });
153
+ upgradeSpinner.succeed(chalk.green(`Successfully upgraded to v${latestVersion}!`));
154
+ console.log(chalk.gray('\nRun `ai-vault --help` to see all commands.'));
155
+ }
156
+ catch (error) {
157
+ upgradeSpinner.fail('Upgrade failed');
158
+ console.error(chalk.red('\nError:'), error instanceof Error ? error.message : 'Unknown error');
159
+ console.log(chalk.yellow('\nTry manually: npm install -g ai-vault@latest'));
160
+ process.exit(1);
161
+ }
162
+ }
163
+ catch (error) {
164
+ spinner.fail('Failed to check for updates');
165
+ console.error(chalk.red('Error:'), error instanceof Error ? error.message : 'Unknown error');
166
+ console.log(chalk.gray('\nCheck manually: https://www.npmjs.com/package/ai-vault'));
167
+ process.exit(1);
168
+ }
47
169
  });
48
170
  program.parse();
49
171
  //# sourceMappingURL=cli.js.map
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,UAAU,CAAC;KAChB,WAAW,CACV,iJAAiJ,CAClJ;KACA,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,0BAA0B,CAAC;KACvC,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC,CAAC;AACxF,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,iDAAiD,CAAC;KAC9D,MAAM,CAAC,2BAA2B,EAAE,8BAA8B,CAAC;KACnE,MAAM,CAAC,gBAAgB,EAAE,kCAAkC,CAAC;KAC5D,MAAM,CAAC,WAAW,EAAE,oDAAoD,CAAC;KACzE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC,CAAC;IACxD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC;AAC/C,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,6BAA6B,CAAC;KAC1C,MAAM,CAAC,2BAA2B,EAAE,oBAAoB,CAAC;KACzD,MAAM,CAAC,kBAAkB,EAAE,sBAAsB,CAAC;KAClD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC;AAC/C,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,qCAAqC,CAAC;KAClD,MAAM,CAAC,SAAS,EAAE,wBAAwB,CAAC;KAC3C,MAAM,CAAC,qBAAqB,EAAE,wBAAwB,CAAC;KACvD,MAAM,CAAC,QAAQ,EAAE,qBAAqB,CAAC;KACvC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC,CAAC;IACzD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC;AAC/C,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Archive Command - Archive conversations from providers
3
+ */
4
+ interface ArchiveCommandOptions {
5
+ provider?: string;
6
+ outputDir?: string;
7
+ since?: string;
8
+ until?: string;
9
+ limit?: string;
10
+ dryRun?: boolean;
11
+ skipMedia?: boolean;
12
+ conversationIds?: string[];
13
+ }
14
+ export declare function archiveCommand(options: ArchiveCommandOptions): Promise<void>;
15
+ export {};
16
+ //# sourceMappingURL=archive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archive.d.ts","sourceRoot":"","sources":["../../src/commands/archive.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH,UAAU,qBAAqB;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,wBAAsB,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2JlF"}