sparkecoder 0.1.76 → 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.
Files changed (94) hide show
  1. package/dist/agent/index.d.ts +3 -3
  2. package/dist/agent/index.js +28 -17
  3. package/dist/agent/index.js.map +1 -1
  4. package/dist/cli.js +43 -25
  5. package/dist/cli.js.map +1 -1
  6. package/dist/db/index.d.ts +2 -2
  7. package/dist/{index-DRscBFFX.d.ts → index-DT1l57s0.d.ts} +25 -25
  8. package/dist/index.d.ts +5 -5
  9. package/dist/index.js +43 -25
  10. package/dist/index.js.map +1 -1
  11. package/dist/{schema-C7Mm4Ykn.d.ts → schema-XcP0dedO.d.ts} +3 -3
  12. package/dist/{search-CVVfuBPZ.d.ts → search-CCffrVJE.d.ts} +4 -4
  13. package/dist/server/index.js +43 -25
  14. package/dist/server/index.js.map +1 -1
  15. package/dist/tools/index.d.ts +3 -3
  16. package/dist/tools/index.js +19 -14
  17. package/dist/tools/index.js.map +1 -1
  18. package/package.json +1 -1
  19. package/web/.next/BUILD_ID +1 -1
  20. package/web/.next/standalone/web/.next/BUILD_ID +1 -1
  21. package/web/.next/standalone/web/.next/build-manifest.json +2 -2
  22. package/web/.next/standalone/web/.next/prerender-manifest.json +3 -3
  23. package/web/.next/standalone/web/.next/server/app/_global-error.html +2 -2
  24. package/web/.next/standalone/web/.next/server/app/_global-error.rsc +1 -1
  25. package/web/.next/standalone/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  26. package/web/.next/standalone/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  27. package/web/.next/standalone/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  28. package/web/.next/standalone/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  29. package/web/.next/standalone/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  30. package/web/.next/standalone/web/.next/server/app/_not-found.html +1 -1
  31. package/web/.next/standalone/web/.next/server/app/_not-found.rsc +1 -1
  32. package/web/.next/standalone/web/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  33. package/web/.next/standalone/web/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  34. package/web/.next/standalone/web/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  35. package/web/.next/standalone/web/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  36. package/web/.next/standalone/web/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  37. package/web/.next/standalone/web/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  38. package/web/.next/standalone/web/.next/server/app/docs/installation.html +2 -2
  39. package/web/.next/standalone/web/.next/server/app/docs/installation.rsc +1 -1
  40. package/web/.next/standalone/web/.next/server/app/docs/installation.segments/_full.segment.rsc +1 -1
  41. package/web/.next/standalone/web/.next/server/app/docs/installation.segments/_head.segment.rsc +1 -1
  42. package/web/.next/standalone/web/.next/server/app/docs/installation.segments/_index.segment.rsc +1 -1
  43. package/web/.next/standalone/web/.next/server/app/docs/installation.segments/_tree.segment.rsc +1 -1
  44. package/web/.next/standalone/web/.next/server/app/docs/installation.segments/docs/installation/__PAGE__.segment.rsc +1 -1
  45. package/web/.next/standalone/web/.next/server/app/docs/installation.segments/docs/installation.segment.rsc +1 -1
  46. package/web/.next/standalone/web/.next/server/app/docs/installation.segments/docs.segment.rsc +1 -1
  47. package/web/.next/standalone/web/.next/server/app/docs/skills.html +2 -2
  48. package/web/.next/standalone/web/.next/server/app/docs/skills.rsc +1 -1
  49. package/web/.next/standalone/web/.next/server/app/docs/skills.segments/_full.segment.rsc +1 -1
  50. package/web/.next/standalone/web/.next/server/app/docs/skills.segments/_head.segment.rsc +1 -1
  51. package/web/.next/standalone/web/.next/server/app/docs/skills.segments/_index.segment.rsc +1 -1
  52. package/web/.next/standalone/web/.next/server/app/docs/skills.segments/_tree.segment.rsc +1 -1
  53. package/web/.next/standalone/web/.next/server/app/docs/skills.segments/docs/skills/__PAGE__.segment.rsc +1 -1
  54. package/web/.next/standalone/web/.next/server/app/docs/skills.segments/docs/skills.segment.rsc +1 -1
  55. package/web/.next/standalone/web/.next/server/app/docs/skills.segments/docs.segment.rsc +1 -1
  56. package/web/.next/standalone/web/.next/server/app/docs/tools.html +2 -2
  57. package/web/.next/standalone/web/.next/server/app/docs/tools.rsc +1 -1
  58. package/web/.next/standalone/web/.next/server/app/docs/tools.segments/_full.segment.rsc +1 -1
  59. package/web/.next/standalone/web/.next/server/app/docs/tools.segments/_head.segment.rsc +1 -1
  60. package/web/.next/standalone/web/.next/server/app/docs/tools.segments/_index.segment.rsc +1 -1
  61. package/web/.next/standalone/web/.next/server/app/docs/tools.segments/_tree.segment.rsc +1 -1
  62. package/web/.next/standalone/web/.next/server/app/docs/tools.segments/docs/tools/__PAGE__.segment.rsc +1 -1
  63. package/web/.next/standalone/web/.next/server/app/docs/tools.segments/docs/tools.segment.rsc +1 -1
  64. package/web/.next/standalone/web/.next/server/app/docs/tools.segments/docs.segment.rsc +1 -1
  65. package/web/.next/standalone/web/.next/server/app/docs.html +2 -2
  66. package/web/.next/standalone/web/.next/server/app/docs.rsc +1 -1
  67. package/web/.next/standalone/web/.next/server/app/docs.segments/_full.segment.rsc +1 -1
  68. package/web/.next/standalone/web/.next/server/app/docs.segments/_head.segment.rsc +1 -1
  69. package/web/.next/standalone/web/.next/server/app/docs.segments/_index.segment.rsc +1 -1
  70. package/web/.next/standalone/web/.next/server/app/docs.segments/_tree.segment.rsc +1 -1
  71. package/web/.next/standalone/web/.next/server/app/docs.segments/docs/__PAGE__.segment.rsc +1 -1
  72. package/web/.next/standalone/web/.next/server/app/docs.segments/docs.segment.rsc +1 -1
  73. package/web/.next/standalone/web/.next/server/app/index.html +1 -1
  74. package/web/.next/standalone/web/.next/server/app/index.rsc +1 -1
  75. package/web/.next/standalone/web/.next/server/app/index.segments/!KG1haW4p/__PAGE__.segment.rsc +1 -1
  76. package/web/.next/standalone/web/.next/server/app/index.segments/!KG1haW4p.segment.rsc +1 -1
  77. package/web/.next/standalone/web/.next/server/app/index.segments/_full.segment.rsc +1 -1
  78. package/web/.next/standalone/web/.next/server/app/index.segments/_head.segment.rsc +1 -1
  79. package/web/.next/standalone/web/.next/server/app/index.segments/_index.segment.rsc +1 -1
  80. package/web/.next/standalone/web/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  81. package/web/.next/standalone/web/.next/server/pages/404.html +1 -1
  82. package/web/.next/standalone/web/.next/server/pages/500.html +2 -2
  83. package/web/.next/standalone/web/.next/server/server-reference-manifest.js +1 -1
  84. package/web/.next/standalone/web/.next/server/server-reference-manifest.json +1 -1
  85. package/web/.next/standalone/web/package-lock.json +3 -3
  86. /package/web/.next/standalone/web/.next/static/{nZpzcWd5nqIPZFd3PiefU → q5xKLVzzjdkOykOwVu4eK}/_buildManifest.js +0 -0
  87. /package/web/.next/standalone/web/.next/static/{nZpzcWd5nqIPZFd3PiefU → q5xKLVzzjdkOykOwVu4eK}/_clientMiddlewareManifest.json +0 -0
  88. /package/web/.next/standalone/web/.next/static/{nZpzcWd5nqIPZFd3PiefU → q5xKLVzzjdkOykOwVu4eK}/_ssgManifest.js +0 -0
  89. /package/web/.next/standalone/web/.next/static/static/{nZpzcWd5nqIPZFd3PiefU → q5xKLVzzjdkOykOwVu4eK}/_buildManifest.js +0 -0
  90. /package/web/.next/standalone/web/.next/static/static/{nZpzcWd5nqIPZFd3PiefU → q5xKLVzzjdkOykOwVu4eK}/_clientMiddlewareManifest.json +0 -0
  91. /package/web/.next/standalone/web/.next/static/static/{nZpzcWd5nqIPZFd3PiefU → q5xKLVzzjdkOykOwVu4eK}/_ssgManifest.js +0 -0
  92. /package/web/.next/static/{nZpzcWd5nqIPZFd3PiefU → q5xKLVzzjdkOykOwVu4eK}/_buildManifest.js +0 -0
  93. /package/web/.next/static/{nZpzcWd5nqIPZFd3PiefU → q5xKLVzzjdkOykOwVu4eK}/_clientMiddlewareManifest.json +0 -0
  94. /package/web/.next/static/{nZpzcWd5nqIPZFd3PiefU → q5xKLVzzjdkOykOwVu4eK}/_ssgManifest.js +0 -0
@@ -1,6 +1,6 @@
1
1
  import 'ai';
2
- import '../schema-C7Mm4Ykn.js';
3
- export { A as Agent, a as AgentOptions, b as AgentRunOptions, c as AgentStreamResult, C as ContextManager, M as MessageAttachment, d as buildSystemPrompt, e as buildTaskPromptAddendum } from '../index-DRscBFFX.js';
4
- import '../search-CVVfuBPZ.js';
2
+ import '../schema-XcP0dedO.js';
3
+ export { A as Agent, a as AgentOptions, b as AgentRunOptions, c as AgentStreamResult, C as ContextManager, M as MessageAttachment, d as buildSystemPrompt, e as buildTaskPromptAddendum } from '../index-DT1l57s0.js';
4
+ import '../search-CCffrVJE.js';
5
5
  import 'drizzle-orm/sqlite-core';
6
6
  import 'zod';
@@ -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 = mediaType?.includes("png");
2537
- const ext = isPng ? ".png" : ".jpg";
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 (isPng && (needsShrink || buffer.length > 2 * 1024 * 1024)) {
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 mediaType = getImageMediaType(absolutePath);
2637
- const buffer = await resizeImageIfNeeded(rawBuffer, mediaType);
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
  };
@@ -6285,6 +6290,13 @@ function truncateWriteFileInput(input) {
6285
6290
  return out;
6286
6291
  }
6287
6292
  var approvalResolvers = /* @__PURE__ */ new Map();
6293
+ function stripDataUrlPrefix(data) {
6294
+ const commaIdx = data.indexOf(",");
6295
+ if (commaIdx !== -1 && data.startsWith("data:")) {
6296
+ return data.slice(commaIdx + 1);
6297
+ }
6298
+ return data;
6299
+ }
6288
6300
  var Agent = class _Agent {
6289
6301
  session;
6290
6302
  context;
@@ -6385,8 +6397,7 @@ ${prompt}` });
6385
6397
  if (attachment.type === "image") {
6386
6398
  contentParts.push({
6387
6399
  type: "image",
6388
- image: attachment.data,
6389
- // base64 data URL or raw base64
6400
+ image: stripDataUrlPrefix(attachment.data),
6390
6401
  mediaType: attachment.mediaType,
6391
6402
  filename: attachment.filename,
6392
6403
  savedPath: attachment.savedPath
@@ -6394,7 +6405,7 @@ ${prompt}` });
6394
6405
  } else {
6395
6406
  contentParts.push({
6396
6407
  type: "file",
6397
- data: attachment.data,
6408
+ data: stripDataUrlPrefix(attachment.data),
6398
6409
  mediaType: attachment.mediaType || "application/octet-stream",
6399
6410
  filename: attachment.filename,
6400
6411
  savedPath: attachment.savedPath