Lumi/plugins/lumi_ai/backend/error_codes.js
2026-06-11 06:35:43 +02:00

75 lines
4.5 KiB
JavaScript

const WINDOWS_STATUS = {
0xC0000005: ["STATUS_ACCESS_VIOLATION", "runtime_crash", ["Reinstall the runtime.", "Install or update Microsoft Visual C++ Redistributable x64.", "Unblock downloaded runtime files.", "Try a local disk path or alternate runtime build."]],
0xC000001D: ["STATUS_ILLEGAL_INSTRUCTION", "cpu_incompatible", ["Use a baseline or more compatible CPU runtime build.", "Verify CPU AVX/AVX2 support."]],
0xC0000135: ["STATUS_DLL_NOT_FOUND", "missing_dependency", ["Reinstall the runtime.", "Verify sibling DLL files.", "Install or update Microsoft Visual C++ Redistributable x64."]],
0xC0000139: ["STATUS_ENTRYPOINT_NOT_FOUND", "dependency_mismatch", ["Delete and reinstall the complete runtime folder.", "Do not mix DLLs from different releases."]],
0xC000007B: ["STATUS_INVALID_IMAGE_FORMAT", "architecture_mismatch", ["Download the runtime matching the detected OS and architecture.", "Reinstall and verify the archive hash."]],
0xC0000142: ["STATUS_DLL_INIT_FAILED", "dependency_initialization_failed", ["Unblock runtime files.", "Install or update Microsoft Visual C++ Redistributable x64.", "Review security software restrictions."]],
0xC0000409: ["STATUS_STACK_BUFFER_OVERRUN", "runtime_crash", ["Reinstall the runtime.", "Try an alternate runtime build.", "Inspect the captured runtime logs."]],
0xC0000374: ["STATUS_HEAP_CORRUPTION", "runtime_crash", ["Reinstall the runtime.", "Try an alternate build.", "Reduce context size if failure occurs after model load."]]
};
const WINDOWS_LAUNCH = {
2: ["ERROR_FILE_NOT_FOUND", "executable_missing"],
3: ["ERROR_PATH_NOT_FOUND", "path_missing"],
5: ["ERROR_ACCESS_DENIED", "permission_denied"],
126: ["ERROR_MOD_NOT_FOUND", "missing_dependency"],
127: ["ERROR_PROC_NOT_FOUND", "dependency_mismatch"],
193: ["ERROR_BAD_EXE_FORMAT", "architecture_mismatch"],
206: ["ERROR_FILENAME_EXCED_RANGE", "path_too_long"],
740: ["ERROR_ELEVATION_REQUIRED", "permission_denied"],
1114: ["ERROR_DLL_INIT_FAILED", "dependency_initialization_failed"],
1455: ["ERROR_COMMITMENT_LIMIT", "insufficient_memory"]
};
const POSIX = {
11: ["SIGSEGV", "runtime_crash"],
4: ["SIGILL", "cpu_incompatible"],
6: ["SIGABRT", "runtime_abort"],
9: ["SIGKILL", "killed_or_oom"],
15: ["SIGTERM", "terminated"]
};
function normalizeExitCode(code, signal, platform = process.platform) {
if (platform === "win32" && Number.isInteger(code)) {
const unsigned = code >>> 0;
const signed = unsigned | 0;
const known = WINDOWS_STATUS[unsigned];
return {
raw_exit_code: code,
signed_exit_code: signed,
unsigned_exit_code: unsigned,
hex_exit_code: `0x${unsigned.toString(16).toUpperCase().padStart(8, "0")}`,
code: known?.[0] || "WINDOWS_PROCESS_EXIT",
category: known?.[1] || "runtime_exit",
remediation_steps: known?.[2] || ["Inspect runtime stdout and stderr.", "Reinstall or try an alternate runtime build."]
};
}
const signalNumber = typeof signal === "string" ? require("os").constants.signals[signal] : null;
const number = signalNumber || (Number.isInteger(code) && code >= 128 ? code - 128 : Number.isInteger(code) && code < 0 ? -code : null);
const known = number ? POSIX[number] : null;
return {
raw_exit_code: code,
signed_exit_code: code,
unsigned_exit_code: Number.isInteger(code) ? code >>> 0 : null,
hex_exit_code: Number.isInteger(code) ? `0x${(code >>> 0).toString(16).toUpperCase().padStart(8, "0")}` : null,
code: known?.[0] || signal || "PROCESS_EXIT",
category: known?.[1] || "runtime_exit",
remediation_steps: known ? ["Inspect runtime logs.", "Verify runtime compatibility and model settings."] : ["Inspect runtime stdout and stderr."]
};
}
function classifyLaunchError(error, platform = process.platform) {
const numeric = Number(error?.errno);
const known = platform === "win32" ? WINDOWS_LAUNCH[numeric] : null;
return {
raw_exit_code: numeric || null,
signed_exit_code: numeric || null,
unsigned_exit_code: Number.isInteger(numeric) ? numeric >>> 0 : null,
hex_exit_code: Number.isInteger(numeric) ? `0x${(numeric >>> 0).toString(16).toUpperCase().padStart(8, "0")}` : null,
code: known?.[0] || error?.code || "PROCESS_LAUNCH_FAILED",
category: known?.[1] || (/EACCES|EPERM/.test(error?.code) ? "permission_denied" : /ENOENT/.test(error?.code) ? "executable_missing" : "launch_failed"),
remediation_steps: ["Verify the executable and working directory.", "Reinstall the runtime.", "Check file permissions and security software."]
};
}
module.exports = { normalizeExitCode, classifyLaunchError };