@yawlabs/mcp 0.60.0 → 0.60.2

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/CHANGELOG.md CHANGED
@@ -2,6 +2,23 @@
2
2
 
3
3
  All notable changes to `@yawlabs/mcp` (formerly `@yawlabs/mcph`) are documented here. This project uses [semantic versioning](https://semver.org) and a CI-gated release flow: pushing a `vX.Y.Z` tag triggers `.github/workflows/release.yml`, which publishes to npm.
4
4
 
5
+ ## 0.60.2 -- pnpm/bun global stores upgrade with their owning tool
6
+
7
+ - `yaw-mcp upgrade` now detects pnpm global stores (`<pnpm-home>/global/<n>/node_modules/...`) and bun global installs (`~/.bun/install/global/...`) as their own install methods. `--run` spawns `pnpm add -g` / `bun add -g @yawlabs/mcp@latest` instead of misclassifying them as local node_modules trees -- which would have npm-installed a foreign package-lock + node_modules into the tool manager's internal store.
8
+ - `yaw-mcp doctor`'s UPGRADE AVAILABLE hint includes pnpm/bun globals in the "`yaw-mcp upgrade --run` works here" set.
9
+
10
+ ## 0.60.1 -- scoop/custom-prefix npm globals detected correctly
11
+
12
+ - npm prefixes that live in a `bin` directory (scoop's nodejs persist dir, custom prefixes) put globals at `<prefix>/node_modules` with no `npm`/`lib`/`AppData` marker in the path, so they misclassified as `local-node-modules` -- `upgrade --run` then refused (pre-0.60.0) or npm-installed into the node prefix instead of upgrading the global. New `/bin/node_modules/` marker classifies them as `global-npm`.
13
+
14
+ ## 0.60.0 -- nag removed; `upgrade --run` actually upgrades
15
+
16
+ - **The free-tier nag interstitial is gone.** Yaw MCP is free (the Pro tier is retired); `src/nag.ts`, its state file handling, and the dispatch gate were deleted. `YAW_MCP_NO_NAG` no longer has any effect -- there is nothing left to suppress. Remaining Pro references in help text, README, and the package description now read Yaw Team.
17
+ - **`yaw-mcp upgrade --run` upgrades local node_modules installs in place** instead of refusing and printing another command: it derives the package-tree root from the running entrypoint's path and runs `npm install @yawlabs/mcp@latest` there.
18
+ - **New `bundled-app` install method** for the copy that ships inside Yaw Terminal (`app.asar.unpacked`): upgrade/doctor say plainly that it updates with the app instead of suggesting an npm command that can never affect it.
19
+ - **Method-aware `doctor` upgrade hints**: the UPGRADE AVAILABLE section prints the user's terminal action for their install method, never a command that turns around and prints another command.
20
+ - Upgrade/doctor output puts commands on their own line with no trailing punctuation so they copy cleanly.
21
+
5
22
  ## 0.58.0 -- Rename to Yaw MCP + local-first Free mode + Pro nag + sync client
6
23
 
7
24
  ### Secrets sync + spawn-time substitution (Phase 6c)
package/dist/index.js CHANGED
@@ -2848,6 +2848,9 @@ function detectInstallMethod(argvPath) {
2848
2848
  if (/\/npm\/node_modules\/@yawlabs\/mcp\//.test(normalized)) return "global-npm";
2849
2849
  if (/\/lib\/node_modules\/@yawlabs\/mcp\//.test(normalized)) return "global-npm";
2850
2850
  if (/\/AppData\/Roaming\/npm\/node_modules\/@yawlabs\/mcp\//.test(normalized)) return "global-npm";
2851
+ if (/\/bin\/node_modules\/@yawlabs\/mcp\//.test(normalized)) return "global-npm";
2852
+ if (/\/pnpm\/global\/\d+\/node_modules\/@yawlabs\/mcp\//.test(normalized)) return "pnpm-global";
2853
+ if (/\/\.bun\/install\/global\/node_modules\/@yawlabs\/mcp\//.test(normalized)) return "bun-global";
2851
2854
  if (/\/node_modules\/@yawlabs\/mcp\//.test(normalized)) return "local-node-modules";
2852
2855
  if (/\/(yaw-mcp|mcph)\/(dist|src)\//.test(normalized)) return "dev-checkout";
2853
2856
  return "unknown";
@@ -2865,6 +2868,12 @@ function buildUpgradePlan(input) {
2865
2868
  case "global-npm":
2866
2869
  command = "npm install -g @yawlabs/mcp@latest";
2867
2870
  break;
2871
+ case "pnpm-global":
2872
+ command = "pnpm add -g @yawlabs/mcp@latest";
2873
+ break;
2874
+ case "bun-global":
2875
+ command = "bun add -g @yawlabs/mcp@latest";
2876
+ break;
2868
2877
  case "npx":
2869
2878
  command = null;
2870
2879
  break;
@@ -2987,9 +2996,9 @@ async function runUpgrade(opts = {}) {
2987
2996
  return { exitCode: 0, lines };
2988
2997
  }
2989
2998
  const installRoot = method === "local-node-modules" ? localInstallRoot(argvPath) : null;
2990
- const autoRunnable = method === "global-npm" || method === "local-node-modules" && installRoot !== null;
2999
+ const runSpec = method === "global-npm" ? { cmd: "npm", args: ["install", "-g", "@yawlabs/mcp@latest"] } : method === "pnpm-global" ? { cmd: "pnpm", args: ["add", "-g", "@yawlabs/mcp@latest"] } : method === "bun-global" ? { cmd: "bun", args: ["add", "-g", "@yawlabs/mcp@latest"] } : method === "local-node-modules" && installRoot !== null ? { cmd: "npm", args: ["install", "@yawlabs/mcp@latest"], cwd: installRoot } : null;
2991
3000
  if (!opts.run) {
2992
- if (autoRunnable) {
3001
+ if (runSpec) {
2993
3002
  print("Run `yaw-mcp upgrade --run` to upgrade in place, or run it yourself:");
2994
3003
  } else {
2995
3004
  print("Run it yourself (--run can't safely automate this install method):");
@@ -2998,34 +3007,33 @@ async function runUpgrade(opts = {}) {
2998
3007
  print(` ${plan.command}`);
2999
3008
  return { exitCode: 1, lines };
3000
3009
  }
3001
- if (!autoRunnable) {
3010
+ if (!runSpec) {
3002
3011
  printErr(`yaw-mcp upgrade --run: a "${method}" install can't be upgraded automatically. Run it yourself:`);
3003
3012
  printErr("");
3004
3013
  printErr(` ${plan.command}`);
3005
3014
  return { exitCode: 2, lines };
3006
3015
  }
3007
3016
  const runner = opts.spawnImpl ?? defaultSpawn;
3008
- const npmArgs = method === "global-npm" ? ["install", "-g", "@yawlabs/mcp@latest"] : ["install", "@yawlabs/mcp@latest"];
3009
- if (installRoot) {
3010
- print(`Running in ${installRoot}:`);
3017
+ if (runSpec.cwd) {
3018
+ print(`Running in ${runSpec.cwd}:`);
3011
3019
  } else {
3012
3020
  print("Running:");
3013
3021
  }
3014
3022
  print(` ${plan.command}`);
3015
3023
  print("");
3016
- const code = await runner("npm", npmArgs, installRoot ?? void 0);
3024
+ const code = await runner(runSpec.cmd, runSpec.args, runSpec.cwd);
3017
3025
  if (code === 0) {
3018
3026
  print("");
3019
3027
  print(`\u2713 Upgraded @yawlabs/mcp to ${latest}`);
3020
3028
  return { exitCode: 0, lines };
3021
3029
  }
3022
- printErr(`yaw-mcp upgrade: npm exited ${code}. Try running the command yourself:`);
3030
+ printErr(`yaw-mcp upgrade: ${runSpec.cmd} exited ${code}. Try running the command yourself:`);
3023
3031
  printErr("");
3024
3032
  printErr(` ${plan.command}`);
3025
3033
  return { exitCode: 3, lines };
3026
3034
  }
3027
3035
  function readCurrentVersion() {
3028
- return true ? "0.60.0" : "dev";
3036
+ return true ? "0.60.2" : "dev";
3029
3037
  }
3030
3038
 
3031
3039
  // src/usage-hints.ts
@@ -3087,7 +3095,7 @@ function selectFlakyNamespaces(entries, limit) {
3087
3095
  }
3088
3096
 
3089
3097
  // src/doctor-cmd.ts
3090
- var VERSION = true ? "0.60.0" : "dev";
3098
+ var VERSION = true ? "0.60.2" : "dev";
3091
3099
  async function runDoctor(opts = {}) {
3092
3100
  if (opts.json) return runDoctorJson(opts);
3093
3101
  const lines = [];
@@ -3167,7 +3175,7 @@ async function runDoctor(opts = {}) {
3167
3175
  } else if (method === "npx") {
3168
3176
  print(` Running ${VERSION}; npm latest is ${staleHint}. npx fetches the latest`);
3169
3177
  print(" on each spawn \u2014 restart your MCP client to pick it up.");
3170
- } else if (method === "global-npm" || method === "local-node-modules") {
3178
+ } else if (method === "global-npm" || method === "pnpm-global" || method === "bun-global" || method === "local-node-modules") {
3171
3179
  print(` Running ${VERSION}; npm latest is ${staleHint}. To upgrade in place:`);
3172
3180
  print("");
3173
3181
  print(" yaw-mcp upgrade --run");
@@ -5075,7 +5083,7 @@ function defaultSpawn2(cmd, args) {
5075
5083
  async function maybeAutoUpgrade(deps = {}) {
5076
5084
  const optOut = process.env.YAW_MCP_AUTO_UPGRADE;
5077
5085
  if (optOut === "0" || optOut?.toLowerCase() === "false") return;
5078
- const current = deps.currentVersion ?? (true ? "0.60.0" : "dev");
5086
+ const current = deps.currentVersion ?? (true ? "0.60.2" : "dev");
5079
5087
  if (current === "dev") return;
5080
5088
  const method = detectInstallMethod(deps.argvPath ?? process.argv[1]);
5081
5089
  const latest = await (deps.fetchLatestImpl ?? fetchLatestVersion2)();
@@ -7348,7 +7356,7 @@ function categorizeSpawnError(err) {
7348
7356
  }
7349
7357
  async function connectToUpstream(config, onDisconnect, onListChanged) {
7350
7358
  const client = new Client(
7351
- { name: "yaw-mcp", version: true ? "0.60.0" : "dev" },
7359
+ { name: "yaw-mcp", version: true ? "0.60.2" : "dev" },
7352
7360
  { capabilities: {} }
7353
7361
  );
7354
7362
  let transport;
@@ -7657,7 +7665,7 @@ var ConnectServer = class _ConnectServer {
7657
7665
  this.apiUrl = apiUrl5;
7658
7666
  this.token = token5;
7659
7667
  this.server = new Server(
7660
- { name: "yaw-mcp", version: true ? "0.60.0" : "dev" },
7668
+ { name: "yaw-mcp", version: true ? "0.60.2" : "dev" },
7661
7669
  {
7662
7670
  capabilities: {
7663
7671
  tools: { listChanged: true },
@@ -10628,7 +10636,7 @@ if (subcommand === "compliance") {
10628
10636
  `);
10629
10637
  process.exit(0);
10630
10638
  } else if (subcommand === "--version" || subcommand === "-V") {
10631
- process.stdout.write(`yaw-mcp ${true ? "0.60.0" : "dev"}
10639
+ process.stdout.write(`yaw-mcp ${true ? "0.60.2" : "dev"}
10632
10640
  `);
10633
10641
  process.exit(0);
10634
10642
  } else if (subcommand && !subcommand.startsWith("-")) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yawlabs/mcp",
3
- "version": "0.60.0",
3
+ "version": "0.60.2",
4
4
  "mcpName": "io.github.YawLabs/mcp",
5
5
  "description": "Yaw MCP -- MCP servers, managed. Free to run locally; Yaw Team adds cross-machine sync.",
6
6
  "license": "UNLICENSED",