@buoy-gg/core 7.0.4 → 7.0.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 (29) hide show
  1. package/lib/commonjs/floatingMenu/FloatingDevTools.js +38 -3
  2. package/lib/commonjs/floatingMenu/allToolsRegistry.js +12 -67
  3. package/lib/commonjs/floatingMenu/autoDiscoverPresets.js +16 -0
  4. package/lib/commonjs/floatingMenu/autoExternalSync.js +7 -1
  5. package/lib/commonjs/floatingMenu/sync/appSyncAdapter.js +81 -0
  6. package/lib/commonjs/index.js +8 -0
  7. package/lib/module/floatingMenu/FloatingDevTools.js +38 -3
  8. package/lib/module/floatingMenu/allToolsRegistry.js +8 -64
  9. package/lib/module/floatingMenu/autoDiscoverPresets.js +16 -0
  10. package/lib/module/floatingMenu/autoExternalSync.js +7 -1
  11. package/lib/module/floatingMenu/sync/appSyncAdapter.js +78 -0
  12. package/lib/module/index.js +4 -0
  13. package/lib/typescript/commonjs/floatingMenu/FloatingDevTools.d.ts.map +1 -1
  14. package/lib/typescript/commonjs/floatingMenu/allToolsRegistry.d.ts.map +1 -1
  15. package/lib/typescript/commonjs/floatingMenu/autoDiscoverPresets.d.ts.map +1 -1
  16. package/lib/typescript/commonjs/floatingMenu/autoExternalSync.d.ts.map +1 -1
  17. package/lib/typescript/commonjs/floatingMenu/sync/appSyncAdapter.d.ts +38 -0
  18. package/lib/typescript/commonjs/floatingMenu/sync/appSyncAdapter.d.ts.map +1 -0
  19. package/lib/typescript/commonjs/index.d.ts +1 -0
  20. package/lib/typescript/commonjs/index.d.ts.map +1 -1
  21. package/lib/typescript/module/floatingMenu/FloatingDevTools.d.ts.map +1 -1
  22. package/lib/typescript/module/floatingMenu/allToolsRegistry.d.ts.map +1 -1
  23. package/lib/typescript/module/floatingMenu/autoDiscoverPresets.d.ts.map +1 -1
  24. package/lib/typescript/module/floatingMenu/autoExternalSync.d.ts.map +1 -1
  25. package/lib/typescript/module/floatingMenu/sync/appSyncAdapter.d.ts +38 -0
  26. package/lib/typescript/module/floatingMenu/sync/appSyncAdapter.d.ts.map +1 -0
  27. package/lib/typescript/module/index.d.ts +1 -0
  28. package/lib/typescript/module/index.d.ts.map +1 -1
  29. package/package.json +5 -5
@@ -226,7 +226,9 @@ const FloatingDevTools = ({
226
226
 
227
227
  // Always auto-discover, then merge with any user-provided apps or config overrides
228
228
  // User-provided apps and config overrides take precedence (by ID)
229
- const finalApps = userApps ? (0, _autoDiscoverPresets.autoDiscoverPresetsWithCustom)(userApps) : (0, _autoDiscoverPresets.autoDiscoverPresets)();
229
+ // Memoized: rebuilding this array every render churned getToolIcon's
230
+ // identity (and re-ran discovery) on every parent render.
231
+ const finalApps = (0, _react.useMemo)(() => userApps ? (0, _autoDiscoverPresets.autoDiscoverPresetsWithCustom)(userApps) : (0, _autoDiscoverPresets.autoDiscoverPresets)(), [userApps]);
230
232
 
231
233
  // Check if debug-borders is installed and auto-render the overlay
232
234
  const DebugBordersOverlay = (0, _react.useMemo)(() => {
@@ -327,6 +329,39 @@ const FloatingDevTools = ({
327
329
  }
328
330
  }, []);
329
331
 
332
+ // Check if redux is installed and auto-mount startup instrumentation.
333
+ // Binds the store from app mount (renders nothing) so the action log, MCP
334
+ // getState/dispatch, and desktop sync work WITHOUT the Redux tool ever
335
+ // being opened — previously instrumentation only started on modal open.
336
+ const ReduxAutoInstrument = (0, _react.useMemo)(() => {
337
+ try {
338
+ // @ts-ignore - Dynamic import that may not exist
339
+ const {
340
+ ReduxAutoInstrument: Instrument
341
+ } = require("@buoy-gg/redux");
342
+ return Instrument ?? null;
343
+ } catch (e) {
344
+ (0, _optionalRequire.reportOptionalRequireError)("@buoy-gg/redux", e);
345
+ return null;
346
+ }
347
+ }, []);
348
+
349
+ // Check if console is installed and auto-mount capture (renders nothing).
350
+ // Starts console.* capture at app mount so logs emitted before the Console
351
+ // tool is opened are retained — no manual <ConsoleRoot /> needed anymore.
352
+ const ConsoleRoot = (0, _react.useMemo)(() => {
353
+ try {
354
+ // @ts-ignore - Dynamic import that may not exist
355
+ const {
356
+ ConsoleRoot: Root
357
+ } = require("@buoy-gg/console");
358
+ return Root ?? null;
359
+ } catch (e) {
360
+ (0, _optionalRequire.reportOptionalRequireError)("@buoy-gg/console", e);
361
+ return null;
362
+ }
363
+ }, []);
364
+
330
365
  // Get tool icon helper for the MinimizedToolsProvider
331
366
  const getToolIcon = (0, _react.useCallback)(id => {
332
367
  const tool = finalApps.find(app => app.id === id);
@@ -355,7 +390,7 @@ const FloatingDevTools = ({
355
390
  // contacted in production).
356
391
  if (headless) {
357
392
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
358
- children: [RouteTracker && /*#__PURE__*/(0, _jsxRuntime.jsx)(RouteTracker, {}), isDevelopment && externalSync !== false && (0, _autoExternalSync.isExternalSyncAvailable)() && /*#__PURE__*/(0, _jsxRuntime.jsx)(_autoExternalSync.AutoExternalSync, {
393
+ children: [ReduxAutoInstrument && /*#__PURE__*/(0, _jsxRuntime.jsx)(ReduxAutoInstrument, {}), ConsoleRoot && /*#__PURE__*/(0, _jsxRuntime.jsx)(ConsoleRoot, {}), RouteTracker && /*#__PURE__*/(0, _jsxRuntime.jsx)(RouteTracker, {}), isDevelopment && externalSync !== false && (0, _autoExternalSync.isExternalSyncAvailable)() && /*#__PURE__*/(0, _jsxRuntime.jsx)(_autoExternalSync.AutoExternalSync, {
359
394
  options: typeof externalSync === "object" ? externalSync : undefined,
360
395
  requiredEnvVars: requiredEnvVars,
361
396
  isPro: isLicensed,
@@ -395,7 +430,7 @@ const FloatingDevTools = ({
395
430
  environment: resolvedEnvironment
396
431
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_AppHost.AppOverlay, {})]
397
432
  })
398
- }), children, DebugBordersOverlay && /*#__PURE__*/(0, _jsxRuntime.jsx)(DebugBordersOverlay, {}), HighlightUpdatesOverlay && /*#__PURE__*/(0, _jsxRuntime.jsx)(HighlightUpdatesOverlay, {}), ImageOverlayOverlay && /*#__PURE__*/(0, _jsxRuntime.jsx)(ImageOverlayOverlay, {}), PerfMonitorOverlay && /*#__PURE__*/(0, _jsxRuntime.jsx)(PerfMonitorOverlay, {}), JsTopOverlay && /*#__PURE__*/(0, _jsxRuntime.jsx)(JsTopOverlay, {}), ImpersonateOverlay && /*#__PURE__*/(0, _jsxRuntime.jsx)(ImpersonateOverlay, {}), RouteTracker && /*#__PURE__*/(0, _jsxRuntime.jsx)(RouteTracker, {}), isDevelopment && externalSync !== false && (0, _autoExternalSync.isExternalSyncAvailable)() && /*#__PURE__*/(0, _jsxRuntime.jsx)(_autoExternalSync.AutoExternalSync, {
433
+ }), children, DebugBordersOverlay && /*#__PURE__*/(0, _jsxRuntime.jsx)(DebugBordersOverlay, {}), HighlightUpdatesOverlay && /*#__PURE__*/(0, _jsxRuntime.jsx)(HighlightUpdatesOverlay, {}), ImageOverlayOverlay && /*#__PURE__*/(0, _jsxRuntime.jsx)(ImageOverlayOverlay, {}), PerfMonitorOverlay && /*#__PURE__*/(0, _jsxRuntime.jsx)(PerfMonitorOverlay, {}), JsTopOverlay && /*#__PURE__*/(0, _jsxRuntime.jsx)(JsTopOverlay, {}), ImpersonateOverlay && /*#__PURE__*/(0, _jsxRuntime.jsx)(ImpersonateOverlay, {}), ReduxAutoInstrument && /*#__PURE__*/(0, _jsxRuntime.jsx)(ReduxAutoInstrument, {}), ConsoleRoot && /*#__PURE__*/(0, _jsxRuntime.jsx)(ConsoleRoot, {}), RouteTracker && /*#__PURE__*/(0, _jsxRuntime.jsx)(RouteTracker, {}), isDevelopment && externalSync !== false && (0, _autoExternalSync.isExternalSyncAvailable)() && /*#__PURE__*/(0, _jsxRuntime.jsx)(_autoExternalSync.AutoExternalSync, {
399
434
  options: typeof externalSync === "object" ? externalSync : undefined,
400
435
  requiredEnvVars: requiredEnvVars,
401
436
  isPro: isLicensed,
@@ -5,7 +5,6 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.ALL_TOOLS_REGISTRY = void 0;
7
7
  var _react = _interopRequireDefault(require("react"));
8
- var _reactNative = require("react-native");
9
8
  var _floatingToolsCore = require("@buoy-gg/floating-tools-core");
10
9
  var _sharedUi = require("@buoy-gg/shared-ui");
11
10
  var _jsxRuntime = require("react/jsx-runtime");
@@ -27,66 +26,12 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
27
26
  * data exists for new/unavailable tools.
28
27
  */
29
28
 
30
- // ─── Color constants for tools whose icons live in optional packages ─────────
31
- // Copied verbatim from the source icon components so the vendored copies below
32
- // render identically to the real tool icons.
33
-
34
- /** Zustand brand color — copied from @buoy-gg/zustand ZustandIcon.tsx */const ZUSTAND_ICON_COLOR = "#463B3F";
35
- /** Jotai brand color — copied from @buoy-gg/jotai JotaiIcon.tsx */
36
- const JOTAI_ICON_COLOR = "#6C47FF";
37
- /** Image overlay purple — matches the preset */
38
- const IMAGE_OVERLAY_ICON_COLOR = "#A855F7";
39
-
40
- // ─── Vendored copies of optional-package icons ───────────────────────────────
41
- // Zustand and Jotai ship their real icons inside their own packages (which may
42
- // not be installed), so we cannot import them from a required dependency.
43
- //
44
- // The REAL icons in @buoy-gg/zustand and @buoy-gg/jotai are themselves a single
45
- // centered letter glyph (verified — there are no SVG logos in those packages).
46
- // These are faithful copies of those source components, so unavailable items
47
- // render the ACTUAL tool icon (just dimmed by DialIcon), not a placeholder.
48
-
49
- /** Faithful copy of @buoy-gg/zustand `ZustandIcon` */
50
- const ZustandIcon = ({
51
- size,
52
- color
53
- }) => /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
54
- style: {
55
- width: size,
56
- height: size,
57
- justifyContent: "center",
58
- alignItems: "center"
59
- },
60
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
61
- style: {
62
- fontSize: size * 0.75,
63
- color: color || ZUSTAND_ICON_COLOR,
64
- fontWeight: "700"
65
- },
66
- children: "Z"
67
- })
68
- });
69
-
70
- /** Faithful copy of @buoy-gg/jotai `JotaiIcon` */
71
- const JotaiIcon = ({
72
- size,
73
- color
74
- }) => /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
75
- style: {
76
- width: size,
77
- height: size,
78
- justifyContent: "center",
79
- alignItems: "center"
80
- },
81
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
82
- style: {
83
- fontSize: size * 0.75,
84
- color: color || JOTAI_ICON_COLOR,
85
- fontWeight: "700"
86
- },
87
- children: "J"
88
- })
89
- });
29
+ // ─── Icons for tools whose packages are optional ─────────────────────────────
30
+ // Zustand and Jotai may not be installed, so their icons cannot be imported
31
+ // from those packages. They no longer need vendoring: the artwork is authored
32
+ // in shared/icons/*.json and generated into @buoy-gg/floating-tools-core, which
33
+ // IS a required dependency. Unavailable items therefore render the ACTUAL tool
34
+ // icon (just dimmed by DialIcon), and it can no longer drift from the real one.
90
35
 
91
36
  // ─── Registry entry type ──────────────────────────────────────────────────────
92
37
 
@@ -157,8 +102,8 @@ const ALL_TOOLS_REGISTRY = exports.ALL_TOOLS_REGISTRY = [{
157
102
  }, {
158
103
  id: "zustand",
159
104
  name: "ZUSTAND",
160
- color: ZUSTAND_ICON_COLOR,
161
- renderIcon: size => /*#__PURE__*/(0, _jsxRuntime.jsx)(ZustandIcon, {
105
+ color: _floatingToolsCore.ZUSTAND_ICON_COLOR,
106
+ renderIcon: size => /*#__PURE__*/(0, _jsxRuntime.jsx)(_floatingToolsCore.ZustandIcon, {
162
107
  size: size
163
108
  })
164
109
  }, {
@@ -171,17 +116,17 @@ const ALL_TOOLS_REGISTRY = exports.ALL_TOOLS_REGISTRY = [{
171
116
  }, {
172
117
  id: "jotai",
173
118
  name: "JOTAI",
174
- color: JOTAI_ICON_COLOR,
175
- renderIcon: size => /*#__PURE__*/(0, _jsxRuntime.jsx)(JotaiIcon, {
119
+ color: _floatingToolsCore.JOTAI_ICON_COLOR,
120
+ renderIcon: size => /*#__PURE__*/(0, _jsxRuntime.jsx)(_floatingToolsCore.JotaiIcon, {
176
121
  size: size
177
122
  })
178
123
  }, {
179
124
  id: "image-overlay",
180
125
  name: "IMG",
181
- color: IMAGE_OVERLAY_ICON_COLOR,
126
+ color: _floatingToolsCore.IMAGE_OVERLAY_ICON_COLOR,
182
127
  renderIcon: size => /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ImageOverlayIcon, {
183
128
  size: size,
184
- color: IMAGE_OVERLAY_ICON_COLOR
129
+ color: _floatingToolsCore.IMAGE_OVERLAY_ICON_COLOR
185
130
  })
186
131
  }, {
187
132
  id: "perf-monitor-modal",
@@ -173,6 +173,22 @@ function autoDiscoverPresets() {
173
173
  }
174
174
  }
175
175
  },
176
+ // Console
177
+ {
178
+ name: "@buoy-gg/console",
179
+ loader: () => {
180
+ try {
181
+ // @ts-ignore - Dynamic import that may not exist
182
+ const {
183
+ consoleToolPreset
184
+ } = require("@buoy-gg/console");
185
+ return consoleToolPreset;
186
+ } catch (e) {
187
+ (0, _optionalRequire.reportOptionalRequireError)("@buoy-gg/console", e);
188
+ return null;
189
+ }
190
+ }
191
+ },
176
192
  // Redux DevTools
177
193
  {
178
194
  name: "@buoy-gg/redux",
@@ -8,6 +8,7 @@ exports.isExternalSyncAvailable = isExternalSyncAvailable;
8
8
  var _react = require("react");
9
9
  var _reactNative = require("react-native");
10
10
  var _optionalRequire = require("./optionalRequire.js");
11
+ var _appSyncAdapter = require("./sync/appSyncAdapter.js");
11
12
  /**
12
13
  * Zero-config device→desktop sync for FloatingDevTools.
13
14
  *
@@ -220,7 +221,12 @@ function AutoExternalSync({
220
221
  };
221
222
  }, [socket, isPro, licenseKey]);
222
223
  const tools = (0, _react.useMemo)(() => {
223
- const map = {};
224
+ // Core's own adapter — device-level capabilities (JS-bundle reload) that
225
+ // don't belong to any tool package. Registered unconditionally so remote
226
+ // drivers can rely on it for every app, whatever tools are installed.
227
+ const map = {
228
+ app: _appSyncAdapter.appSyncAdapter
229
+ };
224
230
  if (storageModule?.storageSyncAdapter) {
225
231
  map.storage = storageModule.storageSyncAdapter;
226
232
  }
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.appSyncAdapter = void 0;
7
+ var _sharedUi = require("@buoy-gg/shared-ui");
8
+ /**
9
+ * Sync adapter for the "app" pseudo-tool — device-level capabilities that
10
+ * belong to the app itself rather than to any one Buoy tool, consumed by
11
+ * @buoy-gg/external-sync's `useExternalSync` (structurally matches its
12
+ * ToolSyncAdapter interface so this package doesn't need a dependency on it).
13
+ *
14
+ * Lives in core and is registered UNCONDITIONALLY, so a remote driver (Buoy
15
+ * Desktop, the MCP server) can count on it for every connected app — no tool
16
+ * package, and no native peer deps, required.
17
+ *
18
+ * Today that's one thing: reloading the JS bundle. The snapshot is static
19
+ * (there is nothing to stream), it just advertises whether a reload would
20
+ * work and which mechanism would run, so a driver can say so up front instead
21
+ * of discovering it by failing.
22
+ */
23
+ /**
24
+ * When THIS JS realm booted. A reload replaces the realm, so a driver that
25
+ * remembers this value can tell "the app came back" apart from "the old,
26
+ * doomed realm answered me" — the difference between reporting a reload done
27
+ * and reporting it too early.
28
+ */
29
+ const REALM_STARTED_AT = Date.now();
30
+ const appSyncAdapter = exports.appSyncAdapter = {
31
+ version: 1,
32
+ getSnapshot: () => {
33
+ const strategy = (0, _sharedUi.resolveReloadStrategy)("auto");
34
+ return {
35
+ startedAt: REALM_STARTED_AT,
36
+ reload: {
37
+ available: strategy !== null,
38
+ strategy
39
+ }
40
+ };
41
+ },
42
+ // Nothing changes over time — take the callback and hand back a no-op
43
+ // unsubscribe so the sync layer's contract still holds.
44
+ subscribe: _onChange => () => {},
45
+ actions: {
46
+ /**
47
+ * Cheap round-trip liveness probe. Only a live JS realm can answer it, and
48
+ * `startedAt` identifies WHICH realm — that's how a driver confirms a
49
+ * reload actually completed rather than just being accepted.
50
+ */
51
+ ping: () => ({
52
+ ok: true,
53
+ startedAt: REALM_STARTED_AT
54
+ }),
55
+ /**
56
+ * Reload the app's JS bundle: RN's `DevSettings.reload()` in dev builds,
57
+ * `expo-updates` otherwise. The same primitive perf-monitor's batch runner
58
+ * uses between cases, and the MCP server's `reload_app`.
59
+ *
60
+ * Returns BEFORE the reload fires: the realm dies the moment it does, so
61
+ * the ack has to be on the wire first (scheduleReloadApp arms it a beat
62
+ * later). An unavailable mechanism throws here, so the caller gets a real
63
+ * error instead of a silent no-op.
64
+ */
65
+ reloadApp: params => {
66
+ const p = params ?? {};
67
+ const {
68
+ strategy,
69
+ delayMs
70
+ } = (0, _sharedUi.scheduleReloadApp)({
71
+ strategy: p.strategy,
72
+ delayMs: p.delayMs
73
+ });
74
+ return {
75
+ scheduled: true,
76
+ strategy,
77
+ delayMs
78
+ };
79
+ }
80
+ }
81
+ };
@@ -7,6 +7,7 @@ var _exportNames = {
7
7
  Buoy: true,
8
8
  BuoyDefault: true,
9
9
  FloatingDevTools: true,
10
+ appSyncAdapter: true,
10
11
  autoDiscoverPresets: true,
11
12
  autoDiscoverPresetsWithCustom: true,
12
13
  createDefaultConfig: true,
@@ -115,6 +116,12 @@ Object.defineProperty(exports, "MinimizedToolsStack", {
115
116
  return _MinimizedToolsStack.MinimizedToolsStack;
116
117
  }
117
118
  });
119
+ Object.defineProperty(exports, "appSyncAdapter", {
120
+ enumerable: true,
121
+ get: function () {
122
+ return _appSyncAdapter.appSyncAdapter;
123
+ }
124
+ });
118
125
  Object.defineProperty(exports, "autoDiscoverPresets", {
119
126
  enumerable: true,
120
127
  get: function () {
@@ -231,6 +238,7 @@ Object.defineProperty(exports, "validateDialConfig", {
231
238
  });
232
239
  var _Buoy = _interopRequireWildcard(require("./Buoy.js"));
233
240
  var _FloatingDevTools = require("./floatingMenu/FloatingDevTools");
241
+ var _appSyncAdapter = require("./floatingMenu/sync/appSyncAdapter.js");
234
242
  var _autoDiscoverPresets = require("./floatingMenu/autoDiscoverPresets.js");
235
243
  var _defaultConfig = require("./floatingMenu/defaultConfig.js");
236
244
  var _FloatingMenu = require("./floatingMenu/FloatingMenu.js");
@@ -222,7 +222,9 @@ export const FloatingDevTools = ({
222
222
 
223
223
  // Always auto-discover, then merge with any user-provided apps or config overrides
224
224
  // User-provided apps and config overrides take precedence (by ID)
225
- const finalApps = userApps ? autoDiscoverPresetsWithCustom(userApps) : autoDiscoverPresets();
225
+ // Memoized: rebuilding this array every render churned getToolIcon's
226
+ // identity (and re-ran discovery) on every parent render.
227
+ const finalApps = useMemo(() => userApps ? autoDiscoverPresetsWithCustom(userApps) : autoDiscoverPresets(), [userApps]);
226
228
 
227
229
  // Check if debug-borders is installed and auto-render the overlay
228
230
  const DebugBordersOverlay = useMemo(() => {
@@ -323,6 +325,39 @@ export const FloatingDevTools = ({
323
325
  }
324
326
  }, []);
325
327
 
328
+ // Check if redux is installed and auto-mount startup instrumentation.
329
+ // Binds the store from app mount (renders nothing) so the action log, MCP
330
+ // getState/dispatch, and desktop sync work WITHOUT the Redux tool ever
331
+ // being opened — previously instrumentation only started on modal open.
332
+ const ReduxAutoInstrument = useMemo(() => {
333
+ try {
334
+ // @ts-ignore - Dynamic import that may not exist
335
+ const {
336
+ ReduxAutoInstrument: Instrument
337
+ } = require("@buoy-gg/redux");
338
+ return Instrument ?? null;
339
+ } catch (e) {
340
+ reportOptionalRequireError("@buoy-gg/redux", e);
341
+ return null;
342
+ }
343
+ }, []);
344
+
345
+ // Check if console is installed and auto-mount capture (renders nothing).
346
+ // Starts console.* capture at app mount so logs emitted before the Console
347
+ // tool is opened are retained — no manual <ConsoleRoot /> needed anymore.
348
+ const ConsoleRoot = useMemo(() => {
349
+ try {
350
+ // @ts-ignore - Dynamic import that may not exist
351
+ const {
352
+ ConsoleRoot: Root
353
+ } = require("@buoy-gg/console");
354
+ return Root ?? null;
355
+ } catch (e) {
356
+ reportOptionalRequireError("@buoy-gg/console", e);
357
+ return null;
358
+ }
359
+ }, []);
360
+
326
361
  // Get tool icon helper for the MinimizedToolsProvider
327
362
  const getToolIcon = useCallback(id => {
328
363
  const tool = finalApps.find(app => app.id === id);
@@ -351,7 +386,7 @@ export const FloatingDevTools = ({
351
386
  // contacted in production).
352
387
  if (headless) {
353
388
  return /*#__PURE__*/_jsxs(_Fragment, {
354
- children: [RouteTracker && /*#__PURE__*/_jsx(RouteTracker, {}), isDevelopment && externalSync !== false && isExternalSyncAvailable() && /*#__PURE__*/_jsx(AutoExternalSync, {
389
+ children: [ReduxAutoInstrument && /*#__PURE__*/_jsx(ReduxAutoInstrument, {}), ConsoleRoot && /*#__PURE__*/_jsx(ConsoleRoot, {}), RouteTracker && /*#__PURE__*/_jsx(RouteTracker, {}), isDevelopment && externalSync !== false && isExternalSyncAvailable() && /*#__PURE__*/_jsx(AutoExternalSync, {
355
390
  options: typeof externalSync === "object" ? externalSync : undefined,
356
391
  requiredEnvVars: requiredEnvVars,
357
392
  isPro: isLicensed,
@@ -391,7 +426,7 @@ export const FloatingDevTools = ({
391
426
  environment: resolvedEnvironment
392
427
  }), /*#__PURE__*/_jsx(AppOverlay, {})]
393
428
  })
394
- }), children, DebugBordersOverlay && /*#__PURE__*/_jsx(DebugBordersOverlay, {}), HighlightUpdatesOverlay && /*#__PURE__*/_jsx(HighlightUpdatesOverlay, {}), ImageOverlayOverlay && /*#__PURE__*/_jsx(ImageOverlayOverlay, {}), PerfMonitorOverlay && /*#__PURE__*/_jsx(PerfMonitorOverlay, {}), JsTopOverlay && /*#__PURE__*/_jsx(JsTopOverlay, {}), ImpersonateOverlay && /*#__PURE__*/_jsx(ImpersonateOverlay, {}), RouteTracker && /*#__PURE__*/_jsx(RouteTracker, {}), isDevelopment && externalSync !== false && isExternalSyncAvailable() && /*#__PURE__*/_jsx(AutoExternalSync, {
429
+ }), children, DebugBordersOverlay && /*#__PURE__*/_jsx(DebugBordersOverlay, {}), HighlightUpdatesOverlay && /*#__PURE__*/_jsx(HighlightUpdatesOverlay, {}), ImageOverlayOverlay && /*#__PURE__*/_jsx(ImageOverlayOverlay, {}), PerfMonitorOverlay && /*#__PURE__*/_jsx(PerfMonitorOverlay, {}), JsTopOverlay && /*#__PURE__*/_jsx(JsTopOverlay, {}), ImpersonateOverlay && /*#__PURE__*/_jsx(ImpersonateOverlay, {}), ReduxAutoInstrument && /*#__PURE__*/_jsx(ReduxAutoInstrument, {}), ConsoleRoot && /*#__PURE__*/_jsx(ConsoleRoot, {}), RouteTracker && /*#__PURE__*/_jsx(RouteTracker, {}), isDevelopment && externalSync !== false && isExternalSyncAvailable() && /*#__PURE__*/_jsx(AutoExternalSync, {
395
430
  options: typeof externalSync === "object" ? externalSync : undefined,
396
431
  requiredEnvVars: requiredEnvVars,
397
432
  isPro: isLicensed,
@@ -18,75 +18,19 @@
18
18
  */
19
19
 
20
20
  import React from "react";
21
- import { View, Text } from "react-native";
22
21
  import { EnvIcon, ENV_ICON_COLOR, NetworkIcon, NETWORK_ICON_COLOR, StorageIcon, STORAGE_ICON_COLOR, QueryIcon, QUERY_ICON_COLOR, RoutesIcon, ROUTES_ICON_COLOR, HighlighterIcon, HIGHLIGHTER_ICON_COLOR, ReduxIcon, REDUX_ICON_COLOR, EventsIcon, EVENTS_ICON_COLOR, BenchmarkIcon, BENCHMARK_ICON_COLOR } from "@buoy-gg/floating-tools-core";
23
22
  import { ImageOverlayIcon } from "@buoy-gg/shared-ui";
24
23
 
25
- // ─── Color constants for tools whose icons live in optional packages ─────────
26
- // Copied verbatim from the source icon components so the vendored copies below
27
- // render identically to the real tool icons.
28
-
29
- /** Zustand brand color — copied from @buoy-gg/zustand ZustandIcon.tsx */
30
- import { jsx as _jsx } from "react/jsx-runtime";
31
- const ZUSTAND_ICON_COLOR = "#463B3F";
32
- /** Jotai brand color — copied from @buoy-gg/jotai JotaiIcon.tsx */
33
- const JOTAI_ICON_COLOR = "#6C47FF";
34
- /** Image overlay purple — matches the preset */
35
- const IMAGE_OVERLAY_ICON_COLOR = "#A855F7";
36
-
37
- // ─── Vendored copies of optional-package icons ───────────────────────────────
38
- // Zustand and Jotai ship their real icons inside their own packages (which may
39
- // not be installed), so we cannot import them from a required dependency.
40
- //
41
- // The REAL icons in @buoy-gg/zustand and @buoy-gg/jotai are themselves a single
42
- // centered letter glyph (verified — there are no SVG logos in those packages).
43
- // These are faithful copies of those source components, so unavailable items
44
- // render the ACTUAL tool icon (just dimmed by DialIcon), not a placeholder.
45
-
46
- /** Faithful copy of @buoy-gg/zustand `ZustandIcon` */
47
- const ZustandIcon = ({
48
- size,
49
- color
50
- }) => /*#__PURE__*/_jsx(View, {
51
- style: {
52
- width: size,
53
- height: size,
54
- justifyContent: "center",
55
- alignItems: "center"
56
- },
57
- children: /*#__PURE__*/_jsx(Text, {
58
- style: {
59
- fontSize: size * 0.75,
60
- color: color || ZUSTAND_ICON_COLOR,
61
- fontWeight: "700"
62
- },
63
- children: "Z"
64
- })
65
- });
66
-
67
- /** Faithful copy of @buoy-gg/jotai `JotaiIcon` */
68
- const JotaiIcon = ({
69
- size,
70
- color
71
- }) => /*#__PURE__*/_jsx(View, {
72
- style: {
73
- width: size,
74
- height: size,
75
- justifyContent: "center",
76
- alignItems: "center"
77
- },
78
- children: /*#__PURE__*/_jsx(Text, {
79
- style: {
80
- fontSize: size * 0.75,
81
- color: color || JOTAI_ICON_COLOR,
82
- fontWeight: "700"
83
- },
84
- children: "J"
85
- })
86
- });
24
+ // ─── Icons for tools whose packages are optional ─────────────────────────────
25
+ // Zustand and Jotai may not be installed, so their icons cannot be imported
26
+ // from those packages. They no longer need vendoring: the artwork is authored
27
+ // in shared/icons/*.json and generated into @buoy-gg/floating-tools-core, which
28
+ // IS a required dependency. Unavailable items therefore render the ACTUAL tool
29
+ // icon (just dimmed by DialIcon), and it can no longer drift from the real one.
30
+ import { ZustandIcon, ZUSTAND_ICON_COLOR, JotaiIcon, JOTAI_ICON_COLOR, IMAGE_OVERLAY_ICON_COLOR } from "@buoy-gg/floating-tools-core";
87
31
 
88
32
  // ─── Registry entry type ──────────────────────────────────────────────────────
89
-
33
+ import { jsx as _jsx } from "react/jsx-runtime";
90
34
  // ─── Canonical catalog ────────────────────────────────────────────────────────
91
35
 
92
36
  /**
@@ -169,6 +169,22 @@ export function autoDiscoverPresets() {
169
169
  }
170
170
  }
171
171
  },
172
+ // Console
173
+ {
174
+ name: "@buoy-gg/console",
175
+ loader: () => {
176
+ try {
177
+ // @ts-ignore - Dynamic import that may not exist
178
+ const {
179
+ consoleToolPreset
180
+ } = require("@buoy-gg/console");
181
+ return consoleToolPreset;
182
+ } catch (e) {
183
+ reportOptionalRequireError("@buoy-gg/console", e);
184
+ return null;
185
+ }
186
+ }
187
+ },
172
188
  // Redux DevTools
173
189
  {
174
190
  name: "@buoy-gg/redux",
@@ -17,6 +17,7 @@
17
17
  import { useEffect, useMemo, useRef } from "react";
18
18
  import { Platform } from "react-native";
19
19
  import { reportOptionalRequireError } from "./optionalRequire.js";
20
+ import { appSyncAdapter } from "./sync/appSyncAdapter.js";
20
21
 
21
22
  /* eslint-disable @typescript-eslint/no-var-requires */
22
23
 
@@ -215,7 +216,12 @@ export function AutoExternalSync({
215
216
  };
216
217
  }, [socket, isPro, licenseKey]);
217
218
  const tools = useMemo(() => {
218
- const map = {};
219
+ // Core's own adapter — device-level capabilities (JS-bundle reload) that
220
+ // don't belong to any tool package. Registered unconditionally so remote
221
+ // drivers can rely on it for every app, whatever tools are installed.
222
+ const map = {
223
+ app: appSyncAdapter
224
+ };
219
225
  if (storageModule?.storageSyncAdapter) {
220
226
  map.storage = storageModule.storageSyncAdapter;
221
227
  }
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+
3
+ import { resolveReloadStrategy, scheduleReloadApp } from "@buoy-gg/shared-ui";
4
+
5
+ /**
6
+ * Sync adapter for the "app" pseudo-tool — device-level capabilities that
7
+ * belong to the app itself rather than to any one Buoy tool, consumed by
8
+ * @buoy-gg/external-sync's `useExternalSync` (structurally matches its
9
+ * ToolSyncAdapter interface so this package doesn't need a dependency on it).
10
+ *
11
+ * Lives in core and is registered UNCONDITIONALLY, so a remote driver (Buoy
12
+ * Desktop, the MCP server) can count on it for every connected app — no tool
13
+ * package, and no native peer deps, required.
14
+ *
15
+ * Today that's one thing: reloading the JS bundle. The snapshot is static
16
+ * (there is nothing to stream), it just advertises whether a reload would
17
+ * work and which mechanism would run, so a driver can say so up front instead
18
+ * of discovering it by failing.
19
+ */
20
+ /**
21
+ * When THIS JS realm booted. A reload replaces the realm, so a driver that
22
+ * remembers this value can tell "the app came back" apart from "the old,
23
+ * doomed realm answered me" — the difference between reporting a reload done
24
+ * and reporting it too early.
25
+ */
26
+ const REALM_STARTED_AT = Date.now();
27
+ export const appSyncAdapter = {
28
+ version: 1,
29
+ getSnapshot: () => {
30
+ const strategy = resolveReloadStrategy("auto");
31
+ return {
32
+ startedAt: REALM_STARTED_AT,
33
+ reload: {
34
+ available: strategy !== null,
35
+ strategy
36
+ }
37
+ };
38
+ },
39
+ // Nothing changes over time — take the callback and hand back a no-op
40
+ // unsubscribe so the sync layer's contract still holds.
41
+ subscribe: _onChange => () => {},
42
+ actions: {
43
+ /**
44
+ * Cheap round-trip liveness probe. Only a live JS realm can answer it, and
45
+ * `startedAt` identifies WHICH realm — that's how a driver confirms a
46
+ * reload actually completed rather than just being accepted.
47
+ */
48
+ ping: () => ({
49
+ ok: true,
50
+ startedAt: REALM_STARTED_AT
51
+ }),
52
+ /**
53
+ * Reload the app's JS bundle: RN's `DevSettings.reload()` in dev builds,
54
+ * `expo-updates` otherwise. The same primitive perf-monitor's batch runner
55
+ * uses between cases, and the MCP server's `reload_app`.
56
+ *
57
+ * Returns BEFORE the reload fires: the realm dies the moment it does, so
58
+ * the ack has to be on the wire first (scheduleReloadApp arms it a beat
59
+ * later). An unavailable mechanism throws here, so the caller gets a real
60
+ * error instead of a silent no-op.
61
+ */
62
+ reloadApp: params => {
63
+ const p = params ?? {};
64
+ const {
65
+ strategy,
66
+ delayMs
67
+ } = scheduleReloadApp({
68
+ strategy: p.strategy,
69
+ delayMs: p.delayMs
70
+ });
71
+ return {
72
+ scheduled: true,
73
+ strategy,
74
+ delayMs
75
+ };
76
+ }
77
+ }
78
+ };
@@ -4,6 +4,10 @@
4
4
  export { Buoy, default as BuoyDefault } from "./Buoy.js";
5
5
  // Export unified component - primary interface
6
6
  export { FloatingDevTools } from "./floatingMenu/FloatingDevTools";
7
+ // Device-level sync adapter (JS-bundle reload). FloatingDevTools registers it
8
+ // automatically; exported for apps that wire <DevToolsSync> by hand.
9
+ export { appSyncAdapter } from "./floatingMenu/sync/appSyncAdapter.js";
10
+
7
11
  // Export auto-discovery utilities
8
12
  export { autoDiscoverPresets, autoDiscoverPresetsWithCustom } from "./floatingMenu/autoDiscoverPresets.js";
9
13
 
@@ -1 +1 @@
1
- {"version":3,"file":"FloatingDevTools.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/FloatingDevTools.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+D,MAAM,OAAO,CAAC;AAGpF,OAAO,EAAgB,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAMtE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAK5C,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,EAEvB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,oBAAoB,CAAC;AAE5B;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,YAAY,GACpB,MAAM,GACN;IACE,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GACD;IACE,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EACR,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,QAAQ,GACR,OAAO,GACP,KAAK,CAAC;IACV,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEN;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;IAC1D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;CAC1C;AAED;;;;;;GAMG;AACH,MAAM,WAAW,qBAAsB,SAAQ,IAAI,CAAC,iBAAiB,EAAE,MAAM,CAAC;IAC5E;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,IAAI,CAAC,EAAE,YAAY,EAAE,CAAC;IAEtB;;;;;;;;;;;;;;OAcG;IACH,eAAe,CAAC,EAAE,YAAY,EAAE,CAAC;IAEjC;;;;;;;;;;;;OAYG;IACH,mBAAmB,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAEzC;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAE3B;;;;;;;;;OASG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;;;;;;;;;;;;OAaG;IACH,oBAAoB,CAAC,EAAE,qBAAqB,CAAC;IAE7C;;;;;;;;;;;;;;OAcG;IACH,gBAAgB,CAAC,EAAE,iBAAiB,CAAC;IAErC;;;;;;;;;;;;;;;;OAgBG;IACH,qBAAqB,CAAC,EAAE,OAAO,oBAAoB,EAAE,WAAW,EAAE,CAAC;IAEnE;;;;;;;;;;;;;OAaG;IACH,mBAAmB,CAAC,EAAE,CAAC,WAAW,EAAE,OAAO,oBAAoB,EAAE,WAAW,KAAK,IAAI,CAAC;IAEtF;;;;;;;;;;OAUG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;;;;;;;OAQG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;;;;;;;;;;;;;;;;OAkBG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAEpC;;;;;;;;;;;;;;;;;OAiBG;IACH,YAAY,CAAC,EAAE,OAAO,GAAG,mBAAmB,CAAC;IAE7C;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AACH,eAAO,MAAM,gBAAgB,GAAI,0NAe9B,qBAAqB,6BAgTvB,CAAC"}
1
+ {"version":3,"file":"FloatingDevTools.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/FloatingDevTools.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+D,MAAM,OAAO,CAAC;AAGpF,OAAO,EAAgB,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAMtE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAK5C,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,EAEvB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,oBAAoB,CAAC;AAE5B;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,YAAY,GACpB,MAAM,GACN;IACE,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GACD;IACE,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EACR,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,QAAQ,GACR,OAAO,GACP,KAAK,CAAC;IACV,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEN;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;IAC1D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;CAC1C;AAED;;;;;;GAMG;AACH,MAAM,WAAW,qBAAsB,SAAQ,IAAI,CAAC,iBAAiB,EAAE,MAAM,CAAC;IAC5E;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,IAAI,CAAC,EAAE,YAAY,EAAE,CAAC;IAEtB;;;;;;;;;;;;;;OAcG;IACH,eAAe,CAAC,EAAE,YAAY,EAAE,CAAC;IAEjC;;;;;;;;;;;;OAYG;IACH,mBAAmB,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAEzC;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAE3B;;;;;;;;;OASG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;;;;;;;;;;;;OAaG;IACH,oBAAoB,CAAC,EAAE,qBAAqB,CAAC;IAE7C;;;;;;;;;;;;;;OAcG;IACH,gBAAgB,CAAC,EAAE,iBAAiB,CAAC;IAErC;;;;;;;;;;;;;;;;OAgBG;IACH,qBAAqB,CAAC,EAAE,OAAO,oBAAoB,EAAE,WAAW,EAAE,CAAC;IAEnE;;;;;;;;;;;;;OAaG;IACH,mBAAmB,CAAC,EAAE,CAAC,WAAW,EAAE,OAAO,oBAAoB,EAAE,WAAW,KAAK,IAAI,CAAC;IAEtF;;;;;;;;;;OAUG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;;;;;;;OAQG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;;;;;;;;;;;;;;;;OAkBG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAEpC;;;;;;;;;;;;;;;;;OAiBG;IACH,YAAY,CAAC,EAAE,OAAO,GAAG,mBAAmB,CAAC;IAE7C;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AACH,eAAO,MAAM,gBAAgB,GAAI,0NAe9B,qBAAqB,6BAwVvB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"allToolsRegistry.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/allToolsRegistry.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAgE1B,MAAM,WAAW,aAAa;IAC5B,wEAAwE;IACxE,EAAE,EAAE,MAAM,CAAC;IACX,2DAA2D;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,mBAAmB;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,+DAA+D;IAC/D,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAC;CAC/C;AAID;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,kBAAkB,EAAE,aAAa,EAyE7C,CAAC"}
1
+ {"version":3,"file":"allToolsRegistry.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/allToolsRegistry.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAwC1B,MAAM,WAAW,aAAa;IAC5B,wEAAwE;IACxE,EAAE,EAAE,MAAM,CAAC;IACX,2DAA2D;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,mBAAmB;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,+DAA+D;IAC/D,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAC;CAC/C;AAID;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,kBAAkB,EAAE,aAAa,EAyE7C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"autoDiscoverPresets.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/autoDiscoverPresets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAG5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,wBAAgB,mBAAmB,IAAI,YAAY,EAAE,CAwPpD;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,6BAA6B,CAC3C,WAAW,EAAE,YAAY,EAAE,GAC1B,YAAY,EAAE,CAahB"}
1
+ {"version":3,"file":"autoDiscoverPresets.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/autoDiscoverPresets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAG5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,wBAAgB,mBAAmB,IAAI,YAAY,EAAE,CAsQpD;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,6BAA6B,CAC3C,WAAW,EAAE,YAAY,EAAE,GAC1B,YAAY,EAAE,CAahB"}
@@ -1 +1 @@
1
- {"version":3,"file":"autoExternalSync.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/autoExternalSync.tsx"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AA+HvD,iFAAiF;AACjF,wBAAgB,uBAAuB,IAAI,OAAO,CAEjD;AAED,MAAM,WAAW,mBAAmB;IAClC;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2EAA2E;IAC3E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qBAAqB;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAuBD,UAAU,qBAAqB;IAC7B,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B,6EAA6E;IAC7E,eAAe,CAAC,EAAE,YAAY,EAAE,CAAC;IACjC,8EAA8E;IAC9E,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,uEAAuE;IACvE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,OAAO,EACP,eAAe,EACf,KAAK,EACL,UAAU,GACX,EAAE,qBAAqB,QAgHvB"}
1
+ {"version":3,"file":"autoExternalSync.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/autoExternalSync.tsx"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAgIvD,iFAAiF;AACjF,wBAAgB,uBAAuB,IAAI,OAAO,CAEjD;AAED,MAAM,WAAW,mBAAmB;IAClC;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2EAA2E;IAC3E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qBAAqB;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAuBD,UAAU,qBAAqB;IAC7B,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B,6EAA6E;IAC7E,eAAe,CAAC,EAAE,YAAY,EAAE,CAAC;IACjC,8EAA8E;IAC9E,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,uEAAuE;IACvE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,OAAO,EACP,eAAe,EACf,KAAK,EACL,UAAU,GACX,EAAE,qBAAqB,QAmHvB"}
@@ -0,0 +1,38 @@
1
+ export declare const appSyncAdapter: {
2
+ version: number;
3
+ getSnapshot: () => {
4
+ startedAt: number;
5
+ reload: {
6
+ available: boolean;
7
+ strategy: import("@buoy-gg/shared-ui").ResolvedReloadStrategy | null;
8
+ };
9
+ };
10
+ subscribe: (_onChange: () => void) => () => void;
11
+ actions: {
12
+ /**
13
+ * Cheap round-trip liveness probe. Only a live JS realm can answer it, and
14
+ * `startedAt` identifies WHICH realm — that's how a driver confirms a
15
+ * reload actually completed rather than just being accepted.
16
+ */
17
+ ping: () => {
18
+ ok: boolean;
19
+ startedAt: number;
20
+ };
21
+ /**
22
+ * Reload the app's JS bundle: RN's `DevSettings.reload()` in dev builds,
23
+ * `expo-updates` otherwise. The same primitive perf-monitor's batch runner
24
+ * uses between cases, and the MCP server's `reload_app`.
25
+ *
26
+ * Returns BEFORE the reload fires: the realm dies the moment it does, so
27
+ * the ack has to be on the wire first (scheduleReloadApp arms it a beat
28
+ * later). An unavailable mechanism throws here, so the caller gets a real
29
+ * error instead of a silent no-op.
30
+ */
31
+ reloadApp: (params: unknown) => {
32
+ scheduled: boolean;
33
+ strategy: import("@buoy-gg/shared-ui").ResolvedReloadStrategy;
34
+ delayMs: number;
35
+ };
36
+ };
37
+ };
38
+ //# sourceMappingURL=appSyncAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appSyncAdapter.d.ts","sourceRoot":"","sources":["../../../../../src/floatingMenu/sync/appSyncAdapter.ts"],"names":[],"mappings":"AA6BA,eAAO,MAAM,cAAc;;;;;;;;;2BAcF,MAAM,IAAI;;QAE/B;;;;WAIG;;;;;QAEH;;;;;;;;;WASG;4BACiB,OAAO;;;;;;CAY9B,CAAC"}
@@ -3,6 +3,7 @@ export type { BuoyConfig } from "./Buoy";
3
3
  export { FloatingDevTools } from "./floatingMenu/FloatingDevTools";
4
4
  export type { FloatingDevToolsProps, EnvVarConfig, StorageKeyConfig, } from "./floatingMenu/FloatingDevTools";
5
5
  export type { ExternalSyncOptions } from "./floatingMenu/autoExternalSync";
6
+ export { appSyncAdapter } from "./floatingMenu/sync/appSyncAdapter";
6
7
  export { autoDiscoverPresets, autoDiscoverPresetsWithCustom, } from "./floatingMenu/autoDiscoverPresets";
7
8
  export { createDefaultConfig, validateDialConfig, isFloatingToolId, isDialToolId, MAX_DIAL_TOOLS, } from "./floatingMenu/defaultConfig";
8
9
  export type { BuiltInToolId, FloatingToolId, FloatingOnlyToolId, DialToolId, DefaultFloatingConfig, DefaultDialConfig, } from "./floatingMenu/defaultConfig";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,QAAQ,CAAC;AACtD,YAAY,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAGzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,YAAY,EACV,qBAAqB,EACrB,YAAY,EACZ,gBAAgB,GACjB,MAAM,iCAAiC,CAAC;AACzC,YAAY,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAG3E,OAAO,EACL,mBAAmB,EACnB,6BAA6B,GAC9B,MAAM,oCAAoC,CAAC;AAG5C,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EAChB,YAAY,EACZ,cAAc,GACf,MAAM,8BAA8B,CAAC;AACtC,YAAY,EACV,aAAa,EACb,cAAc,EACd,kBAAkB,EAClB,UAAU,EACV,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,8BAA8B,CAAC;AAGtC,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,cAAc,sBAAsB,CAAC;AACrC,OAAO,EACL,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,sCAAsC,CAAC;AAC9C,YAAY,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAGrG,OAAO,EACL,eAAe,EACf,UAAU,EACV,UAAU,GACX,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACL,0BAA0B,EAC1B,qBAAqB,GACtB,MAAM,0CAA0C,CAAC;AAGlD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAGvE,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,eAAe,EACf,WAAW,GACZ,MAAM,sCAAsC,CAAC;AAC9C,YAAY,EACV,aAAa,EACb,iBAAiB,EACjB,YAAY,GACb,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAIzE,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,UAAU,EACV,gBAAgB,EAChB,QAAQ,EACR,aAAa,EACb,KAAK,EACL,cAAc,GACf,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,sBAAsB,EACtB,0BAA0B,GAC3B,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,QAAQ,CAAC;AACtD,YAAY,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAGzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,YAAY,EACV,qBAAqB,EACrB,YAAY,EACZ,gBAAgB,GACjB,MAAM,iCAAiC,CAAC;AACzC,YAAY,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAI3E,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAGpE,OAAO,EACL,mBAAmB,EACnB,6BAA6B,GAC9B,MAAM,oCAAoC,CAAC;AAG5C,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EAChB,YAAY,EACZ,cAAc,GACf,MAAM,8BAA8B,CAAC;AACtC,YAAY,EACV,aAAa,EACb,cAAc,EACd,kBAAkB,EAClB,UAAU,EACV,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,8BAA8B,CAAC;AAGtC,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,cAAc,sBAAsB,CAAC;AACrC,OAAO,EACL,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,sCAAsC,CAAC;AAC9C,YAAY,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAGrG,OAAO,EACL,eAAe,EACf,UAAU,EACV,UAAU,GACX,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACL,0BAA0B,EAC1B,qBAAqB,GACtB,MAAM,0CAA0C,CAAC;AAGlD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAGvE,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,eAAe,EACf,WAAW,GACZ,MAAM,sCAAsC,CAAC;AAC9C,YAAY,EACV,aAAa,EACb,iBAAiB,EACjB,YAAY,GACb,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAIzE,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,UAAU,EACV,gBAAgB,EAChB,QAAQ,EACR,aAAa,EACb,KAAK,EACL,cAAc,GACf,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,sBAAsB,EACtB,0BAA0B,GAC3B,MAAM,kBAAkB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"FloatingDevTools.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/FloatingDevTools.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+D,MAAM,OAAO,CAAC;AAGpF,OAAO,EAAgB,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAMtE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAK5C,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,EAEvB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,oBAAoB,CAAC;AAE5B;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,YAAY,GACpB,MAAM,GACN;IACE,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GACD;IACE,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EACR,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,QAAQ,GACR,OAAO,GACP,KAAK,CAAC;IACV,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEN;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;IAC1D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;CAC1C;AAED;;;;;;GAMG;AACH,MAAM,WAAW,qBAAsB,SAAQ,IAAI,CAAC,iBAAiB,EAAE,MAAM,CAAC;IAC5E;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,IAAI,CAAC,EAAE,YAAY,EAAE,CAAC;IAEtB;;;;;;;;;;;;;;OAcG;IACH,eAAe,CAAC,EAAE,YAAY,EAAE,CAAC;IAEjC;;;;;;;;;;;;OAYG;IACH,mBAAmB,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAEzC;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAE3B;;;;;;;;;OASG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;;;;;;;;;;;;OAaG;IACH,oBAAoB,CAAC,EAAE,qBAAqB,CAAC;IAE7C;;;;;;;;;;;;;;OAcG;IACH,gBAAgB,CAAC,EAAE,iBAAiB,CAAC;IAErC;;;;;;;;;;;;;;;;OAgBG;IACH,qBAAqB,CAAC,EAAE,OAAO,oBAAoB,EAAE,WAAW,EAAE,CAAC;IAEnE;;;;;;;;;;;;;OAaG;IACH,mBAAmB,CAAC,EAAE,CAAC,WAAW,EAAE,OAAO,oBAAoB,EAAE,WAAW,KAAK,IAAI,CAAC;IAEtF;;;;;;;;;;OAUG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;;;;;;;OAQG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;;;;;;;;;;;;;;;;OAkBG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAEpC;;;;;;;;;;;;;;;;;OAiBG;IACH,YAAY,CAAC,EAAE,OAAO,GAAG,mBAAmB,CAAC;IAE7C;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AACH,eAAO,MAAM,gBAAgB,GAAI,0NAe9B,qBAAqB,6BAgTvB,CAAC"}
1
+ {"version":3,"file":"FloatingDevTools.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/FloatingDevTools.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+D,MAAM,OAAO,CAAC;AAGpF,OAAO,EAAgB,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAMtE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAK5C,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,EAEvB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,oBAAoB,CAAC;AAE5B;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,YAAY,GACpB,MAAM,GACN;IACE,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GACD;IACE,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EACR,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,QAAQ,GACR,OAAO,GACP,KAAK,CAAC;IACV,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEN;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;IAC1D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;CAC1C;AAED;;;;;;GAMG;AACH,MAAM,WAAW,qBAAsB,SAAQ,IAAI,CAAC,iBAAiB,EAAE,MAAM,CAAC;IAC5E;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,IAAI,CAAC,EAAE,YAAY,EAAE,CAAC;IAEtB;;;;;;;;;;;;;;OAcG;IACH,eAAe,CAAC,EAAE,YAAY,EAAE,CAAC;IAEjC;;;;;;;;;;;;OAYG;IACH,mBAAmB,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAEzC;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAE3B;;;;;;;;;OASG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;;;;;;;;;;;;OAaG;IACH,oBAAoB,CAAC,EAAE,qBAAqB,CAAC;IAE7C;;;;;;;;;;;;;;OAcG;IACH,gBAAgB,CAAC,EAAE,iBAAiB,CAAC;IAErC;;;;;;;;;;;;;;;;OAgBG;IACH,qBAAqB,CAAC,EAAE,OAAO,oBAAoB,EAAE,WAAW,EAAE,CAAC;IAEnE;;;;;;;;;;;;;OAaG;IACH,mBAAmB,CAAC,EAAE,CAAC,WAAW,EAAE,OAAO,oBAAoB,EAAE,WAAW,KAAK,IAAI,CAAC;IAEtF;;;;;;;;;;OAUG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;;;;;;;OAQG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;;;;;;;;;;;;;;;;OAkBG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAEpC;;;;;;;;;;;;;;;;;OAiBG;IACH,YAAY,CAAC,EAAE,OAAO,GAAG,mBAAmB,CAAC;IAE7C;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AACH,eAAO,MAAM,gBAAgB,GAAI,0NAe9B,qBAAqB,6BAwVvB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"allToolsRegistry.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/allToolsRegistry.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAgE1B,MAAM,WAAW,aAAa;IAC5B,wEAAwE;IACxE,EAAE,EAAE,MAAM,CAAC;IACX,2DAA2D;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,mBAAmB;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,+DAA+D;IAC/D,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAC;CAC/C;AAID;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,kBAAkB,EAAE,aAAa,EAyE7C,CAAC"}
1
+ {"version":3,"file":"allToolsRegistry.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/allToolsRegistry.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAwC1B,MAAM,WAAW,aAAa;IAC5B,wEAAwE;IACxE,EAAE,EAAE,MAAM,CAAC;IACX,2DAA2D;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,mBAAmB;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,+DAA+D;IAC/D,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAC;CAC/C;AAID;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,kBAAkB,EAAE,aAAa,EAyE7C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"autoDiscoverPresets.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/autoDiscoverPresets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAG5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,wBAAgB,mBAAmB,IAAI,YAAY,EAAE,CAwPpD;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,6BAA6B,CAC3C,WAAW,EAAE,YAAY,EAAE,GAC1B,YAAY,EAAE,CAahB"}
1
+ {"version":3,"file":"autoDiscoverPresets.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/autoDiscoverPresets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAG5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,wBAAgB,mBAAmB,IAAI,YAAY,EAAE,CAsQpD;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,6BAA6B,CAC3C,WAAW,EAAE,YAAY,EAAE,GAC1B,YAAY,EAAE,CAahB"}
@@ -1 +1 @@
1
- {"version":3,"file":"autoExternalSync.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/autoExternalSync.tsx"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AA+HvD,iFAAiF;AACjF,wBAAgB,uBAAuB,IAAI,OAAO,CAEjD;AAED,MAAM,WAAW,mBAAmB;IAClC;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2EAA2E;IAC3E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qBAAqB;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAuBD,UAAU,qBAAqB;IAC7B,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B,6EAA6E;IAC7E,eAAe,CAAC,EAAE,YAAY,EAAE,CAAC;IACjC,8EAA8E;IAC9E,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,uEAAuE;IACvE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,OAAO,EACP,eAAe,EACf,KAAK,EACL,UAAU,GACX,EAAE,qBAAqB,QAgHvB"}
1
+ {"version":3,"file":"autoExternalSync.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/autoExternalSync.tsx"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAgIvD,iFAAiF;AACjF,wBAAgB,uBAAuB,IAAI,OAAO,CAEjD;AAED,MAAM,WAAW,mBAAmB;IAClC;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2EAA2E;IAC3E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qBAAqB;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAuBD,UAAU,qBAAqB;IAC7B,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B,6EAA6E;IAC7E,eAAe,CAAC,EAAE,YAAY,EAAE,CAAC;IACjC,8EAA8E;IAC9E,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,uEAAuE;IACvE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,OAAO,EACP,eAAe,EACf,KAAK,EACL,UAAU,GACX,EAAE,qBAAqB,QAmHvB"}
@@ -0,0 +1,38 @@
1
+ export declare const appSyncAdapter: {
2
+ version: number;
3
+ getSnapshot: () => {
4
+ startedAt: number;
5
+ reload: {
6
+ available: boolean;
7
+ strategy: import("@buoy-gg/shared-ui").ResolvedReloadStrategy | null;
8
+ };
9
+ };
10
+ subscribe: (_onChange: () => void) => () => void;
11
+ actions: {
12
+ /**
13
+ * Cheap round-trip liveness probe. Only a live JS realm can answer it, and
14
+ * `startedAt` identifies WHICH realm — that's how a driver confirms a
15
+ * reload actually completed rather than just being accepted.
16
+ */
17
+ ping: () => {
18
+ ok: boolean;
19
+ startedAt: number;
20
+ };
21
+ /**
22
+ * Reload the app's JS bundle: RN's `DevSettings.reload()` in dev builds,
23
+ * `expo-updates` otherwise. The same primitive perf-monitor's batch runner
24
+ * uses between cases, and the MCP server's `reload_app`.
25
+ *
26
+ * Returns BEFORE the reload fires: the realm dies the moment it does, so
27
+ * the ack has to be on the wire first (scheduleReloadApp arms it a beat
28
+ * later). An unavailable mechanism throws here, so the caller gets a real
29
+ * error instead of a silent no-op.
30
+ */
31
+ reloadApp: (params: unknown) => {
32
+ scheduled: boolean;
33
+ strategy: import("@buoy-gg/shared-ui").ResolvedReloadStrategy;
34
+ delayMs: number;
35
+ };
36
+ };
37
+ };
38
+ //# sourceMappingURL=appSyncAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appSyncAdapter.d.ts","sourceRoot":"","sources":["../../../../../src/floatingMenu/sync/appSyncAdapter.ts"],"names":[],"mappings":"AA6BA,eAAO,MAAM,cAAc;;;;;;;;;2BAcF,MAAM,IAAI;;QAE/B;;;;WAIG;;;;;QAEH;;;;;;;;;WASG;4BACiB,OAAO;;;;;;CAY9B,CAAC"}
@@ -3,6 +3,7 @@ export type { BuoyConfig } from "./Buoy";
3
3
  export { FloatingDevTools } from "./floatingMenu/FloatingDevTools";
4
4
  export type { FloatingDevToolsProps, EnvVarConfig, StorageKeyConfig, } from "./floatingMenu/FloatingDevTools";
5
5
  export type { ExternalSyncOptions } from "./floatingMenu/autoExternalSync";
6
+ export { appSyncAdapter } from "./floatingMenu/sync/appSyncAdapter";
6
7
  export { autoDiscoverPresets, autoDiscoverPresetsWithCustom, } from "./floatingMenu/autoDiscoverPresets";
7
8
  export { createDefaultConfig, validateDialConfig, isFloatingToolId, isDialToolId, MAX_DIAL_TOOLS, } from "./floatingMenu/defaultConfig";
8
9
  export type { BuiltInToolId, FloatingToolId, FloatingOnlyToolId, DialToolId, DefaultFloatingConfig, DefaultDialConfig, } from "./floatingMenu/defaultConfig";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,QAAQ,CAAC;AACtD,YAAY,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAGzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,YAAY,EACV,qBAAqB,EACrB,YAAY,EACZ,gBAAgB,GACjB,MAAM,iCAAiC,CAAC;AACzC,YAAY,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAG3E,OAAO,EACL,mBAAmB,EACnB,6BAA6B,GAC9B,MAAM,oCAAoC,CAAC;AAG5C,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EAChB,YAAY,EACZ,cAAc,GACf,MAAM,8BAA8B,CAAC;AACtC,YAAY,EACV,aAAa,EACb,cAAc,EACd,kBAAkB,EAClB,UAAU,EACV,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,8BAA8B,CAAC;AAGtC,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,cAAc,sBAAsB,CAAC;AACrC,OAAO,EACL,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,sCAAsC,CAAC;AAC9C,YAAY,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAGrG,OAAO,EACL,eAAe,EACf,UAAU,EACV,UAAU,GACX,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACL,0BAA0B,EAC1B,qBAAqB,GACtB,MAAM,0CAA0C,CAAC;AAGlD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAGvE,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,eAAe,EACf,WAAW,GACZ,MAAM,sCAAsC,CAAC;AAC9C,YAAY,EACV,aAAa,EACb,iBAAiB,EACjB,YAAY,GACb,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAIzE,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,UAAU,EACV,gBAAgB,EAChB,QAAQ,EACR,aAAa,EACb,KAAK,EACL,cAAc,GACf,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,sBAAsB,EACtB,0BAA0B,GAC3B,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,QAAQ,CAAC;AACtD,YAAY,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAGzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,YAAY,EACV,qBAAqB,EACrB,YAAY,EACZ,gBAAgB,GACjB,MAAM,iCAAiC,CAAC;AACzC,YAAY,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAI3E,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAGpE,OAAO,EACL,mBAAmB,EACnB,6BAA6B,GAC9B,MAAM,oCAAoC,CAAC;AAG5C,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EAChB,YAAY,EACZ,cAAc,GACf,MAAM,8BAA8B,CAAC;AACtC,YAAY,EACV,aAAa,EACb,cAAc,EACd,kBAAkB,EAClB,UAAU,EACV,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,8BAA8B,CAAC;AAGtC,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,cAAc,sBAAsB,CAAC;AACrC,OAAO,EACL,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,sCAAsC,CAAC;AAC9C,YAAY,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAGrG,OAAO,EACL,eAAe,EACf,UAAU,EACV,UAAU,GACX,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACL,0BAA0B,EAC1B,qBAAqB,GACtB,MAAM,0CAA0C,CAAC;AAGlD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAGvE,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,eAAe,EACf,WAAW,GACZ,MAAM,sCAAsC,CAAC;AAC9C,YAAY,EACV,aAAa,EACb,iBAAiB,EACjB,YAAY,GACb,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAIzE,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,UAAU,EACV,gBAAgB,EAChB,QAAQ,EACR,aAAa,EACb,KAAK,EACL,cAAc,GACf,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,sBAAsB,EACtB,0BAA0B,GAC3B,MAAM,kBAAkB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@buoy-gg/core",
3
- "version": "7.0.4",
3
+ "version": "7.0.6",
4
4
  "description": "Buoy devtools for React Native — a floating in-app dev menu; every tool streams live to your phone, desktop, and AI agent.",
5
5
  "main": "lib/commonjs/index.js",
6
6
  "module": "lib/module/index.js",
@@ -22,10 +22,10 @@
22
22
  ],
23
23
  "sideEffects": false,
24
24
  "dependencies": {
25
- "@buoy-gg/shared-ui": "7.0.4",
26
- "@buoy-gg/license": "7.0.4",
27
- "@buoy-gg/floating-tools-core": "7.0.4",
28
- "@buoy-gg/floating-tools-react": "7.0.4"
25
+ "@buoy-gg/shared-ui": "7.0.6",
26
+ "@buoy-gg/license": "7.0.6",
27
+ "@buoy-gg/floating-tools-core": "7.0.6",
28
+ "@buoy-gg/floating-tools-react": "7.0.6"
29
29
  },
30
30
  "peerDependencies": {
31
31
  "react": "*",