@heyamiko/amiko-cli 0.9.0-beta.5 → 0.9.0-beta.6

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/index.js +77 -8
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -19570,6 +19570,71 @@ function detectPackageManager() {
19570
19570
  return "npm";
19571
19571
  }
19572
19572
  }
19573
+ function isPrerelease(v) {
19574
+ return v.includes("-");
19575
+ }
19576
+ function compareSemver(a, b) {
19577
+ const [aMain, aPre] = a.split("-", 2);
19578
+ const [bMain, bPre] = b.split("-", 2);
19579
+ const an = aMain.split(".").map(Number);
19580
+ const bn = bMain.split(".").map(Number);
19581
+ for (let i = 0;i < 3; i++) {
19582
+ if ((an[i] ?? 0) !== (bn[i] ?? 0))
19583
+ return (an[i] ?? 0) > (bn[i] ?? 0) ? 1 : -1;
19584
+ }
19585
+ if (!aPre && !bPre)
19586
+ return 0;
19587
+ if (!aPre)
19588
+ return 1;
19589
+ if (!bPre)
19590
+ return -1;
19591
+ const ap = aPre.split(".");
19592
+ const bp = bPre.split(".");
19593
+ for (let i = 0;i < Math.max(ap.length, bp.length); i++) {
19594
+ const x = ap[i];
19595
+ const y = bp[i];
19596
+ if (x === undefined)
19597
+ return -1;
19598
+ if (y === undefined)
19599
+ return 1;
19600
+ const xn = /^\d+$/.test(x) ? Number(x) : NaN;
19601
+ const yn = /^\d+$/.test(y) ? Number(y) : NaN;
19602
+ if (!isNaN(xn) && !isNaN(yn)) {
19603
+ if (xn !== yn)
19604
+ return xn > yn ? 1 : -1;
19605
+ } else if (!isNaN(xn)) {
19606
+ return -1;
19607
+ } else if (!isNaN(yn)) {
19608
+ return 1;
19609
+ } else if (x !== y) {
19610
+ return x > y ? 1 : -1;
19611
+ }
19612
+ }
19613
+ return 0;
19614
+ }
19615
+ async function fetchDistTags(pkg) {
19616
+ const url2 = `https://registry.npmjs.org/-/package/${encodeURIComponent(pkg)}/dist-tags`;
19617
+ const res = await fetch(url2);
19618
+ if (!res.ok)
19619
+ throw new Error(`registry responded ${res.status}`);
19620
+ return await res.json();
19621
+ }
19622
+ async function resolveTargetVersion(pkg, currentVersion) {
19623
+ if (!isPrerelease(currentVersion)) {
19624
+ return { version: "latest", channel: "latest" };
19625
+ }
19626
+ const tags = await fetchDistTags(pkg);
19627
+ const latest = tags.latest;
19628
+ const beta = tags.beta;
19629
+ if (latest && beta) {
19630
+ return compareSemver(latest, beta) >= 0 ? { version: latest, channel: "latest" } : { version: beta, channel: "beta" };
19631
+ }
19632
+ if (beta)
19633
+ return { version: beta, channel: "beta" };
19634
+ if (latest)
19635
+ return { version: latest, channel: "latest" };
19636
+ return { version: "latest", channel: "latest" };
19637
+ }
19573
19638
  var DATA_CLI = "/data/.amiko-cli";
19574
19639
  var NPM_GLOBAL_CANDIDATES = [
19575
19640
  "/usr/local/lib/node_modules/@heyamiko/amiko-cli",
@@ -19615,17 +19680,21 @@ function registerUpdateCommand(program2) {
19615
19680
  console.log(heading("Update"));
19616
19681
  console.log(label("Current", `v${currentVersion}`));
19617
19682
  console.log(label("Package manager", pm));
19683
+ let target;
19684
+ try {
19685
+ target = await resolveTargetVersion(pkg, currentVersion);
19686
+ } catch {
19687
+ target = { version: "latest", channel: "latest" };
19688
+ }
19689
+ const installSpec = `${pkg}@${target.version}`;
19690
+ console.log(label("Target", target.version === "latest" ? "latest" : `${target.version} (${target.channel})`));
19618
19691
  console.log("");
19619
- const spinner = ora("Installing latest version...").start();
19692
+ const spinner = ora(`Installing ${installSpec}...`).start();
19620
19693
  try {
19621
19694
  if (pm === "bun") {
19622
- execFileSync2("bun", ["install", "-g", `${pkg}@latest`], {
19623
- stdio: "pipe"
19624
- });
19695
+ execFileSync2("bun", ["install", "-g", installSpec], { stdio: "pipe" });
19625
19696
  } else {
19626
- execFileSync2("npm", ["install", "-g", `${pkg}@latest`], {
19627
- stdio: "pipe"
19628
- });
19697
+ execFileSync2("npm", ["install", "-g", installSpec], { stdio: "pipe" });
19629
19698
  }
19630
19699
  spinner.stop();
19631
19700
  let syncedTwin = false;
@@ -19655,7 +19724,7 @@ function registerUpdateCommand(program2) {
19655
19724
  console.error(error("Auto-update failed."));
19656
19725
  console.log("");
19657
19726
  console.log(dim("Try manually:"));
19658
- console.log(dim(` ${pm} install -g ${pkg}@latest`));
19727
+ console.log(dim(` ${pm} install -g ${installSpec}`));
19659
19728
  process.exit(1);
19660
19729
  }
19661
19730
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@heyamiko/amiko-cli",
3
- "version": "0.9.0-beta.5",
3
+ "version": "0.9.0-beta.6",
4
4
  "description": "Amiko CLI — swap tokens, manage credits, bridge cross-chain, and call marketplace agents",
5
5
  "type": "module",
6
6
  "bin": {