@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,375 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for Transformation Rules Engine
|
|
3
|
+
*/
|
|
4
|
+
import { describe, it, expect } from 'vitest';
|
|
5
|
+
import { getTargetLimits, intelligentTruncate, splitContent, convertChatGPTInstructionsToClaude, convertClaudeInstructionsToChatGPT, convertMemoriesToDocument, convertDocumentToMemories, extractContextFromConversations, mapGPTToProject, validateBundleForTarget, } from '../rules.js';
|
|
6
|
+
// ─── Target Limits ───────────────────────────────────────────
|
|
7
|
+
describe('getTargetLimits', () => {
|
|
8
|
+
it('returns correct limits for Claude', () => {
|
|
9
|
+
const limits = getTargetLimits('claude');
|
|
10
|
+
expect(limits.instructions).toBeDefined();
|
|
11
|
+
expect(limits.instructions.hard).toBe(8000);
|
|
12
|
+
expect(limits.instructions.overflowStrategy).toBe('summarize');
|
|
13
|
+
expect(limits.memories).toBeNull(); // Claude uses docs instead
|
|
14
|
+
});
|
|
15
|
+
it('returns correct limits for ChatGPT', () => {
|
|
16
|
+
const limits = getTargetLimits('chatgpt');
|
|
17
|
+
expect(limits.instructions).toBeDefined();
|
|
18
|
+
expect(limits.instructions.hard).toBe(1500);
|
|
19
|
+
expect(limits.instructions.overflowStrategy).toBe('truncate');
|
|
20
|
+
expect(limits.memories).toBeDefined();
|
|
21
|
+
expect(limits.memories.hard).toBe(500);
|
|
22
|
+
});
|
|
23
|
+
it('throws for unknown platform', () => {
|
|
24
|
+
expect(() => getTargetLimits('unknown')).toThrow('Unknown platform');
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
// ─── Intelligent Truncation ──────────────────────────────────
|
|
28
|
+
describe('intelligentTruncate', () => {
|
|
29
|
+
it('returns content unchanged if within limit', () => {
|
|
30
|
+
const content = 'Short content';
|
|
31
|
+
const result = intelligentTruncate(content, 100);
|
|
32
|
+
expect(result.success).toBe(true);
|
|
33
|
+
expect(result.content).toBe(content);
|
|
34
|
+
expect(result.warning).toBeUndefined();
|
|
35
|
+
});
|
|
36
|
+
it('removes code examples first', () => {
|
|
37
|
+
const content = `Important instruction here.
|
|
38
|
+
|
|
39
|
+
\`\`\`javascript
|
|
40
|
+
const example = "this is a long code example that takes up space";
|
|
41
|
+
console.log(example);
|
|
42
|
+
\`\`\`
|
|
43
|
+
|
|
44
|
+
More important content.`;
|
|
45
|
+
const result = intelligentTruncate(content, 100);
|
|
46
|
+
expect(result.success).toBe(true);
|
|
47
|
+
expect(result.content).not.toContain('```');
|
|
48
|
+
expect(result.content).toContain('Important instruction');
|
|
49
|
+
});
|
|
50
|
+
it('removes verbose sections', () => {
|
|
51
|
+
const content = `Main point here.
|
|
52
|
+
|
|
53
|
+
Note: This is a very long note that explains things in great detail and could be removed if space is needed.
|
|
54
|
+
|
|
55
|
+
Another main point.`;
|
|
56
|
+
const result = intelligentTruncate(content, 80);
|
|
57
|
+
expect(result.success).toBe(true);
|
|
58
|
+
expect(result.warning).toBeDefined();
|
|
59
|
+
});
|
|
60
|
+
it('truncates at sentence boundary when necessary', () => {
|
|
61
|
+
const content = 'First sentence here. Second sentence follows. Third sentence is also present. Fourth sentence ends it.';
|
|
62
|
+
const result = intelligentTruncate(content, 60);
|
|
63
|
+
expect(result.success).toBe(true);
|
|
64
|
+
expect(result.content.endsWith('...')).toBe(true);
|
|
65
|
+
expect(result.needsReview).toBe(true);
|
|
66
|
+
});
|
|
67
|
+
it('flags for review on hard truncation', () => {
|
|
68
|
+
const content = 'A'.repeat(200);
|
|
69
|
+
const result = intelligentTruncate(content, 50);
|
|
70
|
+
expect(result.success).toBe(true);
|
|
71
|
+
expect(result.content.length).toBeLessThanOrEqual(50);
|
|
72
|
+
expect(result.needsReview).toBe(true);
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
// ─── Content Splitting ───────────────────────────────────────
|
|
76
|
+
describe('splitContent', () => {
|
|
77
|
+
it('returns single chunk if within limit', () => {
|
|
78
|
+
const content = 'Short content';
|
|
79
|
+
const chunks = splitContent(content, 100);
|
|
80
|
+
expect(chunks).toHaveLength(1);
|
|
81
|
+
expect(chunks[0]).toBe(content);
|
|
82
|
+
});
|
|
83
|
+
it('splits by paragraphs', () => {
|
|
84
|
+
const content = `First paragraph here.
|
|
85
|
+
|
|
86
|
+
Second paragraph here.
|
|
87
|
+
|
|
88
|
+
Third paragraph here.`;
|
|
89
|
+
const chunks = splitContent(content, 30);
|
|
90
|
+
expect(chunks.length).toBeGreaterThan(1);
|
|
91
|
+
expect(chunks[0]).toContain('First');
|
|
92
|
+
});
|
|
93
|
+
it('splits long paragraphs by sentences', () => {
|
|
94
|
+
const content = 'First sentence. Second sentence. Third sentence. Fourth sentence. Fifth sentence.';
|
|
95
|
+
const chunks = splitContent(content, 40);
|
|
96
|
+
expect(chunks.length).toBeGreaterThan(1);
|
|
97
|
+
chunks.forEach((chunk) => {
|
|
98
|
+
expect(chunk.length).toBeLessThanOrEqual(45); // Allow some tolerance
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
it('handles content with no natural break points', () => {
|
|
102
|
+
const content = 'A'.repeat(100);
|
|
103
|
+
const chunks = splitContent(content, 30);
|
|
104
|
+
expect(chunks.length).toBeGreaterThan(1);
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
// ─── ChatGPT to Claude Instruction Conversion ────────────────
|
|
108
|
+
describe('convertChatGPTInstructionsToClaude', () => {
|
|
109
|
+
it('combines about user and about model sections', () => {
|
|
110
|
+
const aboutUser = 'I am a software developer.';
|
|
111
|
+
const aboutModel = 'Respond concisely and use code examples.';
|
|
112
|
+
const result = convertChatGPTInstructionsToClaude(aboutUser, aboutModel);
|
|
113
|
+
expect(result).toContain('# User Context');
|
|
114
|
+
expect(result).toContain('I am a software developer');
|
|
115
|
+
expect(result).toContain('# Response Guidelines');
|
|
116
|
+
expect(result).toContain('Respond concisely');
|
|
117
|
+
});
|
|
118
|
+
it('handles empty about user', () => {
|
|
119
|
+
const result = convertChatGPTInstructionsToClaude('', 'Just respond well.');
|
|
120
|
+
expect(result).not.toContain('User Context');
|
|
121
|
+
expect(result).toContain('Response Guidelines');
|
|
122
|
+
});
|
|
123
|
+
it('handles empty about model', () => {
|
|
124
|
+
const result = convertChatGPTInstructionsToClaude('I am a user.', '');
|
|
125
|
+
expect(result).toContain('User Context');
|
|
126
|
+
expect(result).not.toContain('Response Guidelines');
|
|
127
|
+
});
|
|
128
|
+
it('handles both empty', () => {
|
|
129
|
+
const result = convertChatGPTInstructionsToClaude('', '');
|
|
130
|
+
expect(result).toBe('');
|
|
131
|
+
});
|
|
132
|
+
});
|
|
133
|
+
// ─── Claude to ChatGPT Instruction Conversion ────────────────
|
|
134
|
+
describe('convertClaudeInstructionsToChatGPT', () => {
|
|
135
|
+
it('extracts sections from Claude format', () => {
|
|
136
|
+
const systemPrompt = `# User Context
|
|
137
|
+
I am a data scientist.
|
|
138
|
+
|
|
139
|
+
# Response Guidelines
|
|
140
|
+
Be analytical and precise.`;
|
|
141
|
+
const result = convertClaudeInstructionsToChatGPT(systemPrompt, 1500);
|
|
142
|
+
expect(result.aboutUser).toContain('data scientist');
|
|
143
|
+
expect(result.aboutModel).toContain('analytical');
|
|
144
|
+
expect(result.overflow).toBeUndefined();
|
|
145
|
+
});
|
|
146
|
+
it('handles content exceeding limit', () => {
|
|
147
|
+
const systemPrompt = 'A'.repeat(2000);
|
|
148
|
+
const result = convertClaudeInstructionsToChatGPT(systemPrompt, 1500);
|
|
149
|
+
expect(result.aboutUser.length + result.aboutModel.length).toBeLessThanOrEqual(1500);
|
|
150
|
+
expect(result.overflow).toBeDefined();
|
|
151
|
+
});
|
|
152
|
+
it('puts all content in aboutModel if no clear sections', () => {
|
|
153
|
+
const systemPrompt = 'Just some general instructions without clear sections.';
|
|
154
|
+
const result = convertClaudeInstructionsToChatGPT(systemPrompt, 1500);
|
|
155
|
+
expect(result.aboutUser).toBe('');
|
|
156
|
+
expect(result.aboutModel).toBe(systemPrompt);
|
|
157
|
+
});
|
|
158
|
+
});
|
|
159
|
+
// ─── Memory Conversions ──────────────────────────────────────
|
|
160
|
+
describe('convertMemoriesToDocument', () => {
|
|
161
|
+
it('creates structured markdown document', () => {
|
|
162
|
+
const memories = [
|
|
163
|
+
{ id: '1', content: 'User prefers dark mode', createdAt: '2024-01-01', category: 'Preferences' },
|
|
164
|
+
{ id: '2', content: 'User works on React projects', createdAt: '2024-01-02', category: 'Work' },
|
|
165
|
+
];
|
|
166
|
+
const doc = convertMemoriesToDocument(memories);
|
|
167
|
+
expect(doc).toContain('# User Memories');
|
|
168
|
+
expect(doc).toContain('## Preferences');
|
|
169
|
+
expect(doc).toContain('## Work');
|
|
170
|
+
expect(doc).toContain('- User prefers dark mode');
|
|
171
|
+
expect(doc).toContain('- User works on React projects');
|
|
172
|
+
});
|
|
173
|
+
it('groups by category', () => {
|
|
174
|
+
const memories = [
|
|
175
|
+
{ id: '1', content: 'First', createdAt: '2024-01-01', category: 'A' },
|
|
176
|
+
{ id: '2', content: 'Second', createdAt: '2024-01-02', category: 'B' },
|
|
177
|
+
{ id: '3', content: 'Third', createdAt: '2024-01-03', category: 'A' },
|
|
178
|
+
];
|
|
179
|
+
const doc = convertMemoriesToDocument(memories);
|
|
180
|
+
// A should come first (more items)
|
|
181
|
+
const aIndex = doc.indexOf('## A');
|
|
182
|
+
const bIndex = doc.indexOf('## B');
|
|
183
|
+
expect(aIndex).toBeLessThan(bIndex);
|
|
184
|
+
});
|
|
185
|
+
it('uses General for uncategorized', () => {
|
|
186
|
+
const memories = [{ id: '1', content: 'Uncategorized memory', createdAt: '2024-01-01' }];
|
|
187
|
+
const doc = convertMemoriesToDocument(memories);
|
|
188
|
+
expect(doc).toContain('## General');
|
|
189
|
+
});
|
|
190
|
+
});
|
|
191
|
+
describe('convertDocumentToMemories', () => {
|
|
192
|
+
it('extracts memories from document', () => {
|
|
193
|
+
const doc = `# Memories
|
|
194
|
+
|
|
195
|
+
## Work
|
|
196
|
+
- User is a developer
|
|
197
|
+
- User uses TypeScript
|
|
198
|
+
|
|
199
|
+
## Personal
|
|
200
|
+
- User likes coffee`;
|
|
201
|
+
const memories = convertDocumentToMemories(doc);
|
|
202
|
+
expect(memories).toHaveLength(3);
|
|
203
|
+
expect(memories[0]).toEqual({ content: 'User is a developer', category: 'Work' });
|
|
204
|
+
expect(memories[2]).toEqual({ content: 'User likes coffee', category: 'Personal' });
|
|
205
|
+
});
|
|
206
|
+
it('handles various bullet styles', () => {
|
|
207
|
+
const doc = `## Items
|
|
208
|
+
- Dash item
|
|
209
|
+
* Asterisk item
|
|
210
|
+
• Bullet item`;
|
|
211
|
+
const memories = convertDocumentToMemories(doc);
|
|
212
|
+
expect(memories).toHaveLength(3);
|
|
213
|
+
});
|
|
214
|
+
});
|
|
215
|
+
// ─── Conversation Context Extraction ─────────────────────────
|
|
216
|
+
describe('extractContextFromConversations', () => {
|
|
217
|
+
it('extracts key points into document', () => {
|
|
218
|
+
const summaries = [
|
|
219
|
+
{
|
|
220
|
+
title: 'Project Setup',
|
|
221
|
+
keyPoints: ['Decided to use React', 'Will use TypeScript'],
|
|
222
|
+
},
|
|
223
|
+
{
|
|
224
|
+
title: 'Architecture Discussion',
|
|
225
|
+
keyPoints: ['Microservices approach chosen'],
|
|
226
|
+
},
|
|
227
|
+
];
|
|
228
|
+
const doc = extractContextFromConversations(summaries);
|
|
229
|
+
expect(doc).toContain('# Conversation Insights');
|
|
230
|
+
expect(doc).toContain('Decided to use React');
|
|
231
|
+
expect(doc).toContain('Will use TypeScript');
|
|
232
|
+
expect(doc).toContain('Microservices approach');
|
|
233
|
+
});
|
|
234
|
+
it('deduplicates key points', () => {
|
|
235
|
+
const summaries = [
|
|
236
|
+
{ title: 'Conv 1', keyPoints: ['Use React'] },
|
|
237
|
+
{ title: 'Conv 2', keyPoints: ['Use React'] }, // Duplicate
|
|
238
|
+
];
|
|
239
|
+
const doc = extractContextFromConversations(summaries);
|
|
240
|
+
const matches = doc.match(/Use React/g);
|
|
241
|
+
expect(matches).toHaveLength(1);
|
|
242
|
+
});
|
|
243
|
+
it('handles summaries without key points', () => {
|
|
244
|
+
const summaries = [
|
|
245
|
+
{ title: 'Empty Conv', keyPoints: [] },
|
|
246
|
+
{ title: 'No Points' },
|
|
247
|
+
];
|
|
248
|
+
const doc = extractContextFromConversations(summaries);
|
|
249
|
+
expect(doc).toContain('No key decisions');
|
|
250
|
+
expect(doc).toContain('2 conversations');
|
|
251
|
+
});
|
|
252
|
+
it('limits to 20 key points', () => {
|
|
253
|
+
const summaries = [
|
|
254
|
+
{
|
|
255
|
+
title: 'Many Points',
|
|
256
|
+
keyPoints: Array.from({ length: 30 }, (_, i) => `Point ${i + 1}`),
|
|
257
|
+
},
|
|
258
|
+
];
|
|
259
|
+
const doc = extractContextFromConversations(summaries);
|
|
260
|
+
expect(doc).toContain('Point 1');
|
|
261
|
+
expect(doc).toContain('Point 20');
|
|
262
|
+
expect(doc).not.toContain('Point 21');
|
|
263
|
+
});
|
|
264
|
+
});
|
|
265
|
+
// ─── GPT to Project Mapping ──────────────────────────────────
|
|
266
|
+
describe('mapGPTToProject', () => {
|
|
267
|
+
it('maps GPT config to project format', () => {
|
|
268
|
+
const gpt = {
|
|
269
|
+
name: 'Code Helper',
|
|
270
|
+
description: 'Helps with coding tasks',
|
|
271
|
+
instructions: 'You are a coding assistant.',
|
|
272
|
+
capabilities: ['code_interpreter', 'web_browsing'],
|
|
273
|
+
knowledgeFiles: ['api-docs.pdf'],
|
|
274
|
+
};
|
|
275
|
+
const project = mapGPTToProject(gpt);
|
|
276
|
+
expect(project.projectName).toBe('Code Helper');
|
|
277
|
+
expect(project.description).toBe('Helps with coding tasks');
|
|
278
|
+
expect(project.systemPrompt).toContain('You are a coding assistant');
|
|
279
|
+
expect(project.systemPrompt).toContain('code_interpreter');
|
|
280
|
+
expect(project.systemPrompt).toContain('web_browsing');
|
|
281
|
+
});
|
|
282
|
+
it('handles minimal GPT config', () => {
|
|
283
|
+
const gpt = {
|
|
284
|
+
name: 'Simple Bot',
|
|
285
|
+
instructions: 'Be helpful.',
|
|
286
|
+
};
|
|
287
|
+
const project = mapGPTToProject(gpt);
|
|
288
|
+
expect(project.projectName).toBe('Simple Bot');
|
|
289
|
+
expect(project.description).toContain('Simple Bot');
|
|
290
|
+
expect(project.systemPrompt).toBe('Be helpful.');
|
|
291
|
+
});
|
|
292
|
+
});
|
|
293
|
+
// ─── Bundle Validation ───────────────────────────────────────
|
|
294
|
+
describe('validateBundleForTarget', () => {
|
|
295
|
+
const createBundle = (overrides = {}) => ({
|
|
296
|
+
version: '1.0',
|
|
297
|
+
id: 'test-bundle',
|
|
298
|
+
source: {
|
|
299
|
+
platform: 'chatgpt',
|
|
300
|
+
extractedAt: new Date().toISOString(),
|
|
301
|
+
extractorVersion: '1.0.0',
|
|
302
|
+
},
|
|
303
|
+
contents: {},
|
|
304
|
+
metadata: {
|
|
305
|
+
totalItems: 0,
|
|
306
|
+
itemCounts: {
|
|
307
|
+
instructions: 0,
|
|
308
|
+
memories: 0,
|
|
309
|
+
conversations: 0,
|
|
310
|
+
files: 0,
|
|
311
|
+
customBots: 0,
|
|
312
|
+
},
|
|
313
|
+
warnings: [],
|
|
314
|
+
errors: [],
|
|
315
|
+
},
|
|
316
|
+
...overrides,
|
|
317
|
+
});
|
|
318
|
+
it('validates bundle with no issues', () => {
|
|
319
|
+
const bundle = createBundle({
|
|
320
|
+
contents: {
|
|
321
|
+
instructions: { content: 'Short instructions', length: 20 },
|
|
322
|
+
},
|
|
323
|
+
});
|
|
324
|
+
const result = validateBundleForTarget(bundle, 'claude');
|
|
325
|
+
expect(result.valid).toBe(true);
|
|
326
|
+
expect(result.errors).toHaveLength(0);
|
|
327
|
+
expect(result.warnings).toHaveLength(0);
|
|
328
|
+
});
|
|
329
|
+
it('warns about instruction overflow', () => {
|
|
330
|
+
const bundle = createBundle({
|
|
331
|
+
contents: {
|
|
332
|
+
instructions: { content: 'A'.repeat(2000), length: 2000 },
|
|
333
|
+
},
|
|
334
|
+
});
|
|
335
|
+
const result = validateBundleForTarget(bundle, 'chatgpt');
|
|
336
|
+
expect(result.valid).toBe(true);
|
|
337
|
+
expect(result.warnings.some((w) => w.includes('exceed'))).toBe(true);
|
|
338
|
+
});
|
|
339
|
+
it('warns about memory conversion for Claude', () => {
|
|
340
|
+
const bundle = createBundle({
|
|
341
|
+
contents: {
|
|
342
|
+
memories: {
|
|
343
|
+
entries: [{ id: '1', content: 'Memory', createdAt: '2024-01-01' }],
|
|
344
|
+
count: 1,
|
|
345
|
+
},
|
|
346
|
+
},
|
|
347
|
+
});
|
|
348
|
+
const result = validateBundleForTarget(bundle, 'claude');
|
|
349
|
+
expect(result.valid).toBe(true);
|
|
350
|
+
expect(result.warnings.some((w) => w.includes('knowledge document'))).toBe(true);
|
|
351
|
+
});
|
|
352
|
+
it('warns about oversized files', () => {
|
|
353
|
+
const bundle = createBundle({
|
|
354
|
+
contents: {
|
|
355
|
+
files: {
|
|
356
|
+
files: [
|
|
357
|
+
{
|
|
358
|
+
id: '1',
|
|
359
|
+
filename: 'huge.zip',
|
|
360
|
+
mimeType: 'application/zip',
|
|
361
|
+
size: 100 * 1024 * 1024, // 100MB
|
|
362
|
+
path: 'files/huge.zip',
|
|
363
|
+
},
|
|
364
|
+
],
|
|
365
|
+
count: 1,
|
|
366
|
+
totalSize: 100 * 1024 * 1024,
|
|
367
|
+
},
|
|
368
|
+
},
|
|
369
|
+
});
|
|
370
|
+
const result = validateBundleForTarget(bundle, 'claude');
|
|
371
|
+
expect(result.valid).toBe(true);
|
|
372
|
+
expect(result.warnings.some((w) => w.includes('huge.zip'))).toBe(true);
|
|
373
|
+
});
|
|
374
|
+
});
|
|
375
|
+
//# sourceMappingURL=rules.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rules.test.js","sourceRoot":"","sources":["../../../../src/migrate/transformers/__tests__/rules.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
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 type { Platform, Transformer, TransformOptions, MigrationBundle, CompatibilityReport } from '../types.js';
|
|
16
|
+
export declare class ChatGPTToClaudeTransformer implements Transformer {
|
|
17
|
+
readonly source: Platform;
|
|
18
|
+
readonly target: Platform;
|
|
19
|
+
readonly version = "1.0.0";
|
|
20
|
+
private progress;
|
|
21
|
+
/**
|
|
22
|
+
* Analyze the bundle for compatibility without transforming.
|
|
23
|
+
*/
|
|
24
|
+
analyze(bundle: MigrationBundle): Promise<CompatibilityReport>;
|
|
25
|
+
/**
|
|
26
|
+
* Transform the bundle for Claude.
|
|
27
|
+
*/
|
|
28
|
+
transform(bundle: MigrationBundle, options: TransformOptions): Promise<MigrationBundle>;
|
|
29
|
+
private analyzeInstructions;
|
|
30
|
+
private analyzeMemories;
|
|
31
|
+
private analyzeConversations;
|
|
32
|
+
private analyzeFiles;
|
|
33
|
+
private analyzeCustomBots;
|
|
34
|
+
private transformInstructions;
|
|
35
|
+
private transformMemories;
|
|
36
|
+
private transformConversations;
|
|
37
|
+
private transformFiles;
|
|
38
|
+
private transformCustomBots;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=chatgpt-to-claude.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chatgpt-to-claude.d.ts","sourceRoot":"","sources":["../../../src/migrate/transformers/chatgpt-to-claude.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EACV,QAAQ,EACR,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EAQpB,MAAM,aAAa,CAAC;AAerB,qBAAa,0BAA2B,YAAW,WAAW;IAC5D,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAa;IACtC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAY;IACrC,QAAQ,CAAC,OAAO,WAAW;IAE3B,OAAO,CAAC,QAAQ,CAAK;IAErB;;OAEG;IACG,OAAO,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAyGpE;;OAEG;IACG,SAAS,CACb,MAAM,EAAE,eAAe,EACvB,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,eAAe,CAAC;IA4G3B,OAAO,CAAC,mBAAmB;IAyB3B,OAAO,CAAC,eAAe;IAYvB,OAAO,CAAC,oBAAoB;IAyB5B,OAAO,CAAC,YAAY;IAgCpB,OAAO,CAAC,iBAAiB;YAaX,qBAAqB;IAyDnC,OAAO,CAAC,iBAAiB;IAwBzB,OAAO,CAAC,sBAAsB;IAuB9B,OAAO,CAAC,cAAc;IA6BtB,OAAO,CAAC,mBAAmB;CA0B5B"}
|