@camstack/system 1.2.360 → 1.2.362

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 (64) 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/autotrack/index.js +1 -1
  10. package/dist/builtins/autotrack/index.mjs +1 -1
  11. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.js +1 -1
  12. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.mjs +1 -1
  13. package/dist/builtins/calendars/calendars.addon.js +1 -1
  14. package/dist/builtins/calendars/calendars.addon.mjs +1 -1
  15. package/dist/builtins/camera-grid/index.js +1 -1
  16. package/dist/builtins/camera-grid/index.mjs +1 -1
  17. package/dist/builtins/composer/composer.addon.js +2 -2
  18. package/dist/builtins/composer/composer.addon.mjs +2 -2
  19. package/dist/builtins/console-logging/index.js +1 -1
  20. package/dist/builtins/console-logging/index.mjs +1 -1
  21. package/dist/builtins/core-blocks/core-blocks.addon.js +2 -2
  22. package/dist/builtins/core-blocks/core-blocks.addon.mjs +2 -2
  23. package/dist/builtins/device-manager/device-manager.addon.js +2 -2
  24. package/dist/builtins/device-manager/device-manager.addon.mjs +2 -2
  25. package/dist/builtins/hub-forwarder/index.js +1 -1
  26. package/dist/builtins/hub-forwarder/index.mjs +1 -1
  27. package/dist/builtins/liveness-monitor/liveness-monitor.addon.js +1 -1
  28. package/dist/builtins/liveness-monitor/liveness-monitor.addon.mjs +1 -1
  29. package/dist/builtins/local-auth/local-auth.addon.js +1 -1
  30. package/dist/builtins/local-auth/local-auth.addon.mjs +1 -1
  31. package/dist/builtins/local-network/local-network.addon.js +1 -1
  32. package/dist/builtins/local-network/local-network.addon.mjs +1 -1
  33. package/dist/builtins/loki-logging/index.js +1 -1
  34. package/dist/builtins/loki-logging/index.mjs +1 -1
  35. package/dist/builtins/native-metrics/native-metrics.addon.d.ts +16 -0
  36. package/dist/builtins/native-metrics/native-metrics.addon.js +52 -14
  37. package/dist/builtins/native-metrics/native-metrics.addon.mjs +52 -14
  38. package/dist/builtins/platform-probe/index.js +1 -1
  39. package/dist/builtins/platform-probe/index.mjs +1 -1
  40. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.js +1 -1
  41. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.mjs +1 -1
  42. package/dist/builtins/snapshot/index.js +1 -1
  43. package/dist/builtins/snapshot/index.mjs +1 -1
  44. package/dist/builtins/sqlite-storage/filesystem-storage.addon.js +1 -1
  45. package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs +1 -1
  46. package/dist/builtins/sqlite-storage/sqlite-settings.addon.js +0 -0
  47. package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +0 -0
  48. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js +2 -2
  49. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs +2 -2
  50. package/dist/builtins/system-config/system-config.addon.js +1 -1
  51. package/dist/builtins/system-config/system-config.addon.mjs +1 -1
  52. package/dist/builtins/winston-logging/index.js +1 -1
  53. package/dist/builtins/winston-logging/index.mjs +1 -1
  54. package/dist/{child-cap-dispatch-T3Kdhbb3.js → child-cap-dispatch-CV8_LDxx.js} +1 -1
  55. package/dist/{child-cap-dispatch-StBHObCA.mjs → child-cap-dispatch-Cr70toWw.mjs} +1 -1
  56. package/dist/{composition-sources-DASc7NBj.mjs → composition-sources-BscSIjHf.mjs} +1 -1
  57. package/dist/{composition-sources-DFgayxCc.js → composition-sources-BzO8kNlB.js} +1 -1
  58. package/dist/{dist-C9Rk6KVv.mjs → dist-BgJZdlW6.mjs} +41 -19
  59. package/dist/{dist-Cv1lnnQq.js → dist-UT1QNI9K.js} +41 -19
  60. package/dist/index.js +2 -2
  61. package/dist/index.mjs +2 -2
  62. package/dist/{retired-settings-keys-BGNqRNhu.js → retired-settings-keys-CmEqB_0Q.js} +1 -1
  63. package/dist/{retired-settings-keys-BjG8bQVI.mjs → retired-settings-keys-exwNGxqv.mjs} +1 -1
  64. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  const require_chunk = require("./chunk-Cek0wNdY.js");
2
- const require_child_cap_dispatch = require("./child-cap-dispatch-T3Kdhbb3.js");
2
+ const require_child_cap_dispatch = require("./child-cap-dispatch-CV8_LDxx.js");
3
3
  const require_custom_action_registry = require("./custom-action-registry-acBY3mHA.js");
4
4
  let node_path = require("node:path");
5
5
  node_path = require_chunk.__toESM(node_path);
@@ -1,4 +1,4 @@
1
- import { $t as RUNNER_RSS_BUDGET_ENV, Ft as resolveAddonClass, H as createUdsLoggerWithControl, Pt as installManifestNativeDeps, U as LocalChildClient, _t as getWorkerNativeCapSnapshot, f as installManifestSystemDeps, fn as startRunnerHeapWatch, g as createUdsAddonContext, gt as getWorkerNativeCapProvider, i as killOwnRunnerGroupAfterParentLoss, n as createChildCapDispatch, p as installManifestPythonDeps, u as startRunnerParentDeathWatchdog, wn as emitHeapDiagnosticReport, xt as validateProviderRegistrations, yt as setWorkerNativeCapsChangeListener } from "./child-cap-dispatch-StBHObCA.mjs";
1
+ import { $t as RUNNER_RSS_BUDGET_ENV, Ft as resolveAddonClass, H as createUdsLoggerWithControl, Pt as installManifestNativeDeps, U as LocalChildClient, _t as getWorkerNativeCapSnapshot, f as installManifestSystemDeps, fn as startRunnerHeapWatch, g as createUdsAddonContext, gt as getWorkerNativeCapProvider, i as killOwnRunnerGroupAfterParentLoss, n as createChildCapDispatch, p as installManifestPythonDeps, u as startRunnerParentDeathWatchdog, wn as emitHeapDiagnosticReport, xt as validateProviderRegistrations, yt as setWorkerNativeCapsChangeListener } from "./child-cap-dispatch-Cr70toWw.mjs";
2
2
  import { t as CustomActionRegistry } from "./custom-action-registry-B4Cf4O_X.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-Cv1lnnQq.js");
6
+ const require_dist = require("../../dist-UT1QNI9K.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 { Ar as EventCategory, U as addonPagesCapability, ar as BaseAddon, ir as errMsg } from "../../dist-C9Rk6KVv.mjs";
1
+ import { Ar as EventCategory, U as addonPagesCapability, ar as BaseAddon, ir as errMsg } from "../../dist-BgJZdlW6.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-Cv1lnnQq.js");
6
+ const require_dist = require("../../dist-UT1QNI9K.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 { Ar as EventCategory, G as addonWidgetsCapability, ar as BaseAddon, ir as errMsg } from "../../dist-C9Rk6KVv.mjs";
1
+ import { Ar as EventCategory, G as addonWidgetsCapability, ar as BaseAddon, ir as errMsg } from "../../dist-BgJZdlW6.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-Cv1lnnQq.js");
6
+ const require_dist = require("../../dist-UT1QNI9K.js");
7
7
  //#region src/builtins/alerts/device-label.ts
8
8
  /**
9
9
  * Operator-facing device label for alert messages.
@@ -1,4 +1,4 @@
1
- import { Ar as EventCategory, K as alertsCapability, ar as BaseAddon, hr as createEvent, ir as errMsg, n as AlertSchema } from "../../dist-C9Rk6KVv.mjs";
1
+ import { Ar as EventCategory, K as alertsCapability, ar as BaseAddon, hr as createEvent, ir as errMsg, n as AlertSchema } from "../../dist-BgJZdlW6.mjs";
2
2
  //#region src/builtins/alerts/device-label.ts
3
3
  /**
4
4
  * Operator-facing device label for alert messages.
@@ -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-Cv1lnnQq.js");
6
+ const require_dist = require("../../dist-UT1QNI9K.js");
7
7
  //#region src/builtins/autotrack/autotrack-config.ts
8
8
  var DEFAULT_AUTOTRACK_LOOP_CONFIG = {
9
9
  deadZoneFraction: .5,
@@ -1,4 +1,4 @@
1
- import { Ar as EventCategory, S as FIRST_LEVEL_MACRO_CLASSES, Y as bareAddonId, ar as BaseAddon, fn as ptzAutotrackCapability, ir as errMsg, xr as isEvent } from "../../dist-C9Rk6KVv.mjs";
1
+ import { Ar as EventCategory, S as FIRST_LEVEL_MACRO_CLASSES, Y as bareAddonId, ar as BaseAddon, fn as ptzAutotrackCapability, ir as errMsg, xr as isEvent } from "../../dist-BgJZdlW6.mjs";
2
2
  //#region src/builtins/autotrack/autotrack-config.ts
3
3
  var DEFAULT_AUTOTRACK_LOOP_CONFIG = {
4
4
  deadZoneFraction: .5,
@@ -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-Cv1lnnQq.js");
6
+ const require_dist = require("../../dist-UT1QNI9K.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 { Ar as EventCategory, J as backupCapability, Mn as storageOccupancyCapability, Qt as mayWriteToLocation, Sr as nodePin, ar as BaseAddon, g as DATABASE_SNAPSHOT_SUFFIX, kr as toNodeId } from "../../dist-C9Rk6KVv.mjs";
1
+ import { Ar as EventCategory, J as backupCapability, Mn as storageOccupancyCapability, Qt as mayWriteToLocation, Sr as nodePin, ar as BaseAddon, g as DATABASE_SNAPSHOT_SUFFIX, kr as toNodeId } from "../../dist-BgJZdlW6.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-Cv1lnnQq.js");
6
+ const require_dist = require("../../dist-UT1QNI9K.js");
7
7
  const require_settle_sources = require("../../settle-sources-Bhsy57y-.js");
8
8
  let zod = require("zod");
9
9
  //#region src/builtins/calendars/calendar-color.ts
@@ -1,4 +1,4 @@
1
- import { $ as calendarsCapability, ar as BaseAddon, p as CalendarPreferencesSchema } from "../../dist-C9Rk6KVv.mjs";
1
+ import { $ as calendarsCapability, ar as BaseAddon, p as CalendarPreferencesSchema } from "../../dist-BgJZdlW6.mjs";
2
2
  import { t as settleSourcesWithTimeout } from "../../settle-sources-CDtNC8ub.mjs";
3
3
  import { z } from "zod";
4
4
  //#region src/builtins/calendars/calendar-color.ts
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-Cv1lnnQq.js");
6
+ const require_dist = require("../../dist-UT1QNI9K.js");
7
7
  let zod = require("zod");
8
8
  let _camstack_types_node = require("@camstack/types/node");
9
9
  let node_path = require("node:path");
@@ -1,4 +1,4 @@
1
- import { $t as memoizePinnedFfmpeg, A as MOTION_CLOSE_AFTER_MS, Ar as EventCategory, Pn as streamCatalogCapability, Wn as buildFfmpegArgs, ar as BaseAddon, b as DeclaredDevices, et as cameraGridLayoutCapability, hr as createEvent, i as BaseDevice, ir as errMsg, kn as snapshotCapability, mt as declarationOwnerNodeId, nn as motionCapability, rr as DeviceType, tr as DeviceFeature, y as DERIVED_CAMERA_SILENCED_CAP_NAMES, yr as hydrateSchema } from "../../dist-C9Rk6KVv.mjs";
1
+ import { $t as memoizePinnedFfmpeg, A as MOTION_CLOSE_AFTER_MS, Ar as EventCategory, Pn as streamCatalogCapability, Wn as buildFfmpegArgs, ar as BaseAddon, b as DeclaredDevices, et as cameraGridLayoutCapability, hr as createEvent, i as BaseDevice, ir as errMsg, kn as snapshotCapability, mt as declarationOwnerNodeId, nn as motionCapability, rr as DeviceType, tr as DeviceFeature, y as DERIVED_CAMERA_SILENCED_CAP_NAMES, yr as hydrateSchema } from "../../dist-BgJZdlW6.mjs";
2
2
  import { z } from "zod";
3
3
  import { FfmpegProcess } from "@camstack/types/node";
4
4
  import { join } from "node:path";
@@ -3,8 +3,8 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-Cv1lnnQq.js");
7
- const require_composition_sources = require("../../composition-sources-DFgayxCc.js");
6
+ const require_dist = require("../../dist-UT1QNI9K.js");
7
+ const require_composition_sources = require("../../composition-sources-BzO8kNlB.js");
8
8
  let zod = require("zod");
9
9
  //#region src/builtins/shared/device-state-changed.ts
10
10
  /** Structural narrowing helper for untrusted bus payloads. */
@@ -1,5 +1,5 @@
1
- import { $n as disarmRoseMemory, Ar as EventCategory, Et as evaluateCompositionField, Gn as cloneStatefulExpressionMemory, Jn as compositionFeatureEnabled, Kn as composedDeviceRef, Qn as createStatefulExpressionMemory, Un as COMPOSER_ADDON_ID, Xn as compositionSliceKey, Yn as compositionItemFieldPath, Z as buildCapabilityLookup, Zn as compositionSourceKey, ar as BaseAddon, b as DeclaredDevices, er as toExpressionValue, hr as createEvent, i as BaseDevice, ir as errMsg, it as compositionFieldKey, kt as expressionContainsBuiltinCall, l as COMPOSED_ITEM_FIXED_FIELDS, ln as planComposition, qn as composedDeviceStableId, rr as DeviceType, rt as composerCapability, t as ALL_CAPABILITY_DEFINITIONS } from "../../dist-C9Rk6KVv.mjs";
2
- import { n as normalizedNativeOwner } from "../../composition-sources-DASc7NBj.mjs";
1
+ import { $n as disarmRoseMemory, Ar as EventCategory, Et as evaluateCompositionField, Gn as cloneStatefulExpressionMemory, Jn as compositionFeatureEnabled, Kn as composedDeviceRef, Qn as createStatefulExpressionMemory, Un as COMPOSER_ADDON_ID, Xn as compositionSliceKey, Yn as compositionItemFieldPath, Z as buildCapabilityLookup, Zn as compositionSourceKey, ar as BaseAddon, b as DeclaredDevices, er as toExpressionValue, hr as createEvent, i as BaseDevice, ir as errMsg, it as compositionFieldKey, kt as expressionContainsBuiltinCall, l as COMPOSED_ITEM_FIXED_FIELDS, ln as planComposition, qn as composedDeviceStableId, rr as DeviceType, rt as composerCapability, t as ALL_CAPABILITY_DEFINITIONS } from "../../dist-BgJZdlW6.mjs";
2
+ import { n as normalizedNativeOwner } from "../../composition-sources-BscSIjHf.mjs";
3
3
  import { z } from "zod";
4
4
  //#region src/builtins/shared/device-state-changed.ts
5
5
  /** Structural narrowing helper for untrusted bus payloads. */
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-Cv1lnnQq.js");
6
+ const require_dist = require("../../dist-UT1QNI9K.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 { Jt as logDestinationCapability, ar as BaseAddon } from "../../dist-C9Rk6KVv.mjs";
1
+ import { Jt as logDestinationCapability, ar as BaseAddon } from "../../dist-BgJZdlW6.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,7 +1,7 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_chunk = require("../../chunk-Cek0wNdY.js");
3
- const require_dist = require("../../dist-Cv1lnnQq.js");
4
- const require_composition_sources = require("../../composition-sources-DFgayxCc.js");
3
+ const require_dist = require("../../dist-UT1QNI9K.js");
4
+ const require_composition_sources = require("../../composition-sources-BzO8kNlB.js");
5
5
  let node_crypto = require("node:crypto");
6
6
  let _camstack_types_node = require("@camstack/types/node");
7
7
  let node_fs_promises = require("node:fs/promises");
@@ -1,5 +1,5 @@
1
- import { Kn as composedDeviceRef, Ln as validateComposition, Z as buildCapabilityLookup, Zn as compositionSourceKey, _n as resolveCoreBlockEntry, ar as BaseAddon, at as compositionSourceRefs, b as DeclaredDevices, ct as coreBlockIdFromAddonId, d as CORE_BLOCKS_ADDON_ID, f as CORE_BLOCK_ADDON_PREFIX, ir as errMsg, ln as planComposition, lt as coreBlockSourceKind, m as CoreBlockSchema, mn as replacedFieldKeys, ot as coreBlockAddonId, rn as normalizeCoreBlockWrite, st as coreBlockComposition, t as ALL_CAPABILITY_DEFINITIONS, u as COMPOSER_RUNNER_ID, ut as coreBlocksCapability, vn as resolveCoreBlockFiles, vt as describeComposableCaps, yr as hydrateSchema } from "../../dist-C9Rk6KVv.mjs";
2
- import { t as describeCompositionSources } from "../../composition-sources-DASc7NBj.mjs";
1
+ import { Kn as composedDeviceRef, Ln as validateComposition, Z as buildCapabilityLookup, Zn as compositionSourceKey, _n as resolveCoreBlockEntry, ar as BaseAddon, at as compositionSourceRefs, b as DeclaredDevices, ct as coreBlockIdFromAddonId, d as CORE_BLOCKS_ADDON_ID, f as CORE_BLOCK_ADDON_PREFIX, ir as errMsg, ln as planComposition, lt as coreBlockSourceKind, m as CoreBlockSchema, mn as replacedFieldKeys, ot as coreBlockAddonId, rn as normalizeCoreBlockWrite, st as coreBlockComposition, t as ALL_CAPABILITY_DEFINITIONS, u as COMPOSER_RUNNER_ID, ut as coreBlocksCapability, vn as resolveCoreBlockFiles, vt as describeComposableCaps, yr as hydrateSchema } from "../../dist-BgJZdlW6.mjs";
2
+ import { t as describeCompositionSources } from "../../composition-sources-BscSIjHf.mjs";
3
3
  import { createRequire } from "node:module";
4
4
  import { randomUUID } from "node:crypto";
5
5
  import { customizationBlockName } from "@camstack/types/node";
@@ -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-Cv1lnnQq.js");
7
- const require_retired_settings_keys = require("../../retired-settings-keys-BGNqRNhu.js");
6
+ const require_dist = require("../../dist-UT1QNI9K.js");
7
+ const require_retired_settings_keys = require("../../retired-settings-keys-CmEqB_0Q.js");
8
8
  let zod = require("zod");
9
9
  let node_crypto = require("node:crypto");
10
10
  let _camstack_types_node = require("@camstack/types/node");
@@ -1,5 +1,5 @@
1
- import { Ar as EventCategory, C as FieldClaimModeSchema, Cn as runtimeStatePolicyFor, D as LocationIconIdSchema, I as STREAM_PROFILE_META, Nt as formatMinutes, On as siteZoneKey, Or as sleep$1, Ot as expandContainer, Q as buildStreamParamsConfigSchema, St as deviceStatusCapability, Tt as enumerateSchemaFields, Ut as legacyAutoLinkIds, ar as BaseAddon, br as isDeviceConfigCap, bt as deviceManagerCapability, c as CAP_NAMES_WITH_STATUS, dr as WELL_KNOWN_TAB_MAP, dt as createDeviceExtensionProvider, gt as defineExtensionSlotProvider, in as normalizeUnit, ir as errMsg, k as MINUTES_PER_DAY, nr as DeviceRole, o as CAMERA_SWITCH_ORDER, qt as locationIconKey, rr as DeviceType, sn as parseStreamParamsFormPatch, t as ALL_CAPABILITY_DEFINITIONS, tr as DeviceFeature, v as DAY_NAMES, w as FieldClaimSchema, wt as enumerateItemArrayFields, x as DeviceStatusSchema, xt as deviceStateCapability, yt as deviceExtensionCapability } from "../../dist-C9Rk6KVv.mjs";
2
- import { n as purgeRetiredSettingsRows } from "../../retired-settings-keys-BjG8bQVI.mjs";
1
+ import { Ar as EventCategory, C as FieldClaimModeSchema, Cn as runtimeStatePolicyFor, D as LocationIconIdSchema, I as STREAM_PROFILE_META, Nt as formatMinutes, On as siteZoneKey, Or as sleep$1, Ot as expandContainer, Q as buildStreamParamsConfigSchema, St as deviceStatusCapability, Tt as enumerateSchemaFields, Ut as legacyAutoLinkIds, ar as BaseAddon, br as isDeviceConfigCap, bt as deviceManagerCapability, c as CAP_NAMES_WITH_STATUS, dr as WELL_KNOWN_TAB_MAP, dt as createDeviceExtensionProvider, gt as defineExtensionSlotProvider, in as normalizeUnit, ir as errMsg, k as MINUTES_PER_DAY, nr as DeviceRole, o as CAMERA_SWITCH_ORDER, qt as locationIconKey, rr as DeviceType, sn as parseStreamParamsFormPatch, t as ALL_CAPABILITY_DEFINITIONS, tr as DeviceFeature, v as DAY_NAMES, w as FieldClaimSchema, wt as enumerateItemArrayFields, x as DeviceStatusSchema, xt as deviceStateCapability, yt as deviceExtensionCapability } from "../../dist-BgJZdlW6.mjs";
2
+ import { n as purgeRetiredSettingsRows } from "../../retired-settings-keys-exwNGxqv.mjs";
3
3
  import { z } from "zod";
4
4
  import { randomUUID } from "node:crypto";
5
5
  import { canonicalDeviceFingerprint } from "@camstack/types/node";
@@ -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-Cv1lnnQq.js");
6
+ const require_dist = require("../../dist-UT1QNI9K.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 { Jt as logDestinationCapability, ar as BaseAddon } from "../../dist-C9Rk6KVv.mjs";
1
+ import { Jt as logDestinationCapability, ar as BaseAddon } from "../../dist-BgJZdlW6.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-Cv1lnnQq.js");
3
+ const require_dist = require("../../dist-UT1QNI9K.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 { Ar as EventCategory, P as RecordingStatusSchema, ar as BaseAddon, hr as createEvent, ir as errMsg, j as RECORDING_SOURCE_CAMSTACK_ADDON } from "../../dist-C9Rk6KVv.mjs";
1
+ import { Ar as EventCategory, P as RecordingStatusSchema, ar as BaseAddon, hr as createEvent, ir as errMsg, j as RECORDING_SOURCE_CAMSTACK_ADDON } from "../../dist-BgJZdlW6.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-Cv1lnnQq.js");
6
+ const require_dist = require("../../dist-UT1QNI9K.js");
7
7
  let zod = require("zod");
8
8
  let node_crypto = require("node:crypto");
9
9
  node_crypto = require_chunk.__toESM(node_crypto);
@@ -1,5 +1,5 @@
1
1
  import { i as __require, o as __toESM, t as __commonJSMin } from "../../chunk-CNf5ZN-e.mjs";
2
- import { H as UserRecordSchema, In as userManagementCapability, L as ScopedTokenSchema, ar as BaseAddon, q as authProviderCapability, r as ApiKeyRecordSchema } from "../../dist-C9Rk6KVv.mjs";
2
+ import { H as UserRecordSchema, In as userManagementCapability, L as ScopedTokenSchema, ar as BaseAddon, q as authProviderCapability, r as ApiKeyRecordSchema } from "../../dist-BgJZdlW6.mjs";
3
3
  import { z } from "zod";
4
4
  import * as crypto$2 from "node:crypto";
5
5
  import { createHash, randomUUID, timingSafeEqual } from "node: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-Cv1lnnQq.js");
3
+ const require_dist = require("../../dist-UT1QNI9K.js");
4
4
  const require_tls = require("../../tls-CCMX7MjX.js");
5
5
  let zod = require("zod");
6
6
  let node_os = require("node:os");
@@ -1,4 +1,4 @@
1
- import { Ar as EventCategory, Ft as isAppLinkBase, Kt as localNetworkCapability, Rn as validateCustomAddress, Rt as isDefaultAppConnectionEndpoint, Sn as resolveNotificationTapAddress, ar as BaseAddon, cn as pickAppLinkHub, hn as resolveAppConnections, s as CAMSTACK_APP_LINK_ORIGIN, tt as checkRoleAddress, yn as resolveHubAddressRoles } from "../../dist-C9Rk6KVv.mjs";
1
+ import { Ar as EventCategory, Ft as isAppLinkBase, Kt as localNetworkCapability, Rn as validateCustomAddress, Rt as isDefaultAppConnectionEndpoint, Sn as resolveNotificationTapAddress, ar as BaseAddon, cn as pickAppLinkHub, hn as resolveAppConnections, s as CAMSTACK_APP_LINK_ORIGIN, tt as checkRoleAddress, yn as resolveHubAddressRoles } from "../../dist-BgJZdlW6.mjs";
2
2
  import { P as readLanHttpState, _ as writeExtraSans, h as readTlsMode, i as storeUploadedCertificate, j as applyLanHttp, k as DEFAULT_LAN_HTTP_PORT, m as readTlsAccessStatus, n as regenerateCertificate, p as readExtraSans, r as revertToGeneratedCertificate, t as applyCertificateToListener, u as servedHttpsLeafFingerprint, y as ensureTlsCert } from "../../tls-CJHogwTl.mjs";
3
3
  import { z } from "zod";
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
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-Cv1lnnQq.js");
6
+ const require_dist = require("../../dist-UT1QNI9K.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 { Jt as logDestinationCapability, ar as BaseAddon } from "../../dist-C9Rk6KVv.mjs";
1
+ import { Jt as logDestinationCapability, ar as BaseAddon } from "../../dist-BgJZdlW6.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
@@ -151,6 +151,22 @@ export default class NativeMetricsAddon extends BaseAddon<NativeMetricsConfig> {
151
151
  * is why the retention default is six hours rather than three days.
152
152
  */
153
153
  private startProcessSnapshotTimer;
154
+ /**
155
+ * Run one periodic tick so that it can NEVER become an unhandled rejection.
156
+ *
157
+ * `clearInterval` in `onShutdown` stops FUTURE ticks; it cannot recall one
158
+ * already in flight. A process tick awaits a `/proc` read and a
159
+ * `$process.list` broker call, and a graceful stop shuts this addon down
160
+ * (nulling `ctx`) while the agent goes on to stop its other addons and the
161
+ * broker — so the tick resumed with no context, its catch block reached for
162
+ * `this.ctx.logger`, threw again, and the rejection of the timer callback
163
+ * killed `docker stop CamStack-Agent` with exit code 1 (little-unraid,
164
+ * 2026-10-07 04:22Z). The ticks themselves now capture their context once
165
+ * and stand down when it is gone; this wrapper is the backstop.
166
+ *
167
+ * A tick before `initialize()` or after `shutdown()` is a no-op.
168
+ */
169
+ private runTick;
154
170
  protected onShutdown(): Promise<void>;
155
171
  /**
156
172
  * Resolve this node's short id (strips any `nodeId/addonId` suffix).
@@ -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-Cv1lnnQq.js");
6
+ const require_dist = require("../../dist-UT1QNI9K.js");
7
7
  const require_proc_stat = require("../../proc-stat-DL-WUOhl.js");
8
8
  let node_fs_promises = require("node:fs/promises");
9
9
  let node_os = require("node:os");
@@ -3014,7 +3014,8 @@ var NativeMetricsAddon = class NativeMetricsAddon extends require_dist.BaseAddon
3014
3014
  }
3015
3015
  this.memoryProbe = new ContainerMemoryProbe({ logger: this.ctx.logger.child("ContainerMemory") });
3016
3016
  this.pidsProbe = new ContainerPidsProbe({ logger: this.ctx.logger.child("ContainerPids") });
3017
- this.snapshotTimer = setInterval(() => this.emitResourcesSnapshot(), METRICS_SNAPSHOT_INTERVAL_MS);
3017
+ if (this.snapshotTimer) clearInterval(this.snapshotTimer);
3018
+ this.snapshotTimer = setInterval(() => this.runTick("resources snapshot", () => this.emitResourcesSnapshot()), METRICS_SNAPSHOT_INTERVAL_MS);
3018
3019
  this.startProcessSnapshotTimer();
3019
3020
  this.ctx.addDisposer(this.ctx.eventBus.subscribe({ category: require_dist.EventCategory.MetricsNodeProcessesSnapshot }, (event) => this.retainSnapshot(event.data.nodeId, event.data.timestamp, event.data.processes, event.data.containerMemory)));
3020
3021
  return [{
@@ -3179,7 +3180,33 @@ var NativeMetricsAddon = class NativeMetricsAddon extends require_dist.BaseAddon
3179
3180
  */
3180
3181
  startProcessSnapshotTimer() {
3181
3182
  if (this.processSnapshotTimer) clearInterval(this.processSnapshotTimer);
3182
- this.processSnapshotTimer = setInterval(() => this.emitProcessesSnapshot(), this.loadConfig.cadenceSec * 1e3);
3183
+ this.processSnapshotTimer = null;
3184
+ if (!this.ctxIfReady) return;
3185
+ this.processSnapshotTimer = setInterval(() => this.runTick("process snapshot", () => this.emitProcessesSnapshot()), this.loadConfig.cadenceSec * 1e3);
3186
+ }
3187
+ /**
3188
+ * Run one periodic tick so that it can NEVER become an unhandled rejection.
3189
+ *
3190
+ * `clearInterval` in `onShutdown` stops FUTURE ticks; it cannot recall one
3191
+ * already in flight. A process tick awaits a `/proc` read and a
3192
+ * `$process.list` broker call, and a graceful stop shuts this addon down
3193
+ * (nulling `ctx`) while the agent goes on to stop its other addons and the
3194
+ * broker — so the tick resumed with no context, its catch block reached for
3195
+ * `this.ctx.logger`, threw again, and the rejection of the timer callback
3196
+ * killed `docker stop CamStack-Agent` with exit code 1 (little-unraid,
3197
+ * 2026-10-07 04:22Z). The ticks themselves now capture their context once
3198
+ * and stand down when it is gone; this wrapper is the backstop.
3199
+ *
3200
+ * A tick before `initialize()` or after `shutdown()` is a no-op.
3201
+ */
3202
+ runTick(name, tick) {
3203
+ if (!this.ctxIfReady) return;
3204
+ tick().catch((err) => {
3205
+ this.ctxIfReady?.logger.warn("native-metrics tick failed — this interval will be missing", { meta: {
3206
+ tick: name,
3207
+ error: err instanceof Error ? err.message : String(err)
3208
+ } });
3209
+ });
3183
3210
  }
3184
3211
  async onShutdown() {
3185
3212
  if (this.snapshotTimer) {
@@ -3197,9 +3224,9 @@ var NativeMetricsAddon = class NativeMetricsAddon extends require_dist.BaseAddon
3197
3224
  * Resolve this node's short id (strips any `nodeId/addonId` suffix).
3198
3225
  * Returns null when the provider or event bus isn't available yet.
3199
3226
  */
3200
- resolveSnapshotNodeId() {
3201
- if (!this.provider || !this.ctx.eventBus) return null;
3202
- const rawNodeId = this.ctx.kernel.localNodeId ?? this.ctx.id;
3227
+ resolveSnapshotNodeId(ctx) {
3228
+ if (!this.provider || !ctx.eventBus) return null;
3229
+ const rawNodeId = ctx.kernel.localNodeId ?? ctx.id;
3203
3230
  return rawNodeId.includes("/") ? rawNodeId.split("/")[0] : rawNodeId;
3204
3231
  }
3205
3232
  /**
@@ -3208,13 +3235,16 @@ var NativeMetricsAddon = class NativeMetricsAddon extends require_dist.BaseAddon
3208
3235
  * runs at samplingIntervalMs). Fires on METRICS_SNAPSHOT_INTERVAL_MS.
3209
3236
  */
3210
3237
  async emitResourcesSnapshot() {
3238
+ const ctx = this.ctxIfReady;
3239
+ if (!ctx) return;
3211
3240
  const provider = this.provider;
3212
- const eventBus = this.ctx.eventBus;
3213
- const nodeId = this.resolveSnapshotNodeId();
3241
+ const eventBus = ctx.eventBus;
3242
+ const nodeId = this.resolveSnapshotNodeId(ctx);
3214
3243
  if (!provider || !eventBus || !nodeId) return;
3215
3244
  const timestamp = Date.now();
3216
3245
  try {
3217
3246
  const snapshot = await provider.getCached() ?? await provider.collectSnapshot();
3247
+ if (this.ctxIfReady !== ctx) return;
3218
3248
  const coarse = coarsenResourcesSnapshot(snapshot);
3219
3249
  const prev = this.lastResourcesEmit;
3220
3250
  const heartbeatDue = !prev || timestamp - prev.emittedAt >= METRICS_SNAPSHOT_HEARTBEAT_MS;
@@ -3247,12 +3277,18 @@ var NativeMetricsAddon = class NativeMetricsAddon extends require_dist.BaseAddon
3247
3277
  * A failed scan emits nothing, which is the same signal: nobody reported.
3248
3278
  */
3249
3279
  async emitProcessesSnapshot() {
3250
- const eventBus = this.ctx.eventBus;
3251
- const nodeId = this.resolveSnapshotNodeId();
3280
+ const ctx = this.ctxIfReady;
3281
+ if (!ctx) return;
3282
+ const eventBus = ctx.eventBus;
3283
+ const nodeId = this.resolveSnapshotNodeId(ctx);
3252
3284
  if (!this.provider || !eventBus || !nodeId) return;
3253
3285
  const timestamp = Date.now();
3254
3286
  try {
3255
3287
  const processes = await this.listNodeProcesses();
3288
+ if (this.ctxIfReady !== ctx) {
3289
+ ctx.logger.debug("process snapshot dropped — addon shut down mid-tick", { meta: { nodeId } });
3290
+ return;
3291
+ }
3256
3292
  const containerMemory = this.memoryProbe?.sample() ?? null;
3257
3293
  this.pidsProbe?.sample();
3258
3294
  eventBus.emit(require_dist.createEvent(require_dist.EventCategory.MetricsNodeProcessesSnapshot, {
@@ -3266,20 +3302,21 @@ var NativeMetricsAddon = class NativeMetricsAddon extends require_dist.BaseAddon
3266
3302
  containerMemory
3267
3303
  }));
3268
3304
  } catch (err) {
3269
- this.ctx.logger.warn("process snapshot skipped — this interval will be missing", { meta: {
3305
+ ctx.logger.warn("process snapshot skipped — this interval will be missing", { meta: {
3270
3306
  nodeId,
3271
3307
  error: err instanceof Error ? err.message : String(err)
3272
3308
  } });
3273
3309
  }
3274
3310
  }
3275
3311
  async onConfigChanged() {
3312
+ if (!this.ctxIfReady) return;
3276
3313
  this.provider?.stopSampling();
3277
3314
  this.provider?.startSampling(this.config.samplingIntervalMs);
3278
3315
  this.applyLoadSeriesConfig();
3279
3316
  this.startProcessSnapshotTimer();
3280
3317
  }
3281
3318
  async listWorkerInstances() {
3282
- const broker = this.ctx.kernel.cluster?.broker;
3319
+ const broker = this.ctxIfReady?.kernel.cluster?.broker;
3283
3320
  if (!broker) return [];
3284
3321
  try {
3285
3322
  return await broker.call("$process.list");
@@ -3326,6 +3363,7 @@ var NativeMetricsAddon = class NativeMetricsAddon extends require_dist.BaseAddon
3326
3363
  * walk behind them — live in `process-classification.ts`.
3327
3364
  */
3328
3365
  async listNodeProcesses() {
3366
+ const selfNodeId = this.ctx.kernel.cluster?.broker?.nodeID ?? "hub";
3329
3367
  const ps = await this.runPs();
3330
3368
  if (ps.length === 0) return [];
3331
3369
  const managed = /* @__PURE__ */ new Map();
@@ -3339,7 +3377,7 @@ var NativeMetricsAddon = class NativeMetricsAddon extends require_dist.BaseAddon
3339
3377
  return buildNodeProcesses({
3340
3378
  psRows: ps,
3341
3379
  selfPid: process.pid,
3342
- selfNodeId: this.ctx.kernel.cluster?.broker?.nodeID ?? "hub",
3380
+ selfNodeId,
3343
3381
  managed,
3344
3382
  cpuSplits
3345
3383
  });
@@ -3355,7 +3393,7 @@ var NativeMetricsAddon = class NativeMetricsAddon extends require_dist.BaseAddon
3355
3393
  try {
3356
3394
  return await readProcessTable();
3357
3395
  } catch (err) {
3358
- this.ctx.logger.warn("process table read failed", { meta: { error: err instanceof Error ? err.message : String(err) } });
3396
+ this.ctxIfReady?.logger.warn("process table read failed", { meta: { error: err instanceof Error ? err.message : String(err) } });
3359
3397
  return [];
3360
3398
  }
3361
3399
  }
@@ -1,4 +1,4 @@
1
- import { Ar as EventCategory, Mt as foldSnapshotByFunction, ar as BaseAddon, en as metricsProviderCapability, gn as resolveBucketMs, hr as createEvent, ir as errMsg, pn as reducePoints } from "../../dist-C9Rk6KVv.mjs";
1
+ import { Ar as EventCategory, Mt as foldSnapshotByFunction, ar as BaseAddon, en as metricsProviderCapability, gn as resolveBucketMs, hr as createEvent, ir as errMsg, pn as reducePoints } from "../../dist-BgJZdlW6.mjs";
2
2
  import { a as parseProcStat, i as nodeProcReader, n as elapsedSecSince, o as parseProcStatusRss, r as lifetimeCpuPercent, t as commandFromCmdline } from "../../proc-stat-CbC55Kqi.mjs";
3
3
  import { access, readFile, readdir } from "node:fs/promises";
4
4
  import * as os from "node:os";
@@ -3009,7 +3009,8 @@ var NativeMetricsAddon = class NativeMetricsAddon extends BaseAddon {
3009
3009
  }
3010
3010
  this.memoryProbe = new ContainerMemoryProbe({ logger: this.ctx.logger.child("ContainerMemory") });
3011
3011
  this.pidsProbe = new ContainerPidsProbe({ logger: this.ctx.logger.child("ContainerPids") });
3012
- this.snapshotTimer = setInterval(() => this.emitResourcesSnapshot(), METRICS_SNAPSHOT_INTERVAL_MS);
3012
+ if (this.snapshotTimer) clearInterval(this.snapshotTimer);
3013
+ this.snapshotTimer = setInterval(() => this.runTick("resources snapshot", () => this.emitResourcesSnapshot()), METRICS_SNAPSHOT_INTERVAL_MS);
3013
3014
  this.startProcessSnapshotTimer();
3014
3015
  this.ctx.addDisposer(this.ctx.eventBus.subscribe({ category: EventCategory.MetricsNodeProcessesSnapshot }, (event) => this.retainSnapshot(event.data.nodeId, event.data.timestamp, event.data.processes, event.data.containerMemory)));
3015
3016
  return [{
@@ -3174,7 +3175,33 @@ var NativeMetricsAddon = class NativeMetricsAddon extends BaseAddon {
3174
3175
  */
3175
3176
  startProcessSnapshotTimer() {
3176
3177
  if (this.processSnapshotTimer) clearInterval(this.processSnapshotTimer);
3177
- this.processSnapshotTimer = setInterval(() => this.emitProcessesSnapshot(), this.loadConfig.cadenceSec * 1e3);
3178
+ this.processSnapshotTimer = null;
3179
+ if (!this.ctxIfReady) return;
3180
+ this.processSnapshotTimer = setInterval(() => this.runTick("process snapshot", () => this.emitProcessesSnapshot()), this.loadConfig.cadenceSec * 1e3);
3181
+ }
3182
+ /**
3183
+ * Run one periodic tick so that it can NEVER become an unhandled rejection.
3184
+ *
3185
+ * `clearInterval` in `onShutdown` stops FUTURE ticks; it cannot recall one
3186
+ * already in flight. A process tick awaits a `/proc` read and a
3187
+ * `$process.list` broker call, and a graceful stop shuts this addon down
3188
+ * (nulling `ctx`) while the agent goes on to stop its other addons and the
3189
+ * broker — so the tick resumed with no context, its catch block reached for
3190
+ * `this.ctx.logger`, threw again, and the rejection of the timer callback
3191
+ * killed `docker stop CamStack-Agent` with exit code 1 (little-unraid,
3192
+ * 2026-10-07 04:22Z). The ticks themselves now capture their context once
3193
+ * and stand down when it is gone; this wrapper is the backstop.
3194
+ *
3195
+ * A tick before `initialize()` or after `shutdown()` is a no-op.
3196
+ */
3197
+ runTick(name, tick) {
3198
+ if (!this.ctxIfReady) return;
3199
+ tick().catch((err) => {
3200
+ this.ctxIfReady?.logger.warn("native-metrics tick failed — this interval will be missing", { meta: {
3201
+ tick: name,
3202
+ error: err instanceof Error ? err.message : String(err)
3203
+ } });
3204
+ });
3178
3205
  }
3179
3206
  async onShutdown() {
3180
3207
  if (this.snapshotTimer) {
@@ -3192,9 +3219,9 @@ var NativeMetricsAddon = class NativeMetricsAddon extends BaseAddon {
3192
3219
  * Resolve this node's short id (strips any `nodeId/addonId` suffix).
3193
3220
  * Returns null when the provider or event bus isn't available yet.
3194
3221
  */
3195
- resolveSnapshotNodeId() {
3196
- if (!this.provider || !this.ctx.eventBus) return null;
3197
- const rawNodeId = this.ctx.kernel.localNodeId ?? this.ctx.id;
3222
+ resolveSnapshotNodeId(ctx) {
3223
+ if (!this.provider || !ctx.eventBus) return null;
3224
+ const rawNodeId = ctx.kernel.localNodeId ?? ctx.id;
3198
3225
  return rawNodeId.includes("/") ? rawNodeId.split("/")[0] : rawNodeId;
3199
3226
  }
3200
3227
  /**
@@ -3203,13 +3230,16 @@ var NativeMetricsAddon = class NativeMetricsAddon extends BaseAddon {
3203
3230
  * runs at samplingIntervalMs). Fires on METRICS_SNAPSHOT_INTERVAL_MS.
3204
3231
  */
3205
3232
  async emitResourcesSnapshot() {
3233
+ const ctx = this.ctxIfReady;
3234
+ if (!ctx) return;
3206
3235
  const provider = this.provider;
3207
- const eventBus = this.ctx.eventBus;
3208
- const nodeId = this.resolveSnapshotNodeId();
3236
+ const eventBus = ctx.eventBus;
3237
+ const nodeId = this.resolveSnapshotNodeId(ctx);
3209
3238
  if (!provider || !eventBus || !nodeId) return;
3210
3239
  const timestamp = Date.now();
3211
3240
  try {
3212
3241
  const snapshot = await provider.getCached() ?? await provider.collectSnapshot();
3242
+ if (this.ctxIfReady !== ctx) return;
3213
3243
  const coarse = coarsenResourcesSnapshot(snapshot);
3214
3244
  const prev = this.lastResourcesEmit;
3215
3245
  const heartbeatDue = !prev || timestamp - prev.emittedAt >= METRICS_SNAPSHOT_HEARTBEAT_MS;
@@ -3242,12 +3272,18 @@ var NativeMetricsAddon = class NativeMetricsAddon extends BaseAddon {
3242
3272
  * A failed scan emits nothing, which is the same signal: nobody reported.
3243
3273
  */
3244
3274
  async emitProcessesSnapshot() {
3245
- const eventBus = this.ctx.eventBus;
3246
- const nodeId = this.resolveSnapshotNodeId();
3275
+ const ctx = this.ctxIfReady;
3276
+ if (!ctx) return;
3277
+ const eventBus = ctx.eventBus;
3278
+ const nodeId = this.resolveSnapshotNodeId(ctx);
3247
3279
  if (!this.provider || !eventBus || !nodeId) return;
3248
3280
  const timestamp = Date.now();
3249
3281
  try {
3250
3282
  const processes = await this.listNodeProcesses();
3283
+ if (this.ctxIfReady !== ctx) {
3284
+ ctx.logger.debug("process snapshot dropped — addon shut down mid-tick", { meta: { nodeId } });
3285
+ return;
3286
+ }
3251
3287
  const containerMemory = this.memoryProbe?.sample() ?? null;
3252
3288
  this.pidsProbe?.sample();
3253
3289
  eventBus.emit(createEvent(EventCategory.MetricsNodeProcessesSnapshot, {
@@ -3261,20 +3297,21 @@ var NativeMetricsAddon = class NativeMetricsAddon extends BaseAddon {
3261
3297
  containerMemory
3262
3298
  }));
3263
3299
  } catch (err) {
3264
- this.ctx.logger.warn("process snapshot skipped — this interval will be missing", { meta: {
3300
+ ctx.logger.warn("process snapshot skipped — this interval will be missing", { meta: {
3265
3301
  nodeId,
3266
3302
  error: err instanceof Error ? err.message : String(err)
3267
3303
  } });
3268
3304
  }
3269
3305
  }
3270
3306
  async onConfigChanged() {
3307
+ if (!this.ctxIfReady) return;
3271
3308
  this.provider?.stopSampling();
3272
3309
  this.provider?.startSampling(this.config.samplingIntervalMs);
3273
3310
  this.applyLoadSeriesConfig();
3274
3311
  this.startProcessSnapshotTimer();
3275
3312
  }
3276
3313
  async listWorkerInstances() {
3277
- const broker = this.ctx.kernel.cluster?.broker;
3314
+ const broker = this.ctxIfReady?.kernel.cluster?.broker;
3278
3315
  if (!broker) return [];
3279
3316
  try {
3280
3317
  return await broker.call("$process.list");
@@ -3321,6 +3358,7 @@ var NativeMetricsAddon = class NativeMetricsAddon extends BaseAddon {
3321
3358
  * walk behind them — live in `process-classification.ts`.
3322
3359
  */
3323
3360
  async listNodeProcesses() {
3361
+ const selfNodeId = this.ctx.kernel.cluster?.broker?.nodeID ?? "hub";
3324
3362
  const ps = await this.runPs();
3325
3363
  if (ps.length === 0) return [];
3326
3364
  const managed = /* @__PURE__ */ new Map();
@@ -3334,7 +3372,7 @@ var NativeMetricsAddon = class NativeMetricsAddon extends BaseAddon {
3334
3372
  return buildNodeProcesses({
3335
3373
  psRows: ps,
3336
3374
  selfPid: process.pid,
3337
- selfNodeId: this.ctx.kernel.cluster?.broker?.nodeID ?? "hub",
3375
+ selfNodeId,
3338
3376
  managed,
3339
3377
  cpuSplits
3340
3378
  });
@@ -3350,7 +3388,7 @@ var NativeMetricsAddon = class NativeMetricsAddon extends BaseAddon {
3350
3388
  try {
3351
3389
  return await readProcessTable();
3352
3390
  } catch (err) {
3353
- this.ctx.logger.warn("process table read failed", { meta: { error: err instanceof Error ? err.message : String(err) } });
3391
+ this.ctxIfReady?.logger.warn("process table read failed", { meta: { error: err instanceof Error ? err.message : String(err) } });
3354
3392
  return [];
3355
3393
  }
3356
3394
  }
@@ -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-Cv1lnnQq.js");
6
+ const require_dist = require("../../dist-UT1QNI9K.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,5 +1,5 @@
1
1
  import { o as __toESM } from "../../chunk-CNf5ZN-e.mjs";
2
- import { Ar as EventCategory, Ct as enumerateInferenceDevices, En as scoreRuntimes, _r as emitReadiness, ar as BaseAddon, ir as errMsg, un as platformProbeCapability } from "../../dist-C9Rk6KVv.mjs";
2
+ import { Ar as EventCategory, Ct as enumerateInferenceDevices, En as scoreRuntimes, _r as emitReadiness, ar as BaseAddon, ir as errMsg, un as platformProbeCapability } from "../../dist-BgJZdlW6.mjs";
3
3
  import * as os from "node:os";
4
4
  import * as fs from "node:fs";
5
5
  import { execFile } from "node:child_process";
@@ -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-Cv1lnnQq.js");
6
+ const require_dist = require("../../dist-UT1QNI9K.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 { Ar as EventCategory, ar as BaseAddon } from "../../dist-C9Rk6KVv.mjs";
1
+ import { Ar as EventCategory, ar as BaseAddon } from "../../dist-BgJZdlW6.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-Cv1lnnQq.js");
6
+ const require_dist = require("../../dist-UT1QNI9K.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");
@@ -1,4 +1,4 @@
1
- import { $t as memoizePinnedFfmpeg, Ar as EventCategory, Fn as streamQualityLabel, Sr as nodePin, X as batteryCapability, Y as bareAddonId, _t as deriveBatteryPresence, a as BatteryStatusSchema, ar as BaseAddon, ir as errMsg, kn as snapshotCapability, rr as DeviceType, tr as DeviceFeature } from "../../dist-C9Rk6KVv.mjs";
1
+ import { $t as memoizePinnedFfmpeg, Ar as EventCategory, Fn as streamQualityLabel, Sr as nodePin, X as batteryCapability, Y as bareAddonId, _t as deriveBatteryPresence, a as BatteryStatusSchema, ar as BaseAddon, ir as errMsg, kn as snapshotCapability, rr as DeviceType, tr as DeviceFeature } from "../../dist-BgJZdlW6.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";
@@ -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-Cv1lnnQq.js");
6
+ const require_dist = require("../../dist-UT1QNI9K.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 { Nn as storageProviderCapability, ar as BaseAddon, jt as filesystemBrowseCapability } from "../../dist-C9Rk6KVv.mjs";
1
+ import { Nn as storageProviderCapability, ar as BaseAddon, jt as filesystemBrowseCapability } from "../../dist-BgJZdlW6.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-Cv1lnnQq.js");
6
+ const require_dist = require("../../dist-UT1QNI9K.js");
7
7
  const require_hub_cap_forward = require("../../hub-cap-forward-DmHNjbB0.js");
8
8
  let zod = require("zod");
9
9
  let node_crypto = require("node:crypto");
@@ -3886,7 +3886,7 @@ var StorageOrchestratorAddon = class extends require_dist.BaseAddon {
3886
3886
  try {
3887
3887
  await this.pressureManager.sweep();
3888
3888
  } catch (err) {
3889
- this.ctx.logger.warn("storage pressure sweep failed", { meta: { error: err instanceof Error ? err.message : String(err) } });
3889
+ this.ctxIfReady?.logger.warn("storage pressure sweep failed", { meta: { error: err instanceof Error ? err.message : String(err) } });
3890
3890
  } finally {
3891
3891
  this.pressureSweepInFlight = false;
3892
3892
  }
@@ -1,4 +1,4 @@
1
- import { An as storageCapability, Ar as EventCategory, B as StorageLocationTypeSchema, Cr as parseJsonObject, Dn as settingsStoreCapability, Dt as evictionPolicyOfLocation, E as LegacyStorageLocationDefaultSchema, Hn as withLocationMode, M as REDACTED_SECRET, Pt as gbToBytes, Qt as mayWriteToLocation, R as StorageCleanupJobSchema, V as StorageMigrationJobSchema, Wt as legacyModeOf, Zt as mayReadLocation, ar as BaseAddon, bn as resolveLocationMode, jn as storageMigrationCapability, nt as collectSecretConfigKeys, tn as modeMayWrite, z as StorageLocationModeSchema, zt as isLocationEnabled } from "../../dist-C9Rk6KVv.mjs";
1
+ import { An as storageCapability, Ar as EventCategory, B as StorageLocationTypeSchema, Cr as parseJsonObject, Dn as settingsStoreCapability, Dt as evictionPolicyOfLocation, E as LegacyStorageLocationDefaultSchema, Hn as withLocationMode, M as REDACTED_SECRET, Pt as gbToBytes, Qt as mayWriteToLocation, R as StorageCleanupJobSchema, V as StorageMigrationJobSchema, Wt as legacyModeOf, Zt as mayReadLocation, ar as BaseAddon, bn as resolveLocationMode, jn as storageMigrationCapability, nt as collectSecretConfigKeys, tn as modeMayWrite, z as StorageLocationModeSchema, zt as isLocationEnabled } from "../../dist-BgJZdlW6.mjs";
2
2
  import { t as HUB_CAP_FWD_ACTION } from "../../hub-cap-forward-BdT320dq.mjs";
3
3
  import { z } from "zod";
4
4
  import { randomUUID } from "node:crypto";
@@ -3881,7 +3881,7 @@ var StorageOrchestratorAddon = class extends BaseAddon {
3881
3881
  try {
3882
3882
  await this.pressureManager.sweep();
3883
3883
  } catch (err) {
3884
- this.ctx.logger.warn("storage pressure sweep failed", { meta: { error: err instanceof Error ? err.message : String(err) } });
3884
+ this.ctxIfReady?.logger.warn("storage pressure sweep failed", { meta: { error: err instanceof Error ? err.message : String(err) } });
3885
3885
  } finally {
3886
3886
  this.pressureSweepInFlight = false;
3887
3887
  }
@@ -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-Cv1lnnQq.js");
6
+ const require_dist = require("../../dist-UT1QNI9K.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 { ar as BaseAddon, ir as errMsg, yr as hydrateSchema } from "../../dist-C9Rk6KVv.mjs";
1
+ import { ar as BaseAddon, ir as errMsg, yr as hydrateSchema } from "../../dist-BgJZdlW6.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-Cv1lnnQq.js");
6
+ const require_dist = require("../../dist-UT1QNI9K.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 { Jt as logDestinationCapability, ar as BaseAddon } from "../../dist-C9Rk6KVv.mjs";
1
+ import { Jt as logDestinationCapability, ar as BaseAddon } from "../../dist-BgJZdlW6.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";
@@ -1,5 +1,5 @@
1
1
  const require_chunk = require("./chunk-Cek0wNdY.js");
2
- const require_dist = require("./dist-Cv1lnnQq.js");
2
+ const require_dist = require("./dist-UT1QNI9K.js");
3
3
  const require_proc_stat = require("./proc-stat-DL-WUOhl.js");
4
4
  require("./hub-cap-forward-DmHNjbB0.js");
5
5
  let node_crypto = require("node:crypto");
@@ -1,4 +1,4 @@
1
- import { Ar as EventCategory$1, hr as createEvent } from "./dist-C9Rk6KVv.mjs";
1
+ import { Ar as EventCategory$1, hr as createEvent } from "./dist-BgJZdlW6.mjs";
2
2
  import { a as parseProcStat, i as nodeProcReader } from "./proc-stat-CbC55Kqi.mjs";
3
3
  import "./hub-cap-forward-BdT320dq.mjs";
4
4
  import * as crypto$1 from "node:crypto";
@@ -1,4 +1,4 @@
1
- import { Zn as compositionSourceKey, ir as errMsg } from "./dist-C9Rk6KVv.mjs";
1
+ import { Zn as compositionSourceKey, ir as errMsg } from "./dist-BgJZdlW6.mjs";
2
2
  //#region src/builtins/core-blocks/composition-sources.ts
3
3
  /**
4
4
  * Describe what a composition reads and writes for SAVE-time validation
@@ -1,4 +1,4 @@
1
- const require_dist = require("./dist-Cv1lnnQq.js");
1
+ const require_dist = require("./dist-UT1QNI9K.js");
2
2
  //#region src/builtins/core-blocks/composition-sources.ts
3
3
  /**
4
4
  * Describe what a composition reads and writes for SAVE-time validation
@@ -7875,7 +7875,18 @@ var LABEL_SUPPLY_STEP_IDS = [
7875
7875
  ];
7876
7876
  /** Steps whose box a root detection can BE. */
7877
7877
  var CROP_SUPPLY_STEP_IDS = ["plate-detection", "face-detection"];
7878
- [...LABEL_SUPPLY_STEP_IDS, ...CROP_SUPPLY_STEP_IDS];
7878
+ /**
7879
+ * Steps whose per-detection MASK a root detection can carry (D737). The live
7880
+ * mask step is `segmentation` — a frame-plane refiner that runs its own model
7881
+ * once per detection crop. (`instance-segmentation` is a dormant step id that
7882
+ * no camera tree carries.)
7883
+ */
7884
+ var MASK_SUPPLY_STEP_IDS = ["segmentation"];
7885
+ [
7886
+ ...LABEL_SUPPLY_STEP_IDS,
7887
+ ...CROP_SUPPLY_STEP_IDS,
7888
+ ...MASK_SUPPLY_STEP_IDS
7889
+ ];
7879
7890
  var MODEL_FORMATS = [
7880
7891
  "onnx",
7881
7892
  "coreml",
@@ -8019,25 +8030,36 @@ var ModelLicenseSchema = z.preprocess((value) => typeof value === "string" ? { w
8019
8030
  * - `crop`: the root draws the box the step would have found (`license_plate`
8020
8031
  * for plate-detection, `face` for face-detection). The box becomes a detail
8021
8032
  * child of the `parentMacro` detection that contains it — never a track.
8033
+ * - `mask`: the root's decode emits an instance mask with every detection (a
8034
+ * YOLO26-seg root, D737) — the `segmentation` step's result, carried on the
8035
+ * detection in the shape that step produces. Derived from the model's
8036
+ * postprocessor on read, never stored by an import.
8022
8037
  */
8023
- var RootStepSupplySchema = z.discriminatedUnion("kind", [z.object({
8024
- kind: z.literal("label"),
8025
- stepId: z.enum(LABEL_SUPPLY_STEP_IDS),
8026
- labelToEffect: z.record(z.string(), z.string()),
8027
- uncovered: z.array(z.string()).readonly()
8028
- }), z.object({
8029
- kind: z.literal("crop"),
8030
- stepId: z.enum(CROP_SUPPLY_STEP_IDS),
8031
- rootLabels: z.array(z.string()).readonly(),
8032
- parentMacro: z.enum(["vehicle", "person"]),
8033
- childClass: z.enum(["plate", "face"]),
8034
- /**
8035
- * The root's smaller input side, stamped on read by `rootSuppliesOf` from
8036
- * the model entry — what a step's `minRootInputPx` gate judges. Never
8037
- * stored by an import.
8038
- */
8039
- rootInputPx: z.number().int().positive().optional()
8040
- })]);
8038
+ var RootStepSupplySchema = z.discriminatedUnion("kind", [
8039
+ z.object({
8040
+ kind: z.literal("label"),
8041
+ stepId: z.enum(LABEL_SUPPLY_STEP_IDS),
8042
+ labelToEffect: z.record(z.string(), z.string()),
8043
+ uncovered: z.array(z.string()).readonly()
8044
+ }),
8045
+ z.object({
8046
+ kind: z.literal("crop"),
8047
+ stepId: z.enum(CROP_SUPPLY_STEP_IDS),
8048
+ rootLabels: z.array(z.string()).readonly(),
8049
+ parentMacro: z.enum(["vehicle", "person"]),
8050
+ childClass: z.enum(["plate", "face"]),
8051
+ /**
8052
+ * The root's smaller input side, stamped on read by `rootSuppliesOf` from
8053
+ * the model entry — what a step's `minRootInputPx` gate judges. Never
8054
+ * stored by an import.
8055
+ */
8056
+ rootInputPx: z.number().int().positive().optional()
8057
+ }),
8058
+ z.object({
8059
+ kind: z.literal("mask"),
8060
+ stepId: z.enum(MASK_SUPPLY_STEP_IDS)
8061
+ })
8062
+ ]);
8041
8063
  var ModelCatalogEntrySchema = z.object({
8042
8064
  id: z.string(),
8043
8065
  name: z.string(),
@@ -7875,7 +7875,18 @@ var LABEL_SUPPLY_STEP_IDS = [
7875
7875
  ];
7876
7876
  /** Steps whose box a root detection can BE. */
7877
7877
  var CROP_SUPPLY_STEP_IDS = ["plate-detection", "face-detection"];
7878
- [...LABEL_SUPPLY_STEP_IDS, ...CROP_SUPPLY_STEP_IDS];
7878
+ /**
7879
+ * Steps whose per-detection MASK a root detection can carry (D737). The live
7880
+ * mask step is `segmentation` — a frame-plane refiner that runs its own model
7881
+ * once per detection crop. (`instance-segmentation` is a dormant step id that
7882
+ * no camera tree carries.)
7883
+ */
7884
+ var MASK_SUPPLY_STEP_IDS = ["segmentation"];
7885
+ [
7886
+ ...LABEL_SUPPLY_STEP_IDS,
7887
+ ...CROP_SUPPLY_STEP_IDS,
7888
+ ...MASK_SUPPLY_STEP_IDS
7889
+ ];
7879
7890
  var MODEL_FORMATS = [
7880
7891
  "onnx",
7881
7892
  "coreml",
@@ -8019,25 +8030,36 @@ var ModelLicenseSchema = zod.z.preprocess((value) => typeof value === "string" ?
8019
8030
  * - `crop`: the root draws the box the step would have found (`license_plate`
8020
8031
  * for plate-detection, `face` for face-detection). The box becomes a detail
8021
8032
  * child of the `parentMacro` detection that contains it — never a track.
8033
+ * - `mask`: the root's decode emits an instance mask with every detection (a
8034
+ * YOLO26-seg root, D737) — the `segmentation` step's result, carried on the
8035
+ * detection in the shape that step produces. Derived from the model's
8036
+ * postprocessor on read, never stored by an import.
8022
8037
  */
8023
- var RootStepSupplySchema = zod.z.discriminatedUnion("kind", [zod.z.object({
8024
- kind: zod.z.literal("label"),
8025
- stepId: zod.z.enum(LABEL_SUPPLY_STEP_IDS),
8026
- labelToEffect: zod.z.record(zod.z.string(), zod.z.string()),
8027
- uncovered: zod.z.array(zod.z.string()).readonly()
8028
- }), zod.z.object({
8029
- kind: zod.z.literal("crop"),
8030
- stepId: zod.z.enum(CROP_SUPPLY_STEP_IDS),
8031
- rootLabels: zod.z.array(zod.z.string()).readonly(),
8032
- parentMacro: zod.z.enum(["vehicle", "person"]),
8033
- childClass: zod.z.enum(["plate", "face"]),
8034
- /**
8035
- * The root's smaller input side, stamped on read by `rootSuppliesOf` from
8036
- * the model entry — what a step's `minRootInputPx` gate judges. Never
8037
- * stored by an import.
8038
- */
8039
- rootInputPx: zod.z.number().int().positive().optional()
8040
- })]);
8038
+ var RootStepSupplySchema = zod.z.discriminatedUnion("kind", [
8039
+ zod.z.object({
8040
+ kind: zod.z.literal("label"),
8041
+ stepId: zod.z.enum(LABEL_SUPPLY_STEP_IDS),
8042
+ labelToEffect: zod.z.record(zod.z.string(), zod.z.string()),
8043
+ uncovered: zod.z.array(zod.z.string()).readonly()
8044
+ }),
8045
+ zod.z.object({
8046
+ kind: zod.z.literal("crop"),
8047
+ stepId: zod.z.enum(CROP_SUPPLY_STEP_IDS),
8048
+ rootLabels: zod.z.array(zod.z.string()).readonly(),
8049
+ parentMacro: zod.z.enum(["vehicle", "person"]),
8050
+ childClass: zod.z.enum(["plate", "face"]),
8051
+ /**
8052
+ * The root's smaller input side, stamped on read by `rootSuppliesOf` from
8053
+ * the model entry — what a step's `minRootInputPx` gate judges. Never
8054
+ * stored by an import.
8055
+ */
8056
+ rootInputPx: zod.z.number().int().positive().optional()
8057
+ }),
8058
+ zod.z.object({
8059
+ kind: zod.z.literal("mask"),
8060
+ stepId: zod.z.enum(MASK_SUPPLY_STEP_IDS)
8061
+ })
8062
+ ]);
8041
8063
  var ModelCatalogEntrySchema = zod.z.object({
8042
8064
  id: zod.z.string(),
8043
8065
  name: zod.z.string(),
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-Cv1lnnQq.js");
3
+ const require_dist = require("./dist-UT1QNI9K.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_builtins_calendars_calendars_addon = require("./builtins/calendars/calendars.addon.js");
@@ -31,7 +31,7 @@ require("./builtins/system-config/index.js");
31
31
  const require_builtins_winston_logging_index = require("./builtins/winston-logging/index.js");
32
32
  const require_event_loop_stall_monitor = require("./event-loop-stall-monitor-ey4mbofz.js");
33
33
  const require_tls$1 = require("./tls-CCMX7MjX.js");
34
- const require_child_cap_dispatch = require("./child-cap-dispatch-T3Kdhbb3.js");
34
+ const require_child_cap_dispatch = require("./child-cap-dispatch-CV8_LDxx.js");
35
35
  const require_resource_monitor = require("./resource-monitor-BgWGRxN5.js");
36
36
  const require_custom_action_registry = require("./custom-action-registry-acBY3mHA.js");
37
37
  let zod = require("zod");
package/dist/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  import { a as __toCommonJS, i as __require, n as __esmMin, o as __toESM$1, r as __exportAll, t as __commonJSMin$1 } from "./chunk-CNf5ZN-e.mjs";
2
- import { Ar as EventCategory$1, At as extractNestedAddonId, Bt as isObjectInput, Cr as parseJsonObject, Dr as scopeKey, Er as resolveCapMount, Gt as lifecycleJobSchema, Ht as kebabToCamel, It as isArrayOutputSchema, Lt as isCollectionArrayMethod, N as RUNTIME_DEFAULTS, O as METHOD_ACCESS_MAP, T as LOG_LEVEL_RANK, Tn as scopesAllowDeviceCap, Tr as readinessKey, Vt as isVoidInput, W as addonSettingsCapability, Xt as looseSchema, Yt as logLevelAtMost, an as objectInputDeclaresAddonId, cr as DEVICE_STATUS_METHOD, dn as procedureAuthKey, fr as asJsonObject$1, gr as emitDownForOwnedCaps, hr as createEvent, ir as errMsg$1, lr as ReadinessRegistry, mr as asString$1, on as objectInputDeclaresRequiredDeviceId, or as DATAPLANE_SECRET_HEADER$1, pr as asNumber, sr as DEVICE_SETTINGS_CONTRIBUTION_METHODS, t as ALL_CAPABILITY_DEFINITIONS, ur as ReadinessTimeoutError, vr as expandCapMethods, wn as scopesAllowAddon, wr as parseJsonUnknown, xn as resolveMethodAuth } from "./dist-C9Rk6KVv.mjs";
2
+ import { Ar as EventCategory$1, At as extractNestedAddonId, Bt as isObjectInput, Cr as parseJsonObject, Dr as scopeKey, Er as resolveCapMount, Gt as lifecycleJobSchema, Ht as kebabToCamel, It as isArrayOutputSchema, Lt as isCollectionArrayMethod, N as RUNTIME_DEFAULTS, O as METHOD_ACCESS_MAP, T as LOG_LEVEL_RANK, Tn as scopesAllowDeviceCap, Tr as readinessKey, Vt as isVoidInput, W as addonSettingsCapability, Xt as looseSchema, Yt as logLevelAtMost, an as objectInputDeclaresAddonId, cr as DEVICE_STATUS_METHOD, dn as procedureAuthKey, fr as asJsonObject$1, gr as emitDownForOwnedCaps, hr as createEvent, ir as errMsg$1, lr as ReadinessRegistry, mr as asString$1, on as objectInputDeclaresRequiredDeviceId, or as DATAPLANE_SECRET_HEADER$1, pr as asNumber, sr as DEVICE_SETTINGS_CONTRIBUTION_METHODS, t as ALL_CAPABILITY_DEFINITIONS, ur as ReadinessTimeoutError, vr as expandCapMethods, wn as scopesAllowAddon, wr as parseJsonUnknown, xn as resolveMethodAuth } from "./dist-BgJZdlW6.mjs";
3
3
  import { AlertCenterAddon } from "./builtins/alerts/alerts.addon.mjs";
4
4
  import "./builtins/alerts/index.mjs";
5
5
  import { CalendarsAddon } from "./builtins/calendars/calendars.addon.mjs";
@@ -30,7 +30,7 @@ import "./builtins/system-config/index.mjs";
30
30
  import { WinstonDestination, WinstonLoggingAddon } from "./builtins/winston-logging/index.mjs";
31
31
  import { _ as ensureModel, a as createFileDataPlaneHandler, c as parseRangeHeader, d as ModelDownloadService, g as downloadModel, h as downloadFile, i as startEventLoopStallMonitor, l as parseTokenizedUrl, m as deleteModelFromDisk, n as STALL_TICK_MS, o as contentTypeFor, p as collectModelFiles, r as attributeStall, s as createAuthenticatedFileServer, t as STALL_REPORT_MS, u as resolveFilePath, v as fetchJson, x as isModelDownloaded, y as getModelFilePath } from "./event-loop-stall-monitor-EXjzIxDz.mjs";
32
32
  import { A as allFamiliesListenHost, C as collectCertIdentity, D as SERVER_AUTH_OID, E as MAX_LEAF_VALIDITY_DAYS, F as registerLanHttpHandler, M as bindPendingLanHttp, N as closeLanHttp, O as evaluateExistingCert, P as readLanHttpState, S as CA_COMMON_NAME, T as LEAF_RENEWAL_WINDOW_DAYS, _ as writeExtraSans, a as validateUploadedTls, b as loadTlsCert, c as registerHttpsListener, d as prepareBootTls, f as UPLOADED_CA_FILE, g as splitPemCertificates, h as readTlsMode, i as storeUploadedCertificate, j as applyLanHttp, k as DEFAULT_LAN_HTTP_PORT, l as reloadHttpsListener, m as readTlsAccessStatus, n as regenerateCertificate, o as clearHttpsListener, p as readExtraSans, r as revertToGeneratedCertificate, s as leafFingerprintOf, t as applyCertificateToListener, u as servedHttpsLeafFingerprint, v as writeTlsMode, w as CA_VALIDITY_DAYS, x as reissueTlsLeaf, y as ensureTlsCert } from "./tls-CJHogwTl.mjs";
33
- import { $ as CapRouteError, $n as EMPTY_CAP_ACTION_READING, $t as RUNNER_RSS_BUDGET_ENV, A as resolveHwAccel, An as OUTBOUND_QUEUE_SUSTAIN_MS, At as DeviceRegistry, B as udsChildLogToWorkerEntry, Bn as createSocketPlaneMeter, Bt as hostNodeIdOf, C as getBrokerEventBus, Cn as HEAP_SPACE_REPORT_MIN_MB, Ct as capActionName, D as subscribePassthrough, Dn as readHeapSpaces, Dt as parseCapAction, E as setNodeEventInterest, En as heapSpaceField, Et as capServiceName, F as ipcParentLink, Fn as createMeshQueueReader, Ft as resolveAddonClass, G as UDS_NO_ROUTE_PREFIX, Gn as EMPTY_SOCKET_DIRECTION, Gt as HEAP_WATCH_INTERVAL_MS, H as createUdsLoggerWithControl, Hn as diffSocketPlane, Ht as HEAP_RECLAIM_MIN_INTERVAL_MS, I as localProviderLink, In as formatMeshQueue, It as buildNpmChildEnv, J as answerClaimedGetStatus, Jn as sampleSocketDirection, Jt as HUB_MAIN_RSS_BUDGET_MB, K as afterWorkerOnlineAnnounce, Kn as createSocketDirectionCounters, Kt as HEAP_WATCH_WARN_RATIO, L as createParentUnownedCallHandler, Ln as EMPTY_SOCKET_PLANE_BASELINE, Lt as resolveNpmInvocation, M as brokerTransportLink, Mn as createOutboundQueueGate, Mt as CapabilityUnavailableError, N as buildLinkChain, Nn as formatOutboundQueueVerdict, Nt as copyBundledNativeModules, O as AddonDepsManager, On as selectReportedSpaces, Ot as deserializeTypedArrays, P as deviceCapResolverLink, Pn as MESH_QUEUE_TOP_N, Pt as installManifestNativeDeps, Q as CapRouteResolver, Qn as CAP_ACTION_UNLABELLED, Qt as RUNNER_HEAP_WATCH_INTERVAL_MS, R as createUdsEventBridge, Rn as SOCKET_PLANE_TOP_N, Rt as runNpm, S as clusterEventTopic, Sn as DECISIVE_HEAP_SPACES, St as NATIVE_PROVIDER_SERVICE_INFIX, T as registerEventBusService, Tn as formatHeapSpaces, Tt as capBareAction, U as LocalChildClient, Un as formatSocketPlane, Ut as HEAP_RECLAIM_STEADY_STATE_INTERVAL_MS, V as createUdsLogger, Vn as createSocketPlaneReader, Vt as createAddonDataPlaneFacility, W as LocalChildRegistry, Wn as readSocketQueues, Wt as HEAP_RECLAIM_TRIGGER_MB, X as AGENT_CAP_FWD_ACTION, Xn as socketDirectionMessages, Xt as RSS_BUDGET_REANNOUNCE_MIN_MS, Y as deviceOfGetStatus, Yn as socketDirectionBytes, Yt as HUB_RSS_BUDGET_ENV, Z as AGENT_CAP_FWD_SERVICE, Zn as CAP_ACTION_OVERFLOW_LABEL, Zt as RSS_BUDGET_RELEASE_RATIO, _ as getWorkerDeviceRegistry, _n as ARRAY_BUFFER_RELEASE_MIN_DROP_RATIO, a as reapProcessGroup, an as describeRss, ar as createEventPlaneMeter, at as getCapUsageRegistry, b as setHubConnected, bn as formatArrayBufferCensus, bt as createAddonService, c as runnerOwnsProcessGroup, cn as parseRssBudgetMb, cr as formatEventPlane, ct as UdsLocalTransportServer, d as summarizeMembers, dn as startHeapWatch, dt as localEndpointPath, en as ZERO_LOOP_DELAY, er as MAX_CAP_ACTIONS_PER_PEER, et as classifyCapRoute, f as installManifestSystemDeps, fn as startRunnerHeapWatch, ft as FrameDecoder, g as createUdsAddonContext, gn as ARRAY_BUFFER_CENSUS_THRESHOLD_MB, h as createAddonContext, hn as ARRAY_BUFFER_CENSUS_SUSTAIN_MS, ht as createBrokerDeviceManagerApi, in as createV8Reclaimer, ir as EVENT_PLANE_TOP_N, it as __resetCapUsageRegistryForTests, j as brokerCallForCap, jn as OUTBOUND_QUEUE_THRESHOLD_BYTES, jt as CapabilityHandle, k as createKernelHwAccel, kn as OUTBOUND_QUEUE_COOLDOWN_MS, kt as serializeTypedArrays, l as signalAllRunnerGroups, ln as reclaimIntervalMs, lt as SocketChannel, m as adaptBrokerToCluster, mn as ARRAY_BUFFER_CENSUS_COOLDOWN_MS, mt as buildNativeCapProxy, nn as createDeferredHeapWatchSink, nr as createCapActionCensus, nt as CapUsageRegistry, o as registerRunnerGroup, on as hubMainRssBudget, or as createEventPlaneReader, ot as createLocalTransport, p as installManifestPythonDeps, pn as strandedMb, pt as encodeFrame, q as GET_STATUS_METHOD, qn as recordSocketFrame, qt as HUB_MAIN_HEAP_WATCH_LABEL, r as defaultProcessGroupOps, rn as createLoopDelayMeter, rr as diffCapActionCensus, rt as PARENT_ROUTED_PROVIDER_ADDON_ID, s as releaseRunnerGroup, sn as nextRssBudgetState, sr as diffEventPlane, st as UdsLocalTransportClient, t as CAP_METHOD_NOT_IMPLEMENTED, tn as buildHeapSample, tr as capActionLabel, tt as callWithServiceDiscovery, un as shouldReclaim, ut as PeerAnsweredError, v as getOrInitReadinessRegistry, vn as createArrayBufferCensusGate, vt as mountNativeCapService, w as getMoleculerEventStats, wn as emitHeapDiagnosticReport, wt as capActionSuffix, x as EVENT_TOPIC_PREFIX, xn as isArrayBufferCensusReport, xt as validateProviderRegistrations, y as getOrInitReadinessRegistryForClient, yn as createInspectorArrayBufferCensus, z as createUdsEventBus, zn as SOCKET_QUEUE_TOP_N, zt as createAddonPeerBytesFacility } from "./child-cap-dispatch-StBHObCA.mjs";
33
+ import { $ as CapRouteError, $n as EMPTY_CAP_ACTION_READING, $t as RUNNER_RSS_BUDGET_ENV, A as resolveHwAccel, An as OUTBOUND_QUEUE_SUSTAIN_MS, At as DeviceRegistry, B as udsChildLogToWorkerEntry, Bn as createSocketPlaneMeter, Bt as hostNodeIdOf, C as getBrokerEventBus, Cn as HEAP_SPACE_REPORT_MIN_MB, Ct as capActionName, D as subscribePassthrough, Dn as readHeapSpaces, Dt as parseCapAction, E as setNodeEventInterest, En as heapSpaceField, Et as capServiceName, F as ipcParentLink, Fn as createMeshQueueReader, Ft as resolveAddonClass, G as UDS_NO_ROUTE_PREFIX, Gn as EMPTY_SOCKET_DIRECTION, Gt as HEAP_WATCH_INTERVAL_MS, H as createUdsLoggerWithControl, Hn as diffSocketPlane, Ht as HEAP_RECLAIM_MIN_INTERVAL_MS, I as localProviderLink, In as formatMeshQueue, It as buildNpmChildEnv, J as answerClaimedGetStatus, Jn as sampleSocketDirection, Jt as HUB_MAIN_RSS_BUDGET_MB, K as afterWorkerOnlineAnnounce, Kn as createSocketDirectionCounters, Kt as HEAP_WATCH_WARN_RATIO, L as createParentUnownedCallHandler, Ln as EMPTY_SOCKET_PLANE_BASELINE, Lt as resolveNpmInvocation, M as brokerTransportLink, Mn as createOutboundQueueGate, Mt as CapabilityUnavailableError, N as buildLinkChain, Nn as formatOutboundQueueVerdict, Nt as copyBundledNativeModules, O as AddonDepsManager, On as selectReportedSpaces, Ot as deserializeTypedArrays, P as deviceCapResolverLink, Pn as MESH_QUEUE_TOP_N, Pt as installManifestNativeDeps, Q as CapRouteResolver, Qn as CAP_ACTION_UNLABELLED, Qt as RUNNER_HEAP_WATCH_INTERVAL_MS, R as createUdsEventBridge, Rn as SOCKET_PLANE_TOP_N, Rt as runNpm, S as clusterEventTopic, Sn as DECISIVE_HEAP_SPACES, St as NATIVE_PROVIDER_SERVICE_INFIX, T as registerEventBusService, Tn as formatHeapSpaces, Tt as capBareAction, U as LocalChildClient, Un as formatSocketPlane, Ut as HEAP_RECLAIM_STEADY_STATE_INTERVAL_MS, V as createUdsLogger, Vn as createSocketPlaneReader, Vt as createAddonDataPlaneFacility, W as LocalChildRegistry, Wn as readSocketQueues, Wt as HEAP_RECLAIM_TRIGGER_MB, X as AGENT_CAP_FWD_ACTION, Xn as socketDirectionMessages, Xt as RSS_BUDGET_REANNOUNCE_MIN_MS, Y as deviceOfGetStatus, Yn as socketDirectionBytes, Yt as HUB_RSS_BUDGET_ENV, Z as AGENT_CAP_FWD_SERVICE, Zn as CAP_ACTION_OVERFLOW_LABEL, Zt as RSS_BUDGET_RELEASE_RATIO, _ as getWorkerDeviceRegistry, _n as ARRAY_BUFFER_RELEASE_MIN_DROP_RATIO, a as reapProcessGroup, an as describeRss, ar as createEventPlaneMeter, at as getCapUsageRegistry, b as setHubConnected, bn as formatArrayBufferCensus, bt as createAddonService, c as runnerOwnsProcessGroup, cn as parseRssBudgetMb, cr as formatEventPlane, ct as UdsLocalTransportServer, d as summarizeMembers, dn as startHeapWatch, dt as localEndpointPath, en as ZERO_LOOP_DELAY, er as MAX_CAP_ACTIONS_PER_PEER, et as classifyCapRoute, f as installManifestSystemDeps, fn as startRunnerHeapWatch, ft as FrameDecoder, g as createUdsAddonContext, gn as ARRAY_BUFFER_CENSUS_THRESHOLD_MB, h as createAddonContext, hn as ARRAY_BUFFER_CENSUS_SUSTAIN_MS, ht as createBrokerDeviceManagerApi, in as createV8Reclaimer, ir as EVENT_PLANE_TOP_N, it as __resetCapUsageRegistryForTests, j as brokerCallForCap, jn as OUTBOUND_QUEUE_THRESHOLD_BYTES, jt as CapabilityHandle, k as createKernelHwAccel, kn as OUTBOUND_QUEUE_COOLDOWN_MS, kt as serializeTypedArrays, l as signalAllRunnerGroups, ln as reclaimIntervalMs, lt as SocketChannel, m as adaptBrokerToCluster, mn as ARRAY_BUFFER_CENSUS_COOLDOWN_MS, mt as buildNativeCapProxy, nn as createDeferredHeapWatchSink, nr as createCapActionCensus, nt as CapUsageRegistry, o as registerRunnerGroup, on as hubMainRssBudget, or as createEventPlaneReader, ot as createLocalTransport, p as installManifestPythonDeps, pn as strandedMb, pt as encodeFrame, q as GET_STATUS_METHOD, qn as recordSocketFrame, qt as HUB_MAIN_HEAP_WATCH_LABEL, r as defaultProcessGroupOps, rn as createLoopDelayMeter, rr as diffCapActionCensus, rt as PARENT_ROUTED_PROVIDER_ADDON_ID, s as releaseRunnerGroup, sn as nextRssBudgetState, sr as diffEventPlane, st as UdsLocalTransportClient, t as CAP_METHOD_NOT_IMPLEMENTED, tn as buildHeapSample, tr as capActionLabel, tt as callWithServiceDiscovery, un as shouldReclaim, ut as PeerAnsweredError, v as getOrInitReadinessRegistry, vn as createArrayBufferCensusGate, vt as mountNativeCapService, w as getMoleculerEventStats, wn as emitHeapDiagnosticReport, wt as capActionSuffix, x as EVENT_TOPIC_PREFIX, xn as isArrayBufferCensusReport, xt as validateProviderRegistrations, y as getOrInitReadinessRegistryForClient, yn as createInspectorArrayBufferCensus, z as createUdsEventBus, zn as SOCKET_QUEUE_TOP_N, zt as createAddonPeerBytesFacility } from "./child-cap-dispatch-Cr70toWw.mjs";
34
34
  import { n as getSinglePidStats, t as getPidStats } from "./resource-monitor-B2WZ8_q9.mjs";
35
35
  import { t as CustomActionRegistry } from "./custom-action-registry-B4Cf4O_X.mjs";
36
36
  import { z } from "zod";
@@ -1,4 +1,4 @@
1
- const require_dist = require("./dist-Cv1lnnQq.js");
1
+ const require_dist = require("./dist-UT1QNI9K.js");
2
2
  //#region src/builtins/sqlite-storage/retired-settings-keys.ts
3
3
  /**
4
4
  * Is THIS node the one whose settings store is the cluster's authority?
@@ -1,4 +1,4 @@
1
- import { fr as asJsonObject } from "./dist-C9Rk6KVv.mjs";
1
+ import { fr as asJsonObject } from "./dist-BgJZdlW6.mjs";
2
2
  //#region src/builtins/sqlite-storage/retired-settings-keys.ts
3
3
  /**
4
4
  * Is THIS node the one whose settings store is the cluster's authority?
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/system",
3
- "version": "1.2.360",
3
+ "version": "1.2.362",
4
4
  "description": "Core addon for CamStack — builtins, pipeline, process management, auth, logging, events",
5
5
  "keywords": [
6
6
  "camstack",