camstack 1.2.56 → 1.2.58

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.
package/dist/cli.js CHANGED
@@ -38,7 +38,7 @@ async function runServe(args) {
38
38
  ...typeof values.data === "string" ? { data: values.data } : {}
39
39
  };
40
40
  Object.assign(process.env, buildServeEnv(opts));
41
- await import("./launcher-3MW23WFM.js");
41
+ await import("./launcher-AL5IQ6H2.js");
42
42
  }
43
43
 
44
44
  // src/commands/agent.ts
@@ -83,7 +83,7 @@ async function runAgent(args) {
83
83
  ...typeof values.port === "string" ? { port: values.port } : {}
84
84
  };
85
85
  Object.assign(process.env, buildAgentEnv(opts));
86
- await import("./launcher-3MW23WFM.js");
86
+ await import("./launcher-AL5IQ6H2.js");
87
87
  }
88
88
 
89
89
  // src/commands/setup.ts
@@ -23633,9 +23633,9 @@ var require_zod = __commonJS({
23633
23633
  }
23634
23634
  });
23635
23635
 
23636
- // ../system/dist/dist-CImxMt5h.js
23637
- var require_dist_CImxMt5h = __commonJS({
23638
- "../system/dist/dist-CImxMt5h.js"(exports) {
23636
+ // ../system/dist/dist-CxgTulEG.js
23637
+ var require_dist_CxgTulEG = __commonJS({
23638
+ "../system/dist/dist-CxgTulEG.js"(exports) {
23639
23639
  "use strict";
23640
23640
  var zod = require_zod();
23641
23641
  var EventCategory = /* @__PURE__ */ (function(EventCategory2) {
@@ -58639,7 +58639,7 @@ var require_alerts_addon = __commonJS({
58639
58639
  [Symbol.toStringTag]: { value: "Module" }
58640
58640
  });
58641
58641
  require_chunk_Cek0wNdY();
58642
- var require_dist10 = require_dist_CImxMt5h();
58642
+ var require_dist10 = require_dist_CxgTulEG();
58643
58643
  function selectExpired(alerts, cutoffMs) {
58644
58644
  return alerts.filter((a) => a.createdAt < cutoffMs).sort((a, b) => a.createdAt - b.createdAt).map((a) => a.id);
58645
58645
  }
@@ -59458,7 +59458,7 @@ var require_console_logging = __commonJS({
59458
59458
  [Symbol.toStringTag]: { value: "Module" }
59459
59459
  });
59460
59460
  require_chunk_Cek0wNdY();
59461
- var require_dist10 = require_dist_CImxMt5h();
59461
+ var require_dist10 = require_dist_CxgTulEG();
59462
59462
  var require_formatter = require_formatter_DqAKDlvN();
59463
59463
  var LEVEL_RANK = {
59464
59464
  debug: 0,
@@ -59552,7 +59552,7 @@ var require_core_blocks_addon = __commonJS({
59552
59552
  "use strict";
59553
59553
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
59554
59554
  var require_chunk = require_chunk_Cek0wNdY();
59555
- var require_dist10 = require_dist_CImxMt5h();
59555
+ var require_dist10 = require_dist_CxgTulEG();
59556
59556
  var node_crypto = __require("crypto");
59557
59557
  var node_fs_promises = __require("fs/promises");
59558
59558
  node_fs_promises = require_chunk.__toESM(node_fs_promises);
@@ -60449,11 +60449,11 @@ var require_core_blocks = __commonJS({
60449
60449
  }
60450
60450
  });
60451
60451
 
60452
- // ../system/dist/retired-settings-keys-C7gLUS3x.js
60453
- var require_retired_settings_keys_C7gLUS3x = __commonJS({
60454
- "../system/dist/retired-settings-keys-C7gLUS3x.js"(exports) {
60452
+ // ../system/dist/retired-settings-keys-BbjWjol0.js
60453
+ var require_retired_settings_keys_BbjWjol0 = __commonJS({
60454
+ "../system/dist/retired-settings-keys-BbjWjol0.js"(exports) {
60455
60455
  "use strict";
60456
- var require_dist10 = require_dist_CImxMt5h();
60456
+ var require_dist10 = require_dist_CxgTulEG();
60457
60457
  function settingsStoreIsAuthoritativeHere(env) {
60458
60458
  const raw = (env["CAMSTACK_ROLE"] ?? "").trim().toLowerCase();
60459
60459
  return raw === "" || raw === "hub";
@@ -62667,8 +62667,8 @@ var require_device_manager_addon = __commonJS({
62667
62667
  [Symbol.toStringTag]: { value: "Module" }
62668
62668
  });
62669
62669
  require_chunk_Cek0wNdY();
62670
- var require_dist10 = require_dist_CImxMt5h();
62671
- var require_retired_settings_keys = require_retired_settings_keys_C7gLUS3x();
62670
+ var require_dist10 = require_dist_CxgTulEG();
62671
+ var require_retired_settings_keys = require_retired_settings_keys_BbjWjol0();
62672
62672
  var node_crypto = __require("crypto");
62673
62673
  var _camstack_types_node = require_node();
62674
62674
  var JOB_HISTORY = 20;
@@ -67417,7 +67417,7 @@ var require_hub_forwarder = __commonJS({
67417
67417
  [Symbol.toStringTag]: { value: "Module" }
67418
67418
  });
67419
67419
  require_chunk_Cek0wNdY();
67420
- var require_dist10 = require_dist_CImxMt5h();
67420
+ var require_dist10 = require_dist_CxgTulEG();
67421
67421
  var require_formatter = require_formatter_DqAKDlvN();
67422
67422
  var DEFAULT_OUTBOUND_BUFFER_SIZE = 500;
67423
67423
  var HubForwarderDestination = class {
@@ -67554,7 +67554,7 @@ var require_liveness_monitor_addon = __commonJS({
67554
67554
  "use strict";
67555
67555
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
67556
67556
  require_chunk_Cek0wNdY();
67557
- var require_dist10 = require_dist_CImxMt5h();
67557
+ var require_dist10 = require_dist_CxgTulEG();
67558
67558
  var NO_DEVICES = "liveness:no-devices";
67559
67559
  var ALL_OFFLINE = "liveness:all-devices-offline";
67560
67560
  var NO_FOOTAGE_PREFIX = "liveness:no-footage:";
@@ -67744,7 +67744,7 @@ var require_local_auth_addon = __commonJS({
67744
67744
  [Symbol.toStringTag]: { value: "Module" }
67745
67745
  });
67746
67746
  var require_chunk = require_chunk_Cek0wNdY();
67747
- var require_dist10 = require_dist_CImxMt5h();
67747
+ var require_dist10 = require_dist_CxgTulEG();
67748
67748
  var node_crypto = __require("crypto");
67749
67749
  node_crypto = require_chunk.__toESM(node_crypto);
67750
67750
  var crypto$1 = __require("crypto");
@@ -75557,7 +75557,7 @@ var require_loki_logging = __commonJS({
75557
75557
  [Symbol.toStringTag]: { value: "Module" }
75558
75558
  });
75559
75559
  require_chunk_Cek0wNdY();
75560
- var require_dist10 = require_dist_CImxMt5h();
75560
+ var require_dist10 = require_dist_CxgTulEG();
75561
75561
  function sanitizeLabelName(raw) {
75562
75562
  const replaced = raw.replaceAll(/[^a-zA-Z0-9_]/g, "_");
75563
75563
  return /^[a-zA-Z_]/.test(replaced) ? replaced : `_${replaced}`;
@@ -76122,7 +76122,7 @@ var require_native_metrics_addon = __commonJS({
76122
76122
  [Symbol.toStringTag]: { value: "Module" }
76123
76123
  });
76124
76124
  var require_chunk = require_chunk_Cek0wNdY();
76125
- var require_dist10 = require_dist_CImxMt5h();
76125
+ var require_dist10 = require_dist_CxgTulEG();
76126
76126
  var node_fs_promises = __require("fs/promises");
76127
76127
  var node_child_process = __require("child_process");
76128
76128
  var node_util = __require("util");
@@ -78079,7 +78079,7 @@ var require_filesystem_storage_addon = __commonJS({
78079
78079
  [Symbol.toStringTag]: { value: "Module" }
78080
78080
  });
78081
78081
  var require_chunk = require_chunk_Cek0wNdY();
78082
- var require_dist10 = require_dist_CImxMt5h();
78082
+ var require_dist10 = require_dist_CxgTulEG();
78083
78083
  var node_crypto = __require("crypto");
78084
78084
  var node_fs_promises = __require("fs/promises");
78085
78085
  var node_path = __require("path");
@@ -79195,8 +79195,8 @@ var require_sqlite_settings_addon = __commonJS({
79195
79195
  [Symbol.toStringTag]: { value: "Module" }
79196
79196
  });
79197
79197
  var require_chunk = require_chunk_Cek0wNdY();
79198
- var require_dist10 = require_dist_CImxMt5h();
79199
- var require_retired_settings_keys = require_retired_settings_keys_C7gLUS3x();
79198
+ var require_dist10 = require_dist_CxgTulEG();
79199
+ var require_retired_settings_keys = require_retired_settings_keys_BbjWjol0();
79200
79200
  var node_crypto = __require("crypto");
79201
79201
  var node_fs = __require("fs");
79202
79202
  var node_module = __require("module");
@@ -81475,7 +81475,7 @@ var require_storage_orchestrator_addon = __commonJS({
81475
81475
  [Symbol.toStringTag]: { value: "Module" }
81476
81476
  });
81477
81477
  var require_chunk = require_chunk_Cek0wNdY();
81478
- var require_dist10 = require_dist_CImxMt5h();
81478
+ var require_dist10 = require_dist_CxgTulEG();
81479
81479
  var node_crypto = __require("crypto");
81480
81480
  var node_fs_promises = __require("fs/promises");
81481
81481
  node_fs_promises = require_chunk.__toESM(node_fs_promises);
@@ -83356,7 +83356,7 @@ var require_system_config_addon = __commonJS({
83356
83356
  [Symbol.toStringTag]: { value: "Module" }
83357
83357
  });
83358
83358
  require_chunk_Cek0wNdY();
83359
- var require_dist10 = require_dist_CImxMt5h();
83359
+ var require_dist10 = require_dist_CxgTulEG();
83360
83360
  var SECTION_TITLES = {
83361
83361
  server: "Server",
83362
83362
  auth: "Authentication"
@@ -101417,7 +101417,7 @@ var require_winston_logging = __commonJS({
101417
101417
  [Symbol.toStringTag]: { value: "Module" }
101418
101418
  });
101419
101419
  var require_chunk = require_chunk_Cek0wNdY();
101420
- var require_dist10 = require_dist_CImxMt5h();
101420
+ var require_dist10 = require_dist_CxgTulEG();
101421
101421
  var require_formatter = require_formatter_DqAKDlvN();
101422
101422
  var node_path = __require("path");
101423
101423
  node_path = require_chunk.__toESM(node_path);
@@ -113905,12 +113905,12 @@ var require_dist2 = __commonJS({
113905
113905
  }
113906
113906
  });
113907
113907
 
113908
- // ../system/dist/manifest-python-deps-BaVekjRY.js
113909
- var require_manifest_python_deps_BaVekjRY = __commonJS({
113910
- "../system/dist/manifest-python-deps-BaVekjRY.js"(exports) {
113908
+ // ../system/dist/manifest-python-deps-CcDe4S2Z.js
113909
+ var require_manifest_python_deps_CcDe4S2Z = __commonJS({
113910
+ "../system/dist/manifest-python-deps-CcDe4S2Z.js"(exports) {
113911
113911
  "use strict";
113912
113912
  var require_chunk = require_chunk_Cek0wNdY();
113913
- require_dist_CImxMt5h();
113913
+ require_dist_CxgTulEG();
113914
113914
  var node_crypto = __require("crypto");
113915
113915
  node_crypto = require_chunk.__toESM(node_crypto);
113916
113916
  var _camstack_types_node = require_node();
@@ -113924,14 +113924,162 @@ var require_manifest_python_deps_BaVekjRY = __commonJS({
113924
113924
  var node_fs = __require("fs");
113925
113925
  node_fs = require_chunk.__toESM(node_fs);
113926
113926
  var node_http = __require("http");
113927
- var node_perf_hooks = __require("perf_hooks");
113928
113927
  var node_v8 = __require("v8");
113929
113928
  node_v8 = require_chunk.__toESM(node_v8);
113929
+ var node_perf_hooks = __require("perf_hooks");
113930
113930
  var node_vm = __require("vm");
113931
113931
  node_vm = require_chunk.__toESM(node_vm);
113932
113932
  var _camstack_types_addon = require_addon();
113933
113933
  var node_net = __require("net");
113934
113934
  var _trpc_client = require_dist2();
113935
+ function createEventPlaneReader(sources) {
113936
+ return () => {
113937
+ try {
113938
+ const registry = sources.registry();
113939
+ if (registry === null) return void 0;
113940
+ const children = [];
113941
+ const listed = registry.listChildren();
113942
+ for (const child of listed) {
113943
+ const stats = registry.getChildEventStats(child.childId);
113944
+ if (stats === null) continue;
113945
+ children.push({
113946
+ childId: child.childId,
113947
+ sent: stats.sent,
113948
+ suppressed: stats.suppressed
113949
+ });
113950
+ }
113951
+ const crossNode = sources.crossNodeStats();
113952
+ return {
113953
+ udsMode: registry.eventFanoutMode,
113954
+ crossNodeMode: sources.crossNodeMode(),
113955
+ children,
113956
+ childrenConnected: listed.length,
113957
+ childrenUndeclared: registry.undeclaredChildCount(),
113958
+ crossNodeDelivered: crossNode?.delivered ?? 0,
113959
+ crossNodeSuppressed: crossNode?.suppressed ?? 0
113960
+ };
113961
+ } catch {
113962
+ return;
113963
+ }
113964
+ };
113965
+ }
113966
+ var EVENT_PLANE_TOP_N = 5;
113967
+ var EMPTY_EVENT_PLANE_BASELINE = {
113968
+ children: /* @__PURE__ */ new Map(),
113969
+ crossNodeDelivered: 0,
113970
+ crossNodeSuppressed: 0
113971
+ };
113972
+ function diffEventPlane(baseline, current, topN = 5) {
113973
+ const deltas = [];
113974
+ let fanoutSent = 0;
113975
+ let fanoutSuppressed = 0;
113976
+ for (const sample of current.children) {
113977
+ const before = baseline.children.get(sample.childId);
113978
+ const sent = Math.max(0, sample.sent - (before?.sent ?? 0));
113979
+ const suppressed = Math.max(0, sample.suppressed - (before?.suppressed ?? 0));
113980
+ fanoutSent += sent;
113981
+ fanoutSuppressed += suppressed;
113982
+ if (sent > 0 || suppressed > 0) deltas.push({
113983
+ childId: sample.childId,
113984
+ sent,
113985
+ suppressed
113986
+ });
113987
+ }
113988
+ return {
113989
+ udsMode: current.udsMode,
113990
+ crossNodeMode: current.crossNodeMode,
113991
+ childrenConnected: current.childrenConnected,
113992
+ childrenUndeclared: current.childrenUndeclared,
113993
+ fanoutSent,
113994
+ fanoutSuppressed,
113995
+ crossNodeDelivered: Math.max(0, current.crossNodeDelivered - baseline.crossNodeDelivered),
113996
+ crossNodeSuppressed: Math.max(0, current.crossNodeSuppressed - baseline.crossNodeSuppressed),
113997
+ top: deltas.toSorted((a, b) => b.sent - a.sent || a.childId.localeCompare(b.childId)).slice(0, topN)
113998
+ };
113999
+ }
114000
+ function createEventPlaneMeter(reader, topN = 5) {
114001
+ let baseline = EMPTY_EVENT_PLANE_BASELINE;
114002
+ return { read: () => {
114003
+ const current = reader();
114004
+ if (current === void 0) return void 0;
114005
+ const window2 = diffEventPlane(baseline, current, topN);
114006
+ baseline = {
114007
+ children: new Map(current.children.map((s) => [s.childId, s])),
114008
+ crossNodeDelivered: current.crossNodeDelivered,
114009
+ crossNodeSuppressed: current.crossNodeSuppressed
114010
+ };
114011
+ return window2;
114012
+ } };
114013
+ }
114014
+ function formatEventPlane(window2) {
114015
+ if (window2 === void 0) return "";
114016
+ const top = window2.top.map((d) => `${d.childId}:${d.sent}/${d.suppressed}`).join(",");
114017
+ return ` fanoutMode=uds:${window2.udsMode}/cross-node:${window2.crossNodeMode} children=${window2.childrenConnected} childrenUndeclared=${window2.childrenUndeclared} fanoutSent=${window2.fanoutSent} fanoutSuppressed=${window2.fanoutSuppressed} crossNodeDelivered=${window2.crossNodeDelivered} crossNodeSuppressed=${window2.crossNodeSuppressed}` + (top.length === 0 ? "" : ` fanoutTop=${top}`);
114018
+ }
114019
+ var DECISIVE_HEAP_SPACES = ["old_space", "large_object_space"];
114020
+ var HEAP_SPACE_REPORT_MIN_MB = 32;
114021
+ var BYTES_PER_MB = 1048576;
114022
+ function mb(bytes) {
114023
+ return Math.round(bytes / BYTES_PER_MB);
114024
+ }
114025
+ function tenthsMb(bytes) {
114026
+ return Math.round(bytes / BYTES_PER_MB * 10) / 10;
114027
+ }
114028
+ function readHeapSpaces() {
114029
+ try {
114030
+ return node_v8.getHeapSpaceStatistics().map((space) => ({
114031
+ name: space.space_name,
114032
+ usedBytes: space.space_used_size
114033
+ }));
114034
+ } catch {
114035
+ return [];
114036
+ }
114037
+ }
114038
+ function heapSpaceField(v8Name) {
114039
+ return v8Name.replace(/_([a-z])/g, (_match, letter) => letter.toUpperCase());
114040
+ }
114041
+ function selectReportedSpaces(spaces, minMb = 32) {
114042
+ const decisive = DECISIVE_HEAP_SPACES.map((name) => spaces.find((space) => space.name === name)).filter((space) => space !== void 0);
114043
+ const rest = spaces.filter((space) => !DECISIVE_HEAP_SPACES.includes(space.name)).filter((space) => mb(space.usedBytes) >= minMb).toSorted((a, b) => b.usedBytes - a.usedBytes || a.name.localeCompare(b.name));
114044
+ return [...decisive, ...rest];
114045
+ }
114046
+ function formatHeapSpaces(spaces, minMb = 32) {
114047
+ const selected = selectReportedSpaces(spaces, minMb);
114048
+ if (selected.length === 0) return "";
114049
+ return ` ${selected.map((s) => `${heapSpaceField(s.name)}=${mb(s.usedBytes)}MB`).join(" ")}`;
114050
+ }
114051
+ var RUNNER_HEAP_SNAPSHOT_ENV = "CAMSTACK_RUNNER_HEAP_SNAPSHOT";
114052
+ function heapSnapshotAuthorised(env = process.env) {
114053
+ return env[RUNNER_HEAP_SNAPSHOT_ENV] === "on";
114054
+ }
114055
+ var defaultDeps = {
114056
+ readMemory: () => process.memoryUsage(),
114057
+ readSpaces: readHeapSpaces,
114058
+ writeSnapshot: (path) => {
114059
+ node_v8.writeHeapSnapshot(path);
114060
+ },
114061
+ env: process.env
114062
+ };
114063
+ function emitHeapDiagnosticReport(request, deps = defaultDeps) {
114064
+ try {
114065
+ const mu = deps.readMemory();
114066
+ const spaces = deps.readSpaces().filter((space) => space.usedBytes > 0).map((space) => `${space.name}=${tenthsMb(space.usedBytes)}`).join(" ");
114067
+ request.sink.info(`[mem] node="${request.label}" addons=[${request.addons.join(",")}] rss=${tenthsMb(mu.rss)} heapUsed=${tenthsMb(mu.heapUsed)} heapTotal=${tenthsMb(mu.heapTotal)} external=${tenthsMb(mu.external)} arrayBuffers=${tenthsMb(mu.arrayBuffers)} | ${spaces}`);
114068
+ } catch (error) {
114069
+ request.sink.warn(`[mem] node="${request.label}" space report failed: ${error instanceof Error ? error.message : String(error)}`);
114070
+ }
114071
+ if (!heapSnapshotAuthorised(deps.env)) {
114072
+ request.sink.info(`[mem] node="${request.label}" heap snapshot NOT taken \u2014 it is an admin mutation (a multi-GB write and a stop-the-world walk of the heap). The per-space breakdown above is the free half and needs no authorisation. Set ${RUNNER_HEAP_SNAPSHOT_ENV}=on for this runner and signal again to take one.`);
114073
+ return;
114074
+ }
114075
+ try {
114076
+ deps.writeSnapshot(request.snapshotPath);
114077
+ request.sink.info(`[mem] node="${request.label}" heap snapshot written -> ${request.snapshotPath}`);
114078
+ } catch (error) {
114079
+ request.sink.warn(`[mem] node="${request.label}" snapshot failed: ${error instanceof Error ? error.message : String(error)}`);
114080
+ }
114081
+ }
114082
+ var HUB_MAIN_HEAP_WATCH_LABEL = "hub-main";
113935
114083
  var HEAP_WATCH_INTERVAL_MS = 6e4;
113936
114084
  var HEAP_WATCH_WARN_RATIO = 0.8;
113937
114085
  var HEAP_WATCH_ESCALATE_RATIO = 0.7;
@@ -113942,6 +114090,10 @@ var require_manifest_python_deps_BaVekjRY = __commonJS({
113942
114090
  }
113943
114091
  var HEAP_RECLAIM_TRIGGER_MB = 1024;
113944
114092
  var HEAP_RECLAIM_MIN_INTERVAL_MS = 12e4;
114093
+ var HEAP_RECLAIM_STEADY_STATE_INTERVAL_MS = 6e5;
114094
+ function reclaimIntervalMs(passesAtFloor, minIntervalMs = HEAP_RECLAIM_MIN_INTERVAL_MS, steadyStateIntervalMs = HEAP_RECLAIM_STEADY_STATE_INTERVAL_MS, steadyStatePasses = 6) {
114095
+ return passesAtFloor >= steadyStatePasses ? Math.max(minIntervalMs, steadyStateIntervalMs) : minIntervalMs;
114096
+ }
113945
114097
  var ZERO_LOOP_DELAY = {
113946
114098
  p50Ms: 0,
113947
114099
  p99Ms: 0,
@@ -113951,14 +114103,15 @@ var require_manifest_python_deps_BaVekjRY = __commonJS({
113951
114103
  try {
113952
114104
  const histogram = (0, node_perf_hooks.monitorEventLoopDelay)({ resolution: resolutionMs });
113953
114105
  histogram.enable();
114106
+ const delay2 = (nanoseconds) => Math.max(0, Math.round(nanoseconds / 1e6) - resolutionMs);
113954
114107
  return {
113955
114108
  read: () => {
113956
114109
  try {
113957
114110
  if (histogram.count === 0) return ZERO_LOOP_DELAY;
113958
114111
  const sample = {
113959
- p50Ms: Math.round(histogram.percentile(50) / 1e6),
113960
- p99Ms: Math.round(histogram.percentile(99) / 1e6),
113961
- maxMs: Math.round(histogram.max / 1e6)
114112
+ p50Ms: delay2(histogram.percentile(50)),
114113
+ p99Ms: delay2(histogram.percentile(99)),
114114
+ maxMs: delay2(histogram.max)
113962
114115
  };
113963
114116
  histogram.reset();
113964
114117
  return sample;
@@ -113995,6 +114148,25 @@ var require_manifest_python_deps_BaVekjRY = __commonJS({
113995
114148
  info: (line) => console.log(line),
113996
114149
  warn: (line) => console.warn(line)
113997
114150
  };
114151
+ function createDeferredHeapWatchSink(label = HUB_MAIN_HEAP_WATCH_LABEL, fallback = consoleSink) {
114152
+ let target = fallback;
114153
+ const sink = {
114154
+ info: (line) => {
114155
+ target.info(line);
114156
+ },
114157
+ warn: (line) => {
114158
+ target.warn(line);
114159
+ }
114160
+ };
114161
+ const attach = (next) => {
114162
+ target = next;
114163
+ next.info(`[mem] ${label} heartbeat attached to the log manager \u2014 earlier lines went to stdout only and are not in the log buffer, the rotated file or Loki.`);
114164
+ };
114165
+ return {
114166
+ sink,
114167
+ attach
114168
+ };
114169
+ }
113998
114170
  function strandedMb(s) {
113999
114171
  return s.rssMb - s.heapUsedMb - s.externalMb;
114000
114172
  }
@@ -114049,16 +114221,19 @@ var require_manifest_python_deps_BaVekjRY = __commonJS({
114049
114221
  function formatOverBudget(label, b, source) {
114050
114222
  return `[mem] ${label} OVER RSS BUDGET rss=${b.rssMb}MB budget=${b.budgetMb}MB over=+${b.overMb}MB shape=${b.shape} heapUsed=${b.heapUsedMb}MB(${share(b.heapUsedMb, b.rssMb)}%) external=${b.externalMb}MB(${share(b.externalMb, b.rssMb)}%) nativeResidue=${b.nativeResidueMb}MB(${share(b.nativeResidueMb, b.rssMb)}%) arrayBuffers=${b.arrayBuffersMb}MB budgetFrom="${source}" \u2014 ${SHAPE_ADVICE[b.shape]}`;
114051
114223
  }
114052
- function format2(label, s, loop, budgetMb) {
114224
+ function format2(label, s, loop, budgetMb, suffix) {
114053
114225
  const line = `[mem] ${label} rss=${s.rssMb}MB heapUsed=${s.heapUsedMb}MB heapTotal=${s.heapTotalMb}MB heapLimit=${s.heapLimitMb}MB used=${Math.round(s.usedRatio * 100)}% external=${s.externalMb}MB arrayBuffers=${s.arrayBuffersMb}MB` + (budgetMb === void 0 ? "" : ` rssBudget=${budgetMb}MB`);
114054
- if (loop === void 0) return line;
114055
- return `${line} loopP50=${loop.p50Ms}ms loopP99=${loop.p99Ms}ms loopMax=${loop.maxMs}ms`;
114226
+ if (loop === void 0) return `${line}${suffix}`;
114227
+ return `${line} loopP50=${loop.p50Ms}ms loopP99=${loop.p99Ms}ms loopMax=${loop.maxMs}ms${suffix}`;
114056
114228
  }
114057
- function startHeapWatch(label = "hub-main", sink = consoleSink, intervalMs = HEAP_WATCH_INTERVAL_MS, reclaimOptions, loopDelay = createLoopDelayMeter(), execArgv = process.execArgv, announceCeilingOrigin = true, rssBudget) {
114229
+ function startHeapWatch(label = HUB_MAIN_HEAP_WATCH_LABEL, sink = consoleSink, intervalMs = HEAP_WATCH_INTERVAL_MS, reclaimOptions, loopDelay = createLoopDelayMeter(), execArgv = process.execArgv, announceCeilingOrigin = true, rssBudget, probes) {
114230
+ const readSpaces = probes?.readSpaces ?? readHeapSpaces;
114231
+ const eventPlane = probes?.eventPlane === void 0 ? void 0 : createEventPlaneMeter(probes.eventPlane);
114058
114232
  const readMemory = reclaimOptions?.readMemory ?? (() => process.memoryUsage());
114059
114233
  const now = reclaimOptions?.now ?? (() => Date.now());
114060
114234
  const triggerMb = reclaimOptions?.triggerMb ?? 1024;
114061
114235
  const minIntervalMs = reclaimOptions?.minIntervalMs ?? 12e4;
114236
+ const steadyStateIntervalMs = reclaimOptions?.steadyStateIntervalMs ?? 6e5;
114062
114237
  const fastIntervalMs = reclaimOptions?.fastIntervalMs ?? 2e3;
114063
114238
  const escalateRatio = reclaimOptions?.escalateRatio ?? 0.7;
114064
114239
  const deescalateRatio = reclaimOptions?.deescalateRatio ?? 0.6;
@@ -114076,9 +114251,10 @@ var require_manifest_python_deps_BaVekjRY = __commonJS({
114076
114251
  steadyStateAnnounced = false;
114077
114252
  return;
114078
114253
  }
114254
+ const floorMs = reclaimIntervalMs(passesAtFloor, minIntervalMs, steadyStateIntervalMs);
114079
114255
  const sinceLast = now() - lastReclaimAt;
114080
- if (sinceLast < minIntervalMs) return;
114081
- passesAtFloor = sinceLast <= minIntervalMs * 2 ? passesAtFloor + 1 : 1;
114256
+ if (sinceLast < floorMs) return;
114257
+ passesAtFloor = sinceLast <= floorMs * 2 ? passesAtFloor + 1 : 1;
114082
114258
  lastReclaimAt = now();
114083
114259
  const startedAt = now();
114084
114260
  try {
@@ -114091,7 +114267,8 @@ var require_manifest_python_deps_BaVekjRY = __commonJS({
114091
114267
  sink.info(`[mem] reclaim ${label} stranded=${strandedMb(sample)}MB rss=${sample.rssMb}MB\u2192${after.rssMb}MB freed=${sample.rssMb - after.rssMb}MB arrayBuffers=${sample.arrayBuffersMb}MB\u2192${after.arrayBuffersMb}MB took=${now() - startedAt}ms`);
114092
114268
  if (passesAtFloor >= 6 && !steadyStateAnnounced) {
114093
114269
  steadyStateAnnounced = true;
114094
- sink.warn(`[mem] reclaim ${label} has run at the floor for ${passesAtFloor} consecutive passes (every ${minIntervalMs}ms) \u2014 the stop-the-world is now STEADY STATE, not a rescue. The allocation source is what needs the fix; this pass only bounds its peak.`);
114270
+ const nextFloorMs = reclaimIntervalMs(passesAtFloor, minIntervalMs, steadyStateIntervalMs);
114271
+ sink.warn(`[mem] reclaim ${label} has run at the floor for ${passesAtFloor} consecutive passes (every ${minIntervalMs}ms) \u2014 the stop-the-world is now STEADY STATE, not a rescue: stranded never fell back under ${triggerMb}MB between passes, so the trigger is not discriminating on this process and what is left deciding is the timer. BACKING OFF to every ${nextFloorMs}ms \u2014 the pass keeps running (it is still the only measurement of this process's live ArrayBuffer set) at a cost the router can pay. The allocation source is what needs the fix; this pass only bounds its peak.`);
114095
114272
  }
114096
114273
  };
114097
114274
  let mode = "steady";
@@ -114129,7 +114306,7 @@ var require_manifest_python_deps_BaVekjRY = __commonJS({
114129
114306
  const due = at - lastLoggedAt >= intervalMs;
114130
114307
  if (mode === "escalated" || due) {
114131
114308
  lastLoggedAt = at;
114132
- const line = format2(label, sample, loopDelay?.read(), budgetMb);
114309
+ const line = format2(label, sample, loopDelay?.read(), budgetMb, `${formatHeapSpaces(readSpaces())}${formatEventPlane(eventPlane?.read())}`);
114133
114310
  if (sample.nearLimit) sink.warn(`${line} \u2014 APPROACHING HEAP LIMIT`);
114134
114311
  else if (mode === "escalated") sink.warn(`${line} \u2014 heap elevated, sampling every ${probeIntervalMs}ms`);
114135
114312
  else sink.info(line);
@@ -118234,6 +118411,34 @@ var require_manifest_python_deps_BaVekjRY = __commonJS({
118234
118411
  };
118235
118412
  }
118236
118413
  /**
118414
+ * The regime the counters above were produced under, read once from
118415
+ * `CAMSTACK_UDS_EVENT_FANOUT` at construction.
118416
+ *
118417
+ * A suppressed count means "nothing WAS dropped" under `filter` and "nothing
118418
+ * WOULD have been dropped" under `shadow`. Those are different claims, and
118419
+ * until this getter existed the mode was invisible at runtime — the counters
118420
+ * were readable and the regime that produced them was not.
118421
+ */
118422
+ get eventFanoutMode() {
118423
+ return this.fanoutMode;
118424
+ }
118425
+ /**
118426
+ * Connected children that never declared a subscription pattern set.
118427
+ *
118428
+ * Each one is a fail-open on BOTH planes: `childWantsEvent` returns true for
118429
+ * an undeclared child ({@link ChildEntry.eventPatterns} `=== null`), and
118430
+ * `aggregateEventInterest` returns `null` — accept everything — if ANY
118431
+ * connected child is undeclared, which disables the node's inbound cross-node
118432
+ * gate as well. **One legacy runner silently turns off the filtering for the
118433
+ * whole node**, and nothing reported it, so a zero here is as load-bearing as
118434
+ * a non-zero one.
118435
+ */
118436
+ undeclaredChildCount() {
118437
+ let count = 0;
118438
+ for (const entry of this.children.values()) if (entry.eventPatterns === null) count += 1;
118439
+ return count;
118440
+ }
118441
+ /**
118237
118442
  * Does `entry` want to receive an event in `category`? Honours the fan-out
118238
118443
  * mode: `broadcast` → always; undeclared patterns (`null`) → always
118239
118444
  * (fail-open); else the child's declared set must match via `matchesPattern`
@@ -120689,12 +120894,24 @@ var require_manifest_python_deps_BaVekjRY = __commonJS({
120689
120894
  return CapabilityUnavailableError;
120690
120895
  }
120691
120896
  });
120897
+ Object.defineProperty(exports, "DECISIVE_HEAP_SPACES", {
120898
+ enumerable: true,
120899
+ get: function() {
120900
+ return DECISIVE_HEAP_SPACES;
120901
+ }
120902
+ });
120692
120903
  Object.defineProperty(exports, "DeviceRegistry", {
120693
120904
  enumerable: true,
120694
120905
  get: function() {
120695
120906
  return DeviceRegistry;
120696
120907
  }
120697
120908
  });
120909
+ Object.defineProperty(exports, "EVENT_PLANE_TOP_N", {
120910
+ enumerable: true,
120911
+ get: function() {
120912
+ return EVENT_PLANE_TOP_N;
120913
+ }
120914
+ });
120698
120915
  Object.defineProperty(exports, "EVENT_TOPIC_PREFIX", {
120699
120916
  enumerable: true,
120700
120917
  get: function() {
@@ -120713,12 +120930,24 @@ var require_manifest_python_deps_BaVekjRY = __commonJS({
120713
120930
  return HEAP_RECLAIM_MIN_INTERVAL_MS;
120714
120931
  }
120715
120932
  });
120933
+ Object.defineProperty(exports, "HEAP_RECLAIM_STEADY_STATE_INTERVAL_MS", {
120934
+ enumerable: true,
120935
+ get: function() {
120936
+ return HEAP_RECLAIM_STEADY_STATE_INTERVAL_MS;
120937
+ }
120938
+ });
120716
120939
  Object.defineProperty(exports, "HEAP_RECLAIM_TRIGGER_MB", {
120717
120940
  enumerable: true,
120718
120941
  get: function() {
120719
120942
  return HEAP_RECLAIM_TRIGGER_MB;
120720
120943
  }
120721
120944
  });
120945
+ Object.defineProperty(exports, "HEAP_SPACE_REPORT_MIN_MB", {
120946
+ enumerable: true,
120947
+ get: function() {
120948
+ return HEAP_SPACE_REPORT_MIN_MB;
120949
+ }
120950
+ });
120722
120951
  Object.defineProperty(exports, "HEAP_WATCH_INTERVAL_MS", {
120723
120952
  enumerable: true,
120724
120953
  get: function() {
@@ -120743,6 +120972,12 @@ var require_manifest_python_deps_BaVekjRY = __commonJS({
120743
120972
  return HUB_CAP_FWD_SERVICE;
120744
120973
  }
120745
120974
  });
120975
+ Object.defineProperty(exports, "HUB_MAIN_HEAP_WATCH_LABEL", {
120976
+ enumerable: true,
120977
+ get: function() {
120978
+ return HUB_MAIN_HEAP_WATCH_LABEL;
120979
+ }
120980
+ });
120746
120981
  Object.defineProperty(exports, "HUB_MAIN_RSS_BUDGET_MB", {
120747
120982
  enumerable: true,
120748
120983
  get: function() {
@@ -120785,6 +121020,12 @@ var require_manifest_python_deps_BaVekjRY = __commonJS({
120785
121020
  return RSS_BUDGET_RELEASE_RATIO;
120786
121021
  }
120787
121022
  });
121023
+ Object.defineProperty(exports, "RUNNER_HEAP_SNAPSHOT_ENV", {
121024
+ enumerable: true,
121025
+ get: function() {
121026
+ return RUNNER_HEAP_SNAPSHOT_ENV;
121027
+ }
121028
+ });
120788
121029
  Object.defineProperty(exports, "RUNNER_HEAP_WATCH_INTERVAL_MS", {
120789
121030
  enumerable: true,
120790
121031
  get: function() {
@@ -120821,6 +121062,12 @@ var require_manifest_python_deps_BaVekjRY = __commonJS({
120821
121062
  return UdsLocalTransportServer;
120822
121063
  }
120823
121064
  });
121065
+ Object.defineProperty(exports, "ZERO_LOOP_DELAY", {
121066
+ enumerable: true,
121067
+ get: function() {
121068
+ return ZERO_LOOP_DELAY;
121069
+ }
121070
+ });
120824
121071
  Object.defineProperty(exports, "__resetCapUsageRegistryForTests", {
120825
121072
  enumerable: true,
120826
121073
  get: function() {
@@ -120941,6 +121188,24 @@ var require_manifest_python_deps_BaVekjRY = __commonJS({
120941
121188
  return createBrokerDeviceManagerApi;
120942
121189
  }
120943
121190
  });
121191
+ Object.defineProperty(exports, "createDeferredHeapWatchSink", {
121192
+ enumerable: true,
121193
+ get: function() {
121194
+ return createDeferredHeapWatchSink;
121195
+ }
121196
+ });
121197
+ Object.defineProperty(exports, "createEventPlaneMeter", {
121198
+ enumerable: true,
121199
+ get: function() {
121200
+ return createEventPlaneMeter;
121201
+ }
121202
+ });
121203
+ Object.defineProperty(exports, "createEventPlaneReader", {
121204
+ enumerable: true,
121205
+ get: function() {
121206
+ return createEventPlaneReader;
121207
+ }
121208
+ });
120944
121209
  Object.defineProperty(exports, "createHubCapForwardService", {
120945
121210
  enumerable: true,
120946
121211
  get: function() {
@@ -120959,6 +121224,12 @@ var require_manifest_python_deps_BaVekjRY = __commonJS({
120959
121224
  return createLocalTransport;
120960
121225
  }
120961
121226
  });
121227
+ Object.defineProperty(exports, "createLoopDelayMeter", {
121228
+ enumerable: true,
121229
+ get: function() {
121230
+ return createLoopDelayMeter;
121231
+ }
121232
+ });
120962
121233
  Object.defineProperty(exports, "createParentUnownedCallHandler", {
120963
121234
  enumerable: true,
120964
121235
  get: function() {
@@ -121013,12 +121284,36 @@ var require_manifest_python_deps_BaVekjRY = __commonJS({
121013
121284
  return deserializeTypedArrays;
121014
121285
  }
121015
121286
  });
121287
+ Object.defineProperty(exports, "diffEventPlane", {
121288
+ enumerable: true,
121289
+ get: function() {
121290
+ return diffEventPlane;
121291
+ }
121292
+ });
121293
+ Object.defineProperty(exports, "emitHeapDiagnosticReport", {
121294
+ enumerable: true,
121295
+ get: function() {
121296
+ return emitHeapDiagnosticReport;
121297
+ }
121298
+ });
121016
121299
  Object.defineProperty(exports, "encodeFrame", {
121017
121300
  enumerable: true,
121018
121301
  get: function() {
121019
121302
  return encodeFrame;
121020
121303
  }
121021
121304
  });
121305
+ Object.defineProperty(exports, "formatEventPlane", {
121306
+ enumerable: true,
121307
+ get: function() {
121308
+ return formatEventPlane;
121309
+ }
121310
+ });
121311
+ Object.defineProperty(exports, "formatHeapSpaces", {
121312
+ enumerable: true,
121313
+ get: function() {
121314
+ return formatHeapSpaces;
121315
+ }
121316
+ });
121022
121317
  Object.defineProperty(exports, "getBrokerEventBus", {
121023
121318
  enumerable: true,
121024
121319
  get: function() {
@@ -121067,6 +121362,18 @@ var require_manifest_python_deps_BaVekjRY = __commonJS({
121067
121362
  return getWorkerNativeCapSnapshot;
121068
121363
  }
121069
121364
  });
121365
+ Object.defineProperty(exports, "heapSnapshotAuthorised", {
121366
+ enumerable: true,
121367
+ get: function() {
121368
+ return heapSnapshotAuthorised;
121369
+ }
121370
+ });
121371
+ Object.defineProperty(exports, "heapSpaceField", {
121372
+ enumerable: true,
121373
+ get: function() {
121374
+ return heapSpaceField;
121375
+ }
121376
+ });
121070
121377
  Object.defineProperty(exports, "hubMainRssBudget", {
121071
121378
  enumerable: true,
121072
121379
  get: function() {
@@ -121127,6 +121434,24 @@ var require_manifest_python_deps_BaVekjRY = __commonJS({
121127
121434
  return parseRssBudgetMb;
121128
121435
  }
121129
121436
  });
121437
+ Object.defineProperty(exports, "readHeapSpaces", {
121438
+ enumerable: true,
121439
+ get: function() {
121440
+ return readHeapSpaces;
121441
+ }
121442
+ });
121443
+ Object.defineProperty(exports, "readMoleculerFanoutMode", {
121444
+ enumerable: true,
121445
+ get: function() {
121446
+ return readMoleculerFanoutMode;
121447
+ }
121448
+ });
121449
+ Object.defineProperty(exports, "reclaimIntervalMs", {
121450
+ enumerable: true,
121451
+ get: function() {
121452
+ return reclaimIntervalMs;
121453
+ }
121454
+ });
121130
121455
  Object.defineProperty(exports, "registerEventBusService", {
121131
121456
  enumerable: true,
121132
121457
  get: function() {
@@ -121157,6 +121482,12 @@ var require_manifest_python_deps_BaVekjRY = __commonJS({
121157
121482
  return runNpm;
121158
121483
  }
121159
121484
  });
121485
+ Object.defineProperty(exports, "selectReportedSpaces", {
121486
+ enumerable: true,
121487
+ get: function() {
121488
+ return selectReportedSpaces;
121489
+ }
121490
+ });
121160
121491
  Object.defineProperty(exports, "serializeTypedArrays", {
121161
121492
  enumerable: true,
121162
121493
  get: function() {
@@ -125025,7 +125356,7 @@ var require_dist3 = __commonJS({
125025
125356
  "use strict";
125026
125357
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
125027
125358
  var require_chunk = require_chunk_Cek0wNdY();
125028
- var require_dist10 = require_dist_CImxMt5h();
125359
+ var require_dist10 = require_dist_CxgTulEG();
125029
125360
  var require_builtins_alerts_alerts_addon = require_alerts_addon();
125030
125361
  require_alerts();
125031
125362
  var require_formatter = require_formatter_DqAKDlvN();
@@ -125051,7 +125382,7 @@ var require_dist3 = __commonJS({
125051
125382
  var require_builtins_winston_logging_index = require_winston_logging();
125052
125383
  var require_file_data_plane = require_file_data_plane_DO8KbxCe();
125053
125384
  var require_tls$1 = require_tls_u8QCJCFE();
125054
- var require_manifest_python_deps = require_manifest_python_deps_BaVekjRY();
125385
+ var require_manifest_python_deps = require_manifest_python_deps_CcDe4S2Z();
125055
125386
  var require_resource_monitor = require_resource_monitor_CdnzxBLP();
125056
125387
  var require_custom_action_registry = require_custom_action_registry_jY0NOZK8();
125057
125388
  var zod = require_zod();
@@ -205422,6 +205753,7 @@ globstar while`, t, d, e, f, m), this.matchOne(t.slice(d), e.slice(f), s)) retur
205422
205753
  exports.ConsoleLoggingAddon = require_builtins_console_logging_index.ConsoleLoggingAddon$1;
205423
205754
  exports.CoreBlocksAddon = require_builtins_core_blocks_core_blocks_addon.CoreBlocksAddon;
205424
205755
  exports.CustomActionRegistry = require_custom_action_registry.CustomActionRegistry;
205756
+ exports.DECISIVE_HEAP_SPACES = require_manifest_python_deps.DECISIVE_HEAP_SPACES;
205425
205757
  exports.DEFAULT_DATA_PATH = DEFAULT_DATA_PATH;
205426
205758
  exports.DEFAULT_LAN_HTTP_PORT = require_tls$1.DEFAULT_LAN_HTTP_PORT;
205427
205759
  exports.DEFAULT_LOG_LEVEL = DEFAULT_LOG_LEVEL;
@@ -205431,6 +205763,7 @@ globstar while`, t, d, e, f, m), this.matchOne(t.slice(d), e.slice(f), s)) retur
205431
205763
  exports.DeviceManagerAddon = require_builtins_device_manager_device_manager_addon.DeviceManagerAddon;
205432
205764
  exports.DeviceRegistry = require_manifest_python_deps.DeviceRegistry;
205433
205765
  exports.DeviceStore = require_builtins_sqlite_storage_index.DeviceStore$1;
205766
+ exports.EVENT_PLANE_TOP_N = require_manifest_python_deps.EVENT_PLANE_TOP_N;
205434
205767
  exports.EVENT_TOPIC_PREFIX = require_manifest_python_deps.EVENT_TOPIC_PREFIX;
205435
205768
  exports.EngineManagerResolver = EngineManagerResolver;
205436
205769
  exports.EventBus = EventBus;
@@ -205443,11 +205776,14 @@ globstar while`, t, d, e, f, m), this.matchOne(t.slice(d), e.slice(f), s)) retur
205443
205776
  exports.HEALTH_MONITOR_RETRY_INTERVALS_MS = HEALTH_MONITOR_RETRY_INTERVALS_MS;
205444
205777
  exports.HEALTH_MONITOR_TICK_MS = HEALTH_MONITOR_TICK_MS;
205445
205778
  exports.HEAP_RECLAIM_MIN_INTERVAL_MS = require_manifest_python_deps.HEAP_RECLAIM_MIN_INTERVAL_MS;
205779
+ exports.HEAP_RECLAIM_STEADY_STATE_INTERVAL_MS = require_manifest_python_deps.HEAP_RECLAIM_STEADY_STATE_INTERVAL_MS;
205446
205780
  exports.HEAP_RECLAIM_TRIGGER_MB = require_manifest_python_deps.HEAP_RECLAIM_TRIGGER_MB;
205781
+ exports.HEAP_SPACE_REPORT_MIN_MB = require_manifest_python_deps.HEAP_SPACE_REPORT_MIN_MB;
205447
205782
  exports.HEAP_WATCH_INTERVAL_MS = require_manifest_python_deps.HEAP_WATCH_INTERVAL_MS;
205448
205783
  exports.HEAP_WATCH_WARN_RATIO = require_manifest_python_deps.HEAP_WATCH_WARN_RATIO;
205449
205784
  exports.HUB_CAP_FWD_ACTION = require_manifest_python_deps.HUB_CAP_FWD_ACTION;
205450
205785
  exports.HUB_CAP_FWD_SERVICE = require_manifest_python_deps.HUB_CAP_FWD_SERVICE;
205786
+ exports.HUB_MAIN_HEAP_WATCH_LABEL = require_manifest_python_deps.HUB_MAIN_HEAP_WATCH_LABEL;
205451
205787
  exports.HUB_MAIN_RSS_BUDGET_MB = require_manifest_python_deps.HUB_MAIN_RSS_BUDGET_MB;
205452
205788
  exports.HUB_RSS_BUDGET_ENV = require_manifest_python_deps.HUB_RSS_BUDGET_ENV;
205453
205789
  exports.HubForwarderAddon = require_builtins_hub_forwarder_index.HubForwarderAddon$1;
@@ -205491,6 +205827,7 @@ globstar while`, t, d, e, f, m), this.matchOne(t.slice(d), e.slice(f), s)) retur
205491
205827
  exports.RESTART_MARKER_FILE = RESTART_MARKER_FILE;
205492
205828
  exports.RSS_BUDGET_REANNOUNCE_MIN_MS = require_manifest_python_deps.RSS_BUDGET_REANNOUNCE_MIN_MS;
205493
205829
  exports.RSS_BUDGET_RELEASE_RATIO = require_manifest_python_deps.RSS_BUDGET_RELEASE_RATIO;
205830
+ exports.RUNNER_HEAP_SNAPSHOT_ENV = require_manifest_python_deps.RUNNER_HEAP_SNAPSHOT_ENV;
205494
205831
  exports.RUNNER_HEAP_WATCH_INTERVAL_MS = require_manifest_python_deps.RUNNER_HEAP_WATCH_INTERVAL_MS;
205495
205832
  exports.RUNNER_RSS_BUDGET_ENV = require_manifest_python_deps.RUNNER_RSS_BUDGET_ENV;
205496
205833
  exports.RUNTIME_DEFAULTS = require_dist10.RUNTIME_DEFAULTS;
@@ -205519,6 +205856,7 @@ globstar while`, t, d, e, f, m), this.matchOne(t.slice(d), e.slice(f), s)) retur
205519
205856
  exports.UserManager = require_builtins_local_auth_local_auth_addon.UserManager;
205520
205857
  exports.WinstonDestination = require_builtins_winston_logging_index.WinstonDestination$1;
205521
205858
  exports.WinstonLoggingAddon = require_builtins_winston_logging_index.WinstonLoggingAddon$1;
205859
+ exports.ZERO_LOOP_DELAY = require_manifest_python_deps.ZERO_LOOP_DELAY;
205522
205860
  exports.__resetCapUsageRegistryForTests = require_manifest_python_deps.__resetCapUsageRegistryForTests;
205523
205861
  exports.__resetLoggingGateForTests = __resetLoggingGateForTests;
205524
205862
  exports.adaptBrokerToCluster = require_manifest_python_deps.adaptBrokerToCluster;
@@ -205568,12 +205906,16 @@ globstar while`, t, d, e, f, m), this.matchOne(t.slice(d), e.slice(f), s)) retur
205568
205906
  exports.createBroker = createBroker2;
205569
205907
  exports.createBrokerDeviceManagerApi = require_manifest_python_deps.createBrokerDeviceManagerApi;
205570
205908
  exports.createCoreCapService = createCoreCapService;
205909
+ exports.createDeferredHeapWatchSink = require_manifest_python_deps.createDeferredHeapWatchSink;
205571
205910
  exports.createDoorSettingsView = createDoorSettingsView;
205911
+ exports.createEventPlaneMeter = require_manifest_python_deps.createEventPlaneMeter;
205912
+ exports.createEventPlaneReader = require_manifest_python_deps.createEventPlaneReader;
205572
205913
  exports.createFileDataPlaneHandler = require_file_data_plane.createFileDataPlaneHandler;
205573
205914
  exports.createHubCapForwardService = require_manifest_python_deps.createHubCapForwardService;
205574
205915
  exports.createHubService = createHubService;
205575
205916
  exports.createKernelHwAccel = require_manifest_python_deps.createKernelHwAccel;
205576
205917
  exports.createLocalTransport = require_manifest_python_deps.createLocalTransport;
205918
+ exports.createLoopDelayMeter = require_manifest_python_deps.createLoopDelayMeter;
205577
205919
  exports.createParentUnownedCallHandler = require_manifest_python_deps.createParentUnownedCallHandler;
205578
205920
  exports.createProcessService = createProcessService;
205579
205921
  exports.createReadinessService = createReadinessService;
@@ -205591,6 +205933,7 @@ globstar while`, t, d, e, f, m), this.matchOne(t.slice(d), e.slice(f), s)) retur
205591
205933
  exports.describeProviderKindDrift = describeProviderKindDrift;
205592
205934
  exports.describeRss = require_manifest_python_deps.describeRss;
205593
205935
  exports.detectWorkspacePackagesDir = detectWorkspacePackagesDir;
205936
+ exports.diffEventPlane = require_manifest_python_deps.diffEventPlane;
205594
205937
  Object.defineProperty(exports, "downloadBinary", {
205595
205938
  enumerable: true,
205596
205939
  get: function() {
@@ -205600,6 +205943,7 @@ globstar while`, t, d, e, f, m), this.matchOne(t.slice(d), e.slice(f), s)) retur
205600
205943
  exports.downloadFile = require_file_data_plane.downloadFile;
205601
205944
  exports.downloadModel = require_file_data_plane.downloadModel;
205602
205945
  exports.emitDownForOwnedCaps = require_dist10.emitDownForOwnedCaps;
205946
+ exports.emitHeapDiagnosticReport = require_manifest_python_deps.emitHeapDiagnosticReport;
205603
205947
  exports.encodeFrame = require_manifest_python_deps.encodeFrame;
205604
205948
  exports.ensureAddonNativePrebuilds = ensureAddonNativePrebuilds;
205605
205949
  Object.defineProperty(exports, "ensureBinary", {
@@ -205634,6 +205978,8 @@ globstar while`, t, d, e, f, m), this.matchOne(t.slice(d), e.slice(f), s)) retur
205634
205978
  return _camstack_types_node.findInPath;
205635
205979
  }
205636
205980
  });
205981
+ exports.formatEventPlane = require_manifest_python_deps.formatEventPlane;
205982
+ exports.formatHeapSpaces = require_manifest_python_deps.formatHeapSpaces;
205637
205983
  exports.formatLogLine = require_formatter.formatLogLine;
205638
205984
  exports.getBrokerEventBus = require_manifest_python_deps.getBrokerEventBus;
205639
205985
  exports.getCapUsageRegistry = require_manifest_python_deps.getCapUsageRegistry;
@@ -205666,6 +206012,8 @@ globstar while`, t, d, e, f, m), this.matchOne(t.slice(d), e.slice(f), s)) retur
205666
206012
  exports.getWorkerDeviceRegistry = require_manifest_python_deps.getWorkerDeviceRegistry;
205667
206013
  exports.hasDotNode = hasDotNode;
205668
206014
  exports.hashClusterSecret = hashClusterSecret;
206015
+ exports.heapSnapshotAuthorised = require_manifest_python_deps.heapSnapshotAuthorised;
206016
+ exports.heapSpaceField = require_manifest_python_deps.heapSpaceField;
205669
206017
  exports.hubMainRssBudget = require_manifest_python_deps.hubMainRssBudget;
205670
206018
  exports.installManifestNativeDeps = require_manifest_python_deps.installManifestNativeDeps;
205671
206019
  exports.installManifestPythonDeps = require_manifest_python_deps.installManifestPythonDeps;
@@ -205704,11 +206052,14 @@ globstar while`, t, d, e, f, m), this.matchOne(t.slice(d), e.slice(f), s)) retur
205704
206052
  exports.proxyToUpstream = proxyToUpstream;
205705
206053
  exports.quarantineAddonResidue = quarantineAddonResidue;
205706
206054
  exports.readExtraSans = require_tls$1.readExtraSans;
206055
+ exports.readHeapSpaces = require_manifest_python_deps.readHeapSpaces;
205707
206056
  exports.readLanHttpState = require_tls$1.readLanHttpState;
206057
+ exports.readMoleculerFanoutMode = require_manifest_python_deps.readMoleculerFanoutMode;
205708
206058
  exports.readPendingRestart = readPendingRestart;
205709
206059
  exports.readTlsAccessStatus = require_tls$1.readTlsAccessStatus;
205710
206060
  exports.readTlsMode = require_tls$1.readTlsMode;
205711
206061
  exports.readinessKey = require_dist10.readinessKey;
206062
+ exports.reclaimIntervalMs = require_manifest_python_deps.reclaimIntervalMs;
205712
206063
  exports.registerEventBusService = require_manifest_python_deps.registerEventBusService;
205713
206064
  exports.registerLanHttpHandler = require_tls$1.registerLanHttpHandler;
205714
206065
  exports.reissueTlsLeaf = require_tls$1.reissueTlsLeaf;
@@ -205722,6 +206073,7 @@ globstar while`, t, d, e, f, m), this.matchOne(t.slice(d), e.slice(f), s)) retur
205722
206073
  exports.scopesAllowAddon = require_dist10.scopesAllowAddon;
205723
206074
  exports.scopesAllowDeviceCap = require_dist10.scopesAllowDeviceCap;
205724
206075
  exports.selectAddonResidue = selectAddonResidue;
206076
+ exports.selectReportedSpaces = require_manifest_python_deps.selectReportedSpaces;
205725
206077
  exports.serializeTypedArrays = require_manifest_python_deps.serializeTypedArrays;
205726
206078
  exports.setHubConnected = require_manifest_python_deps.setHubConnected;
205727
206079
  exports.setNodeEventInterest = require_manifest_python_deps.setNodeEventInterest;
@@ -420627,7 +420979,18 @@ var require_main4 = __commonJS({
420627
420979
  async function bootstrap() {
420628
420980
  const heapReclaimer = (0, system_1.createV8Reclaimer)();
420629
420981
  const heapReclaim = heapReclaimer === void 0 ? void 0 : { reclaim: heapReclaimer };
420630
- (0, system_1.startHeapWatch)("hub-main", void 0, void 0, heapReclaim, void 0, void 0, true, (0, system_1.hubMainRssBudget)());
420982
+ const heapWatchSink = (0, system_1.createDeferredHeapWatchSink)(system_1.HUB_MAIN_HEAP_WATCH_LABEL);
420983
+ let moleculerForEventPlane = null;
420984
+ (0, system_1.startHeapWatch)(system_1.HUB_MAIN_HEAP_WATCH_LABEL, heapWatchSink.sink, void 0, heapReclaim, void 0, void 0, true, (0, system_1.hubMainRssBudget)(), {
420985
+ eventPlane: (0, system_1.createEventPlaneReader)({
420986
+ registry: () => moleculerForEventPlane?.childRegistry ?? null,
420987
+ crossNodeStats: () => {
420988
+ const broker = moleculerForEventPlane?.broker;
420989
+ return broker === void 0 ? null : (0, system_1.getMoleculerEventStats)(broker);
420990
+ },
420991
+ crossNodeMode: () => (0, system_1.readMoleculerFanoutMode)()
420992
+ })
420993
+ });
420631
420994
  cleanupOrphanProcesses();
420632
420995
  let spaIndexHtml = null;
420633
420996
  const configPath = process.env.CONFIG_PATH ?? path.join(process.env.CAMSTACK_DATA ?? path.join(process.cwd(), "camstack-data"), "config.yaml");
@@ -420671,6 +421034,15 @@ var require_main4 = __commonJS({
420671
421034
  console.warn("[bootstrap] Failed to register addon upload route:", err);
420672
421035
  }
420673
421036
  const loggingService = app.get(logging_service_1.LoggingService);
421037
+ const heapWatchLogger = loggingService.createLogger("heap-watch");
421038
+ heapWatchSink.attach({
421039
+ info: (line) => {
421040
+ heapWatchLogger.info(line);
421041
+ },
421042
+ warn: (line) => {
421043
+ heapWatchLogger.warn(line);
421044
+ }
421045
+ });
420674
421046
  const addonRouteRegistry = new system_1.AddonRouteRegistry();
420675
421047
  const dataPlaneRegistry = new system_1.DataPlaneRegistry();
420676
421048
  const { NotificationServiceWrapper } = await Promise.resolve().then(() => __importStar(require_notification_wrapper_service()));
@@ -420738,6 +421110,7 @@ var require_main4 = __commonJS({
420738
421110
  console.log("[bootstrap] app.init() complete \u2014 all onModuleInit hooks have run");
420739
421111
  capabilityRegistry.ready();
420740
421112
  const moleculer = app.get(moleculer_service_1.MoleculerService);
421113
+ moleculerForEventPlane = moleculer;
420741
421114
  moleculer.registerLogReceiver();
420742
421115
  capabilityRegistry.registerProvider("model-distributor", "$hub", (0, model_distributor_js_1.buildModelDistributorProvider)(moleculer, loggingService));
420743
421116
  try {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "camstack",
3
- "version": "1.2.56",
3
+ "version": "1.2.58",
4
4
  "description": "CLI tool for managing and running CamStack server",
5
5
  "keywords": [
6
6
  "camstack",