@buoy-gg/mcp 7.0.32 → 7.0.33

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.
@@ -226,6 +226,7 @@ var SyncClient = class {
226
226
  isConnected: d.isConnected !== false,
227
227
  isPro: d.isPro === true,
228
228
  tier: d.tier ?? (d.isPro === true ? "pro" : "anonymous"),
229
+ collision: d.collision === true,
229
230
  tools: caps?.tools ?? []
230
231
  };
231
232
  });
@@ -613,7 +614,7 @@ async function waitForBroker(url, attempts = 20) {
613
614
  var delay = (ms) => new Promise((r) => setTimeout(r, ms));
614
615
 
615
616
  // src/version.ts
616
- var VERSION = "7.0.32" ? "7.0.32" : "0.0.0-dev";
617
+ var VERSION = "7.0.33" ? "7.0.33" : "0.0.0-dev";
617
618
  var PACKAGE_NAME = "@buoy-gg/mcp";
618
619
 
619
620
  // src/update/checkForUpdate.ts
@@ -711,8 +712,12 @@ function registerGenericTools(server, sync) {
711
712
  const connected = devices.filter((d) => d.isConnected);
712
713
  const anyPro = connected.some((d) => d.isPro);
713
714
  const anySignedIn = connected.some((d) => d.tier !== "anonymous");
715
+ const collided = connected.filter((d) => d.collision);
714
716
  return json({
715
717
  devices,
718
+ ...collided.length > 0 ? {
719
+ warning: `${collided.map((d) => `"${d.deviceId}"`).join(", ")}: more than one app is registered under this id, so actions sent to it land on an arbitrary device. Give each device its own externalSync.deviceId (or leave it unset for a per-install default) before mutating anything.`
720
+ } : {},
716
721
  ...anyPro ? {} : {
717
722
  // A headless build has no on-device UI, so "upgrade in the app"
718
723
  // cannot be followed there — name the `licenseKey` prop too.
package/dist/cli.js CHANGED
@@ -252,6 +252,7 @@ var SyncClient = class {
252
252
  isConnected: d.isConnected !== false,
253
253
  isPro: d.isPro === true,
254
254
  tier: d.tier ?? (d.isPro === true ? "pro" : "anonymous"),
255
+ collision: d.collision === true,
255
256
  tools: caps?.tools ?? []
256
257
  };
257
258
  });
@@ -651,7 +652,7 @@ var import_node_os = __toESM(require("os"));
651
652
  var import_node_path = __toESM(require("path"));
652
653
 
653
654
  // src/version.ts
654
- var VERSION = "7.0.32" ? "7.0.32" : "0.0.0-dev";
655
+ var VERSION = "7.0.33" ? "7.0.33" : "0.0.0-dev";
655
656
  var PACKAGE_NAME = "@buoy-gg/mcp";
656
657
 
657
658
  // src/update/checkForUpdate.ts
@@ -745,8 +746,12 @@ function registerGenericTools(server, sync) {
745
746
  const connected = devices.filter((d) => d.isConnected);
746
747
  const anyPro = connected.some((d) => d.isPro);
747
748
  const anySignedIn = connected.some((d) => d.tier !== "anonymous");
749
+ const collided = connected.filter((d) => d.collision);
748
750
  return json({
749
751
  devices,
752
+ ...collided.length > 0 ? {
753
+ warning: `${collided.map((d) => `"${d.deviceId}"`).join(", ")}: more than one app is registered under this id, so actions sent to it land on an arbitrary device. Give each device its own externalSync.deviceId (or leave it unset for a per-install default) before mutating anything.`
754
+ } : {},
750
755
  ...anyPro ? {} : {
751
756
  // A headless build has no on-device UI, so "upgrade in the app"
752
757
  // cannot be followed there — name the `licenseKey` prop too.
package/dist/cli.mjs CHANGED
@@ -3,7 +3,7 @@ import {
3
3
  SyncClient,
4
4
  createMcpServer,
5
5
  runInit
6
- } from "./chunk-HWYVQNMR.mjs";
6
+ } from "./chunk-6HRZM4CM.mjs";
7
7
 
8
8
  // src/cli.ts
9
9
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
package/dist/index.d.mts CHANGED
@@ -32,6 +32,13 @@ interface DeviceInfo {
32
32
  * the free tier" and "no account at all" are different problems.
33
33
  */
34
34
  tier: "anonymous" | "free" | "pro";
35
+ /**
36
+ * More than one app is registered under this id right now (a pinned
37
+ * `externalSync.deviceId` copied onto two devices). Actions sent to it
38
+ * land on an arbitrary one. Broker-computed; false for apps too old to
39
+ * announce a runtime instance id.
40
+ */
41
+ collision: boolean;
35
42
  tools: ToolCapability[];
36
43
  }
37
44
  /** How the client obtained its broker connection. */
package/dist/index.d.ts CHANGED
@@ -32,6 +32,13 @@ interface DeviceInfo {
32
32
  * the free tier" and "no account at all" are different problems.
33
33
  */
34
34
  tier: "anonymous" | "free" | "pro";
35
+ /**
36
+ * More than one app is registered under this id right now (a pinned
37
+ * `externalSync.deviceId` copied onto two devices). Actions sent to it
38
+ * land on an arbitrary one. Broker-computed; false for apps too old to
39
+ * announce a runtime instance id.
40
+ */
41
+ collision: boolean;
35
42
  tools: ToolCapability[];
36
43
  }
37
44
  /** How the client obtained its broker connection. */
package/dist/index.js CHANGED
@@ -287,6 +287,7 @@ var SyncClient = class {
287
287
  isConnected: d.isConnected !== false,
288
288
  isPro: d.isPro === true,
289
289
  tier: d.tier ?? (d.isPro === true ? "pro" : "anonymous"),
290
+ collision: d.collision === true,
290
291
  tools: caps?.tools ?? []
291
292
  };
292
293
  });
@@ -686,7 +687,7 @@ var import_node_os = __toESM(require("os"));
686
687
  var import_node_path = __toESM(require("path"));
687
688
 
688
689
  // src/version.ts
689
- var VERSION = "7.0.32" ? "7.0.32" : "0.0.0-dev";
690
+ var VERSION = "7.0.33" ? "7.0.33" : "0.0.0-dev";
690
691
  var PACKAGE_NAME = "@buoy-gg/mcp";
691
692
 
692
693
  // src/update/checkForUpdate.ts
@@ -780,8 +781,12 @@ function registerGenericTools(server, sync) {
780
781
  const connected = devices.filter((d) => d.isConnected);
781
782
  const anyPro = connected.some((d) => d.isPro);
782
783
  const anySignedIn = connected.some((d) => d.tier !== "anonymous");
784
+ const collided = connected.filter((d) => d.collision);
783
785
  return json({
784
786
  devices,
787
+ ...collided.length > 0 ? {
788
+ warning: `${collided.map((d) => `"${d.deviceId}"`).join(", ")}: more than one app is registered under this id, so actions sent to it land on an arbitrary device. Give each device its own externalSync.deviceId (or leave it unset for a per-install default) before mutating anything.`
789
+ } : {},
785
790
  ...anyPro ? {} : {
786
791
  // A headless build has no on-device UI, so "upgrade in the app"
787
792
  // cannot be followed there — name the `licenseKey` prop too.
package/dist/index.mjs CHANGED
@@ -27,7 +27,7 @@ import {
27
27
  registerStorageTools,
28
28
  registerZustandTools,
29
29
  runInit
30
- } from "./chunk-HWYVQNMR.mjs";
30
+ } from "./chunk-6HRZM4CM.mjs";
31
31
  export {
32
32
  ALL_DEVICES,
33
33
  BROKER_PORT,
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@buoy-gg/mcp",
3
3
  "mcpName": "io.github.buoy-gg/mcp",
4
- "version": "7.0.32",
4
+ "version": "7.0.33",
5
5
  "description": "MCP server for Buoy devtools — lets any LLM copilot drive Buoy tools (perf-monitor benchmarks, etc.) over the devtool sync protocol",
6
6
  "main": "dist/index.js",
7
7
  "module": "dist/index.mjs",
@@ -32,7 +32,7 @@
32
32
  "socket.io-client": "^4.8.1",
33
33
  "zod": "^3.25.0",
34
34
  "ws": "^8.18.0",
35
- "@buoy-gg/sync-broker": "^7.0.32"
35
+ "@buoy-gg/sync-broker": "^7.0.33"
36
36
  },
37
37
  "devDependencies": {
38
38
  "@types/node": "^22.0.0",