// sf — Claude CLI binary detection for onboarding // Lightweight check used at onboarding time (before extensions load). // The full readiness check with caching lives in the claude-code-cli extension. import { execFileSync } from "node:child_process"; /** * Check if the `claude` binary is installed (regardless of auth state). */ export function isClaudeBinaryInstalled(): boolean { try { execFileSync("claude", ["--version"], { timeout: 5_000, stdio: "pipe" }); return true; } catch { return false; } } /** * Check if the `claude` CLI is installed AND authenticated. */ export function isClaudeCliReady(): boolean { try { execFileSync("claude", ["--version"], { timeout: 5_000, stdio: "pipe" }); } catch { return false; } try { const output = execFileSync("claude", ["auth", "status"], { timeout: 5_000, stdio: "pipe", }) .toString() .toLowerCase(); return !/not logged in|no credentials|unauthenticated|not authenticated/i.test( output, ); } catch { return false; } }