@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,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;