@jentrix/cli 0.5.8 → 0.5.9

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.
Files changed (2) hide show
  1. package/dist/main.js +50 -7
  2. package/package.json +1 -1
package/dist/main.js CHANGED
@@ -20962,7 +20962,7 @@ function refreshAccessToken(input) {
20962
20962
 
20963
20963
  // src/client.ts
20964
20964
  var CLI_NAME = "stacks-cli";
20965
- var CLI_VERSION = "0.5.8";
20965
+ var CLI_VERSION = "0.5.9";
20966
20966
  var DEAD_TOKEN_MESSAGE = "authentication failed (HTTP 401): the token is dead or expired \u2014 mint a new PAT at /account/tokens on your Jentrix server and update STACKS_TOKEN (or --token / the config file).";
20967
20967
  var RELOGIN_MESSAGE = "OAuth session expired and could not be refreshed \u2014 run `jentrix login` to sign in again.";
20968
20968
  function originOf2(url2) {
@@ -27913,18 +27913,39 @@ var NPM_INSTALL_TIMEOUT_MS2 = 3e5;
27913
27913
  var SUPERSEDED = ["@jentrix/stacks-cli", "@jentrix/stacks-runner"];
27914
27914
  var CLI_SPEC = `@jentrix/cli@${CLI_VERSION}`;
27915
27915
  var RUNNER_SPEC2 = `@jentrix/runner@${CLI_VERSION}`;
27916
+ function compareVersions(a, b) {
27917
+ const parts = (v) => {
27918
+ const m = /^(\d+)\.(\d+)\.(\d+)/.exec(v.trim());
27919
+ return m ? [Number(m[1]), Number(m[2]), Number(m[3])] : [0, 0, 0];
27920
+ };
27921
+ const [x, y] = [parts(a), parts(b)];
27922
+ for (let i = 0; i < 3; i++) {
27923
+ if (x[i] !== y[i]) return x[i] - y[i];
27924
+ }
27925
+ return 0;
27926
+ }
27916
27927
  function say(deps2, text = "") {
27917
27928
  deps2.writeOut(text);
27918
27929
  }
27919
27930
  async function installToolchain(deps2) {
27920
27931
  const npm = await deps2.resolveNpm();
27921
27932
  let global = await deps2.globalInstall();
27922
- if (global.cliDir) {
27933
+ const installedVersion = global.cliVersion;
27934
+ const behind = global.cliDir !== null && (installedVersion === null || compareVersions(installedVersion, CLI_VERSION) < 0);
27935
+ const upgradable = behind && !global.runningFromGlobal;
27936
+ if (global.cliDir && !upgradable) {
27923
27937
  say(
27924
27938
  deps2,
27925
- `jentrix ${CLI_VERSION} is already installed (${global.cliDir}).`
27939
+ `jentrix ${installedVersion ?? "(unreadable version)"} is already installed (${global.cliDir}).`
27926
27940
  );
27927
- say(deps2, " Upgrade it any time with: npm update -g @jentrix/cli");
27941
+ if (behind) {
27942
+ say(deps2, ` ${CLI_VERSION} is available \u2014 upgrade with:`);
27943
+ say(deps2, ` npm install -g ${CLI_SPEC} ${RUNNER_SPEC2}`);
27944
+ } else if (installedVersion && compareVersions(installedVersion, CLI_VERSION) > 0) {
27945
+ say(deps2, ` Newer than this ${CLI_VERSION} runner \u2014 left alone.`);
27946
+ } else {
27947
+ say(deps2, " Upgrade it any time with: npm update -g @jentrix/cli");
27948
+ }
27928
27949
  } else {
27929
27950
  if (!npm) {
27930
27951
  deps2.writeErr(
@@ -27933,7 +27954,10 @@ async function installToolchain(deps2) {
27933
27954
  return EXIT_CODES.INVALID_INPUT;
27934
27955
  }
27935
27956
  await deps2.invoke(npm, ["rm", "-g", ...SUPERSEDED], void 0, 6e4);
27936
- say(deps2, `Installing ${CLI_SPEC} + ${RUNNER_SPEC2} (npm -g)\u2026`);
27957
+ say(
27958
+ deps2,
27959
+ upgradable ? `Upgrading jentrix ${installedVersion ?? "?"} \u2192 ${CLI_VERSION} (npm -g)\u2026` : `Installing ${CLI_SPEC} + ${RUNNER_SPEC2} (npm -g)\u2026`
27960
+ );
27937
27961
  const installed = await deps2.invoke(
27938
27962
  npm,
27939
27963
  ["install", "-g", CLI_SPEC, RUNNER_SPEC2],
@@ -27957,7 +27981,10 @@ async function installToolchain(deps2) {
27957
27981
  );
27958
27982
  return EXIT_CODES.INTERNAL;
27959
27983
  }
27960
- say(deps2, "Installed the CLI and the session runner.");
27984
+ say(
27985
+ deps2,
27986
+ upgradable ? `Upgraded to ${global.cliVersion ?? CLI_VERSION}.` : "Installed the CLI and the session runner."
27987
+ );
27961
27988
  }
27962
27989
  if (!global.runnerDir) {
27963
27990
  if (!npm) {
@@ -28876,12 +28903,28 @@ registerSetupCommand(
28876
28903
  const candidate = join6(root, "@jentrix", name);
28877
28904
  return existsSync6(join6(candidate, "package.json")) ? candidate : null;
28878
28905
  };
28906
+ const cliDir = dir("cli");
28907
+ const versionOf = (packageDir) => {
28908
+ if (!packageDir) return null;
28909
+ try {
28910
+ const raw = readFileSync7(join6(packageDir, "package.json"), "utf8");
28911
+ const parsed = JSON.parse(raw);
28912
+ const value = typeof parsed === "object" && parsed !== null ? parsed.version : void 0;
28913
+ return typeof value === "string" ? value : null;
28914
+ } catch {
28915
+ return null;
28916
+ }
28917
+ };
28879
28918
  return {
28880
- cliDir: dir("cli"),
28919
+ cliDir,
28920
+ cliVersion: versionOf(cliDir),
28881
28921
  runnerDir: dir("runner"),
28882
28922
  binDir,
28883
28923
  binDirOnPath: Boolean(
28884
28924
  binDir && (process.env.PATH ?? "").split(delimiter2).some((entry) => entry && resolve4(entry) === resolve4(binDir))
28925
+ ),
28926
+ runningFromGlobal: Boolean(
28927
+ cliDir && resolve4(cliDir) === resolve4(PACKAGE_ROOT)
28885
28928
  )
28886
28929
  };
28887
28930
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jentrix/cli",
3
- "version": "0.5.8",
3
+ "version": "0.5.9",
4
4
  "description": "Command-line client for the Jentrix MCP surface (jentrix tool <name>, generated noun-verb commands).",
5
5
  "keywords": [
6
6
  "jentrix",