@camstack/system 1.2.87 → 1.2.89

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 (52) hide show
  1. package/dist/addon-runner.js +52 -6
  2. package/dist/addon-runner.mjs +52 -6
  3. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.js +1 -1
  4. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.mjs +1 -1
  5. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.js +1 -1
  6. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.mjs +1 -1
  7. package/dist/builtins/alerts/alerts.addon.js +1 -1
  8. package/dist/builtins/alerts/alerts.addon.mjs +1 -1
  9. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.js +1 -1
  10. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.mjs +1 -1
  11. package/dist/builtins/console-logging/index.js +1 -1
  12. package/dist/builtins/console-logging/index.mjs +1 -1
  13. package/dist/builtins/core-blocks/core-blocks.addon.js +1 -1
  14. package/dist/builtins/core-blocks/core-blocks.addon.mjs +1 -1
  15. package/dist/builtins/device-manager/device-manager.addon.js +1 -1
  16. package/dist/builtins/device-manager/device-manager.addon.mjs +1 -1
  17. package/dist/builtins/doorbell/virtual-doorbell.addon.js +1 -1
  18. package/dist/builtins/doorbell/virtual-doorbell.addon.mjs +1 -1
  19. package/dist/builtins/hub-forwarder/index.js +1 -1
  20. package/dist/builtins/hub-forwarder/index.mjs +1 -1
  21. package/dist/builtins/liveness-monitor/liveness-monitor.addon.js +1 -1
  22. package/dist/builtins/liveness-monitor/liveness-monitor.addon.mjs +1 -1
  23. package/dist/builtins/local-auth/local-auth.addon.js +1 -1
  24. package/dist/builtins/local-auth/local-auth.addon.mjs +1 -1
  25. package/dist/builtins/local-network/local-network.addon.js +1 -1
  26. package/dist/builtins/local-network/local-network.addon.mjs +1 -1
  27. package/dist/builtins/loki-logging/index.js +1 -1
  28. package/dist/builtins/loki-logging/index.mjs +1 -1
  29. package/dist/builtins/native-metrics/native-metrics.addon.js +1 -1
  30. package/dist/builtins/native-metrics/native-metrics.addon.mjs +1 -1
  31. package/dist/builtins/platform-probe/index.js +1 -1
  32. package/dist/builtins/platform-probe/index.mjs +1 -1
  33. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.js +1 -1
  34. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.mjs +1 -1
  35. package/dist/builtins/snapshot/index.js +1 -1
  36. package/dist/builtins/snapshot/index.mjs +1 -1
  37. package/dist/builtins/sqlite-storage/filesystem-storage.addon.js +1 -1
  38. package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs +1 -1
  39. package/dist/builtins/sqlite-storage/sqlite-settings.addon.js +1 -1
  40. package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +1 -1
  41. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js +1 -1
  42. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs +1 -1
  43. package/dist/builtins/system-config/system-config.addon.js +1 -1
  44. package/dist/builtins/system-config/system-config.addon.mjs +1 -1
  45. package/dist/builtins/winston-logging/index.js +1 -1
  46. package/dist/builtins/winston-logging/index.mjs +1 -1
  47. package/dist/{dist-CuAaqtdt.mjs → dist-Bij6agsS.mjs} +1968 -38
  48. package/dist/{dist-D4nuaPdd.js → dist-Dq0ebOuS.js} +1968 -38
  49. package/dist/index.js +1 -1
  50. package/dist/index.mjs +1 -1
  51. package/dist/kernel/moleculer/init-watchdog.d.ts +60 -0
  52. package/package.json +1 -1
@@ -11065,11 +11065,33 @@ var NotificationFormatSchema = zod.z.enum([
11065
11065
  * Named by INTENT, never by glyph. "check" would tie the vocabulary to one
11066
11066
  * renderer's icon set; "acknowledge" survives an adapter that draws it
11067
11067
  * differently.
11068
+ *
11069
+ * ── A TOKEN IS NOT A WIRE VALUE ─────────────────────────────────────
11070
+ *
11071
+ * These names are for US. **No adapter may forward one verbatim.** Each maps
11072
+ * the whole set onto its own renderer's vocabulary through a
11073
+ * `Record<NotificationActionIcon, string>` — a Record, never a lookup with a
11074
+ * fallback, so adding a member here fails every adapter's build until someone
11075
+ * decides its glyph, which is the only place that decision can be made
11076
+ * honestly.
11077
+ *
11078
+ * This paragraph is the bug. Zentik declared `actionIcons: true` and passed
11079
+ * `disarm` straight through; iOS feeds that string to
11080
+ * `UNNotificationActionIcon(systemImageName:)`, `disarm` is not an SF Symbol,
11081
+ * and every snooze and alarm button arrived BLANK. A pass-through is not a
11082
+ * mapping, and "the field is documented" is not "the value renders".
11083
+ *
11084
+ * Adding a member is TRAIN-BOUND. The enum lives in the published
11085
+ * `@camstack/server` closure and the cap seam validates against the HUB's copy,
11086
+ * so an addon that emits a token the running hub does not know does not lose an
11087
+ * icon — its whole `send` fails Zod validation and the notification never
11088
+ * arrives. Never emit a new token from an addon before the train carrying it.
11068
11089
  */
11069
11090
  var NotificationActionIconSchema = zod.z.enum([
11070
11091
  "acknowledge",
11071
11092
  "dismiss",
11072
11093
  "silence",
11094
+ "snooze",
11073
11095
  "view",
11074
11096
  "play",
11075
11097
  "open",
@@ -11077,9 +11099,13 @@ var NotificationActionIconSchema = zod.z.enum([
11077
11099
  "lock",
11078
11100
  "unlock",
11079
11101
  "arm",
11102
+ "arm-home",
11103
+ "arm-away",
11104
+ "arm-night",
11080
11105
  "disarm",
11081
11106
  "light",
11082
- "alert"
11107
+ "alert",
11108
+ "camera"
11083
11109
  ]);
11084
11110
  /** A single tap-through action button. */
11085
11111
  var NotificationActionSchema = zod.z.object({
@@ -11295,6 +11321,24 @@ var notificationOutputCapability = {
11295
11321
  }), zod.z.void(), { kind: "mutation" })
11296
11322
  }
11297
11323
  };
11324
+ new Set([
11325
+ {
11326
+ id: "person",
11327
+ name: "Person"
11328
+ },
11329
+ {
11330
+ id: "vehicle",
11331
+ name: "Vehicle"
11332
+ },
11333
+ {
11334
+ id: "animal",
11335
+ name: "Animal"
11336
+ },
11337
+ {
11338
+ id: "package",
11339
+ name: "Package"
11340
+ }
11341
+ ].map((l) => l.id));
11298
11342
  var COCO_TO_MACRO = {
11299
11343
  mapping: {
11300
11344
  person: "person",
@@ -12132,6 +12176,8 @@ var NcSystemEventKindSchema = zod.z.enum([
12132
12176
  "alarm-triggered",
12133
12177
  "alarm-armed",
12134
12178
  "alarm-disarmed",
12179
+ "alarm-arming",
12180
+ "alarm-arm-refused",
12135
12181
  "camera-online",
12136
12182
  "camera-offline",
12137
12183
  "camera-disabled",
@@ -12188,7 +12234,16 @@ var NcScheduleSchema = zod.z.object({
12188
12234
  });
12189
12235
  /** Fuzzy plate matcher — OCR noise makes exact match useless (spec row 12/13). */
12190
12236
  var NcPlateMatcherSchema = zod.z.object({
12191
- values: zod.z.array(zod.z.string().min(1)).min(1),
12237
+ /**
12238
+ * Plate texts (or gallery vehicle names) to match. EMPTY = **any plate the
12239
+ * pipeline could read** — the plate half of "no selection = no narrowing",
12240
+ * and the switch that says this rule is about vehicles that were IDENTIFIED
12241
+ * rather than merely seen. A subject carrying no plate still fails.
12242
+ *
12243
+ * The `.min(1)` this used to carry made that state unauthorable; nothing has
12244
+ * ever persisted an empty list, so widening it cannot change an existing rule.
12245
+ */
12246
+ values: zod.z.array(zod.z.string().min(1)),
12192
12247
  /** Max Levenshtein distance after normalization (uppercase alphanumeric). */
12193
12248
  maxDistance: zod.z.number().int().min(0).max(3).default(1)
12194
12249
  });
@@ -12438,18 +12493,47 @@ var NcConditionsSchema = zod.z.object({
12438
12493
  */
12439
12494
  labelEquals: zod.z.array(zod.z.string().min(1)).optional(),
12440
12495
  /**
12441
- * Identity matcher. P1 boundary: matched against the record's collapsed
12442
- * `label` (the identity display name propagated by the face pipeline) —
12443
- * identity-ID matching rides in P2 when identity ids reach the record.
12496
+ * KNOWN FACES the rule's identity scope, and the switch that says the rule
12497
+ * is about recognised people at all.
12498
+ *
12499
+ * Three states, and the empty one is the point:
12500
+ *
12501
+ * | value | meaning |
12502
+ * | --- | --- |
12503
+ * | absent | the rule does not care who it is; an unrecognised person matches |
12504
+ * | `[]` | **only known faces** — any identity in the gallery, nobody in particular |
12505
+ * | a list | only these identities |
12506
+ *
12507
+ * `[]` is the repo-wide "no selection = no narrowing" reading (an absent
12508
+ * `devices` list is every device), applied one level down: the operator has
12509
+ * turned the face scope ON and narrowed it to nothing, which is every known
12510
+ * face. No second field states the same thing — a switch that can disagree
12511
+ * with the list under it is worse than no switch (D62).
12512
+ *
12513
+ * MEMBERS ARE FACE-GALLERY `Identity.id`s (uuid), not display names. A name is
12514
+ * renameable, and a rule authored on "Gianluca" went silently dark the moment
12515
+ * the operator fixed the spelling. The id reaches the record on
12516
+ * `LabelAttribution.identityId`; the name is what the editor shows and what
12517
+ * `{{label}}` renders.
12518
+ *
12519
+ * Rules written before this carry NAMES, and are resolved to ids lazily at
12520
+ * load (`NcRuleStore.load`) against the live gallery — a name nothing answers
12521
+ * for is left as it stands and reported, never dropped. The engine also
12522
+ * accepts a display-name hit as a compatibility leg, so a rule whose
12523
+ * migration could not resolve keeps matching exactly what it matched before.
12444
12524
  */
12445
12525
  identities: zod.z.array(zod.z.string().min(1)).optional(),
12446
- /** Fuzzy plate matcher against the record's `label` (plate text). */
12526
+ /**
12527
+ * KNOWN PLATES / VEHICLES — the plate mirror of {@link identities}, including
12528
+ * the empty-list reading: `values: []` is "any plate the OCR could read",
12529
+ * a non-empty list is those plates (fuzzily). See {@link NcPlateMatcherSchema}.
12530
+ */
12447
12531
  plates: NcPlateMatcherSchema.optional(),
12448
12532
  /**
12449
- * Identity EXCLUDE — mirror of {@link identities} with `notIn` semantics.
12450
- * Same P1 boundary: matched against the record's collapsed `label` (the
12451
- * identity display name). A record with NO label passes (nothing to
12452
- * exclude), unlike the include variant which fails on an absent label.
12533
+ * Identity EXCLUDE — mirror of {@link identities} with `notIn` semantics, and
12534
+ * the same id members and the same lazy name→id migration. A record with NO
12535
+ * identity passes (nothing to exclude), unlike the include variant which
12536
+ * fails on an unrecognised subject. An EMPTY list excludes nobody.
12453
12537
  */
12454
12538
  identitiesExclude: zod.z.array(zod.z.string().min(1)).optional(),
12455
12539
  /**
@@ -12841,7 +12925,37 @@ var NcRuleInputSchema = zod.z.object({
12841
12925
  * a rule that predates the gate must keep delivering byte-for-byte as it
12842
12926
  * did, and absent is the only way to say that without a migration.
12843
12927
  */
12844
- confirm: NcConfirmSchema.optional()
12928
+ confirm: NcConfirmSchema.optional(),
12929
+ /**
12930
+ * WAIT for face/plate recognition before saying anything.
12931
+ *
12932
+ * A notification's TEXT is frozen at enqueue and its media is re-resolved at
12933
+ * send; the identity is neither. A face is confirmed after `confirmFrames`
12934
+ * agreeing observations — p50 **11.4 s** after the track was first seen,
12935
+ * measured on this hub — and an `immediate` rule enqueues on the first object
12936
+ * event, seconds before that. So "Gianluca è arrivato" is unsayable on the
12937
+ * immediate path, and no amount of media re-resolution fixes a sentence.
12938
+ *
12939
+ * Only two honest answers exist, and this flag picks between them. It has
12940
+ * effect ONLY on a rule that declares a recognition scope
12941
+ * ({@link NcConditions.identities} or {@link NcConditions.plates}) — on any
12942
+ * other rule there is nothing to wait for and the flag is inert.
12943
+ *
12944
+ * | value | what happens |
12945
+ * | --- | --- |
12946
+ * | `true` | the rule stops firing on the object event and fires at TRACK CLOSE instead, once, with the name — later, and complete |
12947
+ * | 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) |
12948
+ *
12949
+ * `.optional()` and deliberately NOT `.default()`: a Zod default does not run
12950
+ * on the addon cap path, and absent has to keep meaning exactly what every
12951
+ * rule authored before this field meant.
12952
+ *
12953
+ * The cost of `true` is stated here because the editor states it too: a rule
12954
+ * that waits also inherits track-close SEMANTICS — its `zones` condition
12955
+ * tests every zone the track visited and a `crossing` condition can no longer
12956
+ * be satisfied, because a closed track carries no crossing.
12957
+ */
12958
+ waitForEnhancement: zod.z.boolean().optional()
12845
12959
  });
12846
12960
  /**
12847
12961
  * Partial patch for `updateRule` — any subset of the input fields, plus the
@@ -13455,7 +13569,87 @@ var MethodAccessSchema = zod.z.enum([
13455
13569
  var AllowedProviderSchema = zod.z.union([zod.z.literal("*"), zod.z.array(zod.z.string())]);
13456
13570
  var AllowedDevicesSchema = zod.z.record(zod.z.string(), zod.z.union([zod.z.literal("*"), zod.z.array(zod.z.string())]));
13457
13571
  var CapScopeSchema = zod.z.enum(["device", "system"]);
13458
- var TokenScopeSchema = zod.z.discriminatedUnion("type", [
13572
+ /**
13573
+ * DeviceSelector (scope model v3 — 2026-08-12).
13574
+ *
13575
+ * A `device` grant no longer carries a frozen list of deviceIds. It carries
13576
+ * a SELECTOR the matcher resolves against the live fleet, so the grant can be
13577
+ * DYNAMIC: a `types:['camera']` selector automatically covers a camera added
13578
+ * AFTER the grant was minted — no re-grant, no re-login.
13579
+ *
13580
+ * - `all` — every device in the deployment. The broad viewer/operator
13581
+ * lever without a `category` grant (a `category` grant also covers device
13582
+ * caps that carry no deviceId; `all` is specifically the device set).
13583
+ * - `ids` — an explicit deviceId list. This is what a v2 `device:[…]`
13584
+ * grant migrates to (see {@link TokenScopeSchema}); STATIC — a new camera
13585
+ * is NOT covered until the grant is edited.
13586
+ * - `types` — every device of a `DeviceType` (e.g. every `camera`).
13587
+ * DYNAMIC. A device that changes type, or a new device of the type,
13588
+ * re-resolves on the next request.
13589
+ * - `locations` — every device whose operator-assigned `location` label is
13590
+ * in the set (e.g. "Garden", "Front door"). DYNAMIC. A device with a
13591
+ * null/unset location matches NO `locations` selector.
13592
+ */
13593
+ var DeviceSelectorSchema = zod.z.discriminatedUnion("kind", [
13594
+ zod.z.object({ kind: zod.z.literal("all") }),
13595
+ zod.z.object({
13596
+ kind: zod.z.literal("ids"),
13597
+ ids: zod.z.array(zod.z.number().int()).min(1)
13598
+ }),
13599
+ zod.z.object({
13600
+ kind: zod.z.literal("types"),
13601
+ types: zod.z.array(zod.z.enum(DeviceType)).min(1)
13602
+ }),
13603
+ zod.z.object({
13604
+ kind: zod.z.literal("locations"),
13605
+ locations: zod.z.array(zod.z.string().min(1)).min(1)
13606
+ })
13607
+ ]);
13608
+ var DeviceTokenScopeSchema = zod.z.object({
13609
+ type: zod.z.literal("device"),
13610
+ /** The device SET this grant covers — resolved against the live fleet. */
13611
+ selector: DeviceSelectorSchema,
13612
+ access: zod.z.array(MethodAccessSchema).min(1),
13613
+ /**
13614
+ * Whether a grant on a PARENT device transparently covers its accessory
13615
+ * CHILDREN (siren / floodlight / PIR) via the persisted-parentage walk.
13616
+ * Direction is parent → children ONLY.
13617
+ *
13618
+ * Absent → the matcher DERIVES it from the access flavour: `view`
13619
+ * inherits (a camera viewer sees the camera's accessories), `create` /
13620
+ * `delete` do NOT (actuating/removing a child is an explicit act the
13621
+ * operator must grant on the child, not inherit from the parent). Set it
13622
+ * explicitly to override that default per grant.
13623
+ */
13624
+ includeLinked: zod.z.boolean().optional()
13625
+ });
13626
+ /**
13627
+ * v2 → v3 lazy migration. A pre-v3 `device` grant carried
13628
+ * `targets: string[]` (stringified deviceIds); it rewrites to the equivalent
13629
+ * `selector: {kind:'ids', ids}`. Applied as a `preprocess` so it runs on
13630
+ * EVERY parse path — stored records AND the JWT-carried scope arrays
13631
+ * normalised at the request boundary ({@link normalizeTokenScopes} in
13632
+ * `device-selector.ts`). Chosen over a one-time DB migration because a
13633
+ * migration cannot reach a JWT already in a client's hands; parse-time
13634
+ * migration covers both without a flag day. No cast — the raw object is read
13635
+ * through `Reflect.get` (its static type is `unknown`).
13636
+ */
13637
+ function migrateLegacyTokenScope(raw) {
13638
+ if (raw === null || typeof raw !== "object" || Array.isArray(raw)) return raw;
13639
+ if (Reflect.get(raw, "type") !== "device") return raw;
13640
+ if (Reflect.get(raw, "selector") !== void 0) return raw;
13641
+ const targets = Reflect.get(raw, "targets");
13642
+ if (!Array.isArray(targets)) return raw;
13643
+ return {
13644
+ type: "device",
13645
+ selector: {
13646
+ kind: "ids",
13647
+ ids: targets.map((t) => typeof t === "string" ? Number(t) : t).filter((n) => typeof n === "number" && Number.isInteger(n))
13648
+ },
13649
+ access: Reflect.get(raw, "access")
13650
+ };
13651
+ }
13652
+ var TokenScopeSchema = zod.z.preprocess(migrateLegacyTokenScope, zod.z.discriminatedUnion("type", [
13459
13653
  zod.z.object({
13460
13654
  type: zod.z.literal("category"),
13461
13655
  target: CapScopeSchema,
@@ -13471,18 +13665,8 @@ var TokenScopeSchema = zod.z.discriminatedUnion("type", [
13471
13665
  target: zod.z.string(),
13472
13666
  access: zod.z.array(MethodAccessSchema).min(1)
13473
13667
  }),
13474
- zod.z.object({
13475
- type: zod.z.literal("device"),
13476
- /**
13477
- * One or more deviceIds (serialised as strings for wire-format
13478
- * consistency with the rest of the union). Matcher accepts if
13479
- * `input.deviceId` ∈ `targets`. Array shape avoids the row-explosion
13480
- * of one scope-per-device when granting access to a set of cameras.
13481
- */
13482
- targets: zod.z.array(zod.z.string()).min(1),
13483
- access: zod.z.array(MethodAccessSchema).min(1)
13484
- })
13485
- ]);
13668
+ DeviceTokenScopeSchema
13669
+ ]));
13486
13670
  var UserRecordSchema = zod.z.object({
13487
13671
  id: zod.z.string(),
13488
13672
  username: zod.z.string(),
@@ -13941,7 +14125,21 @@ zod.z.union([zod.z.literal(1), zod.z.literal(2)]);
13941
14125
  var LabelAttributionSchema = zod.z.object({
13942
14126
  stepId: zod.z.string(),
13943
14127
  modelId: zod.z.string().optional(),
13944
- decidedAt: zod.z.number()
14128
+ decidedAt: zod.z.number(),
14129
+ /**
14130
+ * The GALLERY id behind a recognised tier-2 label — a face-gallery
14131
+ * `Identity.id` or a plate-gallery `Vehicle.id` (both `randomUUID`).
14132
+ *
14133
+ * The text alone is a DISPLAY NAME, and a display name is renameable: a
14134
+ * notification rule authored on "Gianluca" stopped matching the moment the
14135
+ * operator fixed the spelling in the gallery, and nothing said so. The id is
14136
+ * the thing that does not move, so it is what a rule matches on
14137
+ * (`NcConditions.identities`) and the text is what a human is shown.
14138
+ *
14139
+ * Absent when the label names no gallery row — a plate the OCR read but no
14140
+ * vehicle claims, a sub-class, a species, any tier-1 value.
14141
+ */
14142
+ identityId: zod.z.string().optional()
13945
14143
  });
13946
14144
  /**
13947
14145
  * The TIERED label model (roadmap 4g), spread into `TrackSchema` and
@@ -16079,10 +16277,26 @@ var detectionFpsField = {
16079
16277
  default: 10,
16080
16278
  step: 1
16081
16279
  };
16280
+ /**
16281
+ * The occupancy re-check interval. DEFAULT 300 s (2026-08-13 — was 30 s).
16282
+ *
16283
+ * The recheck is now on by default (a parked car is invisible to occupancy
16284
+ * rules until the stationary registry has been rebuilt by motion, which after a
16285
+ * restart may be never on a quiet camera). Each cycle re-subscribes a detection
16286
+ * session — an RTSP re-dial — so the switch is only affordable at a WIDE
16287
+ * interval: 300 s is ~12 re-dials an hour per camera, against 120 at the old
16288
+ * 30 s. A parked car is therefore counted within 5 minutes of a restart.
16289
+ *
16290
+ * Why not wider: `max` is 300 and raising it is TRAIN-BOUND, not addon-bound —
16291
+ * the host validates `attachCamera` against ITS copy of this schema, so a
16292
+ * runner asked for 600 would be rejected by the hub until a `@camstack/server`
16293
+ * carrying the wider bound is installed everywhere. 300 is the widest value
16294
+ * that ships with an addon deploy.
16295
+ */
16082
16296
  var occupancyRecheckSecField = {
16083
16297
  min: 0,
16084
16298
  max: 300,
16085
- default: 30,
16299
+ default: 300,
16086
16300
  step: 5
16087
16301
  };
16088
16302
  var occupancyRecheckFramesField = {
@@ -16280,15 +16494,21 @@ var RunnerCameraConfigSchema = zod.z.object({
16280
16494
  */
16281
16495
  onboardMotionDrivesAnalyzer: zod.z.boolean().default(true),
16282
16496
  /**
16283
- * Master toggle for the occupancy re-check. When `false` (DEFAULT) the runner
16284
- * never arms the periodic recheck timer, regardless of `occupancyRecheckSec`
16285
- * this is off by default because the recheck re-subscribes a detection session
16286
- * every N seconds while `watching`, a major source of pull-decoder re-dial
16287
- * churn (each cycle creates+tears a session → RTSP re-dial → latency). The
16497
+ * Master toggle for the occupancy re-check. When `false` the runner never arms
16498
+ * the periodic recheck timer, regardless of `occupancyRecheckSec`; the
16288
16499
  * `occupancyRecheckSec` / `occupancyRecheckFrames` sliders only take effect
16289
16500
  * (and only render) when this is enabled.
16290
- */
16291
- occupancyRecheckEnabled: zod.z.boolean().default(false),
16501
+ *
16502
+ * DEFAULT `true` since 2026-08-13 (was `false`). It was off because the
16503
+ * recheck re-subscribes a detection session every N seconds while `watching`
16504
+ * — each cycle creates+tears a session ⇒ an RTSP re-dial ⇒ latency, a major
16505
+ * pull-decoder churn source. What that bought was a blind spot: a STATIONARY
16506
+ * object is counted only while the stationary registry holds it, and the
16507
+ * registry rebuilds from motion, so after a restart a parked car was invisible
16508
+ * to every occupancy rule until something moved in front of it. The churn is
16509
+ * now paid on the interval instead — see `occupancyRecheckSecField`.
16510
+ */
16511
+ occupancyRecheckEnabled: zod.z.boolean().default(true),
16292
16512
  occupancyRecheckSec: zod.z.number().min(occupancyRecheckSecField.min).max(occupancyRecheckSecField.max).default(occupancyRecheckSecField.default),
16293
16513
  occupancyRecheckFrames: zod.z.number().min(occupancyRecheckFramesField.min).max(occupancyRecheckFramesField.max).default(occupancyRecheckFramesField.default),
16294
16514
  /**
@@ -22700,7 +22920,41 @@ var intercomCapability = {
22700
22920
  status: {
22701
22921
  schema: IntercomStatusSchema,
22702
22922
  kind: "command-driven"
22703
- }
22923
+ },
22924
+ /**
22925
+ * Runtime-state slice — mirrored by the kernel.
22926
+ *
22927
+ * The cap declared `status` and nothing else, so the only two sources an
22928
+ * exporter has for a value — the `device.state-changed` slice event and the
22929
+ * `deviceState.getAllSnapshots` snapshot, both built from runtime state —
22930
+ * carried nothing for `intercom`. A talk-back entity in Home Assistant would
22931
+ * have been published and never received a value, which is the defect the
22932
+ * export's two classification tables exist to prevent (177 of them, once), so
22933
+ * `intercom` was excluded rather than exported.
22934
+ *
22935
+ * The shape is the status shape: there is exactly one truth about talk-back
22936
+ * and duplicating it into a second schema is how two halves of one capability
22937
+ * come to disagree. Providers write it through
22938
+ * `this.runtimeState.setCapState('intercom', …)` at the four points that open
22939
+ * and close a session, and seed it at registration so the slice exists before
22940
+ * the first session rather than after it.
22941
+ *
22942
+ * **Bound, named rather than hidden:** `talking` mirrors the provider's own
22943
+ * session handle, so a session torn down by a transport death that never
22944
+ * reaches `stopSession` / `endTalkSession` leaves it latched until the next
22945
+ * session or the next restart. That is why the slice is `session` and not
22946
+ * `restored` — a restart must never restore "talking".
22947
+ */
22948
+ runtimeState: IntercomStatusSchema,
22949
+ /**
22950
+ * Runtime-state durability: **session** — `talking` describes a live audio
22951
+ * session, which by definition does not survive the process that held it.
22952
+ * Restoring it would publish a camera as talking to nobody.
22953
+ *
22954
+ * See `RuntimeStateDurability`. Enforced by
22955
+ * `scripts/check-runtime-state-durability.ts`.
22956
+ */
22957
+ durability: "session"
22704
22958
  };
22705
22959
  /**
22706
22960
  * Robotic lawn-mower cap. Models HA `lawn_mower.*` entities — anything
@@ -25860,7 +26114,7 @@ var recordingCapability = {
25860
26114
  toMs: zod.z.number()
25861
26115
  }), RecordingAvailabilitySchema, {
25862
26116
  kind: "query",
25863
- auth: "admin"
26117
+ auth: "protected"
25864
26118
  }),
25865
26119
  /** Which calendar days in [fromMs,toMs) have ≥1 recorded segment, bucketed by
25866
26120
  * the client's local day (`tzOffsetMinutes` = minutes to add to UTC). Drives
@@ -25872,7 +26126,7 @@ var recordingCapability = {
25872
26126
  tzOffsetMinutes: zod.z.number()
25873
26127
  }), RecordingDaysSchema, {
25874
26128
  kind: "query",
25875
- auth: "admin"
26129
+ auth: "protected"
25876
26130
  }),
25877
26131
  getPlaybackManifest: method(zod.z.object({
25878
26132
  deviceId: zod.z.number(),
@@ -25880,7 +26134,7 @@ var recordingCapability = {
25880
26134
  toMs: zod.z.number()
25881
26135
  }), RecordingManifestSchema, {
25882
26136
  kind: "query",
25883
- auth: "admin"
26137
+ auth: "protected"
25884
26138
  }),
25885
26139
  getStorageUsage: method(zod.z.object({}), RecordingStorageUsageSchema, {
25886
26140
  kind: "query",
@@ -34486,6 +34740,1678 @@ var METHOD_ACCESS_MAP = Object.freeze({
34486
34740
  access: "create"
34487
34741
  }
34488
34742
  });
34743
+ Object.freeze({
34744
+ "accessories.setChildHidden": [{
34745
+ name: "childDeviceId",
34746
+ form: "single",
34747
+ optional: false
34748
+ }, {
34749
+ name: "deviceId",
34750
+ form: "single",
34751
+ optional: false
34752
+ }],
34753
+ "addonSettings.getDeviceSettings": [{
34754
+ name: "deviceId",
34755
+ form: "single",
34756
+ optional: false
34757
+ }],
34758
+ "addonSettings.updateDeviceSettings": [{
34759
+ name: "deviceId",
34760
+ form: "single",
34761
+ optional: false
34762
+ }],
34763
+ "alarmPanel.arm": [{
34764
+ name: "deviceId",
34765
+ form: "single",
34766
+ optional: false
34767
+ }],
34768
+ "alarmPanel.disarm": [{
34769
+ name: "deviceId",
34770
+ form: "single",
34771
+ optional: false
34772
+ }],
34773
+ "alarmPanel.trigger": [{
34774
+ name: "deviceId",
34775
+ form: "single",
34776
+ optional: false
34777
+ }],
34778
+ "audioAnalysis.resolveDeviceSettings": [{
34779
+ name: "deviceId",
34780
+ form: "single",
34781
+ optional: false
34782
+ }],
34783
+ "audioAnalyzer.classify": [{
34784
+ name: "deviceId",
34785
+ form: "single",
34786
+ optional: true
34787
+ }],
34788
+ "audioMetrics.getCurrentSnapshot": [{
34789
+ name: "deviceId",
34790
+ form: "single",
34791
+ optional: false
34792
+ }],
34793
+ "audioMetrics.getHistory": [{
34794
+ name: "deviceId",
34795
+ form: "single",
34796
+ optional: false
34797
+ }],
34798
+ "automationControl.disable": [{
34799
+ name: "deviceId",
34800
+ form: "single",
34801
+ optional: false
34802
+ }],
34803
+ "automationControl.enable": [{
34804
+ name: "deviceId",
34805
+ form: "single",
34806
+ optional: false
34807
+ }],
34808
+ "automationControl.trigger": [{
34809
+ name: "deviceId",
34810
+ form: "single",
34811
+ optional: false
34812
+ }],
34813
+ "battery.wakeForStream": [{
34814
+ name: "deviceId",
34815
+ form: "single",
34816
+ optional: false
34817
+ }],
34818
+ "brightness.setBrightness": [{
34819
+ name: "deviceId",
34820
+ form: "single",
34821
+ optional: false
34822
+ }],
34823
+ "button.press": [{
34824
+ name: "deviceId",
34825
+ form: "single",
34826
+ optional: false
34827
+ }],
34828
+ "cameraCredentials.getCredentials": [{
34829
+ name: "deviceId",
34830
+ form: "single",
34831
+ optional: false
34832
+ }],
34833
+ "cameraStreams.getBrokerStreams": [{
34834
+ name: "deviceId",
34835
+ form: "single",
34836
+ optional: false
34837
+ }],
34838
+ "cameraStreams.getCameraStreams": [{
34839
+ name: "deviceId",
34840
+ form: "single",
34841
+ optional: false
34842
+ }],
34843
+ "cameraStreams.getProfileRtspEntries": [{
34844
+ name: "deviceId",
34845
+ form: "single",
34846
+ optional: false
34847
+ }],
34848
+ "cameraStreams.getRtspEntries": [{
34849
+ name: "deviceId",
34850
+ form: "single",
34851
+ optional: false
34852
+ }],
34853
+ "cameraStreams.pickStream": [{
34854
+ name: "deviceId",
34855
+ form: "single",
34856
+ optional: false
34857
+ }],
34858
+ "climateControl.setFanMode": [{
34859
+ name: "deviceId",
34860
+ form: "single",
34861
+ optional: false
34862
+ }],
34863
+ "climateControl.setMode": [{
34864
+ name: "deviceId",
34865
+ form: "single",
34866
+ optional: false
34867
+ }],
34868
+ "climateControl.setPreset": [{
34869
+ name: "deviceId",
34870
+ form: "single",
34871
+ optional: false
34872
+ }],
34873
+ "climateControl.setSwingHorizontal": [{
34874
+ name: "deviceId",
34875
+ form: "single",
34876
+ optional: false
34877
+ }],
34878
+ "climateControl.setSwingVertical": [{
34879
+ name: "deviceId",
34880
+ form: "single",
34881
+ optional: false
34882
+ }],
34883
+ "climateControl.setTarget": [{
34884
+ name: "deviceId",
34885
+ form: "single",
34886
+ optional: false
34887
+ }],
34888
+ "climateControl.setTargetHumidity": [{
34889
+ name: "deviceId",
34890
+ form: "single",
34891
+ optional: false
34892
+ }],
34893
+ "climateControl.setTargetRange": [{
34894
+ name: "deviceId",
34895
+ form: "single",
34896
+ optional: false
34897
+ }],
34898
+ "color.setColor": [{
34899
+ name: "deviceId",
34900
+ form: "single",
34901
+ optional: false
34902
+ }],
34903
+ "consumables.reset": [{
34904
+ name: "deviceId",
34905
+ form: "single",
34906
+ optional: false
34907
+ }],
34908
+ "control.setValue": [{
34909
+ name: "deviceId",
34910
+ form: "single",
34911
+ optional: false
34912
+ }],
34913
+ "cover.close": [{
34914
+ name: "deviceId",
34915
+ form: "single",
34916
+ optional: false
34917
+ }],
34918
+ "cover.open": [{
34919
+ name: "deviceId",
34920
+ form: "single",
34921
+ optional: false
34922
+ }],
34923
+ "cover.setPosition": [{
34924
+ name: "deviceId",
34925
+ form: "single",
34926
+ optional: false
34927
+ }],
34928
+ "cover.setTiltPosition": [{
34929
+ name: "deviceId",
34930
+ form: "single",
34931
+ optional: false
34932
+ }],
34933
+ "cover.stop": [{
34934
+ name: "deviceId",
34935
+ form: "single",
34936
+ optional: false
34937
+ }],
34938
+ "dayNight.getOptions": [{
34939
+ name: "deviceId",
34940
+ form: "single",
34941
+ optional: false
34942
+ }],
34943
+ "dayNight.setSettings": [{
34944
+ name: "deviceId",
34945
+ form: "single",
34946
+ optional: false
34947
+ }],
34948
+ "decoder.createSession": [{
34949
+ name: "deviceId",
34950
+ form: "single",
34951
+ optional: true
34952
+ }],
34953
+ "deviceAdoption.release": [{
34954
+ name: "camDeviceId",
34955
+ form: "single",
34956
+ optional: false
34957
+ }],
34958
+ "deviceAdoption.resync": [{
34959
+ name: "camDeviceId",
34960
+ form: "single",
34961
+ optional: false
34962
+ }],
34963
+ "deviceDiscovery.adoptDevice": [{
34964
+ name: "deviceId",
34965
+ form: "single",
34966
+ optional: false
34967
+ }],
34968
+ "deviceDiscovery.listDiscovered": [{
34969
+ name: "deviceId",
34970
+ form: "single",
34971
+ optional: false
34972
+ }],
34973
+ "deviceDiscovery.refreshDiscovery": [{
34974
+ name: "deviceId",
34975
+ form: "single",
34976
+ optional: false
34977
+ }],
34978
+ "deviceDiscovery.releaseDevice": [{
34979
+ name: "childDeviceId",
34980
+ form: "single",
34981
+ optional: false
34982
+ }, {
34983
+ name: "deviceId",
34984
+ form: "single",
34985
+ optional: false
34986
+ }],
34987
+ "deviceManager.adoptionRelease": [{
34988
+ name: "camDeviceId",
34989
+ form: "single",
34990
+ optional: false
34991
+ }],
34992
+ "deviceManager.adoptionResync": [{
34993
+ name: "camDeviceId",
34994
+ form: "single",
34995
+ optional: false
34996
+ }],
34997
+ "deviceManager.applyInitialMeta": [{
34998
+ name: "deviceId",
34999
+ form: "single",
35000
+ optional: false
35001
+ }, {
35002
+ name: "linkDeviceId",
35003
+ form: "single",
35004
+ optional: true
35005
+ }],
35006
+ "deviceManager.disable": [{
35007
+ name: "deviceId",
35008
+ form: "single",
35009
+ optional: false
35010
+ }],
35011
+ "deviceManager.enable": [{
35012
+ name: "deviceId",
35013
+ form: "single",
35014
+ optional: false
35015
+ }],
35016
+ "deviceManager.getBindings": [{
35017
+ name: "deviceId",
35018
+ form: "single",
35019
+ optional: false
35020
+ }],
35021
+ "deviceManager.getChildren": [{
35022
+ name: "parentDeviceId",
35023
+ form: "single",
35024
+ optional: false
35025
+ }],
35026
+ "deviceManager.getConfigSchema": [{
35027
+ name: "deviceId",
35028
+ form: "single",
35029
+ optional: false
35030
+ }],
35031
+ "deviceManager.getDevice": [{
35032
+ name: "deviceId",
35033
+ form: "single",
35034
+ optional: false
35035
+ }],
35036
+ "deviceManager.getDeviceAggregate": [{
35037
+ name: "deviceId",
35038
+ form: "single",
35039
+ optional: false
35040
+ }],
35041
+ "deviceManager.getDeviceLiveInfoAggregate": [{
35042
+ name: "deviceId",
35043
+ form: "single",
35044
+ optional: false
35045
+ }],
35046
+ "deviceManager.getDeviceSettingsAggregate": [{
35047
+ name: "deviceId",
35048
+ form: "single",
35049
+ optional: false
35050
+ }],
35051
+ "deviceManager.getDeviceStatusAggregate": [{
35052
+ name: "deviceId",
35053
+ form: "single",
35054
+ optional: false
35055
+ }],
35056
+ "deviceManager.getDeviceStatusAggregateBatch": [{
35057
+ name: "deviceIds",
35058
+ form: "array",
35059
+ optional: false
35060
+ }],
35061
+ "deviceManager.getLinkedDevices": [{
35062
+ name: "deviceId",
35063
+ form: "single",
35064
+ optional: false
35065
+ }],
35066
+ "deviceManager.getSettingsSchema": [{
35067
+ name: "deviceId",
35068
+ form: "single",
35069
+ optional: false
35070
+ }],
35071
+ "deviceManager.getStreamProfileMap": [{
35072
+ name: "deviceId",
35073
+ form: "single",
35074
+ optional: false
35075
+ }],
35076
+ "deviceManager.getStreamSources": [{
35077
+ name: "deviceId",
35078
+ form: "single",
35079
+ optional: false
35080
+ }],
35081
+ "deviceManager.getWireableFields": [{
35082
+ name: "deviceId",
35083
+ form: "single",
35084
+ optional: false
35085
+ }],
35086
+ "deviceManager.loadConfig": [{
35087
+ name: "deviceId",
35088
+ form: "single",
35089
+ optional: false
35090
+ }],
35091
+ "deviceManager.loadMeta": [{
35092
+ name: "deviceId",
35093
+ form: "single",
35094
+ optional: false
35095
+ }],
35096
+ "deviceManager.loadRuntimeState": [{
35097
+ name: "deviceId",
35098
+ form: "single",
35099
+ optional: false
35100
+ }],
35101
+ "deviceManager.persistConfig": [{
35102
+ name: "deviceId",
35103
+ form: "single",
35104
+ optional: false
35105
+ }],
35106
+ "deviceManager.probeStreams": [{
35107
+ name: "deviceId",
35108
+ form: "single",
35109
+ optional: false
35110
+ }],
35111
+ "deviceManager.registerDevice": [{
35112
+ name: "parentDeviceId",
35113
+ form: "single",
35114
+ optional: true
35115
+ }],
35116
+ "deviceManager.remove": [{
35117
+ name: "deviceId",
35118
+ form: "single",
35119
+ optional: false
35120
+ }],
35121
+ "deviceManager.removeDevice": [{
35122
+ name: "deviceId",
35123
+ form: "single",
35124
+ optional: false
35125
+ }],
35126
+ "deviceManager.runDeviceAction": [{
35127
+ name: "deviceId",
35128
+ form: "single",
35129
+ optional: false
35130
+ }],
35131
+ "deviceManager.setChildLayout": [{
35132
+ name: "deviceId",
35133
+ form: "single",
35134
+ optional: false
35135
+ }],
35136
+ "deviceManager.setDisabled": [{
35137
+ name: "deviceId",
35138
+ form: "single",
35139
+ optional: false
35140
+ }],
35141
+ "deviceManager.setDisplay": [{
35142
+ name: "deviceId",
35143
+ form: "single",
35144
+ optional: false
35145
+ }],
35146
+ "deviceManager.setIntegrationId": [{
35147
+ name: "deviceId",
35148
+ form: "single",
35149
+ optional: false
35150
+ }],
35151
+ "deviceManager.setLinkDeviceId": [{
35152
+ name: "deviceId",
35153
+ form: "single",
35154
+ optional: false
35155
+ }, {
35156
+ name: "linkDeviceId",
35157
+ form: "single",
35158
+ optional: true
35159
+ }],
35160
+ "deviceManager.setLocation": [{
35161
+ name: "deviceId",
35162
+ form: "single",
35163
+ optional: false
35164
+ }],
35165
+ "deviceManager.setMetadata": [{
35166
+ name: "deviceId",
35167
+ form: "single",
35168
+ optional: false
35169
+ }],
35170
+ "deviceManager.setName": [{
35171
+ name: "deviceId",
35172
+ form: "single",
35173
+ optional: false
35174
+ }],
35175
+ "deviceManager.setPrimaryChildEntityId": [{
35176
+ name: "deviceId",
35177
+ form: "single",
35178
+ optional: false
35179
+ }],
35180
+ "deviceManager.setRole": [{
35181
+ name: "deviceId",
35182
+ form: "single",
35183
+ optional: false
35184
+ }],
35185
+ "deviceManager.setStreamProfileMap": [{
35186
+ name: "deviceId",
35187
+ form: "single",
35188
+ optional: false
35189
+ }],
35190
+ "deviceManager.setType": [{
35191
+ name: "deviceId",
35192
+ form: "single",
35193
+ optional: false
35194
+ }],
35195
+ "deviceManager.setWrapperActive": [{
35196
+ name: "deviceId",
35197
+ form: "single",
35198
+ optional: false
35199
+ }],
35200
+ "deviceManager.testField": [{
35201
+ name: "deviceId",
35202
+ form: "single",
35203
+ optional: false
35204
+ }],
35205
+ "deviceManager.updateConfig": [{
35206
+ name: "deviceId",
35207
+ form: "single",
35208
+ optional: false
35209
+ }],
35210
+ "deviceManager.updateDeviceField": [{
35211
+ name: "deviceId",
35212
+ form: "single",
35213
+ optional: false
35214
+ }],
35215
+ "deviceManager.updateDeviceFieldsBatch": [{
35216
+ name: "deviceId",
35217
+ form: "single",
35218
+ optional: false
35219
+ }],
35220
+ "deviceOps.getConfigEntries": [{
35221
+ name: "deviceId",
35222
+ form: "single",
35223
+ optional: false
35224
+ }],
35225
+ "deviceOps.getRawState": [{
35226
+ name: "deviceId",
35227
+ form: "single",
35228
+ optional: false
35229
+ }],
35230
+ "deviceOps.getSettingsSchema": [{
35231
+ name: "deviceId",
35232
+ form: "single",
35233
+ optional: false
35234
+ }],
35235
+ "deviceOps.getStreamSources": [{
35236
+ name: "deviceId",
35237
+ form: "single",
35238
+ optional: false
35239
+ }],
35240
+ "deviceOps.removeDevice": [{
35241
+ name: "deviceId",
35242
+ form: "single",
35243
+ optional: false
35244
+ }],
35245
+ "deviceOps.runAction": [{
35246
+ name: "deviceId",
35247
+ form: "single",
35248
+ optional: false
35249
+ }],
35250
+ "deviceOps.setConfig": [{
35251
+ name: "deviceId",
35252
+ form: "single",
35253
+ optional: false
35254
+ }],
35255
+ "deviceState.getCapSlice": [{
35256
+ name: "deviceId",
35257
+ form: "single",
35258
+ optional: false
35259
+ }],
35260
+ "deviceState.getSnapshot": [{
35261
+ name: "deviceId",
35262
+ form: "single",
35263
+ optional: false
35264
+ }],
35265
+ "deviceState.setCapSlice": [{
35266
+ name: "deviceId",
35267
+ form: "single",
35268
+ optional: false
35269
+ }],
35270
+ "events.getEventClipUrl": [{
35271
+ name: "deviceId",
35272
+ form: "single",
35273
+ optional: false
35274
+ }],
35275
+ "events.getEvents": [{
35276
+ name: "deviceId",
35277
+ form: "single",
35278
+ optional: false
35279
+ }],
35280
+ "events.getEventThumbnail": [{
35281
+ name: "deviceId",
35282
+ form: "single",
35283
+ optional: false
35284
+ }],
35285
+ "faceGallery.getFaceByTrack": [{
35286
+ name: "deviceId",
35287
+ form: "single",
35288
+ optional: false
35289
+ }],
35290
+ "faceGallery.listRecentFaces": [{
35291
+ name: "deviceId",
35292
+ form: "single",
35293
+ optional: true
35294
+ }],
35295
+ "fanControl.setDirection": [{
35296
+ name: "deviceId",
35297
+ form: "single",
35298
+ optional: false
35299
+ }],
35300
+ "fanControl.setOscillating": [{
35301
+ name: "deviceId",
35302
+ form: "single",
35303
+ optional: false
35304
+ }],
35305
+ "fanControl.setPercentage": [{
35306
+ name: "deviceId",
35307
+ form: "single",
35308
+ optional: false
35309
+ }],
35310
+ "fanControl.setPreset": [{
35311
+ name: "deviceId",
35312
+ form: "single",
35313
+ optional: false
35314
+ }],
35315
+ "humidifier.setMode": [{
35316
+ name: "deviceId",
35317
+ form: "single",
35318
+ optional: false
35319
+ }],
35320
+ "humidifier.setOn": [{
35321
+ name: "deviceId",
35322
+ form: "single",
35323
+ optional: false
35324
+ }],
35325
+ "humidifier.setTargetHumidity": [{
35326
+ name: "deviceId",
35327
+ form: "single",
35328
+ optional: false
35329
+ }],
35330
+ "imageSettings.getOptions": [{
35331
+ name: "deviceId",
35332
+ form: "single",
35333
+ optional: false
35334
+ }],
35335
+ "imageSettings.setSettings": [{
35336
+ name: "deviceId",
35337
+ form: "single",
35338
+ optional: false
35339
+ }],
35340
+ "intercom.endTalkSession": [{
35341
+ name: "deviceId",
35342
+ form: "single",
35343
+ optional: false
35344
+ }],
35345
+ "intercom.handleAnswer": [{
35346
+ name: "deviceId",
35347
+ form: "single",
35348
+ optional: false
35349
+ }],
35350
+ "intercom.pushTalkAudio": [{
35351
+ name: "deviceId",
35352
+ form: "single",
35353
+ optional: false
35354
+ }],
35355
+ "intercom.startSession": [{
35356
+ name: "deviceId",
35357
+ form: "single",
35358
+ optional: false
35359
+ }],
35360
+ "intercom.startTalkSession": [{
35361
+ name: "deviceId",
35362
+ form: "single",
35363
+ optional: false
35364
+ }],
35365
+ "intercom.stopSession": [{
35366
+ name: "deviceId",
35367
+ form: "single",
35368
+ optional: false
35369
+ }],
35370
+ "lawnMowerControl.dock": [{
35371
+ name: "deviceId",
35372
+ form: "single",
35373
+ optional: false
35374
+ }],
35375
+ "lawnMowerControl.pause": [{
35376
+ name: "deviceId",
35377
+ form: "single",
35378
+ optional: false
35379
+ }],
35380
+ "lawnMowerControl.startMowing": [{
35381
+ name: "deviceId",
35382
+ form: "single",
35383
+ optional: false
35384
+ }],
35385
+ "lockControl.lock": [{
35386
+ name: "deviceId",
35387
+ form: "single",
35388
+ optional: false
35389
+ }],
35390
+ "lockControl.open": [{
35391
+ name: "deviceId",
35392
+ form: "single",
35393
+ optional: false
35394
+ }],
35395
+ "lockControl.unlock": [{
35396
+ name: "deviceId",
35397
+ form: "single",
35398
+ optional: false
35399
+ }],
35400
+ "mediaPlayer.next": [{
35401
+ name: "deviceId",
35402
+ form: "single",
35403
+ optional: false
35404
+ }],
35405
+ "mediaPlayer.pause": [{
35406
+ name: "deviceId",
35407
+ form: "single",
35408
+ optional: false
35409
+ }],
35410
+ "mediaPlayer.play": [{
35411
+ name: "deviceId",
35412
+ form: "single",
35413
+ optional: false
35414
+ }],
35415
+ "mediaPlayer.playMedia": [{
35416
+ name: "deviceId",
35417
+ form: "single",
35418
+ optional: false
35419
+ }],
35420
+ "mediaPlayer.previous": [{
35421
+ name: "deviceId",
35422
+ form: "single",
35423
+ optional: false
35424
+ }],
35425
+ "mediaPlayer.seek": [{
35426
+ name: "deviceId",
35427
+ form: "single",
35428
+ optional: false
35429
+ }],
35430
+ "mediaPlayer.selectSource": [{
35431
+ name: "deviceId",
35432
+ form: "single",
35433
+ optional: false
35434
+ }],
35435
+ "mediaPlayer.setMute": [{
35436
+ name: "deviceId",
35437
+ form: "single",
35438
+ optional: false
35439
+ }],
35440
+ "mediaPlayer.setRepeat": [{
35441
+ name: "deviceId",
35442
+ form: "single",
35443
+ optional: false
35444
+ }],
35445
+ "mediaPlayer.setShuffle": [{
35446
+ name: "deviceId",
35447
+ form: "single",
35448
+ optional: false
35449
+ }],
35450
+ "mediaPlayer.setVolume": [{
35451
+ name: "deviceId",
35452
+ form: "single",
35453
+ optional: false
35454
+ }],
35455
+ "mediaPlayer.stop": [{
35456
+ name: "deviceId",
35457
+ form: "single",
35458
+ optional: false
35459
+ }],
35460
+ "motion.isDetected": [{
35461
+ name: "deviceId",
35462
+ form: "single",
35463
+ optional: false
35464
+ }],
35465
+ "motionDetection.analyze": [{
35466
+ name: "deviceId",
35467
+ form: "single",
35468
+ optional: false
35469
+ }],
35470
+ "motionDetection.removeCamera": [{
35471
+ name: "deviceId",
35472
+ form: "single",
35473
+ optional: false
35474
+ }],
35475
+ "motionTrigger.setMotionTrigger": [{
35476
+ name: "deviceId",
35477
+ form: "single",
35478
+ optional: false
35479
+ }],
35480
+ "motionZones.getOptions": [{
35481
+ name: "deviceId",
35482
+ form: "single",
35483
+ optional: false
35484
+ }],
35485
+ "motionZones.setZone": [{
35486
+ name: "deviceId",
35487
+ form: "single",
35488
+ optional: false
35489
+ }],
35490
+ "nativeObjectDetection.setEnabled": [{
35491
+ name: "deviceId",
35492
+ form: "single",
35493
+ optional: false
35494
+ }],
35495
+ "networkQuality.getDeviceStats": [{
35496
+ name: "deviceId",
35497
+ form: "single",
35498
+ optional: false
35499
+ }],
35500
+ "networkQuality.reportClientStats": [{
35501
+ name: "deviceId",
35502
+ form: "single",
35503
+ optional: false
35504
+ }],
35505
+ "notificationRules.setDeviceMuted": [{
35506
+ name: "deviceId",
35507
+ form: "single",
35508
+ optional: false
35509
+ }],
35510
+ "notifier.cancel": [{
35511
+ name: "deviceId",
35512
+ form: "single",
35513
+ optional: false
35514
+ }],
35515
+ "notifier.send": [{
35516
+ name: "deviceId",
35517
+ form: "single",
35518
+ optional: false
35519
+ }],
35520
+ "osd.setOverlay": [{
35521
+ name: "deviceId",
35522
+ form: "single",
35523
+ optional: false
35524
+ }],
35525
+ "osdManager.clearSlotBinding": [{
35526
+ name: "deviceId",
35527
+ form: "single",
35528
+ optional: false
35529
+ }],
35530
+ "osdManager.copyDeviceConfiguration": [{
35531
+ name: "sourceDeviceId",
35532
+ form: "single",
35533
+ optional: false
35534
+ }, {
35535
+ name: "targetDeviceId",
35536
+ form: "single",
35537
+ optional: false
35538
+ }],
35539
+ "osdManager.getDeviceOsd": [{
35540
+ name: "deviceId",
35541
+ form: "single",
35542
+ optional: false
35543
+ }],
35544
+ "osdManager.getSourceCatalog": [{
35545
+ name: "deviceId",
35546
+ form: "single",
35547
+ optional: false
35548
+ }],
35549
+ "osdManager.previewSlot": [{
35550
+ name: "deviceId",
35551
+ form: "single",
35552
+ optional: false
35553
+ }],
35554
+ "osdManager.renderDevice": [{
35555
+ name: "deviceId",
35556
+ form: "single",
35557
+ optional: false
35558
+ }],
35559
+ "osdManager.setSlotBinding": [{
35560
+ name: "deviceId",
35561
+ form: "single",
35562
+ optional: false
35563
+ }],
35564
+ "petFeeder.callPet": [{
35565
+ name: "deviceId",
35566
+ form: "single",
35567
+ optional: false
35568
+ }],
35569
+ "petFeeder.cancelFeed": [{
35570
+ name: "deviceId",
35571
+ form: "single",
35572
+ optional: false
35573
+ }],
35574
+ "petFeeder.feed": [{
35575
+ name: "deviceId",
35576
+ form: "single",
35577
+ optional: false
35578
+ }],
35579
+ "petFeeder.markFoodReplenished": [{
35580
+ name: "deviceId",
35581
+ form: "single",
35582
+ optional: false
35583
+ }],
35584
+ "petFeeder.playSound": [{
35585
+ name: "deviceId",
35586
+ form: "single",
35587
+ optional: false
35588
+ }],
35589
+ "petFeeder.resetDesiccant": [{
35590
+ name: "deviceId",
35591
+ form: "single",
35592
+ optional: false
35593
+ }],
35594
+ "petFeeder.setChildLock": [{
35595
+ name: "deviceId",
35596
+ form: "single",
35597
+ optional: false
35598
+ }],
35599
+ "petFeeder.setFeedSound": [{
35600
+ name: "deviceId",
35601
+ form: "single",
35602
+ optional: false
35603
+ }],
35604
+ "petFeeder.setIndicatorLight": [{
35605
+ name: "deviceId",
35606
+ form: "single",
35607
+ optional: false
35608
+ }],
35609
+ "petFeeder.setVolume": [{
35610
+ name: "deviceId",
35611
+ form: "single",
35612
+ optional: false
35613
+ }],
35614
+ "pipelineAnalytics.clearTracks": [{
35615
+ name: "deviceId",
35616
+ form: "single",
35617
+ optional: false
35618
+ }],
35619
+ "pipelineAnalytics.completeRetrainTrack": [{
35620
+ name: "deviceId",
35621
+ form: "single",
35622
+ optional: false
35623
+ }],
35624
+ "pipelineAnalytics.deleteDeviceEvents": [{
35625
+ name: "deviceId",
35626
+ form: "single",
35627
+ optional: false
35628
+ }],
35629
+ "pipelineAnalytics.deleteTracks": [{
35630
+ name: "deviceId",
35631
+ form: "single",
35632
+ optional: false
35633
+ }],
35634
+ "pipelineAnalytics.deselectRetrainFrame": [{
35635
+ name: "deviceId",
35636
+ form: "single",
35637
+ optional: false
35638
+ }],
35639
+ "pipelineAnalytics.getActiveTracks": [{
35640
+ name: "deviceId",
35641
+ form: "single",
35642
+ optional: false
35643
+ }],
35644
+ "pipelineAnalytics.getAudioEvents": [{
35645
+ name: "deviceId",
35646
+ form: "single",
35647
+ optional: false
35648
+ }],
35649
+ "pipelineAnalytics.getEventDensity": [{
35650
+ name: "deviceId",
35651
+ form: "single",
35652
+ optional: false
35653
+ }],
35654
+ "pipelineAnalytics.getKeyEvents": [{
35655
+ name: "deviceId",
35656
+ form: "single",
35657
+ optional: false
35658
+ }],
35659
+ "pipelineAnalytics.getMotionEvents": [{
35660
+ name: "deviceId",
35661
+ form: "single",
35662
+ optional: false
35663
+ }],
35664
+ "pipelineAnalytics.getObjectEvents": [{
35665
+ name: "deviceId",
35666
+ form: "single",
35667
+ optional: false
35668
+ }],
35669
+ "pipelineAnalytics.getRetrainExportUrl": [{
35670
+ name: "deviceIds",
35671
+ form: "array",
35672
+ optional: true
35673
+ }],
35674
+ "pipelineAnalytics.getSensorEvents": [{
35675
+ name: "deviceId",
35676
+ form: "single",
35677
+ optional: false
35678
+ }],
35679
+ "pipelineAnalytics.getTrack": [{
35680
+ name: "deviceId",
35681
+ form: "single",
35682
+ optional: false
35683
+ }],
35684
+ "pipelineAnalytics.getTrainingExportSummary": [{
35685
+ name: "deviceIds",
35686
+ form: "array",
35687
+ optional: true
35688
+ }],
35689
+ "pipelineAnalytics.getTrainingExportUrl": [{
35690
+ name: "deviceIds",
35691
+ form: "array",
35692
+ optional: true
35693
+ }],
35694
+ "pipelineAnalytics.listEventKinds": [{
35695
+ name: "deviceId",
35696
+ form: "single",
35697
+ optional: false
35698
+ }],
35699
+ "pipelineAnalytics.listEventKindsBatch": [{
35700
+ name: "deviceIds",
35701
+ form: "array",
35702
+ optional: false
35703
+ }],
35704
+ "pipelineAnalytics.listOpsLog": [{
35705
+ name: "deviceId",
35706
+ form: "single",
35707
+ optional: true
35708
+ }],
35709
+ "pipelineAnalytics.listRecentTracks": [{
35710
+ name: "deviceIds",
35711
+ form: "array",
35712
+ optional: false
35713
+ }],
35714
+ "pipelineAnalytics.listRetrainStaging": [{
35715
+ name: "deviceIds",
35716
+ form: "array",
35717
+ optional: true
35718
+ }],
35719
+ "pipelineAnalytics.listTracks": [{
35720
+ name: "deviceId",
35721
+ form: "single",
35722
+ optional: false
35723
+ }],
35724
+ "pipelineAnalytics.proposeRetrainAnnotations": [{
35725
+ name: "deviceId",
35726
+ form: "single",
35727
+ optional: false
35728
+ }],
35729
+ "pipelineAnalytics.pruneEventsBefore": [{
35730
+ name: "deviceId",
35731
+ form: "single",
35732
+ optional: false
35733
+ }],
35734
+ "pipelineAnalytics.pruneTracksBefore": [{
35735
+ name: "deviceId",
35736
+ form: "single",
35737
+ optional: false
35738
+ }],
35739
+ "pipelineAnalytics.rebuildObjectEmbeddings": [{
35740
+ name: "deviceId",
35741
+ form: "single",
35742
+ optional: true
35743
+ }],
35744
+ "pipelineAnalytics.restageRetrainTrack": [{
35745
+ name: "deviceId",
35746
+ form: "single",
35747
+ optional: false
35748
+ }],
35749
+ "pipelineAnalytics.saveRetrainAnnotations": [{
35750
+ name: "deviceId",
35751
+ form: "single",
35752
+ optional: false
35753
+ }],
35754
+ "pipelineAnalytics.searchObjectEvents": [{
35755
+ name: "deviceId",
35756
+ form: "single",
35757
+ optional: true
35758
+ }],
35759
+ "pipelineAnalytics.selectRetrainFrames": [{
35760
+ name: "deviceId",
35761
+ form: "single",
35762
+ optional: false
35763
+ }],
35764
+ "pipelineAnalytics.setTrackFlags": [{
35765
+ name: "deviceId",
35766
+ form: "single",
35767
+ optional: false
35768
+ }],
35769
+ "pipelineAnalytics.wipeAllAnalytics": [{
35770
+ name: "deviceId",
35771
+ form: "single",
35772
+ optional: false
35773
+ }],
35774
+ "pipelineExecutor.runPipeline": [{
35775
+ name: "deviceId",
35776
+ form: "single",
35777
+ optional: true
35778
+ }],
35779
+ "pipelineExecutor.runPipelineBatch": [{
35780
+ name: "deviceId",
35781
+ form: "single",
35782
+ optional: true
35783
+ }],
35784
+ "pipelineOrchestrator.assignAudio": [{
35785
+ name: "deviceId",
35786
+ form: "single",
35787
+ optional: false
35788
+ }],
35789
+ "pipelineOrchestrator.assignPipeline": [{
35790
+ name: "deviceId",
35791
+ form: "single",
35792
+ optional: false
35793
+ }],
35794
+ "pipelineOrchestrator.getAudioAssignment": [{
35795
+ name: "deviceId",
35796
+ form: "single",
35797
+ optional: false
35798
+ }],
35799
+ "pipelineOrchestrator.getCameraMetrics": [{
35800
+ name: "deviceId",
35801
+ form: "single",
35802
+ optional: false
35803
+ }],
35804
+ "pipelineOrchestrator.getCameraSettings": [{
35805
+ name: "deviceId",
35806
+ form: "single",
35807
+ optional: false
35808
+ }],
35809
+ "pipelineOrchestrator.getCameraStatus": [{
35810
+ name: "deviceId",
35811
+ form: "single",
35812
+ optional: false
35813
+ }],
35814
+ "pipelineOrchestrator.getCameraStatuses": [{
35815
+ name: "deviceIds",
35816
+ form: "array",
35817
+ optional: true
35818
+ }],
35819
+ "pipelineOrchestrator.getCameraStepOverrides": [{
35820
+ name: "deviceId",
35821
+ form: "single",
35822
+ optional: false
35823
+ }],
35824
+ "pipelineOrchestrator.getCameraSwitches": [{
35825
+ name: "deviceId",
35826
+ form: "single",
35827
+ optional: false
35828
+ }],
35829
+ "pipelineOrchestrator.getPipelineAssignment": [{
35830
+ name: "deviceId",
35831
+ form: "single",
35832
+ optional: false
35833
+ }],
35834
+ "pipelineOrchestrator.getPipelineDevicePin": [{
35835
+ name: "deviceId",
35836
+ form: "single",
35837
+ optional: false
35838
+ }],
35839
+ "pipelineOrchestrator.resolvePipeline": [{
35840
+ name: "deviceId",
35841
+ form: "single",
35842
+ optional: false
35843
+ }],
35844
+ "pipelineOrchestrator.setCameraPipelineForAgent": [{
35845
+ name: "deviceId",
35846
+ form: "single",
35847
+ optional: false
35848
+ }],
35849
+ "pipelineOrchestrator.setCameraStepOverride": [{
35850
+ name: "deviceId",
35851
+ form: "single",
35852
+ optional: false
35853
+ }],
35854
+ "pipelineOrchestrator.setCameraStepToggle": [{
35855
+ name: "deviceId",
35856
+ form: "single",
35857
+ optional: false
35858
+ }],
35859
+ "pipelineOrchestrator.setCameraSwitch": [{
35860
+ name: "deviceId",
35861
+ form: "single",
35862
+ optional: false
35863
+ }],
35864
+ "pipelineOrchestrator.setPipelineDevicePin": [{
35865
+ name: "deviceId",
35866
+ form: "single",
35867
+ optional: false
35868
+ }],
35869
+ "pipelineOrchestrator.unassignAudio": [{
35870
+ name: "deviceId",
35871
+ form: "single",
35872
+ optional: false
35873
+ }],
35874
+ "pipelineOrchestrator.unassignPipeline": [{
35875
+ name: "deviceId",
35876
+ form: "single",
35877
+ optional: false
35878
+ }],
35879
+ "pipelineRunner.attachCamera": [{
35880
+ name: "deviceId",
35881
+ form: "single",
35882
+ optional: false
35883
+ }],
35884
+ "pipelineRunner.detachCamera": [{
35885
+ name: "deviceId",
35886
+ form: "single",
35887
+ optional: false
35888
+ }],
35889
+ "pipelineRunner.getCameraMetrics": [{
35890
+ name: "deviceId",
35891
+ form: "single",
35892
+ optional: false
35893
+ }],
35894
+ "pipelineRunner.reportMotion": [{
35895
+ name: "deviceId",
35896
+ form: "single",
35897
+ optional: false
35898
+ }],
35899
+ "pipelineRunner.runDetailSubtree": [{
35900
+ name: "deviceId",
35901
+ form: "single",
35902
+ optional: false
35903
+ }],
35904
+ "pipelineRunner.runStatelessStep": [{
35905
+ name: "sourceDeviceId",
35906
+ form: "single",
35907
+ optional: false
35908
+ }],
35909
+ "plateGallery.getPlateByTrack": [{
35910
+ name: "deviceId",
35911
+ form: "single",
35912
+ optional: false
35913
+ }],
35914
+ "plateGallery.listPlates": [{
35915
+ name: "deviceId",
35916
+ form: "single",
35917
+ optional: true
35918
+ }],
35919
+ "privacyMask.getOptions": [{
35920
+ name: "deviceId",
35921
+ form: "single",
35922
+ optional: false
35923
+ }],
35924
+ "privacyMask.setAudioEnabled": [{
35925
+ name: "deviceId",
35926
+ form: "single",
35927
+ optional: false
35928
+ }],
35929
+ "privacyMask.setMask": [{
35930
+ name: "deviceId",
35931
+ form: "single",
35932
+ optional: false
35933
+ }],
35934
+ "ptz.continuousMove": [{
35935
+ name: "deviceId",
35936
+ form: "single",
35937
+ optional: false
35938
+ }],
35939
+ "ptz.deletePreset": [{
35940
+ name: "deviceId",
35941
+ form: "single",
35942
+ optional: false
35943
+ }],
35944
+ "ptz.getOptions": [{
35945
+ name: "deviceId",
35946
+ form: "single",
35947
+ optional: false
35948
+ }],
35949
+ "ptz.getPosition": [{
35950
+ name: "deviceId",
35951
+ form: "single",
35952
+ optional: false
35953
+ }],
35954
+ "ptz.getPresets": [{
35955
+ name: "deviceId",
35956
+ form: "single",
35957
+ optional: false
35958
+ }],
35959
+ "ptz.goHome": [{
35960
+ name: "deviceId",
35961
+ form: "single",
35962
+ optional: false
35963
+ }],
35964
+ "ptz.goToPreset": [{
35965
+ name: "deviceId",
35966
+ form: "single",
35967
+ optional: false
35968
+ }],
35969
+ "ptz.move": [{
35970
+ name: "deviceId",
35971
+ form: "single",
35972
+ optional: false
35973
+ }],
35974
+ "ptz.savePreset": [{
35975
+ name: "deviceId",
35976
+ form: "single",
35977
+ optional: false
35978
+ }],
35979
+ "ptz.setAutofocus": [{
35980
+ name: "deviceId",
35981
+ form: "single",
35982
+ optional: false
35983
+ }],
35984
+ "ptz.stop": [{
35985
+ name: "deviceId",
35986
+ form: "single",
35987
+ optional: false
35988
+ }],
35989
+ "ptzAutotrack.getSettings": [{
35990
+ name: "deviceId",
35991
+ form: "single",
35992
+ optional: false
35993
+ }],
35994
+ "ptzAutotrack.getStatus": [{
35995
+ name: "deviceId",
35996
+ form: "single",
35997
+ optional: false
35998
+ }],
35999
+ "ptzAutotrack.setEnabled": [{
36000
+ name: "deviceId",
36001
+ form: "single",
36002
+ optional: false
36003
+ }],
36004
+ "ptzAutotrack.setSettings": [{
36005
+ name: "deviceId",
36006
+ form: "single",
36007
+ optional: false
36008
+ }],
36009
+ "reboot.reboot": [{
36010
+ name: "deviceId",
36011
+ form: "single",
36012
+ optional: false
36013
+ }],
36014
+ "recording.deleteFootprint": [{
36015
+ name: "deviceId",
36016
+ form: "single",
36017
+ optional: false
36018
+ }],
36019
+ "recording.getAvailability": [{
36020
+ name: "deviceId",
36021
+ form: "single",
36022
+ optional: false
36023
+ }],
36024
+ "recording.getDaysWithRecordings": [{
36025
+ name: "deviceId",
36026
+ form: "single",
36027
+ optional: false
36028
+ }],
36029
+ "recording.getDeviceConfig": [{
36030
+ name: "deviceId",
36031
+ form: "single",
36032
+ optional: false
36033
+ }],
36034
+ "recording.getPlaybackManifest": [{
36035
+ name: "deviceId",
36036
+ form: "single",
36037
+ optional: false
36038
+ }],
36039
+ "recording.listOpsLog": [{
36040
+ name: "deviceId",
36041
+ form: "single",
36042
+ optional: true
36043
+ }],
36044
+ "recording.locateSegment": [{
36045
+ name: "deviceId",
36046
+ form: "single",
36047
+ optional: false
36048
+ }],
36049
+ "recording.pruneFootage": [{
36050
+ name: "deviceId",
36051
+ form: "single",
36052
+ optional: false
36053
+ }],
36054
+ "recording.readGopBytes": [{
36055
+ name: "deviceId",
36056
+ form: "single",
36057
+ optional: false
36058
+ }],
36059
+ "recording.readSegmentBytes": [{
36060
+ name: "deviceId",
36061
+ form: "single",
36062
+ optional: false
36063
+ }],
36064
+ "recording.relocateFootage": [{
36065
+ name: "deviceId",
36066
+ form: "single",
36067
+ optional: true
36068
+ }],
36069
+ "recording.renderClip": [{
36070
+ name: "deviceId",
36071
+ form: "single",
36072
+ optional: false
36073
+ }],
36074
+ "recording.renderGif": [{
36075
+ name: "deviceId",
36076
+ form: "single",
36077
+ optional: false
36078
+ }],
36079
+ "recording.rescanStorage": [{
36080
+ name: "deviceId",
36081
+ form: "single",
36082
+ optional: false
36083
+ }],
36084
+ "recording.setDeviceConfig": [{
36085
+ name: "deviceId",
36086
+ form: "single",
36087
+ optional: false
36088
+ }],
36089
+ "recording.startStorageMigrationMove": [{
36090
+ name: "deviceId",
36091
+ form: "single",
36092
+ optional: true
36093
+ }],
36094
+ "recordingExport.createExport": [{
36095
+ name: "deviceId",
36096
+ form: "single",
36097
+ optional: false
36098
+ }],
36099
+ "recordingExport.listExports": [{
36100
+ name: "deviceId",
36101
+ form: "single",
36102
+ optional: true
36103
+ }],
36104
+ "sceneMonitor.captureReference": [{
36105
+ name: "deviceId",
36106
+ form: "single",
36107
+ optional: false
36108
+ }],
36109
+ "sceneMonitor.createScene": [{
36110
+ name: "deviceId",
36111
+ form: "single",
36112
+ optional: false
36113
+ }],
36114
+ "sceneMonitor.deleteReference": [{
36115
+ name: "deviceId",
36116
+ form: "single",
36117
+ optional: false
36118
+ }],
36119
+ "sceneMonitor.deleteScene": [{
36120
+ name: "deviceId",
36121
+ form: "single",
36122
+ optional: false
36123
+ }],
36124
+ "sceneMonitor.listScenes": [{
36125
+ name: "deviceId",
36126
+ form: "single",
36127
+ optional: false
36128
+ }],
36129
+ "sceneMonitor.recheckNow": [{
36130
+ name: "deviceId",
36131
+ form: "single",
36132
+ optional: false
36133
+ }],
36134
+ "sceneMonitor.updateScene": [{
36135
+ name: "deviceId",
36136
+ form: "single",
36137
+ optional: false
36138
+ }],
36139
+ "scriptRunner.run": [{
36140
+ name: "deviceId",
36141
+ form: "single",
36142
+ optional: false
36143
+ }],
36144
+ "scriptRunner.stop": [{
36145
+ name: "deviceId",
36146
+ form: "single",
36147
+ optional: false
36148
+ }],
36149
+ "snapshot.getSnapshot": [{
36150
+ name: "deviceId",
36151
+ form: "single",
36152
+ optional: false
36153
+ }],
36154
+ "snapshot.getSnapshotOverview": [{
36155
+ name: "deviceIds",
36156
+ form: "array",
36157
+ optional: false
36158
+ }],
36159
+ "snapshot.invalidateCache": [{
36160
+ name: "deviceId",
36161
+ form: "single",
36162
+ optional: false
36163
+ }],
36164
+ "streamBroker.acquireEgressTranscode": [{
36165
+ name: "deviceId",
36166
+ form: "single",
36167
+ optional: false
36168
+ }],
36169
+ "streamBroker.assignProfile": [{
36170
+ name: "deviceId",
36171
+ form: "single",
36172
+ optional: false
36173
+ }],
36174
+ "streamBroker.getDeviceAudioMute": [{
36175
+ name: "deviceId",
36176
+ form: "single",
36177
+ optional: false
36178
+ }],
36179
+ "streamBroker.getStreamWithCodec": [{
36180
+ name: "deviceId",
36181
+ form: "single",
36182
+ optional: false
36183
+ }],
36184
+ "streamBroker.produceEventMedia": [{
36185
+ name: "deviceId",
36186
+ form: "single",
36187
+ optional: false
36188
+ }],
36189
+ "streamBroker.publishCameraStream": [{
36190
+ name: "deviceId",
36191
+ form: "single",
36192
+ optional: false
36193
+ }],
36194
+ "streamBroker.renderPreBufferClip": [{
36195
+ name: "deviceId",
36196
+ form: "single",
36197
+ optional: false
36198
+ }],
36199
+ "streamBroker.restartProfile": [{
36200
+ name: "deviceId",
36201
+ form: "single",
36202
+ optional: false
36203
+ }],
36204
+ "streamBroker.retractCameraStream": [{
36205
+ name: "deviceId",
36206
+ form: "single",
36207
+ optional: false
36208
+ }],
36209
+ "streamBroker.setDeviceAudioMute": [{
36210
+ name: "deviceId",
36211
+ form: "single",
36212
+ optional: false
36213
+ }],
36214
+ "streamBroker.unassignProfile": [{
36215
+ name: "deviceId",
36216
+ form: "single",
36217
+ optional: false
36218
+ }],
36219
+ "streamCatalog.getCatalog": [{
36220
+ name: "deviceId",
36221
+ form: "single",
36222
+ optional: false
36223
+ }],
36224
+ "streamParams.getConfigSchema": [{
36225
+ name: "deviceId",
36226
+ form: "single",
36227
+ optional: false
36228
+ }],
36229
+ "streamParams.getOptions": [{
36230
+ name: "deviceId",
36231
+ form: "single",
36232
+ optional: false
36233
+ }],
36234
+ "streamParams.setProfile": [{
36235
+ name: "deviceId",
36236
+ form: "single",
36237
+ optional: false
36238
+ }],
36239
+ "switch.setState": [{
36240
+ name: "deviceId",
36241
+ form: "single",
36242
+ optional: false
36243
+ }],
36244
+ "vacuumControl.locate": [{
36245
+ name: "deviceId",
36246
+ form: "single",
36247
+ optional: false
36248
+ }],
36249
+ "vacuumControl.pause": [{
36250
+ name: "deviceId",
36251
+ form: "single",
36252
+ optional: false
36253
+ }],
36254
+ "vacuumControl.returnToBase": [{
36255
+ name: "deviceId",
36256
+ form: "single",
36257
+ optional: false
36258
+ }],
36259
+ "vacuumControl.setFanSpeed": [{
36260
+ name: "deviceId",
36261
+ form: "single",
36262
+ optional: false
36263
+ }],
36264
+ "vacuumControl.start": [{
36265
+ name: "deviceId",
36266
+ form: "single",
36267
+ optional: false
36268
+ }],
36269
+ "vacuumControl.stop": [{
36270
+ name: "deviceId",
36271
+ form: "single",
36272
+ optional: false
36273
+ }],
36274
+ "valve.close": [{
36275
+ name: "deviceId",
36276
+ form: "single",
36277
+ optional: false
36278
+ }],
36279
+ "valve.open": [{
36280
+ name: "deviceId",
36281
+ form: "single",
36282
+ optional: false
36283
+ }],
36284
+ "valve.setPosition": [{
36285
+ name: "deviceId",
36286
+ form: "single",
36287
+ optional: false
36288
+ }],
36289
+ "valve.stop": [{
36290
+ name: "deviceId",
36291
+ form: "single",
36292
+ optional: false
36293
+ }],
36294
+ "videoclips.getClipPlayback": [{
36295
+ name: "deviceId",
36296
+ form: "single",
36297
+ optional: false
36298
+ }],
36299
+ "videoclips.listClips": [{
36300
+ name: "deviceId",
36301
+ form: "single",
36302
+ optional: false
36303
+ }],
36304
+ "waterHeater.setAway": [{
36305
+ name: "deviceId",
36306
+ form: "single",
36307
+ optional: false
36308
+ }],
36309
+ "waterHeater.setOperationMode": [{
36310
+ name: "deviceId",
36311
+ form: "single",
36312
+ optional: false
36313
+ }],
36314
+ "waterHeater.setTargetTemp": [{
36315
+ name: "deviceId",
36316
+ form: "single",
36317
+ optional: false
36318
+ }],
36319
+ "webrtcSession.addIceCandidate": [{
36320
+ name: "deviceId",
36321
+ form: "single",
36322
+ optional: false
36323
+ }],
36324
+ "webrtcSession.closeSession": [{
36325
+ name: "deviceId",
36326
+ form: "single",
36327
+ optional: false
36328
+ }],
36329
+ "webrtcSession.createSession": [{
36330
+ name: "deviceId",
36331
+ form: "single",
36332
+ optional: false
36333
+ }],
36334
+ "webrtcSession.getIceCandidates": [{
36335
+ name: "deviceId",
36336
+ form: "single",
36337
+ optional: false
36338
+ }],
36339
+ "webrtcSession.getSessionState": [{
36340
+ name: "deviceId",
36341
+ form: "single",
36342
+ optional: false
36343
+ }],
36344
+ "webrtcSession.handleAnswer": [{
36345
+ name: "deviceId",
36346
+ form: "single",
36347
+ optional: false
36348
+ }],
36349
+ "webrtcSession.handleOffer": [{
36350
+ name: "deviceId",
36351
+ form: "single",
36352
+ optional: false
36353
+ }],
36354
+ "webrtcSession.hasAdaptiveBitrate": [{
36355
+ name: "deviceId",
36356
+ form: "single",
36357
+ optional: false
36358
+ }],
36359
+ "webrtcSession.listStreams": [{
36360
+ name: "deviceId",
36361
+ form: "single",
36362
+ optional: false
36363
+ }],
36364
+ "zoneAnalytics.getCameraHistory": [{
36365
+ name: "deviceId",
36366
+ form: "single",
36367
+ optional: false
36368
+ }],
36369
+ "zoneAnalytics.getCurrentSnapshot": [{
36370
+ name: "deviceId",
36371
+ form: "single",
36372
+ optional: false
36373
+ }],
36374
+ "zoneAnalytics.getUnzonedHistory": [{
36375
+ name: "deviceId",
36376
+ form: "single",
36377
+ optional: false
36378
+ }],
36379
+ "zoneAnalytics.getZoneHistory": [{
36380
+ name: "deviceId",
36381
+ form: "single",
36382
+ optional: false
36383
+ }],
36384
+ "zoneRules.listRules": [{
36385
+ name: "deviceId",
36386
+ form: "single",
36387
+ optional: false
36388
+ }],
36389
+ "zoneRules.setRules": [{
36390
+ name: "deviceId",
36391
+ form: "single",
36392
+ optional: false
36393
+ }],
36394
+ "zones.addZone": [{
36395
+ name: "deviceId",
36396
+ form: "single",
36397
+ optional: false
36398
+ }],
36399
+ "zones.listZones": [{
36400
+ name: "deviceId",
36401
+ form: "single",
36402
+ optional: false
36403
+ }],
36404
+ "zones.removeZone": [{
36405
+ name: "deviceId",
36406
+ form: "single",
36407
+ optional: false
36408
+ }],
36409
+ "zones.updateZone": [{
36410
+ name: "deviceId",
36411
+ form: "single",
36412
+ optional: false
36413
+ }]
36414
+ });
34489
36415
  Object.freeze({
34490
36416
  "broker": "broker",
34491
36417
  "device-export": "device-export",
@@ -34497,7 +36423,7 @@ Object.freeze({
34497
36423
  });
34498
36424
  /**
34499
36425
  * Per-cap runtime-state policy, projected from every `*.cap.ts` that declares
34500
- * `runtimeState`. 62 caps: 33 `restored`, 29 `session`.
36426
+ * `runtimeState`. 63 caps: 33 `restored`, 30 `session`.
34501
36427
  *
34502
36428
  * A cap absent from this map has no runtime-state slice at all. A cap PRESENT
34503
36429
  * with `durability: 'session'` has one and has decided not to keep it.
@@ -34627,6 +36553,10 @@ var RUNTIME_STATE_POLICY = {
34627
36553
  durability: "restored",
34628
36554
  volatileFields: ["lastFetchedAt"]
34629
36555
  },
36556
+ "intercom": {
36557
+ durability: "session",
36558
+ volatileFields: []
36559
+ },
34630
36560
  "lawn-mower-control": {
34631
36561
  durability: "session",
34632
36562
  volatileFields: []