@camstack/system 1.2.110 → 1.2.112

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 (61) 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 +72 -18
  36. package/dist/builtins/snapshot/index.mjs +72 -18
  37. package/dist/builtins/snapshot/snapshot.addon.d.ts +16 -0
  38. package/dist/builtins/sqlite-storage/filesystem-storage.addon.js +1 -1
  39. package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs +1 -1
  40. package/dist/builtins/sqlite-storage/sqlite-settings.addon.js +2 -2
  41. package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +2 -2
  42. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js +1 -1
  43. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs +1 -1
  44. package/dist/builtins/system-config/system-config.addon.js +1 -1
  45. package/dist/builtins/system-config/system-config.addon.mjs +1 -1
  46. package/dist/builtins/winston-logging/index.js +1 -1
  47. package/dist/builtins/winston-logging/index.mjs +1 -1
  48. package/dist/{dist-CQkr5Kw0.js → dist-IPLFQ_-A.js} +10 -1
  49. package/dist/{dist-CW4Cims4.mjs → dist-bkg2-2g3.mjs} +10 -1
  50. package/dist/index.js +87 -9
  51. package/dist/index.mjs +87 -9
  52. package/dist/kernel/capability-registry.d.ts +51 -3
  53. package/dist/kernel/index.d.ts +1 -1
  54. package/dist/kernel/lifecycle/staging-area.d.ts +1 -0
  55. package/dist/kernel/transport/child-cap-protocol.d.ts +12 -0
  56. package/dist/kernel/transport/local-child-registry.d.ts +9 -2
  57. package/dist/{manifest-python-deps-5ei2xVUh.mjs → manifest-python-deps-Cb1ANt3i.mjs} +35 -8
  58. package/dist/{manifest-python-deps-GejnH--L.js → manifest-python-deps-MA_BZGBz.js} +35 -8
  59. package/dist/{retired-settings-keys-DCESas5O.js → retired-settings-keys-B-I7w1Ta.js} +1 -1
  60. package/dist/{retired-settings-keys-DGgOxOir.mjs → retired-settings-keys-C7rRSzbP.mjs} +1 -1
  61. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  const require_chunk = require("./chunk-Cek0wNdY.js");
2
- const require_manifest_python_deps = require("./manifest-python-deps-GejnH--L.js");
2
+ const require_manifest_python_deps = require("./manifest-python-deps-MA_BZGBz.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 { I as createUdsLoggerWithControl, L as LocalChildClient, Pt as startRunnerHeapWatch, at as setWorkerNativeCapsChangeListener, bt as installManifestNativeDeps, i as createUdsAddonContext, nt as getWorkerNativeCapProvider, rt as getWorkerNativeCapSnapshot, st as validateProviderRegistrations, t as installManifestPythonDeps, xt as resolveAddonClass } from "./manifest-python-deps-5ei2xVUh.mjs";
1
+ import { I as createUdsLoggerWithControl, L as LocalChildClient, Pt as startRunnerHeapWatch, at as setWorkerNativeCapsChangeListener, bt as installManifestNativeDeps, i as createUdsAddonContext, nt as getWorkerNativeCapProvider, rt as getWorkerNativeCapSnapshot, st as validateProviderRegistrations, t as installManifestPythonDeps, xt as resolveAddonClass } from "./manifest-python-deps-Cb1ANt3i.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-CQkr5Kw0.js");
6
+ const require_dist = require("../../dist-IPLFQ_-A.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 { Gt as EventCategory, v as addonPagesCapability, vt as errMsg, yt as BaseAddon } from "../../dist-CW4Cims4.mjs";
1
+ import { Gt as EventCategory, v as addonPagesCapability, vt as errMsg, yt as BaseAddon } from "../../dist-bkg2-2g3.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-CQkr5Kw0.js");
6
+ const require_dist = require("../../dist-IPLFQ_-A.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 { Gt as EventCategory, b as addonWidgetsCapability, vt as errMsg, yt as BaseAddon } from "../../dist-CW4Cims4.mjs";
1
+ import { Gt as EventCategory, b as addonWidgetsCapability, vt as errMsg, yt as BaseAddon } from "../../dist-bkg2-2g3.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-CQkr5Kw0.js");
6
+ const require_dist = require("../../dist-IPLFQ_-A.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 { Gt as EventCategory, Mt as createEvent, n as AlertSchema, vt as errMsg, x as alertsCapability, yt as BaseAddon } from "../../dist-CW4Cims4.mjs";
1
+ import { Gt as EventCategory, Mt as createEvent, n as AlertSchema, vt as errMsg, x as alertsCapability, yt as BaseAddon } from "../../dist-bkg2-2g3.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-CQkr5Kw0.js");
6
+ const require_dist = require("../../dist-IPLFQ_-A.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, Gt as EventCategory, yt as BaseAddon } from "../../dist-CW4Cims4.mjs";
1
+ import { C as backupCapability, Gt as EventCategory, yt as BaseAddon } from "../../dist-bkg2-2g3.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-CQkr5Kw0.js");
6
+ const require_dist = require("../../dist-IPLFQ_-A.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 { X as logDestinationCapability, yt as BaseAddon } from "../../dist-CW4Cims4.mjs";
1
+ import { X as logDestinationCapability, yt as BaseAddon } from "../../dist-bkg2-2g3.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-CQkr5Kw0.js");
3
+ const require_dist = require("../../dist-IPLFQ_-A.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 coreBlockAddonId, O as coreBlockIdFromAddonId, c as CoreBlockSchema, k as coreBlocksCapability, l as DeclaredDevices, o as CORE_BLOCKS_ADDON_ID, s as CORE_BLOCK_ADDON_PREFIX, vt as errMsg, yt as BaseAddon } from "../../dist-CW4Cims4.mjs";
1
+ import { D as coreBlockAddonId, O as coreBlockIdFromAddonId, c as CoreBlockSchema, k as coreBlocksCapability, l as DeclaredDevices, o as CORE_BLOCKS_ADDON_ID, s as CORE_BLOCK_ADDON_PREFIX, vt as errMsg, yt as BaseAddon } from "../../dist-bkg2-2g3.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-CQkr5Kw0.js");
7
- const require_retired_settings_keys = require("../../retired-settings-keys-DCESas5O.js");
6
+ const require_dist = require("../../dist-IPLFQ_-A.js");
7
+ const require_retired_settings_keys = require("../../retired-settings-keys-B-I7w1Ta.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 { Ct as DeviceFeature, E as buildStreamParamsConfigSchema, F as deviceStatusCapability, Gt as EventCategory, Lt as isDeviceConfigCap, N as deviceManagerCapability, Ot as WELL_KNOWN_TAB_MAP, P as deviceStateCapability, R as enumerateItemArrayFields, Tt as DeviceType, Wt as sleep, a as CAP_NAMES_WITH_STATUS, at as runtimeStatePolicyFor, et as normalizeUnit, nt as parseStreamParamsFormPatch, p as STREAM_PROFILE_META, t as ALL_CAPABILITY_DEFINITIONS, u as DeviceStatusSchema, vt as errMsg, wt as DeviceRole, yt as BaseAddon, z as enumerateSchemaFields } from "../../dist-CW4Cims4.mjs";
2
- import { n as purgeRetiredSettingsRows } from "../../retired-settings-keys-DGgOxOir.mjs";
1
+ import { Ct as DeviceFeature, E as buildStreamParamsConfigSchema, F as deviceStatusCapability, Gt as EventCategory, Lt as isDeviceConfigCap, N as deviceManagerCapability, Ot as WELL_KNOWN_TAB_MAP, P as deviceStateCapability, R as enumerateItemArrayFields, Tt as DeviceType, Wt as sleep, a as CAP_NAMES_WITH_STATUS, at as runtimeStatePolicyFor, et as normalizeUnit, nt as parseStreamParamsFormPatch, p as STREAM_PROFILE_META, t as ALL_CAPABILITY_DEFINITIONS, u as DeviceStatusSchema, vt as errMsg, wt as DeviceRole, yt as BaseAddon, z as enumerateSchemaFields } from "../../dist-bkg2-2g3.mjs";
2
+ import { n as purgeRetiredSettingsRows } from "../../retired-settings-keys-C7rRSzbP.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-CQkr5Kw0.js");
6
+ const require_dist = require("../../dist-IPLFQ_-A.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 { G as isSameAddonId, Gt as EventCategory, I as doorbellCapability, Mt as createEvent, Tt as DeviceType, vt as errMsg, w as bareAddonId, yt as BaseAddon } from "../../dist-CW4Cims4.mjs";
1
+ import { G as isSameAddonId, Gt as EventCategory, I as doorbellCapability, Mt as createEvent, Tt as DeviceType, vt as errMsg, w as bareAddonId, yt as BaseAddon } from "../../dist-bkg2-2g3.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-CQkr5Kw0.js");
6
+ const require_dist = require("../../dist-IPLFQ_-A.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 { X as logDestinationCapability, yt as BaseAddon } from "../../dist-CW4Cims4.mjs";
1
+ import { X as logDestinationCapability, yt as BaseAddon } from "../../dist-bkg2-2g3.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-CQkr5Kw0.js");
3
+ const require_dist = require("../../dist-IPLFQ_-A.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 { Gt as EventCategory, Mt as createEvent, vt as errMsg, yt as BaseAddon } from "../../dist-CW4Cims4.mjs";
1
+ import { Gt as EventCategory, Mt as createEvent, vt as errMsg, yt as BaseAddon } from "../../dist-bkg2-2g3.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-CQkr5Kw0.js");
6
+ const require_dist = require("../../dist-IPLFQ_-A.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, ht as userManagementCapability, m as ScopedTokenSchema, r as ApiKeyRecordSchema, yt as BaseAddon } from "../../dist-CW4Cims4.mjs";
2
+ import { S as authProviderCapability, _ as UserRecordSchema, ht as userManagementCapability, m as ScopedTokenSchema, r as ApiKeyRecordSchema, yt as BaseAddon } from "../../dist-bkg2-2g3.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-CQkr5Kw0.js");
3
+ const require_dist = require("../../dist-IPLFQ_-A.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 { Gt as EventCategory, Y as localNetworkCapability, yt as BaseAddon } from "../../dist-CW4Cims4.mjs";
1
+ import { Gt as EventCategory, Y as localNetworkCapability, yt as BaseAddon } from "../../dist-bkg2-2g3.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-CQkr5Kw0.js");
6
+ const require_dist = require("../../dist-IPLFQ_-A.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 { X as logDestinationCapability, yt as BaseAddon } from "../../dist-CW4Cims4.mjs";
1
+ import { X as logDestinationCapability, yt as BaseAddon } from "../../dist-bkg2-2g3.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-CQkr5Kw0.js");
6
+ const require_dist = require("../../dist-IPLFQ_-A.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 { $ as metricsProviderCapability, Gt as EventCategory, Mt as createEvent, yt as BaseAddon } from "../../dist-CW4Cims4.mjs";
1
+ import { $ as metricsProviderCapability, Gt as EventCategory, Mt as createEvent, yt as BaseAddon } from "../../dist-bkg2-2g3.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-CQkr5Kw0.js");
6
+ const require_dist = require("../../dist-IPLFQ_-A.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 { Gt as EventCategory, L as enumerateInferenceDevices, Pt as emitReadiness, ct as scoreRuntimes, rt as platformProbeCapability, vt as errMsg, yt as BaseAddon } from "../../dist-CW4Cims4.mjs";
2
+ import { Gt as EventCategory, L as enumerateInferenceDevices, Pt as emitReadiness, ct as scoreRuntimes, rt as platformProbeCapability, vt as errMsg, yt as BaseAddon } from "../../dist-bkg2-2g3.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-CQkr5Kw0.js");
6
+ const require_dist = require("../../dist-IPLFQ_-A.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 { Gt as EventCategory, yt as BaseAddon } from "../../dist-CW4Cims4.mjs";
1
+ import { Gt as EventCategory, yt as BaseAddon } from "../../dist-bkg2-2g3.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-CQkr5Kw0.js");
6
+ const require_dist = require("../../dist-IPLFQ_-A.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");
@@ -939,6 +939,24 @@ function pickWarmSnapshotBroker(ranked, devicePrefix) {
939
939
  //#endregion
940
940
  //#region src/builtins/snapshot/snapshot.addon.ts
941
941
  /**
942
+ * States that make a dial pointless — the ladder is skipped entirely.
943
+ *
944
+ * `offline` is deliberately absent: a camera that is never probed can never be
945
+ * observed to come back, and this layer's own capture is one of the two ways a
946
+ * wrong `online:false` gets discovered (the other is the reachability poller
947
+ * that set it).
948
+ */
949
+ var CAPTURE_BLOCKING_REASONS = [
950
+ "disabled",
951
+ "sleeping",
952
+ "unreachable",
953
+ "waking"
954
+ ];
955
+ /** True when this state must answer WITHOUT touching the camera. */
956
+ function blocksCapture(reason) {
957
+ return CAPTURE_BLOCKING_REASONS.includes(reason);
958
+ }
959
+ /**
942
960
  * How long `getSnapshotLinks` waits for the capture it triggered before minting
943
961
  * the link over whatever frame it has.
944
962
  *
@@ -1681,7 +1699,7 @@ var SnapshotAddon = class SnapshotAddon extends require_dist.BaseAddon {
1681
1699
  resolutionMeta.isBattery = isBatteryDevice;
1682
1700
  delete resolutionMeta.stateReason;
1683
1701
  }
1684
- if (state.reason !== void 0 && (!force || state.reason === "disabled" || state.reason === "unreachable" || state.reason === "waking")) {
1702
+ if (state.reason !== void 0 && blocksCapture(state.reason) && (!force || state.reason !== "sleeping")) {
1685
1703
  if (resolutionMeta) resolutionMeta.stateReason = state.reason;
1686
1704
  log.debug("snapshot: camera state overrides raw cache", {
1687
1705
  tags: { deviceId },
@@ -1709,7 +1727,8 @@ var SnapshotAddon = class SnapshotAddon extends require_dist.BaseAddon {
1709
1727
  isBattery: isBatteryDevice
1710
1728
  }
1711
1729
  });
1712
- return hit ? hit.data : null;
1730
+ if (!hit) return null;
1731
+ return state.reason === "offline" ? await this.offlineImage(deviceId, deviceName, hit, resolutionMeta) : hit.data;
1713
1732
  }
1714
1733
  const flightKey = `${deviceId}:${effectiveStreamId ?? "auto"}`;
1715
1734
  const flight = this.captureFlight.run(flightKey, () => this.captureFresh({
@@ -1722,16 +1741,19 @@ var SnapshotAddon = class SnapshotAddon extends require_dist.BaseAddon {
1722
1741
  flight.catch(() => void 0);
1723
1742
  const waitMs = !force && decision.staleFallback && hit !== void 0 ? Math.min(decision.waitMs, staleWaitCapMs) : decision.waitMs;
1724
1743
  const raced = await raceForResult(flight, Math.min(Math.max(waitMs, minimumCaptureWaitMs), maximumCaptureWaitMs));
1725
- if (raced.settled) try {
1726
- const resolved = await this.resolveOutcome(raced.value, deviceId, hit, log);
1727
- if (resolved !== null) return resolved;
1728
- return meta?.online === false ? await this.courtesyImage(deviceId, "offline", deviceName) : null;
1729
- } catch (err) {
1730
- if (meta?.online === false) {
1731
- const courtesy = await this.courtesyImage(deviceId, "offline", deviceName);
1732
- if (courtesy !== null) return courtesy;
1744
+ if (raced.settled) {
1745
+ const captured = raced.value.ok && raced.value.image !== null;
1746
+ try {
1747
+ const resolved = await this.resolveOutcome(raced.value, deviceId, hit, log);
1748
+ if (resolved !== null) return captured || state.reason !== "offline" ? resolved : await this.offlineImage(deviceId, deviceName, hit, resolutionMeta);
1749
+ return state.reason === "offline" ? await this.offlineImage(deviceId, deviceName, void 0, resolutionMeta) : null;
1750
+ } catch (err) {
1751
+ if (state.reason === "offline") {
1752
+ const stateFrame = await this.offlineImage(deviceId, deviceName, hit, resolutionMeta);
1753
+ if (stateFrame !== null) return stateFrame;
1754
+ }
1755
+ throw err;
1733
1756
  }
1734
- throw err;
1735
1757
  }
1736
1758
  if (decision.staleFallback && hit) {
1737
1759
  if (prefs.snapshotDebug) log.debug("snapshot: SWR — returning stale frame; refresh continues in background", {
@@ -1741,11 +1763,11 @@ var SnapshotAddon = class SnapshotAddon extends require_dist.BaseAddon {
1741
1763
  waitMs: decision.waitMs
1742
1764
  }
1743
1765
  });
1744
- return hit.data;
1766
+ return state.reason === "offline" ? await this.offlineImage(deviceId, deviceName, hit, resolutionMeta) : hit.data;
1745
1767
  }
1746
- if (meta?.online === false) {
1747
- const courtesy = await this.courtesyImage(deviceId, "offline", deviceName);
1748
- if (courtesy !== null) return courtesy;
1768
+ if (state.reason === "offline") {
1769
+ const stateFrame = await this.offlineImage(deviceId, deviceName, void 0, resolutionMeta);
1770
+ if (stateFrame !== null) return stateFrame;
1749
1771
  }
1750
1772
  return null;
1751
1773
  }
@@ -2104,7 +2126,12 @@ var SnapshotAddon = class SnapshotAddon extends require_dist.BaseAddon {
2104
2126
  meta: { error: require_dist.errMsg(err) }
2105
2127
  });
2106
2128
  }
2107
- if (!(meta?.isBattery === true || batteryStatus !== null || waking)) return { isBattery: false };
2129
+ const isBattery = meta?.isBattery === true || batteryStatus !== null || waking;
2130
+ const unreachableVerdict = meta?.online === false ? {
2131
+ isBattery,
2132
+ reason: "offline"
2133
+ } : null;
2134
+ if (!isBattery) return unreachableVerdict ?? { isBattery: false };
2108
2135
  if (waking) return {
2109
2136
  isBattery: true,
2110
2137
  reason: "waking"
@@ -2113,10 +2140,11 @@ var SnapshotAddon = class SnapshotAddon extends require_dist.BaseAddon {
2113
2140
  status: batteryStatus,
2114
2141
  nowMs: Date.now()
2115
2142
  });
2116
- return presence === "awake" ? { isBattery: true } : {
2143
+ if (presence !== "awake") return {
2117
2144
  isBattery: true,
2118
2145
  reason: presence
2119
2146
  };
2147
+ return unreachableVerdict ?? { isBattery: true };
2120
2148
  }
2121
2149
  isDeviceWaking(deviceId) {
2122
2150
  const startedAt = this.wakingDevices.get(deviceId);
@@ -2299,6 +2327,32 @@ var SnapshotAddon = class SnapshotAddon extends require_dist.BaseAddon {
2299
2327
  };
2300
2328
  }
2301
2329
  /**
2330
+ * The answer for a camera the hub cannot reach: its last good frame, with
2331
+ * `Offline` painted over it, and `offline` stamped on the response identity.
2332
+ *
2333
+ * Called only AFTER the ladder has run (offline is not in
2334
+ * {@link CAPTURE_BLOCKING_REASONS}), so this dresses a frame that could not be
2335
+ * refreshed — never one that just landed.
2336
+ *
2337
+ * The `stateReason` is set FIRST and unconditionally, because it is what a
2338
+ * surface labels the tile from and what puts `offline` in the ETag: a client
2339
+ * holding the live frame has to see a new identity the moment the camera
2340
+ * drops, or it paints the unlabelled photograph until the camera comes back.
2341
+ * A failed render therefore degrades to the raw frame rather than to nothing —
2342
+ * the metadata still says offline, so the tile is still honest.
2343
+ */
2344
+ async offlineImage(deviceId, deviceName, hit, resolutionMeta) {
2345
+ if (resolutionMeta) resolutionMeta.stateReason = "offline";
2346
+ this.ctx.logger.debug("snapshot: serving the offline treatment", {
2347
+ tags: { deviceId },
2348
+ meta: {
2349
+ hasCache: hit !== void 0,
2350
+ ageMs: hit ? Date.now() - hit.ts : null
2351
+ }
2352
+ });
2353
+ return await this.stateImage(deviceId, "offline", deviceName, hit) ?? hit?.data ?? null;
2354
+ }
2355
+ /**
2302
2356
  * Render a state-labelled answer. A cached real frame is the background, not
2303
2357
  * the answer by itself; if it cannot be decoded, fall back to the generated
2304
2358
  * courtesy background rather than leaking an unlabelled stale frame.
@@ -1,4 +1,4 @@
1
- import { Ct as DeviceFeature, Gt as EventCategory, M as deriveBatteryPresence, Rt as nodePin, T as batteryCapability, Tt as DeviceType, i as BatteryStatusSchema, mt as streamQualityLabel, ut as snapshotCapability, vt as errMsg, w as bareAddonId, yt as BaseAddon } from "../../dist-CW4Cims4.mjs";
1
+ import { Ct as DeviceFeature, Gt as EventCategory, M as deriveBatteryPresence, Rt as nodePin, T as batteryCapability, Tt as DeviceType, i as BatteryStatusSchema, mt as streamQualityLabel, ut as snapshotCapability, vt as errMsg, w as bareAddonId, yt as BaseAddon } from "../../dist-bkg2-2g3.mjs";
2
2
  import { z } from "zod";
3
3
  import { randomUUID } from "node:crypto";
4
4
  import { signExpiringUrl, verifyExpiringUrl } from "@camstack/types/node";
@@ -933,6 +933,24 @@ function pickWarmSnapshotBroker(ranked, devicePrefix) {
933
933
  //#endregion
934
934
  //#region src/builtins/snapshot/snapshot.addon.ts
935
935
  /**
936
+ * States that make a dial pointless — the ladder is skipped entirely.
937
+ *
938
+ * `offline` is deliberately absent: a camera that is never probed can never be
939
+ * observed to come back, and this layer's own capture is one of the two ways a
940
+ * wrong `online:false` gets discovered (the other is the reachability poller
941
+ * that set it).
942
+ */
943
+ var CAPTURE_BLOCKING_REASONS = [
944
+ "disabled",
945
+ "sleeping",
946
+ "unreachable",
947
+ "waking"
948
+ ];
949
+ /** True when this state must answer WITHOUT touching the camera. */
950
+ function blocksCapture(reason) {
951
+ return CAPTURE_BLOCKING_REASONS.includes(reason);
952
+ }
953
+ /**
936
954
  * How long `getSnapshotLinks` waits for the capture it triggered before minting
937
955
  * the link over whatever frame it has.
938
956
  *
@@ -1675,7 +1693,7 @@ var SnapshotAddon = class SnapshotAddon extends BaseAddon {
1675
1693
  resolutionMeta.isBattery = isBatteryDevice;
1676
1694
  delete resolutionMeta.stateReason;
1677
1695
  }
1678
- if (state.reason !== void 0 && (!force || state.reason === "disabled" || state.reason === "unreachable" || state.reason === "waking")) {
1696
+ if (state.reason !== void 0 && blocksCapture(state.reason) && (!force || state.reason !== "sleeping")) {
1679
1697
  if (resolutionMeta) resolutionMeta.stateReason = state.reason;
1680
1698
  log.debug("snapshot: camera state overrides raw cache", {
1681
1699
  tags: { deviceId },
@@ -1703,7 +1721,8 @@ var SnapshotAddon = class SnapshotAddon extends BaseAddon {
1703
1721
  isBattery: isBatteryDevice
1704
1722
  }
1705
1723
  });
1706
- return hit ? hit.data : null;
1724
+ if (!hit) return null;
1725
+ return state.reason === "offline" ? await this.offlineImage(deviceId, deviceName, hit, resolutionMeta) : hit.data;
1707
1726
  }
1708
1727
  const flightKey = `${deviceId}:${effectiveStreamId ?? "auto"}`;
1709
1728
  const flight = this.captureFlight.run(flightKey, () => this.captureFresh({
@@ -1716,16 +1735,19 @@ var SnapshotAddon = class SnapshotAddon extends BaseAddon {
1716
1735
  flight.catch(() => void 0);
1717
1736
  const waitMs = !force && decision.staleFallback && hit !== void 0 ? Math.min(decision.waitMs, staleWaitCapMs) : decision.waitMs;
1718
1737
  const raced = await raceForResult(flight, Math.min(Math.max(waitMs, minimumCaptureWaitMs), maximumCaptureWaitMs));
1719
- if (raced.settled) try {
1720
- const resolved = await this.resolveOutcome(raced.value, deviceId, hit, log);
1721
- if (resolved !== null) return resolved;
1722
- return meta?.online === false ? await this.courtesyImage(deviceId, "offline", deviceName) : null;
1723
- } catch (err) {
1724
- if (meta?.online === false) {
1725
- const courtesy = await this.courtesyImage(deviceId, "offline", deviceName);
1726
- if (courtesy !== null) return courtesy;
1738
+ if (raced.settled) {
1739
+ const captured = raced.value.ok && raced.value.image !== null;
1740
+ try {
1741
+ const resolved = await this.resolveOutcome(raced.value, deviceId, hit, log);
1742
+ if (resolved !== null) return captured || state.reason !== "offline" ? resolved : await this.offlineImage(deviceId, deviceName, hit, resolutionMeta);
1743
+ return state.reason === "offline" ? await this.offlineImage(deviceId, deviceName, void 0, resolutionMeta) : null;
1744
+ } catch (err) {
1745
+ if (state.reason === "offline") {
1746
+ const stateFrame = await this.offlineImage(deviceId, deviceName, hit, resolutionMeta);
1747
+ if (stateFrame !== null) return stateFrame;
1748
+ }
1749
+ throw err;
1727
1750
  }
1728
- throw err;
1729
1751
  }
1730
1752
  if (decision.staleFallback && hit) {
1731
1753
  if (prefs.snapshotDebug) log.debug("snapshot: SWR — returning stale frame; refresh continues in background", {
@@ -1735,11 +1757,11 @@ var SnapshotAddon = class SnapshotAddon extends BaseAddon {
1735
1757
  waitMs: decision.waitMs
1736
1758
  }
1737
1759
  });
1738
- return hit.data;
1760
+ return state.reason === "offline" ? await this.offlineImage(deviceId, deviceName, hit, resolutionMeta) : hit.data;
1739
1761
  }
1740
- if (meta?.online === false) {
1741
- const courtesy = await this.courtesyImage(deviceId, "offline", deviceName);
1742
- if (courtesy !== null) return courtesy;
1762
+ if (state.reason === "offline") {
1763
+ const stateFrame = await this.offlineImage(deviceId, deviceName, void 0, resolutionMeta);
1764
+ if (stateFrame !== null) return stateFrame;
1743
1765
  }
1744
1766
  return null;
1745
1767
  }
@@ -2098,7 +2120,12 @@ var SnapshotAddon = class SnapshotAddon extends BaseAddon {
2098
2120
  meta: { error: errMsg(err) }
2099
2121
  });
2100
2122
  }
2101
- if (!(meta?.isBattery === true || batteryStatus !== null || waking)) return { isBattery: false };
2123
+ const isBattery = meta?.isBattery === true || batteryStatus !== null || waking;
2124
+ const unreachableVerdict = meta?.online === false ? {
2125
+ isBattery,
2126
+ reason: "offline"
2127
+ } : null;
2128
+ if (!isBattery) return unreachableVerdict ?? { isBattery: false };
2102
2129
  if (waking) return {
2103
2130
  isBattery: true,
2104
2131
  reason: "waking"
@@ -2107,10 +2134,11 @@ var SnapshotAddon = class SnapshotAddon extends BaseAddon {
2107
2134
  status: batteryStatus,
2108
2135
  nowMs: Date.now()
2109
2136
  });
2110
- return presence === "awake" ? { isBattery: true } : {
2137
+ if (presence !== "awake") return {
2111
2138
  isBattery: true,
2112
2139
  reason: presence
2113
2140
  };
2141
+ return unreachableVerdict ?? { isBattery: true };
2114
2142
  }
2115
2143
  isDeviceWaking(deviceId) {
2116
2144
  const startedAt = this.wakingDevices.get(deviceId);
@@ -2293,6 +2321,32 @@ var SnapshotAddon = class SnapshotAddon extends BaseAddon {
2293
2321
  };
2294
2322
  }
2295
2323
  /**
2324
+ * The answer for a camera the hub cannot reach: its last good frame, with
2325
+ * `Offline` painted over it, and `offline` stamped on the response identity.
2326
+ *
2327
+ * Called only AFTER the ladder has run (offline is not in
2328
+ * {@link CAPTURE_BLOCKING_REASONS}), so this dresses a frame that could not be
2329
+ * refreshed — never one that just landed.
2330
+ *
2331
+ * The `stateReason` is set FIRST and unconditionally, because it is what a
2332
+ * surface labels the tile from and what puts `offline` in the ETag: a client
2333
+ * holding the live frame has to see a new identity the moment the camera
2334
+ * drops, or it paints the unlabelled photograph until the camera comes back.
2335
+ * A failed render therefore degrades to the raw frame rather than to nothing —
2336
+ * the metadata still says offline, so the tile is still honest.
2337
+ */
2338
+ async offlineImage(deviceId, deviceName, hit, resolutionMeta) {
2339
+ if (resolutionMeta) resolutionMeta.stateReason = "offline";
2340
+ this.ctx.logger.debug("snapshot: serving the offline treatment", {
2341
+ tags: { deviceId },
2342
+ meta: {
2343
+ hasCache: hit !== void 0,
2344
+ ageMs: hit ? Date.now() - hit.ts : null
2345
+ }
2346
+ });
2347
+ return await this.stateImage(deviceId, "offline", deviceName, hit) ?? hit?.data ?? null;
2348
+ }
2349
+ /**
2296
2350
  * Render a state-labelled answer. A cached real frame is the background, not
2297
2351
  * the answer by itself; if it cannot be decoded, fall back to the generated
2298
2352
  * courtesy background rather than leaking an unlabelled stale frame.