@elizaos/plugin-vision 1.2.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 (106) hide show
  1. package/.npmignore +5 -0
  2. package/README.md +270 -0
  3. package/build.config.ts +70 -0
  4. package/dist/action.d.ts +8 -0
  5. package/dist/action.js +1212 -0
  6. package/dist/action.js.map +1 -0
  7. package/dist/audio-capture-stream.d.ts +42 -0
  8. package/dist/audio-capture-stream.js +516 -0
  9. package/dist/audio-capture-stream.js.map +1 -0
  10. package/dist/audio-capture.d.ts +25 -0
  11. package/dist/audio-capture.js +412 -0
  12. package/dist/audio-capture.js.map +1 -0
  13. package/dist/basic.test.d.ts +1 -0
  14. package/dist/basic.test.js +97 -0
  15. package/dist/basic.test.js.map +1 -0
  16. package/dist/config.d.ts +73 -0
  17. package/dist/config.js +254 -0
  18. package/dist/config.js.map +1 -0
  19. package/dist/entity-tracker.d.ts +32 -0
  20. package/dist/entity-tracker.js +361 -0
  21. package/dist/entity-tracker.js.map +1 -0
  22. package/dist/errors.d.ts +67 -0
  23. package/dist/errors.js +395 -0
  24. package/dist/errors.js.map +1 -0
  25. package/dist/face-recognition.d.ts +31 -0
  26. package/dist/face-recognition.js +332 -0
  27. package/dist/face-recognition.js.map +1 -0
  28. package/dist/florence2-local.d.ts +25 -0
  29. package/dist/florence2-local.js +280 -0
  30. package/dist/florence2-local.js.map +1 -0
  31. package/dist/florence2-model.d.ts +36 -0
  32. package/dist/florence2-model.js +503 -0
  33. package/dist/florence2-model.js.map +1 -0
  34. package/dist/index.d.ts +3 -0
  35. package/dist/index.js +73 -0
  36. package/dist/index.js.map +1 -0
  37. package/dist/ocr-service-real.d.ts +32 -0
  38. package/dist/ocr-service-real.js +396 -0
  39. package/dist/ocr-service-real.js.map +1 -0
  40. package/dist/ocr-service.d.ts +28 -0
  41. package/dist/ocr-service.js +216 -0
  42. package/dist/ocr-service.js.map +1 -0
  43. package/dist/provider.d.ts +2 -0
  44. package/dist/provider.js +285 -0
  45. package/dist/provider.js.map +1 -0
  46. package/dist/screen-capture.d.ts +16 -0
  47. package/dist/screen-capture.js +302 -0
  48. package/dist/screen-capture.js.map +1 -0
  49. package/dist/service.d.ts +73 -0
  50. package/dist/service.js +1662 -0
  51. package/dist/service.js.map +1 -0
  52. package/dist/tests/e2e/index.d.ts +8 -0
  53. package/dist/tests/e2e/index.js +33 -0
  54. package/dist/tests/e2e/index.js.map +1 -0
  55. package/dist/tests/e2e/run-local.d.ts +2 -0
  56. package/dist/tests/e2e/run-local.js +166 -0
  57. package/dist/tests/e2e/run-local.js.map +1 -0
  58. package/dist/tests/e2e/screen-vision.d.ts +11 -0
  59. package/dist/tests/e2e/screen-vision.js +384 -0
  60. package/dist/tests/e2e/screen-vision.js.map +1 -0
  61. package/dist/tests/e2e/vision-autonomy.d.ts +11 -0
  62. package/dist/tests/e2e/vision-autonomy.js +375 -0
  63. package/dist/tests/e2e/vision-autonomy.js.map +1 -0
  64. package/dist/tests/e2e/vision-basic.d.ts +11 -0
  65. package/dist/tests/e2e/vision-basic.js +434 -0
  66. package/dist/tests/e2e/vision-basic.js.map +1 -0
  67. package/dist/tests/e2e/vision-capture-log.d.ts +11 -0
  68. package/dist/tests/e2e/vision-capture-log.js +302 -0
  69. package/dist/tests/e2e/vision-capture-log.js.map +1 -0
  70. package/dist/tests/e2e/vision-runtime.d.ts +11 -0
  71. package/dist/tests/e2e/vision-runtime.js +357 -0
  72. package/dist/tests/e2e/vision-runtime.js.map +1 -0
  73. package/dist/tests/e2e/vision-worker-tests.d.ts +11 -0
  74. package/dist/tests/e2e/vision-worker-tests.js +466 -0
  75. package/dist/tests/e2e/vision-worker-tests.js.map +1 -0
  76. package/dist/tests/test-pattern-generator.d.ts +40 -0
  77. package/dist/tests/test-pattern-generator.js +191 -0
  78. package/dist/tests/test-pattern-generator.js.map +1 -0
  79. package/dist/tests.d.ts +3 -0
  80. package/dist/tests.js +11 -0
  81. package/dist/tests.js.map +1 -0
  82. package/dist/types.d.ts +222 -0
  83. package/dist/types.js +16 -0
  84. package/dist/types.js.map +1 -0
  85. package/dist/vision-models.d.ts +47 -0
  86. package/dist/vision-models.js +501 -0
  87. package/dist/vision-models.js.map +1 -0
  88. package/dist/vision-worker-manager.d.ts +61 -0
  89. package/dist/vision-worker-manager.js +668 -0
  90. package/dist/vision-worker-manager.js.map +1 -0
  91. package/dist/workers/florence2-worker-simple.d.ts +13 -0
  92. package/dist/workers/florence2-worker-simple.js +121 -0
  93. package/dist/workers/florence2-worker-simple.js.map +1 -0
  94. package/dist/workers/florence2-worker.d.ts +1 -0
  95. package/dist/workers/florence2-worker.js +328 -0
  96. package/dist/workers/florence2-worker.js.map +1 -0
  97. package/dist/workers/ocr-worker.d.ts +1 -0
  98. package/dist/workers/ocr-worker.js +354 -0
  99. package/dist/workers/ocr-worker.js.map +1 -0
  100. package/dist/workers/screen-capture-worker.d.ts +1 -0
  101. package/dist/workers/screen-capture-worker.js +427 -0
  102. package/dist/workers/screen-capture-worker.js.map +1 -0
  103. package/dist/workers/worker-logger.d.ts +9 -0
  104. package/dist/workers/worker-logger.js +95 -0
  105. package/dist/workers/worker-logger.js.map +1 -0
  106. package/package.json +100 -0
@@ -0,0 +1,384 @@
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
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
39
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
40
+ if (ar || !(i in from)) {
41
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
42
+ ar[i] = from[i];
43
+ }
44
+ }
45
+ return to.concat(ar || Array.prototype.slice.call(from));
46
+ };
47
+ Object.defineProperty(exports, "__esModule", { value: true });
48
+ exports.ScreenVisionE2ETestSuite = void 0;
49
+ var core_1 = require("@elizaos/core");
50
+ var types_1 = require("../../types");
51
+ var action_1 = require("../../action");
52
+ var ScreenVisionE2ETestSuite = /** @class */ (function () {
53
+ function ScreenVisionE2ETestSuite() {
54
+ var _this = this;
55
+ this.name = 'plugin-vision-screen-e2e';
56
+ this.description = 'E2E tests for screen vision functionality including Florence-2 and OCR';
57
+ this.tests = [
58
+ {
59
+ name: 'Should initialize screen vision components',
60
+ fn: function (runtime) { return __awaiter(_this, void 0, void 0, function () {
61
+ var visionService, mode, screenInfo;
62
+ return __generator(this, function (_a) {
63
+ switch (_a.label) {
64
+ case 0:
65
+ console.log('Testing screen vision initialization...');
66
+ visionService = runtime.getService('VISION');
67
+ if (!visionService) {
68
+ throw new Error('Vision service not available');
69
+ }
70
+ // Set vision mode to SCREEN
71
+ return [4 /*yield*/, visionService.setVisionMode(types_1.VisionMode.SCREEN)];
72
+ case 1:
73
+ // Set vision mode to SCREEN
74
+ _a.sent();
75
+ // Wait for initialization
76
+ return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 2000); })];
77
+ case 2:
78
+ // Wait for initialization
79
+ _a.sent();
80
+ mode = visionService.getVisionMode();
81
+ if (mode !== types_1.VisionMode.SCREEN) {
82
+ throw new Error("Expected vision mode SCREEN but got ".concat(mode));
83
+ }
84
+ console.log('✓ Screen vision mode activated');
85
+ return [4 /*yield*/, visionService.getScreenCapture()];
86
+ case 3:
87
+ screenInfo = _a.sent();
88
+ if (screenInfo) {
89
+ console.log("\u2713 Screen capture available: ".concat(screenInfo.width, "x").concat(screenInfo.height));
90
+ }
91
+ else {
92
+ console.log('⚠️ Screen capture not yet available (may still be initializing)');
93
+ }
94
+ return [2 /*return*/];
95
+ }
96
+ });
97
+ }); },
98
+ },
99
+ {
100
+ name: 'Should capture and tile screen',
101
+ fn: function (runtime) { return __awaiter(_this, void 0, void 0, function () {
102
+ var visionService, screenCapture, firstTile, tilesWithData;
103
+ return __generator(this, function (_a) {
104
+ switch (_a.label) {
105
+ case 0:
106
+ console.log('Testing screen capture and tiling...');
107
+ visionService = runtime.getService('VISION');
108
+ if (!visionService) {
109
+ throw new Error('Vision service not available');
110
+ }
111
+ // Ensure screen mode is active
112
+ return [4 /*yield*/, visionService.setVisionMode(types_1.VisionMode.SCREEN)];
113
+ case 1:
114
+ // Ensure screen mode is active
115
+ _a.sent();
116
+ // Wait for capture
117
+ return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 3000); })];
118
+ case 2:
119
+ // Wait for capture
120
+ _a.sent();
121
+ return [4 /*yield*/, visionService.getScreenCapture()];
122
+ case 3:
123
+ screenCapture = _a.sent();
124
+ if (!screenCapture) {
125
+ console.warn('⚠️ No screen capture available - screen capture may not be supported in this environment');
126
+ return [2 /*return*/];
127
+ }
128
+ console.log("\u2713 Screen captured: ".concat(screenCapture.width, "x").concat(screenCapture.height));
129
+ console.log("\u2713 Divided into ".concat(screenCapture.tiles.length, " tiles"));
130
+ firstTile = screenCapture.tiles[0];
131
+ if (!firstTile) {
132
+ throw new Error('No tiles created from screen capture');
133
+ }
134
+ console.log(" First tile: ".concat(firstTile.id, " at (").concat(firstTile.x, ", ").concat(firstTile.y, ")"));
135
+ console.log(" Tile size: ".concat(firstTile.width, "x").concat(firstTile.height));
136
+ tilesWithData = screenCapture.tiles.filter(function (t) { return t.data !== undefined; });
137
+ console.log(" Tiles with data: ".concat(tilesWithData.length));
138
+ if (tilesWithData.length === 0) {
139
+ console.warn('⚠️ No tiles have been processed yet');
140
+ }
141
+ return [2 /*return*/];
142
+ }
143
+ });
144
+ }); },
145
+ },
146
+ {
147
+ name: 'Should analyze screen content with Florence-2 and OCR',
148
+ fn: function (runtime) { return __awaiter(_this, void 0, void 0, function () {
149
+ var visionService, enhancedScene, screenAnalysis, elementTypes, uniqueTypes;
150
+ var _a, _b;
151
+ return __generator(this, function (_c) {
152
+ switch (_c.label) {
153
+ case 0:
154
+ console.log('Testing screen content analysis...');
155
+ visionService = runtime.getService('VISION');
156
+ if (!visionService) {
157
+ throw new Error('Vision service not available');
158
+ }
159
+ // Ensure screen mode is active
160
+ return [4 /*yield*/, visionService.setVisionMode(types_1.VisionMode.SCREEN)];
161
+ case 1:
162
+ // Ensure screen mode is active
163
+ _c.sent();
164
+ // Wait for analysis
165
+ return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 5000); })];
166
+ case 2:
167
+ // Wait for analysis
168
+ _c.sent();
169
+ return [4 /*yield*/, visionService.getEnhancedSceneDescription()];
170
+ case 3:
171
+ enhancedScene = _c.sent();
172
+ if (!enhancedScene || !enhancedScene.screenAnalysis) {
173
+ console.warn('⚠️ No enhanced scene analysis available yet');
174
+ return [2 /*return*/];
175
+ }
176
+ console.log('✓ Enhanced scene analysis available');
177
+ screenAnalysis = enhancedScene.screenAnalysis;
178
+ // Check active tile analysis
179
+ if (screenAnalysis.activeTile) {
180
+ console.log('✓ Active tile analyzed');
181
+ if (screenAnalysis.activeTile.florence2) {
182
+ console.log(" Florence-2 caption: ".concat(screenAnalysis.activeTile.florence2.caption));
183
+ console.log(" Objects detected: ".concat(((_a = screenAnalysis.activeTile.florence2.objects) === null || _a === void 0 ? void 0 : _a.length) || 0));
184
+ console.log(" Tags: ".concat(((_b = screenAnalysis.activeTile.florence2.tags) === null || _b === void 0 ? void 0 : _b.join(', ')) || 'none'));
185
+ }
186
+ if (screenAnalysis.activeTile.ocr) {
187
+ console.log(" OCR text blocks: ".concat(screenAnalysis.activeTile.ocr.blocks.length));
188
+ console.log(" OCR preview: \"".concat(screenAnalysis.activeTile.ocr.fullText.substring(0, 50), "...\""));
189
+ }
190
+ }
191
+ // Check full screen OCR
192
+ if (screenAnalysis.fullScreenOCR) {
193
+ console.log("\u2713 Full screen OCR: ".concat(screenAnalysis.fullScreenOCR.length, " characters"));
194
+ }
195
+ // Check UI elements
196
+ if (screenAnalysis.uiElements && screenAnalysis.uiElements.length > 0) {
197
+ console.log("\u2713 UI elements detected: ".concat(screenAnalysis.uiElements.length));
198
+ elementTypes = screenAnalysis.uiElements.map(function (e) { return e.type; });
199
+ uniqueTypes = __spreadArray([], new Set(elementTypes), true);
200
+ console.log(" Types: ".concat(uniqueTypes.join(', ')));
201
+ }
202
+ return [2 /*return*/];
203
+ }
204
+ });
205
+ }); },
206
+ },
207
+ {
208
+ name: 'Should switch between vision modes',
209
+ fn: function (runtime) { return __awaiter(_this, void 0, void 0, function () {
210
+ var visionService, modes, _i, modes_1, mode, currentMode, message, callbackCalled, finalMode;
211
+ var _this = this;
212
+ return __generator(this, function (_a) {
213
+ switch (_a.label) {
214
+ case 0:
215
+ console.log('Testing vision mode switching...');
216
+ visionService = runtime.getService('VISION');
217
+ if (!visionService) {
218
+ throw new Error('Vision service not available');
219
+ }
220
+ modes = [types_1.VisionMode.CAMERA, types_1.VisionMode.SCREEN, types_1.VisionMode.BOTH, types_1.VisionMode.OFF];
221
+ _i = 0, modes_1 = modes;
222
+ _a.label = 1;
223
+ case 1:
224
+ if (!(_i < modes_1.length)) return [3 /*break*/, 5];
225
+ mode = modes_1[_i];
226
+ console.log(" Switching to ".concat(mode, " mode..."));
227
+ return [4 /*yield*/, visionService.setVisionMode(mode)];
228
+ case 2:
229
+ _a.sent();
230
+ // Wait for mode switch
231
+ return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 1000); })];
232
+ case 3:
233
+ // Wait for mode switch
234
+ _a.sent();
235
+ currentMode = visionService.getVisionMode();
236
+ if (currentMode !== mode) {
237
+ throw new Error("Failed to switch to ".concat(mode, " mode, current mode is ").concat(currentMode));
238
+ }
239
+ console.log(" \u2713 Successfully switched to ".concat(mode, " mode"));
240
+ _a.label = 4;
241
+ case 4:
242
+ _i++;
243
+ return [3 /*break*/, 1];
244
+ case 5:
245
+ // Test with action
246
+ console.log(' Testing SET_VISION_MODE action...');
247
+ message = {
248
+ id: (0, core_1.createUniqueUuid)(runtime, 'test-msg'),
249
+ entityId: runtime.agentId,
250
+ content: { text: 'set vision mode to both' },
251
+ agentId: runtime.agentId,
252
+ roomId: (0, core_1.createUniqueUuid)(runtime, 'test-room'),
253
+ createdAt: Date.now(),
254
+ };
255
+ callbackCalled = false;
256
+ return [4 /*yield*/, action_1.setVisionModeAction.handler(runtime, message, { values: {}, data: {}, text: '' }, {}, function (response) { return __awaiter(_this, void 0, void 0, function () {
257
+ return __generator(this, function (_a) {
258
+ callbackCalled = true;
259
+ console.log(" Action response: ".concat(response.text));
260
+ return [2 /*return*/, []];
261
+ });
262
+ }); })];
263
+ case 6:
264
+ _a.sent();
265
+ if (!callbackCalled) {
266
+ throw new Error('SET_VISION_MODE action did not call callback');
267
+ }
268
+ finalMode = visionService.getVisionMode();
269
+ if (finalMode !== types_1.VisionMode.BOTH) {
270
+ throw new Error("SET_VISION_MODE action failed, mode is ".concat(finalMode));
271
+ }
272
+ console.log('✓ Vision mode switching works correctly');
273
+ return [2 /*return*/];
274
+ }
275
+ });
276
+ }); },
277
+ },
278
+ {
279
+ name: 'Should provide combined vision data in BOTH mode',
280
+ fn: function (runtime) { return __awaiter(_this, void 0, void 0, function () {
281
+ var visionService, enhancedScene, hasCamera, hasScreen, state;
282
+ return __generator(this, function (_a) {
283
+ switch (_a.label) {
284
+ case 0:
285
+ console.log('Testing combined camera and screen vision...');
286
+ visionService = runtime.getService('VISION');
287
+ if (!visionService) {
288
+ throw new Error('Vision service not available');
289
+ }
290
+ // Set to BOTH mode
291
+ return [4 /*yield*/, visionService.setVisionMode(types_1.VisionMode.BOTH)];
292
+ case 1:
293
+ // Set to BOTH mode
294
+ _a.sent();
295
+ // Wait for both systems to initialize
296
+ return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 5000); })];
297
+ case 2:
298
+ // Wait for both systems to initialize
299
+ _a.sent();
300
+ return [4 /*yield*/, visionService.getEnhancedSceneDescription()];
301
+ case 3:
302
+ enhancedScene = _a.sent();
303
+ hasCamera = visionService.getCameraInfo() !== null;
304
+ return [4 /*yield*/, visionService.getScreenCapture()];
305
+ case 4:
306
+ hasScreen = (_a.sent()) !== null;
307
+ console.log(" Camera available: ".concat(hasCamera));
308
+ console.log(" Screen capture available: ".concat(hasScreen));
309
+ if (!hasCamera && !hasScreen) {
310
+ console.warn('⚠️ Neither camera nor screen capture available in this environment');
311
+ return [2 /*return*/];
312
+ }
313
+ if (enhancedScene) {
314
+ // Check for camera data
315
+ if (hasCamera && enhancedScene.description) {
316
+ console.log('✓ Camera data present in combined mode');
317
+ console.log(" Scene: ".concat(enhancedScene.description.substring(0, 50), "..."));
318
+ }
319
+ // Check for screen data
320
+ if (hasScreen && enhancedScene.screenAnalysis) {
321
+ console.log('✓ Screen data present in combined mode');
322
+ console.log(" Grid: ".concat(enhancedScene.screenAnalysis.gridSummary));
323
+ }
324
+ }
325
+ return [4 /*yield*/, runtime.composeState({
326
+ id: (0, core_1.createUniqueUuid)(runtime, 'test-msg'),
327
+ entityId: runtime.agentId,
328
+ content: { text: 'test' },
329
+ agentId: runtime.agentId,
330
+ roomId: (0, core_1.createUniqueUuid)(runtime, 'test-room'),
331
+ createdAt: Date.now(),
332
+ })];
333
+ case 5:
334
+ state = _a.sent();
335
+ if (state.text.includes('Vision mode: BOTH')) {
336
+ console.log('✓ Provider correctly reports BOTH mode');
337
+ }
338
+ return [2 /*return*/];
339
+ }
340
+ });
341
+ }); },
342
+ },
343
+ {
344
+ name: 'Should handle screen capture errors gracefully',
345
+ fn: function (runtime) { return __awaiter(_this, void 0, void 0, function () {
346
+ var visionService, originalConfig, isActive;
347
+ return __generator(this, function (_a) {
348
+ switch (_a.label) {
349
+ case 0:
350
+ console.log('Testing error handling...');
351
+ visionService = runtime.getService('VISION');
352
+ if (!visionService) {
353
+ throw new Error('Vision service not available');
354
+ }
355
+ originalConfig = visionService.visionConfig;
356
+ visionService.visionConfig.screenRegion = {
357
+ x: -100,
358
+ y: -100,
359
+ width: 50000,
360
+ height: 50000,
361
+ };
362
+ return [4 /*yield*/, visionService.setVisionMode(types_1.VisionMode.SCREEN)];
363
+ case 1:
364
+ _a.sent();
365
+ return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 2000); })];
366
+ case 2:
367
+ _a.sent();
368
+ isActive = visionService.isActive();
369
+ console.log(" Service active after invalid config: ".concat(isActive));
370
+ // Restore config
371
+ visionService.visionConfig = originalConfig;
372
+ console.log('✓ Error handling works correctly');
373
+ return [2 /*return*/];
374
+ }
375
+ });
376
+ }); },
377
+ },
378
+ ];
379
+ }
380
+ return ScreenVisionE2ETestSuite;
381
+ }());
382
+ exports.ScreenVisionE2ETestSuite = ScreenVisionE2ETestSuite;
383
+ exports.default = new ScreenVisionE2ETestSuite();
384
+ //# sourceMappingURL=screen-vision.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"screen-vision.js","sourceRoot":"","sources":["../../../src/tests/e2e/screen-vision.ts"],"names":[],"mappings":"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","sourcesContent":["import type { TestSuite, IAgentRuntime, Memory } from '@elizaos/core';\nimport { createUniqueUuid } from '@elizaos/core';\nimport { VisionService } from '../../service';\nimport { VisionMode } from '../../types';\nimport { setVisionModeAction } from '../../action';\n\nexport class ScreenVisionE2ETestSuite implements TestSuite {\n name = 'plugin-vision-screen-e2e';\n description = 'E2E tests for screen vision functionality including Florence-2 and OCR';\n\n tests = [\n {\n name: 'Should initialize screen vision components',\n fn: async (runtime: IAgentRuntime) => {\n console.log('Testing screen vision initialization...');\n\n const visionService = runtime.getService<VisionService>('VISION');\n if (!visionService) {\n throw new Error('Vision service not available');\n }\n\n // Set vision mode to SCREEN\n await visionService.setVisionMode(VisionMode.SCREEN);\n\n // Wait for initialization\n await new Promise((resolve) => setTimeout(resolve, 2000));\n\n const mode = visionService.getVisionMode();\n if (mode !== VisionMode.SCREEN) {\n throw new Error(`Expected vision mode SCREEN but got ${mode}`);\n }\n\n console.log('✓ Screen vision mode activated');\n\n // Check if screen capture is available\n const screenInfo = await visionService.getScreenCapture();\n if (screenInfo) {\n console.log(`✓ Screen capture available: ${screenInfo.width}x${screenInfo.height}`);\n } else {\n console.log('⚠️ Screen capture not yet available (may still be initializing)');\n }\n },\n },\n\n {\n name: 'Should capture and tile screen',\n fn: async (runtime: IAgentRuntime) => {\n console.log('Testing screen capture and tiling...');\n\n const visionService = runtime.getService<VisionService>('VISION');\n if (!visionService) {\n throw new Error('Vision service not available');\n }\n\n // Ensure screen mode is active\n await visionService.setVisionMode(VisionMode.SCREEN);\n\n // Wait for capture\n await new Promise((resolve) => setTimeout(resolve, 3000));\n\n const screenCapture = await visionService.getScreenCapture();\n if (!screenCapture) {\n console.warn(\n '⚠️ No screen capture available - screen capture may not be supported in this environment'\n );\n return;\n }\n\n console.log(`✓ Screen captured: ${screenCapture.width}x${screenCapture.height}`);\n console.log(`✓ Divided into ${screenCapture.tiles.length} tiles`);\n\n // Check tile structure\n const firstTile = screenCapture.tiles[0];\n if (!firstTile) {\n throw new Error('No tiles created from screen capture');\n }\n\n console.log(` First tile: ${firstTile.id} at (${firstTile.x}, ${firstTile.y})`);\n console.log(` Tile size: ${firstTile.width}x${firstTile.height}`);\n\n // Check if priority tiles have data\n const tilesWithData = screenCapture.tiles.filter((t) => t.data !== undefined);\n console.log(` Tiles with data: ${tilesWithData.length}`);\n\n if (tilesWithData.length === 0) {\n console.warn('⚠️ No tiles have been processed yet');\n }\n },\n },\n\n {\n name: 'Should analyze screen content with Florence-2 and OCR',\n fn: async (runtime: IAgentRuntime) => {\n console.log('Testing screen content analysis...');\n\n const visionService = runtime.getService<VisionService>('VISION');\n if (!visionService) {\n throw new Error('Vision service not available');\n }\n\n // Ensure screen mode is active\n await visionService.setVisionMode(VisionMode.SCREEN);\n\n // Wait for analysis\n await new Promise((resolve) => setTimeout(resolve, 5000));\n\n const enhancedScene = await visionService.getEnhancedSceneDescription();\n if (!enhancedScene || !enhancedScene.screenAnalysis) {\n console.warn('⚠️ No enhanced scene analysis available yet');\n return;\n }\n\n console.log('✓ Enhanced scene analysis available');\n\n const screenAnalysis = enhancedScene.screenAnalysis;\n\n // Check active tile analysis\n if (screenAnalysis.activeTile) {\n console.log('✓ Active tile analyzed');\n\n if (screenAnalysis.activeTile.florence2) {\n console.log(` Florence-2 caption: ${screenAnalysis.activeTile.florence2.caption}`);\n console.log(\n ` Objects detected: ${screenAnalysis.activeTile.florence2.objects?.length || 0}`\n );\n console.log(\n ` Tags: ${screenAnalysis.activeTile.florence2.tags?.join(', ') || 'none'}`\n );\n }\n\n if (screenAnalysis.activeTile.ocr) {\n console.log(` OCR text blocks: ${screenAnalysis.activeTile.ocr.blocks.length}`);\n console.log(\n ` OCR preview: \"${screenAnalysis.activeTile.ocr.fullText.substring(0, 50)}...\"`\n );\n }\n }\n\n // Check full screen OCR\n if (screenAnalysis.fullScreenOCR) {\n console.log(`✓ Full screen OCR: ${screenAnalysis.fullScreenOCR.length} characters`);\n }\n\n // Check UI elements\n if (screenAnalysis.uiElements && screenAnalysis.uiElements.length > 0) {\n console.log(`✓ UI elements detected: ${screenAnalysis.uiElements.length}`);\n const elementTypes = screenAnalysis.uiElements.map((e) => e.type);\n const uniqueTypes = [...new Set(elementTypes)];\n console.log(` Types: ${uniqueTypes.join(', ')}`);\n }\n },\n },\n\n {\n name: 'Should switch between vision modes',\n fn: async (runtime: IAgentRuntime) => {\n console.log('Testing vision mode switching...');\n\n const visionService = runtime.getService<VisionService>('VISION');\n if (!visionService) {\n throw new Error('Vision service not available');\n }\n\n // Test all modes\n const modes = [VisionMode.CAMERA, VisionMode.SCREEN, VisionMode.BOTH, VisionMode.OFF];\n\n for (const mode of modes) {\n console.log(` Switching to ${mode} mode...`);\n await visionService.setVisionMode(mode);\n\n // Wait for mode switch\n await new Promise((resolve) => setTimeout(resolve, 1000));\n\n const currentMode = visionService.getVisionMode();\n if (currentMode !== mode) {\n throw new Error(`Failed to switch to ${mode} mode, current mode is ${currentMode}`);\n }\n\n console.log(` ✓ Successfully switched to ${mode} mode`);\n }\n\n // Test with action\n console.log(' Testing SET_VISION_MODE action...');\n\n const message: Memory = {\n id: createUniqueUuid(runtime, 'test-msg'),\n entityId: runtime.agentId,\n content: { text: 'set vision mode to both' },\n agentId: runtime.agentId,\n roomId: createUniqueUuid(runtime, 'test-room'),\n createdAt: Date.now(),\n };\n\n let callbackCalled = false;\n await setVisionModeAction.handler(\n runtime,\n message,\n { values: {}, data: {}, text: '' },\n {},\n async (response) => {\n callbackCalled = true;\n console.log(` Action response: ${response.text}`);\n return [];\n }\n );\n\n if (!callbackCalled) {\n throw new Error('SET_VISION_MODE action did not call callback');\n }\n\n const finalMode = visionService.getVisionMode();\n if (finalMode !== VisionMode.BOTH) {\n throw new Error(`SET_VISION_MODE action failed, mode is ${finalMode}`);\n }\n\n console.log('✓ Vision mode switching works correctly');\n },\n },\n\n {\n name: 'Should provide combined vision data in BOTH mode',\n fn: async (runtime: IAgentRuntime) => {\n console.log('Testing combined camera and screen vision...');\n\n const visionService = runtime.getService<VisionService>('VISION');\n if (!visionService) {\n throw new Error('Vision service not available');\n }\n\n // Set to BOTH mode\n await visionService.setVisionMode(VisionMode.BOTH);\n\n // Wait for both systems to initialize\n await new Promise((resolve) => setTimeout(resolve, 5000));\n\n const enhancedScene = await visionService.getEnhancedSceneDescription();\n const hasCamera = visionService.getCameraInfo() !== null;\n const hasScreen = (await visionService.getScreenCapture()) !== null;\n\n console.log(` Camera available: ${hasCamera}`);\n console.log(` Screen capture available: ${hasScreen}`);\n\n if (!hasCamera && !hasScreen) {\n console.warn('⚠️ Neither camera nor screen capture available in this environment');\n return;\n }\n\n if (enhancedScene) {\n // Check for camera data\n if (hasCamera && enhancedScene.description) {\n console.log('✓ Camera data present in combined mode');\n console.log(` Scene: ${enhancedScene.description.substring(0, 50)}...`);\n }\n\n // Check for screen data\n if (hasScreen && enhancedScene.screenAnalysis) {\n console.log('✓ Screen data present in combined mode');\n console.log(` Grid: ${enhancedScene.screenAnalysis.gridSummary}`);\n }\n }\n\n // Check provider output\n const state = await runtime.composeState({\n id: createUniqueUuid(runtime, 'test-msg'),\n entityId: runtime.agentId,\n content: { text: 'test' },\n agentId: runtime.agentId,\n roomId: createUniqueUuid(runtime, 'test-room'),\n createdAt: Date.now(),\n });\n\n if (state.text.includes('Vision mode: BOTH')) {\n console.log('✓ Provider correctly reports BOTH mode');\n }\n },\n },\n\n {\n name: 'Should handle screen capture errors gracefully',\n fn: async (runtime: IAgentRuntime) => {\n console.log('Testing error handling...');\n\n const visionService = runtime.getService<VisionService>('VISION');\n if (!visionService) {\n throw new Error('Vision service not available');\n }\n\n // Try to set invalid region (should handle gracefully)\n const originalConfig = (visionService as any).visionConfig;\n (visionService as any).visionConfig.screenRegion = {\n x: -100,\n y: -100,\n width: 50000,\n height: 50000,\n };\n\n await visionService.setVisionMode(VisionMode.SCREEN);\n await new Promise((resolve) => setTimeout(resolve, 2000));\n\n // Service should still be active despite invalid region\n const isActive = visionService.isActive();\n console.log(` Service active after invalid config: ${isActive}`);\n\n // Restore config\n (visionService as any).visionConfig = originalConfig;\n\n console.log('✓ Error handling works correctly');\n },\n },\n ];\n}\n\nexport default new ScreenVisionE2ETestSuite();\n"]}
@@ -0,0 +1,11 @@
1
+ import type { TestSuite, IAgentRuntime } from '@elizaos/core';
2
+ export declare class VisionAutonomyE2ETestSuite implements TestSuite {
3
+ name: string;
4
+ description: string;
5
+ tests: {
6
+ name: string;
7
+ fn: (runtime: IAgentRuntime) => Promise<void>;
8
+ }[];
9
+ }
10
+ declare const _default: VisionAutonomyE2ETestSuite;
11
+ export default _default;