@camstack/system 1.2.340 → 1.2.342

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 (61) 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/autotrack/index.js +1 -1
  10. package/dist/builtins/autotrack/index.mjs +1 -1
  11. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.js +1 -1
  12. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.mjs +1 -1
  13. package/dist/builtins/camera-grid/index.js +1 -1
  14. package/dist/builtins/camera-grid/index.mjs +1 -1
  15. package/dist/builtins/composer/composer.addon.js +2 -2
  16. package/dist/builtins/composer/composer.addon.mjs +2 -2
  17. package/dist/builtins/console-logging/index.js +1 -1
  18. package/dist/builtins/console-logging/index.mjs +1 -1
  19. package/dist/builtins/core-blocks/core-blocks.addon.js +2 -2
  20. package/dist/builtins/core-blocks/core-blocks.addon.mjs +2 -2
  21. package/dist/builtins/device-manager/device-manager.addon.js +2 -2
  22. package/dist/builtins/device-manager/device-manager.addon.mjs +2 -2
  23. package/dist/builtins/hub-forwarder/index.js +1 -1
  24. package/dist/builtins/hub-forwarder/index.mjs +1 -1
  25. package/dist/builtins/liveness-monitor/liveness-monitor.addon.js +1 -1
  26. package/dist/builtins/liveness-monitor/liveness-monitor.addon.mjs +1 -1
  27. package/dist/builtins/local-auth/local-auth.addon.js +1 -1
  28. package/dist/builtins/local-auth/local-auth.addon.mjs +1 -1
  29. package/dist/builtins/local-network/local-network.addon.js +1 -1
  30. package/dist/builtins/local-network/local-network.addon.mjs +1 -1
  31. package/dist/builtins/loki-logging/index.js +1 -1
  32. package/dist/builtins/loki-logging/index.mjs +1 -1
  33. package/dist/builtins/native-metrics/native-metrics.addon.js +1 -1
  34. package/dist/builtins/native-metrics/native-metrics.addon.mjs +1 -1
  35. package/dist/builtins/platform-probe/index.js +1 -1
  36. package/dist/builtins/platform-probe/index.mjs +1 -1
  37. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.js +1 -1
  38. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.mjs +1 -1
  39. package/dist/builtins/snapshot/index.js +1 -1
  40. package/dist/builtins/snapshot/index.mjs +1 -1
  41. package/dist/builtins/sqlite-storage/filesystem-storage.addon.js +1 -1
  42. package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs +1 -1
  43. package/dist/builtins/sqlite-storage/sqlite-settings.addon.js +0 -0
  44. package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +0 -0
  45. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js +1 -1
  46. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs +1 -1
  47. package/dist/builtins/system-config/system-config.addon.js +1 -1
  48. package/dist/builtins/system-config/system-config.addon.mjs +1 -1
  49. package/dist/builtins/winston-logging/index.js +1 -1
  50. package/dist/builtins/winston-logging/index.mjs +1 -1
  51. package/dist/{child-cap-dispatch-PI1sSVze.js → child-cap-dispatch-BrNyZOV_.js} +1 -1
  52. package/dist/{child-cap-dispatch-D-7-T--W.mjs → child-cap-dispatch-Vuns6Iq-.mjs} +1 -1
  53. package/dist/{composition-sources-DBGzhDIQ.js → composition-sources-CLLeNCdr.js} +1 -1
  54. package/dist/{composition-sources-CTqzrv1t.mjs → composition-sources-DHOJmzw1.mjs} +1 -1
  55. package/dist/{dist-BQS_M1qw.mjs → dist-BYHMg5zg.mjs} +31 -18
  56. package/dist/{dist-BkhjxcSp.js → dist-Tk7iDxUC.js} +31 -18
  57. package/dist/index.js +2 -2
  58. package/dist/index.mjs +2 -2
  59. package/dist/{retired-settings-keys-CLazIr8J.js → retired-settings-keys-BQS_wD85.js} +1 -1
  60. package/dist/{retired-settings-keys-RD8q79Sb.mjs → retired-settings-keys-bYXNyr6b.mjs} +1 -1
  61. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  const require_chunk = require("./chunk-Cek0wNdY.js");
2
- const require_child_cap_dispatch = require("./child-cap-dispatch-PI1sSVze.js");
2
+ const require_child_cap_dispatch = require("./child-cap-dispatch-BrNyZOV_.js");
3
3
  const require_custom_action_registry = require("./custom-action-registry-acBY3mHA.js");
4
4
  let node_path = require("node:path");
5
5
  node_path = require_chunk.__toESM(node_path);
@@ -1,4 +1,4 @@
1
- import { Ft as installManifestNativeDeps, H as createUdsLoggerWithControl, It as resolveAddonClass, St as validateProviderRegistrations, Tn as emitHeapDiagnosticReport, U as LocalChildClient, _t as getWorkerNativeCapProvider, bt as setWorkerNativeCapsChangeListener, en as RUNNER_RSS_BUDGET_ENV, f as installManifestSystemDeps, g as createUdsAddonContext, i as killOwnRunnerGroupAfterParentLoss, n as createChildCapDispatch, p as installManifestPythonDeps, pn as startRunnerHeapWatch, u as startRunnerParentDeathWatchdog, vt as getWorkerNativeCapSnapshot } from "./child-cap-dispatch-D-7-T--W.mjs";
1
+ import { Ft as installManifestNativeDeps, H as createUdsLoggerWithControl, It as resolveAddonClass, St as validateProviderRegistrations, Tn as emitHeapDiagnosticReport, U as LocalChildClient, _t as getWorkerNativeCapProvider, bt as setWorkerNativeCapsChangeListener, en as RUNNER_RSS_BUDGET_ENV, f as installManifestSystemDeps, g as createUdsAddonContext, i as killOwnRunnerGroupAfterParentLoss, n as createChildCapDispatch, p as installManifestPythonDeps, pn as startRunnerHeapWatch, u as startRunnerParentDeathWatchdog, vt as getWorkerNativeCapSnapshot } from "./child-cap-dispatch-Vuns6Iq-.mjs";
2
2
  import { t as CustomActionRegistry } from "./custom-action-registry-B4Cf4O_X.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-BkhjxcSp.js");
6
+ const require_dist = require("../../dist-Tk7iDxUC.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 { Un as errMsg, V as addonPagesCapability, Wn as BaseAddon, hr as EventCategory } from "../../dist-BQS_M1qw.mjs";
1
+ import { Un as errMsg, V as addonPagesCapability, Wn as BaseAddon, hr as EventCategory } from "../../dist-BYHMg5zg.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-BkhjxcSp.js");
6
+ const require_dist = require("../../dist-Tk7iDxUC.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 { U as addonWidgetsCapability, Un as errMsg, Wn as BaseAddon, hr as EventCategory } from "../../dist-BQS_M1qw.mjs";
1
+ import { U as addonWidgetsCapability, Un as errMsg, Wn as BaseAddon, hr as EventCategory } from "../../dist-BYHMg5zg.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-BkhjxcSp.js");
6
+ const require_dist = require("../../dist-Tk7iDxUC.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 { Un as errMsg, W as alertsCapability, Wn as BaseAddon, er as createEvent, hr as EventCategory, n as AlertSchema } from "../../dist-BQS_M1qw.mjs";
1
+ import { Un as errMsg, W as alertsCapability, Wn as BaseAddon, er as createEvent, hr as EventCategory, n as AlertSchema } from "../../dist-BYHMg5zg.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
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-BkhjxcSp.js");
6
+ const require_dist = require("../../dist-Tk7iDxUC.js");
7
7
  //#region src/builtins/autotrack/autotrack-config.ts
8
8
  var DEFAULT_AUTOTRACK_LOOP_CONFIG = {
9
9
  deadZoneFraction: .5,
@@ -1,4 +1,4 @@
1
- import { Un as errMsg, Wn as BaseAddon, b as FIRST_LEVEL_MACRO_CLASSES, hr as EventCategory, or as isEvent, q as bareAddonId, rn as ptzAutotrackCapability } from "../../dist-BQS_M1qw.mjs";
1
+ import { Un as errMsg, Wn as BaseAddon, b as FIRST_LEVEL_MACRO_CLASSES, hr as EventCategory, or as isEvent, q as bareAddonId, rn as ptzAutotrackCapability } from "../../dist-BYHMg5zg.mjs";
2
2
  //#region src/builtins/autotrack/autotrack-config.ts
3
3
  var DEFAULT_AUTOTRACK_LOOP_CONFIG = {
4
4
  deadZoneFraction: .5,
@@ -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-BkhjxcSp.js");
6
+ const require_dist = require("../../dist-Tk7iDxUC.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 { Gt as mayWriteToLocation, K as backupCapability, Wn as BaseAddon, hr as EventCategory, m as DATABASE_SNAPSHOT_SUFFIX, mr as toNodeId, sr as nodePin, vn as storageOccupancyCapability } from "../../dist-BQS_M1qw.mjs";
1
+ import { Gt as mayWriteToLocation, K as backupCapability, Wn as BaseAddon, hr as EventCategory, m as DATABASE_SNAPSHOT_SUFFIX, mr as toNodeId, sr as nodePin, vn as storageOccupancyCapability } from "../../dist-BYHMg5zg.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-BkhjxcSp.js");
6
+ const require_dist = require("../../dist-Tk7iDxUC.js");
7
7
  let zod = require("zod");
8
8
  let _camstack_types_node = require("@camstack/types/node");
9
9
  let node_path = require("node:path");
@@ -1,4 +1,4 @@
1
- import { Bn as DeviceFeature, Hn as DeviceType, Kt as memoizePinnedFfmpeg, O as MOTION_CLOSE_AFTER_MS, Un as errMsg, Wn as BaseAddon, Yt as motionCapability, Z as cameraGridLayoutCapability, _ as DERIVED_CAMERA_SILENCED_CAP_NAMES, bn as streamCatalogCapability, er as createEvent, hn as snapshotCapability, hr as EventCategory, i as BaseDevice, ir as hydrateSchema, kn as buildFfmpegArgs, ut as declarationOwnerNodeId, v as DeclaredDevices } from "../../dist-BQS_M1qw.mjs";
1
+ import { Bn as DeviceFeature, Hn as DeviceType, Kt as memoizePinnedFfmpeg, O as MOTION_CLOSE_AFTER_MS, Un as errMsg, Wn as BaseAddon, Yt as motionCapability, Z as cameraGridLayoutCapability, _ as DERIVED_CAMERA_SILENCED_CAP_NAMES, bn as streamCatalogCapability, er as createEvent, hn as snapshotCapability, hr as EventCategory, i as BaseDevice, ir as hydrateSchema, kn as buildFfmpegArgs, ut as declarationOwnerNodeId, v as DeclaredDevices } from "../../dist-BYHMg5zg.mjs";
2
2
  import { z } from "zod";
3
3
  import { FfmpegProcess } from "@camstack/types/node";
4
4
  import { join } from "node:path";
@@ -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-BkhjxcSp.js");
7
- const require_composition_sources = require("../../composition-sources-DBGzhDIQ.js");
6
+ const require_dist = require("../../dist-Tk7iDxUC.js");
7
+ const require_composition_sources = require("../../composition-sources-CLLeNCdr.js");
8
8
  let zod = require("zod");
9
9
  //#region src/builtins/shared/device-state-changed.ts
10
10
  /** Structural narrowing helper for untrusted bus payloads. */
@@ -1,5 +1,5 @@
1
- import { $ as composerCapability, An as cloneStatefulExpressionMemory, Fn as compositionSliceKey, Hn as DeviceType, In as compositionSourceKey, Ln as createStatefulExpressionMemory, Mn as composedDeviceStableId, Nn as compositionFeatureEnabled, On as COMPOSER_ADDON_ID, Pn as compositionItemFieldPath, Rn as disarmRoseMemory, St as evaluateCompositionField, Un as errMsg, Wn as BaseAddon, Y as buildCapabilityLookup, c as COMPOSED_ITEM_FIXED_FIELDS, en as planComposition, er as createEvent, et as compositionFieldKey, hr as EventCategory, i as BaseDevice, jn as composedDeviceRef, t as ALL_CAPABILITY_DEFINITIONS, v as DeclaredDevices, zn as toExpressionValue } from "../../dist-BQS_M1qw.mjs";
2
- import { n as normalizedNativeOwner } from "../../composition-sources-CTqzrv1t.mjs";
1
+ import { $ as composerCapability, An as cloneStatefulExpressionMemory, Fn as compositionSliceKey, Hn as DeviceType, In as compositionSourceKey, Ln as createStatefulExpressionMemory, Mn as composedDeviceStableId, Nn as compositionFeatureEnabled, On as COMPOSER_ADDON_ID, Pn as compositionItemFieldPath, Rn as disarmRoseMemory, St as evaluateCompositionField, Un as errMsg, Wn as BaseAddon, Y as buildCapabilityLookup, c as COMPOSED_ITEM_FIXED_FIELDS, en as planComposition, er as createEvent, et as compositionFieldKey, hr as EventCategory, i as BaseDevice, jn as composedDeviceRef, t as ALL_CAPABILITY_DEFINITIONS, v as DeclaredDevices, zn as toExpressionValue } from "../../dist-BYHMg5zg.mjs";
2
+ import { n as normalizedNativeOwner } from "../../composition-sources-DHOJmzw1.mjs";
3
3
  import { z } from "zod";
4
4
  //#region src/builtins/shared/device-state-changed.ts
5
5
  /** Structural narrowing helper for untrusted bus payloads. */
@@ -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-BkhjxcSp.js");
6
+ const require_dist = require("../../dist-Tk7iDxUC.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 { Vt as logDestinationCapability, Wn as BaseAddon } from "../../dist-BQS_M1qw.mjs";
1
+ import { Vt as logDestinationCapability, Wn as BaseAddon } from "../../dist-BYHMg5zg.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,7 +1,7 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_chunk = require("../../chunk-Cek0wNdY.js");
3
- const require_dist = require("../../dist-BkhjxcSp.js");
4
- const require_composition_sources = require("../../composition-sources-DBGzhDIQ.js");
3
+ const require_dist = require("../../dist-Tk7iDxUC.js");
4
+ const require_composition_sources = require("../../composition-sources-CLLeNCdr.js");
5
5
  let node_crypto = require("node:crypto");
6
6
  let _camstack_types_node = require("@camstack/types/node");
7
7
  let node_fs_promises = require("node:fs/promises");
@@ -1,5 +1,5 @@
1
- import { Cn as validateComposition, In as compositionSourceKey, Un as errMsg, Wn as BaseAddon, Y as buildCapabilityLookup, an as replacedFieldKeys, at as coreBlockSourceKind, d as CORE_BLOCK_ADDON_PREFIX, en as planComposition, f as CoreBlockSchema, it as coreBlockIdFromAddonId, jn as composedDeviceRef, l as COMPOSER_RUNNER_ID, mt as describeComposableCaps, nt as coreBlockAddonId, ot as coreBlocksCapability, rt as coreBlockComposition, t as ALL_CAPABILITY_DEFINITIONS, tt as compositionSourceRefs, u as CORE_BLOCKS_ADDON_ID, v as DeclaredDevices } from "../../dist-BQS_M1qw.mjs";
2
- import { t as describeCompositionSources } from "../../composition-sources-CTqzrv1t.mjs";
1
+ import { Cn as validateComposition, In as compositionSourceKey, Un as errMsg, Wn as BaseAddon, Y as buildCapabilityLookup, an as replacedFieldKeys, at as coreBlockSourceKind, d as CORE_BLOCK_ADDON_PREFIX, en as planComposition, f as CoreBlockSchema, it as coreBlockIdFromAddonId, jn as composedDeviceRef, l as COMPOSER_RUNNER_ID, mt as describeComposableCaps, nt as coreBlockAddonId, ot as coreBlocksCapability, rt as coreBlockComposition, t as ALL_CAPABILITY_DEFINITIONS, tt as compositionSourceRefs, u as CORE_BLOCKS_ADDON_ID, v as DeclaredDevices } from "../../dist-BYHMg5zg.mjs";
2
+ import { t as describeCompositionSources } from "../../composition-sources-DHOJmzw1.mjs";
3
3
  import { randomUUID } from "node:crypto";
4
4
  import { customizationBlockName } from "@camstack/types/node";
5
5
  import * as fs from "node:fs/promises";
@@ -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-BkhjxcSp.js");
7
- const require_retired_settings_keys = require("../../retired-settings-keys-CLazIr8J.js");
6
+ const require_dist = require("../../dist-Tk7iDxUC.js");
7
+ const require_retired_settings_keys = require("../../retired-settings-keys-BQS_wD85.js");
8
8
  let zod = require("zod");
9
9
  let node_crypto = require("node:crypto");
10
10
  let _camstack_types_node = require("@camstack/types/node");
@@ -1,5 +1,5 @@
1
- import { $t as parseStreamParamsFormPatch, Bn as DeviceFeature, Bt as locationIconKey, D as MINUTES_PER_DAY, Hn as DeviceType, It as legacyAutoLinkIds, Ot as formatMinutes, P as STREAM_PROFILE_META, S as FieldClaimSchema, T as LocationIconIdSchema, Un as errMsg, Vn as DeviceRole, Wn as BaseAddon, X as buildStreamParamsConfigSchema, Xn as WELL_KNOWN_TAB_MAP, Xt as normalizeUnit, _t as deviceStateCapability, ar as isDeviceConfigCap, bt as enumerateItemArrayFields, ft as defineExtensionSlotProvider, g as DAY_NAMES, gt as deviceManagerCapability, hr as EventCategory, ht as deviceExtensionCapability, ln as runtimeStatePolicyFor, mn as siteZoneKey, o as CAMERA_SWITCH_ORDER, pr as sleep$1, s as CAP_NAMES_WITH_STATUS, st as createDeviceExtensionProvider, t as ALL_CAPABILITY_DEFINITIONS, vt as deviceStatusCapability, wt as expandContainer, x as FieldClaimModeSchema, xt as enumerateSchemaFields, y as DeviceStatusSchema } from "../../dist-BQS_M1qw.mjs";
2
- import { n as purgeRetiredSettingsRows } from "../../retired-settings-keys-RD8q79Sb.mjs";
1
+ import { $t as parseStreamParamsFormPatch, Bn as DeviceFeature, Bt as locationIconKey, D as MINUTES_PER_DAY, Hn as DeviceType, It as legacyAutoLinkIds, Ot as formatMinutes, P as STREAM_PROFILE_META, S as FieldClaimSchema, T as LocationIconIdSchema, Un as errMsg, Vn as DeviceRole, Wn as BaseAddon, X as buildStreamParamsConfigSchema, Xn as WELL_KNOWN_TAB_MAP, Xt as normalizeUnit, _t as deviceStateCapability, ar as isDeviceConfigCap, bt as enumerateItemArrayFields, ft as defineExtensionSlotProvider, g as DAY_NAMES, gt as deviceManagerCapability, hr as EventCategory, ht as deviceExtensionCapability, ln as runtimeStatePolicyFor, mn as siteZoneKey, o as CAMERA_SWITCH_ORDER, pr as sleep$1, s as CAP_NAMES_WITH_STATUS, st as createDeviceExtensionProvider, t as ALL_CAPABILITY_DEFINITIONS, vt as deviceStatusCapability, wt as expandContainer, x as FieldClaimModeSchema, xt as enumerateSchemaFields, y as DeviceStatusSchema } from "../../dist-BYHMg5zg.mjs";
2
+ import { n as purgeRetiredSettingsRows } from "../../retired-settings-keys-bYXNyr6b.mjs";
3
3
  import { z } from "zod";
4
4
  import { randomUUID } from "node:crypto";
5
5
  import { canonicalDeviceFingerprint } from "@camstack/types/node";
@@ -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-BkhjxcSp.js");
6
+ const require_dist = require("../../dist-Tk7iDxUC.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 { Vt as logDestinationCapability, Wn as BaseAddon } from "../../dist-BQS_M1qw.mjs";
1
+ import { Vt as logDestinationCapability, Wn as BaseAddon } from "../../dist-BYHMg5zg.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-BkhjxcSp.js");
3
+ const require_dist = require("../../dist-Tk7iDxUC.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 { M as RecordingStatusSchema, Un as errMsg, Wn as BaseAddon, er as createEvent, hr as EventCategory, k as RECORDING_SOURCE_CAMSTACK_ADDON } from "../../dist-BQS_M1qw.mjs";
1
+ import { M as RecordingStatusSchema, Un as errMsg, Wn as BaseAddon, er as createEvent, hr as EventCategory, k as RECORDING_SOURCE_CAMSTACK_ADDON } from "../../dist-BYHMg5zg.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-BkhjxcSp.js");
6
+ const require_dist = require("../../dist-Tk7iDxUC.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 { B as UserRecordSchema, F as ScopedTokenSchema, G as authProviderCapability, Sn as userManagementCapability, Wn as BaseAddon, r as ApiKeyRecordSchema } from "../../dist-BQS_M1qw.mjs";
2
+ import { B as UserRecordSchema, F as ScopedTokenSchema, G as authProviderCapability, Sn as userManagementCapability, Wn as BaseAddon, r as ApiKeyRecordSchema } from "../../dist-BYHMg5zg.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-BkhjxcSp.js");
3
+ const require_dist = require("../../dist-Tk7iDxUC.js");
4
4
  const require_tls = require("../../tls-D_wUeOTD.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 { Wn as BaseAddon, hr as EventCategory, zt as localNetworkCapability } from "../../dist-BQS_M1qw.mjs";
1
+ import { Wn as BaseAddon, hr as EventCategory, zt as localNetworkCapability } from "../../dist-BYHMg5zg.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-IM-v7JV4.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-BkhjxcSp.js");
6
+ const require_dist = require("../../dist-Tk7iDxUC.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 { Vt as logDestinationCapability, Wn as BaseAddon } from "../../dist-BQS_M1qw.mjs";
1
+ import { Vt as logDestinationCapability, Wn as BaseAddon } from "../../dist-BYHMg5zg.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-BkhjxcSp.js");
6
+ const require_dist = require("../../dist-Tk7iDxUC.js");
7
7
  const require_proc_stat = require("../../proc-stat-DL-WUOhl.js");
8
8
  let node_fs_promises = require("node:fs/promises");
9
9
  let node_fs = require("node:fs");
@@ -1,4 +1,4 @@
1
- import { Dt as foldSnapshotByFunction, Un as errMsg, Wn as BaseAddon, er as createEvent, hr as EventCategory, in as reducePoints, on as resolveBucketMs, qt as metricsProviderCapability } from "../../dist-BQS_M1qw.mjs";
1
+ import { Dt as foldSnapshotByFunction, Un as errMsg, Wn as BaseAddon, er as createEvent, hr as EventCategory, in as reducePoints, on as resolveBucketMs, qt as metricsProviderCapability } from "../../dist-BYHMg5zg.mjs";
2
2
  import { a as parseProcStat, i as nodeProcReader, n as elapsedSecSince, o as parseProcStatusRss, r as lifetimeCpuPercent, t as commandFromCmdline } from "../../proc-stat-CbC55Kqi.mjs";
3
3
  import { access, readFile, readdir } from "node:fs/promises";
4
4
  import * as fs from "node:fs";
@@ -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-BkhjxcSp.js");
6
+ const require_dist = require("../../dist-Tk7iDxUC.js");
7
7
  let node_fs = require("node:fs");
8
8
  node_fs = require_chunk.__toESM(node_fs);
9
9
  let node_child_process = require("node:child_process");
@@ -1,5 +1,5 @@
1
1
  import { o as __toESM } from "../../chunk-CNf5ZN-e.mjs";
2
- import { Un as errMsg, Wn as BaseAddon, fn as scoreRuntimes, hr as EventCategory, nr as emitReadiness, tn as platformProbeCapability, yt as enumerateInferenceDevices } from "../../dist-BQS_M1qw.mjs";
2
+ import { Un as errMsg, Wn as BaseAddon, fn as scoreRuntimes, hr as EventCategory, nr as emitReadiness, tn as platformProbeCapability, yt as enumerateInferenceDevices } from "../../dist-BYHMg5zg.mjs";
3
3
  import * as fs from "node:fs";
4
4
  import { execFile } from "node:child_process";
5
5
  import * as os from "node:os";
@@ -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-BkhjxcSp.js");
6
+ const require_dist = require("../../dist-Tk7iDxUC.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 { Wn as BaseAddon, hr as EventCategory } from "../../dist-BQS_M1qw.mjs";
1
+ import { Wn as BaseAddon, hr as EventCategory } from "../../dist-BYHMg5zg.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-BkhjxcSp.js");
6
+ const require_dist = require("../../dist-Tk7iDxUC.js");
7
7
  const require_snapshot_courtesy = require("../../snapshot-courtesy-D_C5-nC0.js");
8
8
  let zod = require("zod");
9
9
  let node_crypto = require("node:crypto");
@@ -1,4 +1,4 @@
1
- import { Bn as DeviceFeature, Hn as DeviceType, J as batteryCapability, Kt as memoizePinnedFfmpeg, Un as errMsg, Wn as BaseAddon, a as BatteryStatusSchema, hn as snapshotCapability, hr as EventCategory, pt as deriveBatteryPresence, q as bareAddonId, sr as nodePin, xn as streamQualityLabel } from "../../dist-BQS_M1qw.mjs";
1
+ import { Bn as DeviceFeature, Hn as DeviceType, J as batteryCapability, Kt as memoizePinnedFfmpeg, Un as errMsg, Wn as BaseAddon, a as BatteryStatusSchema, hn as snapshotCapability, hr as EventCategory, pt as deriveBatteryPresence, q as bareAddonId, sr as nodePin, xn as streamQualityLabel } from "../../dist-BYHMg5zg.mjs";
2
2
  import { i as renderCourtesyOverlayJpeg, n as courtesyCacheKey, r as renderCourtesyJpeg } from "../../snapshot-courtesy-CyFs1M3I.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
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-BkhjxcSp.js");
6
+ const require_dist = require("../../dist-Tk7iDxUC.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 { Et as filesystemBrowseCapability, Wn as BaseAddon, yn as storageProviderCapability } from "../../dist-BQS_M1qw.mjs";
1
+ import { Et as filesystemBrowseCapability, Wn as BaseAddon, yn as storageProviderCapability } from "../../dist-BYHMg5zg.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";
@@ -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-BkhjxcSp.js");
6
+ const require_dist = require("../../dist-Tk7iDxUC.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 { A as REDACTED_SECRET, Ct as evictionPolicyOfLocation, Dn as withLocationMode, Gt as mayWriteToLocation, I as StorageCleanupJobSchema, Jt as modeMayWrite, L as StorageLocationModeSchema, Lt as legacyModeOf, Mt as isLocationEnabled, Q as collectSecretConfigKeys, R as StorageLocationTypeSchema, Wn as BaseAddon, Wt as mayReadLocation, _n as storageMigrationCapability, cr as parseJsonObject, gn as storageCapability, hr as EventCategory, kt as gbToBytes, pn as settingsStoreCapability, sn as resolveLocationMode, w as LegacyStorageLocationDefaultSchema, z as StorageMigrationJobSchema } from "../../dist-BQS_M1qw.mjs";
1
+ import { A as REDACTED_SECRET, Ct as evictionPolicyOfLocation, Dn as withLocationMode, Gt as mayWriteToLocation, I as StorageCleanupJobSchema, Jt as modeMayWrite, L as StorageLocationModeSchema, Lt as legacyModeOf, Mt as isLocationEnabled, Q as collectSecretConfigKeys, R as StorageLocationTypeSchema, Wn as BaseAddon, Wt as mayReadLocation, _n as storageMigrationCapability, cr as parseJsonObject, gn as storageCapability, hr as EventCategory, kt as gbToBytes, pn as settingsStoreCapability, sn as resolveLocationMode, w as LegacyStorageLocationDefaultSchema, z as StorageMigrationJobSchema } from "../../dist-BYHMg5zg.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-BkhjxcSp.js");
6
+ const require_dist = require("../../dist-Tk7iDxUC.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 { Un as errMsg, Wn as BaseAddon, ir as hydrateSchema } from "../../dist-BQS_M1qw.mjs";
1
+ import { Un as errMsg, Wn as BaseAddon, ir as hydrateSchema } from "../../dist-BYHMg5zg.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-BkhjxcSp.js");
6
+ const require_dist = require("../../dist-Tk7iDxUC.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 { Vt as logDestinationCapability, Wn as BaseAddon } from "../../dist-BQS_M1qw.mjs";
1
+ import { Vt as logDestinationCapability, Wn as BaseAddon } from "../../dist-BYHMg5zg.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";
@@ -1,5 +1,5 @@
1
1
  const require_chunk = require("./chunk-Cek0wNdY.js");
2
- const require_dist = require("./dist-BkhjxcSp.js");
2
+ const require_dist = require("./dist-Tk7iDxUC.js");
3
3
  const require_proc_stat = require("./proc-stat-DL-WUOhl.js");
4
4
  require("./hub-cap-forward-DmHNjbB0.js");
5
5
  let node_crypto = require("node:crypto");
@@ -1,4 +1,4 @@
1
- import { er as createEvent, hr as EventCategory$1 } from "./dist-BQS_M1qw.mjs";
1
+ import { er as createEvent, hr as EventCategory$1 } from "./dist-BYHMg5zg.mjs";
2
2
  import { a as parseProcStat, i as nodeProcReader } from "./proc-stat-CbC55Kqi.mjs";
3
3
  import "./hub-cap-forward-BdT320dq.mjs";
4
4
  import * as crypto$1 from "node:crypto";
@@ -1,4 +1,4 @@
1
- const require_dist = require("./dist-BkhjxcSp.js");
1
+ const require_dist = require("./dist-Tk7iDxUC.js");
2
2
  //#region src/builtins/core-blocks/composition-sources.ts
3
3
  /**
4
4
  * Describe what a composition reads and writes for SAVE-time validation
@@ -1,4 +1,4 @@
1
- import { In as compositionSourceKey, Un as errMsg } from "./dist-BQS_M1qw.mjs";
1
+ import { In as compositionSourceKey, Un as errMsg } from "./dist-BYHMg5zg.mjs";
2
2
  //#region src/builtins/core-blocks/composition-sources.ts
3
3
  /**
4
4
  * Describe what a composition reads and writes for SAVE-time validation
@@ -37821,22 +37821,35 @@ setOverlay: method(z.object({
37821
37821
  }
37822
37822
  }] }
37823
37823
  };
37824
+ z.enum([
37825
+ "value",
37826
+ "unit",
37827
+ "full"
37828
+ ]);
37829
+ z.enum([
37830
+ "value+unit",
37831
+ "value",
37832
+ "unit"
37833
+ ]);
37824
37834
  /**
37825
- * `osd-manager` — the ORCHESTRATOR over the device-scope `osd` cap.
37826
- *
37827
- * The `osd` cap is the firmware contract: it probes a camera's overlay
37828
- * SLOTS and writes literal text into one. It has no idea WHERE that text
37829
- * comes from, and it must not — a driver that grew a "show the temperature
37830
- * here" feature would grow it once per vendor.
37831
- *
37832
- * This cap owns the other half: a per-(camera, slot) BINDING that says
37833
- * which value feeds the slot, how it is formatted, and under which
37834
- * conditions it is shown at all. Named TEMPLATES combine many device
37835
- * fields into one overlay string (Scrypted OSD Manager parity).
37835
+ * How the operator reached the leaf device. `deviceId` is ALWAYS the
37836
+ * OSD-supported leaf that is read; `containerId` is set when the pick
37837
+ * went through a container (gateway) first.
37836
37838
  */
37837
- /** One field reference inside a named multi-device template. */
37838
- var OsdTemplateFieldSchema = z.object({
37839
- deviceId: z.number().int(),
37839
+ var OsdTemplatePickSchema = z.object({
37840
+ containerId: z.number().int().optional(),
37841
+ deviceId: z.number().int()
37842
+ });
37843
+ /**
37844
+ * One named binding inside a multi-device template: device path + unit
37845
+ * selection + precision. The parser expands `{alias}`, `{alias.value}`,
37846
+ * `{alias.unit}`, or `{alias.full}` from the same binding — there is no
37847
+ * per-binding format lock.
37848
+ */
37849
+ var OsdTemplateBindingSchema = z.object({
37850
+ /** Token stem in the parser, e.g. `t` → `{t}` / `{t.value}`. Unique within the template. */
37851
+ alias: z.string().min(1).max(32).regex(/^[A-Za-z][A-Za-z0-9_-]*$/, "alias must start with a letter"),
37852
+ pick: OsdTemplatePickSchema,
37840
37853
  capName: z.string().min(1).max(64),
37841
37854
  valuePath: z.string().min(1).max(64),
37842
37855
  /** Convert TO this unit at render (`tryConvertUnit`). Absent = source unit. */
@@ -37844,14 +37857,14 @@ var OsdTemplateFieldSchema = z.object({
37844
37857
  maxDecimals: z.number().int().min(0).max(4).default(1)
37845
37858
  });
37846
37859
  /**
37847
- * A named template: several device fields → one parser string with
37848
- * `{deviceId.capName.valuePath}` tokens (Scrypted `{deviceId.sensorId}`).
37860
+ * A named template: bindings (alias → leaf field) + a parser that
37861
+ * references `{alias}` / `{alias.value}` / `{alias.unit}` / `{alias.full}`.
37849
37862
  */
37850
37863
  var OsdNamedTemplateSchema = z.object({
37851
37864
  id: z.string().min(1).max(64),
37852
37865
  name: z.string().min(1).max(64),
37853
- fields: z.array(OsdTemplateFieldSchema).max(32).default([]),
37854
- /** Parser with multi-token placeholders, e.g. `T {12.thermometer.value}°`. */
37866
+ bindings: z.array(OsdTemplateBindingSchema).max(32).default([]),
37867
+ /** Parser with alias placeholders, e.g. `{t.value} {t.unit} / {h}`. */
37855
37868
  parser: z.string().max(256).default("")
37856
37869
  });
37857
37870
  /** Where a slot's value comes from. */
@@ -37821,22 +37821,35 @@ setOverlay: method(zod.z.object({
37821
37821
  }
37822
37822
  }] }
37823
37823
  };
37824
+ zod.z.enum([
37825
+ "value",
37826
+ "unit",
37827
+ "full"
37828
+ ]);
37829
+ zod.z.enum([
37830
+ "value+unit",
37831
+ "value",
37832
+ "unit"
37833
+ ]);
37824
37834
  /**
37825
- * `osd-manager` — the ORCHESTRATOR over the device-scope `osd` cap.
37826
- *
37827
- * The `osd` cap is the firmware contract: it probes a camera's overlay
37828
- * SLOTS and writes literal text into one. It has no idea WHERE that text
37829
- * comes from, and it must not — a driver that grew a "show the temperature
37830
- * here" feature would grow it once per vendor.
37831
- *
37832
- * This cap owns the other half: a per-(camera, slot) BINDING that says
37833
- * which value feeds the slot, how it is formatted, and under which
37834
- * conditions it is shown at all. Named TEMPLATES combine many device
37835
- * fields into one overlay string (Scrypted OSD Manager parity).
37835
+ * How the operator reached the leaf device. `deviceId` is ALWAYS the
37836
+ * OSD-supported leaf that is read; `containerId` is set when the pick
37837
+ * went through a container (gateway) first.
37836
37838
  */
37837
- /** One field reference inside a named multi-device template. */
37838
- var OsdTemplateFieldSchema = zod.z.object({
37839
- deviceId: zod.z.number().int(),
37839
+ var OsdTemplatePickSchema = zod.z.object({
37840
+ containerId: zod.z.number().int().optional(),
37841
+ deviceId: zod.z.number().int()
37842
+ });
37843
+ /**
37844
+ * One named binding inside a multi-device template: device path + unit
37845
+ * selection + precision. The parser expands `{alias}`, `{alias.value}`,
37846
+ * `{alias.unit}`, or `{alias.full}` from the same binding — there is no
37847
+ * per-binding format lock.
37848
+ */
37849
+ var OsdTemplateBindingSchema = zod.z.object({
37850
+ /** Token stem in the parser, e.g. `t` → `{t}` / `{t.value}`. Unique within the template. */
37851
+ alias: zod.z.string().min(1).max(32).regex(/^[A-Za-z][A-Za-z0-9_-]*$/, "alias must start with a letter"),
37852
+ pick: OsdTemplatePickSchema,
37840
37853
  capName: zod.z.string().min(1).max(64),
37841
37854
  valuePath: zod.z.string().min(1).max(64),
37842
37855
  /** Convert TO this unit at render (`tryConvertUnit`). Absent = source unit. */
@@ -37844,14 +37857,14 @@ var OsdTemplateFieldSchema = zod.z.object({
37844
37857
  maxDecimals: zod.z.number().int().min(0).max(4).default(1)
37845
37858
  });
37846
37859
  /**
37847
- * A named template: several device fields → one parser string with
37848
- * `{deviceId.capName.valuePath}` tokens (Scrypted `{deviceId.sensorId}`).
37860
+ * A named template: bindings (alias → leaf field) + a parser that
37861
+ * references `{alias}` / `{alias.value}` / `{alias.unit}` / `{alias.full}`.
37849
37862
  */
37850
37863
  var OsdNamedTemplateSchema = zod.z.object({
37851
37864
  id: zod.z.string().min(1).max(64),
37852
37865
  name: zod.z.string().min(1).max(64),
37853
- fields: zod.z.array(OsdTemplateFieldSchema).max(32).default([]),
37854
- /** Parser with multi-token placeholders, e.g. `T {12.thermometer.value}°`. */
37866
+ bindings: zod.z.array(OsdTemplateBindingSchema).max(32).default([]),
37867
+ /** Parser with alias placeholders, e.g. `{t.value} {t.unit} / {h}`. */
37855
37868
  parser: zod.z.string().max(256).default("")
37856
37869
  });
37857
37870
  /** Where a slot's value comes from. */
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-BkhjxcSp.js");
3
+ const require_dist = require("./dist-Tk7iDxUC.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_builtins_composer_composer_addon = require("./builtins/composer/composer.addon.js");
@@ -29,7 +29,7 @@ require("./builtins/system-config/index.js");
29
29
  const require_builtins_winston_logging_index = require("./builtins/winston-logging/index.js");
30
30
  const require_event_loop_stall_monitor = require("./event-loop-stall-monitor-ey4mbofz.js");
31
31
  const require_tls$1 = require("./tls-D_wUeOTD.js");
32
- const require_child_cap_dispatch = require("./child-cap-dispatch-PI1sSVze.js");
32
+ const require_child_cap_dispatch = require("./child-cap-dispatch-BrNyZOV_.js");
33
33
  const require_resource_monitor = require("./resource-monitor-DzNn_IZK.js");
34
34
  const require_custom_action_registry = require("./custom-action-registry-acBY3mHA.js");
35
35
  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 { $n as asString$1, At as isArrayOutputSchema, C as LOG_LEVEL_RANK, E as METHOD_ACCESS_MAP, Ft as kebabToCamel, Gn as DATAPLANE_SECRET_HEADER$1, H as addonSettingsCapability, Ht as logLevelAtMost, Jn as ReadinessRegistry, Kn as DEVICE_SETTINGS_CONTRIBUTION_METHODS, Nt as isObjectInput, Pt as isVoidInput, Qn as asNumber, Qt as objectInputDeclaresRequiredDeviceId, Rt as lifecycleJobSchema, Tt as extractNestedAddonId, Un as errMsg$1, Ut as looseSchema, Yn as ReadinessTimeoutError, Zn as asJsonObject$1, Zt as objectInputDeclaresAddonId, cn as resolveMethodAuth, cr as parseJsonObject, dn as scopesAllowDeviceCap, dr as resolveCapMount, er as createEvent, fr as scopeKey, hr as EventCategory$1, j as RUNTIME_DEFAULTS, jt as isCollectionArrayMethod, lr as parseJsonUnknown, nn as procedureAuthKey, qn as DEVICE_STATUS_METHOD, rr as expandCapMethods, t as ALL_CAPABILITY_DEFINITIONS, tr as emitDownForOwnedCaps, un as scopesAllowAddon, ur as readinessKey } from "./dist-BQS_M1qw.mjs";
2
+ import { $n as asString$1, At as isArrayOutputSchema, C as LOG_LEVEL_RANK, E as METHOD_ACCESS_MAP, Ft as kebabToCamel, Gn as DATAPLANE_SECRET_HEADER$1, H as addonSettingsCapability, Ht as logLevelAtMost, Jn as ReadinessRegistry, Kn as DEVICE_SETTINGS_CONTRIBUTION_METHODS, Nt as isObjectInput, Pt as isVoidInput, Qn as asNumber, Qt as objectInputDeclaresRequiredDeviceId, Rt as lifecycleJobSchema, Tt as extractNestedAddonId, Un as errMsg$1, Ut as looseSchema, Yn as ReadinessTimeoutError, Zn as asJsonObject$1, Zt as objectInputDeclaresAddonId, cn as resolveMethodAuth, cr as parseJsonObject, dn as scopesAllowDeviceCap, dr as resolveCapMount, er as createEvent, fr as scopeKey, hr as EventCategory$1, j as RUNTIME_DEFAULTS, jt as isCollectionArrayMethod, lr as parseJsonUnknown, nn as procedureAuthKey, qn as DEVICE_STATUS_METHOD, rr as expandCapMethods, t as ALL_CAPABILITY_DEFINITIONS, tr as emitDownForOwnedCaps, un as scopesAllowAddon, ur as readinessKey } from "./dist-BYHMg5zg.mjs";
3
3
  import { AlertCenterAddon } from "./builtins/alerts/alerts.addon.mjs";
4
4
  import "./builtins/alerts/index.mjs";
5
5
  import { ComposerAddon } from "./builtins/composer/composer.addon.mjs";
@@ -28,7 +28,7 @@ import "./builtins/system-config/index.mjs";
28
28
  import { WinstonDestination, WinstonLoggingAddon } from "./builtins/winston-logging/index.mjs";
29
29
  import { _ as ensureModel, a as createFileDataPlaneHandler, c as parseRangeHeader, d as ModelDownloadService, g as downloadModel, h as downloadFile, i as startEventLoopStallMonitor, l as parseTokenizedUrl, m as deleteModelFromDisk, n as STALL_TICK_MS, o as contentTypeFor, p as collectModelFiles, r as attributeStall, s as createAuthenticatedFileServer, t as STALL_REPORT_MS, u as resolveFilePath, v as fetchJson, x as isModelDownloaded, y as getModelFilePath } from "./event-loop-stall-monitor-EXjzIxDz.mjs";
30
30
  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-IM-v7JV4.mjs";
31
- import { $ as CapRouteError, $n as CAP_ACTION_UNLABELLED, $t as RUNNER_HEAP_WATCH_INTERVAL_MS, A as resolveHwAccel, An as OUTBOUND_QUEUE_COOLDOWN_MS, At as serializeTypedArrays, B as udsChildLogToWorkerEntry, Bn as SOCKET_QUEUE_TOP_N, Bt as createAddonPeerBytesFacility, C as getBrokerEventBus, Cn as DECISIVE_HEAP_SPACES, Ct as NATIVE_PROVIDER_SERVICE_INFIX, D as subscribePassthrough, Dn as heapSpaceField, Dt as capServiceName, E as setNodeEventInterest, En as formatHeapSpaces, Et as capBareAction, F as ipcParentLink, Fn as MESH_QUEUE_TOP_N, Ft as installManifestNativeDeps, G as UDS_NO_ROUTE_PREFIX, Gn as readSocketQueues, Gt as HEAP_RECLAIM_TRIGGER_MB, H as createUdsLoggerWithControl, Hn as createSocketPlaneReader, Ht as createAddonDataPlaneFacility, I as localProviderLink, In as createMeshQueueReader, It as resolveAddonClass, J as answerClaimedGetStatus, Jn as recordSocketFrame, Jt as HUB_MAIN_HEAP_WATCH_LABEL, K as afterWorkerOnlineAnnounce, Kn as EMPTY_SOCKET_DIRECTION, Kt as HEAP_WATCH_INTERVAL_MS, L as createParentUnownedCallHandler, Ln as formatMeshQueue, Lt as buildNpmChildEnv, M as brokerTransportLink, Mn as OUTBOUND_QUEUE_THRESHOLD_BYTES, Mt as CapabilityHandle, N as buildLinkChain, Nn as createOutboundQueueGate, Nt as CapabilityUnavailableError, O as AddonDepsManager, On as readHeapSpaces, Ot as parseCapAction, P as deviceCapResolverLink, Pn as formatOutboundQueueVerdict, Pt as copyBundledNativeModules, Q as CapRouteResolver, Qn as CAP_ACTION_OVERFLOW_LABEL, Qt as RSS_BUDGET_RELEASE_RATIO, R as createUdsEventBridge, Rn as EMPTY_SOCKET_PLANE_BASELINE, Rt as resolveNpmInvocation, S as clusterEventTopic, Sn as isArrayBufferCensusReport, St as validateProviderRegistrations, T as registerEventBusService, Tn as emitHeapDiagnosticReport, Tt as capActionSuffix, U as LocalChildClient, Un as diffSocketPlane, Ut as HEAP_RECLAIM_MIN_INTERVAL_MS, V as createUdsLogger, Vn as createSocketPlaneMeter, Vt as hostNodeIdOf, W as LocalChildRegistry, Wn as formatSocketPlane, Wt as HEAP_RECLAIM_STEADY_STATE_INTERVAL_MS, X as AGENT_CAP_FWD_ACTION, Xn as socketDirectionBytes, Xt as HUB_RSS_BUDGET_ENV, Y as deviceOfGetStatus, Yn as sampleSocketDirection, Yt as HUB_MAIN_RSS_BUDGET_MB, Z as AGENT_CAP_FWD_SERVICE, Zn as socketDirectionMessages, Zt as RSS_BUDGET_REANNOUNCE_MIN_MS, _ as getWorkerDeviceRegistry, _n as ARRAY_BUFFER_CENSUS_THRESHOLD_MB, a as reapProcessGroup, an as createV8Reclaimer, ar as EVENT_PLANE_TOP_N, at as __resetCapUsageRegistryForTests, b as setHubConnected, bn as createInspectorArrayBufferCensus, c as runnerOwnsProcessGroup, cn as nextRssBudgetState, cr as diffEventPlane, ct as UdsLocalTransportClient, d as summarizeMembers, dn as shouldReclaim, dt as PeerAnsweredError, en as RUNNER_RSS_BUDGET_ENV, er as EMPTY_CAP_ACTION_READING, et as classifyCapRoute, f as installManifestSystemDeps, fn as startHeapWatch, ft as localEndpointPath, g as createUdsAddonContext, gn as ARRAY_BUFFER_CENSUS_SUSTAIN_MS, gt as createBrokerDeviceManagerApi, h as createAddonContext, hn as ARRAY_BUFFER_CENSUS_COOLDOWN_MS, ht as buildNativeCapProxy, in as createLoopDelayMeter, ir as diffCapActionCensus, it as PARENT_ROUTED_PROVIDER_ADDON_ID, j as brokerCallForCap, jn as OUTBOUND_QUEUE_SUSTAIN_MS, jt as DeviceRegistry, k as createKernelHwAccel, kn as selectReportedSpaces, kt as deserializeTypedArrays, l as signalAllRunnerGroups, ln as parseRssBudgetMb, lr as formatEventPlane, lt as UdsLocalTransportServer, m as adaptBrokerToCluster, mn as strandedMb, mt as encodeFrame, nn as buildHeapSample, nr as capActionLabel, nt as readMoleculerFanoutMode, o as registerRunnerGroup, on as describeRss, or as createEventPlaneMeter, ot as getCapUsageRegistry, p as installManifestPythonDeps, pn as startRunnerHeapWatch, pt as FrameDecoder, q as GET_STATUS_METHOD, qn as createSocketDirectionCounters, qt as HEAP_WATCH_WARN_RATIO, r as defaultProcessGroupOps, rn as createDeferredHeapWatchSink, rr as createCapActionCensus, rt as CapUsageRegistry, s as releaseRunnerGroup, sn as hubMainRssBudget, sr as createEventPlaneReader, st as createLocalTransport, t as CAP_METHOD_NOT_IMPLEMENTED, tn as ZERO_LOOP_DELAY, tr as MAX_CAP_ACTIONS_PER_PEER, tt as callWithServiceDiscovery, un as reclaimIntervalMs, ut as SocketChannel, v as getOrInitReadinessRegistry, vn as ARRAY_BUFFER_RELEASE_MIN_DROP_RATIO, w as getMoleculerEventStats, wn as HEAP_SPACE_REPORT_MIN_MB, wt as capActionName, x as EVENT_TOPIC_PREFIX, xn as formatArrayBufferCensus, xt as createAddonService, y as getOrInitReadinessRegistryForClient, yn as createArrayBufferCensusGate, yt as mountNativeCapService, z as createUdsEventBus, zn as SOCKET_PLANE_TOP_N, zt as runNpm } from "./child-cap-dispatch-D-7-T--W.mjs";
31
+ import { $ as CapRouteError, $n as CAP_ACTION_UNLABELLED, $t as RUNNER_HEAP_WATCH_INTERVAL_MS, A as resolveHwAccel, An as OUTBOUND_QUEUE_COOLDOWN_MS, At as serializeTypedArrays, B as udsChildLogToWorkerEntry, Bn as SOCKET_QUEUE_TOP_N, Bt as createAddonPeerBytesFacility, C as getBrokerEventBus, Cn as DECISIVE_HEAP_SPACES, Ct as NATIVE_PROVIDER_SERVICE_INFIX, D as subscribePassthrough, Dn as heapSpaceField, Dt as capServiceName, E as setNodeEventInterest, En as formatHeapSpaces, Et as capBareAction, F as ipcParentLink, Fn as MESH_QUEUE_TOP_N, Ft as installManifestNativeDeps, G as UDS_NO_ROUTE_PREFIX, Gn as readSocketQueues, Gt as HEAP_RECLAIM_TRIGGER_MB, H as createUdsLoggerWithControl, Hn as createSocketPlaneReader, Ht as createAddonDataPlaneFacility, I as localProviderLink, In as createMeshQueueReader, It as resolveAddonClass, J as answerClaimedGetStatus, Jn as recordSocketFrame, Jt as HUB_MAIN_HEAP_WATCH_LABEL, K as afterWorkerOnlineAnnounce, Kn as EMPTY_SOCKET_DIRECTION, Kt as HEAP_WATCH_INTERVAL_MS, L as createParentUnownedCallHandler, Ln as formatMeshQueue, Lt as buildNpmChildEnv, M as brokerTransportLink, Mn as OUTBOUND_QUEUE_THRESHOLD_BYTES, Mt as CapabilityHandle, N as buildLinkChain, Nn as createOutboundQueueGate, Nt as CapabilityUnavailableError, O as AddonDepsManager, On as readHeapSpaces, Ot as parseCapAction, P as deviceCapResolverLink, Pn as formatOutboundQueueVerdict, Pt as copyBundledNativeModules, Q as CapRouteResolver, Qn as CAP_ACTION_OVERFLOW_LABEL, Qt as RSS_BUDGET_RELEASE_RATIO, R as createUdsEventBridge, Rn as EMPTY_SOCKET_PLANE_BASELINE, Rt as resolveNpmInvocation, S as clusterEventTopic, Sn as isArrayBufferCensusReport, St as validateProviderRegistrations, T as registerEventBusService, Tn as emitHeapDiagnosticReport, Tt as capActionSuffix, U as LocalChildClient, Un as diffSocketPlane, Ut as HEAP_RECLAIM_MIN_INTERVAL_MS, V as createUdsLogger, Vn as createSocketPlaneMeter, Vt as hostNodeIdOf, W as LocalChildRegistry, Wn as formatSocketPlane, Wt as HEAP_RECLAIM_STEADY_STATE_INTERVAL_MS, X as AGENT_CAP_FWD_ACTION, Xn as socketDirectionBytes, Xt as HUB_RSS_BUDGET_ENV, Y as deviceOfGetStatus, Yn as sampleSocketDirection, Yt as HUB_MAIN_RSS_BUDGET_MB, Z as AGENT_CAP_FWD_SERVICE, Zn as socketDirectionMessages, Zt as RSS_BUDGET_REANNOUNCE_MIN_MS, _ as getWorkerDeviceRegistry, _n as ARRAY_BUFFER_CENSUS_THRESHOLD_MB, a as reapProcessGroup, an as createV8Reclaimer, ar as EVENT_PLANE_TOP_N, at as __resetCapUsageRegistryForTests, b as setHubConnected, bn as createInspectorArrayBufferCensus, c as runnerOwnsProcessGroup, cn as nextRssBudgetState, cr as diffEventPlane, ct as UdsLocalTransportClient, d as summarizeMembers, dn as shouldReclaim, dt as PeerAnsweredError, en as RUNNER_RSS_BUDGET_ENV, er as EMPTY_CAP_ACTION_READING, et as classifyCapRoute, f as installManifestSystemDeps, fn as startHeapWatch, ft as localEndpointPath, g as createUdsAddonContext, gn as ARRAY_BUFFER_CENSUS_SUSTAIN_MS, gt as createBrokerDeviceManagerApi, h as createAddonContext, hn as ARRAY_BUFFER_CENSUS_COOLDOWN_MS, ht as buildNativeCapProxy, in as createLoopDelayMeter, ir as diffCapActionCensus, it as PARENT_ROUTED_PROVIDER_ADDON_ID, j as brokerCallForCap, jn as OUTBOUND_QUEUE_SUSTAIN_MS, jt as DeviceRegistry, k as createKernelHwAccel, kn as selectReportedSpaces, kt as deserializeTypedArrays, l as signalAllRunnerGroups, ln as parseRssBudgetMb, lr as formatEventPlane, lt as UdsLocalTransportServer, m as adaptBrokerToCluster, mn as strandedMb, mt as encodeFrame, nn as buildHeapSample, nr as capActionLabel, nt as readMoleculerFanoutMode, o as registerRunnerGroup, on as describeRss, or as createEventPlaneMeter, ot as getCapUsageRegistry, p as installManifestPythonDeps, pn as startRunnerHeapWatch, pt as FrameDecoder, q as GET_STATUS_METHOD, qn as createSocketDirectionCounters, qt as HEAP_WATCH_WARN_RATIO, r as defaultProcessGroupOps, rn as createDeferredHeapWatchSink, rr as createCapActionCensus, rt as CapUsageRegistry, s as releaseRunnerGroup, sn as hubMainRssBudget, sr as createEventPlaneReader, st as createLocalTransport, t as CAP_METHOD_NOT_IMPLEMENTED, tn as ZERO_LOOP_DELAY, tr as MAX_CAP_ACTIONS_PER_PEER, tt as callWithServiceDiscovery, un as reclaimIntervalMs, ut as SocketChannel, v as getOrInitReadinessRegistry, vn as ARRAY_BUFFER_RELEASE_MIN_DROP_RATIO, w as getMoleculerEventStats, wn as HEAP_SPACE_REPORT_MIN_MB, wt as capActionName, x as EVENT_TOPIC_PREFIX, xn as formatArrayBufferCensus, xt as createAddonService, y as getOrInitReadinessRegistryForClient, yn as createArrayBufferCensusGate, yt as mountNativeCapService, z as createUdsEventBus, zn as SOCKET_PLANE_TOP_N, zt as runNpm } from "./child-cap-dispatch-Vuns6Iq-.mjs";
32
32
  import { n as getSinglePidStats, t as getPidStats } from "./resource-monitor-B1v6E07R.mjs";
33
33
  import { t as CustomActionRegistry } from "./custom-action-registry-B4Cf4O_X.mjs";
34
34
  import { z } from "zod";
@@ -1,4 +1,4 @@
1
- const require_dist = require("./dist-BkhjxcSp.js");
1
+ const require_dist = require("./dist-Tk7iDxUC.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 { Zn as asJsonObject } from "./dist-BQS_M1qw.mjs";
1
+ import { Zn as asJsonObject } from "./dist-BYHMg5zg.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.340",
3
+ "version": "1.2.342",
4
4
  "description": "Core addon for CamStack — builtins, pipeline, process management, auth, logging, events",
5
5
  "keywords": [
6
6
  "camstack",