@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
package/dist/client.mjs CHANGED
@@ -23242,7 +23242,7 @@ var NcConditionsSchema = z.object({
23242
23242
  * with the list under it is worse than no switch (D62).
23243
23243
  *
23244
23244
  * MEMBERS ARE FACE-GALLERY `Identity.id`s (uuid), not display names. A name is
23245
- * renameable, and a rule authored on "Gianluca" went silently dark the moment
23245
+ * renameable, and a rule authored on "Alice" went silently dark the moment
23246
23246
  * the operator fixed the spelling. The id reaches the record on
23247
23247
  * `LabelAttribution.identityId`; the name is what the editor shows and what
23248
23248
  * `{{label}}` renders.
@@ -23806,7 +23806,7 @@ var NcRulePatchSchema = NcRuleInputSchema.partial().extend({
23806
23806
  * A rule scoped to one camera and one zone silently became a rule that
23807
23807
  * matches EVERY event on EVERY camera, and lost its `media` policy
23808
23808
  * (zoneCrop / gif / clip / frame) and its `priority` at the same time. Seen
23809
- * live on 2026-08-12: a rule scoped to device 617 fired on 590 and 615
23809
+ * live on 2026-08-12: a rule scoped to device 102 fired on 104 and 101
23810
23810
  * within a minute of a two-field patch.
23811
23811
  *
23812
23812
  * So every defaulted field is re-declared here WITHOUT its default. The
@@ -25001,7 +25001,7 @@ var ClipSchema = z.object({
25001
25001
  * {@link MAX_CLIP_EVENT_IDS}. Empty on footage-only clips.
25002
25002
  *
25003
25003
  * Bounded because it is not a payload the surface pages through: one visit on
25004
- * device 615 carried 2 345 ids, and `eventIds` was 99% of a 153 KB
25004
+ * device 101 carried 2 345 ids, and `eventIds` was 99% of a 153 KB
25005
25005
  * camera-day. Read {@link eventCount} for the true total.
25006
25006
  */
25007
25007
  eventIds: z.array(z.string()).optional(),
@@ -25146,7 +25146,7 @@ var ClipPlaybackSchema = z.object({
25146
25146
  * camera has no recordings", which is the defect this whole line of work is
25147
25147
  * about: a battery camera nobody woke (`sleeping`), a camera that could not be
25148
25148
  * reached at all (`unreachable`, also what a provider that THREW reports), a
25149
- * camera whose SD card is not mounted (`no-storage`, measured on 640 —
25149
+ * camera whose SD card is not mounted (`no-storage`, measured on 106 —
25150
25150
  * `HddInfo mount 0`, honestly nothing to list rather than "no clips"), and a
25151
25151
  * camera whose OWN index disagrees with its OWN calendar (`index-empty`,
25152
25152
  * measured on 618: the calendar marks 3–20 September, days 6–20 list zero
@@ -25460,7 +25460,7 @@ DeviceType.Camera, method(z.object({
25460
25460
  *
25461
25461
  * It was optional, documented as "absent means the device's BOUND
25462
25462
  * provider, which is CamStack on every camera". No code implemented
25463
- * that. Measured on the live hub 2026-09-20 — device 592, bound to
25463
+ * that. Measured on the live hub 2026-09-20 — device 107, bound to
25464
25464
  * `recorder` AND `provider-reolink` — a bare call with `limit: 3`
25465
25465
  * answered SIX rows, three from each source, merged newest-first:
25466
25466
  * `device-collection-dispatch.ts` simply left the fan-out un-narrowed,
@@ -25853,7 +25853,7 @@ var ExportSpeedSchema = z.number().min(.25).max(32);
25853
25853
  * on a 10 h window holding 29,393 s of footage every range landed late by the
25854
25854
  * gap accumulated before it — up to 6,607 s, well past EOF. Nothing matched,
25855
25855
  * the video was a uniform timelapse, and the log line reported the five ranges
25856
- * that had been ASKED for (2026-08-13, export `57d14363`, camera 615).
25856
+ * that had been ASKED for (2026-08-13, export `57d14363`, camera 101).
25857
25857
  *
25858
25858
  * Relative and not absolute epoch, because an absolute epoch would make every
25859
25859
  * call site responsible for the same subtraction.
@@ -28942,7 +28942,7 @@ var LABEL_CONDITION_IDS = new Set(["sensorKinds"]);
28942
28942
  * maps COCO onto the macro and drops the rest). A sub-type therefore names a key
28943
28943
  * that does not exist — the counter is 0 forever and the rule cannot fire.
28944
28944
  *
28945
- * Live cost, 2026-08-12: two rules on device 617 were authored with `car`
28945
+ * Live cost, 2026-08-12: two rules on device 102 were authored with `car`
28946
28946
  * because this picker offered the whole taxonomy. They were silent for a day.
28947
28947
  */
28948
28948
  var COUNT_CLASS_CONDITION_IDS = new Set(["occupancy"]);
@@ -30304,7 +30304,7 @@ var STATE_SUMMARY_SECTION_VARS = [
30304
30304
  {
30305
30305
  name: "summaryStreams",
30306
30306
  label: "Summary: streams offline",
30307
- example: "Ingresso (high) — since 06:40",
30307
+ example: "Front door (high) — since 06:40",
30308
30308
  kinds: ["stream-offline", "stream-online"]
30309
30309
  },
30310
30310
  {
@@ -30322,13 +30322,13 @@ var STATE_SUMMARY_SECTION_VARS = [
30322
30322
  {
30323
30323
  name: "summaryDetection",
30324
30324
  label: "Summary: cameras detecting nothing",
30325
- example: "Ingresso — since 05:10",
30325
+ example: "Front door — since 05:10",
30326
30326
  kinds: ["detection-blind"]
30327
30327
  },
30328
30328
  {
30329
30329
  name: "summaryNodes",
30330
30330
  label: "Summary: nodes",
30331
- example: "little-unraid — offline since 03:00",
30331
+ example: "agent-a — offline since 03:00",
30332
30332
  kinds: [
30333
30333
  "node-offline",
30334
30334
  "node-online",
@@ -30412,7 +30412,7 @@ var NC_TEMPLATE_VARS = [
30412
30412
  {
30413
30413
  name: "camera",
30414
30414
  label: "Camera",
30415
- example: "Ingresso",
30415
+ example: "Front door",
30416
30416
  group: "subject",
30417
30417
  families: ["rule", "timelapse"],
30418
30418
  systemEventKinds: [...DEVICE_EVENTS, "export-completed"]
@@ -30580,7 +30580,7 @@ var NC_TEMPLATE_VARS = [
30580
30580
  {
30581
30581
  name: "rule",
30582
30582
  label: "Rule name",
30583
- example: "Ingresso notte",
30583
+ example: "Front door notte",
30584
30584
  group: "rule",
30585
30585
  families: [
30586
30586
  "rule",
@@ -30681,7 +30681,7 @@ var NC_TEMPLATE_VARS = [
30681
30681
  {
30682
30682
  name: "deviceName",
30683
30683
  label: "Device",
30684
- example: "Ingresso",
30684
+ example: "Front door",
30685
30685
  group: "system",
30686
30686
  families: ["rule"],
30687
30687
  fields: [...RULE_TEXT],
@@ -30691,7 +30691,7 @@ var NC_TEMPLATE_VARS = [
30691
30691
  {
30692
30692
  name: "locations",
30693
30693
  label: "Intrusion locations",
30694
- example: "Ingresso, Corridoio, Salone",
30694
+ example: "Front door, Hallway, Hall",
30695
30695
  group: "system",
30696
30696
  families: ["rule"],
30697
30697
  fields: [...RULE_TEXT],
@@ -30701,7 +30701,7 @@ var NC_TEMPLATE_VARS = [
30701
30701
  {
30702
30702
  name: "deviceId",
30703
30703
  label: "Device id",
30704
- example: "617",
30704
+ example: "102",
30705
30705
  group: "system",
30706
30706
  families: ["rule"],
30707
30707
  fields: [...RULE_TEXT],
@@ -30789,7 +30789,7 @@ var NC_TEMPLATE_VARS = [
30789
30789
  {
30790
30790
  name: "nodeName",
30791
30791
  label: "Node name",
30792
- example: "little-unraid",
30792
+ example: "agent-a",
30793
30793
  group: "system",
30794
30794
  families: ["rule"],
30795
30795
  fields: [...RULE_TEXT],
@@ -30810,7 +30810,7 @@ var NC_TEMPLATE_VARS = [
30810
30810
  name: "devices",
30811
30811
  label: "Devices",
30812
30812
  description: "node-inference-unavailable: the affected cameras, comma-joined. Alarm arm / arming / refusal: HOW MANY devices are armed (or open).",
30813
- example: "Ingresso, Garage",
30813
+ example: "Front door, Garage",
30814
30814
  group: "system",
30815
30815
  families: ["rule"],
30816
30816
  fields: [...RULE_TEXT],
@@ -31011,7 +31011,7 @@ var NC_TEMPLATE_VARS = [
31011
31011
  name: "nodes",
31012
31012
  label: "Nodes",
31013
31013
  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.",
31014
- example: "hub, little-unraid",
31014
+ example: "hub, agent-a",
31015
31015
  group: "system",
31016
31016
  families: ["rule"],
31017
31017
  fields: [...RULE_TEXT],
@@ -31122,7 +31122,7 @@ var NC_TEMPLATE_VARS = [
31122
31122
  {
31123
31123
  name: "title",
31124
31124
  label: "Export or alert title",
31125
- example: "Ingresso 08:00",
31125
+ example: "Front door 08:00",
31126
31126
  group: "system",
31127
31127
  families: ["rule"],
31128
31128
  fields: [...RULE_TEXT],
@@ -31236,7 +31236,7 @@ var NC_TEMPLATE_VARS = [
31236
31236
  name: "names",
31237
31237
  label: "Device names",
31238
31238
  description: "Armed / arming: the Active devices (or every skipped name when none are Active). Refusal: the open sensors.",
31239
- example: "Ingresso, Garage",
31239
+ example: "Front door, Garage",
31240
31240
  group: "system",
31241
31241
  families: ["rule"],
31242
31242
  fields: [...RULE_TEXT],
@@ -31284,7 +31284,7 @@ var NC_TEMPLATE_VARS = [
31284
31284
  name: "bypassedNames",
31285
31285
  label: "Bypassed sensors",
31286
31286
  description: "Sensors the operator armed around because they were open.",
31287
- example: "Finestra veranda",
31287
+ example: "Finestra porch",
31288
31288
  group: "system",
31289
31289
  families: ["rule"],
31290
31290
  fields: [...RULE_TEXT],
@@ -32101,7 +32101,7 @@ var TimelapseRuleInputSchema = z.object({
32101
32101
  * The caption a rule that never set one gets.
32102
32102
  *
32103
32103
  * Rendered through the ordinary `{{var}}` pass at delivery, so a rule created
32104
- * before this field existed still reads "Timelapse Videocamera ingresso" and
32104
+ * before this field existed still reads "Timelapse Camera front door" and
32105
32105
  * not the literal braces.
32106
32106
  */
32107
32107
  var DEFAULT_TIMELAPSE_PREVIEW_TEXT = "Timelapse {{camera}}";
@@ -1,3 +1,3 @@
1
1
  import { type Composition } from '../../composition.js';
2
- export declare const VERANDA_COMPOSITION: Composition;
3
- export declare const DOORBELL_615_COMPOSITION: Composition;
2
+ export declare const PORCH_COMPOSITION: Composition;
3
+ export declare const DOORBELL_101_COMPOSITION: Composition;
@@ -13,7 +13,7 @@ export declare const BATTERY_NUMBER: FixtureFieldRead;
13
13
  export declare const DESICCANT_STRING: FixtureFieldRead;
14
14
  export declare const DISHWASHER: CompositionSourceRef;
15
15
  export declare const SWITCH_REF: CompositionSourceRef;
16
- export declare const CAMERA_615: CompositionSourceRef;
16
+ export declare const CAMERA_101: CompositionSourceRef;
17
17
  export declare const DOORBELL_SWITCH: CompositionSourceRef;
18
18
  export declare const PIR_SENSOR: {
19
19
  readonly addonId: 'provider-homeassistant';
@@ -262,7 +262,7 @@ function buildStdoutOrRtspSinkArgs(sink) {
262
262
  * frame, loses the race, and skips to the following one: **every fragment comes
263
263
  * out at twice the requested length.**
264
264
  *
265
- * Measured on the live fleet 2026-08-07, camera 615, `-c:v copy` (D84):
265
+ * Measured on the live fleet 2026-08-07, camera 101, `-c:v copy` (D84):
266
266
  *
267
267
  * | slot | GOP | `-min_frag_duration` | median gap |
268
268
  * | --- | --- | --- | --- |
@@ -262,7 +262,7 @@ function buildStdoutOrRtspSinkArgs(sink) {
262
262
  * frame, loses the race, and skips to the following one: **every fragment comes
263
263
  * out at twice the requested length.**
264
264
  *
265
- * Measured on the live fleet 2026-08-07, camera 615, `-c:v copy` (D84):
265
+ * Measured on the live fleet 2026-08-07, camera 101, `-c:v copy` (D84):
266
266
  *
267
267
  * | slot | GOP | `-min_frag_duration` | median gap |
268
268
  * | --- | --- | --- | --- |
@@ -203,7 +203,7 @@ export declare abstract class BaseDeviceProvider<TConfig extends object = Record
203
203
  * A top-level persisted row with NO configuration is a leftover, not a
204
204
  * device — quarantine it instead of dialling it.
205
205
  *
206
- * Device 614 was deleted, resurrected as a config-less shell by a write
206
+ * Device 105 was deleted, resurrected as a config-less shell by a write
207
207
  * already in flight (D376), and then dialled at every single boot: eight
208
208
  * `Failed to restore device — bounded retry scheduled` lines in one day,
209
209
  * each one the same Zod refusal on `host` and `password`. The bound was
@@ -157,7 +157,7 @@ export declare function createLazyTrpcSource(api: SliceHandleApi): SliceHandleSo
157
157
  * populates `RegisterMessage.eventPatterns`, which is what the parent's
158
158
  * `broadcastEventToChildren` filters on. Without it the child never
159
159
  * declares interest and the 30 s `refresh()` timer was the only path a
160
- * zone edit took to analytics (live, device 617, 2026-07-16).
160
+ * zone edit took to analytics (live, device 102, 2026-07-16).
161
161
  */
162
162
  export declare function createEventBusSliceSource(deps: {
163
163
  readonly eventBus: SliceEventBus;
@@ -34,7 +34,7 @@ export declare const LOCATION_ICON_FALLBACK: IconKey;
34
34
  * `locationKey` is ALWAYS {@link locationIconKey} of the label — never the
35
35
  * operator's casing. The registry matches labels trimmed + case-insensitively
36
36
  * everywhere (`addLocation`, `removeLocation`, `renameLocation`), and a
37
- * case-only rename (`cucina` → `Cucina`) is a real edit this repo supports; a
37
+ * case-only rename (`kitchen` → `Kitchen`) is a real edit this repo supports; a
38
38
  * map keyed on the displayed casing would orphan its entry on exactly that
39
39
  * edit. Consumers join by keying their own label through `locationIconKey`.
40
40
  */
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * A SITE ZONE — a named part of the property that several locations belong to.
3
3
  *
4
- * "Zona notte" holds every bedroom; "Zona giorno" the living room and the
4
+ * "Night zone" holds every bedroom; "Zona giorno" the living room and the
5
5
  * kitchen. A camera belongs to exactly one location, and a location to at most
6
6
  * one zone, so a camera's zone is derived and never stored on the device: the
7
7
  * whole point of this entity is that grouping rooms touches no device row.
@@ -31,7 +31,7 @@ import { z } from 'zod';
31
31
  * the locations inside it.
32
32
  *
33
33
  * The LABEL is carried alongside the key because the key is lossy on purpose —
34
- * a surface must show "Zona notte", not "zona notte". Locations are carried
34
+ * a surface must show "Night zone", not "night zone". Locations are carried
35
35
  * here, rather than left to a second call, because every consumer wants both
36
36
  * at once and a viewer that asked twice could render a zone whose membership
37
37
  * it has not fetched yet.
@@ -293,7 +293,7 @@ export declare enum EventCategory {
293
293
  * TRANSITION into that state (never per dispatch), and the node is dropped
294
294
  * from the placement candidate set for as long as it holds.
295
295
  *
296
- * This exists because the state was previously invisible: little-unraid
296
+ * This exists because the state was previously invisible: agent-a
297
297
  * absorbed 283k inference errors in a day while still being handed cameras,
298
298
  * and nothing in the system said so.
299
299
  *
package/dist/enums.js CHANGED
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_event_category = require("./event-category-DG6Vir8Z.js");
2
+ const require_event_category = require("./event-category-DXZ3f9Q5.js");
3
3
  //#region src/enums/event-source-type.ts
4
4
  var EventSourceType = /* @__PURE__ */ function(EventSourceType) {
5
5
  EventSourceType["Addon"] = "addon";
package/dist/enums.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { t as EventCategory } from "./event-category-Ceif8n-v.mjs";
1
+ import { t as EventCategory } from "./event-category-DHXxB8t9.mjs";
2
2
  //#region src/enums/event-source-type.ts
3
3
  var EventSourceType = /* @__PURE__ */ function(EventSourceType) {
4
4
  EventSourceType["Addon"] = "addon";
@@ -294,7 +294,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
294
294
  * TRANSITION into that state (never per dispatch), and the node is dropped
295
295
  * from the placement candidate set for as long as it holds.
296
296
  *
297
- * This exists because the state was previously invisible: little-unraid
297
+ * This exists because the state was previously invisible: agent-a
298
298
  * absorbed 283k inference errors in a day while still being handed cameras,
299
299
  * and nothing in the system said so.
300
300
  *
@@ -294,7 +294,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
294
294
  * TRANSITION into that state (never per dispatch), and the node is dropped
295
295
  * from the placement candidate set for as long as it holds.
296
296
  *
297
- * This exists because the state was previously invisible: little-unraid
297
+ * This exists because the state was previously invisible: agent-a
298
298
  * absorbed 283k inference errors in a day while still being handed cameras,
299
299
  * and nothing in the system said so.
300
300
  *
@@ -41,7 +41,7 @@ export interface Fmp4SubscriberInfo {
41
41
  readonly closedReason: Fmp4CloseReason | null;
42
42
  }
43
43
  export interface Fmp4SubscribeInput {
44
- /** Short caller identity for diagnostics — `hksv/615`, `clips/615`. */
44
+ /** Short caller identity for diagnostics — `hksv/101`, `clips/101`. */
45
45
  readonly tag: string;
46
46
  /**
47
47
  * Fragments a subscriber may fall behind by before it is closed. Four is two
@@ -64,7 +64,7 @@ export interface GifDeriveArgsInput extends GifDeriveShape {
64
64
  * runs at `fps / speed` in SOURCE time and `setpts` multiplies what survived.
65
65
  * The trailing `fps` re-declares the rate, which is NOT redundant: `setpts`
66
66
  * leaves the filter link advertising the sampled rate and the gif muxer
67
- * believes the link — measured on 615 as a 3.01 s gif of ten frames.
67
+ * believes the link — measured on 101 as a 3.01 s gif of ten frames.
68
68
  */
69
69
  export declare function gifFilterComplex(input: GifDeriveShape): string;
70
70
  /** The full argv: mp4 in, gif on stdout. */
@@ -87,7 +87,7 @@ export interface FfmpegProcessOptions {
87
87
  /**
88
88
  * The camera this ffmpeg serves. Stamped on EVERY line as `tags.deviceId`:
89
89
  * a miss rate or a media gap is always asked per camera, and a line without
90
- * it cannot answer "why is 617 worse than 615".
90
+ * it cannot answer "why is 102 worse than 101".
91
91
  */
92
92
  readonly deviceId: number;
93
93
  /** Free-form label for the log (`'webrtc-transcode'`, `'hap-egress'`, …). */
@@ -16,5 +16,7 @@ export interface CapStateLeaf {
16
16
  }
17
17
  /** cap name -> the numeric state field whose strict advance IS the cap's one-shot event. */
18
18
  export declare const CAP_ADVANCE_FIELDS: Readonly<Record<string, string>>;
19
+ /** Every capability name, so addon code can check a name without the schema graph. */
20
+ export declare const CAP_NAMES: readonly string[];
19
21
  /** cap name -> the bindable leaves of its runtime state (absent: none). */
20
22
  export declare const CAP_STATE_LEAVES: Readonly<Record<string, readonly CapStateLeaf[]>>;
@@ -23,7 +23,7 @@
23
23
  * the two share the aspect, which is what makes one normalised path land on
24
24
  * both).
25
25
  *
26
- * ## Honesty rules (from real tracks, device 615, 2026-08-02)
26
+ * ## Honesty rules (from real tracks, device 101, 2026-08-02)
27
27
  *
28
28
  * - A near-FULL-FRAME box is a motion placeholder, not a localisation: its
29
29
  * centre is an artefact, so it is never a path point (it is counted).
package/dist/index.d.ts CHANGED
@@ -171,7 +171,7 @@ export * from './device-extension/index.js';
171
171
  export * from './composition/index.js';
172
172
  export { APPLE_SA_TO_MACRO, AUDIO_MACRO_LABELS, getAudioMacroClassIds, mapAudioLabelToMacro, YAMNET_TO_MACRO, } from './catalogs/audio-classmap.js';
173
173
  export { COCO_80_LABELS, COCO_TO_MACRO, DETECTION_MACRO_CLASSES, isDetectionMacroClass, MACRO_LABELS, } from './catalogs/coco-classmap.js';
174
- export { buildFrigateClassMap, type ClassMapMacroTarget, FRIGATE_PLUS_CLASS_FLOORS, FRIGATE_PLUS_TO_MACRO, FRIGATE_PLUS_UNMAPPED_LABELS, FRIGATE_STOCK_CLASS_FLOORS, frigateDefaultClassFloors, type FrigateLabelFields, frigateLabelFields, } from './catalogs/frigate-plus-classmap.js';
174
+ export { buildPlusCatalogClassMap, type ClassMapMacroTarget, PLUS_CATALOG_CLASS_FLOORS, PLUS_CATALOG_TO_MACRO, PLUS_CATALOG_UNMAPPED_LABELS, PLUS_CATALOG_STOCK_CLASS_FLOORS, plusCatalogDefaultClassFloors, type PlusCatalogLabelFields, plusCatalogLabelFields, } from './catalogs/plus-catalog-classmap.js';
175
175
  export { allowedSuppliedEffect, containingParentIndex, CROP_SUPPLY_SOURCES, CROP_SUPPLY_STEP_IDS, type CropSupplySource, type CropSupplyStepId, deriveMaskSupplies, deriveRootSupplies, describeRootSupplies, describeRootSupply, isLabelSupplyStepId, isRootSuppliableStepId, LABEL_SUPPLY_MACRO, LABEL_SUPPLY_STEP_IDS, LABEL_SUPPLY_VOCABULARIES, type LabelSupplyStepId, LINKED_LABEL_STEP_PREFIX, linkedLabelStepId, MASK_EMITTING_POSTPROCESSORS, MASK_SUPPLY_STEP_IDS, type MaskSupplyStepId, linkedStepOf, readUseRootModel, resolveRootSupply, ROOT_CHILD_CONTAINMENT_MIN, ROOT_SUPPLIABLE_STEP_IDS, rootSuppliesOf, rootSupplyServes, type RootSuppliableStepId, type RootSupplyInactiveReason, type RootSupplyState, type RootSupplyStepDefaults, type SupplyBox, type SupplyClassMap, supplyFor, USE_ROOT_MODEL_DEFAULTS, USE_ROOT_MODEL_SETTING_KEY, } from './catalogs/root-model-supply.js';
176
176
  export { DEVICE_STATE_READERS, readDeviceStateFrom, stateVocabularyFor, } from './catalogs/device-state-vocabulary.js';
177
177
  export { colorForKind, DEFAULT_EVENT_COLOR, EVENT_TAXONOMY, type EventTaxonomyCategory, type EventTaxonomyEntry, type EventTaxonomyLevel, getTaxonomyEntry, subKindsOf, } from './catalogs/event-taxonomy.js';