@camstack/system 1.2.64 → 1.2.65

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 (50) 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 +10 -4
  14. package/dist/builtins/device-manager/device-manager.addon.mjs +10 -4
  15. package/dist/builtins/device-manager/device-state-mirror.d.ts +7 -1
  16. package/dist/builtins/doorbell/virtual-doorbell.addon.js +1 -1
  17. package/dist/builtins/doorbell/virtual-doorbell.addon.mjs +1 -1
  18. package/dist/builtins/hub-forwarder/index.js +1 -1
  19. package/dist/builtins/hub-forwarder/index.mjs +1 -1
  20. package/dist/builtins/liveness-monitor/liveness-monitor.addon.js +1 -1
  21. package/dist/builtins/liveness-monitor/liveness-monitor.addon.mjs +1 -1
  22. package/dist/builtins/local-auth/local-auth.addon.js +1 -1
  23. package/dist/builtins/local-auth/local-auth.addon.mjs +1 -1
  24. package/dist/builtins/local-network/local-network.addon.js +1 -1
  25. package/dist/builtins/local-network/local-network.addon.mjs +1 -1
  26. package/dist/builtins/loki-logging/index.js +1 -1
  27. package/dist/builtins/loki-logging/index.mjs +1 -1
  28. package/dist/builtins/native-metrics/native-metrics.addon.js +1 -1
  29. package/dist/builtins/native-metrics/native-metrics.addon.mjs +1 -1
  30. package/dist/builtins/platform-probe/index.js +1 -1
  31. package/dist/builtins/platform-probe/index.mjs +1 -1
  32. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.js +1 -1
  33. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.mjs +1 -1
  34. package/dist/builtins/snapshot/index.js +1 -1
  35. package/dist/builtins/snapshot/index.mjs +1 -1
  36. package/dist/builtins/sqlite-storage/filesystem-storage.addon.js +1 -1
  37. package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs +1 -1
  38. package/dist/builtins/sqlite-storage/sqlite-settings.addon.js +1 -1
  39. package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +1 -1
  40. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js +1 -1
  41. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs +1 -1
  42. package/dist/builtins/system-config/system-config.addon.js +1 -1
  43. package/dist/builtins/system-config/system-config.addon.mjs +1 -1
  44. package/dist/builtins/winston-logging/index.js +1 -1
  45. package/dist/builtins/winston-logging/index.mjs +1 -1
  46. package/dist/{dist-DP3nHlNM.js → dist-CIkGOAcz.js} +57 -1
  47. package/dist/{dist-CMb7aKS0.mjs → dist-DqPyKwVB.mjs} +57 -1
  48. package/dist/index.js +1 -1
  49. package/dist/index.mjs +1 -1
  50. 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-DP3nHlNM.js");
6
+ const require_dist = require("../../dist-CIkGOAcz.js");
7
7
  const require_settle_sources = require("../../settle-sources-Bhsy57y-.js");
8
8
  let node_crypto = require("node:crypto");
9
9
  let node_fs = require("node:fs");
@@ -1,4 +1,4 @@
1
- import { Lt as EventCategory, dt as BaseAddon, h as addonPagesCapability, ut as errMsg } from "../../dist-CMb7aKS0.mjs";
1
+ import { Lt as EventCategory, dt as BaseAddon, h as addonPagesCapability, ut as errMsg } from "../../dist-DqPyKwVB.mjs";
2
2
  import { t as settleSourcesWithTimeout } from "../../settle-sources-CDtNC8ub.mjs";
3
3
  import { createHash, randomUUID } from "node:crypto";
4
4
  import * as fs from "node:fs";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-DP3nHlNM.js");
6
+ const require_dist = require("../../dist-CIkGOAcz.js");
7
7
  const require_settle_sources = require("../../settle-sources-Bhsy57y-.js");
8
8
  let node_crypto = require("node:crypto");
9
9
  let node_fs = require("node:fs");
@@ -1,4 +1,4 @@
1
- import { Lt as EventCategory, _ as addonWidgetsCapability, dt as BaseAddon, ut as errMsg } from "../../dist-CMb7aKS0.mjs";
1
+ import { Lt as EventCategory, _ as addonWidgetsCapability, dt as BaseAddon, ut as errMsg } from "../../dist-DqPyKwVB.mjs";
2
2
  import { t as settleSourcesWithTimeout } from "../../settle-sources-CDtNC8ub.mjs";
3
3
  import { createHash, randomUUID } from "node:crypto";
4
4
  import * as fs from "node:fs";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-DP3nHlNM.js");
6
+ const require_dist = require("../../dist-CIkGOAcz.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 { Lt as EventCategory, dt as BaseAddon, n as AlertSchema, ut as errMsg, v as alertsCapability, wt as createEvent } from "../../dist-CMb7aKS0.mjs";
1
+ import { Lt as EventCategory, dt as BaseAddon, n as AlertSchema, ut as errMsg, v as alertsCapability, wt as createEvent } from "../../dist-DqPyKwVB.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-DP3nHlNM.js");
6
+ const require_dist = require("../../dist-CIkGOAcz.js");
7
7
  let node_crypto = require("node:crypto");
8
8
  let node_fs = require("node:fs");
9
9
  let node_fs$1 = require_chunk.__toESM(node_fs, 1);
@@ -1,4 +1,4 @@
1
- import { Lt as EventCategory, b as backupCapability, dt as BaseAddon } from "../../dist-CMb7aKS0.mjs";
1
+ import { Lt as EventCategory, b as backupCapability, dt as BaseAddon } from "../../dist-DqPyKwVB.mjs";
2
2
  import { randomBytes, randomUUID } from "node:crypto";
3
3
  import * as fs from "node:fs";
4
4
  import Kt from "node:fs";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-DP3nHlNM.js");
6
+ const require_dist = require("../../dist-CIkGOAcz.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 { G as logDestinationCapability, dt as BaseAddon } from "../../dist-CMb7aKS0.mjs";
1
+ import { G as logDestinationCapability, dt as BaseAddon } from "../../dist-DqPyKwVB.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-DP3nHlNM.js");
3
+ const require_dist = require("../../dist-CIkGOAcz.js");
4
4
  let node_crypto = require("node:crypto");
5
5
  let node_path = require("node:path");
6
6
  node_path = require_chunk.__toESM(node_path);
@@ -1,4 +1,4 @@
1
- import { C as coreBlockAddonId, T as coreBlocksCapability, dt as BaseAddon, o as CORE_BLOCK_ADDON_PREFIX, s as CoreBlockSchema, w as coreBlockIdFromAddonId } from "../../dist-CMb7aKS0.mjs";
1
+ import { C as coreBlockAddonId, T as coreBlocksCapability, dt as BaseAddon, o as CORE_BLOCK_ADDON_PREFIX, s as CoreBlockSchema, w as coreBlockIdFromAddonId } from "../../dist-DqPyKwVB.mjs";
2
2
  import { randomUUID } from "node:crypto";
3
3
  import * as path$1 from "node:path";
4
4
  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-DP3nHlNM.js");
6
+ const require_dist = require("../../dist-CIkGOAcz.js");
7
7
  let _camstack_types_node = require("@camstack/types/node");
8
8
  let node_crypto = require("node:crypto");
9
9
  //#region src/builtins/device-manager/day-night-config-schema.ts
@@ -3619,6 +3619,12 @@ var DeviceStateMirror = class DeviceStateMirror {
3619
3619
  * persist the new slice in-memory, emit `DeviceStateChanged` for
3620
3620
  * this cap. No-op on identical writes (both same shape and same
3621
3621
  * values). Called by `setCapSlice` provider.
3622
+ *
3623
+ * @returns whether the mirror actually changed. The caller uses this to
3624
+ * decide whether the (synchronous, disk-blocking) runtime-state write is
3625
+ * worth scheduling — see `scheduleRuntimeStateDiskWrite`. Returning void
3626
+ * here and scheduling unconditionally is what made an unchanged poll cost
3627
+ * a SQLite commit.
3622
3628
  */
3623
3629
  applySingleCapUpdate(deviceId, capName, slice) {
3624
3630
  let perCap = this.stateMirror.get(deviceId);
@@ -3627,9 +3633,10 @@ var DeviceStateMirror = class DeviceStateMirror {
3627
3633
  this.stateMirror.set(deviceId, perCap);
3628
3634
  }
3629
3635
  const prior = perCap.get(capName);
3630
- if (prior && shallowEqual(prior, slice)) return;
3636
+ if (prior && shallowEqual(prior, slice)) return false;
3631
3637
  perCap.set(capName, { ...slice });
3632
3638
  this.emitStateChanged(deviceId, capName, { ...slice });
3639
+ return true;
3633
3640
  }
3634
3641
  /**
3635
3642
  * Debounced disk writer. Coalesces frequent writes (motion phase
@@ -4255,8 +4262,7 @@ var DeviceManagerAddon = class extends require_dist.BaseAddon {
4255
4262
  setCapSlice: async (input) => {
4256
4263
  const { deviceId, capName, slice } = input;
4257
4264
  if (!await resolvePersistedById(deviceId)) throw new Error(`[device-manager] setCapSlice: unknown device id=${deviceId}`);
4258
- stateMirror.applySingleCapUpdate(deviceId, capName, slice);
4259
- stateMirror.scheduleRuntimeStateDiskWrite(deviceId, settings);
4265
+ if (stateMirror.applySingleCapUpdate(deviceId, capName, slice)) stateMirror.scheduleRuntimeStateDiskWrite(deviceId, settings);
4260
4266
  }
4261
4267
  }
4262
4268
  }];
@@ -1,4 +1,4 @@
1
- import { A as deviceStatusCapability, It as sleep, Lt as EventCategory, N as enumerateItemArrayFields, O as deviceManagerCapability, P as enumerateSchemaFields, Q as parseStreamParamsFormPatch, S as buildStreamParamsConfigSchema, Y as normalizeUnit, _t as DeviceType, a as CAP_NAMES_WITH_STATUS, bt as WELL_KNOWN_TAB_MAP, c as DeviceStatusSchema, d as STREAM_PROFILE_META, dt as BaseAddon, gt as DeviceRole, ht as DeviceFeature, k as deviceStateCapability, kt as isDeviceConfigCap, t as ALL_CAPABILITY_DEFINITIONS, ut as errMsg } from "../../dist-CMb7aKS0.mjs";
1
+ import { A as deviceStatusCapability, It as sleep, Lt as EventCategory, N as enumerateItemArrayFields, O as deviceManagerCapability, P as enumerateSchemaFields, Q as parseStreamParamsFormPatch, S as buildStreamParamsConfigSchema, Y as normalizeUnit, _t as DeviceType, a as CAP_NAMES_WITH_STATUS, bt as WELL_KNOWN_TAB_MAP, c as DeviceStatusSchema, d as STREAM_PROFILE_META, dt as BaseAddon, gt as DeviceRole, ht as DeviceFeature, k as deviceStateCapability, kt as isDeviceConfigCap, t as ALL_CAPABILITY_DEFINITIONS, ut as errMsg } from "../../dist-DqPyKwVB.mjs";
2
2
  import { canonicalDeviceFingerprint } from "@camstack/types/node";
3
3
  import { randomUUID } from "node:crypto";
4
4
  //#region src/builtins/device-manager/day-night-config-schema.ts
@@ -3614,6 +3614,12 @@ var DeviceStateMirror = class DeviceStateMirror {
3614
3614
  * persist the new slice in-memory, emit `DeviceStateChanged` for
3615
3615
  * this cap. No-op on identical writes (both same shape and same
3616
3616
  * values). Called by `setCapSlice` provider.
3617
+ *
3618
+ * @returns whether the mirror actually changed. The caller uses this to
3619
+ * decide whether the (synchronous, disk-blocking) runtime-state write is
3620
+ * worth scheduling — see `scheduleRuntimeStateDiskWrite`. Returning void
3621
+ * here and scheduling unconditionally is what made an unchanged poll cost
3622
+ * a SQLite commit.
3617
3623
  */
3618
3624
  applySingleCapUpdate(deviceId, capName, slice) {
3619
3625
  let perCap = this.stateMirror.get(deviceId);
@@ -3622,9 +3628,10 @@ var DeviceStateMirror = class DeviceStateMirror {
3622
3628
  this.stateMirror.set(deviceId, perCap);
3623
3629
  }
3624
3630
  const prior = perCap.get(capName);
3625
- if (prior && shallowEqual(prior, slice)) return;
3631
+ if (prior && shallowEqual(prior, slice)) return false;
3626
3632
  perCap.set(capName, { ...slice });
3627
3633
  this.emitStateChanged(deviceId, capName, { ...slice });
3634
+ return true;
3628
3635
  }
3629
3636
  /**
3630
3637
  * Debounced disk writer. Coalesces frequent writes (motion phase
@@ -4250,8 +4257,7 @@ var DeviceManagerAddon = class extends BaseAddon {
4250
4257
  setCapSlice: async (input) => {
4251
4258
  const { deviceId, capName, slice } = input;
4252
4259
  if (!await resolvePersistedById(deviceId)) throw new Error(`[device-manager] setCapSlice: unknown device id=${deviceId}`);
4253
- stateMirror.applySingleCapUpdate(deviceId, capName, slice);
4254
- stateMirror.scheduleRuntimeStateDiskWrite(deviceId, settings);
4260
+ if (stateMirror.applySingleCapUpdate(deviceId, capName, slice)) stateMirror.scheduleRuntimeStateDiskWrite(deviceId, settings);
4255
4261
  }
4256
4262
  }
4257
4263
  }];
@@ -21,8 +21,14 @@ export declare class DeviceStateMirror {
21
21
  * persist the new slice in-memory, emit `DeviceStateChanged` for
22
22
  * this cap. No-op on identical writes (both same shape and same
23
23
  * values). Called by `setCapSlice` provider.
24
+ *
25
+ * @returns whether the mirror actually changed. The caller uses this to
26
+ * decide whether the (synchronous, disk-blocking) runtime-state write is
27
+ * worth scheduling — see `scheduleRuntimeStateDiskWrite`. Returning void
28
+ * here and scheduling unconditionally is what made an unchanged poll cost
29
+ * a SQLite commit.
24
30
  */
25
- applySingleCapUpdate(deviceId: number, capName: string, slice: Record<string, unknown>): void;
31
+ applySingleCapUpdate(deviceId: number, capName: string, slice: Record<string, unknown>): boolean;
26
32
  /**
27
33
  * Debounced disk writer. Coalesces frequent writes (motion phase
28
34
  * transitions, battery pushes) into one `writeDeviceRuntimeState`
@@ -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-DP3nHlNM.js");
6
+ const require_dist = require("../../dist-CIkGOAcz.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 { B as isSameAddonId, Lt as EventCategory, _t as DeviceType, dt as BaseAddon, j as doorbellCapability, ut as errMsg, wt as createEvent, x as bareAddonId } from "../../dist-CMb7aKS0.mjs";
1
+ import { B as isSameAddonId, Lt as EventCategory, _t as DeviceType, dt as BaseAddon, j as doorbellCapability, ut as errMsg, wt as createEvent, x as bareAddonId } from "../../dist-DqPyKwVB.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-DP3nHlNM.js");
6
+ const require_dist = require("../../dist-CIkGOAcz.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 { G as logDestinationCapability, dt as BaseAddon } from "../../dist-CMb7aKS0.mjs";
1
+ import { G as logDestinationCapability, dt as BaseAddon } from "../../dist-DqPyKwVB.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-DP3nHlNM.js");
3
+ const require_dist = require("../../dist-CIkGOAcz.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 { Lt as EventCategory, dt as BaseAddon, ut as errMsg, wt as createEvent } from "../../dist-CMb7aKS0.mjs";
1
+ import { Lt as EventCategory, dt as BaseAddon, ut as errMsg, wt as createEvent } from "../../dist-DqPyKwVB.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-DP3nHlNM.js");
6
+ const require_dist = require("../../dist-CIkGOAcz.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 { X as oauthIntegrationCapability, dt as BaseAddon, f as ScopedTokenSchema, m as UserRecordSchema, r as ApiKeyRecordSchema, st as userManagementCapability, y as authProviderCapability } from "../../dist-CMb7aKS0.mjs";
2
+ import { X as oauthIntegrationCapability, dt as BaseAddon, f as ScopedTokenSchema, m as UserRecordSchema, r as ApiKeyRecordSchema, st as userManagementCapability, y as authProviderCapability } from "../../dist-DqPyKwVB.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-DP3nHlNM.js");
3
+ const require_dist = require("../../dist-CIkGOAcz.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 { Lt as EventCategory, W as localNetworkCapability, dt as BaseAddon } from "../../dist-CMb7aKS0.mjs";
1
+ import { Lt as EventCategory, W as localNetworkCapability, dt as BaseAddon } from "../../dist-DqPyKwVB.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-DP3nHlNM.js");
6
+ const require_dist = require("../../dist-CIkGOAcz.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 { G as logDestinationCapability, dt as BaseAddon } from "../../dist-CMb7aKS0.mjs";
1
+ import { G as logDestinationCapability, dt as BaseAddon } from "../../dist-DqPyKwVB.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-DP3nHlNM.js");
6
+ const require_dist = require("../../dist-CIkGOAcz.js");
7
7
  let node_fs = require("node:fs");
8
8
  node_fs = require_chunk.__toESM(node_fs);
9
9
  let node_util = require("node:util");
@@ -1,4 +1,4 @@
1
- import { J as metricsProviderCapability, Lt as EventCategory, dt as BaseAddon, wt as createEvent } from "../../dist-CMb7aKS0.mjs";
1
+ import { J as metricsProviderCapability, Lt as EventCategory, dt as BaseAddon, wt as createEvent } from "../../dist-DqPyKwVB.mjs";
2
2
  import * as fs from "node:fs";
3
3
  import { promisify } from "node:util";
4
4
  import { execFile, execFileSync } from "node:child_process";
@@ -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-DP3nHlNM.js");
6
+ const require_dist = require("../../dist-CIkGOAcz.js");
7
7
  let node_fs = require("node:fs");
8
8
  node_fs = require_chunk.__toESM(node_fs);
9
9
  let node_util = require("node:util");
@@ -1,5 +1,5 @@
1
1
  import { o as __toESM } from "../../chunk-CNf5ZN-e.mjs";
2
- import { $ as platformProbeCapability, Et as emitReadiness, Lt as EventCategory, M as enumerateInferenceDevices, dt as BaseAddon, tt as scoreRuntimes, ut as errMsg } from "../../dist-CMb7aKS0.mjs";
2
+ import { $ as platformProbeCapability, Et as emitReadiness, Lt as EventCategory, M as enumerateInferenceDevices, dt as BaseAddon, tt as scoreRuntimes, ut as errMsg } from "../../dist-DqPyKwVB.mjs";
3
3
  import * as fs from "node:fs";
4
4
  import { promisify } from "node:util";
5
5
  import { execFile } from "node:child_process";
@@ -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-DP3nHlNM.js");
6
+ const require_dist = require("../../dist-CIkGOAcz.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 { Lt as EventCategory, dt as BaseAddon } from "../../dist-CMb7aKS0.mjs";
1
+ import { Lt as EventCategory, dt as BaseAddon } from "../../dist-DqPyKwVB.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-DP3nHlNM.js");
6
+ const require_dist = require("../../dist-CIkGOAcz.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 { At as nodePin, _t as DeviceType, dt as BaseAddon, ht as DeviceFeature, i as BatteryStatusSchema, ot as streamQualityLabel, rt as snapshotCapability, ut as errMsg, x as bareAddonId } from "../../dist-CMb7aKS0.mjs";
1
+ import { At as nodePin, _t as DeviceType, dt as BaseAddon, ht as DeviceFeature, i as BatteryStatusSchema, ot as streamQualityLabel, rt as snapshotCapability, ut as errMsg, x as bareAddonId } from "../../dist-DqPyKwVB.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-DP3nHlNM.js");
6
+ const require_dist = require("../../dist-CIkGOAcz.js");
7
7
  let node_crypto = require("node:crypto");
8
8
  let node_fs = require("node:fs");
9
9
  node_fs = require_chunk.__toESM(node_fs);
@@ -1,4 +1,4 @@
1
- import { I as filesystemBrowseCapability, at as storageProviderCapability, dt as BaseAddon } from "../../dist-CMb7aKS0.mjs";
1
+ import { I as filesystemBrowseCapability, at as storageProviderCapability, dt as BaseAddon } from "../../dist-DqPyKwVB.mjs";
2
2
  import { randomUUID } from "node:crypto";
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-DP3nHlNM.js");
6
+ const require_dist = require("../../dist-CIkGOAcz.js");
7
7
  let node_crypto = require("node:crypto");
8
8
  let node_fs = require("node:fs");
9
9
  let node_module = require("node:module");
@@ -1,4 +1,4 @@
1
- import { D as decodeVectorBase64, E as dataStoreProviderCapability, Mt as parseJsonUnknown, ct as vectorDimFromBase64, dt as BaseAddon, lt as vectorStoreCapability, u as RUNTIME_DEFAULTS, ut as errMsg, x as bareAddonId, xt as asJsonObject } from "../../dist-CMb7aKS0.mjs";
1
+ import { D as decodeVectorBase64, E as dataStoreProviderCapability, Mt as parseJsonUnknown, ct as vectorDimFromBase64, dt as BaseAddon, lt as vectorStoreCapability, u as RUNTIME_DEFAULTS, ut as errMsg, x as bareAddonId, xt as asJsonObject } from "../../dist-DqPyKwVB.mjs";
2
2
  import { createRequire } from "node:module";
3
3
  import { randomUUID } from "node:crypto";
4
4
  import { statSync } 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-DP3nHlNM.js");
6
+ const require_dist = require("../../dist-CIkGOAcz.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 { dt as BaseAddon, it as storageCapability, jt as parseJsonObject, nt as settingsStoreCapability, p as StorageLocationTypeSchema } from "../../dist-CMb7aKS0.mjs";
1
+ import { dt as BaseAddon, it as storageCapability, jt as parseJsonObject, nt as settingsStoreCapability, p as StorageLocationTypeSchema } from "../../dist-DqPyKwVB.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-DP3nHlNM.js");
6
+ const require_dist = require("../../dist-CIkGOAcz.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 { Ot as hydrateSchema, dt as BaseAddon, ut as errMsg } from "../../dist-CMb7aKS0.mjs";
1
+ import { Ot as hydrateSchema, dt as BaseAddon, ut as errMsg } from "../../dist-DqPyKwVB.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-DP3nHlNM.js");
6
+ const require_dist = require("../../dist-CIkGOAcz.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 { G as logDestinationCapability, dt as BaseAddon } from "../../dist-CMb7aKS0.mjs";
1
+ import { G as logDestinationCapability, dt as BaseAddon } from "../../dist-DqPyKwVB.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";
@@ -15278,6 +15278,43 @@ var CameraRecordingStatusSchema = zod.z.object({
15278
15278
  storageBytes: zod.z.number()
15279
15279
  });
15280
15280
  /**
15281
+ * The stages of the status fan-out that issue a BOUNDED remote read, and can
15282
+ * therefore be cut short. Every other block (`assignment`, `decoder`, `motion`,
15283
+ * `audio`) is composed from orchestrator-local state and cannot time out.
15284
+ *
15285
+ * `switches` is the operator's per-camera function switches — the read behind
15286
+ * `switchedOff`, not a block of its own.
15287
+ */
15288
+ var CameraStatusStageSchema = zod.z.enum([
15289
+ "source",
15290
+ "broker",
15291
+ "detection",
15292
+ "recording",
15293
+ "switches"
15294
+ ]);
15295
+ /**
15296
+ * WHY a stage could not be trusted.
15297
+ *
15298
+ * - `timeout` — the stage never answered and the whole status call paid the
15299
+ * full per-stage bound for it. This is the one that used to be invisible.
15300
+ * - `error` — the source answered with a rejection.
15301
+ * - `partial` — the stage RETURNED, but from an incomplete set of sources: its
15302
+ * value is a floor, not a total. `switchedOff` derived from a partial switch
15303
+ * read can be empty while the operator has switches off.
15304
+ */
15305
+ var CameraStatusDegradationReasonSchema = zod.z.enum([
15306
+ "timeout",
15307
+ "error",
15308
+ "partial"
15309
+ ]);
15310
+ /** One stage of the fan-out that could NOT be read, and how long it cost. */
15311
+ var CameraStatusDegradationSchema = zod.z.object({
15312
+ stage: CameraStatusStageSchema,
15313
+ reason: CameraStatusDegradationReasonSchema,
15314
+ /** Wall-clock ms spent on the stage before it was abandoned. */
15315
+ elapsedMs: zod.z.number()
15316
+ });
15317
+ /**
15281
15318
  * Aggregated per-camera pipeline status — server-composed, single call.
15282
15319
  *
15283
15320
  * The `assignment` and `source` blocks are always present.
@@ -15307,9 +15344,28 @@ var CameraStatusSchema = zod.z.object({
15307
15344
  * differently — a quiet camera that looks identical to a dead one is the
15308
15345
  * silence-reads-as-never-happened trap this repo keeps paying for.
15309
15346
  *
15310
- * Empty when nothing is off. Never contains a switch no provider offers.
15347
+ * Empty when nothing is off, and never contains a switch no provider offers
15348
+ * — but an empty list is only a POSITIVE claim when `degraded` does not name
15349
+ * `'switches'`. When it does, the switch set could not be read and nothing
15350
+ * here may be rendered as "the operator turned nothing off": that is the
15351
+ * D62 failure (a camera we could not read painted as broken) in the very
15352
+ * field that exists to prevent it.
15311
15353
  */
15312
15354
  switchedOff: zod.z.array(CameraSwitchIdSchema).readonly(),
15355
+ /**
15356
+ * Stages of the bounded fan-out that were CUT SHORT — a timeout or a
15357
+ * rejection — and whose block is therefore `null` because we could not
15358
+ * READ it, not because there is nothing there.
15359
+ *
15360
+ * Without this, three different facts arrive as the same `null`: "the stage
15361
+ * timed out", "the stage failed", and "this camera legitimately has no
15362
+ * decoder / no recording". Every surface that draws a conclusion from a null
15363
+ * block (or from an empty `switchedOff`) must consult this first; a stage
15364
+ * named here supports no conclusion at all, only "unknown".
15365
+ *
15366
+ * Empty on a clean read — the overwhelmingly common case.
15367
+ */
15368
+ degraded: zod.z.array(CameraStatusDegradationSchema).readonly(),
15313
15369
  /** Unix timestamp (ms) when this snapshot was composed server-side. */
15314
15370
  fetchedAt: zod.z.number()
15315
15371
  });
@@ -15278,6 +15278,43 @@ var CameraRecordingStatusSchema = z.object({
15278
15278
  storageBytes: z.number()
15279
15279
  });
15280
15280
  /**
15281
+ * The stages of the status fan-out that issue a BOUNDED remote read, and can
15282
+ * therefore be cut short. Every other block (`assignment`, `decoder`, `motion`,
15283
+ * `audio`) is composed from orchestrator-local state and cannot time out.
15284
+ *
15285
+ * `switches` is the operator's per-camera function switches — the read behind
15286
+ * `switchedOff`, not a block of its own.
15287
+ */
15288
+ var CameraStatusStageSchema = z.enum([
15289
+ "source",
15290
+ "broker",
15291
+ "detection",
15292
+ "recording",
15293
+ "switches"
15294
+ ]);
15295
+ /**
15296
+ * WHY a stage could not be trusted.
15297
+ *
15298
+ * - `timeout` — the stage never answered and the whole status call paid the
15299
+ * full per-stage bound for it. This is the one that used to be invisible.
15300
+ * - `error` — the source answered with a rejection.
15301
+ * - `partial` — the stage RETURNED, but from an incomplete set of sources: its
15302
+ * value is a floor, not a total. `switchedOff` derived from a partial switch
15303
+ * read can be empty while the operator has switches off.
15304
+ */
15305
+ var CameraStatusDegradationReasonSchema = z.enum([
15306
+ "timeout",
15307
+ "error",
15308
+ "partial"
15309
+ ]);
15310
+ /** One stage of the fan-out that could NOT be read, and how long it cost. */
15311
+ var CameraStatusDegradationSchema = z.object({
15312
+ stage: CameraStatusStageSchema,
15313
+ reason: CameraStatusDegradationReasonSchema,
15314
+ /** Wall-clock ms spent on the stage before it was abandoned. */
15315
+ elapsedMs: z.number()
15316
+ });
15317
+ /**
15281
15318
  * Aggregated per-camera pipeline status — server-composed, single call.
15282
15319
  *
15283
15320
  * The `assignment` and `source` blocks are always present.
@@ -15307,9 +15344,28 @@ var CameraStatusSchema = z.object({
15307
15344
  * differently — a quiet camera that looks identical to a dead one is the
15308
15345
  * silence-reads-as-never-happened trap this repo keeps paying for.
15309
15346
  *
15310
- * Empty when nothing is off. Never contains a switch no provider offers.
15347
+ * Empty when nothing is off, and never contains a switch no provider offers
15348
+ * — but an empty list is only a POSITIVE claim when `degraded` does not name
15349
+ * `'switches'`. When it does, the switch set could not be read and nothing
15350
+ * here may be rendered as "the operator turned nothing off": that is the
15351
+ * D62 failure (a camera we could not read painted as broken) in the very
15352
+ * field that exists to prevent it.
15311
15353
  */
15312
15354
  switchedOff: z.array(CameraSwitchIdSchema).readonly(),
15355
+ /**
15356
+ * Stages of the bounded fan-out that were CUT SHORT — a timeout or a
15357
+ * rejection — and whose block is therefore `null` because we could not
15358
+ * READ it, not because there is nothing there.
15359
+ *
15360
+ * Without this, three different facts arrive as the same `null`: "the stage
15361
+ * timed out", "the stage failed", and "this camera legitimately has no
15362
+ * decoder / no recording". Every surface that draws a conclusion from a null
15363
+ * block (or from an empty `switchedOff`) must consult this first; a stage
15364
+ * named here supports no conclusion at all, only "unknown".
15365
+ *
15366
+ * Empty on a clean read — the overwhelmingly common case.
15367
+ */
15368
+ degraded: z.array(CameraStatusDegradationSchema).readonly(),
15313
15369
  /** Unix timestamp (ms) when this snapshot was composed server-side. */
15314
15370
  fetchedAt: z.number()
15315
15371
  });
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-DP3nHlNM.js");
3
+ const require_dist = require("./dist-CIkGOAcz.js");
4
4
  const require_model_download_service = require("./model-download-service-Caj1kaSi.js");
5
5
  const require_manifest_python_deps = require("./manifest-python-deps-BE6l8Y4W.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 { Ct as asString$1, Dt as expandCapMethods, F as extractNestedAddonId, Ft as scopeKey, H as kebabToCamel, K as logLevelAtMost, L as isArrayOutputSchema, Lt as EventCategory$1, Mt as parseJsonUnknown$1, Nt as readinessKey, Pt as resolveCapMount, R as isCollectionArrayMethod, St as asNumber, Tt as emitDownForOwnedCaps, U as lifecycleJobSchema, V as isVoidInput, Z as objectInputDeclaresAddonId, et as procedureAuthKey, ft as DATAPLANE_SECRET_HEADER$1, g as addonSettingsCapability, jt as parseJsonObject, l as METHOD_ACCESS_MAP, mt as DEVICE_STATUS_METHOD, pt as DEVICE_SETTINGS_CONTRIBUTION_METHODS, q as looseSchema, t as ALL_CAPABILITY_DEFINITIONS, u as RUNTIME_DEFAULTS, ut as errMsg$1, vt as ReadinessRegistry, wt as createEvent, xt as asJsonObject$1, yt as ReadinessTimeoutError, z as isObjectInput } from "./dist-CMb7aKS0.mjs";
2
+ import { Ct as asString$1, Dt as expandCapMethods, F as extractNestedAddonId, Ft as scopeKey, H as kebabToCamel, K as logLevelAtMost, L as isArrayOutputSchema, Lt as EventCategory$1, Mt as parseJsonUnknown$1, Nt as readinessKey, Pt as resolveCapMount, R as isCollectionArrayMethod, St as asNumber, Tt as emitDownForOwnedCaps, U as lifecycleJobSchema, V as isVoidInput, Z as objectInputDeclaresAddonId, et as procedureAuthKey, ft as DATAPLANE_SECRET_HEADER$1, g as addonSettingsCapability, jt as parseJsonObject, l as METHOD_ACCESS_MAP, mt as DEVICE_STATUS_METHOD, pt as DEVICE_SETTINGS_CONTRIBUTION_METHODS, q as looseSchema, t as ALL_CAPABILITY_DEFINITIONS, u as RUNTIME_DEFAULTS, ut as errMsg$1, vt as ReadinessRegistry, wt as createEvent, xt as asJsonObject$1, yt as ReadinessTimeoutError, z as isObjectInput } from "./dist-DqPyKwVB.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-CTBHzORJ.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-Dz1ryHIN.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.64",
3
+ "version": "1.2.65",
4
4
  "description": "Core addon for CamStack — builtins, pipeline, process management, auth, logging, events",
5
5
  "keywords": [
6
6
  "camstack",