@camstack/addon-provider-amcrest 0.2.126 → 0.2.127

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 +600 -141
  2. package/dist/addon.mjs +600 -141
  3. package/package.json +1 -3
package/dist/addon.mjs CHANGED
@@ -7426,7 +7426,7 @@ var DeviceRole = /* @__PURE__ */ function(DeviceRole) {
7426
7426
  return DeviceRole;
7427
7427
  }({});
7428
7428
  //#endregion
7429
- //#region ../types/dist/composition-43aqsZQj.mjs
7429
+ //#region ../types/dist/composition-Bzr7GwgP.mjs
7430
7430
  /**
7431
7431
  * The ffmpeg build every CamStack node downloads, per platform and arch.
7432
7432
  *
@@ -7480,20 +7480,20 @@ function portable(target) {
7480
7480
  }
7481
7481
  portable("linux64"), portable("linuxarm64"), portable("macarm64"), portable("mac64");
7482
7482
  /**
7483
- * LA tabella "quale booleano di questo tipo di device conta come ALTO", e il
7484
- * valutatore puro del suo FRONTE.
7483
+ * THE table "which boolean of this device type counts as HIGH", and the
7484
+ * pure evaluator of its EDGE.
7485
7485
  *
7486
- * UNA tabella per tutti quelli che chiedono "questo device è ALTO?": il
7487
- * trigger `RecordingTriggers.sensorDeviceIds` del recorder, i marker dei
7488
- * sensori della post-analysis, il bridge camera-sensors dell'orchestratore e
7489
- * le sorgenti di un campanello composto (`doorbellFeatureSources`, D671).
7490
- * Una seconda copia divergerebbe alla prima cap aggiunta, e il sintomo — "il
7491
- * sensore fa suonare il campanello ma non registra" — è esattamente D62.
7486
+ * ONE table for everyone who asks "is this device HIGH?": the
7487
+ * recorder's `RecordingTriggers.sensorDeviceIds` trigger, the post-analysis
7488
+ * sensor markers, the orchestrator's camera-sensors bridge and
7489
+ * the sources of a composite doorbell (`doorbellFeatureSources`, D671).
7490
+ * A second copy would diverge at the first cap added, and the symptom — "the
7491
+ * sensor rings the doorbell but does not record" — is exactly D62.
7492
7492
  *
7493
- * ⚠ NON è `DEVICE_STATE_READERS` (`catalogs/device-state-vocabulary.ts`), e le
7494
- * due non vanno unificate: quella risponde a "qual è la PAROLA di stato per una
7495
- * regola" (e include `presence`, `cover`, `alarm-panel`), questa a "qual è il
7496
- * booleano il cui FRONTE conta". Vocabolari deliberatamente diversi.
7493
+ * ⚠ NOT `DEVICE_STATE_READERS` (`catalogs/device-state-vocabulary.ts`), and the
7494
+ * two must not be unified: that one answers "what is the state WORD for a
7495
+ * rule" (and includes `presence`, `cover`, `alarm-panel`), this one "which
7496
+ * boolean's EDGE counts". Deliberately different vocabularies.
7497
7497
  */
7498
7498
  /**
7499
7499
  * Known binary / switch source caps → the boolean slice field whose
@@ -7514,6 +7514,8 @@ var SOURCE_CAP_ACTIVE_FIELD = {
7514
7514
  vibration: "detected",
7515
7515
  tamper: "tampered"
7516
7516
  };
7517
+ /** Cap names whose presence in a device's bindings qualify it as a source. */
7518
+ var SOURCE_CAPS = Object.keys(SOURCE_CAP_ACTIVE_FIELD);
7517
7519
  /**
7518
7520
  * Error types for the safe expression engine. Two distinct classes so callers
7519
7521
  * can tell a compile-time (grammar) failure from a runtime (evaluation)
@@ -9120,22 +9122,22 @@ var CLASS_MAP_MACRO_TARGETS = [
9120
9122
  "package"
9121
9123
  ];
9122
9124
  /**
9123
- * Le macro classi di PRIMO LIVELLO: quelle che un object detector emette e che
9124
- * un operatore può selezionare.
9125
+ * The FIRST-LEVEL macro classes: those an object detector emits and that
9126
+ * an operator can select.
9125
9127
  *
9126
- * Sono le tre offerte dallo step `object-detection`
9128
+ * They are the three offered by the `object-detection` step
9127
9129
  * (`addon-pipeline/src/detection-pipeline/registry/step-definitions.ts`,
9128
- * `enabledMacroClasses`). `package` sta in {@link CLASS_MAP_MACRO_TARGETS} e in
9129
- * `MACRO_LABELS` — è una macro vera — ma NON qui: appartiene allo step
9130
- * `package-detection`, la cui abilitazione è guidata dalle zone, e offrire la
9131
- * stessa parola due volte ha già fatto accendere a un operatore il proxy COCO
9130
+ * `enabledMacroClasses`). `package` is in {@link CLASS_MAP_MACRO_TARGETS} and in
9131
+ * `MACRO_LABELS` — it is a true macro — but NOT here: it belongs to the step
9132
+ * `package-detection`, whose enablement is driven by zones, and offering the
9133
+ * same word twice has already made an operator turn on the COCO proxy
9132
9134
  * (suitcase/backpack/handbag) lasciando spento il detector dedicato.
9133
9135
  *
9134
- * UNA lista. Prima di oggi le stesse tre erano scritte a mano nell'offerta
9135
- * dello step e una seconda volta come union `FirstLevelMacro`
9136
- * (`types/detection.ts`); una terza copia per il trigger di registrazione
9137
- * (`RecordingTriggers.objectClasses`) avrebbe reso invisibile la divergenza
9138
- * successiva.
9136
+ * ONE list. Before today the same three were hand-written in the step's offer
9137
+ * and a second time as the union `FirstLevelMacro`
9138
+ * (`types/detection.ts`); a third copy for the recording trigger
9139
+ * (`RecordingTriggers.objectClasses`) would have made the later divergence
9140
+ * invisible.
9139
9141
  */
9140
9142
  var FIRST_LEVEL_MACRO_CLASSES = [
9141
9143
  "person",
@@ -9200,17 +9202,17 @@ var RecordingStorageModeSchema = _enum([
9200
9202
  "on-device-decision"
9201
9203
  ]);
9202
9204
  /**
9203
- * Le macro classi che possono aprire una finestra di registrazione — le stesse
9204
- * tre offerte dallo step `object-detection`, da UNA lista
9205
+ * The macro classes that can open a recording window — the same
9206
+ * three offered by the `object-detection` step, from ONE list
9205
9207
  * ({@link FIRST_LEVEL_MACRO_CLASSES}).
9206
9208
  */
9207
9209
  var RecordingObjectTriggerClassSchema = _enum(FIRST_LEVEL_MACRO_CLASSES);
9208
9210
  /**
9209
- * True quando `values` non ripete un elemento.
9211
+ * True when `values` does not repeat an element.
9210
9212
  *
9211
- * Un duplicato non è innocuo: ogni voce di `objectClasses` / `sensorDeviceIds`
9212
- * diventa una SORGENTE in `bandTriggerSources`, e la stessa sorgente due volte
9213
- * conterebbe due volte le sue finestre in `segmentMissedByMs`.
9213
+ * A duplicate is not harmless: every entry of `objectClasses` / `sensorDeviceIds`
9214
+ * becomes a SOURCE in `bandTriggerSources`, and the same source twice
9215
+ * would count its windows twice in `segmentMissedByMs`.
9214
9216
  */
9215
9217
  var noDuplicates = (values) => new Set(values).size === values.length;
9216
9218
  /** Which detectors trigger an `events`-mode band. */
@@ -9218,34 +9220,34 @@ var RecordingTriggersSchema = object({
9218
9220
  motion: boolean().optional(),
9219
9221
  audioThresholdDbfs: number().optional(),
9220
9222
  /**
9221
- * Le macro classi la cui detection apre una finestra. ASSENTE = la sorgente
9222
- * non è ascoltata; un array VUOTO è rifiutato, perché "banda events, trigger
9223
- * object acceso, nessuna classe" è la stessa forma "abilitata e non registra
9224
- * nulla, per sempre" contro cui è scritto `eventsBandCanEverDemand`.
9223
+ * The macro classes whose detection opens a window. ABSENT = the source
9224
+ * is not listened to; an EMPTY array is rejected, because "events band, object
9225
+ * trigger on, no class" is the same shape "enabled and records
9226
+ * nothing, forever" that `eventsBandCanEverDemand` is written against.
9225
9227
  *
9226
- * Il segnale letto è GIÀ FILTRATO: solo detection `source: 'pipeline'`, cioè
9227
- * quelle che hanno attraversato `enabledMacroClasses`, i
9228
- * `minConfidence<Macro>` e il full-frame guard. L'AI a bordo camera
9229
- * (`source: 'onboard'`) non attraversa nessuno di quei gate e NON apre
9230
- * finestre — vedi `recorder/object-trigger.ts`.
9228
+ * The signal read is ALREADY FILTERED: only `source: 'pipeline'` detections, i.e.
9229
+ * those that went through `enabledMacroClasses`, the
9230
+ * `minConfidence<Macro>` and the full-frame guard. The camera's onboard AI
9231
+ * (`source: 'onboard'`) goes through none of those gates and does NOT open
9232
+ * windows — see `recorder/object-trigger.ts`.
9231
9233
  */
9232
9234
  objectClasses: array(RecordingObjectTriggerClassSchema).min(1).refine(noDuplicates, { message: "objectClasses must not repeat a class" }).optional(),
9233
9235
  /**
9234
- * I device LINKED il cui FRONTE ALTO apre una finestra. Assente = la sorgente
9235
- * non è ascoltata; un array vuoto è rifiutato per la stessa ragione di
9236
+ * The LINKED devices whose RISING EDGE opens a window. Absent = the source
9237
+ * is not listened to; an empty array is rejected for the same reason as
9236
9238
  * `objectClasses`.
9237
9239
  *
9238
- * Sono id di device SORGENTE, non camere: la banda li nomina, quindi il
9239
- * percorso caldo (`DeviceStateChanged`, a ritmo di bus su tutta la flotta)
9240
- * non fa RPC. L'OFFERTA da cui l'operatore li sceglie è un'altra domanda, e
9241
- * si risolve con `deviceManager.getLinkedDevices` + `getBindingsBatch` per
9242
- * device (D12) — mai un elenco globale di cap.
9240
+ * These are SOURCE device ids, not cameras: the band names them, so the
9241
+ * hot path (`DeviceStateChanged`, at bus rate across the whole fleet)
9242
+ * does no RPC. The OFFER from which the operator picks them is another question, and
9243
+ * is resolved with `deviceManager.getLinkedDevices` + `getBindingsBatch` per
9244
+ * device (D12) — never a global list of caps.
9243
9245
  *
9244
- * Cosa vuol dire "alto" dipende dal TIPO di device e non è deciso qui:
9245
- * `SOURCE_CAP_ACTIVE_FIELD` (`catalogs/sensor-active-state.ts`) è LA tabella,
9246
- * la stessa del campanello composto (D671). Ed è il FRONTE, non
9247
- * il livello: un contatto trovato già aperto al riavvio del runner non fa
9248
- * registrare.
9246
+ * What "high" means depends on the device TYPE and is not decided here:
9247
+ * `SOURCE_CAP_ACTIVE_FIELD` (`catalogs/sensor-active-state.ts`) is THE table,
9248
+ * the same one as the composite doorbell (D671). And it is the EDGE, not
9249
+ * the level: a contact found already open at runner restart does not
9250
+ * record.
9249
9251
  */
9250
9252
  sensorDeviceIds: array(number().int().positive()).min(1).max(16).refine(noDuplicates, { message: "sensorDeviceIds must not repeat a device" }).optional()
9251
9253
  });
@@ -10322,7 +10324,7 @@ var DecoderSessionConfigSchema = object({
10322
10324
  * - **VALUE** — at which level, for which scope, until when. That stays ONE
10323
10325
  * thing: the logging settings document on the `system` cap. Two authorities
10324
10326
  * over the values is the exact defect
10325
- * `docs/design/plans/2026-08-26-logging-per-componente.md` was written to
10327
+ * `docs/design/plans/2026-08-26-per-component-logging.md` was written to
10326
10328
  * remove; re-introducing it from the cure side would be grotesque.
10327
10329
  *
10328
10330
  * Nothing in this file reads a clock, an env var or a store. The registry is
@@ -12033,7 +12035,7 @@ var BrokerStatusEnum = _enum([
12033
12035
  "unreachable",
12034
12036
  "error"
12035
12037
  ]);
12036
- var BrokerInfoSchema$1 = object({
12038
+ var BrokerInfoSchema = object({
12037
12039
  /** Stable broker id. Persisted; survives addon restarts. */
12038
12040
  id: string(),
12039
12041
  /** Addon id of the provider that OWNS this broker.
@@ -12166,7 +12168,7 @@ var GetStateInputSchema = object({
12166
12168
  * HA: entity_id (returns the cached entity state). */
12167
12169
  key: string()
12168
12170
  });
12169
- method(ListInputSchema, array(BrokerInfoSchema$1)), method(GetInputSchema, BrokerInfoSchema$1.nullable()), method(_void(), array(BrokerProviderInfoSchema), { auth: "admin" }), method(AddInputSchema, AddResultSchema, {
12171
+ method(ListInputSchema, array(BrokerInfoSchema)), method(GetInputSchema, BrokerInfoSchema.nullable()), method(_void(), array(BrokerProviderInfoSchema), { auth: "admin" }), method(AddInputSchema, AddResultSchema, {
12170
12172
  kind: "mutation",
12171
12173
  auth: "admin"
12172
12174
  }), method(RemoveInputSchema, _void(), {
@@ -13877,7 +13879,7 @@ method(_void(), EngineInfoSchema, { auth: "admin" }), method(object({
13877
13879
  *
13878
13880
  * ⚠ An earlier version of this comment blamed Zod stripping, and that
13879
13881
  * was wrong — corrected 2026-08-26 after the hop map
13880
- * (`docs/design/2026-08-26-mappa-hop-argomenti.md`) traced the path.
13882
+ * (`docs/design/2026-08-26-topic-hop-map.md`) traced the path.
13881
13883
  * There is **no Zod parse at all** between the door and the engine: the
13882
13884
  * dispatcher forwards the payload verbatim and UDS carries it whole. A
13883
13885
  * field declared here reaches `SqliteSettingsBackend` either way.
@@ -16080,7 +16082,7 @@ method(object({
16080
16082
  * per-device window, `KeyFrameCaptureLog`, `bumpCropMetric`. Every one of them
16081
16083
  * ends in a log line, and a log line is the thing the operator asked to stop
16082
16084
  * needing: *"possiamo armare questi errori intanto? Così al prossimo giro
16083
- * ricontrolliamo tutti questi punti"*. Reading them meant grepping Loki and
16085
+ * 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
16084
16086
  * hand-correlating timestamps, which is how a 22% thumbnail gap and a 3-hour
16085
16087
  * media blackout were both diagnosed. The counters stay; this is where they can
16086
16088
  * be READ.
@@ -17456,7 +17458,7 @@ var BrokerStatusSchema$1 = _enum([
17456
17458
  "unreachable",
17457
17459
  "tls-error"
17458
17460
  ]);
17459
- var BrokerInfoSchema = object({
17461
+ var BrokerInfoSchema$1 = object({
17460
17462
  id: string(),
17461
17463
  name: string(),
17462
17464
  url: string(),
@@ -17519,7 +17521,7 @@ var StatusSchema = object({
17519
17521
  brokerCount: number(),
17520
17522
  embeddedRunning: boolean()
17521
17523
  });
17522
- method(_void(), array(BrokerInfoSchema)), method(IdInputSchema, BrokerConnectionDetailsSchema, { auth: "admin" }), method(AddBrokerInputSchema, AddBrokerResultSchema, {
17524
+ method(_void(), array(BrokerInfoSchema$1)), method(IdInputSchema, BrokerConnectionDetailsSchema, { auth: "admin" }), method(AddBrokerInputSchema, AddBrokerResultSchema, {
17523
17525
  kind: "mutation",
17524
17526
  auth: "admin"
17525
17527
  }), method(IdInputSchema, _void(), {
@@ -19733,78 +19735,16 @@ var NcRuleInputSchema = object({
19733
19735
  */
19734
19736
  confirm: NcConfirmSchema.optional(),
19735
19737
  /**
19736
- * WAIT for face/plate recognition before saying anything.
19737
- *
19738
- * A notification's TEXT is frozen at enqueue and its media is re-resolved at
19739
- * send; the identity is neither. A face is confirmed after `confirmFrames`
19740
- * agreeing observations — p50 **11.4 s** after the track was first seen,
19741
- * measured on this hub — and an `immediate` rule enqueues on the first object
19742
- * event, seconds before that. So "Gianluca è arrivato" is unsayable on the
19743
- * immediate path, and no amount of media re-resolution fixes a sentence.
19744
- *
19745
- * Only two honest answers exist, and this flag picks between them. It has
19746
- * effect ONLY on a rule that declares a recognition scope
19747
- * ({@link NcConditions.identities} or {@link NcConditions.plates}) — on any
19748
- * other rule there is nothing to wait for and the flag is inert.
19749
- *
19750
- * | value | what happens |
19751
- * | --- | --- |
19752
- * | `true` | the rule stops firing on the object event and fires at TRACK CLOSE instead, once, with the name — later, and complete |
19753
- * | 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) |
19754
- *
19755
- * `.optional()` and deliberately NOT `.default()`: a Zod default does not run
19756
- * on the addon cap path, and absent has to keep meaning exactly what every
19757
- * rule authored before this field meant.
19758
- *
19759
- * The cost of `true` is stated here because the editor states it too: a rule
19760
- * that waits also inherits track-close SEMANTICS — its `zones` condition
19761
- * tests every zone the track visited and a `crossing` condition can no longer
19762
- * be satisfied, because a closed track carries no crossing.
19738
+ * IMMEDIATE GROUPED (D692): the first matching subject opens a window of this many
19739
+ * seconds; the rule sends ONE message when the window closes — early, once every
19740
+ * subject in it is final, never before {@link NC_GROUPING_MIN_SEC} — naming everybody
19741
+ * the rule matched, with one mosaic tile per subject.
19742
+ * Absent = plain immediate (one message per track, at the first match).
19743
+ * Only an `immediate` DETECTION rule may carry it (`ruleGroupingApplies`, enforced on
19744
+ * save by the hub's grouping guard). `.optional()`, never `.default()`: the addon cap
19745
+ * path does not run Zod defaults.
19763
19746
  */
19764
- waitForEnhancement: boolean().optional(),
19765
- /**
19766
- * GROUP a burst of subjects into ONE notification that grows.
19767
- *
19768
- * Seconds of quiet after the last matching subject before the burst is
19769
- * considered over. While it is open, the first subject enqueues immediately —
19770
- * **exactly as today, with no added latency** — and every real growth (a new
19771
- * subject, or a name confirmed on one already in it) REPLACES that
19772
- * notification with an updated one naming everybody. The push carries the
19773
- * group's own coalescing tag, so the phone replaces rather than stacks.
19774
- *
19775
- * `0` / absent = off, and off is today's behaviour byte for byte.
19776
- *
19777
- * ### Why an idle cutoff and not a window
19778
- *
19779
- * The measured seven-person arrival on device 590 spans 110 s with every
19780
- * internal gap under 30 s. A 12 s fixed window cuts it into three groups; an
19781
- * idle cutoff holds it as one and ends it when the arrival actually ends.
19782
- * 30 s is a widely shipped value for the same decision.
19783
- *
19784
- * ### What it replaces
19785
- *
19786
- * The blind cooldown, which collapses a burst by DISCARDING it. Measured on
19787
- * device 615 / *Persona su Uscio* over six days: 116 qualifying tracks → 74
19788
- * notifications, **44 (37.9%) suppressed outright**, 23 of them overlapping a
19789
- * track that did fire and 7 carrying a confirmed identity nobody heard about.
19790
- * A group collapses the same volume by MERGING, so the cooldown becomes a
19791
- * budget over GROUPS — which is what it always meant — and a growth is never
19792
- * throttled by the window its own first member spent.
19793
- *
19794
- * ### Interaction with {@link waitForEnhancement}
19795
- *
19796
- * They compose, and the order matters. `waitForEnhancement` defers the rule to
19797
- * TRACK CLOSE, so with both set the group is opened by the first member to
19798
- * CLOSE — already carrying its name — and grows as later members close. That
19799
- * is later, and complete. With grouping alone the group opens on the first
19800
- * object event and picks up names as they are confirmed, through the growth
19801
- * path. Neither combination fires twice for one subject.
19802
- *
19803
- * `.optional()` and deliberately NOT `.default()`: a Zod default does not run
19804
- * on the addon cap path, so absent must keep meaning what it meant before this
19805
- * field existed.
19806
- */
19807
- groupIdleSec: number().int().min(0).max(600).optional()
19747
+ groupingSec: number().int().min(5).max(60).optional()
19808
19748
  });
19809
19749
  /**
19810
19750
  * Partial patch for `updateRule` — any subset of the input fields, plus the
@@ -19852,9 +19792,10 @@ var NcRuleClearableKeySchema = _enum([
19852
19792
  "targetUsers",
19853
19793
  "snoozeOptions",
19854
19794
  "snoozeAllowGlobal",
19855
- "waitForEnhancement",
19856
19795
  "actions",
19857
19796
  "confirm",
19797
+ "groupingSec",
19798
+ "waitForEnhancement",
19858
19799
  "groupIdleSec"
19859
19800
  ]);
19860
19801
  var NcRuleUpdateInputSchema = object({
@@ -19876,9 +19817,25 @@ var NcRuleSchema = NcRuleInputSchema.extend({
19876
19817
  */
19877
19818
  disabledTargetIds: array(string()).default([])
19878
19819
  });
19820
+ /**
19821
+ * The state-summary SECTIONS (D647 / D698): the D637 kind groups that report a
19822
+ * still-true state. `backups-exports` and `alarm` are not sections — a completed
19823
+ * job is not an open state, and the alarm stays instant.
19824
+ */
19825
+ var NcStateSummarySectionIdSchema = _enum([
19826
+ "device-state",
19827
+ "streams",
19828
+ "battery",
19829
+ "consumables",
19830
+ "tanks",
19831
+ "detection-blind",
19832
+ "nodes",
19833
+ "addons",
19834
+ "updates"
19835
+ ]);
19879
19836
  /** One section of a previewed state summary. `unavailable` = its state could not be read. */
19880
19837
  var NcStateSummaryPreviewSectionSchema = object({
19881
- id: string(),
19838
+ id: NcStateSummarySectionIdSchema,
19882
19839
  status: _enum(["read", "unavailable"]),
19883
19840
  items: number().int().nonnegative(),
19884
19841
  reason: string().optional()
@@ -19888,7 +19845,7 @@ var NcStateSummaryPreviewSectionSchema = object({
19888
19845
  * a `rule` split (no `section`), one section's on a `section` split.
19889
19846
  */
19890
19847
  var NcStateSummaryPreviewRowSchema = object({
19891
- section: string().optional(),
19848
+ section: NcStateSummarySectionIdSchema.optional(),
19892
19849
  /** The section's name on a per-section row; every reported section's, joined, on a combined one. */
19893
19850
  title: string(),
19894
19851
  text: string(),
@@ -21787,14 +21744,14 @@ var TrackSchema = object({
21787
21744
  * `derive-returned-null tile=standin`,
21788
21745
  * `native-tile tile=native no-key-frame-at-close`, …) written at close and
21789
21746
  * CLEARED by the late-keyFrame upgrade when a native tile lands after all.
21790
- * The operator-facing answer to "perché manca l'immagine?" on a track whose
21747
+ * The operator-facing answer to "perché manca l'immagine?" [why is the image missing?] on a track whose
21791
21748
  * tile is a face/plate stand-in, a raster crop, or an icon.
21792
21749
  *
21793
21750
  * **`no-key-frame-at-close` (D400).** The line used to be written ONLY when
21794
21751
  * the TILE ranked below native, so a track whose thumbnail landed natively
21795
21752
  * while its key frame missed carried no reason at all — three of the four
21796
21753
  * `MISSING_KEYFRAME` tracks in the 2026-09-07 operator audit were exactly
21797
- * that shape, and their "niente ultimo" had no cause anywhere on the row.
21754
+ * that shape, and their "niente ultimo" [no last frame] had no cause anywhere on the row.
21798
21755
  * The key frame is the head of a cascade (`keyFrame ⇒ keyFrameSmall ⇒ the
21799
21756
  * lastFrame copy source`), so its absence is now on this line whatever the
21800
21757
  * tile ended up being.
@@ -21881,7 +21838,7 @@ var MotionEventSchema = object({
21881
21838
  /**
21882
21839
  * Ms offsets from `timestamp` (the episode's own first rising edge, so the
21883
21840
  * first entry is always `0`) of every genuine off→on transition the
21884
- * episode saw — "ogni evento on si deve salvare" (D475). NOT one entry per
21841
+ * episode saw — "ogni evento on si deve salvare" [every ON event must be saved] (D475). NOT one entry per
21885
21842
  * push: a firmware source that keepalives at ~1 Hz for the whole burst
21886
21843
  * (Reolink, Hikvision) produces exactly one edge; a source that reports an
21887
21844
  * explicit `false` mid-episode and then resumes before the quiet window
@@ -22405,6 +22362,7 @@ var KeyEventSchema = object({
22405
22362
  bestEventId: string(),
22406
22363
  /** Track lifetime in ms (lastSeen - firstSeen). */
22407
22364
  windowMs: number().optional(),
22365
+ audioLabels: array(TrackAudioLabelSchema).readonly().optional(),
22408
22366
  ...TrackFlagFields,
22409
22367
  ...TrackRetrainFields
22410
22368
  });
@@ -27329,7 +27287,7 @@ var ClipPlaybackSchema = object({
27329
27287
  * **One authorised yes is one wake.** `next-natural` — take the clip the next
27330
27288
  * time the camera is awake for its own reasons — is deliberately not a member:
27331
27289
  * it was proposed, it is free on the battery, and the operator declined it on
27332
- * 2026-09-20 (*"Quando un export viene richiesto si sveglia la camera."*,
27290
+ * 2026-09-20 (*"Quando un export viene richiesto si sveglia la camera."* [When an export is requested the camera wakes up],
27333
27291
  * D558 "Considered and not taken").
27334
27292
  */
27335
27293
  var ClipWakeSchema = _enum(["authorised"]);
@@ -27725,7 +27683,7 @@ var videoclipsCapability = {
27725
27683
  * **It is a SECTION of the Recording tab, at the end of it — not a tab of
27726
27684
  * its own.** It shipped as a `clips` top-tab and the operator rejected the
27727
27685
  * placement: *"utilizzerei la stessa tab recordings, lì abbiamo già tutto il
27728
- * necessario, una nuova sezione alla fine per le clips"*. The Recording tab
27686
+ * necessario, una nuova sezione alla fine per le clips"* [I would use the same recordings tab, there we already have everything necessary, a new section at the end for the clips]. The Recording tab
27729
27687
  * already holds the recorder's panel, the schedule bands and the unified
27730
27688
  * retention policy; footage the camera itself holds is the same question,
27731
27689
  * asked of a different store. `order: 100` puts it after all of them with
@@ -27786,7 +27744,7 @@ var videoclipsCapability = {
27786
27744
  * It replaced `sources?: string[]`, a VIEW filter over source ids that
27787
27745
  * assumed the answer was a fan-out over everything a camera has. The
27788
27746
  * operator settled otherwise on 2026-09-20 — *"l'utilizzatore è uno
27789
- * solo"* — so the list is asked of one provider at a time and there is
27747
+ * solo"* [there is only one user] — so the list is asked of one provider at a time and there is
27790
27748
  * nothing to filter out of it.
27791
27749
  */
27792
27750
  provider: string().min(1)
@@ -36108,7 +36066,7 @@ var ReadGopBytesResultSchema = object({
36108
36066
  /**
36109
36067
  * A time WINDOW of one finalized segment, cut by byte range — the multi-GOP
36110
36068
  * twin of {@link ReadGopBytesResultSchema}'s single instant. Built for the
36111
- * replay clip's `recording` source (`docs/design/plans/2026-08-26-replay-clip-su-pipeline.md`):
36069
+ * replay clip's `recording` source (`docs/design/plans/2026-08-26-clip-replay-on-pipeline.md`):
36112
36070
  * a replay needs several seconds of native pixels, not one frame.
36113
36071
  *
36114
36072
  * `ok.data` is standalone-demuxable, same as a GOP read. `ok.reachesRequestedEnd`
@@ -39776,6 +39734,7 @@ var zoneRulesCapability = {
39776
39734
  */
39777
39735
  durability: "restored"
39778
39736
  };
39737
+ SOURCE_CAPS.filter((cap) => cap !== "switch" && cap !== "motion");
39779
39738
  /**
39780
39739
  * Accessory device helpers — shared across drivers.
39781
39740
  *
@@ -50068,6 +50027,11 @@ Object.freeze({
50068
50027
  }
50069
50028
  });
50070
50029
  Object.freeze({
50030
+ "accessories.getStatus": [{
50031
+ name: "deviceId",
50032
+ form: "single",
50033
+ optional: false
50034
+ }],
50071
50035
  "accessories.setChildHidden": [{
50072
50036
  name: "childDeviceId",
50073
50037
  form: "single",
@@ -50087,6 +50051,11 @@ Object.freeze({
50087
50051
  form: "single",
50088
50052
  optional: false
50089
50053
  }],
50054
+ "airQualitySensor.getStatus": [{
50055
+ name: "deviceId",
50056
+ form: "single",
50057
+ optional: false
50058
+ }],
50090
50059
  "alarmPanel.arm": [{
50091
50060
  name: "deviceId",
50092
50061
  form: "single",
@@ -50097,11 +50066,36 @@ Object.freeze({
50097
50066
  form: "single",
50098
50067
  optional: false
50099
50068
  }],
50069
+ "alarmPanel.getStatus": [{
50070
+ name: "deviceId",
50071
+ form: "single",
50072
+ optional: false
50073
+ }],
50100
50074
  "alarmPanel.trigger": [{
50101
50075
  name: "deviceId",
50102
50076
  form: "single",
50103
50077
  optional: false
50104
50078
  }],
50079
+ "ambientLightSensor.getStatus": [{
50080
+ name: "deviceId",
50081
+ form: "single",
50082
+ optional: false
50083
+ }],
50084
+ "audioAnalysis.applyDeviceSettingsPatch": [{
50085
+ name: "deviceId",
50086
+ form: "single",
50087
+ optional: false
50088
+ }],
50089
+ "audioAnalysis.getDeviceLiveContribution": [{
50090
+ name: "deviceId",
50091
+ form: "single",
50092
+ optional: false
50093
+ }],
50094
+ "audioAnalysis.getDeviceSettingsContribution": [{
50095
+ name: "deviceId",
50096
+ form: "single",
50097
+ optional: false
50098
+ }],
50105
50099
  "audioAnalysis.resolveDeviceSettings": [{
50106
50100
  name: "deviceId",
50107
50101
  form: "single",
@@ -50142,16 +50136,36 @@ Object.freeze({
50142
50136
  form: "single",
50143
50137
  optional: false
50144
50138
  }],
50139
+ "automationControl.getStatus": [{
50140
+ name: "deviceId",
50141
+ form: "single",
50142
+ optional: false
50143
+ }],
50145
50144
  "automationControl.trigger": [{
50146
50145
  name: "deviceId",
50147
50146
  form: "single",
50148
50147
  optional: false
50149
50148
  }],
50149
+ "battery.getStatus": [{
50150
+ name: "deviceId",
50151
+ form: "single",
50152
+ optional: false
50153
+ }],
50150
50154
  "battery.wakeForStream": [{
50151
50155
  name: "deviceId",
50152
50156
  form: "single",
50153
50157
  optional: false
50154
50158
  }],
50159
+ "binary.getStatus": [{
50160
+ name: "deviceId",
50161
+ form: "single",
50162
+ optional: false
50163
+ }],
50164
+ "brightness.getStatus": [{
50165
+ name: "deviceId",
50166
+ form: "single",
50167
+ optional: false
50168
+ }],
50155
50169
  "brightness.setBrightness": [{
50156
50170
  name: "deviceId",
50157
50171
  form: "single",
@@ -50167,6 +50181,26 @@ Object.freeze({
50167
50181
  form: "single",
50168
50182
  optional: false
50169
50183
  }],
50184
+ "cameraCredentials.getStatus": [{
50185
+ name: "deviceId",
50186
+ form: "single",
50187
+ optional: false
50188
+ }],
50189
+ "cameraGridLayout.applyDeviceSettingsPatch": [{
50190
+ name: "deviceId",
50191
+ form: "single",
50192
+ optional: false
50193
+ }],
50194
+ "cameraGridLayout.getDeviceLiveContribution": [{
50195
+ name: "deviceId",
50196
+ form: "single",
50197
+ optional: false
50198
+ }],
50199
+ "cameraGridLayout.getDeviceSettingsContribution": [{
50200
+ name: "deviceId",
50201
+ form: "single",
50202
+ optional: false
50203
+ }],
50170
50204
  "cameraGridLayout.getLayout": [{
50171
50205
  name: "deviceId",
50172
50206
  form: "single",
@@ -50182,6 +50216,21 @@ Object.freeze({
50182
50216
  form: "single",
50183
50217
  optional: false
50184
50218
  }],
50219
+ "cameraPipelineConfig.applyDeviceSettingsPatch": [{
50220
+ name: "deviceId",
50221
+ form: "single",
50222
+ optional: false
50223
+ }],
50224
+ "cameraPipelineConfig.getDeviceLiveContribution": [{
50225
+ name: "deviceId",
50226
+ form: "single",
50227
+ optional: false
50228
+ }],
50229
+ "cameraPipelineConfig.getDeviceSettingsContribution": [{
50230
+ name: "deviceId",
50231
+ form: "single",
50232
+ optional: false
50233
+ }],
50185
50234
  "cameraStreams.getBrokerStreams": [{
50186
50235
  name: "deviceId",
50187
50236
  form: "single",
@@ -50207,6 +50256,16 @@ Object.freeze({
50207
50256
  form: "single",
50208
50257
  optional: false
50209
50258
  }],
50259
+ "carbonMonoxide.getStatus": [{
50260
+ name: "deviceId",
50261
+ form: "single",
50262
+ optional: false
50263
+ }],
50264
+ "climateControl.getStatus": [{
50265
+ name: "deviceId",
50266
+ form: "single",
50267
+ optional: false
50268
+ }],
50210
50269
  "climateControl.setFanMode": [{
50211
50270
  name: "deviceId",
50212
50271
  form: "single",
@@ -50247,16 +50306,41 @@ Object.freeze({
50247
50306
  form: "single",
50248
50307
  optional: false
50249
50308
  }],
50309
+ "color.getStatus": [{
50310
+ name: "deviceId",
50311
+ form: "single",
50312
+ optional: false
50313
+ }],
50250
50314
  "color.setColor": [{
50251
50315
  name: "deviceId",
50252
50316
  form: "single",
50253
50317
  optional: false
50254
50318
  }],
50319
+ "connectivity.getStatus": [{
50320
+ name: "deviceId",
50321
+ form: "single",
50322
+ optional: false
50323
+ }],
50324
+ "consumables.getStatus": [{
50325
+ name: "deviceId",
50326
+ form: "single",
50327
+ optional: false
50328
+ }],
50255
50329
  "consumables.reset": [{
50256
50330
  name: "deviceId",
50257
50331
  form: "single",
50258
50332
  optional: false
50259
50333
  }],
50334
+ "contact.getStatus": [{
50335
+ name: "deviceId",
50336
+ form: "single",
50337
+ optional: false
50338
+ }],
50339
+ "control.getStatus": [{
50340
+ name: "deviceId",
50341
+ form: "single",
50342
+ optional: false
50343
+ }],
50260
50344
  "control.setValue": [{
50261
50345
  name: "deviceId",
50262
50346
  form: "single",
@@ -50267,6 +50351,11 @@ Object.freeze({
50267
50351
  form: "single",
50268
50352
  optional: false
50269
50353
  }],
50354
+ "cover.getStatus": [{
50355
+ name: "deviceId",
50356
+ form: "single",
50357
+ optional: false
50358
+ }],
50270
50359
  "cover.open": [{
50271
50360
  name: "deviceId",
50272
50361
  form: "single",
@@ -50292,6 +50381,11 @@ Object.freeze({
50292
50381
  form: "single",
50293
50382
  optional: false
50294
50383
  }],
50384
+ "dayNight.getStatus": [{
50385
+ name: "deviceId",
50386
+ form: "single",
50387
+ optional: false
50388
+ }],
50295
50389
  "dayNight.setSettings": [{
50296
50390
  name: "deviceId",
50297
50391
  form: "single",
@@ -50302,11 +50396,31 @@ Object.freeze({
50302
50396
  form: "single",
50303
50397
  optional: true
50304
50398
  }],
50399
+ "detectionPipeline.applyDeviceSettingsPatch": [{
50400
+ name: "deviceId",
50401
+ form: "single",
50402
+ optional: false
50403
+ }],
50404
+ "detectionPipeline.getDeviceLiveContribution": [{
50405
+ name: "deviceId",
50406
+ form: "single",
50407
+ optional: false
50408
+ }],
50409
+ "detectionPipeline.getDeviceSettingsContribution": [{
50410
+ name: "deviceId",
50411
+ form: "single",
50412
+ optional: false
50413
+ }],
50305
50414
  "deviceAdminLink.getAdminLink": [{
50306
50415
  name: "deviceId",
50307
50416
  form: "single",
50308
50417
  optional: false
50309
50418
  }],
50419
+ "deviceAdoption.getStatus": [{
50420
+ name: "deviceId",
50421
+ form: "single",
50422
+ optional: false
50423
+ }],
50310
50424
  "deviceAdoption.release": [{
50311
50425
  name: "camDeviceId",
50312
50426
  form: "single",
@@ -50322,6 +50436,11 @@ Object.freeze({
50322
50436
  form: "single",
50323
50437
  optional: false
50324
50438
  }],
50439
+ "deviceDiscovery.getStatus": [{
50440
+ name: "deviceId",
50441
+ form: "single",
50442
+ optional: false
50443
+ }],
50325
50444
  "deviceDiscovery.listDiscovered": [{
50326
50445
  name: "deviceId",
50327
50446
  form: "single",
@@ -50341,6 +50460,21 @@ Object.freeze({
50341
50460
  form: "single",
50342
50461
  optional: false
50343
50462
  }],
50463
+ "deviceExport.applyDeviceSettingsPatch": [{
50464
+ name: "deviceId",
50465
+ form: "single",
50466
+ optional: false
50467
+ }],
50468
+ "deviceExport.getDeviceLiveContribution": [{
50469
+ name: "deviceId",
50470
+ form: "single",
50471
+ optional: false
50472
+ }],
50473
+ "deviceExport.getDeviceSettingsContribution": [{
50474
+ name: "deviceId",
50475
+ form: "single",
50476
+ optional: false
50477
+ }],
50344
50478
  "deviceExtension.listCandidates": [{
50345
50479
  name: "deviceId",
50346
50480
  form: "single",
@@ -50689,6 +50823,26 @@ Object.freeze({
50689
50823
  form: "single",
50690
50824
  optional: false
50691
50825
  }],
50826
+ "deviceStatus.getStatus": [{
50827
+ name: "deviceId",
50828
+ form: "single",
50829
+ optional: false
50830
+ }],
50831
+ "doorbell.getStatus": [{
50832
+ name: "deviceId",
50833
+ form: "single",
50834
+ optional: false
50835
+ }],
50836
+ "enumSensor.getStatus": [{
50837
+ name: "deviceId",
50838
+ form: "single",
50839
+ optional: false
50840
+ }],
50841
+ "eventEmitter.getStatus": [{
50842
+ name: "deviceId",
50843
+ form: "single",
50844
+ optional: false
50845
+ }],
50692
50846
  "faceGallery.getFaceByTrack": [{
50693
50847
  name: "deviceId",
50694
50848
  form: "single",
@@ -50703,6 +50857,11 @@ Object.freeze({
50703
50857
  form: "array",
50704
50858
  optional: true
50705
50859
  }],
50860
+ "fanControl.getStatus": [{
50861
+ name: "deviceId",
50862
+ form: "single",
50863
+ optional: false
50864
+ }],
50706
50865
  "fanControl.setDirection": [{
50707
50866
  name: "deviceId",
50708
50867
  form: "single",
@@ -50723,6 +50882,26 @@ Object.freeze({
50723
50882
  form: "single",
50724
50883
  optional: false
50725
50884
  }],
50885
+ "featureProbe.getStatus": [{
50886
+ name: "deviceId",
50887
+ form: "single",
50888
+ optional: false
50889
+ }],
50890
+ "flood.getStatus": [{
50891
+ name: "deviceId",
50892
+ form: "single",
50893
+ optional: false
50894
+ }],
50895
+ "gas.getStatus": [{
50896
+ name: "deviceId",
50897
+ form: "single",
50898
+ optional: false
50899
+ }],
50900
+ "humidifier.getStatus": [{
50901
+ name: "deviceId",
50902
+ form: "single",
50903
+ optional: false
50904
+ }],
50726
50905
  "humidifier.setMode": [{
50727
50906
  name: "deviceId",
50728
50907
  form: "single",
@@ -50738,11 +50917,26 @@ Object.freeze({
50738
50917
  form: "single",
50739
50918
  optional: false
50740
50919
  }],
50920
+ "humiditySensor.getStatus": [{
50921
+ name: "deviceId",
50922
+ form: "single",
50923
+ optional: false
50924
+ }],
50925
+ "image.getStatus": [{
50926
+ name: "deviceId",
50927
+ form: "single",
50928
+ optional: false
50929
+ }],
50741
50930
  "imageSettings.getOptions": [{
50742
50931
  name: "deviceId",
50743
50932
  form: "single",
50744
50933
  optional: false
50745
50934
  }],
50935
+ "imageSettings.getStatus": [{
50936
+ name: "deviceId",
50937
+ form: "single",
50938
+ optional: false
50939
+ }],
50746
50940
  "imageSettings.setSettings": [{
50747
50941
  name: "deviceId",
50748
50942
  form: "single",
@@ -50753,6 +50947,11 @@ Object.freeze({
50753
50947
  form: "single",
50754
50948
  optional: false
50755
50949
  }],
50950
+ "intercom.getStatus": [{
50951
+ name: "deviceId",
50952
+ form: "single",
50953
+ optional: false
50954
+ }],
50756
50955
  "intercom.handleAnswer": [{
50757
50956
  name: "deviceId",
50758
50957
  form: "single",
@@ -50783,6 +50982,11 @@ Object.freeze({
50783
50982
  form: "single",
50784
50983
  optional: false
50785
50984
  }],
50985
+ "lawnMowerControl.getStatus": [{
50986
+ name: "deviceId",
50987
+ form: "single",
50988
+ optional: false
50989
+ }],
50786
50990
  "lawnMowerControl.pause": [{
50787
50991
  name: "deviceId",
50788
50992
  form: "single",
@@ -50793,6 +50997,11 @@ Object.freeze({
50793
50997
  form: "single",
50794
50998
  optional: false
50795
50999
  }],
51000
+ "lockControl.getStatus": [{
51001
+ name: "deviceId",
51002
+ form: "single",
51003
+ optional: false
51004
+ }],
50796
51005
  "lockControl.lock": [{
50797
51006
  name: "deviceId",
50798
51007
  form: "single",
@@ -50808,6 +51017,11 @@ Object.freeze({
50808
51017
  form: "single",
50809
51018
  optional: false
50810
51019
  }],
51020
+ "mediaPlayer.getStatus": [{
51021
+ name: "deviceId",
51022
+ form: "single",
51023
+ optional: false
51024
+ }],
50811
51025
  "mediaPlayer.next": [{
50812
51026
  name: "deviceId",
50813
51027
  form: "single",
@@ -50868,6 +51082,11 @@ Object.freeze({
50868
51082
  form: "single",
50869
51083
  optional: false
50870
51084
  }],
51085
+ "motion.getStatus": [{
51086
+ name: "deviceId",
51087
+ form: "single",
51088
+ optional: false
51089
+ }],
50871
51090
  "motion.isDetected": [{
50872
51091
  name: "deviceId",
50873
51092
  form: "single",
@@ -50878,11 +51097,31 @@ Object.freeze({
50878
51097
  form: "single",
50879
51098
  optional: false
50880
51099
  }],
51100
+ "motionDetection.applyDeviceSettingsPatch": [{
51101
+ name: "deviceId",
51102
+ form: "single",
51103
+ optional: false
51104
+ }],
51105
+ "motionDetection.getDeviceLiveContribution": [{
51106
+ name: "deviceId",
51107
+ form: "single",
51108
+ optional: false
51109
+ }],
51110
+ "motionDetection.getDeviceSettingsContribution": [{
51111
+ name: "deviceId",
51112
+ form: "single",
51113
+ optional: false
51114
+ }],
50881
51115
  "motionDetection.removeCamera": [{
50882
51116
  name: "deviceId",
50883
51117
  form: "single",
50884
51118
  optional: false
50885
51119
  }],
51120
+ "motionTrigger.getStatus": [{
51121
+ name: "deviceId",
51122
+ form: "single",
51123
+ optional: false
51124
+ }],
50886
51125
  "motionTrigger.setMotionTrigger": [{
50887
51126
  name: "deviceId",
50888
51127
  form: "single",
@@ -50893,6 +51132,11 @@ Object.freeze({
50893
51132
  form: "single",
50894
51133
  optional: false
50895
51134
  }],
51135
+ "motionZones.getStatus": [{
51136
+ name: "deviceId",
51137
+ form: "single",
51138
+ optional: false
51139
+ }],
50896
51140
  "motionZones.setZone": [{
50897
51141
  name: "deviceId",
50898
51142
  form: "single",
@@ -50903,6 +51147,11 @@ Object.freeze({
50903
51147
  form: "single",
50904
51148
  optional: false
50905
51149
  }],
51150
+ "nativeObjectDetection.getStatus": [{
51151
+ name: "deviceId",
51152
+ form: "single",
51153
+ optional: false
51154
+ }],
50906
51155
  "nativeObjectDetection.setEnabled": [{
50907
51156
  name: "deviceId",
50908
51157
  form: "single",
@@ -50918,6 +51167,11 @@ Object.freeze({
50918
51167
  form: "single",
50919
51168
  optional: false
50920
51169
  }],
51170
+ "navigation.getStatus": [{
51171
+ name: "deviceId",
51172
+ form: "single",
51173
+ optional: false
51174
+ }],
50921
51175
  "navigation.goToPoint": [{
50922
51176
  name: "deviceId",
50923
51177
  form: "single",
@@ -50963,6 +51217,11 @@ Object.freeze({
50963
51217
  form: "single",
50964
51218
  optional: false
50965
51219
  }],
51220
+ "networkLink.getStatus": [{
51221
+ name: "deviceId",
51222
+ form: "single",
51223
+ optional: false
51224
+ }],
50966
51225
  "networkQuality.getDeviceStats": [{
50967
51226
  name: "deviceId",
50968
51227
  form: "single",
@@ -50988,11 +51247,26 @@ Object.freeze({
50988
51247
  form: "single",
50989
51248
  optional: false
50990
51249
  }],
51250
+ "notifier.getStatus": [{
51251
+ name: "deviceId",
51252
+ form: "single",
51253
+ optional: false
51254
+ }],
50991
51255
  "notifier.send": [{
50992
51256
  name: "deviceId",
50993
51257
  form: "single",
50994
51258
  optional: false
50995
51259
  }],
51260
+ "numericSensor.getStatus": [{
51261
+ name: "deviceId",
51262
+ form: "single",
51263
+ optional: false
51264
+ }],
51265
+ "osd.getStatus": [{
51266
+ name: "deviceId",
51267
+ form: "single",
51268
+ optional: false
51269
+ }],
50996
51270
  "osd.setOverlay": [{
50997
51271
  name: "deviceId",
50998
51272
  form: "single",
@@ -51052,6 +51326,11 @@ Object.freeze({
51052
51326
  form: "single",
51053
51327
  optional: false
51054
51328
  }],
51329
+ "petFeeder.getStatus": [{
51330
+ name: "deviceId",
51331
+ form: "single",
51332
+ optional: false
51333
+ }],
51055
51334
  "petFeeder.markFoodReplenished": [{
51056
51335
  name: "deviceId",
51057
51336
  form: "single",
@@ -51087,6 +51366,11 @@ Object.freeze({
51087
51366
  form: "single",
51088
51367
  optional: false
51089
51368
  }],
51369
+ "pipelineAnalytics.applyDeviceSettingsPatch": [{
51370
+ name: "deviceId",
51371
+ form: "single",
51372
+ optional: false
51373
+ }],
51090
51374
  "pipelineAnalytics.clearTrackRelation": [{
51091
51375
  name: "deviceId",
51092
51376
  form: "single",
@@ -51127,6 +51411,16 @@ Object.freeze({
51127
51411
  form: "single",
51128
51412
  optional: false
51129
51413
  }],
51414
+ "pipelineAnalytics.getDeviceLiveContribution": [{
51415
+ name: "deviceId",
51416
+ form: "single",
51417
+ optional: false
51418
+ }],
51419
+ "pipelineAnalytics.getDeviceSettingsContribution": [{
51420
+ name: "deviceId",
51421
+ form: "single",
51422
+ optional: false
51423
+ }],
51130
51424
  "pipelineAnalytics.getEventDensity": [{
51131
51425
  name: "deviceId",
51132
51426
  form: "single",
@@ -51342,6 +51636,11 @@ Object.freeze({
51342
51636
  form: "single",
51343
51637
  optional: true
51344
51638
  }],
51639
+ "pipelineOrchestrator.applyDeviceSettingsPatch": [{
51640
+ name: "deviceId",
51641
+ form: "single",
51642
+ optional: false
51643
+ }],
51345
51644
  "pipelineOrchestrator.assignAudio": [{
51346
51645
  name: "deviceId",
51347
51646
  form: "single",
@@ -51387,6 +51686,16 @@ Object.freeze({
51387
51686
  form: "single",
51388
51687
  optional: false
51389
51688
  }],
51689
+ "pipelineOrchestrator.getDeviceLiveContribution": [{
51690
+ name: "deviceId",
51691
+ form: "single",
51692
+ optional: false
51693
+ }],
51694
+ "pipelineOrchestrator.getDeviceSettingsContribution": [{
51695
+ name: "deviceId",
51696
+ form: "single",
51697
+ optional: false
51698
+ }],
51390
51699
  "pipelineOrchestrator.getPipelineAssignment": [{
51391
51700
  name: "deviceId",
51392
51701
  form: "single",
@@ -51507,11 +51816,31 @@ Object.freeze({
51507
51816
  form: "single",
51508
51817
  optional: true
51509
51818
  }],
51819
+ "powerMeter.getStatus": [{
51820
+ name: "deviceId",
51821
+ form: "single",
51822
+ optional: false
51823
+ }],
51824
+ "presence.getStatus": [{
51825
+ name: "deviceId",
51826
+ form: "single",
51827
+ optional: false
51828
+ }],
51829
+ "pressureSensor.getStatus": [{
51830
+ name: "deviceId",
51831
+ form: "single",
51832
+ optional: false
51833
+ }],
51510
51834
  "privacyMask.getOptions": [{
51511
51835
  name: "deviceId",
51512
51836
  form: "single",
51513
51837
  optional: false
51514
51838
  }],
51839
+ "privacyMask.getStatus": [{
51840
+ name: "deviceId",
51841
+ form: "single",
51842
+ optional: false
51843
+ }],
51515
51844
  "privacyMask.setAudioEnabled": [{
51516
51845
  name: "deviceId",
51517
51846
  form: "single",
@@ -51562,6 +51891,11 @@ Object.freeze({
51562
51891
  form: "single",
51563
51892
  optional: false
51564
51893
  }],
51894
+ "ptz.getStatus": [{
51895
+ name: "deviceId",
51896
+ form: "single",
51897
+ optional: false
51898
+ }],
51565
51899
  "ptz.goHome": [{
51566
51900
  name: "deviceId",
51567
51901
  form: "single",
@@ -51652,6 +51986,11 @@ Object.freeze({
51652
51986
  form: "single",
51653
51987
  optional: false
51654
51988
  }],
51989
+ "recordingArchive.applyDeviceSettingsPatch": [{
51990
+ name: "deviceId",
51991
+ form: "single",
51992
+ optional: false
51993
+ }],
51655
51994
  "recordingArchive.deleteFootprint": [{
51656
51995
  name: "deviceId",
51657
51996
  form: "single",
@@ -51672,6 +52011,21 @@ Object.freeze({
51672
52011
  form: "single",
51673
52012
  optional: false
51674
52013
  }],
52014
+ "recordingArchive.getDeviceLiveContribution": [{
52015
+ name: "deviceId",
52016
+ form: "single",
52017
+ optional: false
52018
+ }],
52019
+ "recordingArchive.getDeviceSettingsContribution": [{
52020
+ name: "deviceId",
52021
+ form: "single",
52022
+ optional: false
52023
+ }],
52024
+ "recordingArchive.getStatus": [{
52025
+ name: "deviceId",
52026
+ form: "single",
52027
+ optional: false
52028
+ }],
51675
52029
  "recordingArchive.listOpsLog": [{
51676
52030
  name: "deviceId",
51677
52031
  form: "single",
@@ -51757,6 +52111,11 @@ Object.freeze({
51757
52111
  form: "single",
51758
52112
  optional: false
51759
52113
  }],
52114
+ "recordingOnboard.getStatus": [{
52115
+ name: "deviceId",
52116
+ form: "single",
52117
+ optional: false
52118
+ }],
51760
52119
  "recordingOnboard.setSettings": [{
51761
52120
  name: "deviceId",
51762
52121
  form: "single",
@@ -51787,6 +52146,11 @@ Object.freeze({
51787
52146
  form: "single",
51788
52147
  optional: false
51789
52148
  }],
52149
+ "sceneMonitor.getStatus": [{
52150
+ name: "deviceId",
52151
+ form: "single",
52152
+ optional: false
52153
+ }],
51790
52154
  "sceneMonitor.listScenes": [{
51791
52155
  name: "deviceId",
51792
52156
  form: "single",
@@ -51812,6 +52176,11 @@ Object.freeze({
51812
52176
  form: "single",
51813
52177
  optional: false
51814
52178
  }],
52179
+ "scriptRunner.getStatus": [{
52180
+ name: "deviceId",
52181
+ form: "single",
52182
+ optional: false
52183
+ }],
51815
52184
  "scriptRunner.run": [{
51816
52185
  name: "deviceId",
51817
52186
  form: "single",
@@ -51822,11 +52191,31 @@ Object.freeze({
51822
52191
  form: "single",
51823
52192
  optional: false
51824
52193
  }],
52194
+ "smoke.getStatus": [{
52195
+ name: "deviceId",
52196
+ form: "single",
52197
+ optional: false
52198
+ }],
52199
+ "snapshot.applyDeviceSettingsPatch": [{
52200
+ name: "deviceId",
52201
+ form: "single",
52202
+ optional: false
52203
+ }],
51825
52204
  "snapshot.getDebugState": [{
51826
52205
  name: "deviceId",
51827
52206
  form: "single",
51828
52207
  optional: false
51829
52208
  }],
52209
+ "snapshot.getDeviceLiveContribution": [{
52210
+ name: "deviceId",
52211
+ form: "single",
52212
+ optional: false
52213
+ }],
52214
+ "snapshot.getDeviceSettingsContribution": [{
52215
+ name: "deviceId",
52216
+ form: "single",
52217
+ optional: false
52218
+ }],
51830
52219
  "snapshot.getSnapshot": [{
51831
52220
  name: "deviceId",
51832
52221
  form: "single",
@@ -51843,6 +52232,11 @@ Object.freeze({
51843
52232
  form: "array",
51844
52233
  optional: false
51845
52234
  }],
52235
+ "snapshot.getStatus": [{
52236
+ name: "deviceId",
52237
+ form: "single",
52238
+ optional: false
52239
+ }],
51846
52240
  "snapshot.invalidateCache": [{
51847
52241
  name: "deviceId",
51848
52242
  form: "single",
@@ -51853,6 +52247,11 @@ Object.freeze({
51853
52247
  form: "single",
51854
52248
  optional: false
51855
52249
  }],
52250
+ "streamBroker.applyDeviceSettingsPatch": [{
52251
+ name: "deviceId",
52252
+ form: "single",
52253
+ optional: false
52254
+ }],
51856
52255
  "streamBroker.assignProfile": [{
51857
52256
  name: "deviceId",
51858
52257
  form: "single",
@@ -51868,6 +52267,16 @@ Object.freeze({
51868
52267
  form: "single",
51869
52268
  optional: false
51870
52269
  }],
52270
+ "streamBroker.getDeviceLiveContribution": [{
52271
+ name: "deviceId",
52272
+ form: "single",
52273
+ optional: false
52274
+ }],
52275
+ "streamBroker.getDeviceSettingsContribution": [{
52276
+ name: "deviceId",
52277
+ form: "single",
52278
+ optional: false
52279
+ }],
51871
52280
  "streamBroker.getStreamWithCodec": [{
51872
52281
  name: "deviceId",
51873
52282
  form: "single",
@@ -51928,16 +52337,46 @@ Object.freeze({
51928
52337
  form: "single",
51929
52338
  optional: false
51930
52339
  }],
52340
+ "streamParams.getStatus": [{
52341
+ name: "deviceId",
52342
+ form: "single",
52343
+ optional: false
52344
+ }],
51931
52345
  "streamParams.setProfile": [{
51932
52346
  name: "deviceId",
51933
52347
  form: "single",
51934
52348
  optional: false
51935
52349
  }],
52350
+ "switch.getStatus": [{
52351
+ name: "deviceId",
52352
+ form: "single",
52353
+ optional: false
52354
+ }],
51936
52355
  "switch.setState": [{
51937
52356
  name: "deviceId",
51938
52357
  form: "single",
51939
52358
  optional: false
51940
52359
  }],
52360
+ "tamper.getStatus": [{
52361
+ name: "deviceId",
52362
+ form: "single",
52363
+ optional: false
52364
+ }],
52365
+ "temperatureSensor.getStatus": [{
52366
+ name: "deviceId",
52367
+ form: "single",
52368
+ optional: false
52369
+ }],
52370
+ "update.getStatus": [{
52371
+ name: "deviceId",
52372
+ form: "single",
52373
+ optional: false
52374
+ }],
52375
+ "vacuumControl.getStatus": [{
52376
+ name: "deviceId",
52377
+ form: "single",
52378
+ optional: false
52379
+ }],
51941
52380
  "vacuumControl.locate": [{
51942
52381
  name: "deviceId",
51943
52382
  form: "single",
@@ -51973,6 +52412,11 @@ Object.freeze({
51973
52412
  form: "single",
51974
52413
  optional: false
51975
52414
  }],
52415
+ "valve.getStatus": [{
52416
+ name: "deviceId",
52417
+ form: "single",
52418
+ optional: false
52419
+ }],
51976
52420
  "valve.open": [{
51977
52421
  name: "deviceId",
51978
52422
  form: "single",
@@ -51988,6 +52432,11 @@ Object.freeze({
51988
52432
  form: "single",
51989
52433
  optional: false
51990
52434
  }],
52435
+ "vibration.getStatus": [{
52436
+ name: "deviceId",
52437
+ form: "single",
52438
+ optional: false
52439
+ }],
51991
52440
  "videoclips.dialClipStream": [{
51992
52441
  name: "deviceId",
51993
52442
  form: "single",
@@ -52023,6 +52472,11 @@ Object.freeze({
52023
52472
  form: "single",
52024
52473
  optional: false
52025
52474
  }],
52475
+ "waterHeater.getStatus": [{
52476
+ name: "deviceId",
52477
+ form: "single",
52478
+ optional: false
52479
+ }],
52026
52480
  "waterHeater.setAway": [{
52027
52481
  name: "deviceId",
52028
52482
  form: "single",
@@ -52038,6 +52492,11 @@ Object.freeze({
52038
52492
  form: "single",
52039
52493
  optional: false
52040
52494
  }],
52495
+ "weather.getStatus": [{
52496
+ name: "deviceId",
52497
+ form: "single",
52498
+ optional: false
52499
+ }],
52041
52500
  "webrtcSession.addIceCandidate": [{
52042
52501
  name: "deviceId",
52043
52502
  form: "single",
@@ -52775,7 +53234,7 @@ var PreviewTextField = string().max(200);
52775
53234
  * Whether the notification's preview is a STILL or a short animation.
52776
53235
  *
52777
53236
  * The operator's ask, verbatim: *"inviato come gif o video (come per le altre
52778
- * rule)"* — the other rules already offer an animated preview, and a ten-hour
53237
+ * rule)"* [sent as a gif or video (as for the other rules)] — the other rules already offer an animated preview, and a ten-hour
52779
53238
  * night reads better as three seconds of motion than as one frame of it. Both
52780
53239
  * modes get the SAME treatment (blurred frame, large centred title); `'gif'`
52781
53240
  * simply applies it to a dozen frames sampled across the render and assembles