@camstack/system 1.2.44 → 1.2.45

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 (49) 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/backup-orchestrator/backup-orchestrator.addon.js +1 -1
  8. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.mjs +1 -1
  9. package/dist/builtins/console-logging/index.js +1 -1
  10. package/dist/builtins/console-logging/index.mjs +1 -1
  11. package/dist/builtins/core-blocks/core-blocks.addon.js +1 -1
  12. package/dist/builtins/core-blocks/core-blocks.addon.mjs +1 -1
  13. package/dist/builtins/device-manager/device-manager.addon.js +1 -1
  14. package/dist/builtins/device-manager/device-manager.addon.mjs +1 -1
  15. package/dist/builtins/doorbell/virtual-doorbell.addon.js +1 -1
  16. package/dist/builtins/doorbell/virtual-doorbell.addon.mjs +1 -1
  17. package/dist/builtins/hub-forwarder/index.js +1 -1
  18. package/dist/builtins/hub-forwarder/index.mjs +1 -1
  19. package/dist/builtins/liveness-monitor/liveness-monitor.addon.js +1 -1
  20. package/dist/builtins/liveness-monitor/liveness-monitor.addon.mjs +1 -1
  21. package/dist/builtins/local-auth/local-auth.addon.js +1 -1
  22. package/dist/builtins/local-auth/local-auth.addon.mjs +1 -1
  23. package/dist/builtins/local-network/local-network.addon.js +1 -1
  24. package/dist/builtins/local-network/local-network.addon.mjs +1 -1
  25. package/dist/builtins/loki-logging/index.js +1 -1
  26. package/dist/builtins/loki-logging/index.mjs +1 -1
  27. package/dist/builtins/native-metrics/native-metrics.addon.js +1 -1
  28. package/dist/builtins/native-metrics/native-metrics.addon.mjs +1 -1
  29. package/dist/builtins/platform-probe/index.js +1 -1
  30. package/dist/builtins/platform-probe/index.mjs +1 -1
  31. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.js +1 -1
  32. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.mjs +1 -1
  33. package/dist/builtins/snapshot/index.js +1 -1
  34. package/dist/builtins/snapshot/index.mjs +1 -1
  35. package/dist/builtins/sqlite-storage/filesystem-storage.addon.js +1 -1
  36. package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs +1 -1
  37. package/dist/builtins/sqlite-storage/sqlite-settings.addon.js +1 -1
  38. package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +1 -1
  39. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js +1 -1
  40. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs +1 -1
  41. package/dist/builtins/system-config/system-config.addon.js +1 -1
  42. package/dist/builtins/system-config/system-config.addon.mjs +1 -1
  43. package/dist/builtins/winston-logging/index.js +1 -1
  44. package/dist/builtins/winston-logging/index.mjs +1 -1
  45. package/dist/{dist-CBwOEr6q.js → dist-B1EPV1TZ.js} +187 -94
  46. package/dist/{dist-BZAMwgix.mjs → dist-CWAMO8KG.mjs} +187 -94
  47. package/dist/index.js +1 -1
  48. package/dist/index.mjs +1 -1
  49. 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-CBwOEr6q.js");
6
+ const require_dist = require("../../dist-B1EPV1TZ.js");
7
7
  const require_settle_sources = require("../../settle-sources-Bhsy57y-.js");
8
8
  let node_fs = require("node:fs");
9
9
  node_fs = require_chunk.__toESM(node_fs);
@@ -1,4 +1,4 @@
1
- import { Pt as EventCategory, ct as BaseAddon, m as addonPagesCapability, st as errMsg } from "../../dist-BZAMwgix.mjs";
1
+ import { Pt as EventCategory, ct as BaseAddon, m as addonPagesCapability, st as errMsg } from "../../dist-CWAMO8KG.mjs";
2
2
  import { t as settleSourcesWithTimeout } from "../../settle-sources-CDtNC8ub.mjs";
3
3
  import * as fs from "node:fs";
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-CBwOEr6q.js");
6
+ const require_dist = require("../../dist-B1EPV1TZ.js");
7
7
  const require_settle_sources = require("../../settle-sources-Bhsy57y-.js");
8
8
  let node_fs = require("node:fs");
9
9
  node_fs = require_chunk.__toESM(node_fs);
@@ -1,4 +1,4 @@
1
- import { Pt as EventCategory, ct as BaseAddon, g as addonWidgetsCapability, st as errMsg } from "../../dist-BZAMwgix.mjs";
1
+ import { Pt as EventCategory, ct as BaseAddon, g as addonWidgetsCapability, st as errMsg } from "../../dist-CWAMO8KG.mjs";
2
2
  import { t as settleSourcesWithTimeout } from "../../settle-sources-CDtNC8ub.mjs";
3
3
  import * as fs from "node:fs";
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-CBwOEr6q.js");
6
+ const require_dist = require("../../dist-B1EPV1TZ.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 { Pt as EventCategory, _ as alertsCapability, ct as BaseAddon, n as AlertSchema, st as errMsg, xt as createEvent } from "../../dist-BZAMwgix.mjs";
1
+ import { Pt as EventCategory, _ as alertsCapability, ct as BaseAddon, n as AlertSchema, st as errMsg, xt as createEvent } from "../../dist-CWAMO8KG.mjs";
2
2
  //#region src/builtins/alerts/prune-policy.ts
3
3
  /**
4
4
  * Ids older than `cutoffMs`, oldest first.
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-CBwOEr6q.js");
6
+ const require_dist = require("../../dist-B1EPV1TZ.js");
7
7
  let node_fs = require("node:fs");
8
8
  let node_fs$1 = require_chunk.__toESM(node_fs, 1);
9
9
  node_fs = require_chunk.__toESM(node_fs);
@@ -1,4 +1,4 @@
1
- import { Pt as EventCategory, b as backupCapability, ct as BaseAddon } from "../../dist-BZAMwgix.mjs";
1
+ import { Pt as EventCategory, b as backupCapability, ct as BaseAddon } from "../../dist-CWAMO8KG.mjs";
2
2
  import * as fs from "node:fs";
3
3
  import Kt from "node:fs";
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-CBwOEr6q.js");
6
+ const require_dist = require("../../dist-B1EPV1TZ.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 { H as logDestinationCapability, ct as BaseAddon } from "../../dist-BZAMwgix.mjs";
1
+ import { H as logDestinationCapability, ct as BaseAddon } from "../../dist-CWAMO8KG.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-CBwOEr6q.js");
3
+ const require_dist = require("../../dist-B1EPV1TZ.js");
4
4
  let node_path = require("node:path");
5
5
  node_path = require_chunk.__toESM(node_path);
6
6
  let node_crypto = require("node:crypto");
@@ -1,5 +1,5 @@
1
1
  import { o as __toESM } from "../../chunk-CNf5ZN-e.mjs";
2
- import { S as coreBlocksCapability, ct as BaseAddon, o as CoreBlockSchema } from "../../dist-BZAMwgix.mjs";
2
+ import { S as coreBlocksCapability, ct as BaseAddon, o as CoreBlockSchema } from "../../dist-CWAMO8KG.mjs";
3
3
  import * as path$1 from "node:path";
4
4
  import { randomUUID } from "node:crypto";
5
5
  import * as fs 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-CBwOEr6q.js");
6
+ const require_dist = require("../../dist-B1EPV1TZ.js");
7
7
  let _camstack_types_node = require("@camstack/types/node");
8
8
  let zod = require("zod");
9
9
  let node_crypto = require("node:crypto");
@@ -1,4 +1,4 @@
1
- import { A as enumerateSchemaFields, E as deviceStatusCapability, Et as isDeviceConfigCap, J as parseStreamParamsFormPatch, K as normalizeUnit, Nt as sleep, P as getByPath, Pt as EventCategory, Q as setByPath, T as deviceStateCapability, _t as WELL_KNOWN_TAB_MAP, a as CAP_NAMES_WITH_STATUS, ct as BaseAddon, ft as DeviceFeature, it as toExpressionValue, j as evaluateLinkExpression, k as enumerateItemArrayFields, mt as DeviceType, ot as validateExpressionSource, pt as DeviceRole, s as DeviceStatusSchema, st as errMsg, t as ALL_CAPABILITY_DEFINITIONS, u as STREAM_PROFILE_META, v as applyTransform, w as deviceManagerCapability, x as buildStreamParamsConfigSchema } from "../../dist-BZAMwgix.mjs";
1
+ import { A as enumerateSchemaFields, E as deviceStatusCapability, Et as isDeviceConfigCap, J as parseStreamParamsFormPatch, K as normalizeUnit, Nt as sleep, P as getByPath, Pt as EventCategory, Q as setByPath, T as deviceStateCapability, _t as WELL_KNOWN_TAB_MAP, a as CAP_NAMES_WITH_STATUS, ct as BaseAddon, ft as DeviceFeature, it as toExpressionValue, j as evaluateLinkExpression, k as enumerateItemArrayFields, mt as DeviceType, ot as validateExpressionSource, pt as DeviceRole, s as DeviceStatusSchema, st as errMsg, t as ALL_CAPABILITY_DEFINITIONS, u as STREAM_PROFILE_META, v as applyTransform, w as deviceManagerCapability, x as buildStreamParamsConfigSchema } from "../../dist-CWAMO8KG.mjs";
2
2
  import { canonicalDeviceFingerprint } from "@camstack/types/node";
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-CBwOEr6q.js");
6
+ const require_dist = require("../../dist-B1EPV1TZ.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 { D as doorbellCapability, Pt as EventCategory, ct as BaseAddon, mt as DeviceType, st as errMsg, xt as createEvent } from "../../dist-BZAMwgix.mjs";
1
+ import { D as doorbellCapability, Pt as EventCategory, ct as BaseAddon, mt as DeviceType, st as errMsg, xt as createEvent } from "../../dist-CWAMO8KG.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-CBwOEr6q.js");
6
+ const require_dist = require("../../dist-B1EPV1TZ.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 { H as logDestinationCapability, ct as BaseAddon } from "../../dist-BZAMwgix.mjs";
1
+ import { H as logDestinationCapability, ct as BaseAddon } from "../../dist-CWAMO8KG.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-CBwOEr6q.js");
3
+ const require_dist = require("../../dist-B1EPV1TZ.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 { Pt as EventCategory, ct as BaseAddon, st as errMsg, xt as createEvent } from "../../dist-BZAMwgix.mjs";
1
+ import { Pt as EventCategory, ct as BaseAddon, st as errMsg, xt as createEvent } from "../../dist-CWAMO8KG.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-CBwOEr6q.js");
6
+ const require_dist = require("../../dist-B1EPV1TZ.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 { at as userManagementCapability, ct as BaseAddon, d as ScopedTokenSchema, p as UserRecordSchema, r as ApiKeyRecordSchema, y as authProviderCapability } from "../../dist-BZAMwgix.mjs";
2
+ import { at as userManagementCapability, ct as BaseAddon, d as ScopedTokenSchema, p as UserRecordSchema, r as ApiKeyRecordSchema, y as authProviderCapability } from "../../dist-CWAMO8KG.mjs";
3
3
  import * as crypto$1 from "node:crypto";
4
4
  import { randomUUID } 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-CBwOEr6q.js");
3
+ const require_dist = require("../../dist-B1EPV1TZ.js");
4
4
  let node_os = require("node:os");
5
5
  node_os = require_chunk.__toESM(node_os);
6
6
  //#region src/builtins/local-network/local-network.addon.ts
@@ -1,4 +1,4 @@
1
- import { Pt as EventCategory, V as localNetworkCapability, ct as BaseAddon } from "../../dist-BZAMwgix.mjs";
1
+ import { Pt as EventCategory, V as localNetworkCapability, ct as BaseAddon } from "../../dist-CWAMO8KG.mjs";
2
2
  import * as os from "node:os";
3
3
  //#region src/builtins/local-network/local-network.addon.ts
4
4
  /**
@@ -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-CBwOEr6q.js");
6
+ const require_dist = require("../../dist-B1EPV1TZ.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 { H as logDestinationCapability, ct as BaseAddon } from "../../dist-BZAMwgix.mjs";
1
+ import { H as logDestinationCapability, ct as BaseAddon } from "../../dist-CWAMO8KG.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-CBwOEr6q.js");
6
+ const require_dist = require("../../dist-B1EPV1TZ.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,4 +1,4 @@
1
- import { G as metricsProviderCapability, Pt as EventCategory, ct as BaseAddon, xt as createEvent } from "../../dist-BZAMwgix.mjs";
1
+ import { G as metricsProviderCapability, Pt as EventCategory, ct as BaseAddon, xt as createEvent } from "../../dist-CWAMO8KG.mjs";
2
2
  import * as fs from "node:fs";
3
3
  import { execFile, execFileSync } from "node:child_process";
4
4
  import { promisify } from "node:util";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-CBwOEr6q.js");
6
+ const require_dist = require("../../dist-B1EPV1TZ.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 { Ct as emitReadiness, O as enumerateInferenceDevices, Pt as EventCategory, Y as platformProbeCapability, Z as scoreRuntimes, ct as BaseAddon, st as errMsg } from "../../dist-BZAMwgix.mjs";
2
+ import { Ct as emitReadiness, O as enumerateInferenceDevices, Pt as EventCategory, Y as platformProbeCapability, Z as scoreRuntimes, ct as BaseAddon, st as errMsg } from "../../dist-CWAMO8KG.mjs";
3
3
  import * as fs from "node:fs";
4
4
  import { execFile } from "node:child_process";
5
5
  import { promisify } from "node:util";
@@ -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-CBwOEr6q.js");
6
+ const require_dist = require("../../dist-B1EPV1TZ.js");
7
7
  //#region src/builtins/remote-access-orchestrator/enabled-providers-reconcile.ts
8
8
  /**
9
9
  * Reconcile the durable `enabledProviders` set against authoritative
@@ -1,4 +1,4 @@
1
- import { Pt as EventCategory, ct as BaseAddon } from "../../dist-BZAMwgix.mjs";
1
+ import { Pt as EventCategory, ct as BaseAddon } from "../../dist-CWAMO8KG.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
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-CBwOEr6q.js");
6
+ const require_dist = require("../../dist-B1EPV1TZ.js");
7
7
  let node_child_process = require("node:child_process");
8
8
  //#region src/builtins/snapshot/snapshot-coalescing.ts
9
9
  /**
@@ -1,4 +1,4 @@
1
- import { Dt as nodePin, ct as BaseAddon, et as snapshotCapability, ft as DeviceFeature, i as BatteryStatusSchema, mt as DeviceType, rt as streamQualityLabel, st as errMsg } from "../../dist-BZAMwgix.mjs";
1
+ import { Dt as nodePin, ct as BaseAddon, et as snapshotCapability, ft as DeviceFeature, i as BatteryStatusSchema, mt as DeviceType, rt as streamQualityLabel, st as errMsg } from "../../dist-CWAMO8KG.mjs";
2
2
  import { execFile, spawn } from "node:child_process";
3
3
  //#region src/builtins/snapshot/snapshot-coalescing.ts
4
4
  /**
@@ -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-CBwOEr6q.js");
6
+ const require_dist = require("../../dist-B1EPV1TZ.js");
7
7
  let node_fs = require("node:fs");
8
8
  node_fs = require_chunk.__toESM(node_fs);
9
9
  let node_path = require("node:path");
@@ -1,4 +1,4 @@
1
- import { N as filesystemBrowseCapability, ct as BaseAddon, nt as storageProviderCapability } from "../../dist-BZAMwgix.mjs";
1
+ import { N as filesystemBrowseCapability, ct as BaseAddon, nt as storageProviderCapability } from "../../dist-CWAMO8KG.mjs";
2
2
  import * as fs from "node:fs";
3
3
  import * as path$1 from "node:path";
4
4
  import { basename, dirname, join, resolve, sep } 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-CBwOEr6q.js");
6
+ const require_dist = require("../../dist-B1EPV1TZ.js");
7
7
  let node_crypto = require("node:crypto");
8
8
  let better_sqlite3 = require("better-sqlite3");
9
9
  better_sqlite3 = require_chunk.__toESM(better_sqlite3);
@@ -1,4 +1,4 @@
1
- import { C as dataStoreProviderCapability, ct as BaseAddon, kt as parseJsonUnknown, l as RUNTIME_DEFAULTS, st as errMsg, vt as asJsonObject } from "../../dist-BZAMwgix.mjs";
1
+ import { C as dataStoreProviderCapability, ct as BaseAddon, kt as parseJsonUnknown, l as RUNTIME_DEFAULTS, st as errMsg, vt as asJsonObject } from "../../dist-CWAMO8KG.mjs";
2
2
  import { randomUUID } from "node:crypto";
3
3
  import Database from "better-sqlite3";
4
4
  //#region src/builtins/sqlite-storage/filter-compiler.ts
@@ -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-CBwOEr6q.js");
6
+ const require_dist = require("../../dist-B1EPV1TZ.js");
7
7
  let node_path = require("node:path");
8
8
  node_path = require_chunk.__toESM(node_path);
9
9
  let node_fs_promises = require("node:fs/promises");
@@ -1,4 +1,4 @@
1
- import { $ as settingsStoreCapability, Ot as parseJsonObject, ct as BaseAddon, f as StorageLocationTypeSchema, tt as storageCapability } from "../../dist-BZAMwgix.mjs";
1
+ import { $ as settingsStoreCapability, Ot as parseJsonObject, ct as BaseAddon, f as StorageLocationTypeSchema, tt as storageCapability } from "../../dist-CWAMO8KG.mjs";
2
2
  import * as path$1 from "node:path";
3
3
  import * as fs from "node:fs/promises";
4
4
  import { buildStorageLocationRegistry } from "@camstack/system";
@@ -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-CBwOEr6q.js");
6
+ const require_dist = require("../../dist-B1EPV1TZ.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 { Tt as hydrateSchema, ct as BaseAddon, st as errMsg } from "../../dist-BZAMwgix.mjs";
1
+ import { Tt as hydrateSchema, ct as BaseAddon, st as errMsg } from "../../dist-CWAMO8KG.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-CBwOEr6q.js");
6
+ const require_dist = require("../../dist-B1EPV1TZ.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 { H as logDestinationCapability, ct as BaseAddon } from "../../dist-BZAMwgix.mjs";
1
+ import { H as logDestinationCapability, ct as BaseAddon } from "../../dist-CWAMO8KG.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";
@@ -5218,6 +5218,100 @@ AccessoryKind.Siren, AccessoryKind.Floodlight, AccessoryKind.Spotlight, Accessor
5218
5218
  DeviceFeature.BatteryOperated;
5219
5219
  new Set(["devices", "classes"]);
5220
5220
  /**
5221
+ * Alarm-panel cap. Models HA `alarm_control_panel.*` on
5222
+ * `DeviceType.AlarmPanel`. State follows HA's canonical lifecycle
5223
+ * across disarmed / armed_(home|away|night|vacation|custom_bypass) /
5224
+ * arming / pending / triggered / disarming.
5225
+ *
5226
+ * Many panels require a PIN code on arm / disarm — the optional
5227
+ * `code` field on the methods passes it through to the upstream
5228
+ * service; it's NEVER persisted in the runtime slice or any event
5229
+ * payload. The presence of a required code is signalled by
5230
+ * `DeviceFeature.AlarmPinRequired` so the UI gates a code-entry
5231
+ * field without a slice fetch.
5232
+ *
5233
+ * `availableModes` mirrors HA's `supported_features`-derived arm
5234
+ * mode list — the UI renders only the buttons the panel accepts.
5235
+ */
5236
+ var AlarmStateSchema = zod.z.enum([
5237
+ "disarmed",
5238
+ "armed_home",
5239
+ "armed_away",
5240
+ "armed_night",
5241
+ "armed_vacation",
5242
+ "armed_custom_bypass",
5243
+ "arming",
5244
+ "disarming",
5245
+ "pending",
5246
+ "triggered"
5247
+ ]);
5248
+ var AlarmArmModeSchema = zod.z.enum([
5249
+ "home",
5250
+ "away",
5251
+ "night",
5252
+ "vacation",
5253
+ "custom_bypass"
5254
+ ]);
5255
+ var AlarmPanelStatusSchema = zod.z.object({
5256
+ /** Current lifecycle state. */
5257
+ state: AlarmStateSchema,
5258
+ /** Subset of arm modes the panel accepts. UI renders one button per
5259
+ * mode in this list. */
5260
+ availableModes: zod.z.array(AlarmArmModeSchema),
5261
+ /** Whether the panel requires a PIN on arm / disarm. Mirrors
5262
+ * `DeviceFeature.AlarmPinRequired` for slice consumers. */
5263
+ requiresCode: zod.z.boolean(),
5264
+ /** Ms epoch when the slice was last updated. */
5265
+ lastChangedAt: zod.z.number()
5266
+ });
5267
+ var alarmPanelCapability = {
5268
+ name: "alarm-panel",
5269
+ scope: "device",
5270
+ deviceNative: true,
5271
+ mode: "singleton",
5272
+ deviceTypes: [DeviceType.AlarmPanel],
5273
+ methods: {
5274
+ arm: method(zod.z.object({
5275
+ deviceId: zod.z.number().int().nonnegative(),
5276
+ mode: AlarmArmModeSchema,
5277
+ /** Optional PIN code. Required when `requiresCode === true`.
5278
+ * Passed through to the upstream service; never persisted. */
5279
+ code: zod.z.string().min(1).optional()
5280
+ }), zod.z.void(), {
5281
+ kind: "mutation",
5282
+ auth: "admin"
5283
+ }),
5284
+ disarm: method(zod.z.object({
5285
+ deviceId: zod.z.number().int().nonnegative(),
5286
+ code: zod.z.string().min(1).optional()
5287
+ }), zod.z.void(), {
5288
+ kind: "mutation",
5289
+ auth: "admin"
5290
+ }),
5291
+ /**
5292
+ * Force the panel into the `triggered` state — used by HA
5293
+ * automations to surface external sensor events through the panel
5294
+ * (e.g. a Reolink camera intrusion event firing the security
5295
+ * system). Provider rejects when the panel hardware doesn't
5296
+ * support a software-initiated trigger.
5297
+ */
5298
+ trigger: method(zod.z.object({ deviceId: zod.z.number().int().nonnegative() }), zod.z.void(), {
5299
+ kind: "mutation",
5300
+ auth: "admin"
5301
+ })
5302
+ },
5303
+ status: {
5304
+ schema: AlarmPanelStatusSchema,
5305
+ kind: "push"
5306
+ },
5307
+ /**
5308
+ * Runtime-state slice — mirrored by the kernel. UI panel reads the
5309
+ * full slice; renders an arm button per `availableModes` entry and
5310
+ * a PIN field iff `requiresCode === true`.
5311
+ */
5312
+ runtimeState: AlarmPanelStatusSchema
5313
+ };
5314
+ /**
5221
5315
  * Shared geometry vocabulary for on-frame shape caps — privacy-mask,
5222
5316
  * motion-zones, and the detection zones/lines editor all speak this one
5223
5317
  * language so a single drawing-plane editor and the providers stay
@@ -6380,6 +6474,67 @@ zod.z.object({
6380
6474
  firstAt: zod.z.number(),
6381
6475
  lastAt: zod.z.number()
6382
6476
  });
6477
+ /**
6478
+ * The three durations the panel's state machine runs on, plus who hears about
6479
+ * an arm.
6480
+ *
6481
+ * They live on the NOTIFICATION-RULES cap, not on `alarm-panel`, on purpose:
6482
+ * `alarm-panel` is `deviceNative` and its other provider mirrors somebody
6483
+ * else's panel, which has its own delays and no way to be told these. This is
6484
+ * configuration of the panel CamStack owns, and the Notification Center owns
6485
+ * that panel.
6486
+ */
6487
+ var NcAlarmSettingsSchema = zod.z.object({
6488
+ /** Grace period between arming and the mode taking effect. 0 = immediate. */
6489
+ exitDelaySec: zod.z.number().int().min(0).max(600),
6490
+ /** Grace period between a trigger and the alarm firing. 0 = immediate. */
6491
+ entryDelaySec: zod.z.number().int().min(0).max(600),
6492
+ /**
6493
+ * How long `triggered` lasts before the panel re-arms itself.
6494
+ * **0 = until an operator disarms it** — the behaviour before this field
6495
+ * existed, and therefore what an untouched install keeps doing.
6496
+ */
6497
+ triggeredDurationSec: zod.z.number().int().min(0).max(3600),
6498
+ /** Send a notification when a mode takes effect. */
6499
+ announceArm: zod.z.boolean(),
6500
+ /**
6501
+ * Where that notification goes. Target ids from `notification-output`.
6502
+ *
6503
+ * Explicit rather than "everyone": an arm announcement is a household
6504
+ * message, and broadcasting it to every configured endpoint (including a
6505
+ * webhook wired to something else) is not a default anybody would choose.
6506
+ * Empty with `announceArm: true` sends nothing, and the server logs that —
6507
+ * silence must be attributable.
6508
+ */
6509
+ announceTargets: zod.z.array(zod.z.string().min(1)).max(16)
6510
+ });
6511
+ /** Every field optional — a tab edits one control at a time. */
6512
+ var NcAlarmSettingsPatchSchema = NcAlarmSettingsSchema.partial();
6513
+ /**
6514
+ * What one arm mode actually arms, DERIVED from the enabled rules gated on it.
6515
+ * Never authored, never stored — see `alarm-mode-coverage.ts` for why a stored
6516
+ * copy would lie the first time a rule is disabled.
6517
+ */
6518
+ var NcAlarmModeCoverageSchema = zod.z.object({
6519
+ mode: AlarmArmModeSchema,
6520
+ /** Enabled rules gated on `armed_<mode>`. Zero means the mode does nothing. */
6521
+ ruleCount: zod.z.number().int().min(0),
6522
+ /** At least one covering rule has no device scope, so the mode covers all. */
6523
+ allDevices: zod.z.boolean(),
6524
+ /** Ids named by the covering rules. A SUBSET when `allDevices` is true. */
6525
+ deviceIds: zod.z.array(zod.z.number().int())
6526
+ });
6527
+ var NcAlarmConfigSchema = zod.z.object({
6528
+ /**
6529
+ * The panel's device id, or null when this install has no panel (the ensure
6530
+ * step failed, or this is not the hub). Null is the honest answer: an editor
6531
+ * that rendered delays for a panel that does not exist would be a form whose
6532
+ * Save does nothing.
6533
+ */
6534
+ deviceId: zod.z.number().int().nullable(),
6535
+ settings: NcAlarmSettingsSchema,
6536
+ coverage: zod.z.array(NcAlarmModeCoverageSchema)
6537
+ });
6383
6538
  var notificationRulesCapability = {
6384
6539
  name: "notification-rules",
6385
6540
  scope: "system",
@@ -6475,6 +6630,26 @@ var notificationRulesCapability = {
6475
6630
  cancelSnooze: method(zod.z.object({ snoozeId: zod.z.string() }), zod.z.object({ success: zod.z.literal(true) }), {
6476
6631
  kind: "mutation",
6477
6632
  caller: "required"
6633
+ }),
6634
+ /**
6635
+ * The alarm panel's durations, plus what each mode ACTUALLY arms.
6636
+ *
6637
+ * Coverage is returned by the same call as the settings on purpose: they
6638
+ * are read together or not at all. An editor that showed the delays
6639
+ * without the coverage would let an operator tune an exit delay for a mode
6640
+ * that arms nothing, which is the failure this whole surface exists to
6641
+ * make visible.
6642
+ */
6643
+ getAlarmConfig: method(zod.z.object({}), NcAlarmConfigSchema, { auth: "admin" }),
6644
+ /**
6645
+ * Patch the durations. Returns the WHOLE config, coverage included, so a
6646
+ * client never has to guess what the server settled on — the panel clamps
6647
+ * and normalises, and a form that re-rendered from its own input would
6648
+ * show a value the alarm is not using.
6649
+ */
6650
+ setAlarmConfig: method(zod.z.object({ patch: NcAlarmSettingsPatchSchema }), NcAlarmConfigSchema, {
6651
+ kind: "mutation",
6652
+ auth: "admin"
6478
6653
  })
6479
6654
  }
6480
6655
  };
@@ -6737,100 +6912,6 @@ var airQualitySensorCapability = {
6737
6912
  runtimeState: AirQualitySensorStatusSchema
6738
6913
  };
6739
6914
  /**
6740
- * Alarm-panel cap. Models HA `alarm_control_panel.*` on
6741
- * `DeviceType.AlarmPanel`. State follows HA's canonical lifecycle
6742
- * across disarmed / armed_(home|away|night|vacation|custom_bypass) /
6743
- * arming / pending / triggered / disarming.
6744
- *
6745
- * Many panels require a PIN code on arm / disarm — the optional
6746
- * `code` field on the methods passes it through to the upstream
6747
- * service; it's NEVER persisted in the runtime slice or any event
6748
- * payload. The presence of a required code is signalled by
6749
- * `DeviceFeature.AlarmPinRequired` so the UI gates a code-entry
6750
- * field without a slice fetch.
6751
- *
6752
- * `availableModes` mirrors HA's `supported_features`-derived arm
6753
- * mode list — the UI renders only the buttons the panel accepts.
6754
- */
6755
- var AlarmStateSchema = zod.z.enum([
6756
- "disarmed",
6757
- "armed_home",
6758
- "armed_away",
6759
- "armed_night",
6760
- "armed_vacation",
6761
- "armed_custom_bypass",
6762
- "arming",
6763
- "disarming",
6764
- "pending",
6765
- "triggered"
6766
- ]);
6767
- var AlarmArmModeSchema = zod.z.enum([
6768
- "home",
6769
- "away",
6770
- "night",
6771
- "vacation",
6772
- "custom_bypass"
6773
- ]);
6774
- var AlarmPanelStatusSchema = zod.z.object({
6775
- /** Current lifecycle state. */
6776
- state: AlarmStateSchema,
6777
- /** Subset of arm modes the panel accepts. UI renders one button per
6778
- * mode in this list. */
6779
- availableModes: zod.z.array(AlarmArmModeSchema),
6780
- /** Whether the panel requires a PIN on arm / disarm. Mirrors
6781
- * `DeviceFeature.AlarmPinRequired` for slice consumers. */
6782
- requiresCode: zod.z.boolean(),
6783
- /** Ms epoch when the slice was last updated. */
6784
- lastChangedAt: zod.z.number()
6785
- });
6786
- var alarmPanelCapability = {
6787
- name: "alarm-panel",
6788
- scope: "device",
6789
- deviceNative: true,
6790
- mode: "singleton",
6791
- deviceTypes: [DeviceType.AlarmPanel],
6792
- methods: {
6793
- arm: method(zod.z.object({
6794
- deviceId: zod.z.number().int().nonnegative(),
6795
- mode: AlarmArmModeSchema,
6796
- /** Optional PIN code. Required when `requiresCode === true`.
6797
- * Passed through to the upstream service; never persisted. */
6798
- code: zod.z.string().min(1).optional()
6799
- }), zod.z.void(), {
6800
- kind: "mutation",
6801
- auth: "admin"
6802
- }),
6803
- disarm: method(zod.z.object({
6804
- deviceId: zod.z.number().int().nonnegative(),
6805
- code: zod.z.string().min(1).optional()
6806
- }), zod.z.void(), {
6807
- kind: "mutation",
6808
- auth: "admin"
6809
- }),
6810
- /**
6811
- * Force the panel into the `triggered` state — used by HA
6812
- * automations to surface external sensor events through the panel
6813
- * (e.g. a Reolink camera intrusion event firing the security
6814
- * system). Provider rejects when the panel hardware doesn't
6815
- * support a software-initiated trigger.
6816
- */
6817
- trigger: method(zod.z.object({ deviceId: zod.z.number().int().nonnegative() }), zod.z.void(), {
6818
- kind: "mutation",
6819
- auth: "admin"
6820
- })
6821
- },
6822
- status: {
6823
- schema: AlarmPanelStatusSchema,
6824
- kind: "push"
6825
- },
6826
- /**
6827
- * Runtime-state slice — mirrored by the kernel. UI panel reads the
6828
- * full slice; renders an arm button per `availableModes` entry and
6829
- * a PIN field iff `requiresCode === true`.
6830
- */
6831
- runtimeState: AlarmPanelStatusSchema
6832
- };
6833
- /**
6834
6915
  * Ambient illuminance reading in lux. Drives Home Assistant `sensor`
6835
6916
  * entries with `device_class: illuminance`.
6836
6917
  */
@@ -27521,6 +27602,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
27521
27602
  addonId: null,
27522
27603
  access: "delete"
27523
27604
  },
27605
+ "notificationRules.getAlarmConfig": {
27606
+ capName: "notification-rules",
27607
+ capScope: "system",
27608
+ addonId: null,
27609
+ access: "view"
27610
+ },
27524
27611
  "notificationRules.getConditionCatalog": {
27525
27612
  capName: "notification-rules",
27526
27613
  capScope: "system",
@@ -27551,6 +27638,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
27551
27638
  addonId: null,
27552
27639
  access: "view"
27553
27640
  },
27641
+ "notificationRules.setAlarmConfig": {
27642
+ capName: "notification-rules",
27643
+ capScope: "system",
27644
+ addonId: null,
27645
+ access: "create"
27646
+ },
27554
27647
  "notificationRules.setRuleEnabled": {
27555
27648
  capName: "notification-rules",
27556
27649
  capScope: "system",
@@ -5218,6 +5218,100 @@ AccessoryKind.Siren, AccessoryKind.Floodlight, AccessoryKind.Spotlight, Accessor
5218
5218
  DeviceFeature.BatteryOperated;
5219
5219
  new Set(["devices", "classes"]);
5220
5220
  /**
5221
+ * Alarm-panel cap. Models HA `alarm_control_panel.*` on
5222
+ * `DeviceType.AlarmPanel`. State follows HA's canonical lifecycle
5223
+ * across disarmed / armed_(home|away|night|vacation|custom_bypass) /
5224
+ * arming / pending / triggered / disarming.
5225
+ *
5226
+ * Many panels require a PIN code on arm / disarm — the optional
5227
+ * `code` field on the methods passes it through to the upstream
5228
+ * service; it's NEVER persisted in the runtime slice or any event
5229
+ * payload. The presence of a required code is signalled by
5230
+ * `DeviceFeature.AlarmPinRequired` so the UI gates a code-entry
5231
+ * field without a slice fetch.
5232
+ *
5233
+ * `availableModes` mirrors HA's `supported_features`-derived arm
5234
+ * mode list — the UI renders only the buttons the panel accepts.
5235
+ */
5236
+ var AlarmStateSchema = z.enum([
5237
+ "disarmed",
5238
+ "armed_home",
5239
+ "armed_away",
5240
+ "armed_night",
5241
+ "armed_vacation",
5242
+ "armed_custom_bypass",
5243
+ "arming",
5244
+ "disarming",
5245
+ "pending",
5246
+ "triggered"
5247
+ ]);
5248
+ var AlarmArmModeSchema = z.enum([
5249
+ "home",
5250
+ "away",
5251
+ "night",
5252
+ "vacation",
5253
+ "custom_bypass"
5254
+ ]);
5255
+ var AlarmPanelStatusSchema = z.object({
5256
+ /** Current lifecycle state. */
5257
+ state: AlarmStateSchema,
5258
+ /** Subset of arm modes the panel accepts. UI renders one button per
5259
+ * mode in this list. */
5260
+ availableModes: z.array(AlarmArmModeSchema),
5261
+ /** Whether the panel requires a PIN on arm / disarm. Mirrors
5262
+ * `DeviceFeature.AlarmPinRequired` for slice consumers. */
5263
+ requiresCode: z.boolean(),
5264
+ /** Ms epoch when the slice was last updated. */
5265
+ lastChangedAt: z.number()
5266
+ });
5267
+ var alarmPanelCapability = {
5268
+ name: "alarm-panel",
5269
+ scope: "device",
5270
+ deviceNative: true,
5271
+ mode: "singleton",
5272
+ deviceTypes: [DeviceType.AlarmPanel],
5273
+ methods: {
5274
+ arm: method(z.object({
5275
+ deviceId: z.number().int().nonnegative(),
5276
+ mode: AlarmArmModeSchema,
5277
+ /** Optional PIN code. Required when `requiresCode === true`.
5278
+ * Passed through to the upstream service; never persisted. */
5279
+ code: z.string().min(1).optional()
5280
+ }), z.void(), {
5281
+ kind: "mutation",
5282
+ auth: "admin"
5283
+ }),
5284
+ disarm: method(z.object({
5285
+ deviceId: z.number().int().nonnegative(),
5286
+ code: z.string().min(1).optional()
5287
+ }), z.void(), {
5288
+ kind: "mutation",
5289
+ auth: "admin"
5290
+ }),
5291
+ /**
5292
+ * Force the panel into the `triggered` state — used by HA
5293
+ * automations to surface external sensor events through the panel
5294
+ * (e.g. a Reolink camera intrusion event firing the security
5295
+ * system). Provider rejects when the panel hardware doesn't
5296
+ * support a software-initiated trigger.
5297
+ */
5298
+ trigger: method(z.object({ deviceId: z.number().int().nonnegative() }), z.void(), {
5299
+ kind: "mutation",
5300
+ auth: "admin"
5301
+ })
5302
+ },
5303
+ status: {
5304
+ schema: AlarmPanelStatusSchema,
5305
+ kind: "push"
5306
+ },
5307
+ /**
5308
+ * Runtime-state slice — mirrored by the kernel. UI panel reads the
5309
+ * full slice; renders an arm button per `availableModes` entry and
5310
+ * a PIN field iff `requiresCode === true`.
5311
+ */
5312
+ runtimeState: AlarmPanelStatusSchema
5313
+ };
5314
+ /**
5221
5315
  * Shared geometry vocabulary for on-frame shape caps — privacy-mask,
5222
5316
  * motion-zones, and the detection zones/lines editor all speak this one
5223
5317
  * language so a single drawing-plane editor and the providers stay
@@ -6380,6 +6474,67 @@ z.object({
6380
6474
  firstAt: z.number(),
6381
6475
  lastAt: z.number()
6382
6476
  });
6477
+ /**
6478
+ * The three durations the panel's state machine runs on, plus who hears about
6479
+ * an arm.
6480
+ *
6481
+ * They live on the NOTIFICATION-RULES cap, not on `alarm-panel`, on purpose:
6482
+ * `alarm-panel` is `deviceNative` and its other provider mirrors somebody
6483
+ * else's panel, which has its own delays and no way to be told these. This is
6484
+ * configuration of the panel CamStack owns, and the Notification Center owns
6485
+ * that panel.
6486
+ */
6487
+ var NcAlarmSettingsSchema = z.object({
6488
+ /** Grace period between arming and the mode taking effect. 0 = immediate. */
6489
+ exitDelaySec: z.number().int().min(0).max(600),
6490
+ /** Grace period between a trigger and the alarm firing. 0 = immediate. */
6491
+ entryDelaySec: z.number().int().min(0).max(600),
6492
+ /**
6493
+ * How long `triggered` lasts before the panel re-arms itself.
6494
+ * **0 = until an operator disarms it** — the behaviour before this field
6495
+ * existed, and therefore what an untouched install keeps doing.
6496
+ */
6497
+ triggeredDurationSec: z.number().int().min(0).max(3600),
6498
+ /** Send a notification when a mode takes effect. */
6499
+ announceArm: z.boolean(),
6500
+ /**
6501
+ * Where that notification goes. Target ids from `notification-output`.
6502
+ *
6503
+ * Explicit rather than "everyone": an arm announcement is a household
6504
+ * message, and broadcasting it to every configured endpoint (including a
6505
+ * webhook wired to something else) is not a default anybody would choose.
6506
+ * Empty with `announceArm: true` sends nothing, and the server logs that —
6507
+ * silence must be attributable.
6508
+ */
6509
+ announceTargets: z.array(z.string().min(1)).max(16)
6510
+ });
6511
+ /** Every field optional — a tab edits one control at a time. */
6512
+ var NcAlarmSettingsPatchSchema = NcAlarmSettingsSchema.partial();
6513
+ /**
6514
+ * What one arm mode actually arms, DERIVED from the enabled rules gated on it.
6515
+ * Never authored, never stored — see `alarm-mode-coverage.ts` for why a stored
6516
+ * copy would lie the first time a rule is disabled.
6517
+ */
6518
+ var NcAlarmModeCoverageSchema = z.object({
6519
+ mode: AlarmArmModeSchema,
6520
+ /** Enabled rules gated on `armed_<mode>`. Zero means the mode does nothing. */
6521
+ ruleCount: z.number().int().min(0),
6522
+ /** At least one covering rule has no device scope, so the mode covers all. */
6523
+ allDevices: z.boolean(),
6524
+ /** Ids named by the covering rules. A SUBSET when `allDevices` is true. */
6525
+ deviceIds: z.array(z.number().int())
6526
+ });
6527
+ var NcAlarmConfigSchema = z.object({
6528
+ /**
6529
+ * The panel's device id, or null when this install has no panel (the ensure
6530
+ * step failed, or this is not the hub). Null is the honest answer: an editor
6531
+ * that rendered delays for a panel that does not exist would be a form whose
6532
+ * Save does nothing.
6533
+ */
6534
+ deviceId: z.number().int().nullable(),
6535
+ settings: NcAlarmSettingsSchema,
6536
+ coverage: z.array(NcAlarmModeCoverageSchema)
6537
+ });
6383
6538
  var notificationRulesCapability = {
6384
6539
  name: "notification-rules",
6385
6540
  scope: "system",
@@ -6475,6 +6630,26 @@ var notificationRulesCapability = {
6475
6630
  cancelSnooze: method(z.object({ snoozeId: z.string() }), z.object({ success: z.literal(true) }), {
6476
6631
  kind: "mutation",
6477
6632
  caller: "required"
6633
+ }),
6634
+ /**
6635
+ * The alarm panel's durations, plus what each mode ACTUALLY arms.
6636
+ *
6637
+ * Coverage is returned by the same call as the settings on purpose: they
6638
+ * are read together or not at all. An editor that showed the delays
6639
+ * without the coverage would let an operator tune an exit delay for a mode
6640
+ * that arms nothing, which is the failure this whole surface exists to
6641
+ * make visible.
6642
+ */
6643
+ getAlarmConfig: method(z.object({}), NcAlarmConfigSchema, { auth: "admin" }),
6644
+ /**
6645
+ * Patch the durations. Returns the WHOLE config, coverage included, so a
6646
+ * client never has to guess what the server settled on — the panel clamps
6647
+ * and normalises, and a form that re-rendered from its own input would
6648
+ * show a value the alarm is not using.
6649
+ */
6650
+ setAlarmConfig: method(z.object({ patch: NcAlarmSettingsPatchSchema }), NcAlarmConfigSchema, {
6651
+ kind: "mutation",
6652
+ auth: "admin"
6478
6653
  })
6479
6654
  }
6480
6655
  };
@@ -6737,100 +6912,6 @@ var airQualitySensorCapability = {
6737
6912
  runtimeState: AirQualitySensorStatusSchema
6738
6913
  };
6739
6914
  /**
6740
- * Alarm-panel cap. Models HA `alarm_control_panel.*` on
6741
- * `DeviceType.AlarmPanel`. State follows HA's canonical lifecycle
6742
- * across disarmed / armed_(home|away|night|vacation|custom_bypass) /
6743
- * arming / pending / triggered / disarming.
6744
- *
6745
- * Many panels require a PIN code on arm / disarm — the optional
6746
- * `code` field on the methods passes it through to the upstream
6747
- * service; it's NEVER persisted in the runtime slice or any event
6748
- * payload. The presence of a required code is signalled by
6749
- * `DeviceFeature.AlarmPinRequired` so the UI gates a code-entry
6750
- * field without a slice fetch.
6751
- *
6752
- * `availableModes` mirrors HA's `supported_features`-derived arm
6753
- * mode list — the UI renders only the buttons the panel accepts.
6754
- */
6755
- var AlarmStateSchema = z.enum([
6756
- "disarmed",
6757
- "armed_home",
6758
- "armed_away",
6759
- "armed_night",
6760
- "armed_vacation",
6761
- "armed_custom_bypass",
6762
- "arming",
6763
- "disarming",
6764
- "pending",
6765
- "triggered"
6766
- ]);
6767
- var AlarmArmModeSchema = z.enum([
6768
- "home",
6769
- "away",
6770
- "night",
6771
- "vacation",
6772
- "custom_bypass"
6773
- ]);
6774
- var AlarmPanelStatusSchema = z.object({
6775
- /** Current lifecycle state. */
6776
- state: AlarmStateSchema,
6777
- /** Subset of arm modes the panel accepts. UI renders one button per
6778
- * mode in this list. */
6779
- availableModes: z.array(AlarmArmModeSchema),
6780
- /** Whether the panel requires a PIN on arm / disarm. Mirrors
6781
- * `DeviceFeature.AlarmPinRequired` for slice consumers. */
6782
- requiresCode: z.boolean(),
6783
- /** Ms epoch when the slice was last updated. */
6784
- lastChangedAt: z.number()
6785
- });
6786
- var alarmPanelCapability = {
6787
- name: "alarm-panel",
6788
- scope: "device",
6789
- deviceNative: true,
6790
- mode: "singleton",
6791
- deviceTypes: [DeviceType.AlarmPanel],
6792
- methods: {
6793
- arm: method(z.object({
6794
- deviceId: z.number().int().nonnegative(),
6795
- mode: AlarmArmModeSchema,
6796
- /** Optional PIN code. Required when `requiresCode === true`.
6797
- * Passed through to the upstream service; never persisted. */
6798
- code: z.string().min(1).optional()
6799
- }), z.void(), {
6800
- kind: "mutation",
6801
- auth: "admin"
6802
- }),
6803
- disarm: method(z.object({
6804
- deviceId: z.number().int().nonnegative(),
6805
- code: z.string().min(1).optional()
6806
- }), z.void(), {
6807
- kind: "mutation",
6808
- auth: "admin"
6809
- }),
6810
- /**
6811
- * Force the panel into the `triggered` state — used by HA
6812
- * automations to surface external sensor events through the panel
6813
- * (e.g. a Reolink camera intrusion event firing the security
6814
- * system). Provider rejects when the panel hardware doesn't
6815
- * support a software-initiated trigger.
6816
- */
6817
- trigger: method(z.object({ deviceId: z.number().int().nonnegative() }), z.void(), {
6818
- kind: "mutation",
6819
- auth: "admin"
6820
- })
6821
- },
6822
- status: {
6823
- schema: AlarmPanelStatusSchema,
6824
- kind: "push"
6825
- },
6826
- /**
6827
- * Runtime-state slice — mirrored by the kernel. UI panel reads the
6828
- * full slice; renders an arm button per `availableModes` entry and
6829
- * a PIN field iff `requiresCode === true`.
6830
- */
6831
- runtimeState: AlarmPanelStatusSchema
6832
- };
6833
- /**
6834
6915
  * Ambient illuminance reading in lux. Drives Home Assistant `sensor`
6835
6916
  * entries with `device_class: illuminance`.
6836
6917
  */
@@ -27521,6 +27602,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
27521
27602
  addonId: null,
27522
27603
  access: "delete"
27523
27604
  },
27605
+ "notificationRules.getAlarmConfig": {
27606
+ capName: "notification-rules",
27607
+ capScope: "system",
27608
+ addonId: null,
27609
+ access: "view"
27610
+ },
27524
27611
  "notificationRules.getConditionCatalog": {
27525
27612
  capName: "notification-rules",
27526
27613
  capScope: "system",
@@ -27551,6 +27638,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
27551
27638
  addonId: null,
27552
27639
  access: "view"
27553
27640
  },
27641
+ "notificationRules.setAlarmConfig": {
27642
+ capName: "notification-rules",
27643
+ capScope: "system",
27644
+ addonId: null,
27645
+ access: "create"
27646
+ },
27554
27647
  "notificationRules.setRuleEnabled": {
27555
27648
  capName: "notification-rules",
27556
27649
  capScope: "system",
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-CBwOEr6q.js");
3
+ const require_dist = require("./dist-B1EPV1TZ.js");
4
4
  const require_model_download_service = require("./model-download-service-hf0ookyy.js");
5
5
  const require_manifest_python_deps = require("./manifest-python-deps-BqE5j0-O.js");
6
6
  const require_resource_monitor = require("./resource-monitor-DNNomR-i.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 readinessKey, B as lifecycleJobSchema, F as isArrayOutputSchema, I as isCollectionArrayMethod, L as isObjectInput, M as extractNestedAddonId, Mt as scopeKey, Ot as parseJsonObject, Pt as EventCategory$1, R as isVoidInput, St as emitDownForOwnedCaps, U as logLevelAtMost, W as looseSchema, X as procedureAuthKey, bt as asString$1, c as METHOD_ACCESS_MAP, dt as DEVICE_STATUS_METHOD, gt as ReadinessTimeoutError, h as addonSettingsCapability, ht as ReadinessRegistry, jt as resolveCapMount, kt as parseJsonUnknown$1, l as RUNTIME_DEFAULTS, lt as DATAPLANE_SECRET_HEADER$1, q as objectInputDeclaresAddonId, st as errMsg$1, t as ALL_CAPABILITY_DEFINITIONS, ut as DEVICE_SETTINGS_CONTRIBUTION_METHODS, vt as asJsonObject$1, wt as expandCapMethods, xt as createEvent, yt as asNumber, z as kebabToCamel } from "./dist-BZAMwgix.mjs";
2
+ import { At as readinessKey, B as lifecycleJobSchema, F as isArrayOutputSchema, I as isCollectionArrayMethod, L as isObjectInput, M as extractNestedAddonId, Mt as scopeKey, Ot as parseJsonObject, Pt as EventCategory$1, R as isVoidInput, St as emitDownForOwnedCaps, U as logLevelAtMost, W as looseSchema, X as procedureAuthKey, bt as asString$1, c as METHOD_ACCESS_MAP, dt as DEVICE_STATUS_METHOD, gt as ReadinessTimeoutError, h as addonSettingsCapability, ht as ReadinessRegistry, jt as resolveCapMount, kt as parseJsonUnknown$1, l as RUNTIME_DEFAULTS, lt as DATAPLANE_SECRET_HEADER$1, q as objectInputDeclaresAddonId, st as errMsg$1, t as ALL_CAPABILITY_DEFINITIONS, ut as DEVICE_SETTINGS_CONTRIBUTION_METHODS, vt as asJsonObject$1, wt as expandCapMethods, xt as createEvent, yt as asNumber, z as kebabToCamel } from "./dist-CWAMO8KG.mjs";
3
3
  import { a as downloadModel, c as getModelFilePath, d as contentTypeFor, f as createAuthenticatedFileServer, h as resolveFilePath, i as downloadFile, l as isModelDownloaded, m as parseTokenizedUrl, n as collectModelFiles, o as ensureModel, p as parseRangeHeader, r as deleteModelFromDisk, s as fetchJson, t as ModelDownloadService, u as createFileDataPlaneHandler } from "./model-download-service-Cp9f4dk6.mjs";
4
4
  import { $ as buildNativeCapProxy, A as createHubCapForwardService, B as AGENT_CAP_FWD_ACTION, C as brokerTransportLink, Ct as resolveAddonClass, D as localProviderLink, E as ipcParentLink, F as createUdsLogger, G as callWithServiceDiscovery, H as CapRouteResolver, I as createUdsLoggerWithControl, J as UdsLocalTransportServer, K as createLocalTransport, L as LocalChildClient, M as createUdsEventBridge, N as createUdsEventBus, O as HUB_CAP_FWD_ACTION, P as udsChildLogToWorkerEntry, Q as encodeFrame, R as LocalChildRegistry, S as brokerCallForCap, St as runNpm, T as ipcChildLink, U as CapRouteError, V as AGENT_CAP_FWD_SERVICE, W as classifyCapRoute, X as localEndpointPath, Y as SocketChannel, Z as FrameDecoder, _ as createKernelHwAccel, _t as CapabilityHandle, a as getWorkerDeviceRegistry, b as __resetCapUsageRegistryForTests, bt as installManifestNativeDeps, c as setHubConnected, ct as NATIVE_PROVIDER_SERVICE_INFIX, d as getBrokerEventBus, dt as capBareAction, et as buildUdsNativeCapProxy, f as getMoleculerEventStats, ft as capServiceName, g as AddonDepsManager, gt as DeviceRegistry, h as subscribePassthrough, ht as serializeTypedArrays, i as createUdsAddonContext, it as mountNativeCapService, j as createParentUnownedCallHandler, k as HUB_CAP_FWD_SERVICE, l as EVENT_TOPIC_PREFIX, lt as capActionName, m as setNodeEventInterest, mt as deserializeTypedArrays, n as adaptBrokerToCluster, o as getOrInitReadinessRegistry, ot as createAddonService, p as registerEventBusService, pt as parseCapAction, q as UdsLocalTransportClient, r as createAddonContext, s as getOrInitReadinessRegistryForClient, st as validateProviderRegistrations, t as installManifestPythonDeps, tt as createBrokerDeviceManagerApi, u as clusterEventTopic, ut as capActionSuffix, v as resolveHwAccel, vt as CapabilityUnavailableError, w as buildLinkChain, wt as createAddonDataPlaneFacility, x as getCapUsageRegistry, xt as resolveNpmInvocation, y as CapUsageRegistry, yt as copyBundledNativeModules, z as UDS_NO_ROUTE_PREFIX } from "./manifest-python-deps-Ck4-9K9m.mjs";
5
5
  import { n as getSinglePidStats, t as getPidStats } from "./resource-monitor-BkP504Vq.mjs";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/system",
3
- "version": "1.2.44",
3
+ "version": "1.2.45",
4
4
  "description": "Core addon for CamStack — builtins, pipeline, process management, auth, logging, events",
5
5
  "keywords": [
6
6
  "camstack",