@camstack/system 1.2.85 → 1.2.86

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.js +1 -1
  2. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.mjs +1 -1
  3. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.js +1 -1
  4. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.mjs +1 -1
  5. package/dist/builtins/alerts/alerts.addon.js +1 -1
  6. package/dist/builtins/alerts/alerts.addon.mjs +1 -1
  7. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.js +1 -1
  8. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.mjs +1 -1
  9. package/dist/builtins/console-logging/index.js +1 -1
  10. package/dist/builtins/console-logging/index.mjs +1 -1
  11. package/dist/builtins/core-blocks/core-blocks.addon.js +1 -1
  12. package/dist/builtins/core-blocks/core-blocks.addon.mjs +1 -1
  13. package/dist/builtins/device-manager/device-manager.addon.js +1 -1
  14. package/dist/builtins/device-manager/device-manager.addon.mjs +1 -1
  15. package/dist/builtins/doorbell/virtual-doorbell.addon.js +1 -1
  16. package/dist/builtins/doorbell/virtual-doorbell.addon.mjs +1 -1
  17. package/dist/builtins/hub-forwarder/index.js +1 -1
  18. package/dist/builtins/hub-forwarder/index.mjs +1 -1
  19. package/dist/builtins/liveness-monitor/liveness-monitor.addon.js +1 -1
  20. package/dist/builtins/liveness-monitor/liveness-monitor.addon.mjs +1 -1
  21. package/dist/builtins/local-auth/local-auth.addon.js +1 -1
  22. package/dist/builtins/local-auth/local-auth.addon.mjs +1 -1
  23. package/dist/builtins/local-network/local-network.addon.js +1 -1
  24. package/dist/builtins/local-network/local-network.addon.mjs +1 -1
  25. package/dist/builtins/loki-logging/index.js +1 -1
  26. package/dist/builtins/loki-logging/index.mjs +1 -1
  27. package/dist/builtins/native-metrics/native-metrics.addon.js +1 -1
  28. package/dist/builtins/native-metrics/native-metrics.addon.mjs +1 -1
  29. package/dist/builtins/platform-probe/index.js +1 -1
  30. package/dist/builtins/platform-probe/index.mjs +1 -1
  31. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.js +1 -1
  32. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.mjs +1 -1
  33. package/dist/builtins/snapshot/index.js +1 -1
  34. package/dist/builtins/snapshot/index.mjs +1 -1
  35. package/dist/builtins/sqlite-storage/filesystem-storage.addon.js +1 -1
  36. package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs +1 -1
  37. package/dist/builtins/sqlite-storage/sqlite-settings.addon.js +1 -1
  38. package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +1 -1
  39. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js +1 -1
  40. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs +1 -1
  41. package/dist/builtins/system-config/system-config.addon.js +1 -1
  42. package/dist/builtins/system-config/system-config.addon.mjs +1 -1
  43. package/dist/builtins/winston-logging/index.js +1 -1
  44. package/dist/builtins/winston-logging/index.mjs +1 -1
  45. package/dist/{dist-DWuNENzg.mjs → dist-B90N7AWO.mjs} +67 -26
  46. package/dist/{dist-DiScsb8j.js → dist-BV5Bug9t.js} +67 -26
  47. package/dist/index.js +9 -17
  48. package/dist/index.mjs +9 -17
  49. package/dist/kernel/addon-installer.d.ts +7 -15
  50. package/package.json +1 -1
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-DiScsb8j.js");
6
+ const require_dist = require("../../dist-BV5Bug9t.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 { Ht as EventCategory, gt as BaseAddon, ht as errMsg, v as addonPagesCapability } from "../../dist-DWuNENzg.mjs";
1
+ import { Ht as EventCategory, gt as BaseAddon, ht as errMsg, v as addonPagesCapability } from "../../dist-B90N7AWO.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-DiScsb8j.js");
6
+ const require_dist = require("../../dist-BV5Bug9t.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 { Ht as EventCategory, b as addonWidgetsCapability, gt as BaseAddon, ht as errMsg } from "../../dist-DWuNENzg.mjs";
1
+ import { Ht as EventCategory, b as addonWidgetsCapability, gt as BaseAddon, ht as errMsg } from "../../dist-B90N7AWO.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-DiScsb8j.js");
6
+ const require_dist = require("../../dist-BV5Bug9t.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 { Ht as EventCategory, gt as BaseAddon, ht as errMsg, kt as createEvent, n as AlertSchema, x as alertsCapability } from "../../dist-DWuNENzg.mjs";
1
+ import { Ht as EventCategory, gt as BaseAddon, ht as errMsg, kt as createEvent, n as AlertSchema, x as alertsCapability } from "../../dist-B90N7AWO.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-DiScsb8j.js");
6
+ const require_dist = require("../../dist-BV5Bug9t.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 { C as backupCapability, Ht as EventCategory, gt as BaseAddon } from "../../dist-DWuNENzg.mjs";
1
+ import { C as backupCapability, Ht as EventCategory, gt as BaseAddon } from "../../dist-B90N7AWO.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-DiScsb8j.js");
6
+ const require_dist = require("../../dist-BV5Bug9t.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 { J as logDestinationCapability, gt as BaseAddon } from "../../dist-DWuNENzg.mjs";
1
+ import { J as logDestinationCapability, gt as BaseAddon } from "../../dist-B90N7AWO.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-DiScsb8j.js");
3
+ const require_dist = require("../../dist-BV5Bug9t.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 { D as coreBlockIdFromAddonId, E as coreBlockAddonId, O as coreBlocksCapability, c as CoreBlockSchema, gt as BaseAddon, l as DeclaredDevices, o as CORE_BLOCKS_ADDON_ID, s as CORE_BLOCK_ADDON_PREFIX } from "../../dist-DWuNENzg.mjs";
1
+ import { D as coreBlockIdFromAddonId, E as coreBlockAddonId, O as coreBlocksCapability, c as CoreBlockSchema, gt as BaseAddon, l as DeclaredDevices, o as CORE_BLOCKS_ADDON_ID, s as CORE_BLOCK_ADDON_PREFIX } from "../../dist-B90N7AWO.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,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-DiScsb8j.js");
6
+ const require_dist = require("../../dist-BV5Bug9t.js");
7
7
  let node_crypto = require("node:crypto");
8
8
  let _camstack_types_node = require("@camstack/types/node");
9
9
  //#region src/builtins/device-manager/adoption-job-engine.ts
@@ -1,4 +1,4 @@
1
- import { Ht as EventCategory, I as enumerateItemArrayFields, L as enumerateSchemaFields, M as deviceStateCapability, N as deviceStatusCapability, Pt as isDeviceConfigCap, Q as normalizeUnit, St as DeviceType, T as buildStreamParamsConfigSchema, Tt as WELL_KNOWN_TAB_MAP, Vt as sleep, a as CAP_NAMES_WITH_STATUS, bt as DeviceFeature, et as parseStreamParamsFormPatch, gt as BaseAddon, ht as errMsg, j as deviceManagerCapability, p as STREAM_PROFILE_META, t as ALL_CAPABILITY_DEFINITIONS, u as DeviceStatusSchema, xt as DeviceRole } from "../../dist-DWuNENzg.mjs";
1
+ import { Ht as EventCategory, I as enumerateItemArrayFields, L as enumerateSchemaFields, M as deviceStateCapability, N as deviceStatusCapability, Pt as isDeviceConfigCap, Q as normalizeUnit, St as DeviceType, T as buildStreamParamsConfigSchema, Tt as WELL_KNOWN_TAB_MAP, Vt as sleep, a as CAP_NAMES_WITH_STATUS, bt as DeviceFeature, et as parseStreamParamsFormPatch, gt as BaseAddon, ht as errMsg, j as deviceManagerCapability, p as STREAM_PROFILE_META, t as ALL_CAPABILITY_DEFINITIONS, u as DeviceStatusSchema, xt as DeviceRole } from "../../dist-B90N7AWO.mjs";
2
2
  import { randomUUID } from "node:crypto";
3
3
  import { canonicalDeviceFingerprint } from "@camstack/types/node";
4
4
  //#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-DiScsb8j.js");
6
+ const require_dist = require("../../dist-BV5Bug9t.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 { Ht as EventCategory, P as doorbellCapability, St as DeviceType, U as isSameAddonId, gt as BaseAddon, ht as errMsg, kt as createEvent, w as bareAddonId } from "../../dist-DWuNENzg.mjs";
1
+ import { Ht as EventCategory, P as doorbellCapability, St as DeviceType, U as isSameAddonId, gt as BaseAddon, ht as errMsg, kt as createEvent, w as bareAddonId } from "../../dist-B90N7AWO.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-DiScsb8j.js");
6
+ const require_dist = require("../../dist-BV5Bug9t.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 { J as logDestinationCapability, gt as BaseAddon } from "../../dist-DWuNENzg.mjs";
1
+ import { J as logDestinationCapability, gt as BaseAddon } from "../../dist-B90N7AWO.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-DiScsb8j.js");
3
+ const require_dist = require("../../dist-BV5Bug9t.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 { Ht as EventCategory, gt as BaseAddon, ht as errMsg, kt as createEvent } from "../../dist-DWuNENzg.mjs";
1
+ import { Ht as EventCategory, gt as BaseAddon, ht as errMsg, kt as createEvent } from "../../dist-B90N7AWO.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-DiScsb8j.js");
6
+ const require_dist = require("../../dist-BV5Bug9t.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 { S as authProviderCapability, _ as UserRecordSchema, ft as userManagementCapability, gt as BaseAddon, m as ScopedTokenSchema, r as ApiKeyRecordSchema } from "../../dist-DWuNENzg.mjs";
2
+ import { S as authProviderCapability, _ as UserRecordSchema, ft as userManagementCapability, gt as BaseAddon, m as ScopedTokenSchema, r as ApiKeyRecordSchema } from "../../dist-B90N7AWO.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-DiScsb8j.js");
3
+ const require_dist = require("../../dist-BV5Bug9t.js");
4
4
  let node_os = require("node:os");
5
5
  node_os = require_chunk.__toESM(node_os);
6
6
  //#region src/builtins/local-network/local-network.addon.ts
@@ -1,4 +1,4 @@
1
- import { Ht as EventCategory, gt as BaseAddon, q as localNetworkCapability } from "../../dist-DWuNENzg.mjs";
1
+ import { Ht as EventCategory, gt as BaseAddon, q as localNetworkCapability } from "../../dist-B90N7AWO.mjs";
2
2
  import * as os from "node:os";
3
3
  //#region src/builtins/local-network/local-network.addon.ts
4
4
  /**
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-DiScsb8j.js");
6
+ const require_dist = require("../../dist-BV5Bug9t.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 { J as logDestinationCapability, gt as BaseAddon } from "../../dist-DWuNENzg.mjs";
1
+ import { J as logDestinationCapability, gt as BaseAddon } from "../../dist-B90N7AWO.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-DiScsb8j.js");
6
+ const require_dist = require("../../dist-BV5Bug9t.js");
7
7
  let node_child_process = require("node:child_process");
8
8
  let node_util = require("node:util");
9
9
  let node_os = require("node:os");
@@ -1,4 +1,4 @@
1
- import { Ht as EventCategory, Z as metricsProviderCapability, gt as BaseAddon, kt as createEvent } from "../../dist-DWuNENzg.mjs";
1
+ import { Ht as EventCategory, Z as metricsProviderCapability, gt as BaseAddon, kt as createEvent } from "../../dist-B90N7AWO.mjs";
2
2
  import { execFile, execFileSync } from "node:child_process";
3
3
  import { promisify } from "node:util";
4
4
  import * as os from "node:os";
@@ -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-DiScsb8j.js");
6
+ const require_dist = require("../../dist-BV5Bug9t.js");
7
7
  let node_child_process = require("node:child_process");
8
8
  let node_util = require("node:util");
9
9
  let node_os = require("node:os");
@@ -1,5 +1,5 @@
1
1
  import { o as __toESM } from "../../chunk-CNf5ZN-e.mjs";
2
- import { F as enumerateInferenceDevices, Ht as EventCategory, at as scoreRuntimes, gt as BaseAddon, ht as errMsg, jt as emitReadiness, tt as platformProbeCapability } from "../../dist-DWuNENzg.mjs";
2
+ import { F as enumerateInferenceDevices, Ht as EventCategory, at as scoreRuntimes, gt as BaseAddon, ht as errMsg, jt as emitReadiness, tt as platformProbeCapability } from "../../dist-B90N7AWO.mjs";
3
3
  import { execFile } from "node:child_process";
4
4
  import { promisify } from "node:util";
5
5
  import * as os from "node:os";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-DiScsb8j.js");
6
+ const require_dist = require("../../dist-BV5Bug9t.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 { Ht as EventCategory, gt as BaseAddon } from "../../dist-DWuNENzg.mjs";
1
+ import { Ht as EventCategory, gt as BaseAddon } from "../../dist-B90N7AWO.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-DiScsb8j.js");
6
+ const require_dist = require("../../dist-BV5Bug9t.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 { Ft as nodePin, Ht as EventCategory, St as DeviceType, bt as DeviceFeature, dt as streamQualityLabel, gt as BaseAddon, ht as errMsg, i as BatteryStatusSchema, st as snapshotCapability, w as bareAddonId } from "../../dist-DWuNENzg.mjs";
1
+ import { Ft as nodePin, Ht as EventCategory, St as DeviceType, bt as DeviceFeature, dt as streamQualityLabel, gt as BaseAddon, ht as errMsg, i as BatteryStatusSchema, st as snapshotCapability, w as bareAddonId } from "../../dist-B90N7AWO.mjs";
2
2
  import { z } from "zod";
3
3
  import { randomUUID } from "node:crypto";
4
4
  import { signExpiringUrl, verifyExpiringUrl } from "@camstack/types/node";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-DiScsb8j.js");
6
+ const require_dist = require("../../dist-BV5Bug9t.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 { gt as BaseAddon, ut as storageProviderCapability, z as filesystemBrowseCapability } from "../../dist-DWuNENzg.mjs";
1
+ import { gt as BaseAddon, ut as storageProviderCapability, z as filesystemBrowseCapability } from "../../dist-B90N7AWO.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-DiScsb8j.js");
6
+ const require_dist = require("../../dist-BV5Bug9t.js");
7
7
  let node_crypto = require("node:crypto");
8
8
  let node_fs = require("node:fs");
9
9
  let node_module = require("node:module");
@@ -1,4 +1,4 @@
1
- import { A as decodeVectorBase64, Et as asJsonObject, Lt as parseJsonUnknown, f as RUNTIME_DEFAULTS, gt as BaseAddon, ht as errMsg, k as dataStoreProviderCapability, mt as vectorStoreCapability, pt as vectorDimFromBase64, w as bareAddonId } from "../../dist-DWuNENzg.mjs";
1
+ import { A as decodeVectorBase64, Et as asJsonObject, Lt as parseJsonUnknown, f as RUNTIME_DEFAULTS, gt as BaseAddon, ht as errMsg, k as dataStoreProviderCapability, mt as vectorStoreCapability, pt as vectorDimFromBase64, w as bareAddonId } from "../../dist-B90N7AWO.mjs";
2
2
  import { createRequire } from "node:module";
3
3
  import { randomUUID } from "node:crypto";
4
4
  import { statSync } from "node:fs";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-DiScsb8j.js");
6
+ const require_dist = require("../../dist-BV5Bug9t.js");
7
7
  let node_crypto = require("node:crypto");
8
8
  let node_fs_promises = require("node:fs/promises");
9
9
  node_fs_promises = require_chunk.__toESM(node_fs_promises);
@@ -1,4 +1,4 @@
1
- import { It as parseJsonObject, ct as storageCapability, g as StorageMigrationJobSchema, gt as BaseAddon, h as StorageLocationTypeSchema, lt as storageMigrationCapability, ot as settingsStoreCapability } from "../../dist-DWuNENzg.mjs";
1
+ import { It as parseJsonObject, ct as storageCapability, g as StorageMigrationJobSchema, gt as BaseAddon, h as StorageLocationTypeSchema, lt as storageMigrationCapability, ot as settingsStoreCapability } from "../../dist-B90N7AWO.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,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-DiScsb8j.js");
6
+ const require_dist = require("../../dist-BV5Bug9t.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 { Nt as hydrateSchema, gt as BaseAddon, ht as errMsg } from "../../dist-DWuNENzg.mjs";
1
+ import { Nt as hydrateSchema, gt as BaseAddon, ht as errMsg } from "../../dist-B90N7AWO.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-DiScsb8j.js");
6
+ const require_dist = require("../../dist-BV5Bug9t.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 { J as logDestinationCapability, gt as BaseAddon } from "../../dist-DWuNENzg.mjs";
1
+ import { J as logDestinationCapability, gt as BaseAddon } from "../../dist-B90N7AWO.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";
@@ -25651,13 +25651,24 @@ var recordingCapability = {
25651
25651
  /** Playback-speed multiplier for the render (1 = realtime). */
25652
25652
  var ExportSpeedSchema = z.number().min(.25).max(32);
25653
25653
  /**
25654
- * One dense interval, in SECONDS FROM THE EXPORT'S OWN `fromMs`.
25654
+ * One dense interval, in WALL-CLOCK SECONDS FROM THE EXPORT'S OWN `fromMs`.
25655
25655
  *
25656
- * Relative and not absolute epoch on purpose: the renderer's frame-select
25657
- * expression sees ffmpeg's `t`, which starts at 0 for the export's source
25658
- * playlist. Handing it absolute epochs would make every call site responsible
25659
- * for the same subtraction, and the one that forgot would emit a filter that
25660
- * selects nothing silently, as a uniform timelapse.
25656
+ * **Wall clock, not ffmpeg's `t`** and the recorder translates. A caller
25657
+ * derives these bounds from things that happened at a TIME (a track's
25658
+ * `firstSeen`), while `t` runs over the source playlist: the concatenation of
25659
+ * every segment present for the range, with each recording GAP removed. The
25660
+ * two agree only on a window that recorded without one interruption, and only
25661
+ * the render side knows the segments, so the translation lives there
25662
+ * (`export-dense-map.ts`, addon-pipeline).
25663
+ *
25664
+ * It was not always so. These seconds were fed to `between(t,…)` verbatim, and
25665
+ * on a 10 h window holding 29,393 s of footage every range landed late by the
25666
+ * gap accumulated before it — up to 6,607 s, well past EOF. Nothing matched,
25667
+ * the video was a uniform timelapse, and the log line reported the five ranges
25668
+ * that had been ASKED for (2026-08-13, export `57d14363`, camera 615).
25669
+ *
25670
+ * Relative and not absolute epoch, because an absolute epoch would make every
25671
+ * call site responsible for the same subtraction.
25661
25672
  */
25662
25673
  var ExportDenseRangeSchema = z.object({
25663
25674
  fromSec: z.number().nonnegative(),
@@ -34188,25 +34199,32 @@ z.object({
34188
34199
  var NativeLeaseAdmissionSchema = z.enum(["all", "inferred"]);
34189
34200
  z.object({
34190
34201
  /**
34191
- * How long a retained native frame is served before it counts as a miss.
34202
+ * How many delivered frames the worker HOLDS at once, waiting for each one's
34203
+ * detection result.
34192
34204
  *
34193
- * Must cover the FULL late-crop horizon: detection inference + the
34194
- * cross-process inference-result hop to hub post-analysis + tracking + the
34195
- * tRPC crop round-trip back. Below ~500 ms the busiest cameras' subject crops
34196
- * outrun it and fall back to the ≤640 detection frame; above ~3 s the resident
34197
- * RAM per busy camera grows linearly with no measured hit-rate gain.
34205
+ * This replaced a TTL on 2026-08-13, and the replacement is the whole point:
34206
+ * a time window was never related to the event the pixels were waiting for.
34207
+ * A held frame now lives from delivery until the runner has its `FrameResult`
34208
+ * at which moment the runner cuts the subject tiles it actually wanted and
34209
+ * releases the frame. The bound exists only so a runner that stops answering
34210
+ * cannot pin RAM: above it the OLDEST held frame is dropped and counted.
34211
+ *
34212
+ * Sizing: the steady state is `inferenceLatency × deliveredFps`, measured at
34213
+ * 40-160 ms × ≤25 fps = 1-4 frames. The default leaves headroom for a hiccup
34214
+ * without ever approaching the old resident set (43 frames × 24.9 MB at 4K).
34215
+ * Raising it does not buy hit rate — it buys tolerance for a slow runner, and
34216
+ * `holdOverflow` on the metrics line is what says you need it.
34198
34217
  */
34199
- ttlMs: z.number().int().min(250).max(1e4),
34218
+ holdFrames: z.number().int().min(1).max(64),
34200
34219
  /**
34201
34220
  * Hard per-decode-worker RAM ceiling for retained native frames, in MB.
34202
34221
  *
34203
- * Intended as a SAFETY ceiling with the TTL as the effective cap — but check
34204
- * which one is actually binding before reasoning from that. At the shipped
34205
- * 1024 MB and a 2 800 ms TTL, a 4K camera hits the CEILING first (~43 frames
34206
- * at ~24 MB each) and the TTL never gets to expire anything; `leaseMb` /
34207
- * `leaseFrames` on the metrics line say which. When the ceiling binds, a
34208
- * change that admits fewer frames buys retention WINDOW at constant RAM
34209
- * rather than giving RAM back — lower this knob if RAM is what you wanted.
34222
+ * Since 2026-08-13 this is a SAFETY ceiling and nothing else: `holdFrames`
34223
+ * is what decides how much is held, and the ceiling is the number above which
34224
+ * something is wrong. Before that it was the effective cap at 1024 MB with
34225
+ * a 2 800 ms TTL a 4K camera sat pinned at `leaseMb:1020, leaseFrames:43`
34226
+ * with the TTL expiring nothing, which is exactly the confusion the hold
34227
+ * removes. `leaseMb` / `leaseFrames` still say what is resident.
34210
34228
  * `0` DISABLES the lease entirely and falls the worker back to the tiny
34211
34229
  * leak-prone GPU surface ring (~85% crop miss; that is what the lease exists
34212
34230
  * to replace).
@@ -34232,22 +34250,45 @@ z.object({
34232
34250
  * there is the signal that some caller names frames outside the inference set
34233
34251
  * and that this must go back to `all`.
34234
34252
  */
34235
- admission: NativeLeaseAdmissionSchema
34253
+ admission: NativeLeaseAdmissionSchema,
34254
+ /**
34255
+ * RAM ceiling per decode worker, in MB, for the SUBJECT TILES — the
34256
+ * compressed native crops the worker cuts at the moment a frame's detection
34257
+ * result arrives, and keeps long after the frame itself is freed.
34258
+ *
34259
+ * This is the knob that replaced the old retention window, and it buys about
34260
+ * three orders of magnitude more of it: a tile is one subject at native
34261
+ * resolution, JPEG-encoded (~60-120 KB on a 4K person), against ~24.9 MB for
34262
+ * the frame it was cut from. A frame on which nothing was detected costs
34263
+ * nothing at all, which is the real change — the old lease paid per FRAME and
34264
+ * was interrogated per SUBJECT.
34265
+ *
34266
+ * `0` DISABLES tiles, leaving only the hold window and the ≤640 RAM
34267
+ * fallback — i.e. the pre-2026-08-13 miss profile. Set it there only to
34268
+ * reproduce that.
34269
+ */
34270
+ tileBudgetMb: z.number().int().min(0).max(1024)
34236
34271
  });
34237
34272
  /**
34238
- * The values in force when the operator has set nothing — byte-for-byte the
34239
- * constants the decode worker shipped with as env-var defaults, so making these
34240
- * settings changed no behaviour on the day it landed.
34273
+ * The values in force when the operator has set nothing.
34274
+ *
34275
+ * `budgetMb` stays at 1024 on the day the hold landed, deliberately: it stopped
34276
+ * being the retention window and became the OOM ceiling, and lowering a ceiling
34277
+ * in the same change that redefines it would make a regression and a retune
34278
+ * indistinguishable. Cut it once `tileHits` / `holdOverflow` have been read on
34279
+ * live traffic.
34241
34280
  */
34242
34281
  var DEFAULT_NATIVE_LEASE_SETTINGS = {
34243
- ttlMs: 1200,
34282
+ holdFrames: 8,
34244
34283
  budgetMb: 1024,
34245
34284
  activityMs: 15e3,
34285
+ tileBudgetMb: 64,
34246
34286
  admission: "inferred"
34247
34287
  };
34248
- DEFAULT_NATIVE_LEASE_SETTINGS.ttlMs;
34288
+ DEFAULT_NATIVE_LEASE_SETTINGS.holdFrames;
34249
34289
  DEFAULT_NATIVE_LEASE_SETTINGS.budgetMb;
34250
34290
  DEFAULT_NATIVE_LEASE_SETTINGS.activityMs;
34291
+ DEFAULT_NATIVE_LEASE_SETTINGS.tileBudgetMb;
34251
34292
  DEFAULT_NATIVE_LEASE_SETTINGS.admission;
34252
34293
  /**
34253
34294
  * The addon id as the REGISTRY, the wire and the durable stores spell it.
@@ -25651,13 +25651,24 @@ var recordingCapability = {
25651
25651
  /** Playback-speed multiplier for the render (1 = realtime). */
25652
25652
  var ExportSpeedSchema = zod.z.number().min(.25).max(32);
25653
25653
  /**
25654
- * One dense interval, in SECONDS FROM THE EXPORT'S OWN `fromMs`.
25654
+ * One dense interval, in WALL-CLOCK SECONDS FROM THE EXPORT'S OWN `fromMs`.
25655
25655
  *
25656
- * Relative and not absolute epoch on purpose: the renderer's frame-select
25657
- * expression sees ffmpeg's `t`, which starts at 0 for the export's source
25658
- * playlist. Handing it absolute epochs would make every call site responsible
25659
- * for the same subtraction, and the one that forgot would emit a filter that
25660
- * selects nothing silently, as a uniform timelapse.
25656
+ * **Wall clock, not ffmpeg's `t`** and the recorder translates. A caller
25657
+ * derives these bounds from things that happened at a TIME (a track's
25658
+ * `firstSeen`), while `t` runs over the source playlist: the concatenation of
25659
+ * every segment present for the range, with each recording GAP removed. The
25660
+ * two agree only on a window that recorded without one interruption, and only
25661
+ * the render side knows the segments, so the translation lives there
25662
+ * (`export-dense-map.ts`, addon-pipeline).
25663
+ *
25664
+ * It was not always so. These seconds were fed to `between(t,…)` verbatim, and
25665
+ * on a 10 h window holding 29,393 s of footage every range landed late by the
25666
+ * gap accumulated before it — up to 6,607 s, well past EOF. Nothing matched,
25667
+ * the video was a uniform timelapse, and the log line reported the five ranges
25668
+ * that had been ASKED for (2026-08-13, export `57d14363`, camera 615).
25669
+ *
25670
+ * Relative and not absolute epoch, because an absolute epoch would make every
25671
+ * call site responsible for the same subtraction.
25661
25672
  */
25662
25673
  var ExportDenseRangeSchema = zod.z.object({
25663
25674
  fromSec: zod.z.number().nonnegative(),
@@ -34188,25 +34199,32 @@ zod.z.object({
34188
34199
  var NativeLeaseAdmissionSchema = zod.z.enum(["all", "inferred"]);
34189
34200
  zod.z.object({
34190
34201
  /**
34191
- * How long a retained native frame is served before it counts as a miss.
34202
+ * How many delivered frames the worker HOLDS at once, waiting for each one's
34203
+ * detection result.
34192
34204
  *
34193
- * Must cover the FULL late-crop horizon: detection inference + the
34194
- * cross-process inference-result hop to hub post-analysis + tracking + the
34195
- * tRPC crop round-trip back. Below ~500 ms the busiest cameras' subject crops
34196
- * outrun it and fall back to the ≤640 detection frame; above ~3 s the resident
34197
- * RAM per busy camera grows linearly with no measured hit-rate gain.
34205
+ * This replaced a TTL on 2026-08-13, and the replacement is the whole point:
34206
+ * a time window was never related to the event the pixels were waiting for.
34207
+ * A held frame now lives from delivery until the runner has its `FrameResult`
34208
+ * at which moment the runner cuts the subject tiles it actually wanted and
34209
+ * releases the frame. The bound exists only so a runner that stops answering
34210
+ * cannot pin RAM: above it the OLDEST held frame is dropped and counted.
34211
+ *
34212
+ * Sizing: the steady state is `inferenceLatency × deliveredFps`, measured at
34213
+ * 40-160 ms × ≤25 fps = 1-4 frames. The default leaves headroom for a hiccup
34214
+ * without ever approaching the old resident set (43 frames × 24.9 MB at 4K).
34215
+ * Raising it does not buy hit rate — it buys tolerance for a slow runner, and
34216
+ * `holdOverflow` on the metrics line is what says you need it.
34198
34217
  */
34199
- ttlMs: zod.z.number().int().min(250).max(1e4),
34218
+ holdFrames: zod.z.number().int().min(1).max(64),
34200
34219
  /**
34201
34220
  * Hard per-decode-worker RAM ceiling for retained native frames, in MB.
34202
34221
  *
34203
- * Intended as a SAFETY ceiling with the TTL as the effective cap — but check
34204
- * which one is actually binding before reasoning from that. At the shipped
34205
- * 1024 MB and a 2 800 ms TTL, a 4K camera hits the CEILING first (~43 frames
34206
- * at ~24 MB each) and the TTL never gets to expire anything; `leaseMb` /
34207
- * `leaseFrames` on the metrics line say which. When the ceiling binds, a
34208
- * change that admits fewer frames buys retention WINDOW at constant RAM
34209
- * rather than giving RAM back — lower this knob if RAM is what you wanted.
34222
+ * Since 2026-08-13 this is a SAFETY ceiling and nothing else: `holdFrames`
34223
+ * is what decides how much is held, and the ceiling is the number above which
34224
+ * something is wrong. Before that it was the effective cap at 1024 MB with
34225
+ * a 2 800 ms TTL a 4K camera sat pinned at `leaseMb:1020, leaseFrames:43`
34226
+ * with the TTL expiring nothing, which is exactly the confusion the hold
34227
+ * removes. `leaseMb` / `leaseFrames` still say what is resident.
34210
34228
  * `0` DISABLES the lease entirely and falls the worker back to the tiny
34211
34229
  * leak-prone GPU surface ring (~85% crop miss; that is what the lease exists
34212
34230
  * to replace).
@@ -34232,22 +34250,45 @@ zod.z.object({
34232
34250
  * there is the signal that some caller names frames outside the inference set
34233
34251
  * and that this must go back to `all`.
34234
34252
  */
34235
- admission: NativeLeaseAdmissionSchema
34253
+ admission: NativeLeaseAdmissionSchema,
34254
+ /**
34255
+ * RAM ceiling per decode worker, in MB, for the SUBJECT TILES — the
34256
+ * compressed native crops the worker cuts at the moment a frame's detection
34257
+ * result arrives, and keeps long after the frame itself is freed.
34258
+ *
34259
+ * This is the knob that replaced the old retention window, and it buys about
34260
+ * three orders of magnitude more of it: a tile is one subject at native
34261
+ * resolution, JPEG-encoded (~60-120 KB on a 4K person), against ~24.9 MB for
34262
+ * the frame it was cut from. A frame on which nothing was detected costs
34263
+ * nothing at all, which is the real change — the old lease paid per FRAME and
34264
+ * was interrogated per SUBJECT.
34265
+ *
34266
+ * `0` DISABLES tiles, leaving only the hold window and the ≤640 RAM
34267
+ * fallback — i.e. the pre-2026-08-13 miss profile. Set it there only to
34268
+ * reproduce that.
34269
+ */
34270
+ tileBudgetMb: zod.z.number().int().min(0).max(1024)
34236
34271
  });
34237
34272
  /**
34238
- * The values in force when the operator has set nothing — byte-for-byte the
34239
- * constants the decode worker shipped with as env-var defaults, so making these
34240
- * settings changed no behaviour on the day it landed.
34273
+ * The values in force when the operator has set nothing.
34274
+ *
34275
+ * `budgetMb` stays at 1024 on the day the hold landed, deliberately: it stopped
34276
+ * being the retention window and became the OOM ceiling, and lowering a ceiling
34277
+ * in the same change that redefines it would make a regression and a retune
34278
+ * indistinguishable. Cut it once `tileHits` / `holdOverflow` have been read on
34279
+ * live traffic.
34241
34280
  */
34242
34281
  var DEFAULT_NATIVE_LEASE_SETTINGS = {
34243
- ttlMs: 1200,
34282
+ holdFrames: 8,
34244
34283
  budgetMb: 1024,
34245
34284
  activityMs: 15e3,
34285
+ tileBudgetMb: 64,
34246
34286
  admission: "inferred"
34247
34287
  };
34248
- DEFAULT_NATIVE_LEASE_SETTINGS.ttlMs;
34288
+ DEFAULT_NATIVE_LEASE_SETTINGS.holdFrames;
34249
34289
  DEFAULT_NATIVE_LEASE_SETTINGS.budgetMb;
34250
34290
  DEFAULT_NATIVE_LEASE_SETTINGS.activityMs;
34291
+ DEFAULT_NATIVE_LEASE_SETTINGS.tileBudgetMb;
34251
34292
  DEFAULT_NATIVE_LEASE_SETTINGS.admission;
34252
34293
  /**
34253
34294
  * The addon id as the REGISTRY, the wire and the durable stores spell it.
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-DiScsb8j.js");
3
+ const require_dist = require("./dist-BV5Bug9t.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");
@@ -4227,23 +4227,15 @@ var AddonInstaller = class AddonInstaller {
4227
4227
  * installs from the admin UI go through `install()` instead, which
4228
4228
  * defaults to npm in production.
4229
4229
  *
4230
- * @param packages optional custom package list (default: REQUIRED_PACKAGES)
4231
- * @param pins — optional `name exact version` map. A named package is
4232
- * fetched at THAT version instead of the registry's `latest`.
4233
- *
4234
- * Preparation for [D45](../../../../docs/decisions/adr-0045.md) task 32: the
4235
- * image seed answers first today, so `latest` has never been the version a
4236
- * node actually got. Once the image stops baking an addon tree under `/opt`
4237
- * this call IS the answer, and it has to be the version the running closure was
4238
- * published with — otherwise a node fetches latest-of-everything and its
4239
- * addon set depends on the minute it first booted. Passing nothing keeps
4240
- * exactly today's behaviour, and `launcher.ts` passes nothing yet.
4230
+ * There is no version argument and there is deliberately no pin: the system is
4231
+ * addons-agnostic and `latest` is the whole contract at first boot (operator,
4232
+ * 2026-08-13). A copy already under the addon root is never replaced either —
4233
+ * bootstrap is seed-only, and overwriting a deployed bundle would be an
4234
+ * un-deploy ([D90](../../../../docs/decisions/adr-0090.md)).
4241
4235
  *
4242
- * A pin never triggers a re-install: bootstrap stays seed-only, so a copy
4243
- * already under the addon root is left alone whatever its version. Replacing
4244
- * it would be an un-deploy ([D90](../../../../docs/decisions/adr-0090.md)).
4236
+ * @param packages optional custom package list (default: REQUIRED_PACKAGES)
4245
4237
  */
4246
- async ensureRequiredPackages(packages, pins) {
4238
+ async ensureRequiredPackages(packages) {
4247
4239
  const pkgList = packages ?? AddonInstaller.REQUIRED_PACKAGES;
4248
4240
  ensureDir(this.addonsDir);
4249
4241
  const isLocal = this.installSource !== "npm" && this.workspaceDir != null;
@@ -4271,7 +4263,7 @@ var AddonInstaller = class AddonInstaller {
4271
4263
  }
4272
4264
  this.logger.info(`${packageName} — not found locally, trying npm`);
4273
4265
  }
4274
- await this.installFromNpm(packageName, pins?.[packageName]);
4266
+ await this.installFromNpm(packageName);
4275
4267
  } catch (err) {
4276
4268
  const msg = require_dist.errMsg(err);
4277
4269
  if (packageName === "@camstack/system") throw new Error(`Required package ${packageName} failed to install: ${msg}`, { cause: err });
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 objectInputDeclaresAddonId, At as emitDownForOwnedCaps, B as isArrayOutputSchema, Bt as scopeKey, Ct as ReadinessRegistry, Dt as asNumber, Et as asJsonObject$1, G as kebabToCamel, H as isObjectInput, Ht as EventCategory$1, It as parseJsonObject, K as lifecycleJobSchema, Lt as parseJsonUnknown$1, Mt as expandCapMethods, Ot as asString$1, R as extractNestedAddonId, Rt as readinessKey, V as isCollectionArrayMethod, W as isVoidInput, X as looseSchema, Y as logLevelAtMost, _t as DATAPLANE_SECRET_HEADER$1, d as METHOD_ACCESS_MAP, f as RUNTIME_DEFAULTS, ht as errMsg$1, it as scopesAllowDeviceCap, kt as createEvent, nt as procedureAuthKey, rt as scopesAllowAddon, t as ALL_CAPABILITY_DEFINITIONS, vt as DEVICE_SETTINGS_CONTRIBUTION_METHODS, wt as ReadinessTimeoutError, y as addonSettingsCapability, yt as DEVICE_STATUS_METHOD, zt as resolveCapMount } from "./dist-DWuNENzg.mjs";
2
+ import { $ as objectInputDeclaresAddonId, At as emitDownForOwnedCaps, B as isArrayOutputSchema, Bt as scopeKey, Ct as ReadinessRegistry, Dt as asNumber, Et as asJsonObject$1, G as kebabToCamel, H as isObjectInput, Ht as EventCategory$1, It as parseJsonObject, K as lifecycleJobSchema, Lt as parseJsonUnknown$1, Mt as expandCapMethods, Ot as asString$1, R as extractNestedAddonId, Rt as readinessKey, V as isCollectionArrayMethod, W as isVoidInput, X as looseSchema, Y as logLevelAtMost, _t as DATAPLANE_SECRET_HEADER$1, d as METHOD_ACCESS_MAP, f as RUNTIME_DEFAULTS, ht as errMsg$1, it as scopesAllowDeviceCap, kt as createEvent, nt as procedureAuthKey, rt as scopesAllowAddon, t as ALL_CAPABILITY_DEFINITIONS, vt as DEVICE_SETTINGS_CONTRIBUTION_METHODS, wt as ReadinessTimeoutError, y as addonSettingsCapability, yt as DEVICE_STATUS_METHOD, zt as resolveCapMount } from "./dist-B90N7AWO.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";
@@ -4219,23 +4219,15 @@ var AddonInstaller = class AddonInstaller {
4219
4219
  * installs from the admin UI go through `install()` instead, which
4220
4220
  * defaults to npm in production.
4221
4221
  *
4222
- * @param packages optional custom package list (default: REQUIRED_PACKAGES)
4223
- * @param pins — optional `name exact version` map. A named package is
4224
- * fetched at THAT version instead of the registry's `latest`.
4225
- *
4226
- * Preparation for [D45](../../../../docs/decisions/adr-0045.md) task 32: the
4227
- * image seed answers first today, so `latest` has never been the version a
4228
- * node actually got. Once the image stops baking an addon tree under `/opt`
4229
- * this call IS the answer, and it has to be the version the running closure was
4230
- * published with — otherwise a node fetches latest-of-everything and its
4231
- * addon set depends on the minute it first booted. Passing nothing keeps
4232
- * exactly today's behaviour, and `launcher.ts` passes nothing yet.
4222
+ * There is no version argument and there is deliberately no pin: the system is
4223
+ * addons-agnostic and `latest` is the whole contract at first boot (operator,
4224
+ * 2026-08-13). A copy already under the addon root is never replaced either —
4225
+ * bootstrap is seed-only, and overwriting a deployed bundle would be an
4226
+ * un-deploy ([D90](../../../../docs/decisions/adr-0090.md)).
4233
4227
  *
4234
- * A pin never triggers a re-install: bootstrap stays seed-only, so a copy
4235
- * already under the addon root is left alone whatever its version. Replacing
4236
- * it would be an un-deploy ([D90](../../../../docs/decisions/adr-0090.md)).
4228
+ * @param packages optional custom package list (default: REQUIRED_PACKAGES)
4237
4229
  */
4238
- async ensureRequiredPackages(packages, pins) {
4230
+ async ensureRequiredPackages(packages) {
4239
4231
  const pkgList = packages ?? AddonInstaller.REQUIRED_PACKAGES;
4240
4232
  ensureDir(this.addonsDir);
4241
4233
  const isLocal = this.installSource !== "npm" && this.workspaceDir != null;
@@ -4263,7 +4255,7 @@ var AddonInstaller = class AddonInstaller {
4263
4255
  }
4264
4256
  this.logger.info(`${packageName} — not found locally, trying npm`);
4265
4257
  }
4266
- await this.installFromNpm(packageName, pins?.[packageName]);
4258
+ await this.installFromNpm(packageName);
4267
4259
  } catch (err) {
4268
4260
  const msg = errMsg$1(err);
4269
4261
  if (packageName === "@camstack/system") throw new Error(`Required package ${packageName} failed to install: ${msg}`, { cause: err });
@@ -186,23 +186,15 @@ export declare class AddonInstaller {
186
186
  * installs from the admin UI go through `install()` instead, which
187
187
  * defaults to npm in production.
188
188
  *
189
+ * There is no version argument and there is deliberately no pin: the system is
190
+ * addons-agnostic and `latest` is the whole contract at first boot (operator,
191
+ * 2026-08-13). A copy already under the addon root is never replaced either —
192
+ * bootstrap is seed-only, and overwriting a deployed bundle would be an
193
+ * un-deploy ([D90](../../../../docs/decisions/adr-0090.md)).
194
+ *
189
195
  * @param packages — optional custom package list (default: REQUIRED_PACKAGES)
190
- * @param pins — optional `name → exact version` map. A named package is
191
- * fetched at THAT version instead of the registry's `latest`.
192
- *
193
- * Preparation for [D45](../../../../docs/decisions/adr-0045.md) task 32: the
194
- * image seed answers first today, so `latest` has never been the version a
195
- * node actually got. Once the image stops baking an addon tree under `/opt`
196
- * this call IS the answer, and it has to be the version the running closure was
197
- * published with — otherwise a node fetches latest-of-everything and its
198
- * addon set depends on the minute it first booted. Passing nothing keeps
199
- * exactly today's behaviour, and `launcher.ts` passes nothing yet.
200
- *
201
- * A pin never triggers a re-install: bootstrap stays seed-only, so a copy
202
- * already under the addon root is left alone whatever its version. Replacing
203
- * it would be an un-deploy ([D90](../../../../docs/decisions/adr-0090.md)).
204
196
  */
205
- ensureRequiredPackages(packages?: readonly string[], pins?: Readonly<Record<string, string>>): Promise<void>;
197
+ ensureRequiredPackages(packages?: readonly string[]): Promise<void>;
206
198
  /**
207
199
  * Reconcile the install manifest against the addons actually present on
208
200
  * disk: register seeded addons, correct a version that disagrees with the
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/system",
3
- "version": "1.2.85",
3
+ "version": "1.2.86",
4
4
  "description": "Core addon for CamStack — builtins, pipeline, process management, auth, logging, events",
5
5
  "keywords": [
6
6
  "camstack",