@camstack/system 1.2.188 → 1.2.190

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/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.js +1 -1
  4. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.mjs +1 -1
  5. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.js +1 -1
  6. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.mjs +1 -1
  7. package/dist/builtins/alerts/alerts.addon.js +1 -1
  8. package/dist/builtins/alerts/alerts.addon.mjs +1 -1
  9. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.js +1 -1
  10. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.mjs +1 -1
  11. package/dist/builtins/console-logging/index.js +1 -1
  12. package/dist/builtins/console-logging/index.mjs +1 -1
  13. package/dist/builtins/core-blocks/core-blocks.addon.js +1 -1
  14. package/dist/builtins/core-blocks/core-blocks.addon.mjs +1 -1
  15. package/dist/builtins/device-manager/device-manager.addon.js +2 -2
  16. package/dist/builtins/device-manager/device-manager.addon.mjs +2 -2
  17. package/dist/builtins/doorbell/virtual-doorbell.addon.js +1 -1
  18. package/dist/builtins/doorbell/virtual-doorbell.addon.mjs +1 -1
  19. package/dist/builtins/hub-forwarder/index.js +1 -1
  20. package/dist/builtins/hub-forwarder/index.mjs +1 -1
  21. package/dist/builtins/liveness-monitor/liveness-monitor.addon.js +1 -1
  22. package/dist/builtins/liveness-monitor/liveness-monitor.addon.mjs +1 -1
  23. package/dist/builtins/local-auth/local-auth.addon.js +1 -1
  24. package/dist/builtins/local-auth/local-auth.addon.mjs +1 -1
  25. package/dist/builtins/local-network/local-network.addon.js +1 -1
  26. package/dist/builtins/local-network/local-network.addon.mjs +1 -1
  27. package/dist/builtins/loki-logging/index.js +1 -1
  28. package/dist/builtins/loki-logging/index.mjs +1 -1
  29. package/dist/builtins/native-metrics/native-metrics.addon.js +1 -1
  30. package/dist/builtins/native-metrics/native-metrics.addon.mjs +1 -1
  31. package/dist/builtins/platform-probe/index.js +1 -1
  32. package/dist/builtins/platform-probe/index.mjs +1 -1
  33. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.js +1 -1
  34. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.mjs +1 -1
  35. package/dist/builtins/snapshot/index.js +61 -5
  36. package/dist/builtins/snapshot/index.mjs +61 -5
  37. package/dist/builtins/snapshot/snapshot-fatigue.d.ts +41 -0
  38. package/dist/builtins/snapshot/snapshot.addon.d.ts +2 -0
  39. package/dist/builtins/sqlite-storage/filesystem-storage.addon.js +1 -1
  40. package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs +1 -1
  41. package/dist/builtins/sqlite-storage/sqlite-settings.addon.js +0 -0
  42. package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +0 -0
  43. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js +1 -1
  44. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs +1 -1
  45. package/dist/builtins/system-config/system-config.addon.js +1 -1
  46. package/dist/builtins/system-config/system-config.addon.mjs +1 -1
  47. package/dist/builtins/winston-logging/index.js +1 -1
  48. package/dist/builtins/winston-logging/index.mjs +1 -1
  49. package/dist/{dist-DlL8iWQo.js → dist-2wpm3tOu.js} +28 -0
  50. package/dist/{dist-D0_hqbgc.mjs → dist-n6kxbqqp.mjs} +28 -0
  51. package/dist/index.js +2 -2
  52. package/dist/index.mjs +2 -2
  53. package/dist/{manifest-system-deps-CYKgsQ_b.mjs → manifest-system-deps-726RBOX7.mjs} +4 -2
  54. package/dist/{manifest-system-deps-CdIVy85V.js → manifest-system-deps-DvY1bY_n.js} +4 -2
  55. package/dist/{retired-settings-keys-AE2Qy3Xd.mjs → retired-settings-keys-CRamEHzS.mjs} +1 -1
  56. package/dist/{retired-settings-keys-B5wVSU65.js → retired-settings-keys-D6gkOkcN.js} +1 -1
  57. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  const require_chunk = require("./chunk-Cek0wNdY.js");
2
- const require_manifest_system_deps = require("./manifest-system-deps-CdIVy85V.js");
2
+ const require_manifest_system_deps = require("./manifest-system-deps-DvY1bY_n.js");
3
3
  const require_custom_action_registry = require("./custom-action-registry-jY0NOZK8.js");
4
4
  let node_path = require("node:path");
5
5
  node_path = require_chunk.__toESM(node_path);
@@ -1,4 +1,4 @@
1
- import { A as createUdsLoggerWithControl, Ft as RUNNER_RSS_BUDGET_ENV, Jt as startRunnerHeapWatch, Qt as emitHeapDiagnosticReport, a as createUdsAddonContext, bt as resolveAddonClass, it as setWorkerNativeCapsChangeListener, j as LocalChildClient, n as installManifestPythonDeps, nt as getWorkerNativeCapSnapshot, ot as validateProviderRegistrations, t as installManifestSystemDeps, tt as getWorkerNativeCapProvider, yt as installManifestNativeDeps } from "./manifest-system-deps-CYKgsQ_b.mjs";
1
+ import { A as createUdsLoggerWithControl, Ft as RUNNER_RSS_BUDGET_ENV, Jt as startRunnerHeapWatch, Qt as emitHeapDiagnosticReport, a as createUdsAddonContext, bt as resolveAddonClass, it as setWorkerNativeCapsChangeListener, j as LocalChildClient, n as installManifestPythonDeps, nt as getWorkerNativeCapSnapshot, ot as validateProviderRegistrations, t as installManifestSystemDeps, tt as getWorkerNativeCapProvider, yt as installManifestNativeDeps } from "./manifest-system-deps-726RBOX7.mjs";
2
2
  import { t as CustomActionRegistry } from "./custom-action-registry-F__gp_VX.mjs";
3
3
  import { register } from "node:module";
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-DlL8iWQo.js");
6
+ const require_dist = require("../../dist-2wpm3tOu.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 { E as addonPagesCapability, Ft as BaseAddon, Pt as errMsg, sn as EventCategory } from "../../dist-D0_hqbgc.mjs";
1
+ import { E as addonPagesCapability, Ft as BaseAddon, Pt as errMsg, sn as EventCategory } from "../../dist-n6kxbqqp.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-DlL8iWQo.js");
6
+ const require_dist = require("../../dist-2wpm3tOu.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 { Ft as BaseAddon, O as addonWidgetsCapability, Pt as errMsg, sn as EventCategory } from "../../dist-D0_hqbgc.mjs";
1
+ import { Ft as BaseAddon, O as addonWidgetsCapability, Pt as errMsg, sn as EventCategory } from "../../dist-n6kxbqqp.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-DlL8iWQo.js");
6
+ const require_dist = require("../../dist-2wpm3tOu.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 { Ft as BaseAddon, Jt as createEvent, Pt as errMsg, k as alertsCapability, n as AlertSchema, sn as EventCategory } from "../../dist-D0_hqbgc.mjs";
1
+ import { Ft as BaseAddon, Jt as createEvent, Pt as errMsg, k as alertsCapability, n as AlertSchema, sn as EventCategory } from "../../dist-n6kxbqqp.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-DlL8iWQo.js");
6
+ const require_dist = require("../../dist-2wpm3tOu.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 { Ft as BaseAddon, j as backupCapability, sn as EventCategory } from "../../dist-D0_hqbgc.mjs";
1
+ import { Ft as BaseAddon, j as backupCapability, sn as EventCategory } from "../../dist-n6kxbqqp.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-DlL8iWQo.js");
6
+ const require_dist = require("../../dist-2wpm3tOu.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 { Ft as BaseAddon, ct as logDestinationCapability } from "../../dist-D0_hqbgc.mjs";
1
+ import { Ft as BaseAddon, ct as logDestinationCapability } from "../../dist-n6kxbqqp.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-DlL8iWQo.js");
3
+ const require_dist = require("../../dist-2wpm3tOu.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 { Ft as BaseAddon, I as coreBlockAddonId, L as coreBlockIdFromAddonId, Pt as errMsg, R as coreBlocksCapability, c as CORE_BLOCK_ADDON_PREFIX, d as DeclaredDevices, l as CoreBlockSchema, s as CORE_BLOCKS_ADDON_ID } from "../../dist-D0_hqbgc.mjs";
1
+ import { Ft as BaseAddon, I as coreBlockAddonId, L as coreBlockIdFromAddonId, Pt as errMsg, R as coreBlocksCapability, c as CORE_BLOCK_ADDON_PREFIX, d as DeclaredDevices, l as CoreBlockSchema, s as CORE_BLOCKS_ADDON_ID } from "../../dist-n6kxbqqp.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-DlL8iWQo.js");
7
- const require_retired_settings_keys = require("../../retired-settings-keys-B5wVSU65.js");
6
+ const require_dist = require("../../dist-2wpm3tOu.js");
7
+ const require_retired_settings_keys = require("../../retired-settings-keys-D6gkOkcN.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 isDeviceConfigCap, Bt as DeviceRole, Ft as BaseAddon, H as deviceManagerCapability, J as enumerateSchemaFields, P as buildStreamParamsConfigSchema, Pt as errMsg, U as deviceStateCapability, Vt as DeviceType, W as deviceStatusCapability, Wt as WELL_KNOWN_TAB_MAP, a as CAMERA_SWITCH_ORDER, b as STREAM_PROFILE_META, f as DeviceStatusSchema, ft as normalizeUnit, mt as parseStreamParamsFormPatch, o as CAP_NAMES_WITH_STATUS, on as sleep, q as enumerateItemArrayFields, sn as EventCategory, t as ALL_CAPABILITY_DEFINITIONS, xt as runtimeStatePolicyFor, yt as resolveContainerPrimaryChild, zt as DeviceFeature } from "../../dist-D0_hqbgc.mjs";
2
- import { n as purgeRetiredSettingsRows } from "../../retired-settings-keys-AE2Qy3Xd.mjs";
1
+ import { $t as isDeviceConfigCap, Bt as DeviceRole, Ft as BaseAddon, H as deviceManagerCapability, J as enumerateSchemaFields, P as buildStreamParamsConfigSchema, Pt as errMsg, U as deviceStateCapability, Vt as DeviceType, W as deviceStatusCapability, Wt as WELL_KNOWN_TAB_MAP, a as CAMERA_SWITCH_ORDER, b as STREAM_PROFILE_META, f as DeviceStatusSchema, ft as normalizeUnit, mt as parseStreamParamsFormPatch, o as CAP_NAMES_WITH_STATUS, on as sleep, q as enumerateItemArrayFields, sn as EventCategory, t as ALL_CAPABILITY_DEFINITIONS, xt as runtimeStatePolicyFor, yt as resolveContainerPrimaryChild, zt as DeviceFeature } from "../../dist-n6kxbqqp.mjs";
2
+ import { n as purgeRetiredSettingsRows } from "../../retired-settings-keys-CRamEHzS.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-DlL8iWQo.js");
6
+ const require_dist = require("../../dist-2wpm3tOu.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 { Ft as BaseAddon, G as doorbellCapability, Jt as createEvent, M as bareAddonId, Pt as errMsg, Vt as DeviceType, Y as evaluateSensorEdge, _ as SOURCE_CAPS, nt as isSameAddonId, rt as isSourceCap, sn as EventCategory, v as SOURCE_DEVICE_TYPES } from "../../dist-D0_hqbgc.mjs";
1
+ import { Ft as BaseAddon, G as doorbellCapability, Jt as createEvent, M as bareAddonId, Pt as errMsg, Vt as DeviceType, Y as evaluateSensorEdge, _ as SOURCE_CAPS, nt as isSameAddonId, rt as isSourceCap, sn as EventCategory, v as SOURCE_DEVICE_TYPES } from "../../dist-n6kxbqqp.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-DlL8iWQo.js");
6
+ const require_dist = require("../../dist-2wpm3tOu.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 { Ft as BaseAddon, ct as logDestinationCapability } from "../../dist-D0_hqbgc.mjs";
1
+ import { Ft as BaseAddon, ct as logDestinationCapability } from "../../dist-n6kxbqqp.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-DlL8iWQo.js");
3
+ const require_dist = require("../../dist-2wpm3tOu.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 { Ft as BaseAddon, Jt as createEvent, Pt as errMsg, sn as EventCategory } from "../../dist-D0_hqbgc.mjs";
1
+ import { Ft as BaseAddon, Jt as createEvent, Pt as errMsg, sn as EventCategory } from "../../dist-n6kxbqqp.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-DlL8iWQo.js");
6
+ const require_dist = require("../../dist-2wpm3tOu.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 { A as authProviderCapability, Ft as BaseAddon, T as UserRecordSchema, jt as userManagementCapability, r as ApiKeyRecordSchema, x as ScopedTokenSchema } from "../../dist-D0_hqbgc.mjs";
2
+ import { A as authProviderCapability, Ft as BaseAddon, T as UserRecordSchema, jt as userManagementCapability, r as ApiKeyRecordSchema, x as ScopedTokenSchema } from "../../dist-n6kxbqqp.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-DlL8iWQo.js");
3
+ const require_dist = require("../../dist-2wpm3tOu.js");
4
4
  const require_tls = require("../../tls-BxQlomxd.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 { Ft as BaseAddon, sn as EventCategory, st as localNetworkCapability } from "../../dist-D0_hqbgc.mjs";
1
+ import { Ft as BaseAddon, sn as EventCategory, st as localNetworkCapability } from "../../dist-n6kxbqqp.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-DOTmtLCW.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-DlL8iWQo.js");
6
+ const require_dist = require("../../dist-2wpm3tOu.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 { Ft as BaseAddon, ct as logDestinationCapability } from "../../dist-D0_hqbgc.mjs";
1
+ import { Ft as BaseAddon, ct as logDestinationCapability } from "../../dist-n6kxbqqp.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-DlL8iWQo.js");
6
+ const require_dist = require("../../dist-2wpm3tOu.js");
7
7
  let node_fs_promises = require("node:fs/promises");
8
8
  let node_child_process = require("node:child_process");
9
9
  let node_util = require("node:util");
@@ -1,4 +1,4 @@
1
- import { Ft as BaseAddon, Jt as createEvent, Pt as errMsg, Q as foldSnapshotByFunction, _t as reducePoints, dt as metricsProviderCapability, sn as EventCategory, vt as resolveBucketMs } from "../../dist-D0_hqbgc.mjs";
1
+ import { Ft as BaseAddon, Jt as createEvent, Pt as errMsg, Q as foldSnapshotByFunction, _t as reducePoints, dt as metricsProviderCapability, sn as EventCategory, vt as resolveBucketMs } from "../../dist-n6kxbqqp.mjs";
2
2
  import { readFile, readdir } from "node:fs/promises";
3
3
  import { execFile, execFileSync } from "node:child_process";
4
4
  import { promisify } from "node:util";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-DlL8iWQo.js");
6
+ const require_dist = require("../../dist-2wpm3tOu.js");
7
7
  let node_child_process = require("node:child_process");
8
8
  let node_util = require("node:util");
9
9
  let node_fs = require("node:fs");
@@ -1,5 +1,5 @@
1
1
  import { o as __toESM } from "../../chunk-CNf5ZN-e.mjs";
2
- import { Ft as BaseAddon, K as enumerateInferenceDevices, Pt as errMsg, Xt as emitReadiness, ht as platformProbeCapability, sn as EventCategory, wt as scoreRuntimes } from "../../dist-D0_hqbgc.mjs";
2
+ import { Ft as BaseAddon, K as enumerateInferenceDevices, Pt as errMsg, Xt as emitReadiness, ht as platformProbeCapability, sn as EventCategory, wt as scoreRuntimes } from "../../dist-n6kxbqqp.mjs";
3
3
  import { execFile } from "node:child_process";
4
4
  import { promisify } from "node:util";
5
5
  import * as fs from "node:fs";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-DlL8iWQo.js");
6
+ const require_dist = require("../../dist-2wpm3tOu.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 { Ft as BaseAddon, sn as EventCategory } from "../../dist-D0_hqbgc.mjs";
1
+ import { Ft as BaseAddon, sn as EventCategory } from "../../dist-n6kxbqqp.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-DlL8iWQo.js");
6
+ const require_dist = require("../../dist-2wpm3tOu.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");
@@ -458,6 +458,41 @@ async function renderCourtesyOverlayJpeg(background, spec) {
458
458
  if (bytes.length === 0) throw new Error("courtesy overlay produced no bytes");
459
459
  return bytes;
460
460
  }
461
+ var NativeSnapshotFatigue = class {
462
+ baseMs;
463
+ maxMs;
464
+ entries = /* @__PURE__ */ new Map();
465
+ constructor(options = {}) {
466
+ this.baseMs = options.baseMs ?? 1e4;
467
+ this.maxMs = options.maxMs ?? 3e5;
468
+ }
469
+ /** The instant the rest ends, or `null` when the camera may be dialled now. */
470
+ restingUntil(deviceId, now) {
471
+ const entry = this.entries.get(deviceId);
472
+ if (entry === void 0 || entry.restingUntil <= now) return null;
473
+ return entry.restingUntil;
474
+ }
475
+ /** A dial that did not produce a frame — thrown or answered `null`. */
476
+ recordFailure(deviceId, now) {
477
+ const streak = (this.entries.get(deviceId)?.streak ?? 0) + 1;
478
+ const restMs = Math.min(this.maxMs, this.baseMs * 2 ** (streak - 1));
479
+ this.entries.set(deviceId, {
480
+ streak,
481
+ restingUntil: now + restMs
482
+ });
483
+ return {
484
+ streak,
485
+ restMs
486
+ };
487
+ }
488
+ /** A frame landed: the camera is answering again. */
489
+ recordSuccess(deviceId) {
490
+ this.entries.delete(deviceId);
491
+ }
492
+ forget(deviceId) {
493
+ this.entries.delete(deviceId);
494
+ }
495
+ };
461
496
  //#endregion
462
497
  //#region src/builtins/snapshot/snapshot-link-url.ts
463
498
  /**
@@ -1046,6 +1081,8 @@ var SnapshotAddon = class SnapshotAddon extends require_dist.BaseAddon {
1046
1081
  * that silently left the cache is the reason a later capture had to happen,
1047
1082
  * and per-camera is the only way that question is ever asked.
1048
1083
  */
1084
+ /** Cameras resting after a native miss — see `snapshot-fatigue.ts`. */
1085
+ fatigue = new NativeSnapshotFatigue();
1049
1086
  cache = new SnapshotCache({ onEvict: (deviceId, streamId, reason) => {
1050
1087
  this.ctx.logger.debug("snapshot cache evicted", {
1051
1088
  tags: { deviceId },
@@ -1847,11 +1884,17 @@ var SnapshotAddon = class SnapshotAddon extends require_dist.BaseAddon {
1847
1884
  const now = Date.now();
1848
1885
  let nativeError = null;
1849
1886
  let nativeAbsent = false;
1887
+ const restingUntil = input.force === true ? null : this.fatigue.restingUntil(deviceId, now);
1850
1888
  try {
1851
- const native = this.ctx.getNativeProvider(require_dist.snapshotCapability, deviceId);
1852
- if (native) {
1889
+ const native = restingUntil === null ? this.ctx.getNativeProvider(require_dist.snapshotCapability, deviceId) : null;
1890
+ if (restingUntil !== null) log.info("native snapshot: camera resting after a miss — not dialled", {
1891
+ tags: { deviceId },
1892
+ meta: { restMsLeft: restingUntil - now }
1893
+ });
1894
+ else if (native) {
1853
1895
  const result = await this.nativePool.run(() => native.getSnapshot(input));
1854
1896
  if (result) {
1897
+ this.fatigue.recordSuccess(deviceId);
1855
1898
  this.stateFrames.delete(deviceId);
1856
1899
  this.cache.set(deviceId, effectiveStreamId, {
1857
1900
  data: result,
@@ -1863,7 +1906,14 @@ var SnapshotAddon = class SnapshotAddon extends require_dist.BaseAddon {
1863
1906
  image: result
1864
1907
  };
1865
1908
  }
1866
- log.debug("native snapshot returned null — falling through to broker", { tags: { deviceId } });
1909
+ const rest = this.fatigue.recordFailure(deviceId, now);
1910
+ log.debug("native snapshot returned null — falling through to broker", {
1911
+ tags: { deviceId },
1912
+ meta: {
1913
+ restMs: rest.restMs,
1914
+ streak: rest.streak
1915
+ }
1916
+ });
1867
1917
  } else {
1868
1918
  nativeAbsent = true;
1869
1919
  log.debug("native snapshot provider not resolved — falling through to broker", { tags: { deviceId } });
@@ -1878,9 +1928,14 @@ var SnapshotAddon = class SnapshotAddon extends require_dist.BaseAddon {
1878
1928
  });
1879
1929
  } else {
1880
1930
  nativeError = err;
1931
+ const rest = this.fatigue.recordFailure(deviceId, now);
1881
1932
  log.warn("native snapshot failed", {
1882
1933
  tags: { deviceId },
1883
- meta: { error: msg }
1934
+ meta: {
1935
+ error: msg,
1936
+ restMs: rest.restMs,
1937
+ streak: rest.streak
1938
+ }
1884
1939
  });
1885
1940
  }
1886
1941
  }
@@ -2062,6 +2117,7 @@ var SnapshotAddon = class SnapshotAddon extends require_dist.BaseAddon {
2062
2117
  */
2063
2118
  evictRemovedDevice(deviceId, reason) {
2064
2119
  this.dropDeviceCaches(deviceId);
2120
+ this.fatigue.forget(deviceId);
2065
2121
  this.ctx.logger.info("snapshot: dropped cache for removed device", {
2066
2122
  tags: { deviceId },
2067
2123
  meta: { reason }
@@ -1,4 +1,4 @@
1
- import { At as streamQualityLabel, Et as snapshotCapability, Ft as BaseAddon, M as bareAddonId, N as batteryCapability, Pt as errMsg, V as deriveBatteryPresence, Vt as DeviceType, en as nodePin, i as BatteryStatusSchema, sn as EventCategory, zt as DeviceFeature } from "../../dist-D0_hqbgc.mjs";
1
+ import { At as streamQualityLabel, Et as snapshotCapability, Ft as BaseAddon, M as bareAddonId, N as batteryCapability, Pt as errMsg, V as deriveBatteryPresence, Vt as DeviceType, en as nodePin, i as BatteryStatusSchema, sn as EventCategory, zt as DeviceFeature } from "../../dist-n6kxbqqp.mjs";
2
2
  import { z } from "zod";
3
3
  import { randomUUID } from "node:crypto";
4
4
  import { signExpiringUrl, verifyExpiringUrl } from "@camstack/types/node";
@@ -452,6 +452,41 @@ async function renderCourtesyOverlayJpeg(background, spec) {
452
452
  if (bytes.length === 0) throw new Error("courtesy overlay produced no bytes");
453
453
  return bytes;
454
454
  }
455
+ var NativeSnapshotFatigue = class {
456
+ baseMs;
457
+ maxMs;
458
+ entries = /* @__PURE__ */ new Map();
459
+ constructor(options = {}) {
460
+ this.baseMs = options.baseMs ?? 1e4;
461
+ this.maxMs = options.maxMs ?? 3e5;
462
+ }
463
+ /** The instant the rest ends, or `null` when the camera may be dialled now. */
464
+ restingUntil(deviceId, now) {
465
+ const entry = this.entries.get(deviceId);
466
+ if (entry === void 0 || entry.restingUntil <= now) return null;
467
+ return entry.restingUntil;
468
+ }
469
+ /** A dial that did not produce a frame — thrown or answered `null`. */
470
+ recordFailure(deviceId, now) {
471
+ const streak = (this.entries.get(deviceId)?.streak ?? 0) + 1;
472
+ const restMs = Math.min(this.maxMs, this.baseMs * 2 ** (streak - 1));
473
+ this.entries.set(deviceId, {
474
+ streak,
475
+ restingUntil: now + restMs
476
+ });
477
+ return {
478
+ streak,
479
+ restMs
480
+ };
481
+ }
482
+ /** A frame landed: the camera is answering again. */
483
+ recordSuccess(deviceId) {
484
+ this.entries.delete(deviceId);
485
+ }
486
+ forget(deviceId) {
487
+ this.entries.delete(deviceId);
488
+ }
489
+ };
455
490
  //#endregion
456
491
  //#region src/builtins/snapshot/snapshot-link-url.ts
457
492
  /**
@@ -1040,6 +1075,8 @@ var SnapshotAddon = class SnapshotAddon extends BaseAddon {
1040
1075
  * that silently left the cache is the reason a later capture had to happen,
1041
1076
  * and per-camera is the only way that question is ever asked.
1042
1077
  */
1078
+ /** Cameras resting after a native miss — see `snapshot-fatigue.ts`. */
1079
+ fatigue = new NativeSnapshotFatigue();
1043
1080
  cache = new SnapshotCache({ onEvict: (deviceId, streamId, reason) => {
1044
1081
  this.ctx.logger.debug("snapshot cache evicted", {
1045
1082
  tags: { deviceId },
@@ -1841,11 +1878,17 @@ var SnapshotAddon = class SnapshotAddon extends BaseAddon {
1841
1878
  const now = Date.now();
1842
1879
  let nativeError = null;
1843
1880
  let nativeAbsent = false;
1881
+ const restingUntil = input.force === true ? null : this.fatigue.restingUntil(deviceId, now);
1844
1882
  try {
1845
- const native = this.ctx.getNativeProvider(snapshotCapability, deviceId);
1846
- if (native) {
1883
+ const native = restingUntil === null ? this.ctx.getNativeProvider(snapshotCapability, deviceId) : null;
1884
+ if (restingUntil !== null) log.info("native snapshot: camera resting after a miss — not dialled", {
1885
+ tags: { deviceId },
1886
+ meta: { restMsLeft: restingUntil - now }
1887
+ });
1888
+ else if (native) {
1847
1889
  const result = await this.nativePool.run(() => native.getSnapshot(input));
1848
1890
  if (result) {
1891
+ this.fatigue.recordSuccess(deviceId);
1849
1892
  this.stateFrames.delete(deviceId);
1850
1893
  this.cache.set(deviceId, effectiveStreamId, {
1851
1894
  data: result,
@@ -1857,7 +1900,14 @@ var SnapshotAddon = class SnapshotAddon extends BaseAddon {
1857
1900
  image: result
1858
1901
  };
1859
1902
  }
1860
- log.debug("native snapshot returned null — falling through to broker", { tags: { deviceId } });
1903
+ const rest = this.fatigue.recordFailure(deviceId, now);
1904
+ log.debug("native snapshot returned null — falling through to broker", {
1905
+ tags: { deviceId },
1906
+ meta: {
1907
+ restMs: rest.restMs,
1908
+ streak: rest.streak
1909
+ }
1910
+ });
1861
1911
  } else {
1862
1912
  nativeAbsent = true;
1863
1913
  log.debug("native snapshot provider not resolved — falling through to broker", { tags: { deviceId } });
@@ -1872,9 +1922,14 @@ var SnapshotAddon = class SnapshotAddon extends BaseAddon {
1872
1922
  });
1873
1923
  } else {
1874
1924
  nativeError = err;
1925
+ const rest = this.fatigue.recordFailure(deviceId, now);
1875
1926
  log.warn("native snapshot failed", {
1876
1927
  tags: { deviceId },
1877
- meta: { error: msg }
1928
+ meta: {
1929
+ error: msg,
1930
+ restMs: rest.restMs,
1931
+ streak: rest.streak
1932
+ }
1878
1933
  });
1879
1934
  }
1880
1935
  }
@@ -2056,6 +2111,7 @@ var SnapshotAddon = class SnapshotAddon extends BaseAddon {
2056
2111
  */
2057
2112
  evictRemovedDevice(deviceId, reason) {
2058
2113
  this.dropDeviceCaches(deviceId);
2114
+ this.fatigue.forget(deviceId);
2059
2115
  this.ctx.logger.info("snapshot: dropped cache for removed device", {
2060
2116
  tags: { deviceId },
2061
2117
  meta: { reason }
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Rest for a camera that could not answer a native snapshot.
3
+ *
4
+ * The wrapper is polled — grids, cards, the media plane — and every miss used
5
+ * to be followed by another ISAPI/CGI dial on the next poll. On a camera that
6
+ * is already struggling ("Videocamera retro casa" answered HTTP 503 to 68
7
+ * native dials in one hour on 2026-09-05) that is the load that keeps it
8
+ * struggling. So a miss earns a rest window during which the native provider
9
+ * is NOT dialled: the request falls through to the stream-broker frame grab
10
+ * and the stale cache, which cost the camera nothing. The window doubles with
11
+ * consecutive misses and is capped; the first frame that lands ends it.
12
+ *
13
+ * Generic on purpose: every vendor's native provider sits behind this one
14
+ * wrapper, so one ledger here covers them all (D62 spirit: one owner).
15
+ * `force` bypasses it — an operator's deliberate wake is never held back.
16
+ */
17
+ export interface NativeSnapshotFatigueOptions {
18
+ /** Rest after the first miss. */
19
+ readonly baseMs?: number;
20
+ /** Longest rest a streak can earn. */
21
+ readonly maxMs?: number;
22
+ }
23
+ export interface FatigueVerdict {
24
+ readonly streak: number;
25
+ readonly restMs: number;
26
+ }
27
+ export declare const NATIVE_SNAPSHOT_REST_BASE_MS = 10000;
28
+ export declare const NATIVE_SNAPSHOT_REST_MAX_MS = 300000;
29
+ export declare class NativeSnapshotFatigue {
30
+ private readonly baseMs;
31
+ private readonly maxMs;
32
+ private readonly entries;
33
+ constructor(options?: NativeSnapshotFatigueOptions);
34
+ /** The instant the rest ends, or `null` when the camera may be dialled now. */
35
+ restingUntil(deviceId: number, now: number): number | null;
36
+ /** A dial that did not produce a frame — thrown or answered `null`. */
37
+ recordFailure(deviceId: number, now: number): FatigueVerdict;
38
+ /** A frame landed: the camera is answering again. */
39
+ recordSuccess(deviceId: number): void;
40
+ forget(deviceId: number): void;
41
+ }
@@ -36,6 +36,8 @@ export declare class SnapshotAddon extends BaseAddon<SnapshotAddonConfig> {
36
36
  * that silently left the cache is the reason a later capture had to happen,
37
37
  * and per-camera is the only way that question is ever asked.
38
38
  */
39
+ /** Cameras resting after a native miss — see `snapshot-fatigue.ts`. */
40
+ private readonly fatigue;
39
41
  private readonly cache;
40
42
  /** Card-sized derivatives of the frames above, keyed by width and validated
41
43
  * against the source frame's timestamp. */
@@ -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-DlL8iWQo.js");
6
+ const require_dist = require("../../dist-2wpm3tOu.js");
7
7
  let node_crypto = require("node:crypto");
8
8
  let node_fs_promises = require("node:fs/promises");
9
9
  let node_path = require("node:path");
@@ -1,4 +1,4 @@
1
- import { Ft as BaseAddon, Z as filesystemBrowseCapability, kt as storageProviderCapability } from "../../dist-D0_hqbgc.mjs";
1
+ import { Ft as BaseAddon, Z as filesystemBrowseCapability, kt as storageProviderCapability } from "../../dist-n6kxbqqp.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-DlL8iWQo.js");
6
+ const require_dist = require("../../dist-2wpm3tOu.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 { C as StorageLocationTypeSchema, Dt as storageCapability, F as collectSecretConfigKeys, Ft as BaseAddon, Ot as storageMigrationCapability, S as StorageCleanupJobSchema, Tt as settingsStoreCapability, h as REDACTED_SECRET, tn as parseJsonObject, w as StorageMigrationJobSchema } from "../../dist-D0_hqbgc.mjs";
1
+ import { C as StorageLocationTypeSchema, Dt as storageCapability, F as collectSecretConfigKeys, Ft as BaseAddon, Ot as storageMigrationCapability, S as StorageCleanupJobSchema, Tt as settingsStoreCapability, h as REDACTED_SECRET, tn as parseJsonObject, w as StorageMigrationJobSchema } from "../../dist-n6kxbqqp.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-DlL8iWQo.js");
6
+ const require_dist = require("../../dist-2wpm3tOu.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 { Ft as BaseAddon, Pt as errMsg, Qt as hydrateSchema } from "../../dist-D0_hqbgc.mjs";
1
+ import { Ft as BaseAddon, Pt as errMsg, Qt as hydrateSchema } from "../../dist-n6kxbqqp.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-DlL8iWQo.js");
6
+ const require_dist = require("../../dist-2wpm3tOu.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 { Ft as BaseAddon, ct as logDestinationCapability } from "../../dist-D0_hqbgc.mjs";
1
+ import { Ft as BaseAddon, ct as logDestinationCapability } from "../../dist-n6kxbqqp.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";
@@ -20303,6 +20303,14 @@ var AgentPipelineSettingsSchema = zod.z.object({
20303
20303
  /** Node is eligible to be the ingest / source-owner (serve the restream). */
20304
20304
  ingest: zod.z.boolean().optional(),
20305
20305
  /**
20306
+ * This node's decode RAM budget, MB. Wins over the cluster
20307
+ * `nodeDecodeBudgetMb`; absent, the runner derives a share of the node's
20308
+ * own RAM unless the operator moved the cluster value (D365).
20309
+ */
20310
+ decodeBudgetMb: zod.z.number().int().min(1024).max(65536).optional(),
20311
+ /** This node's live decode-worker cap. Wins over the cluster `maxLiveDecodeWorkers`. */
20312
+ maxLiveDecodeWorkers: zod.z.number().int().min(1).max(32).optional(),
20313
+ /**
20306
20314
  * Operator override for the LAN host a cross-node decoder dials to reach
20307
20315
  * THIS node's restream (Cluster UI). Absent → auto-detect: a remote runner
20308
20316
  * falls back to its `CAMSTACK_HUB_URL`-derived host (the Moleculer address
@@ -20952,6 +20960,20 @@ var pipelineOrchestratorCapability = {
20952
20960
  auth: "admin"
20953
20961
  }),
20954
20962
  /**
20963
+ * Size ONE node's decode admission: its RAM budget and live-worker cap.
20964
+ * `null` clears a limit (back to the cluster setting or the RAM-derived
20965
+ * default); an omitted key leaves it alone. Read by the node's runner on
20966
+ * its next lease refresh (D365).
20967
+ */
20968
+ setAgentDecodeLimits: method(zod.z.object({
20969
+ agentNodeId: zod.z.string(),
20970
+ decodeBudgetMb: zod.z.number().int().min(1024).max(65536).nullable().optional(),
20971
+ maxLiveDecodeWorkers: zod.z.number().int().min(1).max(32).nullable().optional()
20972
+ }), zod.z.object({ success: zod.z.literal(true) }), {
20973
+ kind: "mutation",
20974
+ auth: "admin"
20975
+ }),
20976
+ /**
20955
20977
  * Set (or clear) the operator override for the LAN host a cross-node
20956
20978
  * decoder dials to reach this node's restream. Pass a non-empty string to
20957
20979
  * override the auto-detected address (the runner's `CAMSTACK_HUB_URL`
@@ -38676,6 +38698,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
38676
38698
  addonId: null,
38677
38699
  access: "create"
38678
38700
  },
38701
+ "pipelineOrchestrator.setAgentDecodeLimits": {
38702
+ capName: "pipeline-orchestrator",
38703
+ capScope: "system",
38704
+ addonId: null,
38705
+ access: "create"
38706
+ },
38679
38707
  "pipelineOrchestrator.setAgentDetectWeight": {
38680
38708
  capName: "pipeline-orchestrator",
38681
38709
  capScope: "system",
@@ -20303,6 +20303,14 @@ var AgentPipelineSettingsSchema = z.object({
20303
20303
  /** Node is eligible to be the ingest / source-owner (serve the restream). */
20304
20304
  ingest: z.boolean().optional(),
20305
20305
  /**
20306
+ * This node's decode RAM budget, MB. Wins over the cluster
20307
+ * `nodeDecodeBudgetMb`; absent, the runner derives a share of the node's
20308
+ * own RAM unless the operator moved the cluster value (D365).
20309
+ */
20310
+ decodeBudgetMb: z.number().int().min(1024).max(65536).optional(),
20311
+ /** This node's live decode-worker cap. Wins over the cluster `maxLiveDecodeWorkers`. */
20312
+ maxLiveDecodeWorkers: z.number().int().min(1).max(32).optional(),
20313
+ /**
20306
20314
  * Operator override for the LAN host a cross-node decoder dials to reach
20307
20315
  * THIS node's restream (Cluster UI). Absent → auto-detect: a remote runner
20308
20316
  * falls back to its `CAMSTACK_HUB_URL`-derived host (the Moleculer address
@@ -20952,6 +20960,20 @@ var pipelineOrchestratorCapability = {
20952
20960
  auth: "admin"
20953
20961
  }),
20954
20962
  /**
20963
+ * Size ONE node's decode admission: its RAM budget and live-worker cap.
20964
+ * `null` clears a limit (back to the cluster setting or the RAM-derived
20965
+ * default); an omitted key leaves it alone. Read by the node's runner on
20966
+ * its next lease refresh (D365).
20967
+ */
20968
+ setAgentDecodeLimits: method(z.object({
20969
+ agentNodeId: z.string(),
20970
+ decodeBudgetMb: z.number().int().min(1024).max(65536).nullable().optional(),
20971
+ maxLiveDecodeWorkers: z.number().int().min(1).max(32).nullable().optional()
20972
+ }), z.object({ success: z.literal(true) }), {
20973
+ kind: "mutation",
20974
+ auth: "admin"
20975
+ }),
20976
+ /**
20955
20977
  * Set (or clear) the operator override for the LAN host a cross-node
20956
20978
  * decoder dials to reach this node's restream. Pass a non-empty string to
20957
20979
  * override the auto-detected address (the runner's `CAMSTACK_HUB_URL`
@@ -38676,6 +38698,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
38676
38698
  addonId: null,
38677
38699
  access: "create"
38678
38700
  },
38701
+ "pipelineOrchestrator.setAgentDecodeLimits": {
38702
+ capName: "pipeline-orchestrator",
38703
+ capScope: "system",
38704
+ addonId: null,
38705
+ access: "create"
38706
+ },
38679
38707
  "pipelineOrchestrator.setAgentDetectWeight": {
38680
38708
  capName: "pipeline-orchestrator",
38681
38709
  capScope: "system",
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_chunk = require("./chunk-Cek0wNdY.js");
3
- const require_dist = require("./dist-DlL8iWQo.js");
3
+ const require_dist = require("./dist-2wpm3tOu.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");
@@ -27,7 +27,7 @@ require("./builtins/system-config/index.js");
27
27
  const require_builtins_winston_logging_index = require("./builtins/winston-logging/index.js");
28
28
  const require_file_data_plane = require("./file-data-plane-DO8KbxCe.js");
29
29
  const require_tls$1 = require("./tls-BxQlomxd.js");
30
- const require_manifest_system_deps = require("./manifest-system-deps-CdIVy85V.js");
30
+ const require_manifest_system_deps = require("./manifest-system-deps-DvY1bY_n.js");
31
31
  const require_resource_monitor = require("./resource-monitor-CdnzxBLP.js");
32
32
  const require_custom_action_registry = require("./custom-action-registry-jY0NOZK8.js");
33
33
  let zod = require("zod");
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 { $ as isArrayOutputSchema, Ct as scopesAllowDeviceCap, D as addonSettingsCapability, Gt as asJsonObject$1, Ht as ReadinessRegistry, It as DATAPLANE_SECRET_HEADER$1, Jt as createEvent, Kt as asNumber, Lt as DEVICE_SETTINGS_CONTRIBUTION_METHODS, Pt as errMsg$1, Rt as DEVICE_STATUS_METHOD, St as scopesAllowAddon, Ut as ReadinessTimeoutError, X as extractNestedAddonId, Yt as emitDownForOwnedCaps, Zt as expandCapMethods, an as scopeKey, at as kebabToCamel, bt as resolveMethodAuth, et as isCollectionArrayMethod, g as RUNTIME_DEFAULTS, gt as procedureAuthKey, in as resolveCapMount, it as isVoidInput, lt as logLevelAtMost, m as METHOD_ACCESS_MAP, nn as parseJsonUnknown, ot as lifecycleJobSchema, p as LOG_LEVEL_RANK, pt as objectInputDeclaresAddonId, qt as asString$1, rn as readinessKey, sn as EventCategory$1, t as ALL_CAPABILITY_DEFINITIONS, tn as parseJsonObject, tt as isObjectInput, ut as looseSchema } from "./dist-D0_hqbgc.mjs";
2
+ import { $ as isArrayOutputSchema, Ct as scopesAllowDeviceCap, D as addonSettingsCapability, Gt as asJsonObject$1, Ht as ReadinessRegistry, It as DATAPLANE_SECRET_HEADER$1, Jt as createEvent, Kt as asNumber, Lt as DEVICE_SETTINGS_CONTRIBUTION_METHODS, Pt as errMsg$1, Rt as DEVICE_STATUS_METHOD, St as scopesAllowAddon, Ut as ReadinessTimeoutError, X as extractNestedAddonId, Yt as emitDownForOwnedCaps, Zt as expandCapMethods, an as scopeKey, at as kebabToCamel, bt as resolveMethodAuth, et as isCollectionArrayMethod, g as RUNTIME_DEFAULTS, gt as procedureAuthKey, in as resolveCapMount, it as isVoidInput, lt as logLevelAtMost, m as METHOD_ACCESS_MAP, nn as parseJsonUnknown, ot as lifecycleJobSchema, p as LOG_LEVEL_RANK, pt as objectInputDeclaresAddonId, qt as asString$1, rn as readinessKey, sn as EventCategory$1, t as ALL_CAPABILITY_DEFINITIONS, tn as parseJsonObject, tt as isObjectInput, ut as looseSchema } from "./dist-n6kxbqqp.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";
@@ -26,7 +26,7 @@ import "./builtins/system-config/index.mjs";
26
26
  import { WinstonDestination, WinstonLoggingAddon } from "./builtins/winston-logging/index.mjs";
27
27
  import { a as parseTokenizedUrl, c as collectModelFiles, d as downloadModel, f as ensureModel, h as isModelDownloaded, i as parseRangeHeader, l as deleteModelFromDisk, m as getModelFilePath, n as contentTypeFor, o as resolveFilePath, p as fetchJson, r as createAuthenticatedFileServer, s as ModelDownloadService, t as createFileDataPlaneHandler, u as downloadFile } from "./file-data-plane-BhKdxJgf.mjs";
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-DOTmtLCW.mjs";
29
- import { $ as buildUdsNativeCapProxy, $t as formatHeapSpaces, A as createUdsLoggerWithControl, At as HUB_MAIN_RSS_BUDGET_MB, B as readMoleculerFanoutMode, Bt as createV8Reclaimer, C as ipcParentLink, Ct as createAddonDataPlaneFacility, D as createUdsEventBus, Dt as HEAP_WATCH_INTERVAL_MS, E as createUdsEventBridge, Et as HEAP_RECLAIM_TRIGGER_MB, F as AGENT_CAP_FWD_SERVICE, Ft as RUNNER_RSS_BUDGET_ENV, G as createLocalTransport, Gt as reclaimIntervalMs, H as PARENT_ROUTED_PROVIDER_ADDON_ID, Ht as hubMainRssBudget, I as CapRouteResolver, It as ZERO_LOOP_DELAY, J as SocketChannel, Jt as startRunnerHeapWatch, K as UdsLocalTransportClient, Kt as shouldReclaim, L as CapRouteError, Lt as buildHeapSample, M as LocalChildRegistry, Mt as RSS_BUDGET_REANNOUNCE_MIN_MS, N as UDS_NO_ROUTE_PREFIX, Nt as RSS_BUDGET_RELEASE_RATIO, O as udsChildLogToWorkerEntry, Ot as HEAP_WATCH_WARN_RATIO, P as AGENT_CAP_FWD_ACTION, Pt as RUNNER_HEAP_WATCH_INTERVAL_MS, Q as buildNativeCapProxy, Qt as emitHeapDiagnosticReport, R as classifyCapRoute, Rt as createDeferredHeapWatchSink, S as buildLinkChain, St as runNpm, T as createParentUnownedCallHandler, Tt as HEAP_RECLAIM_STEADY_STATE_INTERVAL_MS, U as __resetCapUsageRegistryForTests, Ut as nextRssBudgetState, V as CapUsageRegistry, Vt as describeRss, W as getCapUsageRegistry, Wt as parseRssBudgetMb, X as FrameDecoder, Xt as DECISIVE_HEAP_SPACES, Y as localEndpointPath, Yt as strandedMb, Z as encodeFrame, Zt as HEAP_SPACE_REPORT_MIN_MB, _ as AddonDepsManager, _n as createEventPlaneReader, _t as CapabilityUnavailableError, a as createUdsAddonContext, an as createSocketPlaneMeter, at as createAddonService, b as brokerCallForCap, bt as resolveAddonClass, c as getOrInitReadinessRegistryForClient, cn as formatSocketPlane, ct as capActionName, d as clusterEventTopic, dn as recordSocketFrame, dt as capServiceName, en as heapSpaceField, et as createBrokerDeviceManagerApi, f as getBrokerEventBus, fn as sampleSocketDirection, ft as parseCapAction, g as subscribePassthrough, gn as createEventPlaneMeter, gt as CapabilityHandle, h as setNodeEventInterest, hn as EVENT_PLANE_TOP_N, ht as DeviceRegistry, i as createAddonContext, in as SOCKET_PLANE_TOP_N, j as LocalChildClient, jt as HUB_RSS_BUDGET_ENV, k as createUdsLogger, kt as HUB_MAIN_HEAP_WATCH_LABEL, l as setHubConnected, ln as EMPTY_SOCKET_DIRECTION, lt as capActionSuffix, m as registerEventBusService, mn as socketDirectionMessages, mt as serializeTypedArrays, n as installManifestPythonDeps, nn as selectReportedSpaces, o as getWorkerDeviceRegistry, on as createSocketPlaneReader, ot as validateProviderRegistrations, p as getMoleculerEventStats, pn as socketDirectionBytes, pt as deserializeTypedArrays, q as UdsLocalTransportServer, qt as startHeapWatch, r as adaptBrokerToCluster, rn as EMPTY_SOCKET_PLANE_BASELINE, rt as mountNativeCapService, s as getOrInitReadinessRegistry, sn as diffSocketPlane, st as NATIVE_PROVIDER_SERVICE_INFIX, t as installManifestSystemDeps, tn as readHeapSpaces, u as EVENT_TOPIC_PREFIX, un as createSocketDirectionCounters, ut as capBareAction, v as createKernelHwAccel, vn as diffEventPlane, vt as copyBundledNativeModules, w as localProviderLink, wt as HEAP_RECLAIM_MIN_INTERVAL_MS, x as brokerTransportLink, xt as resolveNpmInvocation, y as resolveHwAccel, yn as formatEventPlane, yt as installManifestNativeDeps, z as callWithServiceDiscovery, zt as createLoopDelayMeter } from "./manifest-system-deps-CYKgsQ_b.mjs";
29
+ import { $ as buildUdsNativeCapProxy, $t as formatHeapSpaces, A as createUdsLoggerWithControl, At as HUB_MAIN_RSS_BUDGET_MB, B as readMoleculerFanoutMode, Bt as createV8Reclaimer, C as ipcParentLink, Ct as createAddonDataPlaneFacility, D as createUdsEventBus, Dt as HEAP_WATCH_INTERVAL_MS, E as createUdsEventBridge, Et as HEAP_RECLAIM_TRIGGER_MB, F as AGENT_CAP_FWD_SERVICE, Ft as RUNNER_RSS_BUDGET_ENV, G as createLocalTransport, Gt as reclaimIntervalMs, H as PARENT_ROUTED_PROVIDER_ADDON_ID, Ht as hubMainRssBudget, I as CapRouteResolver, It as ZERO_LOOP_DELAY, J as SocketChannel, Jt as startRunnerHeapWatch, K as UdsLocalTransportClient, Kt as shouldReclaim, L as CapRouteError, Lt as buildHeapSample, M as LocalChildRegistry, Mt as RSS_BUDGET_REANNOUNCE_MIN_MS, N as UDS_NO_ROUTE_PREFIX, Nt as RSS_BUDGET_RELEASE_RATIO, O as udsChildLogToWorkerEntry, Ot as HEAP_WATCH_WARN_RATIO, P as AGENT_CAP_FWD_ACTION, Pt as RUNNER_HEAP_WATCH_INTERVAL_MS, Q as buildNativeCapProxy, Qt as emitHeapDiagnosticReport, R as classifyCapRoute, Rt as createDeferredHeapWatchSink, S as buildLinkChain, St as runNpm, T as createParentUnownedCallHandler, Tt as HEAP_RECLAIM_STEADY_STATE_INTERVAL_MS, U as __resetCapUsageRegistryForTests, Ut as nextRssBudgetState, V as CapUsageRegistry, Vt as describeRss, W as getCapUsageRegistry, Wt as parseRssBudgetMb, X as FrameDecoder, Xt as DECISIVE_HEAP_SPACES, Y as localEndpointPath, Yt as strandedMb, Z as encodeFrame, Zt as HEAP_SPACE_REPORT_MIN_MB, _ as AddonDepsManager, _n as createEventPlaneReader, _t as CapabilityUnavailableError, a as createUdsAddonContext, an as createSocketPlaneMeter, at as createAddonService, b as brokerCallForCap, bt as resolveAddonClass, c as getOrInitReadinessRegistryForClient, cn as formatSocketPlane, ct as capActionName, d as clusterEventTopic, dn as recordSocketFrame, dt as capServiceName, en as heapSpaceField, et as createBrokerDeviceManagerApi, f as getBrokerEventBus, fn as sampleSocketDirection, ft as parseCapAction, g as subscribePassthrough, gn as createEventPlaneMeter, gt as CapabilityHandle, h as setNodeEventInterest, hn as EVENT_PLANE_TOP_N, ht as DeviceRegistry, i as createAddonContext, in as SOCKET_PLANE_TOP_N, j as LocalChildClient, jt as HUB_RSS_BUDGET_ENV, k as createUdsLogger, kt as HUB_MAIN_HEAP_WATCH_LABEL, l as setHubConnected, ln as EMPTY_SOCKET_DIRECTION, lt as capActionSuffix, m as registerEventBusService, mn as socketDirectionMessages, mt as serializeTypedArrays, n as installManifestPythonDeps, nn as selectReportedSpaces, o as getWorkerDeviceRegistry, on as createSocketPlaneReader, ot as validateProviderRegistrations, p as getMoleculerEventStats, pn as socketDirectionBytes, pt as deserializeTypedArrays, q as UdsLocalTransportServer, qt as startHeapWatch, r as adaptBrokerToCluster, rn as EMPTY_SOCKET_PLANE_BASELINE, rt as mountNativeCapService, s as getOrInitReadinessRegistry, sn as diffSocketPlane, st as NATIVE_PROVIDER_SERVICE_INFIX, t as installManifestSystemDeps, tn as readHeapSpaces, u as EVENT_TOPIC_PREFIX, un as createSocketDirectionCounters, ut as capBareAction, v as createKernelHwAccel, vn as diffEventPlane, vt as copyBundledNativeModules, w as localProviderLink, wt as HEAP_RECLAIM_MIN_INTERVAL_MS, x as brokerTransportLink, xt as resolveNpmInvocation, y as resolveHwAccel, yn as formatEventPlane, yt as installManifestNativeDeps, z as callWithServiceDiscovery, zt as createLoopDelayMeter } from "./manifest-system-deps-726RBOX7.mjs";
30
30
  import { n as getSinglePidStats, t as getPidStats } from "./resource-monitor-BWmQ5i-o.mjs";
31
31
  import { t as CustomActionRegistry } from "./custom-action-registry-F__gp_VX.mjs";
32
32
  import { z } from "zod";
@@ -1504,7 +1504,8 @@ function createAddonDataPlaneFacility(args) {
1504
1504
  prefix,
1505
1505
  access: entry.access,
1506
1506
  baseUrl,
1507
- secret
1507
+ secret,
1508
+ ...entry.share !== void 0 ? { share: entry.share } : {}
1508
1509
  }));
1509
1510
  args.sink?.set(args.addonId, endpoints);
1510
1511
  };
@@ -1514,7 +1515,8 @@ function createAddonDataPlaneFacility(args) {
1514
1515
  await ensureServer();
1515
1516
  served.set(prefix, {
1516
1517
  access: options.access,
1517
- handler: options.handler
1518
+ handler: options.handler,
1519
+ ...options.share !== void 0 ? { share: options.share } : {}
1518
1520
  });
1519
1521
  publish();
1520
1522
  args.logger.info("data-plane endpoint served", { meta: {
@@ -1507,7 +1507,8 @@ function createAddonDataPlaneFacility(args) {
1507
1507
  prefix,
1508
1508
  access: entry.access,
1509
1509
  baseUrl,
1510
- secret
1510
+ secret,
1511
+ ...entry.share !== void 0 ? { share: entry.share } : {}
1511
1512
  }));
1512
1513
  args.sink?.set(args.addonId, endpoints);
1513
1514
  };
@@ -1517,7 +1518,8 @@ function createAddonDataPlaneFacility(args) {
1517
1518
  await ensureServer();
1518
1519
  served.set(prefix, {
1519
1520
  access: options.access,
1520
- handler: options.handler
1521
+ handler: options.handler,
1522
+ ...options.share !== void 0 ? { share: options.share } : {}
1521
1523
  });
1522
1524
  publish();
1523
1525
  args.logger.info("data-plane endpoint served", { meta: {
@@ -1,4 +1,4 @@
1
- import { Gt as asJsonObject } from "./dist-D0_hqbgc.mjs";
1
+ import { Gt as asJsonObject } from "./dist-n6kxbqqp.mjs";
2
2
  //#region src/builtins/sqlite-storage/retired-settings-keys.ts
3
3
  /**
4
4
  * Is THIS node the one whose settings store is the cluster's authority?
@@ -1,4 +1,4 @@
1
- const require_dist = require("./dist-DlL8iWQo.js");
1
+ const require_dist = require("./dist-2wpm3tOu.js");
2
2
  //#region src/builtins/sqlite-storage/retired-settings-keys.ts
3
3
  /**
4
4
  * Is THIS node the one whose settings store is the cluster's authority?
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/system",
3
- "version": "1.2.188",
3
+ "version": "1.2.190",
4
4
  "description": "Core addon for CamStack — builtins, pipeline, process management, auth, logging, events",
5
5
  "keywords": [
6
6
  "camstack",