@yawlabs/mcp 0.60.1 → 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
@@ -2849,6 +2849,8 @@ function detectInstallMethod(argvPath) {
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
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";
2852
2854
  if (/\/node_modules\/@yawlabs\/mcp\//.test(normalized)) return "local-node-modules";
2853
2855
  if (/\/(yaw-mcp|mcph)\/(dist|src)\//.test(normalized)) return "dev-checkout";
2854
2856
  return "unknown";
@@ -2866,6 +2868,12 @@ function buildUpgradePlan(input) {
2866
2868
  case "global-npm":
2867
2869
  command = "npm install -g @yawlabs/mcp@latest";
2868
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;
2869
2877
  case "npx":
2870
2878
  command = null;
2871
2879
  break;
@@ -2988,9 +2996,9 @@ async function runUpgrade(opts = {}) {
2988
2996
  return { exitCode: 0, lines };
2989
2997
  }
2990
2998
  const installRoot = method === "local-node-modules" ? localInstallRoot(argvPath) : null;
2991
- 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;
2992
3000
  if (!opts.run) {
2993
- if (autoRunnable) {
3001
+ if (runSpec) {
2994
3002
  print("Run `yaw-mcp upgrade --run` to upgrade in place, or run it yourself:");
2995
3003
  } else {
2996
3004
  print("Run it yourself (--run can't safely automate this install method):");
@@ -2999,34 +3007,33 @@ async function runUpgrade(opts = {}) {
2999
3007
  print(` ${plan.command}`);
3000
3008
  return { exitCode: 1, lines };
3001
3009
  }
3002
- if (!autoRunnable) {
3010
+ if (!runSpec) {
3003
3011
  printErr(`yaw-mcp upgrade --run: a "${method}" install can't be upgraded automatically. Run it yourself:`);
3004
3012
  printErr("");
3005
3013
  printErr(` ${plan.command}`);
3006
3014
  return { exitCode: 2, lines };
3007
3015
  }
3008
3016
  const runner = opts.spawnImpl ?? defaultSpawn;
3009
- const npmArgs = method === "global-npm" ? ["install", "-g", "@yawlabs/mcp@latest"] : ["install", "@yawlabs/mcp@latest"];
3010
- if (installRoot) {
3011
- print(`Running in ${installRoot}:`);
3017
+ if (runSpec.cwd) {
3018
+ print(`Running in ${runSpec.cwd}:`);
3012
3019
  } else {
3013
3020
  print("Running:");
3014
3021
  }
3015
3022
  print(` ${plan.command}`);
3016
3023
  print("");
3017
- const code = await runner("npm", npmArgs, installRoot ?? void 0);
3024
+ const code = await runner(runSpec.cmd, runSpec.args, runSpec.cwd);
3018
3025
  if (code === 0) {
3019
3026
  print("");
3020
3027
  print(`\u2713 Upgraded @yawlabs/mcp to ${latest}`);
3021
3028
  return { exitCode: 0, lines };
3022
3029
  }
3023
- 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:`);
3024
3031
  printErr("");
3025
3032
  printErr(` ${plan.command}`);
3026
3033
  return { exitCode: 3, lines };
3027
3034
  }
3028
3035
  function readCurrentVersion() {
3029
- return true ? "0.60.1" : "dev";
3036
+ return true ? "0.60.2" : "dev";
3030
3037
  }
3031
3038
 
3032
3039
  // src/usage-hints.ts
@@ -3088,7 +3095,7 @@ function selectFlakyNamespaces(entries, limit) {
3088
3095
  }
3089
3096
 
3090
3097
  // src/doctor-cmd.ts
3091
- var VERSION = true ? "0.60.1" : "dev";
3098
+ var VERSION = true ? "0.60.2" : "dev";
3092
3099
  async function runDoctor(opts = {}) {
3093
3100
  if (opts.json) return runDoctorJson(opts);
3094
3101
  const lines = [];
@@ -3168,7 +3175,7 @@ async function runDoctor(opts = {}) {
3168
3175
  } else if (method === "npx") {
3169
3176
  print(` Running ${VERSION}; npm latest is ${staleHint}. npx fetches the latest`);
3170
3177
  print(" on each spawn \u2014 restart your MCP client to pick it up.");
3171
- } 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") {
3172
3179
  print(` Running ${VERSION}; npm latest is ${staleHint}. To upgrade in place:`);
3173
3180
  print("");
3174
3181
  print(" yaw-mcp upgrade --run");
@@ -5076,7 +5083,7 @@ function defaultSpawn2(cmd, args) {
5076
5083
  async function maybeAutoUpgrade(deps = {}) {
5077
5084
  const optOut = process.env.YAW_MCP_AUTO_UPGRADE;
5078
5085
  if (optOut === "0" || optOut?.toLowerCase() === "false") return;
5079
- const current = deps.currentVersion ?? (true ? "0.60.1" : "dev");
5086
+ const current = deps.currentVersion ?? (true ? "0.60.2" : "dev");
5080
5087
  if (current === "dev") return;
5081
5088
  const method = detectInstallMethod(deps.argvPath ?? process.argv[1]);
5082
5089
  const latest = await (deps.fetchLatestImpl ?? fetchLatestVersion2)();
@@ -7349,7 +7356,7 @@ function categorizeSpawnError(err) {
7349
7356
  }
7350
7357
  async function connectToUpstream(config, onDisconnect, onListChanged) {
7351
7358
  const client = new Client(
7352
- { name: "yaw-mcp", version: true ? "0.60.1" : "dev" },
7359
+ { name: "yaw-mcp", version: true ? "0.60.2" : "dev" },
7353
7360
  { capabilities: {} }
7354
7361
  );
7355
7362
  let transport;
@@ -7658,7 +7665,7 @@ var ConnectServer = class _ConnectServer {
7658
7665
  this.apiUrl = apiUrl5;
7659
7666
  this.token = token5;
7660
7667
  this.server = new Server(
7661
- { name: "yaw-mcp", version: true ? "0.60.1" : "dev" },
7668
+ { name: "yaw-mcp", version: true ? "0.60.2" : "dev" },
7662
7669
  {
7663
7670
  capabilities: {
7664
7671
  tools: { listChanged: true },
@@ -10629,7 +10636,7 @@ if (subcommand === "compliance") {
10629
10636
  `);
10630
10637
  process.exit(0);
10631
10638
  } else if (subcommand === "--version" || subcommand === "-V") {
10632
- process.stdout.write(`yaw-mcp ${true ? "0.60.1" : "dev"}
10639
+ process.stdout.write(`yaw-mcp ${true ? "0.60.2" : "dev"}
10633
10640
  `);
10634
10641
  process.exit(0);
10635
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.1",
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",