@camstack/system 1.2.468 → 1.2.470

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 (94) hide show
  1. package/dist/addon-runner.js +56 -25
  2. package/dist/addon-runner.mjs +56 -25
  3. package/dist/{agent-https-DJ8OzQOr.js → agent-https-D_oo3PNv.js} +1 -1
  4. package/dist/{agent-https-DR1wmhYY.mjs → agent-https-DmNQyAl7.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/autotrack/index.js +1 -1
  12. package/dist/builtins/autotrack/index.mjs +1 -1
  13. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.js +2 -2
  14. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.mjs +2 -2
  15. package/dist/builtins/calendars/calendars.addon.js +1 -1
  16. package/dist/builtins/calendars/calendars.addon.mjs +1 -1
  17. package/dist/builtins/camera-grid/index.js +1 -1
  18. package/dist/builtins/camera-grid/index.mjs +1 -1
  19. package/dist/builtins/composer/composer.addon.js +2 -2
  20. package/dist/builtins/composer/composer.addon.mjs +2 -2
  21. package/dist/builtins/console-logging/index.js +1 -1
  22. package/dist/builtins/console-logging/index.mjs +1 -1
  23. package/dist/builtins/core-blocks/core-blocks.addon.js +2 -2
  24. package/dist/builtins/core-blocks/core-blocks.addon.mjs +2 -2
  25. package/dist/builtins/device-history/capture/capture-engine.d.ts +24 -4
  26. package/dist/builtins/device-history/device-history.addon.js +319 -44
  27. package/dist/builtins/device-history/device-history.addon.mjs +319 -44
  28. package/dist/builtins/device-history/query/history-query.d.ts +19 -2
  29. package/dist/builtins/device-history/retention/orphans.d.ts +50 -0
  30. package/dist/builtins/device-history/retention/retention.d.ts +9 -2
  31. package/dist/builtins/device-history/runtime/history-runtime.d.ts +10 -2
  32. package/dist/builtins/device-history/store/history-store.d.ts +5 -0
  33. package/dist/builtins/device-manager/device-manager.addon.js +2 -2
  34. package/dist/builtins/device-manager/device-manager.addon.mjs +2 -2
  35. package/dist/builtins/device-manager/device-meta-types.d.ts +2 -2
  36. package/dist/builtins/hub-forwarder/index.js +1 -1
  37. package/dist/builtins/hub-forwarder/index.mjs +1 -1
  38. package/dist/builtins/keychain/index.js +3 -3
  39. package/dist/builtins/keychain/index.mjs +3 -3
  40. package/dist/builtins/liveness-monitor/liveness-monitor.addon.js +1 -1
  41. package/dist/builtins/liveness-monitor/liveness-monitor.addon.mjs +1 -1
  42. package/dist/builtins/local-auth/local-auth.addon.js +2 -2
  43. package/dist/builtins/local-auth/local-auth.addon.mjs +2 -2
  44. package/dist/builtins/local-network/local-network.addon.js +2 -2
  45. package/dist/builtins/local-network/local-network.addon.mjs +2 -2
  46. package/dist/builtins/loki-logging/index.js +1 -1
  47. package/dist/builtins/loki-logging/index.mjs +1 -1
  48. package/dist/builtins/native-metrics/native-metrics.addon.js +1 -1
  49. package/dist/builtins/native-metrics/native-metrics.addon.mjs +1 -1
  50. package/dist/builtins/platform-probe/accelerator-reprobe.d.ts +23 -0
  51. package/dist/builtins/platform-probe/coral-accelerators.d.ts +37 -8
  52. package/dist/builtins/platform-probe/index.d.ts +17 -1
  53. package/dist/builtins/platform-probe/index.js +192 -11
  54. package/dist/builtins/platform-probe/index.mjs +192 -12
  55. package/dist/builtins/platform-probe/platform-scorer.d.ts +14 -0
  56. package/dist/builtins/record-entries/index.js +1 -1
  57. package/dist/builtins/record-entries/index.mjs +1 -1
  58. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.js +1 -1
  59. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.mjs +1 -1
  60. package/dist/builtins/snapshot/index.js +1 -1
  61. package/dist/builtins/snapshot/index.mjs +1 -1
  62. package/dist/builtins/sqlite-storage/filesystem-storage.addon.js +1 -1
  63. package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs +1 -1
  64. package/dist/builtins/sqlite-storage/index.js +1 -1
  65. package/dist/builtins/sqlite-storage/index.mjs +1 -1
  66. package/dist/builtins/sqlite-storage/sqlite-settings.addon.js +2 -2
  67. package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +2 -2
  68. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js +1 -1
  69. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs +1 -1
  70. package/dist/builtins/system-config/system-config.addon.js +3 -3
  71. package/dist/builtins/system-config/system-config.addon.mjs +3 -3
  72. package/dist/builtins/winston-logging/index.js +1 -1
  73. package/dist/builtins/winston-logging/index.mjs +1 -1
  74. package/dist/{composition-sources-Qto-S6MA.mjs → composition-sources-B0tqvf0t.mjs} +1 -1
  75. package/dist/{composition-sources-5rpWQhA1.js → composition-sources-CRJffEiB.js} +1 -1
  76. package/dist/{constants-BWli8Cju.mjs → constants--A505iuO.mjs} +1 -1
  77. package/dist/{constants-CuO3rcw4.js → constants-WF1AqoKF.js} +1 -1
  78. package/dist/{coral-accelerators-oUXmmbc2.js → coral-accelerators-Cri32b7q.js} +61 -24
  79. package/dist/{coral-accelerators-D_S1Fo5h.mjs → coral-accelerators-Dl-GnMHn.mjs} +56 -25
  80. package/dist/{device-ca-C5cLlah1.mjs → device-ca-DYmToMp8.mjs} +1 -1
  81. package/dist/{device-ca-CGcaSheI.js → device-ca-R4MZZtc0.js} +1 -1
  82. package/dist/{dist-l6zKmHEb.js → dist-DRL3rEfN.js} +335 -120
  83. package/dist/{dist-BpUtAgqR.mjs → dist-X1r44BdF.mjs} +324 -121
  84. package/dist/file-host-worker.js +1 -1
  85. package/dist/file-host-worker.mjs +1 -1
  86. package/dist/{hub-mdns-ciao-0KWDyIMD.mjs → hub-mdns-ciao-CZV5Hion.mjs} +2 -2
  87. package/dist/{hub-mdns-ciao-CIno_SNn.js → hub-mdns-ciao-DUoTS6jN.js} +2 -2
  88. package/dist/index.js +8 -8
  89. package/dist/index.mjs +8 -8
  90. package/dist/{restore-archive-B71JI-sP.js → restore-archive-Df6PsOHP.js} +1 -1
  91. package/dist/{restore-archive-DKxAZ9pI.mjs → restore-archive-X0ciGMmO.mjs} +1 -1
  92. package/dist/{wal-maintenance-BXYwFecW.mjs → wal-maintenance-D6J_MmZ8.mjs} +0 -0
  93. package/dist/{wal-maintenance-B6LSQ_OZ.js → wal-maintenance-DYvzJiuK.js} +0 -0
  94. package/package.json +1 -1
@@ -7893,9 +7893,9 @@ function currentDelegateHost() {
7893
7893
  override: process.env[_camstack_types_node.EDGETPU_LIB_ENV]
7894
7894
  };
7895
7895
  }
7896
- function countUsbCorals(fsx) {
7896
+ function countUsbCorals(devices, fsx) {
7897
7897
  let count = 0;
7898
- for (const device of fsx.listUsbDevices()) {
7898
+ for (const device of devices) {
7899
7899
  const vendor = fsx.readUsbAttr(device, "idVendor").toLowerCase();
7900
7900
  const product = fsx.readUsbAttr(device, "idProduct").toLowerCase();
7901
7901
  if (CORAL_USB_IDS.some((id) => id.vendor === vendor && id.product === product)) count++;
@@ -7934,21 +7934,33 @@ function classifyPci(fsx) {
7934
7934
  };
7935
7935
  }
7936
7936
  /**
7937
- * Detect Coral Edge TPUs on USB and PCIe/M.2.
7937
+ * Detect Coral Edge TPUs on USB and PCIe/M.2 — the answer only. See
7938
+ * {@link detectCoralAccelerator} for the evidence that decided it.
7939
+ */
7940
+ function classifyCoralAccelerator(fsx, delegateHost = currentDelegateHost()) {
7941
+ return detectCoralAccelerator(fsx, delegateHost).info;
7942
+ }
7943
+ /**
7944
+ * Detect Coral Edge TPUs on USB and PCIe/M.2, with the evidence that decided.
7938
7945
  *
7939
7946
  * - USB: every matching USB device counts (multiple Corals run concurrently).
7940
7947
  * - PCIe: the apex driver's units, each usable only if its device node opens;
7941
7948
  * a Coral PCI function the driver did not bind is `driver-missing`.
7942
- * - Fallback: when NO Coral signal of either bus is visible but the libedgetpu
7943
- * delegate is installed (a container whose `/sys` USB view is limited), one
7944
- * USB Coral is assumed — never when a PCI Coral was seen, since the delegate
7945
- * then says nothing about USB.
7949
+ * - Fallback: when the USB bus is NOT OBSERVABLE (`/sys/bus/usb/devices`
7950
+ * missing, unreadable or empty — a macOS desktop, a restricted container)
7951
+ * and no PCI Coral was seen, an installed libedgetpu delegate means one USB
7952
+ * Coral is assumed. A bus that IS readable and lists no Coral id is the
7953
+ * answer: no USB Coral. The delegate stays installed after a stick is
7954
+ * unplugged or moved to another node, so it is evidence only where nothing
7955
+ * better exists (D919).
7946
7956
  *
7947
7957
  * Returns `null` only when no Coral was found at all; a present-but-unusable
7948
7958
  * Coral is reported with its typed reason, never as absent (D393/D315).
7949
7959
  */
7950
- function classifyCoralAccelerator(fsx, delegateHost = currentDelegateHost()) {
7951
- const usb = countUsbCorals(fsx);
7960
+ function detectCoralAccelerator(fsx, delegateHost = currentDelegateHost()) {
7961
+ const usbDevices = fsx.listUsbDevices();
7962
+ const usbBus = usbDevices !== null && usbDevices.length > 0 ? "observed" : "unobservable";
7963
+ const usb = usbDevices === null ? 0 : countUsbCorals(usbDevices, fsx);
7952
7964
  const pci = classifyPci(fsx);
7953
7965
  const units = [];
7954
7966
  if (usb > 0) units.push({
@@ -7970,25 +7982,44 @@ function classifyCoralAccelerator(fsx, delegateHost = currentDelegateHost()) {
7970
7982
  count: pci.notAccessible,
7971
7983
  reason: "device-not-accessible"
7972
7984
  });
7973
- if (units.length > 0 || unavailable.length > 0) return unavailable.length > 0 ? {
7974
- type: "coral-edgetpu",
7975
- units,
7976
- unavailable
7977
- } : {
7978
- type: "coral-edgetpu",
7979
- units
7980
- };
7981
- if ((0, _camstack_types_node.chooseEdgetpuDelegate)({
7985
+ if (units.length > 0 || unavailable.length > 0) return {
7986
+ info: unavailable.length > 0 ? {
7987
+ type: "coral-edgetpu",
7988
+ units,
7989
+ unavailable
7990
+ } : {
7991
+ type: "coral-edgetpu",
7992
+ units
7993
+ },
7994
+ usbBus,
7995
+ decidedBy: usb > 0 ? "usb-ids" : "pci"
7996
+ };
7997
+ if (usbBus === "unobservable" && (0, _camstack_types_node.chooseEdgetpuDelegate)({
7982
7998
  ...delegateHost,
7983
7999
  exists: (p) => fsx.exists(p)
7984
8000
  }) !== null) return {
7985
- type: "coral-edgetpu",
7986
- units: [{
7987
- bus: "usb",
7988
- count: 1
7989
- }]
8001
+ info: {
8002
+ type: "coral-edgetpu",
8003
+ units: [{
8004
+ bus: "usb",
8005
+ count: 1
8006
+ }]
8007
+ },
8008
+ usbBus,
8009
+ decidedBy: "delegate-fallback"
7990
8010
  };
7991
- return null;
8011
+ return {
8012
+ info: null,
8013
+ usbBus,
8014
+ decidedBy: "none"
8015
+ };
8016
+ }
8017
+ function safeListOrNull(dir) {
8018
+ try {
8019
+ return node_fs.default.readdirSync(dir);
8020
+ } catch {
8021
+ return null;
8022
+ }
7992
8023
  }
7993
8024
  function safeList(dir) {
7994
8025
  try {
@@ -8006,7 +8037,7 @@ function safeRead(path) {
8006
8037
  }
8007
8038
  /** The real filesystem view: `/sys` for enumeration, `/dev` for access. */
8008
8039
  var nodeCoralFs = {
8009
- listUsbDevices: () => safeList("/sys/bus/usb/devices"),
8040
+ listUsbDevices: () => safeListOrNull("/sys/bus/usb/devices"),
8010
8041
  readUsbAttr: (device, attr) => safeRead(`/sys/bus/usb/devices/${device}/${attr}`),
8011
8042
  listPciDevices: () => safeList("/sys/bus/pci/devices"),
8012
8043
  readPciAttr: (device, attr) => safeRead(`/sys/bus/pci/devices/${device}/${attr}`),
@@ -7869,9 +7869,9 @@ function currentDelegateHost() {
7869
7869
  override: process.env[EDGETPU_LIB_ENV]
7870
7870
  };
7871
7871
  }
7872
- function countUsbCorals(fsx) {
7872
+ function countUsbCorals(devices, fsx) {
7873
7873
  let count = 0;
7874
- for (const device of fsx.listUsbDevices()) {
7874
+ for (const device of devices) {
7875
7875
  const vendor = fsx.readUsbAttr(device, "idVendor").toLowerCase();
7876
7876
  const product = fsx.readUsbAttr(device, "idProduct").toLowerCase();
7877
7877
  if (CORAL_USB_IDS.some((id) => id.vendor === vendor && id.product === product)) count++;
@@ -7910,21 +7910,33 @@ function classifyPci(fsx) {
7910
7910
  };
7911
7911
  }
7912
7912
  /**
7913
- * Detect Coral Edge TPUs on USB and PCIe/M.2.
7913
+ * Detect Coral Edge TPUs on USB and PCIe/M.2 — the answer only. See
7914
+ * {@link detectCoralAccelerator} for the evidence that decided it.
7915
+ */
7916
+ function classifyCoralAccelerator(fsx, delegateHost = currentDelegateHost()) {
7917
+ return detectCoralAccelerator(fsx, delegateHost).info;
7918
+ }
7919
+ /**
7920
+ * Detect Coral Edge TPUs on USB and PCIe/M.2, with the evidence that decided.
7914
7921
  *
7915
7922
  * - USB: every matching USB device counts (multiple Corals run concurrently).
7916
7923
  * - PCIe: the apex driver's units, each usable only if its device node opens;
7917
7924
  * a Coral PCI function the driver did not bind is `driver-missing`.
7918
- * - Fallback: when NO Coral signal of either bus is visible but the libedgetpu
7919
- * delegate is installed (a container whose `/sys` USB view is limited), one
7920
- * USB Coral is assumed — never when a PCI Coral was seen, since the delegate
7921
- * then says nothing about USB.
7925
+ * - Fallback: when the USB bus is NOT OBSERVABLE (`/sys/bus/usb/devices`
7926
+ * missing, unreadable or empty — a macOS desktop, a restricted container)
7927
+ * and no PCI Coral was seen, an installed libedgetpu delegate means one USB
7928
+ * Coral is assumed. A bus that IS readable and lists no Coral id is the
7929
+ * answer: no USB Coral. The delegate stays installed after a stick is
7930
+ * unplugged or moved to another node, so it is evidence only where nothing
7931
+ * better exists (D919).
7922
7932
  *
7923
7933
  * Returns `null` only when no Coral was found at all; a present-but-unusable
7924
7934
  * Coral is reported with its typed reason, never as absent (D393/D315).
7925
7935
  */
7926
- function classifyCoralAccelerator(fsx, delegateHost = currentDelegateHost()) {
7927
- const usb = countUsbCorals(fsx);
7936
+ function detectCoralAccelerator(fsx, delegateHost = currentDelegateHost()) {
7937
+ const usbDevices = fsx.listUsbDevices();
7938
+ const usbBus = usbDevices !== null && usbDevices.length > 0 ? "observed" : "unobservable";
7939
+ const usb = usbDevices === null ? 0 : countUsbCorals(usbDevices, fsx);
7928
7940
  const pci = classifyPci(fsx);
7929
7941
  const units = [];
7930
7942
  if (usb > 0) units.push({
@@ -7946,25 +7958,44 @@ function classifyCoralAccelerator(fsx, delegateHost = currentDelegateHost()) {
7946
7958
  count: pci.notAccessible,
7947
7959
  reason: "device-not-accessible"
7948
7960
  });
7949
- if (units.length > 0 || unavailable.length > 0) return unavailable.length > 0 ? {
7950
- type: "coral-edgetpu",
7951
- units,
7952
- unavailable
7953
- } : {
7954
- type: "coral-edgetpu",
7955
- units
7956
- };
7957
- if (chooseEdgetpuDelegate({
7961
+ if (units.length > 0 || unavailable.length > 0) return {
7962
+ info: unavailable.length > 0 ? {
7963
+ type: "coral-edgetpu",
7964
+ units,
7965
+ unavailable
7966
+ } : {
7967
+ type: "coral-edgetpu",
7968
+ units
7969
+ },
7970
+ usbBus,
7971
+ decidedBy: usb > 0 ? "usb-ids" : "pci"
7972
+ };
7973
+ if (usbBus === "unobservable" && chooseEdgetpuDelegate({
7958
7974
  ...delegateHost,
7959
7975
  exists: (p) => fsx.exists(p)
7960
7976
  }) !== null) return {
7961
- type: "coral-edgetpu",
7962
- units: [{
7963
- bus: "usb",
7964
- count: 1
7965
- }]
7977
+ info: {
7978
+ type: "coral-edgetpu",
7979
+ units: [{
7980
+ bus: "usb",
7981
+ count: 1
7982
+ }]
7983
+ },
7984
+ usbBus,
7985
+ decidedBy: "delegate-fallback"
7966
7986
  };
7967
- return null;
7987
+ return {
7988
+ info: null,
7989
+ usbBus,
7990
+ decidedBy: "none"
7991
+ };
7992
+ }
7993
+ function safeListOrNull(dir) {
7994
+ try {
7995
+ return fs.readdirSync(dir);
7996
+ } catch {
7997
+ return null;
7998
+ }
7968
7999
  }
7969
8000
  function safeList(dir) {
7970
8001
  try {
@@ -7982,7 +8013,7 @@ function safeRead(path) {
7982
8013
  }
7983
8014
  /** The real filesystem view: `/sys` for enumeration, `/dev` for access. */
7984
8015
  var nodeCoralFs = {
7985
- listUsbDevices: () => safeList("/sys/bus/usb/devices"),
8016
+ listUsbDevices: () => safeListOrNull("/sys/bus/usb/devices"),
7986
8017
  readUsbAttr: (device, attr) => safeRead(`/sys/bus/usb/devices/${device}/${attr}`),
7987
8018
  listPciDevices: () => safeList("/sys/bus/pci/devices"),
7988
8019
  readPciAttr: (device, attr) => safeRead(`/sys/bus/pci/devices/${device}/${attr}`),
@@ -1,5 +1,5 @@
1
1
  const require_chunk = require("./chunk-Cek0wNdY.js");
2
- const require_dist = require("./dist-l6zKmHEb.js");
2
+ const require_dist = require("./dist-DRL3rEfN.js");
3
3
  const require_x509_es = require("./x509.es-C4cOo48M.js");
4
4
  let zod = require("zod");
5
5
  let node_crypto = require("node:crypto");
@@ -1,4 +1,4 @@
1
- import { Gi as defineRecordKinds } from "./dist-BpUtAgqR.mjs";
1
+ import { Ki as defineRecordKinds } from "./dist-X1r44BdF.mjs";
2
2
  import { S as backdatedNotBefore, _ as NameConstraints, a as KeyUsageFlags, c as Pkcs10CertificateRequest, d as SubjectKeyIdentifierExtension, f as X509Certificate$1, g as GeneralSubtrees, h as GeneralSubtree, i as Extension, l as Pkcs10CertificateRequestGenerator, m as cryptoProvider, n as BasicConstraintsExtension, o as KeyUsagesExtension, p as X509CertificateGenerator, r as ExtendedKeyUsageExtension, s as PemConverter, t as AuthorityKeyIdentifierExtension, u as SubjectAlternativeNameExtension, v as GeneralName, x as AsnConvert } from "./x509.es-DK__ETIe.mjs";
3
3
  import { z } from "zod";
4
4
  import { X509Certificate, createHash, createPrivateKey, randomBytes, webcrypto } from "node:crypto";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-l6zKmHEb.js");
6
+ const require_dist = require("../../dist-DRL3rEfN.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 { $r as BaseAddon, Qr as errMsg, Ta as EventCategory, gt as addonPagesCapability } from "../../dist-BpUtAgqR.mjs";
1
+ import { $r as errMsg, Da as EventCategory, _t as addonPagesCapability, ei as BaseAddon } from "../../dist-X1r44BdF.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-l6zKmHEb.js");
6
+ const require_dist = require("../../dist-DRL3rEfN.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 { $r as BaseAddon, Qr as errMsg, Ta as EventCategory, vt as addonWidgetsCapability } from "../../dist-BpUtAgqR.mjs";
1
+ import { $r as errMsg, Da as EventCategory, ei as BaseAddon, yt as addonWidgetsCapability } from "../../dist-X1r44BdF.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-l6zKmHEb.js");
6
+ const require_dist = require("../../dist-DRL3rEfN.js");
7
7
  const require_read_all_rows$1 = require("../../read-all-rows-CVoO1ONM.js");
8
8
  //#region src/builtins/alerts/alert-episode-policy.ts
9
9
  /**
@@ -1,4 +1,4 @@
1
- import { $r as BaseAddon, Gi as defineRecordKinds, Hi as createEvent, Qr as errMsg, Ta as EventCategory, bt as alertEpisodePayload, i as AlertSchema, vn as isAlertEpisodeOpen, xt as alertsCapability, yn as isAlertEpisodeSeverity, yt as alertEpisodeId } from "../../dist-BpUtAgqR.mjs";
1
+ import { $r as errMsg, Da as EventCategory, Ki as defineRecordKinds, St as alertsCapability, Ui as createEvent, bn as isAlertEpisodeSeverity, bt as alertEpisodeId, ei as BaseAddon, i as AlertSchema, xt as alertEpisodePayload, yn as isAlertEpisodeOpen } from "../../dist-X1r44BdF.mjs";
2
2
  import { t as require_read_all_rows } from "../../read-all-rows-TaPqdWNF.mjs";
3
3
  //#region src/builtins/alerts/alert-episode-policy.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-l6zKmHEb.js");
6
+ const require_dist = require("../../dist-DRL3rEfN.js");
7
7
  //#region src/builtins/autotrack/autotrack-config.ts
8
8
  var DEFAULT_AUTOTRACK_LOOP_CONFIG = {
9
9
  deadZoneFraction: .5,
@@ -1,4 +1,4 @@
1
- import { $r as BaseAddon, I as FIRST_LEVEL_MACRO_CLASSES, Qi as isEvent, Qr as errMsg, Ta as EventCategory, Tt as bareAddonId, er as ptzAutotrackCapability } from "../../dist-BpUtAgqR.mjs";
1
+ import { $r as errMsg, Da as EventCategory, Et as bareAddonId, I as FIRST_LEVEL_MACRO_CLASSES, ea as isEvent, ei as BaseAddon, tr as ptzAutotrackCapability } from "../../dist-X1r44BdF.mjs";
2
2
  //#region src/builtins/autotrack/autotrack-config.ts
3
3
  var DEFAULT_AUTOTRACK_LOOP_CONFIG = {
4
4
  deadZoneFraction: .5,
@@ -3,9 +3,9 @@ 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-l6zKmHEb.js");
6
+ const require_dist = require("../../dist-DRL3rEfN.js");
7
7
  const require_read_all_rows$1 = require("../../read-all-rows-CVoO1ONM.js");
8
- const require_restore_archive = require("../../restore-archive-B71JI-sP.js");
8
+ const require_restore_archive = require("../../restore-archive-Df6PsOHP.js");
9
9
  let node_crypto = require("node:crypto");
10
10
  let node_fs_promises = require("node:fs/promises");
11
11
  node_fs_promises = require_chunk.__toESM(node_fs_promises);
@@ -1,6 +1,6 @@
1
- import { $r as BaseAddon, Bn as mayWriteToLocation, Ta as EventCategory, Tr as storageOccupancyCapability, ba as toNodeId, oa as nodePin, wt as backupCapability } from "../../dist-BpUtAgqR.mjs";
1
+ import { Da as EventCategory, Er as storageOccupancyCapability, Sa as toNodeId, Tt as backupCapability, Vn as mayWriteToLocation, ca as nodePin, ei as BaseAddon } from "../../dist-X1r44BdF.mjs";
2
2
  import { t as require_read_all_rows } from "../../read-all-rows-TaPqdWNF.mjs";
3
- import { _ as backupRecordStoresOf, a as BackupSnapshotRefusedError, d as ENCRYPTED_BACKUP_SUFFIX, f as generateBackupKeyPair, g as backupOrchestratorRecordKinds, i as BackupCancelledError, l as BackupKeyFormatError, m as parseBackupSecretKey, n as precheckRestoreKey, o as DEFAULT_BACKUP_DATABASES, p as parseBackupPublicKey, r as prepareRestoreArchive, s as SystemBackupService } from "../../restore-archive-DKxAZ9pI.mjs";
3
+ import { _ as backupRecordStoresOf, a as BackupSnapshotRefusedError, d as ENCRYPTED_BACKUP_SUFFIX, f as generateBackupKeyPair, g as backupOrchestratorRecordKinds, i as BackupCancelledError, l as BackupKeyFormatError, m as parseBackupSecretKey, n as precheckRestoreKey, o as DEFAULT_BACKUP_DATABASES, p as parseBackupPublicKey, r as prepareRestoreArchive, s as SystemBackupService } from "../../restore-archive-X0ciGMmO.mjs";
4
4
  import { randomUUID } from "node:crypto";
5
5
  import * as fsp from "node:fs/promises";
6
6
  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-l6zKmHEb.js");
6
+ const require_dist = require("../../dist-DRL3rEfN.js");
7
7
  const require_settle_sources = require("../../settle-sources-Bhsy57y-.js");
8
8
  let zod = require("zod");
9
9
  //#region src/builtins/calendars/calendar-color.ts
@@ -1,4 +1,4 @@
1
- import { $r as BaseAddon, Gi as defineRecordKinds, g as CalendarPreferencesSchema, jt as calendarsCapability } from "../../dist-BpUtAgqR.mjs";
1
+ import { Ki as defineRecordKinds, Mt as calendarsCapability, ei as BaseAddon, g as CalendarPreferencesSchema } from "../../dist-X1r44BdF.mjs";
2
2
  import { t as settleSourcesWithTimeout } from "../../settle-sources-CDtNC8ub.mjs";
3
3
  import { z } from "zod";
4
4
  //#region src/builtins/calendars/calendar-color.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-l6zKmHEb.js");
6
+ const require_dist = require("../../dist-DRL3rEfN.js");
7
7
  let zod = require("zod");
8
8
  let _camstack_types_node = require("@camstack/types/node");
9
9
  let node_path = require("node:path");
@@ -1,4 +1,4 @@
1
- import { $r as BaseAddon, Dr as streamCatalogCapability, Hi as createEvent, Kt as declarationOwnerNodeId, Mt as cameraGridLayoutCapability, N as DeclaredDevices, Qr as errMsg, Rr as buildFfmpegArgs, T as DERIVED_CAMERA_SILENCED_CAP_NAMES, Ta as EventCategory, Vn as memoizePinnedFfmpeg, Wn as motionCapability, Xi as hydrateSchema, Y as MOTION_CLOSE_AFTER_MS, Yr as DeviceFeature, Zr as DeviceType, a as BaseDevice, br as snapshotCapability } from "../../dist-BpUtAgqR.mjs";
1
+ import { $r as errMsg, Da as EventCategory, Gn as motionCapability, Hn as memoizePinnedFfmpeg, N as DeclaredDevices, Nt as cameraGridLayoutCapability, Or as streamCatalogCapability, Qi as hydrateSchema, Qr as DeviceType, T as DERIVED_CAMERA_SILENCED_CAP_NAMES, Ui as createEvent, X as MOTION_CLOSE_AFTER_MS, Xr as DeviceFeature, a as BaseDevice, ei as BaseAddon, qt as declarationOwnerNodeId, xr as snapshotCapability, zr as buildFfmpegArgs } from "../../dist-X1r44BdF.mjs";
2
2
  import { z } from "zod";
3
3
  import { FfmpegProcess } from "@camstack/types/node";
4
4
  import { join } from "node:path";
@@ -3,8 +3,8 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-l6zKmHEb.js");
7
- const require_composition_sources = require("../../composition-sources-5rpWQhA1.js");
6
+ const require_dist = require("../../dist-DRL3rEfN.js");
7
+ const require_composition_sources = require("../../composition-sources-CRJffEiB.js");
8
8
  let zod = require("zod");
9
9
  //#region src/builtins/shared/device-state-changed.ts
10
10
  /** Structural narrowing helper for untrusted bus payloads. */
@@ -1,5 +1,5 @@
1
- import { $r as BaseAddon, Br as composedDeviceRef, Dt as buildCapabilityLookup, Ft as composerCapability, Gr as compositionSourceKey, Hi as createEvent, Hr as compositionFeatureEnabled, It as compositionFieldKey, Jr as toExpressionValue, Kr as createStatefulExpressionMemory, Lr as COMPOSER_ADDON_ID, N as DeclaredDevices, Qr as errMsg, Ta as EventCategory, Ur as compositionItemFieldPath, Vr as composedDeviceStableId, Wr as compositionSliceKey, Zn as planComposition, Zr as DeviceType, a as BaseDevice, d as COMPOSED_ITEM_FIXED_FIELDS, qr as disarmRoseMemory, r as ALL_CAPABILITY_DEFINITIONS, sn as evaluateCompositionField, un as expressionContainsBuiltinCall, zr as cloneStatefulExpressionMemory } from "../../dist-BpUtAgqR.mjs";
2
- import { n as normalizedNativeOwner } from "../../composition-sources-Qto-S6MA.mjs";
1
+ import { $r as errMsg, Br as cloneStatefulExpressionMemory, Da as EventCategory, Gr as compositionSliceKey, Hr as composedDeviceStableId, It as composerCapability, Jr as disarmRoseMemory, Kr as compositionSourceKey, Lt as compositionFieldKey, N as DeclaredDevices, Ot as buildCapabilityLookup, Qn as planComposition, Qr as DeviceType, Rr as COMPOSER_ADDON_ID, Ui as createEvent, Ur as compositionFeatureEnabled, Vr as composedDeviceRef, Wr as compositionItemFieldPath, Yr as toExpressionValue, a as BaseDevice, cn as evaluateCompositionField, d as COMPOSED_ITEM_FIXED_FIELDS, dn as expressionContainsBuiltinCall, ei as BaseAddon, qr as createStatefulExpressionMemory, r as ALL_CAPABILITY_DEFINITIONS } from "../../dist-X1r44BdF.mjs";
2
+ import { n as normalizedNativeOwner } from "../../composition-sources-B0tqvf0t.mjs";
3
3
  import { z } from "zod";
4
4
  //#region src/builtins/shared/device-state-changed.ts
5
5
  /** Structural narrowing helper for untrusted bus payloads. */
@@ -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-l6zKmHEb.js");
6
+ const require_dist = require("../../dist-DRL3rEfN.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 { $r as BaseAddon, In as logDestinationCapability } from "../../dist-BpUtAgqR.mjs";
1
+ import { Ln as logDestinationCapability, ei as BaseAddon } from "../../dist-X1r44BdF.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,8 +1,8 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_chunk = require("../../chunk-Cek0wNdY.js");
3
- const require_dist = require("../../dist-l6zKmHEb.js");
3
+ const require_dist = require("../../dist-DRL3rEfN.js");
4
4
  const require_read_all_rows$1 = require("../../read-all-rows-CVoO1ONM.js");
5
- const require_composition_sources = require("../../composition-sources-5rpWQhA1.js");
5
+ const require_composition_sources = require("../../composition-sources-CRJffEiB.js");
6
6
  const require_prefix_range = require("../../prefix-range-D_KueXbQ.js");
7
7
  const require_prefix_walk = require("../../prefix-walk-Dv6MLZlM.js");
8
8
  let zod = require("zod");
@@ -1,6 +1,6 @@
1
- import { $r as BaseAddon, Bi as collectSecretMarkerRefs, Br as composedDeviceRef, Bt as coreBlockIdFromAddonId, Dt as buildCapabilityLookup, Gi as defineRecordKinds, Gn as normalizeCoreBlockWrite, Gr as compositionSourceKey, Ht as coreBlocksCapability, Lt as compositionSourceRefs, N as DeclaredDevices, Qr as errMsg, Rt as coreBlockAddonId, Sa as transformSecretWrite, Vt as coreBlockSourceKind, Xi as hydrateSchema, Xt as describeComposableCaps, Zn as planComposition, cr as resolveCoreBlockFiles, f as COMPOSER_RUNNER_ID, ha as resolveSecretMarkers, ir as replacedFieldKeys, jr as validateComposition, m as CORE_BLOCK_ADDON_PREFIX, p as CORE_BLOCKS_ADDON_ID, r as ALL_CAPABILITY_DEFINITIONS, ra as isSecretRefOwnedBy, sr as resolveCoreBlockEntry, ta as isSecretMarker, v as CoreBlockSchema, va as secretTreeFromSchema, zt as coreBlockComposition } from "../../dist-BpUtAgqR.mjs";
1
+ import { $r as errMsg, Bt as coreBlockComposition, Ht as coreBlockSourceKind, Ki as defineRecordKinds, Kn as normalizeCoreBlockWrite, Kr as compositionSourceKey, Mr as validateComposition, N as DeclaredDevices, Ot as buildCapabilityLookup, Qi as hydrateSchema, Qn as planComposition, Rt as compositionSourceRefs, Ut as coreBlocksCapability, Vi as collectSecretMarkerRefs, Vr as composedDeviceRef, Vt as coreBlockIdFromAddonId, Zt as describeComposableCaps, _a as resolveSecretMarkers, aa as isSecretRefOwnedBy, ar as replacedFieldKeys, ba as secretTreeFromSchema, cr as resolveCoreBlockEntry, ei as BaseAddon, f as COMPOSER_RUNNER_ID, lr as resolveCoreBlockFiles, m as CORE_BLOCK_ADDON_PREFIX, p as CORE_BLOCKS_ADDON_ID, r as ALL_CAPABILITY_DEFINITIONS, ra as isSecretMarker, v as CoreBlockSchema, wa as transformSecretWrite, zt as coreBlockAddonId } from "../../dist-X1r44BdF.mjs";
2
2
  import { t as require_read_all_rows } from "../../read-all-rows-TaPqdWNF.mjs";
3
- import { t as describeCompositionSources } from "../../composition-sources-Qto-S6MA.mjs";
3
+ import { t as describeCompositionSources } from "../../composition-sources-B0tqvf0t.mjs";
4
4
  import { t as prefixRange } from "../../prefix-range-Dl0znowN.mjs";
5
5
  import { n as unwrapStoredValue, t as loadPrefixed } from "../../prefix-walk-DAOBSyH1.mjs";
6
6
  import { createRequire } from "node:module";
@@ -18,7 +18,7 @@
18
18
  * lost. Reconcile ({@link CaptureEngine.reconcile}) restores what a dropped
19
19
  * event missed from the state mirror's snapshot.
20
20
  */
21
- import { type CapabilityHistoryField, type DeviceHistorySubject, type IScopedLogger } from "@camstack/types";
21
+ import { type CapabilityHistoryField, type CapabilityHistoryItems, type DeviceHistorySubject, type IScopedLogger } from "@camstack/types";
22
22
  import type { HistoryCounters } from "../status/counters.js";
23
23
  import type { SeriesRegistry } from "../store/series-registry.js";
24
24
  import type { HistoryStore, MetricRecord } from "../store/history-store.js";
@@ -26,13 +26,25 @@ import { type RecordedState } from "./capture-filter.js";
26
26
  import { type DeviceDirectory } from "./device-directory.js";
27
27
  import type { PointWriter } from "./point-writer.js";
28
28
  export type HistoryCatalog = Readonly<Record<string, Readonly<Record<string, CapabilityHistoryField>>>>;
29
+ /** Keyed-array series per cap (D917): the item key is the series scope. */
30
+ export type HistoryItemCatalog = Readonly<Record<string, CapabilityHistoryItems>>;
29
31
  export declare const CAP_KEY_PREFIX = "cap:";
32
+ /**
33
+ * Items read from one slice's keyed array; beyond this the rest are not
34
+ * captured (counted `item-overflow`). A consumables list holds a handful.
35
+ */
36
+ export declare const MAX_ITEMS_PER_SLICE = 64;
37
+ /** The longest item key that becomes a series scope (counted `item-key-invalid` beyond). */
38
+ export declare const MAX_ITEM_KEY_LENGTH = 128;
30
39
  export declare function capSeriesKey(capName: string, fieldPath: string): string;
31
- /** The metric rows of every catalog field (owner `device-history`). */
32
- export declare function catalogMetrics(catalog: HistoryCatalog, now: number): readonly MetricRecord[];
40
+ /** The series key of an item field: `cap:<capName>.<path>[].<field>`. */
41
+ export declare function capItemSeriesKey(capName: string, items: CapabilityHistoryItems, field: string): string;
42
+ /** The metric rows of every catalog field and keyed-item field (owner `device-history`). */
43
+ export declare function catalogMetrics(catalog: HistoryCatalog, itemCatalog: HistoryItemCatalog, now: number): readonly MetricRecord[];
33
44
  export type SnapshotMap = Readonly<Record<string, Readonly<Record<string, Readonly<Record<string, unknown>>>>>>;
34
45
  export interface CaptureEngineDeps {
35
46
  readonly catalog: HistoryCatalog;
47
+ readonly itemCatalog: HistoryItemCatalog;
36
48
  readonly registry: SeriesRegistry;
37
49
  readonly store: HistoryStore;
38
50
  readonly directory: DeviceDirectory;
@@ -52,6 +64,14 @@ export declare class CaptureEngine {
52
64
  seed(): Promise<void>;
53
65
  /** One `DeviceStateChanged`. Synchronous: the bus must never wait on us. */
54
66
  handleState(deviceId: number, capName: string, slice: Readonly<Record<string, unknown>>, at: number): void;
67
+ /** Every catalogued field and keyed item of one cap slice, for a real device. */
68
+ private captureSlice;
69
+ /**
70
+ * A keyed array (D917): each item with a usable key contributes its fields
71
+ * under that key as the series scope. A value that is not an array is no
72
+ * reading; an item without a string key cannot be followed and is counted.
73
+ */
74
+ private captureItems;
55
75
  /**
56
76
  * The number a field contributes, or `null` (not a reading — never 0). An
57
77
  * `enum` state becomes the ordinal of its value in the metric's list; a value
@@ -89,5 +109,5 @@ export declare class CaptureEngine {
89
109
  /** For status and specs. */
90
110
  pendingCount(): number;
91
111
  /** The last recorded state of a series, for specs. */
92
- lastRecorded(key: string, subjectId: string): RecordedState | undefined;
112
+ lastRecorded(key: string, subjectId: string, scope?: string): RecordedState | undefined;
93
113
  }