@camstack/addon-provider-wyze 0.2.123 → 0.2.124

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 (3) hide show
  1. package/dist/addon.js +599 -140
  2. package/dist/addon.mjs +599 -140
  3. package/package.json +1 -3
package/dist/addon.mjs CHANGED
@@ -7433,7 +7433,7 @@ function errMsg(err) {
7433
7433
  return String(err);
7434
7434
  }
7435
7435
  //#endregion
7436
- //#region ../types/dist/composition-43aqsZQj.mjs
7436
+ //#region ../types/dist/composition-Bzr7GwgP.mjs
7437
7437
  /**
7438
7438
  * The ffmpeg build every CamStack node downloads, per platform and arch.
7439
7439
  *
@@ -7487,20 +7487,20 @@ function portable(target) {
7487
7487
  }
7488
7488
  portable("linux64"), portable("linuxarm64"), portable("macarm64"), portable("mac64");
7489
7489
  /**
7490
- * LA tabella "quale booleano di questo tipo di device conta come ALTO", e il
7491
- * valutatore puro del suo FRONTE.
7490
+ * THE table "which boolean of this device type counts as HIGH", and the
7491
+ * pure evaluator of its EDGE.
7492
7492
  *
7493
- * UNA tabella per tutti quelli che chiedono "questo device è ALTO?": il
7494
- * trigger `RecordingTriggers.sensorDeviceIds` del recorder, i marker dei
7495
- * sensori della post-analysis, il bridge camera-sensors dell'orchestratore e
7496
- * le sorgenti di un campanello composto (`doorbellFeatureSources`, D671).
7497
- * Una seconda copia divergerebbe alla prima cap aggiunta, e il sintomo — "il
7498
- * sensore fa suonare il campanello ma non registra" — è esattamente D62.
7493
+ * ONE table for everyone who asks "is this device HIGH?": the
7494
+ * recorder's `RecordingTriggers.sensorDeviceIds` trigger, the post-analysis
7495
+ * sensor markers, the orchestrator's camera-sensors bridge and
7496
+ * the sources of a composite doorbell (`doorbellFeatureSources`, D671).
7497
+ * A second copy would diverge at the first cap added, and the symptom — "the
7498
+ * sensor rings the doorbell but does not record" — is exactly D62.
7499
7499
  *
7500
- * ⚠ NON è `DEVICE_STATE_READERS` (`catalogs/device-state-vocabulary.ts`), e le
7501
- * due non vanno unificate: quella risponde a "qual è la PAROLA di stato per una
7502
- * regola" (e include `presence`, `cover`, `alarm-panel`), questa a "qual è il
7503
- * booleano il cui FRONTE conta". Vocabolari deliberatamente diversi.
7500
+ * ⚠ NOT `DEVICE_STATE_READERS` (`catalogs/device-state-vocabulary.ts`), and the
7501
+ * two must not be unified: that one answers "what is the state WORD for a
7502
+ * rule" (and includes `presence`, `cover`, `alarm-panel`), this one "which
7503
+ * boolean's EDGE counts". Deliberately different vocabularies.
7504
7504
  */
7505
7505
  /**
7506
7506
  * Known binary / switch source caps → the boolean slice field whose
@@ -7521,6 +7521,8 @@ var SOURCE_CAP_ACTIVE_FIELD = {
7521
7521
  vibration: "detected",
7522
7522
  tamper: "tampered"
7523
7523
  };
7524
+ /** Cap names whose presence in a device's bindings qualify it as a source. */
7525
+ var SOURCE_CAPS = Object.keys(SOURCE_CAP_ACTIVE_FIELD);
7524
7526
  /**
7525
7527
  * Error types for the safe expression engine. Two distinct classes so callers
7526
7528
  * can tell a compile-time (grammar) failure from a runtime (evaluation)
@@ -9127,22 +9129,22 @@ var CLASS_MAP_MACRO_TARGETS = [
9127
9129
  "package"
9128
9130
  ];
9129
9131
  /**
9130
- * Le macro classi di PRIMO LIVELLO: quelle che un object detector emette e che
9131
- * un operatore può selezionare.
9132
+ * The FIRST-LEVEL macro classes: those an object detector emits and that
9133
+ * an operator can select.
9132
9134
  *
9133
- * Sono le tre offerte dallo step `object-detection`
9135
+ * They are the three offered by the `object-detection` step
9134
9136
  * (`addon-pipeline/src/detection-pipeline/registry/step-definitions.ts`,
9135
- * `enabledMacroClasses`). `package` sta in {@link CLASS_MAP_MACRO_TARGETS} e in
9136
- * `MACRO_LABELS` — è una macro vera — ma NON qui: appartiene allo step
9137
- * `package-detection`, la cui abilitazione è guidata dalle zone, e offrire la
9138
- * stessa parola due volte ha già fatto accendere a un operatore il proxy COCO
9137
+ * `enabledMacroClasses`). `package` is in {@link CLASS_MAP_MACRO_TARGETS} and in
9138
+ * `MACRO_LABELS` — it is a true macro — but NOT here: it belongs to the step
9139
+ * `package-detection`, whose enablement is driven by zones, and offering the
9140
+ * same word twice has already made an operator turn on the COCO proxy
9139
9141
  * (suitcase/backpack/handbag) lasciando spento il detector dedicato.
9140
9142
  *
9141
- * UNA lista. Prima di oggi le stesse tre erano scritte a mano nell'offerta
9142
- * dello step e una seconda volta come union `FirstLevelMacro`
9143
- * (`types/detection.ts`); una terza copia per il trigger di registrazione
9144
- * (`RecordingTriggers.objectClasses`) avrebbe reso invisibile la divergenza
9145
- * successiva.
9143
+ * ONE list. Before today the same three were hand-written in the step's offer
9144
+ * and a second time as the union `FirstLevelMacro`
9145
+ * (`types/detection.ts`); a third copy for the recording trigger
9146
+ * (`RecordingTriggers.objectClasses`) would have made the later divergence
9147
+ * invisible.
9146
9148
  */
9147
9149
  var FIRST_LEVEL_MACRO_CLASSES = [
9148
9150
  "person",
@@ -9207,17 +9209,17 @@ var RecordingStorageModeSchema = _enum([
9207
9209
  "on-device-decision"
9208
9210
  ]);
9209
9211
  /**
9210
- * Le macro classi che possono aprire una finestra di registrazione — le stesse
9211
- * tre offerte dallo step `object-detection`, da UNA lista
9212
+ * The macro classes that can open a recording window — the same
9213
+ * three offered by the `object-detection` step, from ONE list
9212
9214
  * ({@link FIRST_LEVEL_MACRO_CLASSES}).
9213
9215
  */
9214
9216
  var RecordingObjectTriggerClassSchema = _enum(FIRST_LEVEL_MACRO_CLASSES);
9215
9217
  /**
9216
- * True quando `values` non ripete un elemento.
9218
+ * True when `values` does not repeat an element.
9217
9219
  *
9218
- * Un duplicato non è innocuo: ogni voce di `objectClasses` / `sensorDeviceIds`
9219
- * diventa una SORGENTE in `bandTriggerSources`, e la stessa sorgente due volte
9220
- * conterebbe due volte le sue finestre in `segmentMissedByMs`.
9220
+ * A duplicate is not harmless: every entry of `objectClasses` / `sensorDeviceIds`
9221
+ * becomes a SOURCE in `bandTriggerSources`, and the same source twice
9222
+ * would count its windows twice in `segmentMissedByMs`.
9221
9223
  */
9222
9224
  var noDuplicates = (values) => new Set(values).size === values.length;
9223
9225
  /** Which detectors trigger an `events`-mode band. */
@@ -9225,34 +9227,34 @@ var RecordingTriggersSchema = object({
9225
9227
  motion: boolean().optional(),
9226
9228
  audioThresholdDbfs: number().optional(),
9227
9229
  /**
9228
- * Le macro classi la cui detection apre una finestra. ASSENTE = la sorgente
9229
- * non è ascoltata; un array VUOTO è rifiutato, perché "banda events, trigger
9230
- * object acceso, nessuna classe" è la stessa forma "abilitata e non registra
9231
- * nulla, per sempre" contro cui è scritto `eventsBandCanEverDemand`.
9230
+ * The macro classes whose detection opens a window. ABSENT = the source
9231
+ * is not listened to; an EMPTY array is rejected, because "events band, object
9232
+ * trigger on, no class" is the same shape "enabled and records
9233
+ * nothing, forever" that `eventsBandCanEverDemand` is written against.
9232
9234
  *
9233
- * Il segnale letto è GIÀ FILTRATO: solo detection `source: 'pipeline'`, cioè
9234
- * quelle che hanno attraversato `enabledMacroClasses`, i
9235
- * `minConfidence<Macro>` e il full-frame guard. L'AI a bordo camera
9236
- * (`source: 'onboard'`) non attraversa nessuno di quei gate e NON apre
9237
- * finestre — vedi `recorder/object-trigger.ts`.
9235
+ * The signal read is ALREADY FILTERED: only `source: 'pipeline'` detections, i.e.
9236
+ * those that went through `enabledMacroClasses`, the
9237
+ * `minConfidence<Macro>` and the full-frame guard. The camera's onboard AI
9238
+ * (`source: 'onboard'`) goes through none of those gates and does NOT open
9239
+ * windows — see `recorder/object-trigger.ts`.
9238
9240
  */
9239
9241
  objectClasses: array(RecordingObjectTriggerClassSchema).min(1).refine(noDuplicates, { message: "objectClasses must not repeat a class" }).optional(),
9240
9242
  /**
9241
- * I device LINKED il cui FRONTE ALTO apre una finestra. Assente = la sorgente
9242
- * non è ascoltata; un array vuoto è rifiutato per la stessa ragione di
9243
+ * The LINKED devices whose RISING EDGE opens a window. Absent = the source
9244
+ * is not listened to; an empty array is rejected for the same reason as
9243
9245
  * `objectClasses`.
9244
9246
  *
9245
- * Sono id di device SORGENTE, non camere: la banda li nomina, quindi il
9246
- * percorso caldo (`DeviceStateChanged`, a ritmo di bus su tutta la flotta)
9247
- * non fa RPC. L'OFFERTA da cui l'operatore li sceglie è un'altra domanda, e
9248
- * si risolve con `deviceManager.getLinkedDevices` + `getBindingsBatch` per
9249
- * device (D12) — mai un elenco globale di cap.
9247
+ * These are SOURCE device ids, not cameras: the band names them, so the
9248
+ * hot path (`DeviceStateChanged`, at bus rate across the whole fleet)
9249
+ * does no RPC. The OFFER from which the operator picks them is another question, and
9250
+ * is resolved with `deviceManager.getLinkedDevices` + `getBindingsBatch` per
9251
+ * device (D12) — never a global list of caps.
9250
9252
  *
9251
- * Cosa vuol dire "alto" dipende dal TIPO di device e non è deciso qui:
9252
- * `SOURCE_CAP_ACTIVE_FIELD` (`catalogs/sensor-active-state.ts`) è LA tabella,
9253
- * la stessa del campanello composto (D671). Ed è il FRONTE, non
9254
- * il livello: un contatto trovato già aperto al riavvio del runner non fa
9255
- * registrare.
9253
+ * What "high" means depends on the device TYPE and is not decided here:
9254
+ * `SOURCE_CAP_ACTIVE_FIELD` (`catalogs/sensor-active-state.ts`) is THE table,
9255
+ * the same one as the composite doorbell (D671). And it is the EDGE, not
9256
+ * the level: a contact found already open at runner restart does not
9257
+ * record.
9256
9258
  */
9257
9259
  sensorDeviceIds: array(number().int().positive()).min(1).max(16).refine(noDuplicates, { message: "sensorDeviceIds must not repeat a device" }).optional()
9258
9260
  });
@@ -10329,7 +10331,7 @@ var DecoderSessionConfigSchema = object({
10329
10331
  * - **VALUE** — at which level, for which scope, until when. That stays ONE
10330
10332
  * thing: the logging settings document on the `system` cap. Two authorities
10331
10333
  * over the values is the exact defect
10332
- * `docs/design/plans/2026-08-26-logging-per-componente.md` was written to
10334
+ * `docs/design/plans/2026-08-26-per-component-logging.md` was written to
10333
10335
  * remove; re-introducing it from the cure side would be grotesque.
10334
10336
  *
10335
10337
  * Nothing in this file reads a clock, an env var or a store. The registry is
@@ -12040,7 +12042,7 @@ var BrokerStatusEnum = _enum([
12040
12042
  "unreachable",
12041
12043
  "error"
12042
12044
  ]);
12043
- var BrokerInfoSchema$1 = object({
12045
+ var BrokerInfoSchema = object({
12044
12046
  /** Stable broker id. Persisted; survives addon restarts. */
12045
12047
  id: string(),
12046
12048
  /** Addon id of the provider that OWNS this broker.
@@ -12173,7 +12175,7 @@ var GetStateInputSchema = object({
12173
12175
  * HA: entity_id (returns the cached entity state). */
12174
12176
  key: string()
12175
12177
  });
12176
- method(ListInputSchema, array(BrokerInfoSchema$1)), method(GetInputSchema, BrokerInfoSchema$1.nullable()), method(_void(), array(BrokerProviderInfoSchema), { auth: "admin" }), method(AddInputSchema, AddResultSchema, {
12178
+ method(ListInputSchema, array(BrokerInfoSchema)), method(GetInputSchema, BrokerInfoSchema.nullable()), method(_void(), array(BrokerProviderInfoSchema), { auth: "admin" }), method(AddInputSchema, AddResultSchema, {
12177
12179
  kind: "mutation",
12178
12180
  auth: "admin"
12179
12181
  }), method(RemoveInputSchema, _void(), {
@@ -13884,7 +13886,7 @@ method(_void(), EngineInfoSchema, { auth: "admin" }), method(object({
13884
13886
  *
13885
13887
  * ⚠ An earlier version of this comment blamed Zod stripping, and that
13886
13888
  * was wrong — corrected 2026-08-26 after the hop map
13887
- * (`docs/design/2026-08-26-mappa-hop-argomenti.md`) traced the path.
13889
+ * (`docs/design/2026-08-26-topic-hop-map.md`) traced the path.
13888
13890
  * There is **no Zod parse at all** between the door and the engine: the
13889
13891
  * dispatcher forwards the payload verbatim and UDS carries it whole. A
13890
13892
  * field declared here reaches `SqliteSettingsBackend` either way.
@@ -15991,7 +15993,7 @@ method(object({
15991
15993
  * per-device window, `KeyFrameCaptureLog`, `bumpCropMetric`. Every one of them
15992
15994
  * ends in a log line, and a log line is the thing the operator asked to stop
15993
15995
  * needing: *"possiamo armare questi errori intanto? Così al prossimo giro
15994
- * ricontrolliamo tutti questi punti"*. Reading them meant grepping Loki and
15996
+ * ricontrolliamo tutti questi punti"* [can we instrument these errors in the meantime? That way next round we recheck all these points]. Reading them meant grepping Loki and
15995
15997
  * hand-correlating timestamps, which is how a 22% thumbnail gap and a 3-hour
15996
15998
  * media blackout were both diagnosed. The counters stay; this is where they can
15997
15999
  * be READ.
@@ -17367,7 +17369,7 @@ var BrokerStatusSchema$1 = _enum([
17367
17369
  "unreachable",
17368
17370
  "tls-error"
17369
17371
  ]);
17370
- var BrokerInfoSchema = object({
17372
+ var BrokerInfoSchema$1 = object({
17371
17373
  id: string(),
17372
17374
  name: string(),
17373
17375
  url: string(),
@@ -17430,7 +17432,7 @@ var StatusSchema = object({
17430
17432
  brokerCount: number(),
17431
17433
  embeddedRunning: boolean()
17432
17434
  });
17433
- method(_void(), array(BrokerInfoSchema)), method(IdInputSchema, BrokerConnectionDetailsSchema, { auth: "admin" }), method(AddBrokerInputSchema, AddBrokerResultSchema, {
17435
+ method(_void(), array(BrokerInfoSchema$1)), method(IdInputSchema, BrokerConnectionDetailsSchema, { auth: "admin" }), method(AddBrokerInputSchema, AddBrokerResultSchema, {
17434
17436
  kind: "mutation",
17435
17437
  auth: "admin"
17436
17438
  }), method(IdInputSchema, _void(), {
@@ -19644,78 +19646,16 @@ var NcRuleInputSchema = object({
19644
19646
  */
19645
19647
  confirm: NcConfirmSchema.optional(),
19646
19648
  /**
19647
- * WAIT for face/plate recognition before saying anything.
19648
- *
19649
- * A notification's TEXT is frozen at enqueue and its media is re-resolved at
19650
- * send; the identity is neither. A face is confirmed after `confirmFrames`
19651
- * agreeing observations — p50 **11.4 s** after the track was first seen,
19652
- * measured on this hub — and an `immediate` rule enqueues on the first object
19653
- * event, seconds before that. So "Gianluca è arrivato" is unsayable on the
19654
- * immediate path, and no amount of media re-resolution fixes a sentence.
19655
- *
19656
- * Only two honest answers exist, and this flag picks between them. It has
19657
- * effect ONLY on a rule that declares a recognition scope
19658
- * ({@link NcConditions.identities} or {@link NcConditions.plates}) — on any
19659
- * other rule there is nothing to wait for and the flag is inert.
19660
- *
19661
- * | value | what happens |
19662
- * | --- | --- |
19663
- * | `true` | the rule stops firing on the object event and fires at TRACK CLOSE instead, once, with the name — later, and complete |
19664
- * | absent / `false` | it fires at once WITHOUT the name, and if recognition lands before the track closes a SECOND, "…is Gianluca" notification follows (one per track, per rule, per target) |
19665
- *
19666
- * `.optional()` and deliberately NOT `.default()`: a Zod default does not run
19667
- * on the addon cap path, and absent has to keep meaning exactly what every
19668
- * rule authored before this field meant.
19669
- *
19670
- * The cost of `true` is stated here because the editor states it too: a rule
19671
- * that waits also inherits track-close SEMANTICS — its `zones` condition
19672
- * tests every zone the track visited and a `crossing` condition can no longer
19673
- * be satisfied, because a closed track carries no crossing.
19649
+ * IMMEDIATE GROUPED (D692): the first matching subject opens a window of this many
19650
+ * seconds; the rule sends ONE message when the window closes — early, once every
19651
+ * subject in it is final, never before {@link NC_GROUPING_MIN_SEC} — naming everybody
19652
+ * the rule matched, with one mosaic tile per subject.
19653
+ * Absent = plain immediate (one message per track, at the first match).
19654
+ * Only an `immediate` DETECTION rule may carry it (`ruleGroupingApplies`, enforced on
19655
+ * save by the hub's grouping guard). `.optional()`, never `.default()`: the addon cap
19656
+ * path does not run Zod defaults.
19674
19657
  */
19675
- waitForEnhancement: boolean().optional(),
19676
- /**
19677
- * GROUP a burst of subjects into ONE notification that grows.
19678
- *
19679
- * Seconds of quiet after the last matching subject before the burst is
19680
- * considered over. While it is open, the first subject enqueues immediately —
19681
- * **exactly as today, with no added latency** — and every real growth (a new
19682
- * subject, or a name confirmed on one already in it) REPLACES that
19683
- * notification with an updated one naming everybody. The push carries the
19684
- * group's own coalescing tag, so the phone replaces rather than stacks.
19685
- *
19686
- * `0` / absent = off, and off is today's behaviour byte for byte.
19687
- *
19688
- * ### Why an idle cutoff and not a window
19689
- *
19690
- * The measured seven-person arrival on device 590 spans 110 s with every
19691
- * internal gap under 30 s. A 12 s fixed window cuts it into three groups; an
19692
- * idle cutoff holds it as one and ends it when the arrival actually ends.
19693
- * 30 s is a widely shipped value for the same decision.
19694
- *
19695
- * ### What it replaces
19696
- *
19697
- * The blind cooldown, which collapses a burst by DISCARDING it. Measured on
19698
- * device 615 / *Persona su Uscio* over six days: 116 qualifying tracks → 74
19699
- * notifications, **44 (37.9%) suppressed outright**, 23 of them overlapping a
19700
- * track that did fire and 7 carrying a confirmed identity nobody heard about.
19701
- * A group collapses the same volume by MERGING, so the cooldown becomes a
19702
- * budget over GROUPS — which is what it always meant — and a growth is never
19703
- * throttled by the window its own first member spent.
19704
- *
19705
- * ### Interaction with {@link waitForEnhancement}
19706
- *
19707
- * They compose, and the order matters. `waitForEnhancement` defers the rule to
19708
- * TRACK CLOSE, so with both set the group is opened by the first member to
19709
- * CLOSE — already carrying its name — and grows as later members close. That
19710
- * is later, and complete. With grouping alone the group opens on the first
19711
- * object event and picks up names as they are confirmed, through the growth
19712
- * path. Neither combination fires twice for one subject.
19713
- *
19714
- * `.optional()` and deliberately NOT `.default()`: a Zod default does not run
19715
- * on the addon cap path, so absent must keep meaning what it meant before this
19716
- * field existed.
19717
- */
19718
- groupIdleSec: number().int().min(0).max(600).optional()
19658
+ groupingSec: number().int().min(5).max(60).optional()
19719
19659
  });
19720
19660
  /**
19721
19661
  * Partial patch for `updateRule` — any subset of the input fields, plus the
@@ -19763,9 +19703,10 @@ var NcRuleClearableKeySchema = _enum([
19763
19703
  "targetUsers",
19764
19704
  "snoozeOptions",
19765
19705
  "snoozeAllowGlobal",
19766
- "waitForEnhancement",
19767
19706
  "actions",
19768
19707
  "confirm",
19708
+ "groupingSec",
19709
+ "waitForEnhancement",
19769
19710
  "groupIdleSec"
19770
19711
  ]);
19771
19712
  var NcRuleUpdateInputSchema = object({
@@ -19787,9 +19728,25 @@ var NcRuleSchema = NcRuleInputSchema.extend({
19787
19728
  */
19788
19729
  disabledTargetIds: array(string()).default([])
19789
19730
  });
19731
+ /**
19732
+ * The state-summary SECTIONS (D647 / D698): the D637 kind groups that report a
19733
+ * still-true state. `backups-exports` and `alarm` are not sections — a completed
19734
+ * job is not an open state, and the alarm stays instant.
19735
+ */
19736
+ var NcStateSummarySectionIdSchema = _enum([
19737
+ "device-state",
19738
+ "streams",
19739
+ "battery",
19740
+ "consumables",
19741
+ "tanks",
19742
+ "detection-blind",
19743
+ "nodes",
19744
+ "addons",
19745
+ "updates"
19746
+ ]);
19790
19747
  /** One section of a previewed state summary. `unavailable` = its state could not be read. */
19791
19748
  var NcStateSummaryPreviewSectionSchema = object({
19792
- id: string(),
19749
+ id: NcStateSummarySectionIdSchema,
19793
19750
  status: _enum(["read", "unavailable"]),
19794
19751
  items: number().int().nonnegative(),
19795
19752
  reason: string().optional()
@@ -19799,7 +19756,7 @@ var NcStateSummaryPreviewSectionSchema = object({
19799
19756
  * a `rule` split (no `section`), one section's on a `section` split.
19800
19757
  */
19801
19758
  var NcStateSummaryPreviewRowSchema = object({
19802
- section: string().optional(),
19759
+ section: NcStateSummarySectionIdSchema.optional(),
19803
19760
  /** The section's name on a per-section row; every reported section's, joined, on a combined one. */
19804
19761
  title: string(),
19805
19762
  text: string(),
@@ -21698,14 +21655,14 @@ var TrackSchema = object({
21698
21655
  * `derive-returned-null tile=standin`,
21699
21656
  * `native-tile tile=native no-key-frame-at-close`, …) written at close and
21700
21657
  * CLEARED by the late-keyFrame upgrade when a native tile lands after all.
21701
- * The operator-facing answer to "perché manca l'immagine?" on a track whose
21658
+ * The operator-facing answer to "perché manca l'immagine?" [why is the image missing?] on a track whose
21702
21659
  * tile is a face/plate stand-in, a raster crop, or an icon.
21703
21660
  *
21704
21661
  * **`no-key-frame-at-close` (D400).** The line used to be written ONLY when
21705
21662
  * the TILE ranked below native, so a track whose thumbnail landed natively
21706
21663
  * while its key frame missed carried no reason at all — three of the four
21707
21664
  * `MISSING_KEYFRAME` tracks in the 2026-09-07 operator audit were exactly
21708
- * that shape, and their "niente ultimo" had no cause anywhere on the row.
21665
+ * that shape, and their "niente ultimo" [no last frame] had no cause anywhere on the row.
21709
21666
  * The key frame is the head of a cascade (`keyFrame ⇒ keyFrameSmall ⇒ the
21710
21667
  * lastFrame copy source`), so its absence is now on this line whatever the
21711
21668
  * tile ended up being.
@@ -21792,7 +21749,7 @@ var MotionEventSchema = object({
21792
21749
  /**
21793
21750
  * Ms offsets from `timestamp` (the episode's own first rising edge, so the
21794
21751
  * first entry is always `0`) of every genuine off→on transition the
21795
- * episode saw — "ogni evento on si deve salvare" (D475). NOT one entry per
21752
+ * episode saw — "ogni evento on si deve salvare" [every ON event must be saved] (D475). NOT one entry per
21796
21753
  * push: a firmware source that keepalives at ~1 Hz for the whole burst
21797
21754
  * (Reolink, Hikvision) produces exactly one edge; a source that reports an
21798
21755
  * explicit `false` mid-episode and then resumes before the quiet window
@@ -22316,6 +22273,7 @@ var KeyEventSchema = object({
22316
22273
  bestEventId: string(),
22317
22274
  /** Track lifetime in ms (lastSeen - firstSeen). */
22318
22275
  windowMs: number().optional(),
22276
+ audioLabels: array(TrackAudioLabelSchema).readonly().optional(),
22319
22277
  ...TrackFlagFields,
22320
22278
  ...TrackRetrainFields
22321
22279
  });
@@ -27201,7 +27159,7 @@ var ClipPlaybackSchema = object({
27201
27159
  * **One authorised yes is one wake.** `next-natural` — take the clip the next
27202
27160
  * time the camera is awake for its own reasons — is deliberately not a member:
27203
27161
  * it was proposed, it is free on the battery, and the operator declined it on
27204
- * 2026-09-20 (*"Quando un export viene richiesto si sveglia la camera."*,
27162
+ * 2026-09-20 (*"Quando un export viene richiesto si sveglia la camera."* [When an export is requested the camera wakes up],
27205
27163
  * D558 "Considered and not taken").
27206
27164
  */
27207
27165
  var ClipWakeSchema = _enum(["authorised"]);
@@ -27462,7 +27420,7 @@ DeviceType.Camera, method(object({
27462
27420
  * It replaced `sources?: string[]`, a VIEW filter over source ids that
27463
27421
  * assumed the answer was a fan-out over everything a camera has. The
27464
27422
  * operator settled otherwise on 2026-09-20 — *"l'utilizzatore è uno
27465
- * solo"* — so the list is asked of one provider at a time and there is
27423
+ * solo"* [there is only one user] — so the list is asked of one provider at a time and there is
27466
27424
  * nothing to filter out of it.
27467
27425
  */
27468
27426
  provider: string().min(1)
@@ -35460,7 +35418,7 @@ var ReadGopBytesResultSchema = object({
35460
35418
  /**
35461
35419
  * A time WINDOW of one finalized segment, cut by byte range — the multi-GOP
35462
35420
  * twin of {@link ReadGopBytesResultSchema}'s single instant. Built for the
35463
- * replay clip's `recording` source (`docs/design/plans/2026-08-26-replay-clip-su-pipeline.md`):
35421
+ * replay clip's `recording` source (`docs/design/plans/2026-08-26-clip-replay-on-pipeline.md`):
35464
35422
  * a replay needs several seconds of native pixels, not one frame.
35465
35423
  *
35466
35424
  * `ok.data` is standalone-demuxable, same as a GOP read. `ok.reachesRequestedEnd`
@@ -38824,6 +38782,7 @@ var zoneRulesCapability = {
38824
38782
  */
38825
38783
  durability: "restored"
38826
38784
  };
38785
+ SOURCE_CAPS.filter((cap) => cap !== "switch" && cap !== "motion");
38827
38786
  /**
38828
38787
  * Accessory device helpers — shared across drivers.
38829
38788
  *
@@ -48910,6 +48869,11 @@ Object.freeze({
48910
48869
  }
48911
48870
  });
48912
48871
  Object.freeze({
48872
+ "accessories.getStatus": [{
48873
+ name: "deviceId",
48874
+ form: "single",
48875
+ optional: false
48876
+ }],
48913
48877
  "accessories.setChildHidden": [{
48914
48878
  name: "childDeviceId",
48915
48879
  form: "single",
@@ -48929,6 +48893,11 @@ Object.freeze({
48929
48893
  form: "single",
48930
48894
  optional: false
48931
48895
  }],
48896
+ "airQualitySensor.getStatus": [{
48897
+ name: "deviceId",
48898
+ form: "single",
48899
+ optional: false
48900
+ }],
48932
48901
  "alarmPanel.arm": [{
48933
48902
  name: "deviceId",
48934
48903
  form: "single",
@@ -48939,11 +48908,36 @@ Object.freeze({
48939
48908
  form: "single",
48940
48909
  optional: false
48941
48910
  }],
48911
+ "alarmPanel.getStatus": [{
48912
+ name: "deviceId",
48913
+ form: "single",
48914
+ optional: false
48915
+ }],
48942
48916
  "alarmPanel.trigger": [{
48943
48917
  name: "deviceId",
48944
48918
  form: "single",
48945
48919
  optional: false
48946
48920
  }],
48921
+ "ambientLightSensor.getStatus": [{
48922
+ name: "deviceId",
48923
+ form: "single",
48924
+ optional: false
48925
+ }],
48926
+ "audioAnalysis.applyDeviceSettingsPatch": [{
48927
+ name: "deviceId",
48928
+ form: "single",
48929
+ optional: false
48930
+ }],
48931
+ "audioAnalysis.getDeviceLiveContribution": [{
48932
+ name: "deviceId",
48933
+ form: "single",
48934
+ optional: false
48935
+ }],
48936
+ "audioAnalysis.getDeviceSettingsContribution": [{
48937
+ name: "deviceId",
48938
+ form: "single",
48939
+ optional: false
48940
+ }],
48947
48941
  "audioAnalysis.resolveDeviceSettings": [{
48948
48942
  name: "deviceId",
48949
48943
  form: "single",
@@ -48984,16 +48978,36 @@ Object.freeze({
48984
48978
  form: "single",
48985
48979
  optional: false
48986
48980
  }],
48981
+ "automationControl.getStatus": [{
48982
+ name: "deviceId",
48983
+ form: "single",
48984
+ optional: false
48985
+ }],
48987
48986
  "automationControl.trigger": [{
48988
48987
  name: "deviceId",
48989
48988
  form: "single",
48990
48989
  optional: false
48991
48990
  }],
48991
+ "battery.getStatus": [{
48992
+ name: "deviceId",
48993
+ form: "single",
48994
+ optional: false
48995
+ }],
48992
48996
  "battery.wakeForStream": [{
48993
48997
  name: "deviceId",
48994
48998
  form: "single",
48995
48999
  optional: false
48996
49000
  }],
49001
+ "binary.getStatus": [{
49002
+ name: "deviceId",
49003
+ form: "single",
49004
+ optional: false
49005
+ }],
49006
+ "brightness.getStatus": [{
49007
+ name: "deviceId",
49008
+ form: "single",
49009
+ optional: false
49010
+ }],
48997
49011
  "brightness.setBrightness": [{
48998
49012
  name: "deviceId",
48999
49013
  form: "single",
@@ -49009,6 +49023,26 @@ Object.freeze({
49009
49023
  form: "single",
49010
49024
  optional: false
49011
49025
  }],
49026
+ "cameraCredentials.getStatus": [{
49027
+ name: "deviceId",
49028
+ form: "single",
49029
+ optional: false
49030
+ }],
49031
+ "cameraGridLayout.applyDeviceSettingsPatch": [{
49032
+ name: "deviceId",
49033
+ form: "single",
49034
+ optional: false
49035
+ }],
49036
+ "cameraGridLayout.getDeviceLiveContribution": [{
49037
+ name: "deviceId",
49038
+ form: "single",
49039
+ optional: false
49040
+ }],
49041
+ "cameraGridLayout.getDeviceSettingsContribution": [{
49042
+ name: "deviceId",
49043
+ form: "single",
49044
+ optional: false
49045
+ }],
49012
49046
  "cameraGridLayout.getLayout": [{
49013
49047
  name: "deviceId",
49014
49048
  form: "single",
@@ -49024,6 +49058,21 @@ Object.freeze({
49024
49058
  form: "single",
49025
49059
  optional: false
49026
49060
  }],
49061
+ "cameraPipelineConfig.applyDeviceSettingsPatch": [{
49062
+ name: "deviceId",
49063
+ form: "single",
49064
+ optional: false
49065
+ }],
49066
+ "cameraPipelineConfig.getDeviceLiveContribution": [{
49067
+ name: "deviceId",
49068
+ form: "single",
49069
+ optional: false
49070
+ }],
49071
+ "cameraPipelineConfig.getDeviceSettingsContribution": [{
49072
+ name: "deviceId",
49073
+ form: "single",
49074
+ optional: false
49075
+ }],
49027
49076
  "cameraStreams.getBrokerStreams": [{
49028
49077
  name: "deviceId",
49029
49078
  form: "single",
@@ -49049,6 +49098,16 @@ Object.freeze({
49049
49098
  form: "single",
49050
49099
  optional: false
49051
49100
  }],
49101
+ "carbonMonoxide.getStatus": [{
49102
+ name: "deviceId",
49103
+ form: "single",
49104
+ optional: false
49105
+ }],
49106
+ "climateControl.getStatus": [{
49107
+ name: "deviceId",
49108
+ form: "single",
49109
+ optional: false
49110
+ }],
49052
49111
  "climateControl.setFanMode": [{
49053
49112
  name: "deviceId",
49054
49113
  form: "single",
@@ -49089,16 +49148,41 @@ Object.freeze({
49089
49148
  form: "single",
49090
49149
  optional: false
49091
49150
  }],
49151
+ "color.getStatus": [{
49152
+ name: "deviceId",
49153
+ form: "single",
49154
+ optional: false
49155
+ }],
49092
49156
  "color.setColor": [{
49093
49157
  name: "deviceId",
49094
49158
  form: "single",
49095
49159
  optional: false
49096
49160
  }],
49161
+ "connectivity.getStatus": [{
49162
+ name: "deviceId",
49163
+ form: "single",
49164
+ optional: false
49165
+ }],
49166
+ "consumables.getStatus": [{
49167
+ name: "deviceId",
49168
+ form: "single",
49169
+ optional: false
49170
+ }],
49097
49171
  "consumables.reset": [{
49098
49172
  name: "deviceId",
49099
49173
  form: "single",
49100
49174
  optional: false
49101
49175
  }],
49176
+ "contact.getStatus": [{
49177
+ name: "deviceId",
49178
+ form: "single",
49179
+ optional: false
49180
+ }],
49181
+ "control.getStatus": [{
49182
+ name: "deviceId",
49183
+ form: "single",
49184
+ optional: false
49185
+ }],
49102
49186
  "control.setValue": [{
49103
49187
  name: "deviceId",
49104
49188
  form: "single",
@@ -49109,6 +49193,11 @@ Object.freeze({
49109
49193
  form: "single",
49110
49194
  optional: false
49111
49195
  }],
49196
+ "cover.getStatus": [{
49197
+ name: "deviceId",
49198
+ form: "single",
49199
+ optional: false
49200
+ }],
49112
49201
  "cover.open": [{
49113
49202
  name: "deviceId",
49114
49203
  form: "single",
@@ -49134,6 +49223,11 @@ Object.freeze({
49134
49223
  form: "single",
49135
49224
  optional: false
49136
49225
  }],
49226
+ "dayNight.getStatus": [{
49227
+ name: "deviceId",
49228
+ form: "single",
49229
+ optional: false
49230
+ }],
49137
49231
  "dayNight.setSettings": [{
49138
49232
  name: "deviceId",
49139
49233
  form: "single",
@@ -49144,11 +49238,31 @@ Object.freeze({
49144
49238
  form: "single",
49145
49239
  optional: true
49146
49240
  }],
49241
+ "detectionPipeline.applyDeviceSettingsPatch": [{
49242
+ name: "deviceId",
49243
+ form: "single",
49244
+ optional: false
49245
+ }],
49246
+ "detectionPipeline.getDeviceLiveContribution": [{
49247
+ name: "deviceId",
49248
+ form: "single",
49249
+ optional: false
49250
+ }],
49251
+ "detectionPipeline.getDeviceSettingsContribution": [{
49252
+ name: "deviceId",
49253
+ form: "single",
49254
+ optional: false
49255
+ }],
49147
49256
  "deviceAdminLink.getAdminLink": [{
49148
49257
  name: "deviceId",
49149
49258
  form: "single",
49150
49259
  optional: false
49151
49260
  }],
49261
+ "deviceAdoption.getStatus": [{
49262
+ name: "deviceId",
49263
+ form: "single",
49264
+ optional: false
49265
+ }],
49152
49266
  "deviceAdoption.release": [{
49153
49267
  name: "camDeviceId",
49154
49268
  form: "single",
@@ -49164,6 +49278,11 @@ Object.freeze({
49164
49278
  form: "single",
49165
49279
  optional: false
49166
49280
  }],
49281
+ "deviceDiscovery.getStatus": [{
49282
+ name: "deviceId",
49283
+ form: "single",
49284
+ optional: false
49285
+ }],
49167
49286
  "deviceDiscovery.listDiscovered": [{
49168
49287
  name: "deviceId",
49169
49288
  form: "single",
@@ -49183,6 +49302,21 @@ Object.freeze({
49183
49302
  form: "single",
49184
49303
  optional: false
49185
49304
  }],
49305
+ "deviceExport.applyDeviceSettingsPatch": [{
49306
+ name: "deviceId",
49307
+ form: "single",
49308
+ optional: false
49309
+ }],
49310
+ "deviceExport.getDeviceLiveContribution": [{
49311
+ name: "deviceId",
49312
+ form: "single",
49313
+ optional: false
49314
+ }],
49315
+ "deviceExport.getDeviceSettingsContribution": [{
49316
+ name: "deviceId",
49317
+ form: "single",
49318
+ optional: false
49319
+ }],
49186
49320
  "deviceExtension.listCandidates": [{
49187
49321
  name: "deviceId",
49188
49322
  form: "single",
@@ -49531,6 +49665,26 @@ Object.freeze({
49531
49665
  form: "single",
49532
49666
  optional: false
49533
49667
  }],
49668
+ "deviceStatus.getStatus": [{
49669
+ name: "deviceId",
49670
+ form: "single",
49671
+ optional: false
49672
+ }],
49673
+ "doorbell.getStatus": [{
49674
+ name: "deviceId",
49675
+ form: "single",
49676
+ optional: false
49677
+ }],
49678
+ "enumSensor.getStatus": [{
49679
+ name: "deviceId",
49680
+ form: "single",
49681
+ optional: false
49682
+ }],
49683
+ "eventEmitter.getStatus": [{
49684
+ name: "deviceId",
49685
+ form: "single",
49686
+ optional: false
49687
+ }],
49534
49688
  "faceGallery.getFaceByTrack": [{
49535
49689
  name: "deviceId",
49536
49690
  form: "single",
@@ -49545,6 +49699,11 @@ Object.freeze({
49545
49699
  form: "array",
49546
49700
  optional: true
49547
49701
  }],
49702
+ "fanControl.getStatus": [{
49703
+ name: "deviceId",
49704
+ form: "single",
49705
+ optional: false
49706
+ }],
49548
49707
  "fanControl.setDirection": [{
49549
49708
  name: "deviceId",
49550
49709
  form: "single",
@@ -49565,6 +49724,26 @@ Object.freeze({
49565
49724
  form: "single",
49566
49725
  optional: false
49567
49726
  }],
49727
+ "featureProbe.getStatus": [{
49728
+ name: "deviceId",
49729
+ form: "single",
49730
+ optional: false
49731
+ }],
49732
+ "flood.getStatus": [{
49733
+ name: "deviceId",
49734
+ form: "single",
49735
+ optional: false
49736
+ }],
49737
+ "gas.getStatus": [{
49738
+ name: "deviceId",
49739
+ form: "single",
49740
+ optional: false
49741
+ }],
49742
+ "humidifier.getStatus": [{
49743
+ name: "deviceId",
49744
+ form: "single",
49745
+ optional: false
49746
+ }],
49568
49747
  "humidifier.setMode": [{
49569
49748
  name: "deviceId",
49570
49749
  form: "single",
@@ -49580,11 +49759,26 @@ Object.freeze({
49580
49759
  form: "single",
49581
49760
  optional: false
49582
49761
  }],
49762
+ "humiditySensor.getStatus": [{
49763
+ name: "deviceId",
49764
+ form: "single",
49765
+ optional: false
49766
+ }],
49767
+ "image.getStatus": [{
49768
+ name: "deviceId",
49769
+ form: "single",
49770
+ optional: false
49771
+ }],
49583
49772
  "imageSettings.getOptions": [{
49584
49773
  name: "deviceId",
49585
49774
  form: "single",
49586
49775
  optional: false
49587
49776
  }],
49777
+ "imageSettings.getStatus": [{
49778
+ name: "deviceId",
49779
+ form: "single",
49780
+ optional: false
49781
+ }],
49588
49782
  "imageSettings.setSettings": [{
49589
49783
  name: "deviceId",
49590
49784
  form: "single",
@@ -49595,6 +49789,11 @@ Object.freeze({
49595
49789
  form: "single",
49596
49790
  optional: false
49597
49791
  }],
49792
+ "intercom.getStatus": [{
49793
+ name: "deviceId",
49794
+ form: "single",
49795
+ optional: false
49796
+ }],
49598
49797
  "intercom.handleAnswer": [{
49599
49798
  name: "deviceId",
49600
49799
  form: "single",
@@ -49625,6 +49824,11 @@ Object.freeze({
49625
49824
  form: "single",
49626
49825
  optional: false
49627
49826
  }],
49827
+ "lawnMowerControl.getStatus": [{
49828
+ name: "deviceId",
49829
+ form: "single",
49830
+ optional: false
49831
+ }],
49628
49832
  "lawnMowerControl.pause": [{
49629
49833
  name: "deviceId",
49630
49834
  form: "single",
@@ -49635,6 +49839,11 @@ Object.freeze({
49635
49839
  form: "single",
49636
49840
  optional: false
49637
49841
  }],
49842
+ "lockControl.getStatus": [{
49843
+ name: "deviceId",
49844
+ form: "single",
49845
+ optional: false
49846
+ }],
49638
49847
  "lockControl.lock": [{
49639
49848
  name: "deviceId",
49640
49849
  form: "single",
@@ -49650,6 +49859,11 @@ Object.freeze({
49650
49859
  form: "single",
49651
49860
  optional: false
49652
49861
  }],
49862
+ "mediaPlayer.getStatus": [{
49863
+ name: "deviceId",
49864
+ form: "single",
49865
+ optional: false
49866
+ }],
49653
49867
  "mediaPlayer.next": [{
49654
49868
  name: "deviceId",
49655
49869
  form: "single",
@@ -49710,6 +49924,11 @@ Object.freeze({
49710
49924
  form: "single",
49711
49925
  optional: false
49712
49926
  }],
49927
+ "motion.getStatus": [{
49928
+ name: "deviceId",
49929
+ form: "single",
49930
+ optional: false
49931
+ }],
49713
49932
  "motion.isDetected": [{
49714
49933
  name: "deviceId",
49715
49934
  form: "single",
@@ -49720,11 +49939,31 @@ Object.freeze({
49720
49939
  form: "single",
49721
49940
  optional: false
49722
49941
  }],
49942
+ "motionDetection.applyDeviceSettingsPatch": [{
49943
+ name: "deviceId",
49944
+ form: "single",
49945
+ optional: false
49946
+ }],
49947
+ "motionDetection.getDeviceLiveContribution": [{
49948
+ name: "deviceId",
49949
+ form: "single",
49950
+ optional: false
49951
+ }],
49952
+ "motionDetection.getDeviceSettingsContribution": [{
49953
+ name: "deviceId",
49954
+ form: "single",
49955
+ optional: false
49956
+ }],
49723
49957
  "motionDetection.removeCamera": [{
49724
49958
  name: "deviceId",
49725
49959
  form: "single",
49726
49960
  optional: false
49727
49961
  }],
49962
+ "motionTrigger.getStatus": [{
49963
+ name: "deviceId",
49964
+ form: "single",
49965
+ optional: false
49966
+ }],
49728
49967
  "motionTrigger.setMotionTrigger": [{
49729
49968
  name: "deviceId",
49730
49969
  form: "single",
@@ -49735,6 +49974,11 @@ Object.freeze({
49735
49974
  form: "single",
49736
49975
  optional: false
49737
49976
  }],
49977
+ "motionZones.getStatus": [{
49978
+ name: "deviceId",
49979
+ form: "single",
49980
+ optional: false
49981
+ }],
49738
49982
  "motionZones.setZone": [{
49739
49983
  name: "deviceId",
49740
49984
  form: "single",
@@ -49745,6 +49989,11 @@ Object.freeze({
49745
49989
  form: "single",
49746
49990
  optional: false
49747
49991
  }],
49992
+ "nativeObjectDetection.getStatus": [{
49993
+ name: "deviceId",
49994
+ form: "single",
49995
+ optional: false
49996
+ }],
49748
49997
  "nativeObjectDetection.setEnabled": [{
49749
49998
  name: "deviceId",
49750
49999
  form: "single",
@@ -49760,6 +50009,11 @@ Object.freeze({
49760
50009
  form: "single",
49761
50010
  optional: false
49762
50011
  }],
50012
+ "navigation.getStatus": [{
50013
+ name: "deviceId",
50014
+ form: "single",
50015
+ optional: false
50016
+ }],
49763
50017
  "navigation.goToPoint": [{
49764
50018
  name: "deviceId",
49765
50019
  form: "single",
@@ -49805,6 +50059,11 @@ Object.freeze({
49805
50059
  form: "single",
49806
50060
  optional: false
49807
50061
  }],
50062
+ "networkLink.getStatus": [{
50063
+ name: "deviceId",
50064
+ form: "single",
50065
+ optional: false
50066
+ }],
49808
50067
  "networkQuality.getDeviceStats": [{
49809
50068
  name: "deviceId",
49810
50069
  form: "single",
@@ -49830,11 +50089,26 @@ Object.freeze({
49830
50089
  form: "single",
49831
50090
  optional: false
49832
50091
  }],
50092
+ "notifier.getStatus": [{
50093
+ name: "deviceId",
50094
+ form: "single",
50095
+ optional: false
50096
+ }],
49833
50097
  "notifier.send": [{
49834
50098
  name: "deviceId",
49835
50099
  form: "single",
49836
50100
  optional: false
49837
50101
  }],
50102
+ "numericSensor.getStatus": [{
50103
+ name: "deviceId",
50104
+ form: "single",
50105
+ optional: false
50106
+ }],
50107
+ "osd.getStatus": [{
50108
+ name: "deviceId",
50109
+ form: "single",
50110
+ optional: false
50111
+ }],
49838
50112
  "osd.setOverlay": [{
49839
50113
  name: "deviceId",
49840
50114
  form: "single",
@@ -49894,6 +50168,11 @@ Object.freeze({
49894
50168
  form: "single",
49895
50169
  optional: false
49896
50170
  }],
50171
+ "petFeeder.getStatus": [{
50172
+ name: "deviceId",
50173
+ form: "single",
50174
+ optional: false
50175
+ }],
49897
50176
  "petFeeder.markFoodReplenished": [{
49898
50177
  name: "deviceId",
49899
50178
  form: "single",
@@ -49929,6 +50208,11 @@ Object.freeze({
49929
50208
  form: "single",
49930
50209
  optional: false
49931
50210
  }],
50211
+ "pipelineAnalytics.applyDeviceSettingsPatch": [{
50212
+ name: "deviceId",
50213
+ form: "single",
50214
+ optional: false
50215
+ }],
49932
50216
  "pipelineAnalytics.clearTrackRelation": [{
49933
50217
  name: "deviceId",
49934
50218
  form: "single",
@@ -49969,6 +50253,16 @@ Object.freeze({
49969
50253
  form: "single",
49970
50254
  optional: false
49971
50255
  }],
50256
+ "pipelineAnalytics.getDeviceLiveContribution": [{
50257
+ name: "deviceId",
50258
+ form: "single",
50259
+ optional: false
50260
+ }],
50261
+ "pipelineAnalytics.getDeviceSettingsContribution": [{
50262
+ name: "deviceId",
50263
+ form: "single",
50264
+ optional: false
50265
+ }],
49972
50266
  "pipelineAnalytics.getEventDensity": [{
49973
50267
  name: "deviceId",
49974
50268
  form: "single",
@@ -50184,6 +50478,11 @@ Object.freeze({
50184
50478
  form: "single",
50185
50479
  optional: true
50186
50480
  }],
50481
+ "pipelineOrchestrator.applyDeviceSettingsPatch": [{
50482
+ name: "deviceId",
50483
+ form: "single",
50484
+ optional: false
50485
+ }],
50187
50486
  "pipelineOrchestrator.assignAudio": [{
50188
50487
  name: "deviceId",
50189
50488
  form: "single",
@@ -50229,6 +50528,16 @@ Object.freeze({
50229
50528
  form: "single",
50230
50529
  optional: false
50231
50530
  }],
50531
+ "pipelineOrchestrator.getDeviceLiveContribution": [{
50532
+ name: "deviceId",
50533
+ form: "single",
50534
+ optional: false
50535
+ }],
50536
+ "pipelineOrchestrator.getDeviceSettingsContribution": [{
50537
+ name: "deviceId",
50538
+ form: "single",
50539
+ optional: false
50540
+ }],
50232
50541
  "pipelineOrchestrator.getPipelineAssignment": [{
50233
50542
  name: "deviceId",
50234
50543
  form: "single",
@@ -50349,11 +50658,31 @@ Object.freeze({
50349
50658
  form: "single",
50350
50659
  optional: true
50351
50660
  }],
50661
+ "powerMeter.getStatus": [{
50662
+ name: "deviceId",
50663
+ form: "single",
50664
+ optional: false
50665
+ }],
50666
+ "presence.getStatus": [{
50667
+ name: "deviceId",
50668
+ form: "single",
50669
+ optional: false
50670
+ }],
50671
+ "pressureSensor.getStatus": [{
50672
+ name: "deviceId",
50673
+ form: "single",
50674
+ optional: false
50675
+ }],
50352
50676
  "privacyMask.getOptions": [{
50353
50677
  name: "deviceId",
50354
50678
  form: "single",
50355
50679
  optional: false
50356
50680
  }],
50681
+ "privacyMask.getStatus": [{
50682
+ name: "deviceId",
50683
+ form: "single",
50684
+ optional: false
50685
+ }],
50357
50686
  "privacyMask.setAudioEnabled": [{
50358
50687
  name: "deviceId",
50359
50688
  form: "single",
@@ -50404,6 +50733,11 @@ Object.freeze({
50404
50733
  form: "single",
50405
50734
  optional: false
50406
50735
  }],
50736
+ "ptz.getStatus": [{
50737
+ name: "deviceId",
50738
+ form: "single",
50739
+ optional: false
50740
+ }],
50407
50741
  "ptz.goHome": [{
50408
50742
  name: "deviceId",
50409
50743
  form: "single",
@@ -50494,6 +50828,11 @@ Object.freeze({
50494
50828
  form: "single",
50495
50829
  optional: false
50496
50830
  }],
50831
+ "recordingArchive.applyDeviceSettingsPatch": [{
50832
+ name: "deviceId",
50833
+ form: "single",
50834
+ optional: false
50835
+ }],
50497
50836
  "recordingArchive.deleteFootprint": [{
50498
50837
  name: "deviceId",
50499
50838
  form: "single",
@@ -50514,6 +50853,21 @@ Object.freeze({
50514
50853
  form: "single",
50515
50854
  optional: false
50516
50855
  }],
50856
+ "recordingArchive.getDeviceLiveContribution": [{
50857
+ name: "deviceId",
50858
+ form: "single",
50859
+ optional: false
50860
+ }],
50861
+ "recordingArchive.getDeviceSettingsContribution": [{
50862
+ name: "deviceId",
50863
+ form: "single",
50864
+ optional: false
50865
+ }],
50866
+ "recordingArchive.getStatus": [{
50867
+ name: "deviceId",
50868
+ form: "single",
50869
+ optional: false
50870
+ }],
50517
50871
  "recordingArchive.listOpsLog": [{
50518
50872
  name: "deviceId",
50519
50873
  form: "single",
@@ -50599,6 +50953,11 @@ Object.freeze({
50599
50953
  form: "single",
50600
50954
  optional: false
50601
50955
  }],
50956
+ "recordingOnboard.getStatus": [{
50957
+ name: "deviceId",
50958
+ form: "single",
50959
+ optional: false
50960
+ }],
50602
50961
  "recordingOnboard.setSettings": [{
50603
50962
  name: "deviceId",
50604
50963
  form: "single",
@@ -50629,6 +50988,11 @@ Object.freeze({
50629
50988
  form: "single",
50630
50989
  optional: false
50631
50990
  }],
50991
+ "sceneMonitor.getStatus": [{
50992
+ name: "deviceId",
50993
+ form: "single",
50994
+ optional: false
50995
+ }],
50632
50996
  "sceneMonitor.listScenes": [{
50633
50997
  name: "deviceId",
50634
50998
  form: "single",
@@ -50654,6 +51018,11 @@ Object.freeze({
50654
51018
  form: "single",
50655
51019
  optional: false
50656
51020
  }],
51021
+ "scriptRunner.getStatus": [{
51022
+ name: "deviceId",
51023
+ form: "single",
51024
+ optional: false
51025
+ }],
50657
51026
  "scriptRunner.run": [{
50658
51027
  name: "deviceId",
50659
51028
  form: "single",
@@ -50664,11 +51033,31 @@ Object.freeze({
50664
51033
  form: "single",
50665
51034
  optional: false
50666
51035
  }],
51036
+ "smoke.getStatus": [{
51037
+ name: "deviceId",
51038
+ form: "single",
51039
+ optional: false
51040
+ }],
51041
+ "snapshot.applyDeviceSettingsPatch": [{
51042
+ name: "deviceId",
51043
+ form: "single",
51044
+ optional: false
51045
+ }],
50667
51046
  "snapshot.getDebugState": [{
50668
51047
  name: "deviceId",
50669
51048
  form: "single",
50670
51049
  optional: false
50671
51050
  }],
51051
+ "snapshot.getDeviceLiveContribution": [{
51052
+ name: "deviceId",
51053
+ form: "single",
51054
+ optional: false
51055
+ }],
51056
+ "snapshot.getDeviceSettingsContribution": [{
51057
+ name: "deviceId",
51058
+ form: "single",
51059
+ optional: false
51060
+ }],
50672
51061
  "snapshot.getSnapshot": [{
50673
51062
  name: "deviceId",
50674
51063
  form: "single",
@@ -50685,6 +51074,11 @@ Object.freeze({
50685
51074
  form: "array",
50686
51075
  optional: false
50687
51076
  }],
51077
+ "snapshot.getStatus": [{
51078
+ name: "deviceId",
51079
+ form: "single",
51080
+ optional: false
51081
+ }],
50688
51082
  "snapshot.invalidateCache": [{
50689
51083
  name: "deviceId",
50690
51084
  form: "single",
@@ -50695,6 +51089,11 @@ Object.freeze({
50695
51089
  form: "single",
50696
51090
  optional: false
50697
51091
  }],
51092
+ "streamBroker.applyDeviceSettingsPatch": [{
51093
+ name: "deviceId",
51094
+ form: "single",
51095
+ optional: false
51096
+ }],
50698
51097
  "streamBroker.assignProfile": [{
50699
51098
  name: "deviceId",
50700
51099
  form: "single",
@@ -50710,6 +51109,16 @@ Object.freeze({
50710
51109
  form: "single",
50711
51110
  optional: false
50712
51111
  }],
51112
+ "streamBroker.getDeviceLiveContribution": [{
51113
+ name: "deviceId",
51114
+ form: "single",
51115
+ optional: false
51116
+ }],
51117
+ "streamBroker.getDeviceSettingsContribution": [{
51118
+ name: "deviceId",
51119
+ form: "single",
51120
+ optional: false
51121
+ }],
50713
51122
  "streamBroker.getStreamWithCodec": [{
50714
51123
  name: "deviceId",
50715
51124
  form: "single",
@@ -50770,16 +51179,46 @@ Object.freeze({
50770
51179
  form: "single",
50771
51180
  optional: false
50772
51181
  }],
51182
+ "streamParams.getStatus": [{
51183
+ name: "deviceId",
51184
+ form: "single",
51185
+ optional: false
51186
+ }],
50773
51187
  "streamParams.setProfile": [{
50774
51188
  name: "deviceId",
50775
51189
  form: "single",
50776
51190
  optional: false
50777
51191
  }],
51192
+ "switch.getStatus": [{
51193
+ name: "deviceId",
51194
+ form: "single",
51195
+ optional: false
51196
+ }],
50778
51197
  "switch.setState": [{
50779
51198
  name: "deviceId",
50780
51199
  form: "single",
50781
51200
  optional: false
50782
51201
  }],
51202
+ "tamper.getStatus": [{
51203
+ name: "deviceId",
51204
+ form: "single",
51205
+ optional: false
51206
+ }],
51207
+ "temperatureSensor.getStatus": [{
51208
+ name: "deviceId",
51209
+ form: "single",
51210
+ optional: false
51211
+ }],
51212
+ "update.getStatus": [{
51213
+ name: "deviceId",
51214
+ form: "single",
51215
+ optional: false
51216
+ }],
51217
+ "vacuumControl.getStatus": [{
51218
+ name: "deviceId",
51219
+ form: "single",
51220
+ optional: false
51221
+ }],
50783
51222
  "vacuumControl.locate": [{
50784
51223
  name: "deviceId",
50785
51224
  form: "single",
@@ -50815,6 +51254,11 @@ Object.freeze({
50815
51254
  form: "single",
50816
51255
  optional: false
50817
51256
  }],
51257
+ "valve.getStatus": [{
51258
+ name: "deviceId",
51259
+ form: "single",
51260
+ optional: false
51261
+ }],
50818
51262
  "valve.open": [{
50819
51263
  name: "deviceId",
50820
51264
  form: "single",
@@ -50830,6 +51274,11 @@ Object.freeze({
50830
51274
  form: "single",
50831
51275
  optional: false
50832
51276
  }],
51277
+ "vibration.getStatus": [{
51278
+ name: "deviceId",
51279
+ form: "single",
51280
+ optional: false
51281
+ }],
50833
51282
  "videoclips.dialClipStream": [{
50834
51283
  name: "deviceId",
50835
51284
  form: "single",
@@ -50865,6 +51314,11 @@ Object.freeze({
50865
51314
  form: "single",
50866
51315
  optional: false
50867
51316
  }],
51317
+ "waterHeater.getStatus": [{
51318
+ name: "deviceId",
51319
+ form: "single",
51320
+ optional: false
51321
+ }],
50868
51322
  "waterHeater.setAway": [{
50869
51323
  name: "deviceId",
50870
51324
  form: "single",
@@ -50880,6 +51334,11 @@ Object.freeze({
50880
51334
  form: "single",
50881
51335
  optional: false
50882
51336
  }],
51337
+ "weather.getStatus": [{
51338
+ name: "deviceId",
51339
+ form: "single",
51340
+ optional: false
51341
+ }],
50883
51342
  "webrtcSession.addIceCandidate": [{
50884
51343
  name: "deviceId",
50885
51344
  form: "single",
@@ -51617,7 +52076,7 @@ var PreviewTextField = string().max(200);
51617
52076
  * Whether the notification's preview is a STILL or a short animation.
51618
52077
  *
51619
52078
  * The operator's ask, verbatim: *"inviato come gif o video (come per le altre
51620
- * rule)"* — the other rules already offer an animated preview, and a ten-hour
52079
+ * rule)"* [sent as a gif or video (as for the other rules)] — the other rules already offer an animated preview, and a ten-hour
51621
52080
  * night reads better as three seconds of motion than as one frame of it. Both
51622
52081
  * modes get the SAME treatment (blurred frame, large centred title); `'gif'`
51623
52082
  * simply applies it to a dozen frames sampled across the render and assembles