{"record":{"id":"7d935cf7545a31da","repo":"thedotmack/claude-mem","slug":"claude-mem-uv-version-probe-failed","errorCode":null,"errorMessage":"claude-mem: uv --version probe failed:","messagePattern":"claude-mem: uv --version probe failed:","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"src/npx-cli/install/setup-runtime.ts","lineNumber":140,"sourceCode":"\nfunction getUvPath(): string | null {\n  return getToolPath('uv', UV_COMMON_PATHS);\n}\n\nfunction isUvInstalled(): boolean {\n  return getUvPath() !== null;\n}\n\nexport function getUvVersion(): string | null {\n  const uvPath = getUvPath();\n  if (!uvPath) return null;\n\n  try {\n    const result = spawnVersionProbe(uvPath, ['--version']);\n    return result.status === 0 ? result.stdout.trim() : null;\n  } catch (error) {\n    const err = error instanceof Error ? error : new Error(String(error));\n    console.warn('claude-mem: uv --version probe failed:', err);\n    return null;\n  }\n}\n\nfunction describeExecError(error: unknown): string {\n  if (error && typeof error === 'object') {\n    const e = error as { message?: string; stdout?: Buffer | string; stderr?: Buffer | string };\n    const parts: string[] = [];\n    if (e.message) parts.push(e.message);\n    const stderr = e.stderr ? e.stderr.toString().trim() : '';\n    if (stderr) parts.push(`stderr: ${stderr}`);\n    const stdout = e.stdout ? e.stdout.toString().trim() : '';\n    if (!stderr && stdout) parts.push(`stdout: ${stdout}`);\n    return parts.join('\\n');\n  }\n  return String(error);\n}\n","sourceCodeStart":122,"sourceCodeEnd":158,"githubUrl":"https://github.com/thedotmack/claude-mem/blob/e2d1df569a8f04075d40e92461128ece7cf04c82/src/npx-cli/install/setup-runtime.ts#L122-L158","documentation":"getUvVersion() spawns `uv --version` through spawnVersionProbe. If the spawn throws (ENOENT, EACCES, or a broken shim), the warning prints and the function returns null, so the installer treats uv as missing and prints its manual-install guidance (curl -LsSf https://astral.sh/uv/install.sh | sh or brew install uv) instead of proceeding with a known uv version.","triggerScenarios":"`npx claude-mem install` when uv was found by getUvPath() but cannot be spawned: the binary was removed, a version-manager shim is broken, or the install environment's PATH does not include the uv location.","commonSituations":"uv uninstalled between the path probe and the spawn; uv installed in a user-local bin not on the service PATH; Windows uv.exe permissions; CI images where uv exists only in a build stage.","solutions":["Confirm uv works where the installer runs: `uv --version`","Reinstall uv with the command the installer prints: curl -LsSf https://astral.sh/uv/install.sh | sh (or brew install uv), then re-run install","Verify the resolved binary is executable: ls -l $(which uv)","Proceed without uv only if you accept the installer's fallback for the vector-search runtime"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"import { spawnSync } from 'node:child_process';\nconst probe = spawnSync('uv', ['--version'], { encoding: 'utf8' });\nif (probe.error) {\n  // ENOENT/EACCES here predicts the installer's 'uv --version probe failed' warning\n  // install uv (curl -LsSf https://astral.sh/uv/install.sh | sh) before re-running install\n}","typeGuard":"function isErrnoException(error: unknown): error is NodeJS.ErrnoException {\n  return error instanceof Error && typeof (error as NodeJS.ErrnoException).code === 'string'\n    && ['ENOENT', 'EACCES', 'EPERM'].includes((error as NodeJS.ErrnoException).code);\n}","tryCatchPattern":null,"preventionTips":["Install uv in a location on PATH for non-interactive shells (~/.local/bin with PATH exported)","Re-run `uv --version` in CI before claude-mem install to catch broken images early","If uv is intentionally absent, pre-decide the fallback so the probe warning is expected"],"tags":["install","uv","spawn","dependency-probe"],"backgroundTag":"spawn-enoent","analyzedSha":"e2d1df569a8f04075d40e92461128ece7cf04c82","analyzedAt":"2026-08-20T23:58:13.836Z","contentChangedAt":"2026-08-20T23:58:13.836Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}