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

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 (106) hide show
  1. package/LICENSE +21 -0
  2. package/build.config.ts +53 -53
  3. package/dist/index.js +6716 -67
  4. package/dist/index.js.map +33 -1
  5. package/dist/workers/florence2-worker.js +111763 -307
  6. package/dist/workers/florence2-worker.js.map +92 -1
  7. package/dist/workers/ocr-worker.js +119177 -339
  8. package/dist/workers/ocr-worker.js.map +137 -1
  9. package/dist/workers/screen-capture-worker.js +350 -418
  10. package/dist/workers/screen-capture-worker.js.map +11 -1
  11. package/package.json +15 -20
  12. package/README.md +0 -270
  13. package/dist/action.d.ts +0 -8
  14. package/dist/action.js +0 -1212
  15. package/dist/action.js.map +0 -1
  16. package/dist/audio-capture-stream.d.ts +0 -42
  17. package/dist/audio-capture-stream.js +0 -516
  18. package/dist/audio-capture-stream.js.map +0 -1
  19. package/dist/audio-capture.d.ts +0 -25
  20. package/dist/audio-capture.js +0 -412
  21. package/dist/audio-capture.js.map +0 -1
  22. package/dist/basic.test.d.ts +0 -1
  23. package/dist/basic.test.js +0 -97
  24. package/dist/basic.test.js.map +0 -1
  25. package/dist/config.d.ts +0 -73
  26. package/dist/config.js +0 -254
  27. package/dist/config.js.map +0 -1
  28. package/dist/entity-tracker.d.ts +0 -32
  29. package/dist/entity-tracker.js +0 -361
  30. package/dist/entity-tracker.js.map +0 -1
  31. package/dist/errors.d.ts +0 -67
  32. package/dist/errors.js +0 -395
  33. package/dist/errors.js.map +0 -1
  34. package/dist/face-recognition.d.ts +0 -31
  35. package/dist/face-recognition.js +0 -332
  36. package/dist/face-recognition.js.map +0 -1
  37. package/dist/florence2-local.d.ts +0 -25
  38. package/dist/florence2-local.js +0 -280
  39. package/dist/florence2-local.js.map +0 -1
  40. package/dist/florence2-model.d.ts +0 -36
  41. package/dist/florence2-model.js +0 -503
  42. package/dist/florence2-model.js.map +0 -1
  43. package/dist/index.d.ts +0 -3
  44. package/dist/ocr-service-real.d.ts +0 -32
  45. package/dist/ocr-service-real.js +0 -396
  46. package/dist/ocr-service-real.js.map +0 -1
  47. package/dist/ocr-service.d.ts +0 -28
  48. package/dist/ocr-service.js +0 -216
  49. package/dist/ocr-service.js.map +0 -1
  50. package/dist/provider.d.ts +0 -2
  51. package/dist/provider.js +0 -285
  52. package/dist/provider.js.map +0 -1
  53. package/dist/screen-capture.d.ts +0 -16
  54. package/dist/screen-capture.js +0 -302
  55. package/dist/screen-capture.js.map +0 -1
  56. package/dist/service.d.ts +0 -73
  57. package/dist/service.js +0 -1662
  58. package/dist/service.js.map +0 -1
  59. package/dist/tests/e2e/index.d.ts +0 -8
  60. package/dist/tests/e2e/index.js +0 -33
  61. package/dist/tests/e2e/index.js.map +0 -1
  62. package/dist/tests/e2e/run-local.d.ts +0 -2
  63. package/dist/tests/e2e/run-local.js +0 -166
  64. package/dist/tests/e2e/run-local.js.map +0 -1
  65. package/dist/tests/e2e/screen-vision.d.ts +0 -11
  66. package/dist/tests/e2e/screen-vision.js +0 -384
  67. package/dist/tests/e2e/screen-vision.js.map +0 -1
  68. package/dist/tests/e2e/vision-autonomy.d.ts +0 -11
  69. package/dist/tests/e2e/vision-autonomy.js +0 -375
  70. package/dist/tests/e2e/vision-autonomy.js.map +0 -1
  71. package/dist/tests/e2e/vision-basic.d.ts +0 -11
  72. package/dist/tests/e2e/vision-basic.js +0 -434
  73. package/dist/tests/e2e/vision-basic.js.map +0 -1
  74. package/dist/tests/e2e/vision-capture-log.d.ts +0 -11
  75. package/dist/tests/e2e/vision-capture-log.js +0 -302
  76. package/dist/tests/e2e/vision-capture-log.js.map +0 -1
  77. package/dist/tests/e2e/vision-runtime.d.ts +0 -11
  78. package/dist/tests/e2e/vision-runtime.js +0 -357
  79. package/dist/tests/e2e/vision-runtime.js.map +0 -1
  80. package/dist/tests/e2e/vision-worker-tests.d.ts +0 -11
  81. package/dist/tests/e2e/vision-worker-tests.js +0 -466
  82. package/dist/tests/e2e/vision-worker-tests.js.map +0 -1
  83. package/dist/tests/test-pattern-generator.d.ts +0 -40
  84. package/dist/tests/test-pattern-generator.js +0 -191
  85. package/dist/tests/test-pattern-generator.js.map +0 -1
  86. package/dist/tests.d.ts +0 -3
  87. package/dist/tests.js +0 -11
  88. package/dist/tests.js.map +0 -1
  89. package/dist/types.d.ts +0 -222
  90. package/dist/types.js +0 -16
  91. package/dist/types.js.map +0 -1
  92. package/dist/vision-models.d.ts +0 -47
  93. package/dist/vision-models.js +0 -501
  94. package/dist/vision-models.js.map +0 -1
  95. package/dist/vision-worker-manager.d.ts +0 -61
  96. package/dist/vision-worker-manager.js +0 -668
  97. package/dist/vision-worker-manager.js.map +0 -1
  98. package/dist/workers/florence2-worker-simple.d.ts +0 -13
  99. package/dist/workers/florence2-worker-simple.js +0 -121
  100. package/dist/workers/florence2-worker-simple.js.map +0 -1
  101. package/dist/workers/florence2-worker.d.ts +0 -1
  102. package/dist/workers/ocr-worker.d.ts +0 -1
  103. package/dist/workers/screen-capture-worker.d.ts +0 -1
  104. package/dist/workers/worker-logger.d.ts +0 -9
  105. package/dist/workers/worker-logger.js +0 -95
  106. 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
- }