#!/usr/bin/env node const childProcess = require("child_process") const fs = require("fs") const path = require("path") const os = require("os") function run(target) { const result = childProcess.spawnSync(target, process.argv.slice(2), { stdio: "inherit", }) if (result.error) { console.error(result.error.message) process.exit(1) } const code = typeof result.status === "number" ? result.status : 0 process.exit(code) } const envPath = process.env.OPENCODE_BIN_PATH if (envPath) { run(envPath) } const scriptPath = fs.realpathSync(__filename) const scriptDir = path.dirname(scriptPath) const platformMap = { darwin: "darwin", linux: "linux", win32: "windows", } const archMap = { x64: "x64", arm64: "arm64", arm: "arm", } let platform = platformMap[os.platform()] if (!platform) { platform = os.platform() } let arch = archMap[os.arch()] if (!arch) { arch = os.arch() } const base = "opencode-" + platform + "-" + arch const binary = platform === "windows" ? "opencode.exe" : "opencode" function supportsAvx2() { if (arch !== "x64") return false if (platform === "linux") { try { return /(^|\s)avx2(\s|$)/i.test(fs.readFileSync("/proc/cpuinfo", "utf8")) } catch { return false } } if (platform === "darwin") { try { const result = childProcess.spawnSync("sysctl", ["-n", "hw.optional.avx2_0"], { encoding: "utf8", timeout: 1500, }) if (result.status !== 0) return false return (result.stdout || "").trim() === "1" } catch { return false } } if (platform === "windows") { const cmd = '(Add-Type -MemberDefinition "[DllImport(""kernel32.dll"")] public static extern bool IsProcessorFeaturePresent(int ProcessorFeature);" -Name Kernel32 -Namespace Win32 -PassThru)::IsProcessorFeaturePresent(40)' for (const exe of ["powershell.exe", "pwsh.exe", "pwsh", "powershell"]) { try { const result = childProcess.spawnSync(exe, ["-NoProfile", "-NonInteractive", "-Command", cmd], { encoding: "utf8", timeout: 3000, windowsHide: true, }) if (result.status !== 0) continue const out = (result.stdout || "").trim().toLowerCase() if (out === "true" || out === "1") return true if (out === "false" || out === "0") return false } catch { continue } } return false } return false } const names = (() => { const avx2 = supportsAvx2() const baseline = arch === "x64" && !avx2 if (platform === "linux") { const musl = (() => { try { if (fs.existsSync("/etc/alpine-release")) return true } catch { // ignore } try { const result = childProcess.spawnSync("ldd", ["--version"], { encoding: "utf8" }) const text = ((result.stdout || "") + (result.stderr || "")).toLowerCase() if (text.includes("musl")) return true } catch { // ignore } return false })() if (musl) { if (arch === "x64") { if (baseline) return [`${base}-baseline-musl`, `${base}-musl`, `${base}-baseline`, base] return [`${base}-musl`, `${base}-baseline-musl`, base, `${base}-baseline`] } return [`${base}-musl`, base] } if (arch === "x64") { if (baseline) return [`${base}-baseline`, base, `${base}-baseline-musl`, `${base}-musl`] return [base, `${base}-baseline`, `${base}-musl`, `${base}-baseline-musl`] } return [base, `${base}-musl`] } if (arch === "x64") { if (baseline) return [`${base}-baseline`, base] return [base, `${base}-baseline`] } return [base] })() function findBinary(startDir) { let current = startDir for (;;) { const modules = path.join(current, "node_modules") if (fs.existsSync(modules)) { for (const name of names) { const candidate = path.join(modules, name, "bin", binary) if (fs.existsSync(candidate)) return candidate } } const parent = path.dirname(current) if (parent === current) { return } current = parent } } const resolved = findBinary(scriptDir) if (!resolved) { console.error( "It seems that your package manager failed to install the right version of the opencode CLI for your platform. You can try manually installing " + names.map((n) => `\"${n}\"`).join(" or ") + " package", ) process.exit(1) } run(resolved)