@camstack/addon-post-analysis 1.2.611 → 1.2.613

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.
Files changed (17) hide show
  1. package/dist/{clip-model-registry-D1PS6-db.js → clip-model-registry-CM-m6e1l.js} +575 -41
  2. package/dist/{clip-model-registry-3TQUwS_R.mjs → clip-model-registry-D6tdLEFB.mjs} +558 -42
  3. package/dist/embedding-encoder/index.js +1 -1
  4. package/dist/embedding-encoder/index.mjs +1 -1
  5. package/dist/pipeline-analytics/_stub.js +559 -1180
  6. package/dist/pipeline-analytics/{_virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_analytics_widgets-D_6mbip_.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_analytics_widgets-PyXxg2Wg.mjs} +3 -3
  7. package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-mydSlNUz.mjs +26 -0
  8. package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-BB2kgLY1.mjs +26 -0
  9. package/dist/pipeline-analytics/{_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare__react__loadShare__.js-C0AuF9av.mjs → _virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare__react__loadShare__.js-Cx9AsA5q.mjs} +1 -1
  10. package/dist/pipeline-analytics/{_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.js-Bm-iyjmq.mjs → _virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.js-CkwmHEi0.mjs} +8 -8
  11. package/dist/pipeline-analytics/{hostInit-Tp2cEslm.mjs → hostInit-RCMuxWxC.mjs} +3 -3
  12. package/dist/pipeline-analytics/index.js +1298 -359
  13. package/dist/pipeline-analytics/index.mjs +1298 -359
  14. package/dist/pipeline-analytics/remoteEntry.js +1 -1
  15. package/package.json +1 -1
  16. package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-BX7AfZj6.mjs +0 -26
  17. package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-DZcBAOjR.mjs +0 -26
@@ -5612,7 +5612,7 @@ var ZodIssueCode = {
5612
5612
  var ZodFirstPartyTypeKind;
5613
5613
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5614
5614
  //#endregion
5615
- //#region ../types/dist/sleep-yKL5gfrH.mjs
5615
+ //#region ../types/dist/sleep-BSuCCFjf.mjs
5616
5616
  /**
5617
5617
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5618
5618
  * window to float samples (D455).
@@ -18510,7 +18510,19 @@ var DeviceHistorySubjectSchema = discriminatedUnion("kind", [object({
18510
18510
  kind: literal("node"),
18511
18511
  nodeId: string().min(1)
18512
18512
  })]);
18513
+ /**
18514
+ * `enum` stores a STATE as the ordinal of its value in the series' value list
18515
+ * (`DeviceHistorySeriesInfo.values`, append-only, so an ordinal never changes
18516
+ * meaning); a rollup keeps the time spent in each state (`states`).
18517
+ */
18513
18518
  var DeviceHistoryKindSchema = _enum([
18519
+ "gauge",
18520
+ "counter",
18521
+ "boolean",
18522
+ "enum"
18523
+ ]);
18524
+ /** What a PRODUCER may declare. `enum` is cap-only: its value list is the cap field's. */
18525
+ var DeviceHistoryProducerKindSchema = _enum([
18514
18526
  "gauge",
18515
18527
  "counter",
18516
18528
  "boolean"
@@ -18547,7 +18559,13 @@ var SeriesInfoSchema = object({
18547
18559
  /** `null` is unknown (a `unitFrom` series whose device does not state a unit right now), never a guess. */
18548
18560
  unit: string().nullable(),
18549
18561
  displayName: string(),
18550
- source: _enum(["cap", "addon"]),
18562
+ source: _enum([
18563
+ "cap",
18564
+ "addon",
18565
+ "derived"
18566
+ ]),
18567
+ /** `enum`: the value of each ordinal (index = ordinal); `null` for every other kind. */
18568
+ values: array(string()).readonly().nullable(),
18551
18569
  firstTs: number(),
18552
18570
  lastTs: number()
18553
18571
  });
@@ -18561,17 +18579,31 @@ var QueryPointSchema = object({
18561
18579
  twMean: number().nullable(),
18562
18580
  min: number(),
18563
18581
  max: number(),
18564
- /** `null` is unknown, never zero (D393). */
18565
- last: number().nullable()
18582
+ /** `null` is unknown, never zero (D393). For an `enum` series: the ordinal of {@link state}. */
18583
+ last: number().nullable(),
18584
+ /**
18585
+ * The increase over the point: a `counter`'s growth since the previous point
18586
+ * or bucket (a drop is a reset, counted from zero), and for
18587
+ * {@link DEVICE_HISTORY_ENERGY_KEY} the kWh used in the bucket. `null` for
18588
+ * every other kind, and when it cannot be known.
18589
+ */
18590
+ delta: number().nullable(),
18591
+ /** `enum`: the state in force at the end of the point (the name of `last`); `null` otherwise. */
18592
+ state: string().nullable(),
18593
+ /** `enum` rollup: milliseconds spent in each state inside the bucket; `null` for raw points and other kinds. */
18594
+ states: record(string(), number()).nullable()
18566
18595
  });
18567
18596
  var QuerySeriesSchema = object({
18568
18597
  scope: string(),
18569
18598
  /** The last point STRICTLY BEFORE `from` in the chosen tier, so a step chart can start at the held value. */
18570
18599
  before: object({
18571
18600
  t: number(),
18572
- value: number().nullable()
18601
+ value: number().nullable(),
18602
+ state: string().nullable()
18573
18603
  }).nullable(),
18574
- points: array(QueryPointSchema).readonly()
18604
+ points: array(QueryPointSchema).readonly(),
18605
+ /** A derived key: the stored key its points were computed from; `null` for a stored series. */
18606
+ derivedFrom: string().nullable()
18575
18607
  });
18576
18608
  /** The window part of a query, shared by the device and node forms. */
18577
18609
  var QueryWindowShape = {
@@ -18587,6 +18619,23 @@ var QueryResultSchema = object({
18587
18619
  series: array(QuerySeriesSchema).readonly(),
18588
18620
  truncated: boolean()
18589
18621
  });
18622
+ /** One read of a batch: a device's key or a node's key (exactly one subject). */
18623
+ var QueryManyItemSchema = union([object({
18624
+ deviceId: number().int(),
18625
+ key: string(),
18626
+ scope: string().optional()
18627
+ }), object({
18628
+ forNodeId: string().min(1),
18629
+ key: string(),
18630
+ scope: string().optional()
18631
+ })]);
18632
+ var QueryManyEntrySchema = discriminatedUnion("ok", [object({
18633
+ ok: literal(true),
18634
+ result: QueryResultSchema
18635
+ }), object({
18636
+ ok: literal(false),
18637
+ error: string()
18638
+ })]);
18590
18639
  var TierStatusSchema = object({
18591
18640
  tier: DeviceHistoryResolutionSchema,
18592
18641
  /** `null` until the first background count answered. */
@@ -18642,16 +18691,22 @@ var DeviceHistoryStatusSchema = object({
18642
18691
  lastRefreshAt: number().nullable()
18643
18692
  })
18644
18693
  });
18645
- method(object({ deviceId: number().int() }), array(SeriesInfoSchema).readonly()), method(object({ nodeId: string().min(1) }), array(SeriesInfoSchema).readonly(), { auth: "admin" }), method(object({
18694
+ method(object({ deviceId: number().int() }), array(SeriesInfoSchema).readonly()), method(object({ forNodeId: string().min(1) }), array(SeriesInfoSchema).readonly(), { auth: "admin" }), method(object({
18646
18695
  deviceId: number().int(),
18647
18696
  ...QueryWindowShape
18648
18697
  }), QueryResultSchema), method(object({
18649
- nodeId: string().min(1),
18698
+ forNodeId: string().min(1),
18650
18699
  ...QueryWindowShape
18651
18700
  }), QueryResultSchema, { auth: "admin" }), method(object({
18701
+ items: array(QueryManyItemSchema).min(1).max(24),
18702
+ from: QueryWindowShape.from,
18703
+ to: QueryWindowShape.to,
18704
+ resolution: QueryWindowShape.resolution,
18705
+ maxPoints: QueryWindowShape.maxPoints
18706
+ }), object({ results: array(QueryManyEntrySchema).readonly() }), { auth: "admin" }), method(object({
18652
18707
  name: string().regex(/^[a-z0-9-]+$/),
18653
18708
  subjectKind: _enum(["device", "node"]),
18654
- kind: DeviceHistoryKindSchema,
18709
+ kind: DeviceHistoryProducerKindSchema,
18655
18710
  unit: string().optional(),
18656
18711
  displayName: string().min(1),
18657
18712
  ingest: _enum(["points", "buckets"])
@@ -41976,14 +42031,106 @@ var LogEntrySchema = object({
41976
42031
  meta: record(string(), unknown()).optional(),
41977
42032
  tags: record(string(), string()).optional()
41978
42033
  });
41979
- method(LogEntrySchema, _void(), { kind: "mutation" }), method(object({
41980
- scope: array(string()).optional(),
42034
+ /**
42035
+ * A history READ against one destination (D898).
42036
+ *
42037
+ * Every filter is applied by the PROVIDER, before the limit — a filter the
42038
+ * browser applied after the limit is what made a rare device's lines
42039
+ * unreachable behind a busy one's. `before` / `after` are cursors the provider
42040
+ * minted (opaque to everyone else): a file position for the rotated files, a
42041
+ * nanosecond timestamp for Loki.
42042
+ *
42043
+ * A read is BOUNDED by `budgetMs`: a filter that matches nothing on a 30-day
42044
+ * store answers `done: false` with the cursor it reached and the bytes it
42045
+ * scanned, and the caller decides whether to go on. That is what makes a long
42046
+ * scan show progress and stop when asked — `cancelRead` ends the slice in
42047
+ * flight, and not asking for the next slice ends the scan.
42048
+ */
42049
+ var LogReadQuerySchema = object({
42050
+ /** Correlates `cancelRead`. Caller-chosen, unique per in-flight read. */
42051
+ requestId: string().min(1).max(64).optional(),
42052
+ /** The device the line is about (`tags.deviceId`, numeric). */
42053
+ deviceId: number().int().optional(),
42054
+ /**
42055
+ * The emitting addon — bare manifest id; `@<version>` / `::<sub>` suffixes
42056
+ * match. Not `addonId`: a cap router reads that name as "which provider".
42057
+ */
42058
+ fromAddonId: string().min(1).max(200).optional(),
42059
+ /**
42060
+ * The emitting node: matches the agent that emitted the line, the node
42061
+ * itself, or a worker under it (`<agent>/<runner>`) — the `agentId`
42062
+ * semantics of `matchesLogTags`. Not `nodeId`: a cap router reads that
42063
+ * name as "which node's provider".
42064
+ */
42065
+ fromNodeId: string().min(1).max(200).optional(),
42066
+ /** Any other tag, exact match (AND). */
42067
+ tags: record(string(), union([string(), number()])).optional(),
42068
+ /** Severity FLOOR: this level and above. */
41981
42069
  level: LogLevelSchema.optional(),
41982
- since: date().optional(),
41983
- until: date().optional(),
41984
- limit: number().optional(),
41985
- tags: record(string(), string()).optional()
41986
- }), array(LogEntrySchema).readonly());
42070
+ /** Case-insensitive substring over message, scope, tag values and meta values. */
42071
+ text: string().min(1).max(200).optional(),
42072
+ /** Epoch ms, inclusive. */
42073
+ since: number().optional(),
42074
+ /** Epoch ms, inclusive. */
42075
+ until: number().optional(),
42076
+ /** Older than this cursor (exclusive). Absent with `after` absent ⇒ from the newest. */
42077
+ before: string().min(1).max(1024).optional(),
42078
+ /** Newer than this cursor (exclusive). */
42079
+ after: string().min(1).max(1024).optional(),
42080
+ limit: number().int().min(1).max(1e3).optional(),
42081
+ /** Wall-clock bound of this slice. The provider caps it. */
42082
+ budgetMs: number().int().min(50).max(1e4).optional()
42083
+ });
42084
+ var LogReadResultSchema = object({
42085
+ /** Newest first. */
42086
+ entries: array(object({
42087
+ /** `<bootId>.<seq>` minted by the emitting LogManager — the dedupe key. */
42088
+ id: string().optional(),
42089
+ /** Epoch ms. */
42090
+ timestamp: number(),
42091
+ level: LogLevelSchema,
42092
+ scope: string().optional(),
42093
+ message: string(),
42094
+ tags: record(string(), union([string(), number()])).optional(),
42095
+ meta: record(string(), unknown()).optional()
42096
+ })),
42097
+ /** Pass as `before` for the next older page; null when nothing older exists. */
42098
+ nextBefore: string().nullable(),
42099
+ /** Pass as `after` to read what arrived since; null when unknown. */
42100
+ nextAfter: string().nullable(),
42101
+ /** Bytes this slice read (files) or received (remote). Progress, not a promise. */
42102
+ scannedBytes: number().int().nonnegative(),
42103
+ /**
42104
+ * True when the scan in this direction reached the end of the store.
42105
+ * False with fewer than `limit` entries means the budget ran out first —
42106
+ * call again with `nextBefore` to go on.
42107
+ */
42108
+ done: boolean(),
42109
+ /** True when `cancelRead` ended this slice early. */
42110
+ cancelled: boolean().optional()
42111
+ });
42112
+ var LogReadCapabilitiesSchema = object({
42113
+ /** False ⇒ this destination only ships lines (console, forwarder, an unconfigured Loki). */
42114
+ readable: boolean(),
42115
+ /** Why not, when `readable` is false — rendered next to the source. */
42116
+ reason: string().nullable(),
42117
+ /** Filters the provider applies itself. A false one is applied by nobody. */
42118
+ filters: object({
42119
+ deviceId: boolean(),
42120
+ addonId: boolean(),
42121
+ nodeId: boolean(),
42122
+ tags: boolean(),
42123
+ level: boolean(),
42124
+ text: boolean(),
42125
+ timeRange: boolean()
42126
+ }),
42127
+ /** How far back the store reaches, when the provider knows (days). */
42128
+ retentionDays: number().nullable()
42129
+ });
42130
+ method(LogEntrySchema, _void(), { kind: "mutation" }), optionalMethod(_void(), LogReadCapabilitiesSchema, { auth: "admin" }), optionalMethod(LogReadQuerySchema, LogReadResultSchema, { auth: "admin" }), optionalMethod(object({ requestId: string().min(1).max(64) }), object({ cancelled: boolean() }), {
42131
+ kind: "mutation",
42132
+ auth: "admin"
42133
+ });
41987
42134
  /**
41988
42135
  * `login-method` — collection cap through which auth addons contribute
41989
42136
  * their pre-auth login surfaces to the login page. This is the SINGLE,
@@ -43732,9 +43879,11 @@ var alarmPanelCapability = {
43732
43879
  */
43733
43880
  durability: "restored",
43734
43881
  /**
43735
- * History (D850): none — enum state; arm/disarm history belongs in the events ledger.
43882
+ * History (D850): the panel's lifecycle state as an `enum` series —
43883
+ * change-only, no floor, so an `arming -> pending -> triggered` sequence of a
43884
+ * few seconds keeps every step. Who armed it stays in the events ledger.
43736
43885
  */
43737
- history: "none",
43886
+ history: { fields: { state: { kind: "enum" } } },
43738
43887
  /** Clock fields: written, but excluded from the compare that decides
43739
43888
  * whether persisting is worth a SQLite commit. */
43740
43889
  volatileStateFields: ["lastChangedAt"]
@@ -44656,6 +44805,33 @@ var NcRuleTargetSchema = object({
44656
44805
  params: record(string(), unknown()).optional()
44657
44806
  });
44658
44807
  /**
44808
+ * WHAT THE NOTIFICATION'S PICTURE IS (D897) — the ONE media choice of a rule.
44809
+ *
44810
+ * Every mode starts from the same CLEAN source frame of the trigger moment
44811
+ * (keyFrame → sceneFrame → lastSceneFrame, narrowed to the trigger instant and
44812
+ * to the zone that fired the rule) and renders it once at send time:
44813
+ * - `scene-boxes` — the whole scene, the subject outlined thick in the accent
44814
+ * colour and every OTHER track visible at that instant outlined thin, each
44815
+ * labelled with class and confidence ("dog 87%").
44816
+ * - `crop` — the subject cut out of that frame around its box at that instant.
44817
+ * - `clean` — the whole scene with nothing drawn on it.
44818
+ * - `none` — no picture.
44819
+ *
44820
+ * A mode that cannot be honoured (no box at that instant, a photograph with no
44821
+ * tracked subject) ships `clean` and names the reason in the log, per camera.
44822
+ * It replaces the `attach` × `frame` × `zoneCrop` triple, which let one rule
44823
+ * ship a crop on one event and a boxed scene on the next depending on which
44824
+ * stored kind had landed.
44825
+ */
44826
+ var NcMediaImageSchema = _enum([
44827
+ "scene-boxes",
44828
+ "crop",
44829
+ "clean",
44830
+ "none"
44831
+ ]);
44832
+ /**
44833
+ * @deprecated Read only by `normalizeNcMediaPolicy` (D897) — see {@link NcMediaImageSchema}.
44834
+ *
44659
44835
  * Media attachment policy (P1 still-image subset).
44660
44836
  * - `best` — the best AVAILABLE subject image at dispatch time (D-3).
44661
44837
  * - `best-matching` — the media that explains WHY the rule fired: a rule
@@ -44669,6 +44845,8 @@ var NcRuleTargetSchema = object({
44669
44845
  * - `none` — no attachment.
44670
44846
  */
44671
44847
  /**
44848
+ * @deprecated Read only by `normalizeNcMediaPolicy` (D897) — see {@link NcMediaImageSchema}.
44849
+ *
44672
44850
  * WHAT THE PICTURE SHOWS — chosen explicitly, because the implicit ladders
44673
44851
  * conflate it with the selection strategy and betray the request: asking for
44674
44852
  * the clean scene frame on an object-event owner used to start at
@@ -44715,16 +44893,29 @@ var NcLinkedCameraModeSchema = _enum(["mosaic", "each"]);
44715
44893
  var NC_CLIP_PRE_ROLL_DEFAULT_SEC = 4;
44716
44894
  var NC_CLIP_POST_ROLL_DEFAULT_SEC = 6;
44717
44895
  var NcMediaPolicySchema = object({
44896
+ /**
44897
+ * The picture — see {@link NcMediaImageSchema}. Absent on a rule nobody has
44898
+ * saved since D897: `normalizeNcMediaPolicy` derives it from the legacy
44899
+ * triple below, at load and at every write, and the store keeps only this.
44900
+ */
44901
+ image: NcMediaImageSchema.optional(),
44902
+ /**
44903
+ * Draw the zone that FIRED the rule on the picture (`scene-boxes` / `clean`;
44904
+ * a `crop` never shows it). Valid only on a rule whose trigger is a zone —
44905
+ * `conditions.zones` or an occupancy zone — and refused on save otherwise.
44906
+ * Replaces `zoneCrop`.
44907
+ */
44908
+ showTriggerZone: boolean().optional(),
44909
+ /** @deprecated D897 — accepted from an editor that predates `image`, folded into it on save. */
44718
44910
  attach: _enum([
44719
44911
  "best",
44720
44912
  "best-matching",
44721
44913
  "keyFrame",
44722
44914
  "none"
44723
- ]).default("best"),
44724
- /** What the still shows. Absent = `cropped` (the historical `best` shape). */
44915
+ ]).optional(),
44916
+ /** @deprecated D897 — accepted from an editor that predates `image`, folded into it on save. */
44725
44917
  frame: NcMediaFrameSchema.optional(),
44726
- /** Crop the attached still to the rule's condition-zone bbox (padded) —
44727
- * "show me the ZONE", not the whole scene or the subject crop. */
44918
+ /** @deprecated D897 — folded into `image: 'clean'` + `showTriggerZone` on save. */
44728
44919
  zoneCrop: boolean().optional(),
44729
44920
  /**
44730
44921
  * Also attach a short GIF cut from the stream broker's clip ring around the
@@ -44910,7 +45101,9 @@ var NcRuleInputSchema = object({
44910
45101
  * targets.
44911
45102
  */
44912
45103
  targetUsers: array(string()).optional(),
44913
- media: NcMediaPolicySchema.default({ attach: "best" }),
45104
+ /** Absent = the kind's default picture (`resolveNcMediaImage`): the subject crop for a
45105
+ * detection, the clean scene for a sensor or a sound. Set explicitly on save (D897). */
45106
+ media: NcMediaPolicySchema.default({}),
44914
45107
  throttle: NcThrottleSchema.default({
44915
45108
  cooldownSec: 60,
44916
45109
  scope: "rule-device"
@@ -46445,13 +46638,37 @@ var NcAlarmModeOpeningsSchema = object({
46445
46638
  /** Covered devices whose state could not be read (D49): neither open nor closed. */
46446
46639
  unknown: array(number().int())
46447
46640
  });
46641
+ /**
46642
+ * One alarm INPUT — a (rule, device) pair — the operator bypassed until the
46643
+ * next disarm ("Bypass this input until disarm" on a trigger notification, or
46644
+ * `nc.bypassAlarmInput`). Reported so an armed alarm with a silenced input
46645
+ * never looks fully armed (D62: off must never look like broken).
46646
+ */
46647
+ var NcAlarmInputBypassViewSchema = object({
46648
+ ruleId: string(),
46649
+ /** The rule's current name (its frozen name when the rule is gone). */
46650
+ ruleName: string(),
46651
+ /** The input: the sensor of the match, else its camera. */
46652
+ deviceId: number().int(),
46653
+ /** The input's current name. */
46654
+ name: string(),
46655
+ /** When it was bypassed (ms epoch). */
46656
+ since: number(),
46657
+ /** Triggers from this input dropped since. */
46658
+ dropped: number().int().min(0)
46659
+ });
46448
46660
  var NcAlarmLiveSchema = object({
46449
46661
  state: AlarmStateSchema,
46450
46662
  /** The mode being armed into (exit delay) or held; null when disarmed. */
46451
46663
  targetMode: AlarmArmModeSchema.nullable(),
46452
46664
  availableModes: array(AlarmArmModeSchema),
46453
46665
  openings: array(NcAlarmModeOpeningsSchema),
46454
- exclusions: array(NcAlarmExclusionViewSchema)
46666
+ exclusions: array(NcAlarmExclusionViewSchema),
46667
+ /**
46668
+ * Inputs bypassed for the rest of this arm session; cleared on disarm.
46669
+ * Defaulted so an older hub answer still parses (as "none known").
46670
+ */
46671
+ bypassedInputs: array(NcAlarmInputBypassViewSchema).default([])
46455
46672
  });
46456
46673
  var NcAlarmConfigSchema = object({
46457
46674
  /**
@@ -58361,9 +58578,11 @@ var connectivityCapability = {
58361
58578
  */
58362
58579
  durability: "restored",
58363
58580
  /**
58364
- * History (D850): none — duplicates device-status.online (one authority for availability).
58581
+ * History (D850): `connected` as a boolean series — change-only, no floor. It
58582
+ * is the upstream entity's own link (a HA connectivity sensor), not the
58583
+ * device's reachability, which stays `device-status.online`.
58365
58584
  */
58366
- history: "none",
58585
+ history: { fields: { connected: { kind: "boolean" } } },
58367
58586
  /** Clock fields: written, but excluded from the compare that decides
58368
58587
  * whether persisting is worth a SQLite commit. */
58369
58588
  volatileStateFields: ["lastChangedAt"]
@@ -59209,11 +59428,22 @@ var dishwasherCapability = {
59209
59428
  },
59210
59429
  runtimeState: DishwasherStatusSchema,
59211
59430
  durability: "session",
59212
- history: { fields: { progressPercent: {
59213
- kind: "gauge",
59214
- unit: "%",
59215
- deadband: 2
59216
- } } }
59431
+ history: { fields: {
59432
+ progressPercent: {
59433
+ kind: "gauge",
59434
+ unit: "%",
59435
+ deadband: 2
59436
+ },
59437
+ state: { kind: "enum" },
59438
+ operationState: { kind: "enum" },
59439
+ remainingSeconds: {
59440
+ kind: "gauge",
59441
+ unit: "s",
59442
+ minIntervalMs: 6e4
59443
+ },
59444
+ doorOpen: { kind: "boolean" },
59445
+ powerOn: { kind: "boolean" }
59446
+ } }
59217
59447
  };
59218
59448
  var DoorbellStatusSchema = object({
59219
59449
  /** Ms epoch of the last press. null = never observed since this provider started. */
@@ -59330,9 +59560,15 @@ var enumSensorCapability = {
59330
59560
  */
59331
59561
  durability: "restored",
59332
59562
  /**
59333
- * History (D850): none — text/enum state has no history (non-goal).
59563
+ * History (D850): the value as an `enum` series (an appliance's program or
59564
+ * operation state, an HVAC action). The option set is per device, so the
59565
+ * value list is LEARNED as values are first seen (bounded). A sensor with a
59566
+ * `format` carries a timestamp, not a state, and is not recorded.
59334
59567
  */
59335
- history: "none",
59568
+ history: { fields: { value: {
59569
+ kind: "enum",
59570
+ skipWhenSet: "format"
59571
+ } } },
59336
59572
  /** Clock fields: written, but excluded from the compare that decides
59337
59573
  * whether persisting is worth a SQLite commit. */
59338
59574
  volatileStateFields: ["lastFetchedAt"]
@@ -61366,9 +61602,10 @@ var lockControlCapability = {
61366
61602
  */
61367
61603
  durability: "restored",
61368
61604
  /**
61369
- * History (D850): none — enum state; lock events belong in the events ledger.
61605
+ * History (D850): the lock's state as an `enum` series — change-only, no
61606
+ * floor: a jam or an unlock lasting seconds is the edge an operator looks for.
61370
61607
  */
61371
- history: "none",
61608
+ history: { fields: { state: { kind: "enum" } } },
61372
61609
  /** Clock fields: written, but excluded from the compare that decides
61373
61610
  * whether persisting is worth a SQLite commit. */
61374
61611
  volatileStateFields: ["lastChangedAt"]
@@ -61542,9 +61779,18 @@ var mediaPlayerCapability = {
61542
61779
  */
61543
61780
  durability: "session",
61544
61781
  /**
61545
- * History (D850): none — `positionMs` moves continuously while playing; volume is transient.
61782
+ * History (D850): volume (a level an operator or an automation sets; the
61783
+ * default 10 s floor folds a slider drag into its end value) and mute.
61784
+ * `positionMs` is not recorded: it moves continuously while playing.
61546
61785
  */
61547
- history: "none"
61786
+ history: { fields: {
61787
+ volumeLevel: {
61788
+ kind: "gauge",
61789
+ unit: "%",
61790
+ deadband: 1
61791
+ },
61792
+ isMuted: { kind: "boolean" }
61793
+ } }
61548
61794
  };
61549
61795
  /**
61550
61796
  * mesh-network — collection cap for mesh-VPN providers.
@@ -63747,9 +63993,24 @@ var NpuInfoSchema = object({
63747
63993
  name: string().optional(),
63748
63994
  generation: _enum(["xdna1", "xdna2"]).optional()
63749
63995
  });
63996
+ var CoralBusSchema = _enum(["usb", "pci"]);
63750
63997
  var CoralInfoSchema = object({
63751
63998
  type: literal("coral-edgetpu"),
63752
- bus: string().optional()
63999
+ /** Legacy single-bus report (older nodes) — read via `coralUsableUnits`. */
64000
+ bus: string().optional(),
64001
+ /** Legacy USB unit count (older nodes) — read via `coralUsableUnits`. */
64002
+ count: number().int().nonnegative().optional(),
64003
+ /** Usable units per bus — each one is its own `edgetpu:<bus>[:N]` device. */
64004
+ units: array(object({
64005
+ bus: CoralBusSchema,
64006
+ count: number().int().nonnegative()
64007
+ })).readonly().optional(),
64008
+ /** Present-but-unusable units, each with its typed reason (never "absent"). */
64009
+ unavailable: array(object({
64010
+ bus: CoralBusSchema,
64011
+ count: number().int().nonnegative(),
64012
+ reason: _enum(["driver-missing", "device-not-accessible"])
64013
+ })).readonly().optional()
63753
64014
  });
63754
64015
  var HardwareInfoSchema = object({
63755
64016
  platform: HardwarePlatformSchema,
@@ -66946,9 +67207,29 @@ var streamParamsCapability = {
66946
67207
  */
66947
67208
  durability: "restored",
66948
67209
  /**
66949
- * History (D850): none — encoder configuration.
67210
+ * History (D850): the configured bitrate and frame rate of the main and sub
67211
+ * profiles. Configuration, so change-only on the default floor: a point is an
67212
+ * operator's (or a tuner's) edit, which is exactly what a chart of a stream's
67213
+ * quality over time must show.
66950
67214
  */
66951
- history: "none",
67215
+ history: { fields: {
67216
+ "main.bitrate": {
67217
+ kind: "gauge",
67218
+ unit: "kbps"
67219
+ },
67220
+ "main.framerate": {
67221
+ kind: "gauge",
67222
+ unit: "fps"
67223
+ },
67224
+ "sub.bitrate": {
67225
+ kind: "gauge",
67226
+ unit: "kbps"
67227
+ },
67228
+ "sub.framerate": {
67229
+ kind: "gauge",
67230
+ unit: "fps"
67231
+ }
67232
+ } },
66952
67233
  /** Clock fields: written, but excluded from the compare that decides
66953
67234
  * whether persisting is worth a SQLite commit. */
66954
67235
  volatileStateFields: ["lastFetchedAt"]
@@ -70179,6 +70460,15 @@ var BaseDevice = class {
70179
70460
  * Drivers can use the `getProbeFlags()` helper to read the flag bag
70180
70461
  * with a typed cast.
70181
70462
  *
70463
+ * Answer what you KNOW. A plain array is read as the complete list only
70464
+ * while this device is `online` and probed; return
70465
+ * `accessoryChildrenUnknown(reason)` whenever you cannot know the list right
70466
+ * now (no credentials, parent not connected, a failed or partial read) —
70467
+ * the kernel then deletes nothing. Return `accessoryChildrenComplete(list)`
70468
+ * to say "connected, and this is the complete list" explicitly. A shrink is
70469
+ * deleted only after a second agreeing complete read on a later probe (D49;
70470
+ * `packages/system/src/kernel/moleculer/accessory-prune-gate.ts`).
70471
+ *
70182
70472
  * Default: no children.
70183
70473
  */
70184
70474
  getAccessoryChildren() {
@@ -73827,7 +74117,19 @@ Object.freeze({
73827
74117
  addonId: null,
73828
74118
  access: "view"
73829
74119
  },
73830
- "logDestination.query": {
74120
+ "logDestination.cancelRead": {
74121
+ capName: "log-destination",
74122
+ capScope: "system",
74123
+ addonId: null,
74124
+ access: "create"
74125
+ },
74126
+ "logDestination.describeRead": {
74127
+ capName: "log-destination",
74128
+ capScope: "system",
74129
+ addonId: null,
74130
+ access: "view"
74131
+ },
74132
+ "logDestination.read": {
73831
74133
  capName: "log-destination",
73832
74134
  capScope: "system",
73833
74135
  addonId: null,
@@ -79834,6 +80136,11 @@ Object.freeze({
79834
80136
  form: "single",
79835
80137
  optional: false
79836
80138
  }],
80139
+ "logDestination.read": [{
80140
+ name: "deviceId",
80141
+ form: "single",
80142
+ optional: true
80143
+ }],
79837
80144
  "mediaPlayer.getStatus": [{
79838
80145
  name: "deviceId",
79839
80146
  form: "single",
@@ -82083,6 +82390,123 @@ function isSystemRuleKind(kind) {
82083
82390
  function systemFamilyOfKind(kind) {
82084
82391
  return isSystemEventFamily(kind) ? kind : void 0;
82085
82392
  }
82393
+ /**
82394
+ * Reasons, written once. Each names the SUBJECT FIELD the engine reads and
82395
+ * finds absent — that is what makes the exclusion checkable against the engine
82396
+ * rather than an opinion about tidiness.
82397
+ */
82398
+ var NO_SENSOR_KIND = "An occupancy edge is not a sensor event: it carries no sensor kind, so this condition can never match one.";
82399
+ var NO_EVENT_TOKEN = "An occupancy edge carries no device event-type token — that comes from an event-emitter slice, which a count crossing has none of.";
82400
+ var NO_SENSOR_EDGE = "An occupancy edge is a count crossing, not a sensor reading: it has no raise or clear, so this choice could never narrow it.";
82401
+ var OCCUPANCY_SOURCE = "An occupancy edge is always produced by the pipeline, so any other source can never match and “pipeline” narrows nothing.";
82402
+ var AUDIO_SOURCE = "A confirmed sound window is always stamped as an audio subject, so any other source can never match.";
82403
+ var SOUND_NOT_A_PICTURE = "A sound rule fires on what the camera HEARD. Its subject carries no detection, so this condition can never match one — name the sounds in the Sound condition instead.";
82404
+ var SOUND_NO_CONFIDENCE = "A sound window’s evidence is a percentage of samples, not a detector score, so a confidence threshold can never be satisfied.";
82405
+ var SOUND_NO_GEOMETRY = "A sound has no position in the frame, so a zone or a drawn polygon can never match it.";
82406
+ var NC_RULE_KIND_SPECS = [
82407
+ {
82408
+ kind: "detection",
82409
+ label: "Conditions",
82410
+ excluded: { audio: "A detection rule fires on what the camera SAW. Sounds are a Sound rule of their own — adding one here turned the rule into a sound rule and dropped every detection condition." },
82411
+ editable: true,
82412
+ carriesMedia: true,
82413
+ carriesSubjectCrop: true
82414
+ },
82415
+ {
82416
+ kind: "sensor",
82417
+ label: "Conditions",
82418
+ /** `occupancy` is still offered here: authoring it converts a sensor rule into an occupancy rule. */
82419
+ excluded: {},
82420
+ editable: true,
82421
+ carriesMedia: true,
82422
+ carriesSubjectCrop: true,
82423
+ blurb: "A doorbell press or a linked sensor changing state. The picture comes from the camera the sensor is attributed to."
82424
+ },
82425
+ {
82426
+ kind: "occupancy",
82427
+ label: "Occupancy",
82428
+ discriminator: "occupancy",
82429
+ excluded: {
82430
+ sensorKinds: NO_SENSOR_KIND,
82431
+ eventTypeTokens: NO_EVENT_TOKEN,
82432
+ sensorTransition: NO_SENSOR_EDGE,
82433
+ source: OCCUPANCY_SOURCE
82434
+ },
82435
+ editable: true,
82436
+ carriesMedia: true,
82437
+ carriesSubjectCrop: true,
82438
+ blurb: "Fires when the count in a camera frame or a zone crosses your threshold and holds. Pick the camera first — the zone list is that camera’s."
82439
+ },
82440
+ {
82441
+ kind: "sound",
82442
+ label: "Sound",
82443
+ discriminator: "audio",
82444
+ excluded: {
82445
+ classes: SOUND_NOT_A_PICTURE,
82446
+ classesExclude: SOUND_NOT_A_PICTURE,
82447
+ minConfidence: SOUND_NO_CONFIDENCE,
82448
+ zones: SOUND_NO_GEOMETRY,
82449
+ zonesExclude: SOUND_NO_GEOMETRY,
82450
+ customZones: SOUND_NO_GEOMETRY,
82451
+ crossing: SOUND_NO_GEOMETRY,
82452
+ labelEquals: SOUND_NOT_A_PICTURE,
82453
+ identities: SOUND_NOT_A_PICTURE,
82454
+ identitiesExclude: SOUND_NOT_A_PICTURE,
82455
+ plates: SOUND_NOT_A_PICTURE,
82456
+ source: AUDIO_SOURCE
82457
+ },
82458
+ editable: true,
82459
+ carriesMedia: true,
82460
+ carriesSubjectCrop: false,
82461
+ blurb: "Fires on a confirmed sampling window of audio, never on a picture. Name the sounds and/or keep a level threshold — with neither it can never match.",
82462
+ mediaBlurb: "A sound owns no frame, so the picture is a photograph of the camera taken at the moment of the match — the whole scene, never a crop. The GIF and the clip are cut around the same instant, from the camera."
82463
+ },
82464
+ {
82465
+ kind: "device-events",
82466
+ label: "Device events",
82467
+ discriminator: "systemEvent",
82468
+ excluded: {},
82469
+ editable: true,
82470
+ carriesMedia: false,
82471
+ carriesSubjectCrop: false,
82472
+ blurb: "A device or its stream going away or coming back, switched off or on, a battery or consumable running low, a camera detecting nothing. There is no frame to attach."
82473
+ },
82474
+ {
82475
+ kind: "system",
82476
+ label: "System events",
82477
+ discriminator: "systemEvent",
82478
+ excluded: {},
82479
+ editable: true,
82480
+ carriesMedia: false,
82481
+ carriesSubjectCrop: false,
82482
+ blurb: "The installation itself: a node leaving, an addon crash-looping, an update available or installed, a backup or an export finishing."
82483
+ },
82484
+ {
82485
+ kind: "alarm",
82486
+ label: "Alarm",
82487
+ discriminator: "systemEvent",
82488
+ excluded: {},
82489
+ editable: true,
82490
+ carriesMedia: false,
82491
+ carriesSubjectCrop: false,
82492
+ blurb: "The alarm panel: refused, arming, armed, entry delay, triggered, re-armed, sensor bypass, disarmed.",
82493
+ mediaBlurb: "An alarm set off by a rule arrives with THAT rule's pictures, combined into one notification. This rule adds none of its own."
82494
+ },
82495
+ {
82496
+ kind: "mixed",
82497
+ label: "To recreate",
82498
+ discriminator: "systemEvent",
82499
+ excluded: {},
82500
+ editable: false,
82501
+ carriesMedia: false,
82502
+ carriesSubjectCrop: false,
82503
+ blurb: "This rule mixes events from more than one family (device events, system, alarm). It keeps firing as it is, but it can no longer be edited: create one rule per family, then delete this one."
82504
+ }
82505
+ ];
82506
+ /** The spec for a kind. Total by construction — every member has an entry. */
82507
+ function ruleKindSpec(kind) {
82508
+ return NC_RULE_KIND_SPECS.find((s) => s.kind === kind) ?? NC_RULE_KIND_SPECS[0];
82509
+ }
82086
82510
  /** The delivery a system rule rides — named once, compared everywhere. */
82087
82511
  var NC_SYSTEM_DELIVERY = "system-event";
82088
82512
  /**
@@ -82200,6 +82624,98 @@ function systemRuleKindOf(condition) {
82200
82624
  return verdict.kind === "family" ? verdict.family : "mixed";
82201
82625
  }
82202
82626
  NC_AUDIO_DEFAULTS.hitPercent, NC_AUDIO_DEFAULTS.samplingSeconds;
82627
+ /** Every mode, in the order an editor offers them. */
82628
+ var NC_MEDIA_IMAGE_MODES = [
82629
+ "scene-boxes",
82630
+ "crop",
82631
+ "clean",
82632
+ "none"
82633
+ ];
82634
+ /**
82635
+ * The modes a rule of this kind can honour. A kind that carries no media gets
82636
+ * none (its row ships text, or — an alarm — its SOURCE rule's picture); a kind
82637
+ * whose subject has no region of the frame (a sound) is never offered `crop`.
82638
+ */
82639
+ function imageModesForKind(kind) {
82640
+ const spec = ruleKindSpec(kind);
82641
+ if (!spec.carriesMedia) return [];
82642
+ return spec.carriesSubjectCrop ? NC_MEDIA_IMAGE_MODES : NC_MEDIA_IMAGE_MODES.filter((mode) => mode !== "crop");
82643
+ }
82644
+ /**
82645
+ * The zone ids that FIRE a rule: its `zones` condition, or an occupancy rule's
82646
+ * own scoped zone. Empty when the trigger is not a zone — and then
82647
+ * `showTriggerZone` has nothing to draw and is refused on save.
82648
+ */
82649
+ function ruleTriggerZoneIds(conditions) {
82650
+ if (conditions.zones !== void 0) return conditions.zones.ids;
82651
+ const zoneId = conditions.occupancy?.zoneId;
82652
+ return zoneId !== void 0 ? [zoneId] : [];
82653
+ }
82654
+ /**
82655
+ * What the legacy triple MEANT, as a mode. `zoneCrop` forced the clean
82656
+ * keyFrame ladder and dropped `frame`, so it is `clean` whatever else was set;
82657
+ * `frame` decided over `attach` when present; `keyFrame` was the clean scene;
82658
+ * every other still (`best`, `best-matching`, the default) was the subject.
82659
+ */
82660
+ function legacyImageMode(media) {
82661
+ if (media.attach === "none") return "none";
82662
+ if (media.zoneCrop === true) return "clean";
82663
+ if (media.frame === "full") return "clean";
82664
+ if (media.frame === "boxed") return "scene-boxes";
82665
+ if (media.frame === "cropped") return "crop";
82666
+ if (media.attach === "keyFrame") return "clean";
82667
+ return "crop";
82668
+ }
82669
+ /** A mode the kind cannot honour, mapped to the nearest one it can. */
82670
+ function clampToKind(mode, kind) {
82671
+ const offered = imageModesForKind(kind);
82672
+ if (offered.length === 0 || offered.includes(mode)) return mode;
82673
+ return mode === "crop" ? "clean" : mode;
82674
+ }
82675
+ /**
82676
+ * The mode a rule's picture is rendered in. `image` when stored; else what the
82677
+ * legacy triple meant — and, for a SENSOR rule written before D897, `clean`
82678
+ * whatever it stored (even `attach: 'none'`), because its stored triple was
82679
+ * ignored and one plain snapshot always shipped (operator ruling, 2026-10-01):
82680
+ * the migration keeps what the rule actually DID. Clamped to what the kind can
82681
+ * honour.
82682
+ */
82683
+ function resolveNcMediaImage(media, kind) {
82684
+ if (media.image !== void 0) return clampToKind(media.image, kind);
82685
+ if (kind === "sensor") return "clean";
82686
+ return clampToKind(legacyImageMode(media), kind);
82687
+ }
82688
+ /**
82689
+ * The stored shape of a media policy: `image` set, the legacy triple gone.
82690
+ * `showTriggerZone` survives only where it can be drawn — a zone trigger and a
82691
+ * mode other than `crop`/`none`; a legacy `zoneCrop` on a zone rule becomes it.
82692
+ * Every other field (gif, clip, rolls, speed, profile, linked cameras) is
82693
+ * carried through untouched. Pure; never throws.
82694
+ */
82695
+ function normalizeNcMediaPolicy(media, rule) {
82696
+ const image = resolveNcMediaImage(media, ruleKindOf(rule));
82697
+ const { attach: _attach, frame: _frame, zoneCrop, showTriggerZone, image: _image, ...rest } = media;
82698
+ const drawable = (showTriggerZone === true || media.image === void 0 && zoneCrop === true) && image !== "crop" && image !== "none" && ruleTriggerZoneIds(rule.conditions).length > 0;
82699
+ return {
82700
+ ...rest,
82701
+ image,
82702
+ ...drawable ? { showTriggerZone: true } : {}
82703
+ };
82704
+ }
82705
+ /**
82706
+ * Why a media policy cannot be SAVED on this rule, or null. Server-side and
82707
+ * editor alike: `showTriggerZone` on a rule whose trigger is not a zone, and a
82708
+ * mode the rule's kind cannot honour.
82709
+ */
82710
+ function ncMediaPolicyError(media, rule) {
82711
+ const kind = ruleKindOf(rule);
82712
+ if (media.image !== void 0) {
82713
+ const offered = imageModesForKind(kind);
82714
+ if (offered.length > 0 && !offered.includes(media.image)) return `media.image '${media.image}' is not available for a ${kind} rule (offered: ${offered.join(", ")})`;
82715
+ }
82716
+ if (media.showTriggerZone === true && ruleTriggerZoneIds(rule.conditions).length === 0) return "media.showTriggerZone needs a rule triggered by a zone (a zones condition or an occupancy zone)";
82717
+ return null;
82718
+ }
82203
82719
  var WEEKDAY_TO_DAY = {
82204
82720
  Sun: 0,
82205
82721
  Mon: 1,
@@ -85873,4 +86389,4 @@ function buildClipModelRegistry(entries) {
85873
86389
  /** The built-in catalog's registry. */
85874
86390
  var BUILTIN_CLIP_MODELS = buildClipModelRegistry(CLIP_IMAGE_MODELS);
85875
86391
  //#endregion
85876
- export { MediaFileKindEnum as $, array as $i, coreBlockIdFromAddonId as $n, readTimelapseGeneratedAt as $r, NcTemplateVarDescriptorSchema as $t, DeclaredDevices as A, viewerLinkBaseOf as Ai, TrackSideSchema as An, isEventOwnerType as Ar, NcAlarmSensorsInputSchema as At, FULL_IMAGE_BBOX as B, RECORD_MAX_DATA_BYTES as Bi, applyModeDelaysEdits as Bn, kebabToCamel as Br, NcRuleSchema as Bt, ClearTrackRelationResultSchema as C, systemEventFamilyProblems as Ci, TRACK_RELATIONS_DEFAULT_LIMIT as Cn, isAlertEpisodeOpen as Cr, NC_SNOOZE_MAX_MINUTES as Ct, DEFAULT_TIMELAPSE_PREVIEW_TEXT as D, templateCarriesSummary as Di, TrackPuritySchema as Dn, isDefaultAlarmProfileId as Dr, NC_TEMPLATE_VARS as Dt, DEFAULT_EVENT_COLOR as E, systemEventSummarySplitOf as Ei, TimelapseRuleSchema as En, isAudioClassName as Er, NC_TAXONOMY as Et, EVENT_DENSITY_BATCH_MAX as F, isSourceCap as Fi, alarmPanelCapability as Fn, isRootSuppliableStepId as Fr, NcLegacyRuleActionSequenceSchema as Ft, ListTrackRelationsResultSchema as G, defineRecordKinds as Gi, audioMetricsCapability as Gn, occupancyScope as Gr, NcSnoozeInputSchema as Gt, LABEL_SUPPLY_MACRO as H, createEvent as Hi, applySecureOnArmEdit as Hn, mayWriteToLocation as Hr, NcRuleUpdateInputSchema as Ht, EVENT_KIND_BY_CAP as I, DeviceType as Ii, alertEpisodeId as In, isScheduleActive as Ir, NcRuleActionSchema as It, MAX_BIRTH_DECISION_RECORDS as J, nodePin as Ji, buildViewerLink as Jn, pickFaceRescoreIntervalMinutes as Jr, NcStateSummarySectionIdSchema as Jt, LockStateSchema as K, hydrateSchema as Ki, audioModeOf as Kn, parseAlertEpisodePayload as Kr, NcSnoozeSchema as Kt, EVENT_OWNER_TYPES as L, errMsg as Li, alertEpisodeKind as Ln, isSystemDelivery as Lr, NcRuleActionsSchema as Lt, EMBEDDING_MODEL_FAILED as M, DEFAULT_FIRST_SIGHTING_FRESHNESS_MS as Mi, activateAlarmProfile as Mn, isLabelSupplyStepId as Mr, NcAlarmSettingsPatchSchema as Mt, EMBEDDING_REQUIREMENTS_FAILED as N, canonicalHash as Ni, addonWidgetsSourceCapability as Nn, isMediaOwnerType as Nr, NcConditionDescriptorSchema as Nt, DETECTION_MACRO_CLASSES as O, templateVarsFor as Oi, TrackRelationKindSchema as On, isDetectionMacroClass as Or, NcAlarmConfigSchema as Ot, EMBEDDING_REQUIREMENTS_UNAVAILABLE as P, evaluateSensorEdge as Pi, alarmDeviceSecureOnArm as Pn, isRetiredClearKey as Pr, NcConditionsSchema as Pt, MOTION_CLOSE_AFTER_MS as Q, _enum as Qi, consumableLowPercentOf as Qn, readMotionTriggeredBy as Qr, NcTemplatePreviewSchema as Qt, EXPORT_DENSE_MAX_RANGES as R, BaseAddon as Ri, alertEpisodePayload as Rn, isSystemEventSummaryRule as Rr, NcRuleInputSchema as Rt, ClearTrackRelationInputSchema as S, systemEventDeliveryProblems as Si, TIMELAPSE_DENSE_FLOOR_SEC as Sn, isAlarmControllableCap as Sr, NC_SENSOR_TRANSITION_KINDS as St, DEFAULT_DETAIL_CROP_CONVENTION as T, systemEventSummaryScheduleOf as Ti, TimelapseRulePatchSchema as Tn, isAppLinkBase as Tr, NC_TANK_SYSTEM_EVENT_KINDS as Tt, LabelAttributionSchema as U, customAction as Ui, armRemovalReconcile as Un, memoizePinnedFfmpeg as Ur, NcScheduleSchema as Ut, FailureCounters as V, RECORD_QUERY_MAX as Vi, applyNonBlockingEdit as Vn, linkedStepOf as Vr, NcRuleTargetSchema as Vt, ListTrackRelationsInputSchema as W, defineCustomActions as Wi, assertTimelapseCadences as Wn, notificationRulesCapability as Wr, NcSharedSequenceSchema as Wt, MAX_TRACK_PURITIES as X, sleep as Xi, classifyRetrainReview as Xn, plateGalleryCapability as Xr, NcTaxonomySchema as Xt, MAX_BIRTH_LATENCY_PROXY_MS as Y, normalizeNodeId as Yi, calendarEventLocalSpan as Yn, pipelineAnalyticsCapability as Yr, NcSystemEventKindSchema as Yt, MAX_TRACK_RELATIONS as Z, ZodObject as Zi, cloneAlarmSettings as Zn, readDeviceStateFrom as Zr, NcTemplatePreviewInputSchema as Zt, BIRTH_DECISION_DEFAULT_LIMIT as _, startMoverUnderClearance as _i, SCENE_RESET_RECAPTURES as _n, evictionPolicyOfLocation as _r, NC_CONSUMABLE_SYSTEM_EVENT_KINDS as _t, CLIP_EMBEDDING_STEP_ID as a, object as aa, resolvePoolMemoryPolicy as ai, RebuildObjectEmbeddingsRefusalSchema as an, deriveRecordingMode as ar, NC_ALARM_NOTIFY_FIELDS as at, BucketAccumulator as b, summarizeReview as bi, SetTrackPurityResultSchema as bn, gifDeriveSpeed as br, NC_GROUPING_MAX_SEC as bt, readClusterModelPinStrict as c, strictObject as ca, ruleAutoTriggersAlarm as ci, RetrainStatusSchema as cn, deviceRemovalHookCapability as cr, NC_AUDIO_CONFIRM_HITS_DEFAULT as ct, APPEARANCE_BLOCKS as d, tuple as da, ruleGroupingApplies as di, SCENE_DEFAULT_ANCHOR_THRESHOLD as dn, embeddingRefusalOf as dr, NC_CLIP_PRE_ROLL_DEFAULT_SEC as dt, boolean as ea, renameAlarmProfile as ei, OPS_LOG_DEFAULT_LIMIT as en, cosineSimilarity as er, MotionTriggeredBySchema as et, APPEARANCE_RESOLVES_AMBIGUITY_DEFAULT as f, union as fa, ruleKindOf as fi, SCENE_DEFAULT_CHECK_INTERVAL_SEC as fn, embeddingRequirementsFailedError as fr, NC_CLIP_RETENTION_MAX_SEC as ft, ArchivedDebugNoteSchema as g, servedTemplateVars as gi, SCENE_DIVERGED as gn, eventKindLabel as gr, NC_CONSUMABLE_LOW_PERCENT_DEFAULT as gt, AlarmArmModeSchema as h, sensorRaisedOf as hi, SCENE_DEFAULT_UNCOVERED_POLICY as hn, ensureAlarmProfiles as hr, NC_CONFIRM_DEFAULT_TIMEOUT_MS as ht, CLIP_TEXT_MODELS as i, number as ia, resolveModeNotifyPolicy as ii, RECORDING_SOURCE_CAMSTACK_ADDON as in, derivePostTriggeredAction as ir, NC_ALARM_DELAY_MAX_SEC as it, DetectionSourceSchema as j, zoneAnalyticsCapability as ji, TrackSourceSchema as jn, isKnownTemplateVar as jr, NcAlarmSensorsSchema as jt, DETECTION_PIPELINE_CAP_NAME as k, vectorDimFromBase64 as ki, TrackRelationSchema as kn, isEventKindLabelKey as kr, NcAlarmPostTriggeredActionSchema as kt, resolveClusterModelPin as l, string as la, ruleBelongsToAlarm as li, SCENE_CONFIRM_DEFAULT_MAX_IMAGE_PX as ln, embeddingEncoderCapability as lr, NC_AUDIO_CONFIRM_WINDOW_SEC_DEFAULT as lt, AUDIO_MACRO_LABELS as m, EventCategory as ma, secureActuationFor as mi, SCENE_DEFAULT_QUIET_SECONDS as mn, encodeVectorBase64 as mr, NC_CONFIRM_DEFAULT_MAX_IMAGE_PX as mt, DEFAULT_CLIP_MODEL as n, literal as na, resolveLocationMode as ni, PoolMemoryWatchdog as nn, deleteAlarmProfile as nr, NC_ALARM_DEFAULT_TRIGGERED_DURATION_SEC as nt, CLUSTER_MODEL_OWNER_ADDON_ID as o, partialRecord as oa, retrainRevisionConflictMessage as oi, RetrainDismissedSchema as on, describeSystemEventDeliveryProblem as or, NC_ALARM_SYSTEM_EVENT_KINDS as ot, ARCHIVED_DEBUG_NOTES_DEFAULT_LIMIT as p, unknown as pa, sceneMonitorCapability as pi, SCENE_DEFAULT_OBSERVATION_SPACING_SEC as pn, embeddingRequirementsUnavailableError as pr, NC_CONDITION_CATALOG as pt, MAX_ARCHIVED_DEBUG_NOTES as q, isDeviceScopedCap as qi, buildEventKindDescriptor as qn, parseProcStatus as qr, NcSnoozeSuppressedSchema as qt, CLIP_IMAGE_MODELS as r, looseObject as ra, resolveModeDelays as ri, RECORDING_EXPORT_MAX_READ_BYTES as rn, deriveDetailCropRect as rr, NC_ALARM_DELAY_FIELDS as rt, FACE_EMBEDDING_STEP_ID as s, record as sa, rootSupplyServes as si, RetrainOriginSchema as sn, describeSystemEventFamilyProblem as sr, NC_ALARM_TRIGGERED_MAX_SEC as st, BUILTIN_CLIP_MODELS as t, discriminatedUnion as ta, resolveClipSearchMinScore as ti, OpsLogEntrySchema as tn, createAlarmProfile as tr, NC_ALARM_DEFAULT_PROFILE_ID as tt, APPEARANCE_BIN_COUNT as u, templateLiteral as ua, ruleDeviceCompatCapQueries as ui, SCENE_CONFIRM_DEFAULT_TIMEOUT_MS as un, embeddingModelFailedError as ur, NC_CLIP_POST_ROLL_DEFAULT_SEC as ut, BaseDevice as v, storageOccupancyCapability as vi, SceneMonitorSchema as vn, faceGalleryCapability as vr, NC_DEFAULT_SNOOZE_MINUTES as vt, CoverStateSchema as w, systemEventFilterApplies as wi, TimelapseRuleInputSchema as wn, isAlertEpisodeSeverity as wr, NC_SYSTEM_EVENT_KIND_GROUP_SPECS as wt, COCO_TO_MACRO as x, syncActiveAlarmProfileSettings as xi, SetTrackRelationInputSchema as xn, gifFromMp4Args as xr, NC_GROUPING_MIN_SEC as xt, BirthDecisionRecordSchema as y, subKindsOf as yi, SetTrackPurityInputSchema as yn, failureContributionCapability as yr, NC_GROUPING_DEFAULT_SEC as yt, FIRST_LEVEL_MACRO_CLASSES as z, CamProfileSchema as zi, applyBlockingEdit as zn, isVectorIndexDimConflict as zr, NcRulePatchSchema as zt };
86392
+ export { MediaFileKindEnum as $, sleep as $i, coreBlockIdFromAddonId as $n, readDeviceStateFrom as $r, NcTemplateVarDescriptorSchema as $t, DeclaredDevices as A, templateCarriesSummary as Ai, TrackSideSchema as An, isEventOwnerType as Ar, NcAlarmSensorsInputSchema as At, FULL_IMAGE_BBOX as B, errMsg as Bi, applyModeDelaysEdits as Bn, kebabToCamel as Br, NcRuleSchema as Bt, ClearTrackRelationResultSchema as C, summarizeReview as Ci, TRACK_RELATIONS_DEFAULT_LIMIT as Cn, isAlertEpisodeOpen as Cr, NC_SNOOZE_MAX_MINUTES as Ct, DEFAULT_TIMELAPSE_PREVIEW_TEXT as D, systemEventFilterApplies as Di, TrackPuritySchema as Dn, isDefaultAlarmProfileId as Dr, NC_TEMPLATE_VARS as Dt, DEFAULT_EVENT_COLOR as E, systemEventFamilyProblems as Ei, TimelapseRuleSchema as En, isAudioClassName as Er, NC_TAXONOMY as Et, EVENT_DENSITY_BATCH_MAX as F, DEFAULT_FIRST_SIGHTING_FRESHNESS_MS as Fi, alarmPanelCapability as Fn, isRootSuppliableStepId as Fr, NcLegacyRuleActionSequenceSchema as Ft, ListTrackRelationsResultSchema as G, createEvent as Gi, audioMetricsCapability as Gn, normalizeNcMediaPolicy as Gr, NcSnoozeInputSchema as Gt, LABEL_SUPPLY_MACRO as H, CamProfileSchema as Hi, applySecureOnArmEdit as Hn, mayWriteToLocation as Hr, NcRuleUpdateInputSchema as Ht, EVENT_KIND_BY_CAP as I, canonicalHash as Ii, alertEpisodeId as In, isScheduleActive as Ir, NcRuleActionSchema as It, MAX_BIRTH_DECISION_RECORDS as J, defineRecordKinds as Ji, buildViewerLink as Jn, parseAlertEpisodePayload as Jr, NcStateSummarySectionIdSchema as Jt, LockStateSchema as K, customAction as Ki, audioModeOf as Kn, notificationRulesCapability as Kr, NcSnoozeSchema as Kt, EVENT_OWNER_TYPES as L, evaluateSensorEdge as Li, alertEpisodeKind as Ln, isSystemDelivery as Lr, NcRuleActionsSchema as Lt, EMBEDDING_MODEL_FAILED as M, vectorDimFromBase64 as Mi, activateAlarmProfile as Mn, isLabelSupplyStepId as Mr, NcAlarmSettingsPatchSchema as Mt, EMBEDDING_REQUIREMENTS_FAILED as N, viewerLinkBaseOf as Ni, addonWidgetsSourceCapability as Nn, isMediaOwnerType as Nr, NcConditionDescriptorSchema as Nt, DETECTION_MACRO_CLASSES as O, systemEventSummaryScheduleOf as Oi, TrackRelationKindSchema as On, isDetectionMacroClass as Or, NcAlarmConfigSchema as Ot, EMBEDDING_REQUIREMENTS_UNAVAILABLE as P, zoneAnalyticsCapability as Pi, alarmDeviceSecureOnArm as Pn, isRetiredClearKey as Pr, NcConditionsSchema as Pt, MOTION_CLOSE_AFTER_MS as Q, normalizeNodeId as Qi, consumableLowPercentOf as Qn, plateGalleryCapability as Qr, NcTemplatePreviewSchema as Qt, EXPORT_DENSE_MAX_RANGES as R, isSourceCap as Ri, alertEpisodePayload as Rn, isSystemEventSummaryRule as Rr, NcRuleInputSchema as Rt, ClearTrackRelationInputSchema as S, subKindsOf as Si, TIMELAPSE_DENSE_FLOOR_SEC as Sn, isAlarmControllableCap as Sr, NC_SENSOR_TRANSITION_KINDS as St, DEFAULT_DETAIL_CROP_CONVENTION as T, systemEventDeliveryProblems as Ti, TimelapseRulePatchSchema as Tn, isAppLinkBase as Tr, NC_TANK_SYSTEM_EVENT_KINDS as Tt, LabelAttributionSchema as U, RECORD_MAX_DATA_BYTES as Ui, armRemovalReconcile as Un, memoizePinnedFfmpeg as Ur, NcScheduleSchema as Ut, FailureCounters as V, BaseAddon as Vi, applyNonBlockingEdit as Vn, linkedStepOf as Vr, NcRuleTargetSchema as Vt, ListTrackRelationsInputSchema as W, RECORD_QUERY_MAX as Wi, assertTimelapseCadences as Wn, ncMediaPolicyError as Wr, NcSharedSequenceSchema as Wt, MAX_TRACK_PURITIES as X, isDeviceScopedCap as Xi, classifyRetrainReview as Xn, pickFaceRescoreIntervalMinutes as Xr, NcTaxonomySchema as Xt, MAX_BIRTH_LATENCY_PROXY_MS as Y, hydrateSchema as Yi, calendarEventLocalSpan as Yn, parseProcStatus as Yr, NcSystemEventKindSchema as Yt, MAX_TRACK_RELATIONS as Z, nodePin as Zi, cloneAlarmSettings as Zn, pipelineAnalyticsCapability as Zr, NcTemplatePreviewInputSchema as Zt, BIRTH_DECISION_DEFAULT_LIMIT as _, EventCategory as _a, secureActuationFor as _i, SCENE_RESET_RECAPTURES as _n, evictionPolicyOfLocation as _r, NC_CONSUMABLE_SYSTEM_EVENT_KINDS as _t, CLIP_EMBEDDING_STEP_ID as a, literal as aa, resolveModeDelays as ai, RebuildObjectEmbeddingsRefusalSchema as an, deriveRecordingMode as ar, NC_ALARM_NOTIFY_FIELDS as at, BucketAccumulator as b, startMoverUnderClearance as bi, SetTrackPurityResultSchema as bn, gifDeriveSpeed as br, NC_GROUPING_MAX_SEC as bt, readClusterModelPinStrict as c, object as ca, resolvePoolMemoryPolicy as ci, RetrainStatusSchema as cn, deviceRemovalHookCapability as cr, NC_AUDIO_CONFIRM_HITS_DEFAULT as ct, APPEARANCE_BLOCKS as d, strictObject as da, ruleAutoTriggersAlarm as di, SCENE_DEFAULT_ANCHOR_THRESHOLD as dn, embeddingRefusalOf as dr, NC_CLIP_PRE_ROLL_DEFAULT_SEC as dt, ZodObject as ea, readMotionTriggeredBy as ei, OPS_LOG_DEFAULT_LIMIT as en, cosineSimilarity as er, MotionTriggeredBySchema as et, APPEARANCE_RESOLVES_AMBIGUITY_DEFAULT as f, string as fa, ruleBelongsToAlarm as fi, SCENE_DEFAULT_CHECK_INTERVAL_SEC as fn, embeddingRequirementsFailedError as fr, NC_CLIP_RETENTION_MAX_SEC as ft, ArchivedDebugNoteSchema as g, unknown as ga, sceneMonitorCapability as gi, SCENE_DIVERGED as gn, eventKindLabel as gr, NC_CONSUMABLE_LOW_PERCENT_DEFAULT as gt, AlarmArmModeSchema as h, union as ha, ruleKindOf as hi, SCENE_DEFAULT_UNCOVERED_POLICY as hn, ensureAlarmProfiles as hr, NC_CONFIRM_DEFAULT_TIMEOUT_MS as ht, CLIP_TEXT_MODELS as i, discriminatedUnion as ia, resolveLocationMode as ii, RECORDING_SOURCE_CAMSTACK_ADDON as in, derivePostTriggeredAction as ir, NC_ALARM_DELAY_MAX_SEC as it, DetectionSourceSchema as j, templateVarsFor as ji, TrackSourceSchema as jn, isKnownTemplateVar as jr, NcAlarmSensorsSchema as jt, DETECTION_PIPELINE_CAP_NAME as k, systemEventSummarySplitOf as ki, TrackRelationSchema as kn, isEventKindLabelKey as kr, NcAlarmPostTriggeredActionSchema as kt, resolveClusterModelPin as l, partialRecord as la, retrainRevisionConflictMessage as li, SCENE_CONFIRM_DEFAULT_MAX_IMAGE_PX as ln, embeddingEncoderCapability as lr, NC_AUDIO_CONFIRM_WINDOW_SEC_DEFAULT as lt, AUDIO_MACRO_LABELS as m, tuple as ma, ruleGroupingApplies as mi, SCENE_DEFAULT_QUIET_SECONDS as mn, encodeVectorBase64 as mr, NC_CONFIRM_DEFAULT_MAX_IMAGE_PX as mt, DEFAULT_CLIP_MODEL as n, array as na, renameAlarmProfile as ni, PoolMemoryWatchdog as nn, deleteAlarmProfile as nr, NC_ALARM_DEFAULT_TRIGGERED_DURATION_SEC as nt, CLUSTER_MODEL_OWNER_ADDON_ID as o, looseObject as oa, resolveModeNotifyPolicy as oi, RetrainDismissedSchema as on, describeSystemEventDeliveryProblem as or, NC_ALARM_SYSTEM_EVENT_KINDS as ot, ARCHIVED_DEBUG_NOTES_DEFAULT_LIMIT as p, templateLiteral as pa, ruleDeviceCompatCapQueries as pi, SCENE_DEFAULT_OBSERVATION_SPACING_SEC as pn, embeddingRequirementsUnavailableError as pr, NC_CONDITION_CATALOG as pt, MAX_ARCHIVED_DEBUG_NOTES as q, defineCustomActions as qi, buildEventKindDescriptor as qn, occupancyScope as qr, NcSnoozeSuppressedSchema as qt, CLIP_IMAGE_MODELS as r, boolean as ra, resolveClipSearchMinScore as ri, RECORDING_EXPORT_MAX_READ_BYTES as rn, deriveDetailCropRect as rr, NC_ALARM_DELAY_FIELDS as rt, FACE_EMBEDDING_STEP_ID as s, number as sa, resolveNcMediaImage as si, RetrainOriginSchema as sn, describeSystemEventFamilyProblem as sr, NC_ALARM_TRIGGERED_MAX_SEC as st, BUILTIN_CLIP_MODELS as t, _enum as ta, readTimelapseGeneratedAt as ti, OpsLogEntrySchema as tn, createAlarmProfile as tr, NC_ALARM_DEFAULT_PROFILE_ID as tt, APPEARANCE_BIN_COUNT as u, record as ua, rootSupplyServes as ui, SCENE_CONFIRM_DEFAULT_TIMEOUT_MS as un, embeddingModelFailedError as ur, NC_CLIP_POST_ROLL_DEFAULT_SEC as ut, BaseDevice as v, sensorRaisedOf as vi, SceneMonitorSchema as vn, faceGalleryCapability as vr, NC_DEFAULT_SNOOZE_MINUTES as vt, CoverStateSchema as w, syncActiveAlarmProfileSettings as wi, TimelapseRuleInputSchema as wn, isAlertEpisodeSeverity as wr, NC_SYSTEM_EVENT_KIND_GROUP_SPECS as wt, COCO_TO_MACRO as x, storageOccupancyCapability as xi, SetTrackRelationInputSchema as xn, gifFromMp4Args as xr, NC_GROUPING_MIN_SEC as xt, BirthDecisionRecordSchema as y, servedTemplateVars as yi, SetTrackPurityInputSchema as yn, failureContributionCapability as yr, NC_GROUPING_DEFAULT_SEC as yt, FIRST_LEVEL_MACRO_CLASSES as z, DeviceType as zi, applyBlockingEdit as zn, isVectorIndexDimConflict as zr, NcRulePatchSchema as zt };