@camstack/addon-export-hap 1.2.74 → 1.2.76

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.
@@ -13438,6 +13438,24 @@ method(_void(), _void(), { kind: "mutation" }), method(_void(), _void(), { kind:
13438
13438
  kind: "mutation",
13439
13439
  auth: "admin"
13440
13440
  });
13441
+ /**
13442
+ * Device Manager capability — hub-side singleton that unifies device persistence,
13443
+ * live registry access, and all management operations into a single tRPC surface.
13444
+ *
13445
+ * Replaces:
13446
+ * - `device-persistence` capability (persistence methods absorbed here)
13447
+ * - `device-management.router.ts` (deleted in Phase 2)
13448
+ * - `device-ops.router.ts` (compat layer — deleted; device-provider ops absorbed here)
13449
+ *
13450
+ * All device provider addons (rtsp, onvif, frigate, …) are hub-local: they may
13451
+ * fork into separate processes but never run on remote cluster agents. Therefore:
13452
+ * - No nodeId routing needed — this is a pure hub singleton.
13453
+ * - The hub's DeviceRegistry is the single source of truth for all live devices.
13454
+ * - No shadow registry or cross-node aggregation required.
13455
+ *
13456
+ * Forked workers register devices back to the hub via `ctx.devices`
13457
+ * (DeviceManagerApi → ctx.api.deviceManager.registerDevice), same as today.
13458
+ */
13441
13459
  /** One child-placement directive on a container's `childLayout`. Structurally
13442
13460
  * identical to `ChildLayoutEntry` in `device-management.ts` — the cap wire
13443
13461
  * shape for the same field. The child is identified by its re-sync-stable
@@ -13536,7 +13554,12 @@ var ConfigEntrySchema = object({
13536
13554
  value: unknown(),
13537
13555
  description: string().optional()
13538
13556
  });
13539
- var LinkedDevicesModeSchema = _enum(["auto", "manual"]);
13557
+ /**
13558
+ * Only `manual` since D356: the operator picks, nothing links itself. The
13559
+ * field survives on the wire because a viewer already OTA'd parses it —
13560
+ * drop it once no shipped client reads `mode`.
13561
+ */
13562
+ var LinkedDevicesModeSchema = _enum(["manual"]);
13540
13563
  /** One resolved linked device — the compact projection consumers need. */
13541
13564
  var LinkedDeviceSchema = object({
13542
13565
  deviceId: number(),
@@ -19086,6 +19109,9 @@ var RetrainStatusSchema = _enum([
19086
19109
  *
19087
19110
  * `debug` does NOT pin; it is attention, not durability.
19088
19111
  *
19112
+ * `debugNote` is the operator's own words about WHAT should be checked on this
19113
+ * track, and it lives and dies with `debug` — see {@link MAX_TRACK_DEBUG_NOTE_LEN}.
19114
+ *
19089
19115
  * `favourited` IS a BOOLEAN pin (durability bit), not a retrain lifecycle.
19090
19116
  * A favourited track is skipped by retention the same way `staging` is, but
19091
19117
  * it does not enter `none|staging|trained` and has no staging budget.
@@ -19096,6 +19122,21 @@ var TrackFlagFields = {
19096
19122
  markForTrain: boolean().optional(),
19097
19123
  /** Operator marked this track for diagnostic attention. */
19098
19124
  debug: boolean().optional(),
19125
+ /**
19126
+ * What the operator wants CHECKED on this track, in their own words.
19127
+ *
19128
+ * The flag alone says "look at this" and nothing about what for; a debug set
19129
+ * reviewed hours later is a list of tracks with no question attached. Bound
19130
+ * to `debug` on the WRITE side — the body clears it when `debug` goes off,
19131
+ * and refuses it on a track whose debug is off — so a note can never outlive
19132
+ * the attention it belongs to.
19133
+ *
19134
+ * `''` is a real value ("marked, nothing to add"); the ABSENT key means
19135
+ * "leave whatever is stored alone", which is what lets a surface turn debug
19136
+ * on without a note (a cancelled prompt) and what lets it edit the note
19137
+ * without touching the flag.
19138
+ */
19139
+ debugNote: string().max(500).optional(),
19099
19140
  /** Operator favourited this track. Pins it against pruning. */
19100
19141
  favourited: boolean().optional()
19101
19142
  };
@@ -19122,6 +19163,12 @@ var TrackFlagsSchema = object({
19122
19163
  trackId: string(),
19123
19164
  markForTrain: boolean(),
19124
19165
  debug: boolean(),
19166
+ /** The note as it STANDS after the write — never absent here (a track with no
19167
+ * note reports `''`), for the same reason the booleans are required: a
19168
+ * surface that has just written must be able to render the note it now owns
19169
+ * without a re-fetch, and an absent key would read as "unchanged" on a
19170
+ * screen that has no previous value to keep. */
19171
+ debugNote: string(),
19125
19172
  favourited: boolean(),
19126
19173
  /** The lifecycle state the boolean was derived from. Required here (unlike on
19127
19174
  * a track row) because this shape is only ever produced by the write body,
@@ -13426,6 +13426,24 @@ method(_void(), _void(), { kind: "mutation" }), method(_void(), _void(), { kind:
13426
13426
  kind: "mutation",
13427
13427
  auth: "admin"
13428
13428
  });
13429
+ /**
13430
+ * Device Manager capability — hub-side singleton that unifies device persistence,
13431
+ * live registry access, and all management operations into a single tRPC surface.
13432
+ *
13433
+ * Replaces:
13434
+ * - `device-persistence` capability (persistence methods absorbed here)
13435
+ * - `device-management.router.ts` (deleted in Phase 2)
13436
+ * - `device-ops.router.ts` (compat layer — deleted; device-provider ops absorbed here)
13437
+ *
13438
+ * All device provider addons (rtsp, onvif, frigate, …) are hub-local: they may
13439
+ * fork into separate processes but never run on remote cluster agents. Therefore:
13440
+ * - No nodeId routing needed — this is a pure hub singleton.
13441
+ * - The hub's DeviceRegistry is the single source of truth for all live devices.
13442
+ * - No shadow registry or cross-node aggregation required.
13443
+ *
13444
+ * Forked workers register devices back to the hub via `ctx.devices`
13445
+ * (DeviceManagerApi → ctx.api.deviceManager.registerDevice), same as today.
13446
+ */
13429
13447
  /** One child-placement directive on a container's `childLayout`. Structurally
13430
13448
  * identical to `ChildLayoutEntry` in `device-management.ts` — the cap wire
13431
13449
  * shape for the same field. The child is identified by its re-sync-stable
@@ -13524,7 +13542,12 @@ var ConfigEntrySchema = object({
13524
13542
  value: unknown(),
13525
13543
  description: string().optional()
13526
13544
  });
13527
- var LinkedDevicesModeSchema = _enum(["auto", "manual"]);
13545
+ /**
13546
+ * Only `manual` since D356: the operator picks, nothing links itself. The
13547
+ * field survives on the wire because a viewer already OTA'd parses it —
13548
+ * drop it once no shipped client reads `mode`.
13549
+ */
13550
+ var LinkedDevicesModeSchema = _enum(["manual"]);
13528
13551
  /** One resolved linked device — the compact projection consumers need. */
13529
13552
  var LinkedDeviceSchema = object({
13530
13553
  deviceId: number(),
@@ -19074,6 +19097,9 @@ var RetrainStatusSchema = _enum([
19074
19097
  *
19075
19098
  * `debug` does NOT pin; it is attention, not durability.
19076
19099
  *
19100
+ * `debugNote` is the operator's own words about WHAT should be checked on this
19101
+ * track, and it lives and dies with `debug` — see {@link MAX_TRACK_DEBUG_NOTE_LEN}.
19102
+ *
19077
19103
  * `favourited` IS a BOOLEAN pin (durability bit), not a retrain lifecycle.
19078
19104
  * A favourited track is skipped by retention the same way `staging` is, but
19079
19105
  * it does not enter `none|staging|trained` and has no staging budget.
@@ -19084,6 +19110,21 @@ var TrackFlagFields = {
19084
19110
  markForTrain: boolean().optional(),
19085
19111
  /** Operator marked this track for diagnostic attention. */
19086
19112
  debug: boolean().optional(),
19113
+ /**
19114
+ * What the operator wants CHECKED on this track, in their own words.
19115
+ *
19116
+ * The flag alone says "look at this" and nothing about what for; a debug set
19117
+ * reviewed hours later is a list of tracks with no question attached. Bound
19118
+ * to `debug` on the WRITE side — the body clears it when `debug` goes off,
19119
+ * and refuses it on a track whose debug is off — so a note can never outlive
19120
+ * the attention it belongs to.
19121
+ *
19122
+ * `''` is a real value ("marked, nothing to add"); the ABSENT key means
19123
+ * "leave whatever is stored alone", which is what lets a surface turn debug
19124
+ * on without a note (a cancelled prompt) and what lets it edit the note
19125
+ * without touching the flag.
19126
+ */
19127
+ debugNote: string().max(500).optional(),
19087
19128
  /** Operator favourited this track. Pins it against pruning. */
19088
19129
  favourited: boolean().optional()
19089
19130
  };
@@ -19110,6 +19151,12 @@ var TrackFlagsSchema = object({
19110
19151
  trackId: string(),
19111
19152
  markForTrain: boolean(),
19112
19153
  debug: boolean(),
19154
+ /** The note as it STANDS after the write — never absent here (a track with no
19155
+ * note reports `''`), for the same reason the booleans are required: a
19156
+ * surface that has just written must be able to render the note it now owns
19157
+ * without a re-fetch, and an absent key would read as "unchanged" on a
19158
+ * screen that has no previous value to keep. */
19159
+ debugNote: string(),
19113
19160
  favourited: boolean(),
19114
19161
  /** The lifecycle state the boolean was derived from. Required here (unlike on
19115
19162
  * a track row) because this shape is only ever produced by the write body,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-export-hap",
3
- "version": "1.2.74",
3
+ "version": "1.2.76",
4
4
  "description": "HomeKit (HAP) exporter for CamStack devices. Publishes each exposed device as its own HomeKit accessory: cameras and doorbells with SRTP streaming, HomeKit Secure Video, motion, two-way audio, PTZ and battery; switches, lights, locks and sensors through a capability→service table.",
5
5
  "keywords": [
6
6
  "camstack",