openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
67 lines (66 loc) • 4.18 kB
JavaScript
import { c as isRecord } from "./record-coerce-DItp3I4t.js";
import "./worker-admission-C1l9t3yY.js";
//#region src/infra/node-runner-inventory.ts
const NODE_RUNNER_INVENTORY_UPDATE_METHOD = "node.runnerInventory.update";
const NODE_WORKER_SUPERVISOR_PROTOCOL_FEATURE = "node-worker-supervisor-v6";
const RETIRED_NODE_WORKER_SUPERVISOR_PROTOCOL_FEATURES = [
"node-worker-supervisor-v1",
"node-worker-supervisor-v2",
"node-worker-supervisor-v3",
"node-worker-supervisor-v4",
"node-worker-supervisor-v5"
];
const NODE_WORKER_CAPACITY_MAX = 1024;
const NODE_RUNNER_UPDATE_REQUIRED_ISSUE = {
code: "update-required",
action: "update-and-reconnect",
updateCommand: "openclaw update",
headlessReconnectCommand: "openclaw node restart"
};
function parseCapacitySnapshot(value) {
if (!isRecord(value)) return null;
const keys = Object.keys(value);
const total = value.total;
const available = value.available;
return keys.length === 2 && keys.includes("total") && keys.includes("available") && typeof total === "number" && typeof available === "number" && Number.isSafeInteger(total) && Number.isSafeInteger(available) && total >= 1 && total <= 1024 && available >= 0 && available <= total ? {
total,
available
} : null;
}
function parseWorkerHostDeclaration(value) {
if (!isRecord(value) || typeof value.enabled !== "boolean") return null;
const keys = Object.keys(value);
if (!value.enabled) return keys.length === 1 && keys[0] === "enabled" ? { enabled: false } : null;
const capacity = parseCapacitySnapshot(value.capacity);
if (!capacity || keys.length < 2 || keys.length > 7 || !keys.includes("enabled") || !keys.includes("capacity") || keys.some((key) => key !== "enabled" && key !== "capacity" && key !== "bundlePrewarm" && key !== "bundleRetention" && key !== "bundleStatus" && key !== "portalStream" && key !== "environmentSession") || value.bundlePrewarm !== void 0 && value.bundlePrewarm !== 1 || value.bundleRetention !== void 0 && value.bundleRetention !== 1 || value.bundleStatus !== void 0 && value.bundleStatus !== 1 || value.portalStream !== void 0 && value.portalStream !== 1 || value.environmentSession !== void 0 && value.environmentSession !== 1 || value.bundleStatus !== void 0 && value.bundleRetention === void 0) return null;
return {
enabled: true,
capacity,
...value.bundlePrewarm === 1 ? { bundlePrewarm: 1 } : {},
...value.bundleRetention === 1 ? { bundleRetention: 1 } : {},
...value.bundleStatus === 1 ? { bundleStatus: 1 } : {},
...value.portalStream === 1 ? { portalStream: 1 } : {},
...value.environmentSession === 1 ? { environmentSession: 1 } : {}
};
}
/** Parses the closed reconnect-scoped node-host runner declaration. */
function parseNodeRunnerInventoryDeclaration(value) {
if (!isRecord(value) || !Array.isArray(value.protocolFeatures)) return null;
const keys = Object.keys(value);
if (value.protocolFeatures.length === 0) return keys.length === 1 && keys.includes("protocolFeatures") ? { protocolFeatures: [] } : null;
if (value.protocolFeatures.length !== 1) return null;
const feature = value.protocolFeatures[0];
const retiredFeature = RETIRED_NODE_WORKER_SUPERVISOR_PROTOCOL_FEATURES.find((candidate) => candidate === feature);
if (retiredFeature) return keys.length <= 2 && keys.every((key) => key === "protocolFeatures" || key === "workerRuns" || key === "workerHost") ? { protocolFeatures: [retiredFeature] } : null;
if (feature !== "node-worker-supervisor-v6" || keys.length !== 2) return null;
const workerHost = parseWorkerHostDeclaration(value.workerHost);
return workerHost ? {
protocolFeatures: [NODE_WORKER_SUPERVISOR_PROTOCOL_FEATURE],
workerHost
} : null;
}
function formatNodeRunnerUpdateRequired(nodeId, issue) {
return `device worker node ${nodeId} requires an update before it can host sessions; run ${issue.updateCommand}, then reconnect it (for a headless node, run ${issue.headlessReconnectCommand})`;
}
//#endregion
export { formatNodeRunnerUpdateRequired as a, NODE_WORKER_SUPERVISOR_PROTOCOL_FEATURE as i, NODE_RUNNER_UPDATE_REQUIRED_ISSUE as n, parseNodeRunnerInventoryDeclaration as o, NODE_WORKER_CAPACITY_MAX as r, NODE_RUNNER_INVENTORY_UPDATE_METHOD as t };