@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 +0,0 @@
1
- {"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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","sourcesContent":["// Vision service for camera integration and scene analysis\nimport {\n logger,\n ModelType,\n Service,\n type IAgentRuntime,\n type ServiceTypeName,\n} from '@elizaos/core';\nimport { exec } from 'child_process';\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\nimport sharp from 'sharp';\nimport { promisify } from 'util';\nimport { AudioCaptureService, type AudioConfig } from './audio-capture';\nimport { StreamingAudioCaptureService, type StreamingAudioConfig } from './audio-capture-stream';\nimport { EntityTracker } from './entity-tracker';\nimport { FaceRecognition } from './face-recognition';\nimport { Florence2Model } from './florence2-model';\nimport { OCRService } from './ocr-service';\nimport { ScreenCaptureService } from './screen-capture';\nimport {\n VisionMode,\n VisionServiceType,\n type BoundingBox,\n type CameraInfo,\n type DetectedObject,\n type EnhancedSceneDescription,\n type PersonInfo,\n type SceneDescription,\n type ScreenCapture,\n type TileAnalysis,\n type VisionConfig,\n type VisionFrame,\n} from './types';\nimport { VisionModels } from './vision-models';\nimport { VisionWorkerManager } from './vision-worker-manager';\n\nconst execAsync = promisify(exec);\n\ninterface CameraDevice {\n id: string;\n name: string;\n capture: () => Promise<Buffer>;\n}\n\nexport class VisionService extends Service {\n static override serviceType: ServiceTypeName = VisionServiceType.VISION;\n override capabilityDescription =\n 'Provides visual perception through camera integration and scene analysis.';\n\n private visionConfig: VisionConfig;\n private camera: CameraDevice | null = null;\n private lastFrame: VisionFrame | null = null;\n private lastSceneDescription: SceneDescription | null = null;\n private frameProcessingInterval: NodeJS.Timeout | null = null;\n private screenProcessingInterval: NodeJS.Timeout | null = null;\n private isProcessing = false;\n private isProcessingScreen = false;\n private visionModels: VisionModels;\n private faceRecognition: FaceRecognition;\n private entityTracker: EntityTracker;\n private audioCapture: AudioCaptureService | null = null;\n private streamingAudioCapture: StreamingAudioCaptureService | null = null;\n\n // Screen vision components\n private screenCapture: ScreenCaptureService;\n private florence2: Florence2Model;\n private ocrService: OCRService;\n private lastScreenCapture: ScreenCapture | null = null;\n private lastEnhancedScene: EnhancedSceneDescription | null = null;\n\n // Worker manager for high-FPS processing\n private workerManager: VisionWorkerManager | null = null;\n\n // Add tracking for last update times\n private lastTfUpdateTime = 0;\n private lastVlmUpdateTime = 0;\n private lastTfDescription = '';\n\n // Default configuration\n private readonly DEFAULT_CONFIG: VisionConfig = {\n pixelChangeThreshold: 50, // 50% change required for VLM update\n updateInterval: 100, // Process frames every 100ms\n enablePoseDetection: false,\n enableObjectDetection: false,\n tfUpdateInterval: 1000, // TensorFlow update every 1 second\n vlmUpdateInterval: 10000, // VLM update every 10 seconds\n tfChangeThreshold: 10, // 10% change triggers TF update\n vlmChangeThreshold: 50, // 50% change triggers VLM update\n visionMode: VisionMode.CAMERA, // Default to camera only\n screenCaptureInterval: 2000, // Screen capture every 2 seconds\n tileSize: 256,\n tileProcessingOrder: 'priority',\n ocrEnabled: true,\n florence2Enabled: true,\n };\n\n constructor(runtime: IAgentRuntime) {\n super(runtime);\n\n // Load configuration from runtime settings\n this.visionConfig = this.parseConfig(runtime);\n\n // Initialize vision models\n this.visionModels = new VisionModels(runtime);\n\n // Initialize face recognition\n this.faceRecognition = new FaceRecognition();\n\n // Initialize entity tracker\n const worldId = runtime.getSetting('WORLD_ID') || 'default-world';\n this.entityTracker = new EntityTracker(worldId);\n\n // Initialize screen capture\n this.screenCapture = new ScreenCaptureService(this.visionConfig);\n\n // Initialize Florence-2\n this.florence2 = new Florence2Model();\n\n // Initialize OCR service\n this.ocrService = new OCRService();\n\n logger.info('[VisionService] Constructed with config:', this.visionConfig);\n }\n\n private parseConfig(runtime: IAgentRuntime): VisionConfig {\n return {\n ...this.DEFAULT_CONFIG,\n cameraName: runtime.getSetting('CAMERA_NAME') || runtime.getSetting('VISION_CAMERA_NAME'),\n pixelChangeThreshold:\n Number(\n runtime.getSetting('PIXEL_CHANGE_THRESHOLD') ||\n runtime.getSetting('VISION_PIXEL_CHANGE_THRESHOLD')\n ) || this.DEFAULT_CONFIG.pixelChangeThreshold,\n enableObjectDetection:\n runtime.getSetting('ENABLE_OBJECT_DETECTION') === 'true' ||\n runtime.getSetting('VISION_ENABLE_OBJECT_DETECTION') === 'true',\n enablePoseDetection:\n runtime.getSetting('ENABLE_POSE_DETECTION') === 'true' ||\n runtime.getSetting('VISION_ENABLE_POSE_DETECTION') === 'true',\n tfUpdateInterval:\n Number(\n runtime.getSetting('TF_UPDATE_INTERVAL') ||\n runtime.getSetting('VISION_TF_UPDATE_INTERVAL')\n ) || this.DEFAULT_CONFIG.tfUpdateInterval,\n vlmUpdateInterval:\n Number(\n runtime.getSetting('VLM_UPDATE_INTERVAL') ||\n runtime.getSetting('VISION_VLM_UPDATE_INTERVAL')\n ) || this.DEFAULT_CONFIG.vlmUpdateInterval,\n tfChangeThreshold:\n Number(\n runtime.getSetting('TF_CHANGE_THRESHOLD') ||\n runtime.getSetting('VISION_TF_CHANGE_THRESHOLD')\n ) || this.DEFAULT_CONFIG.tfChangeThreshold,\n vlmChangeThreshold:\n Number(\n runtime.getSetting('VLM_CHANGE_THRESHOLD') ||\n runtime.getSetting('VISION_VLM_CHANGE_THRESHOLD')\n ) || this.DEFAULT_CONFIG.vlmChangeThreshold,\n visionMode:\n (runtime.getSetting('VISION_MODE') as VisionMode) || this.DEFAULT_CONFIG.visionMode,\n screenCaptureInterval:\n Number(\n runtime.getSetting('SCREEN_CAPTURE_INTERVAL') ||\n runtime.getSetting('VISION_SCREEN_CAPTURE_INTERVAL')\n ) || this.DEFAULT_CONFIG.screenCaptureInterval,\n ocrEnabled:\n runtime.getSetting('OCR_ENABLED') === 'true' ||\n runtime.getSetting('VISION_OCR_ENABLED') === 'true',\n florence2Enabled:\n runtime.getSetting('FLORENCE2_ENABLED') === 'true' ||\n runtime.getSetting('VISION_FLORENCE2_ENABLED') === 'true',\n };\n }\n\n static async start(runtime: IAgentRuntime): Promise<VisionService> {\n const service = new VisionService(runtime);\n await service.initialize();\n return service;\n }\n\n private async checkCameraTools(): Promise<{ available: boolean; tool: string }> {\n const platform = process.platform;\n\n try {\n if (platform === 'darwin') {\n // Check if imagesnap is installed\n await execAsync('which imagesnap');\n return { available: true, tool: 'imagesnap' };\n } else if (platform === 'linux') {\n // Check if fswebcam is installed\n await execAsync('which fswebcam');\n return { available: true, tool: 'fswebcam' };\n } else if (platform === 'win32') {\n // Check if ffmpeg is available\n await execAsync('where ffmpeg');\n return { available: true, tool: 'ffmpeg' };\n }\n return { available: false, tool: 'none' };\n } catch (_error) {\n // Tool not found\n return { available: false, tool: 'none' };\n }\n }\n\n private async initialize(): Promise<void> {\n try {\n // Initialize vision models if enabled\n const useEnhancedModels =\n this.visionConfig.enableObjectDetection || this.visionConfig.enablePoseDetection;\n\n if (useEnhancedModels) {\n try {\n // Try to initialize TensorFlow models first\n await this.visionModels.initialize({\n enableObjectDetection: this.visionConfig.enableObjectDetection || false,\n enablePoseDetection: this.visionConfig.enablePoseDetection || false,\n });\n logger.info('[VisionService] Using TensorFlow.js models for advanced detection');\n } catch (_tfError) {\n logger.warn(\n '[VisionService] TensorFlow.js not available, falling back to enhanced heuristics'\n );\n // Fall back to enhanced heuristics\n await this.visionModels.initialize({\n enableObjectDetection: this.visionConfig.enableObjectDetection || false,\n enablePoseDetection: this.visionConfig.enablePoseDetection || false,\n });\n logger.info('[VisionService] Using enhanced heuristics for detection');\n }\n }\n\n // Initialize screen vision if enabled\n if (\n this.visionConfig.visionMode === VisionMode.SCREEN ||\n this.visionConfig.visionMode === VisionMode.BOTH\n ) {\n await this.initializeScreenVision();\n }\n\n // Initialize camera if enabled\n if (\n this.visionConfig.visionMode === VisionMode.CAMERA ||\n this.visionConfig.visionMode === VisionMode.BOTH\n ) {\n await this.initializeCameraVision();\n }\n\n // Initialize audio capture if enabled\n await this.initializeAudioCapture();\n\n // Start processing based on mode\n this.startProcessing();\n } catch (error) {\n logger.error('[VisionService] Failed to initialize:', error);\n }\n }\n\n private async initializeScreenVision(): Promise<void> {\n try {\n logger.info('[VisionService] Initializing screen vision...');\n\n // Check if we should use worker threads for high-FPS processing\n const useWorkers =\n this.visionConfig.targetScreenFPS && this.visionConfig.targetScreenFPS > 10;\n\n if (useWorkers) {\n // Initialize worker manager for high-FPS processing\n logger.info('[VisionService] Initializing worker threads for high-FPS processing...');\n this.workerManager = new VisionWorkerManager(this.visionConfig);\n await this.workerManager.initialize();\n logger.info('[VisionService] Worker threads initialized');\n } else {\n // Initialize standard components\n // Initialize Florence-2 if enabled\n if (this.visionConfig.florence2Enabled) {\n await this.florence2.initialize();\n }\n\n // Initialize OCR if enabled\n if (this.visionConfig.ocrEnabled) {\n await this.ocrService.initialize();\n }\n }\n\n // Get screen info\n const screenInfo = await this.screenCapture.getScreenInfo();\n if (screenInfo) {\n logger.info(`[VisionService] Screen resolution: ${screenInfo.width}x${screenInfo.height}`);\n }\n\n logger.info('[VisionService] Screen vision initialized');\n } catch (error) {\n logger.error('[VisionService] Failed to initialize screen vision:', error);\n }\n }\n\n private async initializeCameraVision(): Promise<void> {\n // Check if camera tools are available\n const toolCheck = await this.checkCameraTools();\n if (!toolCheck.available) {\n const platform = process.platform;\n const toolName =\n platform === 'darwin' ? 'imagesnap' : platform === 'linux' ? 'fswebcam' : 'ffmpeg';\n logger.warn(\n `[VisionService] Camera capture tool '${toolName}' not found. Install it to enable camera functionality.`\n );\n logger.warn('[VisionService] For macOS: brew install imagesnap');\n logger.warn('[VisionService] For Linux: sudo apt-get install fswebcam');\n logger.warn('[VisionService] For Windows: Install ffmpeg and add to PATH');\n return;\n }\n\n // Find and connect to camera\n const camera = await this.findCamera();\n if (camera) {\n this.camera = camera;\n logger.info(`[VisionService] Connected to camera: ${camera.name}`);\n } else {\n logger.warn('[VisionService] No suitable camera found');\n }\n }\n\n private async initializeAudioCapture(): Promise<void> {\n const enableMicrophone = this.runtime.getSetting('ENABLE_MICROPHONE') === 'true';\n const useStreamingAudio = this.runtime.getSetting('USE_STREAMING_AUDIO') === 'true';\n\n if (!enableMicrophone) {\n logger.info('[VisionService] Microphone capture disabled');\n return;\n }\n\n try {\n if (useStreamingAudio) {\n // Use new streaming audio with VAD\n const streamingConfig: StreamingAudioConfig = {\n enabled: true,\n sampleRate: 16000,\n channels: 1,\n vadThreshold: Number(this.runtime.getSetting('VAD_THRESHOLD')) || 0.01,\n silenceTimeout: Number(this.runtime.getSetting('SILENCE_TIMEOUT')) || 1500,\n responseDelay: Number(this.runtime.getSetting('RESPONSE_DELAY')) || 3000,\n };\n\n this.streamingAudioCapture = new StreamingAudioCaptureService(\n this.runtime,\n streamingConfig\n );\n\n // Set up event listeners\n this.streamingAudioCapture.on('speechStart', () => {\n logger.info('[VisionService] User started speaking');\n });\n\n this.streamingAudioCapture.on('speechEnd', () => {\n logger.info('[VisionService] User stopped speaking');\n });\n\n this.streamingAudioCapture.on(\n 'transcription',\n (data: { text: string; isFinal: boolean }) => {\n logger.info(\n `[VisionService] Transcription (${data.isFinal ? 'final' : 'partial'}): ${data.text}`\n );\n }\n );\n\n this.streamingAudioCapture.on('utteranceComplete', async (text: string) => {\n logger.info('[VisionService] Processing complete utterance:', text);\n // Store the transcription in memory for context\n await this.storeAudioTranscription(text);\n });\n\n await this.streamingAudioCapture.initialize();\n logger.info('[VisionService] Streaming audio capture initialized with VAD');\n } else {\n // Use original batch audio capture\n const audioConfig: AudioConfig = {\n enabled: true,\n transcriptionInterval: Number(this.runtime.getSetting('TRANSCRIPTION_INTERVAL')) || 30000,\n };\n\n this.audioCapture = new AudioCaptureService(this.runtime, audioConfig);\n await this.audioCapture.initialize();\n logger.info('[VisionService] Batch audio capture initialized');\n }\n } catch (error) {\n logger.error('[VisionService] Failed to initialize audio capture:', error);\n // Continue without audio\n }\n }\n\n private async storeAudioTranscription(text: string): Promise<void> {\n try {\n // Store transcription in the current scene description\n if (this.lastSceneDescription) {\n this.lastSceneDescription.audioTranscription = text;\n }\n\n // You could also create a memory here if needed\n logger.debug('[VisionService] Stored audio transcription in scene context');\n } catch (error) {\n logger.error('[VisionService] Failed to store audio transcription:', error);\n }\n }\n\n private startProcessing(): void {\n // Start camera processing if enabled\n if (\n (this.visionConfig.visionMode === VisionMode.CAMERA ||\n this.visionConfig.visionMode === VisionMode.BOTH) &&\n this.camera\n ) {\n this.startFrameProcessing();\n }\n\n // Start screen processing if enabled\n if (\n this.visionConfig.visionMode === VisionMode.SCREEN ||\n this.visionConfig.visionMode === VisionMode.BOTH\n ) {\n this.startScreenProcessing();\n }\n }\n\n private startFrameProcessing(): void {\n if (this.frameProcessingInterval) {\n return;\n }\n\n this.frameProcessingInterval = setInterval(async () => {\n if (!this.isProcessing && this.camera) {\n this.isProcessing = true;\n try {\n await this.captureAndProcessFrame();\n } catch (error) {\n logger.error('[VisionService] Frame processing error:', error);\n }\n this.isProcessing = false;\n }\n }, this.visionConfig.updateInterval || 100);\n\n logger.debug('[VisionService] Started frame processing loop');\n }\n\n private async captureAndProcessFrame(): Promise<void> {\n if (!this.camera) {\n return;\n }\n\n try {\n // Capture frame from camera\n const frameData = await this.camera.capture();\n\n // Skip if no data\n if (!frameData || frameData.length === 0) {\n logger.debug('[VisionService] Camera returned empty frame, skipping');\n return;\n }\n\n // Convert to standardized format\n const frame = await this.processFrameData(frameData);\n\n // Validate frame before processing\n if (!frame || frame.width === 0 || frame.height === 0) {\n logger.warn('[VisionService] Invalid frame dimensions, skipping');\n return;\n }\n\n // Check if scene has changed significantly\n const changePercentage = this.lastFrame\n ? await this.calculatePixelChange(this.lastFrame, frame)\n : 100;\n\n // Update scene description if change is significant or enough time has passed\n // Always call updateSceneDescription - it will decide what to update based on thresholds\n await this.updateSceneDescription(frame, changePercentage);\n\n this.lastFrame = frame;\n } catch (error) {\n logger.error('[VisionService] Error capturing frame:', error);\n }\n }\n\n private async processFrameData(data: Buffer): Promise<VisionFrame> {\n // Validate input data\n if (!data || data.length === 0) {\n throw new Error('Empty frame data received from camera');\n }\n\n // Use sharp to ensure consistent format\n const image = sharp(data);\n const metadata = await image.metadata();\n\n // Validate metadata\n if (!metadata.width || !metadata.height || metadata.width === 0 || metadata.height === 0) {\n throw new Error(`Invalid image dimensions: ${metadata.width}x${metadata.height}`);\n }\n\n const rgbaBuffer = await image.ensureAlpha().raw().toBuffer();\n\n return {\n timestamp: Date.now(),\n width: metadata.width,\n height: metadata.height,\n data: rgbaBuffer,\n format: 'rgba',\n };\n }\n\n private async calculatePixelChange(frame1: VisionFrame, frame2: VisionFrame): Promise<number> {\n if (frame1.width !== frame2.width || frame1.height !== frame2.height) {\n return 100; // Different dimensions = complete change\n }\n\n const pixels1 = frame1.data;\n const pixels2 = frame2.data;\n let changedPixels = 0;\n const totalPixels = frame1.width * frame1.height;\n const threshold = 30; // RGB difference threshold\n\n for (let i = 0; i < pixels1.length; i += 4) {\n const r1 = pixels1[i];\n const g1 = pixels1[i + 1];\n const b1 = pixels1[i + 2];\n const r2 = pixels2[i];\n const g2 = pixels2[i + 1];\n const b2 = pixels2[i + 2];\n\n const diff = Math.abs(r1 - r2) + Math.abs(g1 - g2) + Math.abs(b1 - b2);\n if (diff > threshold) {\n changedPixels++;\n }\n }\n\n return (changedPixels / totalPixels) * 100;\n }\n\n private async updateSceneDescription(\n frame: VisionFrame,\n changePercentage: number\n ): Promise<void> {\n try {\n const currentTime = Date.now();\n\n // Convert frame to base64 for VLM\n const jpegBuffer = await sharp(frame.data, {\n raw: {\n width: frame.width,\n height: frame.height,\n channels: 4,\n },\n })\n .jpeg()\n .toBuffer();\n\n const base64Image = jpegBuffer.toString('base64');\n const imageUrl = `data:image/jpeg;base64,${base64Image}`;\n\n // Determine if we should update VLM description\n const timeSinceVlmUpdate = currentTime - this.lastVlmUpdateTime;\n const shouldUpdateVlm =\n timeSinceVlmUpdate >= this.visionConfig.vlmUpdateInterval! || // Time threshold\n changePercentage >= this.visionConfig.vlmChangeThreshold!; // Change threshold\n\n let description = this.lastTfDescription;\n\n if (shouldUpdateVlm) {\n // Use VLM to describe the scene\n description = await this.describeSceneWithVLM(imageUrl);\n this.lastVlmUpdateTime = currentTime;\n this.lastTfDescription = description;\n logger.debug(\n `[VisionService] VLM updated: ${timeSinceVlmUpdate}ms since last update, ${changePercentage.toFixed(1)}% change`\n );\n }\n\n // Determine if we should update TensorFlow detections\n const timeSinceTfUpdate = currentTime - this.lastTfUpdateTime;\n const shouldUpdateTf =\n timeSinceTfUpdate >= this.visionConfig.tfUpdateInterval! || // Time threshold\n changePercentage >= this.visionConfig.tfChangeThreshold!; // Change threshold\n\n let detectedObjects: DetectedObject[] = [];\n let people: PersonInfo[] = [];\n\n if (\n shouldUpdateTf &&\n (this.visionConfig.enableObjectDetection || this.visionConfig.enablePoseDetection)\n ) {\n this.lastTfUpdateTime = currentTime;\n logger.debug(\n `[VisionService] TF updating: ${timeSinceTfUpdate}ms since last update, ${changePercentage.toFixed(1)}% change`\n );\n\n // Use advanced computer vision if enabled\n if (this.visionConfig.enableObjectDetection) {\n if (this.visionModels.hasObjectDetection()) {\n detectedObjects = await this.visionModels.detectObjects(\n frame.data,\n frame.width,\n frame.height\n );\n logger.debug(`[VisionService] VisionModels detected ${detectedObjects.length} objects`);\n }\n }\n\n if (this.visionConfig.enablePoseDetection) {\n if (this.visionModels.hasPoseDetection()) {\n const poses = await this.visionModels.detectPoses(\n frame.data,\n frame.width,\n frame.height\n );\n people = poses;\n logger.debug(\n `[VisionService] VisionModels detected ${people.length} people with poses`\n );\n }\n }\n\n // If no people detected via pose but objects detected, check for person objects\n if (people.length === 0 && detectedObjects.length > 0) {\n const personObjects = detectedObjects.filter((obj) => obj.type === 'person');\n people = personObjects.map((obj) => ({\n id: `person-${obj.id}`,\n pose: 'unknown' as const,\n facing: 'unknown' as const,\n confidence: obj.confidence,\n boundingBox: obj.boundingBox,\n }));\n }\n } else if (!shouldUpdateTf && this.lastSceneDescription) {\n // Reuse last detection results if not updating\n detectedObjects = this.lastSceneDescription.objects;\n people = this.lastSceneDescription.people;\n } else {\n // Fall back to motion-based detection\n detectedObjects = await this.detectMotionObjects(frame);\n people = await this.detectPeopleFromMotion(frame, detectedObjects);\n }\n\n // Face recognition and entity tracking\n const faceProfiles = new Map<string, string>();\n const enableFaceRecognition = this.runtime.getSetting('ENABLE_FACE_RECOGNITION') === 'true';\n\n if (enableFaceRecognition && people.length > 0 && frame.width > 0 && frame.height > 0) {\n try {\n // Validate frame data\n if (!frame.data || frame.data.length === 0) {\n logger.warn('[VisionService] Invalid frame data for face recognition');\n return;\n }\n\n // Detect faces in the frame\n const faces = await this.faceRecognition.detectFaces(\n frame.data,\n frame.width,\n frame.height\n );\n\n // Match faces to people based on bounding box overlap\n for (const face of faces) {\n const faceBox = face.detection.box;\n\n // Find the person this face belongs to\n for (const person of people) {\n const overlap = this.calculateBoxOverlap(person.boundingBox, {\n x: Math.round(faceBox.x),\n y: Math.round(faceBox.y),\n width: Math.round(faceBox.width),\n height: Math.round(faceBox.height),\n });\n\n if (overlap > 0.5) {\n // 50% overlap threshold\n // Recognize or register the face\n const match = await this.faceRecognition.recognizeFace(face.descriptor);\n let profileId: string;\n\n if (match) {\n profileId = match.profileId;\n logger.debug(\n `[VisionService] Recognized face: ${profileId} (distance: ${match.distance})`\n );\n } else {\n // Register new face\n profileId = await this.faceRecognition.addOrUpdateFace(face.descriptor, {\n attributes: {\n age: face.ageGender?.age.toString(),\n gender: face.ageGender?.gender,\n emotion: face.expressions\n ? this.getDominantExpression(face.expressions)\n : undefined,\n },\n });\n logger.info(`[VisionService] New face registered: ${profileId}`);\n }\n\n faceProfiles.set(person.id, profileId);\n break;\n }\n }\n }\n } catch (faceError) {\n logger.error('[VisionService] Face recognition error:', faceError);\n }\n }\n\n // Update entity tracker\n const _trackedEntities = await this.entityTracker.updateEntities(\n detectedObjects,\n people,\n faceProfiles,\n this.runtime\n );\n\n // Create scene description\n this.lastSceneDescription = {\n timestamp: frame.timestamp,\n description,\n objects: detectedObjects,\n people,\n sceneChanged: shouldUpdateVlm || shouldUpdateTf,\n changePercentage,\n };\n\n // Enhanced logging\n if (shouldUpdateVlm || shouldUpdateTf) {\n logger.info('[VisionService] Scene Analysis Complete:');\n logger.info(` VLM Description: ${description.substring(0, 100)}...`);\n logger.info(` Change: ${changePercentage.toFixed(1)}%`);\n logger.info(\n ` Updates: ${shouldUpdateVlm ? 'VLM' : ''}${shouldUpdateVlm && shouldUpdateTf ? ' + ' : ''}${shouldUpdateTf ? 'TF' : ''}`\n );\n logger.info(\n ` Detection Mode: ${this.visionConfig.enableObjectDetection ? 'Advanced CV' : 'Motion-based'}`\n );\n\n if (detectedObjects.length > 0) {\n logger.info(` Objects: ${detectedObjects.length} detected`);\n\n // Group objects by type for summary\n const objectSummary = detectedObjects.reduce(\n (acc, obj) => {\n acc[obj.type] = (acc[obj.type] || 0) + 1;\n return acc;\n },\n {} as Record<string, number>\n );\n\n for (const [type, count] of Object.entries(objectSummary)) {\n logger.info(` - ${count} ${type}(s)`);\n }\n }\n\n if (people.length > 0) {\n logger.info(` People: ${people.length} detected`);\n for (const person of people) {\n logger.info(\n ` - Person: ${person.pose} pose, facing ${person.facing}, confidence: ${person.confidence.toFixed(2)}`\n );\n }\n }\n }\n } catch (error) {\n logger.error('[VisionService] Failed to update scene description:', error);\n }\n }\n\n private async describeSceneWithVLM(imageUrl: string): Promise<string> {\n try {\n // Convert base64 image URL to buffer for Florence-2\n if (imageUrl.startsWith('data:image/')) {\n const base64Data = imageUrl.split(',')[1];\n const imageBuffer = Buffer.from(base64Data, 'base64');\n\n // Use Florence-2 for all image descriptions\n if (this.florence2.isInitialized()) {\n try {\n const result = await this.florence2.analyzeImage(imageBuffer);\n if (result.caption) {\n logger.debug('[VisionService] Florence-2 description:', result.caption);\n return result.caption;\n }\n } catch (florenceError) {\n logger.warn('[VisionService] Florence-2 analysis failed, falling back:', florenceError);\n }\n }\n }\n\n // Fallback to runtime model if Florence-2 is not available\n try {\n const result = await this.runtime.useModel(ModelType.IMAGE_DESCRIPTION, imageUrl);\n\n if (result && typeof result === 'object' && 'description' in result) {\n const description = (result as any).description as string;\n // Check if we got the unhelpful default response\n if (\n !description.includes(\"I'm unable to analyze images\") &&\n !description.includes(\"I can't analyze images\")\n ) {\n return description;\n }\n } else if (typeof result === 'string') {\n const stringResult = result as string;\n if (\n stringResult.length > 0 &&\n !stringResult.includes(\"I'm unable to analyze images\") &&\n !stringResult.includes(\"I can't analyze images\")\n ) {\n return stringResult;\n }\n }\n } catch (modelError) {\n logger.warn('[VisionService] Runtime IMAGE_DESCRIPTION model failed:', modelError);\n }\n\n // If we got the unhelpful response or an error, provide a basic description based on detected objects\n if (this.lastSceneDescription) {\n const { objects, people } = this.lastSceneDescription;\n let description = 'Scene contains';\n\n if (people.length > 0) {\n description += ` ${people.length} person${people.length > 1 ? 's' : ''}`;\n const poses = people.map((p) => p.pose).filter((p) => p !== 'unknown');\n if (poses.length > 0) {\n description += ` (${poses.join(', ')})`;\n }\n }\n\n if (objects.length > 0 && people.length > 0) {\n description += ' and';\n }\n\n if (objects.length > 0) {\n const objectTypes = [...new Set(objects.map((o) => o.type))];\n description += ` ${objectTypes.join(', ')}`;\n }\n\n if (people.length === 0 && objects.length === 0) {\n description = 'Scene appears to be empty or static';\n }\n\n return description;\n }\n\n // Final fallback\n return 'Visual scene captured';\n } catch (error) {\n logger.error('[VisionService] VLM description failed:', error);\n return 'Unable to describe scene';\n }\n }\n\n private async detectMotionObjects(frame: VisionFrame): Promise<DetectedObject[]> {\n if (!this.lastFrame) {\n return [];\n }\n\n const objects: DetectedObject[] = [];\n const blockSize = 64; // Larger blocks for less noise\n const motionThreshold = 50; // Higher threshold for more significant changes\n\n // Divide frame into blocks and detect motion regions\n for (let y = 0; y < frame.height - blockSize; y += blockSize / 2) {\n // Overlap blocks\n for (let x = 0; x < frame.width - blockSize; x += blockSize / 2) {\n let blockMotion = 0;\n let pixelCount = 0;\n\n // Check motion in this block\n for (let by = 0; by < blockSize; by += 2) {\n // Sample every other pixel for speed\n for (let bx = 0; bx < blockSize; bx += 2) {\n const px = x + bx;\n const py = y + by;\n const idx = (py * frame.width + px) * 4;\n\n if (idx < frame.data.length && idx < this.lastFrame.data.length) {\n const r1 = frame.data[idx];\n const g1 = frame.data[idx + 1];\n const b1 = frame.data[idx + 2];\n const r2 = this.lastFrame.data[idx];\n const g2 = this.lastFrame.data[idx + 1];\n const b2 = this.lastFrame.data[idx + 2];\n\n const diff = Math.abs(r1 - r2) + Math.abs(g1 - g2) + Math.abs(b1 - b2);\n if (diff > motionThreshold) {\n blockMotion++;\n }\n pixelCount++;\n }\n }\n }\n\n // If significant motion in block, consider it an object\n const motionPercentage = (blockMotion / pixelCount) * 100;\n if (motionPercentage > 30) {\n // 30% of sampled pixels show motion\n objects.push({\n id: `motion-${x}-${y}-${frame.timestamp}`,\n type: 'motion-object',\n confidence: Math.min(motionPercentage / 100, 1),\n boundingBox: {\n x,\n y,\n width: blockSize,\n height: blockSize,\n },\n });\n }\n }\n }\n\n // Merge adjacent motion blocks into larger objects\n const merged = this.mergeAdjacentObjects(objects);\n\n // Filter out very small objects (likely noise)\n const filtered = merged.filter((obj) => {\n const area = obj.boundingBox.width * obj.boundingBox.height;\n return area > 2000; // Minimum area threshold\n });\n\n return filtered;\n }\n\n private mergeAdjacentObjects(objects: DetectedObject[]): DetectedObject[] {\n if (objects.length === 0) {\n return [];\n }\n\n const merged: DetectedObject[] = [];\n const used = new Set<number>();\n const mergeDistance = 80; // Distance to consider objects adjacent\n\n for (let i = 0; i < objects.length; i++) {\n if (used.has(i)) {\n continue;\n }\n\n const current = objects[i];\n const cluster: DetectedObject[] = [current];\n used.add(i);\n\n // Find all adjacent objects\n let foundNew = true;\n while (foundNew) {\n foundNew = false;\n for (let j = 0; j < objects.length; j++) {\n if (used.has(j)) {\n continue;\n }\n\n const other = objects[j];\n\n // Check if adjacent to any object in cluster\n for (const clusterObj of cluster) {\n const isAdjacent =\n Math.abs(clusterObj.boundingBox.x - other.boundingBox.x) <= mergeDistance &&\n Math.abs(clusterObj.boundingBox.y - other.boundingBox.y) <= mergeDistance;\n\n if (isAdjacent) {\n cluster.push(other);\n used.add(j);\n foundNew = true;\n break;\n }\n }\n }\n }\n\n // Merge cluster into single object\n if (cluster.length > 0) {\n const minX = Math.min(...cluster.map((o) => o.boundingBox.x));\n const minY = Math.min(...cluster.map((o) => o.boundingBox.y));\n const maxX = Math.max(...cluster.map((o) => o.boundingBox.x + o.boundingBox.width));\n const maxY = Math.max(...cluster.map((o) => o.boundingBox.y + o.boundingBox.height));\n const avgConfidence = cluster.reduce((sum, o) => sum + o.confidence, 0) / cluster.length;\n\n merged.push({\n id: `merged-${minX}-${minY}-${Date.now()}`,\n type: this.classifyObjectBySize(maxX - minX, maxY - minY),\n confidence: avgConfidence,\n boundingBox: {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY,\n },\n });\n }\n }\n\n return merged;\n }\n\n private classifyObjectBySize(width: number, height: number): string {\n const area = width * height;\n const aspectRatio = width / height;\n\n // Improved classification heuristics\n if (area > 30000 && aspectRatio > 0.4 && aspectRatio < 0.8) {\n return 'person-candidate';\n } else if (area > 20000) {\n return 'large-object';\n } else if (area > 8000) {\n return 'medium-object';\n } else {\n return 'small-object';\n }\n }\n\n private async detectPeopleFromMotion(\n frame: VisionFrame,\n objects: DetectedObject[]\n ): Promise<PersonInfo[]> {\n const people: PersonInfo[] = [];\n const personCandidates = objects.filter((o) => o.type === 'person-candidate');\n\n for (let i = 0; i < personCandidates.length; i++) {\n const candidate = personCandidates[i];\n const box = candidate.boundingBox;\n\n // Simple heuristic: if height > width * 1.5, likely standing\n // if width > height, likely sitting/lying\n const aspectRatio = box.width / box.height;\n let pose: 'standing' | 'sitting' | 'lying' | 'unknown' = 'unknown';\n\n if (aspectRatio < 0.6) {\n pose = 'standing';\n } else if (aspectRatio > 1.2) {\n pose = 'lying';\n } else {\n pose = 'sitting';\n }\n\n // Estimate facing based on motion direction (simplified)\n let facing: 'camera' | 'away' | 'left' | 'right' | 'unknown' = 'unknown';\n if (this.lastFrame) {\n // In Phase 1, we'll just use 'unknown' or random assignment\n // Phase 2 will implement proper pose detection\n facing = 'camera'; // Default assumption\n }\n\n people.push({\n id: `person-${i}-${frame.timestamp}`,\n confidence: candidate.confidence,\n pose,\n facing,\n boundingBox: box,\n });\n }\n\n return people;\n }\n\n private startScreenProcessing(): void {\n if (this.screenProcessingInterval) {\n return;\n }\n\n this.screenProcessingInterval = setInterval(async () => {\n if (!this.isProcessingScreen) {\n this.isProcessingScreen = true;\n try {\n await this.captureAndProcessScreen();\n } catch (error) {\n logger.error('[VisionService] Screen processing error:', error);\n }\n this.isProcessingScreen = false;\n }\n }, this.visionConfig.screenCaptureInterval || 2000);\n\n logger.debug('[VisionService] Started screen processing loop');\n }\n\n private async captureAndProcessScreen(): Promise<void> {\n try {\n // Capture screen\n const capture = await this.screenCapture.captureScreen();\n this.lastScreenCapture = capture;\n\n // Process active tile\n const activeTile = this.screenCapture.getActiveTile();\n if (activeTile && activeTile.data) {\n const tileAnalysis = await this.analyzeTile(activeTile);\n activeTile.analysis = tileAnalysis;\n }\n\n // Update enhanced scene description\n await this.updateEnhancedSceneDescription();\n } catch (error) {\n logger.error('[VisionService] Error capturing screen:', error);\n }\n }\n\n private async analyzeTile(tile: any): Promise<TileAnalysis> {\n const analysis: TileAnalysis = {\n timestamp: Date.now(),\n };\n\n try {\n // Run Florence-2 analysis if enabled\n if (this.visionConfig.florence2Enabled && tile.data) {\n analysis.florence2 = await this.florence2.analyzeTile(tile);\n analysis.summary = analysis.florence2.caption;\n }\n\n // Run OCR if enabled\n if (this.visionConfig.ocrEnabled && tile.data) {\n analysis.ocr = await this.ocrService.extractFromTile(tile);\n analysis.text = analysis.ocr.fullText;\n }\n\n // Extract objects from Florence-2 results\n if (analysis.florence2?.objects) {\n analysis.objects = analysis.florence2.objects.map((obj) => ({\n id: `screen-obj-${Date.now()}-${Math.random()}`,\n type: obj.label,\n confidence: obj.confidence,\n boundingBox: obj.bbox,\n }));\n }\n } catch (error) {\n logger.error('[VisionService] Error analyzing tile:', error);\n }\n\n return analysis;\n }\n\n private async updateEnhancedSceneDescription(): Promise<void> {\n if (!this.lastScreenCapture) {\n return;\n }\n\n const enhancedScene: EnhancedSceneDescription = {\n ...(this.lastSceneDescription || {\n timestamp: Date.now(),\n description: '',\n objects: [],\n people: [],\n sceneChanged: false,\n changePercentage: 0,\n }),\n screenCapture: this.lastScreenCapture,\n screenAnalysis: {\n fullScreenOCR: '',\n activeTile: this.screenCapture.getActiveTile()?.analysis,\n gridSummary: '',\n focusedApp: '',\n uiElements: [],\n },\n };\n\n // Aggregate OCR from all processed tiles\n const processedTiles = this.lastScreenCapture.tiles.filter((t) => t.analysis?.ocr);\n if (processedTiles.length > 0) {\n enhancedScene.screenAnalysis!.fullScreenOCR = processedTiles\n .map((t) => t.analysis!.ocr!.fullText)\n .join('\\n');\n }\n\n // Generate grid summary\n if (this.lastScreenCapture.tiles.length > 0) {\n const tilesWithContent = this.lastScreenCapture.tiles.filter((t) => t.analysis);\n enhancedScene.screenAnalysis!.gridSummary = `Screen divided into ${this.lastScreenCapture.tiles.length} tiles, ${tilesWithContent.length} analyzed`;\n }\n\n // Detect focused application (heuristic based on UI elements)\n if (enhancedScene.screenAnalysis!.activeTile?.florence2?.objects) {\n const windows = enhancedScene.screenAnalysis!.activeTile.florence2.objects.filter(\n (obj) => obj.label === 'window'\n );\n if (windows.length > 0) {\n enhancedScene.screenAnalysis!.focusedApp = 'Desktop Application';\n }\n }\n\n this.lastEnhancedScene = enhancedScene;\n }\n\n // Public API methods\n\n public async getCurrentFrame(): Promise<VisionFrame | null> {\n return this.lastFrame;\n }\n\n public async getSceneDescription(): Promise<SceneDescription | null> {\n return this.lastSceneDescription;\n }\n\n public async getEnhancedSceneDescription(): Promise<EnhancedSceneDescription | null> {\n // If worker manager is available, use its high-FPS data\n if (this.workerManager) {\n return this.workerManager.getLatestEnhancedScene();\n }\n\n // Otherwise fall back to standard processing\n return this.lastEnhancedScene || this.lastSceneDescription;\n }\n\n public async getScreenCapture(): Promise<ScreenCapture | null> {\n return this.lastScreenCapture;\n }\n\n public getVisionMode(): VisionMode {\n return this.visionConfig.visionMode || VisionMode.CAMERA;\n }\n\n public async setVisionMode(mode: VisionMode): Promise<void> {\n logger.info(\n `[VisionService] Changing vision mode from ${this.visionConfig.visionMode} to ${mode}`\n );\n\n // Stop current processing\n this.stopProcessing();\n\n // Update configuration\n this.visionConfig.visionMode = mode;\n\n // Reinitialize based on new mode\n if (mode === VisionMode.OFF) {\n logger.info('[VisionService] Vision disabled');\n return;\n }\n\n // Initialize components for new mode\n if ((mode === VisionMode.CAMERA || mode === VisionMode.BOTH) && !this.camera) {\n await this.initializeCameraVision();\n }\n\n if (\n (mode === VisionMode.SCREEN || mode === VisionMode.BOTH) &&\n (!this.florence2.isInitialized() || !this.ocrService.isInitialized())\n ) {\n await this.initializeScreenVision();\n }\n\n // Start processing for new mode\n this.startProcessing();\n }\n\n private stopProcessing(): void {\n if (this.frameProcessingInterval) {\n clearInterval(this.frameProcessingInterval);\n this.frameProcessingInterval = null;\n }\n\n if (this.screenProcessingInterval) {\n clearInterval(this.screenProcessingInterval);\n this.screenProcessingInterval = null;\n }\n }\n\n public getCameraInfo(): CameraInfo | null {\n if (!this.camera) {\n return null;\n }\n\n return {\n id: this.camera.id,\n name: this.camera.name,\n connected: true,\n };\n }\n\n public isActive(): boolean {\n return this.camera !== null && this.frameProcessingInterval !== null;\n }\n\n // Helper methods for face recognition\n private calculateBoxOverlap(box1: BoundingBox, box2: BoundingBox): number {\n const x1 = Math.max(box1.x, box2.x);\n const y1 = Math.max(box1.y, box2.y);\n const x2 = Math.min(box1.x + box1.width, box2.x + box2.width);\n const y2 = Math.min(box1.y + box1.height, box2.y + box2.height);\n\n if (x2 < x1 || y2 < y1) {\n return 0;\n }\n\n const intersection = (x2 - x1) * (y2 - y1);\n const area1 = box1.width * box1.height;\n const area2 = box2.width * box2.height;\n const union = area1 + area2 - intersection;\n\n return intersection / union;\n }\n\n private getDominantExpression(expressions: any): string {\n let maxValue = 0;\n let dominantExpression = 'neutral';\n\n for (const [expression, value] of Object.entries(expressions)) {\n if (typeof value === 'number' && value > maxValue) {\n maxValue = value;\n dominantExpression = expression;\n }\n }\n\n return dominantExpression;\n }\n\n // Public methods for entity tracking\n public getEntityTracker(): EntityTracker {\n return this.entityTracker;\n }\n\n public getFaceRecognition(): FaceRecognition {\n return this.faceRecognition;\n }\n\n async stop(): Promise<void> {\n logger.info('[VisionService] Stopping vision service...');\n\n this.stopProcessing();\n\n if (this.audioCapture) {\n await this.audioCapture.stop();\n this.audioCapture = null;\n }\n\n if (this.streamingAudioCapture) {\n await this.streamingAudioCapture.stop();\n this.streamingAudioCapture = null;\n }\n\n if (this.visionModels) {\n await this.visionModels.dispose();\n }\n\n if (this.workerManager) {\n await this.workerManager.stop();\n this.workerManager = null;\n }\n\n this.camera = null;\n this.lastFrame = null;\n this.lastSceneDescription = null;\n this.lastScreenCapture = null;\n this.lastEnhancedScene = null;\n this.isProcessing = false;\n this.isProcessingScreen = false;\n\n // Dispose of models\n await this.florence2.dispose();\n await this.ocrService.dispose();\n\n logger.info('[VisionService] Stopped.');\n }\n\n private async findCamera(): Promise<CameraDevice | null> {\n try {\n // Get list of available cameras\n const cameras = await this.listCameras();\n\n if (cameras.length === 0) {\n logger.warn('[VisionService] No cameras detected');\n return null;\n }\n\n // If camera name is specified, try to find it\n if (this.visionConfig.cameraName) {\n const searchName = this.visionConfig.cameraName.toLowerCase();\n const matchedCamera = cameras.find((cam) => cam.name.toLowerCase().includes(searchName));\n\n if (matchedCamera) {\n return this.createCameraDevice(matchedCamera);\n }\n\n logger.warn(\n `[VisionService] Camera \"${this.visionConfig.cameraName}\" not found, using default`\n );\n }\n\n // Use first available camera\n return this.createCameraDevice(cameras[0]);\n } catch (error) {\n logger.error('[VisionService] Error finding camera:', error);\n return null;\n }\n }\n\n private async listCameras(): Promise<CameraInfo[]> {\n const platform = process.platform;\n\n try {\n if (platform === 'darwin') {\n // macOS: Use system_profiler\n const { stdout } = await execAsync('system_profiler SPCameraDataType -json');\n const data = JSON.parse(stdout);\n const cameras: CameraInfo[] = [];\n\n if (data.SPCameraDataType && Array.isArray(data.SPCameraDataType)) {\n for (const camera of data.SPCameraDataType) {\n cameras.push({\n id: camera.unique_id || camera._name,\n name: camera._name,\n connected: true,\n });\n }\n }\n\n return cameras;\n } else if (platform === 'linux') {\n // Linux: Use v4l2\n const { stdout } = await execAsync('v4l2-ctl --list-devices');\n const cameras: CameraInfo[] = [];\n const lines = stdout.split('\\n');\n\n let currentName = '';\n for (const line of lines) {\n if (line && !line.startsWith('\\t')) {\n currentName = line.replace(':', '').trim();\n } else if (line.trim().startsWith('/dev/video')) {\n const devicePath = line.trim();\n const id = devicePath.replace('/dev/video', '');\n cameras.push({\n id,\n name: currentName,\n connected: true,\n });\n }\n }\n\n return cameras;\n } else if (platform === 'win32') {\n // Windows: Use PowerShell\n const { stdout } = await execAsync(\n 'powershell -Command \"Get-PnpDevice -Class Camera | Select-Object FriendlyName, InstanceId | ConvertTo-Json\"'\n );\n const devices = JSON.parse(stdout);\n const cameras: CameraInfo[] = [];\n\n if (Array.isArray(devices)) {\n for (const device of devices) {\n cameras.push({\n id: device.InstanceId,\n name: device.FriendlyName,\n connected: true,\n });\n }\n }\n\n return cameras;\n }\n\n return [];\n } catch (error) {\n logger.error('[VisionService] Error listing cameras:', error);\n return [];\n }\n }\n\n private createCameraDevice(info: CameraInfo): CameraDevice {\n const platform = process.platform;\n\n return {\n id: info.id,\n name: info.name,\n capture: async () => {\n const tempFile = path.join(process.cwd(), `temp_capture_${Date.now()}.jpg`);\n\n try {\n if (platform === 'darwin') {\n // macOS: Use imagesnap\n try {\n await execAsync(`imagesnap -d \"${info.name}\" \"${tempFile}\"`);\n } catch (error: any) {\n if (error.message.includes('command not found')) {\n throw new Error('imagesnap not installed. Run: brew install imagesnap');\n }\n throw error;\n }\n } else if (platform === 'linux') {\n // Linux: Use fswebcam\n try {\n await execAsync(\n `fswebcam -d /dev/video${info.id} -r 1280x720 --jpeg 85 \"${tempFile}\"`\n );\n } catch (error: any) {\n if (error.message.includes('command not found')) {\n throw new Error('fswebcam not installed. Run: sudo apt-get install fswebcam');\n }\n throw error;\n }\n } else if (platform === 'win32') {\n // Windows: Use DirectShow via ffmpeg\n try {\n await execAsync(\n `ffmpeg -f dshow -i video=\"${info.name}\" -frames:v 1 -q:v 2 \"${tempFile}\" -y`\n );\n } catch (error: any) {\n if (error.message.includes('not recognized') || error.message.includes('not found')) {\n throw new Error('ffmpeg not installed. Download from ffmpeg.org and add to PATH');\n }\n throw error;\n }\n } else {\n throw new Error(`Unsupported platform: ${platform}`);\n }\n\n // Read the captured image\n const imageBuffer = await fs.readFile(tempFile);\n\n // Clean up temp file\n await fs.unlink(tempFile).catch(() => {});\n\n return imageBuffer;\n } catch (error) {\n // Clean up temp file on error\n await fs.unlink(tempFile).catch(() => {});\n throw error;\n }\n },\n };\n }\n\n public async captureImage(): Promise<Buffer | null> {\n if (!this.camera) {\n logger.warn('[VisionService] No camera available for capture');\n return null;\n }\n\n try {\n return await this.camera.capture();\n } catch (error) {\n logger.error('[VisionService] Failed to capture image:', error);\n return null;\n }\n }\n}\n"]}
@@ -1,8 +0,0 @@
1
- export { default as VisionBasicE2ETestSuite } from './vision-basic';
2
- export { default as VisionAutonomyE2ETestSuite } from './vision-autonomy';
3
- export { default as VisionCaptureLogTestSuite } from './vision-capture-log';
4
- export { default as ScreenVisionE2ETestSuite } from './screen-vision';
5
- export { default as VisionRuntimeTestSuite } from './vision-runtime';
6
- export { default as VisionWorkerE2ETestSuite } from './vision-worker-tests';
7
- export declare const testSuites: (import("./vision-basic").VisionBasicE2ETestSuite | import("./vision-autonomy").VisionAutonomyE2ETestSuite | import("./vision-capture-log").VisionCaptureLogTestSuite | import("./screen-vision").ScreenVisionE2ETestSuite | import("./vision-runtime").VisionRuntimeTestSuite | import("./vision-worker-tests").VisionWorkerE2ETestSuite)[];
8
- export default testSuites;
@@ -1,33 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.testSuites = exports.VisionWorkerE2ETestSuite = exports.VisionRuntimeTestSuite = exports.ScreenVisionE2ETestSuite = exports.VisionCaptureLogTestSuite = exports.VisionAutonomyE2ETestSuite = exports.VisionBasicE2ETestSuite = void 0;
4
- // Export all E2E test suites
5
- var vision_basic_1 = require("./vision-basic");
6
- Object.defineProperty(exports, "VisionBasicE2ETestSuite", { enumerable: true, get: function () { return vision_basic_1.default; } });
7
- var vision_autonomy_1 = require("./vision-autonomy");
8
- Object.defineProperty(exports, "VisionAutonomyE2ETestSuite", { enumerable: true, get: function () { return vision_autonomy_1.default; } });
9
- var vision_capture_log_1 = require("./vision-capture-log");
10
- Object.defineProperty(exports, "VisionCaptureLogTestSuite", { enumerable: true, get: function () { return vision_capture_log_1.default; } });
11
- var screen_vision_1 = require("./screen-vision");
12
- Object.defineProperty(exports, "ScreenVisionE2ETestSuite", { enumerable: true, get: function () { return screen_vision_1.default; } });
13
- var vision_runtime_1 = require("./vision-runtime");
14
- Object.defineProperty(exports, "VisionRuntimeTestSuite", { enumerable: true, get: function () { return vision_runtime_1.default; } });
15
- var vision_worker_tests_1 = require("./vision-worker-tests");
16
- Object.defineProperty(exports, "VisionWorkerE2ETestSuite", { enumerable: true, get: function () { return vision_worker_tests_1.default; } });
17
- // Export as array for convenience
18
- var vision_basic_2 = require("./vision-basic");
19
- var vision_autonomy_2 = require("./vision-autonomy");
20
- var vision_capture_log_2 = require("./vision-capture-log");
21
- var screen_vision_2 = require("./screen-vision");
22
- var vision_runtime_2 = require("./vision-runtime");
23
- var vision_worker_tests_2 = require("./vision-worker-tests");
24
- exports.testSuites = [
25
- vision_runtime_2.default, // Real runtime tests first
26
- vision_basic_2.default,
27
- vision_autonomy_2.default,
28
- vision_capture_log_2.default,
29
- screen_vision_2.default,
30
- vision_worker_tests_2.default, // Worker-based tests
31
- ];
32
- exports.default = exports.testSuites;
33
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tests/e2e/index.ts"],"names":[],"mappings":";;;AAAA,6BAA6B;AAC7B,+CAAoE;AAA3D,uHAAA,OAAO,OAA2B;AAC3C,qDAA0E;AAAjE,6HAAA,OAAO,OAA8B;AAC9C,2DAA4E;AAAnE,+HAAA,OAAO,OAA6B;AAC7C,iDAAsE;AAA7D,yHAAA,OAAO,OAA4B;AAC5C,mDAAqE;AAA5D,wHAAA,OAAO,OAA0B;AAC1C,6DAA4E;AAAnE,+HAAA,OAAO,OAA4B;AAE5C,kCAAkC;AAClC,+CAAqD;AACrD,qDAA2D;AAC3D,2DAA6D;AAC7D,iDAAuD;AACvD,mDAAsD;AACtD,6DAA6D;AAEhD,QAAA,UAAU,GAAG;IACxB,wBAAsB,EAAE,2BAA2B;IACnD,sBAAuB;IACvB,yBAA0B;IAC1B,4BAAyB;IACzB,uBAAwB;IACxB,6BAAwB,EAAE,qBAAqB;CAChD,CAAC;AAEF,kBAAe,kBAAU,CAAC","sourcesContent":["// Export all E2E test suites\nexport { default as VisionBasicE2ETestSuite } from './vision-basic';\nexport { default as VisionAutonomyE2ETestSuite } from './vision-autonomy';\nexport { default as VisionCaptureLogTestSuite } from './vision-capture-log';\nexport { default as ScreenVisionE2ETestSuite } from './screen-vision';\nexport { default as VisionRuntimeTestSuite } from './vision-runtime';\nexport { default as VisionWorkerE2ETestSuite } from './vision-worker-tests';\n\n// Export as array for convenience\nimport VisionBasicE2ETestSuite from './vision-basic';\nimport VisionAutonomyE2ETestSuite from './vision-autonomy';\nimport VisionCaptureLogTestSuite from './vision-capture-log';\nimport ScreenVisionE2ETestSuite from './screen-vision';\nimport VisionRuntimeTestSuite from './vision-runtime';\nimport VisionWorkerE2ETestSuite from './vision-worker-tests';\n\nexport const testSuites = [\n VisionRuntimeTestSuite, // Real runtime tests first\n VisionBasicE2ETestSuite,\n VisionAutonomyE2ETestSuite,\n VisionCaptureLogTestSuite,\n ScreenVisionE2ETestSuite,\n VisionWorkerE2ETestSuite, // Worker-based tests\n];\n\nexport default testSuites;\n"]}
@@ -1,2 +0,0 @@
1
- #!/usr/bin/env node
2
- export {};
@@ -1,166 +0,0 @@
1
- #!/usr/bin/env node
2
- "use strict";
3
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
4
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
5
- return new (P || (P = Promise))(function (resolve, reject) {
6
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
7
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
8
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
9
- step((generator = generator.apply(thisArg, _arguments || [])).next());
10
- });
11
- };
12
- var __generator = (this && this.__generator) || function (thisArg, body) {
13
- 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);
14
- return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
15
- function verb(n) { return function (v) { return step([n, v]); }; }
16
- function step(op) {
17
- if (f) throw new TypeError("Generator is already executing.");
18
- while (g && (g = 0, op[0] && (_ = 0)), _) try {
19
- 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;
20
- if (y = 0, t) op = [op[0] & 2, t.value];
21
- switch (op[0]) {
22
- case 0: case 1: t = op; break;
23
- case 4: _.label++; return { value: op[1], done: false };
24
- case 5: _.label++; y = op[1]; op = [0]; continue;
25
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
26
- default:
27
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
28
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
29
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
30
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
31
- if (t[2]) _.ops.pop();
32
- _.trys.pop(); continue;
33
- }
34
- op = body.call(thisArg, _);
35
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
36
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
37
- }
38
- };
39
- Object.defineProperty(exports, "__esModule", { value: true });
40
- var service_1 = require("../../service");
41
- var vision_basic_1 = require("./vision-basic");
42
- var vision_autonomy_1 = require("./vision-autonomy");
43
- // Simple test runner for local e2e testing
44
- function runE2ETests() {
45
- return __awaiter(this, void 0, void 0, function () {
46
- var agentId, runtime, visionService, testSuites, totalTests, passedTests, failedTests, _i, testSuites_1, suite, _a, _b, test, error_1;
47
- var _this = this;
48
- return __generator(this, function (_c) {
49
- switch (_c.label) {
50
- case 0:
51
- console.log('🧪 Running Vision Plugin E2E Tests Locally...\n');
52
- agentId = "agent-".concat(Date.now());
53
- runtime = {
54
- agentId: agentId,
55
- getSetting: function (key) {
56
- var settings = {
57
- CAMERA_NAME: 'test',
58
- PIXEL_CHANGE_THRESHOLD: '50',
59
- };
60
- return settings[key] || null;
61
- },
62
- getService: function (name) {
63
- if (name === 'VISION') {
64
- return visionService;
65
- }
66
- return null;
67
- },
68
- createMemory: function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) {
69
- return [2 /*return*/];
70
- }); }); },
71
- getMemories: function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) {
72
- return [2 /*return*/, []];
73
- }); }); },
74
- composeState: function () { return __awaiter(_this, void 0, void 0, function () {
75
- return __generator(this, function (_a) {
76
- return [2 /*return*/, ({
77
- values: {
78
- visionAvailable: (visionService === null || visionService === void 0 ? void 0 : visionService.isActive()) || false,
79
- cameraStatus: (visionService === null || visionService === void 0 ? void 0 : visionService.isActive()) ? 'connected' : 'not connected',
80
- sceneDescription: 'Test scene',
81
- },
82
- data: {},
83
- text: 'Visual Perception: Available',
84
- })];
85
- });
86
- }); },
87
- useModel: function (type, _params) { return __awaiter(_this, void 0, void 0, function () {
88
- return __generator(this, function (_a) {
89
- if (type === 'IMAGE_DESCRIPTION') {
90
- return [2 /*return*/, { description: 'A test scene with various objects' }];
91
- }
92
- return [2 /*return*/, 'Test response'];
93
- });
94
- }); },
95
- };
96
- return [4 /*yield*/, service_1.VisionService.start(runtime)];
97
- case 1:
98
- visionService = _c.sent();
99
- runtime.services = new Map([['VISION', visionService]]);
100
- testSuites = [vision_basic_1.default, vision_autonomy_1.default];
101
- totalTests = 0;
102
- passedTests = 0;
103
- failedTests = 0;
104
- _i = 0, testSuites_1 = testSuites;
105
- _c.label = 2;
106
- case 2:
107
- if (!(_i < testSuites_1.length)) return [3 /*break*/, 9];
108
- suite = testSuites_1[_i];
109
- console.log("\n\uD83D\uDCE6 Running suite: ".concat(suite.name));
110
- console.log(" ".concat(suite.description, "\n"));
111
- _a = 0, _b = suite.tests;
112
- _c.label = 3;
113
- case 3:
114
- if (!(_a < _b.length)) return [3 /*break*/, 8];
115
- test = _b[_a];
116
- totalTests++;
117
- process.stdout.write(" \uD83D\uDD04 ".concat(test.name, "... "));
118
- _c.label = 4;
119
- case 4:
120
- _c.trys.push([4, 6, , 7]);
121
- return [4 /*yield*/, test.fn(runtime)];
122
- case 5:
123
- _c.sent();
124
- passedTests++;
125
- console.log('✅ PASSED');
126
- return [3 /*break*/, 7];
127
- case 6:
128
- error_1 = _c.sent();
129
- failedTests++;
130
- console.log('❌ FAILED');
131
- console.error(" Error: ".concat(error_1.message));
132
- if (error_1.stack) {
133
- console.error(" Stack: ".concat(error_1.stack.split('\n').slice(1, 3).join('\n')));
134
- }
135
- return [3 /*break*/, 7];
136
- case 7:
137
- _a++;
138
- return [3 /*break*/, 3];
139
- case 8:
140
- _i++;
141
- return [3 /*break*/, 2];
142
- case 9:
143
- // Summary
144
- console.log("\n".concat('='.repeat(60)));
145
- console.log('📊 Test Summary:');
146
- console.log(" Total: ".concat(totalTests, " tests"));
147
- console.log(" \u2705 Passed: ".concat(passedTests, " tests"));
148
- console.log(" \u274C Failed: ".concat(failedTests, " tests"));
149
- console.log("".concat('='.repeat(60), "\n"));
150
- // Cleanup
151
- return [4 /*yield*/, visionService.stop()];
152
- case 10:
153
- // Cleanup
154
- _c.sent();
155
- process.exit(failedTests > 0 ? 1 : 0);
156
- return [2 /*return*/];
157
- }
158
- });
159
- });
160
- }
161
- // Run tests
162
- runE2ETests().catch(function (error) {
163
- console.error('Fatal error:', error);
164
- process.exit(1);
165
- });
166
- //# sourceMappingURL=run-local.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"run-local.js","sourceRoot":"","sources":["../../../src/tests/e2e/run-local.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\nimport { VisionService } from '../../service';\nimport visionBasicE2ETests from './vision-basic';\nimport visionAutonomyE2ETests from './vision-autonomy';\n\n// Simple test runner for local e2e testing\nasync function runE2ETests() {\n console.log('🧪 Running Vision Plugin E2E Tests Locally...\\n');\n\n // Create agent ID first\n const agentId = `agent-${Date.now()}`;\n\n // Create a minimal runtime with vision service\n const runtime = {\n agentId,\n getSetting: (key: string) => {\n const settings: Record<string, string> = {\n CAMERA_NAME: 'test',\n PIXEL_CHANGE_THRESHOLD: '50',\n };\n return settings[key] || null;\n },\n getService: (name: string) => {\n if (name === 'VISION') {\n return visionService;\n }\n return null;\n },\n createMemory: async () => {},\n getMemories: async () => [],\n composeState: async () => ({\n values: {\n visionAvailable: visionService?.isActive() || false,\n cameraStatus: visionService?.isActive() ? 'connected' : 'not connected',\n sceneDescription: 'Test scene',\n },\n data: {},\n text: 'Visual Perception: Available',\n }),\n useModel: async (type: string, _params: any) => {\n if (type === 'IMAGE_DESCRIPTION') {\n return { description: 'A test scene with various objects' };\n }\n return 'Test response';\n },\n } as any;\n\n const visionService = await VisionService.start(runtime);\n runtime.services = new Map([['VISION', visionService]]);\n\n const testSuites = [visionBasicE2ETests, visionAutonomyE2ETests];\n\n let totalTests = 0;\n let passedTests = 0;\n let failedTests = 0;\n\n for (const suite of testSuites) {\n console.log(`\\n📦 Running suite: ${suite.name}`);\n console.log(` ${suite.description}\\n`);\n\n for (const test of suite.tests) {\n totalTests++;\n process.stdout.write(` 🔄 ${test.name}... `);\n\n try {\n await test.fn(runtime);\n passedTests++;\n console.log('✅ PASSED');\n } catch (error: any) {\n failedTests++;\n console.log('❌ FAILED');\n console.error(` Error: ${error.message}`);\n if (error.stack) {\n console.error(` Stack: ${error.stack.split('\\n').slice(1, 3).join('\\n')}`);\n }\n }\n }\n }\n\n // Summary\n console.log(`\\n${'='.repeat(60)}`);\n console.log('📊 Test Summary:');\n console.log(` Total: ${totalTests} tests`);\n console.log(` ✅ Passed: ${passedTests} tests`);\n console.log(` ❌ Failed: ${failedTests} tests`);\n console.log(`${'='.repeat(60)}\\n`);\n\n // Cleanup\n await visionService.stop();\n\n process.exit(failedTests > 0 ? 1 : 0);\n}\n\n// Run tests\nrunE2ETests().catch((error) => {\n console.error('Fatal error:', error);\n process.exit(1);\n});\n"]}
@@ -1,11 +0,0 @@
1
- import type { TestSuite, IAgentRuntime } from '@elizaos/core';
2
- export declare class ScreenVisionE2ETestSuite 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: ScreenVisionE2ETestSuite;
11
- export default _default;