// @bun
import {
  gracefulShutdown,
  init_gracefulShutdown
} from "./chunk-421yegj3.js";
import"./chunk-aaxz8a5g.js";
import"./chunk-2kcgxnvp.js";
import"./chunk-14p6wvsq.js";
import"./chunk-6s0q1s5r.js";
import"./chunk-0cpg8qh8.js";
import"./chunk-9phn5khx.js";
import"./chunk-vk9xcryd.js";
import"./chunk-9a9g5hbj.js";
import"./chunk-ptxteaeh.js";
import"./chunk-7fcmqvbz.js";
import"./chunk-rgyzsbs3.js";
import"./chunk-q3b4n194.js";
import"./chunk-zaqfb3tz.js";
import"./chunk-6hzx0kqr.js";
import"./chunk-71sdcaq6.js";
import"./chunk-9hn8e6h1.js";
import"./chunk-dxa3y9vh.js";
import"./chunk-gjvhjywj.js";
import"./chunk-1w20m7gw.js";
import"./chunk-3gam18xn.js";
import"./chunk-rpmntgyh.js";
import"./chunk-24kv69g3.js";
import"./chunk-tzcrwnrf.js";
import"./chunk-k7xszak2.js";
import"./chunk-ztmb7geg.js";
import"./chunk-tbdkekz3.js";
import"./chunk-65zbgg1n.js";
import"./chunk-4spgkgr3.js";
import"./chunk-60fkafk2.js";
import"./chunk-h5zz0vxy.js";
import"./chunk-6hygvrhn.js";
import"./chunk-7tfdhkpy.js";
import"./chunk-8gv2pjby.js";
import"./chunk-pn23dh3d.js";
import"./chunk-rpdh02rm.js";
import"./chunk-j1wktfe2.js";
import"./chunk-fjtzfz1t.js";
import"./chunk-6hr7742d.js";
import"./chunk-xyg1sk2w.js";
import"./chunk-935nrvdb.js";
import"./chunk-8zz4z1q3.js";
import"./chunk-hem4f4gz.js";
import"./chunk-hqxp6b72.js";
import"./chunk-ccw8pse0.js";
import"./chunk-wsnxtggw.js";
import"./chunk-k8nwt8yq.js";
import"./chunk-vxbjzggp.js";
import"./chunk-d6h68rz1.js";
import"./chunk-8yvsnrkr.js";
import"./chunk-5mmhfbxb.js";
import"./chunk-s2t5anwv.js";
import"./chunk-ga1jkyqy.js";
import"./chunk-9hbhydvp.js";
import"./chunk-ck9r8hpf.js";
import"./chunk-k7hexw3v.js";
import"./chunk-trqrj23e.js";
import"./chunk-za3k6h2h.js";
import"./chunk-8kf8h7xf.js";
import"./chunk-bgan4cpf.js";
import"./chunk-jmv7k0jn.js";
import"./chunk-hjxqmtg5.js";
import"./chunk-bzyzrq0k.js";
import"./chunk-vwenx8ke.js";
import"./chunk-q2h79ncs.js";
import"./chunk-v4ypszbb.js";
import"./chunk-qfsn720k.js";
import"./chunk-7qx3xhv3.js";
import"./chunk-j9475b46.js";
import"./chunk-fdwabr8p.js";
import"./chunk-e4dsy4g1.js";
import"./chunk-326zehp8.js";
import"./chunk-kc67kt75.js";
import"./chunk-40t1d75v.js";
import"./chunk-dbts5q5p.js";
import"./chunk-e3abfxpy.js";
import"./chunk-q44zc68f.js";
import"./chunk-fejeqe61.js";
import"./chunk-q1vrhh0q.js";
import"./chunk-hn4w9pkj.js";
import {
  init_source,
  source_default
} from "./chunk-2g0ytd9d.js";
import"./chunk-de0qnnf7.js";
import"./chunk-j1mep9ck.js";
import"./chunk-6x35ffpx.js";
import"./chunk-1zbwhcbt.js";
import"./chunk-92bjkrf2.js";
import"./chunk-10k5jfc5.js";
import"./chunk-n9g24mwe.js";
import"./chunk-e3j7m7k2.js";
import {
  execFileNoThrowWithCwd,
  init_execFileNoThrow
} from "./chunk-hzmzwte2.js";
import"./chunk-pdvg91cg.js";
import"./chunk-c696122m.js";
import"./chunk-xbj5keyy.js";
import"./chunk-c1yc761e.js";
import"./chunk-c5g9shkw.js";
import"./chunk-aeysytks.js";
import {
  init_debug,
  logForDebugging
} from "./chunk-s3hafnk3.js";
import {
  init_process,
  writeToStdout
} from "./chunk-kb3758f7.js";
import"./chunk-9h9k5vz3.js";
import"./chunk-xmpgmeb8.js";
import"./chunk-2kz09j2s.js";
import"./chunk-c0k7b0jw.js";
import"./chunk-pecy49yr.js";
import"./chunk-azbab59e.js";
import"./chunk-3nk9q8dr.js";
import"./chunk-hhsxm2yr.js";

// src/cli/updateCCB.ts
init_source();
init_debug();
init_execFileNoThrow();
init_gracefulShutdown();
init_process();
import { execSync } from "child_process";
import { existsSync, readFileSync } from "fs";
import { homedir } from "os";
import { join, dirname } from "path";
import { fileURLToPath } from "url";
var PACKAGE_NAME = "claude-code-best";
function getCurrentVersion() {
  try {
    const __dirname2 = dirname(fileURLToPath(import.meta.url));
    const pkgPath = join(__dirname2, "..", "..", "package.json");
    if (existsSync(pkgPath)) {
      const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
      if (pkg.version)
        return pkg.version;
    }
  } catch {}
  return "1.0.4";
}
function isCommandAvailable(cmd) {
  try {
    execSync(`which ${cmd} 2>/dev/null`, { stdio: "pipe" });
    return true;
  } catch {
    return false;
  }
}
function isBunInstallation() {
  const execPath = process.execPath;
  if (execPath.includes("bun")) {
    return true;
  }
  const bunGlobalDir = join(homedir(), ".bun", "install", "global");
  if (existsSync(join(bunGlobalDir, "node_modules", PACKAGE_NAME))) {
    return true;
  }
  return false;
}
async function getLatestVersion() {
  const result = await execFileNoThrowWithCwd("npm", ["view", `${PACKAGE_NAME}@latest`, "version", "--prefer-online"], { abortSignal: AbortSignal.timeout(1e4), cwd: homedir() });
  if (result.code !== 0) {
    logForDebugging(`npm view failed: ${result.stderr}`);
    return null;
  }
  return result.stdout.trim();
}
function gte(a, b) {
  const parseVer = (v) => v.replace(/^\D/, "").split(".").map(Number);
  const pa = parseVer(a);
  const pb = parseVer(b);
  for (let i = 0;i < 3; i++) {
    if ((pa[i] ?? 0) > (pb[i] ?? 0))
      return true;
    if ((pa[i] ?? 0) < (pb[i] ?? 0))
      return false;
  }
  return true;
}
async function updateCCB() {
  const currentVersion = getCurrentVersion();
  writeToStdout(`Current version: ${currentVersion}
`);
  const hasBun = isCommandAvailable("bun");
  const useBun = isBunInstallation();
  const pkgManager = useBun && hasBun ? "bun" : "npm";
  writeToStdout(`Package manager: ${pkgManager}
`);
  writeToStdout(`Checking for updates...
`);
  const latestVersion = await getLatestVersion();
  if (!latestVersion) {
    process.stderr.write(source_default.red("Failed to check for updates") + `
`);
    process.stderr.write(`Unable to fetch latest version from npm registry.
`);
    await gracefulShutdown(1);
    return;
  }
  if (latestVersion === currentVersion || gte(currentVersion, latestVersion)) {
    writeToStdout(source_default.green(`ccb is up to date (${currentVersion})`) + `
`);
    await gracefulShutdown(0);
    return;
  }
  writeToStdout(`New version available: ${latestVersion} (current: ${currentVersion})
`);
  writeToStdout(`Installing update via ${pkgManager}...
`);
  try {
    if (pkgManager === "bun") {
      execSync(`bun update -g ${PACKAGE_NAME}`, {
        stdio: "inherit",
        cwd: homedir(),
        timeout: 120000
      });
    } else {
      execSync(`npm install -g ${PACKAGE_NAME}@latest`, {
        stdio: "inherit",
        cwd: homedir(),
        timeout: 120000
      });
    }
    writeToStdout(source_default.green(`Successfully updated from ${currentVersion} to ${latestVersion}`) + `
`);
  } catch (error) {
    process.stderr.write(source_default.red("Update failed") + `
`);
    process.stderr.write(`${error}
`);
    process.stderr.write(`
`);
    process.stderr.write(`Try manually updating with:
`);
    if (pkgManager === "bun") {
      process.stderr.write(source_default.bold(`  bun update -g ${PACKAGE_NAME}`) + `
`);
    } else {
      process.stderr.write(source_default.bold(`  npm install -g ${PACKAGE_NAME}@latest`) + `
`);
    }
    await gracefulShutdown(1);
  }
  await gracefulShutdown(0);
}
export {
  updateCCB
};
