visionclaw 0.1.8 → 0.1.10
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/README.md +3 -0
- package/dist/agent/context.d.ts +4 -2
- package/dist/agent/context.d.ts.map +1 -1
- package/dist/agent/context.js +46 -13
- package/dist/agent/context.js.map +1 -1
- package/dist/agent/loop.d.ts.map +1 -1
- package/dist/agent/loop.js +69 -5
- package/dist/agent/loop.js.map +1 -1
- package/dist/index.js +52 -18
- package/dist/index.js.map +1 -1
- package/dist/logger.d.ts +1 -0
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +29 -3
- package/dist/logger.js.map +1 -1
- package/dist/obs/server.d.ts.map +1 -1
- package/dist/obs/server.js +124 -17
- package/dist/obs/server.js.map +1 -1
- package/dist/reconfigure.d.ts +3 -0
- package/dist/reconfigure.d.ts.map +1 -0
- package/dist/reconfigure.js +199 -0
- package/dist/reconfigure.js.map +1 -0
- package/dist/tools/computer-use.js +1 -1
- package/dist/tools/computer-use.js.map +1 -1
- package/dist/tools/coordinate-resolver.js +5 -5
- package/dist/tools/coordinate-resolver.js.map +1 -1
- package/dist/tools/screenshot.d.ts +28 -0
- package/dist/tools/screenshot.d.ts.map +1 -1
- package/dist/tools/screenshot.js +134 -38
- package/dist/tools/screenshot.js.map +1 -1
- package/package.json +3 -3
|
@@ -5,6 +5,34 @@ export declare const CLAUDE_MAX_PIXELS = 1150000;
|
|
|
5
5
|
* Returns a factor <= 1.0.
|
|
6
6
|
*/
|
|
7
7
|
export declare function getVisionScaleFactor(width: number, height: number): number;
|
|
8
|
+
/**
|
|
9
|
+
* Get image dimensions using system tools (sips on macOS, identify on Linux).
|
|
10
|
+
* Returns { width, height } or null on failure.
|
|
11
|
+
*/
|
|
12
|
+
export declare function getImageDimensions(buffer: Buffer): Promise<{
|
|
13
|
+
width: number;
|
|
14
|
+
height: number;
|
|
15
|
+
} | null>;
|
|
16
|
+
/**
|
|
17
|
+
* Resize a PNG buffer to fit within Claude's vision constraints.
|
|
18
|
+
* Uses system tools (sips on macOS, ImageMagick on Linux).
|
|
19
|
+
* Returns the (possibly resized) buffer.
|
|
20
|
+
*/
|
|
21
|
+
export declare function resizeForVision(buffer: Buffer): Promise<Buffer>;
|
|
22
|
+
/**
|
|
23
|
+
* Resize a base64-encoded image to fit within Claude's vision constraints.
|
|
24
|
+
* Returns the (possibly resized) image as base64.
|
|
25
|
+
*/
|
|
26
|
+
export declare function resizeBase64ForVision(base64: string): Promise<string>;
|
|
27
|
+
/**
|
|
28
|
+
* Download an image from a URL and resize it for Claude's vision constraints.
|
|
29
|
+
* Returns `{ base64, mimeType }` if successful, or `null` on failure.
|
|
30
|
+
* Used to replace URL-referenced images with properly-sized base64 data.
|
|
31
|
+
*/
|
|
32
|
+
export declare function downloadAndResizeForVision(url: string): Promise<{
|
|
33
|
+
base64: string;
|
|
34
|
+
mimeType: string;
|
|
35
|
+
} | null>;
|
|
8
36
|
/**
|
|
9
37
|
* Take a screenshot of the current desktop.
|
|
10
38
|
* Returns the base64-encoded PNG image. Compresses to under 2MB if needed.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screenshot.d.ts","sourceRoot":"","sources":["../../src/tools/screenshot.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"screenshot.d.ts","sourceRoot":"","sources":["../../src/tools/screenshot.ts"],"names":[],"mappings":"AAiBA,eAAO,MAAM,uBAAuB,OAAO,CAAC;AAC5C,eAAO,MAAM,iBAAiB,UAAY,CAAC;AAE3C;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAQ1E;AAsGD;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,MAAM,GACb,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CA4BnD;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAuBrE;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAI3E;AAcD;;;;GAIG;AACH,wBAAsB,0BAA0B,CAC9C,GAAG,EAAE,MAAM,GACV,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAmBtD;AAoCD;;;GAGG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,CA0CtD;AAED,eAAO,MAAM,cAAc,mEA6B1B,CAAC"}
|
package/dist/tools/screenshot.js
CHANGED
|
@@ -3,7 +3,6 @@ import { promisify } from "node:util";
|
|
|
3
3
|
import fs from "node:fs";
|
|
4
4
|
import path from "node:path";
|
|
5
5
|
import os from "node:os";
|
|
6
|
-
import sharp from "sharp";
|
|
7
6
|
import { tool } from "@anthropic-ai/claude-agent-sdk";
|
|
8
7
|
import { logger } from "../logger.js";
|
|
9
8
|
const execAsync = promisify(exec);
|
|
@@ -89,56 +88,153 @@ async function compressWithFfmpeg(inputPath, outputPath, maxColors = 128) {
|
|
|
89
88
|
}
|
|
90
89
|
}
|
|
91
90
|
/**
|
|
92
|
-
* Resize a
|
|
93
|
-
*
|
|
94
|
-
* Returns the
|
|
91
|
+
* Resize a buffer using system tools (sips on macOS, ImageMagick on Linux).
|
|
92
|
+
* Used as a fallback when sharp is not available.
|
|
93
|
+
* Returns the resized buffer, or null on failure.
|
|
95
94
|
*/
|
|
96
|
-
async function
|
|
95
|
+
async function resizeWithSystemTools(buffer, targetW, targetH) {
|
|
96
|
+
const tmpIn = path.join(os.tmpdir(), `visionclaw-resize-in-${Date.now()}.png`);
|
|
97
|
+
const tmpOut = path.join(os.tmpdir(), `visionclaw-resize-out-${Date.now()}.png`);
|
|
97
98
|
try {
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
.resize(targetW, targetH, { fit: "inside" })
|
|
110
|
-
.png()
|
|
111
|
-
.toBuffer();
|
|
112
|
-
logger.debug(`Screenshot resized for vision: ${w}x${h} → ${targetW}x${targetH} (scale=${scale.toFixed(3)}, ${buffer.length} → ${resized.length} bytes)`);
|
|
113
|
-
return resized;
|
|
99
|
+
fs.writeFileSync(tmpIn, buffer);
|
|
100
|
+
if (process.platform === "darwin") {
|
|
101
|
+
await execAsync(`sips -z ${targetH} ${targetW} "${tmpIn}" --out "${tmpOut}"`);
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
await execAsync(`convert "${tmpIn}" -resize ${targetW}x${targetH}! "${tmpOut}"`);
|
|
105
|
+
}
|
|
106
|
+
if (fs.existsSync(tmpOut)) {
|
|
107
|
+
return fs.readFileSync(tmpOut);
|
|
108
|
+
}
|
|
109
|
+
return null;
|
|
114
110
|
}
|
|
115
111
|
catch (e) {
|
|
116
|
-
logger.warn(`
|
|
117
|
-
return
|
|
112
|
+
logger.warn(`System tool resize failed: ${e instanceof Error ? e.message : String(e)}`);
|
|
113
|
+
return null;
|
|
114
|
+
}
|
|
115
|
+
finally {
|
|
116
|
+
try {
|
|
117
|
+
fs.unlinkSync(tmpIn);
|
|
118
|
+
}
|
|
119
|
+
catch { /* noop */ }
|
|
120
|
+
try {
|
|
121
|
+
fs.unlinkSync(tmpOut);
|
|
122
|
+
}
|
|
123
|
+
catch { /* noop */ }
|
|
118
124
|
}
|
|
119
125
|
}
|
|
120
126
|
/**
|
|
121
|
-
*
|
|
122
|
-
*
|
|
127
|
+
* Get image dimensions using system tools (sips on macOS, identify on Linux).
|
|
128
|
+
* Returns { width, height } or null on failure.
|
|
123
129
|
*/
|
|
124
|
-
async function
|
|
125
|
-
|
|
130
|
+
export async function getImageDimensions(buffer) {
|
|
131
|
+
const tmpFile = path.join(os.tmpdir(), `visionclaw-dims-${Date.now()}.png`);
|
|
132
|
+
try {
|
|
133
|
+
fs.writeFileSync(tmpFile, buffer);
|
|
134
|
+
if (process.platform === "darwin") {
|
|
135
|
+
const { stdout } = await execAsync(`sips -g pixelWidth -g pixelHeight "${tmpFile}"`);
|
|
136
|
+
const wMatch = /pixelWidth:\s*(\d+)/.exec(stdout);
|
|
137
|
+
const hMatch = /pixelHeight:\s*(\d+)/.exec(stdout);
|
|
138
|
+
if (wMatch && hMatch) {
|
|
139
|
+
return { width: parseInt(wMatch[1], 10), height: parseInt(hMatch[1], 10) };
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
const { stdout } = await execAsync(`identify -format "%w %h" "${tmpFile}"`);
|
|
144
|
+
const parts = stdout.trim().split(/\s+/);
|
|
145
|
+
if (parts.length >= 2) {
|
|
146
|
+
return { width: parseInt(parts[0], 10), height: parseInt(parts[1], 10) };
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return null;
|
|
150
|
+
}
|
|
151
|
+
catch {
|
|
152
|
+
return null;
|
|
153
|
+
}
|
|
154
|
+
finally {
|
|
155
|
+
try {
|
|
156
|
+
fs.unlinkSync(tmpFile);
|
|
157
|
+
}
|
|
158
|
+
catch { /* noop */ }
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Resize a PNG buffer to fit within Claude's vision constraints.
|
|
163
|
+
* Uses system tools (sips on macOS, ImageMagick on Linux).
|
|
164
|
+
* Returns the (possibly resized) buffer.
|
|
165
|
+
*/
|
|
166
|
+
export async function resizeForVision(buffer) {
|
|
167
|
+
const dims = await getImageDimensions(buffer);
|
|
168
|
+
if (!dims) {
|
|
169
|
+
logger.warn("Could not read image dimensions, keeping original");
|
|
126
170
|
return buffer;
|
|
127
|
-
|
|
171
|
+
}
|
|
172
|
+
const scale = getVisionScaleFactor(dims.width, dims.height);
|
|
173
|
+
if (scale >= 1.0)
|
|
174
|
+
return buffer; // already within limits
|
|
175
|
+
const targetW = Math.max(1, Math.round(dims.width * scale));
|
|
176
|
+
const targetH = Math.max(1, Math.round(dims.height * scale));
|
|
177
|
+
const resized = await resizeWithSystemTools(buffer, targetW, targetH);
|
|
178
|
+
if (resized) {
|
|
179
|
+
logger.debug(`Image resized for vision: ${dims.width}x${dims.height} → ${targetW}x${targetH} (scale=${scale.toFixed(3)}, ${buffer.length} → ${resized.length} bytes)`);
|
|
180
|
+
return resized;
|
|
181
|
+
}
|
|
182
|
+
logger.warn("Image vision resize failed, keeping original");
|
|
183
|
+
return buffer;
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Resize a base64-encoded image to fit within Claude's vision constraints.
|
|
187
|
+
* Returns the (possibly resized) image as base64.
|
|
188
|
+
*/
|
|
189
|
+
export async function resizeBase64ForVision(base64) {
|
|
190
|
+
const buffer = Buffer.from(base64, "base64");
|
|
191
|
+
const resized = await resizeForVision(buffer);
|
|
192
|
+
return resized === buffer ? base64 : resized.toString("base64");
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Detect MIME type from buffer magic bytes.
|
|
196
|
+
* Returns a MIME type string, defaulting to "image/png" if unknown.
|
|
197
|
+
*/
|
|
198
|
+
function detectMimeType(buffer) {
|
|
199
|
+
if (buffer[0] === 0xFF && buffer[1] === 0xD8)
|
|
200
|
+
return "image/jpeg";
|
|
201
|
+
if (buffer[0] === 0x89 && buffer[1] === 0x50)
|
|
202
|
+
return "image/png";
|
|
203
|
+
if (buffer[0] === 0x47 && buffer[1] === 0x49)
|
|
204
|
+
return "image/gif";
|
|
205
|
+
if (buffer[0] === 0x52 && buffer[1] === 0x49)
|
|
206
|
+
return "image/webp";
|
|
207
|
+
return "image/png";
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Download an image from a URL and resize it for Claude's vision constraints.
|
|
211
|
+
* Returns `{ base64, mimeType }` if successful, or `null` on failure.
|
|
212
|
+
* Used to replace URL-referenced images with properly-sized base64 data.
|
|
213
|
+
*/
|
|
214
|
+
export async function downloadAndResizeForVision(url) {
|
|
128
215
|
try {
|
|
129
|
-
const
|
|
130
|
-
|
|
131
|
-
.
|
|
132
|
-
|
|
133
|
-
logger.debug(`Screenshot sharp compress: ${buffer.length} → ${compressed.length} bytes`);
|
|
134
|
-
if (compressed.length <= maxSize)
|
|
135
|
-
return compressed;
|
|
216
|
+
const response = await fetch(url);
|
|
217
|
+
if (!response.ok) {
|
|
218
|
+
logger.warn(`Failed to download image from ${url}: ${response.status}`);
|
|
219
|
+
return null;
|
|
136
220
|
}
|
|
221
|
+
const buffer = Buffer.from(await response.arrayBuffer());
|
|
222
|
+
const mimeType = detectMimeType(buffer);
|
|
223
|
+
const resized = await resizeForVision(buffer);
|
|
224
|
+
return { base64: resized.toString("base64"), mimeType };
|
|
137
225
|
}
|
|
138
226
|
catch (e) {
|
|
139
|
-
logger.warn(`
|
|
227
|
+
logger.warn(`Failed to download/resize image from ${url}: ${e instanceof Error ? e.message : String(e)}`);
|
|
228
|
+
return null;
|
|
140
229
|
}
|
|
141
|
-
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Compress a PNG buffer if it exceeds the size threshold.
|
|
233
|
+
* Uses ffmpeg palette quantization.
|
|
234
|
+
*/
|
|
235
|
+
async function compressIfNeeded(buffer, maxSize = MAX_SCREENSHOT_SIZE) {
|
|
236
|
+
if (buffer.length <= maxSize)
|
|
237
|
+
return buffer;
|
|
142
238
|
const tmpIn = path.join(os.tmpdir(), `visionclaw-compress-in-${Date.now()}.png`);
|
|
143
239
|
const tmpOut = path.join(os.tmpdir(), `visionclaw-compress-out-${Date.now()}.png`);
|
|
144
240
|
try {
|
|
@@ -197,7 +293,7 @@ export async function takeScreenshot() {
|
|
|
197
293
|
const rawBuffer = fs.readFileSync(tmpFile);
|
|
198
294
|
// 1. Resize to fit Claude's vision constraints (reduces TTFT)
|
|
199
295
|
const resized = await resizeForVision(rawBuffer);
|
|
200
|
-
// 2. Compress if over file size threshold (
|
|
296
|
+
// 2. Compress if over file size threshold (ffmpeg)
|
|
201
297
|
const compressed = await compressIfNeeded(resized);
|
|
202
298
|
return compressed.toString("base64");
|
|
203
299
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screenshot.js","sourceRoot":"","sources":["../../src/tools/screenshot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,
|
|
1
|
+
{"version":3,"file":"screenshot.js","sourceRoot":"","sources":["../../src/tools/screenshot.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "visionclaw",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.10",
|
|
4
4
|
"description": "A personal assistant agent that runs on your desktop, receives commands from messaging channels, and executes tasks autonomously.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -26,7 +26,6 @@
|
|
|
26
26
|
"open": "^10.1.0",
|
|
27
27
|
"playwright": "^1.49.0",
|
|
28
28
|
"prompts": "^2.4.2",
|
|
29
|
-
"sharp": "^0.34.5",
|
|
30
29
|
"zod": "^3.24.0"
|
|
31
30
|
},
|
|
32
31
|
"devDependencies": {
|
|
@@ -51,7 +50,8 @@
|
|
|
51
50
|
"start": "node dist/index.js",
|
|
52
51
|
"lint": "eslint src/",
|
|
53
52
|
"lint:fix": "eslint src/ --fix",
|
|
54
|
-
"test": "vitest",
|
|
53
|
+
"test": "vitest run",
|
|
54
|
+
"test:watch": "vitest",
|
|
55
55
|
"test:integration": "vitest run --config vitest.integration.config.ts",
|
|
56
56
|
"get-google-token": "tsx scripts/get-google-token.ts",
|
|
57
57
|
"reconfigure": "tsx scripts/reconfigure.ts",
|