@camstack/system 1.2.177 → 1.2.179

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/dist/addon-runner.js +1 -1
  2. package/dist/addon-runner.mjs +1 -1
  3. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.js +1 -1
  4. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.mjs +1 -1
  5. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.js +1 -1
  6. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.mjs +1 -1
  7. package/dist/builtins/alerts/alerts.addon.js +1 -1
  8. package/dist/builtins/alerts/alerts.addon.mjs +1 -1
  9. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.js +1 -1
  10. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.mjs +1 -1
  11. package/dist/builtins/console-logging/index.js +1 -1
  12. package/dist/builtins/console-logging/index.mjs +1 -1
  13. package/dist/builtins/core-blocks/core-blocks.addon.js +1 -1
  14. package/dist/builtins/core-blocks/core-blocks.addon.mjs +1 -1
  15. package/dist/builtins/device-manager/device-linked-devices.d.ts +8 -0
  16. package/dist/builtins/device-manager/device-manager.addon.js +8 -4
  17. package/dist/builtins/device-manager/device-manager.addon.mjs +8 -4
  18. package/dist/builtins/doorbell/virtual-doorbell.addon.js +1 -1
  19. package/dist/builtins/doorbell/virtual-doorbell.addon.mjs +1 -1
  20. package/dist/builtins/hub-forwarder/index.js +1 -1
  21. package/dist/builtins/hub-forwarder/index.mjs +1 -1
  22. package/dist/builtins/liveness-monitor/liveness-monitor.addon.js +1 -1
  23. package/dist/builtins/liveness-monitor/liveness-monitor.addon.mjs +1 -1
  24. package/dist/builtins/local-auth/local-auth.addon.js +1 -1
  25. package/dist/builtins/local-auth/local-auth.addon.mjs +1 -1
  26. package/dist/builtins/local-network/local-network.addon.js +1 -1
  27. package/dist/builtins/local-network/local-network.addon.mjs +1 -1
  28. package/dist/builtins/loki-logging/index.js +1 -1
  29. package/dist/builtins/loki-logging/index.mjs +1 -1
  30. package/dist/builtins/native-metrics/native-metrics.addon.js +1 -1
  31. package/dist/builtins/native-metrics/native-metrics.addon.mjs +1 -1
  32. package/dist/builtins/platform-probe/index.js +1 -1
  33. package/dist/builtins/platform-probe/index.mjs +1 -1
  34. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.js +1 -1
  35. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.mjs +1 -1
  36. package/dist/builtins/snapshot/index.js +1 -1
  37. package/dist/builtins/snapshot/index.mjs +1 -1
  38. package/dist/builtins/sqlite-storage/filesystem-storage.addon.js +1 -1
  39. package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs +1 -1
  40. package/dist/builtins/sqlite-storage/filter-compiler.d.ts +10 -0
  41. package/dist/builtins/sqlite-storage/sqlite-settings.addon.js +0 -0
  42. package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +0 -0
  43. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js +1 -1
  44. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs +1 -1
  45. package/dist/builtins/system-config/system-config.addon.js +1 -1
  46. package/dist/builtins/system-config/system-config.addon.mjs +1 -1
  47. package/dist/builtins/winston-logging/index.js +1 -1
  48. package/dist/builtins/winston-logging/index.mjs +1 -1
  49. package/dist/{dist-DkVaJ5vG.js → dist-C7qWwrK1.js} +136 -4
  50. package/dist/{dist-C-8k9Z9W.mjs → dist-L_39vRmH.mjs} +131 -5
  51. package/dist/index.js +2 -2
  52. package/dist/index.mjs +2 -2
  53. package/dist/{manifest-system-deps-4NeY_8iQ.mjs → manifest-system-deps-CMOGc5nC.mjs} +1 -1
  54. package/dist/{manifest-system-deps-BbB94ozU.js → manifest-system-deps-PAIfmNun.js} +1 -1
  55. package/dist/{retired-settings-keys-B1ij-xtH.js → retired-settings-keys-3soU9pfP.js} +1 -1
  56. package/dist/{retired-settings-keys-wfKn2-Sk.mjs → retired-settings-keys-CnbKAxmX.mjs} +1 -1
  57. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  const require_chunk = require("./chunk-Cek0wNdY.js");
2
- const require_manifest_system_deps = require("./manifest-system-deps-BbB94ozU.js");
2
+ const require_manifest_system_deps = require("./manifest-system-deps-PAIfmNun.js");
3
3
  const require_custom_action_registry = require("./custom-action-registry-jY0NOZK8.js");
4
4
  let node_path = require("node:path");
5
5
  node_path = require_chunk.__toESM(node_path);
@@ -1,4 +1,4 @@
1
- import { A as createUdsLoggerWithControl, Ft as RUNNER_RSS_BUDGET_ENV, Jt as startRunnerHeapWatch, Qt as emitHeapDiagnosticReport, a as createUdsAddonContext, bt as resolveAddonClass, it as setWorkerNativeCapsChangeListener, j as LocalChildClient, n as installManifestPythonDeps, nt as getWorkerNativeCapSnapshot, ot as validateProviderRegistrations, t as installManifestSystemDeps, tt as getWorkerNativeCapProvider, yt as installManifestNativeDeps } from "./manifest-system-deps-4NeY_8iQ.mjs";
1
+ import { A as createUdsLoggerWithControl, Ft as RUNNER_RSS_BUDGET_ENV, Jt as startRunnerHeapWatch, Qt as emitHeapDiagnosticReport, a as createUdsAddonContext, bt as resolveAddonClass, it as setWorkerNativeCapsChangeListener, j as LocalChildClient, n as installManifestPythonDeps, nt as getWorkerNativeCapSnapshot, ot as validateProviderRegistrations, t as installManifestSystemDeps, tt as getWorkerNativeCapProvider, yt as installManifestNativeDeps } from "./manifest-system-deps-CMOGc5nC.mjs";
2
2
  import { t as CustomActionRegistry } from "./custom-action-registry-F__gp_VX.mjs";
3
3
  import { register } from "node:module";
4
4
  import * as path$1 from "node:path";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-DkVaJ5vG.js");
6
+ const require_dist = require("../../dist-C7qWwrK1.js");
7
7
  const require_settle_sources = require("../../settle-sources-Bhsy57y-.js");
8
8
  let node_crypto = require("node:crypto");
9
9
  let node_path = require("node:path");
@@ -1,4 +1,4 @@
1
- import { E as addonPagesCapability, Nt as errMsg, Pt as BaseAddon, on as EventCategory } from "../../dist-C-8k9Z9W.mjs";
1
+ import { E as addonPagesCapability, Ft as BaseAddon, Pt as errMsg, sn as EventCategory } from "../../dist-L_39vRmH.mjs";
2
2
  import { t as settleSourcesWithTimeout } from "../../settle-sources-CDtNC8ub.mjs";
3
3
  import { createHash, randomUUID } from "node:crypto";
4
4
  import * as path$1 from "node:path";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-DkVaJ5vG.js");
6
+ const require_dist = require("../../dist-C7qWwrK1.js");
7
7
  const require_settle_sources = require("../../settle-sources-Bhsy57y-.js");
8
8
  let node_crypto = require("node:crypto");
9
9
  let node_path = require("node:path");
@@ -1,4 +1,4 @@
1
- import { Nt as errMsg, O as addonWidgetsCapability, Pt as BaseAddon, on as EventCategory } from "../../dist-C-8k9Z9W.mjs";
1
+ import { Ft as BaseAddon, O as addonWidgetsCapability, Pt as errMsg, sn as EventCategory } from "../../dist-L_39vRmH.mjs";
2
2
  import { t as settleSourcesWithTimeout } from "../../settle-sources-CDtNC8ub.mjs";
3
3
  import { createHash, randomUUID } from "node:crypto";
4
4
  import * as path$1 from "node:path";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-DkVaJ5vG.js");
6
+ const require_dist = require("../../dist-C7qWwrK1.js");
7
7
  //#region src/builtins/alerts/prune-policy.ts
8
8
  /**
9
9
  * Ids older than `cutoffMs`, oldest first.
@@ -1,4 +1,4 @@
1
- import { Nt as errMsg, Pt as BaseAddon, k as alertsCapability, n as AlertSchema, on as EventCategory, qt as createEvent } from "../../dist-C-8k9Z9W.mjs";
1
+ import { Ft as BaseAddon, Jt as createEvent, Pt as errMsg, k as alertsCapability, n as AlertSchema, sn as EventCategory } from "../../dist-L_39vRmH.mjs";
2
2
  //#region src/builtins/alerts/prune-policy.ts
3
3
  /**
4
4
  * Ids older than `cutoffMs`, oldest first.
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-DkVaJ5vG.js");
6
+ const require_dist = require("../../dist-C7qWwrK1.js");
7
7
  let node_crypto = require("node:crypto");
8
8
  let buffer = require("buffer");
9
9
  let node_fs_promises = require("node:fs/promises");
@@ -1,4 +1,4 @@
1
- import { Pt as BaseAddon, j as backupCapability, on as EventCategory } from "../../dist-C-8k9Z9W.mjs";
1
+ import { Ft as BaseAddon, j as backupCapability, sn as EventCategory } from "../../dist-L_39vRmH.mjs";
2
2
  import { randomBytes, randomUUID } from "node:crypto";
3
3
  import { Buffer as Buffer$1 } from "buffer";
4
4
  import * as fsp from "node:fs/promises";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-DkVaJ5vG.js");
6
+ const require_dist = require("../../dist-C7qWwrK1.js");
7
7
  const require_formatter = require("../../formatter-DqAKDlvN.js");
8
8
  //#region src/builtins/console-logging/console-destination.ts
9
9
  var LEVEL_RANK = {
@@ -1,4 +1,4 @@
1
- import { Pt as BaseAddon, ct as logDestinationCapability } from "../../dist-C-8k9Z9W.mjs";
1
+ import { Ft as BaseAddon, ct as logDestinationCapability } from "../../dist-L_39vRmH.mjs";
2
2
  import { t as formatLogLine } from "../../formatter-B7qW8bPJ.mjs";
3
3
  //#region src/builtins/console-logging/console-destination.ts
4
4
  var LEVEL_RANK = {
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_chunk = require("../../chunk-Cek0wNdY.js");
3
- const require_dist = require("../../dist-DkVaJ5vG.js");
3
+ const require_dist = require("../../dist-C7qWwrK1.js");
4
4
  let node_crypto = require("node:crypto");
5
5
  let node_fs_promises = require("node:fs/promises");
6
6
  node_fs_promises = require_chunk.__toESM(node_fs_promises);
@@ -1,4 +1,4 @@
1
- import { I as coreBlockAddonId, L as coreBlockIdFromAddonId, Nt as errMsg, Pt as BaseAddon, R as coreBlocksCapability, c as CORE_BLOCK_ADDON_PREFIX, d as DeclaredDevices, l as CoreBlockSchema, s as CORE_BLOCKS_ADDON_ID } from "../../dist-C-8k9Z9W.mjs";
1
+ import { Ft as BaseAddon, I as coreBlockAddonId, L as coreBlockIdFromAddonId, Pt as errMsg, R as coreBlocksCapability, c as CORE_BLOCK_ADDON_PREFIX, d as DeclaredDevices, l as CoreBlockSchema, s as CORE_BLOCKS_ADDON_ID } from "../../dist-L_39vRmH.mjs";
2
2
  import { randomUUID } from "node:crypto";
3
3
  import * as fs from "node:fs/promises";
4
4
  import * as path$1 from "node:path";
@@ -22,6 +22,14 @@ export interface LinkCandidate {
22
22
  readonly parentDeviceId: number | null;
23
23
  readonly location: string | null;
24
24
  readonly type: DeviceType;
25
+ /**
26
+ * The child identity a container's stored pick is matched against. A NOT
27
+ * NULL column, so `slim` carries it — which is the whole reason the pick is
28
+ * keyed on it (see `ContainerChildRef.stableId`).
29
+ */
30
+ readonly stableId: string;
31
+ /** The container's own operator pick, when one was made. */
32
+ readonly primaryChildEntityId?: string | null;
25
33
  }
26
34
  /**
27
35
  * Pure resolution core: children ∪ (auto → same-location | manual → list),
@@ -3,8 +3,8 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-DkVaJ5vG.js");
7
- const require_retired_settings_keys = require("../../retired-settings-keys-B1ij-xtH.js");
6
+ const require_dist = require("../../dist-C7qWwrK1.js");
7
+ const require_retired_settings_keys = require("../../retired-settings-keys-3soU9pfP.js");
8
8
  let node_crypto = require("node:crypto");
9
9
  let _camstack_types_node = require("@camstack/types/node");
10
10
  //#region src/builtins/device-manager/adoption-job-engine.ts
@@ -2086,8 +2086,12 @@ function expandContainer(id, byId, byParent, visited, out) {
2086
2086
  }
2087
2087
  const nextVisited = new Set(visited);
2088
2088
  nextVisited.add(id);
2089
- const children = byParent.get(id) ?? [];
2090
- for (const child of children) expandContainer(child.id, byId, byParent, nextVisited, out);
2089
+ const primary = require_dist.resolveContainerPrimaryChild((byParent.get(id) ?? []).map((c) => ({
2090
+ id: c.id,
2091
+ stableId: c.stableId,
2092
+ type: c.type
2093
+ })), byId.get(id)?.primaryChildEntityId);
2094
+ if (primary !== null) expandContainer(primary.id, byId, byParent, nextVisited, out);
2091
2095
  }
2092
2096
  /**
2093
2097
  * Pure resolution core: children ∪ (auto → same-location | manual → list),
@@ -1,5 +1,5 @@
1
- import { Bt as DeviceType, H as deviceManagerCapability, J as enumerateSchemaFields, Nt as errMsg, P as buildStreamParamsConfigSchema, Pt as BaseAddon, Qt as isDeviceConfigCap, Rt as DeviceFeature, U as deviceStateCapability, Ut as WELL_KNOWN_TAB_MAP, W as deviceStatusCapability, a as CAMERA_SWITCH_ORDER, an as sleep, b as STREAM_PROFILE_META, bt as runtimeStatePolicyFor, f as DeviceStatusSchema, ft as normalizeUnit, mt as parseStreamParamsFormPatch, o as CAP_NAMES_WITH_STATUS, on as EventCategory, q as enumerateItemArrayFields, t as ALL_CAPABILITY_DEFINITIONS, zt as DeviceRole } from "../../dist-C-8k9Z9W.mjs";
2
- import { n as purgeRetiredSettingsRows } from "../../retired-settings-keys-wfKn2-Sk.mjs";
1
+ import { $t as isDeviceConfigCap, Bt as DeviceRole, Ft as BaseAddon, H as deviceManagerCapability, J as enumerateSchemaFields, P as buildStreamParamsConfigSchema, Pt as errMsg, U as deviceStateCapability, Vt as DeviceType, W as deviceStatusCapability, Wt as WELL_KNOWN_TAB_MAP, a as CAMERA_SWITCH_ORDER, b as STREAM_PROFILE_META, f as DeviceStatusSchema, ft as normalizeUnit, mt as parseStreamParamsFormPatch, o as CAP_NAMES_WITH_STATUS, on as sleep, q as enumerateItemArrayFields, sn as EventCategory, t as ALL_CAPABILITY_DEFINITIONS, xt as runtimeStatePolicyFor, yt as resolveContainerPrimaryChild, zt as DeviceFeature } from "../../dist-L_39vRmH.mjs";
2
+ import { n as purgeRetiredSettingsRows } from "../../retired-settings-keys-CnbKAxmX.mjs";
3
3
  import { randomUUID } from "node:crypto";
4
4
  import { canonicalDeviceFingerprint } from "@camstack/types/node";
5
5
  //#region src/builtins/device-manager/adoption-job-engine.ts
@@ -2081,8 +2081,12 @@ function expandContainer(id, byId, byParent, visited, out) {
2081
2081
  }
2082
2082
  const nextVisited = new Set(visited);
2083
2083
  nextVisited.add(id);
2084
- const children = byParent.get(id) ?? [];
2085
- for (const child of children) expandContainer(child.id, byId, byParent, nextVisited, out);
2084
+ const primary = resolveContainerPrimaryChild((byParent.get(id) ?? []).map((c) => ({
2085
+ id: c.id,
2086
+ stableId: c.stableId,
2087
+ type: c.type
2088
+ })), byId.get(id)?.primaryChildEntityId);
2089
+ if (primary !== null) expandContainer(primary.id, byId, byParent, nextVisited, out);
2086
2090
  }
2087
2091
  /**
2088
2092
  * Pure resolution core: children ∪ (auto → same-location | manual → list),
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-DkVaJ5vG.js");
6
+ const require_dist = require("../../dist-C7qWwrK1.js");
7
7
  //#region src/builtins/doorbell/trigger-engine.ts
8
8
  /**
9
9
  * Pure trigger logic for the virtual-doorbell builtin — edge detection over
@@ -1,4 +1,4 @@
1
- import { Bt as DeviceType, G as doorbellCapability, M as bareAddonId, Nt as errMsg, Pt as BaseAddon, Y as evaluateSensorEdge, _ as SOURCE_CAPS, nt as isSameAddonId, on as EventCategory, qt as createEvent, rt as isSourceCap, v as SOURCE_DEVICE_TYPES } from "../../dist-C-8k9Z9W.mjs";
1
+ import { Ft as BaseAddon, G as doorbellCapability, Jt as createEvent, M as bareAddonId, Pt as errMsg, Vt as DeviceType, Y as evaluateSensorEdge, _ as SOURCE_CAPS, nt as isSameAddonId, rt as isSourceCap, sn as EventCategory, v as SOURCE_DEVICE_TYPES } from "../../dist-L_39vRmH.mjs";
2
2
  //#region src/builtins/doorbell/trigger-engine.ts
3
3
  /**
4
4
  * Pure trigger logic for the virtual-doorbell builtin — edge detection over
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-DkVaJ5vG.js");
6
+ const require_dist = require("../../dist-C7qWwrK1.js");
7
7
  const require_formatter = require("../../formatter-DqAKDlvN.js");
8
8
  //#region src/builtins/hub-forwarder/hub-forwarder-destination.ts
9
9
  var DEFAULT_OUTBOUND_BUFFER_SIZE = 500;
@@ -1,4 +1,4 @@
1
- import { Pt as BaseAddon, ct as logDestinationCapability } from "../../dist-C-8k9Z9W.mjs";
1
+ import { Ft as BaseAddon, ct as logDestinationCapability } from "../../dist-L_39vRmH.mjs";
2
2
  import { t as formatLogLine } from "../../formatter-B7qW8bPJ.mjs";
3
3
  //#region src/builtins/hub-forwarder/hub-forwarder-destination.ts
4
4
  var DEFAULT_OUTBOUND_BUFFER_SIZE = 500;
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  require("../../chunk-Cek0wNdY.js");
3
- const require_dist = require("../../dist-DkVaJ5vG.js");
3
+ const require_dist = require("../../dist-C7qWwrK1.js");
4
4
  //#region src/builtins/liveness-monitor/liveness-checks.ts
5
5
  var NO_DEVICES = "liveness:no-devices";
6
6
  var ALL_OFFLINE = "liveness:all-devices-offline";
@@ -1,4 +1,4 @@
1
- import { Nt as errMsg, Pt as BaseAddon, on as EventCategory, qt as createEvent } from "../../dist-C-8k9Z9W.mjs";
1
+ import { Ft as BaseAddon, Jt as createEvent, Pt as errMsg, sn as EventCategory } from "../../dist-L_39vRmH.mjs";
2
2
  //#region src/builtins/liveness-monitor/liveness-checks.ts
3
3
  var NO_DEVICES = "liveness:no-devices";
4
4
  var ALL_OFFLINE = "liveness:all-devices-offline";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-DkVaJ5vG.js");
6
+ const require_dist = require("../../dist-C7qWwrK1.js");
7
7
  let node_crypto = require("node:crypto");
8
8
  node_crypto = require_chunk.__toESM(node_crypto);
9
9
  let crypto$1 = require("crypto");
@@ -1,5 +1,5 @@
1
1
  import { i as __require, o as __toESM, t as __commonJSMin } from "../../chunk-CNf5ZN-e.mjs";
2
- import { A as authProviderCapability, At as userManagementCapability, Pt as BaseAddon, T as UserRecordSchema, r as ApiKeyRecordSchema, x as ScopedTokenSchema } from "../../dist-C-8k9Z9W.mjs";
2
+ import { A as authProviderCapability, Ft as BaseAddon, T as UserRecordSchema, jt as userManagementCapability, r as ApiKeyRecordSchema, x as ScopedTokenSchema } from "../../dist-L_39vRmH.mjs";
3
3
  import * as crypto$2 from "node:crypto";
4
4
  import { createHash, randomUUID, timingSafeEqual } from "node:crypto";
5
5
  import nodeCrypto from "crypto";
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_chunk = require("../../chunk-Cek0wNdY.js");
3
- const require_dist = require("../../dist-DkVaJ5vG.js");
3
+ const require_dist = require("../../dist-C7qWwrK1.js");
4
4
  const require_tls = require("../../tls-BxQlomxd.js");
5
5
  let node_fs_promises = require("node:fs/promises");
6
6
  let node_path = require("node:path");
@@ -1,4 +1,4 @@
1
- import { Pt as BaseAddon, on as EventCategory, st as localNetworkCapability } from "../../dist-C-8k9Z9W.mjs";
1
+ import { Ft as BaseAddon, sn as EventCategory, st as localNetworkCapability } from "../../dist-L_39vRmH.mjs";
2
2
  import { S as readLanHttpState, _ as DEFAULT_LAN_HTTP_PORT, a as writeTlsMode, i as writeExtraSans, l as reissueTlsLeaf, n as readTlsAccessStatus, o as validateUploadedTls, r as readTlsMode, s as ensureTlsCert, t as readExtraSans, y as applyLanHttp } from "../../tls-DOTmtLCW.mjs";
3
3
  import { mkdir, writeFile } from "node:fs/promises";
4
4
  import { join } from "node:path";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-DkVaJ5vG.js");
6
+ const require_dist = require("../../dist-C7qWwrK1.js");
7
7
  //#region src/builtins/loki-logging/loki-payload.ts
8
8
  /**
9
9
  * Loki rejects a label name that is not a valid Prometheus label
@@ -1,4 +1,4 @@
1
- import { Pt as BaseAddon, ct as logDestinationCapability } from "../../dist-C-8k9Z9W.mjs";
1
+ import { Ft as BaseAddon, ct as logDestinationCapability } from "../../dist-L_39vRmH.mjs";
2
2
  //#region src/builtins/loki-logging/loki-payload.ts
3
3
  /**
4
4
  * Loki rejects a label name that is not a valid Prometheus label
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-DkVaJ5vG.js");
6
+ const require_dist = require("../../dist-C7qWwrK1.js");
7
7
  let node_fs_promises = require("node:fs/promises");
8
8
  let node_child_process = require("node:child_process");
9
9
  let node_util = require("node:util");
@@ -1,4 +1,4 @@
1
- import { Nt as errMsg, Pt as BaseAddon, Q as foldSnapshotByFunction, _t as reducePoints, dt as metricsProviderCapability, on as EventCategory, qt as createEvent, vt as resolveBucketMs } from "../../dist-C-8k9Z9W.mjs";
1
+ import { Ft as BaseAddon, Jt as createEvent, Pt as errMsg, Q as foldSnapshotByFunction, _t as reducePoints, dt as metricsProviderCapability, sn as EventCategory, vt as resolveBucketMs } from "../../dist-L_39vRmH.mjs";
2
2
  import { readFile, readdir } from "node:fs/promises";
3
3
  import { execFile, execFileSync } from "node:child_process";
4
4
  import { promisify } from "node:util";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-DkVaJ5vG.js");
6
+ const require_dist = require("../../dist-C7qWwrK1.js");
7
7
  let node_child_process = require("node:child_process");
8
8
  let node_util = require("node:util");
9
9
  let node_fs = require("node:fs");
@@ -1,5 +1,5 @@
1
1
  import { o as __toESM } from "../../chunk-CNf5ZN-e.mjs";
2
- import { Ct as scoreRuntimes, K as enumerateInferenceDevices, Nt as errMsg, Pt as BaseAddon, Yt as emitReadiness, ht as platformProbeCapability, on as EventCategory } from "../../dist-C-8k9Z9W.mjs";
2
+ import { Ft as BaseAddon, K as enumerateInferenceDevices, Pt as errMsg, Xt as emitReadiness, ht as platformProbeCapability, sn as EventCategory, wt as scoreRuntimes } from "../../dist-L_39vRmH.mjs";
3
3
  import { execFile } from "node:child_process";
4
4
  import { promisify } from "node:util";
5
5
  import * as fs from "node:fs";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-DkVaJ5vG.js");
6
+ const require_dist = require("../../dist-C7qWwrK1.js");
7
7
  //#region src/builtins/remote-access-orchestrator/enabled-providers-reconcile.ts
8
8
  /**
9
9
  * Reconcile the durable `enabledProviders` set against authoritative
@@ -1,4 +1,4 @@
1
- import { Pt as BaseAddon, on as EventCategory } from "../../dist-C-8k9Z9W.mjs";
1
+ import { Ft as BaseAddon, sn as EventCategory } from "../../dist-L_39vRmH.mjs";
2
2
  //#region src/builtins/remote-access-orchestrator/enabled-providers-reconcile.ts
3
3
  /**
4
4
  * Reconcile the durable `enabledProviders` set against authoritative
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-DkVaJ5vG.js");
6
+ const require_dist = require("../../dist-C7qWwrK1.js");
7
7
  let zod = require("zod");
8
8
  let node_crypto = require("node:crypto");
9
9
  let _camstack_types_node = require("@camstack/types/node");
@@ -1,4 +1,4 @@
1
- import { $t as nodePin, Bt as DeviceType, M as bareAddonId, N as batteryCapability, Nt as errMsg, Pt as BaseAddon, Rt as DeviceFeature, Tt as snapshotCapability, V as deriveBatteryPresence, i as BatteryStatusSchema, kt as streamQualityLabel, on as EventCategory } from "../../dist-C-8k9Z9W.mjs";
1
+ import { At as streamQualityLabel, Et as snapshotCapability, Ft as BaseAddon, M as bareAddonId, N as batteryCapability, Pt as errMsg, V as deriveBatteryPresence, Vt as DeviceType, en as nodePin, i as BatteryStatusSchema, sn as EventCategory, zt as DeviceFeature } from "../../dist-L_39vRmH.mjs";
2
2
  import { z } from "zod";
3
3
  import { randomUUID } from "node:crypto";
4
4
  import { signExpiringUrl, verifyExpiringUrl } from "@camstack/types/node";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-DkVaJ5vG.js");
6
+ const require_dist = require("../../dist-C7qWwrK1.js");
7
7
  let node_crypto = require("node:crypto");
8
8
  let node_fs_promises = require("node:fs/promises");
9
9
  let node_path = require("node:path");
@@ -1,4 +1,4 @@
1
- import { Ot as storageProviderCapability, Pt as BaseAddon, Z as filesystemBrowseCapability } from "../../dist-C-8k9Z9W.mjs";
1
+ import { Ft as BaseAddon, Z as filesystemBrowseCapability, kt as storageProviderCapability } from "../../dist-L_39vRmH.mjs";
2
2
  import { randomUUID } from "node:crypto";
3
3
  import { mkdir, readdir, realpath, statfs } from "node:fs/promises";
4
4
  import * as path$1 from "node:path";
@@ -80,6 +80,16 @@ export interface QueryFilterInput {
80
80
  * is not a contradiction.
81
81
  */
82
82
  readonly whereNot?: Readonly<Record<string, unknown>>;
83
+ /**
84
+ * JSON-array membership, compiled as
85
+ * `(expr IS NULL OR NOT json_valid(expr) OR EXISTS (SELECT 1 FROM
86
+ * json_each(expr) WHERE value IN (…)))`.
87
+ *
88
+ * A SUPERSET prefilter on purpose — see `QueryFilter.whereJsonArrayAny`. An
89
+ * unreadable column keeps its row rather than losing it, so this can narrow
90
+ * a read without ever changing an answer.
91
+ */
92
+ readonly whereJsonArrayAny?: Readonly<Record<string, readonly unknown[]>>;
83
93
  }
84
94
  /**
85
95
  * The predicate-only filter a bulk mutation accepts — no ordering, no limit.
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-DkVaJ5vG.js");
6
+ const require_dist = require("../../dist-C7qWwrK1.js");
7
7
  const require_hub_cap_forward = require("../../hub-cap-forward-DmHNjbB0.js");
8
8
  let zod = require("zod");
9
9
  let node_crypto = require("node:crypto");
@@ -1,4 +1,4 @@
1
- import { C as StorageLocationTypeSchema, Dt as storageMigrationCapability, Et as storageCapability, F as collectSecretConfigKeys, Pt as BaseAddon, S as StorageCleanupJobSchema, en as parseJsonObject, h as REDACTED_SECRET, w as StorageMigrationJobSchema, wt as settingsStoreCapability } from "../../dist-C-8k9Z9W.mjs";
1
+ import { C as StorageLocationTypeSchema, Dt as storageCapability, F as collectSecretConfigKeys, Ft as BaseAddon, Ot as storageMigrationCapability, S as StorageCleanupJobSchema, Tt as settingsStoreCapability, h as REDACTED_SECRET, tn as parseJsonObject, w as StorageMigrationJobSchema } from "../../dist-L_39vRmH.mjs";
2
2
  import { t as HUB_CAP_FWD_ACTION } from "../../hub-cap-forward-BdT320dq.mjs";
3
3
  import { z } from "zod";
4
4
  import { randomUUID } from "node:crypto";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-DkVaJ5vG.js");
6
+ const require_dist = require("../../dist-C7qWwrK1.js");
7
7
  //#region src/builtins/system-config/system-config.addon.ts
8
8
  /**
9
9
  * Built-in `system-config` addon — Phase 4 of the settings redesign.
@@ -1,4 +1,4 @@
1
- import { Nt as errMsg, Pt as BaseAddon, Zt as hydrateSchema } from "../../dist-C-8k9Z9W.mjs";
1
+ import { Ft as BaseAddon, Pt as errMsg, Qt as hydrateSchema } from "../../dist-L_39vRmH.mjs";
2
2
  //#region src/builtins/system-config/system-config.addon.ts
3
3
  /**
4
4
  * Built-in `system-config` addon — Phase 4 of the settings redesign.
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-DkVaJ5vG.js");
6
+ const require_dist = require("../../dist-C7qWwrK1.js");
7
7
  const require_formatter = require("../../formatter-DqAKDlvN.js");
8
8
  let node_path = require("node:path");
9
9
  node_path = require_chunk.__toESM(node_path);
@@ -1,4 +1,4 @@
1
- import { Pt as BaseAddon, ct as logDestinationCapability } from "../../dist-C-8k9Z9W.mjs";
1
+ import { Ft as BaseAddon, ct as logDestinationCapability } from "../../dist-L_39vRmH.mjs";
2
2
  import { t as formatLogLine } from "../../formatter-B7qW8bPJ.mjs";
3
3
  import * as path$1 from "node:path";
4
4
  import path from "node:path";
@@ -18017,7 +18017,20 @@ var RecentTracksQueryInput = zod.z.object({
18017
18017
  projection: TrackProjectionSchema.optional(),
18018
18018
  /** Include stationary-promoted rows (parked objects). Default false: the
18019
18019
  * feed lists passages; parking records live on the stationary registry. */
18020
- includeStationary: zod.z.boolean().optional()
18020
+ includeStationary: zod.z.boolean().optional(),
18021
+ /**
18022
+ * Restrict to these track classes. ABSENT or EMPTY means no filter.
18023
+ *
18024
+ * The same filter `listTracks` takes, because the timeline's class chips must
18025
+ * mean the same thing whether the scope is one camera or twelve. Until this
18026
+ * existed the scoped feed downloaded a page and narrowed it on the phone
18027
+ * while the single-camera path narrowed the read — one filter, two costs.
18028
+ *
18029
+ * A SUPERSET prefilter on `classes[]`, like its single-camera twin: rows
18030
+ * whose class list is unreadable are kept, and the client's rule stays the
18031
+ * exact one.
18032
+ */
18033
+ classes: zod.z.array(zod.z.string()).optional()
18021
18034
  });
18022
18035
  var RecentTracksPageSchema = zod.z.object({
18023
18036
  /** Merged page, ordered by (`lastSeen` DESC, `trackId` DESC). */
@@ -18419,7 +18432,21 @@ var pipelineAnalyticsCapability = {
18419
18432
  /** Include stationary-promoted rows (parked objects handed to the
18420
18433
  * stationary registry). Default false: the timeline lists passages,
18421
18434
  * not parking records (operator decision, 2026-08-15). */
18422
- includeStationary: zod.z.boolean().optional()
18435
+ includeStationary: zod.z.boolean().optional(),
18436
+ /**
18437
+ * Restrict to these track classes. ABSENT or EMPTY means no filter.
18438
+ *
18439
+ * Added 2026-09-03: the timeline's class chips filtered in the CLIENT,
18440
+ * on a day of rows already downloaded. The zone filter had been moved
18441
+ * here for exactly that reason — and it is also what lets the rows come
18442
+ * back `slim` — but the class filter was left behind, so a narrow
18443
+ * selection was still a wide read followed by a wide discard.
18444
+ *
18445
+ * Empty is "show all", not "nothing matches": a chip row with nothing
18446
+ * selected is an operator who has not narrowed anything, and an empty
18447
+ * timeline would read as a camera that saw nothing.
18448
+ */
18449
+ classes: zod.z.array(zod.z.string()).optional()
18423
18450
  }), zod.z.array(TrackSchema).readonly()),
18424
18451
  /**
18425
18452
  * Batched cluster-wide track listing — ONE call for the events page /
@@ -24050,8 +24077,22 @@ var automationControlCapability = {
24050
24077
  * threshold.
24051
24078
  */
24052
24079
  var BatteryStatusSchema = zod.z.object({
24053
- /** 0..100 inclusive. Firmware-reported. */
24054
- percentage: zod.z.number().min(0).max(100),
24080
+ /**
24081
+ * 0..100 inclusive, firmware-reported. **`null` means NOT YET KNOWN** — the
24082
+ * provider has registered the capability but no reading has landed.
24083
+ *
24084
+ * It is nullable because it was not, and the only value a provider could
24085
+ * seed with was `0`. A battery camera behind an NVR therefore announced
24086
+ * itself at 0% on every start and corrected itself a moment later, which is
24087
+ * indistinguishable from a real flat battery: it fires the low-battery alert
24088
+ * every time the hub restarts. Unknown is not empty (D315), and on a battery
24089
+ * reading the difference is an alarm.
24090
+ *
24091
+ * `vacuum-control` and `lawn-mower-control` already model it this way.
24092
+ * Consumers must SKIP a null rather than coerce it — `battery-band` already
24093
+ * declines to band a non-finite reading, which is the correct shape.
24094
+ */
24095
+ percentage: zod.z.number().min(0).max(100).nullable(),
24055
24096
  /**
24056
24097
  * Charging source. `'dc'` covers wall/USB adapters; `'solar'` is
24057
24098
  * Reolink-specific for the Solar Panel 2 accessory (will become
@@ -33719,6 +33760,91 @@ var RUNTIME_DEFAULTS = {
33719
33760
  "auth.tokenExpiry": "30d"
33720
33761
  };
33721
33762
  /**
33763
+ * WHICH child a container stands for — one definition, for every consumer.
33764
+ *
33765
+ * A CONTAINER device has no controllable surface of its own: it groups entity
33766
+ * children (a Gree air-conditioner grouping a climate child plus light, x-fan
33767
+ * and health switches). Everything that has to show or act on a container has
33768
+ * to answer the same question — which child IS the container — and until now
33769
+ * three places answered it separately:
33770
+ *
33771
+ * - `ui-library/device-controls/primary-child.ts` (admin-ui rendering)
33772
+ * - `addon-provider-homeassistant` PARENT_TYPE_PRIORITY (adoption)
33773
+ * - the viewer's own `container-primary.ts` (linked-devices panel)
33774
+ *
33775
+ * Each carried the same list and a comment asking the others to stay in sync.
33776
+ * This is that list, in the one package all of them already depend on.
33777
+ *
33778
+ * `ui-library` and the server's linked-devices expansion IMPORT it. Two
33779
+ * consumers cannot, and keep a checked copy instead: the viewer resolves
33780
+ * `@camstack/types` from its own `node_modules` (an installed release, where a
33781
+ * newly added export simply is not there), and the Home Assistant provider
33782
+ * expresses the same precedence over the `DeviceType` enum because it answers
33783
+ * a different question from the same ordering. `scripts/check-container-
33784
+ * priority-in-sync.ts` fails the build when either drifts — the comment that
33785
+ * used to ask for this could not.
33786
+ *
33787
+ * The rule has two halves and the ORDER matters: an operator's explicit pick
33788
+ * wins outright, and only in its absence does type priority decide. The pick is
33789
+ * keyed on the child's re-sync-stable `entityId`, not its numeric id, so it
33790
+ * survives a re-sync that reallocates ids.
33791
+ */
33792
+ /**
33793
+ * Type priority, most→least "primary". An actuator (climate / lock / cover / …)
33794
+ * outranks a bare `switch` so a container's defining child wins over its
33795
+ * auxiliary switches. Unknown or absent types sort after every entry.
33796
+ *
33797
+ * NB: `siren` deliberately sits BELOW `switch` — it is a switch-family
33798
+ * actuator, and a camera's siren must not out-rank the thing the container is.
33799
+ *
33800
+ * These strings are matched against a child's `DeviceType` VALUE, so they must
33801
+ * equal the enum's string values.
33802
+ */
33803
+ var CONTAINER_CHILD_PRIORITY = [
33804
+ "media-player",
33805
+ "alarm-panel",
33806
+ "thermostat",
33807
+ "climate",
33808
+ "humidifier",
33809
+ "water-heater",
33810
+ "lock",
33811
+ "cover",
33812
+ "valve",
33813
+ "fan",
33814
+ "vacuum",
33815
+ "lawn-mower",
33816
+ "light",
33817
+ "switch",
33818
+ "siren",
33819
+ "button",
33820
+ "control",
33821
+ "notifier",
33822
+ "script",
33823
+ "automation",
33824
+ "update",
33825
+ "presence",
33826
+ "weather",
33827
+ "image",
33828
+ "sensor"
33829
+ ];
33830
+ function rank(type) {
33831
+ const i = CONTAINER_CHILD_PRIORITY.indexOf(type);
33832
+ return i === -1 ? CONTAINER_CHILD_PRIORITY.length : i;
33833
+ }
33834
+ /**
33835
+ * The child a container stands for: the operator's pick when it still exists,
33836
+ * else the highest-priority type. `null` for a childless container — a caller
33837
+ * must decide what an empty container means for it, rather than being handed a
33838
+ * child that is not there.
33839
+ */
33840
+ function resolveContainerPrimaryChild(children, overrideEntityId) {
33841
+ if (overrideEntityId !== void 0 && overrideEntityId !== null) {
33842
+ const picked = children.find((c) => c.stableId === overrideEntityId) ?? children.find((c) => c.entityId !== void 0 && c.entityId === overrideEntityId);
33843
+ if (picked !== void 0) return picked;
33844
+ }
33845
+ return [...children].toSorted((a, b) => rank(a.type) - rank(b.type))[0] ?? null;
33846
+ }
33847
+ /**
33722
33848
  * Accessory device helpers — shared across drivers.
33723
33849
  *
33724
33850
  * Many vendor-specific drivers register accessory child devices on
@@ -43646,6 +43772,12 @@ Object.defineProperty(exports, "resolveCapMount", {
43646
43772
  return resolveCapMount;
43647
43773
  }
43648
43774
  });
43775
+ Object.defineProperty(exports, "resolveContainerPrimaryChild", {
43776
+ enumerable: true,
43777
+ get: function() {
43778
+ return resolveContainerPrimaryChild;
43779
+ }
43780
+ });
43649
43781
  Object.defineProperty(exports, "resolveMethodAuth", {
43650
43782
  enumerable: true,
43651
43783
  get: function() {
@@ -18017,7 +18017,20 @@ var RecentTracksQueryInput = z.object({
18017
18017
  projection: TrackProjectionSchema.optional(),
18018
18018
  /** Include stationary-promoted rows (parked objects). Default false: the
18019
18019
  * feed lists passages; parking records live on the stationary registry. */
18020
- includeStationary: z.boolean().optional()
18020
+ includeStationary: z.boolean().optional(),
18021
+ /**
18022
+ * Restrict to these track classes. ABSENT or EMPTY means no filter.
18023
+ *
18024
+ * The same filter `listTracks` takes, because the timeline's class chips must
18025
+ * mean the same thing whether the scope is one camera or twelve. Until this
18026
+ * existed the scoped feed downloaded a page and narrowed it on the phone
18027
+ * while the single-camera path narrowed the read — one filter, two costs.
18028
+ *
18029
+ * A SUPERSET prefilter on `classes[]`, like its single-camera twin: rows
18030
+ * whose class list is unreadable are kept, and the client's rule stays the
18031
+ * exact one.
18032
+ */
18033
+ classes: z.array(z.string()).optional()
18021
18034
  });
18022
18035
  var RecentTracksPageSchema = z.object({
18023
18036
  /** Merged page, ordered by (`lastSeen` DESC, `trackId` DESC). */
@@ -18419,7 +18432,21 @@ var pipelineAnalyticsCapability = {
18419
18432
  /** Include stationary-promoted rows (parked objects handed to the
18420
18433
  * stationary registry). Default false: the timeline lists passages,
18421
18434
  * not parking records (operator decision, 2026-08-15). */
18422
- includeStationary: z.boolean().optional()
18435
+ includeStationary: z.boolean().optional(),
18436
+ /**
18437
+ * Restrict to these track classes. ABSENT or EMPTY means no filter.
18438
+ *
18439
+ * Added 2026-09-03: the timeline's class chips filtered in the CLIENT,
18440
+ * on a day of rows already downloaded. The zone filter had been moved
18441
+ * here for exactly that reason — and it is also what lets the rows come
18442
+ * back `slim` — but the class filter was left behind, so a narrow
18443
+ * selection was still a wide read followed by a wide discard.
18444
+ *
18445
+ * Empty is "show all", not "nothing matches": a chip row with nothing
18446
+ * selected is an operator who has not narrowed anything, and an empty
18447
+ * timeline would read as a camera that saw nothing.
18448
+ */
18449
+ classes: z.array(z.string()).optional()
18423
18450
  }), z.array(TrackSchema).readonly()),
18424
18451
  /**
18425
18452
  * Batched cluster-wide track listing — ONE call for the events page /
@@ -24050,8 +24077,22 @@ var automationControlCapability = {
24050
24077
  * threshold.
24051
24078
  */
24052
24079
  var BatteryStatusSchema = z.object({
24053
- /** 0..100 inclusive. Firmware-reported. */
24054
- percentage: z.number().min(0).max(100),
24080
+ /**
24081
+ * 0..100 inclusive, firmware-reported. **`null` means NOT YET KNOWN** — the
24082
+ * provider has registered the capability but no reading has landed.
24083
+ *
24084
+ * It is nullable because it was not, and the only value a provider could
24085
+ * seed with was `0`. A battery camera behind an NVR therefore announced
24086
+ * itself at 0% on every start and corrected itself a moment later, which is
24087
+ * indistinguishable from a real flat battery: it fires the low-battery alert
24088
+ * every time the hub restarts. Unknown is not empty (D315), and on a battery
24089
+ * reading the difference is an alarm.
24090
+ *
24091
+ * `vacuum-control` and `lawn-mower-control` already model it this way.
24092
+ * Consumers must SKIP a null rather than coerce it — `battery-band` already
24093
+ * declines to band a non-finite reading, which is the correct shape.
24094
+ */
24095
+ percentage: z.number().min(0).max(100).nullable(),
24055
24096
  /**
24056
24097
  * Charging source. `'dc'` covers wall/USB adapters; `'solar'` is
24057
24098
  * Reolink-specific for the Solar Panel 2 accessory (will become
@@ -33719,6 +33760,91 @@ var RUNTIME_DEFAULTS = {
33719
33760
  "auth.tokenExpiry": "30d"
33720
33761
  };
33721
33762
  /**
33763
+ * WHICH child a container stands for — one definition, for every consumer.
33764
+ *
33765
+ * A CONTAINER device has no controllable surface of its own: it groups entity
33766
+ * children (a Gree air-conditioner grouping a climate child plus light, x-fan
33767
+ * and health switches). Everything that has to show or act on a container has
33768
+ * to answer the same question — which child IS the container — and until now
33769
+ * three places answered it separately:
33770
+ *
33771
+ * - `ui-library/device-controls/primary-child.ts` (admin-ui rendering)
33772
+ * - `addon-provider-homeassistant` PARENT_TYPE_PRIORITY (adoption)
33773
+ * - the viewer's own `container-primary.ts` (linked-devices panel)
33774
+ *
33775
+ * Each carried the same list and a comment asking the others to stay in sync.
33776
+ * This is that list, in the one package all of them already depend on.
33777
+ *
33778
+ * `ui-library` and the server's linked-devices expansion IMPORT it. Two
33779
+ * consumers cannot, and keep a checked copy instead: the viewer resolves
33780
+ * `@camstack/types` from its own `node_modules` (an installed release, where a
33781
+ * newly added export simply is not there), and the Home Assistant provider
33782
+ * expresses the same precedence over the `DeviceType` enum because it answers
33783
+ * a different question from the same ordering. `scripts/check-container-
33784
+ * priority-in-sync.ts` fails the build when either drifts — the comment that
33785
+ * used to ask for this could not.
33786
+ *
33787
+ * The rule has two halves and the ORDER matters: an operator's explicit pick
33788
+ * wins outright, and only in its absence does type priority decide. The pick is
33789
+ * keyed on the child's re-sync-stable `entityId`, not its numeric id, so it
33790
+ * survives a re-sync that reallocates ids.
33791
+ */
33792
+ /**
33793
+ * Type priority, most→least "primary". An actuator (climate / lock / cover / …)
33794
+ * outranks a bare `switch` so a container's defining child wins over its
33795
+ * auxiliary switches. Unknown or absent types sort after every entry.
33796
+ *
33797
+ * NB: `siren` deliberately sits BELOW `switch` — it is a switch-family
33798
+ * actuator, and a camera's siren must not out-rank the thing the container is.
33799
+ *
33800
+ * These strings are matched against a child's `DeviceType` VALUE, so they must
33801
+ * equal the enum's string values.
33802
+ */
33803
+ var CONTAINER_CHILD_PRIORITY = [
33804
+ "media-player",
33805
+ "alarm-panel",
33806
+ "thermostat",
33807
+ "climate",
33808
+ "humidifier",
33809
+ "water-heater",
33810
+ "lock",
33811
+ "cover",
33812
+ "valve",
33813
+ "fan",
33814
+ "vacuum",
33815
+ "lawn-mower",
33816
+ "light",
33817
+ "switch",
33818
+ "siren",
33819
+ "button",
33820
+ "control",
33821
+ "notifier",
33822
+ "script",
33823
+ "automation",
33824
+ "update",
33825
+ "presence",
33826
+ "weather",
33827
+ "image",
33828
+ "sensor"
33829
+ ];
33830
+ function rank(type) {
33831
+ const i = CONTAINER_CHILD_PRIORITY.indexOf(type);
33832
+ return i === -1 ? CONTAINER_CHILD_PRIORITY.length : i;
33833
+ }
33834
+ /**
33835
+ * The child a container stands for: the operator's pick when it still exists,
33836
+ * else the highest-priority type. `null` for a childless container — a caller
33837
+ * must decide what an empty container means for it, rather than being handed a
33838
+ * child that is not there.
33839
+ */
33840
+ function resolveContainerPrimaryChild(children, overrideEntityId) {
33841
+ if (overrideEntityId !== void 0 && overrideEntityId !== null) {
33842
+ const picked = children.find((c) => c.stableId === overrideEntityId) ?? children.find((c) => c.entityId !== void 0 && c.entityId === overrideEntityId);
33843
+ if (picked !== void 0) return picked;
33844
+ }
33845
+ return [...children].toSorted((a, b) => rank(a.type) - rank(b.type))[0] ?? null;
33846
+ }
33847
+ /**
33722
33848
  * Accessory device helpers — shared across drivers.
33723
33849
  *
33724
33850
  * Many vendor-specific drivers register accessory child devices on
@@ -43058,4 +43184,4 @@ function enumerateInferenceDevices(hw) {
43058
43184
  return out;
43059
43185
  }
43060
43186
  //#endregion
43061
- export { isArrayOutputSchema as $, nodePin as $t, authProviderCapability as A, userManagementCapability as At, decodeVectorBase64 as B, DeviceType as Bt, StorageLocationTypeSchema as C, scoreRuntimes as Ct, addonSettingsCapability as D, storageMigrationCapability as Dt, addonPagesCapability as E, storageCapability as Et, collectSecretConfigKeys as F, DATAPLANE_SECRET_HEADER as Ft, doorbellCapability as G, asNumber as Gt, deviceManagerCapability as H, ReadinessTimeoutError as Ht, coreBlockAddonId as I, DEVICE_SETTINGS_CONTRIBUTION_METHODS as It, enumerateSchemaFields as J, emitDownForOwnedCaps as Jt, enumerateInferenceDevices as K, asString as Kt, coreBlockIdFromAddonId as L, DEVICE_STATUS_METHOD as Lt, bareAddonId as M, vectorStoreCapability as Mt, batteryCapability as N, errMsg as Nt, addonWidgetsCapability as O, storageProviderCapability as Ot, buildStreamParamsConfigSchema as P, BaseAddon as Pt, foldSnapshotByFunction as Q, isDeviceConfigCap as Qt, coreBlocksCapability as R, DeviceFeature as Rt, StorageCleanupJobSchema as S, scopesAllowDeviceCap as St, UserRecordSchema as T, snapshotCapability as Tt, deviceStateCapability as U, WELL_KNOWN_TAB_MAP as Ut, deriveBatteryPresence as V, ReadinessRegistry as Vt, deviceStatusCapability as W, asJsonObject as Wt, extractNestedAddonId as X, expandCapMethods as Xt, evaluateSensorEdge as Y, emitReadiness as Yt, filesystemBrowseCapability as Z, hydrateSchema as Zt, SOURCE_CAPS as _, reducePoints as _t, CAMERA_SWITCH_ORDER as a, sleep as an, kebabToCamel as at, STREAM_PROFILE_META as b, runtimeStatePolicyFor as bt, CORE_BLOCK_ADDON_PREFIX as c, logDestinationCapability as ct, DeclaredDevices as d, metricsProviderCapability as dt, parseJsonObject as en, isCollectionArrayMethod as et, DeviceStatusSchema as f, normalizeUnit as ft, RUNTIME_DEFAULTS as g, procedureAuthKey as gt, REDACTED_SECRET as h, platformProbeCapability as ht, BatteryStatusSchema as i, scopeKey as in, isVoidInput as it, backupCapability as j, vectorDimFromBase64 as jt, alertsCapability as k, streamQualityLabel as kt, CoreBlockSchema as l, logLevelAtMost as lt, METHOD_ACCESS_MAP as m, parseStreamParamsFormPatch as mt, AlertSchema as n, readinessKey as nn, isSameAddonId as nt, CAP_NAMES_WITH_STATUS as o, EventCategory as on, lifecycleJobSchema as ot, LOG_LEVEL_RANK as p, objectInputDeclaresAddonId as pt, enumerateItemArrayFields as q, createEvent as qt, ApiKeyRecordSchema as r, resolveCapMount as rn, isSourceCap as rt, CORE_BLOCKS_ADDON_ID as s, localNetworkCapability as st, ALL_CAPABILITY_DEFINITIONS as t, parseJsonUnknown as tn, isObjectInput as tt, DEFAULT_FIRST_SIGHTING_FRESHNESS_MS as u, looseSchema as ut, SOURCE_DEVICE_TYPES as v, resolveBucketMs as vt, StorageMigrationJobSchema as w, settingsStoreCapability as wt, ScopedTokenSchema as x, scopesAllowAddon as xt, STORAGE_ACCESS_FALLBACK as y, resolveMethodAuth as yt, dataStoreProviderCapability as z, DeviceRole as zt };
43187
+ export { isArrayOutputSchema as $, isDeviceConfigCap as $t, authProviderCapability as A, streamQualityLabel as At, decodeVectorBase64 as B, DeviceRole as Bt, StorageLocationTypeSchema as C, scopesAllowDeviceCap as Ct, addonSettingsCapability as D, storageCapability as Dt, addonPagesCapability as E, snapshotCapability as Et, collectSecretConfigKeys as F, BaseAddon as Ft, doorbellCapability as G, asJsonObject as Gt, deviceManagerCapability as H, ReadinessRegistry as Ht, coreBlockAddonId as I, DATAPLANE_SECRET_HEADER as It, enumerateSchemaFields as J, createEvent as Jt, enumerateInferenceDevices as K, asNumber as Kt, coreBlockIdFromAddonId as L, DEVICE_SETTINGS_CONTRIBUTION_METHODS as Lt, bareAddonId as M, vectorDimFromBase64 as Mt, batteryCapability as N, vectorStoreCapability as Nt, addonWidgetsCapability as O, storageMigrationCapability as Ot, buildStreamParamsConfigSchema as P, errMsg as Pt, foldSnapshotByFunction as Q, hydrateSchema as Qt, coreBlocksCapability as R, DEVICE_STATUS_METHOD as Rt, StorageCleanupJobSchema as S, scopesAllowAddon as St, UserRecordSchema as T, settingsStoreCapability as Tt, deviceStateCapability as U, ReadinessTimeoutError as Ut, deriveBatteryPresence as V, DeviceType as Vt, deviceStatusCapability as W, WELL_KNOWN_TAB_MAP as Wt, extractNestedAddonId as X, emitReadiness as Xt, evaluateSensorEdge as Y, emitDownForOwnedCaps as Yt, filesystemBrowseCapability as Z, expandCapMethods as Zt, SOURCE_CAPS as _, reducePoints as _t, CAMERA_SWITCH_ORDER as a, scopeKey as an, kebabToCamel as at, STREAM_PROFILE_META as b, resolveMethodAuth as bt, CORE_BLOCK_ADDON_PREFIX as c, logDestinationCapability as ct, DeclaredDevices as d, metricsProviderCapability as dt, nodePin as en, isCollectionArrayMethod as et, DeviceStatusSchema as f, normalizeUnit as ft, RUNTIME_DEFAULTS as g, procedureAuthKey as gt, REDACTED_SECRET as h, platformProbeCapability as ht, BatteryStatusSchema as i, resolveCapMount as in, isVoidInput as it, backupCapability as j, userManagementCapability as jt, alertsCapability as k, storageProviderCapability as kt, CoreBlockSchema as l, logLevelAtMost as lt, METHOD_ACCESS_MAP as m, parseStreamParamsFormPatch as mt, AlertSchema as n, parseJsonUnknown as nn, isSameAddonId as nt, CAP_NAMES_WITH_STATUS as o, sleep as on, lifecycleJobSchema as ot, LOG_LEVEL_RANK as p, objectInputDeclaresAddonId as pt, enumerateItemArrayFields as q, asString as qt, ApiKeyRecordSchema as r, readinessKey as rn, isSourceCap as rt, CORE_BLOCKS_ADDON_ID as s, EventCategory as sn, localNetworkCapability as st, ALL_CAPABILITY_DEFINITIONS as t, parseJsonObject as tn, isObjectInput as tt, DEFAULT_FIRST_SIGHTING_FRESHNESS_MS as u, looseSchema as ut, SOURCE_DEVICE_TYPES as v, resolveBucketMs as vt, StorageMigrationJobSchema as w, scoreRuntimes as wt, ScopedTokenSchema as x, runtimeStatePolicyFor as xt, STORAGE_ACCESS_FALLBACK as y, resolveContainerPrimaryChild as yt, dataStoreProviderCapability as z, DeviceFeature as zt };
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_chunk = require("./chunk-Cek0wNdY.js");
3
- const require_dist = require("./dist-DkVaJ5vG.js");
3
+ const require_dist = require("./dist-C7qWwrK1.js");
4
4
  const require_builtins_alerts_alerts_addon = require("./builtins/alerts/alerts.addon.js");
5
5
  require("./builtins/alerts/index.js");
6
6
  const require_formatter = require("./formatter-DqAKDlvN.js");
@@ -27,7 +27,7 @@ require("./builtins/system-config/index.js");
27
27
  const require_builtins_winston_logging_index = require("./builtins/winston-logging/index.js");
28
28
  const require_file_data_plane = require("./file-data-plane-DO8KbxCe.js");
29
29
  const require_tls$1 = require("./tls-BxQlomxd.js");
30
- const require_manifest_system_deps = require("./manifest-system-deps-BbB94ozU.js");
30
+ const require_manifest_system_deps = require("./manifest-system-deps-PAIfmNun.js");
31
31
  const require_resource_monitor = require("./resource-monitor-CdnzxBLP.js");
32
32
  const require_custom_action_registry = require("./custom-action-registry-jY0NOZK8.js");
33
33
  let zod = require("zod");
package/dist/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  import { a as __toCommonJS, i as __require, n as __esmMin, o as __toESM$1, r as __exportAll, t as __commonJSMin$1 } from "./chunk-CNf5ZN-e.mjs";
2
- import { $ as isArrayOutputSchema, D as addonSettingsCapability, Ft as DATAPLANE_SECRET_HEADER$1, Gt as asNumber, Ht as ReadinessTimeoutError, It as DEVICE_SETTINGS_CONTRIBUTION_METHODS, Jt as emitDownForOwnedCaps, Kt as asString$1, Lt as DEVICE_STATUS_METHOD, Nt as errMsg$1, St as scopesAllowDeviceCap, Vt as ReadinessRegistry, Wt as asJsonObject$1, X as extractNestedAddonId, Xt as expandCapMethods, at as kebabToCamel, en as parseJsonObject, et as isCollectionArrayMethod, g as RUNTIME_DEFAULTS, gt as procedureAuthKey, in as scopeKey, it as isVoidInput, lt as logLevelAtMost, m as METHOD_ACCESS_MAP, nn as readinessKey, on as EventCategory$1, ot as lifecycleJobSchema, p as LOG_LEVEL_RANK, pt as objectInputDeclaresAddonId, qt as createEvent, rn as resolveCapMount, t as ALL_CAPABILITY_DEFINITIONS, tn as parseJsonUnknown, tt as isObjectInput, ut as looseSchema, xt as scopesAllowAddon, yt as resolveMethodAuth } from "./dist-C-8k9Z9W.mjs";
2
+ import { $ as isArrayOutputSchema, Ct as scopesAllowDeviceCap, D as addonSettingsCapability, Gt as asJsonObject$1, Ht as ReadinessRegistry, It as DATAPLANE_SECRET_HEADER$1, Jt as createEvent, Kt as asNumber, Lt as DEVICE_SETTINGS_CONTRIBUTION_METHODS, Pt as errMsg$1, Rt as DEVICE_STATUS_METHOD, St as scopesAllowAddon, Ut as ReadinessTimeoutError, X as extractNestedAddonId, Yt as emitDownForOwnedCaps, Zt as expandCapMethods, an as scopeKey, at as kebabToCamel, bt as resolveMethodAuth, et as isCollectionArrayMethod, g as RUNTIME_DEFAULTS, gt as procedureAuthKey, in as resolveCapMount, it as isVoidInput, lt as logLevelAtMost, m as METHOD_ACCESS_MAP, nn as parseJsonUnknown, ot as lifecycleJobSchema, p as LOG_LEVEL_RANK, pt as objectInputDeclaresAddonId, qt as asString$1, rn as readinessKey, sn as EventCategory$1, t as ALL_CAPABILITY_DEFINITIONS, tn as parseJsonObject, tt as isObjectInput, ut as looseSchema } from "./dist-L_39vRmH.mjs";
3
3
  import { AlertCenterAddon } from "./builtins/alerts/alerts.addon.mjs";
4
4
  import "./builtins/alerts/index.mjs";
5
5
  import { t as formatLogLine } from "./formatter-B7qW8bPJ.mjs";
@@ -26,7 +26,7 @@ import "./builtins/system-config/index.mjs";
26
26
  import { WinstonDestination, WinstonLoggingAddon } from "./builtins/winston-logging/index.mjs";
27
27
  import { a as parseTokenizedUrl, c as collectModelFiles, d as downloadModel, f as ensureModel, h as isModelDownloaded, i as parseRangeHeader, l as deleteModelFromDisk, m as getModelFilePath, n as contentTypeFor, o as resolveFilePath, p as fetchJson, r as createAuthenticatedFileServer, s as ModelDownloadService, t as createFileDataPlaneHandler, u as downloadFile } from "./file-data-plane-BhKdxJgf.mjs";
28
28
  import { C as registerLanHttpHandler, S as readLanHttpState, _ as DEFAULT_LAN_HTTP_PORT, a as writeTlsMode, b as bindPendingLanHttp, c as loadTlsCert, d as collectCertIdentity, f as CA_VALIDITY_DAYS, g as evaluateExistingCert, h as SERVER_AUTH_OID, i as writeExtraSans, l as reissueTlsLeaf, m as MAX_LEAF_VALIDITY_DAYS, n as readTlsAccessStatus, o as validateUploadedTls, p as LEAF_RENEWAL_WINDOW_DAYS, r as readTlsMode, s as ensureTlsCert, t as readExtraSans, u as CA_COMMON_NAME, v as allFamiliesListenHost, x as closeLanHttp, y as applyLanHttp } from "./tls-DOTmtLCW.mjs";
29
- import { $ as buildUdsNativeCapProxy, $t as formatHeapSpaces, A as createUdsLoggerWithControl, At as HUB_MAIN_RSS_BUDGET_MB, B as readMoleculerFanoutMode, Bt as createV8Reclaimer, C as ipcParentLink, Ct as createAddonDataPlaneFacility, D as createUdsEventBus, Dt as HEAP_WATCH_INTERVAL_MS, E as createUdsEventBridge, Et as HEAP_RECLAIM_TRIGGER_MB, F as AGENT_CAP_FWD_SERVICE, Ft as RUNNER_RSS_BUDGET_ENV, G as createLocalTransport, Gt as reclaimIntervalMs, H as PARENT_ROUTED_PROVIDER_ADDON_ID, Ht as hubMainRssBudget, I as CapRouteResolver, It as ZERO_LOOP_DELAY, J as SocketChannel, Jt as startRunnerHeapWatch, K as UdsLocalTransportClient, Kt as shouldReclaim, L as CapRouteError, Lt as buildHeapSample, M as LocalChildRegistry, Mt as RSS_BUDGET_REANNOUNCE_MIN_MS, N as UDS_NO_ROUTE_PREFIX, Nt as RSS_BUDGET_RELEASE_RATIO, O as udsChildLogToWorkerEntry, Ot as HEAP_WATCH_WARN_RATIO, P as AGENT_CAP_FWD_ACTION, Pt as RUNNER_HEAP_WATCH_INTERVAL_MS, Q as buildNativeCapProxy, Qt as emitHeapDiagnosticReport, R as classifyCapRoute, Rt as createDeferredHeapWatchSink, S as buildLinkChain, St as runNpm, T as createParentUnownedCallHandler, Tt as HEAP_RECLAIM_STEADY_STATE_INTERVAL_MS, U as __resetCapUsageRegistryForTests, Ut as nextRssBudgetState, V as CapUsageRegistry, Vt as describeRss, W as getCapUsageRegistry, Wt as parseRssBudgetMb, X as FrameDecoder, Xt as DECISIVE_HEAP_SPACES, Y as localEndpointPath, Yt as strandedMb, Z as encodeFrame, Zt as HEAP_SPACE_REPORT_MIN_MB, _ as AddonDepsManager, _n as createEventPlaneReader, _t as CapabilityUnavailableError, a as createUdsAddonContext, an as createSocketPlaneMeter, at as createAddonService, b as brokerCallForCap, bt as resolveAddonClass, c as getOrInitReadinessRegistryForClient, cn as formatSocketPlane, ct as capActionName, d as clusterEventTopic, dn as recordSocketFrame, dt as capServiceName, en as heapSpaceField, et as createBrokerDeviceManagerApi, f as getBrokerEventBus, fn as sampleSocketDirection, ft as parseCapAction, g as subscribePassthrough, gn as createEventPlaneMeter, gt as CapabilityHandle, h as setNodeEventInterest, hn as EVENT_PLANE_TOP_N, ht as DeviceRegistry, i as createAddonContext, in as SOCKET_PLANE_TOP_N, j as LocalChildClient, jt as HUB_RSS_BUDGET_ENV, k as createUdsLogger, kt as HUB_MAIN_HEAP_WATCH_LABEL, l as setHubConnected, ln as EMPTY_SOCKET_DIRECTION, lt as capActionSuffix, m as registerEventBusService, mn as socketDirectionMessages, mt as serializeTypedArrays, n as installManifestPythonDeps, nn as selectReportedSpaces, o as getWorkerDeviceRegistry, on as createSocketPlaneReader, ot as validateProviderRegistrations, p as getMoleculerEventStats, pn as socketDirectionBytes, pt as deserializeTypedArrays, q as UdsLocalTransportServer, qt as startHeapWatch, r as adaptBrokerToCluster, rn as EMPTY_SOCKET_PLANE_BASELINE, rt as mountNativeCapService, s as getOrInitReadinessRegistry, sn as diffSocketPlane, st as NATIVE_PROVIDER_SERVICE_INFIX, t as installManifestSystemDeps, tn as readHeapSpaces, u as EVENT_TOPIC_PREFIX, un as createSocketDirectionCounters, ut as capBareAction, v as createKernelHwAccel, vn as diffEventPlane, vt as copyBundledNativeModules, w as localProviderLink, wt as HEAP_RECLAIM_MIN_INTERVAL_MS, x as brokerTransportLink, xt as resolveNpmInvocation, y as resolveHwAccel, yn as formatEventPlane, yt as installManifestNativeDeps, z as callWithServiceDiscovery, zt as createLoopDelayMeter } from "./manifest-system-deps-4NeY_8iQ.mjs";
29
+ import { $ as buildUdsNativeCapProxy, $t as formatHeapSpaces, A as createUdsLoggerWithControl, At as HUB_MAIN_RSS_BUDGET_MB, B as readMoleculerFanoutMode, Bt as createV8Reclaimer, C as ipcParentLink, Ct as createAddonDataPlaneFacility, D as createUdsEventBus, Dt as HEAP_WATCH_INTERVAL_MS, E as createUdsEventBridge, Et as HEAP_RECLAIM_TRIGGER_MB, F as AGENT_CAP_FWD_SERVICE, Ft as RUNNER_RSS_BUDGET_ENV, G as createLocalTransport, Gt as reclaimIntervalMs, H as PARENT_ROUTED_PROVIDER_ADDON_ID, Ht as hubMainRssBudget, I as CapRouteResolver, It as ZERO_LOOP_DELAY, J as SocketChannel, Jt as startRunnerHeapWatch, K as UdsLocalTransportClient, Kt as shouldReclaim, L as CapRouteError, Lt as buildHeapSample, M as LocalChildRegistry, Mt as RSS_BUDGET_REANNOUNCE_MIN_MS, N as UDS_NO_ROUTE_PREFIX, Nt as RSS_BUDGET_RELEASE_RATIO, O as udsChildLogToWorkerEntry, Ot as HEAP_WATCH_WARN_RATIO, P as AGENT_CAP_FWD_ACTION, Pt as RUNNER_HEAP_WATCH_INTERVAL_MS, Q as buildNativeCapProxy, Qt as emitHeapDiagnosticReport, R as classifyCapRoute, Rt as createDeferredHeapWatchSink, S as buildLinkChain, St as runNpm, T as createParentUnownedCallHandler, Tt as HEAP_RECLAIM_STEADY_STATE_INTERVAL_MS, U as __resetCapUsageRegistryForTests, Ut as nextRssBudgetState, V as CapUsageRegistry, Vt as describeRss, W as getCapUsageRegistry, Wt as parseRssBudgetMb, X as FrameDecoder, Xt as DECISIVE_HEAP_SPACES, Y as localEndpointPath, Yt as strandedMb, Z as encodeFrame, Zt as HEAP_SPACE_REPORT_MIN_MB, _ as AddonDepsManager, _n as createEventPlaneReader, _t as CapabilityUnavailableError, a as createUdsAddonContext, an as createSocketPlaneMeter, at as createAddonService, b as brokerCallForCap, bt as resolveAddonClass, c as getOrInitReadinessRegistryForClient, cn as formatSocketPlane, ct as capActionName, d as clusterEventTopic, dn as recordSocketFrame, dt as capServiceName, en as heapSpaceField, et as createBrokerDeviceManagerApi, f as getBrokerEventBus, fn as sampleSocketDirection, ft as parseCapAction, g as subscribePassthrough, gn as createEventPlaneMeter, gt as CapabilityHandle, h as setNodeEventInterest, hn as EVENT_PLANE_TOP_N, ht as DeviceRegistry, i as createAddonContext, in as SOCKET_PLANE_TOP_N, j as LocalChildClient, jt as HUB_RSS_BUDGET_ENV, k as createUdsLogger, kt as HUB_MAIN_HEAP_WATCH_LABEL, l as setHubConnected, ln as EMPTY_SOCKET_DIRECTION, lt as capActionSuffix, m as registerEventBusService, mn as socketDirectionMessages, mt as serializeTypedArrays, n as installManifestPythonDeps, nn as selectReportedSpaces, o as getWorkerDeviceRegistry, on as createSocketPlaneReader, ot as validateProviderRegistrations, p as getMoleculerEventStats, pn as socketDirectionBytes, pt as deserializeTypedArrays, q as UdsLocalTransportServer, qt as startHeapWatch, r as adaptBrokerToCluster, rn as EMPTY_SOCKET_PLANE_BASELINE, rt as mountNativeCapService, s as getOrInitReadinessRegistry, sn as diffSocketPlane, st as NATIVE_PROVIDER_SERVICE_INFIX, t as installManifestSystemDeps, tn as readHeapSpaces, u as EVENT_TOPIC_PREFIX, un as createSocketDirectionCounters, ut as capBareAction, v as createKernelHwAccel, vn as diffEventPlane, vt as copyBundledNativeModules, w as localProviderLink, wt as HEAP_RECLAIM_MIN_INTERVAL_MS, x as brokerTransportLink, xt as resolveNpmInvocation, y as resolveHwAccel, yn as formatEventPlane, yt as installManifestNativeDeps, z as callWithServiceDiscovery, zt as createLoopDelayMeter } from "./manifest-system-deps-CMOGc5nC.mjs";
30
30
  import { n as getSinglePidStats, t as getPidStats } from "./resource-monitor-BWmQ5i-o.mjs";
31
31
  import { t as CustomActionRegistry } from "./custom-action-registry-F__gp_VX.mjs";
32
32
  import { z } from "zod";
@@ -1,4 +1,4 @@
1
- import "./dist-C-8k9Z9W.mjs";
1
+ import "./dist-L_39vRmH.mjs";
2
2
  import "./hub-cap-forward-BdT320dq.mjs";
3
3
  import * as crypto$1 from "node:crypto";
4
4
  import { randomBytes, randomUUID } from "node:crypto";
@@ -1,5 +1,5 @@
1
1
  const require_chunk = require("./chunk-Cek0wNdY.js");
2
- require("./dist-DkVaJ5vG.js");
2
+ require("./dist-C7qWwrK1.js");
3
3
  require("./hub-cap-forward-DmHNjbB0.js");
4
4
  let node_crypto = require("node:crypto");
5
5
  node_crypto = require_chunk.__toESM(node_crypto);
@@ -1,4 +1,4 @@
1
- const require_dist = require("./dist-DkVaJ5vG.js");
1
+ const require_dist = require("./dist-C7qWwrK1.js");
2
2
  //#region src/builtins/sqlite-storage/retired-settings-keys.ts
3
3
  /**
4
4
  * Is THIS node the one whose settings store is the cluster's authority?
@@ -1,4 +1,4 @@
1
- import { Wt as asJsonObject } from "./dist-C-8k9Z9W.mjs";
1
+ import { Gt as asJsonObject } from "./dist-L_39vRmH.mjs";
2
2
  //#region src/builtins/sqlite-storage/retired-settings-keys.ts
3
3
  /**
4
4
  * Is THIS node the one whose settings store is the cluster's authority?
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/system",
3
- "version": "1.2.177",
3
+ "version": "1.2.179",
4
4
  "description": "Core addon for CamStack — builtins, pipeline, process management, auth, logging, events",
5
5
  "keywords": [
6
6
  "camstack",