@buoy-gg/mcp 7.0.5 → 7.0.7

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.
@@ -296,7 +296,7 @@ async function waitForBroker(url, attempts = 20) {
296
296
  var delay = (ms) => new Promise((r) => setTimeout(r, ms));
297
297
 
298
298
  // src/version.ts
299
- var VERSION = "7.0.5" ? "7.0.5" : "0.0.0-dev";
299
+ var VERSION = "7.0.7" ? "7.0.7" : "0.0.0-dev";
300
300
  var PACKAGE_NAME = "@buoy-gg/mcp";
301
301
 
302
302
  // src/update/checkForUpdate.ts
@@ -1503,7 +1503,18 @@ var REDUX_TOOL_ID = "redux";
1503
1503
  var text6 = (s) => ({ content: [{ type: "text", text: s }] });
1504
1504
  var fail7 = (message) => ({ isError: true, content: [{ type: "text", text: message }] });
1505
1505
  var errMsg7 = (e) => e instanceof Error ? e.message : String(e);
1506
- var NO_STORE = "No instrumented Redux store found. Open the app with Buoy redux devtools active (auto-instrumentation), then retry.";
1506
+ function noStoreMessage(reason) {
1507
+ switch (reason) {
1508
+ case "no-react-redux":
1509
+ return "react-redux is not installed in the app \u2014 the Redux tool requires it (npm install react-redux).";
1510
+ case "no-provider":
1511
+ return "No Redux Provider above <FloatingDevTools />. Move <FloatingDevTools /> inside your <Provider store={store}> and retry.";
1512
+ case "not-instrumented":
1513
+ default:
1514
+ return "Redux store not instrumented yet. On current Buoy versions the store binds automatically at app startup \u2014 this usually means the app is running an older @buoy-gg/core (upgrade it), or the Redux tool hasn't been opened once (older versions only). Apps can also bind explicitly with registerReduxStore(store) from @buoy-gg/redux.";
1515
+ }
1516
+ }
1517
+ var TOP_LEVEL_ONLY_NOTE = "\n\n_Note: capture is top-level-only on this device (thunk-internal / RTK Query actions aren't recorded). Put `import '@buoy-gg/redux';` first in the app entry, or add `buoyReduxMiddleware`, for full capture._";
1507
1518
  function registerReduxTools(server, sync) {
1508
1519
  server.registerTool(
1509
1520
  "get_redux_state",
@@ -1528,19 +1539,22 @@ function registerReduxTools(server, sync) {
1528
1539
  "No redux result from the device. The redux tool may be inactive, or the app needs a newer Buoy (get_redux_state requires the getState action)."
1529
1540
  );
1530
1541
  }
1531
- if (!res.available) return text6(NO_STORE);
1542
+ if (!res.available) return fail7(noStoreMessage(res.reason));
1532
1543
  const slices = res.slices.length ? res.slices.join(", ") : "(none)";
1544
+ const captureNote = res.capture === "top-level-only" ? TOP_LEVEL_ONLY_NOTE : "";
1533
1545
  if (args.includeValues) {
1534
- return text6(`**Redux store \u2014 slices: ${slices}**
1546
+ return text6(
1547
+ `**Redux store \u2014 slices: ${slices}**
1535
1548
 
1536
1549
  \`\`\`json
1537
1550
  ${JSON.stringify(res.state, null, 2)}
1538
- \`\`\``);
1551
+ \`\`\`${captureNote}`
1552
+ );
1539
1553
  }
1540
1554
  return text6(
1541
1555
  `**Redux store \u2014 slices: ${slices}**
1542
1556
 
1543
- _Compact view. Pass includeValues:true for the full state tree. Dispatch with redux_dispatch({type, payload})._`
1557
+ _Compact view. Pass includeValues:true for the full state tree. Dispatch with redux_dispatch({type, payload})._${captureNote}`
1544
1558
  );
1545
1559
  } catch (e) {
1546
1560
  return fail7(errMsg7(e));
@@ -1563,7 +1577,7 @@ _Compact view. Pass includeValues:true for the full state tree. Dispatch with re
1563
1577
  const action = { type: args.type };
1564
1578
  if (args.payload !== void 0) action.payload = args.payload;
1565
1579
  const res = await sync.callAction(REDUX_TOOL_ID, "dispatch", { action }, target);
1566
- if (!res || !res.dispatched) return fail7(NO_STORE);
1580
+ if (!res || !res.dispatched) return fail7(noStoreMessage(res?.reason));
1567
1581
  return text6(`Dispatched \`${args.type}\`${args.payload !== void 0 ? ` with payload ${JSON.stringify(args.payload)}` : ""}.`);
1568
1582
  } catch (e) {
1569
1583
  return fail7(errMsg7(e));
package/dist/cli.js CHANGED
@@ -336,7 +336,7 @@ var import_node_os = __toESM(require("os"));
336
336
  var import_node_path = __toESM(require("path"));
337
337
 
338
338
  // src/version.ts
339
- var VERSION = "7.0.5" ? "7.0.5" : "0.0.0-dev";
339
+ var VERSION = "7.0.7" ? "7.0.7" : "0.0.0-dev";
340
340
  var PACKAGE_NAME = "@buoy-gg/mcp";
341
341
 
342
342
  // src/update/checkForUpdate.ts
@@ -1760,7 +1760,18 @@ var REDUX_TOOL_ID = "redux";
1760
1760
  var text7 = (s) => ({ content: [{ type: "text", text: s }] });
1761
1761
  var fail8 = (message) => ({ isError: true, content: [{ type: "text", text: message }] });
1762
1762
  var errMsg8 = (e) => e instanceof Error ? e.message : String(e);
1763
- var NO_STORE = "No instrumented Redux store found. Open the app with Buoy redux devtools active (auto-instrumentation), then retry.";
1763
+ function noStoreMessage(reason) {
1764
+ switch (reason) {
1765
+ case "no-react-redux":
1766
+ return "react-redux is not installed in the app \u2014 the Redux tool requires it (npm install react-redux).";
1767
+ case "no-provider":
1768
+ return "No Redux Provider above <FloatingDevTools />. Move <FloatingDevTools /> inside your <Provider store={store}> and retry.";
1769
+ case "not-instrumented":
1770
+ default:
1771
+ return "Redux store not instrumented yet. On current Buoy versions the store binds automatically at app startup \u2014 this usually means the app is running an older @buoy-gg/core (upgrade it), or the Redux tool hasn't been opened once (older versions only). Apps can also bind explicitly with registerReduxStore(store) from @buoy-gg/redux.";
1772
+ }
1773
+ }
1774
+ var TOP_LEVEL_ONLY_NOTE = "\n\n_Note: capture is top-level-only on this device (thunk-internal / RTK Query actions aren't recorded). Put `import '@buoy-gg/redux';` first in the app entry, or add `buoyReduxMiddleware`, for full capture._";
1764
1775
  function registerReduxTools(server, sync) {
1765
1776
  server.registerTool(
1766
1777
  "get_redux_state",
@@ -1785,19 +1796,22 @@ function registerReduxTools(server, sync) {
1785
1796
  "No redux result from the device. The redux tool may be inactive, or the app needs a newer Buoy (get_redux_state requires the getState action)."
1786
1797
  );
1787
1798
  }
1788
- if (!res.available) return text7(NO_STORE);
1799
+ if (!res.available) return fail8(noStoreMessage(res.reason));
1789
1800
  const slices = res.slices.length ? res.slices.join(", ") : "(none)";
1801
+ const captureNote = res.capture === "top-level-only" ? TOP_LEVEL_ONLY_NOTE : "";
1790
1802
  if (args.includeValues) {
1791
- return text7(`**Redux store \u2014 slices: ${slices}**
1803
+ return text7(
1804
+ `**Redux store \u2014 slices: ${slices}**
1792
1805
 
1793
1806
  \`\`\`json
1794
1807
  ${JSON.stringify(res.state, null, 2)}
1795
- \`\`\``);
1808
+ \`\`\`${captureNote}`
1809
+ );
1796
1810
  }
1797
1811
  return text7(
1798
1812
  `**Redux store \u2014 slices: ${slices}**
1799
1813
 
1800
- _Compact view. Pass includeValues:true for the full state tree. Dispatch with redux_dispatch({type, payload})._`
1814
+ _Compact view. Pass includeValues:true for the full state tree. Dispatch with redux_dispatch({type, payload})._${captureNote}`
1801
1815
  );
1802
1816
  } catch (e) {
1803
1817
  return fail8(errMsg8(e));
@@ -1820,7 +1834,7 @@ _Compact view. Pass includeValues:true for the full state tree. Dispatch with re
1820
1834
  const action = { type: args.type };
1821
1835
  if (args.payload !== void 0) action.payload = args.payload;
1822
1836
  const res = await sync.callAction(REDUX_TOOL_ID, "dispatch", { action }, target);
1823
- if (!res || !res.dispatched) return fail8(NO_STORE);
1837
+ if (!res || !res.dispatched) return fail8(noStoreMessage(res?.reason));
1824
1838
  return text7(`Dispatched \`${args.type}\`${args.payload !== void 0 ? ` with payload ${JSON.stringify(args.payload)}` : ""}.`);
1825
1839
  } catch (e) {
1826
1840
  return fail8(errMsg8(e));
package/dist/cli.mjs CHANGED
@@ -3,7 +3,7 @@ import {
3
3
  SyncClient,
4
4
  createMcpServer,
5
5
  runInit
6
- } from "./chunk-KZFJFXI4.mjs";
6
+ } from "./chunk-OJHJ2CKB.mjs";
7
7
 
8
8
  // src/cli.ts
9
9
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
package/dist/index.js CHANGED
@@ -371,7 +371,7 @@ var import_node_os = __toESM(require("os"));
371
371
  var import_node_path = __toESM(require("path"));
372
372
 
373
373
  // src/version.ts
374
- var VERSION = "7.0.5" ? "7.0.5" : "0.0.0-dev";
374
+ var VERSION = "7.0.7" ? "7.0.7" : "0.0.0-dev";
375
375
  var PACKAGE_NAME = "@buoy-gg/mcp";
376
376
 
377
377
  // src/update/checkForUpdate.ts
@@ -1795,7 +1795,18 @@ var REDUX_TOOL_ID = "redux";
1795
1795
  var text7 = (s) => ({ content: [{ type: "text", text: s }] });
1796
1796
  var fail8 = (message) => ({ isError: true, content: [{ type: "text", text: message }] });
1797
1797
  var errMsg8 = (e) => e instanceof Error ? e.message : String(e);
1798
- var NO_STORE = "No instrumented Redux store found. Open the app with Buoy redux devtools active (auto-instrumentation), then retry.";
1798
+ function noStoreMessage(reason) {
1799
+ switch (reason) {
1800
+ case "no-react-redux":
1801
+ return "react-redux is not installed in the app \u2014 the Redux tool requires it (npm install react-redux).";
1802
+ case "no-provider":
1803
+ return "No Redux Provider above <FloatingDevTools />. Move <FloatingDevTools /> inside your <Provider store={store}> and retry.";
1804
+ case "not-instrumented":
1805
+ default:
1806
+ return "Redux store not instrumented yet. On current Buoy versions the store binds automatically at app startup \u2014 this usually means the app is running an older @buoy-gg/core (upgrade it), or the Redux tool hasn't been opened once (older versions only). Apps can also bind explicitly with registerReduxStore(store) from @buoy-gg/redux.";
1807
+ }
1808
+ }
1809
+ var TOP_LEVEL_ONLY_NOTE = "\n\n_Note: capture is top-level-only on this device (thunk-internal / RTK Query actions aren't recorded). Put `import '@buoy-gg/redux';` first in the app entry, or add `buoyReduxMiddleware`, for full capture._";
1799
1810
  function registerReduxTools(server, sync) {
1800
1811
  server.registerTool(
1801
1812
  "get_redux_state",
@@ -1820,19 +1831,22 @@ function registerReduxTools(server, sync) {
1820
1831
  "No redux result from the device. The redux tool may be inactive, or the app needs a newer Buoy (get_redux_state requires the getState action)."
1821
1832
  );
1822
1833
  }
1823
- if (!res.available) return text7(NO_STORE);
1834
+ if (!res.available) return fail8(noStoreMessage(res.reason));
1824
1835
  const slices = res.slices.length ? res.slices.join(", ") : "(none)";
1836
+ const captureNote = res.capture === "top-level-only" ? TOP_LEVEL_ONLY_NOTE : "";
1825
1837
  if (args.includeValues) {
1826
- return text7(`**Redux store \u2014 slices: ${slices}**
1838
+ return text7(
1839
+ `**Redux store \u2014 slices: ${slices}**
1827
1840
 
1828
1841
  \`\`\`json
1829
1842
  ${JSON.stringify(res.state, null, 2)}
1830
- \`\`\``);
1843
+ \`\`\`${captureNote}`
1844
+ );
1831
1845
  }
1832
1846
  return text7(
1833
1847
  `**Redux store \u2014 slices: ${slices}**
1834
1848
 
1835
- _Compact view. Pass includeValues:true for the full state tree. Dispatch with redux_dispatch({type, payload})._`
1849
+ _Compact view. Pass includeValues:true for the full state tree. Dispatch with redux_dispatch({type, payload})._${captureNote}`
1836
1850
  );
1837
1851
  } catch (e) {
1838
1852
  return fail8(errMsg8(e));
@@ -1855,7 +1869,7 @@ _Compact view. Pass includeValues:true for the full state tree. Dispatch with re
1855
1869
  const action = { type: args.type };
1856
1870
  if (args.payload !== void 0) action.payload = args.payload;
1857
1871
  const res = await sync.callAction(REDUX_TOOL_ID, "dispatch", { action }, target);
1858
- if (!res || !res.dispatched) return fail8(NO_STORE);
1872
+ if (!res || !res.dispatched) return fail8(noStoreMessage(res?.reason));
1859
1873
  return text7(`Dispatched \`${args.type}\`${args.payload !== void 0 ? ` with payload ${JSON.stringify(args.payload)}` : ""}.`);
1860
1874
  } catch (e) {
1861
1875
  return fail8(errMsg8(e));
package/dist/index.mjs CHANGED
@@ -27,7 +27,7 @@ import {
27
27
  registerStorageTools,
28
28
  registerZustandTools,
29
29
  runInit
30
- } from "./chunk-KZFJFXI4.mjs";
30
+ } from "./chunk-OJHJ2CKB.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.5",
4
+ "version": "7.0.7",
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",
@@ -31,7 +31,7 @@
31
31
  "@modelcontextprotocol/sdk": "^1.29.0",
32
32
  "socket.io-client": "^4.8.1",
33
33
  "zod": "^3.25.0",
34
- "@buoy-gg/sync-broker": "7.0.5"
34
+ "@buoy-gg/sync-broker": "7.0.7"
35
35
  },
36
36
  "devDependencies": {
37
37
  "@types/node": "^22.0.0",