@savestate/cli 0.5.0 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +8 -0
- package/dist/cli.js.map +1 -1
- package/dist/mcp/server.d.ts +26 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +371 -0
- package/dist/mcp/server.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__/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/capabilities.d.ts +23 -0
- package/dist/migrate/capabilities.d.ts.map +1 -0
- package/dist/migrate/capabilities.js +80 -0
- package/dist/migrate/capabilities.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/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/registry.d.ts +24 -0
- package/dist/migrate/extractors/registry.d.ts.map +1 -0
- package/dist/migrate/extractors/registry.js +39 -0
- package/dist/migrate/extractors/registry.js.map +1 -0
- package/dist/migrate/index.d.ts +18 -0
- package/dist/migrate/index.d.ts.map +1 -0
- package/dist/migrate/index.js +26 -0
- package/dist/migrate/index.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.d.ts +24 -0
- package/dist/migrate/loaders/registry.d.ts.map +1 -0
- package/dist/migrate/loaders/registry.js +39 -0
- package/dist/migrate/loaders/registry.js.map +1 -0
- package/dist/migrate/orchestrator.d.ts +151 -0
- package/dist/migrate/orchestrator.d.ts.map +1 -0
- package/dist/migrate/orchestrator.js +518 -0
- package/dist/migrate/orchestrator.js.map +1 -0
- 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.d.ts +27 -0
- package/dist/migrate/transformers/registry.d.ts.map +1 -0
- package/dist/migrate/transformers/registry.js +49 -0
- package/dist/migrate/transformers/registry.js.map +1 -0
- 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 +350 -0
- package/dist/migrate/types.d.ts.map +1 -0
- package/dist/migrate/types.js +8 -0
- package/dist/migrate/types.js.map +1 -0
- package/package.json +9 -3
|
@@ -0,0 +1,433 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude Loader
|
|
3
|
+
*
|
|
4
|
+
* Loads migration data into Claude Projects.
|
|
5
|
+
*
|
|
6
|
+
* Target Structure:
|
|
7
|
+
* - Claude Project with custom name
|
|
8
|
+
* - System prompt from transformed instructions
|
|
9
|
+
* - Project knowledge documents (memories, context)
|
|
10
|
+
* - Uploaded files
|
|
11
|
+
*
|
|
12
|
+
* @see https://docs.anthropic.com/claude/reference/projects
|
|
13
|
+
*/
|
|
14
|
+
import { readFile } from 'node:fs/promises';
|
|
15
|
+
import { existsSync } from 'node:fs';
|
|
16
|
+
import { basename } from 'node:path';
|
|
17
|
+
import { getPlatformCapabilities } from '../capabilities.js';
|
|
18
|
+
// ─── Rate Limiter ────────────────────────────────────────────
|
|
19
|
+
class RateLimiter {
|
|
20
|
+
requestTimes = [];
|
|
21
|
+
maxRequests;
|
|
22
|
+
windowMs;
|
|
23
|
+
constructor(maxRequests = 50, windowMs = 60_000) {
|
|
24
|
+
this.maxRequests = maxRequests;
|
|
25
|
+
this.windowMs = windowMs;
|
|
26
|
+
}
|
|
27
|
+
async acquire() {
|
|
28
|
+
const now = Date.now();
|
|
29
|
+
this.requestTimes = this.requestTimes.filter((t) => now - t < this.windowMs);
|
|
30
|
+
if (this.requestTimes.length >= this.maxRequests) {
|
|
31
|
+
const oldestRequest = this.requestTimes[0];
|
|
32
|
+
const waitTime = this.windowMs - (now - oldestRequest) + 100;
|
|
33
|
+
await this.sleep(waitTime);
|
|
34
|
+
}
|
|
35
|
+
this.requestTimes.push(Date.now());
|
|
36
|
+
}
|
|
37
|
+
sleep(ms) {
|
|
38
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
// ─── Claude API Client ───────────────────────────────────────
|
|
42
|
+
class ClaudeApiClient {
|
|
43
|
+
apiKey;
|
|
44
|
+
baseUrl;
|
|
45
|
+
maxRetries;
|
|
46
|
+
retryDelayMs;
|
|
47
|
+
rateLimiter;
|
|
48
|
+
organizationId;
|
|
49
|
+
constructor(config) {
|
|
50
|
+
this.apiKey = config.apiKey || process.env.ANTHROPIC_API_KEY || '';
|
|
51
|
+
this.baseUrl = config.baseUrl || 'https://api.anthropic.com';
|
|
52
|
+
this.maxRetries = config.maxRetries ?? 3;
|
|
53
|
+
this.retryDelayMs = config.retryDelayMs ?? 1000;
|
|
54
|
+
this.rateLimiter = new RateLimiter();
|
|
55
|
+
this.organizationId = config.organizationId;
|
|
56
|
+
}
|
|
57
|
+
hasApiKey() {
|
|
58
|
+
return !!this.apiKey;
|
|
59
|
+
}
|
|
60
|
+
async request(method, path, body, retryCount = 0) {
|
|
61
|
+
await this.rateLimiter.acquire();
|
|
62
|
+
const headers = {
|
|
63
|
+
'Content-Type': 'application/json',
|
|
64
|
+
'anthropic-version': '2024-10-01',
|
|
65
|
+
'x-api-key': this.apiKey,
|
|
66
|
+
};
|
|
67
|
+
if (this.organizationId) {
|
|
68
|
+
headers['anthropic-organization'] = this.organizationId;
|
|
69
|
+
}
|
|
70
|
+
const url = `${this.baseUrl}${path}`;
|
|
71
|
+
try {
|
|
72
|
+
const response = await fetch(url, {
|
|
73
|
+
method,
|
|
74
|
+
headers,
|
|
75
|
+
body: body ? JSON.stringify(body) : undefined,
|
|
76
|
+
});
|
|
77
|
+
if (!response.ok) {
|
|
78
|
+
const error = new Error();
|
|
79
|
+
error.status = response.status;
|
|
80
|
+
// Handle rate limiting
|
|
81
|
+
if (response.status === 429) {
|
|
82
|
+
const retryAfter = response.headers.get('retry-after');
|
|
83
|
+
error.retryAfter = retryAfter ? parseInt(retryAfter, 10) * 1000 : this.retryDelayMs;
|
|
84
|
+
error.code = 'rate_limit_exceeded';
|
|
85
|
+
error.message = 'Rate limit exceeded';
|
|
86
|
+
if (retryCount < this.maxRetries) {
|
|
87
|
+
await this.sleep(error.retryAfter);
|
|
88
|
+
return this.request(method, path, body, retryCount + 1);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
// Handle transient errors
|
|
92
|
+
if (response.status >= 500 && retryCount < this.maxRetries) {
|
|
93
|
+
await this.sleep(this.retryDelayMs * Math.pow(2, retryCount));
|
|
94
|
+
return this.request(method, path, body, retryCount + 1);
|
|
95
|
+
}
|
|
96
|
+
try {
|
|
97
|
+
const errorBody = (await response.json());
|
|
98
|
+
error.message = errorBody.error?.message || `API error: ${response.status}`;
|
|
99
|
+
error.code = errorBody.error?.type;
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
error.message = `API error: ${response.status} ${response.statusText}`;
|
|
103
|
+
}
|
|
104
|
+
throw error;
|
|
105
|
+
}
|
|
106
|
+
return response.json();
|
|
107
|
+
}
|
|
108
|
+
catch (err) {
|
|
109
|
+
// Retry on network errors
|
|
110
|
+
if (err instanceof TypeError &&
|
|
111
|
+
err.message.includes('fetch') &&
|
|
112
|
+
retryCount < this.maxRetries) {
|
|
113
|
+
await this.sleep(this.retryDelayMs * Math.pow(2, retryCount));
|
|
114
|
+
return this.request(method, path, body, retryCount + 1);
|
|
115
|
+
}
|
|
116
|
+
throw err;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
sleep(ms) {
|
|
120
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
121
|
+
}
|
|
122
|
+
// ─── Projects API ────────────────────────────────────────
|
|
123
|
+
async createProject(name, description) {
|
|
124
|
+
return this.request('POST', '/v1/projects', {
|
|
125
|
+
name,
|
|
126
|
+
description,
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
async updateProjectPrompt(projectId, systemPrompt) {
|
|
130
|
+
await this.request('PUT', `/v1/projects/${projectId}`, {
|
|
131
|
+
prompt_template: systemPrompt,
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
async createProjectDocument(projectId, name, content) {
|
|
135
|
+
return this.request('POST', `/v1/projects/${projectId}/docs`, {
|
|
136
|
+
name,
|
|
137
|
+
content,
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
async uploadProjectFile(projectId, filename, content, contentType) {
|
|
141
|
+
await this.rateLimiter.acquire();
|
|
142
|
+
const formData = new FormData();
|
|
143
|
+
formData.append('file', new Blob([content], { type: contentType }), filename);
|
|
144
|
+
const headers = {
|
|
145
|
+
'anthropic-version': '2024-10-01',
|
|
146
|
+
'x-api-key': this.apiKey,
|
|
147
|
+
};
|
|
148
|
+
if (this.organizationId) {
|
|
149
|
+
headers['anthropic-organization'] = this.organizationId;
|
|
150
|
+
}
|
|
151
|
+
const response = await fetch(`${this.baseUrl}/v1/projects/${projectId}/files`, {
|
|
152
|
+
method: 'POST',
|
|
153
|
+
headers,
|
|
154
|
+
body: formData,
|
|
155
|
+
});
|
|
156
|
+
if (!response.ok) {
|
|
157
|
+
const error = new Error();
|
|
158
|
+
error.status = response.status;
|
|
159
|
+
try {
|
|
160
|
+
const errorBody = (await response.json());
|
|
161
|
+
error.message = errorBody.error?.message || `File upload error: ${response.status}`;
|
|
162
|
+
}
|
|
163
|
+
catch {
|
|
164
|
+
error.message = `File upload error: ${response.status}`;
|
|
165
|
+
}
|
|
166
|
+
throw error;
|
|
167
|
+
}
|
|
168
|
+
return response.json();
|
|
169
|
+
}
|
|
170
|
+
async deleteProject(projectId) {
|
|
171
|
+
await this.request('DELETE', `/v1/projects/${projectId}`);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
// ─── Claude Loader ───────────────────────────────────────────
|
|
175
|
+
export class ClaudeLoader {
|
|
176
|
+
platform = 'claude';
|
|
177
|
+
version = '1.0.0';
|
|
178
|
+
progress = 0;
|
|
179
|
+
config;
|
|
180
|
+
client;
|
|
181
|
+
state = {
|
|
182
|
+
instructionsLoaded: false,
|
|
183
|
+
uploadedFileIds: [],
|
|
184
|
+
uploadedFilenames: [],
|
|
185
|
+
lastFileIndex: -1,
|
|
186
|
+
};
|
|
187
|
+
constructor(config = {}) {
|
|
188
|
+
this.config = config;
|
|
189
|
+
this.client = new ClaudeApiClient(config);
|
|
190
|
+
}
|
|
191
|
+
async canLoad() {
|
|
192
|
+
return this.client.hasApiKey();
|
|
193
|
+
}
|
|
194
|
+
async load(bundle, options) {
|
|
195
|
+
this.progress = 0;
|
|
196
|
+
const warnings = [];
|
|
197
|
+
const errors = [];
|
|
198
|
+
const capabilities = getPlatformCapabilities('claude');
|
|
199
|
+
// Validate bundle target
|
|
200
|
+
if (bundle.target?.platform !== 'claude') {
|
|
201
|
+
throw new Error('Bundle not transformed for Claude');
|
|
202
|
+
}
|
|
203
|
+
// Check for dry run
|
|
204
|
+
if (options.dryRun) {
|
|
205
|
+
return this.dryRunResult(bundle, warnings);
|
|
206
|
+
}
|
|
207
|
+
try {
|
|
208
|
+
// Step 1: Create Project (10%)
|
|
209
|
+
options.onProgress?.(0.05, 'Creating Claude project...');
|
|
210
|
+
const projectName = options.projectName || `Migrated from ${bundle.source.platform} (${new Date().toISOString().split('T')[0]})`;
|
|
211
|
+
const project = await this.client.createProject(projectName, `Migration from ${bundle.source.platform} via SaveState`);
|
|
212
|
+
this.state.projectId = project.id;
|
|
213
|
+
this.progress = 10;
|
|
214
|
+
options.onProgress?.(0.1, `Created project: ${projectName}`);
|
|
215
|
+
// Step 2: Set System Prompt (20%)
|
|
216
|
+
let instructionsLoaded = false;
|
|
217
|
+
if (bundle.contents.instructions?.content) {
|
|
218
|
+
options.onProgress?.(0.15, 'Setting system prompt...');
|
|
219
|
+
const instructionContent = bundle.contents.instructions.content;
|
|
220
|
+
// Check length limit
|
|
221
|
+
if (instructionContent.length > capabilities.instructionLimit) {
|
|
222
|
+
warnings.push(`Instructions truncated: ${instructionContent.length} > ${capabilities.instructionLimit} chars`);
|
|
223
|
+
}
|
|
224
|
+
const truncatedInstructions = instructionContent.slice(0, capabilities.instructionLimit);
|
|
225
|
+
await this.client.updateProjectPrompt(project.id, truncatedInstructions);
|
|
226
|
+
this.state.instructionsLoaded = true;
|
|
227
|
+
instructionsLoaded = true;
|
|
228
|
+
}
|
|
229
|
+
this.progress = 20;
|
|
230
|
+
options.onProgress?.(0.2, 'System prompt configured');
|
|
231
|
+
// Step 3: Upload Knowledge Documents (40%)
|
|
232
|
+
let memoriesLoaded = 0;
|
|
233
|
+
if (bundle.contents.memories?.entries && bundle.contents.memories.entries.length > 0) {
|
|
234
|
+
options.onProgress?.(0.25, 'Creating memories document...');
|
|
235
|
+
const memoriesContent = this.formatMemoriesAsMarkdown(bundle.contents.memories.entries);
|
|
236
|
+
const memoriesDoc = await this.client.createProjectDocument(project.id, 'memories.md', memoriesContent);
|
|
237
|
+
this.state.memoriesDocId = memoriesDoc.id;
|
|
238
|
+
memoriesLoaded = bundle.contents.memories.entries.length;
|
|
239
|
+
}
|
|
240
|
+
// Create context summary if available
|
|
241
|
+
if (bundle.contents.conversations?.summaries && bundle.contents.conversations.summaries.length > 0) {
|
|
242
|
+
options.onProgress?.(0.35, 'Creating context summary...');
|
|
243
|
+
const contextContent = this.formatContextSummary(bundle.contents.conversations.summaries);
|
|
244
|
+
const contextDoc = await this.client.createProjectDocument(project.id, 'context-summary.md', contextContent);
|
|
245
|
+
this.state.contextDocId = contextDoc.id;
|
|
246
|
+
}
|
|
247
|
+
this.progress = 40;
|
|
248
|
+
options.onProgress?.(0.4, 'Knowledge documents uploaded');
|
|
249
|
+
// Step 4: Upload Files (40-90%)
|
|
250
|
+
let filesLoaded = 0;
|
|
251
|
+
if (bundle.contents.files?.files && bundle.contents.files.files.length > 0) {
|
|
252
|
+
const files = bundle.contents.files.files;
|
|
253
|
+
const startIndex = this.state.lastFileIndex + 1;
|
|
254
|
+
for (let i = startIndex; i < files.length; i++) {
|
|
255
|
+
const file = files[i];
|
|
256
|
+
const fileProgress = 0.4 + (0.5 * (i + 1)) / files.length;
|
|
257
|
+
options.onProgress?.(fileProgress, `Uploading file ${i + 1}/${files.length}: ${file.filename}`);
|
|
258
|
+
try {
|
|
259
|
+
const uploadResult = await this.uploadFile(project.id, file, bundle, capabilities.fileSizeLimit);
|
|
260
|
+
if (uploadResult.success) {
|
|
261
|
+
this.state.uploadedFileIds.push(uploadResult.fileId);
|
|
262
|
+
this.state.uploadedFilenames.push(file.filename);
|
|
263
|
+
this.state.lastFileIndex = i;
|
|
264
|
+
filesLoaded++;
|
|
265
|
+
}
|
|
266
|
+
else if (uploadResult.warning) {
|
|
267
|
+
warnings.push(uploadResult.warning);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
catch (err) {
|
|
271
|
+
const errorMsg = err instanceof Error ? err.message : String(err);
|
|
272
|
+
errors.push(`Failed to upload ${file.filename}: ${errorMsg}`);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
this.progress = 90;
|
|
277
|
+
// Step 5: Finalize (100%)
|
|
278
|
+
options.onProgress?.(0.95, 'Finalizing migration...');
|
|
279
|
+
this.progress = 100;
|
|
280
|
+
options.onProgress?.(1.0, 'Migration complete');
|
|
281
|
+
const manualSteps = [];
|
|
282
|
+
if (bundle.contents.customBots && bundle.contents.customBots.count > 0) {
|
|
283
|
+
manualSteps.push(`${bundle.contents.customBots.count} custom bots/GPTs were found but cannot be automatically migrated. You may want to recreate them manually.`);
|
|
284
|
+
}
|
|
285
|
+
return {
|
|
286
|
+
success: true,
|
|
287
|
+
loaded: {
|
|
288
|
+
instructions: instructionsLoaded,
|
|
289
|
+
memories: memoriesLoaded,
|
|
290
|
+
files: filesLoaded,
|
|
291
|
+
customBots: 0, // Claude doesn't have custom bots
|
|
292
|
+
},
|
|
293
|
+
created: {
|
|
294
|
+
projectId: project.id,
|
|
295
|
+
projectUrl: `https://claude.ai/project/${project.id}`,
|
|
296
|
+
},
|
|
297
|
+
warnings,
|
|
298
|
+
errors,
|
|
299
|
+
manualSteps: manualSteps.length > 0 ? manualSteps : undefined,
|
|
300
|
+
};
|
|
301
|
+
}
|
|
302
|
+
catch (err) {
|
|
303
|
+
// Attempt partial recovery info
|
|
304
|
+
const errorMsg = err instanceof Error ? err.message : String(err);
|
|
305
|
+
errors.push(`Load failed: ${errorMsg}`);
|
|
306
|
+
return {
|
|
307
|
+
success: false,
|
|
308
|
+
loaded: {
|
|
309
|
+
instructions: this.state.instructionsLoaded,
|
|
310
|
+
memories: this.state.memoriesDocId ? 1 : 0,
|
|
311
|
+
files: this.state.uploadedFileIds.length,
|
|
312
|
+
customBots: 0,
|
|
313
|
+
},
|
|
314
|
+
created: this.state.projectId
|
|
315
|
+
? {
|
|
316
|
+
projectId: this.state.projectId,
|
|
317
|
+
projectUrl: `https://claude.ai/project/${this.state.projectId}`,
|
|
318
|
+
}
|
|
319
|
+
: undefined,
|
|
320
|
+
warnings,
|
|
321
|
+
errors,
|
|
322
|
+
};
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
getProgress() {
|
|
326
|
+
return this.progress;
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* Get current load state for checkpointing.
|
|
330
|
+
*/
|
|
331
|
+
getLoadState() {
|
|
332
|
+
return { ...this.state };
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* Set load state for resume.
|
|
336
|
+
*/
|
|
337
|
+
setLoadState(state) {
|
|
338
|
+
this.state = { ...state };
|
|
339
|
+
}
|
|
340
|
+
// ─── Private Helpers ─────────────────────────────────────
|
|
341
|
+
formatMemoriesAsMarkdown(entries) {
|
|
342
|
+
const lines = [
|
|
343
|
+
'# Migrated Memories',
|
|
344
|
+
'',
|
|
345
|
+
`> These memories were migrated from your previous AI assistant.`,
|
|
346
|
+
`> Total: ${entries.length} memories`,
|
|
347
|
+
'',
|
|
348
|
+
];
|
|
349
|
+
// Group by category if available
|
|
350
|
+
const byCategory = new Map();
|
|
351
|
+
for (const entry of entries) {
|
|
352
|
+
const category = entry.category || 'General';
|
|
353
|
+
if (!byCategory.has(category)) {
|
|
354
|
+
byCategory.set(category, []);
|
|
355
|
+
}
|
|
356
|
+
byCategory.get(category).push(entry);
|
|
357
|
+
}
|
|
358
|
+
for (const [category, items] of byCategory) {
|
|
359
|
+
lines.push(`## ${category}`, '');
|
|
360
|
+
for (const item of items) {
|
|
361
|
+
lines.push(`- ${item.content}`);
|
|
362
|
+
}
|
|
363
|
+
lines.push('');
|
|
364
|
+
}
|
|
365
|
+
return lines.join('\n');
|
|
366
|
+
}
|
|
367
|
+
formatContextSummary(summaries) {
|
|
368
|
+
const lines = [
|
|
369
|
+
'# Conversation Context Summary',
|
|
370
|
+
'',
|
|
371
|
+
`> Key insights extracted from ${summaries.length} conversations.`,
|
|
372
|
+
'',
|
|
373
|
+
];
|
|
374
|
+
for (const summary of summaries) {
|
|
375
|
+
if (summary.keyPoints && summary.keyPoints.length > 0) {
|
|
376
|
+
lines.push(`## ${summary.title}`, '');
|
|
377
|
+
for (const point of summary.keyPoints) {
|
|
378
|
+
lines.push(`- ${point}`);
|
|
379
|
+
}
|
|
380
|
+
lines.push('');
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
return lines.join('\n');
|
|
384
|
+
}
|
|
385
|
+
async uploadFile(projectId, file, bundle, sizeLimit) {
|
|
386
|
+
// Check file size
|
|
387
|
+
if (file.size > sizeLimit) {
|
|
388
|
+
return {
|
|
389
|
+
success: false,
|
|
390
|
+
warning: `File ${file.filename} exceeds size limit (${file.size} > ${sizeLimit} bytes)`,
|
|
391
|
+
};
|
|
392
|
+
}
|
|
393
|
+
// Read file content
|
|
394
|
+
const filePath = file.path;
|
|
395
|
+
if (!existsSync(filePath)) {
|
|
396
|
+
return {
|
|
397
|
+
success: false,
|
|
398
|
+
warning: `File not found: ${filePath}`,
|
|
399
|
+
};
|
|
400
|
+
}
|
|
401
|
+
const content = await readFile(filePath);
|
|
402
|
+
const result = await this.client.uploadProjectFile(projectId, basename(file.filename), content, file.mimeType);
|
|
403
|
+
return { success: true, fileId: result.id };
|
|
404
|
+
}
|
|
405
|
+
dryRunResult(bundle, warnings) {
|
|
406
|
+
const capabilities = getPlatformCapabilities('claude');
|
|
407
|
+
// Check for potential issues
|
|
408
|
+
if (bundle.contents.instructions?.content &&
|
|
409
|
+
bundle.contents.instructions.content.length > capabilities.instructionLimit) {
|
|
410
|
+
warnings.push(`Instructions would be truncated: ${bundle.contents.instructions.content.length} > ${capabilities.instructionLimit} chars`);
|
|
411
|
+
}
|
|
412
|
+
if (bundle.contents.files?.files) {
|
|
413
|
+
for (const file of bundle.contents.files.files) {
|
|
414
|
+
if (file.size > capabilities.fileSizeLimit) {
|
|
415
|
+
warnings.push(`File ${file.filename} exceeds size limit`);
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
warnings.push('Dry run - no changes made');
|
|
420
|
+
return {
|
|
421
|
+
success: true,
|
|
422
|
+
loaded: {
|
|
423
|
+
instructions: !!bundle.contents.instructions,
|
|
424
|
+
memories: bundle.contents.memories?.count ?? 0,
|
|
425
|
+
files: bundle.contents.files?.count ?? 0,
|
|
426
|
+
customBots: 0,
|
|
427
|
+
},
|
|
428
|
+
warnings,
|
|
429
|
+
errors: [],
|
|
430
|
+
};
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
//# sourceMappingURL=claude.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../../src/migrate/loaders/claude.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Loader Registry
|
|
3
|
+
*
|
|
4
|
+
* Manages available loaders for different platforms.
|
|
5
|
+
* New loaders are registered here.
|
|
6
|
+
*/
|
|
7
|
+
import type { Platform, Loader } from '../types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Register a loader for a platform.
|
|
10
|
+
*/
|
|
11
|
+
export declare function registerLoader(platform: Platform, factory: () => Loader): void;
|
|
12
|
+
/**
|
|
13
|
+
* Get a loader for a platform.
|
|
14
|
+
*/
|
|
15
|
+
export declare function getLoader(platform: Platform): Loader | null;
|
|
16
|
+
/**
|
|
17
|
+
* List all registered loaders.
|
|
18
|
+
*/
|
|
19
|
+
export declare function listLoaders(): Platform[];
|
|
20
|
+
/**
|
|
21
|
+
* Check if a loader exists for a platform.
|
|
22
|
+
*/
|
|
23
|
+
export declare function hasLoader(platform: Platform): boolean;
|
|
24
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/migrate/loaders/registry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAIpD;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,MAAM,GAAG,IAAI,CAE9E;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,GAAG,IAAI,CAG3D;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,QAAQ,EAAE,CAExC;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAErD"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Loader Registry
|
|
3
|
+
*
|
|
4
|
+
* Manages available loaders for different platforms.
|
|
5
|
+
* New loaders are registered here.
|
|
6
|
+
*/
|
|
7
|
+
const loaders = new Map();
|
|
8
|
+
/**
|
|
9
|
+
* Register a loader for a platform.
|
|
10
|
+
*/
|
|
11
|
+
export function registerLoader(platform, factory) {
|
|
12
|
+
loaders.set(platform, factory);
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Get a loader for a platform.
|
|
16
|
+
*/
|
|
17
|
+
export function getLoader(platform) {
|
|
18
|
+
const factory = loaders.get(platform);
|
|
19
|
+
return factory ? factory() : null;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* List all registered loaders.
|
|
23
|
+
*/
|
|
24
|
+
export function listLoaders() {
|
|
25
|
+
return [...loaders.keys()];
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Check if a loader exists for a platform.
|
|
29
|
+
*/
|
|
30
|
+
export function hasLoader(platform) {
|
|
31
|
+
return loaders.has(platform);
|
|
32
|
+
}
|
|
33
|
+
// ─── Register Built-in Loaders ───────────────────────────────
|
|
34
|
+
import { ClaudeLoader } from './claude.js';
|
|
35
|
+
// Claude loader (#25)
|
|
36
|
+
registerLoader('claude', () => new ClaudeLoader());
|
|
37
|
+
// ChatGPT loader will be registered in #30
|
|
38
|
+
// registerLoader('chatgpt', () => new ChatGPTLoader());
|
|
39
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/migrate/loaders/registry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,OAAO,GAAG,IAAI,GAAG,EAA0B,CAAC;AAElD;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,QAAkB,EAAE,OAAqB;IACtE,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,QAAkB;IAC1C,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACtC,OAAO,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW;IACzB,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,QAAkB;IAC1C,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC/B,CAAC;AAED,gEAAgE;AAEhE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,sBAAsB;AACtB,cAAc,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC;AAEnD,2CAA2C;AAC3C,wDAAwD"}
|