@camstack/addon-post-analysis 1.1.24 → 1.1.26

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.
@@ -4649,7 +4649,7 @@ function _instanceof(cls, params = {}) {
4649
4649
  return inst;
4650
4650
  }
4651
4651
  //#endregion
4652
- //#region ../types/dist/sleep-b4Jf2n33.mjs
4652
+ //#region ../types/dist/sleep-BC9Yqte7.mjs
4653
4653
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
4654
4654
  EventCategory["SystemBoot"] = "system.boot";
4655
4655
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -7487,6 +7487,36 @@ var EncodeProfileSchema = object({
7487
7487
  */
7488
7488
  outputArgs: array(string()).optional()
7489
7489
  });
7490
+ /**
7491
+ * Per-call node pinning for `ctx.api` capability calls.
7492
+ *
7493
+ * A capability call normally resolves to its DEFAULT provider — a `singleton`
7494
+ * cap resolves to the hub, a device-scoped cap to the device's owning node. To
7495
+ * query a SPECIFIC node's provider instead (e.g. a remote agent's own
7496
+ * in-process `platform-probe` hardware, which the hub cannot probe), pin the
7497
+ * call to that node.
7498
+ *
7499
+ * The nodeId rides OUT-OF-BAND in the tRPC call context (NOT in the validated
7500
+ * method args), so capability method signatures stay `nodeId`-free — node
7501
+ * targeting is a property of the CALL, not of the method. The transport lifts
7502
+ * it from `op.context` onto the `CapCallInput.nodeId` field (`ipcParentLink`),
7503
+ * and the hub parent's `onUnownedCall` passes it to the `CapRouteResolver`,
7504
+ * which classifies a pinned agent node as `agent-child-forward`
7505
+ * (`$agent-cap-fwd.forward` → the agent's in-process provider).
7506
+ *
7507
+ * Usage at a call site:
7508
+ *
7509
+ * await api.platformProbe.getCapabilities.query(undefined, nodePin(nodeId))
7510
+ */
7511
+ /** tRPC `op.context` key carrying a per-call node pin. */
7512
+ var CAP_NODE_PIN_CONTEXT_KEY = "__camstackNodePin";
7513
+ /**
7514
+ * Build the tRPC request options that pin a single capability call to `nodeId`.
7515
+ * Pass as the second argument to `.query(input, …)` / `.mutate(input, …)`.
7516
+ */
7517
+ function nodePin(nodeId) {
7518
+ return { context: { [CAP_NODE_PIN_CONTEXT_KEY]: nodeId } };
7519
+ }
7490
7520
  function hfModelUrl(repo, path) {
7491
7521
  return `https://huggingface.co/${repo}/resolve/main/${path}`;
7492
7522
  }
@@ -10585,6 +10615,7 @@ var PipelineAddonSchemaSchema = object({
10585
10615
  defaultModelId: string(),
10586
10616
  defaultModelIdByFormat: record(string(), string()).optional(),
10587
10617
  enabledByDefault: boolean().optional(),
10618
+ backfillIntoExistingOverrides: boolean().optional(),
10588
10619
  defaultConfidence: number(),
10589
10620
  group: string().optional(),
10590
10621
  configSchema: array(ConfigFieldBridge).readonly().optional()
@@ -10891,6 +10922,25 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(ZoneSchema).read
10891
10922
  auth: "admin"
10892
10923
  }), object({ zones: array(ZoneSchema).readonly() });
10893
10924
  /**
10925
+ * A bounding box in NORMALIZED [0,1] frame coordinates for `getNativeCrop`. The
10926
+ * decode worker resolves it against the RETAINED native frame's real pixel dims,
10927
+ * so the caller supplies only the detection-res bbox divided by the detection
10928
+ * dims — no native resolution to plumb.
10929
+ */
10930
+ var NativeCropBboxSchema = object({
10931
+ x: number(),
10932
+ y: number(),
10933
+ w: number(),
10934
+ h: number()
10935
+ });
10936
+ /** Result of a best-effort native-resolution crop (`getNativeCrop`). */
10937
+ var NativeCropResultSchema = object({
10938
+ /** Packed rgb (24-bit) pixels of the crop. */
10939
+ bytes: _instanceof(Uint8Array),
10940
+ width: number().int().positive(),
10941
+ height: number().int().positive()
10942
+ });
10943
+ /**
10894
10944
  * Per-camera tunable ranges + defaults. Single source of truth used
10895
10945
  * by both the Zod data schema (validation + default fallback) and
10896
10946
  * the device settings UI (slider min/max/step). Touch one place and
@@ -11146,7 +11196,11 @@ var RunnerLocalMetricsSchema = object({
11146
11196
  avgInferenceTimeMs: number(),
11147
11197
  queueDepth: number()
11148
11198
  });
11149
- method(RunnerCameraConfigSchema, object({ success: literal(true) }), { kind: "mutation" }), method(object({ deviceId: number() }), object({ success: literal(true) }), { kind: "mutation" }), method(ReportMotionInputSchema, object({ success: literal(true) }), { kind: "mutation" }), method(_void(), RunnerLocalLoadSchema), method(_void(), RunnerLocalMetricsSchema), method(object({ deviceId: number() }), CameraMetricsSchema.nullable()), method(_void(), array(CameraMetricsWithDeviceIdSchema).readonly()), method(_void(), array(number()).readonly());
11199
+ method(RunnerCameraConfigSchema, object({ success: literal(true) }), { kind: "mutation" }), method(object({ deviceId: number() }), object({ success: literal(true) }), { kind: "mutation" }), method(ReportMotionInputSchema, object({ success: literal(true) }), { kind: "mutation" }), method(_void(), RunnerLocalLoadSchema), method(_void(), RunnerLocalMetricsSchema), method(object({ deviceId: number() }), CameraMetricsSchema.nullable()), method(_void(), array(CameraMetricsWithDeviceIdSchema).readonly()), method(_void(), array(number()).readonly()), method(object({
11200
+ handle: FrameHandleSchema,
11201
+ bbox: NativeCropBboxSchema,
11202
+ maxWidth: number().int().positive().optional()
11203
+ }), NativeCropResultSchema.nullable());
11150
11204
  object({
11151
11205
  detected: boolean(),
11152
11206
  /** Ms epoch of the last detected-true observation. Null if never detected. */
@@ -15249,7 +15303,17 @@ var TrackSchema = object({
15249
15303
  /** Cumulative normalized distance travelled (0..1 units = full frame width). */
15250
15304
  totalDistance: number(),
15251
15305
  state: TrackStateSchema,
15252
- active: boolean()
15306
+ active: boolean(),
15307
+ /** Deterministic key-event importance score in [0,1] (server-computed at
15308
+ * track expiry, recomputed on late label). Absent on legacy rows written
15309
+ * before scoring shipped — consumers degrade to absence / compute-on-read. */
15310
+ importance: number().optional(),
15311
+ /** Id of the track's highest-confidence ObjectEvent (its representative
15312
+ * "best" frame). Absent when the track produced no object events. */
15313
+ bestEventId: string().optional(),
15314
+ /** Tag of the importance sub-signal that dominated the score
15315
+ * (identity|dwell|proximity|class|confidence|travel|zone). */
15316
+ importanceReason: string().optional()
15253
15317
  });
15254
15318
  var BaseEventFields = {
15255
15319
  id: string(),
@@ -15314,8 +15378,18 @@ var ObjectEventSchema = object({
15314
15378
  frameHeight: number().optional(),
15315
15379
  /** MediaStore key for the crop attached to this event (if any). */
15316
15380
  mediaKey: string().optional(),
15381
+ /** Design B: MediaStore key of the track's native-resolution key frame (the
15382
+ * best-detection full frame). Resolve via the event-media data-plane
15383
+ * (`/addon/<addonId>/event-media/<keyFrameMediaKey>`) for a detail view that
15384
+ * draws `bbox` over the native frame. Absent on legacy rows / non-decoded
15385
+ * sources — consumers fall back to `mediaKey` (the tight crop). */
15386
+ keyFrameMediaKey: string().optional(),
15317
15387
  /** Populated by B5 (recording playback URL for this event). */
15318
- mediaUrl: string().optional()
15388
+ mediaUrl: string().optional(),
15389
+ /** The parent track's key-event importance [0,1], propagated to every object
15390
+ * event of the track (so an event row can be sorted by importance without a
15391
+ * track join). Absent on legacy rows / before the track was scored. */
15392
+ importance: number().optional()
15319
15393
  });
15320
15394
  var AudioEventSchema = object({
15321
15395
  ...BaseEventFields,
@@ -15339,7 +15413,8 @@ var MediaFileKindEnum = _enum([
15339
15413
  "fullFrame",
15340
15414
  "fullFrameBoxed",
15341
15415
  "faceCrop",
15342
- "plateCrop"
15416
+ "plateCrop",
15417
+ "keyFrame"
15343
15418
  ]);
15344
15419
  var MediaFileSchema = object({
15345
15420
  key: string(),
@@ -15360,6 +15435,32 @@ var DeviceEventQueryInput = object({
15360
15435
  projection: _enum(["full", "slim"]).optional()
15361
15436
  });
15362
15437
  var ObjectEventQueryInput = DeviceEventQueryInput.extend({ classFilter: string().optional() });
15438
+ var KeyEventQueryInput = object({
15439
+ deviceId: number(),
15440
+ /** Window lower bound (track firstSeen ≥ since). */
15441
+ since: number(),
15442
+ /** Window upper bound (track firstSeen ≤ until). */
15443
+ until: number(),
15444
+ limit: number().int().min(1).max(200).default(50),
15445
+ /** Drop tracks scoring below this importance. */
15446
+ minImportance: number().min(0).max(1).optional(),
15447
+ /** Restrict to a single class (e.g. 'person'). */
15448
+ classFilter: string().optional()
15449
+ });
15450
+ var KeyEventSchema = object({
15451
+ /** The representative event id (the track's best ObjectEvent, else its trackId). */
15452
+ id: string(),
15453
+ trackId: string(),
15454
+ /** Track start time (firstSeen). */
15455
+ timestamp: number(),
15456
+ className: string(),
15457
+ label: string().optional(),
15458
+ importance: number(),
15459
+ /** Highest-confidence ObjectEvent id for the track (empty when none). */
15460
+ bestEventId: string(),
15461
+ /** Track lifetime in ms (lastSeen - firstSeen). */
15462
+ windowMs: number().optional()
15463
+ });
15363
15464
  var TrackedDetectionSchema = object({
15364
15465
  trackId: string(),
15365
15466
  className: string(),
@@ -15408,6 +15509,15 @@ var pipelineAnalyticsCapability = {
15408
15509
  getMotionEvents: method(DeviceEventQueryInput, array(MotionEventSchema).readonly()),
15409
15510
  getObjectEvents: method(ObjectEventQueryInput, array(ObjectEventSchema).readonly()),
15410
15511
  getAudioEvents: method(DeviceEventQueryInput, array(AudioEventSchema).readonly()),
15512
+ /**
15513
+ * Importance-ranked highlights for a device+window. Queries completed
15514
+ * tracks by (deviceId, firstSeen ∈ [since,until]), scores each (or reuses
15515
+ * the persisted score), filters by minImportance/classFilter, orders by
15516
+ * importance desc, and returns up to `limit` compact key events mapped to
15517
+ * each track's best event. Legacy tracks lacking a persisted score are
15518
+ * scored on-read (no write). Degrades to `[]` on error.
15519
+ */
15520
+ getKeyEvents: method(KeyEventQueryInput, array(KeyEventSchema).readonly()),
15411
15521
  /** Server-side bucketed event counts for the 24-hour timeline.
15412
15522
  * Returns one entry per non-empty bucket; empty buckets are omitted. */
15413
15523
  getEventDensity: method(object({
@@ -17374,7 +17484,17 @@ var FaceInfoSchema = object({
17374
17484
  recognizedIdentityId: string().optional(),
17375
17485
  identityName: string().optional(),
17376
17486
  assigned: boolean(),
17377
- base64: string().optional()
17487
+ base64: string().optional(),
17488
+ /** Design B: the face bbox (pixel space) on the key frame — lets a detail
17489
+ * view draw the box over the native `keyFrameMediaKey` frame. Absent on
17490
+ * legacy rows written before design B. */
17491
+ faceBbox: BoundingBoxSchema.optional(),
17492
+ /** Design B: MediaStore key of the track's native-resolution key frame.
17493
+ * Fetch the native JPEG via the event-media data-plane
17494
+ * (`/addon/<addonId>/event-media/<keyFrameMediaKey>`). Absent when the
17495
+ * track produced no key frame (e.g. native/onboard source) — the UI falls
17496
+ * back to the inline `base64` face crop. */
17497
+ keyFrameMediaKey: string().optional()
17378
17498
  });
17379
17499
  var FaceFilterEnum = _enum([
17380
17500
  "unassigned",
@@ -21543,6 +21663,12 @@ Object.freeze({
21543
21663
  addonId: null,
21544
21664
  access: "view"
21545
21665
  },
21666
+ "pipelineAnalytics.getKeyEvents": {
21667
+ capName: "pipeline-analytics",
21668
+ capScope: "device",
21669
+ addonId: null,
21670
+ access: "view"
21671
+ },
21546
21672
  "pipelineAnalytics.getMotionEvents": {
21547
21673
  capName: "pipeline-analytics",
21548
21674
  capScope: "device",
@@ -22071,6 +22197,12 @@ Object.freeze({
22071
22197
  addonId: null,
22072
22198
  access: "view"
22073
22199
  },
22200
+ "pipelineRunner.getNativeCrop": {
22201
+ capName: "pipeline-runner",
22202
+ capScope: "system",
22203
+ addonId: null,
22204
+ access: "view"
22205
+ },
22074
22206
  "pipelineRunner.reportMotion": {
22075
22207
  capName: "pipeline-runner",
22076
22208
  capScope: "system",
@@ -23535,6 +23667,12 @@ Object.defineProperty(exports, "hydrateSchema", {
23535
23667
  return hydrateSchema;
23536
23668
  }
23537
23669
  });
23670
+ Object.defineProperty(exports, "nodePin", {
23671
+ enumerable: true,
23672
+ get: function() {
23673
+ return nodePin;
23674
+ }
23675
+ });
23538
23676
  Object.defineProperty(exports, "number", {
23539
23677
  enumerable: true,
23540
23678
  get: function() {
@@ -4627,7 +4627,7 @@ function _instanceof(cls, params = {}) {
4627
4627
  return inst;
4628
4628
  }
4629
4629
  //#endregion
4630
- //#region ../types/dist/sleep-b4Jf2n33.mjs
4630
+ //#region ../types/dist/sleep-BC9Yqte7.mjs
4631
4631
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
4632
4632
  EventCategory["SystemBoot"] = "system.boot";
4633
4633
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -7465,6 +7465,36 @@ var EncodeProfileSchema = object({
7465
7465
  */
7466
7466
  outputArgs: array(string()).optional()
7467
7467
  });
7468
+ /**
7469
+ * Per-call node pinning for `ctx.api` capability calls.
7470
+ *
7471
+ * A capability call normally resolves to its DEFAULT provider — a `singleton`
7472
+ * cap resolves to the hub, a device-scoped cap to the device's owning node. To
7473
+ * query a SPECIFIC node's provider instead (e.g. a remote agent's own
7474
+ * in-process `platform-probe` hardware, which the hub cannot probe), pin the
7475
+ * call to that node.
7476
+ *
7477
+ * The nodeId rides OUT-OF-BAND in the tRPC call context (NOT in the validated
7478
+ * method args), so capability method signatures stay `nodeId`-free — node
7479
+ * targeting is a property of the CALL, not of the method. The transport lifts
7480
+ * it from `op.context` onto the `CapCallInput.nodeId` field (`ipcParentLink`),
7481
+ * and the hub parent's `onUnownedCall` passes it to the `CapRouteResolver`,
7482
+ * which classifies a pinned agent node as `agent-child-forward`
7483
+ * (`$agent-cap-fwd.forward` → the agent's in-process provider).
7484
+ *
7485
+ * Usage at a call site:
7486
+ *
7487
+ * await api.platformProbe.getCapabilities.query(undefined, nodePin(nodeId))
7488
+ */
7489
+ /** tRPC `op.context` key carrying a per-call node pin. */
7490
+ var CAP_NODE_PIN_CONTEXT_KEY = "__camstackNodePin";
7491
+ /**
7492
+ * Build the tRPC request options that pin a single capability call to `nodeId`.
7493
+ * Pass as the second argument to `.query(input, …)` / `.mutate(input, …)`.
7494
+ */
7495
+ function nodePin(nodeId) {
7496
+ return { context: { [CAP_NODE_PIN_CONTEXT_KEY]: nodeId } };
7497
+ }
7468
7498
  function hfModelUrl(repo, path) {
7469
7499
  return `https://huggingface.co/${repo}/resolve/main/${path}`;
7470
7500
  }
@@ -10563,6 +10593,7 @@ var PipelineAddonSchemaSchema = object({
10563
10593
  defaultModelId: string(),
10564
10594
  defaultModelIdByFormat: record(string(), string()).optional(),
10565
10595
  enabledByDefault: boolean().optional(),
10596
+ backfillIntoExistingOverrides: boolean().optional(),
10566
10597
  defaultConfidence: number(),
10567
10598
  group: string().optional(),
10568
10599
  configSchema: array(ConfigFieldBridge).readonly().optional()
@@ -10869,6 +10900,25 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(ZoneSchema).read
10869
10900
  auth: "admin"
10870
10901
  }), object({ zones: array(ZoneSchema).readonly() });
10871
10902
  /**
10903
+ * A bounding box in NORMALIZED [0,1] frame coordinates for `getNativeCrop`. The
10904
+ * decode worker resolves it against the RETAINED native frame's real pixel dims,
10905
+ * so the caller supplies only the detection-res bbox divided by the detection
10906
+ * dims — no native resolution to plumb.
10907
+ */
10908
+ var NativeCropBboxSchema = object({
10909
+ x: number(),
10910
+ y: number(),
10911
+ w: number(),
10912
+ h: number()
10913
+ });
10914
+ /** Result of a best-effort native-resolution crop (`getNativeCrop`). */
10915
+ var NativeCropResultSchema = object({
10916
+ /** Packed rgb (24-bit) pixels of the crop. */
10917
+ bytes: _instanceof(Uint8Array),
10918
+ width: number().int().positive(),
10919
+ height: number().int().positive()
10920
+ });
10921
+ /**
10872
10922
  * Per-camera tunable ranges + defaults. Single source of truth used
10873
10923
  * by both the Zod data schema (validation + default fallback) and
10874
10924
  * the device settings UI (slider min/max/step). Touch one place and
@@ -11124,7 +11174,11 @@ var RunnerLocalMetricsSchema = object({
11124
11174
  avgInferenceTimeMs: number(),
11125
11175
  queueDepth: number()
11126
11176
  });
11127
- method(RunnerCameraConfigSchema, object({ success: literal(true) }), { kind: "mutation" }), method(object({ deviceId: number() }), object({ success: literal(true) }), { kind: "mutation" }), method(ReportMotionInputSchema, object({ success: literal(true) }), { kind: "mutation" }), method(_void(), RunnerLocalLoadSchema), method(_void(), RunnerLocalMetricsSchema), method(object({ deviceId: number() }), CameraMetricsSchema.nullable()), method(_void(), array(CameraMetricsWithDeviceIdSchema).readonly()), method(_void(), array(number()).readonly());
11177
+ method(RunnerCameraConfigSchema, object({ success: literal(true) }), { kind: "mutation" }), method(object({ deviceId: number() }), object({ success: literal(true) }), { kind: "mutation" }), method(ReportMotionInputSchema, object({ success: literal(true) }), { kind: "mutation" }), method(_void(), RunnerLocalLoadSchema), method(_void(), RunnerLocalMetricsSchema), method(object({ deviceId: number() }), CameraMetricsSchema.nullable()), method(_void(), array(CameraMetricsWithDeviceIdSchema).readonly()), method(_void(), array(number()).readonly()), method(object({
11178
+ handle: FrameHandleSchema,
11179
+ bbox: NativeCropBboxSchema,
11180
+ maxWidth: number().int().positive().optional()
11181
+ }), NativeCropResultSchema.nullable());
11128
11182
  object({
11129
11183
  detected: boolean(),
11130
11184
  /** Ms epoch of the last detected-true observation. Null if never detected. */
@@ -15227,7 +15281,17 @@ var TrackSchema = object({
15227
15281
  /** Cumulative normalized distance travelled (0..1 units = full frame width). */
15228
15282
  totalDistance: number(),
15229
15283
  state: TrackStateSchema,
15230
- active: boolean()
15284
+ active: boolean(),
15285
+ /** Deterministic key-event importance score in [0,1] (server-computed at
15286
+ * track expiry, recomputed on late label). Absent on legacy rows written
15287
+ * before scoring shipped — consumers degrade to absence / compute-on-read. */
15288
+ importance: number().optional(),
15289
+ /** Id of the track's highest-confidence ObjectEvent (its representative
15290
+ * "best" frame). Absent when the track produced no object events. */
15291
+ bestEventId: string().optional(),
15292
+ /** Tag of the importance sub-signal that dominated the score
15293
+ * (identity|dwell|proximity|class|confidence|travel|zone). */
15294
+ importanceReason: string().optional()
15231
15295
  });
15232
15296
  var BaseEventFields = {
15233
15297
  id: string(),
@@ -15292,8 +15356,18 @@ var ObjectEventSchema = object({
15292
15356
  frameHeight: number().optional(),
15293
15357
  /** MediaStore key for the crop attached to this event (if any). */
15294
15358
  mediaKey: string().optional(),
15359
+ /** Design B: MediaStore key of the track's native-resolution key frame (the
15360
+ * best-detection full frame). Resolve via the event-media data-plane
15361
+ * (`/addon/<addonId>/event-media/<keyFrameMediaKey>`) for a detail view that
15362
+ * draws `bbox` over the native frame. Absent on legacy rows / non-decoded
15363
+ * sources — consumers fall back to `mediaKey` (the tight crop). */
15364
+ keyFrameMediaKey: string().optional(),
15295
15365
  /** Populated by B5 (recording playback URL for this event). */
15296
- mediaUrl: string().optional()
15366
+ mediaUrl: string().optional(),
15367
+ /** The parent track's key-event importance [0,1], propagated to every object
15368
+ * event of the track (so an event row can be sorted by importance without a
15369
+ * track join). Absent on legacy rows / before the track was scored. */
15370
+ importance: number().optional()
15297
15371
  });
15298
15372
  var AudioEventSchema = object({
15299
15373
  ...BaseEventFields,
@@ -15317,7 +15391,8 @@ var MediaFileKindEnum = _enum([
15317
15391
  "fullFrame",
15318
15392
  "fullFrameBoxed",
15319
15393
  "faceCrop",
15320
- "plateCrop"
15394
+ "plateCrop",
15395
+ "keyFrame"
15321
15396
  ]);
15322
15397
  var MediaFileSchema = object({
15323
15398
  key: string(),
@@ -15338,6 +15413,32 @@ var DeviceEventQueryInput = object({
15338
15413
  projection: _enum(["full", "slim"]).optional()
15339
15414
  });
15340
15415
  var ObjectEventQueryInput = DeviceEventQueryInput.extend({ classFilter: string().optional() });
15416
+ var KeyEventQueryInput = object({
15417
+ deviceId: number(),
15418
+ /** Window lower bound (track firstSeen ≥ since). */
15419
+ since: number(),
15420
+ /** Window upper bound (track firstSeen ≤ until). */
15421
+ until: number(),
15422
+ limit: number().int().min(1).max(200).default(50),
15423
+ /** Drop tracks scoring below this importance. */
15424
+ minImportance: number().min(0).max(1).optional(),
15425
+ /** Restrict to a single class (e.g. 'person'). */
15426
+ classFilter: string().optional()
15427
+ });
15428
+ var KeyEventSchema = object({
15429
+ /** The representative event id (the track's best ObjectEvent, else its trackId). */
15430
+ id: string(),
15431
+ trackId: string(),
15432
+ /** Track start time (firstSeen). */
15433
+ timestamp: number(),
15434
+ className: string(),
15435
+ label: string().optional(),
15436
+ importance: number(),
15437
+ /** Highest-confidence ObjectEvent id for the track (empty when none). */
15438
+ bestEventId: string(),
15439
+ /** Track lifetime in ms (lastSeen - firstSeen). */
15440
+ windowMs: number().optional()
15441
+ });
15341
15442
  var TrackedDetectionSchema = object({
15342
15443
  trackId: string(),
15343
15444
  className: string(),
@@ -15386,6 +15487,15 @@ var pipelineAnalyticsCapability = {
15386
15487
  getMotionEvents: method(DeviceEventQueryInput, array(MotionEventSchema).readonly()),
15387
15488
  getObjectEvents: method(ObjectEventQueryInput, array(ObjectEventSchema).readonly()),
15388
15489
  getAudioEvents: method(DeviceEventQueryInput, array(AudioEventSchema).readonly()),
15490
+ /**
15491
+ * Importance-ranked highlights for a device+window. Queries completed
15492
+ * tracks by (deviceId, firstSeen ∈ [since,until]), scores each (or reuses
15493
+ * the persisted score), filters by minImportance/classFilter, orders by
15494
+ * importance desc, and returns up to `limit` compact key events mapped to
15495
+ * each track's best event. Legacy tracks lacking a persisted score are
15496
+ * scored on-read (no write). Degrades to `[]` on error.
15497
+ */
15498
+ getKeyEvents: method(KeyEventQueryInput, array(KeyEventSchema).readonly()),
15389
15499
  /** Server-side bucketed event counts for the 24-hour timeline.
15390
15500
  * Returns one entry per non-empty bucket; empty buckets are omitted. */
15391
15501
  getEventDensity: method(object({
@@ -17352,7 +17462,17 @@ var FaceInfoSchema = object({
17352
17462
  recognizedIdentityId: string().optional(),
17353
17463
  identityName: string().optional(),
17354
17464
  assigned: boolean(),
17355
- base64: string().optional()
17465
+ base64: string().optional(),
17466
+ /** Design B: the face bbox (pixel space) on the key frame — lets a detail
17467
+ * view draw the box over the native `keyFrameMediaKey` frame. Absent on
17468
+ * legacy rows written before design B. */
17469
+ faceBbox: BoundingBoxSchema.optional(),
17470
+ /** Design B: MediaStore key of the track's native-resolution key frame.
17471
+ * Fetch the native JPEG via the event-media data-plane
17472
+ * (`/addon/<addonId>/event-media/<keyFrameMediaKey>`). Absent when the
17473
+ * track produced no key frame (e.g. native/onboard source) — the UI falls
17474
+ * back to the inline `base64` face crop. */
17475
+ keyFrameMediaKey: string().optional()
17356
17476
  });
17357
17477
  var FaceFilterEnum = _enum([
17358
17478
  "unassigned",
@@ -21521,6 +21641,12 @@ Object.freeze({
21521
21641
  addonId: null,
21522
21642
  access: "view"
21523
21643
  },
21644
+ "pipelineAnalytics.getKeyEvents": {
21645
+ capName: "pipeline-analytics",
21646
+ capScope: "device",
21647
+ addonId: null,
21648
+ access: "view"
21649
+ },
21524
21650
  "pipelineAnalytics.getMotionEvents": {
21525
21651
  capName: "pipeline-analytics",
21526
21652
  capScope: "device",
@@ -22049,6 +22175,12 @@ Object.freeze({
22049
22175
  addonId: null,
22050
22176
  access: "view"
22051
22177
  },
22178
+ "pipelineRunner.getNativeCrop": {
22179
+ capName: "pipeline-runner",
22180
+ capScope: "system",
22181
+ addonId: null,
22182
+ access: "view"
22183
+ },
22052
22184
  "pipelineRunner.reportMotion": {
22053
22185
  capName: "pipeline-runner",
22054
22186
  capScope: "system",
@@ -23405,4 +23537,4 @@ object({
23405
23537
  schemaVersion: literal(1)
23406
23538
  });
23407
23539
  //#endregion
23408
- export { object as C, number as S, tuple as T, createEvent as _, embeddingEncoderCapability as a, array as b, pipelineAnalyticsCapability as c, zoneAnalyticsCapability as d, errMsg as f, asJsonObject as g, EventCategory as h, cosineSimilarity as i, plateGalleryCapability as l, DeviceType as m, addonWidgetsSourceCapability as n, faceGalleryCapability as o, BaseAddon as p, audioMetricsCapability as r, hfModelUrl as s, EVENT_PAD_MS as t, videoclipsCapability as u, hydrateSchema as v, string as w, boolean as x, _enum as y };
23540
+ export { number as C, tuple as E, boolean as S, string as T, asJsonObject as _, embeddingEncoderCapability as a, _enum as b, nodePin as c, videoclipsCapability as d, zoneAnalyticsCapability as f, EventCategory as g, DeviceType as h, cosineSimilarity as i, pipelineAnalyticsCapability as l, BaseAddon as m, addonWidgetsSourceCapability as n, faceGalleryCapability as o, errMsg as p, audioMetricsCapability as r, hfModelUrl as s, EVENT_PAD_MS as t, plateGalleryCapability as u, createEvent as v, object as w, array as x, hydrateSchema as y };
@@ -2,7 +2,7 @@ Object.defineProperties(exports, {
2
2
  __esModule: { value: true },
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
- const require_dist = require("../dist-B0VgBdBN.js");
5
+ const require_dist = require("../dist-BEx5ST1W.js");
6
6
  let node_fs = require("node:fs");
7
7
  let node_fs$1 = require_dist.__toESM(node_fs, 1);
8
8
  node_fs = require_dist.__toESM(node_fs);
@@ -1,4 +1,4 @@
1
- import { a as embeddingEncoderCapability, p as BaseAddon, s as hfModelUrl } from "../dist-DRK78NMq.mjs";
1
+ import { a as embeddingEncoderCapability, m as BaseAddon, s as hfModelUrl } from "../dist-DytVmDZg.mjs";
2
2
  import { createRequire } from "node:module";
3
3
  import * as fs from "node:fs";
4
4
  import * as path$1 from "node:path";
@@ -2,8 +2,8 @@ Object.defineProperties(exports, {
2
2
  __esModule: { value: true },
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
- const require_dist = require("../dist-B0VgBdBN.js");
6
- const require_resolve_frame = require("../resolve-frame-DBXwF5fk.js");
5
+ const require_dist = require("../dist-BEx5ST1W.js");
6
+ const require_resolve_frame = require("../resolve-frame-Cbm_NFuq.js");
7
7
  let _camstack_shm_ring = require("@camstack/shm-ring");
8
8
  //#region src/enrichment-engine/types.ts
9
9
  var DEFAULT_ENRICHMENT_CONFIG = {
@@ -1,4 +1,4 @@
1
- import { C as object, S as number, T as tuple, _ as createEvent, b as array, g as asJsonObject, h as EventCategory, p as BaseAddon, w as string, x as boolean, y as _enum } from "../dist-DRK78NMq.mjs";
1
+ import { C as number, E as tuple, S as boolean, T as string, _ as asJsonObject, b as _enum, g as EventCategory, m as BaseAddon, v as createEvent, w as object, x as array } from "../dist-DytVmDZg.mjs";
2
2
  import { n as extractCrop, t as resolveFrame } from "../resolve-frame-CT1T1tWy.mjs";
3
3
  import { FrameRingReaderCache } from "@camstack/shm-ring";
4
4
  //#region src/enrichment-engine/types.ts
@@ -1,4 +1,4 @@
1
- const require_dist = require("./dist-B0VgBdBN.js");
1
+ const require_dist = require("./dist-BEx5ST1W.js");
2
2
  let node_fs = require("node:fs");
3
3
  node_fs = require_dist.__toESM(node_fs, 1);
4
4
  let node_path = require("node:path");
@@ -1,6 +1,6 @@
1
1
  import { a as e, i as t, n, o as r, r as i, t as a } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare__react__loadShare__.js-C0AuF9av.mjs";
2
2
  import { t as o } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-B3Wx5J80.mjs";
3
- import { a as s, i as c, n as l, o as u, r as d, s as f, t as p } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-DtOrjE2U.mjs";
3
+ import { a as s, i as c, n as l, o as u, r as d, s as f, t as p } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-C6LbOCa9.mjs";
4
4
  import { n as m, r as h, t as g } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.js-Bm-iyjmq.mjs";
5
5
  //#region ../../node_modules/lucide-react/dist/esm/shared/src/utils.js
6
6
  var _ = (e) => e.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase(), v = (e) => e.replace(/^([A-Z])|[\s-_]+(\w)/g, (e, t, n) => n ? n.toUpperCase() : t.toLowerCase()), y = (e) => {
@@ -3,7 +3,7 @@ import "./dist-CYZr2fwk.mjs";
3
3
  var e = {
4
4
  "@camstack/sdk": {
5
5
  name: "@camstack/sdk",
6
- version: "1.1.22",
6
+ version: "1.1.23",
7
7
  scope: ["default"],
8
8
  loaded: !1,
9
9
  from: "addon_pipeline_analytics_widgets",
@@ -18,7 +18,7 @@ var e = {
18
18
  },
19
19
  "@camstack/types": {
20
20
  name: "@camstack/types",
21
- version: "1.1.40",
21
+ version: "1.1.42",
22
22
  scope: ["default"],
23
23
  loaded: !1,
24
24
  from: "addon_pipeline_analytics_widgets",
@@ -33,7 +33,7 @@ var e = {
33
33
  },
34
34
  "@camstack/ui-library": {
35
35
  name: "@camstack/ui-library",
36
- version: "1.1.32",
36
+ version: "1.1.34",
37
37
  scope: ["default"],
38
38
  loaded: !1,
39
39
  from: "addon_pipeline_analytics_widgets",