@camstack/addon-osd-manager 0.1.266 → 0.1.268

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 (19) hide show
  1. package/dist/{MotionZonesSettings-CUn3MAfu.mjs → MotionZonesSettings-Da16aeu1.mjs} +2 -2
  2. package/dist/{PrivacyMaskSettings-BoXbVS78.mjs → PrivacyMaskSettings-Cn7oHD35.mjs} +4 -4
  3. package/dist/{SceneMonitorEditor-x5r39vuf.mjs → SceneMonitorEditor-DUZEpHBf.mjs} +3 -3
  4. package/dist/_stub.js +1861 -1820
  5. package/dist/{_virtual_mf-localSharedImportMap___mfe_internal__addon_osd_manager_page-Bvl-Y6pM.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_osd_manager_page-pMeJvguf.mjs} +3 -3
  6. package/dist/_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-BGMAwVi8.mjs +26 -0
  7. package/dist/addon-osd-manager.css +1 -1
  8. package/dist/{hostInit-YScGtNRZ.mjs → hostInit-Ius2kGzx.mjs} +2 -2
  9. package/dist/index.js +208 -102
  10. package/dist/index.mjs +208 -102
  11. package/dist/{player-overlays-orU5XUga.mjs → player-overlays-6Y9IRVsJ.mjs} +1 -1
  12. package/dist/remoteEntry.js +1 -1
  13. package/dist/{responsive-D9kij-ZF.mjs → responsive-CRQUI1kX.mjs} +1 -1
  14. package/dist/{scene-monitor-copy-Cyj7I5Lz.mjs → scene-monitor-copy-Ng8lktvt.mjs} +1 -1
  15. package/dist/{square-DhHK6epE.mjs → square-C3jJtMZF.mjs} +1 -1
  16. package/dist/{trash-2-DXAqD6D8.mjs → trash-2-CNbeJ76B.mjs} +1 -1
  17. package/dist/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_osd_manager_page__remoteEntry_js-BQFwY4Fq.mjs → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_osd_manager_page__remoteEntry_js-CcfyBYDS.mjs} +1 -1
  18. package/package.json +1 -1
  19. package/dist/_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-BZubp_VZ.mjs +0 -26
@@ -36,7 +36,7 @@ async function r() {
36
36
  }
37
37
  },
38
38
  "@camstack/types": {
39
- version: "1.2.405",
39
+ version: "1.2.407",
40
40
  scope: "default",
41
41
  shareConfig: {
42
42
  singleton: !0,
@@ -81,7 +81,7 @@ async function r() {
81
81
  }
82
82
  },
83
83
  "@camstack/ui-library": {
84
- version: "1.2.320",
84
+ version: "1.2.322",
85
85
  scope: "default",
86
86
  shareConfig: {
87
87
  singleton: !0,
package/dist/index.js CHANGED
@@ -2,7 +2,7 @@ Object.defineProperties(exports, {
2
2
  __esModule: { value: true },
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
- //#region ../types/dist/event-category-fDPduoeC.mjs
5
+ //#region ../types/dist/event-category-Ceif8n-v.mjs
6
6
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
7
7
  EventCategory["SystemBoot"] = "system.boot";
8
8
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -474,6 +474,10 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
474
474
  * on the device detail page.
475
475
  */
476
476
  EventCategory["DoorbellOnPressed"] = "doorbell.onPressed";
477
+ /** Mirrors `runningStateCapability.events.onStarted`. */
478
+ EventCategory["RunningStarted"] = "running.started";
479
+ /** Mirrors `runningStateCapability.events.onFinished`. */
480
+ EventCategory["RunningFinished"] = "running.finished";
477
481
  /**
478
482
  * Cap event fired by every device that registers the `event-emitter`
479
483
  * capability. Mirrors `eventEmitterCapability.events.onEvent`. Carries
@@ -5433,7 +5437,7 @@ var ZodIssueCode = {
5433
5437
  var ZodFirstPartyTypeKind;
5434
5438
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5435
5439
  //#endregion
5436
- //#region ../types/dist/sleep-CHIEEJkY.mjs
5440
+ //#region ../types/dist/sleep-CYfIZzGv.mjs
5437
5441
  /**
5438
5442
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5439
5443
  * window to float samples (D455).
@@ -5772,7 +5776,7 @@ Object.fromEntries([
5772
5776
  * `hydrateSchema` to skip the `value` injection for structural-only fields.
5773
5777
  */
5774
5778
  function isValuelessField(field) {
5775
- return field.type === "separator" || field.type === "info" || field.type === "qr-code" || field.type === "button" || field.type === "object-array" || field.type === "widget" || field.type === "addon-action-button" || field.type === "device-action-button";
5779
+ return field.type === "separator" || field.type === "info" || field.type === "qr-code" || field.type === "button" || field.type === "object-array" || field.type === "widget" || field.type === "addon-action-button" || field.type === "device-action-button" || field.type === "account-sign-in" || field.type === "secret-presence";
5776
5780
  }
5777
5781
  function hydrateSchema(schema, values, options = {}) {
5778
5782
  return {
@@ -8733,7 +8737,7 @@ var DeviceRole = /* @__PURE__ */ function(DeviceRole) {
8733
8737
  return DeviceRole;
8734
8738
  }({});
8735
8739
  //#endregion
8736
- //#region ../types/dist/composition-CB6PMT9p.mjs
8740
+ //#region ../types/dist/composition-BJ8iAZb3.mjs
8737
8741
  /**
8738
8742
  * The ffmpeg build every CamStack node downloads, per platform and arch.
8739
8743
  *
@@ -8793,7 +8797,7 @@ portable("linux64"), portable("linuxarm64"), portable("macarm64"), portable("mac
8793
8797
  * ONE table for everyone who asks "is this device HIGH?": the
8794
8798
  * recorder's `RecordingTriggers.sensorDeviceIds` trigger, the post-analysis
8795
8799
  * sensor markers, the orchestrator's camera-sensors bridge and
8796
- * the sources of a composite doorbell (`doorbellFeatureSources`, D671).
8800
+ * the sources of a pulse (`compilePulseOverride`, D936).
8797
8801
  * A second copy would diverge at the first cap added, and the symptom — "the
8798
8802
  * sensor rings the doorbell but does not record" — is exactly D62.
8799
8803
  *
@@ -9034,6 +9038,20 @@ var table = {
9034
9038
  apply: () => {
9035
9039
  throw new ExpressionEvalError("count: stateful evaluation context is required");
9036
9040
  }
9041
+ },
9042
+ dwell: {
9043
+ minArgs: 3,
9044
+ maxArgs: 3,
9045
+ apply: () => {
9046
+ throw new ExpressionEvalError("dwell: stateful evaluation context is required");
9047
+ }
9048
+ },
9049
+ latchedAt: {
9050
+ minArgs: 1,
9051
+ maxArgs: 1,
9052
+ apply: () => {
9053
+ throw new ExpressionEvalError("latchedAt: stateful evaluation context is required");
9054
+ }
9037
9055
  }
9038
9056
  };
9039
9057
  Object.freeze(Object.assign(Object.create(null), table));
@@ -15894,7 +15912,15 @@ Object.freeze({
15894
15912
  kind: "fixed",
15895
15913
  result: ["number", "null"]
15896
15914
  },
15897
- count: NUMBER
15915
+ count: NUMBER,
15916
+ dwell: {
15917
+ kind: "fixed",
15918
+ result: ["boolean", "null"]
15919
+ },
15920
+ latchedAt: {
15921
+ kind: "fixed",
15922
+ result: ["number", "null"]
15923
+ }
15898
15924
  });
15899
15925
  `${COMPOSED_DEVICE_STABLE_ID_PREFIX}`;
15900
15926
  /**
@@ -42133,9 +42159,6 @@ var NcSystemEventKindSchema = _enum([
42133
42159
  "device-battery-normal",
42134
42160
  "device-consumable-low",
42135
42161
  "device-consumable-normal",
42136
- "device-tank-low",
42137
- "device-tank-full",
42138
- "device-tank-normal",
42139
42162
  "stream-online",
42140
42163
  "stream-offline",
42141
42164
  "node-online",
@@ -42182,13 +42205,14 @@ var NcSystemEventKindSchema = _enum([
42182
42205
  "camera-enabled"
42183
42206
  ]);
42184
42207
  /** The legacy tail of {@link NcSystemEventKindSchema} — see its docblock. */
42185
- var NC_LEGACY_SYSTEM_EVENT_KINDS = new Set([
42208
+ var NC_LEGACY_SYSTEM_EVENT_KINDS = [
42186
42209
  "camera-online",
42187
42210
  "camera-offline",
42188
42211
  "camera-disabled",
42189
42212
  "camera-enabled"
42190
- ]);
42191
- NcSystemEventKindSchema.options.filter((kind) => !NC_LEGACY_SYSTEM_EVENT_KINDS.has(kind));
42213
+ ];
42214
+ var NC_LEGACY_SYSTEM_EVENT_KIND_SET = new Set(NC_LEGACY_SYSTEM_EVENT_KINDS);
42215
+ NcSystemEventKindSchema.options.filter((kind) => !NC_LEGACY_SYSTEM_EVENT_KIND_SET.has(kind));
42192
42216
  /**
42193
42217
  * The panel's transitions, as ONE list.
42194
42218
  *
@@ -43307,18 +43331,11 @@ var NcRuleSchema = NcRuleInputSchema.extend({
43307
43331
  */
43308
43332
  disabledTargetIds: array(string()).default([])
43309
43333
  });
43310
- /**
43311
- * The state-summary SECTIONS (D647 / D698 / D708): the D637 kind groups that
43312
- * report a still-true state. `addons` is the crash-looped addons only and
43313
- * `addon-updates` the addons that are behind (D708 split them). `backups-exports` and `alarm` are not sections — a completed
43314
- * job is not an open state, and the alarm stays instant.
43315
- */
43316
43334
  var NcStateSummarySectionIdSchema = _enum([
43317
43335
  "device-state",
43318
43336
  "streams",
43319
43337
  "battery",
43320
43338
  "consumables",
43321
- "tanks",
43322
43339
  "detection-blind",
43323
43340
  "nodes",
43324
43341
  "addons",
@@ -43699,18 +43716,6 @@ var NC_CONDITION_CATALOG = [
43699
43716
  value: "device-consumable-normal",
43700
43717
  label: "Consumable replaced"
43701
43718
  },
43702
- {
43703
- value: "device-tank-low",
43704
- label: "Tank low (water, detergent)"
43705
- },
43706
- {
43707
- value: "device-tank-full",
43708
- label: "Tank full (dirty water, dust)"
43709
- },
43710
- {
43711
- value: "device-tank-normal",
43712
- label: "Tank back to normal"
43713
- },
43714
43719
  {
43715
43720
  value: "export-completed",
43716
43721
  label: "Export completed"
@@ -54286,7 +54291,8 @@ var BatteryStatusSchema = object({
54286
54291
  */
54287
54292
  binary: boolean().optional()
54288
54293
  });
54289
- DeviceType.Camera, DeviceType.Sensor, DeviceType.Button, DeviceType.Switch, DeviceType.PetFeeder, DeviceType.Container, DeviceType.Thermostat, method(object({
54294
+ DeviceType.Camera, DeviceType.Sensor, DeviceType.Button, DeviceType.Switch, DeviceType.PetFeeder, DeviceType.Container, DeviceType.Thermostat;
54295
+ method(object({
54290
54296
  deviceId: number(),
54291
54297
  /** Bound on the wait. Sensible range 3000–10000ms. */
54292
54298
  timeoutMs: number().int().min(500).max(3e4).default(8e3)
@@ -54995,6 +55001,7 @@ var ConsumablesStatusSchema = object({
54995
55001
  })),
54996
55002
  lastChangedAt: number()
54997
55003
  });
55004
+ Object.values(DeviceType), [...ConsumableRemainingUnitSchema.options], [...ConsumableStatusSchema.options], [...ConsumableKindSchema.options], [...ConsumableFormSchema.options];
54998
55005
  Object.values(DeviceType), method(object({
54999
55006
  deviceId: number().int().nonnegative(),
55000
55007
  key: string().min(1)
@@ -55466,6 +55473,7 @@ DeviceType.Dishwasher, method(object({
55466
55473
  kind: "mutation",
55467
55474
  auth: "protected"
55468
55475
  }), method(object({ deviceId: DeviceIdSchema }), DishwasherOptionsSchema, { auth: "protected" });
55476
+ DeviceType.Camera;
55469
55477
  object({
55470
55478
  /** Ms epoch of the last press. null = never observed since this provider started. */
55471
55479
  lastPressedAt: number().nullable(),
@@ -57258,6 +57266,7 @@ authKey: string().optional() }), object({
57258
57266
  /** Human-readable error when `ok: false`. */
57259
57267
  error: string().optional()
57260
57268
  }), { kind: "mutation" });
57269
+ DeviceType.Camera;
57261
57270
  object({
57262
57271
  detected: boolean(),
57263
57272
  /** Ms epoch of the last detected-true observation. Null if never detected. */
@@ -59383,6 +59392,24 @@ DeviceType.Camera, method(object({ deviceId: number() }), PtzAutotrackStatusSche
59383
59392
  deviceId: number(),
59384
59393
  status: PtzAutotrackStatusSchema
59385
59394
  });
59395
+ var RunningStateSourceSchema = _enum(["native", "assigned"]);
59396
+ object({
59397
+ /** null = unknown — never coerced to false (D393). */
59398
+ running: boolean().nullable(),
59399
+ /** Epoch ms the current boolean began; null while `running` is null. */
59400
+ since: number().nullable(),
59401
+ source: RunningStateSourceSchema,
59402
+ phase: string().nullable(),
59403
+ /** null until a reading has been published (D393). */
59404
+ lastFetchedAt: number().nullable()
59405
+ });
59406
+ object({
59407
+ deviceId: number(),
59408
+ since: number().nullable(),
59409
+ phase: string().nullable()
59410
+ });
59411
+ Object.values(DeviceType);
59412
+ DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.MediaPlayer, DeviceType.WaterHeater, DeviceType.Humidifier, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.PetFeeder;
59386
59413
  DeviceType.Camera, DeviceType.Sensor, DeviceType.Switch, method(object({ deviceId: number().int().nonnegative() }), object({ success: literal(true) }), {
59387
59414
  kind: "mutation",
59388
59415
  auth: "admin"
@@ -70993,6 +71020,13 @@ Object.freeze({
70993
71020
  access: "create",
70994
71021
  role: "admin"
70995
71022
  },
71023
+ "runningState.getStatus": {
71024
+ capName: "running-state",
71025
+ capScope: "device",
71026
+ addonId: null,
71027
+ access: "view",
71028
+ role: "viewer"
71029
+ },
70996
71030
  "sceneMonitor.captureReference": {
70997
71031
  capName: "scene-monitor",
70998
71032
  capScope: "device",
@@ -75707,6 +75741,32 @@ var APPLIANCE_CAP_VOCABULARY = {
75707
75741
  }],
75708
75742
  events: { onSent: { notOperatorFacing: "a delivery receipt of a send this system made — not a fact about the world" } }
75709
75743
  },
75744
+ "running-state": {
75745
+ scope: "device",
75746
+ noun: t("Running", "In funzione"),
75747
+ state: [{
75748
+ kind: "boolean",
75749
+ field: "running",
75750
+ label: t("Running", "In funzione"),
75751
+ whenTrue: t("When {device} starts", "Quando {device} inizia"),
75752
+ whenFalse: t("When {device} finishes", "Quando {device} finisce"),
75753
+ icon: "play"
75754
+ }],
75755
+ events: {
75756
+ onStarted: {
75757
+ category: EventCategory.RunningStarted,
75758
+ label: t("Started running", "Ha iniziato a funzionare"),
75759
+ phrase: t("When {device} starts running", "Quando {device} inizia a funzionare"),
75760
+ icon: "play"
75761
+ },
75762
+ onFinished: {
75763
+ category: EventCategory.RunningFinished,
75764
+ label: t("Finished", "Ha finito"),
75765
+ phrase: t("When {device} finishes", "Quando {device} finisce"),
75766
+ icon: "square"
75767
+ }
75768
+ }
75769
+ },
75710
75770
  update: {
75711
75771
  scope: "device",
75712
75772
  noun: t("Firmware update", "Aggiornamento firmware"),
@@ -79247,6 +79307,11 @@ Object.freeze({
79247
79307
  form: "single",
79248
79308
  optional: true
79249
79309
  }],
79310
+ "runningState.getStatus": [{
79311
+ name: "deviceId",
79312
+ form: "single",
79313
+ optional: false
79314
+ }],
79250
79315
  "sceneMonitor.captureReference": [{
79251
79316
  name: "deviceId",
79252
79317
  form: "single",
@@ -79745,6 +79810,96 @@ Object.freeze({
79745
79810
  "smtp-provider": "email"
79746
79811
  });
79747
79812
  DeviceType.Camera;
79813
+ DeviceType.Camera, DeviceType.Sensor, DeviceType.Button, DeviceType.Switch, DeviceType.PetFeeder, DeviceType.Container, DeviceType.Thermostat, DeviceType.Camera, DeviceType.Hub, DeviceType.Light, DeviceType.Siren, DeviceType.Switch, DeviceType.Sensor, DeviceType.Thermostat, DeviceType.Climate, DeviceType.Button, DeviceType.EventEmitter, DeviceType.Update, DeviceType.Generic, DeviceType.Notifier, DeviceType.Script, DeviceType.Automation, DeviceType.Lock, DeviceType.Cover, DeviceType.Valve, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.Fan, DeviceType.MediaPlayer, DeviceType.AlarmPanel, DeviceType.Control, DeviceType.Presence, DeviceType.Weather, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.Container, DeviceType.Image, DeviceType.PetFeeder, DeviceType.Dishwasher, DeviceType.Camera, DeviceType.Camera, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.MediaPlayer, DeviceType.WaterHeater, DeviceType.Humidifier, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.PetFeeder;
79814
+ /**
79815
+ * A saved Customize assignment (D936). The schema is the type: callers use
79816
+ * `z.infer`, they do not restate the shape.
79817
+ */
79818
+ var OverrideSourceSchema = object({
79819
+ addonId: string().min(1),
79820
+ stableId: string().min(1),
79821
+ cap: string().min(1),
79822
+ fieldPath: string().min(1)
79823
+ });
79824
+ var CustomizeTransformDraftSchema = discriminatedUnion("kind", [
79825
+ object({ kind: literal("identity") }),
79826
+ object({ kind: literal("invert") }),
79827
+ object({
79828
+ kind: literal("threshold"),
79829
+ comparison: _enum(["gte", "lte"]),
79830
+ threshold: number(),
79831
+ startDwellMs: number().nonnegative(),
79832
+ stopDwellMs: number().nonnegative()
79833
+ }),
79834
+ object({
79835
+ kind: literal("linear"),
79836
+ scale: number(),
79837
+ offset: number(),
79838
+ clampMin: number().optional(),
79839
+ clampMax: number().optional()
79840
+ }),
79841
+ object({
79842
+ kind: literal("enum-map"),
79843
+ mapping: record(string(), string().nullable())
79844
+ }),
79845
+ object({ kind: literal("number") })
79846
+ ]);
79847
+ var ScalarOverrideDraftSchema = object({
79848
+ kind: literal("scalar"),
79849
+ cap: string().min(1),
79850
+ targetId: string().min(1),
79851
+ source: OverrideSourceSchema,
79852
+ transform: CustomizeTransformDraftSchema
79853
+ });
79854
+ var KeyedArrayOverrideDraftSchema = object({
79855
+ kind: literal("keyedArray"),
79856
+ cap: string().min(1),
79857
+ targetId: string().min(1),
79858
+ key: string().min(1),
79859
+ label: string().min(1),
79860
+ fieldPath: string().min(1),
79861
+ source: OverrideSourceSchema,
79862
+ transform: CustomizeTransformDraftSchema
79863
+ });
79864
+ var PulseOverrideDraftSchema = object({
79865
+ kind: literal("pulse"),
79866
+ cap: string().min(1),
79867
+ targetId: string().min(1),
79868
+ enabled: boolean(),
79869
+ debounceMs: number().nonnegative(),
79870
+ sources: array(OverrideSourceSchema).min(1)
79871
+ });
79872
+ var SpanSourceDraftSchema = OverrideSourceSchema.extend({ mode: _enum([
79873
+ "in-addition",
79874
+ "confirm",
79875
+ "replace"
79876
+ ]).optional() });
79877
+ discriminatedUnion("kind", [
79878
+ ScalarOverrideDraftSchema,
79879
+ KeyedArrayOverrideDraftSchema,
79880
+ PulseOverrideDraftSchema,
79881
+ object({
79882
+ kind: literal("span"),
79883
+ cap: string().min(1),
79884
+ targetId: string().min(1),
79885
+ timeoutMs: number().nonnegative(),
79886
+ cooldownMs: number().nonnegative().optional(),
79887
+ sources: array(SpanSourceDraftSchema)
79888
+ })
79889
+ ]);
79890
+ object({
79891
+ targetId: string().min(1),
79892
+ configured: boolean(),
79893
+ source: _enum(["native", "assigned"]),
79894
+ state: _enum([
79895
+ "active",
79896
+ "stale",
79897
+ "released",
79898
+ "unavailable"
79899
+ ]),
79900
+ reason: string().nullable()
79901
+ });
79902
+ String.raw`rose\(active(\d+), changed(\d+), (\d+(?:\.\d+)?)\)`;
79748
79903
  var G711_SCALE_CORRECTION_DB = {
79749
79904
  PCMU: 20 * Math.log10(4),
79750
79905
  PCMA: 20 * Math.log10(8)
@@ -79797,40 +79952,7 @@ var NC_AUDIO_DEFAULTS = {
79797
79952
  samplingSeconds: 10
79798
79953
  };
79799
79954
  new Set(["devices", "classes"]);
79800
- /**
79801
- * WHICH narrowing filter speaks about WHICH system-event kind — one predicate,
79802
- * consumed by the rule ENGINE and by every rule EDITOR.
79803
- *
79804
- * ── The failure this file exists for ───────────────────────────────────────
79805
- * `NcSystemEventConditionSchema` carries four optional narrowing lists
79806
- * (`deviceIds`, `deviceTypes`, `nodeIds`, `packageNames`) beside a required
79807
- * `kinds` gate. They are not four filters over one vocabulary: each belongs to
79808
- * a FAMILY of kinds and is meaningless outside it. A node going away has no
79809
- * device type; a completed export has no package; `stream-offline` deliberately
79810
- * carries no device type at all (a stream belongs to a camera by construction).
79811
- *
79812
- * The engine applied all four to every kind, so a filter from one family failed
79813
- * a kind from another family CLOSED. The operator's live rule "Eventi di
79814
- * sistema" selected eleven kinds and set `deviceTypes: ['camera']` — the only
79815
- * way to say "only my cameras" about the two liveness kinds — and NINE of the
79816
- * eleven silently stopped being deliverable. Four days of history contained
79817
- * `device-online` and `device-offline` and nothing else, across a window in
79818
- * which agents were restarted and addons were updated.
79819
- *
79820
- * Both editors already computed this scoping, to decide which filter boxes to
79821
- * render; the cap's own docblock already promised it ("Narrow a `device-*` kind
79822
- * to these device TYPES"). Only the engine disagreed, and it disagreed in the
79823
- * destructive direction. So the rule is stated ONCE, here, and the engine and
79824
- * the editors are readers of it rather than three independent authors.
79825
- *
79826
- * ── The direction ─────────────────────────────────────────────────────────
79827
- * Out of family ⇒ the filter is IGNORED, never fail-closed. An editor that
79828
- * hides a box has already told the operator this filter does not speak about
79829
- * these kinds, so honouring it as an exclusion contradicts the only
79830
- * explanation the operator was ever given. Inside its family the filter still
79831
- * narrows, and still fails CLOSED on a subject that cannot produce the identity
79832
- * it tests (a device the mirror cannot name is not evidence of a camera).
79833
- */
79955
+ new Set(NC_LEGACY_SYSTEM_EVENT_KINDS);
79834
79956
  /**
79835
79957
  * Every filter, for the callers that must cover all of them (guards, tests).
79836
79958
  *
@@ -79856,9 +79978,6 @@ new Map(Object.entries({
79856
79978
  "device-battery-normal": "device-events",
79857
79979
  "device-consumable-low": "device-events",
79858
79980
  "device-consumable-normal": "device-events",
79859
- "device-tank-low": "device-events",
79860
- "device-tank-full": "device-events",
79861
- "device-tank-normal": "device-events",
79862
79981
  "stream-online": "device-events",
79863
79982
  "stream-offline": "device-events",
79864
79983
  "detection-blind": "device-events",
@@ -79935,16 +80054,6 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
79935
80054
  label: "Consumables",
79936
80055
  kinds: ["device-consumable-low", "device-consumable-normal"]
79937
80056
  },
79938
- {
79939
- id: "tanks",
79940
- family: "device-events",
79941
- label: "Tanks",
79942
- kinds: [
79943
- "device-tank-low",
79944
- "device-tank-full",
79945
- "device-tank-normal"
79946
- ]
79947
- },
79948
80057
  {
79949
80058
  id: "detection-blind",
79950
80059
  family: "device-events",
@@ -80182,11 +80291,6 @@ var RULE_BODY_ONLY = ["body"];
80182
80291
  var RULE_TEXT = ["title", "body"];
80183
80292
  var BATTERY = ["device-battery-low", "device-battery-normal"];
80184
80293
  var CONSUMABLE = ["device-consumable-low", "device-consumable-normal"];
80185
- var TANK = [
80186
- "device-tank-low",
80187
- "device-tank-full",
80188
- "device-tank-normal"
80189
- ];
80190
80294
  var ALERT_EPISODE = [
80191
80295
  "alert-critical",
80192
80296
  "alert-error",
@@ -80218,7 +80322,6 @@ var DEVICE_EVENTS = [
80218
80322
  "device-enabled",
80219
80323
  ...BATTERY,
80220
80324
  ...CONSUMABLE,
80221
- ...TANK,
80222
80325
  "stream-online",
80223
80326
  "stream-offline",
80224
80327
  "detection-blind",
@@ -80264,12 +80367,6 @@ var STATE_SUMMARY_SECTION_VARS = [
80264
80367
  example: "Robot — filter 10 %",
80265
80368
  kinds: CONSUMABLE
80266
80369
  },
80267
- {
80268
- name: "summaryTanks",
80269
- label: "Summary: tanks",
80270
- example: "Robot — clean water low",
80271
- kinds: TANK
80272
- },
80273
80370
  {
80274
80371
  name: "summaryDetection",
80275
80372
  label: "Summary: cameras detecting nothing",
@@ -80385,8 +80482,7 @@ var STATE_SUMMARY_VARS = [
80385
80482
  ([...RULE_TEXT], [...COMBINED_ALARM]),
80386
80483
  ([...RULE_TEXT], [...DEVICE_EVENTS]),
80387
80484
  ([...RULE_TEXT], [...BATTERY, ...CONSUMABLE]),
80388
- ([...RULE_TEXT], [...CONSUMABLE, ...TANK]),
80389
- ([...RULE_TEXT], [...TANK]),
80485
+ ([...RULE_TEXT], [...CONSUMABLE]),
80390
80486
  [...RULE_TEXT],
80391
80487
  ([...RULE_TEXT], [...UPDATES, ...ALERT_EPISODE]),
80392
80488
  ([...RULE_TEXT], [...UPDATES, ...ALERT_EPISODE]),
@@ -80490,15 +80586,6 @@ new Map([
80490
80586
  snapshotLabel: "Consumables low now",
80491
80587
  snapshotSection: "consumables"
80492
80588
  },
80493
- {
80494
- id: "tanks",
80495
- family: "device-events",
80496
- label: "Tanks (low or full / back to normal)",
80497
- bad: ["device-tank-low", "device-tank-full"],
80498
- recovery: ["device-tank-normal"],
80499
- snapshotLabel: "Tanks low or full now",
80500
- snapshotSection: "tanks"
80501
- },
80502
80589
  {
80503
80590
  id: "motion-noise",
80504
80591
  family: "device-events",
@@ -83502,6 +83589,25 @@ var CAP_STATE_LEAVES = Object.freeze({
83502
83589
  "path": "reason",
83503
83590
  "valueType": "string"
83504
83591
  }],
83592
+ "running-state": [
83593
+ {
83594
+ "path": "running",
83595
+ "valueType": "boolean"
83596
+ },
83597
+ {
83598
+ "path": "since",
83599
+ "valueType": "number"
83600
+ },
83601
+ {
83602
+ "path": "source",
83603
+ "valueType": "enum",
83604
+ "enumValues": ["native", "assigned"]
83605
+ },
83606
+ {
83607
+ "path": "phase",
83608
+ "valueType": "string"
83609
+ }
83610
+ ],
83505
83611
  "script-runner": [
83506
83612
  {
83507
83613
  "path": "isRunning",