thedotmack/claude-mem · warning

claude-mem: uv --version probe failed:

Error message

claude-mem: uv --version probe failed:

What it means

getUvVersion probes the uv tool by spawning `uv --version` and returns null when the probe throws. The warning tells you the uv binary could not be spawned at the resolved path, so uv-dependent steps (Chroma runtime) will be treated as unavailable.

Solutions

  1. Install uv (curl -LsSf https://astral.sh/uv/install.sh | sh) and ensure its bin dir is on PATH
  2. Run `uv --version` manually to confirm it resolves in the target environment
  3. Provide the correct uv path if it lives outside the common paths this code checks
  4. Fix permissions on the uv binary if EACCES

Example fix

// before
const result = spawnVersionProbe(uvPath, ['--version']);
// after
if (!uvPath) {
  console.warn('claude-mem: uv not found on PATH');
  return null;
}
const result = spawnVersionProbe(uvPath, ['--version']);
Defensive patterns

Strategy: fallback

Validate before calling

const probe = spawnSync('uv', ['--version']);
if (probe.error || probe.status !== 0) console.warn('uv unavailable; install it for Chroma support');

Type guard

function hasUv(): boolean {
  try { return spawnVersionProbe(uvPath, ['--version']).status === 0; } catch { return false; }
}

Try / catch

try {
  const v = getUvVersion();
  if (v === null) throw new Error('uv version unavailable');
} catch (e) {
  // install uv or disable uv-dependent features
}

Prevention

When it happens

Trigger: spawnVersionProbe(uvPath, ['--version']) throws: uv not on PATH or at any of the common uv paths, binary not executable, or spawn fails due to environment restrictions.

Common situations: uv never installed; uv installed via pip/cargo into a venv not on PATH; PATH differs between interactive shell and the process invoking this code; permission issues on the binary.

Related errors


AI-assisted analysis of thedotmack/claude-mem@d8bc9755e7 (2026-09-17). Data as JSON: /api/errors/7d935cf7545a31da. Report an issue: GitHub.

Appendix: source

Thrown at src/npx-cli/install/setup-runtime.ts:165

function getUvPath(): string | null {
  return getToolPath('uv', uvCommonPaths());
}

function isUvInstalled(): boolean {
  return getUvPath() !== null;
}

export function getUvVersion(): string | null {
  const uvPath = getUvPath();
  if (!uvPath) return null;

  try {
    const result = spawnVersionProbe(uvPath, ['--version']);
    return result.status === 0 ? result.stdout.trim() : null;
  } catch (error) {
    const err = error instanceof Error ? error : new Error(String(error));
    console.warn('claude-mem: uv --version probe failed:', err);
    return null;
  }
}

function describeExecError(error: unknown): string {
  if (error && typeof error === 'object') {
    const e = error as { message?: string; stdout?: Buffer | string; stderr?: Buffer | string };
    const parts: string[] = [];
    if (e.message) parts.push(e.message);
    const stderr = e.stderr ? e.stderr.toString().trim() : '';
    if (stderr) parts.push(`stderr: ${stderr}`);
    const stdout = e.stdout ? e.stdout.toString().trim() : '';
    if (!stderr && stdout) parts.push(`stdout: ${stdout}`);
    return parts.join('\n');
  }
  return String(error);
}

View on GitHub (pinned to d8bc9755e7)