@camstack/ui-library 1.2.67 → 1.2.69

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.
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Burst-download the hub's `/adaptive-probe` blob and return Mbps.
3
+ * Used as `hints.downlinkMbps` so adaptive selection is based on a measured
4
+ * path, not viewport size or IP class. Failures return null (caller keeps
5
+ * the default-low / ceiling path and may stay on the lowest rung).
6
+ */
7
+ export declare const ADAPTIVE_PROBE_PATH = "/adaptive-probe";
8
+ export declare const ADAPTIVE_PROBE_TIMEOUT_MS = 2500;
9
+ export type AdaptiveTier = 'high' | 'mid' | 'low';
10
+ /** Mbps needed to attempt each rung (bitrate / 0.6 headroom, rounded). */
11
+ export declare const DOWNLINK_HIGH_MBPS = 8;
12
+ export declare const DOWNLINK_MID_MBPS = 2.5;
13
+ /** Map a measured downlink onto the adaptive ladder. Mid is a real rung. */
14
+ export declare function suggestedAdaptiveTier(mbps: number): AdaptiveTier;
15
+ /** First connect never carries a cached probe — the broker starts lowest. */
16
+ export declare function stripDownlinkForColdStart<T extends {
17
+ readonly downlinkMbps?: number;
18
+ }>(hints: T): Omit<T, 'downlinkMbps'>;
19
+ /** After a probe, only mid/high justify a make-before-break climb. */
20
+ export declare function shouldUpgradeAfterProbe(mbps: number): boolean;
21
+ export declare function measureDownlinkMbps(origin: string, deps: {
22
+ readonly fetchImpl: (url: string, init: {
23
+ signal: AbortSignal;
24
+ }) => Promise<{
25
+ ok: boolean;
26
+ arrayBuffer: () => Promise<ArrayBuffer>;
27
+ }>;
28
+ readonly now: () => number;
29
+ }): Promise<number | null>;
@@ -3,23 +3,12 @@ export type ModelOption = PipelineAddonSchema['models'][number];
3
3
  /**
4
4
  * Shared model picker — the ONE model-selection control across the app.
5
5
  *
6
- * Renders the grouped Family→Tier→Resolution→Variant selector
7
- * ({@link GroupedModelSelector}) when the step's models declare variant groups
8
- * (yolo26 / yolov9 …), else a flat `<select>` (face / plate / classifier
9
- * catalogs and operator-registered custom models).
10
- *
11
- * D214 — the catalog and the custom/ungrouped list are MUTUALLY EXCLUSIVE
12
- * views. A pinned custom model hides the grouped catalog entirely (both used
13
- * to render, and the grouped picker highlighted a family that was NOT the
14
- * selection); while a catalog model is pinned the custom list stays behind an
15
- * explicit affordance. A legacy/removed pin is surfaced with an explicit
16
- * banner rather than a silently mis-highlighted chip.
17
- *
18
- * Used by the pipeline stepper (`PipelineStep`), the agent/device step editor
19
- * (`AgentStepEditor`), and the benchmark — so the picker looks identical
20
- * everywhere. `value === ''` renders nothing selected (callers that support an
21
- * "Auto / node default" mode own that affordance and hide this picker while it
22
- * is active).
6
+ * Provider first (CamStack / Frigate / Scrypted / Custom), then inside that
7
+ * catalog the grouped Family→Tier→Variant selector when entries declare
8
+ * `group`, else a flat `<select>`. The persisted value stays the flat model
9
+ * id. `value === ''` renders nothing selected (callers that support an
10
+ * "Auto / node default" mode own that affordance and hide this picker while
11
+ * it is active).
23
12
  */
24
13
  export declare function ModelPicker({ models, value, onChange, disabled, }: {
25
14
  readonly models: readonly ModelOption[];
@@ -781,6 +781,10 @@ export declare const useLocalNetworkGetConnectionEndpoints: typeof trpc.localNet
781
781
  export declare const useLocalNetworkGetNotificationEndpoint: typeof trpc.localNetwork.getNotificationEndpoint.useQuery;
782
782
  /** Generated alias around `trpc.localNetwork.setNotificationEndpoint.useMutation`. */
783
783
  export declare const useLocalNetworkSetNotificationEndpoint: typeof trpc.localNetwork.setNotificationEndpoint.useMutation;
784
+ /** Generated alias around `trpc.localNetwork.getViewerEndpoints.useQuery`. */
785
+ export declare const useLocalNetworkGetViewerEndpoints: typeof trpc.localNetwork.getViewerEndpoints.useQuery;
786
+ /** Generated alias around `trpc.localNetwork.setViewerEndpoints.useMutation`. */
787
+ export declare const useLocalNetworkSetViewerEndpoints: typeof trpc.localNetwork.setViewerEndpoints.useMutation;
784
788
  /** Generated alias around `trpc.localNetwork.getAllowedAddresses.useQuery`. */
785
789
  export declare const useLocalNetworkGetAllowedAddresses: typeof trpc.localNetwork.getAllowedAddresses.useQuery;
786
790
  /** Generated alias around `trpc.localNetwork.setAllowedAddresses.useMutation`. */
@@ -1063,6 +1067,10 @@ export declare const usePipelineAnalyticsGetTrack: typeof trpc.pipelineAnalytics
1063
1067
  export declare const usePipelineAnalyticsListTracks: typeof trpc.pipelineAnalytics.listTracks.useQuery;
1064
1068
  /** Generated alias around `trpc.pipelineAnalytics.listRecentTracks.useQuery`. */
1065
1069
  export declare const usePipelineAnalyticsListRecentTracks: typeof trpc.pipelineAnalytics.listRecentTracks.useQuery;
1070
+ /** Generated alias around `trpc.pipelineAnalytics.listGroups.useQuery`. */
1071
+ export declare const usePipelineAnalyticsListGroups: typeof trpc.pipelineAnalytics.listGroups.useQuery;
1072
+ /** Generated alias around `trpc.pipelineAnalytics.getGroup.useQuery`. */
1073
+ export declare const usePipelineAnalyticsGetGroup: typeof trpc.pipelineAnalytics.getGroup.useQuery;
1066
1074
  /** Generated alias around `trpc.pipelineAnalytics.clearTracks.useMutation`. */
1067
1075
  export declare const usePipelineAnalyticsClearTracks: typeof trpc.pipelineAnalytics.clearTracks.useMutation;
1068
1076
  /** Generated alias around `trpc.pipelineAnalytics.getMotionEvents.useQuery`. */
package/dist/index.cjs CHANGED
@@ -5695,6 +5695,10 @@ var useLocalNetworkGetConnectionEndpoints = trpc.localNetwork.getConnectionEndpo
5695
5695
  var useLocalNetworkGetNotificationEndpoint = trpc.localNetwork.getNotificationEndpoint.useQuery;
5696
5696
  /** Generated alias around `trpc.localNetwork.setNotificationEndpoint.useMutation`. */
5697
5697
  var useLocalNetworkSetNotificationEndpoint = trpc.localNetwork.setNotificationEndpoint.useMutation;
5698
+ /** Generated alias around `trpc.localNetwork.getViewerEndpoints.useQuery`. */
5699
+ var useLocalNetworkGetViewerEndpoints = trpc.localNetwork.getViewerEndpoints.useQuery;
5700
+ /** Generated alias around `trpc.localNetwork.setViewerEndpoints.useMutation`. */
5701
+ var useLocalNetworkSetViewerEndpoints = trpc.localNetwork.setViewerEndpoints.useMutation;
5698
5702
  /** Generated alias around `trpc.localNetwork.getAllowedAddresses.useQuery`. */
5699
5703
  var useLocalNetworkGetAllowedAddresses = trpc.localNetwork.getAllowedAddresses.useQuery;
5700
5704
  /** Generated alias around `trpc.localNetwork.setAllowedAddresses.useMutation`. */
@@ -5977,6 +5981,10 @@ var usePipelineAnalyticsGetTrack = trpc.pipelineAnalytics.getTrack.useQuery;
5977
5981
  var usePipelineAnalyticsListTracks = trpc.pipelineAnalytics.listTracks.useQuery;
5978
5982
  /** Generated alias around `trpc.pipelineAnalytics.listRecentTracks.useQuery`. */
5979
5983
  var usePipelineAnalyticsListRecentTracks = trpc.pipelineAnalytics.listRecentTracks.useQuery;
5984
+ /** Generated alias around `trpc.pipelineAnalytics.listGroups.useQuery`. */
5985
+ var usePipelineAnalyticsListGroups = trpc.pipelineAnalytics.listGroups.useQuery;
5986
+ /** Generated alias around `trpc.pipelineAnalytics.getGroup.useQuery`. */
5987
+ var usePipelineAnalyticsGetGroup = trpc.pipelineAnalytics.getGroup.useQuery;
5980
5988
  /** Generated alias around `trpc.pipelineAnalytics.clearTracks.useMutation`. */
5981
5989
  var usePipelineAnalyticsClearTracks = trpc.pipelineAnalytics.clearTracks.useMutation;
5982
5990
  /** Generated alias around `trpc.pipelineAnalytics.getMotionEvents.useQuery`. */
@@ -21861,35 +21869,45 @@ function GroupedModelSelector({ catalog, value, onChange, disabled }) {
21861
21869
  }
21862
21870
  //#endregion
21863
21871
  //#region src/composites/model-picker.tsx
21872
+ var PROVIDER_LABEL = {
21873
+ camstack: "CamStack",
21874
+ frigate: "Frigate",
21875
+ scrypted: "Scrypted",
21876
+ custom: "Custom"
21877
+ };
21878
+ function providerOf(model) {
21879
+ return model.provider ?? "camstack";
21880
+ }
21864
21881
  /**
21865
21882
  * Shared model picker — the ONE model-selection control across the app.
21866
21883
  *
21867
- * Renders the grouped Family→Tier→Resolution→Variant selector
21868
- * ({@link GroupedModelSelector}) when the step's models declare variant groups
21869
- * (yolo26 / yolov9 …), else a flat `<select>` (face / plate / classifier
21870
- * catalogs and operator-registered custom models).
21871
- *
21872
- * D214 — the catalog and the custom/ungrouped list are MUTUALLY EXCLUSIVE
21873
- * views. A pinned custom model hides the grouped catalog entirely (both used
21874
- * to render, and the grouped picker highlighted a family that was NOT the
21875
- * selection); while a catalog model is pinned the custom list stays behind an
21876
- * explicit affordance. A legacy/removed pin is surfaced with an explicit
21877
- * banner rather than a silently mis-highlighted chip.
21878
- *
21879
- * Used by the pipeline stepper (`PipelineStep`), the agent/device step editor
21880
- * (`AgentStepEditor`), and the benchmark — so the picker looks identical
21881
- * everywhere. `value === ''` renders nothing selected (callers that support an
21882
- * "Auto / node default" mode own that affordance and hide this picker while it
21883
- * is active).
21884
+ * Provider first (CamStack / Frigate / Scrypted / Custom), then inside that
21885
+ * catalog the grouped Family→Tier→Variant selector when entries declare
21886
+ * `group`, else a flat `<select>`. The persisted value stays the flat model
21887
+ * id. `value === ''` renders nothing selected (callers that support an
21888
+ * "Auto / node default" mode own that affordance and hide this picker while
21889
+ * it is active).
21884
21890
  */
21885
21891
  function ModelPicker({ models, value, onChange, disabled }) {
21886
- const hasGroups = (0, react$1.useMemo)(() => (0, _camstack_types.buildModelVariantGroups)(models).length > 0, [models]);
21887
- const ungrouped = (0, react$1.useMemo)(() => models.filter((m) => m.group === void 0), [models]);
21888
- const customSelected = ungrouped.some((m) => m.id === value);
21889
- const [view, setView] = (0, react$1.useState)(customSelected ? "custom" : "catalog");
21892
+ const byProvider = (0, react$1.useMemo)(() => {
21893
+ const map = /* @__PURE__ */ new Map();
21894
+ for (const m of models) {
21895
+ const provider = providerOf(m);
21896
+ const list = map.get(provider);
21897
+ if (list) list.push(m);
21898
+ else map.set(provider, [m]);
21899
+ }
21900
+ return map;
21901
+ }, [models]);
21902
+ const presentProviders = (0, react$1.useMemo)(() => _camstack_types.MODEL_PROVIDER_IDS.filter((id) => (byProvider.get(id)?.length ?? 0) > 0), [byProvider]);
21903
+ const defaultProvider = (0, react$1.useMemo)(() => {
21904
+ const pinned = models.find((m) => m.id === value);
21905
+ return pinned ? providerOf(pinned) : void 0;
21906
+ }, [models, value]) ?? (presentProviders.includes("camstack") ? "camstack" : presentProviders[0] ?? "camstack");
21907
+ const [provider, setProvider] = (0, react$1.useState)(defaultProvider);
21890
21908
  (0, react$1.useEffect)(() => {
21891
- setView(customSelected ? "custom" : "catalog");
21892
- }, [customSelected, value]);
21909
+ setProvider(defaultProvider);
21910
+ }, [defaultProvider]);
21893
21911
  const unresolvedBanner = value !== "" && !models.some((m) => m.id === value) && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
21894
21912
  className: "rounded border border-amber-500/40 bg-amber-500/10 px-2 py-1.5 text-[10px] text-amber-300",
21895
21913
  children: [
@@ -21901,6 +21919,9 @@ function ModelPicker({ models, value, onChange, disabled }) {
21901
21919
  ") is a legacy/removed model — no longer offered below. Pick a replacement to change it; Save persists whatever is selected here."
21902
21920
  ]
21903
21921
  });
21922
+ const scoped = byProvider.get(provider) ?? [];
21923
+ const grouped = scoped.filter((m) => m.group !== void 0);
21924
+ const ungrouped = scoped.filter((m) => m.group === void 0);
21904
21925
  const flatSelect = (opts, selectPlaceholder) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("select", {
21905
21926
  disabled,
21906
21927
  className: "w-full bg-surface border border-border rounded px-2 py-1 text-xs disabled:opacity-50",
@@ -21915,49 +21936,30 @@ function ModelPicker({ models, value, onChange, disabled }) {
21915
21936
  children: m.name
21916
21937
  }, m.id))]
21917
21938
  });
21918
- const switchButton = (label, target) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
21919
- type: "button",
21920
- disabled,
21921
- onClick: () => setView(target),
21922
- className: "text-[10px] text-primary hover:underline disabled:opacity-50",
21923
- children: label
21924
- });
21925
- if (!hasGroups) return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
21926
- className: "space-y-2",
21927
- children: [unresolvedBanner, flatSelect(models, "— select a model —")]
21928
- });
21929
- if (view === "custom" && ungrouped.length > 0) return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
21930
- className: "space-y-2",
21931
- children: [
21932
- unresolvedBanner,
21933
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
21934
- className: "flex items-center justify-between",
21935
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
21936
- className: "text-[10px] uppercase tracking-widest text-foreground-subtle",
21937
- children: "Custom / ungrouped model"
21938
- }), switchButton("Choose from catalog instead", "catalog")]
21939
- }),
21940
- flatSelect(ungrouped, "— custom / ungrouped model —"),
21941
- customSelected && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
21942
- className: "text-[10px] text-foreground-subtle",
21943
- children: "A custom model is pinned — the catalog selection is hidden while it is active."
21944
- })
21945
- ]
21946
- });
21947
21939
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
21948
21940
  className: "space-y-3",
21949
21941
  children: [
21950
21942
  unresolvedBanner,
21951
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(GroupedModelSelector, {
21952
- catalog: models,
21943
+ presentProviders.length > 1 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
21944
+ className: "text-[10px] uppercase tracking-wide text-foreground-subtle mb-1.5",
21945
+ children: "Provider"
21946
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
21947
+ className: "flex flex-wrap gap-1.5",
21948
+ children: presentProviders.map((id) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
21949
+ type: "button",
21950
+ disabled,
21951
+ onClick: () => setProvider(id),
21952
+ className: cn("rounded-full px-3 py-1 text-[11px] font-medium border transition-colors", id === provider ? "border-primary bg-primary/10 text-primary" : "border-border bg-background text-foreground-subtle hover:text-foreground hover:border-foreground-subtle/40", disabled ? "opacity-50 cursor-not-allowed" : "cursor-pointer"),
21953
+ children: PROVIDER_LABEL[id]
21954
+ }, id))
21955
+ })] }),
21956
+ grouped.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(GroupedModelSelector, {
21957
+ catalog: grouped,
21953
21958
  value,
21954
21959
  onChange,
21955
21960
  disabled
21956
21961
  }),
21957
- ungrouped.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
21958
- className: "flex justify-end",
21959
- children: switchButton("Use a custom model…", "custom")
21960
- })
21962
+ ungrouped.length > 0 && flatSelect(ungrouped, grouped.length > 0 ? "— other models —" : "— select a model —")
21961
21963
  ]
21962
21964
  });
21963
21965
  }
@@ -24259,6 +24261,49 @@ function nextReconnectAction(attempt, random = Math.random) {
24259
24261
  };
24260
24262
  }
24261
24263
  //#endregion
24264
+ //#region src/composites/adaptive-downlink.ts
24265
+ /**
24266
+ * Burst-download the hub's `/adaptive-probe` blob and return Mbps.
24267
+ * Used as `hints.downlinkMbps` so adaptive selection is based on a measured
24268
+ * path, not viewport size or IP class. Failures return null (caller keeps
24269
+ * the default-low / ceiling path and may stay on the lowest rung).
24270
+ */
24271
+ var ADAPTIVE_PROBE_PATH = "/adaptive-probe";
24272
+ var ADAPTIVE_PROBE_TIMEOUT_MS = 2500;
24273
+ /** Map a measured downlink onto the adaptive ladder. Mid is a real rung. */
24274
+ function suggestedAdaptiveTier(mbps) {
24275
+ if (mbps >= 8) return "high";
24276
+ if (mbps >= 2.5) return "mid";
24277
+ return "low";
24278
+ }
24279
+ /** First connect never carries a cached probe — the broker starts lowest. */
24280
+ function stripDownlinkForColdStart(hints) {
24281
+ const { downlinkMbps: _ignored, ...rest } = hints;
24282
+ return rest;
24283
+ }
24284
+ /** After a probe, only mid/high justify a make-before-break climb. */
24285
+ function shouldUpgradeAfterProbe(mbps) {
24286
+ return suggestedAdaptiveTier(mbps) !== "low";
24287
+ }
24288
+ async function measureDownlinkMbps(origin, deps) {
24289
+ const base = origin.replace(/\/+$/, "");
24290
+ const ctrl = new AbortController();
24291
+ const timer = setTimeout(() => ctrl.abort(), ADAPTIVE_PROBE_TIMEOUT_MS);
24292
+ const started = deps.now();
24293
+ try {
24294
+ const res = await deps.fetchImpl(`${base}${ADAPTIVE_PROBE_PATH}`, { signal: ctrl.signal });
24295
+ if (!res.ok) return null;
24296
+ const buf = await res.arrayBuffer();
24297
+ const elapsedMs = Math.max(1, deps.now() - started);
24298
+ if (buf.byteLength < 1024) return null;
24299
+ return buf.byteLength * 8 / elapsedMs / 1e3;
24300
+ } catch {
24301
+ return null;
24302
+ } finally {
24303
+ clearTimeout(timer);
24304
+ }
24305
+ }
24306
+ //#endregion
24262
24307
  //#region src/composites/camera-stream-player.tsx
24263
24308
  /**
24264
24309
  * Silence (or restore) a live WebRTC stream FOR REAL.
@@ -24304,23 +24349,48 @@ function isCanvasEffectivelyBlack(ctx, w, h) {
24304
24349
  function computeClientHints(container) {
24305
24350
  const hints = {};
24306
24351
  if (typeof window !== "undefined") {
24352
+ const dpr = window.devicePixelRatio || 1;
24307
24353
  if (container) {
24308
24354
  const rect = container.getBoundingClientRect();
24309
24355
  if (rect.width > 0 && rect.height > 0) {
24310
- hints.viewportWidth = Math.round(rect.width);
24311
- hints.viewportHeight = Math.round(rect.height);
24356
+ hints.viewportWidth = Math.round(rect.width * dpr);
24357
+ hints.viewportHeight = Math.round(rect.height * dpr);
24312
24358
  }
24313
24359
  }
24314
24360
  if (hints.viewportWidth === void 0) {
24315
- hints.viewportWidth = window.innerWidth;
24316
- hints.viewportHeight = window.innerHeight;
24361
+ hints.viewportWidth = Math.round(window.innerWidth * dpr);
24362
+ hints.viewportHeight = Math.round(window.innerHeight * dpr);
24317
24363
  }
24318
- hints.devicePixelRatio = window.devicePixelRatio || 1;
24319
- const conn = navigator.connection;
24320
- if (conn?.downlink && conn.downlink > 0) hints.downlinkMbps = conn.downlink;
24364
+ hints.devicePixelRatio = dpr;
24321
24365
  }
24322
24366
  return hints;
24323
24367
  }
24368
+ var downlinkCache = null;
24369
+ var DOWNLINK_TTL_MS = 3e4;
24370
+ async function measuredDownlinkMbps() {
24371
+ if (typeof window === "undefined") return void 0;
24372
+ const origin = window.location.origin;
24373
+ if (downlinkCache && downlinkCache.origin === origin && Date.now() - downlinkCache.at < DOWNLINK_TTL_MS) return downlinkCache.mbps;
24374
+ const mbps = await measureDownlinkMbps(origin, {
24375
+ fetchImpl: (url, init) => fetch(url, init),
24376
+ now: () => Date.now()
24377
+ });
24378
+ if (mbps === null || !Number.isFinite(mbps)) return void 0;
24379
+ downlinkCache = {
24380
+ origin,
24381
+ mbps,
24382
+ at: Date.now()
24383
+ };
24384
+ return mbps;
24385
+ }
24386
+ function mergePlayerHints(autoHints, override, downlinkMbps, coldStart) {
24387
+ const merged = {
24388
+ ...autoHints,
24389
+ ...downlinkMbps !== void 0 ? { downlinkMbps } : {},
24390
+ ...override
24391
+ };
24392
+ return coldStart ? stripDownlinkForColdStart(merged) : merged;
24393
+ }
24324
24394
  var FIRST_FRAME_TIMEOUT_MS = 8e3;
24325
24395
  function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, muted: initialMuted = true, showControls = true, showStats = false, onPlaybackStats, onClientNetworkSample, onConnectTiming, className = "", onStateChange, onError, onReconnectAttempt, overlay, createSession, sendAnswer, handleOffer, getIceServers, addIceCandidate, getIceCandidates, closeSession, getSessionState, reoffer, posterUrl, hintsOverride, reconnectSignal, onControlChannel, onVideoElement }) {
24326
24396
  const videoRef = (0, react$1.useRef)(null);
@@ -24353,6 +24423,8 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
24353
24423
  /** Highest `pendingRenegotiation.epoch` already acted on — act at most once
24354
24424
  * per epoch so a poll that re-reports the same pending change is a no-op. */
24355
24425
  const lastEpochRef = (0, react$1.useRef)(0);
24426
+ /** True once this adaptive session already climbed after the cold-start probe. */
24427
+ const probeUpgradeRef = (0, react$1.useRef)(false);
24356
24428
  /** True while a background re-offer PeerConnection is being built — guards
24357
24429
  * against a second poll firing a parallel renegotiation. */
24358
24430
  const renegotiatingRef = (0, react$1.useRef)(false);
@@ -24466,7 +24538,7 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
24466
24538
  tick();
24467
24539
  }, SESSION_STATE_POLL_MS);
24468
24540
  }, [getSessionState, reoffer]);
24469
- const connectServerOffer = (0, react$1.useCallback)(async (seamless = false) => {
24541
+ const connectServerOffer = (0, react$1.useCallback)(async (seamless = false, withDownlink = seamless) => {
24470
24542
  if (!mountedRef.current || !createSession || !sendAnswer) return;
24471
24543
  const oldPc = seamless ? pcRef.current : null;
24472
24544
  const oldSessions = seamless ? new Set(sessionIdsRef.current) : null;
@@ -24476,11 +24548,16 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
24476
24548
  const abort = new AbortController();
24477
24549
  connectAbortRef.current = abort;
24478
24550
  try {
24479
- const { sessionId, sdpOffer, iceServers } = await createSession({
24480
- ...computeClientHints(containerRef.current),
24481
- ...hintsOverride
24482
- });
24551
+ const probePromise = !withDownlink ? measuredDownlinkMbps() : void 0;
24552
+ const { sessionId, sdpOffer, iceServers } = await createSession(mergePlayerHints(computeClientHints(containerRef.current), hintsOverride, withDownlink ? await measuredDownlinkMbps() : void 0, !withDownlink));
24483
24553
  sessionIdsRef.current.add(sessionId);
24554
+ if (probePromise !== void 0) probePromise.then((mbps) => {
24555
+ if (mbps === void 0 || !shouldUpgradeAfterProbe(mbps)) return;
24556
+ if (!mountedRef.current || abort.signal.aborted) return;
24557
+ if (probeUpgradeRef.current) return;
24558
+ probeUpgradeRef.current = true;
24559
+ connectServerOffer(true, true);
24560
+ });
24484
24561
  if (!mountedRef.current || abort.signal.aborted) {
24485
24562
  closeSession?.(sessionId).catch(() => {});
24486
24563
  sessionIdsRef.current.delete(sessionId);
@@ -24650,7 +24727,7 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
24650
24727
  updateState,
24651
24728
  onError
24652
24729
  ]);
24653
- const connectClientOffer = (0, react$1.useCallback)(async (seamless = false) => {
24730
+ const connectClientOffer = (0, react$1.useCallback)(async (seamless = false, withDownlink = seamless) => {
24654
24731
  if (!mountedRef.current || !handleOffer) return;
24655
24732
  const oldPc = seamless ? pcRef.current : null;
24656
24733
  const oldSessions = seamless ? new Set(sessionIdsRef.current) : null;
@@ -24663,6 +24740,7 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
24663
24740
  const ms = () => Math.round(performance.now() - t0);
24664
24741
  const timing = {};
24665
24742
  try {
24743
+ const probePromise = !withDownlink ? measuredDownlinkMbps() : void 0;
24666
24744
  const iceServers = await getIceServers?.();
24667
24745
  timing.iceServersMs = ms();
24668
24746
  if (!mountedRef.current || abort.signal.aborted) return;
@@ -24770,15 +24848,20 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
24770
24848
  await pc.setLocalDescription(offer);
24771
24849
  timing.localSetMs = ms();
24772
24850
  if (!mountedRef.current || abort.signal.aborted) return;
24773
- const clientOfferHints = {
24774
- ...computeClientHints(containerRef.current),
24775
- ...hintsOverride
24776
- };
24851
+ const downlinkMbps = withDownlink ? await measuredDownlinkMbps() : void 0;
24852
+ const clientOfferHints = mergePlayerHints(computeClientHints(containerRef.current), hintsOverride, downlinkMbps, !withDownlink);
24777
24853
  const signalingStart = ms();
24778
24854
  const { sessionId: sid, sdpAnswer } = await handleOffer(pc.localDescription?.sdp ?? offer.sdp ?? "", void 0, clientOfferHints);
24779
24855
  timing.signalingRttMs = ms() - signalingStart;
24780
24856
  sessionId = sid;
24781
24857
  sessionIdsRef.current.add(sid);
24858
+ if (probePromise !== void 0) probePromise.then((mbps) => {
24859
+ if (mbps === void 0 || !shouldUpgradeAfterProbe(mbps)) return;
24860
+ if (!mountedRef.current || abort.signal.aborted) return;
24861
+ if (probeUpgradeRef.current) return;
24862
+ probeUpgradeRef.current = true;
24863
+ connectClientOffer(true, true);
24864
+ });
24782
24865
  activeSessionIdRef.current = sid;
24783
24866
  if (!mountedRef.current || abort.signal.aborted) {
24784
24867
  closeSession?.(sid).catch(() => {});
@@ -24944,8 +25027,10 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
24944
25027
  pc.close();
24945
25028
  return;
24946
25029
  }
25030
+ const downlinkMbps = await measuredDownlinkMbps();
24947
25031
  const reofferHints = {
24948
25032
  ...computeClientHints(containerRef.current),
25033
+ ...downlinkMbps !== void 0 ? { downlinkMbps } : {},
24949
25034
  ...hintsOverride
24950
25035
  };
24951
25036
  const { sessionId: sid, sdpAnswer } = await reofferFn(sessionId, pc.localDescription?.sdp ?? offer.sdp ?? "", target, reofferHints);
@@ -25087,6 +25172,7 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
25087
25172
  if (!serverChanged && !keyChanged) return;
25088
25173
  if (!mountedRef.current) return;
25089
25174
  reconnectAttemptsRef.current = 0;
25175
+ probeUpgradeRef.current = false;
25090
25176
  if (serverChanged) {
25091
25177
  cleanup();
25092
25178
  connect();
@@ -49483,12 +49569,14 @@ exports.useLocalNetworkGetConnectionEndpoints = useLocalNetworkGetConnectionEndp
49483
49569
  exports.useLocalNetworkGetNotificationEndpoint = useLocalNetworkGetNotificationEndpoint;
49484
49570
  exports.useLocalNetworkGetPreferred = useLocalNetworkGetPreferred;
49485
49571
  exports.useLocalNetworkGetTlsStatus = useLocalNetworkGetTlsStatus;
49572
+ exports.useLocalNetworkGetViewerEndpoints = useLocalNetworkGetViewerEndpoints;
49486
49573
  exports.useLocalNetworkList = useLocalNetworkList;
49487
49574
  exports.useLocalNetworkRegenerateCertificate = useLocalNetworkRegenerateCertificate;
49488
49575
  exports.useLocalNetworkResetAllowlistToBestMatch = useLocalNetworkResetAllowlistToBestMatch;
49489
49576
  exports.useLocalNetworkRevertToGeneratedCertificate = useLocalNetworkRevertToGeneratedCertificate;
49490
49577
  exports.useLocalNetworkSetAllowedAddresses = useLocalNetworkSetAllowedAddresses;
49491
49578
  exports.useLocalNetworkSetNotificationEndpoint = useLocalNetworkSetNotificationEndpoint;
49579
+ exports.useLocalNetworkSetViewerEndpoints = useLocalNetworkSetViewerEndpoints;
49492
49580
  exports.useLocalNetworkUploadCertificate = useLocalNetworkUploadCertificate;
49493
49581
  exports.useLockControlGetStatus = useLockControlGetStatus;
49494
49582
  exports.useLockControlLock = useLockControlLock;
@@ -49637,6 +49725,7 @@ exports.usePipelineAnalyticsGetDeviceSettingsContribution = usePipelineAnalytics
49637
49725
  exports.usePipelineAnalyticsGetEventDensity = usePipelineAnalyticsGetEventDensity;
49638
49726
  exports.usePipelineAnalyticsGetEventMedia = usePipelineAnalyticsGetEventMedia;
49639
49727
  exports.usePipelineAnalyticsGetEventStoreFootprint = usePipelineAnalyticsGetEventStoreFootprint;
49728
+ exports.usePipelineAnalyticsGetGroup = usePipelineAnalyticsGetGroup;
49640
49729
  exports.usePipelineAnalyticsGetKeyEvents = usePipelineAnalyticsGetKeyEvents;
49641
49730
  exports.usePipelineAnalyticsGetMotionEvents = usePipelineAnalyticsGetMotionEvents;
49642
49731
  exports.usePipelineAnalyticsGetObjectEmbeddingRebuildStatus = usePipelineAnalyticsGetObjectEmbeddingRebuildStatus;
@@ -49651,6 +49740,7 @@ exports.usePipelineAnalyticsGetTrainingExportSummary = usePipelineAnalyticsGetTr
49651
49740
  exports.usePipelineAnalyticsGetTrainingExportUrl = usePipelineAnalyticsGetTrainingExportUrl;
49652
49741
  exports.usePipelineAnalyticsListEventKinds = usePipelineAnalyticsListEventKinds;
49653
49742
  exports.usePipelineAnalyticsListEventKindsBatch = usePipelineAnalyticsListEventKindsBatch;
49743
+ exports.usePipelineAnalyticsListGroups = usePipelineAnalyticsListGroups;
49654
49744
  exports.usePipelineAnalyticsListOpsLog = usePipelineAnalyticsListOpsLog;
49655
49745
  exports.usePipelineAnalyticsListRecentTracks = usePipelineAnalyticsListRecentTracks;
49656
49746
  exports.usePipelineAnalyticsListRetrainAnnotations = usePipelineAnalyticsListRetrainAnnotations;
package/dist/index.js CHANGED
@@ -13,7 +13,7 @@ import * as __mfHostReactDOMClient from "react-dom/client";
13
13
  import { createRoot } from "react-dom/client";
14
14
  import * as __mfHostTrpcClient from "@trpc/client";
15
15
  import { createTRPCClient, createWSClient, httpLink, splitLink, wsLink } from "@trpc/client";
16
- import { ALL_CAPABILITY_DEFINITIONS, CAM_PROFILE_ORDER, DEFAULT_EVENTS_BAND_BUFFER_SEC, DEFAULT_EVENT_COLOR, DEVICE_TYPE_CONTROL_KIND, DeviceExportStatusSchema, DeviceFeature, DeviceRole, DeviceType, EVENT_TAXONOMY, EventCategory, ExposedDeviceSchema, KNOWN_CAP_NAMES, PET_FEEDER_MANUAL_FEED_MAX, PET_FEEDER_MANUAL_FEED_MIN, RecordingConfigSchema, RecordingStatusSchema, SourceInfoSchema, TIMEZONES, buildModelVariantGroups, canConvertUnit, clusterStepSettingFieldsFor, createDeviceProxy, createLazyTrpcSource, createSliceHandle, deriveRecordingMode, describeModelVariant, findTimezone, resolveDeviceControlKind, resolveRecordingProfiles, resolveVariantModelId, resolveViewableDeviceIds, selectAssignedProfileSlots, tryConvertUnit } from "@camstack/types";
16
+ import { ALL_CAPABILITY_DEFINITIONS, CAM_PROFILE_ORDER, DEFAULT_EVENTS_BAND_BUFFER_SEC, DEFAULT_EVENT_COLOR, DEVICE_TYPE_CONTROL_KIND, DeviceExportStatusSchema, DeviceFeature, DeviceRole, DeviceType, EVENT_TAXONOMY, EventCategory, ExposedDeviceSchema, KNOWN_CAP_NAMES, MODEL_PROVIDER_IDS, PET_FEEDER_MANUAL_FEED_MAX, PET_FEEDER_MANUAL_FEED_MIN, RecordingConfigSchema, RecordingStatusSchema, SourceInfoSchema, TIMEZONES, buildModelVariantGroups, canConvertUnit, clusterStepSettingFieldsFor, createDeviceProxy, createLazyTrpcSource, createSliceHandle, deriveRecordingMode, describeModelVariant, findTimezone, resolveDeviceControlKind, resolveRecordingProfiles, resolveVariantModelId, resolveViewableDeviceIds, selectAssignedProfileSlots, tryConvertUnit } from "@camstack/types";
17
17
  import { createSystem } from "@camstack/sdk";
18
18
  import { z } from "zod";
19
19
  //#region node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.js
@@ -5671,6 +5671,10 @@ var useLocalNetworkGetConnectionEndpoints = trpc.localNetwork.getConnectionEndpo
5671
5671
  var useLocalNetworkGetNotificationEndpoint = trpc.localNetwork.getNotificationEndpoint.useQuery;
5672
5672
  /** Generated alias around `trpc.localNetwork.setNotificationEndpoint.useMutation`. */
5673
5673
  var useLocalNetworkSetNotificationEndpoint = trpc.localNetwork.setNotificationEndpoint.useMutation;
5674
+ /** Generated alias around `trpc.localNetwork.getViewerEndpoints.useQuery`. */
5675
+ var useLocalNetworkGetViewerEndpoints = trpc.localNetwork.getViewerEndpoints.useQuery;
5676
+ /** Generated alias around `trpc.localNetwork.setViewerEndpoints.useMutation`. */
5677
+ var useLocalNetworkSetViewerEndpoints = trpc.localNetwork.setViewerEndpoints.useMutation;
5674
5678
  /** Generated alias around `trpc.localNetwork.getAllowedAddresses.useQuery`. */
5675
5679
  var useLocalNetworkGetAllowedAddresses = trpc.localNetwork.getAllowedAddresses.useQuery;
5676
5680
  /** Generated alias around `trpc.localNetwork.setAllowedAddresses.useMutation`. */
@@ -5953,6 +5957,10 @@ var usePipelineAnalyticsGetTrack = trpc.pipelineAnalytics.getTrack.useQuery;
5953
5957
  var usePipelineAnalyticsListTracks = trpc.pipelineAnalytics.listTracks.useQuery;
5954
5958
  /** Generated alias around `trpc.pipelineAnalytics.listRecentTracks.useQuery`. */
5955
5959
  var usePipelineAnalyticsListRecentTracks = trpc.pipelineAnalytics.listRecentTracks.useQuery;
5960
+ /** Generated alias around `trpc.pipelineAnalytics.listGroups.useQuery`. */
5961
+ var usePipelineAnalyticsListGroups = trpc.pipelineAnalytics.listGroups.useQuery;
5962
+ /** Generated alias around `trpc.pipelineAnalytics.getGroup.useQuery`. */
5963
+ var usePipelineAnalyticsGetGroup = trpc.pipelineAnalytics.getGroup.useQuery;
5956
5964
  /** Generated alias around `trpc.pipelineAnalytics.clearTracks.useMutation`. */
5957
5965
  var usePipelineAnalyticsClearTracks = trpc.pipelineAnalytics.clearTracks.useMutation;
5958
5966
  /** Generated alias around `trpc.pipelineAnalytics.getMotionEvents.useQuery`. */
@@ -21837,35 +21845,45 @@ function GroupedModelSelector({ catalog, value, onChange, disabled }) {
21837
21845
  }
21838
21846
  //#endregion
21839
21847
  //#region src/composites/model-picker.tsx
21848
+ var PROVIDER_LABEL = {
21849
+ camstack: "CamStack",
21850
+ frigate: "Frigate",
21851
+ scrypted: "Scrypted",
21852
+ custom: "Custom"
21853
+ };
21854
+ function providerOf(model) {
21855
+ return model.provider ?? "camstack";
21856
+ }
21840
21857
  /**
21841
21858
  * Shared model picker — the ONE model-selection control across the app.
21842
21859
  *
21843
- * Renders the grouped Family→Tier→Resolution→Variant selector
21844
- * ({@link GroupedModelSelector}) when the step's models declare variant groups
21845
- * (yolo26 / yolov9 …), else a flat `<select>` (face / plate / classifier
21846
- * catalogs and operator-registered custom models).
21847
- *
21848
- * D214 — the catalog and the custom/ungrouped list are MUTUALLY EXCLUSIVE
21849
- * views. A pinned custom model hides the grouped catalog entirely (both used
21850
- * to render, and the grouped picker highlighted a family that was NOT the
21851
- * selection); while a catalog model is pinned the custom list stays behind an
21852
- * explicit affordance. A legacy/removed pin is surfaced with an explicit
21853
- * banner rather than a silently mis-highlighted chip.
21854
- *
21855
- * Used by the pipeline stepper (`PipelineStep`), the agent/device step editor
21856
- * (`AgentStepEditor`), and the benchmark — so the picker looks identical
21857
- * everywhere. `value === ''` renders nothing selected (callers that support an
21858
- * "Auto / node default" mode own that affordance and hide this picker while it
21859
- * is active).
21860
+ * Provider first (CamStack / Frigate / Scrypted / Custom), then inside that
21861
+ * catalog the grouped Family→Tier→Variant selector when entries declare
21862
+ * `group`, else a flat `<select>`. The persisted value stays the flat model
21863
+ * id. `value === ''` renders nothing selected (callers that support an
21864
+ * "Auto / node default" mode own that affordance and hide this picker while
21865
+ * it is active).
21860
21866
  */
21861
21867
  function ModelPicker({ models, value, onChange, disabled }) {
21862
- const hasGroups = useMemo(() => buildModelVariantGroups(models).length > 0, [models]);
21863
- const ungrouped = useMemo(() => models.filter((m) => m.group === void 0), [models]);
21864
- const customSelected = ungrouped.some((m) => m.id === value);
21865
- const [view, setView] = useState(customSelected ? "custom" : "catalog");
21868
+ const byProvider = useMemo(() => {
21869
+ const map = /* @__PURE__ */ new Map();
21870
+ for (const m of models) {
21871
+ const provider = providerOf(m);
21872
+ const list = map.get(provider);
21873
+ if (list) list.push(m);
21874
+ else map.set(provider, [m]);
21875
+ }
21876
+ return map;
21877
+ }, [models]);
21878
+ const presentProviders = useMemo(() => MODEL_PROVIDER_IDS.filter((id) => (byProvider.get(id)?.length ?? 0) > 0), [byProvider]);
21879
+ const defaultProvider = useMemo(() => {
21880
+ const pinned = models.find((m) => m.id === value);
21881
+ return pinned ? providerOf(pinned) : void 0;
21882
+ }, [models, value]) ?? (presentProviders.includes("camstack") ? "camstack" : presentProviders[0] ?? "camstack");
21883
+ const [provider, setProvider] = useState(defaultProvider);
21866
21884
  useEffect(() => {
21867
- setView(customSelected ? "custom" : "catalog");
21868
- }, [customSelected, value]);
21885
+ setProvider(defaultProvider);
21886
+ }, [defaultProvider]);
21869
21887
  const unresolvedBanner = value !== "" && !models.some((m) => m.id === value) && /* @__PURE__ */ jsxs("div", {
21870
21888
  className: "rounded border border-amber-500/40 bg-amber-500/10 px-2 py-1.5 text-[10px] text-amber-300",
21871
21889
  children: [
@@ -21877,6 +21895,9 @@ function ModelPicker({ models, value, onChange, disabled }) {
21877
21895
  ") is a legacy/removed model — no longer offered below. Pick a replacement to change it; Save persists whatever is selected here."
21878
21896
  ]
21879
21897
  });
21898
+ const scoped = byProvider.get(provider) ?? [];
21899
+ const grouped = scoped.filter((m) => m.group !== void 0);
21900
+ const ungrouped = scoped.filter((m) => m.group === void 0);
21880
21901
  const flatSelect = (opts, selectPlaceholder) => /* @__PURE__ */ jsxs("select", {
21881
21902
  disabled,
21882
21903
  className: "w-full bg-surface border border-border rounded px-2 py-1 text-xs disabled:opacity-50",
@@ -21891,49 +21912,30 @@ function ModelPicker({ models, value, onChange, disabled }) {
21891
21912
  children: m.name
21892
21913
  }, m.id))]
21893
21914
  });
21894
- const switchButton = (label, target) => /* @__PURE__ */ jsx("button", {
21895
- type: "button",
21896
- disabled,
21897
- onClick: () => setView(target),
21898
- className: "text-[10px] text-primary hover:underline disabled:opacity-50",
21899
- children: label
21900
- });
21901
- if (!hasGroups) return /* @__PURE__ */ jsxs("div", {
21902
- className: "space-y-2",
21903
- children: [unresolvedBanner, flatSelect(models, "— select a model —")]
21904
- });
21905
- if (view === "custom" && ungrouped.length > 0) return /* @__PURE__ */ jsxs("div", {
21906
- className: "space-y-2",
21907
- children: [
21908
- unresolvedBanner,
21909
- /* @__PURE__ */ jsxs("div", {
21910
- className: "flex items-center justify-between",
21911
- children: [/* @__PURE__ */ jsx("div", {
21912
- className: "text-[10px] uppercase tracking-widest text-foreground-subtle",
21913
- children: "Custom / ungrouped model"
21914
- }), switchButton("Choose from catalog instead", "catalog")]
21915
- }),
21916
- flatSelect(ungrouped, "— custom / ungrouped model —"),
21917
- customSelected && /* @__PURE__ */ jsx("div", {
21918
- className: "text-[10px] text-foreground-subtle",
21919
- children: "A custom model is pinned — the catalog selection is hidden while it is active."
21920
- })
21921
- ]
21922
- });
21923
21915
  return /* @__PURE__ */ jsxs("div", {
21924
21916
  className: "space-y-3",
21925
21917
  children: [
21926
21918
  unresolvedBanner,
21927
- /* @__PURE__ */ jsx(GroupedModelSelector, {
21928
- catalog: models,
21919
+ presentProviders.length > 1 && /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("p", {
21920
+ className: "text-[10px] uppercase tracking-wide text-foreground-subtle mb-1.5",
21921
+ children: "Provider"
21922
+ }), /* @__PURE__ */ jsx("div", {
21923
+ className: "flex flex-wrap gap-1.5",
21924
+ children: presentProviders.map((id) => /* @__PURE__ */ jsx("button", {
21925
+ type: "button",
21926
+ disabled,
21927
+ onClick: () => setProvider(id),
21928
+ className: cn("rounded-full px-3 py-1 text-[11px] font-medium border transition-colors", id === provider ? "border-primary bg-primary/10 text-primary" : "border-border bg-background text-foreground-subtle hover:text-foreground hover:border-foreground-subtle/40", disabled ? "opacity-50 cursor-not-allowed" : "cursor-pointer"),
21929
+ children: PROVIDER_LABEL[id]
21930
+ }, id))
21931
+ })] }),
21932
+ grouped.length > 0 && /* @__PURE__ */ jsx(GroupedModelSelector, {
21933
+ catalog: grouped,
21929
21934
  value,
21930
21935
  onChange,
21931
21936
  disabled
21932
21937
  }),
21933
- ungrouped.length > 0 && /* @__PURE__ */ jsx("div", {
21934
- className: "flex justify-end",
21935
- children: switchButton("Use a custom model…", "custom")
21936
- })
21938
+ ungrouped.length > 0 && flatSelect(ungrouped, grouped.length > 0 ? "— other models —" : "— select a model —")
21937
21939
  ]
21938
21940
  });
21939
21941
  }
@@ -24235,6 +24237,49 @@ function nextReconnectAction(attempt, random = Math.random) {
24235
24237
  };
24236
24238
  }
24237
24239
  //#endregion
24240
+ //#region src/composites/adaptive-downlink.ts
24241
+ /**
24242
+ * Burst-download the hub's `/adaptive-probe` blob and return Mbps.
24243
+ * Used as `hints.downlinkMbps` so adaptive selection is based on a measured
24244
+ * path, not viewport size or IP class. Failures return null (caller keeps
24245
+ * the default-low / ceiling path and may stay on the lowest rung).
24246
+ */
24247
+ var ADAPTIVE_PROBE_PATH = "/adaptive-probe";
24248
+ var ADAPTIVE_PROBE_TIMEOUT_MS = 2500;
24249
+ /** Map a measured downlink onto the adaptive ladder. Mid is a real rung. */
24250
+ function suggestedAdaptiveTier(mbps) {
24251
+ if (mbps >= 8) return "high";
24252
+ if (mbps >= 2.5) return "mid";
24253
+ return "low";
24254
+ }
24255
+ /** First connect never carries a cached probe — the broker starts lowest. */
24256
+ function stripDownlinkForColdStart(hints) {
24257
+ const { downlinkMbps: _ignored, ...rest } = hints;
24258
+ return rest;
24259
+ }
24260
+ /** After a probe, only mid/high justify a make-before-break climb. */
24261
+ function shouldUpgradeAfterProbe(mbps) {
24262
+ return suggestedAdaptiveTier(mbps) !== "low";
24263
+ }
24264
+ async function measureDownlinkMbps(origin, deps) {
24265
+ const base = origin.replace(/\/+$/, "");
24266
+ const ctrl = new AbortController();
24267
+ const timer = setTimeout(() => ctrl.abort(), ADAPTIVE_PROBE_TIMEOUT_MS);
24268
+ const started = deps.now();
24269
+ try {
24270
+ const res = await deps.fetchImpl(`${base}${ADAPTIVE_PROBE_PATH}`, { signal: ctrl.signal });
24271
+ if (!res.ok) return null;
24272
+ const buf = await res.arrayBuffer();
24273
+ const elapsedMs = Math.max(1, deps.now() - started);
24274
+ if (buf.byteLength < 1024) return null;
24275
+ return buf.byteLength * 8 / elapsedMs / 1e3;
24276
+ } catch {
24277
+ return null;
24278
+ } finally {
24279
+ clearTimeout(timer);
24280
+ }
24281
+ }
24282
+ //#endregion
24238
24283
  //#region src/composites/camera-stream-player.tsx
24239
24284
  /**
24240
24285
  * Silence (or restore) a live WebRTC stream FOR REAL.
@@ -24280,23 +24325,48 @@ function isCanvasEffectivelyBlack(ctx, w, h) {
24280
24325
  function computeClientHints(container) {
24281
24326
  const hints = {};
24282
24327
  if (typeof window !== "undefined") {
24328
+ const dpr = window.devicePixelRatio || 1;
24283
24329
  if (container) {
24284
24330
  const rect = container.getBoundingClientRect();
24285
24331
  if (rect.width > 0 && rect.height > 0) {
24286
- hints.viewportWidth = Math.round(rect.width);
24287
- hints.viewportHeight = Math.round(rect.height);
24332
+ hints.viewportWidth = Math.round(rect.width * dpr);
24333
+ hints.viewportHeight = Math.round(rect.height * dpr);
24288
24334
  }
24289
24335
  }
24290
24336
  if (hints.viewportWidth === void 0) {
24291
- hints.viewportWidth = window.innerWidth;
24292
- hints.viewportHeight = window.innerHeight;
24337
+ hints.viewportWidth = Math.round(window.innerWidth * dpr);
24338
+ hints.viewportHeight = Math.round(window.innerHeight * dpr);
24293
24339
  }
24294
- hints.devicePixelRatio = window.devicePixelRatio || 1;
24295
- const conn = navigator.connection;
24296
- if (conn?.downlink && conn.downlink > 0) hints.downlinkMbps = conn.downlink;
24340
+ hints.devicePixelRatio = dpr;
24297
24341
  }
24298
24342
  return hints;
24299
24343
  }
24344
+ var downlinkCache = null;
24345
+ var DOWNLINK_TTL_MS = 3e4;
24346
+ async function measuredDownlinkMbps() {
24347
+ if (typeof window === "undefined") return void 0;
24348
+ const origin = window.location.origin;
24349
+ if (downlinkCache && downlinkCache.origin === origin && Date.now() - downlinkCache.at < DOWNLINK_TTL_MS) return downlinkCache.mbps;
24350
+ const mbps = await measureDownlinkMbps(origin, {
24351
+ fetchImpl: (url, init) => fetch(url, init),
24352
+ now: () => Date.now()
24353
+ });
24354
+ if (mbps === null || !Number.isFinite(mbps)) return void 0;
24355
+ downlinkCache = {
24356
+ origin,
24357
+ mbps,
24358
+ at: Date.now()
24359
+ };
24360
+ return mbps;
24361
+ }
24362
+ function mergePlayerHints(autoHints, override, downlinkMbps, coldStart) {
24363
+ const merged = {
24364
+ ...autoHints,
24365
+ ...downlinkMbps !== void 0 ? { downlinkMbps } : {},
24366
+ ...override
24367
+ };
24368
+ return coldStart ? stripDownlinkForColdStart(merged) : merged;
24369
+ }
24300
24370
  var FIRST_FRAME_TIMEOUT_MS = 8e3;
24301
24371
  function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, muted: initialMuted = true, showControls = true, showStats = false, onPlaybackStats, onClientNetworkSample, onConnectTiming, className = "", onStateChange, onError, onReconnectAttempt, overlay, createSession, sendAnswer, handleOffer, getIceServers, addIceCandidate, getIceCandidates, closeSession, getSessionState, reoffer, posterUrl, hintsOverride, reconnectSignal, onControlChannel, onVideoElement }) {
24302
24372
  const videoRef = useRef(null);
@@ -24329,6 +24399,8 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
24329
24399
  /** Highest `pendingRenegotiation.epoch` already acted on — act at most once
24330
24400
  * per epoch so a poll that re-reports the same pending change is a no-op. */
24331
24401
  const lastEpochRef = useRef(0);
24402
+ /** True once this adaptive session already climbed after the cold-start probe. */
24403
+ const probeUpgradeRef = useRef(false);
24332
24404
  /** True while a background re-offer PeerConnection is being built — guards
24333
24405
  * against a second poll firing a parallel renegotiation. */
24334
24406
  const renegotiatingRef = useRef(false);
@@ -24442,7 +24514,7 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
24442
24514
  tick();
24443
24515
  }, SESSION_STATE_POLL_MS);
24444
24516
  }, [getSessionState, reoffer]);
24445
- const connectServerOffer = useCallback(async (seamless = false) => {
24517
+ const connectServerOffer = useCallback(async (seamless = false, withDownlink = seamless) => {
24446
24518
  if (!mountedRef.current || !createSession || !sendAnswer) return;
24447
24519
  const oldPc = seamless ? pcRef.current : null;
24448
24520
  const oldSessions = seamless ? new Set(sessionIdsRef.current) : null;
@@ -24452,11 +24524,16 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
24452
24524
  const abort = new AbortController();
24453
24525
  connectAbortRef.current = abort;
24454
24526
  try {
24455
- const { sessionId, sdpOffer, iceServers } = await createSession({
24456
- ...computeClientHints(containerRef.current),
24457
- ...hintsOverride
24458
- });
24527
+ const probePromise = !withDownlink ? measuredDownlinkMbps() : void 0;
24528
+ const { sessionId, sdpOffer, iceServers } = await createSession(mergePlayerHints(computeClientHints(containerRef.current), hintsOverride, withDownlink ? await measuredDownlinkMbps() : void 0, !withDownlink));
24459
24529
  sessionIdsRef.current.add(sessionId);
24530
+ if (probePromise !== void 0) probePromise.then((mbps) => {
24531
+ if (mbps === void 0 || !shouldUpgradeAfterProbe(mbps)) return;
24532
+ if (!mountedRef.current || abort.signal.aborted) return;
24533
+ if (probeUpgradeRef.current) return;
24534
+ probeUpgradeRef.current = true;
24535
+ connectServerOffer(true, true);
24536
+ });
24460
24537
  if (!mountedRef.current || abort.signal.aborted) {
24461
24538
  closeSession?.(sessionId).catch(() => {});
24462
24539
  sessionIdsRef.current.delete(sessionId);
@@ -24626,7 +24703,7 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
24626
24703
  updateState,
24627
24704
  onError
24628
24705
  ]);
24629
- const connectClientOffer = useCallback(async (seamless = false) => {
24706
+ const connectClientOffer = useCallback(async (seamless = false, withDownlink = seamless) => {
24630
24707
  if (!mountedRef.current || !handleOffer) return;
24631
24708
  const oldPc = seamless ? pcRef.current : null;
24632
24709
  const oldSessions = seamless ? new Set(sessionIdsRef.current) : null;
@@ -24639,6 +24716,7 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
24639
24716
  const ms = () => Math.round(performance.now() - t0);
24640
24717
  const timing = {};
24641
24718
  try {
24719
+ const probePromise = !withDownlink ? measuredDownlinkMbps() : void 0;
24642
24720
  const iceServers = await getIceServers?.();
24643
24721
  timing.iceServersMs = ms();
24644
24722
  if (!mountedRef.current || abort.signal.aborted) return;
@@ -24746,15 +24824,20 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
24746
24824
  await pc.setLocalDescription(offer);
24747
24825
  timing.localSetMs = ms();
24748
24826
  if (!mountedRef.current || abort.signal.aborted) return;
24749
- const clientOfferHints = {
24750
- ...computeClientHints(containerRef.current),
24751
- ...hintsOverride
24752
- };
24827
+ const downlinkMbps = withDownlink ? await measuredDownlinkMbps() : void 0;
24828
+ const clientOfferHints = mergePlayerHints(computeClientHints(containerRef.current), hintsOverride, downlinkMbps, !withDownlink);
24753
24829
  const signalingStart = ms();
24754
24830
  const { sessionId: sid, sdpAnswer } = await handleOffer(pc.localDescription?.sdp ?? offer.sdp ?? "", void 0, clientOfferHints);
24755
24831
  timing.signalingRttMs = ms() - signalingStart;
24756
24832
  sessionId = sid;
24757
24833
  sessionIdsRef.current.add(sid);
24834
+ if (probePromise !== void 0) probePromise.then((mbps) => {
24835
+ if (mbps === void 0 || !shouldUpgradeAfterProbe(mbps)) return;
24836
+ if (!mountedRef.current || abort.signal.aborted) return;
24837
+ if (probeUpgradeRef.current) return;
24838
+ probeUpgradeRef.current = true;
24839
+ connectClientOffer(true, true);
24840
+ });
24758
24841
  activeSessionIdRef.current = sid;
24759
24842
  if (!mountedRef.current || abort.signal.aborted) {
24760
24843
  closeSession?.(sid).catch(() => {});
@@ -24920,8 +25003,10 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
24920
25003
  pc.close();
24921
25004
  return;
24922
25005
  }
25006
+ const downlinkMbps = await measuredDownlinkMbps();
24923
25007
  const reofferHints = {
24924
25008
  ...computeClientHints(containerRef.current),
25009
+ ...downlinkMbps !== void 0 ? { downlinkMbps } : {},
24925
25010
  ...hintsOverride
24926
25011
  };
24927
25012
  const { sessionId: sid, sdpAnswer } = await reofferFn(sessionId, pc.localDescription?.sdp ?? offer.sdp ?? "", target, reofferHints);
@@ -25063,6 +25148,7 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
25063
25148
  if (!serverChanged && !keyChanged) return;
25064
25149
  if (!mountedRef.current) return;
25065
25150
  reconnectAttemptsRef.current = 0;
25151
+ probeUpgradeRef.current = false;
25066
25152
  if (serverChanged) {
25067
25153
  cleanup();
25068
25154
  connect();
@@ -48668,4 +48754,4 @@ var SceneMonitorEditor = lazy(() => import("./SceneMonitorEditor-d_A4kO-M.js").t
48668
48754
  /** Lazy-wrapped `PrivacyMaskSettings` — code-split off the main bundle. */
48669
48755
  var PrivacyMaskSettings = lazy(() => import("./PrivacyMaskSettings-DNSLc6ww.js").then((m) => ({ default: m.PrivacyMaskSettings })));
48670
48756
  //#endregion
48671
- export { AddonGlobalSettingsForm, AgentStepEditor, AlarmHeroCard, AlarmInlineControl as AlarmPanelInlineControl, AppShell, ArcKnob, AudioClassificationList, AudioLevelWaveform, AudioWaveform, AutomationHeroCard, AutomationInlineControl, AutotrackSection, BTN_COMPACT, BTN_COMPACT_DANGER, BTN_COMPACT_PRIMARY, BTN_COMPACT_WARNING, Badge, BatteryBadge, BottomSheet, Breadcrumb, BrightnessPanel, Button, ButtonControl, ButtonHeroCard, CARD_MODE_MIN_COLUMNS, CENTER, CHIP_ACTIVE, CHIP_BASE, CHIP_INACTIVE, CLASS_COLORS, COLUMN_BREAKPOINT_CLASS, COLUMN_PRIORITY, COMMIT_DEDUPE_TOLERANCE_MS, COMMIT_DEDUPE_WINDOW_MS, CONTROL_CAP_NAMES, CONTROL_FILLS, CameraStreamPlayer, Card, Checkbox, ChildSectionAccordion, ClimatePanel, CodeBlock, CollapsibleCard, ConfigFormBuilder, FormField as ConfigFormField, ConfigSchemaField, ConfirmActionButton, ConfirmDialogProvider, ConsumablesPanel, ContainerChildrenProvider, ContainerPrimaryHero, ControlColumn, ControlHeroCard, ControlInlineControl, ControlPanel, CopyButton, CoverHeroCard, CoverInlineControl, CoverPanel, CustomFieldRenderersProvider, DEFAULT_COLOR, DEVICE_COLUMNS, DEVICE_LIST_PAGE_SIZE_KEY, DEVICE_LIST_PAGE_SIZE_OPTIONS, DEVICE_ROLE_META, DEVICE_TYPE_CONTROL, DEVICE_TYPE_META, DISPLAY_ICON_REGISTRY, DataTable, DetectionCanvas, DetectionOverlay, DetectionResultTree, DevShell, DeviceActivityPanel, DeviceBatchToolbar, DeviceCard, DeviceContextProvider, DeviceExportPanel, DeviceGrid, DeviceItem, DeviceList, DeviceMultiSelectField, DeviceSelectField, DeviceSelectorPicker, DeviceStepMatrix, Dialog, DialogBody, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, DiscoveryPanel, DoorbellRecentPanel, Dropdown, DropdownContent, DropdownItem, DropdownTrigger, DummyHeroCard, DummyInline, EVENT_KIND_ICONS, EmptyState, ErrorBox, EventKindGlyph, EventStream, FILL, FanHeroCard, FanInlineControl, FanPanel, FilterBar, FloatingEventStream, FloatingLogStream, FloatingPanel, FormField$1 as FormField, GRID_GAP, GRID_PAIRED, GRID_QUICK_STATS, GripTrack, GroupedModelSelector, HOST_WIDGETS, HlsVideo, HoverZoomImage, HumidifierHeroCard, HumidifierInlineControl, INPUT_COMPACT, IconAction, IconButton, ImageHeroCard, ImageInlineControl, ImageSelector, InferenceConfigSelector, Input, KebabMenu, KeyValueList, LIST_ROW, Label, LawnMowerHeroCard, LawnMowerInlineControl, LightHeroCard, LightInlineControl, LockHeroCard, LockInlineControl, LockPanel, LogStream, LoginForm, MODE_COLOR, MaskShapeCanvas, MediaPlayerHeroCard, MediaPlayerInlineControl, MediaPlayerPanel, MobileDrawer, ModelPicker, MotionZonesSettings, NodeMultiSelectField, NodePicker, NodeSelectField, OfflineBadge, PHASE_CONFIG, PRIORITY, PTZOverlay, PageHeader, PhaseIcon, PipelineBuilder, PipelineRuntimeSelector, PipelineStep, PipelineTreeMatrix, PlayerOverlaysProvider, Popover, PopoverContent, PopoverRowAction, PopoverTrigger, PrimaryChildPicker, PrivacyMaskSettings, ProviderBadge, PtzPanel, QrCode, RECONNECT_POLICY, RECORDED_PLAYBACK_MODES, RIGHT, ROI_AREA_WARN_FRACTION, ROLE_DESCRIPTOR, RadialGauge, RecordedPlaybackProvider, RecordingPanel, ResponseLog, SCENE_CAPTURE_VARIANTS, SECTION_BODY, SECTION_CARD, SECTION_HEADER, SETTING_ROW, SETTING_ROW_LABEL, SETTING_ROW_STACK_BREAKPOINT, SETTING_ROW_VALUE, SETTING_ROW_VALUE_TEXT, SPLIT_PANEL_OUTER, SPLIT_PANEL_SIDE, STACK_GAP, STATE_COLOR, SceneMonitorEditor, ScopePicker, ScriptHeroCard, ScriptInlineControl, ScrollArea, Select, SemanticBadge, SensorHeroCard, SensorInlineControl, SensorValueAtom, Separator, SettingRow, Sidebar, SidebarItem, Skeleton, SlideOverPanel, SlideToggle, SnapshotButton, StatCard, StateValuesStream, StatusBadge, StepTimings, StepTreeMaster, Stepper, StreamBrokerSelector, StreamPanel, Switch, SwitchHeroCard, SwitchInlineControl, SwitchPanel, SystemProvider, TABLE_SCROLL_MAX_H, TEXT_FIELD_LABEL, TEXT_HINT, TEXT_METRIC, TEXT_SECTION_LABEL, TEXT_VALUE, TIMEZONES, Tabs, TabsContent, TabsList, TabsTrigger, TapToggle, ThemeProvider, ThermostatHeroCard, ThermostatInlineControl, TimezoneSelector, Tooltip, TooltipContent, TooltipTrigger, VacuumHeroCard, VacuumInlineControl, ValueReadout, ValveHeroCard, ValveInlineControl, VersionBadge, VodPlaybackProvider, WaterHeaterHeroCard, WaterHeaterInlineControl, WeatherHeroCard, WeatherInlineControl, WidgetMetricCard, WidgetPanel, WidgetRegistryProvider, WidgetSlot, ZoneEditingProvider, ImageOff as a, agentColumnKey, allDeviceTypeFilterOptions, badgeFor, buildStepTreeFromSchema, createLucideIcon as c, childEntityId, childListName, cn, columnsForContext, containerChildToRef, countableDevices, coverHighlight, coverageLine, createSharedContext, createTheme, cursorFractionFor, darkColors, defaultTheme, deriveDeviceKind, describeDeviceSelector, deviceMatchesFilter, deviceOptionLabel, deviceRoleMeta, deviceRoleMetaOf, deviceTypeLabel, deviceTypeMeta, deviceTypeMetaOf, devicesToOptions, ensureMfHostInit, eventKindLabel, filterDeviceOptions, findTimezone, formatControlDateTime, formatLastSeen, formatNumeric, fuzzyMatch, getClassColor, getPhaseVisual, groupAgentColumns, groupChildrenByLayout, hardwareLabel, humanDuration, humidifierTint, Mic as i, initialScrubState, isAbsentProvider, isFieldVisible, lawnMowerActivityMeta, lightColors, loadRemoteBundle, makeScrubBridge, metadataEntries, metadataString, mirror, mountAddonPage, Square as n, nextReconnectAction, nextSort, normalizeForSearch, EyeOff as o, overrideEntityIdFromLink, parseRecordedServerMessage, providerIcons, RotateCcw as r, resolveContainerPrimary, resolveControlAlign, resolveDeviceControl, resolveDisplayIcon, resolveEffectiveDefaultModel, resolveEffectiveStepModel, resolveEventKindIcon, resolvePrimaryChild, resolveSensorDisplay, resolveStepDefaultModel, resolveTableLayout, roiTooLarge, Camera as s, scrubReducer, selectedDeviceOptions, serializeRecordedCommand, shouldCommit, shouldEmit, shouldUseSingleNode, sortRows, statusIcons, statusLine, stepHasModelForFormat, stepModelOptions, stripParentNamePrefix, Trash2 as t, tabForSelector, tankAlert, themeToCss, trpc, useAccessoriesGetStatus, useAccessoriesSetChildHidden, useAddonPagesListPages, useAddonSettingsGetDeviceSettings, useAddonSettingsGetGlobalSettings, useAddonSettingsUpdateDeviceSettings, useAddonSettingsUpdateGlobalSettings, useAddonWidgetsListWidgets, useAddonsApplyAutoUpdateToAll, useAddonsCancelJob, useAddonsCustom, useAddonsForceRefresh, useAddonsGetAddonAutoUpdate, useAddonsGetAutoUpdateSettings, useAddonsGetJob, useAddonsGetLastRestart, useAddonsGetLogs, useAddonsGetVersions, useAddonsInstallFromWorkspace, useAddonsInstallPackage, useAddonsIsWorkspaceAvailable, useAddonsList, useAddonsListCapabilityProviders, useAddonsListFrameworkPackages, useAddonsListJobs, useAddonsListPackages, useAddonsListUpdates, useAddonsListWorkspacePackages, useAddonsOnAddonLogs, useAddonsReloadPackages, useAddonsRestartAddon, useAddonsRestartServer, useAddonsRetryLoad, useAddonsRollbackPackage, useAddonsSearchAvailable, useAddonsSetAddonAutoUpdate, useAddonsSetAutoUpdateSettings, useAddonsSetCapabilityProviderEnabled, useAddonsStartJob, useAddonsUninstallPackage, useAddonsUpdatePackage, useAirQualitySensorGetStatus, useAlarmPanelArm, useAlarmPanelDisarm, useAlarmPanelGetStatus, useAlarmPanelTrigger, useAlertsDismiss, useAlertsEmit, useAlertsGetUnreadCount, useAlertsList, useAlertsMarkAllRead, useAlertsMarkRead, useAlertsUpdate, useAllWidgets, useAmbientLightSensorGetStatus, useAudioAnalysisApplyDeviceSettingsPatch, useAudioAnalysisGetDeviceLiveContribution, useAudioAnalysisGetDeviceSettingsContribution, useAudioAnalysisResolveDeviceSettings, useAudioAnalyzerAnalyseChunk, useAudioAnalyzerClassify, useAudioAnalyzerDispose, useAudioAnalyzerIsReady, useAudioAnalyzerReprobeAudioEngine, useAudioCodecCanHandle, useAudioCodecCloseSession, useAudioCodecCreateDecodeSession, useAudioCodecCreateEncodeSession, useAudioCodecFlushEncode, useAudioCodecListActiveSessions, useAudioCodecListSupportedCodecs, useAudioCodecPullEncoded, useAudioCodecPullPcm, useAudioCodecPushEncodedFrame, useAudioCodecPushPcm, useAudioMetricsGetCurrentSnapshot, useAudioMetricsGetHistory, useAutomationControlDisable, useAutomationControlEnable, useAutomationControlGetStatus, useAutomationControlTrigger, useBackupDelete, useBackupDeleteSchedule, useBackupGetEntries, useBackupList, useBackupListArchives, useBackupListDestinations, useBackupListLocations, useBackupListSchedules, useBackupPreviewSchedule, useBackupRestore, useBackupTrigger, useBackupUpsertDestinationPolicy, useBackupUpsertSchedule, useBatteryGetStatus, useBatteryWakeForStream, useBinaryGetStatus, useBrightnessGetStatus, useBrightnessSetBrightness, useBrokerAdd, useBrokerGet, useBrokerGetBrokerConfig, useBrokerGetSettings, useBrokerGetSettingsSchema, useBrokerGetState, useBrokerGetStatus, useBrokerList, useBrokerListProviders, useBrokerPublish, useBrokerRemove, useBrokerSetSettings, useBrokerSubscribe, useBrokerTestConnection, useBrokerTestSettings, useBrokerUnsubscribe, useButtonPress, useCameraCredentialsGetCredentials, useCameraCredentialsGetStatus, useCameraPipelineConfigApplyDeviceSettingsPatch, useCameraPipelineConfigGetDeviceLiveContribution, useCameraPipelineConfigGetDeviceSettingsContribution, useCameraStreamsGetBrokerStreams, useCameraStreamsGetCameraStreams, useCameraStreamsGetProfileRtspEntries, useCameraStreamsGetRtspEntries, useCameraStreamsPickStream, useCarbonMonoxideGetStatus, useClimateControlGetStatus, useClimateControlSetFanMode, useClimateControlSetMode, useClimateControlSetPreset, useClimateControlSetSwingHorizontal, useClimateControlSetSwingVertical, useClimateControlSetTarget, useClimateControlSetTargetHumidity, useClimateControlSetTargetRange, useClusterNodes, useColorGetStatus, useColorSetColor, useConfirm, useConnectionTestDescribeTest, useConnectionTestTestSettings, useConnectivityGetStatus, useConsumablesGetStatus, useConsumablesReset, useContactGetStatus, useContainerChildren, useControlGetStatus, useControlSetValue, useCoreBlocksCompile, useCoreBlocksCreate, useCoreBlocksDelete, useCoreBlocksGet, useCoreBlocksGetTypeDefs, useCoreBlocksList, useCoreBlocksRestart, useCoreBlocksSetEnabled, useCoreBlocksUpdate, useCoverClose, useCoverGetStatus, useCoverOpen, useCoverSetPosition, useCoverSetTiltPosition, useCoverStop, useCustomFieldRenderer, useDayNightGetOptions, useDayNightGetStatus, useDayNightSetSettings, useDebouncedString, useDecoderCreateSession, useDecoderDestroySession, useDecoderGetFrame, useDecoderGetInfo, useDecoderGetShmStats, useDecoderGetStats, useDecoderListActiveSessions, useDecoderOpenStream, useDecoderPullFrames, useDecoderPullHandles, useDecoderPushPacket, useDecoderReprobeHwaccel, useDecoderSupportsCodec, useDecoderUpdateConfig, useDetectionPipelineApplyDeviceSettingsPatch, useDetectionPipelineGetDeviceLiveContribution, useDetectionPipelineGetDeviceSettingsContribution, useDevShell, useDevice, useDeviceAdoptionAdopt, useDeviceAdoptionGetCandidate, useDeviceAdoptionGetStatus, useDeviceAdoptionListCandidateFilters, useDeviceAdoptionListCandidates, useDeviceAdoptionRefresh, useDeviceAdoptionRelease, useDeviceAdoptionResync, useDeviceAutotrack, useDeviceBattery, useDeviceCapSlice, useDeviceCapability, useDeviceDetections, useDeviceDiscoveryAdoptDevice, useDeviceDiscoveryGetStatus, useDeviceDiscoveryListDiscovered, useDeviceDiscoveryRefreshDiscovery, useDeviceDiscoveryReleaseDevice, useDeviceExportApplyDeviceSettingsPatch, useDeviceExportExposeDevice, useDeviceExportGetDeviceLiveContribution, useDeviceExportGetDeviceSettingsContribution, useDeviceExportGetStatus, useDeviceExportListExposedDevices, useDeviceExportListSupportedDeviceKinds, useDeviceExportUnexposeDevice, useDeviceId, useDeviceListPageSize, useDeviceManagerAddLocation, useDeviceManagerAdoptDevice, useDeviceManagerAdoptionAdopt, useDeviceManagerAdoptionCancelJob, useDeviceManagerAdoptionListCandidateFilters, useDeviceManagerAdoptionListCandidates, useDeviceManagerAdoptionListJobs, useDeviceManagerAdoptionRefresh, useDeviceManagerAdoptionRelease, useDeviceManagerAdoptionResync, useDeviceManagerAdoptionStartJob, useDeviceManagerAllocateDeviceId, useDeviceManagerApplyDeviceSettingsPatch, useDeviceManagerApplyInitialMeta, useDeviceManagerCreateDevice, useDeviceManagerDisable, useDeviceManagerDiscoverAllProviders, useDeviceManagerDiscoverDevices, useDeviceManagerDiscoverProvider, useDeviceManagerDiscoveryProviders, useDeviceManagerEnable, useDeviceManagerGetAllBindings, useDeviceManagerGetBindings, useDeviceManagerGetChildren, useDeviceManagerGetConfigSchema, useDeviceManagerGetCreationSchema, useDeviceManagerGetDevice, useDeviceManagerGetDeviceAggregate, useDeviceManagerGetDeviceLiveContribution, useDeviceManagerGetDeviceLiveInfoAggregate, useDeviceManagerGetDeviceSettingsAggregate, useDeviceManagerGetDeviceSettingsContribution, useDeviceManagerGetDeviceStatusAggregate, useDeviceManagerGetDeviceStatusAggregateBatch, useDeviceManagerGetLinkedDevices, useDeviceManagerGetRoleDisplayDefaults, useDeviceManagerGetSettingsSchema, useDeviceManagerGetStreamProfileMap, useDeviceManagerGetStreamSources, useDeviceManagerGetWireableFields, useDeviceManagerListAll, useDeviceManagerListBindableCapsForDeviceType, useDeviceManagerListLocations, useDeviceManagerListPersistedByAddon, useDeviceManagerListWrappersForCap, useDeviceManagerLoadConfig, useDeviceManagerLoadMeta, useDeviceManagerLoadRuntimeState, useDeviceManagerPersistConfig, useDeviceManagerProbeStreams, useDeviceManagerProviderCreationType, useDeviceManagerProviderDiscoveryParamsSchema, useDeviceManagerRegisterDevice, useDeviceManagerRemove, useDeviceManagerRemoveByIntegration, useDeviceManagerRemoveDevice, useDeviceManagerRemoveLocation, useDeviceManagerRunDeviceAction, useDeviceManagerSetChildLayout, useDeviceManagerSetDisabled, useDeviceManagerSetDisplay, useDeviceManagerSetIntegrationId, useDeviceManagerSetLinkDeviceId, useDeviceManagerSetLocation, useDeviceManagerSetMetadata, useDeviceManagerSetName, useDeviceManagerSetPrimaryChildEntityId, useDeviceManagerSetRole, useDeviceManagerSetRoleDisplayDefaults, useDeviceManagerSetStreamProfileMap, useDeviceManagerSetType, useDeviceManagerSetWrapperActive, useDeviceManagerTestCreationField, useDeviceManagerTestField, useDeviceManagerUpdateConfig, useDeviceManagerUpdateDeviceField, useDeviceManagerUpdateDeviceFieldsBatch, useDeviceOpsGetConfigEntries, useDeviceOpsGetRawState, useDeviceOpsGetSettingsSchema, useDeviceOpsGetStreamSources, useDeviceOpsRemoveDevice, useDeviceOpsRunAction, useDeviceOpsSetConfig, useDeviceProviderAdoptDiscoveredDevice, useDeviceProviderCreateDevice, useDeviceProviderDiscoverDevices, useDeviceProviderGetChildCreationSchema, useDeviceProviderGetDevices, useDeviceProviderGetDiscoveryParamsSchema, useDeviceProviderGetManualCreationType, useDeviceProviderGetStatus, useDeviceProviderStart, useDeviceProviderStop, useDeviceProviderSupportsDiscovery, useDeviceProviderSupportsManualCreation, useDeviceProviderTestCreationField, useDeviceProxy, useDeviceSnapshot, useDeviceSnapshotImage, useDeviceState, useDeviceStateGetAllSnapshots, useDeviceStateGetCapSlice, useDeviceStateGetSnapshot, useDeviceStateSetCapSlice, useDeviceStateSlice, useDeviceStatusGetStatus, useDeviceWebrtc, useDevices, useDoorbellApplyDeviceSettingsPatch, useDoorbellEvents, useDoorbellGetDeviceLiveContribution, useDoorbellGetDeviceSettingsContribution, useDoorbellGetStatus, useEnumSensorGetStatus, useEventEmitterGetStatus, useEventInvalidation, useEventStreamLatest, useEventStreamMap, useEventsGetEventClipUrl, useEventsGetEventThumbnail, useEventsGetEvents, useFaceGalleryAssignFace, useFaceGalleryAssignFaces, useFaceGalleryCreateIdentity, useFaceGalleryDeleteFace, useFaceGalleryDeleteIdentity, useFaceGalleryGetFaceByTrack, useFaceGalleryGetFaceMedia, useFaceGalleryListIdentities, useFaceGalleryListIdentitySamples, useFaceGalleryListRecentFaces, useFaceGalleryRemoveSample, useFaceGalleryRenameIdentity, useFaceGallerySuggestFaceClusters, useFaceGalleryUnassignFace, useFaceGalleryUnassignFaces, useFanControlGetStatus, useFanControlSetDirection, useFanControlSetOscillating, useFanControlSetPercentage, useFanControlSetPreset, useFeatureProbeGetStatus, useFloodGetStatus, useGasGetStatus, useHumidifierGetStatus, useHumidifierSetMode, useHumidifierSetOn, useHumidifierSetTargetHumidity, useHumiditySensorGetStatus, useImageGetStatus, useImageSettingsGetOptions, useImageSettingsGetStatus, useImageSettingsSetSettings, useIntegrationsCreate, useIntegrationsDelete, useIntegrationsGet, useIntegrationsGetAvailableTypes, useIntegrationsGetByAddonId, useIntegrationsGetSettings, useIntegrationsList, useIntegrationsSetSettings, useIntegrationsTestConnection, useIntegrationsUpdate, useIntercomEndTalkSession, useIntercomGetStatus, useIntercomHandleAnswer, useIntercomPushTalkAudio, useIntercomStartSession, useIntercomStartTalkSession, useIntercomStopSession, useIsMidWidth, useIsMobile, useLawnMowerControlDock, useLawnMowerControlGetStatus, useLawnMowerControlPause, useLawnMowerControlStartMowing, useLiveBuffer, useLiveEvent, useLlmCancel, useLlmDeleteModel, useLlmDeleteProfile, useLlmGenerate, useLlmGenerateVision, useLlmGetDefaults, useLlmGetRuntimeStatus, useLlmGetUsage, useLlmInstallModel, useLlmListModelCatalog, useLlmListModels, useLlmListNodeModels, useLlmListProfileKinds, useLlmListProfiles, useLlmListRuntimeNodes, useLlmResolveModelRef, useLlmSetDefault, useLlmStartRuntime, useLlmStopRuntime, useLlmTestProfile, useLlmUpsertProfile, useLocalNetworkDownloadCa, useLocalNetworkGetAllowedAddresses, useLocalNetworkGetConnectionEndpoints, useLocalNetworkGetNotificationEndpoint, useLocalNetworkGetPreferred, useLocalNetworkGetTlsStatus, useLocalNetworkList, useLocalNetworkRegenerateCertificate, useLocalNetworkResetAllowlistToBestMatch, useLocalNetworkRevertToGeneratedCertificate, useLocalNetworkSetAllowedAddresses, useLocalNetworkSetNotificationEndpoint, useLocalNetworkUploadCertificate, useLockControlGetStatus, useLockControlLock, useLockControlOpen, useLockControlUnlock, useMediaPlayerGetStatus, useMediaPlayerNext, useMediaPlayerPause, useMediaPlayerPlay, useMediaPlayerPlayMedia, useMediaPlayerPrevious, useMediaPlayerSeek, useMediaPlayerSelectSource, useMediaPlayerSetMute, useMediaPlayerSetRepeat, useMediaPlayerSetShuffle, useMediaPlayerSetVolume, useMediaPlayerStop, useMeshNetworkGetStatus, useMeshNetworkJoin, useMeshNetworkLeave, useMeshNetworkListPeers, useMeshNetworkLogout, useMeshNetworkStartLogin, useMeshNetworkTestConnection, useMetricsProviderCollectSnapshot, useMetricsProviderDumpHeapSnapshot, useMetricsProviderGetAddonStats, useMetricsProviderGetCached, useMetricsProviderGetCpuTemperature, useMetricsProviderGetCurrent, useMetricsProviderGetDiskSpace, useMetricsProviderGetGpuInfo, useMetricsProviderGetProcessStats, useMetricsProviderKillProcess, useMetricsProviderListAddonInstances, useMetricsProviderListNodeProcesses, useMotionDetectionAnalyze, useMotionDetectionApplyDeviceSettingsPatch, useMotionDetectionGetDeviceLiveContribution, useMotionDetectionGetDeviceSettingsContribution, useMotionDetectionRemoveCamera, useMotionDetectionReset, useMotionGetStatus, useMotionIsDetected, useMotionTriggerGetStatus, useMotionTriggerSetMotionTrigger, useMotionZonesGetOptions, useMotionZonesGetStatus, useMotionZonesSetZone, useMqttBrokerAddBroker, useMqttBrokerGetBrokerConfig, useMqttBrokerGetStatus, useMqttBrokerListBrokers, useMqttBrokerRemoveBroker, useMqttBrokerStartEmbeddedBroker, useMqttBrokerStopEmbeddedBroker, useMqttBrokerTestConnection, useNativeObjectDetectionGetStatus, useNativeObjectDetectionSetEnabled, useNetworkAccessGetEndpoint, useNetworkAccessGetStatus, useNetworkAccessListEndpoints, useNetworkAccessStart, useNetworkAccessStop, useNetworkQualityGetAllStats, useNetworkQualityGetDeviceStats, useNetworkQualityReportClientStats, useNodesClusterAddonStatus, useNodesDeployAddon, useNodesExecuteQuery, useNodesGetCapUsageGraph, useNodesGetNodeAddons, useNodesRenameNode, useNodesRestartAddon, useNodesRestartNode, useNodesRestartProcess, useNodesSetProcessLogLevel, useNodesShutdownNode, useNodesTopology, useNodesUndeployAddon, useNotificationOutputDeleteTarget, useNotificationOutputDiscoverTargets, useNotificationOutputListTargetKinds, useNotificationOutputListTargets, useNotificationOutputSend, useNotificationOutputSetTargetEnabled, useNotificationOutputTestTarget, useNotificationOutputUpsertTarget, useNotificationRulesCancelSnooze, useNotificationRulesCreateRule, useNotificationRulesCreateSnooze, useNotificationRulesDeleteRule, useNotificationRulesGetAlarmConfig, useNotificationRulesGetConditionCatalog, useNotificationRulesGetHistory, useNotificationRulesGetRule, useNotificationRulesListDeviceMutes, useNotificationRulesListRules, useNotificationRulesListSnoozes, useNotificationRulesSetAlarmConfig, useNotificationRulesSetDeviceMuted, useNotificationRulesSetRuleEnabled, useNotificationRulesTestRule, useNotificationRulesUpdateRule, useNotifierCancel, useNotifierGetStatus, useNotifierSend, useNumericSensorGetStatus, useOptimisticSlice, useOptionalSystem, useOptionalWidgetRegistry, useOsdGetStatus, useOsdManagerClearSlotBinding, useOsdManagerCopyDeviceConfiguration, useOsdManagerGetConditionSupport, useOsdManagerGetDeviceOsd, useOsdManagerGetSourceCatalog, useOsdManagerPreviewSlot, useOsdManagerRenderDevice, useOsdManagerSetSlotBinding, useOsdSetOverlay, usePTZ, usePetFeederCallPet, usePetFeederCancelFeed, usePetFeederFeed, usePetFeederGetStatus, usePetFeederMarkFoodReplenished, usePetFeederPlaySound, usePetFeederResetDesiccant, usePetFeederSetChildLock, usePetFeederSetFeedSound, usePetFeederSetIndicatorLight, usePetFeederSetVolume, usePipelineAnalyticsApplyDeviceSettingsPatch, usePipelineAnalyticsCancelStorageMigrationMove, usePipelineAnalyticsClearTracks, usePipelineAnalyticsCompleteRetrainTrack, usePipelineAnalyticsDeleteDeviceEvents, usePipelineAnalyticsDeleteTracks, usePipelineAnalyticsDeselectRetrainFrame, usePipelineAnalyticsGetActiveTracks, usePipelineAnalyticsGetAudioEvents, usePipelineAnalyticsGetDeviceLiveContribution, usePipelineAnalyticsGetDeviceSettingsContribution, usePipelineAnalyticsGetEventDensity, usePipelineAnalyticsGetEventMedia, usePipelineAnalyticsGetEventStoreFootprint, usePipelineAnalyticsGetKeyEvents, usePipelineAnalyticsGetMotionEvents, usePipelineAnalyticsGetObjectEmbeddingRebuildStatus, usePipelineAnalyticsGetObjectEvents, usePipelineAnalyticsGetRetrainExportUrl, usePipelineAnalyticsGetRetrainFrameImage, usePipelineAnalyticsGetSensorEvents, usePipelineAnalyticsGetStorageMigrationMoveStatus, usePipelineAnalyticsGetTrack, usePipelineAnalyticsGetTrackMedia, usePipelineAnalyticsGetTrainingExportSummary, usePipelineAnalyticsGetTrainingExportUrl, usePipelineAnalyticsListEventKinds, usePipelineAnalyticsListEventKindsBatch, usePipelineAnalyticsListOpsLog, usePipelineAnalyticsListRecentTracks, usePipelineAnalyticsListRetrainAnnotations, usePipelineAnalyticsListRetrainFrames, usePipelineAnalyticsListRetrainStaging, usePipelineAnalyticsListTrackMedia, usePipelineAnalyticsListTracks, usePipelineAnalyticsPauseForStorageMigration, usePipelineAnalyticsProposeRetrainAnnotations, usePipelineAnalyticsPruneEvents, usePipelineAnalyticsPruneEventsBefore, usePipelineAnalyticsPruneTracksBefore, usePipelineAnalyticsRebuildObjectEmbeddings, usePipelineAnalyticsReconcileFromDisk, usePipelineAnalyticsRefreshStorageLocationsForMigration, usePipelineAnalyticsRestageRetrainTrack, usePipelineAnalyticsResumeForStorageMigration, usePipelineAnalyticsSaveRetrainAnnotations, usePipelineAnalyticsSearchObjectEvents, usePipelineAnalyticsSelectRetrainFrames, usePipelineAnalyticsSetTrackFlags, usePipelineAnalyticsStartStorageMigrationMove, usePipelineAnalyticsWipeAllAnalytics, usePipelineAnalyticsWipeObjectEmbeddings, usePipelineExecutorCacheFrameInPool, usePipelineExecutorClearDeviceOverrides, usePipelineExecutorDeleteModel, usePipelineExecutorDeleteTemplate, usePipelineExecutorDownloadModel, usePipelineExecutorGetAddonModels, usePipelineExecutorGetAudioCapabilities, usePipelineExecutorGetAvailableEngines, usePipelineExecutorGetCapabilities, usePipelineExecutorGetDefaultSteps, usePipelineExecutorGetDetectionConfigSchema, usePipelineExecutorGetEffectiveTuning, usePipelineExecutorGetEngineProvisioning, usePipelineExecutorGetGlobalPipelineConfig, usePipelineExecutorGetGlobalSteps, usePipelineExecutorGetOrchestratorConfigSchema, usePipelineExecutorGetReferenceAudio, usePipelineExecutorGetReferenceAudioFiles, usePipelineExecutorGetReferenceImage, usePipelineExecutorGetSchema, usePipelineExecutorGetSelectedEngine, usePipelineExecutorGetVideoPipelineSteps, usePipelineExecutorInferCached, usePipelineExecutorKillEngine, usePipelineExecutorListLoadedEngines, usePipelineExecutorListReferenceImages, usePipelineExecutorListTemplates, usePipelineExecutorRunAudioTest, usePipelineExecutorRunPipeline, usePipelineExecutorRunPipelineBatch, usePipelineExecutorSaveTemplate, usePipelineExecutorSetVideoPipelineSteps, usePipelineExecutorSpinEngine, usePipelineExecutorUncacheFrame, usePipelineExecutorUpdateTemplate, usePipelineExecutorValidatePipeline, usePipelineOrchestratorApplyDeviceSettingsPatch, usePipelineOrchestratorAssignAudio, usePipelineOrchestratorAssignPipeline, usePipelineOrchestratorDeleteTemplate, usePipelineOrchestratorGetAgentLoad, usePipelineOrchestratorGetAgentSettings, usePipelineOrchestratorGetAudioAssignment, usePipelineOrchestratorGetAudioAssignments, usePipelineOrchestratorGetAudioNodeLoad, usePipelineOrchestratorGetCameraMetrics, usePipelineOrchestratorGetCameraSettings, usePipelineOrchestratorGetCameraStatus, usePipelineOrchestratorGetCameraStatuses, usePipelineOrchestratorGetCameraStepOverrides, usePipelineOrchestratorGetCameraSwitches, usePipelineOrchestratorGetCapabilityBindings, usePipelineOrchestratorGetDeviceLiveContribution, usePipelineOrchestratorGetDeviceSettingsContribution, usePipelineOrchestratorGetGlobalMetrics, usePipelineOrchestratorGetIngestOwner, usePipelineOrchestratorGetNodeInferenceDevices, usePipelineOrchestratorGetPipelineAssignment, usePipelineOrchestratorGetPipelineAssignments, usePipelineOrchestratorGetPipelineDevicePin, usePipelineOrchestratorGetReconcileFromDiskStatus, usePipelineOrchestratorListAgentSettings, usePipelineOrchestratorListTemplates, usePipelineOrchestratorPauseForStorageMigration, usePipelineOrchestratorRebalance, usePipelineOrchestratorReconcileFromDisk, usePipelineOrchestratorRemoveAgentSettings, usePipelineOrchestratorResetNodePipelineDefaults, usePipelineOrchestratorResolvePipeline, usePipelineOrchestratorResumeForStorageMigration, usePipelineOrchestratorSaveTemplate, usePipelineOrchestratorSetAgentCapabilities, usePipelineOrchestratorSetAgentDetectWeight, usePipelineOrchestratorSetAgentInferenceDevices, usePipelineOrchestratorSetAgentMaxCameras, usePipelineOrchestratorSetAgentReachableHost, usePipelineOrchestratorSetCameraPipelineForAgent, usePipelineOrchestratorSetCameraStepOverride, usePipelineOrchestratorSetCameraStepToggle, usePipelineOrchestratorSetCameraSwitch, usePipelineOrchestratorSetCapabilityBinding, usePipelineOrchestratorSetPipelineDevicePin, usePipelineOrchestratorUnassignAudio, usePipelineOrchestratorUnassignPipeline, usePipelineOrchestratorUpdateTemplate, usePipelineRunnerAttachCamera, usePipelineRunnerDetachCamera, usePipelineRunnerGetAllCameraMetrics, usePipelineRunnerGetCameraMetrics, usePipelineRunnerGetLocalCameras, usePipelineRunnerGetLocalLoad, usePipelineRunnerGetLocalMetrics, usePipelineRunnerGetNativeCrop, usePipelineRunnerReportMotion, usePipelineRunnerRunDetailSubtree, usePipelineRunnerRunStatelessStep, usePlateGalleryAssignPlate, usePlateGalleryAssignPlates, usePlateGalleryCorrectPlateText, usePlateGalleryCreateVehicle, usePlateGalleryDeletePlate, usePlateGalleryDeleteVehicle, usePlateGalleryGetPlateByTrack, usePlateGalleryGetPlateMedia, usePlateGalleryListPlates, usePlateGalleryListVehicleSamples, usePlateGalleryListVehicles, usePlateGalleryRemoveVehicleSample, usePlateGalleryRenameVehicle, usePlateGallerySearchPlates, usePlateGallerySuggestPlateClusters, usePlateGalleryUnassignPlate, usePlateGalleryUnassignPlates, usePlayerOverlayLayer, usePlayerOverlayLayers, usePlayerToolbarButton, usePlayerToolbarButtons, usePowerMeterGetStatus, usePresenceGetStatus, usePressureSensorGetStatus, usePrivacyMaskGetOptions, usePrivacyMaskGetStatus, usePrivacyMaskSetAudioEnabled, usePrivacyMaskSetMask, usePtzAutotrackGetSettings, usePtzAutotrackGetStatus, usePtzAutotrackSetEnabled, usePtzAutotrackSetSettings, usePtzContinuousMove, usePtzDeletePreset, usePtzGetOptions, usePtzGetPosition, usePtzGetPresets, usePtzGetStatus, usePtzGoHome, usePtzGoToPreset, usePtzMove, usePtzSavePreset, usePtzSetAutofocus, usePtzStop, useRebootReboot, useRecordedPlayback, useRecordingApplyDeviceSettingsPatch, useRecordingCancelRelocateJob, useRecordingCancelStorageMigrationMove, useRecordingDeleteFootprint, useRecordingExportCancelExport, useRecordingExportCreateExport, useRecordingExportDeleteExport, useRecordingExportGetDownloadUrl, useRecordingExportGetExport, useRecordingExportListExports, useRecordingExportReadExportBytes, useRecordingGetAvailability, useRecordingGetDaysWithRecordings, useRecordingGetDeviceConfig, useRecordingGetDeviceLiveContribution, useRecordingGetDeviceSettingsContribution, useRecordingGetPlaybackManifest, useRecordingGetStatus, useRecordingGetStorageMigrationMoveStatus, useRecordingGetStorageUsage, useRecordingListOpsLog, useRecordingListRelocateJobs, useRecordingLocateSegment, useRecordingPauseForStorageMigration, useRecordingPlanStorageRebalance, useRecordingPruneFootage, useRecordingReadGopBytes, useRecordingReadSegmentBytes, useRecordingRefreshStorageLocationsForMigration, useRecordingRelocateFootage, useRecordingRenderClip, useRecordingRenderGif, useRecordingRescanStorage, useRecordingResumeForStorageMigration, useRecordingSetDeviceConfig, useRecordingStartStorageMigrationMove, useRecordingStartStorageRebalance, useRemoteComponent, useSceneMonitorCaptureReference, useSceneMonitorCreateScene, useSceneMonitorDeleteReference, useSceneMonitorDeleteScene, useSceneMonitorGetStatus, useSceneMonitorListScenes, useSceneMonitorRecheckNow, useSceneMonitorResetScene, useSceneMonitorUpdateScene, useScriptRunnerGetStatus, useScriptRunnerRun, useScriptRunnerStop, useScrubController, useServerManagementApplyServerUpdate, useServerManagementCheckServerUpdate, useServerManagementGetServerPackageStatus, useServerManagementRestartServer, useServerManagementRollbackServerUpdate, useSettingsStoreCount, useSettingsStoreDeclareCollection, useSettingsStoreDelete, useSettingsStoreDeleteWhere, useSettingsStoreGet, useSettingsStoreHistogram, useSettingsStoreInsert, useSettingsStoreIsEmpty, useSettingsStoreQuery, useSettingsStoreSet, useSettingsStoreUpdate, useSettingsStoreUpdateWhere, useSmokeGetStatus, useSnapshotApplyDeviceSettingsPatch, useSnapshotGetDebugState, useSnapshotGetDeviceLiveContribution, useSnapshotGetDeviceSettingsContribution, useSnapshotGetSnapshot, useSnapshotGetSnapshotLinks, useSnapshotGetSnapshotOverview, useSnapshotGetStatus, useSnapshotInvalidateCache, useStorageAbortUpload, useStorageBeginDownload, useStorageBeginUpload, useStorageDelete, useStorageDeleteLocation, useStorageEndDownload, useStorageExists, useStorageFinalizeUpload, useStorageGetAvailableSpace, useStorageGetDefaultLocation, useStorageList, useStorageListLocationDeclarations, useStorageListLocations, useStorageListProviders, useStorageMigrationCancel, useStorageMigrationPlan, useStorageMigrationStart, useStorageMigrationStatus, useStorageRead, useStorageReadChunk, useStorageResolve, useStorageTestConfig, useStorageTestLocation, useStorageUpsertLocation, useStorageWrite, useStorageWriteChunk, useStreamBrokerAcquireEgressTranscode, useStreamBrokerApplyDeviceSettingsPatch, useStreamBrokerAssignProfile, useStreamBrokerFetchEventMedia, useStreamBrokerGetAllRtspEntries, useStreamBrokerGetBrokerStats, useStreamBrokerGetDeviceAudioMute, useStreamBrokerGetDeviceLiveContribution, useStreamBrokerGetDeviceSettingsContribution, useStreamBrokerGetPreBufferInfo, useStreamBrokerGetRtspEntry, useStreamBrokerGetRtspPort, useStreamBrokerGetStreamUrl, useStreamBrokerGetStreamWithCodec, useStreamBrokerIsRtspEnabled, useStreamBrokerKillClient, useStreamBrokerListAllCameraStreams, useStreamBrokerListAllProfileSlots, useStreamBrokerListClients, useStreamBrokerProbeStream, useStreamBrokerProduceEventMedia, useStreamBrokerPublishCameraStream, useStreamBrokerPullAudioChunks, useStreamBrokerPullFrameHandles, useStreamBrokerRegenerateRtspToken, useStreamBrokerReleaseEgressTranscode, useStreamBrokerReleaseStreamWithCodec, useStreamBrokerRenderPreBufferClip, useStreamBrokerRestartProfile, useStreamBrokerRetractCameraStream, useStreamBrokerSetDeviceAudioMute, useStreamBrokerSetPreBufferDuration, useStreamBrokerSetRtspEnabled, useStreamBrokerSubscribeAudioChunks, useStreamBrokerSubscribeFrames, useStreamBrokerUnassignProfile, useStreamBrokerUnsubscribeAudioChunks, useStreamBrokerUnsubscribeFrames, useStreamCatalogGetCatalog, useStreamParamsGetConfigSchema, useStreamParamsGetOptions, useStreamParamsGetStatus, useStreamParamsSetProfile, useSwitchGetStatus, useSwitchSetState, useSystem, useSystemDetectSiteLocation, useSystemFeatureFlags, useSystemForceRetentionCleanup, useSystemGetRetentionConfig, useSystemGetSiteLocation, useSystemHealth, useSystemInfo, useSystemMutation, useSystemNetworkAddresses, useSystemQuery, useSystemSetRetentionConfig, useSystemSetSiteLocation, useTamperGetStatus, useTemperatureSensorGetStatus, useTerminalSessionAdoptLegacyMonitor, useTerminalSessionClose, useTerminalSessionCreateInstance, useTerminalSessionDeleteInstance, useTerminalSessionListInstances, useTerminalSessionListLegacyCameras, useTerminalSessionListProfiles, useTerminalSessionListSessions, useTerminalSessionOpenSession, useTerminalSessionPullOutput, useTerminalSessionResize, useTerminalSessionSetInstanceEnabled, useTerminalSessionUpdateInstance, useTerminalSessionWriteInput, useThemeMode, useToastOnToast, useTurnProviderGetTurnServers, useUpdateGetStatus, useUpdateInstallUpdate, useUserManagementConfirmTotp, useUserManagementCreateApiKey, useUserManagementCreateScopedToken, useUserManagementCreateUser, useUserManagementDeleteUser, useUserManagementDisableTotp, useUserManagementGetTotpStatus, useUserManagementListApiKeys, useUserManagementListOauthSessions, useUserManagementListScopedTokens, useUserManagementListUsers, useUserManagementOauthExchangeCode, useUserManagementOauthIssueCode, useUserManagementOauthRefresh, useUserManagementOauthVerifyAccessToken, useUserManagementResetPassword, useUserManagementRevokeApiKey, useUserManagementRevokeOauthSession, useUserManagementRevokeScopedToken, useUserManagementSetUserScopes, useUserManagementSetupTotp, useUserManagementUpdateUser, useUserManagementValidateApiKey, useUserManagementValidateCredentials, useUserManagementValidateScopedToken, useUserManagementVerifyTotp, useVacuumControlGetStatus, useVacuumControlLocate, useVacuumControlPause, useVacuumControlReturnToBase, useVacuumControlSetFanSpeed, useVacuumControlStart, useVacuumControlStop, useValveClose, useValveGetStatus, useValveOpen, useValveSetPosition, useValveStop, useVibrationGetStatus, useVideoclipsGetClipPlayback, useVideoclipsListClips, useVodPlayback, useWaterHeaterGetStatus, useWaterHeaterSetAway, useWaterHeaterSetOperationMode, useWaterHeaterSetTargetTemp, useWeatherGetStatus, useWebrtcSessionAddIceCandidate, useWebrtcSessionCloseSession, useWebrtcSessionCreateSession, useWebrtcSessionGetIceCandidates, useWebrtcSessionGetSessionState, useWebrtcSessionHandleAnswer, useWebrtcSessionHandleOffer, useWebrtcSessionHasAdaptiveBitrate, useWebrtcSessionListStreams, useWidget, useWidgetMetadata, useWidgetRegistry, useZoneAnalyticsGetCameraHistory, useZoneAnalyticsGetCurrentSnapshot, useZoneAnalyticsGetUnzonedHistory, useZoneAnalyticsGetZoneHistory, useZoneEditing, useZoneRulesListRules, useZoneRulesSetRules, useZonesAddZone, useZonesListZones, useZonesRemoveZone, useZonesUpdateZone, vacuumStateMeta, validateScopes, valveStateMeta, variantLabel, waterHeaterPhase, waterHeaterTint, weatherConditionMeta, weatherTint };
48757
+ export { AddonGlobalSettingsForm, AgentStepEditor, AlarmHeroCard, AlarmInlineControl as AlarmPanelInlineControl, AppShell, ArcKnob, AudioClassificationList, AudioLevelWaveform, AudioWaveform, AutomationHeroCard, AutomationInlineControl, AutotrackSection, BTN_COMPACT, BTN_COMPACT_DANGER, BTN_COMPACT_PRIMARY, BTN_COMPACT_WARNING, Badge, BatteryBadge, BottomSheet, Breadcrumb, BrightnessPanel, Button, ButtonControl, ButtonHeroCard, CARD_MODE_MIN_COLUMNS, CENTER, CHIP_ACTIVE, CHIP_BASE, CHIP_INACTIVE, CLASS_COLORS, COLUMN_BREAKPOINT_CLASS, COLUMN_PRIORITY, COMMIT_DEDUPE_TOLERANCE_MS, COMMIT_DEDUPE_WINDOW_MS, CONTROL_CAP_NAMES, CONTROL_FILLS, CameraStreamPlayer, Card, Checkbox, ChildSectionAccordion, ClimatePanel, CodeBlock, CollapsibleCard, ConfigFormBuilder, FormField as ConfigFormField, ConfigSchemaField, ConfirmActionButton, ConfirmDialogProvider, ConsumablesPanel, ContainerChildrenProvider, ContainerPrimaryHero, ControlColumn, ControlHeroCard, ControlInlineControl, ControlPanel, CopyButton, CoverHeroCard, CoverInlineControl, CoverPanel, CustomFieldRenderersProvider, DEFAULT_COLOR, DEVICE_COLUMNS, DEVICE_LIST_PAGE_SIZE_KEY, DEVICE_LIST_PAGE_SIZE_OPTIONS, DEVICE_ROLE_META, DEVICE_TYPE_CONTROL, DEVICE_TYPE_META, DISPLAY_ICON_REGISTRY, DataTable, DetectionCanvas, DetectionOverlay, DetectionResultTree, DevShell, DeviceActivityPanel, DeviceBatchToolbar, DeviceCard, DeviceContextProvider, DeviceExportPanel, DeviceGrid, DeviceItem, DeviceList, DeviceMultiSelectField, DeviceSelectField, DeviceSelectorPicker, DeviceStepMatrix, Dialog, DialogBody, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, DiscoveryPanel, DoorbellRecentPanel, Dropdown, DropdownContent, DropdownItem, DropdownTrigger, DummyHeroCard, DummyInline, EVENT_KIND_ICONS, EmptyState, ErrorBox, EventKindGlyph, EventStream, FILL, FanHeroCard, FanInlineControl, FanPanel, FilterBar, FloatingEventStream, FloatingLogStream, FloatingPanel, FormField$1 as FormField, GRID_GAP, GRID_PAIRED, GRID_QUICK_STATS, GripTrack, GroupedModelSelector, HOST_WIDGETS, HlsVideo, HoverZoomImage, HumidifierHeroCard, HumidifierInlineControl, INPUT_COMPACT, IconAction, IconButton, ImageHeroCard, ImageInlineControl, ImageSelector, InferenceConfigSelector, Input, KebabMenu, KeyValueList, LIST_ROW, Label, LawnMowerHeroCard, LawnMowerInlineControl, LightHeroCard, LightInlineControl, LockHeroCard, LockInlineControl, LockPanel, LogStream, LoginForm, MODE_COLOR, MaskShapeCanvas, MediaPlayerHeroCard, MediaPlayerInlineControl, MediaPlayerPanel, MobileDrawer, ModelPicker, MotionZonesSettings, NodeMultiSelectField, NodePicker, NodeSelectField, OfflineBadge, PHASE_CONFIG, PRIORITY, PTZOverlay, PageHeader, PhaseIcon, PipelineBuilder, PipelineRuntimeSelector, PipelineStep, PipelineTreeMatrix, PlayerOverlaysProvider, Popover, PopoverContent, PopoverRowAction, PopoverTrigger, PrimaryChildPicker, PrivacyMaskSettings, ProviderBadge, PtzPanel, QrCode, RECONNECT_POLICY, RECORDED_PLAYBACK_MODES, RIGHT, ROI_AREA_WARN_FRACTION, ROLE_DESCRIPTOR, RadialGauge, RecordedPlaybackProvider, RecordingPanel, ResponseLog, SCENE_CAPTURE_VARIANTS, SECTION_BODY, SECTION_CARD, SECTION_HEADER, SETTING_ROW, SETTING_ROW_LABEL, SETTING_ROW_STACK_BREAKPOINT, SETTING_ROW_VALUE, SETTING_ROW_VALUE_TEXT, SPLIT_PANEL_OUTER, SPLIT_PANEL_SIDE, STACK_GAP, STATE_COLOR, SceneMonitorEditor, ScopePicker, ScriptHeroCard, ScriptInlineControl, ScrollArea, Select, SemanticBadge, SensorHeroCard, SensorInlineControl, SensorValueAtom, Separator, SettingRow, Sidebar, SidebarItem, Skeleton, SlideOverPanel, SlideToggle, SnapshotButton, StatCard, StateValuesStream, StatusBadge, StepTimings, StepTreeMaster, Stepper, StreamBrokerSelector, StreamPanel, Switch, SwitchHeroCard, SwitchInlineControl, SwitchPanel, SystemProvider, TABLE_SCROLL_MAX_H, TEXT_FIELD_LABEL, TEXT_HINT, TEXT_METRIC, TEXT_SECTION_LABEL, TEXT_VALUE, TIMEZONES, Tabs, TabsContent, TabsList, TabsTrigger, TapToggle, ThemeProvider, ThermostatHeroCard, ThermostatInlineControl, TimezoneSelector, Tooltip, TooltipContent, TooltipTrigger, VacuumHeroCard, VacuumInlineControl, ValueReadout, ValveHeroCard, ValveInlineControl, VersionBadge, VodPlaybackProvider, WaterHeaterHeroCard, WaterHeaterInlineControl, WeatherHeroCard, WeatherInlineControl, WidgetMetricCard, WidgetPanel, WidgetRegistryProvider, WidgetSlot, ZoneEditingProvider, ImageOff as a, agentColumnKey, allDeviceTypeFilterOptions, badgeFor, buildStepTreeFromSchema, createLucideIcon as c, childEntityId, childListName, cn, columnsForContext, containerChildToRef, countableDevices, coverHighlight, coverageLine, createSharedContext, createTheme, cursorFractionFor, darkColors, defaultTheme, deriveDeviceKind, describeDeviceSelector, deviceMatchesFilter, deviceOptionLabel, deviceRoleMeta, deviceRoleMetaOf, deviceTypeLabel, deviceTypeMeta, deviceTypeMetaOf, devicesToOptions, ensureMfHostInit, eventKindLabel, filterDeviceOptions, findTimezone, formatControlDateTime, formatLastSeen, formatNumeric, fuzzyMatch, getClassColor, getPhaseVisual, groupAgentColumns, groupChildrenByLayout, hardwareLabel, humanDuration, humidifierTint, Mic as i, initialScrubState, isAbsentProvider, isFieldVisible, lawnMowerActivityMeta, lightColors, loadRemoteBundle, makeScrubBridge, metadataEntries, metadataString, mirror, mountAddonPage, Square as n, nextReconnectAction, nextSort, normalizeForSearch, EyeOff as o, overrideEntityIdFromLink, parseRecordedServerMessage, providerIcons, RotateCcw as r, resolveContainerPrimary, resolveControlAlign, resolveDeviceControl, resolveDisplayIcon, resolveEffectiveDefaultModel, resolveEffectiveStepModel, resolveEventKindIcon, resolvePrimaryChild, resolveSensorDisplay, resolveStepDefaultModel, resolveTableLayout, roiTooLarge, Camera as s, scrubReducer, selectedDeviceOptions, serializeRecordedCommand, shouldCommit, shouldEmit, shouldUseSingleNode, sortRows, statusIcons, statusLine, stepHasModelForFormat, stepModelOptions, stripParentNamePrefix, Trash2 as t, tabForSelector, tankAlert, themeToCss, trpc, useAccessoriesGetStatus, useAccessoriesSetChildHidden, useAddonPagesListPages, useAddonSettingsGetDeviceSettings, useAddonSettingsGetGlobalSettings, useAddonSettingsUpdateDeviceSettings, useAddonSettingsUpdateGlobalSettings, useAddonWidgetsListWidgets, useAddonsApplyAutoUpdateToAll, useAddonsCancelJob, useAddonsCustom, useAddonsForceRefresh, useAddonsGetAddonAutoUpdate, useAddonsGetAutoUpdateSettings, useAddonsGetJob, useAddonsGetLastRestart, useAddonsGetLogs, useAddonsGetVersions, useAddonsInstallFromWorkspace, useAddonsInstallPackage, useAddonsIsWorkspaceAvailable, useAddonsList, useAddonsListCapabilityProviders, useAddonsListFrameworkPackages, useAddonsListJobs, useAddonsListPackages, useAddonsListUpdates, useAddonsListWorkspacePackages, useAddonsOnAddonLogs, useAddonsReloadPackages, useAddonsRestartAddon, useAddonsRestartServer, useAddonsRetryLoad, useAddonsRollbackPackage, useAddonsSearchAvailable, useAddonsSetAddonAutoUpdate, useAddonsSetAutoUpdateSettings, useAddonsSetCapabilityProviderEnabled, useAddonsStartJob, useAddonsUninstallPackage, useAddonsUpdatePackage, useAirQualitySensorGetStatus, useAlarmPanelArm, useAlarmPanelDisarm, useAlarmPanelGetStatus, useAlarmPanelTrigger, useAlertsDismiss, useAlertsEmit, useAlertsGetUnreadCount, useAlertsList, useAlertsMarkAllRead, useAlertsMarkRead, useAlertsUpdate, useAllWidgets, useAmbientLightSensorGetStatus, useAudioAnalysisApplyDeviceSettingsPatch, useAudioAnalysisGetDeviceLiveContribution, useAudioAnalysisGetDeviceSettingsContribution, useAudioAnalysisResolveDeviceSettings, useAudioAnalyzerAnalyseChunk, useAudioAnalyzerClassify, useAudioAnalyzerDispose, useAudioAnalyzerIsReady, useAudioAnalyzerReprobeAudioEngine, useAudioCodecCanHandle, useAudioCodecCloseSession, useAudioCodecCreateDecodeSession, useAudioCodecCreateEncodeSession, useAudioCodecFlushEncode, useAudioCodecListActiveSessions, useAudioCodecListSupportedCodecs, useAudioCodecPullEncoded, useAudioCodecPullPcm, useAudioCodecPushEncodedFrame, useAudioCodecPushPcm, useAudioMetricsGetCurrentSnapshot, useAudioMetricsGetHistory, useAutomationControlDisable, useAutomationControlEnable, useAutomationControlGetStatus, useAutomationControlTrigger, useBackupDelete, useBackupDeleteSchedule, useBackupGetEntries, useBackupList, useBackupListArchives, useBackupListDestinations, useBackupListLocations, useBackupListSchedules, useBackupPreviewSchedule, useBackupRestore, useBackupTrigger, useBackupUpsertDestinationPolicy, useBackupUpsertSchedule, useBatteryGetStatus, useBatteryWakeForStream, useBinaryGetStatus, useBrightnessGetStatus, useBrightnessSetBrightness, useBrokerAdd, useBrokerGet, useBrokerGetBrokerConfig, useBrokerGetSettings, useBrokerGetSettingsSchema, useBrokerGetState, useBrokerGetStatus, useBrokerList, useBrokerListProviders, useBrokerPublish, useBrokerRemove, useBrokerSetSettings, useBrokerSubscribe, useBrokerTestConnection, useBrokerTestSettings, useBrokerUnsubscribe, useButtonPress, useCameraCredentialsGetCredentials, useCameraCredentialsGetStatus, useCameraPipelineConfigApplyDeviceSettingsPatch, useCameraPipelineConfigGetDeviceLiveContribution, useCameraPipelineConfigGetDeviceSettingsContribution, useCameraStreamsGetBrokerStreams, useCameraStreamsGetCameraStreams, useCameraStreamsGetProfileRtspEntries, useCameraStreamsGetRtspEntries, useCameraStreamsPickStream, useCarbonMonoxideGetStatus, useClimateControlGetStatus, useClimateControlSetFanMode, useClimateControlSetMode, useClimateControlSetPreset, useClimateControlSetSwingHorizontal, useClimateControlSetSwingVertical, useClimateControlSetTarget, useClimateControlSetTargetHumidity, useClimateControlSetTargetRange, useClusterNodes, useColorGetStatus, useColorSetColor, useConfirm, useConnectionTestDescribeTest, useConnectionTestTestSettings, useConnectivityGetStatus, useConsumablesGetStatus, useConsumablesReset, useContactGetStatus, useContainerChildren, useControlGetStatus, useControlSetValue, useCoreBlocksCompile, useCoreBlocksCreate, useCoreBlocksDelete, useCoreBlocksGet, useCoreBlocksGetTypeDefs, useCoreBlocksList, useCoreBlocksRestart, useCoreBlocksSetEnabled, useCoreBlocksUpdate, useCoverClose, useCoverGetStatus, useCoverOpen, useCoverSetPosition, useCoverSetTiltPosition, useCoverStop, useCustomFieldRenderer, useDayNightGetOptions, useDayNightGetStatus, useDayNightSetSettings, useDebouncedString, useDecoderCreateSession, useDecoderDestroySession, useDecoderGetFrame, useDecoderGetInfo, useDecoderGetShmStats, useDecoderGetStats, useDecoderListActiveSessions, useDecoderOpenStream, useDecoderPullFrames, useDecoderPullHandles, useDecoderPushPacket, useDecoderReprobeHwaccel, useDecoderSupportsCodec, useDecoderUpdateConfig, useDetectionPipelineApplyDeviceSettingsPatch, useDetectionPipelineGetDeviceLiveContribution, useDetectionPipelineGetDeviceSettingsContribution, useDevShell, useDevice, useDeviceAdoptionAdopt, useDeviceAdoptionGetCandidate, useDeviceAdoptionGetStatus, useDeviceAdoptionListCandidateFilters, useDeviceAdoptionListCandidates, useDeviceAdoptionRefresh, useDeviceAdoptionRelease, useDeviceAdoptionResync, useDeviceAutotrack, useDeviceBattery, useDeviceCapSlice, useDeviceCapability, useDeviceDetections, useDeviceDiscoveryAdoptDevice, useDeviceDiscoveryGetStatus, useDeviceDiscoveryListDiscovered, useDeviceDiscoveryRefreshDiscovery, useDeviceDiscoveryReleaseDevice, useDeviceExportApplyDeviceSettingsPatch, useDeviceExportExposeDevice, useDeviceExportGetDeviceLiveContribution, useDeviceExportGetDeviceSettingsContribution, useDeviceExportGetStatus, useDeviceExportListExposedDevices, useDeviceExportListSupportedDeviceKinds, useDeviceExportUnexposeDevice, useDeviceId, useDeviceListPageSize, useDeviceManagerAddLocation, useDeviceManagerAdoptDevice, useDeviceManagerAdoptionAdopt, useDeviceManagerAdoptionCancelJob, useDeviceManagerAdoptionListCandidateFilters, useDeviceManagerAdoptionListCandidates, useDeviceManagerAdoptionListJobs, useDeviceManagerAdoptionRefresh, useDeviceManagerAdoptionRelease, useDeviceManagerAdoptionResync, useDeviceManagerAdoptionStartJob, useDeviceManagerAllocateDeviceId, useDeviceManagerApplyDeviceSettingsPatch, useDeviceManagerApplyInitialMeta, useDeviceManagerCreateDevice, useDeviceManagerDisable, useDeviceManagerDiscoverAllProviders, useDeviceManagerDiscoverDevices, useDeviceManagerDiscoverProvider, useDeviceManagerDiscoveryProviders, useDeviceManagerEnable, useDeviceManagerGetAllBindings, useDeviceManagerGetBindings, useDeviceManagerGetChildren, useDeviceManagerGetConfigSchema, useDeviceManagerGetCreationSchema, useDeviceManagerGetDevice, useDeviceManagerGetDeviceAggregate, useDeviceManagerGetDeviceLiveContribution, useDeviceManagerGetDeviceLiveInfoAggregate, useDeviceManagerGetDeviceSettingsAggregate, useDeviceManagerGetDeviceSettingsContribution, useDeviceManagerGetDeviceStatusAggregate, useDeviceManagerGetDeviceStatusAggregateBatch, useDeviceManagerGetLinkedDevices, useDeviceManagerGetRoleDisplayDefaults, useDeviceManagerGetSettingsSchema, useDeviceManagerGetStreamProfileMap, useDeviceManagerGetStreamSources, useDeviceManagerGetWireableFields, useDeviceManagerListAll, useDeviceManagerListBindableCapsForDeviceType, useDeviceManagerListLocations, useDeviceManagerListPersistedByAddon, useDeviceManagerListWrappersForCap, useDeviceManagerLoadConfig, useDeviceManagerLoadMeta, useDeviceManagerLoadRuntimeState, useDeviceManagerPersistConfig, useDeviceManagerProbeStreams, useDeviceManagerProviderCreationType, useDeviceManagerProviderDiscoveryParamsSchema, useDeviceManagerRegisterDevice, useDeviceManagerRemove, useDeviceManagerRemoveByIntegration, useDeviceManagerRemoveDevice, useDeviceManagerRemoveLocation, useDeviceManagerRunDeviceAction, useDeviceManagerSetChildLayout, useDeviceManagerSetDisabled, useDeviceManagerSetDisplay, useDeviceManagerSetIntegrationId, useDeviceManagerSetLinkDeviceId, useDeviceManagerSetLocation, useDeviceManagerSetMetadata, useDeviceManagerSetName, useDeviceManagerSetPrimaryChildEntityId, useDeviceManagerSetRole, useDeviceManagerSetRoleDisplayDefaults, useDeviceManagerSetStreamProfileMap, useDeviceManagerSetType, useDeviceManagerSetWrapperActive, useDeviceManagerTestCreationField, useDeviceManagerTestField, useDeviceManagerUpdateConfig, useDeviceManagerUpdateDeviceField, useDeviceManagerUpdateDeviceFieldsBatch, useDeviceOpsGetConfigEntries, useDeviceOpsGetRawState, useDeviceOpsGetSettingsSchema, useDeviceOpsGetStreamSources, useDeviceOpsRemoveDevice, useDeviceOpsRunAction, useDeviceOpsSetConfig, useDeviceProviderAdoptDiscoveredDevice, useDeviceProviderCreateDevice, useDeviceProviderDiscoverDevices, useDeviceProviderGetChildCreationSchema, useDeviceProviderGetDevices, useDeviceProviderGetDiscoveryParamsSchema, useDeviceProviderGetManualCreationType, useDeviceProviderGetStatus, useDeviceProviderStart, useDeviceProviderStop, useDeviceProviderSupportsDiscovery, useDeviceProviderSupportsManualCreation, useDeviceProviderTestCreationField, useDeviceProxy, useDeviceSnapshot, useDeviceSnapshotImage, useDeviceState, useDeviceStateGetAllSnapshots, useDeviceStateGetCapSlice, useDeviceStateGetSnapshot, useDeviceStateSetCapSlice, useDeviceStateSlice, useDeviceStatusGetStatus, useDeviceWebrtc, useDevices, useDoorbellApplyDeviceSettingsPatch, useDoorbellEvents, useDoorbellGetDeviceLiveContribution, useDoorbellGetDeviceSettingsContribution, useDoorbellGetStatus, useEnumSensorGetStatus, useEventEmitterGetStatus, useEventInvalidation, useEventStreamLatest, useEventStreamMap, useEventsGetEventClipUrl, useEventsGetEventThumbnail, useEventsGetEvents, useFaceGalleryAssignFace, useFaceGalleryAssignFaces, useFaceGalleryCreateIdentity, useFaceGalleryDeleteFace, useFaceGalleryDeleteIdentity, useFaceGalleryGetFaceByTrack, useFaceGalleryGetFaceMedia, useFaceGalleryListIdentities, useFaceGalleryListIdentitySamples, useFaceGalleryListRecentFaces, useFaceGalleryRemoveSample, useFaceGalleryRenameIdentity, useFaceGallerySuggestFaceClusters, useFaceGalleryUnassignFace, useFaceGalleryUnassignFaces, useFanControlGetStatus, useFanControlSetDirection, useFanControlSetOscillating, useFanControlSetPercentage, useFanControlSetPreset, useFeatureProbeGetStatus, useFloodGetStatus, useGasGetStatus, useHumidifierGetStatus, useHumidifierSetMode, useHumidifierSetOn, useHumidifierSetTargetHumidity, useHumiditySensorGetStatus, useImageGetStatus, useImageSettingsGetOptions, useImageSettingsGetStatus, useImageSettingsSetSettings, useIntegrationsCreate, useIntegrationsDelete, useIntegrationsGet, useIntegrationsGetAvailableTypes, useIntegrationsGetByAddonId, useIntegrationsGetSettings, useIntegrationsList, useIntegrationsSetSettings, useIntegrationsTestConnection, useIntegrationsUpdate, useIntercomEndTalkSession, useIntercomGetStatus, useIntercomHandleAnswer, useIntercomPushTalkAudio, useIntercomStartSession, useIntercomStartTalkSession, useIntercomStopSession, useIsMidWidth, useIsMobile, useLawnMowerControlDock, useLawnMowerControlGetStatus, useLawnMowerControlPause, useLawnMowerControlStartMowing, useLiveBuffer, useLiveEvent, useLlmCancel, useLlmDeleteModel, useLlmDeleteProfile, useLlmGenerate, useLlmGenerateVision, useLlmGetDefaults, useLlmGetRuntimeStatus, useLlmGetUsage, useLlmInstallModel, useLlmListModelCatalog, useLlmListModels, useLlmListNodeModels, useLlmListProfileKinds, useLlmListProfiles, useLlmListRuntimeNodes, useLlmResolveModelRef, useLlmSetDefault, useLlmStartRuntime, useLlmStopRuntime, useLlmTestProfile, useLlmUpsertProfile, useLocalNetworkDownloadCa, useLocalNetworkGetAllowedAddresses, useLocalNetworkGetConnectionEndpoints, useLocalNetworkGetNotificationEndpoint, useLocalNetworkGetPreferred, useLocalNetworkGetTlsStatus, useLocalNetworkGetViewerEndpoints, useLocalNetworkList, useLocalNetworkRegenerateCertificate, useLocalNetworkResetAllowlistToBestMatch, useLocalNetworkRevertToGeneratedCertificate, useLocalNetworkSetAllowedAddresses, useLocalNetworkSetNotificationEndpoint, useLocalNetworkSetViewerEndpoints, useLocalNetworkUploadCertificate, useLockControlGetStatus, useLockControlLock, useLockControlOpen, useLockControlUnlock, useMediaPlayerGetStatus, useMediaPlayerNext, useMediaPlayerPause, useMediaPlayerPlay, useMediaPlayerPlayMedia, useMediaPlayerPrevious, useMediaPlayerSeek, useMediaPlayerSelectSource, useMediaPlayerSetMute, useMediaPlayerSetRepeat, useMediaPlayerSetShuffle, useMediaPlayerSetVolume, useMediaPlayerStop, useMeshNetworkGetStatus, useMeshNetworkJoin, useMeshNetworkLeave, useMeshNetworkListPeers, useMeshNetworkLogout, useMeshNetworkStartLogin, useMeshNetworkTestConnection, useMetricsProviderCollectSnapshot, useMetricsProviderDumpHeapSnapshot, useMetricsProviderGetAddonStats, useMetricsProviderGetCached, useMetricsProviderGetCpuTemperature, useMetricsProviderGetCurrent, useMetricsProviderGetDiskSpace, useMetricsProviderGetGpuInfo, useMetricsProviderGetProcessStats, useMetricsProviderKillProcess, useMetricsProviderListAddonInstances, useMetricsProviderListNodeProcesses, useMotionDetectionAnalyze, useMotionDetectionApplyDeviceSettingsPatch, useMotionDetectionGetDeviceLiveContribution, useMotionDetectionGetDeviceSettingsContribution, useMotionDetectionRemoveCamera, useMotionDetectionReset, useMotionGetStatus, useMotionIsDetected, useMotionTriggerGetStatus, useMotionTriggerSetMotionTrigger, useMotionZonesGetOptions, useMotionZonesGetStatus, useMotionZonesSetZone, useMqttBrokerAddBroker, useMqttBrokerGetBrokerConfig, useMqttBrokerGetStatus, useMqttBrokerListBrokers, useMqttBrokerRemoveBroker, useMqttBrokerStartEmbeddedBroker, useMqttBrokerStopEmbeddedBroker, useMqttBrokerTestConnection, useNativeObjectDetectionGetStatus, useNativeObjectDetectionSetEnabled, useNetworkAccessGetEndpoint, useNetworkAccessGetStatus, useNetworkAccessListEndpoints, useNetworkAccessStart, useNetworkAccessStop, useNetworkQualityGetAllStats, useNetworkQualityGetDeviceStats, useNetworkQualityReportClientStats, useNodesClusterAddonStatus, useNodesDeployAddon, useNodesExecuteQuery, useNodesGetCapUsageGraph, useNodesGetNodeAddons, useNodesRenameNode, useNodesRestartAddon, useNodesRestartNode, useNodesRestartProcess, useNodesSetProcessLogLevel, useNodesShutdownNode, useNodesTopology, useNodesUndeployAddon, useNotificationOutputDeleteTarget, useNotificationOutputDiscoverTargets, useNotificationOutputListTargetKinds, useNotificationOutputListTargets, useNotificationOutputSend, useNotificationOutputSetTargetEnabled, useNotificationOutputTestTarget, useNotificationOutputUpsertTarget, useNotificationRulesCancelSnooze, useNotificationRulesCreateRule, useNotificationRulesCreateSnooze, useNotificationRulesDeleteRule, useNotificationRulesGetAlarmConfig, useNotificationRulesGetConditionCatalog, useNotificationRulesGetHistory, useNotificationRulesGetRule, useNotificationRulesListDeviceMutes, useNotificationRulesListRules, useNotificationRulesListSnoozes, useNotificationRulesSetAlarmConfig, useNotificationRulesSetDeviceMuted, useNotificationRulesSetRuleEnabled, useNotificationRulesTestRule, useNotificationRulesUpdateRule, useNotifierCancel, useNotifierGetStatus, useNotifierSend, useNumericSensorGetStatus, useOptimisticSlice, useOptionalSystem, useOptionalWidgetRegistry, useOsdGetStatus, useOsdManagerClearSlotBinding, useOsdManagerCopyDeviceConfiguration, useOsdManagerGetConditionSupport, useOsdManagerGetDeviceOsd, useOsdManagerGetSourceCatalog, useOsdManagerPreviewSlot, useOsdManagerRenderDevice, useOsdManagerSetSlotBinding, useOsdSetOverlay, usePTZ, usePetFeederCallPet, usePetFeederCancelFeed, usePetFeederFeed, usePetFeederGetStatus, usePetFeederMarkFoodReplenished, usePetFeederPlaySound, usePetFeederResetDesiccant, usePetFeederSetChildLock, usePetFeederSetFeedSound, usePetFeederSetIndicatorLight, usePetFeederSetVolume, usePipelineAnalyticsApplyDeviceSettingsPatch, usePipelineAnalyticsCancelStorageMigrationMove, usePipelineAnalyticsClearTracks, usePipelineAnalyticsCompleteRetrainTrack, usePipelineAnalyticsDeleteDeviceEvents, usePipelineAnalyticsDeleteTracks, usePipelineAnalyticsDeselectRetrainFrame, usePipelineAnalyticsGetActiveTracks, usePipelineAnalyticsGetAudioEvents, usePipelineAnalyticsGetDeviceLiveContribution, usePipelineAnalyticsGetDeviceSettingsContribution, usePipelineAnalyticsGetEventDensity, usePipelineAnalyticsGetEventMedia, usePipelineAnalyticsGetEventStoreFootprint, usePipelineAnalyticsGetGroup, usePipelineAnalyticsGetKeyEvents, usePipelineAnalyticsGetMotionEvents, usePipelineAnalyticsGetObjectEmbeddingRebuildStatus, usePipelineAnalyticsGetObjectEvents, usePipelineAnalyticsGetRetrainExportUrl, usePipelineAnalyticsGetRetrainFrameImage, usePipelineAnalyticsGetSensorEvents, usePipelineAnalyticsGetStorageMigrationMoveStatus, usePipelineAnalyticsGetTrack, usePipelineAnalyticsGetTrackMedia, usePipelineAnalyticsGetTrainingExportSummary, usePipelineAnalyticsGetTrainingExportUrl, usePipelineAnalyticsListEventKinds, usePipelineAnalyticsListEventKindsBatch, usePipelineAnalyticsListGroups, usePipelineAnalyticsListOpsLog, usePipelineAnalyticsListRecentTracks, usePipelineAnalyticsListRetrainAnnotations, usePipelineAnalyticsListRetrainFrames, usePipelineAnalyticsListRetrainStaging, usePipelineAnalyticsListTrackMedia, usePipelineAnalyticsListTracks, usePipelineAnalyticsPauseForStorageMigration, usePipelineAnalyticsProposeRetrainAnnotations, usePipelineAnalyticsPruneEvents, usePipelineAnalyticsPruneEventsBefore, usePipelineAnalyticsPruneTracksBefore, usePipelineAnalyticsRebuildObjectEmbeddings, usePipelineAnalyticsReconcileFromDisk, usePipelineAnalyticsRefreshStorageLocationsForMigration, usePipelineAnalyticsRestageRetrainTrack, usePipelineAnalyticsResumeForStorageMigration, usePipelineAnalyticsSaveRetrainAnnotations, usePipelineAnalyticsSearchObjectEvents, usePipelineAnalyticsSelectRetrainFrames, usePipelineAnalyticsSetTrackFlags, usePipelineAnalyticsStartStorageMigrationMove, usePipelineAnalyticsWipeAllAnalytics, usePipelineAnalyticsWipeObjectEmbeddings, usePipelineExecutorCacheFrameInPool, usePipelineExecutorClearDeviceOverrides, usePipelineExecutorDeleteModel, usePipelineExecutorDeleteTemplate, usePipelineExecutorDownloadModel, usePipelineExecutorGetAddonModels, usePipelineExecutorGetAudioCapabilities, usePipelineExecutorGetAvailableEngines, usePipelineExecutorGetCapabilities, usePipelineExecutorGetDefaultSteps, usePipelineExecutorGetDetectionConfigSchema, usePipelineExecutorGetEffectiveTuning, usePipelineExecutorGetEngineProvisioning, usePipelineExecutorGetGlobalPipelineConfig, usePipelineExecutorGetGlobalSteps, usePipelineExecutorGetOrchestratorConfigSchema, usePipelineExecutorGetReferenceAudio, usePipelineExecutorGetReferenceAudioFiles, usePipelineExecutorGetReferenceImage, usePipelineExecutorGetSchema, usePipelineExecutorGetSelectedEngine, usePipelineExecutorGetVideoPipelineSteps, usePipelineExecutorInferCached, usePipelineExecutorKillEngine, usePipelineExecutorListLoadedEngines, usePipelineExecutorListReferenceImages, usePipelineExecutorListTemplates, usePipelineExecutorRunAudioTest, usePipelineExecutorRunPipeline, usePipelineExecutorRunPipelineBatch, usePipelineExecutorSaveTemplate, usePipelineExecutorSetVideoPipelineSteps, usePipelineExecutorSpinEngine, usePipelineExecutorUncacheFrame, usePipelineExecutorUpdateTemplate, usePipelineExecutorValidatePipeline, usePipelineOrchestratorApplyDeviceSettingsPatch, usePipelineOrchestratorAssignAudio, usePipelineOrchestratorAssignPipeline, usePipelineOrchestratorDeleteTemplate, usePipelineOrchestratorGetAgentLoad, usePipelineOrchestratorGetAgentSettings, usePipelineOrchestratorGetAudioAssignment, usePipelineOrchestratorGetAudioAssignments, usePipelineOrchestratorGetAudioNodeLoad, usePipelineOrchestratorGetCameraMetrics, usePipelineOrchestratorGetCameraSettings, usePipelineOrchestratorGetCameraStatus, usePipelineOrchestratorGetCameraStatuses, usePipelineOrchestratorGetCameraStepOverrides, usePipelineOrchestratorGetCameraSwitches, usePipelineOrchestratorGetCapabilityBindings, usePipelineOrchestratorGetDeviceLiveContribution, usePipelineOrchestratorGetDeviceSettingsContribution, usePipelineOrchestratorGetGlobalMetrics, usePipelineOrchestratorGetIngestOwner, usePipelineOrchestratorGetNodeInferenceDevices, usePipelineOrchestratorGetPipelineAssignment, usePipelineOrchestratorGetPipelineAssignments, usePipelineOrchestratorGetPipelineDevicePin, usePipelineOrchestratorGetReconcileFromDiskStatus, usePipelineOrchestratorListAgentSettings, usePipelineOrchestratorListTemplates, usePipelineOrchestratorPauseForStorageMigration, usePipelineOrchestratorRebalance, usePipelineOrchestratorReconcileFromDisk, usePipelineOrchestratorRemoveAgentSettings, usePipelineOrchestratorResetNodePipelineDefaults, usePipelineOrchestratorResolvePipeline, usePipelineOrchestratorResumeForStorageMigration, usePipelineOrchestratorSaveTemplate, usePipelineOrchestratorSetAgentCapabilities, usePipelineOrchestratorSetAgentDetectWeight, usePipelineOrchestratorSetAgentInferenceDevices, usePipelineOrchestratorSetAgentMaxCameras, usePipelineOrchestratorSetAgentReachableHost, usePipelineOrchestratorSetCameraPipelineForAgent, usePipelineOrchestratorSetCameraStepOverride, usePipelineOrchestratorSetCameraStepToggle, usePipelineOrchestratorSetCameraSwitch, usePipelineOrchestratorSetCapabilityBinding, usePipelineOrchestratorSetPipelineDevicePin, usePipelineOrchestratorUnassignAudio, usePipelineOrchestratorUnassignPipeline, usePipelineOrchestratorUpdateTemplate, usePipelineRunnerAttachCamera, usePipelineRunnerDetachCamera, usePipelineRunnerGetAllCameraMetrics, usePipelineRunnerGetCameraMetrics, usePipelineRunnerGetLocalCameras, usePipelineRunnerGetLocalLoad, usePipelineRunnerGetLocalMetrics, usePipelineRunnerGetNativeCrop, usePipelineRunnerReportMotion, usePipelineRunnerRunDetailSubtree, usePipelineRunnerRunStatelessStep, usePlateGalleryAssignPlate, usePlateGalleryAssignPlates, usePlateGalleryCorrectPlateText, usePlateGalleryCreateVehicle, usePlateGalleryDeletePlate, usePlateGalleryDeleteVehicle, usePlateGalleryGetPlateByTrack, usePlateGalleryGetPlateMedia, usePlateGalleryListPlates, usePlateGalleryListVehicleSamples, usePlateGalleryListVehicles, usePlateGalleryRemoveVehicleSample, usePlateGalleryRenameVehicle, usePlateGallerySearchPlates, usePlateGallerySuggestPlateClusters, usePlateGalleryUnassignPlate, usePlateGalleryUnassignPlates, usePlayerOverlayLayer, usePlayerOverlayLayers, usePlayerToolbarButton, usePlayerToolbarButtons, usePowerMeterGetStatus, usePresenceGetStatus, usePressureSensorGetStatus, usePrivacyMaskGetOptions, usePrivacyMaskGetStatus, usePrivacyMaskSetAudioEnabled, usePrivacyMaskSetMask, usePtzAutotrackGetSettings, usePtzAutotrackGetStatus, usePtzAutotrackSetEnabled, usePtzAutotrackSetSettings, usePtzContinuousMove, usePtzDeletePreset, usePtzGetOptions, usePtzGetPosition, usePtzGetPresets, usePtzGetStatus, usePtzGoHome, usePtzGoToPreset, usePtzMove, usePtzSavePreset, usePtzSetAutofocus, usePtzStop, useRebootReboot, useRecordedPlayback, useRecordingApplyDeviceSettingsPatch, useRecordingCancelRelocateJob, useRecordingCancelStorageMigrationMove, useRecordingDeleteFootprint, useRecordingExportCancelExport, useRecordingExportCreateExport, useRecordingExportDeleteExport, useRecordingExportGetDownloadUrl, useRecordingExportGetExport, useRecordingExportListExports, useRecordingExportReadExportBytes, useRecordingGetAvailability, useRecordingGetDaysWithRecordings, useRecordingGetDeviceConfig, useRecordingGetDeviceLiveContribution, useRecordingGetDeviceSettingsContribution, useRecordingGetPlaybackManifest, useRecordingGetStatus, useRecordingGetStorageMigrationMoveStatus, useRecordingGetStorageUsage, useRecordingListOpsLog, useRecordingListRelocateJobs, useRecordingLocateSegment, useRecordingPauseForStorageMigration, useRecordingPlanStorageRebalance, useRecordingPruneFootage, useRecordingReadGopBytes, useRecordingReadSegmentBytes, useRecordingRefreshStorageLocationsForMigration, useRecordingRelocateFootage, useRecordingRenderClip, useRecordingRenderGif, useRecordingRescanStorage, useRecordingResumeForStorageMigration, useRecordingSetDeviceConfig, useRecordingStartStorageMigrationMove, useRecordingStartStorageRebalance, useRemoteComponent, useSceneMonitorCaptureReference, useSceneMonitorCreateScene, useSceneMonitorDeleteReference, useSceneMonitorDeleteScene, useSceneMonitorGetStatus, useSceneMonitorListScenes, useSceneMonitorRecheckNow, useSceneMonitorResetScene, useSceneMonitorUpdateScene, useScriptRunnerGetStatus, useScriptRunnerRun, useScriptRunnerStop, useScrubController, useServerManagementApplyServerUpdate, useServerManagementCheckServerUpdate, useServerManagementGetServerPackageStatus, useServerManagementRestartServer, useServerManagementRollbackServerUpdate, useSettingsStoreCount, useSettingsStoreDeclareCollection, useSettingsStoreDelete, useSettingsStoreDeleteWhere, useSettingsStoreGet, useSettingsStoreHistogram, useSettingsStoreInsert, useSettingsStoreIsEmpty, useSettingsStoreQuery, useSettingsStoreSet, useSettingsStoreUpdate, useSettingsStoreUpdateWhere, useSmokeGetStatus, useSnapshotApplyDeviceSettingsPatch, useSnapshotGetDebugState, useSnapshotGetDeviceLiveContribution, useSnapshotGetDeviceSettingsContribution, useSnapshotGetSnapshot, useSnapshotGetSnapshotLinks, useSnapshotGetSnapshotOverview, useSnapshotGetStatus, useSnapshotInvalidateCache, useStorageAbortUpload, useStorageBeginDownload, useStorageBeginUpload, useStorageDelete, useStorageDeleteLocation, useStorageEndDownload, useStorageExists, useStorageFinalizeUpload, useStorageGetAvailableSpace, useStorageGetDefaultLocation, useStorageList, useStorageListLocationDeclarations, useStorageListLocations, useStorageListProviders, useStorageMigrationCancel, useStorageMigrationPlan, useStorageMigrationStart, useStorageMigrationStatus, useStorageRead, useStorageReadChunk, useStorageResolve, useStorageTestConfig, useStorageTestLocation, useStorageUpsertLocation, useStorageWrite, useStorageWriteChunk, useStreamBrokerAcquireEgressTranscode, useStreamBrokerApplyDeviceSettingsPatch, useStreamBrokerAssignProfile, useStreamBrokerFetchEventMedia, useStreamBrokerGetAllRtspEntries, useStreamBrokerGetBrokerStats, useStreamBrokerGetDeviceAudioMute, useStreamBrokerGetDeviceLiveContribution, useStreamBrokerGetDeviceSettingsContribution, useStreamBrokerGetPreBufferInfo, useStreamBrokerGetRtspEntry, useStreamBrokerGetRtspPort, useStreamBrokerGetStreamUrl, useStreamBrokerGetStreamWithCodec, useStreamBrokerIsRtspEnabled, useStreamBrokerKillClient, useStreamBrokerListAllCameraStreams, useStreamBrokerListAllProfileSlots, useStreamBrokerListClients, useStreamBrokerProbeStream, useStreamBrokerProduceEventMedia, useStreamBrokerPublishCameraStream, useStreamBrokerPullAudioChunks, useStreamBrokerPullFrameHandles, useStreamBrokerRegenerateRtspToken, useStreamBrokerReleaseEgressTranscode, useStreamBrokerReleaseStreamWithCodec, useStreamBrokerRenderPreBufferClip, useStreamBrokerRestartProfile, useStreamBrokerRetractCameraStream, useStreamBrokerSetDeviceAudioMute, useStreamBrokerSetPreBufferDuration, useStreamBrokerSetRtspEnabled, useStreamBrokerSubscribeAudioChunks, useStreamBrokerSubscribeFrames, useStreamBrokerUnassignProfile, useStreamBrokerUnsubscribeAudioChunks, useStreamBrokerUnsubscribeFrames, useStreamCatalogGetCatalog, useStreamParamsGetConfigSchema, useStreamParamsGetOptions, useStreamParamsGetStatus, useStreamParamsSetProfile, useSwitchGetStatus, useSwitchSetState, useSystem, useSystemDetectSiteLocation, useSystemFeatureFlags, useSystemForceRetentionCleanup, useSystemGetRetentionConfig, useSystemGetSiteLocation, useSystemHealth, useSystemInfo, useSystemMutation, useSystemNetworkAddresses, useSystemQuery, useSystemSetRetentionConfig, useSystemSetSiteLocation, useTamperGetStatus, useTemperatureSensorGetStatus, useTerminalSessionAdoptLegacyMonitor, useTerminalSessionClose, useTerminalSessionCreateInstance, useTerminalSessionDeleteInstance, useTerminalSessionListInstances, useTerminalSessionListLegacyCameras, useTerminalSessionListProfiles, useTerminalSessionListSessions, useTerminalSessionOpenSession, useTerminalSessionPullOutput, useTerminalSessionResize, useTerminalSessionSetInstanceEnabled, useTerminalSessionUpdateInstance, useTerminalSessionWriteInput, useThemeMode, useToastOnToast, useTurnProviderGetTurnServers, useUpdateGetStatus, useUpdateInstallUpdate, useUserManagementConfirmTotp, useUserManagementCreateApiKey, useUserManagementCreateScopedToken, useUserManagementCreateUser, useUserManagementDeleteUser, useUserManagementDisableTotp, useUserManagementGetTotpStatus, useUserManagementListApiKeys, useUserManagementListOauthSessions, useUserManagementListScopedTokens, useUserManagementListUsers, useUserManagementOauthExchangeCode, useUserManagementOauthIssueCode, useUserManagementOauthRefresh, useUserManagementOauthVerifyAccessToken, useUserManagementResetPassword, useUserManagementRevokeApiKey, useUserManagementRevokeOauthSession, useUserManagementRevokeScopedToken, useUserManagementSetUserScopes, useUserManagementSetupTotp, useUserManagementUpdateUser, useUserManagementValidateApiKey, useUserManagementValidateCredentials, useUserManagementValidateScopedToken, useUserManagementVerifyTotp, useVacuumControlGetStatus, useVacuumControlLocate, useVacuumControlPause, useVacuumControlReturnToBase, useVacuumControlSetFanSpeed, useVacuumControlStart, useVacuumControlStop, useValveClose, useValveGetStatus, useValveOpen, useValveSetPosition, useValveStop, useVibrationGetStatus, useVideoclipsGetClipPlayback, useVideoclipsListClips, useVodPlayback, useWaterHeaterGetStatus, useWaterHeaterSetAway, useWaterHeaterSetOperationMode, useWaterHeaterSetTargetTemp, useWeatherGetStatus, useWebrtcSessionAddIceCandidate, useWebrtcSessionCloseSession, useWebrtcSessionCreateSession, useWebrtcSessionGetIceCandidates, useWebrtcSessionGetSessionState, useWebrtcSessionHandleAnswer, useWebrtcSessionHandleOffer, useWebrtcSessionHasAdaptiveBitrate, useWebrtcSessionListStreams, useWidget, useWidgetMetadata, useWidgetRegistry, useZoneAnalyticsGetCameraHistory, useZoneAnalyticsGetCurrentSnapshot, useZoneAnalyticsGetUnzonedHistory, useZoneAnalyticsGetZoneHistory, useZoneEditing, useZoneRulesListRules, useZoneRulesSetRules, useZonesAddZone, useZonesListZones, useZonesRemoveZone, useZonesUpdateZone, vacuumStateMeta, validateScopes, valveStateMeta, variantLabel, waterHeaterPhase, waterHeaterTint, weatherConditionMeta, weatherTint };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/ui-library",
3
- "version": "1.2.67",
3
+ "version": "1.2.69",
4
4
  "type": "module",
5
5
  "main": "dist/index.cjs",
6
6
  "module": "dist/index.js",