@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,357 +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.VisionRuntimeTestSuite = void 0;
40
- var core_1 = require("@elizaos/core");
41
- var VisionRuntimeTestSuite = /** @class */ (function () {
42
- function VisionRuntimeTestSuite() {
43
- var _this = this;
44
- this.name = 'vision-runtime-tests';
45
- this.description = 'Real runtime tests for vision plugin functionality';
46
- this.tests = [
47
- {
48
- name: 'Vision service initialization',
49
- fn: function (runtime) { return __awaiter(_this, void 0, void 0, function () {
50
- var visionService, isActive;
51
- return __generator(this, function (_a) {
52
- core_1.logger.info('[Test] Testing vision service initialization...');
53
- visionService = runtime.getService('VISION');
54
- if (!visionService) {
55
- throw new Error('Vision service not found in runtime');
56
- }
57
- // Check if service is properly initialized
58
- if (typeof visionService.isActive !== 'function') {
59
- throw new Error('Vision service missing isActive method');
60
- }
61
- isActive = visionService.isActive();
62
- core_1.logger.info("[Test] Vision service active: ".concat(isActive));
63
- // Service should be active after initialization
64
- if (!isActive && runtime.getSetting('VISION_MODE') !== 'OFF') {
65
- throw new Error('Vision service should be active but is not');
66
- }
67
- core_1.logger.info('[Test] ✅ Vision service initialization test passed');
68
- return [2 /*return*/];
69
- });
70
- }); },
71
- },
72
- {
73
- name: 'Scene description functionality',
74
- fn: function (runtime) { return __awaiter(_this, void 0, void 0, function () {
75
- var visionService, scene;
76
- return __generator(this, function (_a) {
77
- switch (_a.label) {
78
- case 0:
79
- core_1.logger.info('[Test] Testing scene description...');
80
- visionService = runtime.getService('VISION');
81
- if (!visionService) {
82
- throw new Error('Vision service not found');
83
- }
84
- return [4 /*yield*/, visionService.getSceneDescription()];
85
- case 1:
86
- scene = _a.sent();
87
- if (!scene) {
88
- core_1.logger.warn('[Test] No scene description available (camera might not be connected)');
89
- return [2 /*return*/]; // Don't fail if no camera
90
- }
91
- // Validate scene structure
92
- if (typeof scene.timestamp !== 'number') {
93
- throw new Error('Scene description missing timestamp');
94
- }
95
- if (typeof scene.description !== 'string') {
96
- throw new Error('Scene description missing description text');
97
- }
98
- if (!Array.isArray(scene.objects)) {
99
- throw new Error('Scene description missing objects array');
100
- }
101
- if (!Array.isArray(scene.people)) {
102
- throw new Error('Scene description missing people array');
103
- }
104
- core_1.logger.info("[Test] Scene: ".concat(scene.description.substring(0, 100), "..."));
105
- core_1.logger.info("[Test] Objects: ".concat(scene.objects.length, ", People: ").concat(scene.people.length));
106
- core_1.logger.info('[Test] ✅ Scene description test passed');
107
- return [2 /*return*/];
108
- }
109
- });
110
- }); },
111
- },
112
- {
113
- name: 'Vision mode switching',
114
- fn: function (runtime) { return __awaiter(_this, void 0, void 0, function () {
115
- var visionService, originalMode, testModes, _i, testModes_1, mode, currentMode;
116
- return __generator(this, function (_a) {
117
- switch (_a.label) {
118
- case 0:
119
- core_1.logger.info('[Test] Testing vision mode switching...');
120
- visionService = runtime.getService('VISION');
121
- if (!visionService) {
122
- throw new Error('Vision service not found');
123
- }
124
- originalMode = visionService.getVisionMode();
125
- core_1.logger.info("[Test] Original mode: ".concat(originalMode));
126
- testModes = ['CAMERA', 'SCREEN', 'BOTH', 'OFF'];
127
- _i = 0, testModes_1 = testModes;
128
- _a.label = 1;
129
- case 1:
130
- if (!(_i < testModes_1.length)) return [3 /*break*/, 4];
131
- mode = testModes_1[_i];
132
- core_1.logger.info("[Test] Switching to mode: ".concat(mode));
133
- return [4 /*yield*/, visionService.setVisionMode(mode)];
134
- case 2:
135
- _a.sent();
136
- currentMode = visionService.getVisionMode();
137
- if (currentMode !== mode) {
138
- throw new Error("Failed to switch to mode ".concat(mode, ", current mode is ").concat(currentMode));
139
- }
140
- _a.label = 3;
141
- case 3:
142
- _i++;
143
- return [3 /*break*/, 1];
144
- case 4:
145
- // Restore original mode
146
- return [4 /*yield*/, visionService.setVisionMode(originalMode)];
147
- case 5:
148
- // Restore original mode
149
- _a.sent();
150
- core_1.logger.info('[Test] ✅ Vision mode switching test passed');
151
- return [2 /*return*/];
152
- }
153
- });
154
- }); },
155
- },
156
- {
157
- name: 'DESCRIBE_SCENE action execution',
158
- fn: function (runtime) { return __awaiter(_this, void 0, void 0, function () {
159
- var action, message, isValid, responseReceived, callback;
160
- var _this = this;
161
- return __generator(this, function (_a) {
162
- switch (_a.label) {
163
- case 0:
164
- core_1.logger.info('[Test] Testing DESCRIBE_SCENE action...');
165
- action = runtime.actions.find(function (a) { return a.name === 'DESCRIBE_SCENE'; });
166
- if (!action) {
167
- throw new Error('DESCRIBE_SCENE action not found');
168
- }
169
- message = {
170
- id: "test-msg-".concat(Date.now()),
171
- entityId: 'test-entity',
172
- roomId: 'test-room',
173
- content: {
174
- text: 'Describe what you see',
175
- source: 'test',
176
- },
177
- createdAt: Date.now(),
178
- };
179
- return [4 /*yield*/, action.validate(runtime, message)];
180
- case 1:
181
- isValid = _a.sent();
182
- if (!isValid) {
183
- throw new Error('DESCRIBE_SCENE action validation failed');
184
- }
185
- responseReceived = false;
186
- callback = function (response) { return __awaiter(_this, void 0, void 0, function () {
187
- return __generator(this, function (_a) {
188
- if (response.text && response.text.length > 0) {
189
- responseReceived = true;
190
- core_1.logger.info("[Test] Action response: ".concat(response.text.substring(0, 100), "..."));
191
- }
192
- return [2 /*return*/, []];
193
- });
194
- }); };
195
- return [4 /*yield*/, action.handler(runtime, message, {}, {}, callback)];
196
- case 2:
197
- _a.sent();
198
- if (!responseReceived) {
199
- throw new Error('DESCRIBE_SCENE action did not produce a response');
200
- }
201
- core_1.logger.info('[Test] ✅ DESCRIBE_SCENE action test passed');
202
- return [2 /*return*/];
203
- }
204
- });
205
- }); },
206
- },
207
- {
208
- name: 'Vision provider integration',
209
- fn: function (runtime) { return __awaiter(_this, void 0, void 0, function () {
210
- var provider, message, state, result;
211
- return __generator(this, function (_a) {
212
- switch (_a.label) {
213
- case 0:
214
- core_1.logger.info('[Test] Testing vision provider...');
215
- provider = runtime.providers.find(function (p) { return p.name === 'visionProvider'; });
216
- if (!provider) {
217
- throw new Error('Vision provider not found');
218
- }
219
- message = {
220
- id: "test-msg-".concat(Date.now()),
221
- entityId: 'test-entity',
222
- roomId: 'test-room',
223
- content: { text: 'test', source: 'test' },
224
- createdAt: Date.now(),
225
- };
226
- state = {
227
- values: {},
228
- data: {},
229
- text: '',
230
- };
231
- return [4 /*yield*/, provider.get(runtime, message, state)];
232
- case 1:
233
- result = _a.sent();
234
- if (!result || typeof result !== 'object') {
235
- throw new Error('Vision provider returned invalid result');
236
- }
237
- // Check if provider returns vision data when available
238
- if (result.text && result.text.includes('I can see')) {
239
- core_1.logger.info("[Test] Provider text: ".concat(result.text.substring(0, 100), "..."));
240
- }
241
- core_1.logger.info('[Test] ✅ Vision provider test passed');
242
- return [2 /*return*/];
243
- }
244
- });
245
- }); },
246
- },
247
- {
248
- name: 'Florence-2 model initialization',
249
- fn: function (runtime) { return __awaiter(_this, void 0, void 0, function () {
250
- var visionService, florence2Enabled, mode, screenCapture;
251
- return __generator(this, function (_a) {
252
- switch (_a.label) {
253
- case 0:
254
- core_1.logger.info('[Test] Testing Florence-2 model...');
255
- visionService = runtime.getService('VISION');
256
- if (!visionService) {
257
- throw new Error('Vision service not found');
258
- }
259
- florence2Enabled = runtime.getSetting('FLORENCE2_ENABLED') === 'true' ||
260
- runtime.getSetting('VISION_FLORENCE2_ENABLED') === 'true';
261
- if (!florence2Enabled) {
262
- core_1.logger.info('[Test] Florence-2 is disabled, skipping test');
263
- return [2 /*return*/];
264
- }
265
- mode = visionService.getVisionMode();
266
- if (!(mode === 'SCREEN' || mode === 'BOTH')) return [3 /*break*/, 2];
267
- return [4 /*yield*/, visionService.getScreenCapture()];
268
- case 1:
269
- screenCapture = _a.sent();
270
- if (screenCapture) {
271
- core_1.logger.info('[Test] Screen capture available');
272
- core_1.logger.info("[Test] Screen size: ".concat(screenCapture.width, "x").concat(screenCapture.height));
273
- core_1.logger.info("[Test] Tiles: ".concat(screenCapture.tiles.length));
274
- }
275
- _a.label = 2;
276
- case 2:
277
- core_1.logger.info('[Test] ✅ Florence-2 model test passed');
278
- return [2 /*return*/];
279
- }
280
- });
281
- }); },
282
- },
283
- {
284
- name: 'OCR service functionality',
285
- fn: function (runtime) { return __awaiter(_this, void 0, void 0, function () {
286
- var visionService, ocrEnabled, mode, enhancedScene, ocrText;
287
- return __generator(this, function (_a) {
288
- switch (_a.label) {
289
- case 0:
290
- core_1.logger.info('[Test] Testing OCR service...');
291
- visionService = runtime.getService('VISION');
292
- if (!visionService) {
293
- throw new Error('Vision service not found');
294
- }
295
- ocrEnabled = runtime.getSetting('OCR_ENABLED') === 'true' ||
296
- runtime.getSetting('VISION_OCR_ENABLED') === 'true';
297
- if (!ocrEnabled) {
298
- core_1.logger.info('[Test] OCR is disabled, skipping test');
299
- return [2 /*return*/];
300
- }
301
- mode = visionService.getVisionMode();
302
- if (!(mode === 'SCREEN' || mode === 'BOTH')) return [3 /*break*/, 2];
303
- return [4 /*yield*/, visionService.getEnhancedSceneDescription()];
304
- case 1:
305
- enhancedScene = _a.sent();
306
- if (enhancedScene && enhancedScene.screenAnalysis) {
307
- ocrText = enhancedScene.screenAnalysis.fullScreenOCR;
308
- if (ocrText) {
309
- core_1.logger.info("[Test] OCR extracted ".concat(ocrText.length, " characters"));
310
- core_1.logger.info("[Test] OCR sample: ".concat(ocrText.substring(0, 100), "..."));
311
- }
312
- }
313
- _a.label = 2;
314
- case 2:
315
- core_1.logger.info('[Test] ✅ OCR service test passed');
316
- return [2 /*return*/];
317
- }
318
- });
319
- }); },
320
- },
321
- {
322
- name: 'Entity tracking system',
323
- fn: function (runtime) { return __awaiter(_this, void 0, void 0, function () {
324
- var visionService, entityTracker, entities, _i, entities_1, entity;
325
- return __generator(this, function (_a) {
326
- core_1.logger.info('[Test] Testing entity tracking...');
327
- visionService = runtime.getService('VISION');
328
- if (!visionService) {
329
- throw new Error('Vision service not found');
330
- }
331
- entityTracker = visionService.getEntityTracker();
332
- if (!entityTracker) {
333
- throw new Error('Entity tracker not found');
334
- }
335
- entities = entityTracker.getActiveEntities();
336
- core_1.logger.info("[Test] Active entities: ".concat(entities.length));
337
- // Check entity structure if any exist
338
- for (_i = 0, entities_1 = entities; _i < entities_1.length; _i++) {
339
- entity = entities_1[_i];
340
- if (!entity.id || !entity.type || !entity.lastSeen) {
341
- throw new Error('Entity missing required fields');
342
- }
343
- core_1.logger.info("[Test] Entity ".concat(entity.id, ": type=").concat(entity.type, ", tracked=").concat(entity.trackingDuration, "ms"));
344
- }
345
- core_1.logger.info('[Test] ✅ Entity tracking test passed');
346
- return [2 /*return*/];
347
- });
348
- }); },
349
- },
350
- ];
351
- }
352
- return VisionRuntimeTestSuite;
353
- }());
354
- exports.VisionRuntimeTestSuite = VisionRuntimeTestSuite;
355
- // Export default instance for test runner
356
- exports.default = new VisionRuntimeTestSuite();
357
- //# sourceMappingURL=vision-runtime.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"vision-runtime.js","sourceRoot":"","sources":["../../../src/tests/e2e/vision-runtime.ts"],"names":[],"mappings":"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","sourcesContent":["import type { TestSuite } from '@elizaos/core';\nimport { logger } from '@elizaos/core';\n\nexport class VisionRuntimeTestSuite implements TestSuite {\n name = 'vision-runtime-tests';\n description = 'Real runtime tests for vision plugin functionality';\n\n tests = [\n {\n name: 'Vision service initialization',\n fn: async (runtime: any) => {\n logger.info('[Test] Testing vision service initialization...');\n\n const visionService = runtime.getService('VISION');\n if (!visionService) {\n throw new Error('Vision service not found in runtime');\n }\n\n // Check if service is properly initialized\n if (typeof visionService.isActive !== 'function') {\n throw new Error('Vision service missing isActive method');\n }\n\n const isActive = visionService.isActive();\n logger.info(`[Test] Vision service active: ${isActive}`);\n\n // Service should be active after initialization\n if (!isActive && runtime.getSetting('VISION_MODE') !== 'OFF') {\n throw new Error('Vision service should be active but is not');\n }\n\n logger.info('[Test] ✅ Vision service initialization test passed');\n },\n },\n\n {\n name: 'Scene description functionality',\n fn: async (runtime: any) => {\n logger.info('[Test] Testing scene description...');\n\n const visionService = runtime.getService('VISION');\n if (!visionService) {\n throw new Error('Vision service not found');\n }\n\n // Get current scene description\n const scene = await visionService.getSceneDescription();\n\n if (!scene) {\n logger.warn('[Test] No scene description available (camera might not be connected)');\n return; // Don't fail if no camera\n }\n\n // Validate scene structure\n if (typeof scene.timestamp !== 'number') {\n throw new Error('Scene description missing timestamp');\n }\n\n if (typeof scene.description !== 'string') {\n throw new Error('Scene description missing description text');\n }\n\n if (!Array.isArray(scene.objects)) {\n throw new Error('Scene description missing objects array');\n }\n\n if (!Array.isArray(scene.people)) {\n throw new Error('Scene description missing people array');\n }\n\n logger.info(`[Test] Scene: ${scene.description.substring(0, 100)}...`);\n logger.info(`[Test] Objects: ${scene.objects.length}, People: ${scene.people.length}`);\n logger.info('[Test] ✅ Scene description test passed');\n },\n },\n\n {\n name: 'Vision mode switching',\n fn: async (runtime: any) => {\n logger.info('[Test] Testing vision mode switching...');\n\n const visionService = runtime.getService('VISION');\n if (!visionService) {\n throw new Error('Vision service not found');\n }\n\n // Get current mode\n const originalMode = visionService.getVisionMode();\n logger.info(`[Test] Original mode: ${originalMode}`);\n\n // Test switching modes\n const testModes = ['CAMERA', 'SCREEN', 'BOTH', 'OFF'];\n\n for (const mode of testModes) {\n logger.info(`[Test] Switching to mode: ${mode}`);\n await visionService.setVisionMode(mode);\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\n // Restore original mode\n await visionService.setVisionMode(originalMode);\n logger.info('[Test] ✅ Vision mode switching test passed');\n },\n },\n\n {\n name: 'DESCRIBE_SCENE action execution',\n fn: async (runtime: any) => {\n logger.info('[Test] Testing DESCRIBE_SCENE action...');\n\n // Find the action\n const action = runtime.actions.find((a: any) => a.name === 'DESCRIBE_SCENE');\n if (!action) {\n throw new Error('DESCRIBE_SCENE action not found');\n }\n\n // Create test message\n const message = {\n id: `test-msg-${Date.now()}`,\n entityId: 'test-entity',\n roomId: 'test-room',\n content: {\n text: 'Describe what you see',\n source: 'test',\n },\n createdAt: Date.now(),\n };\n\n // Validate action\n const isValid = await action.validate(runtime, message);\n if (!isValid) {\n throw new Error('DESCRIBE_SCENE action validation failed');\n }\n\n // Execute action\n let responseReceived = false;\n const callback = async (response: any) => {\n if (response.text && response.text.length > 0) {\n responseReceived = true;\n logger.info(`[Test] Action response: ${response.text.substring(0, 100)}...`);\n }\n return [];\n };\n\n await action.handler(runtime, message, {}, {}, callback);\n\n if (!responseReceived) {\n throw new Error('DESCRIBE_SCENE action did not produce a response');\n }\n\n logger.info('[Test] ✅ DESCRIBE_SCENE action test passed');\n },\n },\n\n {\n name: 'Vision provider integration',\n fn: async (runtime: any) => {\n logger.info('[Test] Testing vision provider...');\n\n // Find the vision provider\n const provider = runtime.providers.find((p: any) => p.name === 'visionProvider');\n if (!provider) {\n throw new Error('Vision provider not found');\n }\n\n // Create test message and state\n const message = {\n id: `test-msg-${Date.now()}`,\n entityId: 'test-entity',\n roomId: 'test-room',\n content: { text: 'test', source: 'test' },\n createdAt: Date.now(),\n };\n\n const state = {\n values: {},\n data: {},\n text: '',\n };\n\n // Get provider data\n const result = await provider.get(runtime, message, state);\n\n if (!result || typeof result !== 'object') {\n throw new Error('Vision provider returned invalid result');\n }\n\n // Check if provider returns vision data when available\n if (result.text && result.text.includes('I can see')) {\n logger.info(`[Test] Provider text: ${result.text.substring(0, 100)}...`);\n }\n\n logger.info('[Test] ✅ Vision provider test passed');\n },\n },\n\n {\n name: 'Florence-2 model initialization',\n fn: async (runtime: any) => {\n logger.info('[Test] Testing Florence-2 model...');\n\n const visionService = runtime.getService('VISION');\n if (!visionService) {\n throw new Error('Vision service not found');\n }\n\n // Check if Florence-2 is enabled\n const florence2Enabled =\n runtime.getSetting('FLORENCE2_ENABLED') === 'true' ||\n runtime.getSetting('VISION_FLORENCE2_ENABLED') === 'true';\n\n if (!florence2Enabled) {\n logger.info('[Test] Florence-2 is disabled, skipping test');\n return;\n }\n\n // If screen mode is enabled, Florence-2 should be initialized\n const mode = visionService.getVisionMode();\n if (mode === 'SCREEN' || mode === 'BOTH') {\n // Try to get screen capture\n const screenCapture = await visionService.getScreenCapture();\n if (screenCapture) {\n logger.info('[Test] Screen capture available');\n logger.info(`[Test] Screen size: ${screenCapture.width}x${screenCapture.height}`);\n logger.info(`[Test] Tiles: ${screenCapture.tiles.length}`);\n }\n }\n\n logger.info('[Test] ✅ Florence-2 model test passed');\n },\n },\n\n {\n name: 'OCR service functionality',\n fn: async (runtime: any) => {\n logger.info('[Test] Testing OCR service...');\n\n const visionService = runtime.getService('VISION');\n if (!visionService) {\n throw new Error('Vision service not found');\n }\n\n // Check if OCR is enabled\n const ocrEnabled =\n runtime.getSetting('OCR_ENABLED') === 'true' ||\n runtime.getSetting('VISION_OCR_ENABLED') === 'true';\n\n if (!ocrEnabled) {\n logger.info('[Test] OCR is disabled, skipping test');\n return;\n }\n\n // If screen mode is enabled, OCR should work\n const mode = visionService.getVisionMode();\n if (mode === 'SCREEN' || mode === 'BOTH') {\n const enhancedScene = await visionService.getEnhancedSceneDescription();\n if (enhancedScene && enhancedScene.screenAnalysis) {\n const ocrText = enhancedScene.screenAnalysis.fullScreenOCR;\n if (ocrText) {\n logger.info(`[Test] OCR extracted ${ocrText.length} characters`);\n logger.info(`[Test] OCR sample: ${ocrText.substring(0, 100)}...`);\n }\n }\n }\n\n logger.info('[Test] ✅ OCR service test passed');\n },\n },\n\n {\n name: 'Entity tracking system',\n fn: async (runtime: any) => {\n logger.info('[Test] Testing entity tracking...');\n\n const visionService = runtime.getService('VISION');\n if (!visionService) {\n throw new Error('Vision service not found');\n }\n\n // Get entity tracker\n const entityTracker = visionService.getEntityTracker();\n if (!entityTracker) {\n throw new Error('Entity tracker not found');\n }\n\n // Get current entities\n const entities = entityTracker.getActiveEntities();\n logger.info(`[Test] Active entities: ${entities.length}`);\n\n // Check entity structure if any exist\n for (const entity of entities) {\n if (!entity.id || !entity.type || !entity.lastSeen) {\n throw new Error('Entity missing required fields');\n }\n\n logger.info(\n `[Test] Entity ${entity.id}: type=${entity.type}, tracked=${entity.trackingDuration}ms`\n );\n }\n\n logger.info('[Test] ✅ Entity tracking test passed');\n },\n },\n ];\n}\n\n// Export default instance for test runner\nexport default new VisionRuntimeTestSuite();\n"]}
@@ -1,11 +0,0 @@
1
- import type { TestSuite, IAgentRuntime } from '@elizaos/core';
2
- export declare class VisionWorkerE2ETestSuite 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: VisionWorkerE2ETestSuite;
11
- export default _default;