@camstack/addon-post-analysis 1.1.25 → 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
  }
@@ -10892,6 +10922,25 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(ZoneSchema).read
10892
10922
  auth: "admin"
10893
10923
  }), object({ zones: array(ZoneSchema).readonly() });
10894
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
+ /**
10895
10944
  * Per-camera tunable ranges + defaults. Single source of truth used
10896
10945
  * by both the Zod data schema (validation + default fallback) and
10897
10946
  * the device settings UI (slider min/max/step). Touch one place and
@@ -11147,7 +11196,11 @@ var RunnerLocalMetricsSchema = object({
11147
11196
  avgInferenceTimeMs: number(),
11148
11197
  queueDepth: number()
11149
11198
  });
11150
- 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());
11151
11204
  object({
11152
11205
  detected: boolean(),
11153
11206
  /** Ms epoch of the last detected-true observation. Null if never detected. */
@@ -15250,7 +15303,17 @@ var TrackSchema = object({
15250
15303
  /** Cumulative normalized distance travelled (0..1 units = full frame width). */
15251
15304
  totalDistance: number(),
15252
15305
  state: TrackStateSchema,
15253
- 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()
15254
15317
  });
15255
15318
  var BaseEventFields = {
15256
15319
  id: string(),
@@ -15315,8 +15378,18 @@ var ObjectEventSchema = object({
15315
15378
  frameHeight: number().optional(),
15316
15379
  /** MediaStore key for the crop attached to this event (if any). */
15317
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(),
15318
15387
  /** Populated by B5 (recording playback URL for this event). */
15319
- 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()
15320
15393
  });
15321
15394
  var AudioEventSchema = object({
15322
15395
  ...BaseEventFields,
@@ -15340,7 +15413,8 @@ var MediaFileKindEnum = _enum([
15340
15413
  "fullFrame",
15341
15414
  "fullFrameBoxed",
15342
15415
  "faceCrop",
15343
- "plateCrop"
15416
+ "plateCrop",
15417
+ "keyFrame"
15344
15418
  ]);
15345
15419
  var MediaFileSchema = object({
15346
15420
  key: string(),
@@ -15361,6 +15435,32 @@ var DeviceEventQueryInput = object({
15361
15435
  projection: _enum(["full", "slim"]).optional()
15362
15436
  });
15363
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
+ });
15364
15464
  var TrackedDetectionSchema = object({
15365
15465
  trackId: string(),
15366
15466
  className: string(),
@@ -15409,6 +15509,15 @@ var pipelineAnalyticsCapability = {
15409
15509
  getMotionEvents: method(DeviceEventQueryInput, array(MotionEventSchema).readonly()),
15410
15510
  getObjectEvents: method(ObjectEventQueryInput, array(ObjectEventSchema).readonly()),
15411
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()),
15412
15521
  /** Server-side bucketed event counts for the 24-hour timeline.
15413
15522
  * Returns one entry per non-empty bucket; empty buckets are omitted. */
15414
15523
  getEventDensity: method(object({
@@ -17375,7 +17484,17 @@ var FaceInfoSchema = object({
17375
17484
  recognizedIdentityId: string().optional(),
17376
17485
  identityName: string().optional(),
17377
17486
  assigned: boolean(),
17378
- 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()
17379
17498
  });
17380
17499
  var FaceFilterEnum = _enum([
17381
17500
  "unassigned",
@@ -21544,6 +21663,12 @@ Object.freeze({
21544
21663
  addonId: null,
21545
21664
  access: "view"
21546
21665
  },
21666
+ "pipelineAnalytics.getKeyEvents": {
21667
+ capName: "pipeline-analytics",
21668
+ capScope: "device",
21669
+ addonId: null,
21670
+ access: "view"
21671
+ },
21547
21672
  "pipelineAnalytics.getMotionEvents": {
21548
21673
  capName: "pipeline-analytics",
21549
21674
  capScope: "device",
@@ -22072,6 +22197,12 @@ Object.freeze({
22072
22197
  addonId: null,
22073
22198
  access: "view"
22074
22199
  },
22200
+ "pipelineRunner.getNativeCrop": {
22201
+ capName: "pipeline-runner",
22202
+ capScope: "system",
22203
+ addonId: null,
22204
+ access: "view"
22205
+ },
22075
22206
  "pipelineRunner.reportMotion": {
22076
22207
  capName: "pipeline-runner",
22077
22208
  capScope: "system",
@@ -23536,6 +23667,12 @@ Object.defineProperty(exports, "hydrateSchema", {
23536
23667
  return hydrateSchema;
23537
23668
  }
23538
23669
  });
23670
+ Object.defineProperty(exports, "nodePin", {
23671
+ enumerable: true,
23672
+ get: function() {
23673
+ return nodePin;
23674
+ }
23675
+ });
23539
23676
  Object.defineProperty(exports, "number", {
23540
23677
  enumerable: true,
23541
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
  }
@@ -10870,6 +10900,25 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(ZoneSchema).read
10870
10900
  auth: "admin"
10871
10901
  }), object({ zones: array(ZoneSchema).readonly() });
10872
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
+ /**
10873
10922
  * Per-camera tunable ranges + defaults. Single source of truth used
10874
10923
  * by both the Zod data schema (validation + default fallback) and
10875
10924
  * the device settings UI (slider min/max/step). Touch one place and
@@ -11125,7 +11174,11 @@ var RunnerLocalMetricsSchema = object({
11125
11174
  avgInferenceTimeMs: number(),
11126
11175
  queueDepth: number()
11127
11176
  });
11128
- 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());
11129
11182
  object({
11130
11183
  detected: boolean(),
11131
11184
  /** Ms epoch of the last detected-true observation. Null if never detected. */
@@ -15228,7 +15281,17 @@ var TrackSchema = object({
15228
15281
  /** Cumulative normalized distance travelled (0..1 units = full frame width). */
15229
15282
  totalDistance: number(),
15230
15283
  state: TrackStateSchema,
15231
- 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()
15232
15295
  });
15233
15296
  var BaseEventFields = {
15234
15297
  id: string(),
@@ -15293,8 +15356,18 @@ var ObjectEventSchema = object({
15293
15356
  frameHeight: number().optional(),
15294
15357
  /** MediaStore key for the crop attached to this event (if any). */
15295
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(),
15296
15365
  /** Populated by B5 (recording playback URL for this event). */
15297
- 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()
15298
15371
  });
15299
15372
  var AudioEventSchema = object({
15300
15373
  ...BaseEventFields,
@@ -15318,7 +15391,8 @@ var MediaFileKindEnum = _enum([
15318
15391
  "fullFrame",
15319
15392
  "fullFrameBoxed",
15320
15393
  "faceCrop",
15321
- "plateCrop"
15394
+ "plateCrop",
15395
+ "keyFrame"
15322
15396
  ]);
15323
15397
  var MediaFileSchema = object({
15324
15398
  key: string(),
@@ -15339,6 +15413,32 @@ var DeviceEventQueryInput = object({
15339
15413
  projection: _enum(["full", "slim"]).optional()
15340
15414
  });
15341
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
+ });
15342
15442
  var TrackedDetectionSchema = object({
15343
15443
  trackId: string(),
15344
15444
  className: string(),
@@ -15387,6 +15487,15 @@ var pipelineAnalyticsCapability = {
15387
15487
  getMotionEvents: method(DeviceEventQueryInput, array(MotionEventSchema).readonly()),
15388
15488
  getObjectEvents: method(ObjectEventQueryInput, array(ObjectEventSchema).readonly()),
15389
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()),
15390
15499
  /** Server-side bucketed event counts for the 24-hour timeline.
15391
15500
  * Returns one entry per non-empty bucket; empty buckets are omitted. */
15392
15501
  getEventDensity: method(object({
@@ -17353,7 +17462,17 @@ var FaceInfoSchema = object({
17353
17462
  recognizedIdentityId: string().optional(),
17354
17463
  identityName: string().optional(),
17355
17464
  assigned: boolean(),
17356
- 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()
17357
17476
  });
17358
17477
  var FaceFilterEnum = _enum([
17359
17478
  "unassigned",
@@ -21522,6 +21641,12 @@ Object.freeze({
21522
21641
  addonId: null,
21523
21642
  access: "view"
21524
21643
  },
21644
+ "pipelineAnalytics.getKeyEvents": {
21645
+ capName: "pipeline-analytics",
21646
+ capScope: "device",
21647
+ addonId: null,
21648
+ access: "view"
21649
+ },
21525
21650
  "pipelineAnalytics.getMotionEvents": {
21526
21651
  capName: "pipeline-analytics",
21527
21652
  capScope: "device",
@@ -22050,6 +22175,12 @@ Object.freeze({
22050
22175
  addonId: null,
22051
22176
  access: "view"
22052
22177
  },
22178
+ "pipelineRunner.getNativeCrop": {
22179
+ capName: "pipeline-runner",
22180
+ capScope: "system",
22181
+ addonId: null,
22182
+ access: "view"
22183
+ },
22053
22184
  "pipelineRunner.reportMotion": {
22054
22185
  capName: "pipeline-runner",
22055
22186
  capScope: "system",
@@ -23406,4 +23537,4 @@ object({
23406
23537
  schemaVersion: literal(1)
23407
23538
  });
23408
23539
  //#endregion
23409
- 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-CCC79h7t.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-Csk_yJr_.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-CCC79h7t.js");
6
- const require_resolve_frame = require("../resolve-frame-sKYbstL-.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-Csk_yJr_.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-CCC79h7t.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.41",
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.33",
36
+ version: "1.1.34",
37
37
  scope: ["default"],
38
38
  loaded: !1,
39
39
  from: "addon_pipeline_analytics_widgets",