| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- #!/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 findBinary(startDir) {
- let current = startDir
- for (;;) {
- const modules = path.join(current, "node_modules")
- if (fs.existsSync(modules)) {
- const entries = fs.readdirSync(modules)
- for (const entry of entries) {
- if (!entry.startsWith(base)) {
- continue
- }
- const candidate = path.join(modules, entry, "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 the "' +
- base +
- '" package',
- )
- process.exit(1)
- }
- run(resolved)
|