@camstack/types 1.2.414 → 1.2.415

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 (62) hide show
  1. package/dist/addon.js +4 -1798
  2. package/dist/addon.mjs +2 -1796
  3. package/dist/capabilities/camera-grid-layout.cap.d.ts +1 -1
  4. package/dist/capabilities/device-history.cap.d.ts +1 -1
  5. package/dist/capabilities/device-manager.cap.d.ts +2 -2
  6. package/dist/capabilities/notification-rules.cap.d.ts +2 -2
  7. package/dist/capabilities/osd-manager.cap.d.ts +1 -1
  8. package/dist/capabilities/pipeline-analytics.cap.d.ts +1 -1
  9. package/dist/capabilities/pipeline-runner.cap.d.ts +1 -1
  10. package/dist/capabilities/ptz.cap.d.ts +3 -3
  11. package/dist/capabilities/recording-export.cap.d.ts +1 -1
  12. package/dist/capabilities/scene-monitor.cap.d.ts +1 -1
  13. package/dist/capabilities/stream-signals.cap.d.ts +1 -1
  14. package/dist/capabilities/videoclips.cap.d.ts +2 -2
  15. package/dist/capabilities/viewer-ui.cap.d.ts +1 -1
  16. package/dist/catalogs/index.d.ts +1 -1
  17. package/dist/catalogs/{frigate-plus-classmap.d.ts → plus-catalog-classmap.d.ts} +25 -25
  18. package/dist/catalogs/root-model-supply.d.ts +3 -3
  19. package/dist/client.js +22 -22
  20. package/dist/client.mjs +22 -22
  21. package/dist/composition/cards/__fixtures__/stored-compositions.d.ts +2 -2
  22. package/dist/composition/customize/__fixtures__/refs.d.ts +1 -1
  23. package/dist/{composition-CSLSFGTO.js → composition-DsmkwP9-.js} +1 -1
  24. package/dist/{composition-BJ8iAZb3.mjs → composition-kEl9mevu.mjs} +1 -1
  25. package/dist/device/base-device-provider.d.ts +1 -1
  26. package/dist/device/device-state-handle.d.ts +1 -1
  27. package/dist/device/location-icon.d.ts +1 -1
  28. package/dist/device/site-zone.d.ts +2 -2
  29. package/dist/enums/event-category.d.ts +1 -1
  30. package/dist/enums.js +1 -1
  31. package/dist/enums.mjs +1 -1
  32. package/dist/{event-category-Ceif8n-v.mjs → event-category-DHXxB8t9.mjs} +1 -1
  33. package/dist/{event-category-DG6Vir8Z.js → event-category-DXZ3f9Q5.js} +1 -1
  34. package/dist/ffmpeg/fmp4-fragment-plane.d.ts +1 -1
  35. package/dist/ffmpeg/gif-derive.d.ts +1 -1
  36. package/dist/ffmpeg/process.d.ts +1 -1
  37. package/dist/generated/addon-cap-facts.d.ts +2 -0
  38. package/dist/geometry/subject-path.d.ts +1 -1
  39. package/dist/index.d.ts +1 -1
  40. package/dist/index.js +1516 -1516
  41. package/dist/index.mjs +1510 -1510
  42. package/dist/interfaces/addon-peer-bytes.d.ts +1 -1
  43. package/dist/interfaces/agent.d.ts +1 -1
  44. package/dist/interfaces/birth-decision-ledger.d.ts +1 -1
  45. package/dist/interfaces/debug-note-archive.d.ts +1 -1
  46. package/dist/interfaces/inference-engine.d.ts +1 -1
  47. package/dist/interfaces/logging.d.ts +1 -1
  48. package/dist/metrics/failure-counters.d.ts +2 -2
  49. package/dist/node.js +2 -2
  50. package/dist/node.mjs +2 -2
  51. package/dist/notification/timelapse-rule.d.ts +1 -1
  52. package/dist/pipeline/root-face-crop.d.ts +1 -1
  53. package/dist/pipeline/second-pass/motion-crop-plan.d.ts +1 -1
  54. package/dist/pipeline/second-pass/small-subject-recovery.d.ts +4 -4
  55. package/dist/process/child-cost-registry.d.ts +1 -1
  56. package/dist/{sleep-CYfIZzGv.mjs → sleep-BErAxhul.mjs} +1982 -4
  57. package/dist/{sleep-UP964hNP.js → sleep-BPQ2ZyaI.js} +1999 -3
  58. package/dist/types/detection.d.ts +2 -2
  59. package/dist/types/models.d.ts +3 -3
  60. package/dist/types/overlay-layer.d.ts +1 -1
  61. package/dist/utils/addon-id.d.ts +1 -1
  62. package/package.json +1 -1
@@ -78,7 +78,7 @@ declare const GridLayoutCellSchema: z.ZodObject<{
78
78
  *
79
79
  * A grid's `high` composes its sources' `high` and its `low` their `low`, so a
80
80
  * profile is on offer only when EVERY source can serve it. The refusal NAMES
81
- * the sources, because "this grid has no low" is not a finding — "615 has no
81
+ * the sources, because "this grid has no low" is not a finding — "101 has no
82
82
  * low" is, and it is the one an operator can act on.
83
83
  */
84
84
  declare const GridProfileOfferSchema: z.ZodObject<{
@@ -385,7 +385,7 @@ export declare const deviceHistoryCapability: {
385
385
  }, z.core.$strip>>>, import("./capability-definition.js").CapabilityMethodKind>;
386
386
  /**
387
387
  * A NODE's series. The subject is `forNodeId`, never `nodeId`: a top-level
388
- * `nodeId` is the cap ROUTING key, and `nodeId: 'little-unraid'` sent the
388
+ * `nodeId` is the cap ROUTING key, and `nodeId: 'agent-a'` sent the
389
389
  * read to that agent, which hosts no device-history.
390
390
  */
391
391
  readonly listNodeSeries: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
@@ -790,7 +790,7 @@ export declare const deviceManagerCapability: {
790
790
  * The room's ICON travels with the rename, including when `from` was
791
791
  * never registered — otherwise it orphans on a key no location carries
792
792
  * any more. A merge keeps the TARGET's icon when it has one: renaming
793
- * "Sala" into "Salone" moves devices into Salone, it does not restyle
793
+ * "Sala" into "Hall" moves devices into Hall, it does not restyle
794
794
  * it. */
795
795
  readonly renameLocation: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
796
796
  from: z.ZodString;
@@ -861,7 +861,7 @@ export declare const deviceManagerCapability: {
861
861
  description: z.ZodNullable<z.ZodString>;
862
862
  }, z.core.$strip>, z.ZodVoid, "mutation">;
863
863
  /** Every SITE ZONE — a named part of the property that groups locations
864
- * ("Zona notte" holds the bedrooms). One call answers the whole picture:
864
+ * ("Night zone" holds the bedrooms). One call answers the whole picture:
865
865
  * key, the label as typed, the icon, and the locations inside.
866
866
  *
867
867
  * Together, because a surface that asked for membership separately could
@@ -4476,8 +4476,8 @@ export type NcAlarmSensors = z.infer<typeof NcAlarmSensorsSchema>;
4476
4476
  * own `sustainSeconds` (29 s on this hub), so its clip is anchored well in the
4477
4477
  * past — and the other source, the recordings, cannot cover a recent moment:
4478
4478
  * measured against `recording.getAvailability` for a 10 s window at several
4479
- * anchors, full coverage arrived at −18 s on device 590 and −26 s on 615 and
4480
- * 617. That edge is a PHASE of the 10-second segment cycle, not a number. The
4479
+ * anchors, full coverage arrived at −18 s on device 104 and −26 s on 101 and
4480
+ * 102. That edge is a PHASE of the 10-second segment cycle, not a number. The
4481
4481
  * ring therefore has to hold the moment until the recordings can take it over:
4482
4482
  * the worst measured phase (26 s) plus the confirmation lag (29 s) is 55 s, and
4483
4483
  * 60 is the round number above it.
@@ -11,7 +11,7 @@ import { type InferProvider } from './capability-definition.js';
11
11
  * This cap owns the other half: a per-(camera, slot) BINDING that says
12
12
  * which value feeds the slot, how it is formatted, and under which
13
13
  * conditions it is shown at all. Named TEMPLATES combine many device
14
- * fields into one overlay string (Scrypted OSD Manager parity).
14
+ * fields into one overlay string (plugin catalog OSD Manager parity).
15
15
  */
16
16
  /**
17
17
  * How a parser token expands one binding. Not stored on the binding —
@@ -7470,7 +7470,7 @@ export declare const pipelineAnalyticsCapability: {
7470
7470
  * audio, stopping at the first hit — so on the live hub, where object
7471
7471
  * events own no media of their own and 299 883 of 300 559 media rows are
7472
7472
  * motion-owned, EVERY object event resolved to its motion namesake. A
7473
- * track from 17:34 on camera 615 was served a snapshot from 22:35 eleven
7473
+ * track from 17:34 on camera 101 was served a snapshot from 22:35 eleven
7474
7474
  * days earlier, silently.
7475
7475
  *
7476
7476
  * D476 had already disambiguated the KEY (`motion:` vs `object:`); this is
@@ -931,7 +931,7 @@ export declare const pipelineRunnerCapability: {
931
931
  *
932
932
  * The periodic recheck (`occupancyRecheckSec`, 300 s) exists to watch a
933
933
  * still scene. It is the wrong instrument for a QUESTION that has just been
934
- * asked: on device 617 a parked car's departure was observed, a departure
934
+ * asked: on device 102 a parked car's departure was observed, a departure
935
935
  * strike was armed — and then the motion session ended, the strike decayed
936
936
  * after its 30 s TTL, and the next periodic look arrived up to five minutes
937
937
  * later with nothing left to confirm. Every one of those departures was
@@ -110,9 +110,9 @@ declare const PtzOptionsSchema: z.ZodObject<{
110
110
  * Reolink preset 0, Hikvision preset '1', Dahua preset 1 -- and on this fleet
111
111
  * not one of the three cameras honours its own:
112
112
  *
113
- * 592 Videocamera camera Daniel (reolink) preset 0 holds "stanza"
114
- * 1438 Videocamera dispensa (hikvision) preset 1 holds "Credenza"
115
- * 3836 Videocamera studio (amcrest) preset 1 holds "Preset1"
113
+ * 107 Camera camera Carol (reolink) preset 0 holds "stanza"
114
+ * 1438 Camera dispensa (hikvision) preset 1 holds "Credenza"
115
+ * 3836 Camera studio (amcrest) preset 1 holds "Preset1"
116
116
  *
117
117
  * So `goHome` meant "go wherever the operator happened to save in slot 0 or 1",
118
118
  * and two of the three swallowed the failure in a bare `catch`. For autotrack
@@ -31,7 +31,7 @@ export declare const ExportSpeedSchema: z.ZodNumber;
31
31
  * on a 10 h window holding 29,393 s of footage every range landed late by the
32
32
  * gap accumulated before it — up to 6,607 s, well past EOF. Nothing matched,
33
33
  * the video was a uniform timelapse, and the log line reported the five ranges
34
- * that had been ASKED for (2026-08-13, export `57d14363`, camera 615).
34
+ * that had been ASKED for (2026-08-13, export `57d14363`, camera 101).
35
35
  *
36
36
  * Relative and not absolute epoch, because an absolute epoch would make every
37
37
  * call site responsible for the same subtraction.
@@ -13,7 +13,7 @@ import { type InferNativeProvider } from './capability-definition.js';
13
13
  * which put a "Scenes" tab on one camera's detail page. That is the wrong shape
14
14
  * for the thing: a scene is a standing question about the property ("is the bin
15
15
  * still out"), and the operator's question is "which of my scenes have tripped",
16
- * across every camera at once — not "what does camera 617 think". Buried one
16
+ * across every camera at once — not "what does camera 102 think". Buried one
17
17
  * camera deep it also could not be found. The surface is now a top-level admin
18
18
  * page (`/scenes`, `pages/Scenes.tsx`) that lists every scene on every camera and
19
19
  * picks the camera inside the create flow, the same shape Events and Faces have.
@@ -5,7 +5,7 @@ import { DeviceType } from '../device/device-type.js';
5
5
  * The signals a device can emit to WAKE its own stream.
6
6
  *
7
7
  * A camera whose stream is built on demand sleeps until something asks for it,
8
- * and "something" cannot be a consumer that is merely attached — a Frigate-style
8
+ * and "something" cannot be a consumer that is merely attached — a external-catalog
9
9
  * puller holds a session open for ever, and treating that as demand would keep
10
10
  * a battery camera awake for ever, which is the whole thing the battery is for
11
11
  * (D173). So the wake has to come from the CAMERA: an event it noticed by
@@ -19,7 +19,7 @@ import { type InferProvider } from './capability-definition.js';
19
19
  * device's SOURCES are its BINDINGS: `deviceManager.getBindings(deviceId)` is
20
20
  * what says a provider serves this camera, never the set of addons that
21
21
  * happen to have registered the capability somewhere in the cluster. That is
22
- * what stopped one addon appearing three times on 592 — as the device's
22
+ * what stopped one addon appearing three times on 107 — as the device's
23
23
  * native provider, as the hub-local registration and as an
24
24
  * `<addonId>@<nodeId>` one (D554 amended 2026-09-20).
25
25
  *
@@ -203,7 +203,7 @@ export type ClipPlayback = z.infer<typeof ClipPlaybackSchema>;
203
203
  * camera has no recordings", which is the defect this whole line of work is
204
204
  * about: a battery camera nobody woke (`sleeping`), a camera that could not be
205
205
  * reached at all (`unreachable`, also what a provider that THREW reports), a
206
- * camera whose SD card is not mounted (`no-storage`, measured on 640 —
206
+ * camera whose SD card is not mounted (`no-storage`, measured on 106 —
207
207
  * `HddInfo mount 0`, honestly nothing to list rather than "no clips"), and a
208
208
  * camera whose OWN index disagrees with its OWN calendar (`index-empty`,
209
209
  * measured on 618: the calendar marks 3–20 September, days 6–20 list zero
@@ -20,7 +20,7 @@ export declare const viewerUiCapability: {
20
20
  * `getStaticDir` leaks a hub filesystem path.
21
21
  *
22
22
  * ⚠ Checked before gating: the VIEWER app IS used by a non-admin user
23
- * (`roberta`), but it never calls `viewerUi.*` over tRPC. The static SPA
23
+ * (`bob`), but it never calls `viewerUi.*` over tRPC. The static SPA
24
24
  * it loads is served by the plain `GET /viewer/*` Fastify route in
25
25
  * `main.ts`, which reads `staticDir`/`indexPath` from a module-level
26
26
  * cache populated ONCE at boot via `capRegistry.getSingletonForNode`
@@ -1,5 +1,5 @@
1
1
  export * from './coco-classmap.js';
2
- export * from './frigate-plus-classmap.js';
2
+ export * from './plus-catalog-classmap.js';
3
3
  export * from './root-model-supply.js';
4
4
  export * from './sensor-active-state.js';
5
5
  export * from './audio-classmap.js';
@@ -3,11 +3,11 @@ import type { RootStepSupply } from '../types/models.js';
3
3
  /** A macro a detection catalog classMap may resolve to. */
4
4
  export type ClassMapMacroTarget = (typeof CLASS_MAP_MACRO_TARGETS)[number];
5
5
  /**
6
- * Raw Frigate+ label → detection macro. Every label of the documented
7
- * Frigate+ base set (docs.frigate.video/plus, verified 2026-08-21) is either
8
- * here or in {@link FRIGATE_PLUS_UNMAPPED_LABELS}, with the reason it is not.
6
+ * Raw plus catalog label → detection macro. Every label of the documented
7
+ * plus catalog base set (docs.frigate.video/plus, verified 2026-08-21) is either
8
+ * here or in {@link PLUS_CATALOG_UNMAPPED_LABELS}, with the reason it is not.
9
9
  *
10
- * Why this exists: a Frigate+ import used to carry NO classMap, so it inherited
10
+ * Why this exists: a plus catalog import used to carry NO classMap, so it inherited
11
11
  * the step's `COCO_TO_MACRO` (`preserveOriginal: false`) and the executor
12
12
  * dropped every label COCO does not name — deer, raccoon, fox, squirrel, goat,
13
13
  * rabbit, skunk, kangaroo, possum, rodent, school_bus, garbage_truck and even
@@ -15,11 +15,11 @@ export type ClassMapMacroTarget = (typeof CLASS_MAP_MACRO_TARGETS)[number];
15
15
  * label as `originalClass` whenever the map resolves it, so the fine identity
16
16
  * survives under the macro.
17
17
  */
18
- export declare const FRIGATE_PLUS_TO_MACRO: Readonly<Record<string, ClassMapMacroTarget>>;
18
+ export declare const PLUS_CATALOG_TO_MACRO: Readonly<Record<string, ClassMapMacroTarget>>;
19
19
  /**
20
- * Frigate+ labels deliberately left OUT of {@link FRIGATE_PLUS_TO_MACRO}.
20
+ * plus catalog labels deliberately left OUT of {@link PLUS_CATALOG_TO_MACRO}.
21
21
  *
22
- * - `attribute`: Frigate+ emits these INSIDE a parent box (a face inside a
22
+ * - `attribute`: plus catalog emits these INSIDE a parent box (a face inside a
23
23
  * person, a plate or a carrier logo on a vehicle). Mapping one to its
24
24
  * parent's macro would spawn a second, overlapping track for the same
25
25
  * subject. `face` and `license_plate` are instead declared as CROP supplies
@@ -27,46 +27,46 @@ export declare const FRIGATE_PLUS_TO_MACRO: Readonly<Record<string, ClassMapMacr
27
27
  * it, when the face / plate step uses the root model.
28
28
  * - `no-macro`: an object with no detection macro to live under.
29
29
  */
30
- export declare const FRIGATE_PLUS_UNMAPPED_LABELS: Readonly<Record<string, 'attribute' | 'no-macro'>>;
30
+ export declare const PLUS_CATALOG_UNMAPPED_LABELS: Readonly<Record<string, 'attribute' | 'no-macro'>>;
31
31
  /**
32
- * The per-model classMap for a Frigate / Frigate+ detector, derived from ITS
33
- * labelmap: each label resolves through {@link FRIGATE_PLUS_TO_MACRO} first,
34
- * then `COCO_TO_MACRO` (Frigate's default model ships the COCO-91 labelmap, so
32
+ * The per-model classMap for a plus catalog / plus catalog detector, derived from ITS
33
+ * labelmap: each label resolves through {@link PLUS_CATALOG_TO_MACRO} first,
34
+ * then `COCO_TO_MACRO` (plus catalog's default model ships the COCO-91 labelmap, so
35
35
  * a preset import may carry either vocabulary). A label neither knows is left
36
36
  * out, and `preserveOriginal: false` drops it in the executor — the same
37
- * contract as the COCO map, now with the Frigate+ vocabulary in it.
37
+ * contract as the COCO map, now with the plus catalog vocabulary in it.
38
38
  */
39
- export declare function buildFrigateClassMap(labels: readonly string[]): DetectionCatalogClassMap;
40
- /** The label-derived fields of a Frigate catalog entry. */
41
- export interface FrigateLabelFields {
39
+ export declare function buildPlusCatalogClassMap(labels: readonly string[]): DetectionCatalogClassMap;
40
+ /** The label-derived fields of a plus catalog catalog entry. */
41
+ export interface PlusCatalogLabelFields {
42
42
  readonly classMap: DetectionCatalogClassMap;
43
43
  readonly suppliesSteps?: readonly RootStepSupply[];
44
44
  }
45
45
  /**
46
- * Everything a Frigate / Frigate+ entry derives from ITS OWN labelmap: the
46
+ * Everything a plus catalog / plus catalog entry derives from ITS OWN labelmap: the
47
47
  * classMap and the steps it can supply (D730) — label and crop kinds alike.
48
- * Every Frigate builder spreads this at import, so the two cannot be derived
48
+ * Every plus catalog builder spreads this at import, so the two cannot be derived
49
49
  * from different label lists, and no family is assumed to carry a label it
50
50
  * does not list.
51
51
  */
52
- export declare function frigateLabelFields(labels: readonly string[]): FrigateLabelFields;
52
+ export declare function plusCatalogLabelFields(labels: readonly string[]): PlusCatalogLabelFields;
53
53
  /**
54
- * Per-class confidence-floor defaults of an imported stock Frigate detector
54
+ * Per-class confidence-floor defaults of an imported stock plus catalog detector
55
55
  * (D738): its per-detection `min_score` default, 0.5, for every class. Its
56
56
  * track-level `threshold` (the median of a track's recent scores) has no
57
57
  * counterpart in CamStack's per-detection floors and is not carried.
58
58
  */
59
- export declare const FRIGATE_STOCK_CLASS_FLOORS: Readonly<Record<string, number>>;
59
+ export declare const PLUS_CATALOG_STOCK_CLASS_FLOORS: Readonly<Record<string, number>>;
60
60
  /**
61
- * Per-class floor defaults of an imported Frigate+ detector (D738): the
62
- * documented starting `min_score` values for Frigate+ models, which score
61
+ * Per-class floor defaults of an imported plus catalog detector (D738): the
62
+ * documented starting `min_score` values for plus catalog models, which score
63
63
  * higher than the stock ones (person 0.65, car 0.65, cat 0.65, dog 0.70). The
64
64
  * macro `animal` takes the lower of its classes, so no class is cut above its
65
65
  * documented value.
66
66
  */
67
- export declare const FRIGATE_PLUS_CLASS_FLOORS: Readonly<Record<string, number>>;
67
+ export declare const PLUS_CATALOG_CLASS_FLOORS: Readonly<Record<string, number>>;
68
68
  /**
69
- * The `defaultClassFloors` an imported Frigate entry carries: the import's
69
+ * The `defaultClassFloors` an imported plus catalog entry carries: the import's
70
70
  * own, when it states them, else the defaults of its kind. A fresh object.
71
71
  */
72
- export declare function frigateDefaultClassFloors(kind: 'stock' | 'plus', carried?: Readonly<Record<string, number>>): Record<string, number>;
72
+ export declare function plusCatalogDefaultClassFloors(kind: 'stock' | 'plus', carried?: Readonly<Record<string, number>>): Record<string, number>;
@@ -3,9 +3,9 @@
3
3
  * detector can supply from its own output, how, and whether the camera uses it.
4
4
  *
5
5
  * A root detector's labels can already be the effect a step exists to produce:
6
- * a Frigate+ model emits `deer`, `car`, `package`, a COCO model emits `dog`,
6
+ * a plus catalog model emits `deer`, `car`, `package`, a COCO model emits `dog`,
7
7
  * `bus`. Some also emit the CHILD boxes a detail step exists to find: a
8
- * Frigate+ `license_plate` inside a car, a `face` inside a person. Every root
8
+ * plus catalog `license_plate` inside a car, a `face` inside a person. Every root
9
9
  * model DECLARES what it can supply (`ModelCatalogEntry.suppliesSteps`),
10
10
  * derived from its own labelmap and classMap by {@link deriveRootSupplies} —
11
11
  * never assumed per family. Whether a camera USES that is the step's own
@@ -128,7 +128,7 @@ export interface SupplyClassMap {
128
128
  * - label kind: a label counts for a step only when the classMap sends it to
129
129
  * that step's macro AND it names a vocabulary entry. Every root is judged
130
130
  * the same way — a COCO model supplies the animal classifier with the six
131
- * species COCO names, exactly as a Frigate+ model supplies seven.
131
+ * species COCO names, exactly as a plus catalog model supplies seven.
132
132
  * - crop kind: the labelmap carries one of the step's root labels. Those
133
133
  * labels are deliberately left out of the classMap, so they never make a
134
134
  * track of their own.
package/dist/client.js CHANGED
@@ -23243,7 +23243,7 @@ var NcConditionsSchema = zod.z.object({
23243
23243
  * with the list under it is worse than no switch (D62).
23244
23244
  *
23245
23245
  * MEMBERS ARE FACE-GALLERY `Identity.id`s (uuid), not display names. A name is
23246
- * renameable, and a rule authored on "Gianluca" went silently dark the moment
23246
+ * renameable, and a rule authored on "Alice" went silently dark the moment
23247
23247
  * the operator fixed the spelling. The id reaches the record on
23248
23248
  * `LabelAttribution.identityId`; the name is what the editor shows and what
23249
23249
  * `{{label}}` renders.
@@ -23807,7 +23807,7 @@ var NcRulePatchSchema = NcRuleInputSchema.partial().extend({
23807
23807
  * A rule scoped to one camera and one zone silently became a rule that
23808
23808
  * matches EVERY event on EVERY camera, and lost its `media` policy
23809
23809
  * (zoneCrop / gif / clip / frame) and its `priority` at the same time. Seen
23810
- * live on 2026-08-12: a rule scoped to device 617 fired on 590 and 615
23810
+ * live on 2026-08-12: a rule scoped to device 102 fired on 104 and 101
23811
23811
  * within a minute of a two-field patch.
23812
23812
  *
23813
23813
  * So every defaulted field is re-declared here WITHOUT its default. The
@@ -25002,7 +25002,7 @@ var ClipSchema = zod.z.object({
25002
25002
  * {@link MAX_CLIP_EVENT_IDS}. Empty on footage-only clips.
25003
25003
  *
25004
25004
  * Bounded because it is not a payload the surface pages through: one visit on
25005
- * device 615 carried 2 345 ids, and `eventIds` was 99% of a 153 KB
25005
+ * device 101 carried 2 345 ids, and `eventIds` was 99% of a 153 KB
25006
25006
  * camera-day. Read {@link eventCount} for the true total.
25007
25007
  */
25008
25008
  eventIds: zod.z.array(zod.z.string()).optional(),
@@ -25147,7 +25147,7 @@ var ClipPlaybackSchema = zod.z.object({
25147
25147
  * camera has no recordings", which is the defect this whole line of work is
25148
25148
  * about: a battery camera nobody woke (`sleeping`), a camera that could not be
25149
25149
  * reached at all (`unreachable`, also what a provider that THREW reports), a
25150
- * camera whose SD card is not mounted (`no-storage`, measured on 640 —
25150
+ * camera whose SD card is not mounted (`no-storage`, measured on 106 —
25151
25151
  * `HddInfo mount 0`, honestly nothing to list rather than "no clips"), and a
25152
25152
  * camera whose OWN index disagrees with its OWN calendar (`index-empty`,
25153
25153
  * measured on 618: the calendar marks 3–20 September, days 6–20 list zero
@@ -25461,7 +25461,7 @@ DeviceType.Camera, method(zod.z.object({
25461
25461
  *
25462
25462
  * It was optional, documented as "absent means the device's BOUND
25463
25463
  * provider, which is CamStack on every camera". No code implemented
25464
- * that. Measured on the live hub 2026-09-20 — device 592, bound to
25464
+ * that. Measured on the live hub 2026-09-20 — device 107, bound to
25465
25465
  * `recorder` AND `provider-reolink` — a bare call with `limit: 3`
25466
25466
  * answered SIX rows, three from each source, merged newest-first:
25467
25467
  * `device-collection-dispatch.ts` simply left the fan-out un-narrowed,
@@ -25854,7 +25854,7 @@ var ExportSpeedSchema = zod.z.number().min(.25).max(32);
25854
25854
  * on a 10 h window holding 29,393 s of footage every range landed late by the
25855
25855
  * gap accumulated before it — up to 6,607 s, well past EOF. Nothing matched,
25856
25856
  * the video was a uniform timelapse, and the log line reported the five ranges
25857
- * that had been ASKED for (2026-08-13, export `57d14363`, camera 615).
25857
+ * that had been ASKED for (2026-08-13, export `57d14363`, camera 101).
25858
25858
  *
25859
25859
  * Relative and not absolute epoch, because an absolute epoch would make every
25860
25860
  * call site responsible for the same subtraction.
@@ -28943,7 +28943,7 @@ var LABEL_CONDITION_IDS = new Set(["sensorKinds"]);
28943
28943
  * maps COCO onto the macro and drops the rest). A sub-type therefore names a key
28944
28944
  * that does not exist — the counter is 0 forever and the rule cannot fire.
28945
28945
  *
28946
- * Live cost, 2026-08-12: two rules on device 617 were authored with `car`
28946
+ * Live cost, 2026-08-12: two rules on device 102 were authored with `car`
28947
28947
  * because this picker offered the whole taxonomy. They were silent for a day.
28948
28948
  */
28949
28949
  var COUNT_CLASS_CONDITION_IDS = new Set(["occupancy"]);
@@ -30305,7 +30305,7 @@ var STATE_SUMMARY_SECTION_VARS = [
30305
30305
  {
30306
30306
  name: "summaryStreams",
30307
30307
  label: "Summary: streams offline",
30308
- example: "Ingresso (high) — since 06:40",
30308
+ example: "Front door (high) — since 06:40",
30309
30309
  kinds: ["stream-offline", "stream-online"]
30310
30310
  },
30311
30311
  {
@@ -30323,13 +30323,13 @@ var STATE_SUMMARY_SECTION_VARS = [
30323
30323
  {
30324
30324
  name: "summaryDetection",
30325
30325
  label: "Summary: cameras detecting nothing",
30326
- example: "Ingresso — since 05:10",
30326
+ example: "Front door — since 05:10",
30327
30327
  kinds: ["detection-blind"]
30328
30328
  },
30329
30329
  {
30330
30330
  name: "summaryNodes",
30331
30331
  label: "Summary: nodes",
30332
- example: "little-unraid — offline since 03:00",
30332
+ example: "agent-a — offline since 03:00",
30333
30333
  kinds: [
30334
30334
  "node-offline",
30335
30335
  "node-online",
@@ -30413,7 +30413,7 @@ var NC_TEMPLATE_VARS = [
30413
30413
  {
30414
30414
  name: "camera",
30415
30415
  label: "Camera",
30416
- example: "Ingresso",
30416
+ example: "Front door",
30417
30417
  group: "subject",
30418
30418
  families: ["rule", "timelapse"],
30419
30419
  systemEventKinds: [...DEVICE_EVENTS, "export-completed"]
@@ -30581,7 +30581,7 @@ var NC_TEMPLATE_VARS = [
30581
30581
  {
30582
30582
  name: "rule",
30583
30583
  label: "Rule name",
30584
- example: "Ingresso notte",
30584
+ example: "Front door notte",
30585
30585
  group: "rule",
30586
30586
  families: [
30587
30587
  "rule",
@@ -30682,7 +30682,7 @@ var NC_TEMPLATE_VARS = [
30682
30682
  {
30683
30683
  name: "deviceName",
30684
30684
  label: "Device",
30685
- example: "Ingresso",
30685
+ example: "Front door",
30686
30686
  group: "system",
30687
30687
  families: ["rule"],
30688
30688
  fields: [...RULE_TEXT],
@@ -30692,7 +30692,7 @@ var NC_TEMPLATE_VARS = [
30692
30692
  {
30693
30693
  name: "locations",
30694
30694
  label: "Intrusion locations",
30695
- example: "Ingresso, Corridoio, Salone",
30695
+ example: "Front door, Hallway, Hall",
30696
30696
  group: "system",
30697
30697
  families: ["rule"],
30698
30698
  fields: [...RULE_TEXT],
@@ -30702,7 +30702,7 @@ var NC_TEMPLATE_VARS = [
30702
30702
  {
30703
30703
  name: "deviceId",
30704
30704
  label: "Device id",
30705
- example: "617",
30705
+ example: "102",
30706
30706
  group: "system",
30707
30707
  families: ["rule"],
30708
30708
  fields: [...RULE_TEXT],
@@ -30790,7 +30790,7 @@ var NC_TEMPLATE_VARS = [
30790
30790
  {
30791
30791
  name: "nodeName",
30792
30792
  label: "Node name",
30793
- example: "little-unraid",
30793
+ example: "agent-a",
30794
30794
  group: "system",
30795
30795
  families: ["rule"],
30796
30796
  fields: [...RULE_TEXT],
@@ -30811,7 +30811,7 @@ var NC_TEMPLATE_VARS = [
30811
30811
  name: "devices",
30812
30812
  label: "Devices",
30813
30813
  description: "node-inference-unavailable: the affected cameras, comma-joined. Alarm arm / arming / refusal: HOW MANY devices are armed (or open).",
30814
- example: "Ingresso, Garage",
30814
+ example: "Front door, Garage",
30815
30815
  group: "system",
30816
30816
  families: ["rule"],
30817
30817
  fields: [...RULE_TEXT],
@@ -31012,7 +31012,7 @@ var NC_TEMPLATE_VARS = [
31012
31012
  name: "nodes",
31013
31013
  label: "Nodes",
31014
31014
  description: "Comma-joined node ids, when an update spans more than one — the single-node case names it through {{nodeId}} instead. `incomingFromUpdateAvailable` (event-intake.ts) fills `nodes` from ONE shared textParams object for both addon- and server-update-available, exactly like packageName/currentVersion/latestVersion/count — only the shipped TEXT (system.server-update-available.body.onNodes) reads it today, but the var is real on both kinds.",
31015
- example: "hub, little-unraid",
31015
+ example: "hub, agent-a",
31016
31016
  group: "system",
31017
31017
  families: ["rule"],
31018
31018
  fields: [...RULE_TEXT],
@@ -31123,7 +31123,7 @@ var NC_TEMPLATE_VARS = [
31123
31123
  {
31124
31124
  name: "title",
31125
31125
  label: "Export or alert title",
31126
- example: "Ingresso 08:00",
31126
+ example: "Front door 08:00",
31127
31127
  group: "system",
31128
31128
  families: ["rule"],
31129
31129
  fields: [...RULE_TEXT],
@@ -31237,7 +31237,7 @@ var NC_TEMPLATE_VARS = [
31237
31237
  name: "names",
31238
31238
  label: "Device names",
31239
31239
  description: "Armed / arming: the Active devices (or every skipped name when none are Active). Refusal: the open sensors.",
31240
- example: "Ingresso, Garage",
31240
+ example: "Front door, Garage",
31241
31241
  group: "system",
31242
31242
  families: ["rule"],
31243
31243
  fields: [...RULE_TEXT],
@@ -31285,7 +31285,7 @@ var NC_TEMPLATE_VARS = [
31285
31285
  name: "bypassedNames",
31286
31286
  label: "Bypassed sensors",
31287
31287
  description: "Sensors the operator armed around because they were open.",
31288
- example: "Finestra veranda",
31288
+ example: "Finestra porch",
31289
31289
  group: "system",
31290
31290
  families: ["rule"],
31291
31291
  fields: [...RULE_TEXT],
@@ -32102,7 +32102,7 @@ var TimelapseRuleInputSchema = zod.z.object({
32102
32102
  * The caption a rule that never set one gets.
32103
32103
  *
32104
32104
  * Rendered through the ordinary `{{var}}` pass at delivery, so a rule created
32105
- * before this field existed still reads "Timelapse Videocamera ingresso" and
32105
+ * before this field existed still reads "Timelapse Camera front door" and
32106
32106
  * not the literal braces.
32107
32107
  */
32108
32108
  var DEFAULT_TIMELAPSE_PREVIEW_TEXT = "Timelapse {{camera}}";