@elizaos/plugin-vision 1.2.1 → 2.0.0-alpha.1

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 (105) hide show
  1. package/build.config.ts +53 -53
  2. package/dist/index.js +6716 -67
  3. package/dist/index.js.map +33 -1
  4. package/dist/workers/florence2-worker.js +112304 -307
  5. package/dist/workers/florence2-worker.js.map +92 -1
  6. package/dist/workers/ocr-worker.js +119718 -339
  7. package/dist/workers/ocr-worker.js.map +137 -1
  8. package/dist/workers/screen-capture-worker.js +350 -418
  9. package/dist/workers/screen-capture-worker.js.map +11 -1
  10. package/package.json +13 -17
  11. package/README.md +0 -270
  12. package/dist/action.d.ts +0 -8
  13. package/dist/action.js +0 -1212
  14. package/dist/action.js.map +0 -1
  15. package/dist/audio-capture-stream.d.ts +0 -42
  16. package/dist/audio-capture-stream.js +0 -516
  17. package/dist/audio-capture-stream.js.map +0 -1
  18. package/dist/audio-capture.d.ts +0 -25
  19. package/dist/audio-capture.js +0 -412
  20. package/dist/audio-capture.js.map +0 -1
  21. package/dist/basic.test.d.ts +0 -1
  22. package/dist/basic.test.js +0 -97
  23. package/dist/basic.test.js.map +0 -1
  24. package/dist/config.d.ts +0 -73
  25. package/dist/config.js +0 -254
  26. package/dist/config.js.map +0 -1
  27. package/dist/entity-tracker.d.ts +0 -32
  28. package/dist/entity-tracker.js +0 -361
  29. package/dist/entity-tracker.js.map +0 -1
  30. package/dist/errors.d.ts +0 -67
  31. package/dist/errors.js +0 -395
  32. package/dist/errors.js.map +0 -1
  33. package/dist/face-recognition.d.ts +0 -31
  34. package/dist/face-recognition.js +0 -332
  35. package/dist/face-recognition.js.map +0 -1
  36. package/dist/florence2-local.d.ts +0 -25
  37. package/dist/florence2-local.js +0 -280
  38. package/dist/florence2-local.js.map +0 -1
  39. package/dist/florence2-model.d.ts +0 -36
  40. package/dist/florence2-model.js +0 -503
  41. package/dist/florence2-model.js.map +0 -1
  42. package/dist/index.d.ts +0 -3
  43. package/dist/ocr-service-real.d.ts +0 -32
  44. package/dist/ocr-service-real.js +0 -396
  45. package/dist/ocr-service-real.js.map +0 -1
  46. package/dist/ocr-service.d.ts +0 -28
  47. package/dist/ocr-service.js +0 -216
  48. package/dist/ocr-service.js.map +0 -1
  49. package/dist/provider.d.ts +0 -2
  50. package/dist/provider.js +0 -285
  51. package/dist/provider.js.map +0 -1
  52. package/dist/screen-capture.d.ts +0 -16
  53. package/dist/screen-capture.js +0 -302
  54. package/dist/screen-capture.js.map +0 -1
  55. package/dist/service.d.ts +0 -73
  56. package/dist/service.js +0 -1662
  57. package/dist/service.js.map +0 -1
  58. package/dist/tests/e2e/index.d.ts +0 -8
  59. package/dist/tests/e2e/index.js +0 -33
  60. package/dist/tests/e2e/index.js.map +0 -1
  61. package/dist/tests/e2e/run-local.d.ts +0 -2
  62. package/dist/tests/e2e/run-local.js +0 -166
  63. package/dist/tests/e2e/run-local.js.map +0 -1
  64. package/dist/tests/e2e/screen-vision.d.ts +0 -11
  65. package/dist/tests/e2e/screen-vision.js +0 -384
  66. package/dist/tests/e2e/screen-vision.js.map +0 -1
  67. package/dist/tests/e2e/vision-autonomy.d.ts +0 -11
  68. package/dist/tests/e2e/vision-autonomy.js +0 -375
  69. package/dist/tests/e2e/vision-autonomy.js.map +0 -1
  70. package/dist/tests/e2e/vision-basic.d.ts +0 -11
  71. package/dist/tests/e2e/vision-basic.js +0 -434
  72. package/dist/tests/e2e/vision-basic.js.map +0 -1
  73. package/dist/tests/e2e/vision-capture-log.d.ts +0 -11
  74. package/dist/tests/e2e/vision-capture-log.js +0 -302
  75. package/dist/tests/e2e/vision-capture-log.js.map +0 -1
  76. package/dist/tests/e2e/vision-runtime.d.ts +0 -11
  77. package/dist/tests/e2e/vision-runtime.js +0 -357
  78. package/dist/tests/e2e/vision-runtime.js.map +0 -1
  79. package/dist/tests/e2e/vision-worker-tests.d.ts +0 -11
  80. package/dist/tests/e2e/vision-worker-tests.js +0 -466
  81. package/dist/tests/e2e/vision-worker-tests.js.map +0 -1
  82. package/dist/tests/test-pattern-generator.d.ts +0 -40
  83. package/dist/tests/test-pattern-generator.js +0 -191
  84. package/dist/tests/test-pattern-generator.js.map +0 -1
  85. package/dist/tests.d.ts +0 -3
  86. package/dist/tests.js +0 -11
  87. package/dist/tests.js.map +0 -1
  88. package/dist/types.d.ts +0 -222
  89. package/dist/types.js +0 -16
  90. package/dist/types.js.map +0 -1
  91. package/dist/vision-models.d.ts +0 -47
  92. package/dist/vision-models.js +0 -501
  93. package/dist/vision-models.js.map +0 -1
  94. package/dist/vision-worker-manager.d.ts +0 -61
  95. package/dist/vision-worker-manager.js +0 -668
  96. package/dist/vision-worker-manager.js.map +0 -1
  97. package/dist/workers/florence2-worker-simple.d.ts +0 -13
  98. package/dist/workers/florence2-worker-simple.js +0 -121
  99. package/dist/workers/florence2-worker-simple.js.map +0 -1
  100. package/dist/workers/florence2-worker.d.ts +0 -1
  101. package/dist/workers/ocr-worker.d.ts +0 -1
  102. package/dist/workers/screen-capture-worker.d.ts +0 -1
  103. package/dist/workers/worker-logger.d.ts +0 -9
  104. package/dist/workers/worker-logger.js +0 -95
  105. package/dist/workers/worker-logger.js.map +0 -1
@@ -1,302 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __generator = (this && this.__generator) || function (thisArg, body) {
12
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
13
- return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
- function verb(n) { return function (v) { return step([n, v]); }; }
15
- function step(op) {
16
- if (f) throw new TypeError("Generator is already executing.");
17
- while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
- if (y = 0, t) op = [op[0] & 2, t.value];
20
- switch (op[0]) {
21
- case 0: case 1: t = op; break;
22
- case 4: _.label++; return { value: op[1], done: false };
23
- case 5: _.label++; y = op[1]; op = [0]; continue;
24
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
- default:
26
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
- if (t[2]) _.ops.pop();
31
- _.trys.pop(); continue;
32
- }
33
- op = body.call(thisArg, _);
34
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
- }
37
- };
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.ScreenCaptureService = void 0;
40
- var core_1 = require("@elizaos/core");
41
- var child_process_1 = require("child_process");
42
- var util_1 = require("util");
43
- var fs = require("fs/promises");
44
- var path = require("path");
45
- var sharp_1 = require("sharp");
46
- var execAsync = (0, util_1.promisify)(child_process_1.exec);
47
- var ScreenCaptureService = /** @class */ (function () {
48
- function ScreenCaptureService(config) {
49
- this.activeTileIndex = 0;
50
- this.lastCapture = null;
51
- this.config = config;
52
- }
53
- ScreenCaptureService.prototype.getScreenInfo = function () {
54
- return __awaiter(this, void 0, void 0, function () {
55
- var platform, stdout, data, display, resolution, match, stdout, match, stdout, width, height, error_1;
56
- var _a, _b, _c, _d;
57
- return __generator(this, function (_e) {
58
- switch (_e.label) {
59
- case 0:
60
- platform = process.platform;
61
- _e.label = 1;
62
- case 1:
63
- _e.trys.push([1, 8, , 9]);
64
- if (!(platform === 'darwin')) return [3 /*break*/, 3];
65
- return [4 /*yield*/, execAsync('system_profiler SPDisplaysDataType -json')];
66
- case 2:
67
- stdout = (_e.sent()).stdout;
68
- data = JSON.parse(stdout);
69
- if (data.SPDisplaysDataType && data.SPDisplaysDataType[0]) {
70
- display = data.SPDisplaysDataType[0];
71
- resolution = (_b = (_a = display._items) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.native_resolution;
72
- if (resolution) {
73
- match = resolution.match(/(\d+) x (\d+)/);
74
- if (match) {
75
- return [2 /*return*/, {
76
- width: parseInt(match[1], 10),
77
- height: parseInt(match[2], 10),
78
- }];
79
- }
80
- }
81
- }
82
- return [3 /*break*/, 7];
83
- case 3:
84
- if (!(platform === 'linux')) return [3 /*break*/, 5];
85
- return [4 /*yield*/, execAsync('xrandr | grep " connected primary"')];
86
- case 4:
87
- stdout = (_e.sent()).stdout;
88
- match = stdout.match(/(\d+)x(\d+)/);
89
- if (match) {
90
- return [2 /*return*/, {
91
- width: parseInt(match[1], 10),
92
- height: parseInt(match[2], 10),
93
- }];
94
- }
95
- return [3 /*break*/, 7];
96
- case 5:
97
- if (!(platform === 'win32')) return [3 /*break*/, 7];
98
- return [4 /*yield*/, execAsync('wmic path Win32_VideoController get CurrentHorizontalResolution,CurrentVerticalResolution /value')];
99
- case 6:
100
- stdout = (_e.sent()).stdout;
101
- width = (_c = stdout.match(/CurrentHorizontalResolution=(\d+)/)) === null || _c === void 0 ? void 0 : _c[1];
102
- height = (_d = stdout.match(/CurrentVerticalResolution=(\d+)/)) === null || _d === void 0 ? void 0 : _d[1];
103
- if (width && height) {
104
- return [2 /*return*/, {
105
- width: parseInt(width, 10),
106
- height: parseInt(height, 10),
107
- }];
108
- }
109
- _e.label = 7;
110
- case 7: return [3 /*break*/, 9];
111
- case 8:
112
- error_1 = _e.sent();
113
- core_1.logger.error('[ScreenCapture] Failed to get screen info:', error_1);
114
- return [3 /*break*/, 9];
115
- case 9:
116
- // Default fallback
117
- return [2 /*return*/, { width: 1920, height: 1080 }];
118
- }
119
- });
120
- });
121
- };
122
- ScreenCaptureService.prototype.captureScreen = function () {
123
- return __awaiter(this, void 0, void 0, function () {
124
- var tempFile, imageBuffer, image, metadata, width, height, tileSize, tiles, row, col, x, y, tileWidth, tileHeight, centerRow, centerCol, activeTile, tileBuffer, error_2, capture, error_3;
125
- return __generator(this, function (_a) {
126
- switch (_a.label) {
127
- case 0:
128
- tempFile = path.join(process.cwd(), "temp_screen_".concat(Date.now(), ".png"));
129
- _a.label = 1;
130
- case 1:
131
- _a.trys.push([1, 10, , 12]);
132
- // Capture the screen
133
- return [4 /*yield*/, this.captureScreenToFile(tempFile)];
134
- case 2:
135
- // Capture the screen
136
- _a.sent();
137
- return [4 /*yield*/, fs.readFile(tempFile)];
138
- case 3:
139
- imageBuffer = _a.sent();
140
- image = (0, sharp_1.default)(imageBuffer);
141
- return [4 /*yield*/, image.metadata()];
142
- case 4:
143
- metadata = _a.sent();
144
- width = metadata.width || 1920;
145
- height = metadata.height || 1080;
146
- tileSize = this.config.tileSize || 256;
147
- tiles = [];
148
- for (row = 0; row < Math.ceil(height / tileSize); row++) {
149
- for (col = 0; col < Math.ceil(width / tileSize); col++) {
150
- x = col * tileSize;
151
- y = row * tileSize;
152
- tileWidth = Math.min(tileSize, width - x);
153
- tileHeight = Math.min(tileSize, height - y);
154
- tiles.push({
155
- id: "tile-".concat(row, "-").concat(col),
156
- row: row,
157
- col: col,
158
- x: x,
159
- y: y,
160
- width: tileWidth,
161
- height: tileHeight,
162
- });
163
- }
164
- }
165
- // Process active tile based on order
166
- if (this.config.tileProcessingOrder === 'priority') {
167
- centerRow = Math.floor(tiles.length / 2 / Math.ceil(width / tileSize));
168
- centerCol = Math.floor((tiles.length / 2) % Math.ceil(width / tileSize));
169
- this.activeTileIndex = centerRow * Math.ceil(width / tileSize) + centerCol;
170
- }
171
- else if (this.config.tileProcessingOrder === 'random') {
172
- this.activeTileIndex = Math.floor(Math.random() * tiles.length);
173
- }
174
- else {
175
- // Sequential
176
- this.activeTileIndex = (this.activeTileIndex + 1) % tiles.length;
177
- }
178
- activeTile = tiles[this.activeTileIndex];
179
- if (!activeTile) return [3 /*break*/, 8];
180
- _a.label = 5;
181
- case 5:
182
- _a.trys.push([5, 7, , 8]);
183
- return [4 /*yield*/, image
184
- .extract({
185
- left: activeTile.x,
186
- top: activeTile.y,
187
- width: activeTile.width,
188
- height: activeTile.height,
189
- })
190
- .png()
191
- .toBuffer()];
192
- case 6:
193
- tileBuffer = _a.sent();
194
- activeTile.data = tileBuffer;
195
- return [3 /*break*/, 8];
196
- case 7:
197
- error_2 = _a.sent();
198
- core_1.logger.error('[ScreenCapture] Failed to extract tile:', error_2);
199
- return [3 /*break*/, 8];
200
- case 8:
201
- // Clean up temp file
202
- return [4 /*yield*/, fs.unlink(tempFile).catch(function () { })];
203
- case 9:
204
- // Clean up temp file
205
- _a.sent();
206
- capture = {
207
- timestamp: Date.now(),
208
- width: width,
209
- height: height,
210
- data: imageBuffer,
211
- tiles: tiles,
212
- };
213
- this.lastCapture = capture;
214
- return [2 /*return*/, capture];
215
- case 10:
216
- error_3 = _a.sent();
217
- // Clean up temp file on error
218
- return [4 /*yield*/, fs.unlink(tempFile).catch(function () { })];
219
- case 11:
220
- // Clean up temp file on error
221
- _a.sent();
222
- throw error_3;
223
- case 12: return [2 /*return*/];
224
- }
225
- });
226
- });
227
- };
228
- ScreenCaptureService.prototype.captureScreenToFile = function (outputPath) {
229
- return __awaiter(this, void 0, void 0, function () {
230
- var platform, _error_1, script, error_4;
231
- return __generator(this, function (_a) {
232
- switch (_a.label) {
233
- case 0:
234
- platform = process.platform;
235
- _a.label = 1;
236
- case 1:
237
- _a.trys.push([1, 13, , 14]);
238
- if (!(platform === 'darwin')) return [3 /*break*/, 3];
239
- // macOS: Use screencapture
240
- return [4 /*yield*/, execAsync("screencapture -x \"".concat(outputPath, "\""))];
241
- case 2:
242
- // macOS: Use screencapture
243
- _a.sent();
244
- return [3 /*break*/, 12];
245
- case 3:
246
- if (!(platform === 'linux')) return [3 /*break*/, 9];
247
- _a.label = 4;
248
- case 4:
249
- _a.trys.push([4, 6, , 8]);
250
- return [4 /*yield*/, execAsync("scrot \"".concat(outputPath, "\""))];
251
- case 5:
252
- _a.sent();
253
- return [3 /*break*/, 8];
254
- case 6:
255
- _error_1 = _a.sent();
256
- // Fallback to gnome-screenshot
257
- return [4 /*yield*/, execAsync("gnome-screenshot -f \"".concat(outputPath, "\""))];
258
- case 7:
259
- // Fallback to gnome-screenshot
260
- _a.sent();
261
- return [3 /*break*/, 8];
262
- case 8: return [3 /*break*/, 12];
263
- case 9:
264
- if (!(platform === 'win32')) return [3 /*break*/, 11];
265
- script = "\n Add-Type -AssemblyName System.Windows.Forms;\n Add-Type -AssemblyName System.Drawing;\n $screen = [System.Windows.Forms.Screen]::PrimaryScreen.Bounds;\n $bitmap = New-Object System.Drawing.Bitmap $screen.Width, $screen.Height;\n $graphics = [System.Drawing.Graphics]::FromImage($bitmap);\n $graphics.CopyFromScreen($screen.Location, [System.Drawing.Point]::Empty, $screen.Size);\n $bitmap.Save('".concat(outputPath.replace(/\\/g, '\\\\'), "');\n $graphics.Dispose();\n $bitmap.Dispose();\n ");
266
- return [4 /*yield*/, execAsync("powershell -Command \"".concat(script.replace(/\n/g, ' '), "\""))];
267
- case 10:
268
- _a.sent();
269
- return [3 /*break*/, 12];
270
- case 11: throw new Error("Unsupported platform: ".concat(platform));
271
- case 12: return [3 /*break*/, 14];
272
- case 13:
273
- error_4 = _a.sent();
274
- core_1.logger.error('[ScreenCapture] Screen capture failed:', error_4);
275
- // Provide helpful error messages
276
- if (platform === 'linux' && error_4.message.includes('command not found')) {
277
- throw new Error('Screen capture tool not found. Install with: sudo apt-get install scrot');
278
- }
279
- throw error_4;
280
- case 14: return [2 /*return*/];
281
- }
282
- });
283
- });
284
- };
285
- ScreenCaptureService.prototype.getActiveTile = function () {
286
- if (!this.lastCapture || !this.lastCapture.tiles[this.activeTileIndex]) {
287
- return null;
288
- }
289
- return this.lastCapture.tiles[this.activeTileIndex];
290
- };
291
- ScreenCaptureService.prototype.getAllTiles = function () {
292
- var _a;
293
- return ((_a = this.lastCapture) === null || _a === void 0 ? void 0 : _a.tiles) || [];
294
- };
295
- ScreenCaptureService.prototype.getProcessedTiles = function () {
296
- var _a;
297
- return ((_a = this.lastCapture) === null || _a === void 0 ? void 0 : _a.tiles.filter(function (t) { return t.analysis; })) || [];
298
- };
299
- return ScreenCaptureService;
300
- }());
301
- exports.ScreenCaptureService = ScreenCaptureService;
302
- //# sourceMappingURL=screen-capture.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"screen-capture.js","sourceRoot":"","sources":["../src/screen-capture.ts"],"names":[],"mappings":"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","sourcesContent":["import { logger } from '@elizaos/core';\nimport type { ScreenCapture, ScreenTile, VisionConfig } from './types';\nimport { exec } from 'child_process';\nimport { promisify } from 'util';\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\nimport sharp from 'sharp';\n\nconst execAsync = promisify(exec);\n\nexport class ScreenCaptureService {\n private config: VisionConfig;\n private activeTileIndex = 0;\n private lastCapture: ScreenCapture | null = null;\n\n constructor(config: VisionConfig) {\n this.config = config;\n }\n\n async getScreenInfo(): Promise<{ width: number; height: number } | null> {\n const platform = process.platform;\n\n try {\n if (platform === 'darwin') {\n // macOS: Use system_profiler\n const { stdout } = await execAsync('system_profiler SPDisplaysDataType -json');\n const data = JSON.parse(stdout);\n\n if (data.SPDisplaysDataType && data.SPDisplaysDataType[0]) {\n const display = data.SPDisplaysDataType[0];\n const resolution = display._items?.[0]?.native_resolution;\n if (resolution) {\n const match = resolution.match(/(\\d+) x (\\d+)/);\n if (match) {\n return {\n width: parseInt(match[1], 10),\n height: parseInt(match[2], 10),\n };\n }\n }\n }\n } else if (platform === 'linux') {\n // Linux: Use xrandr\n const { stdout } = await execAsync('xrandr | grep \" connected primary\"');\n const match = stdout.match(/(\\d+)x(\\d+)/);\n if (match) {\n return {\n width: parseInt(match[1], 10),\n height: parseInt(match[2], 10),\n };\n }\n } else if (platform === 'win32') {\n // Windows: Use wmic\n const { stdout } = await execAsync(\n 'wmic path Win32_VideoController get CurrentHorizontalResolution,CurrentVerticalResolution /value'\n );\n const width = stdout.match(/CurrentHorizontalResolution=(\\d+)/)?.[1];\n const height = stdout.match(/CurrentVerticalResolution=(\\d+)/)?.[1];\n if (width && height) {\n return {\n width: parseInt(width, 10),\n height: parseInt(height, 10),\n };\n }\n }\n } catch (error) {\n logger.error('[ScreenCapture] Failed to get screen info:', error);\n }\n\n // Default fallback\n return { width: 1920, height: 1080 };\n }\n\n async captureScreen(): Promise<ScreenCapture> {\n const tempFile = path.join(process.cwd(), `temp_screen_${Date.now()}.png`);\n\n try {\n // Capture the screen\n await this.captureScreenToFile(tempFile);\n\n // Load and process the image\n const imageBuffer = await fs.readFile(tempFile);\n const image = sharp(imageBuffer);\n const metadata = await image.metadata();\n\n const width = metadata.width || 1920;\n const height = metadata.height || 1080;\n\n // Create tiles\n const tileSize = this.config.tileSize || 256;\n const tiles: ScreenTile[] = [];\n\n for (let row = 0; row < Math.ceil(height / tileSize); row++) {\n for (let col = 0; col < Math.ceil(width / tileSize); col++) {\n const x = col * tileSize;\n const y = row * tileSize;\n const tileWidth = Math.min(tileSize, width - x);\n const tileHeight = Math.min(tileSize, height - y);\n\n tiles.push({\n id: `tile-${row}-${col}`,\n row,\n col,\n x,\n y,\n width: tileWidth,\n height: tileHeight,\n });\n }\n }\n\n // Process active tile based on order\n if (this.config.tileProcessingOrder === 'priority') {\n // Focus on center tiles first\n const centerRow = Math.floor(tiles.length / 2 / Math.ceil(width / tileSize));\n const centerCol = Math.floor((tiles.length / 2) % Math.ceil(width / tileSize));\n this.activeTileIndex = centerRow * Math.ceil(width / tileSize) + centerCol;\n } else if (this.config.tileProcessingOrder === 'random') {\n this.activeTileIndex = Math.floor(Math.random() * tiles.length);\n } else {\n // Sequential\n this.activeTileIndex = (this.activeTileIndex + 1) % tiles.length;\n }\n\n // Extract active tile data\n const activeTile = tiles[this.activeTileIndex];\n if (activeTile) {\n try {\n const tileBuffer = await image\n .extract({\n left: activeTile.x,\n top: activeTile.y,\n width: activeTile.width,\n height: activeTile.height,\n })\n .png()\n .toBuffer();\n\n activeTile.data = tileBuffer;\n } catch (error) {\n logger.error('[ScreenCapture] Failed to extract tile:', error);\n }\n }\n\n // Clean up temp file\n await fs.unlink(tempFile).catch(() => {});\n\n // Create screen capture object\n const capture: ScreenCapture = {\n timestamp: Date.now(),\n width,\n height,\n data: imageBuffer,\n tiles,\n };\n\n this.lastCapture = capture;\n return capture;\n } catch (error) {\n // Clean up temp file on error\n await fs.unlink(tempFile).catch(() => {});\n throw error;\n }\n }\n\n private async captureScreenToFile(outputPath: string): Promise<void> {\n const platform = process.platform;\n\n try {\n if (platform === 'darwin') {\n // macOS: Use screencapture\n await execAsync(`screencapture -x \"${outputPath}\"`);\n } else if (platform === 'linux') {\n // Linux: Use scrot or gnome-screenshot\n try {\n await execAsync(`scrot \"${outputPath}\"`);\n } catch (_error) {\n // Fallback to gnome-screenshot\n await execAsync(`gnome-screenshot -f \"${outputPath}\"`);\n }\n } else if (platform === 'win32') {\n // Windows: Use PowerShell\n const script = `\n Add-Type -AssemblyName System.Windows.Forms;\n Add-Type -AssemblyName System.Drawing;\n $screen = [System.Windows.Forms.Screen]::PrimaryScreen.Bounds;\n $bitmap = New-Object System.Drawing.Bitmap $screen.Width, $screen.Height;\n $graphics = [System.Drawing.Graphics]::FromImage($bitmap);\n $graphics.CopyFromScreen($screen.Location, [System.Drawing.Point]::Empty, $screen.Size);\n $bitmap.Save('${outputPath.replace(/\\\\/g, '\\\\\\\\')}');\n $graphics.Dispose();\n $bitmap.Dispose();\n `;\n await execAsync(`powershell -Command \"${script.replace(/\\n/g, ' ')}\"`);\n } else {\n throw new Error(`Unsupported platform: ${platform}`);\n }\n } catch (error: any) {\n logger.error('[ScreenCapture] Screen capture failed:', error);\n\n // Provide helpful error messages\n if (platform === 'linux' && error.message.includes('command not found')) {\n throw new Error('Screen capture tool not found. Install with: sudo apt-get install scrot');\n }\n throw error;\n }\n }\n\n getActiveTile(): ScreenTile | null {\n if (!this.lastCapture || !this.lastCapture.tiles[this.activeTileIndex]) {\n return null;\n }\n return this.lastCapture.tiles[this.activeTileIndex];\n }\n\n getAllTiles(): ScreenTile[] {\n return this.lastCapture?.tiles || [];\n }\n\n getProcessedTiles(): ScreenTile[] {\n return this.lastCapture?.tiles.filter((t) => t.analysis) || [];\n }\n}\n"]}
package/dist/service.d.ts DELETED
@@ -1,73 +0,0 @@
1
- import { Service, type IAgentRuntime, type ServiceTypeName } from '@elizaos/core';
2
- import { EntityTracker } from './entity-tracker';
3
- import { FaceRecognition } from './face-recognition';
4
- import { VisionMode, type CameraInfo, type EnhancedSceneDescription, type SceneDescription, type ScreenCapture, type VisionFrame } from './types';
5
- export declare class VisionService extends Service {
6
- static serviceType: ServiceTypeName;
7
- capabilityDescription: string;
8
- private visionConfig;
9
- private camera;
10
- private lastFrame;
11
- private lastSceneDescription;
12
- private frameProcessingInterval;
13
- private screenProcessingInterval;
14
- private isProcessing;
15
- private isProcessingScreen;
16
- private visionModels;
17
- private faceRecognition;
18
- private entityTracker;
19
- private audioCapture;
20
- private streamingAudioCapture;
21
- private screenCapture;
22
- private florence2;
23
- private ocrService;
24
- private lastScreenCapture;
25
- private lastEnhancedScene;
26
- private workerManager;
27
- private lastTfUpdateTime;
28
- private lastVlmUpdateTime;
29
- private lastTfDescription;
30
- private readonly DEFAULT_CONFIG;
31
- constructor(runtime: IAgentRuntime);
32
- private parseConfig;
33
- static start(runtime: IAgentRuntime): Promise<VisionService>;
34
- private checkCameraTools;
35
- private initialize;
36
- private initializeScreenVision;
37
- private initializeCameraVision;
38
- private initializeAudioCapture;
39
- private storeAudioTranscription;
40
- private startProcessing;
41
- private startFrameProcessing;
42
- private captureAndProcessFrame;
43
- private processFrameData;
44
- private calculatePixelChange;
45
- private updateSceneDescription;
46
- private describeSceneWithVLM;
47
- private detectMotionObjects;
48
- private mergeAdjacentObjects;
49
- private classifyObjectBySize;
50
- private detectPeopleFromMotion;
51
- private startScreenProcessing;
52
- private captureAndProcessScreen;
53
- private analyzeTile;
54
- private updateEnhancedSceneDescription;
55
- getCurrentFrame(): Promise<VisionFrame | null>;
56
- getSceneDescription(): Promise<SceneDescription | null>;
57
- getEnhancedSceneDescription(): Promise<EnhancedSceneDescription | null>;
58
- getScreenCapture(): Promise<ScreenCapture | null>;
59
- getVisionMode(): VisionMode;
60
- setVisionMode(mode: VisionMode): Promise<void>;
61
- private stopProcessing;
62
- getCameraInfo(): CameraInfo | null;
63
- isActive(): boolean;
64
- private calculateBoxOverlap;
65
- private getDominantExpression;
66
- getEntityTracker(): EntityTracker;
67
- getFaceRecognition(): FaceRecognition;
68
- stop(): Promise<void>;
69
- private findCamera;
70
- private listCameras;
71
- private createCameraDevice;
72
- captureImage(): Promise<Buffer | null>;
73
- }