@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.
- package/lib/commonjs/floatingMenu/FloatingDevTools.js +38 -3
- package/lib/commonjs/floatingMenu/allToolsRegistry.js +12 -67
- package/lib/commonjs/floatingMenu/autoDiscoverPresets.js +16 -0
- package/lib/commonjs/floatingMenu/autoExternalSync.js +7 -1
- package/lib/commonjs/floatingMenu/sync/appSyncAdapter.js +81 -0
- package/lib/commonjs/index.js +8 -0
- package/lib/module/floatingMenu/FloatingDevTools.js +38 -3
- package/lib/module/floatingMenu/allToolsRegistry.js +8 -64
- package/lib/module/floatingMenu/autoDiscoverPresets.js +16 -0
- package/lib/module/floatingMenu/autoExternalSync.js +7 -1
- package/lib/module/floatingMenu/sync/appSyncAdapter.js +78 -0
- package/lib/module/index.js +4 -0
- package/lib/typescript/commonjs/floatingMenu/FloatingDevTools.d.ts.map +1 -1
- package/lib/typescript/commonjs/floatingMenu/allToolsRegistry.d.ts.map +1 -1
- package/lib/typescript/commonjs/floatingMenu/autoDiscoverPresets.d.ts.map +1 -1
- package/lib/typescript/commonjs/floatingMenu/autoExternalSync.d.ts.map +1 -1
- package/lib/typescript/commonjs/floatingMenu/sync/appSyncAdapter.d.ts +38 -0
- package/lib/typescript/commonjs/floatingMenu/sync/appSyncAdapter.d.ts.map +1 -0
- package/lib/typescript/commonjs/index.d.ts +1 -0
- package/lib/typescript/commonjs/index.d.ts.map +1 -1
- package/lib/typescript/module/floatingMenu/FloatingDevTools.d.ts.map +1 -1
- package/lib/typescript/module/floatingMenu/allToolsRegistry.d.ts.map +1 -1
- package/lib/typescript/module/floatingMenu/autoDiscoverPresets.d.ts.map +1 -1
- package/lib/typescript/module/floatingMenu/autoExternalSync.d.ts.map +1 -1
- package/lib/typescript/module/floatingMenu/sync/appSyncAdapter.d.ts +38 -0
- package/lib/typescript/module/floatingMenu/sync/appSyncAdapter.d.ts.map +1 -0
- package/lib/typescript/module/index.d.ts +1 -0
- package/lib/typescript/module/index.d.ts.map +1 -1
- 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
|
-
|
|
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
|
-
// ───
|
|
31
|
-
//
|
|
32
|
-
//
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
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
|
-
|
|
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
|
+
};
|
package/lib/commonjs/index.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
// ───
|
|
26
|
-
//
|
|
27
|
-
//
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
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
|
-
|
|
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
|
+
};
|
package/lib/module/index.js
CHANGED
|
@@ -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,
|
|
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;
|
|
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,
|
|
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;
|
|
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;
|
|
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,
|
|
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;
|
|
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,
|
|
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;
|
|
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;
|
|
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.
|
|
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.
|
|
26
|
-
"@buoy-gg/license": "7.0.
|
|
27
|
-
"@buoy-gg/floating-tools-core": "7.0.
|
|
28
|
-
"@buoy-gg/floating-tools-react": "7.0.
|
|
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": "*",
|