@camstack/system 1.2.436 → 1.2.438

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 (96) hide show
  1. package/dist/addon-runner.js +64 -12
  2. package/dist/addon-runner.mjs +65 -13
  3. package/dist/{agent-https-B8lKYVtU.mjs → agent-https-BPfHrI4c.mjs} +3 -3
  4. package/dist/auth/login-session-manager.d.ts +2 -0
  5. package/dist/auth/session-revocation-bus.d.ts +32 -0
  6. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.js +1 -1
  7. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.mjs +1 -1
  8. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.js +1 -1
  9. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.mjs +1 -1
  10. package/dist/builtins/alerts/alerts.addon.js +7 -1
  11. package/dist/builtins/alerts/alerts.addon.mjs +7 -1
  12. package/dist/builtins/autotrack/index.js +1 -1
  13. package/dist/builtins/autotrack/index.mjs +1 -1
  14. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.js +2 -2
  15. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.mjs +2 -2
  16. package/dist/builtins/calendars/calendars.addon.js +1 -1
  17. package/dist/builtins/calendars/calendars.addon.mjs +1 -1
  18. package/dist/builtins/camera-grid/index.js +9 -1
  19. package/dist/builtins/camera-grid/index.mjs +9 -1
  20. package/dist/builtins/composer/composer.addon.js +2 -2
  21. package/dist/builtins/composer/composer.addon.mjs +2 -2
  22. package/dist/builtins/console-logging/index.js +12 -5
  23. package/dist/builtins/console-logging/index.mjs +12 -5
  24. package/dist/builtins/core-blocks/core-blocks.addon.js +2 -2
  25. package/dist/builtins/core-blocks/core-blocks.addon.mjs +5 -5
  26. package/dist/builtins/device-manager/device-manager.addon.d.ts +5 -0
  27. package/dist/builtins/device-manager/device-manager.addon.js +702 -28
  28. package/dist/builtins/device-manager/device-manager.addon.mjs +702 -28
  29. package/dist/builtins/device-manager/device-meta-types.d.ts +4 -0
  30. package/dist/builtins/device-manager/device-provider-context.d.ts +9 -0
  31. package/dist/builtins/device-manager/device-removal-hooks.d.ts +103 -0
  32. package/dist/builtins/device-manager/device-row-store.d.ts +1 -0
  33. package/dist/builtins/device-manager/device-tombstone-store.d.ts +58 -0
  34. package/dist/builtins/device-manager/removal-cleanup.d.ts +50 -0
  35. package/dist/builtins/hub-forwarder/index.js +1 -1
  36. package/dist/builtins/hub-forwarder/index.mjs +1 -1
  37. package/dist/builtins/keychain/index.js +37 -4
  38. package/dist/builtins/keychain/index.mjs +37 -4
  39. package/dist/builtins/keychain/keychain-service.d.ts +14 -0
  40. package/dist/builtins/keychain/keychain-store.d.ts +1 -1
  41. package/dist/builtins/liveness-monitor/liveness-monitor.addon.js +1 -1
  42. package/dist/builtins/liveness-monitor/liveness-monitor.addon.mjs +1 -1
  43. package/dist/builtins/local-auth/local-auth.addon.js +53 -12
  44. package/dist/builtins/local-auth/local-auth.addon.mjs +53 -13
  45. package/dist/builtins/local-network/local-network.addon.js +10 -1
  46. package/dist/builtins/local-network/local-network.addon.mjs +13 -4
  47. package/dist/builtins/loki-logging/index.js +28 -5
  48. package/dist/builtins/loki-logging/index.mjs +28 -5
  49. package/dist/builtins/native-metrics/native-metrics.addon.js +11 -1
  50. package/dist/builtins/native-metrics/native-metrics.addon.mjs +20 -10
  51. package/dist/builtins/platform-probe/index.js +1 -1
  52. package/dist/builtins/platform-probe/index.mjs +8 -8
  53. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.js +1 -1
  54. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.mjs +1 -1
  55. package/dist/builtins/snapshot/index.js +11 -1
  56. package/dist/builtins/snapshot/index.mjs +11 -1
  57. package/dist/builtins/sqlite-storage/filesystem-storage.addon.js +4 -1
  58. package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs +4 -1
  59. package/dist/builtins/sqlite-storage/index.js +1 -1
  60. package/dist/builtins/sqlite-storage/index.mjs +1 -1
  61. package/dist/builtins/sqlite-storage/sqlite-settings.addon.js +3 -3
  62. package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +3 -3
  63. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js +1 -1
  64. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs +1 -1
  65. package/dist/builtins/system-config/system-config.addon.d.ts +9 -0
  66. package/dist/builtins/system-config/system-config.addon.js +135 -72
  67. package/dist/builtins/system-config/system-config.addon.mjs +135 -73
  68. package/dist/builtins/winston-logging/index.js +14 -5
  69. package/dist/builtins/winston-logging/index.mjs +14 -5
  70. package/dist/{composition-sources-BAOlCu4j.js → composition-sources-DI3Z83vG.js} +1 -1
  71. package/dist/{composition-sources-gN_BWUKp.mjs → composition-sources-DpHGCjdL.mjs} +1 -1
  72. package/dist/{constants-BFpowodq.mjs → constants-DQK705Sb.mjs} +1 -1
  73. package/dist/{constants-GENKqk9k.js → constants-wkcn5Ij3.js} +1 -1
  74. package/dist/{device-ca-CuWuRW9N.js → device-ca-BSvkXqyI.js} +1 -1
  75. package/dist/{device-ca-BNM5ai4t.mjs → device-ca-DvIZjXIl.mjs} +1 -1
  76. package/dist/{dist-DjD2M79P.mjs → dist-Dc8GKC5H.mjs} +301 -6
  77. package/dist/{dist-DVe0Nsp8.js → dist-GgG-7amw.js} +348 -5
  78. package/dist/file-host-worker.js +1 -1
  79. package/dist/file-host-worker.mjs +1 -1
  80. package/dist/{hub-mdns-ciao-DJRwtlA8.mjs → hub-mdns-ciao-DMlQTdPU.mjs} +1 -1
  81. package/dist/i18n/catalog-registry.d.ts +35 -0
  82. package/dist/i18n/index.d.ts +2 -0
  83. package/dist/index.d.ts +3 -0
  84. package/dist/index.js +666 -21
  85. package/dist/index.mjs +676 -38
  86. package/dist/kernel/gc-census.d.ts +18 -1
  87. package/dist/kernel/settings-view-types.d.ts +2 -0
  88. package/dist/kernel/transport/local-transport.d.ts +3 -0
  89. package/dist/kernel/transport/peer-answered-error.d.ts +5 -1
  90. package/dist/{restore-archive-D4h904rb.js → restore-archive-CTRz8v9o.js} +1 -1
  91. package/dist/{restore-archive-BxmP1ChO.mjs → restore-archive-DPg9duVY.mjs} +1 -1
  92. package/dist/{retired-settings-keys-CYP5IZJ5.js → retired-settings-keys-Dr_4lfKu.js} +1 -1
  93. package/dist/{retired-settings-keys-CQaknvx1.mjs → retired-settings-keys-Is0zO8gX.mjs} +1 -1
  94. package/dist/{wal-maintenance-CaDsrJM_.mjs → wal-maintenance-Bx3lcVA7.mjs} +0 -0
  95. package/dist/{wal-maintenance-Br60onAQ.js → wal-maintenance-mjB2i-VR.js} +0 -0
  96. package/package.json +1 -1
@@ -1,6 +1,6 @@
1
- import { Lr as createEvent, On as reducePoints, Wt as foldSnapshotByFunction, br as errMsg, di as EventCategory, hn as metricsProviderCapability, jn as resolveBucketMs, xr as BaseAddon } from "../../dist-DjD2M79P.mjs";
1
+ import { Dr as errMsg, In as resolveBucketMs, Jt as foldSnapshotByFunction, Nn as reducePoints, Or as BaseAddon, Wr as createEvent, bn as metricsProviderCapability, yi as EventCategory } from "../../dist-Dc8GKC5H.mjs";
2
2
  import { access, readFile, readdir } from "node:fs/promises";
3
- import * as os from "node:os";
3
+ import * as os$1 from "node:os";
4
4
  import { platform } from "node:os";
5
5
  import * as fs from "node:fs";
6
6
  import { constants, readFileSync } from "node:fs";
@@ -2008,8 +2008,8 @@ async function readNvidiaGpu(deps) {
2008
2008
  }
2009
2009
  //#endregion
2010
2010
  //#region src/builtins/native-metrics/native-metrics-provider.ts
2011
- var IS_DARWIN = os.platform() === "darwin";
2012
- var IS_LINUX = os.platform() === "linux";
2011
+ var IS_DARWIN = os$1.platform() === "darwin";
2012
+ var IS_LINUX = os$1.platform() === "linux";
2013
2013
  var NativeMetricsProvider = class {
2014
2014
  id = "native";
2015
2015
  cachedSnapshot = null;
@@ -2149,14 +2149,14 @@ var NativeMetricsProvider = class {
2149
2149
  system: pct(dSys),
2150
2150
  irq: pct(dIrq),
2151
2151
  nice: pct(dNice),
2152
- loadAvg: os.loadavg(),
2153
- cores: os.cpus().length
2152
+ loadAvg: os$1.loadavg(),
2153
+ cores: os$1.cpus().length
2154
2154
  };
2155
2155
  }
2156
2156
  /** Cached macOS memory (set by sampleMacMemory timer). */
2157
2157
  _cachedMacMem = null;
2158
2158
  getMemoryInfo() {
2159
- const total = os.totalmem();
2159
+ const total = os$1.totalmem();
2160
2160
  if (total === 0) return {
2161
2161
  percent: 0,
2162
2162
  totalBytes: 0,
@@ -2166,7 +2166,7 @@ var NativeMetricsProvider = class {
2166
2166
  swapTotalBytes: 0
2167
2167
  };
2168
2168
  if (IS_DARWIN && this._cachedMacMem !== null) return this._cachedMacMem;
2169
- const free = os.freemem();
2169
+ const free = os$1.freemem();
2170
2170
  const used = total - free;
2171
2171
  let swapUsedBytes = 0;
2172
2172
  let swapTotalBytes = 0;
@@ -2188,7 +2188,7 @@ var NativeMetricsProvider = class {
2188
2188
  }
2189
2189
  };
2190
2190
  function aggregateCpuTimes() {
2191
- const cpus = os.cpus();
2191
+ const cpus = os$1.cpus();
2192
2192
  let user = 0, nice = 0, sys = 0, irq = 0, idle = 0;
2193
2193
  for (const cpu of cpus) {
2194
2194
  user += cpu.times.user;
@@ -2221,7 +2221,7 @@ function sampleMacMemory(provider) {
2221
2221
  const purgeable = parse("Pages purgeable");
2222
2222
  const speculative = parse("Pages speculative");
2223
2223
  const available = free + inactive + purgeable + speculative;
2224
- const total = os.totalmem();
2224
+ const total = os$1.totalmem();
2225
2225
  const used = total - available;
2226
2226
  let swapUsedBytes = 0;
2227
2227
  let swapTotalBytes = 0;
@@ -3506,11 +3506,14 @@ var NativeMetricsAddon = class NativeMetricsAddon extends BaseAddon {
3506
3506
  return this.schema({ sections: [{
3507
3507
  id: "native-metrics-settings",
3508
3508
  title: "System Metrics",
3509
+ titleKey: "server:globalSettings.s_native-metrics-settings.title",
3509
3510
  fields: [this.field({
3510
3511
  type: "number",
3511
3512
  key: "samplingIntervalMs",
3512
3513
  label: "Sampling Interval",
3514
+ labelKey: "server:globalSettings.s_native-metrics-settings.samplingIntervalMs.label",
3513
3515
  description: "How often to collect system metrics",
3516
+ descriptionKey: "server:globalSettings.s_native-metrics-settings.samplingIntervalMs.description",
3514
3517
  min: 1e3,
3515
3518
  max: 6e4,
3516
3519
  step: 1e3,
@@ -3520,12 +3523,15 @@ var NativeMetricsAddon = class NativeMetricsAddon extends BaseAddon {
3520
3523
  }, {
3521
3524
  id: "native-metrics-load-series",
3522
3525
  title: "Load history",
3526
+ titleKey: "server:globalSettings.s_native-metrics-load-series.title",
3523
3527
  fields: [
3524
3528
  this.field({
3525
3529
  type: "number",
3526
3530
  key: "loadSeriesCadenceSec",
3527
3531
  label: "Sampling cadence",
3532
+ labelKey: "server:globalSettings.s_native-metrics-load-series.loadSeriesCadenceSec.label",
3528
3533
  description: "How often every node reports its process tree. FIXED — a sample is emitted on every interval whether or not anything changed, so a gap in the chart means one thing only: nobody reported. Outside 5-60 s the value is refused.",
3534
+ descriptionKey: "server:globalSettings.s_native-metrics-load-series.loadSeriesCadenceSec.description",
3529
3535
  min: 5,
3530
3536
  max: 60,
3531
3537
  step: 1,
@@ -3536,7 +3542,9 @@ var NativeMetricsAddon = class NativeMetricsAddon extends BaseAddon {
3536
3542
  type: "number",
3537
3543
  key: "loadSeriesRetentionHours",
3538
3544
  label: "Retention",
3545
+ labelKey: "server:globalSettings.s_native-metrics-load-series.loadSeriesRetentionHours.label",
3539
3546
  description: "How long the load history is kept on disk (the hub database, on the NVMe cache — never the recordings disk). This is the INTENTION; the row cap below is the guarantee.",
3547
+ descriptionKey: "server:globalSettings.s_native-metrics-load-series.loadSeriesRetentionHours.description",
3540
3548
  min: 1,
3541
3549
  max: 72,
3542
3550
  step: 1,
@@ -3547,6 +3555,7 @@ var NativeMetricsAddon = class NativeMetricsAddon extends BaseAddon {
3547
3555
  type: "info",
3548
3556
  key: "load-series-cost",
3549
3557
  label: "What this configuration costs",
3558
+ labelKey: "server:globalSettings.s_native-metrics-load-series.load-series-cost.label",
3550
3559
  content: describeLoadSeriesCost(projection),
3551
3560
  variant: projection.capBites ? "warning" : "info"
3552
3561
  },
@@ -3554,6 +3563,7 @@ var NativeMetricsAddon = class NativeMetricsAddon extends BaseAddon {
3554
3563
  type: "info",
3555
3564
  key: "load-series-cap",
3556
3565
  label: "Hard row cap",
3566
+ labelKey: "server:globalSettings.s_native-metrics-load-series.load-series-cap.label",
3557
3567
  content: `The table never exceeds ${this.loadConfig.maxRows.toLocaleString("en-US")} rows. When it would, the OLDEST samples are evicted and a warning is logged — so raising the retention can never turn into an incident, only into a shorter effective window.`,
3558
3568
  variant: "info"
3559
3569
  }
@@ -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-DVe0Nsp8.js");
6
+ const require_dist = require("../../dist-GgG-7amw.js");
7
7
  let node_os = require("node:os");
8
8
  node_os = require_chunk.__toESM(node_os);
9
9
  let node_fs = require("node:fs");
@@ -1,6 +1,6 @@
1
1
  import { o as __toESM, r as __exportAll } from "../../chunk-CNf5ZN-e.mjs";
2
- import { Ft as enumerateInferenceDevices, Tn as platformProbeCapability, Vn as scoreRuntimes, Vr as emitReadiness, br as errMsg, di as EventCategory, xr as BaseAddon } from "../../dist-DjD2M79P.mjs";
3
- import * as os from "node:os";
2
+ import { An as platformProbeCapability, Dr as errMsg, Jr as emitReadiness, Kn as scoreRuntimes, Or as BaseAddon, yi as EventCategory, zt as enumerateInferenceDevices } from "../../dist-Dc8GKC5H.mjs";
3
+ import * as os$1 from "node:os";
4
4
  import * as fs from "node:fs";
5
5
  import { execFile } from "node:child_process";
6
6
  import { promisify } from "node:util";
@@ -336,7 +336,7 @@ async function getAvailableRAM_MB() {
336
336
  return Math.round(mem.available / 1024 / 1024);
337
337
  } catch (err) {
338
338
  console.debug(`systeminformation not available, using platform-specific RAM probe: ${errMsg(err)}`);
339
- const platform = os.platform();
339
+ const platform = os$1.platform();
340
340
  try {
341
341
  if (platform === "darwin") {
342
342
  const { stdout: output } = await execFileAsync("vm_stat", [], {
@@ -356,7 +356,7 @@ async function getAvailableRAM_MB() {
356
356
  } catch (probeErr) {
357
357
  console.debug(`RAM probe failed, using total RAM fallback: ${errMsg(probeErr)}`);
358
358
  }
359
- return Math.round(os.totalmem() / 1024 / 1024);
359
+ return Math.round(os$1.totalmem() / 1024 / 1024);
360
360
  }
361
361
  }
362
362
  var PlatformScorer = class {
@@ -443,12 +443,12 @@ var PlatformScorer = class {
443
443
  return this.cached;
444
444
  }
445
445
  async probeHardware() {
446
- const platform = os.platform();
447
- const arch = os.arch();
448
- const cpus = os.cpus();
446
+ const platform = os$1.platform();
447
+ const arch = os$1.arch();
448
+ const cpus = os$1.cpus();
449
449
  const cpuModel = cpus[0]?.model ?? "unknown";
450
450
  const cpuCores = cpus.length;
451
- const totalRAM_MB = Math.round(os.totalmem() / 1024 / 1024);
451
+ const totalRAM_MB = Math.round(os$1.totalmem() / 1024 / 1024);
452
452
  const availableRAM_MB = await getAvailableRAM_MB();
453
453
  this.logger.debug("RAM probed", { meta: {
454
454
  totalRAM_MB,
@@ -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-DVe0Nsp8.js");
6
+ const require_dist = require("../../dist-GgG-7amw.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 { di as EventCategory, xr as BaseAddon } from "../../dist-DjD2M79P.mjs";
1
+ import { Or as BaseAddon, yi as EventCategory } from "../../dist-Dc8GKC5H.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-DVe0Nsp8.js");
6
+ const require_dist = require("../../dist-GgG-7amw.js");
7
7
  const require_snapshot_courtesy = require("../../snapshot-courtesy-D_C5-nC0.js");
8
8
  let zod = require("zod");
9
9
  let node_crypto = require("node:crypto");
@@ -1707,13 +1707,17 @@ var SnapshotAddon = class SnapshotAddon extends require_dist.BaseAddon {
1707
1707
  return this.schema({ sections: [{
1708
1708
  id: "snapshot-cache",
1709
1709
  title: "Snapshot Cache",
1710
+ titleKey: "server:globalSettings.s_snapshot-cache.title",
1710
1711
  description: "Stale fallback when live capture fails. Per-device freshness is configured under Device → Snapshot → Max cache age.",
1712
+ descriptionKey: "server:globalSettings.s_snapshot-cache.description",
1711
1713
  columns: 1,
1712
1714
  fields: [this.field({
1713
1715
  type: "number",
1714
1716
  key: "staleTtlMs",
1715
1717
  label: "Stale fallback TTL (ms)",
1718
+ labelKey: "server:globalSettings.s_snapshot-cache.staleTtlMs.label",
1716
1719
  description: "If live capture fails, cached snapshot younger than this is still returned.",
1720
+ descriptionKey: "server:globalSettings.s_snapshot-cache.staleTtlMs.description",
1717
1721
  min: 0,
1718
1722
  max: 36e5,
1719
1723
  step: 1e3,
@@ -2322,6 +2326,7 @@ var SnapshotAddon = class SnapshotAddon extends require_dist.BaseAddon {
2322
2326
  return { sections: [{
2323
2327
  id: "snapshot-preferences",
2324
2328
  title: "Snapshot",
2329
+ titleKey: "server:deviceSettingsContribution.s_snapshot-preferences.title",
2325
2330
  tab: "snapshot",
2326
2331
  order: 60,
2327
2332
  fields: [
@@ -2329,7 +2334,9 @@ var SnapshotAddon = class SnapshotAddon extends require_dist.BaseAddon {
2329
2334
  type: "select",
2330
2335
  key: "snapshotStreamId",
2331
2336
  label: "Preferred stream",
2337
+ labelKey: "server:deviceSettingsContribution.s_snapshot-preferences.snapshotStreamId.label",
2332
2338
  description: "Stream used when grabbing a snapshot",
2339
+ descriptionKey: "server:deviceSettingsContribution.s_snapshot-preferences.snapshotStreamId.description",
2333
2340
  options: streamOptions,
2334
2341
  required: true,
2335
2342
  value: current.snapshotStreamId || "auto"
@@ -2338,6 +2345,7 @@ var SnapshotAddon = class SnapshotAddon extends require_dist.BaseAddon {
2338
2345
  type: "number",
2339
2346
  key: "snapshotMaxAgeS",
2340
2347
  label: "Max cache age (s)",
2348
+ labelKey: "server:deviceSettingsContribution.s_snapshot-preferences.snapshotMaxAgeS.label",
2341
2349
  description: `Serve cached snapshot up to this age before re-capturing. Default ${defaultMaxAgeS}s for ${isBattery ? "battery cams (avoids gratuitous wake-ups)" : "non-battery cams (live-feel)"}. The UI refresh button always forces a fresh capture regardless of this value.`,
2342
2350
  min: 0,
2343
2351
  max: 24 * 3600,
@@ -2348,7 +2356,9 @@ var SnapshotAddon = class SnapshotAddon extends require_dist.BaseAddon {
2348
2356
  type: "boolean",
2349
2357
  key: "snapshotDebug",
2350
2358
  label: "Debug logging",
2359
+ labelKey: "server:deviceSettingsContribution.s_snapshot-preferences.snapshotDebug.label",
2351
2360
  description: "Log stream selection and timing details for this device.",
2361
+ descriptionKey: "server:deviceSettingsContribution.s_snapshot-preferences.snapshotDebug.description",
2352
2362
  value: current.snapshotDebug ?? false
2353
2363
  }
2354
2364
  ]
@@ -1,4 +1,4 @@
1
- import { Ot as deriveBatteryPresence, Wn as snapshotCapability, Xn as streamQualityLabel, Zr as nodePin, _r as DeviceFeature, at as batteryCapability, br as errMsg, di as EventCategory, it as bareAddonId, mn as memoizePinnedFfmpeg, s as BatteryStatusSchema, xr as BaseAddon, yr as DeviceType } from "../../dist-DjD2M79P.mjs";
1
+ import { Dr as errMsg, Er as DeviceType, Mt as deriveBatteryPresence, Or as BaseAddon, Xn as snapshotCapability, ct as bareAddonId, ii as nodePin, lt as batteryCapability, rr as streamQualityLabel, s as BatteryStatusSchema, wr as DeviceFeature, yi as EventCategory, yn as memoizePinnedFfmpeg } from "../../dist-Dc8GKC5H.mjs";
2
2
  import { i as renderCourtesyOverlayJpeg, n as courtesyCacheKey, r as renderCourtesyJpeg } from "../../snapshot-courtesy-CyFs1M3I.mjs";
3
3
  import { z } from "zod";
4
4
  import { randomUUID } from "node:crypto";
@@ -1701,13 +1701,17 @@ var SnapshotAddon = class SnapshotAddon extends BaseAddon {
1701
1701
  return this.schema({ sections: [{
1702
1702
  id: "snapshot-cache",
1703
1703
  title: "Snapshot Cache",
1704
+ titleKey: "server:globalSettings.s_snapshot-cache.title",
1704
1705
  description: "Stale fallback when live capture fails. Per-device freshness is configured under Device → Snapshot → Max cache age.",
1706
+ descriptionKey: "server:globalSettings.s_snapshot-cache.description",
1705
1707
  columns: 1,
1706
1708
  fields: [this.field({
1707
1709
  type: "number",
1708
1710
  key: "staleTtlMs",
1709
1711
  label: "Stale fallback TTL (ms)",
1712
+ labelKey: "server:globalSettings.s_snapshot-cache.staleTtlMs.label",
1710
1713
  description: "If live capture fails, cached snapshot younger than this is still returned.",
1714
+ descriptionKey: "server:globalSettings.s_snapshot-cache.staleTtlMs.description",
1711
1715
  min: 0,
1712
1716
  max: 36e5,
1713
1717
  step: 1e3,
@@ -2316,6 +2320,7 @@ var SnapshotAddon = class SnapshotAddon extends BaseAddon {
2316
2320
  return { sections: [{
2317
2321
  id: "snapshot-preferences",
2318
2322
  title: "Snapshot",
2323
+ titleKey: "server:deviceSettingsContribution.s_snapshot-preferences.title",
2319
2324
  tab: "snapshot",
2320
2325
  order: 60,
2321
2326
  fields: [
@@ -2323,7 +2328,9 @@ var SnapshotAddon = class SnapshotAddon extends BaseAddon {
2323
2328
  type: "select",
2324
2329
  key: "snapshotStreamId",
2325
2330
  label: "Preferred stream",
2331
+ labelKey: "server:deviceSettingsContribution.s_snapshot-preferences.snapshotStreamId.label",
2326
2332
  description: "Stream used when grabbing a snapshot",
2333
+ descriptionKey: "server:deviceSettingsContribution.s_snapshot-preferences.snapshotStreamId.description",
2327
2334
  options: streamOptions,
2328
2335
  required: true,
2329
2336
  value: current.snapshotStreamId || "auto"
@@ -2332,6 +2339,7 @@ var SnapshotAddon = class SnapshotAddon extends BaseAddon {
2332
2339
  type: "number",
2333
2340
  key: "snapshotMaxAgeS",
2334
2341
  label: "Max cache age (s)",
2342
+ labelKey: "server:deviceSettingsContribution.s_snapshot-preferences.snapshotMaxAgeS.label",
2335
2343
  description: `Serve cached snapshot up to this age before re-capturing. Default ${defaultMaxAgeS}s for ${isBattery ? "battery cams (avoids gratuitous wake-ups)" : "non-battery cams (live-feel)"}. The UI refresh button always forces a fresh capture regardless of this value.`,
2336
2344
  min: 0,
2337
2345
  max: 24 * 3600,
@@ -2342,7 +2350,9 @@ var SnapshotAddon = class SnapshotAddon extends BaseAddon {
2342
2350
  type: "boolean",
2343
2351
  key: "snapshotDebug",
2344
2352
  label: "Debug logging",
2353
+ labelKey: "server:deviceSettingsContribution.s_snapshot-preferences.snapshotDebug.label",
2345
2354
  description: "Log stream selection and timing details for this device.",
2355
+ descriptionKey: "server:deviceSettingsContribution.s_snapshot-preferences.snapshotDebug.description",
2346
2356
  value: current.snapshotDebug ?? false
2347
2357
  }
2348
2358
  ]
@@ -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-DVe0Nsp8.js");
6
+ const require_dist = require("../../dist-GgG-7amw.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");
@@ -155,11 +155,14 @@ var FilesystemStorageProvider = class FilesystemStorageProvider {
155
155
  configSchema: { sections: [{
156
156
  id: "filesystem-storage",
157
157
  title: "Filesystem",
158
+ titleKey: "server:providerInfo.s_filesystem-storage.title",
158
159
  fields: [{
159
160
  type: "text",
160
161
  key: "basePath",
161
162
  label: "Base path",
163
+ labelKey: "server:providerInfo.s_filesystem-storage.basePath.label",
162
164
  description: "Absolute directory path where files are stored.",
165
+ descriptionKey: "server:providerInfo.s_filesystem-storage.basePath.description",
163
166
  required: true
164
167
  }]
165
168
  }] }
@@ -1,4 +1,4 @@
1
- import { Jn as storageProviderCapability, Ut as filesystemBrowseCapability, xr as BaseAddon } from "../../dist-DjD2M79P.mjs";
1
+ import { Or as BaseAddon, qt as filesystemBrowseCapability, tr as storageProviderCapability } from "../../dist-Dc8GKC5H.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";
@@ -149,11 +149,14 @@ var FilesystemStorageProvider = class FilesystemStorageProvider {
149
149
  configSchema: { sections: [{
150
150
  id: "filesystem-storage",
151
151
  title: "Filesystem",
152
+ titleKey: "server:providerInfo.s_filesystem-storage.title",
152
153
  fields: [{
153
154
  type: "text",
154
155
  key: "basePath",
155
156
  label: "Base path",
157
+ labelKey: "server:providerInfo.s_filesystem-storage.basePath.label",
156
158
  description: "Absolute directory path where files are stored.",
159
+ descriptionKey: "server:providerInfo.s_filesystem-storage.basePath.description",
157
160
  required: true
158
161
  }]
159
162
  }] }
@@ -4,7 +4,7 @@ Object.defineProperties(exports, {
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
6
  const require_builtins_sqlite_storage_filesystem_storage_addon = require("./filesystem-storage.addon.js");
7
- const require_wal_maintenance = require("../../wal-maintenance-Br60onAQ.js");
7
+ const require_wal_maintenance = require("../../wal-maintenance-mjB2i-VR.js");
8
8
  const require_builtins_sqlite_storage_sqlite_settings_addon = require("./sqlite-settings.addon.js");
9
9
  //#region src/builtins/sqlite-storage/config-store.ts
10
10
  var ConfigStore = class {
@@ -1,5 +1,5 @@
1
1
  import { FilesystemStorageAddon, t as FilesystemStorageProvider } from "./filesystem-storage.addon.mjs";
2
- import { A as SQLITE_PAGE_CACHE_CEILING_KIB, B as sqliteEngineStorm, D as SQLITE_JOURNAL_SIZE_LIMIT_BYTES, F as SQLITE_PROFILE_REPORT_FLOOR_MS, I as SQLITE_PROFILE_REPORT_INTERVAL_MS, L as SQLITE_PROFILE_TOP_N, M as sqliteMmapSizeFor, N as sqlitePageCacheKibFor, O as SQLITE_MMAP_CEILING_BYTES, P as SQLITE_ENGINE_STORM_WALL_SHARE, R as SQLITE_SLOW_CALL_MS, a as WalMaintenance, c as SqliteSettingsBackend, i as WAL_MAINTENANCE_INTERVAL_MS, j as SQLITE_PAGE_CACHE_FLOOR_KIB, k as SQLITE_MMAP_FLOOR_BYTES, n as WAL_HIGH_WATER_BYTES, r as WAL_IDLE_QUIET_MS, t as WAL_CHECKPOINT_BUSY_TIMEOUT_MS, z as SqliteOpProfiler } from "../../wal-maintenance-CaDsrJM_.mjs";
2
+ import { A as SQLITE_PAGE_CACHE_CEILING_KIB, B as sqliteEngineStorm, D as SQLITE_JOURNAL_SIZE_LIMIT_BYTES, F as SQLITE_PROFILE_REPORT_FLOOR_MS, I as SQLITE_PROFILE_REPORT_INTERVAL_MS, L as SQLITE_PROFILE_TOP_N, M as sqliteMmapSizeFor, N as sqlitePageCacheKibFor, O as SQLITE_MMAP_CEILING_BYTES, P as SQLITE_ENGINE_STORM_WALL_SHARE, R as SQLITE_SLOW_CALL_MS, a as WalMaintenance, c as SqliteSettingsBackend, i as WAL_MAINTENANCE_INTERVAL_MS, j as SQLITE_PAGE_CACHE_FLOOR_KIB, k as SQLITE_MMAP_FLOOR_BYTES, n as WAL_HIGH_WATER_BYTES, r as WAL_IDLE_QUIET_MS, t as WAL_CHECKPOINT_BUSY_TIMEOUT_MS, z as SqliteOpProfiler } from "../../wal-maintenance-Bx3lcVA7.mjs";
3
3
  import { SqliteSettingsAddon } from "./sqlite-settings.addon.mjs";
4
4
  //#region src/builtins/sqlite-storage/config-store.ts
5
5
  var ConfigStore = class {
@@ -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-DVe0Nsp8.js");
7
- const require_retired_settings_keys = require("../../retired-settings-keys-CYP5IZJ5.js");
8
- const require_wal_maintenance = require("../../wal-maintenance-Br60onAQ.js");
6
+ const require_dist = require("../../dist-GgG-7amw.js");
7
+ const require_retired_settings_keys = require("../../retired-settings-keys-Dr_4lfKu.js");
8
+ const require_wal_maintenance = require("../../wal-maintenance-mjB2i-VR.js");
9
9
  const require_sqlite_snapshot_protocol = require("../../sqlite-snapshot-protocol-B9OndqZv.js");
10
10
  const require_wal_checkpoint_policy = require("../../wal-checkpoint-policy-d2z2qPqx.js");
11
11
  let node_fs_promises = require("node:fs/promises");
@@ -1,6 +1,6 @@
1
- import { Ct as dataStoreProviderCapability, Er as RUNTIME_DEFAULTS, _ as DATABASE_SNAPSHOT_PARTIAL_SUFFIX, b as DATA_STORE_DATABASES, br as errMsg, it as bareAddonId, rr as vectorStoreCapability, v as DATABASE_SNAPSHOT_SUFFIX, wt as databaseSnapshotCapability, xr as BaseAddon, y as DATABASE_SNAPSHOT_TIMEOUT_MS } from "../../dist-DjD2M79P.mjs";
2
- import { r as retiredKeyStoreOf, t as purgeRetiredSettingsKeys } from "../../retired-settings-keys-CQaknvx1.mjs";
3
- import { C as callControl, E as controlTargetOf, S as trustResult, T as callVector, _ as collectTransferables, a as WalMaintenance, c as SqliteSettingsBackend, d as CrossDatabaseTransactError, f as DatabaseBusyError, m as rehydrateError, o as createVectorIndex, p as DuplicatePlacementError, s as vectorProviderOf, u as CollectionPlacementError, v as isFileHostMessage, w as callData } from "../../wal-maintenance-CaDsrJM_.mjs";
1
+ import { Dr as errMsg, Dt as dataStoreProviderCapability, Nr as RUNTIME_DEFAULTS, Or as BaseAddon, Ot as databaseSnapshotCapability, S as DATA_STORE_DATABASES, b as DATABASE_SNAPSHOT_SUFFIX, ct as bareAddonId, ur as vectorStoreCapability, x as DATABASE_SNAPSHOT_TIMEOUT_MS, y as DATABASE_SNAPSHOT_PARTIAL_SUFFIX } from "../../dist-Dc8GKC5H.mjs";
2
+ import { r as retiredKeyStoreOf, t as purgeRetiredSettingsKeys } from "../../retired-settings-keys-Is0zO8gX.mjs";
3
+ import { C as callControl, E as controlTargetOf, S as trustResult, T as callVector, _ as collectTransferables, a as WalMaintenance, c as SqliteSettingsBackend, d as CrossDatabaseTransactError, f as DatabaseBusyError, m as rehydrateError, o as createVectorIndex, p as DuplicatePlacementError, s as vectorProviderOf, u as CollectionPlacementError, v as isFileHostMessage, w as callData } from "../../wal-maintenance-Bx3lcVA7.mjs";
4
4
  import { r as isSnapshotWorkerMessage } from "../../sqlite-snapshot-protocol-2QaTouWV.mjs";
5
5
  import { a as isWorkerMessage, t as WAL_CHECKPOINT_LARGE_PASS_FRAMES } from "../../wal-checkpoint-policy-BahrTtyD.mjs";
6
6
  import { createRequire } from "node:module";
@@ -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-DVe0Nsp8.js");
6
+ const require_dist = require("../../dist-GgG-7amw.js");
7
7
  let zod = require("zod");
8
8
  let node_crypto = require("node:crypto");
9
9
  let _camstack_types_node = require("@camstack/types/node");
@@ -1,4 +1,4 @@
1
- import { $r as parseJsonObject, Fn as resolveLocationMode, Fr as collectSecretConfigKeys, Gn as storageCapability, Hn as settingsStoreCapability, I as LegacyStorageLocationDefaultSchema, J as StorageLocationModeSchema, Kn as storageMigrationCapability, Qt as isLocationEnabled, Tr as REDACTED_SECRET, X as StorageMigrationJobSchema, Y as StorageLocationTypeSchema, Yr as isSecretMarker, an as legacyModeOf, di as EventCategory, fn as mayReadLocation, gn as modeMayWrite, ii as resolveSecretMarkers, ir as withLocationMode, oi as secretTreeFromPaths, pn as mayWriteToLocation, q as StorageCleanupJobSchema, qt as gbToBytes, ui as transformSecretWrite, xr as BaseAddon, zt as evictionPolicyOfLocation } from "../../dist-DjD2M79P.mjs";
1
+ import { $ as StorageLocationTypeSchema, $n as storageMigrationCapability, Bn as resolveLocationMode, Hr as collectSecretConfigKeys, Mr as REDACTED_SECRET, Or as BaseAddon, Q as StorageLocationModeSchema, Qn as storageCapability, Ut as evictionPolicyOfLocation, Z as StorageCleanupJobSchema, Zt as gbToBytes, _i as transformSecretWrite, _n as mayReadLocation, di as resolveSecretMarkers, dr as withLocationMode, et as StorageMigrationJobSchema, ni as isSecretMarker, oi as parseJsonObject, pi as secretTreeFromPaths, qn as settingsStoreCapability, rn as isLocationEnabled, un as legacyModeOf, vn as mayWriteToLocation, xn as modeMayWrite, yi as EventCategory, z as LegacyStorageLocationDefaultSchema } from "../../dist-Dc8GKC5H.mjs";
2
2
  import { z } from "zod";
3
3
  import { randomUUID } from "node:crypto";
4
4
  import { containsOrEquals, physicalRootOf } from "@camstack/types/node";
@@ -42,6 +42,15 @@ export declare class SystemConfigAddon extends BaseAddon {
42
42
  * as {@link updateGlobalSettings}.
43
43
  */
44
44
  override updateGlobalSettingsAsOperator(patch: Record<string, unknown>, _nodeId?: string): Promise<void>;
45
+ /**
46
+ * The value to store for a `name` in a save, or `undefined` for "leave the row
47
+ * alone". The whole form posts every field, so an empty box on a hub that was
48
+ * never named is the NORMAL case and must write nothing (D861: a seed never
49
+ * overwrites); an empty box over a stored name is the operator clearing it,
50
+ * which stores `''` (readers treat it as unset). Anything else must be a valid
51
+ * name — refused whole, like the network lists.
52
+ */
53
+ private normalizeServerName;
45
54
  updateGlobalSettings(patch: Record<string, unknown>): Promise<void>;
46
55
  }
47
56
  export default SystemConfigAddon;