sparkecoder 0.1.77 → 0.1.78
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/agent/index.js +19 -14
- package/dist/agent/index.js.map +1 -1
- package/dist/cli.js +23 -17
- package/dist/cli.js.map +1 -1
- package/dist/index.js +23 -17
- package/dist/index.js.map +1 -1
- package/dist/server/index.js +23 -17
- package/dist/server/index.js.map +1 -1
- package/dist/tools/index.js +19 -14
- package/dist/tools/index.js.map +1 -1
- package/package.json +1 -1
- package/web/.next/BUILD_ID +1 -1
- package/web/.next/standalone/web/.next/BUILD_ID +1 -1
- package/web/.next/standalone/web/.next/build-manifest.json +2 -2
- package/web/.next/standalone/web/.next/prerender-manifest.json +3 -3
- package/web/.next/standalone/web/.next/server/app/_global-error.html +2 -2
- package/web/.next/standalone/web/.next/server/app/_global-error.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_not-found.html +1 -1
- package/web/.next/standalone/web/.next/server/app/_not-found.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/installation.html +2 -2
- package/web/.next/standalone/web/.next/server/app/docs/installation.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/installation.segments/_full.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/installation.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/installation.segments/_index.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/installation.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/installation.segments/docs/installation/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/installation.segments/docs/installation.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/installation.segments/docs.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/skills.html +2 -2
- package/web/.next/standalone/web/.next/server/app/docs/skills.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/skills.segments/_full.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/skills.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/skills.segments/_index.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/skills.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/skills.segments/docs/skills/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/skills.segments/docs/skills.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/skills.segments/docs.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/tools.html +2 -2
- package/web/.next/standalone/web/.next/server/app/docs/tools.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/tools.segments/_full.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/tools.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/tools.segments/_index.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/tools.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/tools.segments/docs/tools/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/tools.segments/docs/tools.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/tools.segments/docs.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs.html +2 -2
- package/web/.next/standalone/web/.next/server/app/docs.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs.segments/_full.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs.segments/_index.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs.segments/docs/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs.segments/docs.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/index.html +1 -1
- package/web/.next/standalone/web/.next/server/app/index.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/index.segments/!KG1haW4p/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/index.segments/!KG1haW4p.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/index.segments/_full.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/index.segments/_index.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/pages/404.html +1 -1
- package/web/.next/standalone/web/.next/server/pages/500.html +2 -2
- package/web/.next/standalone/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/standalone/web/.next/server/server-reference-manifest.json +1 -1
- /package/web/.next/standalone/web/.next/static/{jEMyQksXLQ60IvC0f9PYc → q5xKLVzzjdkOykOwVu4eK}/_buildManifest.js +0 -0
- /package/web/.next/standalone/web/.next/static/{jEMyQksXLQ60IvC0f9PYc → q5xKLVzzjdkOykOwVu4eK}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/standalone/web/.next/static/{jEMyQksXLQ60IvC0f9PYc → q5xKLVzzjdkOykOwVu4eK}/_ssgManifest.js +0 -0
- /package/web/.next/standalone/web/.next/static/static/{jEMyQksXLQ60IvC0f9PYc → q5xKLVzzjdkOykOwVu4eK}/_buildManifest.js +0 -0
- /package/web/.next/standalone/web/.next/static/static/{jEMyQksXLQ60IvC0f9PYc → q5xKLVzzjdkOykOwVu4eK}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/standalone/web/.next/static/static/{jEMyQksXLQ60IvC0f9PYc → q5xKLVzzjdkOykOwVu4eK}/_ssgManifest.js +0 -0
- /package/web/.next/static/{jEMyQksXLQ60IvC0f9PYc → q5xKLVzzjdkOykOwVu4eK}/_buildManifest.js +0 -0
- /package/web/.next/static/{jEMyQksXLQ60IvC0f9PYc → q5xKLVzzjdkOykOwVu4eK}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{jEMyQksXLQ60IvC0f9PYc → q5xKLVzzjdkOykOwVu4eK}/_ssgManifest.js +0 -0
package/dist/agent/index.js
CHANGED
|
@@ -2519,26 +2519,29 @@ function cacheKey(buffer) {
|
|
|
2519
2519
|
return createHash("sha256").update(buffer).digest("hex");
|
|
2520
2520
|
}
|
|
2521
2521
|
async function resizeImageIfNeeded(buffer, mediaType) {
|
|
2522
|
+
const inputMediaType = mediaType || "image/png";
|
|
2522
2523
|
let metadata;
|
|
2523
2524
|
try {
|
|
2524
2525
|
metadata = await sharp(buffer).metadata();
|
|
2525
2526
|
} catch {
|
|
2526
|
-
return buffer;
|
|
2527
|
+
return { buffer, mediaType: inputMediaType };
|
|
2527
2528
|
}
|
|
2528
2529
|
const { width, height } = metadata;
|
|
2529
|
-
if (!width || !height) return buffer;
|
|
2530
|
+
if (!width || !height) return { buffer, mediaType: inputMediaType };
|
|
2530
2531
|
const longEdge = Math.max(width, height);
|
|
2531
2532
|
const needsResize = longEdge > MAX_LONG_EDGE;
|
|
2532
2533
|
const needsShrink = buffer.length > MAX_FILE_BYTES;
|
|
2533
|
-
if (!needsResize && !needsShrink) return buffer;
|
|
2534
|
+
if (!needsResize && !needsShrink) return { buffer, mediaType: inputMediaType };
|
|
2534
2535
|
const key = cacheKey(buffer);
|
|
2535
2536
|
const cacheDir = getCacheDir();
|
|
2536
|
-
const isPng =
|
|
2537
|
-
const
|
|
2537
|
+
const isPng = inputMediaType.includes("png");
|
|
2538
|
+
const willConvertToJpeg = isPng && (needsShrink || buffer.length > 2 * 1024 * 1024);
|
|
2539
|
+
const outputMediaType = willConvertToJpeg || !isPng ? "image/jpeg" : "image/png";
|
|
2540
|
+
const ext = outputMediaType === "image/png" ? ".png" : ".jpg";
|
|
2538
2541
|
const cachePath = join3(cacheDir, key + ext);
|
|
2539
2542
|
if (existsSync3(cachePath)) {
|
|
2540
2543
|
console.log(`[image-resize] Cache hit for ${width}x${height} image`);
|
|
2541
|
-
return readFileSync2(cachePath);
|
|
2544
|
+
return { buffer: readFileSync2(cachePath), mediaType: outputMediaType };
|
|
2542
2545
|
}
|
|
2543
2546
|
let pipeline = sharp(buffer);
|
|
2544
2547
|
if (needsResize) {
|
|
@@ -2548,25 +2551,27 @@ async function resizeImageIfNeeded(buffer, mediaType) {
|
|
|
2548
2551
|
});
|
|
2549
2552
|
}
|
|
2550
2553
|
let result;
|
|
2551
|
-
if (
|
|
2554
|
+
if (willConvertToJpeg) {
|
|
2552
2555
|
result = await pipeline.jpeg({ quality: 85 }).toBuffer();
|
|
2553
2556
|
} else if (isPng) {
|
|
2554
2557
|
result = await pipeline.png().toBuffer();
|
|
2555
2558
|
} else {
|
|
2556
2559
|
result = await pipeline.jpeg({ quality: 85 }).toBuffer();
|
|
2557
2560
|
}
|
|
2561
|
+
let finalMediaType = outputMediaType;
|
|
2558
2562
|
if (result.length > MAX_FILE_BYTES) {
|
|
2559
2563
|
for (const quality of [70, 50, 30]) {
|
|
2560
2564
|
result = await sharp(buffer).resize(MAX_LONG_EDGE, MAX_LONG_EDGE, { fit: "inside", withoutEnlargement: true }).jpeg({ quality }).toBuffer();
|
|
2561
2565
|
if (result.length <= MAX_FILE_BYTES) break;
|
|
2562
2566
|
}
|
|
2567
|
+
finalMediaType = "image/jpeg";
|
|
2563
2568
|
}
|
|
2564
2569
|
writeFileSync2(cachePath, result);
|
|
2565
2570
|
const resultMeta = await sharp(result).metadata();
|
|
2566
2571
|
console.log(
|
|
2567
|
-
`[image-resize] ${width}x${height} -> ${resultMeta.width}x${resultMeta.height} (${(buffer.length / 1024).toFixed(0)}KB -> ${(result.length / 1024).toFixed(0)}KB)`
|
|
2572
|
+
`[image-resize] ${width}x${height} -> ${resultMeta.width}x${resultMeta.height} (${(buffer.length / 1024).toFixed(0)}KB -> ${(result.length / 1024).toFixed(0)}KB, ${finalMediaType})`
|
|
2568
2573
|
);
|
|
2569
|
-
return result;
|
|
2574
|
+
return { buffer: result, mediaType: finalMediaType };
|
|
2570
2575
|
}
|
|
2571
2576
|
|
|
2572
2577
|
// src/tools/read-file.ts
|
|
@@ -2633,15 +2638,15 @@ Use this to understand existing code, check file contents, view screenshots, or
|
|
|
2633
2638
|
};
|
|
2634
2639
|
}
|
|
2635
2640
|
const rawBuffer = await readFile2(absolutePath);
|
|
2636
|
-
const
|
|
2637
|
-
const
|
|
2638
|
-
const base64 = buffer.toString("base64");
|
|
2641
|
+
const originalMediaType = getImageMediaType(absolutePath);
|
|
2642
|
+
const resized = await resizeImageIfNeeded(rawBuffer, originalMediaType);
|
|
2643
|
+
const base64 = resized.buffer.toString("base64");
|
|
2639
2644
|
return {
|
|
2640
2645
|
success: true,
|
|
2641
2646
|
path: absolutePath,
|
|
2642
2647
|
relativePath: relative(options.workingDirectory, absolutePath),
|
|
2643
|
-
content: `[Image: ${relativePath} (${mediaType}, ${(stats.size / 1024).toFixed(1)}KB)]`,
|
|
2644
|
-
mediaType,
|
|
2648
|
+
content: `[Image: ${relativePath} (${resized.mediaType}, ${(stats.size / 1024).toFixed(1)}KB)]`,
|
|
2649
|
+
mediaType: resized.mediaType,
|
|
2645
2650
|
imageData: base64,
|
|
2646
2651
|
sizeBytes: stats.size
|
|
2647
2652
|
};
|