@savestate/cli 0.5.0 → 0.7.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 (95) hide show
  1. package/dist/cli.js +8 -0
  2. package/dist/cli.js.map +1 -1
  3. package/dist/mcp/server.d.ts +26 -0
  4. package/dist/mcp/server.d.ts.map +1 -0
  5. package/dist/mcp/server.js +371 -0
  6. package/dist/mcp/server.js.map +1 -0
  7. package/dist/migrate/__tests__/claude-loader.test.d.ts +7 -0
  8. package/dist/migrate/__tests__/claude-loader.test.d.ts.map +1 -0
  9. package/dist/migrate/__tests__/claude-loader.test.js +544 -0
  10. package/dist/migrate/__tests__/claude-loader.test.js.map +1 -0
  11. package/dist/migrate/__tests__/orchestrator.test.d.ts +8 -0
  12. package/dist/migrate/__tests__/orchestrator.test.d.ts.map +1 -0
  13. package/dist/migrate/__tests__/orchestrator.test.js +355 -0
  14. package/dist/migrate/__tests__/orchestrator.test.js.map +1 -0
  15. package/dist/migrate/capabilities.d.ts +23 -0
  16. package/dist/migrate/capabilities.d.ts.map +1 -0
  17. package/dist/migrate/capabilities.js +80 -0
  18. package/dist/migrate/capabilities.js.map +1 -0
  19. package/dist/migrate/extractors/__tests__/chatgpt.test.d.ts +12 -0
  20. package/dist/migrate/extractors/__tests__/chatgpt.test.d.ts.map +1 -0
  21. package/dist/migrate/extractors/__tests__/chatgpt.test.js +522 -0
  22. package/dist/migrate/extractors/__tests__/chatgpt.test.js.map +1 -0
  23. package/dist/migrate/extractors/chatgpt.d.ts +70 -0
  24. package/dist/migrate/extractors/chatgpt.d.ts.map +1 -0
  25. package/dist/migrate/extractors/chatgpt.js +791 -0
  26. package/dist/migrate/extractors/chatgpt.js.map +1 -0
  27. package/dist/migrate/extractors/registry.d.ts +24 -0
  28. package/dist/migrate/extractors/registry.d.ts.map +1 -0
  29. package/dist/migrate/extractors/registry.js +39 -0
  30. package/dist/migrate/extractors/registry.js.map +1 -0
  31. package/dist/migrate/index.d.ts +18 -0
  32. package/dist/migrate/index.d.ts.map +1 -0
  33. package/dist/migrate/index.js +26 -0
  34. package/dist/migrate/index.js.map +1 -0
  35. package/dist/migrate/loaders/claude.d.ts +61 -0
  36. package/dist/migrate/loaders/claude.d.ts.map +1 -0
  37. package/dist/migrate/loaders/claude.js +433 -0
  38. package/dist/migrate/loaders/claude.js.map +1 -0
  39. package/dist/migrate/loaders/registry.d.ts +24 -0
  40. package/dist/migrate/loaders/registry.d.ts.map +1 -0
  41. package/dist/migrate/loaders/registry.js +39 -0
  42. package/dist/migrate/loaders/registry.js.map +1 -0
  43. package/dist/migrate/orchestrator.d.ts +151 -0
  44. package/dist/migrate/orchestrator.d.ts.map +1 -0
  45. package/dist/migrate/orchestrator.js +518 -0
  46. package/dist/migrate/orchestrator.js.map +1 -0
  47. package/dist/migrate/testing/index.d.ts +28 -0
  48. package/dist/migrate/testing/index.d.ts.map +1 -0
  49. package/dist/migrate/testing/index.js +55 -0
  50. package/dist/migrate/testing/index.js.map +1 -0
  51. package/dist/migrate/testing/mock-extractor.d.ts +30 -0
  52. package/dist/migrate/testing/mock-extractor.d.ts.map +1 -0
  53. package/dist/migrate/testing/mock-extractor.js +137 -0
  54. package/dist/migrate/testing/mock-extractor.js.map +1 -0
  55. package/dist/migrate/testing/mock-loader.d.ts +36 -0
  56. package/dist/migrate/testing/mock-loader.d.ts.map +1 -0
  57. package/dist/migrate/testing/mock-loader.js +81 -0
  58. package/dist/migrate/testing/mock-loader.js.map +1 -0
  59. package/dist/migrate/testing/mock-transformer.d.ts +26 -0
  60. package/dist/migrate/testing/mock-transformer.d.ts.map +1 -0
  61. package/dist/migrate/testing/mock-transformer.js +185 -0
  62. package/dist/migrate/testing/mock-transformer.js.map +1 -0
  63. package/dist/migrate/transformers/__tests__/chatgpt-to-claude.test.d.ts +5 -0
  64. package/dist/migrate/transformers/__tests__/chatgpt-to-claude.test.d.ts.map +1 -0
  65. package/dist/migrate/transformers/__tests__/chatgpt-to-claude.test.js +333 -0
  66. package/dist/migrate/transformers/__tests__/chatgpt-to-claude.test.js.map +1 -0
  67. package/dist/migrate/transformers/__tests__/claude-to-chatgpt.test.d.ts +5 -0
  68. package/dist/migrate/transformers/__tests__/claude-to-chatgpt.test.d.ts.map +1 -0
  69. package/dist/migrate/transformers/__tests__/claude-to-chatgpt.test.js +333 -0
  70. package/dist/migrate/transformers/__tests__/claude-to-chatgpt.test.js.map +1 -0
  71. package/dist/migrate/transformers/__tests__/rules.test.d.ts +5 -0
  72. package/dist/migrate/transformers/__tests__/rules.test.d.ts.map +1 -0
  73. package/dist/migrate/transformers/__tests__/rules.test.js +375 -0
  74. package/dist/migrate/transformers/__tests__/rules.test.js.map +1 -0
  75. package/dist/migrate/transformers/chatgpt-to-claude.d.ts +40 -0
  76. package/dist/migrate/transformers/chatgpt-to-claude.d.ts.map +1 -0
  77. package/dist/migrate/transformers/chatgpt-to-claude.js +443 -0
  78. package/dist/migrate/transformers/chatgpt-to-claude.js.map +1 -0
  79. package/dist/migrate/transformers/claude-to-chatgpt.d.ts +41 -0
  80. package/dist/migrate/transformers/claude-to-chatgpt.d.ts.map +1 -0
  81. package/dist/migrate/transformers/claude-to-chatgpt.js +532 -0
  82. package/dist/migrate/transformers/claude-to-chatgpt.js.map +1 -0
  83. package/dist/migrate/transformers/registry.d.ts +27 -0
  84. package/dist/migrate/transformers/registry.d.ts.map +1 -0
  85. package/dist/migrate/transformers/registry.js +49 -0
  86. package/dist/migrate/transformers/registry.js.map +1 -0
  87. package/dist/migrate/transformers/rules.d.ts +168 -0
  88. package/dist/migrate/transformers/rules.d.ts.map +1 -0
  89. package/dist/migrate/transformers/rules.js +487 -0
  90. package/dist/migrate/transformers/rules.js.map +1 -0
  91. package/dist/migrate/types.d.ts +350 -0
  92. package/dist/migrate/types.d.ts.map +1 -0
  93. package/dist/migrate/types.js +8 -0
  94. package/dist/migrate/types.js.map +1 -0
  95. package/package.json +9 -3
@@ -0,0 +1,185 @@
1
+ /**
2
+ * Mock Transformer for Testing
3
+ *
4
+ * Simulates transforming data between platforms for testing the orchestrator.
5
+ */
6
+ import { getPlatformCapabilities } from '../capabilities.js';
7
+ export class MockTransformer {
8
+ source;
9
+ target;
10
+ version = '1.0.0-mock';
11
+ options;
12
+ constructor(source, target, options = {}) {
13
+ this.source = source;
14
+ this.target = target;
15
+ this.options = options;
16
+ }
17
+ async analyze(bundle) {
18
+ if (this.options.customReport) {
19
+ return this.options.customReport;
20
+ }
21
+ const sourceCaps = getPlatformCapabilities(this.source);
22
+ const targetCaps = getPlatformCapabilities(this.target);
23
+ const items = [];
24
+ let perfect = 0;
25
+ let adapted = 0;
26
+ let incompatible = 0;
27
+ // Analyze instructions
28
+ if (bundle.contents.instructions) {
29
+ const length = bundle.contents.instructions.length;
30
+ if (length <= targetCaps.instructionLimit) {
31
+ items.push({
32
+ type: 'instructions',
33
+ name: 'System Instructions',
34
+ status: 'perfect',
35
+ reason: `Within ${targetCaps.name}'s limit of ${targetCaps.instructionLimit} characters`,
36
+ });
37
+ perfect++;
38
+ }
39
+ else {
40
+ items.push({
41
+ type: 'instructions',
42
+ name: 'System Instructions',
43
+ status: 'adapted',
44
+ reason: `Exceeds ${targetCaps.name}'s limit (${length} > ${targetCaps.instructionLimit})`,
45
+ action: 'Will be summarized or truncated',
46
+ });
47
+ adapted++;
48
+ }
49
+ }
50
+ // Analyze memories
51
+ if (bundle.contents.memories && bundle.contents.memories.count > 0) {
52
+ if (targetCaps.hasMemory) {
53
+ const limit = targetCaps.memoryLimit ?? Infinity;
54
+ if (bundle.contents.memories.count <= limit) {
55
+ items.push({
56
+ type: 'memory',
57
+ name: 'Memory Entries',
58
+ status: 'perfect',
59
+ reason: `All ${bundle.contents.memories.count} memories can be migrated`,
60
+ });
61
+ perfect++;
62
+ }
63
+ else {
64
+ items.push({
65
+ type: 'memory',
66
+ name: 'Memory Entries',
67
+ status: 'adapted',
68
+ reason: `${bundle.contents.memories.count} memories exceeds limit of ${limit}`,
69
+ action: 'Most important memories will be selected',
70
+ });
71
+ adapted++;
72
+ }
73
+ }
74
+ else {
75
+ items.push({
76
+ type: 'memory',
77
+ name: 'Memory Entries',
78
+ status: 'adapted',
79
+ reason: `${targetCaps.name} doesn't support explicit memories`,
80
+ action: 'Will be converted to knowledge documents',
81
+ });
82
+ adapted++;
83
+ }
84
+ }
85
+ // Analyze files
86
+ if (bundle.contents.files && bundle.contents.files.count > 0) {
87
+ if (targetCaps.hasFiles) {
88
+ items.push({
89
+ type: 'file',
90
+ name: 'Uploaded Files',
91
+ status: 'perfect',
92
+ reason: `All ${bundle.contents.files.count} files can be migrated`,
93
+ });
94
+ perfect++;
95
+ }
96
+ else {
97
+ items.push({
98
+ type: 'file',
99
+ name: 'Uploaded Files',
100
+ status: 'incompatible',
101
+ reason: `${targetCaps.name} doesn't support file uploads`,
102
+ });
103
+ incompatible++;
104
+ }
105
+ }
106
+ const total = perfect + adapted + incompatible;
107
+ let feasibility;
108
+ if (incompatible === 0 && adapted === 0) {
109
+ feasibility = 'easy';
110
+ }
111
+ else if (incompatible === 0) {
112
+ feasibility = 'moderate';
113
+ }
114
+ else if (incompatible < total / 2) {
115
+ feasibility = 'complex';
116
+ }
117
+ else {
118
+ feasibility = 'partial';
119
+ }
120
+ return {
121
+ source: this.source,
122
+ target: this.target,
123
+ generatedAt: new Date().toISOString(),
124
+ summary: { perfect, adapted, incompatible, total },
125
+ items,
126
+ recommendations: adapted > 0 ? ['Review adapted items before migration'] : [],
127
+ feasibility,
128
+ };
129
+ }
130
+ async transform(bundle, options) {
131
+ // Simulate delay
132
+ if (this.options.delayMs) {
133
+ const steps = 10;
134
+ const stepDelay = this.options.delayMs / steps;
135
+ for (let i = 0; i < steps; i++) {
136
+ await new Promise((r) => setTimeout(r, stepDelay));
137
+ options.onProgress?.(((i + 1) / steps) * 100, `Transforming step ${i + 1}/${steps}`);
138
+ }
139
+ }
140
+ // Simulate failure
141
+ if (this.options.shouldFail) {
142
+ throw new Error(this.options.failureMessage ?? 'Mock transformation failed');
143
+ }
144
+ const targetCaps = getPlatformCapabilities(this.target);
145
+ // Create transformed bundle
146
+ const transformed = {
147
+ ...bundle,
148
+ target: {
149
+ platform: this.target,
150
+ transformedAt: new Date().toISOString(),
151
+ transformerVersion: this.version,
152
+ },
153
+ contents: { ...bundle.contents },
154
+ };
155
+ // Apply transformations based on target capabilities
156
+ if (transformed.contents.instructions) {
157
+ const content = transformed.contents.instructions.content;
158
+ if (content.length > targetCaps.instructionLimit) {
159
+ if (options.overflowStrategy === 'truncate') {
160
+ transformed.contents.instructions = {
161
+ ...transformed.contents.instructions,
162
+ content: content.substring(0, targetCaps.instructionLimit - 3) + '...',
163
+ length: targetCaps.instructionLimit,
164
+ };
165
+ }
166
+ else if (options.overflowStrategy === 'summarize') {
167
+ // Mock summarization - just truncate with a note
168
+ transformed.contents.instructions = {
169
+ ...transformed.contents.instructions,
170
+ content: `[Summarized for ${targetCaps.name}]\n\n` +
171
+ content.substring(0, targetCaps.instructionLimit - 50),
172
+ length: targetCaps.instructionLimit,
173
+ };
174
+ }
175
+ }
176
+ }
177
+ // Handle memories if target doesn't support them
178
+ if (!targetCaps.hasMemory && transformed.contents.memories) {
179
+ // Convert memories to knowledge format (mock)
180
+ transformed.metadata.warnings.push(`Converted ${transformed.contents.memories.count} memories to knowledge documents`);
181
+ }
182
+ return transformed;
183
+ }
184
+ }
185
+ //# sourceMappingURL=mock-transformer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock-transformer.js","sourceRoot":"","sources":["../../../src/migrate/testing/mock-transformer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Tests for ChatGPT → Claude Transformer
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=chatgpt-to-claude.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chatgpt-to-claude.test.d.ts","sourceRoot":"","sources":["../../../../src/migrate/transformers/__tests__/chatgpt-to-claude.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,333 @@
1
+ /**
2
+ * Tests for ChatGPT → Claude Transformer
3
+ */
4
+ import { describe, it, expect, vi } from 'vitest';
5
+ import { ChatGPTToClaudeTransformer } from '../chatgpt-to-claude.js';
6
+ // ─── Test Fixtures ───────────────────────────────────────────
7
+ function createChatGPTBundle(overrides = {}) {
8
+ return {
9
+ version: '1.0',
10
+ id: 'test-chatgpt-bundle',
11
+ source: {
12
+ platform: 'chatgpt',
13
+ extractedAt: '2024-01-15T10:00:00Z',
14
+ extractorVersion: '1.0.0',
15
+ },
16
+ contents: {
17
+ instructions: {
18
+ content: '## About Me\nI am a developer.\n\n## How ChatGPT Should Respond\nBe concise.',
19
+ length: 70,
20
+ },
21
+ memories: {
22
+ entries: [
23
+ { id: 'm1', content: 'User prefers TypeScript', createdAt: '2024-01-01' },
24
+ { id: 'm2', content: 'User works on web apps', createdAt: '2024-01-02' },
25
+ ],
26
+ count: 2,
27
+ },
28
+ conversations: {
29
+ path: 'conversations/',
30
+ count: 5,
31
+ messageCount: 100,
32
+ summaries: [
33
+ {
34
+ id: 'c1',
35
+ title: 'Project Planning',
36
+ messageCount: 20,
37
+ createdAt: '2024-01-10',
38
+ updatedAt: '2024-01-10',
39
+ keyPoints: ['Decided on React', 'Will use TypeScript'],
40
+ },
41
+ ],
42
+ },
43
+ files: {
44
+ files: [
45
+ {
46
+ id: 'f1',
47
+ filename: 'readme.md',
48
+ mimeType: 'text/markdown',
49
+ size: 1024,
50
+ path: 'files/readme.md',
51
+ },
52
+ ],
53
+ count: 1,
54
+ totalSize: 1024,
55
+ },
56
+ customBots: {
57
+ bots: [
58
+ {
59
+ id: 'gpt1',
60
+ name: 'Code Helper',
61
+ description: 'Helps with code',
62
+ instructions: 'You assist with coding tasks.',
63
+ capabilities: ['code_interpreter'],
64
+ createdAt: '2024-01-01',
65
+ },
66
+ ],
67
+ count: 1,
68
+ },
69
+ ...overrides,
70
+ },
71
+ metadata: {
72
+ totalItems: 10,
73
+ itemCounts: {
74
+ instructions: 1,
75
+ memories: 2,
76
+ conversations: 5,
77
+ files: 1,
78
+ customBots: 1,
79
+ },
80
+ warnings: [],
81
+ errors: [],
82
+ },
83
+ };
84
+ }
85
+ const defaultTransformOptions = {
86
+ overflowStrategy: 'truncate',
87
+ onProgress: vi.fn(),
88
+ };
89
+ // ─── Transformer Properties ──────────────────────────────────
90
+ describe('ChatGPTToClaudeTransformer', () => {
91
+ describe('properties', () => {
92
+ it('has correct source and target platforms', () => {
93
+ const transformer = new ChatGPTToClaudeTransformer();
94
+ expect(transformer.source).toBe('chatgpt');
95
+ expect(transformer.target).toBe('claude');
96
+ expect(transformer.version).toBe('1.0.0');
97
+ });
98
+ });
99
+ // ─── Analysis ────────────────────────────────────────────
100
+ describe('analyze', () => {
101
+ it('returns compatibility report for valid bundle', async () => {
102
+ const transformer = new ChatGPTToClaudeTransformer();
103
+ const bundle = createChatGPTBundle();
104
+ const report = await transformer.analyze(bundle);
105
+ expect(report.source).toBe('chatgpt');
106
+ expect(report.target).toBe('claude');
107
+ expect(report.summary.total).toBeGreaterThan(0);
108
+ expect(report.generatedAt).toBeDefined();
109
+ });
110
+ it('marks short instructions as perfect', async () => {
111
+ const transformer = new ChatGPTToClaudeTransformer();
112
+ const bundle = createChatGPTBundle({
113
+ instructions: { content: 'Short instructions', length: 20 },
114
+ });
115
+ const report = await transformer.analyze(bundle);
116
+ const instructionItem = report.items.find((i) => i.type === 'instructions');
117
+ expect(instructionItem?.status).toBe('perfect');
118
+ });
119
+ it('marks long instructions as adapted', async () => {
120
+ const transformer = new ChatGPTToClaudeTransformer();
121
+ const bundle = createChatGPTBundle({
122
+ instructions: { content: 'A'.repeat(10000), length: 10000 },
123
+ });
124
+ const report = await transformer.analyze(bundle);
125
+ const instructionItem = report.items.find((i) => i.type === 'instructions');
126
+ expect(instructionItem?.status).toBe('adapted');
127
+ });
128
+ it('marks memories as adapted (Claude uses docs)', async () => {
129
+ const transformer = new ChatGPTToClaudeTransformer();
130
+ const bundle = createChatGPTBundle();
131
+ const report = await transformer.analyze(bundle);
132
+ const memoryItem = report.items.find((i) => i.type === 'memory');
133
+ expect(memoryItem?.status).toBe('adapted');
134
+ expect(memoryItem?.action).toContain('document');
135
+ });
136
+ it('marks oversized files as incompatible', async () => {
137
+ const transformer = new ChatGPTToClaudeTransformer();
138
+ const bundle = createChatGPTBundle({
139
+ files: {
140
+ files: [
141
+ {
142
+ id: 'big',
143
+ filename: 'huge.zip',
144
+ mimeType: 'application/zip',
145
+ size: 100 * 1024 * 1024, // 100MB, over Claude's 32MB limit
146
+ path: 'files/huge.zip',
147
+ },
148
+ ],
149
+ count: 1,
150
+ totalSize: 100 * 1024 * 1024,
151
+ },
152
+ });
153
+ const report = await transformer.analyze(bundle);
154
+ const fileItem = report.items.find((i) => i.type === 'file' && i.status === 'incompatible');
155
+ expect(fileItem).toBeDefined();
156
+ expect(fileItem?.reason).toContain('exceeds');
157
+ });
158
+ it('provides helpful recommendations', async () => {
159
+ const transformer = new ChatGPTToClaudeTransformer();
160
+ const bundle = createChatGPTBundle({
161
+ instructions: { content: 'Short', length: 5 },
162
+ });
163
+ const report = await transformer.analyze(bundle);
164
+ expect(report.recommendations.some((r) => r.includes('longer system prompts'))).toBe(true);
165
+ });
166
+ it('calculates feasibility based on compatibility', async () => {
167
+ const transformer = new ChatGPTToClaudeTransformer();
168
+ // Easy case - all perfect
169
+ const easyBundle = createChatGPTBundle({
170
+ instructions: { content: 'Short', length: 5 },
171
+ memories: undefined,
172
+ customBots: undefined,
173
+ });
174
+ const easyReport = await transformer.analyze(easyBundle);
175
+ expect(['easy', 'moderate']).toContain(easyReport.feasibility);
176
+ // Complex case - lots of adaptations
177
+ const complexBundle = createChatGPTBundle({
178
+ instructions: { content: 'A'.repeat(10000), length: 10000 },
179
+ files: {
180
+ files: [
181
+ { id: '1', filename: 'huge.zip', mimeType: 'application/zip', size: 100 * 1024 * 1024, path: '' },
182
+ ],
183
+ count: 1,
184
+ totalSize: 100 * 1024 * 1024,
185
+ },
186
+ });
187
+ const complexReport = await transformer.analyze(complexBundle);
188
+ expect(['moderate', 'complex', 'partial']).toContain(complexReport.feasibility);
189
+ });
190
+ });
191
+ // ─── Transformation ──────────────────────────────────────
192
+ describe('transform', () => {
193
+ it('transforms valid ChatGPT bundle to Claude format', async () => {
194
+ const transformer = new ChatGPTToClaudeTransformer();
195
+ const bundle = createChatGPTBundle();
196
+ const result = await transformer.transform(bundle, defaultTransformOptions);
197
+ expect(result.target?.platform).toBe('claude');
198
+ expect(result.target?.transformerVersion).toBe('1.0.0');
199
+ expect(result.target?.transformedAt).toBeDefined();
200
+ });
201
+ it('rejects non-ChatGPT bundles', async () => {
202
+ const transformer = new ChatGPTToClaudeTransformer();
203
+ const bundle = createChatGPTBundle();
204
+ bundle.source.platform = 'claude';
205
+ await expect(transformer.transform(bundle, defaultTransformOptions)).rejects.toThrow('Expected ChatGPT bundle');
206
+ });
207
+ it('converts ChatGPT instructions to Claude system prompt format', async () => {
208
+ const transformer = new ChatGPTToClaudeTransformer();
209
+ const bundle = createChatGPTBundle({
210
+ instructions: {
211
+ content: '## About Me\nI am a developer.\n\n## How ChatGPT Should Respond\nBe helpful.',
212
+ length: 65,
213
+ },
214
+ });
215
+ const result = await transformer.transform(bundle, defaultTransformOptions);
216
+ expect(result.contents.instructions?.content).toContain('User Context');
217
+ expect(result.contents.instructions?.content).toContain('Response Guidelines');
218
+ });
219
+ it('truncates oversized instructions with truncate strategy', async () => {
220
+ const transformer = new ChatGPTToClaudeTransformer();
221
+ const bundle = createChatGPTBundle({
222
+ instructions: { content: 'A'.repeat(10000), length: 10000 },
223
+ });
224
+ const result = await transformer.transform(bundle, {
225
+ ...defaultTransformOptions,
226
+ overflowStrategy: 'truncate',
227
+ });
228
+ expect(result.contents.instructions.length).toBeLessThanOrEqual(8000);
229
+ expect(result.metadata.warnings.length).toBeGreaterThan(0);
230
+ });
231
+ it('throws with error strategy on overflow', async () => {
232
+ const transformer = new ChatGPTToClaudeTransformer();
233
+ const bundle = createChatGPTBundle({
234
+ instructions: { content: 'A'.repeat(10000), length: 10000 },
235
+ });
236
+ await expect(transformer.transform(bundle, {
237
+ ...defaultTransformOptions,
238
+ overflowStrategy: 'error',
239
+ })).rejects.toThrow('exceed limit');
240
+ });
241
+ it('preserves memories with category tagging', async () => {
242
+ const transformer = new ChatGPTToClaudeTransformer();
243
+ const bundle = createChatGPTBundle();
244
+ const result = await transformer.transform(bundle, defaultTransformOptions);
245
+ expect(result.contents.memories).toBeDefined();
246
+ expect(result.contents.memories.count).toBe(2);
247
+ });
248
+ it('warns about large memory counts', async () => {
249
+ const transformer = new ChatGPTToClaudeTransformer();
250
+ const bundle = createChatGPTBundle({
251
+ memories: {
252
+ entries: Array.from({ length: 60 }, (_, i) => ({
253
+ id: `m${i}`,
254
+ content: `Memory ${i}`,
255
+ createdAt: '2024-01-01',
256
+ })),
257
+ count: 60,
258
+ },
259
+ });
260
+ const result = await transformer.transform(bundle, defaultTransformOptions);
261
+ expect(result.metadata.warnings.some((w) => w.includes('Large number of memories'))).toBe(true);
262
+ });
263
+ it('filters out oversized files', async () => {
264
+ const transformer = new ChatGPTToClaudeTransformer();
265
+ const bundle = createChatGPTBundle({
266
+ files: {
267
+ files: [
268
+ { id: '1', filename: 'small.txt', mimeType: 'text/plain', size: 1024, path: 'files/small.txt' },
269
+ { id: '2', filename: 'huge.zip', mimeType: 'application/zip', size: 100 * 1024 * 1024, path: 'files/huge.zip' },
270
+ ],
271
+ count: 2,
272
+ totalSize: 100 * 1024 * 1024 + 1024,
273
+ },
274
+ });
275
+ const result = await transformer.transform(bundle, defaultTransformOptions);
276
+ expect(result.contents.files.count).toBe(1);
277
+ expect(result.contents.files.files[0].filename).toBe('small.txt');
278
+ expect(result.metadata.warnings.some((w) => w.includes('huge.zip'))).toBe(true);
279
+ });
280
+ it('maps GPTs to project configurations', async () => {
281
+ const transformer = new ChatGPTToClaudeTransformer();
282
+ const bundle = createChatGPTBundle();
283
+ const result = await transformer.transform(bundle, defaultTransformOptions);
284
+ expect(result.contents.customBots).toBeDefined();
285
+ expect(result.contents.customBots.count).toBe(1);
286
+ });
287
+ it('warns about multiple GPTs', async () => {
288
+ const transformer = new ChatGPTToClaudeTransformer();
289
+ const bundle = createChatGPTBundle({
290
+ customBots: {
291
+ bots: [
292
+ { id: '1', name: 'GPT 1', instructions: 'First', createdAt: '2024-01-01' },
293
+ { id: '2', name: 'GPT 2', instructions: 'Second', createdAt: '2024-01-01' },
294
+ ],
295
+ count: 2,
296
+ },
297
+ });
298
+ const result = await transformer.transform(bundle, defaultTransformOptions);
299
+ expect(result.metadata.warnings.some((w) => w.includes('2 GPTs'))).toBe(true);
300
+ });
301
+ it('calls progress callback during transformation', async () => {
302
+ const transformer = new ChatGPTToClaudeTransformer();
303
+ const bundle = createChatGPTBundle();
304
+ const onProgress = vi.fn();
305
+ await transformer.transform(bundle, { ...defaultTransformOptions, onProgress });
306
+ expect(onProgress).toHaveBeenCalled();
307
+ // Check that progress reaches 100%
308
+ expect(onProgress).toHaveBeenCalledWith(1.0, expect.any(String));
309
+ });
310
+ it('preserves extras from source bundle', async () => {
311
+ const transformer = new ChatGPTToClaudeTransformer();
312
+ const bundle = createChatGPTBundle();
313
+ bundle.contents.extras = { customData: 'preserved' };
314
+ const result = await transformer.transform(bundle, defaultTransformOptions);
315
+ expect(result.contents.extras?.customData).toBe('preserved');
316
+ });
317
+ it('handles empty bundle contents gracefully', async () => {
318
+ const transformer = new ChatGPTToClaudeTransformer();
319
+ const bundle = createChatGPTBundle({
320
+ instructions: undefined,
321
+ memories: undefined,
322
+ conversations: undefined,
323
+ files: undefined,
324
+ customBots: undefined,
325
+ });
326
+ const result = await transformer.transform(bundle, defaultTransformOptions);
327
+ expect(result.target?.platform).toBe('claude');
328
+ expect(result.contents.instructions).toBeUndefined();
329
+ expect(result.contents.memories).toBeUndefined();
330
+ });
331
+ });
332
+ });
333
+ //# sourceMappingURL=chatgpt-to-claude.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chatgpt-to-claude.test.js","sourceRoot":"","sources":["../../../../src/migrate/transformers/__tests__/chatgpt-to-claude.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Tests for Claude → ChatGPT Transformer
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=claude-to-chatgpt.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-to-chatgpt.test.d.ts","sourceRoot":"","sources":["../../../../src/migrate/transformers/__tests__/claude-to-chatgpt.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}