@camstack/addon-osd-manager 0.1.265 → 0.1.267

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-C6ZSgaLA.mjs → MotionZonesSettings-3OswGeMl.mjs} +2 -2
  2. package/dist/{PrivacyMaskSettings-CiS1e2Pg.mjs → PrivacyMaskSettings-CxN7tOH_.mjs} +4 -4
  3. package/dist/{SceneMonitorEditor-s0ud6RTg.mjs → SceneMonitorEditor-l9nWTYyI.mjs} +3 -3
  4. package/dist/_stub.js +1753 -1727
  5. package/dist/{_virtual_mf-localSharedImportMap___mfe_internal__addon_osd_manager_page-DaixXuTN.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_osd_manager_page-DXtR0Eje.mjs} +3 -3
  6. package/dist/_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-BbmRj6OR.mjs +26 -0
  7. package/dist/addon-osd-manager.css +1 -1
  8. package/dist/{hostInit-DZBDeleW.mjs → hostInit-DtrBgAfd.mjs} +2 -2
  9. package/dist/index.js +202 -107
  10. package/dist/index.mjs +202 -107
  11. package/dist/{player-overlays-DiGsMCGG.mjs → player-overlays-DeO4qjxv.mjs} +1 -1
  12. package/dist/remoteEntry.js +1 -1
  13. package/dist/{responsive-D6dYIr_q.mjs → responsive-BiymurY0.mjs} +1 -1
  14. package/dist/{scene-monitor-copy-3SZbwzRl.mjs → scene-monitor-copy-CXLDSWeP.mjs} +1 -1
  15. package/dist/{square-Cda77PD-.mjs → square-Vgi9aM6a.mjs} +1 -1
  16. package/dist/{trash-2-DMyeZCpw.mjs → trash-2-Ccc91Gq3.mjs} +1 -1
  17. package/dist/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_osd_manager_page__remoteEntry_js-CneSXrJN.mjs → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_osd_manager_page__remoteEntry_js-BYRSI4Gv.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-aj1Biv3C.mjs +0 -26
@@ -36,7 +36,7 @@ async function r() {
36
36
  }
37
37
  },
38
38
  "@camstack/types": {
39
- version: "1.2.404",
39
+ version: "1.2.406",
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.319",
84
+ version: "1.2.321",
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-xz-ud5EQ.mjs
8737
8741
  /**
8738
8742
  * The ffmpeg build every CamStack node downloads, per platform and arch.
8739
8743
  *
@@ -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"
@@ -45223,6 +45228,18 @@ Object.freeze({
45223
45228
  reason: "camera sensor mappings not loaded"
45224
45229
  });
45225
45230
  /**
45231
+ * What the vision model must answer before a package event is emitted
45232
+ * when a packages rule has "Confirm with the LLM" on.
45233
+ *
45234
+ * `package` is the verdict. `confidence` is 0..1. `reason` is the model's
45235
+ * one-line explanation, stored on the event so a drop is not silent.
45236
+ */
45237
+ var PackageLlmVerdictSchema = object({
45238
+ package: boolean(),
45239
+ confidence: number().min(0).max(1),
45240
+ reason: string().min(1)
45241
+ });
45242
+ /**
45226
45243
  * A model choice has a SCOPE, and a scope change has a workflow.
45227
45244
  *
45228
45245
  * ## The two scopes
@@ -46159,6 +46176,21 @@ var ObjectEventSchema = object({
46159
46176
  * pick-up written before D684 — UNKNOWN, never 0 and never `timestamp`.
46160
46177
  */
46161
46178
  observedAt: number().optional(),
46179
+ /**
46180
+ * The delivery was emitted without a vision-model yes (D931).
46181
+ *
46182
+ * Set only when the packages rule asked for an LLM confirm and the model
46183
+ * was unreachable, timed out, or answered something that did not parse.
46184
+ * A notification reads it so it can say "possible" instead of a definite
46185
+ * delivery. Absent on every other row, and on a confirm that said yes.
46186
+ */
46187
+ packagePossible: boolean().optional(),
46188
+ /**
46189
+ * The vision model's verdict, when a packages rule asked for one and the
46190
+ * model answered the schema (D931). A "no" never becomes a row — the
46191
+ * detector drops it and logs the reason. Present on a yes.
46192
+ */
46193
+ packageLlmVerdict: PackageLlmVerdictSchema.optional(),
46162
46194
  /** The parent track's key-event importance [0,1], propagated to every object
46163
46195
  * event of the track (so an event row can be sorted by importance without a
46164
46196
  * track join). Absent on legacy rows / before the track was scored. */
@@ -48366,11 +48398,18 @@ var KeptReasonSchema = _enum(["custom-pin"]);
48366
48398
  * Where a choice's latency came from (D791): this node's own benchmark
48367
48399
  * result, or the hardware-class table. Measured on the node beats the table.
48368
48400
  */
48369
- var LatencySourceSchema = discriminatedUnion("kind", [object({ kind: literal("table") }), object({
48370
- kind: literal("node-benchmark"),
48371
- resultId: string(),
48372
- measuredAtMs: number()
48373
- })]);
48401
+ var LatencySourceSchema = discriminatedUnion("kind", [
48402
+ object({ kind: literal("table") }),
48403
+ object({
48404
+ kind: literal("node-benchmark"),
48405
+ resultId: string(),
48406
+ measuredAtMs: number()
48407
+ }),
48408
+ object({
48409
+ kind: literal("estimated"),
48410
+ estimatedFrom: HardwareClassIdSchema
48411
+ })
48412
+ ]);
48374
48413
  var DeviceModelChoiceSchema = object({
48375
48414
  modelId: string(),
48376
48415
  p50Ms: number(),
@@ -48378,6 +48417,11 @@ var DeviceModelChoiceSchema = object({
48378
48417
  measured: boolean(),
48379
48418
  /** Absent on a plan from before D791 — read as the table. */
48380
48419
  source: LatencySourceSchema.optional(),
48420
+ /**
48421
+ * The measured class this latency was scaled from (D930). Absent when the
48422
+ * cell is the table or a node benchmark.
48423
+ */
48424
+ estimatedFrom: HardwareClassIdSchema.optional(),
48381
48425
  /** Parallel sessions at the camera rate with the headroom kept free: ⌊fps × (1 − headroom) / camera fps⌋. */
48382
48426
  capacitySessions: number(),
48383
48427
  personRecall: number()
@@ -58669,6 +58713,30 @@ includeCrops: boolean().optional() }).optional(), array(VehicleSchema).readonly(
58669
58713
  kind: "mutation",
58670
58714
  auth: "admin"
58671
58715
  });
58716
+ var CORE_ULTRA_265K_IGPU_CLOCK_MHZ = 2e3;
58717
+ var positiveOrNull = number().nullable().transform((value) => value !== null && Number.isFinite(value) && value > 0 ? value : null);
58718
+ var textOrNull = string().nullable().transform((value) => value !== null && value.trim() !== "" ? value : null);
58719
+ var PrecisionGopsSchema = object({
58720
+ int8: positiveOrNull,
58721
+ fp16: positiveOrNull
58722
+ });
58723
+ /** What one accelerator device reported. Every failed query is null. */
58724
+ var AcceleratorComputeSchema = object({
58725
+ deviceKey: string(),
58726
+ fullDeviceName: textOrNull,
58727
+ executionUnits: positiveOrNull,
58728
+ clockMHz: positiveOrNull,
58729
+ gops: PrecisionGopsSchema.nullable(),
58730
+ architecture: textOrNull,
58731
+ npuName: textOrNull,
58732
+ tops: positiveOrNull,
58733
+ vendor: textOrNull,
58734
+ webgpuArchitecture: textOrNull,
58735
+ webgpuDevice: textOrNull,
58736
+ computeUnits: positiveOrNull
58737
+ });
58738
+ object({ accelerators: array(AcceleratorComputeSchema).nullable() });
58739
+ 64 * CORE_ULTRA_265K_IGPU_CLOCK_MHZ;
58672
58740
  var ModelFormatSchema = _enum(MODEL_FORMATS);
58673
58741
  var HwAccelBackendInputSchema = _enum([
58674
58742
  "videotoolbox",
@@ -58782,7 +58850,12 @@ var HardwareInfoSchema = object({
58782
58850
  availableRAM_MB: number(),
58783
58851
  gpu: GpuInfoSchema.nullable(),
58784
58852
  npu: NpuInfoSchema.nullable(),
58785
- coral: CoralInfoSchema.nullable().optional()
58853
+ coral: CoralInfoSchema.nullable().optional(),
58854
+ /**
58855
+ * Per-accelerator compute (D930). Omitted by a node that has not probed it.
58856
+ * `null` fields inside an entry are a failed query, never a zero.
58857
+ */
58858
+ accelerators: array(AcceleratorComputeSchema).readonly().optional()
58786
58859
  });
58787
58860
  var PlatformScoreSchema = object({
58788
58861
  runtime: literal("python"),
@@ -59315,6 +59388,22 @@ DeviceType.Camera, method(object({ deviceId: number() }), PtzAutotrackStatusSche
59315
59388
  deviceId: number(),
59316
59389
  status: PtzAutotrackStatusSchema
59317
59390
  });
59391
+ var RunningStateSourceSchema = _enum(["native", "assigned"]);
59392
+ object({
59393
+ /** null = unknown — never coerced to false (D393). */
59394
+ running: boolean().nullable(),
59395
+ /** Epoch ms the current boolean began; null while `running` is null. */
59396
+ since: number().nullable(),
59397
+ source: RunningStateSourceSchema,
59398
+ phase: string().nullable(),
59399
+ lastFetchedAt: number()
59400
+ });
59401
+ object({
59402
+ deviceId: number(),
59403
+ since: number().nullable(),
59404
+ phase: string().nullable()
59405
+ });
59406
+ Object.values(DeviceType);
59318
59407
  DeviceType.Camera, DeviceType.Sensor, DeviceType.Switch, method(object({ deviceId: number().int().nonnegative() }), object({ success: literal(true) }), {
59319
59408
  kind: "mutation",
59320
59409
  auth: "admin"
@@ -61154,7 +61243,20 @@ var ZoneRuleSchema = object({
61154
61243
  * Defaults to `true` so operators creating a rule via the UI
61155
61244
  * see it active immediately.
61156
61245
  */
61157
- enabled: boolean().default(true)
61246
+ enabled: boolean().default(true),
61247
+ /**
61248
+ * Package stage only. When true, a package candidate may open from a
61249
+ * scene difference in this rule's zone after a person leaves. The
61250
+ * package model, when it boxes something overlapping, is extra evidence
61251
+ * and is not the gate. Absent or false keeps today's model path.
61252
+ */
61253
+ detectBySceneDifference: boolean().optional(),
61254
+ /**
61255
+ * Package stage only. When true, a promoted package is shown to the
61256
+ * `llm` cap before the delivery event is emitted. Absent or false emits
61257
+ * as today. Usable with or without `detectBySceneDifference`.
61258
+ */
61259
+ confirmWithLlm: boolean().optional()
61158
61260
  });
61159
61261
  array(ZoneRuleSchema).readonly();
61160
61262
  object({
@@ -70912,6 +71014,13 @@ Object.freeze({
70912
71014
  access: "create",
70913
71015
  role: "admin"
70914
71016
  },
71017
+ "runningState.getStatus": {
71018
+ capName: "running-state",
71019
+ capScope: "device",
71020
+ addonId: null,
71021
+ access: "view",
71022
+ role: "viewer"
71023
+ },
70915
71024
  "sceneMonitor.captureReference": {
70916
71025
  capName: "scene-monitor",
70917
71026
  capScope: "device",
@@ -75626,6 +75735,32 @@ var APPLIANCE_CAP_VOCABULARY = {
75626
75735
  }],
75627
75736
  events: { onSent: { notOperatorFacing: "a delivery receipt of a send this system made — not a fact about the world" } }
75628
75737
  },
75738
+ "running-state": {
75739
+ scope: "device",
75740
+ noun: t("Running", "In funzione"),
75741
+ state: [{
75742
+ kind: "boolean",
75743
+ field: "running",
75744
+ label: t("Running", "In funzione"),
75745
+ whenTrue: t("When {device} starts", "Quando {device} inizia"),
75746
+ whenFalse: t("When {device} finishes", "Quando {device} finisce"),
75747
+ icon: "play"
75748
+ }],
75749
+ events: {
75750
+ onStarted: {
75751
+ category: EventCategory.RunningStarted,
75752
+ label: t("Started running", "Ha iniziato a funzionare"),
75753
+ phrase: t("When {device} starts running", "Quando {device} inizia a funzionare"),
75754
+ icon: "play"
75755
+ },
75756
+ onFinished: {
75757
+ category: EventCategory.RunningFinished,
75758
+ label: t("Finished", "Ha finito"),
75759
+ phrase: t("When {device} finishes", "Quando {device} finisce"),
75760
+ icon: "square"
75761
+ }
75762
+ }
75763
+ },
75629
75764
  update: {
75630
75765
  scope: "device",
75631
75766
  noun: t("Firmware update", "Aggiornamento firmware"),
@@ -79166,6 +79301,11 @@ Object.freeze({
79166
79301
  form: "single",
79167
79302
  optional: true
79168
79303
  }],
79304
+ "runningState.getStatus": [{
79305
+ name: "deviceId",
79306
+ form: "single",
79307
+ optional: false
79308
+ }],
79169
79309
  "sceneMonitor.captureReference": [{
79170
79310
  name: "deviceId",
79171
79311
  form: "single",
@@ -79716,40 +79856,7 @@ var NC_AUDIO_DEFAULTS = {
79716
79856
  samplingSeconds: 10
79717
79857
  };
79718
79858
  new Set(["devices", "classes"]);
79719
- /**
79720
- * WHICH narrowing filter speaks about WHICH system-event kind — one predicate,
79721
- * consumed by the rule ENGINE and by every rule EDITOR.
79722
- *
79723
- * ── The failure this file exists for ───────────────────────────────────────
79724
- * `NcSystemEventConditionSchema` carries four optional narrowing lists
79725
- * (`deviceIds`, `deviceTypes`, `nodeIds`, `packageNames`) beside a required
79726
- * `kinds` gate. They are not four filters over one vocabulary: each belongs to
79727
- * a FAMILY of kinds and is meaningless outside it. A node going away has no
79728
- * device type; a completed export has no package; `stream-offline` deliberately
79729
- * carries no device type at all (a stream belongs to a camera by construction).
79730
- *
79731
- * The engine applied all four to every kind, so a filter from one family failed
79732
- * a kind from another family CLOSED. The operator's live rule "Eventi di
79733
- * sistema" selected eleven kinds and set `deviceTypes: ['camera']` — the only
79734
- * way to say "only my cameras" about the two liveness kinds — and NINE of the
79735
- * eleven silently stopped being deliverable. Four days of history contained
79736
- * `device-online` and `device-offline` and nothing else, across a window in
79737
- * which agents were restarted and addons were updated.
79738
- *
79739
- * Both editors already computed this scoping, to decide which filter boxes to
79740
- * render; the cap's own docblock already promised it ("Narrow a `device-*` kind
79741
- * to these device TYPES"). Only the engine disagreed, and it disagreed in the
79742
- * destructive direction. So the rule is stated ONCE, here, and the engine and
79743
- * the editors are readers of it rather than three independent authors.
79744
- *
79745
- * ── The direction ─────────────────────────────────────────────────────────
79746
- * Out of family ⇒ the filter is IGNORED, never fail-closed. An editor that
79747
- * hides a box has already told the operator this filter does not speak about
79748
- * these kinds, so honouring it as an exclusion contradicts the only
79749
- * explanation the operator was ever given. Inside its family the filter still
79750
- * narrows, and still fails CLOSED on a subject that cannot produce the identity
79751
- * it tests (a device the mirror cannot name is not evidence of a camera).
79752
- */
79859
+ new Set(NC_LEGACY_SYSTEM_EVENT_KINDS);
79753
79860
  /**
79754
79861
  * Every filter, for the callers that must cover all of them (guards, tests).
79755
79862
  *
@@ -79775,9 +79882,6 @@ new Map(Object.entries({
79775
79882
  "device-battery-normal": "device-events",
79776
79883
  "device-consumable-low": "device-events",
79777
79884
  "device-consumable-normal": "device-events",
79778
- "device-tank-low": "device-events",
79779
- "device-tank-full": "device-events",
79780
- "device-tank-normal": "device-events",
79781
79885
  "stream-online": "device-events",
79782
79886
  "stream-offline": "device-events",
79783
79887
  "detection-blind": "device-events",
@@ -79854,16 +79958,6 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
79854
79958
  label: "Consumables",
79855
79959
  kinds: ["device-consumable-low", "device-consumable-normal"]
79856
79960
  },
79857
- {
79858
- id: "tanks",
79859
- family: "device-events",
79860
- label: "Tanks",
79861
- kinds: [
79862
- "device-tank-low",
79863
- "device-tank-full",
79864
- "device-tank-normal"
79865
- ]
79866
- },
79867
79961
  {
79868
79962
  id: "detection-blind",
79869
79963
  family: "device-events",
@@ -80101,11 +80195,6 @@ var RULE_BODY_ONLY = ["body"];
80101
80195
  var RULE_TEXT = ["title", "body"];
80102
80196
  var BATTERY = ["device-battery-low", "device-battery-normal"];
80103
80197
  var CONSUMABLE = ["device-consumable-low", "device-consumable-normal"];
80104
- var TANK = [
80105
- "device-tank-low",
80106
- "device-tank-full",
80107
- "device-tank-normal"
80108
- ];
80109
80198
  var ALERT_EPISODE = [
80110
80199
  "alert-critical",
80111
80200
  "alert-error",
@@ -80137,7 +80226,6 @@ var DEVICE_EVENTS = [
80137
80226
  "device-enabled",
80138
80227
  ...BATTERY,
80139
80228
  ...CONSUMABLE,
80140
- ...TANK,
80141
80229
  "stream-online",
80142
80230
  "stream-offline",
80143
80231
  "detection-blind",
@@ -80183,12 +80271,6 @@ var STATE_SUMMARY_SECTION_VARS = [
80183
80271
  example: "Robot — filter 10 %",
80184
80272
  kinds: CONSUMABLE
80185
80273
  },
80186
- {
80187
- name: "summaryTanks",
80188
- label: "Summary: tanks",
80189
- example: "Robot — clean water low",
80190
- kinds: TANK
80191
- },
80192
80274
  {
80193
80275
  name: "summaryDetection",
80194
80276
  label: "Summary: cameras detecting nothing",
@@ -80304,8 +80386,7 @@ var STATE_SUMMARY_VARS = [
80304
80386
  ([...RULE_TEXT], [...COMBINED_ALARM]),
80305
80387
  ([...RULE_TEXT], [...DEVICE_EVENTS]),
80306
80388
  ([...RULE_TEXT], [...BATTERY, ...CONSUMABLE]),
80307
- ([...RULE_TEXT], [...CONSUMABLE, ...TANK]),
80308
- ([...RULE_TEXT], [...TANK]),
80389
+ ([...RULE_TEXT], [...CONSUMABLE]),
80309
80390
  [...RULE_TEXT],
80310
80391
  ([...RULE_TEXT], [...UPDATES, ...ALERT_EPISODE]),
80311
80392
  ([...RULE_TEXT], [...UPDATES, ...ALERT_EPISODE]),
@@ -80409,15 +80490,6 @@ new Map([
80409
80490
  snapshotLabel: "Consumables low now",
80410
80491
  snapshotSection: "consumables"
80411
80492
  },
80412
- {
80413
- id: "tanks",
80414
- family: "device-events",
80415
- label: "Tanks (low or full / back to normal)",
80416
- bad: ["device-tank-low", "device-tank-full"],
80417
- recovery: ["device-tank-normal"],
80418
- snapshotLabel: "Tanks low or full now",
80419
- snapshotSection: "tanks"
80420
- },
80421
80493
  {
80422
80494
  id: "motion-noise",
80423
80495
  family: "device-events",
@@ -80819,6 +80891,10 @@ TimelapseRuleInputSchema.extend({
80819
80891
  updatedAt: number()
80820
80892
  });
80821
80893
  MotionOnMotionChangedDataSchema.omit({ triggeredBy: true });
80894
+ Object.freeze({
80895
+ person: .8,
80896
+ vehicle: .8
80897
+ });
80822
80898
  object({
80823
80899
  /**
80824
80900
  * Fraction of the box's own size added on EACH side before cutting.
@@ -83417,6 +83493,25 @@ var CAP_STATE_LEAVES = Object.freeze({
83417
83493
  "path": "reason",
83418
83494
  "valueType": "string"
83419
83495
  }],
83496
+ "running-state": [
83497
+ {
83498
+ "path": "running",
83499
+ "valueType": "boolean"
83500
+ },
83501
+ {
83502
+ "path": "since",
83503
+ "valueType": "number"
83504
+ },
83505
+ {
83506
+ "path": "source",
83507
+ "valueType": "enum",
83508
+ "enumValues": ["native", "assigned"]
83509
+ },
83510
+ {
83511
+ "path": "phase",
83512
+ "valueType": "string"
83513
+ }
83514
+ ],
83420
83515
  "script-runner": [
83421
83516
  {
83422
83517
  "path": "isRunning",