@camstack/system 1.2.228 → 1.2.229

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 (57) hide show
  1. package/dist/addon-runner.js +1 -1
  2. package/dist/addon-runner.mjs +1 -1
  3. package/dist/addon-utils.js +1 -1
  4. package/dist/addon-utils.mjs +1 -1
  5. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.js +1 -1
  6. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.mjs +1 -1
  7. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.js +1 -1
  8. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.mjs +1 -1
  9. package/dist/builtins/alerts/alerts.addon.js +1 -1
  10. package/dist/builtins/alerts/alerts.addon.mjs +1 -1
  11. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.js +1 -1
  12. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.mjs +1 -1
  13. package/dist/builtins/console-logging/index.js +1 -1
  14. package/dist/builtins/console-logging/index.mjs +1 -1
  15. package/dist/builtins/core-blocks/core-blocks.addon.js +1 -1
  16. package/dist/builtins/core-blocks/core-blocks.addon.mjs +1 -1
  17. package/dist/builtins/device-manager/device-manager.addon.js +2 -2
  18. package/dist/builtins/device-manager/device-manager.addon.mjs +2 -2
  19. package/dist/builtins/doorbell/virtual-doorbell.addon.js +1 -1
  20. package/dist/builtins/doorbell/virtual-doorbell.addon.mjs +1 -1
  21. package/dist/builtins/hub-forwarder/index.js +1 -1
  22. package/dist/builtins/hub-forwarder/index.mjs +1 -1
  23. package/dist/builtins/liveness-monitor/liveness-monitor.addon.js +1 -1
  24. package/dist/builtins/liveness-monitor/liveness-monitor.addon.mjs +1 -1
  25. package/dist/builtins/local-auth/local-auth.addon.js +1 -1
  26. package/dist/builtins/local-auth/local-auth.addon.mjs +1 -1
  27. package/dist/builtins/local-network/local-network.addon.js +1 -1
  28. package/dist/builtins/local-network/local-network.addon.mjs +1 -1
  29. package/dist/builtins/loki-logging/index.js +1 -1
  30. package/dist/builtins/loki-logging/index.mjs +1 -1
  31. package/dist/builtins/native-metrics/native-metrics.addon.js +1 -1
  32. package/dist/builtins/native-metrics/native-metrics.addon.mjs +1 -1
  33. package/dist/builtins/platform-probe/index.js +1 -1
  34. package/dist/builtins/platform-probe/index.mjs +1 -1
  35. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.js +1 -1
  36. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.mjs +1 -1
  37. package/dist/builtins/snapshot/index.js +1 -1
  38. package/dist/builtins/snapshot/index.mjs +1 -1
  39. package/dist/builtins/sqlite-storage/filesystem-storage.addon.js +1 -1
  40. package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs +1 -1
  41. package/dist/builtins/sqlite-storage/sqlite-settings.addon.js +0 -0
  42. package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +0 -0
  43. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js +1 -1
  44. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs +1 -1
  45. package/dist/builtins/system-config/system-config.addon.js +1 -1
  46. package/dist/builtins/system-config/system-config.addon.mjs +1 -1
  47. package/dist/builtins/winston-logging/index.js +1 -1
  48. package/dist/builtins/winston-logging/index.mjs +1 -1
  49. package/dist/{custom-action-registry-mtS2EOEs.js → custom-action-registry-YD6rwIuz.js} +1 -1
  50. package/dist/{custom-action-registry-Bl_FtykP.mjs → custom-action-registry-zTQXMaNb.mjs} +1 -1
  51. package/dist/{dist-jOwC9aK1.mjs → dist-C0M6CBhV.mjs} +127 -5
  52. package/dist/{dist-u8F4ZyXi.js → dist-zr6q3Aad.js} +127 -5
  53. package/dist/index.js +2 -2
  54. package/dist/index.mjs +2 -2
  55. package/dist/{retired-settings-keys-BQr0X6st.js → retired-settings-keys-BqKPfC0_.js} +1 -1
  56. package/dist/{retired-settings-keys-Dcgpesdb.mjs → retired-settings-keys-DFwQTxAT.mjs} +1 -1
  57. package/package.json +1 -1
@@ -1,6 +1,6 @@
1
1
  const require_chunk = require("./chunk-Cek0wNdY.js");
2
2
  const require_manifest_system_deps = require("./manifest-system-deps-CrSP0Kkp.js");
3
- const require_custom_action_registry = require("./custom-action-registry-mtS2EOEs.js");
3
+ const require_custom_action_registry = require("./custom-action-registry-YD6rwIuz.js");
4
4
  let node_path = require("node:path");
5
5
  node_path = require_chunk.__toESM(node_path);
6
6
  let node_fs = require("node:fs");
@@ -1,5 +1,5 @@
1
1
  import { A as createUdsLoggerWithControl, It as RUNNER_RSS_BUDGET_ENV, L as LocalChildClient, Yt as startRunnerHeapWatch, a as createUdsAddonContext, bt as resolveAddonClass, it as setWorkerNativeCapsChangeListener, n as installManifestPythonDeps, nt as getWorkerNativeCapSnapshot, ot as validateProviderRegistrations, sn as emitHeapDiagnosticReport, t as installManifestSystemDeps, tt as getWorkerNativeCapProvider, yt as installManifestNativeDeps } from "./manifest-system-deps-BEj9Dpu1.mjs";
2
- import { t as CustomActionRegistry } from "./custom-action-registry-Bl_FtykP.mjs";
2
+ import { t as CustomActionRegistry } from "./custom-action-registry-zTQXMaNb.mjs";
3
3
  import { register } from "node:module";
4
4
  import * as path$1 from "node:path";
5
5
  import * as fs from "node:fs";
@@ -1,7 +1,7 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  require("./chunk-Cek0wNdY.js");
3
3
  const require_event_loop_stall_monitor = require("./event-loop-stall-monitor-CAsHdMwP.js");
4
- const require_custom_action_registry = require("./custom-action-registry-mtS2EOEs.js");
4
+ const require_custom_action_registry = require("./custom-action-registry-YD6rwIuz.js");
5
5
  exports.CustomActionRegistry = require_custom_action_registry.CustomActionRegistry;
6
6
  exports.ModelDownloadService = require_event_loop_stall_monitor.ModelDownloadService;
7
7
  exports.STALL_REPORT_MS = require_event_loop_stall_monitor.STALL_REPORT_MS;
@@ -1,3 +1,3 @@
1
1
  import { a as createFileDataPlaneHandler, c as parseRangeHeader, d as ModelDownloadService, f as collectModelFiles, g as ensureModel, i as startEventLoopStallMonitor, m as downloadFile, n as STALL_TICK_MS, o as contentTypeFor, p as deleteModelFromDisk, r as attributeStall, t as STALL_REPORT_MS, v as getModelFilePath, y as isModelDownloaded } from "./event-loop-stall-monitor-GPrVvx14.mjs";
2
- import { t as CustomActionRegistry } from "./custom-action-registry-Bl_FtykP.mjs";
2
+ import { t as CustomActionRegistry } from "./custom-action-registry-zTQXMaNb.mjs";
3
3
  export { CustomActionRegistry, ModelDownloadService, STALL_REPORT_MS, STALL_TICK_MS, attributeStall, collectModelFiles, contentTypeFor, createFileDataPlaneHandler, deleteModelFromDisk, downloadFile, ensureModel, getModelFilePath, isModelDownloaded, parseRangeHeader, startEventLoopStallMonitor };
@@ -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-u8F4ZyXi.js");
6
+ const require_dist = require("../../dist-zr6q3Aad.js");
7
7
  const require_settle_sources = require("../../settle-sources-Bhsy57y-.js");
8
8
  let node_crypto = require("node:crypto");
9
9
  let node_path = require("node:path");
@@ -1,4 +1,4 @@
1
- import { Jt as errMsg, Yt as BaseAddon, k as addonPagesCapability, xn as EventCategory } from "../../dist-jOwC9aK1.mjs";
1
+ import { Jt as errMsg, Yt as BaseAddon, k as addonPagesCapability, xn as EventCategory } from "../../dist-C0M6CBhV.mjs";
2
2
  import { t as settleSourcesWithTimeout } from "../../settle-sources-CDtNC8ub.mjs";
3
3
  import { createHash, randomUUID } from "node:crypto";
4
4
  import * as path$1 from "node:path";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-u8F4ZyXi.js");
6
+ const require_dist = require("../../dist-zr6q3Aad.js");
7
7
  const require_settle_sources = require("../../settle-sources-Bhsy57y-.js");
8
8
  let node_crypto = require("node:crypto");
9
9
  let node_path = require("node:path");
@@ -1,4 +1,4 @@
1
- import { Jt as errMsg, Yt as BaseAddon, j as addonWidgetsCapability, xn as EventCategory } from "../../dist-jOwC9aK1.mjs";
1
+ import { Jt as errMsg, Yt as BaseAddon, j as addonWidgetsCapability, xn as EventCategory } from "../../dist-C0M6CBhV.mjs";
2
2
  import { t as settleSourcesWithTimeout } from "../../settle-sources-CDtNC8ub.mjs";
3
3
  import { createHash, randomUUID } from "node:crypto";
4
4
  import * as path$1 from "node:path";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-u8F4ZyXi.js");
6
+ const require_dist = require("../../dist-zr6q3Aad.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 { Jt as errMsg, M as alertsCapability, Yt as BaseAddon, cn as createEvent, n as AlertSchema, xn as EventCategory } from "../../dist-jOwC9aK1.mjs";
1
+ import { Jt as errMsg, M as alertsCapability, Yt as BaseAddon, cn as createEvent, n as AlertSchema, xn as EventCategory } from "../../dist-C0M6CBhV.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-u8F4ZyXi.js");
6
+ const require_dist = require("../../dist-zr6q3Aad.js");
7
7
  let node_crypto = require("node:crypto");
8
8
  let buffer = require("buffer");
9
9
  let node_fs_promises = require("node:fs/promises");
@@ -1,4 +1,4 @@
1
- import { P as backupCapability, Vt as storageOccupancyCapability, Yt as BaseAddon, bt as mayWriteToLocation, xn as EventCategory } from "../../dist-jOwC9aK1.mjs";
1
+ import { P as backupCapability, Vt as storageOccupancyCapability, Yt as BaseAddon, bt as mayWriteToLocation, xn as EventCategory } from "../../dist-C0M6CBhV.mjs";
2
2
  import { randomBytes, randomUUID } from "node:crypto";
3
3
  import { Buffer as Buffer$1 } from "buffer";
4
4
  import * as fsp from "node:fs/promises";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-u8F4ZyXi.js");
6
+ const require_dist = require("../../dist-zr6q3Aad.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 { Yt as BaseAddon, gt as logDestinationCapability } from "../../dist-jOwC9aK1.mjs";
1
+ import { Yt as BaseAddon, gt as logDestinationCapability } from "../../dist-C0M6CBhV.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-u8F4ZyXi.js");
3
+ const require_dist = require("../../dist-zr6q3Aad.js");
4
4
  let node_crypto = require("node:crypto");
5
5
  let node_fs_promises = require("node:fs/promises");
6
6
  node_fs_promises = require_chunk.__toESM(node_fs_promises);
@@ -1,4 +1,4 @@
1
- import { B as coreBlockIdFromAddonId, Jt as errMsg, V as coreBlocksCapability, Yt as BaseAddon, c as CORE_BLOCK_ADDON_PREFIX, d as DeclaredDevices, l as CoreBlockSchema, s as CORE_BLOCKS_ADDON_ID, z as coreBlockAddonId } from "../../dist-jOwC9aK1.mjs";
1
+ import { B as coreBlockIdFromAddonId, Jt as errMsg, V as coreBlocksCapability, Yt as BaseAddon, c as CORE_BLOCK_ADDON_PREFIX, d as DeclaredDevices, l as CoreBlockSchema, s as CORE_BLOCKS_ADDON_ID, z as coreBlockAddonId } from "../../dist-C0M6CBhV.mjs";
2
2
  import { randomUUID } from "node:crypto";
3
3
  import * as fs from "node:fs/promises";
4
4
  import * as path$1 from "node:path";
@@ -3,8 +3,8 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-u8F4ZyXi.js");
7
- const require_retired_settings_keys = require("../../retired-settings-keys-BQr0X6st.js");
6
+ const require_dist = require("../../dist-zr6q3Aad.js");
7
+ const require_retired_settings_keys = require("../../retired-settings-keys-BqKPfC0_.js");
8
8
  let node_crypto = require("node:crypto");
9
9
  let _camstack_types_node = require("@camstack/types/node");
10
10
  //#region src/builtins/device-manager/adoption-job-engine.ts
@@ -1,5 +1,5 @@
1
- import { $t as DeviceFeature, At as resolveContainerPrimaryChild, Ct as normalizeUnit, J as deviceStatusCapability, Jt as errMsg, K as deviceManagerCapability, L as buildStreamParamsConfigSchema, Nt as runtimeStatePolicyFor, Q as enumerateSchemaFields, S as STREAM_PROFILE_META, Tt as parseStreamParamsFormPatch, Yt as BaseAddon, Z as enumerateItemArrayFields, a as CAMERA_SWITCH_ORDER, bn as sleep, en as DeviceRole, f as DeviceStatusSchema, in as WELL_KNOWN_TAB_MAP, o as CAP_NAMES_WITH_STATUS, pn as isDeviceConfigCap, q as deviceStateCapability, t as ALL_CAPABILITY_DEFINITIONS, tn as DeviceType, xn as EventCategory } from "../../dist-jOwC9aK1.mjs";
2
- import { n as purgeRetiredSettingsRows } from "../../retired-settings-keys-Dcgpesdb.mjs";
1
+ import { $t as DeviceFeature, At as resolveContainerPrimaryChild, Ct as normalizeUnit, J as deviceStatusCapability, Jt as errMsg, K as deviceManagerCapability, L as buildStreamParamsConfigSchema, Nt as runtimeStatePolicyFor, Q as enumerateSchemaFields, S as STREAM_PROFILE_META, Tt as parseStreamParamsFormPatch, Yt as BaseAddon, Z as enumerateItemArrayFields, a as CAMERA_SWITCH_ORDER, bn as sleep, en as DeviceRole, f as DeviceStatusSchema, in as WELL_KNOWN_TAB_MAP, o as CAP_NAMES_WITH_STATUS, pn as isDeviceConfigCap, q as deviceStateCapability, t as ALL_CAPABILITY_DEFINITIONS, tn as DeviceType, xn as EventCategory } from "../../dist-C0M6CBhV.mjs";
2
+ import { n as purgeRetiredSettingsRows } from "../../retired-settings-keys-DFwQTxAT.mjs";
3
3
  import { randomUUID } from "node:crypto";
4
4
  import { canonicalDeviceFingerprint } from "@camstack/types/node";
5
5
  //#region src/builtins/device-manager/adoption-job-engine.ts
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-u8F4ZyXi.js");
6
+ const require_dist = require("../../dist-zr6q3Aad.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 { $ as evaluateSensorEdge, F as bareAddonId, Jt as errMsg, Y as doorbellCapability, Yt as BaseAddon, b as SOURCE_DEVICE_TYPES, cn as createEvent, lt as isSameAddonId, tn as DeviceType, ut as isSourceCap, xn as EventCategory, y as SOURCE_CAPS } from "../../dist-jOwC9aK1.mjs";
1
+ import { $ as evaluateSensorEdge, F as bareAddonId, Jt as errMsg, Y as doorbellCapability, Yt as BaseAddon, b as SOURCE_DEVICE_TYPES, cn as createEvent, lt as isSameAddonId, tn as DeviceType, ut as isSourceCap, xn as EventCategory, y as SOURCE_CAPS } from "../../dist-C0M6CBhV.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-u8F4ZyXi.js");
6
+ const require_dist = require("../../dist-zr6q3Aad.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 { Yt as BaseAddon, gt as logDestinationCapability } from "../../dist-jOwC9aK1.mjs";
1
+ import { Yt as BaseAddon, gt as logDestinationCapability } from "../../dist-C0M6CBhV.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-u8F4ZyXi.js");
3
+ const require_dist = require("../../dist-zr6q3Aad.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 { Jt as errMsg, Yt as BaseAddon, cn as createEvent, v as RecordingStatusSchema, xn as EventCategory } from "../../dist-jOwC9aK1.mjs";
1
+ import { Jt as errMsg, Yt as BaseAddon, cn as createEvent, v as RecordingStatusSchema, xn as EventCategory } from "../../dist-C0M6CBhV.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-u8F4ZyXi.js");
6
+ const require_dist = require("../../dist-zr6q3Aad.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 { C as ScopedTokenSchema, N as authProviderCapability, O as UserRecordSchema, Wt as userManagementCapability, Yt as BaseAddon, r as ApiKeyRecordSchema } from "../../dist-jOwC9aK1.mjs";
2
+ import { C as ScopedTokenSchema, N as authProviderCapability, O as UserRecordSchema, Wt as userManagementCapability, Yt as BaseAddon, r as ApiKeyRecordSchema } from "../../dist-C0M6CBhV.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-u8F4ZyXi.js");
3
+ const require_dist = require("../../dist-zr6q3Aad.js");
4
4
  const require_tls = require("../../tls-BFs4PzoW.js");
5
5
  let node_fs_promises = require("node:fs/promises");
6
6
  let node_path = require("node:path");
@@ -1,4 +1,4 @@
1
- import { Yt as BaseAddon, ht as localNetworkCapability, xn as EventCategory } from "../../dist-jOwC9aK1.mjs";
1
+ import { Yt as BaseAddon, ht as localNetworkCapability, xn as EventCategory } from "../../dist-C0M6CBhV.mjs";
2
2
  import { S as readLanHttpState, _ as DEFAULT_LAN_HTTP_PORT, a as writeTlsMode, i as writeExtraSans, l as reissueTlsLeaf, n as readTlsAccessStatus, o as validateUploadedTls, r as readTlsMode, s as ensureTlsCert, t as readExtraSans, y as applyLanHttp } from "../../tls-2xbgg78V.mjs";
3
3
  import { mkdir, writeFile } from "node:fs/promises";
4
4
  import { join } from "node:path";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-u8F4ZyXi.js");
6
+ const require_dist = require("../../dist-zr6q3Aad.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 { Yt as BaseAddon, gt as logDestinationCapability } from "../../dist-jOwC9aK1.mjs";
1
+ import { Yt as BaseAddon, gt as logDestinationCapability } from "../../dist-C0M6CBhV.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-u8F4ZyXi.js");
6
+ const require_dist = require("../../dist-zr6q3Aad.js");
7
7
  let node_fs_promises = require("node:fs/promises");
8
8
  let node_fs = require("node:fs");
9
9
  node_fs = require_chunk.__toESM(node_fs);
@@ -1,4 +1,4 @@
1
- import { Jt as errMsg, Ot as reducePoints, Yt as BaseAddon, cn as createEvent, kt as resolveBucketMs, rt as foldSnapshotByFunction, xn as EventCategory, xt as metricsProviderCapability } from "../../dist-jOwC9aK1.mjs";
1
+ import { Jt as errMsg, Ot as reducePoints, Yt as BaseAddon, cn as createEvent, kt as resolveBucketMs, rt as foldSnapshotByFunction, xn as EventCategory, xt as metricsProviderCapability } from "../../dist-C0M6CBhV.mjs";
2
2
  import { access, readFile, readdir } from "node:fs/promises";
3
3
  import * as fs from "node:fs";
4
4
  import { constants, readFileSync } from "node:fs";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-u8F4ZyXi.js");
6
+ const require_dist = require("../../dist-zr6q3Aad.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 { Et as platformProbeCapability, It as scoreRuntimes, Jt as errMsg, X as enumerateInferenceDevices, Yt as BaseAddon, un as emitReadiness, xn as EventCategory } from "../../dist-jOwC9aK1.mjs";
2
+ import { Et as platformProbeCapability, It as scoreRuntimes, Jt as errMsg, X as enumerateInferenceDevices, Yt as BaseAddon, un as emitReadiness, xn as EventCategory } from "../../dist-C0M6CBhV.mjs";
3
3
  import * as fs from "node:fs";
4
4
  import { execFile } from "node:child_process";
5
5
  import * as os from "node:os";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-u8F4ZyXi.js");
6
+ const require_dist = require("../../dist-zr6q3Aad.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 { Yt as BaseAddon, xn as EventCategory } from "../../dist-jOwC9aK1.mjs";
1
+ import { Yt as BaseAddon, xn as EventCategory } from "../../dist-C0M6CBhV.mjs";
2
2
  //#region src/builtins/remote-access-orchestrator/enabled-providers-reconcile.ts
3
3
  /**
4
4
  * Reconcile the durable `enabledProviders` set against authoritative
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-u8F4ZyXi.js");
6
+ const require_dist = require("../../dist-zr6q3Aad.js");
7
7
  let zod = require("zod");
8
8
  let node_crypto = require("node:crypto");
9
9
  let _camstack_types_node = require("@camstack/types/node");
@@ -1,4 +1,4 @@
1
- import { $t as DeviceFeature, F as bareAddonId, I as batteryCapability, Jt as errMsg, Rt as snapshotCapability, Ut as streamQualityLabel, W as deriveBatteryPresence, Yt as BaseAddon, i as BatteryStatusSchema, mn as nodePin, tn as DeviceType, xn as EventCategory } from "../../dist-jOwC9aK1.mjs";
1
+ import { $t as DeviceFeature, F as bareAddonId, I as batteryCapability, Jt as errMsg, Rt as snapshotCapability, Ut as streamQualityLabel, W as deriveBatteryPresence, Yt as BaseAddon, i as BatteryStatusSchema, mn as nodePin, tn as DeviceType, xn as EventCategory } from "../../dist-C0M6CBhV.mjs";
2
2
  import { z } from "zod";
3
3
  import { randomUUID } from "node:crypto";
4
4
  import { signExpiringUrl, verifyExpiringUrl } from "@camstack/types/node";
@@ -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-u8F4ZyXi.js");
6
+ const require_dist = require("../../dist-zr6q3Aad.js");
7
7
  let node_crypto = require("node:crypto");
8
8
  let node_fs_promises = require("node:fs/promises");
9
9
  let node_path = require("node:path");
@@ -1,4 +1,4 @@
1
- import { Ht as storageProviderCapability, Yt as BaseAddon, nt as filesystemBrowseCapability } from "../../dist-jOwC9aK1.mjs";
1
+ import { Ht as storageProviderCapability, Yt as BaseAddon, nt as filesystemBrowseCapability } from "../../dist-C0M6CBhV.mjs";
2
2
  import { randomUUID } from "node:crypto";
3
3
  import { mkdir, readdir, realpath, statfs } from "node:fs/promises";
4
4
  import * as path$1 from "node:path";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-u8F4ZyXi.js");
6
+ const require_dist = require("../../dist-zr6q3Aad.js");
7
7
  const require_hub_cap_forward = require("../../hub-cap-forward-DmHNjbB0.js");
8
8
  let zod = require("zod");
9
9
  let node_crypto = require("node:crypto");
@@ -1,4 +1,4 @@
1
- import { Bt as storageMigrationCapability, D as StorageMigrationJobSchema, E as StorageLocationTypeSchema, Lt as settingsStoreCapability, R as collectSecretConfigKeys, St as modeMayWrite, T as StorageLocationModeSchema, Yt as BaseAddon, bt as mayWriteToLocation, et as evictionPolicyOfLocation, g as REDACTED_SECRET, hn as parseJsonObject, it as gbToBytes, jt as resolveLocationMode, m as LegacyStorageLocationDefaultSchema, pt as legacyModeOf, qt as withLocationMode, st as isLocationEnabled, w as StorageCleanupJobSchema, xn as EventCategory, yt as mayReadLocation, zt as storageCapability } from "../../dist-jOwC9aK1.mjs";
1
+ import { Bt as storageMigrationCapability, D as StorageMigrationJobSchema, E as StorageLocationTypeSchema, Lt as settingsStoreCapability, R as collectSecretConfigKeys, St as modeMayWrite, T as StorageLocationModeSchema, Yt as BaseAddon, bt as mayWriteToLocation, et as evictionPolicyOfLocation, g as REDACTED_SECRET, hn as parseJsonObject, it as gbToBytes, jt as resolveLocationMode, m as LegacyStorageLocationDefaultSchema, pt as legacyModeOf, qt as withLocationMode, st as isLocationEnabled, w as StorageCleanupJobSchema, xn as EventCategory, yt as mayReadLocation, zt as storageCapability } from "../../dist-C0M6CBhV.mjs";
2
2
  import { t as HUB_CAP_FWD_ACTION } from "../../hub-cap-forward-BdT320dq.mjs";
3
3
  import { z } from "zod";
4
4
  import { randomUUID } from "node:crypto";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-u8F4ZyXi.js");
6
+ const require_dist = require("../../dist-zr6q3Aad.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 { Jt as errMsg, Yt as BaseAddon, fn as hydrateSchema } from "../../dist-jOwC9aK1.mjs";
1
+ import { Jt as errMsg, Yt as BaseAddon, fn as hydrateSchema } from "../../dist-C0M6CBhV.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-u8F4ZyXi.js");
6
+ const require_dist = require("../../dist-zr6q3Aad.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 { Yt as BaseAddon, gt as logDestinationCapability } from "../../dist-jOwC9aK1.mjs";
1
+ import { Yt as BaseAddon, gt as logDestinationCapability } from "../../dist-C0M6CBhV.mjs";
2
2
  import { t as formatLogLine } from "../../formatter-B7qW8bPJ.mjs";
3
3
  import * as path$1 from "node:path";
4
4
  import path from "node:path";
@@ -1,4 +1,4 @@
1
- const require_dist = require("./dist-u8F4ZyXi.js");
1
+ const require_dist = require("./dist-zr6q3Aad.js");
2
2
  //#region src/kernel/custom-action-registry.ts
3
3
  /**
4
4
  * CustomActionRegistry — per-process registry of addon custom actions.
@@ -1,4 +1,4 @@
1
- import { G as describeCustomActions } from "./dist-jOwC9aK1.mjs";
1
+ import { G as describeCustomActions } from "./dist-C0M6CBhV.mjs";
2
2
  //#region src/kernel/custom-action-registry.ts
3
3
  /**
4
4
  * CustomActionRegistry — per-process registry of addon custom actions.
@@ -676,7 +676,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
676
676
  return EventCategory;
677
677
  }({});
678
678
  //#endregion
679
- //#region ../types/dist/sleep-CnLyvg3w.mjs
679
+ //#region ../types/dist/sleep-DBKu2-U5.mjs
680
680
  /**
681
681
  * The audio chunk plane's byte format, and the ONE expansion from a coded
682
682
  * window to float samples (D455).
@@ -19249,13 +19249,119 @@ var SummariesQueryInput = z.object({
19249
19249
  deviceIds: z.array(z.number()).min(1),
19250
19250
  since: z.number().optional(),
19251
19251
  until: z.number().optional(),
19252
- limit: z.number().int().min(1).max(200).default(50)
19252
+ limit: z.number().int().min(1).max(200).default(50),
19253
+ /** The same member-wise filter {@link listRecentSummaries} takes — one
19254
+ * meaning of "dog" on every summary surface. */
19255
+ classes: z.array(z.string().min(1).max(60)).max(40).optional()
19256
+ });
19257
+ /**
19258
+ * One member of a group, as a reader needs it.
19259
+ *
19260
+ * The class and the role travel WITH the id because every consumer that shows
19261
+ * a group has to say what it was made of — "two people and a dog" — and asking
19262
+ * `getTrack` per member to find that out turns one card into `memberCount`
19263
+ * round trips. The member row already holds both (they are written at the
19264
+ * join), so this costs the reader nothing.
19265
+ */
19266
+ var SummaryMemberSchema = z.object({
19267
+ trackId: z.string(),
19268
+ /**
19269
+ * The track's class at the time it JOINED, or `null` when it was unresolved
19270
+ * and the track no longer exists to fill it.
19271
+ *
19272
+ * The join, not the latest opinion: class voting can re-decide a track's
19273
+ * class afterwards, and a group's composition is the history of who came
19274
+ * together. A consumer counts these to badge a thumbnail — "two people and a
19275
+ * dog" — rather than being handed a second, denormalised tally that would
19276
+ * drift from the members it claims to describe.
19277
+ */
19278
+ className: z.string().nullable(),
19279
+ /** `primary` is the one member that carries the group's identity. */
19280
+ role: z.enum([
19281
+ "primary",
19282
+ "sibling",
19283
+ "child"
19284
+ ]).nullable(),
19285
+ joinedAt: z.number(),
19286
+ /** Tier 1 — the sub-class (`dog`, `van`), resolved from the member's track
19287
+ * at read time. Absent when nothing resolved, never an empty string. */
19288
+ label: z.string().optional(),
19289
+ /** Tier 2 — the instance: a person's name, a plate. Absent when the pipeline
19290
+ * recognised nobody, and absent for a member whose track has been pruned —
19291
+ * a thumbnail that names the wrong person is worse than one naming nobody. */
19292
+ subLabel: z.string().optional()
19253
19293
  });
19254
- var SummariesPageSchema = z.object({ summaries: z.array(SummarySchema).readonly() });
19255
19294
  var SummaryDetailSchema = z.object({
19256
19295
  summary: SummarySchema,
19257
- /** Member track ids, in absorption order. */
19258
- trackIds: z.array(z.string()).readonly()
19296
+ /** Members in absorption order, oldest join first. */
19297
+ members: z.array(SummaryMemberSchema).readonly()
19298
+ });
19299
+ /**
19300
+ * What a LIST of groups carries: the envelope plus what it is MADE OF.
19301
+ *
19302
+ * Coarse on purpose — the operator's rule is "only the rough data on the list,
19303
+ * we extend when we notice we need more". Enough to draw the card ("two people
19304
+ * and a dog") and no more. The MEMBERS, their names and the per-member links
19305
+ * are on {@link getSummary}: shipping every member of every group so a client
19306
+ * can count them turns a page of two hundred groups into a thousand records to
19307
+ * draw two hundred badges.
19308
+ */
19309
+ var SummaryListItemSchema = z.object({
19310
+ summary: SummarySchema,
19311
+ /** Class counts, most numerous first; `className: null` is a member whose
19312
+ * class never resolved, counted so the counts add up to `memberCount`. */
19313
+ classes: z.array(z.object({
19314
+ className: z.string().nullable(),
19315
+ count: z.number().int().positive()
19316
+ })).readonly()
19317
+ });
19318
+ var SummariesPageSchema = z.object({ summaries: z.array(SummaryListItemSchema).readonly() });
19319
+ /**
19320
+ * The paged feed, deliberately the SAME shape as {@link RecentTracksQueryInput}.
19321
+ *
19322
+ * The reel on the cameras page and the Events gallery both ride a cursor, so a
19323
+ * summaries feed that could only answer "the last N for these cameras"
19324
+ * (`listSummaries`) would make groups available in the timeline and nowhere
19325
+ * else. Two feeds with different ordering contracts would be two ideas of what
19326
+ * "newest" means, on one screen.
19327
+ */
19328
+ var RecentSummariesQueryInput = z.object({
19329
+ /** Devices to merge. An empty array yields an empty page. */
19330
+ deviceIds: z.array(z.number()),
19331
+ /** Window lower bound on `lastActiveAt` (inclusive). */
19332
+ since: z.number().optional(),
19333
+ /** Window upper bound on `lastActiveAt` (inclusive). */
19334
+ until: z.number().optional(),
19335
+ limit: z.number().int().min(1).max(500).default(100),
19336
+ /** Opaque continuation cursor from a previous page's `nextCursor`. */
19337
+ cursor: z.string().optional(),
19338
+ /**
19339
+ * Restrict to these classes — THE SAME FIELD `listRecentTracks` takes, and
19340
+ * deliberately the same name: the events filter tree emits one list of ticked
19341
+ * taxonomy nodes, and a summaries feed that called it something else would
19342
+ * make the operator's one filter component produce two shapes.
19343
+ *
19344
+ * A question about the MEMBERS: a group matches when ANY of them does. "Show
19345
+ * me the arrivals with a dog" has to return the group of four people who had
19346
+ * one with them; a filter on the group's own fields could only ever answer
19347
+ * about its primary.
19348
+ *
19349
+ * Matched against all THREE tiers of a member — the class (`animal`), the
19350
+ * sub-class (`dog`) and the instance (a name, a plate) — because which tier a
19351
+ * ticked node lives on is the taxonomy's business, not the caller's. `dog` is
19352
+ * an event kind in the tree and a tier-1 label on an `animal` track; a filter
19353
+ * that read only the class would answer "animal" and never "dog".
19354
+ *
19355
+ * ABSENT or EMPTY means no filter — absent is not a selection of none.
19356
+ */
19357
+ classes: z.array(z.string().min(1).max(60)).max(40).optional()
19358
+ });
19359
+ var RecentSummariesPageSchema = z.object({
19360
+ /** Ordered by (`lastActiveAt` DESC, id DESC). Same light item as
19361
+ * {@link listSummaries} — one list shape, so a card renders the same
19362
+ * whichever feed drew it. */
19363
+ summaries: z.array(SummaryListItemSchema).readonly(),
19364
+ nextCursor: z.string().nullable()
19259
19365
  });
19260
19366
  var RecentTracksPageSchema = z.object({
19261
19367
  /** Merged page, ordered by (`lastSeen` DESC, `trackId` DESC). */
@@ -19698,6 +19804,11 @@ var pipelineAnalyticsCapability = {
19698
19804
  listRecentTracks: method(RecentTracksQueryInput, RecentTracksPageSchema),
19699
19805
  /** Newest first by `openedAt`, for a camera set, inside an optional window. */
19700
19806
  listSummaries: method(SummariesQueryInput, SummariesPageSchema),
19807
+ /**
19808
+ * The PAGED feed — the reel and the Events gallery. Same cursor contract as
19809
+ * {@link listRecentTracks}, so one screen cannot hold two ideas of newest.
19810
+ */
19811
+ listRecentSummaries: method(RecentSummariesQueryInput, RecentSummariesPageSchema),
19701
19812
  /** One summary with its member track ids; `null` for an id nobody wrote. */
19702
19813
  getSummary: method(z.object({ id: z.string() }), SummaryDetailSchema.nullable()),
19703
19814
  clearTracks: method(z.object({ deviceId: z.number() }), z.void(), {
@@ -40316,6 +40427,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
40316
40427
  addonId: null,
40317
40428
  access: "view"
40318
40429
  },
40430
+ "pipelineAnalytics.listRecentSummaries": {
40431
+ capName: "pipeline-analytics",
40432
+ capScope: "device",
40433
+ addonId: null,
40434
+ access: "view"
40435
+ },
40319
40436
  "pipelineAnalytics.listRecentTracks": {
40320
40437
  capName: "pipeline-analytics",
40321
40438
  capScope: "device",
@@ -44143,6 +44260,11 @@ Object.freeze({
44143
44260
  form: "single",
44144
44261
  optional: true
44145
44262
  }],
44263
+ "pipelineAnalytics.listRecentSummaries": [{
44264
+ name: "deviceIds",
44265
+ form: "array",
44266
+ optional: false
44267
+ }],
44146
44268
  "pipelineAnalytics.listRecentTracks": [{
44147
44269
  name: "deviceIds",
44148
44270
  form: "array",
@@ -676,7 +676,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
676
676
  return EventCategory;
677
677
  }({});
678
678
  //#endregion
679
- //#region ../types/dist/sleep-CnLyvg3w.mjs
679
+ //#region ../types/dist/sleep-DBKu2-U5.mjs
680
680
  /**
681
681
  * The audio chunk plane's byte format, and the ONE expansion from a coded
682
682
  * window to float samples (D455).
@@ -19249,13 +19249,119 @@ var SummariesQueryInput = zod.z.object({
19249
19249
  deviceIds: zod.z.array(zod.z.number()).min(1),
19250
19250
  since: zod.z.number().optional(),
19251
19251
  until: zod.z.number().optional(),
19252
- limit: zod.z.number().int().min(1).max(200).default(50)
19252
+ limit: zod.z.number().int().min(1).max(200).default(50),
19253
+ /** The same member-wise filter {@link listRecentSummaries} takes — one
19254
+ * meaning of "dog" on every summary surface. */
19255
+ classes: zod.z.array(zod.z.string().min(1).max(60)).max(40).optional()
19256
+ });
19257
+ /**
19258
+ * One member of a group, as a reader needs it.
19259
+ *
19260
+ * The class and the role travel WITH the id because every consumer that shows
19261
+ * a group has to say what it was made of — "two people and a dog" — and asking
19262
+ * `getTrack` per member to find that out turns one card into `memberCount`
19263
+ * round trips. The member row already holds both (they are written at the
19264
+ * join), so this costs the reader nothing.
19265
+ */
19266
+ var SummaryMemberSchema = zod.z.object({
19267
+ trackId: zod.z.string(),
19268
+ /**
19269
+ * The track's class at the time it JOINED, or `null` when it was unresolved
19270
+ * and the track no longer exists to fill it.
19271
+ *
19272
+ * The join, not the latest opinion: class voting can re-decide a track's
19273
+ * class afterwards, and a group's composition is the history of who came
19274
+ * together. A consumer counts these to badge a thumbnail — "two people and a
19275
+ * dog" — rather than being handed a second, denormalised tally that would
19276
+ * drift from the members it claims to describe.
19277
+ */
19278
+ className: zod.z.string().nullable(),
19279
+ /** `primary` is the one member that carries the group's identity. */
19280
+ role: zod.z.enum([
19281
+ "primary",
19282
+ "sibling",
19283
+ "child"
19284
+ ]).nullable(),
19285
+ joinedAt: zod.z.number(),
19286
+ /** Tier 1 — the sub-class (`dog`, `van`), resolved from the member's track
19287
+ * at read time. Absent when nothing resolved, never an empty string. */
19288
+ label: zod.z.string().optional(),
19289
+ /** Tier 2 — the instance: a person's name, a plate. Absent when the pipeline
19290
+ * recognised nobody, and absent for a member whose track has been pruned —
19291
+ * a thumbnail that names the wrong person is worse than one naming nobody. */
19292
+ subLabel: zod.z.string().optional()
19253
19293
  });
19254
- var SummariesPageSchema = zod.z.object({ summaries: zod.z.array(SummarySchema).readonly() });
19255
19294
  var SummaryDetailSchema = zod.z.object({
19256
19295
  summary: SummarySchema,
19257
- /** Member track ids, in absorption order. */
19258
- trackIds: zod.z.array(zod.z.string()).readonly()
19296
+ /** Members in absorption order, oldest join first. */
19297
+ members: zod.z.array(SummaryMemberSchema).readonly()
19298
+ });
19299
+ /**
19300
+ * What a LIST of groups carries: the envelope plus what it is MADE OF.
19301
+ *
19302
+ * Coarse on purpose — the operator's rule is "only the rough data on the list,
19303
+ * we extend when we notice we need more". Enough to draw the card ("two people
19304
+ * and a dog") and no more. The MEMBERS, their names and the per-member links
19305
+ * are on {@link getSummary}: shipping every member of every group so a client
19306
+ * can count them turns a page of two hundred groups into a thousand records to
19307
+ * draw two hundred badges.
19308
+ */
19309
+ var SummaryListItemSchema = zod.z.object({
19310
+ summary: SummarySchema,
19311
+ /** Class counts, most numerous first; `className: null` is a member whose
19312
+ * class never resolved, counted so the counts add up to `memberCount`. */
19313
+ classes: zod.z.array(zod.z.object({
19314
+ className: zod.z.string().nullable(),
19315
+ count: zod.z.number().int().positive()
19316
+ })).readonly()
19317
+ });
19318
+ var SummariesPageSchema = zod.z.object({ summaries: zod.z.array(SummaryListItemSchema).readonly() });
19319
+ /**
19320
+ * The paged feed, deliberately the SAME shape as {@link RecentTracksQueryInput}.
19321
+ *
19322
+ * The reel on the cameras page and the Events gallery both ride a cursor, so a
19323
+ * summaries feed that could only answer "the last N for these cameras"
19324
+ * (`listSummaries`) would make groups available in the timeline and nowhere
19325
+ * else. Two feeds with different ordering contracts would be two ideas of what
19326
+ * "newest" means, on one screen.
19327
+ */
19328
+ var RecentSummariesQueryInput = zod.z.object({
19329
+ /** Devices to merge. An empty array yields an empty page. */
19330
+ deviceIds: zod.z.array(zod.z.number()),
19331
+ /** Window lower bound on `lastActiveAt` (inclusive). */
19332
+ since: zod.z.number().optional(),
19333
+ /** Window upper bound on `lastActiveAt` (inclusive). */
19334
+ until: zod.z.number().optional(),
19335
+ limit: zod.z.number().int().min(1).max(500).default(100),
19336
+ /** Opaque continuation cursor from a previous page's `nextCursor`. */
19337
+ cursor: zod.z.string().optional(),
19338
+ /**
19339
+ * Restrict to these classes — THE SAME FIELD `listRecentTracks` takes, and
19340
+ * deliberately the same name: the events filter tree emits one list of ticked
19341
+ * taxonomy nodes, and a summaries feed that called it something else would
19342
+ * make the operator's one filter component produce two shapes.
19343
+ *
19344
+ * A question about the MEMBERS: a group matches when ANY of them does. "Show
19345
+ * me the arrivals with a dog" has to return the group of four people who had
19346
+ * one with them; a filter on the group's own fields could only ever answer
19347
+ * about its primary.
19348
+ *
19349
+ * Matched against all THREE tiers of a member — the class (`animal`), the
19350
+ * sub-class (`dog`) and the instance (a name, a plate) — because which tier a
19351
+ * ticked node lives on is the taxonomy's business, not the caller's. `dog` is
19352
+ * an event kind in the tree and a tier-1 label on an `animal` track; a filter
19353
+ * that read only the class would answer "animal" and never "dog".
19354
+ *
19355
+ * ABSENT or EMPTY means no filter — absent is not a selection of none.
19356
+ */
19357
+ classes: zod.z.array(zod.z.string().min(1).max(60)).max(40).optional()
19358
+ });
19359
+ var RecentSummariesPageSchema = zod.z.object({
19360
+ /** Ordered by (`lastActiveAt` DESC, id DESC). Same light item as
19361
+ * {@link listSummaries} — one list shape, so a card renders the same
19362
+ * whichever feed drew it. */
19363
+ summaries: zod.z.array(SummaryListItemSchema).readonly(),
19364
+ nextCursor: zod.z.string().nullable()
19259
19365
  });
19260
19366
  var RecentTracksPageSchema = zod.z.object({
19261
19367
  /** Merged page, ordered by (`lastSeen` DESC, `trackId` DESC). */
@@ -19698,6 +19804,11 @@ var pipelineAnalyticsCapability = {
19698
19804
  listRecentTracks: method(RecentTracksQueryInput, RecentTracksPageSchema),
19699
19805
  /** Newest first by `openedAt`, for a camera set, inside an optional window. */
19700
19806
  listSummaries: method(SummariesQueryInput, SummariesPageSchema),
19807
+ /**
19808
+ * The PAGED feed — the reel and the Events gallery. Same cursor contract as
19809
+ * {@link listRecentTracks}, so one screen cannot hold two ideas of newest.
19810
+ */
19811
+ listRecentSummaries: method(RecentSummariesQueryInput, RecentSummariesPageSchema),
19701
19812
  /** One summary with its member track ids; `null` for an id nobody wrote. */
19702
19813
  getSummary: method(zod.z.object({ id: zod.z.string() }), SummaryDetailSchema.nullable()),
19703
19814
  clearTracks: method(zod.z.object({ deviceId: zod.z.number() }), zod.z.void(), {
@@ -40316,6 +40427,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
40316
40427
  addonId: null,
40317
40428
  access: "view"
40318
40429
  },
40430
+ "pipelineAnalytics.listRecentSummaries": {
40431
+ capName: "pipeline-analytics",
40432
+ capScope: "device",
40433
+ addonId: null,
40434
+ access: "view"
40435
+ },
40319
40436
  "pipelineAnalytics.listRecentTracks": {
40320
40437
  capName: "pipeline-analytics",
40321
40438
  capScope: "device",
@@ -44143,6 +44260,11 @@ Object.freeze({
44143
44260
  form: "single",
44144
44261
  optional: true
44145
44262
  }],
44263
+ "pipelineAnalytics.listRecentSummaries": [{
44264
+ name: "deviceIds",
44265
+ form: "array",
44266
+ optional: false
44267
+ }],
44146
44268
  "pipelineAnalytics.listRecentTracks": [{
44147
44269
  name: "deviceIds",
44148
44270
  form: "array",
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-u8F4ZyXi.js");
3
+ const require_dist = require("./dist-zr6q3Aad.js");
4
4
  const require_builtins_alerts_alerts_addon = require("./builtins/alerts/alerts.addon.js");
5
5
  require("./builtins/alerts/index.js");
6
6
  const require_formatter = require("./formatter-DqAKDlvN.js");
@@ -29,7 +29,7 @@ const require_event_loop_stall_monitor = require("./event-loop-stall-monitor-CAs
29
29
  const require_tls$1 = require("./tls-BFs4PzoW.js");
30
30
  const require_manifest_system_deps = require("./manifest-system-deps-CrSP0Kkp.js");
31
31
  const require_resource_monitor = require("./resource-monitor-LVE1BoLs.js");
32
- const require_custom_action_registry = require("./custom-action-registry-mtS2EOEs.js");
32
+ const require_custom_action_registry = require("./custom-action-registry-YD6rwIuz.js");
33
33
  let zod = require("zod");
34
34
  let node_crypto = require("node:crypto");
35
35
  let _camstack_types_node = require("@camstack/types/node");
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 { A as addonSettingsCapability, Dt as procedureAuthKey, Ft as scopesAllowDeviceCap, Jt as errMsg$1, Mt as resolveMethodAuth, Pt as scopesAllowAddon, Qt as DEVICE_STATUS_METHOD, Xt as DATAPLANE_SECRET_HEADER$1, Zt as DEVICE_SETTINGS_CONTRIBUTION_METHODS, _ as RUNTIME_DEFAULTS, _n as readinessKey, _t as logLevelAtMost, an as asJsonObject$1, at as isArrayOutputSchema, cn as createEvent, ct as isObjectInput, dn as expandCapMethods, dt as isVoidInput, ft as kebabToCamel, gn as parseJsonUnknown, h as METHOD_ACCESS_MAP, hn as parseJsonObject, ln as emitDownForOwnedCaps, mt as lifecycleJobSchema, nn as ReadinessRegistry, on as asNumber, ot as isCollectionArrayMethod, p as LOG_LEVEL_RANK, rn as ReadinessTimeoutError, sn as asString$1, t as ALL_CAPABILITY_DEFINITIONS, tt as extractNestedAddonId, vn as resolveCapMount, vt as looseSchema, wt as objectInputDeclaresAddonId, xn as EventCategory$1, yn as scopeKey } from "./dist-jOwC9aK1.mjs";
2
+ import { A as addonSettingsCapability, Dt as procedureAuthKey, Ft as scopesAllowDeviceCap, Jt as errMsg$1, Mt as resolveMethodAuth, Pt as scopesAllowAddon, Qt as DEVICE_STATUS_METHOD, Xt as DATAPLANE_SECRET_HEADER$1, Zt as DEVICE_SETTINGS_CONTRIBUTION_METHODS, _ as RUNTIME_DEFAULTS, _n as readinessKey, _t as logLevelAtMost, an as asJsonObject$1, at as isArrayOutputSchema, cn as createEvent, ct as isObjectInput, dn as expandCapMethods, dt as isVoidInput, ft as kebabToCamel, gn as parseJsonUnknown, h as METHOD_ACCESS_MAP, hn as parseJsonObject, ln as emitDownForOwnedCaps, mt as lifecycleJobSchema, nn as ReadinessRegistry, on as asNumber, ot as isCollectionArrayMethod, p as LOG_LEVEL_RANK, rn as ReadinessTimeoutError, sn as asString$1, t as ALL_CAPABILITY_DEFINITIONS, tt as extractNestedAddonId, vn as resolveCapMount, vt as looseSchema, wt as objectInputDeclaresAddonId, xn as EventCategory$1, yn as scopeKey } from "./dist-C0M6CBhV.mjs";
3
3
  import { AlertCenterAddon } from "./builtins/alerts/alerts.addon.mjs";
4
4
  import "./builtins/alerts/index.mjs";
5
5
  import { t as formatLogLine } from "./formatter-B7qW8bPJ.mjs";
@@ -28,7 +28,7 @@ import { _ as fetchJson, a as createFileDataPlaneHandler, c as parseRangeHeader,
28
28
  import { C as registerLanHttpHandler, S as readLanHttpState, _ as DEFAULT_LAN_HTTP_PORT, a as writeTlsMode, b as bindPendingLanHttp, c as loadTlsCert, d as collectCertIdentity, f as CA_VALIDITY_DAYS, g as evaluateExistingCert, h as SERVER_AUTH_OID, i as writeExtraSans, l as reissueTlsLeaf, m as MAX_LEAF_VALIDITY_DAYS, n as readTlsAccessStatus, o as validateUploadedTls, p as LEAF_RENEWAL_WINDOW_DAYS, r as readTlsMode, s as ensureTlsCert, t as readExtraSans, u as CA_COMMON_NAME, v as allFamiliesListenHost, x as closeLanHttp, y as applyLanHttp } from "./tls-2xbgg78V.mjs";
29
29
  import { $ as buildUdsNativeCapProxy, $t as ARRAY_BUFFER_CENSUS_THRESHOLD_MB, A as createUdsLoggerWithControl, An as recordSocketFrame, At as HUB_MAIN_HEAP_WATCH_LABEL, B as readMoleculerFanoutMode, Bn as diffCapActionCensus, Bt as createLoopDelayMeter, C as ipcParentLink, Cn as createSocketPlaneMeter, Ct as runNpm, D as createUdsEventBus, Dn as readSocketQueues, Dt as HEAP_RECLAIM_TRIGGER_MB, E as createUdsEventBridge, En as formatSocketPlane, Et as HEAP_RECLAIM_STEADY_STATE_INTERVAL_MS, F as CapRouteError, Fn as CAP_ACTION_UNLABELLED, Ft as RUNNER_HEAP_WATCH_INTERVAL_MS, G as createLocalTransport, Gn as formatEventPlane, Gt as parseRssBudgetMb, H as PARENT_ROUTED_PROVIDER_ADDON_ID, Hn as createEventPlaneMeter, Ht as describeRss, I as classifyCapRoute, In as EMPTY_CAP_ACTION_READING, It as RUNNER_RSS_BUDGET_ENV, J as SocketChannel, Jt as startHeapWatch, K as UdsLocalTransportClient, Kt as reclaimIntervalMs, L as LocalChildClient, Ln as MAX_CAP_ACTIONS_PER_PEER, Lt as ZERO_LOOP_DELAY, M as AGENT_CAP_FWD_SERVICE, Mn as socketDirectionBytes, Mt as HUB_RSS_BUDGET_ENV, N as CapRouteResolver, Nn as socketDirectionMessages, Nt as RSS_BUDGET_REANNOUNCE_MIN_MS, O as udsChildLogToWorkerEntry, On as EMPTY_SOCKET_DIRECTION, Ot as HEAP_WATCH_INTERVAL_MS, P as callWithServiceDiscovery, Pn as CAP_ACTION_OVERFLOW_LABEL, Pt as RSS_BUDGET_RELEASE_RATIO, Q as buildNativeCapProxy, Qt as ARRAY_BUFFER_CENSUS_SUSTAIN_MS, R as LocalChildRegistry, Rn as capActionLabel, Rt as buildHeapSample, S as buildLinkChain, Sn as SOCKET_QUEUE_TOP_N, St as resolveNpmInvocation, T as createParentUnownedCallHandler, Tn as diffSocketPlane, Tt as HEAP_RECLAIM_MIN_INTERVAL_MS, U as __resetCapUsageRegistryForTests, Un as createEventPlaneReader, Ut as hubMainRssBudget, V as CapUsageRegistry, Vn as EVENT_PLANE_TOP_N, Vt as createV8Reclaimer, W as getCapUsageRegistry, Wn as diffEventPlane, Wt as nextRssBudgetState, X as FrameDecoder, Xt as strandedMb, Y as localEndpointPath, Yt as startRunnerHeapWatch, Z as encodeFrame, Zt as ARRAY_BUFFER_CENSUS_COOLDOWN_MS, _ as AddonDepsManager, _n as MESH_QUEUE_TOP_N, _t as CapabilityUnavailableError, a as createUdsAddonContext, an as DECISIVE_HEAP_SPACES, at as createAddonService, b as brokerCallForCap, bn as EMPTY_SOCKET_PLANE_BASELINE, bt as resolveAddonClass, c as getOrInitReadinessRegistryForClient, cn as formatHeapSpaces, ct as capActionName, d as clusterEventTopic, dn as selectReportedSpaces, dt as capServiceName, en as ARRAY_BUFFER_RELEASE_MIN_DROP_RATIO, et as createBrokerDeviceManagerApi, f as getBrokerEventBus, fn as OUTBOUND_QUEUE_COOLDOWN_MS, ft as parseCapAction, g as subscribePassthrough, gn as formatOutboundQueueVerdict, gt as CapabilityHandle, h as setNodeEventInterest, hn as createOutboundQueueGate, ht as DeviceRegistry, i as createAddonContext, in as isArrayBufferCensusReport, j as AGENT_CAP_FWD_ACTION, jn as sampleSocketDirection, jt as HUB_MAIN_RSS_BUDGET_MB, k as createUdsLogger, kn as createSocketDirectionCounters, kt as HEAP_WATCH_WARN_RATIO, l as setHubConnected, ln as heapSpaceField, lt as capActionSuffix, m as registerEventBusService, mn as OUTBOUND_QUEUE_THRESHOLD_BYTES, mt as serializeTypedArrays, n as installManifestPythonDeps, nn as createInspectorArrayBufferCensus, o as getWorkerDeviceRegistry, on as HEAP_SPACE_REPORT_MIN_MB, ot as validateProviderRegistrations, p as getMoleculerEventStats, pn as OUTBOUND_QUEUE_SUSTAIN_MS, pt as deserializeTypedArrays, q as UdsLocalTransportServer, qt as shouldReclaim, r as adaptBrokerToCluster, rn as formatArrayBufferCensus, rt as mountNativeCapService, s as getOrInitReadinessRegistry, sn as emitHeapDiagnosticReport, st as NATIVE_PROVIDER_SERVICE_INFIX, t as installManifestSystemDeps, tn as createArrayBufferCensusGate, u as EVENT_TOPIC_PREFIX, un as readHeapSpaces, ut as capBareAction, v as createKernelHwAccel, vn as createMeshQueueReader, vt as copyBundledNativeModules, w as localProviderLink, wn as createSocketPlaneReader, wt as createAddonDataPlaneFacility, x as brokerTransportLink, xn as SOCKET_PLANE_TOP_N, xt as buildNpmChildEnv, y as resolveHwAccel, yn as formatMeshQueue, yt as installManifestNativeDeps, z as UDS_NO_ROUTE_PREFIX, zn as createCapActionCensus, zt as createDeferredHeapWatchSink } from "./manifest-system-deps-BEj9Dpu1.mjs";
30
30
  import { n as getSinglePidStats, t as getPidStats } from "./resource-monitor-Vp0bPV3U.mjs";
31
- import { t as CustomActionRegistry } from "./custom-action-registry-Bl_FtykP.mjs";
31
+ import { t as CustomActionRegistry } from "./custom-action-registry-zTQXMaNb.mjs";
32
32
  import { z } from "zod";
33
33
  import { createHash, randomUUID, timingSafeEqual } from "node:crypto";
34
34
  import { PYTHON_VERSION, buildBinaryPath, downloadBinary, ensureBinary, ensureFfmpeg, ensurePython, findInPath, getFfmpegDownloadUrl, getPlatformInfo, getPythonDownloadUrl, installPythonPackages, installPythonRequirements } from "@camstack/types/node";
@@ -1,4 +1,4 @@
1
- const require_dist = require("./dist-u8F4ZyXi.js");
1
+ const require_dist = require("./dist-zr6q3Aad.js");
2
2
  //#region src/builtins/sqlite-storage/retired-settings-keys.ts
3
3
  /**
4
4
  * Is THIS node the one whose settings store is the cluster's authority?
@@ -1,4 +1,4 @@
1
- import { an as asJsonObject } from "./dist-jOwC9aK1.mjs";
1
+ import { an as asJsonObject } from "./dist-C0M6CBhV.mjs";
2
2
  //#region src/builtins/sqlite-storage/retired-settings-keys.ts
3
3
  /**
4
4
  * Is THIS node the one whose settings store is the cluster's authority?
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/system",
3
- "version": "1.2.228",
3
+ "version": "1.2.229",
4
4
  "description": "Core addon for CamStack — builtins, pipeline, process management, auth, logging, events",
5
5
  "keywords": [
6
6
  "camstack",