@asifkibria/claude-code-toolkit 1.0.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.
@@ -0,0 +1,409 @@
1
+ import { describe, it, expect, beforeEach, afterEach } from "vitest";
2
+ import * as fs from "fs";
3
+ import * as path from "path";
4
+ import * as os from "os";
5
+ import { checkContentForImages, fixImageInContent, scanFile, fixFile, getConversationStats, findAllJsonlFiles, findBackupFiles, restoreFromBackup, deleteOldBackups, MIN_PROBLEMATIC_BASE64_SIZE, } from "../lib/scanner.js";
6
+ const TEST_DIR = path.join(os.tmpdir(), "mcp-image-fixer-test");
7
+ function createLargeBase64(size) {
8
+ return "A".repeat(size);
9
+ }
10
+ function createTestFile(filename, lines) {
11
+ const filePath = path.join(TEST_DIR, filename);
12
+ const content = lines.map((l) => JSON.stringify(l)).join("\n");
13
+ fs.writeFileSync(filePath, content, "utf-8");
14
+ return filePath;
15
+ }
16
+ describe("Scanner Module", () => {
17
+ beforeEach(() => {
18
+ if (fs.existsSync(TEST_DIR)) {
19
+ fs.rmSync(TEST_DIR, { recursive: true });
20
+ }
21
+ fs.mkdirSync(TEST_DIR, { recursive: true });
22
+ });
23
+ afterEach(() => {
24
+ if (fs.existsSync(TEST_DIR)) {
25
+ fs.rmSync(TEST_DIR, { recursive: true });
26
+ }
27
+ });
28
+ describe("checkContentForImages", () => {
29
+ it("should return false for empty content", () => {
30
+ const result = checkContentForImages([]);
31
+ expect(result.hasProblems).toBe(false);
32
+ expect(result.indices).toEqual([]);
33
+ });
34
+ it("should return false for non-array content", () => {
35
+ const result = checkContentForImages("not an array");
36
+ expect(result.hasProblems).toBe(false);
37
+ });
38
+ it("should return false for text-only content", () => {
39
+ const content = [{ type: "text", text: "Hello world" }];
40
+ const result = checkContentForImages(content);
41
+ expect(result.hasProblems).toBe(false);
42
+ });
43
+ it("should return false for small images", () => {
44
+ const content = [
45
+ {
46
+ type: "image",
47
+ source: { type: "base64", data: createLargeBase64(1000) },
48
+ },
49
+ ];
50
+ const result = checkContentForImages(content);
51
+ expect(result.hasProblems).toBe(false);
52
+ });
53
+ it("should detect oversized images", () => {
54
+ const content = [
55
+ {
56
+ type: "image",
57
+ source: { type: "base64", data: createLargeBase64(MIN_PROBLEMATIC_BASE64_SIZE + 1) },
58
+ },
59
+ ];
60
+ const result = checkContentForImages(content);
61
+ expect(result.hasProblems).toBe(true);
62
+ expect(result.indices).toEqual([0]);
63
+ });
64
+ it("should detect multiple oversized images", () => {
65
+ const content = [
66
+ { type: "text", text: "Hello" },
67
+ {
68
+ type: "image",
69
+ source: { type: "base64", data: createLargeBase64(MIN_PROBLEMATIC_BASE64_SIZE + 1) },
70
+ },
71
+ { type: "text", text: "World" },
72
+ {
73
+ type: "image",
74
+ source: { type: "base64", data: createLargeBase64(MIN_PROBLEMATIC_BASE64_SIZE + 1) },
75
+ },
76
+ ];
77
+ const result = checkContentForImages(content);
78
+ expect(result.hasProblems).toBe(true);
79
+ expect(result.indices).toEqual([1, 3]);
80
+ });
81
+ it("should detect oversized images in tool_result", () => {
82
+ const content = [
83
+ {
84
+ type: "tool_result",
85
+ tool_use_id: "123",
86
+ content: [
87
+ { type: "text", text: "Result" },
88
+ {
89
+ type: "image",
90
+ source: { type: "base64", data: createLargeBase64(MIN_PROBLEMATIC_BASE64_SIZE + 1) },
91
+ },
92
+ ],
93
+ },
94
+ ];
95
+ const result = checkContentForImages(content);
96
+ expect(result.hasProblems).toBe(true);
97
+ expect(result.indices).toEqual([[0, 1]]);
98
+ });
99
+ it("should calculate total size correctly", () => {
100
+ const size1 = 50000;
101
+ const size2 = 60000;
102
+ const content = [
103
+ { type: "image", source: { type: "base64", data: createLargeBase64(size1) } },
104
+ { type: "image", source: { type: "base64", data: createLargeBase64(size2) } },
105
+ ];
106
+ const result = checkContentForImages(content);
107
+ expect(result.totalSize).toBe(size1 + size2);
108
+ });
109
+ });
110
+ describe("fixImageInContent", () => {
111
+ it("should replace oversized image with text placeholder", () => {
112
+ const content = [
113
+ { type: "text", text: "Before" },
114
+ {
115
+ type: "image",
116
+ source: { type: "base64", data: createLargeBase64(200000) },
117
+ },
118
+ { type: "text", text: "After" },
119
+ ];
120
+ const fixed = fixImageInContent(content, [1]);
121
+ expect(fixed[0]).toEqual({ type: "text", text: "Before" });
122
+ expect(fixed[1]).toEqual({ type: "text", text: "[Image removed - exceeded size limit]" });
123
+ expect(fixed[2]).toEqual({ type: "text", text: "After" });
124
+ });
125
+ it("should replace nested image in tool_result", () => {
126
+ const content = [
127
+ {
128
+ type: "tool_result",
129
+ tool_use_id: "123",
130
+ content: [
131
+ { type: "text", text: "Result" },
132
+ {
133
+ type: "image",
134
+ source: { type: "base64", data: createLargeBase64(200000) },
135
+ },
136
+ ],
137
+ },
138
+ ];
139
+ const fixed = fixImageInContent(content, [[0, 1]]);
140
+ expect(fixed[0].content[0]).toEqual({ type: "text", text: "Result" });
141
+ expect(fixed[0].content[1]).toEqual({
142
+ type: "text",
143
+ text: "[Image removed - exceeded size limit]",
144
+ });
145
+ });
146
+ it("should not mutate original content", () => {
147
+ const original = [
148
+ {
149
+ type: "image",
150
+ source: { type: "base64", data: "original" },
151
+ },
152
+ ];
153
+ const originalCopy = JSON.parse(JSON.stringify(original));
154
+ fixImageInContent(original, [0]);
155
+ expect(original).toEqual(originalCopy);
156
+ });
157
+ });
158
+ describe("scanFile", () => {
159
+ it("should scan clean file with no issues", () => {
160
+ const filePath = createTestFile("clean.jsonl", [
161
+ { message: { role: "user", content: [{ type: "text", text: "Hello" }] } },
162
+ { message: { role: "assistant", content: [{ type: "text", text: "Hi!" }] } },
163
+ ]);
164
+ const result = scanFile(filePath);
165
+ expect(result.issues).toHaveLength(0);
166
+ expect(result.totalLines).toBe(2);
167
+ });
168
+ it("should detect issues in message content", () => {
169
+ const filePath = createTestFile("with-image.jsonl", [
170
+ { message: { role: "user", content: [{ type: "text", text: "Hello" }] } },
171
+ {
172
+ message: {
173
+ role: "user",
174
+ content: [
175
+ {
176
+ type: "image",
177
+ source: { type: "base64", data: createLargeBase64(MIN_PROBLEMATIC_BASE64_SIZE + 1) },
178
+ },
179
+ ],
180
+ },
181
+ },
182
+ ]);
183
+ const result = scanFile(filePath);
184
+ expect(result.issues).toHaveLength(1);
185
+ expect(result.issues[0].line).toBe(2);
186
+ expect(result.issues[0].type).toBe("message_content");
187
+ });
188
+ it("should detect issues in toolUseResult", () => {
189
+ const filePath = createTestFile("tool-result.jsonl", [
190
+ {
191
+ message: { role: "user", content: [] },
192
+ toolUseResult: {
193
+ content: [
194
+ {
195
+ type: "image",
196
+ source: { type: "base64", data: createLargeBase64(MIN_PROBLEMATIC_BASE64_SIZE + 1) },
197
+ },
198
+ ],
199
+ },
200
+ },
201
+ ]);
202
+ const result = scanFile(filePath);
203
+ expect(result.issues).toHaveLength(1);
204
+ expect(result.issues[0].type).toBe("toolUseResult");
205
+ });
206
+ it("should handle malformed JSON lines gracefully", () => {
207
+ const filePath = path.join(TEST_DIR, "malformed.jsonl");
208
+ fs.writeFileSync(filePath, '{"message":{"content":[]}}\nnot valid json\n{"message":{"content":[]}}', "utf-8");
209
+ const result = scanFile(filePath);
210
+ expect(result.totalLines).toBe(3);
211
+ expect(result.issues).toHaveLength(0);
212
+ });
213
+ it("should throw error for non-existent file", () => {
214
+ expect(() => scanFile("/nonexistent/file.jsonl")).toThrow();
215
+ });
216
+ });
217
+ describe("fixFile", () => {
218
+ it("should not modify clean files", () => {
219
+ const filePath = createTestFile("clean.jsonl", [
220
+ { message: { role: "user", content: [{ type: "text", text: "Hello" }] } },
221
+ ]);
222
+ const result = fixFile(filePath);
223
+ expect(result.fixed).toBe(false);
224
+ expect(result.backupPath).toBeUndefined();
225
+ });
226
+ it("should fix files with oversized images", () => {
227
+ const filePath = createTestFile("to-fix.jsonl", [
228
+ {
229
+ message: {
230
+ role: "user",
231
+ content: [
232
+ {
233
+ type: "image",
234
+ source: { type: "base64", data: createLargeBase64(MIN_PROBLEMATIC_BASE64_SIZE + 1) },
235
+ },
236
+ ],
237
+ },
238
+ },
239
+ ]);
240
+ const result = fixFile(filePath);
241
+ expect(result.fixed).toBe(true);
242
+ expect(result.backupPath).toBeDefined();
243
+ expect(fs.existsSync(result.backupPath)).toBe(true);
244
+ const fixedContent = fs.readFileSync(filePath, "utf-8");
245
+ const parsed = JSON.parse(fixedContent);
246
+ expect(parsed.message.content[0].type).toBe("text");
247
+ expect(parsed.message.content[0].text).toContain("Image removed");
248
+ });
249
+ it("should create backup before fixing", () => {
250
+ const filePath = createTestFile("backup-test.jsonl", [
251
+ {
252
+ message: {
253
+ role: "user",
254
+ content: [
255
+ {
256
+ type: "image",
257
+ source: { type: "base64", data: createLargeBase64(MIN_PROBLEMATIC_BASE64_SIZE + 1) },
258
+ },
259
+ ],
260
+ },
261
+ },
262
+ ]);
263
+ const originalContent = fs.readFileSync(filePath, "utf-8");
264
+ const result = fixFile(filePath);
265
+ expect(result.backupPath).toBeDefined();
266
+ const backupContent = fs.readFileSync(result.backupPath, "utf-8");
267
+ expect(backupContent).toBe(originalContent);
268
+ });
269
+ it("should skip backup when createBackup is false", () => {
270
+ const filePath = createTestFile("no-backup.jsonl", [
271
+ {
272
+ message: {
273
+ role: "user",
274
+ content: [
275
+ {
276
+ type: "image",
277
+ source: { type: "base64", data: createLargeBase64(MIN_PROBLEMATIC_BASE64_SIZE + 1) },
278
+ },
279
+ ],
280
+ },
281
+ },
282
+ ]);
283
+ const result = fixFile(filePath, false);
284
+ expect(result.fixed).toBe(true);
285
+ expect(result.backupPath).toBeUndefined();
286
+ });
287
+ });
288
+ describe("getConversationStats", () => {
289
+ it("should count messages correctly", () => {
290
+ const filePath = createTestFile("stats.jsonl", [
291
+ { message: { role: "user", content: [] } },
292
+ { message: { role: "assistant", content: [] } },
293
+ { message: { role: "user", content: [] } },
294
+ { message: { role: "assistant", content: [] } },
295
+ ]);
296
+ const stats = getConversationStats(filePath);
297
+ expect(stats.totalMessages).toBe(4);
298
+ expect(stats.userMessages).toBe(2);
299
+ expect(stats.assistantMessages).toBe(2);
300
+ });
301
+ it("should count tool uses", () => {
302
+ const filePath = createTestFile("tools.jsonl", [
303
+ {
304
+ message: {
305
+ role: "assistant",
306
+ content: [
307
+ { type: "tool_use", id: "1", name: "read" },
308
+ { type: "tool_use", id: "2", name: "write" },
309
+ ],
310
+ },
311
+ },
312
+ ]);
313
+ const stats = getConversationStats(filePath);
314
+ expect(stats.toolUses).toBe(2);
315
+ });
316
+ it("should count images and problematic images", () => {
317
+ const filePath = createTestFile("images.jsonl", [
318
+ {
319
+ message: {
320
+ role: "user",
321
+ content: [
322
+ { type: "image", source: { type: "base64", data: createLargeBase64(1000) } },
323
+ {
324
+ type: "image",
325
+ source: { type: "base64", data: createLargeBase64(MIN_PROBLEMATIC_BASE64_SIZE + 1) },
326
+ },
327
+ ],
328
+ },
329
+ },
330
+ ]);
331
+ const stats = getConversationStats(filePath);
332
+ expect(stats.imageCount).toBe(2);
333
+ expect(stats.problematicImages).toBe(1);
334
+ });
335
+ });
336
+ describe("findAllJsonlFiles", () => {
337
+ it("should find all jsonl files recursively", () => {
338
+ fs.mkdirSync(path.join(TEST_DIR, "sub1"), { recursive: true });
339
+ fs.mkdirSync(path.join(TEST_DIR, "sub2"), { recursive: true });
340
+ fs.writeFileSync(path.join(TEST_DIR, "file1.jsonl"), "{}");
341
+ fs.writeFileSync(path.join(TEST_DIR, "sub1", "file2.jsonl"), "{}");
342
+ fs.writeFileSync(path.join(TEST_DIR, "sub2", "file3.jsonl"), "{}");
343
+ fs.writeFileSync(path.join(TEST_DIR, "notjsonl.txt"), "{}");
344
+ const files = findAllJsonlFiles(TEST_DIR);
345
+ expect(files).toHaveLength(3);
346
+ expect(files.every((f) => f.endsWith(".jsonl"))).toBe(true);
347
+ });
348
+ it("should exclude backup files", () => {
349
+ fs.writeFileSync(path.join(TEST_DIR, "file.jsonl"), "{}");
350
+ fs.writeFileSync(path.join(TEST_DIR, "file.jsonl.backup.2024-01-01"), "{}");
351
+ const files = findAllJsonlFiles(TEST_DIR);
352
+ expect(files).toHaveLength(1);
353
+ expect(files[0]).not.toContain("backup");
354
+ });
355
+ });
356
+ describe("findBackupFiles", () => {
357
+ it("should find backup files", () => {
358
+ fs.writeFileSync(path.join(TEST_DIR, "file.jsonl"), "{}");
359
+ fs.writeFileSync(path.join(TEST_DIR, "file.jsonl.backup.2024-01-01T00-00-00"), "{}");
360
+ fs.writeFileSync(path.join(TEST_DIR, "file.jsonl.backup.2024-01-02T00-00-00"), "{}");
361
+ const backups = findBackupFiles(TEST_DIR);
362
+ expect(backups).toHaveLength(2);
363
+ expect(backups.every((f) => f.includes("backup"))).toBe(true);
364
+ });
365
+ });
366
+ describe("restoreFromBackup", () => {
367
+ it("should restore file from backup", () => {
368
+ const originalPath = path.join(TEST_DIR, "original.jsonl");
369
+ const backupPath = path.join(TEST_DIR, "original.jsonl.backup.2024-01-01T00-00-00");
370
+ fs.writeFileSync(originalPath, "modified content");
371
+ fs.writeFileSync(backupPath, "original content");
372
+ const result = restoreFromBackup(backupPath);
373
+ expect(result.success).toBe(true);
374
+ expect(result.originalPath).toBe(originalPath);
375
+ const restoredContent = fs.readFileSync(originalPath, "utf-8");
376
+ expect(restoredContent).toBe("original content");
377
+ });
378
+ it("should fail for non-existent backup", () => {
379
+ const result = restoreFromBackup("/nonexistent.backup.2024-01-01T00-00-00");
380
+ expect(result.success).toBe(false);
381
+ expect(result.error).toContain("not found");
382
+ });
383
+ it("should fail for invalid backup name format", () => {
384
+ const invalidPath = path.join(TEST_DIR, "invalid.txt");
385
+ fs.writeFileSync(invalidPath, "content");
386
+ const result = restoreFromBackup(invalidPath);
387
+ expect(result.success).toBe(false);
388
+ expect(result.error).toContain("Invalid backup");
389
+ });
390
+ });
391
+ describe("deleteOldBackups", () => {
392
+ it("should delete backups older than specified days", () => {
393
+ const oldBackup = path.join(TEST_DIR, "old.jsonl.backup.2020-01-01T00-00-00");
394
+ const newBackup = path.join(TEST_DIR, "new.jsonl.backup.2099-01-01T00-00-00");
395
+ fs.writeFileSync(oldBackup, "old");
396
+ fs.writeFileSync(newBackup, "new");
397
+ // Set old backup mtime to past
398
+ const oldDate = new Date();
399
+ oldDate.setDate(oldDate.getDate() - 10);
400
+ fs.utimesSync(oldBackup, oldDate, oldDate);
401
+ const result = deleteOldBackups(TEST_DIR, 5);
402
+ expect(result.deleted).toHaveLength(1);
403
+ expect(result.deleted[0]).toBe(oldBackup);
404
+ expect(fs.existsSync(oldBackup)).toBe(false);
405
+ expect(fs.existsSync(newBackup)).toBe(true);
406
+ });
407
+ });
408
+ });
409
+ //# sourceMappingURL=scanner.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scanner.test.js","sourceRoot":"","sources":["../../src/__tests__/scanner.test.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * CLI for Claude Code Image Fixer
4
+ * Can be used standalone without MCP integration
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;GAGG"}