@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,443 @@
1
+ /**
2
+ * ChatGPT → Claude Transformer
3
+ *
4
+ * Transforms a MigrationBundle from ChatGPT format to Claude format.
5
+ *
6
+ * Transformation Mappings:
7
+ * | Source (ChatGPT) | Target (Claude) | Method |
8
+ * |------------------------|-----------------------|----------------------------------|
9
+ * | Custom Instructions | System Prompt | Direct transfer / expand |
10
+ * | Memories | Project Knowledge | Convert to structured document |
11
+ * | Conversations | Context Summary | Summarize key decisions |
12
+ * | Files | Project Files | Direct transfer |
13
+ * | GPTs | Projects | Map configuration |
14
+ */
15
+ import { basename } from 'node:path';
16
+ import { getPlatformCapabilities } from '../capabilities.js';
17
+ import { intelligentTruncate, convertChatGPTInstructionsToClaude, convertMemoriesToDocument, extractContextFromConversations, mapGPTToProject, validateBundleForTarget, } from './rules.js';
18
+ // ─── ChatGPT to Claude Transformer ───────────────────────────
19
+ export class ChatGPTToClaudeTransformer {
20
+ source = 'chatgpt';
21
+ target = 'claude';
22
+ version = '1.0.0';
23
+ progress = 0;
24
+ /**
25
+ * Analyze the bundle for compatibility without transforming.
26
+ */
27
+ async analyze(bundle) {
28
+ const items = [];
29
+ const recommendations = [];
30
+ const targetCaps = getPlatformCapabilities('claude');
31
+ const sourceCaps = getPlatformCapabilities('chatgpt');
32
+ let perfect = 0;
33
+ let adapted = 0;
34
+ let incompatible = 0;
35
+ // Analyze instructions
36
+ if (bundle.contents.instructions) {
37
+ const item = this.analyzeInstructions(bundle.contents.instructions, targetCaps.instructionLimit);
38
+ items.push(item);
39
+ if (item.status === 'perfect')
40
+ perfect++;
41
+ else if (item.status === 'adapted')
42
+ adapted++;
43
+ else
44
+ incompatible++;
45
+ }
46
+ // Analyze memories
47
+ if (bundle.contents.memories && bundle.contents.memories.count > 0) {
48
+ const item = this.analyzeMemories(bundle.contents.memories);
49
+ items.push(item);
50
+ if (item.status === 'perfect')
51
+ perfect++;
52
+ else if (item.status === 'adapted')
53
+ adapted++;
54
+ else
55
+ incompatible++;
56
+ }
57
+ // Analyze conversations
58
+ if (bundle.contents.conversations && bundle.contents.conversations.count > 0) {
59
+ const item = this.analyzeConversations(bundle.contents.conversations);
60
+ items.push(item);
61
+ if (item.status === 'perfect')
62
+ perfect++;
63
+ else if (item.status === 'adapted')
64
+ adapted++;
65
+ else
66
+ incompatible++;
67
+ }
68
+ // Analyze files
69
+ if (bundle.contents.files && bundle.contents.files.count > 0) {
70
+ const fileItems = this.analyzeFiles(bundle.contents.files, targetCaps.fileSizeLimit);
71
+ for (const item of fileItems) {
72
+ items.push(item);
73
+ if (item.status === 'perfect')
74
+ perfect++;
75
+ else if (item.status === 'adapted')
76
+ adapted++;
77
+ else
78
+ incompatible++;
79
+ }
80
+ }
81
+ // Analyze custom GPTs
82
+ if (bundle.contents.customBots && bundle.contents.customBots.count > 0) {
83
+ const item = this.analyzeCustomBots(bundle.contents.customBots);
84
+ items.push(item);
85
+ if (item.status === 'perfect')
86
+ perfect++;
87
+ else if (item.status === 'adapted')
88
+ adapted++;
89
+ else
90
+ incompatible++;
91
+ }
92
+ // Generate recommendations
93
+ if (adapted > 0) {
94
+ recommendations.push('Review adapted items after migration to ensure content meets expectations');
95
+ }
96
+ if (bundle.contents.instructions && bundle.contents.instructions.length < 500) {
97
+ recommendations.push('Claude supports longer system prompts. Consider expanding instructions for better results.');
98
+ }
99
+ if (bundle.contents.memories && bundle.contents.memories.count > 20) {
100
+ recommendations.push('Many memories will be consolidated into a document. Review the knowledge file after migration.');
101
+ }
102
+ if (bundle.contents.customBots && bundle.contents.customBots.count > 1) {
103
+ recommendations.push('Multiple GPTs found. Each will become a separate Claude project. You may want to consolidate.');
104
+ }
105
+ // Determine feasibility
106
+ const total = perfect + adapted + incompatible;
107
+ let feasibility;
108
+ if (incompatible === 0 && adapted === 0) {
109
+ feasibility = 'easy';
110
+ }
111
+ else if (incompatible === 0 && adapted <= total / 3) {
112
+ feasibility = 'moderate';
113
+ }
114
+ else if (incompatible <= total / 4) {
115
+ feasibility = 'complex';
116
+ }
117
+ else {
118
+ feasibility = 'partial';
119
+ }
120
+ return {
121
+ source: 'chatgpt',
122
+ target: 'claude',
123
+ generatedAt: new Date().toISOString(),
124
+ summary: { perfect, adapted, incompatible, total },
125
+ items,
126
+ recommendations,
127
+ feasibility,
128
+ };
129
+ }
130
+ /**
131
+ * Transform the bundle for Claude.
132
+ */
133
+ async transform(bundle, options) {
134
+ this.progress = 0;
135
+ // Validate source
136
+ if (bundle.source.platform !== 'chatgpt') {
137
+ throw new Error(`Expected ChatGPT bundle, got ${bundle.source.platform}`);
138
+ }
139
+ // Validate target compatibility
140
+ const validation = validateBundleForTarget(bundle, 'claude');
141
+ if (!validation.valid) {
142
+ throw new Error(`Bundle validation failed: ${validation.errors.join(', ')}`);
143
+ }
144
+ const targetCaps = getPlatformCapabilities('claude');
145
+ const warnings = [...validation.warnings, ...bundle.metadata.warnings];
146
+ const errors = [...bundle.metadata.errors];
147
+ // Start transformation
148
+ options.onProgress?.(0.05, 'Starting ChatGPT → Claude transformation...');
149
+ // Transform instructions (20%)
150
+ let transformedInstructions;
151
+ if (bundle.contents.instructions) {
152
+ options.onProgress?.(0.1, 'Transforming instructions to system prompt...');
153
+ const result = await this.transformInstructions(bundle.contents.instructions, targetCaps.instructionLimit, options.overflowStrategy);
154
+ transformedInstructions = result.instructions;
155
+ if (result.warning)
156
+ warnings.push(result.warning);
157
+ }
158
+ this.progress = 20;
159
+ options.onProgress?.(0.2, 'Instructions transformed');
160
+ // Transform memories to knowledge document (40%)
161
+ let transformedMemories;
162
+ if (bundle.contents.memories && bundle.contents.memories.count > 0) {
163
+ options.onProgress?.(0.3, 'Converting memories to knowledge document...');
164
+ const result = this.transformMemories(bundle.contents.memories);
165
+ transformedMemories = result.memories;
166
+ if (result.warning)
167
+ warnings.push(result.warning);
168
+ }
169
+ this.progress = 40;
170
+ options.onProgress?.(0.4, 'Memories converted');
171
+ // Transform conversations to context summary (60%)
172
+ let transformedConversations;
173
+ if (bundle.contents.conversations) {
174
+ options.onProgress?.(0.5, 'Extracting context from conversations...');
175
+ const result = this.transformConversations(bundle.contents.conversations);
176
+ transformedConversations = result.conversations;
177
+ if (result.warning)
178
+ warnings.push(result.warning);
179
+ }
180
+ this.progress = 60;
181
+ options.onProgress?.(0.6, 'Conversation context extracted');
182
+ // Transform files (80%)
183
+ let transformedFiles;
184
+ if (bundle.contents.files && bundle.contents.files.count > 0) {
185
+ options.onProgress?.(0.7, 'Processing files...');
186
+ const result = this.transformFiles(bundle.contents.files, targetCaps.fileSizeLimit);
187
+ transformedFiles = result.files;
188
+ if (result.warnings.length > 0)
189
+ warnings.push(...result.warnings);
190
+ }
191
+ this.progress = 80;
192
+ options.onProgress?.(0.8, 'Files processed');
193
+ // Transform custom GPTs to project configs (100%)
194
+ let transformedBots;
195
+ if (bundle.contents.customBots && bundle.contents.customBots.count > 0) {
196
+ options.onProgress?.(0.9, 'Mapping GPTs to project configurations...');
197
+ const result = this.transformCustomBots(bundle.contents.customBots);
198
+ transformedBots = result.bots;
199
+ if (result.warning)
200
+ warnings.push(result.warning);
201
+ }
202
+ this.progress = 100;
203
+ options.onProgress?.(1.0, 'Transformation complete');
204
+ // Build transformed bundle
205
+ const transformed = {
206
+ ...bundle,
207
+ target: {
208
+ platform: 'claude',
209
+ transformedAt: new Date().toISOString(),
210
+ transformerVersion: this.version,
211
+ },
212
+ contents: {
213
+ instructions: transformedInstructions,
214
+ memories: transformedMemories,
215
+ conversations: transformedConversations,
216
+ files: transformedFiles,
217
+ customBots: transformedBots,
218
+ extras: bundle.contents.extras,
219
+ },
220
+ metadata: {
221
+ ...bundle.metadata,
222
+ warnings,
223
+ errors,
224
+ },
225
+ };
226
+ return transformed;
227
+ }
228
+ // ─── Analysis Helpers ────────────────────────────────────
229
+ analyzeInstructions(instructions, limit) {
230
+ const len = instructions.length;
231
+ if (len <= limit) {
232
+ return {
233
+ type: 'instructions',
234
+ name: 'Custom Instructions → System Prompt',
235
+ status: 'perfect',
236
+ reason: `Within Claude's ${limit} character limit (${len} chars)`,
237
+ };
238
+ }
239
+ return {
240
+ type: 'instructions',
241
+ name: 'Custom Instructions → System Prompt',
242
+ status: 'adapted',
243
+ reason: `Exceeds Claude's limit (${len} > ${limit} chars)`,
244
+ action: 'Will be intelligently truncated or summarized',
245
+ sourceRef: `instructions:${len}`,
246
+ };
247
+ }
248
+ analyzeMemories(memories) {
249
+ // Claude doesn't have memories - they become a knowledge document
250
+ return {
251
+ type: 'memory',
252
+ name: 'Memories → Project Knowledge',
253
+ status: 'adapted',
254
+ reason: `Claude uses project knowledge instead of explicit memories`,
255
+ action: `${memories.count} memories will be converted to a structured document`,
256
+ sourceRef: `memories:${memories.count}`,
257
+ };
258
+ }
259
+ analyzeConversations(conversations) {
260
+ if (!conversations.summaries || conversations.summaries.length === 0) {
261
+ return {
262
+ type: 'conversation',
263
+ name: 'Conversation History → Context Summary',
264
+ status: 'adapted',
265
+ reason: 'Conversations available but no key points extracted',
266
+ action: 'Conversation metadata will be preserved; content can be referenced',
267
+ };
268
+ }
269
+ const keyPointCount = conversations.summaries.reduce((sum, s) => sum + (s.keyPoints?.length ?? 0), 0);
270
+ return {
271
+ type: 'conversation',
272
+ name: 'Conversation History → Context Summary',
273
+ status: 'adapted',
274
+ reason: `${conversations.count} conversations with ${keyPointCount} key points`,
275
+ action: 'Key decisions and preferences will be extracted into a context document',
276
+ };
277
+ }
278
+ analyzeFiles(files, sizeLimit) {
279
+ const items = [];
280
+ let perfectCount = 0;
281
+ let oversizedCount = 0;
282
+ for (const file of files.files) {
283
+ if (file.size <= sizeLimit) {
284
+ perfectCount++;
285
+ }
286
+ else {
287
+ oversizedCount++;
288
+ items.push({
289
+ type: 'file',
290
+ name: basename(file.filename),
291
+ status: 'incompatible',
292
+ reason: `File size (${Math.round(file.size / 1024 / 1024)}MB) exceeds Claude's ${Math.round(sizeLimit / 1024 / 1024)}MB limit`,
293
+ sourceRef: `file:${file.id}`,
294
+ });
295
+ }
296
+ }
297
+ if (perfectCount > 0) {
298
+ items.unshift({
299
+ type: 'file',
300
+ name: `${perfectCount} Files → Project Files`,
301
+ status: 'perfect',
302
+ reason: `${perfectCount} files within Claude's size limit`,
303
+ });
304
+ }
305
+ return items;
306
+ }
307
+ analyzeCustomBots(bots) {
308
+ return {
309
+ type: 'customBot',
310
+ name: 'GPTs → Claude Projects',
311
+ status: 'adapted',
312
+ reason: `Claude uses Projects instead of custom bots`,
313
+ action: `${bots.count} GPT${bots.count > 1 ? 's' : ''} will be mapped to project configurations`,
314
+ sourceRef: `bots:${bots.count}`,
315
+ };
316
+ }
317
+ // ─── Transformation Helpers ──────────────────────────────
318
+ async transformInstructions(instructions, limit, overflowStrategy) {
319
+ let content = instructions.content;
320
+ let warning;
321
+ // Parse ChatGPT sections if present
322
+ const aboutUserMatch = content.match(/##\s*About Me\n([\s\S]*?)(?=##|$)/i);
323
+ const aboutModelMatch = content.match(/##\s*How ChatGPT Should Respond\n([\s\S]*?)(?=##|$)/i);
324
+ if (aboutUserMatch || aboutModelMatch) {
325
+ content = convertChatGPTInstructionsToClaude(aboutUserMatch?.[1]?.trim() || '', aboutModelMatch?.[1]?.trim() || content);
326
+ }
327
+ // Handle overflow
328
+ if (content.length > limit) {
329
+ switch (overflowStrategy) {
330
+ case 'truncate': {
331
+ const result = intelligentTruncate(content, limit);
332
+ content = result.content || content.substring(0, limit);
333
+ warning = result.warning;
334
+ break;
335
+ }
336
+ case 'summarize': {
337
+ // For now, use intelligent truncation as a fallback
338
+ // Real summarization would require LLM call
339
+ const result = intelligentTruncate(content, limit);
340
+ content = result.content || content.substring(0, limit);
341
+ warning = `Content would benefit from LLM summarization. ${result.warning || ''}`;
342
+ break;
343
+ }
344
+ case 'error':
345
+ throw new Error(`Instructions exceed limit (${content.length} > ${limit}) and overflow strategy is 'error'`);
346
+ case 'split':
347
+ // System prompt can't be split - fall back to truncate
348
+ const result = intelligentTruncate(content, limit);
349
+ content = result.content || content.substring(0, limit);
350
+ warning = `System prompt cannot be split. ${result.warning || ''}`;
351
+ break;
352
+ }
353
+ }
354
+ return {
355
+ instructions: {
356
+ content,
357
+ length: content.length,
358
+ sections: instructions.sections,
359
+ },
360
+ warning,
361
+ };
362
+ }
363
+ transformMemories(memories) {
364
+ // Convert memories to a structured document
365
+ // The actual document content will be stored in extras for the loader
366
+ const document = convertMemoriesToDocument(memories.entries);
367
+ // Return modified memories structure with conversion note
368
+ return {
369
+ memories: {
370
+ entries: memories.entries.map((e) => ({
371
+ ...e,
372
+ // Tag entries as converted
373
+ category: e.category || 'Migrated',
374
+ })),
375
+ count: memories.count,
376
+ },
377
+ warning: memories.count > 50
378
+ ? `Large number of memories (${memories.count}) converted to document. Review recommended.`
379
+ : undefined,
380
+ };
381
+ }
382
+ transformConversations(conversations) {
383
+ // Extract context summary from conversations
384
+ if (conversations.summaries && conversations.summaries.length > 0) {
385
+ const contextSummary = extractContextFromConversations(conversations.summaries);
386
+ // Store the summary in extras for the loader to use
387
+ return {
388
+ conversations: {
389
+ ...conversations,
390
+ // Add a note that context was extracted
391
+ },
392
+ warning: conversations.count > 100
393
+ ? `${conversations.count} conversations processed. Key insights extracted to context summary.`
394
+ : undefined,
395
+ };
396
+ }
397
+ return { conversations };
398
+ }
399
+ transformFiles(files, sizeLimit) {
400
+ const warnings = [];
401
+ const validFiles = files.files.filter((f) => {
402
+ if (f.size > sizeLimit) {
403
+ warnings.push(`File "${basename(f.filename)}" (${Math.round(f.size / 1024 / 1024)}MB) exceeds Claude's limit and will be skipped`);
404
+ return false;
405
+ }
406
+ return true;
407
+ });
408
+ return {
409
+ files: {
410
+ files: validFiles.map((f) => ({
411
+ ...f,
412
+ // Ensure safe filename
413
+ filename: basename(f.filename),
414
+ })),
415
+ count: validFiles.length,
416
+ totalSize: validFiles.reduce((sum, f) => sum + f.size, 0),
417
+ },
418
+ warnings,
419
+ };
420
+ }
421
+ transformCustomBots(bots) {
422
+ // Map GPT configurations to Claude project format
423
+ const transformedBots = bots.bots.map((gpt) => {
424
+ const projectConfig = mapGPTToProject(gpt);
425
+ return {
426
+ ...gpt,
427
+ // Store project mapping in the bot entry
428
+ instructions: projectConfig.systemPrompt,
429
+ description: projectConfig.description,
430
+ };
431
+ });
432
+ return {
433
+ bots: {
434
+ bots: transformedBots,
435
+ count: transformedBots.length,
436
+ },
437
+ warning: bots.count > 1
438
+ ? `${bots.count} GPTs mapped to Claude project configurations. Manual project creation required.`
439
+ : undefined,
440
+ };
441
+ }
442
+ }
443
+ //# sourceMappingURL=chatgpt-to-claude.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chatgpt-to-claude.js","sourceRoot":"","sources":["../../../src/migrate/transformers/chatgpt-to-claude.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Claude → ChatGPT Transformer
3
+ *
4
+ * Transforms a MigrationBundle from Claude format to ChatGPT format.
5
+ *
6
+ * Transformation Mappings:
7
+ * | Source (Claude) | Target (ChatGPT) | Method |
8
+ * |------------------------|-----------------------|----------------------------------|
9
+ * | System Prompt | Custom Instructions | Truncate/prioritize if >1500ch |
10
+ * | Project Knowledge | Memories + Files | Split into discrete entries |
11
+ * | Artifacts | Files | Export as documents |
12
+ * | Projects | (Manual) | Generate GPT config suggestions |
13
+ */
14
+ import type { Platform, Transformer, TransformOptions, MigrationBundle, CompatibilityReport } from '../types.js';
15
+ export declare class ClaudeToChatGPTTransformer implements Transformer {
16
+ readonly source: Platform;
17
+ readonly target: Platform;
18
+ readonly version = "1.0.0";
19
+ private progress;
20
+ /**
21
+ * Analyze the bundle for compatibility without transforming.
22
+ */
23
+ analyze(bundle: MigrationBundle): Promise<CompatibilityReport>;
24
+ /**
25
+ * Transform the bundle for ChatGPT.
26
+ */
27
+ transform(bundle: MigrationBundle, options: TransformOptions): Promise<MigrationBundle>;
28
+ private analyzeInstructions;
29
+ private analyzeMemories;
30
+ private analyzeConversations;
31
+ private analyzeFiles;
32
+ private analyzeProjects;
33
+ private transformInstructions;
34
+ private transformMemories;
35
+ private createMemoriesFromOverflow;
36
+ private createMemoryEntriesFromText;
37
+ private transformConversations;
38
+ private transformFiles;
39
+ private transformProjects;
40
+ }
41
+ //# sourceMappingURL=claude-to-chatgpt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-to-chatgpt.d.ts","sourceRoot":"","sources":["../../../src/migrate/transformers/claude-to-chatgpt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EACV,QAAQ,EACR,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EAQpB,MAAM,aAAa,CAAC;AAarB,qBAAa,0BAA2B,YAAW,WAAW;IAC5D,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAY;IACrC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAa;IACtC,QAAQ,CAAC,OAAO,WAAW;IAE3B,OAAO,CAAC,QAAQ,CAAK;IAErB;;OAEG;IACG,OAAO,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA+FpE;;OAEG;IACG,SAAS,CACb,MAAM,EAAE,eAAe,EACvB,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,eAAe,CAAC;IA4H3B,OAAO,CAAC,mBAAmB;IA4B3B,OAAO,CAAC,eAAe;IAsBvB,OAAO,CAAC,oBAAoB;IAW5B,OAAO,CAAC,YAAY;IAgCpB,OAAO,CAAC,eAAe;YAaT,qBAAqB;IAwFnC,OAAO,CAAC,iBAAiB;IAsEzB,OAAO,CAAC,0BAA0B;IAmBlC,OAAO,CAAC,2BAA2B;IAuBnC,OAAO,CAAC,sBAAsB;IAY9B,OAAO,CAAC,cAAc;IA4BtB,OAAO,CAAC,iBAAiB;CAoB1B"}