@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.
- package/.npmignore +5 -0
- package/README.md +270 -0
- package/build.config.ts +70 -0
- package/dist/action.d.ts +8 -0
- package/dist/action.js +1212 -0
- package/dist/action.js.map +1 -0
- package/dist/audio-capture-stream.d.ts +42 -0
- package/dist/audio-capture-stream.js +516 -0
- package/dist/audio-capture-stream.js.map +1 -0
- package/dist/audio-capture.d.ts +25 -0
- package/dist/audio-capture.js +412 -0
- package/dist/audio-capture.js.map +1 -0
- package/dist/basic.test.d.ts +1 -0
- package/dist/basic.test.js +97 -0
- package/dist/basic.test.js.map +1 -0
- package/dist/config.d.ts +73 -0
- package/dist/config.js +254 -0
- package/dist/config.js.map +1 -0
- package/dist/entity-tracker.d.ts +32 -0
- package/dist/entity-tracker.js +361 -0
- package/dist/entity-tracker.js.map +1 -0
- package/dist/errors.d.ts +67 -0
- package/dist/errors.js +395 -0
- package/dist/errors.js.map +1 -0
- package/dist/face-recognition.d.ts +31 -0
- package/dist/face-recognition.js +332 -0
- package/dist/face-recognition.js.map +1 -0
- package/dist/florence2-local.d.ts +25 -0
- package/dist/florence2-local.js +280 -0
- package/dist/florence2-local.js.map +1 -0
- package/dist/florence2-model.d.ts +36 -0
- package/dist/florence2-model.js +503 -0
- package/dist/florence2-model.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +73 -0
- package/dist/index.js.map +1 -0
- package/dist/ocr-service-real.d.ts +32 -0
- package/dist/ocr-service-real.js +396 -0
- package/dist/ocr-service-real.js.map +1 -0
- package/dist/ocr-service.d.ts +28 -0
- package/dist/ocr-service.js +216 -0
- package/dist/ocr-service.js.map +1 -0
- package/dist/provider.d.ts +2 -0
- package/dist/provider.js +285 -0
- package/dist/provider.js.map +1 -0
- package/dist/screen-capture.d.ts +16 -0
- package/dist/screen-capture.js +302 -0
- package/dist/screen-capture.js.map +1 -0
- package/dist/service.d.ts +73 -0
- package/dist/service.js +1662 -0
- package/dist/service.js.map +1 -0
- package/dist/tests/e2e/index.d.ts +8 -0
- package/dist/tests/e2e/index.js +33 -0
- package/dist/tests/e2e/index.js.map +1 -0
- package/dist/tests/e2e/run-local.d.ts +2 -0
- package/dist/tests/e2e/run-local.js +166 -0
- package/dist/tests/e2e/run-local.js.map +1 -0
- package/dist/tests/e2e/screen-vision.d.ts +11 -0
- package/dist/tests/e2e/screen-vision.js +384 -0
- package/dist/tests/e2e/screen-vision.js.map +1 -0
- package/dist/tests/e2e/vision-autonomy.d.ts +11 -0
- package/dist/tests/e2e/vision-autonomy.js +375 -0
- package/dist/tests/e2e/vision-autonomy.js.map +1 -0
- package/dist/tests/e2e/vision-basic.d.ts +11 -0
- package/dist/tests/e2e/vision-basic.js +434 -0
- package/dist/tests/e2e/vision-basic.js.map +1 -0
- package/dist/tests/e2e/vision-capture-log.d.ts +11 -0
- package/dist/tests/e2e/vision-capture-log.js +302 -0
- package/dist/tests/e2e/vision-capture-log.js.map +1 -0
- package/dist/tests/e2e/vision-runtime.d.ts +11 -0
- package/dist/tests/e2e/vision-runtime.js +357 -0
- package/dist/tests/e2e/vision-runtime.js.map +1 -0
- package/dist/tests/e2e/vision-worker-tests.d.ts +11 -0
- package/dist/tests/e2e/vision-worker-tests.js +466 -0
- package/dist/tests/e2e/vision-worker-tests.js.map +1 -0
- package/dist/tests/test-pattern-generator.d.ts +40 -0
- package/dist/tests/test-pattern-generator.js +191 -0
- package/dist/tests/test-pattern-generator.js.map +1 -0
- package/dist/tests.d.ts +3 -0
- package/dist/tests.js +11 -0
- package/dist/tests.js.map +1 -0
- package/dist/types.d.ts +222 -0
- package/dist/types.js +16 -0
- package/dist/types.js.map +1 -0
- package/dist/vision-models.d.ts +47 -0
- package/dist/vision-models.js +501 -0
- package/dist/vision-models.js.map +1 -0
- package/dist/vision-worker-manager.d.ts +61 -0
- package/dist/vision-worker-manager.js +668 -0
- package/dist/vision-worker-manager.js.map +1 -0
- package/dist/workers/florence2-worker-simple.d.ts +13 -0
- package/dist/workers/florence2-worker-simple.js +121 -0
- package/dist/workers/florence2-worker-simple.js.map +1 -0
- package/dist/workers/florence2-worker.d.ts +1 -0
- package/dist/workers/florence2-worker.js +328 -0
- package/dist/workers/florence2-worker.js.map +1 -0
- package/dist/workers/ocr-worker.d.ts +1 -0
- package/dist/workers/ocr-worker.js +354 -0
- package/dist/workers/ocr-worker.js.map +1 -0
- package/dist/workers/screen-capture-worker.d.ts +1 -0
- package/dist/workers/screen-capture-worker.js +427 -0
- package/dist/workers/screen-capture-worker.js.map +1 -0
- package/dist/workers/worker-logger.d.ts +9 -0
- package/dist/workers/worker-logger.js +95 -0
- package/dist/workers/worker-logger.js.map +1 -0
- 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;
|