@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.
- package/dist/cli/__tests__/progress.test.d.ts +5 -0
- package/dist/cli/__tests__/progress.test.d.ts.map +1 -0
- package/dist/cli/__tests__/progress.test.js +212 -0
- package/dist/cli/__tests__/progress.test.js.map +1 -0
- package/dist/cli/__tests__/signal-handler.test.d.ts +5 -0
- package/dist/cli/__tests__/signal-handler.test.d.ts.map +1 -0
- package/dist/cli/__tests__/signal-handler.test.js +99 -0
- package/dist/cli/__tests__/signal-handler.test.js.map +1 -0
- package/dist/cli/__tests__/summary.test.d.ts +5 -0
- package/dist/cli/__tests__/summary.test.d.ts.map +1 -0
- package/dist/cli/__tests__/summary.test.js +242 -0
- package/dist/cli/__tests__/summary.test.js.map +1 -0
- package/dist/cli/index.d.ts +10 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +10 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/progress.d.ts +86 -0
- package/dist/cli/progress.d.ts.map +1 -0
- package/dist/cli/progress.js +205 -0
- package/dist/cli/progress.js.map +1 -0
- package/dist/cli/prompts.d.ts +49 -0
- package/dist/cli/prompts.d.ts.map +1 -0
- package/dist/cli/prompts.js +266 -0
- package/dist/cli/prompts.js.map +1 -0
- package/dist/cli/signal-handler.d.ts +63 -0
- package/dist/cli/signal-handler.d.ts.map +1 -0
- package/dist/cli/signal-handler.js +165 -0
- package/dist/cli/signal-handler.js.map +1 -0
- package/dist/cli/summary.d.ts +33 -0
- package/dist/cli/summary.d.ts.map +1 -0
- package/dist/cli/summary.js +296 -0
- package/dist/cli/summary.js.map +1 -0
- package/dist/cli.js +7 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/migrate.d.ts +18 -4
- package/dist/commands/migrate.d.ts.map +1 -1
- package/dist/commands/migrate.js +324 -163
- package/dist/commands/migrate.js.map +1 -1
- package/dist/migrate/__tests__/capabilities.test.d.ts +7 -0
- package/dist/migrate/__tests__/capabilities.test.d.ts.map +1 -0
- package/dist/migrate/__tests__/capabilities.test.js +90 -0
- package/dist/migrate/__tests__/capabilities.test.js.map +1 -0
- package/dist/migrate/__tests__/chatgpt-loader.test.d.ts +7 -0
- package/dist/migrate/__tests__/chatgpt-loader.test.d.ts.map +1 -0
- package/dist/migrate/__tests__/chatgpt-loader.test.js +889 -0
- package/dist/migrate/__tests__/chatgpt-loader.test.js.map +1 -0
- package/dist/migrate/__tests__/claude-loader.test.d.ts +7 -0
- package/dist/migrate/__tests__/claude-loader.test.d.ts.map +1 -0
- package/dist/migrate/__tests__/claude-loader.test.js +544 -0
- package/dist/migrate/__tests__/claude-loader.test.js.map +1 -0
- package/dist/migrate/__tests__/edge-cases.test.d.ts +7 -0
- package/dist/migrate/__tests__/edge-cases.test.d.ts.map +1 -0
- package/dist/migrate/__tests__/edge-cases.test.js +787 -0
- package/dist/migrate/__tests__/edge-cases.test.js.map +1 -0
- package/dist/migrate/__tests__/error-recovery.test.d.ts +7 -0
- package/dist/migrate/__tests__/error-recovery.test.d.ts.map +1 -0
- package/dist/migrate/__tests__/error-recovery.test.js +461 -0
- package/dist/migrate/__tests__/error-recovery.test.js.map +1 -0
- package/dist/migrate/__tests__/integration.test.d.ts +7 -0
- package/dist/migrate/__tests__/integration.test.d.ts.map +1 -0
- package/dist/migrate/__tests__/integration.test.js +536 -0
- package/dist/migrate/__tests__/integration.test.js.map +1 -0
- package/dist/migrate/__tests__/orchestrator.test.d.ts +8 -0
- package/dist/migrate/__tests__/orchestrator.test.d.ts.map +1 -0
- package/dist/migrate/__tests__/orchestrator.test.js +355 -0
- package/dist/migrate/__tests__/orchestrator.test.js.map +1 -0
- package/dist/migrate/__tests__/performance.test.d.ts +7 -0
- package/dist/migrate/__tests__/performance.test.d.ts.map +1 -0
- package/dist/migrate/__tests__/performance.test.js +478 -0
- package/dist/migrate/__tests__/performance.test.js.map +1 -0
- package/dist/migrate/__tests__/registry.test.d.ts +7 -0
- package/dist/migrate/__tests__/registry.test.d.ts.map +1 -0
- package/dist/migrate/__tests__/registry.test.js +167 -0
- package/dist/migrate/__tests__/registry.test.js.map +1 -0
- package/dist/migrate/compatibility.d.ts +47 -0
- package/dist/migrate/compatibility.d.ts.map +1 -0
- package/dist/migrate/compatibility.js +468 -0
- package/dist/migrate/compatibility.js.map +1 -0
- package/dist/migrate/extractors/__tests__/chatgpt.test.d.ts +12 -0
- package/dist/migrate/extractors/__tests__/chatgpt.test.d.ts.map +1 -0
- package/dist/migrate/extractors/__tests__/chatgpt.test.js +522 -0
- package/dist/migrate/extractors/__tests__/chatgpt.test.js.map +1 -0
- package/dist/migrate/extractors/__tests__/claude.test.d.ts +12 -0
- package/dist/migrate/extractors/__tests__/claude.test.d.ts.map +1 -0
- package/dist/migrate/extractors/__tests__/claude.test.js +789 -0
- package/dist/migrate/extractors/__tests__/claude.test.js.map +1 -0
- package/dist/migrate/extractors/chatgpt.d.ts +70 -0
- package/dist/migrate/extractors/chatgpt.d.ts.map +1 -0
- package/dist/migrate/extractors/chatgpt.js +791 -0
- package/dist/migrate/extractors/chatgpt.js.map +1 -0
- package/dist/migrate/extractors/claude.d.ts +69 -0
- package/dist/migrate/extractors/claude.d.ts.map +1 -0
- package/dist/migrate/extractors/claude.js +1136 -0
- package/dist/migrate/extractors/claude.js.map +1 -0
- package/dist/migrate/extractors/registry.js +6 -4
- package/dist/migrate/extractors/registry.js.map +1 -1
- package/dist/migrate/index.d.ts +6 -1
- package/dist/migrate/index.d.ts.map +1 -1
- package/dist/migrate/index.js +12 -1
- package/dist/migrate/index.js.map +1 -1
- package/dist/migrate/loaders/chatgpt.d.ts +72 -0
- package/dist/migrate/loaders/chatgpt.d.ts.map +1 -0
- package/dist/migrate/loaders/chatgpt.js +691 -0
- package/dist/migrate/loaders/chatgpt.js.map +1 -0
- package/dist/migrate/loaders/claude.d.ts +61 -0
- package/dist/migrate/loaders/claude.d.ts.map +1 -0
- package/dist/migrate/loaders/claude.js +433 -0
- package/dist/migrate/loaders/claude.js.map +1 -0
- package/dist/migrate/loaders/registry.js +6 -4
- package/dist/migrate/loaders/registry.js.map +1 -1
- package/dist/migrate/orchestrator.d.ts +75 -1
- package/dist/migrate/orchestrator.d.ts.map +1 -1
- package/dist/migrate/orchestrator.js +215 -19
- package/dist/migrate/orchestrator.js.map +1 -1
- package/dist/migrate/testing/index.d.ts +28 -0
- package/dist/migrate/testing/index.d.ts.map +1 -0
- package/dist/migrate/testing/index.js +55 -0
- package/dist/migrate/testing/index.js.map +1 -0
- package/dist/migrate/testing/mock-extractor.d.ts +30 -0
- package/dist/migrate/testing/mock-extractor.d.ts.map +1 -0
- package/dist/migrate/testing/mock-extractor.js +137 -0
- package/dist/migrate/testing/mock-extractor.js.map +1 -0
- package/dist/migrate/testing/mock-loader.d.ts +36 -0
- package/dist/migrate/testing/mock-loader.d.ts.map +1 -0
- package/dist/migrate/testing/mock-loader.js +81 -0
- package/dist/migrate/testing/mock-loader.js.map +1 -0
- package/dist/migrate/testing/mock-transformer.d.ts +26 -0
- package/dist/migrate/testing/mock-transformer.d.ts.map +1 -0
- package/dist/migrate/testing/mock-transformer.js +185 -0
- package/dist/migrate/testing/mock-transformer.js.map +1 -0
- package/dist/migrate/transformers/__tests__/chatgpt-to-claude.test.d.ts +5 -0
- package/dist/migrate/transformers/__tests__/chatgpt-to-claude.test.d.ts.map +1 -0
- package/dist/migrate/transformers/__tests__/chatgpt-to-claude.test.js +333 -0
- package/dist/migrate/transformers/__tests__/chatgpt-to-claude.test.js.map +1 -0
- package/dist/migrate/transformers/__tests__/claude-to-chatgpt.test.d.ts +5 -0
- package/dist/migrate/transformers/__tests__/claude-to-chatgpt.test.d.ts.map +1 -0
- package/dist/migrate/transformers/__tests__/claude-to-chatgpt.test.js +333 -0
- package/dist/migrate/transformers/__tests__/claude-to-chatgpt.test.js.map +1 -0
- package/dist/migrate/transformers/__tests__/rules.test.d.ts +5 -0
- package/dist/migrate/transformers/__tests__/rules.test.d.ts.map +1 -0
- package/dist/migrate/transformers/__tests__/rules.test.js +375 -0
- package/dist/migrate/transformers/__tests__/rules.test.js.map +1 -0
- package/dist/migrate/transformers/chatgpt-to-claude.d.ts +40 -0
- package/dist/migrate/transformers/chatgpt-to-claude.d.ts.map +1 -0
- package/dist/migrate/transformers/chatgpt-to-claude.js +443 -0
- package/dist/migrate/transformers/chatgpt-to-claude.js.map +1 -0
- package/dist/migrate/transformers/claude-to-chatgpt.d.ts +41 -0
- package/dist/migrate/transformers/claude-to-chatgpt.d.ts.map +1 -0
- package/dist/migrate/transformers/claude-to-chatgpt.js +532 -0
- package/dist/migrate/transformers/claude-to-chatgpt.js.map +1 -0
- package/dist/migrate/transformers/registry.js +6 -4
- package/dist/migrate/transformers/registry.js.map +1 -1
- package/dist/migrate/transformers/rules.d.ts +168 -0
- package/dist/migrate/transformers/rules.d.ts.map +1 -0
- package/dist/migrate/transformers/rules.js +487 -0
- package/dist/migrate/transformers/rules.js.map +1 -0
- package/dist/migrate/types.d.ts +2 -0
- package/dist/migrate/types.d.ts.map +1 -1
- 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"}
|