@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,532 @@
|
|
|
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 { basename } from 'node:path';
|
|
15
|
+
import { getPlatformCapabilities } from '../capabilities.js';
|
|
16
|
+
import { intelligentTruncate, convertClaudeInstructionsToChatGPT, splitContent, validateBundleForTarget, } from './rules.js';
|
|
17
|
+
// ─── Claude to ChatGPT Transformer ───────────────────────────
|
|
18
|
+
export class ClaudeToChatGPTTransformer {
|
|
19
|
+
source = 'claude';
|
|
20
|
+
target = 'chatgpt';
|
|
21
|
+
version = '1.0.0';
|
|
22
|
+
progress = 0;
|
|
23
|
+
/**
|
|
24
|
+
* Analyze the bundle for compatibility without transforming.
|
|
25
|
+
*/
|
|
26
|
+
async analyze(bundle) {
|
|
27
|
+
const items = [];
|
|
28
|
+
const recommendations = [];
|
|
29
|
+
const targetCaps = getPlatformCapabilities('chatgpt');
|
|
30
|
+
let perfect = 0;
|
|
31
|
+
let adapted = 0;
|
|
32
|
+
let incompatible = 0;
|
|
33
|
+
// Analyze instructions (system prompt → custom instructions)
|
|
34
|
+
if (bundle.contents.instructions) {
|
|
35
|
+
const item = this.analyzeInstructions(bundle.contents.instructions, targetCaps.instructionLimit);
|
|
36
|
+
items.push(item);
|
|
37
|
+
if (item.status === 'perfect')
|
|
38
|
+
perfect++;
|
|
39
|
+
else if (item.status === 'adapted')
|
|
40
|
+
adapted++;
|
|
41
|
+
else
|
|
42
|
+
incompatible++;
|
|
43
|
+
}
|
|
44
|
+
// Analyze memories/knowledge documents
|
|
45
|
+
if (bundle.contents.memories && bundle.contents.memories.count > 0) {
|
|
46
|
+
const item = this.analyzeMemories(bundle.contents.memories, targetCaps.memoryLimit);
|
|
47
|
+
items.push(item);
|
|
48
|
+
if (item.status === 'perfect')
|
|
49
|
+
perfect++;
|
|
50
|
+
else if (item.status === 'adapted')
|
|
51
|
+
adapted++;
|
|
52
|
+
else
|
|
53
|
+
incompatible++;
|
|
54
|
+
}
|
|
55
|
+
// Analyze conversations
|
|
56
|
+
if (bundle.contents.conversations && bundle.contents.conversations.count > 0) {
|
|
57
|
+
const item = this.analyzeConversations(bundle.contents.conversations);
|
|
58
|
+
items.push(item);
|
|
59
|
+
if (item.status === 'perfect')
|
|
60
|
+
perfect++;
|
|
61
|
+
else if (item.status === 'adapted')
|
|
62
|
+
adapted++;
|
|
63
|
+
else
|
|
64
|
+
incompatible++;
|
|
65
|
+
}
|
|
66
|
+
// Analyze files (including artifacts)
|
|
67
|
+
if (bundle.contents.files && bundle.contents.files.count > 0) {
|
|
68
|
+
const fileItems = this.analyzeFiles(bundle.contents.files, targetCaps.fileSizeLimit);
|
|
69
|
+
for (const item of fileItems) {
|
|
70
|
+
items.push(item);
|
|
71
|
+
if (item.status === 'perfect')
|
|
72
|
+
perfect++;
|
|
73
|
+
else if (item.status === 'adapted')
|
|
74
|
+
adapted++;
|
|
75
|
+
else
|
|
76
|
+
incompatible++;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
// Analyze projects (Claude doesn't have custom bots, but may have project configs)
|
|
80
|
+
if (bundle.contents.customBots && bundle.contents.customBots.count > 0) {
|
|
81
|
+
const item = this.analyzeProjects(bundle.contents.customBots);
|
|
82
|
+
items.push(item);
|
|
83
|
+
if (item.status === 'perfect')
|
|
84
|
+
perfect++;
|
|
85
|
+
else if (item.status === 'adapted')
|
|
86
|
+
adapted++;
|
|
87
|
+
else
|
|
88
|
+
incompatible++;
|
|
89
|
+
}
|
|
90
|
+
// Generate recommendations
|
|
91
|
+
if (bundle.contents.instructions && bundle.contents.instructions.length > 1500) {
|
|
92
|
+
recommendations.push('System prompt exceeds ChatGPT\'s 1500 character limit. Content will be prioritized and some may be lost.');
|
|
93
|
+
recommendations.push('Consider creating a custom GPT for longer instructions, or store additional context as memories.');
|
|
94
|
+
}
|
|
95
|
+
if (adapted > 0) {
|
|
96
|
+
recommendations.push('Review adapted items after migration to ensure content meets expectations');
|
|
97
|
+
}
|
|
98
|
+
// Determine feasibility
|
|
99
|
+
const total = perfect + adapted + incompatible;
|
|
100
|
+
let feasibility;
|
|
101
|
+
if (incompatible === 0 && adapted === 0) {
|
|
102
|
+
feasibility = 'easy';
|
|
103
|
+
}
|
|
104
|
+
else if (incompatible === 0 && adapted <= total / 3) {
|
|
105
|
+
feasibility = 'moderate';
|
|
106
|
+
}
|
|
107
|
+
else if (incompatible <= total / 4) {
|
|
108
|
+
feasibility = 'complex';
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
feasibility = 'partial';
|
|
112
|
+
}
|
|
113
|
+
return {
|
|
114
|
+
source: 'claude',
|
|
115
|
+
target: 'chatgpt',
|
|
116
|
+
generatedAt: new Date().toISOString(),
|
|
117
|
+
summary: { perfect, adapted, incompatible, total },
|
|
118
|
+
items,
|
|
119
|
+
recommendations,
|
|
120
|
+
feasibility,
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Transform the bundle for ChatGPT.
|
|
125
|
+
*/
|
|
126
|
+
async transform(bundle, options) {
|
|
127
|
+
this.progress = 0;
|
|
128
|
+
// Validate source
|
|
129
|
+
if (bundle.source.platform !== 'claude') {
|
|
130
|
+
throw new Error(`Expected Claude bundle, got ${bundle.source.platform}`);
|
|
131
|
+
}
|
|
132
|
+
// Validate target compatibility
|
|
133
|
+
const validation = validateBundleForTarget(bundle, 'chatgpt');
|
|
134
|
+
if (!validation.valid) {
|
|
135
|
+
throw new Error(`Bundle validation failed: ${validation.errors.join(', ')}`);
|
|
136
|
+
}
|
|
137
|
+
const targetCaps = getPlatformCapabilities('chatgpt');
|
|
138
|
+
const warnings = [...validation.warnings, ...bundle.metadata.warnings];
|
|
139
|
+
const errors = [...bundle.metadata.errors];
|
|
140
|
+
// Start transformation
|
|
141
|
+
options.onProgress?.(0.05, 'Starting Claude → ChatGPT transformation...');
|
|
142
|
+
// Transform instructions (system prompt → custom instructions) (25%)
|
|
143
|
+
let transformedInstructions;
|
|
144
|
+
let instructionOverflow;
|
|
145
|
+
if (bundle.contents.instructions) {
|
|
146
|
+
options.onProgress?.(0.1, 'Converting system prompt to custom instructions...');
|
|
147
|
+
const result = await this.transformInstructions(bundle.contents.instructions, targetCaps.instructionLimit, options.overflowStrategy);
|
|
148
|
+
transformedInstructions = result.instructions;
|
|
149
|
+
instructionOverflow = result.overflow;
|
|
150
|
+
if (result.warning)
|
|
151
|
+
warnings.push(result.warning);
|
|
152
|
+
}
|
|
153
|
+
this.progress = 25;
|
|
154
|
+
options.onProgress?.(0.25, 'Instructions converted');
|
|
155
|
+
// Transform memories (may need to split large documents) (50%)
|
|
156
|
+
let transformedMemories;
|
|
157
|
+
if (bundle.contents.memories && bundle.contents.memories.count > 0) {
|
|
158
|
+
options.onProgress?.(0.35, 'Converting knowledge to memories...');
|
|
159
|
+
const result = this.transformMemories(bundle.contents.memories, targetCaps.memoryLimit, instructionOverflow);
|
|
160
|
+
transformedMemories = result.memories;
|
|
161
|
+
if (result.warnings.length > 0)
|
|
162
|
+
warnings.push(...result.warnings);
|
|
163
|
+
}
|
|
164
|
+
else if (instructionOverflow) {
|
|
165
|
+
// If we have overflow from instructions but no memories, create memories for the overflow
|
|
166
|
+
options.onProgress?.(0.35, 'Creating memories for instruction overflow...');
|
|
167
|
+
const result = this.createMemoriesFromOverflow(instructionOverflow, targetCaps.memoryLimit);
|
|
168
|
+
transformedMemories = result.memories;
|
|
169
|
+
if (result.warning)
|
|
170
|
+
warnings.push(result.warning);
|
|
171
|
+
}
|
|
172
|
+
this.progress = 50;
|
|
173
|
+
options.onProgress?.(0.5, 'Memories processed');
|
|
174
|
+
// Transform conversations (limited support) (65%)
|
|
175
|
+
let transformedConversations;
|
|
176
|
+
if (bundle.contents.conversations) {
|
|
177
|
+
options.onProgress?.(0.55, 'Processing conversations...');
|
|
178
|
+
const result = this.transformConversations(bundle.contents.conversations);
|
|
179
|
+
transformedConversations = result.conversations;
|
|
180
|
+
if (result.warning)
|
|
181
|
+
warnings.push(result.warning);
|
|
182
|
+
}
|
|
183
|
+
this.progress = 65;
|
|
184
|
+
options.onProgress?.(0.65, 'Conversations processed');
|
|
185
|
+
// Transform files (including artifacts) (85%)
|
|
186
|
+
let transformedFiles;
|
|
187
|
+
if (bundle.contents.files && bundle.contents.files.count > 0) {
|
|
188
|
+
options.onProgress?.(0.75, 'Processing files and artifacts...');
|
|
189
|
+
const result = this.transformFiles(bundle.contents.files, targetCaps.fileSizeLimit);
|
|
190
|
+
transformedFiles = result.files;
|
|
191
|
+
if (result.warnings.length > 0)
|
|
192
|
+
warnings.push(...result.warnings);
|
|
193
|
+
}
|
|
194
|
+
this.progress = 85;
|
|
195
|
+
options.onProgress?.(0.85, 'Files processed');
|
|
196
|
+
// Transform projects to GPT suggestions (100%)
|
|
197
|
+
let transformedBots;
|
|
198
|
+
if (bundle.contents.customBots && bundle.contents.customBots.count > 0) {
|
|
199
|
+
options.onProgress?.(0.95, 'Generating GPT configuration suggestions...');
|
|
200
|
+
const result = this.transformProjects(bundle.contents.customBots);
|
|
201
|
+
transformedBots = result.bots;
|
|
202
|
+
if (result.warning)
|
|
203
|
+
warnings.push(result.warning);
|
|
204
|
+
}
|
|
205
|
+
this.progress = 100;
|
|
206
|
+
options.onProgress?.(1.0, 'Transformation complete');
|
|
207
|
+
// Build transformed bundle
|
|
208
|
+
const transformed = {
|
|
209
|
+
...bundle,
|
|
210
|
+
target: {
|
|
211
|
+
platform: 'chatgpt',
|
|
212
|
+
transformedAt: new Date().toISOString(),
|
|
213
|
+
transformerVersion: this.version,
|
|
214
|
+
},
|
|
215
|
+
contents: {
|
|
216
|
+
instructions: transformedInstructions,
|
|
217
|
+
memories: transformedMemories,
|
|
218
|
+
conversations: transformedConversations,
|
|
219
|
+
files: transformedFiles,
|
|
220
|
+
customBots: transformedBots,
|
|
221
|
+
extras: {
|
|
222
|
+
...bundle.contents.extras,
|
|
223
|
+
// Store instruction overflow for reference
|
|
224
|
+
instructionOverflow: instructionOverflow ? { content: instructionOverflow } : undefined,
|
|
225
|
+
},
|
|
226
|
+
},
|
|
227
|
+
metadata: {
|
|
228
|
+
...bundle.metadata,
|
|
229
|
+
warnings,
|
|
230
|
+
errors,
|
|
231
|
+
},
|
|
232
|
+
};
|
|
233
|
+
return transformed;
|
|
234
|
+
}
|
|
235
|
+
// ─── Analysis Helpers ────────────────────────────────────
|
|
236
|
+
analyzeInstructions(instructions, limit) {
|
|
237
|
+
const len = instructions.length;
|
|
238
|
+
if (len <= limit) {
|
|
239
|
+
return {
|
|
240
|
+
type: 'instructions',
|
|
241
|
+
name: 'System Prompt → Custom Instructions',
|
|
242
|
+
status: 'perfect',
|
|
243
|
+
reason: `Within ChatGPT's ${limit} character limit (${len} chars)`,
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
const overflowAmount = len - limit;
|
|
247
|
+
const overflowPercent = Math.round((overflowAmount / len) * 100);
|
|
248
|
+
return {
|
|
249
|
+
type: 'instructions',
|
|
250
|
+
name: 'System Prompt → Custom Instructions',
|
|
251
|
+
status: 'adapted',
|
|
252
|
+
reason: `Exceeds ChatGPT's limit by ${overflowAmount} chars (${overflowPercent}% overflow)`,
|
|
253
|
+
action: 'Content will be prioritized; overflow may be converted to memories',
|
|
254
|
+
sourceRef: `instructions:${len}`,
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
analyzeMemories(memories, limit) {
|
|
258
|
+
const count = memories.count;
|
|
259
|
+
if (count <= limit) {
|
|
260
|
+
return {
|
|
261
|
+
type: 'memory',
|
|
262
|
+
name: 'Project Knowledge → Memories',
|
|
263
|
+
status: 'perfect',
|
|
264
|
+
reason: `${count} entries within ChatGPT's ${limit} memory limit`,
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
return {
|
|
268
|
+
type: 'memory',
|
|
269
|
+
name: 'Project Knowledge → Memories',
|
|
270
|
+
status: 'adapted',
|
|
271
|
+
reason: `${count} entries exceed ChatGPT's ${limit} memory limit`,
|
|
272
|
+
action: `Most recent/important ${limit} memories will be kept; rest saved as files`,
|
|
273
|
+
sourceRef: `memories:${count}`,
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
analyzeConversations(conversations) {
|
|
277
|
+
return {
|
|
278
|
+
type: 'conversation',
|
|
279
|
+
name: 'Conversation History',
|
|
280
|
+
status: 'adapted',
|
|
281
|
+
reason: 'ChatGPT conversation import not supported via API',
|
|
282
|
+
action: 'Conversation history will be preserved in bundle for reference only',
|
|
283
|
+
sourceRef: `conversations:${conversations.count}`,
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
analyzeFiles(files, sizeLimit) {
|
|
287
|
+
const items = [];
|
|
288
|
+
let perfectCount = 0;
|
|
289
|
+
let oversizedCount = 0;
|
|
290
|
+
for (const file of files.files) {
|
|
291
|
+
if (file.size <= sizeLimit) {
|
|
292
|
+
perfectCount++;
|
|
293
|
+
}
|
|
294
|
+
else {
|
|
295
|
+
oversizedCount++;
|
|
296
|
+
items.push({
|
|
297
|
+
type: 'file',
|
|
298
|
+
name: basename(file.filename),
|
|
299
|
+
status: 'incompatible',
|
|
300
|
+
reason: `File size (${Math.round(file.size / 1024 / 1024)}MB) exceeds ChatGPT's ${Math.round(sizeLimit / 1024 / 1024)}MB limit`,
|
|
301
|
+
sourceRef: `file:${file.id}`,
|
|
302
|
+
});
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
if (perfectCount > 0) {
|
|
306
|
+
items.unshift({
|
|
307
|
+
type: 'file',
|
|
308
|
+
name: `${perfectCount} Files (including Artifacts)`,
|
|
309
|
+
status: 'perfect',
|
|
310
|
+
reason: `${perfectCount} files within ChatGPT's size limit`,
|
|
311
|
+
});
|
|
312
|
+
}
|
|
313
|
+
return items;
|
|
314
|
+
}
|
|
315
|
+
analyzeProjects(bots) {
|
|
316
|
+
return {
|
|
317
|
+
type: 'customBot',
|
|
318
|
+
name: 'Claude Projects → GPT Configs',
|
|
319
|
+
status: 'adapted',
|
|
320
|
+
reason: 'Custom GPTs require manual creation through ChatGPT interface',
|
|
321
|
+
action: `${bots.count} project configuration${bots.count > 1 ? 's' : ''} will be exported as GPT creation guides`,
|
|
322
|
+
sourceRef: `projects:${bots.count}`,
|
|
323
|
+
};
|
|
324
|
+
}
|
|
325
|
+
// ─── Transformation Helpers ──────────────────────────────
|
|
326
|
+
async transformInstructions(instructions, limit, overflowStrategy) {
|
|
327
|
+
const content = instructions.content;
|
|
328
|
+
// Check error strategy first
|
|
329
|
+
if (content.length > limit && overflowStrategy === 'error') {
|
|
330
|
+
throw new Error(`Instructions exceed limit (${content.length} > ${limit}) and overflow strategy is 'error'`);
|
|
331
|
+
}
|
|
332
|
+
if (content.length <= limit) {
|
|
333
|
+
// Still convert format even if within limit
|
|
334
|
+
const { aboutUser, aboutModel } = convertClaudeInstructionsToChatGPT(content, limit);
|
|
335
|
+
let finalContent;
|
|
336
|
+
if (aboutUser && aboutModel) {
|
|
337
|
+
finalContent = `## About Me\n${aboutUser}\n\n## How ChatGPT Should Respond\n${aboutModel}`;
|
|
338
|
+
}
|
|
339
|
+
else if (aboutUser) {
|
|
340
|
+
finalContent = `## About Me\n${aboutUser}`;
|
|
341
|
+
}
|
|
342
|
+
else if (aboutModel) {
|
|
343
|
+
finalContent = `## How ChatGPT Should Respond\n${aboutModel}`;
|
|
344
|
+
}
|
|
345
|
+
else {
|
|
346
|
+
finalContent = content;
|
|
347
|
+
}
|
|
348
|
+
return {
|
|
349
|
+
instructions: {
|
|
350
|
+
content: finalContent,
|
|
351
|
+
length: finalContent.length,
|
|
352
|
+
sections: instructions.sections,
|
|
353
|
+
},
|
|
354
|
+
};
|
|
355
|
+
}
|
|
356
|
+
// Convert Claude format to ChatGPT format
|
|
357
|
+
const { aboutUser, aboutModel, overflow } = convertClaudeInstructionsToChatGPT(content, limit);
|
|
358
|
+
// Combine for ChatGPT custom instructions format
|
|
359
|
+
let finalContent;
|
|
360
|
+
if (aboutUser && aboutModel) {
|
|
361
|
+
finalContent = `## About Me\n${aboutUser}\n\n## How ChatGPT Should Respond\n${aboutModel}`;
|
|
362
|
+
}
|
|
363
|
+
else if (aboutUser) {
|
|
364
|
+
finalContent = `## About Me\n${aboutUser}`;
|
|
365
|
+
}
|
|
366
|
+
else if (aboutModel) {
|
|
367
|
+
finalContent = `## How ChatGPT Should Respond\n${aboutModel}`;
|
|
368
|
+
}
|
|
369
|
+
else {
|
|
370
|
+
finalContent = content.substring(0, limit);
|
|
371
|
+
}
|
|
372
|
+
// Additional truncation if still over limit
|
|
373
|
+
if (finalContent.length > limit) {
|
|
374
|
+
switch (overflowStrategy) {
|
|
375
|
+
case 'truncate': {
|
|
376
|
+
const result = intelligentTruncate(finalContent, limit);
|
|
377
|
+
finalContent = result.content || finalContent.substring(0, limit);
|
|
378
|
+
break;
|
|
379
|
+
}
|
|
380
|
+
case 'summarize':
|
|
381
|
+
case 'split': {
|
|
382
|
+
// Can't really split system instructions, so fall back to truncate
|
|
383
|
+
const result = intelligentTruncate(finalContent, limit);
|
|
384
|
+
finalContent = result.content || finalContent.substring(0, limit);
|
|
385
|
+
break;
|
|
386
|
+
}
|
|
387
|
+
case 'error':
|
|
388
|
+
// Already handled above
|
|
389
|
+
break;
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
const warning = overflow
|
|
393
|
+
? `System prompt exceeded limit. ${overflow.length} characters stored as overflow.`
|
|
394
|
+
: undefined;
|
|
395
|
+
return {
|
|
396
|
+
instructions: {
|
|
397
|
+
content: finalContent,
|
|
398
|
+
length: finalContent.length,
|
|
399
|
+
sections: instructions.sections,
|
|
400
|
+
},
|
|
401
|
+
overflow,
|
|
402
|
+
warning,
|
|
403
|
+
};
|
|
404
|
+
}
|
|
405
|
+
transformMemories(memories, limit, instructionOverflow) {
|
|
406
|
+
const warnings = [];
|
|
407
|
+
let entries = [...memories.entries];
|
|
408
|
+
// Add instruction overflow as memories if present
|
|
409
|
+
if (instructionOverflow) {
|
|
410
|
+
const overflowMemories = this.createMemoryEntriesFromText(instructionOverflow, 'Instruction Context');
|
|
411
|
+
entries = [...overflowMemories, ...entries];
|
|
412
|
+
warnings.push(`${overflowMemories.length} memories created from instruction overflow`);
|
|
413
|
+
}
|
|
414
|
+
// Respect memory limit
|
|
415
|
+
if (entries.length > limit) {
|
|
416
|
+
// Prioritize: instruction overflow first, then most recent
|
|
417
|
+
const kept = entries.slice(0, limit);
|
|
418
|
+
const dropped = entries.length - limit;
|
|
419
|
+
warnings.push(`Memory limit exceeded. ${dropped} entries dropped (keeping ${limit} most important).`);
|
|
420
|
+
entries = kept;
|
|
421
|
+
}
|
|
422
|
+
// Ensure each entry fits within ChatGPT's per-memory limit (500 chars)
|
|
423
|
+
const perMemoryLimit = 500;
|
|
424
|
+
const processedEntries = [];
|
|
425
|
+
for (const entry of entries) {
|
|
426
|
+
if (entry.content.length <= perMemoryLimit) {
|
|
427
|
+
processedEntries.push(entry);
|
|
428
|
+
}
|
|
429
|
+
else {
|
|
430
|
+
// Split long entries
|
|
431
|
+
const chunks = splitContent(entry.content, perMemoryLimit - 50); // Leave room for context
|
|
432
|
+
for (let i = 0; i < chunks.length; i++) {
|
|
433
|
+
processedEntries.push({
|
|
434
|
+
...entry,
|
|
435
|
+
id: `${entry.id}_part${i + 1}`,
|
|
436
|
+
content: chunks.length > 1 ? `[Part ${i + 1}/${chunks.length}] ${chunks[i]}` : chunks[i],
|
|
437
|
+
});
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
// Re-check limit after splitting
|
|
442
|
+
const finalEntries = processedEntries.length > limit ? processedEntries.slice(0, limit) : processedEntries;
|
|
443
|
+
if (processedEntries.length > limit) {
|
|
444
|
+
warnings.push(`After splitting long entries, ${processedEntries.length - limit} additional entries were dropped`);
|
|
445
|
+
}
|
|
446
|
+
return {
|
|
447
|
+
memories: {
|
|
448
|
+
entries: finalEntries,
|
|
449
|
+
count: finalEntries.length,
|
|
450
|
+
},
|
|
451
|
+
warnings,
|
|
452
|
+
};
|
|
453
|
+
}
|
|
454
|
+
createMemoriesFromOverflow(overflow, limit) {
|
|
455
|
+
const entries = this.createMemoryEntriesFromText(overflow, 'System Context');
|
|
456
|
+
const finalEntries = entries.slice(0, limit);
|
|
457
|
+
return {
|
|
458
|
+
memories: {
|
|
459
|
+
entries: finalEntries,
|
|
460
|
+
count: finalEntries.length,
|
|
461
|
+
},
|
|
462
|
+
warning: entries.length > limit
|
|
463
|
+
? `${entries.length - limit} overflow memories dropped due to limit`
|
|
464
|
+
: undefined,
|
|
465
|
+
};
|
|
466
|
+
}
|
|
467
|
+
createMemoryEntriesFromText(text, category) {
|
|
468
|
+
const entries = [];
|
|
469
|
+
const timestamp = new Date().toISOString();
|
|
470
|
+
// Try to split by paragraphs first
|
|
471
|
+
const paragraphs = text.split(/\n\n+/).filter((p) => p.trim());
|
|
472
|
+
for (let i = 0; i < paragraphs.length; i++) {
|
|
473
|
+
const para = paragraphs[i].trim();
|
|
474
|
+
if (para.length > 0) {
|
|
475
|
+
entries.push({
|
|
476
|
+
id: `overflow_${i + 1}_${Date.now()}`,
|
|
477
|
+
content: para,
|
|
478
|
+
createdAt: timestamp,
|
|
479
|
+
category,
|
|
480
|
+
source: 'claude-migration',
|
|
481
|
+
});
|
|
482
|
+
}
|
|
483
|
+
}
|
|
484
|
+
return entries;
|
|
485
|
+
}
|
|
486
|
+
transformConversations(conversations) {
|
|
487
|
+
// Conversations can't be imported to ChatGPT via API
|
|
488
|
+
// Just preserve the data for reference
|
|
489
|
+
return {
|
|
490
|
+
conversations,
|
|
491
|
+
warning: 'Conversation history preserved but cannot be automatically imported to ChatGPT',
|
|
492
|
+
};
|
|
493
|
+
}
|
|
494
|
+
transformFiles(files, sizeLimit) {
|
|
495
|
+
const warnings = [];
|
|
496
|
+
const validFiles = files.files.filter((f) => {
|
|
497
|
+
if (f.size > sizeLimit) {
|
|
498
|
+
warnings.push(`File "${basename(f.filename)}" (${Math.round(f.size / 1024 / 1024)}MB) exceeds ChatGPT's limit and will be skipped`);
|
|
499
|
+
return false;
|
|
500
|
+
}
|
|
501
|
+
return true;
|
|
502
|
+
});
|
|
503
|
+
return {
|
|
504
|
+
files: {
|
|
505
|
+
files: validFiles.map((f) => ({
|
|
506
|
+
...f,
|
|
507
|
+
filename: basename(f.filename),
|
|
508
|
+
})),
|
|
509
|
+
count: validFiles.length,
|
|
510
|
+
totalSize: validFiles.reduce((sum, f) => sum + f.size, 0),
|
|
511
|
+
},
|
|
512
|
+
warnings,
|
|
513
|
+
};
|
|
514
|
+
}
|
|
515
|
+
transformProjects(bots) {
|
|
516
|
+
// Claude projects → GPT configuration suggestions
|
|
517
|
+
// The actual GPT creation must be done manually
|
|
518
|
+
const transformedBots = bots.bots.map((project) => ({
|
|
519
|
+
...project,
|
|
520
|
+
// Add note about manual creation
|
|
521
|
+
description: `[Migrate to GPT] ${project.description || project.name}\n\nInstructions:\n${project.instructions.substring(0, 500)}${project.instructions.length > 500 ? '...' : ''}`,
|
|
522
|
+
}));
|
|
523
|
+
return {
|
|
524
|
+
bots: {
|
|
525
|
+
bots: transformedBots,
|
|
526
|
+
count: transformedBots.length,
|
|
527
|
+
},
|
|
528
|
+
warning: `${bots.count} Claude project${bots.count > 1 ? 's' : ''} exported as GPT configuration guides. Manual GPT creation required.`,
|
|
529
|
+
};
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
//# sourceMappingURL=claude-to-chatgpt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-to-chatgpt.js","sourceRoot":"","sources":["../../../src/migrate/transformers/claude-to-chatgpt.ts"],"names":[],"mappings":"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"}
|
|
@@ -40,8 +40,10 @@ export function hasTransformer(source, target) {
|
|
|
40
40
|
return transformers.has(transformerKey(source, target));
|
|
41
41
|
}
|
|
42
42
|
// ─── Register Built-in Transformers ──────────────────────────
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
//
|
|
46
|
-
|
|
43
|
+
import { ChatGPTToClaudeTransformer } from './chatgpt-to-claude.js';
|
|
44
|
+
import { ClaudeToChatGPTTransformer } from './claude-to-chatgpt.js';
|
|
45
|
+
// ChatGPT → Claude transformer
|
|
46
|
+
registerTransformer('chatgpt', 'claude', () => new ChatGPTToClaudeTransformer());
|
|
47
|
+
// Claude → ChatGPT transformer
|
|
48
|
+
registerTransformer('claude', 'chatgpt', () => new ClaudeToChatGPTTransformer());
|
|
47
49
|
//# sourceMappingURL=registry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/migrate/transformers/registry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,YAAY,GAAG,IAAI,GAAG,EAA6B,CAAC;AAE1D;;GAEG;AACH,SAAS,cAAc,CAAC,MAAgB,EAAE,MAAgB;IACxD,OAAO,GAAG,MAAM,IAAI,MAAM,EAAE,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,MAAgB,EAChB,MAAgB,EAChB,OAA0B;IAE1B,YAAY,CAAC,GAAG,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;AAC5D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,MAAgB,EAAE,MAAgB;IAC/D,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACjE,OAAO,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,OAAO,CAAC,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QAC1C,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAyB,CAAC;QAChE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAC5B,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,MAAgB,EAAE,MAAgB;IAC/D,OAAO,YAAY,CAAC,GAAG,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED,gEAAgE;AAEhE,
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/migrate/transformers/registry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,YAAY,GAAG,IAAI,GAAG,EAA6B,CAAC;AAE1D;;GAEG;AACH,SAAS,cAAc,CAAC,MAAgB,EAAE,MAAgB;IACxD,OAAO,GAAG,MAAM,IAAI,MAAM,EAAE,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,MAAgB,EAChB,MAAgB,EAChB,OAA0B;IAE1B,YAAY,CAAC,GAAG,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;AAC5D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,MAAgB,EAAE,MAAgB;IAC/D,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACjE,OAAO,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,OAAO,CAAC,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QAC1C,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAyB,CAAC;QAChE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAC5B,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,MAAgB,EAAE,MAAgB;IAC/D,OAAO,YAAY,CAAC,GAAG,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED,gEAAgE;AAEhE,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AAEpE,+BAA+B;AAC/B,mBAAmB,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,0BAA0B,EAAE,CAAC,CAAC;AAEjF,+BAA+B;AAC/B,mBAAmB,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,0BAA0B,EAAE,CAAC,CAAC"}
|