@camstack/addon-provider-unifi 0.2.63 → 0.2.65

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.
package/dist/addon.js CHANGED
@@ -12927,6 +12927,24 @@ var deviceProviderCapability = {
12927
12927
  })
12928
12928
  }
12929
12929
  };
12930
+ /**
12931
+ * Device Manager capability — hub-side singleton that unifies device persistence,
12932
+ * live registry access, and all management operations into a single tRPC surface.
12933
+ *
12934
+ * Replaces:
12935
+ * - `device-persistence` capability (persistence methods absorbed here)
12936
+ * - `device-management.router.ts` (deleted in Phase 2)
12937
+ * - `device-ops.router.ts` (compat layer — deleted; device-provider ops absorbed here)
12938
+ *
12939
+ * All device provider addons (rtsp, onvif, frigate, …) are hub-local: they may
12940
+ * fork into separate processes but never run on remote cluster agents. Therefore:
12941
+ * - No nodeId routing needed — this is a pure hub singleton.
12942
+ * - The hub's DeviceRegistry is the single source of truth for all live devices.
12943
+ * - No shadow registry or cross-node aggregation required.
12944
+ *
12945
+ * Forked workers register devices back to the hub via `ctx.devices`
12946
+ * (DeviceManagerApi → ctx.api.deviceManager.registerDevice), same as today.
12947
+ */
12930
12948
  /** One child-placement directive on a container's `childLayout`. Structurally
12931
12949
  * identical to `ChildLayoutEntry` in `device-management.ts` — the cap wire
12932
12950
  * shape for the same field. The child is identified by its re-sync-stable
@@ -13025,7 +13043,12 @@ var ConfigEntrySchema = object({
13025
13043
  value: unknown(),
13026
13044
  description: string().optional()
13027
13045
  });
13028
- var LinkedDevicesModeSchema = _enum(["auto", "manual"]);
13046
+ /**
13047
+ * Only `manual` since D356: the operator picks, nothing links itself. The
13048
+ * field survives on the wire because a viewer already OTA'd parses it —
13049
+ * drop it once no shipped client reads `mode`.
13050
+ */
13051
+ var LinkedDevicesModeSchema = _enum(["manual"]);
13029
13052
  /** One resolved linked device — the compact projection consumers need. */
13030
13053
  var LinkedDeviceSchema = object({
13031
13054
  deviceId: number(),
@@ -18653,6 +18676,9 @@ var RetrainStatusSchema = _enum([
18653
18676
  *
18654
18677
  * `debug` does NOT pin; it is attention, not durability.
18655
18678
  *
18679
+ * `debugNote` is the operator's own words about WHAT should be checked on this
18680
+ * track, and it lives and dies with `debug` — see {@link MAX_TRACK_DEBUG_NOTE_LEN}.
18681
+ *
18656
18682
  * `favourited` IS a BOOLEAN pin (durability bit), not a retrain lifecycle.
18657
18683
  * A favourited track is skipped by retention the same way `staging` is, but
18658
18684
  * it does not enter `none|staging|trained` and has no staging budget.
@@ -18663,6 +18689,21 @@ var TrackFlagFields = {
18663
18689
  markForTrain: boolean().optional(),
18664
18690
  /** Operator marked this track for diagnostic attention. */
18665
18691
  debug: boolean().optional(),
18692
+ /**
18693
+ * What the operator wants CHECKED on this track, in their own words.
18694
+ *
18695
+ * The flag alone says "look at this" and nothing about what for; a debug set
18696
+ * reviewed hours later is a list of tracks with no question attached. Bound
18697
+ * to `debug` on the WRITE side — the body clears it when `debug` goes off,
18698
+ * and refuses it on a track whose debug is off — so a note can never outlive
18699
+ * the attention it belongs to.
18700
+ *
18701
+ * `''` is a real value ("marked, nothing to add"); the ABSENT key means
18702
+ * "leave whatever is stored alone", which is what lets a surface turn debug
18703
+ * on without a note (a cancelled prompt) and what lets it edit the note
18704
+ * without touching the flag.
18705
+ */
18706
+ debugNote: string().max(500).optional(),
18666
18707
  /** Operator favourited this track. Pins it against pruning. */
18667
18708
  favourited: boolean().optional()
18668
18709
  };
@@ -18689,6 +18730,12 @@ var TrackFlagsSchema = object({
18689
18730
  trackId: string(),
18690
18731
  markForTrain: boolean(),
18691
18732
  debug: boolean(),
18733
+ /** The note as it STANDS after the write — never absent here (a track with no
18734
+ * note reports `''`), for the same reason the booleans are required: a
18735
+ * surface that has just written must be able to render the note it now owns
18736
+ * without a re-fetch, and an absent key would read as "unchanged" on a
18737
+ * screen that has no previous value to keep. */
18738
+ debugNote: string(),
18692
18739
  favourited: boolean(),
18693
18740
  /** The lifecycle state the boolean was derived from. Required here (unlike on
18694
18741
  * a track row) because this shape is only ever produced by the write body,
package/dist/addon.mjs CHANGED
@@ -12926,6 +12926,24 @@ var deviceProviderCapability = {
12926
12926
  })
12927
12927
  }
12928
12928
  };
12929
+ /**
12930
+ * Device Manager capability — hub-side singleton that unifies device persistence,
12931
+ * live registry access, and all management operations into a single tRPC surface.
12932
+ *
12933
+ * Replaces:
12934
+ * - `device-persistence` capability (persistence methods absorbed here)
12935
+ * - `device-management.router.ts` (deleted in Phase 2)
12936
+ * - `device-ops.router.ts` (compat layer — deleted; device-provider ops absorbed here)
12937
+ *
12938
+ * All device provider addons (rtsp, onvif, frigate, …) are hub-local: they may
12939
+ * fork into separate processes but never run on remote cluster agents. Therefore:
12940
+ * - No nodeId routing needed — this is a pure hub singleton.
12941
+ * - The hub's DeviceRegistry is the single source of truth for all live devices.
12942
+ * - No shadow registry or cross-node aggregation required.
12943
+ *
12944
+ * Forked workers register devices back to the hub via `ctx.devices`
12945
+ * (DeviceManagerApi → ctx.api.deviceManager.registerDevice), same as today.
12946
+ */
12929
12947
  /** One child-placement directive on a container's `childLayout`. Structurally
12930
12948
  * identical to `ChildLayoutEntry` in `device-management.ts` — the cap wire
12931
12949
  * shape for the same field. The child is identified by its re-sync-stable
@@ -13024,7 +13042,12 @@ var ConfigEntrySchema = object({
13024
13042
  value: unknown(),
13025
13043
  description: string().optional()
13026
13044
  });
13027
- var LinkedDevicesModeSchema = _enum(["auto", "manual"]);
13045
+ /**
13046
+ * Only `manual` since D356: the operator picks, nothing links itself. The
13047
+ * field survives on the wire because a viewer already OTA'd parses it —
13048
+ * drop it once no shipped client reads `mode`.
13049
+ */
13050
+ var LinkedDevicesModeSchema = _enum(["manual"]);
13028
13051
  /** One resolved linked device — the compact projection consumers need. */
13029
13052
  var LinkedDeviceSchema = object({
13030
13053
  deviceId: number(),
@@ -18652,6 +18675,9 @@ var RetrainStatusSchema = _enum([
18652
18675
  *
18653
18676
  * `debug` does NOT pin; it is attention, not durability.
18654
18677
  *
18678
+ * `debugNote` is the operator's own words about WHAT should be checked on this
18679
+ * track, and it lives and dies with `debug` — see {@link MAX_TRACK_DEBUG_NOTE_LEN}.
18680
+ *
18655
18681
  * `favourited` IS a BOOLEAN pin (durability bit), not a retrain lifecycle.
18656
18682
  * A favourited track is skipped by retention the same way `staging` is, but
18657
18683
  * it does not enter `none|staging|trained` and has no staging budget.
@@ -18662,6 +18688,21 @@ var TrackFlagFields = {
18662
18688
  markForTrain: boolean().optional(),
18663
18689
  /** Operator marked this track for diagnostic attention. */
18664
18690
  debug: boolean().optional(),
18691
+ /**
18692
+ * What the operator wants CHECKED on this track, in their own words.
18693
+ *
18694
+ * The flag alone says "look at this" and nothing about what for; a debug set
18695
+ * reviewed hours later is a list of tracks with no question attached. Bound
18696
+ * to `debug` on the WRITE side — the body clears it when `debug` goes off,
18697
+ * and refuses it on a track whose debug is off — so a note can never outlive
18698
+ * the attention it belongs to.
18699
+ *
18700
+ * `''` is a real value ("marked, nothing to add"); the ABSENT key means
18701
+ * "leave whatever is stored alone", which is what lets a surface turn debug
18702
+ * on without a note (a cancelled prompt) and what lets it edit the note
18703
+ * without touching the flag.
18704
+ */
18705
+ debugNote: string().max(500).optional(),
18665
18706
  /** Operator favourited this track. Pins it against pruning. */
18666
18707
  favourited: boolean().optional()
18667
18708
  };
@@ -18688,6 +18729,12 @@ var TrackFlagsSchema = object({
18688
18729
  trackId: string(),
18689
18730
  markForTrain: boolean(),
18690
18731
  debug: boolean(),
18732
+ /** The note as it STANDS after the write — never absent here (a track with no
18733
+ * note reports `''`), for the same reason the booleans are required: a
18734
+ * surface that has just written must be able to render the note it now owns
18735
+ * without a re-fetch, and an absent key would read as "unchanged" on a
18736
+ * screen that has no previous value to keep. */
18737
+ debugNote: string(),
18691
18738
  favourited: boolean(),
18692
18739
  /** The lifecycle state the boolean was derived from. Required here (unlike on
18693
18740
  * 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-provider-unifi",
3
- "version": "0.2.63",
3
+ "version": "0.2.65",
4
4
  "description": "UniFi Network controller device-provider addon for CamStack — local-controller infra switches/APs (as containers) + network-client presence. NO cameras/Protect.",
5
5
  "keywords": [
6
6
  "camstack",