@camstack/system 1.2.338 → 1.2.340

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 +4 -2
  16. package/dist/builtins/composer/composer.addon.mjs +4 -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-BE8jB_JS.mjs → child-cap-dispatch-D-7-T--W.mjs} +1 -1
  52. package/dist/{child-cap-dispatch-CAi5El4k.js → child-cap-dispatch-PI1sSVze.js} +1 -1
  53. package/dist/{composition-sources-CJPoLPZa.mjs → composition-sources-CTqzrv1t.mjs} +1 -1
  54. package/dist/{composition-sources-C_FdKpSd.js → composition-sources-DBGzhDIQ.js} +1 -1
  55. package/dist/{dist-YXCrqVwr.mjs → dist-BQS_M1qw.mjs} +97 -32
  56. package/dist/{dist-PCvk1lCg.js → dist-BkhjxcSp.js} +102 -31
  57. package/dist/index.js +2 -2
  58. package/dist/index.mjs +2 -2
  59. package/dist/{retired-settings-keys-F2ehGIfq.js → retired-settings-keys-CLazIr8J.js} +1 -1
  60. package/dist/{retired-settings-keys-DKrsFjli.mjs → retired-settings-keys-RD8q79Sb.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-CAi5El4k.js");
2
+ const require_child_cap_dispatch = require("./child-cap-dispatch-PI1sSVze.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-BE8jB_JS.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-D-7-T--W.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-PCvk1lCg.js");
6
+ const require_dist = require("../../dist-BkhjxcSp.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 { Hn as errMsg, Un as BaseAddon, V as addonPagesCapability, mr as EventCategory } from "../../dist-YXCrqVwr.mjs";
1
+ import { Un as errMsg, V as addonPagesCapability, Wn as BaseAddon, hr as EventCategory } from "../../dist-BQS_M1qw.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-PCvk1lCg.js");
6
+ const require_dist = require("../../dist-BkhjxcSp.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 { Hn as errMsg, U as addonWidgetsCapability, Un as BaseAddon, mr as EventCategory } from "../../dist-YXCrqVwr.mjs";
1
+ import { U as addonWidgetsCapability, Un as errMsg, Wn as BaseAddon, hr as EventCategory } from "../../dist-BQS_M1qw.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-PCvk1lCg.js");
6
+ const require_dist = require("../../dist-BkhjxcSp.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 { $n as createEvent, Hn as errMsg, Un as BaseAddon, W as alertsCapability, mr as EventCategory, n as AlertSchema } from "../../dist-YXCrqVwr.mjs";
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";
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-PCvk1lCg.js");
6
+ const require_dist = require("../../dist-BkhjxcSp.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 { Hn as errMsg, Un as BaseAddon, ar as isEvent, b as FIRST_LEVEL_MACRO_CLASSES, mr as EventCategory, q as bareAddonId, rn as ptzAutotrackCapability } from "../../dist-YXCrqVwr.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-BQS_M1qw.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-PCvk1lCg.js");
6
+ const require_dist = require("../../dist-BkhjxcSp.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, Un as BaseAddon, m as DATABASE_SNAPSHOT_SUFFIX, mr as EventCategory, or as nodePin, pr as toNodeId, vn as storageOccupancyCapability } from "../../dist-YXCrqVwr.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-BQS_M1qw.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-PCvk1lCg.js");
6
+ const require_dist = require("../../dist-BkhjxcSp.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 { $n as createEvent, Hn as errMsg, Kt as memoizePinnedFfmpeg, O as MOTION_CLOSE_AFTER_MS, Un as BaseAddon, Vn as DeviceType, Yt as motionCapability, Z as cameraGridLayoutCapability, _ as DERIVED_CAMERA_SILENCED_CAP_NAMES, bn as streamCatalogCapability, hn as snapshotCapability, i as BaseDevice, kn as buildFfmpegArgs, mr as EventCategory, rr as hydrateSchema, ut as declarationOwnerNodeId, v as DeclaredDevices, zn as DeviceFeature } from "../../dist-YXCrqVwr.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-BQS_M1qw.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-PCvk1lCg.js");
7
- const require_composition_sources = require("../../composition-sources-C_FdKpSd.js");
6
+ const require_dist = require("../../dist-BkhjxcSp.js");
7
+ const require_composition_sources = require("../../composition-sources-DBGzhDIQ.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. */
@@ -1355,6 +1355,7 @@ function evaluateFields(host, keys, now) {
1355
1355
  const record = next.get(key);
1356
1356
  if (record === void 0) continue;
1357
1357
  const candidateMemory = require_dist.cloneStatefulExpressionMemory(record.expressionMemory);
1358
+ if (record.outcome?.state === "unavailable") require_dist.disarmRoseMemory(candidateMemory);
1358
1359
  const outcome = require_dist.evaluateCompositionField({
1359
1360
  source: record.plan.source,
1360
1361
  read,
@@ -1367,6 +1368,7 @@ function evaluateFields(host, keys, now) {
1367
1368
  }
1368
1369
  });
1369
1370
  const expressionSucceeded = outcome.state !== "unavailable";
1371
+ if (expressionSucceeded) candidateMemory.disarmRoseNext = false;
1370
1372
  let evaluated = {
1371
1373
  ...record,
1372
1374
  outcome,
@@ -1,5 +1,5 @@
1
- import { $ as composerCapability, $n as createEvent, An as cloneStatefulExpressionMemory, Fn as compositionSliceKey, Hn as errMsg, In as compositionSourceKey, Ln as createStatefulExpressionMemory, Mn as composedDeviceStableId, Nn as compositionFeatureEnabled, On as COMPOSER_ADDON_ID, Pn as compositionItemFieldPath, Rn as toExpressionValue, St as evaluateCompositionField, Un as BaseAddon, Vn as DeviceType, Y as buildCapabilityLookup, c as COMPOSED_ITEM_FIXED_FIELDS, en as planComposition, et as compositionFieldKey, i as BaseDevice, jn as composedDeviceRef, mr as EventCategory, t as ALL_CAPABILITY_DEFINITIONS, v as DeclaredDevices } from "../../dist-YXCrqVwr.mjs";
2
- import { n as normalizedNativeOwner } from "../../composition-sources-CJPoLPZa.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-BQS_M1qw.mjs";
2
+ import { n as normalizedNativeOwner } from "../../composition-sources-CTqzrv1t.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. */
@@ -1350,6 +1350,7 @@ function evaluateFields(host, keys, now) {
1350
1350
  const record = next.get(key);
1351
1351
  if (record === void 0) continue;
1352
1352
  const candidateMemory = cloneStatefulExpressionMemory(record.expressionMemory);
1353
+ if (record.outcome?.state === "unavailable") disarmRoseMemory(candidateMemory);
1353
1354
  const outcome = evaluateCompositionField({
1354
1355
  source: record.plan.source,
1355
1356
  read,
@@ -1362,6 +1363,7 @@ function evaluateFields(host, keys, now) {
1362
1363
  }
1363
1364
  });
1364
1365
  const expressionSucceeded = outcome.state !== "unavailable";
1366
+ if (expressionSucceeded) candidateMemory.disarmRoseNext = false;
1365
1367
  let evaluated = {
1366
1368
  ...record,
1367
1369
  outcome,
@@ -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-PCvk1lCg.js");
6
+ const require_dist = require("../../dist-BkhjxcSp.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 { Un as BaseAddon, Vt as logDestinationCapability } from "../../dist-YXCrqVwr.mjs";
1
+ import { Vt as logDestinationCapability, Wn as BaseAddon } from "../../dist-BQS_M1qw.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-PCvk1lCg.js");
4
- const require_composition_sources = require("../../composition-sources-C_FdKpSd.js");
3
+ const require_dist = require("../../dist-BkhjxcSp.js");
4
+ const require_composition_sources = require("../../composition-sources-DBGzhDIQ.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, Hn as errMsg, In as compositionSourceKey, Un 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-YXCrqVwr.mjs";
2
- import { t as describeCompositionSources } from "../../composition-sources-CJPoLPZa.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-BQS_M1qw.mjs";
2
+ import { t as describeCompositionSources } from "../../composition-sources-CTqzrv1t.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-PCvk1lCg.js");
7
- const require_retired_settings_keys = require("../../retired-settings-keys-F2ehGIfq.js");
6
+ const require_dist = require("../../dist-BkhjxcSp.js");
7
+ const require_retired_settings_keys = require("../../retired-settings-keys-CLazIr8J.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 DeviceRole, Bt as locationIconKey, D as MINUTES_PER_DAY, Hn as errMsg, It as legacyAutoLinkIds, Ot as formatMinutes, P as STREAM_PROFILE_META, S as FieldClaimSchema, T as LocationIconIdSchema, Un as BaseAddon, Vn as DeviceType, X as buildStreamParamsConfigSchema, Xt as normalizeUnit, Yn as WELL_KNOWN_TAB_MAP, _t as deviceStateCapability, bt as enumerateItemArrayFields, fr as sleep$1, ft as defineExtensionSlotProvider, g as DAY_NAMES, gt as deviceManagerCapability, ht as deviceExtensionCapability, ir as isDeviceConfigCap, ln as runtimeStatePolicyFor, mn as siteZoneKey, mr as EventCategory, o as CAMERA_SWITCH_ORDER, 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, zn as DeviceFeature } from "../../dist-YXCrqVwr.mjs";
2
- import { n as purgeRetiredSettingsRows } from "../../retired-settings-keys-DKrsFjli.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-BQS_M1qw.mjs";
2
+ import { n as purgeRetiredSettingsRows } from "../../retired-settings-keys-RD8q79Sb.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-PCvk1lCg.js");
6
+ const require_dist = require("../../dist-BkhjxcSp.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 { Un as BaseAddon, Vt as logDestinationCapability } from "../../dist-YXCrqVwr.mjs";
1
+ import { Vt as logDestinationCapability, Wn as BaseAddon } from "../../dist-BQS_M1qw.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-PCvk1lCg.js");
3
+ const require_dist = require("../../dist-BkhjxcSp.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 { $n as createEvent, Hn as errMsg, M as RecordingStatusSchema, Un as BaseAddon, k as RECORDING_SOURCE_CAMSTACK_ADDON, mr as EventCategory } from "../../dist-YXCrqVwr.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-BQS_M1qw.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-PCvk1lCg.js");
6
+ const require_dist = require("../../dist-BkhjxcSp.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, Un as BaseAddon, r as ApiKeyRecordSchema } from "../../dist-YXCrqVwr.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";
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-PCvk1lCg.js");
3
+ const require_dist = require("../../dist-BkhjxcSp.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 { Un as BaseAddon, mr as EventCategory, zt as localNetworkCapability } from "../../dist-YXCrqVwr.mjs";
1
+ import { Wn as BaseAddon, hr as EventCategory, zt as localNetworkCapability } from "../../dist-BQS_M1qw.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-PCvk1lCg.js");
6
+ const require_dist = require("../../dist-BkhjxcSp.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 { Un as BaseAddon, Vt as logDestinationCapability } from "../../dist-YXCrqVwr.mjs";
1
+ import { Vt as logDestinationCapability, Wn as BaseAddon } from "../../dist-BQS_M1qw.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-PCvk1lCg.js");
6
+ const require_dist = require("../../dist-BkhjxcSp.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 { $n as createEvent, Dt as foldSnapshotByFunction, Hn as errMsg, Un as BaseAddon, in as reducePoints, mr as EventCategory, on as resolveBucketMs, qt as metricsProviderCapability } from "../../dist-YXCrqVwr.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-BQS_M1qw.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-PCvk1lCg.js");
6
+ const require_dist = require("../../dist-BkhjxcSp.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 { Hn as errMsg, Un as BaseAddon, fn as scoreRuntimes, mr as EventCategory, tn as platformProbeCapability, tr as emitReadiness, yt as enumerateInferenceDevices } from "../../dist-YXCrqVwr.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";
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-PCvk1lCg.js");
6
+ const require_dist = require("../../dist-BkhjxcSp.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 { Un as BaseAddon, mr as EventCategory } from "../../dist-YXCrqVwr.mjs";
1
+ import { Wn as BaseAddon, hr as EventCategory } from "../../dist-BQS_M1qw.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-PCvk1lCg.js");
6
+ const require_dist = require("../../dist-BkhjxcSp.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 { Hn as errMsg, J as batteryCapability, Kt as memoizePinnedFfmpeg, Un as BaseAddon, Vn as DeviceType, a as BatteryStatusSchema, hn as snapshotCapability, mr as EventCategory, or as nodePin, pt as deriveBatteryPresence, q as bareAddonId, xn as streamQualityLabel, zn as DeviceFeature } from "../../dist-YXCrqVwr.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-BQS_M1qw.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-PCvk1lCg.js");
6
+ const require_dist = require("../../dist-BkhjxcSp.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, Un as BaseAddon, yn as storageProviderCapability } from "../../dist-YXCrqVwr.mjs";
1
+ import { Et as filesystemBrowseCapability, Wn as BaseAddon, yn as storageProviderCapability } from "../../dist-BQS_M1qw.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-PCvk1lCg.js");
6
+ const require_dist = require("../../dist-BkhjxcSp.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, Un as BaseAddon, Wt as mayReadLocation, _n as storageMigrationCapability, gn as storageCapability, kt as gbToBytes, mr as EventCategory, pn as settingsStoreCapability, sn as resolveLocationMode, sr as parseJsonObject, w as LegacyStorageLocationDefaultSchema, z as StorageMigrationJobSchema } from "../../dist-YXCrqVwr.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-BQS_M1qw.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-PCvk1lCg.js");
6
+ const require_dist = require("../../dist-BkhjxcSp.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 { Hn as errMsg, Un as BaseAddon, rr as hydrateSchema } from "../../dist-YXCrqVwr.mjs";
1
+ import { Un as errMsg, Wn as BaseAddon, ir as hydrateSchema } from "../../dist-BQS_M1qw.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-PCvk1lCg.js");
6
+ const require_dist = require("../../dist-BkhjxcSp.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 { Un as BaseAddon, Vt as logDestinationCapability } from "../../dist-YXCrqVwr.mjs";
1
+ import { Vt as logDestinationCapability, Wn as BaseAddon } from "../../dist-BQS_M1qw.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,4 +1,4 @@
1
- import { $n as createEvent, mr as EventCategory$1 } from "./dist-YXCrqVwr.mjs";
1
+ import { er as createEvent, hr as EventCategory$1 } from "./dist-BQS_M1qw.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,5 +1,5 @@
1
1
  const require_chunk = require("./chunk-Cek0wNdY.js");
2
- const require_dist = require("./dist-PCvk1lCg.js");
2
+ const require_dist = require("./dist-BkhjxcSp.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 { Hn as errMsg, In as compositionSourceKey } from "./dist-YXCrqVwr.mjs";
1
+ import { In as compositionSourceKey, Un as errMsg } from "./dist-BQS_M1qw.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
@@ -1,4 +1,4 @@
1
- const require_dist = require("./dist-PCvk1lCg.js");
1
+ const require_dist = require("./dist-BkhjxcSp.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
@@ -3521,7 +3521,7 @@ function errMsg(err) {
3521
3521
  return String(err);
3522
3522
  }
3523
3523
  //#endregion
3524
- //#region ../types/dist/composition-D7ULvLdD.mjs
3524
+ //#region ../types/dist/composition-Bzr7GwgP.mjs
3525
3525
  var AUDIO_ENCODER_BY_CODEC = {
3526
3526
  opus: "libopus",
3527
3527
  aac: "aac",
@@ -4001,6 +4001,8 @@ var SOURCE_CAP_ACTIVE_FIELD = {
4001
4001
  vibration: "detected",
4002
4002
  tamper: "tampered"
4003
4003
  };
4004
+ /** Cap names whose presence in a device's bindings qualify it as a source. */
4005
+ var SOURCE_CAPS = Object.keys(SOURCE_CAP_ACTIVE_FIELD);
4004
4006
  /**
4005
4007
  * How recent a source's own transition timestamp must be for a FIRST
4006
4008
  * sighting that is already active to count as a genuine rise rather than a
@@ -4093,6 +4095,11 @@ function evaluateRose(level, changedAt, debounceMs, call, field, env) {
4093
4095
  const timestamp = typeof changedAt === "number" && Number.isFinite(changedAt) ? changedAt : null;
4094
4096
  const debounce = debounceMs === void 0 ? DEFAULT_ROSE_DEBOUNCE_MS : asFiniteNumber(debounceMs, "rose", 2);
4095
4097
  if (debounce < 0) throw new ExpressionEvalError("rose: debounce must be a non-negative finite number");
4098
+ if (call.disarmNext === true || field.disarmRoseNext) {
4099
+ call.disarmNext = false;
4100
+ if (call.priorLevel === void 0) call.priorLevel = active;
4101
+ return env.currentOutput;
4102
+ }
4096
4103
  const verdict = evaluateSensorLevelEdge({
4097
4104
  level: active,
4098
4105
  changedAt: timestamp,
@@ -4107,6 +4114,17 @@ function evaluateRose(level, changedAt, debounceMs, call, field, env) {
4107
4114
  field.acceptedEdgeAt = verdict.timestamp;
4108
4115
  return verdict.timestamp;
4109
4116
  }
4117
+ /** Next evaluation of every `rose` call baselines without rising. */
4118
+ function disarmRoseMemory(memory) {
4119
+ memory.disarmRoseNext = true;
4120
+ for (const [path, call] of memory.calls) {
4121
+ if (call.kind !== "rose") continue;
4122
+ memory.calls.set(path, {
4123
+ ...call,
4124
+ disarmNext: true
4125
+ });
4126
+ }
4127
+ }
4110
4128
  /**
4111
4129
  * `count(x)`: how many times `x` strictly advanced (D670). It starts on the
4112
4130
  * first ANSWERED read of `x`:
@@ -4828,13 +4846,15 @@ function evaluateAst(node, scope, opts) {
4828
4846
  function createStatefulExpressionMemory() {
4829
4847
  return {
4830
4848
  calls: /* @__PURE__ */ new Map(),
4831
- acceptedEdgeAt: null
4849
+ acceptedEdgeAt: null,
4850
+ disarmRoseNext: false
4832
4851
  };
4833
4852
  }
4834
4853
  function cloneStatefulExpressionMemory(memory) {
4835
4854
  return {
4836
4855
  calls: new Map([...memory.calls].map(([path, call]) => [path, { ...call }])),
4837
- acceptedEdgeAt: memory.acceptedEdgeAt
4856
+ acceptedEdgeAt: memory.acceptedEdgeAt,
4857
+ disarmRoseNext: memory.disarmRoseNext
4838
4858
  };
4839
4859
  }
4840
4860
  function evaluateStatefulExpressionCall(invocation, memory, env) {
@@ -9823,7 +9843,7 @@ var BrokerStatusEnum = z.enum([
9823
9843
  "unreachable",
9824
9844
  "error"
9825
9845
  ]);
9826
- var BrokerInfoSchema$1 = z.object({
9846
+ var BrokerInfoSchema = z.object({
9827
9847
  /** Stable broker id. Persisted; survives addon restarts. */
9828
9848
  id: z.string(),
9829
9849
  /** Addon id of the provider that OWNS this broker.
@@ -9966,8 +9986,8 @@ var brokerCapability = {
9966
9986
  kind: "poll"
9967
9987
  },
9968
9988
  methods: {
9969
- list: method(ListInputSchema, z.array(BrokerInfoSchema$1)),
9970
- get: method(GetInputSchema, BrokerInfoSchema$1.nullable()),
9989
+ list: method(ListInputSchema, z.array(BrokerInfoSchema)),
9990
+ get: method(GetInputSchema, BrokerInfoSchema.nullable()),
9971
9991
  /** Enumerate which addon provides which broker kind(s) for the
9972
9992
  * unified create picker. The auto-mount fans this array across
9973
9993
  * every registered `broker` provider (array-output method), so the
@@ -18468,7 +18488,7 @@ var BrokerStatusSchema$1 = z.enum([
18468
18488
  "unreachable",
18469
18489
  "tls-error"
18470
18490
  ]);
18471
- var BrokerInfoSchema = z.object({
18491
+ var BrokerInfoSchema$1 = z.object({
18472
18492
  id: z.string(),
18473
18493
  name: z.string(),
18474
18494
  url: z.string(),
@@ -18541,7 +18561,7 @@ var mqttBrokerCapability = {
18541
18561
  kind: "poll"
18542
18562
  },
18543
18563
  methods: {
18544
- listBrokers: method(z.void(), z.array(BrokerInfoSchema)),
18564
+ listBrokers: method(z.void(), z.array(BrokerInfoSchema$1)),
18545
18565
  getBrokerConfig: method(IdInputSchema, BrokerConnectionDetailsSchema, { auth: "admin" }),
18546
18566
  addBroker: method(AddBrokerInputSchema, AddBrokerResultSchema, {
18547
18567
  kind: "mutation",
@@ -23651,6 +23671,7 @@ var KeyEventSchema = z.object({
23651
23671
  bestEventId: z.string(),
23652
23672
  /** Track lifetime in ms (lastSeen - firstSeen). */
23653
23673
  windowMs: z.number().optional(),
23674
+ audioLabels: z.array(TrackAudioLabelSchema).readonly().optional(),
23654
23675
  ...TrackFlagFields,
23655
23676
  ...TrackRetrainFields
23656
23677
  });
@@ -37810,28 +37831,29 @@ setOverlay: method(z.object({
37810
37831
  *
37811
37832
  * This cap owns the other half: a per-(camera, slot) BINDING that says
37812
37833
  * which value feeds the slot, how it is formatted, and under which
37813
- * conditions it is shown at all. One addon renders every binding on every
37814
- * camera, so a new source costs zero driver code.
37815
- *
37816
- * Three deliberate choices, each with a rejected alternative:
37817
- *
37818
- * 1. A source is `(capName, valuePath)` over the kernel's device
37819
- * runtime-state mirror — NOT a closed enum of source kinds. Every
37820
- * cap-keyed slice a device publishes is bindable the day the cap
37821
- * ships. The rejected alternative (one enum member per source, with
37822
- * a resolver branch each) is what makes "add the humidity too" a
37823
- * code change.
37824
- * 2. The display gate reuses `NcConditionsSchema` verbatim — the
37825
- * notification centre's condition vocabulary — rather than a parallel
37826
- * model. An operator who has learned one condition editor has learned
37827
- * both.
37828
- * 3. Because the renderer's facts are device STATE and not a detection
37829
- * record, only a SUBSET of that vocabulary can be answered here.
37830
- * `setSlotBinding` REJECTS the rest at write time (see
37831
- * `getConditionSupport`). It does not accept-then-fail-closed: a
37832
- * condition that can never be true renders a permanently blank
37833
- * overlay, and a blank overlay looks exactly like a broken camera.
37834
+ * conditions it is shown at all. Named TEMPLATES combine many device
37835
+ * fields into one overlay string (Scrypted OSD Manager parity).
37834
37836
  */
37837
+ /** One field reference inside a named multi-device template. */
37838
+ var OsdTemplateFieldSchema = z.object({
37839
+ deviceId: z.number().int(),
37840
+ capName: z.string().min(1).max(64),
37841
+ valuePath: z.string().min(1).max(64),
37842
+ /** Convert TO this unit at render (`tryConvertUnit`). Absent = source unit. */
37843
+ displayUnit: z.string().max(16).optional(),
37844
+ maxDecimals: z.number().int().min(0).max(4).default(1)
37845
+ });
37846
+ /**
37847
+ * A named template: several device fields → one parser string with
37848
+ * `{deviceId.capName.valuePath}` tokens (Scrypted `{deviceId.sensorId}`).
37849
+ */
37850
+ var OsdNamedTemplateSchema = z.object({
37851
+ id: z.string().min(1).max(64),
37852
+ 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}°`. */
37855
+ parser: z.string().max(256).default("")
37856
+ });
37835
37857
  /** Where a slot's value comes from. */
37836
37858
  var OsdSourceSchema = z.discriminatedUnion("kind", [
37837
37859
  z.object({
@@ -37850,11 +37872,17 @@ var OsdSourceSchema = z.discriminatedUnion("kind", [
37850
37872
  deviceId: z.number().int().optional(),
37851
37873
  capName: z.string().min(1).max(64),
37852
37874
  /** Dot path inside the slice, e.g. `detected`, `value`, `mode`. */
37853
- valuePath: z.string().min(1).max(64)
37875
+ valuePath: z.string().min(1).max(64),
37876
+ /** Convert TO this unit at render. Absent = no conversion. */
37877
+ displayUnit: z.string().max(16).optional()
37854
37878
  }),
37855
37879
  z.object({
37856
37880
  kind: z.literal("latest-recognition"),
37857
37881
  recognition: z.enum(["person", "plate"])
37882
+ }),
37883
+ z.object({
37884
+ kind: z.literal("template"),
37885
+ templateId: z.string().min(1).max(64)
37858
37886
  })
37859
37887
  ]);
37860
37888
  var OsdSlotBindingSchema = z.object({
@@ -37870,7 +37898,10 @@ var OsdSlotBindingSchema = z.object({
37870
37898
  * documented workaround for firmwares that reject `.` in overlay text.
37871
37899
  */
37872
37900
  maxDecimals: z.number().int().min(0).max(4).default(1),
37873
- /** Appended via `${unit}`. The state mirror does not carry units. */
37901
+ /**
37902
+ * Appended via `${unit}` when no unit conversion produces a label.
37903
+ * Prefer `source.displayUnit` for converted device-state values.
37904
+ */
37874
37905
  unitLabel: z.string().max(8).optional(),
37875
37906
  /** Raw value → display text, e.g. `{"true":"MOTION","false":""}`. */
37876
37907
  valueMap: z.record(z.string(), z.string()).optional(),
@@ -38024,6 +38055,21 @@ var osdManagerCapability = {
38024
38055
  renderDevice: method(z.object({ deviceId: z.number().int() }), z.object({ results: z.array(OsdRenderResultSchema) }), {
38025
38056
  kind: "mutation",
38026
38057
  auth: "admin"
38058
+ }),
38059
+ /** Every named multi-device template. */
38060
+ listTemplates: method(z.object({}), z.object({ templates: z.array(OsdNamedTemplateSchema) }), { auth: "admin" }),
38061
+ /**
38062
+ * Create or replace a named template by `id`. Returns the stored record
38063
+ * after Zod normalisation.
38064
+ */
38065
+ upsertTemplate: method(z.object({ template: OsdNamedTemplateSchema }), z.object({ template: OsdNamedTemplateSchema }), {
38066
+ kind: "mutation",
38067
+ auth: "admin"
38068
+ }),
38069
+ /** Drop a named template. Bindings that still reference it render unreadable. */
38070
+ deleteTemplate: method(z.object({ templateId: z.string().min(1).max(64) }), z.object({ success: z.literal(true) }), {
38071
+ kind: "mutation",
38072
+ auth: "admin"
38027
38073
  })
38028
38074
  }
38029
38075
  };
@@ -44653,6 +44699,7 @@ function evaluateCompositionField(input) {
44653
44699
  };
44654
44700
  }
44655
44701
  }
44702
+ SOURCE_CAPS.filter((cap) => cap !== "switch" && cap !== "motion");
44656
44703
  /**
44657
44704
  * Runtime defaults -- used by ConfigManager.get() for backward compatibility
44658
44705
  * until Plan B wires all runtime settings to the system_settings SQL table.
@@ -51389,6 +51436,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
51389
51436
  addonId: null,
51390
51437
  access: "create"
51391
51438
  },
51439
+ "osdManager.deleteTemplate": {
51440
+ capName: "osd-manager",
51441
+ capScope: "system",
51442
+ addonId: null,
51443
+ access: "delete"
51444
+ },
51392
51445
  "osdManager.getConditionSupport": {
51393
51446
  capName: "osd-manager",
51394
51447
  capScope: "system",
@@ -51407,6 +51460,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
51407
51460
  addonId: null,
51408
51461
  access: "view"
51409
51462
  },
51463
+ "osdManager.listTemplates": {
51464
+ capName: "osd-manager",
51465
+ capScope: "system",
51466
+ addonId: null,
51467
+ access: "view"
51468
+ },
51410
51469
  "osdManager.previewSlot": {
51411
51470
  capName: "osd-manager",
51412
51471
  capScope: "system",
@@ -51425,6 +51484,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
51425
51484
  addonId: null,
51426
51485
  access: "create"
51427
51486
  },
51487
+ "osdManager.upsertTemplate": {
51488
+ capName: "osd-manager",
51489
+ capScope: "system",
51490
+ addonId: null,
51491
+ access: "create"
51492
+ },
51428
51493
  "petFeeder.callPet": {
51429
51494
  capName: "pet-feeder",
51430
51495
  capScope: "device",
@@ -58803,4 +58868,4 @@ function enumerateInferenceDevices(hw) {
58803
58868
  return out;
58804
58869
  }
58805
58870
  //#endregion
58806
- export { composerCapability as $, createEvent as $n, parseStreamParamsFormPatch as $t, REDACTED_SECRET as A, cloneStatefulExpressionMemory as An, isArrayOutputSchema as At, UserRecordSchema as B, DeviceRole as Bn, locationIconKey as Bt, LOG_LEVEL_RANK as C, validateComposition as Cn, evictionPolicyOfLocation as Ct, MINUTES_PER_DAY as D, withLocationMode as Dn, foldSnapshotByFunction as Dt, METHOD_ACCESS_MAP as E, vectorStoreCapability as En, filesystemBrowseCapability as Et, ScopedTokenSchema as F, compositionSliceKey as Fn, kebabToCamel as Ft, authProviderCapability as G, DEVICE_SETTINGS_CONTRIBUTION_METHODS as Gn, mayWriteToLocation as Gt, addonSettingsCapability as H, errMsg as Hn, logLevelAtMost as Ht, StorageCleanupJobSchema as I, compositionSourceKey as In, legacyAutoLinkIds as It, batteryCapability as J, ReadinessTimeoutError as Jn, modeMayWrite as Jt, backupCapability as K, DEVICE_STATUS_METHOD as Kn, memoizePinnedFfmpeg as Kt, StorageLocationModeSchema as L, createStatefulExpressionMemory as Ln, legacyModeOf as Lt, RecordingStatusSchema as M, composedDeviceStableId as Mn, isLocationEnabled as Mt, STORAGE_ACCESS_FALLBACK as N, compositionFeatureEnabled as Nn, isObjectInput as Nt, MOTION_CLOSE_AFTER_MS as O, COMPOSER_ADDON_ID as On, formatMinutes as Ot, STREAM_PROFILE_META as P, compositionItemFieldPath as Pn, isVoidInput as Pt, collectSecretConfigKeys as Q, asString$1 as Qn, objectInputDeclaresRequiredDeviceId as Qt, StorageLocationTypeSchema as R, toExpressionValue as Rn, lifecycleJobSchema as Rt, FieldClaimSchema as S, userManagementCapability as Sn, evaluateCompositionField as St, LocationIconIdSchema as T, vectorIndexDimConflictError as Tn, extractNestedAddonId as Tt, addonWidgetsCapability as U, BaseAddon as Un, looseSchema as Ut, addonPagesCapability as V, DeviceType as Vn, logDestinationCapability as Vt, alertsCapability as W, DATAPLANE_SECRET_HEADER as Wn, mayReadLocation as Wt, buildStreamParamsConfigSchema as X, asJsonObject as Xn, normalizeUnit as Xt, buildCapabilityLookup as Y, WELL_KNOWN_TAB_MAP as Yn, motionCapability as Yt, cameraGridLayoutCapability as Z, asNumber as Zn, objectInputDeclaresAddonId as Zt, DERIVED_CAMERA_SILENCED_CAP_NAMES as _, storageMigrationCapability as _n, deviceStateCapability as _t, BatteryStatusSchema as a, replacedFieldKeys as an, isEvent as ar, coreBlockSourceKind as at, FIRST_LEVEL_MACRO_CLASSES as b, streamCatalogCapability as bn, enumerateItemArrayFields as bt, COMPOSED_ITEM_FIXED_FIELDS as c, resolveMethodAuth as cn, parseJsonUnknown as cr, dataStoreProviderCapability as ct, CORE_BLOCK_ADDON_PREFIX as d, scopesAllowDeviceCap as dn, scopeKey as dr, decodeVectorBase64 as dt, planComposition as en, emitDownForOwnedCaps as er, compositionFieldKey as et, CoreBlockSchema as f, scoreRuntimes as fn, sleep as fr, defineExtensionSlotProvider as ft, DAY_NAMES as g, storageCapability as gn, deviceManagerCapability as gt, DATABASE_SNAPSHOT_TIMEOUT_MS as h, snapshotCapability as hn, deviceExtensionCapability as ht, BaseDevice as i, reducePoints as in, isDeviceConfigCap as ir, coreBlockIdFromAddonId as it, RUNTIME_DEFAULTS as j, composedDeviceRef as jn, isCollectionArrayMethod as jt, RECORDING_SOURCE_CAMSTACK_ADDON as k, buildFfmpegArgs as kn, gbToBytes as kt, COMPOSER_RUNNER_ID as l, runtimeStatePolicyFor as ln, readinessKey as lr, databaseSnapshotCapability as lt, DATABASE_SNAPSHOT_SUFFIX as m, siteZoneKey as mn, EventCategory as mr, describeComposableCaps as mt, AlertSchema as n, procedureAuthKey as nn, expandCapMethods as nr, coreBlockAddonId as nt, CAMERA_SWITCH_ORDER as o, resolveBucketMs as on, nodePin as or, coreBlocksCapability as ot, DATABASE_SNAPSHOT_PARTIAL_SUFFIX as p, settingsStoreCapability as pn, toNodeId as pr, deriveBatteryPresence as pt, bareAddonId as q, ReadinessRegistry as qn, metricsProviderCapability as qt, ApiKeyRecordSchema as r, ptzAutotrackCapability as rn, hydrateSchema as rr, coreBlockComposition as rt, CAP_NAMES_WITH_STATUS as s, resolveLocationMode as sn, parseJsonObject as sr, createDeviceExtensionProvider as st, ALL_CAPABILITY_DEFINITIONS as t, platformProbeCapability as tn, emitReadiness as tr, compositionSourceRefs as tt, CORE_BLOCKS_ADDON_ID as u, scopesAllowAddon as un, resolveCapMount as ur, declarationOwnerNodeId as ut, DeclaredDevices as v, storageOccupancyCapability as vn, deviceStatusCapability as vt, LegacyStorageLocationDefaultSchema as w, vectorDimFromBase64 as wn, expandContainer as wt, FieldClaimModeSchema as x, streamQualityLabel as xn, enumerateSchemaFields as xt, DeviceStatusSchema as y, storageProviderCapability as yn, enumerateInferenceDevices as yt, StorageMigrationJobSchema as z, DeviceFeature as zn, localNetworkCapability as zt };
58871
+ export { composerCapability as $, asString$1 as $n, parseStreamParamsFormPatch as $t, REDACTED_SECRET as A, cloneStatefulExpressionMemory as An, isArrayOutputSchema as At, UserRecordSchema as B, DeviceFeature as Bn, locationIconKey as Bt, LOG_LEVEL_RANK as C, validateComposition as Cn, evictionPolicyOfLocation as Ct, MINUTES_PER_DAY as D, withLocationMode as Dn, foldSnapshotByFunction as Dt, METHOD_ACCESS_MAP as E, vectorStoreCapability as En, filesystemBrowseCapability as Et, ScopedTokenSchema as F, compositionSliceKey as Fn, kebabToCamel as Ft, authProviderCapability as G, DATAPLANE_SECRET_HEADER as Gn, mayWriteToLocation as Gt, addonSettingsCapability as H, DeviceType as Hn, logLevelAtMost as Ht, StorageCleanupJobSchema as I, compositionSourceKey as In, legacyAutoLinkIds as It, batteryCapability as J, ReadinessRegistry as Jn, modeMayWrite as Jt, backupCapability as K, DEVICE_SETTINGS_CONTRIBUTION_METHODS as Kn, memoizePinnedFfmpeg as Kt, StorageLocationModeSchema as L, createStatefulExpressionMemory as Ln, legacyModeOf as Lt, RecordingStatusSchema as M, composedDeviceStableId as Mn, isLocationEnabled as Mt, STORAGE_ACCESS_FALLBACK as N, compositionFeatureEnabled as Nn, isObjectInput as Nt, MOTION_CLOSE_AFTER_MS as O, COMPOSER_ADDON_ID as On, formatMinutes as Ot, STREAM_PROFILE_META as P, compositionItemFieldPath as Pn, isVoidInput as Pt, collectSecretConfigKeys as Q, asNumber as Qn, objectInputDeclaresRequiredDeviceId as Qt, StorageLocationTypeSchema as R, disarmRoseMemory as Rn, lifecycleJobSchema as Rt, FieldClaimSchema as S, userManagementCapability as Sn, evaluateCompositionField as St, LocationIconIdSchema as T, vectorIndexDimConflictError as Tn, extractNestedAddonId as Tt, addonWidgetsCapability as U, errMsg as Un, looseSchema as Ut, addonPagesCapability as V, DeviceRole as Vn, logDestinationCapability as Vt, alertsCapability as W, BaseAddon as Wn, mayReadLocation as Wt, buildStreamParamsConfigSchema as X, WELL_KNOWN_TAB_MAP as Xn, normalizeUnit as Xt, buildCapabilityLookup as Y, ReadinessTimeoutError as Yn, motionCapability as Yt, cameraGridLayoutCapability as Z, asJsonObject as Zn, objectInputDeclaresAddonId as Zt, DERIVED_CAMERA_SILENCED_CAP_NAMES as _, storageMigrationCapability as _n, deviceStateCapability as _t, BatteryStatusSchema as a, replacedFieldKeys as an, isDeviceConfigCap as ar, coreBlockSourceKind as at, FIRST_LEVEL_MACRO_CLASSES as b, streamCatalogCapability as bn, enumerateItemArrayFields as bt, COMPOSED_ITEM_FIXED_FIELDS as c, resolveMethodAuth as cn, parseJsonObject as cr, dataStoreProviderCapability as ct, CORE_BLOCK_ADDON_PREFIX as d, scopesAllowDeviceCap as dn, resolveCapMount as dr, decodeVectorBase64 as dt, planComposition as en, createEvent as er, compositionFieldKey as et, CoreBlockSchema as f, scoreRuntimes as fn, scopeKey as fr, defineExtensionSlotProvider as ft, DAY_NAMES as g, storageCapability as gn, deviceManagerCapability as gt, DATABASE_SNAPSHOT_TIMEOUT_MS as h, snapshotCapability as hn, EventCategory as hr, deviceExtensionCapability as ht, BaseDevice as i, reducePoints as in, hydrateSchema as ir, coreBlockIdFromAddonId as it, RUNTIME_DEFAULTS as j, composedDeviceRef as jn, isCollectionArrayMethod as jt, RECORDING_SOURCE_CAMSTACK_ADDON as k, buildFfmpegArgs as kn, gbToBytes as kt, COMPOSER_RUNNER_ID as l, runtimeStatePolicyFor as ln, parseJsonUnknown as lr, databaseSnapshotCapability as lt, DATABASE_SNAPSHOT_SUFFIX as m, siteZoneKey as mn, toNodeId as mr, describeComposableCaps as mt, AlertSchema as n, procedureAuthKey as nn, emitReadiness as nr, coreBlockAddonId as nt, CAMERA_SWITCH_ORDER as o, resolveBucketMs as on, isEvent as or, coreBlocksCapability as ot, DATABASE_SNAPSHOT_PARTIAL_SUFFIX as p, settingsStoreCapability as pn, sleep as pr, deriveBatteryPresence as pt, bareAddonId as q, DEVICE_STATUS_METHOD as qn, metricsProviderCapability as qt, ApiKeyRecordSchema as r, ptzAutotrackCapability as rn, expandCapMethods as rr, coreBlockComposition as rt, CAP_NAMES_WITH_STATUS as s, resolveLocationMode as sn, nodePin as sr, createDeviceExtensionProvider as st, ALL_CAPABILITY_DEFINITIONS as t, platformProbeCapability as tn, emitDownForOwnedCaps as tr, compositionSourceRefs as tt, CORE_BLOCKS_ADDON_ID as u, scopesAllowAddon as un, readinessKey as ur, declarationOwnerNodeId as ut, DeclaredDevices as v, storageOccupancyCapability as vn, deviceStatusCapability as vt, LegacyStorageLocationDefaultSchema as w, vectorDimFromBase64 as wn, expandContainer as wt, FieldClaimModeSchema as x, streamQualityLabel as xn, enumerateSchemaFields as xt, DeviceStatusSchema as y, storageProviderCapability as yn, enumerateInferenceDevices as yt, StorageMigrationJobSchema as z, toExpressionValue as zn, localNetworkCapability as zt };
@@ -3521,7 +3521,7 @@ function errMsg(err) {
3521
3521
  return String(err);
3522
3522
  }
3523
3523
  //#endregion
3524
- //#region ../types/dist/composition-D7ULvLdD.mjs
3524
+ //#region ../types/dist/composition-Bzr7GwgP.mjs
3525
3525
  var AUDIO_ENCODER_BY_CODEC = {
3526
3526
  opus: "libopus",
3527
3527
  aac: "aac",
@@ -4001,6 +4001,8 @@ var SOURCE_CAP_ACTIVE_FIELD = {
4001
4001
  vibration: "detected",
4002
4002
  tamper: "tampered"
4003
4003
  };
4004
+ /** Cap names whose presence in a device's bindings qualify it as a source. */
4005
+ var SOURCE_CAPS = Object.keys(SOURCE_CAP_ACTIVE_FIELD);
4004
4006
  /**
4005
4007
  * How recent a source's own transition timestamp must be for a FIRST
4006
4008
  * sighting that is already active to count as a genuine rise rather than a
@@ -4093,6 +4095,11 @@ function evaluateRose(level, changedAt, debounceMs, call, field, env) {
4093
4095
  const timestamp = typeof changedAt === "number" && Number.isFinite(changedAt) ? changedAt : null;
4094
4096
  const debounce = debounceMs === void 0 ? DEFAULT_ROSE_DEBOUNCE_MS : asFiniteNumber(debounceMs, "rose", 2);
4095
4097
  if (debounce < 0) throw new ExpressionEvalError("rose: debounce must be a non-negative finite number");
4098
+ if (call.disarmNext === true || field.disarmRoseNext) {
4099
+ call.disarmNext = false;
4100
+ if (call.priorLevel === void 0) call.priorLevel = active;
4101
+ return env.currentOutput;
4102
+ }
4096
4103
  const verdict = evaluateSensorLevelEdge({
4097
4104
  level: active,
4098
4105
  changedAt: timestamp,
@@ -4107,6 +4114,17 @@ function evaluateRose(level, changedAt, debounceMs, call, field, env) {
4107
4114
  field.acceptedEdgeAt = verdict.timestamp;
4108
4115
  return verdict.timestamp;
4109
4116
  }
4117
+ /** Next evaluation of every `rose` call baselines without rising. */
4118
+ function disarmRoseMemory(memory) {
4119
+ memory.disarmRoseNext = true;
4120
+ for (const [path, call] of memory.calls) {
4121
+ if (call.kind !== "rose") continue;
4122
+ memory.calls.set(path, {
4123
+ ...call,
4124
+ disarmNext: true
4125
+ });
4126
+ }
4127
+ }
4110
4128
  /**
4111
4129
  * `count(x)`: how many times `x` strictly advanced (D670). It starts on the
4112
4130
  * first ANSWERED read of `x`:
@@ -4828,13 +4846,15 @@ function evaluateAst(node, scope, opts) {
4828
4846
  function createStatefulExpressionMemory() {
4829
4847
  return {
4830
4848
  calls: /* @__PURE__ */ new Map(),
4831
- acceptedEdgeAt: null
4849
+ acceptedEdgeAt: null,
4850
+ disarmRoseNext: false
4832
4851
  };
4833
4852
  }
4834
4853
  function cloneStatefulExpressionMemory(memory) {
4835
4854
  return {
4836
4855
  calls: new Map([...memory.calls].map(([path, call]) => [path, { ...call }])),
4837
- acceptedEdgeAt: memory.acceptedEdgeAt
4856
+ acceptedEdgeAt: memory.acceptedEdgeAt,
4857
+ disarmRoseNext: memory.disarmRoseNext
4838
4858
  };
4839
4859
  }
4840
4860
  function evaluateStatefulExpressionCall(invocation, memory, env) {
@@ -9823,7 +9843,7 @@ var BrokerStatusEnum = zod.z.enum([
9823
9843
  "unreachable",
9824
9844
  "error"
9825
9845
  ]);
9826
- var BrokerInfoSchema$1 = zod.z.object({
9846
+ var BrokerInfoSchema = zod.z.object({
9827
9847
  /** Stable broker id. Persisted; survives addon restarts. */
9828
9848
  id: zod.z.string(),
9829
9849
  /** Addon id of the provider that OWNS this broker.
@@ -9966,8 +9986,8 @@ var brokerCapability = {
9966
9986
  kind: "poll"
9967
9987
  },
9968
9988
  methods: {
9969
- list: method(ListInputSchema, zod.z.array(BrokerInfoSchema$1)),
9970
- get: method(GetInputSchema, BrokerInfoSchema$1.nullable()),
9989
+ list: method(ListInputSchema, zod.z.array(BrokerInfoSchema)),
9990
+ get: method(GetInputSchema, BrokerInfoSchema.nullable()),
9971
9991
  /** Enumerate which addon provides which broker kind(s) for the
9972
9992
  * unified create picker. The auto-mount fans this array across
9973
9993
  * every registered `broker` provider (array-output method), so the
@@ -18468,7 +18488,7 @@ var BrokerStatusSchema$1 = zod.z.enum([
18468
18488
  "unreachable",
18469
18489
  "tls-error"
18470
18490
  ]);
18471
- var BrokerInfoSchema = zod.z.object({
18491
+ var BrokerInfoSchema$1 = zod.z.object({
18472
18492
  id: zod.z.string(),
18473
18493
  name: zod.z.string(),
18474
18494
  url: zod.z.string(),
@@ -18541,7 +18561,7 @@ var mqttBrokerCapability = {
18541
18561
  kind: "poll"
18542
18562
  },
18543
18563
  methods: {
18544
- listBrokers: method(zod.z.void(), zod.z.array(BrokerInfoSchema)),
18564
+ listBrokers: method(zod.z.void(), zod.z.array(BrokerInfoSchema$1)),
18545
18565
  getBrokerConfig: method(IdInputSchema, BrokerConnectionDetailsSchema, { auth: "admin" }),
18546
18566
  addBroker: method(AddBrokerInputSchema, AddBrokerResultSchema, {
18547
18567
  kind: "mutation",
@@ -23651,6 +23671,7 @@ var KeyEventSchema = zod.z.object({
23651
23671
  bestEventId: zod.z.string(),
23652
23672
  /** Track lifetime in ms (lastSeen - firstSeen). */
23653
23673
  windowMs: zod.z.number().optional(),
23674
+ audioLabels: zod.z.array(TrackAudioLabelSchema).readonly().optional(),
23654
23675
  ...TrackFlagFields,
23655
23676
  ...TrackRetrainFields
23656
23677
  });
@@ -37810,28 +37831,29 @@ setOverlay: method(zod.z.object({
37810
37831
  *
37811
37832
  * This cap owns the other half: a per-(camera, slot) BINDING that says
37812
37833
  * which value feeds the slot, how it is formatted, and under which
37813
- * conditions it is shown at all. One addon renders every binding on every
37814
- * camera, so a new source costs zero driver code.
37815
- *
37816
- * Three deliberate choices, each with a rejected alternative:
37817
- *
37818
- * 1. A source is `(capName, valuePath)` over the kernel's device
37819
- * runtime-state mirror — NOT a closed enum of source kinds. Every
37820
- * cap-keyed slice a device publishes is bindable the day the cap
37821
- * ships. The rejected alternative (one enum member per source, with
37822
- * a resolver branch each) is what makes "add the humidity too" a
37823
- * code change.
37824
- * 2. The display gate reuses `NcConditionsSchema` verbatim — the
37825
- * notification centre's condition vocabulary — rather than a parallel
37826
- * model. An operator who has learned one condition editor has learned
37827
- * both.
37828
- * 3. Because the renderer's facts are device STATE and not a detection
37829
- * record, only a SUBSET of that vocabulary can be answered here.
37830
- * `setSlotBinding` REJECTS the rest at write time (see
37831
- * `getConditionSupport`). It does not accept-then-fail-closed: a
37832
- * condition that can never be true renders a permanently blank
37833
- * overlay, and a blank overlay looks exactly like a broken camera.
37834
+ * conditions it is shown at all. Named TEMPLATES combine many device
37835
+ * fields into one overlay string (Scrypted OSD Manager parity).
37834
37836
  */
37837
+ /** One field reference inside a named multi-device template. */
37838
+ var OsdTemplateFieldSchema = zod.z.object({
37839
+ deviceId: zod.z.number().int(),
37840
+ capName: zod.z.string().min(1).max(64),
37841
+ valuePath: zod.z.string().min(1).max(64),
37842
+ /** Convert TO this unit at render (`tryConvertUnit`). Absent = source unit. */
37843
+ displayUnit: zod.z.string().max(16).optional(),
37844
+ maxDecimals: zod.z.number().int().min(0).max(4).default(1)
37845
+ });
37846
+ /**
37847
+ * A named template: several device fields → one parser string with
37848
+ * `{deviceId.capName.valuePath}` tokens (Scrypted `{deviceId.sensorId}`).
37849
+ */
37850
+ var OsdNamedTemplateSchema = zod.z.object({
37851
+ id: zod.z.string().min(1).max(64),
37852
+ 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}°`. */
37855
+ parser: zod.z.string().max(256).default("")
37856
+ });
37835
37857
  /** Where a slot's value comes from. */
37836
37858
  var OsdSourceSchema = zod.z.discriminatedUnion("kind", [
37837
37859
  zod.z.object({
@@ -37850,11 +37872,17 @@ var OsdSourceSchema = zod.z.discriminatedUnion("kind", [
37850
37872
  deviceId: zod.z.number().int().optional(),
37851
37873
  capName: zod.z.string().min(1).max(64),
37852
37874
  /** Dot path inside the slice, e.g. `detected`, `value`, `mode`. */
37853
- valuePath: zod.z.string().min(1).max(64)
37875
+ valuePath: zod.z.string().min(1).max(64),
37876
+ /** Convert TO this unit at render. Absent = no conversion. */
37877
+ displayUnit: zod.z.string().max(16).optional()
37854
37878
  }),
37855
37879
  zod.z.object({
37856
37880
  kind: zod.z.literal("latest-recognition"),
37857
37881
  recognition: zod.z.enum(["person", "plate"])
37882
+ }),
37883
+ zod.z.object({
37884
+ kind: zod.z.literal("template"),
37885
+ templateId: zod.z.string().min(1).max(64)
37858
37886
  })
37859
37887
  ]);
37860
37888
  var OsdSlotBindingSchema = zod.z.object({
@@ -37870,7 +37898,10 @@ var OsdSlotBindingSchema = zod.z.object({
37870
37898
  * documented workaround for firmwares that reject `.` in overlay text.
37871
37899
  */
37872
37900
  maxDecimals: zod.z.number().int().min(0).max(4).default(1),
37873
- /** Appended via `${unit}`. The state mirror does not carry units. */
37901
+ /**
37902
+ * Appended via `${unit}` when no unit conversion produces a label.
37903
+ * Prefer `source.displayUnit` for converted device-state values.
37904
+ */
37874
37905
  unitLabel: zod.z.string().max(8).optional(),
37875
37906
  /** Raw value → display text, e.g. `{"true":"MOTION","false":""}`. */
37876
37907
  valueMap: zod.z.record(zod.z.string(), zod.z.string()).optional(),
@@ -38024,6 +38055,21 @@ var osdManagerCapability = {
38024
38055
  renderDevice: method(zod.z.object({ deviceId: zod.z.number().int() }), zod.z.object({ results: zod.z.array(OsdRenderResultSchema) }), {
38025
38056
  kind: "mutation",
38026
38057
  auth: "admin"
38058
+ }),
38059
+ /** Every named multi-device template. */
38060
+ listTemplates: method(zod.z.object({}), zod.z.object({ templates: zod.z.array(OsdNamedTemplateSchema) }), { auth: "admin" }),
38061
+ /**
38062
+ * Create or replace a named template by `id`. Returns the stored record
38063
+ * after Zod normalisation.
38064
+ */
38065
+ upsertTemplate: method(zod.z.object({ template: OsdNamedTemplateSchema }), zod.z.object({ template: OsdNamedTemplateSchema }), {
38066
+ kind: "mutation",
38067
+ auth: "admin"
38068
+ }),
38069
+ /** Drop a named template. Bindings that still reference it render unreadable. */
38070
+ deleteTemplate: method(zod.z.object({ templateId: zod.z.string().min(1).max(64) }), zod.z.object({ success: zod.z.literal(true) }), {
38071
+ kind: "mutation",
38072
+ auth: "admin"
38027
38073
  })
38028
38074
  }
38029
38075
  };
@@ -44653,6 +44699,7 @@ function evaluateCompositionField(input) {
44653
44699
  };
44654
44700
  }
44655
44701
  }
44702
+ SOURCE_CAPS.filter((cap) => cap !== "switch" && cap !== "motion");
44656
44703
  /**
44657
44704
  * Runtime defaults -- used by ConfigManager.get() for backward compatibility
44658
44705
  * until Plan B wires all runtime settings to the system_settings SQL table.
@@ -51389,6 +51436,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
51389
51436
  addonId: null,
51390
51437
  access: "create"
51391
51438
  },
51439
+ "osdManager.deleteTemplate": {
51440
+ capName: "osd-manager",
51441
+ capScope: "system",
51442
+ addonId: null,
51443
+ access: "delete"
51444
+ },
51392
51445
  "osdManager.getConditionSupport": {
51393
51446
  capName: "osd-manager",
51394
51447
  capScope: "system",
@@ -51407,6 +51460,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
51407
51460
  addonId: null,
51408
51461
  access: "view"
51409
51462
  },
51463
+ "osdManager.listTemplates": {
51464
+ capName: "osd-manager",
51465
+ capScope: "system",
51466
+ addonId: null,
51467
+ access: "view"
51468
+ },
51410
51469
  "osdManager.previewSlot": {
51411
51470
  capName: "osd-manager",
51412
51471
  capScope: "system",
@@ -51425,6 +51484,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
51425
51484
  addonId: null,
51426
51485
  access: "create"
51427
51486
  },
51487
+ "osdManager.upsertTemplate": {
51488
+ capName: "osd-manager",
51489
+ capScope: "system",
51490
+ addonId: null,
51491
+ access: "create"
51492
+ },
51428
51493
  "petFeeder.callPet": {
51429
51494
  capName: "pet-feeder",
51430
51495
  capScope: "device",
@@ -59385,6 +59450,12 @@ Object.defineProperty(exports, "deviceStatusCapability", {
59385
59450
  return deviceStatusCapability;
59386
59451
  }
59387
59452
  });
59453
+ Object.defineProperty(exports, "disarmRoseMemory", {
59454
+ enumerable: true,
59455
+ get: function() {
59456
+ return disarmRoseMemory;
59457
+ }
59458
+ });
59388
59459
  Object.defineProperty(exports, "emitDownForOwnedCaps", {
59389
59460
  enumerable: true,
59390
59461
  get: function() {
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-PCvk1lCg.js");
3
+ const require_dist = require("./dist-BkhjxcSp.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-CAi5El4k.js");
32
+ const require_child_cap_dispatch = require("./child-cap-dispatch-PI1sSVze.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 createEvent, At as isArrayOutputSchema, C as LOG_LEVEL_RANK, E as METHOD_ACCESS_MAP, Ft as kebabToCamel, Gn as DEVICE_SETTINGS_CONTRIBUTION_METHODS, H as addonSettingsCapability, Hn as errMsg$1, Ht as logLevelAtMost, Jn as ReadinessTimeoutError, Kn as DEVICE_STATUS_METHOD, Nt as isObjectInput, Pt as isVoidInput, Qn as asString$1, Qt as objectInputDeclaresRequiredDeviceId, Rt as lifecycleJobSchema, Tt as extractNestedAddonId, Ut as looseSchema, Wn as DATAPLANE_SECRET_HEADER$1, Xn as asJsonObject$1, Zn as asNumber, Zt as objectInputDeclaresAddonId, cn as resolveMethodAuth, cr as parseJsonUnknown, dn as scopesAllowDeviceCap, dr as scopeKey, er as emitDownForOwnedCaps, j as RUNTIME_DEFAULTS, jt as isCollectionArrayMethod, lr as readinessKey, mr as EventCategory$1, nn as procedureAuthKey, nr as expandCapMethods, qn as ReadinessRegistry, sr as parseJsonObject, t as ALL_CAPABILITY_DEFINITIONS, un as scopesAllowAddon, ur as resolveCapMount } from "./dist-YXCrqVwr.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";
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-BE8jB_JS.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";
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-PCvk1lCg.js");
1
+ const require_dist = require("./dist-BkhjxcSp.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 { Xn as asJsonObject } from "./dist-YXCrqVwr.mjs";
1
+ import { Zn as asJsonObject } from "./dist-BQS_M1qw.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.338",
3
+ "version": "1.2.340",
4
4
  "description": "Core addon for CamStack — builtins, pipeline, process management, auth, logging, events",
5
5
  "keywords": [
6
6
  "camstack",