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,7 +1,7 @@
1
1
  import * as ai from 'ai';
2
2
  import { ToolSet } from 'ai';
3
- import { B as BashToolProgress, W as WriteFileProgress, S as SearchToolProgress } from '../search-CVVfuBPZ.js';
4
- export { b as BashToolOptions, d as SearchToolOptions, e as WriteFileToolOptions, c as createBashTool, f as createSearchTool, a as createWriteFileTool } from '../search-CVVfuBPZ.js';
3
+ import { B as BashToolProgress, W as WriteFileProgress, S as SearchToolProgress } from '../search-CCffrVJE.js';
4
+ export { b as BashToolOptions, d as SearchToolOptions, e as WriteFileToolOptions, c as createBashTool, f as createSearchTool, a as createWriteFileTool } from '../search-CCffrVJE.js';
5
5
 
6
6
  interface TaskCompletionSignal {
7
7
  status: 'completed' | 'failed';
@@ -82,7 +82,7 @@ interface TodoToolOptions {
82
82
  sessionId: string;
83
83
  }
84
84
  declare function createTodoTool(options: TodoToolOptions): ai.Tool<{
85
- action: "clear" | "add" | "list" | "mark";
85
+ action: "add" | "list" | "mark" | "clear";
86
86
  status?: "completed" | "pending" | "in_progress" | "cancelled" | undefined;
87
87
  items?: {
88
88
  content: string;
@@ -1649,26 +1649,29 @@ function cacheKey(buffer) {
1649
1649
  return createHash("sha256").update(buffer).digest("hex");
1650
1650
  }
1651
1651
  async function resizeImageIfNeeded(buffer, mediaType) {
1652
+ const inputMediaType = mediaType || "image/png";
1652
1653
  let metadata;
1653
1654
  try {
1654
1655
  metadata = await sharp(buffer).metadata();
1655
1656
  } catch {
1656
- return buffer;
1657
+ return { buffer, mediaType: inputMediaType };
1657
1658
  }
1658
1659
  const { width, height } = metadata;
1659
- if (!width || !height) return buffer;
1660
+ if (!width || !height) return { buffer, mediaType: inputMediaType };
1660
1661
  const longEdge = Math.max(width, height);
1661
1662
  const needsResize = longEdge > MAX_LONG_EDGE;
1662
1663
  const needsShrink = buffer.length > MAX_FILE_BYTES;
1663
- if (!needsResize && !needsShrink) return buffer;
1664
+ if (!needsResize && !needsShrink) return { buffer, mediaType: inputMediaType };
1664
1665
  const key = cacheKey(buffer);
1665
1666
  const cacheDir = getCacheDir();
1666
- const isPng = mediaType?.includes("png");
1667
- const ext = isPng ? ".png" : ".jpg";
1667
+ const isPng = inputMediaType.includes("png");
1668
+ const willConvertToJpeg = isPng && (needsShrink || buffer.length > 2 * 1024 * 1024);
1669
+ const outputMediaType = willConvertToJpeg || !isPng ? "image/jpeg" : "image/png";
1670
+ const ext = outputMediaType === "image/png" ? ".png" : ".jpg";
1668
1671
  const cachePath = join3(cacheDir, key + ext);
1669
1672
  if (existsSync3(cachePath)) {
1670
1673
  console.log(`[image-resize] Cache hit for ${width}x${height} image`);
1671
- return readFileSync2(cachePath);
1674
+ return { buffer: readFileSync2(cachePath), mediaType: outputMediaType };
1672
1675
  }
1673
1676
  let pipeline = sharp(buffer);
1674
1677
  if (needsResize) {
@@ -1678,25 +1681,27 @@ async function resizeImageIfNeeded(buffer, mediaType) {
1678
1681
  });
1679
1682
  }
1680
1683
  let result;
1681
- if (isPng && (needsShrink || buffer.length > 2 * 1024 * 1024)) {
1684
+ if (willConvertToJpeg) {
1682
1685
  result = await pipeline.jpeg({ quality: 85 }).toBuffer();
1683
1686
  } else if (isPng) {
1684
1687
  result = await pipeline.png().toBuffer();
1685
1688
  } else {
1686
1689
  result = await pipeline.jpeg({ quality: 85 }).toBuffer();
1687
1690
  }
1691
+ let finalMediaType = outputMediaType;
1688
1692
  if (result.length > MAX_FILE_BYTES) {
1689
1693
  for (const quality of [70, 50, 30]) {
1690
1694
  result = await sharp(buffer).resize(MAX_LONG_EDGE, MAX_LONG_EDGE, { fit: "inside", withoutEnlargement: true }).jpeg({ quality }).toBuffer();
1691
1695
  if (result.length <= MAX_FILE_BYTES) break;
1692
1696
  }
1697
+ finalMediaType = "image/jpeg";
1693
1698
  }
1694
1699
  writeFileSync2(cachePath, result);
1695
1700
  const resultMeta = await sharp(result).metadata();
1696
1701
  console.log(
1697
- `[image-resize] ${width}x${height} -> ${resultMeta.width}x${resultMeta.height} (${(buffer.length / 1024).toFixed(0)}KB -> ${(result.length / 1024).toFixed(0)}KB)`
1702
+ `[image-resize] ${width}x${height} -> ${resultMeta.width}x${resultMeta.height} (${(buffer.length / 1024).toFixed(0)}KB -> ${(result.length / 1024).toFixed(0)}KB, ${finalMediaType})`
1698
1703
  );
1699
- return result;
1704
+ return { buffer: result, mediaType: finalMediaType };
1700
1705
  }
1701
1706
 
1702
1707
  // src/tools/read-file.ts
@@ -1763,15 +1768,15 @@ Use this to understand existing code, check file contents, view screenshots, or
1763
1768
  };
1764
1769
  }
1765
1770
  const rawBuffer = await readFile2(absolutePath);
1766
- const mediaType = getImageMediaType(absolutePath);
1767
- const buffer = await resizeImageIfNeeded(rawBuffer, mediaType);
1768
- const base64 = buffer.toString("base64");
1771
+ const originalMediaType = getImageMediaType(absolutePath);
1772
+ const resized = await resizeImageIfNeeded(rawBuffer, originalMediaType);
1773
+ const base64 = resized.buffer.toString("base64");
1769
1774
  return {
1770
1775
  success: true,
1771
1776
  path: absolutePath,
1772
1777
  relativePath: relative(options.workingDirectory, absolutePath),
1773
- content: `[Image: ${relativePath} (${mediaType}, ${(stats.size / 1024).toFixed(1)}KB)]`,
1774
- mediaType,
1778
+ content: `[Image: ${relativePath} (${resized.mediaType}, ${(stats.size / 1024).toFixed(1)}KB)]`,
1779
+ mediaType: resized.mediaType,
1775
1780
  imageData: base64,
1776
1781
  sizeBytes: stats.size
1777
1782
  };