@camstack/system 1.2.300 → 1.2.301

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 (55) hide show
  1. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.js +1 -1
  2. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.mjs +1 -1
  3. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.js +1 -1
  4. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.mjs +1 -1
  5. package/dist/builtins/alerts/alerts.addon.js +1 -1
  6. package/dist/builtins/alerts/alerts.addon.mjs +1 -1
  7. package/dist/builtins/autotrack/index.js +1 -1
  8. package/dist/builtins/autotrack/index.mjs +1 -1
  9. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.js +1 -1
  10. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.mjs +1 -1
  11. package/dist/builtins/camera-grid/index.js +1 -1
  12. package/dist/builtins/camera-grid/index.mjs +1 -1
  13. package/dist/builtins/console-logging/index.js +1 -1
  14. package/dist/builtins/console-logging/index.mjs +1 -1
  15. package/dist/builtins/core-blocks/core-blocks.addon.js +1 -1
  16. package/dist/builtins/core-blocks/core-blocks.addon.mjs +1 -1
  17. package/dist/builtins/device-manager/device-manager.addon.js +2 -2
  18. package/dist/builtins/device-manager/device-manager.addon.mjs +2 -2
  19. package/dist/builtins/doorbell/virtual-doorbell.addon.js +1 -1
  20. package/dist/builtins/doorbell/virtual-doorbell.addon.mjs +1 -1
  21. package/dist/builtins/hub-forwarder/index.js +1 -1
  22. package/dist/builtins/hub-forwarder/index.mjs +1 -1
  23. package/dist/builtins/liveness-monitor/liveness-monitor.addon.js +1 -1
  24. package/dist/builtins/liveness-monitor/liveness-monitor.addon.mjs +1 -1
  25. package/dist/builtins/local-auth/local-auth.addon.js +1 -1
  26. package/dist/builtins/local-auth/local-auth.addon.mjs +1 -1
  27. package/dist/builtins/local-network/local-network.addon.js +1 -1
  28. package/dist/builtins/local-network/local-network.addon.mjs +1 -1
  29. package/dist/builtins/loki-logging/index.js +1 -1
  30. package/dist/builtins/loki-logging/index.mjs +1 -1
  31. package/dist/builtins/native-metrics/native-metrics.addon.js +1 -1
  32. package/dist/builtins/native-metrics/native-metrics.addon.mjs +1 -1
  33. package/dist/builtins/platform-probe/index.js +1 -1
  34. package/dist/builtins/platform-probe/index.mjs +1 -1
  35. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.js +1 -1
  36. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.mjs +1 -1
  37. package/dist/builtins/snapshot/index.js +1 -1
  38. package/dist/builtins/snapshot/index.mjs +1 -1
  39. package/dist/builtins/sqlite-storage/filesystem-storage.addon.js +1 -1
  40. package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs +1 -1
  41. package/dist/builtins/sqlite-storage/sqlite-settings.addon.js +0 -0
  42. package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +0 -0
  43. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js +1 -1
  44. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs +1 -1
  45. package/dist/builtins/system-config/system-config.addon.js +1 -1
  46. package/dist/builtins/system-config/system-config.addon.mjs +1 -1
  47. package/dist/builtins/winston-logging/index.js +1 -1
  48. package/dist/builtins/winston-logging/index.mjs +1 -1
  49. package/dist/{dist-Bo6_IXKD.mjs → dist-C4qebjgF.mjs} +87 -9
  50. package/dist/{dist-Cqv528cH.js → dist-Dz1Hoc8h.js} +87 -9
  51. package/dist/index.js +1 -1
  52. package/dist/index.mjs +1 -1
  53. package/dist/{retired-settings-keys-BaOR7Z2z.mjs → retired-settings-keys-CgCVRYZx.mjs} +1 -1
  54. package/dist/{retired-settings-keys-Odqg6rBf.js → retired-settings-keys-DjzlOaqH.js} +1 -1
  55. package/package.json +1 -1
@@ -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-Cqv528cH.js");
6
+ const require_dist = require("../../dist-Dz1Hoc8h.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 { Bn as EventCategory, L as addonPagesCapability, dn as errMsg, pn as BaseAddon } from "../../dist-Bo6_IXKD.mjs";
1
+ import { Bn as EventCategory, L as addonPagesCapability, dn as errMsg, pn as BaseAddon } from "../../dist-C4qebjgF.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-Cqv528cH.js");
6
+ const require_dist = require("../../dist-Dz1Hoc8h.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 { Bn as EventCategory, dn as errMsg, pn as BaseAddon, z as addonWidgetsCapability } from "../../dist-Bo6_IXKD.mjs";
1
+ import { Bn as EventCategory, dn as errMsg, pn as BaseAddon, z as addonWidgetsCapability } from "../../dist-C4qebjgF.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-Cqv528cH.js");
6
+ const require_dist = require("../../dist-Dz1Hoc8h.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 { B as alertsCapability, Bn as EventCategory, En as createEvent, dn as errMsg, n as AlertSchema, pn as BaseAddon } from "../../dist-Bo6_IXKD.mjs";
1
+ import { B as alertsCapability, Bn as EventCategory, En as createEvent, dn as errMsg, n as AlertSchema, pn as BaseAddon } from "../../dist-C4qebjgF.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-Cqv528cH.js");
6
+ const require_dist = require("../../dist-Dz1Hoc8h.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 { Bn as EventCategory, Mn as isEvent, U as bareAddonId, Ut as ptzAutotrackCapability, dn as errMsg, g as FIRST_LEVEL_MACRO_CLASSES, pn as BaseAddon } from "../../dist-Bo6_IXKD.mjs";
1
+ import { Bn as EventCategory, Mn as isEvent, U as bareAddonId, Ut as ptzAutotrackCapability, dn as errMsg, g as FIRST_LEVEL_MACRO_CLASSES, pn as BaseAddon } from "../../dist-C4qebjgF.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-Cqv528cH.js");
6
+ const require_dist = require("../../dist-Dz1Hoc8h.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 { Bn as EventCategory, H as backupCapability, Nt as mayWriteToLocation, pn as BaseAddon, rn as storageOccupancyCapability } from "../../dist-Bo6_IXKD.mjs";
1
+ import { Bn as EventCategory, H as backupCapability, Nt as mayWriteToLocation, pn as BaseAddon, rn as storageOccupancyCapability } from "../../dist-C4qebjgF.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-Cqv528cH.js");
6
+ const require_dist = require("../../dist-Dz1Hoc8h.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 { An as hydrateSchema, Bn as EventCategory, En as createEvent, It as motionCapability, K as cameraGridLayoutCapability, Q as declarationOwnerNodeId, S as MOTION_CLOSE_AFTER_MS, _n as DeviceFeature, an as streamCatalogCapability, dn as errMsg, en as snapshotCapability, fn as buildFfmpegArgs, i as BaseDevice, m as DeclaredDevices, p as DERIVED_CAMERA_SILENCED_CAP_NAMES, pn as BaseAddon, yn as DeviceType } from "../../dist-Bo6_IXKD.mjs";
1
+ import { An as hydrateSchema, Bn as EventCategory, En as createEvent, It as motionCapability, K as cameraGridLayoutCapability, Q as declarationOwnerNodeId, S as MOTION_CLOSE_AFTER_MS, _n as DeviceFeature, an as streamCatalogCapability, dn as errMsg, en as snapshotCapability, fn as buildFfmpegArgs, i as BaseDevice, m as DeclaredDevices, p as DERIVED_CAMERA_SILENCED_CAP_NAMES, pn as BaseAddon, yn as DeviceType } from "../../dist-C4qebjgF.mjs";
2
2
  import { z } from "zod";
3
3
  import { FfmpegProcess } from "@camstack/types/node";
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-Cqv528cH.js");
6
+ const require_dist = require("../../dist-Dz1Hoc8h.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 { kt as logDestinationCapability, pn as BaseAddon } from "../../dist-Bo6_IXKD.mjs";
1
+ import { kt as logDestinationCapability, pn as BaseAddon } from "../../dist-C4qebjgF.mjs";
2
2
  import { t as formatLogLine } from "../../formatter-B7qW8bPJ.mjs";
3
3
  //#region src/builtins/console-logging/console-destination.ts
4
4
  var LEVEL_RANK = {
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_chunk = require("../../chunk-Cek0wNdY.js");
3
- const require_dist = require("../../dist-Cqv528cH.js");
3
+ const require_dist = require("../../dist-Dz1Hoc8h.js");
4
4
  let node_crypto = require("node:crypto");
5
5
  let node_fs_promises = require("node:fs/promises");
6
6
  node_fs_promises = require_chunk.__toESM(node_fs_promises);
@@ -1,4 +1,4 @@
1
- import { J as coreBlockAddonId, X as coreBlocksCapability, Y as coreBlockIdFromAddonId, c as CORE_BLOCKS_ADDON_ID, dn as errMsg, l as CORE_BLOCK_ADDON_PREFIX, m as DeclaredDevices, pn as BaseAddon, u as CoreBlockSchema } from "../../dist-Bo6_IXKD.mjs";
1
+ import { J as coreBlockAddonId, X as coreBlocksCapability, Y as coreBlockIdFromAddonId, c as CORE_BLOCKS_ADDON_ID, dn as errMsg, l as CORE_BLOCK_ADDON_PREFIX, m as DeclaredDevices, pn as BaseAddon, u as CoreBlockSchema } from "../../dist-C4qebjgF.mjs";
2
2
  import { randomUUID } from "node:crypto";
3
3
  import * as fs from "node:fs/promises";
4
4
  import * as path$1 from "node:path";
@@ -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-Cqv528cH.js");
7
- const require_retired_settings_keys = require("../../retired-settings-keys-Odqg6rBf.js");
6
+ const require_dist = require("../../dist-Dz1Hoc8h.js");
7
+ const require_retired_settings_keys = require("../../retired-settings-keys-DjzlOaqH.js");
8
8
  let node_crypto = require("node:crypto");
9
9
  let _camstack_types_node = require("@camstack/types/node");
10
10
  //#region src/builtins/device-manager/adoption-job-engine.ts
@@ -1,5 +1,5 @@
1
- import { $t as siteZoneKey, A as STREAM_PROFILE_META, Bn as EventCategory, Bt as parseStreamParamsFormPatch, G as buildStreamParamsConfigSchema, Jt as runtimeStatePolicyFor, Lt as normalizeUnit, Ot as locationIconKey, Sn as WELL_KNOWN_TAB_MAP, _n as DeviceFeature, d as DAY_NAMES, dn as errMsg, h as DeviceStatusSchema, jn as isDeviceConfigCap, mt as formatMinutes, nt as deviceStateCapability, o as CAMERA_SWITCH_ORDER, ot as enumerateItemArrayFields, pn as BaseAddon, rt as deviceStatusCapability, s as CAP_NAMES_WITH_STATUS, st as enumerateSchemaFields, t as ALL_CAPABILITY_DEFINITIONS, tt as deviceManagerCapability, ut as expandContainer, vn as DeviceRole, wt as legacyAutoLinkIds, x as MINUTES_PER_DAY, y as LocationIconIdSchema, yn as DeviceType, zn as sleep$1 } from "../../dist-Bo6_IXKD.mjs";
2
- import { n as purgeRetiredSettingsRows } from "../../retired-settings-keys-BaOR7Z2z.mjs";
1
+ import { $t as siteZoneKey, A as STREAM_PROFILE_META, Bn as EventCategory, Bt as parseStreamParamsFormPatch, G as buildStreamParamsConfigSchema, Jt as runtimeStatePolicyFor, Lt as normalizeUnit, Ot as locationIconKey, Sn as WELL_KNOWN_TAB_MAP, _n as DeviceFeature, d as DAY_NAMES, dn as errMsg, h as DeviceStatusSchema, jn as isDeviceConfigCap, mt as formatMinutes, nt as deviceStateCapability, o as CAMERA_SWITCH_ORDER, ot as enumerateItemArrayFields, pn as BaseAddon, rt as deviceStatusCapability, s as CAP_NAMES_WITH_STATUS, st as enumerateSchemaFields, t as ALL_CAPABILITY_DEFINITIONS, tt as deviceManagerCapability, ut as expandContainer, vn as DeviceRole, wt as legacyAutoLinkIds, x as MINUTES_PER_DAY, y as LocationIconIdSchema, yn as DeviceType, zn as sleep$1 } from "../../dist-C4qebjgF.mjs";
2
+ import { n as purgeRetiredSettingsRows } from "../../retired-settings-keys-CgCVRYZx.mjs";
3
3
  import { randomUUID } from "node:crypto";
4
4
  import { canonicalDeviceFingerprint } from "@camstack/types/node";
5
5
  //#region src/builtins/device-manager/adoption-job-engine.ts
@@ -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-Cqv528cH.js");
6
+ const require_dist = require("../../dist-Dz1Hoc8h.js");
7
7
  //#region src/builtins/doorbell/trigger-engine.ts
8
8
  /**
9
9
  * Pure trigger logic for the virtual-doorbell builtin — edge detection over
@@ -1,4 +1,4 @@
1
- import { Bn as EventCategory, D as SOURCE_CAPS, En as createEvent, O as SOURCE_DEVICE_TYPES, U as bareAddonId, bt as isSameAddonId, ct as evaluateSensorEdge, dn as errMsg, it as doorbellCapability, pn as BaseAddon, xt as isSourceCap, yn as DeviceType } from "../../dist-Bo6_IXKD.mjs";
1
+ import { Bn as EventCategory, D as SOURCE_CAPS, En as createEvent, O as SOURCE_DEVICE_TYPES, U as bareAddonId, bt as isSameAddonId, ct as evaluateSensorEdge, dn as errMsg, it as doorbellCapability, pn as BaseAddon, xt as isSourceCap, yn as DeviceType } from "../../dist-C4qebjgF.mjs";
2
2
  //#region src/builtins/doorbell/trigger-engine.ts
3
3
  /**
4
4
  * Pure trigger logic for the virtual-doorbell builtin — edge detection over
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-Cqv528cH.js");
6
+ const require_dist = require("../../dist-Dz1Hoc8h.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 { kt as logDestinationCapability, pn as BaseAddon } from "../../dist-Bo6_IXKD.mjs";
1
+ import { kt as logDestinationCapability, pn as BaseAddon } from "../../dist-C4qebjgF.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-Cqv528cH.js");
3
+ const require_dist = require("../../dist-Dz1Hoc8h.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 { Bn as EventCategory, C as RECORDING_SOURCE_CAMSTACK_ADDON, E as RecordingStatusSchema, En as createEvent, dn as errMsg, pn as BaseAddon } from "../../dist-Bo6_IXKD.mjs";
1
+ import { Bn as EventCategory, C as RECORDING_SOURCE_CAMSTACK_ADDON, E as RecordingStatusSchema, En as createEvent, dn as errMsg, pn as BaseAddon } from "../../dist-C4qebjgF.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-Cqv528cH.js");
6
+ const require_dist = require("../../dist-Dz1Hoc8h.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 { I as UserRecordSchema, V as authProviderCapability, j as ScopedTokenSchema, pn as BaseAddon, r as ApiKeyRecordSchema, sn as userManagementCapability } from "../../dist-Bo6_IXKD.mjs";
2
+ import { I as UserRecordSchema, V as authProviderCapability, j as ScopedTokenSchema, pn as BaseAddon, r as ApiKeyRecordSchema, sn as userManagementCapability } from "../../dist-C4qebjgF.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-Cqv528cH.js");
3
+ const require_dist = require("../../dist-Dz1Hoc8h.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 { Bn as EventCategory, Dt as localNetworkCapability, pn as BaseAddon } from "../../dist-Bo6_IXKD.mjs";
1
+ import { Bn as EventCategory, Dt as localNetworkCapability, pn as BaseAddon } from "../../dist-C4qebjgF.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-Cqv528cH.js");
6
+ const require_dist = require("../../dist-Dz1Hoc8h.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 { kt as logDestinationCapability, pn as BaseAddon } from "../../dist-Bo6_IXKD.mjs";
1
+ import { kt as logDestinationCapability, pn as BaseAddon } from "../../dist-C4qebjgF.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-Cqv528cH.js");
6
+ const require_dist = require("../../dist-Dz1Hoc8h.js");
7
7
  let node_fs_promises = require("node:fs/promises");
8
8
  let node_fs = require("node:fs");
9
9
  node_fs = require_chunk.__toESM(node_fs);
@@ -1,4 +1,4 @@
1
- import { Bn as EventCategory, En as createEvent, Gt as resolveBucketMs, Pt as metricsProviderCapability, Wt as reducePoints, dn as errMsg, pn as BaseAddon, pt as foldSnapshotByFunction } from "../../dist-Bo6_IXKD.mjs";
1
+ import { Bn as EventCategory, En as createEvent, Gt as resolveBucketMs, Pt as metricsProviderCapability, Wt as reducePoints, dn as errMsg, pn as BaseAddon, pt as foldSnapshotByFunction } from "../../dist-C4qebjgF.mjs";
2
2
  import { access, readFile, readdir } from "node:fs/promises";
3
3
  import * as fs from "node:fs";
4
4
  import { constants, readFileSync } 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-Cqv528cH.js");
6
+ const require_dist = require("../../dist-Dz1Hoc8h.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 { Bn as EventCategory, On as emitReadiness, Vt as platformProbeCapability, Zt as scoreRuntimes, at as enumerateInferenceDevices, dn as errMsg, pn as BaseAddon } from "../../dist-Bo6_IXKD.mjs";
2
+ import { Bn as EventCategory, On as emitReadiness, Vt as platformProbeCapability, Zt as scoreRuntimes, at as enumerateInferenceDevices, dn as errMsg, pn as BaseAddon } from "../../dist-C4qebjgF.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-Cqv528cH.js");
6
+ const require_dist = require("../../dist-Dz1Hoc8h.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 { Bn as EventCategory, pn as BaseAddon } from "../../dist-Bo6_IXKD.mjs";
1
+ import { Bn as EventCategory, pn as BaseAddon } from "../../dist-C4qebjgF.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-Cqv528cH.js");
6
+ const require_dist = require("../../dist-Dz1Hoc8h.js");
7
7
  const require_snapshot_courtesy = require("../../snapshot-courtesy-Cqs7GkOV.js");
8
8
  let zod = require("zod");
9
9
  let node_crypto = require("node:crypto");
@@ -1,4 +1,4 @@
1
- import { Bn as EventCategory, Nn as nodePin, U as bareAddonId, W as batteryCapability, _n as DeviceFeature, a as BatteryStatusSchema, dn as errMsg, en as snapshotCapability, et as deriveBatteryPresence, on as streamQualityLabel, pn as BaseAddon, yn as DeviceType } from "../../dist-Bo6_IXKD.mjs";
1
+ import { Bn as EventCategory, Nn as nodePin, U as bareAddonId, W as batteryCapability, _n as DeviceFeature, a as BatteryStatusSchema, dn as errMsg, en as snapshotCapability, et as deriveBatteryPresence, on as streamQualityLabel, pn as BaseAddon, yn as DeviceType } from "../../dist-C4qebjgF.mjs";
2
2
  import { i as renderCourtesyOverlayJpeg, n as courtesyCacheKey, r as renderCourtesyJpeg } from "../../snapshot-courtesy-CZPvteq2.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-Cqv528cH.js");
6
+ const require_dist = require("../../dist-Dz1Hoc8h.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 { ft as filesystemBrowseCapability, in as storageProviderCapability, pn as BaseAddon } from "../../dist-Bo6_IXKD.mjs";
1
+ import { ft as filesystemBrowseCapability, in as storageProviderCapability, pn as BaseAddon } from "../../dist-C4qebjgF.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-Cqv528cH.js");
6
+ const require_dist = require("../../dist-Dz1Hoc8h.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 { Bn as EventCategory, F as StorageMigrationJobSchema, Ft as modeMayWrite, Kt as resolveLocationMode, M as StorageCleanupJobSchema, Mt as mayReadLocation, N as StorageLocationModeSchema, Nt as mayWriteToLocation, P as StorageLocationTypeSchema, Pn as parseJsonObject, Qt as settingsStoreCapability, Tt as legacyModeOf, ht as gbToBytes, lt as evictionPolicyOfLocation, nn as storageMigrationCapability, pn as BaseAddon, q as collectSecretConfigKeys, tn as storageCapability, un as withLocationMode, v as LegacyStorageLocationDefaultSchema, vt as isLocationEnabled, w as REDACTED_SECRET } from "../../dist-Bo6_IXKD.mjs";
1
+ import { Bn as EventCategory, F as StorageMigrationJobSchema, Ft as modeMayWrite, Kt as resolveLocationMode, M as StorageCleanupJobSchema, Mt as mayReadLocation, N as StorageLocationModeSchema, Nt as mayWriteToLocation, P as StorageLocationTypeSchema, Pn as parseJsonObject, Qt as settingsStoreCapability, Tt as legacyModeOf, ht as gbToBytes, lt as evictionPolicyOfLocation, nn as storageMigrationCapability, pn as BaseAddon, q as collectSecretConfigKeys, tn as storageCapability, un as withLocationMode, v as LegacyStorageLocationDefaultSchema, vt as isLocationEnabled, w as REDACTED_SECRET } from "../../dist-C4qebjgF.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-Cqv528cH.js");
6
+ const require_dist = require("../../dist-Dz1Hoc8h.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 { An as hydrateSchema, dn as errMsg, pn as BaseAddon } from "../../dist-Bo6_IXKD.mjs";
1
+ import { An as hydrateSchema, dn as errMsg, pn as BaseAddon } from "../../dist-C4qebjgF.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-Cqv528cH.js");
6
+ const require_dist = require("../../dist-Dz1Hoc8h.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 { kt as logDestinationCapability, pn as BaseAddon } from "../../dist-Bo6_IXKD.mjs";
1
+ import { kt as logDestinationCapability, pn as BaseAddon } from "../../dist-C4qebjgF.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";
@@ -16866,6 +16866,9 @@ var NcSystemEventKindSchema = z.enum([
16866
16866
  "device-battery-normal",
16867
16867
  "device-consumable-low",
16868
16868
  "device-consumable-normal",
16869
+ "device-tank-low",
16870
+ "device-tank-full",
16871
+ "device-tank-normal",
16869
16872
  "stream-online",
16870
16873
  "stream-offline",
16871
16874
  "node-online",
@@ -16936,7 +16939,22 @@ var NcSystemEventConditionSchema = z.object({
16936
16939
  */
16937
16940
  excludeDeviceIds: z.array(z.number().int()).min(1).optional(),
16938
16941
  nodeIds: z.array(z.string().min(1)).min(1).optional(),
16939
- packageNames: z.array(z.string().min(1)).min(1).optional()
16942
+ packageNames: z.array(z.string().min(1)).min(1).optional(),
16943
+ /**
16944
+ * At or below this remaining-life %, a consumable is LOW for THIS rule
16945
+ * (D642). Absent = {@link NC_CONSUMABLE_LOW_PERCENT_DEFAULT}; at most
16946
+ * {@link NC_CONSUMABLE_LOW_PERCENT_MAX}, so every episode can recover. Scoped to the
16947
+ * consumable kinds (`systemEventFilterApplies`) and to the device-events
16948
+ * family; ignored on every other kind.
16949
+ *
16950
+ * It is a property of the RULE because the operator decided so: a rule at
16951
+ * 25 must be told about a filter at 20 %, a rule at 10 must not. The hub
16952
+ * keeps one episode per (threshold, device, item) — its own hysteresis, its
16953
+ * own reminder — and a rule hears only the episode judged at ITS threshold,
16954
+ * exactly as an occupancy rule hears only the edge of its own count. A
16955
+ * provider's own `replace` verdict is low at every threshold.
16956
+ */
16957
+ consumableLowPercent: z.number().int().min(1).max(95).optional()
16940
16958
  });
16941
16959
  /** Hard ceiling on a window (24h). A snooze that could not expire would be an
16942
16960
  * outage the operator asked for once and forgot. */
@@ -29968,12 +29986,20 @@ reset: method(z.object({
29968
29986
  },
29969
29987
  runtimeState: ConsumablesStatusSchema.extend({ lastFetchedAt: z.number() }),
29970
29988
  /**
29971
- * Runtime-state durability: **session** — the authority is the appliance; the provider re-reads the whole item array on connect.
29989
+ * Runtime-state durability: **restored** — nothing else holds the value
29990
+ * (D642). A consumable can often be read only in a device's wake window (the
29991
+ * Dreame mower's CMS counters answer only while it charges), so a restart
29992
+ * that wiped the slice left the panel empty and the alerts blind until the
29993
+ * next wake — 2026-09-26, mower 503 idle with `items: []`. A restored item is
29994
+ * the previous observation, not a claim about now; the provider overwrites it
29995
+ * the moment it reads the device again.
29972
29996
  *
29973
29997
  * See `RuntimeStateDurability`. Enforced by
29974
29998
  * `scripts/check-runtime-state-durability.ts`.
29975
29999
  */
29976
- durability: "session"
30000
+ durability: "restored",
30001
+ /** Clocks, not content: a re-read that changed no item costs no commit. */
30002
+ volatileStateFields: ["lastChangedAt", "lastFetchedAt"]
29977
30003
  };
29978
30004
  /**
29979
30005
  * Door / window / opening / garage / valve contact sensor. Boolean
@@ -52808,7 +52834,7 @@ Object.freeze({
52808
52834
  });
52809
52835
  /**
52810
52836
  * Per-cap runtime-state policy, projected from every `*.cap.ts` that declares
52811
- * `runtimeState`. 69 caps: 36 `restored`, 33 `session`.
52837
+ * `runtimeState`. 69 caps: 37 `restored`, 32 `session`.
52812
52838
  *
52813
52839
  * A cap absent from this map has no runtime-state slice at all. A cap PRESENT
52814
52840
  * with `durability: 'session'` has one and has decided not to keep it.
@@ -52867,8 +52893,8 @@ var RUNTIME_STATE_POLICY = {
52867
52893
  volatileFields: ["lastChangedAt"]
52868
52894
  },
52869
52895
  "consumables": {
52870
- durability: "session",
52871
- volatileFields: []
52896
+ durability: "restored",
52897
+ volatileFields: ["lastChangedAt", "lastFetchedAt"]
52872
52898
  },
52873
52899
  "contact": {
52874
52900
  durability: "restored",
@@ -53158,12 +53184,55 @@ var NC_AUDIO_DEFAULTS = {
53158
53184
  samplingSeconds: 10
53159
53185
  };
53160
53186
  new Set(["devices", "classes"]);
53161
- /** Every filter, for the callers that must cover all four (guards, tests). */
53187
+ /**
53188
+ * WHICH narrowing filter speaks about WHICH system-event kind — one predicate,
53189
+ * consumed by the rule ENGINE and by every rule EDITOR.
53190
+ *
53191
+ * ── The failure this file exists for ───────────────────────────────────────
53192
+ * `NcSystemEventConditionSchema` carries four optional narrowing lists
53193
+ * (`deviceIds`, `deviceTypes`, `nodeIds`, `packageNames`) beside a required
53194
+ * `kinds` gate. They are not four filters over one vocabulary: each belongs to
53195
+ * a FAMILY of kinds and is meaningless outside it. A node going away has no
53196
+ * device type; a completed export has no package; `stream-offline` deliberately
53197
+ * carries no device type at all (a stream belongs to a camera by construction).
53198
+ *
53199
+ * The engine applied all four to every kind, so a filter from one family failed
53200
+ * a kind from another family CLOSED. The operator's live rule "Eventi di
53201
+ * sistema" selected eleven kinds and set `deviceTypes: ['camera']` — the only
53202
+ * way to say "only my cameras" about the two liveness kinds — and NINE of the
53203
+ * eleven silently stopped being deliverable. Four days of history contained
53204
+ * `device-online` and `device-offline` and nothing else, across a window in
53205
+ * which agents were restarted and addons were updated.
53206
+ *
53207
+ * Both editors already computed this scoping, to decide which filter boxes to
53208
+ * render; the cap's own docblock already promised it ("Narrow a `device-*` kind
53209
+ * to these device TYPES"). Only the engine disagreed, and it disagreed in the
53210
+ * destructive direction. So the rule is stated ONCE, here, and the engine and
53211
+ * the editors are readers of it rather than three independent authors.
53212
+ *
53213
+ * ── The direction ─────────────────────────────────────────────────────────
53214
+ * Out of family ⇒ the filter is IGNORED, never fail-closed. An editor that
53215
+ * hides a box has already told the operator this filter does not speak about
53216
+ * these kinds, so honouring it as an exclusion contradicts the only
53217
+ * explanation the operator was ever given. Inside its family the filter still
53218
+ * narrows, and still fails CLOSED on a subject that cannot produce the identity
53219
+ * it tests (a device the mirror cannot name is not evidence of a camera).
53220
+ */
53221
+ /**
53222
+ * Every filter, for the callers that must cover all of them (guards, tests).
53223
+ *
53224
+ * `consumableLowPercent` (D642) is not a list but it is a filter in exactly
53225
+ * this sense: it belongs to a family of kinds (the consumable pair) and the
53226
+ * engine consults it only there. It differs in one way the readers must know —
53227
+ * its ABSENCE is not "no narrowing" but the default threshold, because a
53228
+ * consumable episode is always judged at SOME threshold.
53229
+ */
53162
53230
  var NC_SYSTEM_EVENT_FILTER_KEYS = [
53163
53231
  "deviceIds",
53164
53232
  "deviceTypes",
53165
53233
  "nodeIds",
53166
- "packageNames"
53234
+ "packageNames",
53235
+ "consumableLowPercent"
53167
53236
  ];
53168
53237
  new Map(Object.entries({
53169
53238
  "device-online": "device-events",
@@ -53174,6 +53243,9 @@ new Map(Object.entries({
53174
53243
  "device-battery-normal": "device-events",
53175
53244
  "device-consumable-low": "device-events",
53176
53245
  "device-consumable-normal": "device-events",
53246
+ "device-tank-low": "device-events",
53247
+ "device-tank-full": "device-events",
53248
+ "device-tank-normal": "device-events",
53177
53249
  "stream-online": "device-events",
53178
53250
  "stream-offline": "device-events",
53179
53251
  "detection-blind": "device-events",
@@ -53241,6 +53313,11 @@ var RULE_BODY_ONLY = ["body"];
53241
53313
  var RULE_TEXT = ["title", "body"];
53242
53314
  var BATTERY = ["device-battery-low", "device-battery-normal"];
53243
53315
  var CONSUMABLE = ["device-consumable-low", "device-consumable-normal"];
53316
+ var TANK = [
53317
+ "device-tank-low",
53318
+ "device-tank-full",
53319
+ "device-tank-normal"
53320
+ ];
53244
53321
  var UPDATES = [
53245
53322
  "addon-update-available",
53246
53323
  "server-update-available",
@@ -53266,12 +53343,13 @@ var DEVICE_EVENTS = [
53266
53343
  "device-enabled",
53267
53344
  ...BATTERY,
53268
53345
  ...CONSUMABLE,
53346
+ ...TANK,
53269
53347
  "stream-online",
53270
53348
  "stream-offline",
53271
53349
  "detection-blind",
53272
53350
  ...ALARM
53273
53351
  ];
53274
- [...DEVICE_EVENTS], [...RULE_TEXT], [...COMBINED_ALARM], [...RULE_TEXT], [...COMBINED_ALARM], [...RULE_TEXT], [...RULE_TEXT], [...COMBINED_ALARM], [...RULE_TEXT], [...PACKAGE_UPDATES], [...RULE_TEXT], [...RULE_TEXT], [...COMBINED_ALARM], [...RULE_TEXT], [...COMBINED_ALARM], [...RULE_TEXT], [...COMBINED_ALARM], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_BODY_ONLY], [...RULE_TEXT], [...RULE_TEXT], [...DEVICE_EVENTS], [...RULE_TEXT], [...DEVICE_EVENTS], [...RULE_TEXT], [...BATTERY, ...CONSUMABLE], [...RULE_TEXT], [...CONSUMABLE], [...RULE_TEXT], [...RULE_TEXT], [...UPDATES], [...RULE_TEXT], [...UPDATES], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...UPDATES], [...RULE_TEXT], [...PACKAGE_UPDATES], [...RULE_TEXT], [...PACKAGE_UPDATES], [...RULE_TEXT], [...UPDATES], [...RULE_TEXT], [...UPDATES], [...RULE_TEXT], [...PACKAGE_UPDATES], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT];
53352
+ [...DEVICE_EVENTS], [...RULE_TEXT], [...COMBINED_ALARM], [...RULE_TEXT], [...COMBINED_ALARM], [...RULE_TEXT], [...RULE_TEXT], [...COMBINED_ALARM], [...RULE_TEXT], [...PACKAGE_UPDATES], [...RULE_TEXT], [...RULE_TEXT], [...COMBINED_ALARM], [...RULE_TEXT], [...COMBINED_ALARM], [...RULE_TEXT], [...COMBINED_ALARM], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_BODY_ONLY], [...RULE_TEXT], [...RULE_TEXT], [...DEVICE_EVENTS], [...RULE_TEXT], [...DEVICE_EVENTS], [...RULE_TEXT], [...BATTERY, ...CONSUMABLE], [...RULE_TEXT], [...CONSUMABLE], [...RULE_TEXT], [...TANK], [...RULE_TEXT], [...RULE_TEXT], [...UPDATES], [...RULE_TEXT], [...UPDATES], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...UPDATES], [...RULE_TEXT], [...PACKAGE_UPDATES], [...RULE_TEXT], [...PACKAGE_UPDATES], [...RULE_TEXT], [...UPDATES], [...RULE_TEXT], [...UPDATES], [...RULE_TEXT], [...PACKAGE_UPDATES], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT];
53275
53353
  /**
53276
53354
  * TimelapseRule — the STANDALONE scheduled timelapse producer's rule model.
53277
53355
  *
@@ -16866,6 +16866,9 @@ var NcSystemEventKindSchema = zod.z.enum([
16866
16866
  "device-battery-normal",
16867
16867
  "device-consumable-low",
16868
16868
  "device-consumable-normal",
16869
+ "device-tank-low",
16870
+ "device-tank-full",
16871
+ "device-tank-normal",
16869
16872
  "stream-online",
16870
16873
  "stream-offline",
16871
16874
  "node-online",
@@ -16936,7 +16939,22 @@ var NcSystemEventConditionSchema = zod.z.object({
16936
16939
  */
16937
16940
  excludeDeviceIds: zod.z.array(zod.z.number().int()).min(1).optional(),
16938
16941
  nodeIds: zod.z.array(zod.z.string().min(1)).min(1).optional(),
16939
- packageNames: zod.z.array(zod.z.string().min(1)).min(1).optional()
16942
+ packageNames: zod.z.array(zod.z.string().min(1)).min(1).optional(),
16943
+ /**
16944
+ * At or below this remaining-life %, a consumable is LOW for THIS rule
16945
+ * (D642). Absent = {@link NC_CONSUMABLE_LOW_PERCENT_DEFAULT}; at most
16946
+ * {@link NC_CONSUMABLE_LOW_PERCENT_MAX}, so every episode can recover. Scoped to the
16947
+ * consumable kinds (`systemEventFilterApplies`) and to the device-events
16948
+ * family; ignored on every other kind.
16949
+ *
16950
+ * It is a property of the RULE because the operator decided so: a rule at
16951
+ * 25 must be told about a filter at 20 %, a rule at 10 must not. The hub
16952
+ * keeps one episode per (threshold, device, item) — its own hysteresis, its
16953
+ * own reminder — and a rule hears only the episode judged at ITS threshold,
16954
+ * exactly as an occupancy rule hears only the edge of its own count. A
16955
+ * provider's own `replace` verdict is low at every threshold.
16956
+ */
16957
+ consumableLowPercent: zod.z.number().int().min(1).max(95).optional()
16940
16958
  });
16941
16959
  /** Hard ceiling on a window (24h). A snooze that could not expire would be an
16942
16960
  * outage the operator asked for once and forgot. */
@@ -29968,12 +29986,20 @@ reset: method(zod.z.object({
29968
29986
  },
29969
29987
  runtimeState: ConsumablesStatusSchema.extend({ lastFetchedAt: zod.z.number() }),
29970
29988
  /**
29971
- * Runtime-state durability: **session** — the authority is the appliance; the provider re-reads the whole item array on connect.
29989
+ * Runtime-state durability: **restored** — nothing else holds the value
29990
+ * (D642). A consumable can often be read only in a device's wake window (the
29991
+ * Dreame mower's CMS counters answer only while it charges), so a restart
29992
+ * that wiped the slice left the panel empty and the alerts blind until the
29993
+ * next wake — 2026-09-26, mower 503 idle with `items: []`. A restored item is
29994
+ * the previous observation, not a claim about now; the provider overwrites it
29995
+ * the moment it reads the device again.
29972
29996
  *
29973
29997
  * See `RuntimeStateDurability`. Enforced by
29974
29998
  * `scripts/check-runtime-state-durability.ts`.
29975
29999
  */
29976
- durability: "session"
30000
+ durability: "restored",
30001
+ /** Clocks, not content: a re-read that changed no item costs no commit. */
30002
+ volatileStateFields: ["lastChangedAt", "lastFetchedAt"]
29977
30003
  };
29978
30004
  /**
29979
30005
  * Door / window / opening / garage / valve contact sensor. Boolean
@@ -52808,7 +52834,7 @@ Object.freeze({
52808
52834
  });
52809
52835
  /**
52810
52836
  * Per-cap runtime-state policy, projected from every `*.cap.ts` that declares
52811
- * `runtimeState`. 69 caps: 36 `restored`, 33 `session`.
52837
+ * `runtimeState`. 69 caps: 37 `restored`, 32 `session`.
52812
52838
  *
52813
52839
  * A cap absent from this map has no runtime-state slice at all. A cap PRESENT
52814
52840
  * with `durability: 'session'` has one and has decided not to keep it.
@@ -52867,8 +52893,8 @@ var RUNTIME_STATE_POLICY = {
52867
52893
  volatileFields: ["lastChangedAt"]
52868
52894
  },
52869
52895
  "consumables": {
52870
- durability: "session",
52871
- volatileFields: []
52896
+ durability: "restored",
52897
+ volatileFields: ["lastChangedAt", "lastFetchedAt"]
52872
52898
  },
52873
52899
  "contact": {
52874
52900
  durability: "restored",
@@ -53158,12 +53184,55 @@ var NC_AUDIO_DEFAULTS = {
53158
53184
  samplingSeconds: 10
53159
53185
  };
53160
53186
  new Set(["devices", "classes"]);
53161
- /** Every filter, for the callers that must cover all four (guards, tests). */
53187
+ /**
53188
+ * WHICH narrowing filter speaks about WHICH system-event kind — one predicate,
53189
+ * consumed by the rule ENGINE and by every rule EDITOR.
53190
+ *
53191
+ * ── The failure this file exists for ───────────────────────────────────────
53192
+ * `NcSystemEventConditionSchema` carries four optional narrowing lists
53193
+ * (`deviceIds`, `deviceTypes`, `nodeIds`, `packageNames`) beside a required
53194
+ * `kinds` gate. They are not four filters over one vocabulary: each belongs to
53195
+ * a FAMILY of kinds and is meaningless outside it. A node going away has no
53196
+ * device type; a completed export has no package; `stream-offline` deliberately
53197
+ * carries no device type at all (a stream belongs to a camera by construction).
53198
+ *
53199
+ * The engine applied all four to every kind, so a filter from one family failed
53200
+ * a kind from another family CLOSED. The operator's live rule "Eventi di
53201
+ * sistema" selected eleven kinds and set `deviceTypes: ['camera']` — the only
53202
+ * way to say "only my cameras" about the two liveness kinds — and NINE of the
53203
+ * eleven silently stopped being deliverable. Four days of history contained
53204
+ * `device-online` and `device-offline` and nothing else, across a window in
53205
+ * which agents were restarted and addons were updated.
53206
+ *
53207
+ * Both editors already computed this scoping, to decide which filter boxes to
53208
+ * render; the cap's own docblock already promised it ("Narrow a `device-*` kind
53209
+ * to these device TYPES"). Only the engine disagreed, and it disagreed in the
53210
+ * destructive direction. So the rule is stated ONCE, here, and the engine and
53211
+ * the editors are readers of it rather than three independent authors.
53212
+ *
53213
+ * ── The direction ─────────────────────────────────────────────────────────
53214
+ * Out of family ⇒ the filter is IGNORED, never fail-closed. An editor that
53215
+ * hides a box has already told the operator this filter does not speak about
53216
+ * these kinds, so honouring it as an exclusion contradicts the only
53217
+ * explanation the operator was ever given. Inside its family the filter still
53218
+ * narrows, and still fails CLOSED on a subject that cannot produce the identity
53219
+ * it tests (a device the mirror cannot name is not evidence of a camera).
53220
+ */
53221
+ /**
53222
+ * Every filter, for the callers that must cover all of them (guards, tests).
53223
+ *
53224
+ * `consumableLowPercent` (D642) is not a list but it is a filter in exactly
53225
+ * this sense: it belongs to a family of kinds (the consumable pair) and the
53226
+ * engine consults it only there. It differs in one way the readers must know —
53227
+ * its ABSENCE is not "no narrowing" but the default threshold, because a
53228
+ * consumable episode is always judged at SOME threshold.
53229
+ */
53162
53230
  var NC_SYSTEM_EVENT_FILTER_KEYS = [
53163
53231
  "deviceIds",
53164
53232
  "deviceTypes",
53165
53233
  "nodeIds",
53166
- "packageNames"
53234
+ "packageNames",
53235
+ "consumableLowPercent"
53167
53236
  ];
53168
53237
  new Map(Object.entries({
53169
53238
  "device-online": "device-events",
@@ -53174,6 +53243,9 @@ new Map(Object.entries({
53174
53243
  "device-battery-normal": "device-events",
53175
53244
  "device-consumable-low": "device-events",
53176
53245
  "device-consumable-normal": "device-events",
53246
+ "device-tank-low": "device-events",
53247
+ "device-tank-full": "device-events",
53248
+ "device-tank-normal": "device-events",
53177
53249
  "stream-online": "device-events",
53178
53250
  "stream-offline": "device-events",
53179
53251
  "detection-blind": "device-events",
@@ -53241,6 +53313,11 @@ var RULE_BODY_ONLY = ["body"];
53241
53313
  var RULE_TEXT = ["title", "body"];
53242
53314
  var BATTERY = ["device-battery-low", "device-battery-normal"];
53243
53315
  var CONSUMABLE = ["device-consumable-low", "device-consumable-normal"];
53316
+ var TANK = [
53317
+ "device-tank-low",
53318
+ "device-tank-full",
53319
+ "device-tank-normal"
53320
+ ];
53244
53321
  var UPDATES = [
53245
53322
  "addon-update-available",
53246
53323
  "server-update-available",
@@ -53266,12 +53343,13 @@ var DEVICE_EVENTS = [
53266
53343
  "device-enabled",
53267
53344
  ...BATTERY,
53268
53345
  ...CONSUMABLE,
53346
+ ...TANK,
53269
53347
  "stream-online",
53270
53348
  "stream-offline",
53271
53349
  "detection-blind",
53272
53350
  ...ALARM
53273
53351
  ];
53274
- [...DEVICE_EVENTS], [...RULE_TEXT], [...COMBINED_ALARM], [...RULE_TEXT], [...COMBINED_ALARM], [...RULE_TEXT], [...RULE_TEXT], [...COMBINED_ALARM], [...RULE_TEXT], [...PACKAGE_UPDATES], [...RULE_TEXT], [...RULE_TEXT], [...COMBINED_ALARM], [...RULE_TEXT], [...COMBINED_ALARM], [...RULE_TEXT], [...COMBINED_ALARM], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_BODY_ONLY], [...RULE_TEXT], [...RULE_TEXT], [...DEVICE_EVENTS], [...RULE_TEXT], [...DEVICE_EVENTS], [...RULE_TEXT], [...BATTERY, ...CONSUMABLE], [...RULE_TEXT], [...CONSUMABLE], [...RULE_TEXT], [...RULE_TEXT], [...UPDATES], [...RULE_TEXT], [...UPDATES], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...UPDATES], [...RULE_TEXT], [...PACKAGE_UPDATES], [...RULE_TEXT], [...PACKAGE_UPDATES], [...RULE_TEXT], [...UPDATES], [...RULE_TEXT], [...UPDATES], [...RULE_TEXT], [...PACKAGE_UPDATES], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT];
53352
+ [...DEVICE_EVENTS], [...RULE_TEXT], [...COMBINED_ALARM], [...RULE_TEXT], [...COMBINED_ALARM], [...RULE_TEXT], [...RULE_TEXT], [...COMBINED_ALARM], [...RULE_TEXT], [...PACKAGE_UPDATES], [...RULE_TEXT], [...RULE_TEXT], [...COMBINED_ALARM], [...RULE_TEXT], [...COMBINED_ALARM], [...RULE_TEXT], [...COMBINED_ALARM], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_BODY_ONLY], [...RULE_TEXT], [...RULE_TEXT], [...DEVICE_EVENTS], [...RULE_TEXT], [...DEVICE_EVENTS], [...RULE_TEXT], [...BATTERY, ...CONSUMABLE], [...RULE_TEXT], [...CONSUMABLE], [...RULE_TEXT], [...TANK], [...RULE_TEXT], [...RULE_TEXT], [...UPDATES], [...RULE_TEXT], [...UPDATES], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...UPDATES], [...RULE_TEXT], [...PACKAGE_UPDATES], [...RULE_TEXT], [...PACKAGE_UPDATES], [...RULE_TEXT], [...UPDATES], [...RULE_TEXT], [...UPDATES], [...RULE_TEXT], [...PACKAGE_UPDATES], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT];
53275
53353
  /**
53276
53354
  * TimelapseRule — the STANDALONE scheduled timelapse producer's rule model.
53277
53355
  *
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-Cqv528cH.js");
3
+ const require_dist = require("./dist-Dz1Hoc8h.js");
4
4
  const require_builtins_alerts_alerts_addon = require("./builtins/alerts/alerts.addon.js");
5
5
  require("./builtins/alerts/index.js");
6
6
  const require_formatter = require("./formatter-DqAKDlvN.js");
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 { At as logLevelAtMost, Bn as EventCategory$1, Cn as asJsonObject$1, Ct as kebabToCamel, Dn as emitDownForOwnedCaps, En as createEvent, Et as lifecycleJobSchema, Fn as parseJsonUnknown, Ht as procedureAuthKey, In as readinessKey, Ln as resolveCapMount, Pn as parseJsonObject, R as addonSettingsCapability, Rn as scopeKey, Rt as objectInputDeclaresAddonId, St as isVoidInput, T as RUNTIME_DEFAULTS, Tn as asString$1, Xt as scopesAllowDeviceCap, Yt as scopesAllowAddon, _ as LOG_LEVEL_RANK, _t as isCollectionArrayMethod, b as METHOD_ACCESS_MAP, bn as ReadinessRegistry, dn as errMsg$1, dt as extractNestedAddonId, gn as DEVICE_STATUS_METHOD, gt as isArrayOutputSchema, hn as DEVICE_SETTINGS_CONTRIBUTION_METHODS, jt as looseSchema, kn as expandCapMethods, mn as DATAPLANE_SECRET_HEADER$1, qt as resolveMethodAuth, t as ALL_CAPABILITY_DEFINITIONS, wn as asNumber, xn as ReadinessTimeoutError, yt as isObjectInput, zt as objectInputDeclaresRequiredDeviceId } from "./dist-Bo6_IXKD.mjs";
2
+ import { At as logLevelAtMost, Bn as EventCategory$1, Cn as asJsonObject$1, Ct as kebabToCamel, Dn as emitDownForOwnedCaps, En as createEvent, Et as lifecycleJobSchema, Fn as parseJsonUnknown, Ht as procedureAuthKey, In as readinessKey, Ln as resolveCapMount, Pn as parseJsonObject, R as addonSettingsCapability, Rn as scopeKey, Rt as objectInputDeclaresAddonId, St as isVoidInput, T as RUNTIME_DEFAULTS, Tn as asString$1, Xt as scopesAllowDeviceCap, Yt as scopesAllowAddon, _ as LOG_LEVEL_RANK, _t as isCollectionArrayMethod, b as METHOD_ACCESS_MAP, bn as ReadinessRegistry, dn as errMsg$1, dt as extractNestedAddonId, gn as DEVICE_STATUS_METHOD, gt as isArrayOutputSchema, hn as DEVICE_SETTINGS_CONTRIBUTION_METHODS, jt as looseSchema, kn as expandCapMethods, mn as DATAPLANE_SECRET_HEADER$1, qt as resolveMethodAuth, t as ALL_CAPABILITY_DEFINITIONS, wn as asNumber, xn as ReadinessTimeoutError, yt as isObjectInput, zt as objectInputDeclaresRequiredDeviceId } from "./dist-C4qebjgF.mjs";
3
3
  import { AlertCenterAddon } from "./builtins/alerts/alerts.addon.mjs";
4
4
  import "./builtins/alerts/index.mjs";
5
5
  import { t as formatLogLine } from "./formatter-B7qW8bPJ.mjs";
@@ -1,4 +1,4 @@
1
- import { Cn as asJsonObject } from "./dist-Bo6_IXKD.mjs";
1
+ import { Cn as asJsonObject } from "./dist-C4qebjgF.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?
@@ -1,4 +1,4 @@
1
- const require_dist = require("./dist-Cqv528cH.js");
1
+ const require_dist = require("./dist-Dz1Hoc8h.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?
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/system",
3
- "version": "1.2.300",
3
+ "version": "1.2.301",
4
4
  "description": "Core addon for CamStack — builtins, pipeline, process management, auth, logging, events",
5
5
  "keywords": [
6
6
  "camstack",