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.
- package/dist/agent/index.d.ts +3 -3
- package/dist/agent/index.js +28 -17
- package/dist/agent/index.js.map +1 -1
- package/dist/cli.js +43 -25
- package/dist/cli.js.map +1 -1
- package/dist/db/index.d.ts +2 -2
- package/dist/{index-DRscBFFX.d.ts → index-DT1l57s0.d.ts} +25 -25
- package/dist/index.d.ts +5 -5
- package/dist/index.js +43 -25
- package/dist/index.js.map +1 -1
- package/dist/{schema-C7Mm4Ykn.d.ts → schema-XcP0dedO.d.ts} +3 -3
- package/dist/{search-CVVfuBPZ.d.ts → search-CCffrVJE.d.ts} +4 -4
- package/dist/server/index.js +43 -25
- package/dist/server/index.js.map +1 -1
- package/dist/tools/index.d.ts +3 -3
- 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/package-lock.json +3 -3
- /package/web/.next/standalone/web/.next/static/{nZpzcWd5nqIPZFd3PiefU → q5xKLVzzjdkOykOwVu4eK}/_buildManifest.js +0 -0
- /package/web/.next/standalone/web/.next/static/{nZpzcWd5nqIPZFd3PiefU → q5xKLVzzjdkOykOwVu4eK}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/standalone/web/.next/static/{nZpzcWd5nqIPZFd3PiefU → q5xKLVzzjdkOykOwVu4eK}/_ssgManifest.js +0 -0
- /package/web/.next/standalone/web/.next/static/static/{nZpzcWd5nqIPZFd3PiefU → q5xKLVzzjdkOykOwVu4eK}/_buildManifest.js +0 -0
- /package/web/.next/standalone/web/.next/static/static/{nZpzcWd5nqIPZFd3PiefU → q5xKLVzzjdkOykOwVu4eK}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/standalone/web/.next/static/static/{nZpzcWd5nqIPZFd3PiefU → q5xKLVzzjdkOykOwVu4eK}/_ssgManifest.js +0 -0
- /package/web/.next/static/{nZpzcWd5nqIPZFd3PiefU → q5xKLVzzjdkOykOwVu4eK}/_buildManifest.js +0 -0
- /package/web/.next/static/{nZpzcWd5nqIPZFd3PiefU → q5xKLVzzjdkOykOwVu4eK}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{nZpzcWd5nqIPZFd3PiefU → q5xKLVzzjdkOykOwVu4eK}/_ssgManifest.js +0 -0
package/dist/tools/index.d.ts
CHANGED
|
@@ -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-
|
|
4
|
-
export { b as BashToolOptions, d as SearchToolOptions, e as WriteFileToolOptions, c as createBashTool, f as createSearchTool, a as createWriteFileTool } from '../search-
|
|
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: "
|
|
85
|
+
action: "add" | "list" | "mark" | "clear";
|
|
86
86
|
status?: "completed" | "pending" | "in_progress" | "cancelled" | undefined;
|
|
87
87
|
items?: {
|
|
88
88
|
content: string;
|
package/dist/tools/index.js
CHANGED
|
@@ -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 =
|
|
1667
|
-
const
|
|
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 (
|
|
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
|
|
1767
|
-
const
|
|
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
|
};
|