@llmist/cli 9.5.3 → 9.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.js CHANGED
@@ -79,7 +79,7 @@ import { Command, InvalidArgumentError as InvalidArgumentError2 } from "commande
79
79
  // package.json
80
80
  var package_default = {
81
81
  name: "@llmist/cli",
82
- version: "9.5.3",
82
+ version: "9.6.0",
83
83
  description: "CLI for llmist - run LLM agents from the command line",
84
84
  type: "module",
85
85
  main: "dist/cli.js",
@@ -916,20 +916,14 @@ import fs5 from "fs";
916
916
  import path4 from "path";
917
917
  import os from "os";
918
918
  import { pathToFileURL } from "url";
919
- function detectPackageManager() {
919
+ function isCommandAvailable(cmd) {
920
920
  try {
921
- execSync("bun --version", { stdio: "pipe" });
922
- return "bun";
921
+ const checkCmd = process.platform === "win32" ? "where" : "which";
922
+ execSync(`${checkCmd} ${cmd}`, { stdio: "pipe" });
923
+ return true;
923
924
  } catch {
924
- return "npm";
925
- }
926
- }
927
- var cachedPackageManager = null;
928
- function getPackageManager() {
929
- if (!cachedPackageManager) {
930
- cachedPackageManager = detectPackageManager();
925
+ return false;
931
926
  }
932
- return cachedPackageManager;
933
927
  }
934
928
  var CACHE_DIR = path4.join(os.homedir(), ".llmist", "gadget-cache");
935
929
  function isExternalPackageSpecifier(specifier) {
@@ -1052,16 +1046,36 @@ async function installNpmPackage(spec, cacheDir) {
1052
1046
  };
1053
1047
  fs5.writeFileSync(path4.join(cacheDir, "package.json"), JSON.stringify(packageJson, null, 2));
1054
1048
  const packageSpec = spec.version ? `${spec.package}@${spec.version}` : spec.package;
1055
- const installCmd = `npm install "${packageSpec}"`;
1056
- try {
1057
- execSync(installCmd, {
1058
- stdio: "inherit",
1059
- cwd: cacheDir
1060
- });
1061
- } catch (error) {
1062
- const message = error instanceof Error ? error.message : String(error);
1063
- throw new Error(`Failed to install npm package '${packageSpec}': ${message}`);
1049
+ if (isCommandAvailable("npm")) {
1050
+ const installCmd = `npm install --foreground-scripts "${packageSpec}"`;
1051
+ try {
1052
+ execSync(installCmd, { stdio: "inherit", cwd: cacheDir });
1053
+ return;
1054
+ } catch (error) {
1055
+ const message = error instanceof Error ? error.message : String(error);
1056
+ throw new Error(`Failed to install npm package '${packageSpec}': ${message}`);
1057
+ }
1064
1058
  }
1059
+ if (isCommandAvailable("bun")) {
1060
+ console.warn(
1061
+ "\u26A0\uFE0F npm not found, using bun. Postinstall scripts for subdependencies may not run.\n For best results, install npm: https://nodejs.org/"
1062
+ );
1063
+ const installCmd = `bun add --trust "${packageSpec}"`;
1064
+ try {
1065
+ execSync(installCmd, { stdio: "inherit", cwd: cacheDir });
1066
+ return;
1067
+ } catch (error) {
1068
+ const message = error instanceof Error ? error.message : String(error);
1069
+ throw new Error(`Failed to install package '${packageSpec}' with bun: ${message}`);
1070
+ }
1071
+ }
1072
+ throw new Error(
1073
+ `No package manager available to install '${packageSpec}'.
1074
+ Please install npm (recommended) or bun:
1075
+ - npm: https://nodejs.org/
1076
+ - bun: https://bun.sh/
1077
+ npm is preferred because it runs all postinstall scripts reliably.`
1078
+ );
1065
1079
  }
1066
1080
  async function installGitPackage(spec, cacheDir) {
1067
1081
  fs5.mkdirSync(path4.dirname(cacheDir), { recursive: true });
@@ -1084,14 +1098,25 @@ async function installGitPackage(spec, cacheDir) {
1084
1098
  throw new Error(`Failed to clone git repository '${spec.package}': ${message}`);
1085
1099
  }
1086
1100
  if (fs5.existsSync(path4.join(cacheDir, "package.json"))) {
1087
- const pm = getPackageManager();
1088
- const installCmd = pm === "bun" ? "bun install" : "npm install";
1089
- const runCmd = pm === "bun" ? "bun run" : "npm run";
1101
+ const hasNpm = isCommandAvailable("npm");
1102
+ const hasBun = isCommandAvailable("bun");
1103
+ if (!hasNpm && !hasBun) {
1104
+ throw new Error(
1105
+ `No package manager available to install dependencies for '${spec.package}'.
1106
+ Please install npm or bun:
1107
+ - npm: https://nodejs.org/
1108
+ - bun: https://bun.sh/`
1109
+ );
1110
+ }
1111
+ const useBun = hasBun;
1112
+ const installCmd = useBun ? "bun install" : "npm install --foreground-scripts";
1113
+ const runCmd = useBun ? "bun run" : "npm run";
1114
+ const pmName = useBun ? "bun" : "npm";
1090
1115
  try {
1091
1116
  execSync(installCmd, { cwd: cacheDir, stdio: "inherit" });
1092
1117
  } catch (error) {
1093
1118
  const message = error instanceof Error ? error.message : String(error);
1094
- throw new Error(`Failed to install dependencies for '${spec.package}' using ${pm}: ${message}`);
1119
+ throw new Error(`Failed to install dependencies for '${spec.package}' using ${pmName}: ${message}`);
1095
1120
  }
1096
1121
  const packageJson = JSON.parse(fs5.readFileSync(path4.join(cacheDir, "package.json"), "utf-8"));
1097
1122
  if (packageJson.scripts?.build) {