@camstack/system 1.2.354 → 1.2.355
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/addon-runner.js +1 -1
- package/dist/addon-runner.mjs +1 -1
- package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.js +1 -1
- package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.mjs +1 -1
- package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.js +1 -1
- package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.mjs +1 -1
- package/dist/builtins/alerts/alerts.addon.js +1 -1
- package/dist/builtins/alerts/alerts.addon.mjs +1 -1
- package/dist/builtins/autotrack/index.js +1 -1
- package/dist/builtins/autotrack/index.mjs +1 -1
- package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.js +1 -1
- package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.mjs +1 -1
- package/dist/builtins/calendars/calendar-prefs-store.d.ts +7 -0
- package/dist/builtins/calendars/calendars.addon.js +3 -2
- package/dist/builtins/calendars/calendars.addon.mjs +3 -2
- package/dist/builtins/camera-grid/index.js +1 -1
- package/dist/builtins/camera-grid/index.mjs +1 -1
- package/dist/builtins/composer/composer.addon.js +53 -12
- package/dist/builtins/composer/composer.addon.mjs +53 -12
- package/dist/builtins/console-logging/index.js +1 -1
- package/dist/builtins/console-logging/index.mjs +1 -1
- package/dist/builtins/core-blocks/block-settings-store.d.ts +5 -0
- package/dist/builtins/core-blocks/core-blocks.addon.js +7 -2
- package/dist/builtins/core-blocks/core-blocks.addon.mjs +7 -2
- package/dist/builtins/device-manager/device-manager.addon.js +2 -2
- package/dist/builtins/device-manager/device-manager.addon.mjs +2 -2
- package/dist/builtins/hub-forwarder/index.js +1 -1
- package/dist/builtins/hub-forwarder/index.mjs +1 -1
- package/dist/builtins/liveness-monitor/liveness-monitor.addon.js +1 -1
- package/dist/builtins/liveness-monitor/liveness-monitor.addon.mjs +1 -1
- package/dist/builtins/local-auth/local-auth.addon.js +1 -1
- package/dist/builtins/local-auth/local-auth.addon.mjs +1 -1
- package/dist/builtins/local-network/local-network.addon.js +1 -1
- package/dist/builtins/local-network/local-network.addon.mjs +1 -1
- package/dist/builtins/loki-logging/index.js +1 -1
- package/dist/builtins/loki-logging/index.mjs +1 -1
- package/dist/builtins/native-metrics/native-metrics.addon.js +1 -1
- package/dist/builtins/native-metrics/native-metrics.addon.mjs +1 -1
- package/dist/builtins/platform-probe/index.js +1 -1
- package/dist/builtins/platform-probe/index.mjs +1 -1
- package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.js +1 -1
- package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.mjs +1 -1
- package/dist/builtins/snapshot/index.js +1 -1
- package/dist/builtins/snapshot/index.mjs +1 -1
- package/dist/builtins/sqlite-storage/analyze-stats.d.ts +0 -2
- package/dist/builtins/sqlite-storage/filesystem-storage.addon.js +1 -1
- package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs +1 -1
- package/dist/builtins/sqlite-storage/sqlite-settings-backend.d.ts +9 -11
- package/dist/builtins/sqlite-storage/sqlite-settings.addon.js +0 -0
- package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +0 -0
- package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js +1 -1
- package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs +1 -1
- package/dist/builtins/system-config/system-config.addon.js +1 -1
- package/dist/builtins/system-config/system-config.addon.mjs +1 -1
- package/dist/builtins/winston-logging/index.js +1 -1
- package/dist/builtins/winston-logging/index.mjs +1 -1
- package/dist/{child-cap-dispatch-CRqYKHAb.js → child-cap-dispatch-CqV-7-QZ.js} +27 -86
- package/dist/{child-cap-dispatch-C1x1kNJK.mjs → child-cap-dispatch-DMx2axev.mjs} +28 -81
- package/dist/{composition-sources-0nuWOdNd.js → composition-sources-Bk-MjK1D.js} +1 -1
- package/dist/{composition-sources-DzkEFd8q.mjs → composition-sources-Dpl1G0Gr.mjs} +1 -1
- package/dist/{dist-DePB7uwU.js → dist-BWicEEVA.js} +77 -47
- package/dist/{dist-DVyXxn41.mjs → dist-OCi0K-iM.mjs} +72 -48
- package/dist/index.d.ts +1 -1
- package/dist/index.js +18 -46
- package/dist/index.mjs +19 -46
- package/dist/kernel/event-plane-report.d.ts +7 -36
- package/dist/kernel/fs-utils.d.ts +1 -5
- package/dist/kernel/heap-spaces.d.ts +2 -23
- package/dist/kernel/index.d.ts +0 -2
- package/dist/kernel/moleculer/event-bus-core.d.ts +6 -28
- package/dist/kernel/moleculer/process-service.d.ts +2 -5
- package/dist/kernel/moleculer/runner-native-allocator.d.ts +1 -6
- package/dist/kernel/transport/index.d.ts +1 -1
- package/dist/kernel/transport/local-child-registry.d.ts +8 -41
- package/dist/kernel/transport/uds-event-bridge.d.ts +2 -2
- package/dist/{retired-settings-keys-BTKZdPn6.js → retired-settings-keys-DLJ7MvIB.js} +1 -1
- package/dist/{retired-settings-keys-DFur4hJF.mjs → retired-settings-keys-TDzxE6GA.mjs} +1 -1
- package/package.json +1 -1
- package/dist/kernel/heap-allocation-sample.d.ts +0 -107
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-
|
|
3
|
+
const require_dist = require("./dist-BWicEEVA.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-ue_Xefmv.js");
|
|
34
|
-
const require_child_cap_dispatch = require("./child-cap-dispatch-
|
|
34
|
+
const require_child_cap_dispatch = require("./child-cap-dispatch-CqV-7-QZ.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");
|
|
@@ -3237,8 +3237,7 @@ async function copyDirRecursive(src, dest) {
|
|
|
3237
3237
|
* `addons/` stays node_modules-free, which is what lets the backup tar the whole
|
|
3238
3238
|
* folder with no exclusion list (see ADR-0027). An addon that genuinely needs an
|
|
3239
3239
|
* un-bundleable runtime dep declares it explicitly in
|
|
3240
|
-
* `camstack.runtimeDependencies
|
|
3241
|
-
* `CAMSTACK_INSTALL_FULL_DEPS=1` restores the legacy install-everything path.
|
|
3240
|
+
* `camstack.runtimeDependencies`.
|
|
3242
3241
|
*
|
|
3243
3242
|
* (Historically this mirrored the build preset's COMMON_NATIVE_DEPS and
|
|
3244
3243
|
* per-addon-installed node-av/sharp/onnxruntime-node/ssh2/werift/systeminformation
|
|
@@ -3269,13 +3268,9 @@ function readRuntimeDependencies(pkg) {
|
|
|
3269
3268
|
* `dependencies` so `--omit=peer` installs can't drop them (pipeline's
|
|
3270
3269
|
* patched `werift`).
|
|
3271
3270
|
*
|
|
3272
|
-
* Escape hatch: `CAMSTACK_INSTALL_FULL_DEPS=1` restores the legacy behaviour
|
|
3273
|
-
* (strip only @camstack/*) for debugging a suspected undeclared runtime dep.
|
|
3274
|
-
*
|
|
3275
3271
|
* Returns a new object (immutable).
|
|
3276
3272
|
*/
|
|
3277
3273
|
function stripBundledDeps(pkg) {
|
|
3278
|
-
if (process.env.CAMSTACK_INSTALL_FULL_DEPS === "1") return stripCamstackDeps(pkg);
|
|
3279
3274
|
const camstack = pkg.camstack;
|
|
3280
3275
|
if (camstack !== null && typeof camstack === "object" && !Array.isArray(camstack) && camstack.system === true) return stripCamstackDeps(pkg);
|
|
3281
3276
|
const keep = new Set([...RUNTIME_NATIVE_KEEP, ...readRuntimeDependencies(pkg)]);
|
|
@@ -94409,9 +94404,8 @@ function resolveUseHostname() {
|
|
|
94409
94404
|
function createBroker(config) {
|
|
94410
94405
|
const { nodeID, mode, hubAddress, logLevel = "warn", secret, tcpPort = DEFAULT_HUB_TCP_PORT, udpPort = DEFAULT_UDP_PORT } = config;
|
|
94411
94406
|
const useHostname = resolveUseHostname();
|
|
94412
|
-
const
|
|
94413
|
-
const
|
|
94414
|
-
const wildcardLevel = moleculerDebug ? "debug" : logLevel;
|
|
94407
|
+
const infraLevel = "error";
|
|
94408
|
+
const wildcardLevel = logLevel;
|
|
94415
94409
|
if (mode === "test") return new ServiceBroker({
|
|
94416
94410
|
nodeID,
|
|
94417
94411
|
transporter: "Fake",
|
|
@@ -94441,7 +94435,7 @@ function createBroker(config) {
|
|
|
94441
94435
|
udpDiscovery: true,
|
|
94442
94436
|
udpPort,
|
|
94443
94437
|
udpPeriod: 5,
|
|
94444
|
-
debug:
|
|
94438
|
+
debug: false
|
|
94445
94439
|
}
|
|
94446
94440
|
},
|
|
94447
94441
|
logger: {
|
|
@@ -94461,7 +94455,7 @@ function createBroker(config) {
|
|
|
94461
94455
|
maxPacketSize: 10 * 1024 * 1024,
|
|
94462
94456
|
port: config.agentListenPort ?? deriveAgentListenPort(nodeID),
|
|
94463
94457
|
useHostname,
|
|
94464
|
-
debug:
|
|
94458
|
+
debug: false
|
|
94465
94459
|
};
|
|
94466
94460
|
if (hubAddress) {
|
|
94467
94461
|
tcpOptions.urls = normalizeHubUrl(hubAddress, tcpPort);
|
|
@@ -95269,26 +95263,16 @@ var CrashSupervisor = class {
|
|
|
95269
95263
|
* restores the glibc/sharp defaults. Recoverable without a rebuild.
|
|
95270
95264
|
* 2. A value the operator already put in the environment (`MALLOC_ARENA_MAX`,
|
|
95271
95265
|
* `VIPS_CONCURRENCY`) — inherited verbatim, never overwritten.
|
|
95272
|
-
* 3.
|
|
95273
|
-
* 4. The defaults above.
|
|
95274
|
-
*
|
|
95275
|
-
* A nonsense override falls back to the default rather than being passed through:
|
|
95276
|
-
* glibc reads `MALLOC_ARENA_MAX=0` as "unbounded", which is the very state this
|
|
95277
|
-
* exists to leave.
|
|
95266
|
+
* 3. The defaults above.
|
|
95278
95267
|
*/
|
|
95279
95268
|
function runnerNativeAllocatorEnv(parentEnv, platform = process.platform) {
|
|
95280
95269
|
if (platform !== "linux") return {};
|
|
95281
95270
|
if (parentEnv["CAMSTACK_RUNNER_NATIVE_ALLOCATOR"] === "off") return {};
|
|
95282
95271
|
return {
|
|
95283
|
-
MALLOC_ARENA_MAX: parentEnv["MALLOC_ARENA_MAX"] ?? String(
|
|
95272
|
+
MALLOC_ARENA_MAX: parentEnv["MALLOC_ARENA_MAX"] ?? String(2),
|
|
95284
95273
|
VIPS_CONCURRENCY: parentEnv["VIPS_CONCURRENCY"] ?? String(1)
|
|
95285
95274
|
};
|
|
95286
95275
|
}
|
|
95287
|
-
function positiveInt(raw, fallback) {
|
|
95288
|
-
if (raw === void 0) return fallback;
|
|
95289
|
-
const n = Number.parseInt(raw, 10);
|
|
95290
|
-
return Number.isFinite(n) && n > 0 ? n : fallback;
|
|
95291
|
-
}
|
|
95292
95276
|
/**
|
|
95293
95277
|
* The child's environment, with the allocator pair applied or REMOVED.
|
|
95294
95278
|
*
|
|
@@ -95497,6 +95481,8 @@ function isHeavyRunner(addons) {
|
|
|
95497
95481
|
* Reaching for a bigger number here when RSS is the complaint is the standard wrong move.
|
|
95498
95482
|
*/
|
|
95499
95483
|
var HEAVY_MAX_OLD_MB_DEFAULT = 1024;
|
|
95484
|
+
/** Light runners' young-generation semi-space, in MB. */
|
|
95485
|
+
var LIGHT_SEMI_SPACE_MB = 2;
|
|
95500
95486
|
/**
|
|
95501
95487
|
* The runner's old-space ceiling in MB, or 0 for "uncapped".
|
|
95502
95488
|
*
|
|
@@ -95506,7 +95492,7 @@ var HEAVY_MAX_OLD_MB_DEFAULT = 1024;
|
|
|
95506
95492
|
* the cap for the whole runner, which is the intended escape hatch.
|
|
95507
95493
|
*/
|
|
95508
95494
|
function runnerMaxOldSpaceMb(addons, heavy) {
|
|
95509
|
-
const envDefault = heavy ?
|
|
95495
|
+
const envDefault = heavy ? HEAVY_MAX_OLD_MB_DEFAULT : 0;
|
|
95510
95496
|
const declared = addons.map((a) => readAddonHeapDeclaration(a).maxOldSpaceMb).filter((mb) => mb !== void 0);
|
|
95511
95497
|
if (declared.length === 0) return envDefault;
|
|
95512
95498
|
if (declared.includes(0)) return 0;
|
|
@@ -95533,38 +95519,25 @@ function runnerRssBudgetMb(addons) {
|
|
|
95533
95519
|
* (`--max-semi-space-size`) to reclaim V8's over-reservation — a measured ~15 MB/runner win — bound
|
|
95534
95520
|
* V8's platform thread pool (`--v8-pool-size`, see {@link LIGHT_V8_POOL_SIZE_DEFAULT}: a measured
|
|
95535
95521
|
* ~58 threads across the hub's 29 light runners, against a cgroup `pids.max` this host has already
|
|
95536
|
-
* hit) and
|
|
95522
|
+
* hit) and carry no old-space cap unless a manifest declares one. HEAVY
|
|
95537
95523
|
* runners keep V8's default young generation but ALWAYS carry an old-space ceiling; see
|
|
95538
95524
|
* {@link HEAVY_MAX_OLD_MB_DEFAULT} for why, and how a runner declares its own.
|
|
95539
95525
|
*
|
|
95540
|
-
*
|
|
95541
|
-
*
|
|
95542
|
-
*
|
|
95543
|
-
* the flag — `0` means "size from the CPU count" to V8, not "off"),
|
|
95544
|
-
* `CAMSTACK_RUNNER_LIGHT_MAX_OLD_MB`
|
|
95545
|
-
* (default unset = no old-space cap), `CAMSTACK_RUNNER_HEAVY_MAX_OLD_MB`
|
|
95546
|
-
* (default {@link HEAVY_MAX_OLD_MB_DEFAULT}; `0` restores the old uncapped behaviour).
|
|
95526
|
+
* The per-addon override is the manifest's declared `maxOldSpaceMb` (`0` = uncapped); the
|
|
95527
|
+
* environment overrides and the `CAMSTACK_RUNNER_HEAP_TUNING=off` kill switch were removed on
|
|
95528
|
+
* 2026-10-06 — nothing had set them since the rollout.
|
|
95547
95529
|
*/
|
|
95548
95530
|
function runnerHeapFlags(addons) {
|
|
95549
|
-
if (process.env["CAMSTACK_RUNNER_HEAP_TUNING"] === "off") return [];
|
|
95550
95531
|
const heavy = isHeavyRunner(addons);
|
|
95551
95532
|
const flags = [];
|
|
95552
95533
|
if (!heavy) {
|
|
95553
|
-
|
|
95554
|
-
|
|
95555
|
-
const v8Pool = positiveIntEnv("CAMSTACK_RUNNER_LIGHT_V8_POOL_SIZE", 2);
|
|
95556
|
-
if (v8Pool > 0) flags.push(`--v8-pool-size=${v8Pool}`);
|
|
95534
|
+
flags.push(`--max-semi-space-size=${LIGHT_SEMI_SPACE_MB}`);
|
|
95535
|
+
flags.push(`--v8-pool-size=2`);
|
|
95557
95536
|
}
|
|
95558
95537
|
const oldMb = runnerMaxOldSpaceMb(addons, heavy);
|
|
95559
95538
|
if (oldMb > 0) flags.push(`--max-old-space-size=${oldMb}`);
|
|
95560
95539
|
return flags;
|
|
95561
95540
|
}
|
|
95562
|
-
function positiveIntEnv(name, fallback) {
|
|
95563
|
-
const raw = process.env[name];
|
|
95564
|
-
if (raw === void 0) return fallback;
|
|
95565
|
-
const n = Number.parseInt(raw, 10);
|
|
95566
|
-
return Number.isFinite(n) && n >= 0 ? n : fallback;
|
|
95567
|
-
}
|
|
95568
95541
|
var MAX_BACKOFF_MS = 3e4;
|
|
95569
95542
|
var CRASH_WINDOW_MS = 6e4;
|
|
95570
95543
|
var MAX_CRASHES_IN_WINDOW = 5;
|
|
@@ -96864,7 +96837,6 @@ exports.quarantineAddonResidue = quarantineAddonResidue;
|
|
|
96864
96837
|
exports.readExtraSans = require_tls$1.readExtraSans;
|
|
96865
96838
|
exports.readHeapSpaces = require_child_cap_dispatch.readHeapSpaces;
|
|
96866
96839
|
exports.readLanHttpState = require_tls$1.readLanHttpState;
|
|
96867
|
-
exports.readMoleculerFanoutMode = require_child_cap_dispatch.readMoleculerFanoutMode;
|
|
96868
96840
|
exports.readPendingRestart = readPendingRestart;
|
|
96869
96841
|
exports.readSocketQueues = require_child_cap_dispatch.readSocketQueues;
|
|
96870
96842
|
exports.readTlsAccessStatus = require_tls$1.readTlsAccessStatus;
|
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 { $n as
|
|
2
|
+
import { $n as DATAPLANE_SECRET_HEADER$1, Cr as EventCategory$1, Ft as isCollectionArrayMethod, Ht as lifecycleJobSchema, Kt as logLevelAtMost, Lt as isObjectInput, N as RUNTIME_DEFAULTS, O as METHOD_ACCESS_MAP, Pt as isArrayOutputSchema, Rt as isVoidInput, T as LOG_LEVEL_RANK, W as addonSettingsCapability, Zn as errMsg$1, _r as parseJsonUnknown, ar as asJsonObject$1, br as scopeKey, cn as procedureAuthKey, cr as createEvent, dr as expandCapMethods, er as DEVICE_SETTINGS_CONTRIBUTION_METHODS, gn as resolveMethodAuth, gr as parseJsonObject, kt as extractNestedAddonId, lr as emitDownForOwnedCaps, nn as objectInputDeclaresAddonId, nr as ReadinessRegistry, or as asNumber, qt as looseSchema, rn as objectInputDeclaresRequiredDeviceId, rr as ReadinessTimeoutError, sr as asString$1, t as ALL_CAPABILITY_DEFINITIONS, tr as DEVICE_STATUS_METHOD, vn as scopesAllowAddon, vr as readinessKey, yn as scopesAllowDeviceCap, yr as resolveCapMount, zt as kebabToCamel } from "./dist-OCi0K-iM.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 { C as registerLanHttpHandler, S as readLanHttpState, _ as DEFAULT_LAN_HTTP_PORT, a as writeTlsMode, b as bindPendingLanHttp, c as loadTlsCert, d as collectCertIdentity, f as CA_VALIDITY_DAYS, g as evaluateExistingCert, h as SERVER_AUTH_OID, i as writeExtraSans, l as reissueTlsLeaf, m as MAX_LEAF_VALIDITY_DAYS, n as readTlsAccessStatus, o as validateUploadedTls, p as LEAF_RENEWAL_WINDOW_DAYS, r as readTlsMode, s as ensureTlsCert, t as readExtraSans, u as CA_COMMON_NAME, v as allFamiliesListenHost, x as closeLanHttp, y as applyLanHttp } from "./tls-DTlVWwAI.mjs";
|
|
33
|
-
import { $ as CapRouteError, $n as
|
|
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-DMx2axev.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";
|
|
@@ -3230,8 +3230,7 @@ async function copyDirRecursive(src, dest) {
|
|
|
3230
3230
|
* `addons/` stays node_modules-free, which is what lets the backup tar the whole
|
|
3231
3231
|
* folder with no exclusion list (see ADR-0027). An addon that genuinely needs an
|
|
3232
3232
|
* un-bundleable runtime dep declares it explicitly in
|
|
3233
|
-
* `camstack.runtimeDependencies
|
|
3234
|
-
* `CAMSTACK_INSTALL_FULL_DEPS=1` restores the legacy install-everything path.
|
|
3233
|
+
* `camstack.runtimeDependencies`.
|
|
3235
3234
|
*
|
|
3236
3235
|
* (Historically this mirrored the build preset's COMMON_NATIVE_DEPS and
|
|
3237
3236
|
* per-addon-installed node-av/sharp/onnxruntime-node/ssh2/werift/systeminformation
|
|
@@ -3262,13 +3261,9 @@ function readRuntimeDependencies(pkg) {
|
|
|
3262
3261
|
* `dependencies` so `--omit=peer` installs can't drop them (pipeline's
|
|
3263
3262
|
* patched `werift`).
|
|
3264
3263
|
*
|
|
3265
|
-
* Escape hatch: `CAMSTACK_INSTALL_FULL_DEPS=1` restores the legacy behaviour
|
|
3266
|
-
* (strip only @camstack/*) for debugging a suspected undeclared runtime dep.
|
|
3267
|
-
*
|
|
3268
3264
|
* Returns a new object (immutable).
|
|
3269
3265
|
*/
|
|
3270
3266
|
function stripBundledDeps(pkg) {
|
|
3271
|
-
if (process.env.CAMSTACK_INSTALL_FULL_DEPS === "1") return stripCamstackDeps(pkg);
|
|
3272
3267
|
const camstack = pkg.camstack;
|
|
3273
3268
|
if (camstack !== null && typeof camstack === "object" && !Array.isArray(camstack) && camstack.system === true) return stripCamstackDeps(pkg);
|
|
3274
3269
|
const keep = new Set([...RUNTIME_NATIVE_KEEP, ...readRuntimeDependencies(pkg)]);
|
|
@@ -94402,9 +94397,8 @@ function resolveUseHostname() {
|
|
|
94402
94397
|
function createBroker(config) {
|
|
94403
94398
|
const { nodeID, mode, hubAddress, logLevel = "warn", secret, tcpPort = DEFAULT_HUB_TCP_PORT, udpPort = DEFAULT_UDP_PORT } = config;
|
|
94404
94399
|
const useHostname = resolveUseHostname();
|
|
94405
|
-
const
|
|
94406
|
-
const
|
|
94407
|
-
const wildcardLevel = moleculerDebug ? "debug" : logLevel;
|
|
94400
|
+
const infraLevel = "error";
|
|
94401
|
+
const wildcardLevel = logLevel;
|
|
94408
94402
|
if (mode === "test") return new ServiceBroker({
|
|
94409
94403
|
nodeID,
|
|
94410
94404
|
transporter: "Fake",
|
|
@@ -94434,7 +94428,7 @@ function createBroker(config) {
|
|
|
94434
94428
|
udpDiscovery: true,
|
|
94435
94429
|
udpPort,
|
|
94436
94430
|
udpPeriod: 5,
|
|
94437
|
-
debug:
|
|
94431
|
+
debug: false
|
|
94438
94432
|
}
|
|
94439
94433
|
},
|
|
94440
94434
|
logger: {
|
|
@@ -94454,7 +94448,7 @@ function createBroker(config) {
|
|
|
94454
94448
|
maxPacketSize: 10 * 1024 * 1024,
|
|
94455
94449
|
port: config.agentListenPort ?? deriveAgentListenPort(nodeID),
|
|
94456
94450
|
useHostname,
|
|
94457
|
-
debug:
|
|
94451
|
+
debug: false
|
|
94458
94452
|
};
|
|
94459
94453
|
if (hubAddress) {
|
|
94460
94454
|
tcpOptions.urls = normalizeHubUrl(hubAddress, tcpPort);
|
|
@@ -95262,26 +95256,16 @@ var CrashSupervisor = class {
|
|
|
95262
95256
|
* restores the glibc/sharp defaults. Recoverable without a rebuild.
|
|
95263
95257
|
* 2. A value the operator already put in the environment (`MALLOC_ARENA_MAX`,
|
|
95264
95258
|
* `VIPS_CONCURRENCY`) — inherited verbatim, never overwritten.
|
|
95265
|
-
* 3.
|
|
95266
|
-
* 4. The defaults above.
|
|
95267
|
-
*
|
|
95268
|
-
* A nonsense override falls back to the default rather than being passed through:
|
|
95269
|
-
* glibc reads `MALLOC_ARENA_MAX=0` as "unbounded", which is the very state this
|
|
95270
|
-
* exists to leave.
|
|
95259
|
+
* 3. The defaults above.
|
|
95271
95260
|
*/
|
|
95272
95261
|
function runnerNativeAllocatorEnv(parentEnv, platform = process.platform) {
|
|
95273
95262
|
if (platform !== "linux") return {};
|
|
95274
95263
|
if (parentEnv["CAMSTACK_RUNNER_NATIVE_ALLOCATOR"] === "off") return {};
|
|
95275
95264
|
return {
|
|
95276
|
-
MALLOC_ARENA_MAX: parentEnv["MALLOC_ARENA_MAX"] ?? String(
|
|
95265
|
+
MALLOC_ARENA_MAX: parentEnv["MALLOC_ARENA_MAX"] ?? String(2),
|
|
95277
95266
|
VIPS_CONCURRENCY: parentEnv["VIPS_CONCURRENCY"] ?? String(1)
|
|
95278
95267
|
};
|
|
95279
95268
|
}
|
|
95280
|
-
function positiveInt(raw, fallback) {
|
|
95281
|
-
if (raw === void 0) return fallback;
|
|
95282
|
-
const n = Number.parseInt(raw, 10);
|
|
95283
|
-
return Number.isFinite(n) && n > 0 ? n : fallback;
|
|
95284
|
-
}
|
|
95285
95269
|
/**
|
|
95286
95270
|
* The child's environment, with the allocator pair applied or REMOVED.
|
|
95287
95271
|
*
|
|
@@ -95490,6 +95474,8 @@ function isHeavyRunner(addons) {
|
|
|
95490
95474
|
* Reaching for a bigger number here when RSS is the complaint is the standard wrong move.
|
|
95491
95475
|
*/
|
|
95492
95476
|
var HEAVY_MAX_OLD_MB_DEFAULT = 1024;
|
|
95477
|
+
/** Light runners' young-generation semi-space, in MB. */
|
|
95478
|
+
var LIGHT_SEMI_SPACE_MB = 2;
|
|
95493
95479
|
/**
|
|
95494
95480
|
* The runner's old-space ceiling in MB, or 0 for "uncapped".
|
|
95495
95481
|
*
|
|
@@ -95499,7 +95485,7 @@ var HEAVY_MAX_OLD_MB_DEFAULT = 1024;
|
|
|
95499
95485
|
* the cap for the whole runner, which is the intended escape hatch.
|
|
95500
95486
|
*/
|
|
95501
95487
|
function runnerMaxOldSpaceMb(addons, heavy) {
|
|
95502
|
-
const envDefault = heavy ?
|
|
95488
|
+
const envDefault = heavy ? HEAVY_MAX_OLD_MB_DEFAULT : 0;
|
|
95503
95489
|
const declared = addons.map((a) => readAddonHeapDeclaration(a).maxOldSpaceMb).filter((mb) => mb !== void 0);
|
|
95504
95490
|
if (declared.length === 0) return envDefault;
|
|
95505
95491
|
if (declared.includes(0)) return 0;
|
|
@@ -95526,38 +95512,25 @@ function runnerRssBudgetMb(addons) {
|
|
|
95526
95512
|
* (`--max-semi-space-size`) to reclaim V8's over-reservation — a measured ~15 MB/runner win — bound
|
|
95527
95513
|
* V8's platform thread pool (`--v8-pool-size`, see {@link LIGHT_V8_POOL_SIZE_DEFAULT}: a measured
|
|
95528
95514
|
* ~58 threads across the hub's 29 light runners, against a cgroup `pids.max` this host has already
|
|
95529
|
-
* hit) and
|
|
95515
|
+
* hit) and carry no old-space cap unless a manifest declares one. HEAVY
|
|
95530
95516
|
* runners keep V8's default young generation but ALWAYS carry an old-space ceiling; see
|
|
95531
95517
|
* {@link HEAVY_MAX_OLD_MB_DEFAULT} for why, and how a runner declares its own.
|
|
95532
95518
|
*
|
|
95533
|
-
*
|
|
95534
|
-
*
|
|
95535
|
-
*
|
|
95536
|
-
* the flag — `0` means "size from the CPU count" to V8, not "off"),
|
|
95537
|
-
* `CAMSTACK_RUNNER_LIGHT_MAX_OLD_MB`
|
|
95538
|
-
* (default unset = no old-space cap), `CAMSTACK_RUNNER_HEAVY_MAX_OLD_MB`
|
|
95539
|
-
* (default {@link HEAVY_MAX_OLD_MB_DEFAULT}; `0` restores the old uncapped behaviour).
|
|
95519
|
+
* The per-addon override is the manifest's declared `maxOldSpaceMb` (`0` = uncapped); the
|
|
95520
|
+
* environment overrides and the `CAMSTACK_RUNNER_HEAP_TUNING=off` kill switch were removed on
|
|
95521
|
+
* 2026-10-06 — nothing had set them since the rollout.
|
|
95540
95522
|
*/
|
|
95541
95523
|
function runnerHeapFlags(addons) {
|
|
95542
|
-
if (process.env["CAMSTACK_RUNNER_HEAP_TUNING"] === "off") return [];
|
|
95543
95524
|
const heavy = isHeavyRunner(addons);
|
|
95544
95525
|
const flags = [];
|
|
95545
95526
|
if (!heavy) {
|
|
95546
|
-
|
|
95547
|
-
|
|
95548
|
-
const v8Pool = positiveIntEnv("CAMSTACK_RUNNER_LIGHT_V8_POOL_SIZE", 2);
|
|
95549
|
-
if (v8Pool > 0) flags.push(`--v8-pool-size=${v8Pool}`);
|
|
95527
|
+
flags.push(`--max-semi-space-size=${LIGHT_SEMI_SPACE_MB}`);
|
|
95528
|
+
flags.push(`--v8-pool-size=2`);
|
|
95550
95529
|
}
|
|
95551
95530
|
const oldMb = runnerMaxOldSpaceMb(addons, heavy);
|
|
95552
95531
|
if (oldMb > 0) flags.push(`--max-old-space-size=${oldMb}`);
|
|
95553
95532
|
return flags;
|
|
95554
95533
|
}
|
|
95555
|
-
function positiveIntEnv(name, fallback) {
|
|
95556
|
-
const raw = process.env[name];
|
|
95557
|
-
if (raw === void 0) return fallback;
|
|
95558
|
-
const n = Number.parseInt(raw, 10);
|
|
95559
|
-
return Number.isFinite(n) && n >= 0 ? n : fallback;
|
|
95560
|
-
}
|
|
95561
95534
|
var MAX_BACKOFF_MS = 3e4;
|
|
95562
95535
|
var CRASH_WINDOW_MS = 6e4;
|
|
95563
95536
|
var MAX_CRASHES_IN_WINDOW = 5;
|
|
@@ -96473,4 +96446,4 @@ var LifecycleJobEngine = class {
|
|
|
96473
96446
|
}
|
|
96474
96447
|
};
|
|
96475
96448
|
//#endregion
|
|
96476
|
-
export { AGENT_CAP_FWD_ACTION, AGENT_CAP_FWD_SERVICE, AGENT_READINESS_SERVICE_NAME, ALL_CAPABILITY_DEFINITIONS, ARRAY_BUFFER_CENSUS_COOLDOWN_MS, ARRAY_BUFFER_CENSUS_SUSTAIN_MS, ARRAY_BUFFER_CENSUS_THRESHOLD_MB, ARRAY_BUFFER_RELEASE_MIN_DROP_RATIO, AddonApiFactory, AddonDepsManager, AddonEngineManager, AddonHealthMonitor, AddonInstaller, AddonLoader, AddonManifest, AddonRouteRegistry, AlertCenterAddon, ApiKeyManager, AuthManager, CAP_ACTION_OVERFLOW_LABEL, CAP_ACTION_UNLABELLED, CAP_METHOD_NOT_IMPLEMENTED, CA_COMMON_NAME, CA_VALIDITY_DAYS, CLUSTER_SECRET_MISMATCH_TYPE, CLUSTER_SECRET_REJECTED_EXIT_CODE, CORE_CAP_SERVICE_NAME, CalendarsAddon, CapRouteError, CapRouteResolver, CapUsageRegistry, CapabilityHandle, CapabilityRegistry, CapabilityUnavailableError, ComposerAddon, ConfigManager, ConfigStore, ConsoleDestination, ConsoleLoggingAddon, CoreBlocksAddon, CustomActionRegistry, DECISIVE_HEAP_SPACES, DEFAULT_DATA_PATH, DEFAULT_LAN_HTTP_PORT, DEFAULT_LOG_LEVEL, DEVICE_SETTINGS_CONTRIBUTION_METHODS, DEVICE_STATUS_METHOD, DataPlaneRegistry, DeviceManagerAddon, DeviceRegistry, DeviceStore, EMPTY_CAP_ACTION_READING, EMPTY_SOCKET_DIRECTION, EMPTY_SOCKET_PLANE_BASELINE, EVENT_PLANE_TOP_N, EVENT_TOPIC_PREFIX, EngineManagerResolver, EventBus, FeatureManager, FilesystemStorageAddon, FilesystemStorageProvider, FrameDecoder, FsStorageBackend, GET_STATUS_METHOD, HEALTH_MONITOR_GRACE_PERIOD_MS, HEALTH_MONITOR_RETRY_INTERVALS_MS, HEALTH_MONITOR_TICK_MS, HEAP_RECLAIM_MIN_INTERVAL_MS, HEAP_RECLAIM_STEADY_STATE_INTERVAL_MS, HEAP_RECLAIM_TRIGGER_MB, HEAP_SPACE_REPORT_MIN_MB, HEAP_WATCH_INTERVAL_MS, HEAP_WATCH_WARN_RATIO, HUB_CAP_FWD_ACTION, HUB_CAP_FWD_SERVICE, HUB_MAIN_HEAP_WATCH_LABEL, HUB_MAIN_RSS_BUDGET_MB, HUB_RSS_BUDGET_ENV, HubForwarderAddon, HubForwarderDestination, HubLogForwarder, HubNodeRegistry, INFRA_CAPABILITIES, IntegrationRegistry, JobJournal, LEAF_RENEWAL_WINDOW_DAYS, LifecycleJobEngine, LifecycleStateMachine, LivenessMonitorAddon, LocalAuthAddon, LocalChildClient, LocalChildRegistry, LogManager, LogRingBuffer, LoggingGate, LokiDestination, LokiLoggingAddon, MAX_CAP_ACTIONS_PER_PEER, MAX_LEAF_VALIDITY_DAYS, MESH_QUEUE_TOP_N, METHOD_ACCESS_MAP, ModelDownloadService, NATIVE_PROVIDER_SERVICE_INFIX, NATIVE_SCAN_DEPTH, NativeMetricsAddon, NativeMetricsProvider, NetworkQualityTracker, NotificationService, OUTBOUND_QUEUE_COOLDOWN_MS, OUTBOUND_QUEUE_SUSTAIN_MS, OUTBOUND_QUEUE_THRESHOLD_BYTES, PARENT_ROUTED_PROVIDER_ADDON_ID, PYTHON_VERSION, PeerAnsweredError, PipelineRunner, PipelineValidator, PythonEnvManager, QUARANTINE_DIRNAME, RESTART_MARKER_FILE, RSS_BUDGET_REANNOUNCE_MIN_MS, RSS_BUDGET_RELEASE_RATIO, RUNNER_HEAP_WATCH_INTERVAL_MS, RUNNER_RSS_BUDGET_ENV, RUNTIME_DEFAULTS, ReadinessRegistry, ReadinessTimeoutError, ReplEngine, RingBuffer, SERVER_AUTH_OID, SOCKET_PLANE_TOP_N, SOCKET_QUEUE_TOP_N, STALL_REPORT_MS, STALL_TICK_MS, STORE_READABLE_BOOTSTRAP_KEYS, ScopedLogger, ScopedTokenManager, SettingsReadUnavailableError, SocketChannel, SqliteSettingsAddon, SqliteSettingsBackend, StagingArea, StorageLocationManager, StorageManager, StorageOrchestratorAddon, StorageOrchestratorService, SystemConfigAddon, SystemEventBus, TRADITIONAL_NATIVE_PACKAGES, ToastService, UDS_NO_ROUTE_PREFIX, UNCLAIMED, UdsLocalTransportClient, UdsLocalTransportServer, UserManager, WinstonDestination, WinstonLoggingAddon, ZERO_LOOP_DELAY, __resetCapUsageRegistryForTests, __resetLoggingGateForTests, adaptBrokerToCluster, addonSettingsCapability, afterWorkerOnlineAnnounce, allFamiliesListenHost, answerClaimedGetStatus, applyLanHttp, attributeStall, bindPendingLanHttp, bootstrapSchema, brokerCallForCap, brokerTransportLink, buildBinaryPath, buildCapRouters, buildHeapSample, buildLinkChain, buildNativeCapProxy, buildNodeManifest, buildNpmChildEnv, buildStorageLocationRegistry, builderMountedCapNames, callRegisterNodeWithRetry, callWithServiceDiscovery, canServeDataPlane, capActionLabel, capActionName, capActionSuffix, capBareAction, capServiceName, classifyAddonDir, classifyCapRoute, clearPendingRestart, closeLanHttp, clusterEventTopic, clusterSecretMatches, collectCertIdentity, collectModelFiles, contentTypeFor, copyDirRecursive, copyExtraFileDirs, createAddonContext, createAddonDataPlaneFacility, createAddonPeerBytesFacility, createAddonService, createArrayBufferCensusGate, createAuthenticatedFileServer, createBroker, createBrokerDeviceManagerApi, createCapActionCensus, createCoreCapService, createDeferredHeapWatchSink, createDoorSettingsView, createEventPlaneMeter, createEventPlaneReader, createFileDataPlaneHandler, createHubCapForwardService, createHubService, createInspectorArrayBufferCensus, createKernelHwAccel, createLocalTransport, createLoopDelayMeter, createMeshQueueReader, createOutboundQueueGate, createParentUnownedCallHandler, createProcessService, createReadinessService, createReadinessServiceForRegistry, createScopedProcessManager, createSocketDirectionCounters, createSocketPlaneMeter, createSocketPlaneReader, createStreamProbeBrokerService, createUdsAddonContext, createUdsEventBridge, createUdsEventBus, createUdsLogger, createUdsLoggerWithControl, createV8Reclaimer, deleteModelFromDisk, deriveAgentListenPort, describeProviderKindDrift, describeRss, detectWorkspacePackagesDir, deviceCapResolverLink, deviceOfGetStatus, diffCapActionCensus, diffEventPlane, diffSocketPlane, downloadBinary, downloadFile, downloadModel, emitDownForOwnedCaps, emitHeapDiagnosticReport, encodeFrame, ensureAddonNativePrebuilds, ensureBinary, ensureDir, ensureFfmpeg, ensureLibraryBuilt, ensureModel, ensureNativePrebuilds, ensurePython, ensureTlsCert, evaluateExistingCert, expandCapMethods, fetchJson, findInPath, formatArrayBufferCensus, formatEventPlane, formatHeapSpaces, formatLogLine, formatMeshQueue, formatOutboundQueueVerdict, formatSocketPlane, getBrokerEventBus, getCapUsageRegistry, getFfmpegDownloadUrl, getLoggingGate, getModelFilePath, getMoleculerEventStats, getOrInitReadinessRegistry, getOrInitReadinessRegistryForClient, getPidStats, getPlatformInfo, getPythonDownloadUrl, getRestartMarkerPath, getSinglePidStats, getWorkerDeviceRegistry, hasDotNode, hashClusterSecret, heapSpaceField, hostNodeIdOf, hubMainRssBudget, installManifestNativeDeps, installManifestPythonDeps, installManifestSystemDeps, installPackageFromNpm, installPythonPackages, installPythonRequirements, ipcParentLink, isAddonDeploySource, isArrayBufferCensusReport, isArrayOutputSchema, isClusterSecretMismatchError, isCollectionArrayMethod, isInfraCapability, isModelDownloaded, isSettingsReadUnavailable, isSourceNewer, isolatedBuiltinPhase, loadTlsCert, localEndpointPath, localProviderLink, mountNativeCapService, nextRssBudgetState, overlayGetStatus, parseCapAction, parseRangeHeader, parseRssBudgetMb, parseTokenizedUrl, partitionIsolatedBuiltinIds, proxyToUpstream, quarantineAddonResidue, readExtraSans, readHeapSpaces, readLanHttpState,
|
|
96449
|
+
export { AGENT_CAP_FWD_ACTION, AGENT_CAP_FWD_SERVICE, AGENT_READINESS_SERVICE_NAME, ALL_CAPABILITY_DEFINITIONS, ARRAY_BUFFER_CENSUS_COOLDOWN_MS, ARRAY_BUFFER_CENSUS_SUSTAIN_MS, ARRAY_BUFFER_CENSUS_THRESHOLD_MB, ARRAY_BUFFER_RELEASE_MIN_DROP_RATIO, AddonApiFactory, AddonDepsManager, AddonEngineManager, AddonHealthMonitor, AddonInstaller, AddonLoader, AddonManifest, AddonRouteRegistry, AlertCenterAddon, ApiKeyManager, AuthManager, CAP_ACTION_OVERFLOW_LABEL, CAP_ACTION_UNLABELLED, CAP_METHOD_NOT_IMPLEMENTED, CA_COMMON_NAME, CA_VALIDITY_DAYS, CLUSTER_SECRET_MISMATCH_TYPE, CLUSTER_SECRET_REJECTED_EXIT_CODE, CORE_CAP_SERVICE_NAME, CalendarsAddon, CapRouteError, CapRouteResolver, CapUsageRegistry, CapabilityHandle, CapabilityRegistry, CapabilityUnavailableError, ComposerAddon, ConfigManager, ConfigStore, ConsoleDestination, ConsoleLoggingAddon, CoreBlocksAddon, CustomActionRegistry, DECISIVE_HEAP_SPACES, DEFAULT_DATA_PATH, DEFAULT_LAN_HTTP_PORT, DEFAULT_LOG_LEVEL, DEVICE_SETTINGS_CONTRIBUTION_METHODS, DEVICE_STATUS_METHOD, DataPlaneRegistry, DeviceManagerAddon, DeviceRegistry, DeviceStore, EMPTY_CAP_ACTION_READING, EMPTY_SOCKET_DIRECTION, EMPTY_SOCKET_PLANE_BASELINE, EVENT_PLANE_TOP_N, EVENT_TOPIC_PREFIX, EngineManagerResolver, EventBus, FeatureManager, FilesystemStorageAddon, FilesystemStorageProvider, FrameDecoder, FsStorageBackend, GET_STATUS_METHOD, HEALTH_MONITOR_GRACE_PERIOD_MS, HEALTH_MONITOR_RETRY_INTERVALS_MS, HEALTH_MONITOR_TICK_MS, HEAP_RECLAIM_MIN_INTERVAL_MS, HEAP_RECLAIM_STEADY_STATE_INTERVAL_MS, HEAP_RECLAIM_TRIGGER_MB, HEAP_SPACE_REPORT_MIN_MB, HEAP_WATCH_INTERVAL_MS, HEAP_WATCH_WARN_RATIO, HUB_CAP_FWD_ACTION, HUB_CAP_FWD_SERVICE, HUB_MAIN_HEAP_WATCH_LABEL, HUB_MAIN_RSS_BUDGET_MB, HUB_RSS_BUDGET_ENV, HubForwarderAddon, HubForwarderDestination, HubLogForwarder, HubNodeRegistry, INFRA_CAPABILITIES, IntegrationRegistry, JobJournal, LEAF_RENEWAL_WINDOW_DAYS, LifecycleJobEngine, LifecycleStateMachine, LivenessMonitorAddon, LocalAuthAddon, LocalChildClient, LocalChildRegistry, LogManager, LogRingBuffer, LoggingGate, LokiDestination, LokiLoggingAddon, MAX_CAP_ACTIONS_PER_PEER, MAX_LEAF_VALIDITY_DAYS, MESH_QUEUE_TOP_N, METHOD_ACCESS_MAP, ModelDownloadService, NATIVE_PROVIDER_SERVICE_INFIX, NATIVE_SCAN_DEPTH, NativeMetricsAddon, NativeMetricsProvider, NetworkQualityTracker, NotificationService, OUTBOUND_QUEUE_COOLDOWN_MS, OUTBOUND_QUEUE_SUSTAIN_MS, OUTBOUND_QUEUE_THRESHOLD_BYTES, PARENT_ROUTED_PROVIDER_ADDON_ID, PYTHON_VERSION, PeerAnsweredError, PipelineRunner, PipelineValidator, PythonEnvManager, QUARANTINE_DIRNAME, RESTART_MARKER_FILE, RSS_BUDGET_REANNOUNCE_MIN_MS, RSS_BUDGET_RELEASE_RATIO, RUNNER_HEAP_WATCH_INTERVAL_MS, RUNNER_RSS_BUDGET_ENV, RUNTIME_DEFAULTS, ReadinessRegistry, ReadinessTimeoutError, ReplEngine, RingBuffer, SERVER_AUTH_OID, SOCKET_PLANE_TOP_N, SOCKET_QUEUE_TOP_N, STALL_REPORT_MS, STALL_TICK_MS, STORE_READABLE_BOOTSTRAP_KEYS, ScopedLogger, ScopedTokenManager, SettingsReadUnavailableError, SocketChannel, SqliteSettingsAddon, SqliteSettingsBackend, StagingArea, StorageLocationManager, StorageManager, StorageOrchestratorAddon, StorageOrchestratorService, SystemConfigAddon, SystemEventBus, TRADITIONAL_NATIVE_PACKAGES, ToastService, UDS_NO_ROUTE_PREFIX, UNCLAIMED, UdsLocalTransportClient, UdsLocalTransportServer, UserManager, WinstonDestination, WinstonLoggingAddon, ZERO_LOOP_DELAY, __resetCapUsageRegistryForTests, __resetLoggingGateForTests, adaptBrokerToCluster, addonSettingsCapability, afterWorkerOnlineAnnounce, allFamiliesListenHost, answerClaimedGetStatus, applyLanHttp, attributeStall, bindPendingLanHttp, bootstrapSchema, brokerCallForCap, brokerTransportLink, buildBinaryPath, buildCapRouters, buildHeapSample, buildLinkChain, buildNativeCapProxy, buildNodeManifest, buildNpmChildEnv, buildStorageLocationRegistry, builderMountedCapNames, callRegisterNodeWithRetry, callWithServiceDiscovery, canServeDataPlane, capActionLabel, capActionName, capActionSuffix, capBareAction, capServiceName, classifyAddonDir, classifyCapRoute, clearPendingRestart, closeLanHttp, clusterEventTopic, clusterSecretMatches, collectCertIdentity, collectModelFiles, contentTypeFor, copyDirRecursive, copyExtraFileDirs, createAddonContext, createAddonDataPlaneFacility, createAddonPeerBytesFacility, createAddonService, createArrayBufferCensusGate, createAuthenticatedFileServer, createBroker, createBrokerDeviceManagerApi, createCapActionCensus, createCoreCapService, createDeferredHeapWatchSink, createDoorSettingsView, createEventPlaneMeter, createEventPlaneReader, createFileDataPlaneHandler, createHubCapForwardService, createHubService, createInspectorArrayBufferCensus, createKernelHwAccel, createLocalTransport, createLoopDelayMeter, createMeshQueueReader, createOutboundQueueGate, createParentUnownedCallHandler, createProcessService, createReadinessService, createReadinessServiceForRegistry, createScopedProcessManager, createSocketDirectionCounters, createSocketPlaneMeter, createSocketPlaneReader, createStreamProbeBrokerService, createUdsAddonContext, createUdsEventBridge, createUdsEventBus, createUdsLogger, createUdsLoggerWithControl, createV8Reclaimer, deleteModelFromDisk, deriveAgentListenPort, describeProviderKindDrift, describeRss, detectWorkspacePackagesDir, deviceCapResolverLink, deviceOfGetStatus, diffCapActionCensus, diffEventPlane, diffSocketPlane, downloadBinary, downloadFile, downloadModel, emitDownForOwnedCaps, emitHeapDiagnosticReport, encodeFrame, ensureAddonNativePrebuilds, ensureBinary, ensureDir, ensureFfmpeg, ensureLibraryBuilt, ensureModel, ensureNativePrebuilds, ensurePython, ensureTlsCert, evaluateExistingCert, expandCapMethods, fetchJson, findInPath, formatArrayBufferCensus, formatEventPlane, formatHeapSpaces, formatLogLine, formatMeshQueue, formatOutboundQueueVerdict, formatSocketPlane, getBrokerEventBus, getCapUsageRegistry, getFfmpegDownloadUrl, getLoggingGate, getModelFilePath, getMoleculerEventStats, getOrInitReadinessRegistry, getOrInitReadinessRegistryForClient, getPidStats, getPlatformInfo, getPythonDownloadUrl, getRestartMarkerPath, getSinglePidStats, getWorkerDeviceRegistry, hasDotNode, hashClusterSecret, heapSpaceField, hostNodeIdOf, hubMainRssBudget, installManifestNativeDeps, installManifestPythonDeps, installManifestSystemDeps, installPackageFromNpm, installPythonPackages, installPythonRequirements, ipcParentLink, isAddonDeploySource, isArrayBufferCensusReport, isArrayOutputSchema, isClusterSecretMismatchError, isCollectionArrayMethod, isInfraCapability, isModelDownloaded, isSettingsReadUnavailable, isSourceNewer, isolatedBuiltinPhase, loadTlsCert, localEndpointPath, localProviderLink, mountNativeCapService, nextRssBudgetState, overlayGetStatus, parseCapAction, parseRangeHeader, parseRssBudgetMb, parseTokenizedUrl, partitionIsolatedBuiltinIds, proxyToUpstream, quarantineAddonResidue, readExtraSans, readHeapSpaces, readLanHttpState, readPendingRestart, readSocketQueues, readTlsAccessStatus, readTlsMode, readinessKey, reclaimIntervalMs, recordSocketFrame, registerEventBusService, registerLanHttpHandler, reissueTlsLeaf, resolveFilePath, resolveHwAccel, resolveNpmInvocation, runHubAddonBoot, runNpm, sampleSocketDirection, scheduleSelfRestart, scopeKey, scopesAllowAddon, scopesAllowDeviceCap, selectAddonResidue, selectReportedSpaces, serializeTypedArrays, setHubConnected, setNodeEventInterest, setWrapperActive, shouldReclaim, signalAllRunnerGroups, socketDirectionBytes, socketDirectionMessages, startEventLoopStallMonitor, startHeapWatch, startRunnerHeapWatch, storeMayAnswer, strandedMb, stripCamstackDeps, subscribePassthrough, udsChildLogToWorkerEntry, validateProviderRegistrations, validateUploadedTls, waitUntilReady, writeExtraSans, writePendingRestart, writeTlsMode };
|
|
@@ -22,27 +22,13 @@
|
|
|
22
22
|
* on that runner also counts page-cache reads and it owns a vector store, so the
|
|
23
23
|
* correlation is not an attribution. `fanoutTop` turns it into one.
|
|
24
24
|
*
|
|
25
|
-
* ##
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
* (`
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
* The hub runs with `CAMSTACK_MOLECULER_EVENT_FANOUT=shadow` — which computes
|
|
33
|
-
* the drop decision, counts the would-suppresses and **still delivers every
|
|
34
|
-
* event** — and **neither counter has ever had a production caller**: both
|
|
35
|
-
* functions are reachable only from barrel re-exports and unit tests. So the
|
|
36
|
-
* burn-in has no end condition, and the promotion to `filter` never happened
|
|
37
|
-
* because the evidence that would authorise it was never surfaced. This module
|
|
38
|
-
* surfaces it. It changes no default and flips no env: the promotion stays a
|
|
39
|
-
* one-env decision for the operator, and it now has a number behind it.
|
|
40
|
-
*
|
|
41
|
-
* Read the modes with the counts, always. A suppressed count of 0 means
|
|
42
|
-
* "nothing would have been dropped" under `shadow` and "nothing WAS dropped"
|
|
43
|
-
* under `filter`, and those are different claims. A count printed without its
|
|
44
|
-
* regime is unreadable, and the regime is read ONCE at construction — invisible
|
|
45
|
-
* at runtime until now.
|
|
25
|
+
* ## Both planes always filter
|
|
26
|
+
*
|
|
27
|
+
* The cross-node plane ran a `shadow` burn-in (`CAMSTACK_MOLECULER_EVENT_FANOUT`)
|
|
28
|
+
* with no end condition, and the UDS plane carried the same three-mode switch
|
|
29
|
+
* (`CAMSTACK_UDS_EVENT_FANOUT`). Both switches were removed on 2026-10-06: a
|
|
30
|
+
* suppressed count now always means "this many WERE dropped", and the line no
|
|
31
|
+
* longer prints a regime because there is only one.
|
|
46
32
|
*
|
|
47
33
|
* ## The fail-open nobody can see
|
|
48
34
|
*
|
|
@@ -81,16 +67,7 @@
|
|
|
81
67
|
* `fanoutOrphans` counts what was serialised and walked across every child with
|
|
82
68
|
* zero subscribers. A suppressed pair was measured at **255 ns** — 1.84 ms/s of
|
|
83
69
|
* event loop at this rate — so the filter is not the cost; the emit is.
|
|
84
|
-
*
|
|
85
|
-
* ## What this is NOT evidence of
|
|
86
|
-
*
|
|
87
|
-
* `shadow` is the CROSS-NODE plane. The local UDS plane defaults to `filter` and
|
|
88
|
-
* its env is unset, so it is filtering. hub-main's ~44 000 socket syscalls/s are
|
|
89
|
-
* mostly to LOCAL runners, so the shadow mode is a real defect and is **not**
|
|
90
|
-
* established as the source of that load. Do not read these two facts as one.
|
|
91
70
|
*/
|
|
92
|
-
/** Fan-out regime for one plane. Same three values on both. */
|
|
93
|
-
export type EventFanoutMode = 'filter' | 'shadow' | 'broadcast';
|
|
94
71
|
/** One child's fan-out counters, as the registry keeps them (cumulative). */
|
|
95
72
|
export interface ChildFanoutSample {
|
|
96
73
|
readonly childId: string;
|
|
@@ -127,7 +104,6 @@ export interface ChildFanoutRegistry {
|
|
|
127
104
|
readonly listChildren: () => readonly ChildFanoutRegistryChild[];
|
|
128
105
|
readonly getChildEventStats: (childId: string) => ChildFanoutRegistryStats | null;
|
|
129
106
|
readonly undeclaredChildCount: () => number;
|
|
130
|
-
readonly eventFanoutMode: EventFanoutMode;
|
|
131
107
|
readonly categoryFanout: () => readonly CategoryFanoutSample[];
|
|
132
108
|
readonly categoryCensusOverflow: () => number;
|
|
133
109
|
}
|
|
@@ -138,8 +114,6 @@ export interface CrossNodeEventStats {
|
|
|
138
114
|
}
|
|
139
115
|
/** One cumulative reading of both planes. */
|
|
140
116
|
export interface EventPlaneCounters {
|
|
141
|
-
readonly udsMode: EventFanoutMode;
|
|
142
|
-
readonly crossNodeMode: EventFanoutMode;
|
|
143
117
|
readonly children: readonly ChildFanoutSample[];
|
|
144
118
|
readonly childrenConnected: number;
|
|
145
119
|
readonly childrenUndeclared: number;
|
|
@@ -156,7 +130,6 @@ export type EventPlaneReader = () => EventPlaneCounters | undefined;
|
|
|
156
130
|
export interface EventPlaneSources {
|
|
157
131
|
readonly registry: () => ChildFanoutRegistry | null;
|
|
158
132
|
readonly crossNodeStats: () => CrossNodeEventStats | null;
|
|
159
|
-
readonly crossNodeMode: () => EventFanoutMode;
|
|
160
133
|
}
|
|
161
134
|
/**
|
|
162
135
|
* Build a reader over the two registries.
|
|
@@ -183,8 +156,6 @@ export declare function createEventPlaneReader(sources: EventPlaneSources): Even
|
|
|
183
156
|
export declare const EVENT_PLANE_TOP_N = 5;
|
|
184
157
|
/** Both planes over one heartbeat window. */
|
|
185
158
|
export interface EventPlaneWindow {
|
|
186
|
-
readonly udsMode: EventFanoutMode;
|
|
187
|
-
readonly crossNodeMode: EventFanoutMode;
|
|
188
159
|
readonly childrenConnected: number;
|
|
189
160
|
readonly childrenUndeclared: number;
|
|
190
161
|
readonly fanoutSent: number;
|
|
@@ -26,8 +26,7 @@ export declare function copyDirRecursive(src: string, dest: string): Promise<voi
|
|
|
26
26
|
* `addons/` stays node_modules-free, which is what lets the backup tar the whole
|
|
27
27
|
* folder with no exclusion list (see ADR-0027). An addon that genuinely needs an
|
|
28
28
|
* un-bundleable runtime dep declares it explicitly in
|
|
29
|
-
* `camstack.runtimeDependencies
|
|
30
|
-
* `CAMSTACK_INSTALL_FULL_DEPS=1` restores the legacy install-everything path.
|
|
29
|
+
* `camstack.runtimeDependencies`.
|
|
31
30
|
*
|
|
32
31
|
* (Historically this mirrored the build preset's COMMON_NATIVE_DEPS and
|
|
33
32
|
* per-addon-installed node-av/sharp/onnxruntime-node/ssh2/werift/systeminformation
|
|
@@ -49,9 +48,6 @@ export declare const RUNTIME_NATIVE_KEEP: readonly string[];
|
|
|
49
48
|
* `dependencies` so `--omit=peer` installs can't drop them (pipeline's
|
|
50
49
|
* patched `werift`).
|
|
51
50
|
*
|
|
52
|
-
* Escape hatch: `CAMSTACK_INSTALL_FULL_DEPS=1` restores the legacy behaviour
|
|
53
|
-
* (strip only @camstack/*) for debugging a suspected undeclared runtime dep.
|
|
54
|
-
*
|
|
55
51
|
* Returns a new object (immutable).
|
|
56
52
|
*/
|
|
57
53
|
export declare function stripBundledDeps(pkg: Record<string, unknown>): Record<string, unknown>;
|
|
@@ -88,22 +88,6 @@ export declare function selectReportedSpaces(spaces: readonly HeapSpaceUsage[],
|
|
|
88
88
|
* a query someone already wrote.
|
|
89
89
|
*/
|
|
90
90
|
export declare function formatHeapSpaces(spaces: readonly HeapSpaceUsage[], minMb?: number): string;
|
|
91
|
-
/**
|
|
92
|
-
* Env var that authorises a heap snapshot on SIGUSR2.
|
|
93
|
-
*
|
|
94
|
-
* A snapshot is an admin mutation on a production hub: `writeHeapSnapshot`
|
|
95
|
-
* streams a file the size of the heap to `/tmp` and stops the world while it
|
|
96
|
-
* walks it — on the recorder that is a multi-GB file and a stall measured in
|
|
97
|
-
* seconds. The per-space breakdown is ~1.2 µs and changes nothing. Welding them
|
|
98
|
-
* to one signal priced the free answer at the cost of the expensive one.
|
|
99
|
-
*/
|
|
100
|
-
/**
|
|
101
|
-
* Whether the operator has authorised the snapshot half of SIGUSR2.
|
|
102
|
-
*
|
|
103
|
-
* Explicit `'on'` only. Anything else — unset, empty, `'true'`, `'1'` — is NOT
|
|
104
|
-
* authorisation: a multi-GB stop-the-world write must never be reachable by a
|
|
105
|
-
* value someone set for a different purpose.
|
|
106
|
-
*/
|
|
107
91
|
/** What a diagnostic report is ABOUT. */
|
|
108
92
|
export interface HeapDiagnosticRequest {
|
|
109
93
|
/** The runner's nodeId, so the line groups with its `[mem]` heartbeat. */
|
|
@@ -115,19 +99,14 @@ export interface HeapDiagnosticRequest {
|
|
|
115
99
|
export interface HeapDiagnosticDeps {
|
|
116
100
|
readonly readMemory: () => NodeJS.MemoryUsage;
|
|
117
101
|
readonly readSpaces: HeapSpaceReader;
|
|
118
|
-
readonly env: NodeJS.ProcessEnv;
|
|
119
102
|
}
|
|
120
103
|
/**
|
|
121
|
-
* The SIGUSR2 report — memory + the FULL per-space breakdown
|
|
122
|
-
* snapshot
|
|
104
|
+
* The SIGUSR2 report — memory + the FULL per-space breakdown; never a heap
|
|
105
|
+
* snapshot (D718) — see the note in the body.
|
|
123
106
|
*
|
|
124
107
|
* The breakdown here keeps every non-empty space at 0.1 MB, unlike the
|
|
125
108
|
* heartbeat's filtered whole-MB pair: this is a hand-fired diagnostic read once
|
|
126
109
|
* by a human who asked for it, so completeness costs nothing. The heartbeat runs
|
|
127
110
|
* unattended on every runner forever, so it pays for every field it prints.
|
|
128
|
-
*
|
|
129
|
-
* A refused snapshot SAYS SO. A branch that drops work silently reads as "it was
|
|
130
|
-
* never requested", and this one is fired by an operator who is standing there
|
|
131
|
-
* waiting for a file.
|
|
132
111
|
*/
|
|
133
112
|
export declare function emitHeapDiagnosticReport(request: HeapDiagnosticRequest, deps?: HeapDiagnosticDeps): void;
|
package/dist/kernel/index.d.ts
CHANGED
|
@@ -45,8 +45,6 @@ export { createCoreCapService, CORE_CAP_SERVICE_NAME } from './moleculer/core-ca
|
|
|
45
45
|
export type { CoreCapAction, CoreCapCallOrigin, CoreCapServiceOptions, } from './moleculer/core-cap-service.js';
|
|
46
46
|
export { createAddonContext, createUdsAddonContext, setHubConnected, adaptBrokerToCluster, registerEventBusService, setNodeEventInterest, getMoleculerEventStats, subscribePassthrough, getBrokerEventBus, clusterEventTopic, EVENT_TOPIC_PREFIX, } from './moleculer/addon-context-factory.js';
|
|
47
47
|
export type { MoleculerEventStats } from './moleculer/addon-context-factory.js';
|
|
48
|
-
export type { MoleculerEventFanoutMode } from './moleculer/event-bus-core.js';
|
|
49
|
-
export { readMoleculerFanoutMode } from './moleculer/event-bus-core.js';
|
|
50
48
|
export { HubLogForwarder } from './moleculer/hub-log-forwarder.js';
|
|
51
49
|
export type { AddonContextOptions } from './moleculer/addon-context-factory.js';
|
|
52
50
|
export { createHubService } from './moleculer/hub-service.js';
|
|
@@ -142,31 +142,12 @@ export declare const RING_BUFFER_DENY_PATTERNS: readonly string[];
|
|
|
142
142
|
export declare const MAX_RECENT_EVENTS = 1000;
|
|
143
143
|
export declare function isHighFrequencyCategory(category: string): boolean;
|
|
144
144
|
/**
|
|
145
|
-
*
|
|
146
|
-
*
|
|
147
|
-
*
|
|
148
|
-
*
|
|
149
|
-
*
|
|
150
|
-
* declared patterns).
|
|
151
|
-
* - `shadow` — compute the drop decision + count would-suppresses, but
|
|
152
|
-
* STILL deliver every event (burn-in: prove zero would-be-starved deliveries
|
|
153
|
-
* before flipping to `filter`).
|
|
154
|
-
* - `broadcast` — ignore the gate entirely (pre-D2 behaviour).
|
|
155
|
-
*
|
|
156
|
-
* ROLLBACK CONTRACT (operators, read this): this env governs ONLY the inter-node
|
|
157
|
-
* (Moleculer) gate. The intra-host UDS fan-out has a SEPARATE, independent
|
|
158
|
-
* kill-switch, `CAMSTACK_UDS_EVENT_FANOUT` (see `local-child-registry.ts`). A
|
|
159
|
-
* FULL rollback to pre-D2 / pre-#44 delivery therefore requires BOTH env vars
|
|
160
|
-
* set to `broadcast` AND a process restart on EVERY node (hub + all agents) —
|
|
161
|
-
* each is read ONCE at registration/construction, so a running process will not
|
|
162
|
-
* pick up a change. Flipping only one leg leaves the other filtering and yields
|
|
163
|
-
* inconsistent behaviour. Recommended first fleet-wide enable: `shadow` on both,
|
|
164
|
-
* watch the suppressed counters (`getMoleculerEventStats` /
|
|
165
|
-
* `getChildEventStats`), then flip to `filter` once burn-in shows zero
|
|
166
|
-
* would-be-starved deliveries.
|
|
145
|
+
* Cross-node (Moleculer) inbound gate: an inbound cross-node event whose
|
|
146
|
+
* category no local subscriber on THIS node wants (the union of its children's
|
|
147
|
+
* declared patterns) is dropped and counted (`suppressed`). It always filters —
|
|
148
|
+
* the `CAMSTACK_MOLECULER_EVENT_FANOUT` shadow/broadcast modes were removed on
|
|
149
|
+
* 2026-10-06; the intra-host analogue is `LocalChildRegistry.childWantsEvent`.
|
|
167
150
|
*/
|
|
168
|
-
export type MoleculerEventFanoutMode = 'filter' | 'shadow' | 'broadcast';
|
|
169
|
-
export declare function readMoleculerFanoutMode(): MoleculerEventFanoutMode;
|
|
170
151
|
/**
|
|
171
152
|
* A node's inbound-interest snapshot used by {@link crossNodeAcceptsCategory}.
|
|
172
153
|
* - `retainRecent` — the receiving bus retains events for `getRecent`/audit
|
|
@@ -185,16 +166,13 @@ export interface CrossNodeInterestSnapshot {
|
|
|
185
166
|
/**
|
|
186
167
|
* Does this node want to accept an inbound cross-node event in `category`?
|
|
187
168
|
* The receiving-side mirror of `LocalChildRegistry.childWantsEvent`:
|
|
188
|
-
* - `broadcast` mode → always (gate disabled).
|
|
189
169
|
* - a retaining bus (hub main) → always (it serves `getRecent` + admin-ui;
|
|
190
170
|
* its interest is genuinely everything).
|
|
191
171
|
* - undeclared interest (`null`) → always (fail-open).
|
|
192
172
|
* - else the declared union must match via `matchesPattern` — the SAME
|
|
193
173
|
* function the local subscriber map-key gate uses, giving delivery parity.
|
|
194
|
-
* `shadow` is handled by the caller (it counts the would-suppress but still
|
|
195
|
-
* delivers), exactly like the UDS fan-out.
|
|
196
174
|
*/
|
|
197
|
-
export declare function crossNodeAcceptsCategory(
|
|
175
|
+
export declare function crossNodeAcceptsCategory(snapshot: CrossNodeInterestSnapshot, category: string): boolean;
|
|
198
176
|
/**
|
|
199
177
|
* Deliver `event` to all matching local subscribers and — ONLY on a bus that
|
|
200
178
|
* opted into retention (`state.retainRecent`, i.e. the hub main process) and
|