@savestate/cli 0.7.0 → 0.8.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 (89) hide show
  1. package/dist/cli/__tests__/progress.test.d.ts +5 -0
  2. package/dist/cli/__tests__/progress.test.d.ts.map +1 -0
  3. package/dist/cli/__tests__/progress.test.js +212 -0
  4. package/dist/cli/__tests__/progress.test.js.map +1 -0
  5. package/dist/cli/__tests__/signal-handler.test.d.ts +5 -0
  6. package/dist/cli/__tests__/signal-handler.test.d.ts.map +1 -0
  7. package/dist/cli/__tests__/signal-handler.test.js +99 -0
  8. package/dist/cli/__tests__/signal-handler.test.js.map +1 -0
  9. package/dist/cli/__tests__/summary.test.d.ts +5 -0
  10. package/dist/cli/__tests__/summary.test.d.ts.map +1 -0
  11. package/dist/cli/__tests__/summary.test.js +242 -0
  12. package/dist/cli/__tests__/summary.test.js.map +1 -0
  13. package/dist/cli/index.d.ts +10 -0
  14. package/dist/cli/index.d.ts.map +1 -0
  15. package/dist/cli/index.js +10 -0
  16. package/dist/cli/index.js.map +1 -0
  17. package/dist/cli/progress.d.ts +86 -0
  18. package/dist/cli/progress.d.ts.map +1 -0
  19. package/dist/cli/progress.js +205 -0
  20. package/dist/cli/progress.js.map +1 -0
  21. package/dist/cli/prompts.d.ts +49 -0
  22. package/dist/cli/prompts.d.ts.map +1 -0
  23. package/dist/cli/prompts.js +266 -0
  24. package/dist/cli/prompts.js.map +1 -0
  25. package/dist/cli/signal-handler.d.ts +63 -0
  26. package/dist/cli/signal-handler.d.ts.map +1 -0
  27. package/dist/cli/signal-handler.js +165 -0
  28. package/dist/cli/signal-handler.js.map +1 -0
  29. package/dist/cli/summary.d.ts +33 -0
  30. package/dist/cli/summary.d.ts.map +1 -0
  31. package/dist/cli/summary.js +296 -0
  32. package/dist/cli/summary.js.map +1 -0
  33. package/dist/cli.js +7 -1
  34. package/dist/cli.js.map +1 -1
  35. package/dist/commands/migrate.d.ts +18 -4
  36. package/dist/commands/migrate.d.ts.map +1 -1
  37. package/dist/commands/migrate.js +324 -163
  38. package/dist/commands/migrate.js.map +1 -1
  39. package/dist/migrate/__tests__/capabilities.test.d.ts +7 -0
  40. package/dist/migrate/__tests__/capabilities.test.d.ts.map +1 -0
  41. package/dist/migrate/__tests__/capabilities.test.js +90 -0
  42. package/dist/migrate/__tests__/capabilities.test.js.map +1 -0
  43. package/dist/migrate/__tests__/chatgpt-loader.test.d.ts +7 -0
  44. package/dist/migrate/__tests__/chatgpt-loader.test.d.ts.map +1 -0
  45. package/dist/migrate/__tests__/chatgpt-loader.test.js +889 -0
  46. package/dist/migrate/__tests__/chatgpt-loader.test.js.map +1 -0
  47. package/dist/migrate/__tests__/edge-cases.test.d.ts +7 -0
  48. package/dist/migrate/__tests__/edge-cases.test.d.ts.map +1 -0
  49. package/dist/migrate/__tests__/edge-cases.test.js +787 -0
  50. package/dist/migrate/__tests__/edge-cases.test.js.map +1 -0
  51. package/dist/migrate/__tests__/error-recovery.test.d.ts +7 -0
  52. package/dist/migrate/__tests__/error-recovery.test.d.ts.map +1 -0
  53. package/dist/migrate/__tests__/error-recovery.test.js +461 -0
  54. package/dist/migrate/__tests__/error-recovery.test.js.map +1 -0
  55. package/dist/migrate/__tests__/integration.test.d.ts +7 -0
  56. package/dist/migrate/__tests__/integration.test.d.ts.map +1 -0
  57. package/dist/migrate/__tests__/integration.test.js +536 -0
  58. package/dist/migrate/__tests__/integration.test.js.map +1 -0
  59. package/dist/migrate/__tests__/performance.test.d.ts +7 -0
  60. package/dist/migrate/__tests__/performance.test.d.ts.map +1 -0
  61. package/dist/migrate/__tests__/performance.test.js +478 -0
  62. package/dist/migrate/__tests__/performance.test.js.map +1 -0
  63. package/dist/migrate/__tests__/registry.test.d.ts +7 -0
  64. package/dist/migrate/__tests__/registry.test.d.ts.map +1 -0
  65. package/dist/migrate/__tests__/registry.test.js +167 -0
  66. package/dist/migrate/__tests__/registry.test.js.map +1 -0
  67. package/dist/migrate/compatibility.d.ts +47 -0
  68. package/dist/migrate/compatibility.d.ts.map +1 -0
  69. package/dist/migrate/compatibility.js +468 -0
  70. package/dist/migrate/compatibility.js.map +1 -0
  71. package/dist/migrate/extractors/__tests__/claude.test.d.ts +12 -0
  72. package/dist/migrate/extractors/__tests__/claude.test.d.ts.map +1 -0
  73. package/dist/migrate/extractors/__tests__/claude.test.js +789 -0
  74. package/dist/migrate/extractors/__tests__/claude.test.js.map +1 -0
  75. package/dist/migrate/extractors/claude.d.ts +69 -0
  76. package/dist/migrate/extractors/claude.d.ts.map +1 -0
  77. package/dist/migrate/extractors/claude.js +1136 -0
  78. package/dist/migrate/extractors/claude.js.map +1 -0
  79. package/dist/migrate/extractors/registry.js +3 -2
  80. package/dist/migrate/extractors/registry.js.map +1 -1
  81. package/dist/migrate/loaders/chatgpt.d.ts +72 -0
  82. package/dist/migrate/loaders/chatgpt.d.ts.map +1 -0
  83. package/dist/migrate/loaders/chatgpt.js +691 -0
  84. package/dist/migrate/loaders/chatgpt.js.map +1 -0
  85. package/dist/migrate/loaders/registry.js +3 -2
  86. package/dist/migrate/loaders/registry.js.map +1 -1
  87. package/dist/migrate/types.d.ts +2 -0
  88. package/dist/migrate/types.d.ts.map +1 -1
  89. package/package.json +2 -1
@@ -0,0 +1,536 @@
1
+ /**
2
+ * Integration Tests for Migration Wizard
3
+ *
4
+ * Tests complete migration paths between platforms with realistic data.
5
+ */
6
+ import { describe, it, expect, beforeEach, afterEach } from 'vitest';
7
+ import { existsSync } from 'node:fs';
8
+ import { rm, mkdir } from 'node:fs/promises';
9
+ import { join } from 'node:path';
10
+ import { tmpdir } from 'node:os';
11
+ import { MigrationOrchestrator } from '../orchestrator.js';
12
+ import { registerMockPlugins } from '../testing/index.js';
13
+ import { ChatGPTToClaudeTransformer } from '../transformers/chatgpt-to-claude.js';
14
+ import { ClaudeToChatGPTTransformer } from '../transformers/claude-to-chatgpt.js';
15
+ import { registerTransformer } from '../transformers/registry.js';
16
+ describe('Integration Tests', () => {
17
+ let testWorkDir;
18
+ beforeEach(async () => {
19
+ testWorkDir = join(tmpdir(), `savestate-integration-${Date.now()}-${Math.random().toString(36).slice(2)}`);
20
+ await mkdir(testWorkDir, { recursive: true });
21
+ });
22
+ afterEach(async () => {
23
+ if (existsSync(testWorkDir)) {
24
+ await rm(testWorkDir, { recursive: true, force: true });
25
+ }
26
+ });
27
+ describe('ChatGPT → Claude Full Migration', () => {
28
+ it('should migrate typical user data from ChatGPT to Claude', async () => {
29
+ // Create realistic ChatGPT data
30
+ const typicalUserBundle = {
31
+ version: '1.0',
32
+ id: 'bundle_chatgpt_typical',
33
+ source: {
34
+ platform: 'chatgpt',
35
+ extractedAt: new Date().toISOString(),
36
+ accountId: 'user_12345',
37
+ extractorVersion: '1.0.0',
38
+ },
39
+ contents: {
40
+ instructions: {
41
+ content: `## About Me
42
+ I am a software developer working on web applications. I prefer TypeScript and React.
43
+ I live in San Francisco and work remotely.
44
+
45
+ ## How ChatGPT Should Respond
46
+ Be concise but thorough. Use code examples when helpful.
47
+ Always explain the reasoning behind suggestions.
48
+ Format code with proper indentation.`,
49
+ length: 300,
50
+ sections: [
51
+ { title: 'About Me', content: 'Software developer...', priority: 'high' },
52
+ { title: 'Response Style', content: 'Be concise...', priority: 'medium' },
53
+ ],
54
+ },
55
+ memories: {
56
+ entries: [
57
+ {
58
+ id: 'mem_1',
59
+ content: 'User prefers TypeScript over JavaScript',
60
+ createdAt: '2024-01-15T10:00:00Z',
61
+ category: 'preferences',
62
+ },
63
+ {
64
+ id: 'mem_2',
65
+ content: 'User is building a Next.js e-commerce platform',
66
+ createdAt: '2024-01-20T14:30:00Z',
67
+ category: 'projects',
68
+ },
69
+ {
70
+ id: 'mem_3',
71
+ content: 'User timezone is PST (UTC-8)',
72
+ createdAt: '2024-02-01T09:00:00Z',
73
+ category: 'context',
74
+ },
75
+ ],
76
+ count: 3,
77
+ },
78
+ conversations: {
79
+ path: 'conversations/',
80
+ count: 15,
81
+ messageCount: 150,
82
+ summaries: [
83
+ {
84
+ id: 'conv_1',
85
+ title: 'React State Management',
86
+ messageCount: 25,
87
+ createdAt: '2024-01-10T10:00:00Z',
88
+ updatedAt: '2024-01-10T12:00:00Z',
89
+ keyPoints: ['Decided to use Zustand for state management'],
90
+ },
91
+ {
92
+ id: 'conv_2',
93
+ title: 'Database Design',
94
+ messageCount: 40,
95
+ createdAt: '2024-01-12T09:00:00Z',
96
+ updatedAt: '2024-01-12T16:00:00Z',
97
+ keyPoints: ['Using Prisma with PostgreSQL'],
98
+ },
99
+ ],
100
+ },
101
+ files: {
102
+ files: [
103
+ {
104
+ id: 'file_1',
105
+ filename: 'schema.prisma',
106
+ mimeType: 'text/plain',
107
+ size: 4096,
108
+ path: 'files/schema.prisma',
109
+ },
110
+ {
111
+ id: 'file_2',
112
+ filename: 'api-docs.pdf',
113
+ mimeType: 'application/pdf',
114
+ size: 524288,
115
+ path: 'files/api-docs.pdf',
116
+ },
117
+ ],
118
+ count: 2,
119
+ totalSize: 528384,
120
+ },
121
+ customBots: {
122
+ bots: [
123
+ {
124
+ id: 'gpt_1',
125
+ name: 'Code Reviewer',
126
+ description: 'Reviews code for best practices',
127
+ instructions: 'You are a senior code reviewer...',
128
+ capabilities: ['code_interpreter'],
129
+ createdAt: '2024-01-05T10:00:00Z',
130
+ },
131
+ ],
132
+ count: 1,
133
+ },
134
+ },
135
+ metadata: {
136
+ totalItems: 22,
137
+ itemCounts: {
138
+ instructions: 1,
139
+ memories: 3,
140
+ conversations: 15,
141
+ files: 2,
142
+ customBots: 1,
143
+ },
144
+ warnings: [],
145
+ errors: [],
146
+ },
147
+ };
148
+ // Register mock extractor with this bundle
149
+ const { loaders } = registerMockPlugins({
150
+ extractors: {
151
+ chatgpt: { customBundle: typicalUserBundle },
152
+ },
153
+ });
154
+ // Also register the real ChatGPT→Claude transformer
155
+ registerTransformer('chatgpt', 'claude', () => new ChatGPTToClaudeTransformer());
156
+ const orchestrator = new MigrationOrchestrator('chatgpt', 'claude', {
157
+ workDir: join(testWorkDir, 'migration-chatgpt-claude'),
158
+ });
159
+ const events = [];
160
+ orchestrator.on((e) => events.push(e));
161
+ const result = await orchestrator.run();
162
+ // Verify success
163
+ expect(result.success).toBe(true);
164
+ expect(result.loaded.instructions).toBe(true);
165
+ expect(result.loaded.memories).toBeGreaterThan(0);
166
+ expect(result.loaded.files).toBe(2);
167
+ // Verify state
168
+ const state = orchestrator.getState();
169
+ expect(state.phase).toBe('complete');
170
+ expect(state.checkpoints.length).toBe(3);
171
+ // Verify the bundle was transformed correctly
172
+ const bundle = orchestrator.getBundle();
173
+ expect(bundle?.target?.platform).toBe('claude');
174
+ expect(bundle?.contents.instructions).toBeDefined();
175
+ // Verify phase events
176
+ const phaseStarts = events.filter((e) => e.type === 'phase:start');
177
+ expect(phaseStarts.length).toBe(3);
178
+ });
179
+ it('should preserve custom bot configurations during migration', async () => {
180
+ const bundleWithMultipleGPTs = {
181
+ version: '1.0',
182
+ id: 'bundle_gpts',
183
+ source: {
184
+ platform: 'chatgpt',
185
+ extractedAt: new Date().toISOString(),
186
+ extractorVersion: '1.0.0',
187
+ },
188
+ contents: {
189
+ customBots: {
190
+ bots: [
191
+ {
192
+ id: 'gpt_writer',
193
+ name: 'Creative Writer',
194
+ description: 'Helps with creative writing',
195
+ instructions: 'You are a creative writing assistant. Help with stories, poems, and creative content.',
196
+ capabilities: ['browsing'],
197
+ createdAt: '2024-01-01T10:00:00Z',
198
+ },
199
+ {
200
+ id: 'gpt_data',
201
+ name: 'Data Analyst',
202
+ description: 'Analyzes data and creates visualizations',
203
+ instructions: 'You are a data analyst. Process data, create charts, and provide insights.',
204
+ capabilities: ['code_interpreter'],
205
+ createdAt: '2024-01-02T10:00:00Z',
206
+ },
207
+ ],
208
+ count: 2,
209
+ },
210
+ },
211
+ metadata: {
212
+ totalItems: 2,
213
+ itemCounts: {
214
+ instructions: 0,
215
+ memories: 0,
216
+ conversations: 0,
217
+ files: 0,
218
+ customBots: 2,
219
+ },
220
+ warnings: [],
221
+ errors: [],
222
+ },
223
+ };
224
+ registerMockPlugins({
225
+ extractors: { chatgpt: { customBundle: bundleWithMultipleGPTs } },
226
+ });
227
+ registerTransformer('chatgpt', 'claude', () => new ChatGPTToClaudeTransformer());
228
+ const orchestrator = new MigrationOrchestrator('chatgpt', 'claude', {
229
+ workDir: join(testWorkDir, 'migration-gpts'),
230
+ });
231
+ const result = await orchestrator.run();
232
+ expect(result.success).toBe(true);
233
+ expect(result.loaded.customBots).toBe(2);
234
+ const bundle = orchestrator.getBundle();
235
+ expect(bundle?.contents.customBots?.count).toBe(2);
236
+ });
237
+ });
238
+ describe('Claude → ChatGPT Full Migration', () => {
239
+ it('should migrate typical user data from Claude to ChatGPT', async () => {
240
+ const claudeBundle = {
241
+ version: '1.0',
242
+ id: 'bundle_claude_typical',
243
+ source: {
244
+ platform: 'claude',
245
+ extractedAt: new Date().toISOString(),
246
+ accountId: 'org_abc123',
247
+ extractorVersion: '1.0.0',
248
+ },
249
+ contents: {
250
+ instructions: {
251
+ content: `You are assisting a product manager at a tech startup.
252
+
253
+ Key context:
254
+ - The user manages a team of 5 engineers
255
+ - Main product is a B2B SaaS platform
256
+ - Currently in Series A funding stage
257
+
258
+ Response guidelines:
259
+ - Be direct and action-oriented
260
+ - Use bullet points for clarity
261
+ - Consider business impact in suggestions`,
262
+ length: 350,
263
+ },
264
+ memories: {
265
+ entries: [
266
+ {
267
+ id: 'claude_mem_1',
268
+ content: 'User manages product roadmap quarterly',
269
+ createdAt: '2024-02-01T10:00:00Z',
270
+ },
271
+ {
272
+ id: 'claude_mem_2',
273
+ content: 'Team uses Jira for project tracking',
274
+ createdAt: '2024-02-05T14:00:00Z',
275
+ },
276
+ ],
277
+ count: 2,
278
+ },
279
+ files: {
280
+ files: [
281
+ {
282
+ id: 'claude_file_1',
283
+ filename: 'roadmap-q1.md',
284
+ mimeType: 'text/markdown',
285
+ size: 8192,
286
+ path: 'files/roadmap-q1.md',
287
+ },
288
+ ],
289
+ count: 1,
290
+ totalSize: 8192,
291
+ },
292
+ },
293
+ metadata: {
294
+ totalItems: 4,
295
+ itemCounts: {
296
+ instructions: 1,
297
+ memories: 2,
298
+ conversations: 0,
299
+ files: 1,
300
+ customBots: 0,
301
+ },
302
+ warnings: [],
303
+ errors: [],
304
+ },
305
+ };
306
+ registerMockPlugins({
307
+ extractors: { claude: { customBundle: claudeBundle } },
308
+ });
309
+ registerTransformer('claude', 'chatgpt', () => new ClaudeToChatGPTTransformer());
310
+ const orchestrator = new MigrationOrchestrator('claude', 'chatgpt', {
311
+ workDir: join(testWorkDir, 'migration-claude-chatgpt'),
312
+ });
313
+ const result = await orchestrator.run();
314
+ expect(result.success).toBe(true);
315
+ expect(result.loaded.instructions).toBe(true);
316
+ expect(result.loaded.memories).toBe(2);
317
+ expect(result.loaded.files).toBe(1);
318
+ const bundle = orchestrator.getBundle();
319
+ expect(bundle?.target?.platform).toBe('chatgpt');
320
+ });
321
+ it('should handle Claude projects mapped to ChatGPT', async () => {
322
+ const claudeWithProjects = {
323
+ version: '1.0',
324
+ id: 'bundle_claude_projects',
325
+ source: {
326
+ platform: 'claude',
327
+ extractedAt: new Date().toISOString(),
328
+ extractorVersion: '1.0.0',
329
+ },
330
+ contents: {
331
+ customBots: {
332
+ bots: [
333
+ {
334
+ id: 'proj_research',
335
+ name: 'Research Assistant',
336
+ description: 'Helps with academic research',
337
+ instructions: 'Focus on peer-reviewed sources and citations',
338
+ createdAt: '2024-01-15T10:00:00Z',
339
+ },
340
+ ],
341
+ count: 1,
342
+ },
343
+ },
344
+ metadata: {
345
+ totalItems: 1,
346
+ itemCounts: {
347
+ instructions: 0,
348
+ memories: 0,
349
+ conversations: 0,
350
+ files: 0,
351
+ customBots: 1,
352
+ },
353
+ warnings: [],
354
+ errors: [],
355
+ },
356
+ };
357
+ registerMockPlugins({
358
+ extractors: { claude: { customBundle: claudeWithProjects } },
359
+ });
360
+ registerTransformer('claude', 'chatgpt', () => new ClaudeToChatGPTTransformer());
361
+ const orchestrator = new MigrationOrchestrator('claude', 'chatgpt', {
362
+ workDir: join(testWorkDir, 'migration-projects'),
363
+ });
364
+ const result = await orchestrator.run();
365
+ expect(result.success).toBe(true);
366
+ });
367
+ });
368
+ describe('Dry Run Mode', () => {
369
+ it('should show accurate compatibility report in dry run', async () => {
370
+ const bundleWithMixedCompatibility = {
371
+ version: '1.0',
372
+ id: 'bundle_mixed',
373
+ source: {
374
+ platform: 'chatgpt',
375
+ extractedAt: new Date().toISOString(),
376
+ extractorVersion: '1.0.0',
377
+ },
378
+ contents: {
379
+ instructions: {
380
+ content: 'A'.repeat(10000), // Long instructions that will need adaptation
381
+ length: 10000,
382
+ },
383
+ memories: {
384
+ entries: Array.from({ length: 25 }, (_, i) => ({
385
+ id: `mem_${i}`,
386
+ content: `Memory entry ${i}`,
387
+ createdAt: new Date().toISOString(),
388
+ })),
389
+ count: 25,
390
+ },
391
+ files: {
392
+ files: [
393
+ {
394
+ id: 'large_file',
395
+ filename: 'huge-dataset.csv',
396
+ mimeType: 'text/csv',
397
+ size: 100 * 1024 * 1024, // 100MB - exceeds Claude's limit
398
+ path: 'files/huge-dataset.csv',
399
+ },
400
+ {
401
+ id: 'normal_file',
402
+ filename: 'readme.md',
403
+ mimeType: 'text/markdown',
404
+ size: 1024,
405
+ path: 'files/readme.md',
406
+ },
407
+ ],
408
+ count: 2,
409
+ totalSize: 100 * 1024 * 1024 + 1024,
410
+ },
411
+ },
412
+ metadata: {
413
+ totalItems: 28,
414
+ itemCounts: {
415
+ instructions: 1,
416
+ memories: 25,
417
+ conversations: 0,
418
+ files: 2,
419
+ customBots: 0,
420
+ },
421
+ warnings: [],
422
+ errors: [],
423
+ },
424
+ };
425
+ registerMockPlugins({
426
+ extractors: { chatgpt: { customBundle: bundleWithMixedCompatibility } },
427
+ });
428
+ registerTransformer('chatgpt', 'claude', () => new ChatGPTToClaudeTransformer());
429
+ const orchestrator = new MigrationOrchestrator('chatgpt', 'claude', {
430
+ workDir: join(testWorkDir, 'migration-dry-run'),
431
+ dryRun: true,
432
+ });
433
+ // First get the compatibility report
434
+ const report = await orchestrator.analyze();
435
+ expect(report.source).toBe('chatgpt');
436
+ expect(report.target).toBe('claude');
437
+ expect(report.summary.total).toBeGreaterThan(0);
438
+ expect(report.items.some((i) => i.status === 'adapted')).toBe(true);
439
+ expect(report.items.some((i) => i.status === 'incompatible')).toBe(true);
440
+ expect(report.recommendations.length).toBeGreaterThan(0);
441
+ // Now run the dry migration
442
+ const result = await orchestrator.run();
443
+ expect(result.success).toBe(true);
444
+ expect(result.warnings).toContain('Dry run - no changes made');
445
+ });
446
+ it('should not create any resources in dry run mode', async () => {
447
+ registerMockPlugins();
448
+ const orchestrator = new MigrationOrchestrator('chatgpt', 'claude', {
449
+ workDir: join(testWorkDir, 'migration-dry-run-resources'),
450
+ dryRun: true,
451
+ });
452
+ const result = await orchestrator.run();
453
+ expect(result.success).toBe(true);
454
+ expect(result.created).toBeUndefined();
455
+ });
456
+ });
457
+ describe('Bidirectional Migration', () => {
458
+ it('should support round-trip migration ChatGPT → Claude → ChatGPT', async () => {
459
+ const originalBundle = {
460
+ version: '1.0',
461
+ id: 'bundle_roundtrip',
462
+ source: {
463
+ platform: 'chatgpt',
464
+ extractedAt: new Date().toISOString(),
465
+ extractorVersion: '1.0.0',
466
+ },
467
+ contents: {
468
+ instructions: {
469
+ content: 'I am a helpful assistant for a software engineer.',
470
+ length: 50,
471
+ },
472
+ memories: {
473
+ entries: [
474
+ {
475
+ id: 'mem_rt',
476
+ content: 'User prefers detailed explanations',
477
+ createdAt: new Date().toISOString(),
478
+ },
479
+ ],
480
+ count: 1,
481
+ },
482
+ },
483
+ metadata: {
484
+ totalItems: 2,
485
+ itemCounts: {
486
+ instructions: 1,
487
+ memories: 1,
488
+ conversations: 0,
489
+ files: 0,
490
+ customBots: 0,
491
+ },
492
+ warnings: [],
493
+ errors: [],
494
+ },
495
+ };
496
+ // First migration: ChatGPT → Claude
497
+ registerMockPlugins({
498
+ extractors: { chatgpt: { customBundle: originalBundle } },
499
+ });
500
+ registerTransformer('chatgpt', 'claude', () => new ChatGPTToClaudeTransformer());
501
+ registerTransformer('claude', 'chatgpt', () => new ClaudeToChatGPTTransformer());
502
+ const orchestrator1 = new MigrationOrchestrator('chatgpt', 'claude', {
503
+ workDir: join(testWorkDir, 'migration-roundtrip-1'),
504
+ });
505
+ const result1 = await orchestrator1.run();
506
+ expect(result1.success).toBe(true);
507
+ const claudeBundle = orchestrator1.getBundle();
508
+ expect(claudeBundle.target?.platform).toBe('claude');
509
+ // Second migration: Claude → ChatGPT (using the transformed bundle)
510
+ registerMockPlugins({
511
+ extractors: {
512
+ claude: {
513
+ customBundle: {
514
+ ...claudeBundle,
515
+ source: {
516
+ platform: 'claude',
517
+ extractedAt: new Date().toISOString(),
518
+ extractorVersion: '1.0.0',
519
+ },
520
+ },
521
+ },
522
+ },
523
+ });
524
+ const orchestrator2 = new MigrationOrchestrator('claude', 'chatgpt', {
525
+ workDir: join(testWorkDir, 'migration-roundtrip-2'),
526
+ });
527
+ const result2 = await orchestrator2.run();
528
+ expect(result2.success).toBe(true);
529
+ const finalBundle = orchestrator2.getBundle();
530
+ expect(finalBundle.target?.platform).toBe('chatgpt');
531
+ // Core data should be preserved
532
+ expect(finalBundle.contents.instructions).toBeDefined();
533
+ });
534
+ });
535
+ });
536
+ //# sourceMappingURL=integration.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integration.test.js","sourceRoot":"","sources":["../../../src/migrate/__tests__/integration.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Performance Tests for Migration Wizard
3
+ *
4
+ * Tests memory usage, progress responsiveness, and large dataset handling.
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=performance.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"performance.test.d.ts","sourceRoot":"","sources":["../../../src/migrate/__tests__/performance.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}