@buoy-gg/core 7.0.3 → 7.0.5
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/README.md +1 -1
- package/lib/commonjs/floatingMenu/allToolsRegistry.js +12 -67
- 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/allToolsRegistry.js +8 -64
- 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/allToolsRegistry.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/allToolsRegistry.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
package/README.md
CHANGED
|
@@ -101,7 +101,7 @@ Need the session with **no on-device UI at all** — field builds or devices han
|
|
|
101
101
|
- [Buoy Desktop](https://github.com/Buoy-gg/Buoy-Desktop)
|
|
102
102
|
- [Pricing](https://buoy.gg/pricing)
|
|
103
103
|
|
|
104
|
-
> 🎯 **Flutter (beta):** Buoy is now
|
|
104
|
+
> 🎯 **Flutter (beta):** Buoy is now a full suite for Flutter — `flutter pub add buoy`. Network, storage, console, env, routes, images, Riverpod, events, and a live perf HUD, all streaming to the same desktop dashboard and MCP server. [Details →](https://buoy.gg/flutter)
|
|
105
105
|
|
|
106
106
|
## License
|
|
107
107
|
|
|
@@ -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",
|
|
@@ -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");
|
|
@@ -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
|
/**
|
|
@@ -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":"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":"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":"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":"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.5",
|
|
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/
|
|
27
|
-
"@buoy-gg/
|
|
28
|
-
"@buoy-gg/floating-tools-react": "7.0.
|
|
25
|
+
"@buoy-gg/shared-ui": "7.0.5",
|
|
26
|
+
"@buoy-gg/license": "7.0.5",
|
|
27
|
+
"@buoy-gg/floating-tools-core": "7.0.5",
|
|
28
|
+
"@buoy-gg/floating-tools-react": "7.0.5"
|
|
29
29
|
},
|
|
30
30
|
"peerDependencies": {
|
|
31
31
|
"react": "*",
|