@blueharford/scrypted-spatial-awareness 0.5.5 → 0.5.7

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/dist/plugin.zip CHANGED
Binary file
@@ -35058,45 +35058,15 @@ exports.ObjectCorrelator = ObjectCorrelator;
35058
35058
  * Uses RAG (Retrieval Augmented Generation) to provide rich contextual understanding
35059
35059
  * of movement across the property topology
35060
35060
  */
35061
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
35062
- if (k2 === undefined) k2 = k;
35063
- var desc = Object.getOwnPropertyDescriptor(m, k);
35064
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
35065
- desc = { enumerable: true, get: function() { return m[k]; } };
35066
- }
35067
- Object.defineProperty(o, k2, desc);
35068
- }) : (function(o, m, k, k2) {
35069
- if (k2 === undefined) k2 = k;
35070
- o[k2] = m[k];
35071
- }));
35072
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
35073
- Object.defineProperty(o, "default", { enumerable: true, value: v });
35074
- }) : function(o, v) {
35075
- o["default"] = v;
35076
- });
35077
- var __importStar = (this && this.__importStar) || (function () {
35078
- var ownKeys = function(o) {
35079
- ownKeys = Object.getOwnPropertyNames || function (o) {
35080
- var ar = [];
35081
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
35082
- return ar;
35083
- };
35084
- return ownKeys(o);
35085
- };
35086
- return function (mod) {
35087
- if (mod && mod.__esModule) return mod;
35088
- var result = {};
35089
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35090
- __setModuleDefault(result, mod);
35091
- return result;
35092
- };
35093
- })();
35061
+ var __importDefault = (this && this.__importDefault) || function (mod) {
35062
+ return (mod && mod.__esModule) ? mod : { "default": mod };
35063
+ };
35094
35064
  Object.defineProperty(exports, "__esModule", ({ value: true }));
35095
35065
  exports.SpatialReasoningEngine = void 0;
35096
35066
  exports.mediaObjectToBase64 = mediaObjectToBase64;
35097
35067
  exports.buildImageContent = buildImageContent;
35098
35068
  exports.isVisionFormatError = isVisionFormatError;
35099
- const sdk_1 = __importStar(__webpack_require__(/*! @scrypted/sdk */ "./node_modules/@scrypted/sdk/dist/src/index.js"));
35069
+ const sdk_1 = __importDefault(__webpack_require__(/*! @scrypted/sdk */ "./node_modules/@scrypted/sdk/dist/src/index.js"));
35100
35070
  const topology_1 = __webpack_require__(/*! ../models/topology */ "./src/models/topology.ts");
35101
35071
  const { systemManager, mediaManager } = sdk_1.default;
35102
35072
  /**
@@ -35106,26 +35076,49 @@ const { systemManager, mediaManager } = sdk_1.default;
35106
35076
  */
35107
35077
  async function mediaObjectToBase64(mediaObject) {
35108
35078
  try {
35109
- // Convert MediaObject to Buffer using mediaManager
35110
- const buffer = await mediaManager.convertMediaObjectToBuffer(mediaObject, sdk_1.ScryptedMimeTypes.Image);
35111
- if (!buffer || buffer.length === 0) {
35112
- console.warn('Failed to convert MediaObject: empty buffer');
35079
+ console.log(`[Image] Converting MediaObject, mimeType=${mediaObject?.mimeType}`);
35080
+ // First convert to JPEG to ensure consistent format
35081
+ const jpegMediaObject = await mediaManager.convertMediaObject(mediaObject, 'image/jpeg');
35082
+ console.log(`[Image] Converted to JPEG MediaObject`);
35083
+ // Get the buffer from the converted media object
35084
+ const buffer = await mediaManager.convertMediaObjectToBuffer(jpegMediaObject, 'image/jpeg');
35085
+ // Check if we got an actual Buffer (not a proxy)
35086
+ const isRealBuffer = Buffer.isBuffer(buffer);
35087
+ const bufferLength = isRealBuffer ? buffer.length : 0;
35088
+ console.log(`[Image] Buffer: isBuffer=${isRealBuffer}, length=${bufferLength}`);
35089
+ if (!isRealBuffer || bufferLength === 0) {
35090
+ console.warn('[Image] Did not receive a valid Buffer');
35091
+ // Try alternate approach: get raw data using any type
35092
+ try {
35093
+ const anyMedia = mediaObject;
35094
+ if (typeof anyMedia.getData === 'function') {
35095
+ const data = await anyMedia.getData();
35096
+ if (data && Buffer.isBuffer(data)) {
35097
+ console.log(`[Image] Got data from getData(): ${data.length} bytes`);
35098
+ if (data.length > 1000) {
35099
+ const base64 = data.toString('base64');
35100
+ return { base64, mediaType: 'image/jpeg' };
35101
+ }
35102
+ }
35103
+ }
35104
+ }
35105
+ catch (dataErr) {
35106
+ console.warn('[Image] getData() failed:', dataErr);
35107
+ }
35113
35108
  return null;
35114
35109
  }
35115
- // Convert buffer to base64 (raw, no data URL prefix)
35116
- const base64 = buffer.toString('base64');
35117
- // Validate base64 - check it's not empty and looks valid
35118
- if (!base64 || base64.length < 100) {
35119
- console.warn(`Invalid base64: length=${base64?.length || 0}`);
35110
+ // Check if buffer is too small to be a valid image (< 1KB is suspicious)
35111
+ if (bufferLength < 1000) {
35112
+ console.warn(`[Image] Buffer too small: ${bufferLength} bytes`);
35120
35113
  return null;
35121
35114
  }
35122
- // Determine MIME type - default to JPEG for camera images
35123
- const mediaType = mediaObject.mimeType?.split(';')[0] || 'image/jpeg';
35124
- console.log(`[Image] Converted to base64: ${base64.length} chars, type=${mediaType}`);
35125
- return { base64, mediaType };
35115
+ // Convert buffer to base64 (raw, no data URL prefix)
35116
+ const base64 = buffer.toString('base64');
35117
+ console.log(`[Image] Converted to base64: ${base64.length} chars`);
35118
+ return { base64, mediaType: 'image/jpeg' };
35126
35119
  }
35127
35120
  catch (e) {
35128
- console.warn('Failed to convert MediaObject to base64:', e);
35121
+ console.warn('[Image] Failed to convert MediaObject to base64:', e);
35129
35122
  return null;
35130
35123
  }
35131
35124
  }
@@ -36189,10 +36182,21 @@ class TopologyDiscoveryEngine {
36189
36182
  try {
36190
36183
  const camera = systemManager.getDeviceById(cameraId);
36191
36184
  if (!camera?.interfaces?.includes(sdk_1.ScryptedInterface.Camera)) {
36185
+ this.console.warn(`[Discovery] Camera ${cameraId} doesn't have Camera interface`);
36192
36186
  return null;
36193
36187
  }
36188
+ this.console.log(`[Discovery] Taking snapshot from camera: ${camera.name || cameraId}`);
36194
36189
  const mediaObject = await camera.takePicture();
36195
- return (0, spatial_reasoning_1.mediaObjectToBase64)(mediaObject);
36190
+ if (!mediaObject) {
36191
+ this.console.warn(`[Discovery] takePicture() returned null for ${camera.name}`);
36192
+ return null;
36193
+ }
36194
+ this.console.log(`[Discovery] MediaObject received: mimeType=${mediaObject.mimeType}`);
36195
+ const imageData = await (0, spatial_reasoning_1.mediaObjectToBase64)(mediaObject);
36196
+ if (!imageData) {
36197
+ this.console.warn(`[Discovery] Failed to convert MediaObject to base64 for ${camera.name}`);
36198
+ }
36199
+ return imageData;
36196
36200
  }
36197
36201
  catch (e) {
36198
36202
  this.console.warn(`[Discovery] Failed to get snapshot from camera ${cameraId}:`, e);