@savestate/cli 0.6.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 (159) 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__/claude-loader.test.d.ts +7 -0
  48. package/dist/migrate/__tests__/claude-loader.test.d.ts.map +1 -0
  49. package/dist/migrate/__tests__/claude-loader.test.js +544 -0
  50. package/dist/migrate/__tests__/claude-loader.test.js.map +1 -0
  51. package/dist/migrate/__tests__/edge-cases.test.d.ts +7 -0
  52. package/dist/migrate/__tests__/edge-cases.test.d.ts.map +1 -0
  53. package/dist/migrate/__tests__/edge-cases.test.js +787 -0
  54. package/dist/migrate/__tests__/edge-cases.test.js.map +1 -0
  55. package/dist/migrate/__tests__/error-recovery.test.d.ts +7 -0
  56. package/dist/migrate/__tests__/error-recovery.test.d.ts.map +1 -0
  57. package/dist/migrate/__tests__/error-recovery.test.js +461 -0
  58. package/dist/migrate/__tests__/error-recovery.test.js.map +1 -0
  59. package/dist/migrate/__tests__/integration.test.d.ts +7 -0
  60. package/dist/migrate/__tests__/integration.test.d.ts.map +1 -0
  61. package/dist/migrate/__tests__/integration.test.js +536 -0
  62. package/dist/migrate/__tests__/integration.test.js.map +1 -0
  63. package/dist/migrate/__tests__/orchestrator.test.d.ts +8 -0
  64. package/dist/migrate/__tests__/orchestrator.test.d.ts.map +1 -0
  65. package/dist/migrate/__tests__/orchestrator.test.js +355 -0
  66. package/dist/migrate/__tests__/orchestrator.test.js.map +1 -0
  67. package/dist/migrate/__tests__/performance.test.d.ts +7 -0
  68. package/dist/migrate/__tests__/performance.test.d.ts.map +1 -0
  69. package/dist/migrate/__tests__/performance.test.js +478 -0
  70. package/dist/migrate/__tests__/performance.test.js.map +1 -0
  71. package/dist/migrate/__tests__/registry.test.d.ts +7 -0
  72. package/dist/migrate/__tests__/registry.test.d.ts.map +1 -0
  73. package/dist/migrate/__tests__/registry.test.js +167 -0
  74. package/dist/migrate/__tests__/registry.test.js.map +1 -0
  75. package/dist/migrate/compatibility.d.ts +47 -0
  76. package/dist/migrate/compatibility.d.ts.map +1 -0
  77. package/dist/migrate/compatibility.js +468 -0
  78. package/dist/migrate/compatibility.js.map +1 -0
  79. package/dist/migrate/extractors/__tests__/chatgpt.test.d.ts +12 -0
  80. package/dist/migrate/extractors/__tests__/chatgpt.test.d.ts.map +1 -0
  81. package/dist/migrate/extractors/__tests__/chatgpt.test.js +522 -0
  82. package/dist/migrate/extractors/__tests__/chatgpt.test.js.map +1 -0
  83. package/dist/migrate/extractors/__tests__/claude.test.d.ts +12 -0
  84. package/dist/migrate/extractors/__tests__/claude.test.d.ts.map +1 -0
  85. package/dist/migrate/extractors/__tests__/claude.test.js +789 -0
  86. package/dist/migrate/extractors/__tests__/claude.test.js.map +1 -0
  87. package/dist/migrate/extractors/chatgpt.d.ts +70 -0
  88. package/dist/migrate/extractors/chatgpt.d.ts.map +1 -0
  89. package/dist/migrate/extractors/chatgpt.js +791 -0
  90. package/dist/migrate/extractors/chatgpt.js.map +1 -0
  91. package/dist/migrate/extractors/claude.d.ts +69 -0
  92. package/dist/migrate/extractors/claude.d.ts.map +1 -0
  93. package/dist/migrate/extractors/claude.js +1136 -0
  94. package/dist/migrate/extractors/claude.js.map +1 -0
  95. package/dist/migrate/extractors/registry.js +6 -4
  96. package/dist/migrate/extractors/registry.js.map +1 -1
  97. package/dist/migrate/index.d.ts +6 -1
  98. package/dist/migrate/index.d.ts.map +1 -1
  99. package/dist/migrate/index.js +12 -1
  100. package/dist/migrate/index.js.map +1 -1
  101. package/dist/migrate/loaders/chatgpt.d.ts +72 -0
  102. package/dist/migrate/loaders/chatgpt.d.ts.map +1 -0
  103. package/dist/migrate/loaders/chatgpt.js +691 -0
  104. package/dist/migrate/loaders/chatgpt.js.map +1 -0
  105. package/dist/migrate/loaders/claude.d.ts +61 -0
  106. package/dist/migrate/loaders/claude.d.ts.map +1 -0
  107. package/dist/migrate/loaders/claude.js +433 -0
  108. package/dist/migrate/loaders/claude.js.map +1 -0
  109. package/dist/migrate/loaders/registry.js +6 -4
  110. package/dist/migrate/loaders/registry.js.map +1 -1
  111. package/dist/migrate/orchestrator.d.ts +75 -1
  112. package/dist/migrate/orchestrator.d.ts.map +1 -1
  113. package/dist/migrate/orchestrator.js +215 -19
  114. package/dist/migrate/orchestrator.js.map +1 -1
  115. package/dist/migrate/testing/index.d.ts +28 -0
  116. package/dist/migrate/testing/index.d.ts.map +1 -0
  117. package/dist/migrate/testing/index.js +55 -0
  118. package/dist/migrate/testing/index.js.map +1 -0
  119. package/dist/migrate/testing/mock-extractor.d.ts +30 -0
  120. package/dist/migrate/testing/mock-extractor.d.ts.map +1 -0
  121. package/dist/migrate/testing/mock-extractor.js +137 -0
  122. package/dist/migrate/testing/mock-extractor.js.map +1 -0
  123. package/dist/migrate/testing/mock-loader.d.ts +36 -0
  124. package/dist/migrate/testing/mock-loader.d.ts.map +1 -0
  125. package/dist/migrate/testing/mock-loader.js +81 -0
  126. package/dist/migrate/testing/mock-loader.js.map +1 -0
  127. package/dist/migrate/testing/mock-transformer.d.ts +26 -0
  128. package/dist/migrate/testing/mock-transformer.d.ts.map +1 -0
  129. package/dist/migrate/testing/mock-transformer.js +185 -0
  130. package/dist/migrate/testing/mock-transformer.js.map +1 -0
  131. package/dist/migrate/transformers/__tests__/chatgpt-to-claude.test.d.ts +5 -0
  132. package/dist/migrate/transformers/__tests__/chatgpt-to-claude.test.d.ts.map +1 -0
  133. package/dist/migrate/transformers/__tests__/chatgpt-to-claude.test.js +333 -0
  134. package/dist/migrate/transformers/__tests__/chatgpt-to-claude.test.js.map +1 -0
  135. package/dist/migrate/transformers/__tests__/claude-to-chatgpt.test.d.ts +5 -0
  136. package/dist/migrate/transformers/__tests__/claude-to-chatgpt.test.d.ts.map +1 -0
  137. package/dist/migrate/transformers/__tests__/claude-to-chatgpt.test.js +333 -0
  138. package/dist/migrate/transformers/__tests__/claude-to-chatgpt.test.js.map +1 -0
  139. package/dist/migrate/transformers/__tests__/rules.test.d.ts +5 -0
  140. package/dist/migrate/transformers/__tests__/rules.test.d.ts.map +1 -0
  141. package/dist/migrate/transformers/__tests__/rules.test.js +375 -0
  142. package/dist/migrate/transformers/__tests__/rules.test.js.map +1 -0
  143. package/dist/migrate/transformers/chatgpt-to-claude.d.ts +40 -0
  144. package/dist/migrate/transformers/chatgpt-to-claude.d.ts.map +1 -0
  145. package/dist/migrate/transformers/chatgpt-to-claude.js +443 -0
  146. package/dist/migrate/transformers/chatgpt-to-claude.js.map +1 -0
  147. package/dist/migrate/transformers/claude-to-chatgpt.d.ts +41 -0
  148. package/dist/migrate/transformers/claude-to-chatgpt.d.ts.map +1 -0
  149. package/dist/migrate/transformers/claude-to-chatgpt.js +532 -0
  150. package/dist/migrate/transformers/claude-to-chatgpt.js.map +1 -0
  151. package/dist/migrate/transformers/registry.js +6 -4
  152. package/dist/migrate/transformers/registry.js.map +1 -1
  153. package/dist/migrate/transformers/rules.d.ts +168 -0
  154. package/dist/migrate/transformers/rules.d.ts.map +1 -0
  155. package/dist/migrate/transformers/rules.js +487 -0
  156. package/dist/migrate/transformers/rules.js.map +1 -0
  157. package/dist/migrate/types.d.ts +2 -0
  158. package/dist/migrate/types.d.ts.map +1 -1
  159. package/package.json +7 -2
@@ -0,0 +1,478 @@
1
+ /**
2
+ * Performance Tests for Migration Wizard
3
+ *
4
+ * Tests memory usage, progress responsiveness, and large dataset handling.
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 { registerTransformer } from '../transformers/registry.js';
15
+ describe('Performance Tests', () => {
16
+ let testWorkDir;
17
+ beforeEach(async () => {
18
+ testWorkDir = join(tmpdir(), `savestate-perf-${Date.now()}-${Math.random().toString(36).slice(2)}`);
19
+ await mkdir(testWorkDir, { recursive: true });
20
+ });
21
+ afterEach(async () => {
22
+ if (existsSync(testWorkDir)) {
23
+ await rm(testWorkDir, { recursive: true, force: true });
24
+ }
25
+ });
26
+ describe('Memory Usage Bounds', () => {
27
+ it('should handle large conversation dataset without memory explosion', async () => {
28
+ // Create a bundle with 2000 conversations
29
+ const conversations = Array.from({ length: 2000 }, (_, i) => ({
30
+ id: `conv_${i}`,
31
+ title: `Conversation ${i}: ${generateRandomTitle()}`,
32
+ messageCount: Math.floor(Math.random() * 100) + 10,
33
+ createdAt: new Date(Date.now() - i * 86400000).toISOString(),
34
+ updatedAt: new Date(Date.now() - i * 43200000).toISOString(),
35
+ keyPoints: i % 5 === 0
36
+ ? [`Key point ${i}-1`, `Key point ${i}-2`, `Key point ${i}-3`]
37
+ : undefined,
38
+ }));
39
+ const largeBundle = {
40
+ version: '1.0',
41
+ id: 'bundle_large_memory_test',
42
+ source: {
43
+ platform: 'chatgpt',
44
+ extractedAt: new Date().toISOString(),
45
+ extractorVersion: '1.0.0',
46
+ },
47
+ contents: {
48
+ conversations: {
49
+ path: 'conversations/',
50
+ count: 2000,
51
+ messageCount: conversations.reduce((sum, c) => sum + c.messageCount, 0),
52
+ summaries: conversations,
53
+ },
54
+ },
55
+ metadata: {
56
+ totalItems: 2000,
57
+ itemCounts: {
58
+ instructions: 0,
59
+ memories: 0,
60
+ conversations: 2000,
61
+ files: 0,
62
+ customBots: 0,
63
+ },
64
+ warnings: [],
65
+ errors: [],
66
+ },
67
+ };
68
+ registerMockPlugins({
69
+ extractors: { chatgpt: { customBundle: largeBundle } },
70
+ });
71
+ registerTransformer('chatgpt', 'claude', () => new ChatGPTToClaudeTransformer());
72
+ // Get initial memory usage
73
+ const initialMemory = process.memoryUsage().heapUsed;
74
+ const orchestrator = new MigrationOrchestrator('chatgpt', 'claude', {
75
+ workDir: join(testWorkDir, 'migration-large-memory'),
76
+ });
77
+ const result = await orchestrator.run();
78
+ // Get final memory usage
79
+ const finalMemory = process.memoryUsage().heapUsed;
80
+ const memoryIncrease = finalMemory - initialMemory;
81
+ expect(result.success).toBe(true);
82
+ // Memory increase should be reasonable (< 200MB for 2000 conversations)
83
+ // This is a rough bound - actual implementation should be much lower
84
+ expect(memoryIncrease).toBeLessThan(200 * 1024 * 1024);
85
+ });
86
+ it('should handle large memory dataset efficiently', async () => {
87
+ // Create 1000 memory entries with varying content sizes
88
+ const memories = Array.from({ length: 1000 }, (_, i) => ({
89
+ id: `mem_${i}`,
90
+ content: generateVariableContent(100 + (i % 500)),
91
+ createdAt: new Date(Date.now() - i * 3600000).toISOString(),
92
+ category: ['preferences', 'facts', 'context', 'decisions', 'insights'][i % 5],
93
+ source: 'chatgpt',
94
+ }));
95
+ const bundle = {
96
+ version: '1.0',
97
+ id: 'bundle_large_memories',
98
+ source: {
99
+ platform: 'chatgpt',
100
+ extractedAt: new Date().toISOString(),
101
+ extractorVersion: '1.0.0',
102
+ },
103
+ contents: {
104
+ memories: { entries: memories, count: 1000 },
105
+ },
106
+ metadata: {
107
+ totalItems: 1000,
108
+ itemCounts: {
109
+ instructions: 0,
110
+ memories: 1000,
111
+ conversations: 0,
112
+ files: 0,
113
+ customBots: 0,
114
+ },
115
+ warnings: [],
116
+ errors: [],
117
+ },
118
+ };
119
+ registerMockPlugins({
120
+ extractors: { chatgpt: { customBundle: bundle } },
121
+ });
122
+ registerTransformer('chatgpt', 'claude', () => new ChatGPTToClaudeTransformer());
123
+ const initialMemory = process.memoryUsage().heapUsed;
124
+ const orchestrator = new MigrationOrchestrator('chatgpt', 'claude', {
125
+ workDir: join(testWorkDir, 'migration-large-memories'),
126
+ });
127
+ const result = await orchestrator.run();
128
+ const finalMemory = process.memoryUsage().heapUsed;
129
+ expect(result.success).toBe(true);
130
+ // Memory increase should be bounded
131
+ const memoryIncreaseMB = (finalMemory - initialMemory) / (1024 * 1024);
132
+ expect(memoryIncreaseMB).toBeLessThan(100);
133
+ });
134
+ });
135
+ describe('Progress Update Responsiveness', () => {
136
+ it('should emit progress updates at regular intervals', async () => {
137
+ // Use mocks with delays to simulate real processing
138
+ registerMockPlugins({
139
+ extractors: { chatgpt: { delayMs: 500 } },
140
+ transformers: { 'chatgpt->claude': { delayMs: 500 } },
141
+ loaders: { claude: { delayMs: 500 } },
142
+ });
143
+ const progressEvents = [];
144
+ const progressTimestamps = [];
145
+ const orchestrator = new MigrationOrchestrator('chatgpt', 'claude', {
146
+ workDir: join(testWorkDir, 'migration-progress-timing'),
147
+ });
148
+ orchestrator.on((event) => {
149
+ if (event.type === 'progress') {
150
+ progressEvents.push(event);
151
+ progressTimestamps.push(Date.now());
152
+ }
153
+ });
154
+ const startTime = Date.now();
155
+ await orchestrator.run();
156
+ const endTime = Date.now();
157
+ // Should have multiple progress events
158
+ expect(progressEvents.length).toBeGreaterThan(10);
159
+ // Check intervals between progress updates
160
+ if (progressTimestamps.length > 1) {
161
+ const intervals = [];
162
+ for (let i = 1; i < progressTimestamps.length; i++) {
163
+ intervals.push(progressTimestamps[i] - progressTimestamps[i - 1]);
164
+ }
165
+ // Average interval should be reasonable (< 500ms for responsive UI)
166
+ const avgInterval = intervals.reduce((a, b) => a + b, 0) / intervals.length;
167
+ expect(avgInterval).toBeLessThan(500);
168
+ }
169
+ });
170
+ it('should provide progress updates throughout all phases', async () => {
171
+ registerMockPlugins({
172
+ extractors: { chatgpt: { delayMs: 300 } },
173
+ transformers: { 'chatgpt->claude': { delayMs: 300 } },
174
+ loaders: { claude: { delayMs: 300 } },
175
+ });
176
+ const phaseProgress = new Map();
177
+ const orchestrator = new MigrationOrchestrator('chatgpt', 'claude', {
178
+ workDir: join(testWorkDir, 'migration-phase-progress'),
179
+ });
180
+ let currentPhase = 'pending';
181
+ orchestrator.on((event) => {
182
+ if (event.type === 'phase:start' && event.phase) {
183
+ currentPhase = event.phase;
184
+ phaseProgress.set(currentPhase, []);
185
+ }
186
+ if (event.type === 'progress' && event.progress !== undefined) {
187
+ const progress = phaseProgress.get(currentPhase) || [];
188
+ progress.push(event.progress);
189
+ phaseProgress.set(currentPhase, progress);
190
+ }
191
+ });
192
+ await orchestrator.run();
193
+ // Each phase should have progress updates
194
+ expect(phaseProgress.has('extracting')).toBe(true);
195
+ expect(phaseProgress.has('transforming')).toBe(true);
196
+ expect(phaseProgress.has('loading')).toBe(true);
197
+ // Progress should increase within each phase
198
+ for (const [phase, progressValues] of phaseProgress) {
199
+ if (progressValues.length > 1) {
200
+ for (let i = 1; i < progressValues.length; i++) {
201
+ expect(progressValues[i]).toBeGreaterThanOrEqual(progressValues[i - 1]);
202
+ }
203
+ }
204
+ }
205
+ });
206
+ it('should not block on progress callbacks', async () => {
207
+ registerMockPlugins({
208
+ extractors: { chatgpt: { delayMs: 100 } },
209
+ transformers: { 'chatgpt->claude': { delayMs: 100 } },
210
+ loaders: { claude: { delayMs: 100 } },
211
+ });
212
+ let slowCallbackCount = 0;
213
+ const orchestrator = new MigrationOrchestrator('chatgpt', 'claude', {
214
+ workDir: join(testWorkDir, 'migration-slow-callback'),
215
+ });
216
+ orchestrator.on(async (event) => {
217
+ if (event.type === 'progress') {
218
+ // Simulate slow callback (shouldn't block migration)
219
+ await new Promise((r) => setTimeout(r, 50));
220
+ slowCallbackCount++;
221
+ }
222
+ });
223
+ const startTime = Date.now();
224
+ const result = await orchestrator.run();
225
+ const duration = Date.now() - startTime;
226
+ expect(result.success).toBe(true);
227
+ expect(slowCallbackCount).toBeGreaterThan(0);
228
+ // Total duration should not be significantly increased by slow callbacks
229
+ // If callbacks blocked, duration would be >> 300ms + (50ms * slowCallbackCount)
230
+ // With non-blocking, it should be closer to 300ms + small overhead
231
+ expect(duration).toBeLessThan(2000);
232
+ });
233
+ });
234
+ describe('Large File Handling', () => {
235
+ it('should handle many small files efficiently', async () => {
236
+ // Create 100 small files
237
+ const files = Array.from({ length: 100 }, (_, i) => ({
238
+ id: `file_${i}`,
239
+ filename: `document_${i}.${['txt', 'md', 'json', 'yaml'][i % 4]}`,
240
+ mimeType: ['text/plain', 'text/markdown', 'application/json', 'text/yaml'][i % 4],
241
+ size: Math.floor(Math.random() * 50000) + 1000,
242
+ path: `files/document_${i}.txt`,
243
+ }));
244
+ const bundle = {
245
+ version: '1.0',
246
+ id: 'bundle_many_files',
247
+ source: {
248
+ platform: 'chatgpt',
249
+ extractedAt: new Date().toISOString(),
250
+ extractorVersion: '1.0.0',
251
+ },
252
+ contents: {
253
+ files: {
254
+ files,
255
+ count: 100,
256
+ totalSize: files.reduce((sum, f) => sum + f.size, 0),
257
+ },
258
+ },
259
+ metadata: {
260
+ totalItems: 100,
261
+ itemCounts: {
262
+ instructions: 0,
263
+ memories: 0,
264
+ conversations: 0,
265
+ files: 100,
266
+ customBots: 0,
267
+ },
268
+ warnings: [],
269
+ errors: [],
270
+ },
271
+ };
272
+ registerMockPlugins({
273
+ extractors: { chatgpt: { customBundle: bundle } },
274
+ });
275
+ registerTransformer('chatgpt', 'claude', () => new ChatGPTToClaudeTransformer());
276
+ const startTime = Date.now();
277
+ const orchestrator = new MigrationOrchestrator('chatgpt', 'claude', {
278
+ workDir: join(testWorkDir, 'migration-many-files'),
279
+ });
280
+ const result = await orchestrator.run();
281
+ const duration = Date.now() - startTime;
282
+ expect(result.success).toBe(true);
283
+ expect(result.loaded.files).toBe(100);
284
+ // Should complete in reasonable time (< 5 seconds for mock processing)
285
+ expect(duration).toBeLessThan(5000);
286
+ });
287
+ });
288
+ describe('Concurrent Migrations', () => {
289
+ it('should support multiple concurrent migrations', async () => {
290
+ registerMockPlugins({
291
+ extractors: { chatgpt: { delayMs: 100 } },
292
+ transformers: { 'chatgpt->claude': { delayMs: 100 } },
293
+ loaders: { claude: { delayMs: 100 } },
294
+ });
295
+ // Start multiple migrations concurrently
296
+ const migrations = await Promise.all([
297
+ (async () => {
298
+ const o = new MigrationOrchestrator('chatgpt', 'claude', {
299
+ workDir: join(testWorkDir, 'migration-concurrent-1'),
300
+ });
301
+ return o.run();
302
+ })(),
303
+ (async () => {
304
+ const o = new MigrationOrchestrator('chatgpt', 'claude', {
305
+ workDir: join(testWorkDir, 'migration-concurrent-2'),
306
+ });
307
+ return o.run();
308
+ })(),
309
+ (async () => {
310
+ const o = new MigrationOrchestrator('chatgpt', 'claude', {
311
+ workDir: join(testWorkDir, 'migration-concurrent-3'),
312
+ });
313
+ return o.run();
314
+ })(),
315
+ ]);
316
+ // All should succeed
317
+ expect(migrations.every((r) => r.success)).toBe(true);
318
+ });
319
+ it('should maintain isolation between concurrent migrations', async () => {
320
+ const customBundle1 = {
321
+ version: '1.0',
322
+ id: 'bundle_1',
323
+ source: {
324
+ platform: 'chatgpt',
325
+ extractedAt: new Date().toISOString(),
326
+ accountId: 'user_1',
327
+ extractorVersion: '1.0.0',
328
+ },
329
+ contents: {
330
+ instructions: { content: 'Instructions for user 1', length: 25 },
331
+ },
332
+ metadata: {
333
+ totalItems: 1,
334
+ itemCounts: {
335
+ instructions: 1,
336
+ memories: 0,
337
+ conversations: 0,
338
+ files: 0,
339
+ customBots: 0,
340
+ },
341
+ warnings: [],
342
+ errors: [],
343
+ },
344
+ };
345
+ const customBundle2 = {
346
+ version: '1.0',
347
+ id: 'bundle_2',
348
+ source: {
349
+ platform: 'chatgpt',
350
+ extractedAt: new Date().toISOString(),
351
+ accountId: 'user_2',
352
+ extractorVersion: '1.0.0',
353
+ },
354
+ contents: {
355
+ instructions: { content: 'Instructions for user 2', length: 25 },
356
+ },
357
+ metadata: {
358
+ totalItems: 1,
359
+ itemCounts: {
360
+ instructions: 1,
361
+ memories: 0,
362
+ conversations: 0,
363
+ files: 0,
364
+ customBots: 0,
365
+ },
366
+ warnings: [],
367
+ errors: [],
368
+ },
369
+ };
370
+ // Start migrations with different bundles
371
+ const orchestrator1 = new MigrationOrchestrator('chatgpt', 'claude', {
372
+ workDir: join(testWorkDir, 'migration-isolated-1'),
373
+ });
374
+ registerMockPlugins({
375
+ extractors: { chatgpt: { customBundle: customBundle1 } },
376
+ });
377
+ const result1 = await orchestrator1.run();
378
+ const orchestrator2 = new MigrationOrchestrator('chatgpt', 'claude', {
379
+ workDir: join(testWorkDir, 'migration-isolated-2'),
380
+ });
381
+ registerMockPlugins({
382
+ extractors: { chatgpt: { customBundle: customBundle2 } },
383
+ });
384
+ const result2 = await orchestrator2.run();
385
+ expect(result1.success).toBe(true);
386
+ expect(result2.success).toBe(true);
387
+ // Bundles should remain distinct
388
+ const bundle1 = orchestrator1.getBundle();
389
+ const bundle2 = orchestrator2.getBundle();
390
+ expect(bundle1?.id).not.toBe(bundle2?.id);
391
+ });
392
+ });
393
+ describe('Transformation Performance', () => {
394
+ it('should transform instructions efficiently even when long', async () => {
395
+ // Create very long instructions (100KB)
396
+ const longInstructions = Array.from({ length: 1000 }, (_, i) => `Instruction block ${i}: This is a detailed instruction about topic ${i}. `.repeat(3)).join('\n\n');
397
+ const bundle = {
398
+ version: '1.0',
399
+ id: 'bundle_long_transform',
400
+ source: {
401
+ platform: 'chatgpt',
402
+ extractedAt: new Date().toISOString(),
403
+ extractorVersion: '1.0.0',
404
+ },
405
+ contents: {
406
+ instructions: {
407
+ content: longInstructions,
408
+ length: longInstructions.length,
409
+ },
410
+ },
411
+ metadata: {
412
+ totalItems: 1,
413
+ itemCounts: {
414
+ instructions: 1,
415
+ memories: 0,
416
+ conversations: 0,
417
+ files: 0,
418
+ customBots: 0,
419
+ },
420
+ warnings: [],
421
+ errors: [],
422
+ },
423
+ };
424
+ registerMockPlugins({
425
+ extractors: { chatgpt: { customBundle: bundle } },
426
+ });
427
+ registerTransformer('chatgpt', 'claude', () => new ChatGPTToClaudeTransformer());
428
+ const startTime = Date.now();
429
+ const orchestrator = new MigrationOrchestrator('chatgpt', 'claude', {
430
+ workDir: join(testWorkDir, 'migration-transform-perf'),
431
+ });
432
+ const result = await orchestrator.run();
433
+ const transformTime = Date.now() - startTime;
434
+ expect(result.success).toBe(true);
435
+ // Transformation of 100KB should complete quickly (< 2 seconds)
436
+ expect(transformTime).toBeLessThan(2000);
437
+ });
438
+ });
439
+ });
440
+ // ─── Helper Functions ──────────────────────────────────────────
441
+ function generateRandomTitle() {
442
+ const topics = [
443
+ 'Code Review',
444
+ 'Bug Fix',
445
+ 'Feature Discussion',
446
+ 'Architecture',
447
+ 'Testing Strategy',
448
+ 'Performance Optimization',
449
+ 'Security Review',
450
+ 'API Design',
451
+ 'Database Schema',
452
+ 'Deployment Planning',
453
+ ];
454
+ const actions = [
455
+ 'Discussion',
456
+ 'Analysis',
457
+ 'Planning',
458
+ 'Review',
459
+ 'Implementation',
460
+ 'Debugging',
461
+ 'Refactoring',
462
+ ];
463
+ return `${topics[Math.floor(Math.random() * topics.length)]} ${actions[Math.floor(Math.random() * actions.length)]}`;
464
+ }
465
+ function generateVariableContent(length) {
466
+ const words = [
467
+ 'user', 'prefers', 'typescript', 'react', 'node', 'python', 'docker',
468
+ 'kubernetes', 'aws', 'gcp', 'azure', 'mongodb', 'postgresql', 'redis',
469
+ 'graphql', 'rest', 'api', 'frontend', 'backend', 'fullstack', 'devops',
470
+ 'ci', 'cd', 'testing', 'unit', 'integration', 'e2e', 'performance',
471
+ ];
472
+ let content = '';
473
+ while (content.length < length) {
474
+ content += words[Math.floor(Math.random() * words.length)] + ' ';
475
+ }
476
+ return content.substring(0, length);
477
+ }
478
+ //# sourceMappingURL=performance.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"performance.test.js","sourceRoot":"","sources":["../../../src/migrate/__tests__/performance.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Registry Tests
3
+ *
4
+ * Tests for extractor, transformer, and loader registries.
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=registry.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.test.d.ts","sourceRoot":"","sources":["../../../src/migrate/__tests__/registry.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}