@camstack/addon-post-analysis 1.2.69 → 1.2.70

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.
@@ -13415,11 +13415,33 @@ var NotificationFormatSchema = _enum([
13415
13415
  * Named by INTENT, never by glyph. "check" would tie the vocabulary to one
13416
13416
  * renderer's icon set; "acknowledge" survives an adapter that draws it
13417
13417
  * differently.
13418
+ *
13419
+ * ── A TOKEN IS NOT A WIRE VALUE ─────────────────────────────────────
13420
+ *
13421
+ * These names are for US. **No adapter may forward one verbatim.** Each maps
13422
+ * the whole set onto its own renderer's vocabulary through a
13423
+ * `Record<NotificationActionIcon, string>` — a Record, never a lookup with a
13424
+ * fallback, so adding a member here fails every adapter's build until someone
13425
+ * decides its glyph, which is the only place that decision can be made
13426
+ * honestly.
13427
+ *
13428
+ * This paragraph is the bug. Zentik declared `actionIcons: true` and passed
13429
+ * `disarm` straight through; iOS feeds that string to
13430
+ * `UNNotificationActionIcon(systemImageName:)`, `disarm` is not an SF Symbol,
13431
+ * and every snooze and alarm button arrived BLANK. A pass-through is not a
13432
+ * mapping, and "the field is documented" is not "the value renders".
13433
+ *
13434
+ * Adding a member is TRAIN-BOUND. The enum lives in the published
13435
+ * `@camstack/server` closure and the cap seam validates against the HUB's copy,
13436
+ * so an addon that emits a token the running hub does not know does not lose an
13437
+ * icon — its whole `send` fails Zod validation and the notification never
13438
+ * arrives. Never emit a new token from an addon before the train carrying it.
13418
13439
  */
13419
13440
  var NotificationActionIconSchema = _enum([
13420
13441
  "acknowledge",
13421
13442
  "dismiss",
13422
13443
  "silence",
13444
+ "snooze",
13423
13445
  "view",
13424
13446
  "play",
13425
13447
  "open",
@@ -13427,9 +13449,13 @@ var NotificationActionIconSchema = _enum([
13427
13449
  "lock",
13428
13450
  "unlock",
13429
13451
  "arm",
13452
+ "arm-home",
13453
+ "arm-away",
13454
+ "arm-night",
13430
13455
  "disarm",
13431
13456
  "light",
13432
- "alert"
13457
+ "alert",
13458
+ "camera"
13433
13459
  ]);
13434
13460
  /** A single tap-through action button. */
13435
13461
  var NotificationActionSchema = object({
@@ -13647,6 +13673,29 @@ var MACRO_LABELS = [
13647
13673
  name: "Package"
13648
13674
  }
13649
13675
  ];
13676
+ /**
13677
+ * The class names a per-class COUNT can ever be keyed on — the macro ids, and
13678
+ * only those.
13679
+ *
13680
+ * `preserveOriginal: false` below is the whole reason this set exists: the
13681
+ * executor maps each raw COCO label onto its macro and DROPS everything else,
13682
+ * so a tracked detection's `className` is always one of {@link MACRO_LABELS}.
13683
+ * Any surface that indexes counts by class name — the ZoneAnalytics occupancy
13684
+ * snapshot's `byClass`, and therefore every occupancy rule — can match nothing
13685
+ * else. Derived from the catalog, never hand-listed, so a new macro joins it by
13686
+ * being declared once.
13687
+ *
13688
+ * Cost of not having it, 2026-08-12: the notification rule editor offered the
13689
+ * full taxonomy for an occupancy class (occupancy is the one condition that
13690
+ * does not go through the engine's macro-expanding `expandClassSelector`), two
13691
+ * live rules were authored on `car`, and both counters read 0 forever.
13692
+ */
13693
+ var DETECTION_MACRO_CLASSES = new Set(MACRO_LABELS.map((l) => l.id));
13694
+ /** True when `className` is a macro the detector can actually emit (and hence a
13695
+ * class a count can be keyed on) — see {@link DETECTION_MACRO_CLASSES}. */
13696
+ function isDetectionMacroClass(className) {
13697
+ return DETECTION_MACRO_CLASSES.has(className.trim().toLowerCase());
13698
+ }
13650
13699
  var COCO_TO_MACRO = {
13651
13700
  mapping: {
13652
13701
  person: "person",
@@ -14491,6 +14540,8 @@ var NcSystemEventKindSchema = _enum([
14491
14540
  "alarm-triggered",
14492
14541
  "alarm-armed",
14493
14542
  "alarm-disarmed",
14543
+ "alarm-arming",
14544
+ "alarm-arm-refused",
14494
14545
  "camera-online",
14495
14546
  "camera-offline",
14496
14547
  "camera-disabled",
@@ -14505,16 +14556,22 @@ var NC_LEGACY_SYSTEM_EVENT_KINDS = new Set([
14505
14556
  ]);
14506
14557
  NcSystemEventKindSchema.options.filter((kind) => !NC_LEGACY_SYSTEM_EVENT_KINDS.has(kind));
14507
14558
  /**
14508
- * The panel's three transitions, as ONE list.
14559
+ * The panel's transitions, as ONE list.
14509
14560
  *
14510
14561
  * Named here rather than spelled out at each of the four sites that need them
14511
14562
  * (the emitter, the intake, the editor group, the combined-notification gate),
14512
- * because a fourth transition added to the enum and forgotten at one of them is
14513
- * an alarm state nobody can be notified about.
14563
+ * because a transition added to the enum and forgotten at one of them is an
14564
+ * alarm state nobody can be notified about. That is exactly what this list
14565
+ * failed to prevent while it held three: `alarm-arming` was the fourth.
14566
+ *
14567
+ * In LIFECYCLE order, which is the order an editor lists them in and the order
14568
+ * a person experiences them — not the order they were added.
14514
14569
  */
14515
14570
  var NC_ALARM_SYSTEM_EVENT_KINDS = [
14516
- "alarm-triggered",
14571
+ "alarm-arm-refused",
14572
+ "alarm-arming",
14517
14573
  "alarm-armed",
14574
+ "alarm-triggered",
14518
14575
  "alarm-disarmed"
14519
14576
  ];
14520
14577
  /**
@@ -15413,13 +15470,17 @@ var NC_CONDITION_CATALOG = [
15413
15470
  label: "Server update available"
15414
15471
  },
15415
15472
  {
15416
- value: "alarm-triggered",
15417
- label: "Alarm triggered"
15473
+ value: "alarm-arming",
15474
+ label: "Alarm arming (exit delay)"
15418
15475
  },
15419
15476
  {
15420
15477
  value: "alarm-armed",
15421
15478
  label: "Alarm armed"
15422
15479
  },
15480
+ {
15481
+ value: "alarm-triggered",
15482
+ label: "Alarm triggered"
15483
+ },
15423
15484
  {
15424
15485
  value: "alarm-disarmed",
15425
15486
  label: "Alarm disarmed"
@@ -18689,6 +18750,22 @@ var detectionFpsField = {
18689
18750
  default: 10,
18690
18751
  step: 1
18691
18752
  };
18753
+ /**
18754
+ * The occupancy re-check interval. DEFAULT 300 s (2026-08-13 — was 30 s).
18755
+ *
18756
+ * The recheck is now on by default (a parked car is invisible to occupancy
18757
+ * rules until the stationary registry has been rebuilt by motion, which after a
18758
+ * restart may be never on a quiet camera). Each cycle re-subscribes a detection
18759
+ * session — an RTSP re-dial — so the switch is only affordable at a WIDE
18760
+ * interval: 300 s is ~12 re-dials an hour per camera, against 120 at the old
18761
+ * 30 s. A parked car is therefore counted within 5 minutes of a restart.
18762
+ *
18763
+ * Why not wider: `max` is 300 and raising it is TRAIN-BOUND, not addon-bound —
18764
+ * the host validates `attachCamera` against ITS copy of this schema, so a
18765
+ * runner asked for 600 would be rejected by the hub until a `@camstack/server`
18766
+ * carrying the wider bound is installed everywhere. 300 is the widest value
18767
+ * that ships with an addon deploy.
18768
+ */
18692
18769
  var occupancyRecheckSecField = {
18693
18770
  min: 0,
18694
18771
  max: 300,
@@ -18890,15 +18967,21 @@ var RunnerCameraConfigSchema = object({
18890
18967
  */
18891
18968
  onboardMotionDrivesAnalyzer: boolean().default(true),
18892
18969
  /**
18893
- * Master toggle for the occupancy re-check. When `false` (DEFAULT) the runner
18894
- * never arms the periodic recheck timer, regardless of `occupancyRecheckSec` —
18895
- * this is off by default because the recheck re-subscribes a detection session
18896
- * every N seconds while `watching`, a major source of pull-decoder re-dial
18897
- * churn (each cycle creates+tears a session → RTSP re-dial → latency). The
18970
+ * Master toggle for the occupancy re-check. When `false` the runner never arms
18971
+ * the periodic recheck timer, regardless of `occupancyRecheckSec`; the
18898
18972
  * `occupancyRecheckSec` / `occupancyRecheckFrames` sliders only take effect
18899
18973
  * (and only render) when this is enabled.
18900
- */
18901
- occupancyRecheckEnabled: boolean().default(false),
18974
+ *
18975
+ * DEFAULT `true` since 2026-08-13 (was `false`). It was off because the
18976
+ * recheck re-subscribes a detection session every N seconds while `watching`
18977
+ * — each cycle creates+tears a session ⇒ an RTSP re-dial ⇒ latency, a major
18978
+ * pull-decoder churn source. What that bought was a blind spot: a STATIONARY
18979
+ * object is counted only while the stationary registry holds it, and the
18980
+ * registry rebuilds from motion, so after a restart a parked car was invisible
18981
+ * to every occupancy rule until something moved in front of it. The churn is
18982
+ * now paid on the interval instead — see `occupancyRecheckSecField`.
18983
+ */
18984
+ occupancyRecheckEnabled: boolean().default(true),
18902
18985
  occupancyRecheckSec: number().min(occupancyRecheckSecField.min).max(occupancyRecheckSecField.max).default(occupancyRecheckSecField.default),
18903
18986
  occupancyRecheckFrames: number().min(occupancyRecheckFramesField.min).max(occupancyRecheckFramesField.max).default(occupancyRecheckFramesField.default),
18904
18987
  /**
@@ -35954,4 +36037,4 @@ function vectorDimFromBase64(encoded) {
35954
36037
  return Math.floor(Buffer.from(encoded, "base64").byteLength / 4);
35955
36038
  }
35956
36039
  //#endregion
35957
- export { subKindsOf as $, TimelapseRulePatchSchema as A, defineCustomActions as B, NcSnoozeSuppressedSchema as C, RetrainStatusSchema as D, RECORDING_EXPORT_MAX_READ_BYTES as E, assertTimelapseCadences as F, hfModelUrl as G, embeddingEncoderCapability as H, audioMetricsCapability as I, notificationRulesCapability as J, isScheduleActive as K, buildEventKindDescriptor as L, TrackSourceSchema as M, addonWidgetsSourceCapability as N, TIMELAPSE_DENSE_FLOOR_SEC as O, alarmPanelCapability as P, readTimelapseGeneratedAt as Q, cosineSimilarity as R, NcSnoozeSchema as S, EventCategory as St, OpsLogEntrySchema as T, encodeVectorBase64 as U, deriveRecordingMode as V, faceGalleryCapability as W, plateGalleryCapability as X, pipelineAnalyticsCapability as Y, readDeviceStateFrom as Z, NcRulePatchSchema as _, object as _t, DeclaredDevices as a, DeviceType as at, NcScheduleSchema as b, string as bt, LabelAttributionSchema as c, isDeviceScopedCap as ct, NC_CONDITION_CATALOG as d, _enum as dt, vectorDimFromBase64 as et, NC_DEFAULT_SNOOZE_MINUTES as f, array as ft, NcRuleInputSchema as g, number as gt, NcConditionDescriptorSchema as h, literal as ht, DETECTION_PIPELINE_CAP_NAME as i, BaseAddon as it, TimelapseRuleSchema as j, TimelapseRuleInputSchema as k, MACRO_LABELS as l, nodePin as lt, NC_TAXONOMY as m, discriminatedUnion as mt, DEFAULT_EVENT_COLOR as n, zoneAnalyticsCapability as nt, EVENT_KIND_BY_CAP as o, createEvent as ot, NC_SNOOZE_MAX_MINUTES as p, boolean as pt, kebabToCamel as q, DEFAULT_TIMELAPSE_PREVIEW_TEXT as r, errMsg as rt, EVENT_PAD_MS as s, hydrateSchema as st, BaseDevice as t, videoclipsCapability as tt, NC_ALARM_SYSTEM_EVENT_KINDS as u, sleep as ut, NcRuleSchema as v, partialRecord as vt, NcTaxonomySchema as w, NcSnoozeInputSchema as x, unknown as xt, NcRuleTargetSchema as y, record as yt, customAction as z };
36040
+ export { readDeviceStateFrom as $, TimelapseRuleInputSchema as A, customAction as B, NcSnoozeSchema as C, unknown as Ct, RECORDING_EXPORT_MAX_READ_BYTES as D, OpsLogEntrySchema as E, alarmPanelCapability as F, faceGalleryCapability as G, deriveRecordingMode as H, assertTimelapseCadences as I, isScheduleActive as J, hfModelUrl as K, audioMetricsCapability as L, TimelapseRuleSchema as M, TrackSourceSchema as N, RetrainStatusSchema as O, addonWidgetsSourceCapability as P, plateGalleryCapability as Q, buildEventKindDescriptor as R, NcSnoozeInputSchema as S, string as St, NcTaxonomySchema as T, embeddingEncoderCapability as U, defineCustomActions as V, encodeVectorBase64 as W, notificationRulesCapability as X, kebabToCamel as Y, pipelineAnalyticsCapability as Z, NcRuleInputSchema as _, literal as _t, DETECTION_PIPELINE_CAP_NAME as a, errMsg as at, NcRuleTargetSchema as b, partialRecord as bt, EVENT_PAD_MS as c, createEvent as ct, NC_ALARM_SYSTEM_EVENT_KINDS as d, nodePin as dt, readTimelapseGeneratedAt as et, NC_CONDITION_CATALOG as f, sleep as ft, NcConditionDescriptorSchema as g, discriminatedUnion as gt, NC_TAXONOMY as h, boolean as ht, DETECTION_MACRO_CLASSES as i, zoneAnalyticsCapability as it, TimelapseRulePatchSchema as j, TIMELAPSE_DENSE_FLOOR_SEC as k, LabelAttributionSchema as l, hydrateSchema as lt, NC_SNOOZE_MAX_MINUTES as m, array as mt, DEFAULT_EVENT_COLOR as n, vectorDimFromBase64 as nt, DeclaredDevices as o, BaseAddon as ot, NC_DEFAULT_SNOOZE_MINUTES as p, _enum as pt, isDetectionMacroClass as q, DEFAULT_TIMELAPSE_PREVIEW_TEXT as r, videoclipsCapability as rt, EVENT_KIND_BY_CAP as s, DeviceType as st, BaseDevice as t, subKindsOf as tt, MACRO_LABELS as u, isDeviceScopedCap as ut, NcRulePatchSchema as v, number as vt, NcSnoozeSuppressedSchema as w, EventCategory as wt, NcScheduleSchema as x, record as xt, NcRuleSchema as y, object as yt, cosineSimilarity as z };
@@ -13446,11 +13446,33 @@ var NotificationFormatSchema = _enum([
13446
13446
  * Named by INTENT, never by glyph. "check" would tie the vocabulary to one
13447
13447
  * renderer's icon set; "acknowledge" survives an adapter that draws it
13448
13448
  * differently.
13449
+ *
13450
+ * ── A TOKEN IS NOT A WIRE VALUE ─────────────────────────────────────
13451
+ *
13452
+ * These names are for US. **No adapter may forward one verbatim.** Each maps
13453
+ * the whole set onto its own renderer's vocabulary through a
13454
+ * `Record<NotificationActionIcon, string>` — a Record, never a lookup with a
13455
+ * fallback, so adding a member here fails every adapter's build until someone
13456
+ * decides its glyph, which is the only place that decision can be made
13457
+ * honestly.
13458
+ *
13459
+ * This paragraph is the bug. Zentik declared `actionIcons: true` and passed
13460
+ * `disarm` straight through; iOS feeds that string to
13461
+ * `UNNotificationActionIcon(systemImageName:)`, `disarm` is not an SF Symbol,
13462
+ * and every snooze and alarm button arrived BLANK. A pass-through is not a
13463
+ * mapping, and "the field is documented" is not "the value renders".
13464
+ *
13465
+ * Adding a member is TRAIN-BOUND. The enum lives in the published
13466
+ * `@camstack/server` closure and the cap seam validates against the HUB's copy,
13467
+ * so an addon that emits a token the running hub does not know does not lose an
13468
+ * icon — its whole `send` fails Zod validation and the notification never
13469
+ * arrives. Never emit a new token from an addon before the train carrying it.
13449
13470
  */
13450
13471
  var NotificationActionIconSchema = _enum([
13451
13472
  "acknowledge",
13452
13473
  "dismiss",
13453
13474
  "silence",
13475
+ "snooze",
13454
13476
  "view",
13455
13477
  "play",
13456
13478
  "open",
@@ -13458,9 +13480,13 @@ var NotificationActionIconSchema = _enum([
13458
13480
  "lock",
13459
13481
  "unlock",
13460
13482
  "arm",
13483
+ "arm-home",
13484
+ "arm-away",
13485
+ "arm-night",
13461
13486
  "disarm",
13462
13487
  "light",
13463
- "alert"
13488
+ "alert",
13489
+ "camera"
13464
13490
  ]);
13465
13491
  /** A single tap-through action button. */
13466
13492
  var NotificationActionSchema = object({
@@ -13678,6 +13704,29 @@ var MACRO_LABELS = [
13678
13704
  name: "Package"
13679
13705
  }
13680
13706
  ];
13707
+ /**
13708
+ * The class names a per-class COUNT can ever be keyed on — the macro ids, and
13709
+ * only those.
13710
+ *
13711
+ * `preserveOriginal: false` below is the whole reason this set exists: the
13712
+ * executor maps each raw COCO label onto its macro and DROPS everything else,
13713
+ * so a tracked detection's `className` is always one of {@link MACRO_LABELS}.
13714
+ * Any surface that indexes counts by class name — the ZoneAnalytics occupancy
13715
+ * snapshot's `byClass`, and therefore every occupancy rule — can match nothing
13716
+ * else. Derived from the catalog, never hand-listed, so a new macro joins it by
13717
+ * being declared once.
13718
+ *
13719
+ * Cost of not having it, 2026-08-12: the notification rule editor offered the
13720
+ * full taxonomy for an occupancy class (occupancy is the one condition that
13721
+ * does not go through the engine's macro-expanding `expandClassSelector`), two
13722
+ * live rules were authored on `car`, and both counters read 0 forever.
13723
+ */
13724
+ var DETECTION_MACRO_CLASSES = new Set(MACRO_LABELS.map((l) => l.id));
13725
+ /** True when `className` is a macro the detector can actually emit (and hence a
13726
+ * class a count can be keyed on) — see {@link DETECTION_MACRO_CLASSES}. */
13727
+ function isDetectionMacroClass(className) {
13728
+ return DETECTION_MACRO_CLASSES.has(className.trim().toLowerCase());
13729
+ }
13681
13730
  var COCO_TO_MACRO = {
13682
13731
  mapping: {
13683
13732
  person: "person",
@@ -14522,6 +14571,8 @@ var NcSystemEventKindSchema = _enum([
14522
14571
  "alarm-triggered",
14523
14572
  "alarm-armed",
14524
14573
  "alarm-disarmed",
14574
+ "alarm-arming",
14575
+ "alarm-arm-refused",
14525
14576
  "camera-online",
14526
14577
  "camera-offline",
14527
14578
  "camera-disabled",
@@ -14536,16 +14587,22 @@ var NC_LEGACY_SYSTEM_EVENT_KINDS = new Set([
14536
14587
  ]);
14537
14588
  NcSystemEventKindSchema.options.filter((kind) => !NC_LEGACY_SYSTEM_EVENT_KINDS.has(kind));
14538
14589
  /**
14539
- * The panel's three transitions, as ONE list.
14590
+ * The panel's transitions, as ONE list.
14540
14591
  *
14541
14592
  * Named here rather than spelled out at each of the four sites that need them
14542
14593
  * (the emitter, the intake, the editor group, the combined-notification gate),
14543
- * because a fourth transition added to the enum and forgotten at one of them is
14544
- * an alarm state nobody can be notified about.
14594
+ * because a transition added to the enum and forgotten at one of them is an
14595
+ * alarm state nobody can be notified about. That is exactly what this list
14596
+ * failed to prevent while it held three: `alarm-arming` was the fourth.
14597
+ *
14598
+ * In LIFECYCLE order, which is the order an editor lists them in and the order
14599
+ * a person experiences them — not the order they were added.
14545
14600
  */
14546
14601
  var NC_ALARM_SYSTEM_EVENT_KINDS = [
14547
- "alarm-triggered",
14602
+ "alarm-arm-refused",
14603
+ "alarm-arming",
14548
14604
  "alarm-armed",
14605
+ "alarm-triggered",
14549
14606
  "alarm-disarmed"
14550
14607
  ];
14551
14608
  /**
@@ -15444,13 +15501,17 @@ var NC_CONDITION_CATALOG = [
15444
15501
  label: "Server update available"
15445
15502
  },
15446
15503
  {
15447
- value: "alarm-triggered",
15448
- label: "Alarm triggered"
15504
+ value: "alarm-arming",
15505
+ label: "Alarm arming (exit delay)"
15449
15506
  },
15450
15507
  {
15451
15508
  value: "alarm-armed",
15452
15509
  label: "Alarm armed"
15453
15510
  },
15511
+ {
15512
+ value: "alarm-triggered",
15513
+ label: "Alarm triggered"
15514
+ },
15454
15515
  {
15455
15516
  value: "alarm-disarmed",
15456
15517
  label: "Alarm disarmed"
@@ -18720,6 +18781,22 @@ var detectionFpsField = {
18720
18781
  default: 10,
18721
18782
  step: 1
18722
18783
  };
18784
+ /**
18785
+ * The occupancy re-check interval. DEFAULT 300 s (2026-08-13 — was 30 s).
18786
+ *
18787
+ * The recheck is now on by default (a parked car is invisible to occupancy
18788
+ * rules until the stationary registry has been rebuilt by motion, which after a
18789
+ * restart may be never on a quiet camera). Each cycle re-subscribes a detection
18790
+ * session — an RTSP re-dial — so the switch is only affordable at a WIDE
18791
+ * interval: 300 s is ~12 re-dials an hour per camera, against 120 at the old
18792
+ * 30 s. A parked car is therefore counted within 5 minutes of a restart.
18793
+ *
18794
+ * Why not wider: `max` is 300 and raising it is TRAIN-BOUND, not addon-bound —
18795
+ * the host validates `attachCamera` against ITS copy of this schema, so a
18796
+ * runner asked for 600 would be rejected by the hub until a `@camstack/server`
18797
+ * carrying the wider bound is installed everywhere. 300 is the widest value
18798
+ * that ships with an addon deploy.
18799
+ */
18723
18800
  var occupancyRecheckSecField = {
18724
18801
  min: 0,
18725
18802
  max: 300,
@@ -18921,15 +18998,21 @@ var RunnerCameraConfigSchema = object({
18921
18998
  */
18922
18999
  onboardMotionDrivesAnalyzer: boolean().default(true),
18923
19000
  /**
18924
- * Master toggle for the occupancy re-check. When `false` (DEFAULT) the runner
18925
- * never arms the periodic recheck timer, regardless of `occupancyRecheckSec` —
18926
- * this is off by default because the recheck re-subscribes a detection session
18927
- * every N seconds while `watching`, a major source of pull-decoder re-dial
18928
- * churn (each cycle creates+tears a session → RTSP re-dial → latency). The
19001
+ * Master toggle for the occupancy re-check. When `false` the runner never arms
19002
+ * the periodic recheck timer, regardless of `occupancyRecheckSec`; the
18929
19003
  * `occupancyRecheckSec` / `occupancyRecheckFrames` sliders only take effect
18930
19004
  * (and only render) when this is enabled.
18931
- */
18932
- occupancyRecheckEnabled: boolean().default(false),
19005
+ *
19006
+ * DEFAULT `true` since 2026-08-13 (was `false`). It was off because the
19007
+ * recheck re-subscribes a detection session every N seconds while `watching`
19008
+ * — each cycle creates+tears a session ⇒ an RTSP re-dial ⇒ latency, a major
19009
+ * pull-decoder churn source. What that bought was a blind spot: a STATIONARY
19010
+ * object is counted only while the stationary registry holds it, and the
19011
+ * registry rebuilds from motion, so after a restart a parked car was invisible
19012
+ * to every occupancy rule until something moved in front of it. The churn is
19013
+ * now paid on the interval instead — see `occupancyRecheckSecField`.
19014
+ */
19015
+ occupancyRecheckEnabled: boolean().default(true),
18933
19016
  occupancyRecheckSec: number().min(occupancyRecheckSecField.min).max(occupancyRecheckSecField.max).default(occupancyRecheckSecField.default),
18934
19017
  occupancyRecheckFrames: number().min(occupancyRecheckFramesField.min).max(occupancyRecheckFramesField.max).default(occupancyRecheckFramesField.default),
18935
19018
  /**
@@ -36009,6 +36092,12 @@ Object.defineProperty(exports, "DEFAULT_TIMELAPSE_PREVIEW_TEXT", {
36009
36092
  return DEFAULT_TIMELAPSE_PREVIEW_TEXT;
36010
36093
  }
36011
36094
  });
36095
+ Object.defineProperty(exports, "DETECTION_MACRO_CLASSES", {
36096
+ enumerable: true,
36097
+ get: function() {
36098
+ return DETECTION_MACRO_CLASSES;
36099
+ }
36100
+ });
36012
36101
  Object.defineProperty(exports, "DETECTION_PIPELINE_CAP_NAME", {
36013
36102
  enumerable: true,
36014
36103
  get: function() {
@@ -36327,6 +36416,12 @@ Object.defineProperty(exports, "hydrateSchema", {
36327
36416
  return hydrateSchema;
36328
36417
  }
36329
36418
  });
36419
+ Object.defineProperty(exports, "isDetectionMacroClass", {
36420
+ enumerable: true,
36421
+ get: function() {
36422
+ return isDetectionMacroClass;
36423
+ }
36424
+ });
36330
36425
  Object.defineProperty(exports, "isDeviceScopedCap", {
36331
36426
  enumerable: true,
36332
36427
  get: function() {
@@ -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-BF27UAVH.js");
5
+ const require_dist = require("../dist-DnpVHUcH.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 { G as hfModelUrl, H as embeddingEncoderCapability, it as BaseAddon } from "../dist-CU_FWCL9.mjs";
1
+ import { K as hfModelUrl, U as embeddingEncoderCapability, ot as BaseAddon } from "../dist-6T-F0YJO.mjs";
2
2
  import { createRequire } from "node:module";
3
3
  import * as fs from "node:fs";
4
4
  import "node:fs";
@@ -3,7 +3,7 @@ import "./dist-CYZr2fwk.mjs";
3
3
  var e = {
4
4
  "@camstack/sdk": {
5
5
  name: "@camstack/sdk",
6
- version: "1.2.17",
6
+ version: "1.2.18",
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.2.66",
21
+ version: "1.2.67",
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.2.45",
36
+ version: "1.2.46",
37
37
  scope: ["default"],
38
38
  loaded: !1,
39
39
  from: "addon_pipeline_analytics_widgets",
@@ -36,7 +36,7 @@ async function r() {
36
36
  }
37
37
  },
38
38
  "@camstack/types": {
39
- version: "1.2.66",
39
+ version: "1.2.67",
40
40
  scope: "default",
41
41
  shareConfig: {
42
42
  singleton: !0,
@@ -45,7 +45,7 @@ async function r() {
45
45
  }
46
46
  },
47
47
  "@camstack/sdk": {
48
- version: "1.2.17",
48
+ version: "1.2.18",
49
49
  scope: "default",
50
50
  shareConfig: {
51
51
  singleton: !0,
@@ -81,7 +81,7 @@ async function r() {
81
81
  }
82
82
  },
83
83
  "@camstack/ui-library": {
84
- version: "1.2.45",
84
+ version: "1.2.46",
85
85
  scope: "default",
86
86
  shareConfig: {
87
87
  singleton: !0,