@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,355 @@
1
+ /**
2
+ * Migration Orchestrator Tests
3
+ *
4
+ * Tests for the three-phase migration architecture:
5
+ * Extract → Transform → Load
6
+ */
7
+ import { describe, it, expect, beforeEach, afterEach } from 'vitest';
8
+ import { existsSync } from 'node:fs';
9
+ import { rm, readFile, mkdir } from 'node:fs/promises';
10
+ import { join } from 'node:path';
11
+ import { tmpdir } from 'node:os';
12
+ import { MigrationOrchestrator } from '../orchestrator.js';
13
+ import { registerMockPlugins } from '../testing/index.js';
14
+ describe('MigrationOrchestrator', () => {
15
+ let testWorkDir;
16
+ beforeEach(async () => {
17
+ // Create a unique temp directory for each test
18
+ testWorkDir = join(tmpdir(), `savestate-test-${Date.now()}-${Math.random().toString(36).slice(2)}`);
19
+ await mkdir(testWorkDir, { recursive: true });
20
+ // Register mock plugins
21
+ registerMockPlugins();
22
+ });
23
+ afterEach(async () => {
24
+ // Clean up test directory
25
+ if (existsSync(testWorkDir)) {
26
+ await rm(testWorkDir, { recursive: true, force: true });
27
+ }
28
+ });
29
+ describe('Basic Migration Flow', () => {
30
+ it('should complete a full migration between two mock platforms', async () => {
31
+ const orchestrator = new MigrationOrchestrator('chatgpt', 'claude', {
32
+ workDir: join(testWorkDir, 'migration-1'),
33
+ });
34
+ const result = await orchestrator.run();
35
+ expect(result.success).toBe(true);
36
+ expect(result.loaded.instructions).toBe(true);
37
+ expect(result.loaded.memories).toBeGreaterThan(0);
38
+ const state = orchestrator.getState();
39
+ expect(state.phase).toBe('complete');
40
+ expect(state.completedAt).toBeDefined();
41
+ });
42
+ it('should track progress during migration', async () => {
43
+ // Register mock plugins with delays to generate progress events
44
+ registerMockPlugins({
45
+ extractors: { chatgpt: { delayMs: 100 } },
46
+ transformers: { 'chatgpt->claude': { delayMs: 100 } },
47
+ loaders: { claude: { delayMs: 100 } },
48
+ });
49
+ const progressEvents = [];
50
+ const orchestrator = new MigrationOrchestrator('chatgpt', 'claude', {
51
+ workDir: join(testWorkDir, 'migration-2'),
52
+ });
53
+ orchestrator.on((event) => {
54
+ if (event.type === 'progress') {
55
+ progressEvents.push(event);
56
+ }
57
+ });
58
+ await orchestrator.run();
59
+ // Should have progress events from all three phases
60
+ expect(progressEvents.length).toBeGreaterThan(0);
61
+ // Progress should increase monotonically
62
+ let lastProgress = 0;
63
+ for (const event of progressEvents) {
64
+ expect(event.progress).toBeGreaterThanOrEqual(lastProgress);
65
+ lastProgress = event.progress ?? 0;
66
+ }
67
+ });
68
+ it('should emit phase events', async () => {
69
+ const phaseEvents = [];
70
+ const orchestrator = new MigrationOrchestrator('chatgpt', 'claude', {
71
+ workDir: join(testWorkDir, 'migration-3'),
72
+ });
73
+ orchestrator.on((event) => {
74
+ if (event.type.startsWith('phase:')) {
75
+ phaseEvents.push(event);
76
+ }
77
+ });
78
+ await orchestrator.run();
79
+ // Should have start and complete events for each phase
80
+ const phaseStarts = phaseEvents.filter((e) => e.type === 'phase:start');
81
+ const phaseCompletes = phaseEvents.filter((e) => e.type === 'phase:complete');
82
+ expect(phaseStarts).toHaveLength(3); // extract, transform, load
83
+ expect(phaseCompletes).toHaveLength(3);
84
+ });
85
+ });
86
+ describe('Checkpoint/Resume Capability', () => {
87
+ it('should save checkpoints after each phase', async () => {
88
+ const workDir = join(testWorkDir, 'migration-4');
89
+ const orchestrator = new MigrationOrchestrator('chatgpt', 'claude', { workDir });
90
+ await orchestrator.run();
91
+ const state = orchestrator.getState();
92
+ expect(state.checkpoints).toHaveLength(3);
93
+ expect(state.checkpoints[0].phase).toBe('extracting');
94
+ expect(state.checkpoints[1].phase).toBe('transforming');
95
+ expect(state.checkpoints[2].phase).toBe('loading');
96
+ // Verify checkpoint files exist
97
+ for (const checkpoint of state.checkpoints) {
98
+ expect(existsSync(checkpoint.dataPath)).toBe(true);
99
+ }
100
+ });
101
+ it('should persist state to disk', async () => {
102
+ const workDir = join(testWorkDir, 'migration-5');
103
+ const orchestrator = new MigrationOrchestrator('chatgpt', 'claude', { workDir });
104
+ await orchestrator.run();
105
+ // Read state from disk
106
+ const statePath = join(workDir, 'state.json');
107
+ expect(existsSync(statePath)).toBe(true);
108
+ const savedState = JSON.parse(await readFile(statePath, 'utf-8'));
109
+ expect(savedState.phase).toBe('complete');
110
+ expect(savedState.id).toBe(orchestrator.getState().id);
111
+ });
112
+ it('should resume a migration from checkpoint', async () => {
113
+ const workDir = join(testWorkDir, 'migration-6');
114
+ // Create an orchestrator and run only extract phase
115
+ const orchestrator1 = new MigrationOrchestrator('chatgpt', 'claude', { workDir });
116
+ await orchestrator1.extract();
117
+ const migrationId = orchestrator1.getState().id;
118
+ // Resume from the checkpoint
119
+ const orchestrator2 = await MigrationOrchestrator.resume(migrationId, workDir);
120
+ const result = await orchestrator2.continue();
121
+ expect(result.success).toBe(true);
122
+ expect(orchestrator2.getState().phase).toBe('complete');
123
+ });
124
+ it('should verify checkpoint integrity with checksums', async () => {
125
+ const workDir = join(testWorkDir, 'migration-7');
126
+ const orchestrator = new MigrationOrchestrator('chatgpt', 'claude', { workDir });
127
+ await orchestrator.run();
128
+ const state = orchestrator.getState();
129
+ // Each checkpoint should have a checksum
130
+ for (const checkpoint of state.checkpoints) {
131
+ expect(checkpoint.checksum).toBeDefined();
132
+ expect(checkpoint.checksum.length).toBe(64); // SHA-256 hex
133
+ }
134
+ });
135
+ });
136
+ describe('Dry Run', () => {
137
+ it('should not load data in dry run mode', async () => {
138
+ const orchestrator = new MigrationOrchestrator('chatgpt', 'claude', {
139
+ workDir: join(testWorkDir, 'migration-8'),
140
+ dryRun: true,
141
+ });
142
+ const result = await orchestrator.run();
143
+ expect(result.success).toBe(true);
144
+ expect(result.warnings).toContain('Dry run - no changes made');
145
+ });
146
+ });
147
+ describe('Error Handling', () => {
148
+ it('should handle extraction failures', async () => {
149
+ // Register a failing extractor
150
+ registerMockPlugins({
151
+ extractors: {
152
+ chatgpt: { shouldFail: true, failureMessage: 'Auth failed' },
153
+ },
154
+ });
155
+ const orchestrator = new MigrationOrchestrator('chatgpt', 'claude', {
156
+ workDir: join(testWorkDir, 'migration-9'),
157
+ });
158
+ await expect(orchestrator.run()).rejects.toThrow('Auth failed');
159
+ const state = orchestrator.getState();
160
+ expect(state.phase).toBe('failed');
161
+ expect(state.error).toBe('Auth failed');
162
+ });
163
+ it('should handle transformation failures', async () => {
164
+ registerMockPlugins({
165
+ transformers: {
166
+ 'chatgpt->claude': { shouldFail: true, failureMessage: 'Transform error' },
167
+ },
168
+ });
169
+ const orchestrator = new MigrationOrchestrator('chatgpt', 'claude', {
170
+ workDir: join(testWorkDir, 'migration-10'),
171
+ });
172
+ await expect(orchestrator.run()).rejects.toThrow('Transform error');
173
+ const state = orchestrator.getState();
174
+ expect(state.phase).toBe('failed');
175
+ });
176
+ it('should handle load failures', async () => {
177
+ registerMockPlugins({
178
+ loaders: {
179
+ claude: { shouldFail: true, failureMessage: 'Load error' },
180
+ },
181
+ });
182
+ const orchestrator = new MigrationOrchestrator('chatgpt', 'claude', {
183
+ workDir: join(testWorkDir, 'migration-11'),
184
+ });
185
+ await expect(orchestrator.run()).rejects.toThrow('Load error');
186
+ const state = orchestrator.getState();
187
+ expect(state.phase).toBe('failed');
188
+ });
189
+ it('should handle extractor auth failure', async () => {
190
+ // Register extractor that fails canExtract()
191
+ registerMockPlugins({
192
+ extractors: {
193
+ chatgpt: { canExtractResult: false },
194
+ },
195
+ });
196
+ const orchestrator = new MigrationOrchestrator('chatgpt', 'claude', {
197
+ workDir: join(testWorkDir, 'migration-12'),
198
+ });
199
+ await expect(orchestrator.run()).rejects.toThrow(/Cannot extract from chatgpt/);
200
+ });
201
+ });
202
+ describe('Rollback Support', () => {
203
+ it('should create rollback plan after successful load', async () => {
204
+ const orchestrator = new MigrationOrchestrator('chatgpt', 'claude', {
205
+ workDir: join(testWorkDir, 'migration-13'),
206
+ });
207
+ await orchestrator.run();
208
+ const plan = orchestrator.getRollbackPlan();
209
+ expect(plan).not.toBeNull();
210
+ expect(plan?.migrationId).toBe(orchestrator.getState().id);
211
+ expect(plan?.executed).toBe(false);
212
+ expect(plan?.actions.length).toBeGreaterThan(0);
213
+ });
214
+ it('should persist rollback plan to disk', async () => {
215
+ const workDir = join(testWorkDir, 'migration-14');
216
+ const orchestrator = new MigrationOrchestrator('chatgpt', 'claude', { workDir });
217
+ await orchestrator.run();
218
+ const planPath = join(workDir, 'rollback-plan.json');
219
+ expect(existsSync(planPath)).toBe(true);
220
+ });
221
+ it('should report canRollback correctly', async () => {
222
+ const orchestrator = new MigrationOrchestrator('chatgpt', 'claude', {
223
+ workDir: join(testWorkDir, 'migration-15'),
224
+ });
225
+ // Before run, no rollback available
226
+ expect(orchestrator.canRollback()).toBe(false);
227
+ await orchestrator.run();
228
+ // After successful run, rollback should be available
229
+ expect(orchestrator.canRollback()).toBe(true);
230
+ });
231
+ it('should execute rollback', async () => {
232
+ const orchestrator = new MigrationOrchestrator('chatgpt', 'claude', {
233
+ workDir: join(testWorkDir, 'migration-16'),
234
+ });
235
+ await orchestrator.run();
236
+ const rollbackResult = await orchestrator.rollback();
237
+ expect(rollbackResult.success).toBe(true);
238
+ expect(rollbackResult.succeeded.length).toBeGreaterThan(0);
239
+ // Rollback plan should be marked as executed
240
+ const plan = orchestrator.getRollbackPlan();
241
+ expect(plan?.executed).toBe(true);
242
+ expect(plan?.executedAt).toBeDefined();
243
+ });
244
+ it('should prevent double rollback', async () => {
245
+ const orchestrator = new MigrationOrchestrator('chatgpt', 'claude', {
246
+ workDir: join(testWorkDir, 'migration-17'),
247
+ });
248
+ await orchestrator.run();
249
+ await orchestrator.rollback();
250
+ // Second rollback should fail
251
+ await expect(orchestrator.rollback()).rejects.toThrow('already been executed');
252
+ });
253
+ it('should load rollback plan when resuming', async () => {
254
+ const workDir = join(testWorkDir, 'migration-18');
255
+ const orchestrator1 = new MigrationOrchestrator('chatgpt', 'claude', { workDir });
256
+ await orchestrator1.run();
257
+ const migrationId = orchestrator1.getState().id;
258
+ // Resume and check rollback plan is loaded
259
+ const orchestrator2 = await MigrationOrchestrator.resume(migrationId, workDir);
260
+ expect(orchestrator2.canRollback()).toBe(true);
261
+ });
262
+ });
263
+ describe('Analysis', () => {
264
+ it('should generate compatibility report without full migration', async () => {
265
+ const orchestrator = new MigrationOrchestrator('chatgpt', 'claude', {
266
+ workDir: join(testWorkDir, 'migration-19'),
267
+ });
268
+ const report = await orchestrator.analyze();
269
+ expect(report.source).toBe('chatgpt');
270
+ expect(report.target).toBe('claude');
271
+ expect(report.summary).toBeDefined();
272
+ expect(report.items.length).toBeGreaterThan(0);
273
+ expect(report.feasibility).toBeDefined();
274
+ });
275
+ });
276
+ describe('Bundle Management', () => {
277
+ it('should save bundle to disk', async () => {
278
+ const workDir = join(testWorkDir, 'migration-20');
279
+ const orchestrator = new MigrationOrchestrator('chatgpt', 'claude', { workDir });
280
+ await orchestrator.run();
281
+ const bundlePath = join(workDir, 'bundle.json');
282
+ expect(existsSync(bundlePath)).toBe(true);
283
+ const bundle = JSON.parse(await readFile(bundlePath, 'utf-8'));
284
+ expect(bundle.version).toBe('1.0');
285
+ expect(bundle.source.platform).toBe('chatgpt');
286
+ expect(bundle.target?.platform).toBe('claude');
287
+ });
288
+ it('should provide access to bundle via getBundle()', async () => {
289
+ const orchestrator = new MigrationOrchestrator('chatgpt', 'claude', {
290
+ workDir: join(testWorkDir, 'migration-21'),
291
+ });
292
+ // Before extract, bundle should be null
293
+ expect(orchestrator.getBundle()).toBeNull();
294
+ await orchestrator.run();
295
+ const bundle = orchestrator.getBundle();
296
+ expect(bundle).not.toBeNull();
297
+ expect(bundle?.contents.instructions).toBeDefined();
298
+ });
299
+ });
300
+ describe('Event Handlers', () => {
301
+ it('should allow unsubscribing from events', async () => {
302
+ const events = [];
303
+ const orchestrator = new MigrationOrchestrator('chatgpt', 'claude', {
304
+ workDir: join(testWorkDir, 'migration-22'),
305
+ });
306
+ const unsubscribe = orchestrator.on((event) => {
307
+ events.push(event);
308
+ });
309
+ // Unsubscribe
310
+ unsubscribe();
311
+ await orchestrator.run();
312
+ // Should not have received any events
313
+ expect(events).toHaveLength(0);
314
+ });
315
+ it('should not break on handler errors', async () => {
316
+ const orchestrator = new MigrationOrchestrator('chatgpt', 'claude', {
317
+ workDir: join(testWorkDir, 'migration-23'),
318
+ });
319
+ orchestrator.on(() => {
320
+ throw new Error('Handler error');
321
+ });
322
+ // Should complete despite handler error
323
+ const result = await orchestrator.run();
324
+ expect(result.success).toBe(true);
325
+ });
326
+ });
327
+ describe('Cleanup', () => {
328
+ it('should clean up migration artifacts', async () => {
329
+ const workDir = join(testWorkDir, 'migration-24');
330
+ const orchestrator = new MigrationOrchestrator('chatgpt', 'claude', { workDir });
331
+ await orchestrator.run();
332
+ expect(existsSync(workDir)).toBe(true);
333
+ await orchestrator.cleanup();
334
+ expect(existsSync(workDir)).toBe(false);
335
+ });
336
+ });
337
+ describe('List Migrations', () => {
338
+ it('should list all migrations in the work directory', async () => {
339
+ // Create multiple migrations
340
+ const orchestrator1 = new MigrationOrchestrator('chatgpt', 'claude', {
341
+ workDir: join(testWorkDir, 'mig_test1'),
342
+ });
343
+ await orchestrator1.run();
344
+ const orchestrator2 = new MigrationOrchestrator('claude', 'chatgpt', {
345
+ workDir: join(testWorkDir, 'mig_test2'),
346
+ });
347
+ await orchestrator2.run();
348
+ const migrations = await MigrationOrchestrator.listMigrations(testWorkDir);
349
+ expect(migrations).toHaveLength(2);
350
+ expect(migrations[0].phase).toBe('complete');
351
+ expect(migrations[1].phase).toBe('complete');
352
+ });
353
+ });
354
+ });
355
+ //# sourceMappingURL=orchestrator.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestrator.test.js","sourceRoot":"","sources":["../../../src/migrate/__tests__/orchestrator.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"}