@camstack/addon-post-analysis 1.1.22 → 1.1.23

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.
@@ -106,7 +106,10 @@ var EmbeddingDispatcher = class {
106
106
  const detections = data.analysisResults ?? [];
107
107
  const handle = data.frameHandle;
108
108
  if (!handle) {
109
- this.logger.debug("skip: no frameHandle on DetectionResult", { meta: { deviceId } });
109
+ this.logger.debug("skip: no frameHandle on DetectionResult", {
110
+ tags: { deviceId: Number(deviceId) },
111
+ meta: { deviceId }
112
+ });
110
113
  return;
111
114
  }
112
115
  let decoded;
@@ -117,25 +120,34 @@ var EmbeddingDispatcher = class {
117
120
  getRemoteFrame: this.getRemoteFrame
118
121
  });
119
122
  } catch (err) {
120
- this.logger.debug("skip: resolveFrame threw", { meta: {
121
- deviceId,
122
- shmId: handle.shmId,
123
- error: String(err)
124
- } });
123
+ this.logger.debug("skip: resolveFrame threw", {
124
+ tags: { deviceId: Number(deviceId) },
125
+ meta: {
126
+ deviceId,
127
+ shmId: handle.shmId,
128
+ error: String(err)
129
+ }
130
+ });
125
131
  return;
126
132
  }
127
133
  if (!decoded) {
128
- this.logger.debug("skip: frame recycled before resolve", { meta: {
129
- deviceId,
130
- shmId: handle.shmId
131
- } });
134
+ this.logger.debug("skip: frame recycled before resolve", {
135
+ tags: { deviceId: Number(deviceId) },
136
+ meta: {
137
+ deviceId,
138
+ shmId: handle.shmId
139
+ }
140
+ });
132
141
  return;
133
142
  }
134
143
  if (decoded.format !== "rgb") {
135
- this.logger.debug("skip: resolved frame is not RGB", { meta: {
136
- deviceId,
137
- format: decoded.format
138
- } });
144
+ this.logger.debug("skip: resolved frame is not RGB", {
145
+ tags: { deviceId: Number(deviceId) },
146
+ meta: {
147
+ deviceId,
148
+ format: decoded.format
149
+ }
150
+ });
139
151
  return;
140
152
  }
141
153
  const frameData = Buffer.isBuffer(decoded.data) ? decoded.data : Buffer.from(decoded.data);
@@ -102,7 +102,10 @@ var EmbeddingDispatcher = class {
102
102
  const detections = data.analysisResults ?? [];
103
103
  const handle = data.frameHandle;
104
104
  if (!handle) {
105
- this.logger.debug("skip: no frameHandle on DetectionResult", { meta: { deviceId } });
105
+ this.logger.debug("skip: no frameHandle on DetectionResult", {
106
+ tags: { deviceId: Number(deviceId) },
107
+ meta: { deviceId }
108
+ });
106
109
  return;
107
110
  }
108
111
  let decoded;
@@ -113,25 +116,34 @@ var EmbeddingDispatcher = class {
113
116
  getRemoteFrame: this.getRemoteFrame
114
117
  });
115
118
  } catch (err) {
116
- this.logger.debug("skip: resolveFrame threw", { meta: {
117
- deviceId,
118
- shmId: handle.shmId,
119
- error: String(err)
120
- } });
119
+ this.logger.debug("skip: resolveFrame threw", {
120
+ tags: { deviceId: Number(deviceId) },
121
+ meta: {
122
+ deviceId,
123
+ shmId: handle.shmId,
124
+ error: String(err)
125
+ }
126
+ });
121
127
  return;
122
128
  }
123
129
  if (!decoded) {
124
- this.logger.debug("skip: frame recycled before resolve", { meta: {
125
- deviceId,
126
- shmId: handle.shmId
127
- } });
130
+ this.logger.debug("skip: frame recycled before resolve", {
131
+ tags: { deviceId: Number(deviceId) },
132
+ meta: {
133
+ deviceId,
134
+ shmId: handle.shmId
135
+ }
136
+ });
128
137
  return;
129
138
  }
130
139
  if (decoded.format !== "rgb") {
131
- this.logger.debug("skip: resolved frame is not RGB", { meta: {
132
- deviceId,
133
- format: decoded.format
134
- } });
140
+ this.logger.debug("skip: resolved frame is not RGB", {
141
+ tags: { deviceId: Number(deviceId) },
142
+ meta: {
143
+ deviceId,
144
+ format: decoded.format
145
+ }
146
+ });
135
147
  return;
136
148
  }
137
149
  const frameData = Buffer.isBuffer(decoded.data) ? decoded.data : Buffer.from(decoded.data);
@@ -1717,10 +1717,13 @@ var TrackStore = class {
1717
1717
  try {
1718
1718
  await this.persistCompleted(record);
1719
1719
  } catch (err) {
1720
- this.logger.warn("persist completed track failed", { meta: {
1721
- trackId,
1722
- error: String(err)
1723
- } });
1720
+ this.logger.warn("persist completed track failed", {
1721
+ tags: { deviceId: t.deviceId },
1722
+ meta: {
1723
+ trackId,
1724
+ error: String(err)
1725
+ }
1726
+ });
1724
1727
  }
1725
1728
  this.active.delete(trackId);
1726
1729
  expired.push(record);
@@ -1947,10 +1950,13 @@ var MediaStore = class {
1947
1950
  });
1948
1951
  return key;
1949
1952
  } catch (err) {
1950
- this.logger.warn("media put failed", { meta: {
1951
- key,
1952
- error: String(err)
1953
- } });
1953
+ this.logger.warn("media put failed", {
1954
+ tags: { deviceId: params.deviceId },
1955
+ meta: {
1956
+ key,
1957
+ error: String(err)
1958
+ }
1959
+ });
1954
1960
  throw err;
1955
1961
  }
1956
1962
  }
@@ -2139,11 +2145,14 @@ var MediaStore = class {
2139
2145
  relativePath: oldPath
2140
2146
  });
2141
2147
  } catch (err) {
2142
- this.logger.warn("MediaStore.reown: old blob delete failed (best-effort)", { meta: {
2143
- key,
2144
- oldPath,
2145
- error: String(err)
2146
- } });
2148
+ this.logger.warn("MediaStore.reown: old blob delete failed (best-effort)", {
2149
+ tags: { deviceId },
2150
+ meta: {
2151
+ key,
2152
+ oldPath,
2153
+ error: String(err)
2154
+ }
2155
+ });
2147
2156
  }
2148
2157
  try {
2149
2158
  await this.store.delete.mutate({
@@ -2151,10 +2160,13 @@ var MediaStore = class {
2151
2160
  key
2152
2161
  });
2153
2162
  } catch (err) {
2154
- this.logger.warn("MediaStore.reown: old index row delete failed (best-effort)", { meta: {
2155
- key,
2156
- error: String(err)
2157
- } });
2163
+ this.logger.warn("MediaStore.reown: old index row delete failed (best-effort)", {
2164
+ tags: { deviceId },
2165
+ meta: {
2166
+ key,
2167
+ error: String(err)
2168
+ }
2169
+ });
2158
2170
  }
2159
2171
  return newKey;
2160
2172
  }
@@ -2355,10 +2367,13 @@ var EventStore = class {
2355
2367
  }
2356
2368
  });
2357
2369
  } catch (err) {
2358
- this.logger.warn("insertMotion failed", { meta: {
2359
- eventId: ev.id,
2360
- error: String(err)
2361
- } });
2370
+ this.logger.warn("insertMotion failed", {
2371
+ tags: { deviceId: ev.deviceId },
2372
+ meta: {
2373
+ eventId: ev.id,
2374
+ error: String(err)
2375
+ }
2376
+ });
2362
2377
  }
2363
2378
  }
2364
2379
  async insertObject(ev) {
@@ -2372,10 +2387,13 @@ var EventStore = class {
2372
2387
  }
2373
2388
  });
2374
2389
  } catch (err) {
2375
- this.logger.warn("insertObject failed", { meta: {
2376
- eventId: ev.id,
2377
- error: String(err)
2378
- } });
2390
+ this.logger.warn("insertObject failed", {
2391
+ tags: { deviceId: ev.deviceId },
2392
+ meta: {
2393
+ eventId: ev.id,
2394
+ error: String(err)
2395
+ }
2396
+ });
2379
2397
  }
2380
2398
  }
2381
2399
  async insertAudio(ev) {
@@ -2389,10 +2407,13 @@ var EventStore = class {
2389
2407
  }
2390
2408
  });
2391
2409
  } catch (err) {
2392
- this.logger.warn("insertAudio failed", { meta: {
2393
- eventId: ev.id,
2394
- error: String(err)
2395
- } });
2410
+ this.logger.warn("insertAudio failed", {
2411
+ tags: { deviceId: ev.deviceId },
2412
+ meta: {
2413
+ eventId: ev.id,
2414
+ error: String(err)
2415
+ }
2416
+ });
2396
2417
  }
2397
2418
  }
2398
2419
  buildFilter(q) {
@@ -2861,25 +2882,34 @@ var EventMediaDispatcher = class {
2861
2882
  getRemoteFrame: this.deps.getRemoteFrame
2862
2883
  });
2863
2884
  } catch (err) {
2864
- this.deps.logger.debug("event media: resolveFrame threw", { meta: {
2865
- deviceId,
2866
- shmId: frameHandle.shmId,
2867
- error: String(err)
2868
- } });
2885
+ this.deps.logger.debug("event media: resolveFrame threw", {
2886
+ tags: { deviceId },
2887
+ meta: {
2888
+ deviceId,
2889
+ shmId: frameHandle.shmId,
2890
+ error: String(err)
2891
+ }
2892
+ });
2869
2893
  return;
2870
2894
  }
2871
2895
  if (!decoded) {
2872
- this.deps.logger.debug("event media: frame recycled before resolve", { meta: {
2873
- deviceId,
2874
- shmId: frameHandle.shmId
2875
- } });
2896
+ this.deps.logger.debug("event media: frame recycled before resolve", {
2897
+ tags: { deviceId },
2898
+ meta: {
2899
+ deviceId,
2900
+ shmId: frameHandle.shmId
2901
+ }
2902
+ });
2876
2903
  return;
2877
2904
  }
2878
2905
  if (decoded.format !== "rgb") {
2879
- this.deps.logger.debug("event media: resolved frame is not RGB", { meta: {
2880
- deviceId,
2881
- format: decoded.format
2882
- } });
2906
+ this.deps.logger.debug("event media: resolved frame is not RGB", {
2907
+ tags: { deviceId },
2908
+ meta: {
2909
+ deviceId,
2910
+ format: decoded.format
2911
+ }
2912
+ });
2883
2913
  return;
2884
2914
  }
2885
2915
  const frameData = Buffer.isBuffer(decoded.data) ? decoded.data : Buffer.from(decoded.data);
@@ -2921,11 +2951,14 @@ var EventMediaDispatcher = class {
2921
2951
  data: crop
2922
2952
  });
2923
2953
  } catch (err) {
2924
- this.deps.logger.warn("event media: crop failed", { meta: {
2925
- deviceId,
2926
- eventId: ev.eventId,
2927
- error: err instanceof Error ? err.message : String(err)
2928
- } });
2954
+ this.deps.logger.warn("event media: crop failed", {
2955
+ tags: { deviceId },
2956
+ meta: {
2957
+ deviceId,
2958
+ eventId: ev.eventId,
2959
+ error: err instanceof Error ? err.message : String(err)
2960
+ }
2961
+ });
2929
2962
  }
2930
2963
  try {
2931
2964
  const fullFrame = await drawBoxedFrame(frameData, fw, fh, [], { quality: MEDIA_QUALITY });
@@ -2938,11 +2971,14 @@ var EventMediaDispatcher = class {
2938
2971
  data: fullFrame
2939
2972
  });
2940
2973
  } catch (err) {
2941
- this.deps.logger.warn("event media: clear full frame failed", { meta: {
2942
- deviceId,
2943
- eventId: ev.eventId,
2944
- error: err instanceof Error ? err.message : String(err)
2945
- } });
2974
+ this.deps.logger.warn("event media: clear full frame failed", {
2975
+ tags: { deviceId },
2976
+ meta: {
2977
+ deviceId,
2978
+ eventId: ev.eventId,
2979
+ error: err instanceof Error ? err.message : String(err)
2980
+ }
2981
+ });
2946
2982
  }
2947
2983
  try {
2948
2984
  const fullFrameBoxed = await drawBoxedFrame(frameData, fw, fh, [box], { quality: MEDIA_QUALITY });
@@ -2955,11 +2991,14 @@ var EventMediaDispatcher = class {
2955
2991
  data: fullFrameBoxed
2956
2992
  });
2957
2993
  } catch (err) {
2958
- this.deps.logger.warn("event media: boxed full frame failed", { meta: {
2959
- deviceId,
2960
- eventId: ev.eventId,
2961
- error: err instanceof Error ? err.message : String(err)
2962
- } });
2994
+ this.deps.logger.warn("event media: boxed full frame failed", {
2995
+ tags: { deviceId },
2996
+ meta: {
2997
+ deviceId,
2998
+ eventId: ev.eventId,
2999
+ error: err instanceof Error ? err.message : String(err)
3000
+ }
3001
+ });
2963
3002
  }
2964
3003
  if (ev.childCrops) for (const child of ev.childCrops) try {
2965
3004
  const childRegion = squareSafeCropRegion(child.bbox, {
@@ -2989,11 +3028,14 @@ var EventMediaDispatcher = class {
2989
3028
  data: childCropData
2990
3029
  });
2991
3030
  } catch (err) {
2992
- this.deps.logger.warn(`event media: ${child.kind} failed`, { meta: {
2993
- deviceId,
2994
- eventId: ev.eventId,
2995
- error: err instanceof Error ? err.message : String(err)
2996
- } });
3031
+ this.deps.logger.warn(`event media: ${child.kind} failed`, {
3032
+ tags: { deviceId },
3033
+ meta: {
3034
+ deviceId,
3035
+ eventId: ev.eventId,
3036
+ error: err instanceof Error ? err.message : String(err)
3037
+ }
3038
+ });
2997
3039
  }
2998
3040
  }
2999
3041
  async writeTrackFrame(deviceId, frameData, fw, fh, tf) {
@@ -3012,11 +3054,14 @@ var EventMediaDispatcher = class {
3012
3054
  data: boxed
3013
3055
  });
3014
3056
  } catch (err) {
3015
- this.deps.logger.warn("event media: track frame failed", { meta: {
3016
- deviceId,
3017
- trackId: tf.trackId,
3018
- error: err instanceof Error ? err.message : String(err)
3019
- } });
3057
+ this.deps.logger.warn("event media: track frame failed", {
3058
+ tags: { deviceId },
3059
+ meta: {
3060
+ deviceId,
3061
+ trackId: tf.trackId,
3062
+ error: err instanceof Error ? err.message : String(err)
3063
+ }
3064
+ });
3020
3065
  }
3021
3066
  }
3022
3067
  };
@@ -4228,10 +4273,13 @@ var FaceStore = class {
4228
4273
  value: rest
4229
4274
  });
4230
4275
  } catch (err) {
4231
- this.logger.warn("FaceStore.insert failed", { meta: {
4232
- faceId: id,
4233
- error: String(err)
4234
- } });
4276
+ this.logger.warn("FaceStore.insert failed", {
4277
+ tags: { deviceId: face.deviceId },
4278
+ meta: {
4279
+ faceId: id,
4280
+ error: String(err)
4281
+ }
4282
+ });
4235
4283
  }
4236
4284
  }
4237
4285
  /**
@@ -4298,10 +4346,13 @@ var FaceStore = class {
4298
4346
  });
4299
4347
  deleted.push(id);
4300
4348
  } catch (err) {
4301
- this.logger.warn("FaceStore.prune delete failed", { meta: {
4302
- faceId: id,
4303
- error: String(err)
4304
- } });
4349
+ this.logger.warn("FaceStore.prune delete failed", {
4350
+ tags: { deviceId: input.deviceId },
4351
+ meta: {
4352
+ faceId: id,
4353
+ error: String(err)
4354
+ }
4355
+ });
4305
4356
  }
4306
4357
  return deleted;
4307
4358
  }
@@ -4587,10 +4638,13 @@ var ObjectEmbeddingStore = class {
4587
4638
  value: record
4588
4639
  });
4589
4640
  } catch (err) {
4590
- this.logger.warn("ObjectEmbeddingStore.upsertIfBetter failed", { meta: {
4591
- trackId: input.trackId,
4592
- error: String(err)
4593
- } });
4641
+ this.logger.warn("ObjectEmbeddingStore.upsertIfBetter failed", {
4642
+ tags: { deviceId: input.deviceId },
4643
+ meta: {
4644
+ trackId: input.trackId,
4645
+ error: String(err)
4646
+ }
4647
+ });
4594
4648
  }
4595
4649
  }
4596
4650
  /**
@@ -4802,18 +4856,24 @@ var FaceRecognizer = class {
4802
4856
  try {
4803
4857
  await this.deps.trackStore.setLabel(c.trackId, name);
4804
4858
  } catch (err) {
4805
- this.deps.logger.warn("setLabel failed", { meta: {
4806
- trackId: c.trackId,
4807
- error: String(err)
4808
- } });
4859
+ this.deps.logger.warn("setLabel failed", {
4860
+ tags: { deviceId: input.deviceId },
4861
+ meta: {
4862
+ trackId: c.trackId,
4863
+ error: String(err)
4864
+ }
4865
+ });
4809
4866
  }
4810
4867
  try {
4811
4868
  await this.deps.eventStore.setLabelForTrack(c.trackId, name);
4812
4869
  } catch (err) {
4813
- this.deps.logger.warn("setLabelForTrack failed", { meta: {
4814
- trackId: c.trackId,
4815
- error: String(err)
4816
- } });
4870
+ this.deps.logger.warn("setLabelForTrack failed", {
4871
+ tags: { deviceId: input.deviceId },
4872
+ meta: {
4873
+ trackId: c.trackId,
4874
+ error: String(err)
4875
+ }
4876
+ });
4817
4877
  }
4818
4878
  }
4819
4879
  }
@@ -4825,10 +4885,13 @@ var FaceRecognizer = class {
4825
4885
  if (input.frameHandle !== void 0) try {
4826
4886
  crop = await this.deps.captureCrop(input.frameHandle, cropBbox, input.frameWidth, input.frameHeight, input.cropPadding) ?? void 0;
4827
4887
  } catch (err) {
4828
- this.deps.logger.debug("FaceRecognizer crop capture failed", { meta: {
4829
- trackId: c.trackId,
4830
- error: String(err)
4831
- } });
4888
+ this.deps.logger.debug("FaceRecognizer crop capture failed", {
4889
+ tags: { deviceId: input.deviceId },
4890
+ meta: {
4891
+ trackId: c.trackId,
4892
+ error: String(err)
4893
+ }
4894
+ });
4832
4895
  }
4833
4896
  this.bestFace.set(c.trackId, {
4834
4897
  score: c.confidence,
@@ -4884,10 +4947,13 @@ var FaceRecognizer = class {
4884
4947
  data: held.crop
4885
4948
  });
4886
4949
  } catch (err) {
4887
- this.deps.logger.warn("FaceRecognizer face crop put failed", { meta: {
4888
- faceId,
4889
- error: String(err)
4890
- } });
4950
+ this.deps.logger.warn("FaceRecognizer face crop put failed", {
4951
+ tags: { deviceId },
4952
+ meta: {
4953
+ faceId,
4954
+ error: String(err)
4955
+ }
4956
+ });
4891
4957
  }
4892
4958
  try {
4893
4959
  await this.deps.faceStore.insert({
@@ -4913,10 +4979,13 @@ var FaceRecognizer = class {
4913
4979
  }
4914
4980
  });
4915
4981
  } catch (err) {
4916
- this.deps.logger.warn("FaceRecognizer faceStore insert failed", { meta: {
4917
- faceId,
4918
- error: String(err)
4919
- } });
4982
+ this.deps.logger.warn("FaceRecognizer faceStore insert failed", {
4983
+ tags: { deviceId },
4984
+ meta: {
4985
+ faceId,
4986
+ error: String(err)
4987
+ }
4988
+ });
4920
4989
  }
4921
4990
  }
4922
4991
  };
@@ -4996,10 +5065,13 @@ var PlateStore = class {
4996
5065
  value: rest
4997
5066
  });
4998
5067
  } catch (err) {
4999
- this.logger.warn("PlateStore.insert failed", { meta: {
5000
- plateId: id,
5001
- error: String(err)
5002
- } });
5068
+ this.logger.warn("PlateStore.insert failed", {
5069
+ tags: { deviceId: plate.deviceId },
5070
+ meta: {
5071
+ plateId: id,
5072
+ error: String(err)
5073
+ }
5074
+ });
5003
5075
  }
5004
5076
  }
5005
5077
  normalizeRow(r) {
@@ -5155,10 +5227,13 @@ var PlateRecognizer = class {
5155
5227
  if (input.frameHandle !== void 0) try {
5156
5228
  crop = await this.deps.captureCrop(input.frameHandle, c.plateBbox, input.frameWidth, input.frameHeight, input.cropPadding) ?? void 0;
5157
5229
  } catch (err) {
5158
- this.deps.logger.debug("PlateRecognizer crop capture failed", { meta: {
5159
- trackId: c.trackId,
5160
- error: String(err)
5161
- } });
5230
+ this.deps.logger.debug("PlateRecognizer crop capture failed", {
5231
+ tags: { deviceId: input.deviceId },
5232
+ meta: {
5233
+ trackId: c.trackId,
5234
+ error: String(err)
5235
+ }
5236
+ });
5162
5237
  }
5163
5238
  this.bestPlate.set(c.trackId, {
5164
5239
  text: c.plateText,
@@ -5187,10 +5262,13 @@ var PlateRecognizer = class {
5187
5262
  data: held.crop
5188
5263
  });
5189
5264
  } catch (err) {
5190
- this.deps.logger.warn("PlateRecognizer plate crop put failed", { meta: {
5191
- plateId,
5192
- error: String(err)
5193
- } });
5265
+ this.deps.logger.warn("PlateRecognizer plate crop put failed", {
5266
+ tags: { deviceId },
5267
+ meta: {
5268
+ plateId,
5269
+ error: String(err)
5270
+ }
5271
+ });
5194
5272
  }
5195
5273
  try {
5196
5274
  await this.deps.plateStore.insert({
@@ -5216,10 +5294,13 @@ var PlateRecognizer = class {
5216
5294
  }
5217
5295
  });
5218
5296
  } catch (err) {
5219
- this.deps.logger.warn("PlateRecognizer plateStore insert failed", { meta: {
5220
- plateId,
5221
- error: String(err)
5222
- } });
5297
+ this.deps.logger.warn("PlateRecognizer plateStore insert failed", {
5298
+ tags: { deviceId },
5299
+ meta: {
5300
+ plateId,
5301
+ error: String(err)
5302
+ }
5303
+ });
5223
5304
  }
5224
5305
  }
5225
5306
  };
@@ -6530,7 +6611,10 @@ var PipelineAnalyticsAddon = class extends require_dist.BaseAddon {
6530
6611
  } : void 0, { classificationMinScore: settings.classificationMinScore });
6531
6612
  if (route.kind === "classification") {
6532
6613
  if (!topClassification) {
6533
- this.ctx.logger.warn("classifyAudioFrame returned classification but topClassification is null", { meta: { deviceId } });
6614
+ this.ctx.logger.warn("classifyAudioFrame returned classification but topClassification is null", {
6615
+ tags: { deviceId },
6616
+ meta: { deviceId }
6617
+ });
6534
6618
  return;
6535
6619
  }
6536
6620
  const last = this.lastAudioInsertByDevice.get(deviceId);
@@ -7080,13 +7164,16 @@ var PipelineAnalyticsAddon = class extends require_dist.BaseAddon {
7080
7164
  const { counts, ids } = await this.eventStore.pruneBefore(input);
7081
7165
  if (ids.length > 0 && this.mediaStore) await this.mediaStore.deleteForEvents([...ids]);
7082
7166
  const { motion, object, audio } = counts;
7083
- if (motion + object + audio > 0) this.ctx.logger.info("analytics event eviction (floor)", { meta: {
7084
- deviceId: input.deviceId,
7085
- cutoffMs: input.cutoffMs,
7086
- motion,
7087
- object,
7088
- audio
7089
- } });
7167
+ if (motion + object + audio > 0) this.ctx.logger.info("analytics event eviction (floor)", {
7168
+ tags: { deviceId: input.deviceId },
7169
+ meta: {
7170
+ deviceId: input.deviceId,
7171
+ cutoffMs: input.cutoffMs,
7172
+ motion,
7173
+ object,
7174
+ audio
7175
+ }
7176
+ });
7090
7177
  return counts;
7091
7178
  }
7092
7179
  /**
@@ -1712,10 +1712,13 @@ var TrackStore = class {
1712
1712
  try {
1713
1713
  await this.persistCompleted(record);
1714
1714
  } catch (err) {
1715
- this.logger.warn("persist completed track failed", { meta: {
1716
- trackId,
1717
- error: String(err)
1718
- } });
1715
+ this.logger.warn("persist completed track failed", {
1716
+ tags: { deviceId: t.deviceId },
1717
+ meta: {
1718
+ trackId,
1719
+ error: String(err)
1720
+ }
1721
+ });
1719
1722
  }
1720
1723
  this.active.delete(trackId);
1721
1724
  expired.push(record);
@@ -1942,10 +1945,13 @@ var MediaStore = class {
1942
1945
  });
1943
1946
  return key;
1944
1947
  } catch (err) {
1945
- this.logger.warn("media put failed", { meta: {
1946
- key,
1947
- error: String(err)
1948
- } });
1948
+ this.logger.warn("media put failed", {
1949
+ tags: { deviceId: params.deviceId },
1950
+ meta: {
1951
+ key,
1952
+ error: String(err)
1953
+ }
1954
+ });
1949
1955
  throw err;
1950
1956
  }
1951
1957
  }
@@ -2134,11 +2140,14 @@ var MediaStore = class {
2134
2140
  relativePath: oldPath
2135
2141
  });
2136
2142
  } catch (err) {
2137
- this.logger.warn("MediaStore.reown: old blob delete failed (best-effort)", { meta: {
2138
- key,
2139
- oldPath,
2140
- error: String(err)
2141
- } });
2143
+ this.logger.warn("MediaStore.reown: old blob delete failed (best-effort)", {
2144
+ tags: { deviceId },
2145
+ meta: {
2146
+ key,
2147
+ oldPath,
2148
+ error: String(err)
2149
+ }
2150
+ });
2142
2151
  }
2143
2152
  try {
2144
2153
  await this.store.delete.mutate({
@@ -2146,10 +2155,13 @@ var MediaStore = class {
2146
2155
  key
2147
2156
  });
2148
2157
  } catch (err) {
2149
- this.logger.warn("MediaStore.reown: old index row delete failed (best-effort)", { meta: {
2150
- key,
2151
- error: String(err)
2152
- } });
2158
+ this.logger.warn("MediaStore.reown: old index row delete failed (best-effort)", {
2159
+ tags: { deviceId },
2160
+ meta: {
2161
+ key,
2162
+ error: String(err)
2163
+ }
2164
+ });
2153
2165
  }
2154
2166
  return newKey;
2155
2167
  }
@@ -2350,10 +2362,13 @@ var EventStore = class {
2350
2362
  }
2351
2363
  });
2352
2364
  } catch (err) {
2353
- this.logger.warn("insertMotion failed", { meta: {
2354
- eventId: ev.id,
2355
- error: String(err)
2356
- } });
2365
+ this.logger.warn("insertMotion failed", {
2366
+ tags: { deviceId: ev.deviceId },
2367
+ meta: {
2368
+ eventId: ev.id,
2369
+ error: String(err)
2370
+ }
2371
+ });
2357
2372
  }
2358
2373
  }
2359
2374
  async insertObject(ev) {
@@ -2367,10 +2382,13 @@ var EventStore = class {
2367
2382
  }
2368
2383
  });
2369
2384
  } catch (err) {
2370
- this.logger.warn("insertObject failed", { meta: {
2371
- eventId: ev.id,
2372
- error: String(err)
2373
- } });
2385
+ this.logger.warn("insertObject failed", {
2386
+ tags: { deviceId: ev.deviceId },
2387
+ meta: {
2388
+ eventId: ev.id,
2389
+ error: String(err)
2390
+ }
2391
+ });
2374
2392
  }
2375
2393
  }
2376
2394
  async insertAudio(ev) {
@@ -2384,10 +2402,13 @@ var EventStore = class {
2384
2402
  }
2385
2403
  });
2386
2404
  } catch (err) {
2387
- this.logger.warn("insertAudio failed", { meta: {
2388
- eventId: ev.id,
2389
- error: String(err)
2390
- } });
2405
+ this.logger.warn("insertAudio failed", {
2406
+ tags: { deviceId: ev.deviceId },
2407
+ meta: {
2408
+ eventId: ev.id,
2409
+ error: String(err)
2410
+ }
2411
+ });
2391
2412
  }
2392
2413
  }
2393
2414
  buildFilter(q) {
@@ -2856,25 +2877,34 @@ var EventMediaDispatcher = class {
2856
2877
  getRemoteFrame: this.deps.getRemoteFrame
2857
2878
  });
2858
2879
  } catch (err) {
2859
- this.deps.logger.debug("event media: resolveFrame threw", { meta: {
2860
- deviceId,
2861
- shmId: frameHandle.shmId,
2862
- error: String(err)
2863
- } });
2880
+ this.deps.logger.debug("event media: resolveFrame threw", {
2881
+ tags: { deviceId },
2882
+ meta: {
2883
+ deviceId,
2884
+ shmId: frameHandle.shmId,
2885
+ error: String(err)
2886
+ }
2887
+ });
2864
2888
  return;
2865
2889
  }
2866
2890
  if (!decoded) {
2867
- this.deps.logger.debug("event media: frame recycled before resolve", { meta: {
2868
- deviceId,
2869
- shmId: frameHandle.shmId
2870
- } });
2891
+ this.deps.logger.debug("event media: frame recycled before resolve", {
2892
+ tags: { deviceId },
2893
+ meta: {
2894
+ deviceId,
2895
+ shmId: frameHandle.shmId
2896
+ }
2897
+ });
2871
2898
  return;
2872
2899
  }
2873
2900
  if (decoded.format !== "rgb") {
2874
- this.deps.logger.debug("event media: resolved frame is not RGB", { meta: {
2875
- deviceId,
2876
- format: decoded.format
2877
- } });
2901
+ this.deps.logger.debug("event media: resolved frame is not RGB", {
2902
+ tags: { deviceId },
2903
+ meta: {
2904
+ deviceId,
2905
+ format: decoded.format
2906
+ }
2907
+ });
2878
2908
  return;
2879
2909
  }
2880
2910
  const frameData = Buffer.isBuffer(decoded.data) ? decoded.data : Buffer.from(decoded.data);
@@ -2916,11 +2946,14 @@ var EventMediaDispatcher = class {
2916
2946
  data: crop
2917
2947
  });
2918
2948
  } catch (err) {
2919
- this.deps.logger.warn("event media: crop failed", { meta: {
2920
- deviceId,
2921
- eventId: ev.eventId,
2922
- error: err instanceof Error ? err.message : String(err)
2923
- } });
2949
+ this.deps.logger.warn("event media: crop failed", {
2950
+ tags: { deviceId },
2951
+ meta: {
2952
+ deviceId,
2953
+ eventId: ev.eventId,
2954
+ error: err instanceof Error ? err.message : String(err)
2955
+ }
2956
+ });
2924
2957
  }
2925
2958
  try {
2926
2959
  const fullFrame = await drawBoxedFrame(frameData, fw, fh, [], { quality: MEDIA_QUALITY });
@@ -2933,11 +2966,14 @@ var EventMediaDispatcher = class {
2933
2966
  data: fullFrame
2934
2967
  });
2935
2968
  } catch (err) {
2936
- this.deps.logger.warn("event media: clear full frame failed", { meta: {
2937
- deviceId,
2938
- eventId: ev.eventId,
2939
- error: err instanceof Error ? err.message : String(err)
2940
- } });
2969
+ this.deps.logger.warn("event media: clear full frame failed", {
2970
+ tags: { deviceId },
2971
+ meta: {
2972
+ deviceId,
2973
+ eventId: ev.eventId,
2974
+ error: err instanceof Error ? err.message : String(err)
2975
+ }
2976
+ });
2941
2977
  }
2942
2978
  try {
2943
2979
  const fullFrameBoxed = await drawBoxedFrame(frameData, fw, fh, [box], { quality: MEDIA_QUALITY });
@@ -2950,11 +2986,14 @@ var EventMediaDispatcher = class {
2950
2986
  data: fullFrameBoxed
2951
2987
  });
2952
2988
  } catch (err) {
2953
- this.deps.logger.warn("event media: boxed full frame failed", { meta: {
2954
- deviceId,
2955
- eventId: ev.eventId,
2956
- error: err instanceof Error ? err.message : String(err)
2957
- } });
2989
+ this.deps.logger.warn("event media: boxed full frame failed", {
2990
+ tags: { deviceId },
2991
+ meta: {
2992
+ deviceId,
2993
+ eventId: ev.eventId,
2994
+ error: err instanceof Error ? err.message : String(err)
2995
+ }
2996
+ });
2958
2997
  }
2959
2998
  if (ev.childCrops) for (const child of ev.childCrops) try {
2960
2999
  const childRegion = squareSafeCropRegion(child.bbox, {
@@ -2984,11 +3023,14 @@ var EventMediaDispatcher = class {
2984
3023
  data: childCropData
2985
3024
  });
2986
3025
  } catch (err) {
2987
- this.deps.logger.warn(`event media: ${child.kind} failed`, { meta: {
2988
- deviceId,
2989
- eventId: ev.eventId,
2990
- error: err instanceof Error ? err.message : String(err)
2991
- } });
3026
+ this.deps.logger.warn(`event media: ${child.kind} failed`, {
3027
+ tags: { deviceId },
3028
+ meta: {
3029
+ deviceId,
3030
+ eventId: ev.eventId,
3031
+ error: err instanceof Error ? err.message : String(err)
3032
+ }
3033
+ });
2992
3034
  }
2993
3035
  }
2994
3036
  async writeTrackFrame(deviceId, frameData, fw, fh, tf) {
@@ -3007,11 +3049,14 @@ var EventMediaDispatcher = class {
3007
3049
  data: boxed
3008
3050
  });
3009
3051
  } catch (err) {
3010
- this.deps.logger.warn("event media: track frame failed", { meta: {
3011
- deviceId,
3012
- trackId: tf.trackId,
3013
- error: err instanceof Error ? err.message : String(err)
3014
- } });
3052
+ this.deps.logger.warn("event media: track frame failed", {
3053
+ tags: { deviceId },
3054
+ meta: {
3055
+ deviceId,
3056
+ trackId: tf.trackId,
3057
+ error: err instanceof Error ? err.message : String(err)
3058
+ }
3059
+ });
3015
3060
  }
3016
3061
  }
3017
3062
  };
@@ -4223,10 +4268,13 @@ var FaceStore = class {
4223
4268
  value: rest
4224
4269
  });
4225
4270
  } catch (err) {
4226
- this.logger.warn("FaceStore.insert failed", { meta: {
4227
- faceId: id,
4228
- error: String(err)
4229
- } });
4271
+ this.logger.warn("FaceStore.insert failed", {
4272
+ tags: { deviceId: face.deviceId },
4273
+ meta: {
4274
+ faceId: id,
4275
+ error: String(err)
4276
+ }
4277
+ });
4230
4278
  }
4231
4279
  }
4232
4280
  /**
@@ -4293,10 +4341,13 @@ var FaceStore = class {
4293
4341
  });
4294
4342
  deleted.push(id);
4295
4343
  } catch (err) {
4296
- this.logger.warn("FaceStore.prune delete failed", { meta: {
4297
- faceId: id,
4298
- error: String(err)
4299
- } });
4344
+ this.logger.warn("FaceStore.prune delete failed", {
4345
+ tags: { deviceId: input.deviceId },
4346
+ meta: {
4347
+ faceId: id,
4348
+ error: String(err)
4349
+ }
4350
+ });
4300
4351
  }
4301
4352
  return deleted;
4302
4353
  }
@@ -4582,10 +4633,13 @@ var ObjectEmbeddingStore = class {
4582
4633
  value: record
4583
4634
  });
4584
4635
  } catch (err) {
4585
- this.logger.warn("ObjectEmbeddingStore.upsertIfBetter failed", { meta: {
4586
- trackId: input.trackId,
4587
- error: String(err)
4588
- } });
4636
+ this.logger.warn("ObjectEmbeddingStore.upsertIfBetter failed", {
4637
+ tags: { deviceId: input.deviceId },
4638
+ meta: {
4639
+ trackId: input.trackId,
4640
+ error: String(err)
4641
+ }
4642
+ });
4589
4643
  }
4590
4644
  }
4591
4645
  /**
@@ -4797,18 +4851,24 @@ var FaceRecognizer = class {
4797
4851
  try {
4798
4852
  await this.deps.trackStore.setLabel(c.trackId, name);
4799
4853
  } catch (err) {
4800
- this.deps.logger.warn("setLabel failed", { meta: {
4801
- trackId: c.trackId,
4802
- error: String(err)
4803
- } });
4854
+ this.deps.logger.warn("setLabel failed", {
4855
+ tags: { deviceId: input.deviceId },
4856
+ meta: {
4857
+ trackId: c.trackId,
4858
+ error: String(err)
4859
+ }
4860
+ });
4804
4861
  }
4805
4862
  try {
4806
4863
  await this.deps.eventStore.setLabelForTrack(c.trackId, name);
4807
4864
  } catch (err) {
4808
- this.deps.logger.warn("setLabelForTrack failed", { meta: {
4809
- trackId: c.trackId,
4810
- error: String(err)
4811
- } });
4865
+ this.deps.logger.warn("setLabelForTrack failed", {
4866
+ tags: { deviceId: input.deviceId },
4867
+ meta: {
4868
+ trackId: c.trackId,
4869
+ error: String(err)
4870
+ }
4871
+ });
4812
4872
  }
4813
4873
  }
4814
4874
  }
@@ -4820,10 +4880,13 @@ var FaceRecognizer = class {
4820
4880
  if (input.frameHandle !== void 0) try {
4821
4881
  crop = await this.deps.captureCrop(input.frameHandle, cropBbox, input.frameWidth, input.frameHeight, input.cropPadding) ?? void 0;
4822
4882
  } catch (err) {
4823
- this.deps.logger.debug("FaceRecognizer crop capture failed", { meta: {
4824
- trackId: c.trackId,
4825
- error: String(err)
4826
- } });
4883
+ this.deps.logger.debug("FaceRecognizer crop capture failed", {
4884
+ tags: { deviceId: input.deviceId },
4885
+ meta: {
4886
+ trackId: c.trackId,
4887
+ error: String(err)
4888
+ }
4889
+ });
4827
4890
  }
4828
4891
  this.bestFace.set(c.trackId, {
4829
4892
  score: c.confidence,
@@ -4879,10 +4942,13 @@ var FaceRecognizer = class {
4879
4942
  data: held.crop
4880
4943
  });
4881
4944
  } catch (err) {
4882
- this.deps.logger.warn("FaceRecognizer face crop put failed", { meta: {
4883
- faceId,
4884
- error: String(err)
4885
- } });
4945
+ this.deps.logger.warn("FaceRecognizer face crop put failed", {
4946
+ tags: { deviceId },
4947
+ meta: {
4948
+ faceId,
4949
+ error: String(err)
4950
+ }
4951
+ });
4886
4952
  }
4887
4953
  try {
4888
4954
  await this.deps.faceStore.insert({
@@ -4908,10 +4974,13 @@ var FaceRecognizer = class {
4908
4974
  }
4909
4975
  });
4910
4976
  } catch (err) {
4911
- this.deps.logger.warn("FaceRecognizer faceStore insert failed", { meta: {
4912
- faceId,
4913
- error: String(err)
4914
- } });
4977
+ this.deps.logger.warn("FaceRecognizer faceStore insert failed", {
4978
+ tags: { deviceId },
4979
+ meta: {
4980
+ faceId,
4981
+ error: String(err)
4982
+ }
4983
+ });
4915
4984
  }
4916
4985
  }
4917
4986
  };
@@ -4991,10 +5060,13 @@ var PlateStore = class {
4991
5060
  value: rest
4992
5061
  });
4993
5062
  } catch (err) {
4994
- this.logger.warn("PlateStore.insert failed", { meta: {
4995
- plateId: id,
4996
- error: String(err)
4997
- } });
5063
+ this.logger.warn("PlateStore.insert failed", {
5064
+ tags: { deviceId: plate.deviceId },
5065
+ meta: {
5066
+ plateId: id,
5067
+ error: String(err)
5068
+ }
5069
+ });
4998
5070
  }
4999
5071
  }
5000
5072
  normalizeRow(r) {
@@ -5150,10 +5222,13 @@ var PlateRecognizer = class {
5150
5222
  if (input.frameHandle !== void 0) try {
5151
5223
  crop = await this.deps.captureCrop(input.frameHandle, c.plateBbox, input.frameWidth, input.frameHeight, input.cropPadding) ?? void 0;
5152
5224
  } catch (err) {
5153
- this.deps.logger.debug("PlateRecognizer crop capture failed", { meta: {
5154
- trackId: c.trackId,
5155
- error: String(err)
5156
- } });
5225
+ this.deps.logger.debug("PlateRecognizer crop capture failed", {
5226
+ tags: { deviceId: input.deviceId },
5227
+ meta: {
5228
+ trackId: c.trackId,
5229
+ error: String(err)
5230
+ }
5231
+ });
5157
5232
  }
5158
5233
  this.bestPlate.set(c.trackId, {
5159
5234
  text: c.plateText,
@@ -5182,10 +5257,13 @@ var PlateRecognizer = class {
5182
5257
  data: held.crop
5183
5258
  });
5184
5259
  } catch (err) {
5185
- this.deps.logger.warn("PlateRecognizer plate crop put failed", { meta: {
5186
- plateId,
5187
- error: String(err)
5188
- } });
5260
+ this.deps.logger.warn("PlateRecognizer plate crop put failed", {
5261
+ tags: { deviceId },
5262
+ meta: {
5263
+ plateId,
5264
+ error: String(err)
5265
+ }
5266
+ });
5189
5267
  }
5190
5268
  try {
5191
5269
  await this.deps.plateStore.insert({
@@ -5211,10 +5289,13 @@ var PlateRecognizer = class {
5211
5289
  }
5212
5290
  });
5213
5291
  } catch (err) {
5214
- this.deps.logger.warn("PlateRecognizer plateStore insert failed", { meta: {
5215
- plateId,
5216
- error: String(err)
5217
- } });
5292
+ this.deps.logger.warn("PlateRecognizer plateStore insert failed", {
5293
+ tags: { deviceId },
5294
+ meta: {
5295
+ plateId,
5296
+ error: String(err)
5297
+ }
5298
+ });
5218
5299
  }
5219
5300
  }
5220
5301
  };
@@ -6525,7 +6606,10 @@ var PipelineAnalyticsAddon = class extends BaseAddon {
6525
6606
  } : void 0, { classificationMinScore: settings.classificationMinScore });
6526
6607
  if (route.kind === "classification") {
6527
6608
  if (!topClassification) {
6528
- this.ctx.logger.warn("classifyAudioFrame returned classification but topClassification is null", { meta: { deviceId } });
6609
+ this.ctx.logger.warn("classifyAudioFrame returned classification but topClassification is null", {
6610
+ tags: { deviceId },
6611
+ meta: { deviceId }
6612
+ });
6529
6613
  return;
6530
6614
  }
6531
6615
  const last = this.lastAudioInsertByDevice.get(deviceId);
@@ -7075,13 +7159,16 @@ var PipelineAnalyticsAddon = class extends BaseAddon {
7075
7159
  const { counts, ids } = await this.eventStore.pruneBefore(input);
7076
7160
  if (ids.length > 0 && this.mediaStore) await this.mediaStore.deleteForEvents([...ids]);
7077
7161
  const { motion, object, audio } = counts;
7078
- if (motion + object + audio > 0) this.ctx.logger.info("analytics event eviction (floor)", { meta: {
7079
- deviceId: input.deviceId,
7080
- cutoffMs: input.cutoffMs,
7081
- motion,
7082
- object,
7083
- audio
7084
- } });
7162
+ if (motion + object + audio > 0) this.ctx.logger.info("analytics event eviction (floor)", {
7163
+ tags: { deviceId: input.deviceId },
7164
+ meta: {
7165
+ deviceId: input.deviceId,
7166
+ cutoffMs: input.cutoffMs,
7167
+ motion,
7168
+ object,
7169
+ audio
7170
+ }
7171
+ });
7085
7172
  return counts;
7086
7173
  }
7087
7174
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-post-analysis",
3
- "version": "1.1.22",
3
+ "version": "1.1.23",
4
4
  "description": "CamStack Post-Analysis bundle — enrichment, embedding-encoder, pipeline-analytics. Multi-entry npm package shipping addons that consume pipeline output.",
5
5
  "keywords": [
6
6
  "camstack",